ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL01ha2VmaWxlIGIvcnVudGltZS9kb2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3NTY1ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL01ha2VmaWxlCkBAIC0wLDAgKzEsMzYzIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVmltIGRvY3VtZW50YXRpb24gb24gVW5peAorIworIyBJZiB5b3UgZ2V0ICJkb24ndCBrbm93IGhvdyB0byBtYWtlIHNjcmF0Y2giLCBmaXJzdCBydW4gbWFrZSBpbiB0aGUgc291cmNlCisjIGRpcmVjdG9yeS4gIE9yIHJlbW92ZSB0aGUgaW5jbHVkZSBiZWxvdy4KKworQVdLID0gYXdrCisKKyMgU2V0IHRvICQoVklNVEFSR0VUKSB3aGVuIGV4ZWN1dGVkIGZyb20gc3JjL01ha2VmaWxlLgorVklNRVhFID0gdmltCisKKyMgaW5jbHVkZSB0aGUgY29uZmlnLm1rIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkuICBJdCdzIG9ubHkgbmVlZGVkIHRvIHNldAorIyBBV0ssIHVzZWQgZm9yICJtYWtlIGh0bWwiLiAgQ29tbWVudCB0aGlzIG91dCBpZiB0aGUgaW5jbHVkZSBnaXZlcyBwcm9ibGVtcy4KK2luY2x1ZGUgLi4vLi4vc3JjL2F1dG8vY29uZmlnLm1rCisKK0RPQ1MgPSBcCisJYXJhYmljLnR4dCBcCisJYXV0b2NtZC50eHQgXAorCWNoYW5nZS50eHQgXAorCWNtZGxpbmUudHh0IFwKKwlkZWJ1Z2dlci50eHQgXAorCWRldmVsb3AudHh0IFwKKwlkaWZmLnR4dCBcCisJZGlncmFwaC50eHQgXAorCWVkaXRpbmcudHh0IFwKKwlldmFsLnR4dCBcCisJZmFyc2kudHh0IFwKKwlmaWxldHlwZS50eHQgXAorCWZvbGQudHh0IFwKKwlndWkudHh0IFwKKwlndWlfdzE2LnR4dCBcCisJZ3VpX3czMi50eHQgXAorCWd1aV94MTEudHh0IFwKKwloYW5ndWxpbi50eHQgXAorCWhlYnJldy50eHQgXAorCWhlbHAudHh0IFwKKwlob3d0by50eHQgXAorCWlmX2NzY29wLnR4dCBcCisJaWZfb2xlLnR4dCBcCisJaWZfcGVybC50eHQgXAorCWlmX3B5dGgudHh0IFwKKwlpZl9ydWJ5LnR4dCBcCisJaWZfc25pZmYudHh0IFwKKwlpZl90Y2wudHh0IFwKKwlpbmRlbnQudHh0IFwKKwlpbmRleC50eHQgXAorCWluc2VydC50eHQgXAorCWludHJvLnR4dCBcCisJbWFwLnR4dCBcCisJbWVzc2FnZS50eHQgXAorCW1vdGlvbi50eHQgXAorCW1ieXRlLnR4dCBcCisJbWxhbmcudHh0IFwKKwluZXRiZWFucy50eHQgXAorCW9wdGlvbnMudHh0IFwKKwlvc18zOTAudHh0IFwKKwlvc19hbWlnYS50eHQgXAorCW9zX2Jlb3MudHh0IFwKKwlvc19kb3MudHh0IFwKKwlvc19tYWMudHh0IFwKKwlvc19taW50LnR4dCBcCisJb3NfbXNkb3MudHh0IFwKKwlvc19vczIudHh0IFwKKwlvc19xbngudHh0IFwKKwlvc19yaXNjLnR4dCBcCisJb3NfdW5peC50eHQgXAorCW9zX3Ztcy50eHQgXAorCW9zX3dpbjMyLnR4dCBcCisJcGF0dGVybi50eHQgXAorCXBpX2V4cGwudHh0IFwKKwlwaV9nemlwLnR4dCBcCisJcGlfbmV0cncudHh0IFwKKwlwaV9zcGVjLnR4dCBcCisJcXVpY2tmaXgudHh0IFwKKwlxdWlja3JlZi50eHQgXAorCXF1b3Rlcy50eHQgXAorCXJlY292ZXIudHh0IFwKKwlyZW1vdGUudHh0IFwKKwlyZXBlYXQudHh0IFwKKwlyaWxlZnQudHh0IFwKKwlydXNzaWFuLnR4dCBcCisJc2Nyb2xsLnR4dCBcCisJc2lnbi50eHQgXAorCXNwb25zb3IudHh0IFwKKwlzdGFydGluZy50eHQgXAorCXN5bnRheC50eHQgXAorCXRhZ3NyY2gudHh0IFwKKwl0ZXJtLnR4dCBcCisJdGlwcy50eHQgXAorCXRvZG8udHh0IFwKKwl1Z2FuZGEudHh0IFwKKwl1bmRvLnR4dCBcCisJdXNyXzAxLnR4dCBcCisJdXNyXzAyLnR4dCBcCisJdXNyXzAzLnR4dCBcCisJdXNyXzA0LnR4dCBcCisJdXNyXzA1LnR4dCBcCisJdXNyXzA2LnR4dCBcCisJdXNyXzA3LnR4dCBcCisJdXNyXzA4LnR4dCBcCisJdXNyXzA5LnR4dCBcCisJdXNyXzEwLnR4dCBcCisJdXNyXzExLnR4dCBcCisJdXNyXzEyLnR4dCBcCisJdXNyXzIwLnR4dCBcCisJdXNyXzIxLnR4dCBcCisJdXNyXzIyLnR4dCBcCisJdXNyXzIzLnR4dCBcCisJdXNyXzI0LnR4dCBcCisJdXNyXzI1LnR4dCBcCisJdXNyXzI2LnR4dCBcCisJdXNyXzI3LnR4dCBcCisJdXNyXzI4LnR4dCBcCisJdXNyXzI5LnR4dCBcCisJdXNyXzMwLnR4dCBcCisJdXNyXzMxLnR4dCBcCisJdXNyXzQwLnR4dCBcCisJdXNyXzQxLnR4dCBcCisJdXNyXzQyLnR4dCBcCisJdXNyXzQzLnR4dCBcCisJdXNyXzQ0LnR4dCBcCisJdXNyXzQ1LnR4dCBcCisJdXNyXzkwLnR4dCBcCisJdXNyX3RvYy50eHQgXAorCXZhcmlvdXMudHh0IFwKKwl2ZXJzaW9uNC50eHQgXAorCXZlcnNpb241LnR4dCBcCisJdmVyc2lvbjYudHh0IFwKKwl2aV9kaWZmLnR4dCBcCisJdmlzdWFsLnR4dCBcCisJd2luZG93cy50eHQgXAorCXdvcmtzaG9wLnR4dAorCitIVE1MUyA9IFwKKwlhcmFiaWMuaHRtbCBcCisJYXV0b2NtZC5odG1sIFwKKwljaGFuZ2UuaHRtbCBcCisJY21kbGluZS5odG1sIFwKKwlkZWJ1Z2dlci5odG1sIFwKKwlkZXZlbG9wLmh0bWwgXAorCWRpZmYuaHRtbCBcCisJZGlncmFwaC5odG1sIFwKKwllZGl0aW5nLmh0bWwgXAorCWV2YWwuaHRtbCBcCisJZmFyc2kuaHRtbCBcCisJZmlsZXR5cGUuaHRtbCBcCisJZm9sZC5odG1sIFwKKwlndWkuaHRtbCBcCisJZ3VpX3cxNi5odG1sIFwKKwlndWlfdzMyLmh0bWwgXAorCWd1aV94MTEuaHRtbCBcCisJaGFuZ3VsaW4uaHRtbCBcCisJaGVicmV3Lmh0bWwgXAorCWhlbHAuaHRtbCBcCisJaG93dG8uaHRtbCBcCisJaWZfY3Njb3AuaHRtbCBcCisJaWZfb2xlLmh0bWwgXAorCWlmX3BlcmwuaHRtbCBcCisJaWZfcHl0aC5odG1sIFwKKwlpZl9ydWJ5Lmh0bWwgXAorCWlmX3NuaWZmLmh0bWwgXAorCWlmX3RjbC5odG1sIFwKKwlpbmRlbnQuaHRtbCBcCisJaW5kZXguaHRtbCBcCisJaW5zZXJ0Lmh0bWwgXAorCWludHJvLmh0bWwgXAorCW1hcC5odG1sIFwKKwltZXNzYWdlLmh0bWwgXAorCW1vdGlvbi5odG1sIFwKKwltYnl0ZS5odG1sIFwKKwltbGFuZy5odG1sIFwKKwluZXRiZWFucy5odG1sIFwKKwlvcHRpb25zLmh0bWwgXAorCW9zXzM5MC5odG1sIFwKKwlvc19hbWlnYS5odG1sIFwKKwlvc19iZW9zLmh0bWwgXAorCW9zX2Rvcy5odG1sIFwKKwlvc19tYWMuaHRtbCBcCisJb3NfbWludC5odG1sIFwKKwlvc19tc2Rvcy5odG1sIFwKKwlvc19vczIuaHRtbCBcCisJb3NfcW54Lmh0bWwgXAorCW9zX3Jpc2MuaHRtbCBcCisJb3NfdW5peC5odG1sIFwKKwlvc192bXMuaHRtbCBcCisJb3Nfd2luMzIuaHRtbCBcCisJcGF0dGVybi5odG1sIFwKKwlwaV9leHBsLmh0bWwgXAorCXBpX2d6aXAuaHRtbCBcCisJcGlfbmV0cncuaHRtbCBcCisJcGlfc3BlYy5odG1sIFwKKwlxdWlja2ZpeC5odG1sIFwKKwlxdWlja3JlZi5odG1sIFwKKwlxdW90ZXMuaHRtbCBcCisJcmVjb3Zlci5odG1sIFwKKwlyZW1vdGUuaHRtbCBcCisJcmVwZWF0Lmh0bWwgXAorCXJpbGVmdC5odG1sIFwKKwlydXNzaWFuLmh0bWwgXAorCXNjcm9sbC5odG1sIFwKKwlzaWduLmh0bWwgXAorCXNwb25zb3IuaHRtbCBcCisJc3RhcnRpbmcuaHRtbCBcCisJc3ludGF4Lmh0bWwgXAorCXRhZ3NyY2guaHRtbCBcCisJdGFncy5odG1sIFwKKwl0ZXJtLmh0bWwgXAorCXRpcHMuaHRtbCBcCisJdG9kby5odG1sIFwKKwl1Z2FuZGEuaHRtbCBcCisJdW5kby5odG1sIFwKKwl1c3JfMDEuaHRtbCBcCisJdXNyXzAyLmh0bWwgXAorCXVzcl8wMy5odG1sIFwKKwl1c3JfMDQuaHRtbCBcCisJdXNyXzA1Lmh0bWwgXAorCXVzcl8wNi5odG1sIFwKKwl1c3JfMDcuaHRtbCBcCisJdXNyXzA4Lmh0bWwgXAorCXVzcl8wOS5odG1sIFwKKwl1c3JfMTAuaHRtbCBcCisJdXNyXzExLmh0bWwgXAorCXVzcl8xMi5odG1sIFwKKwl1c3JfMjAuaHRtbCBcCisJdXNyXzIxLmh0bWwgXAorCXVzcl8yMi5odG1sIFwKKwl1c3JfMjMuaHRtbCBcCisJdXNyXzI0Lmh0bWwgXAorCXVzcl8yNS5odG1sIFwKKwl1c3JfMjYuaHRtbCBcCisJdXNyXzI3Lmh0bWwgXAorCXVzcl8yOC5odG1sIFwKKwl1c3JfMjkuaHRtbCBcCisJdXNyXzMwLmh0bWwgXAorCXVzcl8zMS5odG1sIFwKKwl1c3JfNDAuaHRtbCBcCisJdXNyXzQxLmh0bWwgXAorCXVzcl80Mi5odG1sIFwKKwl1c3JfNDMuaHRtbCBcCisJdXNyXzQ0Lmh0bWwgXAorCXVzcl80NS5odG1sIFwKKwl1c3JfOTAuaHRtbCBcCisJdXNyX3RvYy5odG1sIFwKKwl2YXJpb3VzLmh0bWwgXAorCXZlcnNpb240Lmh0bWwgXAorCXZlcnNpb241Lmh0bWwgXAorCXZlcnNpb242Lmh0bWwgXAorCXZpX2RpZmYuaHRtbCBcCisJdmlzdWFsLmh0bWwgXAorCXdpbmRvd3MuaHRtbCBcCisJd29ya3Nob3AuaHRtbAorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5vIC50eHQgLmh0bWwKKworYWxsOiB0YWdzIHZpbS5tYW4gdmltZGlmZi5tYW4gdmltdHV0b3IubWFuIHh4ZC5tYW4KKworIyBVc2UgVmltIHRvIGdlbmVyYXRlIHRoZSB0YWdzIGZpbGUuICBDYW4gb25seSBiZSB1c2VkIHdoZW4gVmltIGhhcyBiZWVuCisjIGNvbXBpbGVkIGFuZCBpbnN0YWxsZWQuICBTdXBwb3J0cyBtdWx0aXBsZSBsYW5ndWFnZXMuCit2aW10YWdzOiAkKERPQ1MpCisJJChWSU1FWEUpIC11IE5PTkUgLWVzWCAtYyAiaGVscHRhZ3MgLiIgLWMgcXVpdAorCisjIFVzZSAiZG9jdGFncyIgdG8gZ2VuZXJhdGUgdGhlIHRhZ3MgZmlsZS4gIE9ubHkgd29ya3MgZm9yIEVuZ2xpc2ghCit0YWdzOiBkb2N0YWdzICQoRE9DUykKKwkuL2RvY3RhZ3MgJChET0NTKSB8IExBTkc9QyBMQ19BTEw9QyBzb3J0ID50YWdzCisJdW5pcSAtZCAtMiB0YWdzCisKK2RvY3RhZ3M6IGRvY3RhZ3MuYworCSQoQ0MpIGRvY3RhZ3MuYyAtbyBkb2N0YWdzCisKK3ZpbS5tYW46IHZpbS4xCisJbnJvZmYgLW1hbiB2aW0uMSB8IHNlZCAtZSBzLy4ILy9nID4gdmltLm1hbgorCit2aW1kaWZmLm1hbjogdmltZGlmZi4xCisJbnJvZmYgLW1hbiB2aW1kaWZmLjEgfCBzZWQgLWUgcy8uCC8vZyA+IHZpbWRpZmYubWFuCisKK3ZpbXR1dG9yLm1hbjogdmltdHV0b3IuMQorCW5yb2ZmIC1tYW4gdmltdHV0b3IuMSB8IHNlZCAtZSBzLy4ILy9nID4gdmltdHV0b3IubWFuCisKK3h4ZC5tYW46IHh4ZC4xCisJbnJvZmYgLW1hbiB4eGQuMSB8IHNlZCAtZSBzLy4ILy9nID4geHhkLm1hbgorCit1Z2FuZGEubnNpcy50eHQ6IHVnYW5kYS50eHQKKwlzZWQgLWUgJ3MvWyAJXSpcKlstYS16QS1aMC05Ll0qXCovL2cnIC1lICdzL3ZpbTp0dz03ODovLycgXAorCQl1Z2FuZGEudHh0IHwgdW5pcSA+dWdhbmRhLm5zaXMudHh0CisKKyMgQXdrIHZlcnNpb24gb2YgLnR4dCB0byAuaHRtbCBjb252ZXJzaW9uLgoraHRtbDogbm9lcnJvcnMgdGFncyB0YWdzLnJlZiAkKEhUTUxTKQorCUBpZiB0ZXN0IC1mIGVycm9ycy5sb2c7IHRoZW4gbW9yZSBlcnJvcnMubG9nOyBmaQorCitub2Vycm9yczoKKwktcm0gLWYgZXJyb3JzLmxvZworCisudHh0Lmh0bWw6CisJJChBV0spIC1mIG1ha2VodG1sLmF3ayAkPCA+JEAKKwordGFncy5yZWYgdGFncy5odG1sOiB0YWdzCisJJChBV0spIC1mIG1ha2V0YWdzLmF3ayB0YWdzID50YWdzLmh0bWwKKworIyBQZXJsIHZlcnNpb24gb2YgLnR4dCB0byAuaHRtbCBjb252ZXJzaW9uLgorIyBUaGVyZSBjYW4ndCBiZSB0d28gcnVsZXMgdG8gcHJvZHVjZSBhIC5odG1sIGZyb20gYSAudHh0IGZpbGUuCisjIEp1c3QgcnVuIG92ZXIgYWxsIC50eHQgZmlsZXMgZWFjaCB0aW1lIG9uZSBjaGFuZ2VzLiAgSXQncyBmYXN0IGFueXdheS4KK3BlcmxodG1sOiB0YWdzICQoRE9DUykKKwkuL3ZpbTJodG1sLnBsIHRhZ3MgJChET0NTKQorCitjbGVhbjoKKwktcm0gZG9jdGFncyAqLmh0bWwgdGFncy5yZWYKKworIyBUaGVzZSBmaWxlcyBhcmUgaW4gdGhlIGV4dHJhIGFyY2hpdmUsIHNraXAgaWYgbm90IHByZXNlbnQKKworYXJhYmljLnR4dDoKKwl0b3VjaCBhcmFiaWMudHh0CisKK2ZhcnNpLnR4dDoKKwl0b3VjaCBmYXJzaS50eHQKKworaGVicmV3LnR4dDoKKwl0b3VjaCBoZWJyZXcudHh0CisKK3J1c3NpYW4udHh0OgorCXRvdWNoIHJ1c3NpYW4udHh0CisKK2d1aV93MTYudHh0OgorCXRvdWNoIGd1aV93MTYudHh0CisKK2d1aV93MzIudHh0OgorCXRvdWNoIGd1aV93MzIudHh0CisKK2lmX29sZS50eHQ6CisJdG91Y2ggaWZfb2xlLnR4dAorCitvc18zOTAudHh0OgorCXRvdWNoIG9zXzM5MC50eHQKKworb3NfYW1pZ2EudHh0OgorCXRvdWNoIG9zX2FtaWdhLnR4dAorCitvc19iZW9zLnR4dDoKKwl0b3VjaCBvc19iZW9zLnR4dAorCitvc19kb3MudHh0OgorCXRvdWNoIG9zX2Rvcy50eHQKKworb3NfbWFjLnR4dDoKKwl0b3VjaCBvc19tYWMudHh0CisKK29zX21pbnQudHh0OgorCXRvdWNoIG9zX21pbnQudHh0CisKK29zX21zZG9zLnR4dDoKKwl0b3VjaCBvc19tc2Rvcy50eHQKKworb3Nfb3MyLnR4dDoKKwl0b3VjaCBvc19vczIudHh0CisKK29zX3FueC50eHQ6CisJdG91Y2ggb3NfcW54LnR4dAorCitvc19yaXNjLnR4dDoKKwl0b3VjaCBvc19yaXNjLnR4dAorCitvc193aW4zMi50eHQ6CisJdG91Y2ggb3Nfd2luMzIudHh0CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9hcmFiaWMudHh0IGIvcnVudGltZS9kb2MvYXJhYmljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDk2MTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvYXJhYmljLnR4dApAQCAtMCwwICsxLDMyMyBAQAorKmFyYWJpYy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwOQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IE5hZGltIFNoYWlrbGkKKworCitBcmFiaWMgTGFuZ3VhZ2Ugc3VwcG9ydCAob3B0aW9ucyAmIG1hcHBpbmdzKSBmb3IgVmltCQkqQXJhYmljKgorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKKwkJCQkJCQkJKkU4MDAqCitJbiBvcmRlciB0byB1c2UgcmlnaHQtdG8tbGVmdCBhbmQgQXJhYmljIG1hcHBpbmcgc3VwcG9ydCwgaXQgaXMKK25lY2Vzc2FyeSB0byBjb21waWxlIFZJTSB3aXRoIHRoZSB8K2FyYWJpY3wgZmVhdHVyZS4KKworVGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBjcmVhdGVkIGJ5IE5hZGltIFNoYWlrbGkgPG5hZGltLWF0LWFyYWJleWVzLm9yZz4KKworSXQgaXMgYmVzdCB0byB2aWV3IHRoaXMgZmlsZSB3aXRoIHRoZXNlIHNldHRpbmdzIHdpdGhpbiBWSU0ncyBHVUk6ID4KKworCTpzZXQgZW5jb2Rpbmc9dXRmLTgKKwk6c2V0IGFyYWJpY3NoYXBlCisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KK0FyYWJpYyBpcyBhIHJhdGhlciBkZW1hbmRpbmcgbGFuZ3VhZ2UgaW4gd2hpY2ggYSBudW1iZXIgb2Ygc3BlY2lhbAorZmVhdHVyZXMgYXJlIHJlcXVpcmVkLglDaGFyYWN0ZXJzIGFyZSByaWdodC10by1sZWZ0IG9yaWVudGVkIGFuZAorb3VnaHQgdG8gYXBwZWFyIGFzIHN1Y2ggb24gdGhlIHNjcmVlbiAoaWUuIGZyb20gcmlnaHQgdG8gbGVmdCkuCitBcmFiaWMgYWxzbyByZXF1aXJlcyBzaGFwaW5nIG9mIGl0cyBjaGFyYWN0ZXJzLCBtZWFuaW5nIHRoZSBzYW1lCitjaGFyYWN0ZXIgaGFzIGEgZGlmZmVyZW50IHZpc3VhbCBmb3JtIGJhc2VkIG9uIGl0cyByZWxhdGl2ZSBsb2NhdGlvbgord2l0aGluIGEgd29yZCAoaW5pdGlhbCwgbWVkaWFsLCBmaW5hbCBvciBzdGFuZC1hbG9uZSkuCUFyYWJpYyBhbHNvCityZXF1aXJlcyB0d28gZGlmZmVyZW50IGZvcm1zIG9mIGNvbWJpbmluZyBhbmQgdGhlIGFiaWxpdHksIGluCitjZXJ0YWluIGluc3RhbmNlcywgdG8gZWl0aGVyIHN1cGVyaW1wb3NlIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9uIHRvcAorb2YgYW5vdGhlciAoY29tcG9zaW5nKSBvciB0aGUgYWN0dWFsIHN1YnN0aXR1dGlvbiBvZiB0d28gY2hhcmFjdGVycworaW50byBvbmUgKGNvbWJpbmluZykuICBMYXN0bHksIHRvIGRpc3BsYXkgQXJhYmljIHByb3Blcmx5IG9uZSB3aWxsCityZXF1aXJlIG5vdCBvbmx5IElTTy04ODU5LTYgKFUrMDYwMC1VKzA2RkYpIGZvbnRzLCBidXQgd2lsbCBhbHNvCityZXF1aXJlIFByZXNlbnRhdGlvbiBGb3JtLUIgKFUrRkU3MC1VK0ZFRkYpIGZvbnRzIGJvdGggb2Ygd2hpY2ggYXJlCitzdWJzZXRzIHdpdGhpbiBhIHNvLWNhbGxlZCBJU08tMTA2NDYtMSBmb250LgorCitUaGUgY29tbWFuZHMsIHByb21wdHMgYW5kIGhlbHAgZmlsZXMgYXJlIG5vdCBpbiBBcmFiaWMsIHRoZXJlZm9yZQordGhlIHVzZXIgaW50ZXJmYWNlIHJlbWFpbnMgdGhlIHN0YW5kYXJkIFZpIGludGVyZmFjZS4KKworCitIaWdobGlnaHRzCistLS0tLS0tLS0tCitvICBFZGl0aW5nIGxlZnQtdG8tcmlnaHQgZmlsZXMgYXMgaW4gdGhlIG9yaWdpbmFsIFZJTSBoYXNuJ3QgY2hhbmdlZC4KKworbyAgVmlld2luZyBhbmQgZWRpdGluZyBmaWxlcyBpbiByaWdodC10by1sZWZ0IHdpbmRvd3MuCSBGaWxlCisgICBvcmllbnRhdGlvbiBpcyBwZXIgd2luZG93LCBzbyBpdCBpcyBwb3NzaWJsZSB0byB2aWV3IHRoZSBzYW1lCisgICBmaWxlIGluIHJpZ2h0LXRvLWxlZnQgYW5kIGxlZnQtdG8tcmlnaHQgbW9kZXMsIHNpbXVsdGFuZW91c2x5LgorCitvICBObyBzcGVjaWFsIHRlcm1pbmFsIHdpdGggcmlnaHQtdG8tbGVmdCBjYXBhYmlsaXRpZXMgaXMgcmVxdWlyZWQuCisgICBUaGUgcmlnaHQtdG8tbGVmdCBjaGFuZ2VzIGFyZSBjb21wbGV0ZWx5IGhhcmR3YXJlIGluZGVwZW5kZW50LgorICAgT25seSBBcmFiaWMgZm9udHMgYXJlIG5lY2Vzc2FyeS4KKworbyAgQ29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbCBWSU0uICAgQWxtb3N0IGFsbCBmZWF0dXJlcyB3b3JrIGluCisgICByaWdodC10by1sZWZ0IG1vZGUgKHRoZXJlIGFyZSBsaWFibGUgdG8gYmUgYnVncykuCisKK28gIENoYW5naW5nIGtleWJvYXJkIG1hcHBpbmcgYW5kIHJldmVyc2UgaW5zZXJ0IG1vZGVzIHVzaW5nIGEgc2luZ2xlCisgICBjb21tYW5kLgorCitvICBUb2dnbGluZyBjb21wbGV0ZSBBcmFiaWMgc3VwcG9ydCB2aWEgYSBzaW5nbGUgY29tbWFuZC4KKworbyAgV2hpbGUgaW4gQXJhYmljIG1vZGUsIG51bWJlcnMgYXJlIGVudGVyZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBVcG9uCisgICBlbnRlcmluZyBhIG5vbmUgbnVtYmVyIGNoYXJhY3RlciwgdGhhdCBjaGFyYWN0ZXIgd2lsbCBiZSBpbnNlcnRlZAorICAganVzdCBpbnRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IG51bWJlci4KKworbyAgQXJhYmljIGtleW1hcHBpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBpbiByZXZlcnNlIGluc2VydCBtb2RlLgorCitvICBQcm9wZXIgQmlkaXJlY3Rpb25hbCBmdW5jdGlvbmFsaXR5IGlzIHBvc3NpYmxlIGdpdmVuIFZJTSBpcworICAgc3RhcnRlZCB3aXRoaW4gYSBCaWRpIGNhcGFibGUgdGVybWluYWwgZW11bGF0b3IuCisKKworQXJhYmljIEZvbnRzCQkJCQkJKmFyYWJpY2ZvbnRzKgorLS0tLS0tLS0tLS0tCisKK1ZJTSByZXF1aXJlcyBtb25vc3BhY2VkIGZvbnRzIG9mIHdoaWNoIHRoZXJlIGFyZSBtYW55IG91dCB0aGVyZS4KK0FyYWJpYyByZXF1aXJlcyBJU08tODg1OS02IGFzIHdlbGwgYXMgUHJlc2VudGF0aW9uIEZvcm0tQiBmb250cworKHdpdGhvdXQgRm9ybS1CLCBBcmFiaWMgd2lsbCBfTk9UXyBiZSB1c2FibGUpLglJdCBpcyBoaWdobHkKK3JlY29tbWVuZGVkIHRoYXQgdXNlcnMgc2VhcmNoIGZvciBzby1jYWxsZWQgJ0lTTy0xMDY0Ni0xJyBmb250cy4KK0RvIGFuIEludGVybmV0IHNlYXJjaCBvciBjaGVjayB3d3cuYXJhYmV5ZXMub3JnIGZvciBmdXJ0aGVyCitpbmZvIG9uIHdoZXJlIHRvIGF0dGFpbiB0aGUgbmVjZXNzYXJ5IEFyYWJpYyBmb250cy4KKworCitGb250IEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBYIFdpbmRvdyBzeXN0ZW1zIChVbml4L0xpbnV4KQorCisgICBEZXBlbmRpbmcgb24geW91ciBzeXN0ZW0sIGNvcHkgeW91cl9BUkFCSUNfRk9OVCBmaWxlIGludG8gYQorICAgZGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLiAgQ2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZworICAgdGhlIEFyYWJpYyBmb250cyBhbmQgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisgICAgICUJbWtmb250ZGlyCisgICAgICUJeHNldCArZnAgcGF0aF9uYW1lX29mX2FyYWJpY19mb250c19kaXJlY3RvcnkKKworCitVc2FnZQorLS0tLS0KK1ByaW9yIHRvIHRoZSBhY3R1YWwgdXNhZ2Ugb2YgQXJhYmljIHdpdGhpbiBWSU0sIGEgbnVtYmVyIG9mIHNldHRpbmdzCituZWVkIHRvIGJlIGFjY291bnRlZCBmb3IgYW5kIGludm9rZWQuCisKK28gIFNldHRpbmcgdGhlIEFyYWJpYyBmb250cworCisgICArICBGb3IgVklNIEdVSSBzZXQgdGhlICdndWlmb250JyB0byB5b3VyX0FSQUJJQ19GT05ULiBUaGlzIGlzIGRvbmUKKyAgICAgIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgVklNIHdpbmRvdy4KKz4KKwkJOnNldCBndWlmb250PXlvdXJfQVJBQklDX0ZPTlQKKzwKKyAgICAgIE5PVEU6IHRoZSBzdHJpbmcgJ3lvdXJfQVJBQklDX0ZPTlQnIGlzIHVzZWQgdG8gZGVub3RlIGEgY29tcGxldGUKKwkgICAgZm9udCBuYW1lIGFraW4gdG8gdGhhdCB1c2VkIGluIGxpbnV4L3VuaXggc3lzdGVtLgorCSAgICAoZWcuIC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzEwNjQ2LTEpCisKKyAgICAgIFlvdSBjYW4gYXBwZW5kIHRoZSAnZ3VpZm9udCcgc2V0IGNvbW1hbmQgdG8geW91ciAudmltcmMgZmlsZQorICAgICAgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzYW1lIGFib3ZlIG5vdGVkIHJlc3VsdHMuICBJbiBvdGhlciB3b3JkcywKKyAgICAgIHlvdSBjYW4gaW5jbHVkZSAnOnNldCBndWlmb250PXlvdXJfQVJBQklDX0ZPTlQnIHRvIHlvdXIgLnZpbXJjCisgICAgICBmaWxlLgorCisgICArICBVbmRlciB0aGUgWCBXaW5kb3cgZW52aXJvbm1lbnQsIHlvdSBjYW4gYWxzbyBzdGFydCBWSU0gd2l0aAorICAgICAgJy1mbiB5b3VyX0FSQUJJQ19GT05UJyBvcHRpb24uCisKK28gIFNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBFbmNvZGluZworICAgVG8gZW5hYmxlIHRoZSBjb3JyZWN0IEFyYWJpYyBlbmNvZGluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbmVlZHMKKyAgIHRvIGJlIGFwcGVuZGVkLAorPgorCQk6c2V0IGVuY29kaW5nPXV0Zi04Cis8CisgICB0byB5b3VyIC52aW1yYyBmaWxlIChlbnRlcmluZyB0aGUgY29tbWFuZCBtYW51YWxseSBpbnRvIHlvdSBWSU0KKyAgIHdpbmRvdyBpcyBoaWdobHkgZGlzY291cmFnZWQpLiAgSW4gc2hvcnQsIGluY2x1ZGUgJzpzZXQKKyAgIGVuY29kaW5nPXV0Zi04JyB0byB5b3VyIC52aW1yYyBmaWxlLgorCisgICBBdHRlbXB0cyB0byB1c2UgQXJhYmljIHdpdGhvdXQgVVRGLTggd2lsbCByZXN1bHQgdGhlIGZvbGxvd2luZworICAgd2FybmluZyBtZXNzYWdlLAorCisJCQkJCQkJCSpXMTcqICA+CisgICAgIEFyYWJpYyByZXF1aXJlcyBVVEYtOCwgZG8gJzpzZXQgZW5jb2Rpbmc9dXRmLTgnCisKK28gIEVuYWJsZSBBcmFiaWMgc2V0dGluZ3MgW3Nob3J0LWN1dF0KKworICAgSW4gb3JkZXIgdG8gc2ltcGxpZnkgYW5kIHN0cmVhbWxpbmUgdGhpbmdzLCB5b3UgY2FuIGVpdGhlciBpbnZva2UKKyAgIFZJTSB3aXRoIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uLAorCisgICAgICUgdmltIC1BIG15X3V0ZjhfYXJhYmljX2ZpbGUgLi4uCisKKyAgIG9yIGVuYWJsZSAnYXJhYmljJyB2aWEgdGhlIGZvbGxvd2luZyBjb21tYW5kIHdpdGhpbiBWSU0KKz4KKwkJOnNldCBhcmFiaWMKKzwKKyAgIFRoZSB0d28gYWJvdmUgbm90ZWQgcG9zc2libGUgaW52b2NhdGlvbnMgYXJlIHRoZSBwcmVmZXJyZWQgbWFubmVyCisgICBpbiB3aGljaCB1c2VycyBhcmUgaW5zdHJ1Y3RlZCB0byBwcm9jZWVkLiAgQmFyaW5nIGFuIGVuYWJsZWQgJ3Rlcm1iaWRpJworICAgc2V0dGluZywgYm90aCBjb21tYW5kIG9wdGlvbnM6CisKKyAgICAgMS4gc2V0IHRoZSBhcHByb3ByaWF0ZSBrZXltYXAKKyAgICAgMi4gZW5hYmxlIHRoZSBkZWxldGlvbiBvZiBhIHNpbmdsZSBjb21iaW5lZCBwYWlyIGNoYXJhY3RlcgorICAgICAzLiBlbmFibGUgcmlnaHRsZWZ0ICAgIG1vZGUKKyAgICAgNC4gZW5hYmxlIHJpZ2h0bGVmdGNtZCBtb2RlIChhZmZlY3RpbmcgdGhlIGNvbW1hbmQtbGluZSkKKyAgICAgNS4gZW5hYmxlIGFyYWJpY3NoYXBlICBtb2RlIChkbyB2aXN1YWwgY2hhcmFjdGVyIGFsdGVyYXRpb25zKQorCisgICBZb3UgbWF5IGFsc28gYXBwZW5kIHRoZSBjb21tYW5kIHRvIHlvdXIgLnZpbXJjIGZpbGUgYW5kIHNpbXBseQorICAgaW5jbHVkZSAnOnNldCBhcmFiaWMnIHRvIGl0LgorCisgICBZb3UgYXJlIGFsc28gY2FwYWJsZSBvZiBkaXNhYmxpbmcgQXJhYmljIHN1cHBvcnQgdmlhCis+CisJCTpzZXQgbm9hcmFiaWMKKzwKKyAgIHdoaWNoIHJlc2V0cyBldmVyeXRoaW5nIHRoYXQgdGhlIGNvbW1hbmQgaGFkIGVuYWJsZWQgd2l0aG91dCB0b3VjaGluZworICAgdGhlIGdsb2JhbCBzZXR0aW5ncyBhcyB0aGV5IGNvdWxkIGFmZmVjdCBvdGhlciBwb3NzaWJsZSBvcGVuIGJ1ZmZlcnMuCisgICBJbiBzaG9ydCB0aGUgJ25vYXJhYmljJyBjb21tYW5kLAorCisgICAgIDEuIHJlc2V0cyB0byB0aGUgYWx0ZXJuYXRlIGtleW1hcAorICAgICAyLiBkaXNhYmxlcyB0aGUgZGVsZXRpb24gb2YgYSBzaW5nbGUgY29tYmluZWQgcGFpciBjaGFyYWN0ZXIKKyAgICAgMy4gZGlzYWJsZXMgcmlnaHRsZWZ0IG1vZGUKKworICAgTk9URTogdGhlICdhcmFiaWMnIGNvbW1hbmQgdGFrZXMgaW50byBjb25zaWRlcmF0aW9uICd0ZXJtYmlkaScgZm9yCisJIHBvc3NpYmxlIGV4dGVybmFsIGJpLWRpcmVjdGlvbmFsIChiaWRpKSBzdXBwb3J0IGZyb20gdGhlCisJIHRlcm1pbmFsICgibWx0ZXJtIiBmb3IgaW5zdGFuY2Ugb2ZmZXJzIHN1Y2ggc3VwcG9ydCkuCisJICd0ZXJtYmlkaScsIGlmIGF2YWlsYWJsZSwgaXMgc3VwZXJpb3IgdG8gcmlnaHRsZWZ0IHN1cHBvcnQKKwkgYW5kIGl0cyBzdXBwb3J0IGlzIHByZWZlcnJlZCBkdWUgdG8gaXRzIGxldmVsIG9mIG9mZmVyaW5ncy4KKwkgJ2FyYWJpYycgd2hlbiAndGVybWJpZGknIGlzIGVuYWJsZWQgb25seSBzZXRzIHRoZSBrZXltYXAuCisKKyAgIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgeW91J2QgbGlrZSB0byBiZSB2ZXJib3NlIGFuZCBleHBsaWNpdCBhbmQKKyAgIGFyZSBvcHRpbmcgbm90IHRvIHVzZSB0aGUgJ2FyYWJpYycgc2hvcnQtY3V0IGNvbW1hbmQsIGhlcmUncyB3aGF0CisgICBpcyBuZWVkZWQgKGllLiBpZiB5b3UgdXNlICc6c2V0IGFyYWJpYycgeW91IGNhbiBza2lwIHRoaXMgc2VjdGlvbikgLQorCisgICArICBBcmFiaWMgS2V5bWFwcGluZyBBY3RpdmF0aW9uCisKKyAgICAgIFRvIGFjdGl2YXRlIHRoZSBBcmFiaWMga2V5bWFwIChpZS4gdG8gcmVtYXAgeW91ciBFbmdsaXNoL0xhdGluCisgICAgICBrZXlib2FyZCB0byBsb29rLW4tZmVlbCBsaWtlIGEgc3RhbmRhcmQgQXJhYmljIG9uZSksIHNldCB0aGUKKyAgICAgICdrZXltYXAnIGNvbW1hbmQgdG8gImFyYWJpYyIuICBUaGlzIGlzIGRvbmUgYnkgZW50ZXJpbmcKKz4KKwkJOnNldCBrZXltYXA9YXJhYmljCis8CisgICAgICBpbiB5b3VyIFZJTSB3aW5kb3cuICBZb3UgY2FuIGFsc28gYXBwZW5kIHRoZSAna2V5bWFwJyBzZXQgY29tbWFuZCB0bworICAgICAgeW91ciAudmltcmMgZmlsZS4gIEluIG90aGVyIHdvcmRzLCB5b3UgY2FuIGluY2x1ZGUgJzpzZXQga2V5bWFwPWFyYWJpYycKKyAgICAgIHRvIHlvdXIgLnZpbXJjIGZpbGUuCisKKyAgICAgIFRvIHR1cm4gdG9nZ2xlIChvciBzd2l0Y2gpIHlvdXIga2V5bWFwcGluZyBiZXR3ZWVuIEFyYWJpYyBhbmQgdGhlCisgICAgICBkZWZhdWx0IG1hcHBpbmcgKEVuZ2xpc2gpLCBpdCBpcyBhZHZpc2VkIHRoYXQgdXNlcnMgdXNlIHRoZSAnQ1RSTC1eJworICAgICAga2V5IHByZXNzIHdoaWxlIGluIGluc2VydCAob3IgYWRkL3JlcGxhY2UpIG1vZGUuCVRoZSBjb21tYW5kLWxpbmUKKyAgICAgIHdpbGwgZGlzcGxheSB5b3VyIGN1cnJlbnQgbWFwcGluZyBieSBkaXNwbGF5aW5nIGFuICJBcmFiaWMiIHN0cmluZworICAgICAgbmV4dCB0byB5b3VyIGluc2VydGlvbiBtb2RlIChlZy4gLS0gSU5TRVJUIEFyYWJpYyAtLSkgaW5kaWNhdGluZworICAgICAgeW91ciBjdXJyZW50IGtleW1hcC4KKworICAgKyAgQXJhYmljIGRlbGV0aW9uIG9mIGEgY29tYmluZWQgcGFpciBjaGFyYWN0ZXIKKworICAgICAgQnkgZGVmYXVsdCBWSU0gaGFzIHRoZSAnZGVsY29tYmluZScgb3B0aW9uIGRpc2FibGVkLiAgVGhpcyBvcHRpb24KKyAgICAgIGFsbG93cyB0aGUgZGVsZXRpb24gb2YgQUxFRiBpbiBhIExBTV9BTEVGIChMQUEpIGNvbWJpbmVkIGNoYXJhY3RlcgorICAgICAgYW5kIHN0aWxsIHJldGFpbiB0aGUgTEFNIChpZS4gaXQgcmV2ZXJ0cyB0byB0cmVhdGluZyB0aGUgY29tYmluZWQKKyAgICAgIGNoYXJhY3RlciBhcyBpdHMgbmF0dXJhbCB0d28gY2hhcmFjdGVycyBmb3JtIC0tIHRoaXMgYWxzbyBwZXJ0YWlucworICAgICAgdG8gaGFyYWthdCBhbmQgdGhlaXIgY29tYmluZWQgZm9ybXMpLiAgWW91IGNhbiBlbmFibGUgdGhpcyBvcHRpb24KKyAgICAgIGJ5IGVudGVyaW5nCis+CisJCTpzZXQgZGVsY29tYmluZQorPAorICAgICAgaW4gb3VyIFZJTSB3aW5kb3cuICBZb3UgY2FuIGFsc28gYXBwZW5kIHRoZSAnZGVsY29tYmluZScgc2V0IGNvbW1hbmQKKyAgICAgIHRvIHlvdXIgLnZpbXJjIGZpbGUuICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBpbmNsdWRlICc6c2V0IGRlbGNvbWJpbmUnCisgICAgICB0byB5b3VyIC52aW1yYyBmaWxlLgorCisgICArICBBcmFiaWMgcmlnaHQtdG8tbGVmdCBNb2RlCisKKyAgICAgIEJ5IGRlZmF1bHQgVklNIHN0YXJ0cyBpbiBMZWZ0LXRvLXJpZ2h0IG1vZGUuICAncmlnaHRsZWZ0JyBpcyB0aGUKKyAgICAgIGNvbW1hbmQgdGhhdCBhbGxvd3Mgb25lIHRvIGFsdGVyIGEgd2luZG93J3Mgb3JpZW50YXRpb24gLSB0aGF0IGNhbgorICAgICAgYmUgYWNjb21wbGlzaGVkIHZpYSwKKworICAgICAgLSBUb2dnbGluZyBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQgbW9kZXMgaXMKKwlhY2NvbXBsaXNoZWQgdGhyb3VnaCAnOnNldCByaWdodGxlZnQnIGFuZCAnOnNldCBub3JpZ2h0bGVmdCcuCisKKyAgICAgIC0gV2hpbGUgaW4gTGVmdC10by1yaWdodCBtb2RlLCBlbnRlciAnOnNldCBybCcgaW4gdGhlIGNvbW1hbmQgbGluZQorCSgncmwnIGlzIHRoZSBhYmJyZXZpYXRpb24gZm9yIHJpZ2h0bGVmdCkuCisKKyAgICAgIC0gUHV0IHRoZSAnOnNldCBybCcgbGluZSBpbiB5b3VyICcudmltcmMnIGZpbGUgdG8gc3RhcnQgdGhlIFZJTSBpbgorCXJpZ2h0LXRvLWxlZnQgbW9kZSBwZXJtYW5lbnRseS4KKworICAgKyAgQXJhYmljIHJpZ2h0LXRvLWxlZnQgY29tbWFuZC1saW5lIE1vZGUKKworICAgICAgRm9yIGNlcnRhaW4gY29tbWFuZHMgdGhlIGVkaXRpbmcgY2FuIGJlIGRvbmUgaW4gcmlnaHQtdG8tbGVmdCBtb2RlLgorICAgICAgQ3VycmVudGx5IHRoaXMgaXMgb25seSBhcHBsaWNhYmxlIHRvIHNlYXJjaCBjb21tYW5kcy4KKworICAgICAgVGhpcyBpcyBjb250cm9sbGVkIHdpdGggdGhlICdyaWdodGxlZnRjbWQnIG9wdGlvbi4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAic2VhcmNoIiwgd2hpY2ggbWVhbnMgdGhhdCB3aW5kb3dzIGluIHdoaWNoICdyaWdodGxlZnQnIGlzIHNldCB3aWxsCisgICAgICBlZGl0IHNlYXJjaCBjb21tYW5kcyBpbiByaWdodC1sZWZ0IG1vZGUuCVRvIGRpc2FibGUgdGhpcyBiZWhhdmlvciwKKz4KKwkJOnNldCByaWdodGxlZnRjbWQ9Cis8CisgICAgICBUbyBlbmFibGUgcmlnaHQtbGVmdCBlZGl0aW5nIG9mIHNlYXJjaCBjb21tYW5kcyBhZ2FpbiwKKz4KKwkJOnNldCByaWdodGxlZnRjbWQmCis8CisgICArICBBcmFiaWMgU2hhcGluZyBNb2RlCisKKyAgICAgIFRvIGFjdGl2YXRlIHRoZSByZXF1aXJlZCB2aXN1YWwgY2hhcmFjdGVycyBhbHRlcmF0aW9ucyAoc2hhcGluZywKKyAgICAgIGNvbXBvc2luZywgY29tYmluaW5nKSB3aGljaCB0aGUgQXJhYmljIGxhbmd1YWdlIHJlcXVpcmVzLCBlbmFibGUKKyAgICAgIHRoZSAnYXJhYmljc2hhcGUnIGNvbW1hbmQuICBUaGlzIGlzIGRvbmUgYnkgZW50ZXJpbmcKKz4KKwkJOnNldCBhcmFiaWNzaGFwZQorPAorICAgICAgaW4gb3VyIFZJTSB3aW5kb3cuICBZb3UgY2FuIGFsc28gYXBwZW5kIHRoZSAnYXJhYmljc2hhcGUnIHNldAorICAgICAgY29tbWFuZCB0byB5b3VyIC52aW1yYyBmaWxlLiAgSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gaW5jbHVkZQorICAgICAgJzpzZXQgYXJhYmljc2hhcGUnIHRvIHlvdXIgLnZpbXJjIGZpbGUuCisKKworS2V5bWFwL0tleWJvYXJkCQkJCQkJKmFyYWJpY2tleW1hcCoKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgY2hhcmFjdGVyL2xldHRlciBlbmNvZGluZyB1c2VkIGluIFZJTSBpcyB0aGUgc3RhbmRhcmQgVVRGLTguCitJdCBpcyB3aWRlbHkgZGlzY291cmFnZWQgdGhhdCBhbnkgb3RoZXIgZW5jb2RpbmcgYmUgdXNlZCBvciBldmVuCithdHRlbXB0ZWQuCisKK05vdGU6IFVURi04IGlzIGFuIGFsbCBlbmNvbXBhc3NpbmcgZW5jb2RpbmcgYW5kIGFzIHN1Y2ggaXMKKyAgICAgIHRoZSBvbmx5IHN1cHBvcnRlZCAoYW5kIGVuY291cmFnZWQpIGVuY29kaW5nIHdpdGgKKyAgICAgIHJlZ2FyZCB0byBBcmFiaWMgKGFsbCBvdGhlciBwcm9wcmlldGFyeSBlbmNvZGluZ3MKKyAgICAgIHNob3VsZCBiZSBkaXNjb3VyYWdlZCBhbmQgZnJvd25lZCB1cG9uKS4KKworbyAgS2V5Ym9hcmQKKworICAgKyAgQ1RSTC1eIGluIGluc2VydC9yZXBsYWNlIG1vZGUgdG9nZ2xlcyBiZXR3ZWVuIEFyYWJpYy9MYXRpbiBtb2RlCisKKyAgICsgIEtleWJvYXJkIG1hcHBpbmcgaXMgYmFzZWQgb24gdGhlIE1pY3Jvc29mdCdzIEFyYWJpYyBrZXltYXAgKHRoZQorICAgICAgZGVmYWN0byBzdGFuZGFyZCBpbiB0aGUgQXJhYiB3b3JsZCk6CisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCEgICB8QCAgIHwjICAgfCQgICB8JSAgIHxeICAgfCYgICB8KiAgIHwoICAgfCkgICB8XyAgIHwrICAgfHwgICB8fiAg2ZEgfAorICB8MSDZoSB8MiDZoiB8MyDZoyB8NCDZpCB8NSDZpSB8NiDZpiB8NyDZpyB8OCDZqCB8OSDZqSB8MCDZoCB8LSAgIHw9ICAgfFwgICB8YCDYsCB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgfFEgINmOIHxXICDZiyB8RSAg2Y8gfFIgINmMIHxUINmE2KUgfFkg2KUgfFUgYCB8SSDDtyB8TyB4IHxQINibIHx7IDwgfH0gPiB8CisgICAgICAgfHEg2LYgfHcg2LUgfGUg2KsgfHIg2YIgfHQg2YEgfHkg2LogfHUg2LkgfGkg2YcgfG8g2K4gfHAg2K0gfFsg2KwgfF0g2K8gfAorICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgfEEgINmQIHxTICDZjSB8RCBbIHxGIF0gfEcg2YTYoyB8SCDYoyB8SiDZgCB8SyDYjCB8TCAvIHw6ICAgfCIgICB8CisJIHxhINi0IHxzINizIHxkINmKIHxmINioIHxnINmEIHxoINinIHxqINiqIHxrINmGIHxsINmFIHw7INmDIHwnINi3IHwKKwkgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8WiB+IHxYICDZkiB8QyB7IHxWIH0gfEIg2YTYoiB8TiDYoiB8TSAnIHw8ICwgfD4gLiB8PyDYnyB8CisJICAgfHog2KYgfHgg2KEgfGMg2KQgfHYg2LEgfGIg2YTYpyB8biDZiSB8bSDYqSB8LCDZiCB8LiDYsiB8LyDYuCB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1Jlc3RyaWN0aW9ucworLS0tLS0tLS0tLS0tCisKK28gIFZJTSBpbiBpdHMgR1VJIGZvcm0gZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgQmktZGlyZWN0aW9uYWxpdHkKKyAgIChpZS4gdGhlIGFiaWxpdHkgdG8gc2VlIGJvdGggQXJhYmljIGFuZCBMYXRpbiBpbnRlcm1peGVkIHdpdGhpbgorICAgdGhlIHNhbWUgbGluZSkuCisKKworS25vd24gQnVncworLS0tLS0tLS0tLQorCitUaGVyZSBpcyBvbmUga25vd24gbWlub3IgYnVnLAorCisgMS4gSWYgeW91IGluc2VydCBhIGhhcmFrYSAoZWcuIEZhdGhhIChVKzA2NEUpKSBhZnRlciBhIExBTSAoVSswNjQ0KQorICAgIGFuZCB0aGVuIGluc2VydCBhbiBBTEVGIChVKzA2MjcpLCB0aGUgYXBwcm9wcmlhdGUgY29tYmluaW5nIHdpbGwKKyAgICBub3QgaGFwcGVuIGR1ZSB0byB0aGUgc2FuZHdpY2hlZCBoYXJha2EgcmVzdWx0aW5nIGluIHNvbWV0aGluZworICAgIHRoYXQgd2lsbCBOT1QgYmUgZGlzcGxheWVkIGNvcnJlY3RseS4KKworICAgIFdPUkstQVJPVU5EOiBEb24ndCBpbmNsdWRlIGhhcmFrYXRzIGJldHdlZW4gTEFNIGFuZCBBTEVGIGNvbWJvcy4KKwkJIEluIGdlbmVyYWwsIGRvbid0IGFudGljaXBhdGUgdG8gc2VlIGNvcnJlY3QgdmlzdWFsCisJCSByZXByZXNlbnRhdGlvbiB3aXRoIHJlZ2FyZCB0byBoYXJha2F0cyBhbmQgTEFNK0FMRUYKKwkJIGNvbWJpbmVkIGNoYXJhY3RlcnMgKGV2ZW4gdGhvc2UgZW50ZXJlZCBhZnRlciBib3RoCisJCSBjaGFyYWN0ZXJzKS4gIFRoZSBwcm9ibGVtIG5vdGVkIGlzIHN0cmljdGx5IGEgdmlzdWFsCisJCSBvbmUsIG1lYW5pbmcgc2F2aW5nIHN1Y2ggYSBmaWxlIHdpbGwgY29udGFpbiBhbGwgdGhlCisJCSBhcHByb3ByaWF0ZSBpbmZvL2VuY29kaW5ncyAtIG5vdGhpbmcgaXMgbG9zdC4KKworTm8gb3RoZXIgYnVncyBhcmUga25vd24gdG8gZXhpc3QuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2F1dG9jbWQudHh0IGIvcnVudGltZS9kb2MvYXV0b2NtZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjNzQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2F1dG9jbWQudHh0CkBAIC0wLDAgKzEsOTA0IEBACisqYXV0b2NtZC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgQXByIDIwCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworQXV0b21hdGljIGNvbW1hbmRzCQkJCQkqYXV0b2NvbW1hbmQqCisKK0ZvciBhIGJhc2ljIGV4cGxhbmF0aW9uLCBzZWUgc2VjdGlvbiB8NDAuM3wgaW4gdGhlIHVzZXIgbWFudWFsLgorCisxLiAgSW50cm9kdWN0aW9uCQl8YXV0b2NtZC1pbnRyb3wKKzIuICBEZWZpbmluZyBhdXRvY29tbWFuZHMJfGF1dG9jbWQtZGVmaW5lfAorMy4gIFJlbW92aW5nIGF1dG9jb21tYW5kcwl8YXV0b2NtZC1yZW1vdmV8Cis0LiAgTGlzdGluZyBhdXRvY29tbWFuZHMJfGF1dG9jbWQtbGlzdHwKKzUuICBFdmVudHMJCQl8YXV0b2NtZC1ldmVudHN8Cis2LiAgUGF0dGVybnMJCQl8YXV0b2NtZC1wYXR0ZXJuc3wKKzcuICBHcm91cHMJCQl8YXV0b2NtZC1ncm91cHN8Cis4LiAgRXhlY3V0aW5nIGF1dG9jb21tYW5kcwl8YXV0b2NtZC1leGVjdXRlfAorOS4gIFVzaW5nIGF1dG9jb21tYW5kcwkJfGF1dG9jbWQtdXNlfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9Cit7b25seSB3aGVuIHRoZSB8K2F1dG9jbWR8IGZlYXR1cmUgaGFzIG5vdCBiZWVuIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJbnRyb2R1Y3Rpb24JCQkJCQkqYXV0b2NtZC1pbnRybyoKKworWW91IGNhbiBzcGVjaWZ5IGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZm9yIHdoZW4gcmVhZGluZyBvcgord3JpdGluZyBhIGZpbGUsIHdoZW4gZW50ZXJpbmcgb3IgbGVhdmluZyBhIGJ1ZmZlciBvciB3aW5kb3csIGFuZCB3aGVuIGV4aXRpbmcKK1ZpbS4gIEZvciBleGFtcGxlLCB5b3UgY2FuIGNyZWF0ZSBhbiBhdXRvY29tbWFuZCB0byBzZXQgdGhlICdjaW5kZW50JyBvcHRpb24KK2ZvciBmaWxlcyBtYXRjaGluZyAqLmMuICBZb3UgY2FuIGFsc28gdXNlIGF1dG9jb21tYW5kcyB0byBpbXBsZW1lbnQgYWR2YW5jZWQKK2ZlYXR1cmVzLCBzdWNoIGFzIGVkaXRpbmcgY29tcHJlc3NlZCBmaWxlcyAoc2VlIHxnemlwLWV4YW1wbGV8KS4gIFRoZSB1c3VhbAorcGxhY2UgdG8gcHV0IGF1dG9jb21tYW5kcyBpcyBpbiB5b3VyIC52aW1yYyBvciAuZXhyYyBmaWxlLgorCisJCQkJCQkJKkUyMDMqICpFMjA0KiAqRTE0MyoKK1dBUk5JTkc6IFVzaW5nIGF1dG9jb21tYW5kcyBpcyB2ZXJ5IHBvd2VyZnVsLCBhbmQgbWF5IGxlYWQgdG8gdW5leHBlY3RlZCBzaWRlCitlZmZlY3RzLiAgQmUgY2FyZWZ1bCBub3QgdG8gZGVzdHJveSB5b3VyIHRleHQuCistIEl0J3MgYSBnb29kIGlkZWEgdG8gZG8gc29tZSB0ZXN0aW5nIG9uIGFuIGV4cGVuZGFibGUgY29weSBvZiBhIGZpbGUgZmlyc3QuCisgIEZvciBleGFtcGxlOiBJZiB5b3UgdXNlIGF1dG9jb21tYW5kcyB0byBkZWNvbXByZXNzIGEgZmlsZSB3aGVuIHN0YXJ0aW5nIHRvCisgIGVkaXQgaXQsIG1ha2Ugc3VyZSB0aGF0IHRoZSBhdXRvY29tbWFuZHMgZm9yIGNvbXByZXNzaW5nIHdoZW4gd3JpdGluZyB3b3JrCisgIGNvcnJlY3RseS4KKy0gQmUgcHJlcGFyZWQgZm9yIGFuIGVycm9yIGhhbGZ3YXkgdGhyb3VnaCAoZS5nLiwgZGlzayBmdWxsKS4gIFZpbSB3aWxsIG1vc3RseQorICBiZSBhYmxlIHRvIHVuZG8gdGhlIGNoYW5nZXMgdG8gdGhlIGJ1ZmZlciwgYnV0IHlvdSBtYXkgaGF2ZSB0byBjbGVhbiB1cCB0aGUKKyAgY2hhbmdlcyB0byBvdGhlciBmaWxlcyBieSBoYW5kIChlLmcuLCBjb21wcmVzcyBhIGZpbGUgdGhhdCBoYXMgYmVlbgorICBkZWNvbXByZXNzZWQpLgorLSBJZiB0aGUgQnVmUmVhZCogZXZlbnRzIGFsbG93IHlvdSB0byBlZGl0IGEgY29tcHJlc3NlZCBmaWxlLCB0aGUgRmlsZVJlYWQqCisgIGV2ZW50cyBzaG91bGQgZG8gdGhlIHNhbWUgKHRoaXMgbWFrZXMgcmVjb3ZlcnkgcG9zc2libGUgaW4gc29tZSByYXJlIGNhc2VzKS4KKyAgSXQncyBhIGdvb2QgaWRlYSB0byB1c2UgdGhlIHNhbWUgYXV0b2NvbW1hbmRzIGZvciB0aGUgRmlsZSogYW5kIEJ1ZiogZXZlbnRzCisgIHdoZW4gcG9zc2libGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gRGVmaW5pbmcgYXV0b2NvbW1hbmRzCQkJCSphdXRvY21kLWRlZmluZSoKKworTm90ZTogVGhlICI6YXV0b2NtZCIgY29tbWFuZCBjYW5ub3QgYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBjb21tYW5kLCBzaW5jZSBhbnkKKyd8JyBpcyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGNvbW1hbmQuCisKKwkJCQkJCQkqOmF1KiAqOmF1dG9jbWQqCis6YXVbdG9jbWRdIFtncm91cF0ge2V2ZW50fSB7cGF0fSBbbmVzdGVkXSB7Y21kfQorCQkJQWRkIHtjbWR9IHRvIHRoZSBsaXN0IG9mIGNvbW1hbmRzIHRoYXQgVmltIHdpbGwKKwkJCWV4ZWN1dGUgYXV0b21hdGljYWxseSBvbiB7ZXZlbnR9IGZvciBhIGZpbGUgbWF0Y2hpbmcKKwkJCXtwYXR9LiAgVmltIGFsd2F5cyBhZGRzIHRoZSB7Y21kfSBhZnRlciBleGlzdGluZworCQkJYXV0b2NvbW1hbmRzLCBzbyB0aGF0IHRoZSBhdXRvY29tbWFuZHMgZXhlY3V0ZSBpbiB0aGUKKwkJCW9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBnaXZlbi4gIFNlZSB8YXV0b2NtZC1uZXN0ZWR8CisJCQlmb3IgW25lc3RlZF0uCisKK05vdGUgdGhhdCBzcGVjaWFsIGNoYXJhY3RlcnMgKGUuZy4sICIlIiwgIjxjd29yZD4iKSBpbiB0aGUgIjphdXRvY21kIgorYXJndW1lbnRzIGFyZSBub3QgZXhwYW5kZWQgd2hlbiB0aGUgYXV0b2NvbW1hbmQgaXMgZGVmaW5lZC4gIFRoZXNlIHdpbGwgYmUKK2V4cGFuZGVkIHdoZW4gdGhlIEV2ZW50IGlzIHJlY29nbml6ZWQsIGFuZCB0aGUge2NtZH0gaXMgZXhlY3V0ZWQuICBUaGUgb25seQorZXhjZXB0aW9uIGlzIHRoYXQgIjxzZmlsZT4iIGlzIGV4cGFuZGVkIHdoZW4gdGhlIGF1dG9jbWQgaXMgZGVmaW5lZC4gIEV4YW1wbGU6Cis+CisJOmF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmh0bWwgc28gPHNmaWxlPjpoL2h0bWwudmltCisKK0hlcmUgVmltIGV4cGFuZHMgPHNmaWxlPiB0byB0aGUgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoaXMgbGluZS4KKworV2hlbiB5b3VyIC52aW1yYyBmaWxlIGlzIHNvdXJjZWQgdHdpY2UsIHRoZSBhdXRvY29tbWFuZHMgd2lsbCBhcHBlYXIgdHdpY2UuCitUbyBhdm9pZCB0aGlzLCBwdXQgdGhpcyBjb21tYW5kIGluIHlvdXIgLnZpbXJjIGZpbGUsIGJlZm9yZSBkZWZpbmluZworYXV0b2NvbW1hbmRzOiA+CisKKwk6YXV0b2NtZCEJIiBSZW1vdmUgQUxMIGF1dG9jb21tYW5kcyBmb3IgdGhlIGN1cnJlbnQgZ3JvdXAuCisKK0lmIHlvdSBkb24ndCB3YW50IHRvIHJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzLCB5b3UgY2FuIGluc3RlYWQgdXNlIGEgdmFyaWFibGUKK3RvIGVuc3VyZSB0aGF0IFZpbSBpbmNsdWRlcyB0aGUgYXV0b2NvbW1hbmRzIG9ubHkgb25jZTogPgorCisJOmlmICFleGlzdHMoImF1dG9jb21tYW5kc19sb2FkZWQiKQorCTogIGxldCBhdXRvY29tbWFuZHNfbG9hZGVkID0gMQorCTogIGF1IC4uLgorCTplbmRpZgorCitXaGVuIHRoZSBbZ3JvdXBdIGFyZ3VtZW50IGlzIG5vdCBnaXZlbiwgVmltIHVzZXMgdGhlIGN1cnJlbnQgZ3JvdXAgKGFzIGRlZmluZWQKK3dpdGggIjphdWdyb3VwIik7IG90aGVyd2lzZSwgVmltIHVzZXMgdGhlIGdyb3VwIGRlZmluZWQgd2l0aCBbZ3JvdXBdLiAgTm90ZQordGhhdCBbZ3JvdXBdIG11c3QgaGF2ZSBiZWVuIGRlZmluZWQgYmVmb3JlLiAgWW91IGNhbm5vdCBkZWZpbmUgYSBuZXcgZ3JvdXAKK3dpdGggIjphdSBncm91cCAuLi4iOyB1c2UgIjphdWdyb3VwIiBmb3IgdGhhdC4KKworV2hpbGUgdGVzdGluZyBhdXRvY29tbWFuZHMsIHlvdSBtaWdodCBmaW5kIHRoZSAndmVyYm9zZScgb3B0aW9uIHRvIGJlIHVzZWZ1bDogPgorCTpzZXQgdmVyYm9zZT05CitUaGlzIHNldHRpbmcgbWFrZXMgVmltIGVjaG8gdGhlIGF1dG9jb21tYW5kcyBhcyBpdCBleGVjdXRlcyB0aGVtLgorCitXaGVuIGRlZmluaW5nIGFuIGF1dG9jb21tYW5kIGluIGEgc2NyaXB0LCBpdCB3aWxsIGJlIGFibGUgdG8gY2FsbCBmdW5jdGlvbnMKK2xvY2FsIHRvIHRoZSBzY3JpcHQgYW5kIHVzZSBtYXBwaW5ncyBsb2NhbCB0byB0aGUgc2NyaXB0LiAgV2hlbiB0aGUgZXZlbnQgaXMKK3RyaWdnZXJlZCBhbmQgdGhlIGNvbW1hbmQgZXhlY3V0ZWQsIGl0IHdpbGwgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzY3JpcHQKK2l0IHdhcyBkZWZpbmVkIGluLiAgVGhpcyBtYXR0ZXJzIGlmIHw8U0lEPnwgaXMgdXNlZCBpbiBhIGNvbW1hbmQuCisKK1doZW4gZXhlY3V0aW5nIHRoZSBjb21tYW5kcywgdGhlIG1lc3NhZ2VzIGZyb20gb25lIGNvbW1hbmQgb3ZlcndyaXRlcyBhCitwcmV2aW91cyBtZXNzYWdlLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB3aGVuIGV4ZWN1dGluZyB0aGUgY29tbWFuZHMKK21hbnVhbGx5LiAgTW9zdGx5IHRoZSBzY3JlZW4gd2lsbCBub3Qgc2Nyb2xsIHVwLCB0aHVzIHRoZXJlIGlzIG5vIGhpdC1lbnRlcgorcHJvbXB0LiAgV2hlbiBvbmUgY29tbWFuZCBvdXRwdXRzIHR3byBtZXNzYWdlcyB0aGlzIGNhbiBoYXBwZW4gYW55d2F5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFJlbW92aW5nIGF1dG9jb21tYW5kcwkJCQkqYXV0b2NtZC1yZW1vdmUqCisKKzphdVt0b2NtZF0hIFtncm91cF0ge2V2ZW50fSB7cGF0fSBbbmVzdGVkXSB7Y21kfQorCQkJUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHtldmVudH0gYW5kCisJCQl7cGF0fSwgYW5kIGFkZCB0aGUgY29tbWFuZCB7Y21kfS4gIFNlZQorCQkJfGF1dG9jbWQtbmVzdGVkfCBmb3IgW25lc3RlZF0uCisKKzphdVt0b2NtZF0hIFtncm91cF0ge2V2ZW50fSB7cGF0fQorCQkJUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHtldmVudH0gYW5kCisJCQl7cGF0fS4KKworOmF1W3RvY21kXSEgW2dyb3VwXSAqIHtwYXR9CisJCQlSZW1vdmUgYWxsIGF1dG9jb21tYW5kcyBhc3NvY2lhdGVkIHdpdGgge3BhdH0gZm9yIGFsbAorCQkJZXZlbnRzLgorCis6YXVbdG9jbWRdISBbZ3JvdXBdIHtldmVudH0KKwkJCVJlbW92ZSBBTEwgYXV0b2NvbW1hbmRzIGZvciB7ZXZlbnR9LgorCis6YXVbdG9jbWRdISBbZ3JvdXBdCVJlbW92ZSBBTEwgYXV0b2NvbW1hbmRzLgorCitXaGVuIHRoZSBbZ3JvdXBdIGFyZ3VtZW50IGlzIG5vdCBnaXZlbiwgVmltIHVzZXMgdGhlIGN1cnJlbnQgZ3JvdXAgKGFzIGRlZmluZWQKK3dpdGggIjphdWdyb3VwIik7IG90aGVyd2lzZSwgVmltIHVzZXMgdGhlIGdyb3VwIGRlZmluZWQgd2l0aCBbZ3JvdXBdLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIExpc3RpbmcgYXV0b2NvbW1hbmRzCQkJCQkqYXV0b2NtZC1saXN0KgorCis6YXVbdG9jbWRdIFtncm91cF0ge2V2ZW50fSB7cGF0fQorCQkJU2hvdyB0aGUgYXV0b2NvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB7ZXZlbnR9IGFuZAorCQkJe3BhdH0uCisKKzphdVt0b2NtZF0gW2dyb3VwXSAqIHtwYXR9CisJCQlTaG93IHRoZSBhdXRvY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIHtwYXR9IGZvciBhbGwKKwkJCWV2ZW50cy4KKworOmF1W3RvY21kXSBbZ3JvdXBdIHtldmVudH0KKwkJCVNob3cgYWxsIGF1dG9jb21tYW5kcyBmb3Ige2V2ZW50fS4KKworOmF1W3RvY21kXSBbZ3JvdXBdCVNob3cgYWxsIGF1dG9jb21tYW5kcy4KKworSWYgeW91IHByb3ZpZGUgdGhlIFtncm91cF0gYXJndW1lbnQsIFZpbSBsaXN0cyBvbmx5IHRoZSBhdXRvY29tbWFuZHMgZm9yCitbZ3JvdXBdOyBvdGhlcndpc2UsIFZpbSBsaXN0cyB0aGUgYXV0b2NvbW1hbmRzIGZvciBBTEwgZ3JvdXBzLiAgTm90ZSB0aGF0IHRoaXMKK2FyZ3VtZW50IGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0aGF0IGZvciBkZWZpbmluZyBhbmQgcmVtb3ZpbmcgYXV0b2NvbW1hbmRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIEV2ZW50cwkJCQkJKmF1dG9jbWQtZXZlbnRzKiAqRTIxNSogKkUyMTYqCisKKwkJCQkJKmF1dG9jb21tYW5kLWV2ZW50cyogKntldmVudH0qCitWaW0gcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIGV2ZW50cy4gIFZpbSBpZ25vcmVzIHRoZSBjYXNlIG9mIGV2ZW50IG5hbWVzCisoZS5nLiwgeW91IGNhbiB1c2UgIkJVRnJlYWQiIG9yICJidWZyZWFkIiBpbnN0ZWFkIG9mICJCdWZSZWFkIikuCisKKwkJCQkJCQkqQnVmTmV3RmlsZSoKK0J1Zk5ld0ZpbGUJCQlXaGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlIHRoYXQgZG9lc24ndAorCQkJCWV4aXN0LiAgQ2FuIGJlIHVzZWQgdG8gcmVhZCBpbiBhIHNrZWxldG9uCisJCQkJZmlsZS4KKwkJCQkJCSpCdWZSZWFkUHJlKiAqRTIwMCogKkUyMDEqCitCdWZSZWFkUHJlCQkJV2hlbiBzdGFydGluZyB0byBlZGl0IGEgbmV3IGJ1ZmZlciwgYmVmb3JlCisJCQkJcmVhZGluZyB0aGUgZmlsZSBpbnRvIHRoZSBidWZmZXIuICBOb3QgdXNlZAorCQkJCWlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QuCisJCQkJCQkqQnVmUmVhZCogKkJ1ZlJlYWRQb3N0KgorQnVmUmVhZCBvciBCdWZSZWFkUG9zdAkJV2hlbiBzdGFydGluZyB0byBlZGl0IGEgbmV3IGJ1ZmZlciwgYWZ0ZXIKKwkJCQlyZWFkaW5nIHRoZSBmaWxlIGludG8gdGhlIGJ1ZmZlciwgYmVmb3JlCisJCQkJZXhlY3V0aW5nIHRoZSBtb2RlbGluZXMuICBTZWUgfEJ1ZldpbkVudGVyfAorCQkJCWZvciB3aGVuIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBhZnRlcgorCQkJCXByb2Nlc3NpbmcgdGhlIG1vZGVsaW5lcy4KKwkJCQlUaGlzIGRvZXMgTk9UIHdvcmsgZm9yICI6ciBmaWxlIi4gIE5vdCB1c2VkCisJCQkJd2hlbiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LiAgQWxzbyB1c2VkIGFmdGVyCisJCQkJc3VjY2Vzc2Z1bGx5IHJlY292ZXJpbmcgYSBmaWxlLgorCQkJCQkJCSpCdWZSZWFkQ21kKgorQnVmUmVhZENtZAkJCUJlZm9yZSBzdGFydGluZyB0byBlZGl0IGEgbmV3IGJ1ZmZlci4gIFNob3VsZAorCQkJCXJlYWQgdGhlIGZpbGUgaW50byB0aGUgYnVmZmVyLiB8Q21kLWV2ZW50fAorCQkJCQkJCSpCdWZGaWxlUHJlKgorQnVmRmlsZVByZQkJCUJlZm9yZSBjaGFuZ2luZyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBidWZmZXIKKwkJCQl3aXRoIHRoZSAiOmZpbGUiIG9yICI6c2F2ZWFzIiBjb21tYW5kLgorCQkJCQkJCSpCdWZGaWxlUG9zdCoKK0J1ZkZpbGVQb3N0CQkJQWZ0ZXIgY2hhbmdpbmcgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyCisJCQkJd2l0aCB0aGUgIjpmaWxlIiBvciAiOnNhdmVhcyIgY29tbWFuZC4KKwkJCQkJCQkqRmlsZVJlYWRQcmUqCitGaWxlUmVhZFByZQkJCUJlZm9yZSByZWFkaW5nIGEgZmlsZSB3aXRoIGEgIjpyZWFkIiBjb21tYW5kLgorCQkJCQkJCSpGaWxlUmVhZFBvc3QqCitGaWxlUmVhZFBvc3QJCQlBZnRlciByZWFkaW5nIGEgZmlsZSB3aXRoIGEgIjpyZWFkIiBjb21tYW5kLgorCQkJCU5vdGUgdGhhdCBWaW0gc2V0cyB0aGUgJ1sgYW5kICddIG1hcmtzIHRvIHRoZQorCQkJCWZpcnN0IGFuZCBsYXN0IGxpbmUgb2YgdGhlIHJlYWQuICBUaGlzIGNhbiBiZQorCQkJCXVzZWQgdG8gb3BlcmF0ZSBvbiB0aGUgbGluZXMganVzdCByZWFkLgorCQkJCQkJCSpGaWxlUmVhZENtZCoKK0ZpbGVSZWFkQ21kCQkJQmVmb3JlIHJlYWRpbmcgYSBmaWxlIHdpdGggYSAiOnJlYWQiIGNvbW1hbmQuCisJCQkJU2hvdWxkIGRvIHRoZSByZWFkaW5nIG9mIHRoZSBmaWxlLiB8Q21kLWV2ZW50fAorCQkJCQkJCSpGaWx0ZXJSZWFkUHJlKiAqRTEzNSoKK0ZpbHRlclJlYWRQcmUJCQlCZWZvcmUgcmVhZGluZyBhIGZpbGUgZnJvbSBhIGZpbHRlciBjb21tYW5kLgorCQkJCVZpbSBjaGVja3MgdGhlIHBhdHRlcm4gYWdhaW5zdCB0aGUgbmFtZSBvZgorCQkJCXRoZSBjdXJyZW50IGJ1ZmZlciwgbm90IHRoZSBuYW1lIG9mIHRoZQorCQkJCXRlbXBvcmFyeSBmaWxlIHRoYXQgaXMgdGhlIG91dHB1dCBvZiB0aGUKKwkJCQlmaWx0ZXIgY29tbWFuZC4KKwkJCQkJCQkqRmlsdGVyUmVhZFBvc3QqCitGaWx0ZXJSZWFkUG9zdAkJCUFmdGVyIHJlYWRpbmcgYSBmaWxlIGZyb20gYSBmaWx0ZXIgY29tbWFuZC4KKwkJCQlWaW0gY2hlY2tzIHRoZSBwYXR0ZXJuIGFnYWluc3QgdGhlIG5hbWUgb2YKKwkJCQl0aGUgY3VycmVudCBidWZmZXIgYXMgd2l0aCBGaWx0ZXJSZWFkUHJlLgorCQkJCQkJCSpGaWxlVHlwZSoKK0ZpbGVUeXBlCQkJV2hlbiB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24gaGFzIGJlZW4gc2V0LgorCQkJCTxhZmlsZT4gY2FuIGJlIHVzZWQgZm9yIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisJCQkJd2hlcmUgdGhpcyBvcHRpb24gd2FzIHNldCwgYW5kIDxhbWF0Y2g+IGZvcgorCQkJCXRoZSBuZXcgdmFsdWUgb2YgJ2ZpbGV0eXBlJy4KKwkJCQlTZWUgfGZpbGV0eXBlc3wuCisJCQkJCQkJKlN5bnRheCoKK1N5bnRheAkJCQlXaGVuIHRoZSAnc3ludGF4JyBvcHRpb24gaGFzIGJlZW4gc2V0LgorCQkJCTxhZmlsZT4gY2FuIGJlIHVzZWQgZm9yIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisJCQkJd2hlcmUgdGhpcyBvcHRpb24gd2FzIHNldCwgYW5kIDxhbWF0Y2g+IGZvcgorCQkJCXRoZSBuZXcgdmFsdWUgb2YgJ3N5bnRheCcuCisJCQkJU2VlIHw6c3luLW9ufC4KKwkJCQkJCQkqU3RkaW5SZWFkUHJlKgorU3RkaW5SZWFkUHJlCQkJQmVmb3JlIHJlYWRpbmcgZnJvbSBzdGRpbiBpbnRvIHRoZSBidWZmZXIuCisJCQkJT25seSB1c2VkIHdoZW4gdGhlICItIiBhcmd1bWVudCB3YXMgdXNlZCB3aGVuCisJCQkJVmltIHdhcyBzdGFydGVkIHwtLXwuCisJCQkJCQkJKlN0ZGluUmVhZFBvc3QqCitTdGRpblJlYWRQb3N0CQkJQWZ0ZXIgcmVhZGluZyBmcm9tIHRoZSBzdGRpbiBpbnRvIHRoZSBidWZmZXIsCisJCQkJYmVmb3JlIGV4ZWN1dGluZyB0aGUgbW9kZWxpbmVzLiAgT25seSB1c2VkCisJCQkJd2hlbiB0aGUgIi0iIGFyZ3VtZW50IHdhcyB1c2VkIHdoZW4gVmltIHdhcworCQkJCXN0YXJ0ZWQgfC0tfC4KKwkJCQkJCSpCdWZXcml0ZSogKkJ1ZldyaXRlUHJlKgorQnVmV3JpdGUgb3IgQnVmV3JpdGVQcmUJCUJlZm9yZSB3cml0aW5nIHRoZSB3aG9sZSBidWZmZXIgdG8gYSBmaWxlLgorCQkJCQkJCSpCdWZXcml0ZVBvc3QqCitCdWZXcml0ZVBvc3QJCQlBZnRlciB3cml0aW5nIHRoZSB3aG9sZSBidWZmZXIgdG8gYSBmaWxlCisJCQkJKHNob3VsZCB1bmRvIHRoZSBjb21tYW5kcyBmb3IgQnVmV3JpdGVQcmUpLgorCQkJCQkJCSpCdWZXcml0ZUNtZCoKK0J1ZldyaXRlQ21kCQkJQmVmb3JlIHdyaXRpbmcgdGhlIHdob2xlIGJ1ZmZlciB0byBhIGZpbGUuCisJCQkJU2hvdWxkIGRvIHRoZSB3cml0aW5nIG9mIHRoZSBmaWxlIGFuZCByZXNldAorCQkJCSdtb2RpZmllZCcgaWYgc3VjY2Vzc2Z1bC4gIFRoZSBidWZmZXIgY29udGVudHMKKwkJCQlzaG91bGQgbm90IGJlIGNoYW5nZWQuICB8Q21kLWV2ZW50fAorCQkJCQkJCSpGaWxlV3JpdGVQcmUqCitGaWxlV3JpdGVQcmUJCQlCZWZvcmUgd3JpdGluZyB0byBhIGZpbGUsIHdoZW4gbm90IHdyaXRpbmcgdGhlCisJCQkJd2hvbGUgYnVmZmVyLgorCQkJCQkJCSpGaWxlV3JpdGVQb3N0KgorRmlsZVdyaXRlUG9zdAkJCUFmdGVyIHdyaXRpbmcgdG8gYSBmaWxlLCB3aGVuIG5vdCB3cml0aW5nIHRoZQorCQkJCXdob2xlIGJ1ZmZlci4KKwkJCQkJCQkqRmlsZVdyaXRlQ21kKgorRmlsZVdyaXRlQ21kCQkJQmVmb3JlIHdyaXRpbmcgdG8gYSBmaWxlLCB3aGVuIG5vdCB3cml0aW5nIHRoZQorCQkJCXdob2xlIGJ1ZmZlci4gIFNob3VsZCBkbyB0aGUgd3JpdGluZyB0byB0aGUKKwkJCQlmaWxlLiAgU2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGJ1ZmZlci4KKwkJCQl8Q21kLWV2ZW50fAorCQkJCQkJCSpGaWxlQXBwZW5kUHJlKgorRmlsZUFwcGVuZFByZQkJCUJlZm9yZSBhcHBlbmRpbmcgdG8gYSBmaWxlLgorCQkJCQkJCSpGaWxlQXBwZW5kUG9zdCoKK0ZpbGVBcHBlbmRQb3N0CQkJQWZ0ZXIgYXBwZW5kaW5nIHRvIGEgZmlsZS4KKwkJCQkJCQkqRmlsZUFwcGVuZENtZCoKK0ZpbGVBcHBlbmRDbWQJCQlCZWZvcmUgYXBwZW5kaW5nIHRvIGEgZmlsZS4gIFNob3VsZCBkbyB0aGUKKwkJCQlhcHBlbmRpbmcgdG8gdGhlIGZpbGUuIHxDbWQtZXZlbnR8CisJCQkJCQkJKkZpbHRlcldyaXRlUHJlKgorRmlsdGVyV3JpdGVQcmUJCQlCZWZvcmUgd3JpdGluZyBhIGZpbGUgZm9yIGEgZmlsdGVyIGNvbW1hbmQgb3IKKwkJCQltYWtpbmcgYSBkaWZmLgorCQkJCVZpbSBjaGVja3MgdGhlIHBhdHRlcm4gYWdhaW5zdCB0aGUgbmFtZSBvZgorCQkJCXRoZSBjdXJyZW50IGJ1ZmZlciwgbm90IHRoZSBuYW1lIG9mIHRoZQorCQkJCXRlbXBvcmFyeSBmaWxlIHRoYXQgaXMgdGhlIG91dHB1dCBvZiB0aGUKKwkJCQlmaWx0ZXIgY29tbWFuZC4KKwkJCQkJCQkqRmlsdGVyV3JpdGVQb3N0KgorRmlsdGVyV3JpdGVQb3N0CQkJQWZ0ZXIgd3JpdGluZyBhIGZpbGUgZm9yIGEgZmlsdGVyIGNvbW1hbmQgb3IKKwkJCQltYWtpbmcgYSBkaWZmLgorCQkJCVZpbSBjaGVja3MgdGhlIHBhdHRlcm4gYWdhaW5zdCB0aGUgbmFtZSBvZgorCQkJCXRoZSBjdXJyZW50IGJ1ZmZlciBhcyB3aXRoIEZpbHRlcldyaXRlUHJlLgorCQkJCQkJCSpGaWxlQ2hhbmdlZFNoZWxsKgorRmlsZUNoYW5nZWRTaGVsbAkJV2hlbiBWaW0gbm90aWNlcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGltZSBvZgorCQkJCWEgZmlsZSBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQuCisJCQkJQWxzbyB3aGVuIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGUKKwkJCQljaGFuZ2UuIHx0aW1lc3RhbXB8CisJCQkJTW9zdGx5IHRyaWdnZXJlZCBhZnRlciBleGVjdXRpbmcgYSBzaGVsbAorCQkJCWNvbW1hbmQsIGJ1dCBhbHNvIHdpdGggYSB8OmNoZWNrdGltZXwgY29tbWFuZAorCQkJCW9yIHdoZW4gVmltIHJlZ2FpbnMgaW5wdXQgZm9jdXMuCisJCQkJVGhpcyBhdXRvY29tbWFuZCBpcyB0cmlnZ2VyZWQgZm9yIGVhY2ggY2hhbmdlZAorCQkJCWZpbGUuICBJdCBpcyBub3QgdXNlZCB3aGVuICdhdXRvcmVhZCcgaXMgc2V0CisJCQkJYW5kIHRoZSBidWZmZXIgd2FzIG5vdCBjaGFuZ2VkLiAgSWYgYQorCQkJCUZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgaXMgcHJlc2VudCB0aGUKKwkJCQl3YXJuaW5nIG1lc3NhZ2UgYW5kIHByb21wdCBpcyBub3QgZ2l2ZW4uCisJCQkJVGhpcyBpcyB1c2VmdWwgZm9yIHJlbG9hZGluZyByZWxhdGVkIGJ1ZmZlcnMKKwkJCQl3aGljaCBhcmUgYWZmZWN0ZWQgYnkgYSBzaW5nbGUgY29tbWFuZC4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIHRoYXQgd2FzIGNoYW5nZWQgIjxhZmlsZT4iLgorCQkJCU5PVEU6IFRoZSBjb21tYW5kcyBtdXN0IG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQKKwkJCQlidWZmZXIsIGp1bXAgdG8gYW5vdGhlciBidWZmZXIgb3IgZGVsZXRlIGEKKwkJCQlidWZmZXIuICAqRTI0NioKKwkJCQlOT1RFOiBUaGlzIGV2ZW50IG5ldmVyIG5lc3RzLCB0byBhdm9pZCBhbgorCQkJCWVuZGxlc3MgbG9vcC4gIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSBleGVjdXRpbmcKKwkJCQljb21tYW5kcyBmb3IgdGhlIEZpbGVDaGFuZ2VkU2hlbGwgZXZlbnQgbm8KKwkJCQlvdGhlciBGaWxlQ2hhbmdlZFNoZWxsIGV2ZW50IHdpbGwgYmUKKwkJCQl0cmlnZ2VyZWQuCisJCQkJCQkJKkZpbGVDaGFuZ2VkUk8qCitGaWxlQ2hhbmdlZFJPCQkJQmVmb3JlIG1ha2luZyB0aGUgZmlyc3QgY2hhbmdlIHRvIGEgcmVhZC1vbmx5CisJCQkJZmlsZS4gIENhbiBiZSB1c2VkIHRvIGNoZWNrLW91dCB0aGUgZmlsZSBmcm9tCisJCQkJYSBzb3VyY2UgY29udHJvbCBzeXN0ZW0uICBOb3QgdHJpZ2dlcmVkIHdoZW4KKwkJCQl0aGUgY2hhbmdlIHdhcyBjYXVzZWQgYnkgYW4gYXV0b2NvbW1hbmQuCisJCQkJV0FSTklORzogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBtYWtpbmcgYQorCQkJCWNoYW5nZSwganVzdCBiZWZvcmUgdGhlIGNoYW5nZSBpcyBhcHBsaWVkIHRvCisJCQkJdGhlIHRleHQuICBJZiB0aGUgYXV0b2NvbW1hbmQgbW92ZXMgdGhlIGN1cnNvcgorCQkJCXRoZSBlZmZlY3Qgb2YgdGhlIGNoYW5nZSBpcyB1bmRlZmluZWQuCisJCQkJCQkJKkZvY3VzR2FpbmVkKgorRm9jdXNHYWluZWQJCQlXaGVuIFZpbSBnb3QgaW5wdXQgZm9jdXMuICBPbmx5IGZvciB0aGUgR1VJCisJCQkJdmVyc2lvbiBhbmQgYSBmZXcgY29uc29sZSB2ZXJzaW9ucyB3aGVyZSB0aGlzCisJCQkJY2FuIGJlIGRldGVjdGVkLgorCQkJCQkJCSpGb2N1c0xvc3QqCitGb2N1c0xvc3QJCQlXaGVuIFZpbSBsb3N0IGlucHV0IGZvY3VzLiAgT25seSBmb3IgdGhlIEdVSQorCQkJCXZlcnNpb24gYW5kIGEgZmV3IGNvbnNvbGUgdmVyc2lvbnMgd2hlcmUgdGhpcworCQkJCWNhbiBiZSBkZXRlY3RlZC4KKwkJCQkJCQkqRnVuY1VuZGVmaW5lZCoKK0Z1bmNVbmRlZmluZWQJCQlXaGVuIGEgdXNlciBmdW5jdGlvbiBpcyB1c2VkIGJ1dCBpdCBpc24ndAorCQkJCWRlZmluZWQuICBVc2VmdWwgZm9yIGRlZmluaW5nIGEgZnVuY3Rpb24gb25seQorCQkJCXdoZW4gaXQncyB1c2VkLiAgQm90aCA8YW1hdGNoPiBhbmQgPGFmaWxlPiBhcmUKKwkJCQlzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLgorCQkJCQkJCSpDdXJzb3JIb2xkKgorQ3Vyc29ySG9sZAkJCVdoZW4gdGhlIHVzZXIgZG9lc24ndCBwcmVzcyBhIGtleSBmb3IgdGhlIHRpbWUKKwkJCQlzcGVjaWZpZWQgd2l0aCAndXBkYXRldGltZScuICBOb3QgcmUtdHJpZ2dlcmVkCisJCQkJdW50aWwgdGhlIHVzZXIgaGFzIHByZXNzZWQgYSBrZXkgKGkuZS4gZG9lc24ndAorCQkJCWZpcmUgZXZlcnkgJ3VwZGF0ZXRpbWUnIG1zIGlmIHlvdSBsZWF2ZSBWaW0gdG8KKwkJCQltYWtlIHNvbWUgY29mZmVlLiA6KSAgU2VlIHxDdXJzb3JIb2xkLWV4YW1wbGV8CisJCQkJZm9yIHByZXZpZXdpbmcgdGFncy4KKwkJCQlUaGlzIGV2ZW50IGlzIG9ubHkgdHJpZ2dlcmVkIGluIE5vcm1hbCBtb2RlLgorCQkJCU5vdGU6IEludGVyYWN0aXZlIGNvbW1hbmRzIGNhbm5vdCBiZSB1c2VkIGZvcgorCQkJCXRoaXMgZXZlbnQuICBUaGVyZSBpcyBubyBoaXQtZW50ZXIgcHJvbXB0LAorCQkJCXRoZSBzY3JlZW4gaXMgdXBkYXRlZCBkaXJlY3RseSAod2hlbiBuZWVkZWQpLgorCQkJCU5vdGU6IEluIHRoZSBmdXR1cmUgdGhlcmUgd2lsbCBwcm9iYWJseSBiZQorCQkJCWFub3RoZXIgb3B0aW9uIHRvIHNldCB0aGUgdGltZS4KKwkJCQlIaW50OiB0byBmb3JjZSBhbiB1cGRhdGUgb2YgdGhlIHN0YXR1cyBsaW5lcworCQkJCXVzZTogPgorCQkJCQk6bGV0ICZybyA9ICZybworPAkJCQl7b25seSBvbiBBbWlnYSwgVW5peCwgV2luMzIsIE1TRE9TIGFuZCBhbGwgR1VJCisJCQkJdmVyc2lvbnN9CisJCQkJCQkJKkJ1ZkVudGVyKgorQnVmRW50ZXIJCQlBZnRlciBlbnRlcmluZyBhIGJ1ZmZlci4gIFVzZWZ1bCBmb3Igc2V0dGluZworCQkJCW9wdGlvbnMgZm9yIGEgZmlsZSB0eXBlLiAgQWxzbyBleGVjdXRlZCB3aGVuCisJCQkJc3RhcnRpbmcgdG8gZWRpdCBhIGJ1ZmZlciwgYWZ0ZXIgdGhlCisJCQkJQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmRzLgorCQkJCQkJCSpCdWZMZWF2ZSoKK0J1ZkxlYXZlCQkJQmVmb3JlIGxlYXZpbmcgdG8gYW5vdGhlciBidWZmZXIuICBBbHNvIHdoZW4KKwkJCQlsZWF2aW5nIG9yIGNsb3NpbmcgdGhlIGN1cnJlbnQgd2luZG93IGFuZCB0aGUKKwkJCQluZXcgY3VycmVudCB3aW5kb3cgaXMgbm90IGZvciB0aGUgc2FtZSBidWZmZXIuCisJCQkJTm90IHVzZWQgZm9yICI6cWEiIG9yICI6cSIgd2hlbiBleGl0aW5nIFZpbS4KKwkJCQkJCQkqQnVmV2luRW50ZXIqCitCdWZXaW5FbnRlcgkJCUFmdGVyIGEgYnVmZmVyIGlzIGRpc3BsYXllZCBpbiBhIHdpbmRvdy4gIFRoaXMKKwkJCQljYW4gYmUgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZCAoYWZ0ZXIKKwkJCQlwcm9jZXNzaW5nIHRoZSBtb2RlbGluZXMpLCB3aGVuIGEgaGlkZGVuCisJCQkJYnVmZmVyIGlzIGRpc3BsYXllZCBpbiBhIHdpbmRvdyAoYW5kIGlzIG5vCisJCQkJbG9uZ2VyIGhpZGRlbikgb3IgYSBidWZmZXIgYWxyZWFkeSB2aXNpYmxlIGluCisJCQkJYSB3aW5kb3cgaXMgYWxzbyBkaXNwbGF5ZWQgaW4gYW5vdGhlciB3aW5kb3cuCisJCQkJCQkJKkJ1ZldpbkxlYXZlKgorQnVmV2luTGVhdmUJCQlCZWZvcmUgYSBidWZmZXIgaXMgcmVtb3ZlZCBmcm9tIGEgd2luZG93LgorCQkJCU5vdCB3aGVuIGl0J3Mgc3RpbGwgdmlzaWJsZSBpbiBhbm90aGVyIHdpbmRvdy4KKwkJCQlBbHNvIHRyaWdnZXJlZCB3aGVuIGV4aXRpbmcuICBJdCdzIHRyaWdnZXJlZAorCQkJCWJlZm9yZSBCdWZVbmxvYWQgb3IgQnVmSGlkZGVuLgorCQkJCU5PVEU6IFdoZW4gdGhpcyBhdXRvY29tbWFuZCBpcyBleGVjdXRlZCwgdGhlCisJCQkJY3VycmVudCBidWZmZXIgIiUiIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJCQlidWZmZXIgYmVpbmcgdW5sb2FkZWQgIjxhZmlsZT4iLgorCQkJCQkJCSpCdWZVbmxvYWQqCitCdWZVbmxvYWQJCQlCZWZvcmUgdW5sb2FkaW5nIGEgYnVmZmVyLiAgVGhpcyBpcyB3aGVuIHRoZQorCQkJCXRleHQgaW4gdGhlIGJ1ZmZlciBpcyBnb2luZyB0byBiZSBmcmVlZC4gIFRoaXMKKwkJCQltYXkgYmUgYWZ0ZXIgYSBCdWZXcml0ZVBvc3QgYW5kIGJlZm9yZSBhCisJCQkJQnVmRGVsZXRlLiAgQWxzbyB1c2VkIGZvciBhbGwgYnVmZmVycyB0aGF0IGFyZQorCQkJCWxvYWRlZCB3aGVuIFZpbSBpcyBnb2luZyB0byBleGl0LgorCQkJCU5PVEU6IFdoZW4gdGhpcyBhdXRvY29tbWFuZCBpcyBleGVjdXRlZCwgdGhlCisJCQkJY3VycmVudCBidWZmZXIgIiUiIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJCQlidWZmZXIgYmVpbmcgdW5sb2FkZWQgIjxhZmlsZT4iLgorCQkJCQkJCSpCdWZIaWRkZW4qCitCdWZIaWRkZW4JCQlKdXN0IGFmdGVyIGEgYnVmZmVyIGhhcyBiZWNvbWUgaGlkZGVuLiAgVGhhdAorCQkJCWlzLCB3aGVuIHRoZXJlIGFyZSBubyBsb25nZXIgd2luZG93cyB0aGF0IHNob3cKKwkJCQl0aGUgYnVmZmVyLCBidXQgdGhlIGJ1ZmZlciBpcyBub3QgdW5sb2FkZWQgb3IKKwkJCQlkZWxldGVkLiAgTm90IHVzZWQgZm9yICI6cWEiIG9yICI6cSIgd2hlbgorCQkJCWV4aXRpbmcgVmltLgorCQkJCU5PVEU6IFdoZW4gdGhpcyBhdXRvY29tbWFuZCBpcyBleGVjdXRlZCwgdGhlCisJCQkJY3VycmVudCBidWZmZXIgIiUiIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJCQlidWZmZXIgYmVpbmcgdW5sb2FkZWQgIjxhZmlsZT4iLgorCQkJCQkJCSpCdWZOZXcqCitCdWZOZXcJCQkJSnVzdCBhZnRlciBjcmVhdGluZyBhIG5ldyBidWZmZXIuICBBbHNvIHVzZWQKKwkJCQlqdXN0IGFmdGVyIGEgYnVmZmVyIGhhcyBiZWVuIHJlbmFtZWQuICBXaGVuCisJCQkJdGhlIGJ1ZmZlciBpcyBhZGRlZCB0byB0aGUgYnVmZmVyIGxpc3QgQnVmQWRkCisJCQkJd2lsbCBiZSB0cmlnZ2VyZWQgdG9vLgorCQkJCU5PVEU6IFdoZW4gdGhpcyBhdXRvY29tbWFuZCBpcyBleGVjdXRlZCwgdGhlCisJCQkJY3VycmVudCBidWZmZXIgIiUiIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJCQlidWZmZXIgYmVpbmcgY3JlYXRlZCAiPGFmaWxlPiIuCisJCQkJCQkJKkJ1ZkNyZWF0ZSogKkJ1ZkFkZCoKK0J1ZkFkZCBvciBCdWZDcmVhdGUJCUp1c3QgYWZ0ZXIgY3JlYXRpbmcgYSBuZXcgYnVmZmVyIHdoaWNoIGlzCisJCQkJYWRkZWQgdG8gdGhlIGJ1ZmZlciBsaXN0LCBvciBhZGRpbmcgYSBidWZmZXIKKwkJCQl0byB0aGUgYnVmZmVyIGxpc3QuCisJCQkJQWxzbyB1c2VkIGp1c3QgYWZ0ZXIgYSBidWZmZXIgaW4gdGhlIGJ1ZmZlcgorCQkJCWxpc3QgaGFzIGJlZW4gcmVuYW1lZC4KKwkJCQlUaGUgQnVmQ3JlYXRlIGV2ZW50IGlzIGZvciBoaXN0b3JpYyByZWFzb25zLgorCQkJCU5PVEU6IFdoZW4gdGhpcyBhdXRvY29tbWFuZCBpcyBleGVjdXRlZCwgdGhlCisJCQkJY3VycmVudCBidWZmZXIgIiUiIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkJCQlidWZmZXIgYmVpbmcgY3JlYXRlZCAiPGFmaWxlPiIuCisJCQkJCQkJKkJ1ZkRlbGV0ZSoKK0J1ZkRlbGV0ZQkJCUJlZm9yZSBkZWxldGluZyBhIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgbGlzdC4KKwkJCQlUaGUgQnVmVW5sb2FkIG1heSBiZSBjYWxsZWQgZmlyc3QgKGlmIHRoZQorCQkJCWJ1ZmZlciB3YXMgbG9hZGVkKS4KKwkJCQlBbHNvIHVzZWQganVzdCBiZWZvcmUgYSBidWZmZXIgaW4gdGhlIGJ1ZmZlcgorCQkJCWxpc3QgaXMgcmVuYW1lZC4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIGJlaW5nIGRlbGV0ZWQgIjxhZmlsZT4iLgorCQkJCQkJCSpCdWZXaXBlb3V0KgorQnVmV2lwZW91dAkJCUJlZm9yZSBjb21wbGV0ZWx5IGRlbGV0aW5nIGEgYnVmZmVyLiAgVGhlCisJCQkJQnVmVW5sb2FkIGFuZCBCdWZEZWxldGUgZXZlbnRzIG1heSBiZSBjYWxsZWQKKwkJCQlmaXJzdCAoaWYgdGhlIGJ1ZmZlciB3YXMgbG9hZGVkIGFuZCB3YXMgaW4gdGhlCisJCQkJYnVmZmVyIGxpc3QpLiAgQWxzbyB1c2VkIGp1c3QgYmVmb3JlIGEgYnVmZmVyCisJCQkJaXMgcmVuYW1lZCAoYWxzbyB3aGVuIGl0J3Mgbm90IGluIHRoZSBidWZmZXIKKwkJCQlsaXN0KS4KKwkJCQlOT1RFOiBXaGVuIHRoaXMgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQsIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyICIlIiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCisJCQkJYnVmZmVyIGJlaW5nIGRlbGV0ZWQgIjxhZmlsZT4iLgorCQkJCQkJCSpXaW5FbnRlcioKK1dpbkVudGVyCQkJQWZ0ZXIgZW50ZXJpbmcgYW5vdGhlciB3aW5kb3cuICBOb3QgZG9uZSBmb3IKKwkJCQl0aGUgZmlyc3Qgd2luZG93LCB3aGVuIFZpbSBoYXMganVzdCBzdGFydGVkLgorCQkJCVVzZWZ1bCBmb3Igc2V0dGluZyB0aGUgd2luZG93IGhlaWdodC4KKwkJCQlJZiB0aGUgd2luZG93IGlzIGZvciBhbm90aGVyIGJ1ZmZlciwgVmltCisJCQkJZXhlY3V0ZXMgdGhlIEJ1ZkVudGVyIGF1dG9jb21tYW5kcyBhZnRlciB0aGUKKwkJCQlXaW5FbnRlciBhdXRvY29tbWFuZHMuCisJCQkJTm90ZTogV2hlbiB1c2luZyAiOnNwbGl0IGZuYW1lIiB0aGUgV2luRW50ZXIKKwkJCQlldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIHNwbGl0IGJ1dCBiZWZvcmUKKwkJCQl0aGUgZmlsZSAiZm5hbWUiIGlzIGxvYWRlZC4KKwkJCQkJCQkqV2luTGVhdmUqCitXaW5MZWF2ZQkJCUJlZm9yZSBsZWF2aW5nIGEgd2luZG93LiAgSWYgdGhlIHdpbmRvdyB0byBiZQorCQkJCWVudGVyZWQgbmV4dCBpcyBmb3IgYSBkaWZmZXJlbnQgYnVmZmVyLCBWaW0KKwkJCQlleGVjdXRlcyB0aGUgQnVmTGVhdmUgYXV0b2NvbW1hbmRzIGJlZm9yZSB0aGUKKwkJCQlXaW5MZWF2ZSBhdXRvY29tbWFuZHMgKGJ1dCBub3QgZm9yICI6bmV3IikuCisJCQkJTm90IHVzZWQgZm9yICI6cWEiIG9yICI6cSIgd2hlbiBleGl0aW5nIFZpbS4KKwkJCQkJCQkqQ21kd2luRW50ZXIqCitDbWR3aW5FbnRlcgkJCUFmdGVyIGVudGVyaW5nIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LgorCQkJCVVzZWZ1bCBmb3Igc2V0dGluZyBvcHRpb25zIHNwZWNpZmljYWxseSBmb3IKKwkJCQl0aGlzIHNwZWNpYWwgdHlwZSBvZiB3aW5kb3cuICBUaGlzIGlzCisJCQkJdHJpZ2dlcmVkIF9pbnN0ZWFkXyBvZiBCdWZFbnRlciBhbmQgV2luRW50ZXIuCisJCQkJPGFmaWxlPiBpcyBzZXQgdG8gYSBzaW5nbGUgY2hhcmFjdGVyLAorCQkJCWluZGljYXRpbmcgdGhlIHR5cGUgb2YgY29tbWFuZC1saW5lLgorCQkJCXxjbWR3aW4tY2hhcnwKKwkJCQkJCQkqQ21kd2luTGVhdmUqCitDbWR3aW5MZWF2ZQkJCUJlZm9yZSBsZWF2aW5nIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LgorCQkJCVVzZWZ1bCB0byBjbGVhbiB1cCBhbnkgZ2xvYmFsIHNldHRpbmcgZG9uZQorCQkJCXdpdGggQ21kd2luRW50ZXIuICBUaGlzIGlzIHRyaWdnZXJlZCBfaW5zdGVhZF8KKwkJCQlvZiBCdWZMZWF2ZSBhbmQgV2luTGVhdmUuCisJCQkJPGFmaWxlPiBpcyBzZXQgdG8gYSBzaW5nbGUgY2hhcmFjdGVyLAorCQkJCWluZGljYXRpbmcgdGhlIHR5cGUgb2YgY29tbWFuZC1saW5lLgorCQkJCXxjbWR3aW4tY2hhcnwKKwkJCQkJCQkqR1VJRW50ZXIqCitHVUlFbnRlcgkJCUFmdGVyIHN0YXJ0aW5nIHRoZSBHVUkgc3VjY2Vzc2Z1bGx5LCBhbmQgYWZ0ZXIKKwkJCQlvcGVuaW5nIHRoZSB3aW5kb3cuICBJdCBpcyB0cmlnZ2VyZWQgYmVmb3JlCisJCQkJVmltRW50ZXIgd2hlbiB1c2luZyBndmltLiAgQ2FuIGJlIHVzZWQgdG8KKwkJCQlwb3NpdGlvbiB0aGUgd2luZG93IGZyb20gYSAuZ3ZpbXJjIGZpbGU6ID4KKwk6YXV0b2NtZCBHVUlFbnRlciAqIHdpbnBvcyAxMDAgNTAKKzwJCQkJCQkJKlZpbUVudGVyKgorVmltRW50ZXIJCQlBZnRlciBkb2luZyBhbGwgdGhlIHN0YXJ0dXAgc3R1ZmYsIGluY2x1ZGluZworCQkJCWxvYWRpbmcgLnZpbXJjIGZpbGVzLCBleGVjdXRpbmcgdGhlICItYyBjbWQiCisJCQkJYXJndW1lbnRzLCBjcmVhdGluZyBhbGwgd2luZG93cyBhbmQgbG9hZGluZworCQkJCXRoZSBidWZmZXJzIGluIHRoZW0uCisJCQkJCQkJKlZpbUxlYXZlUHJlKgorVmltTGVhdmVQcmUJCQlCZWZvcmUgZXhpdGluZyBWaW0sIGp1c3QgYmVmb3JlIHdyaXRpbmcgdGhlCisJCQkJLnZpbWluZm8gZmlsZS4gIFRoaXMgaXMgZXhlY3V0ZWQgb25seSBvbmNlLAorCQkJCWlmIHRoZXJlIGlzIGEgbWF0Y2ggd2l0aCB0aGUgbmFtZSBvZiB3aGF0CisJCQkJaGFwcGVucyB0byBiZSB0aGUgY3VycmVudCBidWZmZXIgd2hlbiBleGl0aW5nLgorCQkJCU1vc3RseSB1c2VmdWwgd2l0aCBhICIqIiBwYXR0ZXJuLiA+CisJOmF1dG9jbWQgVmltTGVhdmVQcmUgKiBjYWxsIENsZWFudXBTdHVmZigpCis8CQkJCVRvIGRldGVjdCBhbiBhYm5vcm1hbCBleGl0IHVzZSB8djpkeWluZ3wuCisJCQkJCQkJKlZpbUxlYXZlKgorVmltTGVhdmUJCQlCZWZvcmUgZXhpdGluZyBWaW0sIGp1c3QgYWZ0ZXIgd3JpdGluZyB0aGUKKwkJCQkudmltaW5mbyBmaWxlLiAgRXhlY3V0ZWQgb25seSBvbmNlLCBsaWtlCisJCQkJVmltTGVhdmVQcmUuCisJCQkJVG8gZGV0ZWN0IGFuIGFibm9ybWFsIGV4aXQgdXNlIHx2OmR5aW5nfC4KKwkJCQkJCQkqRW5jb2RpbmdDaGFuZ2VkKgorRW5jb2RpbmdDaGFuZ2VkCQkJRmlyZXMgb2ZmIHdoZW4gdGhlICdlbmNvZGluZycgb3B0aW9uIGlzCisJCQkJY2hhbmdlZC4gIFVzZWZ1bCB0byBzZXQgdXAgZm9udHMsIGZvciBleGFtcGxlLgorCQkJCQkJCSpGaWxlRW5jb2RpbmcqCitGaWxlRW5jb2RpbmcJCQlPYnNvbGV0ZS4gIEl0IHN0aWxsIHdvcmtzIGFuZCBpcyBlcXVpdmFsZW50CisJCQkJdG8gfEVuY29kaW5nQ2hhbmdlZHwuCisJCQkJCQkJKlJlbW90ZVJlcGx5KgorUmVtb3RlUmVwbHkJCQlXaGVuIGEgcmVwbHkgZnJvbSBhIFZpbSB0aGF0IGZ1bmN0aW9ucyBhcworCQkJCXNlcnZlciB3YXMgcmVjZWl2ZWQgfHNlcnZlcjJjbGllbnQoKXwuCisJCQkJPGFtYXRjaD4gaXMgZXF1YWwgdG8gdGhlIHtzZXJ2ZXJpZH0gZnJvbSB3aGljaAorCQkJCXRoZSByZXBseSB3YXMgc2VudCwgYW5kIDxhZmlsZT4gaXMgdGhlIGFjdHVhbAorCQkJCXJlcGx5IHN0cmluZy4KKwkJCQlOb3RlIHRoYXQgZXZlbiBpZiBhbiBhdXRvY29tbWFuZCBpcyBkZWZpbmVkLAorCQkJCXRoZSByZXBseSBzaG91bGQgYmUgcmVhZCB3aXRoIHxyZW1vdGVfcmVhZCgpfAorCQkJCXRvIGNvbnN1bWUgaXQuCisJCQkJCQkJKlRlcm1DaGFuZ2VkKgorVGVybUNoYW5nZWQJCQlBZnRlciB0aGUgdmFsdWUgb2YgJ3Rlcm0nIGhhcyBjaGFuZ2VkLiAgVXNlZnVsCisJCQkJZm9yIHJlLWxvYWRpbmcgdGhlIHN5bnRheCBmaWxlIHRvIHVwZGF0ZSB0aGUKKwkJCQljb2xvcnMsIGZvbnRzIGFuZCBvdGhlciB0ZXJtaW5hbC1kZXBlbmRlbnQKKwkJCQlzZXR0aW5ncy4gIEV4ZWN1dGVkIGZvciBhbGwgbG9hZGVkIGJ1ZmZlcnMuCisJCQkJCQkJKlRlcm1SZXNwb25zZSoKK1Rlcm1SZXNwb25zZQkJCUFmdGVyIHRoZSByZXNwb25zZSB0byB8dF9SVnwgaXMgcmVjZWl2ZWQgZnJvbQorCQkJCXRoZSB0ZXJtaW5hbC4gIFRoZSB2YWx1ZSBvZiB8djp0ZXJtcmVzcG9uc2V8CisJCQkJY2FuIGJlIHVzZWQgdG8gZG8gdGhpbmdzIGRlcGVuZGluZyBvbiB0aGUKKwkJCQl0ZXJtaW5hbCB2ZXJzaW9uLgorCQkJCQkJCSpVc2VyR2V0dGluZ0JvcmVkKgorVXNlckdldHRpbmdCb3JlZAkJV2hlbiB0aGUgdXNlciBoaXRzIENUUkwtQy4gIEp1c3Qga2lkZGluZyEgOi0pCisJCQkJCQkJKlVzZXIqCitVc2VyCQkJCU5ldmVyIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkuICBUbyBiZSB1c2VkIGZvcgorCQkJCWF1dG9jb21tYW5kcyB0aGF0IGFyZSBvbmx5IGV4ZWN1dGVkIHdpdGgKKwkJCQkiOmRvYXV0b2NtZCIuCisKK1lvdSBjYW4gc3BlY2lmeSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50IG5hbWVzLiAgTm8gd2hpdGUgc3BhY2UgY2FuIGJlCit1c2VkIGluIHRoaXMgbGlzdC4gIFRoZSBjb21tYW5kIGFwcGxpZXMgdG8gYWxsIHRoZSBldmVudHMgaW4gdGhlIGxpc3QuCisKK0ZvciBSRUFESU5HIEZJTEVTIHRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIGV2ZW50cyBwb3NzaWJsZToKKwlCdWZOZXdGaWxlCQkJc3RhcnRpbmcgdG8gZWRpdCBhIG5vbi1leGlzdGVudCBmaWxlCisJQnVmUmVhZFByZQlCdWZSZWFkUG9zdAlzdGFydGluZyB0byBlZGl0IGFuIGV4aXN0aW5nIGZpbGUKKwlGaWx0ZXJSZWFkUHJlCUZpbHRlclJlYWRQb3N0CXJlYWQgdGhlIHRlbXAgZmlsZSB3aXRoIGZpbHRlciBvdXRwdXQKKwlGaWxlUmVhZFByZQlGaWxlUmVhZFBvc3QJYW55IG90aGVyIGZpbGUgcmVhZAorVmltIHVzZXMgb25seSBvbmUgb2YgdGhlc2UgZm91ciBraW5kcyB3aGVuIHJlYWRpbmcgYSBmaWxlLiAgVGhlICJQcmUiIGFuZAorIlBvc3QiIGV2ZW50cyBhcmUgYm90aCB0cmlnZ2VyZWQsIGJlZm9yZSBhbmQgYWZ0ZXIgcmVhZGluZyB0aGUgZmlsZS4KKworTm90ZSB0aGF0IHRoZSBhdXRvY29tbWFuZHMgZm9yIHRoZSAqUmVhZFByZSBldmVudHMgYW5kIGFsbCB0aGUgRmlsdGVyIGV2ZW50cworYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgY3VycmVudCBidWZmZXIgKHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlIGlmCit0aGlzIGhhcHBlbnMpLiAgVGhpcyBpcyB0byBwcmV2ZW50IHRoZSBmaWxlIHRvIGJlIHJlYWQgaW50byB0aGUgd3JvbmcgYnVmZmVyLgorCitOb3RlIHRoYXQgdGhlICdtb2RpZmllZCcgZmxhZyBpcyByZXNldCBBRlRFUiBleGVjdXRpbmcgdGhlIEJ1ZlJlYWRQb3N0CithbmQgQnVmTmV3RmlsZSBhdXRvY29tbWFuZHMuICBCdXQgd2hlbiB0aGUgJ21vZGlmaWVkJyBvcHRpb24gd2FzIHNldCBieSB0aGUKK2F1dG9jb21tYW5kcywgdGhpcyBkb2Vzbid0IGhhcHBlbi4KKworWW91IGNhbiB1c2UgdGhlICdldmVudGlnbm9yZScgb3B0aW9uIHRvIGlnbm9yZSBhIG51bWJlciBvZiBldmVudHMgb3IgYWxsCitldmVudHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gUGF0dGVybnMJCQkJCSphdXRvY21kLXBhdHRlcm5zKiAqe3BhdH0qCisKK1RoZSBmaWxlIHBhdHRlcm4ge3BhdH0gaXMgdGVzdGVkIGZvciBhIG1hdGNoIGFnYWluc3QgdGhlIGZpbGUgbmFtZSBpbiBvbmUgb2YKK3R3byB3YXlzOgorMS4gV2hlbiB0aGVyZSBpcyBubyAnLycgaW4gdGhlIHBhdHRlcm4sIFZpbSBjaGVja3MgZm9yIGEgbWF0Y2ggYWdhaW5zdCBvbmx5CisgICB0aGUgdGFpbCBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUgKHdpdGhvdXQgaXRzIGxlYWRpbmcgZGlyZWN0b3J5IHBhdGgpLgorMi4gV2hlbiB0aGVyZSBpcyBhICcvJyBpbiB0aGUgcGF0dGVybiwgIFZpbSBjaGVja3MgZm9yIGEgbWF0Y2ggYWdhaW5zdCB0aGUKKyAgIGJvdGggc2hvcnQgZmlsZSBuYW1lIChhcyB5b3UgdHlwZWQgaXQpIGFuZCB0aGUgZnVsbCBmaWxlIG5hbWUgKGFmdGVyCisgICBleHBhbmRpbmcgaXQgdG8gYSBmdWxsIHBhdGggYW5kIHJlc29sdmluZyBzeW1ib2xpYyBsaW5rcykuCisKK0V4YW1wbGVzOiA+CisJOmF1dG9jbWQgQnVmUmVhZCAqLnR4dAkJc2V0IGV0CitTZXQgdGhlICdldCcgb3B0aW9uIGZvciBhbGwgdGV4dCBmaWxlcy4gPgorCisJOmF1dG9jbWQgQnVmUmVhZCAvdmltL3NyYy8qLmMJc2V0IGNpbmRlbnQKK1NldCB0aGUgJ2NpbmRlbnQnIG9wdGlvbiBmb3IgQyBmaWxlcyBpbiB0aGUgL3ZpbS9zcmMgZGlyZWN0b3J5LiA+CisKKwk6YXV0b2NtZCBCdWZSZWFkIC90bXAvKi5jCXNldCB0cz01CitJZiB5b3UgaGF2ZSBhIGxpbmsgZnJvbSAiL3RtcC90ZXN0LmMiIHRvICIvaG9tZS9ub2JvZHkvdmltL3NyYy90ZXN0LmMiLCBhbmQKK3lvdSBzdGFydCBlZGl0aW5nICIvdG1wL3Rlc3QuYyIsIHRoaXMgYXV0b2NvbW1hbmQgd2lsbCBtYXRjaC4KKworTm90ZTogIFRvIG1hdGNoIHBhcnQgb2YgYSBwYXRoLCBidXQgbm90IGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5LCB1c2UgYSAnKicgYXMKK3RoZSBmaXJzdCBjaGFyYWN0ZXIuICBFeGFtcGxlOiA+CisJOmF1dG9jbWQgQnVmUmVhZCAqL2RvYy8qLnR4dAlzZXQgdHc9NzgKK1RoaXMgYXV0b2NvbW1hbmQgd2lsbCBmb3IgZXhhbXBsZSBiZSBleGVjdXRlZCBmb3IgIi90bXAvZG9jL3h4LnR4dCIgYW5kCisiL3Vzci9ob21lL3BpZXQvZG9jL3l5LnR4dCIuICBUaGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGRvZXMgbm90IG1hdHRlciBoZXJlLgorCisKK1RoZSBmaWxlIG5hbWUgdGhhdCB0aGUgcGF0dGVybiBpcyBtYXRjaGVkIGFnYWluc3QgaXMgYWZ0ZXIgZXhwYW5kaW5nCit3aWxkY2FyZHMuICBUaHVzIGlzIHlvdSBpc3N1ZSB0aGlzIGNvbW1hbmQ6ID4KKwk6ZSAkUk9PVERJUi9tYWluLiRFWFQKK1RoZSBhcmd1bWVudCBpcyBmaXJzdCBleHBhbmRlZCB0bzogPgorCS91c3Ivcm9vdC9tYWluLnB5CitCZWZvcmUgaXQncyBtYXRjaGVkIHdpdGggdGhlIHBhdHRlcm4gb2YgdGhlIGF1dG9jb21tYW5kLiAgQ2FyZWZ1bCB3aXRoIHRoaXMKK3doZW4gdXNpbmcgZXZlbnRzIGxpa2UgRmlsZVJlYWRDbWQsIHRoZSB2YWx1ZSBvZiA8YW1hdGNoPiBtYXkgbm90IGJlIHdoYXQgeW91CitleHBlY3QuCisKKworRW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGluIGEgcGF0dGVybjogPgorCTphdXRvY21kIEJ1ZlJlYWQgJFZJTVJVTlRJTUUvZG9jLyoudHh0ICBzZXQgZXhwYW5kdGFiCitBbmQgfiBjYW4gYmUgdXNlZCBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IChpZiAkSE9NRSBpcyBkZWZpbmVkKTogPgorCTphdXRvY21kIEJ1ZldyaXRlUG9zdCB+Ly52aW1yYyAgIHNvIH4vLnZpbXJjCisJOmF1dG9jbWQgQnVmUmVhZCB+YXJjaGl2ZS8qICAgICAgc2V0IHJlYWRvbmx5CitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZXhwYW5kZWQgd2hlbiB0aGUgYXV0b2NvbW1hbmQgaXMgZGVmaW5lZCwgbm90IHdoZW4KK3RoZSBhdXRvY29tbWFuZCBpcyBleGVjdXRlZC4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNvbW1hbmQhCisKKwkJCQkJCQkqZmlsZS1wYXR0ZXJuKgorVGhlIHBhdHRlcm4gaXMgaW50ZXJwcmV0ZWQgbGlrZSBtb3N0bHkgdXNlZCBpbiBmaWxlIG5hbWVzOgorCSoJbWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycworCT8JbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlcgorCVw/CW1hdGNoZXMgYSAnPycKKwkuCW1hdGNoZXMgYSAnLicKKwl+CW1hdGNoZXMgYSAnficKKwksCXNlcGFyYXRlcyBwYXR0ZXJucworCVwsCW1hdGNoZXMgYSAnLCcKKwl7IH0JbGlrZSBcKCBcKSBpbiBhIHxwYXR0ZXJufAorCSwJaW5zaWRlIHsgfTogbGlrZSBcfCBpbiBhIHxwYXR0ZXJufAorCVwJc3BlY2lhbCBtZWFuaW5nIGxpa2UgaW4gYSB8cGF0dGVybnwKKwlbY2hdCW1hdGNoZXMgJ2MnIG9yICdoJworCVteY2hdICAgbWF0Y2ggYW55IGNoYXJhY3RlciBidXQgJ2MnIGFuZCAnaCcKKworTm90ZSB0aGF0IGZvciBhbGwgc3lzdGVtcyB0aGUgJy8nIGNoYXJhY3RlciBpcyB1c2VkIGZvciBwYXRoIHNlcGFyYXRvciAoZXZlbgorTVMtRE9TIGFuZCBPUy8yKS4gIFRoaXMgd2FzIGRvbmUgYmVjYXVzZSB0aGUgYmFja3NsYXNoIGlzIGRpZmZpY3VsdCB0byB1c2UKK2luIGEgcGF0dGVybiBhbmQgdG8gbWFrZSB0aGUgYXV0b2NvbW1hbmRzIHBvcnRhYmxlIGFjcm9zcyBkaWZmZXJlbnQgc3lzdGVtcy4KKworCitNYXRjaGluZyB3aXRoIHRoZSBwYXR0ZXJuIGlzIGRvbmUgd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuICBDaGFuZ2luZyB0aGUKK2J1ZmZlciBuYW1lIGluIG9uZSBvZiB0aGUgYXV0b2NvbW1hbmRzLCBvciBldmVuIGRlbGV0aW5nIHRoZSBidWZmZXIsIGRvZXMgbm90CitjaGFuZ2Ugd2hpY2ggYXV0b2NvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQuICBFeGFtcGxlOiA+CisKKwlhdSBCdWZFbnRlciAqLmZvbyAgYmRlbAorCWF1IEJ1ZkVudGVyICouZm9vICBzZXQgbW9kaWZpZWQKKworVGhpcyB3aWxsIGRlbGV0ZSB0aGUgY3VycmVudCBidWZmZXIgYW5kIHRoZW4gc2V0ICdtb2RpZmllZCcgaW4gd2hhdCBoYXMgYmVjb21lCit0aGUgY3VycmVudCBidWZmZXIgaW5zdGVhZC4gIFZpbSBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRoYXQgIiouZm9vIgorZG9lc24ndCBtYXRjaCB3aXRoIHRoYXQgYnVmZmVyIG5hbWUuICBJdCBtYXRjaGVzICIqLmZvbyIgd2l0aCB0aGUgbmFtZSBvZiB0aGUKK2J1ZmZlciBhdCB0aGUgbW9tZW50IHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIEdyb3VwcwkJCQkJCSphdXRvY21kLWdyb3VwcyoKKworQXV0b2NvbW1hbmRzIGNhbiBiZSBwdXQgdG9nZXRoZXIgaW4gYSBncm91cC4gIFRoaXMgaXMgdXNlZnVsIGZvciByZW1vdmluZyBvcgorZXhlY3V0aW5nIGEgZ3JvdXAgb2YgYXV0b2NvbW1hbmRzLiAgRm9yIGV4YW1wbGUsIGFsbCB0aGUgYXV0b2NvbW1hbmRzIGZvcgorc3ludGF4IGhpZ2hsaWdodGluZyBhcmUgcHV0IGluIHRoZSAiaGlnaGxpZ2h0IiBncm91cCwgdG8gYmUgYWJsZSB0byBleGVjdXRlCisiOmRvYXV0b2FsbCBoaWdobGlnaHQgQnVmUmVhZCIgd2hlbiB0aGUgR1VJIHN0YXJ0cy4KKworV2hlbiBubyBzcGVjaWZpYyBncm91cCBpcyBzZWxlY3RlZCwgVmltIHVzZXMgdGhlIGRlZmF1bHQgZ3JvdXAuICBUaGUgZGVmYXVsdAorZ3JvdXAgZG9lcyBub3QgaGF2ZSBhIG5hbWUuICBZb3UgY2Fubm90IGV4ZWN1dGUgdGhlIGF1dG9jb21tYW5kcyBmcm9tIHRoZQorZGVmYXVsdCBncm91cCBzZXBhcmF0ZWx5OyB5b3UgY2FuIGV4ZWN1dGUgdGhlbSBvbmx5IGJ5IGV4ZWN1dGluZyBhdXRvY29tbWFuZHMKK2ZvciBhbGwgZ3JvdXBzLgorCitOb3JtYWxseSwgd2hlbiBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIGF1dG9tYXRpY2FsbHksIFZpbSB1c2VzIHRoZSBhdXRvY29tbWFuZHMKK2ZvciBhbGwgZ3JvdXBzLiAgVGhlIGdyb3VwIG9ubHkgbWF0dGVycyB3aGVuIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMgd2l0aAorIjpkb2F1dG9jbWQiIG9yICI6ZG9hdXRvYWxsIiwgb3Igd2hlbiBkZWZpbmluZyBvciBkZWxldGluZyBhdXRvY29tbWFuZHMuCisKK1RoZSBncm91cCBuYW1lIGNhbiBjb250YWluIGFueSBjaGFyYWN0ZXJzIGV4Y2VwdCB3aGl0ZSBzcGFjZS4gIFRoZSBncm91cCBuYW1lCisiZW5kIiBpcyByZXNlcnZlZCAoYWxzbyBpbiB1cHBlcmNhc2UpLgorCitUaGUgZ3JvdXAgbmFtZSBpcyBjYXNlIHNlbnNpdGl2ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBldmVudAorbmFtZSEKKworCQkJCQkJCSo6YXVnKiAqOmF1Z3JvdXAqCis6YXVnW3JvdXBdIHtuYW1lfQkJRGVmaW5lIHRoZSBhdXRvY21kIGdyb3VwIG5hbWUgZm9yIHRoZQorCQkJCWZvbGxvd2luZyAiOmF1dG9jbWQiIGNvbW1hbmRzLiAgVGhlIG5hbWUgImVuZCIKKwkJCQlvciAiRU5EIiBzZWxlY3RzIHRoZSBkZWZhdWx0IGdyb3VwLgorCisJCQkJCQkqOmF1Z3JvdXAtZGVsZXRlKiAqRTM2NyoKKzphdWdbcm91cF0hIHtuYW1lfQkJRGVsZXRlIHRoZSBhdXRvY21kIGdyb3VwIHtuYW1lfS4gIERvbid0IHVzZQorCQkJCXRoaXMgaWYgdGhlcmUgaXMgc3RpbGwgYW4gYXV0b2NvbW1hbmQgdXNpbmcKKwkJCQl0aGlzIGdyb3VwISAgVGhpcyBpcyBub3QgY2hlY2tlZC4KKworVG8gZW50ZXIgYXV0b2NvbW1hbmRzIGZvciBhIHNwZWNpZmljIGdyb3VwLCB1c2UgdGhpcyBtZXRob2Q6CisxLiBTZWxlY3QgdGhlIGdyb3VwIHdpdGggIjphdWdyb3VwIHtuYW1lfSIuCisyLiBEZWxldGUgYW55IG9sZCBhdXRvY29tbWFuZHMgd2l0aCAiOmF1ISIuCiszLiBEZWZpbmUgdGhlIGF1dG9jb21tYW5kcy4KKzQuIEdvIGJhY2sgdG8gdGhlIGRlZmF1bHQgZ3JvdXAgd2l0aCAiYXVncm91cCBFTkQiLgorCitFeGFtcGxlOiA+CisJOmF1Z3JvdXAgdW5jb21wcmVzcworCTogIGF1IQorCTogIGF1IEJ1ZkVudGVyICouZ3oJJSFndW56aXAKKwk6YXVncm91cCBFTkQKKworVGhpcyBwcmV2ZW50cyBoYXZpbmcgdGhlIGF1dG9jb21tYW5kcyBkZWZpbmVkIHR3aWNlIChlLmcuLCBhZnRlciBzb3VyY2luZyB0aGUKKy52aW1yYyBmaWxlIGFnYWluKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBFeGVjdXRpbmcgYXV0b2NvbW1hbmRzCQkJCSphdXRvY21kLWV4ZWN1dGUqCisKK1ZpbSBjYW4gYWxzbyBleGVjdXRlIEF1dG9jb21tYW5kcyBub24tYXV0b21hdGljYWxseS4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdQoraGF2ZSBjaGFuZ2VkIGF1dG9jb21tYW5kcywgb3Igd2hlbiBWaW0gaGFzIGV4ZWN1dGVkIHRoZSB3cm9uZyBhdXRvY29tbWFuZHMKKyhlLmcuLCB0aGUgZmlsZSBwYXR0ZXJuIG1hdGNoIHdhcyB3cm9uZykuCisKK05vdGUgdGhhdCB0aGUgJ2V2ZW50aWdub3JlJyBvcHRpb24gYXBwbGllcyBoZXJlIHRvby4gIEV2ZW50cyBsaXN0ZWQgaW4gdGhpcworb3B0aW9uIHdpbGwgbm90IGNhdXNlIGFueSBjb21tYW5kcyB0byBiZSBleGVjdXRlZC4KKworCQkJCQkqOmRvKiAqOmRvYXUqICo6ZG9hdXRvY21kKiAqRTIxNyoKKzpkb1thdXRvY21kXSBbZ3JvdXBdIHtldmVudH0gW2ZuYW1lXQorCQkJQXBwbHkgdGhlIGF1dG9jb21tYW5kcyBtYXRjaGluZyBbZm5hbWVdIChkZWZhdWx0OgorCQkJY3VycmVudCBmaWxlIG5hbWUpIGZvciB7ZXZlbnR9IHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJCVlvdSBjYW4gdXNlIHRoaXMgd2hlbiB0aGUgY3VycmVudCBmaWxlIG5hbWUgZG9lcyBub3QKKwkJCW1hdGNoIHRoZSByaWdodCBwYXR0ZXJuLCBhZnRlciBjaGFuZ2luZyBzZXR0aW5ncywgb3IKKwkJCXRvIGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBhIGNlcnRhaW4gZXZlbnQuCisJCQlJdCdzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGluc2lkZSBhbiBhdXRvY29tbWFuZCB0b28sCisJCQlzbyB5b3UgY2FuIGJhc2UgdGhlIGF1dG9jb21tYW5kcyBmb3Igb25lIGV4dGVuc2lvbiBvbgorCQkJYW5vdGhlciBleHRlbnNpb24uICBFeGFtcGxlOiA+CisJCQkJOmF1IEJ1ZmVudGVyICouY3BwIHNvIH4vLnZpbXJjX2NwcAorCQkJCTphdSBCdWZlbnRlciAqLmNwcCBkb2F1IEJ1ZkVudGVyIHguYworPAkJCUJlIGNhcmVmdWwgdG8gYXZvaWQgZW5kbGVzcyBsb29wcy4gIFNlZQorCQkJfGF1dG9jbWQtbmVzdGVkfC4KKworCQkJV2hlbiB0aGUgW2dyb3VwXSBhcmd1bWVudCBpcyBub3QgZ2l2ZW4sIFZpbSBleGVjdXRlcworCQkJdGhlIGF1dG9jb21tYW5kcyBmb3IgYWxsIGdyb3Vwcy4gIFdoZW4gdGhlIFtncm91cF0KKwkJCWFyZ3VtZW50IGlzIGluY2x1ZGVkLCBWaW0gZXhlY3V0ZXMgb25seSB0aGUgbWF0Y2hpbmcKKwkJCWF1dG9jb21tYW5kcyBmb3IgdGhhdCBncm91cC4gIE5vdGU6IGlmIHlvdSB1c2UgYW4KKwkJCXVuZGVmaW5lZCBncm91cCBuYW1lLCBWaW0gZ2l2ZXMgeW91IGFuIGVycm9yIG1lc3NhZ2UuCisKKwkJCQkJCSo6ZG9hdXRvYSogKjpkb2F1dG9hbGwqCis6ZG9hdXRvYVtsbF0gW2dyb3VwXSB7ZXZlbnR9IFtmbmFtZV0KKwkJCUxpa2UgIjpkb2F1dG9jbWQiLCBidXQgYXBwbHkgdGhlIGF1dG9jb21tYW5kcyB0byBlYWNoCisJCQlsb2FkZWQgYnVmZmVyLiAgTm90ZSB0aGF0IHtmbmFtZX0gaXMgdXNlZCB0byBzZWxlY3QKKwkJCXRoZSBhdXRvY29tbWFuZHMsIG5vdCB0aGUgYnVmZmVycyB0byB3aGljaCB0aGV5IGFyZQorCQkJYXBwbGllZC4KKwkJCUNhcmVmdWw6IERvbid0IHVzZSB0aGlzIGZvciBhdXRvY29tbWFuZHMgdGhhdCBkZWxldGUgYQorCQkJYnVmZmVyLCBjaGFuZ2UgdG8gYW5vdGhlciBidWZmZXIgb3IgY2hhbmdlIHRoZQorCQkJY29udGVudHMgb2YgYSBidWZmZXI7IHRoZSByZXN1bHQgaXMgdW5wcmVkaWN0YWJsZS4KKwkJCVRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgYXV0b2NvbW1hbmRzIHRoYXQgc2V0CisJCQlvcHRpb25zLCBjaGFuZ2UgaGlnaGxpZ2h0aW5nLCBhbmQgdGhpbmdzIGxpa2UgdGhhdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBVc2luZyBhdXRvY29tbWFuZHMJCQkJCSphdXRvY21kLXVzZSoKKworRm9yIFdSSVRJTkcgRklMRVMgdGhlcmUgYXJlIGZvdXIgcG9zc2libGUgc2V0cyBvZiBldmVudHMuICBWaW0gdXNlcyBvbmx5IG9uZQorb2YgdGhlc2Ugc2V0cyBmb3IgYSB3cml0ZSBjb21tYW5kOgorCitCdWZXcml0ZUNtZAlCdWZXcml0ZVByZQlCdWZXcml0ZVBvc3QJd3JpdGluZyB0aGUgd2hvbGUgYnVmZmVyCisJCUZpbHRlcldyaXRlUHJlCUZpbHRlcldyaXRlUG9zdAl3cml0aW5nIHRvIGZpbHRlciB0ZW1wIGZpbGUKK0ZpbGVBcHBlbmRDbWQJRmlsZUFwcGVuZFByZQlGaWxlQXBwZW5kUG9zdAlhcHBlbmRpbmcgdG8gYSBmaWxlCitGaWxlV3JpdGVDbWQJRmlsZVdyaXRlUHJlCUZpbGVXcml0ZVBvc3QJYW55IG90aGVyIGZpbGUgd3JpdGUKKworV2hlbiB0aGVyZSBpcyBhIG1hdGNoaW5nICIqQ21kIiBhdXRvY29tbWFuZCwgaXQgaXMgYXNzdW1lZCBpdCB3aWxsIGRvIHRoZQord3JpdGluZy4gIE5vIGZ1cnRoZXIgd3JpdGluZyBpcyBkb25lIGFuZCB0aGUgb3RoZXIgZXZlbnRzIGFyZSBub3QgdHJpZ2dlcmVkLgorfENtZC1ldmVudHwKKworTm90ZSB0aGF0IHRoZSAqV3JpdGVQb3N0IGNvbW1hbmRzIHNob3VsZCB1bmRvIGFueSBjaGFuZ2VzIHRvIHRoZSBidWZmZXIgdGhhdAord2VyZSBjYXVzZWQgYnkgdGhlICpXcml0ZVByZSBjb21tYW5kczsgb3RoZXJ3aXNlLCB3cml0aW5nIHRoZSBmaWxlIHdpbGwgaGF2ZQordGhlIHNpZGUgZWZmZWN0IG9mIGNoYW5naW5nIHRoZSBidWZmZXIuCisKK0JlZm9yZSBleGVjdXRpbmcgdGhlIGF1dG9jb21tYW5kcywgdGhlIGJ1ZmZlciBmcm9tIHdoaWNoIHRoZSBsaW5lcyBhcmUgdG8gYmUKK3dyaXR0ZW4gdGVtcG9yYXJpbHkgYmVjb21lcyB0aGUgY3VycmVudCBidWZmZXIuICBVbmxlc3MgdGhlIGF1dG9jb21tYW5kcworY2hhbmdlIHRoZSBjdXJyZW50IGJ1ZmZlciBvciBkZWxldGUgdGhlIHByZXZpb3VzbHkgY3VycmVudCBidWZmZXIsIHRoZQorcHJldmlvdXNseSBjdXJyZW50IGJ1ZmZlciBpcyBtYWRlIHRoZSBjdXJyZW50IGJ1ZmZlciBhZ2Fpbi4KKworVGhlICpXcml0ZVByZSBhbmQgKkFwcGVuZFByZSBhdXRvY29tbWFuZHMgbXVzdCBub3QgZGVsZXRlIHRoZSBidWZmZXIgZnJvbQord2hpY2ggdGhlIGxpbmVzIGFyZSB0byBiZSB3cml0dGVuLgorCitUaGUgJ1sgYW5kICddIG1hcmtzIGhhdmUgYSBzcGVjaWFsIHBvc2l0aW9uOgorLSBCZWZvcmUgdGhlICpSZWFkUHJlIGV2ZW50IHRoZSAnWyBtYXJrIGlzIHNldCB0byB0aGUgbGluZSBqdXN0IGFib3ZlIHdoZXJlCisgIHRoZSBuZXcgbGluZXMgd2lsbCBiZSBpbnNlcnRlZC4KKy0gQmVmb3JlIHRoZSAqUmVhZFBvc3QgZXZlbnQgdGhlICdbIG1hcmsgaXMgc2V0IHRvIHRoZSBmaXJzdCBsaW5lIHRoYXQgd2FzCisgIGp1c3QgcmVhZCwgdGhlICddIG1hcmsgdG8gdGhlIGxhc3QgbGluZS4KKy0gQmVmb3JlIGV4ZWN1dGluZyB0aGUgKldyaXRlUHJlIGFuZCAqQXBwZW5kUHJlIGF1dG9jb21tYW5kcyB0aGUgJ1sgbWFyayBpcworICBzZXQgdG8gdGhlIGZpcnN0IGxpbmUgdGhhdCB3aWxsIGJlIHdyaXR0ZW4sIHRoZSAnXSBtYXJrIHRvIHRoZSBsYXN0IGxpbmUuCitDYXJlZnVsOiAnWyBhbmQgJ10gY2hhbmdlIHdoZW4gdXNpbmcgY29tbWFuZHMgdGhhdCBjaGFuZ2UgdGhlIGJ1ZmZlci4KKworSW4gY29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgZmlsZSBuYW1lLCB5b3UgY2FuIHVzZSAiPGFmaWxlPiIgZm9yIHRoZSBmaWxlIG5hbWUKK3RoYXQgaXMgYmVpbmcgcmVhZCB8OjxhZmlsZT58ICh5b3UgY2FuIGFsc28gdXNlICIlIiBmb3IgdGhlIGN1cnJlbnQgZmlsZQorbmFtZSkuICAiPGFidWY+IiBjYW4gYmUgdXNlZCBmb3IgdGhlIGJ1ZmZlciBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSBlZmZlY3RpdmUKK2J1ZmZlci4gIFRoaXMgYWxzbyB3b3JrcyBmb3IgYnVmZmVycyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5hbWUuICBCdXQgaXQgZG9lc24ndAord29yayBmb3IgZmlsZXMgd2l0aG91dCBhIGJ1ZmZlciAoZS5nLiwgd2l0aCAiOnIgZmlsZSIpLgorCisJCQkJCQkJKmd6aXAtZXhhbXBsZSoKK0V4YW1wbGVzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGNvbXByZXNzZWQgZmlsZXM6ID4KKyAgOmF1Z3JvdXAgZ3ppcAorICA6ICBhdXRvY21kIQorICA6ICBhdXRvY21kIEJ1ZlJlYWRQcmUsRmlsZVJlYWRQcmUJKi5neiBzZXQgYmluCisgIDogIGF1dG9jbWQgQnVmUmVhZFBvc3QsRmlsZVJlYWRQb3N0CSouZ3ogJ1ssJ10hZ3VuemlwCisgIDogIGF1dG9jbWQgQnVmUmVhZFBvc3QsRmlsZVJlYWRQb3N0CSouZ3ogc2V0IG5vYmluCisgIDogIGF1dG9jbWQgQnVmUmVhZFBvc3QsRmlsZVJlYWRQb3N0CSouZ3ogZXhlY3V0ZSAiOmRvYXV0b2NtZCBCdWZSZWFkUG9zdCAiIC4gZXhwYW5kKCIlOnIiKQorICA6ICBhdXRvY21kIEJ1ZldyaXRlUG9zdCxGaWxlV3JpdGVQb3N0CSouZ3ogIW12IDxhZmlsZT4gPGFmaWxlPjpyCisgIDogIGF1dG9jbWQgQnVmV3JpdGVQb3N0LEZpbGVXcml0ZVBvc3QJKi5neiAhZ3ppcCA8YWZpbGU+OnIKKworICA6ICBhdXRvY21kIEZpbGVBcHBlbmRQcmUJCSouZ3ogIWd1bnppcCA8YWZpbGU+CisgIDogIGF1dG9jbWQgRmlsZUFwcGVuZFByZQkJKi5neiAhbXYgPGFmaWxlPjpyIDxhZmlsZT4KKyAgOiAgYXV0b2NtZCBGaWxlQXBwZW5kUG9zdAkJKi5neiAhbXYgPGFmaWxlPiA8YWZpbGU+OnIKKyAgOiAgYXV0b2NtZCBGaWxlQXBwZW5kUG9zdAkJKi5neiAhZ3ppcCA8YWZpbGU+OnIKKyAgOmF1Z3JvdXAgRU5ECisKK1RoZSAiZ3ppcCIgZ3JvdXAgaXMgdXNlZCB0byBiZSBhYmxlIHRvIGRlbGV0ZSBhbnkgZXhpc3RpbmcgYXV0b2NvbW1hbmRzIHdpdGgKKyI6YXV0b2NtZCEiLCBmb3Igd2hlbiB0aGUgZmlsZSBpcyBzb3VyY2VkIHR3aWNlLgorCisoIjxhZmlsZT46ciIgaXMgdGhlIGZpbGUgbmFtZSB3aXRob3V0IHRoZSBleHRlbnNpb24sIHNlZSB8Ol8lOnwpCisKK1RoZSBjb21tYW5kcyBleGVjdXRlZCBmb3IgdGhlIEJ1Zk5ld0ZpbGUsIEJ1ZlJlYWQvQnVmUmVhZFBvc3QsIEJ1ZldyaXRlUG9zdCwKK0ZpbGVBcHBlbmRQb3N0IGFuZCBWaW1MZWF2ZSBldmVudHMgZG8gbm90IHNldCBvciByZXNldCB0aGUgY2hhbmdlZCBmbGFnIG9mIHRoZQorYnVmZmVyLiAgV2hlbiB5b3UgZGVjb21wcmVzcyB0aGUgYnVmZmVyIHdpdGggdGhlIEJ1ZlJlYWRQb3N0IGF1dG9jb21tYW5kcywgeW91CitjYW4gc3RpbGwgZXhpdCB3aXRoICI6cSIuICBXaGVuIHlvdSB1c2UgIjp1bmRvIiBpbiBCdWZXcml0ZVBvc3QgdG8gdW5kbyB0aGUKK2NoYW5nZXMgbWFkZSBieSBCdWZXcml0ZVByZSBjb21tYW5kcywgeW91IGNhbiBzdGlsbCBkbyAiOnEiICh0aGlzIGFsc28gbWFrZXMKKyJaWiIgd29yaykuICBJZiB5b3UgZG8gd2FudCB0aGUgYnVmZmVyIHRvIGJlIG1hcmtlZCBhcyBtb2RpZmllZCwgc2V0IHRoZQorJ21vZGlmaWVkJyBvcHRpb24uCisKK1RvIGV4ZWN1dGUgTm9ybWFsIG1vZGUgY29tbWFuZHMgZnJvbSBhbiBhdXRvY29tbWFuZCwgdXNlIHRoZSAiOm5vcm1hbCIKK2NvbW1hbmQuICBVc2Ugd2l0aCBjYXJlISAgSWYgdGhlIE5vcm1hbCBtb2RlIGNvbW1hbmQgaXMgbm90IGZpbmlzaGVkLCB0aGUgdXNlcgorbmVlZHMgdG8gdHlwZSBjaGFyYWN0ZXJzIChlLmcuLCBhZnRlciAiOm5vcm1hbCBtIiB5b3UgbmVlZCB0byB0eXBlIGEgbWFyaworbmFtZSkuCisKK0lmIHlvdSB3YW50IHRoZSBidWZmZXIgdG8gYmUgdW5tb2RpZmllZCBhZnRlciBjaGFuZ2luZyBpdCwgcmVzZXQgdGhlCisnbW9kaWZpZWQnIG9wdGlvbi4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZXhpdCB0aGUgYnVmZmVyIHdpdGggIjpxIgoraW5zdGVhZCBvZiAiOnEhIi4KKworCQkJCQkJCSphdXRvY21kLW5lc3RlZCogKkUyMTgqCitCeSBkZWZhdWx0LCBhdXRvY29tbWFuZHMgZG8gbm90IG5lc3QuICBJZiB5b3UgdXNlICI6ZSIgb3IgIjp3IiBpbiBhbgorYXV0b2NvbW1hbmQsIFZpbSBkb2VzIG5vdCBleGVjdXRlIHRoZSBCdWZSZWFkIGFuZCBCdWZXcml0ZSBhdXRvY29tbWFuZHMgZm9yCit0aG9zZSBjb21tYW5kcy4gIElmIHlvdSBkbyB3YW50IHRoaXMsIHVzZSB0aGUgIm5lc3RlZCIgZmxhZyBmb3IgdGhvc2UgY29tbWFuZHMKK2luIHdoaWNoIHlvdSB3YW50IG5lc3RpbmcuICBGb3IgZXhhbXBsZTogPgorICA6YXV0b2NtZCBGaWxlQ2hhbmdlZFNoZWxsICouYyBuZXN0ZWQgZSEKK1RoZSBuZXN0aW5nIGlzIGxpbWl0ZWQgdG8gMTAgbGV2ZWxzIHRvIGdldCBvdXQgb2YgcmVjdXJzaXZlIGxvb3BzLgorCitJdCdzIHBvc3NpYmxlIHRvIHVzZSB0aGUgIjphdSIgY29tbWFuZCBpbiBhbiBhdXRvY29tbWFuZC4gIFRoaXMgY2FuIGJlIGEKK3NlbGYtbW9kaWZ5aW5nIGNvbW1hbmQhICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGFuIGF1dG9jb21tYW5kIHRoYXQgc2hvdWxkCitleGVjdXRlIG9ubHkgb25jZS4KKworVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBkaXNhYmxlIHRoZSBhdXRvY29tbWFuZHMuICBJZiB5b3Ugd2FudCB0byB3cml0ZSBhCitmaWxlIHdpdGhvdXQgZXhlY3V0aW5nIHRoZSBhdXRvY29tbWFuZHMgZm9yIHRoYXQgdHlwZSBvZiBmaWxlLCB3cml0ZSBpdCB1bmRlcgorYW5vdGhlciBuYW1lIGFuZCByZW5hbWUgaXQgd2l0aCBhIHNoZWxsIGNvbW1hbmQuICBJbiBzb21lIHNpdHVhdGlvbnMgeW91IGNhbgordXNlIHRoZSAnZXZlbnRpZ25vcmUnIG9wdGlvbi4KKworTm90ZTogV2hlbiByZWFkaW5nIGEgZmlsZSAod2l0aCAiOnJlYWQgZmlsZSIgb3Igd2l0aCBhIGZpbHRlciBjb21tYW5kKSBhbmQgdGhlCitsYXN0IGxpbmUgaW4gdGhlIGZpbGUgZG9lcyBub3QgaGF2ZSBhbiA8RU9MPiwgVmltIHJlbWVtYmVycyB0aGlzLiAgQXQgdGhlIG5leHQKK3dyaXRlICh3aXRoICI6d3JpdGUgZmlsZSIgb3Igd2l0aCBhIGZpbHRlciBjb21tYW5kKSwgaWYgdGhlIHNhbWUgbGluZSBpcword3JpdHRlbiBhZ2FpbiBhcyB0aGUgbGFzdCBsaW5lIGluIGEgZmlsZSBBTkQgJ2JpbmFyeScgaXMgc2V0LCBWaW0gZG9lcyBub3QKK3N1cHBseSBhbiA8RU9MPi4gIFRoaXMgbWFrZXMgYSBmaWx0ZXIgY29tbWFuZCBvbiB0aGUganVzdCByZWFkIGxpbmVzIHdyaXRlIHRoZQorc2FtZSBmaWxlIGFzIHdhcyByZWFkLCBhbmQgbWFrZXMgYSB3cml0ZSBjb21tYW5kIG9uIGp1c3QgZmlsdGVyZWQgbGluZXMgd3JpdGUKK3RoZSBzYW1lIGZpbGUgYXMgd2FzIHJlYWQgZnJvbSB0aGUgZmlsdGVyLiAgRm9yIGV4YW1wbGUsIGFub3RoZXIgd2F5IHRvIHdyaXRlCithIGNvbXByZXNzZWQgZmlsZTogPgorCisgIDphdXRvY21kIEZpbGVXcml0ZVByZSAqLmd6ICAgc2V0IGJpbnwnWywnXSFnemlwCisgIDphdXRvY21kIEZpbGVXcml0ZVBvc3QgKi5neiAgdW5kb3xzZXQgbm9iaW4KKzwKKwkJCQkJCQkqYXV0b2NvbW1hbmQtcGF0dGVybioKK1lvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucywgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIEhlcmUgYXJlIHNvbWUKK2V4YW1wbGVzOiA+CisKKyAgOmF1dG9jbWQgQnVmUmVhZCAgICoJCXNldCB0dz03OSBub2NpbiBpYyBpbmZlcmNhc2UgZm89MmNyb3EKKyAgOmF1dG9jbWQgQnVmUmVhZCAgIC5sZXR0ZXIJc2V0IHR3PTcyIGZvPTJ0Y3JxCisgIDphdXRvY21kIEJ1ZkVudGVyICAubGV0dGVyCXNldCBkaWN0PS91c3IvbGliL2RpY3Qvd29yZHMKKyAgOmF1dG9jbWQgQnVmTGVhdmUgIC5sZXR0ZXIJc2V0IGRpY3Q9CisgIDphdXRvY21kIEJ1ZlJlYWQsQnVmTmV3RmlsZSAgICouYywqLmgJc2V0IHR3PTAgY2luIG5vaWMKKyAgOmF1dG9jbWQgQnVmRW50ZXIgICouYywqLmgJYWJiciBGT1IgZm9yIChpID0gMDsgaSA8IDM7ICsraSk8Q1I+ezxDUj59PEVzYz5PCisgIDphdXRvY21kIEJ1ZkxlYXZlICAqLmMsKi5oCXVuYWJiciBGT1IKKworRm9yIG1ha2VmaWxlcyAobWFrZWZpbGUsIE1ha2VmaWxlLCBpbWFrZWZpbGUsIG1ha2VmaWxlLnVuaXgsIGV0Yy4pOiA+CisKKyAgOmF1dG9jbWQgQnVmRW50ZXIgID9ha2VmaWxlKglzZXQgaW5jbHVkZT1ec1w9aW5jbHVkZQorICA6YXV0b2NtZCBCdWZMZWF2ZSAgP2FrZWZpbGUqCXNldCBpbmNsdWRlJgorCitUbyBhbHdheXMgc3RhcnQgZWRpdGluZyBDIGZpbGVzIGF0IHRoZSBmaXJzdCBmdW5jdGlvbjogPgorCisgIDphdXRvY21kIEJ1ZlJlYWQgICAqLmMsKi5oCTE7L157CisKK1dpdGhvdXQgdGhlICIxOyIgYWJvdmUsIHRoZSBzZWFyY2ggd291bGQgc3RhcnQgZnJvbSB3aGVyZXZlciB0aGUgZmlsZSB3YXMKK2VudGVyZWQsIHJhdGhlciB0aGFuIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgorCisJCQkJCQkqc2tlbGV0b24qICp0ZW1wbGF0ZSoKK1RvIHJlYWQgYSBza2VsZXRvbiAodGVtcGxhdGUpIGZpbGUgd2hlbiBvcGVuaW5nIGEgbmV3IGZpbGU6ID4KKworICA6YXV0b2NtZCBCdWZOZXdGaWxlICAqLmMJMHIgfi92aW0vc2tlbGV0b24uYworICA6YXV0b2NtZCBCdWZOZXdGaWxlICAqLmgJMHIgfi92aW0vc2tlbGV0b24uaAorICA6YXV0b2NtZCBCdWZOZXdGaWxlICAqLmphdmEJMHIgfi92aW0vc2tlbGV0b24uamF2YQorCitUbyBpbnNlcnQgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBpbiBhICouaHRtbCBmaWxlIHdoZW4gd3JpdGluZyBpdDogPgorCisgIDphdXRvY21kIEJ1ZldyaXRlUHJlLEZpbGVXcml0ZVByZSAqLmh0bWwgICBrc3xjYWxsIExhc3RNb2QoKXwncworICA6ZnVuIExhc3RNb2QoKQorICA6ICBpZiBsaW5lKCIkIikgPiAyMAorICA6ICAgIGxldCBsID0gMjAKKyAgOiAgZWxzZQorICA6ICAgIGxldCBsID0gbGluZSgiJCIpCisgIDogIGVuZGlmCisgIDogIGV4ZSAiMSwiIC4gbCAuICJnL0xhc3QgbW9kaWZpZWQ6IC9zL0xhc3QgbW9kaWZpZWQ6IC4qL0xhc3QgbW9kaWZpZWQ6ICIgLgorICA6ICBcIHN0cmZ0aW1lKCIlWSAlYiAlZCIpCisgIDplbmRmdW4KKworWW91IG5lZWQgdG8gaGF2ZSBhIGxpbmUgIkxhc3QgbW9kaWZpZWQ6IDxkYXRlIHRpbWU+IiBpbiB0aGUgZmlyc3QgMjAgbGluZXMKK29mIHRoZSBmaWxlIGZvciB0aGlzIHRvIHdvcmsuICBWaW0gcmVwbGFjZXMgPGRhdGUgdGltZT4gKGFuZCBhbnl0aGluZyBpbiB0aGUKK3NhbWUgbGluZSBhZnRlciBpdCkgd2l0aCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLiAgRXhwbGFuYXRpb246CisJa3MJCW1hcmsgY3VycmVudCBwb3NpdGlvbiB3aXRoIG1hcmsgJ3MnCisJY2FsbCBMYXN0TW9kKCkgIGNhbGwgdGhlIExhc3RNb2QoKSBmdW5jdGlvbiB0byBkbyB0aGUgd29yaworCSdzCQlyZXR1cm4gdGhlIGN1cnNvciB0byB0aGUgb2xkIHBvc2l0aW9uCitUaGUgTGFzdE1vZCgpIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZmlsZSBpcyBzaG9ydGVyIHRoYW4gMjAgbGluZXMsIGFuZCB0aGVuCit1c2VzIHRoZSAiOmciIGNvbW1hbmQgdG8gZmluZCBsaW5lcyB0aGF0IGNvbnRhaW4gIkxhc3QgbW9kaWZpZWQ6ICIuICBGb3IgdGhvc2UKK2xpbmVzIHRoZSAiOnMiIGNvbW1hbmQgaXMgZXhlY3V0ZWQgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgZGF0ZSB3aXRoIHRoZQorY3VycmVudCBvbmUuICBUaGUgIjpleGVjdXRlIiBjb21tYW5kIGlzIHVzZWQgdG8gYmUgYWJsZSB0byB1c2UgYW4gZXhwcmVzc2lvbgorZm9yIHRoZSAiOmciIGFuZCAiOnMiIGNvbW1hbmRzLiAgVGhlIGRhdGUgaXMgb2J0YWluZWQgd2l0aCB0aGUgc3RyZnRpbWUoKQorZnVuY3Rpb24uICBZb3UgY2FuIGNoYW5nZSBpdHMgYXJndW1lbnQgdG8gZ2V0IGFub3RoZXIgZGF0ZSBzdHJpbmcuCisKK1doZW4gZW50ZXJpbmcgOmF1dG9jbWQgb24gdGhlIGNvbW1hbmQtbGluZSwgY29tcGxldGlvbiBvZiBldmVudHMgYW5kIGNvbW1hbmQKK25hbWVzIG1heSBiZSBkb25lICh3aXRoIDxUYWI+LCBDVFJMLUQsIGV0Yy4pIHdoZXJlIGFwcHJvcHJpYXRlLgorCitWaW0gZXhlY3V0ZXMgYWxsIG1hdGNoaW5nIGF1dG9jb21tYW5kcyBpbiB0aGUgb3JkZXIgdGhhdCB5b3Ugc3BlY2lmeSB0aGVtLgorSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3VyIGZpcnN0IGF1dG9jb21tYW5kIGJlIHVzZWQgZm9yIGFsbCBmaWxlcyBieSB1c2luZworIioiIGFzIHRoZSBmaWxlIHBhdHRlcm4uICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBkZWZpbmUgZGVmYXVsdHMgeW91IGxpa2UKK2hlcmUgZm9yIGFueSBzZXR0aW5ncywgYW5kIGlmIHRoZXJlIGlzIGFub3RoZXIgbWF0Y2hpbmcgYXV0b2NvbW1hbmQgaXQgd2lsbAorb3ZlcnJpZGUgdGhlc2UuICBCdXQgaWYgdGhlcmUgaXMgbm8gb3RoZXIgbWF0Y2hpbmcgYXV0b2NvbW1hbmQsIHRoZW4gYXQgbGVhc3QKK3lvdXIgZGVmYXVsdCBzZXR0aW5ncyBhcmUgcmVjb3ZlcmVkIChpZiBlbnRlcmluZyB0aGlzIGZpbGUgZnJvbSBhbm90aGVyIGZvcgord2hpY2ggYXV0b2NvbW1hbmRzIGRpZCBtYXRjaCkuICBOb3RlIHRoYXQgIioiIHdpbGwgYWxzbyBtYXRjaCBmaWxlcyBzdGFydGluZword2l0aCAiLiIsIHVubGlrZSBVbml4IHNoZWxscy4KKworCQkJCQkJICAgICphdXRvY21kLXNlYXJjaHBhdCoKK0F1dG9jb21tYW5kcyBkbyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IHNlYXJjaCBwYXR0ZXJucy4gIFZpbSBzYXZlcyB0aGUgY3VycmVudAorc2VhcmNoIHBhdHRlcm5zIGJlZm9yZSBleGVjdXRpbmcgYXV0b2NvbW1hbmRzIHRoZW4gcmVzdG9yZXMgdGhlbSBhZnRlciB0aGUKK2F1dG9jb21tYW5kcyBmaW5pc2guICBUaGlzIG1lYW5zIHRoYXQgYXV0b2NvbW1hbmRzIGRvIG5vdCBhZmZlY3QgdGhlIHN0cmluZ3MKK2hpZ2hsaWdodGVkIHdpdGggdGhlICdobHNlYXJjaCcgb3B0aW9uLiAgV2l0aGluIGF1dG9jb21tYW5kcywgeW91IGNhbiBzdGlsbAordXNlIHNlYXJjaCBwYXR0ZXJucyBub3JtYWxseSwgZS5nLiwgd2l0aCB0aGUgIm4iIGNvbW1hbmQuCitJZiB5b3Ugd2FudCBhbiBhdXRvY29tbWFuZCB0byBzZXQgdGhlIHNlYXJjaCBwYXR0ZXJuLCBzdWNoIHRoYXQgaXQgaXMgdXNlZAorYWZ0ZXIgdGhlIGF1dG9jb21tYW5kIGZpbmlzaGVzLCB1c2UgdGhlICI6bGV0IEAvID0iIGNvbW1hbmQuCitUaGUgc2VhcmNoLWhpZ2hsaWdodGluZyBjYW5ub3QgYmUgc3dpdGNoZWQgb2ZmIHdpdGggIjpub2hsc2VhcmNoIiBpbiBhbgorYXV0b2NvbW1hbmQuICBVc2UgdGhlICdoJyBmbGFnIGluIHRoZSAndmltaW5mbycgb3B0aW9uIHRvIGRpc2FibGUgc2VhcmNoLQoraGlnaGxpZ2h0aW5nIHdoZW4gc3RhcnRpbmcgVmltLgorCisJCQkJCQkJKkNtZC1ldmVudCoKK1doZW4gdXNpbmcgb25lIG9mIHRoZSAiKkNtZCIgZXZlbnRzLCB0aGUgbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIGFyZSBleHBlY3RlZCB0bworZG8gdGhlIGZpbGUgcmVhZGluZyBvciB3cml0aW5nLiAgVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHdvcmtpbmcgd2l0aCBhIHNwZWNpYWwKK2tpbmQgb2YgZmlsZSwgZm9yIGV4YW1wbGUgb24gYSByZW1vdGUgc3lzdGVtLgorQ0FSRUZVTDogSWYgeW91IHVzZSB0aGVzZSBldmVudHMgaW4gYSB3cm9uZyB3YXksIGl0IG1heSBoYXZlIHRoZSBlZmZlY3Qgb2YKK21ha2luZyBpdCBpbXBvc3NpYmxlIHRvIHJlYWQgb3Igd3JpdGUgdGhlIG1hdGNoaW5nIGZpbGVzISAgTWFrZSBzdXJlIHlvdSB0ZXN0Cit5b3VyIGF1dG9jb21tYW5kcyBwcm9wZXJseS4gIEJlc3QgaXMgdG8gdXNlIGEgcGF0dGVybiB0aGF0IHdpbGwgbmV2ZXIgbWF0Y2ggYQorbm9ybWFsIGZpbGUgbmFtZSwgZm9yIGV4YW1wbGUgImZ0cDovLyoiLgorCitXaGVuIGRlZmluaW5nIGEgQnVmUmVhZENtZCBpdCB3aWxsIGJlIGRpZmZpY3VsdCBmb3IgVmltIHRvIHJlY292ZXIgYSBjcmFzaGVkCitlZGl0aW5nIHNlc3Npb24uICBXaGVuIHJlY292ZXJpbmcgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZSwgVmltIHJlYWRzIG9ubHkgdGhvc2UKK3BhcnRzIG9mIGEgZmlsZSB0aGF0IGFyZSBub3QgZm91bmQgaW4gdGhlIHN3YXAgZmlsZS4gIFNpbmNlIHRoYXQgaXMgbm90Citwb3NzaWJsZSB3aXRoIGEgQnVmUmVhZENtZCwgdXNlIHRoZSB8OnByZXNlcnZlfCBjb21tYW5kIHRvIG1ha2Ugc3VyZSB0aGUKK29yaWdpbmFsIGZpbGUgaXNuJ3QgbmVlZGVkIGZvciByZWNvdmVyeS4gIFlvdSBtaWdodCB3YW50IHRvIGRvIHRoaXMgb25seSB3aGVuCit5b3UgZXhwZWN0IHRoZSBmaWxlIHRvIGJlIG1vZGlmaWVkLgorCitUaGUgfHY6Y21kYXJnfCB2YXJpYWJsZSBob2xkcyB0aGUgIisrZW5jPSIgYW5kICIrK2ZmPSIgYXJndW1lbnQgdGhhdCBhcmUKK2VmZmVjdGl2ZS4gIFRoZXNlIHNob3VsZCBiZSB1c2VkIGZvciB0aGUgY29tbWFuZCB0aGF0IHJlYWRzL3dyaXRlcyB0aGUgZmlsZS4KK1RoZSB8djpjbWRiYW5nfCB2YXJpYWJsZSBpcyBvbmUgd2hlbiAiISIgd2FzIHVzZWQsIHplcm8gb3RoZXJ3aXNlLgorCitTZWUgdGhlICRWSU1SVU5USU1FL3BsdWdpbi9uZXRydy52aW0gZm9yIGV4YW1wbGVzLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvY2hhbmdlLnR4dCBiL3J1bnRpbWUvZG9jL2NoYW5nZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1NmNjYgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2NoYW5nZS50eHQKQEAgLTAsMCArMSwxNDI1IEBACisqY2hhbmdlLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDA4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVGhpcyBmaWxlIGRlc2NyaWJlcyBjb21tYW5kcyB0aGF0IGRlbGV0ZSBvciBjaGFuZ2UgdGV4dC4gIEluIHRoaXMgY29udGV4dCwKK2NoYW5naW5nIHRleHQgbWVhbnMgZGVsZXRpbmcgdGhlIHRleHQgYW5kIHJlcGxhY2luZyBpdCB3aXRoIG90aGVyIHRleHQgdXNpbmcKK29uZSBjb21tYW5kLiAgWW91IGNhbiB1bmRvIGFsbCBvZiB0aGVzZSBjb21tYW5kcy4gIFlvdSBjYW4gcmVwZWF0IHRoZSBub24tRXgKK2NvbW1hbmRzIHdpdGggdGhlICIuIiBjb21tYW5kLgorCisxLiBEZWxldGluZyB0ZXh0CQl8ZGVsZXRpbmd8CisyLiBEZWxldGUgYW5kIGluc2VydAkJfGRlbGV0ZS1pbnNlcnR8CiszLiBTaW1wbGUgY2hhbmdlcwkJfHNpbXBsZS1jaGFuZ2V8CQkqY2hhbmdpbmcqCis0LiBDb21wbGV4IGNoYW5nZXMJCXxjb21wbGV4LWNoYW5nZXwKKzUuIENvcHlpbmcgYW5kIG1vdmluZyB0ZXh0CXxjb3B5LW1vdmV8Cis2LiBGb3JtYXR0aW5nIHRleHQJCXxmb3JtYXR0aW5nfAorCitGb3IgaW5zZXJ0aW5nIHRleHQgc2VlIHxpbnNlcnQudHh0fC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBEZWxldGluZyB0ZXh0CQkJCQkqZGVsZXRpbmcqICpFNDcwKgorCitbInhdPERlbD4Jb3IJCQkJCSo8RGVsPiogKngqICpkbCoKK1sieF14CQkJRGVsZXRlIFtjb3VudF0gY2hhcmFjdGVycyB1bmRlciBhbmQgYWZ0ZXIgdGhlIGN1cnNvcgorCQkJW2ludG8gcmVnaXN0ZXIgeF0gKG5vdCB8bGluZXdpc2V8KS4gIERvZXMgdGhlIHNhbWUgYXMKKwkJCSJkbCIuCisJCQlUaGUgPERlbD4ga2V5IGRvZXMgbm90IHRha2UgYSBbY291bnRdLiAgSW5zdGVhZCwgaXQKKwkJCWRlbGV0ZXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBjb3VudC4KKwkJCVNlZSB8OmZpeGRlbHwgaWYgdGhlIDxEZWw+IGtleSBkb2VzIG5vdCBkbyB3aGF0IHlvdQorCQkJd2FudC4gIFNlZSB8J3doaWNod3JhcCd8IGZvciBkZWxldGluZyBhIGxpbmUgYnJlYWsKKwkJCShqb2luIGxpbmVzKS4gIHtWaSBkb2VzIG5vdCBzdXBwb3J0IDxEZWw+fQorCisJCQkJCQkJKlgqICpkaCoKK1sieF1YCQkJRGVsZXRlIFtjb3VudF0gY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvciBbaW50bworCQkJcmVnaXN0ZXIgeF0gKG5vdCB8bGluZXdpc2V8KS4gIERvZXMgdGhlIHNhbWUgYXMgImRoIi4KKwkJCUFsc28gc2VlIHwnd2hpY2h3cmFwJ3wuCisKKwkJCQkJCQkqZCoKK1sieF1ke21vdGlvbn0JCURlbGV0ZSB0ZXh0IHRoYXQge21vdGlvbn0gbW92ZXMgb3ZlciBbaW50byByZWdpc3RlcgorCQkJeF0uICBTZWUgYmVsb3cgZm9yIGV4Y2VwdGlvbnMuCisKKwkJCQkJCQkqZGQqCitbInhdZGQJCQlEZWxldGUgW2NvdW50XSBsaW5lcyBbaW50byByZWdpc3RlciB4XSB8bGluZXdpc2V8LgorCisJCQkJCQkJKkQqCitbInhdRAkJCURlbGV0ZSB0aGUgY2hhcmFjdGVycyB1bmRlciB0aGUgY3Vyc29yIHVudGlsIHRoZSBlbmQKKwkJCW9mIHRoZSBsaW5lIGFuZCBbY291bnRdLTEgbW9yZSBsaW5lcyBbaW50byByZWdpc3RlcgorCQkJeF07IHN5bm9ueW0gZm9yICJkJCIuCisJCQkobm90IHxsaW5ld2lzZXwpCisKK3tWaXN1YWx9WyJ4XXgJb3IJCQkJCSp2X3gqICp2X2QqICp2XzxEZWw+Kgore1Zpc3VhbH1bInhdZCAgIG9yCit7VmlzdWFsfVsieF08RGVsPglEZWxldGUgdGhlIGhpZ2hsaWdodGVkIHRleHQgW2ludG8gcmVnaXN0ZXIgeF0gKGZvcgorCQkJe1Zpc3VhbH0gc2VlIHxWaXN1YWwtbW9kZXwpLiAge25vdCBpbiBWaX0KKwore1Zpc3VhbH1bInhdQ1RSTC1IICAgb3IJCQkJCSp2X0NUUkwtSCogKnZfPEJTPioKK3tWaXN1YWx9WyJ4XTxCUz4JV2hlbiBpbiBTZWxlY3QgbW9kZTogRGVsZXRlIHRoZSBoaWdobGlnaHRlZCB0ZXh0IFtpbnRvCisJCQlyZWdpc3RlciB4XS4KKwore1Zpc3VhbH1bInhdWAlvcgkJCQkJKnZfWCogKnZfRCogKnZfYl9EKgore1Zpc3VhbH1bInhdRAkJRGVsZXRlIHRoZSBoaWdobGlnaHRlZCBsaW5lcyBbaW50byByZWdpc3RlciB4XSAoZm9yCisJCQl7VmlzdWFsfSBzZWUgfFZpc3VhbC1tb2RlfCkuICBJbiBWaXN1YWwgYmxvY2sgbW9kZSwKKwkJCSJEIiBkZWxldGVzIHRoZSBoaWdobGlnaHRlZCB0ZXh0IHBsdXMgYWxsIHRleHQgdW50aWwKKwkJCXRoZSBlbmQgb2YgdGhlIGxpbmUuICB7bm90IGluIFZpfQorCisJCQkJCQkqOmQqICo6ZGUqICo6ZGVsKiAqOmRlbGV0ZSoKKzpbcmFuZ2VdZFtlbGV0ZV0gW3hdCURlbGV0ZSBbcmFuZ2VdIGxpbmVzIChkZWZhdWx0OiBjdXJyZW50IGxpbmUpIFtpbnRvCisJCQlyZWdpc3RlciB4XS4KKworOltyYW5nZV1kW2VsZXRlXSBbeF0ge2NvdW50fQorCQkJRGVsZXRlIHtjb3VudH0gbGluZXMsIHN0YXJ0aW5nIHdpdGggW3JhbmdlXQorCQkJKGRlZmF1bHQ6IGN1cnJlbnQgbGluZSB8Y21kbGluZS1yYW5nZXN8KSBbaW50bworCQkJcmVnaXN0ZXIgeF0uCisKK1RoZXNlIGNvbW1hbmRzIGRlbGV0ZSB0ZXh0LiAgWW91IGNhbiByZXBlYXQgdGhlbSB3aXRoIHRoZSAiLiIgY29tbWFuZAorKGV4Y2VwdCAiOmQiKSBhbmQgdW5kbyB0aGVtLiAgVXNlIFZpc3VhbCBtb2RlIHRvIGRlbGV0ZSBibG9ja3Mgb2YgdGV4dC4gIFNlZQorfHJlZ2lzdGVyc3wgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHJlZ2lzdGVycy4KKworQW4gZXhjZXB0aW9uIGZvciB0aGUgZHttb3Rpb259IGNvbW1hbmQ6IElmIHRoZSBtb3Rpb24gaXMgbm90IGxpbmV3aXNlLCB0aGUKK3N0YXJ0IGFuZCBlbmQgb2YgdGhlIG1vdGlvbiBhcmUgbm90IGluIHRoZSBzYW1lIGxpbmUsIGFuZCB0aGVyZSBhcmUgb25seQorYmxhbmtzIGJlZm9yZSB0aGUgc3RhcnQgYW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIG1vdGlvbiwgdGhlIGRlbGV0ZSBiZWNvbWVzCitsaW5ld2lzZS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgZGVsZXRlIGFsc28gcmVtb3ZlcyB0aGUgbGluZSBvZiBibGFua3MgdGhhdCB5b3UKK21pZ2h0IGV4cGVjdCB0byByZW1haW4uCisKK1RyeWluZyB0byBkZWxldGUgYW4gZW1wdHkgcmVnaW9uIG9mIHRleHQgKGUuZy4sICJkMCIgaW4gdGhlIGZpcnN0IGNvbHVtbikKK2lzIGFuIGVycm9yIHdoZW4gJ2Nwb3B0aW9ucycgaW5jbHVkZXMgdGhlICdFJyBmbGFnLgorCisJCQkJCQkJKkoqCitKCQkJSm9pbiBbY291bnRdIGxpbmVzLCB3aXRoIGEgbWluaW11bSBvZiB0d28gbGluZXMuCisJCQlSZW1vdmUgdGhlIGluZGVudCBhbmQgaW5zZXJ0IHVwIHRvIHR3byBzcGFjZXMgKHNlZQorCQkJYmVsb3cpLgorCisJCQkJCQkJKnZfSioKK3tWaXN1YWx9SgkJSm9pbiB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMsIHdpdGggYSBtaW5pbXVtIG9mIHR3bworCQkJbGluZXMuICBSZW1vdmUgdGhlIGluZGVudCBhbmQgaW5zZXJ0IHVwIHRvIHR3byBzcGFjZXMKKwkJCShzZWUgYmVsb3cpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnSioKK2dKCQkJSm9pbiBbY291bnRdIGxpbmVzLCB3aXRoIGEgbWluaW11bSBvZiB0d28gbGluZXMuCisJCQlEb24ndCBpbnNlcnQgb3IgcmVtb3ZlIGFueSBzcGFjZXMuICB7bm90IGluIFZpfQorCisJCQkJCQkJKnZfZ0oqCit7VmlzdWFsfWdKCQlKb2luIHRoZSBoaWdobGlnaHRlZCBsaW5lcywgd2l0aCBhIG1pbmltdW0gb2YgdHdvCisJCQlsaW5lcy4gIERvbid0IGluc2VydCBvciByZW1vdmUgYW55IHNwYWNlcy4gIHtub3QgaW4KKwkJCVZpfQorCisJCQkJCQkJKjpqKiAqOmpvaW4qCis6W3JhbmdlXWpbb2luXVshXQlKb2luIFtyYW5nZV0gbGluZXMuICBTYW1lIGFzICJKIiwgZXhjZXB0IHdpdGggWyFdCisJCQl0aGUgam9pbiBkb2VzIG5vdCBpbnNlcnQgb3IgZGVsZXRlIGFueSBzcGFjZXMuCisJCQlJZiBhIFtyYW5nZV0gaGFzIGVxdWFsIHN0YXJ0IGFuZCBlbmQgdmFsdWVzLCB0aGlzCisJCQljb21tYW5kIGRvZXMgbm90aGluZy4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvCisJCQlqb2luIHRoZSBjdXJyZW50IGxpbmUgd2l0aCB0aGUgbGluZSBiZWxvdyBpdC4KKwkJCXtub3QgaW4gVmk6ICF9CisKKzpbcmFuZ2VdaltvaW5dWyFdIHtjb3VudH0KKwkJCUpvaW4ge2NvdW50fSBsaW5lcywgc3RhcnRpbmcgd2l0aCBbcmFuZ2VdIChkZWZhdWx0OgorCQkJY3VycmVudCBsaW5lIHxjbWRsaW5lLXJhbmdlc3wpLiAgU2FtZSBhcyAiSiIsIGV4Y2VwdAorCQkJd2l0aCBbIV0gdGhlIGpvaW4gZG9lcyBub3QgaW5zZXJ0IG9yIGRlbGV0ZSBhbnkKKwkJCXNwYWNlcy4KKwkJCXtub3QgaW4gVmk6ICF9CisKK1RoZXNlIGNvbW1hbmRzIGRlbGV0ZSB0aGUgPEVPTD4gYmV0d2VlbiBsaW5lcy4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Ygam9pbmluZworbXVsdGlwbGUgbGluZXMgaW50byBvbmUgbGluZS4gIFlvdSBjYW4gcmVwZWF0IHRoZXNlIGNvbW1hbmRzIChleGNlcHQgIjpqIikgYW5kCit1bmRvIHRoZW0uCisKK1RoZXNlIGNvbW1hbmRzLCBleGNlcHQgImdKIiwgaW5zZXJ0IG9uZSBzcGFjZSBpbiBwbGFjZSBvZiB0aGUgPEVPTD4gdW5sZXNzCit0aGVyZSBpcyB0cmFpbGluZyB3aGl0ZSBzcGFjZSBvciB0aGUgbmV4dCBsaW5lIHN0YXJ0cyB3aXRoIGEgJyknLiAgVGhlc2UKK2NvbW1hbmRzLCBleGNlcHQgImdKIiwgZGVsZXRlIGFueSBsZWFkaW5nIHdoaXRlIHNwYWNlIG9uIHRoZSBuZXh0IGxpbmUuICBJZgordGhlICdqb2luc3BhY2VzJyBvcHRpb24gaXMgb24sIHRoZXNlIGNvbW1hbmRzIGluc2VydCB0d28gc3BhY2VzIGFmdGVyIGEgJy4nLAorJyEnIG9yICc/JyAoYnV0IGlmICdjcG9wdGlvbnMnIGluY2x1ZGVzIHRoZSAnaicgZmxhZywgdGhleSBpbnNlcnQgdHdvIHNwYWNlcworb25seSBhZnRlciBhICcuJykuCitUaGUgJ0InIGFuZCAnTScgZmxhZ3MgaW4gJ2Zvcm1hdG9wdGlvbnMnIGNoYW5nZSB0aGUgYmVoYXZpb3IgZm9yIGluc2VydGluZworc3BhY2VzIGJlZm9yZSBhbmQgYWZ0ZXIgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB8Zm8tdGFibGV8LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gRGVsZXRlIGFuZCBpbnNlcnQJCQkJKmRlbGV0ZS1pbnNlcnQqICpyZXBsYWNpbmcqCisKKwkJCQkJCQkqUioKK1IJCQlFbnRlciBSZXBsYWNlIG1vZGU6IEVhY2ggY2hhcmFjdGVyIHlvdSB0eXBlIHJlcGxhY2VzCisJCQlhbiBleGlzdGluZyBjaGFyYWN0ZXIsIHN0YXJ0aW5nIHdpdGggdGhlIGNoYXJhY3RlcgorCQkJdW5kZXIgdGhlIGN1cnNvci4gIFJlcGVhdCB0aGUgZW50ZXJlZCB0ZXh0IFtjb3VudF0tMQorCQkJdGltZXMuICBTZWUgfFJlcGxhY2UtbW9kZXwgZm9yIG1vcmUgZGV0YWlscy4KKworCQkJCQkJCSpnUioKK2dSCQkJRW50ZXIgVmlydHVhbCBSZXBsYWNlIG1vZGU6IEVhY2ggY2hhcmFjdGVyIHlvdSB0eXBlCisJCQlyZXBsYWNlcyBleGlzdGluZyBjaGFyYWN0ZXJzIGluIHNjcmVlbiBzcGFjZS4gIFNvIGEKKwkJCTxUYWI+IG1heSByZXBsYWNlIHNldmVyYWwgY2hhcmFjdGVycyBhdCBvbmNlLgorCQkJUmVwZWF0IHRoZSBlbnRlcmVkIHRleHQgW2NvdW50XS0xIHRpbWVzLiAgU2VlCisJCQl8VmlydHVhbC1SZXBsYWNlLW1vZGV8IGZvciBtb3JlIGRldGFpbHMuCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2cmVwbGFjZQorCQkJZmVhdHVyZX0KKworCQkJCQkJCSpjKgorWyJ4XWN7bW90aW9ufQkJRGVsZXRlIHttb3Rpb259IHRleHQgW2ludG8gcmVnaXN0ZXIgeF0gYW5kIHN0YXJ0CisJCQlpbnNlcnQuICBXaGVuICAnY3BvcHRpb25zJyBpbmNsdWRlcyB0aGUgJ0UnIGZsYWcgYW5kCisJCQl0aGVyZSBpcyBubyB0ZXh0IHRvIGRlbGV0ZSAoZS5nLiwgd2l0aCAiY1R4IiB3aGVuIHRoZQorCQkJY3Vyc29yIGlzIGp1c3QgYWZ0ZXIgYW4gJ3gnKSwgYW4gZXJyb3Igb2NjdXJzIGFuZAorCQkJaW5zZXJ0IG1vZGUgZG9lcyBub3Qgc3RhcnQgKHRoaXMgaXMgVmkgY29tcGF0aWJsZSkuCisJCQlXaGVuICAnY3BvcHRpb25zJyBkb2VzIG5vdCBpbmNsdWRlIHRoZSAnRScgZmxhZywgdGhlCisJCQkiYyIgY29tbWFuZCBhbHdheXMgc3RhcnRzIGluc2VydCBtb2RlLCBldmVuIGlmIHRoZXJlCisJCQlpcyBubyB0ZXh0IHRvIGRlbGV0ZS4KKworCQkJCQkJCSpjYyoKK1sieF1jYwkJCURlbGV0ZSBbY291bnRdIGxpbmVzIFtpbnRvIHJlZ2lzdGVyIHhdIGFuZCBzdGFydAorCQkJaW5zZXJ0IHxsaW5ld2lzZXwuICBJZiAnYXV0b2luZGVudCcgaXMgb24sIHByZXNlcnZlCisJCQl0aGUgaW5kZW50IG9mIHRoZSBmaXJzdCBsaW5lLgorCisJCQkJCQkJKkMqCitbInhdQwkJCURlbGV0ZSBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUKKwkJCWxpbmUgYW5kIFtjb3VudF0tMSBtb3JlIGxpbmVzIFtpbnRvIHJlZ2lzdGVyIHhdLCBhbmQKKwkJCXN0YXJ0IGluc2VydC4gIFN5bm9ueW0gZm9yIGMkIChub3QgfGxpbmV3aXNlfCkuCisKKwkJCQkJCQkqcyoKK1sieF1zCQkJRGVsZXRlIFtjb3VudF0gY2hhcmFjdGVycyBbaW50byByZWdpc3RlciB4XSBhbmQgc3RhcnQKKwkJCWluc2VydCAocyBzdGFuZHMgZm9yIFN1YnN0aXR1dGUpLiAgU3lub255bSBmb3IgImNsIgorCQkJKG5vdCB8bGluZXdpc2V8KS4KKworCQkJCQkJCSpTKgorWyJ4XVMJCQlEZWxldGUgW2NvdW50XSBsaW5lcyBbaW50byByZWdpc3RlciB4XSBhbmQgc3RhcnQKKwkJCWluc2VydC4gIFN5bm9ueW0gZm9yICJjYyIgfGxpbmV3aXNlfC4KKwore1Zpc3VhbH1bInhdYwlvcgkJCQkJKnZfYyogKnZfcyoKK3tWaXN1YWx9WyJ4XXMJCURlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBbaW50byByZWdpc3RlciB4XSBhbmQKKwkJCXN0YXJ0IGluc2VydCAoZm9yIHtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4gIHtub3QKKwkJCWluIFZpfQorCisJCQkJCQkJKnZfcioKK3tWaXN1YWx9WyJ4XXJ7Y2hhcn0JUmVwbGFjZSBhbGwgc2VsZWN0ZWQgY2hhcmFjdGVycyBieSB7Y2hhcn0uCisKKwkJCQkJCQkqdl9DKgore1Zpc3VhbH1bInhdQwkJRGVsZXRlIHRoZSBoaWdobGlnaHRlZCBsaW5lcyBbaW50byByZWdpc3RlciB4XSBhbmQKKwkJCXN0YXJ0IGluc2VydC4gIEluIFZpc3VhbCBibG9jayBtb2RlIGl0IHdvcmtzCisJCQlkaWZmZXJlbnRseSB8dl9iX0N8LiAge25vdCBpbiBWaX0KKwkJCQkJCQkqdl9TKgore1Zpc3VhbH1bInhdUwkJRGVsZXRlIHRoZSBoaWdobGlnaHRlZCBsaW5lcyBbaW50byByZWdpc3RlciB4XSBhbmQKKwkJCXN0YXJ0IGluc2VydCAoZm9yIHtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4gIHtub3QKKwkJCWluIFZpfQorCQkJCQkJCSp2X1IqCit7VmlzdWFsfVsieF1SCQlDdXJyZW50bHkganVzdCBsaWtlIHtWaXN1YWx9WyJ4XVMuICBJbiBhIG5leHQgdmVyc2lvbgorCQkJaXQgbWlnaHQgd29yayBkaWZmZXJlbnRseS4ge25vdCBpbiBWaX0KKworTm90ZXM6CistIFlvdSBjYW4gZW5kIEluc2VydCBhbmQgUmVwbGFjZSBtb2RlIHdpdGggPEVzYz4uCistIFNlZSB0aGUgc2VjdGlvbiAiSW5zZXJ0IGFuZCBSZXBsYWNlIG1vZGUiIHxtb2RlLWlucy1yZXBsfCBmb3IgdGhlIG90aGVyCisgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGVzZSBtb2Rlcy4KKy0gVGhlIGVmZmVjdCBvZiBbY291bnRdIHRha2VzIHBsYWNlIGFmdGVyIFZpbSBleGl0cyBJbnNlcnQgb3IgUmVwbGFjZSBtb2RlLgorLSBXaGVuIHRoZSAnY3BvcHRpb25zJyBvcHRpb24gY29udGFpbnMgJyQnIGFuZCB0aGUgY2hhbmdlIGlzIHdpdGhpbiBvbmUgbGluZSwKKyAgVmltIGNvbnRpbnVlcyB0byBzaG93IHRoZSB0ZXh0IHRvIGJlIGRlbGV0ZWQgYW5kIHB1dHMgYSAnJCcgYXQgdGhlIGxhc3QKKyAgZGVsZXRlZCBjaGFyYWN0ZXIuCisKK1NlZSB8cmVnaXN0ZXJzfCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgcmVnaXN0ZXJzLgorCitSZXBsYWNlIG1vZGUgaXMganVzdCBsaWtlIEluc2VydCBtb2RlLCBleGNlcHQgdGhhdCBldmVyeSBjaGFyYWN0ZXIgeW91IGVudGVyCitkZWxldGVzIG9uZSBjaGFyYWN0ZXIuICBJZiB5b3UgcmVhY2ggdGhlIGVuZCBvZiBhIGxpbmUsIFZpbSBhcHBlbmRzIGFueQorZnVydGhlciBjaGFyYWN0ZXJzIChqdXN0IGxpa2UgSW5zZXJ0IG1vZGUpLiAgSW4gUmVwbGFjZSBtb2RlLCB0aGUgYmFja3NwYWNlCitrZXkgcmVzdG9yZXMgdGhlIG9yaWdpbmFsIHRleHQgKGlmIHRoZXJlIHdhcyBhbnkpLiAgKFNlZSBzZWN0aW9uICJJbnNlcnQgYW5kCitSZXBsYWNlIG1vZGUiIHxtb2RlLWlucy1yZXBsfCkuCisKKwkJCQkJCSpjdyogKmNXKgorU3BlY2lhbCBjYXNlOiAiY3ciIGFuZCAiY1ciIHdvcmsgdGhlIHNhbWUgYXMgImNlIiBhbmQgImNFIiBpZiB0aGUgY3Vyc29yIGlzCitvbiBhIG5vbi1ibGFuay4gIFRoaXMgaXMgYmVjYXVzZSBWaW0gaW50ZXJwcmV0cyAiY3ciIGFzIGNoYW5nZS13b3JkLCBhbmQgYQord29yZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgd2hpdGUgc3BhY2UuICB7Vmk6ICJjdyIgd2hlbiBvbiBhIGJsYW5rCitmb2xsb3dlZCBieSBvdGhlciBibGFua3MgY2hhbmdlcyBvbmx5IHRoZSBmaXJzdCBibGFuazsgdGhpcyBpcyBwcm9iYWJseSBhCitidWcsIGJlY2F1c2UgImR3IiBkZWxldGVzIGFsbCB0aGUgYmxhbmtzOyB1c2UgdGhlICd3JyBmbGFnIGluICdjcG9wdGlvbnMnIHRvCittYWtlIGl0IHdvcmsgbGlrZSBWaSBhbnl3YXl9CisKK0lmIHlvdSBwcmVmZXIgImN3IiB0byBpbmNsdWRlIHRoZSBzcGFjZSBhZnRlciBhIHdvcmQsIHVzZSB0aGlzIG1hcHBpbmc6ID4KKwk6bWFwIGN3IGR3aQorPAorCQkJCQkJCSo6YyogKjpjaCogKjpjaGFuZ2UqCis6e3JhbmdlfWNbaGFuZ2VdCVJlcGxhY2UgbGluZXMgb2YgdGV4dCB3aXRoIHNvbWUgZGlmZmVyZW50IHRleHQuCisJCQlUeXBlIGEgbGluZSBjb250YWluaW5nIG9ubHkgIi4iIHRvIHN0b3AgcmVwbGFjaW5nLgorCQkJV2l0aG91dCB7cmFuZ2V9LCB0aGlzIGNvbW1hbmQgY2hhbmdlcyBvbmx5IHRoZSBjdXJyZW50CisJCQlsaW5lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFNpbXBsZSBjaGFuZ2VzCQkJCQkqc2ltcGxlLWNoYW5nZSoKKworCQkJCQkJCSpyKgorcntjaGFyfQkJCVJlcGxhY2UgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIHdpdGgge2NoYXJ9LgorCQkJSWYge2NoYXJ9IGlzIGEgPENSPiBvciA8Tkw+LCBhIGxpbmUgYnJlYWsgcmVwbGFjZXMgdGhlCisJCQljaGFyYWN0ZXIuICBUbyByZXBsYWNlIHdpdGggYSByZWFsIDxDUj4sIHVzZSBDVFJMLVYKKwkJCTxDUj4uICBDVFJMLVYgPE5MPiByZXBsYWNlcyB3aXRoIGEgPE51bD4uCisJCQl7Vmk6IENUUkwtViA8Q1I+IHN0aWxsIHJlcGxhY2VzIHdpdGggYSBsaW5lIGJyZWFrLAorCQkJY2Fubm90IHJlcGxhY2Ugc29tZXRoaW5nIHdpdGggYSA8Q1I+fQorCQkJSWYgeW91IGdpdmUgYSBbY291bnRdLCBWaW0gcmVwbGFjZXMgW2NvdW50XSBjaGFyYWN0ZXJzCisJCQl3aXRoIFtjb3VudF0ge2NoYXJ9cy4gIFdoZW4ge2NoYXJ9IGlzIGEgPENSPiBvciA8Tkw+LAorCQkJaG93ZXZlciwgVmltIGluc2VydHMgb25seSBvbmUgPENSPjogIjVyPENSPiIgcmVwbGFjZXMKKwkJCWZpdmUgY2hhcmFjdGVycyB3aXRoIGEgc2luZ2xlIGxpbmUgYnJlYWsuCisJCQlXaGVuIHtjaGFyfSBpcyBhIDxDUj4gb3IgPE5MPiwgVmltIHBlcmZvcm1zCisJCQlhdXRvaW5kZW50aW5nLiAgVGhpcyB3b3JrcyBqdXN0IGxpa2UgZGVsZXRpbmcgdGhlCisJCQljaGFyYWN0ZXJzIHRoYXQgYXJlIHJlcGxhY2VkIGFuZCB0aGVuIGRvaW5nCisJCQkiaTxDUj48RXNjPiIuCisJCQl7Y2hhcn0gY2FuIGJlIGVudGVyZWQgYXMgYSBkaWdyYXBoIHxkaWdyYXBoLWFyZ3wuCisJCQl8OmxtYXB8IG1hcHBpbmdzIGFwcGx5IHRvIHtjaGFyfS4gIFRoZSBDVFJMLV4gY29tbWFuZAorCQkJaW4gSW5zZXJ0IG1vZGUgY2FuIGJlIHVzZWQgdG8gc3dpdGNoIHRoaXMgb24vb2ZmCisJCQl8aV9DVFJMLV58LiAgU2VlIHx1dGYtOC1jaGFyLWFyZ3wgYWJvdXQgdXNpbmcKKwkJCWNvbXBvc2luZyBjaGFyYWN0ZXJzIHdoZW4gJ2VuY29kaW5nJyBpcyBVbmljb2RlLgorCisJCQkJCQkJKmdyKgorZ3J7Y2hhcn0JCVJlcGxhY2UgdGhlIHZpcnR1YWwgY2hhcmFjdGVycyB1bmRlciB0aGUgY3Vyc29yIHdpdGgKKwkJCXtjaGFyfS4gIFRoaXMgcmVwbGFjZXMgaW4gc2NyZWVuIHNwYWNlLCBub3QgZmlsZQorCQkJc3BhY2UuICBTZWUgfGdSfCBhbmQgfFZpcnR1YWwtUmVwbGFjZS1tb2RlfCBmb3IgbW9yZQorCQkJZGV0YWlscy4gIEFzIHdpdGggfHJ8IGEgY291bnQgbWF5IGJlIGdpdmVuLgorCQkJe2NoYXJ9IGNhbiBiZSBlbnRlcmVkIGxpa2Ugd2l0aCB8cnwuCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2cmVwbGFjZQorCQkJZmVhdHVyZX0KKworCQkJCQkJKmRpZ3JhcGgtYXJnKgorVGhlIGFyZ3VtZW50IGZvciBOb3JtYWwgbW9kZSBjb21tYW5kcyBsaWtlIHxyfCBhbmQgfHR8IGlzIGEgc2luZ2xlIGNoYXJhY3Rlci4KK1doZW4gJ2NwbycgZG9lc24ndCBjb250YWluIHRoZSAnRCcgZmxhZywgdGhpcyBjaGFyYWN0ZXIgY2FuIGFsc28gYmUgZW50ZXJlZAorbGlrZSB8ZGlncmFwaHN8LiAgRmlyc3QgdHlwZSBDVFJMLUsgYW5kIHRoZW4gdGhlIHR3byBkaWdyYXBoIGNoYXJhY3RlcnMuCit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZGlncmFwaHN8IGZlYXR1cmV9CisKKwkJCQkJCSpjYXNlKgorVGhlIGZvbGxvd2luZyBjb21tYW5kcyBjaGFuZ2UgdGhlIGNhc2Ugb2YgbGV0dGVycy4gIFRoZSBjdXJyZW50bHkgYWN0aXZlCit8bG9jYWxlfCBpcyB1c2VkLiAgU2VlIHw6bGFuZ3VhZ2V8LiAgVGhlIExDX0NUWVBFIHZhbHVlIG1hdHRlcnMgaGVyZS4KKworCQkJCQkJCSp+KgorfgkJCSdub3RpbGRlb3AnIG9wdGlvbjogU3dpdGNoIGNhc2Ugb2YgdGhlIGNoYXJhY3RlcgorCQkJdW5kZXIgdGhlIGN1cnNvciBhbmQgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByaWdodC4KKwkJCUlmIGEgW2NvdW50XSBpcyBnaXZlbiwgZG8gdGhhdCBtYW55IGNoYXJhY3RlcnMuIHtWaToKKwkJCW5vIGNvdW50fQorCit+e21vdGlvbn0JCSd0aWxkZW9wJyBvcHRpb246IHN3aXRjaCBjYXNlIG9mIHttb3Rpb259IHRleHQuIHtWaToKKwkJCXRpbGRlIGNhbm5vdCBiZSB1c2VkIGFzIGFuIG9wZXJhdG9yfQorCisJCQkJCQkJKmd+KgorZ357bW90aW9ufQkJU3dpdGNoIGNhc2Ugb2Yge21vdGlvbn0gdGV4dC4ge25vdCBpbiBWaX0KKworZ35nfgkJCQkJCQkqZ35nfiogKmd+fioKK2d+fgkJCVN3aXRjaCBjYXNlIG9mIGN1cnJlbnQgbGluZS4ge25vdCBpbiBWaX0uCisKKwkJCQkJCQkqdl9+Kgore1Zpc3VhbH1+CQlTd2l0Y2ggY2FzZSBvZiBoaWdobGlnaHRlZCB0ZXh0IChmb3Ige1Zpc3VhbH0gc2VlCisJCQl8VmlzdWFsLW1vZGV8KS4ge25vdCBpbiBWaX0KKworCQkJCQkJCSp2X1UqCit7VmlzdWFsfVUJCU1ha2UgaGlnaGxpZ2h0ZWQgdGV4dCB1cHBlcmNhc2UgKGZvciB7VmlzdWFsfSBzZWUKKwkJCXxWaXN1YWwtbW9kZXwpLiB7bm90IGluIFZpfQorCisJCQkJCQkJKmdVKiAqdXBwZXJjYXNlKgorZ1V7bW90aW9ufQkJTWFrZSB7bW90aW9ufSB0ZXh0IHVwcGVyY2FzZS4ge25vdCBpbiBWaX0KKwkJCUV4YW1wbGU6ID4KKwkJCQk6bWFwISA8Qy1GPiA8RXNjPmdVaXdgXWEKKzwJCQlUaGlzIHdvcmtzIGluIEluc2VydCBtb2RlOiBwcmVzcyBDVFJMLUYgdG8gbWFrZSB0aGUKKwkJCXdvcmQgYmVmb3JlIHRoZSBjdXJzb3IgdXBwZXJjYXNlLiAgSGFuZHkgdG8gdHlwZQorCQkJd29yZHMgaW4gbG93ZXJjYXNlIGFuZCB0aGVuIG1ha2UgdGhlbSB1cHBlcmNhc2UuCisKKworZ1VnVQkJCQkJCQkqZ1VnVSogKmdVVSoKK2dVVQkJCU1ha2UgY3VycmVudCBsaW5lIHVwcGVyY2FzZS4ge25vdCBpbiBWaX0uCisKKwkJCQkJCQkqdl91Kgore1Zpc3VhbH11CQlNYWtlIGhpZ2hsaWdodGVkIHRleHQgbG93ZXJjYXNlIChmb3Ige1Zpc3VhbH0gc2VlCisJCQl8VmlzdWFsLW1vZGV8KS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ3UqICpsb3dlcmNhc2UqCitndXttb3Rpb259CQlNYWtlIHttb3Rpb259IHRleHQgbG93ZXJjYXNlLiB7bm90IGluIFZpfQorCitndWd1CQkJCQkJCSpndWd1KiAqZ3V1KgorZ3V1CQkJTWFrZSBjdXJyZW50IGxpbmUgbG93ZXJjYXNlLiB7bm90IGluIFZpfS4KKworCQkJCQkJCSpnPyogKnJvdDEzKgorZz97bW90aW9ufQkJUm90MTMgZW5jb2RlIHttb3Rpb259IHRleHQuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqdl9nPyoKK3tWaXN1YWx9Zz8JCVJvdDEzIGVuY29kZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCAoZm9yIHtWaXN1YWx9IHNlZQorCQkJfFZpc3VhbC1tb2RlfCkuICB7bm90IGluIFZpfQorCitnP2c/CQkJCQkJCSpnP2c/KiAqZz8/KgorZz8/CQkJUm90MTMgZW5jb2RlIGN1cnJlbnQgbGluZS4ge25vdCBpbiBWaX0uCisKKworQWRkaW5nIGFuZCBzdWJ0cmFjdGluZyB+CisJCQkJCQkJKkNUUkwtQSoKK0NUUkwtQQkJCUFkZCBbY291bnRdIHRvIHRoZSBudW1iZXIgb3IgYWxwaGFiZXRpYyBjaGFyYWN0ZXIgYXQKKwkJCW9yIGFmdGVyIHRoZSBjdXJzb3IuICB7bm90IGluIFZpfQorCisJCQkJCQkJKkNUUkwtWCoKK0NUUkwtWAkJCVN1YnRyYWN0IFtjb3VudF0gZnJvbSB0aGUgbnVtYmVyIG9yIGFscGhhYmV0aWMKKwkJCWNoYXJhY3RlciBhdCBvciBhZnRlciB0aGUgY3Vyc29yLiAge25vdCBpbiBWaX0KKworVGhlIENUUkwtQSBhbmQgQ1RSTC1YIGNvbW1hbmRzIHdvcmsgZm9yIChzaWduZWQpIGRlY2ltYWwgbnVtYmVycywgdW5zaWduZWQKK29jdGFsIGFuZCBoZXhhZGVjaW1hbCBudW1iZXJzIGFuZCBhbHBoYWJldGljIGNoYXJhY3RlcnMuICBUaGlzIGRlcGVuZHMgb24gdGhlCisnbnJmb3JtYXRzJyBvcHRpb24uCistIFdoZW4gJ25yZm9ybWF0cycgaW5jbHVkZXMgImFscGhhIiwgVmltIHdpbGwgY2hhbmdlIHRoZSBhbHBoYWJldGljIGNoYXJhY3RlcgorICB1bmRlciBvciBhZnRlciB0aGUgY3Vyc29yLiAgVGhpcyBpcyB1c2VmdWwgdG8gbWFrZSBsaXN0cyB3aXRoIGFuIGFscGhhYmV0aWMKKyAgaW5kZXguCistIFdoZW4gJ25yZm9ybWF0cycgaW5jbHVkZXMgImhleCIsIFZpbSBhc3N1bWVzIG51bWJlcnMgc3RhcnRpbmcgd2l0aCAnMHgnIG9yCisgICcwWCcgYXJlIGhleGFkZWNpbWFsLiAgVGhlIGNhc2Ugb2YgdGhlIHJpZ2h0bW9zdCBsZXR0ZXIgaW4gdGhlIG51bWJlcgorICBkZXRlcm1pbmVzIHRoZSBjYXNlIG9mIHRoZSByZXN1bHRpbmcgaGV4YWRlY2ltYWwgbnVtYmVyLiAgSWYgdGhlcmUgaXMgbm8KKyAgbGV0dGVyIGluIHRoZSBjdXJyZW50IG51bWJlciwgVmltIHVzZXMgdGhlIHByZXZpb3VzbHkgZGV0ZWN0ZWQgY2FzZS4KKy0gV2hlbiAnbnJmb3JtYXRzJyBpbmNsdWRlcyAib2N0YWwiLCBWaW0gY29uc2lkZXJzIG51bWJlcnMgc3RhcnRpbmcgd2l0aCBhICcwJworICB0byBiZSBvY3RhbC4gIE90aGVyIG51bWJlcnMgYXJlIGRlY2ltYWwgYW5kIG1heSBoYXZlIGEgcHJlY2VkaW5nIG1pbnVzIHNpZ24uCisgIElmIHRoZSBjdXJzb3IgaXMgb24gYSBudW1iZXIsIHRoZSBjb21tYW5kcyBhcHBseSB0byB0aGF0IG51bWJlcjsgb3RoZXJ3aXNlCisgIFZpbSB1c2VzIHRoZSBudW1iZXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IuCisKK0ZvciBudW1iZXJzIHdpdGggbGVhZGluZyB6ZXJvcyAoaW5jbHVkaW5nIGFsbCBvY3RhbCBhbmQgaGV4YWRlY2ltYWwgbnVtYmVycyksCitWaW0gcHJlc2VydmVzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgbnVtYmVyIHdoZW4gcG9zc2libGUuICBDVFJMLUEgb24KKyIwMDc3IiByZXN1bHRzIGluICIwMTAwIiwgQ1RSTC1YIG9uICIweDEwMCIgcmVzdWx0cyBpbiAiMHgwZmYiLiAgTm90ZSB0aGF0Cit3aGVuICducmZvcm1hdHMnIGluY2x1ZGVzICJvY3RhbCIsIGRlY2ltYWwgbnVtYmVycyB3aXRoIGxlYWRpbmcgemVyb3MgYXJlCitpbXBvc3NpYmxlIGJlY2F1c2UgdGhleSBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvY3RhbCBudW1iZXJzLgorCitUaGUgQ1RSTC1BIGNvbW1hbmQgaXMgdmVyeSB1c2VmdWwgaW4gYSBtYWNyby4gIEV4YW1wbGU6IFVzZSB0aGUgZm9sbG93aW5nCitzdGVwcyB0byBtYWtlIGEgbnVtYmVyZWQgbGlzdC4KKworMS4gQ3JlYXRlIHRoZSBmaXJzdCBsaXN0IGVudHJ5LCBtYWtlIHN1cmUgaXQgc3RhcnRzIHdpdGggYSBudW1iZXIuCisyLiBxYQkgICAgIC0gc3RhcnQgcmVjb3JkaW5nIGludG8gYnVmZmVyICdhJworMy4gWQkgICAgIC0geWFuayB0aGUgZW50cnkKKzQuIHAJICAgICAtIHB1dCBhIGNvcHkgb2YgdGhlIGVudHJ5IGJlbG93IHRoZSBmaXJzdCBvbmUKKzUuIENUUkwtQSAgICAtIGluY3JlbWVudCB0aGUgbnVtYmVyCis2LiBxCSAgICAgLSBzdG9wIHJlY29yZGluZworNy4gPGNvdW50PkBhIC0gcmVwZWF0IHRoZSB5YW5rLCBwdXQgYW5kIGluY3JlbWVudCA8Y291bnQ+IHRpbWVzCisKKworU0hJRlRJTkcgTElORVMgTEVGVCBPUiBSSUdIVAkJCQkqc2hpZnQtbGVmdC1yaWdodCoKKworCQkJCQkJCSo8KgorPHttb3Rpb259CQlTaGlmdCB7bW90aW9ufSBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIGxlZnR3YXJkcy4KKworCQkJCQkJCSo8PCoKKzw8CQkJU2hpZnQgW2NvdW50XSBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIGxlZnR3YXJkcy4KKworCQkJCQkJCSp2XzwqCit7VmlzdWFsfVtjb3VudF08CVNoaWZ0IHRoZSBoaWdobGlnaHRlZCBsaW5lcyBbY291bnRdICdzaGlmdHdpZHRoJworCQkJbGVmdHdhcmRzIChmb3Ige1Zpc3VhbH0gc2VlIHxWaXN1YWwtbW9kZXwpLiAge25vdCBpbgorCQkJVml9CisKKwkJCQkJCQkqPioKKyA+e21vdGlvbn0JCVNoaWZ0IHttb3Rpb259IGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgcmlnaHR3YXJkcy4KKworCQkJCQkJCSo+PioKKyA+PgkJCVNoaWZ0IFtjb3VudF0gbGluZXMgb25lICdzaGlmdHdpZHRoJyByaWdodHdhcmRzLgorCisJCQkJCQkJKnZfPioKK3tWaXN1YWx9W2NvdW50XT4JU2hpZnQgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIFtjb3VudF0gJ3NoaWZ0d2lkdGgnCisJCQlyaWdodHdhcmRzIChmb3Ige1Zpc3VhbH0gc2VlIHxWaXN1YWwtbW9kZXwpLiAge25vdCBpbgorCQkJVml9CisKKwkJCQkJCQkqOjwqCis6W3JhbmdlXTwJCVNoaWZ0IFtyYW5nZV0gbGluZXMgb25lICdzaGlmdHdpZHRoJyBsZWZ0LiAgUmVwZWF0ICc8JworCQkJZm9yIHNoaWZ0aW5nIG11bHRpcGxlICdzaGlmdHdpZHRoJ3MuCisKKzpbcmFuZ2VdPCB7Y291bnR9CVNoaWZ0IHtjb3VudH0gbGluZXMgb25lICdzaGlmdHdpZHRoJyBsZWZ0LCBzdGFydGluZworCQkJd2l0aCBbcmFuZ2VdIChkZWZhdWx0IGN1cnJlbnQgbGluZSB8Y21kbGluZS1yYW5nZXN8KS4KKwkJCVJlcGVhdCAnPCcgZm9yIHNoaWZ0aW5nIG11bHRpcGxlICdzaGlmdHdpZHRoJ3MuCisKKzpbcmFuZ2VdbGVbZnRdIFtpbmRlbnRdCWxlZnQgYWxpZ24gbGluZXMgaW4gW3JhbmdlXS4gIFNldHMgdGhlIGluZGVudCBpbiB0aGUKKwkJCWxpbmVzIHRvIFtpbmRlbnRdIChkZWZhdWx0IDApLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6PioKKzpbcmFuZ2VdPgkJU2hpZnQge2NvdW50fSBbcmFuZ2VdIGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgcmlnaHQuCisJCQlSZXBlYXQgJz4nIGZvciBzaGlmdGluZyBtdWx0aXBsZSAnc2hpZnR3aWR0aCdzLgorCis6W3JhbmdlXT4ge2NvdW50fQlTaGlmdCB7Y291bnR9IGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgcmlnaHQsIHN0YXJ0aW5nCisJCQl3aXRoIFtyYW5nZV0gKGRlZmF1bHQgY3VycmVudCBsaW5lIHxjbWRsaW5lLXJhbmdlc3wpLgorCQkJUmVwZWF0ICc+JyBmb3Igc2hpZnRpbmcgbXVsdGlwbGUgJ3NoaWZ0d2lkdGgncy4KKworVGhlICI+IiBhbmQgIjwiIGNvbW1hbmRzIGFyZSBoYW5keSBmb3IgY2hhbmdpbmcgdGhlIGluZGVudGF0aW9uIHdpdGhpbgorcHJvZ3JhbXMuICBVc2UgdGhlICdzaGlmdHdpZHRoJyBvcHRpb24gdG8gc2V0IHRoZSBzaXplIG9mIHRoZSB3aGl0ZSBzcGFjZQord2hpY2ggdGhlc2UgY29tbWFuZHMgaW5zZXJ0IG9yIGRlbGV0ZS4gIE5vcm1hbGx5IHRoZSAnc2hpZnR3aWR0aCcgb3B0aW9uIGlzIDgsCitidXQgeW91IGNhbiBzZXQgaXQgdG8sIHNheSwgMyB0byBtYWtlIHNtYWxsZXIgaW5kZW50cy4gIFRoZSBzaGlmdCBsZWZ0d2FyZHMKK3N0b3BzIHdoZW4gdGhlcmUgaXMgbm8gaW5kZW50LiAgVGhlIHNoaWZ0IHJpZ2h0IGRvZXMgbm90IGFmZmVjdCBlbXB0eSBsaW5lcy4KKworSWYgdGhlICdzaGlmdHJvdW5kJyBvcHRpb24gaXMgb24sIHRoZSBpbmRlbnQgaXMgcm91bmRlZCB0byBhIG11bHRpcGxlIG9mCisnc2hpZnR3aWR0aCcuCisKK0lmIHRoZSAnc21hcnRpbmRlbnQnIG9wdGlvbiBpcyBvbiwgb3IgJ2NpbmRlbnQnIGlzIG9uIGFuZCAnY2lua2V5cycgY29udGFpbnMKKycjJywgc2hpZnQgcmlnaHQgZG9lcyBub3QgYWZmZWN0IGxpbmVzIHN0YXJ0aW5nIHdpdGggJyMnICh0aGVzZSBhcmUgc3VwcG9zZWQKK3RvIGJlIEMgcHJlcHJvY2Vzc29yIGxpbmVzIHRoYXQgbXVzdCBzdGF5IGluIGNvbHVtbiAxKS4KKworV2hlbiB0aGUgJ2V4cGFuZHRhYicgb3B0aW9uIGlzIG9mZiAodGhpcyBpcyB0aGUgZGVmYXVsdCkgVmltIHVzZXMgPFRhYj5zIGFzCittdWNoIGFzIHBvc3NpYmxlIHRvIG1ha2UgdGhlIGluZGVudC4gIFlvdSBjYW4gdXNlICI+Pjw8IiB0byByZXBsYWNlIGFuIGluZGVudAorbWFkZSBvdXQgb2Ygc3BhY2VzIHdpdGggdGhlIHNhbWUgaW5kZW50IG1hZGUgb3V0IG9mIDxUYWI+cyAoYW5kIGEgZmV3IHNwYWNlcworaWYgbmVjZXNzYXJ5KS4gIElmIHRoZSAnZXhwYW5kdGFiJyBvcHRpb24gaXMgb24sIFZpbSB1c2VzIG9ubHkgc3BhY2VzLiAgVGhlbgoreW91IGNhbiB1c2UgIj4+PDwiIHRvIHJlcGxhY2UgPFRhYj5zIGluIHRoZSBpbmRlbnQgYnkgc3BhY2VzIChvciB1c2UKKyI6cmV0YWIhIikuCisKK1RvIG1vdmUgYSBsaW5lIHNldmVyYWwgJ3NoaWZ0d2lkdGgncywgdXNlIFZpc3VhbCBtb2RlIG9yIHRoZSAiOiIgY29tbWFuZHMuCitGb3IgZXhhbXBsZTogPgorCVZqajQ+CQltb3ZlIHRocmVlIGxpbmVzIDQgaW5kZW50cyB0byB0aGUgcmlnaHQKKwk6PDw8CQltb3ZlIGN1cnJlbnQgbGluZSAzIGluZGVudHMgdG8gdGhlIGxlZnQKKwk6Pj4gNQkJbW92ZSA1IGxpbmVzIDIgaW5kZW50cyB0byB0aGUgcmlnaHQKKwk6NT4+CQltb3ZlIGxpbmUgNSAyIGluZGVudHMgdG8gdGhlIHJpZ2h0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gQ29tcGxleCBjaGFuZ2VzCQkJCQkqY29tcGxleC1jaGFuZ2UqCisKKwkJCQkJCQkqISogKmZpbHRlcioKKyF7bW90aW9ufXtmaWx0ZXJ9CUZpbHRlciB7bW90aW9ufSB0ZXh0IGxpbmVzIHRocm91Z2ggdGhlIGV4dGVybmFsCisJCQlwcm9ncmFtIHtmaWx0ZXJ9LgorCisJCQkJCQkJKiEhKgorISF7ZmlsdGVyfQkJRmlsdGVyIFtjb3VudF0gbGluZXMgdGhyb3VnaCB0aGUgZXh0ZXJuYWwgcHJvZ3JhbQorCQkJe2ZpbHRlcn0uCisKKwkJCQkJCQkqdl8hKgore1Zpc3VhbH0he2ZpbHRlcn0JRmlsdGVyIHRoZSBoaWdobGlnaHRlZCBsaW5lcyB0aHJvdWdoIHRoZSBleHRlcm5hbAorCQkJcHJvZ3JhbSB7ZmlsdGVyfSAoZm9yIHtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4KKwkJCXtub3QgaW4gVml9CisKKzp7cmFuZ2V9IVshXXtmaWx0ZXJ9IFshXVthcmddCQkJCSo6cmFuZ2UhKgorCQkJRmlsdGVyIHtyYW5nZX0gbGluZXMgdGhyb3VnaCB0aGUgZXh0ZXJuYWwgcHJvZ3JhbQorCQkJe2ZpbHRlcn0uICBWaW0gcmVwbGFjZXMgdGhlIG9wdGlvbmFsIGJhbmdzIHdpdGggdGhlCisJCQlsYXRlc3QgZ2l2ZW4gY29tbWFuZCBhbmQgYXBwZW5kcyB0aGUgb3B0aW9uYWwgW2FyZ10uCisJCQlWaW0gc2F2ZXMgdGhlIG91dHB1dCBvZiB0aGUgZmlsdGVyIGNvbW1hbmQgaW4gYQorCQkJdGVtcG9yYXJ5IGZpbGUgYW5kIHRoZW4gcmVhZHMgdGhlIGZpbGUgaW50byB0aGUKKwkJCWJ1ZmZlci4gIFZpbSB1c2VzIHRoZSAnc2hlbGxyZWRpcicgb3B0aW9uIHRvIHJlZGlyZWN0CisJCQl0aGUgZmlsdGVyIG91dHB1dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUuCisJCQlXaGVuIHRoZSAnUicgZmxhZyBpcyBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJyBtYXJrcyBpbgorCQkJdGhlIGZpbHRlcmVkIGxpbmVzIGFyZSBkZWxldGVkLCB1bmxlc3MgdGhlCisJCQl8OmtlZXBtYXJrc3wgY29tbWFuZCBpcyB1c2VkLiAgRXhhbXBsZTogPgorCQkJCTprZWVwbWFya3MgJzwsJz4hc29ydAorPAkJCVdoZW4gdGhlIG51bWJlciBvZiBsaW5lcyBhZnRlciBmaWx0ZXJpbmcgaXMgbGVzcyB0aGFuCisJCQliZWZvcmUsIG1hcmtzIGluIHRoZSBtaXNzaW5nIGxpbmVzIGFyZSBkZWxldGVkIGFueXdheS4KKworCQkJCQkJCSo9KgorPXttb3Rpb259CQlGaWx0ZXIge21vdGlvbn0gbGluZXMgdGhyb3VnaCB0aGUgZXh0ZXJuYWwgcHJvZ3JhbQorCQkJZ2l2ZW4gd2l0aCB0aGUgJ2VxdWFscHJnJyBvcHRpb24uICBXaGVuIHRoZSAnZXF1YWxwcmcnCisJCQlvcHRpb24gaXMgZW1wdHkgKHRoaXMgaXMgdGhlIGRlZmF1bHQpLCB1c2UgdGhlCisJCQlpbnRlcm5hbCBmb3JtYXR0aW5nIGZ1bmN0aW9uIHxDLWluZGVudGluZ3wuICBCdXQgd2hlbgorCQkJJ2luZGVudGV4cHInIGlzIG5vdCBlbXB0eSwgaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQKKwkJCXxpbmRlbnQtZXhwcmVzc2lvbnwuCisKKwkJCQkJCQkqPT0qCis9PQkJCUZpbHRlciBbY291bnRdIGxpbmVzIGxpa2Ugd2l0aCA9e21vdGlvbn0uCisKKwkJCQkJCQkqdl89Kgore1Zpc3VhbH09CQlGaWx0ZXIgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIGxpa2Ugd2l0aCA9e21vdGlvbn0uCisJCQl7bm90IGluIFZpfQorCitBIGZpbHRlciBpcyBhIHByb2dyYW0gdGhhdCBhY2NlcHRzIHRleHQgYXQgc3RhbmRhcmQgaW5wdXQsIGNoYW5nZXMgaXQgaW4gc29tZQord2F5LCBhbmQgc2VuZHMgaXQgdG8gc3RhbmRhcmQgb3V0cHV0LiAgWW91IGNhbiB1c2UgdGhlIGNvbW1hbmRzIGFib3ZlIHRvIHNlbmQKK3NvbWUgdGV4dCB0aHJvdWdoIGEgZmlsdGVyLiAgRXhhbXBsZXMgb2YgZmlsdGVycyBhcmUgInNvcnQiLCB3aGljaCBzb3J0cyBsaW5lcworYWxwaGFiZXRpY2FsbHksIGFuZCAiaW5kZW50Iiwgd2hpY2ggZm9ybWF0cyBDIHByb2dyYW0gZmlsZXMgKHlvdSBuZWVkIGEKK3ZlcnNpb24gb2YgaW5kZW50IHRoYXQgd29ya3MgbGlrZSBhIGZpbHRlcjsgbm90IGFsbCB2ZXJzaW9ucyBkbykuICBUaGUgJ3NoZWxsJworb3B0aW9uIHNwZWNpZmllcyB0aGUgc2hlbGwgVmltIHVzZXMgdG8gZXhlY3V0ZSB0aGUgZmlsdGVyIGNvbW1hbmQgKFNlZSBhbHNvCit0aGUgJ3NoZWxsdHlwZScgb3B0aW9uKS4gIFlvdSBjYW4gcmVwZWF0IGZpbHRlciBjb21tYW5kcyB3aXRoICIuIi4gIFZpbSBkb2VzCitub3QgcmVjb2duaXplIGEgY29tbWVudCAoc3RhcnRpbmcgd2l0aCAnIicpIGFmdGVyIHRoZSAiOiEiIGNvbW1hbmQuCisKKworCQkJCQkJKjpzKiAqOnN1KiAqOnN1YnN0aXR1dGUqCis6W3JhbmdlXXNbdWJzdGl0dXRlXS97cGF0dGVybn0ve3N0cmluZ30vWyZdW2NdW2VdW2ddW3BdW3JdW2ldW0ldIFtjb3VudF0KKwkJCUZvciBlYWNoIGxpbmUgaW4gW3JhbmdlXSByZXBsYWNlIGEgbWF0Y2ggb2Yge3BhdHRlcm59CisJCQl3aXRoIHtzdHJpbmd9LgorCQkJRm9yIHRoZSB7cGF0dGVybn0gc2VlIHxwYXR0ZXJufC4KKwkJCXtzdHJpbmd9IGNhbiBiZSBhIGxpdGVyYWwgc3RyaW5nLCBvciBzb21ldGhpbmcKKwkJCXNwZWNpYWw7IHNlZSB8c3ViLXJlcGxhY2Utc3BlY2lhbHwuCisJCQlXaGVuIFtyYW5nZV0gYW5kIFtjb3VudF0gYXJlIG9taXR0ZWQsIHJlcGxhY2UgaW4gdGhlCisJCQljdXJyZW50IGxpbmUgb25seS4KKwkJCVdoZW4gW2NvdW50XSBpcyBnaXZlbiwgcmVwbGFjZSBpbiBbY291bnRdIGxpbmVzLAorCQkJc3RhcnRpbmcgd2l0aCB0aGUgbGFzdCBsaW5lIGluIFtyYW5nZV0uICBXaGVuIFtyYW5nZV0KKwkJCWlzIG9taXR0ZWQgc3RhcnQgaW4gdGhlIGN1cnJlbnQgbGluZS4KKwkJCUFsc28gc2VlIHxjbWRsaW5lLXJhbmdlc3wuCisJCQlTZWUgfDpzX2ZsYWdzfCBmb3IgdGhlIGZsYWdzLgorCis6W3JhbmdlXXNbdWJzdGl0dXRlXSBbY11bZV1bZ11bcF1bcl1baV1bSV0gW2NvdW50XQorOltyYW5nZV0mWyZdW2NdW2VdW2ddW3BdW3JdW2ldW0ldIFtjb3VudF0JCQkqOiYqCisJCQlSZXBlYXQgbGFzdCA6c3Vic3RpdHV0ZSB3aXRoIHNhbWUgc2VhcmNoIHBhdHRlcm4gYW5kCisJCQlzdWJzdGl0dXRlIHN0cmluZywgYnV0IHdpdGhvdXQgdGhlIHNhbWUgZmxhZ3MuICBZb3UKKwkJCW1heSBhZGQgZXh0cmEgZmxhZ3MgKHNlZSB8OnNfZmxhZ3N8KS4KKwkJCU5vdGUgdGhhdCBhZnRlciAiOnN1YnN0aXR1dGUiIHRoZSAnJicgZmxhZyBjYW4ndCBiZQorCQkJdXNlZCwgaXQncyByZWNvZ25pemVkIGFzIGEgcGF0dGVybiBzZXBhcmF0b3IuCisJCQlUaGUgc3BhY2UgYmV0d2VlbiAiOnN1YnN0aXR1dGUiIGFuZCB0aGUgJ2MnLCAnZycgYW5kCisJCQkncicgZmxhZ3MgaXNuJ3QgcmVxdWlyZWQsIGJ1dCBpbiBzY3JpcHRzIGl0J3MgYSBnb29kCisJCQlpZGVhIHRvIGtlZXAgaXQgdG8gYXZvaWQgY29uZnVzaW9uLgorCis6W3JhbmdlXX5bJl1bY11bZV1bZ11bcF1bcl1baV1bSV0gW2NvdW50XQkJCSo6fioKKwkJCVJlcGVhdCBsYXN0IHN1YnN0aXR1dGUgd2l0aCBzYW1lIHN1YnN0aXR1dGUgc3RyaW5nCisJCQlidXQgd2l0aCBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4uICBUaGlzIGlzIGxpa2UKKwkJCSI6JnIiLiAgU2VlIHw6c19mbGFnc3wgZm9yIHRoZSBmbGFncy4KKworCQkJCQkJKiYqCismCQkJU3lub255bSBmb3IgIjpzLy9+LyIgKHJlcGVhdCBsYXN0IHN1YnN0aXR1dGUpLiAgTm90ZQorCQkJdGhhdCB0aGUgZmxhZ3MgYXJlIG5vdCByZW1lbWJlcmVkLCB0aHVzIGl0IG1pZ2h0CisJCQlhY3R1YWxseSB3b3JrIGRpZmZlcmVudGx5LiAgWW91IGNhbiB1c2UgIjomJiIgdG8ga2VlcAorCQkJdGhlIGZsYWdzLgorCisJCQkJCQkqZyYqCitnJgkJCVN5bm9ueW0gZm9yICI6JXMvL34vJiIgKHJlcGVhdCBsYXN0IHN1YnN0aXR1dGUgb24gYWxsCisJCQlsaW5lcyB3aXRoIHRoZSBzYW1lIGZsYWdzKS4KKwkJCU1uZW1vbmljOiBnbG9iYWwgc3Vic3RpdHV0ZS4ge25vdCBpbiBWaX0KKworCQkJCQkJKjpzbm9tYWdpYyogKjpzbm8qCis6W3JhbmdlXXNub1ttYWdpY10gLi4uCVNhbWUgYXMgIjpzdWJzdGl0dXRlIiwgYnV0IGFsd2F5cyB1c2UgJ25vbWFnaWMnLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJKjpzbWFnaWMqICo6c20qCis6W3JhbmdlXXNtW2FnaWNdIC4uLglTYW1lIGFzICI6c3Vic3RpdHV0ZSIsIGJ1dCBhbHdheXMgdXNlICdtYWdpYycuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpzX2ZsYWdzKgorVGhlIGZsYWdzIHRoYXQgeW91IGNhbiB1c2UgZm9yIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmRzOgorCitbJl0JTXVzdCBiZSB0aGUgZmlyc3Qgb25lOiBLZWVwIHRoZSBmbGFncyBmcm9tIHRoZSBwcmV2aW91cyBzdWJzdGl0dXRlCisJY29tbWFuZC4gIEV4YW1wbGVzOiA+CisJCTomJgorCQk6cy90aGlzL3RoYXQvJgorPAlOb3RlIHRoYXQgIjpzIiBhbmQgIjomIiBkb24ndCBrZWVwIHRoZSBmbGFncy4KKwl7bm90IGluIFZpfQorCitbY10JQ29uZmlybSBlYWNoIHN1YnN0aXR1dGlvbi4gIFZpbSBoaWdobGlnaHRzIHRoZSBtYXRjaGluZyBzdHJpbmcgKHdpdGgKKwl8aGwtSW5jU2VhcmNofCkuICBZb3UgY2FuIHR5cGU6CQkJCSo6c19jKgorCSAgICAneScJICAgIHRvIHN1YnN0aXR1dGUgdGhpcyBtYXRjaAorCSAgICAnbCcJICAgIHRvIHN1YnN0aXR1dGUgdGhpcyBtYXRjaCBhbmQgdGhlbiBxdWl0ICgibGFzdCIpCisJICAgICduJwkgICAgdG8gc2tpcCB0aGlzIG1hdGNoCisJICAgIDxFc2M+ICAgdG8gcXVpdCBzdWJzdGl0dXRpbmcKKwkgICAgJ2EnCSAgICB0byBzdWJzdGl0dXRlIHRoaXMgYW5kIGFsbCByZW1haW5pbmcgbWF0Y2hlcyB7bm90IGluIFZpfQorCSAgICAncScJICAgIHRvIHF1aXQgc3Vic3RpdHV0aW5nIHtub3QgaW4gVml9CisJICAgIENUUkwtRSAgdG8gc2Nyb2xsIHRoZSBzY3JlZW4gdXAge25vdCBpbiBWaSwgbm90IGF2YWlsYWJsZSB3aGVuCisJCQljb21waWxlZCB3aXRob3V0IHRoZSAraW5zZXJ0X2V4cGFuZCBmZWF0dXJlfQorCSAgICBDVFJMLVkgIHRvIHNjcm9sbCB0aGUgc2NyZWVuIGRvd24ge25vdCBpbiBWaSwgbm90IGF2YWlsYWJsZSB3aGVuCisJCQljb21waWxlZCB3aXRob3V0IHRoZSAraW5zZXJ0X2V4cGFuZCBmZWF0dXJlfQorCUlmIHRoZSAnZWRjb21wYXRpYmxlJyBvcHRpb24gaXMgb24sIFZpbSByZW1lbWJlcnMgdGhlIFtjXSBmbGFnIGFuZAorCXRvZ2dsZXMgaXQgZWFjaCB0aW1lIHlvdSB1c2UgaXQsIGJ1dCByZXNldHMgaXQgd2hlbiB5b3UgZ2l2ZSBhIG5ldworCXNlYXJjaCBwYXR0ZXJuLgorCXtub3QgaW4gVmk6IGhpZ2hsaWdodGluZyBvZiB0aGUgbWF0Y2gsIG90aGVyIHJlc3BvbnNlcyB0aGFuICd5JyBvciAnbid9CisKK1tlXSAgICAgV2hlbiB0aGUgc2VhcmNoIHBhdHRlcm4gZmFpbHMsIGRvIG5vdCBpc3N1ZSBhbiBlcnJvciBtZXNzYWdlIGFuZCwgaW4KKwlwYXJ0aWN1bGFyLCBjb250aW51ZSBpbiBtYXBzIGFzIGlmIG5vIGVycm9yIG9jY3VycmVkLiAgVGhpcyBpcyBtb3N0CisJdXNlZnVsIHRvIHByZXZlbnQgdGhlICJObyBtYXRjaCIgZXJyb3IgZnJvbSBicmVha2luZyBhIG1hcHBpbmcuICBWaW0KKwlkb2VzIG5vdCBzdXBwcmVzcyB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2VzLCBob3dldmVyOgorCQlSZWd1bGFyIGV4cHJlc3Npb25zIGNhbid0IGJlIGRlbGltaXRlZCBieSBsZXR0ZXJzCisJCVwgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IC8sID8gb3IgJgorCQlObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbgorCQlUcmFpbGluZyBjaGFyYWN0ZXJzCisJCUludGVycnVwdGVkCisJe25vdCBpbiBWaX0KKworW2ddCVJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBsaW5lLiAgV2l0aG91dCB0aGlzIGFyZ3VtZW50LAorCXJlcGxhY2VtZW50IG9jY3VycyBvbmx5IGZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiBlYWNoIGxpbmUuICBJZgorCXRoZSAnZWRjb21wYXRpYmxlJyBvcHRpb24gaXMgb24sIFZpbSByZW1lbWJlcnMgdGhpcyBmbGFnIGFuZCB0b2dnbGVzCisJaXQgZWFjaCB0aW1lIHlvdSB1c2UgaXQsIGJ1dCByZXNldHMgaXQgd2hlbiB5b3UgZ2l2ZSBhIG5ldyBzZWFyY2gKKwlwYXR0ZXJuLiAgSWYgdGhlICdnZGVmYXVsdCcgb3B0aW9uIGlzIG9uLCB0aGlzIGZsYWcgaXMgb24gYnkgZGVmYXVsdAorCWFuZCB0aGUgW2ddIGFyZ3VtZW50IHN3aXRjaGVzIGl0IG9mZi4KKworW2ldCUlnbm9yZSBjYXNlIGZvciB0aGUgcGF0dGVybi4gIFRoZSAnaWdub3JlY2FzZScgYW5kICdzbWFydGNhc2UnIG9wdGlvbnMKKwlhcmUgbm90IHVzZWQuCisJe25vdCBpbiBWaX0KKworW0ldCURvbid0IGlnbm9yZSBjYXNlIGZvciB0aGUgcGF0dGVybi4gIFRoZSAnaWdub3JlY2FzZScgYW5kICdzbWFydGNhc2UnCisJb3B0aW9ucyBhcmUgbm90IHVzZWQuCisJe25vdCBpbiBWaX0KKworW3BdCVByaW50IHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGxhc3Qgc3Vic3RpdHV0ZS4KKwl7bm90IGluIFZpfQorCitbcl0JT25seSB1c2VmdWwgaW4gY29tYmluYXRpb24gd2l0aCAiOiYiIG9yICI6cyIgd2l0aG91dCBhcmd1bWVudHMuICAiOiZyIgorCXdvcmtzIHRoZSBzYW1lIHdheSBhcyAiOn4iOiAgV2hlbiB0aGUgc2VhcmNoIHBhdHRlcm4gaXMgZW1wdHksIHVzZSB0aGUKKwlwcmV2aW91c2x5IHVzZWQgc2VhcmNoIHBhdHRlcm4gaW5zdGVhZCBvZiB0aGUgc2VhcmNoIHBhdHRlcm4gZnJvbSB0aGUKKwlsYXN0IHN1YnN0aXR1dGUgb3IgIjpnbG9iYWwiLiAgSWYgdGhlIGxhc3QgY29tbWFuZCB0aGF0IGRpZCBhIHNlYXJjaAorCXdhcyBhIHN1YnN0aXR1dGUgb3IgIjpnbG9iYWwiLCB0aGVyZSBpcyBubyBlZmZlY3QuICBJZiB0aGUgbGFzdAorCWNvbW1hbmQgd2FzIGEgc2VhcmNoIGNvbW1hbmQgc3VjaCBhcyAiLyIsIHVzZSB0aGUgcGF0dGVybiBmcm9tIHRoYXQKKwljb21tYW5kLgorCUZvciAiOnMiIHdpdGggYW4gYXJndW1lbnQgdGhpcyBhbHJlYWR5IGhhcHBlbnM6ID4KKwkJOnMvYmx1ZS9yZWQvCisJCS9ncmVlbgorCQk6cy8vcmVkLyAgIG9yICA6fiAgIG9yICA6JnIKKzwJVGhlIGxhc3QgY29tbWFuZHMgd2lsbCByZXBsYWNlICJncmVlbiIgd2l0aCAicmVkIi4gPgorCQk6cy9ibHVlL3JlZC8KKwkJL2dyZWVuCisJCTomCis8CVRoZSBsYXN0IGNvbW1hbmQgd2lsbCByZXBsYWNlICJibHVlIiB3aXRoICJyZWQiLgorCXtub3QgaW4gVml9CisKK05vdGUgdGhhdCB0aGVyZSBpcyBubyBmbGFnIHRvIGNoYW5nZSB0aGUgIm1hZ2ljbmVzcyIgb2YgdGhlIHBhdHRlcm4uICBBCitkaWZmZXJlbnQgY29tbWFuZCBpcyB1c2VkIGluc3RlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgdGhlIGZsYWdzIGNhbiBvbmx5IGJlCitmb3VuZCBieSBza2lwcGluZyB0aGUgcGF0dGVybiwgYW5kIGluIG9yZGVyIHRvIHNraXAgdGhlIHBhdHRlcm4gdGhlCisibWFnaWNuZXNzIiBtdXN0IGJlIGtub3duLiAgQ2F0Y2ggMjIhCisKK0lmIHRoZSB7cGF0dGVybn0gZm9yIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmQgaXMgZW1wdHksIHRoZSBjb21tYW5kIHVzZXMgdGhlCitwYXR0ZXJuIGZyb20gdGhlIGxhc3Qgc3Vic3RpdHV0ZSBvciAiOmdsb2JhbCIgY29tbWFuZC4gIFdpdGggdGhlIFtyXSBmbGFnLCB0aGUKK2NvbW1hbmQgdXNlcyB0aGUgcGF0dGVybiBmcm9tIHRoZSBsYXN0IHN1YnN0aXR1dGUsICI6Z2xvYmFsIiwgb3Igc2VhcmNoCitjb21tYW5kLgorCitGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFZpIHRoZXNlIHR3byBleGNlcHRpb25zIGFyZSBhbGxvd2VkOgorIlwve3N0cmluZ30vIiBhbmQgIlw/e3N0cmluZ30/IiBkbyB0aGUgc2FtZSBhcyAiLy97c3RyaW5nfS9yIi4KKyJcJntzdHJpbmd9JiIgZG9lcyB0aGUgc2FtZSBhcyAiLy97c3RyaW5nfS8iLgorCQkJCQkJCSpFMTQ2KgorSW5zdGVhZCBvZiB0aGUgJy8nIHdoaWNoIHN1cnJvdW5kcyB0aGUgcGF0dGVybiBhbmQgcmVwbGFjZW1lbnQgc3RyaW5nLCB5b3UKK2NhbiB1c2UgYW55IG90aGVyIGNoYXJhY3RlciwgYnV0IG5vdCBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyLCAnXCcsICciJyBvcgorJ3wnLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBhICcvJyBpbiB0aGUgc2VhcmNoIHBhdHRlcm4gb3IKK3JlcGxhY2VtZW50IHN0cmluZy4gIEV4YW1wbGU6ID4KKwk6cysvKy8vKworCitGb3IgdGhlIGRlZmluaXRpb24gb2YgYSBwYXR0ZXJuLCBzZWUgfHBhdHRlcm58LgorCisJCQkJCSpzdWItcmVwbGFjZS1zcGVjaWFsKiAqOnNcPSoKK1doZW4gdGhlIHtzdHJpbmd9IHN0YXJ0cyB3aXRoICJcPSIgaXQgaXMgZXZhbHVhdGVkIGFzIGFuIGV4cHJlc3Npb24sIHNlZQorfHN1Yi1yZXBsYWNlLWV4cHJlc3Npb258LiAgT3RoZXJ3aXNlIHRoZXNlIGNoYXJhY3RlcnMgaW4ge3N0cmluZ30gaGF2ZSBhCitzcGVjaWFsIG1lYW5pbmc6CisKK21hZ2ljCW5vbWFnaWMJICBhY3Rpb24gICAgfgorICAmCSAgXCYJICByZXBsYWNlZCB3aXRoIHRoZSB3aG9sZSBtYXRjaGVkIHBhdHRlcm4JICAgICAqcy9cJioKKyBcJgkgICAmCSAgcmVwbGFjZWQgd2l0aCAmCisgICAgICBcMAkgIHJlcGxhY2VkIHdpdGggdGhlIHdob2xlIG1hdGNoZWQgcGF0dGVybgkgICAqXDAqICpzL1wwKgorICAgICAgXDEJICByZXBsYWNlZCB3aXRoIHRoZSBtYXRjaGVkIHBhdHRlcm4gaW4gdGhlIGZpcnN0CisJCSAgcGFpciBvZiAoKQkJCQkJICAgICAqcy9cMSoKKyAgICAgIFwyCSAgcmVwbGFjZWQgd2l0aCB0aGUgbWF0Y2hlZCBwYXR0ZXJuIGluIHRoZSBmaXJzdAorCQkgIHBhaXIgb2YgKCkJCQkJCSAgICAgKnMvXDIqCisgICAgICAuLgkgIC4uCQkJCQkJICAgICAqcy9cMyoKKyAgICAgIFw5CSAgcmVwbGFjZWQgd2l0aCB0aGUgbWF0Y2hlZCBwYXR0ZXJuIGluIHRoZSBuaW50aAorCQkgIHBhaXIgb2YgKCkJCQkJCSAgICAgKnMvXDkqCisgIH4JICBcfgkgIHJlcGxhY2VkIHdpdGggdGhlIHtzdHJpbmd9IG9mIHRoZSBwcmV2aW91cworCQkgIHN1YnN0aXR1dGUJCQkJCSAgICAgKnN+KgorIFx+CSAgIH4JICByZXBsYWNlZCB3aXRoIH4JCQkJICAgICAqcy9cfioKKyAgICAgIFx1CSAgbmV4dCBjaGFyYWN0ZXIgbWFkZSB1cHBlcmNhc2UJCQkgICAgICpzL1x1KgorICAgICAgXFUJICBmb2xsb3dpbmcgY2hhcmFjdGVycyBtYWRlIHVwcGVyY2FzZSwgdW50aWwgXEUgICAgICAqcy9cVSoKKyAgICAgIFxsCSAgbmV4dCBjaGFyYWN0ZXIgbWFkZSBsb3dlcmNhc2UJCQkgICAgICpzL1xsKgorICAgICAgXEwJICBmb2xsb3dpbmcgY2hhcmFjdGVycyBtYWRlIGxvd2VyY2FzZSwgdW50aWwgXEUgICAgICAqcy9cTCoKKyAgICAgIFxlCSAgZW5kIG9mIFx1LCBcVSwgXGwgYW5kIFxMIChOT1RFOiBub3QgPEVzYz4hKQkgICAgICpzL1xlKgorICAgICAgXEUJICBlbmQgb2YgXHUsIFxVLCBcbCBhbmQgXEwJCQkgICAgICpzL1xFKgorICAgICAgPENSPgkgIHNwbGl0IGxpbmUgaW4gdHdvIGF0IHRoaXMgcG9pbnQKKwkJICAoVHlwZSB0aGUgPENSPiBhcyBDVFJMLVYgPEVudGVyPikJCSAgICAgKnM8Q1I+KgorICAgICAgXHIJICBpZGVtCQkJCQkJICAgICAqcy9ccioKKyAgICAgIFw8Q1I+CSAgaW5zZXJ0IGEgY2FycmlhZ2UtcmV0dXJuIChDVFJMLU0pCisJCSAgKFR5cGUgdGhlIDxDUj4gYXMgQ1RSTC1WIDxFbnRlcj4pCQkgICAgICpzL1w8Q1I+KgorICAgICAgXG4JICBpbnNlcnQgYSA8Tkw+ICg8TlVMPiBpbiB0aGUgZmlsZSkKKwkJICAoZG9lcyBOT1QgYnJlYWsgdGhlIGxpbmUpCQkJICAgICAqcy9cbioKKyAgICAgIFxiCSAgaW5zZXJ0IGEgPEJTPgkJCQkJICAgICAqcy9cYioKKyAgICAgIFx0CSAgaW5zZXJ0IGEgPFRhYj4JCQkJICAgICAqcy9cdCoKKyAgICAgIFxcCSAgaW5zZXJ0IGEgc2luZ2xlIGJhY2tzbGFzaAkJCSAgICAgKnMvXFwqCisgICAgICBceAkgIHdoZXJlIHggaXMgYW55IGNoYXJhY3RlciBub3QgbWVudGlvbmVkIGFib3ZlOgorCQkgIFJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uCisKK0V4YW1wbGVzOiA+CisgIDpzL2FcfGIveHh4XDB4eHgvZwkJIG1vZGlmaWVzICJhIGIiCSAgICAgdG8gInh4eGF4eHggeHh4Ynh4eCIKKyAgOnMvXChbYWJjXVwpXChbZWZnXVwpL1wyXDEvZwkgbW9kaWZpZXMgImFmIGZhIGJnIiB0byAiZmEgZmEgZ2IiCisgIDpzL2FiY2RlL2FiY15NZGUvCQkgbW9kaWZpZXMgImFiY2RlIiAgICB0byAiYWJjIiwgImRlIiAodHdvIGxpbmVzKQorICA6cy8kL1xeTS8JCQkgbW9kaWZpZXMgImFiY2RlIiAgICB0byAiYWJjZGVeTSIKKworTm90ZTogSW4gcHJldmlvdXMgdmVyc2lvbnMgQ1RSTC1WIHdhcyBoYW5kbGVkIGluIGEgc3BlY2lhbCB3YXkuICBTaW5jZSB0aGlzIGlzCitub3QgVmkgY29tcGF0aWJsZSwgdGhpcyB3YXMgcmVtb3ZlZC4gIFVzZSBhIGJhY2tzbGFzaCBpbnN0ZWFkLgorCitjb21tYW5kCQl0ZXh0CXJlc3VsdCB+Cis6cy9hYS9hXk1hLwlhYQlhPGxpbmUtYnJlYWs+YQorOnMvYWEvYVxeTWEvCWFhCWFeTWEKKzpzL2FhL2FcXF5NYS8JYWEJYVw8bGluZS1icmVhaz5hCisKKyh5b3UgbmVlZCB0byB0eXBlIENUUkwtViA8Q1I+IHRvIGdldCBhIF5NIGhlcmUpCisKK1RoZSBudW1iZXJpbmcgb2YgIlwxIiwgIlwyIiBldGMuIGlzIGRvbmUgYmFzZWQgb24gd2hpY2ggIlwoIiBjb21lcyBmaXJzdCBpbgordGhlIHBhdHRlcm4gKGdvaW5nIGxlZnQgdG8gcmlnaHQpLiAgV2hlbiBhIHBhcmVudGhlc2VzIGdyb3VwIG1hdGNoZXMgc2V2ZXJhbAordGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQgZm9yICJcMSIsICJcMiIsIGV0Yy4gIEV4YW1wbGU6ID4KKyAgOnMvXChcKGFbYS1kXSBcKSpcKS9cMi8gICAgICBtb2RpZmllcyAiYWEgYWIgeCIgdG8gImFiIHgiCisKK1doZW4gdXNpbmcgcGFyZW50aGVzZXMgaW4gY29tYmluYXRpb24gd2l0aCAnfCcsIGxpa2UgaW4gXChbYWJdXClcfFwoW2NkXVwpLAorZWl0aGVyIHRoZSBmaXJzdCBvciBzZWNvbmQgcGF0dGVybiBpbiBwYXJlbnRoZXNlcyBkaWQgbm90IG1hdGNoLCBzbyBlaXRoZXIKK1wxIG9yIFwyIGlzIGVtcHR5LiAgRXhhbXBsZTogPgorICA6cy9cKFthYl1cKVx8XChbY2RdXCkvXDF4L2cgICBtb2RpZmllcyAiYSBiIGMgZCIgIHRvICJheCBieCB4IHgiCis8CisKK1N1YnN0aXR1dGUgd2l0aCBhbiBleHByZXNzaW9uCQkJKnN1Yi1yZXBsYWNlLWV4cHJlc3Npb24qCisKK1doZW4gdGhlIHN1YnN0aXR1dGUgc3RyaW5nIHN0YXJ0cyB3aXRoICJcPSIgdGhlIHJlbWFpbmVyIGlzIGludGVycHJldGVkIGFzIGFuCitleHByZXNzaW9uLiAgVGhpcyBkb2VzIG5vdCB3b3JrIHJlY3Vyc2l2ZWx5OiBhIHN1YnN0aXR1dGUoKSBmdW5jdGlvbiBpbnNpZGUKK3RoZSBleHByZXNzaW9uIGNhbm5vdCB1c2UgIlw9IiBmb3IgdGhlIHN1YnN0aXR1dGUgc3RyaW5nLgorCitUaGUgc3BlY2lhbCBtZWFuaW5nIGZvciBjaGFyYWN0ZXJzIGFzIG1lbnRpb25lZCBhdCB8c3ViLXJlcGxhY2Utc3BlY2lhbHwgZG9lcworbm90IGFwcGx5IGV4Y2VwdCAiPENSPiIsICJcPENSPiIgYW5kICJcXCIuICBUaHVzIGluIHRoZSByZXN1bHQgb2YgdGhlCitleHByZXNzaW9uIHlvdSBuZWVkIHRvIHVzZSB0d28gYmFja3NsYXNoZXMgZ2V0IG9uZSwgcHV0IGEgYmFja3NsYXNoIGJlZm9yZSBhCis8Q1I+IHlvdSB3YW50IHRvIGluc2VydCBhbmQgdXNlIGEgPENSPiB3aXRob3V0IGEgYmFja3NsYXNoIHdoZXJlIHlvdSB3YW50IHRvCiticmVhayB0aGUgbGluZS4KKworRm9yIGNvbnZlbmllbmNlIGEgPE5MPiBjaGFyYWN0ZXIgaXMgYWxzbyB1c2VkIGFzIGEgbGluZSBicmVhay4gIFByZXBlbmQgYQorYmFja3NsYXNoIHRvIGdldCBhIHJlYWwgPE5MPiBjaGFyYWN0ZXIgKHdoaWNoIHdpbGwgYmUgYSBOVUwgaW4gdGhlIGZpbGUpLgorCitUaGUgd2hvbGUgbWF0Y2hlZCB0ZXh0IGNhbiBiZSBhY2Nlc3NlZCB3aXRoICJzdWJtYXRjaCgwKSIuICBUaGUgdGV4dCBtYXRjaGVkCit3aXRoIHRoZSBmaXJzdCBwYWlyIG9mICgpIHdpdGggInN1Ym1hdGNoKDEpIi4gIExpa2V3aXNlIGZvciBmdXJ0aGVyCitzdWItbWF0Y2hlcyBpbiAoKS4KKworQmUgY2FyZWZ1bDogVGhlIHNlcGFyYXRpb24gY2hhcmFjdGVyIG11c3Qgbm90IGFwcGVhciBpbiB0aGUgZXhwcmVzc2lvbiEKK0NvbnNpZGVyIHVzaW5nIGEgY2hhcmFjdGVyIGxpa2UgIkAiIG9yICI6Ii4gIFRoZXJlIGlzIG5vIHByb2JsZW0gaWYgdGhlIHJlc3VsdAorb2YgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgdGhlIHNlcGFyYXRpb24gY2hhcmFjdGVyLgorCitFeGFtcGxlOiA+CisJOnNAXG5AXD0iXHIiIC4gZXhwYW5kKCIkSE9NRSIpIC4gIlxyIkAKK1RoaXMgcmVwbGFjZXMgYW4gZW5kLW9mLWxpbmUgd2l0aCBhIG5ldyBsaW5lIGNvbnRhaW5pbmcgdGhlIHZhbHVlIG9mICRIT01FLgorCisKKwkJCQkJCSo6cHJvKiAqOnByb21wdGZpbmQqCis6cHJvbXB0ZltpbmRdIFtzdHJpbmddCisJCQlQdXQgdXAgYSBTZWFyY2ggZGlhbG9nLiAgV2hlbiBbc3RyaW5nXSBpcyBnaXZlbiwgaXQgaXMKKwkJCXVzZWQgYXMgdGhlIGluaXRpYWwgc2VhcmNoIHN0cmluZy4KKwkJCXtvbmx5IGZvciBXaW4zMiwgTW90aWYgYW5kIEdUSyBHVUl9CisKKwkJCQkJCSo6cHJvbXB0ciogKjpwcm9tcHRyZXBsKgorOnByb21wdHJbZXBsXSBbc3RyaW5nXQorCQkJUHV0IHVwIGEgU2VhcmNoL1JlcGxhY2UgZGlhbG9nLiAgV2hlbiBbc3RyaW5nXSBpcworCQkJZ2l2ZW4sIGl0IGlzIHVzZWQgYXMgdGhlIGluaXRpYWwgc2VhcmNoIHN0cmluZy4KKwkJCXtvbmx5IGZvciBXaW4zMiwgTW90aWYgYW5kIEdUSyBHVUl9CisKKwkJCQkJCQkqOnJldCogKjpyZXRhYioKKzpbcmFuZ2VdcmV0W2FiXVshXSBbbmV3X3RhYnN0b3BdCisJCQlSZXBsYWNlIGFsbCBzZXF1ZW5jZXMgb2Ygd2hpdGUtc3BhY2UgY29udGFpbmluZyBhCisJCQk8VGFiPiB3aXRoIG5ldyBzdHJpbmdzIG9mIHdoaXRlLXNwYWNlIHVzaW5nIHRoZSBuZXcKKwkJCXRhYnN0b3AgdmFsdWUgZ2l2ZW4uICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBuZXcKKwkJCXRhYnN0b3Agc2l6ZSBvciBpdCBpcyB6ZXJvLCBWaW0gdXNlcyB0aGUgY3VycmVudCB2YWx1ZQorCQkJb2YgJ3RhYnN0b3AnLgorCQkJVGhlIGN1cnJlbnQgdmFsdWUgb2YgJ3RhYnN0b3AnIGlzIGFsd2F5cyB1c2VkIHRvCisJCQljb21wdXRlIHRoZSB3aWR0aCBvZiBleGlzdGluZyB0YWJzLgorCQkJV2l0aCAhLCBWaW0gYWxzbyByZXBsYWNlcyBzdHJpbmdzIG9mIG9ubHkgbm9ybWFsCisJCQlzcGFjZXMgd2l0aCB0YWJzIHdoZXJlIGFwcHJvcHJpYXRlLgorCQkJV2l0aCAnZXhwYW5kdGFiJyBvbiwgVmltIHJlcGxhY2VzIGFsbCB0YWJzIHdpdGggdGhlCisJCQlhcHByb3ByaWF0ZSBudW1iZXIgb2Ygc3BhY2VzLgorCQkJVGhpcyBjb21tYW5kIHNldHMgJ3RhYnN0b3AnIHRvIHRoZSBuZXcgdmFsdWUgZ2l2ZW4sCisJCQlhbmQgaWYgcGVyZm9ybWVkIG9uIHRoZSB3aG9sZSBmaWxlLCB3aGljaCBpcyBkZWZhdWx0LAorCQkJc2hvdWxkIG5vdCBtYWtlIGFueSB2aXNpYmxlIGNoYW5nZS4KKwkJCUNhcmVmdWw6IFRoaXMgY29tbWFuZCBtb2RpZmllcyBhbnkgPFRhYj4gY2hhcmFjdGVycworCQkJaW5zaWRlIG9mIHN0cmluZ3MgaW4gYSBDIHByb2dyYW0uICBVc2UgIlx0IiB0byBhdm9pZAorCQkJdGhpcyAodGhhdCdzIGEgZ29vZCBoYWJpdCBhbnl3YXkpLgorCQkJIjpyZXRhYiEiIG1heSBhbHNvIGNoYW5nZSBhIHNlcXVlbmNlIG9mIHNwYWNlcyBieQorCQkJPFRhYj4gY2hhcmFjdGVycywgd2hpY2ggY2FuIG1lc3MgdXAgYSBwcmludGYoKS4KKwkJCXtub3QgaW4gVml9CisJCQlOb3QgYXZhaWxhYmxlIHdoZW4gfCtleF9leHRyYXwgZmVhdHVyZSB3YXMgZGlzYWJsZWQgYXQKKwkJCWNvbXBpbGUgdGltZS4KKworCQkJCQkJCSpyZXRhYi1leGFtcGxlKgorRXhhbXBsZSBmb3IgdXNpbmcgYXV0b2NvbW1hbmRzIGFuZCAiOnJldGFiIiB0byBlZGl0IGEgZmlsZSB3aGljaCBpcyBzdG9yZWQKK3dpdGggdGFic3RvcHMgYXQgOCBidXQgZWRpdGVkIHdpdGggdGFic3RvcHMgc2V0IGF0IDQuICBXYXJuaW5nOiB3aGl0ZSBzcGFjZQoraW5zaWRlIG9mIHN0cmluZ3MgY2FuIGNoYW5nZSEgIEFsc28gc2VlICdzb2Z0dGFic3RvcCcgb3B0aW9uLiA+CisKKyAgOmF1dG8gQnVmUmVhZFBvc3QJKi54eAlyZXRhYiEgNAorICA6YXV0byBCdWZXcml0ZVByZQkqLnh4CXJldGFiISA4CisgIDphdXRvIEJ1ZldyaXRlUG9zdAkqLnh4CXJldGFiISA0CisgIDphdXRvIEJ1Zk5ld0ZpbGUJKi54eAlzZXQgdHM9NAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIENvcHlpbmcgYW5kIG1vdmluZyB0ZXh0CQkJCSpjb3B5LW1vdmUqCisKKwkJCQkJCQkqcXVvdGUqCisie2EtekEtWjAtOS4lIzotIn0JVXNlIHJlZ2lzdGVyIHthLXpBLVowLTkuJSM6LSJ9IGZvciBuZXh0IGRlbGV0ZSwgeWFuaworCQkJb3IgcHV0ICh1c2UgdXBwZXJjYXNlIGNoYXJhY3RlciB0byBhcHBlbmQgd2l0aAorCQkJZGVsZXRlIGFuZCB5YW5rKSAoey4lIzp9IG9ubHkgd29yayB3aXRoIHB1dCkuCisKKwkJCQkJCQkqOnJlZyogKjpyZWdpc3RlcnMqCis6cmVnW2lzdGVyc10JCURpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIGFsbCBudW1iZXJlZCBhbmQgbmFtZWQKKwkJCXJlZ2lzdGVycy4gIHtub3QgaW4gVml9CisKKzpyZWdbaXN0ZXJzXSB7YXJnfQlEaXNwbGF5IHRoZSBjb250ZW50cyBvZiB0aGUgbnVtYmVyZWQgYW5kIG5hbWVkCisJCQlyZWdpc3RlcnMgdGhhdCBhcmUgbWVudGlvbmVkIGluIHthcmd9LiAgRm9yIGV4YW1wbGU6ID4KKwkJCQk6ZGlzIDFhCis8CQkJdG8gZGlzcGxheSByZWdpc3RlcnMgJzEnIGFuZCAnYScuICBTcGFjZXMgYXJlIGFsbG93ZWQKKwkJCWluIHthcmd9LiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6ZGkqICo6ZGlzcGxheSoKKzpkaVtzcGxheV0gW2FyZ10JU2FtZSBhcyA6cmVnaXN0ZXJzLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp5KiAqeWFuayoKK1sieF15e21vdGlvbn0JCVlhbmsge21vdGlvbn0gdGV4dCBbaW50byByZWdpc3RlciB4XS4gIFdoZW4gbm8KKwkJCWNoYXJhY3RlcnMgYXJlIHRvIGJlIHlhbmtlZCAoZS5nLiwgInkwIiBpbiBjb2x1bW4gMSksCisJCQl0aGlzIGlzIGFuIGVycm9yIHdoZW4gJ2Nwb3B0aW9ucycgaW5jbHVkZXMgdGhlICdFJworCQkJZmxhZy4KKworCQkJCQkJCSp5eSoKK1sieF15eQkJCVlhbmsgW2NvdW50XSBsaW5lcyBbaW50byByZWdpc3RlciB4XSB8bGluZXdpc2V8LgorCisJCQkJCQkJKlkqCitbInhdWQkJCXlhbmsgW2NvdW50XSBsaW5lcyBbaW50byByZWdpc3RlciB4XSAoc3lub255bSBmb3IKKwkJCXl5LCB8bGluZXdpc2V8KS4gIElmIHlvdSBsaWtlICJZIiB0byB3b3JrIGZyb20gdGhlCisJCQljdXJzb3IgdG8gdGhlIGVuZCBvZiBsaW5lICh3aGljaCBpcyBtb3JlIGxvZ2ljYWwsCisJCQlidXQgbm90IFZpLWNvbXBhdGlibGUpIHVzZSAiOm1hcCBZIHkkIi4KKworCQkJCQkJCSp2X3kqCit7VmlzdWFsfVsieF15CQlZYW5rIHRoZSBoaWdobGlnaHRlZCB0ZXh0IFtpbnRvIHJlZ2lzdGVyIHhdIChmb3IKKwkJCXtWaXN1YWx9IHNlZSB8VmlzdWFsLW1vZGV8KS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqdl9ZKgore1Zpc3VhbH1bInhdWQkJWWFuayB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgW2ludG8gcmVnaXN0ZXIgeF0gKGZvcgorCQkJe1Zpc3VhbH0gc2VlIHxWaXN1YWwtbW9kZXwpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6eSogKjp5YW5rKgorOltyYW5nZV15W2Fua10gW3hdCVlhbmsgW3JhbmdlXSBsaW5lcyBbaW50byByZWdpc3RlciB4XS4KKworOltyYW5nZV15W2Fua10gW3hdIHtjb3VudH0KKwkJCVlhbmsge2NvdW50fSBsaW5lcywgc3RhcnRpbmcgd2l0aCBsYXN0IGxpbmUgbnVtYmVyCisJCQlpbiBbcmFuZ2VdIChkZWZhdWx0OiBjdXJyZW50IGxpbmUgfGNtZGxpbmUtcmFuZ2VzfCksCisJCQlbaW50byByZWdpc3RlciB4XS4KKworCQkJCQkJCSpwKiAqcHV0KiAqRTM1MyoKK1sieF1wCQkJUHV0IHRoZSB0ZXh0IFtmcm9tIHJlZ2lzdGVyIHhdIGFmdGVyIHRoZSBjdXJzb3IKKwkJCVtjb3VudF0gdGltZXMuICB7Vmk6IG5vIGNvdW50fQorCisJCQkJCQkJKlAqCitbInhdUAkJCVB1dCB0aGUgdGV4dCBbZnJvbSByZWdpc3RlciB4XSBiZWZvcmUgdGhlIGN1cnNvcgorCQkJW2NvdW50XSB0aW1lcy4gIHtWaTogbm8gY291bnR9CisKKwkJCQkJCQkqPE1pZGRsZU1vdXNlPioKK1sieF08TWlkZGxlTW91c2U+CVB1dCB0aGUgdGV4dCBmcm9tIGEgcmVnaXN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IgW2NvdW50XQorCQkJdGltZXMuICBVc2VzIHRoZSAiKiByZWdpc3RlciwgdW5sZXNzIGFub3RoZXIgaXMKKwkJCXNwZWNpZmllZC4gIFVzaW5nIHRoZSBtb3VzZSBvbmx5IHdvcmtzIHdoZW4gJ21vdXNlJworCQkJY29udGFpbnMgJ24nIG9yICdhJy4KKwkJCXtub3QgaW4gVml9CisJCQlJZiB5b3UgaGF2ZSBhIHNjcm9sbHdoZWVsIGFuZCBvZnRlbiBhY2NpZGVudGFsbHkgcGFzdGUKKwkJCXRleHQsIHlvdSBjYW4gdXNlIHRoZXNlIG1hcHBpbmdzIHRvIGRpc2FibGUgdGhlCisJCQlwYXN0aW5nIHdpdGggdGhlIG1pZGRsZSBtb3VzZSBidXR0b246ID4KKwkJCQk6bWFwIDxNaWRkbGVNb3VzZT4gPE5vcD4KKwkJCQk6aW1hcCA8TWlkZGxlTW91c2U+IDxOb3A+Cis8CQkJWW91IG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGUgbXVsdGktY2xpY2sgdmVyc2lvbnMKKwkJCXRvbywgc2VlIHxkb3VibGUtY2xpY2t8LgorCisJCQkJCQkJKmdwKgorWyJ4XWdwCQkJSnVzdCBsaWtlICJwIiwgYnV0IGxlYXZlIHRoZSBjdXJzb3IganVzdCBhZnRlciB0aGUgbmV3CisJCQl0ZXh0LiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnUCoKK1sieF1nUAkJCUp1c3QgbGlrZSAiUCIsIGJ1dCBsZWF2ZSB0aGUgY3Vyc29yIGp1c3QgYWZ0ZXIgdGhlIG5ldworCQkJdGV4dC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnB1KiAqOnB1dCoKKzpbbGluZV1wdVt0XSBbeF0JUHV0IHRoZSB0ZXh0IFtmcm9tIHJlZ2lzdGVyIHhdIGFmdGVyIFtsaW5lXSAoZGVmYXVsdAorCQkJY3VycmVudCBsaW5lKS4gIFRoaXMgYWx3YXlzIHdvcmtzIHxsaW5ld2lzZXwsIHRodXMKKwkJCXRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBwdXQgYSB5YW5rZWQgYmxvY2sgYXMgbmV3CisJCQlsaW5lcy4KKwkJCVRoZSByZWdpc3RlciBjYW4gYWxzbyBiZSAnPScgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwKKwkJCWV4cHJlc3Npb24uICBUaGUgZXhwcmVzc2lvbiBjb250aW51ZXMgdW50aWwgdGhlIGVuZCBvZgorCQkJdGhlIGNvbW1hbmQuICBZb3UgbmVlZCB0byBlc2NhcGUgdGhlICd8JyBhbmQgJyInCisJCQljaGFyYWN0ZXJzIHRvIHByZXZlbnQgdGhlbSBmcm9tIHRlcm1pbmF0aW5nIHRoZQorCQkJY29tbWFuZC4gIEV4YW1wbGU6ID4KKwkJCQk6cHV0ID0ncGF0aCcgLiBcIiwvdGVzdFwiCis8CQkJSWYgdGhlcmUgaXMgbm8gZXhwcmVzc2lvbiBhZnRlciAnPScsIFZpbSB1c2VzIHRoZQorCQkJcHJldmlvdXMgZXhwcmVzc2lvbi4gIFlvdSBjYW4gc2VlIGl0IHdpdGggIjpkaXMgPSIuCisKKzpbbGluZV1wdVt0XSEgW3hdCVB1dCB0aGUgdGV4dCBbZnJvbSByZWdpc3RlciB4XSBiZWZvcmUgW2xpbmVdIChkZWZhdWx0CisJCQljdXJyZW50IGxpbmUpLgorCitbInhdXXAJCSAgICBvcgkJCQkJKl1wKiAqXTxNaWRkbGVNb3VzZT4qCitbInhdXTxNaWRkbGVNb3VzZT4JTGlrZSAicCIsIGJ1dCBhZGp1c3QgdGhlIGluZGVudCB0byB0aGUgY3VycmVudCBsaW5lLgorCQkJVXNpbmcgdGhlIG1vdXNlIG9ubHkgd29ya3Mgd2hlbiAnbW91c2UnIGNvbnRhaW5zICduJworCQkJb3IgJ2EnLiAge25vdCBpbiBWaX0KKworWyJ4XVtQCQkgICAgb3IJCQkJCSpbUCoKK1sieF1dUAkJICAgIG9yCQkJCQkqXVAqCitbInhdW3AJCSAgICBvcgkJCQkJKltwKiAqWzxNaWRkbGVNb3VzZT4qCitbInhdWzxNaWRkbGVNb3VzZT4JTGlrZSAiUCIsIGJ1dCBhZGp1c3QgdGhlIGluZGVudCB0byB0aGUgY3VycmVudCBsaW5lLgorCQkJVXNpbmcgdGhlIG1vdXNlIG9ubHkgd29ya3Mgd2hlbiAnbW91c2UnIGNvbnRhaW5zICduJworCQkJb3IgJ2EnLiAge25vdCBpbiBWaX0KKworWW91IGNhbiB1c2UgdGhlc2UgY29tbWFuZHMgdG8gY29weSB0ZXh0IGZyb20gb25lIHBsYWNlIHRvIGFub3RoZXIuICBEbyB0aGlzCitieSBmaXJzdCBnZXR0aW5nIHRoZSB0ZXh0IGludG8gYSByZWdpc3RlciB3aXRoIGEgeWFuaywgZGVsZXRlIG9yIGNoYW5nZQorY29tbWFuZCwgdGhlbiBpbnNlcnRpbmcgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIHdpdGggYSBwdXQgY29tbWFuZC4gIFlvdSBjYW4KK2Fsc28gdXNlIHRoZXNlIGNvbW1hbmRzIHRvIG1vdmUgdGV4dCBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIsIGJlY2F1c2UgVmltCitwcmVzZXJ2ZXMgYWxsIHJlZ2lzdGVycyB3aGVuIGNoYW5naW5nIGJ1ZmZlcnMgKHRoZSBDVFJMLV4gY29tbWFuZCBpcyBhIHF1aWNrCit3YXkgdG8gdG9nZ2xlIGJldHdlZW4gdHdvIGZpbGVzKS4KKworCQkJCSpsaW5ld2lzZS1yZWdpc3RlciogKmNoYXJhY3Rlcndpc2UtcmVnaXN0ZXIqCitZb3UgY2FuIHJlcGVhdCB0aGUgcHV0IGNvbW1hbmRzIHdpdGggIi4iIChleGNlcHQgZm9yIDpwdXQpIGFuZCB1bmRvIHRoZW0uICBJZgordGhlIGNvbW1hbmQgdGhhdCB3YXMgdXNlZCB0byBnZXQgdGhlIHRleHQgaW50byB0aGUgcmVnaXN0ZXIgd2FzIHxsaW5ld2lzZXwsCitWaW0gaW5zZXJ0cyB0aGUgdGV4dCBiZWxvdyAoInAiKSBvciBhYm92ZSAoIlAiKSB0aGUgbGluZSB3aGVyZSB0aGUgY3Vyc29yIGlzLgorT3RoZXJ3aXNlIFZpbSBpbnNlcnRzIHRoZSB0ZXh0IGFmdGVyICgicCIpIG9yIGJlZm9yZSAoIlAiKSB0aGUgY3Vyc29yLiAgV2l0aAordGhlICI6cHV0IiBjb21tYW5kLCBWaW0gYWx3YXlzIGluc2VydHMgdGhlIHRleHQgaW4gdGhlIG5leHQgbGluZS4gIFlvdSBjYW4KK2V4Y2hhbmdlIHR3byBjaGFyYWN0ZXJzIHdpdGggdGhlIGNvbW1hbmQgc2VxdWVuY2UgInhwIi4gIFlvdSBjYW4gZXhjaGFuZ2UgdHdvCitsaW5lcyB3aXRoIHRoZSBjb21tYW5kIHNlcXVlbmNlICJkZHAiLiAgWW91IGNhbiBleGNoYW5nZSB0d28gd29yZHMgd2l0aCB0aGUKK2NvbW1hbmQgc2VxdWVuY2UgImRlZXAiIChzdGFydCB3aXRoIHRoZSBjdXJzb3IgaW4gdGhlIGJsYW5rIHNwYWNlIGJlZm9yZSB0aGUKK2ZpcnN0IHdvcmQpLiAgWW91IGNhbiB1c2UgdGhlICInXSIgb3IgImBdIiBjb21tYW5kIGFmdGVyIHRoZSBwdXQgY29tbWFuZCB0bworbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGluc2VydGVkIHRleHQsIG9yIHVzZSAiJ1siIG9yICJgWyIgdG8gbW92ZQordGhlIGN1cnNvciB0byB0aGUgc3RhcnQuCisKKwkJCQkJCSpwdXQtVmlzdWFsLW1vZGUqICp2X3AqICp2X1AqCitXaGVuIHVzaW5nIGEgcHV0IGNvbW1hbmQgbGlrZSB8cHwgb3IgfFB8IGluIFZpc3VhbCBtb2RlLCBWaW0gd2lsbCB0cnkgdG8KK3JlcGxhY2UgdGhlIHNlbGVjdGVkIHRleHQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVyLiAgV2hldGhlciB0aGlzCit3b3JrcyB3ZWxsIGRlcGVuZHMgb24gdGhlIHR5cGUgb2Ygc2VsZWN0aW9uIGFuZCB0aGUgdHlwZSBvZiB0aGUgdGV4dCBpbiB0aGUKK3JlZ2lzdGVyLiAgV2l0aCBibG9ja3dpc2Ugc2VsZWN0aW9uIGl0IGFsc28gZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sKK2FuZCB3aGV0aGVyIHRoZSBjb3JuZXJzIGFyZSBvbiBhbiBleGlzdGluZyBjaGFyYWN0ZXIuIChpbXBsZW1lbnRhdGlvbiBkZXRhaWw6CitpdCBhY3R1YWxseSB3b3JrcyBieSBmaXJzdCBwdXR0aW5nIHRoZSByZWdpc3RlciBhZnRlciB0aGUgc2VsZWN0aW9uIGFuZCB0aGVuCitkZWxldGluZyB0aGUgc2VsZWN0aW9uKS4KKworCQkJCQkJCSpibG9ja3dpc2UtcmVnaXN0ZXIqCitJZiB5b3UgdXNlIGEgYmxvY2t3aXNlIFZpc3VhbCBtb2RlIGNvbW1hbmQgdG8gZ2V0IHRoZSB0ZXh0IGludG8gdGhlIHJlZ2lzdGVyLAordGhlIGJsb2NrIG9mIHRleHQgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUgKCJQIikgb3IgYWZ0ZXIgKCJwIikgdGhlIGN1cnNvcgorY29sdW1uIGluIHRoZSBjdXJyZW50IGFuZCBuZXh0IGxpbmVzLiAgVmltIG1ha2VzIHRoZSB3aG9sZSBibG9jayBvZiB0ZXh0IHN0YXJ0CitpbiB0aGUgc2FtZSBjb2x1bW4uICBUaHVzIHRoZSBpbnNlcnRlZCB0ZXh0IGxvb2tzIHRoZSBzYW1lIGFzIHdoZW4gaXQgd2FzCit5YW5rZWQgb3IgZGVsZXRlZC4gIFZpbSBtYXkgcmVwbGFjZSBzb21lIDxUYWI+IGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMgdG8gbWFrZQordGhpcyBoYXBwZW4uICBIb3dldmVyLCBpZiB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGlzIG5vdCBhIG11bHRpcGxlIG9mIGEgPFRhYj4KK3dpZHRoIGFuZCB0aGUgdGV4dCBhZnRlciB0aGUgaW5zZXJ0ZWQgYmxvY2sgY29udGFpbnMgPFRhYj5zLCB0aGF0IHRleHQgbWF5IGJlCittaXNhbGlnbmVkLgorCitOb3RlIHRoYXQgYWZ0ZXIgYSBjaGFyYWN0ZXJ3aXNlIHlhbmsgY29tbWFuZCwgVmltIGxlYXZlcyB0aGUgY3Vyc29yIG9uIHRoZQorZmlyc3QgeWFua2VkIGNoYXJhY3RlciB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuICBUaGlzIG1lYW5zCit0aGF0ICJ5bCIgZG9lc24ndCBtb3ZlIHRoZSBjdXJzb3IsIGJ1dCAieWgiIG1vdmVzIHRoZSBjdXJzb3Igb25lIGNoYXJhY3RlcgorbGVmdC4KK1JhdGlvbmFsZToJSW4gVmkgdGhlICJ5IiBjb21tYW5kIGZvbGxvd2VkIGJ5IGEgYmFja3dhcmRzIG1vdGlvbiB3b3VsZAorCQlzb21ldGltZXMgbm90IG1vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgeWFua2VkIGNoYXJhY3RlciwKKwkJYmVjYXVzZSByZWRpc3BsYXlpbmcgd2FzIHNraXBwZWQuICBJbiBWaW0gaXQgYWx3YXlzIG1vdmVzIHRvCisJCXRoZSBmaXJzdCBjaGFyYWN0ZXIsIGFzIHNwZWNpZmllZCBieSBQb3NpeC4KK1dpdGggYSBsaW5ld2lzZSB5YW5rIGNvbW1hbmQgdGhlIGN1cnNvciBpcyBwdXQgaW4gdGhlIGZpcnN0IGxpbmUsIGJ1dCB0aGUKK2NvbHVtbiBpcyB1bm1vZGlmaWVkLCB0aHVzIGl0IG1heSBub3QgYmUgb24gdGhlIGZpcnN0IHlhbmtlZCBjaGFyYWN0ZXIuCisKK1RoZXJlIGFyZSBuaW5lIHR5cGVzIG9mIHJlZ2lzdGVyczoJCQkqcmVnaXN0ZXJzKiAqRTM1NCoKKzEuIFRoZSB1bm5hbWVkIHJlZ2lzdGVyICIiCisyLiAxMCBudW1iZXJlZCByZWdpc3RlcnMgIjAgdG8gIjkKKzMuIFRoZSBzbWFsbCBkZWxldGUgcmVnaXN0ZXIgIi0KKzQuIDI2IG5hbWVkIHJlZ2lzdGVycyAiYSB0byAieiBvciAiQSB0byAiWgorNS4gZm91ciByZWFkLW9ubHkgcmVnaXN0ZXJzICI6LCAiLiwgIiUgYW5kICIjCis2LiB0aGUgZXhwcmVzc2lvbiByZWdpc3RlciAiPQorNy4gVGhlIHNlbGVjdGlvbiBhbmQgZHJvcCByZWdpc3RlcnMgIiosICIrIGFuZCAifiAKKzguIFRoZSBibGFjayBob2xlIHJlZ2lzdGVyICJfCis5LiBMYXN0IHNlYXJjaCBwYXR0ZXJuIHJlZ2lzdGVyICIvCisKKzEuIFVubmFtZWQgcmVnaXN0ZXIgIiIJCQkJKnF1b3RlX3F1b3RlKiAqcXVvdGVxdW90ZSoKK1ZpbSBmaWxscyB0aGlzIHJlZ2lzdGVyIHdpdGggdGV4dCBkZWxldGVkIHdpdGggdGhlICJkIiwgImMiLCAicyIsICJ4IiBjb21tYW5kcworb3IgY29waWVkIHdpdGggdGhlIHlhbmsgInkiIGNvbW1hbmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgYSBzcGVjaWZpYworcmVnaXN0ZXIgd2FzIHVzZWQgKGUuZy4gICJ4ZGQpLiAgQW4gZXhjZXB0aW9uIGlzIHRoZSAnXycgcmVnaXN0ZXI6ICJfZGQgZG9lcworbm90IHN0b3JlIHRoZSBkZWxldGVkIHRleHQgaW4gYW55IHJlZ2lzdGVyLiAgVmltIHVzZXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMKK3JlZ2lzdGVyIGZvciBhbnkgcHV0IGNvbW1hbmQgKHAgb3IgUCkgd2hpY2ggZG9lcyBub3Qgc3BlY2lmeSBhIHJlZ2lzdGVyLgorQWRkaXRpb25hbGx5IHlvdSBjYW4gYWNjZXNzIGl0IHdpdGggdGhlIG5hbWUgJyInLiAgVGhpcyBtZWFucyB5b3UgaGF2ZSB0byB0eXBlCit0d28gZG91YmxlIHF1b3Rlcy4gIFdyaXRpbmcgdG8gdGhlICIiIHJlZ2lzdGVyIHdyaXRlcyB0byByZWdpc3RlciAiMC4KK3tWaTogcmVnaXN0ZXIgY29udGVudHMgYXJlIGxvc3Qgd2hlbiBjaGFuZ2luZyBmaWxlcywgbm8gJyInfQorCisyLiBOdW1iZXJlZCByZWdpc3RlcnMgIjAgdG8gIjkJCSpxdW90ZV9udW1iZXIqICpxdW90ZTAqCSpxdW90ZTEqCisJCQkJCSpxdW90ZTIqICpxdW90ZTMqICpxdW90ZTQqICpxdW90ZTkqCitWaW0gZmlsbHMgdGhlc2UgcmVnaXN0ZXJzIHdpdGggdGV4dCBmcm9tIHlhbmsgYW5kIGRlbGV0ZSBjb21tYW5kcy4KKyAgIE51bWJlcmVkIHJlZ2lzdGVyIDAgY29udGFpbnMgdGhlIHRleHQgZnJvbSB0aGUgbW9zdCByZWNlbnQgeWFuayBjb21tYW5kLAordW5sZXNzIHRoZSBjb21tYW5kIHNwZWNpZmllZCBhbm90aGVyIHJlZ2lzdGVyIHdpdGggWyJ4XS4KKyAgIE51bWJlcmVkIHJlZ2lzdGVyIDEgY29udGFpbnMgdGhlIHRleHQgZGVsZXRlZCBieSB0aGUgbW9zdCByZWNlbnQgZGVsZXRlIG9yCitjaGFuZ2UgY29tbWFuZCwgdW5sZXNzIHRoZSBjb21tYW5kIHNwZWNpZmllZCBhbm90aGVyIHJlZ2lzdGVyIG9yIHRoZSB0ZXh0IGlzCitsZXNzIHRoYW4gb25lIGxpbmUgKHRoZSBzbWFsbCBkZWxldGUgcmVnaXN0ZXIgaXMgdXNlZCB0aGVuKS4gIEFuIGV4Y2VwdGlvbiBpcworbWFkZSBmb3IgdGhlc2UgY29tbWFuZHM6IHwlfCwgfCh8LCB8KXwsIHxgfCwgfC98LCB8P3wsIHxufCwgfE58LCB8e3wgYW5kIHx9fC4KK1JlZ2lzdGVyICIxIGlzIGFsd2F5cyB1c2VkIHRoZW4gKHRoaXMgaXMgVmkgY29tcGF0aWJsZSkuICBUaGUgIi0gcmVnaXN0ZXIgaXMKK3VzZWQgYXMgd2VsbCBpZiB0aGUgZGVsZXRlIGlzIHdpdGhpbiBhIGxpbmUuCisgICBXaXRoIGVhY2ggc3VjY2Vzc2l2ZSBkZWxldGlvbiBvciBjaGFuZ2UsIFZpbSBzaGlmdHMgdGhlIHByZXZpb3VzIGNvbnRlbnRzCitvZiByZWdpc3RlciAxIGludG8gcmVnaXN0ZXIgMiwgMiBpbnRvIDMsIGFuZCBzbyBmb3J0aCwgbG9zaW5nIHRoZSBwcmV2aW91cworY29udGVudHMgb2YgcmVnaXN0ZXIgOS4KK3tWaTogbnVtYmVyZWQgcmVnaXN0ZXIgY29udGVudHMgYXJlIGxvc3Qgd2hlbiBjaGFuZ2luZyBmaWxlczsgcmVnaXN0ZXIgMCBkb2VzCitub3QgZXhpc3R9CisKKzMuIFNtYWxsIGRlbGV0ZSByZWdpc3RlciAiLQkJCQkqcXVvdGVfLSogKnF1b3RlLSoKK1RoaXMgcmVnaXN0ZXIgY29udGFpbnMgdGV4dCBmcm9tIGNvbW1hbmRzIHRoYXQgZGVsZXRlIGxlc3MgdGhhbiBvbmUgbGluZSwKK2V4Y2VwdCB3aGVuIHRoZSBjb21tYW5kIHNwZWNpZmllcyBhIHJlZ2lzdGVyIHdpdGggWyJ4XS4KK3tub3QgaW4gVml9CisKKzQuIE5hbWVkIHJlZ2lzdGVycyAiYSB0byAieiBvciAiQSB0byAiWgkJCSpxdW90ZV9hbHBoYSogKnF1b3RlYSoKK1ZpbSBmaWxscyB0aGVzZSByZWdpc3RlcnMgb25seSB3aGVuIHlvdSBzYXkgc28uICBTcGVjaWZ5IHRoZW0gYXMgbG93ZXJjYXNlCitsZXR0ZXJzIHRvIHJlcGxhY2UgdGhlaXIgcHJldmlvdXMgY29udGVudHMgb3IgYXMgdXBwZXJjYXNlIGxldHRlcnMgdG8gYXBwZW5kCit0byB0aGVpciBwcmV2aW91cyBjb250ZW50cy4KKworNS4gUmVhZC1vbmx5IHJlZ2lzdGVycyAiOiwgIi4sICIlIGFuZCAiIworVGhlc2UgYXJlICclJywgJyMnLCAnOicgYW5kICcuJy4gIFlvdSBjYW4gdXNlIHRoZW0gb25seSB3aXRoIHRoZSAicCIsICJQIiwKK2FuZCAiOnB1dCIgY29tbWFuZHMgYW5kIHdpdGggQ1RSTC1SLiAge25vdCBpbiBWaX0KKwkJCQkJCSpxdW90ZV8uKiAqcXVvdGUuKiAqRTI5KgorCSIuCUNvbnRhaW5zIHRoZSBsYXN0IGluc2VydGVkIHRleHQgKHRoZSBzYW1lIGFzIHdoYXQgaXMgaW5zZXJ0ZWQKKwkJd2l0aCB0aGUgaW5zZXJ0IG1vZGUgY29tbWFuZHMgQ1RSTC1BIGFuZCBDVFJMLUApLiAgTm90ZTogdGhpcworCQlkb2Vzbid0IHdvcmsgd2l0aCBDVFJMLVIgb24gdGhlIGNvbW1hbmQtbGluZS4gIEl0IHdvcmtzIGEgYml0CisJCWRpZmZlcmVudGx5LCBsaWtlIGluc2VydGluZyB0aGUgdGV4dCBpbnN0ZWFkIG9mIHB1dHRpbmcgaXQKKwkJKCd0ZXh0d2lkdGgnIGFuZCBvdGhlciBvcHRpb25zIGFmZmVjdCB3aGF0IGlzIGluc2VydGVkKS4KKwkJCQkJCQkqcXVvdGVfJSogKnF1b3RlJSoKKwkiJQlDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLgorCQkJCQkJCSpxdW90ZV8jKiAqcXVvdGUjKgorCSIjCUNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBhbHRlcm5hdGUgZmlsZS4KKwkJCQkJCSpxdW90ZV86KiAqcXVvdGU6KiAqRTMwKgorCSI6CUNvbnRhaW5zIHRoZSBtb3N0IHJlY2VudCBleGVjdXRlZCBjb21tYW5kLWxpbmUuICBFeGFtcGxlOiBVc2UKKwkJIkA6IiB0byByZXBlYXQgdGhlIHByZXZpb3VzIGNvbW1hbmQtbGluZSBjb21tYW5kLgorCQlUaGUgY29tbWFuZC1saW5lIGlzIG9ubHkgc3RvcmVkIGluIHRoaXMgcmVnaXN0ZXIgd2hlbiBhdCBsZWFzdAorCQlvbmUgY2hhcmFjdGVyIG9mIGl0IHdhcyB0eXBlZC4gIFRodXMgaXQgcmVtYWlucyB1bmNoYW5nZWQgaWYKKwkJdGhlIGNvbW1hbmQgd2FzIGNvbXBsZXRlbHkgZnJvbSBhIG1hcHBpbmcuCisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjbWRsaW5lX2hpc3R8CisJCWZlYXR1cmV9CisKKzYuIEV4cHJlc3Npb24gcmVnaXN0ZXIgIj0JCQkJKnF1b3RlXz0qICpxdW90ZT0qCitUaGlzIGlzIG5vdCByZWFsbHkgYSByZWdpc3RlciB0aGF0IHN0b3JlcyB0ZXh0LCBidXQgaXMgYSB3YXkgdG8gdXNlIGFuCitleHByZXNzaW9uIGluIGNvbW1hbmRzIHdoaWNoIHVzZSBhIHJlZ2lzdGVyLiAgVGhlIGV4cHJlc3Npb24gcmVnaXN0ZXIgaXMKK3JlYWQtb25seTsgeW91IGNhbm5vdCBwdXQgdGV4dCBpbnRvIGl0LiAgQWZ0ZXIgdGhlICc9JywgdGhlIGN1cnNvciBtb3ZlcyB0bwordGhlIGNvbW1hbmQtbGluZSwgd2hlcmUgeW91IGNhbiBlbnRlciBhbnkgZXhwcmVzc2lvbiAoc2VlIHxleHByZXNzaW9ufCkuICBBbGwKK25vcm1hbCBjb21tYW5kLWxpbmUgZWRpdGluZyBjb21tYW5kcyBhcmUgYXZhaWxhYmxlLCBpbmNsdWRpbmcgYSBzcGVjaWFsCitoaXN0b3J5IGZvciBleHByZXNzaW9ucy4gIFdoZW4geW91IGVuZCB0aGUgY29tbWFuZC1saW5lIGJ5IHR5cGluZyA8Q1I+LCBWaW0KK2NvbXB1dGVzIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24uICBJZiB5b3UgZW5kIGl0IHdpdGggPEVzYz4sIFZpbSBhYmFuZG9ucwordGhlIGV4cHJlc3Npb24uICBJZiB5b3UgZG8gbm90IGVudGVyIGFuIGV4cHJlc3Npb24sIFZpbSB1c2VzIHRoZSBwcmV2aW91cworZXhwcmVzc2lvbiAobGlrZSB3aXRoIHRoZSAiLyIgY29tbWFuZCkuICBJZiB0aGUgIj0gcmVnaXN0ZXIgaXMgdXNlZCBmb3IgdGhlCisicCIgY29tbWFuZCwgdGhlIHN0cmluZyBpcyBzcGxpdCB1cCBhdCA8Tkw+IGNoYXJhY3RlcnMuICBJZiB0aGUgc3RyaW5nIGVuZHMgaW4KK2EgPE5MPiwgaXQgaXMgcmVnYXJkZWQgYXMgYSBsaW5ld2lzZSByZWdpc3Rlci4gIHtub3QgaW4gVml9CisKKzcuIFNlbGVjdGlvbiBhbmQgZHJvcCByZWdpc3RlcnMgIiosICIrIGFuZCAifiAKK1VzZSB0aGVzZSByZWdpc3RlciBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyB0aGUgc2VsZWN0ZWQgdGV4dCBmb3IgdGhlIEdVSS4KK1NlZSB8cXVvdGVzdGFyfCBhbmQgfHF1b3RlcGx1c3wuICBXaGVuIHRoZSBjbGlwYm9hcmQgaXMgbm90IGF2YWlsYWJsZSBvciBub3QKK3dvcmtpbmcsIHRoZSB1bm5hbWVkIHJlZ2lzdGVyIGlzIHVzZWQgaW5zdGVhZC4gIHtub3QgaW4gVml9CisKK05vdGUgdGhhdCB0aGVyZSBpcyBvbmx5IGEgZGlzdGluY3Rpb24gYmV0d2VlbiAiKiBhbmQgIisgZm9yIFgxMSBzeXN0ZW1zLiAgRm9yCithbiBleHBsYW5hdGlvbiBvZiB0aGUgZGlmZmVyZW5jZSwgc2VlIHx4MTEtc2VsZWN0aW9ufC4gIFVuZGVyIE1TLVdpbmRvd3MsIHVzZQorb2YgIiogYW5kICIrIGlzIGFjdHVhbGx5IHN5bm9ueW1vdXMgYW5kIHJlZmVycyB0byB0aGUgfGd1aS1jbGlwYm9hcmR8LgorCisJCQkJCQkqcXVvdGVffiogKnF1b3RlfiogKjxEcm9wPioKK1RoZSByZWFkLW9ubHkgIn4gcmVnaXN0ZXIgc3RvcmVzIHRoZSBkcm9wcGVkIHRleHQgZnJvbSB0aGUgbGFzdCBkcmFnJ24nZHJvcAorb3BlcmF0aW9uLiAgV2hlbiBzb21ldGhpbmcgaGFzIGJlZW4gZHJvcHBlZCBvbnRvIFZpbSwgdGhlICJ+IHJlZ2lzdGVyIGlzCitmaWxsZWQgaW4gYW5kIHRoZSA8RHJvcD4gcHNldWRvIGtleSBpcyBzZW50IGZvciBub3RpZmljYXRpb24uICBZb3UgY2FuIHJlbWFwCit0aGlzIGtleSBpZiB5b3Ugd2FudDsgdGhlIGRlZmF1bHQgYWN0aW9uIChmb3IgYWxsIG1vZGVzKSBpcyB0byBpbnNlcnQgdGhlCitjb250ZW50cyBvZiB0aGUgIn4gcmVnaXN0ZXIgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4gIHtub3QgaW4gVml9Cit7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2RuZHwgZmVhdHVyZSwgY3VyZW50bHkgb25seSB3aXRoIHRoZQorR1RLIEdVSX0KKworTm90ZTogVGhlICJ+IHJlZ2lzdGVyIGlzIG9ubHkgdXNlZCB3aGVuIGRyb3BwaW5nIHBsYWluIHRleHQgb250byBWaW0uCitEcmFnJ24nZHJvcCBvZiBVUkkgbGlzdHMgaXMgaGFuZGxlZCBpbnRlcm5hbGx5LgorCis4LiBCbGFjayBob2xlIHJlZ2lzdGVyICJfCQkJCSpxdW90ZV8qCitXaGVuIHdyaXRpbmcgdG8gdGhpcyByZWdpc3Rlciwgbm90aGluZyBoYXBwZW5zLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBkZWxldGUKK3RleHQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG5vcm1hbCByZWdpc3RlcnMuICBXaGVuIHJlYWRpbmcgZnJvbSB0aGlzIHJlZ2lzdGVyLAorbm90aGluZyBpcyByZXR1cm5lZC4gIHtub3QgaW4gVml9CisKKzkuIExhc3Qgc2VhcmNoIHBhdHRlcm4gcmVnaXN0ZXIJIi8JCQkqcXVvdGVfLyogKnF1b3RlLyoKK0NvbnRhaW5zIHRoZSBtb3N0IHJlY2VudCBzZWFyY2gtcGF0dGVybi4gIFRoaXMgaXMgdXNlZCBmb3IgIm4iIGFuZCAnaGxzZWFyY2gnLgorSXQgaXMgd3JpdGFibGUgd2l0aCAiOmxldCIsIHlvdSBjYW4gY2hhbmdlIGl0IHRvIGhhdmUgJ2hsc2VhcmNoJyBoaWdobGlnaHQKK290aGVyIG1hdGNoZXMgd2l0aG91dCBhY3R1YWxseSBzZWFyY2hpbmcuICBZb3UgY2FuJ3QgeWFuayBvciBkZWxldGUgaW50byB0aGlzCityZWdpc3Rlci4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqQC8qCitZb3UgY2FuIHdyaXRlIHRvIGEgcmVnaXN0ZXIgd2l0aCBhICI6bGV0IiBjb21tYW5kIHw6bGV0LUB8LiAgRXhhbXBsZTogPgorCTpsZXQgQC8gPSAidGhlIgorCitJZiB5b3UgdXNlIGEgcHV0IGNvbW1hbmQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcmVnaXN0ZXIsIFZpbSB1c2VzIHRoZSByZWdpc3RlcgordGhhdCB3YXMgbGFzdCBmaWxsZWQgKHRoaXMgaXMgYWxzbyB0aGUgY29udGVudHMgb2YgdGhlIHVubmFtZWQgcmVnaXN0ZXIpLiAgSWYKK3lvdSBhcmUgY29uZnVzZWQsIHVzZSB0aGUgIjpkaXMiIGNvbW1hbmQgdG8gZmluZCBvdXQgd2hhdCBWaW0gd2lsbCBwdXQgKHRoaXMKK2NvbW1hbmQgZGlzcGxheXMgYWxsIG5hbWVkIGFuZCBudW1iZXJlZCByZWdpc3RlcnM7IHRoZSB1bm5hbWVkIHJlZ2lzdGVyIGlzCitsYWJlbGxlZCAnIicpLgorCitUaGUgbmV4dCB0aHJlZSBjb21tYW5kcyBhbHdheXMgd29yayBvbiB3aG9sZSBsaW5lcy4KKworOltyYW5nZV1jb1tweV0ge2FkZHJlc3N9CQkJCSo6Y28qICo6Y29weSoKKwkJCUNvcHkgdGhlIGxpbmVzIGdpdmVuIGJ5IFtyYW5nZV0gdG8gYmVsb3cgdGhlIGxpbmUKKwkJCWdpdmVuIGJ5IHthZGRyZXNzfS4KKworCQkJCQkJCSo6dCoKKzp0CQkJU3lub255bSBmb3IgY29weS4KKworOltyYW5nZV1tW292ZV0ge2FkZHJlc3N9CQkJKjptKiAqOm1vKiAqOm1vdmUqICpFMTM0KgorCQkJTW92ZSB0aGUgbGluZXMgZ2l2ZW4gYnkgW3JhbmdlXSB0byBiZWxvdyB0aGUgbGluZQorCQkJZ2l2ZW4gYnkge2FkZHJlc3N9LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIEZvcm1hdHRpbmcgdGV4dAkJCQkJKmZvcm1hdHRpbmcqCisKKzpbcmFuZ2VdY2VbbnRlcl0gW3dpZHRoXQkJCQkqOmNlKiAqOmNlbnRlcioKKwkJCUNlbnRlciBsaW5lcyBpbiBbcmFuZ2VdIGJldHdlZW4gW3dpZHRoXSBjb2x1bW5zCisJCQkoZGVmYXVsdCAndGV4dHdpZHRoJyBvciA4MCB3aGVuICd0ZXh0d2lkdGgnIGlzIDApLgorCQkJe25vdCBpbiBWaX0KKwkJCU5vdCBhdmFpbGFibGUgd2hlbiB8K2V4X2V4dHJhfCBmZWF0dXJlIHdhcyBkaXNhYmxlZCBhdAorCQkJY29tcGlsZSB0aW1lLgorCis6W3JhbmdlXXJpW2dodF0gW3dpZHRoXQkJCQkJKjpyaSogKjpyaWdodCoKKwkJCVJpZ2h0LWFsaWduIGxpbmVzIGluIFtyYW5nZV0gYXQgW3dpZHRoXSBjb2x1bW5zCisJCQkoZGVmYXVsdCAndGV4dHdpZHRoJyBvciA4MCB3aGVuICd0ZXh0d2lkdGgnIGlzIDApLgorCQkJe25vdCBpbiBWaX0KKwkJCU5vdCBhdmFpbGFibGUgd2hlbiB8K2V4X2V4dHJhfCBmZWF0dXJlIHdhcyBkaXNhYmxlZCBhdAorCQkJY29tcGlsZSB0aW1lLgorCisJCQkJCQkJKjpsZSogKjpsZWZ0KgorOltyYW5nZV1sZVtmdF0gW2luZGVudF0KKwkJCUxlZnQtYWxpZ24gbGluZXMgaW4gW3JhbmdlXS4gIFNldHMgdGhlIGluZGVudCBpbiB0aGUKKwkJCWxpbmVzIHRvIFtpbmRlbnRdIChkZWZhdWx0IDApLiAge25vdCBpbiBWaX0KKwkJCU5vdCBhdmFpbGFibGUgd2hlbiB8K2V4X2V4dHJhfCBmZWF0dXJlIHdhcyBkaXNhYmxlZCBhdAorCQkJY29tcGlsZSB0aW1lLgorCisJCQkJCQkJKmdxKgorZ3F7bW90aW9ufQkJRm9ybWF0IHRoZSBsaW5lcyB0aGF0IHttb3Rpb259IG1vdmVzIG92ZXIuICBUaGUKKwkJCSd0ZXh0d2lkdGgnIG9wdGlvbiBjb250cm9scyB0aGUgbGVuZ3RoIG9mIGVhY2gKKwkJCWZvcm1hdHRlZCBsaW5lIChzZWUgYmVsb3cpLiAgSWYgdGhlICd0ZXh0d2lkdGgnIG9wdGlvbgorCQkJaXMgMCwgdGhlIGZvcm1hdHRlZCBsaW5lIGxlbmd0aCBpcyB0aGUgc2NyZWVuIHdpZHRoCisJCQkod2l0aCBhIG1heGltdW0gd2lkdGggb2YgNzkpLiAge25vdCBpbiBWaX0KKwkJCVRoZSAnZm9ybWF0b3B0aW9ucycgb3B0aW9uIGNvbnRyb2xzIHRoZSB0eXBlIG9mCisJCQlmb3JtYXR0aW5nIHxmby10YWJsZXwuCisJCQlOT1RFOiBUaGUgIlEiIGNvbW1hbmQgZm9ybWVybHkgcGVyZm9ybWVkIHRoaXMKKwkJCWZ1bmN0aW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlICJRIiBmb3IKKwkJCWZvcm1hdHRpbmcsIHVzZSB0aGlzIG1hcHBpbmc6ID4KKwkJCQk6bm5vcmVtYXAgUSBncQorCitncWdxCQkJCQkJCSpncWdxKiAqZ3FxKgorZ3FxCQkJRm9ybWF0IHRoZSBjdXJyZW50IGxpbmUuICB7bm90IGluIFZpfQorCisJCQkJCQkJKnZfZ3EqCit7VmlzdWFsfWdxCQlGb3JtYXQgdGhlIGhpZ2hsaWdodGVkIHRleHQuICAoZm9yIHtWaXN1YWx9IHNlZQorCQkJfFZpc3VhbC1tb2RlfCkuICB7bm90IGluIFZpfQorCisJCQkJCQkJKmd3KgorZ3d7bW90aW9ufQkJRm9ybWF0IHRoZSBsaW5lcyB0aGF0IHttb3Rpb259IG1vdmVzIG92ZXIuICBTaW1pbGFyIHRvCisJCQl8Z3F8IGJ1dCBwdXRzIHRoZSBjdXJzb3IgYmFjayBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbgorCQkJdGhlIHRleHQuICBIb3dldmVyLCAnZm9ybWF0cHJnJyBpcyBub3QgdXNlZC4KKwkJCXtub3QgaW4gVml9CisKK0V4YW1wbGU6IFRvIGZvcm1hdCB0aGUgY3VycmVudCBwYXJhZ3JhcGggdXNlOgkJCSpncWFwKiAgPgorCWdxYXAKKworVGhlICJncSIgY29tbWFuZCBsZWF2ZXMgdGhlIGN1cnNvciBpbiB0aGUgbGluZSB3aGVyZSB0aGUgbW90aW9uIGNvbW1hbmQgdGFrZXMKK3RoZSBjdXJzb3IuICBUaGlzIGFsbG93cyB5b3UgdG8gcmVwZWF0IGZvcm1hdHRpbmcgcmVwZWF0ZWQgd2l0aCAiLiIuICBUaGlzCit3b3JrcyB3ZWxsIHdpdGggImdxaiIgKGZvcm1hdCBjdXJyZW50IGFuZCBuZXh0IGxpbmUpIGFuZCAiZ3F9IiAoZm9ybWF0IHVudGlsCitlbmQgb2YgcGFyYWdyYXBoKS4gIE5vdGU6IFdoZW4gJ2Zvcm1hdHByZycgaXMgc2V0LCAiZ3EiIGxlYXZlcyB0aGUgY3Vyc29yIG9uCit0aGUgZmlyc3QgZm9ybWF0dGVkIGxpbmUgKGFzIHdpdGggdXNpbmcgYSBmaWx0ZXIgY29tbWFuZCkuCisKK0lmIHlvdSB3YW50IHRvIGZvcm1hdCB0aGUgY3VycmVudCBwYXJhZ3JhcGggYW5kIGNvbnRpbnVlIHdoZXJlIHlvdSB3ZXJlLCB1c2U6ID4KKwlnd2FwCitJZiB5b3UgYWx3YXlzIHdhbnQgdG8ga2VlcCBwYXJhZ3JhcGhzIGZvcm1hdHRlZCB5b3UgbWF5IHdhbnQgdG8gYWRkIHRoZSAnYScKK2ZsYWcgdG8gJ2Zvcm1hdG9wdGlvbnMnLiAgU2VlIHxhdXRvLWZvcm1hdHwuCisKK0lmIHRoZSAnYXV0b2luZGVudCcgb3B0aW9uIGlzIG9uLCBWaW0gdXNlcyB0aGUgaW5kZW50IG9mIHRoZSBmaXJzdCBsaW5lIGZvcgordGhlIGZvbGxvd2luZyBsaW5lcy4KKworRm9ybWF0dGluZyBkb2VzIG5vdCBjaGFuZ2UgZW1wdHkgbGluZXMgKGJ1dCBpdCBkb2VzIGNoYW5nZSBsaW5lcyB3aXRoIG9ubHkKK3doaXRlIHNwYWNlISkuCisKK1RoZSAnam9pbnNwYWNlcycgb3B0aW9uIGlzIHVzZWQgd2hlbiBsaW5lcyBhcmUgam9pbmVkIHRvZ2V0aGVyLgorCitZb3UgY2FuIHNldCB0aGUgJ2Zvcm1hdHByZycgb3B0aW9uIHRvIHRoZSBuYW1lIG9mIGFuIGV4dGVybmFsIHByb2dyYW0gZm9yIFZpbQordG8gdXNlIGZvciB0ZXh0IGZvcm1hdHRpbmcuICBUaGUgJ3RleHR3aWR0aCcgYW5kIG90aGVyIG9wdGlvbnMgaGF2ZSBubyBlZmZlY3QKK29uIGZvcm1hdHRpbmcgYnkgYW4gZXh0ZXJuYWwgcHJvZ3JhbS4KKworCQkJCQkJCSpyaWdodC1qdXN0aWZ5KgorVGhlcmUgaXMgbm8gY29tbWFuZCBpbiBWaW0gdG8gcmlnaHQganVzdGlmeSB0ZXh0LiAgWW91IGNhbiBkbyBpdCB3aXRoCithbiBleHRlcm5hbCBjb21tYW5kLCBsaWtlICJwYXIiIChlLmcuOiAiIX1wYXIiIHRvIGZvcm1hdCB1bnRpbCB0aGUgZW5kIG9mIHRoZQorcGFyYWdyYXBoKSBvciBzZXQgJ2Zvcm1hdHByZycgdG8gInBhciIuCisKKwkJCQkJCQkqZm9ybWF0LWNvbW1lbnRzKgorVmltIGNhbiBmb3JtYXQgY29tbWVudHMgaW4gYSBzcGVjaWFsIHdheS4gIFZpbSByZWNvZ25pemVzIGEgY29tbWVudCBieSBhCitzcGVjaWZpYyBzdHJpbmcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIChpZ25vcmluZyB3aGl0ZSBzcGFjZSkuICBUaHJlZSB0eXBlcworb2YgY29tbWVudHMgY2FuIGJlIHVzZWQ6CisKKy0gQSBjb21tZW50IHN0cmluZyB0aGF0IHJlcGVhdHMgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggbGluZS4gIEFuIGV4YW1wbGUgaXMgdGhlCisgIHR5cGUgb2YgY29tbWVudCB1c2VkIGluIHNoZWxsIHNjcmlwdHMsIHN0YXJ0aW5nIHdpdGggIiMiLgorLSBBIGNvbW1lbnQgc3RyaW5nIHRoYXQgb2NjdXJzIG9ubHkgaW4gdGhlIGZpcnN0IGxpbmUsIG5vdCBpbiB0aGUgZm9sbG93aW5nCisgIGxpbmVzLiAgQW4gZXhhbXBsZSBpcyB0aGlzIGxpc3Qgd2l0aCBkYXNoZXMuCistIFRocmVlLXBpZWNlIGNvbW1lbnRzIHRoYXQgaGF2ZSBhIHN0YXJ0IHN0cmluZywgYW4gZW5kIHN0cmluZywgYW5kIG9wdGlvbmFsCisgIGxpbmVzIGluIGJldHdlZW4uICBUaGUgc3RyaW5ncyBmb3IgdGhlIHN0YXJ0LCBtaWRkbGUgYW5kIGVuZCBhcmUgZGlmZmVyZW50LgorICBBbiBleGFtcGxlIGlzIHRoZSBDLXN0eWxlIGNvbW1lbnQ6CisJLyoKKwkgKiB0aGlzIGlzIGEgQyBjb21tZW50CisJICovCisKK1RoZSAnY29tbWVudHMnIG9wdGlvbiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhcnRzLiAgRWFjaCBwYXJ0IGRlZmluZXMgYQordHlwZSBvZiBjb21tZW50IHN0cmluZy4gIEEgcGFydCBjb25zaXN0cyBvZjoKKwl7ZmxhZ3N9OntzdHJpbmd9CisKK3tzdHJpbmd9IGlzIHRoZSBsaXRlcmFsIHRleHQgdGhhdCBtdXN0IGFwcGVhci4KKwore2ZsYWdzfToKKyAgbglOZXN0ZWQgY29tbWVudC4gIE5lc3Rpbmcgd2l0aCBtaXhlZCBwYXJ0cyBpcyBhbGxvd2VkLiAgSWYgJ2NvbW1lbnRzJworCWlzICJuOiksbjo+IiBhIGxpbmUgc3RhcnRpbmcgd2l0aCAiPiApID4iIGlzIGEgY29tbWVudC4KKworICBiCUJsYW5rICg8U3BhY2U+LCA8VGFiPiBvciA8RU9MPikgcmVxdWlyZWQgYWZ0ZXIge3N0cmluZ30uCisKKyAgZglPbmx5IHRoZSBmaXJzdCBsaW5lIGhhcyB0aGUgY29tbWVudCBzdHJpbmcuICBEbyBub3QgcmVwZWF0IGNvbW1lbnQgb24KKwl0aGUgbmV4dCBsaW5lLCBidXQgcHJlc2VydmUgaW5kZW50YXRpb24gKGUuZy4sIGEgYnVsbGV0LWxpc3QpLgorCisgIHMJU3RhcnQgb2YgdGhyZWUtcGllY2UgY29tbWVudAorCisgIG0JTWlkZGxlIG9mIGEgdGhyZWUtcGllY2UgY29tbWVudAorCisgIGUJRW5kIG9mIGEgdGhyZWUtcGllY2UgY29tbWVudAorCisgIGwJTGVmdCBhZGp1c3QgbWlkZGxlIHdpdGggc3RhcnQgb3IgZW5kIChkZWZhdWx0KS4gIE9ubHkgcmVjb2duaXplZCB3aGVuCisJdXNlZCB0b2dldGhlciB3aXRoICdzJyBvciAnZScuCisKKyAgcglSaWdodCBhZGp1c3QgbWlkZGxlIHdpdGggc3RhcnQgb3IgZW5kLiAgT25seSByZWNvZ25pemVkIHdoZW4gdXNlZAorCXRvZ2V0aGVyIHdpdGggJ3MnIG9yICdlJy4KKworICBPCURvbid0IHVzZSB0aGlzIG9uZSBmb3IgdGhlICJPIiBjb21tYW5kLgorCisgIHgJQWxsb3dzIHRocmVlLXBpZWNlIGNvbW1lbnRzIHRvIGJlIGVuZGVkIGJ5IGp1c3QgdHlwaW5nIHRoZSBsYXN0CisJY2hhcmFjdGVyIG9mIHRoZSBlbmQtY29tbWVudCBzdHJpbmcgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiBhIG5ldworCWxpbmUsIHdoZW4gdGhlIG1pZGRsZS1jb21tZW50IHN0cmluZyBoYXMgYWxyZWFkeSBiZWVuIGluc2VydGVkCisJYXV0b21hdGljYWxseS4gIFNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCisgIHtkaWdpdHN9CisJV2hlbiB0b2dldGhlciB3aXRoICdzJyBvciAnZSc6IGFkZCBleHRyYSBpbmRlbnQgZm9yIHRoZSBtaWRkbGUgcGFydC4KKwlUaGlzIGNhbiBiZSB1c2VkIHRvIGxlZnQtYWxpZ24gdGhlIG1pZGRsZSBwYXJ0IHdpdGggdGhlIHN0YXJ0IG9yIGVuZAorCWFuZCB0aGVuIGFkZCBhbiBvZmZzZXQuCisKKyAgLXtkaWdpdHN9CisJTGlrZSB7ZGlnaXRzfSBidXQgcmVkdWNlIHRoZSBpbmRlbnQuICBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGVyZSBpcworCXNvbWUgaW5kZW50IGZvciB0aGUgc3RhcnQgb3IgZW5kIHBhcnQgdGhhdCBjYW4gYmUgcmVtb3ZlZC4KKworV2hlbiBhIHN0cmluZyBoYXMgbm9uZSBvZiB0aGUgJ2YnLCAncycsICdtJyBvciAnZScgZmxhZ3MsIFZpbSBhc3N1bWVzIHRoZQorY29tbWVudCBzdHJpbmcgcmVwZWF0cyBhdCB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLiAgVGhlIGZsYWdzIGZpZWxkIG1heSBiZQorZW1wdHkuCisKK0FueSBibGFuayBzcGFjZSBpbiB0aGUgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSB7c3RyaW5nfSBpcyBwYXJ0IG9mIHRoZQore3N0cmluZ30sIHNvIGRvIG5vdCBpbmNsdWRlIGxlYWRpbmcgb3IgdHJhaWxpbmcgYmxhbmtzIHVubGVzcyB0aGUgYmxhbmtzIGFyZSBhCityZXF1aXJlZCBwYXJ0IG9mIHRoZSBjb21tZW50IHN0cmluZy4KKworV2hlbiBvbmUgY29tbWVudCBsZWFkZXIgaXMgcGFydCBvZiBhbm90aGVyLCBzcGVjaWZ5IHRoZSBwYXJ0IGFmdGVyIHRoZSB3aG9sZS4KK0ZvciBleGFtcGxlLCB0byBpbmNsdWRlIGJvdGggIi0iIGFuZCAiLT4iLCB1c2UgPgorCTpzZXQgY29tbWVudHM9ZjotPixmOi0KKworQSB0aHJlZS1waWVjZSBjb21tZW50IG11c3QgYWx3YXlzIGJlIGdpdmVuIGFzIHN0YXJ0LG1pZGRsZSxlbmQsIHdpdGggbm8gb3RoZXIKK3BhcnRzIGluIGJldHdlZW4uICBBbiBleGFtcGxlIG9mIGEgdGhyZWUtcGllY2UgY29tbWVudCBpcyA+CisJc3I6LyosbWI6KixleDoqLworZm9yIEMtY29tbWVudHMuICBUbyBhdm9pZCByZWNvZ25pemluZyAiKnB0ciIgYXMgYSBjb21tZW50LCB0aGUgbWlkZGxlIHN0cmluZworaW5jbHVkZXMgdGhlICdiJyBmbGFnLiAgRm9yIHRocmVlLXBpZWNlIGNvbW1lbnRzLCBWaW0gY2hlY2tzIHRoZSB0ZXh0IGFmdGVyCit0aGUgc3RhcnQgYW5kIG1pZGRsZSBzdHJpbmdzIGZvciB0aGUgZW5kIHN0cmluZy4gIElmIFZpbSBmaW5kcyB0aGUgZW5kIHN0cmluZywKK3RoZSBjb21tZW50IGRvZXMgbm90IGNvbnRpbnVlIG9uIHRoZSBuZXh0IGxpbmUuICBUaHJlZS1waWVjZSBjb21tZW50cyBtdXN0CitoYXZlIGEgbWlkZGxlIHN0cmluZyBiZWNhdXNlIG90aGVyd2lzZSBWaW0gY2FuJ3QgcmVjb2duaXplIHRoZSBtaWRkbGUgbGluZXMuCisKK05vdGljZSB0aGUgdXNlIG9mIHRoZSAieCIgZmxhZyBpbiB0aGUgYWJvdmUgdGhyZWUtcGllY2UgY29tbWVudCBkZWZpbml0aW9uLgorV2hlbiB5b3UgaGl0IFJldHVybiBpbiBhIEMtY29tbWVudCwgVmltIHdpbGwgaW5zZXJ0IHRoZSBtaWRkbGUgY29tbWVudCBsZWFkZXIKK2ZvciB0aGUgbmV3IGxpbmUsIGUuZy4gIiAqICIuICBUbyBjbG9zZSB0aGlzIGNvbW1lbnQgeW91IGp1c3QgaGF2ZSB0byB0eXBlICIvIgorYmVmb3JlIHR5cGluZyBhbnl0aGluZyBlbHNlIG9uIHRoZSBuZXcgbGluZS4gIFRoaXMgd2lsbCByZXBsYWNlIHRoZQorbWlkZGxlLWNvbW1lbnQgbGVhZGVyIHdpdGggdGhlIGVuZC1jb21tZW50IGxlYWRlciwgbGVhdmluZyBqdXN0ICIgKi8iLiAgVGhlcmUKK2lzIG5vIG5lZWQgdG8gaGl0IEJhY2tTcGFjZSBmaXJzdC4KKworRXhhbXBsZXM6ID4KKyAgICJiOioiCUluY2x1ZGVzIGxpbmVzIHN0YXJ0aW5nIHdpdGggIioiLCBidXQgbm90IGlmIHRoZSAiKiIgaXMKKwkJZm9sbG93ZWQgYnkgYSBub24tYmxhbmsuICBUaGlzIGF2b2lkcyBhIHBvaW50ZXIgZGVyZWZlcmVuY2UKKwkJbGlrZSAiKnN0ciIgdG8gYmUgcmVjb2duaXplZCBhcyBhIGNvbW1lbnQuCisgICAibjo+IglJbmNsdWRlcyBhIGxpbmUgc3RhcnRpbmcgd2l0aCAiPiIsICI+PiIsICI+Pj4iLCBldGMuCisgICAiZmI6LSIJRm9ybWF0IGEgbGlzdCB0aGF0IHN0YXJ0cyB3aXRoICItICIuCisKK0J5IGRlZmF1bHQsICJiOiMiIGlzIGluY2x1ZGVkLiAgVGhpcyBtZWFucyB0aGF0IGEgbGluZSB0aGF0IHN0YXJ0cyB3aXRoCisiI2luY2x1ZGUiIGlzIG5vdCByZWNvZ25pemVkIGFzIGEgY29tbWVudCBsaW5lLiAgQnV0IGEgbGluZSB0aGF0IHN0YXJ0cyB3aXRoCisiIyBkZWZpbmUiIGlzIHJlY29nbml6ZWQuICBUaGlzIGlzIGEgY29tcHJvbWlzZS4KKworT2Z0ZW4gdGhlIGFsaWdubWVudCBjYW4gYmUgY2hhbmdlZCBmcm9tIHJpZ2h0IGFsaWdubWVudCB0byBhIGxlZnQgYWxpZ25tZW50Cit3aXRoIGFuIGFkZGl0aW9uYWwgc3BhY2UuICBGb3IgZXhhbXBsZSwgZm9yIEphdmFkb2MgY29tbWVudHMsIHRoaXMgY2FuIGJlCit1c2VkIChpbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIHRoZSBzcGFjZSB3aGVuIHVzaW5nICI6c2V0Iik6ID4KKwlzMTovKixtYjoqLGV4OiovCitOb3RlIHRoYXQgYW4gb2Zmc2V0IGlzIGluY2x1ZGVkIHdpdGggc3RhcnQsIHNvIHRoYXQgdGhlIG1pZGRsZSBwYXJ0IGlzIGxlZnQKK2FsaWduZWQgd2l0aCB0aGUgc3RhcnQgYW5kIHRoZW4gYW4gb2Zmc2V0IG9mIG9uZSBjaGFyYWN0ZXIgYWRkZWQuICBUaGlzIG1ha2VzCitpdCBwb3NzaWJsZSB0byBsZWZ0IGFsaWduIHRoZSBzdGFydCBhbmQgbWlkZGxlIGZvciB0aGlzIGNvbnN0cnVjdGlvbjogPgorCS8qKgorCSAqIGNvbW1lbnQKKwkgKi8KKwore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NvbW1lbnRzfCBmZWF0dXJlfQorCisJCQkJCQkJKmZvLXRhYmxlKgorWW91IGNhbiB1c2UgdGhlICdmb3JtYXRvcHRpb25zJyBvcHRpb24gIHRvIGluZmx1ZW5jZSBob3cgVmltIGZvcm1hdHMgdGV4dC4KKydmb3JtYXRvcHRpb25zJyBpcyBhIHN0cmluZyB0aGF0IGNhbiBjb250YWluIGFueSBvZiB0aGUgbGV0dGVycyBiZWxvdy4gIFRoZQorZGVmYXVsdCBzZXR0aW5nIGlzICJ0Y3EiLiAgWW91IGNhbiBzZXBhcmF0ZSB0aGUgb3B0aW9uIGxldHRlcnMgd2l0aCBjb21tYXMgZm9yCityZWFkYWJpbGl0eS4KKworbGV0dGVyCSBtZWFuaW5nIHdoZW4gcHJlc2VudCBpbiAnZm9ybWF0b3B0aW9ucycgICAgfgorCit0CUF1dG8td3JhcCB0ZXh0IHVzaW5nIHRleHR3aWR0aCAoZG9lcyBub3QgYXBwbHkgdG8gY29tbWVudHMpCitjCUF1dG8td3JhcCBjb21tZW50cyB1c2luZyB0ZXh0d2lkdGgsIGluc2VydGluZyB0aGUgY3VycmVudCBjb21tZW50CisJbGVhZGVyIGF1dG9tYXRpY2FsbHkuCityCUF1dG9tYXRpY2FsbHkgaW5zZXJ0IHRoZSBjdXJyZW50IGNvbW1lbnQgbGVhZGVyIGFmdGVyIGhpdHRpbmcKKwk8RW50ZXI+IGluIEluc2VydCBtb2RlLgorbwlBdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgY3VycmVudCBjb21tZW50IGxlYWRlciBhZnRlciBoaXR0aW5nICdvJyBvcgorCSdPJyBpbiBOb3JtYWwgbW9kZS4KK3EJQWxsb3cgZm9ybWF0dGluZyBvZiBjb21tZW50cyB3aXRoICJncSIuCisJTm90ZSB0aGF0IGZvcm1hdHRpbmcgd2lsbCBub3QgY2hhbmdlIGJsYW5rIGxpbmVzIG9yIGxpbmVzIGNvbnRhaW5pbmcKKwlvbmx5IHRoZSBjb21tZW50IGxlYWRlci4gIEEgbmV3IHBhcmFncmFwaCBzdGFydHMgYWZ0ZXIgc3VjaCBhIGxpbmUsCisJb3Igd2hlbiB0aGUgY29tbWVudCBsZWFkZXIgY2hhbmdlcy4KK3cJVHJhaWxpbmcgd2hpdGUgc3BhY2UgaW5kaWNhdGVzIGEgcGFyYWdyYXBoIGNvbnRpbnVlcyBpbiB0aGUgbmV4dCBsaW5lLgorCUEgbGluZSB0aGF0IGVuZHMgaW4gYSBub24td2hpdGUgY2hhcmFjdGVyIGVuZHMgYSBwYXJhZ3JhcGguCithCUF1dG9tYXRpYyBmb3JtYXR0aW5nIG9mIHBhcmFncmFwaHMuICBFdmVyeSB0aW1lIHRleHQgaXMgaW5zZXJ0ZWQgb3IKKwlkZWxldGVkIHRoZSBwYXJhZ3JhcGggd2lsbCBiZSByZWZvcm1hdHRlZC4gIFNlZSB8YXV0by1mb3JtYXR8LgorCVdoZW4gdGhlICdjJyBmbGFnIGlzIHByZXNlbnQgdGhpcyBvbmx5IGhhcHBlbnMgZm9yIHJlY29nbml6ZWQKKwljb21tZW50cy4KK24JV2hlbiBmb3JtYXR0aW5nIHRleHQsIHJlY29nbml6ZSBudW1iZXJlZCBsaXN0cy4gIFRoZSBpbmRlbnQgb2YgdGhlCisJdGV4dCBhZnRlciB0aGUgbnVtYmVyIGlzIHVzZWQgZm9yIHRoZSBuZXh0IGxpbmUuICBUaGUgbnVtYmVyIG1heQorCW9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgJy4nLCAnOicsICcpJywgJ10nIG9yICd9Jy4gIE5vdGUgdGhhdAorCSdhdXRvaW5kZW50JyBtdXN0IGJlIHNldCB0b28uICBEb2Vzbid0IHdvcmsgd2VsbCB0b2dldGhlciB3aXRoICIyIi4KKwlFeGFtcGxlOiA+CisJCTEuIHRoZSBmaXJzdCBpdGVtCisJCSAgIHdyYXBzCisJCTIuIHRoZSBzZWNvbmQgaXRlbQorMglXaGVuIGZvcm1hdHRpbmcgdGV4dCwgdXNlIHRoZSBpbmRlbnQgb2YgdGhlIHNlY29uZCBsaW5lIG9mIGEgcGFyYWdyYXBoCisJZm9yIHRoZSByZXN0IG9mIHRoZSBwYXJhZ3JhcGgsIGluc3RlYWQgb2YgdGhlIGluZGVudCBvZiB0aGUgZmlyc3QKKwlsaW5lLiAgVGhpcyBzdXBwb3J0cyBwYXJhZ3JhcGhzIGluIHdoaWNoIHRoZSBmaXJzdCBsaW5lIGhhcyBhCisJZGlmZmVyZW50IGluZGVudCB0aGFuIHRoZSByZXN0LiAgTm90ZSB0aGF0ICdhdXRvaW5kZW50JyBtdXN0IGJlIHNldAorCXRvby4gIEV4YW1wbGU6ID4KKwkJCWZpcnN0IGxpbmUgb2YgYSBwYXJhZ3JhcGgKKwkJc2Vjb25kIGxpbmUgb2YgdGhlIHNhbWUgcGFyYWdyYXBoCisJCXRoaXJkIGxpbmUuCit2CVZpLWNvbXBhdGlibGUgYXV0by13cmFwcGluZyBpbiBpbnNlcnQgbW9kZTogT25seSBicmVhayBhIGxpbmUgYXQgYQorCWJsYW5rIHRoYXQgeW91IGhhdmUgZW50ZXJlZCBkdXJpbmcgdGhlIGN1cnJlbnQgaW5zZXJ0IGNvbW1hbmQuICAoTm90ZToKKwl0aGlzIGlzIG5vdCAxMDAlIFZpIGNvbXBhdGlibGUuICBWaSBoYXMgc29tZSAidW5leHBlY3RlZCBmZWF0dXJlcyIgb3IKKwlidWdzIGluIHRoaXMgYXJlYS4gIEl0IHVzZXMgdGhlIHNjcmVlbiBjb2x1bW4gaW5zdGVhZCBvZiB0aGUgbGluZQorCWNvbHVtbi4pCitiCUxpa2UgJ3YnLCBidXQgb25seSBhdXRvLXdyYXAgaWYgeW91IGVudGVyIGEgYmxhbmsgYXQgb3IgYmVmb3JlCisJdGhlIHdyYXAgbWFyZ2luLiAgSWYgdGhlIGxpbmUgd2FzIGxvbmdlciB0aGFuICd0ZXh0d2lkdGgnIHdoZW4geW91CisJc3RhcnRlZCB0aGUgaW5zZXJ0LCBvciB5b3UgZG8gbm90IGVudGVyIGEgYmxhbmsgaW4gdGhlIGluc2VydCBiZWZvcmUKKwlyZWFjaGluZyAndGV4dHdpZHRoJywgVmltIGRvZXMgbm90IHBlcmZvcm0gYXV0by13cmFwcGluZy4KK2wJTG9uZyBsaW5lcyBhcmUgbm90IGJyb2tlbiBpbiBpbnNlcnQgbW9kZTogV2hlbiBhIGxpbmUgd2FzIGxvbmdlciB0aGFuCisJJ3RleHR3aWR0aCcgd2hlbiB0aGUgaW5zZXJ0IGNvbW1hbmQgc3RhcnRlZCwgVmltIGRvZXMgbm90CisJYXV0b21hdGljYWxseSBmb3JtYXQgaXQuCittCUFsc28gYnJlYWsgYXQgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBhYm92ZSAyNTUuICBUaGlzIGlzIHVzZWZ1bCBmb3IKKwlBc2lhbiB0ZXh0IHdoZXJlIGV2ZXJ5IGNoYXJhY3RlciBpcyBhIHdvcmQgb24gaXRzIG93bi4KK00JV2hlbiBqb2luaW5nIGxpbmVzLCBkb24ndCBpbnNlcnQgYSBzcGFjZSBiZWZvcmUgb3IgYWZ0ZXIgYSBtdWx0aS1ieXRlCisJY2hhcmFjdGVyLiAgT3ZlcnJ1bGVzIHRoZSAnQicgZmxhZy4KK0IJV2hlbiBqb2luaW5nIGxpbmVzLCBkb24ndCBpbnNlcnQgYSBzcGFjZSBiZXR3ZWVuIHR3byBtdWx0aS1ieXRlCisJY2hhcmFjdGVycy4gIE92ZXJydWxlZCBieSB0aGUgJ00nIGZsYWcuCisxCURvbid0IGJyZWFrIGEgbGluZSBhZnRlciBhIG9uZS1sZXR0ZXIgd29yZC4gIEl0J3MgYnJva2VuIGJlZm9yZSBpdAorCWluc3RlYWQgKGlmIHBvc3NpYmxlKS4KKworCitXaXRoICd0JyBhbmQgJ2MnIHlvdSBjYW4gc3BlY2lmeSB3aGVuIFZpbSBwZXJmb3JtcyBhdXRvLXdyYXBwaW5nOgordmFsdWUJYWN0aW9uCX4KKyIiCW5vIGF1dG9tYXRpYyBmb3JtYXR0aW5nICh5b3UgY2FuIHVzZSAiZ3EiIGZvciBtYW51YWwgZm9ybWF0dGluZykKKyJ0IglhdXRvbWF0aWMgZm9ybWF0dGluZyBvZiB0ZXh0LCBidXQgbm90IGNvbW1lbnRzCisiYyIJYXV0b21hdGljIGZvcm1hdHRpbmcgZm9yIGNvbW1lbnRzLCBidXQgbm90IHRleHQgKGdvb2QgZm9yIEMgY29kZSkKKyJ0YyIJYXV0b21hdGljIGZvcm1hdHRpbmcgZm9yIHRleHQgYW5kIGNvbW1lbnRzCisKK05vdGUgdGhhdCB3aGVuICd0ZXh0d2lkdGgnIGlzIDAsIFZpbSBkb2VzIG5vIGZvcm1hdHRpbmcgYW55d2F5IChidXQgZG9lcworaW5zZXJ0IGNvbW1lbnQgbGVhZGVycyBhY2NvcmRpbmcgdG8gdGhlICdjb21tZW50cycgb3B0aW9uKS4KKworTm90ZSB0aGF0IHdoZW4gJ3Bhc3RlJyBpcyBvbiwgVmltIGRvZXMgbm8gZm9ybWF0dGluZyBhdCBhbGwuCisKK05vdGUgdGhhdCAndGV4dHdpZHRoJyBjYW4gYmUgbm9uLXplcm8gZXZlbiBpZiBWaW0gbmV2ZXIgcGVyZm9ybXMgYXV0by13cmFwcGluZzsKKyd0ZXh0d2lkdGgnIGlzIHN0aWxsIHVzZWZ1bCBmb3IgZm9ybWF0dGluZyB3aXRoICJncSIuCisKK0lmIHRoZSAnY29tbWVudHMnIG9wdGlvbiBpbmNsdWRlcyAiLyoiLCAiKiIgYW5kL29yICIqLyIsIHRoZW4gVmltIGhhcyBzb21lCitidWlsdCBpbiBzdHVmZiB0byB0cmVhdCB0aGVzZSB0eXBlcyBvZiBjb21tZW50cyBhIGJpdCBtb3JlIGNsZXZlcmx5LgorT3BlbmluZyBhIG5ldyBsaW5lIGJlZm9yZSBvciBhZnRlciAiLyoiIG9yICIqLyIgKHdpdGggJ3InIG9yICdvJyBwcmVzZW50IGluCisnZm9ybWF0b3B0aW9ucycpIGdpdmVzIHRoZSBjb3JyZWN0IHN0YXJ0IG9mIHRoZSBsaW5lIGF1dG9tYXRpY2FsbHkuICBUaGUgc2FtZQoraGFwcGVucyB3aXRoIGZvcm1hdHRpbmcgYW5kIGF1dG8td3JhcHBpbmcuIE9wZW5pbmcgYSBsaW5lIGFmdGVyIGEgbGluZQorc3RhcnRpbmcgd2l0aCAiLyoiIG9yICIqIiBhbmQgY29udGFpbmluZyAiKi8iLCB3aWxsIGNhdXNlIG5vIGNvbW1lbnQgbGVhZGVyIHRvCitiZSBpbnNlcnRlZCwgYW5kIHRoZSBpbmRlbnQgb2YgdGhlIG5ldyBsaW5lIGlzIHRha2VuIGZyb20gdGhlIGxpbmUgY29udGFpbmluZwordGhlIHN0YXJ0IG9mIHRoZSBjb21tZW50LgorRS5nLjoKKyAgICAvKiB+CisgICAgICogWW91ciB0eXBpY2FsIGNvbW1lbnQuIH4KKyAgICAgKi8gfgorICAgIFRoZSBpbmRlbnQgb24gdGhpcyBsaW5lIGlzIHRoZSBzYW1lIGFzIHRoZSBzdGFydCBvZiB0aGUgYWJvdmUKKyAgICBjb21tZW50LgorCitBbGwgb2YgdGhpcyBzaG91bGQgYmUgcmVhbGx5IGNvb2wsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgbmV3Cis6YXV0b2NtZCBjb21tYW5kIHRvIHByZXBhcmUgZGlmZmVyZW50IHNldHRpbmdzIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgZmlsZS4KKworU29tZSBleGFtcGxlczoKKyAgZm9yIEMgY29kZSAob25seSBmb3JtYXQgY29tbWVudHMpOiA+CisJOnNldCBmbz1jcm9xCis8IGZvciBNYWlsL25ld3MJKGZvcm1hdCBhbGwsIGRvbid0IHN0YXJ0IGNvbW1lbnQgd2l0aCAibyIgY29tbWFuZCk6ID4KKwk6c2V0IGZvPXRjcnEKKzwKKworQXV0b21hdGljIGZvcm1hdHRpbmcJCQkJCSphdXRvLWZvcm1hdCoKKworV2hlbiB0aGUgJ2EnIGZsYWcgaXMgcHJlc2VudCBpbiAnZm9ybWF0b3B0aW9ucycgdGV4dCBpcyBmb3JtYXR0ZWQKK2F1dG9tYXRpY2FsbHkgd2hlbiBpbnNlcnRpbmcgdGV4dCBvciBkZWxldGluZyB0ZXh0LiAgVGhpcyB3b3JrcyBuaWNlIGZvcgorZWRpdGluZyB0ZXh0IHBhcmFncmFwaHMuICBBIGZldyBoaW50cyBvbiBob3cgdG8gdXNlIHRoaXM6CisKKy0gWW91IG5lZWQgdG8gcHJvcGVybHkgZGVmaW5lIHBhcmFncmFwaHMuICBUaGUgc2ltcGxlc3QgaXMgcGFyYWdyYXBocyB0aGF0IGFyZQorICBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lLiAgV2hlbiB0aGVyZSBpcyBubyBzZXBhcmF0aW5nIGJsYW5rIGxpbmUsIGNvbnNpZGVyCisgIHVzaW5nIHRoZSAndycgZmxhZyBhbmQgYWRkaW5nIGEgc3BhY2UgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgaW4gdGhlCisgIHBhcmFncmFwaHMgZXhjZXB0IHRoZSBsYXN0IG9uZS4KKworLSBZb3UgY2FuIHNldCB0aGUgJ2Zvcm1hdG9wdGlvbnMnIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGZpbGUgfGZpbGV0eXBlfCBvcgorICBzcGVjaWZpY2FsbHkgZm9yIG9uZSBmaWxlIHdpdGggYSB8bW9kZWxpbmV8LgorCistIFNldCAnZm9ybWF0b3B0aW9ucycgdG8gImF3MnRxIiB0byBtYWtlIHRleHQgd2l0aCBpbmRlbnRzIGxpa2UgdGhpczoKKworCSAgICBibGEgYmxhIGZvb2JhciBibGEgCisJYmxhIGZvb2JhciBibGEgZm9vYmFyIGJsYQorCSAgICBibGEgYmxhIGZvb2JhciBibGEgCisJYmxhIGZvb2JhciBibGEgYmxhIGZvb2JhcgorCistIEFkZCB0aGUgJ2MnIGZsYWcgdG8gb25seSBhdXRvLWZvcm1hdCBjb21tZW50cy4gIFVzZWZ1bCBpbiBzb3VyY2UgY29kZS4KKworQW5kIGEgZmV3IHdhcm5pbmdzOgorCistIFdoZW4gcGFydCBvZiB0aGUgdGV4dCBpcyBub3QgcHJvcGVybHkgc2VwYXJhdGVkIGluIHBhcmFncmFwaHMsIG1ha2luZworICBjaGFuZ2VzIGluIHRoaXMgdGV4dCB3aWxsIGNhdXNlIGl0IHRvIGJlIGZvcm1hdHRlZCBhbnl3YXkuICBDb25zaWRlciBkb2luZyA+CisKKwk6c2V0IGZvLT1hCisKKy0gV2hlbiB1c2luZyB0aGUgJ3cnIGZsYWcgKHRyYWlsaW5nIHNwYWNlIG1lYW5zIHBhcmFncmFwaCBjb250aW51ZXMpIGFuZAorICBkZWxldGluZyB0aGUgbGFzdCBsaW5lIG9mIGEgcGFyYWdyYXBoIHdpdGggfGRkfCwgdGhlIHBhcmFncmFwaCB3aWxsIGJlCisgIGpvaW5lZCB3aXRoIHRoZSBuZXh0IG9uZS4KKworLSBDaGFuZ2VkIHRleHQgaXMgc2F2ZWQgZm9yIHVuZG8uICBGb3JtYXR0aW5nIGlzIGFsc28gYSBjaGFuZ2UuICBUaHVzIGVhY2gKKyAgZm9ybWF0IGFjdGlvbiBzYXZlcyB0ZXh0IGZvciB1bmRvLiAgVGhpcyBtYXkgY29uc3VtZSBxdWl0ZSBhIGxvdCBvZiBtZW1vcnkuCisKKy0gRm9ybWF0dGluZyBhIGxvbmcgcGFyYWdyYXBoIGFuZC9vciB3aXRoIGNvbXBsaWNhdGVkIGluZGVudGluZyBtYXkgYmUgc2xvdy4KKworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvY21kbGluZS50eHQgYi9ydW50aW1lL2RvYy9jbWRsaW5lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGIzNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvY21kbGluZS50eHQKQEAgLTAsMCArMSw5OTIgQEAKKypjbWRsaW5lLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXIgMzEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJKkNtZGxpbmUtbW9kZSogKkNvbW1hbmQtbGluZS1tb2RlKgorQ29tbWFuZC1saW5lIG1vZGUJCSpDbWRsaW5lKiAqQ29tbWFuZC1saW5lKiAqbW9kZS1jbWRsaW5lKiAqOioKKworQ29tbWFuZC1saW5lIG1vZGUgaXMgdXNlZCB0byBlbnRlciBFeCBjb21tYW5kcyAoIjoiKSwgc2VhcmNoIHBhdHRlcm5zCisoIi8iIGFuZCAiPyIpLCBhbmQgZmlsdGVyIGNvbW1hbmRzICgiISIpLgorCitCYXNpYyBjb21tYW5kIGxpbmUgZWRpdGluZyBpcyBleHBsYWluZWQgaW4gY2hhcHRlciAyMCBvZiB0aGUgdXNlciBtYW51YWwKK3x1c3JfMjAudHh0fC4KKworMS4gQ29tbWFuZC1saW5lIGVkaXRpbmcJCXxjbWRsaW5lLWVkaXRpbmd8CisyLiBDb21tYW5kLWxpbmUgY29tcGxldGlvbgl8Y21kbGluZS1jb21wbGV0aW9ufAorMy4gRXggY29tbWFuZC1saW5lcwkJfGNtZGxpbmUtbGluZXN8Cis0LiBFeCBjb21tYW5kLWxpbmUgcmFuZ2VzCXxjbWRsaW5lLXJhbmdlc3wKKzUuIEV4IHNwZWNpYWwgY2hhcmFjdGVycwl8Y21kbGluZS1zcGVjaWFsfAorNi4gQ29tbWFuZC1saW5lIHdpbmRvdwkJfGNtZGxpbmUtd2luZG93fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIENvbW1hbmQtbGluZSBlZGl0aW5nCQkJCQkqY21kbGluZS1lZGl0aW5nKgorCitOb3JtYWxseSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgWW91IGNhbgorbW92ZSBhcm91bmQgaW4gdGhlIGNvbW1hbmQtbGluZSB3aXRoIHRoZSBsZWZ0IGFuZCByaWdodCBjdXJzb3Iga2V5cy4gIFdpdGggdGhlCis8SW5zZXJ0PiBrZXksIHlvdSBjYW4gdG9nZ2xlIGJldHdlZW4gaW5zZXJ0aW5nIGFuZCBvdmVyc3RyaWtpbmcgY2hhcmFjdGVycy4KK3tWaTogY2FuIG9ubHkgYWx0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lfQorCitOb3RlIHRoYXQgaWYgeW91ciBrZXlib2FyZCBkb2VzIG5vdCBoYXZlIHdvcmtpbmcgY3Vyc29yIGtleXMgb3IgYW55IG9mIHRoZQorb3RoZXIgc3BlY2lhbCBrZXlzLCB5b3UgY2FuIHVzZSAiOmNub3JlbWFwIiB0byBkZWZpbmUgYW5vdGhlciBrZXkgZm9yIHRoZW0uCitGb3IgZXhhbXBsZSwgdG8gZGVmaW5lIHRjc2ggc3R5bGUgZWRpdGluZyBrZXlzOgkJKnRjc2gtc3R5bGUqICA+CisJOmNub3JlbWFwIDxDLUE+IDxIb21lPgorCTpjbm9yZW1hcCA8Qy1GPiA8UmlnaHQ+CisJOmNub3JlbWFwIDxDLUI+IDxMZWZ0PgorCTpjbm9yZW1hcCA8RXNjPmIgPFMtTGVmdD4KKwk6Y25vcmVtYXAgPEVzYz5mIDxTLVJpZ2h0PgorKDw+IG5vdGF0aW9uIHw8Pnw7IHR5cGUgYWxsIHRoaXMgbGl0ZXJhbGx5KQorCisJCQkJCQkJKmNtZGxpbmUtdG9vLWxvbmcqCitXaGVuIHRoZSBjb21tYW5kIGxpbmUgaXMgZ2V0dGluZyBsb25nZXIgdGhhbiB3aGF0IGZpdHMgb24gdGhlIHNjcmVlbiwgb25seSB0aGUKK3BhcnQgdGhhdCBmaXRzIHdpbGwgYmUgc2hvd24uICBUaGUgY3Vyc29yIGNhbiBvbmx5IG1vdmUgaW4gdGhpcyB2aXNpYmxlIHBhcnQsCit0aHVzIHlvdSBjYW5ub3QgZWRpdCBiZXlvbmQgdGhhdC4KKworCQkJCQkJKmNtZGxpbmUtaGlzdG9yeSogKmhpc3RvcnkqCitUaGUgY29tbWFuZC1saW5lcyB0aGF0IHlvdSBlbnRlciBhcmUgcmVtZW1iZXJlZCBpbiBhIGhpc3RvcnkgdGFibGUuICBZb3UgY2FuCityZWNhbGwgdGhlbSB3aXRoIHRoZSB1cCBhbmQgZG93biBjdXJzb3Iga2V5cy4gIFRoZXJlIGFyZSBhY3R1YWxseSBmb3VyCitoaXN0b3J5IHRhYmxlczoKKy0gb25lIGZvciAnOicgY29tbWFuZHMKKy0gb25lIGZvciBzZWFyY2ggc3RyaW5ncworLSBvbmUgZm9yIGV4cHJlc3Npb25zCistIG9uZSBmb3IgaW5wdXQgbGluZXMsIHR5cGVkIGZvciB0aGUgfGlucHV0KCl8IGZ1bmN0aW9uLgorVGhlc2UgYXJlIGNvbXBsZXRlbHkgc2VwYXJhdGUuICBFYWNoIGhpc3RvcnkgY2FuIG9ubHkgYmUgYWNjZXNzZWQgd2hlbgorZW50ZXJpbmcgdGhlIHNhbWUgdHlwZSBvZiBsaW5lLgorVXNlIHRoZSAnaGlzdG9yeScgb3B0aW9uIHRvIHNldCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIHJlbWVtYmVyZWQKKyhkZWZhdWx0OiAyMCkuCitOb3RlczoKKy0gV2hlbiB5b3UgZW50ZXIgYSBjb21tYW5kLWxpbmUgdGhhdCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGFuIG9sZGVyIG9uZSwgdGhlCisgIG9sZCBvbmUgaXMgcmVtb3ZlZCAodG8gYXZvaWQgcmVwZWF0ZWQgY29tbWFuZHMgbW92aW5nIG9sZGVyIGNvbW1hbmRzIG91dCBvZgorICB0aGUgaGlzdG9yeSkuCistIE9ubHkgY29tbWFuZHMgdGhhdCBhcmUgdHlwZWQgYXJlIHJlbWVtYmVyZWQuICBPbmVzIHRoYXQgY29tcGxldGVseSBjb21lIGZyb20KKyAgbWFwcGluZ3MgYXJlIG5vdCBwdXQgaW4gdGhlIGhpc3RvcnkKKy0gQWxsIHNlYXJjaGVzIGFyZSBwdXQgaW4gdGhlIHNlYXJjaCBoaXN0b3J5LCBpbmNsdWRpbmcgdGhlIG9uZXMgdGhhdCBjb21lCisgIGZyb20gY29tbWFuZHMgbGlrZSAiKiIgYW5kICIjIi4gIEJ1dCBmb3IgYSBtYXBwaW5nLCBvbmx5IHRoZSBsYXN0IHNlYXJjaCBpcworICByZW1lbWJlcmVkICh0byBhdm9pZCB0aGF0IGxvbmcgbWFwcGluZ3MgdHJhc2ggdGhlIGhpc3RvcnkpLgore1ZpOiBubyBoaXN0b3J5fQore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NtZGxpbmVfaGlzdHwgZmVhdHVyZX0KKworVGhlcmUgaXMgYW4gYXV0b21hdGljIGNvbXBsZXRpb24gb2YgbmFtZXMgb24gdGhlIGNvbW1hbmQtbGluZTsgc2VlCit8Y21kbGluZS1jb21wbGV0aW9ufC4KKworCQkJCQkJCSpjX0NUUkwtVioKK0NUUkwtVgkJSW5zZXJ0IG5leHQgbm9uLWRpZ2l0IGxpdGVyYWxseS4gIFVwIHRvIHRocmVlIGRpZ2l0cyBmb3JtIHRoZQorCQlkZWNpbWFsIHZhbHVlIG9mIGEgc2luZ2xlIGJ5dGUuICBUaGUgbm9uLWRpZ2l0IGFuZCB0aGUgdGhyZWUKKwkJZGlnaXRzIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgbWFwcGluZy4gIFRoaXMgd29ya3MgdGhlIHNhbWUKKwkJd2F5IGFzIGluIEluc2VydCBtb2RlIChzZWUgYWJvdmUsIHxpX0NUUkwtVnwpLgorCQlOb3RlOiBVbmRlciBXaW5kb3dzIENUUkwtViBpcyBvZnRlbiBtYXBwZWQgdG8gcGFzdGUgdGV4dC4KKwkJVXNlIENUUkwtUSBpbnN0ZWFkIHRoZW4uCisJCQkJCQkJKmNfQ1RSTC1RKgorQ1RSTC1RCQlTYW1lIGFzIENUUkwtVi4gIEJ1dCB3aXRoIHNvbWUgdGVybWluYWxzIGl0IGlzIHVzZWQgZm9yCisJCWNvbnRyb2wgZmxvdywgaXQgZG9lc24ndCB3b3JrIHRoZW4uCisKKwkJCQkJCQkqY188TGVmdD4qCis8TGVmdD4JCWN1cnNvciBsZWZ0CisJCQkJCQkJKmNfPFJpZ2h0PioKKzxSaWdodD4JCWN1cnNvciByaWdodAorCQkJCQkJCSpjXzxTLUxlZnQ+KgorPFMtTGVmdD4gb3IgPEMtTGVmdD4JCQkJCSpjXzxDLUxlZnQ+KgorCQljdXJzb3Igb25lIFdPUkQgbGVmdAorCQkJCQkJCSpjXzxTLVJpZ2h0PioKKzxTLVJpZ2h0PiBvciA8Qy1SaWdodD4JCQkJCSpjXzxDLVJpZ2h0PioKKwkJY3Vyc29yIG9uZSBXT1JEIHJpZ2h0CitDVFJMLUIgb3IgPEhvbWU+CQkJCQkqY19DVFJMLUIqICpjXzxIb21lPioKKwkJY3Vyc29yIHRvIGJlZ2lubmluZyBvZiBjb21tYW5kLWxpbmUKK0NUUkwtRSBvciA8RW5kPgkJCQkJCSpjX0NUUkwtRSogKmNfPEVuZD4qCisJCWN1cnNvciB0byBlbmQgb2YgY29tbWFuZC1saW5lCisKKwkJCQkJCQkqY188TGVmdE1vdXNlPioKKzxMZWZ0TW91c2U+CWN1cnNvciB0byBwb3NpdGlvbiBvZiBtb3VzZSBjbGljay4KKworQ1RSTC1ICQkJCQkJCSpjXzxCUz4qICpjX0NUUkwtSCoKKzxCUz4JCWRlbGV0ZSB0aGUgY2hhcmFjdGVyIGluIGZyb250IG9mIHRoZSBjdXJzb3IgKHNlZSB8OmZpeGRlbHwgaWYKKwkJeW91ciA8QlM+IGtleSBkb2VzIG5vdCBkbyB3aGF0IHlvdSB3YW50KS4KKwkJCQkJCQkqY188RGVsPioKKzxEZWw+CQlkZWxldGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIChhdCBlbmQgb2YgbGluZToKKwkJY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yKSAoc2VlIHw6Zml4ZGVsfCBpZiB5b3VyIDxEZWw+CisJCWtleSBkb2VzIG5vdCBkbyB3aGF0IHlvdSB3YW50KS4KKwkJCQkJCQkqY19DVFJMLVcqCitDVFJMLVcJCWRlbGV0ZSB0aGUgd29yZCBiZWZvcmUgdGhlIGN1cnNvcgorCQkJCQkJCSpjX0NUUkwtVSoKK0NUUkwtVQkJcmVtb3ZlIGFsbCBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGN1cnNvciBwb3NpdGlvbiBhbmQKKwkJdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4gIFByZXZpb3VzIHZlcnNpb25zIG9mIHZpbQorCQlkZWxldGVkIGFsbCBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lLiAgSWYgdGhhdCBpcyB0aGUKKwkJcHJlZmVycmVkIGJlaGF2aW9yLCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIC52aW1yYzogPgorCQkJOmNub3JlbWFwIDxDLVU+IDxDLUU+PEMtVT4KKzwKKwkJTm90ZTogaWYgdGhlIGNvbW1hbmQtbGluZSBiZWNvbWVzIGVtcHR5IHdpdGggb25lIG9mIHRoZQorCQlkZWxldGUgY29tbWFuZHMsIENvbW1hbmQtbGluZSBtb2RlIGlzIHF1aXQuCisJCQkJCQkJKmNfPEluc2VydD4qCis8SW5zZXJ0PglUb2dnbGUgYmV0d2VlbiBpbnNlcnQgYW5kIG92ZXJzdHJpa2UuICB7bm90IGluIFZpfQorCit7Y2hhcjF9IDxCUz4ge2NoYXIyfQlvcgkJCQkqY19kaWdyYXBoKgorQ1RSTC1LIHtjaGFyMX0ge2NoYXIyfQkJCQkJKmNfQ1RSTC1LKgorCQllbnRlciBkaWdyYXBoIChzZWUgfGRpZ3JhcGhzfCkuICBXaGVuIHtjaGFyMX0gaXMgYSBzcGVjaWFsCisJCWtleSwgdGhlIGNvZGUgZm9yIHRoYXQga2V5IGlzIGluc2VydGVkIGluIDw+IGZvcm0uICB7bm90IGluIFZpfQorCitDVFJMLVIgezAtOWEteiIlIzotPS59CQkJCQkqY19DVFJMLVIqICpjXzxDLVI+KgorCQlJbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgbnVtYmVyZWQgb3IgbmFtZWQgcmVnaXN0ZXIuICBCZXR3ZWVuCisJCXR5cGluZyBDVFJMLVIgYW5kIHRoZSBzZWNvbmQgY2hhcmFjdGVyICciJyB3aWxsIGJlIGRpc3BsYXllZAorCQl0byBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgZXhwZWN0ZWQgdG8gZW50ZXIgdGhlIG5hbWUgb2YgYQorCQlyZWdpc3Rlci4KKwkJVGhlIHRleHQgaXMgaW5zZXJ0ZWQgYXMgaWYgeW91IHR5cGVkIGl0LCBidXQgbWFwcGluZ3MgYW5kCisJCWFiYnJldmlhdGlvbnMgYXJlIG5vdCB1c2VkLiAgQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gdGhyb3VnaAorCQknd2lsZGNoYXInIGlzIG5vdCB0cmlnZ2VyZWQgdGhvdWdoLiAgQW5kIGNoYXJhY3RlcnMgdGhhdCBlbmQKKwkJdGhlIGNvbW1hbmQgbGluZSBhcmUgaW5zZXJ0ZWQgbGl0ZXJhbGx5ICg8RXNjPiwgPENSPiwgPE5MPiwKKwkJPEMtQz4pLiAgQSA8QlM+IG9yIENUUkwtVyBjb3VsZCBzdGlsbCBlbmQgdGhlIGNvbW1hbmQgbGluZQorCQl0aG91Z2gsIGFuZCByZW1haW5pbmcgY2hhcmFjdGVycyB3aWxsIHRoZW4gYmUgaW50ZXJwcmV0ZWQgaW4KKwkJYW5vdGhlciBtb2RlLCB3aGljaCBtaWdodCBub3QgYmUgd2hhdCB5b3UgaW50ZW5kZWQuCisJCVNwZWNpYWwgcmVnaXN0ZXJzOgorCQkJJyInCXRoZSB1bm5hbWVkIHJlZ2lzdGVyLCBjb250YWluaW5nIHRoZSB0ZXh0IG9mCisJCQkJdGhlIGxhc3QgZGVsZXRlIG9yIHlhbmsKKwkJCSclJwl0aGUgY3VycmVudCBmaWxlIG5hbWUKKwkJCScjJwl0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZQorCQkJJyonCXRoZSBjbGlwYm9hcmQgY29udGVudHMgKFgxMTogcHJpbWFyeSBzZWxlY3Rpb24pCisJCQknKycJdGhlIGNsaXBib2FyZCBjb250ZW50cworCQkJJy8nCXRoZSBsYXN0IHNlYXJjaCBwYXR0ZXJuCisJCQknOicJdGhlIGxhc3QgY29tbWFuZC1saW5lCisJCQknLScJdGhlIGxhc3Qgc21hbGwgKGxlc3MgdGhhbiBhIGxpbmUpIGRlbGV0ZQorCQkJJy4nCXRoZSBsYXN0IGluc2VydGVkIHRleHQKKwkJCQkJCQkqY19DVFJMLVJfPSoKKwkJCSc9Jwl0aGUgZXhwcmVzc2lvbiByZWdpc3RlcjogeW91IGFyZSBwcm9tcHRlZCB0bworCQkJCWVudGVyIGFuIGV4cHJlc3Npb24gKHNlZSB8ZXhwcmVzc2lvbnwpCisJCVNlZSB8cmVnaXN0ZXJzfCBhYm91dCByZWdpc3RlcnMuICB7bm90IGluIFZpfQorCitDVFJMLVIgQ1RSTC1GCQkJCSpjX0NUUkwtUl9DVFJMLUYqICpjXzxDLVI+XzxDLUY+KgorQ1RSTC1SIENUUkwtUAkJCQkqY19DVFJMLVJfQ1RSTC1QKiAqY188Qy1SPl88Qy1QPioKK0NUUkwtUiBDVFJMLVcJCQkJKmNfQ1RSTC1SX0NUUkwtVyogKmNfPEMtUj5fPEMtVz4qCitDVFJMLVIgQ1RSTC1BCQkJCSpjX0NUUkwtUl9DVFJMLUEqICpjXzxDLVI+XzxDLUE+KgorCQlJbnNlcnQgdGhlIG9iamVjdCB1bmRlciB0aGUgY3Vyc29yOgorCQkJQ1RSTC1GCXRoZSBGaWxlbmFtZSB1bmRlciB0aGUgY3Vyc29yCisJCQlDVFJMLVAJdGhlIEZpbGVuYW1lIHVuZGVyIHRoZSBjdXJzb3IsIGV4cGFuZGVkIHdpdGgKKwkJCQkncGF0aCcgYXMgaW4gfGdmfAorCQkJQ1RSTC1XCXRoZSBXb3JkIHVuZGVyIHRoZSBjdXJzb3IKKwkJCUNUUkwtQQl0aGUgV09SRCB1bmRlciB0aGUgY3Vyc29yOyBzZWUgfFdPUkR8CisJCXtub3QgaW4gVml9CisJCUNUUkwtRiBhbmQgQ1RSTC1QOiB7b25seSB3aGVuICtmaWxlX2luX3BhdGggZmVhdHVyZSBpcworCQlpbmNsdWRlZH0KKworCQkJCQkqY19DVFJMLVJfQ1RSTC1SKiAqY188Qy1SPl88Qy1SPioKKwkJCQkJKmNfQ1RSTC1SX0NUUkwtTyogKmNfPEMtUj5fPEMtTz4qCitDVFJMLVIgQ1RSTC1SIHswLTlhLXoiJSM6LT0uIENUUkwtRiBDVFJMLVAgQ1RSTC1XIENUUkwtQX0KK0NUUkwtUiBDVFJMLU8gezAtOWEteiIlIzotPS4gQ1RSTC1GIENUUkwtUCBDVFJMLVcgQ1RSTC1BfQorCQlJbnNlcnQgcmVnaXN0ZXIgb3Igb2JqZWN0IHVuZGVyIHRoZSBjdXJzb3IuICBXb3JrcyBsaWtlCisJCXxjX0NUUkwtUnwgYnV0IGluc2VydHMgdGhlIHRleHQgbGl0ZXJhbGx5LiAgRm9yIGV4YW1wbGUsIGlmCisJCXJlZ2lzdGVyIGEgY29udGFpbnMgInh5Xkh6IiAod2hlcmUgXkggaXMgYSBiYWNrc3BhY2UpLAorCQkiQ1RSTC1SIGEiIHdpbGwgaW5zZXJ0ICJ4eiIgd2hpbGUgIkNUUkwtUiBDVFJMLVIgYSIgd2lsbAorCQlpbnNlcnQgInh5Xkh6Ii4KKworQ1RSTC1cIGUge2V4cHJ9CQkJCQkJKmNfQ1RSTC1cX2UqCisJCUV2YWx1YXRlIHtleHByfSBhbmQgcmVwbGFjZSB0aGUgd2hvbGUgY29tbWFuZCBsaW5lIHdpdGggdGhlCisJCXJlc3VsdC4gIFlvdSB3aWxsIGJlIHByb21wdGVkIGZvciB0aGUgZXhwcmVzc2lvbiwgdHlwZSA8RW50ZXI+CisJCXRvIGZpbmlzaCBpdC4gIEl0J3MgbW9zdCB1c2VmdWwgaW4gbWFwcGluZ3MgdGhvdWdoLiAgU2VlCisJCXxleHByZXNzaW9ufC4KKwkJU2VlIHxjX0NUUkwtUl89fCBmb3IgaW5zZXJ0aW5nIHRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbi4KKwkJVXNlZnVsIGZ1bmN0aW9ucyBhcmUgfGdldGNtZGxpbmUoKXwgYW5kIHxnZXRjbWRwb3MoKXwuCisJCVRoZSBjdXJzb3IgcG9zaXRpb24gaXMgdW5jaGFuZ2VkLCBleGNlcHQgd2hlbiB0aGUgY3Vyc29yIHdhcworCQlhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCB0aGVuIGl0IHN0YXlzIGF0IHRoZSBlbmQuCisJCXxzZXRjbWRwb3MoKXwgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBjdXJzb3IgcG9zaXRpb24uCisJCUV4YW1wbGU6ID4KKwkJCTpjbWFwIDxGNz4gPEMtXD5lQXBwZW5kU29tZSgpPENSPgorCQkJOmZ1bmMgQXBwZW5kU29tZSgpCisJCQkgICA6bGV0IGNtZCA9IGdldGNtZGxpbmUoKSAuICIgU29tZSgpIgorCQkJICAgOiIgcGxhY2UgdGhlIGN1cnNvciBvbiB0aGUgKQorCQkJICAgOmNhbGwgc2V0Y21kcG9zKHN0cmxlbihjbWQpKQorCQkJICAgOnJldHVybiBjbWQKKwkJCTplbmRmdW5jCis8CisJCQkJCQkJKmNfQ1RSTC1ZKgorQ1RSTC1ZCQlXaGVuIHRoZXJlIGlzIGEgbW9kZWxlc3Mgc2VsZWN0aW9uLCBjb3B5IHRoZSBzZWxlY3Rpb24gaW50bworCQl0aGUgY2xpcGJvYXJkLiB8bW9kZWxlc3Mtc2VsZWN0aW9ufAorCQlJZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24gQ1RSTC1ZIGlzIGluc2VydGVkIGFzIGEgY2hhcmFjdGVyLgorCitDVFJMLUoJCQkJCQkqY19DVFJMLUoqICpjXzxOTD4qICpjXzxDUj4qCis8Q1I+IG9yIDxOTD4Jc3RhcnQgZW50ZXJlZCBjb21tYW5kCisJCQkJCQkJKmNfPEVzYz4qCis8RXNjPgkJV2hlbiB0eXBlZCBhbmQgJ3gnIG5vdCBwcmVzZW50IGluICdjcG9wdGlvbnMnLCBxdWl0CisJCUNvbW1hbmQtbGluZSBtb2RlIHdpdGhvdXQgZXhlY3V0aW5nLiAgSW4gbWFjcm9zIG9yIHdoZW4gJ3gnCisJCXByZXNlbnQgaW4gJ2Nwb3B0aW9ucycsIHN0YXJ0IGVudGVyZWQgY29tbWFuZC4KKwkJCQkJCQkqY19DVFJMLUMqCitDVFJMLUMJCXF1aXQgY29tbWFuZC1saW5lIHdpdGhvdXQgZXhlY3V0aW5nCisKKwkJCQkJCQkqY188VXA+KgorPFVwPgkJcmVjYWxsIG9sZGVyIGNvbW1hbmQtbGluZSBmcm9tIGhpc3RvcnksIHdob3NlIGJlZ2lubmluZworCQltYXRjaGVzIHRoZSBjdXJyZW50IGNvbW1hbmQtbGluZSAoc2VlIGJlbG93KS4KKwkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NtZGxpbmVfaGlzdHwKKwkJZmVhdHVyZX0KKwkJCQkJCQkqY188RG93bj4qCis8RG93bj4JCXJlY2FsbCBtb3JlIHJlY2VudCBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5LCB3aG9zZSBiZWdpbm5pbmcKKwkJbWF0Y2hlcyB0aGUgY3VycmVudCBjb21tYW5kLWxpbmUgKHNlZSBiZWxvdykuCisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjbWRsaW5lX2hpc3R8CisJCWZlYXR1cmV9CisKKwkJCQkJCQkqY188Uy1VcD4qICpjXzxQYWdlVXA+KgorPFMtVXA+IG9yIDxQYWdlVXA+CisJCXJlY2FsbCBvbGRlciBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5CisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjbWRsaW5lX2hpc3R8CisJCWZlYXR1cmV9CisJCQkJCQkqY188Uy1Eb3duPiogKmNfPFBhZ2VEb3duPioKKzxTLURvd24+IG9yIDxQYWdlRG93bj4KKwkJcmVjYWxsIG1vcmUgcmVjZW50IGNvbW1hbmQtbGluZSBmcm9tIGhpc3RvcnkKKwkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NtZGxpbmVfaGlzdHwKKwkJZmVhdHVyZX0KKworQ1RSTC1ECQljb21tYW5kLWxpbmUgY29tcGxldGlvbiAoc2VlIHxjbWRsaW5lLWNvbXBsZXRpb258KQorJ3dpbGRjaGFyJyBvcHRpb24KKwkJY29tbWFuZC1saW5lIGNvbXBsZXRpb24gKHNlZSB8Y21kbGluZS1jb21wbGV0aW9ufCkKK0NUUkwtTgkJY29tbWFuZC1saW5lIGNvbXBsZXRpb24gKHNlZSB8Y21kbGluZS1jb21wbGV0aW9ufCkKK0NUUkwtUAkJY29tbWFuZC1saW5lIGNvbXBsZXRpb24gKHNlZSB8Y21kbGluZS1jb21wbGV0aW9ufCkKK0NUUkwtQQkJY29tbWFuZC1saW5lIGNvbXBsZXRpb24gKHNlZSB8Y21kbGluZS1jb21wbGV0aW9ufCkKK0NUUkwtTAkJY29tbWFuZC1saW5lIGNvbXBsZXRpb24gKHNlZSB8Y21kbGluZS1jb21wbGV0aW9ufCkKKworCQkJCQkJCSpjX0NUUkwtXyoKK0NUUkwtXwkJYSAtIHN3aXRjaCBiZXR3ZWVuIEhlYnJldyBhbmQgRW5nbGlzaCBrZXlib2FyZCBtb2RlLCB3aGljaCBpcworCQlwcml2YXRlIHRvIHRoZSBjb21tYW5kLWxpbmUgYW5kIG5vdCByZWxhdGVkIHRvIGhrbWFwLgorCQlUaGlzIGlzIHVzZWZ1bCB3aGVuIEhlYnJldyB0ZXh0IGVudHJ5IGlzIHJlcXVpcmVkIGluIHRoZQorCQljb21tYW5kLWxpbmUsIHNlYXJjaGVzLCBhYmJyZXZpYXRpb25zLCBldGMuICBBcHBsaWVzIG9ubHkgaWYKKwkJVmltIGlzIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fCBmZWF0dXJlIGFuZCB0aGUKKwkJJ2FsbG93cmV2aW5zJyBvcHRpb24gaXMgc2V0LgorCQlTZWUgfHJpbGVmdC50eHR8LgorCisJCWIgLSBzd2l0Y2ggYmV0d2VlbiBGYXJzaSBhbmQgRW5nbGlzaCBrZXlib2FyZCBtb2RlLCB3aGljaCBpcworCQlwcml2YXRlIHRvIHRoZSBjb21tYW5kLWxpbmUgYW5kIG5vdCByZWxhdGVkIHRvIGZrbWFwLiAgSW4KKwkJRmFyc2kga2V5Ym9hcmQgbW9kZSB0aGUgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gcmV2ZXJzZQorCQlpbnNlcnQgbWFubmVyLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiBGYXJzaSB0ZXh0IGVudHJ5IGlzCisJCXJlcXVpcmVkIGluIHRoZSBjb21tYW5kLWxpbmUsIHNlYXJjaGVzLCBhYmJyZXZpYXRpb25zLCBldGMuCisJCUFwcGxpZXMgb25seSBpZiBWaW0gaXMgY29tcGlsZWQgd2l0aCB0aGUgfCtmYXJzaXwgZmVhdHVyZS4KKwkJU2VlIHxmYXJzaS50eHR8LgorCisJCQkJCQkJKmNfQ1RSTC1eKgorQ1RSTC1eCQlUb2dnbGUgdGhlIHVzZSBvZiBsYW5ndWFnZSB8OmxtYXB8IG1hcHBpbmdzIGFuZC9vciBJbnB1dAorCQlNZXRob2QuCisJCVdoZW4gdHlwaW5nIGEgcGF0dGVybiBmb3IgYSBzZWFyY2ggY29tbWFuZCBhbmQgJ2ltc2VhcmNoJyBpcworCQlub3QgLTEsIFZBTCBpcyB0aGUgdmFsdWUgb2YgJ2ltc2VhcmNoJywgb3RoZXJ3aXNlIFZBTCBpcyB0aGUKKwkJdmFsdWUgb2YgJ2ltaW5zZXJ0Jy4KKwkJV2hlbiBsYW5ndWFnZSBtYXBwaW5ncyBhcmUgZGVmaW5lZDoKKwkJLSBJZiBWQUwgaXMgMSAobGFuZ21hcCBtYXBwaW5ncyB1c2VkKSBpdCBiZWNvbWVzIDAgKG5vIGxhbmdtYXAKKwkJICBtYXBwaW5ncyB1c2VkKS4KKwkJLSBJZiBWQUwgd2FzIG5vdCAxIGl0IGJlY29tZXMgMSwgdGh1cyBsYW5nbWFwIG1hcHBpbmdzIGFyZQorCQkgIGVuYWJsZWQuCisJCVdoZW4gbm8gbGFuZ3VhZ2UgbWFwcGluZ3MgYXJlIGRlZmluZWQ6CisJCS0gSWYgVkFMIGlzIDIgKElucHV0IE1ldGhvZCBpcyB1c2VkKSBpdCBiZWNvbWVzIDAgKG5vIGlucHV0CisJCSAgbWV0aG9kIHVzZWQpCisJCS0gSWYgVkFMIGhhcyBhbm90aGVyIHZhbHVlIGl0IGJlY29tZXMgMiwgdGh1cyB0aGUgSW5wdXQgTWV0aG9kCisJCSAgaXMgZW5hYmxlZC4KKwkJVGhlc2UgbGFuZ3VhZ2UgbWFwcGluZ3MgYXJlIG5vcm1hbGx5IHVzZWQgdG8gdHlwZSBjaGFyYWN0ZXJzCisJCXRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIHdoYXQgdGhlIGtleWJvYXJkIHByb2R1Y2VzLiAgVGhlCisJCSdrZXltYXAnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBpbnN0YWxsIGEgd2hvbGUgbnVtYmVyIG9mIHRoZW0uCisJCVdoZW4gZW50ZXJpbmcgYSBjb21tYW5kIGxpbmUsIGxhbmdtYXAgbWFwcGluZ3MgYXJlIHN3aXRjaGVkCisJCW9mZiwgc2luY2UgeW91IGFyZSBleHBlY3RlZCB0byB0eXBlIGEgY29tbWFuZC4gIEFmdGVyCisJCXN3aXRjaGluZyBpdCBvbiB3aXRoIENUUkwtXiwgdGhlIG5ldyBzdGF0ZSBpcyBub3QgdXNlZCBhZ2FpbgorCQlmb3IgdGhlIG5leHQgY29tbWFuZCBvciBTZWFyY2ggcGF0dGVybi4KKwkJe25vdCBpbiBWaX0KKworRm9yIEVtYWNzLXN0eWxlIGVkaXRpbmcgb24gdGhlIGNvbW1hbmQtbGluZSBzZWUgfGVtYWNzLWtleXN8LgorCitUaGUgPFVwPiBhbmQgPERvd24+IGtleXMgdGFrZSB0aGUgY3VycmVudCBjb21tYW5kLWxpbmUgYXMgYSBzZWFyY2ggc3RyaW5nLgorVGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dC9wcmV2aW91cyBjb21tYW5kLWxpbmVzIGFyZSBjb21wYXJlZCB3aXRoIHRoaXMKK3N0cmluZy4gIFRoZSBmaXJzdCBsaW5lIHRoYXQgbWF0Y2hlcyBpcyB0aGUgbmV3IGNvbW1hbmQtbGluZS4gIFdoZW4gdHlwaW5nCit0aGVzZSB0d28ga2V5cyByZXBlYXRlZGx5LCB0aGUgc2FtZSBzdHJpbmcgaXMgdXNlZCBhZ2Fpbi4gIEZvciBleGFtcGxlLCB0aGlzCitjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzdWJzdGl0dXRlIGNvbW1hbmQ6IFR5cGUgIjpzIiBhbmQgdGhlbiA8VXA+LgorVGhlIHNhbWUgY291bGQgYmUgZG9uZSBieSB0eXBpbmcgPFMtVXA+IGEgbnVtYmVyIG9mIHRpbWVzIHVudGlsIHRoZSBkZXNpcmVkCitjb21tYW5kLWxpbmUgaXMgc2hvd24uICAoTm90ZTogdGhlIHNoaWZ0ZWQgYXJyb3cga2V5cyBkbyBub3Qgd29yayBvbiBhbGwKK3Rlcm1pbmFscykKKworCQkJCQkJCSpoaXMqICo6aGlzdG9yeSoKKzpoaXNbdG9yeV0JUHJpbnQgdGhlIGhpc3Rvcnkgb2YgbGFzdCBlbnRlcmVkIGNvbW1hbmRzLgorCQl7bm90IGluIFZpfQorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY21kbGluZV9oaXN0fAorCQlmZWF0dXJlfQorCis6aGlzW3RvcnldIFt7bmFtZX1dIFt7Zmlyc3R9XVssIFt7bGFzdH1dXQorCQlMaXN0IHRoZSBjb250ZW50cyBvZiBoaXN0b3J5IHtuYW1lfSB3aGljaCBjYW4gYmU6CisJCWNbbWRdCSBvciA6CWNvbW1hbmQtbGluZSBoaXN0b3J5CisJCXNbZWFyY2hdIG9yIC8Jc2VhcmNoIHN0cmluZyBoaXN0b3J5CisJCWVbeHByXQkgb3IgPQlleHByZXNzaW9uIHJlZ2lzdGVyIGhpc3RvcnkKKwkJaVtucHV0XQkgb3IgQAlpbnB1dCBsaW5lIGhpc3RvcnkKKwkJYVtsbF0JCWFsbCBvZiB0aGUgYWJvdmUKKwkJe25vdCBpbiBWaX0KKworCQlJZiB0aGUgbnVtYmVycyB7Zmlyc3R9IGFuZC9vciB7bGFzdH0gYXJlIGdpdmVuLCB0aGUgcmVzcGVjdGl2ZQorCQlyYW5nZSBvZiBlbnRyaWVzIGZyb20gYSBoaXN0b3J5IGlzIGxpc3RlZC4gIFRoZXNlIG51bWJlcnMgY2FuCisJCWJlIHNwZWNpZmllZCBpbiB0aGUgZm9sbG93aW5nIGZvcm06CisJCQkJCQkJKjpoaXN0b3J5LWluZGV4aW5nKgorCQlBIHBvc2l0aXZlIG51bWJlciByZXByZXNlbnRzIHRoZSBhYnNvbHV0ZSBpbmRleCBvZiBhbiBlbnRyeQorCQlhcyBpdCBpcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIGEgOmhpc3RvcnkgbGlzdGluZy4KKwkJVGhpcyBudW1iZXIgcmVtYWlucyBmaXhlZCBldmVuIGlmIG90aGVyIGVudHJpZXMgYXJlIGRlbGV0ZWQuCisKKwkJQSBuZWdhdGl2ZSBudW1iZXIgbWVhbnMgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIGFuIGVudHJ5LAorCQljb3VudGVkIGZyb20gdGhlIG5ld2VzdCBlbnRyeSAod2hpY2ggaGFzIGluZGV4IC0xKSBiYWNrd2FyZHMuCisKKwkJRXhhbXBsZXM6CisJCUxpc3QgZW50cmllcyA2IHRvIDEyIGZyb20gdGhlIHNlYXJjaCBoaXN0b3J5OiA+CisJCQk6aGlzdG9yeSAvIDYsMTIKKzwKKwkJTGlzdCB0aGUgcmVjZW50IGZpdmUgZW50cmllcyBmcm9tIGFsbCBoaXN0b3JpZXM6ID4KKwkJCTpoaXN0b3J5IGFsbCAtNSwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBDb21tYW5kLWxpbmUgY29tcGxldGlvbgkJCQkqY21kbGluZS1jb21wbGV0aW9uKgorCitXaGVuIGVkaXRpbmcgdGhlIGNvbW1hbmQtbGluZSwgYSBmZXcgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gY29tcGxldGUgdGhlCit3b3JkIGJlZm9yZSB0aGUgY3Vyc29yLiAgVGhpcyBpcyBhdmFpbGFibGUgZm9yOgorCistIENvbW1hbmQgbmFtZXM6IEF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWFuZC1saW5lLgorLSBUYWdzOiBPbmx5IGFmdGVyIHRoZSAiOnRhZyIgY29tbWFuZC4KKy0gRmlsZSBuYW1lczogT25seSBhZnRlciBhIGNvbW1hbmQgdGhhdCBhY2NlcHRzIGEgZmlsZSBuYW1lIG9yIGEgc2V0dGluZyBmb3IKKyAgYW4gb3B0aW9uIHRoYXQgY2FuIGJlIHNldCB0byBhIGZpbGUgbmFtZS4gIFRoaXMgaXMgY2FsbGVkIGZpbGUgbmFtZQorICBjb21wbGV0aW9uLgorLSBPcHRpb25zOiBPbmx5IGFmdGVyIHRoZSAiOnNldCIgY29tbWFuZC4KKy0gTWFwcGluZ3M6IE9ubHkgYWZ0ZXIgYSAiOm1hcCIgb3Igc2ltaWxhciBjb21tYW5kLgorLSBWYXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXM6IE9ubHkgYWZ0ZXIgYSAiOmlmIiwgIjpjYWxsIiBvciBzaW1pbGFyIGNvbW1hbmQuCisKK1doZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIHRoZSB8K2NtZGxpbmVfY29tcGx8IGZlYXR1cmUgZGlzYWJsZWQsIG9ubHkgZmlsZQorbmFtZXMsIGRpcmVjdG9yaWVzIGFuZCBoZWxwIGl0ZW1zIGNhbiBiZSBjb21wbGV0ZWQuCisKK1RoZXNlIGFyZSB0aGUgY29tbWFuZHMgdGhhdCBjYW4gYmUgdXNlZDoKKworCQkJCQkJCSpjX0NUUkwtRCoKK0NUUkwtRAkJTGlzdCBuYW1lcyB0aGF0IG1hdGNoIHRoZSBwYXR0ZXJuIGluIGZyb250IG9mIHRoZSBjdXJzb3IuCisJCVdoZW4gc2hvd2luZyBmaWxlIG5hbWVzLCBkaXJlY3RvcmllcyBhcmUgaGlnaGxpZ2h0ZWQgKHNlZQorCQknaGlnaGxpZ2h0JyBvcHRpb24pLiAgTmFtZXMgd2hlcmUgJ3N1ZmZpeGVzJyBtYXRjaGVzIGFyZSBtb3ZlZAorCQl0byB0aGUgZW5kLgorCQkJCQkqY19DVFJMLUkqICpjX3dpbGRjaGFyKiAqY188VGFiPioKKyd3aWxkY2hhcicgb3B0aW9uCisJCUEgbWF0Y2ggaXMgZG9uZSBvbiB0aGUgcGF0dGVybiBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLiAgVGhlCisJCW1hdGNoIChpZiB0aGVyZSBhcmUgc2V2ZXJhbCwgdGhlIGZpcnN0IG1hdGNoKSBpcyBpbnNlcnRlZAorCQlpbiBwbGFjZSBvZiB0aGUgcGF0dGVybi4gIChOb3RlOiBkb2VzIG5vdCB3b3JrIGluc2lkZSBhCisJCW1hY3JvLCBiZWNhdXNlIDxUYWI+IG9yIDxFc2M+IGFyZSBtb3N0bHkgdXNlZCBhcyAnd2lsZGNoYXInLAorCQlhbmQgdGhlc2UgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBpbiBzb21lIG1hY3Jvcy4pIFdoZW4gdHlwZWQKKwkJYWdhaW4gYW5kIHRoZXJlIHdlcmUgbXVsdGlwbGUgbWF0Y2hlcywgdGhlIG5leHQKKwkJbWF0Y2ggaXMgaW5zZXJ0ZWQuICBBZnRlciB0aGUgbGFzdCBtYXRjaCwgdGhlIGZpcnN0IGlzIHVzZWQKKwkJYWdhaW4gKHdyYXAgYXJvdW5kKS4KKwkJVGhlIGJlaGF2aW9yIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlICd3aWxkbW9kZScgb3B0aW9uLgorCQkJCQkJCSpjX0NUUkwtTioKK0NUUkwtTgkJQWZ0ZXIgdXNpbmcgJ3dpbGRjaGFyJyB3aGljaCBnb3QgbXVsdGlwbGUgbWF0Y2hlcywgZ28gdG8gbmV4dAorCQltYXRjaC4gIE90aGVyd2lzZSByZWNhbGwgbW9yZSByZWNlbnQgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeS4KKzxTLVRhYj4JCQkJCQkJKmNfQ1RSTC1QKiAqY188Uy1UYWI+KgorQ1RSTC1QCQlBZnRlciB1c2luZyAnd2lsZGNoYXInIHdoaWNoIGdvdCBtdWx0aXBsZSBtYXRjaGVzLCBnbyB0bworCQlwcmV2aW91cyBtYXRjaC4gIE90aGVyd2lzZSByZWNhbGwgb2xkZXIgY29tbWFuZC1saW5lIGZyb20KKwkJaGlzdG9yeS4gIDxTLVRhYj4gb25seSB3b3JrcyB3aXRoIHRoZSBHVUksIG9uIHRoZSBBbWlnYSBhbmQKKwkJd2l0aCBNUy1ET1MuCisJCQkJCQkJKmNfQ1RSTC1BKgorQ1RSTC1BCQlBbGwgbmFtZXMgdGhhdCBtYXRjaCB0aGUgcGF0dGVybiBpbiBmcm9udCBvZiB0aGUgY3Vyc29yIGFyZQorCQlpbnNlcnRlZC4KKwkJCQkJCQkqY19DVFJMLUwqCitDVFJMLUwJCUEgbWF0Y2ggaXMgZG9uZSBvbiB0aGUgcGF0dGVybiBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLiAgSWYKKwkJdGhlcmUgaXMgb25lIG1hdGNoLCBpdCBpcyBpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgcGF0dGVybi4KKwkJSWYgdGhlcmUgYXJlIG11bHRpcGxlIG1hdGNoZXMgdGhlIGxvbmdlc3QgY29tbW9uIHBhcnQgaXMKKwkJaW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIHBhdHRlcm4uICBJZiB0aGUgcmVzdWx0IGlzIHNob3J0ZXIKKwkJdGhhbiB0aGUgcGF0dGVybiwgbm8gY29tcGxldGlvbiBpcyBkb25lLgorCitUaGUgJ3dpbGRjaGFyJyBvcHRpb24gZGVmYXVsdHMgdG8gPFRhYj4gKENUUkwtRSB3aGVuIGluIFZpIGNvbXBhdGlibGUgbW9kZTsgaW4KK2EgcHJldmlvdXMgdmVyc2lvbiA8RXNjPiB3YXMgdXNlZCkuICBJbiB0aGUgcGF0dGVybiBzdGFuZGFyZCB3aWxkY2FyZHMgJyonIGFuZAorJz8nIGFyZSBhY2NlcHRlZC4gICcqJyBtYXRjaGVzIGFueSBzdHJpbmcsICc/JyBtYXRjaGVzIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4KKworSWYgeW91IGxpa2UgdGNzaCdzIGF1dG9saXN0IGNvbXBsZXRpb24sIHlvdSBjYW4gdXNlIHRoaXMgbWFwcGluZzoKKwk6Y25vcmVtYXAgWCA8Qy1MPjxDLUQ+CisoV2hlcmUgWCBpcyB0aGUgY29tbWFuZCBrZXkgdG8gdXNlLCA8Qy1MPiBpcyBDVFJMLUwgYW5kIDxDLUQ+IGlzIENUUkwtRCkKK1RoaXMgd2lsbCBmaW5kIHRoZSBsb25nZXN0IG1hdGNoIGFuZCB0aGVuIGxpc3QgYWxsIG1hdGNoaW5nIGZpbGVzLgorCitJZiB5b3UgbGlrZSB0Y3NoJ3MgYXV0b2xpc3QgY29tcGxldGlvbiwgeW91IGNhbiB1c2UgdGhlICd3aWxkbW9kZScgb3B0aW9uIHRvCitlbXVsYXRlIGl0LiAgRm9yIGV4YW1wbGUsIHRoaXMgbWltaWNzIGF1dG9saXN0PWFtYmlndW91czoKKwk6c2V0IHdpbGRtb2RlPWxvbmdlc3QsbGlzdAorVGhpcyB3aWxsIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2ggd2l0aCB0aGUgZmlyc3QgJ3dpbGRjaGFyJywgdGhlbiBsaXN0IGFsbAorbWF0Y2hpbmcgZmlsZXMgd2l0aCB0aGUgbmV4dC4KKworCQkJCQkJCSpzdWZmaXhlcyoKK0ZvciBmaWxlIG5hbWUgY29tcGxldGlvbiB5b3UgY2FuIHVzZSB0aGUgJ3N1ZmZpeGVzJyBvcHRpb24gdG8gc2V0IGEgcHJpb3JpdHkKK2JldHdlZW4gZmlsZXMgd2l0aCBhbG1vc3QgdGhlIHNhbWUgbmFtZS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGVzLAordGhvc2UgZmlsZXMgd2l0aCBhbiBleHRlbnNpb24gdGhhdCBpcyBpbiB0aGUgJ3N1ZmZpeGVzJyBvcHRpb24gYXJlIGlnbm9yZWQuCitUaGUgZGVmYXVsdCBpcyAiLmJhayx+LC5vLC5oLC5pbmZvLC5zd3AsLm9iaiIsIHdoaWNoIG1lYW5zIHRoYXQgZmlsZXMgZW5kaW5nCitpbiAiLmJhayIsICJ+IiwgIi5vIiwgIi5oIiwgIi5pbmZvIiwgIi5zd3AiIGFuZCAiLm9iaiIgYXJlIHNvbWV0aW1lcyBpZ25vcmVkLgorSXQgaXMgaW1wb3NzaWJsZSB0byBpZ25vcmUgc3VmZml4ZXMgd2l0aCB0d28gZG90cy4gIEV4YW1wbGVzOgorCisgIHBhdHRlcm46CWZpbGVzOgkJCQltYXRjaDoJfgorICAgdGVzdCoJdGVzdC5jIHRlc3QuaCB0ZXN0Lm8JCXRlc3QuYworICAgdGVzdCoJdGVzdC5oIHRlc3QubwkJCXRlc3QuaCBhbmQgdGVzdC5vCisgICB0ZXN0Kgl0ZXN0LmkgdGVzdC5oIHRlc3QuYwkJdGVzdC5pIGFuZCB0ZXN0LmMKKworSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyBmaWxlIChhZnRlciBpZ25vcmluZyB0aGUgb25lcyBtYXRjaGluZwordGhlICdzdWZmaXhlcycgb3B0aW9uKSB0aGUgZmlyc3QgZmlsZSBuYW1lIGlzIGluc2VydGVkLiAgWW91IGNhbiBzZWUgdGhhdAordGhlcmUgaXMgb25seSBvbmUgbWF0Y2ggd2hlbiB5b3UgdHlwZSAnd2lsZGNoYXInIHR3aWNlIGFuZCB0aGUgY29tcGxldGVkCittYXRjaCBzdGF5cyB0aGUgc2FtZS4gIFlvdSBjYW4gZ2V0IHRvIHRoZSBvdGhlciBtYXRjaGVzIGJ5IGVudGVyaW5nCisnd2lsZGNoYXInLCBDVFJMLU4gb3IgQ1RSTC1QLiAgQWxsIGZpbGVzIGFyZSBpbmNsdWRlZCwgYWxzbyB0aGUgb25lcyB3aXRoCitleHRlbnNpb25zIG1hdGNoaW5nIHRoZSAnc3VmZml4ZXMnIG9wdGlvbi4KKworVG8gY29tcGxldGVseSBpZ25vcmUgZmlsZXMgd2l0aCBzb21lIGV4dGVuc2lvbiB1c2UgJ3dpbGRpZ25vcmUnLgorCitUaGUgb2xkIHZhbHVlIG9mIGFuIG9wdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgaGl0dGluZyAnd2lsZGNoYXInIGp1c3QgYWZ0ZXIKK3RoZSAnPScuICBGb3IgZXhhbXBsZSwgdHlwaW5nICd3aWxkY2hhcicgYWZ0ZXIgIjpzZXQgZGlyPSIgd2lsbCBpbnNlcnQgdGhlCitjdXJyZW50IHZhbHVlIG9mICdkaXInLiAgVGhpcyBvdmVycnVsZXMgZmlsZSBuYW1lIGNvbXBsZXRpb24gZm9yIHRoZSBvcHRpb25zCit0aGF0IHRha2UgYSBmaWxlIG5hbWUuCisKK0lmIHlvdSB3b3VsZCBsaWtlIHVzaW5nIDxTLVRhYj4gZm9yIENUUkwtUCBpbiBhbiB4dGVybSwgcHV0IHRoaXMgY29tbWFuZCBpbgoreW91ciAuY3NocmM6ID4KKwl4bW9kbWFwIC1lICJrZXlzeW0gVGFiID0gVGFiIEZpbmQiCitBbmQgdGhpcyBpbiB5b3VyIC52aW1yYzogPgorCTpjbWFwIDxFc2M+WzF+IDxDLVA+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gRXggY29tbWFuZC1saW5lcwkJCQkJKmNtZGxpbmUtbGluZXMqCisKK1RoZSBFeCBjb21tYW5kcyBoYXZlIGEgZmV3IHNwZWNpYWx0aWVzOgorCisJCQkJCQkJKjpxdW90ZSoKKyciJyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIGNhdXNlcyB0aGUgd2hvbGUgbGluZSB0byBiZSBpZ25vcmVkLiAgJyInCithZnRlciBhIGNvbW1hbmQgY2F1c2VzIHRoZSByZXN0IG9mIHRoZSBsaW5lIHRvIGJlIGlnbm9yZWQuICBUaGlzIGNhbiBiZSB1c2VkCit0byBhZGQgY29tbWVudHMuICBFeGFtcGxlOiA+CisJOnNldCBhaQkJInNldCAnYXV0b2luZGVudCcgb3B0aW9uCitJdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIGEgY29tbWVudCB0byBhIHNoZWxsIGNvbW1hbmQgIjohY21kIiBvciB0byB0aGUKKyI6bWFwIiBjb21tYW5kIGFuZCBmcmllbmRzLCBiZWNhdXNlIHRoZXkgc2VlIHRoZSAnIicgYXMgcGFydCBvZiB0aGVpcgorYXJndW1lbnQuCisKKwkJCQkJCQkqOmJhciogKjpcYmFyKgorJ3wnIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmRzLCBzbyB5b3UgY2FuIGdpdmUgbXVsdGlwbGUgY29tbWFuZHMgaW4gb25lCitsaW5lLiAgSWYgeW91IHdhbnQgdG8gdXNlICd8JyBpbiBhbiBhcmd1bWVudCwgcHJlY2VkZSBpdCB3aXRoICdcJy4KKworVGhlc2UgY29tbWFuZHMgc2VlIHRoZSAnfCcgYXMgdGhlaXIgYXJndW1lbnQsIGFuZCBjYW4gdGhlcmVmb3JlIG5vdCBiZQorZm9sbG93ZWQgYnkgYW5vdGhlciBjb21tYW5kOgorICAgIDphcmdkbworICAgIDphdXRvY21kCisgICAgOmJ1ZmRvCisgICAgOmNvbW1hbmQKKyAgICA6Y3Njb3BlCisgICAgOmRlYnVnCisgICAgOmZvbGRkb29wZW4KKyAgICA6Zm9sZGRvY2xvc2VkCisgICAgOmZ1bmN0aW9uCisgICAgOmdsb2JhbAorICAgIDpoZWxwCisgICAgOmhlbHBmaW5kCisgICAgOm1ha2UKKyAgICA6bm9ybWFsCisgICAgOnBlcmwKKyAgICA6cGVybGRvCisgICAgOnByb21wdGZpbmQKKyAgICA6cHJvbXB0cmVwbAorICAgIDpweWZpbGUKKyAgICA6cHl0aG9uCisgICAgOnJlZ2lzdGVycworICAgIDpyZWFkICEKKyAgICA6c2NzY29wZQorICAgIDp0Y2wKKyAgICA6dGNsZG8KKyAgICA6dGNsZmlsZQorICAgIDp2Z2xvYmFsCisgICAgOndpbmRvCisgICAgOndyaXRlICEKKyAgICA6W3JhbmdlXSEKKyAgICBhIHVzZXIgZGVmaW5lZCBjb21tYW5kIHdpdGhvdXQgdGhlICItYmFyIiBhcmd1bWVudCB8OmNvbW1hbmR8CisKK05vdGUgdGhhdCB0aGlzIGlzIGNvbmZ1c2luZyAoaW5oZXJpdGVkIGZyb20gVmkpOiBXaXRoICI6ZyIgdGhlICd8JyBpcyBpbmNsdWRlZAoraW4gdGhlIGNvbW1hbmQsIHdpdGggIjpzIiBpdCBpcyBub3QuCisKK1RvIGJlIGFibGUgdG8gdXNlIGFub3RoZXIgY29tbWFuZCBhbnl3YXksIHVzZSB0aGUgIjpleGVjdXRlIiBjb21tYW5kLgorRXhhbXBsZSAoYXBwZW5kIHRoZSBvdXRwdXQgb2YgImxzIiBhbmQganVtcCB0byB0aGUgZmlyc3QgbGluZSk6ID4KKwk6ZXhlY3V0ZSAnciAhbHMnIHwgJ1sKKworVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogV2hlbiB0aGUgJ2InIGZsYWcgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJywgd2l0aCB0aGUKKyI6bWFwIiBhbmQgIjphYmJyIiBjb21tYW5kcyBhbmQgZnJpZW5kcyBDVFJMLVYgbmVlZHMgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mCisnXCcuICBZb3UgY2FuIGFsc28gdXNlICI8QmFyPiIgaW5zdGVhZC4gIFNlZSBhbHNvIHxtYXBfYmFyfC4KKworRXhhbXBsZXM6ID4KKwk6IWxzIHwgd2MJCXZpZXcgdGhlIG91dHB1dCBvZiB0d28gY29tbWFuZHMKKwk6ciAhbHMgfCB3YwkJaW5zZXJ0IHRoZSBzYW1lIG91dHB1dCBpbiB0aGUgdGV4dAorCTolZy9mb28vcHw+CQltb3ZlcyBhbGwgbWF0Y2hpbmcgbGluZXMgb25lIHNoaWZ0d2lkdGgKKwk6JXMvZm9vL2Jhci98PgkJbW92ZXMgb25lIGxpbmUgb25lIHNoaWZ0d2lkdGgKKwk6bWFwIHEgMTBeVnwJCW1hcCAicSIgdG8gIjEwfCIKKwk6bWFwIHEgMTBcfCBtYXAgXCBsCW1hcCAicSIgdG8gIjEwXCIgYW5kIG1hcCAiXCIgdG8gImwiCisJCQkJCSh3aGVuICdiJyBpcyBwcmVzZW50IGluICdjcG9wdGlvbnMnKQorCitZb3UgY2FuIGFsc28gdXNlIDxOTD4gdG8gc2VwYXJhdGUgY29tbWFuZHMgaW4gdGhlIHNhbWUgd2F5IGFzIHdpdGggJ3wnLiAgVG8KK2luc2VydCBhIDxOTD4gdXNlIENUUkwtViBDVFJMLUouICAiXkAiIHdpbGwgYmUgc2hvd24uICBVc2luZyAnfCcgaXMgdGhlCitwcmVmZXJyZWQgbWV0aG9kLiAgQnV0IGZvciBleHRlcm5hbCBjb21tYW5kcyBhIDxOTD4gbXVzdCBiZSB1c2VkLCBiZWNhdXNlIGEKKyd8JyBpcyBpbmNsdWRlZCBpbiB0aGUgZXh0ZXJuYWwgY29tbWFuZC4gIFRvIGF2b2lkIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgPE5MPgoraXQgbXVzdCBiZSBwcmVjZWRlZCB3aXRoIGEgYmFja3NsYXNoLiAgRXhhbXBsZTogPgorCTpyICFkYXRlPE5MPi1qb2luCitUaGlzIHJlYWRzIHRoZSBjdXJyZW50IGRhdGUgaW50byB0aGUgZmlsZSBhbmQgam9pbnMgaXQgd2l0aCB0aGUgcHJldmlvdXMgbGluZS4KKworTm90ZSB0aGF0IHdoZW4gdGhlIGNvbW1hbmQgYmVmb3JlIHRoZSAnfCcgZ2VuZXJhdGVzIGFuIGVycm9yLCB0aGUgZm9sbG93aW5nCitjb21tYW5kcyB3aWxsIG5vdCBiZSBleGVjdXRlZC4KKworCitCZWNhdXNlIG9mIFZpIGNvbXBhdGliaWxpdHkgdGhlIGZvbGxvd2luZyBzdHJhbmdlIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQ6ID4KKwk6fAkJCXByaW50IGN1cnJlbnQgbGluZSAobGlrZSAiOnAiKQorCTozfAkJCXByaW50IGxpbmUgMyAobGlrZSAiOjNwIikKKwk6MwkJCWdvdG8gbGluZSAzCisKK0EgY29sb24gaXMgYWxsb3dlZCBiZXR3ZWVuIHRoZSByYW5nZSBhbmQgdGhlIGNvbW1hbmQgbmFtZS4gIEl0IGlzIGlnbm9yZWQKKyh0aGlzIGlzIFZpIGNvbXBhdGlibGUpLiAgRm9yIGV4YW1wbGU6ID4KKwk6MSwkOnMvcGF0L3N0cmluZworCitXaGVuIHRoZSBjaGFyYWN0ZXIgJyUnIG9yICcjJyBpcyB1c2VkIHdoZXJlIGEgZmlsZSBuYW1lIGlzIGV4cGVjdGVkLCB0aGV5IGFyZQorZXhwYW5kZWQgdG8gdGhlIGN1cnJlbnQgYW5kIGFsdGVybmF0ZSBmaWxlIG5hbWUgKHNlZSB0aGUgY2hhcHRlciAiZWRpdGluZworZmlsZXMiIHw6XyV8IHw6XyN8KS4KKworRW1iZWRkZWQgc3BhY2VzIGluIGZpbGUgbmFtZXMgYXJlIGFsbG93ZWQgb24gdGhlIEFtaWdhIGlmIG9uZSBmaWxlIG5hbWUgaXMKK2V4cGVjdGVkIGFzIGFyZ3VtZW50LiAgVHJhaWxpbmcgc3BhY2VzIHdpbGwgYmUgaWdub3JlZCwgdW5sZXNzIGVzY2FwZWQgd2l0aCBhCitiYWNrc2xhc2ggb3IgQ1RSTC1WLiAgTm90ZSB0aGF0IHRoZSAiOm5leHQiIGNvbW1hbmQgdXNlcyBzcGFjZXMgdG8gc2VwYXJhdGUKK2ZpbGUgbmFtZXMuICBFc2NhcGUgdGhlIHNwYWNlcyB0byBpbmNsdWRlIHRoZW0gaW4gYSBmaWxlIG5hbWUuICBFeGFtcGxlOiA+CisJOm5leHQgZm9vXCBiYXIgZ29lc1wgdG8gc2Nob29sXAorc3RhcnRzIGVkaXRpbmcgdGhlIHRocmVlIGZpbGVzICJmb28gYmFyIiwgImdvZXMgdG8iIGFuZCAic2Nob29sICIuCisKK1doZW4geW91IHdhbnQgdG8gdXNlIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgJyInIG9yICd8JyBpbiBhIGNvbW1hbmQsIG9yIHdhbnQKK3RvIHVzZSAnJScgb3IgJyMnIGluIGEgZmlsZSBuYW1lLCBwcmVjZWRlIHRoZW0gd2l0aCBhIGJhY2tzbGFzaC4gIFRoZQorYmFja3NsYXNoIGlzIG5vdCByZXF1aXJlZCBpbiBhIHJhbmdlIGFuZCBpbiB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kLgorCisJCQkJCQkJKjpfISoKK1RoZSAnIScgKGJhbmcpIGNoYXJhY3RlciBhZnRlciBhbiBFeCBjb21tYW5kIG1ha2VzIHRoZSBjb21tYW5kIGJlaGF2ZSBpbiBhCitkaWZmZXJlbnQgd2F5LiAgVGhlICchJyBzaG91bGQgYmUgcGxhY2VkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb21tYW5kLCB3aXRob3V0CithbnkgYmxhbmtzIGluIGJldHdlZW4uICBJZiB5b3UgaW5zZXJ0IGJsYW5rcyB0aGUgJyEnIHdpbGwgYmUgc2VlbiBhcyBhbgorYXJndW1lbnQgZm9yIHRoZSBjb21tYW5kLCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZy4gIEZvciBleGFtcGxlOgorCTp3ISBuYW1lCXdyaXRlIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBmaWxlICJuYW1lIiwgb3ZlcndyaXRpbmcKKwkJCWFueSBleGlzdGluZyBmaWxlCisJOncgIW5hbWUJc2VuZCB0aGUgY3VycmVudCBidWZmZXIgYXMgc3RhbmRhcmQgaW5wdXQgdG8gY29tbWFuZAorCQkJIm5hbWUiCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gRXggY29tbWFuZC1saW5lIHJhbmdlcwkqY21kbGluZS1yYW5nZXMqICpbcmFuZ2VdKiAqRTE2KiAqRTQ5MyoKKworU29tZSBFeCBjb21tYW5kcyBhY2NlcHQgYSBsaW5lIHJhbmdlIGluIGZyb250IG9mIHRoZW0uICBUaGlzIGlzIG5vdGVkIGFzCitbcmFuZ2VdLiAgSXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgbGluZSBzcGVjaWZpZXJzLCBzZXBhcmF0ZWQgd2l0aCAnLCcgb3IKKyc7Jy4KKworVGhlIGJhc2ljcyBhcmUgZXhwbGFpbmVkIGluIHNlY3Rpb24gfDEwLjN8IG9mIHRoZSB1c2VyIG1hbnVhbC4KKworCQkJCQkJKjosKiAqOjsqCitXaGVuIHNlcGFyYXRlZCB3aXRoICc7JyB0aGUgY3Vyc29yIHBvc2l0aW9uIHdpbGwgYmUgc2V0IHRvIHRoYXQgbGluZQorYmVmb3JlIGludGVycHJldGluZyB0aGUgbmV4dCBsaW5lIHNwZWNpZmllci4gIFRoaXMgZG9lc24ndCBoYXBwZW4gZm9yICcsJy4KK0V4YW1wbGVzOiA+CisgICA0LC90aGlzIGxpbmUvCis8CWZyb20gbGluZSA0IHRpbGwgbWF0Y2ggd2l0aCAidGhpcyBsaW5lIiBhZnRlciB0aGUgY3Vyc29yIGxpbmUuID4KKyAgIDU7L3RoYXQgbGluZS8KKzwJZnJvbSBsaW5lIDUgdGlsbCBtYXRjaCB3aXRoICJ0aGF0IGxpbmUiIGFmdGVyIGxpbmUgNS4KKworVGhlIGRlZmF1bHQgbGluZSBzcGVjaWZpZXIgZm9yIG1vc3QgY29tbWFuZHMgaXMgdGhlIGN1cnNvciBwb3NpdGlvbiwgYnV0IHRoZQorY29tbWFuZHMgIjp3cml0ZSIgYW5kICI6Z2xvYmFsIiBoYXZlIHRoZSB3aG9sZSBmaWxlICgxLCQpIGFzIGRlZmF1bHQuCisKK0lmIG1vcmUgbGluZSBzcGVjaWZpZXJzIGFyZSBnaXZlbiB0aGFuIHJlcXVpcmVkIGZvciB0aGUgY29tbWFuZCwgdGhlIGZpcnN0CitvbmUocykgd2lsbCBiZSBpZ25vcmVkLgorCitMaW5lIG51bWJlcnMgbWF5IGJlIHNwZWNpZmllZCB3aXRoOgkJKjpyYW5nZSogKkUxNCogKnthZGRyZXNzfSoKKwl7bnVtYmVyfQlhbiBhYnNvbHV0ZSBsaW5lIG51bWJlcgorCS4JCXRoZSBjdXJyZW50IGxpbmUJCQkgICo6LioKKwkkCQl0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlCQkgICo6JCoKKwklCQllcXVhbCB0byAxLCQgKHRoZSBlbnRpcmUgZmlsZSkJCSAgKjolKgorCSd0CQlwb3NpdGlvbiBvZiBtYXJrIHQgKGxvd2VyY2FzZSkJCSAgKjonKgorCSdUCQlwb3NpdGlvbiBvZiBtYXJrIFQgKHVwcGVyY2FzZSk7IHdoZW4gdGhlIG1hcmsgaXMgaW4KKwkJCWFub3RoZXIgZmlsZSBpdCBjYW5ub3QgYmUgdXNlZCBpbiBhIHJhbmdlCisJL3twYXR0ZXJufVsvXQl0aGUgbmV4dCBsaW5lIHdoZXJlIHtwYXR0ZXJufSBtYXRjaGVzCSAgKjovKgorCT97cGF0dGVybn1bP10JdGhlIHByZXZpb3VzIGxpbmUgd2hlcmUge3BhdHRlcm59IG1hdGNoZXMgKjo/KgorCVwvCQl0aGUgbmV4dCBsaW5lIHdoZXJlIHRoZSBwcmV2aW91c2x5IHVzZWQgc2VhcmNoCisJCQlwYXR0ZXJuIG1hdGNoZXMKKwlcPwkJdGhlIHByZXZpb3VzIGxpbmUgd2hlcmUgdGhlIHByZXZpb3VzbHkgdXNlZCBzZWFyY2gKKwkJCXBhdHRlcm4gbWF0Y2hlcworCVwmCQl0aGUgbmV4dCBsaW5lIHdoZXJlIHRoZSBwcmV2aW91c2x5IHVzZWQgc3Vic3RpdHV0ZQorCQkJcGF0dGVybiBtYXRjaGVzCisKK0VhY2ggbWF5IGJlIGZvbGxvd2VkIChzZXZlcmFsIHRpbWVzKSBieSAnKycgb3IgJy0nIGFuZCBhbiBvcHRpb25hbCBudW1iZXIuCitUaGlzIG51bWJlciBpcyBhZGRlZCBvciBzdWJ0cmFjdGVkIGZyb20gdGhlIHByZWNlZGluZyBsaW5lIG51bWJlci4gIElmIHRoZQorbnVtYmVyIGlzIG9taXR0ZWQsIDEgaXMgdXNlZC4KKworVGhlICIvIiBhbmQgIj8iIGFmdGVyIHtwYXR0ZXJufSBhcmUgcmVxdWlyZWQgdG8gc2VwYXJhdGUgdGhlIHBhdHRlcm4gZnJvbQorYW55dGhpbmcgdGhhdCBmb2xsb3dzLgorCitUaGUgIi8iIGFuZCAiPyIgbWF5IGJlIHByZWNlZGVkIHdpdGggYW5vdGhlciBhZGRyZXNzLiAgVGhlIHNlYXJjaCBzdGFydHMgZnJvbQordGhlcmUuICBUaGUgZGlmZmVyZW5jZSBmcm9tIHVzaW5nICc7JyBpcyB0aGF0IHRoZSBjdXJzb3IgaXNuJ3QgbW92ZWQuCitFeGFtcGxlczogPgorCS9wYXQxLy9wYXQyLwlGaW5kIGxpbmUgY29udGFpbmluZyAicGF0MiIgYWZ0ZXIgbGluZSBjb250YWluaW5nCisJCQkicGF0MSIsIHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3IuCisJNzsvcGF0Mi8JRmluZCBsaW5lIGNvbnRhaW5pbmcgInBhdDIiLCBhZnRlciBsaW5lIDcsIGxlYXZpbmcKKwkJCXRoZSBjdXJzb3IgaW4gbGluZSA3LgorCitUaGUge251bWJlcn0gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUuICBXaGVuCit1c2luZyBhIDAgKHplcm8pIHRoaXMgaXMgaW50ZXJwcmV0ZWQgYXMgYSAxIGJ5IG1vc3QgY29tbWFuZHMuICBDb21tYW5kcyB0aGF0Cit1c2UgaXQgYXMgYSBjb3VudCBkbyB1c2UgaXQgYXMgYSB6ZXJvICh8OnRhZ3wsIHw6cG9wfCwgZXRjKS4gIFNvbWUgY29tbWFuZHMKK2ludGVycHJldCB0aGUgemVybyBhcyAiYmVmb3JlIHRoZSBmaXJzdCBsaW5lIiAofDpyZWFkfCwgc2VhcmNoIHBhdHRlcm4sIGV0YykuCisKK0V4YW1wbGVzOiA+CisJLiszCQl0aHJlZSBsaW5lcyBiZWxvdyB0aGUgY3Vyc29yCisJL3RoYXQvKzEJdGhlIGxpbmUgYmVsb3cgdGhlIG5leHQgbGluZSBjb250YWluaW5nICJ0aGF0IgorCS4sJAkJZnJvbSBjdXJyZW50IGxpbmUgdW50aWwgZW5kIG9mIGZpbGUKKwkwOy90aGF0CQl0aGUgZmlyc3QgbGluZSBjb250YWluaW5nICJ0aGF0IiwgYWxzbyBtYXRjaGVzIGluIHRoZQorCQkJZmlyc3QgbGluZS4KKwkxOy90aGF0CQl0aGUgZmlyc3QgbGluZSBhZnRlciBsaW5lIDEgY29udGFpbmluZyAidGhhdCIKKworU29tZSBjb21tYW5kcyBhbGxvdyBmb3IgYSBjb3VudCBhZnRlciB0aGUgY29tbWFuZC4gIFRoaXMgY291bnQgaXMgdXNlZCBhcyB0aGUKK251bWJlciBvZiBsaW5lcyB0byBiZSB1c2VkLCBzdGFydGluZyB3aXRoIHRoZSBsaW5lIGdpdmVuIGluIHRoZSBsYXN0IGxpbmUKK3NwZWNpZmllciAodGhlIGRlZmF1bHQgaXMgdGhlIGN1cnNvciBsaW5lKS4gIFRoZSBjb21tYW5kcyB0aGF0IGFjY2VwdCBhIGNvdW50CithcmUgdGhlIG9uZXMgdGhhdCB1c2UgYSByYW5nZSBidXQgZG8gbm90IGhhdmUgYSBmaWxlIG5hbWUgYXJndW1lbnQgKGJlY2F1c2UKK2EgZmlsZSBuYW1lIGNhbiBhbHNvIGJlIGEgbnVtYmVyKS4KKworRXhhbXBsZXM6ID4KKwk6cy94L1gvZyA1CXN1YnN0aXR1dGUgJ3gnIGJ5ICdYJyBpbiB0aGUgY3VycmVudCBsaW5lIGFuZCBmb3VyCisJCQlmb2xsb3dpbmcgbGluZXMKKwk6MjNkIDQJCWRlbGV0ZSBsaW5lcyAyMywgMjQsIDI1IGFuZCAyNgorCisKK0ZvbGRzIGFuZCBSYW5nZQorCitXaGVuIGZvbGRzIGFyZSBhY3RpdmUgdGhlIGxpbmUgbnVtYmVycyBhcmUgcm91bmRlZCBvZmYgdG8gaW5jbHVkZSB0aGUgd2hvbGUKK2Nsb3NlZCBmb2xkLiAgU2VlIHxmb2xkLWJlaGF2aW9yfC4KKworCitSZXZlcnNlIFJhbmdlCisKK0EgcmFuZ2Ugc2hvdWxkIGhhdmUgdGhlIGxvd2VyIGxpbmUgbnVtYmVyIGZpcnN0LiAgSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIFZpbQord2lsbCBhc2sgeW91IGlmIGl0IHNob3VsZCBzd2FwIHRoZSBsaW5lIG51bWJlcnMuICBUaGlzIGlzIG5vdCBkb25lIHdpdGhpbiB0aGUKK2dsb2JhbCBjb21tYW5kICI6ZyIuCisKKworQ291bnQgYW5kIFJhbmdlCQkJCQkJKk46KgorCitXaGVuIGdpdmluZyBhIGNvdW50IGJlZm9yZSBlbnRlcmluZyAiOiIsIHRoaXMgaXMgdHJhbnNsYXRlZCBpbnRvOgorCQk6LiwuKyhjb3VudCAtIDEpCitJbiB3b3JkczogVGhlICdjb3VudCcgbGluZXMgYXQgYW5kIGFmdGVyIHRoZSBjdXJzb3IuICBFeGFtcGxlOiBUbyBkZWxldGUKK3RocmVlIGxpbmVzOiA+CisJCTM6ZDxDUj4JCWlzIHRyYW5zbGF0ZWQgaW50bzogLiwuKzJkPENSPgorPAorCitWaXN1YWwgTW9kZSBhbmQgUmFuZ2UJCQkJCSp2XzoqCisKK3tWaXN1YWx9OglTdGFydHMgYSBjb21tYW5kLWxpbmUgd2l0aCB0aGUgVmlzdWFsIHNlbGVjdGVkIGxpbmVzIGFzIGEKKwkJcmFuZ2UuICBUaGUgY29kZSAiOic8LCc+IiBpcyB1c2VkIGZvciB0aGlzIHJhbmdlLCB3aGljaCBtYWtlcworCQlpdCBwb3NzaWJsZSB0byBzZWxlY3QgYSBzaW1pbGFyIGxpbmUgZnJvbSB0aGUgY29tbWFuZC1saW5lCisJCWhpc3RvcnkgZm9yIHJlcGVhdGluZyBhIGNvbW1hbmQgb24gZGlmZmVyZW50IFZpc3VhbGx5IHNlbGVjdGVkCisJCWxpbmVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIEV4IHNwZWNpYWwgY2hhcmFjdGVycwkJCQkqY21kbGluZS1zcGVjaWFsKgorCitJbiBFeCBjb21tYW5kcywgYXQgcGxhY2VzIHdoZXJlIGEgZmlsZSBuYW1lIGNhbiBiZSB1c2VkLCB0aGUgZm9sbG93aW5nCitjaGFyYWN0ZXJzIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcuICBUaGVzZSBjYW4gYWxzbyBiZSB1c2VkIGluIHRoZSBleHByZXNzaW9uCitmdW5jdGlvbiBleHBhbmQoKSB8ZXhwYW5kKCl8LgorCSUJaXMgcmVwbGFjZWQgd2l0aCB0aGUgY3VycmVudCBmaWxlIG5hbWUJCQkqOl8lKgorCSMJaXMgcmVwbGFjZWQgd2l0aCB0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZQkJKjpfIyoKKwkjbgkod2hlcmUgbiBpcyBhIG51bWJlcikgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZmlsZSBuYW1lIG9mCisJCWJ1ZmZlciBuLiAgIiMwIiBpcyB0aGUgc2FtZSBhcyAiIyIKKwkjIwlpcyByZXBsYWNlZCB3aXRoIGFsbCBuYW1lcyBpbiB0aGUgYXJndW1lbnQgbGlzdAkJKjpfIyMqCisJCWNvbmNhdGVuYXRlZCwgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIEVhY2ggc3BhY2UgaW4gYSBuYW1lCisJCWlzIHByZWNlZGVkIHdpdGggYSBiYWNrc2xhc2guCitOb3RlIHRoYXQgdGhlc2UgZ2l2ZSB0aGUgZmlsZSBuYW1lIGFzIGl0IHdhcyB0eXBlZC4gIElmIGFuIGFic29sdXRlIHBhdGggaXMKK25lZWRlZCAod2hlbiB1c2luZyB0aGUgZmlsZSBuYW1lIGZyb20gYSBkaWZmZXJlbnQgZGlyZWN0b3J5KSwgeW91IG5lZWQgdG8gYWRkCisiOnAiLiAgU2VlIHxmaWxlbmFtZS1tb2RpZmllcnN8LgorTm90ZSB0aGF0IGJhY2tzbGFzaGVzIGFyZSBpbnNlcnRlZCBiZWZvcmUgc3BhY2VzLCBzbyB0aGF0IHRoZSBjb21tYW5kIHdpbGwKK2NvcnJlY3RseSBpbnRlcnByZXQgdGhlIGZpbGUgbmFtZS4gIEJ1dCB0aGlzIGRvZXNuJ3QgaGFwcGVuIGZvciBzaGVsbAorY29tbWFuZHMuICBGb3IgdGhvc2UgeW91IHByb2JhYmx5IGhhdmUgdG8gdXNlIHF1b3RlczogPgorCTohbHMgIiUiCisJOnIgIXNwZWxsICIlIgorCitUbyBhdm9pZCB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mICclJyBhbmQgJyMnIGluc2VydCBhIGJhY2tzbGFzaCBiZWZvcmUgaXQuCitEZXRhaWw6IFRoZSBzcGVjaWFsIG1lYW5pbmcgaXMgYWx3YXlzIGVzY2FwZWQgd2hlbiB0aGVyZSBpcyBhIGJhY2tzbGFzaCBiZWZvcmUKK2l0LCBubyBtYXR0ZXIgaG93IG1hbnkgYmFja3NsYXNoZXMuCisJeW91IHR5cGU6CQlyZXN1bHQJfgorCSAgICMJCQlhbHRlcm5hdGUuZmlsZQorCSAgIFwjCQkJIworCSAgIFxcIwkJCVwjCisKKwkJCSAgICAgICAqOjxjd29yZD4qICo6PGNXT1JEPiogKjo8Y2ZpbGU+KiAqPGNmaWxlPioKKwkJCSAgICAgICAqOjxzZmlsZT4qICo8c2ZpbGU+KiAqOjxhZmlsZT4qICo8YWZpbGU+KgorCQkJICAgICAgICo6PGFidWY+KiAqPGFidWY+KiAqOjxhbWF0Y2g+KiAqPGFtYXRjaD4qCisJCQkgICAgICAgKkU0OTUqICpFNDk2KiAqRTQ5NyogKkU0OTgqICpFNDk5KiAqRTUwMCoKK05vdGU6IHRoZXNlIGFyZSB0eXBlZCBsaXRlcmFsbHksIHRoZXkgYXJlIG5vdCBzcGVjaWFsIGtleXMhCisJPGN3b3JkPiAgICBpcyByZXBsYWNlZCB3aXRoIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IgKGxpa2UgfHN0YXJ8KQorCTxjV09SRD4gICAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgV09SRCB1bmRlciB0aGUgY3Vyc29yIChzZWUgfFdPUkR8KQorCTxjZmlsZT4gICAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcGF0aCBuYW1lIHVuZGVyIHRoZSBjdXJzb3IgKGxpa2Ugd2hhdAorCQkgICB8Z2Z8IHVzZXMpCisJPGFmaWxlPiAgICB3aGVuIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMsIGlzIHJlcGxhY2VkIHdpdGggdGhlIGZpbGUgbmFtZQorCQkgICBmb3IgYSBmaWxlIHJlYWQgb3Igd3JpdGUKKwk8YWJ1Zj4gICAgIHdoZW4gZXhlY3V0aW5nIGF1dG9jb21tYW5kcywgaXMgcmVwbGFjZWQgd2l0aCB0aGUgY3VycmVudGx5CisJCSAgIGVmZmVjdGl2ZSBidWZmZXIgbnVtYmVyIChmb3IgIjpyIGZpbGUiIGl0IGlzIHRoZSBjdXJyZW50CisJCSAgIGJ1ZmZlciwgdGhlIGZpbGUgYmVpbmcgcmVhZCBpcyBub3QgaW4gYSBidWZmZXIpLgorCTxhbWF0Y2g+ICAgd2hlbiBleGVjdXRpbmcgYXV0b2NvbW1hbmRzLCBpcyByZXBsYWNlZCB3aXRoIHRoZSBtYXRjaCBmb3IKKwkJICAgd2hpY2ggdGhpcyBhdXRvY29tbWFuZCB3YXMgZXhlY3V0ZWQuICBJdCBkaWZmZXJzIGZvcm0KKwkJICAgPGFmaWxlPiBvbmx5IHdoZW4gdGhlIGZpbGUgbmFtZSBpc24ndCB1c2VkIHRvIG1hdGNoIHdpdGgKKwkJICAgKGZvciBGaWxlVHlwZSBhbmQgU3ludGF4IGV2ZW50cykuCisJPHNmaWxlPiAgICB3aGVuIGV4ZWN1dGluZyBhICI6c291cmNlIiBjb21tYW5kLCBpcyByZXBsYWNlZCB3aXRoIHRoZQorCQkgICBmaWxlIG5hbWUgb2YgdGhlIHNvdXJjZWQgZmlsZTsKKwkJICAgd2hlbiBleGVjdXRpbmcgYSBmdW5jdGlvbiwgaXMgcmVwbGFjZWQgd2l0aAorCQkgICAiZnVuY3Rpb24ge2Z1bmN0aW9uLW5hbWV9IjsgZnVuY3Rpb24gY2FsbCBuZXN0aW5nIGlzCisJCSAgIGluZGljYXRlZCBsaWtlIHRoaXM6CisJCSAgICJmdW5jdGlvbiB7ZnVuY3Rpb24tbmFtZTF9Li57ZnVuY3Rpb24tbmFtZTJ9Ii4gIE5vdGUgdGhhdAorCQkgICBmaWxlbmFtZS1tb2RpZmllcnMgYXJlIHVzZWxlc3Mgd2hlbiA8c2ZpbGU+IGlzIHVzZWQgaW5zaWRlCisJCSAgIGEgZnVuY3Rpb24uCisKKwkJCQkJCQkgKmZpbGVuYW1lLW1vZGlmaWVycyoKKwkgKjpfJToqICo6OjgqICo6OnAqICo6Oi4qICo6On4qICo6OmgqICo6OnQqICo6OnIqICo6OmUqICo6OnMqICo6OmdzKgorVGhlIGZpbGUgbmFtZSBtb2RpZmllcnMgY2FuIGJlIHVzZWQgYWZ0ZXIgIiUiLCAiIyIsICIjbiIsICI8Y2ZpbGU+IiwgIjxzZmlsZT4iLAorIjxhZmlsZT4iIG9yICI8YWJ1Zj4iLiAgVGhleSBhcmUgYWxzbyB1c2VkIHdpdGggdGhlIHxmbmFtZW1vZGlmeSgpfCBmdW5jdGlvbi4KK1RoZXNlIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gVmltIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrbW9kaWZ5X2ZuYW1lfAorZmVhdHVyZS4KK1RoZXNlIG1vZGlmaWVycyBjYW4gYmUgZ2l2ZW4sIGluIHRoaXMgb3JkZXI6CisJOnAJTWFrZSBmaWxlIG5hbWUgYSBmdWxsIHBhdGguICBNdXN0IGJlIHRoZSBmaXJzdCBtb2RpZmllci4gIEFsc28KKwkJY2hhbmdlcyAifi8iIChhbmQgIn51c2VyLyIgZm9yIFVuaXggYW5kIFZNUykgdG8gdGhlIHBhdGggZm9yCisJCXRoZSBob21lIGRpcmVjdG9yeS4gIElmIHRoZSBuYW1lIGlzIGEgZGlyZWN0b3J5IGEgcGF0aAorCQlzZXBhcmF0b3IgaXMgYWRkZWQgYXQgdGhlIGVuZC4gIEZvciBhIGZpbGUgbmFtZSB0aGF0IGRvZXMgbm90CisJCWV4aXN0IGFuZCBkb2VzIG5vdCBoYXZlIGFuIGFic29sdXRlIHBhdGggdGhlIHJlc3VsdCBpcworCQl1bnByZWRpY3RhYmxlLgorCTo4CUNvbnZlcnRzIHRoZSBwYXRoIHRvIDguMyBzaG9ydCBmb3JtYXQgKGN1cnJlbnRseSBvbmx5IG9uCisJCXdpbjMyKS4gIFdpbGwgYWN0IG9uIGFzIG11Y2ggb2YgYSBwYXRoIHRoYXQgaXMgYW4gZXhpc3RpbmcKKwkJcGF0aC4KKwk6fglSZWR1Y2UgZmlsZSBuYW1lIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgaWYKKwkJcG9zc2libGUuICBGaWxlIG5hbWUgaXMgdW5tb2RpZmllZCBpZiBpdCBpcyBub3QgYmVsb3cgdGhlIGhvbWUKKwkJZGlyZWN0b3J5LgorCTouCVJlZHVjZSBmaWxlIG5hbWUgdG8gYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3RvcnksIGlmCisJCXBvc3NpYmxlLiAgRmlsZSBuYW1lIGlzIHVubW9kaWZpZWQgaWYgaXQgaXMgbm90IGJlbG93IHRoZQorCQljdXJyZW50IGRpcmVjdG9yeS4KKwkJRm9yIG1heGltdW0gc2hvcnRuZXNzLCB1c2UgIjp+Oi4iLgorCTpoCUhlYWQgb2YgdGhlIGZpbGUgbmFtZSAodGhlIGxhc3QgY29tcG9uZW50IGFuZCBhbnkgc2VwYXJhdG9ycworCQlyZW1vdmVkKS4gIENhbm5vdCBiZSB1c2VkIHdpdGggOmUsIDpyIG9yIDp0LgorCQlDYW4gYmUgcmVwZWF0ZWQgdG8gcmVtb3ZlIHNldmVyYWwgY29tcG9uZW50cyBhdCB0aGUgZW5kLgorCQlXaGVuIHRoZSBmaWxlIG5hbWUgZW5kcyBpbiBhIHBhdGggc2VwYXJhdG9yLCBvbmx5IHRoZSBwYXRoCisJCXNlcGFyYXRvciBpcyByZW1vdmVkLiAgVGh1cyAiOnA6aCIgb24gYSBkaXJlY3RvcnkgbmFtZSByZXN1bHRzCisJCW9uIHRoZSBkaXJlY3RvcnkgbmFtZSBpdHNlbGYgKHdpdGhvdXQgdHJhaWxpbmcgc2xhc2gpLgorCQlXaGVuIHRoZSBmaWxlIG5hbWUgaXMgYW4gYWJzb2x1dGUgcGF0aCAoc3RhcnRzIHdpdGggIi8iIGZvcgorCQlVbml4OyAieDpcIiBmb3IgTVMtRE9TLCBXSU4zMiwgT1MvMjsgImRyaXZlOiIgZm9yIEFtaWdhKSwgdGhhdAorCQlwYXJ0IGlzIG5vdCByZW1vdmVkLiAgV2hlbiB0aGVyZSBpcyBubyBoZWFkIChwYXRoIGlzIHJlbGF0aXZlCisJCXRvIGN1cnJlbnQgZGlyZWN0b3J5KSB0aGUgcmVzdWx0IGlzIGVtcHR5LgorCTp0CVRhaWwgb2YgdGhlIGZpbGUgbmFtZSAobGFzdCBjb21wb25lbnQgb2YgdGhlIG5hbWUpLiAgTXVzdAorCQlwcmVjZWRlIGFueSA6ciBvciA6ZS4KKwk6cglSb290IG9mIHRoZSBmaWxlIG5hbWUgKHRoZSBsYXN0IGV4dGVuc2lvbiByZW1vdmVkKS4gIFdoZW4KKwkJdGhlcmUgaXMgb25seSBhbiBleHRlbnNpb24gKGZpbGUgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoICcuJywKKwkJZS5nLiwgIi52aW1yYyIpLCBpdCBpcyBub3QgcmVtb3ZlZC4gIENhbiBiZSByZXBlYXRlZCB0byByZW1vdmUKKwkJc2V2ZXJhbCBleHRlbnNpb25zIChsYXN0IG9uZSBmaXJzdCkuCisJOmUJRXh0ZW5zaW9uIG9mIHRoZSBmaWxlIG5hbWUuICBPbmx5IG1ha2VzIHNlbnNlIHdoZW4gdXNlZCBhbG9uZS4KKwkJV2hlbiB0aGVyZSBpcyBubyBleHRlbnNpb24gdGhlIHJlc3VsdCBpcyBlbXB0eS4KKwkJV2hlbiB0aGVyZSBpcyBvbmx5IGFuIGV4dGVuc2lvbiAoZmlsZSBuYW1lIHRoYXQgc3RhcnRzIHdpdGgKKwkJJy4nKSwgdGhlIHJlc3VsdCBpcyBlbXB0eS4gIENhbiBiZSByZXBlYXRlZCB0byBpbmNsdWRlIG1vcmUKKwkJZXh0ZW5zaW9ucy4gIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIGV4dGVuc2lvbnMgKGJ1dCBhdCBsZWFzdAorCQlvbmUpIGFzIG11Y2ggYXMgcG9zc2libGUgYXJlIGluY2x1ZGVkLgorCTpzP3BhdD9zdWI/CisJCVN1YnN0aXR1dGUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgInBhdCIgd2l0aCAic3ViIi4gIFRoaXMKKwkJd29ya3MgbGlrZSB0aGUgfDpzfCBjb21tYW5kLiAgInBhdCIgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCisJCUFueSBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgZm9yICc/JywgYnV0IGl0IG11c3Qgbm90IG9jY3VyIGluCisJCSJwYXQiIG9yICJzdWIiLgorCQlBZnRlciB0aGlzLCB0aGUgcHJldmlvdXMgbW9kaWZpZXJzIGNhbiBiZSB1c2VkIGFnYWluLiAgRm9yCisJCWV4YW1wbGUgIjpwIiwgdG8gbWFrZSBhIGZ1bGwgcGF0aCBhZnRlciB0aGUgc3Vic3RpdHV0aW9uLgorCTpncz9wYXQ/c3ViPworCQlTdWJzdGl0dXRlIGFsbCBvY2N1cnJlbmNlcyBvZiAicGF0aCIgd2l0aCAic3ViIi4gIE90aGVyd2lzZQorCQl0aGlzIHdvcmtzIGxpa2UgIjpzIi4KKworRXhhbXBsZXMsIHdoZW4gdGhlIGZpbGUgbmFtZSBpcyAic3JjL3ZlcnNpb24uYyIsIGN1cnJlbnQgZGlyCisiL2hvbWUvbW9vbC92aW0iOiA+CisgIDpwCQkJL2hvbWUvbW9vbC92aW0vc3JjL3ZlcnNpb24uYworICA6cDouCQkJCSAgICAgICBzcmMvdmVyc2lvbi5jCisgIDpwOn4JCQkJIH4vdmltL3NyYy92ZXJzaW9uLmMKKyAgOmgJCQkJICAgICAgIHNyYworICA6cDpoCQkJL2hvbWUvbW9vbC92aW0vc3JjCisgIDpwOmg6aAkJL2hvbWUvbW9vbC92aW0KKyAgOnQJCQkJCSAgIHZlcnNpb24uYworICA6cDp0CQkJCQkgICB2ZXJzaW9uLmMKKyAgOnIJCQkJICAgICAgIHNyYy92ZXJzaW9uCisgIDpwOnIJCQkvaG9tZS9tb29sL3ZpbS9zcmMvdmVyc2lvbgorICA6dDpyCQkJCQkgICB2ZXJzaW9uCisgIDplCQkJCQkJICAgYworICA6cz92ZXJzaW9uP21haW4/CQkgICAgICAgc3JjL21haW4uYworICA6cz92ZXJzaW9uP21haW4/OnAJL2hvbWUvbW9vbC92aW0vc3JjL21haW4uYworICA6cDpncz8vP1xcPwkJXGhvbWVcbW9vbFx2aW1cc3JjXHZlcnNpb24uYworCitFeGFtcGxlcywgd2hlbiB0aGUgZmlsZSBuYW1lIGlzICJzcmMvdmVyc2lvbi5jLmd6IjogPgorICA6cAkJCS9ob21lL21vb2wvdmltL3NyYy92ZXJzaW9uLmMuZ3oKKyAgOmUJCQkJCQkgICAgIGd6CisgIDplOmUJCQkJCQkgICBjLmd6CisgIDplOmU6ZQkJCQkJICAgYy5negorICA6ZTplOnIJCQkJCSAgIGMKKyAgOnIJCQkJICAgICAgIHNyYy92ZXJzaW9uLmMKKyAgOnI6ZQkJCQkJCSAgIGMKKyAgOnI6cgkJCQkgICAgICAgc3JjL3ZlcnNpb24KKyAgOnI6cjpyCQkJICAgICAgIHNyYy92ZXJzaW9uCis8CisJCQkJCSpleHRlbnNpb24tcmVtb3ZhbCogKjpfJTwqCitJZiBhICI8IiBpcyBhcHBlbmRlZCB0byAiJSIsICIjIiwgIiNuIiBvciAiQ1RSTC1WIHAiIHRoZSBleHRlbnNpb24gb2YgdGhlIGZpbGUKK25hbWUgaXMgcmVtb3ZlZCAoZXZlcnl0aGluZyBhZnRlciBhbmQgaW5jbHVkaW5nIHRoZSBsYXN0ICcuJyBpbiB0aGUgZmlsZQorbmFtZSkuICBUaGlzIGlzIGluY2x1ZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb24gMy4wLCB0aGUKKyI6ciIgZm9ybSBpcyBwcmVmZXJyZWQuICBFeGFtcGxlczogPgorCisJJQkJY3VycmVudCBmaWxlIG5hbWUKKwklPAkJY3VycmVudCBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24KKwkjCQlhbHRlcm5hdGUgZmlsZSBuYW1lIGZvciBjdXJyZW50IHdpbmRvdworCSM8CQlpZGVtLCB3aXRob3V0IGV4dGVuc2lvbgorCSMzMQkJYWx0ZXJuYXRlIGZpbGUgbnVtYmVyIDMxCisJIzMxPAkJaWRlbSwgd2l0aG91dCBleHRlbnNpb24KKwk8Y3dvcmQ+CQl3b3JkIHVuZGVyIHRoZSBjdXJzb3IKKwk8Y1dPUkQ+CQlXT1JEIHVuZGVyIHRoZSBjdXJzb3IgKHNlZSB8V09SRHwpCisJPGNmaWxlPgkJcGF0aCBuYW1lIHVuZGVyIHRoZSBjdXJzb3IKKwk8Y2ZpbGU+PAlpZGVtLCB3aXRob3V0IGV4dGVuc2lvbgorCitOb3RlOiBXaGVyZSBhIGZpbGUgbmFtZSBpcyBleHBlY3RlZCB3aWxkY2FyZHMgZXhwYW5zaW9uIGlzIGRvbmUuICBPbiBVbml4IHRoZQorc2hlbGwgaXMgdXNlZCBmb3IgdGhpcywgdW5sZXNzIGl0IGNhbiBiZSBkb25lIGludGVybmFsbHkgKGZvciBzcGVlZCkuCitCYWNrdGlja3MgYWxzbyB3b3JrLCBsaWtlIGluID4KKwk6biBgZWNobyAqLmNgCisoYmFja3RpY2sgZXhwYW5zaW9uIGlzIG5vdCBwb3NzaWJsZSBpbiB8cmVzdHJpY3RlZC1tb2RlfCkKK0J1dCBleHBhbnNpb24gaXMgb25seSBkb25lIGlmIHRoZXJlIGFyZSBhbnkgd2lsZGNhcmRzIGJlZm9yZSBleHBhbmRpbmcgdGhlCisnJScsICcjJywgZXRjLi4gIFRoaXMgYXZvaWRzIGV4cGFuZGluZyB3aWxkY2FyZHMgaW5zaWRlIGEgZmlsZSBuYW1lLiAgSWYgeW91Cit3YW50IHRvIGV4cGFuZCB0aGUgcmVzdWx0IG9mIDxjZmlsZT4sIGFkZCBhIHdpbGRjYXJkIGNoYXJhY3RlciB0byBpdC4KK0V4YW1wbGVzOiAoYWx0ZXJuYXRlIGZpbGUgbmFtZSBpcyAiP3JlYWRtZT8iKQorCWNvbW1hbmQJCWV4cGFuZHMgdG8gIH4KKwk6ZSAjCQk6ZSA/cmVhZG1lPworCTplIGBscyAjYAk6ZSB7ZmlsZXMgbWF0Y2hpbmcgIj9yZWFkbWU/In0KKwk6ZSAjLioJCTplIHtmaWxlcyBtYXRjaGluZyAiP3JlYWRtZT8uKiJ9CisJOmNkIDxjZmlsZT4JOmNkIHtmaWxlIG5hbWUgdW5kZXIgY3Vyc29yfQorCTpjZCA8Y2ZpbGU+Kgk6Y2Qge2ZpbGUgbmFtZSB1bmRlciBjdXJzb3IgcGx1cyAiKiIgYW5kIHRoZW4gZXhwYW5kZWR9CisKK1doZW4gdGhlIGV4cGFuZGVkIGFyZ3VtZW50IGNvbnRhaW5zIGEgIiEiIGFuZCBpdCBpcyB1c2VkIGZvciBhIHNoZWxsIGNvbW1hbmQKKygiOiFjbWQiLCAiOnIgIWNtZCIgb3IgIjp3ICFjbWQiKSwgaXQgaXMgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoIHRvIGF2b2lkIGl0CitiZWluZyBleHBhbmRlZCBpbnRvIGEgcHJldmlvdXNseSB1c2VkIGNvbW1hbmQuICBXaGVuIHRoZSAnc2hlbGwnIG9wdGlvbgorY29udGFpbnMgInNoIiwgdGhpcyBpcyBkb25lIHR3aWNlLCB0byBhdm9pZCB0aGUgc2hlbGwgdHJ5aW5nIHRvIGV4cGFuZCB0aGUKKyIhIi4KKworCQkJCQkJCSpmaWxlbmFtZS1iYWNrc2xhc2gqCitGb3IgZmlsZXN5c3RlbXMgdGhhdCB1c2UgYSBiYWNrc2xhc2ggYXMgZGlyZWN0b3J5IHNlcGFyYXRvciAoTVMtRE9TLCBXaW5kb3dzLAorT1MvMiksIGl0J3MgYSBiaXQgZGlmZmljdWx0IHRvIHJlY29nbml6ZSBhIGJhY2tzbGFzaCB0aGF0IGlzIHVzZWQgdG8gZXNjYXBlCit0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIHRoZSBuZXh0IGNoYXJhY3Rlci4gIFRoZSBnZW5lcmFsIHJ1bGUgaXM6IElmIHRoZQorYmFja3NsYXNoIGlzIGZvbGxvd2VkIGJ5IGEgbm9ybWFsIGZpbGUgbmFtZSBjaGFyYWN0ZXIsIGl0IGRvZXMgbm90IGhhdmUgYQorc3BlY2lhbCBtZWFuaW5nLiAgVGhlcmVmb3JlICJcZmlsZVxmb28iIGlzIGEgdmFsaWQgZmlsZSBuYW1lLCB5b3UgZG9uJ3QgaGF2ZQordG8gdHlwZSB0aGUgYmFja3NsYXNoIHR3aWNlLgorCitBbiBleGNlcHRpb24gaXMgdGhlICckJyBzaWduLiAgSXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgaW4gYSBmaWxlIG5hbWUuICBCdXQKK3RvIGF2b2lkIGEgZmlsZSBuYW1lIGxpa2UgIiRob21lIiB0byBiZSBpbnRlcnByZXRlZCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSwKK2l0IG5lZWRzIHRvIGJlIHByZWNlZGVkIGJ5IGEgYmFja3NsYXNoLiAgVGhlcmVmb3JlIHlvdSBuZWVkIHRvIHVzZSAiL1wkaG9tZSIKK2ZvciB0aGUgZmlsZSAiJGhvbWUiIGluIHRoZSByb290IGRpcmVjdG9yeS4gIEEgZmV3IGV4YW1wbGVzOgorCisJRklMRSBOQU1FCUlOVEVSUFJFVEVEIEFTCX4KKwkkaG9tZQkJZXhwYW5kZWQgdG8gdmFsdWUgb2YgZW52aXJvbm1lbnQgdmFyICRob21lCisJXCRob21lCQlmaWxlICIkaG9tZSIgaW4gY3VycmVudCBkaXJlY3RvcnkKKwkvXCRob21lCQlmaWxlICIkaG9tZSIgaW4gcm9vdCBkaXJlY3RvcnkKKwlcXCRob21lCQlmaWxlICJcXCIsIGZvbGxvd2VkIGJ5IGV4cGFuZGVkICRob21lCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gQ29tbWFuZC1saW5lIHdpbmRvdwkJCQkqY21kbGluZS13aW5kb3cqICpjbWR3aW4qCisKK0luIHRoZSBjb21tYW5kLWxpbmUgd2luZG93IHRoZSBjb21tYW5kIGxpbmUgY2FuIGJlIGVkaXRlZCBqdXN0IGxpa2UgZWRpdGluZwordGV4dCBpbiBhbnkgd2luZG93LiAgSXQgaXMgYSBzcGVjaWFsIGtpbmQgb2Ygd2luZG93LCBiZWNhdXNlIHlvdSBjYW5ub3QgbGVhdmUKK2l0IGluIGEgbm9ybWFsIHdheS4KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjbWRsaW5lX2hpc3R8IG9yIHwrdmVydHNwbGl0fAorZmVhdHVyZX0KKworCitPUEVOCisKK1RoZXJlIGFyZSB0d28gd2F5cyB0byBvcGVuIHRoZSBjb21tYW5kLWxpbmUgd2luZG93OgorMS4gRnJvbSBDb21tYW5kLWxpbmUgbW9kZSwgdXNlIHRoZSBrZXkgc3BlY2lmaWVkIHdpdGggdGhlICdjZWRpdCcgb3B0aW9uLgorICAgVGhlIGRlZmF1bHQgaXMgQ1RSTC1GIHdoZW4gJ2NvbXBhdGlibGUnIGlzIG5vdCBzZXQuCisyLiBGcm9tIE5vcm1hbCBtb2RlLCB1c2UgdGhlICJxOiIsICJxLyIgb3IgInE/IiBjb21tYW5kLiAgKnE6KiAqcS8qICpxPyoKKyAgIFRoaXMgc3RhcnRzIGVkaXRpbmcgYW4gRXggY29tbWFuZC1saW5lICgicToiKSBvciBzZWFyY2ggc3RyaW5nICgicS8iIG9yCisgICAicT8iKS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBwb3NzaWJsZSB3aGlsZSByZWNvcmRpbmcgaXMgaW4gcHJvZ3Jlc3MgKHRoZQorICAgInEiIHN0b3BzIHJlY29yZGluZyB0aGVuKS4KKworV2hlbiB0aGUgd2luZG93IG9wZW5zIGl0IGlzIGZpbGxlZCB3aXRoIHRoZSBjb21tYW5kLWxpbmUgaGlzdG9yeS4gIFRoZSBsYXN0CitsaW5lIGNvbnRhaW5zIHRoZSBjb21tYW5kIGFzIHR5cGVkIHNvIGZhci4gIFRoZSBsZWZ0IGNvbHVtbiB3aWxsIHNob3cgYQorY2hhcmFjdGVyIHRoYXQgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIGNvbW1hbmQtbGluZSBiZWluZyBlZGl0ZWQsIHNlZQorfGNtZHdpbi1jaGFyfC4KKworVmltIHdpbGwgYmUgaW4gTm9ybWFsIG1vZGUgd2hlbiB0aGUgZWRpdG9yIGlzIG9wZW5lZCwgZXhjZXB0IHdoZW4gJ2luc2VydG1vZGUnCitpcyBzZXQuCisKK1RoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdyBpcyBzcGVjaWZpZWQgd2l0aCAnY21kd2luaGVpZ2h0JyAob3Igc21hbGxlciBpZiB0aGVyZQoraXMgbm8gcm9vbSkuICBUaGUgd2luZG93IGlzIGFsd2F5cyBmdWxsIHdpZHRoIGFuZCBpcyBwb3NpdGlvbmVkIGp1c3QgYWJvdmUgdGhlCitjb21tYW5kLWxpbmUuCisKKworRURJVAorCitZb3UgY2FuIG5vdyB1c2UgY29tbWFuZHMgdG8gbW92ZSBhcm91bmQgYW5kIGVkaXQgdGhlIHRleHQgaW4gdGhlIHdpbmRvdy4gIEJvdGgKK2luIE5vcm1hbCBtb2RlIGFuZCBJbnNlcnQgbW9kZS4KKworSXQgaXMgcG9zc2libGUgdG8gdXNlICI6IiwgIi8iIGFuZCBvdGhlciBjb21tYW5kcyB0aGF0IHVzZSB0aGUgY29tbWFuZC1saW5lLAorYnV0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIG9wZW4gYW5vdGhlciBjb21tYW5kLWxpbmUgd2luZG93IHRoZW4uICBUaGVyZSBpcyBubworbmVzdGluZy4KKwkJCQkJCQkqRTExKgorVGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgaXMgbm90IGEgbm9ybWFsIHdpbmRvdy4gIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBtb3ZlIHRvCithbm90aGVyIHdpbmRvdyBvciBlZGl0IGFub3RoZXIgYnVmZmVyLiAgQWxsIGNvbW1hbmRzIHRoYXQgd291bGQgZG8gdGhpcyBhcmUKK2Rpc2FibGVkIGluIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LiAgT2YgY291cnNlIGl0IF9pc18gcG9zc2libGUgdG8gZXhlY3V0ZQorYW55IGNvbW1hbmQgdGhhdCB5b3UgZW50ZXJlZCBpbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4KKworCitDTE9TRQkJCQkJCQkqRTE5OSoKKworVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBsZWF2ZSB0aGUgY29tbWFuZC1saW5lIHdpbmRvdzoKKworPENSPgkJRXhlY3V0ZSB0aGUgY29tbWFuZC1saW5lIHVuZGVyIHRoZSBjdXJzb3IuICBXb3JrcyBib3RoIGluCisJCUluc2VydCBhbmQgaW4gTm9ybWFsIG1vZGUuCitDVFJMLUMJCUNvbnRpbnVlIGluIENvbW1hbmQtbGluZSBtb2RlLiAgVGhlIGNvbW1hbmQtbGluZSB1bmRlciB0aGUKKwkJY3Vyc29yIGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQtbGluZS4gIFdvcmtzIGJvdGggaW4gSW5zZXJ0IGFuZAorCQlpbiBOb3JtYWwgbW9kZS4gICI6Y2xvc2UiIGFsc28gd29ya3MuICBUaGVyZSBpcyBubyByZWRyYXcsCisJCXRodXMgdGhlIHdpbmRvdyB3aWxsIHJlbWFpbiB2aXNpYmxlLgorOnF1aXQJCURpc2NhcmQgdGhlIGNvbW1hbmQgbGluZSBhbmQgZ28gYmFjayB0byBOb3JtYWwgbW9kZS4KKwkJIjpleGl0IiwgIjp4aXQiIGFuZCBDVFJMLVwgQ1RSTC1OIGFsc28gd29yay4KKzpxYWxsCQlRdWl0IFZpbSwgdW5sZXNzIHRoZXJlIGFyZSBjaGFuZ2VzIGluIHNvbWUgYnVmZmVyLgorOnFhbGwhCQlRdWl0IFZpbSwgZGlzY2FyZGluZyBjaGFuZ2VzIHRvIGFueSBidWZmZXIuCisKK09uY2UgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgaXMgY2xvc2VkIHRoZSBvbGQgd2luZG93IHNpemVzIGFyZSByZXN0b3JlZC4gIFRoZQorZXhlY3V0ZWQgY29tbWFuZCBhcHBsaWVzIHRvIHRoZSB3aW5kb3cgYW5kIGJ1ZmZlciB3aGVyZSB0aGUgY29tbWFuZC1saW5lIHdhcworc3RhcnRlZCBmcm9tLiAgVGhpcyB3b3JrcyBhcyBpZiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyB3YXMgbm90IHRoZXJlLCBleGNlcHQKK3RoYXQgdGhlcmUgd2lsbCBiZSBhbiBleHRyYSBzY3JlZW4gcmVkcmF3LgorVGhlIGJ1ZmZlciB1c2VkIGZvciB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyBpcyBkZWxldGVkLiAgQW55IGNoYW5nZXMgdG8gbGluZXMKK290aGVyIHRoYW4gdGhlIG9uZSB0aGF0IGlzIGV4ZWN1dGVkIHdpdGggPENSPiBhcmUgbG9zdC4KKworCitWQVJJT1VTCisKK1RoZSBjb21tYW5kLWxpbmUgd2luZG93IGNhbm5vdCBiZSB1c2VkOgorLSB3aGVuIHRoZXJlIGFscmVhZHkgaXMgYSBjb21tYW5kLWxpbmUgd2luZG93IChubyBuZXN0aW5nKQorLSBmb3IgZW50ZXJpbmcgYSBlbmNyeXB0aW9uIGtleSBvciB3aGVuIHVzaW5nIGlucHV0c2VjcmV0KCkKKy0gd2hlbiBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSArdmVydHNwbGl0IGZlYXR1cmUKKworU29tZSBvcHRpb25zIGFyZSBzZXQgd2hlbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyBpcyBvcGVuZWQ6CisnZmlsZXR5cGUnCSJ2aW0iLCB3aGVuIGVkaXRpbmcgYW4gRXggY29tbWFuZC1saW5lOyB0aGlzIHN0YXJ0cyBWaW0gc3ludGF4CisJCWhpZ2hsaWdodGluZyBpZiBpdCB3YXMgZW5hYmxlZAorJ3JpZ2h0bGVmdCcJb2ZmCisnbW9kaWZpYWJsZScJb24KKydidWZ0eXBlJwkibm9maWxlIgorJ3N3YXBmaWxlJwlvZmYKKworSXQgaXMgYWxsb3dlZCB0byB3cml0ZSB0aGUgYnVmZmVyIGNvbnRlbnRzIHRvIGEgZmlsZS4gIFRoaXMgaXMgYW4gZWFzeSB3YXkgdG8KK3NhdmUgdGhlIGNvbW1hbmQtbGluZSBoaXN0b3J5IGFuZCByZWFkIGl0IGJhY2sgbGF0ZXIuCisKK0lmIHRoZSAnd2lsZGNoYXInIG9wdGlvbiBpcyBzZXQgdG8gPFRhYj4sIGFuZCB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyBpcyB1c2VkCitmb3IgYW4gRXggY29tbWFuZCwgdGhlbiB0d28gbWFwcGluZ3Mgd2lsbCBiZSBhZGRlZCB0byB1c2UgPFRhYj4gZm9yIGNvbXBsZXRpb24KK2luIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LCBsaWtlIHRoaXM6ID4KKwk6aW1hcCA8YnVmZmVyPiA8VGFiPiA8Qy1YPjxDLVY+CisJOm5tYXAgPGJ1ZmZlcj4gPFRhYj4gYTxDLVg+PEMtVj4KK05vdGUgdGhhdCBoaXR0aW5nIDxUYWI+IGluIE5vcm1hbCBtb2RlIHdpbGwgZG8gY29tcGxldGlvbiBvbiB0aGUgbmV4dAorY2hhcmFjdGVyLiAgVGhhdCB3YXkgaXQgd29ya3MgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KK0lmIHlvdSBkb24ndCB3YW50IHRoZXNlIG1hcHBpbmdzLCBkaXNhYmxlIHRoZW0gd2l0aDogPgorCWF1IENtZHdpbkVudGVyIFs6Pl0gaXVubWFwIDxUYWI+CisJYXUgQ21kd2luRW50ZXIgWzo+XSBudW5tYXAgPFRhYj4KK1lvdSBjb3VsZCBwdXQgdGhlc2UgbGluZXMgaW4geW91ciB2aW1yYyBmaWxlLgorCitXaGlsZSBpbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdyB5b3UgY2Fubm90IHVzZSB0aGUgbW91c2UgdG8gcHV0IHRoZSBjdXJzb3IgaW4KK2Fub3RoZXIgd2luZG93LCBvciBkcmFnIHN0YXR1c2xpbmVzIG9mIG90aGVyIHdpbmRvd3MuICBZb3UgY2FuIGRyYWcgdGhlCitzdGF0dXNsaW5lIG9mIHRoZSBjb21tYW5kLWxpbmUgd2luZG93IGl0c2VsZiBhbmQgdGhlIHN0YXR1c2xpbmUgYWJvdmUgaXQuCitUaHVzIHlvdSBjYW4gcmVzaXplIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LCBidXQgbm90IG90aGVycy4KKworCitBVVRPQ09NTUFORFMKKworVHdvIGF1dG9jb21tYW5kIGV2ZW50cyBhcmUgdXNlZDogfENtZHdpbkVudGVyfCBhbmQgfENtZHdpbkxlYXZlfC4gIFNpbmNlIHRoaXMKK3dpbmRvdyBpcyBvZiBhIHNwZWNpYWwgdHlwZSwgdGhlIFdpbkVudGVyLCBXaW5MZWF2ZSwgQnVmRW50ZXIgYW5kIEJ1ZkxlYXZlCitldmVudHMgYXJlIG5vdCB0cmlnZ2VyZWQuICBZb3UgY2FuIHVzZSB0aGUgQ21kd2luIGV2ZW50cyB0byBkbyBzZXR0aW5ncworc3BlY2lmaWNhbGx5IGZvciB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4gIEJlIGNhcmVmdWwgbm90IHRvIGNhdXNlIHNpZGUKK2VmZmVjdHMhCitFeGFtcGxlOiA+CisJOmF1IENtZHdpbkVudGVyIDogIGxldCBiOmNwdF9zYXZlID0gJmNwdCB8IHNldCBjcHQ9dgorCTphdSBDbWR3aW5MZWF2ZSA6ICBsZXQgJmNwdCA9IGI6Y3B0X3NhdmUKK1RoaXMgc2V0cyAnY29tcGxldGUnIHRvIHVzZSBjb21tYW5kLWxpbmUgY29tcGxldGlvbiBpbiBJbnNlcnQgbW9kZSBmb3IgQ1RSTC1OLgorQW5vdGhlciBleGFtcGxlOiA+CisJOmF1IENtZHdpbkVudGVyIFsvP10gIHN0YXJ0aW5zZXJ0CitUaGlzIHdpbGwgbWFrZSBWaW0gc3RhcnQgaW4gSW5zZXJ0IG1vZGUgaW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cuCisKKwkJCQkJCSpjbWR3aW4tY2hhcioKK1RoZSBjaGFyYWN0ZXIgdXNlZCBmb3IgdGhlIHBhdHRlcm4gaW5kaWNhdGVzIHRoZSB0eXBlIG9mIGNvbW1hbmQtbGluZToKKwk6CW5vcm1hbCBFeCBjb21tYW5kCisJPglkZWJ1ZyBtb2RlIGNvbW1hbmQgfGRlYnVnLW1vZGV8CisJLwlmb3J3YXJkIHNlYXJjaCBzdHJpbmcKKwk/CWJhY2t3YXJkIHNlYXJjaCBzdHJpbmcKKwk9CWV4cHJlc3Npb24gZm9yICI9IHxleHByLXJlZ2lzdGVyfAorCUAJc3RyaW5nIGZvciB8aW5wdXQoKXwKKwktCXRleHQgZm9yIHw6aW5zZXJ0fCBvciB8OmFwcGVuZHwKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2RlYnVnZ2VyLnR4dCBiL3J1bnRpbWUvZG9jL2RlYnVnZ2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjFhMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZGVidWdnZXIudHh0CkBAIC0wLDAgKzEsMTM1IEBACisqZGVidWdnZXIudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDEgRGVjIDIyCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEdvcmRvbiBQcmlldXIKKworCitEZWJ1Z2dlciBTdXBwb3J0IEZlYXR1cmVzCQkJCSpkZWJ1Z2dlci1zdXBwb3J0KgorCisxLiBEZWJ1Z2dlciBGZWF0dXJlcwkJfGRlYnVnZ2VyLWZlYXR1cmVzfAorMi4gVmltIENvbXBpbGUgT3B0aW9ucwkJfGRlYnVnZ2VyLWNvbXBpbGF0aW9ufAorMy4gSW50ZWdyYXRlZCBEZWJ1Z2dlcnMJCXxkZWJ1Z2dlci1pbnRlZ3JhdGlvbnwKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGZlYXR1cmVzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIERlYnVnZ2VyIEZlYXR1cmVzCQkJCQkqZGVidWdnZXItZmVhdHVyZXMqCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBmb3IgYW4gaW50ZWdyYXRpb24gd2l0aCBhIGRlYnVnZ2VyIG9yCithbiBJbnRlZ3JhdGVkIFByb2dyYW1taW5nIEVudmlyb25tZW50IChJUEUpIG9yIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQKK0Vudmlyb25tZW50IChJREUpOgorCisJQWx0ZXJuYXRlIENvbW1hbmQgSW5wdXQJCQkJfGFsdC1pbnB1dHwKKwlEZWJ1ZyBTaWducwkJCQkJfGRlYnVnLXNpZ25zfAorCURlYnVnIFNvdXJjZSBIaWdobGlnaHQJCQkJfGRlYnVnLWhpZ2hsaWdodHwKKwlNZXNzYWdlIEZvb3RlcgkJCQkJfGd1aS1mb290ZXJ8CisJQmFsbG9vbiBFdmFsdWF0aW9uCQkJCXxiYWxsb29uLWV2YWx8CisKK1RoZXNlIGZlYXR1cmVzIHdlcmUgYWRkZWQgc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4gdGhlIE1vdGlmIHZlcnNpb24gb2YgZ3ZpbS4KK0hvd2V2ZXIsIHRoZSB8YWx0LWlucHV0fCBhbmQgfGRlYnVnLWhpZ2hsaWdodHwgd2VyZSB3cml0dGVuIHRvIGJlIHVzYWJsZSBpbgorYm90aCB2aW0gYW5kIGd2aW0uIFNvbWUgb2YgdGhlIG90aGVyIGZlYXR1cmVzIGNvdWxkIGJlIHVzZWQgaW4gdGhlIG5vbi1HVUkKK3ZpbSB3aXRoIHNsaWdodCBtb2RpZmljYXRpb25zLiBIb3dldmVyLCBJIGRpZCBub3QgZG8gdGhpcyBub3IgZGlkIEkgdGVzdCB0aGUKK3JlbGlhYmlsaXR5IG9mIGJ1aWxkaW5nIGZvciB2aW0gb3Igbm9uIE1vdGlmIEdVSSB2ZXJzaW9ucy4KKworCisxLjEgQWx0ZXJuYXRlIENvbW1hbmQgSW5wdXQJCQkJKmFsdC1pbnB1dCoKKworRm9yIFZpbSB0byB3b3JrIHdpdGggYSBkZWJ1Z2dlciB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IGFuIGlucHV0IGNvbm5lY3Rpb24KK3dpdGggYSBkZWJ1Z2dlciBvciBleHRlcm5hbCB0b29sLiBJbiBtYW55IGNhc2VzIHRoZXJlIHdpbGwgYWxzbyBiZSBhbiBvdXRwdXQKK2Nvbm5lY3Rpb24gYnV0IHRoaXMgaXNuJ3QgYWJzb2x1dGVseSBuZWNlc3NhcnkuCisKK1RoZSBwdXJwb3NlIG9mIHRoZSBpbnB1dCBjb25uZWN0aW9uIGlzIHRvIGxldCB0aGUgZXh0ZXJuYWwgZGVidWdnZXIgc2VuZAorY29tbWFuZHMgdG8gVmltLiBUaGUgY29tbWFuZHMgc2VudCBieSB0aGUgZGVidWdnZXIgc2hvdWxkIGdpdmUgdGhlIGRlYnVnZ2VyCitlbm91Z2ggY29udHJvbCB0byBkaXNwbGF5IHRoZSBjdXJyZW50IGRlYnVnIGVudmlyb25tZW50IGFuZCBzdGF0ZS4KKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIFggVG9vbGtpdCBkaXNwYXRjaCBsb29wIGFuZCB0aGUKK1h0QWRkSW5wdXQoKSBmdW5jdGlvbiBjYWxsLgorCisKKzEuMiBEZWJ1ZyBTaWducwkJCQkJCSpkZWJ1Zy1zaWducyoKKworTWFueSBkZWJ1Z2dlcnMgbWFyayBzcGVjaWZpYyBsaW5lcyBieSBwbGFjaW5nIGEgc21hbGwgc2lnbiBvciBjb2xvciBoaWdobGlnaHQKK29uIHRoZSBsaW5lLiBUaGUgfDpzaWdufCBjb21tYW5kIGxldHMgdGhlIGRlYnVnZ2VyIHNldCB0aGlzIGdyYXBoaWMgbWFyay4gU29tZQorZXhhbXBsZXMgd2hlcmUgdGhpcyBmZWF0dXJlIHdvdWxkIGJlIHVzZWQgd291bGQgYmUgYSBkZWJ1Z2dlciBzaG93aW5nIGFuIGFycm93CityZXByZXNlbnRpbmcgdGhlIFByb2dyYW0gQ291bnRlciAoUEMpIG9mIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkLiBBbm90aGVyCitleGFtcGxlIHdvdWxkIGJlIGEgc21hbGwgc3RvcCBzaWduIGZvciBhIGxpbmUgd2l0aCBhIGJyZWFrcG9pbnQuIFRoZXNlIHZpc2libGUKK2hpZ2hsaWdodHMgbGV0IHRoZSB1c2VyIGtlZXAgdHJhY2sgb2YgY2VydGFpbiBwYXJ0cyBvZiB0aGUgc3RhdGUgb2YgdGhlCitkZWJ1Z2dlci4KKworVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHdpdGggbW9yZSB0aGFuIGRlYnVnZ2VycywgdG9vLiBBbiBJUEUgY2FuIHVzZSBhIHNpZ24KK3RvIGhpZ2hsaWdodCBidWlsZCBlcnJvcnMsIHNlYXJjaGVkIHRleHQsIG9yIG90aGVyIHRoaW5ncy4gVGhlIHNpZ24gZmVhdHVyZQorY2FuIGFsc28gd29yayB0b2dldGhlciB3aXRoIHRoZSB8ZGVidWctaGlnaGxpZ2h0fCB0byBlbnN1cmUgdGhlIG1hcmsgaXMKK2hpZ2hseSB2aXNpYmxlLgorCitEZWJ1ZyBzaWducyBhcmUgZGVmaW5lZCBhbmQgcGxhY2VkIHVzaW5nIHRoZSB8OnNpZ258IGNvbW1hbmQuCisKKworMS4zIERlYnVnIFNvdXJjZSBIaWdobGlnaHQJCQkJKmRlYnVnLWhpZ2hsaWdodCoKKworVGhpcyBmZWF0dXJlIGFsbG93cyBhIGxpbmUgdG8gaGF2ZSBhIHByZWRvbWluYW50IGhpZ2hsaWdodC4gVGhlIGhpZ2hsaWdodCBpcworaW50ZW5kZWQgdG8gbWFrZSBhIHNwZWNpZmljIGxpbmUgc3RhbmQgb3V0LiBUaGUgaGlnaGxpZ2h0IGNvdWxkIGJlIG1hZGUgdG8KK3dvcmsgZm9yIGJvdGggdmltIGFuZCBndmltLCB3aGVyZWFzIHRoZSBkZWJ1ZyBzaWduIGlzLCBpbiBtb3N0IGNhc2VzLCBsaW1pdGVkCit0byBndmltLiBUaGUgb25lIGV4Y2VwdGlvbiB0byB0aGlzIGlzIFN1biBNaWNyb3N5c3RlbSdzIGR0dGVybS4gVGhlIGR0dGVybQorZnJvbSBTdW4gaGFzIGEgInNpZ24gZ3V0dGVyIiBmb3Igc2hvd2luZyBzaWducy4KKworCisxLjQgTWVzc2FnZSBGb290ZXIJCQkJCSpndWktZm9vdGVyKgorCitUaGUgbWVzc2FnZSBmb290ZXIgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBtZXNzYWdlcyBmcm9tIGEgZGVidWdnZXIgb3IgSVBFLiBJdAorY2FuIGFsc28gYmUgdXNlZCB0byBkaXNwbGF5IG1lbnUgYW5kIHRvb2xiYXIgdGlwcy4gVGhlIGZvb3RlciBhcmVhIGlzIGF0IHRoZQorYm90dG9tIG9mIHRoZSBHVUkgd2luZG93LCBiZWxvdyB0aGUgbGluZSB1c2VkIHRvIGRpc3BsYXkgY29sb24gY29tbWFuZHMuCisKK1RoZSBkaXNwbGF5IG9mIHRoZSBmb290ZXIgaXMgY29udHJvbGxlZCBieSB0aGUgJ2d1aW9wdGlvbnMnIGxldHRlciAnRicuCisKKworMS41IEJhbGxvb24gRXZhbHVhdGlvbgkJCQkJKmJhbGxvb24tZXZhbCoKKworVGhpcyBmZWF0dXJlIGFsbG93cyBhIGRlYnVnZ2VyLCBvciBvdGhlciBleHRlcm5hbCB0b29sLCB0byBkaXNwbGF5IGR5bmFtaWMKK2luZm9ybWF0aW9uIGJhc2VkIG9uIHdoZXJlIHRoZSBtb3VzZSBpcyBwb2ludGluZy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmZWF0dXJlCit3YXMgdG8gYWxsb3cgU3VuJ3MgVmlzdWFsIFdvcmtTaG9wIGRlYnVnZ2VyIHRvIGRpc3BsYXkgZXhwcmVzc2lvbiBldmFsdWF0aW9ucy4KK0hvd2V2ZXIsIHRoZSBmZWF0dXJlIHdhcyBpbXBsZW1lbnRlZCBpbiBhcyBnZW5lcmFsIGEgbWFubmVyIGFzIHBvc3NpYmxlIGFuZAorY291bGQgYmUgdXNlZCBmb3IgZGlzcGxheWluZyBvdGhlciBpbmZvcm1hdGlvbiBhcyB3ZWxsLgorCitUaGUgQmFsbG9vbiBFdmFsdWF0aW9uIGhhcyBzb21lIHNldHRhYmxlIHBhcmFtZXRlcnMgdG9vLiAgVGhlIGZvbnQgbGlzdCBhbmQKK2NvbG9ycyBjYW4gYmUgc2V0IHZpYSBYIHJlc291cmNlcyAoWG1OYmFsbG9vbkV2YWxGb250TGlzdCwKK1htTmJhbGxvb25FdmFsQmFja2dyb3VuZCwgYW5kIFhtTmJhbGxvb25FdmFsRm9yZWdyb3VuZCkuCitUaGUgJ2JhbGxvb25kZWxheScgb3B0aW9uIHNldHMgdGhlIGRlbGF5IGJlZm9yZSBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gc2hvdyBhCitiYWxsb29uLgorVGhlICdiYWxsb29uZXZhbCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB0byBzd2l0Y2ggaXQgb24uCisKK0JhbGxvb24gZXZhbHVhdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrYmFsbG9vbl9ldmFsfAorYW5kIHwrc3VuX3dvcmtzaG9wfCBmZWF0dXJlcy4KKworVGhlIEJhbGxvb24gZXZhbHVhdGlvbiBmdW5jdGlvbnMgYXJlIGFsc28gdXNlZCB0byBzaG93IGEgdG9vbHRpcCBmb3IgdGhlCit0b29sYmFyLiAgVGhlICdiYWxsb29uZXZhbCcgb3B0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgc2V0IGZvciB0aGlzLiAgQnV0IHRoZQorb3RoZXIgc2V0dGluZ3MgYXBwbHkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVmltIENvbXBpbGUgT3B0aW9ucwkJCQkJKmRlYnVnZ2VyLWNvbXBpbGF0aW9uKgorCitUaGUgZGVidWdnZXIgZmVhdHVyZXMgd2VyZSBhZGRlZCBleHBsaWNpdGx5IGZvciB1c2Ugd2l0aCBTdW4ncyBWaXN1YWwKK1dvcmtTaG9wIEludGVncmF0ZWQgUHJvZ3JhbW1pbmcgRW52aXJvbm1lbnQgKGlwZSkuIEhvd2V2ZXIsIHRoZXkgd2VyZSBkb25lCitpbiBhcyBnZW5lcmljIGEgbWFubmVyIGFzIHBvc3NpYmxlIHNvIHRoYXQgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBkZWJ1Z2dlcnMKK2NvdWxkIGFsc28gdXNlIHNvbWUgb3IgYWxsIG9mIHRoZSB0b29scyB1c2VkIHdpdGggU3VuJ3MgaXBlLgorCitUaGUgZm9sbG93aW5nIGNvbXBpbGUgdGltZSBwcmVwcm9jZXNzb3IgdmFyaWFibGVzIGNvbnRyb2wgdGhlIGZlYXR1cmVzOgorCisgICAgQWx0ZXJuYXRlIENvbW1hbmQgSW5wdXQJCQlBTFRfWF9JTlBVVAorICAgIERlYnVnIEdseXBocwkJCQlGRUFUX1NJR05TCisgICAgRGVidWcgSGlnaGxpZ2h0cwkJCQlGRUFUX1NJR05TCisgICAgTWVzc2FnZSBGb290ZXIJCQkJRkVBVF9GT09URVIKKyAgICBCYWxsb29uIEV2YWx1YXRpb24JCQkJRkVBVF9CRVZBTAorCitUaGUgZmlyc3QgaW50ZWdyYXRpb24gd2l0aCBhIGZ1bGwgSVBFL0lERSB3YXMgd2l0aCBTdW4gVmlzdWFsIFdvcmtTaG9wLiBUbworY29tcGlsZSBhIGd2aW0gd2hpY2ggaW50ZXJmYWNlcyB3aXRoIFZXUyBzZXQgdGhlIGZvbGxvd2luZyBmbGFnLCB3aGljaCBzZXRzCithbGwgdGhlIGFib3ZlIGZsYWdzOgorCisgICAgU3VuIFZpc3VhbCBXb3JrU2hvcAkJCQlGRUFUX1NVTl9XT1JLU0hPUAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIEludGVncmF0ZWQgRGVidWdnZXJzCQkJCQkqZGVidWdnZXItaW50ZWdyYXRpb24qCisKK0N1cnJlbnRseSB0aGUgb25seSBmdWxseSBpbnRlZ3JhdGVkIGRlYnVnZ2VyL0lQRS9JREUgaXMgU3VuJ3MgVmlzdWFsIFdvcmtTaG9wCitJbnRlZ3JhdGVkIFByb2dyYW1taW5nIEVudmlyb25tZW50LgorCisgdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9kZXZlbG9wLnR4dCBiL3J1bnRpbWUvZG9jL2RldmVsb3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNGY0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9kZXZlbG9wLnR4dApAQCAtMCwwICsxLDM4NCBAQAorKmRldmVsb3AudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEphbiAxNworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0RldmVsb3BtZW50IG9mIFZpbS4JCQkJCSpkZXZlbG9wbWVudCoKKworVGhpcyB0ZXh0IGlzIGltcG9ydGFudCBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gYmUgaW52b2x2ZWQgaW4gZnVydGhlciBkZXZlbG9waW5nCitWaW0uCisKKzEuIERlc2lnbiBnb2FscwkJfGRlc2lnbi1nb2Fsc3wKKzIuIENvZGluZyBzdHlsZQkJfGNvZGluZy1zdHlsZXwKKzMuIERlc2lnbiBkZWNpc2lvbnMJfGRlc2lnbi1kZWNpc2lvbnN8Cis0LiBBc3N1bXB0aW9ucwkJfGRlc2lnbi1hc3N1bXB0aW9uc3wKKworU2VlIHRoZSBmaWxlIFJFQURNRS50eHQgaW4gdGhlICJzcmMiIGRpcmVjdG9yeSBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHNvdXJjZQorY29kZS4KKworVmltIGlzIG9wZW4gc291cmNlIHNvZnR3YXJlLiAgRXZlcnlib2R5IGlzIGVuY291cmFnZWQgdG8gY29udHJpYnV0ZSB0byBoZWxwCitpbXByb3ZpbmcgVmltLiAgRm9yIHNlbmRpbmcgcGF0Y2hlcyBhIGNvbnRleHQgZGlmZiAiZGlmZiAtYyIgaXMgcHJlZmVycmVkLgorQWxzbyBzZWUgaHR0cDovL3d3dy52aW0ub3JnL3RpcHMvdGlwLnBocD90aXBfaWQ9NjE4LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIERlc2lnbiBnb2FscwkJCQkJCSpkZXNpZ24tZ29hbHMqCisKK01vc3QgaW1wb3J0YW50IHRoaW5ncyBjb21lIGZpcnN0IChyb3VnaGx5KS4KKworTm90ZSB0aGF0IHF1aXRlIGEgZmV3IGl0ZW1zIGFyZSBjb250cmFkaWN0aW5nLiAgVGhpcyBpcyBpbnRlbnRpb25hbC4gIEEKK2JhbGFuY2UgbXVzdCBiZSBmb3VuZCBiZXR3ZWVuIHRoZW0uCisKKworVklNIElTLi4uIFZJIENPTVBBVElCTEUJCQkJCSpkZXNpZ24tY29tcGF0aWJsZSoKKworRmlyc3Qgb2YgYWxsLCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gdXNlIFZpbSBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCitWaS4gIFdoZW4gdGhlIHVzZXIgd2FudHMgdG8sIGhlIGNhbiB1c2UgVmltIGluIGNvbXBhdGlibGUgbW9kZSBhbmQgaGFyZGx5Citub3RpY2UgYW55IGRpZmZlcmVuY2Ugd2l0aCB0aGUgb3JpZ2luYWwgVmkuCisKK0V4Y2VwdGlvbnM6CistIFdlIGRvbid0IHJlcHJvZHVjZSBvYnZpb3VzIFZpIGJ1Z3MgaW4gVmltLgorLSBUaGVyZSBhcmUgZGlmZmVyZW50IHZlcnNpb25zIG9mIFZpLiAgSSBhbSB1c2luZyBWZXJzaW9uIDMuNyAoNi83Lzg1KSBhcyBhCisgIHJlZmVyZW5jZS4gIEJ1dCBzdXBwb3J0IGZvciBvdGhlciB2ZXJzaW9ucyBpcyBhbHNvIGluY2x1ZGVkIHdoZW4gcG9zc2libGUuCisgIFRoZSBWaSBwYXJ0IG9mIFBPU0lYIGlzIG5vdCBjb25zaWRlcmVkIGEgZGVmaW5pdGl2ZSBzb3VyY2UuCistIFZpbSBhZGRzIG5ldyBjb21tYW5kcywgeW91IGNhbm5vdCByZWx5IG9uIHNvbWUgY29tbWFuZCB0byBmYWlsIGJlY2F1c2UgaXQKKyAgZGlkbid0IGV4aXN0IGluIFZpLgorLSBWaW0gd2lsbCBoYXZlIGEgbG90IG9mIGZlYXR1cmVzIHRoYXQgVmkgZG9lc24ndCBoYXZlLiAgR29pbmcgYmFjayBmcm9tIFZpbQorICB0byBWaSB3aWxsIGJlIGEgcHJvYmxlbSwgdGhpcyBjYW5ub3QgYmUgYXZvaWRlZC4KKy0gU29tZSB0aGluZ3MgYXJlIGhhcmRseSBldmVyIHVzZWQgKG9wZW4gbW9kZSwgc2VuZGluZyBhbiBlLW1haWwgd2hlbgorICBjcmFzaGluZywgZXRjLikuICBUaG9zZSB3aWxsIG9ubHkgYmUgaW5jbHVkZWQgd2hlbiBzb21lb25lIGhhcyBhIGdvb2QgcmVhc29uCisgIHdoeSBpdCBzaG91bGQgYmUgaW5jbHVkZWQgYW5kIGl0J3Mgbm90IHRvbyBtdWNoIHdvcmsuCistIEZvciBzb21lIGl0ZW1zIGl0IGlzIGRlYmF0YWJsZSB3aGV0aGVyIFZpIGNvbXBhdGliaWxpdHkgc2hvdWxkIGJlCisgIG1haW50YWluZWQuICBUaGVyZSB3aWxsIGJlIGFuIG9wdGlvbiBmbGFnIGZvciB0aGVzZS4KKworCitWSU0gSVMuLi4gSU1QUk9WRUQJCQkJCSpkZXNpZ24taW1wcm92ZWQqCisKK1RoZSBJTXByb3ZlZCBiaXRzIG9mIFZpbSBzaG91bGQgbWFrZSBpdCBhIGJldHRlciBWaSwgd2l0aG91dCBiZWNvbWluZyBhCitjb21wbGV0ZWx5IGRpZmZlcmVudCBlZGl0b3IuICBFeHRlbnNpb25zIGFyZSBkb25lIHdpdGggYSAiVmkgc3Bpcml0Ii4KKy0gVXNlIHRoZSBrZXlib2FyZCBhcyBtdWNoIGFzIGZlYXNpYmxlLiAgVGhlIG1vdXNlIHJlcXVpcmVzIGEgdGhpcmQgaGFuZCwKKyAgd2hpY2ggd2UgZG9uJ3QgaGF2ZS4gIE1hbnkgdGVybWluYWxzIGRvbid0IGhhdmUgYSBtb3VzZS4KKy0gV2hlbiB0aGUgbW91c2UgaXMgdXNlZCBhbnl3YXksIGF2b2lkIHRoZSBuZWVkIHRvIHN3aXRjaCBiYWNrIHRvIHRoZQorICBrZXlib2FyZC4gIEF2b2lkIG1peGluZyBtb3VzZSBhbmQga2V5Ym9hcmQgaGFuZGxpbmcuCistIEFkZCBjb21tYW5kcyBhbmQgb3B0aW9ucyBpbiBhIGNvbnNpc3RlbnQgd2F5LiAgT3RoZXJ3aXNlIHBlb3BsZSB3aWxsIGhhdmUgYQorICBoYXJkIHRpbWUgZmluZGluZyBhbmQgcmVtZW1iZXJpbmcgdGhlbS4gIEtlZXAgaW4gbWluZCB0aGF0IG1vcmUgY29tbWFuZHMgYW5kCisgIG9wdGlvbnMgd2lsbCBiZSBhZGRlZCBsYXRlci4KKy0gQSBmZWF0dXJlIHRoYXQgcGVvcGxlIGRvIG5vdCBrbm93IGFib3V0IGlzIGEgdXNlbGVzcyBmZWF0dXJlLiAgRG9uJ3QgYWRkCisgIG9ic2N1cmUgZmVhdHVyZXMsIG9yIGF0IGxlYXN0IGFkZCBoaW50cyBpbiBkb2N1bWVudGF0aW9uIHRoYXQgdGhleSBleGlzdHMuCistIE1pbmltaXplIHVzaW5nIENUUkwgYW5kIG90aGVyIG1vZGlmaWVycywgdGhleSBhcmUgbW9yZSBkaWZmaWN1bHQgdG8gdHlwZS4KKy0gVGhlcmUgYXJlIG1hbnkgZmlyc3QtdGltZSBhbmQgaW5leHBlcmllbmNlZCBWaW0gdXNlcnMuICBNYWtlIGl0IGVhc3kgZm9yCisgIHRoZW0gdG8gc3RhcnQgdXNpbmcgVmltIGFuZCBsZWFybiBtb3JlIG92ZXIgdGltZS4KKy0gVGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIGZlYXR1cmVzIHRoYXQgY2FuIGJlIGFkZGVkLiAgU2VsZWN0aW5nIG5ldyBmZWF0dXJlcworICBpcyBvbmUgYmFzZWQgb24gKDEpIHdoYXQgdXNlcnMgYXNrIGZvciwgKDIpIGhvdyBtdWNoIGVmZm9ydCBpdCB0YWtlcyB0bworICBpbXBsZW1lbnQgYW5kICgzKSBzb21lb25lIGFjdHVhbGx5IGltcGxlbWVudGluZyBpdC4KKworCitWSU0gSVMuLi4gTVVMVEkgUExBVEZPUk0JCQkJKmRlc2lnbi1tdWx0aS1wbGF0Zm9ybSoKKworVmltIHRyaWVzIHRvIGhlbHAgYXMgbWFueSB1c2VycyBvbiBhcyBtYW55IHBsYXRmb3JtcyBhcyBwb3NzaWJsZS4KKy0gU3VwcG9ydCBtYW55IGtpbmRzIG9mIHRlcm1pbmFscy4gIFRoZSBtaW5pbWFsIGRlbWFuZHMgYXJlIGN1cnNvciBwb3NpdGlvbmluZworICBhbmQgY2xlYXItc2NyZWVuLiAgQ29tbWFuZHMgc2hvdWxkIG9ubHkgdXNlIGtleSBzdHJva2VzIHRoYXQgbW9zdCBrZXlib2FyZHMKKyAgaGF2ZS4gIFN1cHBvcnQgYWxsIHRoZSBrZXlzIG9uIHRoZSBrZXlib2FyZCBmb3IgbWFwcGluZy4KKy0gU3VwcG9ydCBtYW55IHBsYXRmb3Jtcy4gIEEgY29uZGl0aW9uIGlzIHRoYXQgdGhlcmUgaXMgc29tZW9uZSB3aWxsaW5nIHRvIGRvCisgIFZpbSBkZXZlbG9wbWVudCBvbiB0aGF0IHBsYXRmb3JtLCBhbmQgaXQgZG9lc24ndCBtZWFuIG1lc3NpbmcgdXAgdGhlIGNvZGUuCistIFN1cHBvcnQgbWFueSBjb21waWxlcnMgYW5kIGxpYnJhcmllcy4gIE5vdCBldmVyeWJvZHkgaXMgYWJsZSBvciBhbGxvd2VkIHRvCisgIGluc3RhbGwgYW5vdGhlciBjb21waWxlciBvciBHVUkgbGlicmFyeS4KKy0gUGVvcGxlIHN3aXRjaCBmcm9tIG9uZSBwbGF0Zm9ybSB0byBhbm90aGVyLCBhbmQgZnJvbSBHVUkgdG8gdGVybWluYWwKKyAgdmVyc2lvbi4gIEZlYXR1cmVzIHNob3VsZCBiZSBwcmVzZW50IGluIGFsbCB2ZXJzaW9ucywgb3IgYXQgbGVhc3QgaW4gYXMgbWFueQorICBhcyBwb3NzaWJsZSB3aXRoIGEgcmVhc29uYWJsZSBlZmZvcnQuICBUcnkgdG8gYXZvaWQgdGhhdCB1c2VycyBtdXN0IHN3aXRjaAorICBiZXR3ZWVuIHBsYXRmb3JtcyB0byBhY2NvbXBsaXNoIHRoZWlyIHdvcmsgZWZmaWNpZW50bHkuCistIFRoYXQgYSBmZWF0dXJlIGlzIG5vdCBwb3NzaWJsZSBvbiBzb21lIHBsYXRmb3Jtcywgb3Igb25seSBwb3NzaWJsZSBvbiBvbmUKKyAgcGxhdGZvcm0sIGRvZXMgbm90IG1lYW4gaXQgY2Fubm90IGJlIGltcGxlbWVudGVkLiAgW1RoaXMgaW50ZW50aW9uYWxseQorICBjb250cmFkaWN0cyB0aGUgcHJldmlvdXMgaXRlbSwgdGhlc2UgdHdvIG11c3QgYmUgYmFsYW5jZWQuXQorCisKK1ZJTSBJUy4uLiBXRUxMIERPQ1VNRU5URUQJCQkJKmRlc2lnbi1kb2N1bWVudGVkKgorCistIEEgZmVhdHVyZSB0aGF0IGlzbid0IGRvY3VtZW50ZWQgaXMgYSB1c2VsZXNzIGZlYXR1cmUuICBBIHBhdGNoIGZvciBhIG5ldworICBmZWF0dXJlIG11c3QgaW5jbHVkZSB0aGUgZG9jdW1lbnRhdGlvbi4KKy0gRG9jdW1lbnRhdGlvbiBzaG91bGQgYmUgY29tcHJlaGVuc2l2ZSBhbmQgdW5kZXJzdGFuZGFibGUuICBVc2luZyBleGFtcGxlcyBpcworICByZWNvbW1lbmRlZC4KKy0gRG9uJ3QgbWFrZSB0aGUgdGV4dCB1bm5lY2Vzc2FyaWx5IGxvbmcuICBMZXNzIGRvY3VtZW50YXRpb24gbWVhbnMgdGhhdCBhbgorICBpdGVtIGlzIGVhc2llciB0byBmaW5kLgorCisKK1ZJTSBJUy4uLiBISUdIIFNQRUVEIEFORCBTTUFMTCBJTiBTSVpFCQkJKmRlc2lnbi1zcGVlZC1zaXplKgorCitVc2luZyBWaW0gbXVzdCBub3QgYmUgYSBiaWcgYXR0YWNrIG9uIHN5c3RlbSByZXNvdXJjZXMuICBLZWVwIGl0IHNtYWxsIGFuZAorZmFzdC4KKy0gQ29tcHV0ZXJzIGFyZSBiZWNvbWluZyBmYXN0ZXIgYW5kIGJpZ2dlciBlYWNoIHllYXIuICBWaW0gY2FuIGdyb3cgdG9vLCBidXQKKyAgbm8gZmFzdGVyIHRoYW4gY29tcHV0ZXJzIGFyZSBncm93aW5nLiAgS2VlcCBWaW0gdXNhYmxlIG9uIG9sZGVyIHN5c3RlbXMuCistIE1hbnkgdXNlcnMgc3RhcnQgVmltIGZyb20gYSBzaGVsbCB2ZXJ5IG9mdGVuLiAgU3RhcnR1cCB0aW1lIG11c3QgYmUgc2hvcnQuCistIENvbW1hbmRzIG11c3Qgd29yayBlZmZpY2llbnRseS4gIFRoZSB0aW1lIHRoZXkgY29uc3VtZSBtdXN0IGJlIGFzIHNtYWxsIGFzCisgIHBvc3NpYmxlLiAgVXNlZnVsIGNvbW1hbmRzIG1heSB0YWtlIGxvbmdlci4KKy0gRG9uJ3QgZm9yZ2V0IHRoYXQgc29tZSBwZW9wbGUgdXNlIFZpbSBvdmVyIGEgc2xvdyBjb25uZWN0aW9uLiAgTWluaW1pemUgdGhlCisgIGNvbW11bmljYXRpb24gb3ZlcmhlYWQuCistIEl0ZW1zIHRoYXQgYWRkIGNvbnNpZGVyYWJseSB0byB0aGUgc2l6ZSBhbmQgYXJlIG5vdCB1c2VkIGJ5IG1hbnkgcGVvcGxlCisgIHNob3VsZCBiZSBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgZGlzYWJsZWQuCistIFZpbSBpcyBhIGNvbXBvbmVudCBhbW9uZyBvdGhlciBjb21wb25lbnRzLiAgRG9uJ3QgdHVybiBpdCBpbnRvIGEgbWFzc2l2ZQorICBhcHBsaWNhdGlvbiwgYnV0IGhhdmUgaXQgd29yayB3ZWxsIHRvZ2V0aGVyIHdpdGggb3RoZXIgcHJvZ3JhbXMuCisKKworVklNIElTLi4uIE1BSU5UQUlOQUJMRQkJCQkJKmRlc2lnbi1tYWludGFpbioKKworLSBUaGUgc291cmNlIGNvZGUgc2hvdWxkIG5vdCBiZWNvbWUgYSBtZXNzLiAgSXQgc2hvdWxkIGJlIHJlbGlhYmxlIGNvZGUuCistIFVzZSB0aGUgc2FtZSBsYXlvdXQgaW4gYWxsIGZpbGVzIHRvIG1ha2UgaXQgZWFzeSB0byByZWFkIHxjb2Rpbmctc3R5bGV8LgorLSBVc2UgY29tbWVudHMgaW4gYSB1c2VmdWwgd2F5IQorLSBQb3J0aW5nIHRvIGFub3RoZXIgcGxhdGZvcm0gc2hvdWxkIGJlIG1hZGUgZWFzeSwgd2l0aG91dCBoYXZpbmcgdG8gY2hhbmdlCisgIHRvbyBtdWNoIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUuCistIFVzZSB0aGUgb2JqZWN0LW9yaWVudGVkIHNwaXJpdDogUHV0IGRhdGEgYW5kIGNvZGUgdG9nZXRoZXIuICBNaW5pbWl6ZSB0aGUKKyAga25vd2xlZGdlIHNwcmVhZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4KKworCitWSU0gSVMuLi4gRkxFWElCTEUJCQkJCSpkZXNpZ24tZmxleGlibGUqCisKK1ZpbSBzaG91bGQgbWFrZSBpdCBlYXN5IGZvciB1c2VycyB0byB3b3JrIGluIHRoZWlyIHByZWZlcnJlZCBzdHlsZXMgcmF0aGVyCit0aGFuIGNvZXJjaW5nIGl0cyB1c2VycyBpbnRvIHBhcnRpY3VsYXIgcGF0dGVybnMgb2Ygd29yay4gIFRoaXMgY2FuIGJlIGZvcgoraXRlbXMgd2l0aCBhIGxhcmdlIGltcGFjdCAoZS5nLiwgdGhlICdjb21wYXRpYmxlJyBvcHRpb24pIG9yIGZvciBkZXRhaWxzLiAgVGhlCitkZWZhdWx0cyBhcmUgY2FyZWZ1bGx5IGNob3NlbiBzdWNoIHRoYXQgbW9zdCB1c2VycyB3aWxsIGVuam95IHVzaW5nIFZpbSBhcyBpdAoraXMuICBDb21tYW5kcyBhbmQgb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBhZGp1c3QgVmltIHRvIHRoZSBkZXNpcmUgb2YgdGhlIHVzZXIKK2FuZCBpdHMgZW52aXJvbm1lbnQuCisKKworVklNIElTLi4uIE5PVAkJCQkJCSpkZXNpZ24tbm90KgorCistIFZpbSBpcyBub3QgYSBzaGVsbCBvciBhbiBPcGVyYXRpbmcgU3lzdGVtLiAgWW91IHdpbGwgbm90IGJlIGFibGUgdG8gcnVuIGEKKyAgc2hlbGwgaW5zaWRlIFZpbSBvciB1c2UgaXQgdG8gY29udHJvbCBhIGRlYnVnZ2VyLiAgVGhpcyBzaG91bGQgd29yayB0aGUKKyAgb3RoZXIgd2F5IGFyb3VuZDogVXNlIFZpbSBhcyBhIGNvbXBvbmVudCBmcm9tIGEgc2hlbGwgb3IgaW4gYW4gSURFLgorICBBIHNhdGlyaWNhbCB3YXkgdG8gc2F5IHRoaXM6ICJVbmxpa2UgRW1hY3MsIFZpbSBkb2VzIG5vdCBhdHRlbXB0IHRvIGluY2x1ZGUKKyAgZXZlcnl0aGluZyBidXQgdGhlIGtpdGNoZW4gc2luaywgYnV0IHNvbWUgcGVvcGxlIHNheSB0aGF0IHlvdSBjYW4gY2xlYW4gb25lCisgIHdpdGggaXQuICA7LSkiCistIFZpbSBpcyBub3QgYSBmYW5jeSBHVUkgZWRpdG9yIHRoYXQgdHJpZXMgdG8gbG9vayBuaWNlIGF0IHRoZSBjb3N0IG9mCisgIGJlaW5nIGxlc3MgY29uc2lzdGVudCBvdmVyIGFsbCBwbGF0Zm9ybXMuICBCdXQgZnVuY3Rpb25hbCBHVUkgZmVhdHVyZXMgYXJlCisgIHdlbGNvbWVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIENvZGluZyBzdHlsZQkJCQkJCSpjb2Rpbmctc3R5bGUqCisKK1RoZXNlIGFyZSB0aGUgcnVsZXMgdG8gdXNlIHdoZW4gbWFraW5nIGNoYW5nZXMgdG8gdGhlIFZpbSBzb3VyY2UgY29kZS4gIFBsZWFzZQorc3RpY2sgdG8gdGhlc2UgcnVsZXMsIHRvIGtlZXAgdGhlIHNvdXJjZXMgcmVhZGFibGUgYW5kIG1haW50YWluYWJsZS4KKworVGhpcyBsaXN0IGlzIG5vdCBjb21wbGV0ZS4gIExvb2sgaW4gdGhlIHNvdXJjZSBjb2RlIGZvciBtb3JlIGV4YW1wbGVzLgorCisKK01BS0lORyBDSEFOR0VTCQkJCQkJKnN0eWxlLWNoYW5nZXMqCisKK1RoZSBiYXNpYyBzdGVwcyB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIGNvZGU6CisxLiBBZGp1c3QgdGhlIGRvY3VtZW50YXRpb24uICBEb2luZyB0aGlzIGZpcnN0IGdpdmVzIHlvdSBhbiBpbXByZXNzaW9uIG9mIGhvdworICAgeW91ciBjaGFuZ2VzIGFmZmVjdCB0aGUgdXNlci4KKzIuIE1ha2UgdGhlIHNvdXJjZSBjb2RlIGNoYW5nZXMuCiszLiBDaGVjayAuLi9kb2MvdG9kby50eHQgaWYgdGhlIGNoYW5nZSBhZmZlY3RzIGFueSBsaXN0ZWQgaXRlbS4KKzQuIE1ha2UgYSBwYXRjaCB3aXRoICJkaWZmIC1jIiBhZ2FpbnN0IHRoZSB1bm1vZGlmaWVkIGNvZGUgYW5kIGRvY3MuCis1LiBNYWtlIGEgbm90ZSBhYm91dCB3aGF0IGNoYW5nZWQgYW5kIGluY2x1ZGUgaXQgd2l0aCB0aGUgcGF0Y2guCisKKworVVNFIE9GIENPTU1PTiBGVU5DVElPTlMJCQkJCSpzdHlsZS1mdW5jdGlvbnMqCisKK1NvbWUgZnVuY3Rpb25zIHRoYXQgYXJlIGNvbW1vbiB0byB1c2UsIGhhdmUgYSBzcGVjaWFsIFZpbSB2ZXJzaW9uLiAgQWx3YXlzCitjb25zaWRlciB1c2luZyB0aGUgVmltIHZlcnNpb24sIGJlY2F1c2UgdGhleSB3ZXJlIGludHJvZHVjZWQgd2l0aCBhIHJlYXNvbi4KKworTk9STUFMIE5BTUUJVklNIE5BTUUJRElGRkVSRU5DRSBPRiBWSU0gVkVSU0lPTgorZnJlZSgpCQl2aW1fZnJlZSgpCUNoZWNrcyBmb3IgZnJlZWluZyBOVUxMCittYWxsb2MoKQlhbGxvYygpCQlDaGVja3MgZm9yIG91dCBvZiBtZW1vcnkgc2l0dWF0aW9uCittYWxsb2MoKQlsYWxsb2MoKQlMaWtlIGFsbG9jKCksIGJ1dCBoYXMgbG9uZyBhcmd1bWVudAorc3RyY3B5KCkJU1RSQ1BZKCkJSW5jbHVkZXMgY2FzdCB0byAoY2hhciAqKSwgZm9yIGNoYXJfdSAqIGFyZ3MKK3N0cmNocigpCXZpbV9zdHJjaHIoKQlBY2NlcHRzIHNwZWNpYWwgY2hhcmFjdGVycworc3RycmNocigpCXZpbV9zdHJyY2hyKCkJQWNjZXB0cyBzcGVjaWFsIGNoYXJhY3RlcnMKK2lzc3BhY2UoKQl2aW1faXNzcGFjZSgpCUNhbiBoYW5kbGUgY2hhcmFjdGVycyA+IDEyOAoraXN3aGl0ZSgpCXZpbV9pc3doaXRlKCkJT25seSBUUlVFIGZvciBUYWIgYW5kIHNwYWNlCittZW1jcHkoKQl2aW1fbWVtbW92ZSgpCUhhbmRsZXMgb3ZlcmxhcHBlZCBjb3BpZXMKK2Jjb3B5KCkJCXZpbV9tZW1tb3ZlKCkJSGFuZGxlcyBvdmVybGFwcGVkIGNvcGllcworbWVtc2V0KCkJdmltX21lbXNldCgpCVVuaWZvcm0gZm9yIGFsbCBzeXN0ZW1zCisKKworTkFNRVMJCQkJCQkJKnN0eWxlLW5hbWVzKgorCitGdW5jdGlvbiBuYW1lcyBjYW4gbm90IGJlIG1vcmUgdGhhbiAzMSBjaGFyYWN0ZXJzIGxvbmcgKGJlY2F1c2Ugb2YgVk1TKS4KKworRG9uJ3QgdXNlICJkZWxldGUiIGFzIGEgdmFyaWFibGUgbmFtZSwgQysrIGRvZXNuJ3QgbGlrZSBpdC4KKworQmVjYXVzZSBvZiB0aGUgcmVxdWlyZW1lbnQgdGhhdCBWaW0gcnVucyBvbiBhcyBtYW55IHN5c3RlbXMgYXMgcG9zc2libGUsIHdlCituZWVkIHRvIGF2b2lkIHVzaW5nIG5hbWVzIHRoYXQgYXJlIGFscmVhZHkgZGVmaW5lZCBieSB0aGUgc3lzdGVtLiAgVGhpcyBpcyBhCitsaXN0IG9mIG5hbWVzIHRoYXQgYXJlIGtub3duIHRvIGNhdXNlIHRyb3VibGUuICBUaGUgbmFtZSBpcyBnaXZlbiBhcyBhIHJlZ2V4cAorcGF0dGVybi4KKworaXMuKigpCQlQT1NJWCwgY3R5cGUuaAordG8uKigpCQlQT1NJWCwgY3R5cGUuaAorCitkXy4qCQlQT1NJWCwgZGlyZW50LmgKK2xfLioJCVBPU0lYLCBmY250bC5oCitncl8uKgkJUE9TSVgsIGdycC5oCitwd18uKgkJUE9TSVgsIHB3ZC5oCitzYV8uKgkJUE9TSVgsIHNpZ25hbC5oCittZW0uKgkJUE9TSVgsIHN0cmluZy5oCitzdHIuKgkJUE9TSVgsIHN0cmluZy5oCit3Y3MuKgkJUE9TSVgsIHN0cmluZy5oCitzdF8uKgkJUE9TSVgsIHN0YXQuaAordG1zXy4qCQlQT1NJWCwgdGltZXMuaAordG1fLioJCVBPU0lYLCB0aW1lLmgKK2NfLioJCVBPU0lYLCB0ZXJtaW9zLmgKK01BWC4qCQlQT1NJWCwgbGltaXRzLmgKK19fLioJCVBPU0lYLCBzeXN0ZW0KK19bQS1aXS4qCVBPU0lYLCBzeXN0ZW0KK0VbQS1aMC05XSoJUE9TSVgsIGVycm5vLmgKKworKl90CQlQT1NJWCwgZm9yIHR5cGVkZWZzLiAgVXNlICpfVCBpbnN0ZWFkLgorCit3YWl0CQlkb24ndCB1c2UgYXMgYXJndW1lbnQgdG8gYSBmdW5jdGlvbiwgY29uZmxpY3RzIHdpdGggdHlwZXMuaAoraW5kZXgJCXNoYWRvd3MgZ2xvYmFsIGRlY2xhcmF0aW9uCit0aW1lCQlzaGFkb3dzIGdsb2JhbCBkZWNsYXJhdGlvbgorbmV3CQlDKysgcmVzZXJ2ZWQga2V5d29yZAordHJ5CQlCb3JsYW5kIEMrKyBkb2Vzbid0IGxpa2UgaXQgdG8gYmUgdXNlZCBhcyBhIHZhcmlhYmxlLgorCitiYXNlbmFtZSgpCUdOVSBzdHJpbmcgZnVuY3Rpb24KK2Rpcm5hbWUoKQlHTlUgc3RyaW5nIGZ1bmN0aW9uCitnZXRfZW52X3ZhbHVlKCkJTGludXggc3lzdGVtIGZ1bmN0aW9uCisKKworVkFSSU9VUwkJCQkJCQkqc3R5bGUtdmFyaW91cyoKKworVHlwZWRlZidlZCBuYW1lcyBzaG91bGQgZW5kIGluICJfdCI6ID4KKyAgICB0eXBlZGVmIGludCBzb21lX3Q7CitEZWZpbmUnZWQgbmFtZXMgc2hvdWxkIGJlIHVwcGVyY2FzZTogPgorICAgICNkZWZpbmUgU09NRV9USElORworRmVhdHVyZXMgYWx3YXlzIHN0YXJ0IHdpdGggIkZFQVRfIjogPgorICAgICNkZWZpbmUgRkVBVF9GT08KKworRG9uJ3QgdXNlICdcIicsIHNvbWUgY29tcGlsZXJzIGNhbid0IGhhbmRsZSBpdC4gICciJyB3b3JrcyBmaW5lLgorCitEb24ndCB1c2U6CisgICAgI2lmIEhBVkVfU09NRQorU29tZSBjb21waWxlcnMgY2FuJ3QgaGFuZGxlIHRoYXQgYW5kIGNvbXBsYWluIHRoYXQgIkhBVkVfU09NRSIgaXMgbm90IGRlZmluZWQuCitVc2UKKyAgICAjaWZkZWYgSEFWRV9TT01FCitvcgorICAgICNpZiBkZWZpbmVkKEhBVkVfU09NRSkKKworCitTVFlMRQkJCQkJCQkqc3R5bGUtZXhhbXBsZXMqCisKK0dlbmVyYWwgcnVsZTogT25lIHN0YXRlbWVudCBwZXIgbGluZS4KKworV3Jvbmc6CSAgICBpZiAoY29uZCkgYSA9IDE7CisKK09LOgkgICAgaWYgKGNvbmQpCisJCWEgPSAxOworCitXcm9uZzoJICAgIHdoaWxlIChjb25kKTsKKworT0s6CSAgICB3aGlsZSAoY29uZCkKKwkJOworCitXcm9uZzoJICAgIGRvIGEgPSAxOyB3aGlsZSAoY29uZCk7CisKK09LOgkgICAgZG8KKwkJYSA9IDE7CisJICAgIHdoaWxlIChjb25kKTsKKworCitGdW5jdGlvbnMgc3RhcnQgd2l0aDoKKworV3Jvbmc6CWludCBmdW5jdGlvbl9uYW1lKGludCBhcmcxLCBpbnQgYXJnMikKKworT0s6CS8qCisJICogRXhwbGFuYXRpb24gb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yLgorCSAqCisJICogUmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uLgorCSAqLworCSAgICBpbnQKKwlmdW5jdGlvbl9uYW1lKGFyZzEsIGFyZzIpCisJICAgIGludAkJYXJnMTsJCS8qIHNob3J0IGNvbW1lbnQgYWJvdXQgYXJnMSAqLworCSAgICBpbnQJCWFyZzI7CQkvKiBzaG9ydCBjb21tZW50IGFib3V0IGFyZzIgKi8KKwl7CisJICAgIGludAkJbG9jYWw7CQkvKiBjb21tZW50IGFib3V0IGxvY2FsICovCisKKwkgICAgbG9jYWwgPSBhcmcxICogYXJnMjsKKworTk9URTogRG9uJ3QgdXNlIEFOU0kgc3R5bGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiAgQSBmZXcgcGVvcGxlIHN0aWxsIGhhdmUgdG8KK3VzZSBhIGNvbXBpbGVyIHRoYXQgZG9lc24ndCBzdXBwb3J0IGl0LgorCisKK1NQQUNFUyBBTkQgUFVOQ1RVQVRJT04JCQkJCSpzdHlsZS1zcGFjZXMqCisKK05vIHNwYWNlIGJldHdlZW4gYSBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgYnJhY2tldDoKKworV3Jvbmc6ICBmdW5jIChhcmcpOworT0s6CWZ1bmMoYXJnKTsKKworRG8gdXNlIGEgc3BhY2UgYWZ0ZXIgaWYsIHdoaWxlLCBzd2l0Y2gsIGV0Yy4KKworV3Jvbmc6CWlmKGFyZykJCWZvcig7OykKK09LOglpZiAoYXJnKQlmb3IgKDs7KQorCitVc2UgYSBzcGFjZSBhZnRlciBhIGNvbW1hIGFuZCBzZW1pY29sb246CisKK1dyb25nOiAgZnVuYyhhcmcxLGFyZzIpOwlmb3IgKGkgPSAwO2kgPCAyOysraSkKK09LOglmdW5jKGFyZzEsIGFyZzIpOwlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorCitVc2UgYSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyICc9JywgJysnLCAnLycsIGV0Yy4KKworV3Jvbmc6CXZhcj1hKjU7CitPSzoJdmFyID0gYSAqIDU7CisKK0luIGdlbmVyYWw6IFVzZSBlbXB0eSBsaW5lcyB0byBncm91cCBsaW5lcyBvZiBjb2RlIHRvZ2V0aGVyLiAgUHV0IGEgY29tbWVudAoranVzdCBhYm92ZSB0aGUgZ3JvdXAgb2YgbGluZXMuICBUaGlzIG1ha2VzIGl0IG1vcmUgZWFzeSB0byBxdWlja2x5IHNlZSB3aGF0IGlzCitiZWluZyBkb25lLgorCitPSzoJLyogUHJlcGFyZSBmb3IgYnVpbGRpbmcgdGhlIHRhYmxlLiAqLworCWdldF9maXJzdF9pdGVtKCk7CisJdGFibGVfaWR4ID0gMDsKKworCS8qIEJ1aWxkIHRoZSB0YWJsZSAqLworCXdoaWxlIChoYXNfaXRlbSgpKQorCSAgICB0YWJsZVt0YWJsZV9pZHgrK10gPSBuZXh0X2l0ZW0oKTsKKworCS8qIEZpbmlzaCB1cC4gKi8KKwljbGVhbnVwX2l0ZW1zKCk7CisJZ2VuZXJhdGVfaGFzaCh0YWJsZSk7CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gRGVzaWduIGRlY2lzaW9ucwkJCQkJKmRlc2lnbi1kZWNpc2lvbnMqCisKK0ZvbGRpbmcKKworU2V2ZXJhbCBmb3JtcyBvZiBmb2xkaW5nIHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNhbWUgYnVmZmVyLiAgRm9yIGV4YW1wbGUsCitoYXZlIG9uZSB3aW5kb3cgdGhhdCBzaG93cyB0aGUgdGV4dCB3aXRoIGZ1bmN0aW9uIGJvZGllcyBmb2xkZWQsIGFub3RoZXIKK3dpbmRvdyB0aGF0IHNob3dzIGEgZnVuY3Rpb24gYm9keS4KKworRm9sZGluZyBpcyBhIHdheSB0byBkaXNwbGF5IHRoZSB0ZXh0LiAgSXQgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIHRleHQgaXRzZWxmLgorVGhlcmVmb3JlIHRoZSBmb2xkaW5nIGhhcyBiZWVuIGltcGxlbWVudGVkIGFzIGEgZmlsdGVyIGJldHdlZW4gdGhlIHRleHQgc3RvcmVkCitpbiBhIGJ1ZmZlciAoYnVmZmVyIGxpbmVzKSBhbmQgdGhlIHRleHQgZGlzcGxheWVkIGluIGEgd2luZG93IChsb2dpY2FsIGxpbmVzKS4KKworCitOYW1pbmcgdGhlIHdpbmRvdworCitUaGUgd29yZCAid2luZG93IiBpcyBjb21tb25seSB1c2VkIGZvciBzZXZlcmFsIHRoaW5nczogQSB3aW5kb3cgb24gdGhlIHNjcmVlbiwKK3RoZSB4dGVybSB3aW5kb3csIGEgd2luZG93IGluc2lkZSBWaW0gdG8gdmlldyBhIGJ1ZmZlci4KK1RvIGF2b2lkIGNvbmZ1c2lvbiwgb3RoZXIgaXRlbXMgdGhhdCBhcmUgc29tZXRpbWVzIGNhbGxlZCB3aW5kb3cgaGF2ZSBiZWVuCitnaXZlbiBhbm90aGVyIG5hbWUuICBIZXJlIGlzIGFuIG92ZXJ2aWV3IG9mIHRoZSByZWxhdGVkIGl0ZW1zOgorCitzY3JlZW4JCVRoZSB3aG9sZSBkaXNwbGF5LiAgRm9yIHRoZSBHVUkgaXQncyBzb21ldGhpbmcgbGlrZSAxMDI0eDc2OAorCQlwaXhlbHMuICBUaGUgVmltIHNoZWxsIGNhbiB1c2UgdGhlIHdob2xlIHNjcmVlbiBvciBwYXJ0IG9mIGl0Lgorc2hlbGwJCVRoZSBWaW0gYXBwbGljYXRpb24uICBUaGlzIGNhbiBjb3ZlciB0aGUgd2hvbGUgc2NyZWVuIChlLmcuLAorCQl3aGVuIHJ1bm5pbmcgaW4gYSBjb25zb2xlKSBvciBwYXJ0IG9mIGl0ICh4dGVybSBvciBHVUkpLgord2luZG93CQlWaWV3IG9uIGEgYnVmZmVyLiAgVGhlcmUgY2FuIGJlIHNldmVyYWwgd2luZG93cyBpbiBWaW0sCisJCXRvZ2V0aGVyIHdpdGggdGhlIGNvbW1hbmQgbGluZSwgbWVudWJhciwgdG9vbGJhciwgZXRjLiB0aGV5CisJCWZpdCBpbiB0aGUgc2hlbGwuCisKKworVG8gYmUgY29udGludWVkLi4uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gQXNzdW1wdGlvbnMJCQkJCQkqZGVzaWduLWFzc3VtcHRpb25zKgorCitTaXplIG9mIHZhcmlhYmxlczoKK2NoYXIJICAgIDggYml0IHNpZ25lZAorY2hhcl91CSAgICA4IGJpdCB1bnNpZ25lZAoraW50CSAgICAxNiwgMzIgb3IgNjQgYml0IHNpZ25lZAordW5zaWduZWQgICAgMTYsIDMyIG9yIDY0IGJpdCB1bnNpZ25lZAorbG9uZwkgICAgMzIgb3IgNjQgYml0IHNpZ25lZCwgY2FuIGhvbGQgYSBwb2ludGVyCisKK05vdGUgdGhhdCBzb21lIGNvbXBpbGVycyBjYW5ub3QgaGFuZGxlIGxvbmcgbGluZXMgb3Igc3RyaW5ncy4gIFRoZSBDODkKK3N0YW5kYXJkIHNwZWNpZmllcyBhIGxpbWl0IG9mIDUwOSBjaGFyYWN0ZXJzLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZGlmZi50eHQgYi9ydW50aW1lL2RvYy9kaWZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDIwNzIzCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZGlmZi50eHQKQEAgLTAsMCArMSwzNzEgQEAKKypkaWZmLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJKmRpZmYqICp2aW1kaWZmKiAqZ3ZpbWRpZmYqICpkaWZmLW1vZGUqCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSArZGlmZiBmZWF0dXJlOiBTaG93aW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIG9yCit0aHJlZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmaWxlLgorCitUaGUgYmFzaWNzIGFyZSBleHBsYWluZWQgaW4gc2VjdGlvbiB8MDguN3wgb2YgdGhlIHVzZXIgbWFudWFsLgorCisxLiBTdGFydGluZyBkaWZmIG1vZGUJCXx2aW1kaWZmfAorMi4gVmlld2luZyBkaWZmcwkJfHZpZXctZGlmZnN8CiszLiBKdW1waW5nIHRvIGRpZmZzCQl8anVtcHRvLWRpZmZzfAorNC4gQ29weWluZyBkaWZmcwkJfGNvcHktZGlmZnN8Cis1LiBEaWZmIG9wdGlvbnMJCQl8ZGlmZi1vcHRpb25zfAorCit7bm90IGluIFZpfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFN0YXJ0aW5nIGRpZmYgbW9kZQorCitUaGUgZWFzaWVzdCB3YXkgdG8gc3RhcnQgZWRpdGluZyBpbiBkaWZmIG1vZGUgaXMgd2l0aCB0aGUgInZpbWRpZmYiIGNvbW1hbmQuCitUaGlzIHN0YXJ0cyBWaW0gYXMgdXN1YWwsIGFuZCBhZGRpdGlvbmFsbHkgc2V0cyB1cCBmb3Igdmlld2luZyB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gdGhlIGFyZ3VtZW50cy4gPgorCisJdmltZGlmZiBmaWxlMSBmaWxlMiBbZmlsZTMgW2ZpbGU0XV0KKworVGhpcyBpcyBlcXVpdmFsZW50IHRvOiA+CisKKwl2aW0gLWQgZmlsZTEgZmlsZTIgW2ZpbGUzIFtmaWxlNF1dCisKK1lvdSBtYXkgYWxzbyB1c2UgImd2aW1kaWZmIiBvciAidmltIC1kIC1nIi4gIFRoZSBHVUkgaXMgc3RhcnRlZCB0aGVuLgorWW91IG1heSBhbHNvIHVzZSAidmlld2RpZmYiIG9yICJndmlld2RpZmYiLiAgVmltIHN0YXJ0cyBpbiByZWFkb25seSBtb2RlIHRoZW4uCisiciIgbWF5IGJlIHByZXBlbmRlZCBmb3IgcmVzdHJpY3RlZCBtb2RlIChzZWUgfC1afCkuCisKK1RoZSBzZWNvbmQgYW5kIGZvbGxvd2luZyBhcmd1bWVudHMgbWF5IGFsc28gYmUgYSBkaXJlY3RvcnkgbmFtZS4gIFZpbSB3aWxsCit0aGVuIGFwcGVuZCB0aGUgZmlsZSBuYW1lIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZGlyZWN0b3J5IG5hbWUgdG8gZmluZAordGhlIGZpbGUuCisKK1RoaXMgb25seSB3b3JrcyB3aGVuIGEgc3RhbmRhcmQgImRpZmYiIGNvbW1hbmQgaXMgYXZhaWxhYmxlLiAgU2VlICdkaWZmZXhwcicuCisKK1doYXQgaGFwcGVucyBpcyB0aGF0IFZpbSBvcGVucyBhIHdpbmRvdyBmb3IgZWFjaCBvZiB0aGUgZmlsZXMuICBUaGlzIGlzIGxpa2UKK3VzaW5nIHRoZSB8LU98IGFyZ3VtZW50LiAgVGhpcyB1c2VzIHZlcnRpY2FsIHNwbGl0cy4gIElmIHlvdSBwcmVmZXIgaG9yaXpvbnRhbAorc3BsaXRzIGFkZCB0aGUgfC1vfCBhcmd1bWVudDogPgorCisJdmltZGlmZiAtbyBmaWxlMSBmaWxlMiBbZmlsZTNdCisKK0luIGVhY2ggb2YgdGhlIGVkaXRlZCBmaWxlcyB0aGVzZSBvcHRpb25zIGFyZSBzZXQ6CisKKwknZGlmZicJCW9uCisJJ3Njcm9sbGJpbmQnCW9uCisJJ3Njcm9sbG9wdCcJaW5jbHVkZXMgImhvciIKKwknd3JhcCcJCW9mZgorCSdmb2xkbWV0aG9kJwkiZGlmZiIKKwknZm9sZGNvbHVtbicJMgorCitUaGVzZSBvcHRpb25zIGFyZSBzZXQgbG9jYWwgdG8gdGhlIHdpbmRvdy4gIFdoZW4gZWRpdGluZyBhbm90aGVyIGZpbGUgdGhleSBhcmUKK3Jlc2V0IHRvIHRoZSBnbG9iYWwgdmFsdWUuCisKK1RoZSBkaWZmZXJlbmNlcyBzaG93biBhcmUgYWN0dWFsbHkgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBidWZmZXIuICBUaHVzIGlmIHlvdQorbWFrZSBjaGFuZ2VzIGFmdGVyIGxvYWRpbmcgYSBmaWxlLCB0aGVzZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkaXNwbGF5ZWQKK2RpZmZzLiAgWW91IG1pZ2h0IGhhdmUgdG8gZG8gIjpkaWZmdXBkYXRlIiBub3cgYW5kIHRoZW4sIG5vdCBhbGwgY2hhbmdlcyBhcmUKK2ltbWVkaWF0ZWx5IHRha2VuIGludG8gYWNjb3VudC4KKworSW4geW91ciAudmltcmMgZmlsZSB5b3UgY291bGQgZG8gc29tZXRoaW5nIHNwZWNpYWwgd2hlbiBWaW0gd2FzIHN0YXJ0ZWQgaW4KK2RpZmYgbW9kZS4gIFlvdSBjb3VsZCB1c2UgYSBjb25zdHJ1Y3QgbGlrZSB0aGlzOiA+CisKKwlpZiAmZGlmZgorCSAgIHNldHVwIGZvciBkaWZmIG1vZGUKKwllbHNlCisJICAgc2V0dXAgZm9yIG5vbi1kaWZmIG1vZGUKKwllbmRpZgorCitXaGlsZSBhbHJlYWR5IGluIFZpbSB5b3UgY2FuIHN0YXJ0IGRpZmYgbW9kZSBpbiB0aHJlZSB3YXlzLgorCisJCQkJCQkJKkU5OCoKKzpkaWZmc3BsaXQge2ZpbGVuYW1lfQkJCQkJKjpkaWZmcyogKjpkaWZmc3BsaXQqCisJCU9wZW4gYSBuZXcgd2luZG93IG9uIHRoZSBmaWxlIHtmaWxlbmFtZX0uICBUaGUgb3B0aW9ucyBhcmUgc2V0CisJCWFzIGZvciAidmltZGlmZiIgZm9yIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV3bHkgb3BlbmVkIHdpbmRvdy4KKwkJQWxzbyBzZWUgJ2RpZmZleHByJy4KKworCQkJCQkJCSo6ZGlmZnQqICo6ZGlmZnRoaXMqCis6ZGlmZnRoaXMJTWFrZSB0aGUgY3VycmVudCB3aW5kb3cgcGFydCBvZiB0aGUgZGlmZiB3aW5kb3dzLiAgVGhpcyBzZXRzCisJCXRoZSBvcHRpb24gbGlrZSBmb3IgInZpbWRpZmYiLgorCis6ZGlmZnBhdGNoIHtwYXRjaGZpbGV9CQkJCQkqOmRpZmZwKiAqOmRpZmZwYXRjaCoKKwkJVXNlIHRoZSBjdXJyZW50IGJ1ZmZlciwgcGF0Y2ggaXQgd2l0aCB0aGUgZGlmZiBmb3VuZCBpbgorCQl7cGF0Y2hmaWxlfSBhbmQgb3BlbiBhIGJ1ZmZlciBvbiB0aGUgcmVzdWx0LiAgVGhlIG9wdGlvbnMgYXJlCisJCXNldCBhcyBmb3IgInZpbWRpZmYiLgorCQl7cGF0Y2hmaWxlfSBjYW4gYmUgaW4gYW55IGZvcm1hdCB0aGF0IHRoZSAicGF0Y2giIHByb2dyYW0KKwkJdW5kZXJzdGFuZHMgb3IgJ3BhdGNoZXhwcicgY2FuIGhhbmRsZS4KKwkJTm90ZSB0aGF0IHtwYXRjaGZpbGV9IHNob3VsZCBvbmx5IGNvbnRhaW4gYSBkaWZmIGZvciBvbmUgZmlsZSwKKwkJdGhlIGN1cnJlbnQgZmlsZS4gIElmIHtwYXRjaGZpbGV9IGNvbnRhaW5zIGRpZmZzIGZvciBvdGhlcgorCQlmaWxlcyBhcyB3ZWxsLCB0aGUgcmVzdWx0cyBhcmUgdW5wcmVkaWN0YWJsZS4gIFZpbSBjaGFuZ2VzCisJCWRpcmVjdG9yeSB0byAvdG1wIHRvIGF2b2lkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCQlhY2NpZGVudGFsbHkgYmVpbmcgcGF0Y2hlZC4gIEJ1dCBpdCBtYXkgc3RpbGwgcmVzdWx0IGluCisJCXZhcmlvdXMgIi5yZWoiIGZpbGVzIHRvIGJlIGNyZWF0ZWQuICBBbmQgd2hlbiBhYnNvbHV0ZSBwYXRoCisJCW5hbWVzIGFyZSBwcmVzZW50IHRoZXNlIGZpbGVzIG1heSBnZXQgcGF0Y2hlZCBhbnl3YXkuCisKK1RvIG1ha2UgdGhlc2UgY29tbWFuZHMgdXNlIGEgdmVydGljYWwgc3BsaXQsIHByZXBlbmQgfDp2ZXJ0aWNhbHwuICBFeGFtcGxlczogPgorCisJOnZlcnQgZGlmZnNwbGl0IG1haW4uY34KKwk6dmVydCBkaWZmcGF0Y2ggL3RtcC9kaWZmCis8CisJCQkJCQkJKkU5NioKK1RoZXJlIGNhbiBiZSB1cCB0byBmb3VyIGJ1ZmZlcnMgd2l0aCAnZGlmZicgc2V0LgorCitTaW5jZSB0aGUgb3B0aW9uIHZhbHVlcyBhcmUgcmVtZW1iZXJlZCB3aXRoIHRoZSBidWZmZXIsIHlvdSBjYW4gZWRpdCBhbm90aGVyCitmaWxlIGZvciBhIG1vbWVudCBhbmQgY29tZSBiYWNrIHRvIHRoZSBzYW1lIGZpbGUgYW5kIGJlIGluIGRpZmYgbW9kZSBhZ2Fpbi4KK0lmIHlvdSBkb24ndCB3YW50IGRpZmYgbW9kZSwgcmVzZXQgdGhlICdkaWZmJyBvcHRpb24uICBBbmQgeW91IHByb2JhYmx5IHdhbnQKK3RvIGdldCByaWQgb2YgdGhlIGZvbGQgY29sdW1uOiA+CisKKwk6c2V0IG5vZGlmZiBmb2xkY29sdW1uPTAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBWaWV3aW5nIGRpZmZzCQkJCQkJKnZpZXctZGlmZnMqCisKK1RoZSBlZmZlY3QgaXMgdGhhdCB0aGUgZGlmZiB3aW5kb3dzIHNob3cgdGhlIHNhbWUgdGV4dCwgd2l0aCB0aGUgZGlmZmVyZW5jZXMKK2hpZ2hsaWdodGVkLiAgV2hlbiBzY3JvbGxpbmcgdGhlIHRleHQsIHRoZSAnc2Nyb2xsYmluZCcgb3B0aW9uIHdpbGwgbWFrZSB0aGUKK3RleHQgaW4gb3RoZXIgd2luZG93cyB0byBiZSBzY3JvbGxlZCBhcyB3ZWxsLiAgV2l0aCB2ZXJ0aWNhbCBzcGxpdHMgdGhlIHRleHQKK3Nob3VsZCBiZSBhbGlnbmVkIHByb3Blcmx5LgorCitUaGUgYWxpZ25tZW50IG9mIHRleHQgd2lsbCBnbyB3cm9uZyB3aGVuOgorLSAnd3JhcCcgaXMgb24sIHNvbWUgbGluZXMgd2lsbCBiZSB3cmFwcGVkIGFuZCBvY2N1cHkgdHdvIG9yIG1vcmUgc2NyZWVuCisgIGxpbmVzCistIGZvbGRzIGFyZSBvcGVuIGluIG9uZSB3aW5kb3cgYnV0IG5vdCBhbm90aGVyCistICdzY3JvbGxiaW5kJyBpcyBvZmYKKy0gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgdGV4dAorLSAiZmlsbGVyIiBpcyBub3QgcHJlc2VudCBpbiAnZGlmZm9wdCcsIGRlbGV0ZWQvaW5zZXJ0ZWQgbGluZXMgbWFrZXMgdGhlCisgIGFsaWdubWVudCBnbyB3cm9uZworCitBbGwgdGhlIGJ1ZmZlcnMgZWRpdGVkIGluIGEgd2luZG93IHdoZXJlIHRoZSAnZGlmZicgb3B0aW9uIGlzIHNldCB3aWxsIGpvaW4gaW4KK3RoZSBkaWZmLiAgVGhpcyBpcyBhbHNvIHBvc3NpYmxlIGZvciBoaWRkZW4gYnVmZmVycy4gIFRoZXkgbXVzdCBoYXZlIGJlZW4KK2VkaXRlZCBpbiBhIHdpbmRvdyBmaXJzdCBmb3IgdGhpcyB0byBiZSBwb3NzaWJsZS4KKworU2luY2UgJ2RpZmYnIGlzIGEgd2luZG93LWxvY2FsIG9wdGlvbiwgaXQncyBwb3NzaWJsZSB0byB2aWV3IHRoZSBzYW1lIGJ1ZmZlcgoraW4gZGlmZiBtb2RlIGluIG9uZSB3aW5kb3cgYW5kICJub3JtYWwiIGluIGFub3RoZXIgd2luZG93LiAgSXQgaXMgYWxzbworcG9zc2libGUgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3UgaGF2ZSBtYWRlIHRvIGEgYnVmZmVyLCBidXQgc2luY2UgVmltIGRvZXNuJ3QKK2FsbG93IGhhdmluZyB0d28gYnVmZmVycyBmb3IgdGhlIHNhbWUgZmlsZSwgeW91IG5lZWQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlCitvcmlnaW5hbCBmaWxlIGFuZCBkaWZmIHdpdGggdGhhdC4gIEZvciBleGFtcGxlOiA+CisJOiFjcCAlIHRlbXBmaWxlCisJOmRpZmZzcGxpdCB0ZW1wZmlsZQorCitBIGJ1ZmZlciB0aGF0IGlzIHVubG9hZGVkIGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgZGlmZi4gIEJ1dCBpdCBkb2VzIHdvcmsgZm9yCitoaWRkZW4gYnVmZmVycy4gIFlvdSBjYW4gdXNlICI6aGlkZSIgdG8gY2xvc2UgYSB3aW5kb3cgd2l0aG91dCB1bmxvYWRpbmcgdGhlCitidWZmZXIuCisKKworCQkJCQkJCSo6ZGlmZnUqICo6ZGlmZnVwZGF0ZSoKK1ZpbSBhdHRlbXB0cyB0byBrZWVwIHRoZSBkaWZmZXJlbmNlcyB1cGRhdGVkIHdoZW4geW91IG1ha2UgY2hhbmdlcyB0byB0aGUKK3RleHQuICBUaGlzIG1vc3RseSB0YWtlcyBjYXJlIG9mIGluc2VydGVkIGFuZCBkZWxldGVkIGxpbmVzLiAgQ2hhbmdlcyB3aXRoaW4gYQorbGluZSBhbmQgbW9yZSBjb21wbGljYXRlZCBjaGFuZ2VzIGRvIG5vdCBjYXVzZSB0aGUgZGlmZmVyZW5jZXMgdG8gYmUgdXBkYXRlZC4KK1RvIGZvcmNlIHRoZSBkaWZmZXJlbmNlcyB0byBiZSB1cGRhdGVkIHVzZTogPgorCisJOmRpZmZ1cGRhdGUKKworCitWaW0gd2lsbCBzaG93IGZpbGxlciBsaW5lcyBmb3IgbGluZXMgdGhhdCBhcmUgbWlzc2luZyBpbiBvbmUgd2luZG93IGJ1dCBhcmUKK3ByZXNlbnQgaW4gYW5vdGhlci4gIFRoZXNlIGxpbmVzIHdlcmUgaW5zZXJ0ZWQgaW4gYW5vdGhlciBmaWxlIG9yIGRlbGV0ZWQgaW4KK3RoaXMgZmlsZS4gIFJlbW92aW5nICJmaWxsZXIiIGZyb20gdGhlICdkaWZmb3B0JyBvcHRpb24gd2lsbCBtYWtlIFZpbSBub3QKK2Rpc3BsYXkgdGhlc2UgZmlsbGVyIGxpbmVzLgorCisKK0ZvbGRzIGFyZSB1c2VkIHRvIGhpZGUgdGhlIHRleHQgdGhhdCB3YXNuJ3QgY2hhbmdlZC4gIFNlZSB8Zm9sZGluZ3wgZm9yIGFsbAordGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBmb2xkcy4KKworVGhlIGNvbnRleHQgb2YgbGluZXMgYWJvdmUgYSBkaWZmZXJlbmNlIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgZm9sZCBjYW4KK2JlIHNldCB3aXRoIHRoZSAnZGlmZm9wdCcgb3B0aW9uLiAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgY29udGV4dCB0byB0aHJlZQorbGluZXM6ID4KKworCTpzZXQgZGlmZm9wdD1maWxsZXIsY29udGV4dDozCisKKworVGhlIGRpZmZzIGFyZSBoaWdobGlnaHRlZCB3aXRoIHRoZXNlIGdyb3VwczoKKworfGhsLURpZmZBZGR8CURpZmZBZGQJCUFkZGVkIChpbnNlcnRlZCkgbGluZXMuICBUaGVzZSBsaW5lcyBleGlzdCBpbgorCQkJCXRoaXMgYnVmZmVyIGJ1dCBub3QgaW4gYW5vdGhlci4KK3xobC1EaWZmQ2hhbmdlfAlEaWZmQ2hhbmdlCUNoYW5nZWQgbGluZXMuCit8aGwtRGlmZlRleHR8CURpZmZUZXh0CUNoYW5nZWQgdGV4dCBpbnNpZGUgYSBDaGFuZ2VkIGxpbmUuICBWaW0KKwkJCQlmaW5kcyB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgZGlmZmVyZW50LAorCQkJCWFuZCB0aGUgbGFzdCBjaGFyYWN0ZXIgdGhhdCBpcyBkaWZmZXJlbnQKKwkJCQkoc2VhcmNoaW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgbGluZSkuICBUaGUKKwkJCQl0ZXh0IGluIGJldHdlZW4gaXMgaGlnaGxpZ2h0ZWQuICBUaGlzIG1lYW5zCisJCQkJdGhhdCBwYXJ0cyBpbiB0aGUgbWlkZGxlIHRoYXQgYXJlIHN0aWxsIHRoZQorCQkJCXNhbWUgYXJlIGhpZ2hsaWdodGVkIGFueXdheS4KK3xobC1EaWZmRGVsZXRlfCBEaWZmRGVsZXRlCURlbGV0ZWQgbGluZXMuICBBbHNvIGNhbGxlZCBmaWxsZXIgbGluZXMsCisJCQkJYmVjYXVzZSB0aGV5IGRvbid0IHJlYWxseSBleGlzdCBpbiB0aGlzCisJCQkJYnVmZmVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIEp1bXBpbmcgdG8gZGlmZnMJCQkJCSpqdW1wdG8tZGlmZnMqCisKK1R3byBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBqdW1wIHRvIGRpZmZzOgorCQkJCQkJCQkqW2MqCisJW2MJCUp1bXAgYmFja3dhcmRzIHRvIHRoZSBwcmV2aW91cyBzdGFydCBvZiBhIGNoYW5nZS4KKwkJCVdoZW4gYSBjb3VudCBpcyB1c2VkLCBkbyBpdCB0aGF0IG1hbnkgdGltZXMuCisJCQkJCQkJCSpdYyoKKwldYwkJSnVtcCBmb3J3YXJkcyB0byB0aGUgbmV4dCBzdGFydCBvZiBhIGNoYW5nZS4KKwkJCVdoZW4gYSBjb3VudCBpcyB1c2VkLCBkbyBpdCB0aGF0IG1hbnkgdGltZXMuCisKK0l0IGlzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIGNoYW5nZSBmb3IgdGhlIGN1cnNvciB0byBtb3ZlIHRvLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIERpZmYgY29weWluZwkJCSpjb3B5LWRpZmZzKiAqRTk5KiAqRTEwMCogKkUxMDEqICpFMTAyKiAqRTEwMyoKKworVGhlcmUgYXJlIHR3byBjb21tYW5kcyB0byBjb3B5IHRleHQgZnJvbSBvbmUgYnVmZmVyIHRvIGFub3RoZXIuICBUaGUgcmVzdWx0IGlzCit0aGF0IHRoZSBidWZmZXJzIHdpbGwgYmUgZXF1YWwgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCisKKwkJCQkJCQkqOmRpZmZnKiAqOmRpZmZnZXQqCis6W3JhbmdlXWRpZmZnW2V0XSBbYnVmc3BlY10KKwkJTW9kaWZ5IHRoZSBjdXJyZW50IGJ1ZmZlciB0byB1bmRvIGRpZmZlcmVuY2Ugd2l0aCBhbm90aGVyCisJCWJ1ZmZlci4gIElmIFtidWZzcGVjXSBpcyBnaXZlbiwgdGhhdCBidWZmZXIgaXMgdXNlZC4KKwkJT3RoZXJ3aXNlIHRoaXMgb25seSB3b3JrcyBpZiB0aGVyZSBpcyBvbmUgb3RoZXIgYnVmZmVyIGluIGRpZmYKKwkJbW9kZS4KKwkJU2VlIGJlbG93IGZvciBbcmFuZ2VdLgorCisJCQkJCQkJKjpkaWZmcHUqICo6ZGlmZnB1dCoKKzpbcmFuZ2VdZGlmZnB1W3RdIFtidWZzcGVjXQorCQlNb2RpZnkgYW5vdGhlciBidWZmZXIgdG8gdW5kbyBkaWZmZXJlbmNlIHdpdGggdGhlIGN1cnJlbnQKKwkJYnVmZmVyLiAgSnVzdCBsaWtlICI6ZGlmZmdldCIgYnV0IHRoZSBvdGhlciBidWZmZXIgaXMgbW9kaWZpZWQKKwkJaW5zdGVhZCBvZiB0aGUgY3VycmVudCBvbmUuCisJCVNlZSBiZWxvdyBmb3IgW3JhbmdlXS4KKworCQkJCQkJCSpkbyoKK2RvCQlTYW1lIGFzICI6ZGlmZmdldCIgd2l0aG91dCBhcmd1bWVudCBvciByYW5nZS4gIFRoZSAibyIgc3RhbmRzCisJCWZvciAib2J0YWluIiAoImRnIiBjYW4ndCBiZSB1c2VkLCBpdCBjb3VsZCBiZSB0aGUgc3RhcnQgb2YKKwkJImRnZyIhKS4KKworCQkJCQkJCSpkcCoKK2RwCQlTYW1lIGFzICI6ZGlmZnB1dCIgd2l0aG91dCBhcmd1bWVudCBvciByYW5nZS4KKworV2hlbiBubyBbcmFuZ2VdIGlzIGdpdmVuLCB0aGUgZGlmZiBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uIG9yIGp1c3QgYWJvdmUgaXQgaXMKK2FmZmVjdGVkLiAgV2hlbiBbcmFuZ2VdIGlzIHVzZWQsIFZpbSB0cmllcyB0byBvbmx5IHB1dCBvciBnZXQgdGhlIHNwZWNpZmllZAorbGluZXMuICBXaGVuIHRoZXJlIGFyZSBkZWxldGVkIGxpbmVzLCB0aGlzIG1heSBub3QgYWx3YXlzIGJlIHBvc3NpYmxlLgorCitUaGVyZSBjYW4gYmUgZGVsZXRlZCBsaW5lcyBiZWxvdyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBidWZmZXIuICBXaGVuIHRoZSBjdXJzb3IKK2lzIG9uIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGJ1ZmZlciBhbmQgdGhlcmUgaXMgbm8gZGlmZiBhYm92ZSB0aGlzIGxpbmUsIHRoZQorIjpkaWZmZ2V0IiBhbmQgImRvIiBjb21tYW5kcyB3aWxsIG9idGFpbiBsaW5lcyBmcm9tIHRoZSBvdGhlciBidWZmZXIuCisKK1RvIGJlIGFibGUgdG8gZ2V0IHRob3NlIGxpbmVzIGZyb20gYW5vdGhlciBidWZmZXIgaW4gYSBbcmFuZ2VdIGl0J3MgYWxsb3dlZCB0bwordXNlIHRoZSBsYXN0IGxpbmUgbnVtYmVyIHBsdXMgb25lLiAgVGhpcyBjb21tYW5kIGdldHMgYWxsIGRpZmZzIGZyb20gdGhlIG90aGVyCitidWZmZXI6ID4KKworCToxLCQrMWRpZmZnZXQKKworTm90ZSB0aGF0IGRlbGV0ZWQgbGluZXMgYXJlIGRpc3BsYXllZCwgYnV0IG5vdCBjb3VudGVkIGFzIHRleHQgbGluZXMuICBZb3UKK2Nhbid0IG1vdmUgdGhlIGN1cnNvciBpbnRvIHRoZW0uICBUbyBmaWxsIHRoZSBkZWxldGVkIGxpbmVzIHdpdGggdGhlIGxpbmVzCitmcm9tIGFub3RoZXIgYnVmZmVyIHVzZSAiOmRpZmZnZXQiIG9uIHRoZSBsaW5lIGJlbG93IHRoZW0uCisKK1RoZSBbYnVmc3BlY10gYXJndW1lbnQgYWJvdmUgY2FuIGJlIGEgYnVmZmVyIG51bWJlciwgYSBwYXR0ZXJuIGZvciBhIGJ1ZmZlcgorbmFtZSBvciBhIHBhcnQgb2YgYSBidWZmZXIgbmFtZS4gIEV4YW1wbGVzOgorCisJOmRpZmZnZXQJCVVzZSB0aGUgb3RoZXIgYnVmZmVyIHdoaWNoIGlzIGluIGRpZmYgbW9kZQorCTpkaWZmZ2V0IDMJCVVzZSBidWZmZXIgMworCTpkaWZmZ2V0IHYyCQlVc2UgdGhlIGJ1ZmZlciB3aGljaCBtYXRjaGVzICJ2MiIgYW5kIGlzIGluCisJCQkJZGlmZiBtb2RlIChlLmcuLCAiZmlsZS5jLnYyIikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBEaWZmIG9wdGlvbnMJCQkJCQkqZGlmZi1vcHRpb25zKgorCitBbHNvIHNlZSB8J2RpZmZvcHQnfCBhbmQgdGhlICJkaWZmIiBpdGVtIG9mIHwnZmlsbGNoYXJzJ3wuCisKKworRklORElORyBUSEUgRElGRkVSRU5DRVMJCQkJCSpkaWZmLWRpZmZleHByKgorCitUaGUgJ2RpZmZleHByJyBvcHRpb24gY2FuIGJlIHNldCB0byB1c2Ugc29tZXRoaW5nIGVsc2UgdGhhbiB0aGUgc3RhbmRhcmQKKyJkaWZmIiBwcm9ncmFtIHRvIGNvbXBhcmUgdHdvIGZpbGVzIGFuZCBmaW5kIHRoZSBkaWZmZXJlbmNlcy4KKworV2hlbiAnZGlmZmV4cHInIGlzIGVtcHR5LCBWaW0gdXNlcyB0aGlzIGNvbW1hbmQgdG8gZmluZCB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gZmlsZTEgYW5kIGZpbGUyOiA+CisKKwlkaWZmIGZpbGUxIGZpbGUyID4gb3V0ZmlsZQorCitUaGUgIj4iIGlzIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlIG9mICdzaGVsbHJlZGlyJy4KKworVGhlIG91dHB1dCBvZiAiZGlmZiIgbXVzdCBiZSBhIG5vcm1hbCAiZWQiIHN0eWxlIGRpZmYuICBEbyBOT1QgdXNlIGEgY29udGV4dAorZGlmZi4gIFRoaXMgZXhhbXBsZSBleHBsYWlucyB0aGUgZm9ybWF0IHRoYXQgVmltIGV4cGVjdHM6ID4KKworCTFhMgorCT4gYmJiCisJNGQ0CisJPCAxMTEKKwk3YzcKKwk8IEdHRworCS0tLQorCT4gZ2dnCisKK1RoZSAiMWEyIiBpdGVtIGFwcGVuZHMgdGhlIGxpbmUgImJiYiIuCitUaGUgIjRkNCIgaXRlbSBkZWxldGVzIHRoZSBsaW5lICIxMTEiLgorVGhlICc3YzciIGl0ZW0gcmVwbGFjZXMgdGhlIGxpbmUgIkdHRyIgd2l0aCAiZ2dnIi4KKworV2hlbiAnZGlmZmV4cHInIGlzIG5vdCBlbXB0eSwgVmltIGV2YWx1YXRlcyB0byBvYnRhaW4gYSBkaWZmIGZpbGUgaW4gdGhlCitmb3JtYXQgbWVudGlvbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzZXQgdG8gdGhlIGZpbGUgbmFtZXMgdXNlZDoKKworCXY6Zm5hbWVfaW4JCW9yaWdpbmFsIGZpbGUKKwl2OmZuYW1lX25ldwkJbmV3IHZlcnNpb24gb2YgdGhlIHNhbWUgZmlsZQorCXY6Zm5hbWVfb3V0CQlyZXN1bHRpbmcgZGlmZiBmaWxlCisKK0FkZGl0aW9uYWxseSwgJ2RpZmZleHByJyBzaG91bGQgdGFrZSBjYXJlIG9mICJpY2FzZSIgYW5kICJpd2hpdGUiIGluIHRoZQorJ2RpZmZvcHQnIG9wdGlvbi4gICdkaWZmZXhwcicgY2Fubm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgJ2xpbmVzJyBhbmQKKydjb2x1bW5zJy4KKworRXhhbXBsZSAodGhpcyBkb2VzIGFsbW9zdCB0aGUgc2FtZSBhcyAnZGlmZmV4cHInIGJlaW5nIGVtcHR5KTogPgorCisJc2V0IGRpZmZleHByPU15RGlmZigpCisJZnVuY3Rpb24gTXlEaWZmKCkKKwkgICBsZXQgb3B0ID0gIiIKKwkgICBpZiAmZGlmZm9wdCA9fiAiaWNhc2UiCisJICAgICBsZXQgb3B0ID0gb3B0IC4gIi1pICIKKwkgICBlbmRpZgorCSAgIGlmICZkaWZmb3B0ID1+ICJpd2hpdGUiCisJICAgICBsZXQgb3B0ID0gb3B0IC4gIi1iICIKKwkgICBlbmRpZgorCSAgIHNpbGVudCBleGVjdXRlICIhZGlmZiAtYSAtLWJpbmFyeSAiIC4gb3B0IC4gdjpmbmFtZV9pbiAuICIgIiAuIHY6Zm5hbWVfbmV3IC4KKwkJXCAgIiA+ICIgLiB2OmZuYW1lX291dAorCWVuZGZ1bmN0aW9uCisKK1RoZSAiLWEiIGFyZ3VtZW50IGlzIHVzZWQgdG8gZm9yY2UgY29tcGFyaW5nIHRoZSBmaWxlcyBhcyB0ZXh0LCBjb21wYXJpbmcgYXMKK2JpbmFyaWVzIGlzbid0IHVzZWZ1bC4gIFRoZSAiLS1iaW5hcnkiIGFyZ3VtZW50IG1ha2VzIHRoZSBmaWxlcyByZWFkIGluIGJpbmFyeQorbW9kZSwgc28gdGhhdCBhIENUUkwtWiBkb2Vzbid0IGVuZCB0aGUgdGV4dCBvbiBET1MuCisKKwkJCQkJCSpFOTcqCitWaW0gd2lsbCBkbyBhIHRlc3QgaWYgdGhlIGRpZmYgb3V0cHV0IGxvb2tzIGFscmlnaHQuICBJZiBpdCBkb2Vzbid0LCB5b3Ugd2lsbAorZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBQb3NzaWJsZSBjYXVzZXM6CistICBUaGUgImRpZmYiIHByb2dyYW0gY2Fubm90IGJlIGV4ZWN1dGVkLgorLSAgVGhlICJkaWZmIiBwcm9ncmFtIGRvZXNuJ3QgcHJvZHVjZSBub3JtYWwgImVkIiBzdHlsZSBkaWZmcyAoc2VlIGFib3ZlKS4KKy0gIFRoZSAnc2hlbGwnIGFuZCBhc3NvY2lhdGVkIG9wdGlvbnMgYXJlIG5vdCBzZXQgY29ycmVjdGx5LiAgVHJ5IGlmIGZpbHRlcmluZworICAgd29ya3Mgd2l0aCBhIGNvbW1hbmQgbGlrZSAiOiFzb3J0Ii4KKy0gIFlvdSBhcmUgdXNpbmcgJ2RpZmZleHByJyBhbmQgaXQgZG9lc24ndCB3b3JrLgorSWYgaXQncyBub3QgY2xlYXIgd2hhdCB0aGUgcHJvYmxlbSBpcyBzZXQgdGhlICd2ZXJib3NlJyBvcHRpb24gdG8gc2VlIG1vcmUKK21lc3NhZ2VzLgorCisKK1VTSU5HIFBBVENIRVMJCQkJCSpkaWZmLXBhdGNoZXhwcioKKworVGhlICdwYXRjaGV4cHInIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHVzZSBzb21ldGhpbmcgZWxzZSB0aGFuIHRoZSBzdGFuZGFyZAorInBhdGNoIiBwcm9ncmFtLgorCitXaGVuICdwYXRjaGV4cHInIGlzIGVtcHR5LCBWaW0gd2lsbCBjYWxsIHRoZSAicGF0Y2giIHByb2dyYW0gbGlrZSB0aGlzOiA+CisKKwlwYXRjaCAtbyBvdXRmaWxlIG9yaWdmaWxlIDwgcGF0Y2hmaWxlCisKK1RoaXMgc2hvdWxkIHdvcmsgZmluZSB3aXRoIG1vc3QgdmVyc2lvbnMgb2YgdGhlICJwYXRjaCIgcHJvZ3JhbS4gIE5vdGUgdGhhdCBhCitDUiBpbiB0aGUgbWlkZGxlIG9mIGEgbGluZSBtYXkgY2F1c2UgcHJvYmxlbXMsIGl0IGlzIHNlZW4gYXMgYSBsaW5lIGJyZWFrLgorCitJZiB0aGUgZGVmYXVsdCBkb2Vzbid0IHdvcmsgZm9yIHlvdSwgc2V0IHRoZSAncGF0Y2hleHByJyB0byBhbiBleHByZXNzaW9uIHRoYXQKK3dpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHNldCB0byB0aGUgZmlsZSBuYW1lcyB1c2VkOgorCisJdjpmbmFtZV9pbgkJb3JpZ2luYWwgZmlsZQorCXY6Zm5hbWVfZGlmZgkJcGF0Y2ggZmlsZQorCXY6Zm5hbWVfb3V0CQlyZXN1bHRpbmcgcGF0Y2hlZCBmaWxlCisKK0V4YW1wbGUgKHRoaXMgZG9lcyB0aGUgc2FtZSBhcyAncGF0Y2hleHByJyBiZWluZyBlbXB0eSk6ID4KKworCWxldCBwYXRjaGV4cHI9TXlQYXRjaAorCWZ1bmN0aW9uIE15UGF0Y2gKKwkgICA6Y2FsbCBzeXN0ZW0oInBhdGNoIC1vICIgLiB2OmZuYW1lX291dCAuICIgIiAuIHY6Zm5hbWVfaW4gLgorCSAgIFwgICIgPCAiIC4gdjpmbmFtZV9kaWZmKQorCWVuZGZ1bmN0aW9uCisKK01ha2Ugc3VyZSB0aGF0IHVzaW5nIHRoZSAicGF0Y2giIHByb2dyYW0gZG9lc24ndCBoYXZlIHVud2FudGVkIHNpZGUgZWZmZWN0cy4KK0ZvciBleGFtcGxlLCB3YXRjaCBvdXQgZm9yIGFkZGl0aW9uYWxseSBnZW5lcmF0ZWQgZmlsZXMsIHdoaWNoIHNob3VsZCBiZQorZGVsZXRlZC4gIEl0IHNob3VsZCBqdXN0IHBhdGNoIHRoZSBmaWxlIGFuZCBub3RoaW5nIGVsc2UuCisgICBWaW0gd2lsbCBjaGFuZ2UgZGlyZWN0b3J5IHRvICIvdG1wIiBvciBhbm90aGVyIHRlbXAgZGlyZWN0b3J5IGJlZm9yZQorZXZhbHVhdGluZyAncGF0Y2hleHByJy4gIFRoaXMgaG9wZWZ1bGx5IGF2b2lkcyB0aGF0IGZpbGVzIGluIHRoZSBjdXJyZW50CitkaXJlY3RvcnkgYXJlIGFjY2lkZW50YWxseSBwYXRjaGVkLiAgVmltIHdpbGwgYWxzbyBkZWxldGUgZmlsZXMgc3RhcnRpbmcgd2l0aAordjpmbmFtZV9pbiBhbmQgZW5kaW5nIGluICIucmVqIiBhbmQgIi5vcmlnIi4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2RpZ3JhcGgudHh0IGIvcnVudGltZS9kb2MvZGlncmFwaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5YjMwZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2RpZ3JhcGgudHh0CkBAIC0wLDAgKzEsMzIyIEBACisqZGlncmFwaC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDEgU2VwIDAzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworRGlncmFwaHMJCQkJCQkqZGlncmFwaHMqICpEaWdyYXBocyoKKworRGlncmFwaHMgYXJlIHVzZWQgdG8gZW50ZXIgY2hhcmFjdGVycyB0aGF0IG5vcm1hbGx5IGNhbm5vdCBiZSBlbnRlcmVkIGJ5CithbiBvcmRpbmFyeSBrZXlib2FyZC4gIFRoZXNlIGFyZSBtb3N0bHkgYWNjZW50ZWQgY2hhcmFjdGVycyB3aGljaCBoYXZlIHRoZQorZWlnaHRoIGJpdCBzZXQuICBUaGUgZGlncmFwaHMgYXJlIGVhc2llciB0byByZW1lbWJlciB0aGFuIHRoZSBkZWNpbWFsIG51bWJlcgordGhhdCBjYW4gYmUgZW50ZXJlZCB3aXRoIENUUkwtViAoc2VlIHxpX0NUUkwtVnwpLgorCitUaGVyZSBpcyBhIGJyaWVmIGludHJvZHVjdGlvbiBvbiBkaWdyYXBocyBpbiB0aGUgdXNlciBtYW51YWw6IHwyNC45fAorQW4gYWx0ZXJuYXRpdmUgaXMgdXNpbmcgdGhlICdrZXltYXAnIG9wdGlvbi4KKworMS4gRGVmaW5pbmcgZGlncmFwaHMJfGRpZ3JhcGhzLWRlZmluZXwKKzIuIFVzaW5nIGRpZ3JhcGhzCXxkaWdyYXBocy11c2V8CiszLiBEZWZhdWx0IGRpZ3JhcGhzCXxkaWdyYXBocy1kZWZhdWx0fAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gRGVmaW5pbmcgZGlncmFwaHMJCQkJCSpkaWdyYXBocy1kZWZpbmUqCisKKwkJCQkJCSo6ZGlnKiAqOmRpZ3JhcGhzKgorOmRpZ1tyYXBoc10JCXNob3cgY3VycmVudGx5IGRlZmluZWQgZGlncmFwaHMuCisJCQkJCQkJKkUxMDQqICpFMzkqCis6ZGlnW3JhcGhzXSB7Y2hhcjF9e2NoYXIyfSB7bnVtYmVyfSAuLi4KKwkJCUFkZCBkaWdyYXBoIHtjaGFyMX17Y2hhcjJ9IHRvIHRoZSBsaXN0LiAge251bWJlcn0gaXMKKwkJCXRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaGFyYWN0ZXIuCisJCQlFeGFtcGxlOiA+CisJOmRpZ3IgZTogMjM1IGE6IDIyOAorPAkJCUF2b2lkIGRlZmluaW5nIGEgZGlncmFwaCB3aXRoICdfJyAodW5kZXJzY29yZSkgYXMgdGhlCisJCQlmaXJzdCBjaGFyYWN0ZXIsIGl0IGhhcyBhIHNwZWNpYWwgbWVhbmluZyBpbiB0aGUKKwkJCWZ1dHVyZS4KKworVmltIGlzIG5vcm1hbGx5IGNvbXBpbGVkIHdpdGggdGhlIHwrZGlncmFwaHN8IGZlYXR1cmUuICBJZiB0aGUgZmVhdHVyZSBpcworZGlzYWJsZWQsIHRoZSAiOmRpZ3JhcGgiIGNvbW1hbmQgd2lsbCBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UuCisKK0V4YW1wbGUgb2YgdGhlIG91dHB1dCBvZiAiOmRpZ3JhcGhzIjogPgorIFRIIN4gIDIyMiAgc3Mg3yAgMjIzICBhISDgICAyMjQgIGEnIOEgIDIyNSAgYT4g4iAgMjI2ICBhPyDjICAyMjcgIGE6IOQgIDIyOAorCitUaGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgaW4gZWFjaCBjb2x1bW4gYXJlIHRoZSBjaGFyYWN0ZXJzIHlvdSBoYXZlIHRvIHR5cGUgdG8KK2VudGVyIHRoZSBkaWdyYXBoLgorCitJbiB0aGUgbWlkZGxlIG9mIGVhY2ggY29sdW1uIGlzIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyLiAgVGhpcyBtYXkgYmUgbWFuZ2xlZAoraWYgeW91IGxvb2sgYXQgaXQgb24gYSBzeXN0ZW0gdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGRpZ3JhcGhzIG9yIGlmIHlvdSBwcmludAordGhpcyBmaWxlLgorCitUaGUgZGVjaW1hbCBudW1iZXIgaXMgdGhlIG51bWJlciBvZiB0aGUgY2hhcmFjdGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFVzaW5nIGRpZ3JhcGhzCQkJCQkqZGlncmFwaHMtdXNlKgorCitUaGVyZSBhcmUgdHdvIG1ldGhvZHMgdG8gZW50ZXIgZGlncmFwaHM6CQkJKmlfZGlncmFwaCoKKwlDVFJMLUsge2NoYXIxfSB7Y2hhcjJ9CQlvcgorCXtjaGFyMX0gPEJTPiB7Y2hhcjJ9CitUaGUgZmlyc3QgaXMgYWx3YXlzIGF2YWlsYWJsZTsgdGhlIHNlY29uZCBvbmx5IHdoZW4gdGhlICdkaWdyYXBoJyBvcHRpb24gaXMKK3NldC4KKworSWYgYSBkaWdyYXBoIHdpdGgge2NoYXIxfXtjaGFyMn0gZG9lcyBub3QgZXhpc3QsIFZpbSBzZWFyY2hlcyBmb3IgYSBkaWdyYXBoCit7Y2hhcjJ9e2NoYXIxfS4gIFRoaXMgaGVscHMgd2hlbiB5b3UgZG9uJ3QgcmVtZW1iZXIgd2hpY2ggY2hhcmFjdGVyIGNvbWVzCitmaXJzdC4KKworTm90ZSB0aGF0IHdoZW4geW91IGVudGVyIENUUkwtSyB7Y2hhcjF9LCB3aGVyZSB7Y2hhcjF9IGlzIGEgc3BlY2lhbCBrZXksIFZpbQorZW50ZXJzIHRoZSBjb2RlIGZvciB0aGF0IHNwZWNpYWwga2V5LiAgVGhpcyBpcyBub3QgYSBkaWdyYXBoLgorCitPbmNlIHlvdSBoYXZlIGVudGVyZWQgdGhlIGRpZ3JhcGgsIFZpbSB0cmVhdHMgdGhlIGNoYXJhY3RlciBsaWtlIGEgbm9ybWFsCitjaGFyYWN0ZXIgdGhhdCBvY2N1cGllcyBvbmx5IG9uZSBjaGFyYWN0ZXIgaW4gdGhlIGZpbGUgYW5kIG9uIHRoZSBzY3JlZW4uCitFeGFtcGxlOiA+CisJJ0InIDxCUz4gJ0InCXdpbGwgZW50ZXIgdGhlIGJyb2tlbiAnfCcgY2hhcmFjdGVyICgxNjYpCisJJ2EnIDxCUz4gJz4nCXdpbGwgZW50ZXIgYW4gJ2EnIHdpdGggYSBjaXJjdW1mbGV4ICgyMjYpCisJQ1RSTC1LICctJyAnLScJd2lsbCBlbnRlciBhIHNvZnQgaHlwaGVuICgxNzMpCisKK1RoZSBjdXJyZW50IGRpZ3JhcGhzIGFyZSBsaXN0ZWQgd2l0aCB0aGUgIjpkaWdyYXBocyIgY29tbWFuZC4gIFNvbWUgb2YgdGhlCitkZWZhdWx0IG9uZXMgYXJlIGxpc3RlZCBiZWxvdyB8ZGlncmFwaC10YWJsZXwuCisKK0ZvciBDVFJMLUssIHRoZXJlIGlzIG9uZSBnZW5lcmFsIGRpZ3JhcGg6IENUUkwtSyA8U3BhY2U+IHtjaGFyfSB3aWxsIGVudGVyCit7Y2hhcn0gd2l0aCB0aGUgaGlnaGVzdCBiaXQgc2V0LiAgWW91IGNhbiB1c2UgdGhpcyB0byBlbnRlciBtZXRhLWNoYXJhY3RlcnMuCisKK1RoZSA8RXNjPiBjaGFyYWN0ZXIgY2Fubm90IGJlIHBhcnQgb2YgYSBkaWdyYXBoLiAgV2hlbiBoaXR0aW5nIDxFc2M+LCBWaW0KK3N0b3BzIGRpZ3JhcGggZW50cnkgYW5kIGVuZHMgSW5zZXJ0IG1vZGUgb3IgQ29tbWFuZC1saW5lIG1vZGUsIGp1c3QgbGlrZQoraGl0dGluZyBhbiA8RXNjPiBvdXQgb2YgZGlncmFwaCBjb250ZXh0LiAgVXNlIENUUkwtViAxNTUgdG8gZW50ZXIgbWV0YS1FU0MKKyhDU0kpLgorCitJZiB5b3UgYWNjaWRlbnRhbGx5IHR5cGVkIGFuICdhJyB0aGF0IHNob3VsZCBiZSBhbiAnZScsIHlvdSB3aWxsIHR5cGUgJ2EnIDxCUz4KKydlJy4gIEJ1dCB0aGF0IGlzIGEgZGlncmFwaCwgc28geW91IHdpbGwgbm90IGdldCB3aGF0IHlvdSB3YW50LiAgVG8gY29ycmVjdAordGhpcywgeW91IHdpbGwgaGF2ZSB0byB0eXBlIDxCUz4gZSBhZ2Fpbi4gIFRvIGF2b2lkIHRoaXMgZG9uJ3Qgc2V0IHRoZQorJ2RpZ3JhcGgnIG9wdGlvbiBhbmQgdXNlIENUUkwtSyB0byBlbnRlciBkaWdyYXBocy4KKworWW91IG1heSBoYXZlIHByb2JsZW1zIHVzaW5nIFZpbSB3aXRoIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBhbiBBU0NJSSB2YWx1ZQorYWJvdmUgMTI4LiAgRm9yIGV4YW1wbGU6IFlvdSBpbnNlcnQgdWUgKHUtdW1sYXV0KSBhbmQgdGhlIGVkaXRvciBlY2hvZXMgXDMzNAoraW4gSW5zZXJ0IG1vZGUuICBBZnRlciBsZWF2aW5nIHRoZSBJbnNlcnQgbW9kZSBldmVyeXRoaW5nIGlzIGZpbmUuICBOb3RlIHRoYXQKK2ZtdCByZW1vdmVzIGFsbCBjaGFyYWN0ZXJzIHdpdGggQVNDSUkgY29kZXMgYWJvdmUgMTI4IGZyb20gdGhlIHRleHQgYmVpbmcKK2Zvcm1hdHRlZC4gIE9uIHNvbWUgVW5peCBzeXN0ZW1zIHRoaXMgbWVhbnMgeW91IGhhdmUgdG8gZGVmaW5lIHRoZQorZW52aXJvbm1lbnQtdmFyaWFibGUgTENfQ1RZUEUuICBJZiB5b3UgYXJlIHVzaW5nIGNzaCwgdGhlbiBwdXQgdGhlIGZvbGxvd2luZworbGluZSBpbiB5b3VyIC5jc2hyYzogPgorCXNldGVudiBMQ19DVFlQRSBpc29fODg1OV8xCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gRGVmYXVsdCBkaWdyYXBocwkJCQkJKmRpZ3JhcGhzLWRlZmF1bHQqCisKK1ZpbSBjb21lcyB3aXRoIGEgc2V0IG9mIGRlZmF1bHQgZGlncmFwaHMuICBDaGVjayB0aGUgb3V0cHV0IG9mICI6ZGlncmFwaHMiIHRvCitzZWUgdGhlbS4KKworT24gbW9zdCBzeXN0ZW1zIFZpbSB1c2VzIHRoZSBzYW1lIGRpZ3JhcGhzLiAgVGhleSB3b3JrIGZvciB0aGUgVW5pY29kZSBhbmQKK0lTTy04ODU5LTEgY2hhcmFjdGVyIHNldHMuICBUaGVzZSBkZWZhdWx0IGRpZ3JhcGhzIGFyZSB0YWtlbiBmcm9tIHRoZSBSRkMxMzQ1CittbmVtb25pY3MuICBUbyBtYWtlIGl0IGVhc3kgdG8gcmVtZW1iZXIgdGhlIG1uZW1vbmljLCB0aGUgc2Vjb25kIGNoYXJhY3RlciBoYXMKK2Egc3RhbmRhcmQgbWVhbmluZzoKKworCWNoYXIgbmFtZQkJY2hhcgltZWFuaW5nIH4KKwlFeGNsYW1hdGlvbiBtYXJrCSEJR3JhdmUKKwlBcG9zdHJvcGhlCQknCUFjdXRlIGFjY2VudAorCUdyZWF0ZXItVGhhbiBzaWduCT4JQ2lyY3VtZmxleCBhY2NlbnQKKwlRdWVzdGlvbiBNYXJrCQk/CXRpbGRlCisJSHlwaGVuLU1pbnVzCQktCU1hY3JvbgorCUxlZnQgcGFyZW50aGVzaXMJKAlCcmV2ZQorCUZ1bGwgU3RvcAkJLglEb3QgQWJvdmUKKwlDb2xvbgkJCToJRGlhZXJlc2lzCisJQ29tbWEJCQksCUNlZGlsbGEKKwlVbmRlcmxpbmUJCV8JVW5kZXJsaW5lCisJU29saWR1cwkJCS8JU3Ryb2tlCisJUXVvdGF0aW9uIG1hcmsJCSIJRG91YmxlIGFjdXRlIGFjY2VudAorCVNlbWljb2xvbgkJOwlPZ29uZWsKKwlMZXNzLVRoYW4gc2lnbgkJPAlDYXJvbgorCVplcm8JCQkwCVJpbmcgYWJvdmUKKwlUd28JCQkyCUhvb2sKKwlOaW5lCQkJOQlIb3JuCisKKwlFcXVhbHMJCQk9CUN5cmlsbGljCisJQXN0ZXJpc2sJCSoJR3JlZWsKKwlQZXJjZW50IHNpZ24JCSUJR3JlZWsvQ3lyaWxsaWMgc3BlY2lhbAorCVBsdXMJCQkrCXNtYWxsczogQXJhYmljLCBjYXBpdGFsczogSGVicmV3CisJVGhyZWUJCQkzCXNvbWUgTGF0aW4vR3JlZWsvQ3lyaWxsaWMgbGV0dGVycworCUZvdXIJCQk0CUJvcG9tb2ZvCisJRml2ZQkJCTUJSGlyYWdhbmEKKwlTaXgJCQk2CUthdGFrYW5hCisKK0V4YW1wbGU6IGE6IGlzIOQgIGFuZCBvOiBpcyD2CisKK1RoZXNlIGFyZSB0aGUgUkZDMTM0NSBkaWdyYXBocyBmb3IgdGhlIG9uZS1ieXRlIGNoYXJhY3RlcnMuICBTZWUgdGhlIG91dHB1dCBvZgorIjpkaWdyYXBocyIgZm9yIHRoZSBvdGhlcnMuICBUaGUgY2hhcmFjdGVycyBhYm92ZSAyNTUgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4KK1ZpbSB3YXMgY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfCBmZWF0dXJlLgorCQkJCQkJCSpkaWdyYXBoLXRhYmxlKgorY2hhciAgZGlncmFwaAloZXgJZGVjCW9mZmljaWFsIG5hbWUgfgorXkAJTlUJMHgwMAkgIDAJTlVMTCAoTlVMKQorXkEJU0gJMHgwMQkgIDEJU1RBUlQgT0YgSEVBRElORyAoU09IKQorXkIJU1gJMHgwMgkgIDIJU1RBUlQgT0YgVEVYVCAoU1RYKQorXkMJRVgJMHgwMwkgIDMJRU5EIE9GIFRFWFQgKEVUWCkKK15ECUVUCTB4MDQJICA0CUVORCBPRiBUUkFOU01JU1NJT04gKEVPVCkKK15FCUVRCTB4MDUJICA1CUVOUVVJUlkgKEVOUSkKK15GCUFLCTB4MDYJICA2CUFDS05PV0xFREdFIChBQ0spCiteRwlCTAkweDA3CSAgNwlCRUxMIChCRUwpCiteSAlCUwkweDA4CSAgOAlCQUNLU1BBQ0UgKEJTKQorXkkJSFQJMHgwOQkgIDkJQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKQorXkAJTEYJMHgwYQkgMTAJTElORSBGRUVEIChMRikKK15LCVZUCTB4MGIJIDExCUxJTkUgVEFCVUxBVElPTiAoVlQpCiteTAlGRgkweDBjCSAxMglGT1JNIEZFRUQgKEZGKQorXk0JQ1IJMHgwZAkgMTMJQ0FSUklBR0UgUkVUVVJOIChDUikKK15OCVNPCTB4MGUJIDE0CVNISUZUIE9VVCAoU08pCiteTwlTSQkweDBmCSAxNQlTSElGVCBJTiAoU0kpCiteUAlETAkweDEwCSAxNglEQVRBTElOSyBFU0NBUEUgKERMRSkKK15RCUQxCTB4MTEJIDE3CURFVklDRSBDT05UUk9MIE9ORSAoREMxKQorXlIJRDIJMHgxMgkgMTgJREVWSUNFIENPTlRST0wgVFdPIChEQzIpCiteUwlEMwkweDEzCSAxOQlERVZJQ0UgQ09OVFJPTCBUSFJFRSAoREMzKQorXlQJRDQJMHgxNAkgMjAJREVWSUNFIENPTlRST0wgRk9VUiAoREM0KQorXlUJTksJMHgxNQkgMjEJTkVHQVRJVkUgQUNLTk9XTEVER0UgKE5BSykKK15WCVNZCTB4MTYJIDIyCVNZTkNST05PVVMgSURMRSAoU1lOKQorXlcJRUIJMHgxNwkgMjMJRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSyAoRVRCKQorXlgJQ04JMHgxOAkgMjQJQ0FOQ0VMIChDQU4pCiteWQlFTQkweDE5CSAyNQlFTkQgT0YgTUVESVVNIChFTSkKK15aCVNCCTB4MWEJIDI2CVNVQlNUSVRVVEUgKFNVQikKK15bCUVDCTB4MWIJIDI3CUVTQ0FQRSAoRVNDKQorXlwJRlMJMHgxYwkgMjgJRklMRSBTRVBBUkFUT1IgKElTNCkKK15dCUdTCTB4MWQJIDI5CUdST1VQIFNFUEFSQVRPUiAoSVMzKQorXl4JUlMJMHgxZQkgMzAJUkVDT1JEIFNFUEFSQVRPUiAoSVMyKQorXl8JVVMJMHgxZgkgMzEJVU5JVCBTRVBBUkFUT1IgKElTMSkKKwlTUAkweDIwCSAzMglTUEFDRQorIwlOYgkweDIzCSAzNQlOVU1CRVIgU0lHTgorJAlETwkweDI0CSAzNglET0xMQVIgU0lHTgorQAlBdAkweDQwCSA2NAlDT01NRVJDSUFMIEFUCitbCTwoCTB4NWIJIDkxCUxFRlQgU1FVQVJFIEJSQUNLRVQKK1wJLy8JMHg1YwkgOTIJUkVWRVJTRSBTT0xJRFVTCitdCSk+CTB4NWQJIDkzCVJJR0hUIFNRVUFSRSBCUkFDS0VUCiteCSc+CTB4NWUJIDk0CUNJUkNVTUZMRVggQUNDRU5UCitgCSchCTB4NjAJIDk2CUdSQVZFIEFDQ0VOVAorewkoIQkweDdiCTEyMwlMRUZUIENVUkxZIEJSQUNLRVQKK3wJISEJMHg3YwkxMjQJVkVSVElDQUwgTElORQorfQkhKQkweDdkCTEyNQlSSUdIVCBDVVJMWSBCUkFDS0VUCit+CSc/CTB4N2UJMTI2CVRJTERFCitePwlEVAkweDdmCTEyNwlERUxFVEUgKERFTCkKK35ACVBBCTB4ODAJMTI4CVBBRERJTkcgQ0hBUkFDVEVSIChQQUQpCit+QQlITwkweDgxCTEyOQlISUdIIE9DVEVUIFBSRVNFVCAoSE9QKQorfkIJQkgJMHg4MgkxMzAJQlJFQUsgUEVSTUlUVEVEIEhFUkUgKEJQSCkKK35DCU5ICTB4ODMJMTMxCU5PIEJSRUFLIEhFUkUgKE5CSCkKK35ECUlOCTB4ODQJMTMyCUlOREVYIChJTkQpCit+RQlOTAkweDg1CTEzMwlORVhUIExJTkUgKE5FTCkKK35GCVNBCTB4ODYJMTM0CVNUQVJUIE9GIFNFTEVDVEVEIEFSRUEgKFNTQSkKK35HCUVTCTB4ODcJMTM1CUVORCBPRiBTRUxFQ1RFRCBBUkVBIChFU0EpCit+SAlIUwkweDg4CTEzNglDSEFSQUNURVIgVEFCVUxBVElPTiBTRVQgKEhUUykKK35JCUhKCTB4ODkJMTM3CUNIQVJBQ1RFUiBUQUJVTEFUSU9OIFdJVEggSlVTVElGSUNBVElPTiAoSFRKKQorfkoJVlMJMHg4YQkxMzgJTElORSBUQUJVTEFUSU9OIFNFVCAoVlRTKQorfksJUEQJMHg4YgkxMzkJUEFSVElBTCBMSU5FIEZPUldBUkQgKFBMRCkKK35MCVBVCTB4OGMJMTQwCVBBUlRJQUwgTElORSBCQUNLV0FSRCAoUExVKQorfk0JUkkJMHg4ZAkxNDEJUkVWRVJTRSBMSU5FIEZFRUQgKFJJKQorfk4JUzIJMHg4ZQkxNDIJU0lOR0xFLVNISUZUIFRXTyAoU1MyKQorfk8JUzMJMHg4ZgkxNDMJU0lOR0xFLVNISUZUIFRIUkVFIChTUzMpCit+UAlEQwkweDkwCTE0NAlERVZJQ0UgQ09OVFJPTCBTVFJJTkcgKERDUykKK35RCVAxCTB4OTEJMTQ1CVBSSVZBVEUgVVNFIE9ORSAoUFUxKQorflIJUDIJMHg5MgkxNDYJUFJJVkFURSBVU0UgVFdPIChQVTIpCit+UwlUUwkweDkzCTE0NwlTRVQgVFJBTlNNSVQgU1RBVEUgKFNUUykKK35UCUNDCTB4OTQJMTQ4CUNBTkNFTCBDSEFSQUNURVIgKENDSCkKK35VCU1XCTB4OTUJMTQ5CU1FU1NBR0UgV0FJVElORyAoTVcpCit+VglTRwkweDk2CTE1MAlTVEFSVCBPRiBHVUFSREVEIEFSRUEgKFNQQSkKK35XCUVHCTB4OTcJMTUxCUVORCBPRiBHVUFSREVEIEFSRUEgKEVQQSkKK35YCVNTCTB4OTgJMTUyCVNUQVJUIE9GIFNUUklORyAoU09TKQorflkJR0MJMHg5OQkxNTMJU0lOR0xFIEdSQVBISUMgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNHQ0kpCit+WglTQwkweDlhCTE1NAlTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNDSSkKK35bCUNJCTB4OWIJMTU1CUNPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUiAoQ1NJKQorflwJU1QJMHg5YwkxNTYJU1RSSU5HIFRFUk1JTkFUT1IgKFNUKQorfl0JT0MJMHg5ZAkxNTcJT1BFUkFUSU5HIFNZU1RFTSBDT01NQU5EIChPU0MpCit+XglQTQkweDllCTE1OAlQUklWQUNZIE1FU1NBR0UgKFBNKQorfl8JQUMJMHg5ZgkxNTkJQVBQTElDQVRJT04gUFJPR1JBTSBDT01NQU5EIChBUEMpCit8CU5TCTB4YTAJMTYwCU5PLUJSRUFLIFNQQUNFCiuhCSFJCTB4YTEJMTYxCUlOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKK6IJQ3QJMHhhMgkxNjIJQ0VOVCBTSUdOCiujCVBkCTB4YTMJMTYzCVBPVU5EIFNJR04KK6QJQ3UJMHhhNAkxNjQJQ1VSUkVOQ1kgU0lHTgorpQlZZQkweGE1CTE2NQlZRU4gU0lHTgorpglCQgkweGE2CTE2NglCUk9LRU4gQkFSCiunCVNFCTB4YTcJMTY3CVNFQ1RJT04gU0lHTgorqAknOgkweGE4CTE2OAlESUFFUkVTSVMKK6kJQ28JMHhhOQkxNjkJQ09QWVJJR0hUIFNJR04KK6oJLWEJMHhhYQkxNzAJRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKK6sJPDwJMHhhYgkxNzEJTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKK6wJTk8JMHhhYwkxNzIJTk9UIFNJR04KK60JLS0JMHhhZAkxNzMJU09GVCBIWVBIRU4KK64JUmcJMHhhZQkxNzQJUkVHSVNURVJFRCBTSUdOCiuvCSdtCTB4YWYJMTc1CU1BQ1JPTgorsAlERwkweGIwCTE3NglERUdSRUUgU0lHTgorsQkrLQkweGIxCTE3NwlQTFVTLU1JTlVTIFNJR04KK7IJMlMJMHhiMgkxNzgJU1VQRVJTQ1JJUFQgVFdPCiuzCTNTCTB4YjMJMTc5CVNVUEVSU0NSSVBUIFRIUkVFCiu0CScnCTB4YjQJMTgwCUFDVVRFIEFDQ0VOVAortQlNeQkweGI1CTE4MQlNSUNSTyBTSUdOCiu2CVBJCTB4YjYJMTgyCVBJTENST1cgU0lHTgortwkuTQkweGI3CTE4MwlNSURETEUgRE9UCiu4CScsCTB4YjgJMTg0CUNFRElMTEEKK7kJMVMJMHhiOQkxODUJU1VQRVJTQ1JJUFQgT05FCiu6CS1vCTB4YmEJMTg2CU1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgoruwk+PgkweGJiCTE4NwlSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKK7wJMTQJMHhiYwkxODgJVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCiu9CTEyCTB4YmQJMTg5CVZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRgorvgkzNAkweGJlCTE5MAlWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKK78JP0kJMHhiZgkxOTEJSU5WRVJURUQgUVVFU1RJT04gTUFSSworwAlBIQkweGMwCTE5MglMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKK8EJQScJMHhjMQkxOTMJTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCivCCUE+CTB4YzIJMTk0CUxBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCivDCUE/CTB4YzMJMTk1CUxBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorxAlBOgkweGM0CTE5NglMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCivFCUFBCTB4YzUJMTk3CUxBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCivGCUFFCTB4YzYJMTk4CUxBVElOIENBUElUQUwgTEVUVEVSIEFFCivHCUMsCTB4YzcJMTk5CUxBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCivICUUhCTB4YzgJMjAwCUxBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQoryQlFJwkweGM5CTIwMQlMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKK8oJRT4JMHhjYQkyMDIJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKK8sJRToJMHhjYgkyMDMJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworzAlJIQkweGNjCTIwNAlMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKK80JSScJMHhjZAkyMDUJTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCivOCUk+CTB4Y2UJMjA2CUxBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCivPCUk6CTB4Y2YJMjA3CUxBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKK9AJRC0JMHhkMAkyMDgJTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCivRCU4/CTB4ZDEJMjA5CUxBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQor0glPIQkweGQyCTIxMAlMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKK9MJTycJMHhkMwkyMTEJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCivUCU8+CTB4ZDQJMjEyCUxBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCivVCU8/CTB4ZDUJMjEzCUxBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERQor1glPOgkweGQ2CTIxNAlMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCivXCSpYCTB4ZDcJMjE1CU1VTFRJUExJQ0FUSU9OIFNJR04KK9gJTy8JMHhkOAkyMTYJTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQor2QlVIQkweGQ5CTIxNwlMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKK9oJVScJMHhkYQkyMTgJTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCivbCVU+CTB4ZGIJMjE5CUxBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCivcCVU6CTB4ZGMJMjIwCUxBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKK90JWScJMHhkZAkyMjEJTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCiveCVRICTB4ZGUJMjIyCUxBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCivfCXNzCTB4ZGYJMjIzCUxBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTIChHZXJtYW4pCivgCWEhCTB4ZTAJMjI0CUxBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKK+EJYScJMHhlMQkyMjUJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQor4glhPgkweGUyCTIyNglMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKK+MJYT8JMHhlMwkyMjcJTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERQor5AlhOgkweGU0CTIyOAlMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUwor5QlhYQkweGU1CTIyOQlMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKK+YJYWUJMHhlNgkyMzAJTEFUSU4gU01BTEwgTEVUVEVSIEFFCivnCWMsCTB4ZTcJMjMxCUxBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQor6AllIQkweGU4CTIzMglMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCivpCWUnCTB4ZTkJMjMzCUxBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKK+oJZT4JMHhlYQkyMzQJTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCivrCWU6CTB4ZWIJMjM1CUxBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCivsCWkhCTB4ZWMJMjM2CUxBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKK+0JaScJMHhlZAkyMzcJTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQor7glpPgkweGVlCTIzOAlMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKK+8JaToJMHhlZgkyMzkJTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKK/AJZC0JMHhmMAkyNDAJTEFUSU4gU01BTEwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQor8QluPwkweGYxCTI0MQlMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFCivyCW8hCTB4ZjIJMjQyCUxBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKK/MJbycJMHhmMwkyNDMJTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQor9AlvPgkweGY0CTI0NAlMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKK/UJbz8JMHhmNQkyNDUJTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQor9glvOgkweGY2CTI0NglMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUwor9wktOgkweGY3CTI0NwlESVZJU0lPTiBTSUdOCiv4CW8vCTB4ZjgJMjQ4CUxBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCiv5CXUhCTB4ZjkJMjQ5CUxBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKK/oJdScJMHhmYQkyNTAJTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQor+wl1PgkweGZiCTI1MQlMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKK/wJdToJMHhmYwkyNTIJTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKK/0JeScJMHhmZAkyNTMJTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQor/gl0aAkweGZlCTI1NAlMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKK/8JeToJMHhmZgkyNTUJTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2RvY3RhZ3MuYyBiL3J1bnRpbWUvZG9jL2RvY3RhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjEzZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZG9jdGFncy5jCkBAIC0wLDAgKzEsODMgQEAKKy8qIHZpbTpzZXQgdHM9NCBzdz00OgorICogdGhpcyBwcm9ncmFtIG1ha2VzIGEgdGFncyBmaWxlIGZvciB2aW1fcmVmLnR4dAorICoKKyAqIFVzYWdlOiBkb2N0YWdzIHZpbV9yZWYudHh0IHZpbV93aW4udHh0IC4uLiA+dGFncworICoKKyAqIEEgdGFnIGluIHRoaXMgY29udGV4dCBpcyBhbiBpZGVudGlmaWVyIGJldHdlZW4gc3RhcnMsIGUuZy4gKmNfZmlsZXMqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBMSU5FTEVOIDIwMAorCisJaW50CittYWluKGFyZ2MsIGFyZ3YpCisJaW50CQlhcmdjOworCWNoYXIJKiphcmd2OworeworCWNoYXIJbGluZVtMSU5FTEVOXTsKKwljaGFyCSpwMSwgKnAyOworCWNoYXIJKnA7CisJRklMRQkqZmQ7CisKKwlpZiAoYXJnYyA8PSAxKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogZG9jdGFncyBkb2NmaWxlIC4uLiA+dGFnc1xuIik7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiaGVscC10YWdzXHR0YWdzXHQxXG4iKTsKKwl3aGlsZSAoLS1hcmdjID4gMCkKKwl7CisJCSsrYXJndjsKKwkJZmQgPSBmb3Blbihhcmd2WzBdLCAiciIpOworCQlpZiAoZmQgPT0gTlVMTCkKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZ1xuIiwgYXJndlswXSk7CisJCQljb250aW51ZTsKKwkJfQorCQl3aGlsZSAoZmdldHMobGluZSwgTElORUxFTiwgZmQpICE9IE5VTEwpCisJCXsKKwkJCXAxID0gc3RyY2hyKGxpbmUsICcqJyk7CQkJCS8qIGZpbmQgZmlyc3QgJyonICovCisJCQl3aGlsZSAocDEgIT0gTlVMTCkKKwkJCXsKKwkJCQlwMiA9IHN0cmNocihwMSArIDEsICcqJyk7CQkvKiBmaW5kIHNlY29uZCAnKicgKi8KKwkJCQlpZiAocDIgIT0gTlVMTCAmJiBwMiA+IHAxICsgMSkJLyogc2tpcCAiKiIgYW5kICIqKiIgKi8KKwkJCQl7CisJCQkJCWZvciAocCA9IHAxICsgMTsgcCA8IHAyOyArK3ApCisJCQkJCQlpZiAoKnAgPT0gJyAnIHx8ICpwID09ICdcdCcgfHwgKnAgPT0gJ3wnKQorCQkJCQkJCWJyZWFrOworCQkJCQkvKgorCQkJCQkgKiBPbmx5IGFjY2VwdCBhICp0YWcqIHdoZW4gaXQgY29uc2lzdHMgb2YgdmFsaWQKKwkJCQkJICogY2hhcmFjdGVycywgdGhlcmUgaXMgd2hpdGUgc3BhY2UgYmVmb3JlIGl0IGFuZCBpcworCQkJCQkgKiBmb2xsb3dlZCBieSBhIHdoaXRlIGNoYXJhY3RlciBvciBlbmQtb2YtbGluZS4KKwkJCQkJICovCisJCQkJCWlmIChwID09IHAyCisJCQkJCQkJJiYgKHAxID09IGxpbmUgfHwgcDFbLTFdID09ICcgJyB8fCBwMVstMV0gPT0gJ1x0JykKKwkJCQkJCQkJJiYgKHN0cmNocigiIFx0XG5cciIsIHBbMV0pICE9IE5VTEwKKwkJCQkJCQkJCXx8IHBbMV0gPT0gJ1wwJykpCisJCQkJCXsKKwkJCQkJCSpwMiA9ICdcMCc7CisJCQkJCQkrK3AxOworCQkJCQkJcHJpbnRmKCIlc1x0JXNcdC8qIiwgcDEsIGFyZ3ZbMF0pOworCQkJCQkJd2hpbGUgKCpwMSkKKwkJCQkJCXsKKwkJCQkJCQkvKiBpbnNlcnQgYmFja3NsYXNoIGJlZm9yZSAnXFwnIGFuZCAnLycgKi8KKwkJCQkJCQlpZiAoKnAxID09ICdcXCcgfHwgKnAxID09ICcvJykKKwkJCQkJCQkJcHV0Y2hhcignXFwnKTsKKwkJCQkJCQlwdXRjaGFyKCpwMSk7CisJCQkJCQkJKytwMTsKKwkJCQkJCX0KKwkJCQkJCXByaW50ZigiKlxuIik7CisJCQkJCQlwMiA9IHN0cmNocihwMiArIDEsICcqJyk7CQkvKiBmaW5kIG5leHQgJyonICovCisJCQkJCX0KKwkJCQl9CisJCQkJcDEgPSBwMjsKKwkJCX0KKwkJfQorCQlmY2xvc2UoZmQpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2VkaXRpbmcudHh0IGIvcnVudGltZS9kb2MvZWRpdGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1YzM0YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2VkaXRpbmcudHh0CkBAIC0wLDAgKzEsMTQzMiBAQAorKmVkaXRpbmcudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyOAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0VkaXRpbmcgZmlsZXMJCQkJCQkqZWRpdC1maWxlcyoKKworMS4gIEludHJvZHVjdGlvbgkJfGVkaXQtaW50cm98CisyLiAgRWRpdGluZyBhIGZpbGUJCXxlZGl0LWEtZmlsZXwKKzMuICBEaWFsb2dzCQkJfGVkaXQtZGlhbG9nc3wKKzQuICBUaGUgY3VycmVudCBkaXJlY3RvcnkJfGN1cnJlbnQtZGlyZWN0b3J5fAorNS4gIFRoZSBhcmd1bWVudCBsaXN0CQl8YXJndW1lbnQtbGlzdHwKKzYuICBXcml0aW5nCQkJfHdyaXRpbmd8Cis3LiAgV3JpdGluZyBhbmQgcXVpdHRpbmcJfHdyaXRlLXF1aXR8Cis4LiAgRWRpdGluZyBiaW5hcnkgZmlsZXMJfGVkaXQtYmluYXJ5fAorOS4gIEVuY3J5cHRpb24JCQl8ZW5jcnlwdGlvbnwKKzEwLiBUaW1lc3RhbXBzCQkJfHRpbWVzdGFtcHN8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJKmVkaXQtaW50cm8qCisKK0VkaXRpbmcgYSBmaWxlIHdpdGggVmltIG1lYW5zOgorCisxLiByZWFkaW5nIHRoZSBmaWxlIGludG8gdGhlIGludGVybmFsIGJ1ZmZlcgorMi4gY2hhbmdpbmcgdGhlIGJ1ZmZlciB3aXRoIGVkaXRvciBjb21tYW5kcworMy4gd3JpdGluZyB0aGUgYnVmZmVyIGludG8gYSBmaWxlCisKKwkJCQkJCQkqY3VycmVudC1maWxlKgorQXMgbG9uZyBhcyB5b3UgZG9uJ3Qgd3JpdGUgdGhlIGJ1ZmZlciwgdGhlIG9yaWdpbmFsIGZpbGUgcmVtYWlucyB1bmNoYW5nZWQuCitJZiB5b3Ugc3RhcnQgZWRpdGluZyBhIGZpbGUgKHJlYWQgYSBmaWxlIGludG8gdGhlIGJ1ZmZlciksIHRoZSBmaWxlIG5hbWUgaXMKK3JlbWVtYmVyZWQgYXMgdGhlICJjdXJyZW50IGZpbGUgbmFtZSIuCisKKwkJCQkJCQkqYWx0ZXJuYXRlLWZpbGUqCitJZiB0aGVyZSBhbHJlYWR5IHdhcyBhIGN1cnJlbnQgZmlsZSBuYW1lLCB0aGVuIHRoYXQgb25lIGJlY29tZXMgdGhlIGFsdGVybmF0ZQorZmlsZSBuYW1lLiAgQWxsIGZpbGUgbmFtZXMgYXJlIHJlbWVtYmVyZWQgaW4gdGhlIGZpbGUgbGlzdC4gIFdoZW4geW91IGVudGVyIGEKK2ZpbGUgbmFtZSwgZm9yIGVkaXRpbmcgKGUuZy4sIHdpdGggIjplIGZpbGVuYW1lIikgb3Igd3JpdGluZyAoZS5nLiwgd2l0aCAoOncKK2ZpbGUgbmFtZSIpLCB0aGUgZmlsZSBuYW1lIGlzIGFkZGVkIHRvIHRoZSBsaXN0LiAgWW91IGNhbiB1c2UgdGhpcyBsaXN0IHRvCityZW1lbWJlciB3aGljaCBmaWxlcyB5b3UgZWRpdGVkIGFuZCB0byBxdWlja2x5IHN3aXRjaCBmcm9tIG9uZSBmaWxlIHRvCithbm90aGVyIHdpdGggdGhlIENUUkwtXiBjb21tYW5kIChlLmcuLCB0byBjb3B5IHRleHQpLiAgRmlyc3QgdHlwZSB0aGUgbnVtYmVyCitvZiB0aGUgZmlsZSBhbmQgdGhlbiBoaXQgQ1RSTC1eLiAge1ZpOiBvbmx5IG9uZSBhbHRlcm5hdGUgZmlsZSBuYW1lfQorCitDVFJMLUcJCW9yCQkJCSpDVFJMLUcqICo6ZiogKjpmaSogKjpmaWxlKgorOmZbaWxlXQkJCVByaW50cyB0aGUgY3VycmVudCBmaWxlIG5hbWUgKGFzIHR5cGVkKSwgdGhlCisJCQljdXJzb3IgcG9zaXRpb24gKHVubGVzcyB0aGUgJ3J1bGVyJyBvcHRpb24gaXMgc2V0KSwKKwkJCWFuZCB0aGUgZmlsZSBzdGF0dXMgKHJlYWRvbmx5LCBtb2RpZmllZCwgcmVhZCBlcnJvcnMsCisJCQluZXcgZmlsZSkpLiAgU2VlIHRoZSAnc2hvcnRtZXNzJyBvcHRpb24gYWJvdXQgaG93IHRobworCQkJbWFrZSB0aGlzIG1lc3NhZ2Ugc2hvcnRlci4gIHtWaSBkb2VzIG5vdCBpbmNsdWRlCisJCQljb2x1bW4gbnVtYmVyfQorCit7Y291bnR9Q1RSTC1HCQlMaWtlIENUUkwtRywgYnV0IHByaW50cyB0aGUgY3VycmVudCBmaWxlIG5hbWUgd2l0aAorCQkJZnVsbCBwYXRoLiAgSWYgdGhlIGNvdW50IGlzIGhpZ2hlciB0aGFuIDEgdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlciBudW1iZXIgaXMgYWxzbyBnaXZlbi4gIHtub3QgaW4gVml9CisKKwkJCQkJKmdfQ1RSTC1HKiAqd29yZC1jb3VudCogKmJ5dGUtY291bnQqCitnIENUUkwtRwkJUHJpbnRzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IgaW4gZm91cgorCQkJd2F5czogQ29sdW1uLCBMaW5lLCBXb3JkIGFuZCBCeXRlLiAgSWYgdGhlcmUgYXJlCisJCQljaGFyYWN0ZXJzIGluIHRoZSBsaW5lIHRoYXQgdGFrZSBtb3JlIHRoYW4gb25lCisJCQlwb3NpdGlvbiBvbiB0aGUgc2NyZWVuICg8VGFiPiBvciBzcGVjaWFsIGNoYXJhY3RlciksCisJCQlib3RoIHRoZSAicmVhbCIgY29sdW1uIGFuZCB0aGUgc2NyZWVuIGNvbHVtbiBhcmUKKwkJCXNob3duLCBzZXBhcmF0ZWQgd2l0aCBhIGRhc2guICBTZWUgYWxzbyAncnVsZXInCisJCQlvcHRpb24uICB7bm90IGluIFZpfQorCisJCQkJCQkJKnZfZ19DVFJMLUcqCit7VmlzdWFsfWcgQ1RSTC1HCVNpbWlsYXIgdG8gImcgQ1RSTC1HIiwgYnV0IFdvcmQsIExpbmUsIGFuZCBCeXRlIGNvdW50cworCQkJZm9yIHRoZSB2aXN1YWxseSBzZWxlY3RlZCByZWdpb24gYXJlIGRpc3BsYXllZC4gIEluCisJCQlCbG9ja3dpc2UgbW9kZSwgQ29sdW1uIGNvdW50IGlzIGFsc28gc2hvd24uICAoRm9yCisJCQl7VmlzdWFsfSBzZWUgfFZpc3VhbC1tb2RlfC4pCisJCQl7bm90IGluIFZJfQorCisJCQkJCQkJKjpmaWxlX2YqCis6ZltpbGVdIHtuYW1lfQkJU2V0cyB0aGUgY3VycmVudCBmaWxlIG5hbWUgdG8ge25hbWV9LgorCis6YnVmZmVycworOmZpbGVzCis6bHMJCQlMaXN0IGFsbCB0aGUgY3VycmVudGx5IGtub3duIGZpbGUgbmFtZXMuICBTZWUKKwkJCSd3aW5kb3dzLnR4dCcgfDpmaWxlc3wgfDpidWZmZXJzfCB8OmxzfC4gIHtub3QgaW4KKwkJCVZpfQorCitWaW0gd2lsbCByZW1lbWJlciB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgYSBmaWxlIG5hbWUgdGhhdCB5b3UgZW50ZXIuICBJbiBtb3N0CitjYXNlcyB3aGVuIHRoZSBmaWxlIG5hbWUgaXMgZGlzcGxheWVkIG9ubHkgdGhlIG5hbWUgeW91IHR5cGVkIGlzIHNob3duLCBidXQKK3RoZSBmdWxsIHBhdGggbmFtZSBpcyBiZWluZyB1c2VkIGlmIHlvdSB1c2VkIHRoZSAiOmNkIiBjb21tYW5kIHw6Y2R8LgorCisJCQkJCQkJKmhvbWUtcmVwbGFjZSoKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkSE9NRSBpcyBzZXQsIGFuZCB0aGUgZmlsZSBuYW1lIHN0YXJ0cyB3aXRoIHRoYXQKK3N0cmluZywgaXQgaXMgb2Z0ZW4gZGlzcGxheWVkIHdpdGggSE9NRSByZXBsYWNlZCB3aXRoICJ+Ii4gIFRoaXMgd2FzIGRvbmUgdG8KK2tlZXAgZmlsZSBuYW1lcyBzaG9ydC4gIFdoZW4gcmVhZGluZyBvciB3cml0aW5nIGZpbGVzIHRoZSBmdWxsIG5hbWUgaXMgc3RpbGwKK3VzZWQsIHRoZSAifiIgaXMgb25seSB1c2VkIHdoZW4gZGlzcGxheWluZyBmaWxlIG5hbWVzLiAgV2hlbiByZXBsYWNpbmcgdGhlCitmaWxlIG5hbWUgd291bGQgcmVzdWx0IGluIGp1c3QgIn4iLCAifi8iIGlzIHVzZWQgaW5zdGVhZCAodG8gYXZvaWQgY29uZnVzaW9uCit3aXRoICdiYWNrdXBleHQnIHNldCB0byAifiIpLgorCitXaGVuIHdyaXRpbmcgdGhlIGJ1ZmZlciwgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4gIFRodXMKK3doZW4geW91IGdpdmUgdGhlICJaWiIgb3IgIjp3cSIgY29tbWFuZCwgdGhlIG9yaWdpbmFsIGZpbGUgd2lsbCBiZQorb3ZlcndyaXR0ZW4uICBJZiB5b3UgZG8gbm90IHdhbnQgdGhpcywgdGhlIGJ1ZmZlciBjYW4gYmUgd3JpdHRlbiBpbnRvIGFub3RoZXIKK2ZpbGUgYnkgZ2l2aW5nIGEgZmlsZSBuYW1lIGFyZ3VtZW50IHRvIHRoZSAiOndyaXRlIiBjb21tYW5kLiAgRm9yIGV4YW1wbGU6ID4KKworCXZpbSB0ZXN0ZmlsZQorCVtjaGFuZ2UgdGhlIGJ1ZmZlciB3aXRoIGVkaXRvciBjb21tYW5kc10KKwk6dyBuZXdmaWxlCisJOnEKKworVGhpcyB3aWxsIGNyZWF0ZSBhIGZpbGUgIm5ld2ZpbGUiLCB0aGF0IGlzIGEgbW9kaWZpZWQgY29weSBvZiAidGVzdGZpbGUiLgorVGhlIGZpbGUgInRlc3RmaWxlIiB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuICBBbnl3YXksIGlmIHRoZSAnYmFja3VwJyBvcHRpb24gaXMKK3NldCwgVmltIHJlbmFtZXMgb3IgY29waWVzIHRoZSBvcmlnaW5hbCBmaWxlIGJlZm9yZSBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLgorWW91IGNhbiB1c2UgdGhpcyBmaWxlIGlmIHlvdSBkaXNjb3ZlciB0aGF0IHlvdSBuZWVkIHRoZSBvcmlnaW5hbCBmaWxlLiAgU2VlCithbHNvIHRoZSAncGF0Y2htb2RlJyBvcHRpb24uICBUaGUgbmFtZSBvZiB0aGUgYmFja3VwIGZpbGUgaXMgbm9ybWFsbHkgdGhlIHNhbWUKK2FzIHRoZSBvcmlnaW5hbCBmaWxlIHdpdGggJ2JhY2t1cGV4dCcgYXBwZW5kZWQuICBUaGUgZGVmYXVsdCAifiIgaXMgYSBiaXQKK3N0cmFuZ2UgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzLiAgSWYgeW91IHByZWZlciAiLmJhayIKK2NoYW5nZSB0aGUgJ2JhY2t1cGV4dCcgb3B0aW9uLiAgRXh0cmEgZG90cyBhcmUgcmVwbGFjZWQgd2l0aCAnXycgb24gTVMtRE9TCittYWNoaW5lcywgd2hlbiBWaW0gaGFzIGRldGVjdGVkIHRoYXQgYW4gTVMtRE9TLWxpa2UgZmlsZXN5c3RlbSBpcyBiZWluZyB1c2VkCisoZS5nLiwgbWVzc3lkb3Mgb3IgY3Jvc3Nkb3MpIG9yIHdoZW4gdGhlICdzaG9ydG5hbWUnIG9wdGlvbiBpcyBvbi4gIFRoZQorYmFja3VwIGZpbGUgY2FuIGJlIHBsYWNlZCBpbiBhbm90aGVyIGRpcmVjdG9yeSBieSBzZXR0aW5nICdiYWNrdXBkaXInLgorCisJCQkJCQkJKmF1dG8tc2hvcnRuYW1lKgorVGVjaG5pY2FsOiBPbiB0aGUgQW1pZ2EgeW91IGNhbiB1c2UgMzAgY2hhcmFjdGVycyBmb3IgYSBmaWxlIG5hbWUuICBCdXQgb24gYW4KKwkgICBNUy1ET1MtY29tcGF0aWJsZSBmaWxlc3lzdGVtIG9ubHkgOCBwbHVzIDMgY2hhcmFjdGVycyBhcmUKKwkgICBhdmFpbGFibGUuICBWaW0gdHJpZXMgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIGZpbGVzeXN0ZW0gd2hlbiBpdCBpcworCSAgIGNyZWF0aW5nIHRoZSAuc3dwIGZpbGUuICBJZiBhbiBNUy1ET1MtbGlrZSBmaWxlc3lzdGVtIGlzIHN1c3BlY3RlZCwKKwkgICBhIGZsYWcgaXMgc2V0IHRoYXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzZXR0aW5nIHRoZSAnc2hvcnRuYW1lJworCSAgIG9wdGlvbi4gIFRoaXMgZmxhZyB3aWxsIGJlIHJlc2V0IGFzIHNvb24gYXMgeW91IHN0YXJ0IGVkaXRpbmcgYQorCSAgIG5ldyBmaWxlLiAgVGhlIGZsYWcgd2lsbCBiZSB1c2VkIHdoZW4gbWFraW5nIHRoZSBmaWxlIG5hbWUgZm9yIHRoZQorCSAgICIuc3dwIiBhbmQgIi5+IiBmaWxlcyBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gIEJ1dCB3aGVuIHlvdSBhcmUKKwkgICBlZGl0aW5nIGEgZmlsZSBpbiBhIG5vcm1hbCBmaWxlc3lzdGVtIGFuZCB3cml0ZSB0byBhbiBNUy1ET1MtbGlrZQorCSAgIGZpbGVzeXN0ZW0gdGhlIGZsYWcgd2lsbCBub3QgaGF2ZSBiZWVuIHNldC4gIEluIHRoYXQgY2FzZSB0aGUKKwkgICBjcmVhdGlvbiBvZiB0aGUgIi5+IiBmaWxlIG1heSBmYWlsIGFuZCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IKKwkgICBtZXNzYWdlLiAgVXNlIHRoZSAnc2hvcnRuYW1lJyBvcHRpb24gaW4gdGhpcyBjYXNlLgorCitXaGVuIHlvdSBzdGFydGVkIGVkaXRpbmcgd2l0aG91dCBnaXZpbmcgYSBmaWxlIG5hbWUsICJObyBGaWxlIiBpcyBkaXNwbGF5ZWQgaW4KK21lc3NhZ2VzLiAgSWYgdGhlICI6d3JpdGUiIGNvbW1hbmQgaXMgdXNlZCB3aXRoIGEgZmlsZSBuYW1lIGFyZ3VtZW50LCB0aGUgZmlsZQorbmFtZSBmb3IgdGhlIGN1cnJlbnQgZmlsZSBpcyBzZXQgdG8gdGhhdCBmaWxlIG5hbWUuICBUaGlzIG9ubHkgaGFwcGVucyB3aGVuCit0aGUgJ0YnIGZsYWcgaXMgaW5jbHVkZWQgaW4gJ2Nwb3B0aW9ucycgKGJ5IGRlZmF1bHQgaXQgaXMgaW5jbHVkZWQpLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gZW50ZXJpbmcgdGV4dCBpbiBhbiBlbXB0eSBidWZmZXIgYW5kIHRoZW4gd3JpdGluZyBpdCB0byBhIGZpbGUuCitJZiAnY3BvcHRpb25zJyBjb250YWlucyB0aGUgJ2YnIGZsYWcgKGJ5IGRlZmF1bHQgaXQgaXMgTk9UIGluY2x1ZGVkKSB0aGUgZmlsZQorbmFtZSBpcyBzZXQgZm9yIHRoZSAiOnJlYWQgZmlsZSIgY29tbWFuZC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gc3RhcnRpbmcgVmltCit3aXRob3V0IGFuIGFyZ3VtZW50IGFuZCB0aGVuIGRvaW5nICI6cmVhZCBmaWxlIiB0byBzdGFydCBlZGl0aW5nIGEgZmlsZS4KKwkJCQkJCQkqbm90LWVkaXRlZCoKK0JlY2F1c2UgdGhlIGZpbGUgbmFtZSB3YXMgc2V0IHdpdGhvdXQgcmVhbGx5IHN0YXJ0aW5nIHRvIGVkaXQgdGhhdCBmaWxlLCB5b3UKK2FyZSBwcm90ZWN0ZWQgZnJvbSBvdmVyd3JpdGluZyB0aGF0IGZpbGUuICBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUKKyJub3RlZGl0ZWQiIGZsYWcuICBZb3UgY2FuIHNlZSBpZiB0aGlzIGZsYWcgaXMgc2V0IHdpdGggdGhlIENUUkwtRyBvciAiOmZpbGUiCitjb21tYW5kLiAgSXQgd2lsbCBpbmNsdWRlICJbTm90IGVkaXRlZF0iIHdoZW4gdGhlICJub3RlZGl0ZWQiIGZsYWcgaXMgc2V0LgorV2hlbiB3cml0aW5nIHRoZSBidWZmZXIgdG8gdGhlIGN1cnJlbnQgZmlsZSBuYW1lICh3aXRoICI6dyEiKSwgdGhlICJub3RlZGl0ZWQiCitmbGFnIGlzIHJlc2V0LgorCisJCQkJCQkJKmFiYW5kb24qCitWaW0gcmVtZW1iZXJzIHdoZXRoZXIgeW91IGhhdmUgY2hhbmdlZCB0aGUgYnVmZmVyLiAgWW91IGFyZSBwcm90ZWN0ZWQgZnJvbQorbG9zaW5nIHRoZSBjaGFuZ2VzIHlvdSBtYWRlLiAgSWYgeW91IHRyeSB0byBxdWl0IHdpdGhvdXQgd3JpdGluZywgb3Igd2FudCB0bworc3RhcnQgZWRpdGluZyBhbm90aGVyIGZpbGUsIFZpbSB3aWxsIHJlZnVzZSB0aGlzLiAgSW4gb3JkZXIgdG8gb3ZlcnJ1bGUgdGhpcworcHJvdGVjdGlvbiwgYWRkIGEgJyEnIHRvIHRoZSBjb21tYW5kLiAgVGhlIGNoYW5nZXMgd2lsbCB0aGVuIGJlIGxvc3QuICBGb3IKK2V4YW1wbGU6ICI6cSIgd2lsbCBub3Qgd29yayBpZiB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkLCBidXQgIjpxISIgd2lsbC4gIFRvIHNlZQord2hldGhlciB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIHVzZSB0aGUgIkNUUkwtRyIgY29tbWFuZC4gIFRoZSBtZXNzYWdlIGluY2x1ZGVzCit0aGUgc3RyaW5nICJbTW9kaWZpZWRdIiBpZiB0aGUgYnVmZmVyIGhhcyBiZWVuIGNoYW5nZWQuCisKK0lmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgc2F2ZSB0aGUgY2hhbmdlcyB3aXRob3V0IGFza2luZywgc3dpdGNoIG9uIHRoZQorJ2F1dG93cml0ZWFsbCcgb3B0aW9uLiAgJ2F1dG93cml0ZScgaXMgdGhlIGFzc29jaWF0ZWQgVmktY29tcGF0aWJsZSBvcHRpb24KK3RoYXQgZG9lcyBub3Qgd29yayBmb3IgYWxsIGNvbW1hbmRzLgorCitJZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBjaGFuZ2VkIGJ1ZmZlciB3aXRob3V0IHNhdmluZyBpdCwgc3dpdGNoIG9uIHRoZQorJ2hpZGRlbicgb3B0aW9uLiAgU2VlIHxoaWRkZW4tYnVmZmVyfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBFZGl0aW5nIGEgZmlsZQkJCQkJKmVkaXQtYS1maWxlKgorCisJCQkJCQkJKjplKiAqOmVkaXQqCis6ZVtkaXRdIFsrK29wdF0gWytjbWRdCUVkaXQgdGhlIGN1cnJlbnQgZmlsZS4gIFRoaXMgaXMgdXNlZnVsIHRvIHJlLWVkaXQgdGhlCisJCQljdXJyZW50IGZpbGUsIHdoZW4gaXQgaGFzIGJlZW4gY2hhbmdlZCBvdXRzaWRlIG9mIFZpbS4KKwkJCVRoaXMgZmFpbHMgd2hlbiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBjdXJyZW50CisJCQlidWZmZXIgYW5kICdhdXRvd3JpdGVhbGwnIGlzbid0IHNldCBvciB0aGUgZmlsZSBjYW4ndAorCQkJYmUgd3JpdHRlbi4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJCXtWaTogbm8gKytvcHR9CisKKwkJCQkJCQkqOmVkaXQhKgorOmVbZGl0XSEgWysrb3B0XSBbK2NtZF0KKwkJCUVkaXQgdGhlIGN1cnJlbnQgZmlsZSBhbHdheXMuICBEaXNjYXJkIGFueSBjaGFuZ2VzIHRvCisJCQl0aGUgY3VycmVudCBidWZmZXIuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0bworCQkJc3RhcnQgYWxsIG92ZXIgYWdhaW4uCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisJCQl7Vmk6IG5vICsrb3B0fQorCisJCQkJCQkJKjplZGl0X2YqCis6ZVtkaXRdIFsrK29wdF0gWytjbWRdIHtmaWxlfQorCQkJRWRpdCB7ZmlsZX0uCisJCQlUaGlzIGZhaWxzIHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgY3VycmVudAorCQkJYnVmZmVyLCB1bmxlc3MgJ2hpZGRlbicgaXMgc2V0IG9yICdhdXRvd3JpdGVhbGwnIGlzCisJCQlzZXQgYW5kIHRoZSBmaWxlIGNhbiBiZSB3cml0dGVuLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe1ZpOiBubyArK29wdH0KKworCQkJCQkJCSo6ZWRpdCFfZioKKzplW2RpdF0hIFsrK29wdF0gWytjbWRdIHtmaWxlfQorCQkJRWRpdCB7ZmlsZX0gYWx3YXlzLiAgRGlzY2FyZCBhbnkgY2hhbmdlcyB0byB0aGUKKwkJCWN1cnJlbnQgYnVmZmVyLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe1ZpOiBubyArK29wdH0KKworOmVbZGl0XSBbKytvcHRdIFsrY21kXSAjW2NvdW50XQorCQkJRWRpdCB0aGUgW2NvdW50XXRoIGFsdGVybmF0ZSBmaWxlIG5hbWUgKGFzIHNob3duIGJ5CisJCQk6ZmlsZXMpLiAgVGhpcyBjb21tYW5kIGRvZXMgdGhlIHNhbWUgYXMKKwkJCVtjb3VudF0gQ1RSTC1eLiAgQnV0ICI6ZSAjIiBkb2Vzbid0IHdvcmsgaWYgdGhlCisJCQlhbHRlcm5hdGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBhIGZpbGUgbmFtZSwgd2hpbGUKKwkJCUNUUkwtXiBzdGlsbCB3b3JrcyB0aGVuLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe1ZpOiBubyArK29wdH0KKworCQkJCQkJCSo6ZW5lKiAqOmVuZXcqCis6ZW5lW3ddCQkJRWRpdCBhIG5ldywgdW5uYW1lZCBidWZmZXIuICBUaGlzIGZhaWxzIHdoZW4gY2hhbmdlcworCQkJaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLCB1bmxlc3MgJ2hpZGRlbicKKwkJCWlzIHNldCBvciAnYXV0b3dyaXRlYWxsJyBpcyBzZXQgYW5kIHRoZSBmaWxlIGNhbiBiZQorCQkJd3JpdHRlbi4KKwkJCUlmICdmaWxlZm9ybWF0cycgaXMgbm90IGVtcHR5LCB0aGUgZmlyc3QgZm9ybWF0IGdpdmVuCisJCQl3aWxsIGJlIHVzZWQgZm9yIHRoZSBuZXcgYnVmZmVyLiAgSWYgJ2ZpbGVmb3JtYXRzJyBpcworCQkJZW1wdHksIHRoZSAnZmlsZWZvcm1hdCcgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIHVzZWQuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjplbmUhKiAqOmVuZXchKgorOmVuZVt3XSEJCUVkaXQgYSBuZXcsIHVubmFtZWQgYnVmZmVyLiAgRGlzY2FyZCBhbnkgY2hhbmdlcyB0bworCQkJdGhlIGN1cnJlbnQgYnVmZmVyLgorCQkJU2V0ICdmaWxlZm9ybWF0JyBsaWtlIHw6ZW5ld3wuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpmaW4qICo6ZmluZCoKKzpmaW5bZF1bIV0gWysrb3B0XSBbK2NtZF0ge2ZpbGV9CisJCQlGaW5kIHtmaWxlfSBpbiAncGF0aCcgYW5kIHRoZW4gfDplZGl0fCBpdC4KKwkJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gdGhlIHwrZmlsZV9pbl9wYXRofAorCQkJZmVhdHVyZSB3YXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lfQorCis6e2NvdW50fWZpbltkXVshXSBbKytvcHRdIFsrY21kXSB7ZmlsZX0KKwkJCUp1c3QgbGlrZSAiOmZpbmQiLCBidXQgdXNlIHRoZSB7Y291bnR9IG1hdGNoIGluCisJCQkncGF0aCcuICBUaHVzICI6MmZpbmQgZmlsZSIgd2lsbCBmaW5kIHRoZSBzZWNvbmQKKwkJCSJmaWxlIiBmb3VuZCBpbiAncGF0aCcuICBXaGVuIHRoZXJlIGFyZSBmZXdlciBtYXRjaGVzCisJCQlmb3IgdGhlIGZpbGUgaW4gJ3BhdGgnIHRoYW4gYXNrZWQgZm9yLCB5b3UgZ2V0IGFuCisJCQllcnJvciBtZXNzYWdlLgorCisJCQkJCQkJKjpleCoKKzpleCBbKytvcHRdIFsrY21kXSBbZmlsZV0KKwkJCVNhbWUgYXMgfDplZGl0fC4KKworCQkJCQkJCSo6dmkqICo6dmlzdWFsKgorOnZpW3N1YWxdWyFdIFsrK29wdF0gWytjbWRdIFtmaWxlXQorCQkJV2hlbiBlbnRlcmVkIGluIEV4IG1vZGU6IExlYXZlIHxFeC1tb2RlfCwgZ28gYmFjayB0bworCQkJTm9ybWFsIG1vZGUuICBPdGhlcndpc2Ugc2FtZSBhcyB8OmVkaXR8LgorCisJCQkJCQkJKjp2aWUqICo6dmlldyoKKzp2aWVbd10gWysrb3B0XSBbK2NtZF0gZmlsZQorCQkJV2hlbiBlbnRlcmVkIGluIEV4IG1vZGU6IExlYXZlIEV4IG1vZGUsIGdvIGJhY2sgdG8KKwkJCU5vcm1hbCBtb2RlLiAgT3RoZXJ3aXNlIHNhbWUgYXMgfDplZGl0fCwgYnV0IHNldAorCQkJJ3JlYWRvbmx5JyBvcHRpb24gZm9yIHRoaXMgYnVmZmVyLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpDVFJMLV4qICpDVFJMLTYqCitbY291bnRdQ1RSTC1eCQlFZGl0IFtjb3VudF10aCBhbHRlcm5hdGUgZmlsZSAoZXF1aXZhbGVudCB0byAiOmUKKwkJCSNbY291bnRdIikuICBXaXRob3V0IGNvdW50IHRoaXMgZ2V0cyB5b3UgdG8gdGhlCisJCQlwcmV2aW91c2x5IGVkaXRlZCBmaWxlLiAgVGhpcyBpcyBhIHF1aWNrIHdheSB0byB0b2dnbGUKKwkJCWJldHdlZW4gdHdvIChvciBtb3JlKSBmaWxlcy4KKwkJCUlmIHRoZSAnYXV0b3dyaXRlJyBvciAnYXV0b3dyaXRlYWxsJyBvcHRpb24gaXMgb24gYW5kCisJCQl0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkLCB3cml0ZSBpdC4KKwkJCU1vc3RseSB0aGUgXiBjaGFyYWN0ZXIgaXMgcG9zaXRpb25lZCBvbiB0aGUgNiBrZXksCisJCQlwcmVzc2luZyBDVFJMIGFuZCA2IHRoZW4gZ2V0cyB5b3Ugd2hhdCB3ZSBjYWxsIENUUkwtXi4KKwkJCUJ1dCBvbiBzb21lIG5vbi1VUyBrZXlib2FyZHMgQ1RSTC1eIGlzIHByb2R1Y2VkIGluCisJCQlhbm90aGVyIHdheS4KKworW2NvdW50XV1mCQkJCQkJKl1mKiAqW2YqCitbY291bnRdW2YJCVNhbWUgYXMgImdmIi4gIERlcHJlY2F0ZWQuCisKKwkJCQkJCQkqZ2YqICpFNDQ2KiAqRTQ0NyoKK1tjb3VudF1nZgkJRWRpdCB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzIHVuZGVyIG9yIGFmdGVyIHRoZSBjdXJzb3IuCisJCQlNbmVtb25pYzogImdvdG8gZmlsZSIuCisJCQlVc2VzIHRoZSAnaXNmbmFtZScgb3B0aW9uIHRvIGZpbmQgb3V0IHdoaWNoIGNoYXJhY3RlcnMKKwkJCWFyZSBzdXBwb3NlZCB0byBiZSBpbiBhIGZpbGUgbmFtZS4gIFRyYWlsaW5nCisJCQlwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzICIuLDo7ISIgYXJlIGlnbm9yZWQuCisJCQlVc2VzIHRoZSAncGF0aCcgb3B0aW9uIGFzIGEgbGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMKKwkJCXRvIGxvb2sgZm9yIHRoZSBmaWxlLiAgQWxzbyBsb29rcyBmb3IgdGhlIGZpbGUKKwkJCXJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGZpbGUuCisJCQlVc2VzIHRoZSAnc3VmZml4ZXNhZGQnIG9wdGlvbiB0byBjaGVjayBmb3IgZmlsZSBuYW1lcworCQkJd2l0aCBhIHN1ZmZpeCBhZGRlZC4KKwkJCUlmIHRoZSBmaWxlIGNhbid0IGJlIGZvdW5kLCAnaW5jbHVkZWV4cHInIGlzIHVzZWQgdG8KKwkJCW1vZGlmeSB0aGUgbmFtZSBhbmQgYW5vdGhlciBhdHRlbXB0IGlzIGRvbmUuCisJCQlJZiBhIFtjb3VudF0gaXMgZ2l2ZW4sIHRoZSBjb3VudCd0aCBmaWxlIHRoYXQgaXMgZm91bmQKKwkJCWluIHRoZSAncGF0aCcgaXMgZWRpdGVkLgorCQkJVGhpcyBjb21tYW5kIGZhaWxzIGlmIFZpbSByZWZ1c2VzIHRvIHxhYmFuZG9ufCB0aGUKKwkJCWN1cnJlbnQgZmlsZS4KKwkJCUlmIHlvdSBkbyB3YW50IHRvIGVkaXQgYSBuZXcgZmlsZSwgdXNlOiA+CisJCQkJOmUgPGNmaWxlPgorPAkJCVRvIG1ha2UgZ2YgYWx3YXlzIHdvcmsgbGlrZSB0aGF0OiA+CisJCQkJOm1hcCBnZiA6ZSA8Y2ZpbGU+PENSPgorPAkJCUlmIHRoZSBuYW1lIGlzIGEgaHlwZXJ0ZXh0IGxpbmssIHRoYXQgbG9va3MgbGlrZQorCQkJInR5cGU6Ly9tYWNoaW5lL3BhdGgiLCB5b3UgbmVlZCB0aGUgfG5ldHJ3fCBwbHVnaW4uCisJCQlGb3IgVW5peCB0aGUgJ34nIGNoYXJhY3RlciBpcyBleHBhbmRlZCwgbGlrZSBpbgorCQkJIn51c2VyL2ZpbGUiLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB0b28KKwkJCXxleHBhbmQtZW52fC4KKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K2ZpbGVfaW5fcGF0aHwgZmVhdHVyZSB3YXMKKwkJCWRpc2FibGVkIGF0IGNvbXBpbGUgdGltZX0KKworCQkJCQkJCSp2X2dmKgore1Zpc3VhbH1bY291bnRdZ2YJU2FtZSBhcyAiZ2YiLCBidXQgdGhlIGhpZ2hsaWdodGVkIHRleHQgaXMgdXNlZCBhcyB0aGUKKwkJCW5hbWUgb2YgdGhlIGZpbGUgdG8gZWRpdC4gICdpc2ZuYW1lJyBpcyBpZ25vcmVkLgorCQkJTGVhZGluZyBibGFua3MgYXJlIHNraXBwZWQsIG90aGVyd2lzZSBhbGwgYmxhbmtzIGFuZAorCQkJc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmlsZSBuYW1lLgorCQkJKEZvciB7VmlzdWFsfSBzZWUgfFZpc3VhbC1tb2RlfC4pCisJCQl7bm90IGluIFZJfQorCitUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byBzdGFydCBlZGl0aW5nIGEgc2luZ2xlIGZpbGUuICBUaGlzIG1lYW5zIHRoYXQgdGhlCitmaWxlIGlzIHJlYWQgaW50byB0aGUgYnVmZmVyIGFuZCB0aGUgY3VycmVudCBmaWxlIG5hbWUgaXMgc2V0LiAgVGhlIGZpbGUgdGhhdAoraXMgb3BlbmVkIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBzZWUgfDpjZHwuCisKK1NlZSB8cmVhZC1tZXNzYWdlc3wgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBtZXNzYWdlIHRoYXQgaXMgZ2l2ZW4gYWZ0ZXIgdGhlCitmaWxlIGhhcyBiZWVuIHJlYWQuCisKK1lvdSBjYW4gdXNlIHRoZSAiOmUhIiBjb21tYW5kIGlmIHlvdSBtZXNzZWQgdXAgdGhlIGJ1ZmZlciBhbmQgd2FudCB0byBzdGFydAorYWxsIG92ZXIgYWdhaW4uICBUaGUgIjplIiBjb21tYW5kIGlzIG9ubHkgdXNlZnVsIGlmIHlvdSBoYXZlIGNoYW5nZWQgdGhlCitjdXJyZW50IGZpbGUgbmFtZS4KKworCQkJCQkJCSo6ZmlsZW5hbWUqICp7ZmlsZX0qCitOb3RlIGZvciBzeXN0ZW1zIG90aGVyIHRoYW4gVW5peCBhbmQgTVMtRE9TOiBXaGVuIHVzaW5nIGEgY29tbWFuZCB0aGF0CithY2NlcHRzIGEgc2luZ2xlIGZpbGUgbmFtZSAobGlrZSAiOmVkaXQgZmlsZSIpIHNwYWNlcyBpbiB0aGUgZmlsZSBuYW1lIGFyZQorYWxsb3dlZCwgYnV0IHRyYWlsaW5nIHNwYWNlcyBhcmUgaWdub3JlZC4gIFRoaXMgaXMgdXNlZnVsIG9uIHN5c3RlbXMgdGhhdAorYWxsb3cgZmlsZSBuYW1lcyB3aXRoIGVtYmVkZGVkIHNwYWNlcyAobGlrZSB0aGUgQW1pZ2EpLiAgRXhhbXBsZTogVGhlIGNvbW1hbmQKKyI6ZSAgIExvbmcgRmlsZSBOYW1lICIgd2lsbCBlZGl0IHRoZSBmaWxlICJMb25nIEZpbGUgTmFtZSIuICBXaGVuIHVzaW5nIGEKK2NvbW1hbmQgdGhhdCBhY2NlcHRzIG1vcmUgdGhhbiBvbmUgZmlsZSBuYW1lIChsaWtlICI6bmV4dCBmaWxlMSBmaWxlMiIpCitlbWJlZGRlZCBzcGFjZXMgbXVzdCBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guCisKK1dpbGRjYXJkcyBpbiB7ZmlsZX0gYXJlIGV4cGFuZGVkLiAgV2hpY2ggd2lsZGNhcmRzIGFyZSBzdXBwb3J0ZWQgZGVwZW5kcyBvbgordGhlIHN5c3RlbS4gIFRoZXNlIGFyZSB0aGUgY29tbW9uIG9uZXM6CisJKgltYXRjaGVzIGFueXRoaW5nLCBpbmNsdWRpbmcgbm90aGluZworCT8JbWF0Y2hlcyBvbmUgY2hhcmFjdGVyCisJW2FiY10JbWF0Y2ggJ2EnLCAnYicgb3IgJ2MnCitUbyBhdm9pZCB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIHRoZSB3aWxkY2FyZHMgcHJlcGVuZCBhIGJhY2tzbGFzaC4gIEhvd2V2ZXIsCitvbiBNUy1XaW5kb3dzIHRoZSBiYWNrc2xhc2ggaXMgYSBwYXRoIHNlcGFyYXRvciBhbmQgInBhdGhcW2FiY10iIGlzIHN0aWxsIHNlZW4KK2FzIGEgd2lsZGNhcmQgd2hlbiAiWyIgaXMgaW4gdGhlICdpc2ZuYW1lJyBvcHRpb24uICBBIHNpbXBsZSB3YXkgdG8gYXZvaWQgdGhpcworaXMgdG8gdXNlICJwYXRoXFtbXWFiY10iLiAgVGhlbiB0aGUgZmlsZSAicGF0aFthYmNdIiBsaXRlcmFsbHkuCisKKwkJCQkJKmJhY2t0aWNrLWV4cGFuc2lvbiogKmAtZXhwYW5zaW9uKgorT24gVW5peCB5b3UgY2FuIGFsc28gdXNlIGJhY2t0aWNrcyBpbiB0aGUgZmlsZSBuYW1lLCBmb3IgZXhhbXBsZTogPgorCTplIGBmaW5kIC4gLW5hbWUgdmVyXFwqLmMgLXByaW50YAorVGhlIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGUgc3RhciBhcmUgcmVxdWlyZWQgdG8gcHJldmVudCAidmVyKi5jIiB0byBiZQorZXhwYW5kZWQgYnkgdGhlIHNoZWxsIGJlZm9yZSBleGVjdXRpbmcgdGhlIGZpbmQgcHJvZ3JhbS4KK1RoaXMgYWxzbyB3b3JrcyBmb3IgbW9zdCBvdGhlciBzeXN0ZW1zLCB3aXRoIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZQorYmFja3RpY2tzIG11c3QgYmUgYXJvdW5kIHRoZSB3aG9sZSBpdGVtLiAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgdGV4dAorZGlyZWN0bHkgYmVmb3JlIHRoZSBmaXJzdCBvciBqdXN0IGFmdGVyIHRoZSBsYXN0IGJhY2t0aWNrLgorCitZb3UgY2FuIGhhdmUgdGhlIGJhY2t0aWNrcyBleHBhbmRlZCBhcyBhIFZpbSBleHByZXNzaW9uLCBpbnN0ZWFkIG9mCithbiBleHRlcm5hbCBjb21tYW5kLCBieSB1c2luZyB0aGUgc3ludGF4IGA9e2V4cHJ9YCBlLmcuID4KKwk6bGV0IGZvbz0nYmFyJworCTplIGA9Zm9vIC4gIi5jIiBgCitlZGl0cyAiYmFyLmMiLiAgTm90ZSB0aGF0IHRoZSBleHByZXNzaW9uIGNhbm5vdCBjb250YWluIGEgYmFja3RpY2suCisKKwkJCQkJCQkqKytvcHQqICpbKytvcHRdKgorVGhlIFsrK29wdF0gYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhlIHZhbHVlIG9mICdmaWxlZm9ybWF0JyBvcgorJ2ZpbGVlbmNvZGluZycgdG8gYSB2YWx1ZSBmb3Igb25lIGNvbW1hbmQuICBUaGUgZm9ybSBpczogPgorCSsre29wdG5hbWV9PXt2YWx1ZX0KKworV2hlcmUge29wdG5hbWV9IGlzIG9uZSBvZjoJCSorK2ZmKiAqKytlbmMqICorK2JpbiogKisrbm9iaW4qCisgICAgZmYgICAgIG9yICBmaWxlZm9ybWF0ICAgb3ZlcnJpZGVzICdmaWxlZm9ybWF0JworICAgIGVuYyAgICBvciAgZW5jb2RpbmcJICAgIG92ZXJyaWRlcyAnZmlsZWVuY29kaW5nJworICAgIGJpbiAgICBvciAgYmluYXJ5CSAgICBzZXRzICdiaW5hcnknCisgICAgbm9iaW4gIG9yICBub2JpbmFyeQkgICAgcmVzZXRzICdiaW5hcnknCisKK3t2YWx1ZX0gY2Fubm90IGNvbnRhaW4gd2hpdGUgc3BhY2UuICBJdCBjYW4gYmUgYW55IHZhbGlkIHZhbHVlIGZvciB0aGVzZQorb3B0aW9ucy4gIEV4YW1wbGVzOiA+CisJOmUgKytmZj11bml4CitUaGlzIGVkaXRzIHRoZSBzYW1lIGZpbGUgYWdhaW4gd2l0aCAnZmlsZWZvcm1hdCcgc2V0IHRvICJ1bml4Ii4gPgorCisJOncgKytlbmM9bGF0aW4xIG5ld2ZpbGUKK1RoaXMgd3JpdGVzIHRoZSBjdXJyZW50IGJ1ZmZlciB0byAibmV3ZmlsZSIgaW4gbGF0aW4xIGZvcm1hdC4KKworTm90ZSB0aGF0IHdoZW4gcmVhZGluZywgdGhlICdmaWxlZm9ybWF0JyBhbmQgJ2ZpbGVlbmNvZGluZycgb3B0aW9ucyB3aWxsIGJlCitzZXQgdG8gdGhlIHVzZWQgZm9ybWF0LiAgV2hlbiB3cml0aW5nIHRoaXMgZG9lc24ndCBoYXBwZW4sIHRodXMgYSBuZXh0IHdyaXRlCit3aWxsIHVzZSB0aGUgb2xkIHZhbHVlIG9mIHRoZSBvcHRpb24uICBTYW1lIGZvciB0aGUgJ2JpbmFyeScgb3B0aW9uLgorCitUaGVyZSBtYXkgYmUgc2V2ZXJhbCArK29wdCBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZS4gIFRoZXkgbXVzdCBhbGwKK2FwcGVhciBiZWZvcmUgYW55IHwrY21kfCBhcmd1bWVudC4KKworCQkJCQkJCSorY21kKiAqWytjbWRdKgorVGhlIFsrY21kXSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSBuZXdseSBvcGVuZWQKK2ZpbGUsIG9yIGV4ZWN1dGUgYW55IG90aGVyIGNvbW1hbmQ6CisJKwkJU3RhcnQgYXQgdGhlIGxhc3QgbGluZS4KKwkre251bX0JCVN0YXJ0IGF0IGxpbmUge251bX0uCisJKy97cGF0fQkJU3RhcnQgYXQgZmlyc3QgbGluZSBjb250YWluaW5nIHtwYXR9LgorCSt7Y29tbWFuZH0JRXhlY3V0ZSB7Y29tbWFuZH0gYWZ0ZXIgb3BlbmluZyB0aGUgbmV3IGZpbGUuCisJCQl7Y29tbWFuZH0gaXMgYW55IEV4IGNvbW1hbmQuCitUbyBpbmNsdWRlIGEgd2hpdGUgc3BhY2UgaW4gdGhlIHtwYXR9IG9yIHtjb21tYW5kfSwgcHJlY2VkZSBpdCB3aXRoIGEKK2JhY2tzbGFzaC4gIERvdWJsZSB0aGUgbnVtYmVyIG9mIGJhY2tzbGFzaGVzLiA+CisJOmVkaXQgICsvVGhlXCBib29rCSAgICAgZmlsZQorCTplZGl0ICArL2RpclwgZGlybmFtZVxcICAgICAgZmlsZQorCTplZGl0ICArc2V0XCBkaXI9YzpcXFxcdGVtcCAgZmlsZQorTm90ZSB0aGF0IGluIHRoZSBsYXN0IGV4YW1wbGUgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpcyBoYWx2ZWQgdHdpY2U6IE9uY2UKK2ZvciB0aGUgIitjbWQiIGFyZ3VtZW50IGFuZCBvbmNlIGZvciB0aGUgIjpzZXQiIGNvbW1hbmQuCisKKwkJCQkJCQkqZmlsZS1mb3JtYXRzKgorVGhlICdmaWxlZm9ybWF0JyBvcHRpb24gc2V0cyB0aGUgPEVPTD4gc3R5bGUgZm9yIGEgZmlsZToKKydmaWxlZm9ybWF0JyAgICBjaGFyYWN0ZXJzCSAgIG5hbWUJCQkJfgorICAiZG9zIgkJPENSPjxOTD4gb3IgPE5MPiAgIERPUyBmb3JtYXQJCSpET1MtZm9ybWF0KgorICAidW5peCIJPE5MPgkJICAgVW5peCBmb3JtYXQJCSpVbml4LWZvcm1hdCoKKyAgIm1hYyIJCTxDUj4JCSAgIE1hYyBmb3JtYXQJCSpNYWMtZm9ybWF0KgorUHJldmlvdXNseSAndGV4dG1vZGUnIHdhcyB1c2VkLiAgSXQgaXMgb2Jzb2xldGUgbm93LgorCitXaGVuIHJlYWRpbmcgYSBmaWxlLCB0aGUgbWVudGlvbmVkIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIHRoZSA8RU9MPi4KK0luIERPUyBmb3JtYXQgKGRlZmF1bHQgZm9yIE1TLURPUywgT1MvMiBhbmQgV2luMzIpLCA8Q1I+PE5MPiBhbmQgPE5MPiBhcmUgYm90aAoraW50ZXJwcmV0ZWQgYXMgdGhlIDxFT0w+LiAgTm90ZSB0aGF0IHdoZW4gd3JpdGluZyB0aGUgZmlsZSBpbiBET1MgZm9ybWF0LAorPENSPiBjaGFyYWN0ZXJzIHdpbGwgYmUgYWRkZWQgZm9yIGVhY2ggc2luZ2xlIDxOTD4uICBBbHNvIHNlZSB8ZmlsZS1yZWFkfC4KKworV2hlbiB3cml0aW5nIGEgZmlsZSwgdGhlIG1lbnRpb25lZCBjaGFyYWN0ZXJzIGFyZSB1c2VkIGZvciA8RU9MPi4gIEZvciBET1MKK2Zvcm1hdCA8Q1I+PE5MPiBpcyB1c2VkLiAgQWxzbyBzZWUgfERPUy1mb3JtYXQtd3JpdGV8LgorCitZb3UgY2FuIHJlYWQgYSBmaWxlIGluIERPUyBmb3JtYXQgYW5kIHdyaXRlIGl0IGluIFVuaXggZm9ybWF0LiAgVGhpcyB3aWxsCityZXBsYWNlIGFsbCA8Q1I+PE5MPiBwYWlycyBieSA8Tkw+IChhc3N1bWluZyAnZmlsZWZvcm1hdHMnIGluY2x1ZGVzICJkb3MiKTogPgorCTplIGZpbGUKKwk6c2V0IGZpbGVmb3JtYXQ9dW5peAorCTp3CitJZiB5b3UgcmVhZCBhIGZpbGUgaW4gVW5peCBmb3JtYXQgYW5kIHdyaXRlIHdpdGggRE9TIGZvcm1hdCwgYWxsIDxOTD4KK2NoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIDxDUj48Tkw+IChhc3N1bWluZyAnZmlsZWZvcm1hdHMnIGluY2x1ZGVzCisidW5peCIpOiA+CisJOmUgZmlsZQorCTpzZXQgZmlsZWZvcm1hdD1kb3MKKwk6dworCitJZiB5b3Ugc3RhcnQgZWRpdGluZyBhIG5ldyBmaWxlIGFuZCB0aGUgJ2ZpbGVmb3JtYXRzJyBvcHRpb24gaXMgbm90IGVtcHR5Cisod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBWaW0gd2lsbCB0cnkgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIGxpbmVzIGluIHRoZSBmaWxlCithcmUgc2VwYXJhdGVkIGJ5IHRoZSBzcGVjaWZpZWQgZm9ybWF0cy4gIFdoZW4gc2V0IHRvICJ1bml4LGRvcyIsIFZpbSB3aWxsCitjaGVjayBmb3IgbGluZXMgd2l0aCBhIHNpbmdsZSA8Tkw+IChhcyB1c2VkIG9uIFVuaXggYW5kIEFtaWdhKSBvciBieSBhIDxDUj4KKzxOTD4gcGFpciAoTVMtRE9TKS4gIE9ubHkgd2hlbiBBTEwgbGluZXMgZW5kIGluIDxDUj48Tkw+LCAnZmlsZWZvcm1hdCcgaXMgc2V0Cit0byAiZG9zIiwgb3RoZXJ3aXNlIGl0IGlzIHNldCB0byAidW5peCIuICBXaGVuICdmaWxlZm9ybWF0cycgaW5jbHVkZXMgIm1hYyIsCithbmQgbm8gPE5MPiBjaGFyYWN0ZXJzIGFyZSBmb3VuZCBpbiB0aGUgZmlsZSwgJ2ZpbGVmb3JtYXQnIGlzIHNldCB0byAibWFjIi4KKworSWYgdGhlICdmaWxlZm9ybWF0JyBvcHRpb24gaXMgc2V0IHRvICJkb3MiIG9uIG5vbi1NUy1ET1Mgc3lzdGVtcyB0aGUgbWVzc2FnZQorIltkb3MgZm9ybWF0XSIgaXMgc2hvd24gdG8gcmVtaW5kIHlvdSB0aGF0IHNvbWV0aGluZyB1bnVzdWFsIGlzIGhhcHBlbmluZy4gIE9uCitNUy1ET1Mgc3lzdGVtcyB5b3UgZ2V0IHRoZSBtZXNzYWdlICJbdW5peCBmb3JtYXRdIiBpZiAnZmlsZWZvcm1hdCcgaXMgc2V0IHRvCisidW5peCIuICBPbiBhbGwgc3lzdGVtcyBidXQgdGhlIE1hY2ludG9zaCB5b3UgZ2V0IHRoZSBtZXNzYWdlICJbbWFjIGZvcm1hdF0iCitpZiAnZmlsZWZvcm1hdCcgaXMgc2V0IHRvICJtYWMiLgorCitJZiB0aGUgJ2ZpbGVmb3JtYXRzJyBvcHRpb24gaXMgZW1wdHkgYW5kIERPUyBmb3JtYXQgaXMgdXNlZCwgYnV0IHdoaWxlIHJlYWRpbmcKK2EgZmlsZSBzb21lIGxpbmVzIGRpZCBub3QgZW5kIGluIDxDUj48Tkw+LCAiW0NSIG1pc3NpbmddIiB3aWxsIGJlIGluY2x1ZGVkIGluCit0aGUgZmlsZSBtZXNzYWdlLgorSWYgdGhlICdmaWxlZm9ybWF0cycgb3B0aW9uIGlzIGVtcHR5IGFuZCBNYWMgZm9ybWF0IGlzIHVzZWQsIGJ1dCB3aGlsZSByZWFkaW5nCithIGZpbGUgYSA8Tkw+IHdhcyBmb3VuZCwgIltOTCBtaXNzaW5nXSIgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZmlsZSBtZXNzYWdlLgorCitJZiB0aGUgbmV3IGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZSAnZmlsZWZvcm1hdCcgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIHVzZWQKK3doZW4gJ2ZpbGVmb3JtYXRzJyBpcyBlbXB0eS4gIE90aGVyd2lzZSB0aGUgZmlyc3QgZm9ybWF0IGZyb20gJ2ZpbGVmb3JtYXRzJyBpcwordXNlZCBmb3IgdGhlIG5ldyBmaWxlLgorCitCZWZvcmUgZWRpdGluZyBiaW5hcnksIGV4ZWN1dGFibGUgb3IgVmltIHNjcmlwdCBmaWxlcyB5b3Ugc2hvdWxkIHNldCB0aGUKKydiaW5hcnknIG9wdGlvbi4gIEEgc2ltcGxlIHdheSB0byBkbyB0aGlzIGlzIGJ5IHN0YXJ0aW5nIFZpbSB3aXRoIHRoZSAiLWIiCitvcHRpb24uICBUaGlzIHdpbGwgYXZvaWQgdGhlIHVzZSBvZiAnZmlsZWZvcm1hdCcuICBXaXRob3V0IHRoaXMgeW91IHJpc2sgdGhhdAorc2luZ2xlIDxOTD4gY2hhcmFjdGVycyBhcmUgdW5leHBlY3RlZGx5IHJlcGxhY2VkIHdpdGggPENSPjxOTD4uCisKK1lvdSBjYW4gZW5jcnlwdCBmaWxlcyB0aGF0IGFyZSB3cml0dGVuIGJ5IHNldHRpbmcgdGhlICdrZXknIG9wdGlvbi4gIFRoaXMKK3Byb3ZpZGVzIHNvbWUgc2VjdXJpdHkgYWdhaW5zdCBvdGhlcnMgcmVhZGluZyB5b3VyIGZpbGVzLiB8ZW5jcnlwdGlvbnwKKworCitGaWxlIFNlYXJjaGluZwkJCQkJCSpmaWxlLXNlYXJjaGluZyoKKwore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3BhdGhfZXh0cmF8IGZlYXR1cmV9CisKK1RoZSBmaWxlIHNlYXJjaGluZyBpcyBjdXJyZW50bHkgdXNlZCBmb3IgdGhlICdwYXRoJywgJ2NkcGF0aCcgYW5kICd0YWdzJworb3B0aW9ucy4gIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VhcmNoaW5nOgorCisxKSBEb3dud2FyZCBzZWFyY2g6CisgICBEb3dud2FyZCBzZWFyY2ggdXNlcyB0aGUgd2lsZGNhcmRzICcqJywgJyoqJyBhbmQgcG9zc2libHkgb3RoZXJzCisgICBzdXBwb3J0ZWQgYnkgeW91ciBvcGVyYXRpbmcgc3lzdGVtLiAnKicgYW5kICcqKicgYXJlIGhhbmRsZWQgaW5zaWRlIFZpbSwgc28KKyAgIHRoZXkgd29yayBvbiBhbGwgb3BlcmF0aW5nIHN5c3RlbXMuCisKKyAgIFRoZSB1c2FnZSBvZiAnKicgaXMgcXVpdGUgc2ltcGxlOiBJdCBtYXRjaGVzIDAgb3IgbW9yZSBjaGFyYWN0ZXJzLgorCisgICAnKionIGlzIG1vcmUgc29waGlzdGljYXRlZDoKKyAgICAgIC0gSXQgT05MWSBtYXRjaGVzIGRpcmVjdG9yaWVzLgorICAgICAgLSBJdCBtYXRjaGVzIHVwIHRvIDMwICBkaXJlY3RvcmllcyBkZWVwLCBzbyB5b3UgY2FuIHVzZSBpdCB0byBzZWFyY2ggYW4KKwllbnRpcmUgZGlyZWN0b3J5IHRyZWUKKyAgICAgIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGxldmVscyBtYXRjaGVkIGNhbiBiZSBnaXZlbiBieSBhcHBlbmRpbmcgYSBudW1iZXIKKwl0byAnKionLgorCVRodXMgJy91c3IvKioyJyBjYW4gbWF0Y2g6ID4KKwkJL3VzcgorCQkvdXNyL2luY2x1ZGUKKwkJL3Vzci9pbmNsdWRlL3N5cworCQkvdXNyL2luY2x1ZGUvZysrCisJCS91c3IvbGliCisJCS91c3IvbGliL1gxMQorCQkuLi4uCis8CUl0IGRvZXMgTk9UIG1hdGNoICcvdXNyL2luY2x1ZGUvZysrL3N0ZCcgYXMgdGhpcyB3b3VsZCBiZSB0aHJlZQorCWxldmVscy4KKwlUaGUgYWxsb3dlZCBudW1iZXIgcmFuZ2UgaXMgMCAoJyoqMCcgaXMgcmVtb3ZlZCkgdG8gMjU1LgorCUlmIHRoZSBnaXZlbiBudW1iZXIgaXMgc21hbGxlciB0aGFuIDAgaXQgZGVmYXVsdHMgdG8gMzAsIGlmIGl0J3MKKwliaWdnZXIgdGhhbiAyNTUgaXQgZGVmYXVsdHMgdG8gMjU1LgorICAgICAgLSAnKionIGNhbiBvbmx5IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggb3IgYmUgZm9sbG93ZWQgYnkgYSBwYXRoCisJc2VwYXJhdG9yIG9yIGJ5IGEgbnVtYmVyIGFuZCBhIHBhdGggc2VwYXJhdG9yLgorCisgICBZb3UgY2FuIGNvbWJpbmUgJyonIGFuZCAnKionIGluIGFueSBvcmRlcjogPgorCS91c3IvKiovc3lzLyoKKwkvdXNyLyovc3lzLyoqCisJL3Vzci8qKjIvc3lzLyoKKworMikgVXB3YXJkIHNlYXJjaDoKKyAgIEhlcmUgeW91IGNhbiBnaXZlIGEgZGlyZWN0b3J5IGFuZCB0aGVuIHNlYXJjaCB0aGUgZGlyZWN0b3J5IHRyZWUgdXB3YXJkIGZvcgorICAgYSBmaWxlLiBZb3UgY291bGQgZ2l2ZSBzdG9wLWRpcmVjdG9yaWVzIHRvIGxpbWl0IHRoZSB1cHdhcmQgc2VhcmNoLiBUaGUKKyAgIHN0b3AtZGlyZWN0b3JpZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBwYXRoIChmb3IgdGhlICdwYXRoJyBvcHRpb24pIG9yIHRvCisgICB0aGUgZmlsZW5hbWUgKGZvciB0aGUgJ3RhZ3MnIG9wdGlvbikgd2l0aCBhICc7Jy4gSWYgeW91IHdhbnQgc2V2ZXJhbAorICAgc3RvcC1kaXJlY3RvcmllcyBzZXBhcmF0ZSB0aGVtIHdpdGggJzsnLiBJZiB5b3Ugd2FudCBubyBzdG9wLWRpcmVjdG9yeQorICAgKCJzZWFyY2ggdXB3YXJkIHRpbGwgdGhlIHJvb3QgZGlyZWN0b3J5KSBqdXN0IHVzZSAnOycuID4KKwkvdXNyL2luY2x1ZGUvc3lzOy91c3IKKzwgICB3aWxsIHNlYXJjaCBpbjogPgorCSAgIC91c3IvaW5jbHVkZS9zeXMKKwkgICAvdXNyL2luY2x1ZGUKKwkgICAvdXNyCis8CisgICBJZiB5b3UgdXNlIGEgcmVsYXRpdmUgcGF0aCB0aGUgdXB3YXJkIHNlYXJjaCBpcyBzdGFydGVkIGluIFZpbSdzIGN1cnJlbnQKKyAgIGRpcmVjdG9yeSBvciBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGZpbGUgKGlmIHRoZSByZWxhdGl2ZSBwYXRoCisgICBzdGFydHMgd2l0aCAnLi8nIGFuZCAnZCcgaXMgbm90IGluY2x1ZGVkIGluICdjcG9wdGlvbnMnKS4KKworICAgSWYgVmltJ3MgY3VycmVudCBwYXRoIGlzIC91L3VzZXJfeC93b3JrL3JlbGVhc2UgYW5kIHlvdSBkbyA+CisJOnNldCBwYXRoPWluY2x1ZGU7L3UvdXNlcl94Cis8ICBhbmQgdGhlbiBzZWFyY2ggZm9yIGEgZmlsZSB3aXRoIHxnZnwgdGhlIGZpbGUgaXMgc2VhcmNoZWQgaW46ID4KKwkvdS91c2VyX3gvd29yay9yZWxlYXNlL2luY2x1ZGUKKwkvdS91c2VyX3gvd29yay9pbmNsdWRlCisJL3UvdXNlcl94L2luY2x1ZGUKKworMykgQ29tYmluZWQgdXAvZG93bndhcmQgc2VhcmNoCisgICBJZiBWaW0ncyBjdXJyZW50IHBhdGggaXMgL3UvdXNlcl94L3dvcmsvcmVsZWFzZSBhbmQgeW91IGRvID4KKwlzZXQgcGF0aD0qKjsvdS91c2VyX3gKKzwgIGFuZCB0aGVuIHNlYXJjaCBmb3IgYSBmaWxlIHdpdGggfGdmfCB0aGUgZmlsZSBpcyBzZWFyY2hlZCBpbjogPgorCS91L3VzZXJfeC93b3JrL3JlbGVhc2UvKioKKwkvdS91c2VyX3gvd29yay8qKgorCS91L3VzZXJfeC8qKgorPAorICAgQkUgQ0FSRUZVTCEgVGhpcyBtaWdodCBjb25zdW1lIGEgbG90IG9mIHRpbWUsIGFzIHRoZSBzZWFyY2ggb2YKKyAgICcvdS91c2VyX3gvKionIGluY2x1ZGVzICcvdS91c2VyX3gvd29yay8qKicgYW5kCisgICAnL3UvdXNlcl94L3dvcmsvcmVsZWFzZS8qKicuICBTbyAnL3UvdXNlcl94L3dvcmsvcmVsZWFzZS8qKicgaXMgc2VhcmNoZWQKKyAgIHRocmVlIGFuZCAnL3UvdXNlcl94L3dvcmsvKionIGlzIHNlYXJjaGVkIHR3byB0aW1lcy4KKworICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IHBhdGggdG86ID4KKwk6c2V0IHBhdGg9KiosL3UvdXNlcl94LyoqCis8ICAgVGhpcyBzZWFyY2hlczogPgorCS91L3VzZXJfeC93b3JrL3JlbGVhc2UvKioKKwkvdS91c2VyX3gvKioKKzwgICBUaGlzIHNlYXJjaGVzIHRoZSBzYW1lIGRpcmVjdG9yaWVzLCBidXQgaW4gYSBkaWZmZXJlbnQgb3JkZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gRGlhbG9ncwkJCQkJCSplZGl0LWRpYWxvZ3MqCisKKwkJCQkJCQkqOmNvbmZpcm0qICo6Y29uZioKKzpjb25mW2lybV0ge2NvbW1hbmR9CUV4ZWN1dGUge2NvbW1hbmR9LCBhbmQgdXNlIGEgZGlhbG9nIHdoZW4gYW4KKwkJCW9wZXJhdGlvbiBoYXMgdG8gYmUgY29uZmlybWVkLiAgQ2FuIGJlIHVzZWQgb24gdGhlCisJCQkiOnEiLCAiOnFhIiBhbmQgIjp3IiBjb21tYW5kcyAodGhlIGxhdHRlciB0byBvdmVyLXJpZGUKKwkJCWEgcmVhZC1vbmx5IHNldHRpbmcpLgorCitFeGFtcGxlczogPgorICA6Y29uZmlybSB3IGZvbworPAlXaWxsIGFzayBmb3IgY29uZmlybWF0aW9uIHdoZW4gImZvbyIgYWxyZWFkeSBleGlzdHMuID4KKyAgOmNvbmZpcm0gcQorPAlXaWxsIGFzayBmb3IgY29uZmlybWF0aW9uIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMuID4KKyAgOmNvbmZpcm0gcWEKKzwJSWYgYW55IG1vZGlmaWVkLCB1bnNhdmVkIGJ1ZmZlcnMgZXhpc3QsIHlvdSB3aWxsIGJlIHByb21wdGVkIHRvIHNhdmUKKwlvciBhYmFuZG9uIGVhY2ggb25lLiAgVGhlcmUgYXJlIGFsc28gY2hvaWNlcyB0byAic2F2ZSBhbGwiIG9yICJhYmFuZG9uCisJYWxsIi4KKworSWYgeW91IHdhbnQgdG8gYWx3YXlzIHVzZSAiOmNvbmZpcm0iLCBzZXQgdGhlICdjb25maXJtJyBvcHRpb24uCisKKwkJCSo6YnJvd3NlKiAqOmJybyogKkUzMzgqICpFNjE0KiAqRTYxNSogKkU2MTYqICpFNTc4KgorOmJyb1t3c2VdIHtjb21tYW5kfQlPcGVuIGEgZmlsZSBzZWxlY3Rpb24gZGlhbG9nIGZvciBhbiBhcmd1bWVudCB0bworCQkJe2NvbW1hbmR9LiAgQXQgcHJlc2VudCB0aGlzIHdvcmtzIGZvciB8OmV8LCB8Ond8LAorCQkJfDpyfCwgfDpzYXZlYXN8LCB8OnNwfCwgfDpta2V4cmN8LCB8Om1rdmltcmN8IGFuZAorCQkJfDpta3Nlc3Npb258LgorCQkJe29ubHkgaW4gV2luMzIsIEF0aGVuYSwgTW90aWYsIEdUSyBhbmQgTWFjIEdVSX0KKwkJCVdoZW4gIjpicm93c2UiIGlzIG5vdCBwb3NzaWJsZSB5b3UgZ2V0IGFuIGVycm9yCisJCQltZXNzYWdlLiAgSWYgdGhlIHwrYnJvd3NlfCBmZWF0dXJlIGlzIG1pc3Npbmcgb3IgdGhlCisJCQl7Y29tbWFuZH0gZG9lc24ndCBzdXBwb3J0IGJyb3dzaW5nLCB0aGUge2NvbW1hbmR9IGlzCisJCQlleGVjdXRlZCB3aXRob3V0IGEgZGlhbG9nLgorCQkJIjpicm93c2Ugc2V0IiB3b3JrcyBsaWtlIHw6b3B0aW9uc3wuCisKK1RoZSBzeW50YXggaXMgYmVzdCBzaG93biB2aWEgc29tZSBleGFtcGxlczogPgorCTpicm93c2UgZSAkdmltL2ZvbworPAkJT3BlbiB0aGUgYnJvd3NlciBpbiB0aGUgJHZpbS9mb28gZGlyZWN0b3J5LCBhbmQgZWRpdCB0aGUKKwkJZmlsZSBjaG9zZW4uID4KKwk6YnJvd3NlIGUKKzwJCU9wZW4gdGhlIGJyb3dzZXIgaW4gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgd2l0aCAnYnJvd3NlZGlyJywKKwkJYW5kIGVkaXQgdGhlIGZpbGUgY2hvc2VuLiA+CisJOmJyb3dzZSB3Cis8CQlPcGVuIHRoZSBicm93c2VyIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLAorCQl3aXRoIHRoZSBjdXJyZW50IGJ1ZmZlciBmaWxlbmFtZSBhcyBkZWZhdWx0LCBhbmQgc2F2ZSB0aGUKKwkJYnVmZmVyIHVuZGVyIHRoZSBmaWxlbmFtZSBjaG9zZW4uID4KKwk6YnJvd3NlIHcgQzovYmFyCis8CQlPcGVuIHRoZSBicm93c2VyIGluIHRoZSBDOi9iYXIgZGlyZWN0b3J5LCB3aXRoIHRoZSBjdXJyZW50CisJCWJ1ZmZlciBmaWxlbmFtZSBhcyBkZWZhdWx0LCBhbmQgc2F2ZSB0aGUgYnVmZmVyIHVuZGVyIHRoZQorCQlmaWxlbmFtZSBjaG9zZW4uCitBbHNvIHNlZSB0aGUgfCdicm93c2VkaXInfCBvcHRpb24uCitGb3IgdmVyc2lvbnMgb2YgVmltIHdoZXJlIGJyb3dzaW5nIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkCit1bm1vZGlmaWVkLgorCisJCQkJCQkJKmJyb3dzZWZpbHRlcioKK0ZvciBNUyBXaW5kb3dzLCB5b3UgY2FuIG1vZGlmeSB0aGUgZmlsdGVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSBicm93c2UgZGlhbG9nLgorQnkgc2V0dGluZyB0aGUgZzpicm93c2VmaWx0ZXIgb3IgYjpicm93c2VmaWx0ZXIgdmFyaWFibGVzLCB5b3UgY2FuIGNoYW5nZSB0aGUKK2ZpbHRlcnMgZ2xvYmFsbHkgb3IgbG9jYWxseSB0byB0aGUgYnVmZmVyLiAgVGhlIHZhcmlhYmxlIGlzIHNldCB0byBhIHN0cmluZyBpbgordGhlIGZvcm1hdCAie2ZpbHRlciBsYWJlbH1cdHtwYXR0ZXJufTt7cGF0dGVybn1cbiIgd2hlcmUge2ZpbHRlciBsYWJlbH0gaXMgdGhlCit0ZXh0IHRoYXQgYXBwZWFycyBpbiB0aGUgIkZpbGVzIG9mIFR5cGUiIGNvbWJvQm94LCBhbmQge3BhdHRlcm59IGlzIHRoZQorcGF0dGVybiB3aGljaCBmaWx0ZXJzIHRoZSBmaWxlbmFtZXMuICBTZXZlcmFsIHBhdHRlcm5zIGNhbiBiZSBnaXZlbiwgc2VwYXJhdGVkCitieSAnOycuCisKK0ZvciBNb3RpZiB0aGUgc2FtZSBmb3JtYXQgaXMgdXNlZCwgYnV0IG9ubHkgdGhlIHZlcnkgZmlyc3QgcGF0dGVybiBpcyBhY3R1YWxseQordXNlZCAoTW90aWYgb25seSBvZmZlcnMgb25lIHBhdHRlcm4sIGJ1dCB5b3UgY2FuIGVkaXQgaXQpLgorCitGb3IgZXhhbXBsZSwgdG8gaGF2ZSBvbmx5IFZpbSBmaWxlcyBpbiB0aGUgZGlhbG9nLCB5b3UgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6ID4KKworICAgICBsZXQgZzpicm93c2VmaWx0ZXI9IlZpbSBTY3JpcHRzXHQqLnZpbVxuVmltIFN0YXJ0dXAgRmlsZXNcdCp2aW1yY1xuIgorCitZb3UgY2FuIG92ZXJyaWRlIHRoZSBmaWx0ZXIgc2V0dGluZyBvbiBhIHBlci1idWZmZXIgYmFzaXMgYnkgc2V0dGluZyB0aGUKK2I6YnJvd3NlZmlsdGVyIHZhcmlhYmxlLiAgWW91IHdvdWxkIG1vc3QgbGlrZWx5IHNldCBiOmJyb3dzZWZpbHRlciBpbiBhCitmaWxldHlwZSBwbHVnaW4sIHNvIHRoYXQgdGhlIGJyb3dzZSBkaWFsb2cgd291bGQgY29udGFpbiBlbnRyaWVzIHJlbGF0ZWQgdG8KK3RoZSB0eXBlIG9mIGZpbGUgeW91IGFyZSBjdXJyZW50bHkgZWRpdGluZy4gIERpc2FkdmFudGFnZTogVGhpcyBtYWtlcyBpdAorZGlmZmljdWx0IHRvIHN0YXJ0IGVkaXRpbmcgYSBmaWxlIG9mIGEgZGlmZmVyZW50IHR5cGUuICBUbyBvdmVyY29tZSB0aGlzLCB5b3UKK21heSB3YW50IHRvIGFkZCAiQWxsIEZpbGVzXHQqLipcbiIgYXMgdGhlIGZpbmFsIGZpbHRlciwgc28gdGhhdCB0aGUgdXNlciBjYW4KK3N0aWxsIGFjY2VzcyBhbnkgZGVzaXJlZCBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFRoZSBjdXJyZW50IGRpcmVjdG9yeQkJCQkqY3VycmVudC1kaXJlY3RvcnkqCisKK1lvdSBtYXkgdXNlIHRoZSB8OmNkfCBhbmQgfDpsY2R8IGNvbW1hbmRzIHRvIGNoYW5nZSB0byBhbm90aGVyIGRpcmVjdG9yeSwgc28KK3lvdSB3aWxsIG5vdCBoYXZlIHRvIHR5cGUgdGhhdCBkaXJlY3RvcnkgbmFtZSBpbiBmcm9udCBvZiB0aGUgZmlsZSBuYW1lcy4gIEl0CithbHNvIG1ha2VzIGEgZGlmZmVyZW5jZSBmb3IgZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzLCBlLmcuICI6IWxzIi4KKworCQkJCQkJCSo6Y2QqICpFNDcyKgorOmNkCQkJT24gbm9uLVVuaXggc3lzdGVtczogUHJpbnQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJCQluYW1lLiAgT24gVW5peCBzeXN0ZW1zOiBDaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJCQl0byB0aGUgaG9tZSBkaXJlY3RvcnkuICBVc2UgfDpwd2R8IHRvIHByaW50IHRoZQorCQkJY3VycmVudCBkaXJlY3Rvcnkgb24gYWxsIHN5c3RlbXMuCisKKzpjZCB7cGF0aH0JCUNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8ge3BhdGh9LgorCQkJSWYge3BhdGh9IGlzIHJlbGF0aXZlLCBpdCBpcyBzZWFyY2hlZCBmb3IgaW4gdGhlCisJCQlkaXJlY3RvcmllcyBsaXN0ZWQgaW4gfCdjZHBhdGgnfC4KKwkJCURvZXMgbm90IGNoYW5nZSB0aGUgbWVhbmluZyBvZiBhbiBhbHJlYWR5IG9wZW5lZCBmaWxlLAorCQkJYmVjYXVzZSBpdHMgZnVsbCBwYXRoIG5hbWUgaXMgcmVtZW1iZXJlZC4gIEZpbGVzIGZyb20KKwkJCXRoZSB8YXJnbGlzdHwgbWF5IGNoYW5nZSB0aG91Z2ghCisJCQlPbiBNUy1ET1MgdGhpcyBhbHNvIGNoYW5nZXMgdGhlIGFjdGl2ZSBkcml2ZS4KKwkJCVRvIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGZpbGU6ID4KKwkJCQk6Y2QgJTpoCis8CisJCQkJCQkJKjpjZC0qICpFMTg2KgorOmNkIC0JCQlDaGFuZ2UgdG8gdGhlIHByZXZpb3VzIGN1cnJlbnQgZGlyZWN0b3J5IChiZWZvcmUgdGhlCisJCQlwcmV2aW91cyAiOmNkIHtwYXRofSIgY29tbWFuZCkuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmNoZCogKjpjaGRpcioKKzpjaGRbaXJdIFtwYXRoXQkJU2FtZSBhcyB8OmNkfC4KKworCQkJCQkJCSo6bGMqICo6bGNkKgorOmxjW2RdIHtwYXRofQkJTGlrZSB8OmNkfCwgYnV0IG9ubHkgc2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlCisJCQljdXJyZW50IHdpbmRvdy4gIFRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3Igb3RoZXIKKwkJCXdpbmRvd3MgaXMgbm90IGNoYW5nZWQuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmxjaCogKjpsY2hkaXIqCis6bGNoW2Rpcl0JCVNhbWUgYXMgfDpsY2R8LiB7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdyogKjpwd2QqICpFMTg3KgorOnB3W2RdCQkJUHJpbnQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUuICB7Vmk6IG5vIHB3ZH0KKwkJCUFsc28gc2VlIHxnZXRjd2QoKXwuCisKK1NvIGxvbmcgYXMgbm8gfDpsY2R8IGNvbW1hbmQgaGFzIGJlZW4gdXNlZCwgYWxsIHdpbmRvd3Mgc2hhcmUgdGhlIHNhbWUgY3VycmVudAorZGlyZWN0b3J5LiAgVXNpbmcgYSBjb21tYW5kIHRvIGp1bXAgdG8gYW5vdGhlciB3aW5kb3cgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcKK2ZvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuCitXaGVuIGEgfDpsY2R8IGNvbW1hbmQgaGFzIGJlZW4gdXNlZCBmb3IgYSB3aW5kb3csIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CitiZWNvbWVzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhhdCB3aW5kb3cuICBXaW5kb3dzIHdoZXJlIHRoZSB8OmxjZHwKK2NvbW1hbmQgaGFzIG5vdCBiZWVuIHVzZWQgc3RpY2sgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGRpcmVjdG9yeS4gIFdoZW4ganVtcGluZwordG8gYW5vdGhlciB3aW5kb3cgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmVjb21lIHRoZSBsYXN0IHNwZWNpZmllZCBsb2NhbAorY3VycmVudCBkaXJlY3RvcnkuICBJZiBub25lIHdhcyBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgY3VycmVudCBkaXJlY3RvcnkgaXMKK3VzZWQuCitXaGVuIGEgfDpjZHwgY29tbWFuZCBpcyB1c2VkLCB0aGUgY3VycmVudCB3aW5kb3cgd2lsbCBsb3NlIGhpcyBsb2NhbCBjdXJyZW50CitkaXJlY3RvcnkgYW5kIHdpbGwgdXNlIHRoZSBnbG9iYWwgY3VycmVudCBkaXJlY3RvcnkgZnJvbSBub3cgb24uCisKK0FmdGVyIHVzaW5nIHw6Y2R8IHRoZSBmdWxsIHBhdGggbmFtZSB3aWxsIGJlIHVzZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKK2ZpbGVzLiAgT24gc29tZSBuZXR3b3JrZWQgZmlsZSBzeXN0ZW1zIHRoaXMgbWF5IGNhdXNlIHByb2JsZW1zLiAgVGhlIHJlc3VsdCBvZgordXNpbmcgdGhlIGZ1bGwgcGF0aCBuYW1lIGlzIHRoYXQgdGhlIGZpbGUgbmFtZXMgY3VycmVudGx5IGluIHVzZSB3aWxsIHJlbWFpbgorcmVmZXJyaW5nIHRvIHRoZSBzYW1lIGZpbGUuICBFeGFtcGxlOiBJZiB5b3UgaGF2ZSBhIGZpbGUgYTp0ZXN0IGFuZCBhCitkaXJlY3RvcnkgYTp2aW0gdGhlIGNvbW1hbmRzICI6ZSB0ZXN0IiAiOmNkIHZpbSIgIjp3IiB3aWxsIG92ZXJ3cml0ZSB0aGUgZmlsZQorYTp0ZXN0IGFuZCBub3Qgd3JpdGUgYTp2aW0vdGVzdC4gIEJ1dCBpZiB5b3UgZG8gIjp3IHRlc3QiIHRoZSBmaWxlIGE6dmltL3Rlc3QKK3dpbGwgYmUgd3JpdHRlbiwgYmVjYXVzZSB5b3UgZ2F2ZSBhIG5ldyBmaWxlIG5hbWUgYW5kIGRpZCBub3QgcmVmZXIgdG8gYQorZmlsZW5hbWUgYmVmb3JlIHRoZSAiOmNkIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBUaGUgYXJndW1lbnQgbGlzdAkJCQkqYXJndW1lbnQtbGlzdCogKmFyZ2xpc3QqCisKK0lmIHlvdSBnaXZlIG1vcmUgdGhhbiBvbmUgZmlsZSBuYW1lIHdoZW4gc3RhcnRpbmcgVmltLCB0aGlzIGxpc3QgaXMgcmVtZW1iZXJlZAorYXMgdGhlIGFyZ3VtZW50IGxpc3QuICBZb3UgY2FuIGp1bXAgdG8gZWFjaCBmaWxlIGluIHRoaXMgbGlzdC4KKworRG8gbm90IGNvbmZ1c2UgdGhpcyB3aXRoIHRoZSBidWZmZXIgbGlzdCwgd2hpY2ggeW91IGNhbiBzZWUgd2l0aCB0aGUKK3w6YnVmZmVyc3wgY29tbWFuZC4gIFRoZSBhcmd1bWVudCBsaXN0IHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gVmksIHRoZSBidWZmZXIKK2xpc3QgaXMgbmV3IGluIFZpbS4gIEEgZmlsZSBuYW1lIGluIHRoZSBhcmd1bWVudCBsaXN0IHdpbGwgYWxzbyBiZSBwcmVzZW50IGluCit0aGUgYnVmZmVyIGxpc3QgKHVubGVzcyBpdCB3YXMgZGVsZXRlZCB3aXRoICI6YmRlbCIpLgorCitUaGlzIHN1YmplY3QgaXMgaW50cm9kdWNlZCBpbiBzZWN0aW9uIHwwNy4yfCBvZiB0aGUgdXNlciBtYW51YWwuCisKK1RoZXJlIGlzIG9uZSBnbG9iYWwgYXJndW1lbnQgbGlzdCwgd2hpY2ggaXMgdXNlZCBmb3IgYWxsIHdpbmRvd3MgYnkgZGVmYXVsdC4KK0l0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIG5ldyBhcmd1bWVudCBsaXN0IGxvY2FsIHRvIGEgd2luZG93LCBzZWUKK3w6YXJnbG9jYWx8LgorCitZb3UgY2FuIHVzZSB0aGUgYXJndW1lbnQgbGlzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMsIGFuZCB3aXRoIHRoZQorZXhwcmVzc2lvbiBmdW5jdGlvbnMgfGFyZ2MoKXwgYW5kIHxhcmd2KCl8LiAgVGhlc2UgYWxsIHdvcmsgb24gdGhlIGFyZ3VtZW50CitsaXN0IG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KKworCQkJCQkJCSo6YXIqICo6YXJncyoKKzphcltnc10JCQlQcmludCB0aGUgYXJndW1lbnQgbGlzdCwgd2l0aCB0aGUgY3VycmVudCBmaWxlIGluCisJCQlzcXVhcmUgYnJhY2tldHMuCisKKzphcltnc10gWysrb3B0XSBbK2NtZF0ge2FyZ2xpc3R9CQkJKjphcmdzX2YqCisJCQlEZWZpbmUge2FyZ2xpc3R9IGFzIHRoZSBuZXcgYXJndW1lbnQgbGlzdCBhbmQgZWRpdAorCQkJdGhlIGZpcnN0IG9uZS4gIFRoaXMgZmFpbHMgd2hlbiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlCisJCQlhbmQgVmltIGRvZXMgbm90IHdhbnQgdG8gfGFiYW5kb258IHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKwkJCXtWaTogbm8gKytvcHR9CisKKzphcltnc10hIFsrK29wdF0gWytjbWRdIHthcmdsaXN0fQkJCSo6YXJnc19mISoKKwkJCURlZmluZSB7YXJnbGlzdH0gYXMgdGhlIG5ldyBhcmd1bWVudCBsaXN0IGFuZCBlZGl0CisJCQl0aGUgZmlyc3Qgb25lLiAgRGlzY2FyZCBhbnkgY2hhbmdlcyB0byB0aGUgY3VycmVudAorCQkJYnVmZmVyLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe1ZpOiBubyArK29wdH0KKworOltjb3VudF1hcmdlW2RpdF1bIV0gWysrb3B0XSBbK2NtZF0ge25hbWV9CQkqOmFyZ2UqICo6YXJnZWRpdCoKKwkJCUFkZCB7bmFtZX0gdG8gdGhlIGFyZ3VtZW50IGxpc3QgYW5kIGVkaXQgaXQuCisJCQlXaGVuIHtuYW1lfSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgYXJndW1lbnQgbGlzdCwgdGhpcworCQkJZW50cnkgaXMgZWRpdGVkLgorCQkJVGhpcyBpcyBsaWtlIHVzaW5nIHw6YXJnYWRkfCBhbmQgdGhlbiB8OmVkaXR8LgorCQkJTm90ZSB0aGF0IG9ubHkgb25lIGZpbGUgbmFtZSBpcyBhbGxvd2VkLCBhbmQgc3BhY2VzCisJCQlpbnNpZGUgdGhlIGZpbGUgbmFtZSBhcmUgYWxsb3dlZCwgbGlrZSB3aXRoIHw6ZWRpdHwuCisJCQlbY291bnRdIGlzIHVzZWQgbGlrZSB3aXRoIHw6YXJnYWRkfC4KKwkJCVshXSBpcyByZXF1aXJlZCBpZiB0aGUgY3VycmVudCBmaWxlIGNhbm5vdCBiZQorCQkJfGFiYW5kb258ZWQuCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisJCQl7bm90IGluIFZpfQorCis6W2NvdW50XWFyZ2FbZGRdIHtuYW1lfSAuLgkJCSo6YXJnYSogKjphcmdhZGQqICpFNDc5KgorCQkJQWRkIHRoZSB7bmFtZX1zIHRvIHRoZSBhcmd1bWVudCBsaXN0LgorCQkJSWYgW2NvdW50XSBpcyBvbWl0dGVkLCB0aGUge25hbWV9cyBhcmUgYWRkZWQganVzdAorCQkJYWZ0ZXIgdGhlIGN1cnJlbnQgZW50cnkgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisJCQlPdGhlcndpc2UgdGhleSBhcmUgYWRkZWQgYWZ0ZXIgdGhlIFtjb3VudF0ndGggZmlsZS4KKwkJCUlmIHRoZSBhcmd1bWVudCBsaXN0IGlzICJhIGIgYyIsIGFuZCAiYiIgaXMgdGhlCisJCQljdXJyZW50IGFyZ3VtZW50LCB0aGVuIHRoZXNlIGNvbW1hbmRzIHJlc3VsdCBpbjoKKwkJCQljb21tYW5kCQluZXcgYXJndW1lbnQgbGlzdCB+CisJCQkJOmFyZ2FkZCB4CWEgYiB4IGMKKwkJCQk6MGFyZ2FkZCB4CXggYSBiIGMKKwkJCQk6MWFyZ2FkZCB4CWEgeCBiIGMKKwkJCQk6OTlhcmdhZGQgeAlhIGIgYyB4CisJCQlUaGVyZSBpcyBubyBjaGVjayBmb3IgZHVwbGljYXRlcywgaXQgaXMgcG9zc2libGUgdG8KKwkJCWFkZCBhIGZpbGUgdG8gdGhlIGFyZ3VtZW50IGxpc3QgdHdpY2UuCisJCQlUaGUgY3VycmVudGx5IGVkaXRlZCBmaWxlIGlzIG5vdCBjaGFuZ2VkLgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtsaXN0Y21kc3wgZmVhdHVyZX0KKwkJCU5vdGU6IHlvdSBjYW4gYWxzbyB1c2UgdGhpcyBtZXRob2Q6ID4KKwkJCQk6YXJncyAjIyB4Cis8CQkJVGhpcyB3aWxsIGFkZCB0aGUgIngiIGl0ZW0gYW5kIHNvcnQgdGhlIG5ldyBsaXN0LgorCis6YXJnZFtlbGV0ZV0ge3BhdHRlcm59IC4uCQkJKjphcmdkKiAqOmFyZ2RlbGV0ZSogKkU0ODAqCisJCQlEZWxldGUgZmlsZXMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdCB0aGF0IG1hdGNoIHRoZQorCQkJe3BhdHRlcm59cy4gIHtwYXR0ZXJufSBpcyB1c2VkIGxpa2UgYSBmaWxlIHBhdHRlcm4sCisJCQlzZWUgfGZpbGUtcGF0dGVybnwuICAiJSIgY2FuIGJlIHVzZWQgdG8gZGVsZXRlIHRoZQorCQkJY3VycmVudCBlbnRyeS4KKwkJCVRoaXMgY29tbWFuZCBrZWVwcyB0aGUgY3VycmVudGx5IGVkaXRlZCBmaWxlLCBhbHNvCisJCQl3aGVuIGl0J3MgZGVsZXRlZCBmcm9tIHRoZSBhcmd1bWVudCBsaXN0LgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtsaXN0Y21kc3wgZmVhdHVyZX0KKworOntyYW5nZX1hcmdkW2VsZXRlXQlEZWxldGUgdGhlIHtyYW5nZX0gZmlsZXMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4KKwkJCVdoZW4gdGhlIGxhc3QgbnVtYmVyIGluIHRoZSByYW5nZSBpcyB0b28gaGlnaCwgdXAgdG8KKwkJCXRoZSBsYXN0IGFyZ3VtZW50IGlzIGRlbGV0ZWQuICBFeGFtcGxlOiA+CisJCQkJOjEwLDEwMDBhcmdkZWwKKzwJCQlEZWxldGVzIGFyZ3VtZW50cyAxMCBhbmQgZnVydGhlciwga2VlcGluZyAxLTkuCisJCQl7bm90IGluIFZpfSB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2xpc3RjbWRzfCBmZWF0dXJlfQorCisJCQkJCQkJKjphcmd1KiAqOmFyZ3VtZW50KgorOltjb3VudF1hcmd1W21lbnRdIFtjb3VudF0gWysrb3B0XSBbK2NtZF0KKwkJCUVkaXQgZmlsZSBbY291bnRdIGluIHRoZSBhcmd1bWVudCBsaXN0LiAgV2hlbiBbY291bnRdCisJCQlpcyBvbWl0dGVkIHRoZSBjdXJyZW50IGVudHJ5IGlzIHVzZWQuICBUaGlzIGZhaWxzCisJCQl3aGVuIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYW5kIFZpbSBkb2VzIG5vdCB3YW50IHRvCisJCQl8YWJhbmRvbnwgdGhlIGN1cnJlbnQgYnVmZmVyLgorCQkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtsaXN0Y21kc3wgZmVhdHVyZX0KKworOltjb3VudF1hcmd1W21lbnRdISBbY291bnRdIFsrK29wdF0gWytjbWRdCisJCQlFZGl0IGZpbGUgW2NvdW50XSBpbiB0aGUgYXJndW1lbnQgbGlzdCwgZGlzY2FyZCBhbnkKKwkJCWNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLiAgV2hlbiBbY291bnRdIGlzCisJCQlvbWl0dGVkIHRoZSBjdXJyZW50IGVudHJ5IGlzIHVzZWQuCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisJCQl7bm90IGluIFZpfSB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2xpc3RjbWRzfCBmZWF0dXJlfQorCis6W2NvdW50XW5bZXh0XSBbKytvcHRdIFsrY21kXQkJCSo6biogKjpuZSogKjpuZXh0KiAqRTE2NSogKkUxNjMqCisJCQlFZGl0IFtjb3VudF0gbmV4dCBmaWxlLiAgVGhpcyBmYWlscyB3aGVuIGNoYW5nZXMgaGF2ZQorCQkJYmVlbiBtYWRlIGFuZCBWaW0gZG9lcyBub3Qgd2FudCB0byB8YWJhbmRvbnwgdGhlCisJCQljdXJyZW50IGJ1ZmZlci4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4gIHtWaTogbm8KKwkJCWNvdW50IG9yICsrb3B0fS4KKworOltjb3VudF1uW2V4dF0hIFsrK29wdF0gWytjbWRdCisJCQlFZGl0IFtjb3VudF0gbmV4dCBmaWxlLCBkaXNjYXJkIGFueSBjaGFuZ2VzIHRvIHRoZQorCQkJYnVmZmVyLiAgQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LiAge1ZpOiBubyBjb3VudAorCQkJb3IgKytvcHR9LgorCis6bltleHRdIFsrK29wdF0gWytjbWRdIHthcmdsaXN0fQkJCSo6bmV4dF9mKgorCQkJU2FtZSBhcyB8OmFyZ3NfZnwuCisKKzpuW2V4dF0hIFsrK29wdF0gWytjbWRdIHthcmdsaXN0fQorCQkJU2FtZSBhcyB8OmFyZ3NfZiF8LgorCis6W2NvdW50XU5bZXh0XSBbY291bnRdIFsrK29wdF0gWytjbWRdCQkJKjpOZXh0KiAqOk4qICpFMTY0KgorCQkJRWRpdCBbY291bnRdIHByZXZpb3VzIGZpbGUgaW4gYXJndW1lbnQgbGlzdC4gIFRoaXMKKwkJCWZhaWxzIHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBhbmQgVmltIGRvZXMgbm90CisJCQl3YW50IHRvIHxhYmFuZG9ufCB0aGUgY3VycmVudCBidWZmZXIuCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuICB7Vmk6IG5vIGNvdW50IG9yICsrb3B0fS4KKworOltjb3VudF1OW2V4dF0hIFtjb3VudF0gWysrb3B0XSBbK2NtZF0KKwkJCUVkaXQgW2NvdW50XSBwcmV2aW91cyBmaWxlIGluIGFyZ3VtZW50IGxpc3QuICBEaXNjYXJkCisJCQlhbnkgY2hhbmdlcyB0byB0aGUgYnVmZmVyLiAgQWxzbyBzZWUgfCsrb3B0fCBhbmQKKwkJCXwrY21kfC4gIHtWaTogbm8gY291bnQgb3IgKytvcHR9LgorCis6W2NvdW50XXByZXZbaW91c10gW2NvdW50XSBbKytvcHRdIFsrY21kXQkJKjpwcmV2KiAqOnByZXZpb3VzKgorCQkJU2FtZSBhcyA6TmV4dC4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4gIHtWaToKKwkJCW9ubHkgaW4gc29tZSB2ZXJzaW9uc30KKworCQkJCQkJCSo6cmV3KiAqOnJld2luZCoKKzpyZXdbaW5kXSBbKytvcHRdIFsrY21kXQorCQkJU3RhcnQgZWRpdGluZyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4KKwkJCVRoaXMgZmFpbHMgd2hlbiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGFuZCBWaW0gZG9lcworCQkJbm90IHdhbnQgdG8gfGFiYW5kb258IHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4ge1ZpOiBubyArK29wdH0KKworOnJld1tpbmRdISBbKytvcHRdIFsrY21kXQorCQkJU3RhcnQgZWRpdGluZyB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4KKwkJCURpc2NhcmQgYW55IGNoYW5nZXMgdG8gdGhlIGJ1ZmZlci4gIEFsc28gc2VlIHwrK29wdHwKKwkJCWFuZCB8K2NtZHwuIHtWaTogbm8gKytvcHR9CisKKwkJCQkJCQkqOmZpciogKjpmaXJzdCoKKzpmaXJbc3RdWyFdIFsrK29wdF0gWytjbWRdCisJCQlPdGhlciBuYW1lIGZvciAiOnJld2luZCIuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmxhKiAqOmxhc3QqCis6bGFbc3RdIFsrK29wdF0gWytjbWRdCisJCQlTdGFydCBlZGl0aW5nIHRoZSBsYXN0IGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisJCQlUaGlzIGZhaWxzIHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBhbmQgVmltIGRvZXMKKwkJCW5vdCB3YW50IHRvIHxhYmFuZG9ufCB0aGUgY3VycmVudCBidWZmZXIuCisJCQlBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuICB7bm90IGluIFZpfQorCis6bGFbc3RdISBbKytvcHRdIFsrY21kXQorCQkJU3RhcnQgZWRpdGluZyB0aGUgbGFzdCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0LgorCQkJRGlzY2FyZCBhbnkgY2hhbmdlcyB0byB0aGUgYnVmZmVyLiAgQWxzbyBzZWUgfCsrb3B0fAorCQkJYW5kIHwrY21kfC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnduKiAqOnduZXh0KgorOltjb3VudF13bltleHRdIFsrK29wdF0gWytjbWRdCisJCQlXcml0ZSBjdXJyZW50IGZpbGUgYW5kIHN0YXJ0IGVkaXRpbmcgdGhlIFtjb3VudF0KKwkJCW5leHQgZmlsZS4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4gIHtub3QgaW4gVml9CisKKzpbY291bnRdd25bZXh0XSBbKytvcHRdIFsrY21kXSB7ZmlsZX0KKwkJCVdyaXRlIGN1cnJlbnQgZmlsZSB0byB7ZmlsZX0gYW5kIHN0YXJ0IGVkaXRpbmcgdGhlCisJCQlbY291bnRdIG5leHQgZmlsZSwgdW5sZXNzIHtmaWxlfSBhbHJlYWR5IGV4aXN0cyBhbmQKKwkJCXRoZSAnd3JpdGVhbnknIG9wdGlvbiBpcyBvZmYuICBBbHNvIHNlZSB8KytvcHR8IGFuZAorCQkJfCtjbWR8LiAge25vdCBpbiBWaX0KKworOltjb3VudF13bltleHRdISBbKytvcHRdIFsrY21kXSB7ZmlsZX0KKwkJCVdyaXRlIGN1cnJlbnQgZmlsZSB0byB7ZmlsZX0gYW5kIHN0YXJ0IGVkaXRpbmcgdGhlCisJCQlbY291bnRdIG5leHQgZmlsZS4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4gIHtub3QKKwkJCWluIFZpfQorCis6W2NvdW50XXdOW2V4dF1bIV0gWysrb3B0XSBbK2NtZF0gW2ZpbGVdCQkqOndOKiAqOndOZXh0KgorOltjb3VudF13cFtyZXZvdXNdWyFdIFsrK29wdF0gWytjbWRdIFtmaWxlXQkJKjp3cCogKjp3cHJldmlvdXMqCisJCQlTYW1lIGFzIDp3bmV4dCwgYnV0IGdvIHRvIHByZXZpb3VzIGZpbGUgaW5zdGVhZCBvZgorCQkJbmV4dC4gIHtub3QgaW4gVml9CisKK1RoZSBbY291bnRdIGluIHRoZSBjb21tYW5kcyBhYm92ZSBkZWZhdWx0cyB0byBvbmUuICBGb3Igc29tZSBjb21tYW5kcyBpdCBpcworcG9zc2libGUgdG8gdXNlIHR3byBjb3VudHMuICBUaGUgbGFzdCBvbmUgKHJpZ2h0bW9zdCBvbmUpIGlzIHVzZWQuCisKK0lmIG5vIFsrY21kXSBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgYXQgdGhlIGxhc3Qga25vd24KK2N1cnNvciBwb3NpdGlvbiBmb3IgdGhlIGZpbGUuICBJZiAnc3RhcnRvZmxpbmUnIGlzIHNldCwgdGhlIGN1cnNvciB3aWxsIGJlCitwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlIGxpbmUsIG90aGVyd2lzZSB0aGUgbGFzdCBrbm93IGNvbHVtbgoraXMgdXNlZC4gIElmIHRoZXJlIGlzIG5vIGxhc3Qga25vd24gY3Vyc29yIHBvc2l0aW9uIHRoZSBjdXJzb3Igd2lsbCBiZSBpbiB0aGUKK2ZpcnN0IGxpbmUgKHRoZSBsYXN0IGxpbmUgaW4gRXggbW9kZSkuCisKK1RoZSB3aWxkY2FyZHMgaW4gdGhlIGFyZ3VtZW50IGxpc3QgYXJlIGV4cGFuZGVkIGFuZCB0aGUgZmlsZSBuYW1lcyBhcmUgc29ydGVkLgorVGh1cyB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZCAidmltICouYyIgdG8gZWRpdCBhbGwgdGhlIEMgZmlsZXMuICBGcm9tIHdpdGhpbgorVmltIHRoZSBjb21tYW5kICI6biAqLmMiIGRvZXMgdGhlIHNhbWUuICBPbiBVbml4IHlvdSBjYW4gYWxzbyB1c2UgYmFja3RpY2tzLAorZm9yIGV4YW1wbGU6ID4KKwk6biBgZmluZCAuIC1uYW1lIFxcKi5jIC1wcmludGAKK1RoZSBiYWNrc2xhc2hlcyBiZWZvcmUgdGhlIHN0YXIgYXJlIHJlcXVpcmVkIHRvIHByZXZlbnQgIiouYyIgdG8gYmUgZXhwYW5kZWQKK2J5IHRoZSBzaGVsbCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBmaW5kIHByb2dyYW0uCisKKwkJCQkJCQkqYXJnbGlzdC1wb3NpdGlvbioKK1doZW4gdGhlcmUgaXMgYW4gYXJndW1lbnQgbGlzdCB5b3UgY2FuIHNlZSB3aGljaCBmaWxlIHlvdSBhcmUgZWRpdGluZyBpbiB0aGUKK3RpdGxlIG9mIHRoZSB3aW5kb3cgKGlmIHRoZXJlIGlzIG9uZSBhbmQgJ3RpdGxlJyBpcyBvbikgYW5kIHdpdGggdGhlIGZpbGUKK21lc3NhZ2UgeW91IGdldCB3aXRoIHRoZSAiQ1RSTC1HIiBjb21tYW5kLiAgWW91IHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlCisJKGZpbGUgNCBvZiAxMSkKK0lmICdzaG9ydG1lc3MnIGNvbnRhaW5zICdmJyBpdCB3aWxsIGJlCisJKDQgb2YgMTEpCitJZiB5b3UgYXJlIG5vdCByZWFsbHkgZWRpdGluZyB0aGUgZmlsZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYXJndW1lbnQKK2xpc3QgaXQgd2lsbCBiZQorCShmaWxlICg0KSBvZiAxMSkKK1RoaXMgbWVhbnMgdGhhdCB5b3UgYXJlIHBvc2l0aW9uIDQgaW4gdGhlIGFyZ3VtZW50IGxpc3QsIGJ1dCBub3QgZWRpdGluZyB0aGUKK2ZvdXJ0aCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0LiAgVGhpcyBoYXBwZW5zIHdoZW4geW91IGRvICI6ZSBmaWxlIi4KKworCitMT0NBTCBBUkdVTUVOVCBMSVNUCisKK3tub3QgaW4gVml9Cit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrd2luZG93c3wgb3IgfCtsaXN0Y21kc3wgZmVhdHVyZX0KKworCQkJCQkJCSo6YXJnbG9jYWwqCis6YXJnbFtvY2FsXQkJTWFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0LgorCQkJRG9lc24ndCBzdGFydCBlZGl0aW5nIGFub3RoZXIgZmlsZS4KKworOmFyZ2xbb2NhbF1bIV0gWysrb3B0XSBbK2NtZF0ge2FyZ2xpc3R9CisJCQlEZWZpbmUgYSBuZXcgYXJndW1lbnQgbGlzdCwgd2hpY2ggaXMgbG9jYWwgdG8gdGhlCisJCQljdXJyZW50IHdpbmRvdy4gIFdvcmtzIGxpa2UgfDphcmdzX2Z8IG90aGVyd2lzZS4KKworCQkJCQkJCSo6YXJnZ2xvYmFsKgorOmFyZ2dbbG9iYWxdCQlVc2UgdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0IGZvciB0aGUgY3VycmVudCB3aW5kb3cuCisJCQlEb2Vzbid0IHN0YXJ0IGVkaXRpbmcgYW5vdGhlciBmaWxlLgorCis6YXJnZ1tsb2JhbF1bIV0gWysrb3B0XSBbK2NtZF0ge2FyZ2xpc3R9CisJCQlVc2UgdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0IGZvciB0aGUgY3VycmVudCB3aW5kb3cuCisJCQlEZWZpbmUgYSBuZXcgZ2xvYmFsIGFyZ3VtZW50IGxpc3QgbGlrZSB8OmFyZ3NfZnwuCisJCQlBbGwgd2luZG93cyB1c2luZyB0aGUgZ2xvYmFsIGFyZ3VtZW50IGxpc3Qgd2lsbCBzZWUKKwkJCXRoaXMgbmV3IGxpc3QuCisKK1RoZXJlIGNhbiBiZSBzZXZlcmFsIGFyZ3VtZW50IGxpc3RzLiAgVGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gd2luZG93cy4KK1doZW4gdGhleSBhcmUgc2hhcmVkLCBjaGFuZ2luZyB0aGUgYXJndW1lbnQgbGlzdCBpbiBvbmUgd2luZG93IHdpbGwgYWxzbworY2hhbmdlIGl0IGluIHRoZSBvdGhlciB3aW5kb3cuCisKK1doZW4gYSB3aW5kb3cgaXMgc3BsaXQgdGhlIG5ldyB3aW5kb3cgaW5oZXJpdHMgdGhlIGFyZ3VtZW50IGxpc3QgZnJvbSB0aGUKK2N1cnJlbnQgd2luZG93LiAgVGhlIHR3byB3aW5kb3dzIHRoZW4gc2hhcmUgdGhpcyBsaXN0LCB1bnRpbCBvbmUgb2YgdGhlbSB1c2VzCit8OmFyZ2xvY2FsfCBvciB8OmFyZ2dsb2JhbHwgdG8gdXNlIGFub3RoZXIgYXJndW1lbnQgbGlzdC4KKworCitVU0lORyBUSEUgQVJHVU1FTlQgTElTVAorCisJCQkJCQkqOmFyZ2RvKgorOmFyZ2RvWyFdIHtjbWR9CQlFeGVjdXRlIHtjbWR9IGZvciBlYWNoIGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisJCQlJdCB3b3JrcyBsaWtlIGRvaW5nIHRoaXM6ID4KKwkJCQk6cmV3aW5kCisJCQkJOntjbWR9CisJCQkJOm5leHQKKwkJCQk6e2NtZH0KKwkJCQlldGMuCis8CQkJV2hlbiB0aGUgY3VycmVudCBmaWxlIGNhbid0IGJlIHxhYmFuZG9ufGVkIGFuZCB0aGUgWyFdCisJCQlpcyBub3QgcHJlc2VudCwgdGhlIGNvbW1hbmQgZmFpbHMuCisJCQlXaGVuIGFuIGVycm9yIGlzIGRldGVjdGVkIG9uIG9uZSBmaWxlLCBmdXJ0aGVyIGZpbGVzCisJCQlpbiB0aGUgYXJndW1lbnQgbGlzdCB3aWxsIG5vdCBiZSB2aXNpdGVkLgorCQkJVGhlIGxhc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdCAob3Igd2hlcmUgYW4gZXJyb3IKKwkJCW9jY3VycmVkKSBiZWNvbWVzIHRoZSBjdXJyZW50IGZpbGUuCisJCQl7Y21kfSBjYW4gY29udGFpbiAnfCcgdG8gY29uY2F0ZW5hdGUgc2V2ZXJhbCBjb21tYW5kcy4KKwkJCXtjbWR9IG11c3Qgbm90IGNoYW5nZSB0aGUgYXJndW1lbnQgbGlzdC4KKwkJCU5vdGU6IFdoaWxlIHRoaXMgY29tbWFuZCBpcyBleGVjdXRpbmcsIHRoZSBTeW50YXgKKwkJCWF1dG9jb21tYW5kIGV2ZW50IGlzIGRpc2FibGVkIGJ5IGFkZGluZyBpdCB0bworCQkJJ2V2ZW50aWdub3JlJy4gIFRoaXMgY29uc2lkZXJhYmx5IHNwZWVkcyB1cCBlZGl0aW5nCisJCQllYWNoIGZpbGUuCisJCQl7bm90IGluIFZpfSB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2xpc3RjbWRzfCBmZWF0dXJlfQorCQkJQWxzbyBzZWUgfDp3aW5kb3wgYW5kIHw6YnVmZG98LgorCitFeGFtcGxlOiA+CisJOmFyZ3MgKi5jCisJOmFyZ2RvIHNldCBmZj11bml4IHwgdXBkYXRlCitUaGlzIHNldHMgdGhlICdmaWxlZm9ybWF0JyBvcHRpb24gdG8gInVuaXgiIGFuZCB3cml0ZXMgdGhlIGZpbGUgaWYgaXMgbm93CitjaGFuZ2VkLiAgVGhpcyBpcyBkb25lIGZvciBhbGwgKi5jIGZpbGVzLgorCitFeGFtcGxlOiA+CisJOmFyZ3MgKi5bY2hdCisJOmFyZ2RvICVzL1w8bXlfZm9vXD4vTXlfRm9vL2dlIHwgdXBkYXRlCitUaGlzIGNoYW5nZXMgdGhlIHdvcmQgIm15X2ZvbyIgdG8gIk15X0ZvbyIgaW4gYWxsICouYyBhbmQgKi5oIGZpbGVzLiAgVGhlICJlIgorZmxhZyBpcyB1c2VkIGZvciB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kIHRvIGF2b2lkIGFuIGVycm9yIGZvciBmaWxlcyB3aGVyZQorIm15X2ZvbyIgaXNuJ3QgdXNlZC4gICI6dXBkYXRlIiB3cml0ZXMgdGhlIGZpbGUgb25seSBpZiBjaGFuZ2VzIHdlcmUgbWFkZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBXcml0aW5nCQkJCQkqd3JpdGluZyogKnNhdmUtZmlsZSoKKworTm90ZTogV2hlbiB0aGUgJ3dyaXRlJyBvcHRpb24gaXMgb2ZmLCB5b3UgYXJlIG5vdCBhYmxlIHRvIHdyaXRlIGFueSBmaWxlLgorCisJCQkJCQkJKjp3KiAqOndyaXRlKgorCQkJCQkJKkU1MDIqICpFNTAzKiAqRTUwNCogKkU1MDUqCisJCQkJCQkqRTUxMiogKkU1MTQqICpFNjY3KgorOndbcml0ZV0JCVdyaXRlIHRoZSB3aG9sZSBidWZmZXIgdG8gdGhlIGN1cnJlbnQgZmlsZS4gIFRoaXMgaXMKKwkJCXRoZSBub3JtYWwgd2F5IHRvIHNhdmUgY2hhbmdlcyB0byBhIGZpbGUuICBJdCBmYWlscworCQkJd2hlbiB0aGUgJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0IG9yIHdoZW4gdGhlcmUgaXMKKwkJCWFub3RoZXIgcmVhc29uIHdoeSB0aGUgZmlsZSBjYW4ndCBiZSB3cml0dGVuLgorCis6d1tyaXRlXSEJCUxpa2UgIjp3cml0ZSIsIGJ1dCBmb3JjZWZ1bGx5IHdyaXRlIHdoZW4gJ3JlYWRvbmx5JyBpcworCQkJc2V0IG9yIHRoZXJlIGlzIGFub3RoZXIgcmVhc29uIHdoeSB3cml0aW5nIHdhcworCQkJcmVmdXNlZC4KKwkJCU5vdGU6IFRoaXMgbWF5IGNoYW5nZSB0aGUgcGVybWlzc2lvbiBhbmQgb3duZXJzaGlwIG9mCisJCQl0aGUgZmlsZSBhbmQgYnJlYWsgKHN5bWJvbGljKSBsaW5rcy4gIEFkZCB0aGUgJ1cnIGZsYWcKKwkJCXRvICdjcG9wdGlvbnMnIHRvIGF2b2lkIHRoaXMuCisKKzpbcmFuZ2Vdd1tyaXRlXVshXQlXcml0ZSB0aGUgc3BlY2lmaWVkIGxpbmVzIHRvIHRoZSBjdXJyZW50IGZpbGUuICBUaGlzCisJCQlpcyB1bnVzdWFsLCBiZWNhdXNlIHRoZSBmaWxlIHdpbGwgbm90IGNvbnRhaW4gYWxsCisJCQlsaW5lcyBpbiB0aGUgYnVmZmVyLgorCisJCQkJCQkJKjp3X2YqICo6d3JpdGVfZioKKzpbcmFuZ2Vdd1tyaXRlXQl7ZmlsZX0JV3JpdGUgdGhlIHNwZWNpZmllZCBsaW5lcyB0byB7ZmlsZX0sIHVubGVzcyBpdAorCQkJYWxyZWFkeSBleGlzdHMgYW5kIHRoZSAnd3JpdGVhbnknIG9wdGlvbiBpcyBvZmYuCisKKwkJCQkJCQkqOnchKgorOltyYW5nZV13W3JpdGVdISB7ZmlsZX0JV3JpdGUgdGhlIHNwZWNpZmllZCBsaW5lcyB0byB7ZmlsZX0uICBPdmVyd3JpdGUgYW4KKwkJCWV4aXN0aW5nIGZpbGUuCisKKwkJCQkJCSo6d19hKiAqOndyaXRlX2EqICpFNDk0KgorOltyYW5nZV13W3JpdGVdWyFdID4+CUFwcGVuZCB0aGUgc3BlY2lmaWVkIGxpbmVzIHRvIHRoZSBjdXJyZW50IGZpbGUuCisKKzpbcmFuZ2Vdd1tyaXRlXVshXSA+PiB7ZmlsZX0KKwkJCUFwcGVuZCB0aGUgc3BlY2lmaWVkIGxpbmVzIHRvIHtmaWxlfS4gICchJyBmb3JjZXMgdGhlCisJCQl3cml0ZSBldmVuIGlmIGZpbGUgZG9lcyBub3QgZXhpc3QuCisKKwkJCQkJCQkqOndfYyogKjp3cml0ZV9jKgorOltyYW5nZV13W3JpdGVdICF7Y21kfQlFeGVjdXRlIHtjbWR9IHdpdGggW3JhbmdlXSBsaW5lcyBhcyBzdGFuZGFyZCBpbnB1dAorCQkJKG5vdGUgdGhlIHNwYWNlIGluIGZyb250IG9mIHRoZSAnIScpLiAge2NtZH0gaXMKKwkJCWV4ZWN1dGVkIGxpa2Ugd2l0aCAiOiF7Y21kfSIsIGFueSAnIScgaXMgcmVwbGFjZWQgd2l0aAorCQkJdGhlIHByZXZpb3VzIGNvbW1hbmQgfDohfC4KKworVGhlIGRlZmF1bHQgW3JhbmdlXSBmb3IgdGhlICI6dyIgY29tbWFuZCBpcyB0aGUgd2hvbGUgYnVmZmVyICgxLCQpLgorSWYgYSBmaWxlIG5hbWUgaXMgZ2l2ZW4gd2l0aCAiOnciIGl0IGJlY29tZXMgdGhlIGFsdGVybmF0ZSBmaWxlLiAgVGhpcyBjYW4gYmUKK3VzZWQsIGZvciBleGFtcGxlLCB3aGVuIHRoZSB3cml0ZSBmYWlscyBhbmQgeW91IHdhbnQgdG8gdHJ5IGFnYWluIGxhdGVyIHdpdGgKKyI6dyAjIi4gIFRoaXMgY2FuIGJlIHN3aXRjaGVkIG9mZiBieSByZW1vdmluZyB0aGUgJ0EnIGZsYWcgZnJvbSB0aGUKKydjcG9wdGlvbnMnIG9wdGlvbi4KKworCQkJCQkJCSo6c2F2KiAqOnNhdmVhcyoKKzpzYXZbZWFzXVshXSB7ZmlsZX0JU2F2ZSB0aGUgY3VycmVudCBidWZmZXIgdW5kZXIgdGhlIG5hbWUge2ZpbGV9IGFuZCBzZXQKKwkJCXRoZSBmaWxlbmFtZSBvZiB0aGUgY3VycmVudCBidWZmZXIgdG8ge2ZpbGV9LiAgVGhlCisJCQlwcmV2aW91cyBuYW1lIGlzIHVzZWQgZm9yIHRoZSBhbHRlcm5hdGUgZmlsZSBuYW1lLgorCQkJVGhlIFshXSBpcyBuZWVkZWQgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGUuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjp1cCogKjp1cGRhdGUqCis6W3JhbmdlXXVwW2RhdGVdWyFdIFs+Pl0gW2ZpbGVdCisJCQlMaWtlICI6d3JpdGUiLCBidXQgb25seSB3cml0ZSB3aGVuIHRoZSBidWZmZXIgaGFzIGJlZW4KKwkJCW1vZGlmaWVkLiAge25vdCBpbiBWaX0KKworCitXUklUSU5HIFdJVEggTVVMVElQTEUgQlVGRkVSUwkJCQkqYnVmZmVyLXdyaXRlKgorCisJCQkJCQkJKjp3YSogKjp3YWxsKgorOndhW2xsXQkJCVdyaXRlIGFsbCBjaGFuZ2VkIGJ1ZmZlcnMuICBCdWZmZXJzIHdpdGhvdXQgYSBmaWxlCisJCQluYW1lIG9yIHdoaWNoIGFyZSByZWFkb25seSBhcmUgbm90IHdyaXR0ZW4uIHtub3QgaW4KKwkJCVZpfQorCis6d2FbbGxdIQkJV3JpdGUgYWxsIGNoYW5nZWQgYnVmZmVycywgZXZlbiB0aGUgb25lcyB0aGF0IGFyZQorCQkJcmVhZG9ubHkuICBCdWZmZXJzIHdpdGhvdXQgYSBmaWxlIG5hbWUgYXJlIG5vdAorCQkJd3JpdHRlbi4ge25vdCBpbiBWaX0KKworCitWaW0gd2lsbCB3YXJuIHlvdSBpZiB5b3UgdHJ5IHRvIG92ZXJ3cml0ZSBhIGZpbGUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkCitlbHNld2hlcmUuICBTZWUgfHRpbWVzdGFtcHwuCisKKwkJCSAgICAqYmFja3VwKiAqRTIwNyogKkU1MDYqICpFNTA3KiAqRTUwOCogKkU1MDkqICpFNTEwKgorSWYgeW91IHdyaXRlIHRvIGFuIGV4aXN0aW5nIGZpbGUgKGJ1dCBkbyBub3QgYXBwZW5kKSB3aGlsZSB0aGUgJ2JhY2t1cCcsCisnd3JpdGViYWNrdXAnIG9yICdwYXRjaG1vZGUnIG9wdGlvbiBpcyBvbiwgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgaXMKK21hZGUuICBUaGUgZmlsZSBpcyBlaXRoZXIgY29waWVkIG9yIHJlbmFtZWQgKHNlZSAnYmFja3VwY29weScpLiAgQWZ0ZXIgdGhlCitmaWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGFuZCB3aGVuIHRoZSAnd3JpdGViYWNrdXAnIG9wdGlvbiBpcyBvbiBhbmQKK3RoZSAnYmFja3VwJyBvcHRpb24gaXMgb2ZmLCB0aGUgYmFja3VwIGZpbGUgaXMgZGVsZXRlZC4gIFdoZW4gdGhlICdwYXRjaG1vZGUnCitvcHRpb24gaXMgb24gdGhlIGJhY2t1cCBmaWxlIG1heSBiZSByZW5hbWVkLgorCisJCQkJCQkJKmJhY2t1cC10YWJsZSoKKydiYWNrdXAnICd3cml0ZWJhY2t1cCcJYWN0aW9uCX4KKyAgIG9mZgkgICAgIG9mZglubyBiYWNrdXAgbWFkZQorICAgb2ZmCSAgICAgb24JCWJhY2t1cCBjdXJyZW50IGZpbGUsIGRlbGV0ZWQgYWZ0ZXJ3YXJkcyAoZGVmYXVsdCkKKyAgIG9uCSAgICAgb2ZmCWRlbGV0ZSBvbGQgYmFja3VwLCBiYWNrdXAgY3VycmVudCBmaWxlCisgICBvbgkgICAgIG9uCQlkZWxldGUgb2xkIGJhY2t1cCwgYmFja3VwIGN1cnJlbnQgZmlsZQorCitXaGVuIHRoZSAnYmFja3Vwc2tpcCcgcGF0dGVybiBtYXRjaGVzIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hpY2ggaXMKK3dyaXR0ZW4sIG5vIGJhY2t1cCBmaWxlIGlzIG1hZGUuICBUaGUgdmFsdWVzIG9mICdiYWNrdXAnIGFuZCAnd3JpdGViYWNrdXAnIGFyZQoraWdub3JlZCB0aGVuLgorCitXaGVuIHRoZSAnYmFja3VwJyBvcHRpb24gaXMgb24sIGFuIG9sZCBiYWNrdXAgZmlsZSAod2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZQorbmV3IGJhY2t1cCBmaWxlKSB3aWxsIGJlIGRlbGV0ZWQuICBJZiAnYmFja3VwJyBpcyBub3Qgc2V0LCBidXQgJ3dyaXRlYmFja3VwJworaXMgc2V0LCBhbiBleGlzdGluZyBiYWNrdXAgZmlsZSB3aWxsIG5vdCBiZSBkZWxldGVkLiAgVGhlIGJhY2t1cCBmaWxlIHRoYXQgaXMKK21hZGUgd2hpbGUgdGhlIGZpbGUgaXMgYmVpbmcgd3JpdHRlbiB3aWxsIGhhdmUgYSBkaWZmZXJlbnQgbmFtZS4KKworT24gc29tZSBmaWxlc3lzdGVtcyBpdCdzIHBvc3NpYmxlIHRoYXQgaW4gYSBjcmFzaCB5b3UgbG9zZSBib3RoIHRoZSBiYWNrdXAgYW5kCit0aGUgbmV3bHkgd3JpdHRlbiBmaWxlIChpdCBtaWdodCBiZSB0aGVyZSBidXQgY29udGFpbiBib2d1cyBkYXRhKS4gIEluIHRoYXQKK2Nhc2UgdHJ5IHJlY292ZXJ5LCBiZWNhdXNlIHRoZSBzd2FwIGZpbGUgaXMgc3luY2VkIHRvIGRpc2sgYW5kIG1pZ2h0IHN0aWxsIGJlCit0aGVyZS4gfDpyZWNvdmVyfAorCitUaGUgZGlyZWN0b3JpZXMgZ2l2ZW4gd2l0aCB0aGUgJ2JhY2t1cGRpcicgb3B0aW9uIGlzIHVzZWQgdG8gcHV0IHRoZSBiYWNrdXAKK2ZpbGUgaW4uICAoZGVmYXVsdDogc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHdyaXR0ZW4gZmlsZSkuCisKK1doZXRoZXIgdGhlIGJhY2t1cCBpcyBhIG5ldyBmaWxlLCB3aGljaCBpcyBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIG9yIHRoZQorb3JpZ2luYWwgZmlsZSByZW5hbWVkIGRlcGVuZHMgb24gdGhlICdiYWNrdXBjb3B5JyBvcHRpb24uICBTZWUgdGhlcmUgZm9yIGFuCitleHBsYW5hdGlvbiBvZiB3aGVuIHRoZSBjb3B5IGlzIG1hZGUgYW5kIHdoZW4gdGhlIGZpbGUgaXMgcmVuYW1lZC4KKworSWYgdGhlIGNyZWF0aW9uIG9mIGEgYmFja3VwIGZpbGUgZmFpbHMsIHRoZSB3cml0ZSBpcyBub3QgZG9uZS4gIElmIHlvdSB3YW50Cit0byB3cml0ZSBhbnl3YXkgYWRkIGEgJyEnIHRvIHRoZSBjb21tYW5kLgorCisJCQkJCQkJKndyaXRlLXJlYWRvbmx5KgorV2hlbiB0aGUgJ2Nwb3B0aW9ucycgb3B0aW9uIGNvbnRhaW5zICdXJywgVmltIHdpbGwgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhCityZWFkb25seSBmaWxlLiAgV2hlbiAnVycgaXMgbm90IHByZXNlbnQsICI6dyEiIHdpbGwgb3ZlcndyaXRlIGEgcmVhZG9ubHkgZmlsZSwKK2lmIHRoZSBzeXN0ZW0gYWxsb3dzIGl0ICh0aGUgZGlyZWN0b3J5IG11c3QgYmUgd3JpdGFibGUpLgorCisJCQkJCQkJKndyaXRlLWZhaWwqCitJZiB0aGUgd3JpdGluZyBvZiB0aGUgbmV3IGZpbGUgZmFpbHMsIHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGxvc2UKK3lvdXIgY2hhbmdlcyBBTkQgdGhlIG9yaWdpbmFsIGZpbGUuICBJZiB0aGVyZSBpcyBubyBiYWNrdXAgZmlsZSBhbmQgd3JpdGluZwordGhlIG5ldyBmaWxlIGZhaWxlZCwgeW91IGhhdmUgYWxyZWFkeSBsb3N0IHRoZSBvcmlnaW5hbCBmaWxlISBET04nVCBFWElUIFZJTQorVU5USUwgWU9VIFdSSVRFIE9VVCBUSEUgRklMRSEgSWYgYSBiYWNrdXAgd2FzIG1hZGUsIGl0IGlzIHB1dCBiYWNrIGluIHBsYWNlCitvZiB0aGUgb3JpZ2luYWwgZmlsZSAoaWYgcG9zc2libGUpLiAgSWYgeW91IGV4aXQgVmltLCBhbmQgbG9zZSB0aGUgY2hhbmdlcworeW91IG1hZGUsIHRoZSBvcmlnaW5hbCBmaWxlIHdpbGwgbW9zdGx5IHN0aWxsIGJlIHRoZXJlLiAgSWYgcHV0dGluZyBiYWNrIHRoZQorb3JpZ2luYWwgZmlsZSBmYWlscywgdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBtZXNzYWdlIHRlbGxpbmcgeW91IHRoYXQgeW91Citsb3N0IHRoZSBvcmlnaW5hbCBmaWxlLgorCisJCQkJCQkqRE9TLWZvcm1hdC13cml0ZSoKK0lmIHRoZSAnZmlsZWZvcm1hdCcgaXMgImRvcyIsIDxDUj4gPE5MPiBpcyB1c2VkIGZvciA8RU9MPi4gIFRoaXMgaXMgZGVmYXVsdAorZm9yIE1TLURPUywgV2luMzIgYW5kIE9TLzIuICBPbiBvdGhlciBzeXN0ZW1zIHRoZSBtZXNzYWdlICJbZG9zIGZvcm1hdF0iIGlzCitzaG93biB0byByZW1pbmQgeW91IHRoYXQgYW4gdW51c3VhbCA8RU9MPiB3YXMgdXNlZC4KKwkJCQkJCSpVbml4LWZvcm1hdC13cml0ZSoKK0lmIHRoZSAnZmlsZWZvcm1hdCcgaXMgInVuaXgiLCA8Tkw+IGlzIHVzZWQgZm9yIDxFT0w+LiAgT24gTVMtRE9TLCBXaW4zMiBhbmQKK09TLzIgdGhlIG1lc3NhZ2UgIlt1bml4IGZvcm1hdF0iIGlzIHNob3duLgorCQkJCQkJKk1hYy1mb3JtYXQtd3JpdGUqCitJZiB0aGUgJ2ZpbGVmb3JtYXQnIGlzICJtYWMiLCA8Q1I+IGlzIHVzZWQgZm9yIDxFT0w+LiAgT24gbm9uLU1hYyBzeXN0ZW1zIHRoZQorbWVzc2FnZSAiW21hYyBmb3JtYXRdIiBpcyBzaG93bi4KKworU2VlIGFsc28gfGZpbGUtZm9ybWF0c3wgYW5kIHRoZSAnZmlsZWZvcm1hdCcgYW5kICdmaWxlZm9ybWF0cycgb3B0aW9ucy4KKworCQkJCQkJKkFDTCoKK0FDTCBzdGFuZHMgZm9yIEFjY2VzcyBDb250cm9sIExpc3QuICBJdCBpcyBhbiBhZHZhbmNlZCB3YXkgdG8gY29udHJvbCBhY2Nlc3MKK3JpZ2h0cyBmb3IgYSBmaWxlLiAgSXQgaXMgdXNlZCBvbiBuZXcgTVMtV2luZG93cyBhbmQgVW5peCBzeXN0ZW1zLCBidXQgb25seQord2hlbiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBpdC4KKyAgIFZpbSBhdHRlbXB0cyB0byBwcmVzZXJ2ZSB0aGUgQUNMIGluZm8gd2hlbiB3cml0aW5nIGEgZmlsZS4gIFRoZSBiYWNrdXAgZmlsZQord2lsbCBnZXQgdGhlIEFDTCBpbmZvIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorICAgVGhlIEFDTCBpbmZvIGlzIGFsc28gdXNlZCB0byBjaGVjayBpZiBhIGZpbGUgaXMgcmVhZC1vbmx5ICh3aGVuIG9wZW5pbmcgdGhlCitmaWxlKS4KKworCQkJCQkJKnJlYWQtb25seS1zaGFyZSoKK1doZW4gTVMtV2luZG93cyBzaGFyZXMgYSBkcml2ZSBvbiB0aGUgbmV0d29yayBpdCBjYW4gYmUgbWFya2VkIGFzIHJlYWQtb25seS4KK1RoaXMgbWVhbnMgdGhhdCBldmVuIGlmIHRoZSBmaWxlIHJlYWQtb25seSBhdHRyaWJ1dGUgaXMgYWJzZW50LCBhbmQgdGhlIEFDTAorc2V0dGluZ3Mgb24gTlQgbmV0d29yayBzaGFyZWQgZHJpdmVzIGFsbG93IHdyaXRpbmcgdG8gdGhlIGZpbGUsIHlvdSBjYW4gc3RpbGwKK25vdCB3cml0ZSB0byB0aGUgZmlsZS4gIFZpbSBvbiBXaW4zMiBwbGF0Zm9ybXMgd2lsbCBkZXRlY3QgcmVhZC1vbmx5IG5ldHdvcmsKK2RyaXZlcyBhbmQgd2lsbCBtYXJrIHRoZSBmaWxlIGFzIHJlYWQtb25seS4gIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIG92ZXJyaWRlCitpdCB3aXRoIHw6d3JpdGV8LgorCisJCQkJCQkqd3JpdGUtZGV2aWNlKgorV2hlbiB0aGUgZmlsZSBuYW1lIGlzIGFjdHVhbGx5IGEgZGV2aWNlIG5hbWUsIFZpbSB3aWxsIG5vdCBtYWtlIGEgYmFja3VwICh0aGF0Cit3b3VsZCBiZSBpbXBvc3NpYmxlKS4gIFlvdSBuZWVkIHRvIHVzZSAiISIsIHNpbmNlIHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMuCitFeGFtcGxlIGZvciBVbml4OiA+CisJOnchIC9kZXYvbHB0MAorYW5kIGZvciBNUy1ET1Mgb3IgTVMtV2luZG93czogPgorCTp3ISBscHQwCitGb3IgVW5peCBhIGRldmljZSBpcyBkZXRlY3RlZCB3aGVuIHRoZSBuYW1lIGRvZXNuJ3QgcmVmZXIgdG8gYSBub3JtYWwgZmlsZSBvcgorYSBkaXJlY3RvcnkuICBBIGZpZm8gb3IgbmFtZWQgcGlwZSBhbHNvIGxvb2tzIGxpa2UgYSBkZXZpY2UgdG8gVmltLgorRm9yIE1TLURPUyBhbmQgTVMtV2luZG93cyB0aGUgZGV2aWNlIGlzIGRldGVjdGVkIGJ5IGl0cyBuYW1lOgorCUFVWAorCUNPTgorCUNMT0NLJAorCU5VTAorCVBSTgorCUNPTW4Jbj0xLDIsMy4uLiBldGMKKwlMUFRuCW49MSwyLDMuLi4gZXRjCitUaGUgbmFtZXMgY2FuIGJlIGluIHVwcGVyLSBvciBsb3dlcmNhc2UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gV3JpdGluZyBhbmQgcXVpdHRpbmcJCQkJCSp3cml0ZS1xdWl0KgorCisJCQkJCQkJKjpxKiAqOnF1aXQqCis6cVt1aXRdCQkJUXVpdCB0aGUgY3VycmVudCB3aW5kb3cuICBRdWl0IFZpbSBpZiB0aGlzIGlzIHRoZSBsYXN0CisJCQl3aW5kb3cuICBUaGlzIGZhaWxzIHdoZW4gY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBhbmQKKwkJCVZpbSByZWZ1c2VzIHRvIHxhYmFuZG9ufCB0aGUgY3VycmVudCBidWZmZXIsIGFuZCB3aGVuCisJCQl0aGUgbGFzdCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0IGhhcyBub3QgYmVlbgorCQkJZWRpdGVkLgorCis6Y29uZltpcm1dIHFbdWl0XQlRdWl0LCBidXQgZ2l2ZSBwcm9tcHQgd2hlbiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlLCBvcgorCQkJdGhlIGxhc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdCBoYXMgbm90IGJlZW4KKwkJCWVkaXRlZC4gIFNlZSB8OmNvbmZpcm18IGFuZCAnY29uZmlybScuICB7bm90IGluIFZpfQorCis6cVt1aXRdIQkJUXVpdCB3aXRob3V0IHdyaXRpbmcsIGFsc28gd2hlbiB2aXNpYmxlIGJ1ZmZlcnMgaGF2ZQorCQkJY2hhbmdlcy4gIERvZXMgbm90IGV4aXQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlZCBoaWRkZW4KKwkJCWJ1ZmZlcnMuICBVc2UgIjpxYWxsISIgdG8gZXhpdCBhbHdheXMuCisKKzpjcVt1aXRdCQlRdWl0IGFsd2F5cywgd2l0aG91dCB3cml0aW5nLCBhbmQgcmV0dXJuIGFuIGVycm9yCisJCQljb2RlLiAgU2VlIHw6Y3F8LiAgVXNlZCBmb3IgTWFueCdzIFF1aWNrRml4IG1vZGUgKHNlZQorCQkJfHF1aWNrZml4fCkuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjp3cSoKKzp3cQkJCVdyaXRlIHRoZSBjdXJyZW50IGZpbGUgYW5kIHF1aXQuICBXcml0aW5nIGZhaWxzIHdoZW4KKwkJCXRoZSBmaWxlIGlzIHJlYWQtb25seSBvciB0aGUgYnVmZmVyIGRvZXMgbm90IGhhdmUgYQorCQkJbmFtZS4gIFF1aXR0aW5nIGZhaWxzIHdoZW4gdGhlIGxhc3QgZmlsZSBpbiB0aGUKKwkJCWFyZ3VtZW50IGxpc3QgaGFzIG5vdCBiZWVuIGVkaXRlZC4KKworOndxIQkJCVdyaXRlIHRoZSBjdXJyZW50IGZpbGUgYW5kIHF1aXQuICBXcml0aW5nIGZhaWxzIHdoZW4KKwkJCXRoZSBjdXJyZW50IGJ1ZmZlciBkb2VzIG5vdCBoYXZlIGEgbmFtZS4KKworOndxIHtmaWxlfQkJV3JpdGUgdG8ge2ZpbGV9IGFuZCBxdWl0LiAgUXVpdHRpbmcgZmFpbHMgd2hlbiB0aGUKKwkJCWxhc3QgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdCBoYXMgbm90IGJlZW4gZWRpdGVkLgorCis6d3EhIHtmaWxlfQkJV3JpdGUgdG8ge2ZpbGV9IGFuZCBxdWl0LgorCis6W3JhbmdlXXdxWyFdIFtmaWxlXQlTYW1lIGFzIGFib3ZlLCBidXQgb25seSB3cml0ZSB0aGUgbGluZXMgaW4gW3JhbmdlXS4KKworCQkJCQkJCSo6eCogKjp4aXQqCis6W3JhbmdlXXhbaXRdWyFdIFtmaWxlXQorCQkJTGlrZSAiOndxIiwgYnV0IHdyaXRlIG9ubHkgd2hlbiBjaGFuZ2VzIGhhdmUgYmVlbgorCQkJbWFkZS4KKwkJCVdoZW4gJ2hpZGRlbicgaXMgc2V0IGFuZCB0aGVyZSBhcmUgbW9yZSB3aW5kb3dzLCB0aGUKKwkJCWN1cnJlbnQgYnVmZmVyIGJlY29tZXMgaGlkZGVuLCBhZnRlciB3cml0aW5nIHRoZSBmaWxlLgorCisJCQkJCQkJKjpleGkqICo6ZXhpdCoKKzpbcmFuZ2VdZXhpW3RdWyFdIFtmaWxlXQorCQkJU2FtZSBhcyA6eGl0LgorCisJCQkJCQkJKlpaKgorWloJCQlXcml0ZSBjdXJyZW50IGZpbGUsIGlmIG1vZGlmaWVkLCBhbmQgcXVpdCAoc2FtZSBhcworCQkJIjp4IikuICAoTm90ZTogSWYgdGhlcmUgYXJlIHNldmVyYWwgd2luZG93cyBmb3IgdGhlCisJCQljdXJyZW50IGZpbGUsIHRoZSBmaWxlIGlzIHdyaXR0ZW4gaWYgaXQgd2FzIG1vZGlmaWVkCisJCQlhbmQgdGhlIHdpbmRvdyBpcyBjbG9zZWQpLgorCisJCQkJCQkJKlpRKgorWlEJCQlRdWl0IHdpdGhvdXQgY2hlY2tpbmcgZm9yIGNoYW5nZXMgKHNhbWUgYXMgIjpxISIpLgorCQkJe25vdCBpbiBWaX0KKworTVVMVElQTEUgV0lORE9XUyBBTkQgQlVGRkVSUwkJCQkqd2luZG93LWV4aXQqCisKKwkJCQkJCQkqOnFhKiAqOnFhbGwqCis6cWFbbGxdCQlFeGl0IFZpbSwgdW5sZXNzIHRoZXJlIGFyZSBzb21lIGJ1ZmZlcnMgd2hpY2ggaGF2ZSBiZWVuCisJCWNoYW5nZWQuICAoVXNlICI6Ym1vZCIgdG8gZ28gdG8gdGhlIG5leHQgbW9kaWZpZWQgYnVmZmVyKS4KKwkJV2hlbiAnYXV0b3dyaXRlYWxsJyBpcyBzZXQgYWxsIGNoYW5nZWQgYnVmZmVycyB3aWxsIGJlCisJCXdyaXR0ZW4sIGxpa2UgfDp3cWFsbHwuIHtub3QgaW4gVml9CisKKzpjb25mW2lybV0gcWFbbGxdCisJCUV4aXQgVmltLiAgQnJpbmcgdXAgYSBwcm9tcHQgd2hlbiBzb21lIGJ1ZmZlcnMgaGF2ZSBiZWVuCisJCWNoYW5nZWQuICBTZWUgfDpjb25maXJtfC4ge25vdCBpbiBWaX0KKworOnFhW2xsXSEJRXhpdCBWaW0uICBBbnkgY2hhbmdlcyB0byBidWZmZXJzIGFyZSBsb3N0LiB7bm90IGluIFZpfQorCisJCQkJCQkJKjpxdWl0YSogKjpxdWl0YWxsKgorOnF1aXRhW2xsXVshXQlTYW1lIGFzICI6cWFsbCIuIHtub3QgaW4gVml9CisKKzp3cWFbbGxdCQkJCQkqOndxYSogKjp3cWFsbCogKjp4YSogKjp4YWxsKgorOnhhW2xsXQkJV3JpdGUgYWxsIGNoYW5nZWQgYnVmZmVycyBhbmQgZXhpdCBWaW0uICBJZiB0aGVyZSBhcmUgYnVmZmVycworCQl3aXRob3V0IGEgZmlsZSBuYW1lLCB3aGljaCBhcmUgcmVhZG9ubHkgb3Igd2hpY2ggY2Fubm90IGJlCisJCXdyaXR0ZW4gZm9yIGFub3RoZXIgcmVhc29uLCBWaW0gd2lsbCBub3QgcXVpdC4ge25vdCBpbiBWaX0KKworOmNvbmZbaXJtXSB3cWFbbGxdCis6Y29uZltpcm1dIHhhW2xsXQorCQlXcml0ZSBhbGwgY2hhbmdlZCBidWZmZXJzIGFuZCBleGl0IFZpbS4gIEJyaW5nIHVwIGEgcHJvbXB0CisJCXdoZW4gc29tZSBidWZmZXJzIGFyZSByZWFkb25seSBvciBjYW5ub3QgYmUgd3JpdHRlbiBmb3IKKwkJYW5vdGhlciByZWFzb24uICBTZWUgfDpjb25maXJtfC4ge25vdCBpbiBWaX0KKworOndxYVtsbF0hCis6eGFbbGxdIQlXcml0ZSBhbGwgY2hhbmdlZCBidWZmZXJzLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIHJlYWRvbmx5LAorCQlhbmQgZXhpdCBWaW0uICBJZiB0aGVyZSBhcmUgYnVmZmVycyB3aXRob3V0IGEgZmlsZSBuYW1lIG9yCisJCXdoaWNoIGNhbm5vdCBiZSB3cml0dGVuIGZvciBhbm90aGVyIHJlYXNvbiwgVmltIHdpbGwgbm90IHF1aXQuCisJCXtub3QgaW4gVml9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gRWRpdGluZyBiaW5hcnkgZmlsZXMJCQkJCSplZGl0LWJpbmFyeSoKKworQWx0aG91Z2ggVmltIHdhcyBtYWRlIHRvIGVkaXQgdGV4dCBmaWxlcywgaXQgaXMgcG9zc2libGUgdG8gZWRpdCBiaW5hcnkKK2ZpbGVzLiAgVGhlIHwtYnwgVmltIGFyZ3VtZW50IChiIGZvciBiaW5hcnkpIG1ha2VzIFZpbSBkbyBmaWxlIEkvTyBpbiBiaW5hcnkKK21vZGUsIGFuZCBzZXRzIHNvbWUgb3B0aW9ucyBmb3IgZWRpdGluZyBiaW5hcnkgZmlsZXMgKCdiaW5hcnknIG9uLCAndGV4dHdpZHRoJwordG8gMCwgJ21vZGVsaW5lJyBvZmYsICdleHBhbmR0YWInIG9mZikuICBTZXR0aW5nIHRoZSAnYmluYXJ5JyBvcHRpb24gaGFzIHRoZQorc2FtZSBlZmZlY3QuICBEb24ndCBmb3JnZXQgdG8gZG8gdGhpcyBiZWZvcmUgcmVhZGluZyB0aGUgZmlsZS4KKworVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0byByZW1lbWJlciB3aGVuIGVkaXRpbmcgYmluYXJ5IGZpbGVzOgorLSBXaGVuIGVkaXRpbmcgZXhlY3V0YWJsZSBmaWxlcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgbXVzdCBub3QgY2hhbmdlLgorICBVc2Ugb25seSB0aGUgIlIiIG9yICJyIiBjb21tYW5kIHRvIGNoYW5nZSB0ZXh0LiAgRG8gbm90IGRlbGV0ZSBjaGFyYWN0ZXJzCisgIHdpdGggIngiIG9yIGJ5IGJhY2tzcGFjaW5nLgorLSBTZXQgdGhlICd0ZXh0d2lkdGgnIG9wdGlvbiB0byAwLiAgT3RoZXJ3aXNlIGxpbmVzIHdpbGwgdW5leHBlY3RlZGx5IGJlCisgIHNwbGl0IGluIHR3by4KKy0gV2hlbiB0aGVyZSBhcmUgbm90IG1hbnkgPEVPTD5zLCB0aGUgbGluZXMgd2lsbCBiZWNvbWUgdmVyeSBsb25nLiAgSWYgeW91CisgIHdhbnQgdG8gZWRpdCBhIGxpbmUgdGhhdCBkb2VzIG5vdCBmaXQgb24gdGhlIHNjcmVlbiByZXNldCB0aGUgJ3dyYXAnIG9wdGlvbi4KKyAgSG9yaXpvbnRhbCBzY3JvbGxpbmcgaXMgdXNlZCB0aGVuLiAgSWYgYSBsaW5lIGJlY29tZXMgdG9vIGxvbmcgKG1vcmUgdGhhbgorICBhYm91dCAzMjc2NyBjaGFyYWN0ZXJzIG9uIHRoZSBBbWlnYSwgbXVjaCBtb3JlIG9uIDMyLWJpdCBzeXN0ZW1zLCBzZWUKKyAgfGxpbWl0c3wpIHlvdSBjYW5ub3QgZWRpdCB0aGF0IGxpbmUuICBUaGUgbGluZSB3aWxsIGJlIHNwbGl0IHdoZW4gcmVhZGluZworICB0aGUgZmlsZS4gIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB5b3UgZ2V0IGFuICJvdXQgb2YgbWVtb3J5IiBlcnJvciB3aGVuCisgIHJlYWRpbmcgdGhlIGZpbGUuCistIE1ha2Ugc3VyZSB0aGUgJ2JpbmFyeScgb3B0aW9uIGlzIHNldCBCRUZPUkUgbG9hZGluZyB0aGUKKyAgZmlsZS4gIE90aGVyd2lzZSBib3RoIDxDUj4gPE5MPiBhbmQgPE5MPiBhcmUgY29uc2lkZXJlZCB0byBlbmQgYSBsaW5lCisgIGFuZCB3aGVuIHRoZSBmaWxlIGlzIHdyaXR0ZW4gdGhlIDxOTD4gd2lsbCBiZSByZXBsYWNlZCB3aXRoIDxDUj4gPE5MPi4KKy0gPE51bD4gY2hhcmFjdGVycyBhcmUgc2hvd24gb24gdGhlIHNjcmVlbiBhcyBeQC4gIFlvdSBjYW4gZW50ZXIgdGhlbSB3aXRoCisgICJDVFJMLVYgQ1RSTC1AIiBvciAiQ1RSTC1WIDAwMCIge1ZpIGNhbm5vdCBoYW5kbGUgPE51bD4gY2hhcmFjdGVycyBpbiB0aGUKKyAgZmlsZX0KKy0gVG8gaW5zZXJ0IGEgPE5MPiBjaGFyYWN0ZXIgaW4gdGhlIGZpbGUgc3BsaXQgdXAgYSBsaW5lLiAgV2hlbiB3cml0aW5nIHRoZQorICBidWZmZXIgdG8gYSBmaWxlIGEgPE5MPiB3aWxsIGJlIHdyaXR0ZW4gZm9yIHRoZSA8RU9MPi4KKy0gVmltIG5vcm1hbGx5IGFwcGVuZHMgYW4gPEVPTD4gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpZiB0aGVyZSBpcyBub25lLgorICBTZXR0aW5nIHRoZSAnYmluYXJ5JyBvcHRpb24gcHJldmVudHMgdGhpcy4gIElmIHlvdSB3YW50IHRvIGFkZCB0aGUgZmluYWwKKyAgPEVPTD4sIHNldCB0aGUgJ2VuZG9mbGluZScgb3B0aW9uLiAgWW91IGNhbiBhbHNvIHJlYWQgdGhlIHZhbHVlIG9mIHRoaXMKKyAgb3B0aW9uIHRvIHNlZSBpZiB0aGVyZSB3YXMgYW4gPEVPTD4gZm9yIHRoZSBsYXN0IGxpbmUgKHlvdSBjYW5ub3Qgc2VlIHRoaXMKKyAgaW4gdGhlIHRleHQpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIEVuY3J5cHRpb24JCQkJCQkqZW5jcnlwdGlvbioKKworVmltIGlzIGFibGUgdG8gd3JpdGUgZmlsZXMgZW5jcnlwdGVkLCBhbmQgcmVhZCB0aGVtIGJhY2suICBUaGUgZW5jcnlwdGVkIHRleHQKK2Nhbm5vdCBiZSByZWFkIHdpdGhvdXQgdGhlIHJpZ2h0IGtleS4KKworTm90ZTogVGhlIHN3YXBmaWxlIGFuZCB0ZXh0IGluIG1lbW9yeSBpcyBub3QgZW5jcnlwdGVkLiAgQSBzeXN0ZW0KK2FkbWluaXN0cmF0b3Igd2lsbCBiZSBhYmxlIHRvIHNlZSB5b3VyIHRleHQgd2hpbGUgeW91IGFyZSBlZGl0aW5nIGl0LgorV2hlbiBmaWx0ZXJpbmcgdGV4dCB3aXRoICI6IWZpbHRlciIgb3IgdXNpbmcgIjp3ICFjb21tYW5kIiB0aGUgdGV4dCBpcyBub3QKK2VuY3J5cHRlZCwgdGhpcyBtYXkgcmV2ZWFsIGl0IHRvIG90aGVycy4KKworV0FSTklORzogSWYgeW91IG1ha2UgYSB0eXBvIHdoZW4gZW50ZXJpbmcgdGhlIGtleSBhbmQgdGhlbiB3cml0ZSB0aGUgZmlsZSBhbmQKK2V4aXQsIHRoZSB0ZXh0IHdpbGwgYmUgbG9zdCEKKworVGhlIG5vcm1hbCB3YXkgdG8gd29yayB3aXRoIGVuY3J5cHRpb24sIGlzIHRvIHVzZSB0aGUgIjpYIiBjb21tYW5kLCB3aGljaCB3aWxsCithc2sgeW91IHRvIGVudGVyIGEga2V5LiAgQSBmb2xsb3dpbmcgd3JpdGUgY29tbWFuZCB3aWxsIHVzZSB0aGF0IGtleSB0bworZW5jcnlwdCB0aGUgZmlsZS4gIElmIHlvdSBsYXRlciBlZGl0IHRoZSBzYW1lIGZpbGUsIFZpbSB3aWxsIGFzayB5b3UgdG8gZW50ZXIKK2Ega2V5LiAgSWYgeW91IHR5cGUgdGhlIHNhbWUga2V5IGFzIHRoYXQgd2FzIHVzZWQgZm9yIHdyaXRpbmcsIHRoZSB0ZXh0IHdpbGwKK2JlIHJlYWRhYmxlIGFnYWluLiAgSWYgeW91IHVzZSBhIHdyb25nIGtleSwgaXQgd2lsbCBiZSBhIG1lc3MuCisKKwkJCQkJCQkqOlgqCis6WAlQcm9tcHQgZm9yIGFuIGVuY3J5cHRpb24ga2V5LiAgVGhlIHR5cGluZyBpcyBkb25lIHdpdGhvdXQgc2hvd2luZyB0aGUKKwlhY3R1YWwgdGV4dCwgc28gdGhhdCBzb21lb25lIGxvb2tpbmcgYXQgdGhlIGRpc3BsYXkgd29uJ3Qgc2VlIGl0LgorCVRoZSB0eXBlZCBrZXkgaXMgc3RvcmVkIGluIHRoZSAna2V5JyBvcHRpb24sIHdoaWNoIGlzIHVzZWQgdG8gZW5jcnlwdAorCXRoZSBmaWxlIHdoZW4gaXQgaXMgd3JpdHRlbi4gIFRoZSBmaWxlIHdpbGwgcmVtYWluIHVuY2hhbmdlZCB1bnRpbCB5b3UKKwl3cml0ZSBpdC4gIFNlZSBhbHNvIHwteHwuCisKK1RoZSB2YWx1ZSBvZiB0aGUgJ2tleScgb3B0aW9ucyBpcyB1c2VkIHdoZW4gdGV4dCBpcyB3cml0dGVuLiAgV2hlbiB0aGUgb3B0aW9uCitpcyBub3QgZW1wdHksIHRoZSB3cml0dGVuIGZpbGUgd2lsbCBiZSBlbmNyeXB0ZWQsIHVzaW5nIHRoZSB2YWx1ZSBhcyB0aGUKK2VuY3J5cHRpb24ga2V5LiAgQSBtYWdpYyBudW1iZXIgaXMgcHJlcGVuZGVkLCBzbyB0aGF0IFZpbSBjYW4gcmVjb2duaXplIHRoYXQKK3RoZSBmaWxlIGlzIGVuY3J5cHRlZC4KKworVG8gZGlzYWJsZSB0aGUgZW5jcnlwdGlvbiwgcmVzZXQgdGhlICdrZXknIG9wdGlvbiB0byBhbiBlbXB0eSB2YWx1ZTogPgorCTpzZXQga2V5PQorCitXaGVuIHJlYWRpbmcgYSBmaWxlIHRoYXQgaGFzIGJlZW4gZW5jcnlwdGVkIGFuZCB0aGlzIG9wdGlvbiBpcyBub3QgZW1wdHksIGl0Cit3aWxsIGJlIHVzZWQgZm9yIGRlY3J5cHRpb24uICBJZiB0aGUgdmFsdWUgaXMgZW1wdHksIHlvdSB3aWxsIGJlIHByb21wdGVkIHRvCitlbnRlciB0aGUga2V5LiAgSWYgeW91IGRvbid0IGVudGVyIGEga2V5LCB0aGUgZmlsZSBpcyBlZGl0ZWQgd2l0aG91dCBiZWluZworZGVjcnlwdGVkLgorCitJZiB3YW50IHRvIHN0YXJ0IHJlYWRpbmcgYSBmaWxlIHRoYXQgdXNlcyBhIGRpZmZlcmVudCBrZXksIHNldCB0aGUgJ2tleScKK29wdGlvbiB0byBhbiBlbXB0eSBzdHJpbmcsIHNvIHRoYXQgVmltIHdpbGwgcHJvbXB0IGZvciBhIG5ldyBvbmUuICBEb24ndCB1c2UKK3RoZSAiOnNldCIgY29tbWFuZCB0byBlbnRlciB0aGUgdmFsdWUsIG90aGVyIHBlb3BsZSBjYW4gcmVhZCB0aGUgY29tbWFuZCBvdmVyCit5b3VyIHNob3VsZGVyLgorCitTaW5jZSB0aGUgdmFsdWUgb2YgdGhlICdrZXknIG9wdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBhIHNlY3JldCwgaXRzIHZhbHVlIGNhbgorbmV2ZXIgYmUgdmlld2VkLiAgWW91IHNob3VsZCBub3Qgc2V0IHRoaXMgb3B0aW9uIGluIGEgdmltcmMgZmlsZS4KKworQW4gZW5jcnlwdGVkIGZpbGUgY2FuIGJlIHJlY29nbml6ZWQgYnkgdGhlICJmaWxlIiBjb21tYW5kLCBpZiB5b3UgYWRkIHRoaXMKK2xpbmUgdG8gIi9ldGMvbWFnaWMiLCAiL3Vzci9zaGFyZS9taXNjL21hZ2ljIiBvciB3aGVyZXZlciB5b3VyIHN5c3RlbSBoYXMgdGhlCisibWFnaWMiIGZpbGU6ID4KKyAgICAgMAlzdHJpbmcJVmltQ3J5cHR+CVZpbSBlbmNyeXB0ZWQgZmlsZQorCitOb3RlczoKKy0gRW5jcnlwdGlvbiBpcyBub3QgcG9zc2libGUgd2hlbiBkb2luZyBjb252ZXJzaW9uIHdpdGggJ2NoYXJjb252ZXJ0Jy4KKy0gVGV4dCB5b3UgY29weSBvciBkZWxldGUgZ29lcyB0byB0aGUgbnVtYmVyZWQgcmVnaXN0ZXJzLiAgVGhlIHJlZ2lzdGVycyBjYW4KKyAgYmUgc2F2ZWQgaW4gdGhlIC52aW1pbmZvIGZpbGUsIHdoZXJlIHRoZXkgY291bGQgYmUgcmVhZC4gIENoYW5nZSB5b3VyCisgICd2aW1pbmZvJyBvcHRpb24gdG8gYmUgc2FmZS4KKy0gU29tZW9uZSBjYW4gdHlwZSBjb21tYW5kcyBpbiBWaW0gd2hlbiB5b3Ugd2FsayBhd2F5IGZvciBhIG1vbWVudCwgaGUgc2hvdWxkCisgIG5vdCBiZSBhYmxlIHRvIGdldCB0aGUga2V5LgorLSBJZiB5b3UgbWFrZSBhIHR5cGluZyBtaXN0YWtlIHdoZW4gZW50ZXJpbmcgdGhlIGtleSwgeW91IG1pZ2h0IG5vdCBiZSBhYmxlIHRvCisgIGdldCB5b3VyIHRleHQgYmFjayEKKy0gSWYgeW91IHR5cGUgdGhlIGtleSB3aXRoIGEgIjpzZXQga2V5PXZhbHVlIiBjb21tYW5kLCBpdCBjYW4gYmUga2VwdCBpbiB0aGUKKyAgaGlzdG9yeSwgc2hvd2luZyB0aGUgJ2tleScgdmFsdWUgaW4gYSB2aW1pbmZvIGZpbGUuCistIFRoZXJlIGlzIG5ldmVyIDEwMCUgc2FmZXR5LiAgVGhlIGVuY3J5cHRpb24gaW4gVmltIGhhcyBub3QgYmVlbiB0ZXN0ZWQgZm9yCisgIHJvYnVzdG5lc3MuCistIFRoZSBhbGdvcml0aG0gdXNlZCBpcyBicmVha2FibGUuICBBIDQgY2hhcmFjdGVyIGtleSBpbiBhYm91dCBvbmUgaG91ciwgYSA2CisgIGNoYXJhY3RlciBrZXkgaW4gb25lIGRheSAob24gYSBQZW50aXVtIDEzMyBQQykuICBUaGlzIHJlcXVpcmVzIHRoYXQgeW91IGtub3cKKyAgc29tZSB0ZXh0IHRoYXQgbXVzdCBhcHBlYXIgaW4gdGhlIGZpbGUuICBBbiBleHBlcnQgY2FuIGJyZWFrIGl0IGZvciBhbnkga2V5LgorICBXaGVuIHRoZSB0ZXh0IGhhcyBiZWVuIGRlY3J5cHRlZCwgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIGtleSBjYW4gYmUKKyAgcmV2ZWFsZWQsIGFuZCBvdGhlciBmaWxlcyBlbmNyeXB0ZWQgd2l0aCB0aGUgc2FtZSBrZXkgY2FuIGJlIGRlY3J5cHRlZC4KKy0gUGt6aXAgdXNlcyB0aGUgc2FtZSBlbmNyeXB0aW9uLCBhbmQgVVMgR292dCBoYXMgbm8gb2JqZWN0aW9uIHRvIGl0cyBleHBvcnQuCisgIFBremlwJ3MgcHVibGljIGZpbGUgQVBQTk9URS5UWFQgZGVzY3JpYmVzIHRoaXMgYWxnb3JpdGhtIGluIGRldGFpbC4KKy0gVmltIG9yaWdpbmF0ZXMgZnJvbSB0aGUgTmV0aGVybGFuZHMuICBUaGF0IGlzIHdoZXJlIHRoZSBzb3VyY2VzIGNvbWUgZnJvbS4KKyAgVGh1cyB0aGUgZW5jcnlwdGlvbiBjb2RlIGlzIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBVU0EuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTAuIFRpbWVzdGFtcHMJCQkJCSp0aW1lc3RhbXAqICp0aW1lc3RhbXBzKgorCitWaW0gcmVtZW1iZXJzIHRoZSBtb2RpZmljYXRpb24gdGltZXN0YW1wIG9mIGEgZmlsZSB3aGVuIHlvdSBiZWdpbiBlZGl0aW5nIGl0LgorVGhpcyBpcyB1c2VkIHRvIGF2b2lkIHRoYXQgeW91IGhhdmUgdHdvIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmaWxlCisod2l0aG91dCB5b3Uga25vd2luZyB0aGlzKS4KKworQWZ0ZXIgYSBzaGVsbCBjb21tYW5kIGlzIHJ1biAofDohY21kfCB8c3VzcGVuZHwgfDpyZWFkIXwgfEt8KSB0aW1lc3RhbXBzIGFyZQorY29tcGFyZWQgZm9yIGFsbCBidWZmZXJzIGluIGEgd2luZG93LiAgIFZpbSB3aWxsIHJ1biBhbnkgYXNzb2NpYXRlZAorfEZpbGVDaGFuZ2VkU2hlbGx8IGF1dG9jb21tYW5kcyBvciBkaXNwbGF5IGEgd2FybmluZyBmb3IgYW55IGZpbGVzIHRoYXQgaGF2ZQorY2hhbmdlZC4gIEluIHRoZSBHVUkgdGhpcyBoYXBwZW5zIHdoZW4gVmltIHJlZ2FpbnMgaW5wdXQgZm9jdXMuCisKKwkJCQkJCQkqRTMyMSogKkU0NjIqCitJZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlbG9hZCBhIGZpbGUgd2hlbiBpdCBoYXMgYmVlbiBjaGFuZ2VkIG91dHNpZGUgb2YKK1ZpbSwgc2V0IHRoZSAnYXV0b3JlYWQnIG9wdGlvbi4gIFRoaXMgZG9lc24ndCB3b3JrIGF0IHRoZSBtb21lbnQgeW91IHdyaXRlIHRoZQorZmlsZSB0aG91Z2gsIG9ubHkgd2hlbiB0aGUgZmlsZSB3YXNuJ3QgY2hhbmdlZCBpbnNpZGUgb2YgVmltLgorCitOb3RlIHRoYXQgaWYgYSBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIGlzIGRlZmluZWQgeW91IHdpbGwgbm90IGdldCBhCit3YXJuaW5nIG1lc3NhZ2Ugb3IgcHJvbXB0LiAgVGhlIGF1dG9jb21tYW5kIGlzIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGlzLgorCitUaGVyZSBpcyBubyB3YXJuaW5nIGZvciBhIGRpcmVjdG9yeSAoZS5nLiwgaW4gdGhlIHxmaWxlLWV4cGxvcmVyfCkuICBCdXQgeW91CitkbyBnZXQgd2FybmVkIGlmIHlvdSBzdGFydGVkIGVkaXRpbmcgYSBuZXcgZmlsZSBhbmQgaXQgd2FzIGNyZWF0ZWQgYXMgYQorZGlyZWN0b3J5IGxhdGVyLgorCitXaGVuIFZpbSBub3RpY2VzIHRoZSB0aW1lc3RhbXAgb2YgYSBmaWxlIGhhcyBjaGFuZ2VkLCBhbmQgdGhlIGZpbGUgaXMgYmVpbmcKK2VkaXRlZCBpbiBhIGJ1ZmZlciBidXQgaGFzIG5vdCBjaGFuZ2VkLCBWaW0gY2hlY2tzIGlmIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZQoraXMgZXF1YWwuICBUaGlzIGlzIGRvbmUgYnkgcmVhZGluZyB0aGUgZmlsZSBhZ2FpbiAoaW50byBhIGhpZGRlbiBidWZmZXIsIHdoaWNoCitpcyBpbW1lZGlhdGVseSBkZWxldGVkIGFnYWluKSBhbmQgY29tcGFyaW5nIHRoZSB0ZXh0LiAgSWYgdGhlIHRleHQgaXMgZXF1YWwsCit5b3Ugd2lsbCBnZXQgbm8gd2FybmluZy4KKworSWYgeW91IGRvbid0IGdldCB3YXJuZWQgb2Z0ZW4gZW5vdWdoIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZC4KKworCQkJCQkJCSo6Y2hlY2t0KiAqOmNoZWNrdGltZSoKKzpjaGVja3RbaW1lXQkJQ2hlY2sgaWYgYW55IGJ1ZmZlcnMgd2VyZSBjaGFuZ2VkIG91dHNpZGUgb2YgVmltLgorCQkJVGhpcyBjaGVja3MgYW5kIHdhcm5zIHlvdSBpZiB5b3Ugd291bGQgZW5kIHVwIHdpdGggdHdvCisJCQl2ZXJzaW9ucyBvZiBhIGZpbGUuCisJCQlJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGFuIGF1dG9jb21tYW5kLCBhICI6Z2xvYmFsIgorCQkJY29tbWFuZCBvciBpcyBub3QgdHlwZWQgdGhlIGFjdHVhbCBjaGVjayBpcyBwb3N0cG9uZWQKKwkJCXVudGlsIGEgbW9tZW50IHRoZSBzaWRlIGVmZmVjdHMgKHJlbG9hZGluZyB0aGUgZmlsZSkKKwkJCXdvdWxkIGJlIGhhcm1sZXNzLgorCQkJRWFjaCBsb2FkZWQgYnVmZmVyIGlzIGNoZWNrZWQgZm9yIGl0cyBhc3NvY2lhdGVkIGZpbGUKKwkJCWJlaW5nIGNoYW5nZWQuICBJZiB0aGUgZmlsZSB3YXMgY2hhbmdlZCBWaW0gd2lsbCB0YWtlCisJCQlhY3Rpb24uICBJZiB0aGVyZSBhcmUgbm8gY2hhbmdlcyBpbiB0aGUgYnVmZmVyIGFuZAorCQkJJ2F1dG9yZWFkJyBpcyBzZXQsIHRoZSBidWZmZXIgaXMgcmVsb2FkZWQuICBPdGhlcndpc2UsCisJCQl5b3UgYXJlIG9mZmVyZWQgdGhlIGNob2ljZSBvZiByZWxvYWRpbmcgdGhlIGZpbGUuICBJZgorCQkJdGhlIGZpbGUgd2FzIGRlbGV0ZWQgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlLgorCQkJSWYgdGhlIGZpbGUgcHJldmlvdXNseSBkaWRuJ3QgZXhpc3QgeW91IGdldCBhIHdhcm5pbmcKKwkJCWlmIGl0IGV4aXN0cyBub3cuCisJCQlPbmNlIGEgZmlsZSBoYXMgYmVlbiBjaGVja2VkIHRoZSB0aW1lc3RhbXAgaXMgcmVzZXQsCisJCQl5b3Ugd2lsbCBub3QgYmUgd2FybmVkIGFnYWluLgorCis6W05dY2hlY2t0W2ltZV0ge2ZpbGVuYW1lfQorOltOXWNoZWNrdFtpbWVdIFtOXQorCQkJQ2hlY2sgdGhlIHRpbWVzdGFtcCBvZiBhIHNwZWNpZmljIGJ1ZmZlci4gIFRoZSBidWZmZXIKKwkJCW1heSBiZSBzcGVjaWZpZWQgYnkgbmFtZSwgbnVtYmVyIG9yIHdpdGggYSBwYXR0ZXJuLgorCisKK0JlZm9yZSB3cml0aW5nIGEgZmlsZSB0aGUgdGltZXN0YW1wIGlzIGNoZWNrZWQuICBJZiBpdCBoYXMgY2hhbmdlZCwgVmltIHdpbGwKK2FzayBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gb3ZlcndyaXRlIHRoZSBmaWxlOgorCisJV0FSTklORzogVGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSByZWFkaW5nIGl0ISEhCisJRG8geW91IHJlYWxseSB3YW50IHRvIHdyaXRlIHRvIGl0ICh5L24pPworCitJZiB5b3UgaGl0ICd5JyBWaW0gd2lsbCBjb250aW51ZSB3cml0aW5nIHRoZSBmaWxlLiAgSWYgeW91IGhpdCAnbicgdGhlIHdyaXRlIGlzCithYm9ydGVkLiAgSWYgeW91IHVzZWQgIjp3cSIgb3IgIlpaIiBWaW0gd2lsbCBub3QgZXhpdCwgeW91IHdpbGwgZ2V0IGFub3RoZXIKK2NoYW5jZSB0byB3cml0ZSB0aGUgZmlsZS4KKworVGhlIG1lc3NhZ2Ugd291bGQgbm9ybWFsbHkgbWVhbiB0aGF0IHNvbWVib2R5IGhhcyB3cml0dGVuIHRvIHRoZSBmaWxlIGFmdGVyCit0aGUgZWRpdCBzZXNzaW9uIHN0YXJ0ZWQuICBUaGlzIGNvdWxkIGJlIGFub3RoZXIgcGVyc29uLCBpbiB3aGljaCBjYXNlIHlvdQorcHJvYmFibHkgd2FudCB0byBjaGVjayBpZiB5b3VyIGNoYW5nZXMgdG8gdGhlIGZpbGUgYW5kIHRoZSBjaGFuZ2VzIGZyb20gdGhlCitvdGhlciBwZXJzb24gc2hvdWxkIGJlIG1lcmdlZC4gIFdyaXRlIHRoZSBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZSBhbmQgY2hlY2sgZm9yCitkaWZmZXJlbmNlcyAodGhlICJkaWZmIiBwcm9ncmFtIGNhbiBiZSB1c2VkIGZvciB0aGlzKS4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHlvdSBtb2RpZmllZCB0aGUgZmlsZSB5b3Vyc2VsZiwgZnJvbSBhbm90aGVyIGVkaXQKK3Nlc3Npb24gb3Igd2l0aCBhbm90aGVyIGNvbW1hbmQgKGUuZy4sIGEgZmlsdGVyIGNvbW1hbmQpLiAgVGhlbiB5b3Ugd2lsbCBrbm93Cit3aGljaCB2ZXJzaW9uIG9mIHRoZSBmaWxlIHlvdSB3YW50IHRvIGtlZXAuCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4NWZmNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2V2YWwudHh0CkBAIC0wLDAgKzEsNDU4MyBAQAorKmV2YWwudHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAxOAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0V4cHJlc3Npb24gZXZhbHVhdGlvbgkJCSpleHByZXNzaW9uKiAqZXhwciogKkUxNSogKmV2YWwqCisKK1VzaW5nIGV4cHJlc3Npb25zIGlzIGludHJvZHVjZWQgaW4gY2hhcHRlciA0MSBvZiB0aGUgdXNlciBtYW51YWwgfHVzcl80MS50eHR8LgorCitOb3RlOiBFeHByZXNzaW9uIGV2YWx1YXRpb24gY2FuIGJlIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4gIElmIHRoaXMgaGFzIGJlZW4KK2RvbmUsIHRoZSBmZWF0dXJlcyBpbiB0aGlzIGRvY3VtZW50IGFyZSBub3QgYXZhaWxhYmxlLiAgU2VlIHwrZXZhbHwgYW5kIHRoZQorbGFzdCBjaGFwdGVyIGJlbG93LgorCisxLiAgVmFyaWFibGVzCQl8dmFyaWFibGVzfAorMi4gIEV4cHJlc3Npb24gc3ludGF4CXxleHByZXNzaW9uLXN5bnRheHwKKzMuICBJbnRlcm5hbCB2YXJpYWJsZQl8aW50ZXJuYWwtdmFyaWFibGVzfAorNC4gIEJ1aWx0aW4gRnVuY3Rpb25zCXxmdW5jdGlvbnN8Cis1LiAgRGVmaW5pbmcgZnVuY3Rpb25zCXx1c2VyLWZ1bmN0aW9uc3wKKzYuICBDdXJseSBicmFjZXMgbmFtZXMJfGN1cmx5LWJyYWNlcy1uYW1lc3wKKzcuICBDb21tYW5kcwkJfGV4cHJlc3Npb24tY29tbWFuZHN8Cis4LiAgRXhjZXB0aW9uIGhhbmRsaW5nCXxleGNlcHRpb24taGFuZGxpbmd8Cis5LiAgRXhhbXBsZXMJCXxldmFsLWV4YW1wbGVzfAorMTAuIE5vICtldmFsIGZlYXR1cmUJfG5vLWV2YWwtZmVhdHVyZXwKKzExLiBUaGUgc2FuZGJveAkJfGV2YWwtc2FuZGJveHwKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFZhcmlhYmxlcwkJCQkJCSp2YXJpYWJsZXMqCisKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgdmFyaWFibGVzOgorCitOdW1iZXIJCWEgMzIgYml0IHNpZ25lZCBudW1iZXIuCitTdHJpbmcJCWEgTlVMIHRlcm1pbmF0ZWQgc3RyaW5nIG9mIDgtYml0IHVuc2lnbmVkIGNoYXJhY3RlcnMuCisKK1RoZXNlIGFyZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5IGFyZSB1c2VkLgorCitDb252ZXJzaW9uIGZyb20gYSBOdW1iZXIgdG8gYSBTdHJpbmcgaXMgYnkgbWFraW5nIHRoZSBBU0NJSSByZXByZXNlbnRhdGlvbiBvZgordGhlIE51bWJlci4gIEV4YW1wbGVzOiA+CisJTnVtYmVyIDEyMwktLT4JU3RyaW5nICIxMjMiCisJTnVtYmVyIDAJLS0+CVN0cmluZyAiMCIKKwlOdW1iZXIgLTEJLS0+CVN0cmluZyAiLTEiCisKK0NvbnZlcnNpb24gZnJvbSBhIFN0cmluZyB0byBhIE51bWJlciBpcyBkb25lIGJ5IGNvbnZlcnRpbmcgdGhlIGZpcnN0IGRpZ2l0cwordG8gYSBudW1iZXIuICBIZXhhZGVjaW1hbCAiMHhmOSIgYW5kIE9jdGFsICIwMTciIG51bWJlcnMgYXJlIHJlY29nbml6ZWQuICBJZgordGhlIFN0cmluZyBkb2Vzbid0IHN0YXJ0IHdpdGggZGlnaXRzLCB0aGUgcmVzdWx0IGlzIHplcm8uICBFeGFtcGxlczogPgorCVN0cmluZyAiNDU2IgktLT4JTnVtYmVyIDQ1NgorCVN0cmluZyAiNmJhciIJLS0+CU51bWJlciA2CisJU3RyaW5nICJmb28iCS0tPglOdW1iZXIgMAorCVN0cmluZyAiMHhmMSIJLS0+CU51bWJlciAyNDEKKwlTdHJpbmcgIjAxMDAiCS0tPglOdW1iZXIgNjQKKwlTdHJpbmcgIi04IgktLT4JTnVtYmVyIC04CisJU3RyaW5nICIrOCIJLS0+CU51bWJlciAwCisKK1RvIGZvcmNlIGNvbnZlcnNpb24gZnJvbSBTdHJpbmcgdG8gTnVtYmVyLCBhZGQgemVybyB0byBpdDogPgorCTplY2hvICIwMTAwIiArIDAKKworRm9yIGJvb2xlYW4gb3BlcmF0b3JzIE51bWJlcnMgYXJlIHVzZWQuICBaZXJvIGlzIEZBTFNFLCBub24temVybyBpcyBUUlVFLgorCitOb3RlIHRoYXQgaW4gdGhlIGNvbW1hbmQgPgorCTppZiAiZm9vIgorImZvbyIgaXMgY29udmVydGVkIHRvIDAsIHdoaWNoIG1lYW5zIEZBTFNFLiAgVG8gdGVzdCBmb3IgYSBub24tZW1wdHkgc3RyaW5nLAordXNlIHN0cmxlbigpOiA+CisJOmlmIHN0cmxlbigiZm9vIikKKworSWYgeW91IG5lZWQgdG8ga25vdyB0aGUgdHlwZSBvZiBhIHZhcmlhYmxlIG9yIGV4cHJlc3Npb24sIHVzZSB0aGUgfHR5cGUoKXwKK2Z1bmN0aW9uLgorCitXaGVuIHRoZSAnIScgZmxhZyBpcyBpbmNsdWRlZCBpbiB0aGUgJ3ZpbWluZm8nIG9wdGlvbiwgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0CitzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGFuZCBkb24ndCBjb250YWluIGEgbG93ZXJjYXNlIGxldHRlciwgYXJlCitzdG9yZWQgaW4gdGhlIHZpbWluZm8gZmlsZSB8dmltaW5mby1maWxlfC4KKworV2hlbiB0aGUgJ3Nlc3Npb25vcHRpb25zJyBvcHRpb24gY29udGFpbnMgImdsb2JhbCIsIGdsb2JhbCB2YXJpYWJsZXMgdGhhdAorc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIGFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBsb3dlcmNhc2UgbGV0dGVyIGFyZQorc3RvcmVkIGluIHRoZSBzZXNzaW9uIGZpbGUgfHNlc3Npb24tZmlsZXwuCisKK3ZhcmlhYmxlIG5hbWUJCWNhbiBiZSBzdG9yZWQgd2hlcmUgfgorbXlfdmFyXzYJCW5vdAorTXlfVmFyXzYJCXNlc3Npb24gZmlsZQorTVlfVkFSXzYJCXZpbWluZm8gZmlsZQorCisKK0l0J3MgcG9zc2libGUgdG8gZm9ybSBhIHZhcmlhYmxlIG5hbWUgd2l0aCBjdXJseSBicmFjZXMsIHNlZQorfGN1cmx5LWJyYWNlcy1uYW1lc3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gRXhwcmVzc2lvbiBzeW50YXgJCQkJCSpleHByZXNzaW9uLXN5bnRheCoKKworRXhwcmVzc2lvbiBzeW50YXggc3VtbWFyeSwgZnJvbSBsZWFzdCB0byBtb3N0IHNpZ25pZmljYW50OgorCit8ZXhwcjF8IGV4cHIyID8gZXhwcjEgOiBleHByMQlpZi10aGVuLWVsc2UKKworfGV4cHIyfAlleHByMyB8fCBleHByMyAuLglsb2dpY2FsIE9SCisKK3xleHByM3wJZXhwcjQgJiYgZXhwcjQgLi4JbG9naWNhbCBBTkQKKworfGV4cHI0fAlleHByNSA9PSBleHByNQkJZXF1YWwKKwlleHByNSAhPSBleHByNQkJbm90IGVxdWFsCisJZXhwcjUgPgkgZXhwcjUJCWdyZWF0ZXIgdGhhbgorCWV4cHI1ID49IGV4cHI1CQlncmVhdGVyIHRoYW4gb3IgZXF1YWwKKwlleHByNSA8CSBleHByNQkJc21hbGxlciB0aGFuCisJZXhwcjUgPD0gZXhwcjUJCXNtYWxsZXIgdGhhbiBvciBlcXVhbAorCWV4cHI1ID1+IGV4cHI1CQlyZWdleHAgbWF0Y2hlcworCWV4cHI1ICF+IGV4cHI1CQlyZWdleHAgZG9lc24ndCBtYXRjaAorCisJZXhwcjUgPT0/IGV4cHI1CQllcXVhbCwgaWdub3JpbmcgY2FzZQorCWV4cHI1ID09IyBleHByNQkJZXF1YWwsIG1hdGNoIGNhc2UKKwlldGMuCQkJQXMgYWJvdmUsIGFwcGVuZCA/IGZvciBpZ25vcmluZyBjYXNlLCAjIGZvcgorCQkJCW1hdGNoaW5nIGNhc2UKKworfGV4cHI1fAlleHByNiArCSBleHByNiAuLgludW1iZXIgYWRkaXRpb24KKwlleHByNiAtCSBleHByNiAuLgludW1iZXIgc3VidHJhY3Rpb24KKwlleHByNiAuCSBleHByNiAuLglzdHJpbmcgY29uY2F0ZW5hdGlvbgorCit8ZXhwcjZ8CWV4cHI3ICoJIGV4cHI3IC4uCW51bWJlciBtdWx0aXBsaWNhdGlvbgorCWV4cHI3IC8JIGV4cHI3IC4uCW51bWJlciBkaXZpc2lvbgorCWV4cHI3ICUJIGV4cHI3IC4uCW51bWJlciBtb2R1bG8KKworfGV4cHI3fAkhIGV4cHI3CQkJbG9naWNhbCBOT1QKKwktIGV4cHI3CQkJdW5hcnkgbWludXMKKwkrIGV4cHI3CQkJdW5hcnkgcGx1cworCWV4cHI4CisKK3xleHByOHwJZXhwcjlbZXhwcjFdCQlpbmRleCBpbiBTdHJpbmcKKworfGV4cHI5fAludW1iZXIJCQludW1iZXIgY29uc3RhbnQKKwkic3RyaW5nIgkJc3RyaW5nIGNvbnN0YW50CisJJ3N0cmluZycJCWxpdGVyYWwgc3RyaW5nIGNvbnN0YW50CisJJm9wdGlvbgkJCW9wdGlvbiB2YWx1ZQorCShleHByMSkJCQluZXN0ZWQgZXhwcmVzc2lvbgorCXZhcmlhYmxlCQlpbnRlcm5hbCB2YXJpYWJsZQorCXZhe3JpYX1ibGUJCWludGVybmFsIHZhcmlhYmxlIHdpdGggY3VybHkgYnJhY2VzCisJJFZBUgkJCWVudmlyb25tZW50IHZhcmlhYmxlCisJQHIJCQljb250ZW50cyBvZiByZWdpc3RlciAncicKKwlmdW5jdGlvbihleHByMSwgLi4uKQlmdW5jdGlvbiBjYWxsCisJZnVuY3t0aX1vbihleHByMSwgLi4uKQlmdW5jdGlvbiBjYWxsIHdpdGggY3VybHkgYnJhY2VzCisKKworIi4uIiBpbmRpY2F0ZXMgdGhhdCB0aGUgb3BlcmF0aW9ucyBpbiB0aGlzIGxldmVsIGNhbiBiZSBjb25jYXRlbmF0ZWQuCitFeGFtcGxlOiA+CisJJm51IHx8ICZsaXN0ICYmICZzaGVsbCA9PSAiY3NoIgorCitBbGwgZXhwcmVzc2lvbnMgd2l0aGluIG9uZSBsZXZlbCBhcmUgcGFyc2VkIGZyb20gbGVmdCB0byByaWdodC4KKworCitleHByMQkJCQkJCQkqZXhwcjEqICpFMTA5KgorLS0tLS0KKworZXhwcjIgPyBleHByMSA6IGV4cHIxCisKK1RoZSBleHByZXNzaW9uIGJlZm9yZSB0aGUgJz8nIGlzIGV2YWx1YXRlZCB0byBhIG51bWJlci4gIElmIGl0IGV2YWx1YXRlcyB0bworbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGJldHdlZW4gdGhlICc/JyBhbmQgJzonLAorb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGFmdGVyIHRoZSAnOicuCitFeGFtcGxlOiA+CisJOmVjaG8gbG51bSA9PSAxID8gInRvcCIgOiBsbnVtCisKK1NpbmNlIHRoZSBmaXJzdCBleHByZXNzaW9uIGlzIGFuICJleHByMiIsIGl0IGNhbm5vdCBjb250YWluIGFub3RoZXIgPzouICBUaGUKK290aGVyIHR3byBleHByZXNzaW9ucyBjYW4sIHRodXMgYWxsb3cgZm9yIHJlY3Vyc2l2ZSB1c2Ugb2YgPzouCitFeGFtcGxlOiA+CisJOmVjaG8gbG51bSA9PSAxID8gInRvcCIgOiBsbnVtID09IDEwMDAgPyAibGFzdCIgOiBsbnVtCisKK1RvIGtlZXAgdGhpcyByZWFkYWJsZSwgdXNpbmcgfGxpbmUtY29udGludWF0aW9ufCBpcyBzdWdnZXN0ZWQ6ID4KKwk6ZWNobyBsbnVtID09IDEKKwk6XAk/ICJ0b3AiCisJOlwJOiBsbnVtID09IDEwMDAKKwk6XAkJPyAibGFzdCIKKwk6XAkJOiBsbnVtCisKKworZXhwcjIgYW5kIGV4cHIzCQkJCQkJKmV4cHIyKiAqZXhwcjMqCistLS0tLS0tLS0tLS0tLS0KKworCQkJCQkqZXhwci1iYXJiYXIqICpleHByLSYmKgorVGhlICJ8fCIgYW5kICImJiIgb3BlcmF0b3JzIHRha2Ugb25lIGFyZ3VtZW50IG9uIGVhY2ggc2lkZS4gIFRoZSBhcmd1bWVudHMKK2FyZSAoY29udmVydGVkIHRvKSBOdW1iZXJzLiAgVGhlIHJlc3VsdCBpczoKKworCSBpbnB1dAkJCQkgb3V0cHV0IH4KK24xCQluMgkJbjEgfHwgbjIJbjEgJiYgbjIgfgoremVybwkJemVybwkJemVybwkJemVybworemVybwkJbm9uLXplcm8Jbm9uLXplcm8JemVybworbm9uLXplcm8JemVybwkJbm9uLXplcm8JemVybworbm9uLXplcm8Jbm9uLXplcm8Jbm9uLXplcm8Jbm9uLXplcm8KKworVGhlIG9wZXJhdG9ycyBjYW4gYmUgY29uY2F0ZW5hdGVkLCBmb3IgZXhhbXBsZTogPgorCisJJm51IHx8ICZsaXN0ICYmICZzaGVsbCA9PSAiY3NoIgorCitOb3RlIHRoYXQgIiYmIiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgInx8Iiwgc28gdGhpcyBoYXMgdGhlIG1lYW5pbmcgb2Y6ID4KKworCSZudSB8fCAoJmxpc3QgJiYgJnNoZWxsID09ICJjc2giKQorCitPbmNlIHRoZSByZXN1bHQgaXMga25vd24sIHRoZSBleHByZXNzaW9uICJzaG9ydC1jaXJjdWl0cyIsIHRoYXQgaXMsIGZ1cnRoZXIKK2FyZ3VtZW50cyBhcmUgbm90IGV2YWx1YXRlZC4gIFRoaXMgaXMgbGlrZSB3aGF0IGhhcHBlbnMgaW4gQy4gIEZvciBleGFtcGxlOiA+CisKKwlsZXQgYSA9IDEKKwllY2hvIGEgfHwgYgorCitUaGlzIGlzIHZhbGlkIGV2ZW4gaWYgdGhlcmUgaXMgbm8gdmFyaWFibGUgY2FsbGVkICJiIiBiZWNhdXNlICJhIiBpcyBub24temVybywKK3NvIHRoZSByZXN1bHQgbXVzdCBiZSBub24temVyby4gIFNpbWlsYXJseSBiZWxvdzogPgorCisJZWNobyBleGlzdHMoImIiKSAmJiBiID09ICJ5ZXMiCisKK1RoaXMgaXMgdmFsaWQgd2hldGhlciAiYiIgaGFzIGJlZW4gZGVmaW5lZCBvciBub3QuICBUaGUgc2Vjb25kIGNsYXVzZSB3aWxsCitvbmx5IGJlIGV2YWx1YXRlZCBpZiAiYiIgaGFzIGJlZW4gZGVmaW5lZC4KKworCitleHByNAkJCQkJCQkqZXhwcjQqCistLS0tLQorCitleHByNSB7Y21wfSBleHByNQorCitDb21wYXJlIHR3byBleHByNSBleHByZXNzaW9ucywgcmVzdWx0aW5nIGluIGEgMCBpZiBpdCBldmFsdWF0ZXMgdG8gZmFsc2UsIG9yIDEKK2lmIGl0IGV2YWx1YXRlcyB0byB0cnVlLgorCisJCQkqZXhwci09PSogICpleHByLSE9KiAgKmV4cHItPiogICAqZXhwci0+PSoKKwkJCSpleHByLTwqICAgKmV4cHItPD0qICAqZXhwci09fiogICpleHByLSF+KgorCQkJKmV4cHItPT0jKiAqZXhwci0hPSMqICpleHByLT4jKiAgKmV4cHItPj0jKgorCQkJKmV4cHItPCMqICAqZXhwci08PSMqICpleHByLT1+IyogKmV4cHItIX4jKgorCQkJKmV4cHItPT0/KiAqZXhwci0hPT8qICpleHByLT4/KiAgKmV4cHItPj0/KgorCQkJKmV4cHItPD8qICAqZXhwci08PT8qICpleHByLT1+PyogKmV4cHItIX4/KgorCQl1c2UgJ2lnbm9yZWNhc2UnICAgIG1hdGNoIGNhc2UJICAgaWdub3JlIGNhc2UgfgorZXF1YWwJCQk9PQkJPT0jCQk9PT8KK25vdCBlcXVhbAkJIT0JCSE9IwkJIT0/CitncmVhdGVyIHRoYW4JCT4JCT4jCQk+PworZ3JlYXRlciB0aGFuIG9yIGVxdWFsCT49CQk+PSMJCT49Pworc21hbGxlciB0aGFuCQk8CQk8IwkJPD8KK3NtYWxsZXIgdGhhbiBvciBlcXVhbAk8PQkJPD0jCQk8PT8KK3JlZ2V4cCBtYXRjaGVzCQk9fgkJPX4jCQk9fj8KK3JlZ2V4cCBkb2Vzbid0IG1hdGNoCSF+CQkhfiMJCSF+PworCitFeGFtcGxlczoKKyJhYmMiID09IyAiQWJjIgkgIGV2YWx1YXRlcyB0byAwCisiYWJjIiA9PT8gIkFiYyIJICBldmFsdWF0ZXMgdG8gMQorImFiYyIgPT0gIkFiYyIJICBldmFsdWF0ZXMgdG8gMSBpZiAnaWdub3JlY2FzZScgaXMgc2V0LCAwIG90aGVyd2lzZQorCitXaGVuIGNvbXBhcmluZyBhIFN0cmluZyB3aXRoIGEgTnVtYmVyLCB0aGUgU3RyaW5nIGlzIGNvbnZlcnRlZCB0byBhIE51bWJlciwKK2FuZCB0aGUgY29tcGFyaXNvbiBpcyBkb25lIG9uIE51bWJlcnMuICBUaGlzIG1lYW5zIHRoYXQgIjAgPT0gJ3gnIiBpcyBUUlVFLAorYmVjYXVzZSAneCcgY29udmVydGVkIHRvIGEgTnVtYmVyIGlzIHplcm8uCisKK1doZW4gY29tcGFyaW5nIHR3byBTdHJpbmdzLCB0aGlzIGlzIGRvbmUgd2l0aCBzdHJjbXAoKSBvciBzdHJpY21wKCkuICBUaGlzCityZXN1bHRzIGluIHRoZSBtYXRoZW1hdGljYWwgZGlmZmVyZW5jZSAoY29tcGFyaW5nIGJ5dGUgdmFsdWVzKSwgbm90CituZWNlc3NhcmlseSB0aGUgYWxwaGFiZXRpY2FsIGRpZmZlcmVuY2UgaW4gdGhlIGxvY2FsIGxhbmd1YWdlLgorCitXaGVuIHVzaW5nIHRoZSBvcGVyYXRvcnMgd2l0aCBhIHRyYWlsaW5nICcjIiwgb3IgdGhlIHNob3J0IHZlcnNpb24gYW5kCisnaWdub3JlY2FzZScgaXMgb2ZmLCB0aGUgY29tcGFyaW5nIGlzIGRvbmUgd2l0aCBzdHJjbXAoKS4KKworV2hlbiB1c2luZyB0aGUgb3BlcmF0b3JzIHdpdGggYSB0cmFpbGluZyAnPycsIG9yIHRoZSBzaG9ydCB2ZXJzaW9uIGFuZAorJ2lnbm9yZWNhc2UnIGlzIHNldCwgdGhlIGNvbXBhcmluZyBpcyBkb25lIHdpdGggc3RyaWNtcCgpLgorCitUaGUgIj1+IiBhbmQgIiF+IiBvcGVyYXRvcnMgbWF0Y2ggdGhlIGxlZnRoYW5kIGFyZ3VtZW50IHdpdGggdGhlIHJpZ2h0aGFuZAorYXJndW1lbnQsIHdoaWNoIGlzIHVzZWQgYXMgYSBwYXR0ZXJuLiAgU2VlIHxwYXR0ZXJufCBmb3Igd2hhdCBhIHBhdHRlcm4gaXMuCitUaGlzIG1hdGNoaW5nIGlzIGFsd2F5cyBkb25lIGxpa2UgJ21hZ2ljJyB3YXMgc2V0IGFuZCAnY3BvcHRpb25zJyBpcyBlbXB0eSwgbm8KK21hdHRlciB3aGF0IHRoZSBhY3R1YWwgdmFsdWUgb2YgJ21hZ2ljJyBvciAnY3BvcHRpb25zJyBpcy4gIFRoaXMgbWFrZXMgc2NyaXB0cworcG9ydGFibGUuICBUbyBhdm9pZCBiYWNrc2xhc2hlcyBpbiB0aGUgcmVnZXhwIHBhdHRlcm4gdG8gYmUgZG91YmxlZCwgdXNlIGEKK3NpbmdsZS1xdW90ZSBzdHJpbmcsIHNlZSB8bGl0ZXJhbC1zdHJpbmd8LgorU2luY2UgYSBzdHJpbmcgaXMgY29uc2lkZXJlZCB0byBiZSBhIHNpbmdsZSBsaW5lLCBhIG11bHRpLWxpbmUgcGF0dGVybgorKGNvbnRhaW5pbmcgXG4sIGJhY2tzbGFzaC1uKSB3aWxsIG5vdCBtYXRjaC4gIEhvd2V2ZXIsIGEgbGl0ZXJhbCBOTCBjaGFyYWN0ZXIKK2NhbiBiZSBtYXRjaGVkIGxpa2UgYW4gb3JkaW5hcnkgY2hhcmFjdGVyLiAgRXhhbXBsZXM6CisJImZvb1xuYmFyIiA9fiAiXG4iCWV2YWx1YXRlcyB0byAxCisJImZvb1xuYmFyIiA9fiAiXFxuIglldmFsdWF0ZXMgdG8gMAorCisKK2V4cHI1IGFuZCBleHByNgkJCQkJCSpleHByNSogKmV4cHI2KgorLS0tLS0tLS0tLS0tLS0tCitleHByNiArCSBleHByNiAuLgludW1iZXIgYWRkaXRpb24JCSpleHByLSsqCitleHByNiAtCSBleHByNiAuLgludW1iZXIgc3VidHJhY3Rpb24JKmV4cHItLSoKK2V4cHI2IC4JIGV4cHI2IC4uCXN0cmluZyBjb25jYXRlbmF0aW9uCSpleHByLS4qCisKK2V4cHI3ICoJIGV4cHI3IC4uCW51bWJlciBtdWx0aXBsaWNhdGlvbgkqZXhwci1zdGFyKgorZXhwcjcgLwkgZXhwcjcgLi4JbnVtYmVyIGRpdmlzaW9uCQkqZXhwci0vKgorZXhwcjcgJQkgZXhwcjcgLi4JbnVtYmVyIG1vZHVsbwkJKmV4cHItJSoKKworRm9yIGFsbCwgZXhjZXB0ICIuIiwgU3RyaW5ncyBhcmUgY29udmVydGVkIHRvIE51bWJlcnMuCisKK05vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAiKyIgYW5kICIuIjoKKwkiMTIzIiArICI0NTYiID0gNTc5CisJIjEyMyIgLiAiNDU2IiA9ICIxMjM0NTYiCisKK1doZW4gdGhlIHJpZ2h0aGFuZCBzaWRlIG9mICcvJyBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIDB4N2ZmZmZmZmYuCitXaGVuIHRoZSByaWdodGhhbmQgc2lkZSBvZiAnJScgaXMgemVybywgdGhlIHJlc3VsdCBpcyAwLgorCisKK2V4cHI3CQkJCQkJCSpleHByNyoKKy0tLS0tCishIGV4cHI3CQkJbG9naWNhbCBOT1QJCSpleHByLSEqCistIGV4cHI3CQkJdW5hcnkgbWludXMJCSpleHByLXVuYXJ5LS0qCisrIGV4cHI3CQkJdW5hcnkgcGx1cwkJKmV4cHItdW5hcnktKyoKKworRm9yICchJyBub24temVybyBiZWNvbWVzIHplcm8sIHplcm8gYmVjb21lcyBvbmUuCitGb3IgJy0nIHRoZSBzaWduIG9mIHRoZSBudW1iZXIgaXMgY2hhbmdlZC4KK0ZvciAnKycgdGhlIG51bWJlciBpcyB1bmNoYW5nZWQuCisKK0EgU3RyaW5nIHdpbGwgYmUgY29udmVydGVkIHRvIGEgTnVtYmVyIGZpcnN0LgorCitUaGVzZSB0aHJlZSBjYW4gYmUgcmVwZWF0ZWQgYW5kIG1peGVkLiAgRXhhbXBsZXM6CisJIS0xCSAgICA9PSAwCisJISE4CSAgICA9PSAxCisJLS05CSAgICA9PSA5CisKKworZXhwcjgJCQkJCQkJKmV4cHI4KgorLS0tLS0KK2V4cHI5W2V4cHIxXQkJaW5kZXggaW4gU3RyaW5nCQkqZXhwci1bXSogKkUxMTEqCisKK1RoaXMgcmVzdWx0cyBpbiBhIFN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBleHByMSd0aCBzaW5nbGUgYnl0ZSBmcm9tIGV4cHI5LgorZXhwcjkgaXMgdXNlZCBhcyBhIFN0cmluZywgZXhwcjEgYXMgYSBOdW1iZXIuICBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHdvcmsgZm9yCittdWx0aS1ieXRlIGVuY29kaW5ncy4KKworTm90ZSB0aGF0IGluZGV4IHplcm8gZ2l2ZXMgdGhlIGZpcnN0IGNoYXJhY3Rlci4gIFRoaXMgaXMgbGlrZSBpdCB3b3JrcyBpbiBDLgorQ2FyZWZ1bDogdGV4dCBjb2x1bW4gbnVtYmVycyBzdGFydCB3aXRoIG9uZSEgIEV4YW1wbGUsIHRvIGdldCB0aGUgY2hhcmFjdGVyCit1bmRlciB0aGUgY3Vyc29yOiA+CisJOmxldCBjID0gZ2V0bGluZShsaW5lKCIuIikpW2NvbCgiLiIpIC0gMV0KKworSWYgdGhlIGxlbmd0aCBvZiB0aGUgU3RyaW5nIGlzIGxlc3MgdGhhbiB0aGUgaW5kZXgsIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkKK1N0cmluZy4KKworCQkJCQkJKmV4cHI5KgorbnVtYmVyCistLS0tLS0KK251bWJlcgkJCW51bWJlciBjb25zdGFudAkJKmV4cHItbnVtYmVyKgorCitEZWNpbWFsLCBIZXhhZGVjaW1hbCAoc3RhcnRpbmcgd2l0aCAweCBvciAwWCksIG9yIE9jdGFsIChzdGFydGluZyB3aXRoIDApLgorCisKK3N0cmluZwkJCQkJCQkqZXhwci1zdHJpbmcqICpFMTE0KgorLS0tLS0tCisic3RyaW5nIgkJc3RyaW5nIGNvbnN0YW50CQkqZXhwci1xdW90ZSoKKworTm90ZSB0aGF0IGRvdWJsZSBxdW90ZXMgYXJlIHVzZWQuCisKK0Egc3RyaW5nIGNvbnN0YW50IGFjY2VwdHMgdGhlc2Ugc3BlY2lhbCBjaGFyYWN0ZXJzOgorXC4uLgl0aHJlZS1kaWdpdCBvY3RhbCBudW1iZXIgKGUuZy4sICJcMzE2IikKK1wuLgl0d28tZGlnaXQgb2N0YWwgbnVtYmVyIChtdXN0IGJlIGZvbGxvd2VkIGJ5IG5vbi1kaWdpdCkKK1wuCW9uZS1kaWdpdCBvY3RhbCBudW1iZXIgKG11c3QgYmUgZm9sbG93ZWQgYnkgbm9uLWRpZ2l0KQorXHguLglieXRlIHNwZWNpZmllZCB3aXRoIHR3byBoZXggbnVtYmVycyAoZS5nLiwgIlx4MWYiKQorXHguCWJ5dGUgc3BlY2lmaWVkIHdpdGggb25lIGhleCBudW1iZXIgKG11c3QgYmUgZm9sbG93ZWQgYnkgbm9uLWhleCBjaGFyKQorXFguLglzYW1lIGFzIFx4Li4KK1xYLglzYW1lIGFzIFx4LgorXHUuLi4uICBjaGFyYWN0ZXIgc3BlY2lmaWVkIHdpdGggdXAgdG8gNCBoZXggbnVtYmVycywgc3RvcmVkIGFjY29yZGluZyB0byB0aGUKKwljdXJyZW50IHZhbHVlIG9mICdlbmNvZGluZycgKGUuZy4sICJcdTAyYTQiKQorXFUuLi4uCXNhbWUgYXMgXHUuLi4uCitcYgliYWNrc3BhY2UgPEJTPgorXGUJZXNjYXBlIDxFc2M+CitcZglmb3JtZmVlZCA8RkY+CitcbgluZXdsaW5lIDxOTD4KK1xyCXJldHVybiA8Q1I+CitcdAl0YWIgPFRhYj4KK1xcCWJhY2tzbGFzaAorXCIJZG91YmxlIHF1b3RlCitcPHh4eD4JU3BlY2lhbCBrZXkgbmFtZWQgInh4eCIuICBlLmcuICJcPEMtVz4iIGZvciBDVFJMLVcuCisKK05vdGUgdGhhdCAiXDAwMCIgYW5kICJceDAwIiBmb3JjZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisKKworbGl0ZXJhbC1zdHJpbmcJCQkJCQkqbGl0ZXJhbC1zdHJpbmcqICpFMTE1KgorLS0tLS0tLS0tLS0tLS0tCisnc3RyaW5nJwkJbGl0ZXJhbCBzdHJpbmcgY29uc3RhbnQJCSpleHByLScqCisKK05vdGUgdGhhdCBzaW5nbGUgcXVvdGVzIGFyZSB1c2VkLgorCitUaGlzIHN0cmluZyBpcyB0YWtlbiBsaXRlcmFsbHkuICBObyBiYWNrc2xhc2hlcyBhcmUgcmVtb3ZlZCBvciBoYXZlIGEgc3BlY2lhbAorbWVhbmluZy4gIEEgbGl0ZXJhbC1zdHJpbmcgY2Fubm90IGNvbnRhaW4gYSBzaW5nbGUgcXVvdGUuICBVc2UgYSBub3JtYWwgc3RyaW5nCitmb3IgdGhhdC4KKworCitvcHRpb24JCQkJCQkqZXhwci1vcHRpb24qICpFMTEyKiAqRTExMyoKKy0tLS0tLQorJm9wdGlvbgkJCW9wdGlvbiB2YWx1ZSwgbG9jYWwgdmFsdWUgaWYgcG9zc2libGUKKyZnOm9wdGlvbgkJZ2xvYmFsIG9wdGlvbiB2YWx1ZQorJmw6b3B0aW9uCQlsb2NhbCBvcHRpb24gdmFsdWUKKworRXhhbXBsZXM6ID4KKwllY2hvICJ0YWJzdG9wIGlzICIgLiAmdGFic3RvcAorCWlmICZpbnNlcnRtb2RlCisKK0FueSBvcHRpb24gbmFtZSBjYW4gYmUgdXNlZCBoZXJlLiAgU2VlIHxvcHRpb25zfC4gIFdoZW4gdXNpbmcgdGhlIGxvY2FsIHZhbHVlCithbmQgdGhlcmUgaXMgbm8gYnVmZmVyLWxvY2FsIG9yIHdpbmRvdy1sb2NhbCB2YWx1ZSwgdGhlIGdsb2JhbCB2YWx1ZSBpcyB1c2VkCithbnl3YXkuCisKKworcmVnaXN0ZXIJCQkJCQkqZXhwci1yZWdpc3RlcioKKy0tLS0tLS0tCitAcgkJCWNvbnRlbnRzIG9mIHJlZ2lzdGVyICdyJworCitUaGUgcmVzdWx0IGlzIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgcmVnaXN0ZXIsIGFzIGEgc2luZ2xlIHN0cmluZy4KK05ld2xpbmVzIGFyZSBpbnNlcnRlZCB3aGVyZSByZXF1aXJlZC4gIFRvIGdldCB0aGUgY29udGVudHMgb2YgdGhlIHVubmFtZWQKK3JlZ2lzdGVyIHVzZSBAIiBvciBAQC4gIFRoZSAnPScgcmVnaXN0ZXIgY2FuIG5vdCBiZSB1c2VkIGhlcmUuICBTZWUKK3xyZWdpc3RlcnN8IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgYXZhaWxhYmxlIHJlZ2lzdGVycy4KKworCituZXN0aW5nCQkJCQkJCSpleHByLW5lc3RpbmcqICpFMTEwKgorLS0tLS0tLQorKGV4cHIxKQkJCW5lc3RlZCBleHByZXNzaW9uCisKKworZW52aXJvbm1lbnQgdmFyaWFibGUJCQkJCSpleHByLWVudioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiskVkFSCQkJZW52aXJvbm1lbnQgdmFyaWFibGUKKworVGhlIFN0cmluZyB2YWx1ZSBvZiBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGUuICBXaGVuIGl0IGlzIG5vdCBkZWZpbmVkLCB0aGUKK3Jlc3VsdCBpcyBhbiBlbXB0eSBzdHJpbmcuCisJCQkJCQkqZXhwci1lbnYtZXhwYW5kKgorTm90ZSB0aGF0IHRoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nICRWQVIgZGlyZWN0bHkgYW5kIHVzaW5nCitleHBhbmQoIiRWQVIiKS4gIFVzaW5nIGl0IGRpcmVjdGx5IHdpbGwgb25seSBleHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQKK2FyZSBrbm93biBpbnNpZGUgdGhlIGN1cnJlbnQgVmltIHNlc3Npb24uICBVc2luZyBleHBhbmQoKSB3aWxsIGZpcnN0IHRyeSB1c2luZwordGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBrbm93biBpbnNpZGUgdGhlIGN1cnJlbnQgVmltIHNlc3Npb24uICBJZiB0aGF0CitmYWlscywgYSBzaGVsbCB3aWxsIGJlIHVzZWQgdG8gZXhwYW5kIHRoZSB2YXJpYWJsZS4gIFRoaXMgY2FuIGJlIHNsb3csIGJ1dCBpdAorZG9lcyBleHBhbmQgYWxsIHZhcmlhYmxlcyB0aGF0IHRoZSBzaGVsbCBrbm93cyBhYm91dC4gIEV4YW1wbGU6ID4KKwk6ZWNobyAkdmVyc2lvbgorCTplY2hvIGV4cGFuZCgiJHZlcnNpb24iKQorVGhlIGZpcnN0IG9uZSBwcm9iYWJseSBkb2Vzbid0IGVjaG8gYW55dGhpbmcsIHRoZSBzZWNvbmQgZWNob2VzIHRoZSAkdmVyc2lvbgordmFyaWFibGUgKGlmIHlvdXIgc2hlbGwgc3VwcG9ydHMgaXQpLgorCisKK2ludGVybmFsIHZhcmlhYmxlCQkJCQkqZXhwci12YXJpYWJsZSoKKy0tLS0tLS0tLS0tLS0tLS0tCit2YXJpYWJsZQkJaW50ZXJuYWwgdmFyaWFibGUKK1NlZSBiZWxvdyB8aW50ZXJuYWwtdmFyaWFibGVzfC4KKworCitmdW5jdGlvbiBjYWxsCQkqZXhwci1mdW5jdGlvbiogKkUxMTYqICpFMTE3KiAqRTExOCogKkUxMTkqICpFMTIwKgorLS0tLS0tLS0tLS0tLQorZnVuY3Rpb24oZXhwcjEsIC4uLikJZnVuY3Rpb24gY2FsbAorU2VlIGJlbG93IHxmdW5jdGlvbnN8LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gSW50ZXJuYWwgdmFyaWFibGUJCQkJKmludGVybmFsLXZhcmlhYmxlcyogKkUxMjEqCisJCQkJCQkJCQkqRTQ2MSoKK0FuIGludGVybmFsIHZhcmlhYmxlIG5hbWUgY2FuIGJlIG1hZGUgdXAgb2YgbGV0dGVycywgZGlnaXRzIGFuZCAnXycuICBCdXQgaXQKK2Nhbm5vdCBzdGFydCB3aXRoIGEgZGlnaXQuICBJdCdzIGFsc28gcG9zc2libGUgdG8gdXNlIGN1cmx5IGJyYWNlcywgc2VlCit8Y3VybHktYnJhY2VzLW5hbWVzfC4KKworQW4gaW50ZXJuYWwgdmFyaWFibGUgaXMgY3JlYXRlZCB3aXRoIHRoZSAiOmxldCIgY29tbWFuZCB8OmxldHwuCitBbiBpbnRlcm5hbCB2YXJpYWJsZSBpcyBkZXN0cm95ZWQgd2l0aCB0aGUgIjp1bmxldCIgY29tbWFuZCB8OnVubGV0fC4KK1VzaW5nIGEgbmFtZSB0aGF0IGlzbid0IGFuIGludGVybmFsIHZhcmlhYmxlLCBvciBhbiBpbnRlcm5hbCB2YXJpYWJsZSB0aGF0IGhhcworYmVlbiBkZXN0cm95ZWQsIHJlc3VsdHMgaW4gYW4gZXJyb3IuCisKK1RoZXJlIGFyZSBzZXZlcmFsIG5hbWUgc3BhY2VzIGZvciB2YXJpYWJsZXMuICBXaGljaCBvbmUgaXMgdG8gYmUgdXNlZCBpcworc3BlY2lmaWVkIGJ5IHdoYXQgaXMgcHJlcGVuZGVkOgorCisJCShub3RoaW5nKSBJbiBhIGZ1bmN0aW9uOiBsb2NhbCB0byBhIGZ1bmN0aW9uOyBvdGhlcndpc2U6IGdsb2JhbAorfGJ1ZmZlci12YXJpYWJsZXwgICAgYjoJICBMb2NhbCB0byB0aGUgY3VycmVudCBidWZmZXIuCit8d2luZG93LXZhcmlhYmxlfCAgICB3OgkgIExvY2FsIHRvIHRoZSBjdXJyZW50IHdpbmRvdy4KK3xnbG9iYWwtdmFyaWFibGV8ICAgIGc6CSAgR2xvYmFsLgorfGxvY2FsLXZhcmlhYmxlfCAgICAgbDoJICBMb2NhbCB0byBhIGZ1bmN0aW9uLgorfHNjcmlwdC12YXJpYWJsZXwgICAgczoJICBMb2NhbCB0byBhIHw6c291cmNlfCdlZCBWaW0gc2NyaXB0LgorfGZ1bmN0aW9uLWFyZ3VtZW50fCAgYToJICBGdW5jdGlvbiBhcmd1bWVudCAob25seSBpbnNpZGUgYSBmdW5jdGlvbikuCit8dmltLXZhcmlhYmxlfCAgICAgICB2OgkgIEdsb2JhbCwgcHJlZGVmaW5lZCBieSBWaW0uCisKKwkJCQkJCSpidWZmZXItdmFyaWFibGUqICpiOnZhcioKK0EgdmFyaWFibGUgbmFtZSB0aGF0IGlzIHByZWNlZGVkIHdpdGggImI6IiBpcyBsb2NhbCB0byB0aGUgY3VycmVudCBidWZmZXIuCitUaHVzIHlvdSBjYW4gaGF2ZSBzZXZlcmFsICJiOmZvbyIgdmFyaWFibGVzLCBvbmUgZm9yIGVhY2ggYnVmZmVyLgorVGhpcyBraW5kIG9mIHZhcmlhYmxlIGlzIGRlbGV0ZWQgd2hlbiB0aGUgYnVmZmVyIGlzIHdpcGVkIG91dCBvciBkZWxldGVkIHdpdGgKK3w6YmRlbGV0ZXwuCisKK09uZSBsb2NhbCBidWZmZXIgdmFyaWFibGUgaXMgcHJlZGVmaW5lZDoKKwkJCQkJKmI6Y2hhbmdlZHRpY2stdmFyaWFibGUqICpjaGFuZ2V0aWNrKgorYjpjaGFuZ2VkdGljawlUaGUgdG90YWwgbnVtYmVyIG9mIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLiAgSXQgaXMKKwkJaW5jcmVtZW50ZWQgZm9yIGVhY2ggY2hhbmdlLiAgQW4gdW5kbyBjb21tYW5kIGlzIGFsc28gYSBjaGFuZ2UKKwkJaW4gdGhpcyBjYXNlLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGFuIGFjdGlvbiBvbmx5IHdoZW4KKwkJdGhlIGJ1ZmZlciBoYXMgY2hhbmdlZC4gIEV4YW1wbGU6ID4KKwkJICAgIDppZiBteV9jaGFuZ2VkdGljayAhPSBiOmNoYW5nZWR0aWNrCisJCSAgICA6ICAgbGV0IG15X2NoYW5nZWR0aWNrID0gYjpjaGFuZ2VkdGljaworCQkgICAgOiAgIGNhbGwgTXlfVXBkYXRlKCkKKwkJICAgIDplbmRpZgorPAorCQkJCQkJKndpbmRvdy12YXJpYWJsZSogKnc6dmFyKgorQSB2YXJpYWJsZSBuYW1lIHRoYXQgaXMgcHJlY2VkZWQgd2l0aCAidzoiIGlzIGxvY2FsIHRvIHRoZSBjdXJyZW50IHdpbmRvdy4gIEl0CitpcyBkZWxldGVkIHdoZW4gdGhlIHdpbmRvdyBpcyBjbG9zZWQuCisKKwkJCQkJCSpnbG9iYWwtdmFyaWFibGUqICpnOnZhcioKK0luc2lkZSBmdW5jdGlvbnMgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgd2l0aCAiZzoiLiAgT21pdHRpbmcgdGhpcyB3aWxsCithY2Nlc3MgYSB2YXJpYWJsZSBsb2NhbCB0byBhIGZ1bmN0aW9uLiAgQnV0ICJnOiIgY2FuIGFsc28gYmUgdXNlZCBpbiBhbnkgb3RoZXIKK3BsYWNlIGlmIHlvdSBsaWtlLgorCisJCQkJCQkqbG9jYWwtdmFyaWFibGUqICpsOnZhcioKK0luc2lkZSBmdW5jdGlvbnMgbG9jYWwgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCB3aXRob3V0IHByZXBlbmRpbmcgYW55dGhpbmcuCitCdXQgeW91IGNhbiBhbHNvIHByZXBlbmQgImw6IiBpZiB5b3UgbGlrZS4KKworCQkJCQkJKnNjcmlwdC12YXJpYWJsZSogKnM6dmFyKgorSW4gYSBWaW0gc2NyaXB0IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoICJzOiIgY2FuIGJlIHVzZWQuICBUaGV5IGNhbm5vdCBiZQorYWNjZXNzZWQgZnJvbSBvdXRzaWRlIG9mIHRoZSBzY3JpcHRzLCB0aHVzIGFyZSBsb2NhbCB0byB0aGUgc2NyaXB0LgorCitUaGV5IGNhbiBiZSB1c2VkIGluOgorLSBjb21tYW5kcyBleGVjdXRlZCB3aGlsZSB0aGUgc2NyaXB0IGlzIHNvdXJjZWQKKy0gZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIHNjcmlwdAorLSBhdXRvY29tbWFuZHMgZGVmaW5lZCBpbiB0aGUgc2NyaXB0CistIGZ1bmN0aW9ucyBhbmQgYXV0b2NvbW1hbmRzIGRlZmluZWQgaW4gZnVuY3Rpb25zIGFuZCBhdXRvY29tbWFuZHMgd2hpY2ggd2VyZQorICBkZWZpbmVkIGluIHRoZSBzY3JpcHQgKHJlY3Vyc2l2ZWx5KQorLSB1c2VyIGRlZmluZWQgY29tbWFuZHMgZGVmaW5lZCBpbiB0aGUgc2NyaXB0CitUaHVzIG5vdCBpbjoKKy0gb3RoZXIgc2NyaXB0cyBzb3VyY2VkIGZyb20gdGhpcyBvbmUKKy0gbWFwcGluZ3MKKy0gZXRjLgorCitzY3JpcHQgdmFyaWFibGVzIGNhbiBiZSB1c2VkIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGdsb2JhbCB2YXJpYWJsZSBuYW1lcy4KK1Rha2UgdGhpcyBleGFtcGxlOgorCisJbGV0IHM6Y291bnRlciA9IDAKKwlmdW5jdGlvbiBNeUNvdW50ZXIoKQorCSAgbGV0IHM6Y291bnRlciA9IHM6Y291bnRlciArIDEKKwkgIGVjaG8gczpjb3VudGVyCisJZW5kZnVuY3Rpb24KKwljb21tYW5kIFRpY2sgY2FsbCBNeUNvdW50ZXIoKQorCitZb3UgY2FuIG5vdyBpbnZva2UgIlRpY2siIGZyb20gYW55IHNjcmlwdCwgYW5kIHRoZSAiczpjb3VudGVyIiB2YXJpYWJsZSBpbgordGhhdCBzY3JpcHQgd2lsbCBub3QgYmUgY2hhbmdlZCwgb25seSB0aGUgInM6Y291bnRlciIgaW4gdGhlIHNjcmlwdCB3aGVyZQorIlRpY2siIHdhcyBkZWZpbmVkIGlzIHVzZWQuCisKK0Fub3RoZXIgZXhhbXBsZSB0aGF0IGRvZXMgdGhlIHNhbWU6ID4KKworCWxldCBzOmNvdW50ZXIgPSAwCisJY29tbWFuZCBUaWNrIGxldCBzOmNvdW50ZXIgPSBzOmNvdW50ZXIgKyAxIHwgZWNobyBzOmNvdW50ZXIKKworV2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gYW5kIGludm9raW5nIGEgdXNlci1kZWZpbmVkIGNvbW1hbmQsIHRoZSBjb250ZXh0IGZvcgorc2NyaXB0IHZhcmlhbGJlcyBpcyBzZXQgdG8gdGhlIHNjcmlwdCB3aGVyZSB0aGUgZnVuY3Rpb24gb3IgY29tbWFuZCB3YXMKK2RlZmluZWQuCisKK1RoZSBzY3JpcHQgdmFyaWFibGVzIGFyZSBhbHNvIGF2YWlsYWJsZSB3aGVuIGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbnNpZGUgYQorZnVuY3Rpb24gdGhhdCBpcyBkZWZpbmVkIGluIGEgc2NyaXB0LiAgRXhhbXBsZTogPgorCisJbGV0IHM6Y291bnRlciA9IDAKKwlmdW5jdGlvbiBTdGFydENvdW50aW5nKGluY3IpCisJICBpZiBhOmluY3IKKwkgICAgZnVuY3Rpb24gTXlDb3VudGVyKCkKKwkgICAgICBsZXQgczpjb3VudGVyID0gczpjb3VudGVyICsgMQorCSAgICBlbmRmdW5jdGlvbgorCSAgZWxzZQorCSAgICBmdW5jdGlvbiBNeUNvdW50ZXIoKQorCSAgICAgIGxldCBzOmNvdW50ZXIgPSBzOmNvdW50ZXIgLSAxCisJICAgIGVuZGZ1bmN0aW9uCisJICBlbmRpZgorCWVuZGZ1bmN0aW9uCisKK1RoaXMgZGVmaW5lcyB0aGUgTXlDb3VudGVyKCkgZnVuY3Rpb24gZWl0aGVyIGZvciBjb3VudGluZyB1cCBvciBjb3VudGluZyBkb3duCit3aGVuIGNhbGxpbmcgU3RhcnRDb3VudGluZygpLiAgSXQgZG9lc24ndCBtYXR0ZXIgZnJvbSB3aGVyZSBTdGFydENvdW50aW5nKCkgaXMKK2NhbGxlZCwgdGhlIHM6Y291bnRlciB2YXJpYWJsZSB3aWxsIGJlIGFjY2Vzc2libGUgaW4gTXlDb3VudGVyKCkuCisKK1doZW4gdGhlIHNhbWUgc2NyaXB0IGlzIHNvdXJjZWQgYWdhaW4gaXQgd2lsbCB1c2UgdGhlIHNhbWUgc2NyaXB0IHZhcmlhYmxlcy4KK1RoZXkgd2lsbCByZW1haW4gdmFsaWQgYXMgbG9uZyBhcyBWaW0gaXMgcnVubmluZy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KK21haW50YWluIGEgY291bnRlcjogPgorCisJaWYgIWV4aXN0cygiczpjb3VudGVyIikKKwkgIGxldCBzOmNvdW50ZXIgPSAxCisJICBlY2hvICJzY3JpcHQgZXhlY3V0ZWQgZm9yIHRoZSBmaXJzdCB0aW1lIgorCWVsc2UKKwkgIGxldCBzOmNvdW50ZXIgPSBzOmNvdW50ZXIgKyAxCisJICBlY2hvICJzY3JpcHQgZXhlY3V0ZWQgIiAuIHM6Y291bnRlciAuICIgdGltZXMgbm93IgorCWVuZGlmCisKK05vdGUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgZmlsZXR5cGUgcGx1Z2lucyBkb24ndCBnZXQgYSBkaWZmZXJlbnQgc2V0IG9mIHNjcmlwdAordmFyaWFibGVzIGZvciBlYWNoIGJ1ZmZlci4gIFVzZSBsb2NhbCBidWZmZXIgdmFyaWFibGVzIGluc3RlYWQgfGI6dmFyfC4KKworCitQcmVkZWZpbmVkIFZpbSB2YXJpYWJsZXM6CQkJKnZpbS12YXJpYWJsZSogKnY6dmFyKgorCisJCQkqdjpjaGFyY29udmVydF9mcm9tKiAqY2hhcmNvbnZlcnRfZnJvbS12YXJpYWJsZSoKK3Y6Y2hhcmNvbnZlcnRfZnJvbQorCQlUaGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIGEgZmlsZSB0byBiZSBjb252ZXJ0ZWQuCisJCU9ubHkgdmFsaWQgd2hpbGUgZXZhbHVhdGluZyB0aGUgJ2NoYXJjb252ZXJ0JyBvcHRpb24uCisKKwkJCSp2OmNoYXJjb252ZXJ0X3RvKiAqY2hhcmNvbnZlcnRfdG8tdmFyaWFibGUqCit2OmNoYXJjb252ZXJ0X3RvCisJCVRoZSBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgYSBmaWxlIGFmdGVyIGNvbnZlcnNpb24uCisJCU9ubHkgdmFsaWQgd2hpbGUgZXZhbHVhdGluZyB0aGUgJ2NoYXJjb252ZXJ0JyBvcHRpb24uCisKKwkJCQkJKnY6Y21kYXJnKiAqY21kYXJnLXZhcmlhYmxlKgordjpjbWRhcmcJVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGZvciB0d28gcHVycG9zZXM6CisJCTEuIFRoZSBleHRyYSBhcmd1bWVudHMgZ2l2ZW4gdG8gYSBmaWxlIHJlYWQvd3JpdGUgY29tbWFuZC4KKwkJICAgQ3VycmVudGx5IHRoZXNlIGFyZSAiKytlbmM9IiBhbmQgIisrZmY9Ii4gIFRoaXMgdmFyaWFibGUgaXMKKwkJICAgc2V0IGJlZm9yZSBhbiBhdXRvY29tbWFuZCBldmVudCBmb3IgYSBmaWxlIHJlYWQvd3JpdGUKKwkJICAgY29tbWFuZCBpcyB0cmlnZ2VyZWQuICBUaGVyZSBpcyBhIGxlYWRpbmcgc3BhY2UgdG8gbWFrZSBpdAorCQkgICBwb3NzaWJsZSB0byBhcHBlbmQgdGhpcyB2YXJpYWJsZSBkaXJlY3RseSBhZnRlciB0aGUKKwkJICAgcmVhZC93cml0ZSBjb21tYW5kLiAgTm90ZTogVGhlICIrY21kIiBhcmd1bWVudCBpc24ndAorCQkgICBpbmNsdWRlZCBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYW55d2F5LgorCQkyLiBXaGVuIHByaW50aW5nIGEgUG9zdFNjcmlwdCBmaWxlIHdpdGggIjpoYXJkY29weSIgdGhpcyBpcworCQkgICB0aGUgYXJndW1lbnQgZm9yIHRoZSAiOmhhcmRjb3B5IiBjb21tYW5kLiAgVGhpcyBjYW4gYmUgdXNlZAorCQkgICBpbiAncHJpbnRleHByJy4KKworCQkJCQkqdjpjbWRiYW5nKiAqY21kYmFuZy12YXJpYWJsZSoKK3Y6Y21kYmFuZwlTZXQgbGlrZSB2OmNtZGFyZyBmb3IgYSBmaWxlIHJlYWQvd3JpdGUgY29tbWFuZC4gIFdoZW4gYSAiISIKKwkJd2FzIHVzZWQgdGhlIHZhbHVlIGlzIDEsIG90aGVyd2lzZSBpdCBpcyAwLiAgTm90ZSB0aGF0IHRoaXMKKwkJY2FuIG9ubHkgYmUgdXNlZCBpbiBhdXRvY29tbWFuZHMuICBGb3IgdXNlciBjb21tYW5kcyB8PGJhbmc+fAorCQljYW4gYmUgdXNlZC4KKworCQkJCQkqdjpjb3VudCogKmNvdW50LXZhcmlhYmxlKgordjpjb3VudAkJVGhlIGNvdW50IGdpdmVuIGZvciB0aGUgbGFzdCBOb3JtYWwgbW9kZSBjb21tYW5kLiAgQ2FuIGJlIHVzZWQKKwkJdG8gZ2V0IHRoZSBjb3VudCBiZWZvcmUgYSBtYXBwaW5nLiAgUmVhZC1vbmx5LiAgRXhhbXBsZTogPgorCTptYXAgX3ggOjxDLVU+ZWNobyAidGhlIGNvdW50IGlzICIgLiB2OmNvdW50PENSPgorPAkJTm90ZTogVGhlIDxDLVU+IGlzIHJlcXVpcmVkIHRvIHJlbW92ZSB0aGUgbGluZSByYW5nZSB0aGF0IHlvdQorCQlnZXQgd2hlbiB0eXBpbmcgJzonIGFmdGVyIGEgY291bnQuCisJCSJjb3VudCIgYWxzbyB3b3JrcywgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisJCQkJCSp2OmNvdW50MSogKmNvdW50MS12YXJpYWJsZSoKK3Y6Y291bnQxCUp1c3QgbGlrZSAidjpjb3VudCIsIGJ1dCBkZWZhdWx0cyB0byBvbmUgd2hlbiBubyBjb3VudCBpcworCQl1c2VkLgorCisJCQkJCQkqdjpjdHlwZSogKmN0eXBlLXZhcmlhYmxlKgordjpjdHlwZQkJVGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgZm9yIGNoYXJhY3RlcnMgb2YgdGhlIHJ1bnRpbWUKKwkJZW52aXJvbm1lbnQuICBUaGlzIGFsbG93cyBWaW0gc2NyaXB0cyB0byBiZSBhd2FyZSBvZiB0aGUKKwkJY3VycmVudCBsb2NhbGUgZW5jb2RpbmcuICBUZWNobmljYWw6IGl0J3MgdGhlIHZhbHVlIG9mCisJCUxDX0NUWVBFLiAgV2hlbiBub3QgdXNpbmcgYSBsb2NhbGUgdGhlIHZhbHVlIGlzICJDIi4KKwkJVGhpcyB2YXJpYWJsZSBjYW4gbm90IGJlIHNldCBkaXJlY3RseSwgdXNlIHRoZSB8Omxhbmd1YWdlfAorCQljb21tYW5kLgorCQlTZWUgfG11bHRpLWxhbmd8LgorCisJCQkJCSp2OmR5aW5nKiAqZHlpbmctdmFyaWFibGUqCit2OmR5aW5nCQlOb3JtYWxseSB6ZXJvLiAgV2hlbiBhIGRlYWRseSBzaWduYWwgaXMgY2F1Z2h0IGl0J3Mgc2V0IHRvCisJCW9uZS4gIFdoZW4gbXVsdGlwbGUgc2lnbmFscyBhcmUgY2F1Z2h0IHRoZSBudW1iZXIgaW5jcmVhc2VzLgorCQlDYW4gYmUgdXNlZCBpbiBhbiBhdXRvY29tbWFuZCB0byBjaGVjayBpZiBWaW0gZGlkbid0CisJCXRlcm1pbmF0ZSBub3JtYWxseS4ge29ubHkgd29ya3Mgb24gVW5peH0KKwkJRXhhbXBsZTogPgorCTphdSBWaW1MZWF2ZSAqIGlmIHY6ZHlpbmcgfCBlY2hvICJcbkFBQUFhYWFhcnJyZ2dnaGhoaCEhIVxuIiB8IGVuZGlmCis8CisJCQkJCSp2OmVycm1zZyogKmVycm1zZy12YXJpYWJsZSoKK3Y6ZXJybXNnCUxhc3QgZ2l2ZW4gZXJyb3IgbWVzc2FnZS4gIEl0J3MgYWxsb3dlZCB0byBzZXQgdGhpcyB2YXJpYWJsZS4KKwkJRXhhbXBsZTogPgorCTpsZXQgdjplcnJtc2cgPSAiIgorCTpzaWxlbnQhIG5leHQKKwk6aWYgdjplcnJtc2cgIT0gIiIKKwk6ICAuLi4gaGFuZGxlIGVycm9yCis8CQkiZXJybXNnIiBhbHNvIHdvcmtzLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKwkJCQkJKnY6ZXhjZXB0aW9uKiAqZXhjZXB0aW9uLXZhcmlhYmxlKgordjpleGNlcHRpb24JVGhlIHZhbHVlIG9mIHRoZSBleGNlcHRpb24gbW9zdCByZWNlbnRseSBjYXVnaHQgYW5kIG5vdAorCQlmaW5pc2hlZC4gIFNlZSBhbHNvIHx2OnRocm93cG9pbnR8IGFuZCB8dGhyb3ctdmFyaWFibGVzfC4KKwkJRXhhbXBsZTogPgorCTp0cnkKKwk6ICB0aHJvdyAib29wcyIKKwk6Y2F0Y2ggLy4qLworCTogIGVjaG8gImNhdWdodCIgdjpleGNlcHRpb24KKwk6ZW5kdHJ5Cis8CQlPdXRwdXQ6ICJjYXVnaHQgb29wcyIuCisKKwkJCQkJKnY6Zm5hbWVfaW4qICpmbmFtZV9pbi12YXJpYWJsZSoKK3Y6Zm5hbWVfaW4JVGhlIG5hbWUgb2YgdGhlIGlucHV0IGZpbGUuICBPbmx5IHZhbGlkIHdoaWxlIGV2YWx1YXRpbmc6CisJCQlvcHRpb24JCXVzZWQgZm9yIH4KKwkJCSdjaGFyY29udmVydCcJZmlsZSB0byBiZSBjb252ZXJ0ZWQKKwkJCSdkaWZmZXhwcicJb3JpZ2luYWwgZmlsZQorCQkJJ3BhdGNoZXhwcicJb3JpZ2luYWwgZmlsZQorCQkJJ3ByaW50ZXhwcicJZmlsZSB0byBiZSBwcmludGVkCisKKwkJCQkJKnY6Zm5hbWVfb3V0KiAqZm5hbWVfb3V0LXZhcmlhYmxlKgordjpmbmFtZV9vdXQJVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlLiAgT25seSB2YWxpZCB3aGlsZQorCQlldmFsdWF0aW5nOgorCQkJb3B0aW9uCQl1c2VkIGZvciB+CisJCQknY2hhcmNvbnZlcnQnCXJlc3VsdGluZyBjb252ZXJ0ZWQgZmlsZSAoKikKKwkJCSdkaWZmZXhwcicJb3V0cHV0IG9mIGRpZmYKKwkJCSdwYXRjaGV4cHInCXJlc3VsdGluZyBwYXRjaGVkIGZpbGUKKwkJKCopIFdoZW4gZG9pbmcgY29udmVyc2lvbiBmb3IgYSB3cml0ZSBjb21tYW5kIChlLmcuLCAiOncKKwkJZmlsZSIpIGl0IHdpbGwgYmUgZXF1YWwgdG8gdjpmbmFtZV9pbi4gIFdoZW4gZG9pbmcgY29udmVyc2lvbgorCQlmb3IgYSByZWFkIGNvbW1hbmQgKGUuZy4sICI6ZSBmaWxlIikgaXQgd2lsbCBiZSBhIHRlbXBvcmFyeQorCQlmaWxlIGFuZCBkaWZmZXJlbnQgZnJvbSB2OmZuYW1lX2luLgorCisJCQkJCSp2OmZuYW1lX25ldyogKmZuYW1lX25ldy12YXJpYWJsZSoKK3Y6Zm5hbWVfbmV3CVRoZSBuYW1lIG9mIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIE9ubHkgdmFsaWQgd2hpbGUKKwkJZXZhbHVhdGluZyAnZGlmZmV4cHInLgorCisJCQkJCSp2OmZuYW1lX2RpZmYqICpmbmFtZV9kaWZmLXZhcmlhYmxlKgordjpmbmFtZV9kaWZmCVRoZSBuYW1lIG9mIHRoZSBkaWZmIChwYXRjaCkgZmlsZS4gIE9ubHkgdmFsaWQgd2hpbGUKKwkJZXZhbHVhdGluZyAncGF0Y2hleHByJy4KKworCQkJCQkqdjpmb2xkZGFzaGVzKiAqZm9sZGRhc2hlcy12YXJpYWJsZSoKK3Y6Zm9sZGRhc2hlcwlVc2VkIGZvciAnZm9sZHRleHQnOiBkYXNoZXMgcmVwcmVzZW50aW5nIGZvbGRsZXZlbCBvZiBhIGNsb3NlZAorCQlmb2xkLgorCQlSZWFkLW9ubHkuIHxmb2xkLWZvbGR0ZXh0fAorCisJCQkJCSp2OmZvbGRsZXZlbCogKmZvbGRsZXZlbC12YXJpYWJsZSoKK3Y6Zm9sZGxldmVsCVVzZWQgZm9yICdmb2xkdGV4dCc6IGZvbGRsZXZlbCBvZiBjbG9zZWQgZm9sZC4KKwkJUmVhZC1vbmx5LiB8Zm9sZC1mb2xkdGV4dHwKKworCQkJCQkqdjpmb2xkZW5kKiAqZm9sZGVuZC12YXJpYWJsZSoKK3Y6Zm9sZGVuZAlVc2VkIGZvciAnZm9sZHRleHQnOiBsYXN0IGxpbmUgb2YgY2xvc2VkIGZvbGQuCisJCVJlYWQtb25seS4gfGZvbGQtZm9sZHRleHR8CisKKwkJCQkJKnY6Zm9sZHN0YXJ0KiAqZm9sZHN0YXJ0LXZhcmlhYmxlKgordjpmb2xkc3RhcnQJVXNlZCBmb3IgJ2ZvbGR0ZXh0JzogZmlyc3QgbGluZSBvZiBjbG9zZWQgZm9sZC4KKwkJUmVhZC1vbmx5LiB8Zm9sZC1mb2xkdGV4dHwKKworCQkJCQkJKnY6bGFuZyogKmxhbmctdmFyaWFibGUqCit2OmxhbmcJCVRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIGZvciBtZXNzYWdlcyBvZiB0aGUgcnVudGltZQorCQllbnZpcm9ubWVudC4gIFRoaXMgYWxsb3dzIFZpbSBzY3JpcHRzIHRvIGJlIGF3YXJlIG9mIHRoZQorCQljdXJyZW50IGxhbmd1YWdlLiAgVGVjaG5pY2FsOiBpdCdzIHRoZSB2YWx1ZSBvZiBMQ19NRVNTQUdFUy4KKwkJVGhlIHZhbHVlIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisJCVRoaXMgdmFyaWFibGUgY2FuIG5vdCBiZSBzZXQgZGlyZWN0bHksIHVzZSB0aGUgfDpsYW5ndWFnZXwKKwkJY29tbWFuZC4KKwkJSXQgY2FuIGJlIGRpZmZlcmVudCBmcm9tIHx2OmN0eXBlfCB3aGVuIG1lc3NhZ2VzIGFyZSBkZXNpcmVkCisJCWluIGEgZGlmZmVyZW50IGxhbmd1YWdlIHRoYW4gd2hhdCBpcyB1c2VkIGZvciBjaGFyYWN0ZXIKKwkJZW5jb2RpbmcuICBTZWUgfG11bHRpLWxhbmd8LgorCisJCQkJCQkqdjpsY190aW1lKiAqbGNfdGltZS12YXJpYWJsZSoKK3Y6bGNfdGltZQlUaGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyBmb3IgdGltZSBtZXNzYWdlcyBvZiB0aGUgcnVudGltZQorCQllbnZpcm9ubWVudC4gIFRoaXMgYWxsb3dzIFZpbSBzY3JpcHRzIHRvIGJlIGF3YXJlIG9mIHRoZQorCQljdXJyZW50IGxhbmd1YWdlLiAgVGVjaG5pY2FsOiBpdCdzIHRoZSB2YWx1ZSBvZiBMQ19USU1FLgorCQlUaGlzIHZhcmlhYmxlIGNhbiBub3QgYmUgc2V0IGRpcmVjdGx5LCB1c2UgdGhlIHw6bGFuZ3VhZ2V8CisJCWNvbW1hbmQuICBTZWUgfG11bHRpLWxhbmd8LgorCisJCQkJCQkqdjpsbnVtKiAqbG51bS12YXJpYWJsZSoKK3Y6bG51bQkJTGluZSBudW1iZXIgZm9yIHRoZSAnZm9sZGV4cHInIGFuZCAnaW5kZW50ZXhwcicgZXhwcmVzc2lvbnMuCisJCU9ubHkgdmFsaWQgd2hpbGUgb25lIG9mIHRoZXNlIGV4cHJlc3Npb25zIGlzIGJlaW5nIGV2YWx1YXRlZC4KKwkJUmVhZC1vbmx5LiB8Zm9sZC1leHByfCAnaW5kZW50ZXhwcicKKworCQkJCQkqdjpwcmV2Y291bnQqICpwcmV2Y291bnQtdmFyaWFibGUqCit2OnByZXZjb3VudAlUaGUgY291bnQgZ2l2ZW4gZm9yIHRoZSBsYXN0IGJ1dCBvbmUgTm9ybWFsIG1vZGUgY29tbWFuZC4KKwkJVGhpcyBpcyB0aGUgdjpjb3VudCB2YWx1ZSBvZiB0aGUgcHJldmlvdXMgY29tbWFuZC4gIFVzZWZ1bCBpZgorCQl5b3Ugd2FudCB0byBjYW5jZWwgVmlzdWFsIG1vZGUgYW5kIHRoZW4gdXNlIHRoZSBjb3VudC4gPgorCQkJOnZtYXAgJSA8RXNjPjpjYWxsIE15RmlsdGVyKHY6cHJldmNvdW50KTxDUj4KKzwJCVJlYWQtb25seS4KKworCQkJCQkqdjpwcm9nbmFtZSogKnByb2duYW1lLXZhcmlhYmxlKgordjpwcm9nbmFtZQlDb250YWlucyB0aGUgbmFtZSAod2l0aCBwYXRoIHJlbW92ZWQpIHdpdGggd2hpY2ggVmltIHdhcworCQlpbnZva2VkLiAgQWxsb3dzIHlvdSB0byBkbyBzcGVjaWFsIGluaXRpYWxpc2F0aW9ucyBmb3IgInZpZXciLAorCQkiZXZpbSIgZXRjLiwgb3IgYW55IG90aGVyIG5hbWUgeW91IG1pZ2h0IHN5bWxpbmsgdG8gVmltLgorCQlSZWFkLW9ubHkuCisKKwkJCQkJKnY6cmVnaXN0ZXIqICpyZWdpc3Rlci12YXJpYWJsZSoKK3Y6cmVnaXN0ZXIJVGhlIG5hbWUgb2YgdGhlIHJlZ2lzdGVyIHN1cHBsaWVkIHRvIHRoZSBsYXN0IG5vcm1hbCBtb2RlCisJCWNvbW1hbmQuICBFbXB0eSBpZiBub25lIHdlcmUgc3VwcGxpZWQuIHxnZXRyZWcoKXwgfHNldHJlZygpfAorCisJCQkJCSp2OnNlcnZlcm5hbWUqICpzZXJ2ZXJuYW1lLXZhcmlhYmxlKgordjpzZXJ2ZXJuYW1lCVRoZSByZXN1bHRpbmcgcmVnaXN0ZXJlZCB8eDExLWNsaWVudHNlcnZlcnwgbmFtZSBpZiBhbnkuCisJCVJlYWQtb25seS4KKworCQkJCQkqdjpzaGVsbF9lcnJvciogKnNoZWxsX2Vycm9yLXZhcmlhYmxlKgordjpzaGVsbF9lcnJvcglSZXN1bHQgb2YgdGhlIGxhc3Qgc2hlbGwgY29tbWFuZC4gIFdoZW4gbm9uLXplcm8sIHRoZSBsYXN0CisJCXNoZWxsIGNvbW1hbmQgaGFkIGFuIGVycm9yLiAgV2hlbiB6ZXJvLCB0aGVyZSB3YXMgbm8gcHJvYmxlbS4KKwkJVGhpcyBvbmx5IHdvcmtzIHdoZW4gdGhlIHNoZWxsIHJldHVybnMgdGhlIGVycm9yIGNvZGUgdG8gVmltLgorCQlUaGUgdmFsdWUgLTEgaXMgb2Z0ZW4gdXNlZCB3aGVuIHRoZSBjb21tYW5kIGNvdWxkIG5vdCBiZQorCQlleGVjdXRlZC4gIFJlYWQtb25seS4KKwkJRXhhbXBsZTogPgorCTohbXYgZm9vIGJhcgorCTppZiB2OnNoZWxsX2Vycm9yCisJOiAgZWNobyAnY291bGQgbm90IHJlbmFtZSAiZm9vIiB0byAiYmFyIiEnCisJOmVuZGlmCis8CQkic2hlbGxfZXJyb3IiIGFsc28gd29ya3MsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworCQkJCQkqdjpzdGF0dXNtc2cqICpzdGF0dXNtc2ctdmFyaWFibGUqCit2OnN0YXR1c21zZwlMYXN0IGdpdmVuIHN0YXR1cyBtZXNzYWdlLiAgSXQncyBhbGxvd2VkIHRvIHNldCB0aGlzIHZhcmlhYmxlLgorCisJCQkJKnY6dGVybXJlc3BvbnNlKiAqdGVybXJlc3BvbnNlLXZhcmlhYmxlKgordjp0ZXJtcmVzcG9uc2UJVGhlIGVzY2FwZSBzZXF1ZW5jZSByZXR1cm5lZCBieSB0aGUgdGVybWluYWwgZm9yIHRoZSB8dF9SVnwKKwkJdGVybWNhcCBlbnRyeS4gIEl0IGlzIHNldCB3aGVuIFZpbSByZWNlaXZlcyBhbiBlc2NhcGUgc2VxdWVuY2UKKwkJdGhhdCBzdGFydHMgd2l0aCBFU0MgWyBvciBDU0kgYW5kIGVuZHMgaW4gYSAnYycsIHdpdGggb25seQorCQlkaWdpdHMsICc7JyBhbmQgJy4nIGluIGJldHdlZW4uCisJCVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgVGVybVJlc3BvbnNlIGF1dG9jb21tYW5kIGV2ZW50IGlzCisJCWZpcmVkLCBzbyB0aGF0IHlvdSBjYW4gcmVhY3QgdG8gdGhlIHJlc3BvbnNlIGZyb20gdGhlCisJCXRlcm1pbmFsLgorCQlUaGUgcmVzcG9uc2UgZnJvbSBhIG5ldyB4dGVybSBpczogIjxFc2M+WyBQcCA7IFB2IDsgUGMgYyIuICBQcAorCQlpcyB0aGUgdGVybWluYWwgdHlwZTogMCBmb3IgdnQxMDAgYW5kIDEgZm9yIHZ0MjIwLiAgUHYgaXMgdGhlCisJCXBhdGNoIGxldmVsIChzaW5jZSB0aGlzIHdhcyBpbnRyb2R1Y2VkIGluIHBhdGNoIDk1LCBpdCdzCisJCWFsd2F5cyA5NSBvciBiaWdnZXIpLiAgUGMgaXMgYWx3YXlzIHplcm8uCisJCXtvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCB8K3Rlcm1yZXNwb25zZXwgZmVhdHVyZX0KKworCQkJCSp2OnRoaXNfc2Vzc2lvbiogKnRoaXNfc2Vzc2lvbi12YXJpYWJsZSoKK3Y6dGhpc19zZXNzaW9uCUZ1bGwgZmlsZW5hbWUgb2YgdGhlIGxhc3QgbG9hZGVkIG9yIHNhdmVkIHNlc3Npb24gZmlsZS4gIFNlZQorCQl8Om1rc2Vzc2lvbnwuICBJdCBpcyBhbGxvd2VkIHRvIHNldCB0aGlzIHZhcmlhYmxlLiAgV2hlbiBubworCQlzZXNzaW9uIGZpbGUgaGFzIGJlZW4gc2F2ZWQsIHRoaXMgdmFyaWFibGUgaXMgZW1wdHkuCisJCSJ0aGlzX3Nlc3Npb24iIGFsc28gd29ya3MsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworCQkJCQkqdjp0aHJvd3BvaW50KiAqdGhyb3dwb2ludC12YXJpYWJsZSoKK3Y6dGhyb3dwb2ludAlUaGUgcG9pbnQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBtb3N0IHJlY2VudGx5IGNhdWdodCBhbmQgbm90CisJCWZpbmlzaGVkIHdhcyB0aHJvd24uICBOb3Qgc2V0IHdoZW4gY29tbWFuZHMgYXJlIHR5cGVkLiAgU2VlCisJCWFsc28gfHY6ZXhjZXB0aW9ufCBhbmQgfHRocm93LXZhcmlhYmxlc3wuCisJCUV4YW1wbGU6ID4KKwk6dHJ5CisJOiAgdGhyb3cgIm9vcHMiCisJOmNhdGNoIC8uKi8KKwk6ICBlY2hvICJFeGNlcHRpb24gZnJvbSIgdjp0aHJvd3BvaW50CisJOmVuZHRyeQorPAkJT3V0cHV0OiAiRXhjZXB0aW9uIGZyb20gdGVzdC52aW0sIGxpbmUgMiIKKworCQkJCQkqdjp2ZXJzaW9uKiAqdmVyc2lvbi12YXJpYWJsZSoKK3Y6dmVyc2lvbglWZXJzaW9uIG51bWJlciBvZiBWaW06IE1ham9yIHZlcnNpb24gbnVtYmVyIHRpbWVzIDEwMCBwbHVzCisJCW1pbm9yIHZlcnNpb24gbnVtYmVyLiAgVmVyc2lvbiA1LjAgaXMgNTAwLiAgVmVyc2lvbiA1LjEgKDUuMDEpCisJCWlzIDUwMS4gIFJlYWQtb25seS4gICJ2ZXJzaW9uIiBhbHNvIHdvcmtzLCBmb3IgYmFja3dhcmRzCisJCWNvbXBhdGliaWxpdHkuCisJCVVzZSB8aGFzKCl8IHRvIGNoZWNrIGlmIGEgY2VydGFpbiBwYXRjaCB3YXMgaW5jbHVkZWQsIGUuZy46ID4KKwkJCWlmIGhhcygicGF0Y2gxMjMiKQorPAkJTm90ZSB0aGF0IHBhdGNoIG51bWJlcnMgYXJlIHNwZWNpZmljIHRvIHRoZSB2ZXJzaW9uLCB0aHVzIGJvdGgKKwkJdmVyc2lvbiA1LjAgYW5kIDUuMSBtYXkgaGF2ZSBhIHBhdGNoIDEyMywgYnV0IHRoZXNlIGFyZQorCQljb21wbGV0ZWx5IGRpZmZlcmVudC4KKworCQkJCQkqdjp3YXJuaW5nbXNnKiAqd2FybmluZ21zZy12YXJpYWJsZSoKK3Y6d2FybmluZ21zZwlMYXN0IGdpdmVuIHdhcm5pbmcgbWVzc2FnZS4gIEl0J3MgYWxsb3dlZCB0byBzZXQgdGhpcyB2YXJpYWJsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBCdWlsdGluIEZ1bmN0aW9ucwkJCQkJKmZ1bmN0aW9ucyoKKworU2VlIHxmdW5jdGlvbi1saXN0fCBmb3IgYSBsaXN0IGdyb3VwZWQgYnkgd2hhdCB0aGUgZnVuY3Rpb24gaXMgdXNlZCBmb3IuCisKKyhVc2UgQ1RSTC1dIG9uIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGp1bXAgdG8gdGhlIGZ1bGwgZXhwbGFuYXRpb24pCisKK1VTQUdFCQkJCVJFU1VMVAlERVNDUklQVElPTgl+CisKK2FwcGVuZCgge2xudW19LCB7c3RyaW5nfSkJTnVtYmVyICBhcHBlbmQge3N0cmluZ30gYmVsb3cgbGluZSB7bG51bX0KK2FyZ2MoKQkJCQlOdW1iZXIJbnVtYmVyIG9mIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0CithcmdpZHgoKQkJCU51bWJlciAgY3VycmVudCBpbmRleCBpbiB0aGUgYXJndW1lbnQgbGlzdAorYXJndigge25yfSkJCQlTdHJpbmcJe25yfSBlbnRyeSBvZiB0aGUgYXJndW1lbnQgbGlzdAorYnJvd3NlKCB7c2F2ZX0sIHt0aXRsZX0sIHtpbml0ZGlyfSwge2RlZmF1bHR9KQorCQkJCVN0cmluZwlwdXQgdXAgYSBmaWxlIHJlcXVlc3RlcgorYnVmZXhpc3RzKCB7ZXhwcn0pCQlOdW1iZXIJVFJVRSBpZiBidWZmZXIge2V4cHJ9IGV4aXN0cworYnVmbGlzdGVkKCB7ZXhwcn0pCQlOdW1iZXIgIFRSVUUgaWYgYnVmZmVyIHtleHByfSBpcyBsaXN0ZWQKK2J1ZmxvYWRlZCgge2V4cHJ9KQkJTnVtYmVyICBUUlVFIGlmIGJ1ZmZlciB7ZXhwcn0gaXMgbG9hZGVkCitidWZuYW1lKCB7ZXhwcn0pCQlTdHJpbmcJTmFtZSBvZiB0aGUgYnVmZmVyIHtleHByfQorYnVmbnIoIHtleHByfSkJCQlOdW1iZXIJTnVtYmVyIG9mIHRoZSBidWZmZXIge2V4cHJ9CitidWZ3aW5ucigge2V4cHJ9KQkJTnVtYmVyCXdpbmRvdyBudW1iZXIgb2YgYnVmZmVyIHtleHByfQorYnl0ZTJsaW5lKCB7Ynl0ZX0pCQlOdW1iZXIJbGluZSBudW1iZXIgYXQgYnl0ZSBjb3VudCB7Ynl0ZX0KK2NoYXIybnIoIHtleHByfSkJCU51bWJlcglBU0NJSSB2YWx1ZSBvZiBmaXJzdCBjaGFyIGluIHtleHByfQorY2luZGVudCgge2xudW19KQkJTnVtYmVyICBDIGluZGVudCBmb3IgbGluZSB7bG51bX0KK2NvbCgge2V4cHJ9KQkJCU51bWJlcgljb2x1bW4gbnIgb2YgY3Vyc29yIG9yIG1hcmsKK2NvbmZpcm0oIHttc2d9IFssIHtjaG9pY2VzfSBbLCB7ZGVmYXVsdH0gWywge3R5cGV9XV1dKQorCQkJCU51bWJlcgludW1iZXIgb2YgY2hvaWNlIHBpY2tlZCBieSB1c2VyCitjc2NvcGVfY29ubmVjdGlvbiggW3tudW19ICwge2RicGF0aH0gWywge3ByZXBlbmR9XV0pCisJCQkJTnVtYmVyCWNoZWNrcyBleGlzdGVuY2Ugb2YgY3Njb3BlIGNvbm5lY3Rpb24KK2N1cnNvcigge2xudW19LCB7Y29sfSkJCU51bWJlciAgcG9zaXRpb24gY3Vyc29yIGF0IHtsbnVtfSwge2NvbH0KK2RlbGV0ZSgge2ZuYW1lfSkJCU51bWJlcglkZWxldGUgZmlsZSB7Zm5hbWV9CitkaWRfZmlsZXR5cGUoKQkJCU51bWJlcglUUlVFIGlmIEZpbGVUeXBlIGF1dG9jb21tYW5kIGV2ZW50IHVzZWQKK2VzY2FwZSgge3N0cmluZ30sIHtjaGFyc30pCVN0cmluZwllc2NhcGUge2NoYXJzfSBpbiB7c3RyaW5nfSB3aXRoICdcJworZXZlbnRoYW5kbGVyKCApCQkJTnVtYmVyICBUUlVFIGlmIGluc2lkZSBhbiBldmVudCBoYW5kbGVyCitleGVjdXRhYmxlKCB7ZXhwcn0pCQlOdW1iZXIJMSBpZiBleGVjdXRhYmxlIHtleHByfSBleGlzdHMKK2V4aXN0cygge2V4cHJ9KQkJCU51bWJlcglUUlVFIGlmIHtleHByfSBleGlzdHMKK2V4cGFuZCgge2V4cHJ9KQkJCVN0cmluZwlleHBhbmQgc3BlY2lhbCBrZXl3b3JkcyBpbiB7ZXhwcn0KK2ZpbGVyZWFkYWJsZSgge2ZpbGV9KQkJTnVtYmVyCVRSVUUgaWYge2ZpbGV9IGlzIGEgcmVhZGFibGUgZmlsZQorZmlsZXdyaXRhYmxlKCB7ZmlsZX0pCQlOdW1iZXIJVFJVRSBpZiB7ZmlsZX0gaXMgYSB3cml0YWJsZSBmaWxlCitmbmFtZW1vZGlmeSgge2ZuYW1lfSwge21vZHN9KQlTdHJpbmcJbW9kaWZ5IGZpbGUgbmFtZQorZm9sZGNsb3NlZCgge2xudW19KQkJTnVtYmVyICBmaXJzdCBsaW5lIG9mIGZvbGQgYXQge2xudW19IGlmIGNsb3NlZAorZm9sZGNsb3NlZGVuZCgge2xudW19KQkJTnVtYmVyICBsYXN0IGxpbmUgb2YgZm9sZCBhdCB7bG51bX0gaWYgY2xvc2VkCitmb2xkbGV2ZWwoIHtsbnVtfSkJCU51bWJlcglmb2xkIGxldmVsIGF0IHtsbnVtfQorZm9sZHRleHQoICkJCQlTdHJpbmcgIGxpbmUgZGlzcGxheWVkIGZvciBjbG9zZWQgZm9sZAorZm9yZWdyb3VuZCggKQkJCU51bWJlcglicmluZyB0aGUgVmltIHdpbmRvdyB0byB0aGUgZm9yZWdyb3VuZAorZ2V0Y2hhciggW2V4cHJdKQkJTnVtYmVyICBnZXQgb25lIGNoYXJhY3RlciBmcm9tIHRoZSB1c2VyCitnZXRjaGFybW9kKCApCQkJTnVtYmVyICBtb2RpZmllcnMgZm9yIHRoZSBsYXN0IHR5cGVkIGNoYXJhY3RlcgorZ2V0YnVmdmFyKCB7ZXhwcn0sIHt2YXJuYW1lfSkJCXZhcmlhYmxlIHt2YXJuYW1lfSBpbiBidWZmZXIge2V4cHJ9CitnZXRjbWRsaW5lKCkJCQlTdHJpbmcJcmV0dXJuIHRoZSBjdXJyZW50IGNvbW1hbmQtbGluZQorZ2V0Y21kcG9zKCkJCQlOdW1iZXIJcmV0dXJuIGN1cnNvciBwb3NpdGlvbiBpbiBjb21tYW5kLWxpbmUKK2dldGN3ZCgpCQkJU3RyaW5nCXRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CitnZXRmc2l6ZSgge2ZuYW1lfSkJCU51bWJlcglzaXplIGluIGJ5dGVzIG9mIGZpbGUKK2dldGZ0aW1lKCB7Zm5hbWV9KQkJTnVtYmVyCWxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgZmlsZQorZ2V0bGluZSgge2xudW19KQkJU3RyaW5nCWxpbmUge2xudW19IGZyb20gY3VycmVudCBidWZmZXIKK2dldHJlZyggW3tyZWduYW1lfV0pCQlTdHJpbmcgIGNvbnRlbnRzIG9mIHJlZ2lzdGVyCitnZXRyZWd0eXBlKCBbe3JlZ25hbWV9XSkJU3RyaW5nICB0eXBlIG9mIHJlZ2lzdGVyCitnZXR3aW5wb3N4KCkJCQlOdW1iZXIJWCBjb29yZCBpbiBwaXhlbHMgb2YgR1VJIFZpbSB3aW5kb3cKK2dldHdpbnBvc3koKQkJCU51bWJlcglZIGNvb3JkIGluIHBpeGVscyBvZiBHVUkgVmltIHdpbmRvdworZ2V0d2ludmFyKCB7bnJ9LCB7dmFybmFtZX0pCQl2YXJpYWJsZSB7dmFybmFtZX0gaW4gd2luZG93IHtucn0KK2dsb2IoIHtleHByfSkJCQlTdHJpbmcJZXhwYW5kIGZpbGUgd2lsZGNhcmRzIGluIHtleHByfQorZ2xvYnBhdGgoIHtwYXRofSwge2V4cHJ9KQlTdHJpbmcJZG8gZ2xvYih7ZXhwcn0pIGZvciBhbGwgZGlycyBpbiB7cGF0aH0KK2hhcygge2ZlYXR1cmV9KQkJCU51bWJlcglUUlVFIGlmIGZlYXR1cmUge2ZlYXR1cmV9IHN1cHBvcnRlZAoraGFzbWFwdG8oIHt3aGF0fSBbLCB7bW9kZX1dKQlOdW1iZXIJVFJVRSBpZiBtYXBwaW5nIHRvIHt3aGF0fSBleGlzdHMKK2hpc3RhZGQoIHtoaXN0b3J5fSx7aXRlbX0pCVN0cmluZwlhZGQgYW4gaXRlbSB0byBhIGhpc3RvcnkKK2hpc3RkZWwoIHtoaXN0b3J5fSBbLCB7aXRlbX1dKQlTdHJpbmcJcmVtb3ZlIGFuIGl0ZW0gZnJvbSBhIGhpc3RvcnkKK2hpc3RnZXQoIHtoaXN0b3J5fSBbLCB7aW5kZXh9XSkJU3RyaW5nCWdldCB0aGUgaXRlbSB7aW5kZXh9IGZyb20gYSBoaXN0b3J5CitoaXN0bnIoIHtoaXN0b3J5fSkJCU51bWJlcgloaWdoZXN0IGluZGV4IG9mIGEgaGlzdG9yeQoraGxleGlzdHMoIHtuYW1lfSkJCU51bWJlcglUUlVFIGlmIGhpZ2hsaWdodCBncm91cCB7bmFtZX0gZXhpc3RzCitobElEKCB7bmFtZX0pCQkJTnVtYmVyCXN5bnRheCBJRCBvZiBoaWdobGlnaHQgZ3JvdXAge25hbWV9Citob3N0bmFtZSgpCQkJU3RyaW5nCW5hbWUgb2YgdGhlIG1hY2hpbmUgVmltIGlzIHJ1bm5pbmcgb24KK2ljb252KCB7ZXhwcn0sIHtmcm9tfSwge3RvfSkJU3RyaW5nICBjb252ZXJ0IGVuY29kaW5nIG9mIHtleHByfQoraW5kZW50KCB7bG51bX0pCQkJTnVtYmVyICBpbmRlbnQgb2YgbGluZSB7bG51bX0KK2lucHV0KCB7cHJvbXB0fSBbLCB7dGV4dH1dKQlTdHJpbmcJZ2V0IGlucHV0IGZyb20gdGhlIHVzZXIKK2lucHV0ZGlhbG9nKCB7cH0gWywge3R9IFssIHtjfV1dKSBTdHJpbmcgIGxpa2UgaW5wdXQoKSBidXQgaW4gYSBHVUkgZGlhbG9nCitpbnB1dHJlc3RvcmUoKQkJCU51bWJlciAgcmVzdG9yZSB0eXBlYWhlYWQKK2lucHV0c2F2ZSgpCQkJTnVtYmVyICBzYXZlIGFuZCBjbGVhciB0eXBlYWhlYWQKK2lucHV0c2VjcmV0KCB7cHJvbXB0fSBbLCB7dGV4dH1dKSBTdHJpbmcgIGxpa2UgaW5wdXQoKSBidXQgaGlkaW5nIHRoZSB0ZXh0Citpc2RpcmVjdG9yeSgge2RpcmVjdG9yeX0pCU51bWJlcglUUlVFIGlmIHtkaXJlY3Rvcnl9IGlzIGEgZGlyZWN0b3J5CitsaWJjYWxsKCB7bGlifSwge2Z1bmN9LCB7YXJnfSkJU3RyaW5nICBjYWxsIHtmdW5jfSBpbiBsaWJyYXJ5IHtsaWJ9IHdpdGgge2FyZ30KK2xpYmNhbGxucigge2xpYn0sIHtmdW5jfSwge2FyZ30pICBOdW1iZXIgIGlkZW0sIGJ1dCByZXR1cm4gYSBOdW1iZXIKK2xpbmUoIHtleHByfSkJCQlOdW1iZXIJbGluZSBuciBvZiBjdXJzb3IsIGxhc3QgbGluZSBvciBtYXJrCitsaW5lMmJ5dGUoIHtsbnVtfSkJCU51bWJlcglieXRlIGNvdW50IG9mIGxpbmUge2xudW19CitsaXNwaW5kZW50KCB7bG51bX0pCQlOdW1iZXIgIExpc3AgaW5kZW50IGZvciBsaW5lIHtsbnVtfQorbG9jYWx0aW1lKCkJCQlOdW1iZXIJY3VycmVudCB0aW1lCittYXBhcmcoIHtuYW1lfVssIHttb2RlfV0pCVN0cmluZwlyaHMgb2YgbWFwcGluZyB7bmFtZX0gaW4gbW9kZSB7bW9kZX0KK21hcGNoZWNrKCB7bmFtZX1bLCB7bW9kZX1dKQlTdHJpbmcJY2hlY2sgZm9yIG1hcHBpbmdzIG1hdGNoaW5nIHtuYW1lfQorbWF0Y2goIHtleHByfSwge3BhdH1bLCB7c3RhcnR9XSkKKwkJCQlOdW1iZXIJcG9zaXRpb24gd2hlcmUge3BhdH0gbWF0Y2hlcyBpbiB7ZXhwcn0KK21hdGNoZW5kKCB7ZXhwcn0sIHtwYXR9Wywge3N0YXJ0fV0pCisJCQkJTnVtYmVyCXBvc2l0aW9uIHdoZXJlIHtwYXR9IGVuZHMgaW4ge2V4cHJ9CittYXRjaHN0cigge2V4cHJ9LCB7cGF0fVssIHtzdGFydH1dKQorCQkJCVN0cmluZwltYXRjaCBvZiB7cGF0fSBpbiB7ZXhwcn0KK21vZGUoKQkJCQlTdHJpbmcgIGN1cnJlbnQgZWRpdGluZyBtb2RlCituZXh0bm9uYmxhbmsoIHtsbnVtfSkJCU51bWJlcglsaW5lIG5yIG9mIG5vbi1ibGFuayBsaW5lID49IHtsbnVtfQorbnIyY2hhcigge2V4cHJ9KQkJU3RyaW5nCXNpbmdsZSBjaGFyIHdpdGggQVNDSUkgdmFsdWUge2V4cHJ9CitwcmV2bm9uYmxhbmsoIHtsbnVtfSkJCU51bWJlcglsaW5lIG5yIG9mIG5vbi1ibGFuayBsaW5lIDw9IHtsbnVtfQorcmVtb3RlX2V4cHIoIHtzZXJ2ZXJ9LCB7c3RyaW5nfSBbLCB7aWR2YXJ9XSkKKwkJCQlTdHJpbmcJc2VuZCBleHByZXNzaW9uCityZW1vdGVfZm9yZWdyb3VuZCgge3NlcnZlcn0pCU51bWJlcglicmluZyBWaW0gc2VydmVyIHRvIHRoZSBmb3JlZ3JvdW5kCityZW1vdGVfcGVlaygge3NlcnZlcmlkfSBbLCB7cmV0dmFyfV0pCisJCQkJTnVtYmVyCWNoZWNrIGZvciByZXBseSBzdHJpbmcKK3JlbW90ZV9yZWFkKCB7c2VydmVyaWR9KQlTdHJpbmcJcmVhZCByZXBseSBzdHJpbmcKK3JlbW90ZV9zZW5kKCB7c2VydmVyfSwge3N0cmluZ30gWywge2lkdmFyfV0pCisJCQkJU3RyaW5nCXNlbmQga2V5IHNlcXVlbmNlCityZW5hbWUoIHtmcm9tfSwge3RvfSkJCU51bWJlciAgcmVuYW1lIChtb3ZlKSBmaWxlIGZyb20ge2Zyb219IHRvIHt0b30KK3Jlc29sdmUoIHtmaWxlbmFtZX0pCQlTdHJpbmcgIGdldCBmaWxlbmFtZSBhIHNob3J0Y3V0IHBvaW50cyB0bworc2VhcmNoKCB7cGF0dGVybn0gWywge2ZsYWdzfV0pCU51bWJlciAgc2VhcmNoIGZvciB7cGF0dGVybn0KK3NlYXJjaHBhaXIoIHtzdGFydH0sIHttaWRkbGV9LCB7ZW5kfSBbLCB7ZmxhZ3N9IFssIHtza2lwfV1dKQorCQkJCU51bWJlciAgc2VhcmNoIGZvciBvdGhlciBlbmQgb2Ygc3RhcnQvZW5kIHBhaXIKK3NlcnZlcjJjbGllbnQoIHtjbGllbnRpZH0sIHtzdHJpbmd9KQorCQkJCU51bWJlcglzZW5kIHJlcGx5IHN0cmluZworc2VydmVybGlzdCgpCQkJU3RyaW5nCWdldCBhIGxpc3Qgb2YgYXZhaWxhYmxlIHNlcnZlcnMKK3NldGJ1ZnZhcigge2V4cHJ9LCB7dmFybmFtZX0sIHt2YWx9KQlzZXQge3Zhcm5hbWV9IGluIGJ1ZmZlciB7ZXhwcn0gdG8ge3ZhbH0KK3NldGNtZHBvcygge3Bvc30pCQlOdW1iZXIJc2V0IGN1cnNvciBwb3NpdGlvbiBpbiBjb21tYW5kLWxpbmUKK3NldGxpbmUoIHtsbnVtfSwge2xpbmV9KQlOdW1iZXIJc2V0IGxpbmUge2xudW19IHRvIHtsaW5lfQorc2V0cmVnKCB7bn0sIHt2fVssIHtvcHR9XSkJTnVtYmVyICBzZXQgcmVnaXN0ZXIgdG8gdmFsdWUgYW5kIHR5cGUKK3NldHdpbnZhcigge25yfSwge3Zhcm5hbWV9LCB7dmFsfSkJc2V0IHt2YXJuYW1lfSBpbiB3aW5kb3cge25yfSB0byB7dmFsfQorc2ltcGxpZnkoIHtmaWxlbmFtZX0pCQlTdHJpbmcgIHNpbXBsaWZ5IGZpbGVuYW1lIGFzIG11Y2ggYXMgcG9zc2libGUKK3N0cmZ0aW1lKCB7Zm9ybWF0fVssIHt0aW1lfV0pCVN0cmluZwl0aW1lIGluIHNwZWNpZmllZCBmb3JtYXQKK3N0cmlkeCgge2hheXN0YWNrfSwge25lZWRsZX0pCU51bWJlcglmaXJzdCBpbmRleCBvZiB7bmVlZGxlfSBpbiB7aGF5c3RhY2t9CitzdHJsZW4oIHtleHByfSkJCQlOdW1iZXIJbGVuZ3RoIG9mIHRoZSBTdHJpbmcge2V4cHJ9CitzdHJwYXJ0KCB7c3JjfSwge3N0YXJ0fVssIHtsZW59XSkKKwkJCQlTdHJpbmcJe2xlbn0gY2hhcmFjdGVycyBvZiB7c3JjfSBhdCB7c3RhcnR9CitzdHJyaWR4KCB7aGF5c3RhY2t9LCB7bmVlZGxlfSkJTnVtYmVyCWxhc3QgaW5kZXggb2Yge25lZWRsZX0gaW4ge2hheXN0YWNrfQorc3RydHJhbnMoIHtleHByfSkJCVN0cmluZwl0cmFuc2xhdGUgc3RyaW5nIHRvIG1ha2UgaXQgcHJpbnRhYmxlCitzdWJtYXRjaCgge25yfSkJCQlTdHJpbmcgIHNwZWNpZmljIG1hdGNoIGluICI6c3Vic3RpdHV0ZSIKK3N1YnN0aXR1dGUoIHtleHByfSwge3BhdH0sIHtzdWJ9LCB7ZmxhZ3N9KQorCQkJCVN0cmluZwlhbGwge3BhdH0gaW4ge2V4cHJ9IHJlcGxhY2VkIHdpdGgge3N1Yn0KK3N5bklEKCB7bGluZX0sIHtjb2x9LCB7dHJhbnN9KQlOdW1iZXIJc3ludGF4IElEIGF0IHtsaW5lfSBhbmQge2NvbH0KK3N5bklEYXR0cigge3N5bklEfSwge3doYXR9IFssIHttb2RlfV0pCisJCQkJU3RyaW5nCWF0dHJpYnV0ZSB7d2hhdH0gb2Ygc3ludGF4IElEIHtzeW5JRH0KK3N5bklEdHJhbnMoIHtzeW5JRH0pCQlOdW1iZXIJdHJhbnNsYXRlZCBzeW50YXggSUQgb2Yge3N5bklEfQorc3lzdGVtKCB7ZXhwcn0pCQkJU3RyaW5nCW91dHB1dCBvZiBzaGVsbCBjb21tYW5kIHtleHByfQordGVtcG5hbWUoKQkJCVN0cmluZwluYW1lIGZvciBhIHRlbXBvcmFyeSBmaWxlCit0b2xvd2VyKCB7ZXhwcn0pCQlTdHJpbmcJdGhlIFN0cmluZyB7ZXhwcn0gc3dpdGNoZWQgdG8gbG93ZXJjYXNlCit0b3VwcGVyKCB7ZXhwcn0pCQlTdHJpbmcJdGhlIFN0cmluZyB7ZXhwcn0gc3dpdGNoZWQgdG8gdXBwZXJjYXNlCit0eXBlKCB7bmFtZX0pCQkJTnVtYmVyCXR5cGUgb2YgdmFyaWFibGUge25hbWV9Cit2aXJ0Y29sKCB7ZXhwcn0pCQlOdW1iZXIJc2NyZWVuIGNvbHVtbiBvZiBjdXJzb3Igb3IgbWFyawordmlzdWFsbW9kZSggW2V4cHJdKQkJU3RyaW5nCWxhc3QgdmlzdWFsIG1vZGUgdXNlZAord2luYnVmbnIoIHtucn0pCQkJTnVtYmVyCWJ1ZmZlciBudW1iZXIgb2Ygd2luZG93IHtucn0KK3dpbmNvbCgpCQkJTnVtYmVyCXdpbmRvdyBjb2x1bW4gb2YgdGhlIGN1cnNvcgord2luaGVpZ2h0KCB7bnJ9KQkJTnVtYmVyCWhlaWdodCBvZiB3aW5kb3cge25yfQord2lubGluZSgpCQkJTnVtYmVyCXdpbmRvdyBsaW5lIG9mIHRoZSBjdXJzb3IKK3dpbm5yKCkJCQkJTnVtYmVyCW51bWJlciBvZiBjdXJyZW50IHdpbmRvdword2lucmVzdGNtZCgpCQkJU3RyaW5nICByZXR1cm5zIGNvbW1hbmQgdG8gcmVzdG9yZSB3aW5kb3cgc2l6ZXMKK3dpbndpZHRoKCB7bnJ9KQkJCU51bWJlcgl3aWR0aCBvZiB3aW5kb3cge25yfQorCithcHBlbmQoe2xudW19LCB7c3RyaW5nfSkJCQkJKmFwcGVuZCgpKgorCQlBcHBlbmQgdGhlIHRleHQge3N0cmluZ30gYWZ0ZXIgbGluZSB7bG51bX0gaW4gdGhlIGN1cnJlbnQKKwkJYnVmZmVyLiAge2xudW19IGNhbiBiZSB6ZXJvLCB0byBpbnNlcnQgYSBsaW5lIGJlZm9yZSB0aGUgZmlyc3QKKwkJb25lLiAgUmV0dXJucyAxIGZvciBmYWlsdXJlICh7bG51bX0gb3V0IG9mIHJhbmdlKSBvciAwIGZvcgorCQlzdWNjZXNzLgorCisJCQkJCQkJKmFyZ2MoKSoKK2FyZ2MoKQkJVGhlIHJlc3VsdCBpcyB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZQorCQljdXJyZW50IHdpbmRvdy4gIFNlZSB8YXJnbGlzdHwuCisKKwkJCQkJCQkqYXJnaWR4KCkqCithcmdpZHgoKQlUaGUgcmVzdWx0IGlzIHRoZSBjdXJyZW50IGluZGV4IGluIHRoZSBhcmd1bWVudCBsaXN0LiAgMCBpcworCQl0aGUgZmlyc3QgZmlsZS4gIGFyZ2MoKSAtIDEgaXMgdGhlIGxhc3Qgb25lLiAgU2VlIHxhcmdsaXN0fC4KKworCQkJCQkJCSphcmd2KCkqCithcmd2KHtucn0pCVRoZSByZXN1bHQgaXMgdGhlIHtucn10aCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZQorCQljdXJyZW50IHdpbmRvdy4gIFNlZSB8YXJnbGlzdHwuICAiYXJndigwKSIgaXMgdGhlIGZpcnN0IG9uZS4KKwkJRXhhbXBsZTogPgorCTpsZXQgaSA9IDAKKwk6d2hpbGUgaSA8IGFyZ2MoKQorCTogIGxldCBmID0gZXNjYXBlKGFyZ3YoaSksICcuICcpCisJOiAgZXhlICdhbWVudSBBcmcuJyAuIGYgLiAnIDplICcgLiBmIC4gJzxDUj4nCisJOiAgbGV0IGkgPSBpICsgMQorCTplbmR3aGlsZQorPAorCQkJCQkJCSpicm93c2UoKSoKK2Jyb3dzZSh7c2F2ZX0sIHt0aXRsZX0sIHtpbml0ZGlyfSwge2RlZmF1bHR9KQorCQlQdXQgdXAgYSBmaWxlIHJlcXVlc3Rlci4gIFRoaXMgb25seSB3b3JrcyB3aGVuICJoYXMoImJyb3dzZSIpIgorCQlyZXR1cm5zIG5vbi16ZXJvIChvbmx5IGluIHNvbWUgR1VJIHZlcnNpb25zKS4KKwkJVGhlIGlucHV0IGZpZWxkcyBhcmU6CisJCSAgICB7c2F2ZX0Jd2hlbiBub24temVybywgc2VsZWN0IGZpbGUgdG8gd3JpdGUKKwkJICAgIHt0aXRsZX0JdGl0bGUgZm9yIHRoZSByZXF1ZXN0ZXIKKwkJICAgIHtpbml0ZGlyfQlkaXJlY3RvcnkgdG8gc3RhcnQgYnJvd3NpbmcgaW4KKwkJICAgIHtkZWZhdWx0fQlkZWZhdWx0IGZpbGUgbmFtZQorCQlXaGVuIHRoZSAiQ2FuY2VsIiBidXR0b24gaXMgaGl0LCBzb21ldGhpbmcgd2VudCB3cm9uZywgb3IKKwkJYnJvd3NpbmcgaXMgbm90IHBvc3NpYmxlLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKK2J1ZmV4aXN0cyh7ZXhwcn0pCQkJCQkqYnVmZXhpc3RzKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIG5vbi16ZXJvIGlmIGEgYnVmZmVyIGNhbGxlZAorCQl7ZXhwcn0gZXhpc3RzLgorCQlJZiB0aGUge2V4cHJ9IGFyZ3VtZW50IGlzIGEgc3RyaW5nIGl0IG11c3QgbWF0Y2ggYSBidWZmZXIgbmFtZQorCQlleGFjdGx5LgorCQlJZiB0aGUge2V4cHJ9IGFyZ3VtZW50IGlzIGEgbnVtYmVyIGJ1ZmZlciBudW1iZXJzIGFyZSB1c2VkLgorCQlVbmxpc3RlZCBidWZmZXJzIHdpbGwgYmUgZm91bmQuCisJCU5vdGUgdGhhdCBoZWxwIGZpbGVzIGFyZSBsaXN0ZWQgYnkgdGhlaXIgc2hvcnQgbmFtZSBpbiB0aGUKKwkJb3V0cHV0IG9mIHw6YnVmZmVyc3wsIGJ1dCBidWZleGlzdHMoKSByZXF1aXJlcyB1c2luZyB0aGVpcgorCQlsb25nIG5hbWUgdG8gYmUgYWJsZSB0byBmaW5kIHRoZW0uCisJCVVzZSAiYnVmZXhpc3RzKDApIiB0byB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIGFuIGFsdGVybmF0ZQorCQlmaWxlIG5hbWUuCisJCQkJCQkJKmJ1ZmZlcl9leGlzdHMoKSoKKwkJT2Jzb2xldGUgbmFtZTogYnVmZmVyX2V4aXN0cygpLgorCitidWZsaXN0ZWQoe2V4cHJ9KQkJCQkJKmJ1Zmxpc3RlZCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyBub24temVybyBpZiBhIGJ1ZmZlciBjYWxsZWQKKwkJe2V4cHJ9IGV4aXN0cyBhbmQgaXMgbGlzdGVkIChoYXMgdGhlICdidWZsaXN0ZWQnIG9wdGlvbiBzZXQpLgorCQlUaGUge2V4cHJ9IGFyZ3VtZW50IGlzIHVzZWQgbGlrZSB3aXRoIGJ1ZmV4aXN0cygpLgorCitidWZsb2FkZWQoe2V4cHJ9KQkJCQkJKmJ1ZmxvYWRlZCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyBub24temVybyBpZiBhIGJ1ZmZlciBjYWxsZWQKKwkJe2V4cHJ9IGV4aXN0cyBhbmQgaXMgbG9hZGVkIChzaG93biBpbiBhIHdpbmRvdyBvciBoaWRkZW4pLgorCQlUaGUge2V4cHJ9IGFyZ3VtZW50IGlzIHVzZWQgbGlrZSB3aXRoIGJ1ZmV4aXN0cygpLgorCitidWZuYW1lKHtleHByfSkJCQkJCQkqYnVmbmFtZSgpKgorCQlUaGUgcmVzdWx0IGlzIHRoZSBuYW1lIG9mIGEgYnVmZmVyLCBhcyBpdCBpcyBkaXNwbGF5ZWQgYnkgdGhlCisJCSI6bHMiIGNvbW1hbmQuCisJCUlmIHtleHByfSBpcyBhIE51bWJlciwgdGhhdCBidWZmZXIgbnVtYmVyJ3MgbmFtZSBpcyBnaXZlbi4KKwkJTnVtYmVyIHplcm8gaXMgdGhlIGFsdGVybmF0ZSBidWZmZXIgZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4KKwkJSWYge2V4cHJ9IGlzIGEgU3RyaW5nLCBpdCBpcyB1c2VkIGFzIGEgfGZpbGUtcGF0dGVybnwgdG8gbWF0Y2gKKwkJd2l0aCB0aGUgYnVmZmVyIG5hbWVzLiAgVGhpcyBpcyBhbHdheXMgZG9uZSBsaWtlICdtYWdpYycgaXMKKwkJc2V0IGFuZCAnY3BvcHRpb25zJyBpcyBlbXB0eS4gIFdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZQorCQltYXRjaCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisJCSIiIG9yICIlIiBjYW4gYmUgdXNlZCBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLCAiIyIgZm9yIHRoZQorCQlhbHRlcm5hdGUgYnVmZmVyLgorCQlBIGZ1bGwgbWF0Y2ggaXMgcHJlZmVycmVkLCBvdGhlcndpc2UgYSBtYXRjaCBhdCB0aGUgc3RhcnQsIGVuZAorCQlvciBtaWRkbGUgb2YgdGhlIGJ1ZmZlciBuYW1lIGlzIGFjY2VwdGVkLgorCQlMaXN0ZWQgYnVmZmVycyBhcmUgZm91bmQgZmlyc3QuICBJZiB0aGVyZSBpcyBhIHNpbmdsZSBtYXRjaAorCQl3aXRoIGEgbGlzdGVkIGJ1ZmZlciwgdGhhdCBvbmUgaXMgcmV0dXJuZWQuICBOZXh0IHVubGlzdGVkCisJCWJ1ZmZlcnMgYXJlIHNlYXJjaGVkIGZvci4KKwkJSWYgdGhlIHtleHByfSBpcyBhIFN0cmluZywgYnV0IHlvdSB3YW50IHRvIHVzZSBpdCBhcyBhIGJ1ZmZlcgorCQludW1iZXIsIGZvcmNlIGl0IHRvIGJlIGEgTnVtYmVyIGJ5IGFkZGluZyB6ZXJvIHRvIGl0OiA+CisJCQk6ZWNobyBidWZuYW1lKCIzIiArIDApCis8CQlJZiB0aGUgYnVmZmVyIGRvZXNuJ3QgZXhpc3QsIG9yIGRvZXNuJ3QgaGF2ZSBhIG5hbWUsIGFuIGVtcHR5CisJCXN0cmluZyBpcyByZXR1cm5lZC4gPgorCWJ1Zm5hbWUoIiMiKQkJYWx0ZXJuYXRlIGJ1ZmZlciBuYW1lCisJYnVmbmFtZSgzKQkJbmFtZSBvZiBidWZmZXIgMworCWJ1Zm5hbWUoIiUiKQkJbmFtZSBvZiBjdXJyZW50IGJ1ZmZlcgorCWJ1Zm5hbWUoImZpbGUyIikJbmFtZSBvZiBidWZmZXIgd2hlcmUgImZpbGUyIiBtYXRjaGVzLgorPAkJCQkJCQkqYnVmZmVyX25hbWUoKSoKKwkJT2Jzb2xldGUgbmFtZTogYnVmZmVyX25hbWUoKS4KKworCQkJCQkJCSpidWZucigpKgorYnVmbnIoe2V4cHJ9KQlUaGUgcmVzdWx0IGlzIHRoZSBudW1iZXIgb2YgYSBidWZmZXIsIGFzIGl0IGlzIGRpc3BsYXllZCBieQorCQl0aGUgIjpscyIgY29tbWFuZC4gIEZvciB0aGUgdXNlIG9mIHtleHByfSwgc2VlIHxidWZuYW1lKCl8CisJCWFib3ZlLiAgSWYgdGhlIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LCAtMSBpcyByZXR1cm5lZC4KKwkJYnVmbnIoIiQiKSBpcyB0aGUgbGFzdCBidWZmZXI6ID4KKwk6bGV0IGxhc3RfYnVmZmVyID0gYnVmbnIoIiQiKQorPAkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIGhpZ2hlc3QgYnVmZmVyIG51bWJlcgorCQlvZiBleGlzdGluZyBidWZmZXJzLiAgTm90ZSB0aGF0IG5vdCBhbGwgYnVmZmVycyB3aXRoIGEgc21hbGxlcgorCQludW1iZXIgbmVjZXNzYXJpbHkgZXhpc3QsIGJlY2F1c2UgIjpid2lwZW91dCIgbWF5IGhhdmUgcmVtb3ZlZAorCQl0aGVtLiAgVXNlIGJ1ZmV4aXN0cygpIHRvIHRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBidWZmZXIuCisJCQkJCQkJKmJ1ZmZlcl9udW1iZXIoKSoKKwkJT2Jzb2xldGUgbmFtZTogYnVmZmVyX251bWJlcigpLgorCQkJCQkJCSpsYXN0X2J1ZmZlcl9ucigpKgorCQlPYnNvbGV0ZSBuYW1lIGZvciBidWZucigiJCIpOiBsYXN0X2J1ZmZlcl9ucigpLgorCitidWZ3aW5ucih7ZXhwcn0pCQkJCQkqYnVmd2lubnIoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QKKwkJd2luZG93IGFzc29jaWF0ZWQgd2l0aCBidWZmZXIge2V4cHJ9LiAgRm9yIHRoZSB1c2Ugb2Yge2V4cHJ9LAorCQlzZWUgfGJ1Zm5hbWUoKXwgYWJvdmUuICBJZiBidWZmZXIge2V4cHJ9IGRvZXNuJ3QgZXhpc3Qgb3IKKwkJdGhlcmUgaXMgbm8gc3VjaCB3aW5kb3csIC0xIGlzIHJldHVybmVkLiAgRXhhbXBsZTogPgorCisJZWNobyAiQSB3aW5kb3cgY29udGFpbmluZyBidWZmZXIgMSBpcyAiIC4gKGJ1Zndpbm5yKDEpKQorCis8CQlUaGUgbnVtYmVyIGNhbiBiZSB1c2VkIHdpdGggfENUUkwtV193fCBhbmQgIjp3aW5jbWQgdyIKKwkJfDp3aW5jbWR8LgorCisKK2J5dGUybGluZSh7Ynl0ZX0pCQkJCQkqYnl0ZTJsaW5lKCkqCisJCVJldHVybiB0aGUgbGluZSBudW1iZXIgdGhhdCBjb250YWlucyB0aGUgY2hhcmFjdGVyIGF0IGJ5dGUKKwkJY291bnQge2J5dGV9IGluIHRoZSBjdXJyZW50IGJ1ZmZlci4gIFRoaXMgaW5jbHVkZXMgdGhlCisJCWVuZC1vZi1saW5lIGNoYXJhY3RlciwgZGVwZW5kaW5nIG9uIHRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uCisJCWZvciB0aGUgY3VycmVudCBidWZmZXIuICBUaGUgZmlyc3QgY2hhcmFjdGVyIGhhcyBieXRlIGNvdW50CisJCW9uZS4KKwkJQWxzbyBzZWUgfGxpbmUyYnl0ZSgpfCwgfGdvfCBhbmQgfDpnb3RvfC4KKwkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2J5dGVfb2Zmc2V0fAorCQlmZWF0dXJlfQorCitjaGFyMm5yKHtleHByfSkJCQkJCQkqY2hhcjJucigpKgorCQlSZXR1cm4gbnVtYmVyIHZhbHVlIG9mIHRoZSBmaXJzdCBjaGFyIGluIHtleHByfS4gIEV4YW1wbGVzOiA+CisJCQljaGFyMm5yKCIgIikJCXJldHVybnMgMzIKKwkJCWNoYXIybnIoIkFCQyIpCQlyZXR1cm5zIDY1Cis8CQlUaGUgY3VycmVudCAnZW5jb2RpbmcnIGlzIHVzZWQuICBFeGFtcGxlIGZvciAidXRmLTgiOiA+CisJCQljaGFyMm5yKCLhIikJCXJldHVybnMgMjI1CisJCQljaGFyMm5yKCLhIlswXSkJCXJldHVybnMgMTk1CisKK2NpbmRlbnQoe2xudW19KQkJCQkJCSpjaW5kZW50KCkqCisJCUdldCB0aGUgYW1vdW50IG9mIGluZGVudCBmb3IgbGluZSB7bG51bX0gYWNjb3JkaW5nIHRoZSBDCisJCWluZGVudGluZyBydWxlcywgYXMgd2l0aCAnY2luZGVudCcuCisJCVRoZSBpbmRlbnQgaXMgY291bnRlZCBpbiBzcGFjZXMsIHRoZSB2YWx1ZSBvZiAndGFic3RvcCcgaXMKKwkJcmVsZXZhbnQuICB7bG51bX0gaXMgdXNlZCBqdXN0IGxpa2UgaW4gfGdldGxpbmUoKXwuCisJCVdoZW4ge2xudW19IGlzIGludmFsaWQgb3IgVmltIHdhcyBub3QgY29tcGlsZWQgdGhlIHwrY2luZGVudHwKKwkJZmVhdHVyZSwgLTEgaXMgcmV0dXJuZWQuCisKKwkJCQkJCQkqY29sKCkqCitjb2woe2V4cHJ9KQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgY29sdW1uIG9mIHRoZSBmaWxlCisJCXBvc2l0aW9uIGdpdmVuIHdpdGgge2V4cHJ9LiAgVGhlIGFjY2VwdGVkIHBvc2l0aW9ucyBhcmU6CisJCSAgICAuCSAgICB0aGUgY3Vyc29yIHBvc2l0aW9uCisJCSAgICAkCSAgICB0aGUgZW5kIG9mIHRoZSBjdXJzb3IgbGluZSAodGhlIHJlc3VsdCBpcyB0aGUKKwkJCSAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgY3Vyc29yIGxpbmUgcGx1cyBvbmUpCisJCSAgICAneAkgICAgcG9zaXRpb24gb2YgbWFyayB4IChpZiB0aGUgbWFyayBpcyBub3Qgc2V0LCAwIGlzCisJCQkgICAgcmV0dXJuZWQpCisJCUZvciB0aGUgc2NyZWVuIGNvbHVtbiBwb3NpdGlvbiB1c2UgfHZpcnRjb2woKXwuCisJCU5vdGUgdGhhdCBvbmx5IG1hcmtzIGluIHRoZSBjdXJyZW50IGZpbGUgY2FuIGJlIHVzZWQuCisJCUV4YW1wbGVzOiA+CisJCQljb2woIi4iKQkJY29sdW1uIG9mIGN1cnNvcgorCQkJY29sKCIkIikJCWxlbmd0aCBvZiBjdXJzb3IgbGluZSBwbHVzIG9uZQorCQkJY29sKCIndCIpCQljb2x1bW4gb2YgbWFyayB0CisJCQljb2woIiciIC4gbWFya25hbWUpCWNvbHVtbiBvZiBtYXJrIG1hcmtuYW1lCis8CQlUaGUgZmlyc3QgY29sdW1uIGlzIDEuICAwIGlzIHJldHVybmVkIGZvciBhbiBlcnJvci4KKwkJRm9yIHRoZSBjdXJzb3IgcG9zaXRpb24sIHdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBhY3RpdmUsIHRoZQorCQljb2x1bW4gaXMgb25lIGhpZ2hlciBpZiB0aGUgY3Vyc29yIGlzIGFmdGVyIHRoZSBlbmQgb2YgdGhlCisJCWxpbmUuICBUaGlzIGNhbiBiZSB1c2VkIHRvIG9idGFpbiB0aGUgY29sdW1uIGluIEluc2VydCBtb2RlOiA+CisJCQk6aW1hcCA8RjI+IDxDLU8+OmxldCBzYXZlX3ZlID0gJnZlPENSPgorCQkJCVw8Qy1PPjpzZXQgdmU9YWxsPENSPgorCQkJCVw8Qy1PPjplY2hvIGNvbCgiLiIpIC4gIlxuIiA8QmFyPgorCQkJCVxsZXQgJnZlID0gc2F2ZV92ZTxDUj4KKzwKKwkJCQkJCSpjb25maXJtKCkqCitjb25maXJtKHttc2d9IFssIHtjaG9pY2VzfSBbLCB7ZGVmYXVsdH0gWywge3R5cGV9XV1dKQorCQlDb25maXJtKCkgb2ZmZXJzIHRoZSB1c2VyIGEgZGlhbG9nLCBmcm9tIHdoaWNoIGEgY2hvaWNlIGNhbiBiZQorCQltYWRlLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBjaG9pY2UuICBGb3IgdGhlIGZpcnN0CisJCWNob2ljZSB0aGlzIGlzIDEuCisJCU5vdGU6IGNvbmZpcm0oKSBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIGNvbXBpbGVkIHdpdGggZGlhbG9nCisJCXN1cHBvcnQsIHNlZSB8K2RpYWxvZ19jb258IGFuZCB8K2RpYWxvZ19ndWl8LgorCQl7bXNnfSBpcyBkaXNwbGF5ZWQgaW4gYSB8ZGlhbG9nfCB3aXRoIHtjaG9pY2VzfSBhcyB0aGUKKwkJYWx0ZXJuYXRpdmVzLiAgV2hlbiB7Y2hvaWNlc30gaXMgbWlzc2luZyBvciBlbXB0eSwgIiZPSyIgaXMKKwkJdXNlZCAoYW5kIHRyYW5zbGF0ZWQpLgorCQl7bXNnfSBpcyBhIFN0cmluZywgdXNlICdcbicgdG8gaW5jbHVkZSBhIG5ld2xpbmUuICBPbmx5IG9uCisJCXNvbWUgc3lzdGVtcyB0aGUgc3RyaW5nIGlzIHdyYXBwZWQgd2hlbiBpdCBkb2Vzbid0IGZpdC4KKwkJe2Nob2ljZXN9IGlzIGEgU3RyaW5nLCB3aXRoIHRoZSBpbmRpdmlkdWFsIGNob2ljZXMgc2VwYXJhdGVkCisJCWJ5ICdcbicsIGUuZy4gPgorCQkJY29uZmlybSgiU2F2ZSBjaGFuZ2VzPyIsICImWWVzXG4mTm9cbiZDYW5jZWwiKQorPAkJVGhlIGxldHRlciBhZnRlciB0aGUgJyYnIGlzIHRoZSBzaG9ydGN1dCBrZXkgZm9yIHRoYXQgY2hvaWNlLgorCQlUaHVzIHlvdSBjYW4gdHlwZSAnYycgdG8gc2VsZWN0ICJDYW5jZWwiLiAgVGhlIHNob3J0Y3V0IGRvZXMKKwkJbm90IG5lZWQgdG8gYmUgdGhlIGZpcnN0IGxldHRlcjogPgorCQkJY29uZmlybSgiZmlsZSBoYXMgYmVlbiBtb2RpZmllZCIsICImU2F2ZVxuU2F2ZSAmQWxsIikKKzwJCUZvciB0aGUgY29uc29sZSwgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIGNob2ljZSBpcyB1c2VkIGFzCisJCXRoZSBkZWZhdWx0IHNob3J0Y3V0IGtleS4KKwkJVGhlIG9wdGlvbmFsIHtkZWZhdWx0fSBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBjaG9pY2UKKwkJdGhhdCBpcyBtYWRlIGlmIHRoZSB1c2VyIGhpdHMgPENSPi4gIFVzZSAxIHRvIG1ha2UgdGhlIGZpcnN0CisJCWNob2ljZSB0aGUgZGVmYXVsdCBvbmUuICBVc2UgMCB0byBub3Qgc2V0IGEgZGVmYXVsdC4gIElmCisJCXtkZWZhdWx0fSBpcyBvbWl0dGVkLCAxIGlzIHVzZWQuCisJCVRoZSBvcHRpb25hbCB7dHlwZX0gYXJndW1lbnQgZ2l2ZXMgdGhlIHR5cGUgb2YgZGlhbG9nLiAgVGhpcworCQlpcyBvbmx5IHVzZWQgZm9yIHRoZSBpY29uIG9mIHRoZSBXaW4zMiBHVUkuICBJdCBjYW4gYmUgb25lIG9mCisJCXRoZXNlIHZhbHVlczogIkVycm9yIiwgIlF1ZXN0aW9uIiwgIkluZm8iLCAiV2FybmluZyIgb3IKKwkJIkdlbmVyaWMiLiAgT25seSB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIHJlbGV2YW50LiAgV2hlbiB7dHlwZX0KKwkJaXMgb21pdHRlZCwgIkdlbmVyaWMiIGlzIHVzZWQuCisJCUlmIHRoZSB1c2VyIGFib3J0cyB0aGUgZGlhbG9nIGJ5IHByZXNzaW5nIDxFc2M+LCBDVFJMLUMsCisJCW9yIGFub3RoZXIgdmFsaWQgaW50ZXJydXB0IGtleSwgY29uZmlybSgpIHJldHVybnMgMC4KKworCQlBbiBleGFtcGxlOiA+CisgICA6bGV0IGNob2ljZSA9IGNvbmZpcm0oIldoYXQgZG8geW91IHdhbnQ/IiwgIiZBcHBsZXNcbiZPcmFuZ2VzXG4mQmFuYW5hcyIsIDIpCisgICA6aWYgY2hvaWNlID09IDAKKyAgIDoJZWNobyAibWFrZSB1cCB5b3VyIG1pbmQhIgorICAgOmVsc2VpZiBjaG9pY2UgPT0gMworICAgOgllY2hvICJ0YXN0ZWZ1bCIKKyAgIDplbHNlCisgICA6CWVjaG8gIkkgcHJlZmVyIGJhbmFuYXMgbXlzZWxmLiIKKyAgIDplbmRpZgorPAkJSW4gYSBHVUkgZGlhbG9nLCBidXR0b25zIGFyZSB1c2VkLiAgVGhlIGxheW91dCBvZiB0aGUgYnV0dG9ucworCQlkZXBlbmRzIG9uIHRoZSAndicgZmxhZyBpbiAnZ3Vpb3B0aW9ucycuICBJZiBpdCBpcyBpbmNsdWRlZCwKKwkJdGhlIGJ1dHRvbnMgYXJlIGFsd2F5cyBwdXQgdmVydGljYWxseS4gIE90aGVyd2lzZSwgIGNvbmZpcm0oKQorCQl0cmllcyB0byBwdXQgdGhlIGJ1dHRvbnMgaW4gb25lIGhvcml6b250YWwgbGluZS4gIElmIHRoZXkKKwkJZG9uJ3QgZml0LCBhIHZlcnRpY2FsIGxheW91dCBpcyB1c2VkIGFueXdheS4gIEZvciBzb21lIHN5c3RlbXMKKwkJdGhlIGhvcml6b250YWwgbGF5b3V0IGlzIGFsd2F5cyB1c2VkLgorCisJCQkJCQkJKmNzY29wZV9jb25uZWN0aW9uKCkqCitjc2NvcGVfY29ubmVjdGlvbihbe251bX0gLCB7ZGJwYXRofSBbLCB7cHJlcGVuZH1dXSkKKwkJQ2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgfGNzY29wZXwgY29ubmVjdGlvbi4gIElmIG5vCisJCXBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCwgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJuczoKKwkJCTAsIGlmIGNzY29wZSB3YXMgbm90IGF2YWlsYWJsZSAobm90IGNvbXBpbGVkIGluKSwgb3IKKwkJCSAgIGlmIHRoZXJlIGFyZSBubyBjc2NvcGUgY29ubmVjdGlvbnM7CisJCQkxLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY3Njb3BlIGNvbm5lY3Rpb24uCisKKwkJSWYgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSB2YWx1ZSBvZiB7bnVtfQorCQlkZXRlcm1pbmVzIGhvdyBleGlzdGVuY2Ugb2YgYSBjc2NvcGUgY29ubmVjdGlvbiBpcyBjaGVja2VkOgorCisJCXtudW19CURlc2NyaXB0aW9uIG9mIGV4aXN0ZW5jZSBjaGVjaworCQktLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJMAlTYW1lIGFzIG5vIHBhcmFtZXRlcnMgKGUuZy4sICJjc2NvcGVfY29ubmVjdGlvbigpIikuCisJCTEJSWdub3JlIHtwcmVwZW5kfSwgYW5kIHVzZSBwYXJ0aWFsIHN0cmluZyBtYXRjaGVzIGZvcgorCQkJe2RicGF0aH0uCisJCTIJSWdub3JlIHtwcmVwZW5kfSwgYW5kIHVzZSBleGFjdCBzdHJpbmcgbWF0Y2hlcyBmb3IKKwkJCXtkYnBhdGh9LgorCQkzCVVzZSB7cHJlcGVuZH0sIHVzZSBwYXJ0aWFsIHN0cmluZyBtYXRjaGVzIGZvciBib3RoCisJCQl7ZGJwYXRofSBhbmQge3ByZXBlbmR9LgorCQk0CVVzZSB7cHJlcGVuZH0sIHVzZSBleGFjdCBzdHJpbmcgbWF0Y2hlcyBmb3IgYm90aAorCQkJe2RicGF0aH0gYW5kIHtwcmVwZW5kfS4KKworCQlOb3RlOiBBbGwgc3RyaW5nIGNvbXBhcmlzb25zIGFyZSBjYXNlIHNlbnNpdGl2ZSEKKworCQlFeGFtcGxlcy4gIFN1cHBvc2Ugd2UgaGFkIHRoZSBmb2xsb3dpbmcgKGZyb20gIjpjcyBzaG93Iik6ID4KKworICAjIHBpZCAgICBkYXRhYmFzZSBuYW1lCQkJcHJlcGVuZCBwYXRoCisgIDAgMjc2NjQgIGNzY29wZS5vdXQJCQkJL3Vzci9sb2NhbAorPAorCQlJbnZvY2F0aW9uCQkJCQlSZXR1cm4gVmFsIH4KKwkJLS0tLS0tLS0tLQkJCQkJLS0tLS0tLS0tLSA+CisJCWNzY29wZV9jb25uZWN0aW9uKCkJCQkJCTEKKwkJY3Njb3BlX2Nvbm5lY3Rpb24oMSwgIm91dCIpCQkJCTEKKwkJY3Njb3BlX2Nvbm5lY3Rpb24oMiwgIm91dCIpCQkJCTAKKwkJY3Njb3BlX2Nvbm5lY3Rpb24oMywgIm91dCIpCQkJCTAKKwkJY3Njb3BlX2Nvbm5lY3Rpb24oMywgIm91dCIsICJsb2NhbCIpCQkJMQorCQljc2NvcGVfY29ubmVjdGlvbig0LCAib3V0IikJCQkJMAorCQljc2NvcGVfY29ubmVjdGlvbig0LCAib3V0IiwgImxvY2FsIikJCQkwCisJCWNzY29wZV9jb25uZWN0aW9uKDQsICJjc2NvcGUub3V0IiwgIi91c3IvbG9jYWwiKQkxCis8CitjdXJzb3Ioe2xudW19LCB7Y29sfSkJCQkJCSpjdXJzb3IoKSoKKwkJUG9zaXRpb25zIHRoZSBjdXJzb3IgYXQgdGhlIGNvbHVtbiB7Y29sfSBpbiB0aGUgbGluZSB7bG51bX0uCisJCURvZXMgbm90IGNoYW5nZSB0aGUganVtcGxpc3QuCisJCUlmIHtsbnVtfSBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgYnVmZmVyLAorCQl0aGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIuCisJCUlmIHtsbnVtfSBpcyB6ZXJvLCB0aGUgY3Vyc29yIHdpbGwgc3RheSBpbiB0aGUgY3VycmVudCBsaW5lLgorCQlJZiB7Y29sfSBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBsaW5lLAorCQl0aGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlCisJCWxpbmUuCisJCUlmIHtjb2x9IGlzIHplcm8sIHRoZSBjdXJzb3Igd2lsbCBzdGF5IGluIHRoZSBjdXJyZW50IGNvbHVtbi4KKworCQkJCQkJCSpkZWxldGUoKSoKK2RlbGV0ZSh7Zm5hbWV9KQlEZWxldGVzIHRoZSBmaWxlIGJ5IHRoZSBuYW1lIHtmbmFtZX0uICBUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLAorCQl3aGljaCBpcyAwIGlmIHRoZSBmaWxlIHdhcyBkZWxldGVkIHN1Y2Nlc3NmdWxseSwgYW5kIG5vbi16ZXJvCisJCXdoZW4gdGhlIGRlbGV0aW9uIGZhaWxlZC4KKworCQkJCQkJCSpkaWRfZmlsZXR5cGUoKSoKK2RpZF9maWxldHlwZSgpCVJldHVybnMgbm9uLXplcm8gd2hlbiBhdXRvY29tbWFuZHMgYXJlIGJlaW5nIGV4ZWN1dGVkIGFuZCB0aGUKKwkJRmlsZVR5cGUgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkIGF0IGxlYXN0IG9uY2UuICBDYW4gYmUgdXNlZAorCQl0byBhdm9pZCB0cmlnZ2VyaW5nIHRoZSBGaWxlVHlwZSBldmVudCBhZ2FpbiBpbiB0aGUgc2NyaXB0cworCQl0aGF0IGRldGVjdCB0aGUgZmlsZSB0eXBlLiB8RmlsZVR5cGV8CisJCVdoZW4gZWRpdGluZyBhbm90aGVyIGZpbGUsIHRoZSBjb3VudGVyIGlzIHJlc2V0LCB0aHVzIHRoaXMKKwkJcmVhbGx5IGNoZWNrcyBpZiB0aGUgRmlsZVR5cGUgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkIGZvciB0aGUKKwkJY3VycmVudCBidWZmZXIuICBUaGlzIGFsbG93cyBhbiBhdXRvY29tbWFuZCB0aGF0IHN0YXJ0cworCQllZGl0aW5nIGFub3RoZXIgYnVmZmVyIHRvIHNldCAnZmlsZXR5cGUnIGFuZCBsb2FkIGEgc3ludGF4CisJCWZpbGUuCisKK2VzY2FwZSh7c3RyaW5nfSwge2NoYXJzfSkJCQkJKmVzY2FwZSgpKgorCQlFc2NhcGUgdGhlIGNoYXJhY3RlcnMgaW4ge2NoYXJzfSB0aGF0IG9jY3VyIGluIHtzdHJpbmd9IHdpdGggYQorCQliYWNrc2xhc2guICBFeGFtcGxlOiA+CisJCQk6ZWNobyBlc2NhcGUoJ2M6XHByb2dyYW0gZmlsZXNcdmltJywgJyBcJykKKzwJCXJlc3VsdHMgaW46ID4KKwkJCWM6XFxwcm9ncmFtXCBmaWxlc1xcdmltCis8CitldmVudGhhbmRsZXIoKQkJCQkJCSpldmVudGhhbmRsZXIoKSoKKwkJUmV0dXJucyAxIHdoZW4gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXIuICBUaGF0IGlzIHRoYXQgVmltIGdvdAorCQlpbnRlcnJ1cHRlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdXNlciB0byB0eXBlIGEgY2hhcmFjdGVyLAorCQllLmcuLCB3aGVuIGRyb3BwaW5nIGEgZmlsZSBvbiBWaW0uICBUaGlzIG1lYW5zIGludGVyYWN0aXZlCisJCWNvbW1hbmRzIGNhbm5vdCBiZSB1c2VkLiAgT3RoZXJ3aXNlIHplcm8gaXMgcmV0dXJuZWQuCisKK2V4ZWN1dGFibGUoe2V4cHJ9KQkJCQkJKmV4ZWN1dGFibGUoKSoKKwkJVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYW4gZXhlY3V0YWJsZSB3aXRoIHRoZSBuYW1lIHtleHByfQorCQlleGlzdHMuICB7ZXhwcn0gbXVzdCBiZSB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB3aXRob3V0IGFueQorCQlhcmd1bWVudHMuICBleGVjdXRhYmxlKCkgdXNlcyB0aGUgbm9ybWFsICRQQVRILgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyOgorCQkJMQlleGlzdHMKKwkJCTAJZG9lcyBub3QgZXhpc3QKKwkJCS0xCW5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHN5c3RlbQorCisJCQkJCQkJKmV4aXN0cygpKgorZXhpc3RzKHtleHByfSkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgbm9uLXplcm8gaWYge2V4cHJ9IGlzCisJCWRlZmluZWQsIHplcm8gb3RoZXJ3aXNlLiAgVGhlIHtleHByfSBhcmd1bWVudCBpcyBhIHN0cmluZywKKwkJd2hpY2ggY29udGFpbnMgb25lIG9mIHRoZXNlOgorCQkJJm9wdGlvbi1uYW1lCVZpbSBvcHRpb24gKG9ubHkgY2hlY2tzIGlmIGl0IGV4aXN0cywKKwkJCQkJbm90IGlmIGl0IHJlYWxseSB3b3JrcykKKwkJCStvcHRpb24tbmFtZQlWaW0gb3B0aW9uIHRoYXQgd29ya3MuCisJCQkkRU5WTkFNRQllbnZpcm9ubWVudCB2YXJpYWJsZSAoY291bGQgYWxzbyBiZQorCQkJCQlkb25lIGJ5IGNvbXBhcmluZyB3aXRoIGFuIGVtcHR5CisJCQkJCXN0cmluZykKKwkJCSpmdW5jbmFtZQlidWlsdC1pbiBmdW5jdGlvbiAoc2VlIHxmdW5jdGlvbnN8KQorCQkJCQlvciB1c2VyIGRlZmluZWQgZnVuY3Rpb24gKHNlZQorCQkJCQl8dXNlci1mdW5jdGlvbnN8KS4KKwkJCXZhcm5hbWUJCWludGVybmFsIHZhcmlhYmxlIChzZWUKKwkJCQkJfGludGVybmFsLXZhcmlhYmxlc3wpLiAgRG9lcyBub3Qgd29yaworCQkJCQlmb3IgfGN1cmx5LWJyYWNlcy1uYW1lc3wuCisJCQk6Y21kbmFtZQlFeCBjb21tYW5kOiBidWlsdC1pbiBjb21tYW5kLCB1c2VyCisJCQkJCWNvbW1hbmQgb3IgY29tbWFuZCBtb2RpZmllciB8OmNvbW1hbmR8LgorCQkJCQlSZXR1cm5zOgorCQkJCQkxICBmb3IgbWF0Y2ggd2l0aCBzdGFydCBvZiBhIGNvbW1hbmQKKwkJCQkJMiAgZnVsbCBtYXRjaCB3aXRoIGEgY29tbWFuZAorCQkJCQkzICBtYXRjaGVzIHNldmVyYWwgdXNlciBjb21tYW5kcworCQkJCQlUbyBjaGVjayBmb3IgYSBzdXBwb3J0ZWQgY29tbWFuZAorCQkJCQlhbHdheXMgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSB0byBiZSAyLgorCQkJI2V2ZW50CQlhdXRvY29tbWFuZCBkZWZpbmVkIGZvciB0aGlzIGV2ZW50CisJCQkjZXZlbnQjcGF0dGVybglhdXRvY29tbWFuZCBkZWZpbmVkIGZvciB0aGlzIGV2ZW50IGFuZAorCQkJCQlwYXR0ZXJuICh0aGUgcGF0dGVybiBpcyB0YWtlbgorCQkJCQlsaXRlcmFsbHkgYW5kIGNvbXBhcmVkIHRvIHRoZQorCQkJCQlhdXRvY29tbWFuZCBwYXR0ZXJucyBjaGFyYWN0ZXIgYnkKKwkJCQkJY2hhcmFjdGVyKQorCQlGb3IgY2hlY2tpbmcgZm9yIGEgc3VwcG9ydGVkIGZlYXR1cmUgdXNlIHxoYXMoKXwuCisKKwkJRXhhbXBsZXM6ID4KKwkJCWV4aXN0cygiJnNob3J0bmFtZSIpCisJCQlleGlzdHMoIiRIT1NUTkFNRSIpCisJCQlleGlzdHMoIipzdHJmdGltZSIpCisJCQlleGlzdHMoIipzOk15RnVuYyIpCisJCQlleGlzdHMoImJ1ZmNvdW50IikKKwkJCWV4aXN0cygiOk1ha2UiKQorCQkJZXhpc3RzKCIjQ3Vyc29ySG9sZCIpOworCQkJZXhpc3RzKCIjQnVmUmVhZFByZSMqLmd6IikKKzwJCVRoZXJlIG11c3QgYmUgbm8gc3BhY2UgYmV0d2VlbiB0aGUgc3ltYm9sICgmLyQvKi8jKSBhbmQgdGhlCisJCW5hbWUuCisJCU5vdGUgdGhhdCB0aGUgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgbm90IHRoZSBuYW1lIG9mIHRoZQorCQl2YXJpYWJsZSBpdHNlbGYhICBGb3IgZXhhbXBsZTogPgorCQkJZXhpc3RzKGJ1ZmNvdW50KQorPAkJVGhpcyBkb2Vzbid0IGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgdGhlICJidWZjb3VudCIgdmFyaWFibGUsCisJCWJ1dCBnZXRzIHRoZSBjb250ZW50cyBvZiAiYnVmY291bnQiLCBhbmQgY2hlY2tzIGlmIHRoYXQKKwkJZXhpc3RzLgorCitleHBhbmQoe2V4cHJ9IFssIHtmbGFnfV0pCQkJCSpleHBhbmQoKSoKKwkJRXhwYW5kIHdpbGRjYXJkcyBhbmQgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGtleXdvcmRzIGluIHtleHByfS4KKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZy4KKworCQlXaGVuIHRoZXJlIGFyZSBzZXZlcmFsIG1hdGNoZXMsIHRoZXkgYXJlIHNlcGFyYXRlZCBieSA8Tkw+CisJCWNoYXJhY3RlcnMuICBbTm90ZTogaW4gdmVyc2lvbiA1LjAgYSBzcGFjZSB3YXMgdXNlZCwgd2hpY2gKKwkJY2F1c2VkIHByb2JsZW1zIHdoZW4gYSBmaWxlIG5hbWUgY29udGFpbnMgYSBzcGFjZV0KKworCQlJZiB0aGUgZXhwYW5zaW9uIGZhaWxzLCB0aGUgcmVzdWx0IGlzIGFuIGVtcHR5IHN0cmluZy4gIEEgbmFtZQorCQlmb3IgYSBub24tZXhpc3RpbmcgZmlsZSBpcyBub3QgaW5jbHVkZWQuCisKKwkJV2hlbiB7ZXhwcn0gc3RhcnRzIHdpdGggJyUnLCAnIycgb3IgJzwnLCB0aGUgZXhwYW5zaW9uIGlzIGRvbmUKKwkJbGlrZSBmb3IgdGhlIHxjbWRsaW5lLXNwZWNpYWx8IHZhcmlhYmxlcyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQKKwkJbW9kaWZpZXJzLiAgSGVyZSBpcyBhIHNob3J0IG92ZXJ2aWV3OgorCisJCQklCQljdXJyZW50IGZpbGUgbmFtZQorCQkJIwkJYWx0ZXJuYXRlIGZpbGUgbmFtZQorCQkJI24JCWFsdGVybmF0ZSBmaWxlIG5hbWUgbgorCQkJPGNmaWxlPgkJZmlsZSBuYW1lIHVuZGVyIHRoZSBjdXJzb3IKKwkJCTxhZmlsZT4JCWF1dG9jbWQgZmlsZSBuYW1lCisJCQk8YWJ1Zj4JCWF1dG9jbWQgYnVmZmVyIG51bWJlciAoYXMgYSBTdHJpbmchKQorCQkJPGFtYXRjaD4JYXV0b2NtZCBtYXRjaGVkIG5hbWUKKwkJCTxzZmlsZT4JCXNvdXJjZWQgc2NyaXB0IGZpbGUgbmFtZQorCQkJPGN3b3JkPgkJd29yZCB1bmRlciB0aGUgY3Vyc29yCisJCQk8Y1dPUkQ+CQlXT1JEIHVuZGVyIHRoZSBjdXJzb3IKKwkJCTxjbGllbnQ+CXRoZSB7Y2xpZW50aWR9IG9mIHRoZSBsYXN0IHJlY2VpdmVkCisJCQkJCW1lc3NhZ2UgfHNlcnZlcjJjbGllbnQoKXwKKwkJTW9kaWZpZXJzOgorCQkJOnAJCWV4cGFuZCB0byBmdWxsIHBhdGgKKwkJCTpoCQloZWFkIChsYXN0IHBhdGggY29tcG9uZW50IHJlbW92ZWQpCisJCQk6dAkJdGFpbCAobGFzdCBwYXRoIGNvbXBvbmVudCBvbmx5KQorCQkJOnIJCXJvb3QgKG9uZSBleHRlbnNpb24gcmVtb3ZlZCkKKwkJCTplCQlleHRlbnNpb24gb25seQorCisJCUV4YW1wbGU6ID4KKwkJCTpsZXQgJnRhZ3MgPSBleHBhbmQoIiU6cDpoIikgLiAiL3RhZ3MiCis8CQlOb3RlIHRoYXQgd2hlbiBleHBhbmRpbmcgYSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCAnJScsICcjJyBvcgorCQknPCcsIGFueSBmb2xsb3dpbmcgdGV4dCBpcyBpZ25vcmVkLiAgVGhpcyBkb2VzIE5PVCB3b3JrOiA+CisJCQk6bGV0IGRvZXNudHdvcmsgPSBleHBhbmQoIiU6aC5iYWsiKQorPAkJVXNlIHRoaXM6ID4KKwkJCTpsZXQgZG9lc3dvcmsgPSBleHBhbmQoIiU6aCIpIC4gIi5iYWsiCis8CQlBbHNvIG5vdGUgdGhhdCBleHBhbmRpbmcgIjxjZmlsZT4iIGFuZCBvdGhlcnMgb25seSByZXR1cm5zIHRoZQorCQlyZWZlcmVuY2VkIGZpbGUgbmFtZSB3aXRob3V0IGZ1cnRoZXIgZXhwYW5zaW9uLiAgSWYgIjxjZmlsZT4iCisJCWlzICJ+Ly5jc2hyYyIsIHlvdSBuZWVkIHRvIGRvIGFub3RoZXIgZXhwYW5kKCkgdG8gaGF2ZSB0aGUKKwkJIn4vIiBleHBhbmRlZCBpbnRvIHRoZSBwYXRoIG9mIHRoZSBob21lIGRpcmVjdG9yeTogPgorCQkJOmVjaG8gZXhwYW5kKGV4cGFuZCgiPGNmaWxlPiIpKQorPAorCQlUaGVyZSBjYW5ub3QgYmUgd2hpdGUgc3BhY2UgYmV0d2VlbiB0aGUgdmFyaWFibGVzIGFuZCB0aGUKKwkJZm9sbG93aW5nIG1vZGlmaWVyLiAgVGhlIHxmbmFtZW1vZGlmeSgpfCBmdW5jdGlvbiBjYW4gYmUgdXNlZAorCQl0byBtb2RpZnkgbm9ybWFsIGZpbGUgbmFtZXMuCisKKwkJV2hlbiB1c2luZyAnJScgb3IgJyMnLCBhbmQgdGhlIGN1cnJlbnQgb3IgYWx0ZXJuYXRlIGZpbGUgbmFtZQorCQlpcyBub3QgZGVmaW5lZCwgYW4gZW1wdHkgc3RyaW5nIGlzIHVzZWQuICBVc2luZyAiJTpwIiBpbiBhCisJCWJ1ZmZlciB3aXRoIG5vIG5hbWUsIHJlc3VsdHMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aXRoIGEKKwkJJy8nIGFkZGVkLgorCisJCVdoZW4ge2V4cHJ9IGRvZXMgbm90IHN0YXJ0IHdpdGggJyUnLCAnIycgb3IgJzwnLCBpdCBpcworCQlleHBhbmRlZCBsaWtlIGEgZmlsZSBuYW1lIGlzIGV4cGFuZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisJCSdzdWZmaXhlcycgYW5kICd3aWxkaWdub3JlJyBhcmUgdXNlZCwgdW5sZXNzIHRoZSBvcHRpb25hbAorCQl7ZmxhZ30gYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIGl0IGlzIG5vbi16ZXJvLiAgTmFtZXMgZm9yCisJCW5vbi1leGlzdGluZyBmaWxlcyBhcmUgaW5jbHVkZWQuCisKKwkJRXhwYW5kKCkgY2FuIGFsc28gYmUgdXNlZCB0byBleHBhbmQgdmFyaWFibGVzIGFuZCBlbnZpcm9ubWVudAorCQl2YXJpYWJsZXMgdGhhdCBhcmUgb25seSBrbm93biBpbiBhIHNoZWxsLiAgQnV0IHRoaXMgY2FuIGJlCisJCXNsb3csIGJlY2F1c2UgYSBzaGVsbCBtdXN0IGJlIHN0YXJ0ZWQuICBTZWUgfGV4cHItZW52LWV4cGFuZHwuCisJCVRoZSBleHBhbmRlZCB2YXJpYWJsZSBpcyBzdGlsbCBoYW5kbGVkIGxpa2UgYSBsaXN0IG9mIGZpbGUKKwkJbmFtZXMuICBXaGVuIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbm5vdCBiZSBleHBhbmRlZCwgaXQgaXMKKwkJbGVmdCB1bmNoYW5nZWQuICBUaHVzICI6ZWNobyBleHBhbmQoJyRGT09CQVInKSIgcmVzdWx0cyBpbgorCQkiJEZPT0JBUiIuCisKKwkJU2VlIHxnbG9iKCl8IGZvciBmaW5kaW5nIGV4aXN0aW5nIGZpbGVzLiAgU2VlIHxzeXN0ZW0oKXwgZm9yCisJCWdldHRpbmcgdGhlIHJhdyBvdXRwdXQgb2YgYW4gZXh0ZXJuYWwgY29tbWFuZC4KKworZmlsZXJlYWRhYmxlKHtmaWxlfSkJCQkJCSpmaWxlcmVhZGFibGUoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgVFJVRSB3aGVuIGEgZmlsZSB3aXRoIHRoZQorCQluYW1lIHtmaWxlfSBleGlzdHMsIGFuZCBjYW4gYmUgcmVhZC4gIElmIHtmaWxlfSBkb2Vzbid0IGV4aXN0LAorCQlvciBpcyBhIGRpcmVjdG9yeSwgdGhlIHJlc3VsdCBpcyBGQUxTRS4gIHtmaWxlfSBpcyBhbnkKKwkJZXhwcmVzc2lvbiwgd2hpY2ggaXMgdXNlZCBhcyBhIFN0cmluZy4KKwkJCQkJCQkqZmlsZV9yZWFkYWJsZSgpKgorCQlPYnNvbGV0ZSBuYW1lOiBmaWxlX3JlYWRhYmxlKCkuCisKK2ZpbGV3cml0YWJsZSh7ZmlsZX0pCQkJCQkqZmlsZXdyaXRhYmxlKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIDEgd2hlbiBhIGZpbGUgd2l0aCB0aGUKKwkJbmFtZSB7ZmlsZX0gZXhpc3RzLCBhbmQgY2FuIGJlIHdyaXR0ZW4uICBJZiB7ZmlsZX0gZG9lc24ndAorCQlleGlzdCwgb3IgaXMgbm90IHdyaXRhYmxlLCB0aGUgcmVzdWx0IGlzIDAuICBJZiAoZmlsZSkgaXMgYQorCQlkaXJlY3RvcnksIGFuZCB3ZSBjYW4gd3JpdGUgdG8gaXQsIHRoZSByZXN1bHQgaXMgMi4KKworZm5hbWVtb2RpZnkoe2ZuYW1lfSwge21vZHN9KQkJCQkqZm5hbWVtb2RpZnkoKSoKKwkJTW9kaWZ5IGZpbGUgbmFtZSB7Zm5hbWV9IGFjY29yZGluZyB0byB7bW9kc30uICB7bW9kc30gaXMgYQorCQlzdHJpbmcgb2YgY2hhcmFjdGVycyBsaWtlIGl0IGlzIHVzZWQgZm9yIGZpbGUgbmFtZXMgb24gdGhlCisJCWNvbW1hbmQgbGluZS4gIFNlZSB8ZmlsZW5hbWUtbW9kaWZpZXJzfC4KKwkJRXhhbXBsZTogPgorCQkJOmVjaG8gZm5hbWVtb2RpZnkoIm1haW4uYyIsICI6cDpoIikKKzwJCXJlc3VsdHMgaW46ID4KKwkJCS9ob21lL21vb2wvdmltL3ZpbS9zcmMKKzwJCU5vdGU6IEVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgIn4iIGRvbid0IHdvcmsgaW4ge2ZuYW1lfSwgdXNlCisJCXxleHBhbmQoKXwgZmlyc3QgdGhlbi4KKworZm9sZGNsb3NlZCh7bG51bX0pCQkJCQkqZm9sZGNsb3NlZCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLiAgSWYgdGhlIGxpbmUge2xudW19IGlzIGluIGEgY2xvc2VkCisJCWZvbGQsIHRoZSByZXN1bHQgaXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgbGluZSBpbiB0aGF0IGZvbGQuCisJCUlmIHRoZSBsaW5lIHtsbnVtfSBpcyBub3QgaW4gYSBjbG9zZWQgZm9sZCwgLTEgaXMgcmV0dXJuZWQuCisKK2ZvbGRjbG9zZWRlbmQoe2xudW19KQkJCQkJKmZvbGRjbG9zZWRlbmQoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlci4gIElmIHRoZSBsaW5lIHtsbnVtfSBpcyBpbiBhIGNsb3NlZAorCQlmb2xkLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgbGluZSBpbiB0aGF0IGZvbGQuCisJCUlmIHRoZSBsaW5lIHtsbnVtfSBpcyBub3QgaW4gYSBjbG9zZWQgZm9sZCwgLTEgaXMgcmV0dXJuZWQuCisKK2ZvbGRsZXZlbCh7bG51bX0pCQkJCQkqZm9sZGxldmVsKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBmb2xkbGV2ZWwgb2YgbGluZSB7bG51bX0KKwkJaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAgRm9yIG5lc3RlZCBmb2xkcyB0aGUgZGVlcGVzdCBsZXZlbCBpcworCQlyZXR1cm5lZC4gIElmIHRoZXJlIGlzIG5vIGZvbGQgYXQgbGluZSB7bG51bX0sIHplcm8gaXMKKwkJcmV0dXJuZWQuICBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUgZm9sZHMgYXJlIG9wZW4gb3IgY2xvc2VkLgorCQlXaGVuIHVzZWQgd2hpbGUgdXBkYXRpbmcgZm9sZHMgKGZyb20gJ2ZvbGRleHByJykgLTEgaXMKKwkJcmV0dXJuZWQgZm9yIGxpbmVzIHdoZXJlIGZvbGRzIGFyZSBzdGlsbCB0byBiZSB1cGRhdGVkIGFuZCB0aGUKKwkJZm9sZGxldmVsIGlzIHVua25vd24uICBBcyBhIHNwZWNpYWwgY2FzZSB0aGUgbGV2ZWwgb2YgdGhlCisJCXByZXZpb3VzIGxpbmUgaXMgdXN1YWxseSBhdmFpbGFibGUuCisKKwkJCQkJCQkqZm9sZHRleHQoKSoKK2ZvbGR0ZXh0KCkJUmV0dXJucyBhIFN0cmluZywgdG8gYmUgZGlzcGxheWVkIGZvciBhIGNsb3NlZCBmb2xkLiAgVGhpcyBpcworCQl0aGUgZGVmYXVsdCBmdW5jdGlvbiB1c2VkIGZvciB0aGUgJ2ZvbGR0ZXh0JyBvcHRpb24gYW5kIHNob3VsZAorCQlvbmx5IGJlIGNhbGxlZCBmcm9tIGV2YWx1YXRpbmcgJ2ZvbGR0ZXh0Jy4gIEl0IHVzZXMgdGhlCisJCXx2OmZvbGRzdGFydHwsIHx2OmZvbGRlbmR8IGFuZCB8djpmb2xkZGFzaGVzfCB2YXJpYWJsZXMuCisJCVRoZSByZXR1cm5lZCBzdHJpbmcgbG9va3MgbGlrZSB0aGlzOiA+CisJCQkrLS0gNDUgbGluZXM6IGFiY2RlZgorPAkJVGhlIG51bWJlciBvZiBkYXNoZXMgZGVwZW5kcyBvbiB0aGUgZm9sZGxldmVsLiAgVGhlICI0NSIgaXMKKwkJdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZm9sZC4gICJhYmNkZWYiIGlzIHRoZSB0ZXh0IGluIHRoZQorCQlmaXJzdCBub24tYmxhbmsgbGluZSBvZiB0aGUgZm9sZC4gIExlYWRpbmcgd2hpdGUgc3BhY2UsICIvLyIKKwkJb3IgIi8qIiBhbmQgdGhlIHRleHQgZnJvbSB0aGUgJ2ZvbGRtYXJrZXInIGFuZCAnY29tbWVudHN0cmluZycKKwkJb3B0aW9ucyBpcyByZW1vdmVkLgorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wgZmVhdHVyZX0KKworCQkJCQkJCSpmb3JlZ3JvdW5kKCkqCitmb3JlZ3JvdW5kKCkJTW92ZSB0aGUgVmltIHdpbmRvdyB0byB0aGUgZm9yZWdyb3VuZC4gIFVzZWZ1bCB3aGVuIHNlbnQgZnJvbQorCQlhIGNsaWVudCB0byBhIFZpbSBzZXJ2ZXIuIHxyZW1vdGVfc2VuZCgpfAorCQlPbiBXaW4zMiBzeXN0ZW1zIHRoaXMgbWlnaHQgbm90IHdvcmssIHRoZSBPUyBkb2VzIG5vdCBhbHdheXMKKwkJYWxsb3cgYSB3aW5kb3cgdG8gYnJpbmcgaXRzZWxmIHRvIHRoZSBmb3JlZ3JvdW5kLiAgVXNlCisJCXxyZW1vdGVfZm9yZWdyb3VuZCgpfCBpbnN0ZWFkLgorCQl7b25seSBpbiB0aGUgV2luMzIsIEF0aGVuYSwgTW90aWYgYW5kIEdUSyBHVUkgdmVyc2lvbnMgYW5kIHRoZQorCQlXaW4zMiBjb25zb2xlIHZlcnNpb259CisKK2dldGNoYXIoW2V4cHJdKQkJCQkJCSpnZXRjaGFyKCkqCisJCUdldCBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSB0aGUgdXNlci4gIElmIGl0IGlzIGFuIDgtYml0CisJCWNoYXJhY3RlciwgdGhlIHJlc3VsdCBpcyBhIG51bWJlci4gIE90aGVyd2lzZSBhIFN0cmluZyBpcworCQlyZXR1cm5lZCB3aXRoIHRoZSBlbmNvZGVkIGNoYXJhY3Rlci4gIEZvciBhIHNwZWNpYWwga2V5IGl0J3MgYQorCQlzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4ODAgKGRlY2ltYWw6IDEyOCkuCisJCUlmIFtleHByXSBpcyBvbWl0dGVkLCB3YWl0IHVudGlsIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZS4KKwkJSWYgW2V4cHJdIGlzIDAsIG9ubHkgZ2V0IGEgY2hhcmFjdGVyIHdoZW4gb25lIGlzIGF2YWlsYWJsZS4KKwkJSWYgW2V4cHJdIGlzIDEsIG9ubHkgY2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlLCBpdCBpcworCQkJCW5vdCBjb25zdW1lZC4gIElmIGEgbm9ybWFsIGNoYXJhY3RlciBpcworCQkJCWF2YWlsYWJsZSwgaXQgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBhCisJCQkJbm9uLXplcm8gdmFsdWUgaXMgcmV0dXJuZWQuCisJCUlmIGEgbm9ybWFsIGNoYXJhY3RlciBhdmFpbGFibGUsIGl0IGlzIHJldHVybmVkIGFzIGEgTnVtYmVyLgorCQlVc2UgbnIyY2hhcigpIHRvIGNvbnZlcnQgaXQgdG8gYSBTdHJpbmcuCisJCVRoZSByZXR1cm5lZCB2YWx1ZSBpcyB6ZXJvIGlmIG5vIGNoYXJhY3RlciBpcyBhdmFpbGFibGUuCisJCVRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGZvciBzcGVjaWFsIGtleXMKKwkJYW5kIHdoZW4gYSBtb2RpZmllciAoc2hpZnQsIGNvbnRyb2wsIGFsdCkgd2FzIHVzZWQuCisJCVRoZXJlIGlzIG5vIHByb21wdCwgeW91IHdpbGwgc29tZWhvdyBoYXZlIHRvIG1ha2UgY2xlYXIgdG8gdGhlCisJCXVzZXIgdGhhdCBhIGNoYXJhY3RlciBoYXMgdG8gYmUgdHlwZWQuCisJCVRoZXJlIGlzIG5vIG1hcHBpbmcgZm9yIHRoZSBjaGFyYWN0ZXIuCisJCUtleSBjb2RlcyBhcmUgcmVwbGFjZWQsIHRodXMgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSA8RGVsPgorCQlrZXkgeW91IGdldCB0aGUgY29kZSBmb3IgdGhlIDxEZWw+IGtleSwgbm90IHRoZSByYXcgY2hhcmFjdGVyCisJCXNlcXVlbmNlLiAgRXhhbXBsZXM6ID4KKwkJCWdldGNoYXIoKSA9PSAiXDxEZWw+IgorCQkJZ2V0Y2hhcigpID09ICJcPFMtTGVmdD4iCis8CQlUaGlzIGV4YW1wbGUgcmVkZWZpbmVzICJmIiB0byBpZ25vcmUgY2FzZTogPgorCQkJOm5tYXAgZiA6Y2FsbCBGaW5kQ2hhcigpPENSPgorCQkJOmZ1bmN0aW9uIEZpbmRDaGFyKCkKKwkJCTogIGxldCBjID0gbnIyY2hhcihnZXRjaGFyKCkpCisJCQk6ICB3aGlsZSBjb2woJy4nKSA8IGNvbCgnJCcpIC0gMQorCQkJOiAgICBub3JtYWwgbAorCQkJOiAgICBpZiBnZXRsaW5lKCcuJylbY29sKCcuJykgLSAxXSA9PT8gYworCQkJOiAgICAgIGJyZWFrCisJCQk6ICAgIGVuZGlmCisJCQk6ICBlbmR3aGlsZQorCQkJOmVuZGZ1bmN0aW9uCisKK2dldGNoYXJtb2QoKQkJCQkJCSpnZXRjaGFybW9kKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIgd2hpY2ggaXMgdGhlIHN0YXRlIG9mIHRoZSBtb2RpZmllcnMgZm9yCisJCXRoZSBsYXN0IG9idGFpbmVkIGNoYXJhY3RlciB3aXRoIGdldGNoYXIoKSBvciBpbiBhbm90aGVyIHdheS4KKwkJVGhlc2UgdmFsdWVzIGFyZSBhZGRlZCB0b2dldGhlcjoKKwkJCTIJc2hpZnQKKwkJCTQJY29udHJvbAorCQkJOAlhbHQgKG1ldGEpCisJCQkxNgltb3VzZSBkb3VibGUgY2xpY2sKKwkJCTMyCW1vdXNlIHRyaXBsZSBjbGljaworCQkJNjQJbW91c2UgcXVhZHJ1cGxlIGNsaWNrCisJCQkxMjgJTWFjaW50b3NoIG9ubHk6IGNvbW1hbmQKKwkJT25seSB0aGUgbW9kaWZpZXJzIHRoYXQgaGF2ZSBub3QgYmVlbiBpbmNsdWRlZCBpbiB0aGUKKwkJY2hhcmFjdGVyIGl0c2VsZiBhcmUgb2J0YWluZWQuICBUaHVzIFNoaWZ0LWEgcmVzdWx0cyBpbiAiQSIKKwkJd2l0aCBubyBtb2RpZmllci4KKworZ2V0YnVmdmFyKHtleHByfSwge3Zhcm5hbWV9KQkJCQkqZ2V0YnVmdmFyKCkqCisJCVRoZSByZXN1bHQgaXMgdGhlIHZhbHVlIG9mIG9wdGlvbiBvciBsb2NhbCBidWZmZXIgdmFyaWFibGUKKwkJe3Zhcm5hbWV9IGluIGJ1ZmZlciB7ZXhwcn0uICBOb3RlIHRoYXQgdGhlIG5hbWUgd2l0aG91dCAiYjoiCisJCW11c3QgYmUgdXNlZC4KKwkJVGhpcyBhbHNvIHdvcmtzIGZvciBhIGdsb2JhbCBvciBsb2NhbCB3aW5kb3cgb3B0aW9uLCBidXQgaXQKKwkJZG9lc24ndCB3b3JrIGZvciBhIGdsb2JhbCBvciBsb2NhbCB3aW5kb3cgdmFyaWFibGUuCisJCUZvciB0aGUgdXNlIG9mIHtleHByfSwgc2VlIHxidWZuYW1lKCl8IGFib3ZlLgorCQlXaGVuIHRoZSBidWZmZXIgb3IgdmFyaWFibGUgZG9lc24ndCBleGlzdCBhbiBlbXB0eSBzdHJpbmcgaXMKKwkJcmV0dXJuZWQsIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuCisJCUV4YW1wbGVzOiA+CisJCQk6bGV0IGJ1Zm1vZGlmaWVkID0gZ2V0YnVmdmFyKDEsICImbW9kIikKKwkJCTplY2hvICJ0b2RvIG15dmFyID0gIiAuIGdldGJ1ZnZhcigidG9kbyIsICJteXZhciIpCis8CitnZXRjbWRsaW5lKCkJCQkJCQkqZ2V0Y21kbGluZSgpKgorCQlSZXR1cm4gdGhlIGN1cnJlbnQgY29tbWFuZC1saW5lLiAgT25seSB3b3JrcyB3aGVuIHRoZSBjb21tYW5kCisJCWxpbmUgaXMgYmVpbmcgZWRpdGVkLCB0aHVzIHJlcXVpcmVzIHVzZSBvZiB8Y19DVFJMLVxfZXwgb3IKKwkJfGNfQ1RSTC1SXz18LgorCQlFeGFtcGxlOiA+CisJCQk6Y21hcCA8Rjc+IDxDLVw+ZWVzY2FwZShnZXRjbWRsaW5lKCksICcgXCcpPENSPgorPAkJQWxzbyBzZWUgfGdldGNtZHBvcygpfCBhbmQgfHNldGNtZHBvcygpfC4KKworZ2V0Y21kcG9zKHtwb3N9KQkJCQkJKmdldGNtZHBvcygpKgorCQlSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IgaW4gdGhlIGNvbW1hbmQgbGluZSBhcyBhCisJCWJ5dGUgY291bnQuICBUaGUgZmlyc3QgY29sdW1uIGlzIDEuCisJCU9ubHkgd29ya3Mgd2hlbiBlZGl0aW5nIHRoZSBjb21tYW5kIGxpbmUsIHRodXMgcmVxdWlyZXMgdXNlIG9mCisJCXxjX0NUUkwtXF9lfCBvciB8Y19DVFJMLVJfPXwuICBSZXR1cm5zIDAgb3RoZXJ3aXNlLgorCQlBbHNvIHNlZSB8c2V0Y21kcG9zKCl8IGFuZCB8Z2V0Y21kbGluZSgpfC4KKworCQkJCQkJCSpnZXRjd2QoKSoKK2dldGN3ZCgpCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50CisJCXdvcmtpbmcgZGlyZWN0b3J5LgorCitnZXRmc2l6ZSh7Zm5hbWV9KQkJCQkJKmdldGZzaXplKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZQorCQlnaXZlbiBmaWxlIHtmbmFtZX0uCisJCUlmIHtmbmFtZX0gaXMgYSBkaXJlY3RvcnksIDAgaXMgcmV0dXJuZWQuCisJCUlmIHRoZSBmaWxlIHtmbmFtZX0gY2FuJ3QgYmUgZm91bmQsIC0xIGlzIHJldHVybmVkLgorCitnZXRmdGltZSh7Zm5hbWV9KQkJCQkJKmdldGZ0aW1lKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mCisJCXRoZSBnaXZlbiBmaWxlIHtmbmFtZX0uICBUaGUgdmFsdWUgaXMgbWVhc3VyZWQgYXMgc2Vjb25kcworCQlzaW5jZSAxc3QgSmFuIDE5NzAsIGFuZCBtYXkgYmUgcGFzc2VkIHRvIHN0cmZ0aW1lKCkuICBTZWUgYWxzbworCQl8bG9jYWx0aW1lKCl8IGFuZCB8c3RyZnRpbWUoKXwuCisJCUlmIHRoZSBmaWxlIHtmbmFtZX0gY2FuJ3QgYmUgZm91bmQgLTEgaXMgcmV0dXJuZWQuCisKKwkJCQkJCQkqZ2V0bGluZSgpKgorZ2V0bGluZSh7bG51bX0pIFRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIGxpbmUge2xudW19IGZyb20gdGhlIGN1cnJlbnQKKwkJYnVmZmVyLiAgRXhhbXBsZTogPgorCQkJZ2V0bGluZSgxKQorPAkJV2hlbiB7bG51bX0gaXMgYSBTdHJpbmcgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggYQorCQlkaWdpdCwgbGluZSgpIGlzIGNhbGxlZCB0byB0cmFuc2xhdGUgdGhlIFN0cmluZyBpbnRvIGEgTnVtYmVyLgorCQlUbyBnZXQgdGhlIGxpbmUgdW5kZXIgdGhlIGN1cnNvcjogPgorCQkJZ2V0bGluZSgiLiIpCis8CQlXaGVuIHtsbnVtfSBpcyBzbWFsbGVyIHRoYW4gMSBvciBiaWdnZXIgdGhhbiB0aGUgbnVtYmVyIG9mCisJCWxpbmVzIGluIHRoZSBidWZmZXIsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKworZ2V0cmVnKFt7cmVnbmFtZX1dKQkJCQkJKmdldHJlZygpKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIKKwkJe3JlZ25hbWV9LiBFeGFtcGxlOiA+CisJCQk6bGV0IGNsaXB0ZXh0ID0gZ2V0cmVnKCcqJykKKzwJCWdldHJlZygnPScpIHJldHVybnMgdGhlIGxhc3QgZXZhbHVhdGVkIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uCisJCXJlZ2lzdGVyLiAoRm9yIHVzZSBpbiBtYXBzKS4KKwkJSWYge3JlZ25hbWV9IGlzIG5vdCBzcGVjaWZpZWQsIHx2OnJlZ2lzdGVyfCBpcyB1c2VkLgorCitnZXRyZWd0eXBlKFt7cmVnbmFtZX1dKQkJCQkJKmdldHJlZ3R5cGUoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMgdHlwZSBvZiByZWdpc3RlciB7cmVnbmFtZX0uCisJCVRoZSB2YWx1ZSB3aWxsIGJlIG9uZSBvZjoKKwkJICAgICJ2IgkJCWZvciB8Y2hhcmFjdGVyd2lzZXwgdGV4dAorCQkgICAgIlYiCQkJZm9yIHxsaW5ld2lzZXwgdGV4dAorCQkgICAgIjxDVFJMLVY+e3dpZHRofSIJZm9yIHxibG9ja3dpc2UtdmlzdWFsfCB0ZXh0CisJCSAgICAwCQkJZm9yIGFuIGVtcHR5IG9yIHVua25vd24gcmVnaXN0ZXIKKwkJPENUUkwtVj4gaXMgb25lIGNoYXJhY3RlciB3aXRoIHZhbHVlIDB4MTYuCisJCUlmIHtyZWduYW1lfSBpcyBub3Qgc3BlY2lmaWVkLCB8djpyZWdpc3RlcnwgaXMgdXNlZC4KKworCQkJCQkJCSpnZXR3aW5wb3N4KCkqCitnZXR3aW5wb3N4KCkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIFggY29vcmRpbmF0ZSBpbiBwaXhlbHMgb2YKKwkJdGhlIGxlZnQgaGFuZCBzaWRlIG9mIHRoZSBHVUkgVmltIHdpbmRvdy4gIFRoZSByZXN1bHQgd2lsbCBiZQorCQktMSBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KKworCQkJCQkJCSpnZXR3aW5wb3N5KCkqCitnZXR3aW5wb3N5KCkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIFkgY29vcmRpbmF0ZSBpbiBwaXhlbHMgb2YKKwkJdGhlIHRvcCBvZiB0aGUgR1VJIFZpbSB3aW5kb3cuICBUaGUgcmVzdWx0IHdpbGwgYmUgLTEgaWYgdGhlCisJCWluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisKK2dldHdpbnZhcih7bnJ9LCB7dmFybmFtZX0pCQkJCSpnZXR3aW52YXIoKSoKKwkJVGhlIHJlc3VsdCBpcyB0aGUgdmFsdWUgb2Ygb3B0aW9uIG9yIGxvY2FsIHdpbmRvdyB2YXJpYWJsZQorCQl7dmFybmFtZX0gaW4gd2luZG93IHtucn0uCisJCVRoaXMgYWxzbyB3b3JrcyBmb3IgYSBnbG9iYWwgb3IgbG9jYWwgYnVmZmVyIG9wdGlvbiwgYnV0IGl0CisJCWRvZXNuJ3Qgd29yayBmb3IgYSBnbG9iYWwgb3IgbG9jYWwgYnVmZmVyIHZhcmlhYmxlLgorCQlOb3RlIHRoYXQgdGhlIG5hbWUgd2l0aG91dCAidzoiIG11c3QgYmUgdXNlZC4KKwkJRXhhbXBsZXM6ID4KKwkJCTpsZXQgbGlzdF9pc19vbiA9IGdldHdpbnZhcigyLCAnJmxpc3QnKQorCQkJOmVjaG8gIm15dmFyID0gIiAuIGdldHdpbnZhcigxLCAnbXl2YXInKQorPAorCQkJCQkJCSpnbG9iKCkqCitnbG9iKHtleHByfSkJRXhwYW5kIHRoZSBmaWxlIHdpbGRjYXJkcyBpbiB7ZXhwcn0uICBUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLgorCQlXaGVuIHRoZXJlIGFyZSBzZXZlcmFsIG1hdGNoZXMsIHRoZXkgYXJlIHNlcGFyYXRlZCBieSA8Tkw+CisJCWNoYXJhY3RlcnMuCisJCUlmIHRoZSBleHBhbnNpb24gZmFpbHMsIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgc3RyaW5nLgorCQlBIG5hbWUgZm9yIGEgbm9uLWV4aXN0aW5nIGZpbGUgaXMgbm90IGluY2x1ZGVkLgorCisJCUZvciBtb3N0IHN5c3RlbXMgYmFja3RpY2tzIGNhbiBiZSB1c2VkIHRvIGdldCBmaWxlcyBuYW1lcyBmcm9tCisJCWFueSBleHRlcm5hbCBjb21tYW5kLiAgRXhhbXBsZTogPgorCQkJOmxldCB0YWdmaWxlcyA9IGdsb2IoImBmaW5kIC4gLW5hbWUgdGFncyAtcHJpbnRgIikKKwkJCTpsZXQgJnRhZ3MgPSBzdWJzdGl0dXRlKHRhZ2ZpbGVzLCAiXG4iLCAiLCIsICJnIikKKzwJCVRoZSByZXN1bHQgb2YgdGhlIHByb2dyYW0gaW5zaWRlIHRoZSBiYWNrdGlja3Mgc2hvdWxkIGJlIG9uZQorCQlpdGVtIHBlciBsaW5lLiAgU3BhY2VzIGluc2lkZSBhbiBpdGVtIGFyZSBhbGxvd2VkLgorCisJCVNlZSB8ZXhwYW5kKCl8IGZvciBleHBhbmRpbmcgc3BlY2lhbCBWaW0gdmFyaWFibGVzLiAgU2VlCisJCXxzeXN0ZW0oKXwgZm9yIGdldHRpbmcgdGhlIHJhdyBvdXRwdXQgb2YgYW4gZXh0ZXJuYWwgY29tbWFuZC4KKworZ2xvYnBhdGgoe3BhdGh9LCB7ZXhwcn0pCQkJCSpnbG9icGF0aCgpKgorCQlQZXJmb3JtIGdsb2IoKSBvbiBhbGwgZGlyZWN0b3JpZXMgaW4ge3BhdGh9IGFuZCBjb25jYXRlbmF0ZQorCQl0aGUgcmVzdWx0cy4gIEV4YW1wbGU6ID4KKwkJCTplY2hvIGdsb2JwYXRoKCZydHAsICJzeW50YXgvYy52aW0iKQorPAkJe3BhdGh9IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzLiAgRWFjaAorCQlkaXJlY3RvcnkgbmFtZSBpcyBwcmVwZW5kZWQgdG8ge2V4cHJ9IGFuZCBleHBhbmRlZCBsaWtlIHdpdGgKKwkJZ2xvYigpLiAgQSBwYXRoIHNlcGFyYXRvciBpcyBpbnNlcnRlZCB3aGVuIG5lZWRlZC4KKwkJVG8gYWRkIGEgY29tbWEgaW5zaWRlIGEgZGlyZWN0b3J5IG5hbWUgZXNjYXBlIGl0IHdpdGggYQorCQliYWNrc2xhc2guICBOb3RlIHRoYXQgb24gTVMtV2luZG93cyBhIGRpcmVjdG9yeSBtYXkgaGF2ZSBhCisJCXRyYWlsaW5nIGJhY2tzbGFzaCwgcmVtb3ZlIGl0IGlmIHlvdSBwdXQgYSBjb21tYSBhZnRlciBpdC4KKwkJSWYgdGhlIGV4cGFuc2lvbiBmYWlscyBmb3Igb25lIG9mIHRoZSBkaXJlY3RvcmllcywgdGhlcmUgaXMgbm8KKwkJZXJyb3IgbWVzc2FnZS4KKwkJVGhlICd3aWxkaWdub3JlJyBvcHRpb24gYXBwbGllczogTmFtZXMgbWF0Y2hpbmcgb25lIG9mIHRoZQorCQlwYXR0ZXJucyBpbiAnd2lsZGlnbm9yZScgd2lsbCBiZSBza2lwcGVkLgorCisJCQkJCQkJKmhhcygpKgoraGFzKHtmZWF0dXJlfSkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgMSBpZiB0aGUgZmVhdHVyZSB7ZmVhdHVyZX0gaXMKKwkJc3VwcG9ydGVkLCB6ZXJvIG90aGVyd2lzZS4gIFRoZSB7ZmVhdHVyZX0gYXJndW1lbnQgaXMgYQorCQlzdHJpbmcuICBTZWUgfGZlYXR1cmUtbGlzdHwgYmVsb3cuCisJCUFsc28gc2VlIHxleGlzdHMoKXwuCisKK2hhc21hcHRvKHt3aGF0fSBbLCB7bW9kZX1dKQkJCQkqaGFzbWFwdG8oKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgMSBpZiB0aGVyZSBpcyBhIG1hcHBpbmcgdGhhdAorCQljb250YWlucyB7d2hhdH0gaW4gc29tZXdoZXJlIGluIHRoZSByaHMgKHdoYXQgaXQgaXMgbWFwcGVkIHRvKQorCQlhbmQgdGhpcyBtYXBwaW5nIGV4aXN0cyBpbiBvbmUgb2YgdGhlIG1vZGVzIGluZGljYXRlZCBieQorCQl7bW9kZX0uCisJCUJvdGggdGhlIGdsb2JhbCBtYXBwaW5ncyBhbmQgdGhlIG1hcHBpbmdzIGxvY2FsIHRvIHRoZSBjdXJyZW50CisJCWJ1ZmZlciBhcmUgY2hlY2tlZCBmb3IgYSBtYXRjaC4KKwkJSWYgbm8gbWF0Y2hpbmcgbWFwcGluZyBpcyBmb3VuZCAwIGlzIHJldHVybmVkLgorCQlUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIHJlY29nbml6ZWQgaW4ge21vZGV9OgorCQkJbglOb3JtYWwgbW9kZQorCQkJdglWaXN1YWwgbW9kZQorCQkJbwlPcGVyYXRvci1wZW5kaW5nIG1vZGUKKwkJCWkJSW5zZXJ0IG1vZGUKKwkJCWwJTGFuZ3VhZ2UtQXJndW1lbnQgKCJyIiwgImYiLCAidCIsIGV0Yy4pCisJCQljCUNvbW1hbmQtbGluZSBtb2RlCisJCVdoZW4ge21vZGV9IGlzIG9taXR0ZWQsICJudm8iIGlzIHVzZWQuCisKKwkJVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG8gY2hlY2sgaWYgYSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzCisJCXRvIGEgZnVuY3Rpb24gaW4gYSBWaW0gc2NyaXB0LiAgRXhhbXBsZTogPgorCQkJOmlmICFoYXNtYXB0bygnXEFCQ2RvaXQnKQorCQkJOiAgIG1hcCA8TGVhZGVyPmQgXEFCQ2RvaXQKKwkJCTplbmRpZgorPAkJVGhpcyBpbnN0YWxscyB0aGUgbWFwcGluZyB0byAiXEFCQ2RvaXQiIG9ubHkgaWYgdGhlcmUgaXNuJ3QKKwkJYWxyZWFkeSBhIG1hcHBpbmcgdG8gIlxBQkNkb2l0Ii4KKworaGlzdGFkZCh7aGlzdG9yeX0sIHtpdGVtfSkJCQkJKmhpc3RhZGQoKSoKKwkJQWRkIHRoZSBTdHJpbmcge2l0ZW19IHRvIHRoZSBoaXN0b3J5IHtoaXN0b3J5fSB3aGljaCBjYW4gYmUKKwkJb25lIG9mOgkJCQkJKmhpc3QtbmFtZXMqCisJCQkiY21kIgkgb3IgIjoiCSAgY29tbWFuZCBsaW5lIGhpc3RvcnkKKwkJCSJzZWFyY2giIG9yICIvIiAgIHNlYXJjaCBwYXR0ZXJuIGhpc3RvcnkKKwkJCSJleHByIiAgIG9yICI9IiAgIHR5cGVkIGV4cHJlc3Npb24gaGlzdG9yeQorCQkJImlucHV0IiAgb3IgIkAiCSAgaW5wdXQgbGluZSBoaXN0b3J5CisJCUlmIHtpdGVtfSBkb2VzIGFscmVhZHkgZXhpc3QgaW4gdGhlIGhpc3RvcnksIGl0IHdpbGwgYmUKKwkJc2hpZnRlZCB0byBiZWNvbWUgdGhlIG5ld2VzdCBlbnRyeS4KKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlcjogMSBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLAorCQlvdGhlcndpc2UgMCBpcyByZXR1cm5lZC4KKworCQlFeGFtcGxlOiA+CisJCQk6Y2FsbCBoaXN0YWRkKCJpbnB1dCIsIHN0cmZ0aW1lKCIlWSAlYiAlZCIpKQorCQkJOmxldCBkYXRlPWlucHV0KCJFbnRlciBkYXRlOiAiKQorPAkJVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB8c2FuZGJveHwuCisKK2hpc3RkZWwoe2hpc3Rvcnl9IFssIHtpdGVtfV0pCQkJCSpoaXN0ZGVsKCkqCisJCUNsZWFyIHtoaXN0b3J5fSwgaWUuIGRlbGV0ZSBhbGwgaXRzIGVudHJpZXMuICBTZWUgfGhpc3QtbmFtZXN8CisJCWZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHtoaXN0b3J5fS4KKworCQlJZiB0aGUgcGFyYW1ldGVyIHtpdGVtfSBpcyBnaXZlbiBhcyBTdHJpbmcsIHRoaXMgaXMgc2VlbgorCQlhcyByZWd1bGFyIGV4cHJlc3Npb24uICBBbGwgZW50cmllcyBtYXRjaGluZyB0aGF0IGV4cHJlc3Npb24KKwkJd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGhpc3RvcnkgKGlmIHRoZXJlIGFyZSBhbnkpLgorCQlVcHBlci9sb3dlcmNhc2UgbXVzdCBtYXRjaCwgdW5sZXNzICJcYyIgaXMgdXNlZCB8L1xjfC4KKwkJSWYge2l0ZW19IGlzIGEgTnVtYmVyLCBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGluZGV4LCBzZWUKKwkJfDpoaXN0b3J5LWluZGV4aW5nfC4gIFRoZSByZXNwZWN0aXZlIGVudHJ5IHdpbGwgYmUgcmVtb3ZlZAorCQlpZiBpdCBleGlzdHMuCisKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlcjogMSBmb3IgYSBzdWNjZXNzZnVsIG9wZXJhdGlvbiwKKwkJb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuCisKKwkJRXhhbXBsZXM6CisJCUNsZWFyIGV4cHJlc3Npb24gcmVnaXN0ZXIgaGlzdG9yeTogPgorCQkJOmNhbGwgaGlzdGRlbCgiZXhwciIpCis8CisJCVJlbW92ZSBhbGwgZW50cmllcyBzdGFydGluZyB3aXRoICIqIiBmcm9tIHRoZSBzZWFyY2ggaGlzdG9yeTogPgorCQkJOmNhbGwgaGlzdGRlbCgiLyIsICdeXConKQorPAorCQlUaGUgZm9sbG93aW5nIHRocmVlIGFyZSBlcXVpdmFsZW50OiA+CisJCQk6Y2FsbCBoaXN0ZGVsKCJzZWFyY2giLCBoaXN0bnIoInNlYXJjaCIpKQorCQkJOmNhbGwgaGlzdGRlbCgic2VhcmNoIiwgLTEpCisJCQk6Y2FsbCBoaXN0ZGVsKCJzZWFyY2giLCAnXicuaGlzdGdldCgic2VhcmNoIiwgLTEpLickJykKKzwKKwkJVG8gZGVsZXRlIHRoZSBsYXN0IHNlYXJjaCBwYXR0ZXJuIGFuZCB1c2UgdGhlIGxhc3QtYnV0LW9uZSBmb3IKKwkJdGhlICJuIiBjb21tYW5kIGFuZCAnaGxzZWFyY2gnOiA+CisJCQk6Y2FsbCBoaXN0ZGVsKCJzZWFyY2giLCAtMSkKKwkJCTpsZXQgQC8gPSBoaXN0Z2V0KCJzZWFyY2giLCAtMSkKKworaGlzdGdldCh7aGlzdG9yeX0gWywge2luZGV4fV0pCQkJCSpoaXN0Z2V0KCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHRoZSBlbnRyeSB3aXRoIE51bWJlciB7aW5kZXh9IGZyb20KKwkJe2hpc3Rvcnl9LiAgU2VlIHxoaXN0LW5hbWVzfCBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZgorCQl7aGlzdG9yeX0sIGFuZCB8Omhpc3RvcnktaW5kZXhpbmd8IGZvciB7aW5kZXh9LiAgSWYgdGhlcmUgaXMKKwkJbm8gc3VjaCBlbnRyeSwgYW4gZW1wdHkgU3RyaW5nIGlzIHJldHVybmVkLiAgV2hlbiB7aW5kZXh9IGlzCisJCW9taXR0ZWQsIHRoZSBtb3N0IHJlY2VudCBpdGVtIGZyb20gdGhlIGhpc3RvcnkgaXMgdXNlZC4KKworCQlFeGFtcGxlczoKKwkJUmVkbyB0aGUgc2Vjb25kIGxhc3Qgc2VhcmNoIGZyb20gaGlzdG9yeS4gPgorCQkJOmV4ZWN1dGUgJy8nIC4gaGlzdGdldCgic2VhcmNoIiwgLTIpCisKKzwJCURlZmluZSBhbiBFeCBjb21tYW5kICI6SCB7bnVtfSIgdGhhdCBzdXBwb3J0cyByZS1leGVjdXRpb24gb2YKKwkJdGhlIHtudW19dGggZW50cnkgZnJvbSB0aGUgb3V0cHV0IG9mIHw6aGlzdG9yeXwuID4KKwkJCTpjb21tYW5kIC1uYXJncz0xIEggZXhlY3V0ZSBoaXN0Z2V0KCJjbWQiLCAwKzxhcmdzPikKKzwKK2hpc3Rucih7aGlzdG9yeX0pCQkJCQkqaGlzdG5yKCkqCisJCVRoZSByZXN1bHQgaXMgdGhlIE51bWJlciBvZiB0aGUgY3VycmVudCBlbnRyeSBpbiB7aGlzdG9yeX0uCisJCVNlZSB8aGlzdC1uYW1lc3wgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2Yge2hpc3Rvcnl9LgorCQlJZiBhbiBlcnJvciBvY2N1cnJlZCwgLTEgaXMgcmV0dXJuZWQuCisKKwkJRXhhbXBsZTogPgorCQkJOmxldCBpbnBfaW5kZXggPSBoaXN0bnIoImV4cHIiKQorPAoraGxleGlzdHMoe25hbWV9KQkJCQkJKmhsZXhpc3RzKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIG5vbi16ZXJvIGlmIGEgaGlnaGxpZ2h0IGdyb3VwCisJCWNhbGxlZCB7bmFtZX0gZXhpc3RzLiAgVGhpcyBpcyB3aGVuIHRoZSBncm91cCBoYXMgYmVlbgorCQlkZWZpbmVkIGluIHNvbWUgd2F5LiAgTm90IG5lY2Vzc2FyaWx5IHdoZW4gaGlnaGxpZ2h0aW5nIGhhcworCQliZWVuIGRlZmluZWQgZm9yIGl0LCBpdCBtYXkgYWxzbyBoYXZlIGJlZW4gdXNlZCBmb3IgYSBzeW50YXgKKwkJaXRlbS4KKwkJCQkJCQkqaGlnaGxpZ2h0X2V4aXN0cygpKgorCQlPYnNvbGV0ZSBuYW1lOiBoaWdobGlnaHRfZXhpc3RzKCkuCisKKwkJCQkJCQkqaGxJRCgpKgoraGxJRCh7bmFtZX0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBJRCBvZiB0aGUgaGlnaGxpZ2h0IGdyb3VwCisJCXdpdGggbmFtZSB7bmFtZX0uICBXaGVuIHRoZSBoaWdobGlnaHQgZ3JvdXAgZG9lc24ndCBleGlzdCwKKwkJemVybyBpcyByZXR1cm5lZC4KKwkJVGhpcyBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlnaGxpZ2h0CisJCWdyb3VwLiAgRm9yIGV4YW1wbGUsIHRvIGdldCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUKKwkJIkNvbW1lbnQiIGdyb3VwOiA+CisJOmVjaG8gc3luSURhdHRyKHN5bklEdHJhbnMoaGxJRCgiQ29tbWVudCIpKSwgImJnIikKKzwJCQkJCQkJKmhpZ2hsaWdodElEKCkqCisJCU9ic29sZXRlIG5hbWU6IGhpZ2hsaWdodElEKCkuCisKK2hvc3RuYW1lKCkJCQkJCQkqaG9zdG5hbWUoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIG1hY2hpbmUgb24KKwkJd2hpY2ggVmltIGlzIGN1cnJlbnRseSBydW5uaW5nLiBNYWNoaW5lIG5hbWVzIGdyZWF0ZXIgdGhhbgorCQkyNTYgY2hhcmFjdGVycyBsb25nIGFyZSB0cnVuY2F0ZWQuCisKK2ljb252KHtleHByfSwge2Zyb219LCB7dG99KQkJCQkqaWNvbnYoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMgdGhlIHRleHQge2V4cHJ9IGNvbnZlcnRlZAorCQlmcm9tIGVuY29kaW5nIHtmcm9tfSB0byBlbmNvZGluZyB7dG99LgorCQlXaGVuIHRoZSBjb252ZXJzaW9uIGZhaWxzIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKwkJVGhlIGVuY29kaW5nIG5hbWVzIGFyZSB3aGF0ZXZlciB0aGUgaWNvbnYoKSBsaWJyYXJ5IGZ1bmN0aW9uCisJCWNhbiBhY2NlcHQsIHNlZSAiOiFtYW4gMyBpY29udiIuCisJCU1vc3QgY29udmVyc2lvbnMgcmVxdWlyZSBWaW0gdG8gYmUgY29tcGlsZWQgd2l0aCB0aGUgfCtpY29udnwKKwkJZmVhdHVyZS4gIE90aGVyd2lzZSBvbmx5IFVURi04IHRvIGxhdGluMSBjb252ZXJzaW9uIGFuZCBiYWNrCisJCWNhbiBiZSBkb25lLgorCQlUaGlzIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgbWVzc2FnZXMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMsCisJCW5vIG1hdHRlciB3aGF0ICdlbmNvZGluZycgaXMgc2V0IHRvLiAgV3JpdGUgdGhlIG1lc3NhZ2UgaW4KKwkJVVRGLTggYW5kIHVzZTogPgorCQkJZWNobyBpY29udih1dGY4X3N0ciwgInV0Zi04IiwgJmVuYykKKzwJCU5vdGUgdGhhdCBWaW0gdXNlcyBVVEYtOCBmb3IgYWxsIFVuaWNvZGUgZW5jb2RpbmdzLCBjb252ZXJzaW9uCisJCWZyb20vdG8gVUNTLTIgaXMgYXV0b21hdGljYWxseSBjaGFuZ2VkIHRvIHVzZSBVVEYtOC4gIFlvdQorCQljYW5ub3QgdXNlIFVDUy0yIGluIGEgc3RyaW5nIGFueXdheSwgYmVjYXVzZSBvZiB0aGUgTlVMIGJ5dGVzLgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSArbXVsdGlfYnl0ZSBmZWF0dXJlfQorCisJCQkJCQkJKmluZGVudCgpKgoraW5kZW50KHtsbnVtfSkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgaW5kZW50IG9mIGxpbmUge2xudW19IGluIHRoZQorCQljdXJyZW50IGJ1ZmZlci4gIFRoZSBpbmRlbnQgaXMgY291bnRlZCBpbiBzcGFjZXMsIHRoZSB2YWx1ZQorCQlvZiAndGFic3RvcCcgaXMgcmVsZXZhbnQuICB7bG51bX0gaXMgdXNlZCBqdXN0IGxpa2UgaW4KKwkJfGdldGxpbmUoKXwuCisJCVdoZW4ge2xudW19IGlzIGludmFsaWQgLTEgaXMgcmV0dXJuZWQuCisKK2lucHV0KHtwcm9tcHR9IFssIHt0ZXh0fV0pCQkJCSppbnB1dCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyB3aGF0ZXZlciB0aGUgdXNlciB0eXBlZCBvbgorCQl0aGUgY29tbWFuZC1saW5lLiAgVGhlIHBhcmFtZXRlciBpcyBlaXRoZXIgYSBwcm9tcHQgc3RyaW5nLCBvcgorCQlhIGJsYW5rIHN0cmluZyAoZm9yIG5vIHByb21wdCkuICBBICdcbicgY2FuIGJlIHVzZWQgaW4gdGhlCisJCXByb21wdCB0byBzdGFydCBhIG5ldyBsaW5lLiAgVGhlIGhpZ2hsaWdodGluZyBzZXQgd2l0aAorCQl8OmVjaG9obHwgaXMgdXNlZCBmb3IgdGhlIHByb21wdC4gIFRoZSBpbnB1dCBpcyBlbnRlcmVkIGp1c3QKKwkJbGlrZSBhIGNvbW1hbmQtbGluZSwgd2l0aCB0aGUgc2FtZSBlZGl0aW5nIGNvbW1hbmRzIGFuZAorCQltYXBwaW5ncy4gIFRoZXJlIGlzIGEgc2VwYXJhdGUgaGlzdG9yeSBmb3IgbGluZXMgdHlwZWQgZm9yCisJCWlucHV0KCkuCisJCUlmIHRoZSBvcHRpb25hbCB7dGV4dH0gaXMgcHJlc2VudCwgdGhpcyBpcyB1c2VkIGZvciB0aGUKKwkJZGVmYXVsdCByZXBseSwgYXMgaWYgdGhlIHVzZXIgdHlwZWQgdGhpcy4KKwkJTk9URTogVGhpcyBtdXN0IG5vdCBiZSB1c2VkIGluIGEgc3RhcnR1cCBmaWxlLCBmb3IgdGhlCisJCXZlcnNpb25zIHRoYXQgb25seSBydW4gaW4gR1VJIG1vZGUgKGUuZy4sIHRoZSBXaW4zMiBHVUkpLgorCQlOb3RlOiBXaGVuIGlucHV0KCkgaXMgY2FsbGVkIGZyb20gd2l0aGluIGEgbWFwcGluZyBpdCB3aWxsCisJCWNvbnN1bWUgcmVtYWluaW5nIGNoYXJhY3RlcnMgZnJvbSB0aGF0IG1hcHBpbmcsIGJlY2F1c2UgYQorCQltYXBwaW5nIGlzIGhhbmRsZWQgbGlrZSB0aGUgY2hhcmFjdGVycyB3ZXJlIHR5cGVkLgorCQlVc2UgfGlucHV0c2F2ZSgpfCBiZWZvcmUgaW5wdXQoKSBhbmQgfGlucHV0cmVzdG9yZSgpfAorCQlhZnRlciBpbnB1dCgpIHRvIGF2b2lkIHRoYXQuICBBbm90aGVyIHNvbHV0aW9uIGlzIHRvIGF2b2lkCisJCXRoYXQgZnVydGhlciBjaGFyYWN0ZXJzIGZvbGxvdyBpbiB0aGUgbWFwcGluZywgZS5nLiwgYnkgdXNpbmcKKwkJfDpleGVjdXRlfCBvciB8Om5vcm1hbHwuCisKKwkJRXhhbXBsZTogPgorCQkJOmlmIGlucHV0KCJDb2ZmZWUgb3IgYmVlcj8gIikgPT0gImJlZXIiCisJCQk6ICBlY2hvICJDaGVlcnMhIgorCQkJOmVuZGlmCis8CQlFeGFtcGxlIHdpdGggZGVmYXVsdCB0ZXh0OiA+CisJCQk6bGV0IGNvbG9yID0gaW5wdXQoIkNvbG9yPyAiLCAid2hpdGUiKQorPAkJRXhhbXBsZSB3aXRoIGEgbWFwcGluZzogPgorCQkJOm5tYXAgXHggOmNhbGwgR2V0Rm9vKCk8Q1I+OmV4ZSAiLyIgLiBGb288Q1I+CisJCQk6ZnVuY3Rpb24gR2V0Rm9vKCkKKwkJCTogIGNhbGwgaW5wdXRzYXZlKCkKKwkJCTogIGxldCBnOkZvbyA9IGlucHV0KCJlbnRlciBzZWFyY2ggcGF0dGVybjogIikKKwkJCTogIGNhbGwgaW5wdXRyZXN0b3JlKCkKKwkJCTplbmRmdW5jdGlvbgorCitpbnB1dGRpYWxvZyh7cHJvbXB0fSBbLCB7dGV4dH0gWywge2NhbmNlbHJldHVybn1dXSkJCSppbnB1dGRpYWxvZygpKgorCQlMaWtlIGlucHV0KCksIGJ1dCB3aGVuIHRoZSBHVUkgaXMgcnVubmluZyBhbmQgdGV4dCBkaWFsb2dzIGFyZQorCQlzdXBwb3J0ZWQsIGEgZGlhbG9nIHdpbmRvdyBwb3BzIHVwIHRvIGlucHV0IHRoZSB0ZXh0LgorCQlFeGFtcGxlOiA+CisJCQk6bGV0IG4gPSBpbnB1dGRpYWxvZygidmFsdWUgZm9yIHNoaWZ0d2lkdGgiLCAmc3cpCisJCQk6aWYgbiAhPSAiIgorCQkJOiAgbGV0ICZzdyA9IG4KKwkJCTplbmRpZgorPAkJV2hlbiB0aGUgZGlhbG9nIGlzIGNhbmNlbGxlZCB7Y2FuY2VscmV0dXJufSBpcyByZXR1cm5lZC4gIFdoZW4KKwkJb21pdHRlZCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisJCUhpdHRpbmcgPEVudGVyPiB3b3JrcyBsaWtlIHByZXNzaW5nIHRoZSBPSyBidXR0b24uICBIaXR0aW5nCisJCTxFc2M+IHdvcmtzIGxpa2UgcHJlc3NpbmcgdGhlIENhbmNlbCBidXR0b24uCisKK2lucHV0cmVzdG9yZSgpCQkJCQkJKmlucHV0cmVzdG9yZSgpKgorCQlSZXN0b3JlIHR5cGVhaGVhZCB0aGF0IHdhcyBzYXZlZCB3aXRoIGEgcHJldmlvdXMgaW5wdXRzYXZlKCkuCisJCVNob3VsZCBiZSBjYWxsZWQgdGhlIHNhbWUgbnVtYmVyIG9mIHRpbWVzIGlucHV0c2F2ZSgpIGlzCisJCWNhbGxlZC4gIENhbGxpbmcgaXQgbW9yZSBvZnRlbiBpcyBoYXJtbGVzcyB0aG91Z2guCisJCVJldHVybnMgMSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVzdG9yZSwgMCBvdGhlcndpc2UuCisKK2lucHV0c2F2ZSgpCQkJCQkJKmlucHV0c2F2ZSgpKgorCQlQcmVzZXJ2ZSB0eXBlYWhlYWQgKGFsc28gZnJvbSBtYXBwaW5ncykgYW5kIGNsZWFyIGl0LCBzbyB0aGF0CisJCWEgZm9sbG93aW5nIHByb21wdCBnZXRzIGlucHV0IGZyb20gdGhlIHVzZXIuICBTaG91bGQgYmUKKwkJZm9sbG93ZWQgYnkgYSBtYXRjaGluZyBpbnB1dHJlc3RvcmUoKSBhZnRlciB0aGUgcHJvbXB0LiAgQ2FuCisJCWJlIHVzZWQgc2V2ZXJhbCB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGVyZSBtdXN0IGJlIGp1c3QgYXMKKwkJbWFueSBpbnB1dHJlc3RvcmUoKSBjYWxscy4KKwkJUmV0dXJucyAxIHdoZW4gb3V0IG9mIG1lbW9yeSwgMCBvdGhlcndpc2UuCisKK2lucHV0c2VjcmV0KHtwcm9tcHR9IFssIHt0ZXh0fV0pCQkJKmlucHV0c2VjcmV0KCkqCisJCVRoaXMgZnVuY3Rpb24gYWN0cyBtdWNoIGxpa2UgdGhlIHxpbnB1dCgpfCBmdW5jdGlvbiB3aXRoIGJ1dAorCQl0d28gZXhjZXB0aW9uczoKKwkJYSkgdGhlIHVzZXIncyByZXNwb25zZSB3aWxsIGJlIGRpc3BsYXllZCBhcyBhIHNlcXVlbmNlIG9mCisJCWFzdGVyaXNrcyAoIioiKSB0aGVyZWJ5IGtlZXBpbmcgdGhlIGVudHJ5IHNlY3JldCwgYW5kCisJCWIpIHRoZSB1c2VyJ3MgcmVzcG9uc2Ugd2lsbCBub3QgYmUgcmVjb3JkZWQgb24gdGhlIGlucHV0CisJCXxoaXN0b3J5fCBzdGFjay4KKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMgd2hhdGV2ZXIgdGhlIHVzZXIgYWN0dWFsbHkKKwkJdHlwZWQgb24gdGhlIGNvbW1hbmQtbGluZSBpbiByZXNwb25zZSB0byB0aGUgaXNzdWVkIHByb21wdC4KKworaXNkaXJlY3Rvcnkoe2RpcmVjdG9yeX0pCQkJCSppc2RpcmVjdG9yeSgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyBub24temVybyB3aGVuIGEgZGlyZWN0b3J5CisJCXdpdGggdGhlIG5hbWUge2RpcmVjdG9yeX0gZXhpc3RzLiAgSWYge2RpcmVjdG9yeX0gZG9lc24ndAorCQlleGlzdCwgb3IgaXNuJ3QgYSBkaXJlY3RvcnksIHRoZSByZXN1bHQgaXMgRkFMU0UuICB7ZGlyZWN0b3J5fQorCQlpcyBhbnkgZXhwcmVzc2lvbiwgd2hpY2ggaXMgdXNlZCBhcyBhIFN0cmluZy4KKworCQkJCQkJKmxpYmNhbGwoKSogKkUzNjQqICpFMzY4KgorbGliY2FsbCh7bGlibmFtZX0sIHtmdW5jbmFtZX0sIHthcmd1bWVudH0pCisJCUNhbGwgZnVuY3Rpb24ge2Z1bmNuYW1lfSBpbiB0aGUgcnVuLXRpbWUgbGlicmFyeSB7bGlibmFtZX0KKwkJd2l0aCBzaW5nbGUgYXJndW1lbnQge2FyZ3VtZW50fS4KKwkJVGhpcyBpcyB1c2VmdWwgdG8gY2FsbCBmdW5jdGlvbnMgaW4gYSBsaWJyYXJ5IHRoYXQgeW91CisJCWVzcGVjaWFsbHkgbWFkZSB0byBiZSB1c2VkIHdpdGggVmltLiAgU2luY2Ugb25seSBvbmUgYXJndW1lbnQKKwkJaXMgcG9zc2libGUsIGNhbGxpbmcgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgaXMgcmF0aGVyCisJCWxpbWl0ZWQuCisJCVRoZSByZXN1bHQgaXMgdGhlIFN0cmluZyByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uICBJZiB0aGUKKwkJZnVuY3Rpb24gcmV0dXJucyBOVUxMLCB0aGlzIHdpbGwgYXBwZWFyIGFzIGFuIGVtcHR5IHN0cmluZyAiIgorCQl0byBWaW0uCisJCUlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbnVtYmVyLCB1c2UgbGliY2FsbG5yKCkhCisJCUlmIHthcmd1bWVudH0gaXMgYSBudW1iZXIsIGl0IGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXMgYW4KKwkJaW50OyBpZiB7YXJndW1lbnR9IGlzIGEgc3RyaW5nLCBpdCBpcyBwYXNzZWQgYXMgYQorCQludWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorCQlUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpbiB8cmVzdHJpY3RlZC1tb2RlfC4KKworCQlsaWJjYWxsKCkgYWxsb3dzIHlvdSB0byB3cml0ZSB5b3VyIG93biAncGx1Zy1pbicgZXh0ZW5zaW9ucyB0bworCQlWaW0gd2l0aG91dCBoYXZpbmcgdG8gcmVjb21waWxlIHRoZSBwcm9ncmFtLiAgSXQgaXMgTk9UIGEKKwkJbWVhbnMgdG8gY2FsbCBzeXN0ZW0gZnVuY3Rpb25zISAgSWYgeW91IHRyeSB0byBkbyBzbyBWaW0gd2lsbAorCQl2ZXJ5IHByb2JhYmx5IGNyYXNoLgorCisJCUZvciBXaW4zMiwgdGhlIGZ1bmN0aW9ucyB5b3Ugd3JpdGUgbXVzdCBiZSBwbGFjZWQgaW4gYSBETEwKKwkJYW5kIHVzZSB0aGUgbm9ybWFsIEMgY2FsbGluZyBjb252ZW50aW9uIChOT1QgUGFzY2FsIHdoaWNoIGlzCisJCXVzZWQgaW4gV2luZG93cyBTeXN0ZW0gRExMcykuICBUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGV4YWN0bHkKKwkJb25lIHBhcmFtZXRlciwgZWl0aGVyIGEgY2hhcmFjdGVyIHBvaW50ZXIgb3IgYSBsb25nIGludGVnZXIsCisJCWFuZCBtdXN0IHJldHVybiBhIGNoYXJhY3RlciBwb2ludGVyIG9yIE5VTEwuICBUaGUgY2hhcmFjdGVyCisJCXBvaW50ZXIgcmV0dXJuZWQgbXVzdCBwb2ludCB0byBtZW1vcnkgdGhhdCB3aWxsIHJlbWFpbiB2YWxpZAorCQlhZnRlciB0aGUgZnVuY3Rpb24gaGFzIHJldHVybmVkIChlLmcuIGluIHN0YXRpYyBkYXRhIGluIHRoZQorCQlETEwpLiAgSWYgaXQgcG9pbnRzIHRvIGFsbG9jYXRlZCBtZW1vcnksIHRoYXQgbWVtb3J5IHdpbGwKKwkJbGVhayBhd2F5LiAgVXNpbmcgYSBzdGF0aWMgYnVmZmVyIGluIHRoZSBmdW5jdGlvbiBzaG91bGQgd29yaywKKwkJaXQncyB0aGVuIGZyZWVkIHdoZW4gdGhlIERMTCBpcyB1bmxvYWRlZC4KKworCQlXQVJOSU5HOiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi12YWxpZCBwb2ludGVyLCBWaW0gbWF5CisJCWNyYXNoISAgVGhpcyBhbHNvIGhhcHBlbnMgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBudW1iZXIsCisJCWJlY2F1c2UgVmltIHRoaW5rcyBpdCdzIGEgcG9pbnRlci4KKwkJRm9yIFdpbjMyIHN5c3RlbXMsIHtsaWJuYW1lfSBzaG91bGQgYmUgdGhlIGZpbGVuYW1lIG9mIHRoZSBETEwKKwkJd2l0aG91dCB0aGUgIi5ETEwiIHN1ZmZpeC4gIEEgZnVsbCBwYXRoIGlzIG9ubHkgcmVxdWlyZWQgaWYKKwkJdGhlIERMTCBpcyBub3QgaW4gdGhlIHVzdWFsIHBsYWNlcy4KKwkJRm9yIFVuaXg6IFdoZW4gY29tcGlsaW5nIHlvdXIgb3duIHBsdWdpbnMsIHJlbWVtYmVyIHRoYXQgdGhlCisJCW9iamVjdCBjb2RlIG11c3QgYmUgY29tcGlsZWQgYXMgcG9zaXRpb24taW5kZXBlbmRlbnQgKCdQSUMnKS4KKwkJe29ubHkgaW4gV2luMzIgb24gc29tZSBVbml4IHZlcnNpb25zLCB3aGVuIHRoZSB8K2xpYmNhbGx8CisJCWZlYXR1cmUgaXMgcHJlc2VudH0KKwkJRXhhbXBsZXM6ID4KKwkJCTplY2hvIGxpYmNhbGwoImxpYmMuc28iLCAiZ2V0ZW52IiwgIkhPTUUiKQorCQkJOmVjaG8gbGliY2FsbG5yKCIvdXNyL2xpYi9saWJjLnNvIiwgImdldHBpZCIsICIiKQorPAorCQkJCQkJCSpsaWJjYWxsbnIoKSoKK2xpYmNhbGxucih7bGlibmFtZX0sIHtmdW5jbmFtZX0sIHthcmd1bWVudH0pCisJCUp1c3QgbGlrZSBsaWJjYWxsKCksIGJ1dCB1c2VkIGZvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbgorCQlpbnQgaW5zdGVhZCBvZiBhIHN0cmluZy4KKwkJe29ubHkgaW4gV2luMzIgb24gc29tZSBVbml4IHZlcnNpb25zLCB3aGVuIHRoZSB8K2xpYmNhbGx8CisJCWZlYXR1cmUgaXMgcHJlc2VudH0KKwkJRXhhbXBsZSAobm90IHZlcnkgdXNlZnVsLi4uKTogPgorCQkJOmNhbGwgbGliY2FsbG5yKCJsaWJjLnNvIiwgInByaW50ZiIsICJIZWxsbyBXb3JsZCFcbiIpCisJCQk6Y2FsbCBsaWJjYWxsbnIoImxpYmMuc28iLCAic2xlZXAiLCAxMCkKKzwKKwkJCQkJCQkqbGluZSgpKgorbGluZSh7ZXhwcn0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZmlsZQorCQlwb3NpdGlvbiBnaXZlbiB3aXRoIHtleHByfS4gIFRoZSBhY2NlcHRlZCBwb3NpdGlvbnMgYXJlOgorCQkgICAgLgkgICAgdGhlIGN1cnNvciBwb3NpdGlvbgorCQkgICAgJAkgICAgdGhlIGxhc3QgbGluZSBpbiB0aGUgY3VycmVudCBidWZmZXIKKwkJICAgICd4CSAgICBwb3NpdGlvbiBvZiBtYXJrIHggKGlmIHRoZSBtYXJrIGlzIG5vdCBzZXQsIDAgaXMKKwkJCSAgICByZXR1cm5lZCkKKwkJTm90ZSB0aGF0IG9ubHkgbWFya3MgaW4gdGhlIGN1cnJlbnQgZmlsZSBjYW4gYmUgdXNlZC4KKwkJRXhhbXBsZXM6ID4KKwkJCWxpbmUoIi4iKQkJbGluZSBudW1iZXIgb2YgdGhlIGN1cnNvcgorCQkJbGluZSgiJ3QiKQkJbGluZSBudW1iZXIgb2YgbWFyayB0CisJCQlsaW5lKCInIiAuIG1hcmtlcikJbGluZSBudW1iZXIgb2YgbWFyayBtYXJrZXIKKzwJCQkJCQkJKmxhc3QtcG9zaXRpb24tanVtcCoKKwkJVGhpcyBhdXRvY29tbWFuZCBqdW1wcyB0byB0aGUgbGFzdCBrbm93biBwb3NpdGlvbiBpbiBhIGZpbGUKKwkJanVzdCBhZnRlciBvcGVuaW5nIGl0LCBpZiB0aGUgJyIgbWFyayBpcyBzZXQ6ID4KKwk6YXUgQnVmUmVhZFBvc3QgKiBpZiBsaW5lKCInXCIiKSA+IDAgJiYgbGluZSgiJ1wiIikgPD0gbGluZSgiJCIpIHwgZXhlICJub3JtYWwgZydcIiIgfCBlbmRpZgorPAorbGluZTJieXRlKHtsbnVtfSkJCQkJCSpsaW5lMmJ5dGUoKSoKKwkJUmV0dXJuIHRoZSBieXRlIGNvdW50IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgZm9yIGxpbmUKKwkJe2xudW19LiAgVGhpcyBpbmNsdWRlcyB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVyLCBkZXBlbmRpbmcgb24KKwkJdGhlICdmaWxlZm9ybWF0JyBvcHRpb24gZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4gIFRoZSBmaXJzdAorCQlsaW5lIHJldHVybnMgMS4KKwkJVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvIGdldCB0aGUgYnl0ZSBjb3VudCBmb3IgdGhlIGxpbmUganVzdAorCQliZWxvdyB0aGUgbGFzdCBsaW5lOiA+CisJCQlsaW5lMmJ5dGUobGluZSgiJCIpICsgMSkKKzwJCVRoaXMgaXMgdGhlIGZpbGUgc2l6ZSBwbHVzIG9uZS4KKwkJV2hlbiB7bG51bX0gaXMgaW52YWxpZCwgb3IgdGhlIHwrYnl0ZV9vZmZzZXR8IGZlYXR1cmUgaGFzIGJlZW4KKwkJZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCAtMSBpcyByZXR1cm5lZC4KKwkJQWxzbyBzZWUgfGJ5dGUybGluZSgpfCwgfGdvfCBhbmQgfDpnb3RvfC4KKworbGlzcGluZGVudCh7bG51bX0pCQkJCQkqbGlzcGluZGVudCgpKgorCQlHZXQgdGhlIGFtb3VudCBvZiBpbmRlbnQgZm9yIGxpbmUge2xudW19IGFjY29yZGluZyB0aGUgbGlzcAorCQlpbmRlbnRpbmcgcnVsZXMsIGFzIHdpdGggJ2xpc3AnLgorCQlUaGUgaW5kZW50IGlzIGNvdW50ZWQgaW4gc3BhY2VzLCB0aGUgdmFsdWUgb2YgJ3RhYnN0b3AnIGlzCisJCXJlbGV2YW50LiAge2xudW19IGlzIHVzZWQganVzdCBsaWtlIGluIHxnZXRsaW5lKCl8LgorCQlXaGVuIHtsbnVtfSBpcyBpbnZhbGlkIG9yIFZpbSB3YXMgbm90IGNvbXBpbGVkIHRoZQorCQl8K2xpc3BpbmRlbnR8IGZlYXR1cmUsIC0xIGlzIHJldHVybmVkLgorCitsb2NhbHRpbWUoKQkJCQkJCSpsb2NhbHRpbWUoKSoKKwkJUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUsIG1lYXN1cmVkIGFzIHNlY29uZHMgc2luY2UgMXN0IEphbgorCQkxOTcwLiAgU2VlIGFsc28gfHN0cmZ0aW1lKCl8IGFuZCB8Z2V0ZnRpbWUoKXwuCisKK21hcGFyZyh7bmFtZX1bLCB7bW9kZX1dKQkJCQkqbWFwYXJnKCkqCisJCVJldHVybiB0aGUgcmhzIG9mIG1hcHBpbmcge25hbWV9IGluIG1vZGUge21vZGV9LiAgV2hlbiB0aGVyZQorCQlpcyBubyBtYXBwaW5nIGZvciB7bmFtZX0sIGFuIGVtcHR5IFN0cmluZyBpcyByZXR1cm5lZC4KKwkJVGhlc2UgY2hhcmFjdGVycyBjYW4gYmUgdXNlZCBmb3Ige21vZGV9OgorCQkJIm4iCU5vcm1hbAorCQkJInYiCVZpc3VhbAorCQkJIm8iCU9wZXJhdG9yLXBlbmRpbmcKKwkJCSJpIglJbnNlcnQKKwkJCSJjIglDbWQtbGluZQorCQkJImwiCWxhbmdtYXAgfGxhbmd1YWdlLW1hcHBpbmd8CisJCQkiIglOb3JtYWwsIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZworCQlXaGVuIHttb2RlfSBpcyBvbWl0dGVkLCB0aGUgbW9kZXMgZnJvbSAiIiBhcmUgdXNlZC4KKwkJVGhlIHtuYW1lfSBjYW4gaGF2ZSBzcGVjaWFsIGtleSBuYW1lcywgbGlrZSBpbiB0aGUgIjptYXAiCisJCWNvbW1hbmQuICBUaGUgcmV0dXJuZWQgU3RyaW5nIGhhcyBzcGVjaWFsIGNoYXJhY3RlcnMKKwkJdHJhbnNsYXRlZCBsaWtlIGluIHRoZSBvdXRwdXQgb2YgdGhlICI6bWFwIiBjb21tYW5kIGxpc3RpbmcuCisJCVRoZSBtYXBwaW5ncyBsb2NhbCB0byB0aGUgY3VycmVudCBidWZmZXIgYXJlIGNoZWNrZWQgZmlyc3QsCisJCXRoZW4gdGhlIGdsb2JhbCBtYXBwaW5ncy4KKworbWFwY2hlY2soe25hbWV9Wywge21vZGV9XSkJCQkJKm1hcGNoZWNrKCkqCisJCUNoZWNrIGlmIHRoZXJlIGlzIGEgbWFwcGluZyB0aGF0IG1hdGNoZXMgd2l0aCB7bmFtZX0gaW4gbW9kZQorCQl7bW9kZX0uICBTZWUgfG1hcGFyZygpfCBmb3Ige21vZGV9IGFuZCBzcGVjaWFsIG5hbWVzIGluCisJCXtuYW1lfS4KKwkJQSBtYXRjaCBoYXBwZW5zIHdpdGggYSBtYXBwaW5nIHRoYXQgc3RhcnRzIHdpdGgge25hbWV9IGFuZAorCQl3aXRoIGEgbWFwcGluZyB3aGljaCBpcyBlcXVhbCB0byB0aGUgc3RhcnQgb2Yge25hbWV9LgorCisJCQltYXRjaGVzIG1hcHBpbmcgImEiICAgICAiYWIiICAgICJhYmMiIH4KKwkJICAgbWFwY2hlY2soImEiKQl5ZXMJeWVzCSB5ZXMKKwkJICAgbWFwY2hlY2soImFiYyIpCXllcwl5ZXMJIHllcworCQkgICBtYXBjaGVjaygiYXgiKQl5ZXMJbm8JIG5vCisJCSAgIG1hcGNoZWNrKCJiIikJbm8Jbm8JIG5vCisKKwkJVGhlIGRpZmZlcmVuY2Ugd2l0aCBtYXBhcmcoKSBpcyB0aGF0IG1hcGNoZWNrKCkgZmluZHMgYQorCQltYXBwaW5nIHRoYXQgbWF0Y2hlcyB3aXRoIHtuYW1lfSwgd2hpbGUgbWFwYXJnKCkgb25seSBmaW5kcyBhCisJCW1hcHBpbmcgZm9yIHtuYW1lfSBleGFjdGx5LgorCQlXaGVuIHRoZXJlIGlzIG5vIG1hcHBpbmcgdGhhdCBzdGFydHMgd2l0aCB7bmFtZX0sIGFuIGVtcHR5CisJCVN0cmluZyBpcyByZXR1cm5lZC4gIElmIHRoZXJlIGlzIG9uZSwgdGhlIHJocyBvZiB0aGF0IG1hcHBpbmcKKwkJaXMgcmV0dXJuZWQuICBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXBwaW5ncyB0aGF0IHN0YXJ0IHdpdGgKKwkJe25hbWV9LCB0aGUgcmhzIG9mIG9uZSBvZiB0aGVtIGlzIHJldHVybmVkLgorCQlUaGUgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIGFyZSBjaGVja2VkIGZpcnN0LAorCQl0aGVuIHRoZSBnbG9iYWwgbWFwcGluZ3MuCisJCVRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgYSBtYXBwaW5nIGNhbiBiZSBhZGRlZAorCQl3aXRob3V0IGJlaW5nIGFtYmlndW91cy4gIEV4YW1wbGU6ID4KKwk6aWYgbWFwY2hlY2soIl92diIpID09ICIiCisJOiAgIG1hcCBfdnYgOnNldCBndWlmb250PTd4MTM8Q1I+CisJOmVuZGlmCis8CQlUaGlzIGF2b2lkcyBhZGRpbmcgdGhlICJfdnYiIG1hcHBpbmcgd2hlbiB0aGVyZSBhbHJlYWR5IGlzIGEKKwkJbWFwcGluZyBmb3IgIl92IiBvciBmb3IgIl92dnYiLgorCittYXRjaCh7ZXhwcn0sIHtwYXR9Wywge3N0YXJ0fV0pCQkJCSptYXRjaCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBnaXZlcyB0aGUgaW5kZXggKGJ5dGUgb2Zmc2V0KSBpbgorCQl7ZXhwcn0gd2hlcmUge3BhdH0gbWF0Y2hlcy4gIEEgbWF0Y2ggYXQgdGhlIGZpcnN0IGNoYXJhY3RlcgorCQlyZXR1cm5zIHplcm8uICBJZiB0aGVyZSBpcyBubyBtYXRjaCAtMSBpcyByZXR1cm5lZC4gIEV4YW1wbGU6ID4KKwkJCTplY2hvIG1hdGNoKCJ0ZXN0aW5nIiwgImluZyIpCis8CQlyZXN1bHRzIGluICI0Ii4KKwkJU2VlIHxzdHJpbmctbWF0Y2h8IGZvciBob3cge3BhdH0gaXMgdXNlZC4KKwkJSWYge3N0YXJ0fSBpcyBnaXZlbiwgdGhlIHNlYXJjaCBzdGFydHMgZnJvbSBpbmRleCB7c3RhcnR9LgorCQlUaGUgcmVzdWx0LCBob3dldmVyLCBpcyBzdGlsbCB0aGUgaW5kZXggY291bnRlZCBmcm9tIHRoZQorCQlmaXJzdCBjaGFyYWN0ZXIuIEV4YW1wbGU6ID4KKwkJCTplY2hvIG1hdGNoKCJ0ZXN0aW5nIiwgImluZyIsIDIpCis8CQlyZXN1bHQgaXMgYWdhaW4gIjQiLiA+CisJCQk6ZWNobyBtYXRjaCgidGVzdGluZyIsICJpbmciLCA0KQorPAkJcmVzdWx0IGlzIGFnYWluICI0Ii4gPgorCQkJOmVjaG8gbWF0Y2goInRlc3RpbmciLCAidCIsIDIpCis8CQlyZXN1bHQgaXMgIjMiLgorCQlJZiB7c3RhcnR9IDwgMCwgaXQgd2lsbCBiZSBzZXQgdG8gMC4KKwkJSWYge3N0YXJ0fSA+IHN0cmxlbih7ZXhwcn0pIC0xIGlzIHJldHVybmVkLgorCQlTZWUgfHBhdHRlcm58IGZvciB0aGUgcGF0dGVybnMgdGhhdCBhcmUgYWNjZXB0ZWQuCisJCVRoZSAnaWdub3JlY2FzZScgb3B0aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBpZ25vcmUtY2FzZW5lc3Mgb2YKKwkJdGhlIHBhdHRlcm4uICAnc21hcnRjYXNlJyBpcyBOT1QgdXNlZC4gIFRoZSBtYXRjaGluZyBpcyBhbHdheXMKKwkJZG9uZSBsaWtlICdtYWdpYycgaXMgc2V0IGFuZCAnY3BvcHRpb25zJyBpcyBlbXB0eS4KKworbWF0Y2hlbmQoe2V4cHJ9LCB7cGF0fVssIHtzdGFydH1dKQkJCSptYXRjaGVuZCgpKgorCQlTYW1lIGFzIG1hdGNoKCksIGJ1dCByZXR1cm4gdGhlIGluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorCQl0aGUgbWF0Y2guICBFeGFtcGxlOiA+CisJCQk6ZWNobyBtYXRjaGVuZCgidGVzdGluZyIsICJpbmciKQorPAkJcmVzdWx0cyBpbiAiNyIuCisJCVRoZSB7c3RhcnR9LCBpZiBnaXZlbiwgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIG1hdGNoKCkuID4KKwkJCTplY2hvIG1hdGNoZW5kKCJ0ZXN0aW5nIiwgImluZyIsIDIpCis8CQlyZXN1bHRzIGluICI3Ii4gPgorCQkJOmVjaG8gbWF0Y2hlbmQoInRlc3RpbmciLCAiaW5nIiwgNSkKKzwJCXJlc3VsdCBpcyAiLTEiLgorCittYXRjaHN0cih7ZXhwcn0sIHtwYXR9Wywge3N0YXJ0fV0pCQkJKm1hdGNoc3RyKCkqCisJCVNhbWUgYXMgbWF0Y2goKSwgYnV0IHJldHVybiB0aGUgbWF0Y2hlZCBzdHJpbmcuICBFeGFtcGxlOiA+CisJCQk6ZWNobyBtYXRjaHN0cigidGVzdGluZyIsICJpbmciKQorPAkJcmVzdWx0cyBpbiAiaW5nIi4KKwkJV2hlbiB0aGVyZSBpcyBubyBtYXRjaCAiIiBpcyByZXR1cm5lZC4KKwkJVGhlIHtzdGFydH0sIGlmIGdpdmVuLCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgbWF0Y2goKS4gPgorCQkJOmVjaG8gbWF0Y2hzdHIoInRlc3RpbmciLCAiaW5nIiwgMikKKzwJCXJlc3VsdHMgaW4gImluZyIuID4KKwkJCTplY2hvIG1hdGNoc3RyKCJ0ZXN0aW5nIiwgImluZyIsIDUpCis8CQlyZXN1bHQgaXMgIiIuCisKKwkJCQkJCQkqbW9kZSgpKgorbW9kZSgpCQlSZXR1cm4gYSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgbW9kZToKKwkJCW4JTm9ybWFsCisJCQl2CVZpc3VhbCBieSBjaGFyYWN0ZXIKKwkJCVYJVmlzdWFsIGJ5IGxpbmUKKwkJCUNUUkwtVglWaXN1YWwgYmxvY2t3aXNlCisJCQlzCVNlbGVjdCBieSBjaGFyYWN0ZXIKKwkJCVMJU2VsZWN0IGJ5IGxpbmUKKwkJCUNUUkwtUwlTZWxlY3QgYmxvY2t3aXNlCisJCQlpCUluc2VydAorCQkJUglSZXBsYWNlCisJCQljCUNvbW1hbmQtbGluZQorCQkJcglIaXQtZW50ZXIgcHJvbXB0CisJCVRoaXMgaXMgdXNlZnVsIGluIHRoZSAnc3RhdHVzbGluZScgb3B0aW9uLiAgSW4gbW9zdCBvdGhlcgorCQlwbGFjZXMgaXQgYWx3YXlzIHJldHVybnMgImMiIG9yICJuIi4KKworbmV4dG5vbmJsYW5rKHtsbnVtfSkJCQkJCSpuZXh0bm9uYmxhbmsoKSoKKwkJUmV0dXJuIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZmlyc3QgbGluZSBhdCBvciBiZWxvdyB7bG51bX0KKwkJdGhhdCBpcyBub3QgYmxhbmsuICBFeGFtcGxlOiA+CisJCQlpZiBnZXRsaW5lKG5leHRub25ibGFuaygxKSkgPX4gIkphdmEiCis8CQlXaGVuIHtsbnVtfSBpcyBpbnZhbGlkIG9yIHRoZXJlIGlzIG5vIG5vbi1ibGFuayBsaW5lIGF0IG9yCisJCWJlbG93IGl0LCB6ZXJvIGlzIHJldHVybmVkLgorCQlTZWUgYWxzbyB8cHJldm5vbmJsYW5rKCl8LgorCitucjJjaGFyKHtleHByfSkJCQkJCQkqbnIyY2hhcigpKgorCQlSZXR1cm4gYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHdoaWNoIGhhcyB0aGUgbnVtYmVyCisJCXZhbHVlIHtleHByfS4gIEV4YW1wbGVzOiA+CisJCQlucjJjaGFyKDY0KQkJcmV0dXJucyAiQCIKKwkJCW5yMmNoYXIoMzIpCQlyZXR1cm5zICIgIgorPAkJVGhlIGN1cnJlbnQgJ2VuY29kaW5nJyBpcyB1c2VkLiAgRXhhbXBsZSBmb3IgInV0Zi04IjogPgorCQkJbnIyY2hhcigzMDApCQlyZXR1cm5zIEkgd2l0aCBib3cgY2hhcmFjdGVyCis8CQlOb3RlIHRoYXQgYSBOVUwgY2hhcmFjdGVyIGluIHRoZSBmaWxlIGlzIHNwZWNpZmllZCB3aXRoCisJCW5yMmNoYXIoMTApLCBiZWNhdXNlIE5VTHMgYXJlIHJlcHJlc2VudGVkIHdpdGggbmV3bGluZQorCQljaGFyYWN0ZXJzLiAgbnIyY2hhcigwKSBpcyBhIHJlYWwgTlVMIGFuZCB0ZXJtaW5hdGVzIHRoZQorCQlzdHJpbmcsIHRodXMgaXNuJ3QgdmVyeSB1c2VmdWwuCisKK3ByZXZub25ibGFuayh7bG51bX0pCQkJCQkqcHJldm5vbmJsYW5rKCkqCisJCVJldHVybiB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGZpcnN0IGxpbmUgYXQgb3IgYWJvdmUge2xudW19CisJCXRoYXQgaXMgbm90IGJsYW5rLiAgRXhhbXBsZTogPgorCQkJbGV0IGluZCA9IGluZGVudChwcmV2bm9uYmxhbmsodjpsbnVtIC0gMSkpCis8CQlXaGVuIHtsbnVtfSBpcyBpbnZhbGlkIG9yIHRoZXJlIGlzIG5vIG5vbi1ibGFuayBsaW5lIGF0IG9yCisJCWFib3ZlIGl0LCB6ZXJvIGlzIHJldHVybmVkLgorCQlBbHNvIHNlZSB8bmV4dG5vbmJsYW5rKCl8LgorCisJCQkJCQkJKnJlbW90ZV9leHByKCkqICpFNDQ5KgorcmVtb3RlX2V4cHIoe3NlcnZlcn0sIHtzdHJpbmd9IFssIHtpZHZhcn1dKQorCQlTZW5kIHRoZSB7c3RyaW5nfSB0byB7c2VydmVyfS4gIFRoZSBzdHJpbmcgaXMgc2VudCBhcyBhbgorCQlleHByZXNzaW9uIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVkIGFmdGVyIGV2YWx1YXRpb24uCisJCUlmIHtpZHZhcn0gaXMgcHJlc2VudCwgaXQgaXMgdGFrZW4gYXMgdGhlIG5hbWUgb2YgYQorCQl2YXJpYWJsZSBhbmQgYSB7c2VydmVyaWR9IGZvciBsYXRlciB1c2Ugd2l0aAorCQlyZW1vdGVfcmVhZCgpIGlzIHN0b3JlZCB0aGVyZS4KKwkJU2VlIGFsc28gfGNsaWVudHNlcnZlcnwgfFJlbW90ZVJlcGx5fC4KKwkJVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB8c2FuZGJveHwuCisJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrY2xpZW50c2VydmVyfCBmZWF0dXJlfQorCQlOb3RlOiBBbnkgZXJyb3JzIHdpbGwgY2F1c2UgYSBsb2NhbCBlcnJvciBtZXNzYWdlIHRvIGJlIGlzc3VlZAorCQlhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIHRoZSBlbXB0eSBzdHJpbmcuCisJCUV4YW1wbGVzOiA+CisJCQk6ZWNobyByZW1vdGVfZXhwcigiZ3ZpbSIsICIyKzIiKQorCQkJOmVjaG8gcmVtb3RlX2V4cHIoImd2aW0xIiwgImI6Y3VycmVudF9zeW50YXgiKQorPAorCityZW1vdGVfZm9yZWdyb3VuZCh7c2VydmVyfSkJCQkJKnJlbW90ZV9mb3JlZ3JvdW5kKCkqCisJCU1vdmUgdGhlIFZpbSBzZXJ2ZXIgd2l0aCB0aGUgbmFtZSB7c2VydmVyfSB0byB0aGUgZm9yZWdyb3VuZC4KKwkJVGhpcyB3b3JrcyBsaWtlOiA+CisJCQlyZW1vdGVfZXhwcih7c2VydmVyfSwgImZvcmVncm91bmQoKSIpCis8CQlFeGNlcHQgdGhhdCBvbiBXaW4zMiBzeXN0ZW1zIHRoZSBjbGllbnQgZG9lcyB0aGUgd29yaywgdG8gd29yaworCQlhcm91bmQgdGhlIHByb2JsZW0gdGhhdCB0aGUgT1MgZG9lc24ndCBhbHdheXMgYWxsb3cgdGhlIHNlcnZlcgorCQl0byBicmluZyBpdHNlbGYgdG8gdGhlIGZvcmVncm91bmQuCisJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCQl7b25seSBpbiB0aGUgV2luMzIsIEF0aGVuYSwgTW90aWYgYW5kIEdUSyBHVUkgdmVyc2lvbnMgYW5kIHRoZQorCQlXaW4zMiBjb25zb2xlIHZlcnNpb259CisKKworcmVtb3RlX3BlZWsoe3NlcnZlcmlkfSBbLCB7cmV0dmFyfV0pCQkqcmVtb3RlX3BlZWsoKSoKKwkJUmV0dXJucyBhIHBvc2l0aXZlIG51bWJlciBpZiB0aGVyZSBhcmUgYXZhaWxhYmxlIHN0cmluZ3MKKwkJZnJvbSB7c2VydmVyaWR9LiAgQ29waWVzIGFueSByZXBseSBzdHJpbmcgaW50byB0aGUgdmFyaWFibGUKKwkJe3JldHZhcn0gaWYgc3BlY2lmaWVkLiAge3JldHZhcn0gbXVzdCBiZSBhIHN0cmluZyB3aXRoIHRoZQorCQluYW1lIG9mIGEgdmFyaWFibGUuCisJCVJldHVybnMgemVybyBpZiBub25lIGFyZSBhdmFpbGFibGUuCisJCVJldHVybnMgLTEgaWYgc29tZXRoaW5nIGlzIHdyb25nLgorCQlTZWUgYWxzbyB8Y2xpZW50c2VydmVyfC4KKwkJVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB8c2FuZGJveHwuCisJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrY2xpZW50c2VydmVyfCBmZWF0dXJlfQorCQlFeGFtcGxlczogPgorCQkJOmxldCByZXBsID0gIiIKKwkJCTplY2hvICJQRUVLOiAiLnJlbW90ZV9wZWVrKGlkLCAicmVwbCIpLiI6ICIucmVwbAorCityZW1vdGVfcmVhZCh7c2VydmVyaWR9KQkJCQkqcmVtb3RlX3JlYWQoKSoKKwkJUmV0dXJuIHRoZSBvbGRlc3QgYXZhaWxhYmxlIHJlcGx5IGZyb20ge3NlcnZlcmlkfSBhbmQgY29uc3VtZQorCQlpdC4gIEl0IGJsb2NrcyB1bnRpbCBhIHJlcGx5IGlzIGF2YWlsYWJsZS4KKwkJU2VlIGFsc28gfGNsaWVudHNlcnZlcnwuCisJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2NsaWVudHNlcnZlcnwgZmVhdHVyZX0KKwkJRXhhbXBsZTogPgorCQkJOmVjaG8gcmVtb3RlX3JlYWQoaWQpCis8CisJCQkJCQkJKnJlbW90ZV9zZW5kKCkqICpFMjQxKgorcmVtb3RlX3NlbmQoe3NlcnZlcn0sIHtzdHJpbmd9IFssIHtpZHZhcn1dKQorCQlTZW5kIHRoZSB7c3RyaW5nfSB0byB7c2VydmVyfS4gIFRoZSBzdHJpbmcgaXMgc2VudCBhcworCQlpbnB1dCBrZXlzIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseS4KKwkJSWYge2lkdmFyfSBpcyBwcmVzZW50LCBpdCBpcyB0YWtlbiBhcyB0aGUgbmFtZSBvZiBhCisJCXZhcmlhYmxlIGFuZCBhIHtzZXJ2ZXJpZH0gZm9yIGxhdGVyIHVzZSB3aXRoCisJCXJlbW90ZV9yZWFkKCkgaXMgc3RvcmVkIHRoZXJlLgorCQlTZWUgYWxzbyB8Y2xpZW50c2VydmVyfCB8UmVtb3RlUmVwbHl8LgorCQlUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHxzYW5kYm94fC4KKwkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtjbGllbnRzZXJ2ZXJ8IGZlYXR1cmV9CisJCU5vdGU6IEFueSBlcnJvcnMgd2lsbCBiZSByZXBvcnRlZCBpbiB0aGUgc2VydmVyIGFuZCBtYXkgbWVzcworCQl1cCB0aGUgZGlzcGxheS4KKwkJRXhhbXBsZXM6ID4KKwkJOmVjaG8gcmVtb3RlX3NlbmQoImd2aW0iLCAiOkRyb3BBbmRSZXBseSAiLmZpbGUsICJzZXJ2ZXJpZCIpLgorCQkgXCByZW1vdGVfcmVhZChzZXJ2ZXJpZCkKKworCQk6YXV0b2NtZCBOT05FIFJlbW90ZVJlcGx5ICoKKwkJIFwgZWNobyByZW1vdGVfcmVhZChleHBhbmQoIjxhbWF0Y2g+IikpCisJCTplY2hvIHJlbW90ZV9zZW5kKCJndmltIiwgIjpzbGVlcCAxMCB8IGVjaG8gIi4KKwkJIFwgJ3NlcnZlcjJjbGllbnQoZXhwYW5kKCI8Y2xpZW50PiIpLCAiSEVMTE8iKTxDUj4nKQorCisKK3JlbmFtZSh7ZnJvbX0sIHt0b30pCQkJCQkqcmVuYW1lKCkqCisJCVJlbmFtZSB0aGUgZmlsZSBieSB0aGUgbmFtZSB7ZnJvbX0gdG8gdGhlIG5hbWUge3RvfS4gIFRoaXMKKwkJc2hvdWxkIGFsc28gd29yayB0byBtb3ZlIGZpbGVzIGFjcm9zcyBmaWxlIHN5c3RlbXMuICBUaGUKKwkJcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyAwIGlmIHRoZSBmaWxlIHdhcyByZW5hbWVkCisJCXN1Y2Nlc3NmdWxseSwgYW5kIG5vbi16ZXJvIHdoZW4gdGhlIHJlbmFtaW5nIGZhaWxlZC4KKwkJVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB8c2FuZGJveHwuCisKK3Jlc29sdmUoe2ZpbGVuYW1lfSkJCQkJCSpyZXNvbHZlKCkqICpFNjU1KgorCQlPbiBNUy1XaW5kb3dzLCB3aGVuIHtmaWxlbmFtZX0gaXMgYSBzaG9ydGN1dCAoYSAubG5rIGZpbGUpLAorCQlyZXR1cm5zIHRoZSBwYXRoIHRoZSBzaG9ydGN1dCBwb2ludHMgdG8gaW4gYSBzaW1wbGlmaWVkIGZvcm0uCisJCU9uIFVuaXgsIHJlcGVhdCByZXNvbHZpbmcgc3ltYm9saWMgbGlua3MgaW4gYWxsIHBhdGgKKwkJY29tcG9uZW50cyBvZiB7ZmlsZW5hbWV9IGFuZCByZXR1cm4gdGhlIHNpbXBsaWZpZWQgcmVzdWx0LgorCQlUbyBjb3BlIHdpdGggbGluayBjeWNsZXMsIHJlc29sdmluZyBvZiBzeW1ib2xpYyBsaW5rcyBpcworCQlzdG9wcGVkIGFmdGVyIDEwMCBpdGVyYXRpb25zLgorCQlPbiBvdGhlciBzeXN0ZW1zLCByZXR1cm4gdGhlIHNpbXBsaWZpZWQge2ZpbGVuYW1lfS4KKwkJVGhlIHNpbXBsaWZpY2F0aW9uIHN0ZXAgaXMgZG9uZSBhcyBieSB8c2ltcGxpZnkoKXwuCisJCXJlc29sdmUoKSBrZWVwcyBhIGxlYWRpbmcgcGF0aCBjb21wb25lbnQgc3BlY2lmeWluZyB0aGUKKwkJY3VycmVudCBkaXJlY3RvcnkgKHByb3ZpZGVkIHRoZSByZXN1bHQgaXMgc3RpbGwgYSByZWxhdGl2ZQorCQlwYXRoIG5hbWUpIGFuZCBhbHNvIGtlZXBzIGEgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IuCisKK3NlYXJjaCh7cGF0dGVybn0gWywge2ZsYWdzfV0pCQkJCSpzZWFyY2goKSoKKwkJU2VhcmNoIGZvciByZWdleHAgcGF0dGVybiB7cGF0dGVybn0uICBUaGUgc2VhcmNoIHN0YXJ0cyBhdCB0aGUKKwkJY3Vyc29yIHBvc2l0aW9uLgorCQl7ZmxhZ3N9IGlzIGEgU3RyaW5nLCB3aGljaCBjYW4gY29udGFpbiB0aGVzZSBjaGFyYWN0ZXIgZmxhZ3M6CisJCSdiJwlzZWFyY2ggYmFja3dhcmQgaW5zdGVhZCBvZiBmb3J3YXJkCisJCSd3Jwl3cmFwIGFyb3VuZCB0aGUgZW5kIG9mIHRoZSBmaWxlCisJCSdXJwlkb24ndCB3cmFwIGFyb3VuZCB0aGUgZW5kIG9mIHRoZSBmaWxlCisJCUlmIG5laXRoZXIgJ3cnIG9yICdXJyBpcyBnaXZlbiwgdGhlICd3cmFwc2Nhbicgb3B0aW9uIGFwcGxpZXMuCisKKwkJV2hlbiBhIG1hdGNoIGhhcyBiZWVuIGZvdW5kIGl0cyBsaW5lIG51bWJlciBpcyByZXR1cm5lZCwgYW5kCisJCXRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBtYXRjaC4gIElmIHRoZXJlIGlzIG5vCisJCW1hdGNoIGEgMCBpcyByZXR1cm5lZCBhbmQgdGhlIGN1cnNvciBkb2Vzbid0IG1vdmUuICBObyBlcnJvcgorCQltZXNzYWdlIGlzIGdpdmVuLgorCisJCUV4YW1wbGUgKGdvZXMgb3ZlciBhbGwgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QpOiA+CisJCSAgICA6bGV0IG4gPSAxCisJCSAgICA6d2hpbGUgbiA8PSBhcmdjKCkJICAgICIgbG9vcCBvdmVyIGFsbCBmaWxlcyBpbiBhcmdsaXN0CisJCSAgICA6ICBleGUgImFyZ3VtZW50ICIgLiBuCisJCSAgICA6ICAiIHN0YXJ0IGF0IHRoZSBsYXN0IGNoYXIgaW4gdGhlIGZpbGUgYW5kIHdyYXAgZm9yIHRoZQorCQkgICAgOiAgIiBmaXJzdCBzZWFyY2ggdG8gZmluZCBtYXRjaCBhdCBzdGFydCBvZiBmaWxlCisJCSAgICA6ICBub3JtYWwgRyQKKwkJICAgIDogIGxldCBmbGFncyA9ICJ3IgorCQkgICAgOiAgd2hpbGUgc2VhcmNoKCJmb28iLCBmbGFncykgPiAwCisJCSAgICA6ICAgIHMvZm9vL2Jhci9nCisJCSAgICA6CSBsZXQgZmxhZ3MgPSAiVyIKKwkJICAgIDogIGVuZHdoaWxlCisJCSAgICA6ICB1cGRhdGUJCSAgICAiIHdyaXRlIHRoZSBmaWxlIGlmIG1vZGlmaWVkCisJCSAgICA6ICBsZXQgbiA9IG4gKyAxCisJCSAgICA6ZW5kd2hpbGUKKzwKKwkJCQkJCQkqc2VhcmNocGFpcigpKgorc2VhcmNocGFpcih7c3RhcnR9LCB7bWlkZGxlfSwge2VuZH0gWywge2ZsYWdzfSBbLCB7c2tpcH1dXSkKKwkJU2VhcmNoIGZvciB0aGUgbWF0Y2ggb2YgYSBuZXN0ZWQgc3RhcnQtZW5kIHBhaXIuICBUaGlzIGNhbiBiZQorCQl1c2VkIHRvIGZpbmQgdGhlICJlbmRpZiIgdGhhdCBtYXRjaGVzIGFuICJpZiIsIHdoaWxlIG90aGVyCisJCWlmL2VuZGlmIHBhaXJzIGluIGJldHdlZW4gYXJlIGlnbm9yZWQuCisJCVRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZSBjdXJzb3IuICBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUKKwkJY3Vyc29yIGlzIHBvc2l0aW9uZWQgYXQgaXQgYW5kIHRoZSBsaW5lIG51bWJlciBpcyByZXR1cm5lZC4KKwkJSWYgbm8gbWF0Y2ggaXMgZm91bmQgMCBvciAtMSBpcyByZXR1cm5lZCBhbmQgdGhlIGN1cnNvcgorCQlkb2Vzbid0IG1vdmUuICBObyBlcnJvciBtZXNzYWdlIGlzIGdpdmVuLgorCisJCXtzdGFydH0sIHttaWRkbGV9IGFuZCB7ZW5kfSBhcmUgcGF0dGVybnMsIHNlZSB8cGF0dGVybnwuICBUaGV5CisJCW11c3Qgbm90IGNvbnRhaW4gXCggXCkgcGFpcnMuICBVc2Ugb2YgXCUoIFwpIGlzIGFsbG93ZWQuICBXaGVuCisJCXttaWRkbGV9IGlzIG5vdCBlbXB0eSwgaXQgaXMgZm91bmQgd2hlbiBzZWFyY2hpbmcgZnJvbSBlaXRoZXIKKwkJZGlyZWN0aW9uLCBidXQgb25seSB3aGVuIG5vdCBpbiBhIG5lc3RlZCBzdGFydC1lbmQgcGFpci4gIEEKKwkJdHlwaWNhbCB1c2UgaXM6ID4KKwkJCXNlYXJjaHBhaXIoJ1w8aWZcPicsICdcPGVsc2VcPicsICdcPGVuZGlmXD4nKQorPAkJQnkgbGVhdmluZyB7bWlkZGxlfSBlbXB0eSB0aGUgImVsc2UiIGlzIHNraXBwZWQuCisKKwkJe2ZsYWdzfSBhcmUgdXNlZCBsaWtlIHdpdGggfHNlYXJjaCgpfC4gIEFkZGl0aW9uYWxseToKKwkJJ24nCWRvIE5vdCBtb3ZlIHRoZSBjdXJzb3IKKwkJJ3InCVJlcGVhdCB1bnRpbCBubyBtb3JlIG1hdGNoZXMgZm91bmQ7IHdpbGwgZmluZCB0aGUKKwkJCW91dGVyIHBhaXIKKwkJJ20nCXJldHVybiBudW1iZXIgb2YgTWF0Y2hlcyBpbnN0ZWFkIG9mIGxpbmUgbnVtYmVyIHdpdGgKKwkJCXRoZSBtYXRjaDsgd2lsbCBvbmx5IGJlID4gMSB3aGVuICdyJyBpcyB1c2VkLgorCisJCVdoZW4gYSBtYXRjaCBmb3Ige3N0YXJ0fSwge21pZGRsZX0gb3Ige2VuZH0gaXMgZm91bmQsIHRoZQorCQl7c2tpcH0gZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgd2l0aCB0aGUgY3Vyc29yIHBvc2l0aW9uZWQgb24KKwkJdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaC4gIEl0IHNob3VsZCByZXR1cm4gbm9uLXplcm8gaWYgdGhpcworCQltYXRjaCBpcyB0byBiZSBza2lwcGVkLiAgRS5nLiwgYmVjYXVzZSBpdCBpcyBpbnNpZGUgYSBjb21tZW50CisJCW9yIGEgc3RyaW5nLgorCQlXaGVuIHtza2lwfSBpcyBvbWl0dGVkIG9yIGVtcHR5LCBldmVyeSBtYXRjaCBpcyBhY2NlcHRlZC4KKwkJV2hlbiBldmFsdWF0aW5nIHtza2lwfSBjYXVzZXMgYW4gZXJyb3IgdGhlIHNlYXJjaCBpcyBhYm9ydGVkCisJCWFuZCAtMSByZXR1cm5lZC4KKworCQlUaGUgdmFsdWUgb2YgJ2lnbm9yZWNhc2UnIGlzIHVzZWQuICAnbWFnaWMnIGlzIGlnbm9yZWQsIHRoZQorCQlwYXR0ZXJucyBhcmUgdXNlZCBsaWtlIGl0J3Mgb24uCisKKwkJVGhlIHNlYXJjaCBzdGFydHMgZXhhY3RseSBhdCB0aGUgY3Vyc29yLiAgQSBtYXRjaCB3aXRoCisJCXtzdGFydH0sIHttaWRkbGV9IG9yIHtlbmR9IGF0IHRoZSBuZXh0IGNoYXJhY3RlciwgaW4gdGhlCisJCWRpcmVjdGlvbiBvZiBzZWFyY2hpbmcsIGlzIHRoZSBmaXJzdCBvbmUgZm91bmQuICBFeGFtcGxlOiA+CisJCQlpZiAxCisJCQkgIGlmIDIKKwkJCSAgZW5kaWYgMgorCQkJZW5kaWYgMQorPAkJV2hlbiBzdGFydGluZyBhdCB0aGUgImlmIDIiLCB3aXRoIHRoZSBjdXJzb3Igb24gdGhlICJpIiwgYW5kCisJCXNlYXJjaGluZyBmb3J3YXJkcywgdGhlICJlbmRpZiAyIiBpcyBmb3VuZC4gIFdoZW4gc3RhcnRpbmcgb24KKwkJdGhlIGNoYXJhY3RlciBqdXN0IGJlZm9yZSB0aGUgImlmIDIiLCB0aGUgImVuZGlmIDEiIHdpbGwgYmUKKwkJZm91bmQuICBUaGF0J3MgYmVjYXVzZSB0aGUgImlmIDIiIHdpbGwgYmUgZm91bmQgZmlyc3QsIGFuZAorCQl0aGVuIHRoaXMgaXMgY29uc2lkZXJlZCB0byBiZSBhIG5lc3RlZCBpZi9lbmRpZiBmcm9tICJpZiAyIiB0bworCQkiZW5kaWYgMiIuCisJCVdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkcyBhbmQge2VuZH0gaXMgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIsCisJCWl0IG1heSBiZSB1c2VmdWwgdG8gcHV0ICJcenMiIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHNvCisJCXRoYXQgd2hlbiB0aGUgY3Vyc29yIGlzIGluc2lkZSBhIG1hdGNoIHdpdGggdGhlIGVuZCBpdCBmaW5kcworCQl0aGUgbWF0Y2hpbmcgc3RhcnQuCisKKwkJRXhhbXBsZSwgdG8gZmluZCB0aGUgImVuZGlmIiBjb21tYW5kIGluIGEgVmltIHNjcmlwdDogPgorCisJOmVjaG8gc2VhcmNocGFpcignXDxpZlw+JywgJ1w8ZWxcJVtzZWlmXVw+JywgJ1w8ZW5cJVtkaWZdXD4nLCAnVycsCisJCQlcICdnZXRsaW5lKCIuIikgPX4gIl5cXHMqXCIiJykKKworPAkJVGhlIGN1cnNvciBtdXN0IGJlIGF0IG9yIGFmdGVyIHRoZSAiaWYiIGZvciB3aGljaCBhIG1hdGNoIGlzCisJCXRvIGJlIGZvdW5kLiAgTm90ZSB0aGF0IHNpbmdsZS1xdW90ZSBzdHJpbmdzIGFyZSB1c2VkIHRvIGF2b2lkCisJCWhhdmluZyB0byBkb3VibGUgdGhlIGJhY2tzbGFzaGVzLiAgVGhlIHNraXAgZXhwcmVzc2lvbiBvbmx5CisJCWNhdGNoZXMgY29tbWVudHMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgbm90IGFmdGVyIGEgY29tbWFuZC4KKwkJQWxzbywgYSB3b3JkICJlbiIgb3IgImlmIiBoYWxmd2F5IGEgbGluZSBpcyBjb25zaWRlcmVkIGEKKwkJbWF0Y2guCisJCUFub3RoZXIgZXhhbXBsZSwgdG8gc2VhcmNoIGZvciB0aGUgbWF0Y2hpbmcgInsiIG9mIGEgIn0iOiA+CisKKwk6ZWNobyBzZWFyY2hwYWlyKCd7JywgJycsICd9JywgJ2JXJykKKworPAkJVGhpcyB3b3JrcyB3aGVuIHRoZSBjdXJzb3IgaXMgYXQgb3IgYmVmb3JlIHRoZSAifSIgZm9yIHdoaWNoIGEKKwkJbWF0Y2ggaXMgdG8gYmUgZm91bmQuICBUbyByZWplY3QgbWF0Y2hlcyB0aGF0IHN5bnRheAorCQloaWdobGlnaHRpbmcgcmVjb2duaXplZCBhcyBzdHJpbmdzOiA+CisKKwk6ZWNobyBzZWFyY2hwYWlyKCd7JywgJycsICd9JywgJ2JXJywKKwkgICAgIFwgJ3N5bklEYXR0cihzeW5JRChsaW5lKCIuIiksIGNvbCgiLiIpLCAwKSwgIm5hbWUiKSA9fj8gInN0cmluZyInKQorPAorc2VydmVyMmNsaWVudCgge2NsaWVudGlkfSwge3N0cmluZ30pCQkJKnNlcnZlcjJjbGllbnQoKSoKKwkJU2VuZCBhIHJlcGx5IHN0cmluZyB0byB7Y2xpZW50aWR9LiAgVGhlIG1vc3QgcmVjZW50IHtjbGllbnRpZH0KKwkJdGhhdCBzZW50IGEgc3RyaW5nIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBleHBhbmQoIjxjbGllbnQ+IikuCisJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrY2xpZW50c2VydmVyfCBmZWF0dXJlfQorCQlOb3RlOgorCQlUaGlzIGlkIGhhcyB0byBiZSBzdG9yZWQgYmVmb3JlIHRoZSBuZXh0IGNvbW1hbmQgY2FuIGJlCisJCXJlY2VpdmVkLiBJZS4gYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSByZWNlaXZlZCBjb21tYW5kIGFuZAorCQliZWZvcmUgY2FsbGluZyBhbnkgY29tbWFuZHMgdGhhdCB3YWl0cyBmb3IgaW5wdXQuCisJCVNlZSBhbHNvIHxjbGllbnRzZXJ2ZXJ8LgorCQlFeGFtcGxlOiA+CisJCQk6ZWNobyBzZXJ2ZXIyY2xpZW50KGV4cGFuZCgiPGNsaWVudD4iKSwgIkhFTExPIikKKzwKK3NlcnZlcmxpc3QoKQkJCQkJKnNlcnZlcmxpc3QoKSoKKwkJUmV0dXJuIGEgbGlzdCBvZiBhdmFpbGFibGUgc2VydmVyIG5hbWVzLCBvbmUgcGVyIGxpbmUuCisJCVdoZW4gdGhlcmUgYXJlIG5vIHNlcnZlcnMgb3IgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUKKwkJYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiAgU2VlIGFsc28gfGNsaWVudHNlcnZlcnwuCisJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrY2xpZW50c2VydmVyfCBmZWF0dXJlfQorCQlFeGFtcGxlOiA+CisJCQk6ZWNobyBzZXJ2ZXJsaXN0KCkKKzwKK3NldGJ1ZnZhcih7ZXhwcn0sIHt2YXJuYW1lfSwge3ZhbH0pCQkJKnNldGJ1ZnZhcigpKgorCQlTZXQgb3B0aW9uIG9yIGxvY2FsIHZhcmlhYmxlIHt2YXJuYW1lfSBpbiBidWZmZXIge2V4cHJ9IHRvCisJCXt2YWx9LgorCQlUaGlzIGFsc28gd29ya3MgZm9yIGEgZ2xvYmFsIG9yIGxvY2FsIHdpbmRvdyBvcHRpb24sIGJ1dCBpdAorCQlkb2Vzbid0IHdvcmsgZm9yIGEgZ2xvYmFsIG9yIGxvY2FsIHdpbmRvdyB2YXJpYWJsZS4KKwkJRm9yIGEgbG9jYWwgd2luZG93IG9wdGlvbiB0aGUgZ2xvYmFsIHZhbHVlIGlzIHVuY2hhbmdlZC4KKwkJRm9yIHRoZSB1c2Ugb2Yge2V4cHJ9LCBzZWUgfGJ1Zm5hbWUoKXwgYWJvdmUuCisJCU5vdGUgdGhhdCB0aGUgdmFyaWFibGUgbmFtZSB3aXRob3V0ICJiOiIgbXVzdCBiZSB1c2VkLgorCQlFeGFtcGxlczogPgorCQkJOmNhbGwgc2V0YnVmdmFyKDEsICImbW9kIiwgMSkKKwkJCTpjYWxsIHNldGJ1ZnZhcigidG9kbyIsICJteXZhciIsICJmb29iYXIiKQorPAkJVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB8c2FuZGJveHwuCisKK3NldGNtZHBvcyh7cG9zfSkJCQkJCSpzZXRjbWRwb3MoKSoKKwkJU2V0IHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGNvbW1hbmQgbGluZSB0byBieXRlIHBvc2l0aW9uCisJCXtwb3N9LiAgVGhlIGZpcnN0IHBvc2l0aW9uIGlzIDEuCisJCVVzZSB8Z2V0Y21kcG9zKCl8IHRvIG9idGFpbiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKwkJT25seSB3b3JrcyB3aGlsZSBlZGl0aW5nIHRoZSBjb21tYW5kIGxpbmUsIHRodXMgeW91IG11c3QgdXNlCisJCXxjX0NUUkwtXF9lfCBvciB8Y19DVFJMLVJfPXwuICBUaGUgcG9zaXRpb24gaXMgc2V0IGFmdGVyIHRoZQorCQljb21tYW5kIGxpbmUgaXMgc2V0IHRvIHRoZSBleHByZXNzaW9uLgorCQlXaGVuIHRoZSBudW1iZXIgaXMgdG9vIGJpZyB0aGUgY3Vyc29yIGlzIHB1dCBhdCB0aGUgZW5kIG9mIHRoZQorCQlsaW5lLiAgQSBudW1iZXIgc21hbGxlciB0aGFuIG9uZSBoYXMgdW5kZWZpbmVkIHJlc3VsdHMuCisJCVJldHVybnMgMCB3aGVuIHN1Y2Nlc3NmdWwsIDEgd2hlbiBub3QgZWRpdGluZyB0aGUgY29tbWFuZAorCQlsaW5lLgorCitzZXRsaW5lKHtsbnVtfSwge2xpbmV9KQkJCQkJKnNldGxpbmUoKSoKKwkJU2V0IGxpbmUge2xudW19IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciB0byB7bGluZX0uICBJZiB0aGlzCisJCXN1Y2NlZWRzLCAwIGlzIHJldHVybmVkLiAgSWYgdGhpcyBmYWlscyAobW9zdCBsaWtlbHkgYmVjYXVzZQorCQl7bG51bX0gaXMgaW52YWxpZCkgMSBpcyByZXR1cm5lZC4gIEV4YW1wbGU6ID4KKwkJCTpjYWxsIHNldGxpbmUoNSwgc3RyZnRpbWUoIiVjIikpCis8CQlOb3RlOiBUaGUgJ1sgYW5kICddIG1hcmtzIGFyZSBub3Qgc2V0LgorCisJCQkJCQkJKnNldHJlZygpKgorc2V0cmVnKHtyZWduYW1lfSwge3ZhbHVlfSBbLHtvcHRpb25zfV0pCisJCVNldCB0aGUgcmVnaXN0ZXIge3JlZ25hbWV9IHRvIHt2YWx1ZX0uCisJCUlmIHtvcHRpb25zfSBjb250YWlucyAiYSIgb3Ige3JlZ25hbWV9IGlzIHVwcGVyIGNhc2UsCisJCXRoZW4gdGhlIHZhbHVlIGlzIGFwcGVuZGVkLgorCQl7b3B0aW9uc30gY2FuIGFsc28gY29udGFpbnMgYSByZWdpc3RlciB0eXBlIHNwZWNpZmljYXRpb246CisJCSAgICAiYyIgb3IgInYiCSAgICAgIHxjaGFyYWN0ZXJ3aXNlfCBtb2RlCisJCSAgICAibCIgb3IgIlYiCSAgICAgIHxsaW5ld2lzZXwgbW9kZQorCQkgICAgImIiIG9yICI8Q1RSTC1WPiIgfGJsb2Nrd2lzZS12aXN1YWx8IG1vZGUKKwkJSWYgYSBudW1iZXIgaW1tZWRpYXRlbHkgZm9sbG93cyAiYiIgb3IgIjxDVFJMLVY+IiB0aGVuIHRoaXMgaXMKKwkJdXNlZCBhcyB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdGlvbiAtIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQKKwkJdGhlbiB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKwkJaW4gdGhlIGxvbmdlc3QgbGluZSAoY291bnRpbmcgYSA8VEFCPiBhcyAxIGNoYXJhY3RlcikuCisKKwkJSWYge29wdGlvbnN9IGNvbnRhaW5zIG5vIHJlZ2lzdGVyIHNldHRpbmdzLCB0aGVuIHRoZSBkZWZhdWx0CisJCWlzIHRvIHVzZSBjaGFyYWN0ZXIgbW9kZSB1bmxlc3Mge3ZhbHVlfSBlbmRzIGluIGEgPE5MPi4KKwkJU2V0dGluZyB0aGUgJz0nIHJlZ2lzdGVyIGlzIG5vdCBwb3NzaWJsZS4KKwkJUmV0dXJucyB6ZXJvIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKworCQlFeGFtcGxlczogPgorCQkJOmNhbGwgc2V0cmVnKHY6cmVnaXN0ZXIsIEAqKQorCQkJOmNhbGwgc2V0cmVnKCcqJywgQCUsICdhYycpCisJCQk6Y2FsbCBzZXRyZWcoJ2EnLCAiMVxuMlxuMyIsICdiNScpCisKKzwJCVRoaXMgZXhhbXBsZSBzaG93cyB1c2luZyB0aGUgZnVuY3Rpb25zIHRvIHNhdmUgYW5kIHJlc3RvcmUgYQorCQlyZWdpc3Rlci4gPgorCQkJOmxldCB2YXJfYSA9IGdldHJlZygnYScpCisJCQk6bGV0IHZhcl9hbW9kZSA9IGdldHJlZ3R5cGUoJ2EnKQorCQkJICAgIC4uLi4KKwkJCTpjYWxsIHNldHJlZygnYScsIHZhcl9hLCB2YXJfYW1vZGUpCisKKzwJCVlvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIHR5cGUgb2YgYSByZWdpc3RlciBieSBhcHBlbmRpbmcKKwkJbm90aGluZzogPgorCQkJOmNhbGwgc2V0cmVnKCdhJywgJycsICdhbCcpCisKK3NldHdpbnZhcih7bnJ9LCB7dmFybmFtZX0sIHt2YWx9KQkJCSpzZXR3aW52YXIoKSoKKwkJU2V0IG9wdGlvbiBvciBsb2NhbCB2YXJpYWJsZSB7dmFybmFtZX0gaW4gd2luZG93IHtucn0gdG8KKwkJe3ZhbH0uCisJCVRoaXMgYWxzbyB3b3JrcyBmb3IgYSBnbG9iYWwgb3IgbG9jYWwgYnVmZmVyIG9wdGlvbiwgYnV0IGl0CisJCWRvZXNuJ3Qgd29yayBmb3IgYSBnbG9iYWwgb3IgbG9jYWwgYnVmZmVyIHZhcmlhYmxlLgorCQlGb3IgYSBsb2NhbCBidWZmZXIgb3B0aW9uIHRoZSBnbG9iYWwgdmFsdWUgaXMgdW5jaGFuZ2VkLgorCQlOb3RlIHRoYXQgdGhlIHZhcmlhYmxlIG5hbWUgd2l0aG91dCAidzoiIG11c3QgYmUgdXNlZC4KKwkJRXhhbXBsZXM6ID4KKwkJCTpjYWxsIHNldHdpbnZhcigxLCAiJmxpc3QiLCAwKQorCQkJOmNhbGwgc2V0d2ludmFyKDIsICJteXZhciIsICJmb29iYXIiKQorPAkJVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB8c2FuZGJveHwuCisKK3NpbXBsaWZ5KHtmaWxlbmFtZX0pCQkJCQkqc2ltcGxpZnkoKSoKKwkJU2ltcGxpZnkgdGhlIGZpbGUgbmFtZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGhvdXQgY2hhbmdpbmcKKwkJdGhlIG1lYW5pbmcuICBTaG9ydGN1dHMgKG9uIE1TLVdpbmRvd3MpIG9yIHN5bWJvbGljIGxpbmtzIChvbgorCQlVbml4KSBhcmUgbm90IHJlc29sdmVkLiAgSWYgdGhlIGZpcnN0IHBhdGggY29tcG9uZW50IGluCisJCXtmaWxlbmFtZX0gZGVzaWduYXRlcyB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoaXMgd2lsbCBiZQorCQl2YWxpZCBmb3IgdGhlIHJlc3VsdCBhcyB3ZWxsLiAgQSB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBpcworCQlub3QgcmVtb3ZlZCBlaXRoZXIuCisJCUV4YW1wbGU6ID4KKwkJCXNpbXBsaWZ5KCIuL2Rpci8uLi8uLy9maWxlLyIpID09ICIuL2ZpbGUvIgorPAkJTm90ZTogVGhlIGNvbWJpbmF0aW9uICJkaXIvLi4iIGlzIG9ubHkgcmVtb3ZlZCBpZiAiZGlyIiBpcworCQlhIHNlYXJjaGFibGUgZGlyZWN0b3J5IG9yIGRvZXMgbm90IGV4aXN0LiAgT24gVW5peCwgaXQgaXMgYWxzbworCQlyZW1vdmVkIHdoZW4gImRpciIgaXMgYSBzeW1ib2xpYyBsaW5rIHdpdGhpbiB0aGUgc2FtZQorCQlkaXJlY3RvcnkuICBJbiBvcmRlciB0byByZXNvbHZlIGFsbCB0aGUgaW52b2x2ZWQgc3ltYm9saWMKKwkJbGlua3MgYmVmb3JlIHNpbXBsaWZ5aW5nIHRoZSBwYXRoIG5hbWUsIHVzZSB8cmVzb2x2ZSgpfC4KKworc3RyZnRpbWUoe2Zvcm1hdH0gWywge3RpbWV9XSkJCQkJKnN0cmZ0aW1lKCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIGEgZm9ybWF0dGVkIGRhdGUgYW5kIHRpbWUsIGFzCisJCXNwZWNpZmllZCBieSB0aGUge2Zvcm1hdH0gc3RyaW5nLiAgVGhlIGdpdmVuIHt0aW1lfSBpcyB1c2VkLAorCQlvciB0aGUgY3VycmVudCB0aW1lIGlmIG5vIHRpbWUgaXMgZ2l2ZW4uICBUaGUgYWNjZXB0ZWQKKwkJe2Zvcm1hdH0gZGVwZW5kcyBvbiB5b3VyIHN5c3RlbSwgdGh1cyB0aGlzIGlzIG5vdCBwb3J0YWJsZSEKKwkJU2VlIHRoZSBtYW51YWwgcGFnZSBvZiB0aGUgQyBmdW5jdGlvbiBzdHJmdGltZSgpIGZvciB0aGUKKwkJZm9ybWF0LiAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSByZXN1bHQgaXMgODAgY2hhcmFjdGVycy4KKwkJU2VlIGFsc28gfGxvY2FsdGltZSgpfCBhbmQgfGdldGZ0aW1lKCl8LgorCQlUaGUgbGFuZ3VhZ2UgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUgfDpsYW5ndWFnZXwgY29tbWFuZC4KKwkJRXhhbXBsZXM6ID4KKwkJICA6ZWNobyBzdHJmdGltZSgiJWMiKQkJICAgU3VuIEFwciAyNyAxMTo0OToyMyAxOTk3CisJCSAgOmVjaG8gc3RyZnRpbWUoIiVZICViICVkICVYIikJICAgMTk5NyBBcHIgMjcgMTE6NTM6MjUKKwkJICA6ZWNobyBzdHJmdGltZSgiJXklbSVkICVUIikJICAgOTcwNDI3IDExOjUzOjU1CisJCSAgOmVjaG8gc3RyZnRpbWUoIiVIOiVNIikJICAgMTE6NTUKKwkJICA6ZWNobyBzdHJmdGltZSgiJWMiLCBnZXRmdGltZSgiZmlsZS5jIikpCisJCQkJCQkgICBTaG93IG1vZCB0aW1lIG9mIGZpbGUuYy4KKzwKK3N0cmlkeCh7aGF5c3RhY2t9LCB7bmVlZGxlfSkJCQkJKnN0cmlkeCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBnaXZlcyB0aGUgaW5kZXggaW4ge2hheXN0YWNrfSBvZgorCQl0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgU3RyaW5nIHtuZWVkbGV9IGluIHRoZSBTdHJpbmcKKwkJe2hheXN0YWNrfS4gVGhlIHNlYXJjaCBpcyBkb25lIGNhc2Utc2Vuc2l0aXZlLiBGb3IgYWR2YW5jZWQKKwkJc2VhcmNoZXMgdXNlIHxtYXRjaCgpfC4KKwkJSWYgdGhlIHtuZWVkbGV9IGRvZXMgbm90IG9jY3VyIGluIHtoYXlzdGFja30gaXQgcmV0dXJucyAtMS4KKwkJU2VlIGFsc28gfHN0cnJpZHgoKXwuIEV4YW1wbGVzOiA+CisJCSAgOmVjaG8gc3RyaWR4KCJBbiBFeGFtcGxlIiwgIkV4YW1wbGUiKQkgICAgIDMKKwkJICA6ZWNobyBzdHJpZHgoIlN0YXJ0aW5nIHBvaW50IiwgIlN0YXJ0IikgICAgMAorCQkgIDplY2hvIHN0cmlkeCgiU3RhcnRpbmcgcG9pbnQiLCAic3RhcnQiKSAgIC0xCis8CisJCQkJCQkJKnN0cmxlbigpKgorc3RybGVuKHtleHByfSkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIGxlbmd0aCBvZiB0aGUgU3RyaW5nCisJCXtleHByfSBpbiBieXRlcy4gIElmIHlvdSB3YW50IHRvIGNvdW50IHRoZSBudW1iZXIgb2YKKwkJbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHVzZSBzb21ldGhpbmcgbGlrZSB0aGlzOiA+CisKKwkJCTpsZXQgbGVuID0gc3RybGVuKHN1YnN0aXR1dGUoc3RyLCAiLiIsICJ4IiwgImciKSkKKworPAkJQ29tcG9zaW5nIGNoYXJhY3RlcnMgYXJlIG5vdCBjb3VudGVkLgorCitzdHJwYXJ0KHtzcmN9LCB7c3RhcnR9Wywge2xlbn1dKQkJCSpzdHJwYXJ0KCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHBhcnQgb2Yge3NyY30sIHN0YXJ0aW5nIGZyb20KKwkJYnl0ZSB7c3RhcnR9LCB3aXRoIHRoZSBsZW5ndGgge2xlbn0uCisJCVdoZW4gbm9uLWV4aXN0aW5nIGJ5dGVzIGFyZSBpbmNsdWRlZCwgdGhpcyBkb2Vzbid0IHJlc3VsdCBpbgorCQlhbiBlcnJvciwgdGhlIGJ5dGVzIGFyZSBzaW1wbHkgb21pdHRlZC4KKwkJSWYge2xlbn0gaXMgbWlzc2luZywgdGhlIGNvcHkgY29udGludWVzIGZyb20ge3N0YXJ0fSB0aWxsIHRoZQorCQllbmQgb2YgdGhlIHtzcmN9LiA+CisJCQlzdHJwYXJ0KCJhYmNkZWZnIiwgMywgMikgICAgPT0gImRlIgorCQkJc3RycGFydCgiYWJjZGVmZyIsIC0yLCA0KSAgID09ICJhYiIKKwkJCXN0cnBhcnQoImFiY2RlZmciLCA1LCA0KSAgICA9PSAiZmciCisJCQlzdHJwYXJ0KCJhYmNkZWZnIiwgMykgICAgICAgPT0gImRlZmciCis8CQlOb3RlOiBUbyBnZXQgdGhlIGZpcnN0IGNoYXJhY3Rlciwge3N0YXJ0fSBtdXN0IGJlIDAuICBGb3IKKwkJZXhhbXBsZSwgdG8gZ2V0IHRocmVlIGJ5dGVzIHVuZGVyIGFuZCBhZnRlciB0aGUgY3Vyc29yOiA+CisJCQlzdHJwYXJ0KGdldGxpbmUobGluZSgiLiIpKSwgY29sKCIuIikgLSAxLCAzKQorPAorc3RycmlkeCh7aGF5c3RhY2t9LCB7bmVlZGxlfSkJCQkJKnN0cnJpZHgoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggZ2l2ZXMgdGhlIGluZGV4IGluIHtoYXlzdGFja30gb2YKKwkJdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgU3RyaW5nIHtuZWVkbGV9IGluIHRoZSBTdHJpbmcKKwkJe2hheXN0YWNrfS4gVGhlIHNlYXJjaCBpcyBkb25lIGNhc2Utc2Vuc2l0aXZlLiBGb3IgYWR2YW5jZWQKKwkJc2VhcmNoZXMgdXNlIHxtYXRjaCgpfC4KKwkJSWYgdGhlIHtuZWVkbGV9IGRvZXMgbm90IG9jY3VyIGluIHtoYXlzdGFja30gaXQgcmV0dXJucyAtMS4KKwkJU2VlIGFsc28gfHN0cmlkeCgpfC4gRXhhbXBsZXM6ID4KKwkJICA6ZWNobyBzdHJyaWR4KCJhbiBhbmdyeSBhcm1hZGlsbG8iLCAiYW4iKQkgICAgIDMKKzwKK3N0cnRyYW5zKHtleHByfSkJCQkJCSpzdHJ0cmFucygpKgorCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyB7ZXhwcn0gd2l0aCBhbGwgdW5wcmludGFibGUKKwkJY2hhcmFjdGVycyB0cmFuc2xhdGVkIGludG8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgfCdpc3ByaW50J3wuCisJCUxpa2UgdGhleSBhcmUgc2hvd24gaW4gYSB3aW5kb3cuICBFeGFtcGxlOiA+CisJCQllY2hvIHN0cnRyYW5zKEBhKQorPAkJVGhpcyBkaXNwbGF5cyBhIG5ld2xpbmUgaW4gcmVnaXN0ZXIgYSBhcyAiXkAiIGluc3RlYWQgb2YKKwkJc3RhcnRpbmcgYSBuZXcgbGluZS4KKworc3VibWF0Y2goe25yfSkJCQkJCQkqc3VibWF0Y2goKSoKKwkJT25seSBmb3IgYW4gZXhwcmVzc2lvbiBpbiBhIHw6c3Vic3RpdHV0ZXwgY29tbWFuZC4gIFJldHVybnMKKwkJdGhlIHtucn0ndGggc3VibWF0Y2ggb2YgdGhlIG1hdGNoZWQgdGV4dC4gIFdoZW4ge25yfSBpcyAwCisJCXRoZSB3aG9sZSBtYXRjaGVkIHRleHQgaXMgcmV0dXJuZWQuCisJCUV4YW1wbGU6ID4KKwkJCTpzL1xkXCsvXD1zdWJtYXRjaCgwKSArIDEvCis8CQlUaGlzIGZpbmRzIHRoZSBmaXJzdCBudW1iZXIgaW4gdGhlIGxpbmUgYW5kIGFkZHMgb25lIHRvIGl0LgorCQlBIGxpbmUgYnJlYWsgaXMgaW5jbHVkZWQgYXMgYSBuZXdsaW5lIGNoYXJhY3Rlci4KKworc3Vic3RpdHV0ZSh7ZXhwcn0sIHtwYXR9LCB7c3VifSwge2ZsYWdzfSkJCSpzdWJzdGl0dXRlKCkqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIGEgY29weSBvZiB7ZXhwcn0sIGluIHdoaWNoCisJCXRoZSBmaXJzdCBtYXRjaCBvZiB7cGF0fSBpcyByZXBsYWNlZCB3aXRoIHtzdWJ9LiAgVGhpcyB3b3JrcworCQlsaWtlIHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgKHdpdGhvdXQgYW55IGZsYWdzKS4gIEJ1dCB0aGUKKwkJbWF0Y2hpbmcgd2l0aCB7cGF0fSBpcyBhbHdheXMgZG9uZSBsaWtlIHRoZSAnbWFnaWMnIG9wdGlvbiBpcworCQlzZXQgYW5kICdjcG9wdGlvbnMnIGlzIGVtcHR5ICh0byBtYWtlIHNjcmlwdHMgcG9ydGFibGUpLgorCQlTZWUgfHN0cmluZy1tYXRjaHwgZm9yIGhvdyB7cGF0fSBpcyB1c2VkLgorCQlBbmQgYSAifiIgaW4ge3N1Yn0gaXMgbm90IHJlcGxhY2VkIHdpdGggdGhlIHByZXZpb3VzIHtzdWJ9LgorCQlOb3RlIHRoYXQgc29tZSBjb2RlcyBpbiB7c3VifSBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nCisJCXxzdWItcmVwbGFjZS1zcGVjaWFsfC4gIEZvciBleGFtcGxlLCB0byByZXBsYWNlIHNvbWV0aGluZyB3aXRoCisJCSJcbiIgKHR3byBjaGFyYWN0ZXJzKSwgdXNlICJcXFxcbiIgb3IgJ1xcbicuCisJCVdoZW4ge3BhdH0gZG9lcyBub3QgbWF0Y2ggaW4ge2V4cHJ9LCB7ZXhwcn0gaXMgcmV0dXJuZWQKKwkJdW5tb2RpZmllZC4KKwkJV2hlbiB7ZmxhZ3N9IGlzICJnIiwgYWxsIG1hdGNoZXMgb2Yge3BhdH0gaW4ge2V4cHJ9IGFyZQorCQlyZXBsYWNlZC4gIE90aGVyd2lzZSB7ZmxhZ3N9IHNob3VsZCBiZSAiIi4KKwkJRXhhbXBsZTogPgorCQkJOmxldCAmcGF0aCA9IHN1YnN0aXR1dGUoJnBhdGgsICIsXFw9W14sXSokIiwgIiIsICIiKQorPAkJVGhpcyByZW1vdmVzIHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgJ3BhdGgnIG9wdGlvbi4gPgorCQkJOmVjaG8gc3Vic3RpdHV0ZSgidGVzdGluZyIsICIuKiIsICJcXFVcXDAiLCAiIikKKzwJCXJlc3VsdHMgaW4gIlRFU1RJTkciLgorCitzeW5JRCh7bGluZX0sIHtjb2x9LCB7dHJhbnN9KQkJCQkqc3luSUQoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIHN5bnRheCBJRCBhdCB0aGUgcG9zaXRpb24KKwkJe2xpbmV9IGFuZCB7Y29sfSBpbiB0aGUgY3VycmVudCB3aW5kb3cuCisJCVRoZSBzeW50YXggSUQgY2FuIGJlIHVzZWQgd2l0aCB8c3luSURhdHRyKCl8IGFuZAorCQl8c3luSUR0cmFucygpfCB0byBvYnRhaW4gc3ludGF4IGluZm9ybWF0aW9uIGFib3V0IHRleHQuCisJCXtjb2x9IGlzIDEgZm9yIHRoZSBsZWZ0bW9zdCBjb2x1bW4sIHtsaW5lfSBpcyAxIGZvciB0aGUgZmlyc3QKKwkJbGluZS4KKwkJV2hlbiB7dHJhbnN9IGlzIG5vbi16ZXJvLCB0cmFuc3BhcmVudCBpdGVtcyBhcmUgcmVkdWNlZCB0byB0aGUKKwkJaXRlbSB0aGF0IHRoZXkgcmV2ZWFsLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB3YW50aW5nIHRvIGtub3cKKwkJdGhlIGVmZmVjdGl2ZSBjb2xvci4gIFdoZW4ge3RyYW5zfSBpcyB6ZXJvLCB0aGUgdHJhbnNwYXJlbnQKKwkJaXRlbSBpcyByZXR1cm5lZC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gd2FudGluZyB0byBrbm93IHdoaWNoCisJCXN5bnRheCBpdGVtIGlzIGVmZmVjdGl2ZSAoZS5nLiBpbnNpZGUgcGFyZW5zKS4KKwkJV2FybmluZzogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdmVyeSBzbG93LiAgQmVzdCBzcGVlZCBpcworCQlvYnRhaW5lZCBieSBnb2luZyB0aHJvdWdoIHRoZSBmaWxlIGluIGZvcndhcmQgZGlyZWN0aW9uLgorCisJCUV4YW1wbGUgKGVjaG9lcyB0aGUgbmFtZSBvZiB0aGUgc3ludGF4IGl0ZW0gdW5kZXIgdGhlIGN1cnNvcik6ID4KKwkJCTplY2hvIHN5bklEYXR0cihzeW5JRChsaW5lKCIuIiksIGNvbCgiLiIpLCAxKSwgIm5hbWUiKQorPAorc3luSURhdHRyKHtzeW5JRH0sIHt3aGF0fSBbLCB7bW9kZX1dKQkJCSpzeW5JRGF0dHIoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggaXMgdGhlIHt3aGF0fSBhdHRyaWJ1dGUgb2YKKwkJc3ludGF4IElEIHtzeW5JRH0uICBUaGlzIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBpbmZvcm1hdGlvbgorCQlhYm91dCBhIHN5bnRheCBpdGVtLgorCQl7bW9kZX0gY2FuIGJlICJndWkiLCAiY3Rlcm0iIG9yICJ0ZXJtIiwgdG8gZ2V0IHRoZSBhdHRyaWJ1dGVzCisJCWZvciB0aGF0IG1vZGUuICBXaGVuIHttb2RlfSBpcyBvbWl0dGVkLCBvciBhbiBpbnZhbGlkIHZhbHVlIGlzCisJCXVzZWQsIHRoZSBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBoaWdobGlnaHRpbmcgYXJlCisJCXVzZWQgKEdVSSwgY3Rlcm0gb3IgdGVybSkuCisJCVVzZSBzeW5JRHRyYW5zKCkgdG8gZm9sbG93IGxpbmtlZCBoaWdobGlnaHQgZ3JvdXBzLgorCQl7d2hhdH0JCXJlc3VsdAorCQkibmFtZSIJCXRoZSBuYW1lIG9mIHRoZSBzeW50YXggaXRlbQorCQkiZmciCQlmb3JlZ3JvdW5kIGNvbG9yIChHVUk6IGNvbG9yIG5hbWUgdXNlZCB0byBzZXQKKwkJCQl0aGUgY29sb3IsIGN0ZXJtOiBjb2xvciBudW1iZXIgYXMgYSBzdHJpbmcsCisJCQkJdGVybTogZW1wdHkgc3RyaW5nKQorCQkiYmciCQliYWNrZ3JvdW5kIGNvbG9yIChsaWtlICJmZyIpCisJCSJmZyMiCQlsaWtlICJmZyIsIGJ1dCBmb3IgdGhlIEdVSSBhbmQgdGhlIEdVSSBpcworCQkJCXJ1bm5pbmcgdGhlIG5hbWUgaW4gIiNSUkdHQkIiIGZvcm0KKwkJImJnIyIJCWxpa2UgImZnIyIgZm9yICJiZyIKKwkJImJvbGQiCQkiMSIgaWYgYm9sZAorCQkiaXRhbGljIgkiMSIgaWYgaXRhbGljCisJCSJyZXZlcnNlIgkiMSIgaWYgcmV2ZXJzZQorCQkiaW52ZXJzZSIJIjEiIGlmIGludmVyc2UgKD0gcmV2ZXJzZSkKKwkJInVuZGVybGluZSIJIjEiIGlmIHVuZGVybGluZWQKKworCQlFeGFtcGxlIChlY2hvZXMgdGhlIGNvbG9yIG9mIHRoZSBzeW50YXggaXRlbSB1bmRlciB0aGUKKwkJY3Vyc29yKTogPgorCTplY2hvIHN5bklEYXR0cihzeW5JRHRyYW5zKHN5bklEKGxpbmUoIi4iKSwgY29sKCIuIiksIDEpKSwgImZnIikKKzwKK3N5bklEdHJhbnMoe3N5bklEfSkJCQkJCSpzeW5JRHRyYW5zKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSB0cmFuc2xhdGVkIHN5bnRheCBJRCBvZgorCQl7c3luSUR9LiAgVGhpcyBpcyB0aGUgc3ludGF4IGdyb3VwIElEIG9mIHdoYXQgaXMgYmVpbmcgdXNlZCB0bworCQloaWdobGlnaHQgdGhlIGNoYXJhY3Rlci4gIEhpZ2hsaWdodCBsaW5rcyBnaXZlbiB3aXRoCisJCSI6aGlnaGxpZ2h0IGxpbmsiIGFyZSBmb2xsb3dlZC4KKworCQkJCQkJCSpzeXN0ZW0oKSoKK3N5c3RlbSh7ZXhwcn0pCUdldCB0aGUgb3V0cHV0IG9mIHRoZSBzaGVsbCBjb21tYW5kIHtleHByfS4gIE5vdGU6IG5ld2xpbmVzCisJCWluIHtleHByfSBtYXkgY2F1c2UgdGhlIGNvbW1hbmQgdG8gZmFpbC4gIFRoZSBjaGFyYWN0ZXJzIGluCisJCSdzaGVsbHF1b3RlJyBhbmQgJ3NoZWxseHF1b3RlJyBtYXkgYWxzbyBjYXVzZSB0cm91YmxlLgorCQlUaGlzIGlzIG5vdCB0byBiZSB1c2VkIGZvciBpbnRlcmFjdGl2ZSBjb21tYW5kcy4KKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZy4gIEV4YW1wbGU6ID4KKworCQkJOmxldCBmaWxlcyA9IHN5c3RlbSgibHMiKQorCis8CQlUbyBtYWtlIHRoZSByZXN1bHQgbW9yZSBzeXN0ZW0taW5kZXBlbmRlbnQsIHRoZSBzaGVsbCBvdXRwdXQKKwkJaXMgZmlsdGVyZWQgdG8gcmVwbGFjZSA8Q1I+IHdpdGggPE5MPiBmb3IgTWFjaW50b3NoLCBhbmQKKwkJPENSPjxOTD4gd2l0aCA8Tkw+IGZvciBET1MtbGlrZSBzeXN0ZW1zLgorCQlUaGUgY29tbWFuZCBleGVjdXRlZCBpcyBjb25zdHJ1Y3RlZCB1c2luZyBzZXZlcmFsIG9wdGlvbnM6CisJJ3NoZWxsJyAnc2hlbGxjbWRmbGFnJyAnc2hlbGx4cXVvdGUnIHtleHByfSAnc2hlbGxyZWRpcicge3RtcH0gJ3NoZWxseHF1b3RlJworCQkoe3RtcH0gaXMgYW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZSBuYW1lKS4KKwkJRm9yIFVuaXggYW5kIE9TLzIgYnJhY2VzIGFyZSBwdXQgYXJvdW5kIHtleHByfSB0byBhbGxvdyBmb3IKKwkJY29uY2F0ZW5hdGVkIGNvbW1hbmRzLgorCisJCVRoZSByZXN1bHRpbmcgZXJyb3IgY29kZSBjYW4gYmUgZm91bmQgaW4gfHY6c2hlbGxfZXJyb3J8LgorCQlUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpbiB8cmVzdHJpY3RlZC1tb2RlfC4KKwkJVW5saWtlICI6IWNtZCIgdGhlcmUgaXMgbm8gYXV0b21hdGljIGNoZWNrIGZvciBjaGFuZ2VkIGZpbGVzLgorCQlVc2UgfDpjaGVja3RpbWV8IHRvIGZvcmNlIGEgY2hlY2suCisKK3RlbXBuYW1lKCkJCQkJCSp0ZW1wbmFtZSgpKiAqdGVtcC1maWxlLW5hbWUqCisJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHRoZSBuYW1lIG9mIGEgZmlsZSB0aGF0CisJCWRvZXNuJ3QgZXhpc3QuICBJdCBjYW4gYmUgdXNlZCBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4gIFRoZSBuYW1lCisJCWlzIGRpZmZlcmVudCBmb3IgYXQgbGVhc3QgMjYgY29uc2VjdXRpdmUgY2FsbHMuICBFeGFtcGxlOiA+CisJCQk6bGV0IHRtcGZpbGUgPSB0ZW1wbmFtZSgpCisJCQk6ZXhlICJyZWRpciA+ICIgLiB0bXBmaWxlCis8CQlGb3IgVW5peCwgdGhlIGZpbGUgd2lsbCBiZSBpbiBhIHByaXZhdGUgZGlyZWN0b3J5IChvbmx5CisJCWFjY2Vzc2libGUgYnkgdGhlIGN1cnJlbnQgdXNlcikgdG8gYXZvaWQgc2VjdXJpdHkgcHJvYmxlbXMKKwkJKGUuZy4sIGEgc3ltbGluayBhdHRhY2sgb3Igb3RoZXIgcGVvcGxlIHJlYWRpbmcgeW91ciBmaWxlKS4KKwkJV2hlbiBWaW0gZXhpdHMgdGhlIGRpcmVjdG9yeSBhbmQgYWxsIGZpbGVzIGluIGl0IGFyZSBkZWxldGVkLgorCQlGb3IgTVMtV2luZG93cyBmb3J3YXJkIHNsYXNoZXMgYXJlIHVzZWQgd2hlbiB0aGUgJ3NoZWxsc2xhc2gnCisJCW9wdGlvbiBpcyBzZXQgb3Igd2hlbiAnc2hlbGxjbWRmbGFnJyBzdGFydHMgd2l0aCAnLScuCisKK3RvbG93ZXIoe2V4cHJ9KQkJCQkJCSp0b2xvd2VyKCkqCisJCVRoZSByZXN1bHQgaXMgYSBjb3B5IG9mIHRoZSBTdHJpbmcgZ2l2ZW4sIHdpdGggYWxsIHVwcGVyY2FzZQorCQljaGFyYWN0ZXJzIHR1cm5lZCBpbnRvIGxvd2VyY2FzZSAoanVzdCBsaWtlIGFwcGx5aW5nIHxndXwgdG8KKwkJdGhlIHN0cmluZykuCisKK3RvdXBwZXIoe2V4cHJ9KQkJCQkJCSp0b3VwcGVyKCkqCisJCVRoZSByZXN1bHQgaXMgYSBjb3B5IG9mIHRoZSBTdHJpbmcgZ2l2ZW4sIHdpdGggYWxsIGxvd2VyY2FzZQorCQljaGFyYWN0ZXJzIHR1cm5lZCBpbnRvIHVwcGVyY2FzZSAoanVzdCBsaWtlIGFwcGx5aW5nIHxnVXwgdG8KKwkJdGhlIHN0cmluZykuCisKK3R5cGUoe2V4cHJ9KQkJCQkJCSp0eXBlKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXI6CisJCQkwIGlmIHtleHByfSBoYXMgdGhlIHR5cGUgTnVtYmVyCisJCQkxIGlmIHtleHByfSBoYXMgdGhlIHR5cGUgU3RyaW5nCisKK3ZpcnRjb2woe2V4cHJ9KQkJCQkJCSp2aXJ0Y29sKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBzY3JlZW4gY29sdW1uIG9mIHRoZSBmaWxlCisJCXBvc2l0aW9uIGdpdmVuIHdpdGgge2V4cHJ9LiAgVGhhdCBpcywgdGhlIGxhc3Qgc2NyZWVuIHBvc2l0aW9uCisJCW9jY3VwaWVkIGJ5IHRoZSBjaGFyYWN0ZXIgYXQgdGhhdCBwb3NpdGlvbiwgd2hlbiB0aGUgc2NyZWVuCisJCXdvdWxkIGJlIG9mIHVubGltaXRlZCB3aWR0aC4gIFdoZW4gdGhlcmUgaXMgYSA8VGFiPiBhdCB0aGUKKwkJcG9zaXRpb24sIHRoZSByZXR1cm5lZCBOdW1iZXIgd2lsbCBiZSB0aGUgY29sdW1uIGF0IHRoZSBlbmQgb2YKKwkJdGhlIDxUYWI+LiAgRm9yIGV4YW1wbGUsIGZvciBhIDxUYWI+IGluIGNvbHVtbiAxLCB3aXRoICd0cycKKwkJc2V0IHRvIDgsIGl0IHJldHVybnMgOC4KKwkJRm9yIHRoZSBieXRlIHBvc2l0aW9uIHVzZSB8Y29sKCl8LgorCQlXaGVuIFZpcnR1YWwgZWRpdGluZyBpcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgbW9kZSwgYSBwb3NpdGlvbgorCQliZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZSBjYW4gYmUgcmV0dXJuZWQuIHwndmlydHVhbGVkaXQnfAorCQlUaGUgYWNjZXB0ZWQgcG9zaXRpb25zIGFyZToKKwkJICAgIC4JICAgIHRoZSBjdXJzb3IgcG9zaXRpb24KKwkJICAgICQJICAgIHRoZSBlbmQgb2YgdGhlIGN1cnNvciBsaW5lICh0aGUgcmVzdWx0IGlzIHRoZQorCQkJICAgIG51bWJlciBvZiBkaXNwbGF5ZWQgY2hhcmFjdGVycyBpbiB0aGUgY3Vyc29yIGxpbmUKKwkJCSAgICBwbHVzIG9uZSkKKwkJICAgICd4CSAgICBwb3NpdGlvbiBvZiBtYXJrIHggKGlmIHRoZSBtYXJrIGlzIG5vdCBzZXQsIDAgaXMKKwkJCSAgICByZXR1cm5lZCkKKwkJTm90ZSB0aGF0IG9ubHkgbWFya3MgaW4gdGhlIGN1cnJlbnQgZmlsZSBjYW4gYmUgdXNlZC4KKwkJRXhhbXBsZXM6ID4KKyAgdmlydGNvbCgiLiIpCSAgIHdpdGggdGV4dCAiZm9vXkxiYXIiLCB3aXRoIGN1cnNvciBvbiB0aGUgIl5MIiwgcmV0dXJucyA1CisgIHZpcnRjb2woIiQiKQkgICB3aXRoIHRleHQgImZvb15MYmFyIiwgcmV0dXJucyA5CisgIHZpcnRjb2woIid0IikgICAgd2l0aCB0ZXh0ICIgICAgdGhlcmUiLCB3aXRoICd0IGF0ICdoJywgcmV0dXJucyA2Cis8CQlUaGUgZmlyc3QgY29sdW1uIGlzIDEuICAwIGlzIHJldHVybmVkIGZvciBhbiBlcnJvci4KKwordmlzdWFsbW9kZShbZXhwcl0pCQkJCQkJKnZpc3VhbG1vZGUoKSoKKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggZGVzY3JpYmVzIHRoZSBsYXN0IFZpc3VhbCBtb2RlCisJCXVzZWQuICBJbml0aWFsbHkgaXQgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsIGJ1dCBvbmNlIFZpc3VhbAorCQltb2RlIGhhcyBiZWVuIHVzZWQsIGl0IHJldHVybnMgInYiLCAiViIsIG9yICI8Q1RSTC1WPiIgKGEKKwkJc2luZ2xlIENUUkwtViBjaGFyYWN0ZXIpIGZvciBjaGFyYWN0ZXItd2lzZSwgbGluZS13aXNlLCBvcgorCQlibG9jay13aXNlIFZpc3VhbCBtb2RlIHJlc3BlY3RpdmVseS4KKwkJRXhhbXBsZTogPgorCQkJOmV4ZSAibm9ybWFsICIgLiB2aXN1YWxtb2RlKCkKKzwJCVRoaXMgZW50ZXJzIHRoZSBzYW1lIFZpc3VhbCBtb2RlIGFzIGJlZm9yZS4gIEl0IGlzIGFsc28gdXNlZnVsCisJCWluIHNjcmlwdHMgaWYgeW91IHdpc2ggdG8gYWN0IGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB0aGUKKwkJVmlzdWFsIG1vZGUgdGhhdCB3YXMgdXNlZC4KKworCQlJZiBhbiBleHByZXNzaW9uIGlzIHN1cHBsaWVkIHRoYXQgcmVzdWx0cyBpbiBhIG5vbi16ZXJvIG51bWJlcgorCQlvciBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhlIFZpc3VhbCBtb2RlIHdpbGwgYmUgY2xlYXJlZAorCQlhbmQgdGhlIG9sZCB2YWx1ZSBpcyByZXR1cm5lZC4gIE5vdGUgdGhhdCAiICIgYW5kICIwIiBhcmUgYWxzbworCQlub24tZW1wdHkgc3RyaW5ncywgdGh1cyBjYXVzZSB0aGUgbW9kZSB0byBiZSBjbGVhcmVkLgorCisJCQkJCQkJKndpbmJ1Zm5yKCkqCit3aW5idWZucih7bnJ9KQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBidWZmZXIKKwkJYXNzb2NpYXRlZCB3aXRoIHdpbmRvdyB7bnJ9LiBXaGVuIHtucn0gaXMgemVybywgdGhlIG51bWJlciBvZgorCQl0aGUgYnVmZmVyIGluIHRoZSBjdXJyZW50IHdpbmRvdyBpcyByZXR1cm5lZC4gIFdoZW4gd2luZG93CisJCXtucn0gZG9lc24ndCBleGlzdCwgLTEgaXMgcmV0dXJuZWQuCisJCUV4YW1wbGU6ID4KKyAgOmVjaG8gIlRoZSBmaWxlIGluIHRoZSBjdXJyZW50IHdpbmRvdyBpcyAiIC4gYnVmbmFtZSh3aW5idWZucigwKSkKKzwKKwkJCQkJCQkqd2luY29sKCkqCit3aW5jb2woKQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgdmlydHVhbCBjb2x1bW4gb2YgdGhlCisJCWN1cnNvciBpbiB0aGUgd2luZG93LiAgVGhpcyBpcyBjb3VudGluZyBzY3JlZW4gY2VsbHMgZnJvbSB0aGUKKwkJbGVmdCBzaWRlIG9mIHRoZSB3aW5kb3cuICBUaGUgbGVmdG1vc3QgY29sdW1uIGlzIG9uZS4KKword2luaGVpZ2h0KHtucn0pCQkJCQkJKndpbmhlaWdodCgpKgorCQlUaGUgcmVzdWx0IGlzIGEgTnVtYmVyLCB3aGljaCBpcyB0aGUgaGVpZ2h0IG9mIHdpbmRvdyB7bnJ9LgorCQlXaGVuIHtucn0gaXMgemVybywgdGhlIGhlaWdodCBvZiB0aGUgY3VycmVudCB3aW5kb3cgaXMKKwkJcmV0dXJuZWQuICBXaGVuIHdpbmRvdyB7bnJ9IGRvZXNuJ3QgZXhpc3QsIC0xIGlzIHJldHVybmVkLgorCQlBbiBleGlzdGluZyB3aW5kb3cgYWx3YXlzIGhhcyBhIGhlaWdodCBvZiB6ZXJvIG9yIG1vcmUuCisJCUV4YW1wbGVzOiA+CisgIDplY2hvICJUaGUgY3VycmVudCB3aW5kb3cgaGFzICIgLiB3aW5oZWlnaHQoMCkgLiAiIGxpbmVzLiIKKzwKKwkJCQkJCQkqd2lubGluZSgpKgord2lubGluZSgpCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBzY3JlZW4gbGluZSBvZiB0aGUgY3Vyc29yCisJCWluIHRoZSB3aW5kb3cuICBUaGlzIGlzIGNvdW50aW5nIHNjcmVlbiBsaW5lcyBmcm9tIHRoZSB0b3Agb2YKKwkJdGhlIHdpbmRvdy4gIFRoZSBmaXJzdCBsaW5lIGlzIG9uZS4KKworCQkJCQkJCSp3aW5ucigpKgord2lubnIoKQkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudAorCQl3aW5kb3cuICBUaGUgdG9wIHdpbmRvdyBoYXMgbnVtYmVyIDEuICBUaGUgbnVtYmVyIGNhbiBiZSB1c2VkCisJCXdpdGggfENUUkwtV193fCBhbmQgIjp3aW5jbWQgdyIgfDp3aW5jbWR8LgorCisJCQkJCQkJKndpbnJlc3RjbWQoKSoKK3dpbnJlc3RjbWQoKQlSZXR1cm5zIGEgc2VxdWVuY2Ugb2YgfDpyZXNpemV8IGNvbW1hbmRzIHRoYXQgc2hvdWxkIHJlc3RvcmUKKwkJdGhlIGN1cnJlbnQgd2luZG93IHNpemVzLiAgT25seSB3b3JrcyBwcm9wZXJseSB3aGVuIG5vIHdpbmRvd3MKKwkJYXJlIG9wZW5lZCBvciBjbG9zZWQgYW5kIHRoZSBjdXJyZW50IHdpbmRvdyBpcyB1bmNoYW5nZWQuCisJCUV4YW1wbGU6ID4KKwkJCTpsZXQgY21kID0gd2lucmVzdGNtZCgpCisJCQk6Y2FsbCBNZXNzV2l0aFdpbmRvd1NpemVzKCkKKwkJCTpleGUgY21kCisKK3dpbndpZHRoKHtucn0pCQkJCQkJKndpbndpZHRoKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSB3aWR0aCBvZiB3aW5kb3cge25yfS4KKwkJV2hlbiB7bnJ9IGlzIHplcm8sIHRoZSB3aWR0aCBvZiB0aGUgY3VycmVudCB3aW5kb3cgaXMKKwkJcmV0dXJuZWQuICBXaGVuIHdpbmRvdyB7bnJ9IGRvZXNuJ3QgZXhpc3QsIC0xIGlzIHJldHVybmVkLgorCQlBbiBleGlzdGluZyB3aW5kb3cgYWx3YXlzIGhhcyBhIHdpZHRoIG9mIHplcm8gb3IgbW9yZS4KKwkJRXhhbXBsZXM6ID4KKyAgOmVjaG8gIlRoZSBjdXJyZW50IHdpbmRvdyBoYXMgIiAuIHdpbndpZHRoKDApIC4gIiBjb2x1bW5zLiIKKyAgOmlmIHdpbndpZHRoKDApIDw9IDUwCisgIDogIGV4ZSAibm9ybWFsIDUwXDxDLVc+fCIKKyAgOmVuZGlmCis8CisKKwkJCQkJCQkqZmVhdHVyZS1saXN0KgorVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGZlYXR1cmVzOgorMS4gIEZlYXR1cmVzIHRoYXQgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGhleSBoYXZlIGJlZW4gZW5hYmxlZCB3aGVuIFZpbQorICAgIHdhcyBjb21waWxlZCB8K2ZlYXR1cmUtbGlzdHwuICBFeGFtcGxlOiA+CisJOmlmIGhhcygiY2luZGVudCIpCisyLiAgRmVhdHVyZXMgdGhhdCBhcmUgb25seSBzdXBwb3J0ZWQgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIG1ldC4KKyAgICBFeGFtcGxlOiA+CisJOmlmIGhhcygiZ3VpX3J1bm5pbmciKQorPAkJCQkJCQkqaGFzLXBhdGNoKgorMy4gIEluY2x1ZGVkIHBhdGNoZXMuICBGaXJzdCBjaGVjayB8djp2ZXJzaW9ufCBmb3IgdGhlIHZlcnNpb24gb2YgVmltLgorICAgIFRoZW4gdGhlICJwYXRjaDEyMyIgZmVhdHVyZSBtZWFucyB0aGF0IHBhdGNoIDEyMyBoYXMgYmVlbiBpbmNsdWRlZCBmb3IKKyAgICB0aGlzIHZlcnNpb24uICBFeGFtcGxlIChjaGVja2luZyB2ZXJzaW9uIDYuMi4xNDggb3IgbGF0ZXIpOiA+CisJOmlmIHY6dmVyc2lvbiA+IDYwMiB8fCB2OnZlcnNpb24gPT0gNjAyICYmIGhhcygicGF0Y2gxNDgiKQorCithbGxfYnVpbHRpbl90ZXJtcwlDb21waWxlZCB3aXRoIGFsbCBidWlsdGluIHRlcm1pbmFscyBlbmFibGVkLgorYW1pZ2EJCQlBbWlnYSB2ZXJzaW9uIG9mIFZpbS4KK2FyYWJpYwkJCUNvbXBpbGVkIHdpdGggQXJhYmljIHN1cHBvcnQgfEFyYWJpY3wuCithcnAJCQlDb21waWxlZCB3aXRoIEFSUCBzdXBwb3J0IChBbWlnYSkuCithdXRvY21kCQkJQ29tcGlsZWQgd2l0aCBhdXRvY29tbWFuZHMgc3VwcG9ydC4KK2JhbGxvb25fZXZhbAkJQ29tcGlsZWQgd2l0aCB8YmFsbG9vbi1ldmFsfCBzdXBwb3J0LgorYmVvcwkJCUJlT1MgdmVyc2lvbiBvZiBWaW0uCiticm93c2UJCQlDb21waWxlZCB3aXRoIHw6YnJvd3NlfCBzdXBwb3J0LCBhbmQgYnJvd3NlKCkgd2lsbAorCQkJd29yay4KK2J1aWx0aW5fdGVybXMJCUNvbXBpbGVkIHdpdGggc29tZSBidWlsdGluIHRlcm1pbmFscy4KK2J5dGVfb2Zmc2V0CQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yICdvJyBpbiAnc3RhdHVzbGluZScKK2NpbmRlbnQJCQlDb21waWxlZCB3aXRoICdjaW5kZW50JyBzdXBwb3J0LgorY2xpZW50c2VydmVyCQlDb21waWxlZCB3aXRoIHJlbW90ZSBpbnZvY2F0aW9uIHN1cHBvcnQgfGNsaWVudHNlcnZlcnwuCitjbGlwYm9hcmQJCUNvbXBpbGVkIHdpdGggJ2NsaXBib2FyZCcgc3VwcG9ydC4KK2NtZGxpbmVfY29tcGwJCUNvbXBpbGVkIHdpdGggfGNtZGxpbmUtY29tcGxldGlvbnwgc3VwcG9ydC4KK2NtZGxpbmVfaGlzdAkJQ29tcGlsZWQgd2l0aCB8Y21kbGluZS1oaXN0b3J5fCBzdXBwb3J0LgorY21kbGluZV9pbmZvCQlDb21waWxlZCB3aXRoICdzaG93Y21kJyBhbmQgJ3J1bGVyJyBzdXBwb3J0LgorY29tbWVudHMJCUNvbXBpbGVkIHdpdGggfCdjb21tZW50cyd8IHN1cHBvcnQuCitjcnlwdHYJCQlDb21waWxlZCB3aXRoIGVuY3J5cHRpb24gc3VwcG9ydCB8ZW5jcnlwdGlvbnwuCitjc2NvcGUJCQlDb21waWxlZCB3aXRoIHxjc2NvcGV8IHN1cHBvcnQuCitjb21wYXRpYmxlCQlDb21waWxlZCB0byBiZSB2ZXJ5IFZpIGNvbXBhdGlibGUuCitkZWJ1ZwkJCUNvbXBpbGVkIHdpdGggIkRFQlVHIiBkZWZpbmVkLgorZGlhbG9nX2NvbgkJQ29tcGlsZWQgd2l0aCBjb25zb2xlIGRpYWxvZyBzdXBwb3J0LgorZGlhbG9nX2d1aQkJQ29tcGlsZWQgd2l0aCBHVUkgZGlhbG9nIHN1cHBvcnQuCitkaWZmCQkJQ29tcGlsZWQgd2l0aCB8dmltZGlmZnwgYW5kICdkaWZmJyBzdXBwb3J0LgorZGlncmFwaHMJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgZGlncmFwaHMuCitkbmQJCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHRoZSAifiByZWdpc3RlciB8cXVvdGVffnwuCitkb3MzMgkJCTMyIGJpdHMgRE9TIChESkdQUCkgdmVyc2lvbiBvZiBWaW0uCitkb3MxNgkJCTE2IGJpdHMgRE9TIHZlcnNpb24gb2YgVmltLgorZWJjZGljCQkJQ29tcGlsZWQgb24gYSBtYWNoaW5lIHdpdGggZWJjZGljIGNoYXJhY3RlciBzZXQuCitlbWFjc190YWdzCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIEVtYWNzIHRhZ3MuCitldmFsCQkJQ29tcGlsZWQgd2l0aCBleHByZXNzaW9uIGV2YWx1YXRpb24gc3VwcG9ydC4gIEFsd2F5cworCQkJdHJ1ZSwgb2YgY291cnNlIQorZXhfZXh0cmEJCUNvbXBpbGVkIHdpdGggZXh0cmEgRXggY29tbWFuZHMgfCtleF9leHRyYXwuCitleHRyYV9zZWFyY2gJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgfCdpbmNzZWFyY2gnfCBhbmQKKwkJCXwnaGxzZWFyY2gnfAorZmFyc2kJCQlDb21waWxlZCB3aXRoIEZhcnNpIHN1cHBvcnQgfGZhcnNpfC4KK2ZpbGVfaW5fcGF0aAkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB8Z2Z8IGFuZCB8PGNmaWxlPnwKK2ZpbmRfaW5fcGF0aAkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBpbmNsdWRlIGZpbGUgc2VhcmNoZXMKKwkJCXwrZmluZF9pbl9wYXRofC4KK2ZuYW1lX2Nhc2UJCUNhc2UgaW4gZmlsZSBuYW1lcyBtYXR0ZXJzIChmb3IgQW1pZ2EsIE1TLURPUywgYW5kCisJCQlXaW5kb3dzIHRoaXMgaXMgbm90IHByZXNlbnQpLgorZm9sZGluZwkJCUNvbXBpbGVkIHdpdGggfGZvbGRpbmd8IHN1cHBvcnQuCitmb290ZXIJCQlDb21waWxlZCB3aXRoIEdVSSBmb290ZXIgc3VwcG9ydC4gfGd1aS1mb290ZXJ8Citmb3JrCQkJQ29tcGlsZWQgdG8gdXNlIGZvcmsoKS9leGVjKCkgaW5zdGVhZCBvZiBzeXN0ZW0oKS4KK2dldHRleHQJCQlDb21waWxlZCB3aXRoIG1lc3NhZ2UgdHJhbnNsYXRpb24gfG11bHRpLWxhbmd8CitndWkJCQlDb21waWxlZCB3aXRoIEdVSSBlbmFibGVkLgorZ3VpX2F0aGVuYQkJQ29tcGlsZWQgd2l0aCBBdGhlbmEgR1VJLgorZ3VpX2Jlb3MJCUNvbXBpbGVkIHdpdGggQmVPcyBHVUkuCitndWlfZ3RrCQkJQ29tcGlsZWQgd2l0aCBHVEsrIEdVSSAoYW55IHZlcnNpb24pLgorZ3VpX2d0azIJCUNvbXBpbGVkIHdpdGggR1RLKyAyIEdVSSAoZ3VpX2d0ayBpcyBhbHNvIGRlZmluZWQpLgorZ3VpX21hYwkJCUNvbXBpbGVkIHdpdGggTWFjaW50b3NoIEdVSS4KK2d1aV9tb3RpZgkJQ29tcGlsZWQgd2l0aCBNb3RpZiBHVUkuCitndWlfcGhvdG9uCQlDb21waWxlZCB3aXRoIFBob3RvbiBHVUkuCitndWlfd2luMzIJCUNvbXBpbGVkIHdpdGggTVMgV2luZG93cyBXaW4zMiBHVUkuCitndWlfd2luMzJzCQlpZGVtLCBhbmQgV2luMzJzIHN5c3RlbSBiZWluZyB1c2VkIChXaW5kb3dzIDMuMSkKK2d1aV9ydW5uaW5nCQlWaW0gaXMgcnVubmluZyBpbiB0aGUgR1VJLCBvciBpdCB3aWxsIHN0YXJ0IHNvb24uCitoYW5ndWxfaW5wdXQJCUNvbXBpbGVkIHdpdGggSGFuZ3VsIGlucHV0IHN1cHBvcnQuIHxoYW5ndWx8CitpY29udgkJCUNhbiB1c2UgaWNvbnYoKSBmb3IgY29udmVyc2lvbi4KK2luc2VydF9leHBhbmQJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgQ1RSTC1YIGV4cGFuc2lvbiBjb21tYW5kcyBpbgorCQkJSW5zZXJ0IG1vZGUuCitqdW1wbGlzdAkJQ29tcGlsZWQgd2l0aCB8anVtcGxpc3R8IHN1cHBvcnQuCitrZXltYXAJCQlDb21waWxlZCB3aXRoICdrZXltYXAnIHN1cHBvcnQuCitsYW5nbWFwCQkJQ29tcGlsZWQgd2l0aCAnbGFuZ21hcCcgc3VwcG9ydC4KK2xpYmNhbGwJCQlDb21waWxlZCB3aXRoIHxsaWJjYWxsKCl8IHN1cHBvcnQuCitsaW5lYnJlYWsJCUNvbXBpbGVkIHdpdGggJ2xpbmVicmVhaycsICdicmVha2F0JyBhbmQgJ3Nob3dicmVhaycKKwkJCXN1cHBvcnQuCitsaXNwaW5kZW50CQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIGxpc3AgaW5kZW50aW5nLgorbGlzdGNtZHMJCUNvbXBpbGVkIHdpdGggY29tbWFuZHMgZm9yIHRoZSBidWZmZXIgbGlzdCB8OmZpbGVzfAorCQkJYW5kIHRoZSBhcmd1bWVudCBsaXN0IHxhcmdsaXN0fC4KK2xvY2FsbWFwCQlDb21waWxlZCB3aXRoIGxvY2FsIG1hcHBpbmdzIGFuZCBhYmJyLiB8Om1hcC1sb2NhbHwKK21hYwkJCU1hY2ludG9zaCB2ZXJzaW9uIG9mIFZpbS4KK21hY3VuaXgJCQlNYWNpbnRvc2ggdmVyc2lvbiBvZiBWaW0sIHVzaW5nIFVuaXggZmlsZXMgKE9TLVgpLgorbWVudQkJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgfDptZW51fC4KK21rc2Vzc2lvbgkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB8Om1rc2Vzc2lvbnwuCittb2RpZnlfZm5hbWUJCUNvbXBpbGVkIHdpdGggZmlsZSBuYW1lIG1vZGlmaWVycy4gfGZpbGVuYW1lLW1vZGlmaWVyc3wKK21vdXNlCQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IG1vdXNlLgorbW91c2VzaGFwZQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciAnbW91c2VzaGFwZScuCittb3VzZV9kZWMJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgRGVjIHRlcm1pbmFsIG1vdXNlLgorbW91c2VfZ3BtCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIGdwbSAoTGludXggY29uc29sZSBtb3VzZSkKK21vdXNlX25ldHRlcm0JCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgbmV0dGVybSBtb3VzZS4KK21vdXNlX3B0ZXJtCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHFueCBwdGVybSBtb3VzZS4KK21vdXNlX3h0ZXJtCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHh0ZXJtIG1vdXNlLgorbXVsdGlfYnl0ZQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBlZGl0aW5nIEtvcmVhbiBldCBhbC4KK211bHRpX2J5dGVfaW1lCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIElNRSBpbnB1dCBtZXRob2QuCittdWx0aV9sYW5nCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcy4KK25ldGJlYW5zX2ludGcJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgfG5ldGJlYW5zfC4KK29sZQkJCUNvbXBpbGVkIHdpdGggT0xFIGF1dG9tYXRpb24gc3VwcG9ydCBmb3IgV2luMzIuCitvczIJCQlPUy8yIHZlcnNpb24gb2YgVmltLgorb3NmaWxldHlwZQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBvc2ZpbGV0eXBlcyB8K29zZmlsZXR5cGV8CitwYXRoX2V4dHJhCQlDb21waWxlZCB3aXRoIHVwL2Rvd253YXJkcyBzZWFyY2ggaW4gJ3BhdGgnIGFuZCAndGFncycKK3BlcmwJCQlDb21waWxlZCB3aXRoIFBlcmwgaW50ZXJmYWNlLgorcG9zdHNjcmlwdAkJQ29tcGlsZWQgd2l0aCBQb3N0U2NyaXB0IGZpbGUgcHJpbnRpbmcuCitwcmludGVyCQkJQ29tcGlsZWQgd2l0aCB8OmhhcmRjb3B5fCBzdXBwb3J0LgorcHl0aG9uCQkJQ29tcGlsZWQgd2l0aCBQeXRob24gaW50ZXJmYWNlLgorcW54CQkJUU5YIHZlcnNpb24gb2YgVmltLgorcXVpY2tmaXgJCUNvbXBpbGVkIHdpdGggfHF1aWNrZml4fCBzdXBwb3J0LgorcmlnaHRsZWZ0CQlDb21waWxlZCB3aXRoICdyaWdodGxlZnQnIHN1cHBvcnQuCitydWJ5CQkJQ29tcGlsZWQgd2l0aCBSdWJ5IGludGVyZmFjZSB8cnVieXwuCitzY3JvbGxiaW5kCQlDb21waWxlZCB3aXRoICdzY3JvbGxiaW5kJyBzdXBwb3J0Lgorc2hvd2NtZAkJCUNvbXBpbGVkIHdpdGggJ3Nob3djbWQnIHN1cHBvcnQuCitzaWducwkJCUNvbXBpbGVkIHdpdGggfDpzaWdufCBzdXBwb3J0Lgorc21hcnRpbmRlbnQJCUNvbXBpbGVkIHdpdGggJ3NtYXJ0aW5kZW50JyBzdXBwb3J0Lgorc25pZmYJCQlDb21waWxlZCB3aXRoIFNuaUZGIGludGVyZmFjZSBzdXBwb3J0Lgorc3RhdHVzbGluZQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciAnc3RhdHVzbGluZScsICdydWxlcmZvcm1hdCcKKwkJCWFuZCBzcGVjaWFsIGZvcm1hdHMgb2YgJ3RpdGxlc3RyaW5nJyBhbmQgJ2ljb25zdHJpbmcnLgorc3VuX3dvcmtzaG9wCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIFN1biB8d29ya3Nob3B8Lgorc3ludGF4CQkJQ29tcGlsZWQgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnQuCitzeW50YXhfaXRlbXMJCVRoZXJlIGFyZSBhY3RpdmUgc3ludGF4IGhpZ2hsaWdodGluZyBpdGVtcyBmb3IgdGhlCisJCQljdXJyZW50IGJ1ZmZlci4KK3N5c3RlbQkJCUNvbXBpbGVkIHRvIHVzZSBzeXN0ZW0oKSBpbnN0ZWFkIG9mIGZvcmsoKS9leGVjKCkuCit0YWdfYmluYXJ5CQlDb21waWxlZCB3aXRoIGJpbmFyeSBzZWFyY2hpbmcgaW4gdGFncyBmaWxlcworCQkJfHRhZy1iaW5hcnktc2VhcmNofC4KK3RhZ19vbGRfc3RhdGljCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIG9sZCBzdGF0aWMgdGFncworCQkJfHRhZy1vbGQtc3RhdGljfC4KK3RhZ19hbnlfd2hpdGUJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgYW55IHdoaXRlIGNoYXJhY3RlcnMgaW4gdGFncworCQkJZmlsZXMgfHRhZy1hbnktd2hpdGV8LgordGNsCQkJQ29tcGlsZWQgd2l0aCBUY2wgaW50ZXJmYWNlLgordGVybWluZm8JCUNvbXBpbGVkIHdpdGggdGVybWluZm8gaW5zdGVhZCBvZiB0ZXJtY2FwLgordGVybXJlc3BvbnNlCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHx0X1JWfCBhbmQgfHY6dGVybXJlc3BvbnNlfC4KK3RleHRvYmplY3RzCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHx0ZXh0LW9iamVjdHN8LgordGdldGVudAkJCUNvbXBpbGVkIHdpdGggdGdldGVudCBzdXBwb3J0LCBhYmxlIHRvIHVzZSBhIHRlcm1jYXAKKwkJCW9yIHRlcm1pbmZvIGZpbGUuCit0aXRsZQkJCUNvbXBpbGVkIHdpdGggd2luZG93IHRpdGxlIHN1cHBvcnQgfCd0aXRsZSd8LgordG9vbGJhcgkJCUNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgfGd1aS10b29sYmFyfC4KK3VuaXgJCQlVbml4IHZlcnNpb24gb2YgVmltLgordXNlcl9jb21tYW5kcwkJVXNlci1kZWZpbmVkIGNvbW1hbmRzLgordmltaW5mbwkJCUNvbXBpbGVkIHdpdGggdmltaW5mbyBzdXBwb3J0LgordmltX3N0YXJ0aW5nCQlUcnVlIHdoaWxlIGluaXRpYWwgc291cmNlJ2luZyB0YWtlcyBwbGFjZS4KK3ZlcnRzcGxpdAkJQ29tcGlsZWQgd2l0aCB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MgfDp2c3BsaXR8LgordmlydHVhbGVkaXQJCUNvbXBpbGVkIHdpdGggJ3ZpcnR1YWxlZGl0JyBvcHRpb24uCit2aXN1YWwJCQlDb21waWxlZCB3aXRoIFZpc3VhbCBtb2RlLgordmlzdWFsZXh0cmEJCUNvbXBpbGVkIHdpdGggZXh0cmEgVmlzdWFsIG1vZGUgY29tbWFuZHMuCisJCQl8YmxvY2t3aXNlLW9wZXJhdG9yc3wuCit2bXMJCQlWTVMgdmVyc2lvbiBvZiBWaW0uCit2cmVwbGFjZQkJQ29tcGlsZWQgd2l0aCB8Z1J8IGFuZCB8Z3J8IGNvbW1hbmRzLgord2lsZGlnbm9yZQkJQ29tcGlsZWQgd2l0aCAnd2lsZGlnbm9yZScgb3B0aW9uLgord2lsZG1lbnUJCUNvbXBpbGVkIHdpdGggJ3dpbGRtZW51JyBvcHRpb24uCit3aW5kb3dzCQkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBtb3JlIHRoYW4gb25lIHdpbmRvdy4KK3dpbmFsdGtleXMJCUNvbXBpbGVkIHdpdGggJ3dpbmFsdGtleXMnIG9wdGlvbi4KK3dpbjE2CQkJV2luMTYgdmVyc2lvbiBvZiBWaW0gKE1TLVdpbmRvd3MgMy4xKS4KK3dpbjMyCQkJV2luMzIgdmVyc2lvbiBvZiBWaW0gKE1TLVdpbmRvd3MgOTUvOTgvTUUvTlQvMjAwMC9YUCkuCit3aW42NAkJCVdpbjY0IHZlcnNpb24gb2YgVmltIChNUy1XaW5kb3dzIDY0IGJpdCkuCit3aW4zMnVuaXgJCVdpbjMyIHZlcnNpb24gb2YgVmltLCB1c2luZyBVbml4IGZpbGVzIChDeWd3aW4pCit3aW45NQkJCVdpbjMyIHZlcnNpb24gZm9yIE1TLVdpbmRvd3MgOTUvOTgvTUUuCit3cml0ZWJhY2t1cAkJQ29tcGlsZWQgd2l0aCAnd3JpdGViYWNrdXAnIGRlZmF1bHQgb24uCit4Zm9udHNldAkJQ29tcGlsZWQgd2l0aCBYIGZvbnRzZXQgc3VwcG9ydCB8eGZvbnRzZXR8LgoreGltCQkJQ29tcGlsZWQgd2l0aCBYIGlucHV0IG1ldGhvZCBzdXBwb3J0IHx4aW18LgoreHNtcAkJCUNvbXBpbGVkIHdpdGggWCBzZXNzaW9uIG1hbmFnZW1lbnQgc3VwcG9ydC4KK3hzbXBfaW50ZXJhY3QJCUNvbXBpbGVkIHdpdGggaW50ZXJhY3RpdmUgWCBzZXNzaW9uIG1hbmFnZW1lbnQgc3VwcG9ydC4KK3h0ZXJtX2NsaXBib2FyZAkJQ29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB4dGVybSBjbGlwYm9hcmQuCit4dGVybV9zYXZlCQlDb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZQorCQkJeHRlcm0gc2NyZWVuLgoreDExCQkJQ29tcGlsZWQgd2l0aCBYMTEgc3VwcG9ydC4KKworCQkJCQkJCSpzdHJpbmctbWF0Y2gqCitNYXRjaGluZyBhIHBhdHRlcm4gaW4gYSBTdHJpbmcKKworQSByZWdleHAgcGF0dGVybiBhcyBleHBsYWluZWQgYXQgfHBhdHRlcm58IGlzIG5vcm1hbGx5IHVzZWQgdG8gZmluZCBhIG1hdGNoIGluCit0aGUgYnVmZmVyIGxpbmVzLiAgV2hlbiBhIHBhdHRlcm4gaXMgdXNlZCB0byBmaW5kIGEgbWF0Y2ggaW4gYSBTdHJpbmcsIGFsbW9zdAorZXZlcnl0aGluZyB3b3JrcyBpbiB0aGUgc2FtZSB3YXkuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IGEgU3RyaW5nIGlzIGhhbmRsZWQKK2xpa2UgaXQgaXMgb25lIGxpbmUuICBXaGVuIGl0IGNvbnRhaW5zIGEgIlxuIiBjaGFyYWN0ZXIsIHRoaXMgaXMgbm90IHNlZW4gYXMgYQorbGluZSBicmVhayBmb3IgdGhlIHBhdHRlcm4uICBJdCBjYW4gYmUgbWF0Y2hlZCB3aXRoIGEgIlxuIiBpbiB0aGUgcGF0dGVybiwgb3IKK3dpdGggIi4iLiAgRXhhbXBsZTogPgorCTpsZXQgYSA9ICJhYWFhXG54eHh4IgorCTplY2hvIG1hdGNoc3RyKGEsICIuLlxuLi4iKQorCWFhCisJeHgKKwk6ZWNobyBtYXRjaHN0cihhLCAiYS54IikKKwlhCisJeAorCitEb24ndCBmb3JnZXQgdGhhdCAiXiIgd2lsbCBvbmx5IG1hdGNoIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIFN0cmluZyBhbmQKKyIkIiBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZy4gIFRoZXkgZG9uJ3QgbWF0Y2ggYWZ0ZXIgb3IgYmVmb3JlIGEKKyJcbiIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gRGVmaW5pbmcgZnVuY3Rpb25zCQkJCQkqdXNlci1mdW5jdGlvbnMqCisKK05ldyBmdW5jdGlvbnMgY2FuIGJlIGRlZmluZWQuICBUaGVzZSBjYW4gYmUgY2FsbGVkIGp1c3QgbGlrZSBidWlsdGluCitmdW5jdGlvbnMuICBUaGUgZnVuY3Rpb24gZXhlY3V0ZXMgYSBzZXF1ZW5jZSBvZiBFeCBjb21tYW5kcy4gIE5vcm1hbCBtb2RlCitjb21tYW5kcyBjYW4gYmUgZXhlY3V0ZWQgd2l0aCB0aGUgfDpub3JtYWx8IGNvbW1hbmQuCisKK1RoZSBmdW5jdGlvbiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLCB0byBhdm9pZCBjb25mdXNpb24gd2l0aAorYnVpbHRpbiBmdW5jdGlvbnMuICBUbyBwcmV2ZW50IGZyb20gdXNpbmcgdGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQgc2NyaXB0cworYXZvaWQgb2J2aW91cywgc2hvcnQgbmFtZXMuICBBIGdvb2QgaGFiaXQgaXMgdG8gc3RhcnQgdGhlIGZ1bmN0aW9uIG5hbWUgd2l0aAordGhlIG5hbWUgb2YgdGhlIHNjcmlwdCwgZS5nLiwgIkhUTUxjb2xvcigpIi4KKworSXQncyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBjdXJseSBicmFjZXMsIHNlZSB8Y3VybHktYnJhY2VzLW5hbWVzfC4KKworCQkJCQkJCSpsb2NhbC1mdW5jdGlvbioKK0EgZnVuY3Rpb24gbG9jYWwgdG8gYSBzY3JpcHQgbXVzdCBzdGFydCB3aXRoICJzOiIuICBBIGxvY2FsIHNjcmlwdCBmdW5jdGlvbgorY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzY3JpcHQgYW5kIGZyb20gZnVuY3Rpb25zLCB1c2VyIGNvbW1hbmRzCithbmQgYXV0b2NvbW1hbmRzIGRlZmluZWQgaW4gdGhlIHNjcmlwdC4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2FsbCB0aGUKK2Z1bmN0aW9uIGZyb20gYSBtYXBwaW5ncyBkZWZpbmVkIGluIHRoZSBzY3JpcHQsIGJ1dCB0aGVuIHw8U0lEPnwgbXVzdCBiZSB1c2VkCitpbnN0ZWFkIG9mICJzOiIgd2hlbiB0aGUgbWFwcGluZyBpcyBleHBhbmRlZCBvdXRzaWRlIG9mIHRoZSBzY3JpcHQuCisKKwkJCQkJKjpmdSogKjpmdW5jdGlvbiogKkUxMjgqICpFMTI5KiAqRTEyMyoKKzpmdVtuY3Rpb25dCQlMaXN0IGFsbCBmdW5jdGlvbnMgYW5kIHRoZWlyIGFyZ3VtZW50cy4KKworOmZ1W25jdGlvbl0ge25hbWV9CUxpc3QgZnVuY3Rpb24ge25hbWV9LgorCQkJCQkJCSpFMTI0KiAqRTEyNSoKKzpmdVtuY3Rpb25dWyFdIHtuYW1lfShbYXJndW1lbnRzXSkgW3JhbmdlXSBbYWJvcnRdCisJCQlEZWZpbmUgYSBuZXcgZnVuY3Rpb24gYnkgdGhlIG5hbWUge25hbWV9LiAgVGhlIG5hbWUKKwkJCW11c3QgYmUgbWFkZSBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgJ18nLCBhbmQKKwkJCW11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgb3IgInM6IiAoc2VlIGFib3ZlKS4KKwkJCQkJCSpmdW5jdGlvbi1hcmd1bWVudCogKmE6dmFyKgorCQkJQW4gYXJndW1lbnQgY2FuIGJlIGRlZmluZWQgYnkgZ2l2aW5nIGl0cyBuYW1lLiAgSW4gdGhlCisJCQlmdW5jdGlvbiB0aGlzIGNhbiB0aGVuIGJlIHVzZWQgYXMgImE6bmFtZSIgKCJhOiIgZm9yCisJCQlhcmd1bWVudCkuCisJCQlVcCB0byAyMCBhcmd1bWVudHMgY2FuIGJlIGdpdmVuLCBzZXBhcmF0ZWQgYnkgY29tbWFzLgorCQkJRmluYWxseSwgYW4gYXJndW1lbnQgIi4uLiIgY2FuIGJlIHNwZWNpZmllZCwgd2hpY2gKKwkJCW1lYW5zIHRoYXQgbW9yZSBhcmd1bWVudHMgbWF5IGJlIGZvbGxvd2luZy4gIEluIHRoZQorCQkJZnVuY3Rpb24gdGhleSBjYW4gYmUgdXNlZCBhcyAiYToxIiwgImE6MiIsIGV0Yy4gICJhOjAiCisJCQlpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBleHRyYSBhcmd1bWVudHMgKHdoaWNoIGNhbiBiZQorCQkJMCkuCisJCQlXaGVuIG5vdCB1c2luZyAiLi4uIiwgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gYQorCQkJZnVuY3Rpb24gY2FsbCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgbmFtZWQKKwkJCWFyZ3VtZW50cy4gIFdoZW4gdXNpbmcgIi4uLiIsIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCisJCQltYXkgYmUgbGFyZ2VyLgorCQkJSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkZWZpbmUgYSBmdW5jdGlvbiB3aXRob3V0IGFueQorCQkJYXJndW1lbnRzLiAgWW91IG11c3Qgc3RpbGwgc3VwcGx5IHRoZSAoKSB0aGVuLgorCQkJVGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIGZvbGxvd3MgaW4gdGhlIG5leHQgbGluZXMsCisJCQl1bnRpbCB0aGUgbWF0Y2hpbmcgfDplbmRmdW5jdGlvbnwuICBJdCBpcyBhbGxvd2VkIHRvCisJCQlkZWZpbmUgYW5vdGhlciBmdW5jdGlvbiBpbnNpZGUgYSBmdW5jdGlvbiBib2R5LgorCQkJCQkJCQkqRTEyNyogKkUxMjIqCisJCQlXaGVuIGEgZnVuY3Rpb24gYnkgdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIGFuZCBbIV0gaXMKKwkJCW5vdCB1c2VkIGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4uICBXaGVuIFshXSBpcyB1c2VkLAorCQkJYW4gZXhpc3RpbmcgZnVuY3Rpb24gaXMgc2lsZW50bHkgcmVwbGFjZWQuICBVbmxlc3MgaXQKKwkJCWlzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZCwgdGhhdCBpcyBhbiBlcnJvci4KKwkJCQkJCSphOmZpcnN0bGluZSogKmE6bGFzdGxpbmUqCisJCQlXaGVuIHRoZSBbcmFuZ2VdIGFyZ3VtZW50IGlzIGFkZGVkLCB0aGUgZnVuY3Rpb24gaXMKKwkJCWV4cGVjdGVkIHRvIHRha2UgY2FyZSBvZiBhIHJhbmdlIGl0c2VsZi4gIFRoZSByYW5nZSBpcworCQkJcGFzc2VkIGFzICJhOmZpcnN0bGluZSIgYW5kICJhOmxhc3RsaW5lIi4gIElmIFtyYW5nZV0KKwkJCWlzIGV4Y2x1ZGVkLCAiOntyYW5nZX1jYWxsIiB3aWxsIGNhbGwgdGhlIGZ1bmN0aW9uIGZvcgorCQkJZWFjaCBsaW5lIGluIHRoZSByYW5nZSwgd2l0aCB0aGUgY3Vyc29yIG9uIHRoZSBzdGFydAorCQkJb2YgZWFjaCBsaW5lLiAgU2VlIHxmdW5jdGlvbi1yYW5nZS1leGFtcGxlfC4KKwkJCVdoZW4gdGhlIFthYm9ydF0gYXJndW1lbnQgaXMgYWRkZWQsIHRoZSBmdW5jdGlvbiB3aWxsCisJCQlhYm9ydCBhcyBzb29uIGFzIGFuIGVycm9yIGlzIGRldGVjdGVkLgorCQkJVGhlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybiBhbmQgdGhlIHJlZG8gY29tbWFuZCAiLiIKKwkJCXdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhlIGZ1bmN0aW9uLgorCisJCQkJCSo6ZW5kZiogKjplbmRmdW5jdGlvbiogKkUxMjYqICpFMTkzKgorOmVuZGZbdW5jdGlvbl0JCVRoZSBlbmQgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgTXVzdCBiZSBvbiBhIGxpbmUKKwkJCWJ5IGl0cyBvd24sIHdpdGhvdXQgb3RoZXIgY29tbWFuZHMuCisKKwkJCQkJKjpkZWxmKiAqOmRlbGZ1bmN0aW9uKiAqRTEzMCogKkUxMzEqCis6ZGVsZlt1bmN0aW9uXSB7bmFtZX0JRGVsZXRlIGZ1bmN0aW9uIHtuYW1lfS4KKworCQkJCQkJCSo6cmV0dSogKjpyZXR1cm4qICpFMTMzKgorOnJldHVbcm5dIFtleHByXQlSZXR1cm4gZnJvbSBhIGZ1bmN0aW9uLiAgV2hlbiAiW2V4cHJdIiBpcyBnaXZlbiwgaXQgaXMKKwkJCWV2YWx1YXRlZCBhbmQgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uCisJCQlJZiAiW2V4cHJdIiBpcyBub3QgZ2l2ZW4sIHRoZSBudW1iZXIgMCBpcyByZXR1cm5lZC4KKwkJCVdoZW4gYSBmdW5jdGlvbiBlbmRzIHdpdGhvdXQgYW4gZXhwbGljaXQgIjpyZXR1cm4iLAorCQkJdGhlIG51bWJlciAwIGlzIHJldHVybmVkLgorCQkJTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGNoZWNrIGZvciB1bnJlYWNoYWJsZSBsaW5lcywKKwkJCXRodXMgdGhlcmUgaXMgbm8gd2FybmluZyBpZiBjb21tYW5kcyBmb2xsb3cgIjpyZXR1cm4iLgorCisJCQlJZiB0aGUgIjpyZXR1cm4iIGlzIHVzZWQgYWZ0ZXIgYSB8OnRyeXwgYnV0IGJlZm9yZSB0aGUKKwkJCW1hdGNoaW5nIHw6ZmluYWxseXwgKGlmIHByZXNlbnQpLCB0aGUgY29tbWFuZHMKKwkJCWZvbGxvd2luZyB0aGUgIjpmaW5hbGx5IiB1cCB0byB0aGUgbWF0Y2hpbmcgfDplbmR0cnl8CisJCQlhcmUgZXhlY3V0ZWQgZmlyc3QuICBUaGlzIHByb2Nlc3MgYXBwbGllcyB0byBhbGwKKwkJCW5lc3RlZCAiOnRyeSJzIGluc2lkZSB0aGUgZnVuY3Rpb24uICBUaGUgZnVuY3Rpb24KKwkJCXJldHVybnMgYXQgdGhlIG91dGVybW9zdCAiOmVuZHRyeSIuCisKKworSW5zaWRlIGEgZnVuY3Rpb24gdmFyaWFibGVzIGNhbiBiZSB1c2VkLiAgVGhlc2UgYXJlIGxvY2FsIHZhcmlhYmxlcywgd2hpY2gKK3dpbGwgZGlzYXBwZWFyIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMuICBHbG9iYWwgdmFyaWFibGVzIG5lZWQgdG8gYmUKK2FjY2Vzc2VkIHdpdGggImc6Ii4KKworRXhhbXBsZTogPgorICA6ZnVuY3Rpb24gVGFibGUodGl0bGUsIC4uLikKKyAgOiAgZWNob2hsIFRpdGxlCisgIDogIGVjaG8gYTp0aXRsZQorICA6ICBlY2hvaGwgTm9uZQorICA6ICBsZXQgaWR4ID0gMQorICA6ICB3aGlsZSBpZHggPD0gYTowCisgIDogICAgZWNobyBhOntpZHh9IC4gJyAnCisgIDogICAgbGV0IGlkeCA9IGlkeCArIDEKKyAgOiAgZW5kd2hpbGUKKyAgOiAgcmV0dXJuIGlkeAorICA6ZW5kZnVuY3Rpb24KKworVGhpcyBmdW5jdGlvbiBjYW4gdGhlbiBiZSBjYWxsZWQgd2l0aDogPgorICBsZXQgbGluZXMgPSBUYWJsZSgiVGFibGUiLCAibGluZTEiLCAibGluZTIiKQorICBsZXQgbGluZXMgPSBUYWJsZSgiRW1wdHkgVGFibGUiKQorCitUbyByZXR1cm4gbW9yZSB0aGFuIG9uZSB2YWx1ZSwgcGFzcyB0aGUgbmFtZSBvZiBhIGdsb2JhbCB2YXJpYWJsZTogPgorICA6ZnVuY3Rpb24gQ29tcHV0ZShuMSwgbjIsIGRpdm5hbWUpCisgIDogIGlmIGE6bjIgPT0gMAorICA6ICAgIHJldHVybiAiZmFpbCIKKyAgOiAgZW5kaWYKKyAgOiAgbGV0IGc6e2E6ZGl2bmFtZX0gPSBhOm4xIC8gYTpuMgorICA6ICByZXR1cm4gIm9rIgorICA6ZW5kZnVuY3Rpb24KKworVGhpcyBmdW5jdGlvbiBjYW4gdGhlbiBiZSBjYWxsZWQgd2l0aDogPgorICA6bGV0IHN1Y2Nlc3MgPSBDb21wdXRlKDEzLCAxMzI0LCAiZGl2IikKKyAgOmlmIHN1Y2Nlc3MgPT0gIm9rIgorICA6ICBlY2hvIGRpdgorICA6ZW5kaWYKKworQW4gYWx0ZXJuYXRpdmUgaXMgdG8gcmV0dXJuIGEgY29tbWFuZCB0aGF0IGNhbiBiZSBleGVjdXRlZC4gIFRoaXMgYWxzbyB3b3Jrcword2l0aCBsb2NhbCB2YXJpYWJsZXMgaW4gYSBjYWxsaW5nIGZ1bmN0aW9uLiAgRXhhbXBsZTogPgorICA6ZnVuY3Rpb24gRm9vKCkKKyAgOiAgZXhlY3V0ZSBCYXIoKQorICA6ICBlY2hvICJsaW5lICIgLiBsbnVtIC4gIiBjb2x1bW4gIiAuIGNvbAorICA6ZW5kZnVuY3Rpb24KKworICA6ZnVuY3Rpb24gQmFyKCkKKyAgOiAgcmV0dXJuICJsZXQgbG51bSA9ICIgLiBsaW5lKCIuIikgLiAiIHwgbGV0IGNvbCA9ICIgLiBjb2woIi4iKQorICA6ZW5kZnVuY3Rpb24KKworVGhlIG5hbWVzICJsbnVtIiBhbmQgImNvbCIgY291bGQgYWxzbyBiZSBwYXNzZWQgYXMgYXJndW1lbnQgdG8gQmFyKCksIHRvIGFsbG93Cit0aGUgY2FsbGVyIHRvIHNldCB0aGUgbmFtZXMuCisKKwkJCQkJCQkqOmNhbCogKjpjYWxsKiAqRTEwNyoKKzpbcmFuZ2VdY2FsW2xdIHtuYW1lfShbYXJndW1lbnRzXSkKKwkJQ2FsbCBhIGZ1bmN0aW9uLiAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGFuZCBpdHMgYXJndW1lbnRzCisJCWFyZSBhcyBzcGVjaWZpZWQgd2l0aCB8OmZ1bmN0aW9ufC4gIFVwIHRvIDIwIGFyZ3VtZW50cyBjYW4gYmUKKwkJdXNlZC4KKwkJV2l0aG91dCBhIHJhbmdlIGFuZCBmb3IgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IGEgcmFuZ2UsIHRoZQorCQlmdW5jdGlvbiBpcyBjYWxsZWQgb25jZS4gIFdoZW4gYSByYW5nZSBpcyBnaXZlbiB0aGUgY3Vyc29yIGlzCisJCXBvc2l0aW9uZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBsaW5lIGJlZm9yZSBleGVjdXRpbmcgdGhlCisJCWZ1bmN0aW9uLgorCQlXaGVuIGEgcmFuZ2UgaXMgZ2l2ZW4gYW5kIHRoZSBmdW5jdGlvbiBkb2Vzbid0IGhhbmRsZSBpdAorCQlpdHNlbGYsIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBsaW5lIGluIHRoZSByYW5nZSwKKwkJd2l0aCB0aGUgY3Vyc29yIGluIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhhdCBsaW5lLiAgVGhlIGN1cnNvcgorCQlpcyBsZWZ0IGF0IHRoZSBsYXN0IGxpbmUgKHBvc3NpYmx5IG1vdmVkIGJ5IHRoZSBsYXN0IGZ1bmN0aW9uCisJCWNhbGwpLiAgVGhlIGFyZ3VtZW50cyBhcmUgcmUtZXZhbHVhdGVkIGZvciBlYWNoIGxpbmUuICBUaHVzCisJCXRoaXMgd29ya3M6CisJCQkJCQkqZnVuY3Rpb24tcmFuZ2UtZXhhbXBsZSogID4KKwk6ZnVuY3Rpb24gTXludW1iZXIoYXJnKQorCTogIGVjaG8gbGluZSgiLiIpIC4gIiAiIC4gYTphcmcKKwk6ZW5kZnVuY3Rpb24KKwk6MSw1Y2FsbCBNeW51bWJlcihnZXRsaW5lKCIuIikpCis8CisJCVRoZSAiYTpmaXJzdGxpbmUiIGFuZCAiYTpsYXN0bGluZSIgYXJlIGRlZmluZWQgYW55d2F5LCB0aGV5CisJCWNhbiBiZSB1c2VkIHRvIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgYXQgdGhlIHN0YXJ0IG9yIGVuZCBvZgorCQl0aGUgcmFuZ2UuCisKKwkJRXhhbXBsZSBvZiBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgcmFuZ2UgaXRzZWxmOiA+CisKKwk6ZnVuY3Rpb24gQ29udCgpIHJhbmdlCisJOiAgZXhlY3V0ZSAoYTpmaXJzdGxpbmUgKyAxKSAuICIsIiAuIGE6bGFzdGxpbmUgLiAncy9eL1x0XFwgJworCTplbmRmdW5jdGlvbgorCTo0LDhjYWxsIENvbnQoKQorPAorCQlUaGlzIGZ1bmN0aW9uIGluc2VydHMgdGhlIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgIlwiIGluIGZyb250CisJCW9mIGFsbCB0aGUgbGluZXMgaW4gdGhlIHJhbmdlLCBleGNlcHQgdGhlIGZpcnN0IG9uZS4KKworCQkJCQkJCQkqRTEzMioKK1RoZSByZWN1cnNpdmVuZXNzIG9mIHVzZXIgZnVuY3Rpb25zIGlzIHJlc3RyaWN0ZWQgd2l0aCB0aGUgfCdtYXhmdW5jZGVwdGgnfAorb3B0aW9uLgorCisJCQkJCQkJKmF1dG9sb2FkLWZ1bmN0aW9ucyoKK1doZW4gdXNpbmcgbWFueSBvciBsYXJnZSBmdW5jdGlvbnMsIGl0J3MgcG9zc2libGUgdG8gYXV0b21hdGljYWxseSBkZWZpbmUgdGhlbQorb25seSB3aGVuIHRoZXkgYXJlIHVzZWQuICBVc2UgdGhlIEZ1bmNVbmRlZmluZWQgYXV0b2NvbW1hbmQgZXZlbnQgd2l0aCBhCitwYXR0ZXJuIHRoYXQgbWF0Y2hlcyB0aGUgZnVuY3Rpb24ocykgdG8gYmUgZGVmaW5lZC4gIEV4YW1wbGU6ID4KKworCTphdSBGdW5jVW5kZWZpbmVkIEJ1Zk5ldCogc291cmNlIH4vdmltL2J1Zm5ldGZ1bmNzLnZpbQorCitUaGUgZmlsZSAifi92aW0vYnVmbmV0ZnVuY3MudmltIiBzaG91bGQgdGhlbiBkZWZpbmUgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aAorIkJ1Zk5ldCIuICBBbHNvIHNlZSB8RnVuY1VuZGVmaW5lZHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gQ3VybHkgYnJhY2VzIG5hbWVzCQkJCQkqY3VybHktYnJhY2VzLW5hbWVzKgorCitXaGVyZXZlciB5b3UgY2FuIHVzZSBhIHZhcmlhYmxlLCB5b3UgY2FuIHVzZSBhICJjdXJseSBicmFjZXMgbmFtZSIgdmFyaWFibGUuCitUaGlzIGlzIGEgcmVndWxhciB2YXJpYWJsZSBuYW1lIHdpdGggb25lIG9yIG1vcmUgZXhwcmVzc2lvbnMgd3JhcHBlZCBpbiBicmFjZXMKK3t9IGxpa2UgdGhpczogPgorCW15X3thZGplY3RpdmV9X3ZhcmlhYmxlCisKK1doZW4gVmltIGVuY291bnRlcnMgdGhpcywgaXQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGluc2lkZSB0aGUgYnJhY2VzLCBwdXRzCit0aGF0IGluIHBsYWNlIG9mIHRoZSBleHByZXNzaW9uLCBhbmQgcmUtaW50ZXJwcmV0cyB0aGUgd2hvbGUgYXMgYSB2YXJpYWJsZQorbmFtZS4gIFNvIGluIHRoZSBhYm92ZSBleGFtcGxlLCBpZiB0aGUgdmFyaWFibGUgImFkamVjdGl2ZSIgd2FzIHNldCB0bworIm5vaXN5IiwgdGhlbiB0aGUgcmVmZXJlbmNlIHdvdWxkIGJlIHRvICJteV9ub2lzeV92YXJpYWJsZSIsIHdoZXJlYXMgaWYKKyJhZGplY3RpdmUiIHdhcyBzZXQgdG8gInF1aWV0IiwgdGhlbiBpdCB3b3VsZCBiZSB0byAibXlfcXVpZXRfdmFyaWFibGUiLgorCitPbmUgYXBwbGljYXRpb24gZm9yIHRoaXMgaXMgdG8gY3JlYXRlIGEgc2V0IG9mIHZhcmlhYmxlcyBnb3Zlcm5lZCBieSBhbiBvcHRpb24KK3ZhbHVlLiAgRm9yIGV4YW1wbGUsIHRoZSBzdGF0ZW1lbnQgPgorCWVjaG8gbXlfeyZiYWNrZ3JvdW5kfV9tZXNzYWdlCisKK3dvdWxkIG91dHB1dCB0aGUgY29udGVudHMgb2YgIm15X2RhcmtfbWVzc2FnZSIgb3IgIm15X2xpZ2h0X21lc3NhZ2UiIGRlcGVuZGluZworb24gdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ2JhY2tncm91bmQnLgorCitZb3UgY2FuIHVzZSBtdWx0aXBsZSBicmFjZSBwYWlyczogPgorCWVjaG8gbXlfe2FkdmVyYn1fe2FkamVjdGl2ZX1fbWVzc2FnZQorLi5vciBldmVuIG5lc3QgdGhlbTogPgorCWVjaG8gbXlfe2Fke2VuZF9vZl93b3JkfX1fbWVzc2FnZQord2hlcmUgImVuZF9vZl93b3JkIiBpcyBlaXRoZXIgInZlcmIiIG9yICJqZWN0aXZlIi4KKworSG93ZXZlciwgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHRoZSBicmFjZXMgbXVzdCBldmFsdWF0ZSB0byBhIHZhbGlkIHNpbmdsZQordmFyaWFibGUgbmFtZS4gZS5nLiB0aGlzIGlzIGludmFsaWQ6ID4KKwk6bGV0IGZvbz0nYSArIGInCisJOmVjaG8gY3tmb299ZAorLi4gc2luY2UgdGhlIHJlc3VsdCBvZiBleHBhbnNpb24gaXMgImNhICsgYmQiLCB3aGljaCBpcyBub3QgYSB2YXJpYWJsZSBuYW1lLgorCisJCQkJCQkqY3VybHktYnJhY2VzLWZ1bmN0aW9uLW5hbWVzKgorWW91IGNhbiBjYWxsIGFuZCBkZWZpbmUgZnVuY3Rpb25zIGJ5IGFuIGV2YWx1YXRlZCBuYW1lIGluIGEgc2ltaWxhciB3YXkuCitFeGFtcGxlOiA+CisJOmxldCBmdW5jX2VuZD0nd2hpenonCisJOmNhbGwgbXlfZnVuY197ZnVuY19lbmR9KHBhcmFtZXRlcikKKworVGhpcyB3b3VsZCBjYWxsIHRoZSBmdW5jdGlvbiAibXlfZnVuY193aGl6eihwYXJhbWV0ZXIpIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBDb21tYW5kcwkJCQkJCSpleHByZXNzaW9uLWNvbW1hbmRzKgorCis6bGV0IHt2YXItbmFtZX0gPSB7ZXhwcjF9CQkJCSo6bGV0KiAqRTE4KgorCQkJU2V0IGludGVybmFsIHZhcmlhYmxlIHt2YXItbmFtZX0gdG8gdGhlIHJlc3VsdCBvZiB0aGUKKwkJCWV4cHJlc3Npb24ge2V4cHIxfS4gIFRoZSB2YXJpYWJsZSB3aWxsIGdldCB0aGUgdHlwZQorCQkJZnJvbSB0aGUge2V4cHJ9LiAgSWYge3Zhci1uYW1lfSBkaWRuJ3QgZXhpc3QgeWV0LCBpdAorCQkJaXMgY3JlYXRlZC4KKworOmxldCAke2Vudi1uYW1lfSA9IHtleHByMX0JCQkqOmxldC1lbnZpcm9ubWVudCogKjpsZXQtJCoKKwkJCVNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSB7ZW52LW5hbWV9IHRvIHRoZSByZXN1bHQgb2YKKwkJCXRoZSBleHByZXNzaW9uIHtleHByMX0uICBUaGUgdHlwZSBpcyBhbHdheXMgU3RyaW5nLgorCis6bGV0IEB7cmVnLW5hbWV9ID0ge2V4cHIxfQkJCSo6bGV0LXJlZ2lzdGVyKiAqOmxldC1AKgorCQkJV3JpdGUgdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiB7ZXhwcjF9IGluIHJlZ2lzdGVyCisJCQl7cmVnLW5hbWV9LiAge3JlZy1uYW1lfSBtdXN0IGJlIGEgc2luZ2xlIGxldHRlciwgYW5kCisJCQltdXN0IGJlIHRoZSBuYW1lIG9mIGEgd3JpdGFibGUgcmVnaXN0ZXIgKHNlZQorCQkJfHJlZ2lzdGVyc3wpLiAgIkBAIiBjYW4gYmUgdXNlZCBmb3IgdGhlIHVubmFtZWQKKwkJCXJlZ2lzdGVyLCAiQC8iIGZvciB0aGUgc2VhcmNoIHBhdHRlcm4uCisJCQlJZiB0aGUgcmVzdWx0IG9mIHtleHByMX0gZW5kcyBpbiBhIDxDUj4gb3IgPE5MPiwgdGhlCisJCQlyZWdpc3RlciB3aWxsIGJlIGxpbmV3aXNlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzZXQgdG8KKwkJCWNoYXJhY3Rlcndpc2UuCisJCQlUaGlzIGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRoZSBsYXN0IHNlYXJjaCBwYXR0ZXJuOiA+CisJCQkJOmxldCBALyA9ICIiCis8CQkJVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBzZWFyY2hpbmcgZm9yIGFuIGVtcHR5IHN0cmluZywKKwkJCXRoYXQgd291bGQgbWF0Y2ggZXZlcnl3aGVyZS4KKworOmxldCAme29wdGlvbi1uYW1lfSA9IHtleHByMX0JCQkqOmxldC1vcHRpb24qICo6bGV0LXN0YXIqCisJCQlTZXQgb3B0aW9uIHtvcHRpb24tbmFtZX0gdG8gdGhlIHJlc3VsdCBvZiB0aGUKKwkJCWV4cHJlc3Npb24ge2V4cHIxfS4gIFRoZSB2YWx1ZSBpcyBhbHdheXMgY29udmVydGVkIHRvCisJCQl0aGUgdHlwZSBvZiB0aGUgb3B0aW9uLgorCQkJRm9yIGFuIG9wdGlvbiBsb2NhbCB0byBhIHdpbmRvdyBvciBidWZmZXIgdGhlIGVmZmVjdAorCQkJaXMganVzdCBsaWtlIHVzaW5nIHRoZSB8OnNldHwgY29tbWFuZDogYm90aCB0aGUgbG9jYWwKKwkJCXZhbHVlIGFuZCB0aGUgZ2xvYmFsIHZhbHVlIGlzIGNoYW5nZWQuCisKKzpsZXQgJmw6e29wdGlvbi1uYW1lfSA9IHtleHByMX0KKwkJCUxpa2UgYWJvdmUsIGJ1dCBvbmx5IHNldCB0aGUgbG9jYWwgdmFsdWUgb2YgYW4gb3B0aW9uCisJCQkoaWYgdGhlcmUgaXMgb25lKS4gIFdvcmtzIGxpa2UgfDpzZXRsb2NhbHwuCisKKzpsZXQgJmc6e29wdGlvbi1uYW1lfSA9IHtleHByMX0KKwkJCUxpa2UgYWJvdmUsIGJ1dCBvbmx5IHNldCB0aGUgZ2xvYmFsIHZhbHVlIG9mIGFuIG9wdGlvbgorCQkJKGlmIHRoZXJlIGlzIG9uZSkuICBXb3JrcyBsaWtlIHw6c2V0Z2xvYmFsfC4KKworCQkJCQkJCSpFMTA2KgorOmxldCB7dmFyLW5hbWV9CS4uCUxpc3QgdGhlIHZhbHVlIG9mIHZhcmlhYmxlIHt2YXItbmFtZX0uICBTZXZlcmFsCisJCQl2YXJpYWJsZSBuYW1lcyBtYXkgYmUgZ2l2ZW4uCisKKzpsZXQJCQlMaXN0IHRoZSB2YWx1ZXMgb2YgYWxsIHZhcmlhYmxlcy4KKworCQkJCQkJCSo6dW5sZXQqICo6dW5sKiAqRTEwOCoKKzp1bmxbZXRdWyFdIHt2YXItbmFtZX0gLi4uCisJCQlSZW1vdmUgdGhlIGludGVybmFsIHZhcmlhYmxlIHt2YXItbmFtZX0uICBTZXZlcmFsCisJCQl2YXJpYWJsZSBuYW1lcyBjYW4gYmUgZ2l2ZW4sIHRoZXkgYXJlIGFsbCByZW1vdmVkLgorCQkJV2l0aCBbIV0gbm8gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiBmb3Igbm9uLWV4aXN0aW5nCisJCQl2YXJpYWJsZXMuCisKKzppZiB7ZXhwcjF9CQkJKjppZiogKjplbmRpZiogKjplbiogKkUxNzEqICpFNTc5KiAqRTU4MCoKKzplbltkaWZdCQlFeGVjdXRlIHRoZSBjb21tYW5kcyB1bnRpbCB0aGUgbmV4dCBtYXRjaGluZyAiOmVsc2UiCisJCQlvciAiOmVuZGlmIiBpZiB7ZXhwcjF9IGV2YWx1YXRlcyB0byBub24temVyby4KKworCQkJRnJvbSBWaW0gdmVyc2lvbiA0LjUgdW50aWwgNS4wLCBldmVyeSBFeCBjb21tYW5kIGluCisJCQliZXR3ZWVuIHRoZSAiOmlmIiBhbmQgIjplbmRpZiIgaXMgaWdub3JlZC4gIFRoZXNlIHR3bworCQkJY29tbWFuZHMgd2VyZSBqdXN0IHRvIGFsbG93IGZvciBmdXR1cmUgZXhwYW5zaW9ucyBpbiBhCisJCQliYWNrd2FyZHMgY29tcGF0aWJsZSB3YXkuICBOZXN0aW5nIHdhcyBhbGxvd2VkLiAgTm90ZQorCQkJdGhhdCBhbnkgIjplbHNlIiBvciAiOmVsc2VpZiIgd2FzIGlnbm9yZWQsIHRoZSAiZWxzZSIKKwkJCXBhcnQgd2FzIG5vdCBleGVjdXRlZCBlaXRoZXIuCisKKwkJCVlvdSBjYW4gdXNlIHRoaXMgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCBvbGRlcgorCQkJdmVyc2lvbnM6ID4KKwkJCQk6aWYgdmVyc2lvbiA+PSA1MDAKKwkJCQk6ICB2ZXJzaW9uLTUtc3BlY2lmaWMtY29tbWFuZHMKKwkJCQk6ZW5kaWYKKzwJCQlUaGUgY29tbWFuZHMgc3RpbGwgbmVlZCB0byBiZSBwYXJzZWQgdG8gZmluZCB0aGUKKwkJCSJlbmRpZiIuICBTb21ldGltZXMgYW4gb2xkZXIgVmltIGhhcyBhIHByb2JsZW0gd2l0aCBhCisJCQluZXcgY29tbWFuZC4gIEZvciBleGFtcGxlLCAiOnNpbGVudCIgaXMgcmVjb2duaXplZCBhcworCQkJYSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQuICBJbiB0aGF0IGNhc2UgIjpleGVjdXRlIiBjYW4KKwkJCWF2b2lkIHByb2JsZW1zOiA+CisJCQkJOmlmIHZlcnNpb24gPj0gNjAwCisJCQkJOiAgZXhlY3V0ZSAic2lsZW50IDEsJGRlbGV0ZSIKKwkJCQk6ZW5kaWYKKzwKKwkJCU5PVEU6IFRoZSAiOmFwcGVuZCIgYW5kICI6aW5zZXJ0IiBjb21tYW5kcyBkb24ndCB3b3JrCisJCQlwcm9wZXJseSBpbiBiZXR3ZWVuICI6aWYiIGFuZCAiOmVuZGlmIi4KKworCQkJCQkJKjplbHNlKiAqOmVsKiAqRTU4MSogKkU1ODMqCis6ZWxbc2VdCQkJRXhlY3V0ZSB0aGUgY29tbWFuZHMgdW50aWwgdGhlIG5leHQgbWF0Y2hpbmcgIjplbHNlIgorCQkJb3IgIjplbmRpZiIgaWYgdGhleSBwcmV2aW91c2x5IHdlcmUgbm90IGJlaW5nCisJCQlleGVjdXRlZC4KKworCQkJCQkqOmVsc2VpZiogKjplbHNlaSogKkU1ODIqICpFNTg0KgorOmVsc2VpW2ZdIHtleHByMX0JU2hvcnQgZm9yICI6ZWxzZSIgIjppZiIsIHdpdGggdGhlIGFkZGl0aW9uIHRoYXQgdGhlcmUKKwkJCWlzIG5vIGV4dHJhICI6ZW5kaWYiLgorCis6d2hbaWxlXSB7ZXhwcjF9CQkJKjp3aGlsZSogKjplbmR3aGlsZSogKjp3aCogKjplbmR3KgorCQkJCQkJCSpFMTcwKiAqRTU4NSogKkU1ODgqCis6ZW5kd1toaWxlXQkJUmVwZWF0IHRoZSBjb21tYW5kcyBiZXR3ZWVuICI6d2hpbGUiIGFuZCAiOmVuZHdoaWxlIiwKKwkJCWFzIGxvbmcgYXMge2V4cHIxfSBldmFsdWF0ZXMgdG8gbm9uLXplcm8uCisJCQlXaGVuIGFuIGVycm9yIGlzIGRldGVjdGVkIGZyb20gYSBjb21tYW5kIGluc2lkZSB0aGUKKwkJCWxvb3AsIGV4ZWN1dGlvbiBjb250aW51ZXMgYWZ0ZXIgdGhlICJlbmR3aGlsZSIuCisKKwkJCU5PVEU6IFRoZSAiOmFwcGVuZCIgYW5kICI6aW5zZXJ0IiBjb21tYW5kcyBkb24ndCB3b3JrCisJCQlwcm9wZXJseSBpbnNpZGUgYSAiOndoaWxlIiBsb29wLgorCisJCQkJCQkqOmNvbnRpbnVlKiAqOmNvbiogKkU1ODYqCis6Y29uW3RpbnVlXQkJV2hlbiB1c2VkIGluc2lkZSBhICI6d2hpbGUiLCBqdW1wcyBiYWNrIHRvIHRoZQorCQkJIjp3aGlsZSIuICBJZiBpdCBpcyB1c2VkIGFmdGVyIGEgfDp0cnl8IGluc2lkZSB0aGUKKwkJCSI6d2hpbGUiIGJ1dCBiZWZvcmUgdGhlIG1hdGNoaW5nIHw6ZmluYWxseXwgKGlmCisJCQlwcmVzZW50KSwgdGhlIGNvbW1hbmRzIGZvbGxvd2luZyB0aGUgIjpmaW5hbGx5IiB1cCB0bworCQkJdGhlIG1hdGNoaW5nIHw6ZW5kdHJ5fCBhcmUgZXhlY3V0ZWQgZmlyc3QuICBUaGlzCisJCQlwcm9jZXNzIGFwcGxpZXMgdG8gYWxsIG5lc3RlZCAiOnRyeSJzIGluc2lkZSB0aGUKKwkJCSI6d2hpbGUiLiAgVGhlIG91dGVybW9zdCAiOmVuZHRyeSIgdGhlbiBqdW1wcyBiYWNrIHRvCisJCQl0aGUgIjp3aGlsZSIuCisKKwkJCQkJCSo6YnJlYWsqICo6YnJlYSogKkU1ODcqCis6YnJlYVtrXQkJV2hlbiB1c2VkIGluc2lkZSBhICI6d2hpbGUiLCBza2lwcyB0byB0aGUgY29tbWFuZAorCQkJYWZ0ZXIgdGhlIG1hdGNoaW5nICI6ZW5kd2hpbGUiLiAgSWYgaXQgaXMgdXNlZCBhZnRlcgorCQkJYSB8OnRyeXwgaW5zaWRlIHRoZSAiOndoaWxlIiBidXQgYmVmb3JlIHRoZSBtYXRjaGluZworCQkJfDpmaW5hbGx5fCAoaWYgcHJlc2VudCksIHRoZSBjb21tYW5kcyBmb2xsb3dpbmcgdGhlCisJCQkiOmZpbmFsbHkiIHVwIHRvIHRoZSBtYXRjaGluZyB8OmVuZHRyeXwgYXJlIGV4ZWN1dGVkCisJCQlmaXJzdC4gIFRoaXMgcHJvY2VzcyBhcHBsaWVzIHRvIGFsbCBuZXN0ZWQgIjp0cnkicworCQkJaW5zaWRlIHRoZSAiOndoaWxlIi4gIFRoZSBvdXRlcm1vc3QgIjplbmR0cnkiIHRoZW4KKwkJCWp1bXBzIHRvIHRoZSBjb21tYW5kIGFmdGVyIHRoZSAiOmVuZHdoaWxlIi4KKworOnRyeQkJCQkqOnRyeSogKjplbmR0KiAqOmVuZHRyeSogKkU2MDAqICpFNjAxKiAqRTYwMioKKzplbmR0W3J5XQkJQ2hhbmdlIHRoZSBlcnJvciBoYW5kbGluZyBmb3IgdGhlIGNvbW1hbmRzIGJldHdlZW4KKwkJCSI6dHJ5IiBhbmQgIjplbmR0cnkiIGluY2x1ZGluZyBldmVyeXRoaW5nIGJlaW5nCisJCQlleGVjdXRlZCBhY3Jvc3MgIjpzb3VyY2UiIGNvbW1hbmRzLCBmdW5jdGlvbiBjYWxscywKKwkJCW9yIGF1dG9jb21tYW5kIGludm9jYXRpb25zLgorCisJCQlXaGVuIGFuIGVycm9yIG9yIGludGVycnVwdCBpcyBkZXRlY3RlZCBhbmQgdGhlcmUgaXMKKwkJCWEgfDpmaW5hbGx5fCBjb21tYW5kIGZvbGxvd2luZywgZXhlY3V0aW9uIGNvbnRpbnVlcworCQkJYWZ0ZXIgdGhlICI6ZmluYWxseSIuICBPdGhlcndpc2UsIG9yIHdoZW4gdGhlCisJCQkiOmVuZHRyeSIgaXMgcmVhY2hlZCB0aGVyZWFmdGVyLCB0aGUgbmV4dAorCQkJKGR5bmFtaWNhbGx5KSBzdXJyb3VuZGluZyAiOnRyeSIgaXMgY2hlY2tlZCBmb3IKKwkJCWEgY29ycmVzcG9uZGluZyAiOmZpbmFsbHkiIGV0Yy4gIFRoZW4gdGhlIHNjcmlwdAorCQkJcHJvY2Vzc2luZyBpcyB0ZXJtaW5hdGVkLiAgKFdoZXRoZXIgYSBmdW5jdGlvbgorCQkJZGVmaW5pdGlvbiBoYXMgYW4gImFib3J0IiBhcmd1bWVudCBkb2VzIG5vdCBtYXR0ZXIuKQorCQkJRXhhbXBsZTogPgorCQk6dHJ5IHwgZWRpdCB0b28gbXVjaCB8IGZpbmFsbHkgfCBlY2hvICJjbGVhbnVwIiB8IGVuZHRyeQorCQk6ZWNobyAiaW1wb3NzaWJsZSIJIiBub3QgcmVhY2hlZCwgc2NyaXB0IHRlcm1pbmF0ZWQgYWJvdmUKKzwKKwkJCU1vcmVvdmVyLCBhbiBlcnJvciBvciBpbnRlcnJ1cHQgKGR5bmFtaWNhbGx5KSBpbnNpZGUKKwkJCSI6dHJ5IiBhbmQgIjplbmR0cnkiIGlzIGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24uICBJdAorCQkJY2FuIGJlIGNhdWdodCBhcyBpZiBpdCB3ZXJlIHRocm93biBieSBhIHw6dGhyb3d8CisJCQljb21tYW5kIChzZWUgfDpjYXRjaHwpLiAgSW4gdGhpcyBjYXNlLCB0aGUgc2NyaXB0CisJCQlwcm9jZXNzaW5nIGlzIG5vdCB0ZXJtaW5hdGVkLgorCisJCQlUaGUgdmFsdWUgIlZpbTpJbnRlcnJ1cHQiIGlzIHVzZWQgZm9yIGFuIGludGVycnVwdAorCQkJZXhjZXB0aW9uLiAgQW4gZXJyb3IgaW4gYSBWaW0gY29tbWFuZCBpcyBjb252ZXJ0ZWQKKwkJCXRvIGEgdmFsdWUgb2YgdGhlIGZvcm0gIlZpbSh7Y29tbWFuZH0pOntlcnJtc2d9IiwKKwkJCW90aGVyIGVycm9ycyBhcmUgY29udmVydGVkIHRvIGEgdmFsdWUgb2YgdGhlIGZvcm0KKwkJCSJWaW06e2Vycm1zZ30iLiAge2NvbW1hbmR9IGlzIHRoZSBmdWxsIGNvbW1hbmQgbmFtZSwKKwkJCWFuZCB7ZXJybXNnfSBpcyB0aGUgbWVzc2FnZSB0aGF0IGlzIGRpc3BsYXllZCBpZiB0aGUKKwkJCWVycm9yIGV4Y2VwdGlvbiBpcyBub3QgY2F1Z2h0LCBhbHdheXMgYmVnaW5uaW5nIHdpdGgKKwkJCXRoZSBlcnJvciBudW1iZXIuCisJCQlFeGFtcGxlczogPgorCQk6dHJ5IHwgc2xlZXAgMTAwIHwgY2F0Y2ggL15WaW06SW50ZXJydXB0JC8gfCBlbmR0cnkKKwkJOnRyeSB8IGVkaXQgfCBjYXRjaCAvXlZpbShlZGl0KTpFXGRcKy8gfCBlY2hvICJlcnJvciIgfCBlbmR0cnkKKzwKKwkJCQkJKjpjYXQqICo6Y2F0Y2gqICpFNjAzKiAqRTYwNCogKkU2MDUqCis6Y2F0W2NoXSAve3BhdHRlcm59LwlUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHVudGlsIHRoZSBuZXh0ICI6Y2F0Y2giLAorCQkJfDpmaW5hbGx5fCwgb3IgfDplbmR0cnl8IHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZQorCQkJfDp0cnl8IGFzIHRoZSAiOmNhdGNoIiBhcmUgZXhlY3V0ZWQgd2hlbiBhbiBleGNlcHRpb24KKwkJCW1hdGNoaW5nIHtwYXR0ZXJufSBpcyBiZWluZyB0aHJvd24gYW5kIGhhcyBub3QgeWV0CisJCQliZWVuIGNhdWdodCBieSBhIHByZXZpb3VzICI6Y2F0Y2giLiAgT3RoZXJ3aXNlLCB0aGVzZQorCQkJY29tbWFuZHMgYXJlIHNraXBwZWQuCisJCQlXaGVuIHtwYXR0ZXJufSBpcyBvbWl0dGVkIGFsbCBlcnJvcnMgYXJlIGNhdWdodC4KKwkJCUV4YW1wbGVzOiA+CisJCTpjYXRjaCAvXlZpbTpJbnRlcnJ1cHQkLwkiIGNhdGNoIGludGVycnVwdHMgKENUUkwtQykKKwkJOmNhdGNoIC9eVmltXCUoKFxhXCspXClcPTpFLwkiIGNhdGNoIGFsbCBWaW0gZXJyb3JzCisJCTpjYXRjaCAvXlZpbVwlKChcYVwrKVwpXD06LwkiIGNhdGNoIGVycm9ycyBhbmQgaW50ZXJydXB0cworCQk6Y2F0Y2ggL15WaW0od3JpdGUpOi8JCSIgY2F0Y2ggYWxsIGVycm9ycyBpbiA6d3JpdGUKKwkJOmNhdGNoIC9eVmltXCUoKFxhXCspXClcPTpFMTIzLwkiIGNhdGNoIGVycm9yIEUxMjMKKwkJOmNhdGNoIC9teS1leGNlcHRpb24vCQkiIGNhdGNoIHVzZXIgZXhjZXB0aW9uCisJCTpjYXRjaCAvLiovCQkJIiBjYXRjaCBldmVyeXRoaW5nCisJCTpjYXRjaAkJCQkiIHNhbWUgYXMgLy4qLworPAorCQkJQW5vdGhlciBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAvIGFyb3VuZCB0aGUKKwkJCXtwYXR0ZXJufSwgc28gbG9uZyBhcyBpdCBkb2VzIG5vdCBoYXZlIGEgc3BlY2lhbAorCQkJbWVhbmluZyAoZS5nLiwgJ3wnIG9yICciJykgYW5kIGRvZXNuJ3Qgb2NjdXIgaW5zaWRlCisJCQl7cGF0dGVybn0uCisJCQlOT1RFOiBJdCBpcyBub3QgcmVsaWFibGUgdG8gIjpjYXRjaCIgdGhlIFRFWFQgb2YKKwkJCWFuIGVycm9yIG1lc3NhZ2UgYmVjYXVzZSBpdCBtYXkgdmFyeSBpbiBkaWZmZXJlbnQKKwkJCWxvY2FsZXMuCisKKwkJCQkJKjpmaW5hKiAqOmZpbmFsbHkqICpFNjA2KiAqRTYwNyoKKzpmaW5hW2xseV0JCVRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdW50aWwgdGhlIG1hdGNoaW5nIHw6ZW5kdHJ5fAorCQkJYXJlIGV4ZWN1dGVkIHdoZW5ldmVyIHRoZSBwYXJ0IGJldHdlZW4gdGhlIG1hdGNoaW5nCisJCQl8OnRyeXwgYW5kIHRoZSAiOmZpbmFsbHkiIGlzIGxlZnQ6ICBlaXRoZXIgYnkgZmFsbGluZworCQkJdGhyb3VnaCB0byB0aGUgIjpmaW5hbGx5IiBvciBieSBhIHw6Y29udGludWV8LAorCQkJfDpicmVha3wsIHw6ZmluaXNofCwgb3IgfDpyZXR1cm58LCBvciBieSBhbiBlcnJvciBvcgorCQkJaW50ZXJydXB0IG9yIGV4Y2VwdGlvbiAoc2VlIHw6dGhyb3d8KS4KKworCQkJCQkJCSo6dGgqICo6dGhyb3cqICpFNjA4KgorOnRoW3Jvd10ge2V4cHIxfQlUaGUge2V4cHIxfSBpcyBldmFsdWF0ZWQgYW5kIHRocm93biBhcyBhbiBleGNlcHRpb24uCisJCQlJZiB0aGUgIjp0aHJvdyIgaXMgdXNlZCBhZnRlciBhIHw6dHJ5fCBidXQgYmVmb3JlIHRoZQorCQkJZmlyc3QgY29ycmVzcG9uZGluZyB8OmNhdGNofCwgY29tbWFuZHMgYXJlIHNraXBwZWQKKwkJCXVudGlsIHRoZSBmaXJzdCAiOmNhdGNoIiBtYXRjaGluZyB7ZXhwcjF9IGlzIHJlYWNoZWQuCisJCQlJZiB0aGVyZSBpcyBubyBzdWNoICI6Y2F0Y2giIG9yIGlmIHRoZSAiOnRocm93IiBpcworCQkJdXNlZCBhZnRlciBhICI6Y2F0Y2giIGJ1dCBiZWZvcmUgdGhlIHw6ZmluYWxseXwsIHRoZQorCQkJY29tbWFuZHMgZm9sbG93aW5nIHRoZSAiOmZpbmFsbHkiIChpZiBwcmVzZW50KSB1cCB0bworCQkJdGhlIG1hdGNoaW5nIHw6ZW5kdHJ5fCBhcmUgZXhlY3V0ZWQuICBJZiB0aGUgIjp0aHJvdyIKKwkJCWlzIGFmdGVyIHRoZSAiOmZpbmFsbHkiLCBjb21tYW5kcyB1cCB0byB0aGUgIjplbmR0cnkiCisJCQlhcmUgc2tpcHBlZC4gIEF0IHRoZSAiOmVuZHRyeSIsIHRoaXMgcHJvY2VzcyBhcHBsaWVzCisJCQlhZ2FpbiBmb3IgdGhlIG5leHQgZHluYW1pY2FsbHkgc3Vycm91bmRpbmcgIjp0cnkiCisJCQkod2hpY2ggbWF5IGJlIGZvdW5kIGluIGEgY2FsbGluZyBmdW5jdGlvbiBvciBzb3VyY2luZworCQkJc2NyaXB0KSwgdW50aWwgYSBtYXRjaGluZyAiOmNhdGNoIiBoYXMgYmVlbiBmb3VuZC4KKwkJCUlmIHRoZSBleGNlcHRpb24gaXMgbm90IGNhdWdodCwgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZworCQkJaXMgdGVybWluYXRlZC4KKwkJCUV4YW1wbGU6ID4KKwkJOnRyeSB8IHRocm93ICJvb3BzIiB8IGNhdGNoIC9eb28vIHwgZWNobyAiY2F1Z2h0IiB8IGVuZHRyeQorPAorCisJCQkJCQkJKjplYyogKjplY2hvKgorOmVjW2hvXSB7ZXhwcjF9IC4uCUVjaG9lcyBlYWNoIHtleHByMX0sIHdpdGggYSBzcGFjZSBpbiBiZXR3ZWVuLiAgVGhlCisJCQlmaXJzdCB7ZXhwcjF9IHN0YXJ0cyBvbiBhIG5ldyBsaW5lLgorCQkJQWxzbyBzZWUgfDpjb21tZW50fC4KKwkJCVVzZSAiXG4iIHRvIHN0YXJ0IGEgbmV3IGxpbmUuICBVc2UgIlxyIiB0byBtb3ZlIHRoZQorCQkJY3Vyc29yIHRvIHRoZSBmaXJzdCBjb2x1bW4uCisJCQlVc2VzIHRoZSBoaWdobGlnaHRpbmcgc2V0IGJ5IHRoZSB8OmVjaG9obHwgY29tbWFuZC4KKwkJCUNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGNvbW1lbnQuCisJCQlFeGFtcGxlOiA+CisJCTplY2hvICJ0aGUgdmFsdWUgb2YgJ3NoZWxsJyBpcyIgJnNoZWxsCis8CQkJQSBsYXRlciByZWRyYXcgbWF5IG1ha2UgdGhlIG1lc3NhZ2UgZGlzYXBwZWFyIGFnYWluLgorCQkJVG8gYXZvaWQgdGhhdCBhIGNvbW1hbmQgZnJvbSBiZWZvcmUgdGhlICI6ZWNobyIgY2F1c2VzCisJCQlhIHJlZHJhdyBhZnRlcndhcmRzIChyZWRyYXdzIGFyZSBvZnRlbiBwb3N0cG9uZWQgdW50aWwKKwkJCXlvdSB0eXBlIHNvbWV0aGluZyksIGZvcmNlIGEgcmVkcmF3IHdpdGggdGhlIHw6cmVkcmF3fAorCQkJY29tbWFuZC4gIEV4YW1wbGU6ID4KKwkJOm5ldyB8IHJlZHJhdyB8IGVjaG8gInRoZXJlIGlzIGEgbmV3IHdpbmRvdyIKKzwKKwkJCQkJCQkqOmVjaG9uKgorOmVjaG9uIHtleHByMX0gLi4JRWNob2VzIGVhY2gge2V4cHIxfSwgd2l0aG91dCBhbnl0aGluZyBhZGRlZC4gIEFsc28gc2VlCisJCQl8OmNvbW1lbnR8LgorCQkJVXNlcyB0aGUgaGlnaGxpZ2h0aW5nIHNldCBieSB0aGUgfDplY2hvaGx8IGNvbW1hbmQuCisJCQlDYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBjb21tZW50LgorCQkJRXhhbXBsZTogPgorCQkJCTplY2hvbiAidGhlIHZhbHVlIG9mICdzaGVsbCcgaXMgIiAmc2hlbGwKKzwKKwkJCU5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyAiOmVjaG8iLCB3aGljaCBpcyBhCisJCQlWaW0gY29tbWFuZCwgYW5kICI6IWVjaG8iLCB3aGljaCBpcyBhbiBleHRlcm5hbCBzaGVsbAorCQkJY29tbWFuZDogPgorCQk6IWVjaG8gJQkJLS0+IGZpbGVuYW1lCis8CQkJVGhlIGFyZ3VtZW50cyBvZiAiOiEiIGFyZSBleHBhbmRlZCwgc2VlIHw6XyV8LiA+CisJCTohZWNobyAiJSIJCS0tPiBmaWxlbmFtZSBvciAiZmlsZW5hbWUiCis8CQkJTGlrZSB0aGUgcHJldmlvdXMgZXhhbXBsZS4gIFdoZXRoZXIgeW91IHNlZSB0aGUgZG91YmxlCisJCQlxdW90ZXMgb3Igbm90IGRlcGVuZHMgb24geW91ciAnc2hlbGwnLiA+CisJCTplY2hvICUJCQktLT4gbm90aGluZworPAkJCVRoZSAnJScgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgaW4gYW4gZXhwcmVzc2lvbi4gPgorCQk6ZWNobyAiJSIJCS0tPiAlCis8CQkJVGhpcyBqdXN0IGVjaG9lcyB0aGUgJyUnIGNoYXJhY3Rlci4gPgorCQk6ZWNobyBleHBhbmQoIiUiKQktLT4gZmlsZW5hbWUKKzwJCQlUaGlzIGNhbGxzIHRoZSBleHBhbmQoKSBmdW5jdGlvbiB0byBleHBhbmQgdGhlICclJy4KKworCQkJCQkJCSo6ZWNob2gqICo6ZWNob2hsKgorOmVjaG9oW2xdIHtuYW1lfQlVc2UgdGhlIGhpZ2hsaWdodCBncm91cCB7bmFtZX0gZm9yIHRoZSBmb2xsb3dpbmcKKwkJCXw6ZWNob3wsIHw6ZWNob258IGFuZCB8OmVjaG9tc2d8IGNvbW1hbmRzLiAgQWxzbyB1c2VkCisJCQlmb3IgdGhlIHxpbnB1dCgpfCBwcm9tcHQuICBFeGFtcGxlOiA+CisJCTplY2hvaGwgV2FybmluZ01zZyB8IGVjaG8gIkRvbid0IHBhbmljISIgfCBlY2hvaGwgTm9uZQorPAkJCURvbid0IGZvcmdldCB0byBzZXQgdGhlIGdyb3VwIGJhY2sgdG8gIk5vbmUiLAorCQkJb3RoZXJ3aXNlIGFsbCBmb2xsb3dpbmcgZWNobydzIHdpbGwgYmUgaGlnaGxpZ2h0ZWQuCisKKwkJCQkJCQkqOmVjaG9tKiAqOmVjaG9tc2cqCis6ZWNob21bc2ddIHtleHByMX0gLi4JRWNobyB0aGUgZXhwcmVzc2lvbihzKSBhcyBhIHRydWUgbWVzc2FnZSwgc2F2aW5nIHRoZQorCQkJbWVzc2FnZSBpbiB0aGUgfG1lc3NhZ2UtaGlzdG9yeXwuCisJCQlTcGFjZXMgYXJlIHBsYWNlZCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgYXMgd2l0aCB0aGUKKwkJCXw6ZWNob3wgY29tbWFuZC4gIEJ1dCB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZQorCQkJZGlzcGxheWVkLCBub3QgaW50ZXJwcmV0ZWQuCisJCQlVc2VzIHRoZSBoaWdobGlnaHRpbmcgc2V0IGJ5IHRoZSB8OmVjaG9obHwgY29tbWFuZC4KKwkJCUV4YW1wbGU6ID4KKwkJOmVjaG9tc2cgIkl0J3MgYSBaaXp6ZXIgWmF6emVyIFp1enosIGFzIHlvdSBjYW4gcGxhaW5seSBzZWUuIgorPAorCQkJCQkJCSo6ZWNob2UqICo6ZWNob2VycioKKzplY2hvZVtycl0ge2V4cHIxfSAuLglFY2hvIHRoZSBleHByZXNzaW9uKHMpIGFzIGFuIGVycm9yIG1lc3NhZ2UsIHNhdmluZyB0aGUKKwkJCW1lc3NhZ2UgaW4gdGhlIHxtZXNzYWdlLWhpc3Rvcnl8LiAgV2hlbiB1c2VkIGluIGEKKwkJCXNjcmlwdCBvciBmdW5jdGlvbiB0aGUgbGluZSBudW1iZXIgd2lsbCBiZSBhZGRlZC4KKwkJCVNwYWNlcyBhcmUgcGxhY2VkIGJldHdlZW4gdGhlIGFyZ3VtZW50cyBhcyB3aXRoIHRoZQorCQkJOmVjaG8gY29tbWFuZC4gIFdoZW4gdXNlZCBpbnNpZGUgYSB0cnkgY29uZGl0aW9uYWwsCisJCQl0aGUgbWVzc2FnZSBpcyByYWlzZWQgYXMgYW4gZXJyb3IgZXhjZXB0aW9uIGluc3RlYWQKKwkJCShzZWUgfHRyeS1lY2hvZXJyfCkuCisJCQlFeGFtcGxlOiA+CisJCTplY2hvZXJyICJUaGlzIHNjcmlwdCBqdXN0IGZhaWxlZCEiCis8CQkJSWYgeW91IGp1c3Qgd2FudCBhIGhpZ2hsaWdodGVkIG1lc3NhZ2UgdXNlIHw6ZWNob2hsfC4KKwkJCUFuZCB0byBnZXQgYSBiZWVwOiA+CisJCTpleGUgIm5vcm1hbCBcPEVzYz4iCis8CisJCQkJCQkJKjpleGUqICo6ZXhlY3V0ZSoKKzpleGVbY3V0ZV0ge2V4cHIxfSAuLglFeGVjdXRlcyB0aGUgc3RyaW5nIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSBldmFsdWF0aW9uCisJCQlvZiB7ZXhwcjF9IGFzIGFuIEV4IGNvbW1hbmQuICBNdWx0aXBsZSBhcmd1bWVudHMgYXJlCisJCQljb25jYXRlbmF0ZWQsIHdpdGggYSBzcGFjZSBpbiBiZXR3ZWVuLiAge2V4cHIxfSBpcworCQkJdXNlZCBhcyB0aGUgcHJvY2Vzc2VkIGNvbW1hbmQsIGNvbW1hbmQgbGluZSBlZGl0aW5nCisJCQlrZXlzIGFyZSBub3QgcmVjb2duaXplZC4KKwkJCUNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGNvbW1lbnQuCisJCQlFeGFtcGxlczogPgorCQk6ZXhlY3V0ZSAiYnVmZmVyICIgbmV4dGJ1ZgorCQk6ZXhlY3V0ZSAibm9ybWFsICIgY291bnQgLiAidyIKKzwKKwkJCSI6ZXhlY3V0ZSIgY2FuIGJlIHVzZWQgdG8gYXBwZW5kIGEgY29tbWFuZCB0byBjb21tYW5kcworCQkJdGhhdCBkb24ndCBhY2NlcHQgYSAnfCcuICBFeGFtcGxlOiA+CisJCTpleGVjdXRlICchbHMnIHwgZWNobyAidGhlZW5kIgorCis8CQkJIjpleGVjdXRlIiBpcyBhbHNvIGEgbmljZSB3YXkgdG8gYXZvaWQgaGF2aW5nIHRvIHR5cGUKKwkJCWNvbnRyb2wgY2hhcmFjdGVycyBpbiBhIFZpbSBzY3JpcHQgZm9yIGEgIjpub3JtYWwiCisJCQljb21tYW5kOiA+CisJCTpleGVjdXRlICJub3JtYWwgaXh4eFw8RXNjPiIKKzwJCQlUaGlzIGhhcyBhbiA8RXNjPiBjaGFyYWN0ZXIsIHNlZSB8ZXhwci1zdHJpbmd8LgorCisJCQlOb3RlOiBUaGUgZXhlY3V0ZWQgc3RyaW5nIG1heSBiZSBhbnkgY29tbWFuZC1saW5lLCBidXQKKwkJCXlvdSBjYW5ub3Qgc3RhcnQgb3IgZW5kIGEgIndoaWxlIiBvciAiaWYiIGNvbW1hbmQuCisJCQlUaHVzIHRoaXMgaXMgaWxsZWdhbDogPgorCQk6ZXhlY3V0ZSAnd2hpbGUgaSA+IDUnCisJCTpleGVjdXRlICdlY2hvICJ0ZXN0IiB8IGJyZWFrJworPAorCQkJSXQgaXMgYWxsb3dlZCB0byBoYXZlIGEgIndoaWxlIiBvciAiaWYiIGNvbW1hbmQKKwkJCWNvbXBsZXRlbHkgaW4gdGhlIGV4ZWN1dGVkIHN0cmluZzogPgorCQk6ZXhlY3V0ZSAnd2hpbGUgaSA8IDUgfCBlY2hvIGkgfCBsZXQgaSA9IGkgKyAxIHwgZW5kd2hpbGUnCis8CisKKwkJCQkJCQkqOmNvbW1lbnQqCisJCQkiOmV4ZWN1dGUiLCAiOmVjaG8iIGFuZCAiOmVjaG9uIiBjYW5ub3QgYmUgZm9sbG93ZWQgYnkKKwkJCWEgY29tbWVudCBkaXJlY3RseSwgYmVjYXVzZSB0aGV5IHNlZSB0aGUgJyInIGFzIHRoZQorCQkJc3RhcnQgb2YgYSBzdHJpbmcuICBCdXQsIHlvdSBjYW4gdXNlICd8JyBmb2xsb3dlZCBieSBhCisJCQljb21tZW50LiAgRXhhbXBsZTogPgorCQk6ZWNobyAiZm9vIiB8ICJ0aGlzIGlzIGEgY29tbWVudAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIEV4Y2VwdGlvbiBoYW5kbGluZwkJCQkJKmV4Y2VwdGlvbi1oYW5kbGluZyoKKworVGhlIFZpbSBzY3JpcHQgbGFuZ3VhZ2UgY29tcHJpc2VzIGFuIGV4Y2VwdGlvbiBoYW5kbGluZyBmZWF0dXJlLiAgVGhpcyBzZWN0aW9uCitleHBsYWlucyBob3cgaXQgY2FuIGJlIHVzZWQgaW4gYSBWaW0gc2NyaXB0LgorCitFeGNlcHRpb25zIG1heSBiZSByYWlzZWQgYnkgVmltIG9uIGFuIGVycm9yIG9yIG9uIGludGVycnVwdCwgc2VlCit8Y2F0Y2gtZXJyb3JzfCBhbmQgfGNhdGNoLWludGVycnVwdHwuICBZb3UgY2FuIGFsc28gZXhwbGljaXRseSB0aHJvdyBhbgorZXhjZXB0aW9uIGJ5IHVzaW5nIHRoZSAiOnRocm93IiBjb21tYW5kLCBzZWUgfHRocm93LWNhdGNofC4KKworCitUUlkgQ09ORElUSU9OQUxTCQkJCQkqdHJ5LWNvbmRpdGlvbmFscyoKKworRXhjZXB0aW9ucyBjYW4gYmUgY2F1Z2h0IG9yIGNhbiBjYXVzZSBjbGVhbnVwIGNvZGUgdG8gYmUgZXhlY3V0ZWQuICBZb3UgY2FuCit1c2UgYSB0cnkgY29uZGl0aW9uYWwgdG8gc3BlY2lmeSBjYXRjaCBjbGF1c2VzICh0aGF0IGNhdGNoIGV4Y2VwdGlvbnMpIGFuZC9vcgorYSBmaW5hbGx5IGNsYXVzZSAodG8gYmUgZXhlY3V0ZWQgZm9yIGNsZWFudXApLgorICAgQSB0cnkgY29uZGl0aW9uYWwgYmVnaW5zIHdpdGggYSB8OnRyeXwgY29tbWFuZCBhbmQgZW5kcyBhdCB0aGUgbWF0Y2hpbmcKK3w6ZW5kdHJ5fCBjb21tYW5kLiAgSW4gYmV0d2VlbiwgeW91IGNhbiB1c2UgYSB8OmNhdGNofCBjb21tYW5kIHRvIHN0YXJ0CithIGNhdGNoIGNsYXVzZSwgb3IgYSB8OmZpbmFsbHl8IGNvbW1hbmQgdG8gc3RhcnQgYSBmaW5hbGx5IGNsYXVzZS4gIFRoZXJlIG1heQorYmUgbm9uZSBvciBtdWx0aXBsZSBjYXRjaCBjbGF1c2VzLCBidXQgdGhlcmUgaXMgYXQgbW9zdCBvbmUgZmluYWxseSBjbGF1c2UsCit3aGljaCBtdXN0IG5vdCBiZSBmb2xsb3dlZCBieSBhbnkgY2F0Y2ggY2xhdXNlcy4gIFRoZSBsaW5lcyBiZWZvcmUgdGhlIGNhdGNoCitjbGF1c2VzIGFuZCB0aGUgZmluYWxseSBjbGF1c2UgaXMgY2FsbGVkIGEgdHJ5IGJsb2NrLiA+CisKKyAgICAgOnRyeQorICAgICA6ICAuLi4KKyAgICAgOiAgLi4uCQkJCVRSWSBCTE9DSworICAgICA6ICAuLi4KKyAgICAgOmNhdGNoIC97cGF0dGVybn0vCisgICAgIDogIC4uLgorICAgICA6ICAuLi4JCQkJQ0FUQ0ggQ0xBVVNFCisgICAgIDogIC4uLgorICAgICA6Y2F0Y2ggL3twYXR0ZXJufS8KKyAgICAgOiAgLi4uCisgICAgIDogIC4uLgkJCQlDQVRDSCBDTEFVU0UKKyAgICAgOiAgLi4uCisgICAgIDpmaW5hbGx5CisgICAgIDogIC4uLgorICAgICA6ICAuLi4JCQkJRklOQUxMWSBDTEFVU0UKKyAgICAgOiAgLi4uCisgICAgIDplbmR0cnkKKworVGhlIHRyeSBjb25kaXRpb25hbCBhbGxvd3MgdG8gd2F0Y2ggY29kZSBmb3IgZXhjZXB0aW9ucyBhbmQgdG8gdGFrZSB0aGUKK2FwcHJvcHJpYXRlIGFjdGlvbnMuICBFeGNlcHRpb25zIGZyb20gdGhlIHRyeSBibG9jayBtYXkgYmUgY2F1Z2h0LiAgRXhjZXB0aW9ucworZnJvbSB0aGUgdHJ5IGJsb2NrIGFuZCBhbHNvIHRoZSBjYXRjaCBjbGF1c2VzIG1heSBjYXVzZSBjbGVhbnVwIGFjdGlvbnMuCisgICBXaGVuIG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgdHJ5IGJsb2NrLCB0aGUgY29udHJvbAoraXMgdHJhbnNmZXJyZWQgdG8gdGhlIGZpbmFsbHkgY2xhdXNlLCBpZiBwcmVzZW50LiAgQWZ0ZXIgaXRzIGV4ZWN1dGlvbiwgdGhlCitzY3JpcHQgY29udGludWVzIHdpdGggdGhlIGxpbmUgZm9sbG93aW5nIHRoZSAiOmVuZHRyeSIuCisgICBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgdHJ5IGJsb2NrLCB0aGUgcmVtYWluaW5nCitsaW5lcyBpbiB0aGUgdHJ5IGJsb2NrIGFyZSBza2lwcGVkLiAgVGhlIGV4Y2VwdGlvbiBpcyBtYXRjaGVkIGFnYWluc3QgdGhlCitwYXR0ZXJucyBzcGVjaWZpZWQgYXMgYXJndW1lbnRzIHRvIHRoZSAiOmNhdGNoIiBjb21tYW5kcy4gIFRoZSBjYXRjaCBjbGF1c2UKK2FmdGVyIHRoZSBmaXJzdCBtYXRjaGluZyAiOmNhdGNoIiBpcyB0YWtlbiwgb3RoZXIgY2F0Y2ggY2xhdXNlcyBhcmUgbm90CitleGVjdXRlZC4gIFRoZSBjYXRjaCBjbGF1c2UgZW5kcyB3aGVuIHRoZSBuZXh0ICI6Y2F0Y2giLCAiOmZpbmFsbHkiLCBvcgorIjplbmR0cnkiIGNvbW1hbmQgaXMgcmVhY2hlZCAtIHdoYXRldmVyIGlzIGZpcnN0LiAgVGhlbiwgdGhlIGZpbmFsbHkgY2xhdXNlCisoaWYgcHJlc2VudCkgaXMgZXhlY3V0ZWQuICBXaGVuIHRoZSAiOmVuZHRyeSIgaXMgcmVhY2hlZCwgdGhlIHNjcmlwdCBleGVjdXRpb24KK2NvbnRpbnVlcyBpbiB0aGUgZm9sbG93aW5nIGxpbmUgYXMgdXN1YWwuCisgICBXaGVuIGFuIGV4Y2VwdGlvbiB0aGF0IGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIGJ5IHRoZQorIjpjYXRjaCIgY29tbWFuZHMgaXMgdGhyb3duIGluIHRoZSB0cnkgYmxvY2ssIHRoZSBleGNlcHRpb24gaXMgbm90IGNhdWdodCBieQordGhhdCB0cnkgY29uZGl0aW9uYWwgYW5kIG5vbmUgb2YgdGhlIGNhdGNoIGNsYXVzZXMgaXMgZXhlY3V0ZWQuICBPbmx5IHRoZQorZmluYWxseSBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIHRha2VuLiAgVGhlIGV4Y2VwdGlvbiBwZW5kcyBkdXJpbmcgZXhlY3V0aW9uIG9mCit0aGUgZmluYWxseSBjbGF1c2UuICBJdCBpcyByZXN1bWVkIGF0IHRoZSAiOmVuZHRyeSIsIHNvIHRoYXQgY29tbWFuZHMgYWZ0ZXIKK3RoZSAiOmVuZHRyeSIgYXJlIG5vdCBleGVjdXRlZCBhbmQgdGhlIGV4Y2VwdGlvbiBtaWdodCBiZSBjYXVnaHQgZWxzZXdoZXJlLAorc2VlIHx0cnktbmVzdGluZ3wuCisgICBXaGVuIGR1cmluZyBleGVjdXRpb24gb2YgYSBjYXRjaCBjbGF1c2UgYW5vdGhlciBleGNlcHRpb24gaXMgdGhyb3duLCB0aGUKK3JlbWFpbmluZyBsaW5lcyBpbiB0aGF0IGNhdGNoIGNsYXVzZSBhcmUgbm90IGV4ZWN1dGVkLiAgVGhlIG5ldyBleGNlcHRpb24gaXMKK25vdCBtYXRjaGVkIGFnYWluc3QgdGhlIHBhdHRlcm5zIGluIGFueSBvZiB0aGUgIjpjYXRjaCIgY29tbWFuZHMgb2YgdGhlIHNhbWUKK3RyeSBjb25kaXRpb25hbCBhbmQgbm9uZSBvZiBpdHMgY2F0Y2ggY2xhdXNlcyBpcyB0YWtlbi4gIElmIHRoZXJlIGlzLCBob3dldmVyLAorYSBmaW5hbGx5IGNsYXVzZSwgaXQgaXMgZXhlY3V0ZWQsIGFuZCB0aGUgZXhjZXB0aW9uIHBlbmRzIGR1cmluZyBpdHMKK2V4ZWN1dGlvbi4gIFRoZSBjb21tYW5kcyBmb2xsb3dpbmcgdGhlICI6ZW5kdHJ5IiBhcmUgbm90IGV4ZWN1dGVkLiAgVGhlIG5ldworZXhjZXB0aW9uIG1pZ2h0LCBob3dldmVyLCBiZSBjYXVnaHQgZWxzZXdoZXJlLCBzZWUgfHRyeS1uZXN0aW5nfC4KKyAgIFdoZW4gZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgZmluYWxseSBjbGF1c2UgKGlmIHByZXNlbnQpIGFuIGV4Y2VwdGlvbiBpcwordGhyb3duLCB0aGUgcmVtYWluaW5nIGxpbmVzIGluIHRoZSBmaW5hbGx5IGNsYXVzZSBhcmUgc2tpcHBlZC4gIElmIHRoZSBmaW5hbGx5CitjbGF1c2UgaGFzIGJlZW4gdGFrZW4gYmVjYXVzZSBvZiBhbiBleGNlcHRpb24gZnJvbSB0aGUgdHJ5IGJsb2NrIG9yIG9uZSBvZiB0aGUKK2NhdGNoIGNsYXVzZXMsIHRoZSBvcmlnaW5hbCAocGVuZGluZykgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZC4gIFRoZSBjb21tYW5kcworZm9sbG93aW5nIHRoZSAiOmVuZHRyeSIgYXJlIG5vdCBleGVjdXRlZCwgYW5kIHRoZSBleGNlcHRpb24gZnJvbSB0aGUgZmluYWxseQorY2xhdXNlIGlzIHByb3BhZ2F0ZWQgYW5kIGNhbiBiZSBjYXVnaHQgZWxzZXdoZXJlLCBzZWUgfHRyeS1uZXN0aW5nfC4KKworVGhlIGZpbmFsbHkgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQsIHdoZW4gYSAiOmJyZWFrIiBvciAiOmNvbnRpbnVlIiBmb3IKK2EgIjp3aGlsZSIgbG9vcCBlbmNsb3NpbmcgdGhlIGNvbXBsZXRlIHRyeSBjb25kaXRpb25hbCBpcyBleGVjdXRlZCBmcm9tIHRoZQordHJ5IGJsb2NrIG9yIGEgY2F0Y2ggY2xhdXNlLiAgT3Igd2hlbiBhICI6cmV0dXJuIiBvciAiOmZpbmlzaCIgaXMgZXhlY3V0ZWQKK2Zyb20gdGhlIHRyeSBibG9jayBvciBhIGNhdGNoIGNsYXVzZSBvZiBhIHRyeSBjb25kaXRpb25hbCBpbiBhIGZ1bmN0aW9uIG9yCitzb3VyY2VkIHNjcmlwdCwgcmVzcGVjdGl2ZWx5LiAgVGhlICI6YnJlYWsiLCAiOmNvbnRpbnVlIiwgIjpyZXR1cm4iLCBvcgorIjpmaW5pc2giIHBlbmRzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGZpbmFsbHkgY2xhdXNlIGFuZCBpcyByZXN1bWVkIHdoZW4gdGhlCisiOmVuZHRyeSIgaXMgcmVhY2hlZC4gIEl0IGlzLCBob3dldmVyLCBkaXNjYXJkZWQgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duCitmcm9tIHRoZSBmaW5hbGx5IGNsYXVzZS4KKyAgIFdoZW4gYSAiOmJyZWFrIiBvciAiOmNvbnRpbnVlIiBmb3IgYSAiOndoaWxlIiBsb29wIGVuY2xvc2luZyB0aGUgY29tcGxldGUKK3RyeSBjb25kaXRpb25hbCBvciB3aGVuIGEgIjpyZXR1cm4iIG9yICI6ZmluaXNoIiBpcyBlbmNvdW50ZXJlZCBpbiB0aGUgZmluYWxseQorY2xhdXNlLCB0aGUgcmVzdCBvZiB0aGUgZmluYWxseSBjbGF1c2UgaXMgc2tpcHBlZCwgYW5kIHRoZSAiOmJyZWFrIiwKKyI6Y29udGludWUiLCAiOnJldHVybiIgb3IgIjpmaW5pc2giIGlzIGV4ZWN1dGVkIGFzIHVzdWFsLiAgSWYgdGhlIGZpbmFsbHkKK2NsYXVzZSBoYXMgYmVlbiB0YWtlbiBiZWNhdXNlIG9mIGFuIGV4Y2VwdGlvbiBvciBhbiBlYXJsaWVyICI6YnJlYWsiLAorIjpjb250aW51ZSIsICI6cmV0dXJuIiwgb3IgIjpmaW5pc2giIGZyb20gdGhlIHRyeSBibG9jayBvciBhIGNhdGNoIGNsYXVzZSwKK3RoaXMgcGVuZGluZyBleGNlcHRpb24gb3IgY29tbWFuZCBpcyBkaXNjYXJkZWQuCisKK0ZvciBleGFtcGxlcyBzZWUgfHRocm93LWNhdGNofCBhbmQgfHRyeS1maW5hbGx5fC4KKworCitORVNUSU5HCU9GIFRSWSBDT05ESVRJT05BTFMJCQkJKnRyeS1uZXN0aW5nKgorCitUcnkgY29uZGl0aW9uYWxzIGNhbiBiZSBuZXN0ZWQgYXJiaXRyYXJpbHkuICBUaGF0IGlzLCBhIGNvbXBsZXRlIHRyeQorY29uZGl0aW9uYWwgY2FuIGJlIHB1dCBpbnRvIHRoZSB0cnkgYmxvY2ssIGEgY2F0Y2ggY2xhdXNlLCBvciB0aGUgZmluYWxseQorY2xhdXNlIG9mIGFub3RoZXIgdHJ5IGNvbmRpdGlvbmFsLiAgSWYgdGhlIGlubmVyIHRyeSBjb25kaXRpb25hbCBkb2VzIG5vdAorY2F0Y2ggYW4gZXhjZXB0aW9uIHRocm93biBpbiBpdHMgdHJ5IGJsb2NrIG9yIHRocm93cyBhIG5ldyBleGNlcHRpb24gZnJvbSBvbmUKK29mIGl0cyBjYXRjaCBjbGF1c2VzIG9yIGl0cyBmaW5hbGx5IGNsYXVzZSwgdGhlIG91dGVyIHRyeSBjb25kaXRpb25hbCBpcworY2hlY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGFib3ZlLiAgSWYgdGhlIGlubmVyIHRyeSBjb25kaXRpb25hbCBpcyBpbiB0aGUKK3RyeSBibG9jayBvZiB0aGUgb3V0ZXIgdHJ5IGNvbmRpdGlvbmFsLCBpdHMgY2F0Y2ggY2xhdXNlcyBhcmUgY2hlY2tlZCwgYnV0CitvdGhlcndpc2Ugb25seSB0aGUgZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQuICBJdCBkb2VzIG5vdCBtYXR0ZXIgZm9yCituZXN0aW5nLCB3aGV0aGVyIHRoZSBpbm5lciB0cnkgY29uZGl0aW9uYWwgaXMgZGlyZWN0bHkgY29udGFpbmVkIGluIHRoZSBvdXRlcgorb25lLCBvciB3aGV0aGVyIHRoZSBvdXRlciBvbmUgc291cmNlcyBhIHNjcmlwdCBvciBjYWxscyBhIGZ1bmN0aW9uIGNvbnRhaW5pbmcKK3RoZSBpbm5lciB0cnkgY29uZGl0aW9uYWwuCisKK1doZW4gbm9uZSBvZiB0aGUgYWN0aXZlIHRyeSBjb25kaXRpb25hbHMgY2F0Y2hlcyBhbiBleGNlcHRpb24sIGp1c3QgdGhlaXIKK2ZpbmFsbHkgY2xhdXNlcyBhcmUgZXhlY3V0ZWQuICBUaGVyZWFmdGVyLCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcgdGVybWluYXRlcy4KK0FuIGVycm9yIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGluIGNhc2Ugb2YgYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGV4cGxpY2l0bHkKK3Rocm93biBieSBhICI6dGhyb3ciIGNvbW1hbmQuICBGb3IgdW5jYXVnaHQgZXJyb3IgYW5kIGludGVycnVwdCBleGNlcHRpb25zCitpbXBsaWNpdGx5IHJhaXNlZCBieSBWaW0sIHRoZSBlcnJvciBtZXNzYWdlKHMpIG9yIGludGVycnVwdCBtZXNzYWdlIGFyZSBzaG93bgorYXMgdXN1YWwuCisKK0ZvciBleGFtcGxlcyBzZWUgfHRocm93LWNhdGNofC4KKworCitFWEFNSU5JTkcgRVhDRVBUSU9OIEhBTkRMSU5HIENPREUJCQkqZXhjZXB0LWV4YW1pbmUqCisKK0V4Y2VwdGlvbiBoYW5kbGluZyBjb2RlIGNhbiBnZXQgdHJpY2t5LiAgSWYgeW91IGFyZSBpbiBkb3VidCB3aGF0IGhhcHBlbnMsIHNldAorJ3ZlcmJvc2UnIHRvIDEzIG9yIHVzZSB0aGUgIjoxM3ZlcmJvc2UiIGNvbW1hbmQgbW9kaWZpZXIgd2hlbiBzb3VyY2luZyB5b3VyCitzY3JpcHQgZmlsZS4gIFRoZW4geW91IHNlZSB3aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24sIGRpc2NhcmRlZCwgY2F1Z2h0LCBvcgorZmluaXNoZWQuICBXaGVuIHVzaW5nIGEgdmVyYm9zaXR5IGxldmVsIG9mIGF0IGxlYXN0IDE0LCB0aGluZ3MgcGVuZGluZyBpbgorYSBmaW5hbGx5IGNsYXVzZSBhcmUgYWxzbyBzaG93bi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYWxzbyBnaXZlbiBpbiBkZWJ1ZyBtb2RlCisoc2VlIHxkZWJ1Zy1zY3JpcHRzfCkuCisKKworVEhST1dJTkcgQU5EIENBVENISU5HIEVYQ0VQVElPTlMJCQkqdGhyb3ctY2F0Y2gqCisKK1lvdSBjYW4gdGhyb3cgYW55IG51bWJlciBvciBzdHJpbmcgYXMgYW4gZXhjZXB0aW9uLiAgVXNlIHRoZSB8OnRocm93fCBjb21tYW5kCithbmQgcGFzcyB0aGUgdmFsdWUgdG8gYmUgdGhyb3duIGFzIGFyZ3VtZW50OiA+CisJOnRocm93IDQ3MTEKKwk6dGhyb3cgInN0cmluZyIKKzwJCQkJCQkJKnRocm93LWV4cHJlc3Npb24qCitZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiBleHByZXNzaW9uIGFyZ3VtZW50LiAgVGhlIGV4cHJlc3Npb24gaXMgdGhlbiBldmFsdWF0ZWQKK2ZpcnN0LCBhbmQgdGhlIHJlc3VsdCBpcyB0aHJvd246ID4KKwk6dGhyb3cgNDcwNSArIHN0cmxlbigic3RyaW5nIikKKwk6dGhyb3cgc3RycGFydCgic3RyaW5ncyIsIDAsIDYpCisKK0FuIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gZHVyaW5nIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50IG9mIHRoZSAiOnRocm93IgorY29tbWFuZC4gIFVubGVzcyBpdCBpcyBjYXVnaHQgdGhlcmUsIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gaXMgYWJhbmRvbmVkLgorVGhlICI6dGhyb3ciIGNvbW1hbmQgdGhlbiBkb2VzIG5vdCB0aHJvdyBhIG5ldyBleGNlcHRpb24uCisgICBFeGFtcGxlOiA+CisKKwk6ZnVuY3Rpb24hIEZvbyhhcmcpCisJOiAgdHJ5CisJOiAgICB0aHJvdyBhOmFyZworCTogIGNhdGNoIC9mb28vCisJOiAgZW5kdHJ5CisJOiAgcmV0dXJuIDEKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmZ1bmN0aW9uISBCYXIoKQorCTogIGVjaG8gImluIEJhciIKKwk6ICByZXR1cm4gNDcxMAorCTplbmRmdW5jdGlvbgorCToKKwk6dGhyb3cgRm9vKCJhcnJnaCIpICsgQmFyKCkKKworVGhpcyB0aHJvd3MgImFycmdoIiwgYW5kICJpbiBCYXIiIGlzIG5vdCBkaXNwbGF5ZWQgc2luY2UgQmFyKCkgaXMgbm90CitleGVjdXRlZC4gPgorCTp0aHJvdyBGb28oImZvbyIpICsgQmFyKCkKK2hvd2V2ZXIgZGlzcGxheXMgImluIEJhciIgYW5kIHRocm93cyA0NzExLgorCitBbnkgb3RoZXIgY29tbWFuZCB0aGF0IHRha2VzIGFuIGV4cHJlc3Npb24gYXMgYXJndW1lbnQgbWlnaHQgYWxzbyBiZQorYWJhbmRvbmVkIGJ5IGFuICh1bmNhdWdodCkgZXhjZXB0aW9uIGR1cmluZyB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uLiAgVGhlCitleGNlcHRpb24gaXMgdGhlbiBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIgb2YgdGhlIGNvbW1hbmQuCisgICBFeGFtcGxlOiA+CisKKwk6aWYgRm9vKCJhcnJnaCIpCisJOiAgZWNobyAidGhlbiIKKwk6ZWxzZQorCTogIGVjaG8gImVsc2UiCisJOmVuZGlmCisKK0hlcmUgbmVpdGhlciBvZiAidGhlbiIgb3IgImVsc2UiIGlzIGRpc3BsYXllZC4KKworCQkJCQkJCSpjYXRjaC1vcmRlcioKK0V4Y2VwdGlvbnMgY2FuIGJlIGNhdWdodCBieSBhIHRyeSBjb25kaXRpb25hbCB3aXRoIG9uZSBvciBtb3JlIHw6Y2F0Y2h8Citjb21tYW5kcywgc2VlIHx0cnktY29uZGl0aW9uYWxzfC4gICBUaGUgdmFsdWVzIHRvIGJlIGNhdWdodCBieSBlYWNoICI6Y2F0Y2giCitjb21tYW5kIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBwYXR0ZXJuIGFyZ3VtZW50LiAgVGhlIHN1YnNlcXVlbnQgY2F0Y2ggY2xhdXNlCitnZXRzIGV4ZWN1dGVkIHdoZW4gYSBtYXRjaGluZyBleGNlcHRpb24gaXMgY2F1Z2h0LgorICAgRXhhbXBsZTogPgorCisJOmZ1bmN0aW9uISBGb28odmFsdWUpCisJOiAgdHJ5CisJOiAgICB0aHJvdyBhOnZhbHVlCisJOiAgY2F0Y2ggL15cZFwrJC8KKwk6ICAgIGVjaG8gIk51bWJlciB0aHJvd24iCisJOiAgY2F0Y2ggLy4qLworCTogICAgZWNobyAiU3RyaW5nIHRocm93biIKKwk6ICBlbmR0cnkKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmNhbGwgRm9vKDB4MTI2NykKKwk6Y2FsbCBGb28oJ3N0cmluZycpCisKK1RoZSBmaXJzdCBjYWxsIHRvIEZvbygpIGRpc3BsYXlzICJOdW1iZXIgdGhyb3duIiwgdGhlIHNlY29uZCAiU3RyaW5nIHRocm93biIuCitBbiBleGNlcHRpb24gaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSAiOmNhdGNoIiBjb21tYW5kcyBpbiB0aGUgb3JkZXIgdGhleSBhcmUKK3NwZWNpZmllZC4gIE9ubHkgdGhlIGZpcnN0IG1hdGNoIGNvdW50cy4gIFNvIHlvdSBzaG91bGQgcGxhY2UgdGhlIG1vcmUKK3NwZWNpZmljICI6Y2F0Y2giIGZpcnN0LiAgVGhlIGZvbGxvd2luZyBvcmRlciBkb2VzIG5vdCBtYWtlIHNlbnNlOiA+CisKKwk6ICBjYXRjaCAvLiovCisJOiAgICBlY2hvICJTdHJpbmcgdGhyb3duIgorCTogIGNhdGNoIC9eXGRcKyQvCisJOiAgICBlY2hvICJOdW1iZXIgdGhyb3duIgorCitUaGUgZmlyc3QgIjpjYXRjaCIgaGVyZSBtYXRjaGVzIGFsd2F5cywgc28gdGhhdCB0aGUgc2Vjb25kIGNhdGNoIGNsYXVzZSBpcworbmV2ZXIgdGFrZW4uCisKKwkJCQkJCQkqdGhyb3ctdmFyaWFibGVzKgorSWYgeW91IGNhdGNoIGFuIGV4Y2VwdGlvbiBieSBhIGdlbmVyYWwgcGF0dGVybiwgeW91IG1heSBhY2Nlc3MgdGhlIGV4YWN0IHZhbHVlCitpbiB0aGUgdmFyaWFibGUgfHY6ZXhjZXB0aW9ufDogPgorCisJOiAgY2F0Y2ggL15cZFwrJC8KKwk6ICAgIGVjaG8gIk51bWJlciB0aHJvd24uICBWYWx1ZSBpcyIgdjpleGNlcHRpb24KKworWW91IG1heSBhbHNvIGJlIGludGVyZXN0ZWQgd2hlcmUgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uICBUaGlzIGlzIHN0b3JlZCBpbgorfHY6dGhyb3dwb2ludHwuICBOb3RlIHRoYXQgInY6ZXhjZXB0aW9uIiBhbmQgInY6dGhyb3dwb2ludCIgYXJlIHZhbGlkIGZvciB0aGUKK2V4Y2VwdGlvbiBtb3N0IHJlY2VudGx5IGNhdWdodCBhcyBsb25nIGl0IGlzIG5vdCBmaW5pc2hlZC4KKyAgIEV4YW1wbGU6ID4KKworCTpmdW5jdGlvbiEgQ2F1Z2h0KCkKKwk6ICBpZiB2OmV4Y2VwdGlvbiAhPSAiIgorCTogICAgZWNobyAnQ2F1Z2h0ICInIC4gdjpleGNlcHRpb24gLiAnIiBpbiAnIC4gdjp0aHJvd3BvaW50CisJOiAgZWxzZQorCTogICAgZWNobyAnTm90aGluZyBjYXVnaHQnCisJOiAgZW5kaWYKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmZ1bmN0aW9uISBGb28oKQorCTogIHRyeQorCTogICAgdHJ5CisJOiAgICAgIHRyeQorCToJIHRocm93IDQ3MTEKKwk6ICAgICAgZmluYWxseQorCToJIGNhbGwgQ2F1Z2h0KCkKKwk6ICAgICAgZW5kdHJ5CisJOiAgICBjYXRjaCAvLiovCisJOiAgICAgIGNhbGwgQ2F1Z2h0KCkKKwk6ICAgICAgdGhyb3cgIm9vcHMiCisJOiAgICBlbmR0cnkKKwk6ICBjYXRjaCAvLiovCisJOiAgICBjYWxsIENhdWdodCgpCisJOiAgZmluYWxseQorCTogICAgY2FsbCBDYXVnaHQoKQorCTogIGVuZHRyeQorCTplbmRmdW5jdGlvbgorCToKKwk6Y2FsbCBGb28oKQorCitUaGlzIGRpc3BsYXlzID4KKworCU5vdGhpbmcgY2F1Z2h0CisJQ2F1Z2h0ICI0NzExIiBpbiBmdW5jdGlvbiBGb28sIGxpbmUgNAorCUNhdWdodCAib29wcyIgaW4gZnVuY3Rpb24gRm9vLCBsaW5lIDEwCisJTm90aGluZyBjYXVnaHQKKworQSBwcmFjdGljYWwgZXhhbXBsZTogIFRoZSBmb2xsb3dpbmcgY29tbWFuZCAiOkxpbmVOdW1iZXIiIGRpc3BsYXlzIHRoZSBsaW5lCitudW1iZXIgaW4gdGhlIHNjcmlwdCBvciBmdW5jdGlvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkOiA+CisKKwk6ZnVuY3Rpb24hIExpbmVOdW1iZXIoKQorCTogICAgcmV0dXJuIHN1YnN0aXR1dGUodjp0aHJvd3BvaW50LCAnLipcRFwoXGRcK1wpLionLCAnXDEnLCAiIikKKwk6ZW5kZnVuY3Rpb24KKwk6Y29tbWFuZCEgTGluZU51bWJlciB0cnkgfCB0aHJvdyAiIiB8IGNhdGNoIHwgZWNobyBMaW5lTnVtYmVyKCkgfCBlbmR0cnkKKzwKKwkJCQkJCQkqdHJ5LW5lc3RlZCoKK0FuIGV4Y2VwdGlvbiB0aGF0IGlzIG5vdCBjYXVnaHQgYnkgYSB0cnkgY29uZGl0aW9uYWwgY2FuIGJlIGNhdWdodCBieQorYSBzdXJyb3VuZGluZyB0cnkgY29uZGl0aW9uYWw6ID4KKworCTp0cnkKKwk6ICB0cnkKKwk6ICAgIHRocm93ICJmb28iCisJOiAgY2F0Y2ggL2Zvb2Jhci8KKwk6ICAgIGVjaG8gImZvb2JhciIKKwk6ICBmaW5hbGx5CisJOiAgICBlY2hvICJpbm5lciBmaW5hbGx5IgorCTogIGVuZHRyeQorCTpjYXRjaCAvZm9vLworCTogIGVjaG8gImZvbyIKKwk6ZW5kdHJ5CisKK1RoZSBpbm5lciB0cnkgY29uZGl0aW9uYWwgZG9lcyBub3QgY2F0Y2ggdGhlIGV4Y2VwdGlvbiwganVzdCBpdHMgZmluYWxseQorY2xhdXNlIGlzIGV4ZWN1dGVkLiAgVGhlIGV4Y2VwdGlvbiBpcyB0aGVuIGNhdWdodCBieSB0aGUgb3V0ZXIgdHJ5Citjb25kaXRpb25hbC4gIFRoZSBleGFtcGxlIGRpc3BsYXlzICJpbm5lciBmaW5hbGx5IiBhbmQgdGhlbiAiZm9vIi4KKworCQkJCQkJCSp0aHJvdy1mcm9tLWNhdGNoKgorWW91IGNhbiBjYXRjaCBhbiBleGNlcHRpb24gYW5kIHRocm93IGEgbmV3IG9uZSB0byBiZSBjYXVnaHQgZWxzZXdoZXJlIGZyb20gdGhlCitjYXRjaCBjbGF1c2U6ID4KKworCTpmdW5jdGlvbiEgRm9vKCkKKwk6ICB0aHJvdyAiZm9vIgorCTplbmRmdW5jdGlvbgorCToKKwk6ZnVuY3Rpb24hIEJhcigpCisJOiAgdHJ5CisJOiAgICBjYWxsIEZvbygpCisJOiAgY2F0Y2ggL2Zvby8KKwk6ICAgIGVjaG8gIkNhdWdodCBmb28sIHRocm93IGJhciIKKwk6ICAgIHRocm93ICJiYXIiCisJOiAgZW5kdHJ5CisJOmVuZGZ1bmN0aW9uCisJOgorCTp0cnkKKwk6ICBjYWxsIEJhcigpCisJOmNhdGNoIC8uKi8KKwk6ICBlY2hvICJDYXVnaHQiIHY6ZXhjZXB0aW9uCisJOmVuZHRyeQorCitUaGlzIGRpc3BsYXlzICJDYXVnaHQgZm9vLCB0aHJvdyBiYXIiIGFuZCB0aGVuICJDYXVnaHQgYmFyIi4KKworCQkJCQkJCSpyZXRocm93KgorVGhlcmUgaXMgbm8gcmVhbCByZXRocm93IGluIHRoZSBWaW0gc2NyaXB0IGxhbmd1YWdlLCBidXQgeW91IG1heSB0aHJvdworInY6ZXhjZXB0aW9uIiBpbnN0ZWFkOiA+CisKKwk6ZnVuY3Rpb24hIEJhcigpCisJOiAgdHJ5CisJOiAgICBjYWxsIEZvbygpCisJOiAgY2F0Y2ggLy4qLworCTogICAgZWNobyAiUmV0aHJvdyIgdjpleGNlcHRpb24KKwk6ICAgIHRocm93IHY6ZXhjZXB0aW9uCisJOiAgZW5kdHJ5CisJOmVuZGZ1bmN0aW9uCis8CQkJCQkJCSp0cnktZWNob2VycioKK05vdGUgdGhhdCB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB0byAicmV0aHJvdyIgVmltIGVycm9yIG9yIGludGVycnVwdAorZXhjZXB0aW9ucywgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gZmFrZSBWaW0gaW50ZXJuYWwgZXhjZXB0aW9ucy4KK1RyeWluZyBzbyBjYXVzZXMgYW4gZXJyb3IgZXhjZXB0aW9uLiAgWW91IHNob3VsZCB0aHJvdyB5b3VyIG93biBleGNlcHRpb24KK2Rlbm90aW5nIHRoZSBzaXR1YXRpb24uICBJZiB5b3Ugd2FudCB0byBjYXVzZSBhIFZpbSBlcnJvciBleGNlcHRpb24gY29udGFpbmluZwordGhlIG9yaWdpbmFsIGVycm9yIGV4Y2VwdGlvbiB2YWx1ZSwgeW91IGNhbiB1c2UgdGhlIHw6ZWNob2VycnwgY29tbWFuZDogPgorCisJOnRyeQorCTogIHRyeQorCTogICAgYXNkZgorCTogIGNhdGNoIC8uKi8KKwk6ICAgIGVjaG9lcnIgdjpleGNlcHRpb24KKwk6ICBlbmR0cnkKKwk6Y2F0Y2ggLy4qLworCTogIGVjaG8gdjpleGNlcHRpb24KKwk6ZW5kdHJ5CisKK1RoaXMgY29kZSBkaXNwbGF5cworCisJVmltKGVjaG9lcnIpOlZpbTpFNDkyOiBOb3QgYW4gZWRpdG9yIGNvbW1hbmQ6ICAgYXNkZiB+CisKKworQ0xFQU5VUCBDT0RFCQkJCQkJKnRyeS1maW5hbGx5KgorCitTY3JpcHRzIG9mdGVuIGNoYW5nZSBnbG9iYWwgc2V0dGluZ3MgYW5kIHJlc3RvcmUgdGhlbSBhdCB0aGVpciBlbmQuICBJZiB0aGUKK3VzZXIgaG93ZXZlciBpbnRlcnJ1cHRzIHRoZSBzY3JpcHQgYnkgcHJlc3NpbmcgQ1RSTC1DLCB0aGUgc2V0dGluZ3MgcmVtYWluIGluCithbiBpbmNvbnNpc3RlbnQgc3RhdGUuICBUaGUgc2FtZSBtYXkgaGFwcGVuIHRvIHlvdSBpbiB0aGUgZGV2ZWxvcG1lbnQgcGhhc2Ugb2YKK2Egc2NyaXB0IHdoZW4gYW4gZXJyb3Igb2NjdXJzIG9yIHlvdSBleHBsaWNpdGx5IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRob3V0CitjYXRjaGluZyBpdC4gIFlvdSBjYW4gc29sdmUgdGhlc2UgcHJvYmxlbXMgYnkgdXNpbmcgYSB0cnkgY29uZGl0aW9uYWwgd2l0aAorYSBmaW5hbGx5IGNsYXVzZSBmb3IgcmVzdG9yaW5nIHRoZSBzZXR0aW5ncy4gIEl0cyBleGVjdXRpb24gaXMgZ3VhcmFudGVlZCBvbgorbm9ybWFsIGNvbnRyb2wgZmxvdywgb24gZXJyb3IsIG9uIGFuIGV4cGxpY2l0ICI6dGhyb3ciLCBhbmQgb24gaW50ZXJydXB0LgorKE5vdGUgdGhhdCBlcnJvcnMgYW5kIGludGVycnVwdHMgZnJvbSBpbnNpZGUgdGhlIHRyeSBjb25kaXRpb25hbCBhcmUgY29udmVydGVkCit0byBleGNlcHRpb25zLiAgV2hlbiBub3QgY2F1Z2h0LCB0aGV5IHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGFmdGVyIHRoZSBmaW5hbGx5CitjbGF1c2UgaGFzIGJlZW4gZXhlY3V0ZWQuKQorRXhhbXBsZTogPgorCisJOnRyeQorCTogIGxldCBzOnNhdmVkX3RzID0gJnRzCisJOiAgc2V0IHRzPTE3CisJOgorCTogICIgRG8gdGhlIGhhcmQgd29yayBoZXJlLgorCToKKwk6ZmluYWxseQorCTogIGxldCAmdHMgPSBzOnNhdmVkX3RzCisJOiAgdW5sZXQgczpzYXZlZF90cworCTplbmR0cnkKKworVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgbG9jYWxseSB3aGVuZXZlciBhIGZ1bmN0aW9uIG9yIHBhcnQgb2YgYSBzY3JpcHQKK2NoYW5nZXMgZ2xvYmFsIHNldHRpbmdzIHdoaWNoIG5lZWQgdG8gYmUgcmVzdG9yZWQgb24gZmFpbHVyZSBvciBub3JtYWwgZXhpdCBvZgordGhhdCBmdW5jdGlvbiBvciBzY3JpcHQgcGFydC4KKworCQkJCQkJCSpicmVhay1maW5hbGx5KgorQ2xlYW51cCBjb2RlIHdvcmtzIGFsc28gd2hlbiB0aGUgdHJ5IGJsb2NrIG9yIGEgY2F0Y2ggY2xhdXNlIGlzIGxlZnQgYnkKK2EgIjpjb250aW51ZSIsICI6YnJlYWsiLCAiOnJldHVybiIsIG9yICI6ZmluaXNoIi4KKyAgIEV4YW1wbGU6ID4KKworCTpsZXQgZmlyc3QgPSAxCisJOndoaWxlIDEKKwk6ICB0cnkKKwk6ICAgIGlmIGZpcnN0CisJOiAgICAgIGVjaG8gImZpcnN0IgorCTogICAgICBsZXQgZmlyc3QgPSAwCisJOiAgICAgIGNvbnRpbnVlCisJOiAgICBlbHNlCisJOiAgICAgIHRocm93ICJzZWNvbmQiCisJOiAgICBlbmRpZgorCTogIGNhdGNoIC8uKi8KKwk6ICAgIGVjaG8gdjpleGNlcHRpb24KKwk6ICAgIGJyZWFrCisJOiAgZmluYWxseQorCTogICAgZWNobyAiY2xlYW51cCIKKwk6ICBlbmR0cnkKKwk6ICBlY2hvICJzdGlsbCBpbiB3aGlsZSIKKwk6ZW5kd2hpbGUKKwk6ZWNobyAiZW5kIgorCitUaGlzIGRpc3BsYXlzICJmaXJzdCIsICJjbGVhbnVwIiwgInNlY29uZCIsICJjbGVhbnVwIiwgYW5kICJlbmQiLiA+CisKKwk6ZnVuY3Rpb24hIEZvbygpCisJOiAgdHJ5CisJOiAgICByZXR1cm4gNDcxMQorCTogIGZpbmFsbHkKKwk6ICAgIGVjaG8gImNsZWFudXBcbiIKKwk6ICBlbmR0cnkKKwk6ICBlY2hvICJGb28gc3RpbGwgYWN0aXZlIgorCTplbmRmdW5jdGlvbgorCToKKwk6ZWNobyBGb28oKSAicmV0dXJuZWQgYnkgRm9vIgorCitUaGlzIGRpc3BsYXlzICJjbGVhbnVwIiBhbmQgIjQ3MTEgcmV0dXJuZWQgYnkgRm9vIi4gIFlvdSBkb24ndCBuZWVkIHRvIGFkZCBhbgorZXh0cmEgIjpyZXR1cm4iIGluIHRoZSBmaW5hbGx5IGNsYXVzZS4gIChBYm92ZSBhbGwsIHRoaXMgd291bGQgb3ZlcnJpZGUgdGhlCityZXR1cm4gdmFsdWUuKQorCisJCQkJCQkJKmV4Y2VwdC1mcm9tLWZpbmFsbHkqCitVc2luZyBlaXRoZXIgb2YgIjpjb250aW51ZSIsICI6YnJlYWsiLCAiOnJldHVybiIsICI6ZmluaXNoIiwgb3IgIjp0aHJvdyIgaW4KK2EgZmluYWxseSBjbGF1c2UgaXMgcG9zc2libGUsIGJ1dCBub3QgcmVjb21tZW5kZWQgc2luY2UgaXQgYWJhbmRvbnMgdGhlCitjbGVhbnVwIGFjdGlvbnMgZm9yIHRoZSB0cnkgY29uZGl0aW9uYWwuICBCdXQsIG9mIGNvdXJzZSwgaW50ZXJydXB0IGFuZCBlcnJvcgorZXhjZXB0aW9ucyBtaWdodCBnZXQgcmFpc2VkIGZyb20gYSBmaW5hbGx5IGNsYXVzZS4KKyAgIEV4YW1wbGUgd2hlcmUgYW4gZXJyb3IgaW4gdGhlIGZpbmFsbHkgY2xhdXNlIHN0b3BzIGFuIGludGVycnVwdCBmcm9tCit3b3JraW5nIGNvcnJlY3RseTogPgorCisJOnRyeQorCTogIHRyeQorCTogICAgZWNobyAiUHJlc3MgQ1RSTC1DIGZvciBpbnRlcnJ1cHQiCisJOiAgICB3aGlsZSAxCisJOiAgICBlbmR3aGlsZQorCTogIGZpbmFsbHkKKwk6ICAgIHVubGV0IG5vdmFyCisJOiAgZW5kdHJ5CisJOmNhdGNoIC9ub3Zhci8KKwk6ZW5kdHJ5CisJOmVjaG8gIlNjcmlwdCBzdGlsbCBydW5uaW5nIgorCTpzbGVlcCAxCisKK0lmIHlvdSBuZWVkIHRvIHB1dCBjb21tYW5kcyB0aGF0IGNvdWxkIGZhaWwgaW50byBhIGZpbmFsbHkgY2xhdXNlLCB5b3Ugc2hvdWxkCit0aGluayBhYm91dCBjYXRjaGluZyBvciBpZ25vcmluZyB0aGUgZXJyb3JzIGluIHRoZXNlIGNvbW1hbmRzLCBzZWUKK3xjYXRjaC1lcnJvcnN8IGFuZCB8aWdub3JlLWVycm9yc3wuCisKKworQ0FUQ0hJTkcgRVJST1JTCQkJCQkJKmNhdGNoLWVycm9ycyoKKworSWYgeW91IHdhbnQgdG8gY2F0Y2ggc3BlY2lmaWMgZXJyb3JzLCB5b3UganVzdCBoYXZlIHRvIHB1dCB0aGUgY29kZSB0byBiZQord2F0Y2hlZCBpbiBhIHRyeSBibG9jayBhbmQgYWRkIGEgY2F0Y2ggY2xhdXNlIGZvciB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZQorcHJlc2VuY2Ugb2YgdGhlIHRyeSBjb25kaXRpb25hbCBjYXVzZXMgYWxsIGVycm9ycyB0byBiZSBjb252ZXJ0ZWQgdG8gYW4KK2V4Y2VwdGlvbi4gIE5vIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGFuZCB8djplcnJtc2d8IGlzIG5vdCBzZXQgdGhlbi4gIFRvIGZpbmQKK3RoZSByaWdodCBwYXR0ZXJuIGZvciB0aGUgIjpjYXRjaCIgY29tbWFuZCwgeW91IGhhdmUgdG8ga25vdyBob3cgdGhlIGZvcm1hdCBvZgordGhlIGVycm9yIGV4Y2VwdGlvbiBpcy4KKyAgIEVycm9yIGV4Y2VwdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDogPgorCisJVmltKHtjbWRuYW1lfSk6e2Vycm1zZ30KK29yID4KKwlWaW06e2Vycm1zZ30KKwore2NtZG5hbWV9IGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRoYXQgZmFpbGVkOyB0aGUgc2Vjb25kIGZvcm0gaXMgdXNlZCB3aGVuCit0aGUgY29tbWFuZCBuYW1lIGlzIG5vdCBrbm93bi4gIHtlcnJtc2d9IGlzIHRoZSBlcnJvciBtZXNzYWdlIHVzdWFsbHkgcHJvZHVjZWQKK3doZW4gdGhlIGVycm9yIG9jY3VycyBvdXRzaWRlIHRyeSBjb25kaXRpb25hbHMuICBJdCBhbHdheXMgYmVnaW5zIHdpdGgKK2EgY2FwaXRhbCAiRSIsIGZvbGxvd2VkIGJ5IGEgdHdvIG9yIHRocmVlLWRpZ2l0IGVycm9yIG51bWJlciwgYSBjb2xvbiwgYW5kCithIHNwYWNlLgorCitFeGFtcGxlczoKKworVGhlIGNvbW1hbmQgPgorCTp1bmxldCBub3Zhcgorbm9ybWFsbHkgcHJvZHVjZXMgdGhlIGVycm9yIG1lc3NhZ2UgPgorCUUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6ICJub3ZhciIKK3doaWNoIGlzIGNvbnZlcnRlZCBpbnNpZGUgdHJ5IGNvbmRpdGlvbmFscyB0byBhbiBleGNlcHRpb24gPgorCVZpbSh1bmxldCk6RTEwODogTm8gc3VjaCB2YXJpYWJsZTogIm5vdmFyIgorCitUaGUgY29tbWFuZCA+CisJOmR3aW0KK25vcm1hbGx5IHByb2R1Y2VzIHRoZSBlcnJvciBtZXNzYWdlID4KKwlFNDkyOiBOb3QgYW4gZWRpdG9yIGNvbW1hbmQ6IGR3aW0KK3doaWNoIGlzIGNvbnZlcnRlZCBpbnNpZGUgdHJ5IGNvbmRpdGlvbmFscyB0byBhbiBleGNlcHRpb24gPgorCVZpbTpFNDkyOiBOb3QgYW4gZWRpdG9yIGNvbW1hbmQ6IGR3aW0KKworWW91IGNhbiBjYXRjaCBhbGwgIjp1bmxldCIgZXJyb3JzIGJ5IGEgPgorCTpjYXRjaCAvXlZpbSh1bmxldCk6Lworb3IgYWxsIGVycm9ycyBmb3IgbWlzc3BlbGxlZCBjb21tYW5kIG5hbWVzIGJ5IGEgPgorCTpjYXRjaCAvXlZpbTpFNDkyOi8KKworU29tZSBlcnJvciBtZXNzYWdlcyBtYXkgYmUgcHJvZHVjZWQgYnkgZGlmZmVyZW50IGNvbW1hbmRzOiA+CisJOmZ1bmN0aW9uIG5vZnVuYworYW5kID4KKwk6ZGVsZnVuY3Rpb24gbm9mdW5jCitib3RoIHByb2R1Y2UgdGhlIGVycm9yIG1lc3NhZ2UgPgorCUUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogbm9mdW5jCit3aGljaCBpcyBjb252ZXJ0ZWQgaW5zaWRlIHRyeSBjb25kaXRpb25hbHMgdG8gYW4gZXhjZXB0aW9uID4KKwlWaW0oZnVuY3Rpb24pOkUxMjg6IEZ1bmN0aW9uIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgY2FwaXRhbDogbm9mdW5jCitvciA+CisJVmltKGRlbGZ1bmN0aW9uKTpFMTI4OiBGdW5jdGlvbiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWw6IG5vZnVuYworcmVzcGVjdGl2ZWx5LiAgWW91IGNhbiBjYXRjaCB0aGUgZXJyb3IgYnkgaXRzIG51bWJlciBpbmRlcGVuZGVudGx5IG9uIHRoZQorY29tbWFuZCB0aGF0IGNhdXNlZCBpdCBpZiB5b3UgdXNlIHRoZSBmb2xsb3dpbmcgcGF0dGVybjogPgorCTpjYXRjaCAvXlZpbShcYVwrKTpFMTI4Oi8KKworU29tZSBjb21tYW5kcyBsaWtlID4KKwk6bGV0IHggPSBub3ZhcgorcHJvZHVjZSBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcywgaGVyZTogPgorCUUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogbm92YXIKKwlFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogIG5vdmFyCitPbmx5IHRoZSBmaXJzdCBpcyB1c2VkIGZvciB0aGUgZXhjZXB0aW9uIHZhbHVlLCBzaW5jZSBpdCBpcyB0aGUgbW9zdCBzcGVjaWZpYworb25lIChzZWUgfGV4Y2VwdC1zZXZlcmFsLWVycm9yc3wpLiAgU28geW91IGNhbiBjYXRjaCBpdCBieSA+CisJOmNhdGNoIC9eVmltKFxhXCspOkUxMjE6LworCitZb3UgY2FuIGNhdGNoIGFsbCBlcnJvcnMgcmVsYXRlZCB0byB0aGUgbmFtZSAibm9mdW5jIiBieSA+CisJOmNhdGNoIC9cPG5vZnVuY1w+LworCitZb3UgY2FuIGNhdGNoIGFsbCBWaW0gZXJyb3JzIGluIHRoZSAiOndyaXRlIiBhbmQgIjpyZWFkIiBjb21tYW5kcyBieSA+CisJOmNhdGNoIC9eVmltKFwod3JpdGVcfHJlYWRcKSk6RVxkXCs6LworCitZb3UgY2FuIGNhdGNoIGFsbCBWaW0gZXJyb3JzIGJ5IHRoZSBwYXR0ZXJuID4KKwk6Y2F0Y2ggL15WaW1cKChcYVwrKVwpXD06RVxkXCs6LworPAorCQkJCQkJCSpjYXRjaC10ZXh0KgorTk9URTogWW91IHNob3VsZCBuZXZlciBjYXRjaCB0aGUgZXJyb3IgbWVzc2FnZSB0ZXh0IGl0c2VsZjogPgorCTpjYXRjaCAvTm8gc3VjaCB2YXJpYWJsZS8KK29ubHkgd29ya3MgaW4gdGhlIGVuZ2xpc2ggbG9jYWxlLCBidXQgbm90IHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkCithIGRpZmZlcmVudCBsYW5ndWFnZSBieSB0aGUgfDpsYW5ndWFnZXwgY29tbWFuZC4gIEl0IGlzIGhvd2V2ZXIgaGVscGZ1bCB0bworY2l0ZSB0aGUgbWVzc2FnZSB0ZXh0IGluIGEgY29tbWVudDogPgorCTpjYXRjaCAvXlZpbShcYVwrKTpFMTA4Oi8gICAiIE5vIHN1Y2ggdmFyaWFibGUKKworCitJR05PUklORyBFUlJPUlMJCQkJCQkqaWdub3JlLWVycm9ycyoKKworWW91IGNhbiBpZ25vcmUgZXJyb3JzIGluIGEgc3BlY2lmaWMgVmltIGNvbW1hbmQgYnkgY2F0Y2hpbmcgdGhlbSBsb2NhbGx5OiA+CisKKwk6dHJ5CisJOiAgd3JpdGUKKwk6Y2F0Y2gKKwk6ZW5kdHJ5CisKK0J1dCB5b3UgYXJlIHN0cm9uZ2x5IHJlY29tbWVuZGVkIE5PVCB0byB1c2UgdGhpcyBzaW1wbGUgZm9ybSwgc2luY2UgaXQgY291bGQKK2NhdGNoIG1vcmUgdGhhbiB5b3Ugd2FudC4gIFdpdGggdGhlICI6d3JpdGUiIGNvbW1hbmQsIHNvbWUgYXV0b2NvbW1hbmRzIGNvdWxkCitiZSBleGVjdXRlZCBhbmQgY2F1c2UgZXJyb3JzIG5vdCByZWxhdGVkIHRvIHdyaXRpbmcsIGZvciBpbnN0YW5jZTogPgorCisJOmF1IEJ1ZldyaXRlUHJlICogdW5sZXQgbm92YXIKKworVGhlcmUgY291bGQgZXZlbiBiZSBzdWNoIGVycm9ycyB5b3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgYXMgYSBzY3JpcHQKK3dyaXRlcjogYSB1c2VyIG9mIHlvdXIgc2NyaXB0IG1pZ2h0IGhhdmUgZGVmaW5lZCBzdWNoIGF1dG9jb21tYW5kcy4gIFlvdSB3b3VsZAordGhlbiBoaWRlIHRoZSBlcnJvciBmcm9tIHRoZSB1c2VyLgorICAgSXQgaXMgbXVjaCBiZXR0ZXIgdG8gdXNlID4KKworCTp0cnkKKwk6ICB3cml0ZQorCTpjYXRjaCAvXlZpbSh3cml0ZSk6LworCTplbmR0cnkKKword2hpY2ggb25seSBjYXRjaGVzIHJlYWwgd3JpdGUgZXJyb3JzLiAgU28gY2F0Y2ggb25seSB3aGF0IHlvdSdkIGxpa2UgdG8gaWdub3JlCitpbnRlbnRpb25hbGx5LgorCitGb3IgYSBzaW5nbGUgY29tbWFuZCB0aGF0IGRvZXMgbm90IGNhdXNlIGV4ZWN1dGlvbiBvZiBhdXRvY29tbWFuZHMsIHlvdSBjb3VsZAorZXZlbiBzdXBwcmVzcyB0aGUgY29udmVyc2lvbiBvZiBlcnJvcnMgdG8gZXhjZXB0aW9ucyBieSB0aGUgIjpzaWxlbnQhIgorY29tbWFuZDogPgorCTpzaWxlbnQhIG51bm1hcCBrCitUaGlzIHdvcmtzIGFsc28gd2hlbiBhIHRyeSBjb25kaXRpb25hbCBpcyBhY3RpdmUuCisKKworQ0FUQ0hJTkcgSU5URVJSVVBUUwkJCQkJKmNhdGNoLWludGVycnVwdCoKKworV2hlbiB0aGVyZSBhcmUgYWN0aXZlIHRyeSBjb25kaXRpb25hbHMsIGFuIGludGVycnVwdCAoQ1RSTC1DKSBpcyBjb252ZXJ0ZWQgdG8KK3RoZSBleGNlcHRpb24gIlZpbTpJbnRlcnJ1cHQiLiAgWW91IGNhbiBjYXRjaCBpdCBsaWtlIGV2ZXJ5IGV4Y2VwdGlvbi4gIFRoZQorc2NyaXB0IGlzIG5vdCB0ZXJtaW5hdGVkLCB0aGVuLgorICAgRXhhbXBsZTogPgorCisJOmZ1bmN0aW9uISBUQVNLMSgpCisJOiAgc2xlZXAgMTAKKwk6ZW5kZnVuY3Rpb24KKworCTpmdW5jdGlvbiEgVEFTSzIoKQorCTogIHNsZWVwIDIwCisJOmVuZGZ1bmN0aW9uCisKKwk6d2hpbGUgMQorCTogIGxldCBjb21tYW5kID0gaW5wdXQoIlR5cGUgYSBjb21tYW5kOiAiKQorCTogIHRyeQorCTogICAgaWYgY29tbWFuZCA9PSAiIgorCTogICAgICBjb250aW51ZQorCTogICAgZWxzZWlmIGNvbW1hbmQgPT0gIkVORCIKKwk6ICAgICAgYnJlYWsKKwk6ICAgIGVsc2VpZiBjb21tYW5kID09ICJUQVNLMSIKKwk6ICAgICAgY2FsbCBUQVNLMSgpCisJOiAgICBlbHNlaWYgY29tbWFuZCA9PSAiVEFTSzIiCisJOiAgICAgIGNhbGwgVEFTSzIoKQorCTogICAgZWxzZQorCTogICAgICBlY2hvICJcbklsbGVnYWwgY29tbWFuZDoiIGNvbW1hbmQKKwk6ICAgICAgY29udGludWUKKwk6ICAgIGVuZGlmCisJOiAgY2F0Y2ggL15WaW06SW50ZXJydXB0JC8KKwk6ICAgIGVjaG8gIlxuQ29tbWFuZCBpbnRlcnJ1cHRlZCIKKwk6ICAgICIgQ2F1Z2h0IHRoZSBpbnRlcnJ1cHQuICBDb250aW51ZSB3aXRoIG5leHQgcHJvbXB0LgorCTogIGVuZHRyeQorCTplbmR3aGlsZQorCitZb3UgY2FuIGludGVycnVwdCBhIHRhc2sgaGVyZSBieSBwcmVzc2luZyBDVFJMLUM7IHRoZSBzY3JpcHQgdGhlbiBhc2tzIGZvcgorYSBuZXcgY29tbWFuZC4gIElmIHlvdSBwcmVzcyBDVFJMLUMgYXQgdGhlIHByb21wdCwgdGhlIHNjcmlwdCBpcyB0ZXJtaW5hdGVkLgorCitGb3IgdGVzdGluZyB3aGF0IGhhcHBlbnMgd2hlbiBDVFJMLUMgd291bGQgYmUgcHJlc3NlZCBvbiBhIHNwZWNpZmljIGxpbmUgaW4KK3lvdXIgc2NyaXB0LCB1c2UgdGhlIGRlYnVnIG1vZGUgYW5kIGV4ZWN1dGUgdGhlIHw+cXVpdHwgb3IgfD5pbnRlcnJ1cHR8Citjb21tYW5kIG9uIHRoYXQgbGluZS4gIFNlZSB8ZGVidWctc2NyaXB0c3wuCisKKworQ0FUQ0hJTkcgQUxMCQkJCQkJKmNhdGNoLWFsbCoKKworVGhlIGNvbW1hbmRzID4KKworCTpjYXRjaCAvLiovCisJOmNhdGNoIC8vCisJOmNhdGNoCisKK2NhdGNoIGV2ZXJ5dGhpbmcsIGVycm9yIGV4Y2VwdGlvbnMsIGludGVycnVwdCBleGNlcHRpb25zIGFuZCBleGNlcHRpb25zCitleHBsaWNpdGx5IHRocm93biBieSB0aGUgfDp0aHJvd3wgY29tbWFuZC4gIFRoaXMgaXMgdXNlZnVsIGF0IHRoZSB0b3AgbGV2ZWwgb2YKK2Egc2NyaXB0IGluIG9yZGVyIHRvIGNhdGNoIHVuZXhwZWN0ZWQgdGhpbmdzLgorICAgRXhhbXBsZTogPgorCisJOnRyeQorCToKKwk6ICAiIGRvIHRoZSBoYXJkIHdvcmsgaGVyZQorCToKKwk6Y2F0Y2ggL015RXhjZXB0aW9uLworCToKKwk6ICAiIGhhbmRsZSBrbm93biBwcm9ibGVtCisJOgorCTpjYXRjaCAvXlZpbTpJbnRlcnJ1cHQkLworCTogICAgZWNobyAiU2NyaXB0IGludGVycnVwdGVkIgorCTpjYXRjaCAvLiovCisJOiAgZWNobyAiSW50ZXJuYWwgZXJyb3IgKCIgLiB2OmV4Y2VwdGlvbiAuICIpIgorCTogIGVjaG8gIiAtIG9jY3VycmVkIGF0ICIgLiB2OnRocm93cG9pbnQKKwk6ZW5kdHJ5CisJOiIgZW5kIG9mIHNjcmlwdAorCitOb3RlOiBDYXRjaGluZyBhbGwgbWlnaHQgY2F0Y2ggbW9yZSB0aGluZ3MgdGhhbiB5b3Ugd2FudC4gIFRodXMsIHlvdSBhcmUKK3N0cm9uZ2x5IGVuY291cmFnZWQgdG8gY2F0Y2ggb25seSBmb3IgcHJvYmxlbXMgdGhhdCB5b3UgY2FuIHJlYWxseSBoYW5kbGUgYnkKK3NwZWNpZnlpbmcgYSBwYXR0ZXJuIGFyZ3VtZW50IHRvIHRoZSAiOmNhdGNoIi4KKyAgIEV4YW1wbGU6IENhdGNoaW5nIGFsbCBjb3VsZCBtYWtlIGl0IG5lYXJseSBpbXBvc3NpYmxlIHRvIGludGVycnVwdCBhIHNjcmlwdAorYnkgcHJlc3NpbmcgQ1RSTC1DOiA+CisKKwk6d2hpbGUgMQorCTogIHRyeQorCTogICAgc2xlZXAgMQorCTogIGNhdGNoCisJOiAgZW5kdHJ5CisJOmVuZHdoaWxlCisKKworRVhDRVBUSU9OUyBBTkQgQVVUT0NPTU1BTkRTCQkJCSpleGNlcHQtYXV0b2NtZCoKKworRXhjZXB0aW9ucyBtYXkgYmUgdXNlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIGF1dG9jb21tYW5kcy4gIEV4YW1wbGU6ID4KKworCTphdXRvY21kIFVzZXIgeCB0cnkKKwk6YXV0b2NtZCBVc2VyIHggICB0aHJvdyAiT29wcyEiCisJOmF1dG9jbWQgVXNlciB4IGNhdGNoCisJOmF1dG9jbWQgVXNlciB4ICAgZWNobyB2OmV4Y2VwdGlvbgorCTphdXRvY21kIFVzZXIgeCBlbmR0cnkKKwk6YXV0b2NtZCBVc2VyIHggdGhyb3cgIkFycmdoISIKKwk6YXV0b2NtZCBVc2VyIHggZWNobyAiU2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQiCisJOgorCTp0cnkKKwk6ICBkb2F1dG9jbWQgVXNlciB4CisJOmNhdGNoCisJOiAgZWNobyB2OmV4Y2VwdGlvbgorCTplbmR0cnkKKworVGhpcyBkaXNwbGF5cyAiT29wcyEiIGFuZCAiQXJyZ2ghIi4KKworCQkJCQkJCSpleGNlcHQtYXV0b2NtZC1QcmUqCitGb3Igc29tZSBjb21tYW5kcywgYXV0b2NvbW1hbmRzIGdldCBleGVjdXRlZCBiZWZvcmUgdGhlIG1haW4gYWN0aW9uIG9mIHRoZQorY29tbWFuZCB0YWtlcyBwbGFjZS4gIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIG5vdCBjYXVnaHQgaW4gdGhlIHNlcXVlbmNlCitvZiBhdXRvY29tbWFuZHMsIHRoZSBzZXF1ZW5jZSBhbmQgdGhlIGNvbW1hbmQgdGhhdCBjYXVzZWQgaXRzIGV4ZWN1dGlvbiBhcmUKK2FiYW5kb25lZCBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIgb2YgdGhlIGNvbW1hbmQuCisgICBFeGFtcGxlOiA+CisKKwk6YXV0b2NtZCBCdWZXcml0ZVByZSAqIHRocm93ICJGQUlMIgorCTphdXRvY21kIEJ1ZldyaXRlUHJlICogZWNobyAiU2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQiCisJOgorCTp0cnkKKwk6ICB3cml0ZQorCTpjYXRjaAorCTogIGVjaG8gIkNhdWdodDoiIHY6ZXhjZXB0aW9uICJmcm9tIiB2OnRocm93cG9pbnQKKwk6ZW5kdHJ5CisKK0hlcmUsIHRoZSAiOndyaXRlIiBjb21tYW5kIGRvZXMgbm90IHdyaXRlIHRoZSBmaWxlIGN1cnJlbnRseSBiZWluZyBlZGl0ZWQgKGFzCit5b3UgY2FuIHNlZSBieSBjaGVja2luZyAnbW9kaWZpZWQnKSwgc2luY2UgdGhlIGV4Y2VwdGlvbiBmcm9tIHRoZSBCdWZXcml0ZVByZQorYXV0b2NvbW1hbmQgYWJhbmRvbnMgdGhlICI6d3JpdGUiLiAgVGhlIGV4Y2VwdGlvbiBpcyB0aGVuIGNhdWdodCBhbmQgdGhlCitzY3JpcHQgZGlzcGxheXM6ID4KKworCUNhdWdodDogRkFJTCBmcm9tIEJ1ZldyaXRlIEF1dG8gY29tbWFuZHMgZm9yICIqIgorPAorCQkJCQkJCSpleGNlcHQtYXV0b2NtZC1Qb3N0KgorRm9yIHNvbWUgY29tbWFuZHMsIGF1dG9jb21tYW5kcyBnZXQgZXhlY3V0ZWQgYWZ0ZXIgdGhlIG1haW4gYWN0aW9uIG9mIHRoZQorY29tbWFuZCBoYXMgdGFrZW4gcGxhY2UuICBJZiB0aGlzIG1haW4gYWN0aW9uIGZhaWxzIGFuZCB0aGUgY29tbWFuZCBpcyBpbnNpZGUKK2FuIGFjdGl2ZSB0cnkgY29uZGl0aW9uYWwsIHRoZSBhdXRvY29tbWFuZHMgYXJlIHNraXBwZWQgYW5kIGFuIGVycm9yIGV4Y2VwdGlvbgoraXMgdGhyb3duIHRoYXQgY2FuIGJlIGNhdWdodCBieSB0aGUgY2FsbGVyIG9mIHRoZSBjb21tYW5kLgorICAgRXhhbXBsZTogPgorCisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogZWNobyAiRmlsZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiEiCisJOgorCTp0cnkKKwk6ICB3cml0ZSAvaS9tL3Avby9zL3MvaS9iL2wvZQorCTpjYXRjaAorCTogIGVjaG8gdjpleGNlcHRpb24KKwk6ZW5kdHJ5CisKK1RoaXMganVzdCBkaXNwbGF5czogPgorCisJVmltKHdyaXRlKTpFMjEyOiBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmcgKC9pL20vcC9vL3Mvcy9pL2IvbC9lKQorCitJZiB5b3UgcmVhbGx5IG5lZWQgdG8gZXhlY3V0ZSB0aGUgYXV0b2NvbW1hbmRzIGV2ZW4gd2hlbiB0aGUgbWFpbiBhY3Rpb24KK2ZhaWxzLCB0cmlnZ2VyIHRoZSBldmVudCBmcm9tIHRoZSBjYXRjaCBjbGF1c2UuCisgICBFeGFtcGxlOiA+CisKKwk6YXV0b2NtZCBCdWZXcml0ZVByZSAgKiBzZXQgbm9yZWFkb25seQorCTphdXRvY21kIEJ1ZldyaXRlUG9zdCAqIHNldCByZWFkb25seQorCToKKwk6dHJ5CisJOiAgd3JpdGUgL2kvbS9wL28vcy9zL2kvYi9sL2UKKwk6Y2F0Y2gKKwk6ICBkb2F1dG9jbWQgQnVmV3JpdGVQb3N0IC9pL20vcC9vL3Mvcy9pL2IvbC9lCisJOmVuZHRyeQorPAorWW91IGNhbiBhbHNvIHVzZSAiOnNpbGVudCEiOiA+CisKKwk6bGV0IHggPSAib2siCisJOmxldCB2OmVycm1zZyA9ICIiCisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogaWYgdjplcnJtc2cgIT0gIiIKKwk6YXV0b2NtZCBCdWZXcml0ZVBvc3QgKiAgIGxldCB4ID0gImFmdGVyIGZhaWwiCisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogZW5kaWYKKwk6dHJ5CisJOiAgc2lsZW50ISB3cml0ZSAvaS9tL3Avby9zL3MvaS9iL2wvZQorCTpjYXRjaAorCTplbmR0cnkKKwk6ZWNobyB4CisKK1RoaXMgZGlzcGxheXMgImFmdGVyIGZhaWwiLgorCitJZiB0aGUgbWFpbiBhY3Rpb24gb2YgdGhlIGNvbW1hbmQgZG9lcyBub3QgZmFpbCwgZXhjZXB0aW9ucyBmcm9tIHRoZQorYXV0b2NvbW1hbmRzIHdpbGwgYmUgY2F0Y2hhYmxlIGJ5IHRoZSBjYWxsZXIgb2YgdGhlIGNvbW1hbmQ6ICA+CisKKwk6YXV0b2NtZCBCdWZXcml0ZVBvc3QgKiB0aHJvdyAiOi0oIgorCTphdXRvY21kIEJ1ZldyaXRlUG9zdCAqIGVjaG8gIlNob3VsZCBub3QgYmUgZGlzcGxheWVkIgorCToKKwk6dHJ5CisJOiAgd3JpdGUKKwk6Y2F0Y2gKKwk6ICBlY2hvIHY6ZXhjZXB0aW9uCisJOmVuZHRyeQorPAorCQkJCQkJCSpleGNlcHQtYXV0b2NtZC1DbWQqCitGb3Igc29tZSBjb21tYW5kcywgdGhlIG5vcm1hbCBhY3Rpb24gY2FuIGJlIHJlcGxhY2VkIGJ5IGEgc2VxdWVuY2Ugb2YKK2F1dG9jb21tYW5kcy4gIEV4Y2VwdGlvbnMgZnJvbSB0aGF0IHNlcXVlbmNlIHdpbGwgYmUgY2F0Y2hhYmxlIGJ5IHRoZSBjYWxsZXIKK29mIHRoZSBjb21tYW5kLgorICAgRXhhbXBsZTogIEZvciB0aGUgIjp3cml0ZSIgY29tbWFuZCwgdGhlIGNhbGxlciBjYW5ub3Qga25vdyB3aGV0aGVyIHRoZSBmaWxlCitoYWQgYWN0dWFsbHkgYmVlbiB3cml0dGVuIHdoZW4gdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIFlvdSBuZWVkIHRvIHRlbGwgaXQgaW4KK3NvbWUgd2F5LiA+CisKKwk6aWYgIWV4aXN0cygiY250IikKKwk6ICBsZXQgY250ID0gMAorCToKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogaWYgJm1vZGlmaWVkCisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqICAgbGV0IGNudCA9IGNudCArIDEKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogICBpZiBjbnQgJSAzID09IDIKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogICAgIHRocm93ICJCdWZXcml0ZUNtZEVycm9yIgorCTogIGF1dG9jbWQgQnVmV3JpdGVDbWQgKiAgIGVuZGlmCisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqICAgd3JpdGUgfCBzZXQgbm9tb2RpZmllZAorCTogIGF1dG9jbWQgQnVmV3JpdGVDbWQgKiAgIGlmIGNudCAlIDMgPT0gMAorCTogIGF1dG9jbWQgQnVmV3JpdGVDbWQgKiAgICAgdGhyb3cgIkJ1ZldyaXRlQ21kRXJyb3IiCisJOiAgYXV0b2NtZCBCdWZXcml0ZUNtZCAqICAgZW5kaWYKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogICBlY2hvICJGaWxlIHN1Y2Nlc3NmdWxseSB3cml0dGVuISIKKwk6ICBhdXRvY21kIEJ1ZldyaXRlQ21kICogZW5kaWYKKwk6ZW5kaWYKKwk6CisJOnRyeQorCToJd3JpdGUKKwk6Y2F0Y2ggL15CdWZXcml0ZUNtZEVycm9yJC8KKwk6ICBpZiAmbW9kaWZpZWQKKwk6ICAgIGVjaG8gIkVycm9yIG9uIHdyaXRpbmcgKGZpbGUgY29udGVudHMgbm90IGNoYW5nZWQpIgorCTogIGVsc2UKKwk6ICAgIGVjaG8gIkVycm9yIGFmdGVyIHdyaXRpbmciCisJOiAgZW5kaWYKKwk6Y2F0Y2ggL15WaW0od3JpdGUpOi8KKwk6ICAgIGVjaG8gIkVycm9yIG9uIHdyaXRpbmciCisJOmVuZHRyeQorCitXaGVuIHRoaXMgc2NyaXB0IGlzIHNvdXJjZWQgc2V2ZXJhbCB0aW1lcyBhZnRlciBtYWtpbmcgY2hhbmdlcywgaXQgZGlzcGxheXMKK2ZpcnN0ID4KKwlGaWxlIHN1Y2Nlc3NmdWxseSB3cml0dGVuIQordGhlbiA+CisJRXJyb3Igb24gd3JpdGluZyAoZmlsZSBjb250ZW50cyBub3QgY2hhbmdlZCkKK3RoZW4gPgorCUVycm9yIGFmdGVyIHdyaXRpbmcKK2V0Yy4KKworCQkJCQkJCSpleGNlcHQtYXV0b2NtZC1pbGwqCitZb3UgY2Fubm90IHNwcmVhZCBhIHRyeSBjb25kaXRpb25hbCBvdmVyIGF1dG9jb21tYW5kcyBmb3IgZGlmZmVyZW50IGV2ZW50cy4KK1RoZSBmb2xsb3dpbmcgY29kZSBpcyBpbGwtZm9ybWVkOiA+CisKKwk6YXV0b2NtZCBCdWZXcml0ZVByZSAgKiB0cnkKKwk6CisJOmF1dG9jbWQgQnVmV3JpdGVQb3N0ICogY2F0Y2gKKwk6YXV0b2NtZCBCdWZXcml0ZVBvc3QgKiAgIGVjaG8gdjpleGNlcHRpb24KKwk6YXV0b2NtZCBCdWZXcml0ZVBvc3QgKiBlbmR0cnkKKwk6CisJOndyaXRlCisKKworRVhDRVBUSU9OIEhJRVJBUkNISUVTIEFORCBQQVJBTUVURVJJWkVEIEVYQ0VQVElPTlMJKmV4Y2VwdC1oaWVyLXBhcmFtKgorCitTb21lIHByb2dyYW1taW5nIGxhbmd1YWdlcyBhbGxvdyB0byB1c2UgaGllcmFyY2hpZXMgb2YgZXhjZXB0aW9uIGNsYXNzZXMgb3IgdG8KK3Bhc3MgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB3aXRoIHRoZSBvYmplY3Qgb2YgYW4gZXhjZXB0aW9uIGNsYXNzLiAgWW91IGNhbiBkbworc2ltaWxhciB0aGluZ3MgaW4gVmltLgorICAgSW4gb3JkZXIgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGZyb20gYSBoaWVyYXJjaHksIGp1c3QgdGhyb3cgdGhlIGNvbXBsZXRlCitjbGFzcyBuYW1lIHdpdGggdGhlIGNvbXBvbmVudHMgc2VwYXJhdGVkIGJ5IGEgY29sb24sIGZvciBpbnN0YW5jZSB0aHJvdyB0aGUKK3N0cmluZyAiRVhDRVBUOk1BVEhFUlI6T1ZFUkZMT1ciIGZvciBhbiBvdmVyZmxvdyBpbiBhIG1hdGhlbWF0aWNhbCBsaWJyYXJ5LgorICAgV2hlbiB5b3Ugd2FudCB0byBwYXNzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gd2l0aCB5b3VyIGV4Y2VwdGlvbiBjbGFzcywgYWRkCitpdCBpbiBwYXJlbnRoZXNlcywgZm9yIGluc3RhbmNlIHRocm93IHRoZSBzdHJpbmcgIkVYQ0VQVDpJTzpXUklURUVSUihteWZpbGUpIgorZm9yIGFuIGVycm9yIHdoZW4gd3JpdGluZyAibXlmaWxlIi4KKyAgIFdpdGggdGhlIGFwcHJvcHJpYXRlIHBhdHRlcm5zIGluIHRoZSAiOmNhdGNoIiBjb21tYW5kLCB5b3UgY2FuIGNhdGNoIGZvcgorYmFzZSBjbGFzc2VzIG9yIGRlcml2ZWQgY2xhc3NlcyBvZiB5b3VyIGhpZXJhcmNoeS4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4KK3BhcmVudGhlc2VzIGNhbiBiZSBjdXQgb3V0IGZyb20gfHY6ZXhjZXB0aW9ufCB3aXRoIHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQuCisgICBFeGFtcGxlOiA+CisKKwk6ZnVuY3Rpb24hIENoZWNrUmFuZ2UoYSwgZnVuYykKKwk6ICBpZiBhOmEgPCAwCisJOiAgICB0aHJvdyAiRVhDRVBUOk1BVEhFUlI6UkFOR0UoIiAuIGE6ZnVuYyAuICIpIgorCTogIGVuZGlmCisJOmVuZGZ1bmN0aW9uCisJOgorCTpmdW5jdGlvbiEgQWRkKGEsIGIpCisJOiAgY2FsbCBDaGVja1JhbmdlKGE6YSwgIkFkZCIpCisJOiAgY2FsbCBDaGVja1JhbmdlKGE6YiwgIkFkZCIpCisJOiAgbGV0IGMgPSBhOmEgKyBhOmIKKwk6ICBpZiBjIDwgMAorCTogICAgdGhyb3cgIkVYQ0VQVDpNQVRIRVJSOk9WRVJGTE9XIgorCTogIGVuZGlmCisJOiAgcmV0dXJuIGMKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmZ1bmN0aW9uISBEaXYoYSwgYikKKwk6ICBjYWxsIENoZWNrUmFuZ2UoYTphLCAiRGl2IikKKwk6ICBjYWxsIENoZWNrUmFuZ2UoYTpiLCAiRGl2IikKKwk6ICBpZiAoYTpiID09IDApCisJOiAgICB0aHJvdyAiRVhDRVBUOk1BVEhFUlI6WkVST0RJViIKKwk6ICBlbmRpZgorCTogIHJldHVybiBhOmEgLyBhOmIKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOmZ1bmN0aW9uISBXcml0ZShmaWxlKQorCTogIHRyeQorCTogICAgZXhlY3V0ZSAid3JpdGUiIGE6ZmlsZQorCTogIGNhdGNoIC9eVmltKHdyaXRlKTovCisJOiAgICB0aHJvdyAiRVhDRVBUOklPKCIgLiBnZXRjd2QoKSAuICIsICIgLiBhOmZpbGUgLiAiKTpXUklURUVSUiIKKwk6ICBlbmR0cnkKKwk6ZW5kZnVuY3Rpb24KKwk6CisJOnRyeQorCToKKwk6ICAiIHNvbWV0aGluZyB3aXRoIGFyaXRobWV0aWNzIGFuZCBJL08KKwk6CisJOmNhdGNoIC9eRVhDRVBUOk1BVEhFUlI6UkFOR0UvCisJOiAgbGV0IGZ1bmN0aW9uID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJy4qKFwoXGFcK1wpKS4qJywgJ1wxJywgIiIpCisJOiAgZWNobyAiUmFuZ2UgZXJyb3IgaW4iIGZ1bmN0aW9uCisJOgorCTpjYXRjaCAvXkVYQ0VQVDpNQVRIRVJSLwkiIGNhdGNoZXMgT1ZFUkZMT1cgYW5kIFpFUk9ESVYKKwk6ICBlY2hvICJNYXRoIGVycm9yIgorCToKKwk6Y2F0Y2ggL15FWENFUFQ6SU8vCisJOiAgbGV0IGRpciA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICcuKihcKC5cK1wpLFxzKi5cKykuKicsICdcMScsICIiKQorCTogIGxldCBmaWxlID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJy4qKC5cKyxccypcKC5cK1wpKS4qJywgJ1wxJywgIiIpCisJOiAgaWYgZmlsZSAhfiAnXi8nCisJOiAgICBsZXQgZmlsZSA9IGRpciAuICIvIiAuIGZpbGUKKwk6ICBlbmRpZgorCTogIGVjaG8gJ0kvTyBlcnJvciBmb3IgIicgLiBmaWxlIC4gJyInCisJOgorCTpjYXRjaCAvXkVYQ0VQVC8KKwk6ICBlY2hvICJVbnNwZWNpZmllZCBlcnJvciIKKwk6CisJOmVuZHRyeQorCitUaGUgZXhjZXB0aW9ucyByYWlzZWQgYnkgVmltIGl0c2VsZiAob24gZXJyb3Igb3Igd2hlbiBwcmVzc2luZyBDVFJMLUMpIHVzZQorYSBmbGF0IGhpZXJhcmNoeTogIHRoZXkgYXJlIGFsbCBpbiB0aGUgIlZpbSIgY2xhc3MuICBZb3UgY2Fubm90IHRocm93IHlvdXJzZWxmCitleGNlcHRpb25zIHdpdGggdGhlICJWaW0iIHByZWZpeDsgdGhleSBhcmUgcmVzZXJ2ZWQgZm9yIFZpbS4KKyAgIFZpbSBlcnJvciBleGNlcHRpb25zIGFyZSBwYXJhbWV0ZXJpemVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdGhhdAorZmFpbGVkLCBpZiBrbm93bi4gIFNlZSB8Y2F0Y2gtZXJyb3JzfC4KKworCitQRUNVTElBUklUSUVTCisJCQkJCQkJKmV4Y2VwdC1jb21wYXQqCitUaGUgZXhjZXB0aW9uIGhhbmRsaW5nIGNvbmNlcHQgcmVxdWlyZXMgdGhhdCB0aGUgY29tbWFuZCBzZXF1ZW5jZSBjYXVzaW5nIHRoZQorZXhjZXB0aW9uIGlzIGFib3J0ZWQgaW1tZWRpYXRlbHkgYW5kIGNvbnRyb2wgaXMgdHJhbnNmZXJyZWQgdG8gZmluYWxseSBjbGF1c2VzCithbmQvb3IgYSBjYXRjaCBjbGF1c2UuCisKK0luIHRoZSBWaW0gc2NyaXB0IGxhbmd1YWdlIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBzY3JpcHRzIGFuZCBmdW5jdGlvbnMKK2NvbnRpbnVlIGFmdGVyIGFuIGVycm9yOiBpbiBmdW5jdGlvbnMgd2l0aG91dCB0aGUgImFib3J0IiBmbGFnIG9yIGluIGEgY29tbWFuZAorYWZ0ZXIgIjpzaWxlbnQhIiwgY29udHJvbCBmbG93IGdvZXMgdG8gdGhlIGZvbGxvd2luZyBsaW5lLCBhbmQgb3V0c2lkZQorZnVuY3Rpb25zLCBjb250cm9sIGZsb3cgZ29lcyB0byB0aGUgbGluZSBmb2xsb3dpbmcgdGhlIG91dGVybW9zdCAiOmVuZHdoaWxlIgorb3IgIjplbmRpZiIuICBPbiB0aGUgb3RoZXIgaGFuZCwgZXJyb3JzIHNob3VsZCBiZSBjYXRjaGFibGUgYXMgZXhjZXB0aW9ucworKHRodXMsIHJlcXVpcmluZyB0aGUgaW1tZWRpYXRlIGFib3J0aW9uKS4KKworVGhpcyBwcm9ibGVtIGhhcyBiZWVuIHNvbHZlZCBieSBjb252ZXJ0aW5nIGVycm9ycyB0byBleGNlcHRpb25zIGFuZCB1c2luZworaW1tZWRpYXRlIGFib3J0aW9uIChpZiBub3Qgc3VwcHJlc3NlZCBieSAiOnNpbGVudCEiKSBvbmx5IHdoZW4gYSB0cnkKK2NvbmRpdGlvbmFsIGlzIGFjdGl2ZS4gIFRoaXMgaXMgbm8gcmVzdHJpY3Rpb24gc2luY2UgYW4gKGVycm9yKSBleGNlcHRpb24gY2FuCitiZSBjYXVnaHQgb25seSBmcm9tIGFuIGFjdGl2ZSB0cnkgY29uZGl0aW9uYWwuICBJZiB5b3Ugd2FudCBhbiBpbW1lZGlhdGUKK3Rlcm1pbmF0aW9uIHdpdGhvdXQgY2F0Y2hpbmcgdGhlIGVycm9yLCBqdXN0IHVzZSBhIHRyeSBjb25kaXRpb25hbCB3aXRob3V0CitjYXRjaCBjbGF1c2UuICAoWW91IGNhbiBjYXVzZSBjbGVhbnVwIGNvZGUgYmVpbmcgZXhlY3V0ZWQgYmVmb3JlIHRlcm1pbmF0aW9uCitieSBzcGVjaWZ5aW5nIGEgZmluYWxseSBjbGF1c2UuKQorCitXaGVuIG5vIHRyeSBjb25kaXRpb25hbCBpcyBhY3RpdmUsIHRoZSB1c3VhbCBhYm9ydGlvbiBhbmQgY29udGludWF0aW9uCitiZWhhdmlvciBpcyB1c2VkIGluc3RlYWQgb2YgaW1tZWRpYXRlIGFib3J0aW9uLiAgVGhpcyBlbnN1cmVzIGNvbXBhdGliaWxpdHkgb2YKK3NjcmlwdHMgd3JpdHRlbiBmb3IgVmltIDYuMSBhbmQgZWFybGllci4KKworSG93ZXZlciwgd2hlbiBzb3VyY2luZyBhbiBleGlzdGluZyBzY3JpcHQgdGhhdCBkb2VzIG5vdCB1c2UgZXhjZXB0aW9uIGhhbmRsaW5nCitjb21tYW5kcyAob3Igd2hlbiBjYWxsaW5nIG9uZSBvZiBpdHMgZnVuY3Rpb25zKSBmcm9tIGluc2lkZSBhbiBhY3RpdmUgdHJ5Citjb25kaXRpb25hbCBvZiBhIG5ldyBzY3JpcHQsIHlvdSBtaWdodCBjaGFuZ2UgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGUgZXhpc3RpbmcKK3NjcmlwdCBvbiBlcnJvci4gIFlvdSBnZXQgdGhlIGltbWVkaWF0ZSBhYm9ydGlvbiBvbiBlcnJvciBhbmQgY2FuIGNhdGNoIHRoZQorZXJyb3IgaW4gdGhlIG5ldyBzY3JpcHQuICBJZiBob3dldmVyIHRoZSBzb3VyY2VkIHNjcmlwdCBzdXBwcmVzc2VzIGVycm9yCittZXNzYWdlcyBieSB1c2luZyB0aGUgIjpzaWxlbnQhIiBjb21tYW5kIChjaGVja2luZyBmb3IgZXJyb3JzIGJ5IHRlc3RpbmcKK3x2OmVycm1zZ3wgaWYgYXBwcm9wcmlhdGUpLCBpdHMgZXhlY3V0aW9uIHBhdGggaXMgbm90IGNoYW5nZWQuICBUaGUgZXJyb3IgaXMKK25vdCBjb252ZXJ0ZWQgdG8gYW4gZXhjZXB0aW9uLiAgKFNlZSB8OnNpbGVudHwuKSAgU28gdGhlIG9ubHkgcmVtYWluaW5nIGNhdXNlCit3aGVyZSB0aGlzIGhhcHBlbnMgaXMgZm9yIHNjcmlwdHMgdGhhdCBkb24ndCBjYXJlIGFib3V0IGVycm9ycyBhbmQgcHJvZHVjZQorZXJyb3IgbWVzc2FnZXMuICBZb3UgcHJvYmFibHkgd29uJ3Qgd2FudCB0byB1c2Ugc3VjaCBjb2RlIGZyb20geW91ciBuZXcKK3NjcmlwdHMuCisKKwkJCQkJCQkqZXhjZXB0LXN5bnRheC1lcnIqCitTeW50YXggZXJyb3JzIGluIHRoZSBleGNlcHRpb24gaGFuZGxpbmcgY29tbWFuZHMgYXJlIG5ldmVyIGNhdWdodCBieSBhbnkgb2YKK3RoZSAiOmNhdGNoIiBjb21tYW5kcyBvZiB0aGUgdHJ5IGNvbmRpdGlvbmFsIHRoZXkgYmVsb25nIHRvLiAgSXRzIGZpbmFsbHkKK2NsYXVzZXMsIGhvd2V2ZXIsIGlzIGV4ZWN1dGVkLgorICAgRXhhbXBsZTogPgorCisJOnRyeQorCTogIHRyeQorCTogICAgdGhyb3cgNDcxMQorCTogIGNhdGNoIC9cKC8KKwk6ICAgIGVjaG8gImluIGNhdGNoIHdpdGggc3ludGF4IGVycm9yIgorCTogIGNhdGNoCisJOiAgICBlY2hvICJpbm5lciBjYXRjaC1hbGwiCisJOiAgZmluYWxseQorCTogICAgZWNobyAiaW5uZXIgZmluYWxseSIKKwk6ICBlbmR0cnkKKwk6Y2F0Y2gKKwk6ICBlY2hvICdvdXRlciBjYXRjaC1hbGwgY2F1Z2h0ICInIC4gdjpleGNlcHRpb24gLiAnIicKKwk6ICBmaW5hbGx5CisJOiAgICBlY2hvICJvdXRlciBmaW5hbGx5IgorCTplbmR0cnkKKworVGhpcyBkaXNwbGF5czogPgorICAgIGlubmVyIGZpbmFsbHkKKyAgICBvdXRlciBjYXRjaC1hbGwgY2F1Z2h0ICJWaW0oY2F0Y2gpOkU1NDogVW5tYXRjaGVkIFwoIgorICAgIG91dGVyIGZpbmFsbHkKK1RoZSBvcmlnaW5hbCBleGNlcHRpb24gaXMgZGlzY2FyZGVkIGFuZCBhbiBlcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLCBpbnN0ZWFkLgorCisJCQkJCQkJKmV4Y2VwdC1zaW5nbGUtbGluZSoKK1RoZSAiOnRyeSIsICI6Y2F0Y2giLCAiOmZpbmFsbHkiLCBhbmQgIjplbmR0cnkiIGNvbW1hbmRzIGNhbiBiZSBwdXQgb24KK2Egc2luZ2xlIGxpbmUsIGJ1dCB0aGVuIHN5bnRheCBlcnJvcnMgbWF5IG1ha2UgaXQgZGlmZmljdWx0IHRvIHJlY29nbml6ZSB0aGUKKyJjYXRjaCIgbGluZSwgdGh1cyB5b3UgYmV0dGVyIGF2b2lkIHRoaXMuCisgICBFeGFtcGxlOiA+CisJOnRyeSB8IHVubGV0ISBmb28gIyB8IGNhdGNoIHwgZW5kdHJ5CityYWlzZXMgYW4gZXJyb3IgZXhjZXB0aW9uIGZvciB0aGUgdHJhaWxpbmcgY2hhcmFjdGVycyBhZnRlciB0aGUgIjp1bmxldCEiCithcmd1bWVudCwgYnV0IGRvZXMgbm90IHNlZSB0aGUgIjpjYXRjaCIgYW5kICI6ZW5kdHJ5IiBjb21tYW5kcywgc28gdGhhdCB0aGUKK2Vycm9yIGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQgYW5kIHRoZSAiRTQ4ODogVHJhaWxpbmcgY2hhcmFjdGVycyIgbWVzc2FnZSBnZXRzCitkaXNwbGF5ZWQuCisKKwkJCQkJCQkqZXhjZXB0LXNldmVyYWwtZXJyb3JzKgorV2hlbiBzZXZlcmFsIGVycm9ycyBhcHBlYXIgaW4gYSBzaW5nbGUgY29tbWFuZCwgdGhlIGZpcnN0IGVycm9yIG1lc3NhZ2UgaXMKK3VzdWFsbHkgdGhlIG1vc3Qgc3BlY2lmaWMgb25lIGFuZCB0aGVyZWZvciBjb252ZXJ0ZWQgdG8gdGhlIGVycm9yIGV4Y2VwdGlvbi4KKyAgIEV4YW1wbGU6ID4KKwllY2hvIG5vdmFyCitjYXVzZXMgPgorCUUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogbm92YXIKKwlFMTU6IEludmFsaWQgZXhwcmVzc2lvbjogbm92YXIKK1RoZSB2YWx1ZSBvZiB0aGUgZXJyb3IgZXhjZXB0aW9uIGluc2lkZSB0cnkgY29uZGl0aW9uYWxzIGlzOiA+CisJVmltKGVjaG8pOkUxMjE6IFVuZGVmaW5lZCB2YXJpYWJsZTogbm92YXIKKzwJCQkJCQkJKmV4Y2VwdC1zeW50YXgtZXJyb3IqCitCdXQgd2hlbiBhIHN5bnRheCBlcnJvciBpcyBkZXRlY3RlZCBhZnRlciBhIG5vcm1hbCBlcnJvciBpbiB0aGUgc2FtZSBjb21tYW5kLAordGhlIHN5bnRheCBlcnJvciBpcyB1c2VkIGZvciB0aGUgZXhjZXB0aW9uIGJlaW5nIHRocm93bi4KKyAgIEV4YW1wbGU6ID4KKwl1bmxldCBub3ZhciAjCitjYXVzZXMgPgorCUUxMDg6IE5vIHN1Y2ggdmFyaWFibGU6ICJub3ZhciIKKwlFNDg4OiBUcmFpbGluZyBjaGFyYWN0ZXJzCitUaGUgdmFsdWUgb2YgdGhlIGVycm9yIGV4Y2VwdGlvbiBpbnNpZGUgdHJ5IGNvbmRpdGlvbmFscyBpczogPgorCVZpbSh1bmxldCk6RTQ4ODogVHJhaWxpbmcgY2hhcmFjdGVycworVGhpcyBpcyBkb25lIGJlY2F1c2UgdGhlIHN5bnRheCBlcnJvciBtaWdodCBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGluIGEgd2F5Citub3QgaW50ZW5kZWQgYnkgdGhlIHVzZXIuICBFeGFtcGxlOiA+CisJdHJ5CisJICAgIHRyeSB8IHVubGV0IG5vdmFyICMgfCBjYXRjaCB8IGVjaG8gdjpleGNlcHRpb24gfCBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIGVjaG8gIm91dGVyIGNhdGNoOiIgdjpleGNlcHRpb24KKwllbmR0cnkKK1RoaXMgZGlzcGxheXMgIm91dGVyIGNhdGNoOiBWaW0odW5sZXQpOkU0ODg6IFRyYWlsaW5nIGNoYXJhY3RlcnMiLCBhbmQgdGhlbgorYSAiRTYwMDogTWlzc2luZyA6ZW5kdHJ5IiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuLCBzZWUgfGV4Y2VwdC1zaW5nbGUtbGluZXwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gRXhhbXBsZXMJCQkJCQkqZXZhbC1leGFtcGxlcyoKKworUHJpbnRpbmcgaW4gSGV4IH4KKz4KKyAgOiIgVGhlIGZ1bmN0aW9uIE5yMkhleCgpIHJldHVybnMgdGhlIEhleCBzdHJpbmcgb2YgYSBudW1iZXIuCisgIDpmdW5jIE5yMkhleChucikKKyAgOiAgbGV0IG4gPSBhOm5yCisgIDogIGxldCByID0gIiIKKyAgOiAgd2hpbGUgbgorICA6ICAgIGxldCByID0gJzAxMjM0NTY3ODlBQkNERUYnW24gJSAxNl0gLiByCisgIDogICAgbGV0IG4gPSBuIC8gMTYKKyAgOiAgZW5kd2hpbGUKKyAgOiAgcmV0dXJuIHIKKyAgOmVuZGZ1bmMKKworICA6IiBUaGUgZnVuY3Rpb24gU3RyaW5nMkhleCgpIGNvbnZlcnRzIGVhY2ggY2hhcmFjdGVyIGluIGEgc3RyaW5nIHRvIGEgdHdvCisgIDoiIGNoYXJhY3RlciBIZXggc3RyaW5nLgorICA6ZnVuYyBTdHJpbmcySGV4KHN0cikKKyAgOiAgbGV0IG91dCA9ICcnCisgIDogIGxldCBpeCA9IDAKKyAgOiAgd2hpbGUgaXggPCBzdHJsZW4oYTpzdHIpCisgIDogICAgbGV0IG91dCA9IG91dCAuIE5yMkhleChjaGFyMm5yKGE6c3RyW2l4XSkpCisgIDogICAgbGV0IGl4ID0gaXggKyAxCisgIDogIGVuZHdoaWxlCisgIDogIHJldHVybiBvdXQKKyAgOmVuZGZ1bmMKKworRXhhbXBsZSBvZiBpdHMgdXNlOiA+CisgIDplY2hvIE5yMkhleCgzMikKK3Jlc3VsdDogIjIwIiA+CisgIDplY2hvIFN0cmluZzJIZXgoIjMyIikKK3Jlc3VsdDogIjMzMzIiCisKKworU29ydGluZyBsaW5lcyAoYnkgUm9iZXJ0IFdlYmIpIH4KKworSGVyZSBpcyBhIFZpbSBzY3JpcHQgdG8gc29ydCBsaW5lcy4gIEhpZ2hsaWdodCB0aGUgbGluZXMgaW4gVmltIGFuZCB0eXBlCisiOlNvcnQiLiAgVGhpcyBkb2Vzbid0IGNhbGwgYW55IGV4dGVybmFsIHByb2dyYW1zIHNvIGl0J2xsIHdvcmsgb24gYW55CitwbGF0Zm9ybS4gIFRoZSBmdW5jdGlvbiBTb3J0KCkgYWN0dWFsbHkgdGFrZXMgdGhlIG5hbWUgb2YgYSBjb21wYXJpc29uCitmdW5jdGlvbiBhcyBpdHMgYXJndW1lbnQsIGxpa2UgcXNvcnQoKSBkb2VzIGluIEMuICBTbyB5b3UgY291bGQgc3VwcGx5IGl0Cit3aXRoIGRpZmZlcmVudCBjb21wYXJpc29uIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBzb3J0IGFjY29yZGluZyB0byBkYXRlIGV0Yy4KKz4KKyAgOiIgRnVuY3Rpb24gZm9yIHVzZSB3aXRoIFNvcnQoKSwgdG8gY29tcGFyZSB0d28gc3RyaW5ncy4KKyAgOmZ1bmMhIFN0cmNtcChzdHIxLCBzdHIyKQorICA6ICBpZiAoYTpzdHIxIDwgYTpzdHIyKQorICA6CXJldHVybiAtMQorICA6ICBlbHNlaWYgKGE6c3RyMSA+IGE6c3RyMikKKyAgOglyZXR1cm4gMQorICA6ICBlbHNlCisgIDoJcmV0dXJuIDAKKyAgOiAgZW5kaWYKKyAgOmVuZGZ1bmN0aW9uCisKKyAgOiIgU29ydCBsaW5lcy4gIFNvcnRSKCkgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5LgorICA6ZnVuYyEgU29ydFIoc3RhcnQsIGVuZCwgY21wKQorICA6ICBpZiAoYTpzdGFydCA+PSBhOmVuZCkKKyAgOglyZXR1cm4KKyAgOiAgZW5kaWYKKyAgOiAgbGV0IHBhcnRpdGlvbiA9IGE6c3RhcnQgLSAxCisgIDogIGxldCBtaWRkbGUgPSBwYXJ0aXRpb24KKyAgOiAgbGV0IHBhcnRTdHIgPSBnZXRsaW5lKChhOnN0YXJ0ICsgYTplbmQpIC8gMikKKyAgOiAgbGV0IGkgPSBhOnN0YXJ0CisgIDogIHdoaWxlIChpIDw9IGE6ZW5kKQorICA6CWxldCBzdHIgPSBnZXRsaW5lKGkpCisgIDoJZXhlYyAibGV0IHJlc3VsdCA9ICIgLiBhOmNtcCAuICIoc3RyLCBwYXJ0U3RyKSIKKyAgOglpZiAocmVzdWx0IDw9IDApCisgIDoJICAgICIgTmVlZCB0byBwdXQgaXQgYmVmb3JlIHRoZSBwYXJ0aXRpb24uICBTd2FwIGxpbmVzIGkgYW5kIHBhcnRpdGlvbi4KKyAgOgkgICAgbGV0IHBhcnRpdGlvbiA9IHBhcnRpdGlvbiArIDEKKyAgOgkgICAgaWYgKHJlc3VsdCA9PSAwKQorICA6CQlsZXQgbWlkZGxlID0gcGFydGl0aW9uCisgIDoJICAgIGVuZGlmCisgIDoJICAgIGlmIChpICE9IHBhcnRpdGlvbikKKyAgOgkJbGV0IHN0cjIgPSBnZXRsaW5lKHBhcnRpdGlvbikKKyAgOgkJY2FsbCBzZXRsaW5lKGksIHN0cjIpCisgIDoJCWNhbGwgc2V0bGluZShwYXJ0aXRpb24sIHN0cikKKyAgOgkgICAgZW5kaWYKKyAgOgllbmRpZgorICA6CWxldCBpID0gaSArIDEKKyAgOiAgZW5kd2hpbGUKKworICA6ICAiIE5vdyB3ZSBoYXZlIGEgcG9pbnRlciB0byB0aGUgIm1pZGRsZSIgZWxlbWVudCwgYXMgZmFyIGFzIHBhcnRpdGlvbmluZworICA6ICAiIGdvZXMsIHdoaWNoIGNvdWxkIGJlIGFueXdoZXJlIGJlZm9yZSB0aGUgcGFydGl0aW9uLiAgTWFrZSBzdXJlIGl0IGlzIGF0CisgIDogICIgdGhlIGVuZCBvZiB0aGUgcGFydGl0aW9uLgorICA6ICBpZiAobWlkZGxlICE9IHBhcnRpdGlvbikKKyAgOglsZXQgc3RyID0gZ2V0bGluZShtaWRkbGUpCisgIDoJbGV0IHN0cjIgPSBnZXRsaW5lKHBhcnRpdGlvbikKKyAgOgljYWxsIHNldGxpbmUobWlkZGxlLCBzdHIyKQorICA6CWNhbGwgc2V0bGluZShwYXJ0aXRpb24sIHN0cikKKyAgOiAgZW5kaWYKKyAgOiAgY2FsbCBTb3J0UihhOnN0YXJ0LCBwYXJ0aXRpb24gLSAxLCBhOmNtcCkKKyAgOiAgY2FsbCBTb3J0UihwYXJ0aXRpb24gKyAxLCBhOmVuZCwgYTpjbXApCisgIDplbmRmdW5jCisKKyAgOiIgVG8gU29ydCBhIHJhbmdlIG9mIGxpbmVzLCBwYXNzIHRoZSByYW5nZSB0byBTb3J0KCkgYWxvbmcgd2l0aCB0aGUgbmFtZSBvZiBhCisgIDoiIGZ1bmN0aW9uIHRoYXQgd2lsbCBjb21wYXJlIHR3byBsaW5lcy4KKyAgOmZ1bmMhIFNvcnQoY21wKSByYW5nZQorICA6ICBjYWxsIFNvcnRSKGE6Zmlyc3RsaW5lLCBhOmxhc3RsaW5lLCBhOmNtcCkKKyAgOmVuZGZ1bmMKKworICA6IiA6U29ydCB0YWtlcyBhIHJhbmdlIG9mIGxpbmVzIGFuZCBzb3J0cyB0aGVtLgorICA6Y29tbWFuZCEgLW5hcmdzPTAgLXJhbmdlIFNvcnQgPGxpbmUxPiw8bGluZTI+Y2FsbCBTb3J0KCJTdHJjbXAiKQorPAorCQkJCQkJCSpzc2NhbmYqCitUaGVyZSBpcyBubyBzc2NhbmYoKSBmdW5jdGlvbiBpbiBWaW0uICBJZiB5b3UgbmVlZCB0byBleHRyYWN0IHBhcnRzIGZyb20gYQorbGluZSwgeW91IGNhbiB1c2UgbWF0Y2hzdHIoKSBhbmQgc3Vic3RpdHV0ZSgpIHRvIGRvIGl0LiAgVGhpcyBleGFtcGxlIHNob3dzCitob3cgdG8gZ2V0IHRoZSBmaWxlIG5hbWUsIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4gbnVtYmVyIG91dCBvZiBhIGxpbmUgbGlrZQorImZvb2Jhci50eHQsIDEyMywgNDUiLiA+CisgICA6IiBTZXQgdXAgdGhlIG1hdGNoIGJpdAorICAgOmxldCBteD0nXChcZlwrXCksXHMqXChcZFwrXCksXHMqXChcZFwrXCknCisgICA6ImdldCB0aGUgcGFydCBtYXRjaGluZyB0aGUgd2hvbGUgZXhwcmVzc2lvbgorICAgOmxldCBsID0gbWF0Y2hzdHIobGluZSwgbXgpCisgICA6ImdldCBlYWNoIGl0ZW0gb3V0IG9mIHRoZSBtYXRjaAorICAgOmxldCBmaWxlID0gc3Vic3RpdHV0ZShsLCBteCwgJ1wxJywgJycpCisgICA6bGV0IGxudW0gPSBzdWJzdGl0dXRlKGwsIG14LCAnXDInLCAnJykKKyAgIDpsZXQgY29sID0gc3Vic3RpdHV0ZShsLCBteCwgJ1wzJywgJycpCisKK1RoZSBpbnB1dCBpcyBpbiB0aGUgdmFyaWFibGUgImxpbmUiLCB0aGUgcmVzdWx0cyBpbiB0aGUgdmFyaWFibGVzICJmaWxlIiwKKyJsbnVtIiBhbmQgImNvbCIuIChpZGVhIGZyb20gTWljaGFlbCBHZWRkZXMpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTAuIE5vICtldmFsIGZlYXR1cmUJCQkJKm5vLWV2YWwtZmVhdHVyZSoKKworV2hlbiB0aGUgfCtldmFsfCBmZWF0dXJlIHdhcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUsIG5vbmUgb2YgdGhlIGV4cHJlc3Npb24KK2V2YWx1YXRpb24gY29tbWFuZHMgYXJlIGF2YWlsYWJsZS4gIFRvIHByZXZlbnQgdGhpcyBmcm9tIGNhdXNpbmcgVmltIHNjcmlwdHMKK3RvIGdlbmVyYXRlIGFsbCBraW5kcyBvZiBlcnJvcnMsIHRoZSAiOmlmIiBhbmQgIjplbmRpZiIgY29tbWFuZHMgYXJlIHN0aWxsCityZWNvZ25pemVkLCB0aG91Z2ggdGhlIGFyZ3VtZW50IG9mIHRoZSAiOmlmIiBhbmQgZXZlcnl0aGluZyBiZXR3ZWVuIHRoZSAiOmlmIgorYW5kIHRoZSBtYXRjaGluZyAiOmVuZGlmIiBpcyBpZ25vcmVkLiAgTmVzdGluZyBvZiAiOmlmIiBibG9ja3MgaXMgYWxsb3dlZCwgYnV0Citvbmx5IGlmIHRoZSBjb21tYW5kcyBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiAgVGhlICI6ZWxzZSIgY29tbWFuZCBpcyBub3QKK3JlY29nbml6ZWQuCisKK0V4YW1wbGUgb2YgaG93IHRvIGF2b2lkIGV4ZWN1dGluZyBjb21tYW5kcyB3aGVuIHRoZSB8K2V2YWx8IGZlYXR1cmUgaXMKK21pc3Npbmc6ID4KKworCTppZiAxCisJOiAgZWNobyAiRXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGNvbXBpbGVkIGluIgorCTplbHNlCisJOiAgZWNobyAiWW91IHdpbGwgX25ldmVyXyBzZWUgdGhpcyBtZXNzYWdlIgorCTplbmRpZgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzExLiBUaGUgc2FuZGJveAkJCQkJKmV2YWwtc2FuZGJveCogKnNhbmRib3gqICpFNDgqCisKK1RoZSAnZm9sZGV4cHInLCAnaW5jbHVkZWV4cHInLCAnaW5kZW50ZXhwcicsICdzdGF0dXNsaW5lJyBhbmQgJ2ZvbGR0ZXh0Jworb3B0aW9ucyBhcmUgZXZhbHVhdGVkIGluIGEgc2FuZGJveC4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgYXJlIHByb3RlY3RlZCBmcm9tCit0aGVzZSBleHByZXNzaW9ucyBoYXZpbmcgbmFzdHkgc2lkZSBlZmZlY3RzLiAgVGhpcyBnaXZlcyBzb21lIHNhZmV0eSBmb3Igd2hlbgordGhlc2Ugb3B0aW9ucyBhcmUgc2V0IGZyb20gYSBtb2RlbGluZS4gIEl0IGlzIGFsc28gdXNlZCB3aGVuIHRoZSBjb21tYW5kIGZyb20KK2EgdGFncyBmaWxlIGlzIGV4ZWN1dGVkLgorVGhpcyBpcyBub3QgZ3VhcmFudGVlZCAxMDAlIHNlY3VyZSwgYnV0IGl0IHNob3VsZCBibG9jayBtb3N0IGF0dGFja3MuCisKK1RoZXNlIGl0ZW1zIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgc2FuZGJveDoKKwktIGNoYW5naW5nIHRoZSBidWZmZXIgdGV4dAorCS0gZGVmaW5pbmcgb3IgY2hhbmdpbmcgbWFwcGluZywgYXV0b2NvbW1hbmRzLCBmdW5jdGlvbnMsIHVzZXIgY29tbWFuZHMKKwktIHNldHRpbmcgY2VydGFpbiBvcHRpb25zIChzZWUgfG9wdGlvbi1zdW1tYXJ5fCkKKwktIGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQKKwktIHJlYWRpbmcgb3Igd3JpdGluZyBhIGZpbGUKKwktIGp1bXBpbmcgdG8gYW5vdGhlciBidWZmZXIgb3IgZWRpdGluZyBhIGZpbGUKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2aW0uMSBiL3J1bnRpbWUvZG9jL2V2aW0uMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI1ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZXZpbS4xCkBAIC0wLDAgKzEsNDkgQEAKKy5USCBFVklNIDEgIjIwMDIgRmVicnVhcnkgMTYiCisuU0ggTkFNRQorZXZpbSBcLSBlYXN5IFZpbSwgZWRpdCBhIGZpbGUgd2l0aCBWaW0gYW5kIHNldHVwIGZvciBtb2RlbGVzcyBlZGl0aW5nCisuU0ggU1lOT1BTSVMKKy5icgorLkIgZXZpbQorW29wdGlvbnNdIFtmaWxlIC4uXQorLmJyCisuQiBldmlldworLlNIIERFU0NSSVBUSU9OCisuQiBlVmltCitzdGFydHMKKy5CIFZpbQorYW5kIHNldHMgb3B0aW9ucyB0byBtYWtlIGl0IGJlaGF2ZSBsaWtlIGEgbW9kZWxlc3MgZWRpdG9yLgorVGhpcyBpcyBzdGlsbCBWaW0gYnV0IHVzZWQgYXMgYSBwb2ludC1hbmQtY2xpY2sgZWRpdG9yLgorVGhpcyBmZWVscyBhIGxvdCBsaWtlIHVzaW5nIE5vdGVwYWQgb24gTVMtV2luZG93cy4KKy5CIGVWaW0KK3dpbGwgYWx3YXlzIHJ1biBpbiB0aGUgR1VJLCB0byBlbmFibGUgdGhlIHVzZSBvZiBtZW51cyBhbmQgdG9vbGJhci4KKy5QUAorT25seSB0byBiZSB1c2VkIGZvciBwZW9wbGUgd2hvIHJlYWxseSBjYW4ndCB3b3JrIHdpdGggVmltIGluIHRoZSBub3JtYWwgd2F5LgorRWRpdGluZyB3aWxsIGJlIG11Y2ggbGVzcyBlZmZpY2llbnQuCisuUFAKKy5CIGV2aWV3CitpcyB0aGUgc2FtZSwgYnV0IHN0YXJ0cyBpbiByZWFkLW9ubHkgbW9kZS4gIEl0IHdvcmtzIGp1c3QgbGlrZSBldmltIC1SLgorLlBQCitTZWUgdmltKDEpIGZvciBkZXRhaWxzIGFib3V0IFZpbSwgb3B0aW9ucywgZXRjLgorLlBQCitUaGUgJ2luc2VydG1vZGUnIG9wdGlvbiBpcyBzZXQgdG8gYmUgYWJsZSB0byB0eXBlIHRleHQgZGlyZWN0bHkuCisuYnIKK01hcHBpbmdzIGFyZSBzZXR1cCB0byBtYWtlIENvcHkgYW5kIFBhc3RlIHdvcmsgd2l0aCB0aGUgTVMtV2luZG93cyBrZXlzLgorQ1RSTC1YIGN1dHMgdGV4dCwgQ1RSTC1DIGNvcGllcyB0ZXh0IGFuZCBDVFJMLVYgcGFzdGVzIHRleHQuCitVc2UgQ1RSTC1RIHRvIG9idGFpbiB0aGUgb3JpZ2luYWwgbWVhbmluZyBvZiBDVFJMLVYuCisuU0ggT1BUSU9OUworU2VlIHZpbSgxKS4KKy5TSCBGSUxFUworLlRQIDE1CisvdXNyL2xvY2FsL2xpYi92aW0vZXZpbS52aW0KK1RoZSBzY3JpcHQgbG9hZGVkIHRvIGluaXRpYWxpemUgZVZpbS4KKy5TSCBBS0EKK0Fsc28gS25vd24gQXMgIlZpbSBmb3IgZ3VtYmllcyIuCitXaGVuIHVzaW5nIGV2aW0geW91IGFyZSBleHBlY3RlZCB0byB0YWtlIGEgaGFuZGtlcmNoaWVmLAorbWFrZSBhIGtub3QgaW4gZWFjaCBjb3JuZXIgYW5kIHdlYXIgaXQgb24geW91ciBoZWFkLgorLlNIIFNFRSBBTFNPCit2aW0oMSkKKy5TSCBBVVRIT1IKK01vc3Qgb2YKKy5CIFZpbQord2FzIG1hZGUgYnkgQnJhbSBNb29sZW5hYXIsIHdpdGggYSBsb3Qgb2YgaGVscCBmcm9tIG90aGVycy4KK1NlZSB0aGUgSGVscC9DcmVkaXRzIG1lbnUuCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9mYXJzaS50eHQgYi9ydW50aW1lL2RvYy9mYXJzaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwMjcwOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2ZhcnNpLnR4dApAQCAtMCwwICsxLDI2OSBAQAorKmZhcnNpLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIE9jdCAyOQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBNb3J0YXphIEdoYXNzYWIgU2hpcmFuCisKKworUmlnaHQgdG8gTGVmdCBhbmQgRmFyc2kgTWFwcGluZyBmb3IgVmltCQkqZmFyc2kqICpGYXJzaSoKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCisJCQkJCQkqRTI3KgorSW4gb3JkZXIgdG8gdXNlIHJpZ2h0LXRvLWxlZnQgYW5kIEZhcnNpIG1hcHBpbmcgc3VwcG9ydCwgaXQgaXMgbmVjZXNzYXJ5IHRvCitjb21waWxlIFZpbSB3aXRoIHRoZSB8K2ZhcnNpfCBmZWF0dXJlLgorCitUaGVzZSBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1hZGUgYnkgTW9ydGF6YSBHLiBTaGlyYW4gPHNoaXJhbkBqcHMubmV0PgorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCitJbiByaWdodC10by1sZWZ0IG9yaWVudGVkIGZpbGVzIHRoZSBjaGFyYWN0ZXJzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGZyb20gcmlnaHQKK3RvIGxlZnQuICBUaGlzIGtpbmQgb2YgZmlsZSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHdyaXRpbmcgRmFyc2kgZG9jdW1lbnRzLAorY29tcG9zaW5nIGZheGVzIG9yIHdyaXRpbmcgRmFyc2kgbWVtb3MuCisKK1RoZSBjb21tYW5kcywgcHJvbXB0cyBhbmQgaGVscCBmaWxlcyBhcmUgbm90IGluIEZhcnNpLCB0aGVyZWZvcmUgdGhlIHVzZXIKK2ludGVyZmFjZSByZW1haW5zIHRoZSBzdGFuZGFyZCBWaSBpbnRlcmZhY2UuCisKKworSGlnaGxpZ2h0cworLS0tLS0tLS0tLQorbyAgRWRpdGluZyBsZWZ0LXRvLXJpZ2h0IGZpbGVzIGFzIGluIHRoZSBvcmlnaW5hbCBWaW0sIG5vIGNoYW5nZS4KKworbyAgVmlld2luZyBhbmQgZWRpdGluZyBmaWxlcyBpbiByaWdodC10by1sZWZ0IHdpbmRvd3MuICAgRmlsZSBvcmllbnRhdGlvbiBpcworICAgcGVyIHdpbmRvdywgc28gaXQgaXMgcG9zc2libGUgdG8gdmlldyB0aGUgc2FtZSBmaWxlIGluIHJpZ2h0LXRvLWxlZnQgYW5kCisgICBsZWZ0LXRvLXJpZ2h0IG1vZGVzLCBzaW11bHRhbmVvdXNseS4KKworbyAgQ29tcGF0aWJpbGl0eSB0byB0aGUgb3JpZ2luYWwgVmltLiAgIEFsbW9zdCBhbGwgZmVhdHVyZXMgd29yayBpbgorICAgcmlnaHQtdG8tbGVmdCBtb2RlIChzZWUgYnVncyBiZWxvdykuCisKK28gIENoYW5naW5nIGtleWJvYXJkIG1hcHBpbmcgYW5kIHJldmVyc2UgaW5zZXJ0IG1vZGVzIHVzaW5nIGEgc2luZ2xlCisgICBjb21tYW5kLgorCitvICBCYWNraW5nIGZyb20gcmV2ZXJzZSBpbnNlcnQgbW9kZSB0byB0aGUgY29ycmVjdCBwbGFjZSBpbiB0aGUgZmlsZQorICAgKGlmIHBvc3NpYmxlKS4KKworbyAgV2hpbGUgaW4gRmFyc2kgbW9kZSwgbnVtYmVycyBhcmUgZW50ZXJlZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFVwb24gZW50ZXJpbmcKKyAgIGEgbm9uZSBudW1iZXIgY2hhcmFjdGVyLCB0aGF0IGNoYXJhY3RlciB3aWxsIGJlIGluc2VydGVkIGp1c3QgaW50byB0aGUKKyAgIGxlZnQgb2YgdGhlIGxhc3QgbnVtYmVyLgorCitvICBObyBzcGVjaWFsIHRlcm1pbmFsIHdpdGggcmlnaHQtdG8tbGVmdCBjYXBhYmlsaXRpZXMgaXMgcmVxdWlyZWQuICBUaGUKKyAgIHJpZ2h0LXRvLWxlZnQgY2hhbmdlcyBhcmUgY29tcGxldGVseSBoYXJkd2FyZSBpbmRlcGVuZGVudC4gIE9ubHkKKyAgIEZhcnNpIGZvbnQgaXMgbmVjZXNzYXJ5LgorCitvICBGYXJzaSBrZXltYXBwaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gcmV2ZXJzZSBpbnNlcnQgbW9kZS4KKworbyAgVG9nZ2xpbmcgYmV0d2VlbiBsZWZ0LXRvLXJpZ2h0IGFuZCByaWdodC10by1sZWZ0IHZpYSBGOCBmdW5jdGlvbiBrZXkuCisKK28gIFRvZ2dsaW5nIGJldHdlZW4gRmFyc2kgSVNJUi0zMzQyIHN0YW5kYXJkIGVuY29kaW5nIGFuZCBWSU0gRmFyc2kgdmlhIEY5CisgICBmdW5jdGlvbiBrZXkuIFNpbmNlIHRoaXMgbWFrZXMgc2Vuc2Ugb25seSBmb3IgdGhlIHRleHQgd3JpdHRlbiBpbgorICAgcmlnaHQtdG8tbGVmdCBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gc3VwcG9ydGVkIG9ubHkgaW4gcmlnaHQtdG8tbGVmdAorICAgbW9kZS4KKworRmFyc2kgRm9udHMJCQkJCSpmYXJzaSBmb250cyoKKy0tLS0tLS0tLS0tCisKK0lmIHRoZSAiZXh0cmEiIGFyY2hpdmUgaGFzIGJlZW4gdW5wYWNrZWQsIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGZvdW5kIGluIHRoZQorc3ViZGlyZWN0b3JpZXMgb2YgdGhlICckVklNL2ZhcnNpJyBkaXJlY3Rvcnk6CisKKyAgICsgIGZhci1hMDEucGNmICAgIFggV2luZG93cyBmb250cyBmb3IgVW5peCBpbmNsdWRpbmcgTGludXggc3lzdGVtcworICAgKyAgZmFyLWEwMS5iZiAgICAgWCBXaW5kb3dzIGZvbnRzIGZvciBTdW5PcworICAgKyAgZmFyLWEwMS5mMTYgICAgYSBzY3JlZW4gZm9udHMgZm9yIFVuaXggaW5jbHVkaW5nIExpbnV4IHN5c3RlbXMKKyAgICsgIGZhci1hMDEuZm9uICAgIGEgbW9ub3NwYWNlZCBmb250cyBmb3IgV2luZG93cyBOVC85NS85OAorICAgKyAgZmFyLWEwMS5jb20gICAgYSBzY3JlZW4gZm9udHMgZm9yIERPUworCisKK0ZvbnQgSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCitvICBJbnN0YWxsYXRpb24gb2YgZm9udHMgZm9yIE1TIFdpbmRvdyBzeXN0ZW1zIChOVC85NS85OCkKKworICAgRnJvbSAnQ29udHJvbCBQYW5lbCcgZm9sZGVyLCBzdGFydCB0aGUgJ0ZvbnRzJyBwcm9ncmFtLiBUaGVuIGZyb20gJ2ZpbGUnCisgICBtZW51IGl0ZW0gc2VsZWN0ICdJbnN0YWxsIE5ldyBGb250cyAuLi4nLiBCcm93c2UgYW5kIHNlbGVjdCB0aGUKKyAgICdmYXItYTAxLmZvbicsIHRoZW4gZm9sbG93IHRoZSBpbnN0YWxsYXRpb24gZ3VpZGUuCisgICBOT1RFOiBzZXZlcmFsIHBlb3BsZSBoYXZlIHJlcG9ydGVkIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrLiAgVGhlIHNvbHV0aW9uCisgICBpcyB1bmtub3duLgorCitvICBJbnN0YWxsYXRpb24gb2YgZm9udHMgZm9yIFggV2luZG93IHN5c3RlbXMgKFVuaXgvTGludXgpCisKKyAgIERlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSwgY29weSBmYXItYTAxLnBjZi5aIG9yIGZhci1hMDEucGNmLmd6IGludG8gYQorICAgZGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLiAgQ2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRmFyc2kKKyAgIGZvbnRzIGFuZCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgID4gIG1rZm9udGRpcgorICAgPiAgeHNldCArZnAgcGF0aF9uYW1lX29mX2ZhcnNpX2ZvbnRzX2RpcmVjdG9yeQorCitvICBJbnN0YWxsYXRpb24gb2YgZm9udHMgZm9yIFggV2luZG93IHN5c3RlbXMgKFN1bk9zKQorCisgICBDb3B5IGZhci1hMDEuYmYgZm9udCBpbnRvIGEgZGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLgorICAgQ2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmFyLWEwMS5mYiBmb250cyBhbmQKKyAgIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworICAgPiAgZmxkZmFtaWx5CisgICA+ICB4c2V0ICtmcCBwYXRoX25hbWVfb2ZfZm9udHNfZGlyZWN0b3J5CisKK28gIEluc3RhbGxhdGlvbiBvZiBBU0NJSSBzY3JlZW4gZm9udHMgKFVuaXgvTGludXgpCisKKyAgIEZvciBMaW51eCBzeXN0ZW0sIGNvcHkgdGhlIGZhci1hMDEuZjE2IGZvbnRzIGludG8gL3Vzci9saWIva2JkL2NvbnNvbGVmb250cworICAgZGlyZWN0b3J5IGFuZCBleGVjdXRlIHRoZSBzZXRmb250IHByb2dyYW0gYXMgInNldGZvbnQgZmFyLWEwMS5mMTYiLiBGb3IKKyAgIG90aGVyIHN5c3RlbXMgKGUuZy4gU0NPIFVuaXgpLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGZvbnRzIGluc3RhbGxhdGlvbgorICAgc2VjdGlvbiBvZiB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiBtYW51YWxzLgorCitvICBJbnN0YWxsYXRpb24gb2YgQVNDSUkgc2NyZWVuIGZvbnRzIChET1MpCisKKyAgIEFmdGVyIHN5c3RlbSBwb3dlciBvbiwgcHJpb3IgdG8gdGhlIGZpcnN0IHVzZSBvZiBWSU0sIHVwbG9hZCB0aGUgRmFyc2kKKyAgIGZvbnRzIGJ5IGV4ZWN1dGluZyB0aGUgZmFyLWEwMS5jb20gZm9udCB1cGxvYWRpbmcgcHJvZ3JhbS4KKworCitVc2FnZQorLS0tLS0KK1ByaW9yIHRvIHN0YXJ0aW5nIFZJTSwgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIFZJTSBjYW4gcnVuIGluIEZhcnNpIG1vZGUsCittdXN0IGJlIHNldC4gIEluIGFkZGl0aW9uIHRvIGluc3RhbGxhdGlvbiBvZiBGYXJzaSBmb250cywgZm9sbG93aW5nIHBvaW50cworcmVmZXIgdG8gc29tZSBvZiB0aGUgc3lzdGVtIGVudmlyb25tZW50cywgd2hpY2ggeW91IG1heSBuZWVkIHRvIHNldDoKK0tleSBjb2RlIG1hcHBpbmcsIGxvYWRpbmcgZ3JhcGhpYyBjYXJkIGluIEFTQ0lJIHNjcmVlbiBtb2RlLCBzZXR0aW5nIHRoZSBJTworZHJpdmVyIGluIDggYml0IGNsZWFuIG1vZGUgLi4uIC4KKworbyAgU2V0dGluZyB0aGUgRmFyc2kgZm9udHMKKworICAgKyAgRm9yIFZJTSBHVUkgc2V0IHRoZSAnZ3VpZm9udCcgdG8gZmFyLWEwMS4gVGhpcyBpcyBkb25lIGJ5IGVudGVyaW5nCisgICAgICAnOnNldCBndWlmb250PWZhci1hMDEnIGluIHRoZSBWSU0gd2luZG93LgorCisgICAgICBZb3UgY2FuIGhhdmUgJ2d1aWZvbnQnIHNldCB0byBmYXItYTAxIGJ5IFZJTSBkdXJpbmcgdGhlIFZJTSBzdGFydHVwCisgICAgICBieSBhcHBlbmRpbmcgdGhlICc6c2V0IGd1aWZvbnQ9ZmFyLWEwMScgaW50byB5b3VyIC52aW1yYyBmaWxlCisgICAgICAoaW4gY2FzZSBvZiBOVC85NS85OCBwbGF0Zm9ybXMgX3ZpbXJjKS4KKworICAgICAgVW5kZXIgdGhlIFggV2luZG93IGVudmlyb25tZW50LCB5b3UgY2FuIGFsc28gc3RhcnQgdGhlIFZJTSB3aXRoCisgICAgICAnLWZuIGZhci1hMDEnIG9wdGlvbi4KKworICAgKyAgRm9yIHRoZSBWSU0gd2l0aGluIGEgeHRlcm0sIHN0YXJ0IGEgeHRlcm0gd2l0aCB0aGUgRmFyc2kgZm9udHMgKGUuZy4KKyAgICAgIGt0ZXJtIC1mbiBmYXItYTAxKS4gVGhlbiBzdGFydCB0aGUgVklNIGluc2lkZSB0aGUga3Rlcm0uCisKKyAgICsgIEZvciBWSU0gdW5kZXIgRE9TLCBwcmlvciB0byB0aGUgZmlyc3QgdXNhZ2Ugb2YgVklNLCB1cGxvYWQgdGhlIEZhcnNpCisgICAgICBmb250cyBieSBleGVjdXRpbmcgdGhlIGZhci1hMDEuY29tIGZvbnRzIHVwbG9hZGluZyBwcm9ncmFtLgorCitvICBGYXJzaSBLZXltYXBwaW5nIEFjdGl2YXRpb24KKworICAgVG8gYWN0aXZhdGUgdGhlIEZhcnNpIGtleW1hcHBpbmcsIHNldCBlaXRoZXIgJ2FsdGtleW1hcCcgb3IgJ2ZrbWFwJy4KKyAgIFRoaXMgaXMgZG9uZSBieSBlbnRlcmluZyAnOnNldCBha20nIG9yICc6c2V0IGZrJyBpbiB0aGUgVklNIHdpbmRvdy4KKyAgIFlvdSBjYW4gaGF2ZSAnYWx0a2V5bWFwJyBvciAnZmttYXAnIHNldCBhcyBkZWZhdWx0IGJ5IGFwcGVuZGluZyAnOnNldCBha20nCisgICBvciAnOnNldCBmaycgaW4geW91ciAudmltcmMgZmlsZSBvciBfdmltcmMgaW4gY2FzZSBvZiBOVC85NS85OCBwbGF0Zm9ybXMuCisKKyAgIFRvIHR1cm4gb2ZmIHRoZSBGYXJzaSBrZXltYXBwaW5nIGFzIGEgZGVmYXVsdCBzZWNvbmQgbGFuZ3VhZ2Uga2V5bWFwcGluZywKKyAgIHJlc2V0IHRoZSAnYWx0a2V5bWFwJyBieSBlbnRlcmluZyAnOnNldCBub2FrbScuCisKK28gIHJpZ2h0LXRvLWxlZnQgRmFyc2kgTW9kZQorCisgICBCeSBkZWZhdWx0IFZJTSBzdGFydHMgaW4gTGVmdC10by1yaWdodCBtb2RlLiBGb2xsb3dpbmcgYXJlIHdheXMgdG8gY2hhbmdlCisgICB0aGUgd2luZG93IG9yaWVudGF0aW9uOgorCisgICArIFN0YXJ0IHRoZSBWSU0gd2l0aCAtRiBvcHRpb24gKGUuZy4gdmltIC1GIC4uLiApLgorCisgICArIFVzZSBGOCBmdW5jdGlvbiBrZXkgdG8gdG9nZ2xlIGJldHdlZW4gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdC4KKworICAgKyBXaGlsZSBpbiBMZWZ0LXRvLXJpZ2h0IG1vZGUsIGVudGVyICdzZXQgcmwnIGluIHRoZSBjb21tYW5kIGxpbmUgKCdybCcgaXMKKyAgICAgdGhlIGFiYnJldmlhdGlvbiBmb3IgcmlnaHRsZWZ0KS4KKworICAgKyBQdXQgdGhlICdzZXQgcmwnIGxpbmUgaW4geW91ciAnLnZpbXJjJyBmaWxlIHRvIHN0YXJ0IHRoZSAgVklNIGluCisgICAgIHJpZ2h0LXRvLWxlZnQgbW9kZSBwZXJtYW5lbnRseS4KKworRW5jb2RpbmcKKy0tLS0tLS0tCisKK1RoZSBsZXR0ZXIgZW5jb2RpbmcgdXNlZCBpcyB0aGUgVklNIGV4dGVuZGVkIElTSVItMzM0MiBzdGFuZGFyZCB3aXRoIGEgYnVpbHQKK2luIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYmV0d2VlbiBWSU0gZXh0ZW5kZWQgSVNJUi0zMzQyIGFuZCBJU0lSLTMzNDIgc3RhbmRhcmQuCisKK0ZvciBkb2N1bWVudCBwb3J0YWJpbGl0eSByZWFzb25zLCB0aGUgbGV0dGVyIGVuY29kaW5nIGlzIGtlcHQgdGhlIHNhbWUgYWNyb3NzCitkaWZmZXJlbnQgcGxhdGZvcm1zIChpLmUuIFVOSVgncywgTlQvOTUvOTgsIE1TIERPUywgLi4uKS4KKworCitvICBLZXlib2FyZAorCisgICArICBDVFJMLV8gaW4gaW5zZXJ0L3JlcGxhY2UgbW9kZXMgdG9nZ2xlcyBiZXR3ZWVuIEZhcnNpKGFrbSkvTGF0aW4KKyAgICAgIG1vZGUgYXMgZm9sbG93czoKKworICAgKyAgQ1RSTC1fIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgdHlwZWQgdGV4dCBpbiBlZGl0IG1vZGUuCisKKyAgICsgIENUUkwtXyBpbiBjb21tYW5kIG1vZGUgb25seSB0b2dnbGVzIGtleWJvYXJkIG1hcHBpbmcgYmV0d2VlbiBGYXJzaShha20pLworICAgICAgTGF0aW4uIFRoZSBGYXJzaSB0ZXh0IGlzIHRoZW4gZW50ZXJlZCBpbiByZXZlcnNlIGluc2VydCBtb2RlLgorCisgICArICBGOCAtIFRvZ2dsZXMgYmV0d2VlbiBsZWZ0LXRvLXJpZ2h0IGFuZCByaWdodC10by1sZWZ0LgorCisgICArICBGOSAtIFRvZ2dsZXMgdGhlIGVuY29kaW5nIGJldHdlZW4gSVNJUi0zMzQyIHN0YW5kYXJkIGFuZCBWSU0gZXh0ZW5kZWQKKyAgICAgIElTSVItMzM0MiAoc3VwcG9ydGVkIG9ubHkgaW4gcmlnaHQtdG8tbGVmdCBtb2RlKS4KKworICAgKyAgS2V5Ym9hcmQgbWFwcGluZyBpcyBiYXNlZCBvbiB0aGUgSXJhbmlhbiBJU0lSSS0yOTAxIHN0YW5kYXJkLgorICAgICAgRm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBrZXlib2FyZCBtYXBwaW5nIHdoaWxlIEZhcnNpKGFrbSkgbW9kZSBzZXQ6CisKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJYCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgMCAgLSAgPQorCaIgILEgILIgILMgILQgILUgILYgILcgILggILkgILAgIK0gIL0KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfiAgISAgQCAgIyAgJCAgJSAgXiAgJiAgKiAgKCAgKSAgXyAgKworCX4gIKMgIKcgIK4gIKQgIKUgIKogIKwgIOggIKggIKkgIOkgIKsKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcSAgdyAgZSAgciAgdCAgeiAgdSAgaSAgbyAgcCAgWyAgXQorCdMgINIgIMYgINkgINggINUgINYgIOAgIMogIMkgIMcgIIgKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUSAgVyAgRSAgUiAgVCAgWiAgVSAgSSAgTyAgUCAgeyAgfQorCfcgIPUgIPQgIPMgIPIgIP0gIPAgIPYgIFsgIF0gIHsgIH0KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJYSAgcyAgZCAgZiAgZyAgaCAgaiAgayAgbCAgOyAgJyAgXAorCdEgINAgIOEgIMMgINwgIMEgIMUgIN4gIN0gINogINsgIOsKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQSAgUyAgRCAgRiAgRyAgSCAgSiAgSyAgTCAgOiAgIiAgfAorCfkgIPugIP4gIPogIPggIMAgIPwgIOYgIOcgILogILsgIOoKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJPCAgeSAgeCAgYyAgdiAgYiAgbiAgbSAgLCAgLiAgLworCb4gINcgINQgIM4gIM0gIMwgIMsgIMQgIN8gIKYgIK8KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJPiAgWSAgWCAgQyAgViAgQiAgTiAgTSAgPCAgPiAgPworCbwgIPEgINQgIM8gIM0gIKEgIMsgIMIgIL4gILwgIL8KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6CisJoSAgc3RhbmRzIGZvciBGYXJzaSBQU1AgKGJyZWFrIHdpdGhvdXQgc3BhY2UpCisKKwmiICBzdGFuZHMgZm9yIEZhcnNpIFBDTiAoZm9yIEhBTVpFIGF0dHJpYnV0ZSApCisKK1Jlc3RyaWN0aW9ucworLS0tLS0tLS0tLS0tCisKK28gIEluIGluc2VydC9yZXBsYWNlIG1vZGUgYW5kIGZrbWFwIChGYXJzaSBtb2RlKSBzZXQsIENUUkwtQiBpcyBub3QKKyAgIHN1cHBvcnRlZC4KKworbyAgSWYgeW91IGNoYW5nZSB0aGUgY2hhcmFjdGVyIG1hcHBpbmcgYmV0d2VlbiBMYXRpbi9GYXJzaSwgdGhlIHJlZG8gYnVmZmVyCisgICB3aWxsIGJlIHJlc2V0IChlbXB0aWVkKS4gVGhhdCBpcywgcmVkbyBpcyB2YWxpZCBhbmQgd2lsbCBmdW5jdGlvbiAodXNpbmcKKyAgICcuJykgb25seSB3aXRoaW4gdGhlIG1vZGUgeW91IGFyZSBpbi4KKworbyAgV2hpbGUgbnVtYmVycyBhcmUgZW50ZXJlZCBpbiBGYXJzaSBtb2RlLCB0aGUgcmVkbyBidWZmZXIgd2lsbCBiZSByZXNldAorICAgKGVtcHRpZWQpLiBUaGF0IGlzLCB5b3UgY2FuIG5vdCByZWRvIHRoZSBsYXN0IGNoYW5nZXMgKHVzaW5nICcuJykgYWZ0ZXIKKyAgIGVudGVyaW5nIG51bWJlcnMuCisKK28gIFdoaWxlIGluIGxlZnQtdG8tcmlnaHQgYW5kIEZhcnNpIG1vZGUgc2V0LCBDVFJMLVIgaXMgbm90IHN1cHBvcnRlZC4KKworbyAgV2hpbGUgaW4gcmlnaHQtdG8tbGVmdCBtb2RlLCB0aGUgc2VhcmNoIG9uICdMYXRpbicgcGF0dGVybiBkb2VzIG5vdCB3b3JrLAorICAgZXhjZXB0IGlmIHlvdSBlbnRlciB0aGUgTGF0aW4gc2VhcmNoIHBhdHRlcm4gaW4gcmV2ZXJzZS4KKworbyAgSW4gdGhlIGNvbW1hbmQgbW9kZSwgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgZW50ZXJpbmcgdGhlIG51bWJlcnMgZnJvbSBsZWZ0CisgICB0byByaWdodCBhbmQgYWxzbyBmb3IgdGhlIHNha2Ugb2YgdGhlIGZsZXhpYmlsaXR5IHRoZSBrZXltYXBwaW5nIGxvZ2ljIGlzCisgICByZXN0cmljdGVkLgorCitvICBVbmRlciBYIFdpbmRvdyBlbnZpcm9ubWVudCwgaWYgeW91IHdhbnQgdG8gcnVuIHRoZSBWSU0gd2l0aGluIGEgeHRlcm0KKyAgIHRlcm1pbmFsIGVtdWxhdG9yIGFuZCBGYXJzaSBtb2RlIHNldCwgeW91IG5lZWQgdG8gaGF2ZSBhbiBBTlNJIGNvbXBhdGlibGUKKyAgIHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxldHRlciBjb2RlcyBhYm92ZSAxMjggZGVjaW1hbAorICAgaGF2ZSBjZXJ0YWluIG1lYW5pbmdzIGluIHRoZSBzdGFuZGFyZCB4dGVybSB0ZXJtaW5hbCBlbXVsYXRvci4KKworICAgTm90ZTogVW5kZXIgWCBXaW5kb3cgZW52aXJvbm1lbnQsIFZJTSBHVUkgd29ya3MgZmluZSBpbiBGYXJzaSBtb2RlLgorCSBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgb2YgYW55IHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yLgorCisKK0J1Z3MKKy0tLS0KK1doaWxlIGluIGluc2VydC9yZXBsYWNlIGFuZCBGYXJzaSBtb2RlIHNldCwgaWYgeW91IHJlcGVhdGVkbHkgY2hhbmdlIHRoZQorY3Vyc29yIHBvc2l0aW9uICh2aWEgY3Vyc29yIG1vdmVtZW50KSBhbmQgZW50ZXIgbmV3IHRleHQgYW5kIHRoZW4gdHJ5IHRvIHVuZG8KK3RoZSBsYXN0IGNoYW5nZSwgdGhlIHVuZG8gd2lsbCBsYWcgb25lIGNoYW5nZSBiZWhpbmQuICBCdXQgYXMgeW91IGNvbnRpbnVlIHRvCit1bmRvLCB5b3Ugd2lsbCByZWFjaCB0aGUgb3JpZ2luYWwgbGluZSBvZiB0ZXh0LiBZb3UgY2FuIGFsc28gdXNlIFUgdG8gdW5kbyBhbGwKK2NoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCBsaW5lLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVncyByZWZlciB0byByaWxlZnQudHh0LgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZmlsZXR5cGUudHh0IGIvcnVudGltZS9kb2MvZmlsZXR5cGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTVkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9maWxldHlwZS50eHQKQEAgLTAsMCArMSw1MjkgQEAKKypmaWxldHlwZS50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDUKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitGaWxldHlwZXMJCQkJCQkqZmlsZXR5cGUqICpmaWxlLXR5cGUqCisKKzEuIEZpbGV0eXBlcwkJCQkJfGZpbGV0eXBlc3wKKzIuIEZpbGV0eXBlIHBsdWdpbgkJCQl8ZmlsZXR5cGUtcGx1Z2luc3wKKzMuIERvY3MgZm9yIHRoZSBkZWZhdWx0IGZpbGV0eXBlIHBsdWdpbnMuCXxmdHBsdWdpbi1kb2NzfAorCitBbHNvIHNlZSB8YXV0b2NtZC50eHR8LgorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gRmlsZXR5cGVzCQkJCQkqZmlsZXR5cGVzKiAqZmlsZS10eXBlcyoKKworVmltIGNhbiBkZXRlY3QgdGhlIHR5cGUgb2YgZmlsZSB0aGF0IGlzIGVkaXRlZC4gIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUKK2ZpbGUgbmFtZSBhbmQgc29tZXRpbWVzIGJ5IGluc3BlY3RpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGZvciBzcGVjaWZpYwordGV4dC4KKworCQkJCQkJCSo6ZmlsZXR5cGUqICo6ZmlsZXQqCitUbyBlbmFibGUgZmlsZSB0eXBlIGRldGVjdGlvbiwgdXNlIHRoaXMgY29tbWFuZCBpbiB5b3VyIHZpbXJjOiA+CisJOmZpbGV0eXBlIG9uCitFYWNoIHRpbWUgYSBuZXcgb3IgZXhpc3RpbmcgZmlsZSBpcyBlZGl0ZWQsIFZpbSB3aWxsIHRyeSB0byByZWNvZ25pemUgdGhlIHR5cGUKK29mIHRoZSBmaWxlIGFuZCBzZXQgdGhlICdmaWxldHlwZScgb3B0aW9uLiAgVGhpcyB3aWxsIHRyaWdnZXIgdGhlIEZpbGVUeXBlCitldmVudCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nLCBzZXQgb3B0aW9ucywgZXRjLgorCitOT1RFOiBGaWxldHlwZXMgYW5kICdjb21wYXRpYmxlJyBkb24ndCB3b3JrIHRvZ2V0aGVyIHdlbGwsIHNpbmNlIGJlaW5nIFZpCitjb21wYXRpYmxlIG1lYW5zIG9wdGlvbnMgYXJlIGdsb2JhbC4gIFJlc2V0dGluZyAnY29tcGF0aWJsZScgaXMgcmVjb21tZW5kZWQsCitpZiB5b3UgZGlkbid0IGRvIHRoYXQgYWxyZWFkeS4KKworRGV0YWlsOiBUaGUgIjpmaWxldHlwZSBvbiIgY29tbWFuZCB3aWxsIGxvYWQgb25lIG9mIHRoZXNlIGZpbGVzOgorCQlBbWlnYQkgICAgJFZJTVJVTlRJTUUvZmlsZXR5cGUudmltCisJCU1hYwkgICAgJFZJTVJVTlRJTUU6ZmlsZXR5cGUudmltCisJCU1TLURPUwkgICAgJFZJTVJVTlRJTUVcZmlsZXR5cGUudmltCisJCVJpc2NPUwkgICAgVmltOkZpbGV0eXBlCisJCVVuaXgJICAgICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbQorCQlWTVMJICAgICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbQorCVRoaXMgZmlsZSBpcyBhIFZpbSBzY3JpcHQgdGhhdCBkZWZpbmVzIGF1dG9jb21tYW5kcyBmb3IgdGhlCisJQnVmTmV3RmlsZSBhbmQgQnVmUmVhZCBldmVudHMuICBJZiB0aGUgZmlsZSB0eXBlIGlzIG5vdCBmb3VuZCBieSB0aGUKKwluYW1lLCB0aGUgZmlsZSAkVklNUlVOVElNRS9zY3JpcHRzLnZpbSBpcyB1c2VkIHRvIGRldGVjdCBpdCBmcm9tIHRoZQorCWNvbnRlbnRzIG9mIHRoZSBmaWxlLgorCitUbyBhZGQgeW91ciBvd24gZmlsZSB0eXBlcywgc2VlIHxuZXctZmlsZXR5cGV8IGJlbG93LgorCitJZiB0aGUgZmlsZSB0eXBlIGlzIG5vdCBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBvciBpdCBmaW5kcyB0aGUgd3JvbmcgdHlwZSwKK3lvdSBjYW4gZWl0aGVyIHNldCB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24gbWFudWFsbHksIG9yIGFkZCBhIG1vZGVsaW5lIHRvIHlvdXIKK2ZpbGUuICBFeGFtcGxlLCBmb3IgaW4gYW4gSURMIGZpbGUgdXNlIHRoZSBjb21tYW5kOiA+CisJOnNldCBmaWxldHlwZT1pZGwKK29yIGFkZCB0aGlzIHxtb2RlbGluZXwgdG8gdGhlIGZpbGU6ID4KKwkvKiB2aW06IHNldCBmaWxldHlwZT1pZGwgOiAqLworPAorCQkJCQkJKjpmaWxldHlwZS1wbHVnaW4tb24qCitZb3UgY2FuIGVuYWJsZSBsb2FkaW5nIHRoZSBwbHVnaW4gZmlsZXMgZm9yIHNwZWNpZmljIGZpbGUgdHlwZXMgd2l0aDogPgorCTpmaWxldHlwZSBwbHVnaW4gb24KK0lmIGZpbGV0eXBlIGRldGVjdGlvbiB3YXMgbm90IHN3aXRjaGVkIG9uIHlldCwgaXQgd2lsbCBiZSBhcyB3ZWxsLgorVGhpcyBhY3R1YWxseSBsb2FkcyB0aGUgZmlsZSAiZnRwbHVnaW4udmltIiBpbiAncnVudGltZXBhdGgnLgorVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4gYSBmaWxlIGlzIGVkaXRlZCBpdHMgcGx1Z2luIGZpbGUgaXMgbG9hZGVkIChpZiB0aGVyZQoraXMgb25lIGZvciB0aGUgZGV0ZWN0ZWQgZmlsZXR5cGUpLiB8ZmlsZXR5cGUtcGx1Z2lufAorCisJCQkJCQkqOmZpbGV0eXBlLXBsdWdpbi1vZmYqCitZb3UgY2FuIGRpc2FibGUgaXQgYWdhaW4gd2l0aDogPgorCTpmaWxldHlwZSBwbHVnaW4gb2ZmCitUaGUgZmlsZXR5cGUgZGV0ZWN0aW9uIGlzIG5vdCBzd2l0Y2hlZCBvZmYgdGhlbi4gIEJ1dCBpZiB5b3UgZG8gc3dpdGNoIG9mZgorZmlsZXR5cGUgZGV0ZWN0aW9uLCB0aGUgcGx1Z2lucyB3aWxsIG5vdCBiZSBsb2FkZWQgZWl0aGVyLgorVGhpcyBhY3R1YWxseSBsb2FkcyB0aGUgZmlsZSAiZnRwbHVnb2YudmltIiBpbiAncnVudGltZXBhdGgnLgorCisJCQkJCQkqOmZpbGV0eXBlLWluZGVudC1vbioKK1lvdSBjYW4gZW5hYmxlIGxvYWRpbmcgdGhlIGluZGVudCBmaWxlIGZvciBzcGVjaWZpYyBmaWxlIHR5cGVzIHdpdGg6ID4KKwk6ZmlsZXR5cGUgaW5kZW50IG9uCitJZiBmaWxldHlwZSBkZXRlY3Rpb24gd2FzIG5vdCBzd2l0Y2hlZCBvbiB5ZXQsIGl0IHdpbGwgYmUgYXMgd2VsbC4KK1RoaXMgYWN0dWFsbHkgbG9hZHMgdGhlIGZpbGUgImluZGVudC52aW0iIGluICdydW50aW1lcGF0aCcuCitUaGUgcmVzdWx0IGlzIHRoYXQgd2hlbiBhIGZpbGUgaXMgZWRpdGVkIGl0cyBpbmRlbnQgZmlsZSBpcyBsb2FkZWQgKGlmIHRoZXJlCitpcyBvbmUgZm9yIHRoZSBkZXRlY3RlZCBmaWxldHlwZSkuIHxpbmRlbnQtZXhwcmVzc2lvbnwKKworCQkJCQkJKjpmaWxldHlwZS1pbmRlbnQtb2ZmKgorWW91IGNhbiBkaXNhYmxlIGl0IGFnYWluIHdpdGg6ID4KKwk6ZmlsZXR5cGUgaW5kZW50IG9mZgorVGhlIGZpbGV0eXBlIGRldGVjdGlvbiBpcyBub3Qgc3dpdGNoZWQgb2ZmIHRoZW4uICBCdXQgaWYgeW91IGRvIHN3aXRjaCBvZmYKK2ZpbGV0eXBlIGRldGVjdGlvbiwgdGhlIGluZGVudCBmaWxlcyB3aWxsIG5vdCBiZSBsb2FkZWQgZWl0aGVyLgorVGhpcyBhY3R1YWxseSBsb2FkcyB0aGUgZmlsZSAiaW5kb2ZmLnZpbSIgaW4gJ3J1bnRpbWVwYXRoJy4KKworCQkJCQkJKjpmaWxldHlwZS1vZmYqCitUbyBkaXNhYmxlIGZpbGUgdHlwZSBkZXRlY3Rpb24sIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKwk6ZmlsZXR5cGUgb2ZmCitUaGlzIHdpbGwga2VlcCB0aGUgZmxhZ3MgZm9yICJwbHVnaW4iIGFuZCAiaW5kZW50IiwgYnV0IHNpbmNlIG5vIGZpbGUgdHlwZXMKK2FyZSBiZWluZyBkZXRlY3RlZCwgdGhleSB3b24ndCB3b3JrIHVudGlsIHRoZSBuZXh0ICI6ZmlsZXR5cGUgb24iLgorCisKK092ZXJ2aWV3OgkJCQkJKjpmaWxldHlwZS1vdmVydmlldyoKKworY29tbWFuZAkJCQlkZXRlY3Rpb24JcGx1Z2luCQlpbmRlbnQgfgorOmZpbGV0eXBlIG9uCQkJb24JCXVuY2hhbmdlZAl1bmNoYW5nZWQKKzpmaWxldHlwZSBvZmYJCQlvZmYJCXVuY2hhbmdlZAl1bmNoYW5nZWQKKzpmaWxldHlwZSBwbHVnaW4gb24JCW9uCQlvbgkJdW5jaGFuZ2VkCis6ZmlsZXR5cGUgcGx1Z2luIG9mZgkJdW5jaGFuZ2VkCW9mZgkJdW5jaGFuZ2VkCis6ZmlsZXR5cGUgaW5kZW50IG9uCQlvbgkJdW5jaGFuZ2VkCW9uCis6ZmlsZXR5cGUgaW5kZW50IG9mZgkJdW5jaGFuZ2VkCXVuY2hhbmdlZAlvZmYKKzpmaWxldHlwZSBwbHVnaW4gaW5kZW50IG9uCW9uCQlvbgkJb24KKzpmaWxldHlwZSBwbHVnaW4gaW5kZW50IG9mZgl1bmNoYW5nZWQJb2ZmCQlvZmYKKworVG8gc2VlIHRoZSBjdXJyZW50IHN0YXR1cywgdHlwZTogPgorCTpmaWxldHlwZQorVGhlIG91dHB1dCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOiA+CisJZmlsZXR5cGUgZGV0ZWN0aW9uOk9OICBwbHVnaW46T04gIGluZGVudDpPRkYKKworVGhlIGZpbGUgdHlwZXMgYXJlIGFsc28gdXNlZCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZy4gIElmIHRoZSAiOnN5bnRheCBvbiIKK2NvbW1hbmQgaXMgdXNlZCwgdGhlIGZpbGUgdHlwZSBkZXRlY3Rpb24gaXMgaW5zdGFsbGVkIHRvby4gIFRoZXJlIGlzIG5vIG5lZWQKK3RvIGRvICI6ZmlsZXR5cGUgb24iIGFmdGVyICI6c3ludGF4IG9uIi4KKworVG8gZGlzYWJsZSBvbmUgb2YgdGhlIGZpbGUgdHlwZXMsIGFkZCBhIGxpbmUgaW4gdGhlIHlvdXIgZmlsZXR5cGUgZmlsZSwgc2VlCit8cmVtb3ZlLWZpbGV0eXBlfC4KKworCQkJCQkJCSpmaWxldHlwZS1kZXRlY3QqCitUbyBkZXRlY3QgdGhlIGZpbGUgdHlwZSBhZ2FpbjogPgorCTpmaWxldHlwZSBkZXRlY3QKK1VzZSB0aGlzIGlmIHlvdSBzdGFydGVkIHdpdGggYW4gZW1wdHkgZmlsZSBhbmQgdHlwZWQgdGV4dCB0aGF0IG1ha2VzIGl0Citwb3NzaWJsZSB0byBkZXRlY3QgdGhlIGZpbGUgdHlwZS4gIEZvciBleGFtcGxlLCB3aGVuIHlvdSBlbnRlcmVkIHRoaXMgaW4gYQorc2hlbGwgc2NyaXB0OiAiIyEvYmluL2NzaCIuCisgICBXaGVuIGZpbGV0eXBlIGRldGVjdGlvbiB3YXMgb2ZmLCBpdCB3aWxsIGJlIGVuYWJsZWQgZmlyc3QsIGxpa2UgdGhlICJvbiIKK2FyZ3VtZW50IHdhcyB1c2VkLgorCisJCQkJCQkJKmZpbGV0eXBlLW92ZXJydWxlKgorV2hlbiB0aGUgc2FtZSBleHRlbnNpb24gaXMgdXNlZCBmb3IgdHdvIGZpbGV0eXBlcywgVmltIHRyaWVzIHRvIGd1ZXNzIHdoYXQKK2tpbmQgb2YgZmlsZSBpdCBpcy4gIFRoaXMgZG9lc24ndCBhbHdheXMgd29yay4gIEEgbnVtYmVyIG9mIGdsb2JhbCB2YXJpYWJsZXMKK2NhbiBiZSB1c2VkIHRvIG92ZXJydWxlIHRoZSBmaWxldHlwZSB1c2VkIGZvciBjZXJ0YWluIGV4dGVuc2lvbnM6CisKKwlmaWxlIG5hbWUJdmFyaWFibGUgfgorCSouYXNhCQlnOmZpbGV0eXBlX2FzYQl8YXNwdmJzLXN5bnRheHwgfGFzcHBlcmwtc3ludGF4fAorCSouYXNwCQlnOmZpbGV0eXBlX2FzcAl8YXNwdmJzLXN5bnRheHwgfGFzcHBlcmwtc3ludGF4fAorCSouYXNtCQlnOmFzbXN5bnRheAl8YXNtLXN5bnRheHwKKwkqLnByZwkJZzpmaWxldHlwZV9wcmcKKwkqLnBsCQlnOmZpbGV0eXBlX3BsCisJKi5pbmMJCWc6ZmlsZXR5cGVfaW5jCisJKi53CQlnOmZpbGV0eXBlX3cJfGN3ZWItc3ludGF4fAorCSouaQkJZzpmaWxldHlwZV9pCXxwcm9ncmVzcy1zeW50YXh8CisJKi5wCQlnOmZpbGV0eXBlX3AJfHBhc2NhbC1zeW50YXh8CisJKi5zaAkJZzpiYXNoX2lzX3NoCXxzaC1zeW50YXh8CisKKwkJCQkJCQkqZmlsZXR5cGUtaWdub3JlKgorVG8gYXZvaWQgdGhhdCBjZXJ0YWluIGZpbGVzIGFyZSBiZWluZyBpbnNwZWN0ZWQsIHRoZSBnOmZ0X2lnbm9yZV9wYXQgdmFyaWFibGUKK2lzIHVzZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgbGlrZSB0aGlzOiA+CisJOmxldCBnOmZ0X2lnbm9yZV9wYXQgPSAnXC5cKFpcfGd6XHxiejJcfHppcFx8dGd6XCkkJworVGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50cyBvZiBjb21wcmVzc2VkIGZpbGVzIGFyZSBub3QgaW5zcGVjdGVkLgorCisJCQkJCQkJKm5ldy1maWxldHlwZSoKK0lmIGEgZmlsZSB0eXBlIHRoYXQgeW91IHdhbnQgdG8gdXNlIGlzIG5vdCBkZXRlY3RlZCB5ZXQsIHRoZXJlIGFyZSB0aHJlZSB3YXlzCit0byBhZGQgaXQuICBJbiBhbnkgd2F5LCBpdCdzIGJldHRlciBub3QgbW9kaWZ5IHRoZSAkVklNUlVOVElNRS9maWxldHlwZS52aW0KK2ZpbGUuICBJdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdoZW4gaW5zdGFsbGluZyBhIG5ldyB2ZXJzaW9uIG9mIFZpbS4KKworQS4gSWYgeW91IHdhbnQgdG8gb3ZlcnJ1bGUgYWxsIGRlZmF1bHQgZmlsZSB0eXBlIGNoZWNrcy4KKyAgIFRoaXMgd29ya3MgYnkgd3JpdGluZyBvbmUgZmlsZSBmb3IgZWFjaCBmaWxldHlwZS4gIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdAorICAgbWVhbnMgdGhlcmUgY2FuIGJlIG1hbnkgZmlsZXMuICBUaGUgYWR2YW50YWdlIGlzIHRoYXQgeW91IGNhbiBzaW1wbHkgZHJvcAorICAgdGhpcyBmaWxlIGluIHRoZSByaWdodCBkaXJlY3RvcnkgdG8gbWFrZSBpdCB3b3JrLgorCisgICAxLiBDcmVhdGUgeW91ciB1c2VyIHJ1bnRpbWUgZGlyZWN0b3J5LiAgWW91IHdvdWxkIG5vcm1hbGx5IHVzZSB0aGUgZmlyc3QKKyAgICAgIGl0ZW0gb2YgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uLiAgVGhlbiBjcmVhdGUgdGhlIGRpcmVjdG9yeSAiZnRkZXRlY3QiCisgICAgICBpbnNpZGUgaXQuICBFeGFtcGxlIGZvciBVbml4OiA+CisJOiFta2RpciB+Ly52aW0KKwk6IW1rZGlyIH4vLnZpbS9mdGRldGVjdAorPAorICAgMi4gQ3JlYXRlIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGFuIGF1dG9jb21tYW5kIHRvIGRldGVjdCB0aGUgZmlsZSB0eXBlLgorICAgICAgRXhhbXBsZTogPgorCWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLm1pbmUJCXNldCBmaWxldHlwZT1taW5lCis8ICAgICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gImF1Z3JvdXAiIGNvbW1hbmQsIHRoaXMgaGFzIGFscmVhZHkgYmVlbiBkb25lCisgICAgICB3aGVuIHNvdXJjaW5nIHlvdXIgZmlsZS4gIFlvdSBjb3VsZCBhbHNvIHVzZSB0aGUgcGF0dGVybiAiKiIgYW5kIHRoZW4KKyAgICAgIGNoZWNrIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSB0byByZWNvZ25pemUgaXQuCisgICAgICBXcml0ZSB0aGlzIGZpbGUgYXMgIm1pbmUudmltIiBpbiB0aGUgImZ0ZGV0ZWN0IiBkaXJlY3RvcnkgaW4geW91ciB1c2VyCisgICAgICBydW50aW1lIGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCBmb3IgVW5peDogPgorCTp3IH4vLnZpbS9mdGRldGVjdC9taW5lLnZpbQorCis8ICAzLiBUbyB1c2UgdGhlIG5ldyBmaWxldHlwZSBkZXRlY3Rpb24geW91IG11c3QgcmVzdGFydCBWaW0uCisKKyAgIFRoZSBmaWxlcyBpbiB0aGUgImZ0ZGV0ZWN0IiBkaXJlY3RvcnkgYXJlIHVzZWQgYWZ0ZXIgYWxsIHRoZSBkZWZhdWx0CisgICBjaGVja3MsIHRodXMgdGhleSBjYW4gb3ZlcnJ1bGUgYSBwcmV2aW91c2x5IGRldGVjdGVkIGZpbGUgdHlwZS4KKworQi4gSWYgeW91IHdhbnQgdG8gZGV0ZWN0IHlvdXIgZmlsZSBhZnRlciB0aGUgZGVmYXVsdCBmaWxlIHR5cGUgY2hlY2tzLgorCisgICBUaGlzIHdvcmtzIGxpa2UgQSBhYm92ZSwgYnV0IGluc3RlYWQgb2Ygc2V0dGluZyAnZmlsZXR5cGUnIHVuY29uZGl0aW9uYWxseQorICAgdXNlICI6c2V0ZmlsZXR5cGUiLiAgVGhpcyB3aWxsIG9ubHkgc2V0ICdmaWxldHlwZScgaWYgbm8gZmlsZSB0eXBlIHdhcworICAgZGV0ZWN0ZWQgeWV0LiAgRXhhbXBsZTogPgorCWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnR4dAkJc2V0ZmlsZXR5cGUgdGV4dAorPAorICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgYWxyZWFkeSBkZXRlY3RlZCBmaWxlIHR5cGUgaW4geW91ciBjb21tYW5kLiAgRm9yCisgICBleGFtcGxlLCB0byB1c2UgdGhlIGZpbGUgdHlwZSAibXlwYXNjYWwiIHdoZW4gInBhc2NhbCIgaGFzIGJlZW4gZGV0ZWN0ZWQ6ID4KKwlhdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKgkJaWYgJmZ0ID09ICdwYXNjYWwnIHwgc2V0IGZ0PW15cGFzY2FsCisJCQkJCQkJCSAgICAgICB8IGVuZGlmCisKK0MuIElmIHlvdXIgZmlsZSB0eXBlIGNhbiBiZSBkZXRlY3RlZCBieSB0aGUgZmlsZSBuYW1lLgorICAgMS4gQ3JlYXRlIHlvdXIgdXNlciBydW50aW1lIGRpcmVjdG9yeS4gIFlvdSB3b3VsZCBub3JtYWxseSB1c2UgdGhlIGZpcnN0CisgICAgICBpdGVtIG9mIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbi4gIEV4YW1wbGUgZm9yIFVuaXg6ID4KKwk6IW1rZGlyIH4vLnZpbQorPAorICAgMi4gQ3JlYXRlIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGF1dG9jb21tYW5kcyB0byBkZXRlY3QgdGhlIGZpbGUgdHlwZS4KKyAgICAgIEV4YW1wbGU6ID4KKwkiIG15IGZpbGV0eXBlIGZpbGUKKwlpZiBleGlzdHMoImRpZF9sb2FkX2ZpbGV0eXBlcyIpCisJICBmaW5pc2gKKwllbmRpZgorCWF1Z3JvdXAgZmlsZXR5cGVkZXRlY3QKKwkgIGF1ISBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5taW5lCQlzZXRmaWxldHlwZSBtaW5lCisJICBhdSEgQnVmUmVhZCxCdWZOZXdGaWxlICoueHl6CQlzZXRmaWxldHlwZSBkcmF3aW5nCisJYXVncm91cCBFTkQKKzwgICAgIFdyaXRlIHRoaXMgZmlsZSBhcyAiZmlsZXR5cGUudmltIiBpbiB5b3VyIHVzZXIgcnVudGltZSBkaXJlY3RvcnkuICBGb3IKKyAgICAgIGV4YW1wbGUsIGZvciBVbml4OiA+CisJOncgfi8udmltL2ZpbGV0eXBlLnZpbQorCis8ICAzLiBUbyB1c2UgdGhlIG5ldyBmaWxldHlwZSBkZXRlY3Rpb24geW91IG11c3QgcmVzdGFydCBWaW0uCisKKyAgIFlvdXIgZmlsZXR5cGUudmltIHdpbGwgYmUgc291cmNlZCBiZWZvcmUgdGhlIGRlZmF1bHQgRmlsZVR5cGUgYXV0b2NvbW1hbmRzCisgICBoYXZlIGJlZW4gaW5zdGFsbGVkLiAgWW91ciBhdXRvY29tbWFuZHMgd2lsbCBtYXRjaCBmaXJzdCwgYW5kIHRoZQorICAgIjpzZXRmaWxldHlwZSIgY29tbWFuZCB3aWxsIG1ha2Ugc3VyZSB0aGF0IG5vIG90aGVyIGF1dG9jb21tYW5kcyB3aWxsIHNldAorICAgJ2ZpbGV0eXBlJyBhZnRlciB0aGlzLgorCQkJCQkJCSpuZXctZmlsZXR5cGUtc2NyaXB0cyoKK0QuIElmIHlvdXIgZmlsZXR5cGUgY2FuIG9ubHkgYmUgZGV0ZWN0ZWQgYnkgaW5zcGVjdGluZyB0aGUgY29udGVudHMgb2YgdGhlCisgICBmaWxlLgorCisgICAxLiBDcmVhdGUgeW91ciB1c2VyIHJ1bnRpbWUgZGlyZWN0b3J5LiAgWW91IHdvdWxkIG5vcm1hbGx5IHVzZSB0aGUgZmlyc3QKKyAgICAgIGl0ZW0gb2YgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uLiAgRXhhbXBsZSBmb3IgVW5peDogPgorCTohbWtkaXIgfi8udmltCis8CisgICAyLiBDcmVhdGUgYSB2aW0gc2NyaXB0IGZpbGUgZm9yIGRvaW5nIHRoaXMuICBFeGFtcGxlOiA+CisJaWYgZGlkX2ZpbGV0eXBlKCkJIiBmaWxldHlwZSBhbHJlYWR5IHNldC4uCisJICBmaW5pc2gJCSIgLi5kb24ndCBkbyB0aGVzZSBjaGVja3MKKwllbmRpZgorCWlmIGdldGxpbmUoMSkgPX4gJ14jIS4qXDxtaW5lXD4nCisJICBzZXRmaWxldHlwZSBtaW5lCisJZWxzZWlmIGdldGxpbmUoMSkgPX4/ICdcPGRyYXdpbmdcPicKKwkgIHNldGZpbGV0eXBlIGRyYXdpbmcKKwllbmRpZgorPCAgICAgU2VlICRWSU1SVU5USU1FL3NjcmlwdHMudmltIGZvciBtb3JlIGV4YW1wbGVzLgorICAgICAgV3JpdGUgdGhpcyBmaWxlIGFzICJzY3JpcHRzLnZpbSIgaW4geW91ciB1c2VyIHJ1bnRpbWUgZGlyZWN0b3J5LiAgRm9yCisgICAgICBleGFtcGxlLCBmb3IgVW5peDogPgorCTp3IH4vLnZpbS9zY3JpcHRzLnZpbQorPAorICAgMy4gVGhlIGRldGVjdGlvbiB3aWxsIHdvcmsgcmlnaHQgYXdheSwgbm8gbmVlZCB0byByZXN0YXJ0IFZpbS4KKworICAgWW91ciBzY3JpcHRzLnZpbSBpcyBsb2FkZWQgYmVmb3JlIHRoZSBkZWZhdWx0IGNoZWNrcyBmb3IgZmlsZSB0eXBlcywgd2hpY2gKKyAgIG1lYW5zIHRoYXQgeW91ciBydWxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBydWxlcyBpbgorICAgJFZJTVJVTlRJTUUvc2NyaXB0cy52aW0uCisKKwkJCQkJCSpyZW1vdmUtZmlsZXR5cGUqCitJZiBhIGZpbGUgdHlwZSBpcyBkZXRlY3RlZCB0aGF0IGlzIHdyb25nIGZvciB5b3UsIGluc3RhbGwgYSBmaWxldHlwZS52aW0gb3IKK3NjcmlwdHMudmltIHRvIGNhdGNoIGl0IChzZWUgYWJvdmUpLiAgWW91IGNhbiBzZXQgJ2ZpbGV0eXBlJyB0byBhIG5vbi1leGlzdGluZworbmFtZSB0byBhdm9pZCB0aGF0IGl0IHdpbGwgYmUgc2V0IGxhdGVyIGFueXdheTogPgorCTpzZXQgZmlsZXR5cGU9aWdub3JlZAorCitJZiB5b3UgYXJlIHNldHRpbmcgdXAgYSBzeXN0ZW0gd2l0aCBtYW55IHVzZXJzLCBhbmQgeW91IGRvbid0IHdhbnQgZWFjaCB1c2VyCit0byBhZGQvcmVtb3ZlIHRoZSBzYW1lIGZpbGV0eXBlcywgY29uc2lkZXIgd3JpdGluZyB0aGUgZmlsZXR5cGUudmltIGFuZAorc2NyaXB0cy52aW0gZmlsZXMgaW4gYSBydW50aW1lIGRpcmVjdG9yeSB0aGF0IGlzIHVzZWQgZm9yIGV2ZXJ5Ym9keS4gIENoZWNrCit0aGUgJ3J1bnRpbWVwYXRoJyBmb3IgYSBkaXJlY3RvcnkgdG8gdXNlLiAgSWYgdGhlcmUgaXNuJ3Qgb25lLCBzZXQKKydydW50aW1lcGF0aCcgaW4gdGhlIHxzeXN0ZW0tdmltcmN8LiAgQmUgY2FyZWZ1bCB0byBrZWVwIHRoZSBkZWZhdWx0CitkaXJlY3RvcmllcyEKKworCisJCQkJCQkqYXV0b2NtZC1vc2ZpbGV0eXBlcyoKK09uIG9wZXJhdGluZyBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgc3RvcmluZyBhIGZpbGUgdHlwZSB3aXRoIHRoZSBmaWxlLCB5b3UgY2FuCitzcGVjaWZ5IHRoYXQgYW4gYXV0b2NvbW1hbmQgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgaWYgdGhlIGZpbGUgaXMgb2YgYQorY2VydGFpbiB0eXBlLgorCitUaGUgYWN0dWFsIHR5cGUgY2hlY2tpbmcgZGVwZW5kcyBvbiB3aGljaCBwbGF0Zm9ybSB5b3UgYXJlIHJ1bm5pbmcgVmltCitvbjsgc2VlIHlvdXIgc3lzdGVtJ3MgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworVG8gdXNlIG9zZmlsZXR5cGUgY2hlY2tpbmcgaW4gYW4gYXV0b2NvbW1hbmQgeW91IHNob3VsZCBwdXQgYSBsaXN0IG9mIHR5cGVzIHRvCittYXRjaCBpbiBhbmdsZSBicmFja2V0cyBpbiBwbGFjZSBvZiBhIHBhdHRlcm4sIGxpa2UgdGhpczogPgorCisJOmF1IEJ1ZlJlYWQgKi5odG1sLDwmZmFmO0hUTUw+ICBydW50aW1lISBzeW50YXgvaHRtbC52aW0KKworVGhpcyB3aWxsIG1hdGNoOgorCistIEFueSBmaWxlIHdob3NlIG5hbWUgZW5kcyBpbiBgLmh0bWwnCistIEFueSBmaWxlIHdob3NlIHR5cGUgaXMgYCZmYWYnIG9yICdIVE1MJywgd2hlcmUgdGhlIG1lYW5pbmcgb2YgdGhlc2UgdHlwZXMKKyAgZGVwZW5kcyBvbiB3aGljaCB2ZXJzaW9uIG9mIFZpbSB5b3UgYXJlIHVzaW5nLgorICBVbmtub3duIHR5cGVzIGFyZSBjb25zaWRlcmVkIE5PVCB0byBtYXRjaC4KKworWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB0eXBlIGFuZCBhIHBhdHRlcm4gYXQgdGhlIHNhbWUgdGltZSAoaW4gd2hpY2ggY2FzZSB0aGV5CittdXN0IGJvdGggbWF0Y2gpOiA+CisKKwk6YXUgQnVmUmVhZCA8JmZmZj5kaWZmKgorCitUaGlzIHdpbGwgbWF0Y2ggZmlsZXMgb2YgdHlwZSBgJmZmZicgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBgZGlmZicuCisKK05vdGUgdGhhdCBvc2ZpbGV0eXBlIGNoZWNraW5nIGlzIHNraXBwZWQgaWYgVmltIGlzIGNvbXBpbGVkIHdpdGhvdXQgdGhlCit8K29zZmlsZXR5cGV8IGZlYXR1cmUuCisKKwkJCQkJCQkqcGx1Z2luLWRldGFpbHMqCitUaGUgInBsdWdpbiIgZGlyZWN0b3J5IGNhbiBiZSBpbiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIGluIHRoZSAncnVudGltZXBhdGgnCitvcHRpb24uICBBbGwgb2YgdGhlc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgcGx1Z2lucyBhbmQgdGhleSBhcmUKK2FsbCBsb2FkZWQuICBGb3IgZXhhbXBsZSwgaWYgdGhpcyBjb21tYW5kOiA+CisKKwlzZXQgcnVudGltZXBhdGgKKworcHJvZHVjZXMgdGhpcyBvdXRwdXQ6ID4KKworCXJ1bnRpbWVwYXRoPS9ldGMvdmltLH4vLnZpbSwvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02MAorCit0aGVuIFZpbSB3aWxsIGxvYWQgYWxsIHBsdWdpbnMgaW4gdGhlc2UgZGlyZWN0b3JpZXM6ID4KKworCS9ldGMvdmltL3BsdWdpbi8KKwl+Ly52aW0vcGx1Z2luLworCS91c3IvbG9jYWwvc2hhcmUvdmltL3ZpbTYwL3BsdWdpbi8KKworTm90ZSB0aGF0IHRoZSBsYXN0IG9uZSBpcyB0aGUgdmFsdWUgb2YgJFZJTVJVTlRJTUUgd2hpY2ggaGFzIGJlZW4gZXhwYW5kZWQuCisKK1doYXQgaWYgaXQgbG9va3MgbGlrZSB5b3VyIHBsdWdpbiBpcyBub3QgYmVpbmcgbG9hZGVkPyAgWW91IGNhbiBmaW5kIG91dCB3aGF0CitoYXBwZW5zIHdoZW4gVmltIHN0YXJ0cyB1cCBieSB1c2luZyB0aGUgfC1WfCBhcmd1bWVudDogPgorCXZpbSAtVjEKK1lvdSB3aWxsIHNlZSBhIGxvdCBvZiBtZXNzYWdlcywgaW4gYmV0d2VlbiB0aGVtIGlzIGEgcmVtYXJrIGFib3V0IGxvYWRpbmcgdGhlCitwbHVnaW5zLiAgSXQgc3RhcnRzIHdpdGg6ID4KKwlTZWFyY2hpbmcgZm9yICJwbHVnaW4vKi52aW0iIGluCitUaGVyZSB5b3UgY2FuIHNlZSB3aGVyZSBWaW0gbG9va3MgZm9yIHlvdXIgcGx1Z2luIHNjcmlwdHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gRmlsZXR5cGUgcGx1Z2luCQkJCQkqZmlsZXR5cGUtcGx1Z2lucyoKKworV2hlbiBsb2FkaW5nIGZpbGV0eXBlIHBsdWdpbnMgaGFzIGJlZW4gZW5hYmxlZCB8OmZpbGV0eXBlLXBsdWdpbi1vbnwsIG9wdGlvbnMKK3dpbGwgYmUgc2V0IGFuZCBtYXBwaW5ncyBkZWZpbmVkLiAgVGhlc2UgYXJlIGFsbCBsb2NhbCB0byB0aGUgYnVmZmVyLCB0aGV5Cit3aWxsIG5vdCBiZSB1c2VkIGZvciBvdGhlciBmaWxlcy4KKworRGVmaW5pbmcgbWFwcGluZ3MgZm9yIGEgZmlsZXR5cGUgbWF5IGdldCBpbiB0aGUgd2F5IG9mIHRoZSBtYXBwaW5ncyB5b3UKK2RlZmluZSB5b3Vyc2VsZi4gIFRoZXJlIGFyZSBhIGZldyB3YXlzIHRvIGF2b2lkIHRoaXM6CisxLiBTZXQgdGhlICJtYXBsb2NhbGxlYWRlciIgdmFyaWFibGUgdG8gdGhlIGtleSBzZXF1ZW5jZSB5b3Ugd2FudCB0aGUgbWFwcGluZ3MKKyAgIHRvIHN0YXJ0IHdpdGguICBFeGFtcGxlOiA+CisJOmxldCBtYXBsb2NhbGxlYWRlciA9ICIsIgorPCAgQWxsIG1hcHBpbmdzIHdpbGwgdGhlbiBzdGFydCB3aXRoIGEgY29tbWEgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCwgd2hpY2gKKyAgIGlzIGEgYmFja3NsYXNoLiAgQWxzbyBzZWUgfDxMb2NhbExlYWRlcj58LgorCisyLiBEZWZpbmUgeW91ciBvd24gbWFwcGluZy4gIEV4YW1wbGU6ID4KKwk6bWFwICxwIDxQbHVnPk1haWxRdW90ZQorPCAgWW91IG5lZWQgdG8gY2hlY2sgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwbHVnaW4gZmlsZSBiZWxvdyBmb3IgdGhlCisgICBmdW5jdGlvbmFsaXR5IGl0IG9mZmVycyBhbmQgdGhlIHN0cmluZyB0byBtYXAgdG8uCisgICBZb3UgbmVlZCB0byBkZWZpbmUgeW91ciBvd24gbWFwcGluZyBiZWZvcmUgdGhlIHBsdWdpbiBpcyBsb2FkZWQgKGJlZm9yZQorICAgZWRpdGluZyBhIGZpbGUgb2YgdGhhdCB0eXBlKS4gIFRoZSBwbHVnaW4gd2lsbCB0aGVuIHNraXAgaW5zdGFsbGluZyB0aGUKKyAgIGRlZmF1bHQgbWFwcGluZy4KKworMy4gRGlzYWJsZSBkZWZpbmluZyBtYXBwaW5ncyBmb3IgYSBzcGVjaWZpYyBmaWxldHlwZSBieSBzZXR0aW5nIGEgdmFyaWFibGUsCisgICB3aGljaCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZXR5cGUuICBGb3IgdGhlICJtYWlsIiBmaWxldHlwZSB0aGlzCisgICB3b3VsZCBiZTogPgorCTpsZXQgbm9fbWFpbF9tYXBzID0gMQorCis0LiBEaXNhYmxlIGRlZmluaW5nIG1hcHBpbmdzIGZvciBhbGwgZmlsZXR5cGVzIGJ5IHNldHRpbmcgYSB2YXJpYWJsZTogPgorCTpsZXQgbm9fcGx1Z2luX21hcHMgPSAxCis8CisKKwkJCQkJCQkqZnRwbHVnaW4tb3ZlcnJ1bGUqCitJZiBhIGdsb2JhbCBmaWxldHlwZSBwbHVnaW4gZG9lcyBub3QgZG8gZXhhY3RseSB3aGF0IHlvdSB3YW50LCB0aGVyZSBhcmUgdGhyZWUKK3dheXMgdG8gY2hhbmdlIHRoaXM6CisKKzEuIEFkZCBhIGZldyBzZXR0aW5ncy4KKyAgIFlvdSBtdXN0IGNyZWF0ZSBhIG5ldyBmaWxldHlwZSBwbHVnaW4gaW4gYSBkaXJlY3RvcnkgZWFybHkgaW4KKyAgICdydW50aW1lcGF0aCcuICBGb3IgVW5peCwgZm9yIGV4YW1wbGUgeW91IGNvdWxkIHVzZSB0aGlzIGZpbGU6ID4KKwl2aW0gfi8udmltL2Z0cGx1Z2luL2ZvcnRyYW4udmltCis8ICBZb3UgY2FuIHNldCB0aG9zZSBzZXR0aW5ncyBhbmQgbWFwcGluZ3MgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBhZGQuICBOb3RlCisgICB0aGF0IHRoZSBnbG9iYWwgcGx1Z2luIHdpbGwgYmUgbG9hZGVkIGFmdGVyIHRoaXMsIGl0IG1heSBvdmVycnVsZSB0aGUKKyAgIHNldHRpbmdzIHRoYXQgeW91IGRvIGhlcmUuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3UgbmVlZCB0byB1c2Ugb25lIG9mIHRoZQorICAgZm9sbG93aW5nIHR3byBtZXRob2RzLgorCisyLiBNYWtlIGEgY29weSBvZiB0aGUgcGx1Z2luIGFuZCBjaGFuZ2UgaXQuCisgICBZb3UgbXVzdCBwdXQgdGhlIGNvcHkgaW4gYSBkaXJlY3RvcnkgZWFybHkgaW4gJ3J1bnRpbWVwYXRoJy4gIEZvciBVbml4LCBmb3IKKyAgIGV4YW1wbGUsIHlvdSBjb3VsZCBkbyB0aGlzOiA+CisJY3AgJFZJTVJVTlRJTUUvZnRwbHVnaW4vZm9ydHJhbi52aW0gfi8udmltL2Z0cGx1Z2luL2ZvcnRyYW4udmltCis8ICBUaGVuIHlvdSBjYW4gZWRpdCB0aGUgY29waWVkIGZpbGUgdG8geW91ciBsaWtpbmcuICBTaW5jZSB0aGUgYjpkaWRfZnRwbHVnaW4KKyAgIHZhcmlhYmxlIHdpbGwgYmUgc2V0LCB0aGUgZ2xvYmFsIHBsdWdpbiB3aWxsIG5vdCBiZSBsb2FkZWQuCisgICBBIGRpc2FkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IHdoZW4gdGhlIGRpc3RyaWJ1dGVkIHBsdWdpbiBnZXRzCisgICBpbXByb3ZlZCwgeW91IHdpbGwgaGF2ZSB0byBjb3B5IGFuZCBtb2RpZnkgaXQgYWdhaW4uCisKKzMuIE92ZXJydWxlIHRoZSBzZXR0aW5ncyBhZnRlciBsb2FkaW5nIHRoZSBnbG9iYWwgcGx1Z2luLgorICAgWW91IG11c3QgY3JlYXRlIGEgbmV3IGZpbGV0eXBlIHBsdWdpbiBpbiBhIGRpcmVjdG9yeSBmcm9tIHRoZSBlbmQgb2YKKyAgICdydW50aW1lcGF0aCcuICBGb3IgVW5peCwgZm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB1c2UgdGhpcyBmaWxlOiA+CisJdmltIH4vLnZpbS9hZnRlci9mdHBsdWdpbi9mb3J0cmFuLnZpbQorPCAgSW4gdGhpcyBmaWxlIHlvdSBjYW4gY2hhbmdlIGp1c3QgdGhvc2Ugc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBjaGFuZ2UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gIERvY3MgZm9yIHRoZSBkZWZhdWx0IGZpbGV0eXBlIHBsdWdpbnMuCQkqZnRwbHVnaW4tZG9jcyoKKworCitDSEFOR0VMT0cJCQkJCQkqY2hhbmdlbG9nLXBsdWdpbioKKworQWxsb3dzIGZvciBlYXN5IGVudHJhbmNlIG9mIENoYW5nZWxvZyBlbnRyaWVzIGluIENoYW5nZWxvZyBmaWxlcy4gVGhlcmUgYXJlCitzb21lIGNvbW1hbmRzLCBtYXBwaW5ncywgYW5kIHZhcmlhYmxlcyB3b3J0aCBleHBsb3Jpbmc6CisKK09wdGlvbnM6CisnY29tbWVudHMnCQlpcyBtYWRlIGVtcHR5IHRvIG5vdCBtZXNzIHVwIGZvcm1hdHRpbmcuCisndGV4dHdpZHRoJwkJaXMgc2V0IHRvIDc4LCB3aGljaCBpcyBzdGFuZGFyZC4KKydmb3JtYXRvcHRpb25zJwkJdGhlICd0JyBmbGFnIGlzIGFkZGVkIHRvIHdyYXAgd2hlbiBpbnNlcnRpbmcgdGV4dC4KKworQ29tbWFuZHM6CitOZXdDaGFuZ2Vsb2dFbnRyeQlBZGRzIGEgbmV3IENoYW5nZWxvZyBlbnRyeSBpbiBhbiBpbnRlbGxpZ2VudCBmYXNoaW9uCisJCQkoc2VlIGJlbG93KS4KKworTG9jYWwgbWFwcGluZ3M6Cis8TGVhZGVyPm8JCVN0YXJ0cyBhIG5ldyBDaGFuZ2Vsb2cgZW50cnkgaW4gYW4gZXF1YWxseSBpbnRlbGxpZ2VudAorCQkJZmFzaGlvbiAoc2VlIGJlbG93KS4KKworR2xvYmFsIG1hcHBpbmdzOgorCQkJTk9URTogVGhlIGdsb2JhbCBtYXBwaW5ncyBhcmUgYWNjZXNzZWQgYnkgc291cmNpbmcgdGhlCisJCQlmdHBsdWdpbi9jaGFuZ2Vsb2cudmltIGZpbGUgZmlyc3QsIGUuZy4gd2l0aCA+CisJCQkJcnVudGltZSBmdHBsdWdpbi9tYW4udmltCis8CQkJaW4geW91ciB8LnZpbXJjfC4KKzxMZWFkZXI+bwkJU3dpdGNoZXMgdG8gdGhlIENoYW5nZUxvZyBidWZmZXIgb3BlbmVkIGZvciB0aGUKKwkJCWN1cnJlbnQgZGlyZWN0b3J5LCBvciBvcGVucyBpdCBpbiBhIG5ldyBidWZmZXIgaWYgaXQKKwkJCWV4aXN0cyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBUaGVuIGl0IGRvZXMgdGhlCisJCQlzYW1lIGFzIHRoZSBsb2NhbCA8TGVhZGVyPm8gZGVzY3JpYmVkIGFib3ZlLgorCitWYXJpYWJsZXM6CitnOmNoYW5nZWxvZ190aW1lZm9ybWF0CVRoZSBkYXRlIChhbmQgdGltZSkgZm9ybWF0IHVzZWQgaW4gQ2hhbmdlTG9nIGVudHJpZXMuCisJCQlUaGUgZm9ybWF0IGFjY2VwdGVkIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUKKwkJCXxzdHJmdGltZSgpfCBmdW5jdGlvbi4KKwkJCVRoZSBkZWZhdWx0IGlzICIlWS0lbS0lZCIgd2hpY2ggaXMgdGhlIHN0YW5kYXJkIGZvcm1hdAorCQkJZm9yIG1hbnkgQ2hhbmdlTG9nIGxheW91dHMuCitnOmNoYW5nZWxvZ191c2VybmFtZQlUaGUgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlci4KKwkJCVRoZSBkZWZhdWx0IGlzIGRlZHVjZWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCisJCQlzeXN0ZW0gZmlsZXMuICBJdCBzZWFyY2hlcyAvZXRjL3Bhc3N3ZCBmb3IgdGhlIGNvbW1lbnQKKwkJCXBhcnQgb2YgdGhlIGN1cnJlbnQgdXNlciwgd2hpY2ggaW5mb3JtYWxseSBjb250YWlucworCQkJdGhlIHJlYWwgbmFtZSBvZiB0aGUgdXNlciB1cCB0byB0aGUgZmlyc3Qgc2VwYXJhdGluZworCQkJY29tbWEuICB0aGVuIGl0IGNoZWNrcyB0aGUgJE5BTUUgZW52aXJvbm1lbnQgdmFyaWFibGUKKwkJCWFuZCBmaW5hbGx5IHJ1bnMgYHdob2FtaWAgYW5kIGBob3N0bmFtZWAgdG8gYnVpbGQgYW4KKwkJCWVtYWlsIGFkZHJlc3MuICBUaGUgZmluYWwgZm9ybSBpcyA+CisJCQkJRnVsbCBOYW1lICA8dXNlckBob3N0PgorPAorZzpjaGFuZ2Vsb2dfbmV3X2RhdGVfZm9ybWF0CisJCQlUaGUgZm9ybWF0IHRvIHVzZSB3aGVuIGNyZWF0aW5nIGEgbmV3IGRhdGUtZW50cnkuCisJCQlUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyBzcGVjaWFsIHRva2VucyBpbiB0aGUKKwkJCXN0cmluZzoKKwkJCQklJQlpbnNlcnQgYSBzaW5nbGUgJyUnIGNoYXJhY3RlcgorCQkJCSVkCWluc2VydCB0aGUgZGF0ZSBmcm9tIGFib3ZlCisJCQkJJXUJaW5zZXJ0IHRoZSB1c2VyIGZyb20gYWJvdmUKKwkJCQklYwl3aGVyZSB0byBwb3NpdGlvbiBjdXJzb3Igd2hlbiBkb25lCisJCQlUaGUgZGVmYXVsdCBpcyAiJWQgICV1XG5cblx0KiAlY1xuXG4iLCB3aGljaCBwcm9kdWNlcworCQkJc29tZXRoaW5nIGxpa2UgKHwgaXMgd2hlcmUgY3Vyc29yIHdpbGwgYmUsIHVubGVzcyBhdAorCQkJdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdoZXJlIGl0IGRlbm90ZXMgdGhlIGJlZ2lubmluZworCQkJb2YgdGhlIGxpbmUpID4KKwkJCQl8MjAwMy0wMS0xNCAgRnVsbCBOYW1lICA8dXNlckBob3N0PgorCQkJCXwKKwkJCQl8ICAgICAgICAqIHwKKzwKK2c6Y2hhbmdlbG9nX25ld19lbnRyeV9mb3JtYXQKKwkJCVRoZSBmb3JtYXQgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGVudHJ5LgorCQkJVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgc3BlY2lhbCB0b2tlbnMgaW4gdGhlCisJCQlzdHJpbmc6CisJCQkJJWMJd2hlcmUgdG8gcG9zaXRpb24gY3Vyc29yIHdoZW4gZG9uZQorCQkJVGhlIGRlZmF1bHQgaXMgIlx0KiVjIiwgd2hpY2ggcHJvZHVjZXMgc29tZXRoaW5nCisJCQlzaW1pbGFyIHRvID4KKwkJCQl8ICAgICAgICAqIHwKKzwKK2c6Y2hhbmdlbG9nX2RhdGVfZW50cnlfc2VhcmNoCisJCQlUaGUgc2VhcmNoIHBhdHRlcm4gdG8gdXNlIHdoZW4gc2VhcmNoaW5nIGZvciBhCisJCQlkYXRlLWVudHJ5LgorCQkJVGhlIHNhbWUgdG9rZW5zIHRoYXQgY2FuIGJlIHVzZWQgZm9yCisJCQlnOmNoYW5nZWxvZ19uZXdfZGF0ZV9mb3JtYXQgY2FuIGJlIHVzZWQgaGVyZSBhcyB3ZWxsLgorCQkJVGhlIGRlZmF1bHQgaXMgJ15ccyolZFxfcyoldScgd2hpY2ggZmluZHMgbGluZXMKKwkJCW1hdGNoaW5nIHRoZSBmb3JtID4KKwkJCQl8MjAwMy0wMS0xNCAgRnVsbCBOYW1lICA8dXNlckBob3N0PgorPAkJCWFuZCBzb21lIHNpbWlsYXIgZm9ybWF0cy4KKworVGhlIENoYW5nZWxvZyBlbnRyaWVzIGFyZSBpbnNlcnRlZCB3aGVyZSB0aGV5IGFkZCB0aGUgbGVhc3QgYW1vdW50IG9mIHRleHQuCitBZnRlciBmaWd1cmluZyBvdXQgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdXNlciwgdGhlIGZpbGUgaXMgc2VhcmNoZWQgZm9yIGFuCitlbnRyeSBiZWdpbm5pbmcgd2l0aCB0aGUgY3VycmVudCBkYXRlIGFuZCB1c2VyIGFuZCBpZiBmb3VuZCBhZGRzIGFub3RoZXIgaXRlbQordW5kZXIgaXQuIElmIG5vdCBmb3VuZCwgYSBuZXcgZW50cnkgYW5kIGl0ZW0gaXMgcHJlcGVuZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKK3RoZSBDaGFuZ2Vsb2cuCisKKworRk9SVFJBTgkJCQkJCQkqZm9ydHJhbi1wbHVnaW4qCisKK09wdGlvbnM6CisnZXhwYW5kdGFiJwlpcyBzd2l0Y2hlZCBvbiB0byBhdm9pZCB0YWJzIGFzIHJlcXVpcmVkIGJ5IHRoZSBGb3J0cmFuCisJCXN0YW5kYXJkcyB1bmxlc3MgdGhlIHVzZXIgaGFzIHNldCBmb3J0cmFuX2hhdmVfdGFicyBpbiAudmltcmMuCisndGV4dHdpZHRoJwlpcyBzZXQgdG8gNzIgZm9yIGZpeGVkIHNvdXJjZSBmb3JtYXQgYXMgcmVxdWlyZWQgYnkgdGhlCisJCUZvcnRyYW4gc3RhbmRhcmRzIGFuZCB0byA4MCBmb3IgZnJlZSBzb3VyY2UgZm9ybWF0LgorJ2Zvcm1hdG9wdGlvbnMnIGlzIHNldCB0byBicmVhayBjb2RlIGFuZCBjb21tZW50IGxpbmVzIGFuZCB0byBwcmVzZXJ2ZSBsb25nCisJCWxpbmVzLiBZb3UgY2FuIGZvcm1hdCBjb21tZW50cyB3aXRoIHxncXwuCitGb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mIGZvcnRyYW5faGF2ZV90YWJzIGFuZCB0aGUgbWV0aG9kIHVzZWQgZm9yIHRoZQorZGV0ZWN0aW9uIG9mIHNvdXJjZSBmb3JtYXQgc2VlIHxmb3J0cmFuLXN5bnRheHwuCisKKworTUFJTAkJCQkJCQkqbWFpbC1wbHVnaW4qCisKK09wdGlvbnM6CisnbW9kZWxpbmUnCWlzIHN3aXRjaGVkIG9mZiB0byBhdm9pZCB0aGUgZGFuZ2VyIG9mIHRyb2phbiBob3JzZXMsIGFuZCB0bworCQlhdm9pZCB0aGF0IGEgU3ViamVjdCBsaW5lIHdpdGggIlZpbToiIGluIGl0IHdpbGwgY2F1c2UgYW4KKwkJZXJyb3IgbWVzc2FnZS4KKyd0ZXh0d2lkdGgnCWlzIHNldCB0byA3Mi4gIFRoaXMgaXMgb2Z0ZW4gcmVjb21tZW5kZWQgZm9yIGUtbWFpbC4KKydmb3JtYXRvcHRpb25zJyAgaXMgc2V0IHRvIGJyZWFrIHRleHQgbGluZXMgYW5kIHRvIHJlcGVhdCB0aGUgY29tbWVudCBsZWFkZXIKKwkJaW4gbmV3IGxpbmVzLCBzbyB0aGF0IGEgbGVhZGluZyAiPiIgZm9yIHF1b3RlcyBpcyByZXBlYXRlZC4KKwkJWW91IGNhbiBhbHNvIGZvcm1hdCBxdW90ZWQgdGV4dCB3aXRoIHxncXwuCisKK0xvY2FsIG1hcHBpbmdzOgorPExvY2FsTGVhZGVyPnEgICBvciAgIFxcTWFpbFF1b3RlCisJUXVvdGVzIHRoZSB0ZXh0IHNlbGVjdGVkIGluIFZpc3VhbCBtb2RlLCBvciBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24KKwl0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGluIE5vcm1hbCBtb2RlLiAgVGhpcyBtZWFucyAiPiAiIGlzIGluc2VydGVkIGluCisJZWFjaCBsaW5lLgorCitNQU4JCQkJCQkJKm1hbi1wbHVnaW4qICo6TWFuKgorCitEaXNwbGF5cyBhIG1hbnVhbCBwYWdlIGluIGEgbmljZSB3YXkuICBBbHNvIHNlZSB0aGUgdXNlciBtYW51YWwKK3xmaW5kLW1hbnBhZ2V8LgorCitUbyBzdGFydCB1c2luZyB0aGUgIjpNYW4iIGNvbW1hbmQgYmVmb3JlIGFueSBtYW51YWwgcGFnZSB3YXMgbG9hZGVkLCBzb3VyY2UKK3RoaXMgc2NyaXB0IGZyb20geW91ciBzdGFydHVwIHZpbXJjIGZpbGU6ID4KKworCXJ1bnRpbWUgZnRwbHVnaW4vbWFuLnZpbQorCitPcHRpb25zOgorJ2lza2V5d29yZCcJdGhlICcuJyBjaGFyYWN0ZXIgaXMgYWRkZWQgdG8gYmUgYWJsZSB0byB1c2UgQ1RSTC1dIG9uIHRoZQorCQltYW51YWwgcGFnZSBuYW1lLgorCitDb21tYW5kczoKK01hbiB7bmFtZX0JRGlzcGxheSB0aGUgbWFudWFsIHBhZ2UgZm9yIHtuYW1lfSBpbiBhIHdpbmRvdy4KK01hbiB7bnVtYmVyfSB7bmFtZX0KKwkJRGlzcGxheSB0aGUgbWFudWFsIHBhZ2UgZm9yIHtuYW1lfSBpbiBhIHNlY3Rpb24ge251bWJlcn0uCisKK0dsb2JhbCBtYXBwaW5nOgorPExlYWRlcj5LCURpc3BsYXlzIHRoZSBtYW51YWwgcGFnZSBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKworTG9jYWwgbWFwcGluZ3M6CitDVFJMLV0JCUp1bXAgdG8gdGhlIG1hbnVhbCBwYWdlIGZvciB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLgorQ1RSTC1UCQlKdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIG1hbnVhbCBwYWdlLgorCisKK1JQTSBTUEVDCQkJCQkJKnNwZWMtcGx1Z2luKgorCitTaW5jZSB0aGUgdGV4dCBmb3IgdGhpcyBwbHVnaW4gaXMgcmF0aGVyIGxvbmcgaXQgaGFzIGJlZW4gcHV0IGluIGEgc2VwYXJhdGUKK2ZpbGU6IHxwaV9zcGVjLnR4dHwuCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2ZvbGQudHh0IGIvcnVudGltZS9kb2MvZm9sZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMTIzNwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2ZvbGQudHh0CkBAIC0wLDAgKzEsNTgxIEBACisqZm9sZC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDIwCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworRm9sZGluZwkJCQkJCSpGb2xkaW5nKiAqZm9sZGluZyoKKworWW91IGNhbiBmaW5kIGFuIGludHJvZHVjdGlvbiBvbiBmb2xkaW5nIGluIGNoYXB0ZXIgMjggb2YgdGhlIHVzZXIgbWFudWFsLgorfHVzcl8yOC50eHR8CisKKzEuIEZvbGQgbWV0aG9kcwkJfGZvbGQtbWV0aG9kc3wKKzIuIEZvbGQgY29tbWFuZHMJfGZvbGQtY29tbWFuZHN8CiszLiBGb2xkIG9wdGlvbnMJCXxmb2xkLW9wdGlvbnN8Cis0LiBCZWhhdmlvciBvZiBmb2xkcwl8Zm9sZC1iZWhhdmlvcnwKKwore1ZpIGhhcyBubyBGb2xkaW5nfQore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArZm9sZGluZyBmZWF0dXJlfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEZvbGQgbWV0aG9kcwkJCQkJKmZvbGQtbWV0aG9kcyoKKworVGhlIGZvbGRpbmcgbWV0aG9kIGNhbiBiZSBzZXQgd2l0aCB0aGUgJ2ZvbGRtZXRob2QnIG9wdGlvbi4KKworV2hlbiBzZXR0aW5nICdmb2xkbWV0aG9kJyB0byBhIHZhbHVlIG90aGVyIHRoYW4gIm1hbnVhbCIsIGFsbCBmb2xkcyBhcmUKK2RlbGV0ZWQgYW5kIG5ldyBvbmVzIGNyZWF0ZWQuICBTd2l0Y2hpbmcgdG8gdGhlICJtYW51YWwiIG1ldGhvZCBkb2Vzbid0IHJlbW92ZQordGhlIGV4aXN0aW5nIGZvbGRzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBmaXJzdCBkZWZpbmUgdGhlIGZvbGRzIGF1dG9tYXRpY2FsbHkKK2FuZCB0aGVuIGNoYW5nZSB0aGVtIG1hbnVhbGx5LgorCitUaGVyZSBhcmUgc2l4IG1ldGhvZHMgdG8gc2VsZWN0IGZvbGRzOgorCW1hbnVhbAkJbWFudWFsbHkgZGVmaW5lIGZvbGRzCisJaW5kZW50CQltb3JlIGluZGVudCBtZWFucyBhIGhpZ2hlciBmb2xkIGxldmVsCisJZXhwcgkJc3BlY2lmeSBhbiBleHByZXNzaW9uIHRvIGRlZmluZSBmb2xkcworCXN5bnRheAkJZm9sZHMgZGVmaW5lZCBieSBzeW50YXggaGlnaGxpZ2h0aW5nCisJZGlmZgkJZm9sZHMgZm9yIHVuY2hhbmdlZCB0ZXh0CisJbWFya2VyCQlmb2xkcyBkZWZpbmVkIGJ5IG1hcmtlcnMgaW4gdGhlIHRleHQKKworCitNQU5VQUwJCQkJCQkqZm9sZC1tYW51YWwqCisKK1VzZSBjb21tYW5kcyB0byBtYW51YWxseSBkZWZpbmUgdGhlIGZvbGQgcmVnaW9ucy4gIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBieSBhCitzY3JpcHQgdGhhdCBwYXJzZXMgdGV4dCB0byBmaW5kIGZvbGRzLgorCitUaGUgbGV2ZWwgb2YgYSBmb2xkIGlzIG9ubHkgZGVmaW5lZCBieSBpdHMgbmVzdGluZy4gIFRvIGluY3JlYXNlIHRoZSBmb2xkCitsZXZlbCBvZiBhIGZvbGQgZm9yIGEgcmFuZ2Ugb2YgbGluZXMsIGRlZmluZSBhIGZvbGQgaW5zaWRlIGl0IHRoYXQgaGFzIHRoZQorc2FtZSBsaW5lcy4KKworVGhlIG1hbnVhbCBmb2xkcyBhcmUgbG9zdCB3aGVuIHlvdSBhYmFuZG9uIHRoZSBmaWxlLiAgVG8gc2F2ZSB0aGUgZm9sZHMgdXNlCit0aGUgfDpta3ZpZXd8IGNvbW1hbmQuICBUaGUgdmlldyBjYW4gYmUgcmVzdG9yZWQgbGF0ZXIgd2l0aCB8OmxvYWR2aWV3fC4KKworCitJTkRFTlQJCQkJCQkqZm9sZC1pbmRlbnQqCisKK1RoZSBmb2xkcyBhcmUgYXV0b21hdGljYWxseSBkZWZpbmVkIGJ5IHRoZSBpbmRlbnQgb2YgdGhlIGxpbmVzLgorCitUaGUgZm9sZGxldmVsIGlzIGNvbXB1dGVkIGZyb20gdGhlIGluZGVudCBvZiB0aGUgbGluZSwgZGl2aWRlZCBieSB0aGUKKydzaGlmdHdpZHRoJyAocm91bmRlZCBkb3duKS4gIEEgc2VxdWVuY2Ugb2YgbGluZXMgd2l0aCB0aGUgc2FtZSBvciBoaWdoZXIgZm9sZAorbGV2ZWwgZm9ybSBhIGZvbGQsIHdpdGggdGhlIGxpbmVzIHdpdGggYSBoaWdoZXIgbGV2ZWwgZm9ybWluZyBhIG5lc3RlZCBmb2xkLgorCitUaGUgbmVzdGluZyBvZiBmb2xkcyBpcyBsaW1pdGVkIHdpdGggJ2ZvbGRuZXN0bWF4Jy4KKworU29tZSBsaW5lcyBhcmUgaWdub3JlZCBhbmQgZ2V0IHRoZSBmb2xkIGxldmVsIG9mIHRoZSBsaW5lIGFib3ZlIG9yIGJlbG93IGl0LAord2hhdGV2ZXIgaXMgdGhlIGxvd2VzdC4gIFRoZXNlIGFyZSBlbXB0eSBvciB3aGl0ZSBsaW5lcyBhbmQgbGluZXMgc3RhcnRpbmcKK3dpdGggYSBjaGFyYWN0ZXIgaW4gJ2ZvbGRpZ25vcmUnLiAgV2hpdGUgc3BhY2UgaXMgc2tpcHBlZCBiZWZvcmUgY2hlY2tpbmcgZm9yCitjaGFyYWN0ZXJzIGluICdmb2xkaWdub3JlJy4gIEZvciBDIHVzZSAiIyIgdG8gaWdub3JlIHByZXByb2Nlc3NvciBsaW5lcy4KKworV2hlbiB5b3Ugd2FudCB0byBpZ25vcmUgbGluZXMgaW4gYW5vdGhlciB3YXksIHVzZSB0aGUgJ2V4cHInIG1ldGhvZC4gIFRoZQorfGluZGVudCgpfCBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiAnZm9sZGV4cHInIHRvIGdldCB0aGUgaW5kZW50IG9mIGEgbGluZS4KKworCitFWFBSCQkJCQkJKmZvbGQtZXhwcioKKworVGhlIGZvbGRzIGFyZSBhdXRvbWF0aWNhbGx5IGRlZmluZWQgYnkgdGhlaXIgZm9sZGxldmVsLCBsaWtlIHdpdGggdGhlICJpbmRlbnQiCittZXRob2QuICBUaGUgdmFsdWUgb2YgdGhlICdmb2xkZXhwcicgb3B0aW9uIGlzIGV2YWx1YXRlZCB0byBnZXQgdGhlIGZvbGRsZXZlbAorb2YgYSBsaW5lLiAgRXhhbXBsZXM6CitUaGlzIHdpbGwgY3JlYXRlIGEgZm9sZCBmb3IgYWxsIGNvbnNlY3V0aXZlIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCBhIFRhYjogPgorCTpzZXQgZm9sZGV4cHI9Z2V0bGluZSh2OmxudW0pWzBdPT1cIlxcdFwiCitUaGlzIHdpbGwgY2FsbCBhIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIGZvbGQgbGV2ZWw6ID4KKwk6c2V0IGZvbGRleHByPU15Rm9sZExldmVsKHY6bG51bSkKK1RoaXMgd2lsbCBtYWtlIGEgZm9sZCBvdXQgb2YgcGFyYWdyYXBocyBzZXBhcmF0ZWQgYnkgYmxhbmsgbGluZXM6ID4KKwk6c2V0IGZvbGRleHByPWdldGxpbmUodjpsbnVtKT1+J15cXHMqJCcmJmdldGxpbmUodjpsbnVtKzEpPX4nXFxTJz8nPDEnOjEKK3RoaXMgZG9lcyB0aGUgc2FtZTogPgorCTpzZXQgZm9sZGV4cHI9Z2V0bGluZSh2OmxudW0tMSk9fideXFxzKiQnJiZnZXRsaW5lKHY6bG51bSk9fidcXFMnPyc+MSc6MQorCitOb3RlIHRoYXQgYmFja3NsYXNoZXMgbXVzdCBiZSB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgIjpzZXQiIGhhbmRsZXMKK2RpZmZlcmVudGx5IChzcGFjZSwgYmFja3NsYXNoLCBkb3VibGUgcXVvdGUsIGV0Yy4sIHNlZSB8b3B0aW9uLWJhY2tzbGFzaHwpLgorCitUaGVzZSBhcmUgdGhlIGNvbmRpdGlvbnMgd2l0aCB3aGljaCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQ6CistIFRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgd2luZG93IGFyZSBzZXQgZm9yIHRoZSBsaW5lLgorLSBUaGUgdmFyaWFibGUgInY6bG51bSIgaXMgc2V0IHRvIHRoZSBsaW5lIG51bWJlci4KKy0gVGhlIHJlc3VsdCBpcyB1c2VkIGZvciB0aGUgZm9sZCBsZXZlbCBpbiB0aGlzIHdheToKKyAgdmFsdWUJCQltZWFuaW5nIH4KKyAgMAkJCXRoZSBsaW5lIGlzIG5vdCBpbiBhIGZvbGQKKyAgMSwgMiwgLi4JCXRoZSBsaW5lIGlzIGluIGEgZm9sZCB3aXRoIHRoaXMgbGV2ZWwKKyAgLTEJCQl0aGUgZm9sZCBsZXZlbCBpcyB1bmRlZmluZWQsIHVzZSB0aGUgZm9sZCBsZXZlbCBvZiBhCisJCQlsaW5lIGJlZm9yZSBvciBhZnRlciB0aGlzIGxpbmUsIHdoaWNoZXZlciBpcyB0aGUKKwkJCWxvd2VzdC4KKyAgIj0iCQkJdXNlIGZvbGQgbGV2ZWwgZnJvbSB0aGUgcHJldmlvdXMgbGluZQorICAiYTEiLCAiYTIiLCAuLglhZGQgb25lLCB0d28sIC4uIHRvIHRoZSBmb2xkIGxldmVsIG9mIHRoZSBwcmV2aW91cworCQkJbGluZQorICAiczEiLCAiczIiLCAuLglzdWJ0cmFjdCBvbmUsIHR3bywgLi4gZnJvbSB0aGUgZm9sZCBsZXZlbCBvZiB0aGUKKwkJCXByZXZpb3VzIGxpbmUKKyAgIjwxIiwgIjwyIiwgLi4JYSBmb2xkIHdpdGggdGhpcyBsZXZlbCBlbmRzIGF0IHRoaXMgbGluZQorICAiPjEiLCAiPjIiLCAuLglhIGZvbGQgd2l0aCB0aGlzIGxldmVsIHN0YXJ0cyBhdCB0aGlzIGxpbmUKKworSXQgaXMgbm90IHJlcXVpcmVkIHRvIG1hcmsgdGhlIHN0YXJ0IChlbmQpIG9mIGEgZm9sZCB3aXRoICI+MSIgKCI8MSIpLCBhIGZvbGQKK3dpbGwgYWxzbyBzdGFydCAoZW5kKSB3aGVuIHRoZSBmb2xkIGxldmVsIGlzIGhpZ2hlciAobG93ZXIpIHRoYW4gdGhlIGZvbGQKK2xldmVsIG9mIHRoZSBwcmV2aW91cyBsaW5lLgorCitUaGVyZSBtdXN0IGJlIG5vIHNpZGUgZWZmZWN0cyBmcm9tIHRoZSBleHByZXNzaW9uLiAgVGhlIHRleHQgaW4gdGhlIGJ1ZmZlciwKK2N1cnNvciBwb3NpdGlvbiwgdGhlIHNlYXJjaCBwYXR0ZXJucywgb3B0aW9ucyBldGMuIG11c3Qgbm90IGJlIGNoYW5nZWQuCisKK0lmIHRoZXJlIGlzIHNvbWUgZXJyb3IgaW4gdGhlIGV4cHJlc3Npb24sIG9yIHRoZSByZXN1bHRpbmcgdmFsdWUgaXNuJ3QKK3JlY29nbml6ZWQsIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UgYW5kIHRoZSBmb2xkIGxldmVsIHdpbGwgYmUgemVyby4KK0ZvciBkZWJ1Z2dpbmcgdGhlICdkZWJ1Zycgb3B0aW9uIGNhbiBiZSBzZXQgdG8gIm1zZyIsIHRoZSBlcnJvciBtZXNzYWdlcyB3aWxsCitiZSB2aXNpYmxlIHRoZW4uCisKK05vdGU6IFNpbmNlIHRoZSBleHByZXNzaW9uIGhhcyB0byBiZSBldmFsdWF0ZWQgZm9yIGV2ZXJ5IGxpbmUsIHRoaXMgZm9sZAorbWV0aG9kIGNhbiBiZSB2ZXJ5IHNsb3chCisKK1RyeSB0byBhdm9pZCB0aGUgIj0iLCAiYSIgYW5kICJzIiByZXR1cm4gdmFsdWVzLCBzaW5jZSBWaW0gb2Z0ZW4gaGFzIHRvIHNlYXJjaAorYmFja3dhcmRzIGZvciBhIGxpbmUgZm9yIHdoaWNoIHRoZSBmb2xkIGxldmVsIGlzIGRlZmluZWQuICBUaGlzIGNhbiBiZSBzbG93LgorCit8Zm9sZGxldmVsKCl8IGNhbiBiZSB1c2VmdWwgdG8gY29tcHV0ZSBhIGZvbGQgbGV2ZWwgcmVsYXRpdmUgdG8gYSBwcmV2aW91cworZm9sZCBsZXZlbC4gIEJ1dCBub3RlIHRoYXQgZm9sZGxldmVsKCkgbWF5IHJldHVybiAtMSBpZiB0aGUgbGV2ZWwgaXMgbm90IGtub3duCit5ZXQuICBBbmQgaXQgcmV0dXJucyB0aGUgbGV2ZWwgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCB3aGlsZSBhIGZvbGQgbWlnaHQKK2VuZCBpbiB0aGF0IGxpbmUuCisKKworU1lOVEFYCQkJCQkJKmZvbGQtc3ludGF4KgorCitBIGZvbGQgaXMgZGVmaW5lZCBieSBzeW50YXggaXRlbXMgdGhhdCBoYXZlIHRoZSAiZm9sZCIgYXJndW1lbnQuIHw6c3luLWZvbGR8CisKK1RoZSBmb2xkIGxldmVsIGlzIGRlZmluZWQgYnkgbmVzdGluZyBmb2xkcy4gIFRoZSBuZXN0aW5nIG9mIGZvbGRzIGlzIGxpbWl0ZWQKK3dpdGggJ2ZvbGRuZXN0bWF4Jy4KKworQmUgY2FyZWZ1bCB0byBzcGVjaWZ5IHByb3BlciBzeW50YXggc3luY2luZy4gIElmIHRoaXMgaXMgbm90IGRvbmUgcmlnaHQsIGZvbGRzCittYXkgZGlmZmVyIGZyb20gdGhlIGRpc3BsYXllZCBoaWdobGlnaHRpbmcuICBUaGlzIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQgd2hlbgordXNpbmcgcGF0dGVybnMgdGhhdCBtYXRjaCBtb3JlIHRoYW4gb25lIGxpbmUuICBJbiBjYXNlIG9mIGRvdWJ0LCB0cnkgdXNpbmcKK2JydXRlLWZvcmNlIHN5bmNpbmc6ID4KKwk6c3luIHN5bmMgZnJvbXN0YXJ0CisKKworRElGRgkJCQkJCSpmb2xkLWRpZmYqCisKK1RoZSBmb2xkcyBhcmUgYXV0b21hdGljYWxseSBkZWZpbmVkIGZvciB0ZXh0IHRoYXQgaXMgbm90IHBhcnQgb2YgYSBjaGFuZ2Ugb3IKK2Nsb3NlIHRvIGEgY2hhbmdlLgorCitUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIHByb3Blcmx5IHdoZW4gdGhlICdkaWZmJyBvcHRpb24gaXMgc2V0IGZvciB0aGUgY3VycmVudAord2luZG93IGFuZCBjaGFuZ2VzIGFyZSBiZWluZyBkaXNwbGF5ZWQuICBPdGhlcndpc2UgdGhlIHdob2xlIGJ1ZmZlciB3aWxsIGJlCitvbmUgYmlnIGZvbGQuCisKK1RoZSAnZGlmZm9wdCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbnRleHQuICBUaGF0IGlzLCB0aGUgbnVtYmVyCitvZiBsaW5lcyBiZXR3ZWVuIHRoZSBmb2xkIGFuZCBhIGNoYW5nZSB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGZvbGQuICBGb3IKK2V4YW1wbGUsIHRvIHVzZSBhIGNvbnRleHQgb2YgOCBsaW5lczogPgorCTpzZXQgZGlmZm9wdD1maWxsZXIsY29udGV4dDo4CitUaGUgZGVmYXVsdCBjb250ZXh0IGlzIHNpeCBsaW5lcy4KKworV2hlbiAnc2Nyb2xsYmluZCcgaXMgYWxzbyBzZXQsIFZpbSB3aWxsIGF0dGVtcHQgdG8ga2VlcCB0aGUgc2FtZSBmb2xkcyBvcGVuIGluCitvdGhlciBkaWZmIHdpbmRvd3MsIHNvIHRoYXQgdGhlIHNhbWUgdGV4dCBpcyB2aXNpYmxlLgorCisKK01BUktFUgkJCQkJCSpmb2xkLW1hcmtlcioKKworTWFya2VycyBpbiB0aGUgdGV4dCB0ZWxsIHdoZXJlIGZvbGRzIHN0YXJ0IGFuZCBlbmQuICBUaGlzIGFsbG93cyB5b3UgdG8KK3ByZWNpc2VseSBzcGVjaWZ5IHRoZSBmb2xkcy4gIFRoaXMgd2lsbCBhbGxvdyBkZWxldGluZyBhbmQgcHV0dGluZyBhIGZvbGQsCit3aXRob3V0IHRoZSByaXNrIG9mIGluY2x1ZGluZyB0aGUgd3JvbmcgbGluZXMuICBUaGUgJ2ZvbGR0ZXh0JyBvcHRpb24gaXMKK25vcm1hbGx5IHNldCBzdWNoIHRoYXQgdGhlIHRleHQgYmVmb3JlIHRoZSBtYXJrZXIgc2hvd3MgdXAgaW4gdGhlIGZvbGRlZCBsaW5lLgorVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBnaXZlIGEgbmFtZSB0byB0aGUgZm9sZC4KKworTWFya2VycyBjYW4gaGF2ZSBhIGxldmVsIGluY2x1ZGVkLCBvciBjYW4gdXNlIG1hdGNoaW5nIHBhaXJzLiAgSW5jbHVkaW5nIGEKK2xldmVsIGlzIGVhc2llciwgeW91IGRvbid0IGhhdmUgdG8gYWRkIGVuZCBtYXJrZXJzIGFuZCBhdm9pZCBwcm9ibGVtcyB3aXRoCitub24tbWF0Y2hpbmcgbWFya2VyIHBhaXJzLiAgRXhhbXBsZTogPgorCS8qIGdsb2JhbCB2YXJpYWJsZXMge3t7MSAqLworCWludCB2YXJBLCB2YXJCOworCisJLyogZnVuY3Rpb25zIHt7ezEgKi8KKwkvKiBmdW5jQSgpIHt7ezIgKi8KKwl2b2lkIGZ1bmNBKCkge30KKworCS8qIGZ1bmNCKCkge3t7MiAqLworCXZvaWQgZnVuY0IoKSB7fQorCitBIGZvbGQgc3RhcnRzIGF0IGEgInt7eyIgbWFya2VyLiAgVGhlIGZvbGxvd2luZyBudW1iZXIgc3BlY2lmaWVzIHRoZSBmb2xkCitsZXZlbC4gIFdoYXQgaGFwcGVucyBkZXBlbmRzIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgZm9sZCBsZXZlbAorYW5kIHRoZSBsZXZlbCBnaXZlbiBieSB0aGUgbWFya2VyOgorMS4gSWYgYSBtYXJrZXIgd2l0aCB0aGUgc2FtZSBmb2xkIGxldmVsIGlzIGVuY291bnRlcmVkLCB0aGUgcHJldmlvdXMgZm9sZAorICAgZW5kcyBhbmQgYW5vdGhlciBmb2xkIHdpdGggdGhlIHNhbWUgbGV2ZWwgc3RhcnRzLgorMi4gSWYgYSBtYXJrZXIgd2l0aCBhIGhpZ2hlciBmb2xkIGxldmVsIGlzIGZvdW5kLCBhIG5lc3RlZCBmb2xkIGlzIHN0YXJ0ZWQuCiszLiBpZiBhIG1hcmtlciB3aXRoIGEgbG93ZXIgZm9sZCBsZXZlbCBpcyBmb3VuZCwgYWxsIGZvbGRzIHVwIHRvIGFuZCBpbmNsdWRpbmcKKyAgIHRoaXMgbGV2ZWwgZW5kIGFuZCBhIGZvbGQgd2l0aCB0aGUgc3BlY2lmaWVkIGxldmVsIHN0YXJ0cy4KKworVGhlIG51bWJlciBpbmRpY2F0ZXMgdGhlIGZvbGQgbGV2ZWwuICBBIHplcm8gY2Fubm90IGJlIHVzZWQuCitZb3UgY2FuIHVzZSAifX19IiB3aXRoIGEgZGlnaXQgdG8gaW5kaWNhdGUgdGhlIGxldmVsIG9mIHRoZSBmb2xkIHRoYXQKK2VuZHMuICBUaGUgZm9sZCBsZXZlbCBvZiB0aGUgZm9sbG93aW5nIGxpbmUgd2lsbCBiZSBvbmUgbGVzcyB0aGFuIHRoZQoraW5kaWNhdGVkIGxldmVsLiAgTm90ZSB0aGF0IFZpbSBkb2Vzbid0IGxvb2sgYmFjayB0byB0aGUgbGV2ZWwgb2YgdGhlIG1hdGNoaW5nCittYXJrZXIgKHRoYXQgd291bGQgdGFrZSB0b28gbXVjaCB0aW1lKS4gIEV4YW1wbGU6ID4KKworCXt7ezEKKwlmb2xkIGxldmVsIGhlcmUgaXMgMQorCXt7ezMKKwlmb2xkIGxldmVsIGhlcmUgaXMgMworCX19fTMKKwlmb2xkIGxldmVsIGhlcmUgaXMgMgorCitZb3UgY2FuIGFsc28gdXNlIG1hdGNoaW5nIHBhaXJzIG9mICJ7e3siIGFuZCAifX19IiBtYXJrZXJzIHRvIGRlZmluZSBmb2xkcy4KK0VhY2ggInt7eyIgaW5jcmVhc2VzIHRoZSBmb2xkIGxldmVsIGJ5IG9uZSwgZWFjaCAifX19IiBkZWNyZWFzZXMgdGhlIGZvbGQKK2xldmVsIGJ5IG9uZS4gIEJlIGNhcmVmdWwgdG8ga2VlcCB0aGUgbWFya2VycyBtYXRjaGluZyEgIEV4YW1wbGU6ID4KKworCXt7eworCWZvbGQgbGV2ZWwgaGVyZSBpcyAxCisJe3t7CisJZm9sZCBsZXZlbCBoZXJlIGlzIDIKKwl9fX0KKwlmb2xkIGxldmVsIGhlcmUgaXMgMQorCitZb3UgY2FuIG1peCB1c2luZyBtYXJrZXJzIHdpdGggYSBudW1iZXIgYW5kIHdpdGhvdXQgYSBudW1iZXIuICBBIHVzZWZ1bCB3YXkgb2YKK2RvaW5nIHRoaXMgaXMgdG8gdXNlIG51bWJlcmVkIG1hcmtlcnMgZm9yIGxhcmdlIGZvbGRzLCBhbmQgdW5udW1iZXJlZCBtYXJrZXJzCitsb2NhbGx5IGluIGEgZnVuY3Rpb24uICBGb3IgZXhhbXBsZSB1c2UgbGV2ZWwgb25lIGZvbGRzIGZvciB0aGUgc2VjdGlvbnMgb2YKK3lvdXIgZmlsZSBsaWtlICJzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMiLCAibG9jYWwgdmFyaWFibGVzIiBhbmQgImZ1bmN0aW9ucyIuCitVc2UgbGV2ZWwgMiBtYXJrZXJzIGZvciBlYWNoIGRlZmluaXRpb24gYW5kIGZ1bmN0aW9uLCAgVXNlIHVubnVtYmVyZWQgbWFya2VycworaW5zaWRlIGZ1bmN0aW9ucy4gIFdoZW4geW91IG1ha2UgY2hhbmdlcyBpbiBhIGZ1bmN0aW9uIHRvIHNwbGl0IHVwIGZvbGRzLCB5b3UKK2Rvbid0IGhhdmUgdG8gcmVudW1iZXIgdGhlIG1hcmtlcnMuCisKK1RoZSBtYXJrZXJzIGNhbiBiZSBzZXQgd2l0aCB0aGUgJ2ZvbGRtYXJrZXInIG9wdGlvbi4gIEl0IGlzIHJlY29tbWVuZGVkIHRvCitrZWVwIHRoaXMgYXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgInt7eyx9fX0iLCBzbyB0aGF0IGZpbGVzIGNhbiBiZSBleGNoYW5nZWQKK2JldHdlZW4gVmltIHVzZXJzLiAgT25seSBjaGFuZ2UgaXQgd2hlbiBpdCBpcyByZXF1aXJlZCBmb3IgdGhlIGZpbGUgKGUuZy4sIGl0Citjb250YWlucyBtYXJrZXJzIGZyb20gYW5vdGhlciBmb2xkaW5nIGVkaXRvciwgb3IgdGhlIGRlZmF1bHQgbWFya2VycyBjYXVzZQordHJvdWJsZSBmb3IgdGhlIGxhbmd1YWdlIG9mIHRoZSBmaWxlKS4KKworCQkJCQkJCSpmb2xkLWNyZWF0ZS1tYXJrZXIqCisiemYiIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIGZvbGQgZGVmaW5lZCBieSBtYXJrZXJzLiAgVmltIHdpbGwgaW5zZXJ0IHRoZQorbWFya2VycyBmb3IgeW91LiAgVmltIHdpbGwgYXBwZW5kIHRoZSBzdGFydCBhbmQgZW5kIG1hcmtlciwgYXMgc3BlY2lmaWVkIHdpdGgKKydmb2xkbWFya2VyJy4gIFRoZSBtYXJrZXJzIGFyZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorJ2NvbW1lbnRzdHJpbmcnIGlzIHVzZWQgaWYgaXQgaXNuJ3QgZW1wdHkuCitUaGlzIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgd2hlbjoKKy0gVGhlIGxpbmUgYWxyZWFkeSBjb250YWlucyBhIG1hcmtlciB3aXRoIGEgbGV2ZWwgbnVtYmVyLiAgVmltIHRoZW4gZG9lc24ndAorICBrbm93IHdoYXQgdG8gZG8uCistIEZvbGRzIG5lYXJieSB1c2UgYSBsZXZlbCBudW1iZXIgaW4gdGhlaXIgbWFya2VyIHdoaWNoIGdldHMgaW4gdGhlIHdheS4KKy0gVGhlIGxpbmUgaXMgaW5zaWRlIGEgY29tbWVudCwgJ2NvbW1lbnRzdHJpbmcnIGlzbid0IGVtcHR5IGFuZCBuZXN0ZWQKKyAgY29tbWVudHMgZG9uJ3Qgd29yay4gIEZvciBleGFtcGxlIHdpdGggQzogYWRkaW5nIC8qIHt7eyAqLyBpbnNpZGUgYSBjb21tZW50CisgIHdpbGwgdHJ1bmNhdGUgdGhlIGV4aXN0aW5nIGNvbW1lbnQuICBFaXRoZXIgcHV0IHRoZSBtYXJrZXIgYmVmb3JlIG9yIGFmdGVyCisgIHRoZSBjb21tZW50LCBvciBhZGQgdGhlIG1hcmtlciBtYW51YWxseS4KK0dlbmVyYWxseSBpdCdzIG5vdCBhIGdvb2QgaWRlYSB0byBsZXQgVmltIGNyZWF0ZSBtYXJrZXJzIHdoZW4geW91IGFscmVhZHkgaGF2ZQorbWFya2VycyB3aXRoIGEgbGV2ZWwgbnVtYmVyLgorCisJCQkJCQkJKmZvbGQtZGVsZXRlLW1hcmtlcioKKyJ6ZCIgY2FuIGJlIHVzZWQgdG8gZGVsZXRlIGEgZm9sZCBkZWZpbmVkIGJ5IG1hcmtlcnMuICBWaW0gd2lsbCBkZWxldGUgdGhlCittYXJrZXJzIGZvciB5b3UuICBWaW0gd2lsbCBzZWFyY2ggZm9yIHRoZSBzdGFydCBhbmQgZW5kIG1hcmtlcnMsIGFzIHNwZWNpZmllZAord2l0aCAnZm9sZG1hcmtlcicsIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBmb2xkLiAgV2hlbiB0aGUgdGV4dCBhcm91bmQgdGhlCittYXJrZXIgbWF0Y2hlcyB3aXRoICdjb21tZW50c3RyaW5nJywgdGhhdCB0ZXh0IGlzIGRlbGV0ZWQgYXMgd2VsbC4KK1RoaXMgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aGVuOgorLSBBIGxpbmUgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBtYXJrZXIgYW5kIG9uZSBvZiB0aGVtIHNwZWNpZmllcyBhIGxldmVsLgorICBPbmx5IHRoZSBmaXJzdCBvbmUgaXMgcmVtb3ZlZCwgd2l0aG91dCBjaGVja2luZyBpZiB0aGlzIHdpbGwgaGF2ZSB0aGUKKyAgZGVzaXJlZCBlZmZlY3Qgb2YgZGVsZXRpbmcgdGhlIGZvbGQuCistIFRoZSBtYXJrZXIgY29udGFpbnMgYSBsZXZlbCBudW1iZXIgYW5kIGlzIHVzZWQgdG8gc3RhcnQgb3IgZW5kIHNldmVyYWwgZm9sZHMKKyAgYXQgdGhlIHNhbWUgdGltZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBGb2xkIGNvbW1hbmRzCQkJCSpmb2xkLWNvbW1hbmRzKiAqRTQ5MCoKKworQWxsIGZvbGRpbmcgY29tbWFuZHMgc3RhcnQgd2l0aCAieiIuICBIaW50OiB0aGUgInoiIGxvb2tzIGxpa2UgYSBmb2xkZWQgcGllY2UKK29mIHBhcGVyLCBpZiB5b3UgbG9vayBhdCBpdCBmcm9tIHRoZSBzaWRlLgorCisKK0NSRUFUSU5HIEFORCBERUxFVElORyBGT0xEUyB+CisJCQkJCQkJKnpmKiAqRTM1MCoKK3pme21vdGlvbn0gIG9yCit7VmlzdWFsfXpmCU9wZXJhdG9yIHRvIGNyZWF0ZSBhIGZvbGQuCisJCVRoaXMgb25seSB3b3JrcyB3aGVuICdmb2xkbWV0aG9kJyBpcyAibWFudWFsIiBvciAibWFya2VyIi4KKwkJVGhlIG5ldyBmb2xkIHdpbGwgYmUgY2xvc2VkIGZvciB0aGUgIm1hbnVhbCIgbWV0aG9kLgorCQknZm9sZGVuYWJsZScgd2lsbCBiZSBzZXQuCisJCUFsc28gc2VlIHxmb2xkLWNyZWF0ZS1tYXJrZXJ8LgorCisJCQkJCQkJKnpGKgorekYJCUNyZWF0ZSBhIGZvbGQgZm9yIE4gbGluZXMuICBXb3JrcyBsaWtlICJ6ZiIuCisKKzp7cmFuZ2V9Zm9bbGRdCQkJCQkJKjpmb2xkKiAqOmZvKgorCQlDcmVhdGUgYSBmb2xkIGZvciB0aGUgbGluZXMgaW4ge3JhbmdlfS4gIFdvcmtzIGxpa2UgInpmIi4KKworCQkJCQkJCSp6ZCogKkUzNTEqCit6ZAkJRGVsZXRlIG9uZSBmb2xkIGF0IHRoZSBjdXJzb3IuICBXaGVuIHRoZSBjdXJzb3IgaXMgb24gZm9sZGVkCisJCWxpbmUsIHRoYXQgZm9sZCBpcyBkZWxldGVkLiAgTmVzdGVkIGZvbGRzIGFyZSBtb3ZlZCBvbmUgbGV2ZWwKKwkJdXAuICBJbiBWaXN1YWwgbW9kZSBhbGwgZm9sZHMgKHBhcnRpYWxseSkgaW4gdGhlIHNlbGVjdGVkIGFyZWEKKwkJYXJlIGRlbGV0ZWQuICBDYXJlZnVsOiBUaGlzIGVhc2lseSBkZWxldGVzIG1vcmUgZm9sZHMgdGhhbiB5b3UKKwkJZXhwZWN0IGFuZCB0aGVyZSBpcyBubyB1bmRvLgorCQlUaGlzIG9ubHkgd29ya3Mgd2hlbiAnZm9sZG1ldGhvZCcgaXMgIm1hbnVhbCIgb3IgIm1hcmtlciIuCisJCUFsc28gc2VlIHxmb2xkLWRlbGV0ZS1tYXJrZXJ8LgorCisJCQkJCQkJKnpEKgorekQJCURlbGV0ZSBmb2xkcyByZWN1cnNpdmVseSBhdCB0aGUgY3Vyc29yLiAgSW4gVmlzdWFsIG1vZGUgYWxsCisJCWZvbGRzIChwYXJ0aWFsbHkpIGluIHRoZSBzZWxlY3RlZCBhcmVhIGFuZCBhbGwgbmVzdGVkIGZvbGRzIGluCisJCXRoZW0gYXJlIGRlbGV0ZWQuCisJCVRoaXMgb25seSB3b3JrcyB3aGVuICdmb2xkbWV0aG9kJyBpcyAibWFudWFsIiBvciAibWFya2VyIi4KKwkJQWxzbyBzZWUgfGZvbGQtZGVsZXRlLW1hcmtlcnwuCisKKwkJCQkJCQkqekUqICpFMzUyKgorekUJCUVsaW1pbmF0ZSBhbGwgZm9sZHMgaW4gdGhlIHdpbmRvdy4KKwkJVGhpcyBvbmx5IHdvcmtzIHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJtYW51YWwiIG9yICJtYXJrZXIiLgorCQlBbHNvIHNlZSB8Zm9sZC1kZWxldGUtbWFya2VyfC4KKworCitPUEVOSU5HIEFORCBDTE9TSU5HIEZPTERTIH4KKworQSBmb2xkIHNtYWxsZXIgdGhhbiAnZm9sZG1pbmxpbmVzJyB3aWxsIGFsd2F5cyBiZSBkaXNwbGF5ZWQgbGlrZSBpdCB3YXMgb3Blbi4KK1RoZXJlZm9yZSB0aGUgY29tbWFuZHMgYmVsb3cgbWF5IHdvcmsgZGlmZmVyZW50bHkgb24gc21hbGwgZm9sZHMuCisKKwkJCQkJCQkqem8qCit6bwkJT3BlbiBvbmUgZm9sZCB1bmRlciB0aGUgY3Vyc29yLiAgV2hlbiBhIGNvdW50IGlzIGdpdmVuLCB0aGF0CisJCW1hbnkgZm9sZHMgZGVlcCB3aWxsIGJlIG9wZW5lZC4gIEluIFZpc3VhbCBtb2RlIG9uZSBsZXZlbCBvZgorCQlmb2xkcyBpcyBvcGVuZWQgZm9yIGFsbCBsaW5lcyBpbiB0aGUgc2VsZWN0ZWQgYXJlYS4KKworCQkJCQkJCSp6TyoKK3pPCQlPcGVuIGFsbCBmb2xkcyB1bmRlciB0aGUgY3Vyc29yIHJlY3Vyc2l2ZWx5LiAgRm9sZHMgdGhhdCBkb24ndAorCQljb250YWluIHRoZSBjdXJzb3IgbGluZSBhcmUgdW5jaGFuZ2VkLgorCQlJbiBWaXN1YWwgbW9kZSBpdCBvcGVucyBhbGwgZm9sZHMgdGhhdCBhcmUgaW4gdGhlIHNlbGVjdGVkCisJCWFyZWEsIGFsc28gdGhvc2UgdGhhdCBhcmUgb25seSBwYXJ0bHkgc2VsZWN0ZWQuCisKKwkJCQkJCQkqemMqCit6YwkJQ2xvc2Ugb25lIGZvbGQgdW5kZXIgdGhlIGN1cnNvci4gIFdoZW4gYSBjb3VudCBpcyBnaXZlbiwgdGhhdAorCQltYW55IGZvbGRzIGRlZXAgYXJlIGNsb3NlZC4gIEluIFZpc3VhbCBtb2RlIG9uZSBsZXZlbCBvZiBmb2xkcworCQlpcyBjbG9zZWQgZm9yIGFsbCBsaW5lcyBpbiB0aGUgc2VsZWN0ZWQgYXJlYS4KKwkJJ2ZvbGRlbmFibGUnIHdpbGwgYmUgc2V0LgorCisJCQkJCQkJKnpDKgorekMJCUNsb3NlIGFsbCBmb2xkcyB1bmRlciB0aGUgY3Vyc29yIHJlY3Vyc2l2ZWx5LiAgRm9sZHMgdGhhdAorCQlkb24ndCBjb250YWluIHRoZSBjdXJzb3IgbGluZSBhcmUgdW5jaGFuZ2VkLgorCQlJbiBWaXN1YWwgbW9kZSBpdCBjbG9zZXMgYWxsIGZvbGRzIHRoYXQgYXJlIGluIHRoZSBzZWxlY3RlZAorCQlhcmVhLCBhbHNvIHRob3NlIHRoYXQgYXJlIG9ubHkgcGFydGx5IHNlbGVjdGVkLgorCQknZm9sZGVuYWJsZScgd2lsbCBiZSBzZXQuCisKKwkJCQkJCQkqemEqCit6YQkJV2hlbiBvbiBhIGNsb3NlZCBmb2xkOiBvcGVuIGl0LiBXaGVuIGZvbGRzIGFyZSBuZXN0ZWQsIHlvdQorCQltYXkgaGF2ZSB0byB1c2UgInphIiBzZXZlcmFsIHRpbWVzLiAgV2hlbiBhIGNvdW50IGlzIGdpdmVuLAorCQl0aGF0IG1hbnkgY2xvc2VkIGZvbGRzIGFyZSBvcGVuZWQuCisJCVdoZW4gb24gYW4gb3BlbiBmb2xkOiBjbG9zZSBpdCBhbmQgc2V0ICdmb2xkZW5hYmxlJy4gIFRoaXMKKwkJd2lsbCBvbmx5IGNsb3NlIG9uZSBsZXZlbCwgc2luY2UgdXNpbmcgInphIiBhZ2FpbiB3aWxsIG9wZW4KKwkJdGhlIGZvbGQuICBXaGVuIGEgY291bnQgaXMgZ2l2ZW4gdGhhdCBtYW55IGZvbGRzIHdpbGwgYmUKKwkJY2xvc2VkICh0aGF0J3Mgbm90IHRoZSBzYW1lIGFzIHJlcGVhdGluZyAiemEiIHRoYXQgbWFueQorCQl0aW1lcykuCisKKwkJCQkJCQkqekEqCit6QQkJV2hlbiBvbiBhIGNsb3NlZCBmb2xkOiBvcGVuIGl0IHJlY3Vyc2l2ZWx5LgorCQlXaGVuIG9uIGFuIG9wZW4gZm9sZDogY2xvc2UgaXQgcmVjdXJzaXZlbHkgYW5kIHNldAorCQknZm9sZGVuYWJsZScuCisKKwkJCQkJCQkqenYqCit6dgkJVmlldyBjdXJzb3IgbGluZTogT3BlbiBqdXN0IGVub3VnaCBmb2xkcyB0byBtYWtlIHRoZSBsaW5lIGluCisJCXdoaWNoIHRoZSBjdXJzb3IgaXMgbG9jYXRlZCBub3QgZm9sZGVkLgorCisJCQkJCQkJKnp4KgorengJCVVwZGF0ZSBmb2xkczogVW5kbyBtYW51YWxseSBvcGVuZWQgYW5kIGNsb3NlZCBmb2xkczogcmUtYXBwbHkKKwkJJ2ZvbGRsZXZlbCcsIHRoZW4gZG8gInp2IjogVmlldyBjdXJzb3IgbGluZS4KKworCQkJCQkJCSp6WCoKK3pYCQlVbmRvIG1hbnVhbGx5IG9wZW5lZCBhbmQgY2xvc2VkIGZvbGRzOiByZS1hcHBseSAnZm9sZGxldmVsJy4KKworCQkJCQkJCSp6bSoKK3ptCQlGb2xkIG1vcmU6IFN1YnRyYWN0IG9uZSBmcm9tICdmb2xkbGV2ZWwnLiAgSWYgJ2ZvbGRsZXZlbCcgd2FzCisJCWFscmVhZHkgemVybyBub3RoaW5nIGhhcHBlbnMuCisJCSdmb2xkZW5hYmxlJyB3aWxsIGJlIHNldC4KKworCQkJCQkJCSp6TSoKK3pNCQlDbG9zZSBhbGwgZm9sZHM6IHNldCAnZm9sZGxldmVsJyB0byAwLgorCQknZm9sZGVuYWJsZScgd2lsbCBiZSBzZXQuCisKKwkJCQkJCQkqenIqCit6cgkJUmVkdWNlIGZvbGRpbmc6IEFkZCBvbmUgdG8gJ2ZvbGRsZXZlbCcuCisKKwkJCQkJCQkqelIqCit6UgkJT3BlbiBhbGwgZm9sZHMuICBUaGlzIHNldHMgJ2ZvbGRsZXZlbCcgdG8gaGlnaGVzdCBmb2xkIGxldmVsLgorCisJCQkJCQkJKjpmb2xkbyogKjpmb2xkb3BlbioKKzp7cmFuZ2V9Zm9sZG9bcGVuXVshXQorCQlPcGVuIGZvbGRzIGluIHtyYW5nZX0uICBXaGVuIFshXSBpcyBhZGRlZCBhbGwgZm9sZHMgYXJlCisJCW9wZW5lZC4gIFVzZWZ1bCB0byBzZWUgYWxsIHRoZSB0ZXh0IGluIHtyYW5nZX0uICBXaXRob3V0IFshXQorCQlvbmUgbGV2ZWwgb2YgZm9sZHMgaXMgb3BlbmVkLgorCisJCQkJCQkJKjpmb2xkYyogKjpmb2xkY2xvc2UqCis6e3JhbmdlfWZvbGRjW2xvc2VdWyFdCisJCUNsb3NlIGZvbGRzIGluIHtyYW5nZX0uICBXaGVuIFshXSBpcyBhZGRlZCBhbGwgZm9sZHMgYXJlCisJCWNsb3NlZC4gIFVzZWZ1bCB0byBoaWRlIGFsbCB0aGUgdGV4dCBpbiB7cmFuZ2V9LiAgV2l0aG91dCBbIV0KKwkJb25lIGxldmVsIG9mIGZvbGRzIGlzIGNsb3NlZC4KKworCQkJCQkJCSp6bioKK3puCQlGb2xkIG5vbmU6IHJlc2V0ICdmb2xkZW5hYmxlJy4gIEFsbCBmb2xkcyB3aWxsIGJlIG9wZW4uCisKKwkJCQkJCQkqek4qCit6TgkJRm9sZCBub3JtYWw6IHNldCAnZm9sZGVuYWJsZScuICBBbGwgZm9sZHMgd2lsbCBiZSBhcyB0aGV5CisJCXdlcmUgYmVmb3JlLgorCisJCQkJCQkJKnppKgoremkJCUludmVydCAnZm9sZGVuYWJsZScuCisKKworTU9WSU5HIE9WRVIgRk9MRFMgfgorCQkJCQkJCSpbeioKK1t6CQlNb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBvcGVuIGZvbGQuICBJZiBhbHJlYWR5IGF0IHRoZQorCQlzdGFydCwgbW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGZvbGQgdGhhdCBjb250YWlucyBpdC4gIElmCisJCXRoZXJlIGlzIG5vIGNvbnRhaW5pbmcgZm9sZCwgdGhlIGNvbW1hbmQgZmFpbHMuCisJCVdoZW4gYSBjb3VudCBpcyB1c2VkLCByZXBlYXRzIHRoZSBjb21tYW5kIE4gdGltZXMuCisKKwkJCQkJCQkqXXoqCitdegkJTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG9wZW4gZm9sZC4gIElmIGFscmVhZHkgYXQgdGhlCisJCWVuZCwgbW92ZSB0byB0aGUgZW5kIG9mIHRoZSBmb2xkIHRoYXQgY29udGFpbnMgaXQuICBJZiB0aGVyZQorCQlpcyBubyBjb250YWluaW5nIGZvbGQsIHRoZSBjb21tYW5kIGZhaWxzLgorCQlXaGVuIGEgY291bnQgaXMgdXNlZCwgcmVwZWF0cyB0aGUgY29tbWFuZCBOIHRpbWVzLgorCisJCQkJCQkJKnpqKgoremoJCU1vdmUgZG93bndhcmRzIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBmb2xkLiAgQSBjbG9zZWQgZm9sZAorCQlpcyBjb3VudGVkIGFzIG9uZSBmb2xkLgorCQlXaGVuIGEgY291bnQgaXMgdXNlZCwgcmVwZWF0cyB0aGUgY29tbWFuZCBOIHRpbWVzLgorCQlUaGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgYWZ0ZXIgYW4gfG9wZXJhdG9yfC4KKworCQkJCQkJCSp6ayoKK3prCQlNb3ZlIHVwd2FyZHMgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZm9sZC4gIEEgY2xvc2VkIGZvbGQKKwkJaXMgY291bnRlZCBhcyBvbmUgZm9sZC4KKwkJV2hlbiBhIGNvdW50IGlzIHVzZWQsIHJlcGVhdHMgdGhlIGNvbW1hbmQgTiB0aW1lcy4KKwkJVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIGFmdGVyIGFuIHxvcGVyYXRvcnwuCisKKworRVhFQ1VUSU5HIENPTU1BTkRTIE9OIEZPTERTIH4KKworOltyYW5nZV1mb2xkZFtvb3Blbl0ge2NtZH0JCQkqOmZvbGRkKiAqOmZvbGRkb29wZW4qCisJCUV4ZWN1dGUge2NtZH0gb24gYWxsIGxpbmVzIHRoYXQgYXJlIG5vdCBpbiBhIGNsb3NlZCBmb2xkLgorCQlXaGVuIFtyYW5nZV0gaXMgZ2l2ZW4sIG9ubHkgdGhlc2UgbGluZXMgYXJlIHVzZWQuCisJCUVhY2ggdGltZSB7Y21kfSBpcyBleGVjdXRlZCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgb24gdGhlCisJCWxpbmUgaXQgaXMgZXhlY3V0ZWQgZm9yLgorCQlUaGlzIHdvcmtzIGxpa2UgdGhlICI6Z2xvYmFsIiBjb21tYW5kOiBGaXJzdCBhbGwgbGluZXMgdGhhdAorCQlhcmUgbm90IGluIGEgY2xvc2VkIGZvbGQgYXJlIG1hcmtlZC4gIFRoZW4gdGhlIHtjbWR9IGlzCisJCWV4ZWN1dGVkIGZvciBhbGwgbWFya2VkIGxpbmVzLiAgVGh1cyB3aGVuIHtjbWR9IGNoYW5nZXMgdGhlCisJCWZvbGRzLCB0aGlzIGhhcyBubyBpbmZsdWVuY2Ugb24gd2hlcmUgaXQgaXMgZXhlY3V0ZWQgKGV4Y2VwdAorCQl3aGVuIGxpbmVzIGFyZSBkZWxldGVkLCBvZiBjb3Vyc2UpLgorCQlFeGFtcGxlOiA+CisJCQk6Zm9sZGRvb3BlbiBzL2VuZC9sb29wX2VuZC9nZQorPAkJTm90ZSB0aGUgdXNlIG9mIHRoZSAiZSIgZmxhZyB0byBhdm9pZCBnZXR0aW5nIGFuIGVycm9yIG1lc3NhZ2UKKwkJd2hlcmUgImVuZCIgZG9lc24ndCBtYXRjaC4KKworOltyYW5nZV1mb2xkZG9jW2xvc2VkXSB7Y21kfQkJCSo6Zm9sZGRvYyogKjpmb2xkZG9jbG9zZWQqCisJCUV4ZWN1dGUge2NtZH0gb24gYWxsIGxpbmVzIHRoYXQgYXJlIGluIGEgY2xvc2VkIGZvbGQuCisJCU90aGVyd2lzZSBsaWtlICI6Zm9sZGRvb3BlbiIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gRm9sZCBvcHRpb25zCQkJCQkqZm9sZC1vcHRpb25zKgorCitDT0xPUlMJCQkJCQkJKmZvbGQtY29sb3JzKgorCitUaGUgY29sb3JzIG9mIGEgY2xvc2VkIGZvbGQgYXJlIHNldCB3aXRoIHRoZSBGb2xkZWQgZ3JvdXAgfGhsLUZvbGRlZHwuICBUaGUKK2NvbG9ycyBvZiB0aGUgZm9sZCBjb2x1bW4gYXJlIHNldCB3aXRoIHRoZSBGb2xkQ29sdW1uIGdyb3VwIHxobC1Gb2xkQ29sdW1ufC4KK0V4YW1wbGUgdG8gc2V0IHRoZSBjb2xvcnM6ID4KKworCTpoaWdobGlnaHQgRm9sZGVkIGd1aWJnPWdyZXkgZ3VpZmc9Ymx1ZQorCTpoaWdobGlnaHQgRm9sZENvbHVtbiBndWliZz1kYXJrZ3JleSBndWlmZz13aGl0ZQorCisKK0ZPTERMRVZFTAkJCQkJCSpmb2xkLWZvbGRsZXZlbCoKKworJ2ZvbGRsZXZlbCcgaXMgYSBudW1iZXIgb3B0aW9uOiBUaGUgaGlnaGVyIHRoZSBtb3JlIGZvbGRlZCByZWdpb25zIGFyZSBvcGVuLgorV2hlbiAnZm9sZGxldmVsJyBpcyAwLCBhbGwgZm9sZHMgYXJlIGNsb3NlZC4KK1doZW4gJ2ZvbGRsZXZlbCcgaXMgcG9zaXRpdmUsIHNvbWUgZm9sZHMgY2xvc2VkLgorV2hlbiAnZm9sZGxldmVsJyBpcyB2ZXJ5IGhpZ2gsIGFsbCBmb2xkcyBhcmUgb3Blbi4KKydmb2xkbGV2ZWwnIGlzIGFwcGxpZWQgd2hlbiBpdCBpcyBjaGFuZ2VkLiAgQWZ0ZXIgdGhhdCBtYW51YWxseSBmb2xkcyBjYW4gYmUKK29wZW5lZCBhbmQgY2xvc2VkLgorV2hlbiBpbmNyZWFzZWQsIGZvbGRzIGFib3ZlIHRoZSBuZXcgbGV2ZWwgYXJlIG9wZW5lZC4gIE5vIG1hbnVhbGx5IG9wZW5lZAorZm9sZHMgd2lsbCBiZSBjbG9zZWQuCitXaGVuIGRlY3JlYXNlZCwgZm9sZHMgYWJvdmUgdGhlIG5ldyBsZXZlbCBhcmUgY2xvc2VkLiAgTm8gbWFudWFsbHkgY2xvc2VkCitmb2xkcyB3aWxsIGJlIG9wZW5lZC4KKworCitGT0xEVEVYVAkJCQkJCSpmb2xkLWZvbGR0ZXh0KgorCisnZm9sZHRleHQnIGlzIGEgc3RyaW5nIG9wdGlvbiB0aGF0IHNwZWNpZmllcyBhbiBleHByZXNzaW9uLiAgVGhpcyBleHByZXNzaW9uCitpcyBldmFsdWF0ZWQgdG8gb2J0YWluIHRoZSB0ZXh0IGRpc3BsYXllZCBmb3IgYSBjbG9zZWQgZm9sZC4gIEV4YW1wbGU6ID4KKworICAgIDpzZXQgZm9sZHRleHQ9djpmb2xkZGFzaGVzLnN1YnN0aXR1dGUoZ2V0bGluZSh2OmZvbGRzdGFydCksJy9cXCpcXFx8XFwqL1xcXHx7e3tcXGRcXD0nLCcnLCdnJykKKworVGhpcyBzaG93cyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZm9sZCwgd2l0aCAiLyoiLCAiKi8iIGFuZCAie3t7IiByZW1vdmVkLgorTm90ZSB0aGUgdXNlIG9mIGJhY2tzbGFzaGVzIHRvIGF2b2lkIHNvbWUgY2hhcmFjdGVycyB0byBiZSBpbnRlcnByZXRlZCBieSB0aGUKKyI6c2V0IiBjb21tYW5kLiAgSXQncyBzaW1wbGVyIHRvIGRlZmluZSBhIGZ1bmN0aW9uIGFuZCBjYWxsIHRoYXQ6ID4KKworICAgIDpzZXQgZm9sZHRleHQ9TXlGb2xkVGV4dCgpCisgICAgOmZ1bmN0aW9uIE15Rm9sZFRleHQoKQorICAgIDogIGxldCBsaW5lID0gZ2V0bGluZSh2OmZvbGRzdGFydCkKKyAgICA6ICBsZXQgc3ViID0gc3Vic3RpdHV0ZShsaW5lLCAnL1wqXHxcKi9cfHt7e1xkXD0nLCAnJywgJ2cnKQorICAgIDogIHJldHVybiB2OmZvbGRkYXNoZXMgLiBzdWIKKyAgICA6ZW5kZnVuY3Rpb24KKworRXZhbHVhdGluZyAnZm9sZHRleHQnIGlzIGRvbmUgaW4gdGhlIHxzYW5kYm94fC4gIFRoZSBjdXJyZW50IHdpbmRvdyBpcyBzZXQgdG8KK3RoZSB3aW5kb3cgdGhhdCBkaXNwbGF5cyB0aGUgbGluZS4gIEVycm9ycyBhcmUgaWdub3JlZC4KKworVGhlIGRlZmF1bHQgdmFsdWUgaXMgfGZvbGR0ZXh0KCl8LiAgVGhpcyByZXR1cm5zIGEgcmVhc29uYWJsZSB0ZXh0IGZvciBtb3N0Cit0eXBlcyBvZiBmb2xkaW5nLiAgSWYgeW91IGRvbid0IGxpa2UgaXQsIHlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biAnZm9sZHRleHQnCitleHByZXNzaW9uLiAgSXQgY2FuIHVzZSB0aGVzZSBzcGVjaWFsIFZpbSB2YXJpYWJsZXM6CisJdjpmb2xkc3RhcnQJbGluZSBudW1iZXIgb2YgZmlyc3QgbGluZSBpbiB0aGUgZm9sZAorCXY6Zm9sZGVuZAlsaW5lIG51bWJlciBvZiBsYXN0IGxpbmUgaW4gdGhlIGZvbGQKKwl2OmZvbGRkYXNoZXMJYSBzdHJpbmcgdGhhdCBjb250YWlucyBkYXNoZXMgdG8gcmVwcmVzZW50IHRoZQorCQkJZm9sZGxldmVsLgorCXY6Zm9sZGxldmVsCXRoZSBmb2xkbGV2ZWwgb2YgdGhlIGZvbGQKKworSW4gdGhlIHJlc3VsdCBhIFRBQiBpcyByZXBsYWNlZCB3aXRoIGEgc3BhY2UgYW5kIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlCittYWRlIGludG8gcHJpbnRhYmxlIGNoYXJhY3RlcnMuCisKK1RoZSByZXN1bHRpbmcgbGluZSBpcyB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSB3aW5kb3csIGl0IG5ldmVyIHdyYXBzLgorV2hlbiB0aGVyZSBpcyByb29tIGFmdGVyIHRoZSB0ZXh0LCBpdCBpcyBmaWxsZWQgd2l0aCB0aGUgY2hhcmFjdGVyIHNwZWNpZmllZAorYnkgJ2ZpbGxjaGFycycuCisKK05vdGUgdGhhdCBiYWNrc2xhc2hlcyBuZWVkIHRvIGJlIHVzZWQgZm9yIGNoYXJhY3RlcnMgdGhhdCB0aGUgIjpzZXQiIGNvbW1hbmQKK2hhbmRsZXMgZGlmZmVyZW50bHk6IFNwYWNlLCBiYWNrc2xhc2ggYW5kIGRvdWJsZS1xdW90ZS4gfG9wdGlvbi1iYWNrc2xhc2h8CisKKworRk9MRENPTFVNTgkJCQkJCSpmb2xkLWZvbGRjb2x1bW4qCisKKydmb2xkY29sdW1uJyBpcyBhIG51bWJlciwgd2hpY2ggc2V0cyB0aGUgd2lkdGggZm9yIGEgY29sdW1uIG9uIHRoZSBzaWRlIG9mIHRoZQord2luZG93IHRvIGluZGljYXRlIGZvbGRzLiAgV2hlbiBpdCBpcyB6ZXJvLCB0aGVyZSBpcyBubyBmb2xkY29sdW1uLiAgQSBub3JtYWwKK3ZhbHVlIGlzIDQgb3IgNS4gIFRoZSBtaW5pbWFsIHVzZWZ1bCB2YWx1ZSBpcyAyLiAgVGhlIG1heGltdW0gaXMgMTIuCisKK0FuIG9wZW4gZm9sZCBpcyBpbmRpY2F0ZWQgd2l0aCBhIGNvbHVtbiB0aGF0IGhhcyBhICctJyBhdCB0aGUgdG9wIGFuZCAnfCcKK2NoYXJhY3RlcnMgYmVsb3cgaXQuICBUaGlzIGNvbHVtbiBzdG9wcyB3aGVyZSB0aGUgb3BlbiBmb2xkIHN0b3BzLiAgV2hlbiBmb2xkcworbmVzdCwgdGhlIG5lc3RlZCBmb2xkIGlzIG9uZSBjaGFyYWN0ZXIgcmlnaHQgb2YgdGhlIGZvbGQgaXQncyBjb250YWluZWQgaW4uCisKK0EgY2xvc2VkIGZvbGQgaXMgaW5kaWNhdGVkIHdpdGggYSAnKycuCisKK1doZXJlIHRoZSBmb2xkIGNvbHVtbiBpcyB0b28gbmFycm93IHRvIGRpc3BsYXkgYWxsIG5lc3RlZCBmb2xkcywgZGlnaXRzIGFyZQorc2hvd24gdG8gaW5kaWNhdGUgdGhlIG5lc3RpbmcgbGV2ZWwuCisKK1RoZSBtb3VzZSBjYW4gYWxzbyBiZSB1c2VkIHRvIG9wZW4gYW5kIGNsb3NlIGZvbGRzIGJ5IGNsaWNraW5nIGluIHRoZQorZm9sZCBjb2x1bW46CistIENsaWNrIG9uIGEgJysnIHRvIG9wZW4gdGhlIGNsb3NlZCBmb2xkIGF0IHRoaXMgcm93LgorLSBDbGljayBvbiBhbnkgb3RoZXIgbm9uLWJsYW5rIGNoYXJhY3RlciB0byBjbG9zZSB0aGUgb3BlbiBmb2xkIGF0IHRoaXMgcm93LgorCisKK09USEVSIE9QVElPTlMKKworJ2ZvbGRlbmFibGUnICAnZmVuJzoJT3BlbiBhbGwgZm9sZHMgd2hpbGUgbm90IHNldC4KKydmb2xkZXhwcicgICAgJ2ZkZSc6CUV4cHJlc3Npb24gdXNlZCBmb3IgImV4cHIiIGZvbGRpbmcuCisnZm9sZGlnbm9yZScgICdmZGknOglDaGFyYWN0ZXJzIHVzZWQgZm9yICJpbmRlbnQiIGZvbGRpbmcuCisnZm9sZG1hcmtlcicgICdmbXInOglEZWZpbmVkIG1hcmtlcnMgdXNlZCBmb3IgIm1hcmtlciIgZm9sZGluZy4KKydmb2xkbWV0aG9kJyAgJ2ZkbSc6CU5hbWUgb2YgdGhlIGN1cnJlbnQgZm9sZGluZyBtZXRob2QuCisnZm9sZG1pbmxpbmVzJyAnZm1sJzoJTWluaW11bSBudW1iZXIgb2Ygc2NyZWVuIGxpbmVzIGZvciBhIGZvbGQgdG8gYmUKKwkJCWRpc3BsYXllZCBjbG9zZWQuCisnZm9sZG5lc3RtYXgnICdmZG4nOglNYXhpbXVtIG5lc3RpbmcgZm9yICJpbmRlbnQiIGFuZCAic3ludGF4IiBmb2xkaW5nLgorJ2ZvbGRvcGVuJyAgICAnZmRvJzoJV2hpY2gga2luZHMgb2YgY29tbWFuZHMgb3BlbiBjbG9zZWQgZm9sZHMuCisnZm9sZGNsb3NlJyAgICdmY2wnOglXaGVuIHRoZSBmb2xkcyBub3QgdW5kZXIgdGhlIGN1cnNvciBhcmUgY2xvc2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIEJlaGF2aW9yIG9mIGZvbGRzCQkJCQkqZm9sZC1iZWhhdmlvcioKKworV2hlbiBtb3ZpbmcgdGhlIGN1cnNvciB1cHdhcmRzIG9yIGRvd253YXJkcyBhbmQgd2hlbiBzY3JvbGxpbmcsIHRoZSBjdXJzb3IKK3dpbGwgbW92ZSB0byB0aGUgZmlyc3QgbGluZSBvZiBhIHNlcXVlbmNlIG9mIGZvbGRlZCBsaW5lcy4gIFdoZW4gdGhlIGN1cnNvciBpcworYWxyZWFkeSBvbiBhIGZvbGRlZCBsaW5lLCBpdCBtb3ZlcyB0byB0aGUgbmV4dCB1bmZvbGRlZCBsaW5lIG9yIHRoZSBuZXh0CitjbG9zZWQgZm9sZC4KKworV2hpbGUgdGhlIGN1cnNvciBpcyBvbiBmb2xkZWQgbGluZXMsIHRoZSBjdXJzb3IgaXMgYWx3YXlzIGRpc3BsYXllZCBpbiB0aGUKK2ZpcnN0IGNvbHVtbi4gIFRoZSBydWxlciBkb2VzIHNob3cgdGhlIGFjdHVhbCBjdXJzb3IgcG9zaXRpb24sIGJ1dCBzaW5jZSB0aGUKK2xpbmUgaXMgZm9sZGVkLCBpdCBjYW5ub3QgYmUgZGlzcGxheWVkIHRoZXJlLgorCitNYW55IG1vdmVtZW50IGNvbW1hbmRzIGhhbmRsZSBhIHNlcXVlbmNlIG9mIGZvbGRlZCBsaW5lcyBsaWtlIGFuIGVtcHR5IGxpbmUuCitGb3IgZXhhbXBsZSwgdGhlICJ3IiBjb21tYW5kIHN0b3BzIG9uY2UgaW4gdGhlIGZpcnN0IGNvbHVtbi4KKworV2hlbiBpbiBJbnNlcnQgbW9kZSwgdGhlIGN1cnNvciBsaW5lIGlzIG5ldmVyIGZvbGRlZC4gIFRoYXQgYWxsb3dzIHlvdSB0byBzZWUKK3doYXQgeW91IHR5cGUhCisKK1doZW4gdXNpbmcgYW4gb3BlcmF0b3IsIGEgY2xvc2VkIGZvbGQgaXMgaW5jbHVkZWQgYXMgYSB3aG9sZS4gIFRodXMgImRsIgorZGVsZXRlcyB0aGUgd2hvbGUgY2xvc2VkIGZvbGQgdW5kZXIgdGhlIGN1cnNvci4KKworRm9yIEV4IGNvbW1hbmRzIHRoZSByYW5nZSBpcyBhZGp1c3RlZCB0byBhbHdheXMgc3RhcnQgYXQgdGhlIGZpcnN0IGxpbmUgb2YgYQorZm9sZCBhbmQgZW5kIGF0IHRoZSBsYXN0IGxpbmUgb2YgYSBmb2xkLiAgVGh1cyB0aGlzIGNvbW1hbmQ6ID4KKwk6cy9mb28vYmFyL2cKK3doZW4gdXNlZCB3aXRoIHRoZSBjdXJzb3Igb24gYSBjbG9zZWQgZm9sZCwgd2lsbCByZXBsYWNlICJmb28iIHdpdGggImJhciIgaW4KK2FsbCBsaW5lcyBvZiB0aGUgZm9sZC4KK1RoaXMgZG9lcyBub3QgaGFwcGVuIGZvciB8OmZvbGRkb29wZW58IGFuZCB8OmZvbGRkb2Nsb3NlZHwuCisKK1doZW4gZWRpdGluZyBhIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIGVkaXRlZCBiZWZvcmUsIHRoZSBsYXN0IHVzZWQgZm9sZGluZworc2V0dGluZ3MgYXJlIHVzZWQgYWdhaW4uICBGb3IgbWFudWFsIGZvbGRpbmcgdGhlIGRlZmluZWQgZm9sZHMgYXJlIHJlc3RvcmVkLgorRm9yIGFsbCBmb2xkaW5nIG1ldGhvZHMgdGhlIG1hbnVhbGx5IG9wZW5lZCBhbmQgY2xvc2VkIGZvbGRzIGFyZSByZXN0b3JlZC4KK0lmIHRoaXMgYnVmZmVyIGhhcyBiZWVuIGVkaXRlZCBpbiB0aGlzIHdpbmRvdywgdGhlIHZhbHVlcyBmcm9tIGJhY2sgdGhlbiBhcmUKK3VzZWQuICBPdGhlcndpc2UgdGhlIHZhbHVlcyBmcm9tIHRoZSB3aW5kb3cgd2hlcmUgdGhlIGJ1ZmZlciB3YXMgZWRpdGVkIGxhc3QKK2FyZSB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9ndWkudHh0IGIvcnVudGltZS9kb2MvZ3VpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzBhM2ViCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZ3VpLnR4dApAQCAtMCwwICsxLDk1MSBAQAorKmd1aS50eHQqICAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAwMgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1ZpbSdzIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQkJCQkqZ3VpKiAqR1VJKgorCisxLiBTdGFydGluZyB0aGUgR1VJCQl8Z3VpLXN0YXJ0fAorMi4gU2Nyb2xsYmFycwkJCXxndWktc2Nyb2xsYmFyc3wKKzMuIE1vdXNlIENvbnRyb2wJCXxndWktbW91c2V8Cis0LiBNYWtpbmcgR1VJIFNlbGVjdGlvbnMJfGd1aS1zZWxlY3Rpb25zfAorNS4gTWVudXMJCQl8bWVudXN8Cis2LiBFeHRyYXMJCQl8Z3VpLWV4dHJhc3wKKzcuIFNoZWxsIENvbW1hbmRzCQl8Z3VpLXNoZWxsfAorCitPdGhlciBHVUkgZG9jdW1lbnRhdGlvbjoKK3xndWlfeDExLnR4dHwJRm9yIHNwZWNpZmljIGl0ZW1zIG9mIHRoZSBYMTEgR1VJLgorfGd1aV93MzIudHh0fAlGb3Igc3BlY2lmaWMgaXRlbXMgb2YgdGhlIFdpbjMyIEdVSS4KKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFN0YXJ0aW5nIHRoZSBHVUkJCQkJKmd1aS1zdGFydCogKkUyMjkqICpFMjMzKgorCitGaXJzdCB5b3UgbXVzdCBtYWtlIHN1cmUgeW91IGFjdHVhbGx5IGhhdmUgYSB2ZXJzaW9uIG9mIFZpbSB3aXRoIHRoZSBHVUkgY29kZQoraW5jbHVkZWQuICBZb3UgY2FuIGNoZWNrIHRoaXMgd2l0aCB0aGUgIjp2ZXJzaW9uIiBjb21tYW5kLCBpdCBzaG91bGQgaW5jbHVkZQorIitHVUlfQXRoZW5hIiwgIitHVUlfQmVPUyIsICIrR1VJX0dUSyIsICIrR1VJX01vdGlmIiBvciAiTVMtV2luZG93cyAuLi4gYml0CitHVUkgdmVyc2lvbiIuCisKK0hvdyB0byBzdGFydCB0aGUgR1VJIGRlcGVuZHMgb24gdGhlIHN5c3RlbSB1c2VkLiAgTW9zdGx5IHlvdSBjYW4gcnVuIHRoZQorR1VJIHZlcnNpb24gb2YgVmltIHdpdGg6CisgICAgZ3ZpbSBbb3B0aW9uc10gW2ZpbGVzLi4uXQorCitUaGUgWDExIHZlcnNpb24gb2YgVmltIGNhbiBydW4gYm90aCBpbiBHVUkgYW5kIGluIG5vbi1HVUkgbW9kZS4gIFNlZQorfGd1aS14MTEtc3RhcnR8LgorCisJCQkJCSpndWktaW5pdCogKmd2aW1yYyogKi5ndmltcmMqICpfZ3ZpbXJjKgorV2hlbiB0aGUgR1VJIHN0YXJ0cyB1cCBpbml0aWFsaXphdGlvbnMgYXJlIGNhcnJpZWQgb3V0LCBpbiB0aGlzIG9yZGVyOgorLSBUaGUgdGVybWNhcCBvcHRpb25zIGFyZSByZXNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlIGZvciB0aGUgR1VJLgorLSBJZiB0aGUgc3lzdGVtIG1lbnUgZmlsZSBleGlzdHMsIGl0IGlzIHNvdXJjZWQuICBUaGUgbmFtZSBvZiB0aGlzIGZpbGUgaXMKKyAgbm9ybWFsbHkgIiRWSU1SVU5USU1FL21lbnUudmltIi4gIFlvdSBjYW4gY2hlY2sgdGhpcyB3aXRoICI6dmVyc2lvbiIuICBBbHNvCisgIHNlZSB8JFZJTVJVTlRJTUV8LiAgVG8gc2tpcCBsb2FkaW5nIHRoZSBzeXN0ZW0gbWVudSBpbmNsdWRlICdNJyBpbgorICAnZ3Vpb3B0aW9ucycuCQkJCSpidWZmZXJzLW1lbnUqICpub19idWZmZXJzX21lbnUqCisgIFRoZSBzeXN0ZW0gbWVudSBmaWxlIGluY2x1ZGVzIGEgIkJ1ZmZlcnMiIG1lbnUuICBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLCBzZXQKKyAgdGhlICJub19idWZmZXJzX21lbnUiIHZhcmlhYmxlIGluIHlvdXIgLnZpbXJjIChub3QgLmd2aW1yYyEpOiA+CisJOmxldCBub19idWZmZXJzX21lbnUgPSAxCis8IE5PVEU6IFN3aXRjaGluZyBvbiBzeW50YXggaGlnaGxpZ2h0aW5nIGFsc28gbG9hZHMgdGhlIG1lbnUgZmlsZSwgdGh1cworICBkaXNhYmxpbmcgdGhlIEJ1ZmZlcnMgbWVudSBtdXN0IGJlIGRvbmUgYmVmb3JlICI6c3ludGF4IG9uIi4KKyAgVGhlIHBhdGggbmFtZXMgYXJlIHRydW5jYXRlZCB0byAzNSBjaGFyYWN0ZXJzLiAgWW91IGNhbiB0cnVuY2F0ZSB0aGVtIGF0IGEKKyAgZGlmZmVyZW50IGxlbmd0aCwgZm9yIGV4YW1wbGUgNTAsIGxpa2UgdGhpczogPgorCTpsZXQgYm1lbnVfbWF4X3BhdGhsZW4gPSA1MAorLSBJZiB0aGUgIi1VIHtndmltcmN9IiBjb21tYW5kLWxpbmUgb3B0aW9uIGhhcyBiZWVuIHVzZWQgd2hlbiBzdGFydGluZyBWaW0sCisgIHRoZSB7Z3ZpbXJjfSBmaWxlIHdpbGwgYmUgcmVhZCBmb3IgaW5pdGlhbGl6YXRpb25zLiAgVGhlIGZvbGxvd2luZworICBpbml0aWFsaXphdGlvbnMgYXJlIHNraXBwZWQuCistIEZvciBVbml4IGFuZCBNUy1XaW5kb3dzLCBpZiB0aGUgc3lzdGVtIGd2aW1yYyBleGlzdHMsIGl0IGlzIHNvdXJjZWQuICBUaGUKKyAgbmFtZSBvZiB0aGlzIGZpbGUgaXMgbm9ybWFsbHkgIiRWSU0vZ3ZpbXJjIi4gIFlvdSBjYW4gY2hlY2sgdGhpcyB3aXRoCisgICI6dmVyc2lvbiIuICBBbHNvIHNlZSB8JFZJTXwuCistIFRoZSBmb2xsb3dpbmcgYXJlIHRyaWVkLCBhbmQgb25seSB0aGUgZmlyc3Qgb25lIHRoYXQgZXhpc3RzIGlzIHVzZWQ6CisgIC0gSWYgdGhlIEdWSU1JTklUIGVudmlyb25tZW50IHZhcmlhYmxlIGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5LCBpdCBpcworICAgIGV4ZWN1dGVkIGFzIGFuIEV4IGNvbW1hbmQuCisgIC0gSWYgdGhlIHVzZXIgZ3ZpbXJjIGZpbGUgZXhpc3RzLCBpdCBpcyBzb3VyY2VkLiAgVGhlIG5hbWUgb2YgdGhpcyBmaWxlIGlzCisgICAgbm9ybWFsbHkgIiRIT01FLy5ndmltcmMiLiAgWW91IGNhbiBjaGVjayB0aGlzIHdpdGggIjp2ZXJzaW9uIi4KKyAgLSBGb3IgV2luMzIsIHdoZW4gJEhPTUUgaXMgbm90IHNldCwgIiRWSU1cX2d2aW1yYyIgaXMgdXNlZC4KKyAgLSBXaGVuIGEgIl9ndmltcmMiIGZpbGUgaXMgbm90IGZvdW5kLCAiLmd2aW1yYyIgaXMgdHJpZWQgdG9vLiAgQW5kIHZpY2UKKyAgICB2ZXJzYS4KKy0gSWYgdGhlICdleHJjJyBvcHRpb24gaXMgc2V0ICh3aGljaCBpcyBOT1QgdGhlIGRlZmF1bHQpIHRoZSBmaWxlIC4vLmd2aW1yYworICBpcyBzb3VyY2VkLCBpZiBpdCBleGlzdHMgYW5kIGlzbid0IHRoZSBzYW1lIGZpbGUgYXMgdGhlIHN5c3RlbSBvciB1c2VyCisgIGd2aW1yYyBmaWxlLiAgSWYgdGhpcyBmaWxlIGlzIG5vdCBvd25lZCBieSB5b3UsIHNvbWUgc2VjdXJpdHkgcmVzdHJpY3Rpb25zCisgIGFwcGx5LiAgV2hlbiAiLmd2aW1yYyIgaXMgbm90IGZvdW5kLCAiX2d2aW1yYyIgaXMgdHJpZWQgdG9vLiAgRm9yIE1hY2ludG9zaAorICBhbmQgRE9TL1dpbjMyICJfZ3ZpbXJjIiBpcyB0cmllZCBmaXJzdC4KKworTk9URTogQWxsIGJ1dCB0aGUgZmlyc3Qgb25lIGFyZSBub3QgY2FycmllZCBvdXQgaWYgVmltIHdhcyBzdGFydGVkIHdpdGgKKyItdSBOT05FIiBhbmQgbm8gIi1VIiBhcmd1bWVudCB3YXMgZ2l2ZW4sIG9yIHdoZW4gc3RhcnRlZCB3aXRoICItVSBOT05FIi4KKworQWxsIHRoaXMgaGFwcGVucyBBRlRFUiB0aGUgbm9ybWFsIFZpbSBpbml0aWFsaXphdGlvbnMsIGxpa2UgcmVhZGluZyB5b3VyCisudmltcmMgZmlsZS4gIFNlZSB8aW5pdGlhbGl6YXRpb258LgorQnV0IHRoZSBHVUkgd2luZG93IGlzIG9ubHkgb3BlbmVkIGFmdGVyIGFsbCB0aGUgaW5pdGlhbGl6YXRpb25zIGhhdmUgYmVlbgorY2FycmllZCBvdXQuICBJZiB5b3Ugd2FudCBzb21lIGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIGp1c3QgYWZ0ZXIgb3BlbmluZyB0aGUKK0dVSSB3aW5kb3csIHVzZSB0aGUgfEdVSUVudGVyfCBhdXRvY29tbWFuZCBldmVudC4gIEV4YW1wbGU6ID4KKwk6YXV0b2NvbW1hbmQgR1VJRW50ZXIgKiB3aW5wb3MgMTAwIDUwCisKK1lvdSBjYW4gdXNlIHRoZSBndmltcmMgZmlsZXMgdG8gc2V0IHVwIHlvdXIgb3duIGN1c3RvbWl6ZWQgbWVudXMgKHNlZSB8Om1lbnV8KQorYW5kIGluaXRpYWxpemUgb3RoZXIgdGhpbmdzIHRoYXQgeW91IG1heSB3YW50IHRvIHNldCB1cCBkaWZmZXJlbnRseSBmcm9tIHRoZQordGVybWluYWwgdmVyc2lvbi4KKworUmVjb21tZW5kZWQgcGxhY2UgZm9yIHlvdXIgcGVyc29uYWwgR1VJIGluaXRpYWxpemF0aW9uczoKKwlVbml4CQkgICAgJEhPTUUvLmd2aW1yYworCU9TLzIJCSAgICAkSE9NRS8uZ3ZpbXJjIG9yICRWSU0vLmd2aW1yYworCU1TLURPUyBhbmQgV2luMzIgICAgJEhPTUUvX2d2aW1yYyBvciAkVklNL19ndmltcmMKKwlBbWlnYQkJICAgIHM6Lmd2aW1yYyBvciAkVklNLy5ndmltcmMKKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG9wdGlvbnMgd2hpY2ggb25seSBoYXZlIG1lYW5pbmcgaW4gdGhlIEdVSSB2ZXJzaW9uIG9mCitWaW0uICBUaGVzZSBhcmUgJ2d1aWN1cnNvcicsICdndWlmb250JywgJ2d1aXB0eScgYW5kICdndWlvcHRpb25zJy4gIFRoZXkgYXJlCitkb2N1bWVudGVkIGluIHxvcHRpb25zLnR4dHwgd2l0aCBhbGwgdGhlIG90aGVyIG9wdGlvbnMuCisKK0lmIHVzaW5nIHRoZSBNb3RpZiBvciBBdGhlbmEgdmVyc2lvbiBvZiB0aGUgR1VJIChidXQgbm90IGZvciB0aGUgR1RLKyBvciBXaW4zMgordmVyc2lvbiksIGEgbnVtYmVyIG9mIFggcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuICBTZWUgfGd1aS1yZXNvdXJjZXN8LgorCitBbm90aGVyIHdheSB0byBzZXQgdGhlIGNvbG9ycyBmb3IgZGlmZmVyZW50IG9jY2FzaW9ucyBpcyB3aXRoIGhpZ2hsaWdodAorZ3JvdXBzLiAgVGhlICJOb3JtYWwiIGdyb3VwIGlzIHVzZWQgdG8gc2V0IHRoZSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kCitjb2xvcnMuICBFeGFtcGxlICh3aGljaCBsb29rcyBuaWNlKTogPgorCisJOmhpZ2hsaWdodCBOb3JtYWwgZ3VpYmc9Z3JleTkwCisKK1RoZSAiZ3VpYmciIGFuZCAiZ3VpZmciIHNldHRpbmdzIG92ZXJyaWRlIHRoZSBub3JtYWwgYmFja2dyb3VuZCBhbmQKK2ZvcmVncm91bmQgc2V0dGluZ3MuICBUaGUgb3RoZXIgc2V0dGluZ3MgZm9yIHRoZSBOb3JtYWwgaGlnaGxpZ2h0IGdyb3VwIGFyZQorbm90IHVzZWQuICBVc2UgdGhlICdndWlmb250JyBvcHRpb24gdG8gc2V0IHRoZSBmb250LgorCitBbHNvIGNoZWNrIG91dCB0aGUgJ2d1aWN1cnNvcicgb3B0aW9uLCB0byBzZXQgdGhlIGNvbG9ycyBmb3IgdGhlIGN1cnNvciBpbgordmFyaW91cyBtb2Rlcy4KKworVmltIHRyaWVzIHRvIG1ha2UgdGhlIHdpbmRvdyBmaXQgb24gdGhlIHNjcmVlbiB3aGVuIGl0IHN0YXJ0cyB1cC4gIFRoaXMgYXZvaWRzCit0aGF0IHlvdSBjYW4ndCBzZWUgcGFydCBvZiBpdC4gIE9uIHRoZSBYIFdpbmRvdyBTeXN0ZW0gdGhpcyByZXF1aXJlcyBhIGJpdCBvZgorZ3Vlc3N3b3JrLiAgWW91IGNhbiBjaGFuZ2UgdGhlIGhlaWdodCB0aGF0IGlzIHVzZWQgZm9yIHRoZSB3aW5kb3cgdGl0bGUgYW5kIGEKK3Rhc2sgYmFyIHdpdGggdGhlICdndWloZWFkcm9vbScgb3B0aW9uLgorCisJCQkJCQkqOndpbnAqICo6d2lucG9zKiAqRTE4OCoKKzp3aW5wW29zXQorCQlEaXNwbGF5IGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgR1VJIHZpbQorCQl3aW5kb3cgaW4gcGl4ZWxzLiAgRG9lcyBub3Qgd29yayBpbiBhbGwgdmVyc2lvbnMuCisKKzp3aW5wW29zXSB7WH0ge1l9CQkJCQkJCSpFNDY2KgorCQlQdXQgdGhlIEdVSSB2aW0gd2luZG93IGF0IHRoZSBnaXZlbiB7WH0gYW5kIHtZfSBjb29yZGluYXRlcy4KKwkJVGhlIGNvb3JkaW5hdGVzIHNob3VsZCBzcGVjaWZ5IHRoZSBwb3NpdGlvbiBpbiBwaXhlbHMgb2YgdGhlCisJCXRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93LiAgRG9lcyBub3Qgd29yayBpbiBhbGwgdmVyc2lvbnMuCisJCURvZXMgd29yayBpbiBhbiAobmV3KSB4dGVybSB8eHRlcm0tY29sb3J8LgorCQlXaGVuIHRoZSBHVUkgd2luZG93IGhhcyBub3QgYmVlbiBvcGVuZWQgeWV0LCB0aGUgdmFsdWVzIGFyZQorCQlyZW1lbWJlcmVkIHVudGlsIHRoZSB3aW5kb3cgaXMgb3BlbmVkLiAgVGhlIHBvc2l0aW9uIGlzCisJCWFkanVzdGVkIHRvIG1ha2UgdGhlIHdpbmRvdyBmaXQgb24gdGhlIHNjcmVlbiAoaWYgcG9zc2libGUpLgorCisJCQkJCQkgICAgKjp3aW4qICo6d2luc2l6ZSogKkU0NjUqCis6d2luW3NpemVdIHt3aWR0aH0ge2hlaWdodH0KKwkJU2V0IHRoZSB3aW5kb3cgaGVpZ2h0IHRvIHt3aWR0aH0gYnkge2hlaWdodH0gY2hhcmFjdGVycy4KKwkJT2Jzb2xldGUsIHVzZSAiOnNldCBsaW5lcz0xMSBjb2x1bW5zPTIyIi4KKwkJSWYgeW91IGdldCBsZXNzIGxpbmVzIHRoYW4gZXhwZWN0ZWQsIGNoZWNrIHRoZSAnZ3VpaGVhZHJvb20nCisJCW9wdGlvbi4KKworSWYgeW91IGFyZSBydW5uaW5nIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIHlvdSBjYW4gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZQord2luZG93IFZpbSBpcyBydW5uaW5nIGluIHdpdGggdGhpcyBjb21tYW5kOiA+CisJOiF4d2luaW5mbyAtaWQgJFdJTkRPV0lECisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gU2Nyb2xsYmFycwkJCQkJCSpndWktc2Nyb2xsYmFycyoKKworVGhlcmUgYXJlIHZlcnRpY2FsIHNjcm9sbGJhcnMgYW5kIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXJzLiAgWW91IG1heQorY29uZmlndXJlIHdoaWNoIG9uZXMgYXBwZWFyIHdpdGggdGhlICdndWlvcHRpb25zJyBvcHRpb24uCisKK1RoZSBpbnRlcmZhY2UgbG9va3MgbGlrZSB0aGlzICh3aXRoICI6c2V0IGd1aW9wdGlvbnM9bWxyYiIpOgorCisJCSAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkgICAgICAgfCBGaWxlICBFZGl0CQkgSGVscCB8IDwtIE1lbnUgYmFyIChtKQorCQkgICAgICAgKy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSsKKwkJICAgICAgIHxefAkJCSAgICB8XnwKKwkJICAgICAgIHwjfCBUZXh0IGFyZWEuCQkgICAgfCN8CisJCSAgICAgICB8IHwJCQkgICAgfCB8CisJCSAgICAgICB8dnxfX19fX19fX19fX19fX19fX19fX19fX19fX3x2fAorIE5vcm1hbCBzdGF0dXMgbGluZSAtPiB8LSsgRmlsZS5jCSAgICAgICA1LDIgICstfAorIGJldHdlZW4gVmltIHdpbmRvd3MgICB8XnwiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiInxefAorCQkgICAgICAgfCB8CQkJICAgIHwgfAorCQkgICAgICAgfCB8IEFub3RoZXIgZmlsZSBidWZmZXIuICAgICB8IHwKKwkJICAgICAgIHwgfAkJCSAgICB8IHwKKwkJICAgICAgIHwjfAkJCSAgICB8I3wKKyBMZWZ0IHNjcm9sbGJhciAobCkgLT4gfCN8CQkJICAgIHwjfCA8LSBSaWdodAorCQkgICAgICAgfCN8CQkJICAgIHwjfCAgICBzY3JvbGxiYXIgKHIpCisJCSAgICAgICB8IHwJCQkgICAgfCB8CisJCSAgICAgICB8dnwJCQkgICAgfHZ8CisJCSAgICAgICArLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstKworCQkgICAgICAgfCB8PCAjIyMjCQkgICA+fCB8IDwtIEJvdHRvbQorCQkgICAgICAgKy0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSsgICAgc2Nyb2xsYmFyIChiKQorCitBbnkgb2YgdGhlIHNjcm9sbGJhciBvciBtZW51IGNvbXBvbmVudHMgbWF5IGJlIHR1cm5lZCBvZmYgYnkgbm90IHB1dHRpbmcgdGhlCithcHByb3ByaWF0ZSBsZXR0ZXIgaW4gdGhlICdndWlvcHRpb25zJyBzdHJpbmcuICBUaGUgYm90dG9tIHNjcm9sbGJhciBpcworb25seSB1c2VmdWwgd2hlbiAnbm93cmFwJyBpcyBzZXQuCisKKworVkVSVElDQUwgU0NST0xMQkFSUwkJCQkJKmd1aS12ZXJ0LXNjcm9sbCoKKworRWFjaCBWaW0gd2luZG93IGhhcyBhIHNjcm9sbGJhciBuZXh0IHRvIGl0IHdoaWNoIG1heSBiZSBzY3JvbGxlZCB1cCBhbmQgZG93bgordG8gbW92ZSB0aHJvdWdoIHRoZSB0ZXh0IGluIHRoYXQgYnVmZmVyLiAgVGhlIHNpemUgb2YgdGhlIHNjcm9sbGJhci10aHVtYgoraW5kaWNhdGVzIHRoZSBmcmFjdGlvbiBvZiB0aGUgYnVmZmVyIHdoaWNoIGNhbiBiZSBzZWVuIGluIHRoZSB3aW5kb3cuCitXaGVuIHRoZSBzY3JvbGxiYXIgaXMgZHJhZ2dlZCBhbGwgdGhlIHdheSBkb3duLCB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlCit3aWxsIGFwcGVhciBpbiB0aGUgdG9wIG9mIHRoZSB3aW5kb3cuCisKK0lmIGEgd2luZG93IGlzIHNocnVuayB0byB6ZXJvIGhlaWdodCAoYnkgdGhlIGdyb3d0aCBvZiBhbm90aGVyIHdpbmRvdykgaXRzCitzY3JvbGxiYXIgZGlzYXBwZWFycy4gSXQgcmVhcHBlYXJzIHdoZW4gdGhlIHdpbmRvdyBpcyByZXN0b3JlZC4KKworSWYgYSB3aW5kb3cgaXMgdmVydGljYWxseSBzcGxpdCwgaXQgd2lsbCBnZXQgYSBzY3JvbGxiYXIgd2hlbiBpdCBpcyB0aGUKK2N1cnJlbnQgd2luZG93IGFuZCB3aGVuLCB0YWtpbmcgdGhlIG1pZGRsZSBvZiB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGRyYXdpbmcgYQordmVydGljYWwgbGluZSwgdGhpcyBsaW5lIGdvZXMgdGhyb3VnaCB0aGUgd2luZG93LgorV2hlbiB0aGVyZSBhcmUgc2Nyb2xsYmFycyBvbiBib3RoIHNpZGVzLCBhbmQgdGhlIG1pZGRsZSBvZiB0aGUgY3VycmVudCB3aW5kb3cKK2lzIG9uIHRoZSBsZWZ0IGhhbGYsIHRoZSByaWdodCBzY3JvbGxiYXIgY29sdW1uIHdpbGwgY29udGFpbiBzY3JvbGxiYXJzIGZvcgordGhlIHJpZ2h0bW9zdCB3aW5kb3dzLiAgVGhlIHNhbWUgaGFwcGVucyBvbiB0aGUgb3RoZXIgc2lkZS4KKworCitIT1JJWk9OVEFMIFNDUk9MTEJBUlMJCQkJCSpndWktaG9yaXotc2Nyb2xsKgorCitUaGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgKGF0IHRoZSBib3R0b20gb2YgdGhlIFZpbSBHVUkpIG1heSBiZSB1c2VkIHRvCitzY3JvbGwgdGV4dCBzaWRld2F5cyB3aGVuIHRoZSAnd3JhcCcgb3B0aW9uIGlzIHR1cm5lZCBvZmYuICBUaGUKK3Njcm9sbGJhci10aHVtYiBzaXplIGlzIHN1Y2ggdGhhdCB0aGUgdGV4dCBvZiB0aGUgbG9uZ2VzdCB2aXNpYmxlIGxpbmUgbWF5IGJlCitzY3JvbGxlZCBhcyBmYXIgYXMgcG9zc2libGUgbGVmdCBhbmQgcmlnaHQuICBUaGUgY3Vyc29yIGlzIG1vdmVkIHdoZW4KK25lY2Vzc2FyeSwgaXQgbXVzdCByZW1haW4gb24gYSB2aXNpYmxlIGNoYXJhY3RlciAodW5sZXNzICd2aXJ0dWFsZWRpdCcgaXMKK3NldCkuCisKK0NvbXB1dGluZyB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IHZpc2libGUgdGFrZXMgcXVpdGUgYSBiaXQgb2YgY29tcHV0YXRpb24sCithbmQgaXQgaGFzIHRvIGJlIGRvbmUgZXZlcnkgdGltZSBzb21ldGhpbmcgY2hhbmdlcy4gIElmIHRoaXMgdGFrZXMgdG9vIG11Y2gKK3RpbWUgb3IgeW91IGRvbid0IGxpa2UgdGhlIGN1cnNvciBqdW1waW5nIHRvIGFub3RoZXIgbGluZSwgaW5jbHVkZSB0aGUgJ2gnCitmbGFnIGluICdndWlvcHRpb25zJy4gIFRoZW4gdGhlIHNjcm9sbGluZyBpcyBsaW1pdGVkIGJ5IHRoZSB0ZXh0IG9mIHRoZQorY3VycmVudCBjdXJzb3IgbGluZS4KKworCQkJCQkJCSphdGhlbmEtaW50ZWxsaW1vdXNlKgorSWYgeW91IGhhdmUgYW4gSW50ZWxsaW1vdXNlIGFuZCBhbiBYIHNlcnZlciB0aGF0IHN1cHBvcnRzIHVzaW5nIHRoZSB3aGVlbCwKK3RoZW4geW91IGNhbiB1c2UgdGhlIHdoZWVsIHRvIHNjcm9sbCB0aGUgdGV4dCB1cCBhbmQgZG93biBpbiBndmltLiAgVGhpcyB3b3Jrcword2l0aCBYRnJlZTg2IDQuMCBhbmQgbGF0ZXIsIGFuZCB3aXRoIHNvbWUgb2xkZXIgdmVyc2lvbnMgd2hlbiB5b3UgYWRkIHBhdGNoZXMuCitTZWUgfHNjcm9sbC1tb3VzZS13aGVlbHwuCisKK0ZvciBvbGRlciB2ZXJzaW9ucyBvZiBYRnJlZTg2IHlvdSBtdXN0IHBhdGNoIHlvdXIgWCBzZXJ2ZXIuICBUaGUgZm9sbG93aW5nCitwYWdlIGhhcyBhIGJpdCBvZiBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgSW50ZWxsaW1vdXNlIG9uIExpbnV4IGFzIHdlbGwgYXMKK2xpbmtzIHRvIHRoZSBwYXRjaGVzIGFuZCBYIHNlcnZlciBiaW5hcmllcyAobWF5IG5vdCBoYXZlIHRoZSBvbmUgeW91IG5lZWQKK3Rob3VnaCk6CisgICAgaHR0cDovL3d3dy5pbnJpYS5mci9rb2FsYS9jb2xhcy9tb3VzZS13aGVlbC1zY3JvbGwvCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gTW91c2UgQ29udHJvbAkJCQkJKmd1aS1tb3VzZSoKKworVGhlIG1vdXNlIG9ubHkgd29ya3MgaWYgdGhlIGFwcHJvcHJpYXRlIGZsYWcgaW4gdGhlICdtb3VzZScgb3B0aW9uIGlzIHNldC4KK1doZW4gdGhlIEdVSSBpcyBzd2l0Y2hlZCBvbiwgYW5kICdtb3VzZScgd2Fzbid0IHNldCB5ZXQsIHRoZSAnbW91c2UnIG9wdGlvbiBpcworYXV0b21hdGljYWxseSBzZXQgdG8gImEiLCBlbmFibGluZyBpdCBmb3IgYWxsIG1vZGVzIGV4Y2VwdCBmb3IgdGhlCit8aGl0LWVudGVyfCBwcm9tcHQuICBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLCBhIGdvb2QgcGxhY2UgdG8gY2hhbmdlIHRoZQorJ21vdXNlJyBvcHRpb24gaXMgdGhlICJndmltcmMiIGZpbGUuCisKK090aGVyIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQ6CisnbW91c2Vmb2N1cycJd2luZG93IGZvY3VzIGZvbGxvd3MgbW91c2UgcG9pbnRlciB8Z3VpLW1vdXNlLWZvY3VzfAorJ21vdXNlbW9kZWwnCXdoYXQgbW91c2UgYnV0dG9uIGRvZXMgd2hpY2ggYWN0aW9uCisnbW91c2VoaWRlJwloaWRlIG1vdXNlIHBvaW50ZXIgd2hpbGUgdHlwaW5nIHRleHQKKydzZWxlY3Rtb2RlJwl3aGV0aGVyIHRvIHN0YXJ0IFNlbGVjdCBtb2RlIG9yIFZpc3VhbCBtb2RlCisKK0EgcXVpY2sgd2F5IHRvIHNldCB0aGVzZSBpcyB3aXRoIHRoZSAiOmJlaGF2ZSIgY29tbWFuZC4KKwkJCQkJCQkqOmJlaGF2ZSogKjpiZSoKKzpiZVtoYXZlXSB7bW9kZWx9CVNldCBiZWhhdmlvciBmb3IgbW91c2UgYW5kIHNlbGVjdGlvbi4gIFZhbGlkCisJCQlhcmd1bWVudHMgYXJlOgorCQkJICAgbXN3aW4JTVMtV2luZG93cyBiZWhhdmlvcgorCQkJICAgeHRlcm0JWHRlcm0gYmVoYXZpb3IKKworCQkJVXNpbmcgIjpiZWhhdmUiIGNoYW5nZXMgdGhlc2Ugb3B0aW9uczoKKwkJCW9wdGlvbgkJbXN3aW4JCQl4dGVybQl+CisJCQknc2VsZWN0bW9kZScJIm1vdXNlLGtleSIJCSIiCisJCQknbW91c2Vtb2RlbCcJInBvcHVwIgkJCSJleHRlbmQiCisJCQkna2V5bW9kZWwnCSJzdGFydHNlbCxzdG9wc2VsIgkiIgorCQkJJ3NlbGVjdGlvbicJImV4Y2x1c2l2ZSIJCSJpbmNsdXNpdmUiCisKK0luIHRoZSAkVklNUlVOVElNRSBkaXJlY3RvcnksIHRoZXJlIGlzIGEgc2NyaXB0IGNhbGxlZCB8bXN3aW4udmltfCwgd2hpY2ggd2lsbAorYWxzbyBtYXAgYSBmZXcga2V5cyB0byB0aGUgTVMtV2luZG93cyBjdXQvY29weS9wYXN0ZSBjb21tYW5kcy4gIFRoaXMgaXMgTk9UCitjb21wYXRpYmxlLCBzaW5jZSBpdCB1c2VzIHRoZSBDVFJMLVYsIENUUkwtWCBhbmQgQ1RSTC1DIGtleXMuICBJZiB5b3UgZG9uJ3QKK21pbmQsIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKwk6c28gJFZJTVJVTlRJTUUvbXN3aW4udmltCisKK0ZvciBzY3JvbGxpbmcgd2l0aCBhIHdoZWVsIG9uIGEgbW91c2UsIHNlZSB8c2Nyb2xsLW1vdXNlLXdoZWVsfC4KKworCiszLjEgTW92aW5nIEN1cnNvciB3aXRoIE1vdXNlCQkJCSpndWktbW91c2UtbW92ZSoKKworQ2xpY2sgdGhlIGxlZnQgbW91c2UgYnV0dG9uIHNvbWV3aGVyZSBpbiBhIHRleHQgYnVmZmVyIHdoZXJlIHlvdSB3YW50IHRoZQorY3Vyc29yIHRvIGdvLCBhbmQgaXQgZG9lcyEKK1RoaXMgd29ya3MgaW4JICAgIHdoZW4gJ21vdXNlJyBjb250YWlucyB+CitOb3JtYWwgbW9kZQkgICAgJ24nIG9yICdhJworVmlzdWFsIG1vZGUJICAgICd2JyBvciAnYScKK0luc2VydCBtb2RlCSAgICAnaScgb3IgJ2EnCisKK1NlbGVjdCBtb2RlIGlzIGhhbmRsZWQgbGlrZSBWaXN1YWwgbW9kZS4KKworWW91IG1heSB1c2UgdGhpcyB3aXRoIGFuIG9wZXJhdG9yIHN1Y2ggYXMgJ2QnIHRvIGRlbGV0ZSB0ZXh0IGZyb20gdGhlIGN1cnJlbnQKK2N1cnNvciBwb3NpdGlvbiB0byB0aGUgcG9zaXRpb24geW91IHBvaW50IHRvIHdpdGggdGhlIG1vdXNlLiAgVGhhdCBpcywgeW91IGhpdAorJ2QnIGFuZCB0aGVuIGNsaWNrIHRoZSBtb3VzZSBzb21ld2hlcmUuCisKKwkJCQkJCQkqZ3VpLW1vdXNlLWZvY3VzKgorVGhlICdtb3VzZWZvY3VzJyBvcHRpb24gY2FuIGJlIHNldCB0byBtYWtlIHRoZSBrZXlib2FyZCBmb2N1cyBmb2xsb3cgdGhlCittb3VzZSBwb2ludGVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSB3aW5kb3cgd2hlcmUgdGhlIG1vdXNlIHBvaW50ZXIgaXMsIGlzIHRoZQorYWN0aXZlIHdpbmRvdy4gIFdhcm5pbmc6IHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aGVuIHVzaW5nIGEgbWVudSwKK2JlY2F1c2UgdGhlIG1lbnUgY29tbWFuZCB3aWxsIGFsd2F5cyBiZSBhcHBsaWVkIHRvIHRoZSB0b3Agd2luZG93LgorCitJZiB5b3UgYXJlIG9uIHRoZSAnOicgbGluZSAob3IgJy8nIG9yICc/JyksIHRoZW4gY2xpY2tpbmcgdGhlIGxlZnQgb3IgcmlnaHQKK21vdXNlIGJ1dHRvbiB3aWxsIHBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlICc6JyBsaW5lIChpZiAnbW91c2UnIGNvbnRhaW5zCisnYycsICdhJyBvciAnQScpLgorCitJbiBhbnkgc2l0dWF0aW9uIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIG1heSBiZSBjbGlja2VkIHRvIHBhc3RlIHRoZSBjdXJyZW50CitzZWxlY3Rpb24uCisKKworMy4yIFNlbGVjdGlvbiB3aXRoIE1vdXNlCQkJCSpndWktbW91c2Utc2VsZWN0KgorCitUaGUgbW91c2UgY2FuIGJlIHVzZWQgdG8gc3RhcnQgYSBzZWxlY3Rpb24uICBIb3cgZGVwZW5kcyBvbiB0aGUgJ21vdXNlbW9kZWwnCitvcHRpb246CisnbW91c2Vtb2RlbCcgaXMgImV4dGVuZCI6IHVzZSB0aGUgcmlnaHQgbW91c2UgYnV0dG9uCisnbW91c2Vtb2RlbCcgaXMgInBvcHVwIjogIHVzZSB0aGUgbGVmdCBtb3VzZSBidXR0b24sIHdoaWxlIGtlZXBpbmcgdGhlIFNoaWZ0CitrZXkgcHJlc3NlZC4KKworSWYgdGhlcmUgd2FzIG5vIHNlbGVjdGlvbiB5ZXQsIHRoaXMgc3RhcnRzIGEgc2VsZWN0aW9uIGZyb20gdGhlIG9sZCBjdXJzb3IKK3Bvc2l0aW9uIHRvIHRoZSBwb3NpdGlvbiBwb2ludGVkIHRvIHdpdGggdGhlIG1vdXNlLiAgSWYgdGhlcmUgYWxyZWFkeSBpcyBhCitzZWxlY3Rpb24gdGhlbiB0aGUgY2xvc2VzdCBlbmQgd2lsbCBiZSBleHRlbmRlZC4KKworSWYgJ3NlbGVjdG1vZGUnIGNvbnRhaW5zICJtb3VzZSIsIHRoZW4gdGhlIHNlbGVjdGlvbiB3aWxsIGJlIGluIFNlbGVjdCBtb2RlLgorVGhpcyBtZWFucyB0aGF0IHR5cGluZyBub3JtYWwgdGV4dCB3aWxsIHJlcGxhY2UgdGhlIHNlbGVjdGlvbi4gIFNlZQorfFNlbGVjdC1tb2RlfC4gIE90aGVyd2lzZSwgdGhlIHNlbGVjdGlvbiB3aWxsIGJlIGluIFZpc3VhbCBtb2RlLgorCitEb3VibGUgY2xpY2tpbmcgbWF5IGJlIGRvbmUgdG8gbWFrZSB0aGUgc2VsZWN0aW9uIHdvcmQtd2lzZSwgdHJpcGxlIGNsaWNraW5nCittYWtlcyBpdCBsaW5lLXdpc2UsIGFuZCBxdWFkcnVwbGUgY2xpY2tpbmcgbWFrZXMgaXQgcmVjdGFuZ3VsYXIgYmxvY2std2lzZS4KKworU2VlIHxndWktc2VsZWN0aW9uc3wgb24gaG93IHRoZSBzZWxlY3Rpb24gaXMgdXNlZC4KKworCiszLjMgT3RoZXIgVGV4dCBTZWxlY3Rpb24gd2l0aCBNb3VzZQkJKmd1aS1tb3VzZS1tb2RlbGVzcyoKKwkJCQkJCSptb2RlbGVzcy1zZWxlY3Rpb24qCitBIGRpZmZlcmVudCBraW5kIG9mIHNlbGVjdGlvbiBpcyB1c2VkIHdoZW46CistIGluIENvbW1hbmQtbGluZSBtb2RlCistIGluIHRoZSBDb21tYW5kLWxpbmUgd2luZG93IGFuZCBwb2ludGluZyBpbiBhbm90aGVyIHdpbmRvdworLSBhdCB0aGUgfGhpdC1lbnRlcnwgcHJvbXB0CistIHdoZW5ldmVyIHRoZSBjdXJyZW50IG1vZGUgaXMgbm90IGluIHRoZSAnbW91c2UnIG9wdGlvbgorLSB3aGVuIGhvbGRpbmcgdGhlIENUUkwgYW5kIFNISUZUIGtleXMgaW4gdGhlIEdVSQorU2luY2UgVmltIGNvbnRpbnVlcyBsaWtlIHRoZSBzZWxlY3Rpb24gaXNuJ3QgdGhlcmUsIGFuZCB0aGVyZSBpcyBubyBtb2RlCithc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGlvbiwgdGhpcyBpcyBjYWxsZWQgbW9kZWxlc3Mgc2VsZWN0aW9uLiAgQW55IHRleHQgaW4KK3RoZSBWaW0gd2luZG93IGNhbiBiZSBzZWxlY3RlZC4gIFNlbGVjdCB0aGUgdGV4dCBieSBwcmVzc2luZyB0aGUgbGVmdCBtb3VzZQorYnV0dG9uIGF0IHRoZSBzdGFydCwgZHJhZyB0byB0aGUgZW5kIGFuZCByZWxlYXNlLiAgVG8gZXh0ZW5kIHRoZSBzZWxlY3Rpb24sCit1c2UgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiB3aGVuICdtb3VzZW1vZGVsJyBpcyAiZXh0ZW5kIiwgb3IgdGhlIGxlZnQgbW91c2UKK2J1dHRvbiB3aXRoIHRoZSBzaGlmdCBrZXkgcHJlc3NlZCB3aGVuICdtb3VzZW1vZGVsJyBpcyAicG9wdXAiLgorVGhlIG1pZGRsZSBtb3VzZSBidXR0b24gcGFzdGVzIHRoZSB0ZXh0LgorVGhlIHNlbGVjdGlvbiBpcyByZW1vdmVkIHdoZW4gdGhlIHNlbGVjdGVkIHRleHQgaXMgc2Nyb2xsZWQgb3IgY2hhbmdlZC4KK09uIHRoZSBjb21tYW5kIGxpbmUgQ1RSTC1ZIGNhbiBiZSB1c2VkIHRvIGNvcHkgdGhlIHNlbGVjdGlvbiBpbnRvIHRoZQorY2xpcGJvYXJkLiAgVG8gZG8gdGhpcyBmcm9tIEluc2VydCBtb2RlLCB1c2UgQ1RSTC1PIDogQ1RSTC1ZIDxDUj4uCisKKworMy40IFVzaW5nIE1vdXNlIG9uIFN0YXR1cyBMaW5lcwkJCQkqZ3VpLW1vdXNlLXN0YXR1cyoKKworQ2xpY2tpbmcgdGhlIGxlZnQgb3IgcmlnaHQgbW91c2UgYnV0dG9uIG9uIHRoZSBzdGF0dXMgbGluZSBiZWxvdyBhIFZpbQord2luZG93IG1ha2VzIHRoYXQgd2luZG93IHRoZSBjdXJyZW50IHdpbmRvdy4gIFRoaXMgYWN0dWFsbHkgaGFwcGVucyBvbiBidXR0b24KK3JlbGVhc2UgKHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYSBjbGljayBmcm9tIGEgZHJhZyBhY3Rpb24pLgorCitXaXRoIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBhIHN0YXR1cyBsaW5lIGNhbiBiZSBkcmFnZ2VkIHVwIGFuZCBkb3duLCB0aHVzCityZXNpemluZyB0aGUgd2luZG93cyBhYm92ZSBhbmQgYmVsb3cgaXQuICBUaGlzIGRvZXMgbm90IGNoYW5nZSB3aW5kb3cgZm9jdXMuCisKK1RoZSBzYW1lIGNhbiBiZSB1c2VkIG9uIHRoZSB2ZXJ0aWNhbCBzZXBhcmF0b3I6IGNsaWNrIHRvIGdpdmUgdGhlIHdpbmRvdyBsZWZ0CitvZiBpdCBmb2N1cywgZHJhZyBsZWZ0IGFuZCByaWdodCB0byBtYWtlIHdpbmRvd3Mgd2lkZXIgYW5kIG5hcnJvd2VyLgorCisKKzMuNSBWYXJpb3VzIE1vdXNlIENsaWNrcwkJCQkqZ3VpLW1vdXNlLXZhcmlvdXMqCisKKyAgICA8Uy1MZWZ0TW91c2U+CVNlYXJjaCBmb3J3YXJkIGZvciB0aGUgd29yZCB1bmRlciB0aGUgbW91c2UgY2xpY2suCisJCQlXaGVuICdtb3VzZW1vZGVsJyBpcyAicG9wdXAiIHRoaXMgc3RhcnRzIG9yIGV4dGVuZHMgYQorCQkJc2VsZWN0aW9uLgorICAgIDxTLVJpZ2h0TW91c2U+CVNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIG1vdXNlIGNsaWNrLgorICAgIDxDLUxlZnRNb3VzZT4JSnVtcCB0byB0aGUgdGFnIG5hbWUgdW5kZXIgdGhlIG1vdXNlIGNsaWNrLgorICAgIDxDLVJpZ2h0TW91c2U+CUp1bXAgYmFjayB0byBwb3NpdGlvbiBiZWZvcmUgdGhlIHByZXZpb3VzIHRhZyBqdW1wCisJCQkoc2FtZSBhcyAiQ1RSTC1UIikKKworCiszLjYgTW91c2UgTWFwcGluZ3MJCQkJCSpndWktbW91c2UtbWFwcGluZyoKKworVGhlIG1vdXNlIGV2ZW50cywgY29tcGxldGUgd2l0aCBtb2RpZmllcnMsIG1heSBiZSBtYXBwZWQuICBFZzogPgorICAgOm1hcCA8Uy1MZWZ0TW91c2U+ICAgICA8UmlnaHRNb3VzZT4KKyAgIDptYXAgPFMtTGVmdERyYWc+ICAgICAgPFJpZ2h0RHJhZz4KKyAgIDptYXAgPFMtTGVmdFJlbGVhc2U+ICAgPFJpZ2h0UmVsZWFzZT4KKyAgIDptYXAgPDItUy1MZWZ0TW91c2U+ICAgPDItUmlnaHRNb3VzZT4KKyAgIDptYXAgPDItUy1MZWZ0RHJhZz4gICAgPDItUmlnaHREcmFnPgorICAgOm1hcCA8Mi1TLUxlZnRSZWxlYXNlPiA8Mi1SaWdodFJlbGVhc2U+CisgICA6bWFwIDwzLVMtTGVmdE1vdXNlPiAgIDwzLVJpZ2h0TW91c2U+CisgICA6bWFwIDwzLVMtTGVmdERyYWc+ICAgIDwzLVJpZ2h0RHJhZz4KKyAgIDptYXAgPDMtUy1MZWZ0UmVsZWFzZT4gPDMtUmlnaHRSZWxlYXNlPgorICAgOm1hcCA8NC1TLUxlZnRNb3VzZT4gICA8NC1SaWdodE1vdXNlPgorICAgOm1hcCA8NC1TLUxlZnREcmFnPiAgICA8NC1SaWdodERyYWc+CisgICA6bWFwIDw0LVMtTGVmdFJlbGVhc2U+IDw0LVJpZ2h0UmVsZWFzZT4KK1RoZXNlIG1hcHBpbmdzIG1ha2Ugc2VsZWN0aW9uIHdvcmsgdGhlIHdheSBpdCBwcm9iYWJseSBzaG91bGQgaW4gYSBNb3RpZgorYXBwbGljYXRpb24sIHdpdGggc2hpZnQtbGVmdCBtb3VzZSBhbGxvd2luZyBmb3IgZXh0ZW5kaW5nIHRoZSB2aXN1YWwgYXJlYQorcmF0aGVyIHRoYW4gdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbi4KKworTW91c2UgbWFwcGluZyB3aXRoIG1vZGlmaWVycyBkb2VzIG5vdCB3b3JrIGZvciBtb2RlbGVzcyBzZWxlY3Rpb24uCisKKworMy43IERyYWcgYW5kIGRyb3AJCQkJCQkqZHJhZy1uLWRyb3AqCisKK1lvdSBjYW4gZHJhZyBhbmQgZHJvcCBvbmUgb3IgbW9yZSBmaWxlcyBpbnRvIHRoZSBWaW0gd2luZG93LCB3aGVyZSB0aGV5IHdpbGwKK2JlIG9wZW5lZCBhcyBpZiBhIHw6ZHJvcHwgY29tbWFuZCB3YXMgdXNlZC4KKworSWYgeW91IGhvbGQgZG93biBTaGlmdCB3aGlsZSBkb2luZyB0aGlzLCBWaW0gY2hhbmdlcyB0byB0aGUgZmlyc3QgZHJvcHBlZAorZmlsZSdzIGRpcmVjdG9yeS4gIElmIHlvdSBob2xkIEN0cmwgVmltIHdpbGwgYWx3YXlzIHNwbGl0IGEgbmV3IHdpbmRvdyBmb3IgdGhlCitmaWxlLiAgT3RoZXJ3aXNlIGl0J3Mgb25seSBkb25lIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBoYXMgYmVlbiBjaGFuZ2VkLgorCitZb3UgY2FuIGFsc28gZHJvcCBhIGRpcmVjdG9yeSBvbiBWaW0uICBUaGlzIHN0YXJ0cyB0aGUgZXhwbG9yZXIgcGx1Z2luIGZvcgordGhhdCBkaXJlY3RvcnkgKGFzc3VtaW5nIGl0IHdhcyBlbmFibGVkLCBvdGhlcndpc2UgeW91J2xsIGdldCBhbiBlcnJvcgorbWVzc2FnZSkuICBLZWVwIFNoaWZ0IHByZXNzZWQgdG8gY2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgaW5zdGVhZC4KKworSWYgVmltIGhhcHBlbnMgdG8gYmUgZWRpdGluZyBhIGNvbW1hbmQgbGluZSwgdGhlIG5hbWVzIG9mIHRoZSBkcm9wcGVkIGZpbGVzCithbmQgZGlyZWN0b3JpZXMgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgY3Vyc29yLiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGVzZQorbmFtZXMgd2l0aCBhbnkgRXggY29tbWFuZC4gIFNwZWNpYWwgY2hhcmFjdGVycyAoc3BhY2UsIHRhYiwgZG91YmxlIHF1b3RlIGFuZAorJ3wnOyBiYWNrc2xhc2ggb24gbm9uLU1TLVdpbmRvd3Mgc3lzdGVtcykgd2lsbCBiZSBlc2NhcGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIE1ha2luZyBHVUkgU2VsZWN0aW9ucwkJCQkqZ3VpLXNlbGVjdGlvbnMqCisKKwkJCQkJCQkqcXVvdGVzdGFyKgorWW91IG1heSBtYWtlIHNlbGVjdGlvbnMgd2l0aCB0aGUgbW91c2UgKHNlZSB8Z3VpLW1vdXNlLXNlbGVjdHwpLCBvciBieSB1c2luZworVmltJ3MgVmlzdWFsIG1vZGUgKHNlZSB8dnwpLiAgSWYgJ2EnIGlzIHByZXNlbnQgaW4gJ2d1aW9wdGlvbnMnLCB0aGVuCit3aGVuZXZlciBhIHNlbGVjdGlvbiBpcyBzdGFydGVkIChWaXN1YWwgb3IgU2VsZWN0IG1vZGUpLCBvciB3aGVuIHRoZSBzZWxlY3Rpb24KK2lzIGNoYW5nZWQsIFZpbSBiZWNvbWVzIHRoZSBvd25lciBvZiB0aGUgd2luZG93aW5nIHN5c3RlbSdzIHByaW1hcnkgc2VsZWN0aW9uCisob24gTVMtV2luZG93cyB0aGUgfGd1aS1jbGlwYm9hcmR8IGlzIHVzZWQ7IHVuZGVyIFgxMSwgdGhlIHx4MTEtc2VsZWN0aW9ufCBpcwordXNlZCAtIHlvdSBzaG91bGQgcmVhZCB3aGljaGV2ZXIgb2YgdGhlc2UgaXMgYXBwcm9wcmlhdGUgbm93KS4KKworCQkJCQkJCSpjbGlwYm9hcmQqCitUaGVyZSBpcyBhIHNwZWNpYWwgcmVnaXN0ZXIgZm9yIHN0b3JpbmcgdGhpcyBzZWxlY3Rpb24sIGl0IGlzIHRoZSAiKgorcmVnaXN0ZXIuICBOb3RoaW5nIGlzIHB1dCBpbiBoZXJlIHVubGVzcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0ZXh0IGlzCitzZWxlY3RlZCBpcyBhYm91dCB0byBjaGFuZ2UgKGVnIHdpdGggYSBsZWZ0IG1vdXNlIGNsaWNrIHNvbWV3aGVyZSksIG9yIHdoZW4KK2Fub3RoZXIgYXBwbGljYXRpb24gd2FudHMgdG8gcGFzdGUgdGhlIHNlbGVjdGVkIHRleHQuICBUaGVuIHRoZSB0ZXh0IGlzIHB1dAoraW4gdGhlICIqIHJlZ2lzdGVyLiAgRm9yIGV4YW1wbGUsIHRvIGN1dCBhIGxpbmUgYW5kIG1ha2UgaXQgdGhlIGN1cnJlbnQKK3NlbGVjdGlvbi9wdXQgaXQgb24gdGhlIGNsaXBib2FyZDogPgorCisJIipkZAorCitTaW1pbGFybHksIHdoZW4geW91IHdhbnQgdG8gcGFzdGUgYSBzZWxlY3Rpb24gZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uLCBlLmcuLAorYnkgY2xpY2tpbmcgdGhlIG1pZGRsZSBtb3VzZSBidXR0b24sIHRoZSBzZWxlY3Rpb24gaXMgcHV0IGluIHRoZSAiKiByZWdpc3RlcgorZmlyc3QsIGFuZCB0aGVuICdwdXQnIGxpa2UgYW55IG90aGVyIHJlZ2lzdGVyLiAgRm9yIGV4YW1wbGUsIHRvIHB1dCB0aGUKK3NlbGVjdGlvbiAoY29udGVudHMgb2YgdGhlIGNsaXBib2FyZCk6ID4KKworCSIqcAorCitXaGVuIHVzaW5nIHRoaXMgcmVnaXN0ZXIgdW5kZXIgWDExLCBhbHNvIHNlZSB8eDExLXNlbGVjdGlvbnwuICBUaGlzIGFsc28KK2V4cGxhaW5zIHRoZSByZWxhdGVkICIrIHJlZ2lzdGVyLgorCitOb3RlIHRoYXQgd2hlbiBwYXN0aW5nIHRleHQgZnJvbSBvbmUgVmltIGludG8gYW5vdGhlciBzZXBhcmF0ZSBWaW0sIHRoZSB0eXBlCitvZiBzZWxlY3Rpb24gKGNoYXJhY3RlciwgbGluZSwgb3IgYmxvY2spIHdpbGwgYWxzbyBiZSBjb3BpZWQuICBGb3Igb3RoZXIKK2FwcGxpY2F0aW9ucyB0aGUgdHlwZSBpcyBhbHdheXMgY2hhcmFjdGVyLiAgSG93ZXZlciwgaWYgdGhlIHRleHQgZ2V0cwordHJhbnNmZXJyZWQgdmlhIHRoZSB8eDExLWN1dC1idWZmZXJ8LCB0aGUgc2VsZWN0aW9uIHR5cGUgaXMgQUxXQVlTIGxvc3QuCisKK1doZW4gdGhlICJ1bm5hbWVkIiBzdHJpbmcgaXMgaW5jbHVkZWQgaW4gdGhlICdjbGlwYm9hcmQnIG9wdGlvbiwgdGhlIHVubmFtZWQKK3JlZ2lzdGVyIGlzIHRoZSBzYW1lIGFzIHRoZSAiKiByZWdpc3Rlci4gIFRodXMgeW91IGNhbiB5YW5rIHRvIGFuZCBwYXN0ZSB0aGUKK3NlbGVjdGlvbiB3aXRob3V0IHByZXBlbmRpbmcgIiogdG8gY29tbWFuZHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gTWVudXMJCQkJCQkqbWVudXMqCisKK0ZvciBhbiBpbnRyb2R1Y3Rpb24gc2VlIHx1c3JfNDIudHh0fCBpbiB0aGUgdXNlciBtYW51YWwuCisKKworNS4xIFVzaW5nIE1lbnVzCQkJCQkJKnVzaW5nLW1lbnVzKgorCitCYXNpY2FsbHksIG1lbnVzIGNhbiBiZSB1c2VkIGp1c3QgbGlrZSBtYXBwaW5ncy4gIFlvdSBjYW4gZGVmaW5lIHlvdXIgb3duCittZW51cywgYXMgbWFueSBhcyB5b3UgbGlrZS4KK0xvbmctdGltZSBWaW0gdXNlcnMgd29uJ3QgdXNlIG1lbnVzIG11Y2guICBCdXQgdGhlIHBvd2VyIGlzIGluIGFkZGluZyB5b3VyIG93bgorbWVudXMgYW5kIG1lbnUgaXRlbXMuICBUaGV5IGFyZSBtb3N0IHVzZWZ1bCBmb3IgdGhpbmdzIHRoYXQgeW91IGNhbid0IHJlbWVtYmVyCit3aGF0IHRoZSBrZXkgc2VxdWVuY2Ugd2FzLgorCitGb3IgY3JlYXRpbmcgbWVudXMgaW4gYSBkaWZmZXJlbnQgbGFuZ3VhZ2UsIHNlZSB8Om1lbnV0cmFuc3wuCisKKwkJCQkJCQkqbWVudS52aW0qCitUaGUgZGVmYXVsdCBtZW51cyBhcmUgcmVhZCBmcm9tIHRoZSBmaWxlICIkVklNUlVOVElNRS9tZW51LnZpbSIuICBTZWUKK3wkVklNUlVOVElNRXwgZm9yIHdoZXJlIHRoZSBwYXRoIGNvbWVzIGZyb20uICBZb3UgY2FuIHNldCB1cCB5b3VyIG93biBtZW51cy4KK1N0YXJ0aW5nIG9mZiB3aXRoIHRoZSBkZWZhdWx0IHNldCBpcyBhIGdvb2QgaWRlYS4gIFlvdSBjYW4gYWRkIG1vcmUgaXRlbXMsIG9yLAoraWYgeW91IGRvbid0IGxpa2UgdGhlIGRlZmF1bHRzIGF0IGFsbCwgc3RhcnQgd2l0aCByZW1vdmluZyBhbGwgbWVudXMKK3w6dW5tZW51LWFsbHwuICBZb3UgY2FuIGFsc28gYXZvaWQgdGhlIGRlZmF1bHQgbWVudXMgYmVpbmcgbG9hZGVkIGJ5IGFkZGluZwordGhpcyBsaW5lIHRvIHlvdXIgLnZpbXJjIGZpbGUgKE5PVCB5b3VyIC5ndmltcmMgZmlsZSEpOiA+CisJOmxldCBkaWRfaW5zdGFsbF9kZWZhdWx0X21lbnVzID0gMQorSWYgeW91IGFsc28gd2FudCB0byBhdm9pZCB0aGUgU3ludGF4IG1lbnU6ID4KKwk6bGV0IGRpZF9pbnN0YWxsX3N5bnRheF9tZW51ID0gMQorSWYgeW91IGRvIHdhbnQgdGhlIFN5bnRheCBtZW51IGJ1dCBub3QgYWxsIHRoZSBlbnRyaWVzIGZvciBlYWNoIGF2YWlsYWJsZQorc3ludGF4IGZpbGUgKHdoaWNoIHRha2UgcXVpdGUgYSBiaXQgb2YgdGltZSB0byBsb2FkKTogPgorCTpsZXQgc2tpcF9zeW50YXhfc2VsX21lbnUgPSAxCis8CisJCQkJCQkJKmNvbnNvbGUtbWVudXMqCitBbHRob3VnaCB0aGlzIGRvY3VtZW50YXRpb24gaXMgaW4gdGhlIEdVSSBzZWN0aW9uLCB5b3UgY2FuIGFjdHVhbGx5IHVzZSBtZW51cworaW4gY29uc29sZSBtb2RlIHRvby4gIFlvdSB3aWxsIGhhdmUgdG8gbG9hZCB8bWVudS52aW18IGV4cGxpY2l0bHkgdGhlbiwgaXQgaXMKK25vdCBkb25lIGJ5IGRlZmF1bHQuICBZb3UgY2FuIHVzZSB0aGUgfDplbWVudXwgY29tbWFuZCBhbmQgY29tbWFuZC1saW5lCitjb21wbGV0aW9uIHdpdGggJ3dpbGRtZW51JyB0byBhY2Nlc3MgdGhlIG1lbnUgZW50cmllcyBhbG1vc3QgbGlrZSBhIHJlYWwgbWVudQorc3lzdGVtLiAgVG8gZG8gdGhpcywgcHV0IHRoZXNlIGNvbW1hbmRzIGluIHlvdXIgLnZpbXJjIGZpbGU6ID4KKwk6c291cmNlICRWSU1SVU5USU1FL21lbnUudmltCisJOnNldCB3aWxkbWVudQorCTpzZXQgY3BvLT08CisJOnNldCB3Y209PEMtWj4KKwk6bWFwIDxGND4gOmVtZW51IDxDLVo+CitQcmVzc2luZyA8RjQ+IHdpbGwgc3RhcnQgdGhlIG1lbnUuICBZb3UgY2FuIG5vdyB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIHNlbGVjdAorYSBtZW51IGVudHJ5LiAgSGl0IDxFbnRlcj4gdG8gZXhlY3V0ZSBpdC4gIEhpdCA8RXNjPiBpZiB5b3Ugd2FudCB0byBjYW5jZWwuCitUaGlzIGRvZXMgcmVxdWlyZSB0aGUgfCttZW51fCBmZWF0dXJlIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCisJCQkJCQkJKnRlYXItb2ZmLW1lbnVzKgorR1RLKyBhbmQgTW90aWYgc3VwcG9ydCBUZWFyLW9mZiBtZW51cy4gIFRoZXNlIGFyZSBzb3J0IG9mIHN0aWNreSBtZW51cyBvcgorcG9wLXVwIG1lbnVzIHRoYXQgYXJlIHByZXNlbnQgYWxsIHRoZSB0aW1lLiAgSWYgdGhlIHJlc2l6aW5nIGRvZXMgbm90IHdvcmsKK2NvcnJlY3RseSwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHVzaW5nIHNvbWV0aGluZyBsaWtlICJWaW0qZ2VvbWV0cnkiIGluIHRoZQorZGVmYXVsdHMuICBVc2UgIlZpbS5nZW9tZXRyeSIgaW5zdGVhZC4KKworVGhlIFdpbjMyIEdVSSB2ZXJzaW9uIGVtdWxhdGVzIE1vdGlmJ3MgdGVhci1vZmYgbWVudXMuICBBY3R1YWxseSwgYSBNb3RpZiB1c2VyCit3aWxsIHNwb3QgdGhlIGRpZmZlcmVuY2VzIGVhc2lseSwgYnV0IGhvcGVmdWxseSB0aGV5J3JlIGp1c3QgYXMgdXNlZnVsLiAgWW91CitjYW4gYWxzbyB1c2UgdGhlIHw6dGVhcm9mZnwgY29tbWFuZCB0b2dldGhlciB3aXRoIHxoaWRkZW4tbWVudXN8IHRvIGNyZWF0ZQorZmxvYXRpbmcgbWVudXMgdGhhdCBkbyBub3QgYXBwZWFyIG9uIHRoZSBtYWluIG1lbnUgYmFyLgorCisKKzUuMiBDcmVhdGluZyBOZXcgTWVudXMJCQkJCSpjcmVhdGluZy1tZW51cyoKKworCQkJCSo6bWUqICAqOm1lbnUqICAqOm5vcmVtZSogICo6bm9yZW1lbnUqCisJCQkJKjphbSogICo6YW1lbnUqICo6YW4qICAgICAgKjphbm9yZW1lbnUqCisJCQkJKjpubWUqICo6bm1lbnUqICo6bm5vcmVtZSogKjpubm9yZW1lbnUqCisJCQkJKjpvbWUqICo6b21lbnUqICo6b25vcmVtZSogKjpvbm9yZW1lbnUqCisJCQkJKjp2bWUqICo6dm1lbnUqICo6dm5vcmVtZSogKjp2bm9yZW1lbnUqCisJCQkJKjppbWUqICo6aW1lbnUqICo6aW5vcmVtZSogKjppbm9yZW1lbnUqCisJCQkJKjpjbWUqICo6Y21lbnUqICo6Y25vcmVtZSogKjpjbm9yZW1lbnUqCisJCQkJKkUzMzAqICpFMzI3KiAqRTMzMSogKkUzMzYqICpFMzMzKgorCQkJCSpFMzI4KiAqRTMyOSogKkUzMzcqCitUbyBjcmVhdGUgYSBuZXcgbWVudSBpdGVtLCB1c2UgdGhlICI6bWVudSIgY29tbWFuZHMuICBUaGV5IGFyZSBtb3N0bHkgbGlrZQordGhlICI6bWFwIiBzZXQgb2YgY29tbWFuZHMgYnV0IHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIG1lbnUgaXRlbSBuYW1lLCBnaXZlbgorYXMgYSBwYXRoIG9mIG1lbnVzIGFuZCBzdWJtZW51cyB3aXRoIGEgJy4nIGJldHdlZW4gdGhlbS4gZWc6ID4KKworICAgOm1lbnUgRmlsZS5TYXZlICA6dzxDUj4KKyAgIDppbm9yZW1lbnUgRmlsZS5TYXZlICA8Qy1PPjp3PENSPgorICAgOm1lbnUgRWRpdC5CaWdcIENoYW5nZXMuRGVsZXRlXCBBbGxcIFNwYWNlcyAgOiVzL1sgXkldLy9nPENSPgorCitUaGlzIGxhc3Qgb25lIHdpbGwgY3JlYXRlIGEgbmV3IGl0ZW0gaW4gdGhlIG1lbnUgYmFyIGNhbGxlZCAiRWRpdCIsIGhvbGRpbmcKK3RoZSBtb3VzZSBidXR0b24gZG93biBvbiB0aGlzIHdpbGwgcG9wIHVwIGEgbWVudSBjb250YWluaW5nIHRoZSBpdGVtCisiQmlnIENoYW5nZXMiLCB3aGljaCBpcyBhIHN1Yi1tZW51IGNvbnRhaW5pbmcgdGhlIGl0ZW0gIkRlbGV0ZSBBbGwgU3BhY2VzIiwKK3doaWNoIHdoZW4gc2VsZWN0ZWQsIHBlcmZvcm1zIHRoZSBvcGVyYXRpb24uCisKK1NwZWNpYWwgY2hhcmFjdGVycyBpbiBhIG1lbnUgbmFtZToKKworCSYJVGhlIG5leHQgY2hhcmFjdGVyIGlzIHRoZSBzaG9ydGN1dCBrZXkuICBNYWtlIHN1cmUgZWFjaAorCQlzaG9ydGN1dCBrZXkgaXMgb25seSB1c2VkIG9uY2UgaW4gYSAoc3ViKW1lbnUuICBJZiB5b3Ugd2FudCB0bworCQlpbnNlcnQgYSBsaXRlcmFsICImIiBpbiB0aGUgbWVudSBuYW1lIHVzZSAiJiYiLgorCTxUYWI+CVNlcGFyYXRlcyB0aGUgbWVudSBuYW1lIGZyb20gcmlnaHQtYWxpZ25lZCB0ZXh0LiAgVGhpcyBjYW4gYmUKKwkJdXNlZCB0byBzaG93IHRoZSBlcXVpdmFsZW50IHR5cGVkIGNvbW1hbmQuICBUaGUgdGV4dCAiPFRhYj4iCisJCWNhbiBiZSB1c2VkIGhlcmUgZm9yIGNvbnZlbmllbmNlLiAgSWYgeW91IGFyZSB1c2luZyBhIHJlYWwKKwkJVGFiLCBkb24ndCBmb3JnZXQgdG8gcHV0IGEgYmFja3NsYXNoIGJlZm9yZSBpdCEKK0V4YW1wbGU6ID4KKworICAgOmFtZW51ICZGaWxlLiZPcGVuPFRhYj46ZSAgOmJyb3dzZSBlPENSPgorCitbdHlwZWQgbGl0ZXJhbGx5XQorV2l0aCB0aGUgc2hvcnRjdXQgIkYiICh3aGlsZSBrZWVwaW5nIHRoZSA8QWx0PiBrZXkgcHJlc3NlZCksIGFuZCB0aGVuICJPIiwKK3RoaXMgbWVudSBjYW4gYmUgdXNlZC4gIFRoZSBzZWNvbmQgcGFydCBpcyBzaG93biBhcyAiT3BlbiAgICAgOmUiLiAgVGhlICI6ZSIKK2lzIHJpZ2h0IGFsaWduZWQsIGFuZCB0aGUgIk8iIGlzIHVuZGVybGluZWQsIHRvIGluZGljYXRlIGl0IGlzIHRoZSBzaG9ydGN1dC4KKworVGhlICI6YW1lbnUiIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIG1lbnUgZW50cmllcyBmb3IgYWxsIG1vZGVzIGF0IG9uY2UuCitUbyBtYWtlIHRoZSBjb21tYW5kIHdvcmsgY29ycmVjdGx5LCBhIGNoYXJhY3RlciBpcyBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGZvcgorc29tZSBtb2RlczoKKwltb2RlCQlpbnNlcnRlZAlhcHBlbmRlZAl+CisJTm9ybWFsCQlub3RoaW5nCQlub3RoaW5nCisJVmlzdWFsCQk8Qy1DPgkJPEMtXD48Qy1HPgorCUluc2VydAkJPEMtTz4KKwlDbWRsaW5lCQk8Qy1DPgkJPEMtXD48Qy1HPgorCU9wLXBlbmRpbmcJPEMtQz4JCTxDLVw+PEMtRz4KKworQXBwZW5kaW5nIENUUkwtXCBDVFJMLUcgaXMgZm9yIGdvaW5nIGJhY2sgdG8gaW5zZXJ0IG1vZGUgd2hlbiAnaW5zZXJ0bW9kZScgaXMKK3NldC4gfENUUkwtXF9DVFJMLUd8CisKK0V4YW1wbGU6ID4KKworICAgOmFtZW51IEZpbGUuTmV4dAk6bmV4dF5NCisKK2lzIGVxdWFsIHRvOiA+CisKKyAgIDpubWVudSBGaWxlLk5leHQJOm5leHReTQorICAgOnZtZW51IEZpbGUuTmV4dAleQzpuZXh0Xk1eXF5HCisgICA6aW1lbnUgRmlsZS5OZXh0CV5POm5leHReTQorICAgOmNtZW51IEZpbGUuTmV4dAleQzpuZXh0Xk1eXF5HCisgICA6b21lbnUgRmlsZS5OZXh0CV5DOm5leHReTV5cXkcKKworQ2FyZWZ1bDogSW4gSW5zZXJ0IG1vZGUgdGhpcyBvbmx5IHdvcmtzIGZvciBhIFNJTkdMRSBOb3JtYWwgbW9kZSBjb21tYW5kLAorYmVjYXVzZSBvZiB0aGUgQ1RSTC1PLiAgSWYgeW91IGhhdmUgdHdvIG9yIG1vcmUgY29tbWFuZHMsIHlvdSB3aWxsIG5lZWQgdG8gdXNlCit0aGUgIjppbWVudSIgY29tbWFuZC4gIEZvciBpbnNlcnRpbmcgdGV4dCBpbiBhbnkgbW9kZSwgeW91IGNhbiB1c2UgdGhlCitleHByZXNzaW9uIHJlZ2lzdGVyOiA+CisKKyAgIDphbWVudSBJbnNlcnQuZm9vYmFyICAgIj0nZm9vYmFyJzxDUj5QCisKK05vdGUgdGhhdCB0aGUgJzwnIGFuZCAnaycgZmxhZ3MgaW4gJ2Nwb3B0aW9ucycgYWxzbyBhcHBseSBoZXJlICh3aGVuCitpbmNsdWRlZCB0aGV5IG1ha2UgdGhlIDw+IGZvcm0gYW5kIHJhdyBrZXkgY29kZXMgbm90IGJlaW5nIHJlY29nbml6ZWQpLgorCitOb3RlIHRoYXQgPEVzYz4gaW4gQ21kbGluZSBtb2RlIGV4ZWN1dGVzIHRoZSBjb21tYW5kLCBsaWtlIGluIGEgbWFwcGluZy4gIFRoaXMKK2lzIFZpIGNvbXBhdGlibGUuICBVc2UgQ1RSTC1DIHRvIHF1aXQgQ21kbGluZSBtb2RlLgorCisJCQkJCQkqOm1lbnUtPHNpbGVudD4qICo6bWVudS1zaWxlbnQqCitUbyBkZWZpbmUgYSBtZW51IHdoaWNoIHdpbGwgbm90IGJlIGVjaG9lZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhZGQKKyI8c2lsZW50PiIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgRXhhbXBsZTogPgorCTptZW51IDxzaWxlbnQ+IFNldHRpbmdzLklnbm9yZVwgY2FzZSAgOnNldCBpYzxDUj4KK1RoZSAiOnNldCBpYyIgd2lsbCBub3QgYmUgZWNob2VkIHdoZW4gdXNpbmcgdGhpcyBtZW51LiAgTWVzc2FnZXMgZnJvbSB0aGUKK2V4ZWN1dGVkIGNvbW1hbmQgYXJlIHN0aWxsIGdpdmVuIHRob3VnaC4gIFRvIHNodXQgdGhlbSB1cCB0b28sIGFkZCBhICI6c2lsZW50IgoraW4gdGhlIGV4ZWN1dGVkIGNvbW1hbmQ6ID4KKwk6bWVudSA8c2lsZW50PiBTZWFyY2guSGVhZGVyIDpleGUgIjpzaWxlbnQgbm9ybWFsIC9IZWFkZXJcciI8Q1I+Cis8CisJCQkJCQkqOm1lbnUtPHNjcmlwdD4qICo6bWVudS1zY3JpcHQqCitUaGUgInRvIiBwYXJ0IG9mIHRoZSBtZW51IHdpbGwgYmUgaW5zcGVjdGVkIGZvciBtYXBwaW5ncy4gIElmIHlvdSBkb24ndCB3YW50Cit0aGlzLCB1c2UgdGhlICI6bm9yZW1lbnUiIGNvbW1hbmQgKG9yIHRoZSBzaW1pbGFyIG9uZSBmb3IgYSBzcGVjaWZpYyBtb2RlKS4KK0lmIHlvdSBkbyB3YW50IHRvIHVzZSBzY3JpcHQtbG9jYWwgbWFwcGluZ3MsIGFkZCAiPHNjcmlwdD4iIGFzIHRoZSB2ZXJ5IGZpcnN0Cithcmd1bWVudCB0byB0aGUgIjptZW51IiBjb21tYW5kIG9yIGFmdGVyICI8c2lsZW50PiIuCisKKwkJCQkJCQkqbWVudS1wcmlvcml0eSoKK1lvdSBjYW4gZ2l2ZSBhIHByaW9yaXR5IHRvIGEgbWVudS4gIE1lbnVzIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkgZ28gbW9yZSB0bwordGhlIHJpZ2h0LiAgVGhlIHByaW9yaXR5IGlzIGdpdmVuIGFzIGEgbnVtYmVyIGJlZm9yZSB0aGUgIjptZW51IiBjb21tYW5kLgorRXhhbXBsZTogPgorCTo4MG1lbnUgQnVmZmVyLm5leHQgOmJuPENSPgorCitUaGUgZGVmYXVsdCBtZW51cyBoYXZlIHRoZXNlIHByaW9yaXRpZXM6CisJRmlsZQkJMTAKKwlFZGl0CQkyMAorCVRvb2xzCQk0MAorCVN5bnRheAkJNTAKKwlCdWZmZXJzCQk2MAorCVdpbmRvdwkJNzAKKwlIZWxwCQk5OTk5CisKK1doZW4gbm8gb3IgemVybyBwcmlvcml0eSBpcyBnaXZlbiwgNTAwIGlzIHVzZWQuCitUaGUgcHJpb3JpdHkgZm9yIHRoZSBQb3BVcCBtZW51IGlzIG5vdCB1c2VkLgorCitUaGUgSGVscCBtZW51IHdpbGwgYmUgcGxhY2VkIG9uIHRoZSBmYXIgcmlnaHQgc2lkZSBvZiB0aGUgbWVudSBiYXIgb24gc3lzdGVtcword2hpY2ggc3VwcG9ydCB0aGlzIChNb3RpZiBhbmQgR1RLKykuICBGb3IgR1RLKyAyLCB0aGlzIGlzIG5vdCBkb25lIGFueW1vcmUKK2JlY2F1c2UgcmlnaHQtYWxpZ25pbmcgdGhlIEhlbHAgbWVudSBpcyBub3cgZGlzY291cmFnZWQgVUkgZGVzaWduLgorCitZb3UgY2FuIHVzZSBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIDk5OTksIHRvIG1ha2UgaXQgZ28gYWZ0ZXIgdGhlIEhlbHAgbWVudSwKK2J1dCB0aGF0IGlzIG5vbi1zdGFuZGFyZCBhbmQgaXMgZGlzY291cmFnZWQuICBUaGUgaGlnaGVzdCBwb3NzaWJsZSBwcmlvcml0eSBpcworYWJvdXQgMzIwMDAuICBUaGUgbG93ZXN0IGlzIDEuCisKKwkJCQkJCQkqc3ViLW1lbnUtcHJpb3JpdHkqCitUaGUgc2FtZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gcG9zaXRpb24gYSBzdWItbWVudS4gIFRoZSBwcmlvcml0eSBpcyB0aGVuCitnaXZlbiBhcyBhIGRvdC1zZXBhcmF0ZWQgbGlzdCBvZiBwcmlvcml0aWVzLCBiZWZvcmUgdGhlIG1lbnUgbmFtZTogPgorCTptZW51IDgwLjUwMCBCdWZmZXIubmV4dCA6Ym48Q1I+CitHaXZpbmcgdGhlIHN1Yi1tZW51IHByaW9yaXR5IGlzIG9ubHkgbmVlZGVkIHdoZW4gdGhlIGl0ZW0gaXMgbm90IHRvIGJlIHB1dAoraW4gYSBub3JtYWwgcG9zaXRpb24uICBGb3IgZXhhbXBsZSwgdG8gcHV0IGEgc3ViLW1lbnUgYmVmb3JlIHRoZSBvdGhlciBpdGVtczogPgorCTptZW51IDgwLjEwMCBCdWZmZXIuZmlyc3QgOmJyZXc8Q1I+CitPciB0byBwdXQgYSBzdWItbWVudSBhZnRlciB0aGUgb3RoZXIgaXRlbXMsIGFuZCBmdXJ0aGVyIGl0ZW1zIHdpdGggZGVmYXVsdAorcHJpb3JpdHkgd2lsbCBiZSBwdXQgYmVmb3JlIGl0OiA+CisJOm1lbnUgODAuOTAwIEJ1ZmZlci5sYXN0IDpibGFzdDxDUj4KK1doZW4gYSBudW1iZXIgaXMgbWlzc2luZywgdGhlIGRlZmF1bHQgdmFsdWUgNTAwIHdpbGwgYmUgdXNlZDogPgorCTptZW51IC45MDAgbXlNZW51LnRlc3QgOmVjaG8gInRleHQiPENSPgorVGhlIG1lbnUgcHJpb3JpdHkgaXMgb25seSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBuZXcgbWVudS4gIFdoZW4gaXQgYWxyZWFkeQorZXhpc3RlZCwgZS5nLiwgaW4gYW5vdGhlciBtb2RlLCB0aGUgcHJpb3JpdHkgd2lsbCBub3QgY2hhbmdlLiAgVGh1cywgdGhlCitwcmlvcml0eSBvbmx5IG5lZWRzIHRvIGJlIGdpdmVuIHRoZSBmaXJzdCB0aW1lIGEgbWVudSBpcyB1c2VkLgorQW4gZXhjZXB0aW9uIGlzIHRoZSBQb3BVcCBtZW51LiAgVGhlcmUgaXMgYSBzZXBhcmF0ZSBtZW51IGZvciBlYWNoIG1vZGUKKyhOb3JtYWwsIE9wLXBlbmRpbmcsIFZpc3VhbCwgSW5zZXJ0LCBDbWRsaW5lKS4gIFRoZSBvcmRlciBpbiBlYWNoIG9mIHRoZXNlCittZW51cyBjYW4gYmUgZGlmZmVyZW50LiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBtZW51LWJhciBtZW51cywgd2hpY2ggaGF2ZQordGhlIHNhbWUgb3JkZXIgZm9yIGFsbCBtb2Rlcy4KK05PVEU6IHN1Yi1tZW51IHByaW9yaXRpZXMgY3VycmVudGx5IGRvbid0IHdvcmsgZm9yIGFsbCB2ZXJzaW9ucyBvZiB0aGUgR1VJLgorCisJCQkJCQkJKm1lbnUtc2VwYXJhdG9yKiAqRTMzMioKK01lbnUgaXRlbXMgY2FuIGJlIHNlcGFyYXRlZCBieSBhIHNwZWNpYWwgaXRlbSB0aGF0IGluc2VydHMgc29tZSBzcGFjZSBiZXR3ZWVuCitpdGVtcy4gIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgZGlzcGxheWVkIGFzIGEgbGluZSBvciBhIGRvdHRlZCBsaW5lLgorVGhlc2UgaXRlbXMgbXVzdCBzdGFydCB3aXRoIGEgJy0nIGFuZCBlbmQgaW4gYSAnLScuICBUaGUgcGFydCBpbiBiZXR3ZWVuIGlzCit1c2VkIHRvIGdpdmUgaXQgYSB1bmlxdWUgbmFtZS4gIFByaW9yaXRpZXMgY2FuIGJlIHVzZWQgYXMgd2l0aCBub3JtYWwgaXRlbXMuCitFeGFtcGxlOiA+CisJOm1lbnUgRXhhbXBsZS5pdGVtMQk6ZG8gc29tZXRoaW5nCisJOm1lbnUgRXhhbXBsZS4tU2VwLQk6CisJOm1lbnUgRXhhbXBsZS5pdGVtMgk6ZG8gc29tZXRoaW5nIGRpZmZlcmVudAorTm90ZSB0aGF0IHRoZSBzZXBhcmF0b3IgYWxzbyByZXF1aXJlcyBhIHJocy4gIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgaXQgaXMsCitiZWNhdXNlIHRoZSBpdGVtIHdpbGwgbmV2ZXIgYmUgc2VsZWN0ZWQuICBVc2UgYSBzaW5nbGUgY29sb24gdG8ga2VlcCBpdAorc2ltcGxlLgorCisJCQkJCQkJKmd1aS10b29sYmFyKgorVGhlIHRvb2xiYXIgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgV2luMzIsIEF0aGVuYSwgTW90aWYsIEdUSysgKFgxMSkgYW5kCitQaG90b24gR1VJLiAgSXQgc2hvdWxkIHR1cm4gdXAgaW4gb3RoZXIgR1VJcyBpbiBkdWUgY291cnNlLiAgVGhlIGRlZmF1bHQKK3Rvb2xiYXIgaXMgc2V0dXAgaW4gbWVudS52aW0uCitUaGUgZGlzcGxheSBvZiB0aGUgdG9vbGJhciBpcyBjb250cm9sbGVkIGJ5IHRoZSAnZ3Vpb3B0aW9ucycgbGV0dGVyICdUJy4gWW91CitjYW4gdGh1cyBoYXZlIG1lbnUgJiB0b29sYmFyIHRvZ2V0aGVyLCBvciBlaXRoZXIgb24gaXRzIG93biwgb3IgbmVpdGhlci4KK1RoZSBhcHBlYXJhbmNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlICd0b29sYmFyJyBvcHRpb24uICBZb3UgY2FuIGNob3NlIGJldHdlZW4KK2FuIGltYWdlLCB0ZXh0IG9yIGJvdGguCisKKwkJCQkJCQkqdG9vbGJhci1pY29uKgorVGhlIHRvb2xiYXIgaXMgZGVmaW5lZCBhcyBhIHNwZWNpYWwgbWVudSBjYWxsZWQgVG9vbEJhciwgd2hpY2ggb25seSBoYXMgb25lCitsZXZlbC4gIFZpbSBpbnRlcnByZXRzIHRoZSBpdGVtcyBpbiB0aGlzIG1lbnUgYXMgZm9sbG93czoKKzEpICBJZiBhbiAiaWNvbj0iIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQsIHRoZSBmaWxlIHdpdGggdGhpcyBuYW1lIGlzIHVzZWQuCisgICAgVGhlIGZpbGUgY2FuIGVpdGhlciBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgZnVsbCBwYXRoIG9yIHdpdGggdGhlIGJhc2UgbmFtZS4KKyAgICBJbiB0aGUgbGFzdCBjYXNlIGl0IGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgImJpdG1hcHMiIGRpcmVjdG9yeSBpbgorICAgICdydW50aW1lcGF0aCcsIGxpa2UgaW4gcG9pbnQgMykuICBFeGFtcGxlczogPgorCTphbWVudSBpY29uPS91c3IvbG9jYWwvcGl4bWFwcy9mb29faWNvbi54cG0gVG9vbEJhci5Gb28gOmVjaG8gIkZvbyI8Q1I+CisJOmFtZW51IGljb249Rm9vSWNvbiBUb29sQmFyLkZvbyA6ZWNobyAiRm9vIjxDUj4KKzwgICBOb3RlIHRoYXQgaW4gdGhlIGZpcnN0IGNhc2UgdGhlIGV4dGVuc2lvbiBpcyBpbmNsdWRlZCwgd2hpbGUgaW4gdGhlIHNlY29uZAorICAgIGNhc2UgaXQgaXMgb21pdHRlZC4KKyAgICBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkIHRoZSBuZXh0IHBvaW50cyBhcmUgdHJpZWQuCisgICAgQSBzcGFjZSBpbiB0aGUgZmlsZSBuYW1lIG11c3QgYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLgorICAgIEEgbWVudSBwcmlvcml0eSBtdXN0IGNvbWUgX2FmdGVyXyB0aGUgaWNvbiBhcmd1bWVudDogPgorCTphbWVudSBpY29uPWZvbyAxLjQyIFRvb2xCYXIuRm9vIDplY2hvICI0MiEiPENSPgorMikgIEFuIGl0ZW0gY2FsbGVkICdCdWlsdEluIyMnLCB3aGVyZSAjIyBpcyBhIG51bWJlciwgaXMgdGFrZW4gYXMgbnVtYmVyICMjIG9mCisgICAgdGhlIGJ1aWx0LWluIGJpdG1hcHMgYXZhaWxhYmxlIGluIFZpbS4gQ3VycmVudGx5IHRoZXJlIGFyZSAzMSBudW1iZXJlZAorICAgIGZyb20gMCB0byAzMCB3aGljaCBjb3ZlciBtb3N0IGNvbW1vbiBlZGl0aW5nIG9wZXJhdGlvbnMgfGJ1aWx0aW4tdG9vbHN8LiA+CisJOmFtZW51IFRvb2xCYXIuQnVpbHRJbjIyIDpjYWxsIFNlYXJjaE5leHQoImJhY2siKTxDUj4KKzMpICBBbiBpdGVtIHdpdGggYW5vdGhlciBuYW1lIGlzIGZpcnN0IHNlYXJjaGVkIGZvciBpbiB0aGUgZGlyZWN0b3J5CisgICAgImJpdG1hcHMiIGluICdydW50aW1lcGF0aCcuICBJZiBmb3VuZCwgdGhlIGJpdG1hcCBmaWxlIGlzIHVzZWQgYXMgdGhlCisgICAgdG9vbGJhciBidXR0b24gaW1hZ2UuICBOb3RlIHRoYXQgdGhlIGV4YWN0IGZpbGVuYW1lIGlzIE9TLXNwZWNpZmljOiBGb3IKKyAgICBleGFtcGxlLCB1bmRlciBXaW4zMiB0aGUgY29tbWFuZCA+CisJOmFtZW51IFRvb2xCYXIuSGVsbG8gOmVjaG8gImhlbGxvIjxDUj4KKzwgICB3b3VsZCBmaW5kIHRoZSBmaWxlICdoZWxsby5ibXAnLiAgVW5kZXIgR1RLKy9YMTEgaXQgaXMgJ0hlbGxvLnhwbScuICBXaXRoCisgICAgR1RLKyAyIHRoZSBmaWxlcyAnSGVsbG8ucG5nJywgJ0hlbGxvLnhwbScgYW5kICdIZWxsby5ibXAnIGFyZSBjaGVja2VkIGZvcgorICAgIGV4aXN0ZW5jZSwgYW5kIHRoZSBmaXJzdCBvbmUgZm91bmQgd291bGQgYmUgdXNlZC4KKyAgICBGb3IgTVMtV2luZG93cyBhbmQgR1RLKyAyIHRoZSBiaXRtYXAgaXMgc2NhbGVkIHRvIGZpdCB0aGUgYnV0dG9uLiAgRm9yCisgICAgTVMtV2luZG93cyBhIHNpemUgb2YgMTggYnkgMTggcGl4ZWxzIHdvcmtzIGJlc3QuCisgICAgRm9yIE1TLVdpbmRvd3MgdGhlIGJpdG1hcCBzaG91bGQgaGF2ZSAxNiBjb2xvcnMgd2l0aCB0aGUgc3RhbmRhcmQgcGFsZXR0ZS4KKyAgICBUaGUgbGlnaHQgZ3JleSBwaXhlbHMgd2lsbCBiZSBjaGFuZ2VkIHRvIHRoZSBXaW5kb3cgZnJhbWUgY29sb3IgYW5kIHRoZQorICAgIGRhcmsgZ3JleSBwaXhlbHMgdG8gdGhlIHdpbmRvdyBzaGFkb3cgY29sb3IuICBNb3JlIGNvbG9ycyBtaWdodCBhbHNvIHdvcmssCisgICAgZGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLgorNCkgIElmIHRoZSBiaXRtYXAgaXMgc3RpbGwgbm90IGZvdW5kLCBWaW0gY2hlY2tzIGZvciBhIG1hdGNoIGFnYWluc3QgaXRzIGxpc3QKKyAgICBvZiBidWlsdC1pbiBuYW1lcy4gIEVhY2ggYnVpbHQtaW4gYnV0dG9uIGltYWdlIGhhcyBhIG5hbWUuCisgICAgU28gdGhlIGNvbW1hbmQgPgorCTphbWVudSBUb29sQmFyLk9wZW4gOmUKKzwgICB3aWxsIHNob3cgdGhlIGJ1aWx0LWluICJvcGVuIGEgZmlsZSIgYnV0dG9uIGltYWdlIGlmIG5vIG9wZW4uYm1wIGV4aXN0cy4KKyAgICBBbGwgdGhlIGJ1aWx0LWluIG5hbWVzIGNhbiBiZSBzZWVuIHVzZWQgaW4gbWVudS52aW0uCis1KSAgSWYgYWxsIGVsc2UgZmFpbHMsIGEgYmxhbmssIGJ1dCBmdW5jdGlvbmluZywgYnV0dG9uIGlzIGRpc3BsYXllZC4KKworCQkJCQkJCSpidWlsdGluLXRvb2xzKgorbnIgIE5hbWUJCU5vcm1hbCBhY3Rpb24gIH4KKzAwICBOZXcJCQlvcGVuIG5ldyB3aW5kb3cKKzAxICBPcGVuCQlicm93c2UgZm9yIGZpbGUgdG8gb3BlbiBpbiBjdXJyZW50IHdpbmRvdworMDIgIFNhdmUJCXdyaXRlIGJ1ZmZlciB0byBmaWxlCiswMyAgVW5kbwkJdW5kbyBsYXN0IGNoYW5nZQorMDQgIFJlZG8JCXJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlCiswNSAgQ3V0CQkJZGVsZXRlIHNlbGVjdGVkIHRleHQgdG8gY2xpcGJvYXJkCiswNiAgQ29weQkJY29weSBzZWxlY3RlZCB0ZXh0IHRvIGNsaXBib2FyZAorMDcgIFBhc3RlCQlwYXN0ZSB0ZXh0IGZyb20gY2xpcGJvYXJkCiswOCAgUHJpbnQJCXByaW50IGN1cnJlbnQgYnVmZmVyCiswOSAgSGVscAkJb3BlbiBhIGJ1ZmZlciBvbiBWaW0ncyBidWlsdGluIGhlbHAKKzEwICBGaW5kCQlzdGFydCBhIHNlYXJjaCBjb21tYW5kCisxMSAgU2F2ZUFsbAkJd3JpdGUgYWxsIG1vZGlmaWVkIGJ1ZmZlcnMgdG8gZmlsZQorMTIgIFNhdmVTZXNuCQl3cml0ZSBzZXNzaW9uIGZpbGUgZm9yIGN1cnJlbnQgc2l0dWF0aW9uCisxMyAgTmV3U2VzbgkJd3JpdGUgbmV3IHNlc3Npb24gZmlsZQorMTQgIExvYWRTZXNuCQlsb2FkIHNlc3Npb24gZmlsZQorMTUgIFJ1blNjcmlwdAkJYnJvd3NlIGZvciBmaWxlIHRvIHJ1biBhcyBhIFZpbSBzY3JpcHQKKzE2ICBSZXBsYWNlCQlwcm9tcHQgZm9yIHN1YnN0aXR1dGUgY29tbWFuZAorMTcgIFdpbkNsb3NlCQljbG9zZSBjdXJyZW50IHdpbmRvdworMTggIFdpbk1heAkJbWFrZSBjdXJyZW50IHdpbmRvdyB1c2UgbWFueSBsaW5lcworMTkgIFdpbk1pbgkJbWFrZSBjdXJyZW50IHdpbmRvdyB1c2UgZmV3IGxpbmVzCisyMCAgV2luU3BsaXQJCXNwbGl0IGN1cnJlbnQgd2luZG93CisyMSAgU2hlbGwJCXN0YXJ0IGEgc2hlbGwKKzIyICBGaW5kUHJldgkJc2VhcmNoIGFnYWluLCBiYWNrd2FyZAorMjMgIEZpbmROZXh0CQlzZWFyY2ggYWdhaW4sIGZvcndhcmQKKzI0ICBGaW5kSGVscAkJcHJvbXB0IGZvciB3b3JkIHRvIHNlYXJjaCBoZWxwIGZvcgorMjUgIE1ha2UJCXJ1biBtYWtlIGFuZCBqdW1wIHRvIGZpcnN0IGVycm9yCisyNiAgVGFnSnVtcAkJanVtcCB0byB0YWcgdW5kZXIgdGhlIGN1cnNvcgorMjcgIFJ1bkN0YWdzCQlidWlsZCB0YWdzIGZvciBmaWxlcyBpbiBjdXJyZW50IGRpcmVjdG9yeQorMjggIFdpblZTcGxpdAkJc3BsaXQgY3VycmVudCB3aW5kb3cgdmVydGljYWxseQorMjkgIFdpbk1heFdpZHRoCQltYWtlIGN1cnJlbnQgd2luZG93IHVzZSBtYW55IGNvbHVtbnMKKzMwICBXaW5NaW5XaWR0aAkJbWFrZSBjdXJyZW50IHdpbmRvdyB1c2UgZmV3IGNvbHVtbnMKKworCQkJCQkqaGlkZGVuLW1lbnVzKiAqd2luMzItaGlkZGVuLW1lbnVzKgorSW4gdGhlIFdpbjMyIGFuZCBHVEsrIEdVSSwgc3RhcnRpbmcgYSBtZW51IG5hbWUgd2l0aCAnXScgZXhjbHVkZXMgdGhhdCBtZW51Citmcm9tIHRoZSBtYWluIG1lbnUgYmFyLiAgWW91IG11c3QgdGhlbiB1c2UgdGhlIHw6cG9wdXB8IG9yIHw6dGVhcm9mZnwgY29tbWFuZAordG8gZGlzcGxheSBpdC4KKworCQkJCQkJCSpwb3B1cC1tZW51KgorSW4gdGhlIFdpbjMyLCBHVEsrLCBNb3RpZiwgQXRoZW5hIGFuZCBQaG90b24gR1VJLCB5b3UgY2FuIGRlZmluZSB0aGUgc3BlY2lhbAorbWVudSAiUG9wVXAiLiAgVGhpcyBpcyB0aGUgbWVudSB0aGF0IGlzIGRpc3BsYXllZCB3aGVuIHRoZSByaWdodCBtb3VzZSBidXR0b24KK2lzIHByZXNzZWQsIGlmICdtb3VzZW1vZGVsJyBpcyBzZXQgdG8gcG9wdXAgb3IgcG9wdXBfc2V0cG9zLgorCisKKzUuMyBTaG93aW5nIFdoYXQgTWVudXMgQXJlIE1hcHBlZCBUbwkJCSpzaG93aW5nLW1lbnVzKgorCitUbyBzZWUgd2hhdCBhbiBleGlzdGluZyBtZW51IGlzIG1hcHBlZCB0bywgdXNlIGp1c3Qgb25lIGFyZ3VtZW50IGFmdGVyIHRoZQorbWVudSBjb21tYW5kcyAoanVzdCBsaWtlIHlvdSB3b3VsZCB3aXRoIHRoZSAiOm1hcCIgY29tbWFuZHMpLiAgSWYgdGhlIG1lbnUKK3NwZWNpZmllZCBpcyBhIHN1Ym1lbnUsIHRoZW4gYWxsIG1lbnVzIHVuZGVyIHRoYXQgaGllcmFyY2h5IHdpbGwgYmUgc2hvd24uCitJZiBubyBhcmd1bWVudCBpcyBnaXZlbiBhZnRlciA6bWVudSBhdCBhbGwsIHRoZW4gQUxMIG1lbnUgaXRlbXMgYXJlIHNob3duCitmb3IgdGhlIGFwcHJvcHJpYXRlIG1vZGUgKGVnLCBDb21tYW5kLWxpbmUgbW9kZSBmb3IgOmNtZW51KS4KKworU3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBsaXN0LCBqdXN0IGJlZm9yZSB0aGUgcmhzOgorKglUaGUgbWVudSB3YXMgZGVmaW5lZCB3aXRoICJub3JlIiB0byBkaXNhbGxvdyByZW1hcHBpbmcuCismCVRoZSBtZW51IHdhcyBkZWZpbmVkIHdpdGggIjxzY3JpcHQ+IiB0byBhbGxvdyByZW1hcHBpbmcgc2NyaXB0LWxvY2FsCisJbWFwcGluZ3Mgb25seS4KKy0JVGhlIG1lbnUgd2FzIGRpc2FibGVkLgorCitOb3RlIHRoYXQgaGl0dGluZyA8VGFiPiB3aGlsZSBlbnRlcmluZyBhIG1lbnUgbmFtZSBhZnRlciBhIG1lbnUgY29tbWFuZCBtYXkKK2JlIHVzZWQgdG8gY29tcGxldGUgdGhlIG5hbWUgb2YgdGhlIG1lbnUgaXRlbS4KKworCis1LjQgRXhlY3V0aW5nIE1lbnVzCQkJCQkqZXhlY3V0ZS1tZW51cyoKKworCQkJCQkJKjplbSogICo6ZW1lbnUqICpFMzM0KiAqRTMzNSoKKzpbcmFuZ2VdZW1bZW51XSB7bWVudX0JCUV4ZWN1dGUge21lbnV9IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKwkJCQlUaGUgZGVmYXVsdCBpcyB0byBleGVjdXRlIHRoZSBOb3JtYWwgbW9kZQorCQkJCW1lbnUuICBJZiBhIHJhbmdlIGlzIHNwZWNpZmllZCwgaXQgZXhlY3V0ZXMKKwkJCQl0aGUgVmlzdWFsIG1vZGUgbWVudS4KKwkJCQlJZiB1c2VkIGZyb20gPGMtbz4sIGl0IGV4ZWN1dGVzIHRoZQorCQkJCWluc2VydC1tb2RlIG1lbnUgRWc6ID4KKwk6ZW1lbnUgRmlsZS5FeGl0CisKK0lmIHRoZSBjb25zb2xlLW1vZGUgdmltIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggV0FOVF9NRU5VIGRlZmluZWQsIHlvdSBjYW4KK3VzZSA6ZW1lbnUgdG8gYWNjZXNzIHVzZWZ1bCBtZW51IGl0ZW1zIHlvdSBtYXkgaGF2ZSBnb3QgdXNlZCB0byBmcm9tIEdVSQorbW9kZS4gIFNlZSAnd2lsZG1lbnUnIGZvciBhbiBvcHRpb24gdGhhdCB3b3JrcyB3ZWxsIHdpdGggdGhpcy4gIFNlZQorfGNvbnNvbGUtbWVudXN8IGZvciBhbiBleGFtcGxlLgorCitXaGVuIHVzaW5nIGEgcmFuZ2UsIGlmIHRoZSBsaW5lcyBtYXRjaCB3aXRoICc8LCc+LCB0aGVuIHRoZSBtZW51IGlzIGV4ZWN1dGVkCit1c2luZyB0aGUgbGFzdCB2aXN1YWwgc2VsZWN0aW9uLgorCisKKzUuNSBEZWxldGluZyBNZW51cwkJCQkJKmRlbGV0ZS1tZW51cyoKKworCQkJCQkJKjp1bm1lKiAgKjp1bm1lbnUqCisJCQkJCQkqOmF1biogICAqOmF1bm1lbnUqCisJCQkJCQkqOm51bm1lKiAqOm51bm1lbnUqCisJCQkJCQkqOm91bm1lKiAqOm91bm1lbnUqCisJCQkJCQkqOnZ1bm1lKiAqOnZ1bm1lbnUqCisJCQkJCQkqOml1bm1lKiAqOml1bm1lbnUqCisJCQkJCQkqOmN1bm1lKiAqOmN1bm1lbnUqCitUbyBkZWxldGUgYSBtZW51IGl0ZW0gb3IgYSB3aG9sZSBzdWJtZW51LCB1c2UgdGhlIHVubWVudSBjb21tYW5kcywgd2hpY2ggYXJlCithbmFsb2dvdXMgdG8gdGhlIHVubWFwIGNvbW1hbmRzLiAgRWc6ID4KKyAgICA6dW5tZW51ISBFZGl0LlBhc3RlCisKK1RoaXMgd2lsbCByZW1vdmUgdGhlIFBhc3RlIGl0ZW0gZnJvbSB0aGUgRWRpdCBtZW51IGZvciBJbnNlcnQgYW5kCitDb21tYW5kLWxpbmUgbW9kZXMuCisKK05vdGUgdGhhdCBoaXR0aW5nIDxUYWI+IHdoaWxlIGVudGVyaW5nIGEgbWVudSBuYW1lIGFmdGVyIGFuIHVtZW51IGNvbW1hbmQKK21heSBiZSB1c2VkIHRvIGNvbXBsZXRlIHRoZSBuYW1lIG9mIHRoZSBtZW51IGl0ZW0gZm9yIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgorCitUbyByZW1vdmUgYWxsIG1lbnVzIHVzZToJCQkqOnVubWVudS1hbGwqICA+CisJOnVubWVudSAqCSIgcmVtb3ZlIGFsbCBtZW51cyBpbiBOb3JtYWwgYW5kIHZpc3VhbCBtb2RlCisJOnVubWVudSEgKgkiIHJlbW92ZSBhbGwgbWVudXMgaW4gSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZQorCTphdW5tZW51ICoJIiByZW1vdmUgYWxsIG1lbnVzIGluIGFsbCBtb2RlcworCitJZiB5b3Ugd2FudCB0byBnZXQgcmlkIG9mIHRoZSBtZW51IGJhcjogPgorCTpzZXQgZ3Vpb3B0aW9ucy09bQorCisKKzUuNiBEaXNhYmxpbmcgTWVudXMJCQkJCSpkaXNhYmxlLW1lbnVzKgorCisJCQkJCQkqOm1lbnUtZGlzYWJsZSogKjptZW51LWVuYWJsZSoKK0lmIHlvdSBkbyBub3Qgd2FudCB0byByZW1vdmUgYSBtZW51LCBidXQgZGlzYWJsZSBpdCBmb3IgYSBtb21lbnQsIHRoaXMgY2FuIGJlCitkb25lIGJ5IGFkZGluZyB0aGUgImVuYWJsZSIgb3IgImRpc2FibGUiIGtleXdvcmQgdG8gYSAiOm1lbnUiIGNvbW1hbmQuCitFeGFtcGxlczogPgorCTptZW51IGRpc2FibGUgJkZpbGUuJk9wZW5cLlwuXC4KKwk6YW1lbnUgZW5hYmxlICoKKwk6YW1lbnUgZGlzYWJsZSAmVG9vbHMuKgorCitUaGUgY29tbWFuZCBhcHBsaWVzIHRvIHRoZSBtb2RlcyBhcyB1c2VkIHdpdGggYWxsIG1lbnUgY29tbWFuZHMuICBOb3RlIHRoYXQKK2NoYXJhY3RlcnMgbGlrZSAiJiIgbmVlZCB0byBiZSBpbmNsdWRlZCBmb3IgdHJhbnNsYXRlZCBuYW1lcyB0byBiZSBmb3VuZC4KK1doZW4gdGhlIGFyZ3VtZW50IGlzICIqIiwgYWxsIG1lbnVzIGFyZSBhZmZlY3RlZC4gIE90aGVyd2lzZSB0aGUgZ2l2ZW4gbWVudQorbmFtZSBhbmQgYWxsIGV4aXN0aW5nIHN1Ym1lbnVzIGJlbG93IGl0IGFyZSBhZmZlY3RlZC4KKworCis1LjcgRXhhbXBsZXMgZm9yIE1lbnVzCQkJCQkqbWVudS1leGFtcGxlcyoKKworSGVyZSBpcyBhbiBleGFtcGxlIG9uIGhvdyB0byBhZGQgbWVudSBpdGVtcyB3aXRoIG1lbnUncyEgIFlvdSBjYW4gYWRkIGEgbWVudQoraXRlbSBmb3IgdGhlIGtleXdvcmQgdW5kZXIgdGhlIGN1cnNvci4gIFRoZSByZWdpc3RlciAieiIgaXMgdXNlZC4gPgorCisgIDpubWVudSBXb3Jkcy5BZGRcIFZhcgkJd2IienllOm1lbnUhIFdvcmRzLjxDLVI+eiA8Qy1SPno8Q1I+CisgIDpubWVudSBXb3Jkcy5SZW1vdmVcIFZhcgl3YiJ6eWU6dW5tZW51ISBXb3Jkcy48Qy1SPno8Q1I+CisgIDp2bWVudSBXb3Jkcy5BZGRcIFZhcgkJInp5Om1lbnUhIFdvcmRzLjxDLVI+eiA8Qy1SPnogPENSPgorICA6dm1lbnUgV29yZHMuUmVtb3ZlXCBWYXIJInp5OnVubWVudSEgV29yZHMuPEMtUj56PENSPgorICA6aW1lbnUgV29yZHMuQWRkXCBWYXIJCTxFc2M+d2IienllOm1lbnUhIFdvcmRzLjxDLVI+eiA8Qy1SPno8Q1I+YQorICA6aW1lbnUgV29yZHMuUmVtb3ZlXCBWYXIJPEVzYz53YiJ6eWU6dW5tZW51ISBXb3Jkcy48Qy1SPno8Q1I+YQorCisodGhlIHJocyBpcyBpbiA8PiBub3RhdGlvbiwgeW91IGNhbiBjb3B5L3Bhc3RlIHRoaXMgdGV4dCB0byB0cnkgb3V0IHRoZQorbWFwcGluZ3MsIG9yIHB1dCB0aGVzZSBsaW5lcyBpbiB5b3VyIGd2aW1yYzsgIjxDLVI+IiBpcyBDVFJMLVIsICI8Q1I+IiBpcwordGhlIDxDUj4ga2V5LiAgfDw+fCkKKworCis1LjggVG9vbHRpcHMgJiBNZW51IHRpcHMKKworU2VlIHNlY3Rpb24gfDQyLjR8IGluIHRoZSB1c2VyIG1hbnVhbC4KKworCQkJCQkJCSo6dG1lbnUqICo6dG0qCis6dG1bZW51XSB7bWVudXBhdGh9IHtyaHN9CURlZmluZSBhIHRpcCBmb3IgYSBtZW51IG9yIHRvb2wuICB7b25seSBpbgorCQkJCVgxMSBhbmQgV2luMzIgR1VJfQorCis6dG1bZW51XSBbbWVudXBhdGhdCQlMaXN0IG1lbnUgdGlwcy4ge29ubHkgaW4gWDExIGFuZCBXaW4zMiBHVUl9CisKKwkJCQkJCQkqOnR1bm1lbnUqICo6dHUqCis6dHVbbm1lbnVdIHttZW51cGF0aH0JCVJlbW92ZSBhIHRpcCBmb3IgYSBtZW51IG9yIHRvb2wuCisJCQkJe29ubHkgaW4gWDExIGFuZCBXaW4zMiBHVUl9CisKK1doZW4gYSB0aXAgaXMgZGVmaW5lZCBmb3IgYSBtZW51IGl0ZW0sIGl0IGFwcGVhcnMgaW4gdGhlIGNvbW1hbmQtbGluZSBhcmVhCit3aGVuIHRoZSBtb3VzZSBpcyBvdmVyIHRoYXQgaXRlbSwgbXVjaCBsaWtlIGEgc3RhbmRhcmQgV2luZG93cyBtZW51IGhpbnQgaW4KK3RoZSBzdGF0dXMgYmFyLiAoRXhjZXB0IHdoZW4gVmltIGlzIGluIENvbW1hbmQtbGluZSBtb2RlLCB3aGVuIG9mIGNvdXJzZQorbm90aGluZyBpcyBkaXNwbGF5ZWQuKQorV2hlbiBhIHRpcCBpcyBkZWZpbmVkIGZvciBhIFRvb2xCYXIgaXRlbSwgaXQgYXBwZWFycyBhcyBhIHRvb2x0aXAgd2hlbiB0aGUKK21vdXNlIHBhdXNlcyBvdmVyIHRoYXQgYnV0dG9uLCBpbiB0aGUgdXN1YWwgZmFzaGlvbi4gIFVzZSB0aGUgfGhsLVRvb2x0aXB8CitoaWdobGlnaHQgZ3JvdXAgdG8gY2hhbmdlIGl0cyBjb2xvcnMuCisKK0EgInRpcCIgY2FuIGJlIGRlZmluZWQgZm9yIGVhY2ggbWVudSBpdGVtLiAgRm9yIGV4YW1wbGUsIHdoZW4gZGVmaW5pbmcgYSBtZW51CitpdGVtIGxpa2UgdGhpczogPgorCTphbWVudSBNeU1lbnUuSGVsbG8gOmVjaG8gIkhlbGxvIjxDUj4KK1RoZSB0aXAgaXMgZGVmaW5lZCBsaWtlIHRoaXM6ID4KKwk6dG1lbnUgTXlNZW51LkhlbGxvIERpc3BsYXlzIGEgZ3JlZXRpbmcuCitBbmQgZGVsZXRlIGl0IHdpdGg6ID4KKwk6dHVubWVudSBNeU1lbnUuSGVsbG8KKworVG9vbHRpcHMgYXJlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIFgxMSBhbmQgV2luMzIgR1VJLiBIb3dldmVyLCB0aGV5CitzaG91bGQgYXBwZWFyIGZvciB0aGUgb3RoZXIgZ3VpIHBsYXRmb3JtcyBpbiB0aGUgbm90IHRvbyBkaXN0YW50IGZ1dHVyZS4KKworVGhlICI6dG1lbnUiIGNvbW1hbmQgd29ya3MganVzdCBsaWtlIG90aGVyIG1lbnUgY29tbWFuZHMsIGl0IHVzZXMgdGhlIHNhbWUKK2FyZ3VtZW50cy4gICI6dHVubWVudSIgZGVsZXRlcyBhbiBleGlzdGluZyBtZW51IHRpcCwgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZQorb3RoZXIgdW5tZW51IGNvbW1hbmRzLgorCitJZiBhIG1lbnUgaXRlbSBiZWNvbWVzIGludmFsaWQgKGkuZS4gaXRzIGFjdGlvbnMgaW4gYWxsIG1vZGVzIGFyZSBkZWxldGVkKSBWaW0KK2RlbGV0ZXMgdGhlIG1lbnUgdGlwIChhbmQgdGhlIGl0ZW0pIGZvciB5b3UuICBUaGlzIG1lYW5zIHRoYXQgOmF1bm1lbnUgZGVsZXRlcworYSBtZW51IGl0ZW0gLSB5b3UgZG9uJ3QgbmVlZCB0byBkbyBhIDp0dW5tZW51IGFzIHdlbGwuCisKKworNS45IFBvcHVwIE1lbnVzCisKK0luIHRoZSBXaW4zMiBhbmQgR1RLKyBHVUksIHlvdSBjYW4gY2F1c2UgYSBtZW51IHRvIHBvcHVwIGF0IHRoZSBjdXJzb3IuCitUaGlzIGJlaGF2ZXMgc2ltaWxhcmx5IHRvIHRoZSBQb3BVcCBtZW51cyBleGNlcHQgdGhhdCBhbnkgbWVudSB0cmVlIGNhbgorYmUgcG9wcGVkIHVwLgorCitUaGlzIGNvbW1hbmQgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB1c2luZyBpdCBpcyBkaXNjb3VyYWdlZCwgYmVjYXVzZQoraXQgYmVoYXZlcyBpbiBhIHN0cmFuZ2Ugd2F5LgorCisJCQkJCQkJKjpwb3B1cCogKjpwb3B1KgorOnBvcHVbcF0ge25hbWV9CQkJUG9wdXAgdGhlIG1lbnUge25hbWV9LiAgVGhlIG1lbnUgbmFtZWQgbXVzdAorCQkJCWhhdmUgYXQgbGVhc3Qgb25lIHN1YmVudHJ5LCBidXQgbmVlZCBub3QKKwkJCQlhcHBlYXIgb24gdGhlIG1lbnUtYmFyIChzZWUgfGhpZGRlbi1tZW51c3wpLgorCQkJCXtvbmx5IGF2YWlsYWJsZSBmb3IgV2luMzIgYW5kIEdUSyBHVUl9CisKK0V4YW1wbGU6ID4KKwk6cG9wdXAgRmlsZQord2lsbCBtYWtlIHRoZSAiRmlsZSIgbWVudSAoaWYgdGhlcmUgaXMgb25lKSBhcHBlYXIgYXQgdGhlIHRleHQgY3Vyc29yLiA+CisKKwk6YW1lbnUgXVRvb2xiYXIuTWFrZQk6bWFrZTxDUj4KKwk6cG9wdXAgXVRvb2xiYXIKK1RoaXMgY3JlYXRlcyBhIHBvcHVwIG1lbnUgdGhhdCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBtYWluIG1lbnUtYmFyLgorCitOb3RlIHRoYXQgYSBtZW51IHRoYXQgc3RhcnRzIHdpdGggJ10nIHdpbGwgbm90IGJlIGRpc3BsYXllZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBFeHRyYXMJCQkJCQkqZ3VpLWV4dHJhcyoKKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBvdGhlciBmZWF0dXJlcyB3aGljaCBhcmUgcmVsYXRlZCB0byB0aGUgR1VJLgorCistIFdpdGggdGhlIEdVSSwgdGhlcmUgaXMgbm8gd2FpdCBmb3Igb25lIHNlY29uZCBhZnRlciBoaXR0aW5nIGVzY2FwZSwgYmVjYXVzZQorICB0aGUga2V5IGNvZGVzIGRvbid0IHN0YXJ0IHdpdGggPEVzYz4uCisKKy0gVHlwaW5nIF5WIGZvbGxvd2VkIGJ5IGEgc3BlY2lhbCBrZXkgaW4gdGhlIEdVSSB3aWxsIGluc2VydCAiPEtleT4iLCBzaW5jZQorICB0aGUgaW50ZXJuYWwgc3RyaW5nIHVzZWQgaXMgbWVhbmluZ2xlc3MuICBNb2RpZmllcnMgbWF5IGFsc28gYmUgaGVsZCBkb3duIHRvCisgIGdldCAiPE1vZGlmaWVycy1LZXk+Ii4KKworLSBJbiB0aGUgR1VJLCB0aGUgbW9kaWZpZXJzIFNISUZULCBDVFJMLCBhbmQgQUxUIChvciBNRVRBKSBtYXkgYmUgdXNlZCB3aXRoaW4KKyAgbWFwcGluZ3Mgb2Ygc3BlY2lhbCBrZXlzIGFuZCBtb3VzZSBldmVudHMuICBlZzogOm1hcCA8TS1MZWZ0RHJhZz4gPExlZnREcmFnPgorCistIEluIHRoZSBHVUksIHNldmVyYWwgbm9ybWFsIGtleXMgbWF5IGhhdmUgbW9kaWZpZXJzIGluIG1hcHBpbmdzIGV0YywgdGhlc2UKKyAgYXJlIDxTcGFjZT4sIDxUYWI+LCA8Tkw+LCA8Q1I+LCA8RXNjPi4KKworLSBUbyBjaGVjayBpbiBhIFZpbSBzY3JpcHQgaWYgdGhlIEdVSSBpcyBiZWluZyB1c2VkLCB5b3UgY2FuIHVzZSBzb21ldGhpbmcKKyAgbGlrZSB0aGlzOiA+CisKKwlpZiBoYXMoImd1aV9ydW5uaW5nIikKKwkgICBlY2hvICJ5ZXMsIHdlIGhhdmUgYSBHVUkiCisJZWxzZQorCSAgIGVjaG8gIkJvcmluZyBvbGQgY29uc29sZSIKKwllbmRpZgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFNoZWxsIENvbW1hbmRzCQkJCQkqZ3VpLXNoZWxsKgorCitGb3IgdGhlIFgxMSBHVUkgdGhlIGV4dGVybmFsIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBpbnNpZGUgdGhlIGd2aW0gd2luZG93LgorU2VlIHxndWktcHR5fC4KKworV0FSTklORzogRXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgZnJvbSB0aGUgWDExIEdVSSB3aWxsIG5vdCBhbHdheXMKK3dvcmsuICAibm9ybWFsIiBjb21tYW5kcyBsaWtlICJscyIsICJncmVwIiBhbmQgIm1ha2UiIG1vc3RseSB3b3JrIGZpbmUuCitDb21tYW5kcyB0aGF0IHJlcXVpcmUgYW4gaW50ZWxsaWdlbnQgdGVybWluYWwgbGlrZSAibGVzcyIgYW5kICJpc3BlbGwiIHdvbid0Cit3b3JrLiAgU29tZSBtYXkgZXZlbiBoYW5nIGFuZCBuZWVkIHRvIGJlIGtpbGxlZCBmcm9tIGFub3RoZXIgdGVybWluYWwuICBTbyBiZQorY2FyZWZ1bCEKKworRm9yIHRoZSBXaW4zMiBHVUkgdGhlIGV4dGVybmFsIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KK1NlZSB8Z3VpLXNoZWxsLXdpbjMyfC4KKworIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZ3VpX3cxNi50eHQgYi9ydW50aW1lL2RvYy9ndWlfdzE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDU1YWZlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZ3VpX3cxNi50eHQKQEAgLTAsMCArMSwxODYgQEAKKypndWlfdzE2LnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMSBTZXAgMDMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitWaW0ncyBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UJCQkJKmd1aS13MTYqICp3aW4xNi1ndWkqCisKKzEuIFN0YXJ0aW5nIHRoZSBHVUkJCXx3aW4xNi1zdGFydHwKKzIuIFZpbSBhcyBkZWZhdWx0IGVkaXRvcgl8d2luMTYtZGVmYXVsdC1lZGl0b3J8CiszLiBVc2luZyB0aGUgY2xpcGJvYXJkCQl8d2luMTYtY2xpcGJvYXJkfAorNC4gU2hlbGwgQ29tbWFuZHMJCXx3aW4xNi1zaGVsbHwKKzUuIFNwZWNpYWwgY29sb3JzCQl8d2luMTYtY29sb3JzfAorNi4gV2luZG93cyBkaWFsb2dzICYgYnJvd3NlcnMJfHdpbjE2LWRpYWxvZ3N8Cis3LiBWYXJpb3VzCQkJfHdpbjE2LXZhcmlvdXN8CisKK090aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb246Cit8Z3VpLnR4dHwJRm9yIGdlbmVyaWMgaXRlbXMgb2YgdGhlIEdVSS4KK3xvc19tc2Rvcy50eHR8ICBGb3IgaXRlbXMgY29tbW9uIHRvIERPUyBhbmQgV2luZG93cy4KK3xndWlfdzMyLnR4dHwJU29tZSBpdGVtcyBoZXJlIGFyZSBhbHNvIGFwcGxpY2FibGUgdG8gdGhlIFdpbjE2IHZlcnNpb24uCisKK3tWaSBkb2VzIG5vdCBoYXZlIGEgV2luZG93cyBHVUl9CisKK1RoZSBXaW4xNiB2ZXJzaW9uIG9mIFZpbSB3aWxsIHJ1biBvbiBXaW5kb3dzIDMuMSBvciBsYXRlci4gSXQgaGFzIG5vdCBiZWVuCit0ZXN0ZWQgb24gMy4wLCBpdCBwcm9iYWJseSB3b24ndCB3b3JrIHdpdGhvdXQgYmVpbmcgcmVjb21waWxlZCBhbmQKK21vZGlmaWVkLiAoYnV0IHlvdSByZWFsbHkgc2hvdWxkIHVwZ3JhZGUgdG8gMy4xMSBhbnl3YXkuIDopCisKK0luIG1vc3QgcmVzcGVjdHMgaXQgYmVoYXZlcyBpZGVudGljYWxseSB0byB0aGUgV2luMzIgR1VJIHZlcnNpb24sIGluY2x1ZGluZworaGF2aW5nIGEgZmxhdC1zdHlsZSB0b29sYmFyKCEpLiBUaGUgY2hpZWYgZGlmZmVyZW5jZXM6CisKKzEpIEJvbGQvSXRhbGljIHRleHQgaXMgbm90IGF2YWlsYWJsZSwgdG8gc3BlZWQgdXAgcmVwYWludC9yZWR1Y2UgcmVzb3VyY2UKKyAgIHVzYWdlLiAoWW91IGNhbiByZS1pbnN0YXRlIHRoaXMgYnkgdW5kZWZpbmluZyBNU1dJTjE2X0ZBU1RURVhULikKKzIpIE5vIHRlYXJvZmYgbWVudSBlbXVsYXRpb24uCiszKSBObyBPTEUgaW50ZXJmYWNlLgorNCkgTm8gbG9uZyBmaWxlbmFtZSBzdXBwb3J0IChvZiBjb3Vyc2UpCis1KSBObyB0b29sdGlwcyBvbiB0b29sYmFyIGJ1dHRvbnMgLSBpbnN0ZWFkIHRoZXkgcHJvZHVjZSBjb21tYW5kLWxpbmUgdGlwcworICAgbGlrZSBtZW51IGl0ZW1zIGRvLgorNikgTGluZSBsZW5ndGggbGltaXRlZCB0byAzMjc2NyBjaGFyYWN0ZXJzIChsaWtlIDE2LWJpdCBET1MgdmVyc2lvbikKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFN0YXJ0aW5nIHRoZSBHVUkJCQkJCSp3aW4xNi1zdGFydCoKKworVGhlIFdpbjE2IEdVSSB2ZXJzaW9uIG9mIFZpbSB3aWxsIGFsd2F5cyBzdGFydCB0aGUgR1VJLCBubyBtYXR0ZXIgaG93IHlvdQorc3RhcnQgaXQgb3Igd2hhdCBpdCdzIGNhbGxlZC4gVGhlcmUgaXMgbm8gJ2NvbnNvbGUnIHZlcnNpb24gYXMgc3VjaCwgYnV0IHlvdQorY2FuIHVzZSBvbmUgb2YgdGhlIERPUyB2ZXJzaW9ucyBpbiBhIERPUyBib3guCisKK1RoZSBXaW4xNiBHVUkgaGFzIGFuIGV4dHJhIG1lbnUgaXRlbTogICJXaW5kb3cvU2VsZWN0IEZvbnQiLiAgSXQgYnJpbmdzIHVwIHRoZQorc3RhbmRhcmQgV2luZG93cyBmb250IHNlbGVjdG9yLiBOb3RlIHRoYXQgYm9sZCBhbmQgaXRhbGljIGZvbnRzIGFyZSBub3QKK3N1cHBvcnRlZCBpbiBhbiBhdHRlbXB0IHRvIG1heGltaXplIEdESSBkcmF3aW5nIHNwZWVkLgorCitTZXR0aW5nIHRoZSBtZW51IGhlaWdodCBkb2Vzbid0IHdvcmsgZm9yIHRoZSBXaW4xNiBHVUkuCisKKwkJCQkJCQkqd2luMTYtbWF4aW1pemVkKgorSWYgeW91IHdhbnQgVmltIHRvIHN0YXJ0IHdpdGggYSBtYXhpbWl6ZWQgd2luZG93LCBhZGQgdGhpcyBjb21tYW5kIHRvIHlvdXIKK3ZpbXJjIG9yIGd2aW1yYyBmaWxlOiA+CisJYXUgR1VJRW50ZXIgKiBzaW1hbHQgfngKKzwKKworVGhlcmUgaXMgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIGd2aW0uZXhlIHRoYXQgcnVucyB1bmRlciB0aGUgV2luMzJzIHN1YnN5c3RlbQorb2YgV2luZG93cyAzLjEgb3IgMy4xMS4gIFNlZSB8d2luMzJzfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBWaW0gYXMgZGVmYXVsdCBlZGl0b3IJCQkJKndpbjE2LWRlZmF1bHQtZWRpdG9yKgorCitUbyBzZXQgVmltIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBmb3IgYSBmaWxlIHR5cGUgeW91IGNhbiB1c2UgRmlsZSBNYW5hZ2VyJ3MKKyJBc3NvY2lhdGUiIGZlYXR1cmUuCisKK1doZW4geW91IG9wZW4gYSBmaWxlIGluIFZpbSBieSBkb3VibGUgY2xpY2tpbmcgaXQsIFZpbSBjaGFuZ2VzIHRvIHRoYXQKK2ZpbGUncyBkaXJlY3RvcnkuCisKK1NlZSBhbHNvIHxub3RlcGFkfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBVc2luZyB0aGUgY2xpcGJvYXJkCQkJCQkqd2luMTYtY2xpcGJvYXJkKgorCitXaW5kb3dzIGhhcyBhIGNsaXBib2FyZCwgd2hlcmUgeW91IGNhbiBjb3B5IHRleHQgdG8sIGFuZCBwYXN0ZSB0ZXh0IGZyb20uICBWaW0KK3N1cHBvcnRzIHRoaXMgaW4gc2V2ZXJhbCB3YXlzLgorVGhlIGNsaXBib2FyZCB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIFdpbjMyIHZlcnNpb246IHNlZSB8Z3VpLWNsaXBib2FyZHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gU2hlbGwgQ29tbWFuZHMJCQkJCSp3aW4xNi1zaGVsbCoKKworVmltIHNwYXducyBhIERPUyB3aW5kb3cgZm9yIGV4dGVybmFsIGNvbW1hbmRzLCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biBhbnkKK0RPUyBjb21tYW5kLiBUaGUgd2luZG93IHVzZXMgdGhlIF9kZWZhdWx0LnBpZiBzZXR0aW5ncy4KKworCQkJCQkJCSp3aW4xNi0hc3RhcnQqCitOb3JtYWxseSwgVmltIHdhaXRzIGZvciBhIGNvbW1hbmQgdG8gY29tcGxldGUgYmVmb3JlIGNvbnRpbnVpbmcgKHRoaXMgbWFrZXMKK3NlbnNlIGZvciBtb3N0IHNoZWxsIGNvbW1hbmRzIHdoaWNoIHByb2R1Y2Ugb3V0cHV0IGZvciBWaW0gdG8gdXNlKS4gIElmIHlvdQord2FudCBWaW0gdG8gc3RhcnQgYSBwcm9ncmFtIGFuZCByZXR1cm4gaW1tZWRpYXRlbHksIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcKK3N5bnRheDoKKwk6IXN0YXJ0IHtjb21tYW5kfQorVGhpcyBtYXkgb25seSB3b3JrIGZvciBhIFdpbmRvd3MgcHJvZ3JhbSB0aG91Z2guCitEb24ndCBmb3JnZXQgdGhhdCB5b3UgbXVzdCB0ZWxsIFdpbmRvd3MgMy4xeCB0byBrZWVwIGV4ZWN1dGluZyBhIERPUyBjb21tYW5kCitpbiB0aGUgYmFja2dyb3VuZCB3aGlsZSB5b3Ugc3dpdGNoIGJhY2sgdG8gVmltLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFNwZWNpYWwgY29sb3JzCQkJCQkqd2luMTYtY29sb3JzKgorCitPbiBXaW4xNiwgdGhlIG5vcm1hbCBET1MgY29sb3JzIGNhbiBiZSB1c2VkLiAgU2VlIHxkb3MtY29sb3JzfC4KKworQWRkaXRpb25hbGx5IHRoZSBzeXN0ZW0gY29uZmlndXJlZCBjb2xvcnMgY2FuIGFsc28gYmUgdXNlZC4gIFRoZXNlIGFyZSBrbm93bgorYnkgdGhlIG5hbWVzIFN5c19YWFgsIHdoZXJlIFhYWCBpcyB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGNvbG9yIG5hbWUsIGZyb20gdGhlCitmb2xsb3dpbmcgbGlzdCAoc2VlIHRoZSBXaW4zMiBkb2N1bWVudGF0aW9uIGZvciBmdWxsIGRlc2NyaXB0aW9ucykuICBDYXNlIGlzCitpZ25vcmVkLgorCitTeXNfQlRORmFjZQkJU3lzX0JUTlNoYWRvdwkJCVN5c19BY3RpdmVCb3JkZXIKK1N5c19BY3RpdmVDYXB0aW9uCVN5c19BcHBXb3Jrc3BhY2UJCVN5c19CYWNrZ3JvdW5kCitTeXNfQlROVGV4dAkJU3lzX0NhcHRpb25UZXh0CQkJU3lzX0dyYXlUZXh0CitTeXNfSGlnaGxpZ2h0CQlTeXNfSGlnaGxpZ2h0VGV4dAkJU3lzX0luYWN0aXZlQm9yZGVyCitTeXNfSW5hY3RpdmVDYXB0aW9uCVN5c19JbmFjdGl2ZUNhcHRpb25UZXh0CQlTeXNfTWVudQorU3lzX01lbnVUZXh0CQlTeXNfU2Nyb2xsQmFyCQkJU3lzX1dpbmRvdworU3lzX1dpbmRvd0ZyYW1lCQlTeXNfV2luZG93VGV4dAorCitQcm9iYWJseSB0aGUgbW9zdCB1c2VmdWwgdmFsdWVzIGFyZQorCVN5c19XaW5kb3cJICAgIE5vcm1hbCB3aW5kb3cgYmFja2dyb3VuZAorCVN5c19XaW5kb3dUZXh0ICAgICAgTm9ybWFsIHdpbmRvdyB0ZXh0CisJU3lzX0hpZ2hsaWdodCAgICAgICBIaWdobGlnaHRlZCBiYWNrZ3JvdW5kCisJU3lzX0hpZ2hsaWdodFRleHQgICBIaWdobGlnaHRlZCB0ZXh0CisKK1RoZXNlIGV4dHJhIGNvbG9ycyBhcmUgYWxzbyBhdmFpbGFibGU6CitHcmF5LCBHcmV5LCBMaWdodFllbGxvdywgU2VhR3JlZW4sIE9yYW5nZSwgUHVycGxlLCBTbGF0ZUJsdWUsIFZpb2xldCwKKworCitTZWUgYWxzbyB8cmdiLnR4dHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJKndpbjE2LWRpYWxvZ3MqCis2LiBXaW5kb3dzIGRpYWxvZ3MgJiBicm93c2VycworCitUaGUgV2luMTYgR1VJIGNhbiB1c2UgZmFtaWxpYXIgV2luZG93cyBjb21wb25lbnRzIGZvciBzb21lIG9wZXJhdGlvbnMsIGFzIHdlbGwKK2FzIHRoZSB0cmFkaXRpb25hbCBpbnRlcmZhY2Ugc2hhcmVkIHdpdGggdGhlIGNvbnNvbGUgdmVyc2lvbi4KKworCis2LjEgRGlhbG9ncworCitUaGUgZGlhbG9ncyBkaXNwbGF5ZWQgYnkgdGhlICJjb25maXJtIiBmYW1pbHkgKGkuZS4gdGhlICdjb25maXJtJyBvcHRpb24sCit8OmNvbmZpcm18IGNvbW1hbmQgYW5kIHxjb25maXJtKCl8IGZ1bmN0aW9uIGFyZSBHVUktYmFzZWQgcmF0aGVyIHRoYW4gdGhlCitjb25zb2xlLWJhc2VkIG9uZXMgdXNlZCBieSBvdGhlciB2ZXJzaW9ucy4gIFRoZXJlIGlzIG5vIG9wdGlvbiB0byBjaGFuZ2UgdGhpcy4KKworCis2LjIgRmlsZSBCcm93c2VycworCitXaGVuIHByZXBlbmRpbmcgIjpicm93c2UiIGJlZm9yZSBmaWxlIGVkaXRpbmcgY29tbWFuZHMsIGEgZmlsZSByZXF1ZXN0ZXIgaXMKK3VzZWQgdG8gYWxsb3cgeW91IHRvIHNlbGVjdCBhbiBleGlzdGluZyBmaWxlLiAgU2VlIHw6YnJvd3NlfC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFZhcmlvdXMJCQkJCQkqd2luMTYtdmFyaW91cyoKKworCQkJCQkJCSp3aW4xNi1wcmludGluZyoKK1RoZSAiRmlsZS9QcmludCIgbWVudSB1c2VzIE5vdGVwYWQgdG8gcHJpbnQgdGhlIGN1cnJlbnQgYnVmZmVyLiAgVGhpcyBpcyBhIGJpdAorY2x1bXN5LCBidXQgaXQncyBwb3J0YWJsZS4gIElmIHlvdSB3YW50IHNvbWV0aGluZyBlbHNlLCB5b3UgY2FuIGRlZmluZSB5b3VyCitvd24gcHJpbnQgY29tbWFuZC4gIEZvciBleGFtcGxlLCB5b3UgY291bGQgbG9vayBmb3IgdGhlIDE2LWJpdCB2ZXJzaW9uIG9mCitQcmludEZpbGUuICBTZWUgJFZJTVJVTlRJTUUvbWVudS52aW0gZm9yIGhvdyBpdCB3b3JrcyBieSBkZWZhdWx0LgorCitVc2luZyB0aGlzIHNob3VsZCBhbHNvIHdvcms6ID4KKwk6dyA+PnBybgorCitWaW0gc3VwcG9ydHMgYSBudW1iZXIgb2Ygc3RhbmRhcmQgTVMgV2luZG93cyBmZWF0dXJlcy4gU29tZSBvZiB0aGVzZSBhcmUKK2RldGFpbGVkIGVsc2V3aGVyZTogc2VlIHwnbW91c2UnfCwgfHdpbjMyLWhpZGRlbi1tZW51c3wuCitBbHNvIHNlZSB8OnNpbWFsdHwKKworCQkJCQkJCSp3aW4xNi1kcmFnLW4tZHJvcCoKK1lvdSBjYW4gZHJhZyBhbmQgZHJvcCBvbmUgb3IgbW9yZSBmaWxlcyBpbnRvIHRoZSB2aW0gd2luZG93LCB3aGVyZSB0aGV5IHdpbGwKK2JlIG9wZW5lZCBhcyBub3JtYWwuICBJZiB5b3UgaG9sZCBkb3duIFNoaWZ0IHdoaWxlIGRvaW5nIHRoaXMsIFZpbSBjaGFuZ2VzIHRvCit0aGUgKGZpcnN0KSBkcm9wcGVkIGZpbGUncyBkaXJlY3RvcnkuICBJZiB5b3UgaG9sZCBDdHJsLCBWaW0gd2lsbCBhbHdheXMgc3BsaXQKK2EgbmV3IHdpbmRvdyBmb3IgdGhlIGZpbGUuICBPdGhlcndpc2UgaXQncyBvbmx5IGRvbmUgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGhhcworYmVlbiBjaGFuZ2VkLgorWW91IGNhbiBhbHNvIGRyb3AgYSBkaXJlY3RvcnkncyBpY29uLCBidXQgcmF0aGVyIHRoYW4gb3BlbiBhbGwgZmlsZXMgaW4gdGhlCitkaXJlY3RvcnkgKHdoaWNoIHdvdWxkbid0IHVzdWFsbHkgYmUgd2hhdCB5b3Ugd2FudCkgVmltIGluc3RlYWQgY2hhbmdlcyB0bwordGhhdCBkaXJlY3RvcnkgYW5kIGJlZ2lucyBhIG5ldyBmaWxlLgorSWYgVmltIGhhcHBlbnMgdG8gYmUgZWRpdGluZyBhIGNvbW1hbmQgbGluZSwgdGhlIG5hbWVzIG9mIHRoZSBkcm9wcGVkIGZpbGVzCithbmQgZGlyZWN0b3JpZXMgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgY3Vyc29yLiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGVzZQorbmFtZXMgd2l0aCBhbnkgRXggY29tbWFuZC4KKworCQkJCQkJCSp3aW4xNi10cnVldHlwZSoKK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIHJhc3RlciBmb250IGFuZCBub3QgYSBUcnVlVHlwZQorZml4ZWQtcGl0Y2ggZm9udC4gZS5nLiBVc2UgQ291cmllciwgbm90IENvdXJpZXIgTmV3LiBUaGlzIGlzIG5vdCBqdXN0Cit0byB1c2UgbGVzcyByZXNvdXJjZXMgYnV0IGJlY2F1c2UgdGhlcmUgYXJlIHN1YnRsZSBidWdzIGluIHRoZQoraGFuZGxpbmcgb2YgZml4ZWQtcGl0Y2ggVHJ1ZVR5cGUgaW4gV2luMy4xeC4gSW4gcGFydGljdWxhciwgd2hlbiB5b3UgbW92ZQorYSBibG9jayBjdXJzb3Igb3ZlciBhIHBpcGUgY2hhcmFjdGVyICd8JywgdGhlIGN1cnNvciBpcyBkcmF3biBpbiB0aGUgd3JvbmcKK3NpemUgYW5kIGJpdHMgZ2V0IGxlZnQgYmVoaW5kLiBUaGlzIGlzIGEgYnVnIGluIHRoZSBXaW4zLjF4IEdESSwgaXQgZG9lc24ndAoraGFwcGVuIGlmIHlvdSBydW4gdGhlIGV4ZSB1bmRlciA5NS9OVC4KKworIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvZ3VpX3czMi50eHQgYi9ydW50aW1lL2RvYy9ndWlfdzMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRhYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvZ3VpX3czMi50eHQKQEAgLTAsMCArMSw0NzIgQEAKKypndWlfdzMyLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitWaW0ncyBXaW4zMiBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UJCQkqZ3VpLXczMiogKndpbjMyLWd1aSoKKworMS4gU3RhcnRpbmcgdGhlIEdVSQkJfGd1aS13MzItc3RhcnR8CisyLiBWaW0gYXMgZGVmYXVsdCBlZGl0b3IJfHZpbS1kZWZhdWx0LWVkaXRvcnwKKzMuIFVzaW5nIHRoZSBjbGlwYm9hcmQJCXxndWktY2xpcGJvYXJkfAorNC4gU2hlbGwgQ29tbWFuZHMJCXxndWktc2hlbGwtd2luMzJ8Cis1LiBTcGVjaWFsIGNvbG9ycwkJfHdpbjMyLWNvbG9yc3wKKzYuIFdpbmRvd3MgZGlhbG9ncyAmIGJyb3dzZXJzCXxndWktdzMyLWRpYWxvZ3N8Cis3LiBDb21tYW5kIGxpbmUgYXJndW1lbnRzCXxndWktdzMyLWNtZGFyZ3N8Cis4LiBWYXJpb3VzCQkJfGd1aS13MzItdmFyaW91c3wKKworT3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbjoKK3xndWkudHh0fAlGb3IgZ2VuZXJpYyBpdGVtcyBvZiB0aGUgR1VJLgorfG9zX3dpbjMyLnR4dHwgIEZvciBXaW4zMiBzcGVjaWZpYyBpdGVtcy4KKwore1ZpIGRvZXMgbm90IGhhdmUgYSBXaW5kb3dzIEdVSX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTdGFydGluZyB0aGUgR1VJCQkJCQkqZ3VpLXczMi1zdGFydCoKKworVGhlIFdpbjMyIEdVSSB2ZXJzaW9uIG9mIFZpbSB3aWxsIGFsd2F5cyBzdGFydCB0aGUgR1VJLCBubyBtYXR0ZXIgaG93IHlvdQorc3RhcnQgaXQgb3Igd2hhdCBpdCdzIGNhbGxlZC4KKworVGhlIEdVSSB3aWxsIGFsd2F5cyBydW4gaW4gdGhlIFdpbmRvd3Mgc3Vic3lzdGVtLiAgTW9zdGx5IHNoZWxscyBhdXRvbWF0aWNhbGx5CityZXR1cm4gd2l0aCBhIGNvbW1hbmQgcHJvbXB0IGFmdGVyIHN0YXJ0aW5nIGd2aW0uICBJZiBub3QsIHlvdSBzaG91bGQgdXNlIHRoZQorInN0YXJ0IiBjb21tYW5kOiA+CisJc3RhcnQgZ3ZpbSBbb3B0aW9uc10gZmlsZSAuLgorCitOb3RlOiBBbGwgZm9udHMgKGJvbGQsIGl0YWxpYykgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplISEhICBJZiB5b3UgZG9uJ3QgZG8KK3RoaXMsIHRleHQgd2lsbCBkaXNhcHBlYXIgb3IgbWVzcyB1cCB0aGUgZGlzcGxheS4gIFZpbSBkb2VzIG5vdCBjaGVjayB0aGUgZm9udAorc2l6ZXMuICBJdCdzIHRoZSBzaXplIGluIHNjcmVlbiBwaXhlbHMgdGhhdCBtdXN0IGJlIHRoZSBzYW1lLiAgTm90ZSB0aGF0IHNvbWUKK2ZvbnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBwb2ludCBzaXplIGRvbid0IGhhdmUgdGhlIHNhbWUgcGl4ZWwgc2l6ZSEKK0FkZGl0aW9uYWxseSwgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBmb250cyBtdXN0IGJlIHRoZSBzYW1lIChhc2NlbnQgYW5kCitkZXNjZW50KS4KKworVGhlIFdpbjMyIEdVSSBoYXMgYW4gZXh0cmEgbWVudSBpdGVtOiAgIkVkaXQvU2VsZWN0IEZvbnQiLiAgSXQgYnJpbmdzIHVwIHRoZQorc3RhbmRhcmQgV2luZG93cyBmb250IHNlbGVjdG9yLgorCitTZXR0aW5nIHRoZSBtZW51IGhlaWdodCBkb2Vzbid0IHdvcmsgZm9yIHRoZSBXaW4zMiBHVUkuCisKKwkJCQkJCQkqZ3VpLXdpbjMyLW1heGltaXplZCoKK0lmIHlvdSB3YW50IFZpbSB0byBzdGFydCB3aXRoIGEgbWF4aW1pemVkIHdpbmRvdywgYWRkIHRoaXMgY29tbWFuZCB0byB5b3VyCit2aW1yYyBvciBndmltcmMgZmlsZTogPgorCWF1IEdVSUVudGVyICogc2ltYWx0IH54Cis8CisJCQkJCQkJCSpndWktdzMycyoKK1RoZXJlIGlzIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBndmltLmV4ZSB0aGF0IHJ1bnMgdW5kZXIgdGhlIFdpbjMycyBzdWJzeXN0ZW0KK29mIFdpbmRvd3MgMy4xIG9yIDMuMTEuICBTZWUgfHdpbjMyc3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVmltIGFzIGRlZmF1bHQgZWRpdG9yCQkJCSp2aW0tZGVmYXVsdC1lZGl0b3IqCisKK1RvIHNldCBWaW0gYXMgdGhlIGRlZmF1bHQgZWRpdG9yIGZvciBhIGZpbGUgdHlwZToKKzEuIFN0YXJ0IGEgV2luZG93cyBFeHBsb3JlcgorMi4gQ2hvc2UgVmlldy9PcHRpb25zIC0+IEZpbGUgVHlwZXMKKzMuIFNlbGVjdCB0aGUgcGF0aCB0byBndmltIGZvciBldmVyeSBmaWxlIHR5cGUgdGhhdCB5b3Ugd2FudCB0byB1c2UgaXQgZm9yLgorICAgKHlvdSBjYW4gYWxzbyB1c2UgdGhyZWUgc3BhY2VzIGluIHRoZSBmaWxlIHR5cGUgZmllbGQsIGZvciBmaWxlcyB3aXRob3V0IGFuCisgICBleHRlbnNpb24pLgorICAgSW4gdGhlICJvcGVuIiBhY3Rpb24sIHVzZTogPgorCWd2aW0gIiUxIgorPCAgVGhlIHF1b3RlcyBhcmUgcmVxdWlyZWQgZm9yIHVzaW5nIGZpbGUgbmFtZXMgd2l0aCBlbWJlZGRlZCBzcGFjZXMuCisgICBZb3UgY2FuIGFsc28gdXNlIHRoaXM6ID4KKwlndmltICIlTCIKKzwgIFRoaXMgc2hvdWxkIGF2b2lkIHNob3J0ICg4LjMgY2hhcmFjdGVyKSBmaWxlIG5hbWVzIGluIHNvbWUgc2l0dWF0aW9ucy4gIEJ1dAorICAgSSdtIG5vdCBzdXJlIGlmIHRoaXMgd29ya3MgZXZlcnl3aGVyZS4KKworV2hlbiB5b3Ugb3BlbiBhIGZpbGUgaW4gVmltIGJ5IGRvdWJsZSBjbGlja2luZyBpdCwgVmltIGNoYW5nZXMgdG8gdGhhdAorZmlsZSdzIGRpcmVjdG9yeS4KKworSWYgeW91IHdhbnQgVmltIHRvIHN0YXJ0IGZ1bGwtc2NyZWVuLCB1c2UgdGhpcyBmb3IgdGhlIE9wZW4gYWN0aW9uOiA+CisJZ3ZpbSAtYyAic2ltYWx0IH54IiAiJTEiCisKK0Fub3RoZXIgbWV0aG9kLCB3aGljaCBhbHNvIHdvcmtzIHdoZW4geW91IHB1dCBWaW0gaW4gYW5vdGhlciBkaXJlY3RvcnkgKGUuZy4sCit3aGVuIHlvdSBoYXZlIGdvdCBhIG5ldyB2ZXJzaW9uKToKKzEuIHNlbGVjdCBhIGZpbGUgeW91IHdhbnQgdG8gdXNlIFZpbSB3aXRoCisyLiA8U2hpZnQtRjEwPgorMy4gc2VsZWN0ICJPcGVuIFdpdGguLi4iIG1lbnUgZW50cnkKKzQuIGNsaWNrICJPdGhlci4uLiIKKzUuIGJyb3dzZSB0byB0aGUgKG5ldykgbG9jYXRpb24gb2YgVmltIGFuZCBjbGljayAiT3BlbiIKKzYuIG1ha2UgIkFsd2F5cyBVc2UgdGhpcyBwcm9ncmFtLi4uIiBjaGVja2VkCis3LiA8T0s+CisKKwkJCQkJCSpzZW5kLXRvLW1lbnUqICpzZW5kdG8qCitZb3UgY2FuIGFsc28gaW5zdGFsbCBWaW0gaW4gdGhlICJTZW5kIFRvIiBtZW51OgorMS4gU3RhcnQgYSBXaW5kb3dzIEV4cGxvcmVyCisyLiBOYXZpZ2F0ZSB0byB5b3VyIHNlbmR0byBkaXJlY3Rvcnk6CisgICBXaW5kb3dzIDk1OiAld2luZGlyJVxzZW5kdG8gKGUuZy4gImM6XHdpbmRvd3Ncc2VuZHRvIikKKyAgIFdpbmRvd3MgTlQ6ICV3aW5kaXIlXHByb2ZpbGVzXCV1c2VyJVxzZW5kdG8gKGUuZy4KKwkgICAgICAgImM6XHdpbm50XHByb2ZpbGVzXG1hdHRoYVxzZW5kdG8iKS4KKzMuIFJpZ2h0LWNsaWNrIGluIHRoZSBmaWxlIHBhbmUgYW5kIHNlbGVjdCBOZXctPlNob3J0Y3V0Cis0LiBGb2xsb3cgdGhlIHNob3J0Y3V0IHdpemFyZCwgdXNpbmcgdGhlIGZ1bGwgcGF0aCB0byBWSU0vR1ZJTS4KKworV2hlbiB5b3UgJ3NlbmQgYSBmaWxlIHRvIFZpbScsIFZpbSBjaGFuZ2VzIHRvIHRoYXQgZmlsZSdzIGRpcmVjdG9yeS4gIE5vdGUsCitob3dldmVyLCB0aGF0IGFueSBsb25nIGRpcmVjdG9yeSBuYW1lcyB3aWxsIGFwcGVhciBpbiB0aGVpciBzaG9ydCAoTVMtRE9TKQorZm9ybS4gIFRoaXMgaXMgYSBsaW1pdGF0aW9uIG9mIHRoZSBXaW5kb3dzICJTZW5kIFRvIiBtZWNoYW5pc20uCisKKwkJCQkJCSpub3RlcGFkKgorWW91IGNvdWxkIHJlcGxhY2Ugbm90ZXBhZC5leGUgd2l0aCBndmltLmV4ZSwgYnV0IHRoYXQgaGFzIGEgZmV3IHNpZGUgZWZmZWN0cy4KK1NvbWUgcHJvZ3JhbXMgcmVseSBvbiBub3RlcGFkIGFyZ3VtZW50cywgd2hpY2ggYXJlIG5vdCByZWNvZ25pemVkIGJ5IFZpbS4gIEZvcgorZXhhbXBsZSAibm90ZXBhZCAtcCIgaXMgdXNlZCBieSBzb21lIGFwcGxpY2F0aW9ucyB0byBwcmludCBhIGZpbGUuICBJdCdzCitiZXR0ZXIgdG8gbGVhdmUgbm90ZXBhZCB3aGVyZSBpdCBpcyBhbmQgdXNlIGFub3RoZXIgd2F5IHRvIHN0YXJ0IFZpbS4KKworCQkJCQkJKndpbjMyLXBvcHVwLW1lbnUqCitBIG1vcmUgZHJhc3RpYyBhcHByb2FjaCBpcyB0byBpbnN0YWxsIGFuICJFZGl0IHdpdGggVmltIiBlbnRyeSBpbiB0aGUgcG9wdXAKK21lbnUgZm9yIHRoZSByaWdodCBtb3VzZSBidXR0b24uICBXaXRoIHRoaXMgeW91IGNhbiBlZGl0IGFueSBmaWxlIHdpdGggVmltLgorCitUaGlzIGNhbiBjby1leGlzdCB3aXRoIHRoZSBmaWxlIGFzc29jaWF0aW9ucyBtZW50aW9uZWQgYWJvdmUuICBUaGUgZGlmZmVyZW5jZQoraXMgdGhhdCB0aGUgZmlsZSBhc3NvY2lhdGlvbnMgd2lsbCBtYWtlIHN0YXJ0aW5nIFZpbSB0aGUgZGVmYXVsdCBhY3Rpb24uICBXaXRoCit0aGUgIkVkaXQgd2l0aCBWaW0iIG1lbnUgZW50cnkgeW91IGNhbiBrZWVwIHRoZSBleGlzdGluZyBmaWxlIGFzc29jaWF0aW9uIGZvcgorZG91YmxlIGNsaWNraW5nIG9uIHRoZSBmaWxlLCBhbmQgZWRpdCB0aGUgZmlsZSB3aXRoIFZpbSB3aGVuIHlvdSB3YW50LiAgRm9yCitleGFtcGxlLCB5b3UgY2FuIGFzc29jaWF0ZSAiKi5tYWsiIHdpdGggeW91ciBtYWtlIHByb2dyYW0uICBZb3UgY2FuIGV4ZWN1dGUKK3RoZSBtYWtlZmlsZSBieSBkb3VibGUgY2xpY2tpbmcgaXQgYW5kIHVzZSB0aGUgIkVkaXQgd2l0aCBWaW0iIGVudHJ5IHRvIGVkaXQKK3RoZSBtYWtlZmlsZS4KKworWW91IGNhbiBzZWxlY3QgYW55IGZpbGVzIGFuZCByaWdodC1jbGljayB0byBzZWUgYSBtZW51IG9wdGlvbiBjYWxsZWQgIkVkaXQKK3dpdGggZ3ZpbSIuICBDaG9zaW5nIHRoaXMgbWVudSBvcHRpb24gd2lsbCBpbnZva2UgZ3ZpbSB3aXRoIHRoZSBmaWxlIHlvdSBoYXZlCitzZWxlY3RlZC4gIElmIHlvdSBzZWxlY3QgbXVsdGlwbGUgZmlsZXMsIHlvdSB3aWxsIGZpbmQgdHdvIGd2aW0tcmVsYXRlZCBtZW51CitvcHRpb25zOgorIkVkaXQgd2l0aCBtdWx0aXBsZSBndmltcyIgIC0tIG9uZSBndmltIGZvciBlYWNoIGZpbGUgaW4gdGhlIHNlbGVjdGlvbgorIkVkaXQgd2l0aCBzaW5nbGUgZ3ZpbSIgICAgIC0tIG9uZSBndmltIGZvciBhbGwgdGhlIGZpbGVzIGluIHRoZSBzZWxlY3Rpb24KK0FuZCBpZiB0aGVyZSBhbHJlYWR5IGlzIGEgZ3ZpbSBydW5uaW5nOgorIkVkaXQgd2l0aCBleGlzdGluZyBndmltIiAgIC0tIGVkaXQgdGhlIGZpbGUgd2l0aCB0aGUgcnVubmluZyBndmltCisKKwkJCQkJCSppbnN0YWxsLXJlZ2lzdHJ5KgorWW91IGNhbiBhZGQgdGhlICJFZGl0IHdpdGggVmltIiBtZW51IGVudHJ5IGluIGFuIGVhc3kgd2F5IGJ5IHVzaW5nIHRoZQorImluc3RhbGwuZXhlIiBwcm9ncmFtLiAgSXQgd2lsbCBhZGQgc2V2ZXJhbCByZWdpc3RyeSBlbnRyaWVzIGZvciB5b3UuCisKK1lvdSBjYW4gYWxzbyBkbyB0aGlzIGJ5IGhhbmQuICBUaGlzIGlzIGNvbXBsaWNhdGVkISAgVXNlIHRoZSBpbnN0YWxsLmV4ZSBpZgoreW91IGNhbi4KKworMS4gU3RhcnQgdGhlIHJlZ2lzdHJ5IGVkaXRvciB3aXRoICJyZWdlZGl0Ii4KKzIuIEFkZCB0aGVzZSBrZXlzOgorICAga2V5CQl2YWx1ZSBuYW1lCQkgICAgdmFsdWUgfgorICAgSEtFWV9DTEFTU0VTX1JPT1RcQ0xTSURcezUxRUVFMjQyLUFEODctMTFkMy05QzFFLTAwOTAyNzhCQkQ5OX0KKwkJe2RlZmF1bHR9CQkgICAgVmltIFNoZWxsIEV4dGVuc2lvbgorICAgSEtFWV9DTEFTU0VTX1JPT1RcQ0xTSURcezUxRUVFMjQyLUFEODctMTFkMy05QzFFLTAwOTAyNzhCQkQ5OX1cSW5Qcm9jU2VydmVyMzIKKwkJe2RlZmF1bHR9CQkgICAge3BhdGh9XGd2aW1leHQuZGxsCisJCVRocmVhZGluZ01vZGVsCQkgICAgQXBhcnRtZW50CisgICBIS0VZX0NMQVNTRVNfUk9PVFwqXHNoZWxsZXhcQ29udGV4dE1lbnVIYW5kbGVyc1xndmltCisJCXtkZWZhdWx0fQkJICAgIHs1MUVFRTI0Mi1BRDg3LTExZDMtOUMxRS0wMDkwMjc4QkJEOTl9CisgICBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cU2hlbGwgRXh0ZW5zaW9uc1xBcHByb3ZlZAorCQl7NTFFRUUyNDItQUQ4Ny0xMWQzLTlDMUUtMDA5MDI3OEJCRDk5fQorCQkJCQkgICAgVmltIFNoZWxsIEV4dGVuc2lvbgorICAgSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXFZpbVxHdmltCisJCXBhdGgJCQkgICAge3BhdGh9XGd2aW0uZXhlCisgICBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXHZpbSA1LjYKKwkJRGlzcGxheU5hbWUJCSAgICBWaW0gNS42OiBFZGl0IHdpdGggVmltIHBvcHVwIG1lbnUgZW50cnkKKwkJVW5pbnN0YWxsU3RyaW5nCQkgICAge3BhdGh9XHVuaW5zdGFsLmV4ZQorCisgICBSZXBsYWNlIHtwYXRofSB3aXRoIHRoZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhlIGV4ZWN1dGFibGUuCisgICBEb24ndCB0eXBlIHtkZWZhdWx0fSwgdGhpcyBpcyB0aGUgdmFsdWUgZm9yIHRoZSBrZXkgaXRzZWxmLgorCitUbyByZW1vdmUgIkVkaXQgd2l0aCBWaW0iIGZyb20gdGhlIHBvcHVwIG1lbnUsIGp1c3QgcmVtb3ZlIHRoZSByZWdpc3RyeQorZW50cmllcyBtZW50aW9uZWQgYWJvdmUuICBUaGUgInVuaW5zdGFsLmV4ZSIgcHJvZ3JhbSBjYW4gZG8gdGhpcyBmb3IgeW91LiAgWW91CitjYW4gYWxzbyB1c2UgdGhlIGVudHJ5IGluIHRoZSBXaW5kb3dzIHN0YW5kYXJkICJBZGQvUmVtb3ZlIFByb2dyYW1zIiBsaXN0LgorCitJZiB5b3Ugbm90aWNlIHRoYXQgdGhpcyBlbnRyeSBvdmVycnVsZXMgb3RoZXIgZmlsZSB0eXBlIGFzc29jaWF0aW9ucywgc2V0Cit0aG9zZSBhc3NvY2lhdGlvbnMgYWdhaW4gYnkgaGFuZCAodXNpbmcgV2luZG93cyBFeHBsb3Jlciwgc2VlIGFib3ZlKS4gIFRoaXMKK29ubHkgc2VlbXMgdG8gaGFwcGVuIG9uIHNvbWUgV2luZG93cyBOVCB2ZXJzaW9ucyAoV2luZG93cyBidWc/KS4gIFByb2NlZHVyZToKKzEuIEZpbmQgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdHlwZS4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgc3RhcnRpbmcgdGhlIHJlZ2lzdHJ5CisgICBlZGl0b3IsIGFuZCBzZWFyY2hpbmcgZm9yIHRoZSBleHRlbnNpb24gaW4gXFxIS0VZX0NMQVNTRVNfUk9PVAorMi4gSW4gYSBXaW5kb3dzIEV4cGxvcmVyLCB1c2UgVmlldy9PcHRpb25zL0ZpbGUgVHlwZXMuICBTZWFyY2ggZm9yIHRoZSBmaWxlCisgICB0eXBlIGluIHRoZSBsaXN0IGFuZCBjbGljayAiRWRpdCIuICBJbiB0aGUgYWN0aW9ucyBsaXN0LCB5b3UgY2FuIHNlbGVjdCBvbgorICAgdG8gYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCAobm9ybWFsbHkgdGhlICJvcGVuIiBhY3Rpb24pIGFuZCBjbGljayBvbiB0aGUKKyAgICJTZXQgRGVmYXVsdCIgYnV0dG9uLgorCisKK1ZpbSBpbiB0aGUgIk9wZW4gV2l0aC4uLiIgY29udGV4dCBtZW51CQkJKndpbjMyLW9wZW4td2l0aC1tZW51KgorCitJZiB5b3UgdXNlIHRoZSBWaW0gaW5zdGFsbCBwcm9ncmFtIHlvdSBoYXZlIHRoZSBjaG9pY2UgdG8gYWRkIFZpbSB0byB0aGUgIk9wZW4KK1dpdGguLi4iIG1lbnUuICBUaGlzIG1lYW5zIHlvdSBjYW4gdXNlIFZpbSB0byBlZGl0IG1hbnkgZmlsZXMuICBOb3QgZXZlcnkgZmlsZQorKGZvciB1bmNsZWFyIHJlYXNvbnMuLi4pLCB0aHVzIHRoZSAiRWRpdCB3aXRoIFZpbSIgbWVudSBlbnRyeSBpcyBzdGlsbCB1c2VmdWwuCisKK09uZSByZWFzb24gdG8gYWRkIHRoaXMgaXMgdG8gYmUgYWJsZSB0byBlZGl0IEhUTUwgZmlsZXMgZGlyZWN0bHkgZnJvbSBJbnRlcm5ldAorRXhwbG9yZXIuICBUbyBlbmFibGUgdGhpcyB1c2UgdGhlICJUb29scyIgbWVudSwgIkludGVybmV0IE9wdGlvbnMuLi4iIGVudHJ5LgorSW4gdGhlIGRpYWxvZyBzZWxlY3QgdGhlICJQcm9ncmFtcyIgdGFiIGFuZCBzZWxlY3QgVmltIGluIHRoZSAiSFRNTCBlZGl0b3IiCitjaG9pY2UuICBJZiBpdCdzIG5vdCB0aGVyZSB0aGFuIGluc3RhbGxpbmcgZGlkbid0IHdvcmsgcHJvcGVybHkuCisKK0RvaW5nIHRoaXMgbWFudWFsbHkgY2FuIGJlIGRvbmUgd2l0aCB0aGlzIHNjcmlwdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVHRURJVDQKKworW0hLRVlfQ0xBU1NFU19ST09UXEFwcGxpY2F0aW9uc1xndmltLmV4ZV0KKworW0hLRVlfQ0xBU1NFU19ST09UXEFwcGxpY2F0aW9uc1xndmltLmV4ZVxzaGVsbF0KKworW0hLRVlfQ0xBU1NFU19ST09UXEFwcGxpY2F0aW9uc1xndmltLmV4ZVxzaGVsbFxlZGl0XQorCitbSEtFWV9DTEFTU0VTX1JPT1RcQXBwbGljYXRpb25zXGd2aW0uZXhlXHNoZWxsXGVkaXRcY29tbWFuZF0KK0A9ImM6XFx2aW1cXHZpbTYyXFxndmltLmV4ZSBcIiUxXCIiCisKK1tIS0VZX0NMQVNTRVNfUk9PVFwuaHRtXE9wZW5XaXRoTGlzdFxndmltLmV4ZV0KKworW0hLRVlfQ0xBU1NFU19ST09UXCpcT3BlbldpdGhMaXN0XGd2aW0uZXhlXQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZSB0aGUgImM6XFx2aW1cXHZpbTYyIiBiaXQgdG8gd2hlcmUgZ3ZpbS5leGUgaXMgYWN0dWFsbHkgbG9jYXRlZC4KKworVG8gdW5pbnN0YWxsIHRoaXMgcnVuIHRoZSBWaW0gdW5pbnN0YWxsIHByb2dyYW0gb3IgbWFudWFsbHkgZGVsZXRlIHRoZQorcmVnaXN0cnkgZW50cmllcyB3aXRoICJyZWdlZGl0Ii4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBVc2luZyB0aGUgY2xpcGJvYXJkCQkJCQkqZ3VpLWNsaXBib2FyZCoKKworV2luZG93cyBoYXMgYSBjbGlwYm9hcmQsIHdoZXJlIHlvdSBjYW4gY29weSB0ZXh0IHRvLCBhbmQgcGFzdGUgdGV4dCBmcm9tLiAgVmltCitzdXBwb3J0cyB0aGlzIGluIHNldmVyYWwgd2F5cy4gIEZvciBvdGhlciBzeXN0ZW1zIHNlZSB8Z3VpLXNlbGVjdGlvbnN8LgorCitUaGUgIiogcmVnaXN0ZXIgcmVmbGVjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjbGlwYm9hcmQuICB8cXVvdGVzdGFyfAorCitXaGVuIHRoZSAidW5uYW1lZCIgc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoZSAnY2xpcGJvYXJkJyBvcHRpb24sIHRoZSB1bm5hbWVkCityZWdpc3RlciBpcyB0aGUgc2FtZS4gIFRodXMgeW91IGNhbiB5YW5rIHRvIGFuZCBwYXN0ZSBmcm9tIHRoZSBjbGlwYm9hcmQKK3dpdGhvdXQgcHJlcGVuZGluZyAiKiB0byBjb21tYW5kcy4KKworVGhlICdhJyBmbGFnIGluICdndWlvcHRpb25zJyBpcyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4gIFRoaXMgbWVhbnMgdGhhdCB0ZXh0CitpcyBvbmx5IHB1dCBvbiB0aGUgY2xpcGJvYXJkIHdoZW4gYW4gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiBpdC4gIEp1c3QKK1Zpc3VhbGx5IHNlbGVjdGluZyB0ZXh0IGRvZXNuJ3QgcHV0IGl0IG9uIHRoZSBjbGlwYm9hcmQuICBXaGVuIHRoZSAnYScgZmxhZyBpcworaW5jbHVkZWQsIHRoZSB0ZXh0IGlzIGNvcGllZCB0byB0aGUgY2xpcGJvYXJkIGV2ZW4gd2hlbiBpdCBpcyBub3Qgb3BlcmF0ZWQKK3Vwb24uCisKKwkJCQkJCQkqbXN3aW4udmltKgorVG8gdXNlIHRoZSBzdGFuZGFyZCBNUy1XaW5kb3dzIHdheSBvZiBDVFJMLVgsIENUUkwtQyBhbmQgQ1RSTC1WLCB1c2UgdGhlCiskVklNUlVOVElNRS9tc3dpbi52aW0gc2NyaXB0LiAgWW91IGNvdWxkIGFkZCB0aGlzIGxpbmUgdG8geW91ciBfdmltcmMgZmlsZTogPgorCXNvdXJjZSAkVklNUlVOVElNRS9tc3dpbi52aW0KKworU2luY2UgQ1RSTC1DIGlzIHVzZWQgdG8gY29weSB0aGUgdGV4dCB0byB0aGUgY2xpcGJvYXJkLCBpdCBjYW4ndCBiZSB1c2VkIHRvCitjYW5jZWwgYW4gb3BlcmF0aW9uLiAgVXNlIENUUkwtQnJlYWsgZm9yIHRoYXQuCisKKwkJCQkJCQkqQ1RSTC1WLWFsdGVybmF0aXZlKgorU2luY2UgQ1RSTC1WIGlzIHVzZWQgdG8gcGFzdGUsIHlvdSBjYW4ndCB1c2UgaXQgdG8gc3RhcnQgYSBibG9ja3dpc2UgVmlzdWFsCitzZWxlY3Rpb24uICBZb3UgY2FuIHVzZSBDVFJMLVEgaW5zdGVhZC4gIFlvdSBjYW4gYWxzbyB1c2UgQ1RSTC1RIGluIEluc2VydAorbW9kZSBhbmQgQ29tbWFuZC1saW5lIG1vZGUgdG8gZ2V0IHRoZSBvbGQgbWVhbmluZyBvZiBDVFJMLVYuICBCdXQgQ1RSTC1RCitkb2Vzbid0IHdvcmsgZm9yIHRlcm1pbmFscyB3aGVuIGl0J3MgdXNlZCBmb3IgY29udHJvbCBmbG93LgorCitOT1RFOiBUaGUgY2xpcGJvYXJkIHN1cHBvcnQgc3RpbGwgaGFzIGEgbnVtYmVyIG9mIGJ1Z3MuICBTZWUgfHRvZG98LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFNoZWxsIENvbW1hbmRzCQkJCQkqZ3VpLXNoZWxsLXdpbjMyKgorCitWaW0gdXNlcyBhbm90aGVyIHdpbmRvdyBmb3IgZXh0ZXJuYWwgY29tbWFuZHMsIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gcnVuIGFueQorY29tbWFuZC4gIFRoZSBleHRlcm5hbCBjb21tYW5kIGdldHMgaXRzIG93biBlbnZpcm9ubWVudCBmb3IgcnVubmluZywganVzdCBsaWtlCitpdCB3YXMgc3RhcnRlZCBmcm9tIGEgRE9TIHByb21wdC4KKworCQkJCQkJCSp3aW4zMi12aW1ydW4qCitFeGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCBpcyBkb25lIGluZGlyZWN0bHkgYnkgdGhlICJ2aW1ydW4iIGNvbW1hbmQuICBUaGUKKyJ2aW1ydW4uZXhlIiBtdXN0IGJlIGluIHRoZSBwYXRoIGZvciB0aGlzIHRvIHdvcmsuICBPciBpdCBtdXN0IGJlIGluIHRoZSBzYW1lCitkaXJlY3RvcnkgYXMgdGhlIFZpbSBleGVjdXRhYmxlLiAgSWYgInZpbXJ1biIgY2Fubm90IGJlIGZvdW5kLCB0aGUgY29tbWFuZCBpcworZXhlY3V0ZWQgZGlyZWN0bHksIGJ1dCB0aGVuIHRoZSBET1Mgd2luZG93IGNsb3NlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUKK2V4dGVybmFsIGNvbW1hbmQgaGFzIGZpbmlzaGVkLgorV0FSTklORzogSWYgeW91IGNsb3NlIHRoaXMgd2luZG93IHdpdGggdGhlICJYIiBidXR0b24sIGFuZCBjb25maXJtIHRoZQorcXVlc3Rpb24gaWYgeW91IHJlYWxseSB3YW50IHRvIGtpbGwgdGhlIGFwcGxpY2F0aW9uLCBWaW0gbWF5IGJlIGtpbGxlZCB0b28hCisoVGhpcyBkb2VzIG5vdCBhcHBseSB0byBjb21tYW5kcyBydW4gYXN5bmNocm9ub3VzbHkgd2l0aCAiOiFzdGFydCIuKQorCitJbiBXaW5kb3dzIDk1LCB0aGUgd2luZG93IGluIHdoaWNoIHRoZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgaXMgYWx3YXlzIDI1eDgwCitjaGFyYWN0ZXJzLCB0byBiZSBhcyBET1MgY29tcGF0aWJsZSBhcyBwb3NzaWJsZSAodGhpcyBtYXR0ZXJzISkuICBUaGUgZGVmYXVsdAorc3lzdGVtIGZvbnQgaXMgdXNlZC4gT24gTlQsIHRoZSB3aW5kb3cgd2lsbCBiZSB0aGUgZGVmYXVsdCB5b3UgaGF2ZSBzZXQgdXAgZm9yCisiQ29uc29sZSIgaW4gQ29udHJvbCBQYW5lbC4gT24gV2luMzJzLCB0aGUgcHJvcGVydGllcyBvZiB0aGUgRE9TIGJveCBhcmUKK2RldGVybWluZWQgYnkgX2RlZmF1bHQucGlmIGluIHRoZSB3aW5kb3dzIGRpcmVjdG9yeS4KKworCQkJCQkJCSptc2Rvcy1tb2RlKgorSWYgeW91IGdldCBhIGRpYWxvZyB0aGF0IHNheXMgIlRoaXMgcHJvZ3JhbSBpcyBzZXQgdG8gcnVuIGluIE1TLURPUyBtb2RlLi4uIgord2hlbiB5b3UgcnVuIGFuIGV4dGVybmFsIHByb2dyYW0sIHlvdSBjYW4gc29sdmUgdGhpcyBieSBjaGFuZ2luZyB0aGUKK3Byb3BlcnRpZXMgb2YgdGhlIGFzc29jaWF0ZWQgc2hvcnRjdXQ6CistIFVzZSBhIFdpbmRvd3MgRXhwbG9yZXIgdG8gZmluZCB0aGUgY29tbWFuZC5jb20gdGhhdCBpcyB1c2VkLiAgSXQgY2FuIGJlCisgIGM6XGNvbW1hbmQuY29tLCBjOlxkb3NcY29tbWFuZC5jb20sIGM6XHdpbmRvd3NcY29tbWFuZC5jb20sIGV0Yy4KKy0gV2l0aCB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLCBzZWxlY3QgcHJvcGVydGllcyBvZiB0aGlzIGNvbW1hbmQuY29tLgorLSBJbiB0aGUgUHJvZ3JhbSB0YWIgc2VsZWN0ICJBZHZhbmNlZCIuCistIFVuc2VsZWN0ICJNUy1ET1MgbW9kZSIuCistIENsaWNrICJPSyIgdHdpY2UuCisKKwkJCQkJCQkqd2luMzItIXN0YXJ0KgorTm9ybWFsbHksIFZpbSB3YWl0cyBmb3IgYSBjb21tYW5kIHRvIGNvbXBsZXRlIGJlZm9yZSBjb250aW51aW5nICh0aGlzIG1ha2VzCitzZW5zZSBmb3IgbW9zdCBzaGVsbCBjb21tYW5kcyB3aGljaCBwcm9kdWNlIG91dHB1dCBmb3IgVmltIHRvIHVzZSkuICBJZiB5b3UKK3dhbnQgVmltIHRvIHN0YXJ0IGEgcHJvZ3JhbSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nCitzeW50YXggb24gVzk1ICYgTlQ6ID4KKwk6IXN0YXJ0IHtjb21tYW5kfQorT24gV2luMzJzLCB5b3Ugd2lsbCBoYXZlIHRvIGdvIHRvIGFub3RoZXIgd2luZG93IGluc3RlYWQuIERvbid0IGZvcmdldCB0aGF0Cit5b3UgbXVzdCB0ZWxsIFdpbmRvd3MgMy4xeCB0byBrZWVwIGV4ZWN1dGluZyBhIERPUyBjb21tYW5kIGluIHRoZSBiYWNrZ3JvdW5kCit3aGlsZSB5b3Ugc3dpdGNoIGJhY2sgdG8gVmltLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFNwZWNpYWwgY29sb3JzCQkJCQkqd2luMzItY29sb3JzKgorCitPbiBXaW4zMiwgdGhlIG5vcm1hbCBET1MgY29sb3JzIGNhbiBiZSB1c2VkLiAgU2VlIHxkb3MtY29sb3JzfC4KKworQWRkaXRpb25hbGx5IHRoZSBzeXN0ZW0gY29uZmlndXJlZCBjb2xvcnMgY2FuIGFsc28gYmUgdXNlZC4gIFRoZXNlIGFyZSBrbm93bgorYnkgdGhlIG5hbWVzIFN5c19YWFgsIHdoZXJlIFhYWCBpcyB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGNvbG9yIG5hbWUsIGZyb20gdGhlCitmb2xsb3dpbmcgbGlzdCAoc2VlIHRoZSBXaW4zMiBkb2N1bWVudGF0aW9uIGZvciBmdWxsIGRlc2NyaXB0aW9ucykuICBDYXNlIGlzCitpZ25vcmVkLiBub3RlOiBPbiBXaW4zMnMgbm90IGFsbCBvZiB0aGVzZSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KKworU3lzXzNEREtTaGFkb3cJCVN5c18zREZhY2UJCQlTeXNfQlRORmFjZQorU3lzXzNESGlsaWdodAkJU3lzXzNESGlnaGxpZ2h0CQkJU3lzX0JUTkhpbGlnaHQKK1N5c19CVE5IaWdobGlnaHQJU3lzXzNETGlnaHQJCQlTeXNfM0RTaGFkb3cKK1N5c19CVE5TaGFkb3cJCVN5c19BY3RpdmVCb3JkZXIJCVN5c19BY3RpdmVDYXB0aW9uCitTeXNfQXBwV29ya3NwYWNlCVN5c19CYWNrZ3JvdW5kCQkJU3lzX0Rlc2t0b3AKK1N5c19CVE5UZXh0CQlTeXNfQ2FwdGlvblRleHQJCQlTeXNfR3JheVRleHQKK1N5c19IaWdobGlnaHQJCVN5c19IaWdobGlnaHRUZXh0CQlTeXNfSW5hY3RpdmVCb3JkZXIKK1N5c19JbmFjdGl2ZUNhcHRpb24JU3lzX0luYWN0aXZlQ2FwdGlvblRleHQJCVN5c19JbmZvQksKK1N5c19JbmZvVGV4dAkJU3lzX01lbnUJCQlTeXNfTWVudVRleHQKK1N5c19TY3JvbGxCYXIJCVN5c19XaW5kb3cJCQlTeXNfV2luZG93RnJhbWUKK1N5c19XaW5kb3dUZXh0CisKK1Byb2JhYmx5IHRoZSBtb3N0IHVzZWZ1bCB2YWx1ZXMgYXJlCisJU3lzX1dpbmRvdwkgICAgTm9ybWFsIHdpbmRvdyBiYWNrZ3JvdW5kCisJU3lzX1dpbmRvd1RleHQgICAgICBOb3JtYWwgd2luZG93IHRleHQKKwlTeXNfSGlnaGxpZ2h0ICAgICAgIEhpZ2hsaWdodGVkIGJhY2tncm91bmQKKwlTeXNfSGlnaGxpZ2h0VGV4dCAgIEhpZ2hsaWdodGVkIHRleHQKKworVGhlc2UgZXh0cmEgY29sb3JzIGFyZSBhbHNvIGF2YWlsYWJsZToKK0dyYXksIEdyZXksIExpZ2h0WWVsbG93LCBTZWFHcmVlbiwgT3JhbmdlLCBQdXJwbGUsIFNsYXRlQmx1ZSwgVmlvbGV0LAorCisJCQkJCQkJCSpyZ2IudHh0KgorQWRkaXRpb25hbGx5LCBjb2xvcnMgZGVmaW5lZCBieSBhICJyZ2IudHh0IiBmaWxlIGNhbiBiZSB1c2VkLiAgVGhpcyBmaWxlIGlzCit3ZWxsIGtub3duIGZyb20gWDExLiAgQSBmZXcgbGluZXMgZnJvbSBpdDogPgorCisgIDI1NSAyMTggMTg1CQkgICBwZWFjaCBwdWZmCisgIDIwNSAxMzMgIDYzCQkgICBwZXJ1CisgIDI1NSAxODEgMTk3CQkgICBwaW5rCisKK1RoaXMgc2hvd3MgdGhlIGxheW91dCBvZiB0aGUgZmlsZTogIEZpcnN0IHRoZSBSLCBHIGFuZCBCIHZhbHVlIGFzIGEgZGVjaW1hbAorbnVtYmVyLCBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgY29sb3IuICBUaGUgZm91ciBmaWVsZHMgYXJlIHNlcGFyYXRlZCBieQorc3BhY2VzLgorCitZb3UgY2FuIGdldCBhbiByZ2IudHh0IGZpbGUgZnJvbSBhbnkgWDExIGRpc3RyaWJ1dGlvbi4gIEl0IGlzIGxvY2F0ZWQgaW4gYQorZGlyZWN0b3J5IGxpa2UgIi91c3IvWDExUjYvbGliL1gxMS8iLiAgRm9yIFZpbSBpdCBtdXN0IGJlIGxvY2F0ZWQgaW4gdGhlCiskVklNUlVOVElNRSBkaXJlY3RvcnkuICBUaHVzIHRoZSBmaWxlIGNhbiBiZSBmb3VuZCB3aXRoICIkVklNUlVOVElNRS9yZ2IudHh0Ii4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkqZ3VpLXczMi1kaWFsb2dzKiAqZGlhbG9nKgorNi4gV2luZG93cyBkaWFsb2dzICYgYnJvd3NlcnMKKworVGhlIFdpbjMyIEdVSSBjYW4gdXNlIGZhbWlsaWFyIFdpbmRvd3MgY29tcG9uZW50cyBmb3Igc29tZSBvcGVyYXRpb25zLCBhcyB3ZWxsCithcyB0aGUgdHJhZGl0aW9uYWwgaW50ZXJmYWNlIHNoYXJlZCB3aXRoIHRoZSBjb25zb2xlIHZlcnNpb24uCisKKworNi4xIERpYWxvZ3MKKworVGhlIGRpYWxvZ3MgZGlzcGxheWVkIGJ5IHRoZSAiY29uZmlybSIgZmFtaWx5IChpLmUuIHRoZSAnY29uZmlybScgb3B0aW9uLAorfDpjb25maXJtfCBjb21tYW5kIGFuZCB8Y29uZmlybSgpfCBmdW5jdGlvbikgYXJlIEdVSS1iYXNlZCByYXRoZXIgdGhhbiB0aGUKK2NvbnNvbGUtYmFzZWQgb25lcyB1c2VkIGJ5IG90aGVyIHZlcnNpb25zLiAgVGhlICdjJyBmbGFnIGluICdndWlvcHRpb25zJworY2hhbmdlcyB0aGlzLgorCisKKzYuMiBGaWxlIEJyb3dzZXJzCisKK1doZW4gcHJlcGVuZGluZyAiOmJyb3dzZSIgYmVmb3JlIGZpbGUgZWRpdGluZyBjb21tYW5kcywgYSBmaWxlIHJlcXVlc3RlciBpcwordXNlZCB0byBhbGxvdyB5b3UgdG8gc2VsZWN0IGFuIGV4aXN0aW5nIGZpbGUuICBTZWUgfDpicm93c2V8LgorCisKKzYuMyBUZWFyb2ZmIE1lbnVzCisKK1RoZSBXaW4zMiBHVUkgZW11bGF0ZXMgTW90aWYncyB0ZWFyLW9mZiBtZW51cy4gIEF0IHRoZSB0b3Agb2YgZWFjaCBtZW51IHlvdQord2lsbCBzZWUgYSBzbWFsbCBncmFwaGljICJyaXAgaGVyZSIgc2lnbi4gIFNlbGVjdGluZyBpdCB3aWxsIGNhdXNlIGEgZmxvYXRpbmcKK3dpbmRvdyB0byBiZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgbWVudSBlbnRyaWVzIG9uIGl0LiAgVGhlIGZsb2F0aW5nIG1lbnUgY2FuCit0aGVuIGJlIGFjY2Vzc2VkIGp1c3QgYXMgaWYgaXQgd2FzIHRoZSBvcmlnaW5hbCAoaW5jbHVkaW5nIHN1Yi1tZW51cyksIGJ1dAord2l0aG91dCBoYXZpbmcgdG8gZ28gdG8gdGhlIG1lbnUgYmFyIGVhY2ggdGltZS4KK1RoaXMgaXMgbW9zdCB1c2VmdWwgaWYgeW91IGZpbmQgeW91cnNlbGYgdXNpbmcgYSBjb21tYW5kIGJ1cmllZCBpbiBhIHN1Yi1tZW51CitvdmVyIGFuZCBvdmVyIGFnYWluLgorVGhlIHRlYXJvZmYgbWVudXMgY2FuIGJlIHBvc2l0aW9uZWQgd2hlcmUgeW91IGxpa2UsIGFuZCBhbHdheXMgc3RheSBqdXN0IGFib3ZlCit0aGUgTWFpbiBWaW0gd2luZG93LiBZb3UgY2FuIGdldCByaWQgb2YgdGhlbSBieSBjbG9zaW5nIHRoZW0gYXMgdXN1YWw7IHRoZXkKK2Fsc28gb2YgY291cnNlIGNsb3NlIHdoZW4geW91IGV4aXQgVmltLgorCisJCQkJCQkJKjp0ZWFyb2ZmKiAqOnRlKgorOnRlW2Fyb2ZmXSB7bmFtZX0JVGVhci1vZmYgdGhlIG1lbnUge25hbWV9LiAgVGhlIG1lbnUgbmFtZWQgbXVzdCBoYXZlIGF0CisJCQlsZWFzdCBvbmUgc3ViZW50cnksIGJ1dCBuZWVkIG5vdCBhcHBlYXIgb24gdGhlCisJCQltZW51LWJhciAoc2VlIHx3aW4zMi1oaWRkZW4tbWVudXN8KS4KKworRXhhbXBsZTogPgorCTp0ZWFyb2ZmIEZpbGUKK3dpbGwgbWFrZSB0aGUgIkZpbGUiIG1lbnUgKGlmIHRoZXJlIGlzIG9uZSkgYXBwZWFyIGFzIGEgdGVhcm9mZiBtZW51LiA+CisKKwk6YW1lbnUgXVRvb2xiYXIuTWFrZQk6bWFrZTxDUj4KKwk6dGVhcm9mZiBdVG9vbGJhcgorVGhpcyBjcmVhdGVzIGEgZmxvYXRpbmcgbWVudSB0aGF0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIG1haW4gbWVudS1iYXIuCisKK05vdGUgdGhhdCBhIG1lbnUgdGhhdCBzdGFydHMgd2l0aCAnXScgd2lsbCBub3QgYmUgZGlzcGxheWVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIENvbW1hbmQgbGluZSBhcmd1bWVudHMJCQkJKmd1aS13MzItY21kYXJncyoKKworQW5hbHlzaXMgb2YgYSBjb21tYW5kIGxpbmUgaW50byBwYXJhbWV0ZXJzIGlzIG5vdCBzdGFuZGFyZGlzZWQgaW4gTVMgV2luZG93cy4KK0d2aW0gaGFzIHRvIHByb3ZpZGUgbG9naWMgdG8gYW5hbHlzZSBhIGNvbW1hbmQgbGluZS4gIFRoaXMgbG9naWMgaXMgbGlrZWx5IHRvCitiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBsb2dpYyBwcm92aWRlZCBieSBhIGNvbXBpbGF0aW9uIHN5c3RlbSB1c2VkIHRvCitidWlsZCB2aW0uICBUaGUgZGlmZmVyZW5jZXMgcmVsYXRlIHRvIHVudXN1YWwgZG91YmxlIHF1b3RlICgiKSB1c2FnZS4KK1RoZSBhcmd1bWVudHMgIkM6XE15IE11c2ljXGZyZXVkZS50eHQiIGFuZCAiKy9TY2hcImlsbGVyIiBhcmUgaGFuZGxlZCBpbiB0aGUKK3NhbWUgd2F5LiAgVGhlIGFyZ3VtZW50ICIrL1NjaCIiaWxsZXIiIG1heSBiZSBoYW5kbGVkIGRpZmZlcmVudCBieSBndmltIGFuZAordmltLCBkZXBlbmRpbmcgd2hhdCBpdCB3YXMgY29tcGlsZWQgd2l0aC4KKworVGhlIHJ1bGVzIGFyZToKKyAgICAgIGEpIEEgcGFyYW1ldGVyIGlzIGEgc2VxdWVuY2Ugb2YgZ3JhcGhpYyBjaGFyYWN0ZXJzLgorICAgICAgYikgUGFyYW1ldGVycyBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlLgorICAgICAgYykgQSBwYXJhbWV0ZXIgY2FuIGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMgdG8gaW5jbHVkZSB3aGl0ZSBzcGFjZS4KKyAgICAgIGQpIEEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlIGJhY2tzbGFzaGVzIChcKSBhbmQgYSBkb3VibGUgcXVvdGUgKCIpCisJaXMgc3BlY2lhbC4gVGhlIGVmZmVjdGl2ZSBudW1iZXIgb2YgYmFja3NsYXNoZXMgaXMgaGFsdmVkLCByb3VuZGVkCisJZG93bi4gIEFuIGV2ZW4gbnVtYmVyIG9mIGJhY2tzbGFzaGVzIHJldmVyc2VzIHRoZSBhY2NlcHRhYmlsaXR5IG9mCisJc3BhY2VzIGFuZCB0YWJzLCBhbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzIHByb2R1Y2VzIGEgbGl0ZXJhbAorCWRvdWJsZSBxdW90ZS4KKworU286CisJIglpcyBhIHNwZWNpYWwgZG91YmxlIHF1b3RlCisJXCIJaXMgYSBsaXRlcmFsIGRvdWJsZSBxdW90ZQorCVxcIglpcyBhIGxpdGVyYWwgYmFja3NsYXNoIGFuZCBhIHNwZWNpYWwgZG91YmxlIHF1b3RlCisJXFxcIglpcyBhIGxpdGVyYWwgYmFja3NsYXNoIGFuZCBhIGxpdGVyYWwgZG91YmxlIHF1b3RlCisJXFxcXCIJaXMgMiBsaXRlcmFsIGJhY2tzbGFzaGVzIGFuZCBhIHNwZWNpYWwgZG91YmxlIHF1b3RlCisJXFxcXFwiCWlzIDIgbGl0ZXJhbCBiYWNrc2xhc2hlcyBhbmQgYSBsaXRlcmFsIGRvdWJsZSBxdW90ZQorCWV0Yy4KKworRXhhbXBsZTogPgorCWd2aW0gIkM6XE15IE11c2ljXGZyZXVkZSIgKyJzZXQgaWdub3JlY2FzZSIgKy8iXCJmb29cXCIgK1wiYmFyXFxcIgorCitvcGVucyAiQzpcTXkgTXVzaWNcZnJldWRlIiBhbmQgZXhlY3V0ZXMgdGhlIGxpbmUgbW9kZSBjb21tYW5kczogPgorCXNldCBpZ25vcmVjYXNlOyAvImZvb1wgYW5kIC9iYXJcIgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIFZhcmlvdXMJCQkJCQkqZ3VpLXczMi12YXJpb3VzKgorCisJCQkJCQkJKmd1aS13MzItcHJpbnRpbmcqCitUaGUgIkZpbGUvUHJpbnQiIG1lbnUgcHJpbnRzIHRoZSB0ZXh0IHdpdGggc3ludGF4IGhpZ2hsaWdodGluZywgc2VlCit8OmhhcmRjb3B5fC4gIElmIHlvdSBqdXN0IHdhbnQgdG8gcHJpbnQgdGhlIHJhdyB0ZXh0IGFuZCBoYXZlIGEgZGVmYXVsdAorcHJpbnRlciBpbnN0YWxsZWQgdGhpcyBzaG91bGQgYWxzbyB3b3JrOiA+CisJOncgPj5wcm4KKworVmltIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHN0YW5kYXJkIE1TIFdpbmRvd3MgZmVhdHVyZXMuIFNvbWUgb2YgdGhlc2UgYXJlCitkZXRhaWxlZCBlbHNld2hlcmU6IHNlZSB8J21vdXNlJ3wsIHx3aW4zMi1oaWRkZW4tbWVudXN8LgorCisJCQkJCQkJKmRyYWctbi1kcm9wLXdpbjMyKgorWW91IGNhbiBkcmFnIGFuZCBkcm9wIG9uZSBvciBtb3JlIGZpbGVzIGludG8gdGhlIFZpbSB3aW5kb3csIHdoZXJlIHRoZXkgd2lsbAorYmUgb3BlbmVkIGFzIG5vcm1hbC4gIFNlZSB8ZHJhZy1uLWRyb3B8LgorCisJCQkJCQkJKjpzaW1hbHQqICo6c2kqCis6c2ltW2FsdF0ge2tleX0JCXNpbXVsYXRlIHByZXNzaW5nIHtrZXl9IHdoaWxlIGhvbGRpbmcgQWx0IHByZXNzZWQuCisJCQl7bm90IGluIFZpfSB7b25seSBmb3IgV2luMzIgdmVyc2lvbnN9CisKK05vcm1hbGx5LCBWaW0gdGFrZXMgY29udHJvbCBvZiBhbGwgQWx0LTxLZXk+IGNvbWJpbmF0aW9ucywgdG8gaW5jcmVhc2UgdGhlCitudW1iZXIgb2YgcG9zc2libGUgbWFwcGluZ3MuIFRoaXMgY2xhc2hlcyB3aXRoIHRoZSBzdGFuZGFyZCB1c2Ugb2YgQWx0IGFzIHRoZQora2V5IGZvciBhY2Nlc3NpbmcgbWVudXMuCitUaGUgcXVpY2sgd2F5IG9mIGdldHRpbmcgc3RhbmRhcmQgYmVoYXZpb3IgaXMgdG8gc2V0IHRoZSAnd2luYWx0a2V5cycgb3B0aW9uCit0byAieWVzIi4gIFRoaXMgaG93ZXZlciBwcmV2ZW50cyB5b3UgZnJvbSBtYXBwaW5nIEFsdCBrZXlzIGF0IGFsbC4KK0Fub3RoZXIgd2F5IGlzIHRvIHNldCAnd2luYWx0a2V5cycgdG8gIm1lbnUiLiAgTWVudSBzaG9ydGN1dCBrZXlzIGFyZSB0aGVuCitoYW5kbGVkIGJ5IHdpbmRvd3MsIG90aGVyIEFMVCBrZXlzIGNhbiBiZSBtYXBwZWQuICBUaGlzIGRvZXNuJ3QgYWxsb3cgYQorZGVwZW5kZW5jeSBvbiB0aGUgY3VycmVudCBzdGF0ZSB0aG91Z2guCitUbyBnZXQgcm91bmQgdGhpcywgdGhlIDpzaW1hbHQgY29tbWFuZCBhbGxvd3MgVmltICh3aGVuICd3aW5hbHRrZXlzJyBpcyBub3QKKyJ5ZXMiKSB0byBmYWtlIGEgV2luZG93cy1zdHlsZSBBbHQga2V5cHJlc3MuIFlvdSBjYW4gdXNlIHRoaXMgdG8gbWFwIEFsdCBrZXkKK2NvbWJpbmF0aW9ucyAob3IgYW55dGhpbmcgZWxzZSBmb3IgdGhhdCBtYXR0ZXIpIHRvIHByb2R1Y2Ugc3RhbmRhcmQgV2luZG93cworYWN0aW9ucy4gSGVyZSBhcmUgc29tZSBleGFtcGxlczogPgorCisJOm1hcCA8TS1mPiA6c2ltYWx0IGY8Q1I+CitUaGlzIG1ha2VzIEFsdC1GIHBvcCBkb3duIHRoZSAnRmlsZScgbWVudSAod2l0aCB0aGUgc3RvY2sgTWVudS52aW0pIGJ5CitzaW11bGF0aW5nIHRoZSBrZXlzdHJva2VzIEFsdCwgRi4gPgorCTptYXAgPE0tU3BhY2U+IDpzaW1hbHQgfjxDUj4KK1RoaXMgbWFwcyBBbHQtU3BhY2UgdG8gcG9wIGRvd24gdGhlIHN5c3RlbSBtZW51IGZvciB0aGUgVmltIHdpbmRvdy4gTm90ZSB0aGF0Cit+IGlzIHVzZWQgYnkgc2ltYWx0IHRvIHJlcHJlc2VudCB0aGUgPFNwYWNlPiBjaGFyYWN0ZXIuID4KKwk6bWFwIDxDLW4+IDpzaW1hbHQgfm48Q1I+CitNYXBzIENvbnRyb2wtTiB0byBwcm9kdWNlIHRoZSBrZXlzIEFsdC1TcGFjZSBmb2xsb3dlZCBieSBOLiBUaGlzIG1pbmltaXplcyB0aGUKK1ZpbSB3aW5kb3cgdmlhIHRoZSBzeXN0ZW0gbWVudS4KKworCQkJCQkJKmludGVsbGltb3VzZS13aGVlbC1wcm9ibGVtcyoKK1doZW4gdXNpbmcgdGhlIEludGVsbGltb3VzZSBtb3VzZSB3aGVlbCBjYXVzZXMgVmltIHRvIHN0b3AgYWNjZXB0aW5nIGlucHV0LCBnbwordG86CisJQ29udHJvbFBhbmVsIC0gTW91c2UgLSBXaGVlbCAtIFVuaXZlcnNhbFNjcm9sbGluZyAtIEV4Y2VwdGlvbnMKKworQW5kIGFkZCBndmltIHRvIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9ucy4gIFRoaXMgcHJvYmxlbSBvbmx5IGFwcGVhcnMgdG8gaGFwcGVuCit3aXRoIHRoZSBJbnRlbGxpbW91c2UgZHJpdmVyIDIuMiBhbmQgd2hlbiAiVW5pdmVyc2FsIFNjcm9sbGluZyIgaXMgdHVybmVkIG9uLgorCisgdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9ndWlfeDExLnR4dCBiL3J1bnRpbWUvZG9jL2d1aV94MTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NDczMDIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9ndWlfeDExLnR4dApAQCAtMCwwICsxLDU3NiBAQAorKmd1aV94MTEudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1hciAxNgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1ZpbSdzIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZQkJCQkqZ3VpLXgxMSogKkdVSS1YMTEqCisJCQkJCQkJKkF0aGVuYSogKk1vdGlmKgorMS4gU3RhcnRpbmcgdGhlIFgxMSBHVUkJCXxndWkteDExLXN0YXJ0fAorMi4gR1VJIFJlc291cmNlcwkJfGd1aS1yZXNvdXJjZXN8CiszLiBTaGVsbCBDb21tYW5kcwkJfGd1aS1wdHl8Cis0LiBWYXJpb3VzCQkJfGd1aS14MTEtdmFyaW91c3wKKzUuIEdUSyB2ZXJzaW9uCQkJfGd1aS1ndGt8Cis2LiBHTk9NRSB2ZXJzaW9uCQl8Z3VpLWdub21lfAorNy4gQ29tcGlsaW5nCQkJfGd1aS14MTEtY29tcGlsaW5nfAorOC4gWDExIHNlbGVjdGlvbiBtZWNoYW5pc20JfHgxMS1zZWxlY3Rpb258CisKK090aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb246Cit8Z3VpLnR4dHwJRm9yIGdlbmVyaWMgaXRlbXMgb2YgdGhlIEdVSS4KKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFN0YXJ0aW5nIHRoZSBYMTEgR1VJCQkJCQkqZ3VpLXgxMS1zdGFydCogKkU2NjUqCisKK1RoZW4geW91IGNhbiBydW4gdGhlIEdVSSB2ZXJzaW9uIG9mIFZpbSBpbiBlaXRoZXIgb2YgdGhlc2Ugd2F5czoKKyAgICBndmltIFtvcHRpb25zXSBbZmlsZXMuLi5dCisgICAgdmltIC1nIFtvcHRpb25zXSBbZmlsZXMuLi5dCisKK1NvIGlmIHlvdSBjYWxsIHRoZSBleGVjdXRhYmxlICJndmltIiwgb3IgbWFrZSAiZ3ZpbSIgYSBsaW5rIHRvIHRoZSBleGVjdXRhYmxlLAordGhlbiB0aGUgR1VJIHZlcnNpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHVzZWQuICBBZGRpdGlvbmFsIGNoYXJhY3RlcnMgbWF5IGJlCithZGRlZCBhZnRlciAiZ3ZpbSIsIGZvciBleGFtcGxlICJndmltLTUiLgorCitZb3UgbWF5IGFsc28gc3RhcnQgdXAgdGhlIEdVSSBmcm9tIHdpdGhpbiB0aGUgdGVybWluYWwgdmVyc2lvbiBieSB1c2luZyBvbmUgb2YKK3RoZXNlIGNvbW1hbmRzOgorCTpndWkgWysrb3B0XSBbK2NtZF0gWy1mfC1iXSBbZmlsZXMuLi5dCQkJKjpndSogKjpndWkqCisJOmd2aW0gWysrb3B0XSBbK2NtZF0gWy1mfC1iXSBbZmlsZXMuLi5dCQkJKjpndiogKjpndmltKgorVGhlICItZiIgb3B0aW9uIHJ1bnMgVmltIGluIHRoZSBmb3JlZ3JvdW5kLgorVGhlICItYiIgb3B0aW9uIHJ1bnMgVmltIGluIHRoZSBiYWNrZ3JvdW5kICh0aGlzIGlzIHRoZSBkZWZhdWx0KS4KK0Fsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKworCQkJCQkJCSpndWktZm9yayoKK1doZW4gdGhlIEdVSSBpcyBzdGFydGVkLCBpdCBkb2VzIGEgZm9yaygpIGFuZCBleGl0cyB0aGUgY3VycmVudCBwcm9jZXNzLgorV2hlbiBndmltIHdhcyBzdGFydGVkIGZyb20gYSBzaGVsbCB0aGlzIG1ha2VzIHRoZSBzaGVsbCBhY2NlcHQgZnVydGhlcgorY29tbWFuZHMuICBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIChlLmcuIHdoZW4gdXNpbmcgZ3ZpbSBmb3IgYSBtYWlsIHByb2dyYW0KK3RoYXQgd2FpdHMgZm9yIGd2aW0gdG8gZXhpdCksIHN0YXJ0IGd2aW0gd2l0aCAiZ3ZpbSAtZiIsICJ2aW0gLWdmIiBvciB1c2UKKyI6Z3VpIC1mIi4gIERvbid0IHVzZSAidmltIC1mZyIsIGJlY2F1c2UgIi1mZyIgc3BlY2lmaWVzIHRoZSBmb3JlZ3JvdW5kCitjb2xvci4KKworV2hlbiB1c2luZyAiZ3ZpbSAtZiIgYW5kIHRoZW4gIjpndWkiLCBWaW0gd2lsbCBydW4gaW4gdGhlIGZvcmVncm91bmQuICBUaGUKKyItZiIgYXJndW1lbnQgd2lsbCBiZSByZW1lbWJlcmVkLiAgVG8gZm9yY2UgcnVubmluZyBWaW0gaW4gdGhlIGJhY2tncm91bmQgdXNlCisiOmd1aSAtYiIuCisKKyJndmltIC0tbm9mb3JrIiBkb2VzIHRoZSBzYW1lIGFzICJndmltIC1mIi4KKworSWYgeW91IHdhbnQgdGhlIEdVSSB0byBydW4gaW4gdGhlIGZvcmVncm91bmQgYWx3YXlzLCBpbmNsdWRlIHRoZSAnZicKK2ZsYWcgaW4gJ2d1aW9wdGlvbnMnLiAgfC1mfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBHVUkgUmVzb3VyY2VzCQkJKmd1aS1yZXNvdXJjZXMqICouWGRlZmF1bHRzKgorCitJZiB1c2luZyB0aGUgTW90aWYgb3IgQXRoZW5hIHZlcnNpb24gb2YgdGhlIEdVSSAobm90IGZvciB0aGUgR1RLKyBvciBXaW4zMgordmVyc2lvbiksIGEgbnVtYmVyIG9mIFggcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuICBZb3Ugc2hvdWxkIHVzZSBWaW0ncyBjbGFzcworIlZpbSIgd2hlbiBzZXR0aW5nIHRoZXNlLiAgVGhleSBhcmUgYXMgZm9sbG93czoKKworICAgIFJlc291cmNlIG5hbWUJTWVhbmluZwkJfgorCisgICAgcmV2ZXJzZVZpZGVvCUJvb2xlYW46IHNob3VsZCByZXZlcnNlIHZpZGVvIGJlIHVzZWQ/CisgICAgYmFja2dyb3VuZAkJQ29sb3Igb2YgYmFja2dyb3VuZC4KKyAgICBmb3JlZ3JvdW5kCQlDb2xvciBvZiBub3JtYWwgdGV4dC4KKyAgICBzY3JvbGxCYWNrZ3JvdW5kCUNvbG9yIG9mIHRyb3VnaCBwb3J0aW9uIG9mIHNjcm9sbGJhcnMuCisgICAgc2Nyb2xsRm9yZWdyb3VuZAlDb2xvciBvZiBzbGlkZXIgYW5kIGFycm93IHBvcnRpb25zIG9mIHNjcm9sbGJhcnMuCisgICAgbWVudUJhY2tncm91bmQJQ29sb3Igb2YgbWVudSBiYWNrZ3JvdW5kcy4KKyAgICBtZW51Rm9yZWdyb3VuZAlDb2xvciBvZiBtZW51IGZvcmVncm91bmRzLgorICAgIHRvb2x0aXBGb3JlZ3JvdW5kCUNvbG9yIG9mIHRvb2x0aXAgYW5kIGJhbGxvb24gZm9yZWdyb3VuZC4KKyAgICB0b29sdGlwQmFja2dyb3VuZAlDb2xvciBvZiB0b29sdGlwIGFuZCBiYWxsb29uIGJhY2tncm91bmQuCisKKyAgICBmb250CQlOYW1lIG9mIGZvbnQgdXNlZCBmb3Igbm9ybWFsIHRleHQuCisgICAgYm9sZEZvbnQJCU5hbWUgb2YgZm9udCB1c2VkIGZvciBib2xkIHRleHQuCisgICAgaXRhbGljRm9udAkJTmFtZSBvZiBmb250IHVzZWQgZm9yIGl0YWxpYyB0ZXh0LgorICAgIGJvbGRJdGFsaWNGb250CU5hbWUgb2YgZm9udCB1c2VkIGZvciBib2xkLCBpdGFsaWMgdGV4dC4KKyAgICBtZW51Rm9udAkJTmFtZSBvZiBmb250IHVzZWQgZm9yIHRoZSBtZW51cywgdXNlZCB3aGVuIGNvbXBpbGVkCisJCQl3aXRob3V0IHRoZSB8K3hmb250c2V0fCBmZWF0dXJlCisgICAgbWVudUZvbnRTZXQJCU5hbWUgb2YgZm9udHNldCB1c2VkIGZvciB0aGUgbWVudXMsIHVzZWQgd2hlbiBjb21waWxlZAorCQkJd2l0aCB0aGUgfCt4Zm9udHNldHwgZmVhdHVyZQorICAgIHRvb2x0aXBGb250CQlOYW1lIG9mIHRoZSBmb250IHVzZWQgZm9yIHRoZSB0b29sdGlwIGFuZCBiYWxsb29ucy4KKwkJCVdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCt4Zm9udHNldHwgZmVhdHVyZSB0aGlzIGlzIGEKKwkJCWZvbnRzZXQgbmFtZS4KKworICAgIGdlb21ldHJ5CQlJbml0aWFsIGdlb21ldHJ5IHRvIHVzZSBmb3IgZ3ZpbSdzIHdpbmRvdyAoZGVmYXVsdAorCQkJaXMgc2FtZSBzaXplIGFzIHRlcm1pbmFsIHRoYXQgc3RhcnRlZCBpdCkuCisgICAgc2Nyb2xsYmFyV2lkdGgJVGhpY2tuZXNzIG9mIHNjcm9sbGJhcnMuCisgICAgYm9yZGVyV2lkdGgJCVRoaWNrbmVzcyBvZiBib3JkZXIgYXJvdW5kIHRleHQgYXJlYS4KKyAgICBtZW51SGVpZ2h0CQlIZWlnaHQgb2YgdGhlIG1lbnUgYmFyIChvbmx5IGZvciBBdGhlbmEpLgorCitBIHNwZWNpYWwgZm9udCBmb3IgaXRhbGljLCBib2xkLCBhbmQgaXRhbGljLWJvbGQgdGV4dCB3aWxsIG9ubHkgYmUgdXNlZCBpZgordGhlIHVzZXIgaGFzIHNwZWNpZmllZCBvbmUgdmlhIGEgcmVzb3VyY2UuICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gZ3Vlc3Mgd2hhdAorZm9udHMgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZXNlIGJhc2VkIG9uIHRoZSBub3JtYWwgdGV4dCBmb250LgorCitOb3RlIHRoYXQgdGhlIGNvbG9ycyBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgIjpoaWdobGlnaHQiIGNvbW1hbmQsIHVzaW5nIHRoZQorIk5vcm1hbCIsICJNZW51IiwgIlRvb2x0aXAiLCBhbmQgIlNjcm9sbGJhciIgZ3JvdXBzLiAgRXhhbXBsZTogPgorCTpoaWdobGlnaHQgTWVudSBndWliZz1saWdodGJsdWUKKwk6aGlnaGxpZ2h0IFRvb2x0aXAgZ3VpYmc9eWVsbG93CisJOmhpZ2hsaWdodCBTY3JvbGxiYXIgZ3VpYmc9bGlnaHRibHVlIGd1aWZnPWJsdWUKKwk6aGlnaGxpZ2h0IE5vcm1hbCBndWliZz1ncmV5OTAKKzwKKwkJCQkJCQkqZm9udC1zaXplcyoKK05vdGU6IEFsbCBmb250cyAoZXhjZXB0IGZvciB0aGUgbWVudSBhbmQgdG9vbHRpcCkgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplISEhCitJZiB5b3UgZG9uJ3QgZG8gdGhpcywgdGV4dCB3aWxsIGRpc2FwcGVhciBvciBtZXNzIHVwIHRoZSBkaXNwbGF5LiAgVmltIGRvZXMKK25vdCBjaGVjayB0aGUgZm9udCBzaXplcy4gIEl0J3MgdGhlIHNpemUgaW4gc2NyZWVuIHBpeGVscyB0aGF0IG11c3QgYmUgdGhlCitzYW1lLiAgTm90ZSB0aGF0IHNvbWUgZm9udHMgdGhhdCBoYXZlIHRoZSBzYW1lIHBvaW50IHNpemUgZG9uJ3QgaGF2ZSB0aGUgc2FtZQorcGl4ZWwgc2l6ZSEgIEFkZGl0aW9uYWxseSwgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBmb250cyBtdXN0IGJlIHRoZSBzYW1lCisoYXNjZW50IGFuZCBkZXNjZW50KS4gIFlvdSBjYW4gY2hlY2sgdGhpcyB3aXRoICJ4bHNmb250cyAtbCB7Zm9udG5hbWV9Ii4KKworSWYgYW55IG9mIHRoZXNlIHRoaW5ncyBhcmUgYWxzbyBzZXQgd2l0aCBWaW0gY29tbWFuZHMsIGVnIHdpdGgKKyI6c2V0IGd1aWZvbnQ9U2NyZWVuMTUiLCB0aGVuIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgWCByZXNvdXJjZXMgKGN1cnJlbnRseQorJ2d1aWZvbnQnIGlzIHRoZSBvbmx5IG9wdGlvbiB0aGF0IGlzIHN1cHBvcnRlZCkuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiB3aGF0IHlvdSBtaWdodCBwdXQgaW4geW91ciB+Ly5YZGVmYXVsdHMgZmlsZTogPgorCisJVmltKnVzZVNjaGVtZXM6CQkJYWxsCisJVmltKnNnaU1vZGU6CQkJdHJ1ZQorCVZpbSp1c2VFbmhhbmNlZEZTQjoJCXRydWUKKwlWaW0uZm9yZWdyb3VuZDoJCQlCbGFjaworCVZpbS5iYWNrZ3JvdW5kOgkJCVdoZWF0CisJVmltKmZvbnRMaXN0OgkJCTd4MTMKKworVGhlIGZpcnN0IHRocmVlIG9mIHRoZXNlIGFyZSBzdGFuZGFyZCByZXNvdXJjZXMgb24gU2lsaWNvbiBHcmFwaGljcyBtYWNoaW5lcword2hpY2ggbWFrZSBNb3RpZiBhcHBsaWNhdGlvbnMgbG9vayBldmVuIGJldHRlciwgaGlnaGx5IHJlY29tbWVuZGVkIQorCitUaGUgIlZpbSpmb250TGlzdCIgaXMgdG8gc2V0IHRoZSBtZW51IGZvbnQgZm9yIE1vdGlmLiAgRXhhbXBsZTogPgorCVZpbSptZW51QmFyKmZvbnRMaXN0OgkgICAgIC0qLWNvdXJpZXItbWVkaXVtLXItKi0qLTEwLSotKi0qLSotKi0qLSoKK1dpdGggQXRoZW5hOiA+CisJVmltKm1lbnVCYXIqU21lQlNCKmZvbnQ6ICAgICAtKi1jb3VyaWVyLW1lZGl1bS1yLSotKi0xMC0qLSotKi0qLSotKi0qCisJVmltKm1lbnVCYXIqTWVudUJ1dHRvbipmb250OiAtKi1jb3VyaWVyLW1lZGl1bS1yLSotKi0xMC0qLSotKi0qLSotKi0qCisKK05PVEU6IEEgbW9yZSBwb3J0YWJsZSwgYW5kIGluZGVlZCBtb3JlIGNvcnJlY3QsIHdheSB0byBzcGVjaWZ5IHRoZSBtZW51IGZvbnQKK2luIGVpdGhlciBNb3RpZiBvciBBdGhlbmEgaXMgdGhyb3VnaCB0aGUgcmVzb3VyY2U6ID4KKwlWaW0ubWVudUZvbnQ6CSAgICAgLSotY291cmllci1tZWRpdW0tci0qLSotMTAtKi0qLSotKi0qLSotKgorT3IsIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCt4Zm9udHNldHwgZmVhdHVyZTogPgorCVZpbS5tZW51Rm9udFNldDogICAgIC0qLWNvdXJpZXItbWVkaXVtLXItKi0qLTEwLSotKi0qLSotKi0qLSoKKworRG9uJ3QgdXNlICJWaW0qZ2VvbWV0cnkiIGluIHRoZSBkZWZhdWx0cy4gIFRoaXMgd2lsbCBicmVhayB0aGUgbWVudXMuICBVc2UKKyJWaW0uZ2VvbWV0cnkiIGluc3RlYWQuCisKK0lmIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSAiQ2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwIGVudHJ5IGZvciAiZ3JheTYwIiwKK3RyeSBhZGRpbmcgdGhpcyB0byB5b3VyIFZpbSByZXNvdXJjZXMgKGNoYW5nZSB0aGUgY29sb3JzIHRvIHlvdXIgbGlraW5nKTogPgorCisJVmltKnNjcm9sbEJhY2tncm91bmQ6CQlCbGFjaworCVZpbSpzY3JvbGxGb3JlZ3JvdW5kOgkJQmx1ZQorCitUaGUgcmVzb3VyY2VzIGNhbiBhbHNvIGJlIHNldCB3aXRoIGFyZ3VtZW50cyB0byBWaW06CisKKyAgICBhcmd1bWVudAkJbWVhbmluZwl+CisJCQkJCQkJKi1ndWkqCisgICAtZGlzcGxheSB7ZGlzcGxheX0JUnVuIHZpbSBvbiB7ZGlzcGxheX0JCSotZGlzcGxheSoKKyAgIC1pY29uaWMJCVN0YXJ0IHZpbSBpY29uaWZpZWQJCSotaWNvbmljKgorICAgLWJhY2tncm91bmQge2NvbG9yfQlVc2Uge2NvbG9yfSBmb3IgdGhlIGJhY2tncm91bmQJKi1iYWNrZ3JvdW5kKgorICAgLWJnIHtjb2xvcn0JCWlkZW0JCQkJKi1iZyoKKyAgIC1mb3JlZ3JvdW5kIHtjb2xvcn0JVXNlIHtjb2xvcn0gZm9yIG5vcm1hbCB0ZXh0CSotZm9yZWdyb3VuZCoKKyAgIC1mZyB7Y29sb3J9CQlpZGVtCQkJCSotZmcqCisgICAtdWwge2NvbG9yfQkJaWRlbQkJCQkqLXVsKgorICAgLWZvbnQge2ZvbnR9CQlVc2Uge2ZvbnR9IGZvciBub3JtYWwgdGV4dAkqLWZvbnQqCisgICAtZm4ge2ZvbnR9CQlpZGVtCQkJCSotZm4qCisgICAtYm9sZGZvbnQge2ZvbnR9CVVzZSB7Zm9udH0gZm9yIGJvbGQgdGV4dAkqLWJvbGRmb250KgorICAgLWl0YWxpY2ZvbnQge2ZvbnR9CVVzZSB7Zm9udH0gZm9yIGl0YWxpYyB0ZXh0CSotaXRhbGljZm9udCoKKyAgIC1tZW51Zm9udCB7Zm9udH0JVXNlIHtmb250fSBmb3IgbWVudSBpdGVtcwkqLW1lbnVmb250KgorICAgLW1lbnVmb250c2V0IHtmb250c2V0fSBVc2Uge2ZvbnRzZXR9IGZvciBtZW51IGl0ZW1zCSotbWVudWZvbnRzZXQqCisgICAtbWYge2ZvbnR9CQlpZGVtCQkJCSotbWYqCisgICAtZ2VvbWV0cnkge2dlb219CVVzZSB7Z2VvbX0gZm9yIGluaXRpYWwgZ2VvbWV0cnkJKi1nZW9tZXRyeSoKKyAgIC1nZW9tIHtnZW9tfQkJaWRlbSwgc2VlIHwtZ2VvbWV0cnktZXhhbXBsZXwJKi1nZW9tKgorICAgLWJvcmRlcndpZHRoIHt3aWR0aH0JVXNlIGEgYm9yZGVyIHdpZHRoIG9mIHt3aWR0aH0JKi1ib3JkZXJ3aWR0aCoKKyAgIC1idyB7d2lkdGh9CQlpZGVtCQkJCSotYncqCisJCQkJCQkJKi1zY3JvbGxiYXJ3aWR0aCoKKyAgIC1zY3JvbGxiYXJ3aWR0aCB7d2lkdGh9CVVzZSBhIHNjcm9sbGJhciB3aWR0aCBvZiB7d2lkdGh9CisgICAtc3cge3dpZHRofQkJaWRlbQkJCQkqLXN3KgorICAgLW1lbnVoZWlnaHQge2hlaWdodH0JVXNlIGEgbWVudSBiYXIgaGVpZ2h0IG9mIHtoZWlnaHR9ICotbWVudWhlaWdodCoKKyAgIC1taCB7aGVpZ2h0fQkJaWRlbQkJCQkqLW1oKgorCQkJTk9URTogT24gTW90aWYgdGhlIHZhbHVlIGlzIGlnbm9yZWQsIHRoZSBtZW51IGhlaWdodAorCQkJaXMgY29tcHV0ZWQgdG8gZml0IHRoZSBtZW51cy4KKyAgIC1yZXZlcnNlCQlVc2UgcmV2ZXJzZSB2aWRlbwkJKi1yZXZlcnNlKgorICAgLXJ2CQkJaWRlbQkJCQkqLXJ2KgorICAgK3JldmVyc2UJCURvbid0IHVzZSByZXZlcnNlIHZpZGVvCQkqLStyZXZlcnNlKgorICAgK3J2CQkJaWRlbQkJCQkqLStydioKKyAgIC14cm0ge3Jlc291cmNlfQlTZXQgdGhlIHNwZWNpZmllZCByZXNvdXJjZQkqLXhybSoKKworTm90ZSBhYm91dCByZXZlcnNlIHZpZGVvOiBWaW0gY2hlY2tzIHRoYXQgdGhlIHJlc3VsdCBpcyBhY3R1YWxseSBhIGxpZ2h0IHRleHQKK29uIGEgZGFyayBiYWNrZ3JvdW5kLiAgVGhlIHJlYXNvbiBpcyB0aGF0IHNvbWUgWDExIHZlcnNpb25zIHN3YXAgdGhlIGNvbG9ycywKK2FuZCBzb21lIGRvbid0LiAgVGhlc2UgdHdvIGV4YW1wbGVzIHdpbGwgYm90aCBnaXZlIHllbGxvdyB0ZXh0IG9uIGEgYmx1ZQorYmFja2dyb3VuZDoKKyAgICBndmltIC1mZyBZZWxsb3cgLWJnIEJsdWUgLXJldmVyc2UKKyAgICBndmltIC1iZyBZZWxsb3cgLWZnIEJsdWUgLXJldmVyc2UKKworCQkJCQkJCSotZ2VvbWV0cnktZXhhbXBsZSoKK0FuIGV4YW1wbGUgZm9yIHRoZSBnZW9tZXRyeSBhcmd1bWVudDogPgorCWd2aW0gLWdlb21ldHJ5IDgweDYzKzgrMTAwCitUaGlzIGNyZWF0ZXMgYSB3aW5kb3cgd2l0aCA4MCBjb2x1bW5zIGFuZCA2MyBsaW5lcyBhdCBwb3NpdGlvbiA4IHBpeGVscyBmcm9tCit0aGUgbGVmdCBhbmQgMTAwIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIHNjcmVlbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBTaGVsbCBDb21tYW5kcwkJCQkJKmd1aS1wdHkqCisKK1dBUk5JTkc6IEV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kIGZyb20gdGhlIEdVSSB3aWxsIG5vdCBhbHdheXMgd29yay4KKyJub3JtYWwiIGNvbW1hbmRzIGxpa2UgImxzIiwgImdyZXAiIGFuZCAibWFrZSIgbW9zdGx5IHdvcmsgZmluZS4gIENvbW1hbmRzCit0aGF0IHJlcXVpcmUgYW4gaW50ZWxsaWdlbnQgdGVybWluYWwgbGlrZSAibGVzcyIgYW5kICJpc3BlbGwiIHdvbid0IHdvcmsuCitTb21lIG1heSBldmVuIGhhbmcgYW5kIG5lZWQgdG8gYmUga2lsbGVkIGZyb20gYW5vdGhlciB0ZXJtaW5hbC4gIFNvIGJlCitjYXJlZnVsIQorCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gZG8gdGhlIEkvTyB3aXRoIGEgc2hlbGwgY29tbWFuZDogUGlwZXMgYW5kIGEgcHNldWRvLXR0eS4KK1RoZSBkZWZhdWx0IGlzIHRvIHVzZSBhIHBzZXVkby10dHkuICBUaGlzIHNob3VsZCB3b3JrIGJlc3Qgb24gbW9zdCBzeXN0ZW1zLgorCitVbmZvcnR1bmF0ZWx5LCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBzZXVkby10dHkgaXMgZGlmZmVyZW50IG9uIGV2ZXJ5IFVuaXgKK3N5c3RlbS4gIEFuZCBzb21lIHN5c3RlbXMgcmVxdWlyZSByb290IHBlcm1pc3Npb24uICBUbyBhdm9pZCBydW5uaW5nIGludG8KK3Byb2JsZW1zIHdpdGggYSBwc2V1ZG8tdHR5IHdoZW4geW91IGxlYXN0IGV4cGVjdCBpdCwgdGVzdCBpdCB3aGVuIG5vdCBlZGl0aW5nCithIGZpbGUuICBCZSBwcmVwYXJlZCB0byAia2lsbCIgdGhlIHN0YXJ0ZWQgY29tbWFuZCBvciBWaW0uICBDb21tYW5kcyBsaWtlCisiOnIgIWNhdCIgbWF5IGhhbmchCisKK0lmIHVzaW5nIGEgcHNldWRvLXR0eSBkb2VzIG5vdCB3b3JrIGZvciB5b3UsIHJlc2V0IHRoZSAnZ3VpcHR5JyBvcHRpb246ID4KKworCTpzZXQgbm9ndWlwdHkKKworVXNpbmcgYSBwaXBlIHNob3VsZCB3b3JrIG9uIGFueSBVbml4IHN5c3RlbSwgYnV0IHRoZXJlIGFyZSBkaXNhZHZhbnRhZ2VzOgorLSBTb21lIHNoZWxsIGNvbW1hbmRzIHdpbGwgbm90aWNlIHRoYXQgYSBwaXBlIGlzIGJlaW5nIHVzZWQgYW5kIGJlaGF2ZQorICBkaWZmZXJlbnRseS4gIEUuZy4sICI6IWxzIiB3aWxsIGxpc3QgdGhlIGZpbGVzIGluIG9uZSBjb2x1bW4uCistIFRoZSAiOnNoIiBjb21tYW5kIHdvbid0IHNob3cgYSBwcm9tcHQsIGFsdGhvdWdoIGl0IHdpbGwgc29ydCBvZiB3b3JrLgorLSBXaGVuIHVzaW5nICI6bWFrZSIgaXQncyBub3QgcG9zc2libGUgdG8gaW50ZXJydXB0IHdpdGggYSBDVFJMLUMuCisKK1R5cGVhaGVhZCB3aGlsZSB0aGUgZXh0ZXJuYWwgY29tbWFuZCBpcyBydW5uaW5nIGlzIG9mdGVuIGxvc3QuICBUaGlzIGhhcHBlbnMKK2JvdGggd2l0aCBhIHBpcGUgYW5kIGEgcHNldWRvLXR0eS4gIFRoaXMgaXMgYSBrbm93biBwcm9ibGVtLCBidXQgaXQgc2VlbXMgaXQKK2Nhbid0IGJlIGZpeGVkIChvciBhdCBsZWFzdCwgaXQncyB2ZXJ5IGRpZmZpY3VsdCkuCisKKwkJCQkJCQkqZ3VpLXB0eS1lcmFzZSoKK1doZW4geW91ciBlcmFzZSBjaGFyYWN0ZXIgaXMgd3JvbmcgZm9yIGFuIGV4dGVybmFsIGNvbW1hbmQsIHlvdSBzaG91bGQgZml4Cit0aGlzIGluIHlvdXIgIn4vLmNzaHJjIiBmaWxlLCBvciB3aGF0ZXZlciBmaWxlIHlvdXIgc2hlbGwgdXNlcyBmb3IKK2luaXRpYWxpemF0aW9ucy4gIEZvciBleGFtcGxlLCB3aGVuIHlvdSB3YW50IHRvIHVzZSBiYWNrc3BhY2UgdG8gZGVsZXRlCitjaGFyYWN0ZXJzLCBidXQgaGl0dGluZyBiYWNrc3BhY2VzIHByb2R1Y2VzICJeSCIgaW5zdGVhZCwgdHJ5IGFkZGluZyB0aGlzIHRvCit5b3VyICJ+Ly5jc2hyYyI6ID4KKwlzdHR5IGVyYXNlIF5ICitUaGUgXkggaXMgYSByZWFsIENUUkwtSCwgdHlwZSBpdCBhcyBDVFJMLVYgQ1RSTC1ILgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFZhcmlvdXMJCQkJCQkqZ3VpLXgxMS12YXJpb3VzKgorCisJCQkJCQkJKmd1aS14MTEtcHJpbnRpbmcqCitUaGUgIkZpbGUvUHJpbnQiIG1lbnUgc2ltcGx5IHNlbmRzIHRoZSBjdXJyZW50IGJ1ZmZlciB0byAibHByIi4gIE5vIG9wdGlvbnMgb3IKK3doYXRldmVyLiAgSWYgeW91IHdhbnQgc29tZXRoaW5nIGVsc2UsIHlvdSBjYW4gZGVmaW5lIHlvdXIgb3duIHByaW50IGNvbW1hbmQuCitGb3IgZXhhbXBsZTogPgorCisgIDoxMGFtZW51IEZpbGUuUHJpbnQgOncgIWxwciAtUGhwMworICA6MTB2bWVudSBGaWxlLlByaW50IDp3ICFscHIgLVBocDMKKzwKKwkJCQkJCQkqWDExLWljb24qCitWaW0gdXNlcyBhIGJsYWNrJndoaXRlIGljb24gYnkgZGVmYXVsdCB3aGVuIGNvbXBpbGVkIHdpdGggTW90aWYgb3IgQXRoZW5hLiAgQQorY29sb3JlZCBWaW0gaWNvbiBpcyBpbmNsdWRlZCBhcyAkVklNUlVOVElNRS92aW0zMngzMi54cG0uICBGb3IgR1RLKywgdGhpcyBpcwordGhlIGJ1aWx0aW4gaWNvbiB1c2VkLiAgVW5mb3J0dW5hdGVseSwgaG93IHlvdSBzaG91bGQgaW5zdGFsbCBpdCBkZXBlbmRzIG9uCit5b3VyIHdpbmRvdyBtYW5hZ2VyLiAgV2hlbiB5b3UgdXNlIHRoaXMsIHJlbW92ZSB0aGUgJ2knIGZsYWcgZnJvbQorJ2d1aW9wdGlvbnMnLCB0byByZW1vdmUgdGhlIGJsYWNrJndoaXRlIGljb246ID4KKyAgOnNldCBndWlvcHRpb25zLT1pCisKK0lmIHlvdSB1c2Ugb25lIG9mIHRoZSBmdndtKiBmYW1pbHkgb2Ygd2luZG93IG1hbmFnZXJzIHNpbXBseSBhZGQgdGhpcyBsaW5lIHRvCit5b3VyIC5mdndtMnJjIGNvbmZpZ3VyYXRpb24gZmlsZTogPgorCisgIFN0eWxlICJ2aW0iCQlJY29uIHZpbTMyeDMyLnhwbQorCitNYWtlIHN1cmUgdGhlIGljb24gZmlsZSdzIGxvY2F0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2luZG93IG1hbmFnZXIncworSW1hZ2VQYXRoIHN0YXRlbWVudC4gIEVpdGhlciBtb2RpZnkgdGhlIEltYWdlUGF0aCBmcm9tIHdpdGhpbiB5b3VyIC5mdndtMnJjIG9yCitkcm9wIHRoZSBpY29uIGludG8gb25lIHRoZSBwcmUtZGVmaW5lZCBkaXJlY3RvcmllczogPgorCisgIEltYWdlUGF0aCAvdXNyL1gxMVI2L2luY2x1ZGUvWDExL3BpeG1hcHM6L3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9iaXRtYXBzCisKK05vdGU6IG9sZGVyIHZlcnNpb25zIG9mIGZ2d20gdXNlICJJY29uUGF0aCIgaW5zdGVhZCBvZiAiSW1hZ2VQYXRoIi4KKworRm9yIENERSAiZHR3bSIgKGEgZGVyaXZhdGl2ZSBvZiBNb3RpZikgYWRkIHRoaXMgbGluZSBpbiB0aGUgLlhkZWZhdWx0czogPgorICAgRHR3bSpWaW0qaWNvbkltYWdlOiAvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW0zMngzMi54cG0KKworRm9yICJtd20iIChNb3RpZiB3aW5kb3cgbWFuYWdlcikgdGhlIGxpbmUgd291bGQgYmU6ID4KKyAgIE13bSpWaW0qaWNvbkltYWdlOiAvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW0zMngzMi54cG0KKworTW91c2UgUG9pbnRlcnMgQXZhaWxhYmxlIGluIFgxMQkJCQkqWDExX21vdXNlX3NoYXBlcyoKKworQnkgdXNpbmcgdGhlIHwnbW91c2VzaGFwZSd8IG9wdGlvbiwgdGhlIG1vdXNlIHBvaW50ZXIgY2FuIGJlIGF1dG9tYXRpY2FsbHkKK2NoYW5nZWQgd2hlbmV2ZXIgVmltIGVudGVycyBvbmUgb2YgaXRzIHZhcmlvdXMgbW9kZXMgKGUuZy4sIEluc2VydCBvcgorQ29tbWFuZCkuICBDdXJyZW50bHksIHRoZSBhdmFpbGFibGUgcG9pbnRlcnMgYXJlOgorCisJYXJyb3cJCQlhbiBhcnJvdyBwb2ludGluZyBub3J0aHdlc3QKKwliZWFtCQkJYSBJLWxpa2UgdmVydGljYWwgYmFyCisJc2l6ZQkJCWFuIGFycm93IHBvaW50aW5nIHVwIGFuZCBkb3duCisJYnVzeQkJCWEgd3Jpc3R3YXRjaAorCWJsYW5rCQkJYW4gaW52aXNpYmxlIHBvaW50ZXIKKwljcm9zc2hhaXIJCWEgdGhpbiAiKyIgc2lnbgorCWhhbmQxCQkJYSBkYXJrIGhhbmQgcG9pbnRpbmcgbm9ydGhlYXN0CisJaGFuZDIJCQlhIGxpZ2h0IGhhbmQgcG9pbnRpbmcgbm9ydGh3ZXN0CisJcGVuY2lsCQkJYSBwZW5jaWwgcG9pbnRpbmcgc291dGhlYXN0CisJcXVlc3Rpb24JCXF1ZXN0aW9uX2Fycm93CisJcmlnaHRfYXJyb3cJCWFuIGFycm93IHBvaW50aW5nIG5vcnRoZWFzdAorCXVwX2Fycm93CQlhbiBhcnJvdyBwb2ludGluZyB1cHdhcmRzCisKK0FkZGl0aW9uYWxseSwgYW55IG9mIHRoZSBtb3VzZSBwb2ludGVycyB0aGF0IGFyZSBidWlsdCBpbnRvIFgxMSBtYXkgYmUKK3VzZWQgYnkgc3BlY2lmeWluZyBhbiBpbnRlZ2VyIGZyb20gdGhlIFgxMS9jdXJzb3Jmb250LmggaW5jbHVkZSBmaWxlLgorCitJZiBhIG5hbWUgaXMgdXNlZCB0aGF0IGV4aXN0cyBvbiBvdGhlciBzeXN0ZW1zLCBidXQgbm90IGluIFgxMSwgdGhlIGRlZmF1bHQKKyJhcnJvdyIgcG9pbnRlciBpcyB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIEdUSyB2ZXJzaW9uCQkJCQkJKmd1aS1ndGsqICpHVEsrKiAqR1RLKgorCitUaGUgR1RLIHZlcnNpb24gb2YgdGhlIEdVSSB3b3JrcyBhIGxpdHRsZSBiaXQgZGlmZmVyZW50LgorCitHVEsgZG9lcyBfbm90XyB1c2UgdGhlIHRyYWRpdGlvbmFsIFggcmVzb3VyY2Ugc2V0dGluZ3MuICBUaHVzIGl0ZW1zIGluIHlvdXIKK34vLlhkZWZhdWx0cyBvciBhcHAtZGVmYXVsdHMgZmlsZXMgYXJlIG5vdCB1c2VkLgorTWFueSBvZiB0aGUgdHJhZGl0aW9uYWwgWCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiAgKGUuZy4sCitzdHVmZiBsaWtlIC1iZywgLWZnLCBldGMpLiAgVGhlIG9uZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGFyZToKKworICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudCAgIHJlc291cmNlIG5hbWUJbWVhbmluZyB+CisgICAgLWZuICBvciAgLWZvbnQJICAgIC5mb250CQlmb250IG5hbWUgZm9yIHRoZSB0ZXh0CisgICAgLWdlb20gIG9yICAtZ2VvbWV0cnkgICAgLmdlb21ldHJ5CQlzaXplIG9mIHRoZSBndmltIHdpbmRvdworICAgIC1ydiAgb3IgIC1yZXZlcnNlCSAgICAqcmV2ZXJzZVZpZGVvCXdoaXRlIHRleHQgb24gYmxhY2sgYmFja2dyb3VuZAorICAgIC1kaXNwbGF5CQkJCQlkaXNwbGF5IHRvIGJlIHVzZWQKKyAgICAtZmcgLWZvcmVncm91bmQge2NvbG9yfQkJCWZvcmVncm91bmQgY29sb3IKKyAgICAtYmcgLWJhY2tncm91bmQge2NvbG9yfQkJCWJhY2tncm91bmQgY29sb3IKKworVG8gc2V0IHRoZSBmb250LCBzZWUgfCdndWlmb250J3wuICBGb3IgR1RLLCB0aGVyZSdzIGFsc28gYSBtZW51IG9wdGlvbiB0aGF0Citkb2VzIHRoaXMuCisKK0FkZGl0aW9uYWxseSwgdGhlcmUgYXJlIHRoZXNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IEdUSworaW50ZXJuYWxseS4gIExvb2sgaW4gdGhlIEdUSyBkb2N1bWVudGF0aW9uIGZvciBob3cgdGhleSBhcmUgdXNlZDoKKwktLXN5bmMKKwktLWdkay1kZWJ1ZworCS0tZ2RrLW5vLWRlYnVnCisJLS1uby14c2htCShub3QgaW4gR1RLKyAyKQorCS0teGltLXByZWVkaXQJKG5vdCBpbiBHVEsrIDIpCisJLS14aW0tc3RhdHVzCShub3QgaW4gR1RLKyAyKQorCS0tZ3RrLWRlYnVnCisJLS1ndGstbm8tZGVidWcKKwktLWctZmF0YWwtd2FybmluZ3MKKwktLWd0ay1tb2R1bGUKKwktLWRpc3BsYXkJKEdUSysgY291bnRlcnBhcnQgb2YgLWRpc3BsYXk7IHdvcmtzIHRoZSBzYW1lIHdheS4pCisJLS1zY3JlZW4JKFRoZSBzY3JlZW4gbnVtYmVyOyBmb3IgR1RLKyAyLjIgbXVsdGloZWFkIHN1cHBvcnQuKQorCitUaGVzZSBhcmd1bWVudHMgYXJlIGlnbm9yZWQgd2hlbiB0aGUgfCtuZXRiZWFuc19pbnRnfCBmZWF0dXJlIGlzIHVzZWQ6CisJLXhybQorCS1tZgorCitBcyBmb3IgY29sb3JzLCBWaW0ncyBjb2xvciBzZXR0aW5ncyAoZm9yIHN5bnRheCBoaWdobGlnaHRpbmcpIGlzIHN0aWxsCitkb25lIHRoZSB0cmFkaXRpb25hbCBWaW0gd2F5LiAgU2VlIHw6aGlnaGxpZ2h0fCBmb3IgbW9yZSBoZWxwLgorCitJZiB5b3Ugd2FudCB0byBzZXQgdGhlIGNvbG9ycyBvZiByZW1haW5pbmcgZ3VpIGNvbXBvbmVudHMgKGUuZy4sIHRoZQorbWVudWJhciwgc2Nyb2xsYmFyLCB3aGF0ZXZlciksIHRob3NlIGFyZSBHVEsgc3BlY2lmaWMgc2V0dGluZ3MgYW5kIHlvdQorbmVlZCB0byBzZXQgdGhvc2UgdXAgaW4gc29tZSBzb3J0IG9mIGd0a3JjIGZpbGUuICBZb3UnbGwgaGF2ZSB0byByZWZlcgordG8gdGhlIEdUSyBkb2N1bWVudGF0aW9uLCBob3dldmVyIGxpdHRsZSB0aGVyZSBpcywgb24gaG93IHRvIGRvIHRoaXMuCitTZWUgaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZG9jL0FQSS8yLjAvZ3RrL2d0ay1SZXNvdXJjZS1GaWxlcy5odG1sCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCQkJCQkJKmd0ay10b29sdGlwLWNvbG9ycyoKK0V4YW1wbGUsIHdoaWNoIHNldHMgdGhlIHRvb2x0aXAgY29sb3JzIHRvIGJsYWNrIG9uIGxpZ2h0LXllbGxvdzogPgorCisJc3R5bGUgInRvb2x0aXBzIgorCXsKKwkJYmdbTk9STUFMXSA9ICIjZmZmZmNjIgorCQlmZ1tOT1JNQUxdID0gIiMwMDAwMDAiCisJfQorCisJd2lkZ2V0ICJndGstdG9vbHRpcHMqIgkJc3R5bGUgInRvb2x0aXBzIgorCitXcml0ZSB0aGlzIGluIHRoZSBmaWxlIH4vLmd0a3JjIGFuZCBpdCB3aWxsIGJlIHVzZWQgYnkgR1RLKy4gIEZvciBHVEsrIDIKK3lvdSBtaWdodCBoYXZlIHRvIHVzZSB0aGUgZmlsZSB+Ly5ndGtyYy0yLjAgaW5zdGVhZCwgZGVwZW5kaW5nIG9uIHlvdXIKK2Rpc3RyaWJ1dGlvbi4KKworVXNpbmcgVmltIGFzIGEgR1RLKyBwbHVnaW4JCQkJKmd1aS1ndGstc29ja2V0aWQqCisKK1doZW4gdGhlIEdUSysgdmVyc2lvbiBvZiBWaW0gc3RhcnRzIHVwIG5vcm1hbGx5LCBpdCBjcmVhdGVzIGl0cyBvd24gdG9wIGxldmVsCit3aW5kb3cgKHRlY2huaWNhbGx5LCBhICdHdGtXaW5kb3cnKS4gIEdUSysgcHJvdmlkZXMgYW4gZW1iZWRkaW5nIGZhY2lsaXR5IHdpdGgKK2l0cyBHdGtTb2NrZXQgYW5kIEd0a1BsdWcgd2lkZ2V0cy4gIElmIG9uZSBHVEsrIGFwcGxpY2F0aW9uIGNyZWF0ZXMgYQorR3RrU29ja2V0IHdpZGdldCBpbiBvbmUgb2YgaXRzIHdpbmRvd3MsIGFuIGVudGlyZWx5IGRpZmZlcmVudCBHVEsrIGFwcGxpY2F0aW9uCittYXkgZW1iZWQgaXRzZWxmIGludG8gdGhlIGZpcnN0IGFwcGxpY2F0aW9uIGJ5IGNyZWF0aW5nIGEgdG9wLWxldmVsIEd0a1BsdWcKK3dpZGdldCB1c2luZyB0aGUgc29ja2V0J3MgSUQuCisKK0lmIHlvdSBwYXNzIFZpbSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiAnLS1zb2NrZXRpZCcgd2l0aCBhIGRlY2ltYWwgb3IKK2hleGFkZWNpbWFsIHZhbHVlLCBWaW0gd2lsbCBjcmVhdGUgYSBHdGtQbHVnIHdpZGdldCB1c2luZyB0aGF0IHZhbHVlIGluc3RlYWQKK29mIHRoZSBub3JtYWwgR3RrV2luZG93LiAgVGhpcyBlbmFibGVzIFZpbSB0byBhY3QgYXMgYSBHVEsrIHBsdWdpbi4KKworVGhpcyByZWFsbHkgaXMgYSBwcm9ncmFtbWVyJ3MgaW50ZXJmYWNlLCBhbmQgaXMgb2Ygbm8gdXNlIHdpdGhvdXQgYSBzdXBwb3J0aW5nCithcHBsaWNhdGlvbiB0byBzcGF3biB0aGUgVmltIGNvcnJlY3RseS4gIEZvciBtb3JlIGRldGFpbHMgb24gR1RLKyBzb2NrZXRzLCBzZWUKK2h0dHA6Ly93d3cuZ3RrLm9yZy9hcGkvCisKK05vdGUgdGhhdCB0aGlzIGZlYXR1cmUgcmVxdWlyZXMgdGhlIGxhdGVzdCBHVEsgdmVyc2lvbi4gIEdUSyAxLjIuMTAgc3RpbGwgaGFzCithIHNtYWxsIHByb2JsZW0uICBUaGUgc29ja2V0IGZlYXR1cmUgaGFzIG5vdCB5ZXQgYmVlbiB0ZXN0ZWQgd2l0aCBHVEsrIDIgLS0KK2ZlZWwgZnJlZSB0byB2b2x1bnRlZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gR05PTUUgdmVyc2lvbgkJCQkqZ3VpLWdub21lKiAqR25vbWUqICpHTk9NRSoKKworVGhlIEdOT01FIEdVSSB3b3JrcyBqdXN0IGxpa2UgdGhlIEdUSysgdmVyc2lvbi4gIFNlZSB8R1RLK3wgYWJvdmUgZm9yIGhvdyBpdAord29ya3MuICBJdCBsb29rcyBhIGJpdCBkaWZmZXJlbnQgdGhvdWdoLCBhbmQgaW1wbGVtZW50cyBvbmUgaW1wb3J0YW50IGZlYXR1cmUKK3RoYXQncyBub3QgYXZhaWxhYmxlIGluIHRoZSBwbGFpbiBHVEsrIEdVSTogIEludGVyYWN0aW9uIHdpdGggdGhlIHNlc3Npb24KK21hbmFnZXIuIHxndWktZ25vbWUtc2Vzc2lvbnwKKworVGhlc2UgYXJlIHRoZSBkaWZmZXJlbnQgbG9va3M6CistIFVzZXMgR05PTUUgZGlhbG9ncyAoR05PTUUgMSBvbmx5KS4gIFRoZSBHTk9NRSAyIEdVSSB1c2VzIHRoZSBzYW1lIG5pY2UKKyAgZGlhbG9ncyBhcyB0aGUgR1RLKyAyIHZlcnNpb24uCistIFVzZXMgdGhlIEdOT01FIGRvY2ssIHNvIHRoYXQgdGhlIHRvb2xiYXIgYW5kIG1lbnViYXIgY2FuIGJlIG1vdmVkIHRvCisgIGRpZmZlcmVudCBsb2NhdGlvbnMgb3RoZXIgdGhhbiB0aGUgdG9wIChlLmcuLCB0aGUgdG9vbGJhciBjYW4gYmUgcGxhY2VkIG9uCisgIHRoZSBsZWZ0LCByaWdodCwgdG9wLCBvciBib3R0b20pLiAgVGhlIHBsYWNlbWVudCBvZiB0aGUgbWVudWJhciBhbmQKKyAgdG9vbGJhciBpcyBvbmx5IHNhdmVkIGluIHRoZSBHTk9NRSAyIHZlcnNpb24uCistIFRoYXQgbWVhbnMgdGhlIG1lbnViYXIgYW5kIHRvb2xiYXIgaGFuZGxlcyBhcmUgYmFjayEgIFllYWghICBBbmQgdGhlCisgIHJlc2l6aW5nIGdyaWQgc3RpbGwgd29ya3MgdG9vLgorCitHTk9NRSBpcyBhdXRvbWF0aWNhbGx5IGNvbXBpbGVkIHdpdGggaWYgaXQgd2FzIGZvdW5kIGJ5IGNvbmZpZ3VyZS4KKyhGSVhNRTogSXMgdGhpcyBzdGlsbCB0cnVlPyAgVXNlIC0tZW5hYmxlLWdub21lLWNoZWNrIHRvIGZvcmNlIGl0IHRvLikKKworR05PTUUgc2Vzc2lvbiBzdXBwb3J0CQkJKmd1aS1nbm9tZS1zZXNzaW9uKiAqZ25vbWUtc2Vzc2lvbioKKworT24gbG9nb3V0LCBWaW0gc2hvd3MgdGhlIHdlbGwta25vd24gZXhpdCBjb25maXJtYXRpb24gZGlhbG9nIGlmIGFueSBidWZmZXJzCithcmUgbW9kaWZpZWQuICBDbGlja2luZyBbQ2FuY2VsXSB3aWxsIHN0b3AgdGhlIGxvZ291dCBwcm9jZXNzLiAgT3RoZXJ3aXNlIHRoZQorY3VycmVudCBzZXNzaW9uIGlzIHN0b3JlZCB0byBkaXNrIGJ5IHVzaW5nIHRoZSB8Om1rc2Vzc2lvbnwgY29tbWFuZCwgYW5kCityZXN0b3JlZCB0aGUgbmV4dCB0aW1lIHlvdSBsb2cgaW4uCisKK1RoZSBHTk9NRSBzZXNzaW9uIHN1cHBvcnQgc2hvdWxkIGFsc28gd29yayB3aXRoIHRoZSBLREUgc2Vzc2lvbiBtYW5hZ2VyLgorSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHBsZWFzZSByZXBvcnQgdGhlbSBhcyBidWdzLgorCitOb3RlOiBUaGUgYXV0b21hdGljIHNlc3Npb24gc2F2ZSB3b3JrcyBlbnRpcmVseSB0cmFuc3BhcmVudCwgaW4gb3JkZXIgdG8KK2F2b2lkIGNvbmZsaWN0cyB3aXRoIHlvdXIgb3duIHNlc3Npb24gZmlsZXMsIHNjcmlwdHMgYW5kIGF1dG9jb21tYW5kcy4gIFRoYXQKK21lYW5zIGluIGRldGFpbDoKKy0gVGhlIHNlc3Npb24gZmlsZSBpcyBzdG9yZWQgdG8gYSBzZXBhcmF0ZSBkaXJlY3RvcnkgKHVzdWFsbHkgJEhPTUUvLmdub21lMikuCistICdzZXNzaW9ub3B0aW9ucycgaXMgaWdub3JlZCwgYW5kIGEgaGFyZGNvZGVkIHNldCBvZiBhcHByb3ByaWF0ZSBmbGFncyBpcworICB1c2VkIGluc3RlYWQ6ID4KKwlibGFuayxjdXJkaXIsZm9sZHMsZ2xvYmFscyxoZWxwLG9wdGlvbnMsd2luc2l6ZQorLSBUaGUgaW50ZXJuYWwgdmFyaWFibGUgfHY6dGhpc19zZXNzaW9ufCBpcyBub3QgY2hhbmdlZCB3aGVuIHN0b3JpbmcgdGhlCisgIHNlc3Npb24uICBBbHNvLCBpdCBpcyByZXN0b3JlZCB0byBpdHMgb2xkIHZhbHVlIHdoZW4gbG9nZ2luZyBpbiBhZ2Fpbi4KKworVGhlIHBvc2l0aW9uIGFuZCBzaXplIG9mIHRoZSBHVUkgd2luZG93IGlzIG5vdCBzYXZlZCBieSBWaW0gc2luY2UgZG9pbmcgc28KK2lzIHRoZSB3aW5kb3cgbWFuYWdlcidzIGpvYi4gIEJ1dCBpZiBjb21waWxlZCB3aXRoIEdUSysgMiBzdXBwb3J0LCBWaW0gaGVscHMKK3RoZSBXTSB0byBpZGVudGlmeSB0aGUgd2luZG93IGJ5IHJlc3RvcmluZyB0aGUgd2luZG93IHJvbGUgKHVzaW5nIHRoZSB8LS1yb2xlfAorY29tbWFuZCBsaW5lIGFyZ3VtZW50KS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBDb21waWxpbmcJCQkJCQkqZ3VpLXgxMS1jb21waWxpbmcqCisKK0lmIHVzaW5nIFgxMSwgVmltJ3MgTWFrZWZpbGUgd2lsbCBieSBkZWZhdWx0IGZpcnN0IHRyeSB0byBmaW5kIHRoZSBuZWNlc3NhcnkKK0dUSysgZmlsZXMgb24geW91ciBzeXN0ZW0uICBJZiB0aGUgR1RLKyBmaWxlcyBjYW5ub3QgYmUgZm91bmQsIHRoZW4gdGhlIE1vdGlmCitmaWxlcyB3aWxsIGJlIHNlYXJjaGVkIGZvci4gIEZpbmFsbHksIGlmIHRoaXMgZmFpbHMsIHRoZSBBdGhlbmEgZmlsZXMgd2lsbCBiZQorc2VhcmNoZWQgZm9yLiAgSWYgYWxsIHRocmVlIGZhaWwsIHRoZSBHVUkgd2lsbCBiZSBkaXNhYmxlZC4KKworRm9yIEdUSyssIFZpbSdzIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyByZXF1aXJlcyB0aGF0IEdUSysgYmUgcHJvcGVybHkKK2luc3RhbGxlZC4gIFRoYXQgaXMsIHRoZSBzaGVsbCBzY3JpcHQgJ2d0ay1jb25maWcnIG11c3QgYmUgaW4geW91ciBQQVRILCBhbmQKK3lvdSBjYW4gYWxyZWFkeSBzdWNjZXNzZnVsIGNvbXBpbGUsIGJ1aWxkLCBhbmQgZXhlY3V0ZSBhIEdUSysgcHJvZ3JhbS4gIFRoZQorcmVhc29uIGZvciB0aGlzIGlzIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGZsYWdzIChDRkxBR1MpIGFuZCBsaW5rIGZsYWdzCisoTERGTEFHUykgYXJlIG9idGFpbmVkIHRocm91Z2ggdGhlICdndGstY29uZmlnJyBzaGVsbCBzY3JpcHQuCisKK0lmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggR1RLKyAyIHN1cHBvcnQgcGFzcyB0aGUgLS1lbmFibGUtZ3RrMi1jaGVjayBhcmd1bWVudAordG8gLi9jb25maWd1cmUuICBPcHRpb25hbGx5LCBzdXBwb3J0IGZvciBHTk9NRSAyIHdpbGwgYmUgY29tcGlsZWQgaWYgdGhlCistLWVuYWJsZS1nbm9tZS1jaGVjayBvcHRpb24gaXMgYWxzbyBnaXZlbi4gIE5vdGUgdGhhdCB0aGUgc3VwcG9ydCBmb3IgR1RLKyAyCitpcyBzdGlsbCBleHBlcmltZW50YWwuICBIb3dldmVyLCBtYW55IHBlb3BsZSBoYXZlIHJlcG9ydGVkIHRoYXQgaXQgd29ya3MganVzdAorZmluZSBmb3IgdGhlbS4KKworT3RoZXJ3aXNlLCBpZiB5b3UgYXJlIHVzaW5nIE1vdGlmIG9yIEF0aGVuYSwgd2hlbiB5b3UgaGF2ZSB0aGUgTW90aWYgb3IgQXRoZW5hCitmaWxlcyBpbiBhIGRpcmVjdG9yeSB3aGVyZSBjb25maWd1cmUgZG9lc24ndCBsb29rLCBlZGl0IHRoZSBNYWtlZmlsZSB0byBlbnRlcgordGhlIG5hbWVzIG9mIHRoZSBkaXJlY3Rvcmllcy4gIFNlYXJjaCBmb3IgIkdVSV9JTkNfTE9DIiBmb3IgYW4gZXhhbXBsZSB0byBzZXQKK3RoZSBNb3RpZiBkaXJlY3RvcmllcywgIkNPTkZfT1BUX1giIGZvciBBdGhlbmEuCisKKwkJCQkJCQkqZ3VpLXgxMS1ndGsqCitBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIHlvdSBtYXkgdXNlIGVpdGhlciBHVEsrIHZlcnNpb24gMS4wLjYgb3IgMS4yLiAgSXQKK2lzIHN1Z2dlc3RlZCB0aGF0IHlvdSB1c2UgdjEuMiBzaW5jZSBub3QgYWxsIG9mIFZpbSdzIEdVSSBmZWF0dXJlcyBhcmUgcHJlc2VudAoraWYgdXNpbmcgdjEuMC42LiAgRm9yIGluc3RhbmNlLCB0aGVyZSBhcmUgbm8gdGVhcm9mZiBtZW51cyBwcmVzZW50IGluIHYxLjAuNi4KK1VzaW5nIGEgdmVyc2lvbiBmcm9tIEdUSysncyBDVlMgdHJlZSBtYXkgb3IgbWF5IG5vdCB3b3JrLCBhbmQgaXMgdGhlcmVmb3JlIG5vdAorc3VwcG9ydGVkIGFuZCBub3QgcmVjb21tZW5kZWQuCisKK0ZvciB0aGUgZXhwZXJpbWVudGFsIEdUSysgMiBHVUksIHVzaW5nIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGUgR1RLKyAyLjAgb3IKK0dUSysgMi4yIHNlcmllcyBpcyByZWNvbW1lbmRlZC4gIENWUyBIRUFEIHNlZW1zIHRvIHdvcmsgZmluZSBtb3N0IG9mIHRpbWUgYXMKK3dlbGwuCisKK0xhc3RseSwgYWx0aG91Z2ggR1RLKyBoYXMgc3VwcG9zZWRseSBiZWVuIHBvcnRlZCB0byB0aGUgV2luMzIgcGxhdGZvcm0sIHRoaXMKK2hhcyBub3QgYmVlbiB0ZXN0ZWQgd2l0aCBWaW0gYW5kIGlzIGFsc28gdW5zdXBwb3J0ZWQuICBBbHNvLCBpdCdzIHVubGlrZWx5IHRvCitldmVuIGNvbXBpbGUgc2luY2UgR1RLKyBHVUkgdXNlcyBwYXJ0cyBvZiB0aGUgZ2VuZXJpYyBYMTEgY29kZS4gIFRoaXMgbWlnaHQKK2NoYW5nZSBpbiBkaXN0YW50IGZ1dHVyZTsgcGFydGljdWxhcmx5IGJlY2F1c2UgZ2V0dGluZyByaWQgb2YgdGhlIFgxMSBjZW50cmljCitjb2RlIHBhcnRzIGlzIGFsc28gcmVxdWlyZWQgZm9yIEdUSysgZnJhbWVidWZmZXIgc3VwcG9ydC4KKworCQkJCQkJCSpndWkteDExLW1vdGlmKgorRm9yIE1vdGlmLCB5b3UgbmVlZCBhdCBsZWFzdCBNb3RpZiB2ZXJzaW9uIDEuMiBhbmQvb3IgWDExUjUuICBNb3RpZiAyLjAgYW5kCitYMTFSNiBhcmUgT0suICBNb3RpZiAxLjEgYW5kIFgxMVI0IG1pZ2h0IHdvcmssIG5vIGd1YXJhbnRlZSAodGhlcmUgbWF5IGJlIGEKK2ZldyBwcm9ibGVtcywgYnV0IHlvdSBtaWdodCBtYWtlIGl0IGNvbXBpbGUgYW5kIHJ1biB3aXRoIGEgYml0IG9mIHdvcmssIHBsZWFzZQorc2VuZCBtZSB0aGUgcGF0Y2hlcyBpZiB5b3UgZG8pLiAgVGhlIG5ld2VzdCByZWxlYXNlcyBvZiBMZXNzVGlmIGhhdmUgYmVlbgorcmVwb3J0ZWQgdG8gd29yayBmaW5lIHRvby4KKworCQkJCQkJCSpndWkteDExLWF0aGVuYSoKK1RoZSBBdGhlbmEgdmVyc2lvbiB1c2VzIHRoZSBYYXcgd2lkZ2V0IHNldCBieSBkZWZhdWx0LiAgSWYgeW91IGhhdmUgdGhlIDNECit2ZXJzaW9uLCB5b3UgbWlnaHQgd2FudCB0byBsaW5rIHdpdGggWGF3M2QgaW5zdGVhZC4gIFRoaXMgd2lsbCBtYWtlIHRoZQorbWVudXMgbG9vayBhIGJpdCBiZXR0ZXIuICBFZGl0IHRoZSBNYWtlZmlsZSBhbmQgbG9vayBmb3IgIlhBV19MSUIiLiAgVGhlCitzY3JvbGxiYXJzIHdpbGwgcmVtYWluIHRoZSBzYW1lLCBiZWNhdXNlIFZpbSBoYXMgaXRzIG93biwgd2hpY2ggYXJlIGFscmVhZHkKKzNEIChpbiBmYWN0LCB0aGV5IGxvb2sgbW9yZSBsaWtlIE1vdGlmKS4KKworCQkJCQkJCSpndWkteDExLW5lWHRhdyoKK1RoZSBuZVh0YXcgdmVyc2lvbiBpcyBtb3N0bHkgbGlrZSBBdGhlbmEsIGJ1dCB1c2VzIGRpZmZlcmVudCB3aWRnZXRzLgorCisJCQkJCQkJKmd1aS14MTEtbWlzYyoKK0luIGdlbmVyYWwsIGRvIG5vdCB0cnkgdG8gbWl4IGZpbGVzIGZyb20gZGlmZmVyZW50IEdUSyssIE1vdGlmLCBBdGhlbmEgYW5kIFgxMQordmVyc2lvbnMuICBUaGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMuICBGb3IgZXhhbXBsZSwgdXNpbmcgaGVhZGVyIGZpbGVzIGZvcgorWDExUjUgd2l0aCBhIGxpYnJhcnkgZm9yIFgxMVI2IHByb2JhYmx5IGRvZXNuJ3Qgd29yayAoYWx0aG91Z2ggdGhlIGxpbmtpbmcKK3dvbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZSwgVmltIHdpbGwgY3Jhc2ggbGF0ZXIpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIFgxMSBzZWxlY3Rpb24gbWVjaGFuaXNtCQkJCSp4MTEtc2VsZWN0aW9uKgorCitJZiB1c2luZyBYMTEsIGluIGVpdGhlciB0aGUgR1VJIG9yIGFuIHh0ZXJtIHdpdGggYW4gWDExLWF3YXJlIFZpbSwgdGhlbiBWaW0KK3Byb3ZpZGVzIHZhcmllZCBhY2Nlc3MgdG8gdGhlIFgxMSBzZWxlY3Rpb24gYW5kIGNsaXBib2FyZC4gIFRoZXNlIGFyZSBhY2Nlc3NlZAorYnkgdXNpbmcgdGhlIHR3byBzZWxlY3Rpb24gcmVnaXN0ZXJzICIqIGFuZCAiKy4KKworWDExIHByb3ZpZGVzIHR3byBiYXNpYyB0eXBlcyBvZiBnbG9iYWwgc3RvcmUsIHNlbGVjdGlvbnMgYW5kIGN1dC1idWZmZXJzLAord2hpY2ggZGlmZmVyIGluIG9uZSBpbXBvcnRhbnQgYXNwZWN0OiBzZWxlY3Rpb25zIGFyZSAib3duZWQiIGJ5IGFuCithcHBsaWNhdGlvbiwgYW5kIGRpc2FwcGVhciB3aGVuIHRoYXQgYXBwbGljYXRpb24gKGUuZy4sIFZpbSkgZXhpdHMsIHRodXMKK2xvc2luZyB0aGUgZGF0YSwgd2hlcmVhcyBjdXQtYnVmZmVycywgYXJlIHN0b3JlZCB3aXRoaW4gdGhlIFgtc2VydmVyIGl0c2VsZgorYW5kIHJlbWFpbiB1bnRpbCB3cml0dGVuIG92ZXIgb3IgdGhlIFgtc2VydmVyIGV4aXRzIChlLmcuLCB1cG9uIGxvZ2dpbmcgb3V0KS4KKworVGhlIGNvbnRlbnRzIG9mIHNlbGVjdGlvbnMgYXJlIGhlbGQgYnkgdGhlIG9yaWdpbmF0aW5nIGFwcGxpY2F0aW9uIChlLmcuLCB1cG9uCithIGNvcHkpLCBhbmQgb25seSBwYXNzZWQgb24gdG8gYW5vdGhlciBhcHBsaWNhdGlvbiB3aGVuIHRoYXQgb3RoZXIgYXBwbGljYXRpb24KK2Fza3MgZm9yIHRoZW0gKGUuZy4sIHVwb24gYSBwYXN0ZSkuCisKK1RoZSBjb250ZW50cyBvZiBjdXQtYnVmZmVycyBhcmUgaW1tZWRpYXRlbHkgd3JpdHRlbiB0bywgYW5kIGFyZSB0aGVuCithY2Nlc3NpYmxlIGRpcmVjdGx5IGZyb20gdGhlIFgtc2VydmVyLCB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIG9yaWdpbmF0aW5nCithcHBsaWNhdGlvbi4KKworCQkJCQkJCSpxdW90ZXBsdXMqICpxdW90ZSsqCitUaGVyZSBhcmUgdGhyZWUgZG9jdW1lbnRlZCBYIHNlbGVjdGlvbnM6IFBSSU1BUlkgKHdoaWNoIGlzIGV4cGVjdGVkIHRvCityZXByZXNlbnQgdGhlIGN1cnJlbnQgdmlzdWFsIHNlbGVjdGlvbiAtIGFzIGluIFZpbSdzIFZpc3VhbCBtb2RlKSwgU0VDT05EQVJZCisod2hpY2ggaXMgaWxsLWRlZmluZWQpIGFuZCBDTElQQk9BUkQgKHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIHVzZWQgZm9yCitjdXQsIGNvcHkgYW5kIHBhc3RlIG9wZXJhdGlvbnMpLgorCitPZiB0aGVzZSB0aHJlZSwgVmltIHVzZXMgUFJJTUFSWSB3aGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlICIqIHJlZ2lzdGVyCisoaGVuY2Ugd2hlbiB0aGUgWDExIHNlbGVjdGlvbnMgYXJlIGF2YWlsYWJsZSwgVmltIHNldHMgYSBkZWZhdWx0IHZhbHVlIGZvcgorfCdjbGlwYm9hcmQnfCBvZiAiYXV0b3NlbGVjdCIpLCBhbmQgQ0xJUEJPQVJEIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgIisKK3JlZ2lzdGVyLiAgVmltIGRvZXMgbm90IGFjY2VzcyB0aGUgU0VDT05EQVJZIHNlbGVjdGlvbi4KKworRXhhbXBsZXM6IChhc3N1bWluZyB0aGUgZGVmYXVsdCBvcHRpb24gdmFsdWVzKQorLSBTZWxlY3QgYW4gVVJMIGluIFZpc3VhbCBtb2RlIGluIFZpbS4gIEdvIHRvIGEgdGV4dCBmaWVsZCBpbiBOZXRzY2FwZSBhbmQKKyAgY2xpY2sgdGhlIG1pZGRsZSBtb3VzZSBidXR0b24uICBUaGUgc2VsZWN0ZWQgdGV4dCB3aWxsIGJlIGluc2VydGVkCisgIChob3BlZnVsbHkhKS4KKy0gU2VsZWN0IHNvbWUgdGV4dCBpbiBOZXRzY2FwZSBieSBkcmFnZ2luZyB3aXRoIHRoZSBtb3VzZS4gIEdvIHRvIFZpbSBhbmQKKyAgcHJlc3MgdGhlIG1pZGRsZSBtb3VzZSBidXR0b246IFRoZSBzZWxlY3RlZCB0ZXh0IGlzIGluc2VydGVkLgorLSBTZWxlY3Qgc29tZSB0ZXh0IGluIFZpbSBhbmQgZG8gIit5LiAgR28gdG8gTmV0c2NhcGUsIHNlbGVjdCBzb21lIHRleHQgaW4gYQorICB0ZXh0ZmllbGQgYnkgZHJhZ2dpbmcgd2l0aCB0aGUgbW91c2UuICBOb3cgdXNlIHRoZSByaWdodCBtb3VzZSBidXR0b24gYW5kCisgIHNlbGVjdCAiUGFzdGUiIGZyb20gdGhlIHBvcHVwIG1lbnUuICBUaGUgc2VsZWN0ZWQgdGV4dCBpcyBvdmVyd3JpdHRlbiBieSB0aGUKKyAgdGV4dCBmcm9tIFZpbS4KK05vdGUgdGhhdCB0aGUgdGV4dCBpbiB0aGUgIisgcmVnaXN0ZXIgcmVtYWlucyBhdmFpbGFibGUgd2hlbiBtYWtpbmcgYSBWaXN1YWwKK3NlbGVjdGlvbiwgd2hpY2ggbWFrZXMgb3RoZXIgdGV4dCBhdmFpbGFibGUgaW4gdGhlICIqIHJlZ2lzdGVyLiAgVGhhdCBhbGxvd3MKK292ZXJ3cml0aW5nIHNlbGVjdGVkIHRleHQuCisJCQkJCQkJKngxMS1jdXQtYnVmZmVyKgorVGhlcmUgYXJlLCBieSBkZWZhdWx0LCA4IGN1dC1idWZmZXJzOiBDVVRfQlVGRkVSMCB0byBDVVRfQlVGRkVSNy4gIFZpbSBvbmx5Cit1c2VzIENVVF9CVUZGRVIwLCB3aGljaCBpcyB0aGUgb25lIHRoYXQgeHRlcm0gdXNlcyBieSBkZWZhdWx0LgorCitXaGVuZXZlciBWaW0gaXMgYWJvdXQgdG8gYmVjb21lIHVuYXZhaWxhYmxlIChlaXRoZXIgdmlhIGV4aXRpbmcgb3IgYmVjb21pbmcKK3N1c3BlbmRlZCksIGFuZCB0aHVzIHVuYWJsZSB0byByZXNwb25kIHRvIGFub3RoZXIgYXBwbGljYXRpb24ncyBzZWxlY3Rpb24KK3JlcXVlc3QsIGl0IHdyaXRlcyB0aGUgY29udGVudHMgb2YgYW55IG93bmVkIHNlbGVjdGlvbiB0byBDVVRfQlVGRkVSMC4gIElmIHRoZQorIisgQ0xJUEJPQVJEIHNlbGVjdGlvbiBpcyBvd25lZCBieSBWaW0sIHRoZW4gdGhpcyBpcyB3cml0dGVuIGluIHByZWZlcmVuY2UsCitvdGhlcndpc2UgaWYgdGhlICIqIFBSSU1BUlkgc2VsZWN0aW9uIGlzIG93bmVkIGJ5IFZpbSwgdGhlbiB0aGF0IGlzIHdyaXR0ZW4uCisKK1NpbWlsYXJseSwgd2hlbiBWaW0gdHJpZXMgdG8gcGFzdGUgZnJvbSAiKiBvciAiKyAoZWl0aGVyIGV4cGxpY2l0bHksIG9yLCBpbgordGhlIGNhc2Ugb2YgdGhlICIqIHJlZ2lzdGVyLCB3aGVuIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIGlzIGNsaWNrZWQpLCBpZiB0aGUKK3JlcXVlc3RlZCBYIHNlbGVjdGlvbiBpcyBlbXB0eSBvciB1bmF2YWlsYWJsZSwgVmltIHJldmVydHMgdG8gcmVhZGluZyB0aGUKK2N1cnJlbnQgdmFsdWUgb2YgdGhlIENVVF9CVUZGRVIwLgorCitOb3RlIHRoYXQgd2hlbiB0ZXh0IGlzIGNvcGllZCB0byBDVVRfQlVGRkVSMCBpbiB0aGlzIHdheSwgdGhlIHR5cGUgb2YKK3NlbGVjdGlvbiAoY2hhcmFjdGVyLCBsaW5lIG9yIGJsb2NrKSBpcyBhbHdheXMgbG9zdCwgZXZlbiBpZiBpdCBpcyBhIFZpbSB3aGljaAorbGF0ZXIgcGFzdGVzIGl0LgorCitYdGVybSwgYnkgZGVmYXVsdCwgYWx3YXlzIHdyaXRlcyB2aXNpYmxlIHNlbGVjdGlvbnMgdG8gYm90aCBQUklNQVJZIGFuZAorQ1VUX0JVRkZFUjAuICBXaGVuIGl0IHBhc3RlcywgaXQgdXNlcyBQUklNQVJZIGlmIHRoaXMgaXMgYXZhaWxhYmxlLCBvciBlbHNlCitmYWxscyBiYWNrIHVwb24gQ1VUX0JVRkZFUjAuICBGb3IgdGhpcyByZWFzb24sIHdoZW4gY3V0dGluZyBhbmQgcGFzdGluZworYmV0d2VlbiBWaW0gYW5kIGFuIHh0ZXJtLCB5b3Ugc2hvdWxkIHVzZSB0aGUgIiogcmVnaXN0ZXIuICBYdGVybSBkb2Vzbid0IHVzZQorQ0xJUEJPQVJELCB0aHVzIHRoZSAiKyBkb2Vzbid0IHdvcmsgd2l0aCB4dGVybS4KKworTW9zdCBuZXdlciBhcHBsaWNhdGlvbnMgd2lsbCBwcm92aWRlIHRoZWlyIGN1cnJlbnQgc2VsZWN0aW9uIHZpYSBQUklNQVJZICgiKikKK2FuZCB1c2UgQ0xJUEJPQVJEICgiKykgZm9yIGN1dC9jb3B5L3Bhc3RlIG9wZXJhdGlvbnMuICBZb3UgdGh1cyBoYXZlIGFjY2VzcyB0bworYm90aCBieSBjaG9vc2luZyB0byB1c2UgZWl0aGVyIG9mIHRoZSAiKiBvciAiKyByZWdpc3RlcnMuCisKKworIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaGFuZ3VsaW4udHh0IGIvcnVudGltZS9kb2MvaGFuZ3VsaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTMzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9oYW5ndWxpbi50eHQKQEAgLTAsMCArMSwxMDEgQEAKKypoYW5ndWxpbi50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMSBTZXAgMDMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQ2hpLURlb2sgSHdhbmcgYW5kIFN1bmctSHl1biBOYW0KKworSW50cm9kdWN0aW9uCQkJCQkqaGFuZ3VsKgorLS0tLS0tLS0tLS0tCitJdCBpcyB0byBpbnB1dCBoYW5ndWwsIHRoZSBLb3JlYW4gbGFuZ3VhZ2UsIHdpdGggVklNIEdVSSB2ZXJzaW9uLgorSWYgeW91IGhhdmUgYSBYSU0gcHJvZ3JhbSwgeW91IGNhbiB1c2UgYW5vdGhlciB8K3hpbXwgZmVhdHVyZS4KK0Jhc2ljYWxseSwgaXQgaXMgZm9yIHdob20gaGFzIG5vIFhJTSBwcm9ncmFtLgorCitDb21waWxlCistLS0tLS0tCitOZXh0IGlzIGEgYmFzaWMgb3B0aW9uLiBZb3UgY2FuIGFkZCBhbnkgb3RoZXIgY29uZmlndXJlIG9wdGlvbi4gPgorCisgICAuL2NvbmZpZ3VyZSAtLXdpdGgteCAtLWVuYWJsZS1tdWx0aWJ5dGUgLS1lbmFibGUtZm9udHNldCAtLWVuYWJsZS1oYW5ndWxpbnB1dAorCitBbmQgeW91IHNob3VsZCBjaGVjayB0aGUgZmVhdHVyZS5oLiBJZiB8K2hhbmd1bF9pbnB1dHwgZmVhdHVyZSBpcyBlbmFibGVkCitieSBjb25maWd1cmUsIHlvdSBjYW4gc2VsZWN0IG1vcmUgb3B0aW9ucyBzdWNoIGFzIGtleWJvYXJkIHR5cGUsIDIgYnVsc2lrCitvciAzIGJ1bHNpay4gWW91IGNhbiBmaW5kIGtleXdvcmRzIGxpa2UgbmV4dCBpbiB0aGVyZS4gPgorCisJI2RlZmluZSBIQU5HVUxfREVGQVVMVF9LRVlCT0FSRCAyCisJI2RlZmluZSBFU0NfQ0hHX1RPX0VOR19NT0RFCisJLyogI2RlZmluZSBYX0xPQ0FMRSAqLworCS8qICNkZWZpbmUgU0xPV19YU0VSVkVSICovCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3Ugc2hvdWxkIHNldCBMQU5HIHZhcmlhYmxlIHRvIEtvcmVhbiBsb2NhbGUgc3VjaCBhcyBrbyBvciBrb19LUi5ldWMuCitJZiB5b3Ugc2V0IExDX0FMTCB2YXJpYWJsZSwgaXQgc2hvdWxkIGJlIHNldCB0byBLb3JlYW4gbG9jYWxlIGFsc28uCisKK1ZJTSByZXNvdXJjZQorLS0tLS0tLS0tLS0tCitZb3Ugc2hvdWxkIGFkZCBuZXh0cyB0byB5b3VyIGdsb2JhbCB2aW1yYyAoJEhPTUUvLnZpbXJjKS4gPgorCisJOnNldCBmaWxlZW5jb2Rpbmc9a29yZWEKKworS2V5Ym9hcmQKKy0tLS0tLS0tCitZb3UgY2FuIGNoYW5nZSBrZXlib2FyZCB0eXBlICgyIGJ1bHNpayBvciAzIGJ1bHNpaykgdXNpbmcgVklNX0tFWUJPQVJECitvciBIQU5HVUxfS0VZQk9BUkRfVFlQRSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEZvciBzaCwganVzdCBkbyAoMiBidWxzaWspOiA+CisKKyAgICBleHBvcnQgVklNX0tFWUJPQVJEPSIyIgorb3IgPgorICAgIGV4cG9ydCBIQU5HVUxfS0VZQk9BUkRfVFlQRT0iMiIKKworSWYgYm90aCBhcmUgc2V0LCBWSU1fS0VZQk9BUkQgaGFzIGhpZ2hlciBwcmlvcml0eS4KKworSGFuZ3VsIEZvbnRzCistLS0tLS0tLS0tLS0KK1lvdSBjYW4gc2V0IHRleHQgZm9udCB1c2luZyAkSE9NRS8uWGRlZmF1bHRzIG9yICRIT01FLy5ndmltcmMuCitCdXQgdG8gdXNlIEhhbmd1bCwgeW91IHNob3VsZCBzZXQgJ2d1aWZvbnRzZXQnIGluIHlvdXIgdmltcmMuCisKKyRIT01FLy5YZGVmYXVsdHM6ID4KKyAgICBWaW0uZm9udDogZW5nbGlzaF9mb250CisKKyAgICAhIE5leHRzIGFyZSBmb3IgaGFuZ3VsIG1lbnUgd2l0aCBBdGhlbmEKKyAgICAqaW50ZXJuYXRpb25hbDogVHJ1ZQorICAgIFZpbSpmb250U2V0OiBlbmdsaXNoX2ZvbnQsaGFuZ3VsX2ZvbnQKKworICAgICEgTmV4dHMgYXJlIGZvciBoYW5ndWwgbWVudSB3aXRoIE1vdGlmCisgICAgKmludGVybmF0aW9uYWw6IFRydWUKKyAgICBWaW0qZm9udExpc3Q6IGVuZ2xpc2hfZm9udDtoYW5ndWxfZm9udDoKKworJEhPTUUvLmd2aW1yYzogPgorICAgIHNldCBndWlmb250c2V0PWVuZ2xpc2hfZm9udCxoYW5ndWxfZm9udAorCithdHRlbnRpb24hIHRoZSAsIChjb21tYSkgb3IgOyAoc2VtaWNvbG9uKQorCitBbmQgdGhlcmUgc2hvdWxkIGJlIG5vICc6c2V0IGd1aWZvbnQnLiBJZiBpdCBleGlzdHMsIHRoZW4gR3ZpbSBpZ25vcmVzCisnOnNldCBndWlmb250c2V0Jy4gSXQgbWVhbnMgVklNIHJ1bnMgd2l0aG91dCBmb250c2V0IHN1cHBvcnRpbmcuCitTbywgeW91IGNhbiBzZWUgb25seSBFbmdsaXNoLiBIYW5ndWwgZG9lcyBub3QgYmUgY29ycmVjdGx5IGRpc3BsYXllZC4KKworQWZ0ZXIgJ2ZvbnRzZXQnIGZlYXR1cmUgaXMgZW5hYmxlZCwgVklNIGRvZXMgbm90IGFsbG93IHVzaW5nICdmb250Jy4KK0ZvciBleGFtcGxlLCBpZiB5b3UgdXNlID4KKyAgIDpzZXQgZ3VpZm9udHNldD1lbmdfZm9udCx5b3VyX2ZvbnQKK2luIHlvdXIgLmd2aW1yYywgdGhlbiB5b3Ugc2hvdWxkIGRvIGZvciBzeW50YXggPgorICAgOmhpIENvbW1lbnQgZ3VpZmc9Q3lhbiBmb250PWFub3RoZXJfZW5nX2ZvbnQsYW5vdGhlcl95b3VyX2ZvbnQKK0lmIHlvdSBqdXN0IGRvID4KKyAgIDpoaSBDb21tZW50IGZvbnQ9YW5vdGhlcl9lbmdfZm9udAordGhlbiB5b3UgY2FuIHNlZSBhIEdPT0QgZXJyb3IgbWVzc2FnZS4gQmUgY2FyZWZ1bCEKKworaGFuZ3VsX2ZvbnQgd2lkdGggc2hvdWxkIGJlIHR3aWNlIHRoYW4gZW5nbGlzaF9mb250IHdpZHRoLgorCitVbnN1cHBvcnRlZCBGZWF0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tCitKb2hhYiBmb250IG5vdCB5ZXQgc3VwcG9ydGVkLiBBbmQgSSBkb24ndCBoYXZlIGFueSBwbGFuLgorSWYgeW91IHJlYWxseSB3YW50IHRvIHVzZSBqb2hhYiBmb250LCB5b3UgY2FuIHVzZSB0aGUKK2hhbmd1bGRyYXcuYyBpbiBnYXUgcGFja2FnZS4KKworSGFuamEgaW5wdXQgbm90IHlldCBzdXBwb3J0ZWQuIEFuZCBJIGRvbid0IGhhdmUgYW55IHBsYW4uCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gaW5wdXQgaGFuamEsIGp1c3QgdXNlIFZJTSB3aXRoIGhhbnRlcm0uCisKK0J1ZyBvciBDb21tZW50CistLS0tLS0tLS0tLS0tLQorU2VuZCBjb21tZW50cywgcGF0Y2hlcyBhbmQgc3VnZ2VzdGlvbnMgdG86CisKKwkJCQkgICAgQ2hpLURlb2sgSHdhbmcgPGh3YW5nQG1pemkuY28ua3I+CisJCQkJICAgIE5hbSBTdW5nSHl1biA8bmFtc2hAbGdlLmNvbT4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2hlYnJldy50eHQgYi9ydW50aW1lL2RvYy9oZWJyZXcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTVlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9oZWJyZXcudHh0CkBAIC0wLDAgKzEsMTQ1IEBACisqaGVicmV3LnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgTWF5IDExCisKKworCSAgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IFJvbiBBYXJvbiAoYW5kIEF2bmVyIExvdHRlbSkKKworCitIZWJyZXcgTGFuZ3VhZ2Ugc3VwcG9ydCAob3B0aW9ucyAmIG1hcHBpbmcpIGZvciBWaW0JCSpoZWJyZXcqCisKK1RoZSBzdXBwb3J0aW5nICdyaWdodGxlZnQnIGZ1bmN0aW9uYWxpdHkgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBieSBBdm5lcgorTG90dGVtOgorICAgRS1tYWlsOiBhbG90dGVtQGlpbC5pbnRlbC5jb20KKyAgIFBob25lOiAgKzk3Mi00LTgzMDczMjIKKworUm9uIEFhcm9uIDxyb25Acm9ud2FyZS5vcmc+IGlzIGN1cnJlbnRseSBoZWxwaW5nIHN1cHBvcnQgdGhlc2UgZmVhdHVyZXMuCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworQWxsIHRoaXMgaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgfCtyaWdodGxlZnR8IGZlYXR1cmUgd2FzIGVuYWJsZWQgYXQKK2NvbXBpbGUgdGltZS4KKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorSGVicmV3LXNwZWNpZmljIG9wdGlvbnMgYXJlICdoa21hcCcsICdoa21hcHAnICdrZXltYXAnPWhlYnJldyBhbmQgJ2FsZXBoJy4KK0hlYnJldy11c2VmdWwgb3B0aW9ucyBhcmUgJ2RlbGNvbWJpbmUnLCAnYWxsb3dyZXZpbnMnLCAncmV2aW5zJywgJ3JpZ2h0bGVmdCcKK2FuZCAncmlnaHRsZWZ0Y21kJy4KKworVGhlICdyaWdodGxlZnQnIG1vZGUgcmV2ZXJzZXMgdGhlIGRpc3BsYXkgb3JkZXIsIHNvIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZAorZnJvbSByaWdodCB0byBsZWZ0IGluc3RlYWQgb2YgdGhlIHVzdWFsIGxlZnQgdG8gcmlnaHQuICBUaGlzIGlzIHVzZWZ1bAorcHJpbWFyaWx5IHdoZW4gZWRpdGluZyBIZWJyZXcgb3Igb3RoZXIgTWlkZGxlLUVhc3Rlcm4gbGFuZ3VhZ2VzLgorU2VlIHxyaWxlZnQudHh0fCBmb3IgZnVydGhlciBkZXRhaWxzLgorCitEZXRhaWxzCistLS0tLS0tLS0tLS0tLQorKyAgT3B0aW9uczoKKyAgICsgICdyaWdodGxlZnQnICgncmwnKSBzZXRzIHdpbmRvdyBvcmllbnRhdGlvbiB0byByaWdodC10by1sZWZ0LiAgVGhpcyBtZWFucworICAgICAgdGhhdCB0aGUgbG9naWNhbCB0ZXh0ICdBQkMnIHdpbGwgYmUgZGlzcGxheWVkIGFzICdDQkEnLCBhbmQgd2lsbCBzdGFydAorICAgICAgZHJhd2luZyBhdCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgd2luZG93LCBub3QgdGhlIGxlZnQgZWRnZS4KKyAgICsgICdoa21hcCcgKCdoaycpIHNldHMga2V5Ym9hcmQgbWFwcGluZyB0byBIZWJyZXcsIGluIGluc2VydC9yZXBsYWNlIG1vZGVzLgorICAgKyAgJ2FsZXBoJyAoJ2FsJyksIG51bWVyaWMsIGhvbGRzIHRoZSBkZWNpbWFsIGNvZGUgb2YgQWxlcGgsIGZvciBrZXlib2FyZAorICAgICAgbWFwcGluZy4KKyAgICsgICdoa21hcHAnICgnaGtwJykgc2V0cyBrZXlib2FyZCBtYXBwaW5nIHRvICdwaG9uZXRpYyBoZWJyZXcnCisKKyAgIE5PVEU6IHRoZXNlIHRocmVlICgnaGttYXAnLCAnaGttYXBwJyBhbmQgJ2FsZXBoJykgYXJlIG9ic29sZXRlLiAgWW91IHNob3VsZAorCSB1c2UgIjpzZXQga2V5bWFwPWhlYnJld3AiIGluc3RlYWQuCisKKyAgICsgICdkZWxjb21iaW5lJyAoJ2RlY28nKSwgYm9vbGVhbiwgaWYgZWRpdGluZyBVVEYtOCBlbmNvZGVkIEhlYnJldywgYWxsb3dzCisgICAgICBvbmUgdG8gcmVtb3ZlIHRoZSBuaXF1ZCBvciB0ZWBhbWltIGJ5IHByZXNzaW5nICd4JyBvbiBhIGNoYXJhY3RlciAod2l0aAorICAgICAgYXNzb2NpYXRlZCBuaXF1ZCkuCisKKyAgICsgICdyaWdodGxlZnRjbWQnICgncmxjJykgbWFrZXMgdGhlIGNvbW1hbmQtcHJvbXB0IGZvciBzZWFyY2hlcyBzaG93IHVwIG9uCisgICAgICB0aGUgcmlnaHQgc2lkZS4gIEl0IG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSB3aW5kb3cgaXMgJ3JpZ2h0bGVmdCcuCisKKysgIEVuY29kaW5nOgorICAgKyAgVW5kZXIgVW5peCwgSVNPIDg4NTktOCBlbmNvZGluZyAoSGVicmV3IGxldHRlcnMgY29kZXM6IDIyNC0yNTApLgorICAgKyAgVW5kZXIgTVMgRE9TLCBQQyBlbmNvZGluZyAoSGVicmV3IGxldHRlcnMgY29kZXM6IDEyOC0xNTQpLgorICAgICAgVGhlc2UgYXJlIGRlZmF1bHRzLCB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSAnYWxlcGgnIG9wdGlvbi4KKyAgICsgIFlvdSBzaG91bGQgcHJlZmVyIHVzaW5nIFVURjgsIGFzIGl0IHN1cHBvcnRzIHRoZSBjb21iaW5pbmctY2hhcmFjdGVycworICAgICAgKCdkZWNvJyBkb2VzIG5vdGhpbmcgaWYgVVRGOCBlbmNvZGluZyBpcyBub3QgYWN0aXZlKS4KKworKyAgVmltIGFyZ3VtZW50czoKKyAgICsgICd2aW0gLUggZmlsZScgc3RhcnRzIGVkaXRpbmcgYSBIZWJyZXcgZmlsZSwgaS5lLiAncmlnaHRsZWZ0JyBhbmQgJ2hrbWFwJworICAgICAgYXJlIHNldC4KKworKyAgS2V5Ym9hcmQ6CisgICArICBUaGUgJ2FsbG93cmV2aW5zJyBvcHRpb24gZW5hYmxlcyB0aGUgQ1RSTC1fIGNvbW1hbmQgaW4gSW5zZXJ0IG1vZGUgYW5kCisgICAgICBpbiBDb21tYW5kLWxpbmUgbW9kZS4KKworICAgKyAgQ1RSTC1fIGluIGluc2VydC9yZXBsYWNlIG1vZGVzIHRvZ2dsZXMgJ3JldmlucycgYW5kICdoa21hcCcgYXMgZm9sbG93czoKKworICAgICAgV2hlbiBpbiByaWdodGxlZnQgd2luZG93LCAncmV2aW5zJyBhbmQgJ25vaGttYXAnIGFyZSB0b2dnbGVkLCBzaW5jZQorICAgICAgRW5nbGlzaCB3aWxsIGxpa2VseSBiZSBpbnNlcnRlZCBpbiB0aGlzIGNhc2UuCisKKyAgICAgIFdoZW4gaW4gbm9yaWdodGxlZnQgd2luZG93LCAncmV2aW5zJyAnaGttYXAnIGFyZSB0b2dnbGVkLCBzaW5jZSBIZWJyZXcKKyAgICAgIHdpbGwgbGlrZWx5IGJlIGluc2VydGVkIGluIHRoaXMgY2FzZS4KKworICAgICAgQ1RSTC1fIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgdHlwZWQgdGV4dC4KKworICAgKyAgQ1RSTC1fIGluIGNvbW1hbmQgbW9kZSBvbmx5IHRvZ2dsZXMga2V5Ym9hcmQgbWFwcGluZyAoc2VlIEJ1Z3MgYmVsb3cpLgorICAgICAgVGhpcyBzZXR0aW5nIGlzIGluZGVwZW5kZW50IG9mICdoa21hcCcgb3B0aW9uLCB3aGljaCBvbmx5IGFwcGxpZXMgdG8KKyAgICAgIGluc2VydC9yZXBsYWNlIG1vZGUuCisKKyAgICAgIE5vdGU6IE9uIHNvbWUga2V5Ym9hcmRzLCBDVFJMLV8gaXMgbWFwcGVkIHRvIENUUkwtPy4KKworICAgKyAgS2V5Ym9hcmQgbWFwcGluZyB3aGlsZSAnaGttYXAnIGlzIHNldCAoc3RhbmRhcmQgSXNyYWVsaSBrZXlib2FyZCk6CisKKwlxIHcgZSByIHQgeSB1IGkgbyBwCisJLyAnINenINeoINeQINeYINeVINefINedINekCisKKwkgYSBzIGQgZiBnIGggaiBrIGwgOyAnCisJINepINeTINeSINebINeiINeZINeXINecINeaINejICwKKworCSAgeiB4IGMgdiBiIG4gbSAsIC4gLworCSAg15Yg16Eg15Eg15Qg16Ag154g16Yg16og16UgLgorCisgICAgICBUaGlzIGlzIGFsc28gdGhlIGtleW1hcCB3aGVuICdrZXltYXA9aGVicmV3JyBpcyBzZXQuICBUaGUgYWR2YW50YWdlIG9mCisgICAgICAna2V5bWFwJyBpcyB0aGF0IGl0IHdvcmtzIHByb3Blcmx5IHdoZW4gdXNpbmcgVVRGOCwgZS5nLiBpdCBpbnNlcnRzIHRoZQorICAgICAgY29ycmVjdCBjaGFyYWN0ZXJzOyAnaGttYXAnIGRvZXMgbm90LiAgVGhlICdrZXltYXAnIGtleWJvYXJkIGNhbiBhbHNvCisgICAgICBpbnNlcnQgbmlxdWQgYW5kIHRlYGFtaW0uICBUbyBzZWUgd2hhdCB0aG9zZSBtYXBwaW5ncyBhcmUsbG9vayBhdCB0aGUKKyAgICAgIGtleW1hcCBmaWxlICdoZWJyZXcudmltJyBldGMuCisKKworVHlwaW5nIGJhY2t3YXJkcworCitJZiB0aGUgJ3JldmlucycgKHJldmVyc2UgaW5zZXJ0KSBvcHRpb24gaXMgc2V0LCBpbnNlcnRpbmcgaGFwcGVucyBiYWNrd2FyZHMuCitUaGlzIGNhbiBiZSB1c2VkIHRvIHR5cGUgSGVicmV3LiAgV2hlbiBpbnNlcnRpbmcgY2hhcmFjdGVycyB0aGUgY3Vyc29yIGlzIG5vdAorbW92ZWQgYW5kIHRoZSB0ZXh0IG1vdmVzIHJpZ2h0d2FyZHMuICBBIDxCUz4gZGVsZXRlcyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZQorY3Vyc29yLiAgQ1RSTC1XIGFuZCBDVFJMLVUgYWxzbyB3b3JrIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uICA8QlM+LCBDVFJMLVcKK2FuZCBDVFJMLVUgZG8gbm90IHN0b3AgYXQgdGhlIHN0YXJ0IG9mIGluc2VydCBvciBlbmQgb2YgbGluZSwgbm8gbWF0dGVyIGhvdwordGhlICdiYWNrc3BhY2UnIG9wdGlvbiBpcyBzZXQuCisKK1RoZXJlIGlzIG5vIHJldmVyc2UgcmVwbGFjZSBtb2RlICh5ZXQpLgorCitJZiB0aGUgJ3Nob3dtb2RlJyBvcHRpb24gaXMgc2V0LCAiLS0gUkVWRVJTRSBJTlNFUlQgLS0iIHdpbGwgYmUgc2hvd24gaW4gdGhlCitzdGF0dXMgbGluZSB3aGVuIHJldmVyc2UgSW5zZXJ0IG1vZGUgaXMgYWN0aXZlLgorCitXaGVuIHRoZSAnYWxsb3dyZXZpbnMnIG9wdGlvbiBpcyBzZXQsIHJldmVyc2UgSW5zZXJ0IG1vZGUgY2FuIGJlIGFsc28gZW50ZXJlZAordmlhIENUUkwtXywgd2hpY2ggaGFzIHNvbWUgZXh0cmEgZnVuY3Rpb25hbGl0eTogRmlyc3QsIGtleWJvYXJkIG1hcHBpbmcgaXMKK2NoYW5nZWQgYWNjb3JkaW5nIHRvIHRoZSB3aW5kb3cgb3JpZW50YXRpb24gLS0gaWYgaW4gYSBsZWZ0LXRvLXJpZ2h0IHdpbmRvdywKKydyZXZpbnMnIGlzIHVzZWQgdG8gZW50ZXIgSGVicmV3IHRleHQsIHNvIHRoZSBrZXlib2FyZCBjaGFuZ2VzIHRvIEhlYnJldworKCdoa21hcCcgaXMgc2V0KTsgaWYgaW4gYSByaWdodC10by1sZWZ0IHdpbmRvdywgJ3JldmlucycgaXMgdXNlZCB0byBlbnRlcgorRW5nbGlzaCB0ZXh0LCBzbyB0aGUga2V5Ym9hcmQgY2hhbmdlcyB0byBFbmdsaXNoICgnaGttYXAnIGlzIHJlc2V0KS4gIFNlY29uZCwKK3doZW4gZXhpdGluZyAncmV2aW5zJyB2aWEgQ1RSTC1fLCB0aGUgY3Vyc29yIG1vdmVzIHRvIHRoZSBlbmQgb2YgdGhlIHR5cGVkCit0ZXh0IChpZiBwb3NzaWJsZSkuCisKKworUGFzdGluZyB3aGVuIGluIGEgcmlnaHRsZWZ0IHdpbmRvdworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hlbiBjdXR0aW5nIHRleHQgd2l0aCB0aGUgbW91c2UgYW5kIHBhc3RpbmcgaXQgaW4gYSByaWdodGxlZnQgd2luZG93Cit0aGUgdGV4dCB3aWxsIGJlIHJldmVyc2VkLCBiZWNhdXNlIHRoZSBjaGFyYWN0ZXJzIGNvbWUgZnJvbSB0aGUgY3V0IGJ1ZmZlcgorZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQsIHdoaWxlIGluc2VydGVkIGluIHRoZSBmaWxlIGZyb20gdGhlIHJpZ2h0IHRvCit0aGUgbGVmdC4gICBJbiBvcmRlciB0byBhdm9pZCBpdCwgdG9nZ2xlICdyZXZpbnMnIChieSB0eXBpbmcgQ1RSTC0/IG9yIENUUkwtXykKK2JlZm9yZSBwYXN0aW5nLgorCisKK0hlYnJldyBjaGFyYWN0ZXJzIGFuZCB0aGUgJ2lzcHJpbnQnIHZhcmlhYmxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29tZXRpbWVzIEhlYnJldyBjaGFyYWN0ZXIgY29kZXMgYXJlIGluIHRoZSBub24tcHJpbnRhYmxlIHJhbmdlIGRlZmluZWQgYnkKK3RoZSAnaXNwcmludCcgdmFyaWFibGUuICBGb3IgZXhhbXBsZSBpbiB0aGUgTGludXggY29uc29sZSwgdGhlIEhlYnJldyBmb250CitlbmNvZGluZyBzdGFydHMgZnJvbSAxMjgsIHdoaWxlIHRoZSBkZWZhdWx0ICdpc3ByaW50JyB2YXJpYWJsZSBpcyBALDE2MS0yNTUuCitUaGUgcmVzdWx0IGlzIHRoYXQgYWxsIEhlYnJldyBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgYXMgfnguICBUbyBzb2x2ZSB0aGlzCitwcm9ibGVtLCBzZXQgaXNwcmludD1ALDEyOC0yNTUuCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2hlbHAudHh0IGIvcnVudGltZS9kb2MvaGVscC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxNGU0YwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2hlbHAudHh0CkBAIC0wLDAgKzEsMTk3IEBACisqaGVscC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwNAorCisJCQlWSU0gLSBtYWluIGhlbHAgZmlsZQorCQkJCQkJCQkJIGsKKyAgICAgIE1vdmUgYXJvdW5kOiAgVXNlIHRoZSBjdXJzb3Iga2V5cywgb3IgImgiIHRvIGdvIGxlZnQsCSAgICAgICBoICAgbAorCQkgICAgImoiIHRvIGdvIGRvd24sICJrIiB0byBnbyB1cCwgImwiIHRvIGdvIHJpZ2h0LgkgagorQ2xvc2UgdGhpcyB3aW5kb3c6ICBVc2UgIjpxPEVudGVyPiIuCisgICBHZXQgb3V0IG9mIFZpbTogIFVzZSAiOnFhITxFbnRlcj4iIChjYXJlZnVsLCBhbGwgY2hhbmdlcyBhcmUgbG9zdCEpLgorCitKdW1wIHRvIGEgc3ViamVjdDogIFBvc2l0aW9uIHRoZSBjdXJzb3Igb24gYSB0YWcgYmV0d2VlbiB8YmFyc3wgYW5kIGhpdCBDVFJMLV0uCisgICBXaXRoIHRoZSBtb3VzZTogICI6c2V0IG1vdXNlPWEiIHRvIGVuYWJsZSB0aGUgbW91c2UgKGluIHh0ZXJtIG9yIEdVSSkuCisJCSAgICBEb3VibGUtY2xpY2sgdGhlIGxlZnQgbW91c2UgYnV0dG9uIG9uIGEgdGFnIGJldHdlZW4gfGJhcnN8LgorCUp1bXAgYmFjazogIFR5cGUgQ1RSTC1UIG9yIENUUkwtTyAocmVwZWF0IHRvIGdvIGZ1cnRoZXIgYmFjaykuCisKK0dldCBzcGVjaWZpYyBoZWxwOiAgSXQgaXMgcG9zc2libGUgdG8gZ28gZGlyZWN0bHkgdG8gd2hhdGV2ZXIgeW91IHdhbnQgaGVscAorCQkgICAgb24sIGJ5IGdpdmluZyBhbiBhcmd1bWVudCB0byB0aGUgIjpoZWxwIiBjb21tYW5kIHw6aGVscHwuCisJCSAgICBJdCBpcyBwb3NzaWJsZSB0byBmdXJ0aGVyIHNwZWNpZnkgdGhlIGNvbnRleHQ6CisJCQkJCQkJKmhlbHAtY29udGV4dCoKKwkJCSAgV0hBVAkJCVBSRVBFTkQgICAgRVhBTVBMRQl+CisJCSAgICAgIE5vcm1hbCBtb2RlIGNvbW1hbmRzICAgICAobm90aGluZykgICA6aGVscCB4CisJCSAgICAgIFZpc3VhbCBtb2RlIGNvbW1hbmRzCSAgdl8JICAgOmhlbHAgdl91CisJCSAgICAgIEluc2VydCBtb2RlIGNvbW1hbmRzCSAgaV8JICAgOmhlbHAgaV88RXNjPgorCQkgICAgICBDb21tYW5kLWxpbmUgY29tbWFuZHMJICA6CSAgIDpoZWxwIDpxdWl0CisJCSAgICAgIENvbW1hbmQtbGluZSBlZGl0aW5nCSAgY18JICAgOmhlbHAgY188RGVsPgorCQkgICAgICBWaW0gY29tbWFuZCBhcmd1bWVudHMJICAtCSAgIDpoZWxwIC1yCisJCSAgICAgIE9wdGlvbnMJCQkgICcJICAgOmhlbHAgJ3RleHR3aWR0aCcKKyAgU2VhcmNoIGZvciBoZWxwOiAgVHlwZSAiOmhlbHAgd29yZCIsIHRoZW4gaGl0IENUUkwtRCB0byBzZWUgbWF0Y2hpbmcKKwkJICAgIGhlbHAgZW50cmllcyBmb3IgIndvcmQiLgorCitWSU0gc3RhbmRzIGZvciBWaSBJTXByb3ZlZC4gIE1vc3Qgb2YgVklNIHdhcyBtYWRlIGJ5IEJyYW0gTW9vbGVuYWFyLCBidXQgb25seQordGhyb3VnaCB0aGUgaGVscCBvZiBtYW55IG90aGVycy4gIFNlZSB8Y3JlZGl0c3wuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQkJCSpkb2MtZmlsZS1saXN0KiAqUV9jdCoKK0JBU0lDOgorfHF1aWNrcmVmfAlPdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb24gY29tbWFuZHMgeW91IHdpbGwgdXNlCit8dHV0b3J8CQkzMCBtaW51dGVzIHRyYWluaW5nIGNvdXJzZSBmb3IgYmVnaW5uZXJzCit8Y29weWluZ3wJQWJvdXQgY29weXJpZ2h0cworfGljY2Z8CQlIZWxwaW5nIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhCit8c3BvbnNvcnwJU3BvbnNvciBWaW0gZGV2ZWxvcG1lbnQsIGJlY29tZSBhIHJlZ2lzdGVyZWQgVmltIHVzZXIKK3x3d3d8CQlWaW0gb24gdGhlIFdvcmxkIFdpZGUgV2ViCit8YnVnc3wJCVdoZXJlIHRvIHNlbmQgYnVnIHJlcG9ydHMKKworVVNFUiBNQU5VQUw6IFRoZXNlIGZpbGVzIGV4cGxhaW4gaG93IHRvIGFjY29tcGxpc2ggYW4gZWRpdGluZyB0YXNrLgorCit8dXNyX3RvYy50eHR8CVRhYmxlIE9mIENvbnRlbnRzCisKK0dldHRpbmcgU3RhcnRlZCB+Cit8dXNyXzAxLnR4dHwgIEFib3V0IHRoZSBtYW51YWxzCit8dXNyXzAyLnR4dHwgIFRoZSBmaXJzdCBzdGVwcyBpbiBWaW0KK3x1c3JfMDMudHh0fCAgTW92aW5nIGFyb3VuZAorfHVzcl8wNC50eHR8ICBNYWtpbmcgc21hbGwgY2hhbmdlcworfHVzcl8wNS50eHR8ICBTZXQgeW91ciBzZXR0aW5ncworfHVzcl8wNi50eHR8ICBVc2luZyBzeW50YXggaGlnaGxpZ2h0aW5nCit8dXNyXzA3LnR4dHwgIEVkaXRpbmcgbW9yZSB0aGFuIG9uZSBmaWxlCit8dXNyXzA4LnR4dHwgIFNwbGl0dGluZyB3aW5kb3dzCit8dXNyXzA5LnR4dHwgIFVzaW5nIHRoZSBHVUkKK3x1c3JfMTAudHh0fCAgTWFraW5nIGJpZyBjaGFuZ2VzCit8dXNyXzExLnR4dHwgIFJlY292ZXJpbmcgZnJvbSBhIGNyYXNoCit8dXNyXzEyLnR4dHwgIENsZXZlciB0cmlja3MKKworRWRpdGluZyBFZmZlY3RpdmVseSB+Cit8dXNyXzIwLnR4dHwgIFR5cGluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMgcXVpY2tseQorfHVzcl8yMS50eHR8ICBHbyBhd2F5IGFuZCBjb21lIGJhY2sKK3x1c3JfMjIudHh0fCAgRmluZGluZyB0aGUgZmlsZSB0byBlZGl0Cit8dXNyXzIzLnR4dHwgIEVkaXRpbmcgb3RoZXIgZmlsZXMKK3x1c3JfMjQudHh0fCAgSW5zZXJ0aW5nIHF1aWNrbHkKK3x1c3JfMjUudHh0fCAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAorfHVzcl8yNi50eHR8ICBSZXBlYXRpbmcKK3x1c3JfMjcudHh0fCAgU2VhcmNoIGNvbW1hbmRzIGFuZCBwYXR0ZXJucworfHVzcl8yOC50eHR8ICBGb2xkaW5nCit8dXNyXzI5LnR4dHwgIE1vdmluZyB0aHJvdWdoIHByb2dyYW1zCit8dXNyXzMwLnR4dHwgIEVkaXRpbmcgcHJvZ3JhbXMKK3x1c3JfMzEudHh0fCAgRXhwbG9pdGluZyB0aGUgR1VJCisKK1R1bmluZyBWaW0gfgorfHVzcl80MC50eHR8ICBNYWtlIG5ldyBjb21tYW5kcworfHVzcl80MS50eHR8ICBXcml0ZSBhIFZpbSBzY3JpcHQKK3x1c3JfNDIudHh0fCAgQWRkIG5ldyBtZW51cworfHVzcl80My50eHR8ICBVc2luZyBmaWxldHlwZXMKK3x1c3JfNDQudHh0fCAgWW91ciBvd24gc3ludGF4IGhpZ2hsaWdodGVkCit8dXNyXzQ1LnR4dHwgIFNlbGVjdCB5b3VyIGxhbmd1YWdlCisKK01ha2luZyBWaW0gUnVuIH4KK3x1c3JfOTAudHh0fCAgSW5zdGFsbGluZyBWaW0KKworCitSRUZFUkVOQ0UgTUFOVUFMOiBUaGVzZSBmaWxlcyBleHBsYWluIGV2ZXJ5IGRldGFpbCBvZiBWaW0uCisKK0dlbmVyYWwgc3ViamVjdHMgfgorfGludHJvLnR4dHwJZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gVmltOyBub3RhdGlvbiB1c2VkIGluIGhlbHAgZmlsZXMKK3xoZWxwLnR4dHwJb3ZlcnZpZXcgYW5kIHF1aWNrIHJlZmVyZW5jZSAodGhpcyBmaWxlKQorfGluZGV4LnR4dHwJYWxwaGFiZXRpY2FsIGluZGV4IG9mIGFsbCBjb21tYW5kcworfGhlbHAtdGFnc3wJYWxsIHRoZSB0YWdzIHlvdSBjYW4ganVtcCB0byAoaW5kZXggb2YgdGFncykKK3xob3d0by50eHR8CWhvdyB0byBkbyB0aGUgbW9zdCBjb21tb24gZWRpdGluZyB0YXNrcworfHRpcHMudHh0fAl2YXJpb3VzIHRpcHMgb24gdXNpbmcgVmltCit8bWVzc2FnZS50eHR8CShlcnJvcikgbWVzc2FnZXMgYW5kIGV4cGxhbmF0aW9ucworfHF1b3Rlcy50eHR8CXJlbWFya3MgZnJvbSB1c2VycyBvZiBWaW0KK3x0b2RvLnR4dHwJa25vd24gcHJvYmxlbXMgYW5kIGRlc2lyZWQgZXh0ZW5zaW9ucworfGRldmVsb3AudHh0fAlkZXZlbG9wbWVudCBvZiBWaW0KK3x1Z2FuZGEudHh0fAlWaW0gZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYW5kIHdoYXQgdG8gZG8gd2l0aCB5b3VyIG1vbmV5CisKK0Jhc2ljIGVkaXRpbmcgfgorfHN0YXJ0aW5nLnR4dHwJc3RhcnRpbmcgVmltLCBWaW0gY29tbWFuZCBhcmd1bWVudHMsIGluaXRpYWxpc2F0aW9uCit8ZWRpdGluZy50eHR8CWVkaXRpbmcgYW5kIHdyaXRpbmcgZmlsZXMKK3xtb3Rpb24udHh0fAljb21tYW5kcyBmb3IgbW92aW5nIGFyb3VuZAorfHNjcm9sbC50eHR8CXNjcm9sbGluZyB0aGUgdGV4dCBpbiB0aGUgd2luZG93Cit8aW5zZXJ0LnR4dHwJSW5zZXJ0IGFuZCBSZXBsYWNlIG1vZGUKK3xjaGFuZ2UudHh0fAlkZWxldGluZyBhbmQgcmVwbGFjaW5nIHRleHQKK3xpbmRlbnQudHh0fAlhdXRvbWF0aWMgaW5kZW50aW5nIGZvciBDIGFuZCBvdGhlciBsYW5ndWFnZXMKK3x1bmRvLnR4dHwJVW5kbyBhbmQgUmVkbworfHJlcGVhdC50eHR8CXJlcGVhdGluZyBjb21tYW5kcywgVmltIHNjcmlwdHMgYW5kIGRlYnVnZ2luZworfHZpc3VhbC50eHR8CXVzaW5nIHRoZSBWaXN1YWwgbW9kZSAoc2VsZWN0aW5nIGEgdGV4dCBhcmVhKQorfHZhcmlvdXMudHh0fAl2YXJpb3VzIHJlbWFpbmluZyBjb21tYW5kcworfHJlY292ZXIudHh0fAlyZWNvdmVyaW5nIGZyb20gYSBjcmFzaAorCitBZHZhbmNlZCBlZGl0aW5nIH4KK3xjbWRsaW5lLnR4dHwJQ29tbWFuZC1saW5lIGVkaXRpbmcKK3xvcHRpb25zLnR4dHwJZGVzY3JpcHRpb24gb2YgYWxsIG9wdGlvbnMKK3xwYXR0ZXJuLnR4dHwJcmVnZXhwIHBhdHRlcm5zIGFuZCBzZWFyY2ggY29tbWFuZHMKK3xtYXAudHh0fAlrZXkgbWFwcGluZyBhbmQgYWJicmV2aWF0aW9ucworfHRhZ3NyY2gudHh0fAl0YWdzIGFuZCBzcGVjaWFsIHNlYXJjaGVzCit8cXVpY2tmaXgudHh0fAljb21tYW5kcyBmb3IgYSBxdWljayBlZGl0LWNvbXBpbGUtZml4IGN5Y2xlCit8d2luZG93cy50eHR8CWNvbW1hbmRzIGZvciB1c2luZyBtdWx0aXBsZSB3aW5kb3dzIGFuZCBidWZmZXJzCit8c3ludGF4LnR4dHwJc3ludGF4IGhpZ2hsaWdodGluZworfGRpZmYudHh0fAl3b3JraW5nIHdpdGggdHdvIG9yIHRocmVlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGZpbGUKK3xhdXRvY21kLnR4dHwJYXV0b21hdGljYWxseSBleGVjdXRpbmcgY29tbWFuZHMgb24gYW4gZXZlbnQKK3xmaWxldHlwZS50eHR8CXNldHRpbmdzIGRvbmUgc3BlY2lmaWNhbGx5IGZvciBhIHR5cGUgb2YgZmlsZQorfGV2YWwudHh0fAlleHByZXNzaW9uIGV2YWx1YXRpb24sIGNvbmRpdGlvbmFsIGNvbW1hbmRzCit8Zm9sZC50eHR8CWhpZGUgKGZvbGQpIHJhbmdlcyBvZiBsaW5lcworCitTcGVjaWFsIGlzc3VlcyB+Cit8cmVtb3RlLnR4dHwJdXNpbmcgVmltIGFzIGEgc2VydmVyIG9yIGNsaWVudAorfHRlcm0udHh0fAl1c2luZyBkaWZmZXJlbnQgdGVybWluYWxzIGFuZCBtaWNlCit8ZGlncmFwaC50eHR8CWxpc3Qgb2YgYXZhaWxhYmxlIGRpZ3JhcGhzCit8bWJ5dGUudHh0fAltdWx0aS1ieXRlIHRleHQgc3VwcG9ydAorfG1sYW5nLnR4dHwJbm9uLUVuZ2xpc2ggbGFuZ3VhZ2Ugc3VwcG9ydAorfGFyYWJpYy50eHR8CUFyYWJpYyBsYW5ndWFnZSBzdXBwb3J0IGFuZCBlZGl0aW5nCit8ZmFyc2kudHh0fAlGYXJzaSAoUGVyc2lhbikgZWRpdGluZworfGhlYnJldy50eHR8CUhlYnJldyBsYW5ndWFnZSBzdXBwb3J0IGFuZCBlZGl0aW5nCit8cnVzc2lhbi50eHR8CVJ1c3NpYW4gbGFuZ3VhZ2Ugc3VwcG9ydCBhbmQgZWRpdGluZworfGhhbmd1bGluLnR4dHwJSGFuZ3VsIChLb3JlYW4pIGlucHV0IG1vZGUKK3xyaWxlZnQudHh0fAlyaWdodC10by1sZWZ0IGVkaXRpbmcgbW9kZQorCitHVUkgfgorfGd1aS50eHR8CUdyYXBoaWNhbCBVc2VyIEludGVyZmFjZSAoR1VJKQorfGd1aV93MTYudHh0fAlXaW5kb3dzIDMuMSBHVUkKK3xndWlfdzMyLnR4dHwJV2luMzIgR1VJCit8Z3VpX3gxMS50eHR8CVgxMSBHVUkKKworSW50ZXJmYWNlcyB+Cit8aWZfY3Njb3AudHh0fAl1c2luZyBjc2NvcGUgd2l0aCBWaW0KK3xpZl9wZXJsLnR4dHwJUGVybCBpbnRlcmZhY2UKK3xpZl9weXRoLnR4dHwJUHl0aG9uIGludGVyZmFjZQorfGlmX3NuaWZmLnR4dHwJU05pRkYrIGludGVyZmFjZQorfGlmX3RjbC50eHR8CVRjbCBpbnRlcmZhY2UKK3xpZl9vbGUudHh0fAlPTEUgYXV0b21hdGlvbiBpbnRlcmZhY2UgZm9yIFdpbjMyCit8aWZfcnVieS50eHR8CVJ1YnkgaW50ZXJmYWNlCit8ZGVidWdnZXIudHh0fAlJbnRlcmZhY2Ugd2l0aCBhIGRlYnVnZ2VyCit8d29ya3Nob3AudHh0fAlTdW4gVmlzdWFsIFdvcmtzaG9wIGludGVyZmFjZQorfG5ldGJlYW5zLnR4dHwJTmV0QmVhbnMgRXh0ZXJuYWwgRWRpdG9yIGludGVyZmFjZQorfHNpZ24udHh0fAlkZWJ1Z2dpbmcgc2lnbnMKKworVmVyc2lvbnMgfgorfHZpX2RpZmYudHh0fAlNYWluIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltIGFuZCBWaQorfHZlcnNpb240LnR4dHwJRGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gdmVyc2lvbiAzLjAgYW5kIDQueAorfHZlcnNpb241LnR4dHwJRGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gdmVyc2lvbiA0LjYgYW5kIDUueAorfHZlcnNpb242LnR4dHwJRGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gdmVyc2lvbiA1LjcgYW5kIDYueAorCQkJCQkJKnN5cy1maWxlLWxpc3QqCitSZW1hcmtzIGFib3V0IHNwZWNpZmljIHN5c3RlbXMgfgorfG9zXzM5MC50eHR8CU9TLzM5MCBVbml4Cit8b3NfYW1pZ2EudHh0fAlBbWlnYQorfG9zX2Jlb3MudHh0fAlCZU9TIGFuZCBCZUJveAorfG9zX2Rvcy50eHR8CU1TLURPUyBhbmQgTVMtV2luZG93cyBOVC85NSBjb21tb24gaXRlbXMKK3xvc19tYWMudHh0fAlNYWNpbnRvc2gKK3xvc19taW50LnR4dHwJQXRhcmkgTWlOVAorfG9zX21zZG9zLnR4dHwJTVMtRE9TIChwbGFpbiBET1MgYW5kIERPUyBib3ggdW5kZXIgV2luZG93cykKK3xvc19vczIudHh0fAlPUy8yCit8b3NfcW54LnR4dHwJUU5YCit8b3NfcmlzYy50eHR8CVJJU0MtT1MKK3xvc191bml4LnR4dHwJVW5peAorfG9zX3Ztcy50eHR8CVZNUworfG9zX3dpbjMyLnR4dHwJTVMtV2luZG93cyA5NS85OC9OVAorCQkJCQkJKnN0YW5kYXJkLXBsdWdpbi1saXN0KgorU3RhbmRhcmQgcGx1Z2lucyB+Cit8cGlfbmV0cncudHh0fAlSZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIG92ZXIgYSBuZXR3b3JrCit8cGlfZ3ppcC50eHR8CVJlYWRpbmcgYW5kIHdyaXRpbmcgY29tcHJlc3NlZCBmaWxlcworfHBpX2V4cGwudHh0fAlGaWxlIGV4cGxvcmVyCisKK0xPQ0FMIEFERElUSU9OUzoJCQkJKmxvY2FsLWFkZGl0aW9ucyoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqYmFycyoJCUJhcnMgZXhhbXBsZQorCitOb3cgdGhhdCB5b3UndmUganVtcGVkIGhlcmUgd2l0aCBDVFJMLV0gb3IgYSBkb3VibGUgbW91c2UgY2xpY2ssIHlvdSBjYW4gdXNlCitDVFJMLVQsIENUUkwtTywgZzxSaWdodE1vdXNlPiwgb3IgPEMtUmlnaHRNb3VzZT4gdG8gZ28gYmFjayB0byB3aGVyZSB5b3Ugd2VyZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHZpbTp0dz03ODpmbz10Y3EyOmlzaz0hLX4sXiosXlx8LF5cIjp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2hlbHAudHh0LmluZm8gYi9ydW50aW1lL2RvYy9oZWxwLnR4dC5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmOGRmODEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9oZWxwLnR4dC5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2hvd3RvLnR4dCBiL3J1bnRpbWUvZG9jL2hvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTk5MTkwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaG93dG8udHh0CkBAIC0wLDAgKzEsOTYgQEAKKypob3d0by50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAxIFNlcCAwMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworSG93IHRvIC4uLgkJCQkqaG93ZG9pKiAqaG93LWRvLWkqICpob3d0byogKmhvdy10byoKKworfHR1dG9yfAkJCWdldCBzdGFydGVkCit8OnF1aXR8CQkJZXhpdD8gIEknbSB0cmFwcGVkLCBoZWxwIG1lIQorfGluaXRpYWxpemF0aW9ufAlpbml0aWFsaXplIFZpbQorfHZpbXJjLWludHJvfAkJd3JpdGUgYSBWaW0gc2NyaXB0IGZpbGUgKHZpbXJjKQorfHN1c3BlbmR8CQlzdXNwZW5kIFZpbQorfHVzcl8xMS50eHR8CQlyZWNvdmVyIGFmdGVyIGEgY3Jhc2gKK3wwNy40fAkJCWtlZXAgYSBiYWNrdXAgb2YgbXkgZmlsZSB3aGVuIHdyaXRpbmcgb3ZlciBpdAorCit8dXNyXzA3LnR4dHwJCWVkaXQgZmlsZXMKK3wyMy40fAkJCWVkaXQgYmluYXJ5IGZpbGVzCit8dXNyXzI0LnR4dHwJCWluc2VydCB0ZXh0Cit8ZGVsZXRpbmd8CQlkZWxldGUgdGV4dAorfHVzcl8wNC50eHR8CQljaGFuZ2UgdGV4dAorfDA0LjV8CQkJY29weSBhbmQgbW92ZSB0ZXh0Cit8dXNyXzI1LnR4dHwJCWZvcm1hdCB0ZXh0Cit8MzAuNnwJCQlmb3JtYXQgY29tbWVudHMKK3wzMC4yfAkJCWluZGVudCBDIHByb2dyYW1zCit8MjUuM3wJCQlhdXRvbWF0aWNhbGx5IHNldCBpbmRlbnQKKworfHVzcl8yNi50eHR8CQlyZXBlYXQgY29tbWFuZHMKK3wwMi41fAkJCXVuZG8gYW5kIHJlZG8KKworfHVzcl8wMy50eHR8CQltb3ZlIGFyb3VuZAorfHdvcmQtbW90aW9uc3wJCXdvcmQgbW90aW9ucworfGxlZnQtcmlnaHQtbW90aW9uc3wJbGVmdC1yaWdodCBtb3Rpb25zCit8dXAtZG93bi1tb3Rpb25zfAl1cC1kb3duIG1vdGlvbnMKK3xvYmplY3QtbW90aW9uc3wJdGV4dC1vYmplY3QgbW90aW9ucworfHZhcmlvdXMtbW90aW9uc3wJdmFyaW91cyBtb3Rpb25zCit8b2JqZWN0LXNlbGVjdHwJCXRleHQtb2JqZWN0IHNlbGVjdGlvbgorfCd3aGljaHdyYXAnfAkJbW92ZSBvdmVyIGxpbmUgYnJlYWtzCit8J3ZpcnR1YWxlZGl0J3wJCW1vdmUgdG8gd2hlcmUgdGhlcmUgaXMgbm8gdGV4dAorfHVzcl8yNy50eHR8CQlzcGVjaWZ5IHBhdHRlcm4gZm9yIHNlYXJjaGVzCit8dGFncy1hbmQtc2VhcmNoZXN8CWRvIHRhZ3MgYW5kIHNwZWNpYWwgc2VhcmNoZXMKK3wyOS40fAkJCXNlYXJjaCBpbiBpbmNsdWRlJ2QgZmlsZXMgdXNlZCB0byBmaW5kCisJCQl2YXJpYWJsZXMsIGZ1bmN0aW9ucywgb3IgbWFjcm9zCit8S3wJCQlsb29rIHVwIG1hbnVhbCBmb3IgdGhlIGtleXdvcmQgdW5kZXIgY3Vyc29yCisKK3wwMy43fAkJCXNjcm9sbAorfCdzaWRlc2Nyb2xsJ3wJCXNjcm9sbCBob3Jpem9udGFsbHkvc2lkZXdheXMKK3wnc2Nyb2xsb2ZmJ3wJCXNldCB2aXNpYmxlIGNvbnRleHQgbGluZXMKKworfG1vZGUtc3dpdGNoaW5nfAljaGFuZ2UgbW9kZXMKK3wwNC40fAkJCXVzZSBWaXN1YWwgbW9kZQorfCdpbnNlcnRtb2RlJ3wJCXN0YXJ0IFZpbSBpbiBJbnNlcnQgbW9kZQorCit8NDAuMXwJCQltYXAga2V5cworfDI0Ljd8CQkJY3JlYXRlIGFiYnJldmlhdGlvbnMKKworfGlucy1leHBhbmR0YWJ8CQlleHBhbmQgYSB0YWIgdG8gc3BhY2VzIGluIEluc2VydCBtb2RlCit8aV9DVFJMLVJ8CQlpbnNlcnQgY29udGVudHMgb2YgYSByZWdpc3RlciBpbiBJbnNlcnQgbW9kZQorfDI0LjN8CQkJY29tcGxldGUgd29yZHMgaW4gSW5zZXJ0IG1vZGUKK3wyNS4xfAkJCWJyZWFrIGEgbGluZSBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZworCit8MjAuMXwJCQlkbyBjb21tYW5kLWxpbmUgZWRpdGluZworfDIwLjN8CQkJZG8gY29tbWFuZC1saW5lIGNvbXBsZXRpb24KK3wnY21kaGVpZ2h0J3wJCWluY3JlYXNlIHRoZSBoZWlnaHQgb2YgY29tbWFuZC1saW5lCit8MTAuM3wJCQlzcGVjaWZ5IGNvbW1hbmQtbGluZSByYW5nZXMKK3w0MC4zfAkJCXNwZWNpZnkgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseQorCQkJYmVmb3JlL2FmdGVyIHJlYWRpbmcvd3JpdGluZyBlbnRlcmluZy9sZWF2aW5nIGEKKwkJCWJ1ZmZlci93aW5kb3cKKworfCdhdXRvd3JpdGUnfAkJd3JpdGUgYXV0b21hdGljYWxseQorfDMwLjF8CQkJc3BlZWR1cCBlZGl0LWNvbXBpbGUtZWRpdCBjeWNsZSBvciBjb21waWxlIGFuZCBmaXgKKwkJCWVycm9ycyB3aXRoaW4gVmltCisKK3xvcHRpb25zfAkJc2V0IG9wdGlvbnMKK3xhdXRvLXNldHRpbmd8CQlzZXQgb3B0aW9ucyBhdXRvbWF0aWNhbGx5Cit8dGVybS1kZXBlbmRlbnQtc2V0dGluZ3N8IHNldCBvcHRpb25zIGRlcGVuZGluZyBvbiB0ZXJtaW5hbCBuYW1lCit8c2F2ZS1zZXR0aW5nc3wJCXNhdmUgc2V0dGluZ3MKK3w6cXVvdGV8CQljb21tZW50IG15IGV4cmMvdmltcmMvZ3ZpbXJjIGZpbGVzCit8J2hlbHBoZWlnaHQnfAkJY2hhbmdlIHRoZSBkZWZhdWx0IGhlbHAgaGVpZ2h0Cit8J2hpZ2hsaWdodCd8CQlzZXQgdmFyaW91cyBoaWdobGlnaHRpbmcgbW9kZXMKK3wndGl0bGUnfAkJc2V0IHRoZSB3aW5kb3cgdGl0bGUKK3wnaWNvbid8CQlzZXQgd2luZG93IGljb24gdGl0bGUKK3wncmVwb3J0J3wJCWF2b2lkIHNlZWluZyB0aGUgY2hhbmdlIG1lc3NhZ2VzIG9uIGV2ZXJ5IGxpbmUKK3wnc2hvcnRtZXNzJ3wJCWF2b2lkIHxoaXQtZW50ZXJ8IHByb21wdHMKKworfG1vdXNlLXVzaW5nfAkJdXNlIG1vdXNlIHdpdGggVmltCit8dXNyXzA4LnR4dHwJCW1hbmFnZSBtdWx0aXBsZSB3aW5kb3dzIGFuZCBidWZmZXJzCit8Z3VpLnR4dHwJCXVzZSB0aGUgZ3VpCisKK3xZb3UgY2FuJ3QhICh5ZXQpfAlkbyBkaXNoZXMgdXNpbmcgVmltCisKK3x1c3JfMDYudHh0fAkJc3dpdGNoIG9uIHN5bnRheCBoaWdobGlnaHRpbmcKK3wyaHRtbC52aW18CQljb252ZXJ0IGEgY29sb3JlZCBmaWxlIHRvIEhUTUwKK3xsZXNzfAkJCXVzZSBWaW0gbGlrZSBsZXNzIG9yIG1vcmUgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pZl9jc2NvcC50eHQgYi9ydW50aW1lL2RvYy9pZl9jc2NvcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmZjY2YwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2lmX2NzY29wLnR4dApAQCAtMCwwICsxLDQ3NCBAQAorKmlmX2NzY29wLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEphbiAxNworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBBbmR5IEthaG4KKworCQkJCQkJCSpjc2NvcGUqICpDc2NvcGUqCitUaGlzIGRvY3VtZW50IGV4cGxhaW5zIGhvdyB0byB1c2UgVmltJ3MgY3Njb3BlIGludGVyZmFjZS4KKworQ3Njb3BlIGlzIGEgdG9vbCBsaWtlIGN0YWdzLCBidXQgdGhpbmsgb2YgaXQgYXMgY3RhZ3Mgb24gc3Rlcm9pZHMgc2luY2UgaXQKK2RvZXMgYSBsb3QgbW9yZSB0aGFuIHdoYXQgY3RhZ3MgcHJvdmlkZXMuICBJbiBWaW0sIGp1bXBpbmcgdG8gYSByZXN1bHQgZnJvbQorYSBjc2NvcGUgcXVlcnkgaXMganVzdCBsaWtlIGp1bXBpbmcgdG8gYW55IHRhZzsgaXQgaXMgc2F2ZWQgb24gdGhlIHRhZyBzdGFjaworc28gdGhhdCB3aXRoIHRoZSByaWdodCBrZXlib2FyZCBtYXBwaW5ncywgeW91IGNhbiBqdW1wIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KK2Z1bmN0aW9ucyBhcyB5b3Ugbm9ybWFsbHkgd291bGQgd2l0aCB8dGFnc3wuCisKKzEuIENzY29wZSBpbnRyb2R1Y3Rpb24JCXxjc2NvcGUtaW50cm98CisyLiBDc2NvcGUgcmVsYXRlZCBjb21tYW5kcwl8Y3Njb3BlLWNvbW1hbmRzfAorMy4gQ3Njb3BlIG9wdGlvbnMJCXxjc2NvcGUtb3B0aW9uc3wKKzQuIEhvdyB0byB1c2UgY3Njb3BlIGluIFZpbQl8Y3Njb3BlLWhvd3RvdXNlfAorNS4gTGltaXRhdGlvbnMJCQl8Y3Njb3BlLWxpbWl0YXRpb25zfAorNi4gU3VnZ2VzdGVkIHVzYWdlCQl8Y3Njb3BlLXN1Z2dlc3Rpb25zfAorNy4gQXZhaWxhYmlsaXR5ICYgSW5mb3JtYXRpb24JfGNzY29wZS1pbmZvfAorCitUaGlzIGlzIGN1cnJlbnRseSBmb3IgVW5peCBhbmQgV2luMzIgb25seS4KK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBDc2NvcGUgaW50cm9kdWN0aW9uCQkJCQkqY3Njb3BlLWludHJvKgorCitUaGUgZm9sbG93aW5nIHRleHQgaXMgdGFrZW4gZnJvbSBhIHZlcnNpb24gb2YgdGhlIGNzY29wZSBtYW4gcGFnZToKKworCQkJCSAgICAtLS0tLQorCisgIENzY29wZSBpcyBhbiBpbnRlcmFjdGl2ZSBzY3JlZW4tb3JpZW50ZWQgdG9vbCB0aGF0IGhlbHBzIHlvdToKKworICAgICAgIExlYXJuIGhvdyBhIEMgcHJvZ3JhbSB3b3JrcyB3aXRob3V0IGVuZGxlc3MgZmxpcHBpbmcgdGhyb3VnaCBhIHRoaWNrCisgICAgICAgbGlzdGluZy4KKworICAgICAgIExvY2F0ZSB0aGUgc2VjdGlvbiBvZiBjb2RlIHRvIGNoYW5nZSB0byBmaXggYSBidWcgd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICBsZWFybiB0aGUgZW50aXJlIHByb2dyYW0uCisKKyAgICAgICBFeGFtaW5lIHRoZSBlZmZlY3Qgb2YgYSBwcm9wb3NlZCBjaGFuZ2Ugc3VjaCBhcyBhZGRpbmcgYSB2YWx1ZSB0byBhbgorICAgICAgIGVudW0gdmFyaWFibGUuCisKKyAgICAgICBWZXJpZnkgdGhhdCBhIGNoYW5nZSBoYXMgYmVlbiBtYWRlIGluIGFsbCBzb3VyY2UgZmlsZXMgc3VjaCBhcyBhZGRpbmcKKyAgICAgICBhbiBhcmd1bWVudCB0byBhbiBleGlzdGluZyBmdW5jdGlvbi4KKworICAgICAgIFJlbmFtZSBhIGdsb2JhbCB2YXJpYWJsZSBpbiBhbGwgc291cmNlIGZpbGVzLgorCisgICAgICAgQ2hhbmdlIGEgY29uc3RhbnQgdG8gYSBwcmVwcm9jZXNzb3Igc3ltYm9sIGluIHNlbGVjdGVkIGxpbmVzIG9mIGZpbGVzLgorCisgIEl0IGlzIGRlc2lnbmVkIHRvIGFuc3dlciBxdWVzdGlvbnMgbGlrZToKKyAgICAgICBXaGVyZSBpcyB0aGlzIHN5bWJvbCB1c2VkPworICAgICAgIFdoZXJlIGlzIGl0IGRlZmluZWQ/CisgICAgICAgV2hlcmUgZGlkIHRoaXMgdmFyaWFibGUgZ2V0IGl0cyB2YWx1ZT8KKyAgICAgICBXaGF0IGlzIHRoaXMgZ2xvYmFsIHN5bWJvbCdzIGRlZmluaXRpb24/CisgICAgICAgV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGZpbGVzPworICAgICAgIFdoYXQgZnVuY3Rpb25zIGNhbGwgdGhpcyBmdW5jdGlvbj8KKyAgICAgICBXaGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IHRoaXMgZnVuY3Rpb24/CisgICAgICAgV2hlcmUgZG9lcyB0aGUgbWVzc2FnZSAib3V0IG9mIHNwYWNlIiBjb21lIGZyb20/CisgICAgICAgV2hlcmUgaXMgdGhpcyBzb3VyY2UgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZT8KKyAgICAgICBXaGF0IGZpbGVzIGluY2x1ZGUgdGhpcyBoZWFkZXIgZmlsZT8KKworICBDc2NvcGUgYW5zd2VycyB0aGVzZSBxdWVzdGlvbnMgZnJvbSBhIHN5bWJvbCBkYXRhYmFzZSB0aGF0IGl0IGJ1aWxkcyB0aGUKKyAgZmlyc3QgdGltZSBpdCBpcyB1c2VkIG9uIHRoZSBzb3VyY2UgZmlsZXMuICBPbiBhIHN1YnNlcXVlbnQgY2FsbCwgY3Njb3BlCisgIHJlYnVpbGRzIHRoZSBkYXRhYmFzZSBvbmx5IGlmIGEgc291cmNlIGZpbGUgaGFzIGNoYW5nZWQgb3IgdGhlIGxpc3Qgb2YKKyAgc291cmNlIGZpbGVzIGlzIGRpZmZlcmVudC4gIFdoZW4gdGhlIGRhdGFiYXNlIGlzIHJlYnVpbHQgdGhlIGRhdGEgZm9yIHRoZQorICB1bmNoYW5nZWQgZmlsZXMgaXMgY29waWVkIGZyb20gdGhlIG9sZCBkYXRhYmFzZSwgd2hpY2ggbWFrZXMgcmVidWlsZGluZworICBtdWNoIGZhc3RlciB0aGFuIHRoZSBpbml0aWFsIGJ1aWxkLgorCisJCQkJICAgIC0tLS0tCisKK1doZW4gY3Njb3BlIGlzIG5vcm1hbGx5IGludm9rZWQsIHlvdSB3aWxsIGdldCBhIGZ1bGwtc2NyZWVuIHNlbGVjdGlvbgorc2NyZWVuIGFsbG93aW5nIHlvdSB0byBtYWtlIGEgcXVlcnkgZm9yIG9uZSBvZiB0aGUgYWJvdmUgcXVlc3Rpb25zLgorSG93ZXZlciwgb25jZSBhIG1hdGNoIGlzIGZvdW5kIHRvIHlvdXIgcXVlcnkgYW5kIHlvdSBoYXZlIGVudGVyZWQgeW91cgordGV4dCBlZGl0b3IgdG8gZWRpdCB0aGUgc291cmNlIGZpbGUgY29udGFpbmluZyBtYXRjaCwgeW91IGNhbm5vdCBzaW1wbHkKK2p1bXAgZnJvbSB0YWcgdG8gdGFnIGFzIHlvdSBub3JtYWxseSB3b3VsZCB3aXRoIHZpJ3MgQ3RybC1dIG9yIDp0YWcKK2NvbW1hbmQuCisKK1ZpbSdzIGNzY29wZSBpbnRlcmZhY2UgaXMgZG9uZSBieSBpbnZva2luZyBjc2NvcGUgd2l0aCBpdHMgbGluZS1vcmllbnRlZAoraW50ZXJmYWNlLCBhbmQgdGhlbiBwYXJzaW5nIHRoZSBvdXRwdXQgcmV0dXJuZWQgZnJvbSBhIHF1ZXJ5LiAgVGhlIGVuZAorcmVzdWx0IGlzIHRoYXQgY3Njb3BlIHF1ZXJ5IHJlc3VsdHMgYmVjb21lIGp1c3QgbGlrZSByZWd1bGFyIHRhZ3MsIHNvCit5b3UgY2FuIGp1bXAgdG8gdGhlbSBqdXN0IGxpa2UgeW91IGRvIHdpdGggbm9ybWFsIHRhZ3MgKEN0cmwtXSBvciA6dGFnKQorYW5kIHRoZW4gZ28gYmFjayBieSBwb3BwaW5nIG9mZiB0aGUgdGFnc3RhY2sgd2l0aCBDdHJsLVQuICAoUGxlYXNlIG5vdGUKK2hvd2V2ZXIsIHRoYXQgeW91IGRvbid0IGFjdHVhbGx5IGp1bXAgdG8gYSBjc2NvcGUgdGFnIHNpbXBseSBieSBkb2luZworQ3RybC1dIG9yIDp0YWcgd2l0aG91dCByZW1hcHBpbmcgdGhlc2UgY29tbWFuZHMgb3Igc2V0dGluZyBhbiBvcHRpb24uCitTZWUgdGhlIHJlbWFpbmluZyBzZWN0aW9ucyBvbiBob3cgdGhlIGNzY29wZSBpbnRlcmZhY2Ugd29ya3MgYW5kIGZvcgorc3VnZ2VzdGVkIHVzZS4pCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBDc2NvcGUgcmVsYXRlZCBjb21tYW5kcwkJCQkqY3Njb3BlLWNvbW1hbmRzKgorCisJCSo6Y3Njb3BlKiAqOmNzKiAqOnNjcyogKjpzY3Njb3BlKiAqRTI1OSogKkUyNjIqICpFNTYxKiAqRTU2MCoKK0FsbCBjc2NvcGUgY29tbWFuZHMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggc3Vib3B0aW9ucyB0byB0aGUgbWFpbiBjc2NvcGUKK2NvbW1hbmQgIjpjc2NvcGUiLiAgVGhlIHNob3J0ZXN0IGFiYnJldmlhdGlvbiBpcyAiOmNzIi4gIFRoZSAiOnNjc2NvcGUiCitjb21tYW5kIGRvZXMgdGhlIHNhbWUgYW5kIGFsc28gc3BsaXRzIHRoZSB3aW5kb3cgKHNob3J0OiAic2NzIikuCisKK1RoZSBhdmFpbGFibGUgc3ViY29tbWFuZHMgYXJlOgorCisJCQkqRTU2MyogKkU1NjQqICpFNTY2KiAqRTU2OCogKkU1NjkqICpFNjIyKiAqRTYyMyoKKwkJCSpFNjI1KiAqRTYyNiogKkU2MDkqCisgICAgYWRkICAgOiBBZGQgYSBuZXcgY3Njb3BlIGRhdGFiYXNlL2Nvbm5lY3Rpb24uCisKKwlVU0FHRQk6Y3MgYWRkIHtmaWxlfGRpcn0gW3ByZS1wYXRoXSBbZmxhZ3NdCisKKwkgICAgW3ByZS1wYXRoXSBpcyB0aGUgcGF0aG5hbWUgdXNlZCB3aXRoIHRoZSAtUCBjb21tYW5kIHRvIGNzY29wZS4KKworCSAgICBbZmxhZ3NdIGFyZSBhbnkgYWRkaXRpb25hbCBmbGFncyB5b3Ugd2FudCB0byBwYXNzIHRvIGNzY29wZS4KKworCUVYQU1QTEVTID4KKwkgICAgOmNzY29wZSBhZGQgL3Vzci9sb2NhbC9jZGIvY3Njb3BlLm91dAorCSAgICA6Y3Njb3BlIGFkZCAvcHJvamVjdHMvdmltL2NzY29wZS5vdXQgL3Vzci9sb2NhbC92aW0KKwkgICAgOmNzY29wZSBhZGQgY3Njb3BlLm91dCAvdXNyL2xvY2FsL3ZpbSAtQworPAorCQkJCSAgICAgICpjc2NvcGUtZmluZCogKmNzLWZpbmQqCisJCQkJCQkqRTU2NSogKkU1NjcqCisgICAgZmluZCAgOiBRdWVyeSBjc2NvcGUuICBBbGwgY3Njb3BlIHF1ZXJ5IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorCSAgICBleGNlcHQgb3B0aW9uICM1ICgiQ2hhbmdlIHRoaXMgZ3JlcCBwYXR0ZXJuIikuCisKKwlVU0FHRQk6Y3MgZmluZCB7cXVlcnl0eXBlfSB7bmFtZX0KKworCSAgICB7cXVlcnl0eXBlfSBjb3JyZXNwb25kcyB0byB0aGUgYWN0dWFsIGNzY29wZSBsaW5lCisJICAgIGludGVyZmFjZSBudW1iZXJzIGFzIHdlbGwgYXMgZGVmYXVsdCBudmkgY29tbWFuZHM6CisKKwkJMCBvciBzOiBGaW5kIHRoaXMgQyBzeW1ib2wKKwkJMSBvciBnOiBGaW5kIHRoaXMgZGVmaW5pdGlvbgorCQkyIG9yIGQ6IEZpbmQgZnVuY3Rpb25zIGNhbGxlZCBieSB0aGlzIGZ1bmN0aW9uCisJCTMgb3IgYzogRmluZCBmdW5jdGlvbnMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisJCTQgb3IgdDogRmluZCB0aGlzIHRleHQgc3RyaW5nCisJCTYgb3IgZTogRmluZCB0aGlzIGVncmVwIHBhdHRlcm4KKwkJNyBvciBmOiBGaW5kIHRoaXMgZmlsZQorCQk4IG9yIGk6IEZpbmQgZmlsZXMgI2luY2x1ZGluZyB0aGlzIGZpbGUKKworCUVYQU1QTEVTID4KKwkgICAgOmNzY29wZSBmaW5kIGMgdmltX2ZyZWUKKwkgICAgOmNzY29wZSBmaW5kIDMgdmltX2ZyZWUKKzwKKwkgICAgVGhlc2UgdHdvIGV4YW1wbGVzIHBlcmZvcm0gdGhlIHNhbWUgcXVlcnkuID4KKworCSAgICA6Y3Njb3BlIGZpbmQgMCBERUZBVUxUX1RFUk0KKzwKKwkgICAgRXhlY3V0aW5nIHRoaXMgZXhhbXBsZSBvbiB0aGUgc291cmNlIGNvZGUgZm9yIFZpbSA1LjEgcHJvZHVjZXMgdGhlCisJICAgIGZvbGxvd2luZyBvdXRwdXQ6CisKKwkgICAgQ3Njb3BlIHRhZzogREVGQVVMVF9URVJNCisJICAgICAgICMgICBsaW5lICBmaWxlbmFtZSAvIGNvbnRleHQgLyBsaW5lCisJICAgICAgIDEgICAxMDA5ICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8R0xPQkFMPj4KKwkJCSAjZGVmaW5lIERFRkFVTFRfVEVSTSAoY2hhcl91ICopImFtaWdhIgorCSAgICAgICAyICAgMTAxMyAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgI2RlZmluZSBERUZBVUxUX1RFUk0gKGNoYXJfdSAqKSJ3aW4zMiIKKwkgICAgICAgMyAgIDEwMTcgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikicGN0ZXJtIgorCSAgICAgICA0ICAgMTAyMSAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgI2RlZmluZSBERUZBVUxUX1RFUk0gKGNoYXJfdSAqKSJhbnNpIgorCSAgICAgICA1ICAgMTAyNSAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgI2RlZmluZSBERUZBVUxUX1RFUk0gKGNoYXJfdSAqKSJ2dDUyIgorCSAgICAgICA2ICAgMTAyOSAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgI2RlZmluZSBERUZBVUxUX1RFUk0gKGNoYXJfdSAqKSJvczJhbnNpIgorCSAgICAgICA3ICAgMTAzMyAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgI2RlZmluZSBERUZBVUxUX1RFUk0gKGNoYXJfdSAqKSJhbnNpIgorCSAgICAgICA4ICAgMTAzNyAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgIyB1bmRlZiBERUZBVUxUX1RFUk0KKwkgICAgICAgOSAgIDEwMzggIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxHTE9CQUw+PgorCQkJICNkZWZpbmUgREVGQVVMVF9URVJNIChjaGFyX3UgKikiYmVvcy1hbnNpIgorCSAgICAgIDEwICAgMTA0MiAgdmltLTUuMS1ndGsvc3JjL3Rlcm0uYyA8PEdMT0JBTD4+CisJCQkgI2RlZmluZSBERUZBVUxUX1RFUk0gKGNoYXJfdSAqKSJtYWMtYW5zaSIKKwkgICAgICAxMSAgIDEzMzUgIHZpbS01LjEtZ3RrL3NyYy90ZXJtLmMgPDxzZXRfdGVybW5hbWU+PgorCQkJIHRlcm0gPSBERUZBVUxUX1RFUk07CisJICAgICAgMTIgICAxNDU5ICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8c2V0X3Rlcm1uYW1lPj4KKwkJCSBpZiAoU1RSQ01QKHRlcm0sIERFRkFVTFRfVEVSTSkpCisJICAgICAgMTMgICAxODI2ICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8dGVybWNhcGluaXQ+PgorCQkJIHRlcm0gPSBERUZBVUxUX1RFUk07CisJICAgICAgMTQgICAxODMzICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8dGVybWNhcGluaXQ+PgorCQkJIHRlcm0gPSBERUZBVUxUX1RFUk07CisJICAgICAgMTUgICAzNjM1ICB2aW0tNS4xLWd0ay9zcmMvdGVybS5jIDw8dXBkYXRlX3RjYXA+PgorCQkJIHAgPSBmaW5kX2J1aWx0aW5fdGVybShERUZBVUxUX1RFUk0pOworCSAgICBFbnRlciBuciBvZiBjaG9pY2UgKDxDUj4gdG8gYWJvcnQpOgorCisJICAgIFRoZSBvdXRwdXQgc2hvd3Mgc2V2ZXJhbCBwaWVjZXMgb2YgaW5mb3JtYXRpb246CisJICAgIDEuIFRoZSB0YWcgbnVtYmVyICh0aGVyZSBhcmUgMTUgaW4gdGhpcyBleGFtcGxlKS4KKwkgICAgMi4gVGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSB0YWcgb2NjdXJzLgorCSAgICAzLiBUaGUgZmlsZW5hbWUgd2hlcmUgdGhlIHRhZyBvY2N1cnMuCisJICAgIDQuIFRoZSBjb250ZXh0IG9mIHRoZSB0YWcgKGUuZy4sIGdsb2JhbCwgb3IgdGhlIGZ1bmN0aW9uIG5hbWUpLgorCSAgICA1LiBUaGUgbGluZSBmcm9tIHRoZSBmaWxlIGl0c2VsZi4KKworICAgIGhlbHAgIDogU2hvdyBhIGJyaWVmIHN5bm9wc2lzLgorCisJICAgIFVTQUdFICAgOmNzIGhlbHAKKworCQkJCQkJKkUyNjAqICpFMjYxKgorICAgIGtpbGwgIDogS2lsbCBhIGNzY29wZSBjb25uZWN0aW9uIChvciBraWxsIGFsbCBjc2NvcGUgY29ubmVjdGlvbnMpLgorCisJICAgIFVTQUdFICAgOmNzIGtpbGwge251bXxwYXJ0aWFsX25hbWV9CisKKwkgICAgVG8ga2lsbCBhIGNzY29wZSBjb25uZWN0aW9uLCB0aGUgY29ubmVjdGlvbiBudW1iZXIgb3IgYSBwYXJ0aWFsCisJICAgIG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuICBUaGUgcGFydGlhbCBuYW1lIGlzIHNpbXBseSBhbnkgcGFydCBvZgorCSAgICB0aGUgcGF0aG5hbWUgb2YgdGhlIGNzY29wZSBkYXRhYmFzZS4gIEtpbGwgYSBjc2NvcGUgY29ubmVjdGlvbgorCSAgICB1c2luZyB0aGUgcGFydGlhbCBuYW1lIHdpdGggY2F1dGlvbiEKKworCSAgICBJZiB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gbnVtYmVyIGlzIC0xLCB0aGVuIF9BTExfIGNzY29wZQorCSAgICBjb25uZWN0aW9ucyB3aWxsIGJlIGtpbGxlZC4KKworICAgIHJlc2V0IDogUmVpbml0IGFsbCBjc2NvcGUgY29ubmVjdGlvbnMuCisKKwkgICAgVVNBR0UgICA6Y3MgcmVzZXQKKworICAgIHNob3cgIDogU2hvdyBjc2NvcGUgY29ubmVjdGlvbnMuCisKKwkgICAgVVNBR0UgICA6Y3Mgc2hvdworCisJCQkJCQkJKjpjc3RhZyogKkUyNTcqICpFNTYyKgorSWYgeW91IHVzZSBjc2NvcGUgYXMgd2VsbCBhcyBjdGFncywgfDpjc3RhZ3wgYWxsb3dzIHlvdSB0byBzZWFyY2ggb25lIG9yCit0aGUgb3RoZXIgYmVmb3JlIG1ha2luZyBhIGp1bXAuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjaG9vc2UgdG8gZmlyc3QKK3NlYXJjaCB5b3VyIGNzY29wZSBkYXRhYmFzZShzKSBmb3IgYSBtYXRjaCwgYW5kIGlmIG9uZSBpcyBub3QgZm91bmQsIHRoZW4KK3lvdXIgdGFncyBmaWxlKHMpIHdpbGwgYmUgc2VhcmNoZWQuICBUaGUgb3JkZXIgaW4gd2hpY2ggdGhpcyBoYXBwZW5zCitpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiB8Y3N0b3wuICBTZWUgfGNzY29wZS1vcHRpb25zfCBmb3IgbW9yZQorZGV0YWlscy4KKworfDpjc3RhZ3wgcGVyZm9ybXMgdGhlIGVxdWl2YWxlbnQgb2YgIjpjcyBmaW5kIGciIG9uIHRoZSBpZGVudGlmaWVyIHdoZW4KK3NlYXJjaGluZyB0aHJvdWdoIHRoZSBjc2NvcGUgZGF0YWJhc2UocykuCisKK3w6Y3N0YWd8IHBlcmZvcm1zIHRoZSBlcXVpdmFsZW50IG9mIHw6dGp1bXB8IG9uIHRoZSBpZGVudGlmaWVyIHdoZW4gc2VhcmNoaW5nCit0aHJvdWdoIHlvdXIgdGFncyBmaWxlKHMpLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gQ3Njb3BlIG9wdGlvbnMJCQkJCSpjc2NvcGUtb3B0aW9ucyoKKworVXNlIHRoZSB8OnNldHwgY29tbWFuZCB0byBzZXQgYWxsIGNzY29wZSBvcHRpb25zLiAgSWRlYWxseSwgeW91IHdvdWxkIGRvCit0aGlzIGluIG9uZSBvZiB5b3VyIHN0YXJ0dXAgZmlsZXMgKGUuZy4sIC52aW1yYykuICBTb21lIGNzY29wZSByZWxhdGVkCit2YXJpYWJsZXMgYXJlIG9ubHkgdmFsaWQgd2l0aGluIHwudmltcmN8LiAgU2V0dGluZyB0aGVtIGFmdGVyIHZpbSBoYXMKK3N0YXJ0ZWQgd2lsbCBoYXZlIG5vIGVmZmVjdCEKKworCQkJCQkJCSpjc2NvcGVwcmcqICpjc3ByZyoKKydjc2NvcGVwcmcnIHNwZWNpZmllcyB0aGUgY29tbWFuZCB0byBleGVjdXRlIGNzY29wZS4gIFRoZSBkZWZhdWx0IGlzCisiY3Njb3BlIi4gIEZvciBleGFtcGxlOiA+CisJOnNldCBjc3ByZz0vdXNyL2xvY2FsL2Jpbi9jc2NvcGUKKzwKKwkJCQkJICAgICpjc2NvcGVxdWlja2ZpeCogKmNzcWYqICpFNDY5Kgore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fCBmZWF0dXJlfQorJ2NzY29wZXF1aWNrZml4JyBzcGVjaWZpZXMgd2hldGhlciB0byB1c2UgcXVpY2tmaXggd2luZG93IHRvIHNob3cgY3Njb3BlCityZXN1bHRzLiBUaGlzIGlzIGEgbGlzdCBvZiBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzLiBFYWNoIGl0ZW0gY29uc2lzdHMgb2YKK3xjc2NvcGUtZmluZHwgY29tbWFuZCAocywgZywgZCwgYywgdCwgZSwgZiBvciBpKSBhbmQgZmxhZyAoKywgLSBvciAwKS4KKycrJyBpbmRpY2F0ZXMgdGhhdCByZXN1bHRzIG11c3QgYmUgYXBwZW5kZWQgdG8gcXVpY2tmaXggd2luZG93LAorJy0nIGltcGxpZXMgcHJldmlvdXMgcmVzdWx0cyBjbGVhcmFuY2UsICcwJyBvciBjb21tYW5kIGFic2VuY2UgLSBkb24ndCB1c2UKK3F1aWNrZml4LiBTZWFyY2ggaXMgcGVyZm9ybWVkIGZyb20gc3RhcnQgdW50aWwgZmlyc3QgY29tbWFuZCBvY2N1cnJlbmNlLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgIiIgKGRvbid0IHVzZSBxdWlja2ZpeCBhbnl3YXkpLiBUaGUgZm9sbG93aW5nIHZhbHVlCitzZWVtcyB0byBiZSB1c2VmdWw6ICJzLSxjLSxkLSxpLSx0LSxlLSIuCisKKwkJCQkJCQkqY3Njb3BldGFnKiAqY3N0KgorSWYgJ2NzY29wZXRhZycgc2V0LCB0aGUgY29tbWFuZHMgIjp0YWciIGFuZCBDVFJMLV0gYXMgd2VsbCBhcyAidmltIC10IiB3aWxsCithbHdheXMgdXNlIHw6Y3N0YWd8IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgOnRhZyBiZWhhdmlvci4gIEVmZmVjdGl2ZWx5LCBieQorc2V0dGluZyAnY3N0JywgeW91IHdpbGwgYWx3YXlzIHNlYXJjaCB5b3VyIGNzY29wZSBkYXRhYmFzZXMgYXMgd2VsbCBhcyB5b3VyCit0YWcgZmlsZXMuICBUaGUgZGVmYXVsdCBpcyBvZmYuICBFeGFtcGxlczogPgorCTpzZXQgY3N0CisJOnNldCBub2NzdAorPAorCQkJCQkJCSpjc2NvcGV0YWdvcmRlciogKmNzdG8qCitUaGUgdmFsdWUgb2YgJ2NzdG8nIGRldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoIHw6Y3N0YWd8IHBlcmZvcm1zIGEgc2VhcmNoLgorSWYgJ2NzdG8nIGlzIHNldCB0byB6ZXJvLCBjc2NvcGUgZGF0YWJhc2UocykgYXJlIHNlYXJjaGVkIGZpcnN0LCBmb2xsb3dlZAorYnkgdGFnIGZpbGUocykgaWYgY3Njb3BlIGRpZCBub3QgcmV0dXJuIGFueSBtYXRjaGVzLiAgSWYgJ2NzdG8nIGlzIHNldCB0bworb25lLCB0YWcgZmlsZShzKSBhcmUgc2VhcmNoZWQgYmVmb3JlIGNzY29wZSBkYXRhYmFzZShzKS4gIFRoZSBkZWZhdWx0IGlzIHplcm8uCitFeGFtcGxlczogPgorCTpzZXQgY3N0bz0wCisJOnNldCBjc3RvPTEKKzwKKwkJCQkJCSpjc2NvcGV2ZXJib3NlKiAqY3N2ZXJiKgorSWYgJ2NzY29wZXZlcmJvc2UnIGlzIG5vdCBzZXQgKHRoZSBkZWZhdWx0KSwgbWVzc2FnZXMgd2lsbCBub3QgYmUgcHJpbnRlZAoraW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgd2hlbiBhZGRpbmcgYSBjc2NvcGUgZGF0YWJhc2UuICBJZGVhbGx5LCB5b3UKK3Nob3VsZCByZXNldCB0aGlzIG9wdGlvbiBpbiB5b3VyIHwudmltcmN8IGJlZm9yZSBhZGRpbmcgYW55IGNzY29wZSBkYXRhYmFzZXMsCithbmQgYWZ0ZXIgYWRkaW5nIHRoZW0sIHNldCBpdC4gIEZyb20gdGhlbiBvbiwgd2hlbiB5b3UgYWRkIG1vcmUgZGF0YWJhc2VzCit3aXRoaW4gVmltLCB5b3Ugd2lsbCBnZXQgYSAoaG9wZWZ1bGx5KSB1c2VmdWwgbWVzc2FnZSBzaG91bGQgdGhlIGRhdGFiYXNlIGZhaWwKK3RvIGJlIGFkZGVkLiAgRXhhbXBsZXM6ID4KKwk6c2V0IGNzdmVyYgorCTpzZXQgbm9jc3ZlcmIKKzwKKwkJCQkJCSAgICAgICpjc2NvcGVwYXRoY29tcCogKmNzcGMqCitUaGUgdmFsdWUgb2YgJ2NzcGMnIGRldGVybWluZXMgaG93IG1hbnkgY29tcG9uZW50cyBvZiBhIGZpbGUncyBwYXRoIHRvCitkaXNwbGF5LiAgV2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB6ZXJvIHRoZSBlbnRpcmUgcGF0aCB3aWxsIGJlIGRpc3BsYXllZC4KK1RoZSB2YWx1ZSBvbmUgd2lsbCBkaXNwbGF5IG9ubHkgdGhlIGZpbGVuYW1lIHdpdGggbm8gcGF0aC4gIE90aGVyIHZhbHVlcworZGlzcGxheSB0aGF0IG1hbnkgY29tcG9uZW50cy4gIEZvciBleGFtcGxlOiA+CisJOnNldCBjc3BjPTMKK3dpbGwgZGlzcGxheSB0aGUgbGFzdCAzIGNvbXBvbmVudHMgb2YgdGhlIGZpbGUncyBwYXRoLCBpbmNsdWRpbmcgdGhlIGZpbGUKK25hbWUgaXRzZWxmLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIEhvdyB0byB1c2UgY3Njb3BlIGluIFZpbQkJCQkqY3Njb3BlLWhvd3RvdXNlKgorCitUaGUgZmlyc3QgdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgdG8gYnVpbGQgYSBjc2NvcGUgZGF0YWJhc2UgZm9yIHlvdXIKK3NvdXJjZSBmaWxlcy4gIEZvciB0aGUgbW9zdCBiYXNpYyBjYXNlLCBzaW1wbHkgZG8gImNzY29wZSAtYiIuICBQbGVhc2UKK3JlZmVyIHRvIHRoZSBjc2NvcGUgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworQXNzdW1pbmcgeW91IGhhdmUgYSBjc2NvcGUgZGF0YWJhc2UsIHlvdSBuZWVkIHRvICJhZGQiIHRoZSBkYXRhYmFzZSB0byBWaW0uCitUaGlzIGVzdGFibGlzaGVzIGEgY3Njb3BlICJjb25uZWN0aW9uIiBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBWaW0gdG8gdXNlLgorWW91IGNhbiBkbyB0aGlzIGluIHlvdXIgLnZpbXJjIGZpbGUsIG9yIHlvdSBjYW4gZG8gaXQgbWFudWFsbHkgYWZ0ZXIgc3RhcnRpbmcKK3ZpbS4gIEZvciBleGFtcGxlLCB0byBhZGQgdGhlIGNzY29wZSBkYXRhYmFzZSAiY3Njb3BlLm91dCIsIHlvdSB3b3VsZCBkbzoKKworCTpjcyBhZGQgY3Njb3BlLm91dAorCitZb3UgY2FuIGRvdWJsZS1jaGVjayB0aGUgcmVzdWx0IG9mIHRoaXMgYnkgZXhlY3V0aW5nICI6Y3Mgc2hvdyIuICBUaGlzIHdpbGwKK3Byb2R1Y2Ugb3V0cHV0IHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKKworICMgcGlkCSAgZGF0YWJhc2UgbmFtZQkJCSAgICAgIHByZXBlbmQgcGF0aAorIDAgMjg4MDYgIGNzY29wZS5vdXQJCQkgICAgICA8bm9uZT4KKworTm90ZToKK0JlY2F1c2Ugb2YgdGhlIE1pY3Jvc29mdCBSVEwgbGltaXRhdGlvbnMsIFdpbjMyIHZlcnNpb24gc2hvd3MgMCBpbnN0ZWFkCitvZiB0aGUgcmVhbCBwaWQuCisKK09uY2UgYSBjc2NvcGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgeW91IGNhbiBtYWtlIHF1ZXJpZXMgdG8gY3Njb3BlIGFuZAordGhlIHJlc3VsdHMgd2lsbCBiZSBwcmludGVkIHRvIHlvdS4gIFF1ZXJpZXMgYXJlIG1hZGUgdXNpbmcgdGhlIGNvbW1hbmQKKyI6Y3MgZmluZCIuICBGb3IgZXhhbXBsZToKKworCTpjcyBmaW5kIGcgQUxJR05fU0laRQorCitUaGlzIGNhbiBnZXQgYSBsaXR0bGUgY3VtYmVyc29tZSBzaW5jZSBvbmUgZW5kcyB1cCBkb2luZyBhIHNpZ25pZmljYW50CithbW91bnQgb2YgdHlwaW5nLiAgRm9ydHVuYXRlbHksIHRoZXJlIGFyZSB3YXlzIGFyb3VuZCB0aGlzIGJ5IG1hcHBpbmcKK3Nob3J0Y3V0IGtleXMuICBTZWUgfGNzY29wZS1zdWdnZXN0aW9uc3wgZm9yIHN1Z2dlc3RlZCB1c2FnZS4KKworSWYgdGhlIHJlc3VsdHMgcmV0dXJuIG9ubHkgb25lIG1hdGNoLCB5b3Ugd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHRha2VuIHRvIGl0LgorSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBtYXRjaCwgeW91IHdpbGwgYmUgZ2l2ZW4gYSBzZWxlY3Rpb24gc2NyZWVuIHRvIHBpY2sKK3RoZSBtYXRjaCB5b3Ugd2FudCB0byBnbyB0by4gIEFmdGVyIHlvdSBoYXZlIGp1bXBlZCB0byB0aGUgbmV3IGxvY2F0aW9uLAorc2ltcGx5IGhpdCBDdHJsLVQgdG8gZ2V0IGJhY2sgdG8gdGhlIHByZXZpb3VzIG9uZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIExpbWl0YXRpb25zCQkJCQkJKmNzY29wZS1saW1pdGF0aW9ucyoKKworQ3Njb3BlIHN1cHBvcnQgZm9yIFZpbSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGVzZSBmb3VyCitzeXN0ZW0gY2FsbHM6IGZvcmsoKSwgcGlwZSgpLCBleGVjbCgpLCB3YWl0cGlkKCkuICBUaGlzIG1lYW5zIGl0IGlzIG1vc3RseQorbGltaXRlZCB0byBVbml4IHN5c3RlbXMuCisKK0FkZGl0aW9uYWxseSBDc2NvcGUgc3VwcG9ydCB3b3JrcyBmb3IgV2luMzIuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgYQorY3Njb3BlIHZlcnNpb24gZm9yIFdpbjMyIHNlZToKKworCWh0dHA6Ly9pYW1waGV0Lm5tLnJ1L2NzY29wZS9pbmRleC5odG1sCisKK1RoZXJlIGFyZSBhIGNvdXBsZSBvZiBoYXJkLWNvZGVkIGxpbWl0YXRpb25zOgorCisgICAgMS4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNzY29wZSBjb25uZWN0aW9ucyBhbGxvd2VkIGlzIDguICBEbyB5b3UKKyAgICByZWFsbHkgbmVlZCBtb3JlPworCisgICAgMi4gRG9pbmcgYSB8OnRqdW1wfCB3aGVuIHw6Y3N0YWd8IHNlYXJjaGVzIHRoZSB0YWcgZmlsZXMgaXMgbm90CisgICAgY29uZmlndXJhYmxlIChlLmcuLCB5b3UgY2FuJ3QgZG8gYSB0c2VsZWN0IGluc3RlYWQpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFN1Z2dlc3RlZCB1c2FnZQkJCQkJKmNzY29wZS1zdWdnZXN0aW9ucyoKKworUHV0IHRoZXNlIGVudHJpZXMgaW4geW91ciAudmltcmMgKGFkanVzdCB0aGUgcGF0aG5hbWUgYWNjb3JkaW5nbHkgdG8geW91cgorc2V0dXApOiA+CisKKwlpZiBoYXMoImNzY29wZSIpCisJCXNldCBjc3ByZz0vdXNyL2xvY2FsL2Jpbi9jc2NvcGUKKwkJc2V0IGNzdG89MAorCQlzZXQgY3N0CisJCXNldCBub2NzdmVyYgorCQkiIGFkZCBhbnkgZGF0YWJhc2UgaW4gY3VycmVudCBkaXJlY3RvcnkKKwkJaWYgZmlsZXJlYWRhYmxlKCJjc2NvcGUub3V0IikKKwkJICAgIGNzIGFkZCBjc2NvcGUub3V0CisJCSIgZWxzZSBhZGQgZGF0YWJhc2UgcG9pbnRlZCB0byBieSBlbnZpcm9ubWVudAorCQllbHNlaWYgJENTQ09QRV9EQiAhPSAiIgorCQkgICAgY3MgYWRkICRDU0NPUEVfREIKKwkJZW5kaWYKKwkJc2V0IGNzdmVyYgorCWVuZGlmCisKK0J5IHNldHRpbmcgJ2NzY29wZXRhZycsIHdlIGhhdmUgZWZmZWN0aXZlbHkgcmVwbGFjZWQgYWxsIGluc3RhbmNlcyBvZiB0aGUgOnRhZworY29tbWFuZCB3aXRoIDpjc3RhZy4gIFRoaXMgaW5jbHVkZXMgOnRhZywgQ3RybC1dLCBhbmQgInZpbSAtdCIuICBJbiBkb2luZwordGhpcywgdGhlIHJlZ3VsYXIgdGFnIGNvbW1hbmQgbm90IG9ubHkgc2VhcmNoZXMgeW91ciBjdGFncyBnZW5lcmF0ZWQgdGFnCitmaWxlcywgYnV0IHlvdXIgY3Njb3BlIGRhdGFiYXNlcyBhcyB3ZWxsLgorCitTb21lIHVzZXJzIG1heSB3YW50IHRvIGtlZXAgdGhlIHJlZ3VsYXIgdGFnIGJlaGF2aW9yIGFuZCBoYXZlIGEgZGlmZmVyZW50CitzaG9ydGN1dCB0byBhY2Nlc3MgOmNzdGFnLiAgRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBtYXAgQ3RybC1fICAodW5kZXJzY29yZSkKK3RvIDpjc3RhZyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJbWFwIDxDLV8+IDpjc3RhZyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisKK0EgY291cGxlIG9mIHZlcnkgY29tbW9ubHkgdXNlZCBjc2NvcGUgcXVlcmllcyAodXNpbmcgIjpjcyBmaW5kIikgaXMgdG8KK2ZpbmQgYWxsIGZ1bmN0aW9ucyBjYWxsaW5nIGEgY2VydGFpbiBmdW5jdGlvbiBhbmQgdG8gZmluZCBhbGwgb2NjdXJyZW5jZXMKK29mIGEgcGFydGljdWxhciBDIHN5bWJvbC4gIFRvIGRvIHRoaXMsIHlvdSBjYW4gdXNlIHRoZXNlIG1hcHBpbmdzIGFzIGFuCitleGFtcGxlOiA+CisKKwltYXAgZzxDLV0+IDpjcyBmaW5kIDMgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCW1hcCBnPEMtXD4gOmNzIGZpbmQgMCA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisKK1RoZXNlIG1hcHBpbmdzIGZvciBDdHJsLV0gKHJpZ2h0IGJyYWNrZXQpIGFuZCBDdHJsLVwgKGJhY2tzbGFzaCkgYWxsb3cgeW91IHRvCitwbGFjZSB5b3VyIGN1cnNvciBvdmVyIHRoZSBmdW5jdGlvbiBuYW1lIG9yIEMgc3ltYm9sIGFuZCBxdWlja2x5IHF1ZXJ5IGNzY29wZQorZm9yIGFueSBtYXRjaGVzLgorCitPciB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nIHNjaGVtZSwgaW5zcGlyZWQgYnkgVmltL0NzY29wZSB0dXRvcmlhbCBmcm9tCitDc2NvcGUgSG9tZSBQYWdlIChodHRwOi8vY3Njb3BlLnNvdXJjZWZvcmdlLm5ldC8pOiA+CisKKwlubWFwIDxDLV8+cyA6Y3MgZmluZCBzIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLV8+ZyA6Y3MgZmluZCBnIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLV8+YyA6Y3MgZmluZCBjIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLV8+dCA6Y3MgZmluZCB0IDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLV8+ZSA6Y3MgZmluZCBlIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLV8+ZiA6Y3MgZmluZCBmIDxDLVI+PWV4cGFuZCgiPGNmaWxlPiIpPENSPjxDUj4KKwlubWFwIDxDLV8+aSA6Y3MgZmluZCBpIF48Qy1SPj1leHBhbmQoIjxjZmlsZT4iKTxDUj4kPENSPgorCW5tYXAgPEMtXz5kIDpjcyBmaW5kIGQgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCisJIiBVc2luZyAnQ1RSTC1zcGFjZWJhcicgdGhlbiBhIHNlYXJjaCB0eXBlIG1ha2VzIHRoZSB2aW0gd2luZG93CisJIiBzcGxpdCBob3Jpem9udGFsbHksIHdpdGggc2VhcmNoIHJlc3VsdCBkaXNwbGF5ZWQgaW4KKwkiIHRoZSBuZXcgd2luZG93LgorCisJbm1hcCA8Qy1TcGFjZT5zIDpzY3MgZmluZCBzIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLVNwYWNlPmcgOnNjcyBmaW5kIGcgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCW5tYXAgPEMtU3BhY2U+YyA6c2NzIGZpbmQgYyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT50IDpzY3MgZmluZCB0IDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLVNwYWNlPmUgOnNjcyBmaW5kIGUgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCW5tYXAgPEMtU3BhY2U+ZiA6c2NzIGZpbmQgZiA8Qy1SPj1leHBhbmQoIjxjZmlsZT4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT5pIDpzY3MgZmluZCBpIF48Qy1SPj1leHBhbmQoIjxjZmlsZT4iKTxDUj4kPENSPgorCW5tYXAgPEMtU3BhY2U+ZCA6c2NzIGZpbmQgZCA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisKKwkiIEhpdHRpbmcgQ1RSTC1zcGFjZSAqdHdpY2UqIGJlZm9yZSB0aGUgc2VhcmNoIHR5cGUgZG9lcyBhIHZlcnRpY2FsCisJIiBzcGxpdCBpbnN0ZWFkIG9mIGEgaG9yaXpvbnRhbCBvbmUKKworCW5tYXAgPEMtU3BhY2U+PEMtU3BhY2U+cworCQlcOnZlcnQgc2NzIGZpbmQgcyA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT48Qy1TcGFjZT5nCisJCVw6dmVydCBzY3MgZmluZCBnIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLVNwYWNlPjxDLVNwYWNlPmMKKwkJXDp2ZXJ0IHNjcyBmaW5kIGMgPEMtUj49ZXhwYW5kKCI8Y3dvcmQ+Iik8Q1I+PENSPgorCW5tYXAgPEMtU3BhY2U+PEMtU3BhY2U+dAorCQlcOnZlcnQgc2NzIGZpbmQgdCA8Qy1SPj1leHBhbmQoIjxjd29yZD4iKTxDUj48Q1I+CisJbm1hcCA8Qy1TcGFjZT48Qy1TcGFjZT5lCisJCVw6dmVydCBzY3MgZmluZCBlIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKwlubWFwIDxDLVNwYWNlPjxDLVNwYWNlPmkKKwkJXDp2ZXJ0IHNjcyBmaW5kIGkgXjxDLVI+PWV4cGFuZCgiPGNmaWxlPiIpPENSPiQ8Q1I+CisJbm1hcCA8Qy1TcGFjZT48Qy1TcGFjZT5kCisJCVw6dmVydCBzY3MgZmluZCBkIDxDLVI+PWV4cGFuZCgiPGN3b3JkPiIpPENSPjxDUj4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBDc2NvcGUgYXZhaWxhYmlsaXR5IGFuZCBpbmZvcm1hdGlvbgkJCSpjc2NvcGUtaW5mbyoKKworSWYgeW91IGRvIG5vdCBhbHJlYWR5IGhhdmUgY3Njb3BlIChpdCBkaWQgbm90IGNvbWUgd2l0aCB5b3VyIGNvbXBpbGVyCitsaWNlbnNlIG9yIE9TIGRpc3RyaWJ1dGlvbiksIHRoZW4geW91IGNhbiBkb3dubG9hZCBpdCBmb3IgZnJlZSBmcm9tOgorCWh0dHA6Ly9jc2NvcGUuc291cmNlZm9yZ2UubmV0LworVGhpcyBpcyByZWxlYXNlZCBieSBTQ08gdW5kZXIgdGhlIEJTRCBsaWNlbnNlLgorCitJZiB5b3Ugd2FudCBhIG5ld2VyIHZlcnNpb24gb2YgY3Njb3BlLCB5b3Ugd2lsbCBwcm9iYWJseSBoYXZlIHRvIGJ1eSBpdC4KK0FjY29yZGluZyB0byB0aGUgKG9sZCkgbnZpIGRvY3VtZW50YXRpb246CisKKwlZb3UgY2FuIGJ1eSB2ZXJzaW9uIDEzLjMgc291cmNlIHdpdGggYW4gdW5yZXN0cmljdGVkIGxpY2Vuc2UKKwlmb3IgJDQwMCBmcm9tIEFUJlQgU29mdHdhcmUgU29sdXRpb25zIGJ5IGNhbGxpbmcgKzEtODAwLTQ2Mi04MTQ2LgorCitBbHNvIHlvdSBjYW4gZG93bmxvYWQgY3Njb3BlIDEzLnggYW5kIG1sY3Njb3BlIDE0LnggKG11bHRpLWxpbmd1YWwgY3Njb3BlCit3aGljaCBzdXBwb3J0cyBDLCBDKyssIEphdmEsIGxleCwgeWFjYywgYnJlYWtwb2ludCBsaXN0aW5nLCBJbmdyZXMsIGFuZCBTREwpCitmcm9tIFdvcmxkLVdpZGUgRXhwdG9vbHMgT3BlbiBTb3VyY2UgcGFja2FnZXMgcGFnZToKKwlodHRwOi8vd3d3LmJlbGwtbGFicy5jb20vcHJvamVjdC93d2V4cHRvb2xzL3BhY2thZ2VzLmh0bWwKKworSW4gU29sYXJpcyAyLngsIGlmIHlvdSBoYXZlIHRoZSBDIGNvbXBpbGVyIGxpY2Vuc2UsIHlvdSB3aWxsIGFsc28gaGF2ZQorY3Njb3BlLiAgQm90aCBhcmUgdXN1YWxseSBsb2NhdGVkIHVuZGVyIC9vcHQvU1VOV3Nwcm8vYmluCisKK1NHSSBkZXZlbG9wZXJzIGNhbiBhbHNvIGdldCBpdC4gIFNlYXJjaCBmb3IgQ3Njb3BlIG9uIHRoaXMgcGFnZToKKwlodHRwOi8vZnJlZXdhcmUuc2dpLmNvbS9pbmRleC1ieS1hbHBoYS5odG1sCisJaHR0cHM6Ly90b29sYm94LnNnaS5jb20vdG9vbGJveC91dGlsaXRpZXMvY3Njb3BlLworVGhlIHNlY29uZCBvbmUgaXMgZm9yIHRob3NlIHdobyBoYXZlIGEgcGFzc3dvcmQgZm9yIHRoZSBTR0kgdG9vbGJveC4KKworVGhlcmUgaXMgc291cmNlIHRvIGFuIG9sZGVyIHZlcnNpb24gb2YgYSBjc2NvcGUgY2xvbmUgKGNhbGxlZCAiY3MiKSBhdmFpbGFibGUKK29uIHRoZSBuZXQuICBEdWUgdG8gdmFyaW91cyByZWFzb25zLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBWaW0uCisKK1RoZSBjc2NvcGUgaW50ZXJmYWNlL3N1cHBvcnQgZm9yIFZpbSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5CitBbmR5IEthaG4gPGFja2FobkBuZXRhcHAuY29tPi4gIFRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgKGFzIHdlbGwgYXMgYSB0aW55CitiaXQgb2YgY29kZSkgd2FzIGFkYXB0ZWQgZnJvbSB0aGUgY3Njb3BlIGludGVyZmFjZSBpbiBudmkuICBQbGVhc2UgcmVwb3J0CithbnkgcHJvYmxlbXMsIHN1Z2dlc3Rpb25zLCBwYXRjaGVzLCBldCBhbC4sIHlvdSBoYXZlIGZvciB0aGUgdXNhZ2Ugb2YKK2NzY29wZSB3aXRoaW4gVmltIHRvIGhpbS4KKwkJCQkJCQkqY3Njb3BlLXdpbjMyKgorRm9yIGEgY3Njb3BlIHZlcnNpb24gZm9yIFdpbjMyIHNlZTogaHR0cDovL2lhbXBoZXQubm0ucnUvY3Njb3BlL2luZGV4Lmh0bWwKKworV2luMzIgc3VwcG9ydCB3YXMgYWRkZWQgYnkgU2VyZ2V5IEtob3JldiA8a2hvcmV2QHNvZnRsYWIucnU+LiBDb250YWN0IGhpbQoraWYgeW91IGhhdmUgV2luMzItc3BlY2lmaWMgaXNzdWVzLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaWZfb2xlLnR4dCBiL3J1bnRpbWUvZG9jL2lmX29sZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlZDM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2lmX29sZS50eHQKQEAgLTAsMCArMSwxNjIgQEAKKyppZl9vbGUudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBKdW4gMTkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgUGF1bCBNb29yZQorCisKK1RoZSBPTEUgSW50ZXJmYWNlIHRvIFZpbQkJCQkqb2xlLWludGVyZmFjZSoKKworMS4gQWN0aXZhdGlvbgkJCXxvbGUtYWN0aXZhdGlvbnwKKzIuIE1ldGhvZHMJCQl8b2xlLW1ldGhvZHN8CiszLiBUaGUgIm5vcm1hbCIgY29tbWFuZAkJfG9sZS1ub3JtYWx8Cis0LiBSZWdpc3RyYXRpb24JCQl8b2xlLXJlZ2lzdHJhdGlvbnwKKzUuIE1TIFZpc3VhbCBTdHVkaW8gaW50ZWdyYXRpb24JfE1TVmlzdWFsU3R1ZGlvfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKK09MRSBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrb2xlfCBmZWF0dXJlLiAgU2VlCitzcmMvaWZfb2xlLklOU1RBTEwuCitBbiBhbHRlcm5hdGl2ZSBpcyB1c2luZyB0aGUgY2xpZW50LXNlcnZlciBjb21tdW5pY2F0aW9uIHxjbGllbnRzZXJ2ZXJ8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEFjdGl2YXRpb24JCQkJCQkqb2xlLWFjdGl2YXRpb24qCisKK1ZpbSBhY3RzIGFzIGFuIE9MRSBhdXRvbWF0aW9uIHNlcnZlciwgYWNjZXNzaWJsZSBmcm9tIGFueSBhdXRvbWF0aW9uIGNsaWVudCwKK2ZvciBleGFtcGxlLCBWaXN1YWwgQmFzaWMsIFB5dGhvbiwgb3IgUGVybC4gVGhlIFZpbSBhcHBsaWNhdGlvbiAibmFtZSIgKGl0cworIlByb2dJRCIsIGluIE9MRSB0ZXJtaW5vbG9neSkgaXMgIlZpbS5BcHBsaWNhdGlvbiIuCisKK0hlbmNlLCBpbiBvcmRlciB0byBzdGFydCBhIFZpbSBpbnN0YW5jZSAob3IgY29ubmVjdCB0byBhbiBhbHJlYWR5IHJ1bm5pbmcKK2luc3RhbmNlKSwgY29kZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIHVzZWQ6CisKK1tWaXN1YWwgQmFzaWNdID4KKwlEaW0gVmltIEFzIE9iamVjdAorCVNldCBWaW0gPSBDcmVhdGVPYmplY3QoIlZpbS5BcHBsaWNhdGlvbiIpCisKK1tQeXRob25dID4KKwlmcm9tIHdpbjMyY29tLmNsaWVudC5keW5hbWljIGltcG9ydCBEaXNwYXRjaAorCXZpbSA9IERpc3BhdGNoKCdWaW0uQXBwbGljYXRpb24nKQorCitbUGVybF0gPgorCXVzZSBXaW4zMjo6T0xFOworCSR2aW0gPSBuZXcgV2luMzI6Ok9MRSAnVmltLkFwcGxpY2F0aW9uJzsKKworVmltIGRvZXMgbm90IHN1cHBvcnQgYWN0aW5nIGFzIGEgImhpZGRlbiIgT0xFIHNlcnZlciwgbGlrZSBzb21lIG90aGVyIE9MRQorQXV0b21hdGlvbiBzZXJ2ZXJzLiBXaGVuIGEgY2xpZW50IHN0YXJ0cyB1cCBhbiBpbnN0YW5jZSBvZiBWaW0sIHRoYXQgaW5zdGFuY2UKK2lzIGltbWVkaWF0ZWx5IHZpc2libGUuIFNpbXBseSBjbG9zaW5nIHRoZSBPTEUgY29ubmVjdGlvbiB0byB0aGUgVmltIGluc3RhbmNlCitpcyBub3QgZW5vdWdoIHRvIHNodXQgZG93biB0aGUgVmltIGluc3RhbmNlIC0gaXQgaXMgbmVjZXNzYXJ5IHRvIGV4cGxpY2l0bHkKK2V4ZWN1dGUgYSBxdWl0IGNvbW1hbmQgKGZvciBleGFtcGxlLCA6cWEhLCA6d3FhKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBNZXRob2RzCQkJCQkJKm9sZS1tZXRob2RzKgorCitWaW0gZXhwb3NlcyBmb3VyIG1ldGhvZHMgZm9yIHVzZSBieSBjbGllbnRzLgorCisJCQkJCQkJKm9sZS1zZW5ka2V5cyoKK1NlbmRLZXlzKGtleXMpCQlFeGVjdXRlIGEgc2VyaWVzIG9mIGtleXMuCisKK1RoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBzdHJpbmcgb2Yga2V5c3Ryb2tlcy4gVGhlc2UKK2tleXN0cm9rZXMgYXJlIGV4ZWN1dGVkIGV4YWN0bHkgYXMgaWYgdGhleSBoYWQgYmVlbiB0eXBlcyBpbiBhdCB0aGUga2V5Ym9hcmQuCitTcGVjaWFsIGtleXMgY2FuIGJlIGdpdmVuIHVzaW5nIHRoZWlyIDwuLj4gbmFtZXMsIGFzIGZvciB0aGUgcmlnaHQgaGFuZCBzaWRlCitvZiBhIG1hcHBpbmcuIE5vdGU6IEV4ZWN1dGlvbiBvZiB0aGUgRXggIm5vcm1hbCIgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIC0KK3NlZSBiZWxvdyB8b2xlLW5vcm1hbHwuCisKK0V4YW1wbGVzIChWaXN1YWwgQmFzaWMgc3ludGF4KSA+CisJVmltLlNlbmRLZXlzICJpaGVsbG88RXNjPiIKKwlWaW0uU2VuZEtleXMgIm1hMUdWNGp5YGEiCisKK1RoZXNlIGV4YW1wbGVzIGFzc3VtZSB0aGF0IFZpbSBzdGFydHMgaW4gTm9ybWFsIG1vZGUuIFRvIGZvcmNlIE5vcm1hbCBtb2RlLAorc3RhcnQgdGhlIGtleSBzZXF1ZW5jZSB3aXRoIENUUkwtXCBDVFJMLU4gYXMgaW4gPgorCisJVmltLlNlbmRLZXlzICI8Qy1cPjxDLU4+aWhlbGxvPEVzYz4iCisKK0NUUkwtXCBDVFJMLU4gcmV0dXJucyBWaW0gdG8gTm9ybWFsIG1vZGUsIHdoZW4gaW4gSW5zZXJ0IG9yIENvbW1hbmQtbGluZSBtb2RlLgorTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIGhhbGZ3YXkgYSBWaW0gY29tbWFuZAorCisJCQkJCQkJKm9sZS1ldmFsKgorRXZhbChleHByKQkJRXZhbHVhdGUgYW4gZXhwcmVzc2lvbi4KKworVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLCB3aGljaCBpcyBhbiBleHByZXNzaW9uIGluIFZpbSdzIG5vcm1hbAorZm9ybWF0IChzZWUgfGV4cHJlc3Npb258KS4gIEl0IHJldHVybnMgYSBzdHJpbmcsIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YKK2V2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uCisKK0V4YW1wbGVzIChWaXN1YWwgQmFzaWMgc3ludGF4KSA+CisJTGluZTIwID0gVmltLkV2YWwoImdldGxpbmUoMjApIikKKwlUd2VsdmUgPSBWaW0uRXZhbCgiNiArIDYiKQkJJyBOb3RlIHRoaXMgaXMgYSBTVFJJTkcKKwlGb250ID0gVmltLkV2YWwoIiZndWlmb250IikKKzwKKwkJCQkJCQkqb2xlLXNldGZvcmVncm91bmQqCitTZXRGb3JlZ3JvdW5kKCkJCU1ha2UgdGhlIFZpbSB3aW5kb3cgY29tZSB0byB0aGUgZm9yZWdyb3VuZAorCitUaGlzIG1ldGhvZCB0YWtlcyBubyBhcmd1bWVudHMuICBObyB2YWx1ZSBpcyByZXR1cm5lZC4KKworRXhhbXBsZSAoVmlzdWFsIEJhc2ljIHN5bnRheCkgPgorCVZpbS5TZXRGb3JlZ3JvdW5kCis8CisKKwkJCQkJCQkqb2xlLWdldGh3bmQqCitHZXRId25kKCkJCVJldHVybiB0aGUgaGFuZGxlIG9mIHRoZSBWaW0gd2luZG93LgorCitUaGlzIG1ldGhvZCB0YWtlcyBubyBhcmd1bWVudHMuICBJdCByZXR1cm5zIHRoZSBod25kIG9mIHRoZSBtYWluIFZpbXdpbmRvdy4KK1lvdSBjYW4gdXNlIHRoaXMgaWYgeW91IGFyZSB3cml0aW5nIHNvbWV0aGluZyB3aGljaCBuZWVkcyB0byBtYW5pcHVsYXRlIHRoZQorVmltIHdpbmRvdywgb3IgdG8gdHJhY2sgaXQgaW4gdGhlIHotb3JkZXIsIGV0Yy4KKworRXhhbXBsZSAoVmlzdWFsIEJhc2ljIHN5bnRheCkgPgorCVZpbV9Id25kID0gVmltLkdldEh3bmQKKzwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBUaGUgIm5vcm1hbCIgY29tbWFuZAkJCQkJKm9sZS1ub3JtYWwqCisKK0R1ZSB0byB0aGUgd2F5IFZpbSBwcm9jZXNzZXMgT0xFIEF1dG9tYXRpb24gY29tbWFuZHMsIGNvbWJpbmVkIHdpdGggdGhlIG1ldGhvZAorb2YgaW1wbGVtZW50YXRpb24gb2YgdGhlIGV4IGNvbW1hbmQgOm5vcm1hbCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhlCis6bm9ybWFsIGNvbW1hbmQgdmlhIE9MRSBhdXRvbWF0aW9uLiBBbnkgYXR0ZW1wdCB0byBkbyBzbyB3aWxsIGZhaWwsIHByb2JhYmx5CitoYXJtbGVzc2x5LCBhbHRob3VnaCBwb3NzaWJseSBpbiB1bnByZWRpY3RhYmxlIHdheXMuCisKK1RoZXJlIGlzIGN1cnJlbnRseSBubyBwcmFjdGljYWwgd2F5IHRvIHRyYXAgdGhpcyBzaXR1YXRpb24sIGFuZCB1c2VycyBtdXN0CitzaW1wbHkgYmUgYXdhcmUgb2YgdGhlIGxpbWl0YXRpb24uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFJlZ2lzdHJhdGlvbgkJCQkJKm9sZS1yZWdpc3RyYXRpb24qICpFMjQzKgorCitCZWZvcmUgVmltIHdpbGwgYWN0IGFzIGFuIE9MRSBzZXJ2ZXIsIGl0IG11c3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgc3lzdGVtCityZWdpc3RyeS4gSW4gb3JkZXIgdG8gZG8gdGhpcywgVmltIHNob3VsZCBiZSBydW4gd2l0aCBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YKKyItcmVnaXN0ZXIiLgorCQkJCQkJCSotcmVnaXN0ZXIqICA+CisJZ3ZpbSAtcmVnaXN0ZXIKKworSWYgZ3ZpbSB3aXRoIE9MRSBzdXBwb3J0IGlzIHJ1biBhbmQgbm90aWNlcyB0aGF0IG5vIFZpbSBPTEUgc2VydmVyIGhhcyBiZWVuCityZWdpc3RlcmVkLCBpdCB3aWxsIHByZXNlbnQgYSBkaWFsb2cgYW5kIG9mZmVycyB5b3UgdGhlIGNob2ljZSB0byByZWdpc3RlciBieQorY2xpY2tpbmcgIlllcyIuCisKK0luIHNvbWUgc2l0dWF0aW9ucyByZWdpc3RlcmluZyBpcyBub3QgcG9zc2libGUuICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUKK3JlZ2lzdHJ5IGlzIG5vdCB3cml0YWJsZS4gIElmIHlvdSBydW4gaW50byB0aGlzIHByb2JsZW0geW91IG5lZWQgdG8gcnVuIGd2aW0KK2FzICJBZG1pbmlzdHJhdG9yIi4KKworT25jZSB2aW0gaXMgcmVnaXN0ZXJlZCwgdGhlIGFwcGxpY2F0aW9uIHBhdGggaXMgc3RvcmVkIGluIHRoZSByZWdpc3RyeS4gQmVmb3JlCittb3ZpbmcsIGRlbGV0aW5nLCBvciB1cGdyYWRpbmcgVmltLCB0aGUgcmVnaXN0cnkgZW50cmllcyBzaG91bGQgYmUgcmVtb3ZlZAordXNpbmcgdGhlICItdW5yZWdpc3RlciIgc3dpdGNoLgorCQkJCQkJCSotdW5yZWdpc3RlciogID4KKwlndmltIC11bnJlZ2lzdGVyCisKK1RoZSBPTEUgbWVjaGFuaXNtIHdpbGwgdXNlIHRoZSBmaXJzdCByZWdpc3RlcmVkIFZpbSBpdCBmaW5kcy4gIElmIGEgVmltIGlzCithbHJlYWR5IHJ1bm5pbmcsIHRoaXMgb25lIHdpbGwgYmUgdXNlZC4gIElmIHlvdSB3YW50IHRvIGhhdmUgKHNldmVyYWwpIFZpbQorc2Vzc2lvbnMgb3BlbiB0aGF0IHNob3VsZCBub3QgcmVhY3QgdG8gT0xFIGNvbW1hbmRzLCB1c2UgdGhlIG5vbi1PTEUgdmVyc2lvbiwKK2FuZCBwdXQgaXQgaW4gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LiAgVGhlIE9MRSB2ZXJzaW9uIHNob3VsZCB0aGVuIGJlIHB1dCBpbiBhCitkaXJlY3RvcnkgdGhhdCBpcyBub3QgaW4geW91ciBub3JtYWwgcGF0aCwgc28gdGhhdCB0eXBpbmcgImd2aW0iIHdpbGwgc3RhcnQKK3RoZSBub24tT0xFIHZlcnNpb24uCisKKwkJCQkJCQkqLXNpbGVudCoKK1RvIGF2b2lkIHRoZSBtZXNzYWdlIGJveCB0aGF0IHBvcHMgdXAgdG8gcmVwb3J0IHRoZSByZXN1bHQsIHByZXBlbmQgIi1zaWxlbnQiOgorPgorCWd2aW0gLXNpbGVudCAtcmVnaXN0ZXIKKwlndmltIC1zaWxlbnQgLXVucmVnaXN0ZXIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBNUyBWaXN1YWwgU3R1ZGlvIGludGVncmF0aW9uCQkJKk1TVmlzdWFsU3R1ZGlvKiAqVmlzVmltKgorCitUaGUgT0xFIHZlcnNpb24gY2FuIGJlIHVzZWQgdG8gcnVuIFZpbSBhcyB0aGUgZWRpdG9yIGluIE1pY3Jvc29mdCBWaXN1YWwKK1N0dWRpby4gIFRoaXMgaXMgY2FsbGVkICJWaXNWaW0iLiAgSXQgaXMgaW5jbHVkZWQgaW4gdGhlIGFyY2hpdmUgdGhhdCBjb250YWlucwordGhlIE9MRSB2ZXJzaW9uLiAgVGhlIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBydW50aW1lIGRpcmVjdG9yeSwgdGhlCitSRUFETUVfVmlzVmltLnR4dCBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pZl9wZXJsLnR4dCBiL3J1bnRpbWUvZG9jL2lmX3BlcmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MmNkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pZl9wZXJsLnR4dApAQCAtMCwwICsxLDI1OCBAQAorKmlmX3BlcmwudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwMQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBTdmVuIFZlcmRvb2xhZWdlCisJCQkJCSBhbmQgTWF0dCBHZXJhc3NpbW9mCisKK1BlcmwgYW5kIFZpbQkJCQkqcGVybCogKlBlcmwqCisKKzEuIEVkaXRpbmcgUGVybCBmaWxlcwkJCXxwZXJsLWVkaXRpbmd8CisyLiBDb21waWxpbmcgVklNIHdpdGggUGVybCBpbnRlcmZhY2UJfHBlcmwtY29tcGlsaW5nfAorMy4gVXNpbmcgdGhlIFBlcmwgaW50ZXJmYWNlCQl8cGVybC11c2luZ3wKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCitUaGUgUGVybCBpbnRlcmZhY2Ugb25seSB3b3JrcyB3aGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCB0aGUgfCtwZXJsfCBmZWF0dXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEVkaXRpbmcgUGVybCBmaWxlcwkJCQkJKnBlcmwtZWRpdGluZyoKKworVmltIHN5bnRheCBoaWdobGlnaHRpbmcgc3VwcG9ydHMgUGVybCBhbmQgUE9EIGZpbGVzLiAgVmltIGFzc3VtZXMgYSBmaWxlIGlzCitQZXJsIGNvZGUgaWYgdGhlIGZpbGVuYW1lIGhhcyBhIC5wbCBvciAucG0gc3VmZml4LiBWaW0gYWxzbyBleGFtaW5lcyB0aGUgZmlyc3QKK2xpbmUgb2YgYSBmaWxlLCByZWdhcmRsZXNzIG9mIHRoZSBmaWxlbmFtZSBzdWZmaXgsIHRvIGNoZWNrIGlmIGEgZmlsZSBpcyBhCitQZXJsIHNjcmlwdCAoc2VlIHNjcmlwdHMudmltIGluIFZpbSdzIHN5bnRheCBkaXJlY3RvcnkpLiAgVmltIGFzc3VtZXMgYSBmaWxlCitpcyBQT0QgdGV4dCBpZiB0aGUgZmlsZW5hbWUgaGFzIGEgLlBPRCBzdWZmaXguCisKK1RvIHVzZSB0YWdzIHdpdGggUGVybCwgeW91IG5lZWQgYSByZWNlbnQgdmVyc2lvbiBvZiBFeHViZXJhbnQgY3RhZ3MuICBMb29rCitoZXJlOgorCWh0dHA6Ly9jdGFncy5zb3VyY2Vmb3JnZS5uZXQKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIFBlcmwgc2NyaXB0IHBsdGFncy5wbCwgd2hpY2ggaXMgc2hpcHBlZCB3aXRoCitWaW0gaW4gdGhlICRWSU1SVU5USU1FL3Rvb2xzIGRpcmVjdG9yeS4gIFRoaXMgc2NyaXB0IGhhcyBjdXJyZW50bHkgbW9yZQorZmVhdHVyZXMgdGhhbiBFeHViZXJhbnQgY3RhZ3MnIFBlcmwgc3VwcG9ydC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBDb21waWxpbmcgVklNIHdpdGggUGVybCBpbnRlcmZhY2UJCQkqcGVybC1jb21waWxpbmcqCisKK1RvIGNvbXBpbGUgVmltIHdpdGggUGVybCBpbnRlcmZhY2UsIHlvdSBuZWVkIFBlcmwgNS4wMDQgKG9yIGxhdGVyKS4gIFBlcmwgbXVzdAorYmUgaW5zdGFsbGVkIGJlZm9yZSB5b3UgY29tcGlsZSBWaW0uICBWaW0ncyBQZXJsIGludGVyZmFjZSBkb2VzIE5PVCB3b3JrIHdpdGgKK3RoZSA1LjAwMyB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gb2ZmaWNpYWxseSByZWxlYXNlZCEgIEl0IHdpbGwgcHJvYmFibHkgd29yaword2l0aCBQZXJsIDUuMDAzXzA1IGFuZCBsYXRlci4KKworVGhlIFBlcmwgcGF0Y2hlcyBmb3IgVmltIHdlcmUgbWFkZSBieToKKwlTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BicmV1Z2hlbC51ZnNpYS5hYy5iZT4KKwlNYXR0IEdlcmFzc2ltb2YKKworUGVybCBmb3IgTVMtV2luZG93cyBjYW4gYmUgZm91bmQgYXQ6CitodHRwOi8vd3d3LnBlcmwuY29tL0NQQU4vcG9ydHMvbnQvU3RhbmRhcmQveDg2LworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFVzaW5nIHRoZSBQZXJsIGludGVyZmFjZQkJCQkqcGVybC11c2luZyoKKworCQkJCQkJCSo6cGVybCogKjpwZSoKKzpwZVtybF0ge2NtZH0JCUV4ZWN1dGUgUGVybCBjb21tYW5kIHtjbWR9LiBUaGUgY3VycmVudCBwYWNrYWdlCisJCQlpcyAibWFpbiIuCisKKzpwZVtybF0gPDwge2VuZHBhdHRlcm59Cit7c2NyaXB0fQore2VuZHBhdHRlcm59CisJCQlFeGVjdXRlIFBlcmwgc2NyaXB0IHtzY3JpcHR9LgorCQkJe2VuZHBhdHRlcm59IG11c3QgTk9UIGJlIHByZWNlZGVkIGJ5IGFueSB3aGl0ZSBzcGFjZS4KKwkJCUlmIHtlbmRwYXR0ZXJufSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBhIGRvdCAnLicKKwkJCWxpa2UgZm9yIHRoZSB8OmFwcGVuZHwgYW5kIHw6aW5zZXJ0fCBjb21tYW5kcy4gIFVzaW5nCisJCQknLicgaGVscHMgd2hlbiBpbnNpZGUgYSBmdW5jdGlvbiwgYmVjYXVzZSAiJGk7IiBsb29rcworCQkJbGlrZSB0aGUgc3RhcnQgb2YgYW4gfDppbnNlcnR8IGNvbW1hbmQgdG8gVmltLgorCQkJVGhpcyBmb3JtIG9mIHRoZSB8OnBlcmx8IGNvbW1hbmQgaXMgbWFpbmx5IHVzZWZ1bCBmb3IKKwkJCWluY2x1ZGluZyBwZXJsIGNvZGUgaW4gdmltIHNjcmlwdHMuCisJCQlOb3RlOiBUaGlzIGNvbW1hbmQgZG9lc24ndCB3b3JrIHdoZW4gdGhlIFBlcmwgZmVhdHVyZQorCQkJd2Fzbid0IGNvbXBpbGVkIGluLiAgVG8gYXZvaWQgZXJyb3JzLCBzZWUKKwkJCXxzY3JpcHQtaGVyZXwuCisKKworRXhhbXBsZSB2aW0gc2NyaXB0OiA+CisKKwlmdW5jdGlvbiEgV2hpdGVQZWFybCgpCisJcGVybCA8PCBFT0YKKwkJVklNOjpNc2coInBlYXJscyBhcmUgbmljZSBmb3IgbmVja2xhY2VzIik7CisJCVZJTTo6TXNnKCJydWJ5cyBmb3IgcmluZ3MiKTsKKwkJVklNOjpNc2coInB5dGhvbnMgZm9yIGJhZ3MiKTsKKwkJVklNOjpNc2coInRjbHM/Pz8/Iik7CisJRU9GCisJZW5kZnVuY3Rpb24KKzwKKworCQkJCQkJCSo6cGVybGRvKiAqOnBlcmxkKgorOltyYW5nZV1wZXJsZFtvXSB7Y21kfQlFeGVjdXRlIFBlcmwgY29tbWFuZCB7Y21kfSBmb3IgZWFjaCBsaW5lIGluIHRoZQorCQkJW3JhbmdlXSwgd2l0aCAkXyBiZWluZyBzZXQgdG8gdGhlIHRleHQgb2YgZWFjaCBsaW5lIGluCisJCQl0dXJuLCB3aXRob3V0IGEgdHJhaWxpbmcgPEVPTD4uIFNldHRpbmcgJF8gd2lsbCBjaGFuZ2UKKwkJCXRoZSB0ZXh0LCBidXQgbm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBhZGQgb3IKKwkJCWRlbGV0ZSBsaW5lcyB1c2luZyB0aGlzIGNvbW1hbmQuCisJCQlUaGUgZGVmYXVsdCBmb3IgW3JhbmdlXSBpcyB0aGUgd2hvbGUgZmlsZTogIjEsJCIuCisKK0hlcmUgYXJlIHNvbWUgdGhpbmdzIHlvdSBjYW4gdHJ5OiA+CisKKyAgOnBlcmwgJGE9MQorICA6cGVybGRvICRfID0gcmV2ZXJzZSgkXyk7MQorICA6cGVybCBWSU06Ok1zZygiaGVsbG8iKQorICA6cGVybCAkbGluZSA9ICRjdXJidWYtPkdldCg0MikKKzwKKwkJCQkJCQkqRTI5OSoKK0V4ZWN1dGluZyBQZXJsIGNvbW1hbmRzIGluIHRoZSB8c2FuZGJveHwgaXMgbGltaXRlZC4gICI6cGVybGRvIiB3aWxsIG5vdCBiZQorcG9zc2libGUgYXQgYWxsLiAgIjpwZXJsIiB3aWxsIGJlIGV2YWx1YXRlZCBpbiB0aGUgU2FmZSBlbnZpcm9ubWVudCwgaWYKK3Bvc3NpYmxlLgorCisKKwkJCQkJCQkqcGVybC1vdmVydmlldyoKK0hlcmUgaXMgYW4gb3ZlcnZpZXcgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gUGVybDogPgorCisgIDpwZXJsIFZJTTo6TXNnKCJUZXh0IikJCSMgZGlzcGxheXMgYSBtZXNzYWdlCisgIDpwZXJsIFZJTTo6TXNnKCJFcnJvciIsICJFcnJvck1zZyIpCSMgZGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZQorICA6cGVybCBWSU06Ok1zZygicmVtYXJrIiwgIkNvbW1lbnQiKQkjIGRpc3BsYXlzIGEgaGlnaGxpZ2h0ZWQgbWVzc2FnZQorICA6cGVybCBWSU06OlNldE9wdGlvbigiYWkiKQkJIyBzZXRzIGEgdmltIG9wdGlvbgorICA6cGVybCAkbmJ1ZiA9IFZJTTo6QnVmZmVycygpCQkjIHJldHVybnMgdGhlIG51bWJlciBvZiBidWZmZXJzCisgIDpwZXJsIEBidWZsaXN0ID0gVklNOjpCdWZmZXJzKCkJIyByZXR1cm5zIGFycmF5IG9mIGFsbCBidWZmZXJzCisgIDpwZXJsICRteWJ1ZiA9IChWSU06OkJ1ZmZlcnMoJ3FxLmMnKSlbMF0gIyByZXR1cm5zIGJ1ZmZlciBvYmplY3QgZm9yICdxcS5jJworICA6cGVybCBAd2lubGlzdCA9IFZJTTo6V2luZG93cygpCSMgcmV0dXJucyBhcnJheSBvZiBhbGwgd2luZG93cworICA6cGVybCAkbndpbiA9IFZJTTo6V2luZG93cygpCQkjIHJldHVybnMgdGhlIG51bWJlciBvZiB3aW5kb3dzCisgIDpwZXJsICgkc3VjY2VzcywgJHYpID0gVklNOjpFdmFsKCcmcGF0aCcpICMgJHY6IG9wdGlvbiAncGF0aCcsICRzdWNjZXNzOiAxCisgIDpwZXJsICgkc3VjY2VzcywgJHYpID0gVklNOjpFdmFsKCcmeHl6JykgICMgJHY6ICcnIGFuZCAkc3VjY2VzczogMAorICA6cGVybCAkdiA9IFZJTTo6RXZhbCgnZXhwYW5kKCI8Y2ZpbGU+IiknKSAjIGV4cGFuZHMgPGNmaWxlPgorICA6cGVybCAkY3Vyd2luLT5TZXRIZWlnaHQoMTApCQkjIHNldHMgdGhlIHdpbmRvdyBoZWlnaHQKKyAgOnBlcmwgQHBvcyA9ICRjdXJ3aW4tPkN1cnNvcigpCSMgcmV0dXJucyAocm93LCBjb2wpIGFycmF5CisgIDpwZXJsIEBwb3MgPSAoMTAsIDEwKQorICA6cGVybCAkY3Vyd2luLT5DdXJzb3IoQHBvcykJCSMgc2V0cyBjdXJzb3IgdG8gQHBvcworICA6cGVybCAkY3Vyd2luLT5DdXJzb3IoMTAsMTApCQkjIHNldHMgY3Vyc29yIHRvIHJvdyAxMCBjb2wgMTAKKyAgOnBlcmwgJG15YnVmID0gJGN1cndpbi0+QnVmZmVyKCkJIyByZXR1cm5zIHRoZSBidWZmZXIgb2JqZWN0IGZvciB3aW5kb3cKKyAgOnBlcmwgJGN1cmJ1Zi0+TmFtZSgpCQkJIyByZXR1cm5zIGJ1ZmZlciBuYW1lCisgIDpwZXJsICRjdXJidWYtPk51bWJlcigpCQkjIHJldHVybnMgYnVmZmVyIG51bWJlcgorICA6cGVybCAkY3VyYnVmLT5Db3VudCgpCQkjIHJldHVybnMgdGhlIG51bWJlciBvZiBsaW5lcworICA6cGVybCAkbCA9ICRjdXJidWYtPkdldCgxMCkJCSMgcmV0dXJucyBsaW5lIDEwCisgIDpwZXJsIEBsID0gJGN1cmJ1Zi0+R2V0KDEgLi4gNSkJIyByZXR1cm5zIGxpbmVzIDEgdGhyb3VnaCA1CisgIDpwZXJsICRjdXJidWYtPkRlbGV0ZSgxMCkJCSMgZGVsZXRlcyBsaW5lIDEwCisgIDpwZXJsICRjdXJidWYtPkRlbGV0ZSgxMCwgMjApCQkjIGRlbGV0ZSBsaW5lcyAxMCB0aHJvdWdoIDIwCisgIDpwZXJsICRjdXJidWYtPkFwcGVuZCgxMCwgIkxpbmUiKQkjIGFwcGVuZHMgYSBsaW5lCisgIDpwZXJsICRjdXJidWYtPkFwcGVuZCgxMCwgIkxpbmUxIiwgIkxpbmUyIiwgIkxpbmUzIikgIyBhcHBlbmRzIDMgbGluZXMKKyAgOnBlcmwgQGwgPSAoIkwxIiwgIkwyIiwgIkwzIikKKyAgOnBlcmwgJGN1cmJ1Zi0+QXBwZW5kKDEwLCBAbCkJCSMgYXBwZW5kcyBMMSwgTDIgYW5kIEwzCisgIDpwZXJsICRjdXJidWYtPlNldCgxMCwgIkxpbmUiKQkjIHJlcGxhY2VzIGxpbmUgMTAKKyAgOnBlcmwgJGN1cmJ1Zi0+U2V0KDEwLCAiTGluZTEiLCAiTGluZTIiKQkjIHJlcGxhY2VzIGxpbmVzIDEwIGFuZCAxMQorICA6cGVybCAkY3VyYnVmLT5TZXQoMTAsIEBsKQkJIyByZXBsYWNlcyAzIGxpbmVzCis8CisJCQkJCQkJKnBlcmwtTXNnKgorVklNOjpNc2coe21zZ30sIHtncm91cH0/KQorCQkJRGlzcGxheXMgdGhlIG1lc3NhZ2Uge21zZ30uICBUaGUgb3B0aW9uYWwge2dyb3VwfQorCQkJYXJndW1lbnQgc3BlY2lmaWVzIGEgaGlnaGxpZ2h0IGdyb3VwIGZvciBWaW0gdG8gdXNlCisJCQlmb3IgdGhlIG1lc3NhZ2UuCisKKwkJCQkJCQkqcGVybC1TZXRPcHRpb24qCitWSU06OlNldE9wdGlvbih7YXJnfSkJU2V0cyBhIHZpbSBvcHRpb24uICB7YXJnfSBjYW4gYmUgYW55IGFyZ3VtZW50IHRoYXQgdGhlCisJCQkiOnNldCIgY29tbWFuZCBhY2NlcHRzLiAgTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBubworCQkJc3BhY2VzIGFyZSBhbGxvd2VkIGluIHRoZSBhcmd1bWVudCEgIFNlZSB8OnNldHwuCisKKwkJCQkJCQkqcGVybC1CdWZmZXJzKgorVklNOjpCdWZmZXJzKFt7Ym59Li4uXSkJV2l0aCBubyBhcmd1bWVudHMsIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgYnVmZmVycworCQkJaW4gYW4gYXJyYXkgY29udGV4dCBvciByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycworCQkJaW4gYSBzY2FsYXIgY29udGV4dC4gIEZvciBhIGxpc3Qgb2YgYnVmZmVyIG5hbWVzIG9yCisJCQludW1iZXJzIHtibn0sIHJldHVybnMgYSBsaXN0IG9mIHRoZSBidWZmZXJzIG1hdGNoaW5nCisJCQl7Ym59LCB1c2luZyB0aGUgc2FtZSBydWxlcyBhcyBWaW0ncyBpbnRlcm5hbAorCQkJfGJ1Zm5hbWUoKXwgZnVuY3Rpb24uCisKKwkJCQkJCQkqcGVybC1XaW5kb3dzKgorVklNOjpXaW5kb3dzKFt7d259Li4uXSkJV2l0aCBubyBhcmd1bWVudHMsIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgd2luZG93cworCQkJaW4gYW4gYXJyYXkgY29udGV4dCBvciByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2luZG93cworCQkJaW4gYSBzY2FsYXIgY29udGV4dC4gIEZvciBhIGxpc3Qgb2Ygd2luZG93IG51bWJlcnMKKwkJCXt3bn0sIHJldHVybnMgYSBsaXN0IG9mIHRoZSB3aW5kb3dzIHdpdGggdGhvc2UKKwkJCW51bWJlcnMuCisKKwkJCQkJCQkqcGVybC1Eb0NvbW1hbmQqCitWSU06OkRvQ29tbWFuZCh7Y21kfSkJRXhlY3V0ZXMgRXggY29tbWFuZCB7Y21kfS4KKworCQkJCQkJCSpwZXJsLUV2YWwqCitWSU06OkV2YWwoe2V4cHJ9KQlFdmFsdWF0ZXMge2V4cHJ9IGFuZCByZXR1cm5zIChzdWNjZXNzLCB2YWwpLgorCQkJc3VjY2Vzcz0xIGluZGljYXRlcyB0aGF0IHZhbCBjb250YWlucyB0aGUgdmFsdWUgb2YKKwkJCXtleHByfTsgc3VjY2Vzcz0wIGluZGljYXRlcyBhIGZhaWx1cmUgdG8gZXZhbHVhdGUKKwkJCXRoZSBleHByZXNzaW9uLiAgJ0B4JyByZXR1cm5zIHRoZSBjb250ZW50cyBvZiByZWdpc3RlcgorCQkJeCwgJyZ4JyByZXR1cm5zIHRoZSB2YWx1ZSBvZiBvcHRpb24geCwgJ3gnIHJldHVybnMgdGhlCisJCQl2YWx1ZSBvZiBpbnRlcm5hbCB8dmFyaWFibGVzfCB4LCBhbmQgJyR4JyBpcyBlcXVpdmFsZW50CisJCQl0byBwZXJsJ3MgJEVOVnt4fS4gIEFsbCB8ZnVuY3Rpb25zfCBhY2Nlc3NpYmxlIGZyb20KKwkJCXRoZSBjb21tYW5kLWxpbmUgYXJlIHZhbGlkIGZvciB7ZXhwcn0uCisKKwkJCQkJCQkqcGVybC1TZXRIZWlnaHQqCitXaW5kb3ctPlNldEhlaWdodCh7aGVpZ2h0fSkKKwkJCVNldHMgdGhlIFdpbmRvdyBoZWlnaHQgdG8ge2hlaWdodH0sIHdpdGhpbiBzY3JlZW4KKwkJCWxpbWl0cy4KKworCQkJCQkJCSpwZXJsLUdldEN1cnNvcioKK1dpbmRvdy0+Q3Vyc29yKHtyb3d9Pywge2NvbH0/KQorCQkJV2l0aCBubyBhcmd1bWVudHMsIHJldHVybnMgYSAocm93LCBjb2wpIGFycmF5IGZvciB0aGUKKwkJCWN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBXaW5kb3cuICBXaXRoIHtyb3d9IGFuZAorCQkJe2NvbH0gYXJndW1lbnRzLCBzZXRzIHRoZSBXaW5kb3cncyBjdXJzb3IgcG9zaXRpb24gdG8KKwkJCXtyb3d9IGFuZCB7Y29sfS4gIE5vdGUgdGhhdCB7Y29sfSBpcyBudW1iZXJlZCBmcm9tIDAsCisJCQlQZXJsLWZhc2hpb24sIGFuZCB0aHVzIGlzIG9uZSBsZXNzIHRoYW4gdGhlIHZhbHVlIGluCisJCQlWaW0ncyBydWxlci4KKworV2luZG93LT5CdWZmZXIoKQkJCQkJKnBlcmwtQnVmZmVyKgorCQkJUmV0dXJucyB0aGUgQnVmZmVyIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbgorCQkJV2luZG93LgorCisJCQkJCQkJKnBlcmwtTmFtZSoKK0J1ZmZlci0+TmFtZSgpCQlSZXR1cm5zIHRoZSBmaWxlbmFtZSBmb3IgdGhlIEJ1ZmZlci4KKworCQkJCQkJCSpwZXJsLU51bWJlcioKK0J1ZmZlci0+TnVtYmVyKCkJUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBCdWZmZXIuCisKKwkJCQkJCQkqcGVybC1Db3VudCoKK0J1ZmZlci0+Q291bnQoKQkJUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBCdWZmZXIuCisKKwkJCQkJCQkqcGVybC1HZXQqCitCdWZmZXItPkdldCh7bG51bX0sIHtsbnVtfT8sIC4uLikKKwkJCVJldHVybnMgYSB0ZXh0IHN0cmluZyBvZiBsaW5lIHtsbnVtfSBpbiB0aGUgQnVmZmVyCisJCQlmb3IgZWFjaCB7bG51bX0gc3BlY2lmaWVkLiBBbiBhcnJheSBjYW4gYmUgcGFzc2VkCisJCQl3aXRoIGEgbGlzdCBvZiB7bG51bX0ncyBzcGVjaWZpZWQuCisKKwkJCQkJCQkqcGVybC1EZWxldGUqCitCdWZmZXItPkRlbGV0ZSh7bG51bX0sIHtsbnVtfT8pCisJCQlEZWxldGVzIGxpbmUge2xudW19IGluIHRoZSBCdWZmZXIuICBXaXRoIHRoZSBzZWNvbmQKKwkJCXtsbnVtfSwgZGVsZXRlcyB0aGUgcmFuZ2Ugb2YgbGluZXMgZnJvbSB0aGUgZmlyc3QKKwkJCXtsbnVtfSB0byB0aGUgc2Vjb25kIHtsbnVtfS4KKworCQkJCQkJCSpwZXJsLUFwcGVuZCoKK0J1ZmZlci0+QXBwZW5kKHtsbnVtfSwge2xpbmV9LCB7bGluZX0/LCAuLi4pCisJCQlBcHBlbmRzIGVhY2gge2xpbmV9IHN0cmluZyBhZnRlciBCdWZmZXIgbGluZSB7bG51bX0uCisJCQlUaGUgbGlzdCBvZiB7bGluZX1zIGNhbiBiZSBhbiBhcnJheS4KKworCQkJCQkJCSpwZXJsLVNldCoKK0J1ZmZlci0+U2V0KHtsbnVtfSwge2xpbmV9LCB7bGluZX0/LCAuLi4pCisJCQlSZXBsYWNlcyBvbmUgb3IgbW9yZSBCdWZmZXIgbGluZXMgd2l0aCBzcGVjaWZpZWQKKwkJCXtsaW5lc31zLCBzdGFydGluZyBhdCBCdWZmZXIgbGluZSB7bG51bX0uICBUaGUgbGlzdCBvZgorCQkJe2xpbmV9cyBjYW4gYmUgYW4gYXJyYXkuICBJZiB0aGUgYXJndW1lbnRzIGFyZQorCQkJaW52YWxpZCwgcmVwbGFjZW1lbnQgZG9lcyBub3Qgb2NjdXIuCisKKyRtYWluOjpjdXJ3aW4KKwkJCVRoZSBjdXJyZW50IHdpbmRvdyBvYmplY3QuCisKKyRtYWluOjpjdXJidWYKKwkJCVRoZSBjdXJyZW50IGJ1ZmZlciBvYmplY3QuCisKKworCQkJCQkJCSpzY3JpcHQtaGVyZSoKK1doZW4gdXNpbmcgYSBzY3JpcHQgbGFuZ3VhZ2UgaW4tbGluZSwgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHdoZW4gdGhlCitsYW5ndWFnZSBpc24ndCBzdXBwb3J0ZWQuICBCdXQgdGhpcyBtZWNoYW5pc20gZG9lc24ndCB3b3JrOiA+CisgICBpZiBoYXMoJ3BlcmwnKQorICAgICBwZXJsIDw8IEVPRgorICAgICAgIHRoaXMgd2lsbCBOT1Qgd29yayEKKyAgIEVPRgorICAgZW5kaWYKK0luc3RlYWQsIHB1dCB0aGUgUGVybC9QeXRob24vUnVieS9ldGMuIGNvbW1hbmQgaW4gYSBmdW5jdGlvbiBhbmQgY2FsbCB0aGF0CitmdW5jdGlvbjogPgorICAgIGlmIGhhcygncGVybCcpCisgICAgICBmdW5jdGlvbiBEZWZQZXJsKCkKKwlwZXJsIDw8IEVPRgorCSAgdGhpcyB3b3JrcworICAgIEVPRgorICAgICAgZW5kZnVuY3Rpb24KKyAgICAgIGNhbGwgRGVmUGVybCgpCisgICAgZW5kaWYKK05vdGUgdGhhdCAiRU9GIiBtdXN0IGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2lmX3B5dGgudHh0IGIvcnVudGltZS9kb2MvaWZfcHl0aC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3NWZjZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2lmX3B5dGgudHh0CkBAIC0wLDAgKzEsMjk5IEBACisqaWZfcHl0aC50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRmViIDI4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IFBhdWwgTW9vcmUKKworCitUaGUgUHl0aG9uIEludGVyZmFjZSB0byBWaW0JCQkJKnB5dGhvbiogKlB5dGhvbioKKworMS4gQ29tbWFuZHMJCQl8cHl0aG9uLWNvbW1hbmRzfAorMi4gVGhlIHZpbSBtb2R1bGUJCXxweXRob24tdmltfAorMy4gQnVmZmVyIG9iamVjdHMJCXxweXRob24tYnVmZmVyfAorNC4gUmFuZ2Ugb2JqZWN0cwkJfHB5dGhvbi1yYW5nZXwKKzUuIFdpbmRvdyBvYmplY3RzCQl8cHl0aG9uLXdpbmRvd3wKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCitUaGUgUHl0aG9uIGludGVyZmFjZSBpcyBhdmFpbGFibGUgb25seSB3aGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCB0aGUKK3wrcHl0aG9ufCBmZWF0dXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIENvbW1hbmRzCQkJCQkJKnB5dGhvbi1jb21tYW5kcyoKKworCQkJCQkqOnB5dGhvbiogKjpweSogKkUyMDUqICpFMjYzKiAqRTI2NCoKKzpbcmFuZ2VdcHlbdGhvbl0ge3N0bXR9CisJCQlFeGVjdXRlIFB5dGhvbiBzdGF0ZW1lbnQge3N0bXR9LgorCis6W3JhbmdlXXB5W3Rob25dIDw8IHtlbmRtYXJrZXJ9Cit7c2NyaXB0fQore2VuZG1hcmtlcn0KKwkJCUV4ZWN1dGUgUHl0aG9uIHNjcmlwdCB7c2NyaXB0fS4KKwkJCU5vdGU6IFRoaXMgY29tbWFuZCBkb2Vzbid0IHdvcmsgd2hlbiB0aGUgUHl0aG9uCisJCQlmZWF0dXJlIHdhc24ndCBjb21waWxlZCBpbi4gIFRvIGF2b2lkIGVycm9ycywgc2VlCisJCQl8c2NyaXB0LWhlcmV8LgorCit7ZW5kbWFya2VyfSBtdXN0IE5PVCBiZSBwcmVjZWRlZCBieSBhbnkgd2hpdGUgc3BhY2UuICBJZiB7ZW5kbWFya2VyfSBpcworb21pdHRlZCBmcm9tIGFmdGVyIHRoZSAiPDwiLCBhIGRvdCAnLicgbXVzdCBiZSB1c2VkIGFmdGVyIHtzY3JpcHR9LCBsaWtlCitmb3IgdGhlIHw6YXBwZW5kfCBhbmQgfDppbnNlcnR8IGNvbW1hbmRzLgorVGhpcyBmb3JtIG9mIHRoZSB8OnB5dGhvbnwgY29tbWFuZCBpcyBtYWlubHkgdXNlZnVsIGZvciBpbmNsdWRpbmcgcHl0aG9uIGNvZGUKK2luIFZpbSBzY3JpcHRzLgorCitFeGFtcGxlOiA+CisJZnVuY3Rpb24hIEljZWNyZWFtSW5pdGlhbGl6ZSgpCisJcHl0aG9uIDw8IEVPRgorCWNsYXNzIFN0cmF3YmVycnlJY2VjcmVhbToKKwkJZGVmIF9fY2FsbF9fKHNlbGYpOgorCQkJcHJpbnQgJ0VBVCBNRScKKwlFT0YKKwllbmRmdW5jdGlvbgorPAorTm90ZTogUHl0aG9uIGlzIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBpbmRlbnRpbmcuICBBbHNvIG1ha2Ugc3VyZSB0aGUgImNsYXNzIgorbGluZSBhbmQgIkVPRiIgZG8gbm90IGhhdmUgYW55IGluZGVudC4KKworCQkJCQkJCSo6cHlmaWxlKiAqOnB5ZioKKzpbcmFuZ2VdcHlmW2lsZV0ge2ZpbGV9CisJCQlFeGVjdXRlIHRoZSBQeXRob24gc2NyaXB0IGluIHtmaWxlfS4gIFRoZSB3aG9sZQorCQkJYXJndW1lbnQgaXMgdXNlZCBhcyBhIHNpbmdsZSBmaWxlIG5hbWUuICB7bm90IGluIFZpfQorCitCb3RoIG9mIHRoZXNlIGNvbW1hbmRzIGRvIGVzc2VudGlhbGx5IHRoZSBzYW1lIHRoaW5nIC0gdGhleSBleGVjdXRlIGEgcGllY2Ugb2YKK1B5dGhvbiBjb2RlLCB3aXRoIHRoZSAiY3VycmVudCByYW5nZSIgfHB5dGhvbi1yYW5nZXwgc2V0IHRvIHRoZSBnaXZlbiBsaW5lCityYW5nZS4KKworSW4gdGhlIGNhc2Ugb2YgOnB5dGhvbiwgdGhlIGNvZGUgdG8gZXhlY3V0ZSBpcyBpbiB0aGUgY29tbWFuZC1saW5lLgorSW4gdGhlIGNhc2Ugb2YgOnB5ZmlsZSwgdGhlIGNvZGUgdG8gZXhlY3V0ZSBpcyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGZpbGUuCisKK1B5dGhvbiBjb21tYW5kcyBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgfHNhbmRib3h8LgorCitUbyBwYXNzIGFyZ3VtZW50cyB5b3UgbmVlZCB0byBzZXQgc3lzLmFyZ3ZbXSBleHBsaWNpdGx5LiAgRXhhbXBsZTogPgorCisJOnB5dGhvbiBpbXBvcnQgc3lzCisJOnB5dGhvbiBzeXMuYXJndiA9IFsiZm9vIiwgImJhciJdCisJOnB5ZmlsZSBteXNjcmlwdC5weQorCitIZXJlIGFyZSBzb21lIGV4YW1wbGVzCQkJCQkqcHl0aG9uLWV4YW1wbGVzKiAgPgorCisJOnB5dGhvbiBmcm9tIHZpbSBpbXBvcnQgKgorCTpweXRob24gZnJvbSBzdHJpbmcgaW1wb3J0IHVwcGVyCisJOnB5dGhvbiBjdXJyZW50LmxpbmUgPSB1cHBlcihjdXJyZW50LmxpbmUpCisJOnB5dGhvbiBwcmludCAiSGVsbG8iCisJOnB5dGhvbiBzdHIgPSBjdXJyZW50LmJ1ZmZlcls0Ml0KKworKE5vdGUgdGhhdCBjaGFuZ2VzIC0gbGlrZSB0aGUgaW1wb3J0cyAtIHBlcnNpc3QgZnJvbSBvbmUgY29tbWFuZCB0byB0aGUgbmV4dCwKK2p1c3QgbGlrZSBpbiB0aGUgUHl0aG9uIGludGVycHJldGVyLikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBUaGUgdmltIG1vZHVsZQkJCQkJKnB5dGhvbi12aW0qCisKK1B5dGhvbiBjb2RlIGdldHMgYWxsIG9mIGl0cyBhY2Nlc3MgdG8gdmltICh3aXRoIG9uZSBleGNlcHRpb24gLSBzZWUKK3xweXRob24tb3V0cHV0fCBiZWxvdykgdmlhIHRoZSAidmltIiBtb2R1bGUuIFRoZSB2aW0gbW9kdWxlIGltcGxlbWVudHMgdHdvCittZXRob2RzLCB0aHJlZSBjb25zdGFudHMsIGFuZCBvbmUgZXJyb3Igb2JqZWN0LiAgWW91IG5lZWQgdG8gaW1wb3J0IHRoZSB2aW0KK21vZHVsZSBiZWZvcmUgdXNpbmcgaXQ6ID4KKwk6cHl0aG9uIGltcG9ydCB2aW0KKworT3ZlcnZpZXcgPgorCXByaW50ICJIZWxsbyIJCQkjIGRpc3BsYXlzIGEgbWVzc2FnZQorCXZpbS5jb21tYW5kKGNtZCkJCSMgZXhlY3V0ZSBhbiBleCBjb21tYW5kCisJdyA9IHZpbS53aW5kb3dzW25dCQkjIGdldHMgd2luZG93ICJuIgorCWN3ID0gdmltLmN1cnJlbnQud2luZG93CQkjIGdldHMgdGhlIGN1cnJlbnQgd2luZG93CisJYiA9IHZpbS5idWZmZXJzW25dCQkjIGdldHMgYnVmZmVyICJuIgorCWNiID0gdmltLmN1cnJlbnQuYnVmZmVyCQkjIGdldHMgdGhlIGN1cnJlbnQgYnVmZmVyCisJdy5oZWlnaHQgPSBsaW5lcwkJIyBzZXRzIHRoZSB3aW5kb3cgaGVpZ2h0CisJdy5jdXJzb3IgPSAocm93LCBjb2wpCQkjIHNldHMgdGhlIHdpbmRvdyBjdXJzb3IgcG9zaXRpb24KKwlwb3MgPSB3LmN1cnNvcgkJCSMgZ2V0cyBhIHR1cGxlIChyb3csIGNvbCkKKwluYW1lID0gYi5uYW1lCQkJIyBnZXRzIHRoZSBidWZmZXIgZmlsZSBuYW1lCisJbGluZSA9IGJbbl0JCQkjIGdldHMgYSBsaW5lIGZyb20gdGhlIGJ1ZmZlcgorCWxpbmVzID0gYltuOm1dCQkJIyBnZXRzIGEgbGlzdCBvZiBsaW5lcworCW51bSA9IGxlbihiKQkJCSMgZ2V0cyB0aGUgbnVtYmVyIG9mIGxpbmVzCisJYltuXSA9IHN0cgkJCSMgc2V0cyBhIGxpbmUgaW4gdGhlIGJ1ZmZlcgorCWJbbjptXSA9IFtzdHIxLCBzdHIyLCBzdHIzXQkjIHNldHMgYSBudW1iZXIgb2YgbGluZXMgYXQgb25jZQorCWRlbCBiW25dCQkJIyBkZWxldGVzIGEgbGluZQorCWRlbCBiW246bV0JCQkjIGRlbGV0ZXMgYSBudW1iZXIgb2YgbGluZXMKKworCitNZXRob2RzIG9mIHRoZSAidmltIiBtb2R1bGUKKwordmltLmNvbW1hbmQoc3RyKQkJCQkJKnB5dGhvbi1jb21tYW5kKgorCUV4ZWN1dGVzIHRoZSB2aW0gKGV4LW1vZGUpIGNvbW1hbmQgc3RyLiBSZXR1cm5zIE5vbmUuCisJRXhhbXBsZXM6ID4KKwkJdmltLmNvbW1hbmQoInNldCB0dz03MiIpCisJCXZpbS5jb21tYW5kKCIlcy9hYWEvYmJiL2ciKQorPAlUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gZXhlY3V0ZXMgTm9ybWFsIG1vZGUgY29tbWFuZHM6ID4KKwkJZGVmIG5vcm1hbChzdHIpOgorCQkJdmltLmNvbW1hbmQoIm5vcm1hbCAiK3N0cikKKwkJIyBOb3RlIHRoZSB1c2Ugb2Ygc2luZ2xlIHF1b3RlcyB0byBkZWxpbWl0IGEgc3RyaW5nIGNvbnRhaW5pbmcKKwkJIyBkb3VibGUgcXVvdGVzCisJCW5vcm1hbCgnImEyZGQiYVAnKQorPAkJCQkJCQkJKkU2NTkqCisJVGhlICI6cHl0aG9uIiBjb21tYW5kIGNhbm5vdCBiZSB1c2VkIHJlY3Vyc2l2ZWx5IHdpdGggUHl0aG9uIDIuMiBhbmQKKwlvbGRlci4gIFRoaXMgb25seSB3b3JrcyB3aXRoIFB5dGhvbiAyLjMgYW5kIGxhdGVyOiA+CisJCTpweXRob24gdmltLmNvbW1hbmQoInB5dGhvbiBwcmludCAnSGVsbG8gYWdhaW4gUHl0aG9uJyIpCisKK3ZpbS5ldmFsKHN0cikJCQkJCQkqcHl0aG9uLWV2YWwqCisJRXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIHN0ciB1c2luZyB0aGUgdmltIGludGVybmFsIGV4cHJlc3Npb24KKwlldmFsdWF0b3IgKHNlZSB8ZXhwcmVzc2lvbnwpLiBSZXR1cm5zIHRoZSBleHByZXNzaW9uIHJlc3VsdCBhcyBhCisJc3RyaW5nLgorCUV4YW1wbGVzOiA+CisJCXRleHRfd2lkdGggPSB2aW0uZXZhbCgiJnR3IikKKwkJc3RyID0gdmltLmV2YWwoIjEyKzEyIikJCSMgTkIgcmVzdWx0IGlzIGEgc3RyaW5nISBVc2UKKwkJCQkJCSMgc3RyaW5nLmF0b2koKSB0byBjb252ZXJ0IHRvCisJCQkJCQkjIGEgbnVtYmVyLgorCitFcnJvciBvYmplY3Qgb2YgdGhlICJ2aW0iIG1vZHVsZQorCit2aW0uZXJyb3IJCQkJCQkqcHl0aG9uLWVycm9yKgorCVVwb24gZW5jb3VudGVyaW5nIGEgVmltIGVycm9yLCBQeXRob24gcmFpc2VzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlCisJdmltLmVycm9yLgorCUV4YW1wbGU6ID4KKwkJdHJ5OgorCQkJdmltLmNvbW1hbmQoInB1dCBhIikKKwkJZXhjZXB0IHZpbS5lcnJvcjoKKwkJCSMgbm90aGluZyBpbiByZWdpc3RlciBhCisKK0NvbnN0YW50cyBvZiB0aGUgInZpbSIgbW9kdWxlCisKKwlOb3RlIHRoYXQgdGhlc2UgYXJlIG5vdCBhY3R1YWxseSBjb25zdGFudHMgLSB5b3UgY291bGQgcmVhc3NpZ24gdGhlbS4KKwlCdXQgdGhpcyBpcyBzaWxseSwgYXMgeW91IHdvdWxkIHRoZW4gbG9zZSBhY2Nlc3MgdG8gdGhlIHZpbSBvYmplY3RzCisJdG8gd2hpY2ggdGhlIHZhcmlhYmxlcyByZWZlcnJlZC4KKwordmltLmJ1ZmZlcnMJCQkJCQkqcHl0aG9uLWJ1ZmZlcnMqCisJQSBzZXF1ZW5jZSBvYmplY3QgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgbGlzdCBvZiB2aW0gYnVmZmVycy4gVGhlCisJb2JqZWN0IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczogPgorCQliID0gdmltLmJ1ZmZlcnNbaV0JIyBJbmRleGluZyAocmVhZC1vbmx5KQorCQliIGluIHZpbS5idWZmZXJzCSMgTWVtYmVyc2hpcCB0ZXN0CisJCW4gPSBsZW4odmltLmJ1ZmZlcnMpCSMgTnVtYmVyIG9mIGVsZW1lbnRzCisJCWZvciBiIGluIHZpbS5idWZmZXJzOgkjIFNlcXVlbnRpYWwgYWNjZXNzCis8Cit2aW0ud2luZG93cwkJCQkJCSpweXRob24td2luZG93cyoKKwlBIHNlcXVlbmNlIG9iamVjdCBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBsaXN0IG9mIHZpbSB3aW5kb3dzLiBUaGUKKwlvYmplY3Qgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOiA+CisJCXcgPSB2aW0ud2luZG93c1tpXQkjIEluZGV4aW5nIChyZWFkLW9ubHkpCisJCXcgaW4gdmltLndpbmRvd3MJIyBNZW1iZXJzaGlwIHRlc3QKKwkJbiA9IGxlbih2aW0ud2luZG93cykJIyBOdW1iZXIgb2YgZWxlbWVudHMKKwkJZm9yIHcgaW4gdmltLndpbmRvd3M6CSMgU2VxdWVudGlhbCBhY2Nlc3MKKzwKK3ZpbS5jdXJyZW50CQkJCQkJKnB5dGhvbi1jdXJyZW50KgorCUFuIG9iamVjdCBwcm92aWRpbmcgYWNjZXNzICh2aWEgc3BlY2lmaWMgYXR0cmlidXRlcykgdG8gdmFyaW91cworCSJjdXJyZW50IiBvYmplY3RzIGF2YWlsYWJsZSBpbiB2aW06CisJCXZpbS5jdXJyZW50LmxpbmUJVGhlIGN1cnJlbnQgbGluZSAoUlcpCQlTdHJpbmcKKwkJdmltLmN1cnJlbnQuYnVmZmVyCVRoZSBjdXJyZW50IGJ1ZmZlciAoUk8pCQlCdWZmZXIKKwkJdmltLmN1cnJlbnQud2luZG93CVRoZSBjdXJyZW50IHdpbmRvdyAoUk8pCQlXaW5kb3cKKwkJdmltLmN1cnJlbnQucmFuZ2UJVGhlIGN1cnJlbnQgbGluZSByYW5nZSAoUk8pCVJhbmdlCisKKwlUaGUgbGFzdCBjYXNlIGRlc2VydmVzIGEgbGl0dGxlIGV4cGxhbmF0aW9uLiBXaGVuIHRoZSA6cHl0aG9uIG9yCisJOnB5ZmlsZSBjb21tYW5kIHNwZWNpZmllcyBhIHJhbmdlLCB0aGlzIHJhbmdlIG9mIGxpbmVzIGJlY29tZXMgdGhlCisJImN1cnJlbnQgcmFuZ2UiLiBBIHJhbmdlIGlzIGEgYml0IGxpa2UgYSBidWZmZXIsIGJ1dCB3aXRoIGFsbCBhY2Nlc3MKKwlyZXN0cmljdGVkIHRvIGEgc3Vic2V0IG9mIGxpbmVzLiBTZWUgfHB5dGhvbi1yYW5nZXwgZm9yIG1vcmUgZGV0YWlscy4KKworCitPdXRwdXQgZnJvbSBQeXRob24JCQkJCSpweXRob24tb3V0cHV0KgorCVZpbSBkaXNwbGF5cyBhbGwgUHl0aG9uIGNvZGUgb3V0cHV0IGluIHRoZSBWaW0gbWVzc2FnZSBhcmVhLiAgTm9ybWFsCisJb3V0cHV0IGFwcGVhcnMgYXMgaW5mb3JtYXRpb24gbWVzc2FnZXMsIGFuZCBlcnJvciBvdXRwdXQgYXBwZWFycyBhcworCWVycm9yIG1lc3NhZ2VzLgorCisJSW4gaW1wbGVtZW50YXRpb24gdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBhbGwgb3V0cHV0IHRvIHN5cy5zdGRvdXQKKwkoaW5jbHVkaW5nIHRoZSBvdXRwdXQgZnJvbSBwcmludCBzdGF0ZW1lbnRzKSBhcHBlYXJzIGFzIGluZm9ybWF0aW9uCisJbWVzc2FnZXMsIGFuZCBhbGwgb3V0cHV0IHRvIHN5cy5zdGRlcnIgKGluY2x1ZGluZyBlcnJvciB0cmFjZWJhY2tzKQorCWFwcGVhcnMgYXMgZXJyb3IgbWVzc2FnZXMuCisKKwkJCQkJCQkqcHl0aG9uLWlucHV0KgorCUlucHV0ICh2aWEgc3lzLnN0ZGluLCBpbmNsdWRpbmcgaW5wdXQoKSBhbmQgcmF3X2lucHV0KCkpIGlzIG5vdAorCXN1cHBvcnRlZCwgYW5kIG1heSBjYXVzZSB0aGUgcHJvZ3JhbSB0byBjcmFzaC4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUKKwlmaXhlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBCdWZmZXIgb2JqZWN0cwkJCQkJKnB5dGhvbi1idWZmZXIqCisKK0J1ZmZlciBvYmplY3RzIHJlcHJlc2VudCB2aW0gYnVmZmVycy4gWW91IGNhbiBvYnRhaW4gdGhlbSBpbiBhIG51bWJlciBvZiB3YXlzOgorCS0gdmlhIHZpbS5jdXJyZW50LmJ1ZmZlciAofHB5dGhvbi1jdXJyZW50fCkKKwktIGZyb20gaW5kZXhpbmcgdmltLmJ1ZmZlcnMgKHxweXRob24tYnVmZmVyc3wpCisJLSBmcm9tIHRoZSAiYnVmZmVyIiBhdHRyaWJ1dGUgb2YgYSB3aW5kb3cgKHxweXRob24td2luZG93fCkKKworQnVmZmVyIG9iamVjdHMgaGF2ZSBvbmUgcmVhZC1vbmx5IGF0dHJpYnV0ZSAtIG5hbWUgLSB0aGUgZnVsbCBmaWxlIG5hbWUgZm9yCit0aGUgYnVmZmVyLiBUaGV5IGFsc28gaGF2ZSB0aHJlZSBtZXRob2RzIChhcHBlbmQsIG1hcmssIGFuZCByYW5nZTsgc2VlIGJlbG93KS4KKworWW91IGNhbiBhbHNvIHRyZWF0IGJ1ZmZlciBvYmplY3RzIGFzIHNlcXVlbmNlIG9iamVjdHMuIEluIHRoaXMgY29udGV4dCwgdGhleQorYWN0IGFzIGlmIHRoZXkgd2VyZSBsaXN0cyAoeWVzLCB0aGV5IGFyZSBtdXRhYmxlKSBvZiBzdHJpbmdzLCB3aXRoIGVhY2gKK2VsZW1lbnQgYmVpbmcgYSBsaW5lIG9mIHRoZSBidWZmZXIuIEFsbCBvZiB0aGUgdXN1YWwgc2VxdWVuY2Ugb3BlcmF0aW9ucywKK2luY2x1ZGluZyBpbmRleGluZywgaW5kZXggYXNzaWdubWVudCwgc2xpY2luZyBhbmQgc2xpY2UgYXNzaWdubWVudCwgd29yayBhcworeW91IHdvdWxkIGV4cGVjdC4gTm90ZSB0aGF0IHRoZSByZXN1bHQgb2YgaW5kZXhpbmcgKHNsaWNpbmcpIGEgYnVmZmVyIGlzIGEKK3N0cmluZyAobGlzdCBvZiBzdHJpbmdzKS4gVGhpcyBoYXMgb25lIHVudXN1YWwgY29uc2VxdWVuY2UgLSBiWzpdIGlzIGRpZmZlcmVudAorZnJvbSBiLiBJbiBwYXJ0aWN1bGFyLCAiYls6XSA9IE5vbmUiIGRlbGV0ZXMgdGhlIHdob2xlIG9mIHRoZSBidWZmZXIsIHdoZXJlYXMKKyJiID0gTm9uZSIgbWVyZWx5IHVwZGF0ZXMgdGhlIHZhcmlhYmxlIGIsIHdpdGggbm8gZWZmZWN0IG9uIHRoZSBidWZmZXIuCisKK0J1ZmZlciBpbmRleGVzIHN0YXJ0IGF0IHplcm8sIGFzIGlzIG5vcm1hbCBpbiBQeXRob24uIFRoaXMgZGlmZmVycyBmcm9tIHZpbQorbGluZSBudW1iZXJzLCB3aGljaCBzdGFydCBmcm9tIDEuIFRoaXMgaXMgcGFydGljdWxhcmx5IHJlbGV2YW50IHdoZW4gZGVhbGluZword2l0aCBtYXJrcyAoc2VlIGJlbG93KSB3aGljaCB1c2UgdmltIGxpbmUgbnVtYmVycy4KKworVGhlIGJ1ZmZlciBvYmplY3QgbWV0aG9kcyBhcmU6CisJYi5hcHBlbmQoc3RyKQlBcHBlbmQgYSBsaW5lIHRvIHRoZSBidWZmZXIKKwliLmFwcGVuZChsaXN0KQlBcHBlbmQgYSBsaXN0IG9mIGxpbmVzIHRvIHRoZSBidWZmZXIKKwkJCU5vdGUgdGhhdCB0aGUgb3B0aW9uIG9mIHN1cHBseWluZyBhIGxpc3Qgb2Ygc3RyaW5ncyB0bworCQkJdGhlIGFwcGVuZCBtZXRob2QgZGlmZmVycyBmcm9tIHRoZSBlcXVpdmFsZW50IG1ldGhvZAorCQkJZm9yIFB5dGhvbidzIGJ1aWx0LWluIGxpc3Qgb2JqZWN0cy4KKwliLm1hcmsobmFtZSkJUmV0dXJuIGEgdHVwbGUgKHJvdyxjb2wpIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24KKwkJCW9mIHRoZSBuYW1lZCBtYXJrIChjYW4gYWxzbyBnZXQgdGhlIFtdIjw+IG1hcmtzKQorCWIucmFuZ2UocyxlKQlSZXR1cm4gYSByYW5nZSBvYmplY3QgKHNlZSB8cHl0aG9uLXJhbmdlfCkgd2hpY2gKKwkJCXJlcHJlc2VudHMgdGhlIHBhcnQgb2YgdGhlIGdpdmVuIGJ1ZmZlciBiZXR3ZWVuIGxpbmUKKwkJCW51bWJlcnMgcyBhbmQgZSB8aW5jbHVzaXZlfC4KKworRXhhbXBsZXMgKGFzc3VtZSBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlcikgPgorCXByaW50IGIubmFtZQkJIyB3cml0ZSB0aGUgYnVmZmVyIGZpbGUgbmFtZQorCWJbMF0gPSAiaGVsbG8hISEiCSMgcmVwbGFjZSB0aGUgdG9wIGxpbmUKKwliWzpdID0gTm9uZQkJIyBkZWxldGUgdGhlIHdob2xlIGJ1ZmZlcgorCWRlbCBiWzpdCQkjIGRlbGV0ZSB0aGUgd2hvbGUgYnVmZmVyIChzYW1lIGFzIGFib3ZlKQorCWJbMDowXSA9IFsgImEgbGluZSIgXQkjIGFkZCBhIGxpbmUgYXQgdGhlIHRvcAorCWRlbCBiWzJdCQkjIGRlbGV0ZSBhIGxpbmUgKHRoZSB0aGlyZCkKKwliLmFwcGVuZCgiYm90dG9tIikJIyBhZGQgYSBsaW5lIGF0IHRoZSBib3R0b20KKwluID0gbGVuKGIpCQkjIG51bWJlciBvZiBsaW5lcworCShyb3csY29sKSA9IGIubWFyaygnYScpICMgbmFtZWQgbWFyaworCXIgPSBiLnJhbmdlKDEsNSkJIyBhIHN1Yi1yYW5nZSBvZiB0aGUgYnVmZmVyCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gUmFuZ2Ugb2JqZWN0cwkJCQkJKnB5dGhvbi1yYW5nZSoKKworUmFuZ2Ugb2JqZWN0cyByZXByZXNlbnQgYSBwYXJ0IG9mIGEgdmltIGJ1ZmZlci4gWW91IGNhbiBvYnRhaW4gdGhlbSBpbiBhCitudW1iZXIgb2Ygd2F5czoKKwktIHZpYSB2aW0uY3VycmVudC5yYW5nZSAofHB5dGhvbi1jdXJyZW50fCkKKwktIGZyb20gYSBidWZmZXIncyByYW5nZSgpIG1ldGhvZCAofHB5dGhvbi1idWZmZXJ8KQorCitBIHJhbmdlIG9iamVjdCBpcyBhbG1vc3QgaWRlbnRpY2FsIGluIG9wZXJhdGlvbiB0byBhIGJ1ZmZlciBvYmplY3QuIEhvd2V2ZXIsCithbGwgb3BlcmF0aW9ucyBhcmUgcmVzdHJpY3RlZCB0byB0aGUgbGluZXMgd2l0aGluIHRoZSByYW5nZSAodGhpcyBsaW5lIHJhbmdlCitjYW4sIG9mIGNvdXJzZSwgY2hhbmdlIGFzIGEgcmVzdWx0IG9mIHNsaWNlIGFzc2lnbm1lbnRzLCBsaW5lIGRlbGV0aW9ucywgb3IKK3RoZSByYW5nZS5hcHBlbmQoKSBtZXRob2QpLgorCitUaGUgcmFuZ2Ugb2JqZWN0IGF0dHJpYnV0ZXMgYXJlOgorCXIuc3RhcnQJCUluZGV4IG9mIGZpcnN0IGxpbmUgaW50byB0aGUgYnVmZmVyCisJci5lbmQJCUluZGV4IG9mIGxhc3QgbGluZSBpbnRvIHRoZSBidWZmZXIKKworVGhlIHJhbmdlIG9iamVjdCBtZXRob2RzIGFyZToKKwlyLmFwcGVuZChzdHIpCUFwcGVuZCBhIGxpbmUgdG8gdGhlIHJhbmdlCisJci5hcHBlbmQobGlzdCkJQXBwZW5kIGEgbGlzdCBvZiBsaW5lcyB0byB0aGUgcmFuZ2UKKwkJCU5vdGUgdGhhdCB0aGUgb3B0aW9uIG9mIHN1cHBseWluZyBhIGxpc3Qgb2Ygc3RyaW5ncyB0bworCQkJdGhlIGFwcGVuZCBtZXRob2QgZGlmZmVycyBmcm9tIHRoZSBlcXVpdmFsZW50IG1ldGhvZAorCQkJZm9yIFB5dGhvbidzIGJ1aWx0LWluIGxpc3Qgb2JqZWN0cy4KKworRXhhbXBsZSAoYXNzdW1lIHIgaXMgdGhlIGN1cnJlbnQgcmFuZ2UpOgorCSMgU2VuZCBhbGwgbGluZXMgaW4gYSByYW5nZSB0byB0aGUgZGVmYXVsdCBwcmludGVyCisJdmltLmNvbW1hbmQoIiVkLCVkaGFyZGNvcHkhIiAlIChyLnN0YXJ0KzEsci5lbmQrMSkpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gV2luZG93IG9iamVjdHMJCQkJCSpweXRob24td2luZG93KgorCitXaW5kb3cgb2JqZWN0cyByZXByZXNlbnQgdmltIHdpbmRvd3MuIFlvdSBjYW4gb2J0YWluIHRoZW0gaW4gYSBudW1iZXIgb2Ygd2F5czoKKwktIHZpYSB2aW0uY3VycmVudC53aW5kb3cgKHxweXRob24tY3VycmVudHwpCisJLSBmcm9tIGluZGV4aW5nIHZpbS53aW5kb3dzICh8cHl0aG9uLXdpbmRvd3N8KQorCitZb3UgY2FuIG1hbmlwdWxhdGUgd2luZG93IG9iamVjdHMgb25seSB0aHJvdWdoIHRoZWlyIGF0dHJpYnV0ZXMuIFRoZXkgaGF2ZSBubworbWV0aG9kcywgYW5kIG5vIHNlcXVlbmNlIG9yIG90aGVyIGludGVyZmFjZS4KKworV2luZG93IGF0dHJpYnV0ZXMgYXJlOgorCWJ1ZmZlciAocmVhZC1vbmx5KQlUaGUgYnVmZmVyIGRpc3BsYXllZCBpbiB0aGlzIHdpbmRvdworCWN1cnNvciAocmVhZC13cml0ZSkJVGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB3aW5kb3cKKwkJCQlUaGlzIGlzIGEgdHVwbGUsIChyb3csY29sKS4KKwloZWlnaHQgKHJlYWQtd3JpdGUpCVRoZSB3aW5kb3cgaGVpZ2h0LCBpbiByb3dzCisJd2lkdGggKHJlYWQtd3JpdGUpCVRoZSB3aW5kb3cgd2lkdGgsIGluIGNvbHVtbnMKK1RoZSBoZWlnaHQgYXR0cmlidXRlIGlzIHdyaXRhYmxlIG9ubHkgaWYgdGhlIHNjcmVlbiBpcyBzcGxpdCBob3Jpem9udGFsbHkuCitUaGUgd2lkdGggYXR0cmlidXRlIGlzIHdyaXRhYmxlIG9ubHkgaWYgdGhlIHNjcmVlbiBpcyBzcGxpdCB2ZXJ0aWNhbGx5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pZl9ydWJ5LnR4dCBiL3J1bnRpbWUvZG9jL2lmX3J1YnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDA5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pZl9ydWJ5LnR4dApAQCAtMCwwICsxLDE3NSBAQAorKmlmX3J1YnkudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1hciAxNAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBTaHVnbyBNYWVkYQorCitUaGUgUnVieSBJbnRlcmZhY2UgdG8gVmltCQkJCSpydWJ5KiAqUnVieSoKKworCisxLiBDb21tYW5kcwkJCXxydWJ5LWNvbW1hbmRzfAorMi4gVGhlIFZJTSBtb2R1bGUJCXxydWJ5LXZpbXwKKzMuIFZJTTo6QnVmZmVyIG9iamVjdHMJCXxydWJ5LWJ1ZmZlcnwKKzQuIFZJTTo6V2luZG93IG9iamVjdHMJCXxydWJ5LXdpbmRvd3wKKzUuIEdsb2JhbCB2YXJpYWJsZXMJCXxydWJ5LWdsb2JhbHN8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKwkJCSpFMjY2KiAqRTI2NyogKkUyNjgqICpFMjY5KiAqRTI3MCogKkUyNzEqICpFMjcyKiAqRTI3MyoKKworVGhlIFJ1YnkgaW50ZXJmYWNlIG9ubHkgd29ya3Mgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlIHwrcnVieXwgZmVhdHVyZS4KKworVGhlIGhvbWUgcGFnZSBmb3IgcnVieSBpcyBodHRwOi8vd3d3LnJ1YnktbGFuZy5vcmcvLiAgWW91IGNhbiBmaW5kIGxpbmtzIGZvcgorZG93bmxvYWRpbmcgUnVieSB0aGVyZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBDb21tYW5kcwkJCQkJCSpydWJ5LWNvbW1hbmRzKgorCisJCQkJCQkJKjpydWJ5KiAqOnJ1YioKKzpydWJbeV0ge2NtZH0JCUV4ZWN1dGUgUnVieSBjb21tYW5kIHtjbWR9LgorCis6cnViW3ldIDw8IHtlbmRwYXR0ZXJufQore3NjcmlwdH0KK3tlbmRwYXR0ZXJufQorCQkJRXhlY3V0ZSBSdWJ5IHNjcmlwdCB7c2NyaXB0fS4KKwkJCXtlbmRwYXR0ZXJufSBtdXN0IE5PVCBiZSBwcmVjZWRlZCBieSBhbnkgd2hpdGUgc3BhY2UuCisJCQlJZiB7ZW5kcGF0dGVybn0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBkb3QgJy4nCisJCQlsaWtlIGZvciB0aGUgfDphcHBlbmR8IGFuZCB8Omluc2VydHwgY29tbWFuZHMuIFRoaXMKKwkJCWZvcm0gb2YgdGhlIHw6cnVieXwgY29tbWFuZCBpcyBtYWlubHkgdXNlZnVsIGZvcgorCQkJaW5jbHVkaW5nIHJ1YnkgY29kZSBpbiB2aW0gc2NyaXB0cy4KKwkJCU5vdGU6IFRoaXMgY29tbWFuZCBkb2Vzbid0IHdvcmsgd2hlbiB0aGUgUnVieSBmZWF0dXJlCisJCQl3YXNuJ3QgY29tcGlsZWQgaW4uICBUbyBhdm9pZCBlcnJvcnMsIHNlZQorCQkJfHNjcmlwdC1oZXJlfC4KKworRXhhbXBsZSBWaW0gc2NyaXB0OiA+CisKKwlmdW5jdGlvbiEgUmVkR2VtKCkKKwlydWJ5IDw8IEVPRgorCWNsYXNzIEdhcm5ldAorCQlkZWYgaW5pdGlhbGl6ZShzKQorCQkJQGJ1ZmZlciA9IFZJTTo6QnVmZmVyLmN1cnJlbnQKKwkJCXZpbXB1dHMocykKKwkJZW5kCisJCWRlZiB2aW1wdXRzKHMpCisJCQlAYnVmZmVyLmFwcGVuZChAYnVmZmVyLmNvdW50LHMpCisJCWVuZAorCWVuZAorCWdlbSA9IEdhcm5ldC5uZXcoInByZXR0eSIpCisJRU9GCisJZW5kZnVuY3Rpb24KKzwKKworCQkJCQkJKjpydWJ5ZG8qICo6cnVieWQqICpFMjY1KgorOltyYW5nZV1ydWJ5ZFtvXSB7Y21kfQlFdmFsdWF0ZSBSdWJ5IGNvbW1hbmQge2NtZH0gZm9yIGVhY2ggbGluZSBpbiB0aGUKKwkJCVtyYW5nZV0sIHdpdGggJF8gYmVpbmcgc2V0IHRvIHRoZSB0ZXh0IG9mIGVhY2ggbGluZSBpbgorCQkJdHVybiwgd2l0aG91dCBhIHRyYWlsaW5nIDxFT0w+LiBTZXR0aW5nICRfIHdpbGwgY2hhbmdlCisJCQl0aGUgdGV4dCwgYnV0IG5vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIG9yCisJCQlkZWxldGUgbGluZXMgdXNpbmcgdGhpcyBjb21tYW5kLgorCQkJVGhlIGRlZmF1bHQgZm9yIFtyYW5nZV0gaXMgdGhlIHdob2xlIGZpbGU6ICIxLCQiLgorCisJCQkJCQkJKjpydWJ5ZmlsZSogKjpydWJ5ZioKKzpydWJ5ZltpbGVdIHtmaWxlfQlFeGVjdXRlIHRoZSBSdWJ5IHNjcmlwdCBpbiB7ZmlsZX0uICBUaGlzIGlzIHRoZSBzYW1lIGFzCisJCQkiOnJ1YnkgbG9hZCAnZmlsZSciLCBidXQgYWxsb3dzIGZpbGUgbmFtZSBjb21wbGV0aW9uLgorCitFeGVjdXRpbmcgUnVieSBjb21tYW5kcyBpcyBub3QgcG9zc2libGUgaW4gdGhlIHxzYW5kYm94fC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBUaGUgVklNIG1vZHVsZQkJCQkJKnJ1YnktdmltKgorCitSdWJ5IGNvZGUgZ2V0cyBhbGwgb2YgaXRzIGFjY2VzcyB0byB2aW0gdmlhIHRoZSAiVklNIiBtb2R1bGUuCisKK092ZXJ2aWV3ID4KKwlwcmludCAiSGVsbG8iCQkJIyBkaXNwbGF5cyBhIG1lc3NhZ2UKKwlWSU0uY29tbWFuZChjbWQpCQkjIGV4ZWN1dGUgYW4gZXggY29tbWFuZAorCW51bSA9IFZJTTo6V2luZG93LmNvdW50CQkjIGdldHMgdGhlIG51bWJlciBvZiB3aW5kb3dzCisJdyA9IFZJTTo6V2luZG93W25dCQkjIGdldHMgd2luZG93ICJuIgorCWN3ID0gVklNOjpXaW5kb3cuY3VycmVudAkjIGdldHMgdGhlIGN1cnJlbnQgd2luZG93CisJbnVtID0gVklNOjpCdWZmZXIuY291bnQJCSMgZ2V0cyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMKKwliID0gVklNOjpCdWZmZXJbbl0JCSMgZ2V0cyBidWZmZXIgIm4iCisJY2IgPSBWSU06OkJ1ZmZlci5jdXJyZW50CSMgZ2V0cyB0aGUgY3VycmVudCBidWZmZXIKKwl3LmhlaWdodCA9IGxpbmVzCQkjIHNldHMgdGhlIHdpbmRvdyBoZWlnaHQKKwl3LmN1cnNvciA9IFtyb3csIGNvbF0JCSMgc2V0cyB0aGUgd2luZG93IGN1cnNvciBwb3NpdGlvbgorCXBvcyA9IHcuY3Vyc29yCQkJIyBnZXRzIGFuIGFycmF5IFtyb3csIGNvbF0KKwluYW1lID0gYi5uYW1lCQkJIyBnZXRzIHRoZSBidWZmZXIgZmlsZSBuYW1lCisJbGluZSA9IGJbbl0JCQkjIGdldHMgYSBsaW5lIGZyb20gdGhlIGJ1ZmZlcgorCW51bSA9IGIuY291bnQJCQkjIGdldHMgdGhlIG51bWJlciBvZiBsaW5lcworCWJbbl0gPSBzdHIJCQkjIHNldHMgYSBsaW5lIGluIHRoZSBidWZmZXIKKwliLmRlbGV0ZShuKQkJCSMgZGVsZXRlcyBhIGxpbmUKKwliLmFwcGVuZChuLCBzdHIpCQkjIGFwcGVuZHMgYSBsaW5lIGFmdGVyIG4KKzwKKworTW9kdWxlIEZ1bmN0aW9uczoKKworCQkJCQkJCSpydWJ5LW1lc3NhZ2UqCitWSU06Om1lc3NhZ2Uoe21zZ30pCisJRGlzcGxheXMgdGhlIG1lc3NhZ2Uge21zZ30uCisKKwkJCQkJCQkqcnVieS1zZXRfb3B0aW9uKgorVklNOjpzZXRfb3B0aW9uKHthcmd9KQorCVNldHMgYSB2aW0gb3B0aW9uLiAge2FyZ30gY2FuIGJlIGFueSBhcmd1bWVudCB0aGF0IHRoZSAiOnNldCIgY29tbWFuZAorCWFjY2VwdHMuICBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IG5vIHNwYWNlcyBhcmUgYWxsb3dlZCBpbiB0aGUKKwlhcmd1bWVudCEgIFNlZSB8OnNldHwuCisKKwkJCQkJCQkqcnVieS1jb21tYW5kKgorVklNOjpjb21tYW5kKHtjbWR9KQorCUV4ZWN1dGVzIEV4IGNvbW1hbmQge2NtZH0uCisKKwkJCQkJCQkqcnVieS1ldmFsdWF0ZSoKK1ZJTTo6ZXZhbHVhdGUoe2V4cHJ9KQorCUV2YWx1YXRlcyB7ZXhwcn0gdXNpbmcgdGhlIHZpbSBpbnRlcm5hbCBleHByZXNzaW9uIGV2YWx1YXRvciAoc2VlCisJfGV4cHJlc3Npb258KS4gUmV0dXJucyB0aGUgZXhwcmVzc2lvbiByZXN1bHQgYXMgYSBzdHJpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gVklNOjpCdWZmZXIgb2JqZWN0cwkJCQkJKnJ1YnktYnVmZmVyKgorCitWSU06OkJ1ZmZlciBvYmplY3RzIHJlcHJlc2VudCB2aW0gYnVmZmVycy4KKworQ2xhc3MgTWV0aG9kczoKKworY3VycmVudAkJUmV0dXJucyB0aGUgY3VycmVudCBidWZmZXIgb2JqZWN0LgorY291bnQJCVJldHVybnMgdGhlIG51bWJlciBvZiBidWZmZXJzLgorc2VsZlt7bn1dCVJldHVybnMgdGhlIGJ1ZmZlciBvYmplY3QgZm9yIHRoZSBudW1iZXIge259LiBUaGUgZmlyc3QgbnVtYmVyCisJCWlzIDAuCisKK01ldGhvZHM6CisKK25hbWUJCVJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGJ1ZmZlci4KK251bWJlcgkJUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBidWZmZXIuCitjb3VudAkJUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpbmVzLgorbGVuZ3RoCQlSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGluZXMuCitzZWxmW3tufV0JUmV0dXJucyBhIGxpbmUgZnJvbSB0aGUgYnVmZmVyLiB7bn0gaXMgdGhlIGxpbmUgbnVtYmVyLgorc2VsZlt7bn1dID0ge3N0cn0KKwkJU2V0cyBhIGxpbmUgaW4gdGhlIGJ1ZmZlci4ge259IGlzIHRoZSBsaW5lIG51bWJlci4KK2RlbGV0ZSh7bn0pCURlbGV0ZXMgYSBsaW5lIGZyb20gdGhlIGJ1ZmZlci4ge259IGlzIHRoZSBsaW5lIG51bWJlci4KK2FwcGVuZCh7bn0sIHtzdHJ9KQorCQlBcHBlbmRzIGEgbGluZSBhZnRlciB0aGUgbGluZSB7bn0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVklNOjpXaW5kb3cgb2JqZWN0cwkJCQkJKnJ1Ynktd2luZG93KgorCitWSU06OldpbmRvdyBvYmplY3RzIHJlcHJlc2VudCB2aW0gd2luZG93cy4KKworQ2xhc3MgTWV0aG9kczoKKworY3VycmVudAkJUmV0dXJucyB0aGUgY3VycmVudCB3aW5kb3cgb2JqZWN0LgorY291bnQJCVJldHVybnMgdGhlIG51bWJlciBvZiB3aW5kb3dzLgorc2VsZlt7bn1dCVJldHVybnMgdGhlIHdpbmRvdyBvYmplY3QgZm9yIHRoZSBudW1iZXIge259LiBUaGUgZmlyc3QgbnVtYmVyCisJCWlzIDAuCisKK01ldGhvZHM6CisKK2J1ZmZlcgkJUmV0dXJucyB0aGUgYnVmZmVyIGRpc3BsYXllZCBpbiB0aGUgd2luZG93LgoraGVpZ2h0CQlSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdy4KK2hlaWdodCA9IHtufQlTZXRzIHRoZSB3aW5kb3cgaGVpZ2h0IHRvIHtufS4KK2N1cnNvcgkJUmV0dXJucyBhIFtyb3csIGNvbF0gYXJyYXkgZm9yIHRoZSBjdXJzb3IgcG9zaXRpb24uCitjdXJzb3IgPSBbe3Jvd30sIHtjb2x9XQorCQlTZXRzIHRoZSBjdXJzb3IgcG9zaXRpb24gdG8ge3Jvd30gYW5kIHtjb2x9LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIEdsb2JhbCB2YXJpYWJsZXMJCQkJCSpydWJ5LWdsb2JhbHMqCisKK1RoZXJlIGFyZSB0d28gZ2xvYmFsIHZhcmlhYmxlcy4KKworJGN1cndpbgkJVGhlIGN1cnJlbnQgd2luZG93IG9iamVjdC4KKyRjdXJidWYJCVRoZSBjdXJyZW50IGJ1ZmZlciBvYmplY3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2lmX3NuaWZmLnR4dCBiL3J1bnRpbWUvZG9jL2lmX3NuaWZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmIzNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaWZfc25pZmYudHh0CkBAIC0wLDAgKzEsOTUgQEAKKyppZl9zbmlmZi50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAxIFNlcCAwMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAorCQlieSBBbnRvbiBMZWhlcmJhdWVyICh0b25pQHRha2VmaXZlLmNvLmF0KQorCisKK1NOaUZGKyBhbmQgVmltCQkJCSAgICAqc25pZmYqCisKKzEuIEludHJvZHVjdGlvbgkJCQkgICAgfHNuaWZmLWludHJvfAorMi4gQ29tbWFuZHMJCQkJICAgIHxzbmlmZi1jb21tYW5kc3wKKzMuIENvbXBpbGluZyBWaW0gd2l0aCBTTmlGRisgaW50ZXJmYWNlCSAgICB8c25pZmYtY29tcGlsaW5nfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9ICAqRTI3NSogKkUyNzQqICpFMjc2KiAqRTI3OCogKkUyNzkqCisKK1RoZSBTTmlGRisgaW50ZXJmYWNlIG9ubHkgd29ya3MsIHdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIHRoZSB8K3NuaWZmfAorZmVhdHVyZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJbnRyb2R1Y3Rpb24JCQkJCSpzbmlmZi1pbnRybyoKKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBmb3IgdGhlIHVzZSB3aXRoIFNOaUZGKyBhcmUgYXZhaWxhYmxlOgorCisgICAqIFZpbSBjYW4gYmUgdXNlZCBmb3IgYWxsIGVkaXRpbmcgcmVxdWVzdHMKKyAgICogU05pRkYrIHJlY29nbml6ZXMgYW5kIHVwZGF0ZXMgYWxsIGJyb3dzZXJzIHdoZW4gYSBmaWxlIGlzIHNhdmVkIGluIFZpbQorICAgKiBTTmlGRisgY29tbWFuZHMgY2FuIGJlIGlzc3VlZCBkaXJlY3RseSBmcm9tIFZpbQorCitIb3cgdG8gdXNlIFZpbSB3aXRoIFNOaUZGKworICAgMS4gTWFrZSBzdXJlIFNOaUZGKyBpcyBydW5uaW5nLgorICAgMi4gSW4gdGhlIEVkaXRvciB2aWV3IG9mIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cgc2V0IHRoZSBGaWVsZCBuYW1lZAorICAgICAgJ0V4dGVybmFsIEVkaXRvcicgdG8gJ0VtYWNzL1ZpbScuCisgICA0LiBTdGFydCBWaW0KKyAgIDUuIENvbm5lY3QgdG8gU05pRkYrICg6c25pZmYgY29ubmVjdCkKKworT25jZSBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIFNOaUZGKyB1c2VzIFZpbSBmb3IgYWxsIHJlcXVlc3RzIHRvIHNob3cgb3IKK2VkaXQgc291cmNlIGNvZGUuICBPbiB0aGUgb3RoZXIgaGFuZCwgeW91IGNhbiBzZW5kIHF1ZXJpZXMgdG8gU05pRkYrIHdpdGggdGhlCis6c25pZmYgY29tbWFuZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBDb21tYW5kcwkJCQkgICAgKnNuaWZmLWNvbW1hbmRzKgorCisJCQkgICAgKjpzbmlmZiogKjpzbmkqCis6c25pW2ZmXSByZXF1ZXN0IFtzeW1ib2xdICAgU2VuZCByZXF1ZXN0IHRvIHNuaWZmIHdpdGggb3B0aW9uYWwgc3ltYm9sLgorCQkJICAgIHtub3QgaW4gVml9Cis6c25pW2ZmXQkJICAgIERpc3BsYXkgYWxsIHBvc3NpYmxlIHJlcXVlc3RzIGFuZCB0aGUgY29ubmVjdGlvbgorCQkJICAgIHN0YXR1cworCitNb3N0IHJlcXVlc3RzIHJlcXVpcmUgYSBzeW1ib2wgKGlkZW50aWZpZXIpIGFzIHBhcmFtZXRlci4gSWYgaXQgaXMgb21pdHRlZCwKK1ZpbSB3aWxsIHVzZSB0aGUgY3VycmVudCB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCitUaGUgYXZhaWxhYmxlIHJlcXVlc3RzIGFyZSBsaXN0ZWQgYmVsb3c6CisKK3JlcXVlc3QJCSAgICAgIG1hcHBpbmcJZGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Nvbm5lY3QJCQlzYwlFc3RhYmxpc2ggY29ubmVjdGlvbiB3aXRoIFNOaUZGKy4KKwkJCQlNYWtlIHN1cmUgU05pRkYrIGlzIHByZXBhcmVkIGZvciB0aGlzIGluIHRoZQorCQkJCVByZWZlcmVuY2VzCitkaXNjb25uZWN0CQlzcQlEaXNjb25uZWN0IGZyb20gU05pRkYrLiBZb3UgY2FuIHJlY29ubmVjdCBhbnkKKwkJCQl0aW1lIHdpdGggOnNuaWZmIGNvbm5lY3QgKG9yICdzYycpCit0b2dnbGUJCQlzdAlUb2dnbGUgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbgorCQkJCWFuZCBkZWZpbml0aW9uIGZpbGUKK2ZpbmQtc3ltYm9sCQlzZglMb2FkIHRoZSBzeW1ib2wgaW50byBhIFN5bWJvbCBCcm93c2VyCiticm93c2UtY2xhc3MJCXNiCUxvYWRzIHRoZSBjbGFzcyBpbnRvIGEgQ2xhc3MgQnJvd3Nlcgorc3VwZXJjbGFzcwkJc3MJRWRpdCBzdXBlcmNsYXNzIG9mIHN5bWJvbAorb3ZlcnJpZGRlbgkJc28JRWRpdCBvdmVycmlkZGVuIG1ldGhvZCBvZiBzeW1ib2wKK3JldHJpZXZlLWZpbGUJCXNyZglSZXRyaWV2ZSBzeW1ib2wgaW4gY3VycmVudCBmaWxlCityZXRyaWV2ZS1wcm9qZWN0CXNycAlSZXRyaWV2ZSBzeW1ib2wgaW4gY3VycmVudCBwcm9qZWN0CityZXRyaWV2ZS1hbGwtcHJvamVjdHMJc3JQCVJldHJpZXZlIHN5bWJvbCBpbiBhbGwgcHJvamVjdHMKK3JldHJpZXZlLW5leHQJCXNSCVJldHJpZXZlIHN5bWJvbCB1c2luZyBjdXJyZW50IFJldHJpZXZlcgorCQkJCXNldHRpbmdzCitnb3RvLXN5bWJvbAkJc2cJR290byBkZWZpbml0aW9uIG9yIGltcGxlbWVudGF0aW9uIG9mIHN5bWJvbAoraGllcmFyY2h5CQlzaAlMb2FkIHN5bWJvbCBpbnRvIHRoZSBIaWVyYXJjaHkgQnJvd3NlcgorcmVzdHItaGllcgkJc0gJc2FtZSBhcyBhYm92ZSBidXQgc2hvdyBvbmx5IHJlbGF0ZWQgY2xhc3NlcworeHJlZi10bwkJCXN4dAlTdGFydCBhIHJlZmVycy10byBxdWVyeSBvbiBzeW1ib2wgYW5kCisJCQkJbG9hZCB0aGUgcmVzdWx0cyBpbnRvIHRoZSBDcm9zcyBSZWZlcmVuY2VyCit4cmVmLWJ5CQkJc3hiCVN0YXJ0IGEgcmVmZXJyZWQtYnkgcXVlcnkgb24gc3ltYm9sCit4cmVmLWhhcwkJc3hoCVN0YXJ0IGEgcmVmZXJzLXRvIGNvbXBvbmVudHMgcXVlcnkgb24gc3ltYm9sCit4cmVmLXVzZWQtYnkJCXN4dQlTdGFydCBhIHJlZmVycmVkLWJ5IGFzIGNvbXBvbmVudCBxdWVyeSBvbgorCQkJCXN5bWJvbAorc2hvdy1kb2N1CQlzZAlTaG93IGRvY3VtZW50YXRpb24gb2Ygc3ltYm9sCitnZW4tZG9jdQkJc0QJR2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBvZiBzeW1ib2wKKworVGhlIG1hcHBpbmdzIGFyZSBkZWZpbmVkIGluIGEgZmlsZSAnc25pZmYudmltJywgd2hpY2ggaXMgcGFydCBvZiBldmVyeSBTTmlGRisKK3Byb2R1Y3QgKCRTTklGRl9ESVIvY29uZmlnL3NuaWZmLnZpbSkuIFRoaXMgZmlsZSBpcyBzb3VyY2VkIHdoZW5ldmVyIFZpbQorY29ubmVjdHMgdG8gU05pRkYrLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIENvbXBpbGluZyBWaW0gd2l0aCBTTmlGRisgaW50ZXJmYWNlCQkqc25pZmYtY29tcGlsaW5nKgorCitUbyBjb21waWxlIFZpbSB3aXRoIFNOaUZGKyBzdXBwb3J0LCB5b3UgbmVlZCB0d28gc291cmNlIGZpbGVzIG9mIHRoZSBleHRyYQorYXJjaGl2ZTogaWZfc25pZmYuYyBhbmQgaWZfc25pZmYuaC4KK09uIFVuaXg6IEVkaXQgdGhlIE1ha2VmaWxlIGFuZCB1bmNvbW1lbnQgdGhlIGxpbmUgIi0tZW5hYmxlLXNuaWZmIi4gIE9yIHJ1bgorY29uZmlndXJlIG1hbnVhbGx5IHdpdGggdGhpcyBhcmd1bWVudC4KK09uIE5UOiBTcGVjaWZ5IFNOSUZGPXllcyB3aXRoIHlvdXIgbWFrZSBjb21tYW5kLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvaWZfdGNsLnR4dCBiL3J1bnRpbWUvZG9jL2lmX3RjbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4NmJlZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2lmX3RjbC50eHQKQEAgLTAsMCArMSw1MTIgQEAKKyppZl90Y2wudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMTcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgSW5nbyBXaWxrZW4KKworCitUaGUgVGNsIEludGVyZmFjZSB0byBWaW0JCQkJKnRjbCogKlRjbCogKlRDTCoKKworMS4gQ29tbWFuZHMJCQkJfHRjbC1leC1jb21tYW5kc3wKKzIuIFRjbCBjb21tYW5kcwkJCQl8dGNsLWNvbW1hbmRzfAorMy4gVGNsIHZhcmlhYmxlcwkJCXx0Y2wtdmFyaWFibGVzfAorNC4gVGNsIHdpbmRvdyBjb21tYW5kcwkJCXx0Y2wtd2luZG93LWNtZHN8Cis1LiBUY2wgYnVmZmVyIGNvbW1hbmRzCQkJfHRjbC1idWZmZXItY21kc3wKKzYuIE1pc2NlbGxhbmVvdXM7IE91dHB1dCBmcm9tIFRjbAl8dGNsLW1pc2N8IHx0Y2wtb3V0cHV0fAorNy4gS25vd24gYnVncyAmIHByb2JsZW1zCQl8dGNsLWJ1Z3N8Cis4LiBFeGFtcGxlcwkJCQl8dGNsLWV4YW1wbGVzfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9ICpFMjgwKiAqRTI4MSoKKworVGhlIFRjbCBpbnRlcmZhY2Ugb25seSB3b3JrcyB3aGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCB0aGUgfCt0Y2x8IGZlYXR1cmUuCisKK1dBUk5JTkc6IFRoZXJlIGFyZSBwcm9iYWJseSBzdGlsbCBzb21lIGJ1Z3MuICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cywKK2NvbW1lbnRzLCBpZGVhcyBldGMgdG8gPEluZ28uV2lsa2VuQGluZm9ybWF0aWsudW5pLW9sZGVuYnVyZy5kZT4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBDb21tYW5kcwkJCQkqdGNsLWV4LWNvbW1hbmRzKiAqRTU3MSogKkU1NzIqCisKKwkJCQkJCQkqOnRjbCogKjp0YyoKKzp0Y1tsXSB7Y21kfQkJRXhlY3V0ZSBUY2wgY29tbWFuZCB7Y21kfS4KKworOltyYW5nZV10Y1tsXSA8PCB7ZW5kbWFya2VyfQore3NjcmlwdH0KK3tlbmRtYXJrZXJ9CisJCQlFeGVjdXRlIFRjbCBzY3JpcHQge3NjcmlwdH0uCisJCQlOb3RlOiBUaGlzIGNvbW1hbmQgZG9lc24ndCB3b3JrIHdoZW4gdGhlIFRjbCBmZWF0dXJlCisJCQl3YXNuJ3QgY29tcGlsZWQgaW4uICBUbyBhdm9pZCBlcnJvcnMsIHNlZQorCQkJfHNjcmlwdC1oZXJlfC4KKwore2VuZG1hcmtlcn0gbXVzdCBOT1QgYmUgcHJlY2VkZWQgYnkgYW55IHdoaXRlIHNwYWNlLiBJZiB7ZW5kbWFya2VyfSBpcworb21pdHRlZCBmcm9tIGFmdGVyIHRoZSAiPDwiLCBhIGRvdCAnLicgbXVzdCBiZSB1c2VkIGFmdGVyIHtzY3JpcHR9LCBsaWtlIGZvcgordGhlIHw6YXBwZW5kfCBhbmQgfDppbnNlcnR8IGNvbW1hbmRzLgorVGhpcyBmb3JtIG9mIHRoZSB8OnRjbHwgY29tbWFuZCBpcyBtYWlubHkgdXNlZnVsIGZvciBpbmNsdWRpbmcgdGNsIGNvZGUgaW4gVmltCitzY3JpcHRzLgorCitFeGFtcGxlOiA+CisJZnVuY3Rpb24hIERlZmluZURhdGUoKQorCSAgICB0Y2wgPDwgRU9GCisJICAgIHByb2MgZGF0ZSB7fSB7CisJCXJldHVybiBbY2xvY2sgZm9ybWF0IFtjbG9jayBzZWNvbmRzXV0KKwkgICAgfQorCUVPRgorCWVuZGZ1bmN0aW9uCis8CisKKwkJCQkJCQkqOnRjbGRvKiAqOnRjbGQqCis6W3JhbmdlXXRjbGRbb10ge2NtZH0JRXhlY3V0ZSBUY2wgY29tbWFuZCB7Y21kfSBmb3IgZWFjaCBsaW5lIGluIFtyYW5nZV0KKwkJCXdpdGggdGhlIHZhcmlhYmxlICJsaW5lIiBiZWluZyBzZXQgdG8gdGhlIHRleHQgb2YgZWFjaAorCQkJbGluZSBpbiB0dXJuLCBhbmQgImxudW0iIHRvIHRoZSBsaW5lIG51bWJlci4gIFNldHRpbmcKKwkJCSJsaW5lIiB3aWxsIGNoYW5nZSB0aGUgdGV4dCwgYnV0IG5vdGUgdGhhdCBpdCBpcyBub3QKKwkJCXBvc3NpYmxlIHRvIGFkZCBvciBkZWxldGUgbGluZXMgdXNpbmcgdGhpcyBjb21tYW5kLgorCQkJSWYge2NtZH0gcmV0dXJucyBhbiBlcnJvciwgdGhlIGNvbW1hbmQgaXMgaW50ZXJydXB0ZWQuCisJCQlUaGUgZGVmYXVsdCBmb3IgW3JhbmdlXSBpcyB0aGUgd2hvbGUgZmlsZTogIjEsJCIuCisJCQlTZWUgfHRjbC12YXItbGluZXwgYW5kIHx0Y2wtdmFyLWxudW18LiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6dGNsZmlsZSogKjp0Y2xmKgorOnRjbGZbaWxlXSB7ZmlsZX0JRXhlY3V0ZSB0aGUgVGNsIHNjcmlwdCBpbiB7ZmlsZX0uICBUaGlzIGlzIHRoZSBzYW1lIGFzCisJCQkiOnRjbCBzb3VyY2Uge2ZpbGV9IiwgYnV0IGFsbG93cyBmaWxlIG5hbWUgY29tcGxldGlvbi4KKwkJCXtub3QgaW4gVml9CisKKworTm90ZSB0aGF0IFRjbCBvYmplY3RzIChsaWtlIHZhcmlhYmxlcykgcGVyc2lzdCBmcm9tIG9uZSBjb21tYW5kIHRvIHRoZSBuZXh0LAoranVzdCBhcyBpbiB0aGUgVGNsIHNoZWxsLgorCitFeGVjdXRpbmcgVGNsIGNvbW1hbmRzIGlzIG5vdCBwb3NzaWJsZSBpbiB0aGUgfHNhbmRib3h8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFRjbCBjb21tYW5kcwkJCQkJCSp0Y2wtY29tbWFuZHMqCisKK1RjbCBjb2RlIGdldHMgYWxsIG9mIGl0cyBhY2Nlc3MgdG8gdmltIHZpYSBjb21tYW5kcyBpbiB0aGUgIjo6dmltIiBuYW1lc3BhY2UuCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBpbXBsZW1lbnRlZDogPgorCisJOjp2aW06OmJlZXAJCQkjIEd1ZXNzLgorCTo6dmltOjpidWZmZXIge259CQkjIENyZWF0ZSBUY2wgY29tbWFuZCBmb3Igb25lIGJ1ZmZlci4KKwk6OnZpbTo6YnVmZmVyIGxpc3QJCSMgQ3JlYXRlIFRjbCBjb21tYW5kcyBmb3IgYWxsIGJ1ZmZlcnMuCisJOjp2aW06OmNvbW1hbmQgWy1xdWlldF0ge2NtZH0JIyBFeGVjdXRlIGFuIGV4IGNvbW1hbmQuCisJOjp2aW06OmV4cHIge2V4cHJ9CQkjIFVzZSBWaW0ncyBleHByZXNzaW9uIGV2YWx1YXRvci4KKwk6OnZpbTo6b3B0aW9uIHtvcHR9CQkjIEdldCB2aW0gb3B0aW9uLgorCTo6dmltOjpvcHRpb24ge29wdH0ge3ZhbH0JIyBTZXQgdmltIG9wdGlvbi4KKwk6OnZpbTo6d2luZG93IGxpc3QJCSMgQ3JlYXRlIFRjbCBjb21tYW5kcyBmb3IgYWxsIHdpbmRvd3MuCisKK0NvbW1hbmRzOgorCTo6dmltOjpiZWVwCQkJCQkqdGNsLWJlZXAqCisJSG9uay4gIERvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworCTo6dmltOjpidWZmZXIge259CQkJCSp0Y2wtYnVmZmVyKgorCTo6dmltOjpidWZmZXIgZXhpc3RzIHtufQorCTo6dmltOjpidWZmZXIgbGlzdAorCVByb3ZpZGVzIGFjY2VzcyB0byB2aW0gYnVmZmVycy4gIFdpdGggYW4gaW50ZWdlciBhcmd1bWVudCwgY3JlYXRlcyBhCisJYnVmZmVyIGNvbW1hbmQgKHNlZSB8dGNsLWJ1ZmZlci1jbWRzfCkgZm9yIHRoZSBidWZmZXIgd2l0aCB0aGF0CisJbnVtYmVyLCBhbmQgcmV0dXJucyBpdHMgbmFtZSBhcyB0aGUgcmVzdWx0LiAgSW52YWxpZCBidWZmZXIgbnVtYmVycworCXJlc3VsdCBpbiBhIHN0YW5kYXJkIFRjbCBlcnJvci4gIFRvIHRlc3QgZm9yIHZhbGlkIGJ1ZmZlciBudW1iZXJzLAorCXZpbSdzIGludGVybmFsIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZDogPgorCQlzZXQgbmJ1ZnMgWzo6dmltOjpleHByIGJ1Zm5yKCIkIildCisJCXNldCBpc3ZhbGlkIFs6OnZpbTo6ZXhwciAiYnVmZXhpc3RzKCRuKSJdCis8CVRoZSAibGlzdCIgb3B0aW9uIGNyZWF0ZXMgYSBidWZmZXIgY29tbWFuZCBmb3IgZWFjaCB2YWxpZCBidWZmZXIsIGFuZAorCXJldHVybnMgYSBsaXN0IG9mIHRoZSBjb21tYW5kIG5hbWVzIGFzIHRoZSByZXN1bHQuCisJRXhhbXBsZTogPgorCQlzZXQgYnVmcyBbOjp2aW06OmJ1ZmZlciBsaXN0XQorCQlmb3JlYWNoIGIgJGJ1ZnMgeyAkYiBhcHBlbmQgZW5kICJUaGUgRW5kISIgfQorPAlUaGUgImV4aXN0cyIgb3B0aW9uIGNoZWNrcyBpZiBhIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiBudW1iZXIgZXhpc3RzLgorCUV4YW1wbGU6ID4KKwkJaWYgeyBbOjp2aW06OmJ1ZmZlciBleGlzdHMgJG5dIH0geyA6OnZpbTo6Y29tbWFuZCAiOmUgIyRuIiB9Cis8CVRoaXMgY29tbWFuZCBtaWdodCBiZSByZXBsYWNlZCBieSBhIHZhcmlhYmxlIGluIGZ1dHVyZSB2ZXJzaW9ucy4KKwlTZWUgYWxzbyB8dGNsLXZhci1jdXJyZW50fCBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLgorCisJOjp2aW06OmNvbW1hbmQge2NtZH0JCQkJKnRjbC1jb21tYW5kKgorCTo6dmltOjpjb21tYW5kIC1xdWlldCB7Y21kfQorCUV4ZWN1dGUgdGhlIHZpbSAoZXgtbW9kZSkgY29tbWFuZCB7Y21kfS4gIEFueSBleCBjb21tYW5kIHRoYXQgYWZmZWN0cworCWEgYnVmZmVyIG9yIHdpbmRvdyB1c2VzIHRoZSBjdXJyZW50IGJ1ZmZlci9jdXJyZW50IHdpbmRvdy4gIERvZXMgbm90CisJcmV0dXJuIGEgcmVzdWx0IG90aGVyIHRoYW4gYSBzdGFuZGFyZCBUY2wgZXJyb3IgY29kZS4gIEFmdGVyIHRoaXMKKwljb21tYW5kIGlzIGNvbXBsZXRlZCwgdGhlICI6OnZpbTo6Y3VycmVudCIgdmFyaWFibGUgaXMgdXBkYXRlZC4KKwlUaGUgIi1xdWlldCIgZmxhZyBzdXBwcmVzc2VzIGFueSBlcnJvciBtZXNzYWdlcyBmcm9tIHZpbS4KKwlFeGFtcGxlczogPgorCQk6OnZpbTo6Y29tbWFuZCAic2V0IHRzPTgiCisJCTo6dmltOjpjb21tYW5kICIlcy9mb28vYmFyL2ciCis8CVRvIGV4ZWN1dGUgbm9ybWFsLW1vZGUgY29tbWFuZHMsIHVzZSAibm9ybWFsIiAoc2VlIHw6bm9ybWFsfCk6ID4KKwkJc2V0IGNtZCAiamoiCisJCTo6dmltOjpjb21tYW5kICJub3JtYWwgJGNtZCIKKzwJU2VlIGFsc28gfHRjbC13aW5kb3ctY29tbWFuZHwgYW5kIHx0Y2wtYnVmZmVyLWNvbW1hbmR8LgorCisJOjp2aW06OmV4cHIge2V4cHJ9CQkJCSp0Y2wtZXhwcioKKwlFdmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24ge2V4cHJ9IHVzaW5nIHZpbSdzIGludGVybmFsIGV4cHJlc3Npb24KKwlldmFsdWF0b3IgKHNlZSB8ZXhwcmVzc2lvbnwpLiAgIEFueSBleHByZXNzaW9uIHRoYXQgcXVlcmllcyBhIGJ1ZmZlcgorCW9yIHdpbmRvdyBwcm9wZXJ0eSB1c2VzIHRoZSBjdXJyZW50IGJ1ZmZlci9jdXJyZW50IHdpbmRvdy4gIFJldHVybnMKKwl0aGUgcmVzdWx0IGFzIGEgc3RyaW5nLgorCUV4YW1wbGVzOiA+CisJCXNldCBwZXJsX2F2YWlsYWJsZSBbOjp2aW06OmV4cHIgaGFzKCJwZXJsIildCis8CVNlZSBhbHNvIHx0Y2wtd2luZG93LWV4cHJ8IGFuZCB8dGNsLWJ1ZmZlci1leHByfC4KKworCTo6dmltOjpvcHRpb24ge29wdH0JCQkJKnRjbC1vcHRpb24qCisJOjp2aW06Om9wdGlvbiB7b3B0fSB7dmFsdWV9CisJV2l0aG91dCBzZWNvbmQgYXJndW1lbnQsIHF1ZXJpZXMgdGhlIHZhbHVlIG9mIGEgdmltIG9wdGlvbi4gIFdpdGggdGhpcworCWFyZ3VtZW50LCBzZXRzIHRoZSB2aW0gb3B0aW9uIHRvIHt2YWx1ZX0sIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cworCXZhbHVlIGFzIHRoZSByZXN1bHQuICBBbnkgb3B0aW9ucyB0aGF0IGFyZSBtYXJrZWQgYXMgJ2xvY2FsIHRvIGJ1ZmZlcicKKwlvciAnbG9jYWwgdG8gd2luZG93JyBhZmZlY3QgdGhlIGN1cnJlbnQgYnVmZmVyL2N1cnJlbnQgd2luZG93LiAgVGhlCisJZ2xvYmFsIHZhbHVlIGlzIG5vdCBjaGFuZ2VkLCB1c2UgdGhlICI6c2V0IiBjb21tYW5kIGZvciB0aGF0LiAgRm9yCisJYm9vbGVhbiBvcHRpb25zLCB7dmFsdWV9IHNob3VsZCBiZSAiMCIgb3IgIjEiLCBvciBhbnkgb2YgdGhlIGtleXdvcmRzCisJIm9uIiwgIm9mZiIgb3IgInRvZ2dsZSIuICBTZWUgfG9wdGlvbi1zdW1tYXJ5fCBmb3IgYSBsaXN0IG9mIG9wdGlvbnMuCisJRXhhbXBsZTogPgorCQk6OnZpbTo6b3B0aW9uIHRzIDgKKzwJU2VlIGFsc28gfHRjbC13aW5kb3ctb3B0aW9ufCBhbmQgfHRjbC1idWZmZXItb3B0aW9ufC4KKworCTo6dmltOjp3aW5kb3cge29wdGlvbn0JCQkJKnRjbC13aW5kb3cqCisJUHJvdmlkZXMgYWNjZXNzIHRvIHZpbSB3aW5kb3dzLiAgQ3VycmVudGx5IG9ubHkgdGhlICJsaXN0IiBvcHRpb24gaXMKKwlpbXBsZW1lbnRlZC4gVGhpcyBjcmVhdGVzIGEgd2luZG93IGNvbW1hbmQgKHNlZSB8dGNsLXdpbmRvdy1jbWRzfCkgZm9yCisJZWFjaCB3aW5kb3csIGFuZCByZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29tbWFuZCBuYW1lcyBhcyB0aGUgcmVzdWx0LgorCUV4YW1wbGU6ID4KKwkJc2V0IHdpbnMgWzo6dmltOjp3aW5kb3cgbGlzdF0KKwkJZm9yZWFjaCB3ICR3aW5zIHsgJHcgaGVpZ2h0IDQgfQorPAlUaGlzIGNvbW1hbmQgbWlnaHQgYmUgcmVwbGFjZWQgYnkgYSB2YXJpYWJsZSBpbiBmdXR1cmUgdmVyc2lvbnMuCisJU2VlIGFsc28gfHRjbC12YXItY3VycmVudHwgZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBUY2wgdmFyaWFibGVzCQkJCQkqdGNsLXZhcmlhYmxlcyoKKworVGhlIDo6dmltIG5hbWVzcGFjZSBjb250YWlucyBhIGZldyB2YXJpYWJsZXMuICBUaGVzZSBhcmUgY3JlYXRlZCB3aGVuIHRoZSBUY2wKK2ludGVycHJldGVyIGlzIGNhbGxlZCBmcm9tIHZpbSBhbmQgc2V0IHRvIGN1cnJlbnQgdmFsdWVzLiA+CisKKwk6OnZpbTo6Y3VycmVudAkJIyBhcnJheSBjb250YWluaW5nICJjdXJyZW50IiBvYmplY3RzCisJOjp2aW06OmxiYXNlCQkjIG51bWJlciBvZiBmaXJzdCBsaW5lCisJOjp2aW06OnJhbmdlCQkjIGFycmF5IGNvbnRhaW5pbmcgY3VycmVudCByYW5nZSBudW1iZXJzCisJbGluZQkJCSMgY3VycmVudCBsaW5lIGFzIGEgc3RyaW5nICg6dGNsZG8gb25seSkKKwlsbnVtCQkJIyBjdXJyZW50IGxpbmUgbnVtYmVyICg6dGNsZG8gb25seSkKKworVmFyaWFibGVzOgorCTo6dmltOjpjdXJyZW50CQkJCQkqdGNsLXZhci1jdXJyZW50KgorCVRoaXMgaXMgYW4gYXJyYXkgcHJvdmlkaW5nIGFjY2VzcyB0byB2YXJpb3VzICJjdXJyZW50IiBvYmplY3RzCisJYXZhaWxhYmxlIGluIHZpbS4gIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGFyZSB1cGRhdGVkIGFmdGVyCisJIjo6dmltOjpjb21tYW5kIiBpcyBjYWxsZWQsIGFzIHRoaXMgbWlnaHQgY2hhbmdlIHZpbSdzIGN1cnJlbnQKKwlzZXR0aW5ncyAoZS5nLiwgYnkgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnVmZmVyKS4KKwlUaGUgImJ1ZmZlciIgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYnVmZmVyIGNvbW1hbmQgZm9yIHRoZQorCWN1cnJlbnQgYnVmZmVyLiAgVGhpcyBjYW4gYmUgdXNlZCBkaXJlY3RseSB0byBpbnZva2UgYnVmZmVyIGNvbW1hbmRzCisJKHNlZSB8dGNsLWJ1ZmZlci1jbWRzfCkuICBUaGlzIGVsZW1lbnQgaXMgcmVhZC1vbmx5LgorCUV4YW1wbGU6ID4KKwkJJDo6dmltOjpjdXJyZW50KGJ1ZmZlcikgaW5zZXJ0IGJlZ2luICJIZWxsbyB3b3JsZCIKKzwJVGhlICJ3aW5kb3ciIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIHdpbmRvdyBjb21tYW5kIGZvciB0aGUKKwljdXJyZW50IHdpbmRvdy4gIFRoaXMgY2FuIGJlIHVzZWQgZGlyZWN0bHkgdG8gaW52b2tlIHdpbmRvdyBjb21tYW5kcworCShzZWUgfHRjbC13aW5kb3ctY21kc3wpLiAgVGhpcyBlbGVtZW50IGlzIHJlYWQtb25seS4KKwlFeGFtcGxlOiA+CisJCSQ6OnZpbTo6Y3VycmVudCh3aW5kb3cpIGhlaWdodCAxMAorPAorCTo6dmltOjpsYmFzZQkJCQkJKnRjbC12YXItbGJhc2UqCisJVGhpcyB2YXJpYWJsZSBjb250cm9scyBob3cgVGNsIHRyZWF0cyBsaW5lIG51bWJlcnMuICBJZiBpdCBpcyBzZXQgdG8KKwknMScsIHRoZW4gbGluZXMgYW5kIGNvbHVtbnMgc3RhcnQgYXQgMS4gIFRoaXMgd2F5LCBsaW5lIG51bWJlcnMgZnJvbQorCVRjbCBjb21tYW5kcyBhbmQgdmltIGV4cHJlc3Npb25zIGFyZSBjb21wYXRpYmxlLiAgSWYgdGhpcyB2YXJpYWJsZSBpcworCXNldCB0byAnMCcsIHRoZW4gbGluZSBudW1iZXJzIGFuZCBjb2x1bW5zIHN0YXJ0IGF0IDAgaW4gVGNsLiAgVGhpcyBpcworCXVzZWZ1bCBpZiB5b3Ugd2FudCB0byB0cmVhdCBhIGJ1ZmZlciBhcyBhIFRjbCBsaXN0IG9yIGEgbGluZSBhcyBhIFRjbAorCXN0cmluZyBhbmQgdXNlIHN0YW5kYXJkIFRjbCBjb21tYW5kcyB0aGF0IHJldHVybiBhbiBpbmRleCAoImxzb3J0IiBvcgorCSJzdHJpbmcgZmlyc3QiLCBmb3IgZXhhbXBsZSkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnMScuICBDdXJyZW50bHksCisJYW55IG5vbi16ZXJvIHZhbHVlcyBpcyB0cmVhdGVkIGFzICcxJywgYnV0IHlvdXIgc2NyaXB0cyBzaG91bGQgbm90CisJcmVseSBvbiB0aGlzLiAgU2VlIGFsc28gfHRjbC1saW5lbnVtYmVyc3wuCisKKwk6OnZpbTo6cmFuZ2UJCQkJCSp0Y2wtdmFyLXJhbmdlKgorCVRoaXMgaXMgYW4gYXJyYXkgd2l0aCB0aHJlZSBlbGVtZW50cywgInN0YXJ0IiwgImJlZ2luIiBhbmQgImVuZCIuICBJdAorCWNvbnRhaW5zIHRoZSBsaW5lIG51bWJlcnMgb2YgdGhlIHN0YXJ0IGFuZCBlbmQgcm93IG9mIHRoZSBjdXJyZW50CisJcmFuZ2UuICAiYmVnaW4iIGlzIHRoZSBzYW1lIGFzICJzdGFydCIuICBUaGlzIHZhcmlhYmxlIGlzIHJlYWQtb25seS4KKwlTZWUgfHRjbC1leGFtcGxlc3wuCisKKwlsaW5lCQkJCQkJKnRjbC12YXItbGluZSoKKwlsbnVtCQkJCQkJKnRjbC12YXItbG51bSoKKwlUaGVzZSBnbG9iYWwgdmFyaWFibGVzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgIjp0Y2xkbyIgZXggY29tbWFuZAorCWlzIGJlaW5nIGV4ZWN1dGVkLiAgVGhleSBjb250YWluIHRoZSB0ZXh0IGFuZCBsaW5lIG51bWJlciBvZiB0aGUKKwljdXJyZW50IGxpbmUuICBXaGVuIHRoZSBUY2wgY29tbWFuZCBpbnZva2VkIGJ5ICI6dGNsZG8iIGlzIGNvbXBsZXRlZCwKKwl0aGUgY3VycmVudCBsaW5lIGlzIHNldCB0byB0aGUgY29udGVudHMgb2YgdGhlICJsaW5lIiB2YXJpYWJsZSwgdW5sZXNzCisJdGhlIHZhcmlhYmxlIHdhcyB1bnNldCBieSB0aGUgVGNsIGNvbW1hbmQuICBUaGUgImxudW0iIHZhcmlhYmxlIGlzCisJcmVhZC1vbmx5LiAgVGhlc2UgdmFyaWFibGVzIGFyZSBub3QgaW4gdGhlICI6OnZpbSIgbmFtZXNwYWNlIHNvIHRoZXkKKwljYW4gYmUgdXNlZCBpbiAiOnRjbGRvIiB3aXRob3V0IG11Y2ggdHlwaW5nICh0aGlzIG1pZ2h0IGJlIGNoYW5nZWQgaW4KKwlmdXR1cmUgdmVyc2lvbnMpLiAgU2VlIGFsc28gfHRjbC1saW5lbnVtYmVyc3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVGNsIHdpbmRvdyBjb21tYW5kcwkJCQkJKnRjbC13aW5kb3ctY21kcyoKKworV2luZG93IGNvbW1hbmRzIHJlcHJlc2VudCB2aW0gd2luZG93cy4gIFRoZXkgYXJlIGNyZWF0ZWQgYnkgc2V2ZXJhbCBjb21tYW5kczoKKwk6OnZpbTo6d2luZG93IGxpc3QJCQl8dGNsLXdpbmRvd3wKKwkid2luZG93cyIgb3B0aW9uIG9mIGEgYnVmZmVyIGNvbW1hbmQJfHRjbC1idWZmZXItd2luZG93c3wKK1RoZSA6OnZpbTo6Y3VycmVudCh3aW5kb3cpIHZhcmlhYmxlIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSB3aW5kb3cgY29tbWFuZAorZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4gIEEgd2luZG93IGNvbW1hbmQgaXMgYXV0b21hdGljYWxseSBkZWxldGVkIHdoZW4gdGhlCitjb3JyZXNwb25kaW5nIHZpbSB3aW5kb3cgaXMgY2xvc2VkLgorCitMZXRzIGFzc3VtZSB0aGUgbmFtZSBvZiB0aGUgd2luZG93IGNvbW1hbmQgaXMgc3RvcmVkIGluIHRoZSBUY2wgdmFyaWFibGUgIndpbiIsCitpLmUuICIkd2luIiBjYWxscyB0aGUgY29tbWFuZC4gIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOiA+CisKKwkkd2luIGJ1ZmZlcgkJIyBDcmVhdGUgVGNsIGNvbW1hbmQgZm9yIHdpbmRvdydzIGJ1ZmZlci4KKwkkd2luIGNvbW1hbmQge2NtZH0JIyBFeGVjdXRlIGV4IGNvbW1hbmQgaW4gd2luZG93cyBjb250ZXh0LgorCSR3aW4gY3Vyc29yCQkjIEdldCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKwkkd2luIGN1cnNvciB7dmFyfQkjIFNldCBjdXJzb3IgcG9zaXRpb24gZnJvbSBhcnJheSB2YXJpYWJsZS4KKwkkd2luIGN1cnNvciB7cm93fSB7Y29sfQkjIFNldCBjdXJzb3IgcG9zaXRpb24uCisJJHdpbiBkZWxjbWQge2NtZH0JIyBDYWxsIFRjbCBjb21tYW5kIHdoZW4gd2luZG93IGlzIGNsb3NlZC4KKwkkd2luIGV4cHIge2V4cHJ9CSMgRXZhbHVhdGUgdmltIGV4cHJlc3Npb24gaW4gd2luZG93cyBjb250ZXh0LgorCSR3aW4gaGVpZ2h0CQkjIFJlcG9ydCB0aGUgd2luZG93J3MgaGVpZ2h0LgorCSR3aW4gaGVpZ2h0IHtufQkJIyBTZXQgdGhlIHdpbmRvdydzIGhlaWdodC4KKwkkd2luIG9wdGlvbiB7b3B0fSBbdmFsXQkjIEdldC9TZXQgdmltIG9wdGlvbiBpbiB3aW5kb3dzIGNvbnRleHQuCisKK09wdGlvbnM6CisJJHdpbiBidWZmZXIJCQkJCSp0Y2wtd2luZG93LWJ1ZmZlcioKKwlDcmVhdGVzIGEgVGNsIGNvbW1hbmQgZm9yIHRoZSB3aW5kb3cncyBidWZmZXIsIGFuZCByZXR1cm5zIGl0cyBuYW1lIGFzCisJdGhlIHJlc3VsdC4gIFRoZSBuYW1lIHNob3VsZCBiZSBzdG9yZWQgaW4gYSB2YXJpYWJsZTogPgorCQlzZXQgYnVmIFskd2luIGJ1ZmZlcl0KKzwJJGJ1ZiBpcyBub3cgYSB2YWxpZCBUY2wgY29tbWFuZC4gIFNlZSB8dGNsLWJ1ZmZlci1jbWRzfCBmb3IgdGhlCisJYXZhaWxhYmxlIG9wdGlvbnMuCisKKwkkd2luIGN1cnNvcgkJCQkJKnRjbC13aW5kb3ctY3Vyc29yKgorCSR3aW4gY3Vyc29yIHt2YXJ9CisJJHdpbiBjdXJzb3Ige3Jvd30ge2NvbH0KKwlXaXRob3V0IGFyZ3VtZW50LCByZXBvcnRzIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhcyBhIHN0cmluZy4KKwlUaGlzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBUY2wgYXJyYXkgdmFyaWFibGU6ID4KKwkJYXJyYXkgc2V0IGhlcmUgWyR3aW4gY3Vyc29yXQorPAkiaGVyZShyb3cpIiBhbmQgImhlcmUoY29sdW1uKSIgbm93IGNvbnRhaW4gdGhlIGN1cnNvciBwb3NpdGlvbi4KKwlXaXRoIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb2YgYQorCVRjbCBhcnJheSB2YXJpYWJsZSwgd2hpY2ggbXVzdCBjb250YWluIHR3byBlbGVtZW50cyAicm93IiBhbmQgImNvbHVtbiIuCisJVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHRoZSBjdXJzb3IgdG8gdGhlIG5ldyBwb3NpdGlvbjogPgorCQkkd2luIGN1cnNvciBoZXJlCTsjIG5vdCAkaGVyZSAhCis8CVdpdGggdHdvIGFyZ3VtZW50cywgc2V0cyB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgcm93IGFuZCBjb2x1bW46ID4KKwkJJHdpbiBjdXJzb3IgJGhlcmUocm93KSAkaGVyZShjb2x1bW4pCis8CUludmFsaWQgcG9zaXRpb25zIHJlc3VsdCBpbiBhIHN0YW5kYXJkIFRjbCBlcnJvciwgd2hpY2ggY2FuIGJlIGNhdWdodAorCXdpdGggImNhdGNoIi4gIFRoZSByb3cgYW5kIGNvbHVtbiB2YWx1ZXMgZGVwZW5kIG9uIHRoZSAiOjp2aW06OmxiYXNlIgorCXZhcmlhYmxlLiAgU2VlIHx0Y2wtdmFyLWxiYXNlfC4KKworCSR3aW4gZGVsY21kIHtjbWR9CQkJCSp0Y2wtd2luZG93LWRlbGNtZCoKKwlSZWdpc3RlcnMgdGhlIFRjbCBjb21tYW5kIHtjbWR9IGFzIGEgZGVsZXRpb24gY2FsbGJhY2sgZm9yIHRoZSB3aW5kb3cuCisJVGhpcyBjb21tYW5kIGlzIGV4ZWN1dGVkIChpbiB0aGUgZ2xvYmFsIHNjb3BlKSBqdXN0IGJlZm9yZSB0aGUgd2luZG93CisJaXMgY2xvc2VkLiAgQ29tcGxleCBjb21tYW5kcyBzaG91bGQgYmUgYnVpbGQgd2l0aCAibGlzdCI6ID4KKwkJJHdpbiBkZWxjbWQgW2xpc3QgcHV0cyB2aW1lcnIgIndpbmRvdyBkZWxldGVkIl0KKzwJU2VlIGFsc28gfHRjbC1idWZmZXItZGVsY21kfC4KKworCSR3aW4gaGVpZ2h0CQkJCQkqdGNsLXdpbmRvdy1oZWlnaHQqCisJJHdpbiBoZWlnaHQge259CisJV2l0aG91dCBhcmd1bWVudCwgcmVwb3J0cyB0aGUgd2luZG93J3MgY3VycmVudCBoZWlnaHQuICBXaXRoIGFuCisJYXJndW1lbnQsIHRyaWVzIHRvIHNldCB0aGUgd2luZG93J3MgaGVpZ2h0IHRvIHtufSwgdGhlbiByZXBvcnRzIHRoZQorCW5ldyBoZWlnaHQgKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHtufSkuCisKKwkkd2luIGNvbW1hbmQgWy1xdWlldF0ge2NtZH0JCQkqdGNsLXdpbmRvdy1jb21tYW5kKgorCSR3aW4gZXhwciB7ZXhwcn0JCQkJKnRjbC13aW5kb3ctZXhwcioKKwkkd2luIG9wdGlvbiB7b3B0fSBbdmFsXQkJCQkqdGNsLXdpbmRvdy1vcHRpb24qCisJVGhlc2UgYXJlIHNpbWlsYXIgdG8gIjo6dmltOjpjb21tYW5kIiBldGMuLCBleGNlcHQgdGhhdCBldmVyeXRoaW5nIGlzCisJZG9uZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2luZG93IHJlcHJlc2VudGVkIGJ5ICR3aW4sIGluc3RlYWQgb2YgdGhlCisJY3VycmVudCB3aW5kb3cuICBGb3IgZXhhbXBsZSwgc2V0dGluZyBhbiBvcHRpb24gdGhhdCBpcyBtYXJrZWQgJ2xvY2FsCisJdG8gd2luZG93JyBhZmZlY3RzIHRoZSB3aW5kb3cgJHdpbi4gIEFueXRoaW5nIHRoYXQgYWZmZWN0cyBvciBxdWVyaWVzCisJYSBidWZmZXIgdXNlcyB0aGUgYnVmZmVyIGRpc3BsYXllZCBpbiB0aGlzIHdpbmRvdyAoaS5lLiB0aGUgYnVmZmVyCisJdGhhdCBpcyByZXByZXNlbnRlZCBieSAiJHdpbiBidWZmZXIiKS4gIFNlZSB8dGNsLWNvbW1hbmR8LCB8dGNsLWV4cHJ8CisJYW5kIHx0Y2wtb3B0aW9ufCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwlFeGFtcGxlOiA+CisJCSR3aW4gb3B0aW9uIG51bWJlciBvbgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFRjbCBidWZmZXIgY29tbWFuZHMJCQkJCSp0Y2wtYnVmZmVyLWNtZHMqCisKK0J1ZmZlciBjb21tYW5kcyByZXByZXNlbnQgdmltIGJ1ZmZlcnMuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHNldmVyYWwgY29tbWFuZHM6CisJOjp2aW06OmJ1ZmZlciB7Tn0JCQl8dGNsLWJ1ZmZlcnwKKwk6OnZpbTo6YnVmZmVyIGxpc3QJCQl8dGNsLWJ1ZmZlcnwKKwkiYnVmZmVyIiBvcHRpb24gb2YgYSB3aW5kb3cgY29tbWFuZAl8dGNsLXdpbmRvdy1idWZmZXJ8CitUaGUgOjp2aW06OmN1cnJlbnQoYnVmZmVyKSB2YXJpYWJsZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYnVmZmVyIGNvbW1hbmQKK2ZvciB0aGUgY3VycmVudCBidWZmZXIuICBBIGJ1ZmZlciBjb21tYW5kIGlzIGF1dG9tYXRpY2FsbHkgZGVsZXRlZCB3aGVuIHRoZQorY29ycmVzcG9uZGluZyB2aW0gYnVmZmVyIGlzIGRlc3Ryb3llZC4gIFdoZW5ldmVyIHRoZSBidWZmZXIncyBjb250ZW50cyBhcmUKK2NoYW5nZWQsIGFsbCBtYXJrcyBpbiB0aGUgYnVmZmVyIGFyZSBhdXRvbWF0aWNhbGx5IGFkanVzdGVkLiAgQW55IGNoYW5nZXMgdG8KK3RoZSBidWZmZXIncyBjb250ZW50cyBtYWRlIGJ5IFRjbCBjb21tYW5kcyBjYW4gYmUgdW5kb25lIHdpdGggdGhlICJ1bmRvIiB2aW0KK2NvbW1hbmQgKHNlZSB8dW5kb3wpLgorCitMZXRzIGFzc3VtZSB0aGUgbmFtZSBvZiB0aGUgYnVmZmVyIGNvbW1hbmQgaXMgc3RvcmVkIGluIHRoZSBUY2wgdmFyaWFibGUgImJ1ZiIsCitpLmUuICIkYnVmIiBjYWxscyB0aGUgY29tbWFuZC4gIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOiA+CisKKwkkYnVmIGFwcGVuZCB7bn0ge3N0cn0JIyBBcHBlbmQgYSBsaW5lIHRvIGJ1ZmZlciwgYWZ0ZXIgbGluZSB7bn0uCisJJGJ1ZiBjb21tYW5kIHtjbWR9CSMgRXhlY3V0ZSBleCBjb21tYW5kIGluIGJ1ZmZlcnMgY29udGV4dC4KKwkkYnVmIGNvdW50CQkjIFJlcG9ydCBudW1iZXIgb2YgbGluZXMgaW4gYnVmZmVyLgorCSRidWYgZGVsY21kIHtjbWR9CSMgQ2FsbCBUY2wgY29tbWFuZCB3aGVuIGJ1ZmZlciBpcyBkZWxldGVkLgorCSRidWYgZGVsZXRlIHtufQkJIyBEZWxldGUgYSBzaW5nbGUgbGluZS4KKwkkYnVmIGRlbGV0ZSB7bn0ge219CSMgRGVsZXRlIHNldmVyYWwgbGluZXMuCisJJGJ1ZiBleHByIHtleHByfQkjIEV2YWx1YXRlIHZpbSBleHByZXNzaW9uIGluIGJ1ZmZlcnMgY29udGV4dC4KKwkkYnVmIGdldCB7bn0JCSMgR2V0IGEgc2luZ2xlIGxpbmUgYXMgYSBzdHJpbmcuCisJJGJ1ZiBnZXQge259IHttfQkjIEdldCBzZXZlcmFsIGxpbmVzIGFzIGEgbGlzdC4KKwkkYnVmIGluc2VydCB7bn0ge3N0cn0JIyBJbnNlcnQgYSBsaW5lIGluIGJ1ZmZlciwgYXMgbGluZSB7bn0uCisJJGJ1ZiBsYXN0CQkjIFJlcG9ydCBsaW5lIG51bWJlciBvZiBsYXN0IGxpbmUgaW4gYnVmZmVyLgorCSRidWYgbWFyayB7bWFya30JIyBSZXBvcnQgcG9zaXRpb24gb2YgYnVmZmVyIG1hcmsuCisJJGJ1ZiBuYW1lCQkjIFJlcG9ydCBuYW1lIG9mIGZpbGUgaW4gYnVmZmVyLgorCSRidWYgbnVtYmVyCQkjIFJlcG9ydCBudW1iZXIgb2YgdGhpcyBidWZmZXIuCisJJGJ1ZiBvcHRpb24ge29wdH0gW3ZhbF0JIyBHZXQvU2V0IHZpbSBvcHRpb24gaW4gYnVmZmVycyBjb250ZXh0LgorCSRidWYgc2V0IHtufSB7dGV4dH0JIyBSZXBsYWNlIGEgc2luZ2xlIGxpbmUuCisJJGJ1ZiBzZXQge259IHttfSB7bGlzdH0JIyBSZXBsYWNlIHNldmVyYWwgbGluZXMuCisJJGJ1ZiB3aW5kb3dzCQkjIENyZWF0ZSBUY2wgY29tbWFuZHMgZm9yIGJ1ZmZlcidzIHdpbmRvd3MuCis8CisJCQkJCQkJKnRjbC1saW5lbnVtYmVycyoKK01vc3QgYnVmZmVyIGNvbW1hbmRzIHRha2UgbGluZSBudW1iZXJzIGFzIGFyZ3VtZW50cy4gIEhvdyBUY2wgdHJlYXRzIHRoZXNlCitudW1iZXJzIGRlcGVuZHMgb24gdGhlICI6OnZpbTo6bGJhc2UiIHZhcmlhYmxlIChzZWUgfHRjbC12YXItbGJhc2V8KS4gIEluc3RlYWQKK29mIGxpbmUgbnVtYmVycywgc2V2ZXJhbCBrZXl3b3JkcyBjYW4gYmUgYWxzbyB1c2VkOiAidG9wIiwgInN0YXJ0IiwgImJlZ2luIiwKKyJmaXJzdCIsICJib3R0b20iLCAiZW5kIiBhbmQgImxhc3QiLgorCitPcHRpb25zOgorCSRidWYgYXBwZW5kIHtufSB7c3RyfQkJCQkqdGNsLWJ1ZmZlci1hcHBlbmQqCisJJGJ1ZiBpbnNlcnQge259IHtzdHJ9CQkJCSp0Y2wtYnVmZmVyLWluc2VydCoKKwlBZGQgYSBsaW5lIHRvIHRoZSBidWZmZXIuICBXaXRoIHRoZSAiaW5zZXJ0IiBvcHRpb24sIHRoZSBzdHJpbmcKKwliZWNvbWVzIHRoZSBuZXcgbGluZSB7bn0sIHdpdGggImFwcGVuZCIgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgbGluZSB7bn0uCisJRXhhbXBsZTogPgorCQkkYnVmIGluc2VydCB0b3AgIlRoaXMgaXMgdGhlIGJlZ2lubmluZy4iCisJCSRidWYgYXBwZW5kIGVuZCAiVGhpcyBpcyB0aGUgZW5kLiIKKzwJVG8gYWRkIGEgbGlzdCBvZiBsaW5lcyB0byB0aGUgYnVmZmVyLCB1c2UgYSBsb29wOiA+CisJCWZvcmVhY2ggbGluZSAkbGlzdCB7ICRidWYgYXBwZW5kICRudW0gJGxpbmUgOyBpbmNyIG51bSB9Cis8CisJJGJ1ZiBjb3VudAkJCQkJKnRjbC1idWZmZXItY291bnQqCisJUmVwb3J0cyB0aGUgdG90YWwgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBidWZmZXIuCisKKwkkYnVmIGRlbGNtZCB7Y21kfQkJCQkqdGNsLWJ1ZmZlci1kZWxjbWQqCisJUmVnaXN0ZXJzIHRoZSBUY2wgY29tbWFuZCB7Y21kfSBhcyBhIGRlbGV0aW9uIGNhbGxiYWNrIGZvciB0aGUgYnVmZmVyLgorCVRoaXMgY29tbWFuZCBpcyBleGVjdXRlZCAoaW4gdGhlIGdsb2JhbCBzY29wZSkganVzdCBiZWZvcmUgdGhlIGJ1ZmZlcgorCWlzIGRlbGV0ZWQuICBDb21wbGV4IGNvbW1hbmRzIHNob3VsZCBiZSBidWlsZCB3aXRoICJsaXN0IjogPgorCQkkYnVmIGRlbGNtZCBbbGlzdCBwdXRzIHZpbWVyciAiYnVmZmVyIFskYnVmIG51bWJlcl0gZ29uZSJdCis8CVNlZSBhbHNvIHx0Y2wtd2luZG93LWRlbGNtZHwuCisKKwkkYnVmIGRlbGV0ZSB7bn0JCQkJCSp0Y2wtYnVmZmVyLWRlbGV0ZSoKKwkkYnVmIGRlbGV0ZSB7bn0ge219CisJRGVsZXRlcyBsaW5lIHtufSBvciBsaW5lcyB7bn0gdGhyb3VnaCB7bX0gZnJvbSB0aGUgYnVmZmVyLgorCVRoaXMgZXhhbXBsZSBkZWxldGVzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBsYXN0IGxpbmU6ID4KKwkJJGJ1ZiBkZWxldGUgZmlyc3QgW2V4cHIgWyRidWYgbGFzdF0gLSAxXQorPAorCSRidWYgZ2V0IHtufQkJCQkJKnRjbC1idWZmZXItZ2V0KgorCSRidWYgZ2V0IHtufSB7bX0KKwlHZXRzIG9uZSBvciBtb3JlIGxpbmVzIGZyb20gdGhlIGJ1ZmZlci4gIEZvciBhIHNpbmdsZSBsaW5lLCB0aGUgcmVzdWx0CisJaXMgYSBzdHJpbmc7IGZvciBzZXZlcmFsIGxpbmVzLCBhIGxpc3Qgb2Ygc3RyaW5ncy4KKwlFeGFtcGxlOiA+CisJCXNldCB0b3BsaW5lIFskYnVmIGdldCB0b3BdCis8CisJJGJ1ZiBsYXN0CQkJCQkqdGNsLWJ1ZmZlci1sYXN0KgorCVJlcG9ydHMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBsYXN0IGxpbmUuICBUaGlzIHZhbHVlIGRlcGVuZHMgb24gdGhlCisJIjo6dmltOjpsYmFzZSIgdmFyaWFibGUuICBTZWUgfHRjbC12YXItbGJhc2V8LgorCisJJGJ1ZiBtYXJrIHttYXJrfQkJCQkqdGNsLWJ1ZmZlci1tYXJrKgorCVJlcG9ydHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBuYW1lZCBtYXJrIGFzIGEgc3RyaW5nLCBzaW1pbGFyIHRvIHRoZQorCWN1cnNvciBwb3NpdGlvbiBvZiB0aGUgImN1cnNvciIgb3B0aW9uIG9mIGEgd2luZG93IGNvbW1hbmQgKHNlZQorCXx0Y2wtd2luZG93LWN1cnNvcnwpLiAgVGhpcyBjYW4gYmUgY29udmVydGVkIHRvIGEgVGNsIGFycmF5IHZhcmlhYmxlOiA+CisJCWFycmF5IHNldCBtcG9zIFskYnVmIG1hcmsgImEiXQorPAkibXBvcyhjb2x1bW4pIiBhbmQgIm1wb3Mocm93KSIgbm93IGNvbnRhaW4gdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXJrLgorCUlmIHRoZSBtYXJrIGlzIG5vdCBzZXQsIGEgc3RhbmRhcmQgVGNsIGVycm9yIHJlc3VsdHMuCisKKwkkYnVmIG5hbWUKKwlSZXBvcnRzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBidWZmZXIuICBGb3IgYSBidWZmZXIgd2l0aG91dCBhCisJZmlsZSwgdGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcuCisKKwkkYnVmIG51bWJlcgorCVJlcG9ydHMgdGhlIG51bWJlciBvZiB0aGlzIGJ1ZmZlci4gIFNlZSB8OmJ1ZmZlcnN8LgorCVRoaXMgZXhhbXBsZSBkZWxldGVzIGEgYnVmZmVyIGZyb20gdmltOiA+CisJCTo6dmltOjpjb21tYW5kICJiZGVsZXRlIFskYnVmIG51bWJlcl0iCis8CisJJGJ1ZiBzZXQge259IHtzdHJpbmd9CQkJCSp0Y2wtYnVmZmVyLXNldCoKKwkkYnVmIHNldCB7bn0ge219IHtsaXN0fQorCVJlcGxhY2Ugb25lIG9yIHNldmVyYWwgbGluZXMgaW4gdGhlIGJ1ZmZlci4gIElmIHRoZSBsaXN0IGNvbnRhaW5zIG1vcmUKKwllbGVtZW50cyB0aGFuIHRoZXJlIGFyZSBsaW5lcyB0byByZXBsYWNlLCB0aGV5IGFyZSBpbnNlcnRlZCBpbnRvIHRoZQorCWJ1ZmZlci4gIElmIHRoZSBsaXN0IGNvbnRhaW5zIGZld2VyIGVsZW1lbnRzLCBhbnkgdW5yZXBsYWNlZCBsaW5lIGlzCisJZGVsZXRlZCBmcm9tIHRoZSBidWZmZXIuCisKKwkkYnVmIHdpbmRvd3MJCQkJCSp0Y2wtYnVmZmVyLXdpbmRvd3MqCisJQ3JlYXRlcyBhIHdpbmRvdyBjb21tYW5kIGZvciBlYWNoIHdpbmRvdyB0aGF0IGRpc3BsYXlzIHRoaXMgYnVmZmVyLCBhbmQKKwlyZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29tbWFuZCBuYW1lcyBhcyB0aGUgcmVzdWx0LgorCUV4YW1wbGU6ID4KKwkJc2V0IHdpbmxpc3QgWyRidWYgd2luZG93c10KKwkJZm9yZWFjaCB3aW4gJHdpbmxpc3QgeyAkd2luIGhlaWdodCA0IH0KKzwJU2VlIHx0Y2wtd2luZG93LWNtZHN8IGZvciB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuCisKKwkkYnVmIGNvbW1hbmQgWy1xdWlldF0ge2NtZH0JCQkqdGNsLWJ1ZmZlci1jb21tYW5kKgorCSRidWYgZXhwciB7ZXhyfQkJCQkJKnRjbC1idWZmZXItZXhwcioKKwkkYnVmIG9wdGlvbiB7b3B0fSBbdmFsXQkJCQkqdGNsLWJ1ZmZlci1vcHRpb24qCisJVGhlc2UgYXJlIHNpbWlsYXIgdG8gIjo6dmltOjpjb21tYW5kIiBldGMuLCBleGNlcHQgdGhhdCBldmVyeXRoaW5nIGlzCisJZG9uZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgYnVmZmVyIHJlcHJlc2VudGVkIGJ5ICRidWYsIGluc3RlYWQgb2YgdGhlCisJY3VycmVudCBidWZmZXIuICBGb3IgZXhhbXBsZSwgc2V0dGluZyBhbiBvcHRpb24gdGhhdCBpcyBtYXJrZWQgJ2xvY2FsCisJdG8gYnVmZmVyJyBhZmZlY3RzIHRoZSBidWZmZXIgJGJ1Zi4gIEFueXRoaW5nIHRoYXQgYWZmZWN0cyBvciBxdWVyaWVzCisJYSB3aW5kb3cgdXNlcyB0aGUgZmlyc3Qgd2luZG93IGluIHZpbSdzIHdpbmRvdyBsaXN0IHRoYXQgZGlzcGxheXMgdGhpcworCWJ1ZmZlciAoaS5lLiB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIGxpc3QgcmV0dXJuZWQgYnkgIiRidWYgd2luZG93cyIpLgorCVNlZSB8dGNsLWNvbW1hbmR8LCB8dGNsLWV4cHJ8IGFuZCB8dGNsLW9wdGlvbnwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJRXhhbXBsZTogPgorCQlpZiB7IFskYnVmIG9wdGlvbiBtb2RpZmllZF0gfSB7ICRidWYgY29tbWFuZCAidyIgfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIE1pc2NlbGxhbmVvdXM7IE91dHB1dCBmcm9tIFRjbAkJKnRjbC1taXNjKiAqdGNsLW91dHB1dCoKKworVGhlIHN0YW5kYXJkIFRjbCBjb21tYW5kcyAiZXhpdCIgYW5kICJjYXRjaCIgYXJlIHJlcGxhY2VkIGJ5IGN1c3RvbSB2ZXJzaW9ucy4KKyJleGl0IiB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50IFRjbCBzY3JpcHQgYW5kIHJldHVybnMgdG8gdmltLCB3aGljaCBkZWxldGVzIHRoZQorVGNsIGludGVycHJldGVyLiAgQW5vdGhlciBjYWxsIHRvICI6dGNsIiB0aGVuIGNyZWF0ZXMgYSBuZXcgVGNsIGludGVycHJldGVyLgorImV4aXQiIGRvZXMgTk9UIHRlcm1pbmF0ZSB2aW0hICAiY2F0Y2giIHdvcmtzIGFzIGJlZm9yZSwgZXhjZXB0IHRoYXQgaXQgZG9lcworbm90IHByZXZlbnQgc2NyaXB0IHRlcm1pbmF0aW9uIGZyb20gImV4aXQiLiAgQW4gZXhpdCBjb2RlICE9IDAgY2F1c2VzIHRoZSBleAorY29tbWFuZCB0aGF0IGludm9rZWQgdGhlIFRjbCBzY3JpcHQgdG8gcmV0dXJuIGFuIGVycm9yLgorCitUd28gbmV3IEkvTyBzdHJlYW1zIGFyZSBhdmFpbGFibGUgaW4gVGNsLCAidmltb3V0IiBhbmQgInZpbWVyciIuICBBbGwgb3V0cHV0CitkaXJlY3RlZCB0byB0aGVtIGlzIGRpc3BsYXllZCBpbiB0aGUgdmltIG1lc3NhZ2UgYXJlYSwgYXMgaW5mb3JtYXRpb24gbWVzc2FnZXMKK2FuZCBlcnJvciBtZXNzYWdlcywgcmVzcGVjdGl2ZWx5LiAgVGhlIHN0YW5kYXJkIFRjbCBvdXRwdXQgc3RyZWFtcyBzdGRvdXQgYW5kCitzdGRlcnIgYXJlIG1hcHBlZCB0byB2aW1vdXQgYW5kIHZpbWVyciwgc28gdGhhdCBhIG5vcm1hbCAicHV0cyIgY29tbWFuZCBjYW4gYmUKK3VzZWQgdG8gZGlzcGxheSBtZXNzYWdlcyBpbiB2aW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gS25vd24gYnVncyAmIHByb2JsZW1zCQkJCSp0Y2wtYnVncyoKKworQ2FsbGluZyBvbmUgb2YgdGhlIFRjbCBleCBjb21tYW5kcyBmcm9tIGluc2lkZSBUY2wgKHZpYSAiOjp2aW06OmNvbW1hbmQiKSBtYXkKK2hhdmUgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuICBUaGUgY29tbWFuZCBjcmVhdGVzIGEgbmV3IGludGVycHJldGVyLCB3aGljaAoraGFzIHRoZSBzYW1lIGFiaWxpdGllcyBhcyB0aGUgc3RhbmRhcmQgaW50ZXJwcmV0ZXIgLSBtYWtpbmcgIjo6dmltOjpjb21tYW5kIgorYXZhaWxhYmxlIGluIGEgc2FmZSBjaGlsZCBpbnRlcnByZXRlciB0aGVyZWZvcmUgbWFrZXMgdGhlIGNoaWxkIHVuc2FmZS4gIChJdAord291bGQgYmUgdHJpdmlhbCB0byBibG9jayBuZXN0ZWQgOnRjbCogY2FsbHMgb3IgZW5zdXJlIHRoYXQgc3VjaCBjYWxscyBmcm9tIGEKK3NhZmUgaW50ZXJwcmV0ZXIgY3JlYXRlIG9ubHkgbmV3IHNhZmUgaW50ZXJwcmV0ZXJzLCBidXQgcXVpdGUgcG9pbnRsZXNzIC0KK2RlcGVuZGluZyBvbiB2aW0ncyBjb25maWd1cmF0aW9uLCAiOjp2aW06OmNvbW1hbmQiIG1heSBleGVjdXRlIGFyYml0cmFyeSBjb2RlCitpbiBhbnkgbnVtYmVyIG9mIG90aGVyIHNjcmlwdGluZyBsYW5ndWFnZXMuKSAgQSBjYWxsIHRvICJleGl0IiB3aXRoaW4gdGhpcyBuZXcKK2ludGVycHJldGVyIGRvZXMgbm90IGFmZmVjdCB0aGUgb2xkIGludGVycHJldGVyOyBpdCBvbmx5IHRlcm1pbmF0ZXMgdGhlIG5ldworaW50ZXJwcmV0ZXIsIHRoZW4gc2NyaXB0IHByb2Nlc3NpbmcgY29udGludWVzIG5vcm1hbGx5IGluIHRoZSBvbGQgaW50ZXJwcmV0ZXIuCisKK0lucHV0IGZyb20gc3RkaW4gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gRXhhbXBsZXM6CQkJCQkJKnRjbC1leGFtcGxlcyoKKworSGVyZSBhcmUgYSBmZXcgc21hbGwgKGFuZCBtYXliZSB1c2VmdWwpIFRjbCBzY3JpcHRzLgorCitUaGlzIHNjcmlwdCBzb3J0cyB0aGUgbGluZXMgb2YgdGhlIGVudGlyZSBidWZmZXIgKGFzc3VtZSBpdCBjb250YWlucyBhIGxpc3QKK29mIG5hbWVzIG9yIHNvbWV0aGluZyBzaW1pbGFyKToKKwlzZXQgYnVmICQ6OnZpbTo6Y3VycmVudChidWZmZXIpCisJc2V0IGxpbmVzIFskYnVmIGdldCB0b3AgYm90dG9tXQorCXNldCBsaW5lcyBbbHNvcnQgLWRpY3Rpb25hcnkgJGxpbmVzXQorCSRidWYgc2V0IHRvcCBib3R0b20gJGxpbmVzCisKK1RoaXMgc2NyaXB0IHJldmVyc2VzIHRoZSBsaW5lcyBpbiB0aGUgYnVmZmVyLiAgTm90ZSB0aGUgdXNlIG9mICI6OnZpbTo6bGJhc2UiCithbmQgIiRidWYgbGFzdCIgdG8gd29yayB3aXRoIGFueSBsaW5lIG51bWJlciBzZXR0aW5nLgorCXNldCBidWYgJDo6dmltOjpjdXJyZW50KGJ1ZmZlcikKKwlzZXQgdCAkOjp2aW06OmxiYXNlCisJc2V0IGIgWyRidWYgbGFzdF0KKwl3aGlsZSB7ICR0IDwgJGIgfSB7CisJCXNldCB0bCBbJGJ1ZiBnZXQgJHRdCisJCXNldCBibCBbJGJ1ZiBnZXQgJGJdCisJCSRidWYgc2V0ICR0ICRibAorCQkkYnVmIHNldCAkYiAkdGwKKwkJaW5jciB0CisJCWluY3IgYiAtMQorCX0KKworVGhpcyBzY3JpcHQgYWRkcyBhIGNvbnNlY3V0aXZlIG51bWJlciB0byBlYWNoIGxpbmUgaW4gdGhlIGN1cnJlbnQgcmFuZ2U6CisJc2V0IGJ1ZiAkOjp2aW06OmN1cnJlbnQoYnVmZmVyKQorCXNldCBpICQ6OnZpbTo6cmFuZ2Uoc3RhcnQpCisJc2V0IG4gMQorCXdoaWxlIHsgJGkgPD0gJDo6dmltOjpyYW5nZShlbmQpIH0geworCQlzZXQgbGluZSBbJGJ1ZiBnZXQgJGldCisJCSRidWYgc2V0ICRpICIkblx0JGxpbmUiCisJCWluY3IgaSA7IGluY3IgbgorCX0KKworVGhlIHNhbWUgY2FuIGFsc28gYmUgZG9uZSBxdWlja2x5IHdpdGggdHdvIGV4IGNvbW1hbmRzLCB1c2luZyAiOnRjbGRvIjoKKwk6dGNsIHNldCBuIDEKKwk6W3JhbmdlXXRjbGRvIHNldCBsaW5lICIkblx0JGxpbmUiIDsgaW5jciBuCisKK1RoaXMgcHJvY2VkdXJlIHJ1bnMgYW4gZXggY29tbWFuZCBvbiBlYWNoIGJ1ZmZlciAoaWRlYSBzdG9sZW4gZnJvbSBSb24gQWFyb24pOgorCXByb2MgZWFjaGJ1ZiB7IGNtZCB9IHsKKwkJZm9yZWFjaCBiIFs6OnZpbTo6YnVmZmVyIGxpc3RdIHsKKwkJCSRiIGNvbW1hbmQgJGNtZAorCQl9CisJfQorVXNlIGl0IGxpa2UgdGhpczoKKwk6dGNsIGVhY2hidWYgJXMvZm9vL2Jhci9nCitCZSBjYXJlZnVsIHdpdGggVGNsJ3Mgc3RyaW5nIGFuZCBiYWNrc2xhc2ggc3Vic3RpdHV0aW9uLCB0b3VnaC4gSWYgaW4gZG91YnQsCitzdXJyb3VuZCB0aGUgZXggY29tbWFuZCB3aXRoIGN1cmx5IGJyYWNlcy4KKworCitJZiB5b3Ugd2FudCB0byBhZGQgc29tZSBUY2wgcHJvY2VkdXJlcyBwZXJtYW5lbnRseSB0byB2aW0sIGp1c3QgcGxhY2UgdGhlbSBpbgorYSBmaWxlIChlLmcuICJ+Ly52aW1yYy50Y2wiIG9uIFVuaXggbWFjaGluZXMpLCBhbmQgYWRkIHRoZXNlIGxpbmVzIHRvIHlvdXIKK3N0YXJ0dXAgZmlsZSAodXN1YWxseSAifi8udmltcmMiIG9uIFVuaXgpOgorCWlmIGhhcygidGNsIikKKwkJdGNsZmlsZSB+Ly52aW1yYy50Y2wKKwllbmRpZgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pbmRlbnQudHh0IGIvcnVudGltZS9kb2MvaW5kZW50LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzVjZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaW5kZW50LnR4dApAQCAtMCwwICsxLDUyMiBAQAorKmluZGVudC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyNQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1RoaXMgZmlsZSBpcyBhYm91dCBpbmRlbnRpbmcgQyBwcm9ncmFtcyBhbmQgb3RoZXIgZmlsZXMuCisKKzEuIEluZGVudGluZyBDIHByb2dyYW1zCQl8Qy1pbmRlbnRpbmd8CisyLiBJbmRlbnRpbmcgYnkgZXhwcmVzc2lvbgl8aW5kZW50LWV4cHJlc3Npb258CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW5kZW50aW5nIEMgcHJvZ3JhbXMJCQkJCSpDLWluZGVudGluZyoKKworVGhlIGJhc2ljcyBmb3IgQyBpbmRlbnRpbmcgYXJlIGV4cGxhaW5lZCBpbiBzZWN0aW9uIHwzMC4yfCBvZiB0aGUgdXNlciBtYW51YWwuCisKK1ZpbSBoYXMgb3B0aW9ucyBmb3IgYXV0b21hdGljYWxseSBpbmRlbnRpbmcgQyBwcm9ncmFtIGZpbGVzLiAgVGhlc2Ugb3B0aW9ucworYWZmZWN0IG9ubHkgdGhlIGluZGVudCBhbmQgZG8gbm90IHBlcmZvcm0gb3RoZXIgZm9ybWF0dGluZy4gIEZvciBjb21tZW50Citmb3JtYXR0aW5nLCBzZWUgfGZvcm1hdC1jb21tZW50c3wuCisKK05vdGUgdGhhdCB0aGlzIHdpbGwgbm90IHdvcmsgd2hlbiB0aGUgfCtzbWFydGluZGVudHwgb3IgfCtjaW5kZW50fCBmZWF0dXJlcworaGF2ZSBiZWVuIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KKworVGhlcmUgYXJlIGluIGZhY3QgZm91ciBtZXRob2RzIGF2YWlsYWJsZSBmb3IgaW5kZW50YXRpb246CisnYXV0b2luZGVudCcJdXNlcyB0aGUgaW5kZW50IGZyb20gdGhlIHByZXZpb3VzIGxpbmUuCisnc21hcnRpbmRlbnQnCWlzIGxpa2UgJ2F1dG9pbmRlbnQnIGJ1dCBhbHNvIHJlY29nbml6ZXMgc29tZSBDIHN5bnRheCB0bworCQlpbmNyZWFzZS9yZWR1Y2UgdGhlIGluZGVudCB3aGVyZSBhcHByb3ByaWF0ZS4KKydjaW5kZW50JwlXb3JrcyBtb3JlIGNsZXZlcmx5IHRoYW4gdGhlIG90aGVyIHR3byBhbmQgaXMgY29uZmlndXJhYmxlIHRvCisJCWRpZmZlcmVudCBpbmRlbnRpbmcgc3R5bGVzLgorJ2luZGVudGV4cHInCVRoZSBtb3N0IGZsZXhpYmxlIG9mIGFsbDogRXZhbHVhdGVzIGFuIGV4cHJlc3Npb24gdG8gY29tcHV0ZQorCQl0aGUgaW5kZW50IG9mIGEgbGluZS4gIFdoZW4gbm9uLWVtcHR5IHRoaXMgbWV0aG9kIG92ZXJyaWRlcworCQl0aGUgb3RoZXIgb25lcy4gIFNlZSB8aW5kZW50LWV4cHJlc3Npb258LgorVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgJ2NpbmRlbnQnIG9wdGlvbi4KKworTm90ZSB0aGF0ICdjaW5kZW50JyBpbmRlbnRpbmcgZG9lcyBub3Qgd29yayBmb3IgZXZlcnkgY29kZSBzY2VuYXJpby4gIFZpbQoraXMgbm90IGEgQyBjb21waWxlcjogaXQgZG9lcyBub3QgcmVjb2duaXplIGFsbCBzeW50YXguCisKK1RoZXNlIGZvdXIgb3B0aW9ucyBjb250cm9sIEMgcHJvZ3JhbSBpbmRlbnRpbmc6CisnY2luZGVudCcJRW5hYmxlcyBWaW0gdG8gcGVyZm9ybSBDIHByb2dyYW0gaW5kZW50aW5nIGF1dG9tYXRpY2FsbHkuCisnY2lua2V5cycJU3BlY2lmaWVzIHdoaWNoIGtleXMgdHJpZ2dlciByZWluZGVudGluZyBpbiBpbnNlcnQgbW9kZS4KKydjaW5vcHRpb25zJwlTZXRzIHlvdXIgcHJlZmVycmVkIGluZGVudCBzdHlsZS4KKydjaW53b3JkcycJRGVmaW5lcyBrZXl3b3JkcyB0aGF0IHN0YXJ0IGFuIGV4dHJhIGluZGVudCBpbiB0aGUgbmV4dCBsaW5lLgorCitJZiAnbGlzcCcgaXMgbm90IG9uIGFuZCAnZXF1YWxwcmcnIGlzIGVtcHR5LCB0aGUgIj0iIG9wZXJhdG9yIGluZGVudHMgdXNpbmcKK1ZpbSdzIGJ1aWx0LWluIGFsZ29yaXRobSByYXRoZXIgdGhhbiBjYWxsaW5nIGFuIGV4dGVybmFsIHByb2dyYW0uCisKK1NlZSB8YXV0b2NvbW1hbmR8IGZvciBob3cgdG8gc2V0IHRoZSAnY2luZGVudCcgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZm9yIEMgY29kZQorZmlsZXMgYW5kIHJlc2V0IGl0IGZvciBvdGhlcnMuCisKKwkJCQkJKmNpbmtleXMtZm9ybWF0KiAqaW5kZW50a2V5cy1mb3JtYXQqCitUaGUgJ2NpbmtleXMnIG9wdGlvbiBpcyBhIHN0cmluZyB0aGF0IGNvbnRyb2xzIFZpbSdzIGluZGVudGluZyBpbiByZXNwb25zZSB0bwordHlwaW5nIGNlcnRhaW4gY2hhcmFjdGVycyBvciBjb21tYW5kcyBpbiBjZXJ0YWluIGNvbnRleHRzLiAgTm90ZSB0aGF0IHRoaXMgbm90Citvbmx5IHRyaWdnZXJzIEMtaW5kZW50aW5nLiAgV2hlbiAnaW5kZW50ZXhwcicgaXMgbm90IGVtcHR5ICdpbmRlbnRrZXlzJyBpcwordXNlZCBpbnN0ZWFkLiAgVGhlIGZvcm1hdCBvZiAnY2lua2V5cycgYW5kICdpbmRlbnRrZXlzJyBpcyBlcXVhbC4KKworVGhlIGRlZmF1bHQgaXMgIjB7LDB9LDApLDosMCMsIV5GLG8sTyxlIiB3aGljaCBzcGVjaWZpZXMgdGhhdCBpbmRlbnRpbmcgb2NjdXJzCithcyBmb2xsb3dzOgorCisJIjB7IglpZiB5b3UgdHlwZSAneycgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBhIGxpbmUKKwkiMH0iCWlmIHlvdSB0eXBlICd9JyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEgbGluZQorCSIwKSIJaWYgeW91IHR5cGUgJyknIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBsaW5lCisJIjoiCWlmIHlvdSB0eXBlICc6JyBhZnRlciBhIGxhYmVsIG9yIGNhc2Ugc3RhdGVtZW50CisJIjAjIglpZiB5b3UgdHlwZSAnIycgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBhIGxpbmUKKwkiIV5GIglpZiB5b3UgdHlwZSBDVFJMLUYgKHdoaWNoIGlzIG5vdCBpbnNlcnRlZCkKKwkibyIJaWYgeW91IHR5cGUgYSA8Q1I+IGFueXdoZXJlIG9yIHVzZSB0aGUgIm8iIGNvbW1hbmQgKG5vdCBpbgorCQlpbnNlcnQgbW9kZSEpCisJIk8iCWlmIHlvdSB1c2UgdGhlICJPIiBjb21tYW5kIChub3QgaW4gaW5zZXJ0IG1vZGUhKQorCSJlIglpZiB5b3UgdHlwZSB0aGUgc2Vjb25kICdlJyBmb3IgYW4gImVsc2UiIGF0IHRoZSBzdGFydCBvZiBhCisJCWxpbmUKKworQ2hhcmFjdGVycyB0aGF0IGNhbiBwcmVjZWRlIGVhY2gga2V5OgorIQlXaGVuIGEgJyEnIHByZWNlZGVzIHRoZSBrZXksIFZpbSB3aWxsIG5vdCBpbnNlcnQgdGhlIGtleSBidXQgd2lsbAorCWluc3RlYWQgcmVpbmRlbnQgdGhlIGN1cnJlbnQgbGluZS4gIFRoaXMgYWxsb3dzIHlvdSB0byBkZWZpbmUgYQorCWNvbW1hbmQga2V5IGZvciByZWluZGVudGluZyB0aGUgY3VycmVudCBsaW5lLiAgQ1RSTC1GIGlzIHRoZSBkZWZhdWx0CisJa2V5IGZvciB0aGlzLiAgQmUgY2FyZWZ1bCBpZiB5b3UgZGVmaW5lIENUUkwtSSBmb3IgdGhpcyBiZWNhdXNlIENUUkwtSQorCWlzIHRoZSBBU0NJSSBjb2RlIGZvciA8VGFiPi4KKyoJV2hlbiBhICcqJyBwcmVjZWRlcyB0aGUga2V5LCBWaW0gd2lsbCByZWluZGVudCB0aGUgbGluZSBiZWZvcmUKKwlpbnNlcnRpbmcgdGhlIGtleS4gIElmICdjaW5rZXlzJyBjb250YWlucyAiKjxSZXR1cm4+IiwgVmltIHJlaW5kZW50cworCXRoZSBjdXJyZW50IGxpbmUgYmVmb3JlIG9wZW5pbmcgYSBuZXcgbGluZS4KKzAJV2hlbiBhIHplcm8gcHJlY2VkZXMgdGhlIGtleSAoYnV0IGFwcGVhcnMgYWZ0ZXIgJyEnIG9yICcqJykgVmltIHdpbGwKKwlyZWluZGVudCB0aGUgbGluZSBvbmx5IGlmIHRoZSBrZXkgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciB5b3UgdHlwZSBpbgorCXRoZSBsaW5lLiAgV2hlbiB1c2VkIGJlZm9yZSAiPSIgVmltIHdpbGwgb25seSByZWluZGVudCB0aGUgbGluZSBpZgorCXRoZXJlIGlzIG9ubHkgd2hpdGUgc3BhY2UgYmVmb3JlIHRoZSB3b3JkLgorCitXaGVuIG5laXRoZXIgJyEnIG5vciAnKicgcHJlY2VkZXMgdGhlIGtleSwgVmltIHJlaW5kZW50cyB0aGUgbGluZSBhZnRlciB5b3UKK3R5cGUgdGhlIGtleS4gIFNvICc7JyBzZXRzIHRoZSBpbmRlbnRhdGlvbiBvZiBhIGxpbmUgd2hpY2ggaW5jbHVkZXMgdGhlICc7Jy4KKworU3BlY2lhbCBrZXkgbmFtZXM6Cis8PglBbmdsZSBicmFja2V0cyBtZWFuIHNwZWxsZWQtb3V0IG5hbWVzIG9mIGtleXMuICBGb3IgZXhhbXBsZTogIjxVcD4iLAorCSI8SW5zPiIgKHNlZSB8a2V5LW5vdGF0aW9ufCkuCiteCUxldHRlcnMgcHJlY2VkZWQgYnkgYSBjYXJldCAoXikgYXJlIGNvbnRyb2wgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlOgorCSJeRiIgaXMgQ1RSTC1GLgorbwlSZWluZGVudCBhIGxpbmUgd2hlbiB5b3UgdXNlIHRoZSAibyIgY29tbWFuZCBvciB3aGVuIFZpbSBvcGVucyBhIG5ldworCWxpbmUgYmVsb3cgdGhlIGN1cnJlbnQgb25lIChlLmcuLCB3aGVuIHlvdSB0eXBlIDxFbnRlcj4gaW4gaW5zZXJ0CisJbW9kZSkuCitPCVJlaW5kZW50IGEgbGluZSB3aGVuIHlvdSB1c2UgdGhlICJPIiBjb21tYW5kLgorZQlSZWluZGVudCBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiZWxzZSIgd2hlbiB5b3UgdHlwZSB0aGUgc2Vjb25kICdlJy4KKzoJUmVpbmRlbnQgYSBsaW5lIHdoZW4gYSAnOicgaXMgdHlwZWQgd2hpY2ggaXMgYWZ0ZXIgYSBsYWJlbCBvciBjYXNlCisJc3RhdGVtZW50LiAgRG9uJ3QgcmVpbmRlbnQgZm9yIGEgIjoiIGluICJjbGFzczo6bWV0aG9kIiBmb3IgQysrLiAgVG8KKwlSZWluZGVudCBmb3IgYW55ICI6IiwgdXNlICI8Oj4iLgorPXdvcmQJUmVpbmRlbnQgd2hlbiB0eXBpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIG9mICJ3b3JkIi4gICJ3b3JkIiBtYXkKKwlhY3R1YWxseSBiZSBwYXJ0IG9mIGFub3RoZXIgd29yZC4gIFRodXMgIj1lbmQiIHdvdWxkIGNhdXNlIHJlaW5kZW50aW5nCisJd2hlbiB0eXBpbmcgdGhlICJkIiBpbiAiZW5kaWYiIG9yICJlbmR3aGlsZSIuICBCdXQgbm90IHdoZW4gdHlwaW5nCisJImJlbmQiLiAgQWxzbyByZWluZGVudCB3aGVuIGNvbXBsZXRpb24gcHJvZHVjZXMgYSB3b3JkIHRoYXQgc3RhcnRzCisJd2l0aCAid29yZCIuICAiMD13b3JkIiByZWluZGVudHMgd2hlbiB0aGVyZSBpcyBvbmx5IHdoaXRlIHNwYWNlIGJlZm9yZQorCXRoZSB3b3JkLgorPX53b3JkCUxpa2UgPXdvcmQsIGJ1dCBpZ25vcmUgY2FzZS4KKworSWYgeW91IHJlYWxseSB3YW50IHRvIHJlaW5kZW50IHdoZW4geW91IHR5cGUgJ28nLCAnTycsICdlJywgJzAnLCAnPCcsICc+JywKKycqJywgJzonIG9yICchJywgdXNlICI8bz4iLCAiPE8+IiwgIjxlPiIsICI8MD4iLCAiPDw+IiwgIjw+PiIsICI8Kj4iLCAiPDo+IiBvcgorIjwhPiIsIHJlc3BlY3RpdmVseSwgZm9yIHRob3NlIGtleXMuCisKK0ZvciBhbiBlbWFjcy1zdHlsZSBpbmRlbnQgbW9kZSB3aGVyZSBsaW5lcyBhcmVuJ3QgaW5kZW50ZWQgZXZlcnkgdGltZSB5b3UKK3ByZXNzIEVudGVyIGJ1dCBvbmx5IGlmIHlvdSBwcmVzcyBUYWIsIEkgc3VnZ2VzdDoKKwk6c2V0IGNpbmtleXM9MHssMH0sOiwwIywhPFRhYj4sIV5GCitZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHN3aXRjaCBvZmYgJ2F1dG9pbmRlbnQnIHRoZW4uCisKK05vdGU6IElmIHlvdSBjaGFuZ2UgdGhlIGN1cnJlbnQgbGluZSdzIGluZGVudGF0aW9uIG1hbnVhbGx5LCBWaW0gaWdub3JlcyB0aGUKK2NpbmRlbnQgc2V0dGluZ3MgZm9yIHRoYXQgbGluZS4gIFRoaXMgcHJldmVudHMgdmltIGZyb20gcmVpbmRlbnRpbmcgYWZ0ZXIgeW91CitoYXZlIGNoYW5nZWQgdGhlIGluZGVudCBieSB0eXBpbmcgPEJTPiwgPFRhYj4sIG9yIDxTcGFjZT4gaW4gdGhlIGluZGVudCBvcgordXNlZCBDVFJMLVQgb3IgQ1RSTC1ELgorCisJCQkJCQkqY2lub3B0aW9ucy12YWx1ZXMqCitUaGUgJ2Npbm9wdGlvbnMnIG9wdGlvbiBzZXRzIGhvdyBWaW0gcGVyZm9ybXMgaW5kZW50YXRpb24uICBJbiB0aGUgbGlzdCBiZWxvdywKKyJOIiByZXByZXNlbnRzIGEgbnVtYmVyIG9mIHlvdXIgY2hvaWNlICh0aGUgbnVtYmVyIGNhbiBiZSBuZWdhdGl2ZSkuICBXaGVuCit0aGVyZSBpcyBhbiAncycgYWZ0ZXIgdGhlIG51bWJlciwgVmltIG11bHRpcGxpZXMgdGhlIG51bWJlciBieSAnc2hpZnR3aWR0aCc6CisiMXMiIGlzICdzaGlmdHdpZHRoJywgIjJzIiBpcyB0d28gdGltZXMgJ3NoaWZ0d2lkdGgnLCBldGMuICBZb3UgY2FuIHVzZSBhCitkZWNpbWFsIHBvaW50LCB0b286ICItMC41cyIgaXMgbWludXMgaGFsZiBhICdzaGlmdHdpZHRoJy4gIFRoZSBleGFtcGxlcyBiZWxvdworYXNzdW1lIGEgJ3NoaWZ0d2lkdGgnIG9mIDQuCisKKwk+TiAgICBBbW91bnQgYWRkZWQgZm9yICJub3JtYWwiIGluZGVudC4gIFVzZWQgYWZ0ZXIgYSBsaW5lIHRoYXQgc2hvdWxkCisJICAgICAgaW5jcmVhc2UgdGhlIGluZGVudCAobGluZXMgc3RhcnRpbmcgd2l0aCAiaWYiLCBhbiBvcGVuaW5nIGJyYWNlLAorCSAgICAgIGV0Yy4pLiAgKGRlZmF1bHQgJ3NoaWZ0d2lkdGgnKS4KKworCQljaW5vPQkJICAgIGNpbm89PjIJCWNpbm89PjJzID4KKwkJICBpZiAoY29uZCkJICAgICAgaWYgKGNvbmQpCQkgIGlmIChjb25kKQorCQkgIHsJCSAgICAgIHsJCQkgIHsKKwkJICAgICAgZm9vOwkJZm9vOwkJCSAgZm9vOworCQkgIH0JCSAgICAgIH0JCQkgIH0KKzwKKwllTiAgICBBZGQgTiB0byB0aGUgcHJldmFpbGluZyBpbmRlbnQgaW5zaWRlIGEgc2V0IG9mIGJyYWNlcyBpZiB0aGUKKwkgICAgICBvcGVuaW5nIGJyYWNlIGF0IHRoZSBFbmQgb2YgdGhlIGxpbmUgKG1vcmUgcHJlY2lzZTogaXMgbm90IHRoZQorCSAgICAgIGZpcnN0IGNoYXJhY3RlciBpbiBhIGxpbmUpLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgYQorCSAgICAgIGRpZmZlcmVudCBpbmRlbnQgd2hlbiB0aGUgJ3snIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBmcm9tCisJICAgICAgd2hlbiAneycgaXMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gIChkZWZhdWx0IDApLgorCisJCWNpbm89CQkgICAgY2lubz1lMgkJY2lubz1lLTIgPgorCQkgIGlmIChjb25kKSB7CSAgICAgIGlmIChjb25kKSB7CSAgaWYgKGNvbmQpIHsKKwkJICAgICAgZm9vOwkJICAgIGZvbzsJICAgIGZvbzsKKwkJICB9CQkgICAgICB9CQkJICB9CisJCSAgZWxzZQkJICAgICAgZWxzZQkJICBlbHNlCisJCSAgewkJICAgICAgewkJCSAgeworCQkgICAgICBiYXI7CQkgIGJhcjsJCSAgICAgIGJhcjsKKwkJICB9CQkgICAgICB9CQkJICB9Cis8CisJbk4gICAgQWRkIE4gdG8gdGhlIHByZXZhaWxpbmcgaW5kZW50IGZvciBhIHN0YXRlbWVudCBhZnRlciBhbiAiaWYiLAorCSAgICAgICJ3aGlsZSIsIGV0Yy4sIGlmIGl0IGlzIE5PVCBpbnNpZGUgYSBzZXQgb2YgYnJhY2VzLiAgVGhpcyBpcworCSAgICAgIHVzZWZ1bCBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCBpbmRlbnQgd2hlbiB0aGVyZSBpcyBubyAneycKKwkgICAgICBiZWZvcmUgdGhlIHN0YXRlbWVudCBmcm9tIHdoZW4gdGhlcmUgaXMgYSAneycgYmVmb3JlIGl0LgorCSAgICAgIChkZWZhdWx0IDApLgorCisJCWNpbm89CQkgICAgY2lubz1uMgkJY2lubz1uLTIgPgorCQkgIGlmIChjb25kKQkgICAgICBpZiAoY29uZCkJCSAgaWYgKGNvbmQpCisJCSAgICAgIGZvbzsJCSAgICBmb287CSAgICBmb287CisJCSAgZWxzZQkJICAgICAgZWxzZQkJICBlbHNlCisJCSAgewkJICAgICAgewkJCSAgeworCQkgICAgICBiYXI7CQkgIGJhcjsJCSAgICAgIGJhcjsKKwkJICB9CQkgICAgICB9CQkJICB9Cis8CisJZk4gICAgUGxhY2UgdGhlIGZpcnN0IG9wZW5pbmcgYnJhY2Ugb2YgYSBmdW5jdGlvbiBvciBvdGhlciBibG9jayBpbgorCSAgICAgIGNvbHVtbiBOLiAgVGhpcyBhcHBsaWVzIG9ubHkgZm9yIGFuIG9wZW5pbmcgYnJhY2UgdGhhdCBpcyBub3QKKwkgICAgICBpbnNpZGUgb3RoZXIgYnJhY2VzIGFuZCBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuICBXaGF0IGNvbWVzCisJICAgICAgYWZ0ZXIgdGhlIGJyYWNlIGlzIHB1dCByZWxhdGl2ZSB0byB0aGlzIGJyYWNlLiAgKGRlZmF1bHQgMCkuCisKKwkJY2lubz0JCSAgICBjaW5vPWYuNXMJCWNpbm89ZjFzID4KKwkJICBmdW5jKCkJICAgICAgZnVuYygpCQkgIGZ1bmMoKQorCQkgIHsJCQl7CQkgICAgICB7CisJCSAgICAgIGludCBmb287CQkgICAgaW50IGZvbzsJCSAgaW50IGZvbzsKKzwKKwl7TiAgICBQbGFjZSBvcGVuaW5nIGJyYWNlcyBOIGNoYXJhY3RlcnMgZnJvbSB0aGUgcHJldmFpbGluZyBpbmRlbnQuCisJICAgICAgVGhpcyBhcHBsaWVzIG9ubHkgZm9yIG9wZW5pbmcgYnJhY2VzIHRoYXQgYXJlIGluc2lkZSBvdGhlcgorCSAgICAgIGJyYWNlcy4gIChkZWZhdWx0IDApLgorCisJCWNpbm89CQkgICAgY2lubz17LjVzCQljaW5vPXsxcyA+CisJCSAgaWYgKGNvbmQpCSAgICAgIGlmIChjb25kKQkJICBpZiAoY29uZCkKKwkJICB7CQkJewkJICAgICAgeworCQkgICAgICBmb287CQkgIGZvbzsJCSAgICAgIGZvbzsKKzwKKwl9TiAgICBQbGFjZSBjbG9zaW5nIGJyYWNlcyBOIGNoYXJhY3RlcnMgZnJvbSB0aGUgbWF0Y2hpbmcgb3BlbmluZworCSAgICAgIGJyYWNlLiAgKGRlZmF1bHQgMCkuCisKKwkJY2lubz0JCSAgICBjaW5vPXsyLH0tMC41cwljaW5vPX0yID4KKwkJICBpZiAoY29uZCkJICAgICAgaWYgKGNvbmQpCQkgIGlmIChjb25kKQorCQkgIHsJCQl7CQkgIHsKKwkJICAgICAgZm9vOwkJICBmb287CQkgICAgICBmb287CisJCSAgfQkJICAgICAgfQkJCSAgICB9Cis8CisJXk4gICAgQWRkIE4gdG8gdGhlIHByZXZhaWxpbmcgaW5kZW50IGluc2lkZSBhIHNldCBvZiBicmFjZXMgaWYgdGhlCisJICAgICAgb3BlbmluZyBicmFjZSBpcyBpbiBjb2x1bW4gMC4gIFRoaXMgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQKKwkgICAgICBpbmRlbnQgZm9yIHdob2xlIG9mIGEgZnVuY3Rpb24gKHNvbWUgbWF5IGxpa2UgdG8gc2V0IGl0IHRvIGEKKwkgICAgICBuZWdhdGl2ZSBudW1iZXIpLiAgKGRlZmF1bHQgMCkuCisKKwkJY2lubz0JCSAgICBjaW5vPV4tMgkJY2lubz1eLXMgPgorCQkgIGZ1bmMoKQkgICAgICBmdW5jKCkJCSAgZnVuYygpCisJCSAgewkJICAgICAgewkJCSAgeworCQkgICAgICBpZiAoY29uZCkJCWlmIChjb25kKQkgIGlmIChjb25kKQorCQkgICAgICB7CQkJewkJICB7CisJCQkgIGEgPSBiOwkgICAgYSA9IGI7CSAgICAgIGEgPSBiOworCQkgICAgICB9CQkJfQkJICB9CisJCSAgfQkJICAgICAgfQkJCSAgfQorPAorCTpOICAgIFBsYWNlIGNhc2UgbGFiZWxzIE4gY2hhcmFjdGVycyBmcm9tIHRoZSBpbmRlbnQgb2YgdGhlIHN3aXRjaCgpLgorCSAgICAgIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCSAgICBjaW5vPTowID4KKwkJICBzd2l0Y2ggKHgpCSAgICAgIHN3aXRjaCh4KQorCQkgIHsJCSAgICAgIHsKKwkJICAgICAgY2FzZSAxOgkgICAgICBjYXNlIDE6CisJCQkgIGEgPSBiOwkgIGEgPSBiOworCQkgICAgICBkZWZhdWx0OgkgICAgICBkZWZhdWx0OgorCQkgIH0JCSAgICAgIH0KKzwKKwk9TiAgICBQbGFjZSBzdGF0ZW1lbnRzIG9jY3VycmluZyBhZnRlciBhIGNhc2UgbGFiZWwgTiBjaGFyYWN0ZXJzIGZyb20KKwkgICAgICB0aGUgaW5kZW50IG9mIHRoZSBsYWJlbC4gIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCSAgICBjaW5vPT0xMCA+CisJCSAgIGNhc2UgMTE6CQljYXNlIDExOiAgYSA9IGEgKyAxOworCQkgICAgICAgYSA9IGEgKyAxOwkJICBiID0gYiArIDE7Cis8CisJbE4gICAgSWYgTiAhPSAwIFZpbSB3aWxsIGFsaWduIHdpdGggYSBjYXNlIGxhYmVsIGluc3RlYWQgb2YgdGhlCisJICAgICAgc3RhdGVtZW50IGFmdGVyIGl0IGluIHRoZSBzYW1lIGxpbmUuCisKKwkJY2lubz0JCQkgICAgY2lubz1sMSA+CisJCSAgICBzd2l0Y2ggKGEpIHsJICAgICAgc3dpdGNoIChhKSB7CisJCQljYXNlIDE6IHsJCSAgY2FzZSAxOiB7CisJCQkJICAgIGJyZWFrOwkgICAgICBicmVhazsKKwkJCQl9CQkgIH0KKzwKKwliTiAgICBJZiBOICE9IDAgVmltIHdpbGwgYWxpZ24gYSBmaW5hbCAiYnJlYWsiIHdpdGggdGhlIGNhc2UgbGFiZWwsCisJICAgICAgc28gdGhhdCBjYXNlLi5icmVhayBsb29rcyBsaWtlIGEgc29ydCBvZiBibG9jay4gKGRlZmF1bHQ6IDApLgorCisJCWNpbm89CQkgICAgY2lubz1iMSA+CisJCSAgc3dpdGNoICh4KQkgICAgICBzd2l0Y2goeCkKKwkJICB7CQkgICAgICB7CisJCSAgICAgIGNhc2UgMToJCSAgY2FzZSAxOgorCQkJICBhID0gYjsJICAgICAgYSA9IGI7CisJCQkgIGJyZWFrOwkgIGJyZWFrOworCisJCSAgICAgIGRlZmF1bHQ6CQkgIGRlZmF1bHQ6CisJCQkgIGEgPSAwOwkgICAgICBhID0gMDsKKwkJCSAgYnJlYWs7CSAgYnJlYWs7CisJCSAgfQkJICAgICAgfQorPAorCWdOICAgIFBsYWNlIEMrKyBzY29wZSBkZWNsYXJhdGlvbnMgTiBjaGFyYWN0ZXJzIGZyb20gdGhlIGluZGVudCBvZiB0aGUKKwkgICAgICBibG9jayB0aGV5IGFyZSBpbi4gIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuICBBIHNjb3BlIGRlY2xhcmF0aW9uCisJICAgICAgY2FuIGJlICJwdWJsaWM6IiwgInByb3RlY3RlZDoiIG9yICJwcml2YXRlOiIuCisKKwkJY2lubz0JCSAgICBjaW5vPWcwID4KKwkJICB7CQkgICAgICB7CisJCSAgICAgIHB1YmxpYzoJICAgICAgcHVibGljOgorCQkJICBhID0gYjsJICBhID0gYjsKKwkJICAgICAgcHJpdmF0ZToJICAgICAgcHJpdmF0ZToKKwkJICB9CQkgICAgICB9Cis8CisJaE4gICAgUGxhY2Ugc3RhdGVtZW50cyBvY2N1cnJpbmcgYWZ0ZXIgYSBDKysgc2NvcGUgZGVjbGFyYXRpb24gTgorCSAgICAgIGNoYXJhY3RlcnMgZnJvbSB0aGUgaW5kZW50IG9mIHRoZSBsYWJlbC4gIChkZWZhdWx0CisJICAgICAgJ3NoaWZ0d2lkdGgnKS4KKworCQljaW5vPQkJICAgIGNpbm89aDEwID4KKwkJICAgcHVibGljOgkJcHVibGljOiAgIGEgPSBhICsgMTsKKwkJICAgICAgIGEgPSBhICsgMTsJCSAgYiA9IGIgKyAxOworPAorCXBOICAgIFBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIEsmUi1zdHlsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2lsbAorCSAgICAgIGJlIGluZGVudGVkIE4gY2hhcmFjdGVycyBmcm9tIHRoZSBtYXJnaW4uICAoZGVmYXVsdAorCSAgICAgICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCSAgICBjaW5vPXAwCQljaW5vPXAycyA+CisJCSAgZnVuYyhhLCBiKQkgICAgICBmdW5jKGEsIGIpCSAgZnVuYyhhLCBiKQorCQkgICAgICBpbnQgYTsJICAgICAgaW50IGE7CQkJICBpbnQgYTsKKwkJICAgICAgY2hhciBiOwkgICAgICBjaGFyIGI7CQkJICBjaGFyIGI7Cis8CisJdE4gICAgSW5kZW50IGEgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZGVjbGFyYXRpb24gTiBjaGFyYWN0ZXJzIGZyb20gdGhlCisJICAgICAgbWFyZ2luLiAgKGRlZmF1bHQgJ3NoaWZ0d2lkdGgnKS4KKworCQljaW5vPQkJICAgIGNpbm89dDAJCWNpbm89dDcgPgorCQkgICAgICBpbnQJICAgICAgaW50CQkJIGludAorCQkgIGZ1bmMoKQkgICAgICBmdW5jKCkJCSAgZnVuYygpCis8CisJaU4gICAgSW5kZW50IEMrKyBiYXNlIGNsYXNzIGRlY2xhcmF0aW9ucyBhbmQgY29udHJ1Y3RvcgorCSAgICAgIGluaXRpYWxpemF0aW9ucywgaWYgdGhleSBzdGFydCBpbiBhIG5ldyBsaW5lIChvdGhlcndpc2UgdGhleQorCSAgICAgIGFyZSBhbGlnbmVkIGF0IHRoZSByaWdodCBzaWRlIG9mIHRoZSAnOicpLgorCSAgICAgIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCQkgIGNpbm89aTAgPgorCQkgIGNsYXNzIE15Q2xhc3MgOgkgICAgY2xhc3MgTXlDbGFzcyA6CisJCSAgICAgIHB1YmxpYyBCYXNlQ2xhc3MgICAgICBwdWJsaWMgQmFzZUNsYXNzCisJCSAge30JCQkgICAge30KKwkJICBNeUNsYXNzOjpNeUNsYXNzKCkgOgkgICAgTXlDbGFzczo6TXlDbGFzcygpIDoKKwkJICAgICAgQmFzZUNsYXNzKDMpCSAgICBCYXNlQ2xhc3MoMykKKwkJICB7fQkJCSAgICB7fQorPAorCStOICAgIEluZGVudCBhIGNvbnRpbnVhdGlvbiBsaW5lIChhIGxpbmUgdGhhdCBzcGlsbHMgb250byB0aGUgbmV4dCkgTgorCSAgICAgIGFkZGl0aW9uYWwgY2hhcmFjdGVycy4gIChkZWZhdWx0ICdzaGlmdHdpZHRoJykuCisKKwkJY2lubz0JCQkgIGNpbm89KzEwID4KKwkJICBhID0gYiArIDkgKgkJICAgIGEgPSBiICsgOSAqCisJCSAgICAgIGM7CQkJICAgICAgYzsKKzwKKwljTiAgICBJbmRlbnQgY29tbWVudCBsaW5lcyBhZnRlciB0aGUgY29tbWVudCBvcGVuZXIsIHdoZW4gdGhlcmUgaXMgbm8KKwkgICAgICBvdGhlciB0ZXh0IHdpdGggd2hpY2ggdG8gYWxpZ24sIE4gY2hhcmFjdGVycyBmcm9tIHRoZSBjb21tZW50CisJICAgICAgb3BlbmVyLiAgKGRlZmF1bHQgMykuICBTZWUgYWxzbyB8Zm9ybWF0LWNvbW1lbnRzfC4KKworCQljaW5vPQkJCSAgY2lubz1jNSA+CisJCSAgLyoJCQkgICAgLyoKKwkJICAgICB0ZXh0LgkJCSB0ZXh0LgorCQkgICAqLwkJCSAgICAgKi8KKzwKKwlDTiAgICBXaGVuIE4gaXMgbm9uLXplcm8sIGluZGVudCBjb21tZW50IGxpbmVzIGJ5IHRoZSBhbW91bnQgc3BlY2lmaWVkCisJICAgICAgd2l0aCB0aGUgYyBmbGFnIGFib3ZlIGV2ZW4gaWYgdGhlcmUgaXMgb3RoZXIgdGV4dCBiZWhpbmQgdGhlCisJICAgICAgY29tbWVudCBvcGVuZXIuICAoZGVmYXVsdCAwKS4KKworCQljaW5vPWMwCQkJICBjaW5vPWMwLEMxID4KKwkJICAvKioqKioqKioJCSAgICAvKioqKioqKioKKwkJICAgIHRleHQuCQkgICAgdGV4dC4KKwkJICAqKioqKioqKi8JCSAgICAqKioqKioqKi8KKzwJICAgICAgKEV4YW1wbGUgdXNlcyAiOnNldCBjb21tZW50cyYgY29tbWVudHMtPXMxOi8qIGNvbW1lbnRzXj1zMDovKiIpCisKKwkvTiAgICBJbmRlbnQgY29tbWVudCBsaW5lcyBOIGNoYXJhY3RlcnMgZXh0cmEuIChkZWZhdWx0IDApLgorCQljaW5vPQkJCSAgY2lubz0vNCA+CisJCSAgYSA9IGI7CQkgICAgYSA9IGI7CisJCSAgLyogY29tbWVudCAqLwkJCS8qIGNvbW1lbnQgKi8KKwkJICBjID0gZDsJCSAgICBjID0gZDsKKzwKKwkoTiAgICBXaGVuIGluIHVuY2xvc2VkIHBhcmVudGhlc2VzLCBpbmRlbnQgTiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpbmUKKwkgICAgICB3aXRoIHRoZSB1bmNsb3NlZCBwYXJlbnRoZXNlcy4gIEFkZCBhICdzaGlmdHdpZHRoJyBmb3IgZXZlcnkKKwkgICAgICB1bmNsb3NlZCBwYXJlbnRoZXNlcy4gIFdoZW4gTiBpcyAwIG9yIHRoZSB1bmNsb3NlZCBwYXJlbnRoZXNlcworCSAgICAgIGlzIHRoZSBmaXJzdCBub24td2hpdGUgY2hhcmFjdGVyIGluIGl0cyBsaW5lLCBsaW5lIHVwIHdpdGggdGhlCisJICAgICAgbmV4dCBub24td2hpdGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB1bmNsb3NlZCBwYXJlbnRoZXNlcy4KKwkgICAgICAoZGVmYXVsdCAnc2hpZnR3aWR0aCcgKiAyKS4KKworCQljaW5vPQkJCSAgY2lubz0oMCA+CisJCSAgaWYgKGMxICYmIChjMiB8fAkgICAgaWYgKGMxICYmIChjMiB8fAorCQkJICAgICAgYzMpKQkJICAgICAgIGMzKSkKKwkJICAgICAgZm9vOwkJCWZvbzsKKwkJICBpZiAoYzEgJiYJCSAgICBpZiAoYzEgJiYKKwkJCSAgKGMyIHx8IGMzKSkJCShjMiB8fCBjMykpCisJCSAgICAgewkJCSAgICAgICB7Cis8CisJdU4gICAgU2FtZSBhcyAoTiwgYnV0IGZvciBvbmUgbGV2ZWwgZGVlcGVyLiAgKGRlZmF1bHQgJ3NoaWZ0d2lkdGgnKS4KKworCQljaW5vPQkJCSAgY2lubz11MiA+CisJCSAgaWYgKGMxMjM0NTY3ODkJICAgIGlmIChjMTIzNDU2Nzg5CisJCQkgICYmIChjMjIzNDUJCSAgICAmJiAoYzIyMzQ1CisJCQkgICAgICB8fCBjMykpCQkgICAgICB8fCBjMykpCis8CisJVU4gICAgV2hlbiBOIGlzIG5vbi16ZXJvLCBkbyBub3QgaWdub3JlIHRoZSBpbmRlbnRpbmcgc3BlY2lmaWVkIGJ5CisJICAgICAgKCBvciB1IGluIGNhc2UgdGhhdCB0aGUgdW5jbG9zZWQgcGFyZW50aGVzZXMgaXMgdGhlIGZpcnN0CisJICAgICAgbm9uLXdoaXRlIGNoYXJhY3RlciBpbiBpdHMgbGluZS4gIChkZWZhdWx0IDApLgorCisJCWNpbm89IG9yIGNpbm89KHMJICBjaW5vPShzLFUxID4KKwkJICBjID0gYzEgJiYJCSAgICBjID0gYzEgJiYKKwkJICAgICAgKAkJCQkoCisJCSAgICAgICBjMiB8fAkJCSAgICBjMiB8fAorCQkgICAgICAgYzMJCQkgICAgYzMKKwkJICAgICAgKSAmJiBjNDsJCQkpICYmIGM0OworPAorCXdOICAgIFdoZW4gaW4gdW5jbG9zZWQgcGFyZW50aGVzZXMgYW5kIE4gaXMgbm9uLXplcm8gYW5kIGVpdGhlcgorCSAgICAgIHVzaW5nICIoMCIgb3IgInUwIiwgcmVzcGVjdGl2ZWx5LCBvciB1c2luZyAiVTAiIGFuZCB0aGUgdW5jbG9zZWQKKwkgICAgICBwYXJlbnRoZXNlcyBpcyB0aGUgZmlyc3Qgbm9uLXdoaXRlIGNoYXJhY3RlciBpbiBpdHMgbGluZSwgbGluZQorCSAgICAgIHVwIHdpdGggdGhlIGNoYXJhY3RlciBpbW1lZGlhdGVseSBhZnRlciB0aGUgdW5jbG9zZWQgcGFyZW50aGVzZXMKKwkgICAgICByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgbm9uLXdoaXRlIGNoYXJhY3Rlci4gIChkZWZhdWx0IDApLgorCisJCWNpbm89KDAJCQkgIGNpbm89KDAsdzEgPgorCQkgIGlmICggICBjMQkJICAgIGlmICggICBjMQorCQkJICYmICggICBjMgkJJiYgKCAgIGMyCisJCQkJfHwgYzMpKQkJICAgIHx8IGMzKSkKKwkJICAgICAgZm9vOwkJCWZvbzsKKzwKKwlXTiAgICBXaGVuIGluIHVuY2xvc2VkIHBhcmVudGhlc2VzIGFuZCBOIGlzIG5vbi16ZXJvIGFuZCBlaXRoZXIKKwkgICAgICB1c2luZyAiKDAiIG9yICJ1MCIsIHJlc3BlY3RpdmVseSBhbmQgdGhlIHVuY2xvc2VkIHBhcmVudGhlc2VzIGlzCisJICAgICAgdGhlIGxhc3Qgbm9uLXdoaXRlIGNoYXJhY3RlciBpbiBpdHMgbGluZSBhbmQgaXQgaXMgbm90IHRoZQorCSAgICAgIGNsb3NpbmcgcGFyZW50aGVzZXMsIGluZGVudCB0aGUgZm9sbG93aW5nIGxpbmUgTiBjaGFyYWN0ZXJzCisJICAgICAgcmVsYXRpdmUgdG8gdGhlIG91dGVyIGNvbnRleHQgKGkuZS4gc3RhcnQgb2YgdGhlIGxpbmUgb3IgdGhlCisJICAgICAgbmV4dCB1bmNsb3NlZCBwYXJlbnRoZXNlcykuIChkZWZhdWx0OiAwKS4KKworCQljaW5vPSgwCQkJICAgY2lubz0oMCxXNCA+CisJCSAgYV9sb25nX2xpbmUoCQkgICAgYV9sb25nX2xpbmUoCisJCQkgICAgICBhcmd1bWVudCwJCWFyZ3VtZW50LAorCQkJICAgICAgYXJndW1lbnQpOwlhcmd1bWVudCk7CisJCSAgYV9zaG9ydF9saW5lKGFyZ3VtZW50LCAgICBhX3Nob3J0X2xpbmUoYXJndW1lbnQsCisJCQkgICAgICAgYXJndW1lbnQpOwkJIGFyZ3VtZW50KTsKKzwKKwltTiAgICBXaGVuIE4gaXMgbm9uLXplcm8sIGxpbmUgdXAgYSBsaW5lIHN0YXJ0aW5nIHdpdGggYSBjbG9zaW5nCisJICAgICAgcGFyZW50aGVzZXMgd2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lIHdpdGggdGhlCisJICAgICAgbWF0Y2hpbmcgb3BlbmluZyBwYXJlbnRoZXNlcy4gIChkZWZhdWx0IDApLgorCisJCWNpbm89KHMJCQkgIGNpbm89KHMsbTEgPgorCQkgIGMgPSBjMSAmJiAoCQkgICAgYyA9IGMxICYmICgKKwkJICAgICAgYzIgfHwJCQljMiB8fAorCQkgICAgICBjMwkJCWMzCisJCSAgICAgICkgJiYgYzQ7CQkgICAgKSAmJiBjNDsKKwkJICBpZiAoCQkJICAgIGlmICgKKwkJICAgICAgYzEgJiYgYzIJCQljMSAmJiBjMgorCQkgICAgICkJCQkgICAgKQorCQkgICAgICBmb287CQkJZm9vOworPAorCQkJCQkqamF2YS1jaW5vcHRpb25zKiAqamF2YS1pbmRlbnRpbmcqCisJak4gICAgSW5kZW50IGphdmEgYW5vbnltb3VzIGNsYXNzZXMgY29ycmVjdGx5LiAgVGhlIHZhbHVlICdOJyBpcworCSAgICAgIGN1cnJlbnRseSB1bnVzZWQgYnV0IG11c3QgYmUgbm9uLXplcm8gKGUuZy4gJ2oxJykuICdqMScgd2lsbAorCSAgICAgIGluZGVudCBmb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBjb3JyZWN0bHk6ID4KKworCQlvYmplY3QuYWRkKG5ldyBDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJICAgIHB1YmxpYyB2b2lkIHN0YXRlQ2hhbmdlZChDaGFuZ2VFdmVudCBlKSB7CisJCQlkb19zb21ldGhpbmcoKTsKKwkJICAgIH0KKwkJfSk7Cis8CisJKU4gICAgVmltIHNlYXJjaGVzIGZvciB1bmNsb3NlZCBwYXJlbnRoZXNlcyBhdCBtb3N0IE4gbGluZXMgYXdheS4KKwkgICAgICBUaGlzIGxpbWl0cyB0aGUgdGltZSBuZWVkZWQgdG8gc2VhcmNoIGZvciBwYXJlbnRoZXNlcy4gIChkZWZhdWx0CisJICAgICAgMjAgbGluZXMpLgorCisJKk4gICAgVmltIHNlYXJjaGVzIGZvciB1bmNsb3NlZCBjb21tZW50cyBhdCBtb3N0IE4gbGluZXMgYXdheS4gIFRoaXMKKwkgICAgICBsaW1pdHMgdGhlIHRpbWUgbmVlZGVkIHRvIHNlYXJjaCBmb3IgdGhlIHN0YXJ0IG9mIGEgY29tbWVudC4KKwkgICAgICAoZGVmYXVsdCAzMCBsaW5lcykuCisKKworVGhlIGRlZmF1bHRzLCBzcGVsbGVkIG91dCBpbiBmdWxsLCBhcmU6CisJY2lub3B0aW9ucz0+cyxlMCxuMCxmMCx7MCx9MCxeMCw6cyw9cyxsMCxncyxocyxwcyx0cywrcyxjMyxDMCwoMnMsdXMsCisJCSAgIFxVMCx3MCxtMCxqMCwpMjAsKjMwCisKK1ZpbSBwdXRzIGEgbGluZSBpbiBjb2x1bW4gMSBpZjoKKy0gSXQgc3RhcnRzIHdpdGggJyMnIChwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyksIGlmICdjaW5rZXlzJyBjb250YWlucyAnIycuCistIEl0IHN0YXJ0cyB3aXRoIGEgbGFiZWwgKGEga2V5d29yZCBmb2xsb3dlZCBieSAnOicsIG90aGVyIHRoYW4gImNhc2UiIGFuZAorICAiZGVmYXVsdCIpLgorLSBBbnkgY29tYmluYXRpb24gb2YgaW5kZW50YXRpb25zIGNhdXNlcyB0aGUgbGluZSB0byBoYXZlIGxlc3MgdGhhbiAwCisgIGluZGVudGF0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEluZGVudGluZyBieSBleHByZXNzaW9uCQkJCSppbmRlbnQtZXhwcmVzc2lvbioKKworVGhlIGJhc2ljcyBmb3IgdXNpbmcgZmxleGlibGUgaW5kZW50aW5nIGFyZSBleHBsYWluZWQgaW4gc2VjdGlvbiB8MzAuM3wgb2YgdGhlCit1c2VyIG1hbnVhbC4KKworSWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24gaW5kZW50IGZpbGUsIGl0IG11c3Qgc2V0IHRoZSAnaW5kZW50ZXhwcicKK29wdGlvbi4gIFNldHRpbmcgdGhlICdpbmRlbnRrZXlzJyBvcHRpb24gaXMgb2Z0ZW4gdXNlZnVsLiAgU2VlIHRoZQorJFZJTVJVTlRJTUUvaW5kZW50IGRpcmVjdG9yeSBmb3IgZXhhbXBsZXMuCisKKworUkVNQVJLUyBBQk9VVCBTUEVDSUZJQyBJTkRFTlQgRklMRVMgfgorCisKK0ZPUlRSQU4JCQkJCQkJKmZvcnRyYW4taW5kZW50KgorCitCbG9jayBpZiwgc2VsZWN0IGNhc2UsIGFuZCB3aGVyZSBjb25zdHJ1Y3RzIGFyZSBpbmRlbnRlZC4gQ29tbWVudHMsIGxhYmVsbGVkCitzdGF0ZW1lbnRzIGFuZCBjb250aW51YXRpb24gbGluZXMgYXJlIGluZGVudGVkIGlmIHRoZSBGb3J0cmFuIGlzIGluIGZyZWUKK3NvdXJjZSBmb3JtLCB3aGVyZWFzIHRoZXkgYXJlIG5vdCBpbmRlbnRlZCBpZiB0aGUgRm9ydHJhbiBpcyBpbiBmaXhlZCBzb3VyY2UKK2Zvcm0gYmVjYXVzZSBvZiB0aGUgbGVmdCBtYXJnaW4gcmVxdWlyZW1lbnRzLiBIZW5jZSBtYW51YWwgaW5kZW50IGNvcnJlY3Rpb25zCit3aWxsIGJlIG5lY2Vzc2FyeSBmb3IgbGFiZWxsZWQgc3RhdGVtZW50cyBhbmQgY29udGludWF0aW9uIGxpbmVzIHdoZW4gZml4ZWQKK3NvdXJjZSBmb3JtIGlzIGJlaW5nIHVzZWQuIEZvciBmdXJ0aGVyIGRpc2N1c3Npb24gb2YgdGhlIG1ldGhvZCB1c2VkIGZvciB0aGUKK2RldGVjdGlvbiBvZiBzb3VyY2UgZm9ybWF0IHNlZSB8Zm9ydHJhbi1zeW50YXh8LgorCitEbyBsb29wcyB+CitBbGwgZG8gbG9vcHMgYXJlIGxlZnQgdW5pbmRlbnRlZCBieSBkZWZhdWx0LiBEbyBsb29wcyBjYW4gYmUgdW5zdHJ1Y3R1cmVkIGluCitGb3J0cmFuIHdpdGggKHBvc3NpYmx5IG11bHRpcGxlKSBsb29wcyBlbmRpbmcgb24gYSBsYWJlbGxlZCBleGVjdXRhYmxlCitzdGF0ZW1lbnQgb2YgYWxtb3N0IGFyYml0cmFyeSB0eXBlLiBDb3JyZWN0IGluZGVudGF0aW9uIHJlcXVpcmVzCitjb21waWxlci1xdWFsaXR5IHBhcnNpbmcuIE9sZCBjb2RlIHdpdGggZG8gbG9vcHMgZW5kaW5nIG9uIGxhYmVsbGVkIHN0YXRlbWVudHMKK29mIGFyYml0cmFyeSB0eXBlIGNhbiBiZSBpbmRlbnRlZCB3aXRoIGVsYWJvcmF0ZSBwcm9ncmFtcyBzdWNoIGFzIFRpZHkKKyhodHRwOi8vd3d3LnVuYi5jYS9jaGVtL2FqaXQvZl90aWR5Lmh0bSkuIFN0cnVjdHVyZWQgZG8vY29udGludWUgbG9vcHMgYXJlCithbHNvIGxlZnQgdW5pbmRlbnRlZCBiZWNhdXNlIGNvbnRpbnVlIHN0YXRlbWVudHMgYXJlIGFsc28gdXNlZCBmb3IgcHVycG9zZXMKK290aGVyIHRoYW4gZW5kaW5nIGEgZG8gbG9vcC4gUHJvZ3JhbXMgc3VjaCBhcyBUaWR5IGNhbiBjb252ZXJ0IHN0cnVjdHVyZWQKK2RvL2NvbnRpbnVlIGxvb3BzIHRvIHRoZSBkby9lbmRkbyBmb3JtLiBEbyBsb29wcyBvZiB0aGUgZG8vZW5kZG8gdmFyaWV0eSBjYW4KK2JlIGluZGVudGVkLiBJZiB5b3UgdXNlIG9ubHkgc3RydWN0dXJlZCBsb29wcyBvZiB0aGUgZG8vZW5kZG8gZm9ybSwgeW91IHNob3VsZAorZGVjbGFyZSB0aGlzIGJ5IHNldHRpbmcgdGhlIGZvcnRyYW5fZG9fZW5kZG8gdmFyaWFibGUgaW4geW91ciAudmltcmMgYXMKK2ZvbGxvd3MgPgorCisgICBsZXQgZm9ydHJhbl9kb19lbmRkbz0xCisKK2luIHdoaWNoIGNhc2UgZG8gbG9vcHMgd2lsbCBiZSBpbmRlbnRlZC4gSWYgYWxsIHlvdXIgbG9vcHMgYXJlIG9mIGRvL2VuZGRvCit0eXBlIG9ubHkgaW4sIHNheSwgLmY5MCBmaWxlcywgdGhlbiB5b3Ugc2hvdWxkIHNldCBhIGJ1ZmZlciBmbGFnIHdpdGggYW4KK2F1dG9jb21tYW5kIHN1Y2ggYXMgPgorCisgIGF1ISBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5mOTAgbGV0IGI6Zm9ydHJhbl9kb19lbmRkbz0xCisKK3RvIGdldCBkbyBsb29wcyBpbmRlbnRlZCBpbiAuZjkwIGZpbGVzIGFuZCBsZWZ0IGFsb25lIGluIEZvcnRyYW4gZmlsZXMgd2l0aAorb3RoZXIgZXh0ZW5zaW9ucyBzdWNoIGFzIC5mb3IuCisKKworVkVSSUxPRwkJCQkJCQkqdmVyaWxvZy1pbmRlbnQqCisKK0dlbmVyYWwgYmxvY2sgc3RhdGVtZW50cyBzdWNoIGFzIGlmLCBmb3IsIGNhc2UsIGFsd2F5cywgaW5pdGlhbCwgZnVuY3Rpb24sCitzcGVjaWZ5IGFuZCBiZWdpbiwgZXRjLiwgYXJlIGluZGVudGVkLiAgVGhlIG1vZHVsZSBibG9jayBzdGF0ZW1lbnRzIChmaXJzdAorbGV2ZWwgYmxvY2tzKSBhcmUgbm90IGluZGVudGVkIGJ5IGRlZmF1bHQuICB5b3UgY2FuIHR1cm4gb24gdGhlIGluZGVudCB3aXRoCitzZXR0aW5nIGEgdmFyaWFibGUgaW4gdGhlIC52aW1yYyBhcyBmb2xsb3dzOiA+CisKKyAgbGV0IGI6dmVyaWxvZ19pbmRlbnRfbW9kdWxlcyA9IDEKKwordGhlbiB0aGUgbW9kdWxlIGJsb2NrcyB3aWxsIGJlIGluZGVudGVkLiAgVG8gc3RvcCB0aGlzLCByZW1vdmUgdGhlIHZhcmlhYmxlOiA+CisKKyAgOnVubGV0IGI6dmVyaWxvZ19pbmRlbnRfbW9kdWxlcworCitUbyBzZXQgdGhlIHZhcmlhYmxlIG9ubHkgZm9yIFZlcmlsb2cgZmlsZS4gIFRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyBjYW4gYmUKK3VzZWQ6ID4KKworICBhdSBCdWZSZWFkUG9zdCAqIGlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIGF1IEJ1ZlJlYWRQb3N0ICogICBpZiBiOmN1cnJlbnRfc3ludGF4ID09ICJ2ZXJpbG9nIgorICBhdSBCdWZSZWFkUG9zdCAqICAgICBsZXQgYjp2ZXJpbG9nX2luZGVudF9tb2R1bGVzID0gMQorICBhdSBCdWZSZWFkUG9zdCAqICAgZW5kaWYKKyAgYXUgQnVmUmVhZFBvc3QgKiBlbmRpZgorCitGdXJ0aGVybW9yZSwgc2V0dGluZyB0aGUgdmFyaWFibGUgYjp2ZXJpbG9nX2luZGVudF93aWR0aCB0byBjaGFuZ2UgdGhlCitpbmRlbnRpbmcgd2lkdGggKGRlZmF1bHQgaXMgJ3NoaWZ0d2lkdGgnKTogPgorCisgIGxldCBiOnZlcmlsb2dfaW5kZW50X3dpZHRoID0gNAorICBsZXQgYjp2ZXJpbG9nX2luZGVudF93aWR0aCA9ICZzdyAqIDIKKworSW4gYWRkaXRpb24sIHlvdSBjYW4gdHVybiB0aGUgdmVyYm9zZSBtb2RlIGZvciBkZWJ1ZyBpc3N1ZTogPgorCisgIGxldCBiOnZlcmlsb2dfaW5kZW50X3ZlcmJvc2UgPSAxCisKK01ha2Ugc3VyZSB0byBkbyAiOnNldCBjbWRoZWlnaHQ9MiIgZmlyc3QgdG8gYWxsb3cgdGhlIGRpc3BsYXkgb2YgdGhlIG1lc3NhZ2UuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9pbmRleC50eHQgYi9ydW50aW1lL2RvYy9pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxZTViYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL2luZGV4LnR4dApAQCAtMCwwICsxLDE0MjMgQEAKKyppbmRleC50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMjQKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCQkJCQkJCQkqaW5kZXgqCitUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIGFsbCBjb21tYW5kcyBmb3IgZWFjaCBtb2RlLCB3aXRoIGEgdGFnIGFuZCBhCitzaG9ydCBkZXNjcmlwdGlvbi4gIFRoZSBsaXN0cyBhcmUgc29ydGVkIG9uIEFTQ0lJIHZhbHVlLgorCitUaXA6IFdoZW4gbG9va2luZyBmb3IgY2VydGFpbiBmdW5jdGlvbmFsaXR5LCB1c2UgYSBzZWFyY2ggY29tbWFuZC4gIEUuZy4sCit0byBsb29rIGZvciBkZWxldGluZyBzb21ldGhpbmcsIHVzZTogIi9kZWxldGUiLgorCisxLiBJbnNlcnQgbW9kZQkJCQl8aW5zZXJ0LWluZGV4fAorMi4gTm9ybWFsIG1vZGUJCQkJfG5vcm1hbC1pbmRleHwKKyAgIDIuMS4gVGV4dCBvYmplY3RzCQkJfG9iamVjdHN8CisgICAyLjIuIFdpbmRvdyBjb21tYW5kcwkJCXxDVFJMLVd8CisgICAyLjMuIFNxdWFyZSBicmFja2V0IGNvbW1hbmRzCQl8W3wKKyAgIDIuNC4gQ29tbWFuZHMgc3RhcnRpbmcgd2l0aCAnZycJfGd8CisgICAyLjUuIENvbW1hbmRzIHN0YXJ0aW5nIHdpdGggJ3onCXx6fAorMy4gVmlzdWFsIG1vZGUJCQkJfHZpc3VhbC1pbmRleHwKKzQuIENvbW1hbmQtbGluZSBlZGl0aW5nCQkJfGV4LWVkaXQtaW5kZXh8Cis1LiBFWCBjb21tYW5kcwkJCQl8ZXgtY21kLWluZGV4fAorCitGb3IgYW4gb3ZlcnZpZXcgb2Ygb3B0aW9ucyBzZWUgaGVscC50eHQgfG9wdGlvbi1saXN0fC4KK0ZvciBhbiBvdmVydmlldyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgc2VlIHxmdW5jdGlvbnN8LgorRm9yIGEgbGlzdCBvZiBWaW0gdmFyaWFibGVzIHNlZSB8dmltLXZhcmlhYmxlfC4KK0ZvciBhIGNvbXBsZXRlIGxpc3Rpbmcgb2YgYWxsIGhlbHAgaXRlbXMgc2VlIHxoZWxwLXRhZ3N8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEluc2VydCBtb2RlCQkJCQkJKmluc2VydC1pbmRleCoKKwordGFnCQljaGFyCQlhY3Rpb24JfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3xpX0NUUkwtQHwJQ1RSTC1ACQlpbnNlcnQgcHJldmlvdXNseSBpbnNlcnRlZCB0ZXh0IGFuZCBzdG9wCisJCQkJaW5zZXJ0Cit8aV9DVFJMLUF8CUNUUkwtQQkJaW5zZXJ0IHByZXZpb3VzbHkgaW5zZXJ0ZWQgdGV4dAorCQlDVFJMLUIJCW5vdCB1c2VkIHxpX0NUUkwtQi1nb25lfAorfGlfQ1RSTC1DfAlDVFJMLUMJCXF1aXQgaW5zZXJ0IG1vZGUsIHdpdGhvdXQgY2hlY2tpbmcgZm9yCisJCQkJYWJicmV2aWF0aW9uLCB1bmxlc3MgJ2luc2VydG1vZGUnIHNldC4KK3xpX0NUUkwtRHwJQ1RSTC1ECQlkZWxldGUgb25lIHNoaWZ0d2lkdGggb2YgaW5kZW50IGluIHRoZSBjdXJyZW50CisJCQkJbGluZQorfGlfQ1RSTC1FfAlDVFJMLUUJCWluc2VydCB0aGUgY2hhcmFjdGVyIHdoaWNoIGlzIGJlbG93IHRoZSBjdXJzb3IKKwkJQ1RSTC1GCQlub3QgdXNlZCAoYnV0IGJ5IGRlZmF1bHQgaXQncyBpbiAnY2lua2V5cycgdG8KKwkJCQlyZS1pbmRlbnQgdGhlIGN1cnJlbnQgbGluZSkKK3xpX0NUUkwtR19qfAlDVFJMLUcgQ1RSTC1KCWxpbmUgZG93biwgdG8gY29sdW1uIHdoZXJlIGluc2VydGluZyBzdGFydGVkCit8aV9DVFJMLUdfanwJQ1RSTC1HIGoJbGluZSBkb3duLCB0byBjb2x1bW4gd2hlcmUgaW5zZXJ0aW5nIHN0YXJ0ZWQKK3xpX0NUUkwtR19qfAlDVFJMLUcgPERvd24+CWxpbmUgZG93biwgdG8gY29sdW1uIHdoZXJlIGluc2VydGluZyBzdGFydGVkCit8aV9DVFJMLUdfa3wJQ1RSTC1HIENUUkwtSwlsaW5lIHVwLCB0byBjb2x1bW4gd2hlcmUgaW5zZXJ0aW5nIHN0YXJ0ZWQKK3xpX0NUUkwtR19rfAlDVFJMLUcgawlsaW5lIHVwLCB0byBjb2x1bW4gd2hlcmUgaW5zZXJ0aW5nIHN0YXJ0ZWQKK3xpX0NUUkwtR19rfAlDVFJMLUcgPFVwPglsaW5lIHVwLCB0byBjb2x1bW4gd2hlcmUgaW5zZXJ0aW5nIHN0YXJ0ZWQKK3xpX0NUUkwtR191fAlDVFJMLUcgdQlzdGFydCBuZXcgdW5kb2FibGUgZWRpdAorfGlfPEJTPnwJPEJTPgkJZGVsZXRlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvcgorfGlfZGlncmFwaHwJe2NoYXIxfTxCUz57Y2hhcjJ9CisJCQkJZW50ZXIgZGlncmFwaCAob25seSB3aGVuICdkaWdyYXBoJyBvcHRpb24gc2V0KQorfGlfQ1RSTC1IfAlDVFJMLUgJCXNhbWUgYXMgPEJTPgorfGlfPFRhYj58CTxUYWI+CQlpbnNlcnQgYSA8VGFiPiBjaGFyYWN0ZXIKK3xpX0NUUkwtSXwJQ1RSTC1JCQlzYW1lIGFzIDxUYWI+Cit8aV88Tkw+fAk8Tkw+CQlzYW1lIGFzIDxDUj4KK3xpX0NUUkwtSnwJQ1RSTC1KCQlzYW1lIGFzIDxDUj4KK3xpX0NUUkwtS3wJQ1RSTC1LIHtjaGFyMX0ge2NoYXIyfQorCQkJCWVudGVyIGRpZ3JhcGgKK3xpX0NUUkwtTHwJQ1RSTC1MCQl3aGVuICdpbnNlcnRtb2RlJyBzZXQ6IExlYXZlIEluc2VydCBtb2RlCit8aV88Q1I+fAk8Q1I+CQliZWdpbiBuZXcgbGluZQorfGlfQ1RSTC1NfAlDVFJMLU0JCXNhbWUgYXMgPENSPgorfGlfQ1RSTC1OfAlDVFJMLU4JCWZpbmQgbmV4dCBtYXRjaCBmb3Iga2V5d29yZCBpbiBmcm9udCBvZiB0aGUKKwkJCQljdXJzb3IKK3xpX0NUUkwtT3wJQ1RSTC1PCQlleGVjdXRlIGEgc2luZ2xlIGNvbW1hbmQgYW5kIHJldHVybiB0byBpbnNlcnQKKwkJCQltb2RlCit8aV9DVFJMLVB8CUNUUkwtUAkJZmluZCBwcmV2aW91cyBtYXRjaCBmb3Iga2V5d29yZCBpbiBmcm9udCBvZgorCQkJCXRoZSBjdXJzb3IKK3xpX0NUUkwtUXwJQ1RSTC1RCQlzYW1lIGFzIENUUkwtViwgdW5sZXNzIHVzZWQgZm9yIHRlcm1pbmFsCisJCQkJY29udHJvbCBmbG93Cit8aV9DVFJMLVJ8CUNUUkwtUiB7MC05YS16IiUjKjo9fQorCQkJCWluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlcgorfGlfQ1RSTC1SX0NUUkwtUnwgQ1RSTC1SIENUUkwtUiB7MC05YS16IiUjKjo9fQorCQkJCWluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciBsaXRlcmFsbHkKK3xpX0NUUkwtUl9DVFJMLU98IENUUkwtUiBDVFJMLU8gezAtOWEteiIlIyo6PX0KKwkJCQlpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgbGl0ZXJhbGx5CisJCQkJYW5kIGRvbid0IGF1dG8taW5kZW50Cit8aV9DVFJMLVJfQ1RSTC1QfCBDVFJMLVIgQ1RSTC1QIHswLTlhLXoiJSMqOj19CisJCQkJaW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGxpdGVyYWxseQorCQkJCWFuZCBmaXggaW5kZW50LgorCQlDVFJMLVMJCSh1c2VkIGZvciB0ZXJtaW5hbCBjb250cm9sIGZsb3cpCit8aV9DVFJMLVR8CUNUUkwtVAkJaW5zZXJ0IG9uZSBzaGlmdHdpZHRoIG9mIGluZGVudCBpbiBjdXJyZW50CisJCQkJbGluZQorfGlfQ1RSTC1VfAlDVFJMLVUJCWRlbGV0ZSBhbGwgZW50ZXJlZCBjaGFyYWN0ZXJzIGluIHRoZSBjdXJyZW50CisJCQkJbGluZQorfGlfQ1RSTC1WfAlDVFJMLVYge2NoYXJ9CWluc2VydCBuZXh0IG5vbi1kaWdpdCBsaXRlcmFsbHkKK3xpX0NUUkwtVl9kaWdpdHwgQ1RSTC1WIHtudW1iZXJ9IGluc2VydCB0aHJlZSBkaWdpdCBkZWNpbWFsIG51bWJlciBhcyBhIHNpbmdsZQorCQkJCWJ5dGUuCit8aV9DVFJMLVd8CUNUUkwtVwkJZGVsZXRlIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IKK3xpX0NUUkwtWHwJQ1RSTC1YIHttb2RlfQllbnRlciBDVFJMLVggc3ViIG1vZGUsIHNlZSBiZWxvdworfGlfQ1RSTC1ZfAlDVFJMLVkJCWluc2VydCB0aGUgY2hhcmFjdGVyIHdoaWNoIGlzIGFib3ZlIHRoZSBjdXJzb3IKK3xpX0NUUkwtWnwJQ1RSTC1aCQl3aGVuICdpbnNlcnRtb2RlJyBzZXQ6IHN1c3BlbmQgVmltCit8aV88RXNjPnwJPEVzYz4JCWVuZCBpbnNlcnQgbW9kZSAodW5sZXNzICdpbnNlcnRtb2RlJyBzZXQpCit8aV9DVFJMLVt8CUNUUkwtWwkJc2FtZSBhcyA8RXNjPgorfGlfQ1RSTC1cX0NUUkwtTnwgQ1RSTC1cIENUUkwtTgkgZ28gdG8gTm9ybWFsIG1vZGUKK3xpX0NUUkwtXF9DVFJMLUd8IENUUkwtXCBDVFJMLUcJIGdvIHRvIG1vZGUgc3BlY2lmaWVkIHdpdGggJ2luc2VydG1vZGUnCisJCUNUUkwtXCBhIC0geglyZXNlcnZlZCBmb3IgZXh0ZW5zaW9ucworCQlDVFJMLVwgb3RoZXJzCW5vdCB1c2VkCit8aV9DVFJMLV18CUNUUkwtXQkJdHJpZ2dlciBhYmJyZXZpYXRpb24KK3xpX0NUUkwtXnwJQ1RSTC1eCQl0b2dnbGUgdXNlIG9mIHw6bG1hcHwgbWFwcGluZ3MKK3xpX0NUUkwtX3wJQ1RSTC1fCQlXaGVuICdhbGxvd3Jldmlucycgc2V0OiBjaGFuZ2UgbGFuZ3VhZ2UKKwkJCQkoSGVicmV3LCBGYXJzaSkge29ubHkgd2hlbiBjb21waWxlZCB3aXRoCisJCQkJK3JpZ2h0bGVmdCBmZWF0dXJlfQorCisJCTxTcGFjZT4gdG8gJ34nCW5vdCB1c2VkLCBleGNlcHQgJzAnIGFuZCAnXicgZm9sbG93ZWQgYnkKKwkJCQlDVFJMLUQKKworfGlfMF9DVFJMLUR8CTAgQ1RSTC1ECWRlbGV0ZSBhbGwgaW5kZW50IGluIHRoZSBjdXJyZW50IGxpbmUKK3xpX15fQ1RSTC1EfAleIENUUkwtRAlkZWxldGUgYWxsIGluZGVudCBpbiB0aGUgY3VycmVudCBsaW5lLCByZXN0b3JlCisJCQkJaXQgaW4gdGhlIG5leHQgbGluZQorCit8aV88RGVsPnwJPERlbD4JCWRlbGV0ZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcgorCisJCU1ldGEgY2hhcmFjdGVycyAoMHg4MCB0byAweGZmLCAxMjggdG8gMjU1KQorCQkJCW5vdCB1c2VkCisKK3xpXzxMZWZ0PnwJPExlZnQ+CQljdXJzb3Igb25lIGNoYXJhY3RlciBsZWZ0Cit8aV88Uy1MZWZ0PnwJPFMtTGVmdD4JY3Vyc29yIG9uZSB3b3JkIGxlZnQKK3xpXzxDLUxlZnQ+fAk8Qy1MZWZ0PgljdXJzb3Igb25lIHdvcmQgbGVmdAorfGlfPFJpZ2h0PnwJPFJpZ2h0PgkJY3Vyc29yIG9uZSBjaGFyYWN0ZXIgcmlnaHQKK3xpXzxTLVJpZ2h0PnwJPFMtUmlnaHQ+CWN1cnNvciBvbmUgd29yZCByaWdodAorfGlfPEMtUmlnaHQ+fAk8Qy1SaWdodD4JY3Vyc29yIG9uZSB3b3JkIHJpZ2h0Cit8aV88VXA+fAk8VXA+CQljdXJzb3Igb25lIGxpbmUgdXAKK3xpXzxTLVVwPnwJPFMtVXA+CQlzYW1lIGFzIDxQYWdlVXA+Cit8aV88RG93bj58CTxEb3duPgkJY3Vyc29yIG9uZSBsaW5lIGRvd24KK3xpXzxTLURvd24+fAk8Uy1Eb3duPglzYW1lIGFzIDxQYWdlRG93bj4KK3xpXzxIb21lPnwJPEhvbWU+CQljdXJzb3IgdG8gc3RhcnQgb2YgbGluZQorfGlfPEMtSG9tZT58CTxDLUhvbWU+CWN1cnNvciB0byBzdGFydCBvZiBmaWxlCit8aV88RW5kPnwJPEVuZD4JCWN1cnNvciBwYXN0IGVuZCBvZiBsaW5lCit8aV88Qy1FbmQ+fAk8Qy1FbmQ+CQljdXJzb3IgcGFzdCBlbmQgb2YgZmlsZQorfGlfPFBhZ2VVcD58CTxQYWdlVXA+CW9uZSBzY3JlZW5mdWxsIGJhY2t3YXJkCit8aV88UGFnZURvd24+fAk8UGFnZURvd24+CW9uZSBzY3JlZW5mdWxsIGZvcndhcmQKK3xpXzxGMT58CTxGMT4JCXNhbWUgYXMgPEhlbHA+Cit8aV88SGVscD58CTxIZWxwPgkJc3RvcCBpbnNlcnQgbW9kZSBhbmQgZGlzcGxheSBoZWxwIHdpbmRvdworfGlfPEluc2VydD58CTxJbnNlcnQ+CXRvZ2dsZSBJbnNlcnQvUmVwbGFjZSBtb2RlCit8aV88TGVmdE1vdXNlPnwJPExlZnRNb3VzZT4JY3Vyc29yIGF0IG1vdXNlIGNsaWNrCit8aV88TW91c2VEb3duPnwJPE1vdXNlRG93bj4Jc2Nyb2xsIHRocmVlIGxpbmVzIGRvd253YXJkcworfGlfPFMtTW91c2VEb3duPnwgPFMtTW91c2VEb3duPglzY3JvbGwgYSBmdWxsIHBhZ2UgZG93bndhcmRzCit8aV88TW91c2VVcD58CTxNb3VzZVVwPglzY3JvbGwgdGhyZWUgbGluZXMgdXB3YXJkcworfGlfPFMtTW91c2VVcD58CTxTLU1vdXNlVXA+CXNjcm9sbCBhIGZ1bGwgcGFnZSB1cHdhcmRzCisKK2NvbW1hbmRzIGluIENUUkwtWCBzdWJtb2RlCisKK3xpX0NUUkwtWF9DVFJMLUR8CUNUUkwtWCBDVFJMLUQJY29tcGxldGUgZGVmaW5lZCBpZGVudGlmaWVycworfGlfQ1RSTC1YX0NUUkwtRXwJQ1RSTC1YIENUUkwtRQlzY3JvbGwgdXAKK3xpX0NUUkwtWF9DVFJMLUZ8CUNUUkwtWCBDVFJMLUYJY29tcGxldGUgZmlsZSBuYW1lcworfGlfQ1RSTC1YX0NUUkwtSXwJQ1RSTC1YIENUUkwtSQljb21wbGV0ZSBpZGVudGlmaWVycworfGlfQ1RSTC1YX0NUUkwtS3wJQ1RSTC1YIENUUkwtSwljb21wbGV0ZSBpZGVudGlmaWVycyBmcm9tIGRpY3Rpb25hcnkKK3xpX0NUUkwtWF9DVFJMLUx8CUNUUkwtWCBDVFJMLUwJY29tcGxldGUgd2hvbGUgbGluZXMKK3xpX0NUUkwtWF9DVFJMLU58CUNUUkwtWCBDVFJMLU4JbmV4dCBjb21wbGV0aW9uCit8aV9DVFJMLVhfQ1RSTC1QfAlDVFJMLVggQ1RSTC1QCXByZXZpb3VzIGNvbXBsZXRpb24KK3xpX0NUUkwtWF9DVFJMLVR8CUNUUkwtWCBDVFJMLVQJY29tcGxldGUgaWRlbnRpZmllcnMgZnJvbSB0aGVzYXVydXMKK3xpX0NUUkwtWF9DVFJMLVl8CUNUUkwtWCBDVFJMLVkJc2Nyb2xsIGRvd24KK3xpX0NUUkwtWF9DVFJMLV18CUNUUkwtWCBDVFJMLV0JY29tcGxldGUgdGFncwore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSAraW5zZXJ0X2V4cGFuZCBmZWF0dXJlfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIE5vcm1hbCBtb2RlCQkJCQkJKm5vcm1hbC1pbmRleCoKKworQ0hBUgkgYW55IG5vbi1ibGFuayBjaGFyYWN0ZXIKK1dPUkQJIGEgc2VxdWVuY2Ugb2Ygbm9uLWJsYW5rIGNoYXJhY3RlcnMKK04JIGEgbnVtYmVyIGVudGVyZWQgYmVmb3JlIHRoZSBjb21tYW5kCit7bW90aW9ufSBhIGN1cnNvciBtb3ZlbWVudCBjb21tYW5kCitObW92ZQkgdGhlIHRleHQgdGhhdCBpcyBtb3ZlZCBvdmVyIHdpdGggYSB7bW90aW9ufQorU0VDVElPTgkgYSBzZWN0aW9uIHRoYXQgcG9zc2libHkgc3RhcnRzIHdpdGggJ30nIGluc3RlYWQgb2YgJ3snCisKK25vdGU6IDEgPSBjdXJzb3IgbW92ZW1lbnQgY29tbWFuZDsgMiA9IGNhbiBiZSB1bmRvbmUvcmVkb25lCisKK3RhZwkJY2hhcgkgICAgICBub3RlIGFjdGlvbiBpbiBOb3JtYWwgbW9kZQl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJQ1RSTC1ACQkgICBub3QgdXNlZAorfENUUkwtQXwJQ1RSTC1BCQkyICBhZGQgTiB0byBudW1iZXIgYXQvYWZ0ZXIgY3Vyc29yCit8Q1RSTC1CfAlDVFJMLUIJCTEgIHNjcm9sbCBOIHNjcmVlbnMgQmFja3dhcmRzCit8Q1RSTC1DfAlDVFJMLUMJCSAgIGludGVycnVwdCBjdXJyZW50IChzZWFyY2gpIGNvbW1hbmQKK3xDVFJMLUR8CUNUUkwtRAkJICAgc2Nyb2xsIERvd24gTiBsaW5lcyAoZGVmYXVsdDogaGFsZiBhIHNjcmVlbikKK3xDVFJMLUV8CUNUUkwtRQkJICAgc2Nyb2xsIE4gbGluZXMgdXB3YXJkcyAoTiBsaW5lcyBFeHRyYSkKK3xDVFJMLUZ8CUNUUkwtRgkJMSAgc2Nyb2xsIE4gc2NyZWVucyBGb3J3YXJkCit8Q1RSTC1HfAlDVFJMLUcJCSAgIGRpc3BsYXkgY3VycmVudCBmaWxlIG5hbWUgYW5kIHBvc2l0aW9uCit8PEJTPnwJCTxCUz4JCTEgIHNhbWUgYXMgImgiCit8Q1RSTC1IfAlDVFJMLUgJCTEgIHNhbWUgYXMgImgiCit8PFRhYj58CQk8VGFiPgkJMSAgZ28gdG8gTiBuZXdlciBlbnRyeSBpbiBqdW1wIGxpc3QKK3xDVFJMLUl8CUNUUkwtSQkJMSAgc2FtZSBhcyA8VGFiPgorfDxOTD58CQk8Tkw+CQkxICBzYW1lIGFzICJqIgorfENUUkwtSnwJQ1RSTC1KCQkxICBzYW1lIGFzICJqIgorCQlDVFJMLUsJCSAgIG5vdCB1c2VkCit8Q1RSTC1MfAlDVFJMLUwJCSAgIHJlZHJhdyBzY3JlZW4KK3w8Q1I+fAkJPENSPgkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIE4gbGluZXMgbG93ZXIKK3xDVFJMLU18CUNUUkwtTQkJMSAgc2FtZSBhcyA8Q1I+Cit8Q1RSTC1OfAlDVFJMLU4JCTEgIHNhbWUgYXMgImoiCit8Q1RSTC1PfAlDVFJMLU8JCTEgIGdvIHRvIE4gb2xkZXIgZW50cnkgaW4ganVtcCBsaXN0Cit8Q1RSTC1QfAlDVFJMLVAJCTEgIHNhbWUgYXMgImsiCisJCUNUUkwtUQkJICAgKHVzZWQgZm9yIHRlcm1pbmFsIGNvbnRyb2wgZmxvdykKK3xDVFJMLVJ8CUNUUkwtUgkJMiAgcmVkbyBjaGFuZ2VzIHdoaWNoIHdlcmUgdW5kb25lIHdpdGggJ3UnCisJCUNUUkwtUwkJICAgKHVzZWQgZm9yIHRlcm1pbmFsIGNvbnRyb2wgZmxvdykKK3xDVFJMLVR8CUNUUkwtVAkJICAganVtcCB0byBOIG9sZGVyIFRhZyBpbiB0YWcgbGlzdAorfENUUkwtVXwJQ1RSTC1VCQkgICBzY3JvbGwgTiBsaW5lcyBVcHdhcmRzIChkZWZhdWx0OiBoYWxmIGEKKwkJCQkgICBzY3JlZW4pCit8Q1RSTC1WfAlDVFJMLVYJCSAgIHN0YXJ0IGJsb2Nrd2lzZSBWaXN1YWwgbW9kZQorfENUUkwtV3wJQ1RSTC1XIHtjaGFyfQkgICB3aW5kb3cgY29tbWFuZHMsIHNlZSB8Q1RSTC1XfAorfENUUkwtWHwJQ1RSTC1YCQkyICBzdWJ0cmFjdCBOIGZyb20gbnVtYmVyIGF0L2FmdGVyIGN1cnNvcgorfENUUkwtWXwJQ1RSTC1ZCQkgICBzY3JvbGwgTiBsaW5lcyBkb3dud2FyZHMKK3xDVFJMLVp8CUNUUkwtWgkJICAgc3VzcGVuZCBwcm9ncmFtIChvciBzdGFydCBuZXcgc2hlbGwpCisJCUNUUkwtWyA8RXNjPgkgICBub3QgdXNlZAorfENUUkwtXF9DVFJMLU58IENUUkwtXCBDVFJMLU4JICAgZ28gdG8gTm9ybWFsIG1vZGUgKG5vLW9wKQorfENUUkwtXF9DVFJMLUd8IENUUkwtXCBDVFJMLUcJICAgZ28gdG8gbW9kZSBzcGVjaWZpZWQgd2l0aCAnaW5zZXJ0bW9kZScKKwkJQ1RSTC1cIGEgLSB6CSAgIHJlc2VydmVkIGZvciBleHRlbnNpb25zCisJCUNUUkwtXCBvdGhlcnMgICAgICBub3QgdXNlZAorfENUUkwtXXwJQ1RSTC1dCQkgICA6dGEgdG8gaWRlbnQgdW5kZXIgY3Vyc29yCit8Q1RSTC1efAlDVFJMLV4JCSAgIGVkaXQgTnRoIGFsdGVybmF0ZSBmaWxlIChlcXVpdmFsZW50IHRvCisJCQkJICAgIjplICNOIikKKwkJQ1RSTC1fCQkgICBub3QgdXNlZAorCit8PFNwYWNlPnwJPFNwYWNlPgkJMSAgc2FtZSBhcyAibCIKK3whfAkJIXttb3Rpb259e2ZpbHRlcn0KKwkJCQkyICBmaWx0ZXIgTm1vdmUgdGV4dCB0aHJvdWdoIHRoZSB7ZmlsdGVyfQorCQkJCSAgIGNvbW1hbmQKK3whIXwJCSEhe2ZpbHRlcn0JMiAgZmlsdGVyIE4gbGluZXMgdGhyb3VnaCB0aGUge2ZpbHRlcn0gY29tbWFuZAorfHF1b3RlfAkJInthLXpBLVowLTkuJSM6LSJ9ICB1c2UgcmVnaXN0ZXIge2EtekEtWjAtOS4lIzotIn0gZm9yIG5leHQKKwkJCQkgICBkZWxldGUsIHlhbmsgb3IgcHV0ICh1cHBlcmNhc2UgdG8gYXBwZW5kKQorCQkJCSAgICh7LiUjOn0gb25seSB3b3JrIHdpdGggcHV0KQorfCN8CQkjCQkxICBzZWFyY2ggYmFja3dhcmQgZm9yIHRoZSBOdGggb2NjdXJyZW5jZSBvZgorCQkJCSAgIHRoZSBpZGVudCB1bmRlciB0aGUgY3Vyc29yCit8JHwJCSQJCTEgIGN1cnNvciB0byB0aGUgZW5kIG9mIE50aCBuZXh0IGxpbmUKK3wlfAkJJQkJMSAgZmluZCB0aGUgbmV4dCAoY3VybHkvc3F1YXJlKSBicmFja2V0IG9uCisJCQkJICAgdGhpcyBsaW5lIGFuZCBnbyB0byBpdHMgbWF0Y2gsIG9yIGdvIHRvCisJCQkJICAgbWF0Y2hpbmcgY29tbWVudCBicmFja2V0LCBvciBnbyB0byBtYXRjaGluZworCQkJCSAgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuCit8TiV8CQl7Y291bnR9JQkxICBnbyB0byBOIHBlcmNlbnRhZ2UgaW4gdGhlIGZpbGUKK3wmfAkJJgkJMiAgcmVwZWF0IGxhc3QgOnMKK3wnfAkJJ3thLXpBLVowLTl9CTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUgbGluZSB3aXRoCisJCQkJICAgbWFyayB7YS16QS1aMC05fQorfCcnfAkJJycJCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvZiB0aGUgbGluZSB3aGVyZQorCQkJCSAgIHRoZSBjdXJzb3Igd2FzIGJlZm9yZSB0aGUgbGF0ZXN0IGp1bXAuCit8Jyh8CQknKAkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIG9uIHRoZSBsaW5lIG9mIHRoZQorCQkJCSAgIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlCit8Jyl8CQknKQkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIG9uIHRoZSBsaW5lIG9mIHRoZQorCQkJCSAgIGVuZCBvZiB0aGUgY3VycmVudCBzZW50ZW5jZQorfCc8fAkJJzwJCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvZiB0aGUgbGluZSB3aGVyZQorCQkJCSAgIGhpZ2hsaWdodGVkIGFyZWEgc3RhcnRzL3N0YXJ0ZWQgaW4gdGhlCisJCQkJICAgY3VycmVudCBidWZmZXIuCit8Jz58CQknPgkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIG9mIHRoZSBsaW5lIHdoZXJlCisJCQkJICAgaGlnaGxpZ2h0ZWQgYXJlYSBlbmRzL2VuZGVkIGluIHRoZSBjdXJyZW50CisJCQkJICAgYnVmZmVyLgorfCdbfAkJJ1sJCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUgbGluZSBvZiB0aGUKKwkJCQkgICBzdGFydCBvZiBsYXN0IG9wZXJhdGVkIHRleHQgb3Igc3RhcnQgb2YgcHV0CisJCQkJICAgdGV4dAorfCddfAkJJ10JCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUgbGluZSBvZiB0aGUKKwkJCQkgICBlbmQgb2YgbGFzdCBvcGVyYXRlZCB0ZXh0IG9yIGVuZCBvZiBwdXQKKwkJCQkgICB0ZXh0Cit8J3t8CQknewkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIG9uIHRoZSBsaW5lIG9mIHRoZQorCQkJCSAgIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHBhcmFncmFwaAorfCd9fAkJJ30JCTEgIGN1cnNvciB0byB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUgbGluZSBvZiB0aGUKKwkJCQkgICBlbmQgb2YgdGhlIGN1cnJlbnQgcGFyYWdyYXBoCit8KHwJCSgJCTEgIGN1cnNvciBOIHNlbnRlbmNlcyBiYWNrd2FyZAorfCl8CQkpCQkxICBjdXJzb3IgTiBzZW50ZW5jZXMgZm9yd2FyZAorfHN0YXJ8CQkqCQkxICBzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIE50aCBvY2N1cnJlbmNlIG9mCisJCQkJICAgdGhlIGlkZW50IHVuZGVyIHRoZSBjdXJzb3IKK3wrfAkJKwkJMSAgc2FtZSBhcyA8Q1I+Cit8LHwJCSwJCTEgIHJlcGVhdCBsYXRlc3QgZiwgdCwgRiBvciBUIGluIG9wcG9zaXRlCisJCQkJICAgZGlyZWN0aW9uIE4gdGltZXMKK3wtfAkJLQkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIE4gbGluZXMgaGlnaGVyCit8LnwJCS4JCTIgIHJlcGVhdCBsYXN0IGNoYW5nZSB3aXRoIGNvdW50IHJlcGxhY2VkIHdpdGgKKwkJCQkgICBOCit8L3wJCS97cGF0dGVybn08Q1I+CTEgIHNlYXJjaCBmb3J3YXJkIGZvciB0aGUgTnRoIG9jY3VycmVuY2Ugb2YKKwkJCQkgICB7cGF0dGVybn0KK3wvPENSPnwJCS88Q1I+CQkxICBzZWFyY2ggZm9yd2FyZCBmb3Ige3BhdHRlcm59IG9mIGxhc3Qgc2VhcmNoCit8Y291bnR8CQkwCQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoYXIgb2YgdGhlIGxpbmUKK3xjb3VudHwJCTEJCSAgIHByZXBlbmQgdG8gY29tbWFuZCB0byBnaXZlIGEgY291bnQKK3xjb3VudHwJCTIJCQkiCit8Y291bnR8CQkzCQkJIgorfGNvdW50fAkJNAkJCSIKK3xjb3VudHwJCTUJCQkiCit8Y291bnR8CQk2CQkJIgorfGNvdW50fAkJNwkJCSIKK3xjb3VudHwJCTgJCQkiCit8Y291bnR8CQk5CQkJIgorfDp8CQk6CQkxICBzdGFydCBlbnRlcmluZyBhbiBFeCBjb21tYW5kCit8Tjp8CQl7Y291bnR9OgkgICBzdGFydCBlbnRlcmluZyBhbiBFeCBjb21tYW5kIHdpdGggcmFuZ2UKKwkJCQkgICBmcm9tIGN1cnJlbnQgbGluZSB0byBOLTEgbGluZXMgZG93bgorfDt8CQk7CQkxICByZXBlYXQgbGF0ZXN0IGYsIHQsIEYgb3IgVCBOIHRpbWVzCit8PHwJCTx7bW90aW9ufQkyICBzaGlmdCBObW92ZSBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnCisJCQkJICAgbGVmdHdhcmRzCit8PDx8CQk8PAkJMiAgc2hpZnQgTiBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIGxlZnR3YXJkcworfD18CQk9e21vdGlvbn0JMiAgZmlsdGVyIE5tb3ZlIGxpbmVzIHRocm91Z2ggImluZGVudCIKK3w9PXwJCT09CQkyICBmaWx0ZXIgTiBsaW5lcyB0aHJvdWdoICJpbmRlbnQiCit8PnwJCT57bW90aW9ufQkyICBzaGlmdCBObW92ZSBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnCisJCQkJICAgcmlnaHR3YXJkcworfD4+fAkJPj4JCTIgIHNoaWZ0IE4gbGluZXMgb25lICdzaGlmdHdpZHRoJyByaWdodHdhcmRzCit8P3wJCT97cGF0dGVybn08Q1I+CTEgIHNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIE50aCBwcmV2aW91cworCQkJCSAgIG9jY3VycmVuY2Ugb2Yge3BhdHRlcm59Cit8PzxDUj58CQk/PENSPgkJMSAgc2VhcmNoIGJhY2t3YXJkIGZvciB7cGF0dGVybn0gb2YgbGFzdCBzZWFyY2gKK3xAfAkJQHthLXp9CQkyICBleGVjdXRlIHRoZSBjb250ZW50cyBvZiByZWdpc3RlciB7YS16fQorCQkJCSAgIE4gdGltZXMKK3xAOnwJCUA6CQkgICByZXBlYXQgdGhlIHByZXZpb3VzICI6IiBjb21tYW5kIE4gdGltZXMKK3xAQHwJCUBACQkyICByZXBlYXQgdGhlIHByZXZpb3VzIEB7YS16fSBOIHRpbWVzCit8QXwJCUEJCTIgIGFwcGVuZCB0ZXh0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxpbmUgTiB0aW1lcworfEJ8CQlCCQkxICBjdXJzb3IgTiBXT1JEUyBiYWNrd2FyZAorfEN8CQlbInhdQwkJMiAgY2hhbmdlIGZyb20gdGhlIGN1cnNvciBwb3NpdGlvbiB0byB0aGUgZW5kCisJCQkJICAgb2YgdGhlIGxpbmUsIGFuZCBOLTEgbW9yZSBsaW5lcyBbaW50bworCQkJCSAgIGJ1ZmZlciB4XTsgc3lub255bSBmb3IgImMkIgorfER8CQlbInhdRAkJMiAgZGVsZXRlIHRoZSBjaGFyYWN0ZXJzIHVuZGVyIHRoZSBjdXJzb3IKKwkJCQkgICB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lIGFuZCBOLTEgbW9yZQorCQkJCSAgIGxpbmVzIFtpbnRvIGJ1ZmZlciB4XTsgc3lub255bSBmb3IgImQkIgorfEV8CQlFCQkxICBjdXJzb3IgZm9yd2FyZCB0byB0aGUgZW5kIG9mIFdPUkQgTgorfEZ8CQlGe2NoYXJ9CQkxICBjdXJzb3IgdG8gdGhlIE50aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0bworCQkJCSAgIHRoZSBsZWZ0Cit8R3wJCUcJCTEgIGN1cnNvciB0byBsaW5lIE4sIGRlZmF1bHQgbGFzdCBsaW5lCit8SHwJCUgJCTEgIGN1cnNvciB0byBsaW5lIE4gZnJvbSB0b3Agb2Ygc2NyZWVuCit8SXwJCUkJCTIgIGluc2VydCB0ZXh0IGJlZm9yZSB0aGUgZmlyc3QgQ0hBUiBvbiB0aGUKKwkJCQkgICBsaW5lIE4gdGltZXMKK3xKfAkJSgkJMiAgSm9pbiBOIGxpbmVzOyBkZWZhdWx0IGlzIDIKK3xLfAkJSwkJICAgbG9va3VwIEtleXdvcmQgdW5kZXIgdGhlIGN1cnNvciB3aXRoCisJCQkJICAgJ2tleXdvcmRwcmcnCit8THwJCUwJCTEgIGN1cnNvciB0byBsaW5lIE4gZnJvbSBib3R0b20gb2Ygc2NyZWVuCit8TXwJCU0JCTEgIGN1cnNvciB0byBtaWRkbGUgbGluZSBvZiBzY3JlZW4KK3xOfAkJTgkJMSAgcmVwZWF0IHRoZSBsYXRlc3QgJy8nIG9yICc/JyBOIHRpbWVzIGluCisJCQkJICAgb3Bwb3NpdGUgZGlyZWN0aW9uCit8T3wJCU8JCTIgIGJlZ2luIGEgbmV3IGxpbmUgYWJvdmUgdGhlIGN1cnNvciBhbmQKKwkJCQkgICBpbnNlcnQgdGV4dCwgcmVwZWF0IE4gdGltZXMKK3xQfAkJWyJ4XVAJCTIgIHB1dCB0aGUgdGV4dCBbZnJvbSBidWZmZXIgeF0gYmVmb3JlIHRoZQorCQkJCSAgIGN1cnNvciBOIHRpbWVzCit8UXwJCVEJCSAgIHN3aXRjaCB0byAiRXgiIG1vZGUKK3xSfAkJUgkJMiAgZW50ZXIgcmVwbGFjZSBtb2RlOiBvdmVydHlwZSBleGlzdGluZworCQkJCSAgIGNoYXJhY3RlcnMsIHJlcGVhdCB0aGUgZW50ZXJlZCB0ZXh0IE4tMQorCQkJCSAgIHRpbWVzCit8U3wJCVsieF1TCQkyICBkZWxldGUgTiBsaW5lcyBbaW50byBidWZmZXIgeF0gYW5kIHN0YXJ0CisJCQkJICAgaW5zZXJ0OyBzeW5vbnltIGZvciAiXmNjIiBvciAiMGNjIiwKKwkJCQkgICBkZXBlbmRpbmcgb24gYXV0b2luZGVudAorfFR8CQlUe2NoYXJ9CQkxICBjdXJzb3IgdGlsbCBhZnRlciBOdGggb2NjdXJyZW5jZSBvZiB7Y2hhcn0KKwkJCQkgICB0byB0aGUgbGVmdAorfFV8CQlVCQkyICB1bmRvIGFsbCBsYXRlc3QgY2hhbmdlcyBvbiBvbmUgbGluZQorfFZ8CQlWCQkgICBzdGFydCBsaW5ld2lzZSBWaXN1YWwgbW9kZQorfFd8CQlXCQkxICBjdXJzb3IgTiBXT1JEUyBmb3J3YXJkCit8WHwJCVsieF1YCQkyICBkZWxldGUgTiBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgY3Vyc29yIFtpbnRvCisJCQkJICAgYnVmZmVyIHhdCit8WXwJCVsieF1ZCQkgICB5YW5rIE4gbGluZXMgW2ludG8gYnVmZmVyIHhdOyBzeW5vbnltIGZvcgorCQkJCSAgICJ5eSIKK3xaWnwJCVpaCQkgICBzdG9yZSBjdXJyZW50IGZpbGUgaWYgbW9kaWZpZWQsIGFuZCBleGl0Cit8WlF8CQlaUQkJICAgZXhpdCBjdXJyZW50IGZpbGUgYWx3YXlzCit8W3wJCVt7Y2hhcn0JCSAgIHNxdWFyZSBicmFja2V0IGNvbW1hbmQgKHNlZSBiZWxvdykKKwkJXAkJICAgbm90IHVzZWQKK3xdfAkJXXtjaGFyfQkJICAgc3F1YXJlIGJyYWNrZXQgY29tbWFuZCAoc2VlIGJlbG93KQorfF58CQleCQkxICBjdXJzb3IgdG8gdGhlIGZpcnN0IENIQVIgb2YgdGhlIGxpbmUKK3xffAkJXwkJMSAgY3Vyc29yIHRvIHRoZSBmaXJzdCBDSEFSIE4gLSAxIGxpbmVzIGxvd2VyCit8YHwJCWB7YS16QS1aMC05fQkxICBjdXJzb3IgdG8gdGhlIG1hcmsge2EtekEtWjAtOX0KK3xgKHwJCWAoCQkxICBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlCit8YCl8CQlgKQkJMSAgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2VudGVuY2UKK3xgPHwJCWA8CQkxICBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBoaWdobGlnaHRlZCBhcmVhCit8YD58CQlgPgkJMSAgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGhpZ2hsaWdodGVkIGFyZWEKK3xgW3wJCWBbCQkxICBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIGxhc3Qgb3BlcmF0ZWQgdGV4dAorCQkJCSAgIG9yIHN0YXJ0IG9mIHB1dHRlZCB0ZXh0Cit8YF18CQlgXQkJMSAgY3Vyc29yIHRvIHRoZSBlbmQgb2YgbGFzdCBvcGVyYXRlZCB0ZXh0IG9yCisJCQkJICAgZW5kIG9mIHB1dHRlZCB0ZXh0Cit8YGB8CQlgYAkJMSAgY3Vyc29yIHRvIHRoZSBwb3NpdGlvbiBiZWZvcmUgbGF0ZXN0IGp1bXAKK3xge3wJCWB7CQkxICBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHBhcmFncmFwaAorfGB9fAkJYH0JCTEgIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHBhcmFncmFwaAorfGF8CQlhCQkyICBhcHBlbmQgdGV4dCBhZnRlciB0aGUgY3Vyc29yIE4gdGltZXMKK3xifAkJYgkJMSAgY3Vyc29yIE4gd29yZHMgYmFja3dhcmQKK3xjfAkJWyJ4XWN7bW90aW9ufQkyICBkZWxldGUgTm1vdmUgdGV4dCBbaW50byBidWZmZXIgeF0gYW5kIHN0YXJ0CisJCQkJICAgaW5zZXJ0Cit8Y2N8CQlbInhdY2MJCTIgIGRlbGV0ZSBOIGxpbmVzIFtpbnRvIGJ1ZmZlciB4XSBhbmQgc3RhcnQKKwkJCQkgICBpbnNlcnQKK3xkfAkJWyJ4XWR7bW90aW9ufQkyICBkZWxldGUgTm1vdmUgdGV4dCBbaW50byBidWZmZXIgeF0KK3xkZHwJCVsieF1kZAkJMiAgZGVsZXRlIE4gbGluZXMgW2ludG8gYnVmZmVyIHhdCit8ZG98CQlkbwkJMiAgc2FtZSBhcyAiOmRpZmZnZXQiCit8ZHB8CQlkcAkJMiAgc2FtZSBhcyAiOmRpZmZwdXQiCit8ZXwJCWUJCTEgIGN1cnNvciBmb3J3YXJkIHRvIHRoZSBlbmQgb2Ygd29yZCBOCit8ZnwJCWZ7Y2hhcn0JCTEgIGN1cnNvciB0byBOdGggb2NjdXJyZW5jZSBvZiB7Y2hhcn0gdG8gdGhlCisJCQkJICAgcmlnaHQKK3xnfAkJZ3tjaGFyfQkJICAgZXh0ZW5kZWQgY29tbWFuZHMsIHNlZSBiZWxvdworfGh8CQloCQkxICBjdXJzb3IgTiBjaGFycyB0byB0aGUgbGVmdAorfGl8CQlpCQkyICBpbnNlcnQgdGV4dCBiZWZvcmUgdGhlIGN1cnNvciBOIHRpbWVzCit8anwJCWoJCTEgIGN1cnNvciBOIGxpbmVzIGRvd253YXJkCit8a3wJCWsJCTEgIGN1cnNvciBOIGxpbmVzIHVwd2FyZAorfGx8CQlsCQkxICBjdXJzb3IgTiBjaGFycyB0byB0aGUgcmlnaHQKK3xtfAkJbXtBLVphLXp9CSAgIHNldCBtYXJrIHtBLVphLXp9IGF0IGN1cnNvciBwb3NpdGlvbgorfG58CQluCQkxICByZXBlYXQgdGhlIGxhdGVzdCAnLycgb3IgJz8nIE4gdGltZXMKK3xvfAkJbwkJMiAgYmVnaW4gYSBuZXcgbGluZSBiZWxvdyB0aGUgY3Vyc29yIGFuZAorCQkJCSAgIGluc2VydCB0ZXh0LCByZXBlYXQgTiB0aW1lcworfHB8CQlbInhdcAkJMiAgcHV0IHRoZSB0ZXh0IFtmcm9tIHJlZ2lzdGVyIHhdIGFmdGVyIHRoZQorCQkJCSAgIGN1cnNvciBOIHRpbWVzCit8cXwJCXF7MC05YS16QS1aIn0JICAgcmVjb3JkIHR5cGVkIGNoYXJhY3RlcnMgaW50byBuYW1lZCByZWdpc3RlcgorCQkJCSAgIHswLTlhLXpBLVoifSAodXBwZXJjYXNlIHRvIGFwcGVuZCkKK3xxfAkJcQkJICAgKHdoaWxlIHJlY29yZGluZykgc3RvcHMgcmVjb3JkaW5nCit8cTp8CQlxOgkJICAgZWRpdCA6IGNvbW1hbmQtbGluZSBpbiBjb21tYW5kLWxpbmUgd2luZG93Cit8cS98CQlxLwkJICAgZWRpdCAvIGNvbW1hbmQtbGluZSBpbiBjb21tYW5kLWxpbmUgd2luZG93Cit8cT98CQlxPwkJICAgZWRpdCA/IGNvbW1hbmQtbGluZSBpbiBjb21tYW5kLWxpbmUgd2luZG93Cit8cnwJCXJ7Y2hhcn0JCTIgIHJlcGxhY2UgTiBjaGFycyB3aXRoIHtjaGFyfQorfHN8CQlbInhdcwkJMiAgKHN1YnN0aXR1dGUpIGRlbGV0ZSBOIGNoYXJhY3RlcnMgW2ludG8KKwkJCQkgICBidWZmZXIgeF0gYW5kIHN0YXJ0IGluc2VydAorfHR8CQl0e2NoYXJ9CQkxICBjdXJzb3IgdGlsbCBiZWZvcmUgTnRoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9CisJCQkJICAgdG8gdGhlIHJpZ2h0Cit8dXwJCXUJCTIgIHVuZG8gY2hhbmdlcworfHZ8CQl2CQkgICBzdGFydCBjaGFyYWN0ZXJ3aXNlIFZpc3VhbCBtb2RlCit8d3wJCXcJCTEgIGN1cnNvciBOIHdvcmRzIGZvcndhcmQKK3x4fAkJWyJ4XXgJCTIgIGRlbGV0ZSBOIGNoYXJhY3RlcnMgdW5kZXIgYW5kIGFmdGVyIHRoZQorCQkJCSAgIGN1cnNvciBbaW50byBidWZmZXIgeF0KK3x5fAkJWyJ4XXl7bW90aW9ufQkgICB5YW5rIE5tb3ZlIHRleHQgW2ludG8gYnVmZmVyIHhdCit8eXl8CQlbInhdeXkJCSAgIHlhbmsgTiBsaW5lcyBbaW50byBidWZmZXIgeF0KK3x6fAkJentjaGFyfQkJICAgY29tbWFuZHMgc3RhcnRpbmcgd2l0aCAneicsIHNlZSBiZWxvdworfHt8CQl7CQkxICBjdXJzb3IgTiBwYXJhZ3JhcGhzIGJhY2t3YXJkCit8YmFyfAkJfAkJMSAgY3Vyc29yIHRvIGNvbHVtbiBOCit8fXwJCX0JCTEgIGN1cnNvciBOIHBhcmFncmFwaHMgZm9yd2FyZAorfH58CQl+CQkyICAndGlsZGVvcCcgb2ZmOiBzd2l0Y2ggY2FzZSBvZiBOIGNoYXJhY3RlcnMKKwkJCQkgICB1bmRlciBjdXJzb3IgYW5kIG1vdmUgdGhlIGN1cnNvciBOCisJCQkJICAgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQKK3x+fAkJfnttb3Rpb259CSAgICd0aWxkZW9wJyBvbjogc3dpdGNoIGNhc2Ugb2YgTm1vdmUgdGV4dAorfDxDLUVuZD58CTxDLUVuZD4JCTEgIHNhbWUgYXMgIkciCit8PEMtSG9tZT58CTxDLUhvbWU+CTEgIHNhbWUgYXMgImdnIgorfDxDLUxlZnQ+fAk8Qy1MZWZ0PgkxICBzYW1lIGFzICJiIgorfDxDLUxlZnRNb3VzZT58CTxDLUxlZnRNb3VzZT4JICAgIjp0YSIgdG8gdGhlIGtleXdvcmQgYXQgdGhlIG1vdXNlIGNsaWNrCit8PEMtUmlnaHQ+fAk8Qy1SaWdodD4JMSAgc2FtZSBhcyAidyIKK3w8Qy1SaWdodE1vdXNlPnwgPEMtUmlnaHRNb3VzZT4JICAgc2FtZSBhcyAiQ1RSTC1UIgorfDxEZWw+fAkJWyJ4XTxEZWw+CTIgIHNhbWUgYXMgIngiCit8TjxEZWw+fAl7Y291bnR9PERlbD4JICAgcmVtb3ZlIHRoZSBsYXN0IGRpZ2l0IGZyb20ge2NvdW50fQorfDxEb3duPnwJPERvd24+CQkxICBzYW1lIGFzICJqIgorfDxFbmQ+fAkJPEVuZD4JCTEgIHNhbWUgYXMgIiQiCit8PEYxPnwJCTxGMT4JCSAgIHNhbWUgYXMgPEhlbHA+Cit8PEhlbHA+fAk8SGVscD4JCSAgIG9wZW4gYSBoZWxwIHdpbmRvdworfDxIb21lPnwJPEhvbWU+CQkxICBzYW1lIGFzICIwIgorfDxJbnNlcnQ+fAk8SW5zZXJ0PgkyICBzYW1lIGFzICJpIgorfDxMZWZ0PnwJPExlZnQ+CQkxICBzYW1lIGFzICJoIgorfDxMZWZ0TW91c2U+fAk8TGVmdE1vdXNlPgkxICBtb3ZlIGN1cnNvciB0byB0aGUgbW91c2UgY2xpY2sgcG9zaXRpb24KK3w8TWlkZGxlTW91c2U+fCA8TWlkZGxlTW91c2U+CTIgIHNhbWUgYXMgIlAiIGF0IHRoZSBtb3VzZSBjbGljayBwb3NpdGlvbgorfDxQYWdlRG93bj58CTxQYWdlRG93bj4JICAgc2FtZSBhcyBDVFJMLUYKK3w8UGFnZVVwPnwJPFBhZ2VVcD4JICAgc2FtZSBhcyBDVFJMLUIKK3w8UmlnaHQ+fAk8UmlnaHQ+CQkxICBzYW1lIGFzICJsIgorfDxSaWdodE1vdXNlPnwJPFJpZ2h0TW91c2U+CSAgIHN0YXJ0IFZpc3VhbCBtb2RlLCBtb3ZlIGN1cnNvciB0byB0aGUgbW91c2UKKwkJCQkgICBjbGljayBwb3NpdGlvbgorfDxTLURvd24+fAk8Uy1Eb3duPgkxICBzYW1lIGFzIENUUkwtRgorfDxTLUxlZnQ+fAk8Uy1MZWZ0PgkxICBzYW1lIGFzICJiIgorfDxTLUxlZnRNb3VzZT58CTxTLUxlZnRNb3VzZT4JICAgc2FtZSBhcyAiKiIgYXQgdGhlIG1vdXNlIGNsaWNrIHBvc2l0aW9uCit8PFMtUmlnaHQ+fAk8Uy1SaWdodD4JMSAgc2FtZSBhcyAidyIKK3w8Uy1SaWdodE1vdXNlPnwgPFMtUmlnaHRNb3VzZT4JICAgc2FtZSBhcyAiIyIgYXQgdGhlIG1vdXNlIGNsaWNrIHBvc2l0aW9uCit8PFMtVXA+fAk8Uy1VcD4JCTEgIHNhbWUgYXMgQ1RSTC1CCit8PFVuZG8+fAk8VW5kbz4JCTIgIHNhbWUgYXMgInUiCit8PFVwPnwJCTxVcD4JCTEgIHNhbWUgYXMgImsiCit8PE1vdXNlRG93bj58CTxNb3VzZURvd24+CSAgIHNjcm9sbCB0aHJlZSBsaW5lcyBkb3dud2FyZHMKK3w8Uy1Nb3VzZURvd24+fAk8Uy1Nb3VzZURvd24+CSAgIHNjcm9sbCBhIGZ1bGwgcGFnZSBkb3dud2FyZHMKK3w8TW91c2VVcD58CTxNb3VzZVVwPgkgICBzY3JvbGwgdGhyZWUgbGluZXMgdXB3YXJkcworfDxTLU1vdXNlVXA+fAk8Uy1Nb3VzZVVwPgkgICBzY3JvbGwgYSBmdWxsIHBhZ2UgdXB3YXJkcworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuMSBUZXh0IG9iamVjdHMJCQkJCQkqb2JqZWN0cyoKKworVGhlc2UgY2FuIGJlIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3Igb3IgaW4gVmlzdWFsIG1vZGUgdG8gc2VsZWN0IGFuIG9iamVjdC4KKwordGFnCQljb21tYW5kCQkgICBhY3Rpb24gaW4gTm9ybWFsIG1vZGUJfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8dl9hKHwJCWEoCQkgICBzYW1lIGFzIGFiCit8dl9hKXwJCWEpCQkgICBzYW1lIGFzIGFiCit8dl9hPHwJCWE8CQkgICAiYSA8PiIgZnJvbSAnPCcgdG8gdGhlIG1hdGNoaW5nICc+JworfHZfYT58CQlhPgkJICAgc2FtZSBhcyBhPAorfHZfYUJ8CQlhQgkJICAgImEgQmxvY2siIGZyb20gIlt7IiB0byAiXX0iICh3aXRoIGJyYWNrZXRzKQorfHZfYVd8CQlhVwkJICAgImEgV09SRCIgKHdpdGggd2hpdGUgc3BhY2UpCit8dl9hW3wJCWFbCQkgICAiYSBbXSIgZnJvbSAnWycgdG8gdGhlIG1hdGNoaW5nICddJworfHZfYV18CQlhXQkJICAgc2FtZSBhcyBhWworfHZfYWJ8CQlhYgkJICAgImEgYmxvY2siIGZyb20gIlsoIiB0byAiXSkiICh3aXRoIGJyYWNlcykKK3x2X2FwfAkJYXAJCSAgICJhIHBhcmFncmFwaCIgKHdpdGggd2hpdGUgc3BhY2UpCit8dl9hc3wJCWFzCQkgICAiYSBzZW50ZW5jZSIgKHdpdGggd2hpdGUgc3BhY2UpCit8dl9hd3wJCWF3CQkgICAiYSB3b3JkIiAod2l0aCB3aGl0ZSBzcGFjZSkKK3x2X2F7fAkJYXsJCSAgIHNhbWUgYXMgYUIKK3x2X2F9fAkJYX0JCSAgIHNhbWUgYXMgYUIKK3x2X2kofAkJaSgJCSAgIHNhbWUgYXMgaWIKK3x2X2kpfAkJaSkJCSAgIHNhbWUgYXMgaWIKK3x2X2k8fAkJaTwJCSAgICJpbm5lciA8PiIgZnJvbSAnPCcgdG8gdGhlIG1hdGNoaW5nICc+JworfHZfaT58CQlpPgkJICAgc2FtZSBhcyBpPAorfHZfaUJ8CQlpQgkJICAgImlubmVyIEJsb2NrIiBmcm9tICJbeyIgYW5kICJdfSIKK3x2X2lXfAkJaVcJCSAgICJpbm5lciBXT1JEIgorfHZfaVt8CQlpWwkJICAgImlubmVyIFtdIiBmcm9tICdbJyB0byB0aGUgbWF0Y2hpbmcgJ10nCit8dl9pXXwJCWldCQkgICBzYW1lIGFzIGlbCit8dl9pYnwJCWliCQkgICAiaW5uZXIgYmxvY2siIGZyb20gIlsoIiB0byAiXSkiCit8dl9pcHwJCWlwCQkgICAiaW5uZXIgcGFyYWdyYXBoIgorfHZfaXN8CQlpcwkJICAgImlubmVyIHNlbnRlbmNlIgorfHZfaXd8CQlpdwkJICAgImlubmVyIHdvcmQiCit8dl9pe3wJCWl7CQkgICBzYW1lIGFzIGlCCit8dl9pfXwJCWl9CQkgICBzYW1lIGFzIGlCCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4yIFdpbmRvdyBjb21tYW5kcwkJCQkJCSpDVFJMLVcqCisKK3RhZwkJY29tbWFuZAkJICAgYWN0aW9uIGluIE5vcm1hbCBtb2RlCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfENUUkwtV19DVFJMLUJ8CUNUUkwtVyBDVFJMLUIJICAgc2FtZSBhcyAiQ1RSTC1XIGIiCit8Q1RSTC1XX0NUUkwtQ3wJQ1RSTC1XIENUUkwtQwkgICBzYW1lIGFzICJDVFJMLVcgYyIKK3xDVFJMLVdfQ1RSTC1EfAlDVFJMLVcgQ1RSTC1ECSAgIHNhbWUgYXMgIkNUUkwtVyBkIgorfENUUkwtV19DVFJMLUZ8CUNUUkwtVyBDVFJMLUYJICAgc2FtZSBhcyAiQ1RSTC1XIGYiCisJCUNUUkwtVyBDVFJMLUcJICAgc2FtZSBhcyAiQ1RSTC1XIGcgLi4iCit8Q1RSTC1XX0NUUkwtSHwJQ1RSTC1XIENUUkwtSAkgICBzYW1lIGFzICJDVFJMLVcgaCIKK3xDVFJMLVdfQ1RSTC1JfAlDVFJMLVcgQ1RSTC1JCSAgIHNhbWUgYXMgIkNUUkwtVyBpIgorfENUUkwtV19DVFJMLUp8CUNUUkwtVyBDVFJMLUoJICAgc2FtZSBhcyAiQ1RSTC1XIGoiCit8Q1RSTC1XX0NUUkwtS3wJQ1RSTC1XIENUUkwtSwkgICBzYW1lIGFzICJDVFJMLVcgayIKK3xDVFJMLVdfQ1RSTC1MfAlDVFJMLVcgQ1RSTC1MCSAgIHNhbWUgYXMgIkNUUkwtVyBsIgorfENUUkwtV19DVFJMLU58CUNUUkwtVyBDVFJMLU4JICAgc2FtZSBhcyAiQ1RSTC1XIG4iCit8Q1RSTC1XX0NUUkwtT3wJQ1RSTC1XIENUUkwtTwkgICBzYW1lIGFzICJDVFJMLVcgbyIKK3xDVFJMLVdfQ1RSTC1QfAlDVFJMLVcgQ1RSTC1QCSAgIHNhbWUgYXMgIkNUUkwtVyBwIgorfENUUkwtV19DVFJMLVF8CUNUUkwtVyBDVFJMLVEJICAgc2FtZSBhcyAiQ1RSTC1XIHEiCit8Q1RSTC1XX0NUUkwtUnwJQ1RSTC1XIENUUkwtUgkgICBzYW1lIGFzICJDVFJMLVcgciIKK3xDVFJMLVdfQ1RSTC1TfAlDVFJMLVcgQ1RSTC1TCSAgIHNhbWUgYXMgIkNUUkwtVyBzIgorfENUUkwtV19DVFJMLVR8CUNUUkwtVyBDVFJMLVQJICAgc2FtZSBhcyAiQ1RSTC1XIHQiCit8Q1RSTC1XX0NUUkwtVnwJQ1RSTC1XIENUUkwtVgkgICBzYW1lIGFzICJDVFJMLVcgdiIKK3xDVFJMLVdfQ1RSTC1XfAlDVFJMLVcgQ1RSTC1XCSAgIHNhbWUgYXMgIkNUUkwtVyB3IgorfENUUkwtV19DVFJMLVh8CUNUUkwtVyBDVFJMLVgJICAgc2FtZSBhcyAiQ1RSTC1XIHgiCit8Q1RSTC1XX0NUUkwtWnwJQ1RSTC1XIENUUkwtWgkgICBzYW1lIGFzICJDVFJMLVcgeiIKK3xDVFJMLVdfQ1RSTC1dfAlDVFJMLVcgQ1RSTC1dCSAgIHNhbWUgYXMgIkNUUkwtVyBdIgorfENUUkwtV19DVFJMLV58CUNUUkwtVyBDVFJMLV4JICAgc2FtZSBhcyAiQ1RSTC1XIF4iCit8Q1RSTC1XX0NUUkwtX3wJQ1RSTC1XIENUUkwtXwkgICBzYW1lIGFzICJDVFJMLVcgXyIKK3xDVFJMLVdfK3wJQ1RSTC1XICsJICAgaW5jcmVhc2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0IE4gbGluZXMKK3xDVFJMLVdfLXwJQ1RSTC1XIC0JICAgZGVjcmVhc2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0IE4gbGluZXMKK3xDVFJMLVdfPHwJQ1RSTC1XIDwJICAgZGVjcmVhc2UgY3VycmVudCB3aW5kb3cgd2lkdGggTiBjb2x1bW5zCit8Q1RSTC1XXz18CUNUUkwtVyA9CSAgIG1ha2UgYWxsIHdpbmRvd3MgdGhlIHNhbWUgaGVpZ2h0Cit8Q1RSTC1XXz58CUNUUkwtVyA+CSAgIGluY3JlYXNlIGN1cnJlbnQgd2luZG93IHdpZHRoIE4gY29sdW1ucworfENUUkwtV19IfAlDVFJMLVcgSAkgICBtb3ZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBmYXIgbGVmdAorfENUUkwtV19KfAlDVFJMLVcgSgkgICBtb3ZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSB2ZXJ5IGJvdHRvbQorfENUUkwtV19LfAlDVFJMLVcgSwkgICBtb3ZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSB2ZXJ5IHRvcAorfENUUkwtV19MfAlDVFJMLVcgTAkgICBtb3ZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBmYXIgcmlnaHQKK3xDVFJMLVdfUHwJQ1RSTC1XIFAJICAgZ28gdG8gcHJldmlldyB3aW5kb3cKK3xDVFJMLVdfUnwJQ1RSTC1XIFIJICAgcm90YXRlIHdpbmRvd3MgdXB3YXJkcyBOIHRpbWVzCit8Q1RSTC1XX1N8CUNUUkwtVyBTCSAgIHNhbWUgYXMgIkNUUkwtVyBzIgorfENUUkwtV19XfAlDVFJMLVcgVwkgICBnbyB0byBOIHByZXZpb3VzIHdpbmRvdyAod3JhcCBhcm91bmQpCit8Q1RSTC1XX118CUNUUkwtVyBdCSAgIHNwbGl0IHdpbmRvdyBhbmQganVtcCB0byB0YWcgdW5kZXIgY3Vyc29yCit8Q1RSTC1XX158CUNUUkwtVyBeCSAgIHNwbGl0IGN1cnJlbnQgd2luZG93IGFuZCBlZGl0IGFsdGVybmF0ZQorCQkJCSAgIGZpbGUgTgorfENUUkwtV19ffAlDVFJMLVcgXwkgICBzZXQgY3VycmVudCB3aW5kb3cgaGVpZ2h0IHRvIE4gKGRlZmF1bHQ6CisJCQkJICAgdmVyeSBoaWdoKQorfENUUkwtV19ifAlDVFJMLVcgYgkgICBnbyB0byBib3R0b20gd2luZG93Cit8Q1RSTC1XX2N8CUNUUkwtVyBjCSAgIGNsb3NlIGN1cnJlbnQgd2luZG93IChsaWtlIHw6Y2xvc2V8KQorfENUUkwtV19kfAlDVFJMLVcgZAkgICBzcGxpdCB3aW5kb3cgYW5kIGp1bXAgdG8gZGVmaW5pdGlvbiB1bmRlcgorCQkJCSAgIHRoZSBjdXJzb3IKK3xDVFJMLVdfZnwJQ1RSTC1XIGYJICAgc3BsaXQgd2luZG93IGFuZCBlZGl0IGZpbGUgbmFtZSB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IKK3xDVFJMLVdfZ19DVFJMLV18IENUUkwtVyBnIENUUkwtXSAgc3BsaXQgd2luZG93IGFuZCBkbyB8OnRqdW1wfCB0byB0YWcgdW5kZXIKKwkJCQkgICBjdXJzb3IKK3xDVFJMLVdfZ118CUNUUkwtVyBnIF0JICAgc3BsaXQgd2luZG93IGFuZCBkbyB8OnRzZWxlY3R8IGZvciB0YWcKKwkJCQkgICB1bmRlciBjdXJzb3IKK3xDVFJMLVdfZ318CUNUUkwtVyBnIH0JICAgZG8gYSB8OnB0anVtcHwgdG8gdGhlIHRhZyB1bmRlciB0aGUgY3Vyc29yCit8Q1RSTC1XX2h8CUNUUkwtVyBoCSAgIGdvIHRvIE50aCBsZWZ0IHdpbmRvdyAoc3RvcCBhdCBmaXJzdCB3aW5kb3cpCit8Q1RSTC1XX2l8CUNUUkwtVyBpCSAgIHNwbGl0IHdpbmRvdyBhbmQganVtcCB0byBkZWNsYXJhdGlvbiBvZgorCQkJCSAgIGlkZW50aWZpZXIgdW5kZXIgdGhlIGN1cnNvcgorfENUUkwtV19qfAlDVFJMLVcgagkgICBnbyBOIHdpbmRvd3MgZG93biAoc3RvcCBhdCBsYXN0IHdpbmRvdykKK3xDVFJMLVdfa3wJQ1RSTC1XIGsJICAgZ28gTiB3aW5kb3dzIHVwIChzdG9wIGF0IGZpcnN0IHdpbmRvdykKK3xDVFJMLVdfbHwJQ1RSTC1XIGwJICAgZ28gdG8gTnRoIHJpZ2h0IHdpbmRvdyAoc3RvcCBhdCBsYXN0IHdpbmRvdykKK3xDVFJMLVdfbnwJQ1RSTC1XIG4JICAgb3BlbiBuZXcgd2luZG93LCBOIGxpbmVzIGhpZ2gKK3xDVFJMLVdfb3wJQ1RSTC1XIG8JICAgY2xvc2UgYWxsIGJ1dCBjdXJyZW50IHdpbmRvdyAobGlrZSB8Om9ubHl8KQorfENUUkwtV19wfAlDVFJMLVcgcAkgICBnbyB0byBwcmV2aW91cyAobGFzdCBhY2Nlc3NlZCkgd2luZG93Cit8Q1RSTC1XX3F8CUNUUkwtVyBxCSAgIHF1aXQgY3VycmVudCB3aW5kb3cgKGxpa2UgfDpxdWl0fCkKK3xDVFJMLVdfcnwJQ1RSTC1XIHIJICAgcm90YXRlIHdpbmRvd3MgZG93bndhcmRzIE4gdGltZXMKK3xDVFJMLVdfc3wJQ1RSTC1XIHMJICAgc3BsaXQgY3VycmVudCB3aW5kb3cgaW4gdHdvIHBhcnRzLCBuZXcKKwkJCQkgICB3aW5kb3cgTiBsaW5lcyBoaWdoCit8Q1RSTC1XX3R8CUNUUkwtVyB0CSAgIGdvIHRvIHRvcCB3aW5kb3cKK3xDVFJMLVdfdnwJQ1RSTC1XIHYJICAgc3BsaXQgY3VycmVudCB3aW5kb3cgdmVydGljYWxseSwgbmV3IHdpbmRvdworCQkJCSAgIE4gbGluZXMgd2lkZQorfENUUkwtV193fAlDVFJMLVcgdwkgICBnbyB0byBOIG5leHQgd2luZG93ICh3cmFwIGFyb3VuZCkKK3xDVFJMLVdfeHwJQ1RSTC1XIHgJICAgZXhjaGFuZ2UgY3VycmVudCB3aW5kb3cgd2l0aCB3aW5kb3cgTgorCQkJCSAgIChkZWZhdWx0OiBuZXh0IHdpbmRvdykKK3xDVFJMLVdfenwJQ1RSTC1XIHoJICAgY2xvc2UgcHJldmlldyB3aW5kb3cKK3xDVFJMLVdfYmFyfAlDVFJMLVcgfAkgICBzZXQgd2luZG93IHdpZHRoIHRvIE4gY29sdW1ucworfENUUkwtV199fAlDVFJMLVcgfQkgICBzaG93IHRhZyB1bmRlciBjdXJzb3IgaW4gcHJldmlldyB3aW5kb3cKK3xDVFJMLVdfPERvd24+fAlDVFJMLVcgPERvd24+CSAgIHNhbWUgYXMgIkNUUkwtVyBqIgorfENUUkwtV188VXA+fAlDVFJMLVcgPFVwPgkgICBzYW1lIGFzICJDVFJMLVcgayIKK3xDVFJMLVdfPExlZnQ+fAlDVFJMLVcgPExlZnQ+CSAgIHNhbWUgYXMgIkNUUkwtVyBoIgorfENUUkwtV188UmlnaHQ+fCBDVFJMLVcgPFJpZ2h0PgkgICBzYW1lIGFzICJDVFJMLVcgbCIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLjMgU3F1YXJlIGJyYWNrZXQgY29tbWFuZHMJCQkJCSpbKiAqXSoKKwordGFnCQljaGFyCSAgICAgIG5vdGUgYWN0aW9uIGluIE5vcm1hbCBtb2RlCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfFtfQ1RSTC1EfAlbIENUUkwtRAkgICBqdW1wIHRvIGZpcnN0ICNkZWZpbmUgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyBtYXRjaGluZyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBiZWdpbm5pbmcgb2YKKwkJCQkgICBjdXJyZW50IGZpbGUKK3xbX0NUUkwtSXwJWyBDVFJMLUkJICAganVtcCB0byBmaXJzdCBsaW5lIGluIGN1cnJlbnQgYW5kIGluY2x1ZGVkCisJCQkJICAgZmlsZXMgdGhhdCBjb250YWlucyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBiZWdpbm5pbmcgb2YKKwkJCQkgICBjdXJyZW50IGZpbGUKK3xbI3wJCVsjCQkxICBjdXJzb3IgdG8gTiBwcmV2aW91cyB1bm1hdGNoZWQgI2lmLCAjZWxzZQorCQkJCSAgIG9yICNpZmRlZgorfFsnfAkJWycJCTEgIGN1cnNvciB0byBwcmV2aW91cyBsb3dlcmNhc2UgbWFyaywgb24gZmlyc3QKKwkJCQkgICBub24tYmxhbmsKK3xbKHwJCVsoCQkxICBjdXJzb3IgTiB0aW1lcyBiYWNrIHRvIHVubWF0Y2hlZCAnKCcKK3xbc3RhcnwJCVsqCQkxICBzYW1lIGFzICJbLyIKK3xbYHwJCVtgCQkxICBjdXJzb3IgdG8gcHJldmlvdXMgbG93ZXJjYXNlIG1hcmsKK3xbL3wJCVsvCQkxICBjdXJzb3IgdG8gTiBwcmV2aW91cyBzdGFydCBvZiBhIEMgY29tbWVudAorfFtEfAkJW0QJCSAgIGxpc3QgYWxsIGRlZmluZXMgZm91bmQgaW4gY3VycmVudCBhbmQKKwkJCQkgICBpbmNsdWRlZCBmaWxlcyBtYXRjaGluZyB0aGUgd29yZCB1bmRlciB0aGUKKwkJCQkgICBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBiZWdpbm5pbmcgb2YKKwkJCQkgICBjdXJyZW50IGZpbGUKK3xbSXwJCVtJCQkgICBsaXN0IGFsbCBsaW5lcyBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgd29yZCB1bmRlcgorCQkJCSAgIHRoZSBjdXJzb3IsIHN0YXJ0IHNlYXJjaGluZyBhdCBiZWdpbm5pbmcgb2YKKwkJCQkgICBjdXJyZW50IGZpbGUKK3xbUHwJCVtQCQkyICBzYW1lIGFzICJbcCIKK3xbW3wJCVtbCQkxICBjdXJzb3IgTiBzZWN0aW9ucyBiYWNrd2FyZAorfFtdfAkJW10JCTEgIGN1cnNvciBOIFNFQ1RJT05TIGJhY2t3YXJkCit8W2N8CQlbYwkJMSAgY3Vyc29yIE4gdGltZXMgYmFja3dhcmRzIHRvIHN0YXJ0IG9mIGNoYW5nZQorfFtkfAkJW2QJCSAgIHNob3cgZmlyc3QgI2RlZmluZSBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIG1hdGNoaW5nIHRoZSB3b3JkIHVuZGVyIHRoZQorCQkJCSAgIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGJlZ2lubmluZyBvZgorCQkJCSAgIGN1cnJlbnQgZmlsZQorfFtmfAkJW2YJCSAgIHNhbWUgYXMgImdmIgorfFtpfAkJW2kJCSAgIHNob3cgZmlyc3QgbGluZSBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgdW5kZXIKKwkJCQkgICB0aGUgY3Vyc29yLCBzdGFydCBzZWFyY2hpbmcgYXQgYmVnaW5uaW5nIG9mCisJCQkJICAgY3VycmVudCBmaWxlCit8W3B8CQlbcAkJMiAgbGlrZSAiUCIsIGJ1dCBhZGp1c3QgaW5kZW50IHRvIGN1cnJlbnQgbGluZQorfFttfAkJW20JCTEgIGN1cnNvciBOIHRpbWVzIGJhY2sgdG8gc3RhcnQgb2YgbWVtYmVyCisJCQkJICAgZnVuY3Rpb24KK3xbenwJCVt6CQkxICBtb3ZlIHRvIHN0YXJ0IG9mIG9wZW4gZm9sZAorfFt7fAkJW3sJCTEgIGN1cnNvciBOIHRpbWVzIGJhY2sgdG8gdW5tYXRjaGVkICd7JworfFs8TWlkZGxlTW91c2U+IFs8TWlkZGxlTW91c2U+CTIgIHNhbWUgYXMgIltwIgorCit8XV9DVFJMLUR8CV0gQ1RSTC1ECSAgIGp1bXAgdG8gZmlyc3QgI2RlZmluZSBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIG1hdGNoaW5nIHRoZSB3b3JkIHVuZGVyIHRoZQorCQkJCSAgIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGN1cnNvciBwb3NpdGlvbgorfF1fQ1RSTC1JfAldIENUUkwtSQkgICBqdW1wIHRvIGZpcnN0IGxpbmUgaW4gY3VycmVudCBhbmQgaW5jbHVkZWQKKwkJCQkgICBmaWxlcyB0aGF0IGNvbnRhaW5zIHRoZSB3b3JkIHVuZGVyIHRoZQorCQkJCSAgIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGN1cnNvciBwb3NpdGlvbgorfF0jfAkJXSMJCTEgIGN1cnNvciB0byBOIG5leHQgdW5tYXRjaGVkICNlbmRpZiBvciAjZWxzZQorfF0nfAkJXScJCTEgIGN1cnNvciB0byBuZXh0IGxvd2VyY2FzZSBtYXJrLCBvbiBmaXJzdAorCQkJCSAgIG5vbi1ibGFuaworfF0pfAkJXSkJCTEgIGN1cnNvciBOIHRpbWVzIGZvcndhcmQgdG8gdW5tYXRjaGVkICcpJworfF1zdGFyfAkJXSoJCTEgIHNhbWUgYXMgIl0vIgorfF1gfAkJXWAJCTEgIGN1cnNvciB0byBuZXh0IGxvd2VyY2FzZSBtYXJrCit8XS98CQldLwkJMSAgY3Vyc29yIHRvIE4gbmV4dCBlbmQgb2YgYSBDIGNvbW1lbnQKK3xdRHwJCV1ECQkgICBsaXN0IGFsbCAjZGVmaW5lcyBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIG1hdGNoaW5nIHRoZSB3b3JkIHVuZGVyIHRoZQorCQkJCSAgIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGN1cnNvciBwb3NpdGlvbgorfF1JfAkJXUkJCSAgIGxpc3QgYWxsIGxpbmVzIGZvdW5kIGluIGN1cnJlbnQgYW5kCisJCQkJICAgaW5jbHVkZWQgZmlsZXMgdGhhdCBjb250YWluIHRoZSB3b3JkIHVuZGVyCisJCQkJICAgdGhlIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGN1cnNvcgorCQkJCSAgIHBvc2l0aW9uCit8XVB8CQldUAkJMiAgc2FtZSBhcyAiW3AiCit8XVt8CQldWwkJMSAgY3Vyc29yIE4gU0VDVElPTlMgZm9yd2FyZAorfF1dfAkJXV0JCTEgIGN1cnNvciBOIHNlY3Rpb25zIGZvcndhcmQKK3xdY3wJCV1jCQkxICBjdXJzb3IgTiB0aW1lcyBmb3J3YXJkIHRvIHN0YXJ0IG9mIGNoYW5nZQorfF1kfAkJXWQJCSAgIHNob3cgZmlyc3QgI2RlZmluZSBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIG1hdGNoaW5nIHRoZSB3b3JkIHVuZGVyIHRoZQorCQkJCSAgIGN1cnNvciwgc3RhcnQgc2VhcmNoaW5nIGF0IGN1cnNvciBwb3NpdGlvbgorfF1mfAkJXWYJCSAgIHNhbWUgYXMgImdmIgorfF1pfAkJXWkJCSAgIHNob3cgZmlyc3QgbGluZSBmb3VuZCBpbiBjdXJyZW50IGFuZAorCQkJCSAgIGluY2x1ZGVkIGZpbGVzIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgdW5kZXIKKwkJCQkgICB0aGUgY3Vyc29yLCBzdGFydCBzZWFyY2hpbmcgYXQgY3Vyc29yCisJCQkJICAgcG9zaXRpb24KK3xdcHwJCV1wCQkyICBsaWtlICJwIiwgYnV0IGFkanVzdCBpbmRlbnQgdG8gY3VycmVudCBsaW5lCit8XW18CQldbQkJMSAgY3Vyc29yIE4gdGltZXMgZm9yd2FyZCB0byBlbmQgb2YgbWVtYmVyCisJCQkJICAgZnVuY3Rpb24KK3xdenwJCV16CQkxICBtb3ZlIHRvIGVuZCBvZiBvcGVuIGZvbGQKK3xdfXwJCV19CQkxICBjdXJzb3IgTiB0aW1lcyBmb3J3YXJkIHRvIHVubWF0Y2hlZCAnfScKK3xdPE1pZGRsZU1vdXNlPiBdPE1pZGRsZU1vdXNlPgkyICBzYW1lIGFzICJdcCIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLjQgQ29tbWFuZHMgc3RhcnRpbmcgd2l0aCAnZycJCQkJCQkqZyoKKwordGFnCQljaGFyCSAgICAgIG5vdGUgYWN0aW9uIGluIE5vcm1hbCBtb2RlCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfGdfQ1RSTC1BfAlnIENUUkwtQQkgICBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCBNRU1fUFJPRklMRQorCQkJCSAgIGRlZmluZWQ6IGR1bXAgYSBtZW1vcnkgcHJvZmlsZQorfGdfQ1RSTC1HfAlnIENUUkwtRwkgICBzaG93IGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgY3Vyc29yCisJCQkJICAgcG9zaXRpb24KK3xnX0NUUkwtSHwJZyBDVFJMLUgJICAgc3RhcnQgU2VsZWN0IGJsb2NrIG1vZGUKK3xnX0NUUkwtXXwJZyBDVFJMLV0JICAgfDp0anVtcHwgdG8gdGhlIHRhZyB1bmRlciB0aGUgY3Vyc29yCit8ZyN8CQlnIwkJMSAgbGlrZSAiIyIsIGJ1dCB3aXRob3V0IHVzaW5nICJcPCIgYW5kICJcPiIKK3xnJHwJCWckCQkxICB3aGVuICd3cmFwJyBvZmYgZ28gdG8gcmlnaHRtb3N0IGNoYXJhY3RlciBvZgorCQkJCSAgIHRoZSBjdXJyZW50IGxpbmUgdGhhdCBpcyBvbiB0aGUgc2NyZWVuOworCQkJCSAgIHdoZW4gJ3dyYXAnIG9uIGdvIHRvIHRoZSByaWdodG1vc3QgY2hhcmFjdGVyCisJCQkJICAgb2YgdGhlIGN1cnJlbnQgc2NyZWVuIGxpbmUKK3xnJnwJCWcmCQkyICByZXBlYXQgbGFzdCAiOnMiIG9uIGFsbCBsaW5lcworfGcnfAkJZyd7bWFya30JMSAgbGlrZSB8J3wgYnV0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGp1bXBsaXN0Cit8Z2B8CQlnYHttYXJrfQkxICBsaWtlIHxgfCBidXQgd2l0aG91dCBjaGFuZ2luZyB0aGUganVtcGxpc3QKK3xnc3RhcnwJCWcqCQkxICBsaWtlICIqIiwgYnV0IHdpdGhvdXQgdXNpbmcgIlw8IiBhbmQgIlw+IgorfGcwfAkJZzAJCTEgIHdoZW4gJ3dyYXAnIG9mZiBnbyB0byBsZWZ0bW9zdCBjaGFyYWN0ZXIgb2YKKwkJCQkgICB0aGUgY3VycmVudCBsaW5lIHRoYXQgaXMgb24gdGhlIHNjcmVlbjsKKwkJCQkgICB3aGVuICd3cmFwJyBvbiBnbyB0byB0aGUgbGVmdG1vc3QgY2hhcmFjdGVyCisJCQkJICAgb2YgdGhlIGN1cnJlbnQgc2NyZWVuIGxpbmUKK3xnOHwJCWc4CQkgICBwcmludCBoZXggdmFsdWUgb2YgYnl0ZXMgdXNlZCBpbiBVVEYtOAorCQkJCSAgIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yCit8Zz98CQlnPwkJMiAgUm90MTMgZW5jb2Rpbmcgb3BlcmF0b3IKK3xnP2c/fAkJZz8/CQkyICBSb3QxMyBlbmNvZGUgY3VycmVudCBsaW5lCit8Zz9nP3wJCWc/Zz8JCTIgIFJvdDEzIGVuY29kZSBjdXJyZW50IGxpbmUKK3xnRHwJCWdECQkxICBnbyB0byBkZWZpbml0aW9uIG9mIHdvcmQgdW5kZXIgdGhlIGN1cnNvcgorCQkJCSAgIGluIGN1cnJlbnQgZmlsZQorfGdFfAkJZ0UJCTEgIGdvIGJhY2t3YXJkcyB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cworCQkJCSAgIFdPUkQKK3xnSHwJCWdICQkgICBzdGFydCBTZWxlY3QgbGluZSBtb2RlCit8Z0l8CQlnSQkJMiAgbGlrZSAiSSIsIGJ1dCBhbHdheXMgc3RhcnQgaW4gY29sdW1uIDEKK3xnSnwJCWdKCQkyICBqb2luIGxpbmVzIHdpdGhvdXQgaW5zZXJ0aW5nIHNwYWNlCit8Z1B8CQlbInhdZ1AJCTIgIHB1dCB0aGUgdGV4dCBbZnJvbSByZWdpc3RlciB4XSBiZWZvcmUgdGhlCisJCQkJICAgY3Vyc29yIE4gdGltZXMsIGxlYXZlIHRoZSBjdXJzb3IgYWZ0ZXIgaXQKK3xnUnwJCWdSCQkyICBlbnRlciBWaXJ0dWFsIFJlcGxhY2UgbW9kZQorfGdVfAkJZ1V7bW90aW9ufQkyICBtYWtlIE5tb3ZlIHRleHQgdXBwZXJjYXNlCit8Z1Z8CQlnVgkJICAgZG9uJ3QgcmVzZWxlY3QgdGhlIHByZXZpb3VzIFZpc3VhbCBhcmVhCisJCQkJICAgd2hlbiBleGVjdXRpbmcgYSBtYXBwaW5nIG9yIG1lbnUgaW4gU2VsZWN0CisJCQkJICAgbW9kZQorfGddfAkJZ10JCSAgIDp0c2VsZWN0IG9uIHRoZSB0YWcgdW5kZXIgdGhlIGN1cnNvcgorfGdefAkJZ14JCTEgIHdoZW4gJ3dyYXAnIG9mZiBnbyB0byBsZWZ0bW9zdCBub24td2hpdGUKKwkJCQkgICBjaGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQgbGluZSB0aGF0IGlzIG9uCisJCQkJICAgdGhlIHNjcmVlbjsgd2hlbiAnd3JhcCcgb24gZ28gdG8gdGhlCisJCQkJICAgbGVmdG1vc3Qgbm9uLXdoaXRlIGNoYXJhY3RlciBvZiB0aGUgY3VycmVudAorCQkJCSAgIHNjcmVlbiBsaW5lCit8Z2F8CQlnYQkJICAgcHJpbnQgYXNjaWkgdmFsdWUgb2YgY2hhcmFjdGVyIHVuZGVyIHRoZQorCQkJCSAgIGN1cnNvcgorfGdkfAkJZ2QJCTEgIGdvIHRvIGRlZmluaXRpb24gb2Ygd29yZCB1bmRlciB0aGUgY3Vyc29yCisJCQkJICAgaW4gY3VycmVudCBmdW5jdGlvbgorfGdlfAkJZ2UJCTEgIGdvIGJhY2t3YXJkcyB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cworCQkJCSAgIHdvcmQKK3xnZnwJCWdmCQkgICBzdGFydCBlZGl0aW5nIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgdW5kZXIKKwkJCQkgICB0aGUgY3Vyc29yCit8Z2d8CQlnZwkJMSAgY3Vyc29yIHRvIGxpbmUgTiwgZGVmYXVsdCBmaXJzdCBsaW5lCit8Z2h8CQlnaAkJICAgc3RhcnQgU2VsZWN0IG1vZGUKK3xnaXwJCWdpCQkyICBsaWtlICJpIiwgYnV0IGZpcnN0IG1vdmUgdG8gdGhlIHwnXnwgbWFyaworfGdqfAkJZ2oJCTEgIGxpa2UgImoiLCBidXQgd2hlbiAnd3JhcCcgb24gZ28gTiBzY3JlZW4KKwkJCQkgICBsaW5lcyBkb3duCit8Z2t8CQlnawkJMSAgbGlrZSAiayIsIGJ1dCB3aGVuICd3cmFwJyBvbiBnbyBOIHNjcmVlbgorCQkJCSAgIGxpbmVzIHVwCit8Z218CQlnbQkJMSAgZ28gdG8gY2hhcmFjdGVyIGF0IG1pZGRsZSBvZiB0aGUgc2NyZWVubGluZQorfGdvfAkJZ28JCTEgIGN1cnNvciB0byBieXRlIE4gaW4gdGhlIGJ1ZmZlcgorfGdwfAkJWyJ4XWdwCQkyICBwdXQgdGhlIHRleHQgW2Zyb20gcmVnaXN0ZXIgeF0gYWZ0ZXIgdGhlCisJCQkJICAgY3Vyc29yIE4gdGltZXMsIGxlYXZlIHRoZSBjdXJzb3IgYWZ0ZXIgaXQKK3xncXwJCWdxe21vdGlvbn0JMiAgZm9ybWF0IE5tb3ZlIHRleHQKK3xncnwJCWdye2NoYXJ9CTIgIHZpcnR1YWwgcmVwbGFjZSBOIGNoYXJzIHdpdGgge2NoYXJ9Cit8Z3N8CQlncwkJICAgZ28gdG8gc2xlZXAgZm9yIE4gc2Vjb25kcyAoZGVmYXVsdCAxKQorfGd1fAkJZ3V7bW90aW9ufQkyICBtYWtlIE5tb3ZlIHRleHQgbG93ZXJjYXNlCit8Z3Z8CQlndgkJICAgcmVzZWxlY3QgdGhlIHByZXZpb3VzIFZpc3VhbCBhcmVhCit8Z3d8CQlnd3ttb3Rpb259CTIgIGZvcm1hdCBObW92ZSB0ZXh0IGFuZCBrZWVwIGN1cnNvcgorfGd+fAkJZ357bW90aW9ufQkyICBzd2FwIGNhc2UgZm9yIE5tb3ZlIHRleHQKK3xnPERvd24+fAlnPERvd24+CQkxICBzYW1lIGFzICJnaiIKK3xnPEVuZD58CWc8RW5kPgkJMSAgc2FtZSBhcyAiZyQiCit8ZzxIb21lPnwJZzxIb21lPgkJMSAgc2FtZSBhcyAiZzAiCit8ZzxMZWZ0TW91c2U+fAlnPExlZnRNb3VzZT4JICAgc2FtZSBhcyA8Qy1MZWZ0TW91c2U+CisJCWc8TWlkZGxlTW91c2U+CSAgIHNhbWUgYXMgPEMtTWlkZGxlTW91c2U+Cit8ZzxSaWdodE1vdXNlPnwJZzxSaWdodE1vdXNlPgkgICBzYW1lIGFzIDxDLVJpZ2h0TW91c2U+Cit8ZzxVcD58CQlnPFVwPgkJMSAgc2FtZSBhcyAiZ2siCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi41IENvbW1hbmRzIHN0YXJ0aW5nIHdpdGggJ3onCQkJCQkJKnoqCisKK3RhZwkJY2hhcgkgICAgICBub3RlIGFjdGlvbiBpbiBOb3JtYWwgbW9kZQl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3x6PENSPnwJCXo8Q1I+CQkgICByZWRyYXcsIGN1cnNvciBsaW5lIHRvIHRvcCBvZiB3aW5kb3csCisJCQkJICAgY3Vyc29yIG9uIGZpcnN0IG5vbi1ibGFuaworfHpOPENSPnwJentoZWlnaHR9PENSPgkgICByZWRyYXcsIG1ha2Ugd2luZG93IHtoZWlnaHR9IGxpbmVzIGhpZ2gKK3x6K3wJCXorCQkgICBjdXJzb3Igb24gbGluZSBOIChkZWZhdWx0IGxpbmUgYmVsb3cKKwkJCQkgICB3aW5kb3cpLCBvdGhlcndpc2UgbGlrZSAiejxDUj4iCit8ei18CQl6LQkJICAgcmVkcmF3LCBjdXJzb3IgbGluZSBhdCBib3R0b20gb2Ygd2luZG93LAorCQkJCSAgIGN1cnNvciBvbiBmaXJzdCBub24tYmxhbmsKK3x6LnwJCXouCQkgICByZWRyYXcsIGN1cnNvciBsaW5lIHRvIGNlbnRlciBvZiB3aW5kb3csCisJCQkJICAgY3Vyc29yIG9uIGZpcnN0IG5vbi1ibGFuaworfHpBfAkJekEJCSAgIG9wZW4gYSBjbG9zZWQgZm9sZCBvciBjbG9zZSBhbiBvcGVuIGZvbGQKKwkJCQkgICByZWN1cnNpdmVseQorfHpDfAkJekMJCSAgIGNsb3NlIGZvbGRzIHJlY3Vyc2l2ZWx5Cit8ekR8CQl6RAkJICAgZGVsZXRlIGZvbGRzIHJlY3Vyc2l2ZWx5Cit8ekV8CQl6RQkJICAgZWxpbWluYXRlIGFsbCBmb2xkcworfHpGfAkJekYJCSAgIGNyZWF0ZSBhIGZvbGQgZm9yIE4gbGluZXMKK3x6TXwJCXpNCQkgICBzZXQgJ2ZvbGRsZXZlbCcgdG8gemVybworfHpOfAkJek4JCSAgIHNldCAnZm9sZGVuYWJsZScKK3x6T3wJCXpPCQkgICBvcGVuIGZvbGRzIHJlY3Vyc2l2ZWx5Cit8elJ8CQl6UgkJICAgc2V0ICdmb2xkbGV2ZWwnIHRvIHRoZSBkZWVwZXN0IGZvbGQKK3x6WHwJCXpYCQkgICByZS1hcHBseSAnZm9sZGxldmVsJworfHpefAkJel4JCSAgIGN1cnNvciBvbiBsaW5lIE4gKGRlZmF1bHQgbGluZSBhYm92ZQorCQkJCSAgIHdpbmRvdyksIG90aGVyd2lzZSBsaWtlICJ6LSIKK3x6YXwJCXphCQkgICBvcGVuIGEgY2xvc2VkIGZvbGQsIGNsb3NlIGFuIG9wZW4gZm9sZAorfHpifAkJemIJCSAgIHJlZHJhdywgY3Vyc29yIGxpbmUgYXQgYm90dG9tIG9mIHdpbmRvdworfHpjfAkJemMJCSAgIGNsb3NlIGEgZm9sZAorfHpkfAkJemQJCSAgIGRlbGV0ZSBhIGZvbGQKK3x6ZXwJCXplCQkgICB3aGVuICd3cmFwJyBvZmYgc2Nyb2xsIGhvcml6b250YWxseSB0bworCQkJCSAgIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCAocmlnaHQgc2lkZSkKKwkJCQkgICBvZiB0aGUgc2NyZWVuCit8emZ8CQl6Znttb3Rpb259CSAgIGNyZWF0ZSBhIGZvbGQgZm9yIE5tb3ZlIHRleHQKK3x6aHwJCXpoCQkgICB3aGVuICd3cmFwJyBvZmYgc2Nyb2xsIHNjcmVlbiBOIGNoYXJhY3RlcnMKKwkJCQkgICB0byB0aGUgcmlnaHQKK3x6aXwJCXppCQkgICB0b2dnbGUgJ2ZvbGRlbmFibGUnCit8emp8CQl6agkJMSAgbW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZm9sZAorfHprfAkJemsJCTEgIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZm9sZAorfHpsfAkJemwJCSAgIHdoZW4gJ3dyYXAnIG9mZiBzY3JvbGwgc2NyZWVuIE4gY2hhcmFjdGVycworCQkJCSAgIHRvIHRoZSBsZWZ0Cit8em18CQl6bQkJICAgc3VidHJhY3Qgb25lIGZyb20gJ2ZvbGRsZXZlbCcKK3x6bnwJCXpuCQkgICByZXNldCAnZm9sZGVuYWJsZScKK3x6b3wJCXpvCQkgICBvcGVuIGZvbGQKK3x6cnwJCXpyCQkgICBhZGQgb25lIHRvICdmb2xkbGV2ZWwnCit8enN8CQl6cwkJICAgd2hlbiAnd3JhcCcgb2ZmIHNjcm9sbCBob3Jpem9udGFsbHkgdG8KKwkJCQkgICBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBzdGFydCAobGVmdAorCQkJCSAgIHNpZGUpIG9mIHRoZSBzY3JlZW4KK3x6dHwJCXp0CQkgICByZWRyYXcsIGN1cnNvciBsaW5lIGF0IHRvcCBvZiB3aW5kb3cKK3x6dnwJCXp2CQkgICBvcGVuIGVub3VnaCBmb2xkcyB0byB2aWV3IHRoZSBjdXJzb3IgbGluZQorfHp4fAkJengJCSAgIHJlLWFwcGx5ICdmb2xkbGV2ZWwnIGFuZCBkbyAienYiCit8enp8CQl6egkJICAgcmVkcmF3LCBjdXJzb3IgbGluZSBhdCBjZW50ZXIgb2Ygd2luZG93Cit8ejxMZWZ0PnwJejxMZWZ0PgkJICAgc2FtZSBhcyAiemgiCit8ejxSaWdodD58CXo8UmlnaHQ+CSAgIHNhbWUgYXMgInpsIgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFZpc3VhbCBtb2RlCQkJCQkJKnZpc3VhbC1pbmRleCoKKworTW9zdCBjb21tYW5kcyBpbiBWaXN1YWwgbW9kZSBhcmUgdGhlIHNhbWUgYXMgaW4gTm9ybWFsIG1vZGUuIFRoZSBvbmVzIGxpc3RlZAoraGVyZSBhcmUgdGhvc2UgdGhhdCBhcmUgZGlmZmVyZW50LgorCit0YWcJCWNvbW1hbmQJICAgICAgbm90ZSBhY3Rpb24gaW4gVmlzdWFsIG1vZGUJfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8dl9DVFJMLVxfQ1RSTC1OfCBDVFJMLVwgQ1RSTC1OCSAgIHN0b3AgVmlzdWFsIG1vZGUKK3x2X0NUUkwtXF9DVFJMLUd8IENUUkwtXCBDVFJMLUcJICAgZ28gdG8gbW9kZSBzcGVjaWZpZWQgd2l0aCAnaW5zZXJ0bW9kZScKK3x2X0NUUkwtR3wJQ1RSTC1HCQkgICB0b2dnbGUgYmV0d2VlbiBWaXN1YWwgbW9kZSBhbmQgU2VsZWN0IG1vZGUKK3x2XzxCUz58CTxCUz4JCTIgIFNlbGVjdCBtb2RlOiBkZWxldGUgaGlnaGxpZ2h0ZWQgYXJlYQorfHZfQ1RSTC1IfAlDVFJMLUgJCTIgIHNhbWUgYXMgPEJTPgorfHZfQ1RSTC1PfAlDVFJMLU8JCSAgIHN3aXRjaCBmcm9tIFNlbGVjdCB0byBWaXN1YWwgbW9kZSBmb3Igb25lCisJCQkJICAgY29tbWFuZAorfHZfQ1RSTC1WfAlDVFJMLVYJCSAgIG1ha2UgVmlzdWFsIG1vZGUgYmxvY2t3aXNlIG9yIHN0b3AgVmlzdWFsCisJCQkJICAgbW9kZQorfHZfQ1RSTC1dfAlDVFJMLV0JCSAgIGp1bXAgdG8gaGlnaGxpZ2h0ZWQgdGFnCit8dl8hfAkJIXtmaWx0ZXJ9CTIgIGZpbHRlciB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgdGhyb3VnaCB0aGUKKwkJCQkgICBleHRlcm5hbCBjb21tYW5kIHtmaWx0ZXJ9Cit8dl86fAkJOgkJICAgc3RhcnQgYSBjb21tYW5kLWxpbmUgd2l0aCB0aGUgaGlnaGxpZ2h0ZWQKKwkJCQkgICBsaW5lcyBhcyBhIHJhbmdlCit8dl88fAkJPAkJMiAgc2hpZnQgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIG9uZQorCQkJCSAgICdzaGlmdHdpZHRoJyBsZWZ0Cit8dl89fAkJPQkJMiAgZmlsdGVyIHRoZSBoaWdobGlnaHRlZCBsaW5lcyB0aHJvdWdoIHRoZQorCQkJCSAgIGV4dGVybmFsIHByb2dyYW0gZ2l2ZW4gd2l0aCB0aGUgJ2VxdWFscHJnJworCQkJCSAgIG9wdGlvbgorfHZfPnwJCT4JCTIgIHNoaWZ0IHRoZSBoaWdobGlnaHRlZCBsaW5lcyBvbmUKKwkJCQkgICAnc2hpZnR3aWR0aCcgcmlnaHQKK3x2X2JfQXwJCUEJCTIgIGJsb2NrIG1vZGU6IGFwcGVuZCBzYW1lIHRleHQgaW4gYWxsIGxpbmVzLAorCQkJCSAgIGFmdGVyIHRoZSBoaWdobGlnaHRlZCBhcmVhCit8dl9DfAkJQwkJMiAgZGVsZXRlIHRoZSBoaWdobGlnaHRlZCBsaW5lcyBhbmQgc3RhcnQKKwkJCQkgICBpbnNlcnQKK3x2X0R8CQlECQkyICBkZWxldGUgdGhlIGhpZ2hsaWdodGVkIGxpbmVzCit8dl9iX0l8CQlJCQkyICBibG9jayBtb2RlOiBpbnNlcnQgc2FtZSB0ZXh0IGluIGFsbCBsaW5lcywKKwkJCQkgICBiZWZvcmUgdGhlIGhpZ2hsaWdodGVkIGFyZWEKK3x2X0p8CQlKCQkyICBqb2luIHRoZSBoaWdobGlnaHRlZCBsaW5lcworfHZfS3wJCUsJCSAgIHJ1biAna2V5d29yZHByZycgb24gdGhlIGhpZ2hsaWdodGVkIGFyZWEKK3x2X098CQlPCQkgICBNb3ZlIGhvcml6b250YWxseSB0byBvdGhlciBjb3JuZXIgb2YgYXJlYS4KKwkJUQkJICAgZG9lcyBub3Qgc3RhcnQgRXggbW9kZQorfHZfUnwJCVIJCTIgIGRlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgYW5kIHN0YXJ0CisJCQkJICAgaW5zZXJ0Cit8dl9TfAkJUwkJMiAgZGVsZXRlIHRoZSBoaWdobGlnaHRlZCBsaW5lcyBhbmQgc3RhcnQKKwkJCQkgICBpbnNlcnQKK3x2X1V8CQlVCQkyICBtYWtlIGhpZ2hsaWdodGVkIGFyZWEgdXBwZXJjYXNlCit8dl9WfAkJVgkJICAgbWFrZSBWaXN1YWwgbW9kZSBsaW5ld2lzZSBvciBzdG9wIFZpc3VhbAorCQkJCSAgIG1vZGUKK3x2X1h8CQlYCQkyICBkZWxldGUgdGhlIGhpZ2hsaWdodGVkIGxpbmVzCit8dl9ZfAkJWQkJICAgeWFuayB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMKK3x2X2EofAkJYSgJCSAgIHNhbWUgYXMgYWIKK3x2X2EpfAkJYSkJCSAgIHNhbWUgYXMgYWIKK3x2X2E8fAkJYTwJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggYSA8PiBibG9jaworfHZfYT58CQlhPgkJICAgc2FtZSBhcyBhPAorfHZfYUJ8CQlhQgkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBhIHt9IGJsb2NrCit8dl9hV3wJCWFXCQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoICJhIFdPUkQiCit8dl9hW3wJCWFbCQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoIGEgW10gYmxvY2sKK3x2X2FdfAkJYV0JCSAgIHNhbWUgYXMgYVsKK3x2X2FifAkJYWIJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggYSAoKSBibG9jaworfHZfYXB8CQlhcAkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBhIHBhcmFncmFwaAorfHZfYXN8CQlhcwkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBhIHNlbnRlbmNlCit8dl9hd3wJCWF3CQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoICJhIHdvcmQiCit8dl9he3wJCWF7CQkgICBzYW1lIGFzIGFCCit8dl9hfXwJCWF9CQkgICBzYW1lIGFzIGFCCit8dl9jfAkJYwkJMiAgZGVsZXRlIGhpZ2hsaWdodGVkIGFyZWEgYW5kIHN0YXJ0IGluc2VydAorfHZfZHwJCWQJCTIgIGRlbGV0ZSBoaWdobGlnaHRlZCBhcmVhCit8dl9nSnwJCWdKCQkyICBqb2luIHRoZSBoaWdobGlnaHRlZCBsaW5lcyB3aXRob3V0CisJCQkJICAgaW5zZXJ0aW5nIHNwYWNlcworfHZfZ3F8CQlncQkJMiAgZm9ybWF0IHRoZSBoaWdobGlnaHRlZCBsaW5lcworfHZfZ3Z8CQlndgkJICAgZXhjaGFuZ2UgY3VycmVudCBhbmQgcHJldmlvdXMgaGlnaGxpZ2h0ZWQKKwkJCQkgICBhcmVhCit8dl9pKHwJCWkoCQkgICBzYW1lIGFzIGliCit8dl9pKXwJCWkpCQkgICBzYW1lIGFzIGliCit8dl9pPHwJCWk8CQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoIGlubmVyIDw+IGJsb2NrCit8dl9pPnwJCWk+CQkgICBzYW1lIGFzIGk8Cit8dl9pQnwJCWlCCQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoIGlubmVyIHt9IGJsb2NrCit8dl9pV3wJCWlXCQkgICBleHRlbmQgaGlnaGxpZ2h0ZWQgYXJlYSB3aXRoICJpbm5lciBXT1JEIgorfHZfaVt8CQlpWwkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBpbm5lciBbXSBibG9jaworfHZfaV18CQlpXQkJICAgc2FtZSBhcyBpWworfHZfaWJ8CQlpYgkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBpbm5lciAoKSBibG9jaworfHZfaXB8CQlpcAkJICAgZXh0ZW5kIGhpZ2hsaWdodGVkIGFyZWEgd2l0aCBpbm5lciBwYXJhZ3JhcGgKK3x2X2lzfAkJaXMJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggaW5uZXIgc2VudGVuY2UKK3x2X2l3fAkJaXcJCSAgIGV4dGVuZCBoaWdobGlnaHRlZCBhcmVhIHdpdGggImlubmVyIHdvcmQiCit8dl9pe3wJCWl7CQkgICBzYW1lIGFzIGlCCit8dl9pfXwJCWl9CQkgICBzYW1lIGFzIGlCCit8dl9vfAkJbwkJICAgbW92ZSBjdXJzb3IgdG8gb3RoZXIgY29ybmVyIG9mIGFyZWEKK3x2X3J8CQlyCQkyICBkZWxldGUgaGlnaGxpZ2h0ZWQgYXJlYSBhbmQgc3RhcnQgaW5zZXJ0Cit8dl9zfAkJcwkJMiAgZGVsZXRlIGhpZ2hsaWdodGVkIGFyZWEgYW5kIHN0YXJ0IGluc2VydAorfHZfdXwJCXUJCTIgIG1ha2UgaGlnaGxpZ2h0ZWQgYXJlYSBsb3dlcmNhc2UKK3x2X3Z8CQl2CQkgICBtYWtlIFZpc3VhbCBtb2RlIGNoYXJhY3Rlcndpc2Ugb3Igc3RvcAorCQkJCSAgIFZpc3VhbCBtb2RlCit8dl94fAkJeAkJMiAgZGVsZXRlIHRoZSBoaWdobGlnaHRlZCBhcmVhCit8dl95fAkJeQkJICAgeWFuayB0aGUgaGlnaGxpZ2h0ZWQgYXJlYQorfHZffnwJCX4JCTIgIHN3YXAgY2FzZSBmb3IgdGhlIGhpZ2hsaWdodGVkIGFyZWEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBDb21tYW5kLWxpbmUgZWRpdGluZwkJCQkJKmV4LWVkaXQtaW5kZXgqCisKK0dldCB0byB0aGUgY29tbWFuZC1saW5lIHdpdGggdGhlICc6JywgJyEnLCAnLycgb3IgJz8nIGNvbW1hbmRzLgorTm9ybWFsIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKyJDb21wbGV0aW9uIiBiZWxvdyByZWZlcnMgdG8gY29udGV4dC1zZW5zaXRpdmUgY29tcGxldGlvbi4gIEl0IHdpbGwgY29tcGxldGUKK2ZpbGUgbmFtZXMsIHRhZ3MsIGNvbW1hbmRzIGV0Yy4gYXMgYXBwcm9wcmlhdGUuCisKKwkJQ1RSTC1ACQlub3QgdXNlZAorfGNfQ1RSTC1BfAlDVFJMLUEJCWRvIGNvbXBsZXRpb24gb24gdGhlIHBhdHRlcm4gaW4gZnJvbnQgb2YgdGhlCisJCQkJY3Vyc29yIGFuZCBpbnNlcnQgYWxsIG1hdGNoZXMKK3xjX0NUUkwtQnwJQ1RSTC1CCQljdXJzb3IgdG8gYmVnaW4gb2YgY29tbWFuZC1saW5lCit8Y19DVFJMLUN8CUNUUkwtQwkJc2FtZSBhcyA8RVNDPgorfGNfQ1RSTC1EfAlDVFJMLUQJCWxpc3QgY29tcGxldGlvbnMgdGhhdCBtYXRjaCB0aGUgcGF0dGVybiBpbgorCQkJCWZyb250IG9mIHRoZSBjdXJzb3IKK3xjX0NUUkwtRXwJQ1RSTC1FCQljdXJzb3IgdG8gZW5kIG9mIGNvbW1hbmQtbGluZQorfCdjZWRpdCd8CUNUUkwtRgkJZGVmYXVsdCB2YWx1ZSBmb3IgJ2NlZGl0Jzogb3BlbnMgdGhlCisJCQkJY29tbWFuZC1saW5lIHdpbmRvdzsgb3RoZXJ3aXNlIG5vdCB1c2VkCisJCUNUUkwtRwkJbm90IHVzZWQKK3xjXzxCUz58CTxCUz4JCWRlbGV0ZSB0aGUgY2hhcmFjdGVyIGluIGZyb250IG9mIHRoZSBjdXJzb3IKK3xjX2RpZ3JhcGh8CXtjaGFyMX0gPEJTPiB7Y2hhcjJ9CisJCQkJZW50ZXIgZGlncmFwaCB3aGVuICdkaWdyYXBoJyBpcyBvbgorfGNfQ1RSTC1IfAlDVFJMLUgJCXNhbWUgYXMgPEJTPgorfGNfPFRhYj58CTxUYWI+CQlpZiAnd2lsZGNoYXInIGlzIDxUYWI+OiBEbyBjb21wbGV0aW9uIG9uCisJCQkJdGhlIHBhdHRlcm4gaW4gZnJvbnQgb2YgdGhlIGN1cnNvcgorfGNfPFMtVGFiPnwJPFMtVGFiPgkJc2FtZSBhcyBDVFJMLVAKK3xjX3dpbGRjaGFyfAknd2lsZGNoYXInCURvIGNvbXBsZXRpb24gb24gdGhlIHBhdHRlcm4gaW4gZnJvbnQgb2YgdGhlCisJCQkJY3Vyc29yIChkZWZhdWx0OiA8VGFiPikKK3xjX0NUUkwtSXwJQ1RSTC1JCQlzYW1lIGFzIDxUYWI+Cit8Y188Tkw+fAk8Tkw+CQlzYW1lIGFzIDxDUj4KK3xjX0NUUkwtSnwJQ1RSTC1KCQlzYW1lIGFzIDxDUj4KK3xjX0NUUkwtS3wJQ1RSTC1LIHtjaGFyMX0ge2NoYXIyfQorCQkJCWVudGVyIGRpZ3JhcGgKK3xjX0NUUkwtTHwJQ1RSTC1MCQlkbyBjb21wbGV0aW9uIG9uIHRoZSBwYXR0ZXJuIGluIGZyb250IG9mIHRoZQorCQkJCWN1cnNvciBhbmQgaW5zZXJ0IHRoZSBsb25nZXN0IGNvbW1vbiBwYXJ0Cit8Y188Q1I+fAk8Q1I+CQlleGVjdXRlIGVudGVyZWQgY29tbWFuZAorfGNfPENSPnwJQ1RSTC1NCQlzYW1lIGFzIDxDUj4KK3xjX0NUUkwtTnwJQ1RSTC1OCQlhZnRlciB1c2luZyAnd2lsZGNoYXInIHdpdGggbXVsdGlwbGUgbWF0Y2hlczoKKwkJCQlnbyB0byBuZXh0IG1hdGNoLCBvdGhlcndpc2U6IHNhbWUgYXMgPERvd24+CisJCUNUUkwtTwkJbm90IHVzZWQKK3xjX0NUUkwtUHwJQ1RSTC1QCQlhZnRlciB1c2luZyAnd2lsZGNoYXInIHdpdGggbXVsdGlwbGUgbWF0Y2hlczoKKwkJCQlnbyB0byBwcmV2aW91cyBtYXRjaCwgb3RoZXJ3aXNlOiBzYW1lIGFzIDxVcD4KK3xjX0NUUkwtUXwJQ1RSTC1RCQlzYW1lIGFzIENUUkwtViwgdW5sZXNzIGl0J3MgdXNlZCBmb3IgdGVybWluYWwKKwkJCQljb250cm9sIGZsb3cKK3xjX0NUUkwtUnwJQ1RSTC1SIHswLTlhLXoiJSMqOj0gQ1RSTC1GIENUUkwtUCBDVFJMLVcgQ1RSTC1BfQorCQkJCWluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciBvciBvYmplY3QKKwkJCQl1bmRlciB0aGUgY3Vyc29yIGFzIGlmIHR5cGVkCit8Y19DVFJMLVJfQ1RSTC1SfCBDVFJMLVIgQ1RSTC1SIHswLTlhLXoiJSMqOj0gQ1RSTC1GIENUUkwtUCBDVFJMLVcgQ1RSTC1BfQorCQkJCWluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciBvciBvYmplY3QKKwkJCQl1bmRlciB0aGUgY3Vyc29yIGxpdGVyYWxseQorCQlDVFJMLVMJCSh1c2VkIGZvciB0ZXJtaW5hbCBjb250cm9sIGZsb3cpCisJCUNUUkwtVAkJbm90IHVzZWQKK3xjX0NUUkwtVXwJQ1RSTC1VCQlyZW1vdmUgYWxsIGNoYXJhY3RlcnMKK3xjX0NUUkwtVnwJQ1RSTC1WCQlpbnNlcnQgbmV4dCBub24tZGlnaXQgbGl0ZXJhbGx5LCBpbnNlcnQgdGhyZWUKKwkJCQlkaWdpdCBkZWNpbWFsIG51bWJlciBhcyBhIHNpbmdsZSBieXRlLgorfGNfQ1RSTC1XfAlDVFJMLVcJCWRlbGV0ZSB0aGUgd29yZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yCisJCUNUUkwtWAkJbm90IHVzZWQgKHJlc2VydmVkIGZvciBjb21wbGV0aW9uKQorCQlDVFJMLVkJCWNvcHkgKHlhbmspIG1vZGVsZXNzIHNlbGVjdGlvbgorCQlDVFJMLVoJCW5vdCB1c2VkIChyZXNlcnZlZCBmb3Igc3VzcGVuZCkKK3xjXzxFc2M+fAk8RXNjPgkJYWJhbmRvbiBjb21tYW5kLWxpbmUgd2l0aG91dCBleGVjdXRpbmcgaXQKK3xjXzxFc2M+fAlDVFJMLVsJCXNhbWUgYXMgPEVzYz4KK3xjX0NUUkwtXF9DVFJMLU58IENUUkwtXCBDVFJMLU4JIGdvIHRvIE5vcm1hbCBtb2RlLCBhYmFuZG9uIGNvbW1hbmQtbGluZQorfGNfQ1RSTC1cX0NUUkwtR3wgQ1RSTC1cIENUUkwtRwkgZ28gdG8gbW9kZSBzcGVjaWZpZWQgd2l0aCAnaW5zZXJ0bW9kZScsCisJCQkJYWJhbmRvbiBjb21tYW5kLWxpbmUKKwkJQ1RSTC1cIGEgLSBkCXJlc2VydmVkIGZvciBleHRlbnNpb25zCit8Y19DVFJMLVxfZXwJQ1RSTC1cIGUge2V4cHJ9IHJlcGxhY2UgdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSByZXN1bHQgb2YKKwkJCQl7ZXhwcn0KKwkJQ1RSTC1cIGYgLSB6CXJlc2VydmVkIGZvciBleHRlbnNpb25zCisJCUNUUkwtXCBvdGhlcnMJbm90IHVzZWQKKwkJQ1RSTC1dCQlub3QgdXNlZAorfGNfQ1RSTC1efAlDVFJMLV4JCXRvZ2dsZSB1c2Ugb2YgfDpsbWFwfCBtYXBwaW5ncworfGNfQ1RSTC1ffAlDVFJMLV8JCXdoZW4gJ2FsbG93cmV2aW5zJyBzZXQ6IGNoYW5nZSBsYW5ndWFnZQorCQkJCShIZWJyZXcsIEZhcnNpKQorfGNfPERlbD58CTxEZWw+CQlkZWxldGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yCisKK3xjXzxMZWZ0PnwJPExlZnQ+CQljdXJzb3IgbGVmdAorfGNfPFMtTGVmdD58CTxTLUxlZnQ+CWN1cnNvciBvbmUgd29yZCBsZWZ0Cit8Y188Qy1MZWZ0PnwJPEMtTGVmdD4JY3Vyc29yIG9uZSB3b3JkIGxlZnQKK3xjXzxSaWdodD58CTxSaWdodD4JCWN1cnNvciByaWdodAorfGNfPFMtUmlnaHQ+fAk8Uy1SaWdodD4JY3Vyc29yIG9uZSB3b3JkIHJpZ2h0Cit8Y188Qy1SaWdodD58CTxDLVJpZ2h0PgljdXJzb3Igb25lIHdvcmQgcmlnaHQKK3xjXzxVcD58CTxVcD4JCXJlY2FsbCBwcmV2aW91cyBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5IHRoYXQKKwkJCQltYXRjaGVzIHBhdHRlcm4gaW4gZnJvbnQgb2YgdGhlIGN1cnNvcgorfGNfPFMtVXA+fAk8Uy1VcD4JCXJlY2FsbCBwcmV2aW91cyBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5Cit8Y188RG93bj58CTxEb3duPgkJcmVjYWxsIG5leHQgY29tbWFuZC1saW5lIGZyb20gaGlzdG9yeSB0aGF0CisJCQkJbWF0Y2hlcyBwYXR0ZXJuIGluIGZyb250IG9mIHRoZSBjdXJzb3IKK3xjXzxTLURvd24+fAk8Uy1Eb3duPglyZWNhbGwgbmV4dCBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5Cit8Y188SG9tZT58CTxIb21lPgkJY3Vyc29yIHRvIHN0YXJ0IG9mIGNvbW1hbmQtbGluZQorfGNfPEVuZD58CTxFbmQ+CQljdXJzb3IgdG8gZW5kIG9mIGNvbW1hbmQtbGluZQorfGNfPFBhZ2VEb3duPnwJPFBhZ2VEb3duPglzYW1lIGFzIDxTLURvd24+Cit8Y188UGFnZVVwPnwJPFBhZ2VVcD4Jc2FtZSBhcyA8Uy1VcD4KK3xjXzxJbnNlcnQ+fAk8SW5zZXJ0Pgl0b2dnbGUgaW5zZXJ0L292ZXJzdHJpa2UgbW9kZQorfGNfPExlZnRNb3VzZT58CTxMZWZ0TW91c2U+CWN1cnNvciBhdCBtb3VzZSBjbGljaworCitZb3UgZm91bmQgaXQsIEFydGh1ciEJCQkJKmhvbHktZ3JhaWwqCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gRVggY29tbWFuZHMJCQkJCSpleC1jbWQtaW5kZXgqICo6aW5kZXgqCisKK1RoaXMgaXMgYSBicmllZiBidXQgY29tcGxldGUgbGlzdGluZyBvZiBhbGwgdGhlICI6IiBjb21tYW5kcywgd2l0aG91dAorbWVudGlvbmluZyBhbnkgYXJndW1lbnRzLiAgVGhlIG9wdGlvbmFsIHBhcnQgb2YgdGhlIGNvbW1hbmQgbmFtZSBpcyBpbnNpZGUgW10uCitUaGUgY29tbWFuZHMgYXJlIHNvcnRlZCBvbiB0aGUgbm9uLW9wdGlvbmFsIHBhcnQgb2YgdGhlaXIgbmFtZS4KKworfDohfAkJOiEJCWZpbHRlciBsaW5lcyBvciBleGVjdXRlIGFuIGV4dGVybmFsIGNvbW1hbmQKK3w6ISF8CQk6ISEJCXJlcGVhdCBsYXN0ICI6ISIgY29tbWFuZAorfDojfAkJOiMJCXNhbWUgYXMgIjpudW1iZXIiCit8OiZ8CQk6JgkJcmVwZWF0IGxhc3QgIjpzdWJzdGl0dXRlIgorfDpzdGFyfAkJOioJCWV4ZWN1dGUgY29udGVudHMgb2YgYSByZWdpc3RlcgorfDo8fAkJOjwJCXNoaWZ0IGxpbmVzIG9uZSAnc2hpZnR3aWR0aCcgbGVmdAorfDo9fAkJOj0JCXByaW50IHRoZSBjdXJzb3IgbGluZSBudW1iZXIKK3w6PnwJCTo+CQlzaGlmdCBsaW5lcyBvbmUgJ3NoaWZ0d2lkdGgnIHJpZ2h0Cit8OkB8CQk6QAkJZXhlY3V0ZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyCit8OkBAfAkJOkBACQlyZXBlYXQgdGhlIHByZXZpb3VzICI6QCIKK3w6TmV4dHwJCTpOW2V4dF0JCWdvIHRvIHByZXZpb3VzIGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QKK3w6UHJpbnR8CTpQW3JpbnRdCXByaW50IGxpbmVzCit8Olh8CQk6WAkJYXNrIGZvciBlbmNyeXB0aW9uIGtleQorfDphcHBlbmR8CTphW3BwZW5kXQlhcHBlbmQgdGV4dAorfDphYmJyZXZpYXRlfAk6YWJbYnJldmlhdGVdCWVudGVyIGFiYnJldmlhdGlvbgorfDphYmNsZWFyfAk6YWJjW2xlYXJdCXJlbW92ZSBhbGwgYWJicmV2aWF0aW9ucworfDphYm92ZWxlZnR8CTphYm9bdmVsZWZ0XQltYWtlIHNwbGl0IHdpbmRvdyBhcHBlYXIgbGVmdCBvciBhYm92ZQorfDphbGx8CQk6YWxbbF0JCW9wZW4gYSB3aW5kb3cgZm9yIGVhY2ggZmlsZSBpbiB0aGUgYXJndW1lbnQKKwkJCQlsaXN0Cit8OmFtZW51fAk6YW1bZW51XQllbnRlciBuZXcgbWVudSBpdGVtIGZvciBhbGwgbW9kZXMKK3w6YW5vcmVtZW51fAk6YW5bb3JlbWVudV0JZW50ZXIgYSBuZXcgbWVudSBmb3IgYWxsIG1vZGVzIHRoYXQgd2lsbCBub3QKKwkJCQliZSByZW1hcHBlZAorfDphcmdzfAkJOmFyW2dzXQkJcHJpbnQgdGhlIGFyZ3VtZW50IGxpc3QKK3w6YXJnYWRkfAk6YXJnYVtkZF0JYWRkIGl0ZW1zIHRvIHRoZSBhcmd1bWVudCBsaXN0Cit8OmFyZ2RlbGV0ZXwJOmFyZ2RbZWxldGVdCWRlbGV0ZSBpdGVtcyBmcm9tIHRoZSBhcmd1bWVudCBsaXN0Cit8OmFyZ2VkaXR8CTphcmdlW2RpdF0JYWRkIGl0ZW0gdG8gdGhlIGFyZ3VtZW50IGxpc3QgYW5kIGVkaXQgaXQKK3w6YXJnZG98CTphcmdkbwkJZG8gYSBjb21tYW5kIG9uIGFsbCBpdGVtcyBpbiB0aGUgYXJndW1lbnQgbGlzdAorfDphcmdnbG9iYWx8CTphcmdnW2xvYmFsXQlkZWZpbmUgdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0Cit8OmFyZ2xvY2FsfAk6YXJnbFtvY2FsXQlkZWZpbmUgYSBsb2NhbCBhcmd1bWVudCBsaXN0Cit8OmFyZ3VtZW50fAk6YXJndVttZW50XQlnbyB0byBzcGVjaWZpYyBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0Cit8OmFzY2lpfAk6YXNbY2lpXQlwcmludCBhc2NpaSB2YWx1ZSBvZiBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvcgorfDphdXRvY21kfAk6YXVbdG9jbWRdCWVudGVyIG9yIHNob3cgYXV0b2NvbW1hbmRzCit8OmF1Z3JvdXB8CTphdWdbcm91cF0Jc2VsZWN0IHRoZSBhdXRvY29tbWFuZCBncm91cCB0byB1c2UKK3w6YXVubWVudXwJOmF1blttZW51XQlyZW1vdmUgbWVudSBmb3IgYWxsIG1vZGVzCit8OmJ1ZmZlcnwJOmJbdWZmZXJdCWdvIHRvIHNwZWNpZmljIGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6Yk5leHR8CTpiTltleHRdCWdvIHRvIHByZXZpb3VzIGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6YmFsbHwJCTpiYVtsbF0JCW9wZW4gYSB3aW5kb3cgZm9yIGVhY2ggYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdAorfDpiYWRkfAkJOmJhZFtkXQkJYWRkIGJ1ZmZlciB0byB0aGUgYnVmZmVyIGxpc3QKK3w6YmRlbGV0ZXwJOmJkW2VsZXRlXQlyZW1vdmUgYSBidWZmZXIgZnJvbSB0aGUgYnVmZmVyIGxpc3QKK3w6YmVoYXZlfAk6YmVbaGF2ZV0Jc2V0IG1vdXNlIGFuZCBzZWxlY3Rpb24gYmVoYXZpb3IKK3w6YmVsb3dyaWdodHwJOmJlbFtvd3JpZ2h0XQltYWtlIHNwbGl0IHdpbmRvdyBhcHBlYXIgcmlnaHQgb3IgYmVsb3cKK3w6YmZpcnN0fAk6YmZbaXJzdF0JZ28gdG8gZmlyc3QgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdAorfDpibGFzdHwJOmJsW2FzdF0JZ28gdG8gbGFzdCBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0Cit8OmJtb2RpZmllZHwJOmJtW29kaWZpZWRdCWdvIHRvIG5leHQgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdCB0aGF0IGhhcworCQkJCWJlZW4gbW9kaWZpZWQKK3w6Ym5leHR8CTpibltleHRdCWdvIHRvIG5leHQgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdAorfDpib3RyaWdodHwJOmJvW3RyaWdodF0JbWFrZSBzcGxpdCB3aW5kb3cgYXBwZWFyIGF0IGJvdHRvbSBvciBmYXIgcmlnaHQKK3w6YnByZXZpb3VzfAk6YnBbcmV2aW91c10JZ28gdG8gcHJldmlvdXMgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdAorfDpicmV3aW5kfAk6YnJbZXdpbmRdCWdvIHRvIGZpcnN0IGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6YnJlYWt8CTpicmVhW2tdCWJyZWFrIG91dCBvZiB3aGlsZSBsb29wCit8OmJyZWFrYWRkfAk6YnJlYWthW2RkXQlhZGQgYSBkZWJ1Z2dlciBicmVha3BvaW50Cit8OmJyZWFrZGVsfAk6YnJlYWtkW2VsXQlkZWxldGUgYSBkZWJ1Z2dlciBicmVha3BvaW50Cit8OmJyZWFrbGlzdHwJOmJyZWFrbFtpc3RdCWxpc3QgZGVidWdnZXIgYnJlYWtwb2ludHMKK3w6YnJvd3NlfAk6YnJvW3dzZV0JdXNlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZworfDpidWZkb3wJOmJ1ZmRvCQlleGVjdXRlIGNvbW1hbmQgaW4gZWFjaCBsaXN0ZWQgYnVmZmVyCit8OmJ1ZmZlcnN8CTpidWZmZXJzCWxpc3QgYWxsIGZpbGVzIGluIHRoZSBidWZmZXIgbGlzdAorfDpidW5sb2FkfAk6YnVuW2xvYWRdCXVubG9hZCBhIHNwZWNpZmljIGJ1ZmZlcgorfDpid2lwZW91dHwJOmJ3W2lwZW91dF0JcmVhbGx5IGRlbGV0ZSBhIGJ1ZmZlcgorfDpjaGFuZ2V8CTpjW2hhbmdlXQlyZXBsYWNlIGEgbGluZSBvciBzZXJpZXMgb2YgbGluZXMKK3w6Y05leHR8CTpjTltleHRdCWdvIHRvIHByZXZpb3VzIGVycm9yCit8OmNOZmlsZXwJOmNOZltpbGVdCWdvIHRvIGxhc3QgZXJyb3IgaW4gcHJldmlvdXMgZmlsZQorfDpjYWJicmV2fAk6Y2FbYmJyZXZdCWxpa2UgIjphYmJyZXZpYXRlIiBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmNhYmNsZWFyfAk6Y2FiY1tsZWFyXQljbGVhciBhbGwgYWJicmV2aWF0aW9ucyBmb3IgQ29tbWFuZC1saW5lIG1vZGUKK3w6Y2FsbHwJCTpjYWxbbF0JCWNhbGwgYSBmdW5jdGlvbgorfDpjYXRjaHwJOmNhdFtjaF0JcGFydCBvZiBhIDp0cnkgY29tbWFuZAorfDpjY3wJCTpjYwkJZ28gdG8gc3BlY2lmaWMgZXJyb3IKK3w6Y2Nsb3NlfAk6Y2NsW29zZV0JY2xvc2UgcXVpY2tmaXggd2luZG93Cit8OmNkfAkJOmNkCQljaGFuZ2UgZGlyZWN0b3J5Cit8OmNlbnRlcnwJOmNlW250ZXJdCWZvcm1hdCBsaW5lcyBhdCB0aGUgY2VudGVyCit8OmNmaWxlfAk6Y2ZbaWxlXQlyZWFkIGZpbGUgd2l0aCBlcnJvciBtZXNzYWdlcyBhbmQganVtcCB0byBmaXJzdAorfDpjZmlyc3R8CTpjZmlyW3N0XQlnbyB0byB0aGUgc3BlY2lmaWVkIGVycm9yLCBkZWZhdWx0IGZpcnN0IG9uZQorfDpjZ2V0ZmlsZXwJOmNnW2V0ZmlsZV0JcmVhZCBmaWxlIHdpdGggZXJyb3IgbWVzc2FnZXMKK3w6Y2hhbmdlc3wJOmNoYVtuZ2VzXQlwcmludCB0aGUgY2hhbmdlIGxpc3QKK3w6Y2hkaXJ8CTpjaGRbaXJdCWNoYW5nZSBkaXJlY3RvcnkKK3w6Y2hlY2twYXRofAk6Y2hlW2NrcGF0aF0JbGlzdCBpbmNsdWRlZCBmaWxlcworfDpjaGVja3RpbWV8CTpjaGVja3RbaW1lXQljaGVjayB0aW1lc3RhbXAgb2YgbG9hZGVkIGJ1ZmZlcnMKK3w6Y2xpc3R8CTpjbFtpc3RdCWxpc3QgYWxsIGVycm9ycworfDpjbGFzdHwJOmNsYVtzdF0JZ28gdG8gdGhlIHNwZWNpZmllZCBlcnJvciwgZGVmYXVsdCBsYXN0IG9uZQorfDpjbG9zZXwJOmNsb1tzZV0JY2xvc2UgY3VycmVudCB3aW5kb3cKK3w6Y21hcHwJCTpjbVthcF0JCWxpa2UgIjptYXAiIGJ1dCBmb3IgQ29tbWFuZC1saW5lIG1vZGUKK3w6Y21hcGNsZWFyfAk6Y21hcGNbbGVhcl0JY2xlYXIgYWxsIG1hcHBpbmdzIGZvciBDb21tYW5kLWxpbmUgbW9kZQorfDpjbWVudXwJOmNtZVtudV0JYWRkIG1lbnUgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmNuZXh0fAk6Y25bZXh0XQlnbyB0byBuZXh0IGVycm9yCit8OmNuZXdlcnwJOmNuZXdbZXJdCWdvIHRvIG5ld2VyIGVycm9yIGxpc3QKK3w6Y25maWxlfAk6Y25mW2lsZV0JZ28gdG8gZmlyc3QgZXJyb3IgaW4gbmV4dCBmaWxlCit8OmNub3JlbWFwfAk6Y25vW3JlbWFwXQlsaWtlICI6bm9yZW1hcCIgYnV0IGZvciBDb21tYW5kLWxpbmUgbW9kZQorfDpjbm9yZWFiYnJldnwJOmNub3JlYVtiYnJldl0JbGlrZSAiOm5vcmVhYmJyZXYiIGJ1dCBmb3IgQ29tbWFuZC1saW5lIG1vZGUKK3w6Y25vcmVtZW51fAk6Y25vcmVtZVtudV0JbGlrZSAiOm5vcmVtZW51IiBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmNvcHl8CQk6Y29bcHldCQljb3B5IGxpbmVzCit8OmNvbGRlcnwJOmNvbFtkZXJdCWdvIHRvIG9sZGVyIGVycm9yIGxpc3QKK3w6Y29sb3JzY2hlbWV8CTpjb2xvW3JzY2hlbWVdCWxvYWQgYSBzcGVjaWZpYyBjb2xvciBzY2hlbWUKK3w6Y29tbWFuZHwJOmNvbVttYW5kXQljcmVhdGUgdXNlci1kZWZpbmVkIGNvbW1hbmQKK3w6Y29tY2xlYXJ8CTpjb21jW2xlYXJdCWNsZWFyIGFsbCB1c2VyLWRlZmluZWQgY29tbWFuZHMKK3w6Y29tcGlsZXJ8CTpjb21wW2lsZXJdCWRvIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGNvbXBpbGVyCit8OmNvbnRpbnVlfAk6Y29uW3RpbnVlXQlnbyBiYWNrIHRvIDp3aGlsZQorfDpjb25maXJtfAk6Y29uZltpcm1dCXByb21wdCB1c2VyIHdoZW4gY29uZmlybWF0aW9uIHJlcXVpcmVkCit8OmNvcGVufAk6Y29wZVtuXQlvcGVuIHF1aWNrZml4IHdpbmRvdworfDpjcHJldmlvdXN8CTpjcFtyZXZpb3VzXQlnbyB0byBwcmV2aW91cyBlcnJvcgorfDpjcGZpbGV8CTpjcGZbaWxlXQlnbyB0byBsYXN0IGVycm9yIGluIHByZXZpb3VzIGZpbGUKK3w6Y3F1aXR8CTpjcVt1aXRdCXF1aXQgVmltIHdpdGggYW4gZXJyb3IgY29kZQorfDpjcmV3aW5kfAk6Y3JbZXdpbmRdCWdvIHRvIHRoZSBzcGVjaWZpZWQgZXJyb3IsIGRlZmF1bHQgZmlyc3Qgb25lCit8OmNzY29wZXwJOmNzW2NvcGVdICAgICAgIGV4ZWN1dGUgY3Njb3BlIGNvbW1hbmQKK3w6Y3N0YWd8CTpjc3RbYWddCXVzZSBjc2NvcGUgdG8ganVtcCB0byBhIHRhZworfDpjdW5tYXB8CTpjdVtubWFwXQlsaWtlICI6dW5tYXAiIGJ1dCBmb3IgQ29tbWFuZC1saW5lIG1vZGUKK3w6Y3VuYWJicmV2fAk6Y3VuYVtiYnJldl0JbGlrZSAiOnVuYWJicmV2IiBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmN1bm1lbnV8CTpjdW5tZVtudV0JcmVtb3ZlIG1lbnUgZm9yIENvbW1hbmQtbGluZSBtb2RlCit8OmN3aW5kb3d8CTpjd1tpbmRvd10Jb3BlbiBvciBjbG9zZSBxdWlja2ZpeCB3aW5kb3cKK3w6ZGVsZXRlfAk6ZFtlbGV0ZV0JZGVsZXRlIGxpbmVzCit8OmRlYnVnfAk6ZGViW3VnXQlydW4gYSBjb21tYW5kIGluIGRlYnVnZ2luZyBtb2RlCit8OmRlYnVnZ3JlZWR5fAk6ZGVidWdnW3JlZWR5XQlyZWFkIGRlYnVnIG1vZGUgY29tbWFuZHMgZnJvbSBub3JtYWwgaW5wdXQKK3w6ZGVsY29tbWFuZHwJOmRlbGNbb21tYW5kXQlkZWxldGUgdXNlci1kZWZpbmVkIGNvbW1hbmQKK3w6ZGVsZnVuY3Rpb258CTpkZWxmW3VuY3Rpb25dCWRlbGV0ZSBhIHVzZXIgZnVuY3Rpb24KK3w6ZGlmZnVwZGF0ZXwJOmRpZltmdXBkYXRlXQl1cGRhdGUgJ2RpZmYnIGJ1ZmZlcnMKK3w6ZGlmZmdldHwJOmRpZmZnW2V0XQlyZW1vdmUgZGlmZmVyZW5jZXMgaW4gY3VycmVudCBidWZmZXIKK3w6ZGlmZnBhdGNofAk6ZGlmZnBbYXRjaF0JYXBwbHkgYSBwYXRjaCBhbmQgc2hvdyBkaWZmZXJlbmNlcworfDpkaWZmcHV0fAk6ZGlmZnB1W3RdCXJlbW92ZSBkaWZmZXJlbmNlcyBpbiBvdGhlciBidWZmZXIKK3w6ZGlmZnNwbGl0fAk6ZGlmZnNbcGxpdF0Jc2hvdyBkaWZmZXJlbmNlcyB3aXRoIGFub3RoZXIgZmlsZQorfDpkaWZmdGhpc3wJOmRpZmZ0aGlzCW1ha2UgY3VycmVudCB3aW5kb3cgYSBkaWZmIHdpbmRvdworfDpkaWdyYXBoc3wJOmRpZ1tyYXBoc10Jc2hvdyBvciBlbnRlciBkaWdyYXBocworfDpkaXNwbGF5fAk6ZGlbc3BsYXldCWRpc3BsYXkgcmVnaXN0ZXJzCit8OmRqdW1wfAk6ZGpbdW1wXQlqdW1wIHRvICNkZWZpbmUKK3w6ZGxpc3R8CTpkbFtpc3RdCWxpc3QgI2RlZmluZXMKK3w6ZG9hdXRvY21kfAk6ZG9bYXV0b2NtZF0JYXBwbHkgYXV0b2NvbW1hbmRzIHRvIGN1cnJlbnQgYnVmZmVyCit8OmRvYXV0b2FsbHwJOmRvYXV0b2FbbGxdCWFwcGx5IGF1dG9jb21tYW5kcyBmb3IgYWxsIGxvYWRlZCBidWZmZXJzCit8OmRyb3B8CQk6ZHJbb3BdCQlqdW1wIHRvIHdpbmRvdyBlZGl0aW5nIGZpbGUgb3IgZWRpdCBmaWxlIGluCisJCQkJY3VycmVudCB3aW5kb3cKK3w6ZHNlYXJjaHwJOmRzW2VhcmNoXQlsaXN0IG9uZSAjZGVmaW5lCit8OmRzcGxpdHwJOmRzcFtsaXRdCXNwbGl0IHdpbmRvdyBhbmQganVtcCB0byAjZGVmaW5lCit8OmVkaXR8CQk6ZVtkaXRdCQllZGl0IGEgZmlsZQorfDplY2hvfAkJOmVjW2hvXQkJZWNob2VzIHRoZSByZXN1bHQgb2YgZXhwcmVzc2lvbnMKK3w6ZWNob2VycnwJOmVjaG9lW3JyXQlsaWtlIDplY2hvLCBzaG93IGxpa2UgYW4gZXJyb3IgYW5kIHVzZSBoaXN0b3J5Cit8OmVjaG9obHwJOmVjaG9oW2xdCXNldCBoaWdobGlnaHRpbmcgZm9yIGVjaG8gY29tbWFuZHMKK3w6ZWNob21zZ3wJOmVjaG9tW3NnXQlzYW1lIGFzIDplY2hvLCBwdXQgbWVzc2FnZSBpbiBoaXN0b3J5Cit8OmVjaG9ufAk6ZWNob24JCXNhbWUgYXMgOmVjaG8sIGJ1dCB3aXRob3V0IDxFT0w+Cit8OmVsc2V8CQk6ZWxbc2VdCQlwYXJ0IG9mIGFuIDppZiBjb21tYW5kCit8OmVsc2VpZnwJOmVsc2VpW2ZdCXBhcnQgb2YgYW4gOmlmIGNvbW1hbmQKK3w6ZW1lbnV8CTplbVtlbnVdCWV4ZWN1dGUgYSBtZW51IGJ5IG5hbWUKK3w6ZW5kaWZ8CTplbltkaWZdCWVuZCBwcmV2aW91cyA6aWYKK3w6ZW5kZnVuY3Rpb258CTplbmRmW3VuY3Rpb25dCWVuZCBvZiBhIHVzZXIgZnVuY3Rpb24KK3w6ZW5kdHJ5fAk6ZW5kdFtyeV0JZW5kIHByZXZpb3VzIDp0cnkKK3w6ZW5kd2hpbGV8CTplbmR3W2hpbGVdCWVuZCBwcmV2aW91cyA6d2hpbGUKK3w6ZW5ld3wJCTplbmVbd10JCWVkaXQgYSBuZXcsIHVubmFtZWQgYnVmZmVyCit8OmV4fAkJOmV4CQlzYW1lIGFzICI6ZWRpdCIKK3w6ZXhlY3V0ZXwJOmV4ZVtjdXRlXQlleGVjdXRlIHJlc3VsdCBvZiBleHByZXNzaW9ucworfDpleGl0fAkJOmV4aVt0XQkJc2FtZSBhcyAiOnhpdCIKK3w6ZmlsZXwJCTpmW2lsZV0JCXNob3cgb3Igc2V0IHRoZSBjdXJyZW50IGZpbGUgbmFtZQorfDpmaWxlc3wJOmZpbGVzCQlsaXN0IGFsbCBmaWxlcyBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6ZmlsZXR5cGV8CTpmaWxldFt5cGVdCXN3aXRjaCBmaWxlIHR5cGUgZGV0ZWN0aW9uIG9uL29mZgorfDpmaW5kfAkJOmZpbltkXQkJZmluZCBmaWxlIGluICdwYXRoJyBhbmQgZWRpdCBpdAorfDpmaW5hbGx5fAk6ZmluYVtsbHldCXBhcnQgb2YgYSA6dHJ5IGNvbW1hbmQKK3w6ZmluaXNofAk6ZmluaVtzaF0JcXVpdCBzb3VyY2luZyBhIFZpbSBzY3JpcHQKK3w6Zmlyc3R8CTpmaXJbc3RdCWdvIHRvIHRoZSBmaXJzdCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0Cit8OmZpeGRlbHwJOmZpeFtkZWxdCXNldCBrZXkgY29kZSBvZiA8RGVsPgorfDpmb2xkfAkJOmZvW2xkXQkJY3JlYXRlIGEgZm9sZAorfDpmb2xkY2xvc2V8CTpmb2xkY1tsb3NlXQljbG9zZSBmb2xkcworfDpmb2xkZG9vcGVufAk6Zm9sZGRbb29wZW5dCWV4ZWN1dGUgY29tbWFuZCBvbiBsaW5lcyBub3QgaW4gYSBjbG9zZWQgZm9sZAorfDpmb2xkZG9jbG9zZWR8CTpmb2xkZG9jW2xvc2VkXQlleGVjdXRlIGNvbW1hbmQgb24gbGluZXMgaW4gYSBjbG9zZWQgZm9sZAorfDpmb2xkb3BlbnwJOmZvbGRvW3Blbl0Jb3BlbiBmb2xkcworfDpmdW5jdGlvbnwJOmZ1W25jdGlvbl0JZGVmaW5lIGEgdXNlciBmdW5jdGlvbgorfDpnbG9iYWx8CTpnW2xvYmFsXQlleGVjdXRlIGNvbW1hbmRzIGZvciBtYXRjaGluZyBsaW5lcworfDpnb3RvfAkJOmdvW3RvXQkJZ28gdG8gYnl0ZSBpbiB0aGUgYnVmZmVyCit8OmdyZXB8CQk6Z3JbZXBdCQlydW4gJ2dyZXBwcmcnIGFuZCBqdW1wIHRvIGZpcnN0IG1hdGNoCit8OmdyZXBhZGR8CTpncmVwYVtkZF0JbGlrZSBncmVwLCBidXQgYXBwZW5kIHRvIGN1cnJlbnQgbGlzdAorfDpndWl8CQk6Z3VbaV0JCXN0YXJ0IHRoZSBHVUkKK3w6Z3ZpbXwJCTpndltpbV0JCXN0YXJ0IHRoZSBHVUkKK3w6aGFyZGNvcHl8CTpoYVtyZGNvcHldCXNlbmQgdGV4dCB0byB0aGUgcHJpbnRlcgorfDpoZWxwfAkJOmhbZWxwXQkJb3BlbiBhIGhlbHAgd2luZG93Cit8OmhlbHBmaW5kfAk6aGVscGZbaW5kXQlkaWFsb2cgdG8gb3BlbiBhIGhlbHAgd2luZG93Cit8OmhlbHBncmVwfAk6aGVscGdbcmVwXQlsaWtlICI6Z3JlcCIgYnV0IHNlYXJjaGVzIGhlbHAgZmlsZXMKK3w6aGVscHRhZ3N8CTpoZWxwdFthZ3NdCWdlbmVyYXRlIGhlbHAgdGFncyBmb3IgYSBkaXJlY3RvcnkKK3w6aGlnaGxpZ2h0fAk6aGlbZ2hsaWdodF0Jc3BlY2lmeSBoaWdobGlnaHRpbmcgbWV0aG9kcworfDpoaWRlfAkJOmhpZFtlXQkJaGlkZSBjdXJyZW50IGJ1ZmZlciBmb3IgYSBjb21tYW5kCit8Omhpc3Rvcnl8CTpoaXNbdG9yeV0JcHJpbnQgYSBoaXN0b3J5IGxpc3QKK3w6aW5zZXJ0fAk6aVtuc2VydF0JaW5zZXJ0IHRleHQKK3w6aWFiYnJldnwJOmlhW2JicmV2XQlsaWtlICI6YWJicmV2IiBidXQgZm9yIEluc2VydCBtb2RlCit8OmlhYmNsZWFyfAk6aWFiY1tsZWFyXQlsaWtlICI6YWJjbGVhciIgYnV0IGZvciBJbnNlcnQgbW9kZQorfDppZnwJCTppZgkJZXhlY3V0ZSBjb21tYW5kcyB3aGVuIGNvbmRpdGlvbiBtZXQKK3w6aWp1bXB8CTppalt1bXBdCWp1bXAgdG8gZGVmaW5pdGlvbiBvZiBpZGVudGlmaWVyCit8OmlsaXN0fAk6aWxbaXN0XQlsaXN0IGxpbmVzIHdoZXJlIGlkZW50aWZpZXIgbWF0Y2hlcworfDppbWFwfAkJOmltW2FwXQkJbGlrZSAiOm1hcCIgYnV0IGZvciBJbnNlcnQgbW9kZQorfDppbWFwY2xlYXJ8CTppbWFwY1tsZWFyXQlsaWtlICI6bWFwY2xlYXIiIGJ1dCBmb3IgSW5zZXJ0IG1vZGUKK3w6aW1lbnV8CTppbWVbbnVdCWFkZCBtZW51IGZvciBJbnNlcnQgbW9kZQorfDppbm9yZW1hcHwJOmlub1tyZW1hcF0JbGlrZSAiOm5vcmVtYXAiIGJ1dCBmb3IgSW5zZXJ0IG1vZGUKK3w6aW5vcmVhYmJyZXZ8CTppbm9yZWFbYmJyZXZdCWxpa2UgIjpub3JlYWJicmV2IiBidXQgZm9yIEluc2VydCBtb2RlCit8Omlub3JlbWVudXwJOmlub3JlbWVbbnVdCWxpa2UgIjpub3JlbWVudSIgYnV0IGZvciBJbnNlcnQgbW9kZQorfDppbnRyb3wJOmludFtyb10JcHJpbnQgdGhlIGludHJvZHVjdG9yeSBtZXNzYWdlCit8OmlzZWFyY2h8CTppc1tlYXJjaF0JbGlzdCBvbmUgbGluZSB3aGVyZSBpZGVudGlmaWVyIG1hdGNoZXMKK3w6aXNwbGl0fAk6aXNwW2xpdF0Jc3BsaXQgd2luZG93IGFuZCBqdW1wIHRvIGRlZmluaXRpb24gb2YKKwkJCQlpZGVudGlmaWVyCit8Oml1bm1hcHwJOml1W25tYXBdCWxpa2UgIjp1bm1hcCIgYnV0IGZvciBJbnNlcnQgbW9kZQorfDppdW5hYmJyZXZ8CTppdW5hW2JicmV2XQlsaWtlICI6dW5hYmJyZXYiIGJ1dCBmb3IgSW5zZXJ0IG1vZGUKK3w6aXVubWVudXwJOml1bm1lW251XQlyZW1vdmUgbWVudSBmb3IgSW5zZXJ0IG1vZGUKK3w6am9pbnwJCTpqW29pbl0JCWpvaW4gbGluZXMKK3w6anVtcHN8CTpqdVttcHNdCXByaW50IHRoZSBqdW1wIGxpc3QKK3w6a3wJCTprCQlzZXQgYSBtYXJrCit8OmtlZXBtYXJrc3wJOmtlZVtwbWFya3NdCWZvbGxvd2luZyBjb21tYW5kIGtlZXBzIG1hcmtzIHdoZXJlIHRoZXkgYXJlCit8OmtlZXBqdW1wc3wJOmtlZXBqW2p1bXBzXQlmb2xsb3dpbmcgY29tbWFuZCBrZWVwcyBqdW1wbGlzdCBhbmQgbWFya3MKK3w6bGlzdHwJCTpsW2lzdF0JCXByaW50IGxpbmVzCit8Omxhc3R8CQk6bGFbc3RdCQlnbyB0byB0aGUgbGFzdCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0Cit8Omxhbmd1YWdlfAk6bGFuW2d1YWdlXQlzZXQgdGhlIGxhbmd1YWdlIChsb2NhbGUpCit8OmxjZHwJCTpsY1tkXQkJY2hhbmdlIGRpcmVjdG9yeSBsb2NhbGx5Cit8OmxjaGRpcnwJOmxjaFtkaXJdCWNoYW5nZSBkaXJlY3RvcnkgbG9jYWxseQorfDpsZWZ0fAkJOmxlW2Z0XQkJbGVmdCBhbGlnbiBsaW5lcworfDpsZWZ0YWJvdmV8CTpsZWZ0YVtib3ZlXQltYWtlIHNwbGl0IHdpbmRvdyBhcHBlYXIgbGVmdCBvciBhYm92ZQorfDpsZXR8CQk6bGV0CQlhc3NpZ24gYSB2YWx1ZSB0byBhIHZhcmlhYmxlIG9yIG9wdGlvbgorfDpsbWFwfAkJOmxtW2FwXQkJbGlrZSAiOm1hcCEiIGJ1dCBpbmNsdWRlcyBMYW5nLUFyZyBtb2RlCit8OmxtYXBjbGVhcnwJOmxtYXBjW2xlYXJdCWxpa2UgIjptYXBjbGVhciEiIGJ1dCBpbmNsdWRlcyBMYW5nLUFyZyBtb2RlCit8Omxub3JlbWFwfAk6bG5bb3JlbWFwXQlsaWtlICI6bm9yZW1hcCEiIGJ1dCBpbmNsdWRlcyBMYW5nLUFyZyBtb2RlCit8OmxvYWRrZXltYXB8CTpsb2Fka1tleW1hcF0JbG9hZCB0aGUgZm9sbG93aW5nIGtleW1hcHMgdW50aWwgRU9GCit8OmxvYWR2aWV3fAk6bG9bYWR2aWV3XQlsb2FkIHZpZXcgZm9yIGN1cnJlbnQgd2luZG93IGZyb20gYSBmaWxlCit8OmxvY2ttYXJrc3wJOmxvY1trbWFya3NdCWZvbGxvd2luZyBjb21tYW5kIGtlZXBzIG1hcmtzIHdoZXJlIHRoZXkgYXJlCit8OmxzfAkJOmxzCQlsaXN0IGFsbCBidWZmZXJzCit8Omx1bm1hcHwJOmx1W25tYXBdCWxpa2UgIjp1bm1hcCEiIGJ1dCBpbmNsdWRlcyBMYW5nLUFyZyBtb2RlCit8Om1vdmV8CQk6bVtvdmVdCQltb3ZlIGxpbmVzCit8Om1hcmt8CQk6bWFbcmtdCQlzZXQgYSBtYXJrCit8Om1ha2V8CQk6bWFrW2VdCQlleGVjdXRlIGV4dGVybmFsIGNvbW1hbmQgJ21ha2VwcmcnIGFuZCBwYXJzZQorCQkJCWVycm9yIG1lc3NhZ2VzCit8Om1hcHwJCTptYXAJCXNob3cgb3IgZW50ZXIgYSBtYXBwaW5nCit8Om1hcGNsZWFyfAk6bWFwY1tsZWFyXQljbGVhciBhbGwgbWFwcGluZ3MgZm9yIE5vcm1hbCBhbmQgVmlzdWFsIG1vZGUKK3w6bWFya3N8CTptYXJrcwkJbGlzdCBhbGwgbWFya3MKK3w6bWF0Y2h8CTptYXRbY2hdCWRlZmluZSBhIG1hdGNoIHRvIGhpZ2hsaWdodAorfDptZW51fAkJOm1lW251XQkJZW50ZXIgYSBuZXcgbWVudSBpdGVtCit8Om1lbnV0cmFuc2xhdGV8IDptZW51dFtyYW5zbGF0ZV0gYWRkIGEgbWVudSB0cmFuc2xhdGlvbiBpdGVtCit8Om1lc3NhZ2VzfAk6bWVzW3NhZ2VzXQl2aWV3IHByZXZpb3VzbHkgZGlzcGxheWVkIG1lc3NhZ2VzCit8Om1rZXhyY3wJOm1rW2V4cmNdCXdyaXRlIGN1cnJlbnQgbWFwcGluZ3MgYW5kIHNldHRpbmdzIHRvIGEgZmlsZQorfDpta3Nlc3Npb258CTpta3NbZXNzaW9uXQl3cml0ZSBzZXNzaW9uIGluZm8gdG8gYSBmaWxlCit8Om1rdmltcmN8CTpta3ZbaW1yY10Jd3JpdGUgY3VycmVudCBtYXBwaW5ncyBhbmQgc2V0dGluZ3MgdG8gYSBmaWxlCit8Om1rdmlld3wJOm1rdmllW3ddCXdyaXRlIHZpZXcgb2YgY3VycmVudCB3aW5kb3cgdG8gYSBmaWxlCit8Om1vZGV8CQk6bW9kW2VdCQlzaG93IG9yIGNoYW5nZSB0aGUgc2NyZWVuIG1vZGUKK3w6bmV4dHwJCTpuW2V4dF0JCWdvIHRvIG5leHQgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAorfDpuZXd8CQk6bmV3CQljcmVhdGUgYSBuZXcgZW1wdHkgd2luZG93Cit8Om5tYXB8CQk6bm1bYXBdCQlsaWtlICI6bWFwIiBidXQgZm9yIE5vcm1hbCBtb2RlCit8Om5tYXBjbGVhcnwJOm5tYXBjW2xlYXJdCWNsZWFyIGFsbCBtYXBwaW5ncyBmb3IgTm9ybWFsIG1vZGUKK3w6bm1lbnV8CTpubWVbbnVdCWFkZCBtZW51IGZvciBOb3JtYWwgbW9kZQorfDpubm9yZW1hcHwJOm5uW29yZW1hcF0JbGlrZSAiOm5vcmVtYXAiIGJ1dCBmb3IgTm9ybWFsIG1vZGUKK3w6bm5vcmVtZW51fAk6bm5vcmVtZVtudV0JbGlrZSAiOm5vcmVtZW51IiBidXQgZm9yIE5vcm1hbCBtb2RlCit8Om5vcmVtYXB8CTpub1tyZW1hcF0JZW50ZXIgYSBtYXBwaW5nIHRoYXQgd2lsbCBub3QgYmUgcmVtYXBwZWQKK3w6bm9obHNlYXJjaHwJOm5vaFtsc2VhcmNoXQlzdXNwZW5kICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nCit8Om5vcmVhYmJyZXZ8CTpub3JlYVtiYnJldl0JZW50ZXIgYW4gYWJicmV2aWF0aW9uIHRoYXQgd2lsbCBub3QgYmUKKwkJCQlyZW1hcHBlZAorfDpub3JlbWVudXwJOm5vcmVtZVtudV0JZW50ZXIgYSBtZW51IHRoYXQgd2lsbCBub3QgYmUgcmVtYXBwZWQKK3w6bm9ybWFsfAk6bm9ybVthbF0JZXhlY3V0ZSBOb3JtYWwgbW9kZSBjb21tYW5kcworfDpudW1iZXJ8CTpudVttYmVyXQlwcmludCBsaW5lcyB3aXRoIGxpbmUgbnVtYmVyCit8Om51bm1hcHwJOm51blttYXBdCWxpa2UgIjp1bm1hcCIgYnV0IGZvciBOb3JtYWwgbW9kZQorfDpudW5tZW51fAk6bnVubWVbbnVdCXJlbW92ZSBtZW51IGZvciBOb3JtYWwgbW9kZQorfDpvcGVufAkJOm9bcGVuXQkJc3RhcnQgb3BlbiBtb2RlIChub3QgaW1wbGVtZW50ZWQpCit8Om9tYXB8CQk6b21bYXBdCQlsaWtlICI6bWFwIiBidXQgZm9yIE9wZXJhdG9yLXBlbmRpbmcgbW9kZQorfDpvbWFwY2xlYXJ8CTpvbWFwY1tsZWFyXQlyZW1vdmUgYWxsIG1hcHBpbmdzIGZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGUKK3w6b21lbnV8CTpvbWVbbnVdCWFkZCBtZW51IGZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGUKK3w6b25seXwJCTpvbltseV0JCWNsb3NlIGFsbCB3aW5kb3dzIGV4Y2VwdCBjdXJyZW50IG9uZQorfDpvbm9yZW1hcHwJOm9ub1tyZW1hcF0JbGlrZSAiOm5vcmVtYXAiIGJ1dCBmb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlCit8Om9ub3JlbWVudXwJOm9ub3JlbWVbbnVdCWxpa2UgIjpub3JlbWVudSIgYnV0IGZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGUKK3w6b3B0aW9uc3wJOm9wdFtpb25zXQlvcGVuIHRoZSBvcHRpb25zLXdpbmRvdworfDpvdW5tYXB8CTpvdVtubWFwXQlsaWtlICI6dW5tYXAiIGJ1dCBmb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlCit8Om91bm1lbnV8CTpvdW5tZVtudV0JcmVtb3ZlIG1lbnUgZm9yIE9wZXJhdG9yLXBlbmRpbmcgbW9kZQorfDpwcmludHwJOnBbcmludF0JcHJpbnQgbGluZXMKK3w6cGNsb3NlfAk6cGNbbG9zZV0JY2xvc2UgcHJldmlldyB3aW5kb3cKK3w6cGVkaXR8CTpwZWRbaXRdCWVkaXQgZmlsZSBpbiB0aGUgcHJldmlldyB3aW5kb3cKK3w6cGVybHwJCTpwZVtybF0JCWV4ZWN1dGUgUGVybCBjb21tYW5kCit8OnBlcmxkb3wJOnBlcmxkW29dCWV4ZWN1dGUgUGVybCBjb21tYW5kIGZvciBlYWNoIGxpbmUKK3w6cG9wfAkJOnBvW3BdCQlqdW1wIHRvIG9sZGVyIGVudHJ5IGluIHRhZyBzdGFjaworfDpwb3B1cHwJOnBvcFt1cF0JcG9wdXAgYSBtZW51IGJ5IG5hbWUKK3w6cHBvcHwJCTpwcFtvcF0JCSI6cG9wIiBpbiBwcmV2aWV3IHdpbmRvdworfDpwcmVzZXJ2ZXwJOnByZVtzZXJ2ZV0Jd3JpdGUgYWxsIHRleHQgdG8gc3dhcCBmaWxlCit8OnByZXZpb3VzfAk6cHJldltpb3VzXQlnbyB0byBwcmV2aW91cyBmaWxlIGluIGFyZ3VtZW50IGxpc3QKK3w6cHJvbXB0ZmluZHwJOnByb1ttcHRmaW5kXQlTZWFyY2ggZGlhbG9nCit8OnByb21wdHJlcGx8CTpwcm9tcHRyW2VwbF0JU2VhcmNoL1JlcGxhY2UgZGlhbG9nCit8OnBzZWFyY2h8CTpwc1tlYXJjaF0JbGlrZSAiOmlqdW1wIiBidXQgc2hvd3MgbWF0Y2ggaW4gcHJldmlldyB3aW5kb3cKK3w6cHRhZ3wJCTpwdFthZ10JCXNob3cgdGFnIGluIHByZXZpZXcgd2luZG93Cit8OnB0TmV4dHwJOnB0TltleHRdCXw6dE5leHR8IGluIHByZXZpZXcgd2luZG93Cit8OnB0Zmlyc3R8CTpwdGZbaXJzdF0JfDp0cmV3aW5kfCBpbiBwcmV2aWV3IHdpbmRvdworfDpwdGp1bXB8CTpwdGpbdW1wXQl8OnRqdW1wfCBhbmQgc2hvdyB0YWcgaW4gcHJldmlldyB3aW5kb3cKK3w6cHRsYXN0fAk6cHRsW2FzdF0JfDp0bGFzdHwgaW4gcHJldmlldyB3aW5kb3cKK3w6cHRuZXh0fAk6cHRuW2V4dF0JfDp0bmV4dHwgaW4gcHJldmlldyB3aW5kb3cKK3w6cHRwcmV2aW91c3wJOnB0cFtyZXZpb3VzXQl8OnRwcmV2aW91c3wgaW4gcHJldmlldyB3aW5kb3cKK3w6cHRyZXdpbmR8CTpwdHJbZXdpbmRdCXw6dHJld2luZHwgaW4gcHJldmlldyB3aW5kb3cKK3w6cHRzZWxlY3R8CTpwdHNbZWxlY3RdCXw6dHNlbGVjdHwgYW5kIHNob3cgdGFnIGluIHByZXZpZXcgd2luZG93Cit8OnB1dHwJCTpwdVt0XQkJaW5zZXJ0IGNvbnRlbnRzIG9mIHJlZ2lzdGVyIGluIHRoZSB0ZXh0Cit8OnB3ZHwJCTpwd1tkXQkJcHJpbnQgY3VycmVudCBkaXJlY3RvcnkKK3w6cHl0aG9ufAk6cHlbdGhvbl0JZXhlY3V0ZSBQeXRob24gY29tbWFuZAorfDpweWZpbGV8CTpweWZbaWxlXQlleGVjdXRlIFB5dGhvbiBzY3JpcHQgZmlsZQorfDpxdWl0fAkJOnFbdWl0XQkJcXVpdCBjdXJyZW50IHdpbmRvdyAod2hlbiBvbmUgd2luZG93IHF1aXQgVmltKQorfDpxdWl0YWxsfAk6cXVpdGFbbGxdCXF1aXQgVmltCit8OnFhbGx8CQk6cWFbbGxdCQlxdWl0IFZpbQorfDpyZWFkfAkJOnJbZWFkXQkJcmVhZCBmaWxlIGludG8gdGhlIHRleHQKK3w6cmVjb3ZlcnwJOnJlY1tvdmVyXQlyZWNvdmVyIGEgZmlsZSBmcm9tIGEgc3dhcCBmaWxlCit8OnJlZG98CQk6cmVkW29dCQlyZWRvIG9uZSB1bmRvbmUgY2hhbmdlCit8OnJlZGlyfAk6cmVkaVtyXQlyZWRpcmVjdCBtZXNzYWdlcyB0byBhIGZpbGUgb3IgcmVnaXN0ZXIKK3w6cmVkcmF3fAk6cmVkclthd10JZm9yY2UgYSByZWRyYXcgb2YgdGhlIGRpc3BsYXkKK3w6cmVkcmF3c3RhdHVzfAk6cmVkcmF3c1t0YXR1c10JZm9yY2UgYSByZWRyYXcgb2YgdGhlIHN0YXR1cyBsaW5lKHMpCit8OnJlZ2lzdGVyc3wJOnJlZ1tpc3RlcnNdCWRpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVycworfDpyZXNpemV8CTpyZXNbaXplXQljaGFuZ2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0Cit8OnJldGFifAk6cmV0W2FiXQljaGFuZ2UgdGFiIHNpemUKK3w6cmV0dXJufAk6cmV0dVtybl0JcmV0dXJuIGZyb20gYSB1c2VyIGZ1bmN0aW9uCit8OnJld2luZHwJOnJld1tpbmRdCWdvIHRvIHRoZSBmaXJzdCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0Cit8OnJpZ2h0fAk6cmlbZ2h0XQlyaWdodCBhbGlnbiB0ZXh0Cit8OnJpZ2h0YmVsb3d8CTpyaWdodGJbZWxvd10JbWFrZSBzcGxpdCB3aW5kb3cgYXBwZWFyIHJpZ2h0IG9yIGJlbG93Cit8OnJ1Ynl8CQk6cnViW3ldCQlleGVjdXRlIFJ1YnkgY29tbWFuZAorfDpydWJ5ZG98CTpydWJ5ZFtvXQlleGVjdXRlIFJ1YnkgY29tbWFuZCBmb3IgZWFjaCBsaW5lCit8OnJ1YnlmaWxlfAk6cnVieWZbaWxlXQlleGVjdXRlIFJ1Ynkgc2NyaXB0IGZpbGUKK3w6cnVudGltZXwJOnJ1W250aW1lXQlzb3VyY2UgdmltIHNjcmlwdHMgaW4gJ3J1bnRpbWVwYXRoJworfDpydmltaW5mb3wJOnJ2W2ltaW5mb10JcmVhZCBmcm9tIHZpbWluZm8gZmlsZQorfDpzdWJzdGl0dXRlfAk6c1t1YnN0aXR1dGVdCWZpbmQgYW5kIHJlcGxhY2UgdGV4dAorfDpzTmV4dHwJOnNOW2V4dF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBwcmV2aW91cyBmaWxlIGluCisJCQkJYXJndW1lbnQgbGlzdAorfDpzYXJndW1lbnR8CTpzYVtyZ3VtZW50XQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIHNwZWNpZmljIGZpbGUgaW4KKwkJCQlhcmd1bWVudCBsaXN0Cit8OnNhbGx8CQk6c2FsW2xdCQlvcGVuIGEgd2luZG93IGZvciBlYWNoIGZpbGUgaW4gYXJndW1lbnQgbGlzdAorfDpzYXZlYXN8CTpzYXZbZWFzXQlzYXZlIGZpbGUgdW5kZXIgYW5vdGhlciBuYW1lLgorfDpzYnVmZmVyfAk6c2JbdWZmZXJdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gc3BlY2lmaWMgZmlsZSBpbiB0aGUKKwkJCQlidWZmZXIgbGlzdAorfDpzYk5leHR8CTpzYk5bZXh0XQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIHByZXZpb3VzIGZpbGUgaW4gdGhlCisJCQkJYnVmZmVyIGxpc3QKK3w6c2JhbGx8CTpzYmFbbGxdCW9wZW4gYSB3aW5kb3cgZm9yIGVhY2ggZmlsZSBpbiB0aGUgYnVmZmVyIGxpc3QKK3w6c2JmaXJzdHwJOnNiZltpcnN0XQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIGZpcnN0IGZpbGUgaW4gdGhlCisJCQkJYnVmZmVyIGxpc3QKK3w6c2JsYXN0fAk6c2JsW2FzdF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBsYXN0IGZpbGUgaW4gYnVmZmVyCisJCQkJbGlzdAorfDpzYm1vZGlmaWVkfAk6c2JtW29kaWZpZWRdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gbW9kaWZpZWQgZmlsZSBpbiB0aGUKKwkJCQlidWZmZXIgbGlzdAorfDpzYm5leHR8CTpzYm5bZXh0XQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIG5leHQgZmlsZSBpbiB0aGUgYnVmZmVyCisJCQkJbGlzdAorfDpzYnByZXZpb3VzfAk6c2JwW3JldmlvdXNdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gcHJldmlvdXMgZmlsZSBpbiB0aGUKKwkJCQlidWZmZXIgbGlzdAorfDpzYnJld2luZHwJOnNicltld2luZF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBmaXJzdCBmaWxlIGluIHRoZQorCQkJCWJ1ZmZlciBsaXN0Cit8OnNjcmlwdG5hbWVzfAk6c2NyaXBbdG5hbWVzXQlsaXN0IG5hbWVzIG9mIGFsbCBzb3VyY2VkIFZpbSBzY3JpcHRzCit8OnNjcmlwdGVuY29kaW5nfCA6c2NyaXB0ZVtuY29kaW5nXQllbmNvZGluZyB1c2VkIGluIHNvdXJjZWQgVmltIHNjcmlwdAorfDpzY3Njb3BlfAk6c2NzW2NvcGVdICAgICAgc3BsaXQgd2luZG93IGFuZCBleGVjdXRlIGNzY29wZSBjb21tYW5kCit8OnNldHwJCTpzZVt0XQkJc2hvdyBvciBzZXQgb3B0aW9ucworfDpzZXRmaWxldHlwZXwJOnNldGZbaWxldHlwZV0Jc2V0ICdmaWxldHlwZScsIHVubGVzcyBpdCB3YXMgc2V0IGFscmVhZHkKK3w6c2V0Z2xvYmFsfAk6c2V0Z1tsb2JhbF0Jc2hvdyBnbG9iYWwgdmFsdWVzIG9mIG9wdGlvbnMKK3w6c2V0bG9jYWx8CTpzZXRsW29jYWxdCXNob3cgb3Igc2V0IG9wdGlvbnMgbG9jYWxseQorfDpzZmluZHwJOnNmW2luZF0Jc3BsaXQgY3VycmVudCB3aW5kb3cgYW5kIGVkaXQgZmlsZSBpbiAncGF0aCcKK3w6c2ZpcnN0fAk6c2ZpcltzdF0Jc3BsaXQgd2luZG93IGFuZCBnbyB0byBmaXJzdCBmaWxlIGluIHRoZQorCQkJCWFyZ3VtZW50IGxpc3QKK3w6c2hlbGx8CTpzaFtlbGxdCWVzY2FwZSB0byBhIHNoZWxsCit8OnNpbWFsdHwJOnNpbVthbHRdCVdpbjMyIEdVSTogc2ltdWxhdGUgV2luZG93cyBBTFQga2V5Cit8OnNpZ258CQk6c2lnW25dCQltYW5pcHVsYXRlIHNpZ25zCit8OnNpbGVudHwJOnNpbFtlbnRdCVJ1biBhIGNvbW1hbmQgc2lsZW50bHkKK3w6c2xlZXB8CTpzbFtlZXBdCWRvIG5vdGhpbmcgZm9yIGEgZmV3IHNlY29uZHMKK3w6c2xhc3R8CTpzbGFbc3RdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gbGFzdCBmaWxlIGluIHRoZQorCQkJCWFyZ3VtZW50IGxpc3QKK3w6c21hZ2ljfAk6c21bYWdpY10JOnN1YnN0aXR1dGUgd2l0aCAnbWFnaWMnCit8OnNuZXh0fAk6c25bZXh0XQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIG5leHQgZmlsZSBpbiB0aGUKKwkJCQlhcmd1bWVudCBsaXN0Cit8OnNuaWZmfAk6c25pW2ZmXQlzZW5kIHJlcXVlc3QgdG8gc25pZmYKK3w6c25vbWFnaWN8CTpzbm9bbWFnaWNdCTpzdWJzdGl0dXRlIHdpdGggJ25vbWFnaWMnCit8OnNvdXJjZXwJOnNvW3VyY2VdCXJlYWQgVmltIG9yIEV4IGNvbW1hbmRzIGZyb20gYSBmaWxlCit8OnNwbGl0fAk6c3BbbGl0XQlzcGxpdCBjdXJyZW50IHdpbmRvdworfDpzcHJldmlvdXN8CTpzcHJbZXZpb3VzXQlzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIHByZXZpb3VzIGZpbGUgaW4gdGhlCisJCQkJYXJndW1lbnQgbGlzdAorfDpzcmV3aW5kfAk6c3JlW3dpbmRdCXNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gZmlyc3QgZmlsZSBpbiB0aGUKKwkJCQlhcmd1bWVudCBsaXN0Cit8OnN0b3B8CQk6c3Rbb3BdCQlzdXNwZW5kIHRoZSBlZGl0b3Igb3IgZXNjYXBlIHRvIGEgc2hlbGwKK3w6c3RhZ3wJCTpzdGFbZ10JCXNwbGl0IHdpbmRvdyBhbmQganVtcCB0byBhIHRhZworfDpzdGFydGluc2VydHwJOnN0YXJbdGluc2VydF0Jc3RhcnQgSW5zZXJ0IG1vZGUKK3w6c3RvcGluc2VydHx8CTpzdG9waVtuc2VydF0Jc3RvcCBJbnNlcnQgbW9kZQorfDpzdGp1bXB8CTpzdGpbdW1wXQlkbyAiOnRqdW1wIiBhbmQgc3BsaXQgd2luZG93Cit8OnN0c2VsZWN0fAk6c3RzW2VsZWN0XQlkbyAiOnRzZWxlY3QiIGFuZCBzcGxpdCB3aW5kb3cKK3w6c3VuaGlkZXwJOnN1bltoaWRlXQlzYW1lIGFzICI6dW5oaWRlIgorfDpzdXNwZW5kfAk6c3VzW3BlbmRdCXNhbWUgYXMgIjpzdG9wIgorfDpzdmlld3wJOnN2W2lld10Jc3BsaXQgd2luZG93IGFuZCBlZGl0IGZpbGUgcmVhZC1vbmx5Cit8OnN3YXBuYW1lfAk6c3dbYXBuYW1lXQlzaG93IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHN3YXAgZmlsZQorfDpzeW50YXh8CTpzeVtudGF4XQlzeW50YXggaGlnaGxpZ2h0aW5nCit8OnN5bmNiaW5kfAk6c3luY1tiaW5kXQlzeW5jIHNjcm9sbCBiaW5kaW5nCit8OnR8CQk6dAkJc2FtZSBhcyAiOmNvcHkiCit8OnROZXh0fAk6dE5bZXh0XQlqdW1wIHRvIHByZXZpb3VzIG1hdGNoaW5nIHRhZworfDp0YWd8CQk6dGFbZ10JCWp1bXAgdG8gdGFnCit8OnRhZ3N8CQk6dGFncwkJc2hvdyB0aGUgY29udGVudHMgb2YgdGhlIHRhZyBzdGFjaworfDp0Y2x8CQk6dGNbbF0JCWV4ZWN1dGUgVGNsIGNvbW1hbmQKK3w6dGNsZG98CTp0Y2xkW29dCWV4ZWN1dGUgVGNsIGNvbW1hbmQgZm9yIGVhY2ggbGluZQorfDp0Y2xmaWxlfAk6dGNsZltpbGVdCWV4ZWN1dGUgVGNsIHNjcmlwdCBmaWxlCit8OnRlYXJvZmZ8CTp0ZVthcm9mZl0JdGVhci1vZmYgYSBtZW51Cit8OnRmaXJzdHwJOnRmW2lyc3RdCWp1bXAgdG8gZmlyc3QgbWF0Y2hpbmcgdGFnCit8OnRocm93fAk6dGhbcm93XQl0aHJvdyBhbiBleGNlcHRpb24KK3w6dGp1bXB8CTp0alt1bXBdCWxpa2UgIjp0c2VsZWN0IiwgYnV0IGp1bXAgZGlyZWN0bHkgd2hlbiB0aGVyZQorCQkJCWlzIG9ubHkgb25lIG1hdGNoCit8OnRsYXN0fAk6dGxbYXN0XQlqdW1wIHRvIGxhc3QgbWF0Y2hpbmcgdGFnCit8OnRtZW51fAk6dG1bZW51XQlkZWZpbmUgbWVudSB0b29sdGlwCit8OnRuZXh0fAk6dG5bZXh0XQlqdW1wIHRvIG5leHQgbWF0Y2hpbmcgdGFnCit8OnRvcGxlZnR8CTp0b1twbGVmdF0JbWFrZSBzcGxpdCB3aW5kb3cgYXBwZWFyIGF0IHRvcCBvciBmYXIgbGVmdAorfDp0cHJldmlvdXN8CTp0cFtyZXZpb3VzXQlqdW1wIHRvIHByZXZpb3VzIG1hdGNoaW5nIHRhZworfDp0cmV3aW5kfAk6dHJbZXdpbmRdCWp1bXAgdG8gZmlyc3QgbWF0Y2hpbmcgdGFnCit8OnRyeXwJCTp0cnkJCWV4ZWN1dGUgY29tbWFuZHMsIGFib3J0IG9uIGVycm9yIG9yIGV4Y2VwdGlvbgorfDp0c2VsZWN0fAk6dHNbZWxlY3RdCWxpc3QgbWF0Y2hpbmcgdGFncyBhbmQgc2VsZWN0IG9uZQorfDp0dW5tZW51fAk6dHVbbm1lbnVdCXJlbW92ZSBtZW51IHRvb2x0aXAKK3w6dW5kb3wJCTp1W25kb10JCXVuZG8gbGFzdCBjaGFuZ2UocykKK3w6dW5hYmJyZXZpYXRlfAk6dW5hW2JicmV2aWF0ZV0JcmVtb3ZlIGFiYnJldmlhdGlvbgorfDp1bmhpZGV8CTp1bmhbaWRlXQlvcGVuIGEgd2luZG93IGZvciBlYWNoIGxvYWRlZCBmaWxlIGluIHRoZQorCQkJCWJ1ZmZlciBsaXN0Cit8OnVubGV0fAk6dW5sW2V0XQlkZWxldGUgdmFyaWFibGUKK3w6dW5tYXB8CTp1bm1bYXBdCXJlbW92ZSBtYXBwaW5nCit8OnVubWVudXwJOnVubWVbbnVdCXJlbW92ZSBtZW51Cit8OnVwZGF0ZXwJOnVwW2RhdGVdCXdyaXRlIGJ1ZmZlciBpZiBtb2RpZmllZAorfDp2Z2xvYmFsfAk6dltnbG9iYWxdCWV4ZWN1dGUgY29tbWFuZHMgZm9yIG5vdCBtYXRjaGluZyBsaW5lcworfDp2ZXJzaW9ufAk6dmVbcnNpb25dCXByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBvdGhlciBpbmZvCit8OnZlcmJvc2V8CTp2ZXJiW29zZV0JZXhlY3V0ZSBjb21tYW5kIHdpdGggJ3ZlcmJvc2UnIHNldAorfDp2ZXJ0aWNhbHwJOnZlcnRbaWNhbF0JbWFrZSBmb2xsb3dpbmcgY29tbWFuZCBzcGxpdCB2ZXJ0aWNhbGx5Cit8OnZpc3VhbHwJOnZpW3N1YWxdCXNhbWUgYXMgIjplZGl0IiwgYnV0IHR1cm5zIG9mZiAiRXgiIG1vZGUKK3w6dmlld3wJCTp2aWVbd10JCWVkaXQgYSBmaWxlIHJlYWQtb25seQorfDp2bWFwfAkJOnZtW2FwXQkJbGlrZSAiOm1hcCIgYnV0IGZvciBWaXN1YWwgbW9kZQorfDp2bWFwY2xlYXJ8CTp2bWFwY1tsZWFyXQlyZW1vdmUgYWxsIG1hcHBpbmdzIGZvciBWaXN1YWwgbW9kZQorfDp2bWVudXwJOnZtZVtudV0JYWRkIG1lbnUgZm9yIFZpc3VhbCBtb2RlCit8OnZub3JlbWFwfAk6dm5bb3JlbWFwXQlsaWtlICI6bm9yZW1hcCIgYnV0IGZvciBWaXN1YWwgbW9kZQorfDp2bmV3fAkJOnZuZVt3XQkJY3JlYXRlIGEgbmV3IGVtcHR5IHdpbmRvdywgdmVydGljYWxseSBzcGxpdAorfDp2bm9yZW1lbnV8CTp2bm9yZW1lW251XQlsaWtlICI6bm9yZW1lbnUiIGJ1dCBmb3IgVmlzdWFsIG1vZGUKK3w6dnNwbGl0fAk6dnNbcGxpdF0Jc3BsaXQgY3VycmVudCB3aW5kb3cgdmVydGljYWxseQorfDp2dW5tYXB8CTp2dVtubWFwXQlsaWtlICI6dW5tYXAiIGJ1dCBmb3IgVmlzdWFsIG1vZGUKK3w6dnVubWVudXwJOnZ1bm1lW251XQlyZW1vdmUgbWVudSBmb3IgVmlzdWFsIG1vZGUKK3w6d2luZG98CTp3aW5kbwkJZXhlY3V0ZSBjb21tYW5kIGluIGVhY2ggd2luZG93Cit8OndyaXRlfAk6d1tyaXRlXQl3cml0ZSB0byBhIGZpbGUKK3w6d05leHR8CTp3TltleHRdCXdyaXRlIHRvIGEgZmlsZSBhbmQgZ28gdG8gcHJldmlvdXMgZmlsZSBpbgorCQkJCWFyZ3VtZW50IGxpc3QKK3w6d2FsbHwJCTp3YVtsbF0JCXdyaXRlIGFsbCAoY2hhbmdlZCkgYnVmZmVycworfDp3aGlsZXwJOndoW2lsZV0JZXhlY3V0ZSBsb29wIGZvciBhcyBsb25nIGFzIGNvbmRpdGlvbiBtZXQKK3w6d2luc2l6ZXwJOndpW25zaXplXQlnZXQgb3Igc2V0IHdpbmRvdyBzaXplIChvYnNvbGV0ZSkKK3w6d2luY21kfAk6d2luY1ttZF0JZXhlY3V0ZSBhIFdpbmRvdyAoQ1RSTC1XKSBjb21tYW5kCit8OndpbnBvc3wJOndpbnBbb3NdCWdldCBvciBzZXQgd2luZG93IHBvc2l0aW9uCit8OnduZXh0fAk6d25bZXh0XQl3cml0ZSB0byBhIGZpbGUgYW5kIGdvIHRvIG5leHQgZmlsZSBpbgorCQkJCWFyZ3VtZW50IGxpc3QKK3w6d3ByZXZpb3VzfAk6d3BbcmV2aW91c10Jd3JpdGUgdG8gYSBmaWxlIGFuZCBnbyB0byBwcmV2aW91cyBmaWxlIGluCisJCQkJYXJndW1lbnQgbGlzdAorfDp3cXwJCTp3cQkJd3JpdGUgdG8gYSBmaWxlIGFuZCBxdWl0IHdpbmRvdyBvciBWaW0KK3w6d3FhbGx8CTp3cWFbbGxdCXdyaXRlIGFsbCBjaGFuZ2VkIGJ1ZmZlcnMgYW5kIHF1aXQgVmltCit8OndzdmVyYnwJOndzW3ZlcmJdCXBhc3MgdGhlIHZlcmIgdG8gd29ya3Nob3Agb3ZlciBJUEMKK3w6d3ZpbWluZm98CTp3dltpbWluZm9dCXdyaXRlIHRvIHZpbWluZm8gZmlsZQorfDp4aXR8CQk6eFtpdF0JCXdyaXRlIGlmIGJ1ZmZlciBjaGFuZ2VkIGFuZCBxdWl0IHdpbmRvdyBvciBWaW0KK3w6eGFsbHwJCTp4YVtsbF0JCXNhbWUgYXMgIjp3cWFsbCIKK3w6eWFua3wJCTp5W2Fua10JCXlhbmsgbGluZXMgaW50byBhIHJlZ2lzdGVyCit8Onp8CQk6egkJcHJpbnQgc29tZSBsaW5lcworfDp+fAkJOn4JCXJlcGVhdCBsYXN0ICI6c3Vic3RpdHV0ZSIKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2luc2VydC50eHQgYi9ydW50aW1lL2RvYy9pbnNlcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzlkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9pbnNlcnQudHh0CkBAIC0wLDAgKzEsMTA2NCBAQAorKmluc2VydC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAwOQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKKwkJCQkJCSpJbnNlcnQqICpJbnNlcnQtbW9kZSoKK0luc2VydGluZyBhbmQgcmVwbGFjaW5nIHRleHQJCQkJKm1vZGUtaW5zLXJlcGwqCisKK01vc3Qgb2YgdGhpcyBmaWxlIGlzIGFib3V0IEluc2VydCBhbmQgUmVwbGFjZSBtb2RlLiAgQXQgdGhlIGVuZCBhcmUgYSBmZXcKK2NvbW1hbmRzIGZvciBpbnNlcnRpbmcgdGV4dCBpbiBvdGhlciB3YXlzLgorCitBbiBvdmVydmlldyBvZiB0aGUgbW9zdCBvZnRlbiB1c2VkIGNvbW1hbmRzIGNhbiBiZSBmb3VuZCBpbiBjaGFwdGVyIDI0IG9mIHRoZQordXNlciBtYW51YWwgfHVzcl8yNC50eHR8LgorCisxLiBTcGVjaWFsIGtleXMJCQkJCQl8aW5zLXNwZWNpYWwta2V5c3wKKzIuIFNwZWNpYWwgc3BlY2lhbCBrZXlzCQkJCQl8aW5zLXNwZWNpYWwtc3BlY2lhbHwKKzMuICd0ZXh0d2lkdGgnIGFuZCAnd3JhcG1hcmdpbicgb3B0aW9ucwkJCXxpbnMtdGV4dHdpZHRofAorNC4gJ2V4cGFuZHRhYicsICdzbWFydHRhYicgYW5kICdzb2Z0dGFic3RvcCcgIG9wdGlvbnMJfGlucy1leHBhbmR0YWJ8Cis1LiBSZXBsYWNlIG1vZGUJCQkJCQl8UmVwbGFjZS1tb2RlfAorNi4gVmlydHVhbCBSZXBsYWNlIG1vZGUJCQkJCXxWaXJ0dWFsLVJlcGxhY2UtbW9kZXwKKzcuIEluc2VydCBtb2RlIGNvbXBsZXRpb24JCQkJfGlucy1jb21wbGV0aW9ufAorOC4gSW5zZXJ0IG1vZGUgY29tbWFuZHMJCQkJCXxpbnNlcnRpbmd8Cis5LiBFeCBpbnNlcnQgY29tbWFuZHMJCQkJCXxpbnNlcnRpbmctZXh8CisxMC4gSW5zZXJ0aW5nIGEgZmlsZQkJCQkJfGluc2VydGluZy1maWxlfAorCitBbHNvIHNlZSAndmlydHVhbGVkaXQnLCBmb3IgbW92aW5nIHRoZSBjdXJzb3IgdG8gcG9zaXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vCitjaGFyYWN0ZXIuICBVc2VmdWwgZm9yIGVkaXRpbmcgYSB0YWJsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTcGVjaWFsIGtleXMJCQkJCQkqaW5zLXNwZWNpYWwta2V5cyoKKworSW4gSW5zZXJ0IGFuZCBSZXBsYWNlIG1vZGUsIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nOworb3RoZXIgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgZGlyZWN0bHkuICBUbyBpbnNlcnQgb25lIG9mIHRoZXNlIHNwZWNpYWwKK2NoYXJhY3RlcnMgaW50byB0aGUgYnVmZmVyLCBwcmVjZWRlIGl0IHdpdGggQ1RSTC1WLiAgVG8gaW5zZXJ0IGEgPE51bD4KK2NoYXJhY3RlciB1c2UgIkNUUkwtViBDVFJMLUAiIG9yICJDVFJMLVYgMDAwIi4gIE9uIHNvbWUgc3lzdGVtcywgeW91IGhhdmUgdG8KK3VzZSAiQ1RSTC1WIDAwMyIgdG8gaW5zZXJ0IGEgQ1RSTC1DLiAgTm90ZTogV2hlbiBDVFJMLVYgaXMgbWFwcGVkIHlvdSBjYW4KK29mdGVuIHVzZSBDVFJMLVEgaW5zdGVhZCB8aV9DVFJMLVF8LgorCitJZiB5b3UgYXJlIHdvcmtpbmcgaW4gYSBzcGVjaWFsIGxhbmd1YWdlIG1vZGUgd2hlbiBpbnNlcnRpbmcgdGV4dCwgc2VlIHRoZQorJ2xhbmdtYXAnIG9wdGlvbiwgfCdsYW5nbWFwJ3wsIG9uIGhvdyB0byBhdm9pZCBzd2l0Y2hpbmcgdGhpcyBtb2RlIG9uIGFuZCBvZmYKK2FsbCB0aGUgdGltZS4KKworSWYgeW91IGhhdmUgJ2luc2VydG1vZGUnIHNldCwgPEVzYz4gYW5kIGEgZmV3IG90aGVyIGtleXMgZ2V0IGFub3RoZXIgbWVhbmluZy4KK1NlZSB8J2luc2VydG1vZGUnfC4KKworY2hhcgkJYWN0aW9uCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJCQkqaV9DVFJMLVsqICppXzxFc2M+KgorPEVzYz4gb3IgQ1RSTC1bCUVuZCBpbnNlcnQgb3IgUmVwbGFjZSBtb2RlLCBnbyBiYWNrIHRvIE5vcm1hbCBtb2RlLiAgRmluaXNoCisJCWFiYnJldmlhdGlvbi4KKwkJTm90ZTogSWYgeW91ciA8RXNjPiBrZXkgaXMgaGFyZCB0byBoaXQgb24geW91ciBrZXlib2FyZCwgdHJhaW4KKwkJeW91cnNlbGYgdG8gdXNlIENUUkwtWy4KKwkJCQkJCSppX0NUUkwtQyoKK0NUUkwtQwkJUXVpdCBpbnNlcnQgbW9kZSwgZ28gYmFjayB0byBOb3JtYWwgbW9kZS4gIERvIG5vdCBjaGVjayBmb3IKKwkJYWJicmV2aWF0aW9ucy4KKworCQkJCQkJKmlfQ1RSTC1AKgorQ1RSTC1ACQlJbnNlcnQgcHJldmlvdXNseSBpbnNlcnRlZCB0ZXh0IGFuZCBzdG9wIGluc2VydC4gIHtWaTogb25seQorCQl3aGVuIHR5cGVkIGFzIGZpcnN0IGNoYXIsIG9ubHkgdXAgdG8gMTI4IGNoYXJzfQorCQkJCQkJKmlfQ1RSTC1BKgorQ1RSTC1BCQlJbnNlcnQgcHJldmlvdXNseSBpbnNlcnRlZCB0ZXh0LiAge25vdCBpbiBWaX0KKworCQkJCQkJKmlfQ1RSTC1IKiAqaV88QlM+KiAqaV9CUyoKKzxCUz4gb3IgQ1RSTC1ICURlbGV0ZSB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yIChzZWUgfGlfYmFja3NwYWNpbmd8CisJCWFib3V0IGpvaW5pbmcgbGluZXMpLgorCQlTZWUgfDpmaXhkZWx8IGlmIHlvdXIgPEJTPiBrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3Ugd2FudC4KKwkJe1ZpOiBkb2VzIG5vdCBkZWxldGUgYXV0b2luZGVudHN9CisJCQkJCQkqaV88RGVsPiogKmlfREVMKgorPERlbD4JCURlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuICBJZiB0aGUgY3Vyc29yIGlzIGF0CisJCXRoZSBlbmQgb2YgdGhlIGxpbmUsIGFuZCB0aGUgJ2JhY2tzcGFjZScgb3B0aW9uIGluY2x1ZGVzCisJCSJlb2wiLCBkZWxldGUgdGhlIDxFT0w+OyB0aGUgbmV4dCBsaW5lIGlzIGFwcGVuZGVkIGFmdGVyIHRoZQorCQljdXJyZW50IG9uZS4KKwkJU2VlIHw6Zml4ZGVsfCBpZiB5b3VyIDxEZWw+IGtleSBkb2VzIG5vdCBkbyB3aGF0IHlvdSB3YW50LgorCQl7bm90IGluIFZpfQorCQkJCQkJKmlfQ1RSTC1XKgorQ1RSTC1XCQlEZWxldGUgdGhlIHdvcmQgYmVmb3JlIHRoZSBjdXJzb3IgKHNlZSB8aV9iYWNrc3BhY2luZ3wgYWJvdXQKKwkJam9pbmluZyBsaW5lcykuICBTZWUgdGhlIHNlY3Rpb24gIndvcmQgbW90aW9ucyIsCisJCXx3b3JkLW1vdGlvbnN8LCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYSB3b3JkLgorCQkJCQkJKmlfQ1RSTC1VKgorQ1RSTC1VCQlEZWxldGUgYWxsIGVudGVyZWQgY2hhcmFjdGVycyBpbiB0aGUgY3VycmVudCBsaW5lIChzZWUKKwkJfGlfYmFja3NwYWNpbmd8IGFib3V0IGpvaW5pbmcgbGluZXMpLgorCisJCQkJCQkqaV9DVFJMLUkqICppXzxUYWI+KiAqaV9UYWIqCis8VGFiPiBvciBDVFJMLUkgSW5zZXJ0IGEgdGFiLiAgSWYgdGhlICdleHBhbmR0YWInIG9wdGlvbiBpcyBvbiwgdGhlCisJCWVxdWl2YWxlbnQgbnVtYmVyIG9mIHNwYWNlcyBpcyBpbnNlcnRlZCAodXNlIENUUkwtViA8VGFiPiB0bworCQlhdm9pZCB0aGUgZXhwYW5zaW9uOyB1c2UgQ1RSTC1RIDxUYWI+IGlmIENUUkwtViBpcyBtYXBwZWQKKwkJfGlfQ1RSTC1RfCkuICBTZWUgYWxzbyB0aGUgJ3NtYXJ0dGFiJyBvcHRpb24gYW5kCisJCXxpbnMtZXhwYW5kdGFifC4KKwkJCQkJCSppX0NUUkwtSiogKmlfPE5MPioKKzxOTD4gb3IgQ1RSTC1KCUJlZ2luIG5ldyBsaW5lLgorCQkJCQkJKmlfQ1RSTC1NKiAqaV88Q1I+KgorPENSPiBvciBDVFJMLU0JQmVnaW4gbmV3IGxpbmUuCisJCQkJCQkqaV9DVFJMLUsqCitDVFJMLUsge2NoYXIxfSBbY2hhcjJdCisJCUVudGVyIGRpZ3JhcGggKHNlZSB8ZGlncmFwaHN8KS4gIFdoZW4ge2NoYXIxfSBpcyBhIHNwZWNpYWwKKwkJa2V5LCB0aGUgY29kZSBmb3IgdGhhdCBrZXkgaXMgaW5zZXJ0ZWQgaW4gPD4gZm9ybS4gIEZvcgorCQlleGFtcGxlLCB0aGUgc3RyaW5nICI8Uy1TcGFjZT4iIGNhbiBiZSBlbnRlcmVkIGJ5IHR5cGluZworCQk8Qy1LPjxTLVNwYWNlPiAodHdvIGtleXMpLiAgTmVpdGhlciBjaGFyIGlzIGNvbnNpZGVyZWQgZm9yCisJCW1hcHBpbmcuICB7bm90IGluIFZpfQorCitDVFJMLU4JCUZpbmQgbmV4dCBrZXl3b3JkIChzZWUgfGlfQ1RSTC1OfCkuICB7bm90IGluIFZpfQorQ1RSTC1QCQlGaW5kIHByZXZpb3VzIGtleXdvcmQgKHNlZSB8aV9DVFJMLVB8KS4gIHtub3QgaW4gVml9CisKK0NUUkwtUiB7MC05YS16IiUjKis6Li09fQkJCQkJKmlfQ1RSTC1SKgorCQlJbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIuICBCZXR3ZWVuIHR5cGluZyBDVFJMLVIgYW5kCisJCXRoZSBzZWNvbmQgY2hhcmFjdGVyLCAnIicgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gaW5kaWNhdGUgdGhhdAorCQl5b3UgYXJlIGV4cGVjdGVkIHRvIGVudGVyIHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXIuCisJCVRoZSB0ZXh0IGlzIGluc2VydGVkIGFzIGlmIHlvdSB0eXBlZCBpdCwgYnV0IG1hcHBpbmdzIGFuZAorCQlhYmJyZXZpYXRpb25zIGFyZSBub3QgdXNlZC4gIElmIHlvdSBoYXZlIG9wdGlvbnMgbGlrZQorCQkndGV4dHdpZHRoJywgJ2Zvcm1hdG9wdGlvbnMnLCBvciAnYXV0b2luZGVudCcgc2V0LCB0aGlzIHdpbGwKKwkJaW5mbHVlbmNlIHdoYXQgd2lsbCBiZSBpbnNlcnRlZC4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gd2hhdAorCQloYXBwZW5zIHdpdGggdGhlICJwIiBjb21tYW5kIGFuZCBwYXN0aW5nIHdpdGggdGhlIG1vdXNlLgorCQlTcGVjaWFsIHJlZ2lzdGVyczoKKwkJCSciJwl0aGUgdW5uYW1lZCByZWdpc3RlciwgY29udGFpbmluZyB0aGUgdGV4dCBvZgorCQkJCXRoZSBsYXN0IGRlbGV0ZSBvciB5YW5rCisJCQknJScJdGhlIGN1cnJlbnQgZmlsZSBuYW1lCisJCQknIycJdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUKKwkJCScqJwl0aGUgY2xpcGJvYXJkIGNvbnRlbnRzIChYMTE6IHByaW1hcnkgc2VsZWN0aW9uKQorCQkJJysnCXRoZSBjbGlwYm9hcmQgY29udGVudHMKKwkJCScvJwl0aGUgbGFzdCBzZWFyY2ggcGF0dGVybgorCQkJJzonCXRoZSBsYXN0IGNvbW1hbmQtbGluZQorCQkJJy4nCXRoZSBsYXN0IGluc2VydGVkIHRleHQKKwkJCSctJwl0aGUgbGFzdCBzbWFsbCAobGVzcyB0aGFuIGEgbGluZSkgZGVsZXRlCisJCQknPScJdGhlIGV4cHJlc3Npb24gcmVnaXN0ZXI6IHlvdSBhcmUgcHJvbXB0ZWQgdG8KKwkJCQllbnRlciBhbiBleHByZXNzaW9uIChzZWUgfGV4cHJlc3Npb258KQorCQlTZWUgfHJlZ2lzdGVyc3wgYWJvdXQgcmVnaXN0ZXJzLiAge25vdCBpbiBWaX0KKworQ1RSTC1SIENUUkwtUiB7MC05YS16IiUjKisvOi4tPX0JCQkqaV9DVFJMLVJfQ1RSTC1SKgorCQlJbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIuICBXb3JrcyBsaWtlIHVzaW5nIGEgc2luZ2xlCisJCUNUUkwtUiwgYnV0IHRoZSB0ZXh0IGlzIGluc2VydGVkIGxpdGVyYWxseSwgbm90IGFzIGlmIHR5cGVkLgorCQlUaGlzIGRpZmZlcnMgd2hlbiB0aGUgcmVnaXN0ZXIgY29udGFpbnMgY2hhcmFjdGVycyBsaWtlIDxCUz4uCisJCUV4YW1wbGUsIHdoZXJlIHJlZ2lzdGVyIGEgY29udGFpbnMgImFiXkhjIjogPgorCUNUUkwtUiBhCQlyZXN1bHRzIGluICJhYyIuCisJQ1RSTC1SIENUUkwtUiBhCQlyZXN1bHRzIGluICJhYl5IYyIuCis8CQlPcHRpb25zICd0ZXh0d2lkdGgnLCAnZm9ybWF0b3B0aW9ucycsIGV0Yy4gc3RpbGwgYXBwbHkuICBJZgorCQl5b3UgYWxzbyB3YW50IHRvIGF2b2lkIHRoZXNlLCB1c2UgIjxDLVI+PEMtTz5yIiwgc2VlIGJlbG93LgorCQlUaGUgJy4nIHJlZ2lzdGVyIChsYXN0IGluc2VydGVkIHRleHQpIGlzIHN0aWxsIGluc2VydGVkIGFzCisJCXR5cGVkLiAge25vdCBpbiBWaX0KKworQ1RSTC1SIENUUkwtTyB7MC05YS16IiUjKisvOi4tPX0JCQkqaV9DVFJMLVJfQ1RSTC1PKgorCQlJbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgbGl0ZXJhbGx5IGFuZCBkb24ndAorCQlhdXRvLWluZGVudC4gIERvZXMgdGhlIHNhbWUgYXMgcGFzdGluZyB3aXRoIHRoZSBtb3VzZQorCQl8PE1pZGRsZU1vdXNlPnwuCisJCURvZXMgbm90IHJlcGxhY2UgY2hhcmFjdGVycyEKKwkJVGhlICcuJyByZWdpc3RlciAobGFzdCBpbnNlcnRlZCB0ZXh0KSBpcyBzdGlsbCBpbnNlcnRlZCBhcworCQl0eXBlZC4gIHtub3QgaW4gVml9CisKK0NUUkwtUiBDVFJMLVAgezAtOWEteiIlIyorLzouLT19CQkJKmlfQ1RSTC1SX0NUUkwtUCoKKwkJSW5zZXJ0IHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGxpdGVyYWxseSBhbmQgZml4IHRoZQorCQlpbmRlbnQsIGxpa2UgfFs8TWlkZGxlTW91c2U+fC4KKwkJRG9lcyBub3QgcmVwbGFjZSBjaGFyYWN0ZXJzIQorCQlUaGUgJy4nIHJlZ2lzdGVyIChsYXN0IGluc2VydGVkIHRleHQpIGlzIHN0aWxsIGluc2VydGVkIGFzCisJCXR5cGVkLiAge25vdCBpbiBWaX0KKworCQkJCQkJKmlfQ1RSTC1UKgorQ1RSTC1UCQlJbnNlcnQgb25lIHNoaWZ0d2lkdGggb2YgaW5kZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudAorCQlsaW5lLiAgVGhlIGluZGVudCBpcyBhbHdheXMgcm91bmRlZCB0byBhICdzaGlmdHdpZHRoJyAodGhpcyBpcworCQl2aSBjb21wYXRpYmxlKS4gIHtWaTogb25seSB3aGVuIGluIGluZGVudH0KKwkJCQkJCSppX0NUUkwtRCoKK0NUUkwtRAkJRGVsZXRlIG9uZSBzaGlmdHdpZHRoIG9mIGluZGVudCBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQKKwkJbGluZS4gIFRoZSBpbmRlbnQgaXMgYWx3YXlzIHJvdW5kZWQgdG8gYSAnc2hpZnR3aWR0aCcgKHRoaXMgaXMKKwkJdmkgY29tcGF0aWJsZSkuICB7Vmk6IENUUkwtRCB3b3JrcyBvbmx5IHdoZW4gdXNlZCBhZnRlcgorCQlhdXRvaW5kZW50fQorCQkJCQkJKmlfMF9DVFJMLUQqCiswIENUUkwtRAlEZWxldGUgYWxsIGluZGVudCBpbiB0aGUgY3VycmVudCBsaW5lLiAge1ZpOiBDVFJMLUQgd29ya3MKKwkJb25seSB3aGVuIHVzZWQgYWZ0ZXIgYXV0b2luZGVudH0KKwkJCQkJCSppX15fQ1RSTC1EKgorXiBDVFJMLUQJRGVsZXRlIGFsbCBpbmRlbnQgaW4gdGhlIGN1cnJlbnQgbGluZS4gIFRoZSBpbmRlbnQgaXMKKwkJcmVzdG9yZWQgaW4gdGhlIG5leHQgbGluZS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gaW5zZXJ0aW5nIGEKKwkJbGFiZWwuICB7Vmk6IENUUkwtRCB3b3JrcyBvbmx5IHdoZW4gdXNlZCBhZnRlciBhdXRvaW5kZW50fQorCisJCQkJCQkqaV9DVFJMLVYqCitDVFJMLVYJCUluc2VydCBuZXh0IG5vbi1kaWdpdCBsaXRlcmFsbHkuICBGb3Igc3BlY2lhbCBrZXlzLCB0aGUKKwkJdGVybWluYWwgY29kZSBpcyBpbnNlcnRlZC4gIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBlbnRlciB0aGUKKwkJZGVjaW1hbCwgb2N0YWwgb3IgaGV4YWRlY2ltYWwgdmFsdWUgb2YgYSBjaGFyYWN0ZXIKKwkJfGlfQ1RSTC1WX2RpZ2l0fC4KKwkJVGhlIGNoYXJhY3RlcnMgdHlwZWQgcmlnaHQgYWZ0ZXIgQ1RSTC1WIGFyZSBub3QgY29uc2lkZXJlZCBmb3IKKwkJbWFwcGluZy4gIHtWaTogbm8gZGVjaW1hbCBieXRlIGVudHJ5fQorCQlOb3RlOiBXaGVuIENUUkwtViBpcyBtYXBwZWQgKGUuZy4sIHRvIHBhc3RlIHRleHQpIHlvdSBjYW4KKwkJb2Z0ZW4gdXNlIENUUkwtUSBpbnN0ZWFkIHxpX0NUUkwtUXwuCisKKwkJCQkJCSppX0NUUkwtUSoKK0NUUkwtUQkJU2FtZSBhcyBDVFJMLVYuCisJCU5vdGU6IFNvbWUgdGVybWluYWwgY29ubmVjdGlvbnMgbWF5IGVhdCBDVFJMLVEsIGl0IGRvZXNuJ3QKKwkJd29yayB0aGVuLiAgSXQgZG9lcyB3b3JrIGluIHRoZSBHVUkuCisKK0NUUkwtWAkJRW50ZXIgQ1RSTC1YIG1vZGUuICBUaGlzIGlzIGEgc3ViLW1vZGUgd2hlcmUgY29tbWFuZHMgY2FuCisJCWJlIGdpdmVuIHRvIGNvbXBsZXRlIHdvcmRzIG9yIHNjcm9sbCB0aGUgd2luZG93LiBTZWUKKwkJfGlfQ1RSTC1YfCBhbmQgfGlucy1jb21wbGV0aW9ufC4ge25vdCBpbiBWaX0KKworCQkJCQkJKmlfQ1RSTC1FKgorQ1RSTC1FCQlJbnNlcnQgdGhlIGNoYXJhY3RlciB3aGljaCBpcyBiZWxvdyB0aGUgY3Vyc29yLiAge25vdCBpbiBWaX0KKwkJCQkJCSppX0NUUkwtWSoKK0NUUkwtWQkJSW5zZXJ0IHRoZSBjaGFyYWN0ZXIgd2hpY2ggaXMgYWJvdmUgdGhlIGN1cnNvci4gIHtub3QgaW4gVml9CisJCU5vdGUgdGhhdCBmb3IgQ1RSTC1FIGFuZCBDVFJMLVkgJ3RleHR3aWR0aCcgaXMgbm90IHVzZWQsIHRvIGJlCisJCWFibGUgdG8gY29weSBjaGFyYWN0ZXJzIGZyb20gYSBsb25nIGxpbmUuCisKKwkJCQkJCSppX0NUUkwtXyoKK0NUUkwtXwkJU3dpdGNoIGJldHdlZW4gbGFuZ3VhZ2VzLCBhcyBmb2xsb3dzOgorCQktICBXaGVuIGluIGEgcmlnaHRsZWZ0IHdpbmRvdywgcmV2aW5zIGFuZCBub2hrbWFwIGFyZSB0b2dnbGVkLAorCQkgICBzaW5jZSBFbmdsaXNoIHdpbGwgbGlrZWx5IGJlIGluc2VydGVkIGluIHRoaXMgY2FzZS4KKwkJLSAgV2hlbiBpbiBhIG5vcmlnaHRsZWZ0IHdpbmRvdywgcmV2aW5zIGFuZCBoa21hcCBhcmUgdG9nZ2xlZCwKKwkJICAgc2luY2UgSGVicmV3IHdpbGwgbGlrZWx5IGJlIGluc2VydGVkIGluIHRoaXMgY2FzZS4KKworCQlDVFJMLV8gbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSB0eXBlZCB0ZXh0LgorCisJCVRoaXMgY29tbWFuZCBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHRoZSAnYWxsb3dyZXZpbnMnIG9wdGlvbgorCQlpcyBzZXQuCisJCVBsZWFzZSByZWZlciB0byB8cmlsZWZ0LnR4dHwgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKKwkJcmlnaHQtdG8tbGVmdCBtb2RlLgorCQl7bm90IGluIFZpfQorCQlPbmx5IGlmIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fCBmZWF0dXJlICh3aGljaCBpcyBub3QKKwkJdGhlIGRlZmF1bHQpLgorCQkJCQkJKmlfQ1RSTC1eKgorQ1RSTC1eCQlUb2dnbGUgdGhlIHVzZSBvZiB0eXBpbmcgbGFuZ3VhZ2UgY2hhcmFjdGVycy4KKwkJV2hlbiBsYW5ndWFnZSB8OmxtYXB8IG1hcHBpbmdzIGFyZSBkZWZpbmVkOgorCQktIElmICdpbWluc2VydCcgaXMgMSAobGFuZ21hcCBtYXBwaW5ncyB1c2VkKSBpdCBiZWNvbWVzIDAgKG5vCisJCSAgbGFuZ21hcCBtYXBwaW5ncyB1c2VkKS4KKwkJLSBJZiAnaW1pbnNlcnQnIGhhcyBhbm90aGVyIHZhbHVlIGl0IGJlY29tZXMgMSwgdGh1cyBsYW5nbWFwCisJCSAgbWFwcGluZ3MgYXJlIGVuYWJsZWQuCisJCVdoZW4gbm8gbGFuZ3VhZ2UgbWFwcGluZ3MgYXJlIGRlZmluZWQ6CisJCS0gSWYgJ2ltaW5zZXJ0JyBpcyAyIChJbnB1dCBNZXRob2QgdXNlZCkgaXQgYmVjb21lcyAwIChubworCQkgIElucHV0IE1ldGhvZCB1c2VkKS4KKwkJLSBJZiAnaW1pbnNlcnQnIGhhcyBhbm90aGVyIHZhbHVlIGl0IGJlY29tZXMgMiwgdGh1cyB0aGUgSW5wdXQKKwkJICBNZXRob2QgaXMgZW5hYmxlZC4KKwkJV2hlbiBzZXQgdG8gMSwgdGhlIHZhbHVlIG9mIHRoZSAiYjprZXltYXBfbmFtZSIgdmFyaWFibGUsIHRoZQorCQkna2V5bWFwJyBvcHRpb24gb3IgIjxsYW5nPiIgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGxpbmUuCisJCVRoZSBsYW5ndWFnZSBtYXBwaW5ncyBhcmUgbm9ybWFsbHkgdXNlZCB0byB0eXBlIGNoYXJhY3RlcnMKKwkJdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gd2hhdCB0aGUga2V5Ym9hcmQgcHJvZHVjZXMuICBUaGUKKwkJJ2tleW1hcCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGluc3RhbGwgYSB3aG9sZSBudW1iZXIgb2YgdGhlbS4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJKmlfQ1RSTC1dKgorQ1RSTC1dCQlUcmlnZ2VyIGFiYnJldmlhdGlvbiwgd2l0aG91dCBpbnNlcnRpbmcgYSBjaGFyYWN0ZXIuICB7bm90IGluCisJCVZpfQorCisJCQkJCQkqaV88SW5zZXJ0PioKKzxJbnNlcnQ+CVRvZ2dsZSBiZXR3ZWVuIEluc2VydCBhbmQgUmVwbGFjZSBtb2RlLiAge25vdCBpbiBWaX0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJCQkJCSppX2JhY2tzcGFjaW5nKgorVGhlIGVmZmVjdCBvZiB0aGUgPEJTPiwgQ1RSTC1XLCBhbmQgQ1RSTC1VIGRlcGVuZCBvbiB0aGUgJ2JhY2tzcGFjZScgb3B0aW9uCisodW5sZXNzICdyZXZpbnMnIGlzIHNldCkuICBUaGlzIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXM6CisKK2l0ZW0JICAgIGFjdGlvbiB+CitpbmRlbnQJICAgIGFsbG93IGJhY2tzcGFjaW5nIG92ZXIgYXV0b2luZGVudAorZW9sCSAgICBhbGxvdyBiYWNrc3BhY2luZyBvdmVyIGVuZC1vZi1saW5lIChqb2luIGxpbmVzKQorc3RhcnQJICAgIGFsbG93IGJhY2tzcGFjaW5nIG92ZXIgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIGluc2VydDsgQ1RSTC1XIGFuZAorCSAgICBDVFJMLVUgc3RvcCBvbmNlIGF0IHRoZSBzdGFydCBwb3NpdGlvbgorCitXaGVuICdiYWNrc3BhY2UnIGlzIGVtcHR5LCBWaSBjb21wYXRpYmxlIGJhY2tzcGFjaW5nIGlzIHVzZWQuICBZb3UgY2Fubm90CitiYWNrc3BhY2Ugb3ZlciBhdXRvaW5kZW50LCBiZWZvcmUgY29sdW1uIDEgb3IgYmVmb3JlIHdoZXJlIGluc2VydCBzdGFydGVkLgorCitGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdGhlIHZhbHVlcyAiMCIsICIxIiBhbmQgIjIiIGFyZSBhbHNvIGFsbG93ZWQsIHNlZQorfCdiYWNrc3BhY2UnfC4KKworSWYgdGhlICdiYWNrc3BhY2UnIG9wdGlvbiBkb2VzIGNvbnRhaW4gImVvbCIgYW5kIHRoZSBjdXJzb3IgaXMgaW4gY29sdW1uIDEKK3doZW4gb25lIG9mIHRoZSB0aHJlZSBrZXlzIGlzIHVzZWQsIHRoZSBjdXJyZW50IGxpbmUgaXMgam9pbmVkIHdpdGggdGhlCitwcmV2aW91cyBsaW5lLiAgVGhpcyBlZmZlY3RpdmVseSBkZWxldGVzIHRoZSA8RU9MPiBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgore1ZpOiBkb2VzIG5vdCBjcm9zcyBsaW5lcywgZG9lcyBub3QgZGVsZXRlIHBhc3Qgc3RhcnQgcG9zaXRpb24gb2YgaW5zZXJ0fQorCisJCQkJCQkqaV9DVFJMLVZfZGlnaXQqCitXaXRoIENUUkwtViB0aGUgZGVjaW1hbCwgb2N0YWwgb3IgaGV4YWRlY2ltYWwgdmFsdWUgb2YgYSBjaGFyYWN0ZXIgY2FuIGJlCitlbnRlcmVkIGRpcmVjdGx5LiAgVGhpcyB3YXkgeW91IGNhbiBlbnRlciBhbnkgY2hhcmFjdGVyLCBleGNlcHQgYSBsaW5lIGJyZWFrCisoPE5MPiwgdmFsdWUgMTApLiAgVGhlcmUgYXJlIGZpdmUgd2F5cyB0byBlbnRlciB0aGUgY2hhcmFjdGVyIHZhbHVlOgorCitmaXJzdCBjaGFyCW1vZGUJICAgICBtYXggbnIgb2YgY2hhcnMgICBtYXggdmFsdWUgfgorKG5vbmUpCQlkZWNpbWFsCQkgICAzCQkyNTUKK28gb3IgTwkJb2N0YWwJCSAgIDMJCTI1NQoreCBvciBYCQloZXhhZGVjaW1hbAkgICAyCQlmZgkgKDI1NSkKK3UJCWhleGFkZWNpbWFsCSAgIDQJCWZmZmYJICg2NTUzNSkKK1UJCWhleGFkZWNpbWFsCSAgIDgJCTdmZmZmZmZmICgyMTQ3NDgzNjQ3KQorCitOb3JtYWxseSB5b3Ugd291bGQgdHlwZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycy4gIFRodXMgdG8gZW50ZXIgYQorc3BhY2UgKHZhbHVlIDMyKSB5b3Ugd291bGQgdHlwZSA8Qy1WPjAzMi4gIFlvdSBjYW4gb21pdCB0aGUgbGVhZGluZyB6ZXJvLCBpbgord2hpY2ggY2FzZSB0aGUgY2hhcmFjdGVyIHR5cGVkIGFmdGVyIHRoZSBudW1iZXIgbXVzdCBiZSBhIG5vbi1kaWdpdC4gIFRoaXMKK2hhcHBlbnMgZm9yIHRoZSBvdGhlciBtb2RlcyBhcyB3ZWxsOiBBcyBzb29uIGFzIHlvdSB0eXBlIGEgY2hhcmFjdGVyIHRoYXQgaXMKK2ludmFsaWQgZm9yIHRoZSBtb2RlLCB0aGUgdmFsdWUgYmVmb3JlIGl0IHdpbGwgYmUgdXNlZCBhbmQgdGhlICJpbnZhbGlkIgorY2hhcmFjdGVyIGlzIGRlYWx0IHdpdGggaW4gdGhlIG5vcm1hbCB3YXkuCisKK0lmIHlvdSBlbnRlciBhIHZhbHVlIG9mIDEwLCBpdCB3aWxsIGVuZCB1cCBpbiB0aGUgZmlsZSBhcyBhIDAuICBUaGUgMTAgaXMgYQorPE5MPiwgd2hpY2ggaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHJlcHJlc2VudCB0aGUgPE51bD4gY2hhcmFjdGVyLiAgV2hlbiB3cml0aW5nCit0aGUgYnVmZmVyIHRvIGEgZmlsZSwgdGhlIDxOTD4gY2hhcmFjdGVyIGlzIHRyYW5zbGF0ZWQgaW50byA8TnVsPi4gIFRoZSA8Tkw+CitjaGFyYWN0ZXIgaXMgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4gIFRodXMgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGEKKzxOTD4gY2hhcmFjdGVyIGluIGEgZmlsZSB5b3Ugd2lsbCBoYXZlIHRvIG1ha2UgYSBsaW5lIGJyZWFrLgorCisJCQkJCQkqaV9DVFJMLVgqICppbnNlcnRfZXhwYW5kKgorQ1RSTC1YIGVudGVycyBhIHN1Yi1tb2RlIHdoZXJlIHNldmVyYWwgY29tbWFuZHMgY2FuIGJlIHVzZWQuICBNb3N0IG9mIHRoZXNlCitjb21tYW5kcyBkbyBrZXl3b3JkIGNvbXBsZXRpb247IHNlZSB8aW5zLWNvbXBsZXRpb258LiAgVGhlc2UgYXJlIG5vdCBhdmFpbGFibGUKK3doZW4gVmltIHdhcyBjb21waWxlZCB3aXRob3V0IHRoZSB8K2luc2VydF9leHBhbmR8IGZlYXR1cmUuCisKK1R3byBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBzY3JvbGwgdGhlIHdpbmRvdyB1cCBvciBkb3duLCB3aXRob3V0IGV4aXRpbmcKK2luc2VydCBtb2RlOgorCisJCQkJCQkqaV9DVFJMLVhfQ1RSTC1FKgorQ1RSTC1YIENUUkwtRQkJc2Nyb2xsIHdpbmRvdyBvbmUgbGluZSB1cC4KKworCQkJCQkJKmlfQ1RSTC1YX0NUUkwtWSoKK0NUUkwtWCBDVFJMLVkJCXNjcm9sbCB3aW5kb3cgb25lIGxpbmUgZG93bi4KKworQWZ0ZXIgQ1RSTC1YIGlzIHByZXNzZWQsIGVhY2ggQ1RSTC1FIChDVFJMLVkpIHNjcm9sbHMgdGhlIHdpbmRvdyB1cCAoZG93bikgYnkKK29uZSBsaW5lIHVubGVzcyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBjdXJzb3IgdG8gbW92ZSBmcm9tIGl0cyBjdXJyZW50IHBvc2l0aW9uCitpbiB0aGUgZmlsZS4gIEFzIHNvb24gYXMgYW5vdGhlciBrZXkgaXMgcHJlc3NlZCwgQ1RSTC1YIG1vZGUgaXMgZXhpdGVkIGFuZAordGhhdCBrZXkgaXMgaW50ZXJwcmV0ZWQgYXMgaW4gSW5zZXJ0IG1vZGUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBTcGVjaWFsIHNwZWNpYWwga2V5cwkJCQkqaW5zLXNwZWNpYWwtc3BlY2lhbCoKKworVGhlIGZvbGxvd2luZyBrZXlzIGFyZSBzcGVjaWFsLiAgVGhleSBzdG9wIHRoZSBjdXJyZW50IGluc2VydCwgZG8gc29tZXRoaW5nLAorYW5kIHRoZW4gcmVzdGFydCBpbnNlcnRpb24uICBUaGlzIG1lYW5zIHlvdSBjYW4gZG8gc29tZXRoaW5nIHdpdGhvdXQgZ2V0dGluZworb3V0IG9mIEluc2VydCBtb2RlLiAgVGhpcyBpcyB2ZXJ5IGhhbmR5IGlmIHlvdSBwcmVmZXIgdG8gdXNlIHRoZSBJbnNlcnQgbW9kZQorYWxsIHRoZSB0aW1lLCBqdXN0IGxpa2UgZWRpdG9ycyB0aGF0IGRvbid0IGhhdmUgYSBzZXBhcmF0ZSBOb3JtYWwgbW9kZS4gIFlvdQorbWF5IGFsc28gd2FudCB0byBzZXQgdGhlICdiYWNrc3BhY2UnIG9wdGlvbiB0byAiaW5kZW50LGVvbCxzdGFydCIgYW5kIHNldCB0aGUKKydpbnNlcnRtb2RlJyBvcHRpb24uICBZb3UgY2FuIHVzZSBDVFJMLU8gaWYgeW91IHdhbnQgdG8gbWFwIGEgZnVuY3Rpb24ga2V5IHRvCithIGNvbW1hbmQuCisKK1RoZSBjaGFuZ2VzIChpbnNlcnRlZCBvciBkZWxldGVkIGNoYXJhY3RlcnMpIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlc2Uga2V5cyBjYW4KK2JlIHVuZG9uZSBzZXBhcmF0ZWx5LiAgT25seSB0aGUgbGFzdCBjaGFuZ2UgY2FuIGJlIHJlZG9uZSBhbmQgYWx3YXlzIGJlaGF2ZXMKK2xpa2UgYW4gImkiIGNvbW1hbmQuCisKK2NoYXIJCWFjdGlvbgl+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPFVwPgkJY3Vyc29yIG9uZSBsaW5lIHVwCQkJICAgICAqaV88VXA+KgorPERvd24+CQljdXJzb3Igb25lIGxpbmUgZG93bgkJCSAgICAgKmlfPERvd24+KgorQ1RSTC1HIDxVcD4JY3Vyc29yIG9uZSBsaW5lIHVwLCBpbnNlcnQgc3RhcnQgY29sdW1uCSAgICAgKmlfQ1RSTC1HXzxVcD4qCitDVFJMLUcgawljdXJzb3Igb25lIGxpbmUgdXAsIGluc2VydCBzdGFydCBjb2x1bW4JICAgICAqaV9DVFJMLUdfayoKK0NUUkwtRyBDVFJMLUsJY3Vyc29yIG9uZSBsaW5lIHVwLCBpbnNlcnQgc3RhcnQgY29sdW1uCSAgICAgKmlfQ1RSTC1HX0NUUkwtSyoKK0NUUkwtRyA8RG93bj4JY3Vyc29yIG9uZSBsaW5lIGRvd24sIGluc2VydCBzdGFydCBjb2x1bW4gICAgKmlfQ1RSTC1HXzxEb3duPioKK0NUUkwtRyBqCWN1cnNvciBvbmUgbGluZSBkb3duLCBpbnNlcnQgc3RhcnQgY29sdW1uICAgICppX0NUUkwtR19qKgorQ1RSTC1HIENUUkwtSgljdXJzb3Igb25lIGxpbmUgZG93biwgaW5zZXJ0IHN0YXJ0IGNvbHVtbiAgICAqaV9DVFJMLUdfQ1RSTC1KKgorPExlZnQ+CQljdXJzb3Igb25lIGNoYXJhY3RlciBsZWZ0CQkgICAgICppXzxMZWZ0PioKKzxSaWdodD4JCWN1cnNvciBvbmUgY2hhcmFjdGVyIHJpZ2h0CQkgICAgICppXzxSaWdodD4qCis8Uy1MZWZ0PgljdXJzb3Igb25lIHdvcmQgYmFjayAobGlrZSAiYiIgY29tbWFuZCkJICAgICAqaV88Uy1MZWZ0PioKKzxDLUxlZnQ+CWN1cnNvciBvbmUgd29yZCBiYWNrIChsaWtlICJiIiBjb21tYW5kKQkgICAgICppXzxDLUxlZnQ+KgorPFMtUmlnaHQ+CWN1cnNvciBvbmUgd29yZCBmb3J3YXJkIChsaWtlICJ3IiBjb21tYW5kKSAgICppXzxTLVJpZ2h0PioKKzxDLVJpZ2h0PgljdXJzb3Igb25lIHdvcmQgZm9yd2FyZCAobGlrZSAidyIgY29tbWFuZCkgICAqaV88Qy1SaWdodD4qCis8SG9tZT4JCWN1cnNvciB0byBmaXJzdCBjaGFyIGluIHRoZSBsaW5lCSAgICAgKmlfPEhvbWU+KgorPEVuZD4JCWN1cnNvciB0byBhZnRlciBsYXN0IGNoYXIgaW4gdGhlIGxpbmUJICAgICAqaV88RW5kPioKKzxDLUhvbWU+CWN1cnNvciB0byBmaXJzdCBjaGFyIGluIHRoZSBmaWxlCSAgICAgKmlfPEMtSG9tZT4qCis8Qy1FbmQ+CQljdXJzb3IgdG8gYWZ0ZXIgbGFzdCBjaGFyIGluIHRoZSBmaWxlCSAgICAgKmlfPEMtRW5kPioKKzxMZWZ0TW91c2U+CWN1cnNvciB0byBwb3NpdGlvbiBvZiBtb3VzZSBjbGljawkgICAgICppXzxMZWZ0TW91c2U+KgorPFMtVXA+CQltb3ZlIHdpbmRvdyBvbmUgcGFnZSB1cAkJCSAgICAgKmlfPFMtVXA+KgorPFBhZ2VVcD4JbW92ZSB3aW5kb3cgb25lIHBhZ2UgdXAJCQkgICAgICppXzxQYWdlVXA+KgorPFMtRG93bj4JbW92ZSB3aW5kb3cgb25lIHBhZ2UgZG93bgkJICAgICAqaV88Uy1Eb3duPioKKzxQYWdlRG93bj4JbW92ZSB3aW5kb3cgb25lIHBhZ2UgZG93bgkJICAgICAqaV88UGFnZURvd24+KgorPE1vdXNlRG93bj4Jc2Nyb2xsIHRocmVlIGxpbmVzIGRvd24JCQkgICAgICppXzxNb3VzZURvd24+KgorPFMtTW91c2VEb3duPglzY3JvbGwgYSBmdWxsIHBhZ2UgZG93bgkJCSAgICAgKmlfPFMtTW91c2VEb3duPioKKzxNb3VzZVVwPglzY3JvbGwgdGhyZWUgbGluZXMgdXAJCQkgICAgICppXzxNb3VzZVVwPioKKzxTLU1vdXNlVXA+CXNjcm9sbCBhIGZ1bGwgcGFnZSB1cAkJCSAgICAgKmlfPFMtTW91c2VVcD4qCitDVFJMLU8JCWV4ZWN1dGUgb25lIGNvbW1hbmQsIHJldHVybiB0byBJbnNlcnQgbW9kZSAgICppX0NUUkwtTyoKK0NUUkwtRyB1CWJyZWFrIHVuZG8gc2VxdWVuY2UsIHN0YXJ0IG5ldyBjaGFuZ2UJICAgICAqaV9DVFJMLUdfdSoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IElmIHRoZSBjdXJzb3Iga2V5cyB0YWtlIHlvdSBvdXQgb2YgSW5zZXJ0IG1vZGUsIGNoZWNrIHRoZSAnbm9lc2NrZXlzJworb3B0aW9uLgorCitUaGUgQ1RSTC1PIGNvbW1hbmQgc29tZXRpbWVzIGhhcyBhIHNpZGUgZWZmZWN0OiBJZiB0aGUgY3Vyc29yIHdhcyBiZXlvbmQgdGhlCitlbmQgb2YgdGhlIGxpbmUsIGl0IHdpbGwgYmUgcHV0IG9uIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgbGluZS4gIEluCittYXBwaW5ncyBpdCdzIG9mdGVuIGJldHRlciB0byB1c2UgPEVzYz4gKGZpcnN0IHB1dCBhbiAieCIgaW4gdGhlIHRleHQsIDxFc2M+Cit3aWxsIHRoZW4gYWx3YXlzIHB1dCB0aGUgY3Vyc29yIG9uIGl0KS4KKworVGhlIHNoaWZ0ZWQgY3Vyc29yIGtleXMgYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHRlcm1pbmFscy4KKworQW5vdGhlciBzaWRlIGVmZmVjdCBpcyB0aGF0IGEgY291bnQgc3BlY2lmaWVkIGJlZm9yZSB0aGUgImkiIG9yICJhIiBjb21tYW5kIGlzCitpZ25vcmVkLiAgVGhhdCBpcyBiZWNhdXNlIHJlcGVhdGluZyB0aGUgZWZmZWN0IG9mIHRoZSBjb21tYW5kIGFmdGVyIENUUkwtTyBpcwordG9vIGNvbXBsaWNhdGVkLgorCitBbiBleGFtcGxlIGZvciB1c2luZyBDVFJMLUcgdTogPgorCisJOmlub3JlbWFwIDxDLUg+IDxDLUc+dTxDLUg+CisKK1RoaXMgcmVkZWZpbmVzIHRoZSBiYWNrc3BhY2Uga2V5IHRvIHN0YXJ0IGEgbmV3IHVuZG8gc2VxdWVuY2UuICBZb3UgY2FuIG5vdwordW5kbyB0aGUgZWZmZWN0IG9mIHRoZSBiYWNrc3BhY2Uga2V5LCB3aXRob3V0IGNoYW5naW5nIHdoYXQgeW91IHR5cGVkIGJlZm9yZQordGhhdCwgd2l0aCBDVFJMLU8gdS4KKworV2hlbiB0aGUgJ3doaWNod3JhcCcgb3B0aW9uIGlzIHNldCBhcHByb3ByaWF0ZWx5LCB0aGUgPExlZnQ+IGFuZCA8UmlnaHQ+CitrZXlzIG9uIHRoZSBmaXJzdC9sYXN0IGNoYXJhY3RlciBpbiB0aGUgbGluZSBtYWtlIHRoZSBjdXJzb3Igd3JhcCB0byB0aGUKK3ByZXZpb3VzL25leHQgbGluZS4KKworVGhlIENUUkwtRyBqIGFuZCBDVFJMLUcgayBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBpbnNlcnQgdGV4dCBpbiBmcm9udCBvZiBhCitjb2x1bW4uICBFeGFtcGxlOiA+CisgICBpbnQgaTsKKyAgIGludCBqOworUG9zaXRpb24gdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgImludCIsIHR5cGUgImlzdGF0aWM8Qy1HPmogICAgICAgIi4gIFRoZQorcmVzdWx0IGlzOiA+CisgICBzdGF0aWMgaW50IGk7CisJICBpbnQgajsKK1doZW4gaW5zZXJ0aW5nIHRoZSBzYW1lIHRleHQgaW4gZnJvbnQgb2YgdGhlIGNvbHVtbiBpbiBldmVyeSBsaW5lLCB1c2UgdGhlCitWaXN1YWwgYmxvY2t3aXNlIGNvbW1hbmQgIkkiIHx2X2JfSXwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gJ3RleHR3aWR0aCcgYW5kICd3cmFwbWFyZ2luJyBvcHRpb25zCQkJKmlucy10ZXh0d2lkdGgqCisKK1RoZSAndGV4dHdpZHRoJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBicmVhayBhIGxpbmUgYmVmb3JlIGl0CitnZXRzIHRvbyBsb25nLiAgU2V0IHRoZSAndGV4dHdpZHRoJyBvcHRpb24gdG8gdGhlIGRlc2lyZWQgbWF4aW11bSBsaW5lCitsZW5ndGguICBJZiB5b3UgdGhlbiB0eXBlIG1vcmUgY2hhcmFjdGVycyAobm90IHNwYWNlcyBvciB0YWJzKSwgdGhlCitsYXN0IHdvcmQgd2lsbCBiZSBwdXQgb24gYSBuZXcgbGluZSAodW5sZXNzIGl0IGlzIHRoZSBvbmx5IHdvcmQgb24gdGhlCitsaW5lKS4gIElmIHlvdSBzZXQgJ3RleHR3aWR0aCcgdG8gMCwgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLgorCitUaGUgJ3dyYXBtYXJnaW4nIG9wdGlvbiBkb2VzIGFsbW9zdCB0aGUgc2FtZS4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQKKyd0ZXh0d2lkdGgnIGhhcyBhIGZpeGVkIHdpZHRoIHdoaWxlICd3cmFwbWFyZ2luJyBkZXBlbmRzIG9uIHRoZSB3aWR0aCBvZiB0aGUKK3NjcmVlbi4gIFdoZW4gdXNpbmcgJ3dyYXBtYXJnaW4nIHRoaXMgaXMgZXF1YWwgdG8gdXNpbmcgJ3RleHR3aWR0aCcgd2l0aCBhCit2YWx1ZSBlcXVhbCB0byAoY29sdW1ucyAtICd3cmFwbWFyZ2luJyksIHdoZXJlIGNvbHVtbnMgaXMgdGhlIHdpZHRoIG9mIHRoZQorc2NyZWVuLgorCitXaGVuICd0ZXh0d2lkdGgnIGFuZCAnd3JhcG1hcmdpbicgYXJlIGJvdGggc2V0LCAndGV4dHdpZHRoJyBpcyB1c2VkLgorCitJZiB5b3UgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gYnJlYWsgdGhlIGxpbmUsIGJ1dCB2aWV3IHRoZSBsaW5lIHdyYXBwZWQgYXQgYQorY29udmVuaWVudCBwbGFjZSwgc2VlIHRoZSAnbGluZWJyZWFrJyBvcHRpb24uCisKK1RoZSBsaW5lIGlzIG9ubHkgYnJva2VuIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2luZyBpbnNlcnQgbW9kZSwgb3Igd2hlbgorYXBwZW5kaW5nIHRvIGEgbGluZS4gIFdoZW4gaW4gcmVwbGFjZSBtb2RlIGFuZCB0aGUgbGluZSBsZW5ndGggaXMgbm90CitjaGFuZ2VkLCB0aGUgbGluZSB3aWxsIG5vdCBiZSBicm9rZW4uCisKK0xvbmcgbGluZXMgYXJlIGJyb2tlbiBpZiB5b3UgZW50ZXIgYSBub24td2hpdGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBtYXJnaW4uCitUaGUgc2l0dWF0aW9ucyB3aGVyZSBhIGxpbmUgd2lsbCBiZSBicm9rZW4gY2FuIGJlIHJlc3RyaWN0ZWQgYnkgYWRkaW5nCitjaGFyYWN0ZXJzIHRvIHRoZSAnZm9ybWF0b3B0aW9ucycgb3B0aW9uOgorImwiICBPbmx5IGJyZWFrIGEgbGluZSBpZiBpdCB3YXMgbm90IGxvbmdlciB0aGFuICd0ZXh0d2lkdGgnIHdoZW4gdGhlIGluc2VydAorICAgICBzdGFydGVkLgorInYiICBPbmx5IGJyZWFrIGF0IGEgd2hpdGUgY2hhcmFjdGVyIHRoYXQgaGFzIGJlZW4gZW50ZXJlZCBkdXJpbmcgdGhlCisgICAgIGN1cnJlbnQgaW5zZXJ0IGNvbW1hbmQuICBUaGlzIGlzIG1vc3RseSBWaS1jb21wYXRpYmxlLgorImx2IiBPbmx5IGJyZWFrIGlmIHRoZSBsaW5lIHdhcyBub3QgbG9uZ2VyIHRoYW4gJ3RleHR3aWR0aCcgd2hlbiB0aGUgaW5zZXJ0CisgICAgIHN0YXJ0ZWQgYW5kIG9ubHkgYXQgYSB3aGl0ZSBjaGFyYWN0ZXIgdGhhdCBoYXMgYmVlbiBlbnRlcmVkIGR1cmluZyB0aGUKKyAgICAgY3VycmVudCBpbnNlcnQgY29tbWFuZC4gIE9ubHkgZGlmZmVycyBmcm9tICJsIiB3aGVuIGVudGVyaW5nIG5vbi13aGl0ZQorICAgICBjaGFyYWN0ZXJzIHdoaWxlIGNyb3NzaW5nIHRoZSAndGV4dHdpZHRoJyBib3VuZGFyeS4KKworSWYgeW91IHdhbnQgdG8gZm9ybWF0IGEgYmxvY2sgb2YgdGV4dCwgeW91IGNhbiB1c2UgdGhlICJncSIgb3BlcmF0b3IuICBUeXBlCisiZ3EiIGFuZCBhIG1vdmVtZW50IGNvbW1hbmQgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAgSW4KK21hbnkgY2FzZXMsIHRoZSBjb21tYW5kICJncX0iIHdpbGwgZG8gd2hhdCB5b3Ugd2FudCAoZm9ybWF0IHVudGlsIHRoZSBlbmQgb2YKK3BhcmFncmFwaCkuICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSAiZ3FhcCIsIHdoaWNoIHdpbGwgZm9ybWF0IHRoZSB3aG9sZQorcGFyYWdyYXBoLCBubyBtYXR0ZXIgd2hlcmUgdGhlIGN1cnNvciBjdXJyZW50bHkgaXMuICBPciB5b3UgY2FuIHVzZSBWaXN1YWwKK21vZGU6IGhpdCAidiIsIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2ssIGFuZCB0eXBlICJncSIuICBTZWUgYWxzbyB8Z3F8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuICdleHBhbmR0YWInLCAnc21hcnR0YWInIGFuZCAnc29mdHRhYnN0b3AnIG9wdGlvbnMJKmlucy1leHBhbmR0YWIqCisKK0lmIHRoZSAnZXhwYW5kdGFiJyBvcHRpb24gaXMgb24sIHNwYWNlcyB3aWxsIGJlIHVzZWQgdG8gZmlsbCB0aGUgYW1vdW50IG9mCit3aGl0ZXNwYWNlIG9mIHRoZSB0YWIuICBJZiB5b3Ugd2FudCB0byBlbnRlciBhIHJlYWwgPFRhYj4sIHR5cGUgQ1RSTC1WIGZpcnN0CisodXNlIENUUkwtUSB3aGVuIENUUkwtViBpcyBtYXBwZWQgfGlfQ1RSTC1RfCkuCitUaGUgJ2V4cGFuZHRhYicgb3B0aW9uIGlzIG9mZiBieSBkZWZhdWx0LiAgTm90ZSB0aGF0IGluIFJlcGxhY2UgbW9kZSwgYSBzaW5nbGUKK2NoYXJhY3RlciBpcyByZXBsYWNlZCB3aXRoIHNldmVyYWwgc3BhY2VzLiAgVGhlIHJlc3VsdCBvZiB0aGlzIGlzIHRoYXQgdGhlCitudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgbGluZSBpbmNyZWFzZXMuICBCYWNrc3BhY2luZyB3aWxsIGRlbGV0ZSBvbmUKK3NwYWNlIGF0IGEgdGltZS4gIFRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIgd2lsbCBiZSBwdXQgYmFjayBmb3Igb25seSBvbmUgc3BhY2UKK3RoYXQgeW91IGJhY2tzcGFjZSBvdmVyICh0aGUgbGFzdCBvbmUpLiAge1ZpIGRvZXMgbm90IGhhdmUgdGhlICdleHBhbmR0YWInCitvcHRpb259CisKKwkJCQkJCQkqaW5zLXNtYXJ0dGFiKgorV2hlbiB0aGUgJ3NtYXJ0dGFiJyBvcHRpb24gaXMgb24sIGEgPFRhYj4gaW5zZXJ0cyAnc2hpZnR3aWR0aCcgcG9zaXRpb25zIGF0Cit0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBhbmQgJ3RhYnN0b3AnIHBvc2l0aW9ucyBpbiBvdGhlciBwbGFjZXMuICBUaGlzIG1lYW5zCit0aGF0IG9mdGVuIHNwYWNlcyBpbnN0ZWFkIG9mIGEgPFRhYj4gY2hhcmFjdGVyIGFyZSBpbnNlcnRlZC4gIFdoZW4gJ3NtYXJ0dGFiCitpcyBvZmYsIGEgPFRhYj4gYWx3YXlzIGluc2VydHMgJ3RhYnN0b3AnIHBvc2l0aW9ucywgYW5kICdzaGlmdHdpZHRoJyBpcyBvbmx5Cit1c2VkIGZvciAiPj4iIGFuZCB0aGUgbGlrZS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqaW5zLXNvZnR0YWJzdG9wKgorV2hlbiB0aGUgJ3NvZnR0YWJzdG9wJyBvcHRpb24gaXMgbm9uLXplcm8sIGEgPFRhYj4gaW5zZXJ0cyAnc29mdHRhYnN0b3AnCitwb3NpdGlvbnMsIGFuZCBhIDxCUz4gdXNlZCB0byBkZWxldGUgd2hpdGUgc3BhY2UsIHdpbGwgZGVsZXRlICdzb2Z0dGFic3RvcCcKK3Bvc2l0aW9ucy4gIFRoaXMgZmVlbHMgbGlrZSAndGFic3RvcCcgd2FzIHNldCB0byAnc29mdHRhYnN0b3AnLCBidXQgYSByZWFsCis8VGFiPiBjaGFyYWN0ZXIgc3RpbGwgdGFrZXMgJ3RhYnN0b3AnIHBvc2l0aW9ucywgc28geW91ciBmaWxlIHdpbGwgc3RpbGwgbG9vaworY29ycmVjdCB3aGVuIHVzZWQgYnkgb3RoZXIgYXBwbGljYXRpb25zLgorCitJZiAnc29mdHRhYnN0b3AnIGlzIG5vbi16ZXJvLCBhIDxCUz4gd2lsbCB0cnkgdG8gZGVsZXRlIGFzIG11Y2ggd2hpdGUgc3BhY2UgdG8KK21vdmUgdG8gdGhlIHByZXZpb3VzICdzb2Z0dGFic3RvcCcgcG9zaXRpb24sIGV4Y2VwdCB3aGVuIHRoZSBwcmV2aW91c2x5CitpbnNlcnRlZCBjaGFyYWN0ZXIgaXMgYSBzcGFjZSwgdGhlbiBpdCB3aWxsIG9ubHkgZGVsZXRlIHRoZSBjaGFyYWN0ZXIgYmVmb3JlCit0aGUgY3Vyc29yLiAgT3RoZXJ3aXNlIHlvdSBjYW5ub3QgYWx3YXlzIGRlbGV0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZQorY3Vyc29yLiAgWW91IHdpbGwgaGF2ZSB0byBkZWxldGUgJ3NvZnR0YWJzdG9wJyBjaGFyYWN0ZXJzIGZpcnN0LCBhbmQgdGhlbiB0eXBlCitleHRyYSBzcGFjZXMgdG8gZ2V0IHdoZXJlIHlvdSB3YW50IHRvIGJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIFJlcGxhY2UgbW9kZQkJCQkqUmVwbGFjZSogKlJlcGxhY2UtbW9kZSogKm1vZGUtcmVwbGFjZSoKKworRW50ZXIgUmVwbGFjZSBtb2RlIHdpdGggdGhlICJSIiBjb21tYW5kIGluIG5vcm1hbCBtb2RlLgorCitJbiBSZXBsYWNlIG1vZGUsIG9uZSBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgaXMgZGVsZXRlZCBmb3IgZXZlcnkgY2hhcmFjdGVyIHlvdQordHlwZS4gIElmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciB0byBkZWxldGUgKGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpLCB0aGUKK3R5cGVkIGNoYXJhY3RlciBpcyBhcHBlbmRlZCAoYXMgaW4gSW5zZXJ0IG1vZGUpLiAgVGh1cyB0aGUgbnVtYmVyIG9mCitjaGFyYWN0ZXJzIGluIGEgbGluZSBzdGF5cyB0aGUgc2FtZSB1bnRpbCB5b3UgZ2V0IHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCitJZiBhIDxOTD4gaXMgdHlwZWQsIGEgbGluZSBicmVhayBpcyBpbnNlcnRlZCBhbmQgbm8gY2hhcmFjdGVyIGlzIGRlbGV0ZWQuCisKK0JlIGNhcmVmdWwgd2l0aCA8VGFiPiBjaGFyYWN0ZXJzLiAgSWYgeW91IHR5cGUgYSBub3JtYWwgcHJpbnRpbmcgY2hhcmFjdGVyIGluCitpdHMgcGxhY2UsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyBzdGlsbCB0aGUgc2FtZSwgYnV0IHRoZSBudW1iZXIgb2YKK2NvbHVtbnMgd2lsbCBiZWNvbWUgc21hbGxlci4KKworSWYgeW91IGRlbGV0ZSBjaGFyYWN0ZXJzIGluIFJlcGxhY2UgbW9kZSAod2l0aCA8QlM+LCBDVFJMLVcsIG9yIENUUkwtVSksIHdoYXQKK2hhcHBlbnMgaXMgdGhhdCB5b3UgZGVsZXRlIHRoZSBjaGFuZ2VzLiAgVGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIHJlcGxhY2VkCithcmUgcmVzdG9yZWQuICBJZiB5b3UgaGFkIHR5cGVkIHBhc3QgdGhlIGV4aXN0aW5nIHRleHQsIHRoZSBjaGFyYWN0ZXJzIHlvdQorYWRkZWQgYXJlIGRlbGV0ZWQuICBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgY2hhcmFjdGVyLWF0LWEtdGltZSB1bmRvLgorCitJZiB0aGUgJ2V4cGFuZHRhYicgb3B0aW9uIGlzIG9uLCBhIDxUYWI+IHdpbGwgcmVwbGFjZSBvbmUgY2hhcmFjdGVyIHdpdGgKK3NldmVyYWwgc3BhY2VzLiAgVGhlIHJlc3VsdCBvZiB0aGlzIGlzIHRoYXQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZQorbGluZSBpbmNyZWFzZXMuICBCYWNrc3BhY2luZyB3aWxsIGRlbGV0ZSBvbmUgc3BhY2UgYXQgYSB0aW1lLiAgVGhlIG9yaWdpbmFsCitjaGFyYWN0ZXIgd2lsbCBiZSBwdXQgYmFjayBmb3Igb25seSBvbmUgc3BhY2UgdGhhdCB5b3UgYmFja3NwYWNlIG92ZXIgKHRoZQorbGFzdCBvbmUpLiAge1ZpIGRvZXMgbm90IGhhdmUgdGhlICdleHBhbmR0YWInIG9wdGlvbn0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBWaXJ0dWFsIFJlcGxhY2UgbW9kZQkJKnZyZXBsYWNlLW1vZGUqICpWaXJ0dWFsLVJlcGxhY2UtbW9kZSoKKworRW50ZXIgVmlydHVhbCBSZXBsYWNlIG1vZGUgd2l0aCB0aGUgImdSIiBjb21tYW5kIGluIG5vcm1hbCBtb2RlLgore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdnJlcGxhY2UgZmVhdHVyZX0KK3tWaSBkb2VzIG5vdCBoYXZlIFZpcnR1YWwgUmVwbGFjZSBtb2RlfQorCitWaXJ0dWFsIFJlcGxhY2UgbW9kZSBpcyBzaW1pbGFyIHRvIFJlcGxhY2UgbW9kZSwgYnV0IGluc3RlYWQgb2YgcmVwbGFjaW5nCithY3R1YWwgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSwgeW91IGFyZSByZXBsYWNpbmcgc2NyZWVuIHJlYWwgZXN0YXRlLCBzbyB0aGF0CitjaGFyYWN0ZXJzIGZ1cnRoZXIgb24gaW4gdGhlIGZpbGUgbmV2ZXIgYXBwZWFyIHRvIG1vdmUuCisKK1NvIGlmIHlvdSB0eXBlIGEgPFRhYj4gaXQgbWF5IHJlcGxhY2Ugc2V2ZXJhbCBub3JtYWwgY2hhcmFjdGVycywgYW5kIGlmIHlvdQordHlwZSBhIGxldHRlciBvbiB0b3Agb2YgYSA8VGFiPiBpdCBtYXkgbm90IHJlcGxhY2UgYW55dGhpbmcgYXQgYWxsLCBzaW5jZSB0aGUKKzxUYWI+IHdpbGwgc3RpbGwgbGluZSB1cCB0byB0aGUgc2FtZSBwbGFjZSBhcyBiZWZvcmUuCisKK1R5cGluZyBhIDxOTD4gc3RpbGwgZG9lc24ndCBjYXVzZSBjaGFyYWN0ZXJzIGxhdGVyIGluIHRoZSBmaWxlIHRvIGFwcGVhciB0bworbW92ZS4gIFRoZSByZXN0IG9mIHRoZSBjdXJyZW50IGxpbmUgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgPE5MPiAodGhhdCBpcywKK3RoZXkgYXJlIGRlbGV0ZWQpLCBhbmQgcmVwbGFjaW5nIGNvbnRpbnVlcyBvbiB0aGUgbmV4dCBsaW5lLiAgQSBuZXcgbGluZSBpcworTk9UIGluc2VydGVkIHVubGVzcyB5b3UgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCitJbnRlcmVzdGluZyBlZmZlY3RzIGFyZSBzZWVuIHdoZW4gdXNpbmcgQ1RSTC1UIGFuZCBDVFJMLUQuICBUaGUgY2hhcmFjdGVycworYmVmb3JlIHRoZSBjdXJzb3IgYXJlIHNoaWZ0ZWQgc2lkZXdheXMgYXMgbm9ybWFsLCBidXQgY2hhcmFjdGVycyBsYXRlciBpbiB0aGUKK2xpbmUgc3RpbGwgcmVtYWluIHN0aWxsLiAgQ1RSTC1UIHdpbGwgaGlkZSBzb21lIG9mIHRoZSBvbGQgbGluZSB1bmRlciB0aGUKK3NoaWZ0ZWQgY2hhcmFjdGVycywgYnV0IENUUkwtRCB3aWxsIHJldmVhbCB0aGVtIGFnYWluLgorCitBcyB3aXRoIFJlcGxhY2UgbW9kZSwgdXNpbmcgPEJTPiBldGMgd2lsbCBicmluZyBiYWNrIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZQorcmVwbGFjZWQuICBUaGlzIHN0aWxsIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggJ3NtYXJ0aW5kZW50JywgQ1RSTC1UIGFuZAorQ1RSTC1ELCAnZXhwYW5kdGFiJywgJ3NtYXJ0dGFiJywgJ3NvZnR0YWJzdG9wJywgZXRjLgorCitJbiAnbGlzdCcgbW9kZSwgVmlydHVhbCBSZXBsYWNlIG1vZGUgYWN0cyBhcyBpZiBpdCB3YXMgbm90IGluICdsaXN0JyBtb2RlLAordW5sZXNzICJMIiBpcyBpbiAnY3BvcHRpb25zJy4KKworTm90ZSB0aGF0IHRoZSBvbmx5IHRpbWVzIGNoYXJhY3RlcnMgYmV5b25kIHRoZSBjdXJzb3Igc2hvdWxkIGFwcGVhciB0byBtb3ZlCithcmUgaW4gJ2xpc3QnIG1vZGUsIGFuZCBvY2Nhc2lvbmFsbHkgd2hlbiAnd3JhcCcgaXMgc2V0IChhbmQgdGhlIGxpbmUgY2hhbmdlcworbGVuZ3RoIHRvIGJlY29tZSBzaG9ydGVyIG9yIHdpZGVyIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBzY3JlZW4pLCBvcgorbW9tZW50YXJpbHkgd2hlbiB0eXBpbmcgb3ZlciBhIENUUkwgY2hhcmFjdGVyLiAgQSBDVFJMIGNoYXJhY3RlciB0YWtlcyB1cCB0d28KK3NjcmVlbiBzcGFjZXMuICBXaGVuIHJlcGxhY2luZyBpdCB3aXRoIHR3byBub3JtYWwgY2hhcmFjdGVycywgdGhlIGZpcnN0IHdpbGwKK2JlIGluc2VydGVkIGFuZCB0aGUgc2Vjb25kIHdpbGwgcmVwbGFjZSB0aGUgQ1RSTCBjaGFyYWN0ZXIuCisKK1RoaXMgbW9kZSBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZWRpdGluZyA8VGFiPiBzZXBhcmF0ZWQgY29sdW1ucyBpbiB0YWJsZXMsIGZvcgorZW50ZXJpbmcgbmV3IGRhdGEgd2hpbGUga2VlcGluZyBhbGwgdGhlIGNvbHVtbnMgYWxpZ25lZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBJbnNlcnQgbW9kZSBjb21wbGV0aW9uCQkJCSppbnMtY29tcGxldGlvbioKKworSW4gSW5zZXJ0IGFuZCBSZXBsYWNlIG1vZGVzLCB0aGVyZSBhcmUgc2V2ZXJhbCBjb21tYW5kcyB0byBjb21wbGV0ZSBwYXJ0IG9mIGEKK2tleXdvcmQgb3IgbGluZSB0aGF0IGhhcyBiZWVuIHR5cGVkLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZSB1c2luZworY29tcGxpY2F0ZWQga2V5d29yZHMgKGUuZy4sIGZ1bmN0aW9uIG5hbWVzIHdpdGggY2FwaXRhbHMgYW5kIHVuZGVyc2NvcmVzKS4KKworVGhlc2UgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtpbnNlcnRfZXhwYW5kfCBmZWF0dXJlIHdhcworZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCitDb21wbGV0aW9uIGNhbiBiZSBkb25lIGZvcjoKKworMS4gV2hvbGUgbGluZXMJCQkJCQl8aV9DVFJMLVhfQ1RSTC1MfAorMi4ga2V5d29yZHMgaW4gdGhlIGN1cnJlbnQgZmlsZQkJCQl8aV9DVFJMLVhfQ1RSTC1OfAorMy4ga2V5d29yZHMgaW4gJ2RpY3Rpb25hcnknCQkJCXxpX0NUUkwtWF9DVFJMLUt8Cis0LiBrZXl3b3JkcyBpbiAndGhlc2F1cnVzJywgdGhlc2F1cnVzLXN0eWxlCQl8aV9DVFJMLVhfQ1RSTC1UfAorNS4ga2V5d29yZHMgaW4gdGhlIGN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzCQl8aV9DVFJMLVhfQ1RSTC1JfAorNi4gdGFncwkJCQkJCQl8aV9DVFJMLVhfQ1RSTC1dfAorNy4gZmlsZSBuYW1lcwkJCQkJCXxpX0NUUkwtWF9DVFJMLUZ8Cis4LiBkZWZpbml0aW9ucyBvciBtYWNyb3MJCQkJfGlfQ1RSTC1YX0NUUkwtRHwKKzkuIFZpbSBjb21tYW5kLWxpbmUJCQkJCXxpX0NUUkwtWF9DVFJMLVZ8CisxMC4ga2V5d29yZHMgaW4gJ2NvbXBsZXRlJwkJCQl8aV9DVFJMLU58CisKK0FsbCB0aGVzZSAoZXhjZXB0IDIpIGFyZSBkb25lIGluIENUUkwtWCBtb2RlLiAgVGhpcyBpcyBhIHN1Yi1tb2RlIG9mIEluc2VydAorYW5kIFJlcGxhY2UgbW9kZXMuICBZb3UgZW50ZXIgQ1RSTC1YIG1vZGUgYnkgdHlwaW5nIENUUkwtWCBhbmQgb25lIG9mIHRoZQorQ1RSTC1YIGNvbW1hbmRzLiAgWW91IGV4aXQgQ1RSTC1YIG1vZGUgYnkgdHlwaW5nIGEga2V5IHRoYXQgaXMgbm90IGEgdmFsaWQKK0NUUkwtWCBtb2RlIGNvbW1hbmQuICBWYWxpZCBrZXlzIGFyZSB0aGUgQ1RSTC1YIGNvbW1hbmQgaXRzZWxmLCBDVFJMLU4gKG5leHQpLAorYW5kIENUUkwtUCAocHJldmlvdXMpLgorCitBbHNvIHNlZSB0aGUgJ2luZmVyY2FzZScgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGFkanVzdCB0aGUgY2FzZSBvZiB0aGUgbWF0Y2guCisKK05vdGU6IFRoZSBrZXlzIHRoYXQgYXJlIHZhbGlkIGluIENUUkwtWCBtb2RlIGFyZSBub3QgbWFwcGVkLiAgVGhpcyBhbGxvd3MgZm9yCisiOm1hcCBeRiBeWF5GIiB0byB3b3JrICh3aGVyZSBeRiBpcyBDVFJMLUYgYW5kIF5YIGlzIENUUkwtWCkuICBUaGUga2V5IHRoYXQKK2VuZHMgQ1RSTC1YIG1vZGUgKGFueSBrZXkgdGhhdCBpcyBub3QgYSB2YWxpZCBDVFJMLVggbW9kZSBjb21tYW5kKSBpcyBtYXBwZWQuCitBbHNvLCB3aGVuIGRvaW5nIGNvbXBsZXRpb24gd2l0aCAnY29tcGxldGUnIG1hcHBpbmdzIGFwcGx5IGFzIHVzdWFsLgorCitUaGUgZm9sbG93aW5nIG1hcHBpbmdzIGFyZSBzdWdnZXN0ZWQgdG8gbWFrZSB0eXBpbmcgdGhlIGNvbXBsZXRpb24gY29tbWFuZHMKK2EgYml0IGVhc2llciAoYWx0aG91Z2ggdGhleSB3aWxsIGhpZGUgb3RoZXIgY29tbWFuZHMpOiA+CisgICAgOmlub3JlbWFwIF5dIF5YXl0KKyAgICA6aW5vcmVtYXAgXkYgXlheRgorICAgIDppbm9yZW1hcCBeRCBeWF5ECisgICAgOmlub3JlbWFwIF5MIF5YXkwKKworQXMgYSBzcGVjaWFsIGNhc2UsIHR5cGluZyBDVFJMLVIgdG8gcGVyZm9ybSByZWdpc3RlciBpbnNlcnRpb24gKHNlZQorfGlfQ1RSTC1SfCkgd2lsbCBub3QgZXhpdCBDVFJMLVggbW9kZS4gIFRoaXMgaXMgcHJpbWFyaWx5IHRvIGFsbG93IHRoZSB1c2Ugb2YKK3RoZSAnPScgcmVnaXN0ZXIgdG8gY2FsbCBzb21lIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgbmV4dCBvcGVyYXRpb24uICBJZgordGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlciAob3IgcmVzdWx0IG9mIHRoZSAnPScgcmVnaXN0ZXIgZXZhbHVhdGlvbikgYXJlCitub3QgdmFsaWQgQ1RSTC1YIG1vZGUga2V5cywgdGhlbiBDVFJMLVggbW9kZSB3aWxsIGJlIGV4aXRlZCBhcyBpZiB0aG9zZSBrZXlzCitoYWQgYmVlbiB0eXBlZC4KKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgd2lsbCBtYXAgPFRhYj4gdG8gZWl0aGVyIGFjdHVhbGx5IGluc2VydCBhIDxUYWI+IGlmCit0aGUgY3VycmVudCBsaW5lIGlzIGN1cnJlbnRseSBvbmx5IHdoaXRlc3BhY2UsIG9yIHN0YXJ0L2NvbnRpbnVlIGEgQ1RSTC1OCitjb21wbGV0aW9uIG9wZXJhdGlvbjogPgorCisJZnVuY3Rpb24hIENsZXZlclRhYigpCisJICAgaWYgc3RycGFydCggZ2V0bGluZSgnLicpLCAwLCBjb2woJy4nKS0xICkgPX4gJ15ccyokJworCSAgICAgIHJldHVybiAiXDxUYWI+IgorCSAgIGVsc2UKKwkgICAgICByZXR1cm4gIlw8Qy1OPiIKKwllbmRmdW5jdGlvbgorCWlub3JlbWFwIDxUYWI+IDxDLVI+PUNsZXZlclRhYigpPENSPgorCisKKworQ29tcGxldGluZyB3aG9sZSBsaW5lcwkJCQkJKmNvbXBsLXdob2xlLWxpbmUqCisKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1MKgorQ1RSTC1YIENUUkwtTAkJU2VhcmNoIGJhY2t3YXJkcyBmb3IgYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggdGhlCisJCQlzYW1lIGNoYXJhY3RlcnMgYXMgaW4gdGhlIGN1cnJlbnQgbGluZSBiZWZvcmUgdGhlCisJCQljdXJzb3IuICBJbmRlbnQgaXMgaWdub3JlZC4gIFRoZSBmb3VuZCBsaW5lIGlzCisJCQlpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCQkJVGhlICdjb21wbGV0ZScgb3B0aW9uIGlzIHVzZWQgdG8gZGVjaWRlIGluIHdoaWNoCisJCQlidWZmZXJzIGEgbWF0Y2ggaXMgc2VhcmNoZWQgZm9yLiAgQnV0IG9ubHkgbG9hZGVkCisJCQlidWZmZXJzIGFyZSB1c2VkLgorCUNUUkwtTAlvcgorCUNUUkwtUAkJU2VhcmNoIGJhY2t3YXJkcyBmb3IgbmV4dCBtYXRjaGluZyBsaW5lLiAgVGhpcyBsaW5lCisJCQlyZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcgbGluZS4KKworCUNUUkwtTgkJU2VhcmNoIGZvcndhcmQgZm9yIG5leHQgbWF0Y2hpbmcgbGluZS4gIFRoaXMgbGluZQorCQkJcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGxpbmUuCisKKwlDVFJMLVggQ1RSTC1MCUFmdGVyIGV4cGFuZGluZyBhIGxpbmUgeW91IGNhbiBhZGRpdGlvbmFsbHkgZ2V0IHRoZQorCQkJbGluZSBuZXh0IHRvIGl0IGJ5IHR5cGluZyBDVFJMLVggQ1RSTC1MIGFnYWluLCB1bmxlc3MKKwkJCWEgZG91YmxlIENUUkwtWCBpcyB1c2VkLgorCitDb21wbGV0aW5nIGtleXdvcmRzIGluIGN1cnJlbnQgZmlsZQkJCSpjb21wbC1jdXJyZW50KgorCisJCQkJCQkJKmlfQ1RSTC1YX0NUUkwtUCoKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1OKgorQ1RSTC1YIENUUkwtTgkJU2VhcmNoIGZvcndhcmRzIGZvciB3b3JkcyB0aGF0IHN0YXJ0IHdpdGggdGhlIGtleXdvcmQKKwkJCWluIGZyb250IG9mIHRoZSBjdXJzb3IuICBUaGUgZm91bmQga2V5d29yZCBpcyBpbnNlcnRlZAorCQkJaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4KKworQ1RSTC1YIENUUkwtUAkJU2VhcmNoIGJhY2t3YXJkcyBmb3Igd29yZHMgdGhhdCBzdGFydCB3aXRoIHRoZSBrZXl3b3JkCisJCQlpbiBmcm9udCBvZiB0aGUgY3Vyc29yLiAgVGhlIGZvdW5kIGtleXdvcmQgaXMgaW5zZXJ0ZWQKKwkJCWluIGZyb250IG9mIHRoZSBjdXJzb3IuCisKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJQ1RSTC1QCQlTZWFyY2ggYmFja3dhcmRzIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJQ1RSTC1YIENUUkwtTiBvcgorCUNUUkwtWCBDVFJMLVAJRnVydGhlciB1c2Ugb2YgQ1RSTC1YIENUUkwtTiBvciBDVFJMLVggQ1RSTC1QIHdpbGwKKwkJCWNvcHkgdGhlIHdvcmRzIGZvbGxvd2luZyB0aGUgcHJldmlvdXMgZXhwYW5zaW9uIGluCisJCQlvdGhlciBjb250ZXh0cyB1bmxlc3MgYSBkb3VibGUgQ1RSTC1YIGlzIHVzZWQuCisKK0lmIHRoZXJlIGlzIGEga2V5d29yZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yIChhIG5hbWUgbWFkZSBvdXQgb2YgYWxwaGFiZXRpYworY2hhcmFjdGVycyBhbmQgY2hhcmFjdGVycyBpbiAnaXNrZXl3b3JkJyksIGl0IGlzIHVzZWQgYXMgdGhlIHNlYXJjaCBwYXR0ZXJuLAord2l0aCAiXDwiIHByZXBlbmRlZCAobWVhbmluZzogc3RhcnQgb2YgYSB3b3JkKS4gIE90aGVyd2lzZSAiXDxca1xrIiBpcyB1c2VkCithcyBzZWFyY2ggcGF0dGVybiAoc3RhcnQgb2YgYW55IGtleXdvcmQgb2YgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMpLgorCitJbiBSZXBsYWNlIG1vZGUsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSByZXBsYWNlZCBkZXBlbmRzIG9uIHRoZQorbGVuZ3RoIG9mIHRoZSBtYXRjaGVkIHN0cmluZy4gIFRoaXMgd29ya3MgbGlrZSB0eXBpbmcgdGhlIGNoYXJhY3RlcnMgb2YgdGhlCittYXRjaGVkIHN0cmluZyBpbiBSZXBsYWNlIG1vZGUuCisKK0lmIHRoZXJlIGlzIG5vdCBhIHZhbGlkIGtleXdvcmQgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yLCBhbnkga2V5d29yZCBvZgorYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgaXMgbWF0Y2hlZC4KKwllLmcuLCB0byBnZXQ6CisJICAgIHByaW50ZigiKCVnLCAlZywgJWcpIiwgdmVjdG9yWzBdLCB2ZWN0b3JbMV0sIHZlY3RvclsyXSk7CisJanVzdCB0eXBlOgorCSAgICBwcmludGYoIiglZywgJWcsICVnKSIsIHZlY3RvclswXSwgXlBbMV0sIF5QWzJdKTsKKworTXVsdGlwbGUgcmVwZWF0cyBvZiB0aGUgc2FtZSBjb21wbGV0aW9uIGFyZSBza2lwcGVkOyB0aHVzIGEgZGlmZmVyZW50IG1hdGNoCit3aWxsIGJlIGluc2VydGVkIGF0IGVhY2ggQ1RSTC1OIGFuZCBDVFJMLVAgKHVubGVzcyB0aGVyZSBpcyBvbmx5IG9uZQorbWF0Y2hpbmcga2V5d29yZCkuCisKK1NpbmdsZSBjaGFyYWN0ZXIgbWF0Y2hlcyBhcmUgbmV2ZXIgaW5jbHVkZWQsIGFzIHRoZXkgdXN1YWxseSBqdXN0IGdldCBpbgordGhlIHdheSBvZiB3aGF0IHlvdSB3ZXJlIHJlYWxseSBhZnRlci4KKwllLmcuLCB0byBnZXQ6CisJCXByaW50ZigibmFtZSA9ICVzXG4iLCBuYW1lKTsKKwlqdXN0IHR5cGU6CisJCXByaW50ZigibmFtZSA9ICVzXG4iLCBuXlApOworCW9yIGV2ZW46CisJCXByaW50ZigibmFtZSA9ICVzXG4iLCBeUCk7CitUaGUgJ24nIGluICdcbicgaXMgc2tpcHBlZC4KKworQWZ0ZXIgZXhwYW5kaW5nIGEgd29yZCwgeW91IGNhbiB1c2UgQ1RSTC1YIENUUkwtUCBvciBDVFJMLVggQ1RSTC1OIHRvIGdldCB0aGUKK3dvcmQgZm9sbG93aW5nIHRoZSBleHBhbnNpb24gaW4gb3RoZXIgY29udGV4dHMuICBUaGVzZSBzZXF1ZW5jZXMgc2VhcmNoIGZvcgordGhlIHRleHQganVzdCBleHBhbmRlZCBhbmQgZnVydGhlciBleHBhbmQgYnkgZ2V0dGluZyBhbiBleHRyYSB3b3JkLiAgVGhpcyBpcwordXNlZnVsIGlmIHlvdSBuZWVkIHRvIHJlcGVhdCBhIHNlcXVlbmNlIG9mIGNvbXBsaWNhdGVkIHdvcmRzLiAgQWx0aG91Z2ggQ1RSTC1QCithbmQgQ1RSTC1OIGxvb2sganVzdCBmb3Igc3RyaW5ncyBvZiBhdCBsZWFzdCB0d28gY2hhcmFjdGVycywgQ1RSTC1YIENUUkwtUCBhbmQKK0NUUkwtWCBDVFJMLU4gY2FuIGJlIHVzZWQgdG8gZXhwYW5kIHdvcmRzIG9mIGp1c3Qgb25lIGNoYXJhY3Rlci4KKwllLmcuLCB0byBnZXQ6CisJCU0mZWFjdXRlO3hpY28KKwl5b3UgY2FuIHR5cGU6CisJCU1eTl5QXlheUF5YXlAKK0NUUkwtTiBzdGFydHMgdGhlIGV4cGFuc2lvbiBhbmQgdGhlbiBDVFJMLVAgdGFrZXMgYmFjayB0aGUgc2luZ2xlIGNoYXJhY3RlcgorIk0iLCB0aGUgbmV4dCB0d28gQ1RSTC1YIENUUkwtUCdzIGdldCB0aGUgd29yZHMgIiZlYWN1dGUiIGFuZCAiO3hpY28iLgorCitJZiB0aGUgcHJldmlvdXMgZXhwYW5zaW9uIHdhcyBzcGxpdCwgYmVjYXVzZSBpdCBnb3QgbG9uZ2VyIHRoYW4gJ3RleHR3aWR0aCcsCit0aGVuIGp1c3QgdGhlIHRleHQgaW4gdGhlIGN1cnJlbnQgbGluZSB3aWxsIGJlIHVzZWQuCisKK0lmIHRoZSBtYXRjaCBmb3VuZCBpcyBhdCB0aGUgZW5kIG9mIGEgbGluZSwgdGhlbiB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgbmV4dAorbGluZSB3aWxsIGJlIGluc2VydGVkIGFuZCB0aGUgbWVzc2FnZSAid29yZCBmcm9tIG5leHQgbGluZSIgZGlzcGxheWVkLCBpZgordGhpcyB3b3JkIGlzIGFjY2VwdGVkIHRoZSBuZXh0IENUUkwtWCBDVFJMLVAgb3IgQ1RSTC1YIENUUkwtTiB3aWxsIHNlYXJjaAorZm9yIHRob3NlIGxpbmVzIHN0YXJ0aW5nIHdpdGggdGhpcyB3b3JkLgorCisKK0NvbXBsZXRpbmcga2V5d29yZHMgaW4gJ2RpY3Rpb25hcnknCQkJKmNvbXBsLWRpY3Rpb25hcnkqCisKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1LKgorQ1RSTC1YIENUUkwtSwkJU2VhcmNoIHRoZSBmaWxlcyBnaXZlbiB3aXRoIHRoZSAnZGljdGlvbmFyeScgb3B0aW9uCisJCQlmb3Igd29yZHMgdGhhdCBzdGFydCB3aXRoIHRoZSBrZXl3b3JkIGluIGZyb250IG9mIHRoZQorCQkJY3Vyc29yLiAgVGhpcyBpcyBsaWtlIENUUkwtTiwgYnV0IG9ubHkgdGhlIGRpY3Rpb25hcnkKKwkJCWZpbGVzIGFyZSBzZWFyY2hlZCwgbm90IHRoZSBjdXJyZW50IGZpbGUuICBUaGUgZm91bmQKKwkJCWtleXdvcmQgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4gIFRoaXMKKwkJCWNvdWxkIHBvdGVudGlhbGx5IGJlIHByZXR0eSBzbG93LCBzaW5jZSBhbGwgbWF0Y2hlcworCQkJYXJlIGZvdW5kIGJlZm9yZSB0aGUgZmlyc3QgbWF0Y2ggaXMgdXNlZC4gIEJ5IGRlZmF1bHQsCisJCQl0aGUgJ2RpY3Rpb25hcnknIG9wdGlvbiBpcyBlbXB0eS4KKwkJCUZvciBzdWdnZXN0aW9ucyB3aGVyZSB0byBmaW5kIGEgbGlzdCBvZiB3b3Jkcywgc2VlIHRoZQorCQkJJ2RpY3Rpb25hcnknIG9wdGlvbi4KKworCUNUUkwtSwlvcgorCUNUUkwtTgkJU2VhcmNoIGZvcndhcmQgZm9yIG5leHQgbWF0Y2hpbmcga2V5d29yZC4gIFRoaXMKKwkJCWtleXdvcmQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGtleXdvcmQuCisKKwlDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZHMgZm9yIG5leHQgbWF0Y2hpbmcga2V5d29yZC4gIFRoaXMKKwkJCWtleXdvcmQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGtleXdvcmQuCisKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1UKgorQ1RSTC1YIENUUkwtVAkJV29ya3MgYXMgQ1RSTC1YIENUUkwtSywgYnV0IGluIGEgc3BlY2lhbCB3YXkuIEl0IHVzZXMKKwkJCXRoZSAndGhlc2F1cnVzJyBvcHRpb24gaW5zdGVhZCBvZiAnZGljdGlvbmFyeScuICBJZiBhCisJCQltYXRjaCBpcyBmb3VuZCBpbiB0aGUgdGhlc2F1cnVzIGZpbGUsIGFsbCB0aGUKKwkJCXJlbWFpbmluZyB3b3JkcyBvbiB0aGUgc2FtZSBsaW5lIGFyZSBpbmNsdWRlZCBhcworCQkJbWF0Y2hlcywgZXZlbiB0aG91Z2ggdGhleSBkb24ndCBjb21wbGV0ZSB0aGUgd29yZC4KKwkJCVRodXMgYSB3b3JkIGNhbiBiZSBjb21wbGV0ZWx5IHJlcGxhY2VkLgorCisJCQlGb3IgYW4gZXhhbXBsZSwgaW1hZ2luZSB0aGUgJ3RoZXNhdXJ1cycgZmlsZSBoYXMgYQorCQkJbGluZSBsaWtlIHRoaXM6ID4KKwkJCQlhbmdyeSBmdXJpb3VzIG1hZCBlbnJhZ2VkCis8CQkJUGxhY2luZyB0aGUgY3Vyc29yIGFmdGVyIHRoZSBsZXR0ZXJzICJhbmciIGFuZCB0eXBpbmcKKwkJCUNUUkwtWCBDVFJMLVQgd291bGQgY29tcGxldGUgdGhlIHdvcmQgImFuZ3J5IjsKKwkJCXN1YnNlcXVlbnQgcHJlc3NlcyB3b3VsZCBjaGFuZ2UgdGhlIHdvcmQgdG8gImZ1cmlvdXMiLAorCQkJIm1hZCIgZXRjLgorCQkJT3RoZXIgdXNlcyBpbmNsdWRlIHRyYW5zbGF0aW9uIGJldHdlZW4gdHdvIGxhbmd1YWdlcywKKwkJCW9yIGdyb3VwaW5nIEFQSSBmdW5jdGlvbnMgYnkga2V5d29yZC4KKworCUNUUkwtVAlvcgorCUNUUkwtTgkJU2VhcmNoIGZvcndhcmQgZm9yIG5leHQgbWF0Y2hpbmcga2V5d29yZC4gIFRoaXMKKwkJCWtleXdvcmQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGtleXdvcmQuCisKKwlDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZHMgZm9yIG5leHQgbWF0Y2hpbmcga2V5d29yZC4gIFRoaXMKKwkJCWtleXdvcmQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGtleXdvcmQuCisKKworQ29tcGxldGluZyBrZXl3b3JkcyBpbiB0aGUgY3VycmVudCBhbmQgaW5jbHVkZWQgZmlsZXMJKmNvbXBsLWtleXdvcmQqCisKK1RoZSAnaW5jbHVkZScgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGxpbmUgdGhhdCBjb250YWlucyBhbiBpbmNsdWRlIGZpbGUKK25hbWUuICBUaGUgJ3BhdGgnIG9wdGlvbiBpcyB1c2VkIHRvIHNlYXJjaCBmb3IgaW5jbHVkZSBmaWxlcy4KKworCQkJCQkJCSppX0NUUkwtWF9DVFJMLUkqCitDVFJMLVggQ1RSTC1JCQlTZWFyY2ggZm9yIHRoZSBmaXJzdCBrZXl3b3JkIGluIHRoZSBjdXJyZW50IGFuZAorCQkJaW5jbHVkZWQgZmlsZXMgdGhhdCBzdGFydHMgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXJzCisJCQlhcyB0aG9zZSBiZWZvcmUgdGhlIGN1cnNvci4gIFRoZSBtYXRjaGVkIGtleXdvcmQgaXMKKwkJCWluc2VydGVkIGluIGZyb250IG9mIHRoZSBjdXJzb3IuCisKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkcyBmb3IgbmV4dCBtYXRjaGluZyBrZXl3b3JkLiAgVGhpcworCQkJa2V5d29yZCByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcga2V5d29yZC4KKwkJCU5vdGU6IENUUkwtSSBpcyB0aGUgc2FtZSBhcyA8VGFiPiwgd2hpY2ggaXMgbGlrZWx5IHRvCisJCQliZSB0eXBlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdGhlcmVmb3JlCisJCQlDVFJMLUkgaXMgbm90IHVzZWQgZm9yIHNlYXJjaGluZyBmb3IgdGhlIG5leHQgbWF0Y2guCisKKwlDVFJMLVAJCVNlYXJjaCBiYWNrd2FyZCBmb3IgcHJldmlvdXMgbWF0Y2hpbmcga2V5d29yZC4gIFRoaXMKKwkJCWtleXdvcmQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGtleXdvcmQuCisKKwlDVFJMLVggQ1RSTC1JCUZ1cnRoZXIgdXNlIG9mIENUUkwtWCBDVFJMLUkgd2lsbCBjb3B5IHRoZSB3b3JkcworCQkJZm9sbG93aW5nIHRoZSBwcmV2aW91cyBleHBhbnNpb24gaW4gb3RoZXIgY29udGV4dHMKKwkJCXVubGVzcyBhIGRvdWJsZSBDVFJMLVggaXMgdXNlZC4KKworQ29tcGxldGluZyB0YWdzCQkJCQkJKmNvbXBsLXRhZyoKKwkJCQkJCQkqaV9DVFJMLVhfQ1RSTC1dKgorQ1RSTC1YIENUUkwtXQkJU2VhcmNoIGZvciB0aGUgZmlyc3QgdGFnIHRoYXQgc3RhcnRzIHdpdGggdGhlIHNhbWUKKwkJCWNoYXJhY3RlcnMgYXMgYmVmb3JlIHRoZSBjdXJzb3IuICBUaGUgbWF0Y2hpbmcgdGFnIGlzCisJCQlpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLiAgQWxwaGFiZXRpYworCQkJY2hhcmFjdGVycyBhbmQgY2hhcmFjdGVycyBpbiAnaXNrZXl3b3JkJyBhcmUgdXNlZAorCQkJdG8gZGVjaWRlIHdoaWNoIGNoYXJhY3RlcnMgYXJlIGluY2x1ZGVkIGluIHRoZSB0YWcKKwkJCW5hbWUgKHNhbWUgYXMgZm9yIGEga2V5d29yZCkuICBTZWUgYWxzbyB8Q1RSTC1dfC4KKwkJCVRoZSAnc2hvd2Z1bGx0YWcnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBhZGQgY29udGV4dAorCQkJZnJvbSBhcm91bmQgdGhlIHRhZyBkZWZpbml0aW9uLgorCUNUUkwtXQlvcgorCUNUUkwtTgkJU2VhcmNoIGZvcndhcmRzIGZvciBuZXh0IG1hdGNoaW5nIHRhZy4gIFRoaXMgdGFnCisJCQlyZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcgdGFnLgorCisJQ1RSTC1QCQlTZWFyY2ggYmFja3dhcmQgZm9yIHByZXZpb3VzIG1hdGNoaW5nIHRhZy4gIFRoaXMgdGFnCisJCQlyZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcgdGFnLgorCisKK0NvbXBsZXRpbmcgZmlsZSBuYW1lcwkJCQkJKmNvbXBsLWZpbGVuYW1lKgorCQkJCQkJCSppX0NUUkwtWF9DVFJMLUYqCitDVFJMLVggQ1RSTC1GCQlTZWFyY2ggZm9yIHRoZSBmaXJzdCBmaWxlIG5hbWUgdGhhdCBzdGFydHMgd2l0aCB0aGUKKwkJCXNhbWUgY2hhcmFjdGVycyBhcyBiZWZvcmUgdGhlIGN1cnNvci4gIFRoZSBtYXRjaGluZworCQkJZmlsZSBuYW1lIGlzIGluc2VydGVkIGluIGZyb250IG9mIHRoZSBjdXJzb3IuCisJCQlBbHBoYWJldGljIGNoYXJhY3RlcnMgYW5kIGNoYXJhY3RlcnMgaW4gJ2lzZm5hbWUnCisJCQlhcmUgdXNlZCB0byBkZWNpZGUgd2hpY2ggY2hhcmFjdGVycyBhcmUgaW5jbHVkZWQgaW4KKwkJCXRoZSBmaWxlIG5hbWUuICBOb3RlOiB0aGUgJ3BhdGgnIG9wdGlvbiBpcyBub3QgdXNlZAorCQkJaGVyZSAoeWV0KS4KKwlDVFJMLUYJb3IKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkcyBmb3IgbmV4dCBtYXRjaGluZyBmaWxlIG5hbWUuICBUaGlzCisJCQlmaWxlIG5hbWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1hdGNoaW5nIGZpbGUgbmFtZS4KKworCUNUUkwtUAkJU2VhcmNoIGJhY2t3YXJkIGZvciBwcmV2aW91cyBtYXRjaGluZyBmaWxlIG5hbWUuCisJCQlUaGlzIGZpbGUgbmFtZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWF0Y2hpbmcgZmlsZQorCQkJbmFtZS4KKworCitDb21wbGV0aW5nIGRlZmluaXRpb25zIG9yIG1hY3JvcwkJCSpjb21wbC1kZWZpbmUqCisKK1RoZSAnZGVmaW5lJyBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IGEgbGluZSB0aGF0IGNvbnRhaW5zIGEgZGVmaW5pdGlvbi4KK1RoZSAnaW5jbHVkZScgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGxpbmUgdGhhdCBjb250YWlucyBhbiBpbmNsdWRlIGZpbGUKK25hbWUuICBUaGUgJ3BhdGgnIG9wdGlvbiBpcyB1c2VkIHRvIHNlYXJjaCBmb3IgaW5jbHVkZSBmaWxlcy4KKworCQkJCQkJCSppX0NUUkwtWF9DVFJMLUQqCitDVFJMLVggQ1RSTC1ECQlTZWFyY2ggaW4gdGhlIGN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzIGZvciB0aGUKKwkJCWZpcnN0IGRlZmluaXRpb24gKG9yIG1hY3JvKSBuYW1lIHRoYXQgc3RhcnRzIHdpdGgKKwkJCXRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgYmVmb3JlIHRoZSBjdXJzb3IuICBUaGUgZm91bmQKKwkJCWRlZmluaXRpb24gbmFtZSBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCUNUUkwtRAlvcgorCUNUUkwtTgkJU2VhcmNoIGZvcndhcmRzIGZvciBuZXh0IG1hdGNoaW5nIG1hY3JvIG5hbWUuICBUaGlzCisJCQltYWNybyBuYW1lIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBtYWNybworCQkJbmFtZS4KKworCUNUUkwtUAkJU2VhcmNoIGJhY2t3YXJkIGZvciBwcmV2aW91cyBtYXRjaGluZyBtYWNybyBuYW1lLgorCQkJVGhpcyBtYWNybyBuYW1lIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBtYWNybworCQkJbmFtZS4KKworCUNUUkwtWCBDVFJMLUQJRnVydGhlciB1c2Ugb2YgQ1RSTC1YIENUUkwtRCB3aWxsIGNvcHkgdGhlIHdvcmRzCisJCQlmb2xsb3dpbmcgdGhlIHByZXZpb3VzIGV4cGFuc2lvbiBpbiBvdGhlciBjb250ZXh0cworCQkJdW5sZXNzIGEgZG91YmxlIENUUkwtWCBpcyB1c2VkLgorCisKK0NvbXBsZXRpbmcgVmltIGNvbW1hbmRzCQkJCQkqY29tcGwtdmltKgorCitDb21wbGV0aW9uIGlzIGNvbnRleHQtc2Vuc2l0aXZlLiAgSXQgd29ya3MgbGlrZSBvbiB0aGUgQ29tbWFuZC1saW5lLiAgSXQKK2NvbXBsZXRlcyBhbiBFeCBjb21tYW5kIGFzIHdlbGwgYXMgaXRzIGFyZ3VtZW50cy4KKworCQkJCQkJCSppX0NUUkwtWF9DVFJMLVYqCitDVFJMLVggQ1RSTC1WCQlHdWVzcyB3aGF0IGtpbmQgb2YgaXRlbSBpcyBpbiBmcm9udCBvZiB0aGUgY3Vyc29yIGFuZAorCQkJZmluZCB0aGUgZmlyc3QgbWF0Y2ggZm9yIGl0LgorCQkJTm90ZTogV2hlbiBDVFJMLVYgaXMgbWFwcGVkIHlvdSBjYW4gb2Z0ZW4gdXNlIENUUkwtUQorCQkJaW5zdGVhZCB8aV9DVFJMLVF8LgorCUNUUkwtVglvcgorCUNUUkwtTgkJU2VhcmNoIGZvcndhcmRzIGZvciBuZXh0IG1hdGNoLiAgVGhpcyBtYXRjaCByZXBsYWNlcworCQkJdGhlIHByZXZpb3VzIG9uZS4KKworCUNUUkwtUAkJU2VhcmNoIGJhY2t3YXJkIGZvciBwcmV2aW91cyBtYXRjaC4gIFRoaXMgbWF0Y2gKKwkJCXJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUuCisKKwlDVFJMLVggQ1RSTC1WCUZ1cnRoZXIgdXNlIG9mIENUUkwtWCBDVFJMLVYgd2lsbCBkbyB0aGUgc2FtZSBhcworCQkJQ1RSTC1WLiAgVGhpcyBhbGxvd3MgbWFwcGluZyBhIGtleSB0byBkbyBWaW0gY29tbWFuZAorCQkJY29tcGxldGlvbiwgZm9yIGV4YW1wbGU6ID4KKwkJCQk6aW1hcCA8VGFiPiA8Qy1YPjxDLVY+CisKK0NvbXBsZXRpbmcga2V5d29yZHMgZnJvbSBkaWZmZXJlbnQgc291cmNlcwkJKmNvbXBsLWdlbmVyaWMqCisKKwkJCQkJCQkqaV9DVFJMLU4qCitDVFJMLU4JCQlGaW5kIG5leHQgbWF0Y2ggZm9yIHdvcmRzIHRoYXQgc3RhcnQgd2l0aCB0aGUKKwkJCWtleXdvcmQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvciwgbG9va2luZyBpbiBwbGFjZXMKKwkJCXNwZWNpZmllZCB3aXRoIHRoZSAnY29tcGxldGUnIG9wdGlvbi4gIFRoZSBmb3VuZAorCQkJa2V5d29yZCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLgorCisJCQkJCQkJKmlfQ1RSTC1QKgorQ1RSTC1QCQkJRmluZCBwcmV2aW91cyBtYXRjaCBmb3Igd29yZHMgdGhhdCBzdGFydCB3aXRoIHRoZQorCQkJa2V5d29yZCBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLCBsb29raW5nIGluIHBsYWNlcworCQkJc3BlY2lmaWVkIHdpdGggdGhlICdjb21wbGV0ZScgb3B0aW9uLiAgVGhlIGZvdW5kCisJCQlrZXl3b3JkIGlzIGluc2VydGVkIGluIGZyb250IG9mIHRoZSBjdXJzb3IuCisKKwlDVFJMLU4JCVNlYXJjaCBmb3J3YXJkIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJQ1RSTC1QCQlTZWFyY2ggYmFja3dhcmRzIGZvciBuZXh0IG1hdGNoaW5nIGtleXdvcmQuICBUaGlzCisJCQlrZXl3b3JkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBtYXRjaGluZyBrZXl3b3JkLgorCisJQ1RSTC1YIENUUkwtTiBvcgorCUNUUkwtWCBDVFJMLVAJRnVydGhlciB1c2Ugb2YgQ1RSTC1YIENUUkwtTiBvciBDVFJMLVggQ1RSTC1QIHdpbGwKKwkJCWNvcHkgdGhlIHdvcmRzIGZvbGxvd2luZyB0aGUgcHJldmlvdXMgZXhwYW5zaW9uIGluCisJCQlvdGhlciBjb250ZXh0cyB1bmxlc3MgYSBkb3VibGUgQ1RSTC1YIGlzIHVzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gSW5zZXJ0IG1vZGUgY29tbWFuZHMJCQkJCSppbnNlcnRpbmcqCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IG5ldyB0ZXh0IGludG8gdGhlIGJ1ZmZlci4gIFRoZXkKK2NhbiBhbGwgYmUgdW5kb25lIGFuZCByZXBlYXRlZCB3aXRoIHRoZSAiLiIgY29tbWFuZC4KKworCQkJCQkJCSphKgorYQkJCUFwcGVuZCB0ZXh0IGFmdGVyIHRoZSBjdXJzb3IgW2NvdW50XSB0aW1lcy4gIElmIHRoZQorCQkJY3Vyc29yIGlzIGluIHRoZSBmaXJzdCBjb2x1bW4gb2YgYW4gZW1wdHkgbGluZSBJbnNlcnQKKwkJCXN0YXJ0cyB0aGVyZS4gIEJ1dCBub3Qgd2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCEKKworCQkJCQkJCSpBKgorQQkJCUFwcGVuZCB0ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgW2NvdW50XSB0aW1lcy4KKworPGluc2VydD4Jb3IJCQkJKmkqICppbnNlcnQqICo8SW5zZXJ0PioKK2kJCQlJbnNlcnQgdGV4dCBiZWZvcmUgdGhlIGN1cnNvciBbY291bnRdIHRpbWVzLgorCQkJV2hlbiB1c2luZyBDVFJMLU8gaW4gSW5zZXJ0IG1vZGUgfGlfQ1RSTC1PfCB0aGUgY291bnQKKwkJCWlzIG5vdCBzdXBwb3J0ZWQuCisKKwkJCQkJCQkqSSoKK0kJCQlJbnNlcnQgdGV4dCBiZWZvcmUgdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZQorCQkJW2NvdW50XSB0aW1lcy4KKworCQkJCQkJCSpnSSoKK2dJCQkJSW5zZXJ0IHRleHQgaW4gY29sdW1uIDEgW2NvdW50XSB0aW1lcy4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ2kqCitnaQkJCUluc2VydCB0ZXh0IGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIHdoZXJlIEluc2VydCBtb2RlCisJCQl3YXMgc3RvcHBlZCBsYXN0IHRpbWUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgorCQkJVGhpcyB1c2VzIHRoZSB8J158IG1hcmsuICBJdCdzIGRpZmZlcmVudCBmcm9tICJgXmkiCisJCQl3aGVuIHRoZSBtYXJrIGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGluZS4KKwkJCVRoZSBwb3NpdGlvbiBpcyBjb3JyZWN0ZWQgZm9yIGluc2VydGVkL2RlbGV0ZWQgbGluZXMsCisJCQlidXQgTk9UIGZvciBpbnNlcnRlZC9kZWxldGVkIGNoYXJhY3RlcnMuCisJCQlXaGVuIHRoZSB8OmtlZXBqdW1wc3wgY29tbWFuZCBtb2RpZmllciBpcyB1c2VkIHRoZSB8J158CisJCQltYXJrIHdvbnQgYmUgY2hhbmdlZC4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqbyoKK28JCQlCZWdpbiBhIG5ldyBsaW5lIGJlbG93IHRoZSBjdXJzb3IgYW5kIGluc2VydCB0ZXh0LAorCQkJcmVwZWF0IFtjb3VudF0gdGltZXMuICB7Vmk6IGJsYW5rIFtjb3VudF0gc2NyZWVuCisJCQlsaW5lc30KKworCQkJCQkJCSpPKgorTwkJCUJlZ2luIGEgbmV3IGxpbmUgYWJvdmUgdGhlIGN1cnNvciBhbmQgaW5zZXJ0IHRleHQsCisJCQlyZXBlYXQgW2NvdW50XSB0aW1lcy4gIHtWaTogYmxhbmsgW2NvdW50XSBzY3JlZW4KKwkJCWxpbmVzfQorCitUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byBzdGFydCBpbnNlcnRpbmcgdGV4dC4gIFlvdSBjYW4gZW5kIGluc2VydCBtb2RlIHdpdGgKKzxFc2M+LiAgU2VlIHxtb2RlLWlucy1yZXBsfCBmb3IgdGhlIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBJbnNlcnQgbW9kZS4KK1RoZSBlZmZlY3Qgb2YgW2NvdW50XSB0YWtlcyBwbGFjZSBhZnRlciBJbnNlcnQgbW9kZSBpcyBleGl0ZWQuCisKK1doZW4gJ2F1dG9pbmRlbnQnIGlzIG9uLCB0aGUgaW5kZW50IGZvciBhIG5ldyBsaW5lIGlzIG9idGFpbmVkIGZyb20gdGhlCitwcmV2aW91cyBsaW5lLiAgV2hlbiAnc21hcnRpbmRlbnQnIG9yICdjaW5kZW50JyBpcyBvbiwgdGhlIGluZGVudCBmb3IgYSBsaW5lCitpcyBhdXRvbWF0aWNhbGx5IGFkanVzdGVkIGZvciBDIHByb2dyYW1zLgorCisndGV4dHdpZHRoJyBjYW4gYmUgc2V0IHRvIHRoZSBtYXhpbXVtIHdpZHRoIGZvciBhIGxpbmUuICBXaGVuIGEgbGluZSBiZWNvbWVzCit0b28gbG9uZyB3aGVuIGFwcGVuZGluZyBjaGFyYWN0ZXJzIGEgbGluZSBicmVhayBpcyBhdXRvbWF0aWNhbGx5IGluc2VydGVkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gRXggaW5zZXJ0IGNvbW1hbmRzCQkJCQkqaW5zZXJ0aW5nLWV4KgorCisJCQkJCQkJKjphKiAqOmFwcGVuZCoKKzp7cmFuZ2V9YVtwcGVuZF0JSW5zZXJ0IHNldmVyYWwgbGluZXMgb2YgdGV4dCBiZWxvdyB0aGUgc3BlY2lmaWVkCisJCQlsaW5lLiAgSWYgdGhlIHtyYW5nZX0gaXMgbWlzc2luZywgdGhlIHRleHQgd2lsbCBiZQorCQkJaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4KKworCQkJCQkJCSo6aSogKjppbiogKjppbnNlcnQqCis6e3JhbmdlfWlbbnNlcnRdCUluc2VydCBzZXZlcmFsIGxpbmVzIG9mIHRleHQgYWJvdmUgdGhlIHNwZWNpZmllZAorCQkJbGluZS4gIElmIHRoZSB7cmFuZ2V9IGlzIG1pc3NpbmcsIHRoZSB0ZXh0IHdpbGwgYmUKKwkJCWluc2VydGVkIGJlZm9yZSB0aGUgY3VycmVudCBsaW5lLgorCitUaGVzZSB0d28gY29tbWFuZHMgd2lsbCBrZWVwIG9uIGFza2luZyBmb3IgbGluZXMsIHVudGlsIHlvdSB0eXBlIGEgbGluZQorY29udGFpbmluZyBvbmx5IGEgIi4iLiAgV2F0Y2ggb3V0IGZvciBsaW5lcyBzdGFydGluZyB3aXRoIGEgYmFja3NsYXNoLCBzZWUKK3xsaW5lLWNvbnRpbnVhdGlvbnwuCitOT1RFOiAiOmFwcGVuZCIgYW5kICI6aW5zZXJ0IiBkb24ndCB3b3JrIHByb3Blcmx5IGluIGJldHdlZW4gIjppZiIgYW5kCisiOmVuZGlmIi4KKworCQkJCQkJCSo6c3RhcnQqICo6c3RhcnRpbnNlcnQqCis6c3Rhclt0aW5zZXJ0XVshXQlTdGFydCBJbnNlcnQgbW9kZSBqdXN0IGFmdGVyIGV4ZWN1dGluZyB0aGlzIGNvbW1hbmQuCisJCQlXb3JrcyBsaWtlIHR5cGluZyAiaSIgaW4gTm9ybWFsIG1vZGUuICBXaGVuIHRoZSAhIGlzCisJCQlpbmNsdWRlZCBpdCB3b3JrcyBsaWtlICJBIiwgYXBwZW5kIHRvIHRoZSBsaW5lLgorCQkJT3RoZXJ3aXNlIGluc2VydGlvbiBzdGFydHMgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KKwkJCU5vdGUgdGhhdCB3aGVuIHVzaW5nIHRoaXMgY29tbWFuZCBpbiBhIGZ1bmN0aW9uIG9yCisJCQlzY3JpcHQsIHRoZSBpbnNlcnRpb24gb25seSBzdGFydHMgYWZ0ZXIgdGhlIGZ1bmN0aW9uCisJCQlvciBzY3JpcHQgaXMgZmluaXNoZWQuCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArZXhfZXh0cmEKKwkJCWZlYXR1cmV9CisKKwkJCQkJCQkqOnN0b3BpKiAqOnN0b3BpbnNlcnQqCis6c3RvcGlbbnNlcnRdCQlTdG9wIEluc2VydCBtb2RlIGFzIHNvb24gYXMgcG9zc2libGUuICBXb3JrcyBsaWtlCisJCQl0eXBpbmcgPEVzYz4gaW4gSW5zZXJ0IG1vZGUuCisJCQlDYW4gYmUgdXNlZCBpbiBhbiBhdXRvY29tbWFuZCwgZXhhbXBsZTogPgorCQkJCTphdSBCdWZFbnRlciBzY3JhdGNoIHN0b3BpbnNlcnQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMC4gSW5zZXJ0aW5nIGEgZmlsZQkJCQkJKmluc2VydGluZy1maWxlKgorCisJCQkJCQkJKjpyKiAqOnJlKiAqOnJlYWQqCis6cltlYWRdIFtuYW1lXQkJSW5zZXJ0IHRoZSBmaWxlIFtuYW1lXSAoZGVmYXVsdDogY3VycmVudCBmaWxlKSBiZWxvdworCQkJdGhlIGN1cnNvci4KKworOntyYW5nZX1yW2VhZF0gW25hbWVdCUluc2VydCB0aGUgZmlsZSBbbmFtZV0gKGRlZmF1bHQ6IGN1cnJlbnQgZmlsZSkgYmVsb3cKKwkJCXRoZSBzcGVjaWZpZWQgbGluZS4KKworCQkJCQkJCSo6ciEqICo6cmVhZCEqCis6cltlYWRdICF7Y21kfQkJRXhlY3V0ZSB7Y21kfSBhbmQgaW5zZXJ0IGl0cyBzdGFuZGFyZCBvdXRwdXQgYmVsb3cKKwkJCXRoZSBjdXJzb3IuICBBIHRlbXBvcmFyeSBmaWxlIGlzIHVzZWQgdG8gc3RvcmUgdGhlCisJCQlvdXRwdXQgb2YgdGhlIGNvbW1hbmQgd2hpY2ggaXMgdGhlbiByZWFkIGludG8gdGhlCisJCQlidWZmZXIuICAnc2hlbGxyZWRpcicgaXMgdXNlZCB0byBzYXZlIHRoZSBvdXRwdXQgb2YKKwkJCXRoZSBjb21tYW5kLCB3aGljaCBjYW4gYmUgc2V0IHRvIGluY2x1ZGUgc3RkZXJyIG9yCisJCQlub3QuICB7Y21kfSBpcyBleGVjdXRlZCBsaWtlIHdpdGggIjohe2NtZH0iLCBhbnkgJyEnCisJCQlpcyByZXBsYWNlZCB3aXRoIHRoZSBwcmV2aW91cyBjb21tYW5kIHw6IXwuCisKK1RoZXNlIGNvbW1hbmRzIGluc2VydCB0aGUgY29udGVudHMgb2YgYSBmaWxlLCBvciB0aGUgb3V0cHV0IG9mIGEgY29tbWFuZCwKK2ludG8gdGhlIGJ1ZmZlci4gIFRoZXkgY2FuIGJlIHVuZG9uZS4gIFRoZXkgY2Fubm90IGJlIHJlcGVhdGVkIHdpdGggdGhlICIuIgorY29tbWFuZC4gIFRoZXkgd29yayBvbiBhIGxpbmUgYmFzaXMsIGluc2VydGlvbiBzdGFydHMgYmVsb3cgdGhlIGxpbmUgaW4gd2hpY2gKK3RoZSBjdXJzb3IgaXMsIG9yIGJlbG93IHRoZSBzcGVjaWZpZWQgbGluZS4gIFRvIGluc2VydCB0ZXh0IGFib3ZlIHRoZSBmaXJzdAorbGluZSB1c2UgdGhlIGNvbW1hbmQgIjowciB7bmFtZX0iLgorCitBZnRlciB0aGUgIjpyZWFkIiBjb21tYW5kLCB0aGUgY3Vyc29yIGlzIGxlZnQgb24gdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUKK2ZpcnN0IG5ldyBsaW5lLiAgVW5sZXNzIGluIEV4IG1vZGUsIHRoZW4gdGhlIGN1cnNvciBpcyBsZWZ0IG9uIHRoZSBsYXN0IG5ldworbGluZSAoc29ycnksIHRoaXMgaXMgVmkgY29tcGF0aWJsZSkuCisKK0lmIGEgZmlsZSBuYW1lIGlzIGdpdmVuIHdpdGggIjpyIiwgaXQgYmVjb21lcyB0aGUgYWx0ZXJuYXRlIGZpbGUuICBUaGlzIGNhbiBiZQordXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4geW91IHdhbnQgdG8gZWRpdCB0aGF0IGZpbGUgaW5zdGVhZDogIjplISAjIi4gIFRoaXMgY2FuCitiZSBzd2l0Y2hlZCBvZmYgYnkgcmVtb3ZpbmcgdGhlICdhJyBmbGFnIGZyb20gdGhlICdjcG9wdGlvbnMnIG9wdGlvbi4KKworCQkJCQkJCSpmaWxlLXJlYWQqCitUaGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbiBzZXRzIHRoZSA8RU9MPiBzdHlsZSBmb3IgYSBmaWxlOgorJ2ZpbGVmb3JtYXQnICAgIGNoYXJhY3RlcnMJICAgbmFtZQkJCQl+CisgICJkb3MiCQk8Q1I+PE5MPiBvciA8Tkw+ICAgRE9TIGZvcm1hdAorICAidW5peCIJPE5MPgkJICAgVW5peCBmb3JtYXQKKyAgIm1hYyIJCTxDUj4JCSAgIE1hYyBmb3JtYXQKK1ByZXZpb3VzbHkgJ3RleHRtb2RlJyB3YXMgdXNlZC4gIEl0IGlzIG9ic29sZXRlIG5vdy4KKworSWYgJ2ZpbGVmb3JtYXQnIGlzICJkb3MiLCBhIDxDUj4gaW4gZnJvbnQgb2YgYW4gPE5MPiBpcyBpZ25vcmVkIGFuZCBhIENUUkwtWgorYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyBpZ25vcmVkLgorCitJZiAnZmlsZWZvcm1hdCcgaXMgIm1hYyIsIGEgPE5MPiBpbiB0aGUgZmlsZSBpcyBpbnRlcm5hbGx5IHJlcHJlc2VudGVkIGJ5IGEKKzxDUj4uICBUaGlzIGlzIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGEgPE5MPiB3aGljaCBpcyB1c2VkIHRvIHJlcHJlc2VudCBhCis8TlVMPi4gIFNlZSB8Q1ItdXNlZC1mb3ItTkx8LgorCitJZiB0aGUgJ2ZpbGVmb3JtYXRzJyBvcHRpb24gaXMgbm90IGVtcHR5IFZpbSB0cmllcyB0byByZWNvZ25pemUgdGhlIHR5cGUgb2YKKzxFT0w+IChzZWUgfGZpbGUtZm9ybWF0c3wpLiAgSG93ZXZlciwgdGhlICdmaWxlZm9ybWF0JyBvcHRpb24gd2lsbCBub3QgYmUKK2NoYW5nZWQsIHRoZSBkZXRlY3RlZCBmb3JtYXQgaXMgb25seSB1c2VkIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUuCitBIHNpbWlsYXIgdGhpbmcgaGFwcGVucyB3aXRoICdmaWxlZW5jb2RpbmdzJy4KKworT24gbm9uLU1TLURPUywgV2luMzIsIGFuZCBPUy8yIHN5c3RlbXMgdGhlIG1lc3NhZ2UgIltkb3MgZm9ybWF0XSIgaXMgc2hvd24gaWYKK2EgZmlsZSBpcyByZWFkIGluIERPUyBmb3JtYXQsIHRvIHJlbWluZCB5b3UgdGhhdCBzb21ldGhpbmcgdW51c3VhbCBpcyBkb25lLgorT24gTWFjaW50b3NoLCBNUy1ET1MsIFdpbjMyLCBhbmQgT1MvMiB0aGUgbWVzc2FnZSAiW3VuaXggZm9ybWF0XSIgaXMgc2hvd24gaWYKK2EgZmlsZSBpcyByZWFkIGluIFVuaXggZm9ybWF0LgorT24gbm9uLU1hY2ludG9zaCBzeXN0ZW1zLCB0aGUgbWVzc2FnZSAiW01hYyBmb3JtYXRdIiBpcyBzaG93biBpZiBhIGZpbGUgaXMKK3JlYWQgaW4gTWFjIGZvcm1hdC4KKworQW4gZXhhbXBsZSBvbiBob3cgdG8gdXNlICI6ciAhIjogPgorCTpyICF1dWVuY29kZSBiaW5maWxlIGJpbmZpbGUKK1RoaXMgY29tbWFuZCByZWFkcyAiYmluZmlsZSIsIHV1ZW5jb2RlcyBpdCBhbmQgcmVhZHMgaXQgaW50byB0aGUgY3VycmVudAorYnVmZmVyLiAgVXNlZnVsIHdoZW4geW91IGFyZSBlZGl0aW5nIGUtbWFpbCBhbmQgd2FudCB0byBpbmNsdWRlIGEgYmluYXJ5CitmaWxlLgorCisJCQkJCQkJKnJlYWQtbWVzc2FnZXMqCitXaGVuIHJlYWRpbmcgYSBmaWxlIFZpbSB3aWxsIGRpc3BsYXkgYSBtZXNzYWdlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlYWQKK2ZpbGUuICBJbiB0aGUgdGFibGUgaXMgYW4gZXhwbGFuYXRpb24gZm9yIHNvbWUgb2YgdGhlIGl0ZW1zLiAgVGhlIG90aGVycyBhcmUKK3NlbGYgZXhwbGFuYXRvcnkuICBVc2luZyB0aGUgbG9uZyBvciB0aGUgc2hvcnQgdmVyc2lvbiBkZXBlbmRzIG9uIHRoZQorJ3Nob3J0bWVzcycgb3B0aW9uLgorCisJbG9uZwkJc2hvcnQJCW1lYW5pbmcgfgorCVtyZWFkb25seV0Je1JPfQkJdGhlIGZpbGUgaXMgd3JpdGUgcHJvdGVjdGVkCisJW2ZpZm8vc29ja2V0XQkJCXVzaW5nIGEgc3RyZWFtCisJW2ZpZm9dCQkJCXVzaW5nIGEgZmlmbyBzdHJlYW0KKwlbc29ja2V0XQkJCXVzaW5nIGEgc29ja2V0IHN0cmVhbQorCVtDUiBtaXNzaW5nXQkJCXJlYWRpbmcgd2l0aCAiZG9zIiAnZmlsZWZvcm1hdCcgYW5kIGEKKwkJCQkJTkwgd2l0aG91dCBhIHByZWNlZGluZyBDUiB3YXMgZm91bmQuCisJW05MIGZvdW5kXQkJCXJlYWRpbmcgd2l0aCAibWFjIiAnZmlsZWZvcm1hdCcgYW5kIGEKKwkJCQkJTkwgd2FzIGZvdW5kIChjb3VsZCBiZSAidW5peCIgZm9ybWF0KQorCVtsb25nIGxpbmVzIHNwbGl0XQkJYXQgbGVhc3Qgb25lIGxpbmUgd2FzIHNwbGl0IGluIHR3bworCVtOT1QgY29udmVydGVkXQkJCWNvbnZlcnNpb24gZnJvbSAnZmlsZWVuY29kaW5nJyB0bworCQkJCQknZW5jb2RpbmcnIHdhcyBkZXNpcmVkIGJ1dCBub3QKKwkJCQkJcG9zc2libGUKKwlbY29udmVydGVkXQkJCWNvbnZlcnNpb24gZnJvbSAnZmlsZWVuY29kaW5nJyB0bworCQkJCQknZW5jb2RpbmcnIGRvbmUKKwlbY3J5cHRlZF0JCQlmaWxlIHdhcyBkZWNyeXB0ZWQKKwlbUkVBRCBFUlJPUlNdCQkJbm90IGFsbCBvZiB0aGUgZmlsZSBjb3VsZCBiZSByZWFkCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2ludHJvLnR4dCBiL3J1bnRpbWUvZG9jL2ludHJvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNhYzZlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvaW50cm8udHh0CkBAIC0wLDAgKzEsODkwIEBACisqaW50cm8udHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDEyCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworSW50cm9kdWN0aW9uIHRvIFZpbQkJCQkJKnJlZiogKnJlZmVyZW5jZSoKKworMS4gSW50cm9kdWN0aW9uCQkJfGludHJvfAorMi4gVmltIG9uIHRoZSBpbnRlcm5ldAkJfGludGVybmV0fAorMy4gQ3JlZGl0cwkJCXxjcmVkaXRzfAorNC4gTm90YXRpb24JCQl8bm90YXRpb258Cis1LiBNb2RlcywgaW50cm9kdWN0aW9uCQl8dmltLW1vZGVzLWludHJvfAorNi4gU3dpdGNoaW5nIGZyb20gbW9kZSB0byBtb2RlCXxtb2RlLXN3aXRjaGluZ3wKKzcuIFRoZSB3aW5kb3cgY29udGVudHMJCXx3aW5kb3ctY29udGVudHN8Cis4LiBEZWZpbml0aW9ucwkJCXxkZWZpbml0aW9uc3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJbnRyb2R1Y3Rpb24JCQkJCQkqaW50cm8qCisKK1ZpbSBzdGFuZHMgZm9yIFZpIElNcHJvdmVkLiAgSXQgdXNlZCB0byBiZSBWaSBJTWl0YXRpb24sIGJ1dCB0aGVyZSBhcmUgc28gbWFueQoraW1wcm92ZW1lbnRzIHRoYXQgYSBuYW1lIGNoYW5nZSB3YXMgYXBwcm9wcmlhdGUuICBWaW0gaXMgYSB0ZXh0IGVkaXRvciB3aGljaAoraW5jbHVkZXMgYWxtb3N0IGFsbCB0aGUgY29tbWFuZHMgZnJvbSB0aGUgVW5peCBwcm9ncmFtICJWaSIgYW5kIGEgbG90IG9mIG5ldworb25lcy4gIEl0IGlzIHZlcnkgdXNlZnVsIGZvciBlZGl0aW5nIHByb2dyYW1zIGFuZCBvdGhlciBwbGFpbiB0ZXh0LgorICAgQWxsIGNvbW1hbmRzIGFyZSBnaXZlbiB3aXRoIHRoZSBrZXlib2FyZC4gIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCB5b3UKK2NhbiBrZWVwIHlvdXIgZmluZ2VycyBvbiB0aGUga2V5Ym9hcmQgYW5kIHlvdXIgZXllcyBvbiB0aGUgc2NyZWVuLiAgRm9yIHRob3NlCit3aG8gd2FudCBpdCwgdGhlcmUgaXMgbW91c2Ugc3VwcG9ydCBhbmQgYSBHVUkgdmVyc2lvbiB3aXRoIHNjcm9sbGJhcnMgYW5kCittZW51cyAoc2VlIHxndWkudHh0fCkuCisKK0FuIG92ZXJ2aWV3IG9mIHRoaXMgbWFudWFsIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSAiaGVscC50eHQiLCB8aGVscC50eHR8LgorSXQgY2FuIGJlIGFjY2Vzc2VkIGZyb20gd2l0aGluIFZpbSB3aXRoIHRoZSA8SGVscD4gb3IgPEYxPiBrZXkgYW5kIHdpdGggdGhlCit8OmhlbHB8IGNvbW1hbmQgKGp1c3QgdHlwZSAiOmhlbHAiLCB3aXRob3V0IHRoZSBiYXJzIG9yIHF1b3RlcykuCisgICBUaGUgJ2hlbHBmaWxlJyBvcHRpb24gY2FuIGJlIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgaGVscCBmaWxlLCBpbiBjYXNlIGl0CitpcyBub3QgbG9jYXRlZCBpbiB0aGUgZGVmYXVsdCBwbGFjZS4gIFlvdSBjYW4ganVtcCB0byBzdWJqZWN0cyBsaWtlIHdpdGggdGFnczoKK1VzZSBDVFJMLV0gdG8ganVtcCB0byBhIHN1YmplY3QgdW5kZXIgdGhlIGN1cnNvciwgdXNlIENUUkwtVCB0byBqdW1wIGJhY2suCisKK1Rocm91Z2hvdXQgdGhpcyBtYW51YWwgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gVmkgYW5kIFZpbSBhcmUgbWVudGlvbmVkIGluCitjdXJseSBicmFjZXMsIGxpa2UgdGhpczoge1ZpIGRvZXMgbm90IGhhdmUgb24tbGluZSBoZWxwfS4gIFNlZSB8dmlfZGlmZi50eHR8Citmb3IgYSBzdW1tYXJ5IG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSBhbmQgVmkuCisKK1RoaXMgbWFudWFsIHJlZmVycyB0byBWaW0gb24gdmFyaW91cyBtYWNoaW5lcy4gIFRoZXJlIG1heSBiZSBzbWFsbCBkaWZmZXJlbmNlcworYmV0d2VlbiBkaWZmZXJlbnQgY29tcHV0ZXJzIGFuZCB0ZXJtaW5hbHMuICBCZXNpZGVzIHRoZSByZW1hcmtzIGdpdmVuIGluIHRoaXMKK2RvY3VtZW50LCB0aGVyZSBpcyBhIHNlcGFyYXRlIGRvY3VtZW50IGZvciBlYWNoIHN1cHBvcnRlZCBzeXN0ZW0sIHNlZQorfHN5cy1maWxlLWxpc3R8LgorCitUaGlzIG1hbnVhbCBpcyBhIHJlZmVyZW5jZSBmb3IgYWxsIHRoZSBWaW0gY29tbWFuZHMgYW5kIG9wdGlvbnMuICBUaGlzIGlzIG5vdAorYW4gaW50cm9kdWN0aW9uIHRvIHRoZSB1c2Ugb2YgVmkgb3IgVmltLCBpdCBnZXRzIGEgYml0IGNvbXBsaWNhdGVkIGhlcmUgYW5kCit0aGVyZS4gIEZvciBiZWdpbm5lcnMsIHRoZXJlIGlzIGEgaGFuZHMtb24gfHR1dG9yfC4gIFRvIGxlYXJuIHVzaW5nIFZpbSwgcmVhZAordGhlIHVzZXIgbWFudWFsIHx1c3JfdG9jLnR4dHwuCisKKwkJCQkJCQkqYm9vayoKK1RoZXJlIGFyZSBtYW55IGJvb2tzIG9uIFZpIHRoYXQgY29udGFpbiBhIHNlY3Rpb24gZm9yIGJlZ2lubmVycy4gIFRoZXJlIGFyZQordHdvIGJvb2tzIEkgY2FuIHJlY29tbWVuZDoKKworCSJWaW0gLSBWaSBJbXByb3ZlZCIgYnkgU3RldmUgT3VhbGxpbmUKKworVGhpcyBpcyB0aGUgdmVyeSBmaXJzdCBib29rIGNvbXBsZXRlbHkgZGVkaWNhdGVkIHRvIFZpbS4gIEl0IGlzIHZlcnkgZ29vZCBmb3IKK2JlZ2lubmVycy4gIFRoZSBtb3N0IG9mdGVuIHVzZWQgY29tbWFuZHMgYXJlIGV4cGxhaW5lZCB3aXRoIHBpY3R1cmVzIGFuZAorZXhhbXBsZXMuICBUaGUgbGVzcyBvZnRlbiB1c2VkIGNvbW1hbmRzIGFyZSBhbHNvIGV4cGxhaW5lZCwgdGhlIG1vcmUgYWR2YW5jZWQKK2ZlYXR1cmVzIGFyZSBzdW1tYXJpemVkLiAgVGhlcmUgaXMgYSBjb21wcmVoZW5zaXZlIGluZGV4IGFuZCBhIHF1aWNrCityZWZlcmVuY2UuICBQYXJ0cyBvZiB0aGlzIGJvb2sgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSB1c2VyIG1hbnVhbAorfGZyb21ib29rfC4KK1B1Ymxpc2hlZCBieSBOZXcgUmlkZXJzIFB1Ymxpc2hpbmcuICBJU0JOOiAwNzM1NzEwMDE1CitGb3IgbW9yZSBpbmZvcm1hdGlvbiB0cnkgb25lIG9mIHRoZXNlOgorCWh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2NsaWNrNS5odG1sCisJaHR0cDovL3d3dy52aW0ub3JnL2ljY2YvY2xpY2s1Lmh0bWwKKworCSJMZWFybmluZyB0aGUgVmkgZWRpdG9yIiBieSBMaW5kYSBMYW1iIGFuZCBBcm5vbGQgUm9iYmlucworCitUaGlzIGlzIGEgYm9vayBhYm91dCBWaSB0aGF0IGluY2x1ZGVzIGEgY2hhcHRlciBvbiBWaW0gKGluIHRoZSBzaXh0aCBlZGl0aW9uKS4KK1RoZSBmaXJzdCBzdGVwcyBpbiBWaSBhcmUgZXhwbGFpbmVkIHZlcnkgd2VsbC4gIFRoZSBjb21tYW5kcyB0aGF0IFZpbSBhZGRzIGFyZQorb25seSBicmllZmx5IG1lbnRpb25lZC4gIFRoZXJlIGlzIGFsc28gYSBHZXJtYW4gdHJhbnNsYXRpb24uCitQdWJsaXNoZWQgYnkgTydSZWlsbHkuICBJU0JOOiAxLTU2NTkyLTQyNi02LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFZpbSBvbiB0aGUgaW50ZXJuZXQJCQkJCSppbnRlcm5ldCoKKworCQkJKnd3dyogKmZhcSogKkZBUSogKmRpc3RyaWJ1dGlvbiogKmRvd25sb2FkKgorVGhlIFZpbSBwYWdlcyBjb250YWluIHRoZSBtb3N0IHJlY2VudCBpbmZvcm1hdGlvbiBhYm91dCBWaW0uICBUaGV5IGFsc28KK2NvbnRhaW4gbGlua3MgdG8gdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgVmltLiAgVGhlIEZBUSBpcyBhIGxpc3Qgb2YKK0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zLiAgUmVhZCB0aGlzIGlmIHlvdSBoYXZlIHByb2JsZW1zLgorCisJVklNIGhvbWUgcGFnZToJICBodHRwOi8vd3d3LnZpbS5vcmcvCisJVklNIEZBUToJICBodHRwOi8vdmltZG9jLnNmLm5ldC8KKwlEb3dubG9hZGluZzoJICBmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL01JUlJPUlMKKworCitVc2VuZXQgTmV3cyBncm91cCB3aGVyZSBWaW0gaXMgZGlzY3Vzc2VkOgkJKm5ld3MqICp1c2VuZXQqCisJY29tcC5lZGl0b3JzCitUaGlzIGdyb3VwIGlzIGFsc28gZm9yIG90aGVyIGVkaXRvcnMuICBJZiB5b3Ugd3JpdGUgYWJvdXQgVmltLCBkb24ndCBmb3JnZXQgdG8KK21lbnRpb24gdGhhdC4KKworCQkJCQkJKm1haWwtbGlzdCogKm1haWxsaXN0KgorVGhlcmUgYXJlIHNldmVyYWwgbWFpbGluZyBsaXN0cyBmb3IgVmltOgorPHZpbUB2aW0ub3JnPgorCUZvciBkaXNjdXNzaW9ucyBhYm91dCB1c2luZyBleGlzdGluZyB2ZXJzaW9ucyBvZiBWaW06IFVzZWZ1bCBtYXBwaW5ncywKKwlxdWVzdGlvbnMsIGFuc3dlcnMsIHdoZXJlIHRvIGdldCBhIHNwZWNpZmljIHZlcnNpb24sIGV0Yy4KKzx2aW0tZGV2QHZpbS5vcmc+CQkJCSp2aW0tZGV2KiAqdmltZGV2KgorCUZvciBkaXNjdXNzaW9ucyBhYm91dCBjaGFuZ2luZyBWaW06IE5ldyBmZWF0dXJlcywgcG9ydGluZywgcGF0Y2hlcywKKwliZXRhLXRlc3QgdmVyc2lvbnMsIGV0Yy4KKzx2aW0tYW5ub3VuY2VAdmltLm9yZz4JCQkJKnZpbS1hbm5vdW5jZSoKKwlBbm5vdW5jZW1lbnRzIGFib3V0IG5ldyB2ZXJzaW9ucyBvZiBWaW07IGFsc28gZm9yIGJldGEtdGVzdCB2ZXJzaW9ucworCWFuZCBwb3J0cyB0byBkaWZmZXJlbnQgc3lzdGVtcy4KKzx2aW0tbXVsdGlieXRlQHZpbS5vcmc+CQkJCSp2aW0tbXVsdGlieXRlKgorCUZvciBkaXNjdXNzaW9ucyBhYm91dCB1c2luZyBhbmQgaW1wcm92aW5nIHRoZSBtdWx0aS1ieXRlIGFzcGVjdHMgb2YKKwlWaW0uCis8dmltLW1hY0B2aW0ub3JnPgkJCQkqdmltLW1hYyoKKwlGb3IgZGlzY3Vzc2lvbnMgYWJvdXQgdXNpbmcgYW5kIGltcHJvdmluZyB0aGUgTWFjaW50b3NoIHZlcnNpb24gb2YKKwlWaW0uCisKK1NlZSBodHRwOi8vd3d3LnZpbS5vcmcvbWFpbGxpc3QucGhwIGZvciB0aGUgbGF0ZXN0IGluZm9ybWF0aW9uLgorCitOT1RFOgorLSBZb3UgY2FuIG9ubHkgc2VuZCBtZXNzYWdlcyB0byB0aGVzZSBsaXN0cyBpZiB5b3UgaGF2ZSBzdWJzY3JpYmVkIQorLSBZb3UgbmVlZCB0byBzZW5kIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGFzIHdoZXJlIHlvdSBzdWJzY3JpYmVkCisgIGZyb20gKHRvIGF2b2lkIHNwYW0gbWFpbCkuCistIE1heGltdW0gbWVzc2FnZSBzaXplIGlzIDQwMDAwIGNoYXJhY3RlcnMuCisKKwkJCQkJCSpzdWJzY3JpYmUtbWFpbGxpc3QqCitJZiB5b3Ugd2FudCB0byBqb2luLCBzZW5kIGEgbWVzc2FnZSB0bworCTx2aW0taGVscEB2aW0ub3JnPgorTWFrZSBzdXJlIHRoYXQgeW91ciAiRnJvbToiIGFkZHJlc3MgaXMgY29ycmVjdC4gIFRoZW4gdGhlIGxpc3Qgc2VydmVyIHdpbGwKK2dpdmUgeW91IGhlbHAgb24gaG93IHRvIHN1YnNjcmliZS4KKworWW91IGNhbiByZXRyaWV2ZSBvbGQgbWVzc2FnZXMgZnJvbSB0aGUgbWFpbGxpc3Qgc29mdHdhcmUsIGFuZCBhbiBpbmRleCBvZgorbWVzc2FnZXMuICBBc2sgdmltLWhlbHAgZm9yIGluc3RydWN0aW9ucy4KKworQXJjaGl2ZXMgYXJlIGtlcHQgYXQ6CQkJCSptYWlsbGlzdC1hcmNoaXZlKgoraHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdmltCitodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC92aW1kZXYKK2h0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3ZpbWFubm91bmNlCitodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC92aW0tbXVsdGlieXRlCitodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC92aW0tbWFjCisKKworQWRkaXRpb25hbCBtYWlsbGlzdHM6CisKKzx2aW0tZnJAY2x1Yi52b2lsYS5mcj4JCQkJKmZyZW5jaC1tYWlsbGlzdCoKKwlWaW0gbGlzdCBpbiB0aGUgRnJlbmNoIGxhbmd1YWdlLiAgU3Vic2NyaWJlIGJ5IHNlbmRpbmcgYSBtZXNzYWdlIHRvCisJCTx2aW0tZnItc3Vic2NyaWJlQGNsdWIudm9pbGEuZnI+CisJT3IgZ28gdG8gaHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdmltLWZyLgorCisKK0J1ZyByZXBvcnRzOgkJCQkqYnVncyogKmJ1Zy1yZXBvcnRzKiAqYnVncmVwb3J0LnZpbSoKKworU2VuZCBidWcgcmVwb3J0cyB0bzogVmltIGJ1Z3MgPGJ1Z3NAdmltLm9yZz4KK1RoaXMgaXMgbm90IGEgbWFpbGxpc3QgYnV0IHRoZSBtZXNzYWdlIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIFZpbSBtYWludGFpbmVyLgorUGxlYXNlIGJlIGJyaWVmOyBhbGwgdGhlIHRpbWUgdGhhdCBpcyBzcGVudCBvbiBhbnN3ZXJpbmcgbWFpbCBpcyBzdWJ0cmFjdGVkCitmcm9tIHRoZSB0aW1lIHRoYXQgaXMgc3BlbnQgb24gaW1wcm92aW5nIFZpbSEgIEFsd2F5cyBnaXZlIGEgcmVwcm9kdWNpYmxlCitleGFtcGxlIGFuZCB0cnkgdG8gZmluZCBvdXQgd2hpY2ggc2V0dGluZ3Mgb3Igb3RoZXIgdGhpbmdzIGluZmx1ZW5jZSB0aGUKK2FwcGVhcmFuY2Ugb2YgdGhlIGJ1Zy4gIFRyeSBkaWZmZXJlbnQgbWFjaGluZXMsIGlmIHBvc3NpYmxlLiAgU2VuZCBtZSBwYXRjaGVzCitpZiB5b3UgY2FuIQorCitJbiBjYXNlIG9mIGRvdWJ0LCB1c2U6ID4KKyAgIDpzbyAkVklNUlVOVElNRS9idWdyZXBvcnQudmltCitUaGlzIHdpbGwgY3JlYXRlIGEgZmlsZSAiYnVncmVwb3J0LnR4dCIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aXRoIGEgbG90CitvZiBpbmZvcm1hdGlvbiBvZiB5b3VyIGVudmlyb25tZW50LiAgQmVmb3JlIHNlbmRpbmcgdGhpcyBvdXQsIGNoZWNrIGlmIGl0Citkb2Vzbid0IGNvbnRhaW4gYW55IGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiEKKworCQkJCQkJCSpkZWJ1Zy12aW0qCitXaGVuIFZpbSBjcmFzaGVzIGluIG9uZSBvZiB0aGUgdGVzdCBmaWxlcywgYW5kIHlvdSBhcmUgdXNpbmcgZ2NjIGZvcgorY29tcGlsYXRpb24sIGhlcmUgaXMgd2hhdCB5b3UgY2FuIGRvIHRvIGZpbmQgb3V0IGV4YWN0bHkgd2hlcmUgVmltIGNyYXNoZXM6CisKKzEuIENvbXBpbGUgVmltIHdpdGggdGhlICItZyIgb3B0aW9uICh0aGVyZSBpcyBhIGxpbmUgaW4gdGhlIE1ha2VmaWxlIGZvciB0aGlzLAorICAgd2hpY2ggeW91IGNhbiB1bmNvbW1lbnQpLgorCisyLiBFeGVjdXRlIHRoZXNlIGNvbW1hbmRzIChyZXBsYWNlICIxMSIgd2l0aCB0aGUgdGVzdCB0aGF0IGZhaWxzKTogPgorCWNkIHRlc3RkaXIKKwlnZGIgLi4vdmltCisJcnVuIC11IHVuaXgudmltIC1VIE5PTkUgLXMgZG90ZXN0LmluIHRlc3QxMS5pbgorCiszLiBDaGVjayB3aGVyZSBWaW0gY3Jhc2hlcywgZ2RiIHNob3VsZCBnaXZlIGEgbWVzc2FnZSBmb3IgdGhpcy4KKworNC4gR2V0IGEgc3RhY2sgdHJhY2UgZnJvbSBnZGIgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKwl3aGVyZQorPCAgWW91IGNhbiBjaGVjayBvdXQgZGlmZmVyZW50IHBsYWNlcyBpbiB0aGUgc3RhY2sgdHJhY2Ugd2l0aDogPgorCWZyYW1lIDMKKzwgIFJlcGxhY2UgIjMiIHdpdGggb25lIG9mIHRoZSBudW1iZXJzIGluIHRoZSBzdGFjayB0cmFjZS4KKworCQkJCQkJCSp5ZWFyLTIwMDAqICpZMksqCitTaW5jZSBWaW0gaW50ZXJuYWxseSBkb2Vzbid0IHVzZSBkYXRlcyBmb3IgZWRpdGluZywgdGhlcmUgaXMgbm8geWVhciAyMDAwCitwcm9ibGVtIHRvIHdvcnJ5IGFib3V0LiAgVmltIGRvZXMgdXNlIHRoZSB0aW1lIGluIHRoZSBmb3JtIG9mIHNlY29uZHMgc2luY2UKK0phbnVhcnkgMXN0IDE5NzAuICBJdCBpcyB1c2VkIGZvciBhIHRpbWUtc3RhbXAgY2hlY2sgb2YgdGhlIGVkaXRlZCBmaWxlIGFuZAordGhlIHN3YXAgZmlsZSwgd2hpY2ggaXMgbm90IGNyaXRpY2FsIGFuZCBzaG91bGQgb25seSBjYXVzZSB3YXJuaW5nIG1lc3NhZ2VzLgorCitUaGVyZSBtaWdodCBiZSBhIHllYXIgMjAzOCBwcm9ibGVtLCB3aGVuIHRoZSBzZWNvbmRzIGRvbid0IGZpdCBpbiBhIDMyIGJpdCBpbnQKK2FueW1vcmUuICBUaGlzIGRlcGVuZHMgb24gdGhlIGNvbXBpbGVyLCBsaWJyYXJpZXMgYW5kIG9wZXJhdGluZyBzeXN0ZW0uCitTcGVjaWZpY2FsbHksIHRpbWVfdCBhbmQgdGhlIGN0aW1lKCkgZnVuY3Rpb24gYXJlIHVzZWQuICBBbmQgdGhlIHRpbWVfdCBpcworc3RvcmVkIGluIGZvdXIgYnl0ZXMgaW4gdGhlIHN3YXAgZmlsZS4gIEJ1dCB0aGF0J3Mgb25seSB1c2VkIGZvciBwcmludGluZyBhCitmaWxlIGRhdGUvdGltZSBmb3IgcmVjb3ZlcnksIGl0IHdpbGwgbmV2ZXIgYWZmZWN0IG5vcm1hbCBlZGl0aW5nLgorCitUaGUgVmltIHN0cmZ0aW1lKCkgZnVuY3Rpb24gZGlyZWN0bHkgdXNlcyB0aGUgc3RyZnRpbWUoKSBzeXN0ZW0gZnVuY3Rpb24uCitsb2NhbHRpbWUoKSB1c2VzIHRoZSB0aW1lKCkgc3lzdGVtIGZ1bmN0aW9uLiAgZ2V0ZnRpbWUoKSB1c2VzIHRoZSB0aW1lCityZXR1cm5lZCBieSB0aGUgc3RhdCgpIHN5c3RlbSBmdW5jdGlvbi4gIElmIHlvdXIgc3lzdGVtIGxpYnJhcmllcyBhcmUgeWVhcgorMjAwMCBjb21wbGlhbnQsIFZpbSBpcyB0b28uCisKK1RoZSB1c2VyIG1heSBjcmVhdGUgc2NyaXB0cyBmb3IgVmltIHRoYXQgdXNlIGV4dGVybmFsIGNvbW1hbmRzLiAgVGhlc2UgbWlnaHQKK2ludHJvZHVjZSBZMksgcHJvYmxlbXMsIGJ1dCB0aG9zZSBhcmUgbm90IHJlYWxseSBwYXJ0IG9mIFZpbSBpdHNlbGYuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gQ3JlZGl0cwkJCQkJCSpjcmVkaXRzKiAqYXV0aG9yKgorCitNb3N0IG9mIFZpbSB3YXMgd3JpdHRlbiBieSBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPi4KKworUGFydHMgb2YgdGhlIGRvY3VtZW50YXRpb24gY29tZSBmcm9tIHNldmVyYWwgVmkgbWFudWFscywgd3JpdHRlbiBieToKKwlXLk4uIEpveQorCUFsYW4gUC5XLiBIZXdldHQKKwlNYXJrIEhvcnRvbgorCitUaGUgVmltIGVkaXRvciBpcyBiYXNlZCBvbiBTdGV2aWUgYW5kIGluY2x1ZGVzIChpZGVhcyBmcm9tKSBvdGhlciBzb2Z0d2FyZSwKK3dvcmtlZCBvbiBieSB0aGUgcGVvcGxlIG1lbnRpb25lZCBoZXJlLiAgT3RoZXIgcGVvcGxlIGhlbHBlZCBieSBzZW5kaW5nIG1lCitwYXRjaGVzLCBzdWdnZXN0aW9ucyBhbmQgZ2l2aW5nIGZlZWRiYWNrIGFib3V0IHdoYXQgaXMgZ29vZCBhbmQgYmFkIGluIFZpbS4KKworVmltIHdvdWxkIG5ldmVyIGhhdmUgYmVjb21lIHdoYXQgaXQgaXMgbm93LCB3aXRob3V0IHRoZSBoZWxwIG9mIHRoZXNlIHBlb3BsZSEKKworCVJvbiBBYXJvbgkJV2luMzIgR1VJIGNoYW5nZXMKKwlab2x0YW4gQXJwYWRmZnkJCXdvcmsgb24gVk1TIHBvcnQKKwlUb255IEFuZHJld3MJCVN0ZXZpZQorCUdlcnQgdmFuIEFudHdlcnBlbgljaGFuZ2VzIGZvciBESkdQUCBvbiBNUy1ET1MKKwlCZXJrZWxleSBEQigzKQkJaWRlYXMgZm9yIHN3YXAgZmlsZSBpbXBsZW1lbnRhdGlvbgorCUtlaXRoIEJvc3RpYwkJTnZpCisJV2FsdGVyIEJyaXNjb2UJCU1ha2VmaWxlIHVwZGF0ZXMsIHZhcmlvdXMgcGF0Y2hlcworCVJhbGYgQnJvd24JCVNQQVdOTyBsaWJyYXJ5IGZvciBNUy1ET1MKKwlSb2JlcnQgQ29sb24JCW1hbnkgdXNlZnVsIHJlbWFya3MKKwlNYXJjaW4gRGFsZWNraQkJR1RLKyBHVUkgcG9ydCwgdG9vbGJhciBpY29ucywgZ2V0dGV4dCgpCisJS2F5aGFuIERlbWlyZWwJCXNlbnQgbWUgbmV3cyBpbiBVZ2FuZGEKKwlDaHJpcyAmIEpvaG4gRG93bmV5CXh2aSAoaWRlYXMgZm9yIG11bHRpLXdpbmRvd3MgdmVyc2lvbikKKwlIZW5rIEVsYmVycwkJZmlyc3QgVk1TIHBvcnQKKwlFcmljIEZpc2NoZXIJCU1hYyBwb3J0LCAnY2luZGVudCcsIGFuZCBvdGhlciBpbXByb3ZlbWVudHMKKwlCZW5qaSBGaXNoZXIJCUFuc3dlcmluZyBsb3RzIG9mIHVzZXIgcXVlc3Rpb25zCisJQmlsbCBGb3N0ZXIJCUF0aGVuYSBHVUkgcG9ydAorCUxvaWMgR3JlbmllCQl4dmltIChpZGVhcyBmb3IgbXVsdGkgd2luZG93cyB2ZXJzaW9uKQorCVN2ZW4gR3Vja2VzCQlWaW0gcHJvbW90b3IgYW5kIHByZXZpb3VzIFdXVyBwYWdlIG1haW50YWluZXIKKwlEYXJyZW4gSGllYmVydAkJRXh1YmVyYW50IGN0YWdzCisJQnJ1Y2UgSHVuc2FrZXIJCWltcHJvdmVtZW50cyBmb3IgVk1TIHBvcnQKKwlBbmR5IEthaG4JCUNzY29wZSBzdXBwb3J0LCBHVEsrIEdVSSBwb3J0CisJT2V6Z3VlciBLZXNpbQkJTWFpbnRhaW5lciBvZiBWaW0gTWFpbGluZyBMaXN0cworCUF4ZWwgS2llbGhvcm4JCXdvcmsgb24gdGhlIE1hY2ludG9zaCBwb3J0CisJU3RldmUgS2lya2VuZGFsbAlFbHZpcworCVJvZ2VyIEtub2JiZQkJb3JpZ2luYWwgcG9ydCB0byBXaW5kb3dzIE5UCisJU2VyZ2V5IExhc2thdnkJCVZpbSdzIGhlbHAgZnJvbSBNb3Njb3cKKwlGZWxpeCB2b24gTGVpdG5lcglNYWludGFpbmVyIG9mIFZpbSBNYWlsaW5nIExpc3RzCisJRGF2aWQgTGVvbmFyZAkJUG9ydCBvZiBQeXRob24gZXh0ZW5zaW9ucyB0byBVbml4CisJQXZuZXIgTG90dGVtCQlFZGl0IGluIHJpZ2h0LXRvLWxlZnQgd2luZG93cworCUZsZW1taW5nIE1hZHNlbgkJWDExIGNsaWVudC1zZXJ2ZXIsIHZhcmlvdXMgZmVhdHVyZXMgYW5kIHBhdGNoZXMKKwlNaWNyb1NvZnQJCUdhdmUgbWUgYSBjb3B5IG9mIERldlN0dWRpbyB0byBjb21waWxlIFZpbSB3aXRoCisJUGF1bCBNb29yZQkJUHl0aG9uIGludGVyZmFjZSBleHRlbnNpb25zLCBtYW55IHBhdGNoZXMKKwlLYXRzdWhpdG8gTmFnYW5vCVdvcmsgb24gbXVsdGktYnl0ZSB2ZXJzaW9ucworCVN1bmctSHl1biBOYW0JCVdvcmsgb24gbXVsdGktYnl0ZSB2ZXJzaW9ucworCVZpbmNlIE5lZ3JpCQlXaW4zMiBHVUkgYW5kIGdlbmVyaWMgY29uc29sZSBlbmhhbmNlbWVudHMKKwlTdGV2ZSBPdWFsbGluZQkJQXV0aG9yIG9mIHRoZSBmaXJzdCBWaW0gYm9vayB8ZnJvbWJvb2t8CisJR2VvcmdlIFYuIFJlaWxseQlXaW4zMiBwb3J0LCBXaW4zMiBHVUkgc3RhcnQtb2ZmCisJU3RlcGhlbiBSaWVobQkJYnVnIGNvbGxlY3RvcgorCVN0ZWZhbiBSb2VtZXIJCXZhcmlvdXMgcGF0Y2hlcyBhbmQgaGVscCB0byB1c2VycworCVJhbGYgU2NoYW5kbAkJSUJNIE9TLzM5MCBwb3J0CisJT2xhZiBTZWliZXJ0CQlESUNFIGFuZCBCZUJveCB2ZXJzaW9uLCByZWdleHAgaW1wcm92ZW1lbnRzCisJTW9ydGF6YSBTaGlyYW4JCUZhcnNpIHBhdGNoZXMKKwlQZXRlciBkYSBTaWx2YQkJdGVybWxpYgorCVBhdWwgU2xvb3RtYW4JCU9TLzIgcG9ydAorCUhlbnJ5IFNwZW5jZXIJCXJlZ3VsYXIgZXhwcmVzc2lvbnMKKwlEYW55IFN0LUFtYW50CQlNYWNpbnRvc2ggcG9ydAorCVRpbSBUaG9tcHNvbgkJU3RldmllCisJRy4gUi4gKEZyZWQpIFdhbHRlcglTdGV2aWUKKwlTdmVuIFZlcmRvb2xhZWdlCVBlcmwgaW50ZXJmYWNlCisJUm9iZXJ0IFdlYmIJCUNvbW1hbmQtbGluZSBjb21wbGV0aW9uLCBHVUkgdmVyc2lvbnMsIGFuZAorCQkJCWxvdHMgb2YgcGF0Y2hlcworCUluZ28gV2lsa2VuCQlUY2wgaW50ZXJmYWNlCisJTWlrZSBXaWxsaWFtcwkJUG9zdFNjcmlwdCBwcmludGluZworCUp1ZXJnZW4gV2VpZ2VydAkJTGF0dGljZSB2ZXJzaW9uLCBBVVggaW1wcm92ZW1lbnRzLCBVTklYIGFuZAorCQkJCU1TLURPUyBwb3J0cywgYXV0b2NvbmYKKwlTdGVmYW4gJ1NlYycgWmVobAlNYWludGFpbmVyIG9mIHZpbS5vcmcKKworSSB3aXNoIHRvIHRoYW5rIGFsbCB0aGUgcGVvcGxlIHRoYXQgc2VudCBtZSBidWcgcmVwb3J0cyBhbmQgc3VnZ2VzdGlvbnMuICBUaGUKK2xpc3QgaXMgdG9vIGxvbmcgdG8gbWVudGlvbiB0aGVtIGFsbCBoZXJlLiAgVmltIHdvdWxkIG5vdCBiZSB0aGUgc2FtZSB3aXRob3V0Cit0aGUgaWRlYXMgZnJvbSBhbGwgdGhlc2UgcGVvcGxlOiBUaGV5IGtlZXAgVmltIGFsaXZlIQorCisKK0luIHRoaXMgZG9jdW1lbnRhdGlvbiB0aGVyZSBhcmUgc2V2ZXJhbCByZWZlcmVuY2VzIHRvIG90aGVyIHZlcnNpb25zIG9mIFZpOgorCQkJCQkJCSpWaSoKK1ZpCSJ0aGUgb3JpZ2luYWwiLiAgV2l0aG91dCBmdXJ0aGVyIHJlbWFya3MgdGhpcyBpcyB0aGUgdmVyc2lvbgorCW9mIFZpIHRoYXQgYXBwZWFyZWQgaW4gU3VuIE9TIDQueC4gICI6dmVyc2lvbiIgcmV0dXJucworCSJWZXJzaW9uIDMuNywgNi83Lzg1Ii4gIFNvbWV0aW1lcyBvdGhlciB2ZXJzaW9ucyBhcmUgcmVmZXJyZWQKKwl0by4gIE9ubHkgcnVucyB1bmRlciBVbml4LiAgU291cmNlIGNvZGUgb25seSBhdmFpbGFibGUgd2l0aCBhCisJbGljZW5zZS4gIE1vcmUgaW5mb3JtYXRpb24gb24gVmkgY2FuIGJlIGZvdW5kIHRocm91Z2g6CisJCWh0dHA6Ly92aS1lZGl0b3Iub3JnCVtkb2Vzbid0IGN1cnJlbnRseSB3b3JrLi4uXQorCQkJCQkJCSpQb3NpeCoKK1Bvc2l4CUZyb20gdGhlIElFRUUgc3RhbmRhcmQgMTAwMy4yLCBQYXJ0IDI6IFNoZWxsIGFuZCB1dGlsaXRpZXMuCisJR2VuZXJhbGx5IGtub3duIGFzICJQb3NpeCIuICBUaGlzIGlzIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZgorCWhvdyBWaSBpcyBzdXBwb3NlZCB0byB3b3JrLgorCVRoZSB2ZXJzaW9uIHVzZWQgaXMgYSBkcmFmdCBmcm9tIGJlZ2lubmluZyAxOTk2LCBzbyBhbGwgcmVtYXJrcyBhcmUKKwkiZXhwZWN0ZWQgdG8gY29tcGx5IHRvIiB0aGlzLiAgQW55dGhpbmcgY2FuIGNoYW5nZSB0aG91Z2guLi4KKwkJCQkJCQkqTnZpKgorTnZpCVRoZSAiTmV3IiBWaS4gIFRoZSB2ZXJzaW9uIG9mIFZpIHRoYXQgY29tZXMgd2l0aCBCU0QgNC40IGFuZCBGcmVlQlNELgorCVZlcnkgZ29vZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9yaWdpbmFsIFZpLCB3aXRoIGEgZmV3IGV4dGVuc2lvbnMuCisJVGhlIHZlcnNpb24gdXNlZCBpcyAxLjc5LiAgIjp2ZXJzaW9uIiByZXR1cm5zICJWZXJzaW9uIDEuNzkKKwkoMTAvMjMvOTYpIi4gIFRoZXJlIGhhcyBiZWVuIG5vIHJlbGVhc2UgdGhlIGxhc3QgZmV3IHllYXJzLCBhbHRob3VnaAorCXRoZXJlIGlzIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiAxLjgxLgorCVNvdXJjZSBjb2RlIGlzIGZyZWVseSBhdmFpbGFibGUuCisJCQkJCQkJKkVsdmlzKgorRWx2aXMJQW5vdGhlciBWaSBjbG9uZSwgbWFkZSBieSBTdGV2ZSBLaXJrZW5kYWxsLiAgVmVyeSBjb21wYWN0IGJ1dCBpc24ndAorCWFzIGZsZXhpYmxlIGFzIFZpbS4KKwlUaGUgdmVyc2lvbiB1c2VkIGlzIDIuMS4gIEl0IGlzIHN0aWxsIGJlaW5nIGRldmVsb3BlZC4gIFNvdXJjZSBjb2RlIGlzCisJZnJlZWx5IGF2YWlsYWJsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBOb3RhdGlvbgkJCQkJCSpub3RhdGlvbioKKworV2hlbiBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIHVzZWQgdG8gcmVhZCB0aGlzLCB0ZXh0IHRoYXQgaXMgbm90IHR5cGVkCitsaXRlcmFsbHkgaXMgb2Z0ZW4gaGlnaGxpZ2h0ZWQgd2l0aCB0aGUgU3BlY2lhbCBncm91cC4gIFRoZXNlIGFyZSBpdGVtcyBpbiBbXSwKK3t9IGFuZCA8PiwgYW5kIENUUkwtWC4KKworTm90ZSB0aGF0IFZpbSB1c2VzIGFsbCBwb3NzaWJsZSBjaGFyYWN0ZXJzIGluIGNvbW1hbmRzLiAgU29tZXRpbWVzIHRoZSBbXSwge30KK2FuZCA8PiBhcmUgcGFydCBvZiB3aGF0IHlvdSB0eXBlLCB0aGUgY29udGV4dCBzaG91bGQgbWFrZSB0aGlzIGNsZWFyLgorCisKK1tdCQlDaGFyYWN0ZXJzIGluIHNxdWFyZSBicmFja2V0cyBhcmUgb3B0aW9uYWwuCisKKwkJCQkJCSAgICAqY291bnQqICpbY291bnRdKiAqRTQ4OSoKK1tjb3VudF0JCUFuIG9wdGlvbmFsIG51bWJlciB0aGF0IG1heSBwcmVjZWRlIHRoZSBjb21tYW5kIHRvIG11bHRpcGx5CisJCW9yIGl0ZXJhdGUgdGhlIGNvbW1hbmQuICBJZiBubyBudW1iZXIgaXMgZ2l2ZW4sIGEgY291bnQgb2Ygb25lCisJCWlzIHVzZWQsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBOb3RlIHRoYXQgaW4gdGhpcyBtYW51YWwgdGhlCisJCVtjb3VudF0gaXMgbm90IG1lbnRpb25lZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbW1hbmQsCisJCWJ1dCBvbmx5IGluIHRoZSBleHBsYW5hdGlvbi4gIFRoaXMgd2FzIGRvbmUgdG8gbWFrZSB0aGUKKwkJY29tbWFuZHMgZWFzaWVyIHRvIGxvb2sgdXAuICBJZiB0aGUgJ3Nob3djbWQnIG9wdGlvbiBpcyBvbiwKKwkJdGhlIChwYXJ0aWFsbHkpIGVudGVyZWQgY291bnQgaXMgc2hvd24gYXQgdGhlIGJvdHRvbSBvZiB0aGUKKwkJd2luZG93LiAgWW91IGNhbiB1c2UgPERlbD4gdG8gZXJhc2UgdGhlIGxhc3QgZGlnaXQgKHxOPERlbD58KS4KKworCQkJCQkJCSpbcXVvdGV4XSoKK1sieF0JCUFuIG9wdGlvbmFsIHJlZ2lzdGVyIGRlc2lnbmF0aW9uIHdoZXJlIHRleHQgY2FuIGJlIHN0b3JlZC4KKwkJU2VlIHxyZWdpc3RlcnN8LiAgVGhlIHggaXMgYSBzaW5nbGUgY2hhcmFjdGVyIGJldHdlZW4gJ2EnIGFuZAorCQkneicgb3IgJ0EnIGFuZCAnWicgb3IgJyInLCBhbmQgaW4gc29tZSBjYXNlcyAod2l0aCB0aGUgcHV0CisJCWNvbW1hbmQpIGJldHdlZW4gJzAnIGFuZCAnOScsICclJywgJyMnLCBvciBvdGhlcnMuIFRoZQorCQl1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXIgZGVzaWduYXRlIHRoZSBzYW1lIHJlZ2lzdGVyLAorCQlidXQgdGhlIGxvd2VyY2FzZSBsZXR0ZXIgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzCisJCXJlZ2lzdGVyIGNvbnRlbnRzLCB3aGlsZSB0aGUgdXBwZXJjYXNlIGxldHRlciBpcyB1c2VkIHRvCisJCWFwcGVuZCB0byB0aGUgcHJldmlvdXMgcmVnaXN0ZXIgY29udGVudHMuIFdpdGhvdXQgdGhlICIieCIgb3IKKwkJd2l0aCAiIiIiIHRoZSBzdG9yZWQgdGV4dCBpcyBwdXQgaW50byB0aGUgdW5uYW1lZCByZWdpc3Rlci4KKworCQkJCQkJCSp7fSoKK3t9CQlDdXJseSBicmFjZXMgZGVub3RlIHBhcnRzIG9mIHRoZSBjb21tYW5kIHdoaWNoIG11c3QgYXBwZWFyLAorCQlidXQgd2hpY2ggY2FuIHRha2UgYSBudW1iZXIgb2YgZGlmZmVyZW50IHZhbHVlcy4gIFRoZQorCQlkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSBhbmQgVmkgYXJlIGFsc28gZ2l2ZW4gaW4gY3VybHkgYnJhY2VzCisJCSh0aGlzIHdpbGwgYmUgY2xlYXIgZnJvbSB0aGUgY29udGV4dCkuCisKKwkJCQkJCQkqe2NoYXIxLWNoYXIyfSoKK3tjaGFyMS1jaGFyMn0JQSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gdGhlIHJhbmdlIGNoYXIxIHRvIGNoYXIyLiAgRm9yCisJCWV4YW1wbGU6IHthLXp9IGlzIGEgbG93ZXJjYXNlIGxldHRlci4gIE11bHRpcGxlIHJhbmdlcyBtYXkgYmUKKwkJY29uY2F0ZW5hdGVkLiAgRm9yIGV4YW1wbGUsIHthLXpBLVowLTl9IGlzIGFueSBhbHBoYW51bWVyaWMKKwkJY2hhcmFjdGVyLgorCisJCQkJCQkJKnttb3Rpb259Kgore21vdGlvbn0JQSBjb21tYW5kIHRoYXQgbW92ZXMgdGhlIGN1cnNvci4gIFRoZXNlIGFyZSBleHBsYWluZWQgaW4KKwkJfG1vdGlvbi50eHR8LiAgRXhhbXBsZXM6CisJCQl3CQl0byBzdGFydCBvZiBuZXh0IHdvcmQKKwkJCWIJCXRvIGJlZ2luIG9mIGN1cnJlbnQgd29yZAorCQkJNGoJCWZvdXIgbGluZXMgZG93bgorCQkJL1RoZTxDUj4JdG8gbmV4dCBvY2N1cnJlbmNlIG9mICJUaGUiCisJCVRoaXMgaXMgdXNlZCBhZnRlciBhbiB8b3BlcmF0b3J8IGNvbW1hbmQgdG8gbW92ZSBvdmVyIHRoZSB0ZXh0CisJCXRoYXQgaXMgdG8gYmUgb3BlcmF0ZWQgdXBvbi4KKwkJLSBJZiB0aGUgbW90aW9uIGluY2x1ZGVzIGEgY291bnQgYW5kIHRoZSBvcGVyYXRvciBhbHNvIGhhcyBhCisJCSAgY291bnQsIHRoZSB0d28gY291bnRzIGFyZSBtdWx0aXBsaWVkLiAgRm9yIGV4YW1wbGU6ICIyZDN3IgorCQkgIGRlbGV0ZXMgc2l4IHdvcmRzLgorCQktIFRoZSBtb3Rpb24gY2FuIGJlIGJhY2t3YXJkcywgZS5nLiAiZGIiIHRvIGRlbGV0ZSB0byB0aGUKKwkJICBzdGFydCBvZiB0aGUgd29yZC4KKwkJLSBUaGUgbW90aW9uIGNhbiBhbHNvIGJlIGEgbW91c2UgY2xpY2suICBUaGUgbW91c2UgaXMgbm90CisJCSAgc3VwcG9ydGVkIGluIGV2ZXJ5IHRlcm1pbmFsIHRob3VnaC4KKwkJLSBUaGUgIjpvbWFwIiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHdoaWxlIGFuCisJCSAgb3BlcmF0b3IgaXMgcGVuZGluZy4KKwkJLSBFeCBjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBtb3ZlIHRoZSBjdXJzb3IuICBUaGlzIGNhbiBiZQorCQkgIHVzZWQgdG8gY2FsbCBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBzb21lIGNvbXBsaWNhdGVkIG1vdGlvbi4KKwkJICBUaGUgbW90aW9uIGlzIGFsd2F5cyBjaGFyYWN0ZXJ3aXNlIGV4Y2x1c2l2ZSwgbm8gbWF0dGVyCisJCSAgd2hhdCAiOiIgY29tbWFuZCBpcyB1c2VkLiAgVGhpcyBtZWFucyBpdCdzIGltcG9zc2libGUgdG8KKwkJICBpbmNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIGxpbmUgd2l0aG91dCB0aGUgbGluZSBicmVhaworCQkgICh1bmxlc3MgJ3ZpcnR1YWxlZGl0JyBpcyBzZXQpLgorCQkgIElmIHRoZSBFeCBjb21tYW5kIGNoYW5nZXMgdGhlIHRleHQgYmVmb3JlIHdoZXJlIHRoZSBvcGVyYXRvcgorCQkgIHN0YXJ0cyBvciBqdW1wcyB0byBhbm90aGVyIGJ1ZmZlciB0aGUgcmVzdWx0IGlzCisJCSAgdW5wcmVkaWN0YWJsZS4gIEl0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgdGV4dCBmdXJ0aGVyCisJCSAgZG93bi4gIEp1bXBpbmcgdG8gYW5vdGhlciBidWZmZXIgaXMgcG9zc2libGUgaWYgdGhlIGN1cnJlbnQKKwkJICBidWZmZXIgaXMgbm90IHVubG9hZGVkLgorCisJCQkJCQkJKntWaXN1YWx9Kgore1Zpc3VhbH0JQSBzZWxlY3RlZCB0ZXh0IGFyZWEuICBJdCBpcyBzdGFydGVkIHdpdGggdGhlICJ2IiwgIlYiLCBvcgorCQlDVFJMLVYgY29tbWFuZCwgdGhlbiBhbnkgY3Vyc29yIG1vdmVtZW50IGNvbW1hbmQgY2FuIGJlIHVzZWQKKwkJdG8gY2hhbmdlIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGVkIHRleHQuCisJCVRoaXMgaXMgdXNlZCBiZWZvcmUgYW4gfG9wZXJhdG9yfCBjb21tYW5kIHRvIGhpZ2hsaWdodCB0aGUKKwkJdGV4dCB0aGF0IGlzIHRvIGJlIG9wZXJhdGVkIHVwb24uCisJCVNlZSB8VmlzdWFsLW1vZGV8LgorCisJCQkJCQkJKjxjaGFyYWN0ZXI+KgorPGNoYXJhY3Rlcj4JQSBzcGVjaWFsIGNoYXJhY3RlciBmcm9tIHRoZSB0YWJsZSBiZWxvdywgb3B0aW9uYWxseSB3aXRoCisJCW1vZGlmaWVycywgb3IgYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyIHdpdGggbW9kaWZpZXJzLgorCisJCQkJCQkJKidjaGFyYWN0ZXInKgorJ2MnCQlBIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuCisKKwkJCQkJCQkqQ1RSTC17Y2hhcn0qCitDVFJMLXtjaGFyfQl7Y2hhcn0gdHlwZWQgYXMgYSBjb250cm9sIGNoYXJhY3RlcjsgdGhhdCBpcywgdHlwaW5nIHtjaGFyfQorCQl3aGlsZSBob2xkaW5nIHRoZSBDVFJMIGtleSBkb3duLiAgVGhlIGNhc2Ugb2Yge2NoYXJ9IGRvZXMgbm90CisJCW1hdHRlcjsgdGh1cyBDVFJMLUEgYW5kIENUUkwtYSBhcmUgZXF1aXZhbGVudC4gIEJ1dCBvbiBzb21lCisJCXRlcm1pbmFscywgdXNpbmcgdGhlIFNISUZUIGtleSB3aWxsIHByb2R1Y2UgYW5vdGhlciBjb2RlLAorCQlkb24ndCB1c2UgaXQgdGhlbi4KKworCQkJCQkJCSonb3B0aW9uJyoKKydvcHRpb24nCUFuIG9wdGlvbiwgb3IgcGFyYW1ldGVyLCB0aGF0IGNhbiBiZSBzZXQgdG8gYSB2YWx1ZSwgaXMKKwkJZW5jbG9zZWQgaW4gc2luZ2xlIHF1b3Rlcy4gIFNlZSB8b3B0aW9uc3wuCisKKwkJCQkJCQkqcXVvdGVjb21tYW5kcXVvdGUqCisiY29tbWFuZCIJQSByZWZlcmVuY2UgdG8gYSBjb21tYW5kIHRoYXQgeW91IGNhbiB0eXBlIGlzIGVuY2xvc2VkIGluCisJCWRvdWJsZSBxdW90ZXMuCisKKwkJCQkJKmtleS1ub3RhdGlvbiogKmtleS1jb2RlcyogKmtleWNvZGVzKgorVGhlc2UgbmFtZXMgZm9yIGtleXMgYXJlIHVzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uICBUaGV5IGNhbiBhbHNvIGJlIHVzZWQKK3dpdGggdGhlICI6bWFwIiBjb21tYW5kIChpbnNlcnQgdGhlIGtleSBuYW1lIGJ5IHByZXNzaW5nIENUUkwtSyBhbmQgdGhlbiB0aGUKK2tleSB5b3Ugd2FudCB0aGUgbmFtZSBmb3IpLgorCitub3RhdGlvbgltZWFuaW5nCQkgICAgZXF1aXZhbGVudAlkZWNpbWFsIHZhbHVlKHMpCX4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8TnVsPgkJemVybwkJCUNUUkwtQAkgIDAgKHN0b3JlZCBhcyAxMCkgKjxOdWw+KgorPEJTPgkJYmFja3NwYWNlCQlDVFJMLUgJICA4CSpiYWNrc3BhY2UqCis8VGFiPgkJdGFiCQkJQ1RSTC1JCSAgOQkqdGFiKiAqVGFiKgorCQkJCQkJCSpsaW5lZmVlZCoKKzxOTD4JCWxpbmVmZWVkCQlDVFJMLUoJIDEwICh1c2VkIGZvciA8TnVsPikKKzxGRj4JCWZvcm1mZWVkCQlDVFJMLUwJIDEyCSpmb3JtZmVlZCoKKzxDUj4JCWNhcnJpYWdlIHJldHVybgkJQ1RSTC1NCSAxMwkqY2FycmlhZ2UtcmV0dXJuKgorPFJldHVybj4Jc2FtZSBhcyA8Q1I+CQkJCSo8UmV0dXJuPioKKzxFbnRlcj4JCXNhbWUgYXMgPENSPgkJCQkqPEVudGVyPioKKzxFc2M+CQllc2NhcGUJCQlDVFJMLVsJIDI3CSplc2NhcGUqICo8RXNjPioKKzxTcGFjZT4JCXNwYWNlCQkJCSAzMgkqc3BhY2UqCis8bHQ+CQlsZXNzLXRoYW4JCTwJIDYwCSo8bHQ+KgorPEJzbGFzaD4JYmFja3NsYXNoCQlcCSA5MgkqYmFja3NsYXNoKiAqPEJzbGFzaD4qCis8QmFyPgkJdmVydGljYWwgYmFyCQl8CTEyNAkqPEJhcj4qCis8RGVsPgkJZGVsZXRlCQkJCTEyNworPENTST4JCWNvbW1hbmQgc2VxdWVuY2UgaW50cm8gIEFMVC1Fc2MgMTU1CSo8Q1NJPioKKzx4Q1NJPgkJQ1NJIHdoZW4gdHlwZWQgaW4gdGhlIEdVSQkJKjx4Q1NJPioKKworPEVPTD4JCWVuZC1vZi1saW5lIChjYW4gYmUgPENSPiwgPExGPiBvciA8Q1I+PExGPiwKKwkJZGVwZW5kcyBvbiBzeXN0ZW0gYW5kICdmaWxlZm9ybWF0JykJKjxFT0w+KgorCis8VXA+CQljdXJzb3ItdXAJCQkqY3Vyc29yLXVwKiAqY3Vyc29yX3VwKgorPERvd24+CQljdXJzb3ItZG93bgkJCSpjdXJzb3ItZG93biogKmN1cnNvcl9kb3duKgorPExlZnQ+CQljdXJzb3ItbGVmdAkJCSpjdXJzb3ItbGVmdCogKmN1cnNvcl9sZWZ0KgorPFJpZ2h0PgkJY3Vyc29yLXJpZ2h0CQkJKmN1cnNvci1yaWdodCogKmN1cnNvcl9yaWdodCoKKzxTLVVwPgkJc2hpZnQtY3Vyc29yLXVwCis8Uy1Eb3duPglzaGlmdC1jdXJzb3ItZG93bgorPFMtTGVmdD4Jc2hpZnQtY3Vyc29yLWxlZnQKKzxTLVJpZ2h0PglzaGlmdC1jdXJzb3ItcmlnaHQKKzxDLUxlZnQ+CWNvbnRyb2wtY3Vyc29yLWxlZnQKKzxDLVJpZ2h0Pgljb250cm9sLWN1cnNvci1yaWdodAorPEYxPiAtIDxGMTI+CWZ1bmN0aW9uIGtleXMgMSB0byAxMgkJKmZ1bmN0aW9uX2tleSogKmZ1bmN0aW9uLWtleSoKKzxTLUYxPiAtIDxTLUYxMj4gc2hpZnQtZnVuY3Rpb24ga2V5cyAxIHRvIDEyCSo8Uy1GMT4qCis8SGVscD4JCWhlbHAga2V5Cis8VW5kbz4JCXVuZG8ga2V5Cis8SW5zZXJ0PglpbnNlcnQga2V5Cis8SG9tZT4JCWhvbWUJCQkJKmhvbWUqCis8RW5kPgkJZW5kCQkJCSplbmQqCis8UGFnZVVwPglwYWdlLXVwCQkJCSpwYWdlX3VwKiAqcGFnZS11cCoKKzxQYWdlRG93bj4JcGFnZS1kb3duCQkJKnBhZ2VfZG93biogKnBhZ2UtZG93bioKKzxrSG9tZT4JCWtleXBhZCBob21lICh1cHBlciBsZWZ0KQkqa2V5cGFkLWhvbWUqCis8a0VuZD4JCWtleXBhZCBlbmQgKGxvd2VyIGxlZnQpCQkqa2V5cGFkLWVuZCoKKzxrUGFnZVVwPglrZXlwYWQgcGFnZS11cCAodXBwZXIgcmlnaHQpCSprZXlwYWQtcGFnZS11cCoKKzxrUGFnZURvd24+CWtleXBhZCBwYWdlLWRvd24gKGxvd2VyIHJpZ2h0KQkqa2V5cGFkLXBhZ2UtZG93bioKKzxrUGx1cz4JCWtleXBhZCArCQkJKmtleXBhZC1wbHVzKgorPGtNaW51cz4Ja2V5cGFkIC0JCQkqa2V5cGFkLW1pbnVzKgorPGtNdWx0aXBseT4Ja2V5cGFkICoJCQkqa2V5cGFkLW11bHRpcGx5KgorPGtEaXZpZGU+CWtleXBhZCAvCQkJKmtleXBhZC1kaXZpZGUqCis8a0VudGVyPglrZXlwYWQgRW50ZXIJCQkqa2V5cGFkLWVudGVyKgorPGtQb2ludD4Ja2V5cGFkIERlY2ltYWwgcG9pbnQJCSprZXlwYWQtcG9pbnQqCis8azA+IC0gPGs5PglrZXlwYWQgMCB0byA5CQkJKmtleXBhZC0wKiAqa2V5cGFkLTkqCis8Uy0uLi4+CQlzaGlmdC1rZXkJCQkqc2hpZnQqICo8Uy0qCis8Qy0uLi4+CQljb250cm9sLWtleQkJCSpjb250cm9sKiAqY3RybCogKjxDLSoKKzxNLS4uLj4JCWFsdC1rZXkgb3IgbWV0YS1rZXkJCSptZXRhKiAqYWx0KiAqPE0tKgorPEEtLi4uPgkJc2FtZSBhcyA8TS0uLi4+CQkJKjxBLSoKKzxELS4uLj4JCWNvbW1hbmQta2V5IChNYWNpbnRvc2ggb25seSkJKjxELSoKKzx0X3h4PgkJa2V5IHdpdGggInh4IiBlbnRyeSBpbiB0ZXJtY2FwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiBUaGUgc2hpZnRlZCBjdXJzb3Iga2V5cywgdGhlIGhlbHAga2V5LCBhbmQgdGhlIHVuZG8ga2V5IGFyZSBvbmx5CithdmFpbGFibGUgb24gYSBmZXcgdGVybWluYWxzLiAgT24gdGhlIEFtaWdhLCBzaGlmdGVkIGZ1bmN0aW9uIGtleSAxMCBwcm9kdWNlcworYSBjb2RlIChDU0kpIHRoYXQgaXMgYWxzbyB1c2VkIGJ5IGtleSBzZXF1ZW5jZXMuICBJdCB3aWxsIGJlIHJlY29nbml6ZWQgb25seQorYWZ0ZXIgdHlwaW5nIGFub3RoZXIga2V5LgorCitOb3RlOiBUaGVyZSBhcmUgdHdvIGNvZGVzIGZvciB0aGUgZGVsZXRlIGtleS4gIDEyNyBpcyB0aGUgZGVjaW1hbCBBU0NJSSB2YWx1ZQorZm9yIHRoZSBkZWxldGUga2V5LCB3aGljaCBpcyBhbHdheXMgcmVjb2duaXplZC4gIFNvbWUgZGVsZXRlIGtleXMgc2VuZCBhbm90aGVyCit2YWx1ZSwgaW4gd2hpY2ggY2FzZSB0aGlzIHZhbHVlIGlzIG9idGFpbmVkIGZyb20gdGhlIHRlcm1jYXAgZW50cnkgImtEIi4gIEJvdGgKK3ZhbHVlcyBoYXZlIHRoZSBzYW1lIGVmZmVjdC4gIEFsc28gc2VlIHw6Zml4ZGVsfC4KKworTm90ZTogVGhlIGtleXBhZCBrZXlzIGFyZSB1c2VkIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgY29ycmVzcG9uZGluZyAibm9ybWFsIgora2V5cy4gIEZvciBleGFtcGxlLCA8a0hvbWU+IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgPEhvbWU+LiAgSWYgYSBrZXlwYWQga2V5CitzZW5kcyB0aGUgc2FtZSByYXcga2V5IGNvZGUgYXMgaXRzIG5vbi1rZXlwYWQgZXF1aXZhbGVudCwgaXQgd2lsbCBiZQorcmVjb2duaXplZCBhcyB0aGUgbm9uLWtleXBhZCBjb2RlLiAgRm9yIGV4YW1wbGUsIHdoZW4gPGtIb21lPiBzZW5kcyB0aGUgc2FtZQorY29kZSBhcyA8SG9tZT4sIHdoZW4gcHJlc3NpbmcgPGtIb21lPiBWaW0gd2lsbCB0aGluayA8SG9tZT4gd2FzIHByZXNzZWQuCitNYXBwaW5nIDxrSG9tZT4gd2lsbCBub3Qgd29yayB0aGVuLgorCisJCQkJCQkJCSo8PioKK0V4YW1wbGVzIGFyZSBvZnRlbiBnaXZlbiBpbiB0aGUgPD4gbm90YXRpb24uICBTb21ldGltZXMgdGhpcyBpcyBqdXN0IHRvIG1ha2UKK2NsZWFyIHdoYXQgeW91IG5lZWQgdG8gdHlwZSwgYnV0IG9mdGVuIGl0IGNhbiBiZSB0eXBlZCBsaXRlcmFsbHksIGUuZy4sIHdpdGgKK3RoZSAiOm1hcCIgY29tbWFuZC4gIFRoZSBydWxlcyBhcmU6CisgMS4gIEFueSBwcmludGFibGUgY2hhcmFjdGVycyBhcmUgdHlwZWQgZGlyZWN0bHksIGV4Y2VwdCBiYWNrc2xhc2ggYW5kICc8JworIDIuICBBIGJhY2tzbGFzaCBpcyByZXByZXNlbnRlZCB3aXRoICJcXCIsIGRvdWJsZSBiYWNrc2xhc2gsIG9yICI8QnNsYXNoPiIuCisgMy4gIEEgcmVhbCAnPCcgaXMgcmVwcmVzZW50ZWQgd2l0aCAiXDwiIG9yICI8bHQ+Ii4gIFdoZW4gdGhlcmUgaXMgbm8KKyAgICAgY29uZnVzaW9uIHBvc3NpYmxlLCBhICc8JyBjYW4gYmUgdXNlZCBkaXJlY3RseS4KKyA0LiAgIjxrZXk+IiBtZWFucyB0aGUgc3BlY2lhbCBrZXkgdHlwZWQuICBUaGlzIGlzIHRoZSBub3RhdGlvbiBleHBsYWluZWQgaW4KKyAgICAgdGhlIHRhYmxlIGFib3ZlLiAgQSBmZXcgZXhhbXBsZXM6CisJICAgPEVzYz4JCUVzY2FwZSBrZXkKKwkgICA8Qy1HPgkJQ1RSTC1HCisJICAgPFVwPgkJCWN1cnNvciB1cCBrZXkKKwkgICA8Qy1MZWZ0TW91c2U+CUNvbnRyb2wtIGxlZnQgbW91c2UgY2xpY2sKKwkgICA8Uy1GMTE+CQlTaGlmdGVkIGZ1bmN0aW9uIGtleSAxMQorCSAgIDxNLWE+CQlNZXRhLSBhICAoJ2EnIHdpdGggYml0IDggc2V0KQorCSAgIDxNLUE+CQlNZXRhLSBBICAoJ0EnIHdpdGggYml0IDggc2V0KQorCSAgIDx0X2tkPgkJImtkIiB0ZXJtY2FwIGVudHJ5IChjdXJzb3IgZG93biBrZXkpCisKK0lmIHlvdSB3YW50IHRvIHVzZSB0aGUgZnVsbCA8PiBub3RhdGlvbiBpbiBWaW0sIHlvdSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgJzwnCitmbGFnIGlzIGV4Y2x1ZGVkIGZyb20gJ2Nwb3B0aW9ucycgKHdoZW4gJ2NvbXBhdGlibGUnIGlzIG5vdCBzZXQsIGl0IGFscmVhZHkgaXMKK2J5IGRlZmF1bHQpLiA+CisJOnNldCBjcG8tPTwKK1RoZSA8PiBub3RhdGlvbiB1c2VzIDxsdD4gdG8gZXNjYXBlIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2Yga2V5IG5hbWVzLiAgVXNpbmcgYQorYmFja3NsYXNoIGFsc28gd29ya3MsIGJ1dCBvbmx5IHdoZW4gJ2Nwb3B0aW9ucycgZG9lcyBub3QgaW5jbHVkZSB0aGUgJ0InIGZsYWcuCisKK0V4YW1wbGVzIGZvciBtYXBwaW5nIENUUkwtSCB0byB0aGUgc2l4IGNoYXJhY3RlcnMgIjxIb21lPiI6ID4KKwk6aW1hcCA8Qy1IPiBcPEhvbWU+CisJOmltYXAgPEMtSD4gPGx0PkhvbWU+CitUaGUgZmlyc3Qgb25lIG9ubHkgd29ya3Mgd2hlbiB0aGUgJ0InIGZsYWcgaXMgbm90IGluICdjcG9wdGlvbnMnLiAgVGhlIHNlY29uZAorb25lIGFsd2F5cyB3b3Jrcy4KK1RvIGdldCBhIGxpdGVyYWwgIjxsdD4iIGluIGEgbWFwcGluZzogPgorCTptYXAgPEMtTD4gPGx0Pmx0PgorCitGb3IgbWFwcGluZywgYWJicmV2aWF0aW9uIGFuZCBtZW51IGNvbW1hbmRzIHlvdSBjYW4gdGhlbiBjb3B5LXBhc3RlIHRoZQorZXhhbXBsZXMgYW5kIHVzZSB0aGVtIGRpcmVjdGx5LiAgT3IgdHlwZSB0aGVtIGxpdGVyYWxseSwgaW5jbHVkaW5nIHRoZSAnPCcgYW5kCisnPicgY2hhcmFjdGVycy4gIFRoaXMgZG9lcyBOT1Qgd29yayBmb3Igb3RoZXIgY29tbWFuZHMsIGxpa2UgIjpzZXQiIGFuZAorIjphdXRvY21kIiEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBNb2RlcywgaW50cm9kdWN0aW9uCQkJCSp2aW0tbW9kZXMtaW50cm8qICp2aW0tbW9kZXMqCisKK1ZpbSBoYXMgc2l4IEJBU0lDIG1vZGVzOgorCisJCQkJCSpOb3JtYWwqICpOb3JtYWwtbW9kZSogKmNvbW1hbmQtbW9kZSoKK05vcm1hbCBtb2RlCQlJbiBOb3JtYWwgbW9kZSB5b3UgY2FuIGVudGVyIGFsbCB0aGUgbm9ybWFsIGVkaXRvcgorCQkJY29tbWFuZHMuICBJZiB5b3Ugc3RhcnQgdGhlIGVkaXRvciB5b3UgYXJlIGluIHRoaXMKKwkJCW1vZGUgKHVubGVzcyB5b3UgaGF2ZSBzZXQgdGhlICdpbnNlcnRtb2RlJyBvcHRpb24sCisJCQlzZWUgYmVsb3cpLiAgVGhpcyBpcyBhbHNvIGtub3duIGFzIGNvbW1hbmQgbW9kZS4KKworVmlzdWFsIG1vZGUJCVRoaXMgaXMgbGlrZSBOb3JtYWwgbW9kZSwgYnV0IHRoZSBtb3ZlbWVudCBjb21tYW5kcworCQkJZXh0ZW5kIGEgaGlnaGxpZ2h0ZWQgYXJlYS4gIFdoZW4gYSBub24tbW92ZW1lbnQKKwkJCWNvbW1hbmQgaXMgdXNlZCwgaXQgaXMgZXhlY3V0ZWQgZm9yIHRoZSBoaWdobGlnaHRlZAorCQkJYXJlYS4gIFNlZSB8VmlzdWFsLW1vZGV8LgorCQkJSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIG9uICItLSBWSVNVQUwgLS0iIGlzIHNob3duCisJCQlhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cuCisKK1NlbGVjdCBtb2RlCQlUaGlzIGxvb2tzIG1vc3QgbGlrZSB0aGUgTVMtV2luZG93cyBzZWxlY3Rpb24gbW9kZS4KKwkJCVR5cGluZyBhIHByaW50YWJsZSBjaGFyYWN0ZXIgZGVsZXRlcyB0aGUgc2VsZWN0aW9uCisJCQlhbmQgc3RhcnRzIEluc2VydCBtb2RlLiAgU2VlIHxTZWxlY3QtbW9kZXwuCisJCQlJZiB0aGUgJ3Nob3dtb2RlJyBvcHRpb24gaXMgb24gIi0tIFNFTEVDVCAtLSIgaXMgc2hvd24KKwkJCWF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdy4KKworSW5zZXJ0IG1vZGUJCUluIEluc2VydCBtb2RlIHRoZSB0ZXh0IHlvdSB0eXBlIGlzIGluc2VydGVkIGludG8gdGhlCisJCQlidWZmZXIuICBTZWUgfEluc2VydC1tb2RlfC4KKwkJCUlmIHRoZSAnc2hvd21vZGUnIG9wdGlvbiBpcyBvbiAiLS0gSU5TRVJUIC0tIiBpcyBzaG93bgorCQkJYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93LgorCitDb21tYW5kLWxpbmUgbW9kZQlJbiBDb21tYW5kLWxpbmUgbW9kZSAoYWxzbyBjYWxsZWQgQ21kbGluZSBtb2RlKSB5b3UKK0NtZGxpbmUgbW9kZQkJY2FuIGVudGVyIG9uZSBsaW5lIG9mIHRleHQgYXQgdGhlIGJvdHRvbSBvZiB0aGUKKwkJCXdpbmRvdy4gIFRoaXMgaXMgZm9yIHRoZSBFeCBjb21tYW5kcywgIjoiLCB0aGUgcGF0dGVybgorCQkJc2VhcmNoIGNvbW1hbmRzLCAiPyIgYW5kICIvIiwgYW5kIHRoZSBmaWx0ZXIgY29tbWFuZCwKKwkJCSIhIi4gIHxDbWRsaW5lLW1vZGV8CisKK0V4IG1vZGUJCQlMaWtlIENvbW1hbmQtbGluZSBtb2RlLCBidXQgYWZ0ZXIgZW50ZXJpbmcgYSBjb21tYW5kCisJCQl5b3UgcmVtYWluIGluIEV4IG1vZGUuICBWZXJ5IGxpbWl0ZWQgZWRpdGluZyBvZiB0aGUKKwkJCWNvbW1hbmQgbGluZS4gIHxFeC1tb2RlfAorCitUaGVyZSBhcmUgZml2ZSBBRERJVElPTkFMIG1vZGVzLiAgVGhlc2UgYXJlIHZhcmlhbnRzIG9mIHRoZSBCQVNJQyBtb2RlczoKKworCQkJCSpPcGVyYXRvci1wZW5kaW5nKiAqT3BlcmF0b3ItcGVuZGluZy1tb2RlKgorT3BlcmF0b3ItcGVuZGluZyBtb2RlCVRoaXMgaXMgbGlrZSBOb3JtYWwgbW9kZSwgYnV0IGFmdGVyIGFuIG9wZXJhdG9yCisJCQljb21tYW5kIGhhcyBzdGFydGVkLCBhbmQgVmltIGlzIHdhaXRpbmcgZm9yIGEge21vdGlvbn0KKwkJCXRvIHNwZWNpZnkgdGhlIHRleHQgdGhhdCB0aGUgb3BlcmF0b3Igd2lsbCB3b3JrIG9uLgorCitSZXBsYWNlIG1vZGUJCVJlcGxhY2UgbW9kZSBpcyBhIHNwZWNpYWwgY2FzZSBvZiBJbnNlcnQgbW9kZS4gIFlvdQorCQkJY2FuIGRvIHRoZSBzYW1lIHRoaW5ncyBhcyBpbiBJbnNlcnQgbW9kZSwgYnV0IGZvcgorCQkJZWFjaCBjaGFyYWN0ZXIgeW91IGVudGVyLCBvbmUgY2hhcmFjdGVyIG9mIHRoZSBleGlzdGluZworCQkJdGV4dCBpcyBkZWxldGVkLiAgU2VlIHxSZXBsYWNlLW1vZGV8LgorCQkJSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIG9uICItLSBSRVBMQUNFIC0tIiBpcworCQkJc2hvd24gYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93LgorCitJbnNlcnQgTm9ybWFsIG1vZGUJRW50ZXJlZCB3aGVuIENUUkwtTyBnaXZlbiBpbiBJbnNlcnQgbW9kZS4gIFRoaXMgaXMKKwkJCWxpa2UgTm9ybWFsIG1vZGUsIGJ1dCBhZnRlciBleGVjdXRpbmcgb25lIGNvbW1hbmQgVmltCisJCQlyZXR1cm5zIHRvIEluc2VydCBtb2RlLgorCQkJSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIG9uICItLSAoaW5zZXJ0KSAtLSIgaXMKKwkJCXNob3duIGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdy4KKworSW5zZXJ0IFZpc3VhbCBtb2RlCUVudGVyZWQgd2hlbiBzdGFydGluZyBhIFZpc3VhbCBzZWxlY3Rpb24gZnJvbSBJbnNlcnQKKwkJCW1vZGUsIGUuZy4sIGJ5IHVzaW5nIENUUkwtTyBhbmQgdGhlbiAidiIsICJWIiBvcgorCQkJQ1RSTC1WLiAgV2hlbiB0aGUgVmlzdWFsIHNlbGVjdGlvbiBlbmRzLCBWaW0gcmV0dXJucworCQkJdG8gSW5zZXJ0IG1vZGUuCisJCQlJZiB0aGUgJ3Nob3dtb2RlJyBvcHRpb24gaXMgb24gIi0tIChpbnNlcnQpIFZJU1VBTCAtLSIKKwkJCWlzIHNob3duIGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdy4KKworSW5zZXJ0IFNlbGVjdCBtb2RlCUVudGVyZWQgd2hlbiBzdGFydGluZyBTZWxlY3QgbW9kZSBmcm9tIEluc2VydCBtb2RlLgorCQkJRS5nLiwgYnkgZHJhZ2dpbmcgdGhlIG1vdXNlIG9yIDxTLVJpZ2h0Pi4KKwkJCVdoZW4gdGhlIFNlbGVjdCBtb2RlIGVuZHMsIFZpbSByZXR1cm5zIHRvIEluc2VydCBtb2RlLgorCQkJSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIG9uICItLSAoaW5zZXJ0KSBTRUxFQ1QgLS0iCisJCQlpcyBzaG93biBhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gU3dpdGNoaW5nIGZyb20gbW9kZSB0byBtb2RlCQkJCSptb2RlLXN3aXRjaGluZyoKKworSWYgZm9yIGFueSByZWFzb24geW91IGRvIG5vdCBrbm93IHdoaWNoIG1vZGUgeW91IGFyZSBpbiwgeW91IGNhbiBhbHdheXMgZ2V0CitiYWNrIHRvIE5vcm1hbCBtb2RlIGJ5IHR5cGluZyA8RXNjPiB0d2ljZS4gIFRoaXMgZG9lc24ndCB3b3JrIGZvciBFeCBtb2RlCit0aG91Z2gsIHVzZSAiOnZpc3VhbCIuCitZb3Ugd2lsbCBrbm93IHlvdSBhcmUgYmFjayBpbiBOb3JtYWwgbW9kZSB3aGVuIHlvdSBzZWUgdGhlIHNjcmVlbiBmbGFzaCBvcgoraGVhciB0aGUgYmVsbCBhZnRlciB5b3UgdHlwZSA8RXNjPi4gIEhvd2V2ZXIsIHdoZW4gcHJlc3NpbmcgPEVzYz4gYWZ0ZXIgdXNpbmcKK0NUUkwtTyBpbiBJbnNlcnQgbW9kZSB5b3UgZ2V0IGEgYmVlcCBidXQgeW91IGFyZSBzdGlsbCBpbiBJbnNlcnQgbW9kZSwgdHlwZQorPEVzYz4gYWdhaW4uCisKKwkJCQkJCQkqaV9lc2MqCisJCVRPIG1vZGUJCQkJCQkgICAgfgorCQlOb3JtYWwJVmlzdWFsCVNlbGVjdAlJbnNlcnQJICBSZXBsYWNlICAgQ21kLWxpbmUgIEV4IH4KK0ZST00gbW9kZQkJCQkJCQkJIH4KK05vcm1hbAkJCXYgViBeVgkgICo0CSAqMQkgICAgUgkgICAgOiAvID8gISAgIFEKK1Zpc3VhbAkJICoyCQkgIF5HCSBjIEMJICAgIC0tCSAgICAgIDogICAgICAgLS0KK1NlbGVjdAkJICo1CV5PIF5HCQkgKjYJICAgIC0tCSAgICAgIC0tICAgICAgLS0KK0luc2VydAkJIDxFc2M+CSAgLS0JICAtLQkJICA8SW5zZXJ0PiAgICAtLSAgICAgIC0tCitSZXBsYWNlCQkgPEVzYz4JICAtLQkgIC0tCTxJbnNlcnQ+CSAgICAgIC0tICAgICAgLS0KK0NvbW1hbmQtbGluZQkgKjMJICAtLQkgIC0tCSA6c3RhcnQJICAgIC0tCQkgICAgICAtLQorRXgJCSA6dmkJICAtLQkgIC0tCSAtLQkgICAgLS0JICAgICAgLS0KKworLSAgTkEKKy0tIG5vdCBwb3NzaWJsZQorCisqMSBHbyBmcm9tIE5vcm1hbCBtb2RlIHRvIEluc2VydCBtb2RlIGJ5IGdpdmluZyB0aGUgY29tbWFuZCAiaSIsICJJIiwgImEiLAorICAgIkEiLCAibyIsICJPIiwgImMiLCAiQyIsICJzIiBvciBTIi4KKyoyIEdvIGZyb20gVmlzdWFsIG1vZGUgdG8gTm9ybWFsIG1vZGUgYnkgZ2l2aW5nIGEgbm9uLW1vdmVtZW50IGNvbW1hbmQsIHdoaWNoCisgICBjYXVzZXMgdGhlIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQsIG9yIGJ5IGhpdHRpbmcgPEVzYz4gInYiLCAiViIgb3IgIkNUUkwtViIKKyAgIChzZWUgfHZfdnwpLCB3aGljaCBqdXN0IHN0b3BzIFZpc3VhbCBtb2RlIHdpdGhvdXQgc2lkZSBlZmZlY3RzLgorKjMgR28gZnJvbSBDb21tYW5kLWxpbmUgbW9kZSB0byBOb3JtYWwgbW9kZSBieToKKyAgIC0gSGl0dGluZyA8Q1I+IG9yIDxOTD4sIHdoaWNoIGNhdXNlcyB0aGUgZW50ZXJlZCBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLgorICAgLSBEZWxldGluZyB0aGUgY29tcGxldGUgbGluZSAoZS5nLiwgd2l0aCBDVFJMLVUpIGFuZCBnaXZpbmcgYSBmaW5hbCA8QlM+LgorICAgLSBIaXR0aW5nIENUUkwtQyBvciA8RXNjPiwgd2hpY2ggcXVpdHMgdGhlIGNvbW1hbmQtbGluZSB3aXRob3V0IGV4ZWN1dGluZworICAgICB0aGUgY29tbWFuZC4KKyAgIEluIHRoZSBsYXN0IGNhc2UgPEVzYz4gbWF5IGJlIHRoZSBjaGFyYWN0ZXIgZGVmaW5lZCB3aXRoIHRoZSAnd2lsZGNoYXInCisgICBvcHRpb24sIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBzdGFydCBjb21tYW5kLWxpbmUgY29tcGxldGlvbi4gIFlvdSBjYW4KKyAgIGlnbm9yZSB0aGF0IGFuZCB0eXBlIDxFc2M+IGFnYWluLiAge1ZpOiB3aGVuIGhpdHRpbmcgPEVzYz4gdGhlIGNvbW1hbmQtbGluZQorICAgaXMgZXhlY3V0ZWQuICBUaGlzIGlzIHVuZXhwZWN0ZWQgZm9yIG1vc3QgcGVvcGxlOyB0aGVyZWZvcmUgaXQgd2FzIGNoYW5nZWQKKyAgIGluIFZpbS4gIEJ1dCB3aGVuIHRoZSA8RXNjPiBpcyBwYXJ0IG9mIGEgbWFwcGluZywgdGhlIGNvbW1hbmQtbGluZSBpcworICAgZXhlY3V0ZWQuICBJZiB5b3Ugd2FudCB0aGUgVmkgYmVoYXZpb3VyIGFsc28gd2hlbiB0eXBpbmcgPEVzYz4sIHVzZSAiOmNtYXAKKyAgIF5WPEVzYz4gXlZeTSJ9CisqNCBHbyBmcm9tIE5vcm1hbCB0byBTZWxlY3QgbW9kZSBieToKKyAgIC0gdXNlIHRoZSBtb3VzZSB0byBzZWxlY3QgdGV4dCB3aGlsZSAnc2VsZWN0bW9kZScgY29udGFpbnMgIm1vdXNlIgorICAgLSB1c2UgYSBub24tcHJpbnRhYmxlIGNvbW1hbmQgdG8gbW92ZSB0aGUgY3Vyc29yIHdoaWxlIGtlZXBpbmcgdGhlIFNoaWZ0CisgICAgIGtleSBwcmVzc2VkLCBhbmQgdGhlICdzZWxlY3Rtb2RlJyBvcHRpb24gY29udGFpbnMgImtleSIKKyAgIC0gdXNlICJ2IiwgIlYiIG9yICJDVFJMLVYiIHdoaWxlICdzZWxlY3Rtb2RlJyBjb250YWlucyAiY21kIgorICAgLSB1c2UgImdoIiwgImdIIiBvciAiZyBDVFJMLUgiICB8Z19DVFJMLUh8CisqNSBHbyBmcm9tIFNlbGVjdCBtb2RlIHRvIE5vcm1hbCBtb2RlIGJ5IHVzaW5nIGEgbm9uLXByaW50YWJsZSBjb21tYW5kIHRvIG1vdmUKKyAgIHRoZSBjdXJzb3IsIHdpdGhvdXQga2VlcGluZyB0aGUgU2hpZnQga2V5IHByZXNzZWQuCisqNiBHbyBmcm9tIFNlbGVjdCBtb2RlIHRvIEluc2VydCBtb2RlIGJ5IHR5cGluZyBhIHByaW50YWJsZSBjaGFyYWN0ZXIuICBUaGUKKyAgIHNlbGVjdGlvbiBpcyBkZWxldGVkIGFuZCB0aGUgY2hhcmFjdGVyIGlzIGluc2VydGVkLgorCitJZiB0aGUgJ2luc2VydG1vZGUnIG9wdGlvbiBpcyBvbiwgZWRpdGluZyBhIGZpbGUgd2lsbCBzdGFydCBpbiBJbnNlcnQgbW9kZS4KKworCSpDVFJMLVxfQ1RSTC1OKiAqaV9DVFJMLVxfQ1RSTC1OKiAqY19DVFJMLVxfQ1RSTC1OKiAqdl9DVFJMLVxfQ1RSTC1OKgorQWRkaXRpb25hbGx5IHRoZSBjb21tYW5kIENUUkwtXCBDVFJMLU4gb3IgPEMtXD48Qy1OPiBjYW4gYmUgdXNlZCB0byBnbyB0bworTm9ybWFsIG1vZGUgZnJvbSBhbnkgb3RoZXIgbW9kZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBzdXJlIFZpbSBpcyBpbgorTm9ybWFsIG1vZGUsIHdpdGhvdXQgY2F1c2luZyBhIGJlZXAgbGlrZSA8RXNjPiB3b3VsZC4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QKK3dvcmsgaW4gRXggbW9kZS4gIFdoZW4gdXNlZCBhZnRlciBhIGNvbW1hbmQgdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwgc3VjaCBhcworfGZ8IG9yIHxtfCwgdGhlIHRpbWVvdXQgc2V0IHdpdGggJ3R0aW1lb3V0bGVuJyBhcHBsaWVzLgorCisJKkNUUkwtXF9DVFJMLUcqICppX0NUUkwtXF9DVFJMLUcqICpjX0NUUkwtXF9DVFJMLUcqICp2X0NUUkwtXF9DVFJMLUcqCitUaGUgY29tbWFuZCBDVFJMLVwgQ1RSTC1HIG9yIDxDLVw+PEMtRz4gY2FuIGJlIHVzZWQgdG8gZ28gdG8gSW5zZXJ0IG1vZGUgd2hlbgorJ2luc2VydG1vZGUnIGlzIHNldC4gIE90aGVyd2lzZSBpdCBnb2VzIHRvIE5vcm1hbCBtb2RlLiAgVGhpcyBjYW4gYmUgdXNlZCB0bworbWFrZSBzdXJlIFZpbSBpcyBpbiB0aGUgbW9kZSBpbmRpY2F0ZWQgYnkgJ2luc2VydG1vZGUnLCB3aXRob3V0IGtub3dpbmcgaW4KK3doYXQgbW9kZSBWaW0gY3VycmVudGx5IGlzLgorCisJCQkJICAgICpRKiAqbW9kZS1FeCogKkV4LW1vZGUqICpFeCogKkVYKiAqRTUwMSoKK1EJCQlTd2l0Y2ggdG8gIkV4IiBtb2RlLiAgVGhpcyBpcyBhIGJpdCBsaWtlIHR5cGluZyAiOiIKKwkJCWNvbW1hbmRzIG9uZSBhZnRlciBhbm90aGVyLCBleGNlcHQ6CisJCQktIFlvdSBkb24ndCBoYXZlIHRvIGtlZXAgcHJlc3NpbmcgIjoiLgorCQkJLSBUaGUgc2NyZWVuIGRvZXNuJ3QgZ2V0IHVwZGF0ZWQgYWZ0ZXIgZWFjaCBjb21tYW5kLgorCQkJLSBUaGVyZSBpcyBubyBub3JtYWwgY29tbWFuZC1saW5lIGVkaXRpbmcuCisJCQktIE1hcHBpbmdzIGFuZCBhYmJyZXZpYXRpb25zIGFyZSBub3QgdXNlZC4KKwkJCUluIGZhY3QsIHlvdSBhcmUgZWRpdGluZyB0aGUgbGluZXMgd2l0aCB0aGUgInN0YW5kYXJkIgorCQkJbGluZS1pbnB1dCBlZGl0aW5nIGNvbW1hbmRzICg8RGVsPiBvciA8QlM+IHRvIGVyYXNlLAorCQkJQ1RSTC1VIHRvIGtpbGwgdGhlIHdob2xlIGxpbmUpLgorCQkJVmltIHdpbGwgZW50ZXIgdGhpcyBtb2RlIGJ5IGRlZmF1bHQgaWYgaXQncyBpbnZva2VkIGFzCisJCQkiZXgiIG9uIHRoZSBjb21tYW5kLWxpbmUuCisJCQlVc2UgdGhlICI6dmkiIGNvbW1hbmQgfDp2aXN1YWx8IHRvIGV4aXQgIkV4IiBtb2RlLgorCQkJTm90ZTogSW4gb2xkZXIgdmVyc2lvbnMgb2YgVmltICJRIiBmb3JtYXR0ZWQgdGV4dCwKKwkJCXRoYXQgaXMgbm93IGRvbmUgd2l0aCB8Z3F8LiAgQnV0IGlmIHlvdSB1c2UgdGhlCisJCQl8dmltcmNfZXhhbXBsZS52aW18IHNjcmlwdCAiUSIgd29ya3MgbGlrZSAiZ3EiLgorCisJCQkJCSpnUSoKK2dRCQkJU3dpdGNoIHRvICJFeCIgbW9kZSwgYnV0IHJlYWxseSBiZWhhdmUgbGlrZSB0eXBpbmcgIjoiCisJCQljb21tYW5kcyBhZnRlciBhbm90aGVyLiAgQWxsIGNvbW1hbmQgbGluZSBlZGl0aW5nLAorCQkJY29tcGxldGlvbiBldGMuIGlzIGF2YWlsYWJsZS4KKwkJCVVzZSB0aGUgIjp2aSIgY29tbWFuZCB8OnZpc3VhbHwgdG8gZXhpdCAiRXgiIG1vZGUuCisJCQl7bm90IGluIFZpfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFRoZSB3aW5kb3cgY29udGVudHMJCQkJCSp3aW5kb3ctY29udGVudHMqCisKK0luIE5vcm1hbCBtb2RlIGFuZCBJbnNlcnQvUmVwbGFjZSBtb2RlIHRoZSBzY3JlZW4gd2luZG93IHdpbGwgc2hvdyB0aGUgY3VycmVudAorY29udGVudHMgb2YgdGhlIGJ1ZmZlcjogV2hhdCBZb3UgU2VlIElzIFdoYXQgWW91IEdldC4gIFRoZXJlIGFyZSB0d28KK2V4Y2VwdGlvbnM6CistIFdoZW4gdGhlICdjcG9wdGlvbnMnIG9wdGlvbiBjb250YWlucyAnJCcsIGFuZCB0aGUgY2hhbmdlIGlzIHdpdGhpbiBvbmUgbGluZSwKKyAgdGhlIHRleHQgaXMgbm90IGRpcmVjdGx5IGRlbGV0ZWQsIGJ1dCBhICckJyBpcyBwdXQgYXQgdGhlIGxhc3QgZGVsZXRlZAorICBjaGFyYWN0ZXIuCistIFdoZW4gaW5zZXJ0aW5nIHRleHQgaW4gb25lIHdpbmRvdywgb3RoZXIgd2luZG93cyBvbiB0aGUgc2FtZSB0ZXh0IGFyZSBub3QKKyAgdXBkYXRlZCB1bnRpbCB0aGUgaW5zZXJ0IGlzIGZpbmlzaGVkLgore1ZpOiBUaGUgc2NyZWVuIGlzIG5vdCBhbHdheXMgdXBkYXRlZCBvbiBzbG93IHRlcm1pbmFsc30KKworTGluZXMgbG9uZ2VyIHRoYW4gdGhlIHdpbmRvdyB3aWR0aCB3aWxsIHdyYXAsIHVubGVzcyB0aGUgJ3dyYXAnIG9wdGlvbiBpcyBvZmYKKyhzZWUgYmVsb3cpLiAgVGhlICdsaW5lYnJlYWsnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHdyYXAgYXQgYSBibGFuayBjaGFyYWN0ZXIuCisKK0lmIHRoZSB3aW5kb3cgaGFzIHJvb20gYWZ0ZXIgdGhlIGxhc3QgbGluZSBvZiB0aGUgYnVmZmVyLCBWaW0gd2lsbCBzaG93ICd+JyBpbgordGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgbGFzdCBsaW5lcyBpbiB0aGUgd2luZG93LCBsaWtlIHRoaXM6ID4KKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8c29tZSBsaW5lCQl8CisJfGxhc3QgbGluZQkJfAorCXx+CQkJfAorCXx+CQkJfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGh1cyB0aGUgJ34nIGxpbmVzIGluZGljYXRlIHRoYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHdhcyByZWFjaGVkLgorCitJZiB0aGUgbGFzdCBsaW5lIGluIGEgd2luZG93IGRvZXNuJ3QgZml0LCBWaW0gd2lsbCBpbmRpY2F0ZSB0aGlzIHdpdGggYSAnQCcgaW4KK3RoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGxhc3QgbGluZXMgaW4gdGhlIHdpbmRvdywgbGlrZSB0aGlzOiA+CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfGZpcnN0IGxpbmUJCXwKKwl8c2Vjb25kIGxpbmUJCXwKKwl8QAkJCXwKKwl8QAkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RodXMgdGhlICdAJyBsaW5lcyBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIGEgbGluZSB0aGF0IGRvZXNuJ3QgZml0IGluIHRoZQord2luZG93LgorCitXaGVuIHRoZSAibGFzdGxpbmUiIGZsYWcgaXMgcHJlc2VudCBpbiB0aGUgJ2Rpc3BsYXknIG9wdGlvbiwgeW91IHdpbGwgbm90IHNlZQorJ0AnIGNoYXJhY3RlcnMgYXQgdGhlIGxlZnQgc2lkZSBvZiB3aW5kb3cuICBJZiB0aGUgbGFzdCBsaW5lIGRvZXNuJ3QgZml0Citjb21wbGV0ZWx5LCBvbmx5IHRoZSBwYXJ0IHRoYXQgZml0cyBpcyBzaG93biwgYW5kIHRoZSBsYXN0IHRocmVlIGNoYXJhY3RlcnMgb2YKK3RoZSBsYXN0IGxpbmUgYXJlIHJlcGxhY2VkIHdpdGggIkBAQCIsIGxpa2UgdGhpczogPgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxmaXJzdCBsaW5lCQl8CisJfHNlY29uZCBsaW5lCQl8CisJfGEgdmVyeSBsb25nIGxpbmUgdGhhdCBkfAorCXxvZXNuJ3QgZml0IGluIHRoZSB3aUBAQHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0lmIHRoZXJlIGlzIGEgc2luZ2xlIGxpbmUgdGhhdCBpcyB0b28gbG9uZyB0byBmaXQgaW4gdGhlIHdpbmRvdywgdGhpcyBpcyBhCitzcGVjaWFsIHNpdHVhdGlvbi4gIFZpbSB3aWxsIHNob3cgb25seSBwYXJ0IG9mIHRoZSBsaW5lLCBhcm91bmQgd2hlcmUgdGhlCitjdXJzb3IgaXMuICBUaGVyZSBhcmUgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzIHNob3duLCBzbyB0aGF0IHlvdSBjYW4gZWRpdCBhbGwKK3BhcnRzIG9mIHRoaXMgbGluZS4KK3tWaTogZ2l2ZXMgYW4gImludGVybmFsIGVycm9yIiBvbiBsaW5lcyB0aGF0IGRvIG5vdCBmaXQgaW4gdGhlIHdpbmRvd30KKworVGhlICdAJyBvY2Nhc2lvbiBpbiB0aGUgJ2hpZ2hsaWdodCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCBzcGVjaWFsCitoaWdobGlnaHRpbmcgZm9yIHRoZSAnQCcgYW5kICd+JyBjaGFyYWN0ZXJzLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bworZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHJlYWwgY2hhcmFjdGVycyBpbiB0aGUgYnVmZmVyLgorCitUaGUgJ3Nob3dicmVhaycgb3B0aW9uIGNvbnRhaW5zIHRoZSBzdHJpbmcgdG8gcHV0IGluIGZyb250IG9mIHdyYXBwZWQgbGluZXMuCisKKwkJCQkJCQkqd3JhcC1vZmYqCitJZiB0aGUgJ3dyYXAnIG9wdGlvbiBpcyBvZmYsIGxvbmcgbGluZXMgd2lsbCBub3Qgd3JhcC4gIE9ubHkgdGhlIHBhcnQgdGhhdAorZml0cyBvbiB0aGUgc2NyZWVuIGlzIHNob3duLiAgSWYgdGhlIGN1cnNvciBpcyBtb3ZlZCB0byBhIHBhcnQgb2YgdGhlIGxpbmUKK3RoYXQgaXMgbm90IHNob3duLCB0aGUgc2NyZWVuIGlzIHNjcm9sbGVkIGhvcml6b250YWxseS4gIFRoZSBhZHZhbnRhZ2Ugb2YKK3RoaXMgbWV0aG9kIGlzIHRoYXQgY29sdW1ucyBhcmUgc2hvd24gYXMgdGhleSBhcmUgYW5kIGxpbmVzIHRoYXQgY2Fubm90IGZpdAorb24gdGhlIHNjcmVlbiBjYW4gYmUgZWRpdGVkLiAgVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IHlvdSBjYW5ub3Qgc2VlIGFsbCB0aGUKK2NoYXJhY3RlcnMgb2YgYSBsaW5lIGF0IG9uY2UuICBUaGUgJ3NpZGVzY3JvbGwnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHRoZQorbWluaW1hbCBudW1iZXIgb2YgY29sdW1ucyB0byBzY3JvbGwuICB7Vmk6IGhhcyBubyAnd3JhcCcgb3B0aW9ufQorCitBbGwgbm9ybWFsIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBkaXJlY3RseSBvbiB0aGUgc2NyZWVuLiAgVGhlIDxUYWI+CitpcyByZXBsYWNlZCB3aXRoIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoYXQgaXQgcmVwcmVzZW50cy4gIE90aGVyIG5vbi1wcmludGluZworY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgd2l0aCAiXntjaGFyfSIsIHdoZXJlIHtjaGFyfSBpcyB0aGUgbm9uLXByaW50aW5nCitjaGFyYWN0ZXIgd2l0aCA2NCBhZGRlZC4gIFRodXMgY2hhcmFjdGVyIDcgKGJlbGwpIHdpbGwgYmUgc2hvd24gYXMgIl5HIi4KK0NoYXJhY3RlcnMgYmV0d2VlbiAxMjcgYW5kIDE2MCBhcmUgcmVwbGFjZWQgd2l0aCAifntjaGFyfSIsIHdoZXJlIHtjaGFyfSBpcwordGhlIGNoYXJhY3RlciB3aXRoIDY0IHN1YnRyYWN0ZWQuICBUaGVzZSBjaGFyYWN0ZXJzIG9jY3VweSBtb3JlIHRoYW4gb25lCitwb3NpdGlvbiBvbiB0aGUgc2NyZWVuLiAgVGhlIGN1cnNvciBjYW4gb25seSBiZSBwb3NpdGlvbmVkIG9uIHRoZSBmaXJzdCBvbmUuCisKK0lmIHlvdSBzZXQgdGhlICdudW1iZXInIG9wdGlvbiwgYWxsIGxpbmVzIHdpbGwgYmUgcHJlY2VkZWQgd2l0aCB0aGVpcgorbnVtYmVyLiAgVGlwOiBJZiB5b3UgZG9uJ3QgbGlrZSB3cmFwcGluZyBsaW5lcyB0byBtaXggd2l0aCB0aGUgbGluZSBudW1iZXJzLAorc2V0IHRoZSAnc2hvd2JyZWFrJyBvcHRpb24gdG8gZWlnaHQgc3BhY2VzOgorCSI6c2V0IHNob3dicmVhaz1cIFwgXCBcIFwgXCBcIFwgIgorCitJZiB5b3Ugc2V0IHRoZSAnbGlzdCcgb3B0aW9uLCA8VGFiPiBjaGFyYWN0ZXJzIHdpbGwgbm90IGJlIHNob3duIGFzIHNldmVyYWwKK3NwYWNlcywgYnV0IGFzICJeSSIuICBBICckJyB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCBzbyB5b3UgY2FuCitmaW5kIHRyYWlsaW5nIGJsYW5rcy4KKworSW4gQ29tbWFuZC1saW5lIG1vZGUgb25seSB0aGUgY29tbWFuZC1saW5lIGl0c2VsZiBpcyBzaG93biBjb3JyZWN0bHkuICBUaGUKK2Rpc3BsYXkgb2YgdGhlIGJ1ZmZlciBjb250ZW50cyBpcyB1cGRhdGVkIGFzIHNvb24gYXMgeW91IGdvIGJhY2sgdG8gQ29tbWFuZAorbW9kZS4KKworVGhlIGxhc3QgbGluZSBvZiB0aGUgd2luZG93IGlzIHVzZWQgZm9yIHN0YXR1cyBhbmQgb3RoZXIgbWVzc2FnZXMuICBUaGUKK3N0YXR1cyBtZXNzYWdlcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhbiBvcHRpb24gaXMgb246CisKK3N0YXR1cyBtZXNzYWdlCQkJb3B0aW9uCSAgICAgZGVmYXVsdAlVbml4IGRlZmF1bHQJfgorY3VycmVudCBtb2RlCQkJJ3Nob3dtb2RlJwlvbgkgICAgb24KK2NvbW1hbmQgY2hhcmFjdGVycwkJJ3Nob3djbWQnCW9uCSAgICBvZmYKK2N1cnNvciBwb3NpdGlvbgkJCSdydWxlcicJCW9mZgkgICAgb2ZmCisKK1RoZSBjdXJyZW50IG1vZGUgaXMgIi0tIElOU0VSVCAtLSIgb3IgIi0tIFJFUExBQ0UgLS0iLCBzZWUgfCdzaG93bW9kZSd8LiAgVGhlCitjb21tYW5kIGNoYXJhY3RlcnMgYXJlIHRob3NlIHRoYXQgeW91IHR5cGVkIGJ1dCB3ZXJlIG5vdCB1c2VkIHlldC4gIHtWaTogZG9lcworbm90IHNob3cgdGhlIGNoYXJhY3RlcnMgeW91IHR5cGVkIG9yIHRoZSBjdXJzb3IgcG9zaXRpb259CisKK0lmIHlvdSBoYXZlIGEgc2xvdyB0ZXJtaW5hbCB5b3UgY2FuIHN3aXRjaCBvZmYgdGhlIHN0YXR1cyBtZXNzYWdlcyB0byBzcGVlZAordXAgZWRpdGluZzoKKwk6c2V0IG5vc2Mgbm9ydSBub3NtCisKK0lmIHRoZXJlIGlzIGFuIGVycm9yLCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgc2hvd24gZm9yIGF0IGxlYXN0IG9uZSBzZWNvbmQKKyhpbiByZXZlcnNlIHZpZGVvKS4gIHtWaTogZXJyb3IgbWVzc2FnZXMgbWF5IGJlIG92ZXJ3cml0dGVuIHdpdGggb3RoZXIKK21lc3NhZ2VzIGJlZm9yZSB5b3UgaGF2ZSBhIGNoYW5jZSB0byByZWFkIHRoZW19CisKK1NvbWUgY29tbWFuZHMgc2hvdyBob3cgbWFueSBsaW5lcyB3ZXJlIGFmZmVjdGVkLiAgQWJvdmUgd2hpY2ggdGhyZXNob2xkIHRoaXMKK2hhcHBlbnMgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgJ3JlcG9ydCcgb3B0aW9uIChkZWZhdWx0IDIpLgorCitPbiB0aGUgQW1pZ2EgVmltIHdpbGwgcnVuIGluIGEgQ0xJIHdpbmRvdy4gIFRoZSBuYW1lIFZpbSBhbmQgdGhlIGZ1bGwgbmFtZSBvZgordGhlIGN1cnJlbnQgZmlsZSBuYW1lIHdpbGwgYmUgc2hvd24gaW4gdGhlIHRpdGxlIGJhci4gIFdoZW4gdGhlIHdpbmRvdyBpcworcmVzaXplZCwgVmltIHdpbGwgYXV0b21hdGljYWxseSByZWRyYXcgdGhlIHdpbmRvdy4gIFlvdSBtYXkgbWFrZSB0aGUgd2luZG93IGFzCitzbWFsbCBhcyB5b3UgbGlrZSwgYnV0IGlmIGl0IGdldHMgdG9vIHNtYWxsIG5vdCBhIHNpbmdsZSBsaW5lIHdpbGwgZml0IGluIGl0LgorTWFrZSBpdCBhdCBsZWFzdCA0MCBjaGFyYWN0ZXJzIHdpZGUgdG8gYmUgYWJsZSB0byByZWFkIG1vc3QgbWVzc2FnZXMgb24gdGhlCitsYXN0IGxpbmUuCisKK09uIG1vc3QgVW5peCBzeXN0ZW1zLCByZXNpemluZyB0aGUgd2luZG93IGlzIHJlY29nbml6ZWQgYW5kIGhhbmRsZWQgY29ycmVjdGx5CitieSBWaW0uICB7Vmk6IG5vdCBva30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBEZWZpbml0aW9ucwkJCQkJCSpkZWZpbml0aW9ucyoKKworICBzY3JlZW4JCVRoZSB3aG9sZSBhcmVhIHRoYXQgVmltIHVzZXMgdG8gd29yayBpbi4gIFRoaXMgY2FuIGJlCisJCQlhIHRlcm1pbmFsIGVtdWxhdG9yIHdpbmRvdy4gIEFsc28gY2FsbGVkICJ0aGUgVmltCisJCQl3aW5kb3ciLgorICB3aW5kb3cJCUEgdmlldyBvbiBhIGJ1ZmZlci4KKworQSBzY3JlZW4gY29udGFpbnMgb25lIG9yIG1vcmUgd2luZG93cywgc2VwYXJhdGVkIGJ5IHN0YXR1cyBsaW5lcyBhbmQgd2l0aCB0aGUKK2NvbW1hbmQgbGluZSBhdCB0aGUgYm90dG9tLgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCitzY3JlZW4JfCB3aW5kb3cgMQl8IHdpbmRvdyAyCXwKKwl8CQl8CQl8CisJfAkJfAkJfAorCXw9IHN0YXR1cyBsaW5lID18PSBzdGF0dXMgbGluZSA9fAorCXwgd2luZG93IDMJCQl8CisJfAkJCQl8CisJfAkJCQl8CisJfD09PT0gc3RhdHVzIGxpbmUgPT09PT09PT09PT09PT18CisJfGNvbW1hbmQgbGluZQkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGNvbW1hbmQgbGluZSBpcyBhbHNvIHVzZWQgZm9yIG1lc3NhZ2VzLiAgSXQgc2Nyb2xscyB1cCB0aGUgc2NyZWVuIHdoZW4KK3RoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgY29tbWFuZCBsaW5lLgorCitBIGRpZmZlcmVuY2UgaXMgbWFkZSBiZXR3ZWVuIGZvdXIgdHlwZXMgb2YgbGluZXM6CisKKyAgYnVmZmVyIGxpbmVzCQlUaGUgbGluZXMgaW4gdGhlIGJ1ZmZlci4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCisJCQlsaW5lcyBhcyB0aGV5IGFyZSByZWFkIGZyb20vd3JpdHRlbiB0byBhIGZpbGUuICBUaGV5CisJCQljYW4gYmUgdGhvdXNhbmRzIG9mIGNoYXJhY3RlcnMgbG9uZy4KKyAgbG9naWNhbCBsaW5lcwkJVGhlIGJ1ZmZlciBsaW5lcyB3aXRoIGZvbGRpbmcgYXBwbGllZC4gIEJ1ZmZlciBsaW5lcworCQkJaW4gYSBjbG9zZWQgZm9sZCBhcmUgY2hhbmdlZCB0byBhIHNpbmdsZSBsb2dpY2FsIGxpbmU6CisJCQkiKy0tIDk5IGxpbmVzIGZvbGRlZCIuICBUaGV5IGNhbiBiZSB0aG91c2FuZHMgb2YKKwkJCWNoYXJhY3RlcnMgbG9uZy4KKyAgd2luZG93IGxpbmVzCQlUaGUgbGluZXMgZGlzcGxheWVkIGluIGEgd2luZG93OiBBIHJhbmdlIG9mIGxvZ2ljYWwKKwkJCWxpbmVzIHdpdGggd3JhcHBpbmcsIGxpbmUgYnJlYWtzLCBldGMuICBhcHBsaWVkLiAgVGhleQorCQkJY2FuIG9ubHkgYmUgYXMgbG9uZyBhcyB0aGUgd2lkdGggb2YgdGhlIHdpbmRvdyBhbGxvd3MsCisJCQlsb25nZXIgbGluZXMgYXJlIHdyYXBwZWQgb3IgdHJ1bmNhdGVkLgorICBzY3JlZW4gbGluZXMJCVRoZSBsaW5lcyBvZiB0aGUgc2NyZWVuIHRoYXQgVmltIHVzZXMuICBDb25zaXN0cyBvZgorCQkJdGhlIHdpbmRvdyBsaW5lcyBvZiBhbGwgd2luZG93cywgd2l0aCBzdGF0dXMgbGluZXMKKwkJCWFuZCB0aGUgY29tbWFuZCBsaW5lIGFkZGVkLiAgVGhleSBjYW4gb25seSBiZSBhcyBsb25nCisJCQlhcyB0aGUgd2lkdGggb2YgdGhlIHNjcmVlbiBhbGxvd3MuICBXaGVuIHRoZSBjb21tYW5kCisJCQlsaW5lIGdldHMgbG9uZ2VyIGl0IHdyYXBzIGFuZCBsaW5lcyBhcmUgc2Nyb2xsZWQgdG8KKwkJCW1ha2Ugcm9vbS4KKworYnVmZmVyIGxpbmVzCWxvZ2ljYWwgbGluZXMJd2luZG93IGxpbmVzCXNjcmVlbiBsaW5lcyB+CisKKzEuIG9uZQkJMS4gb25lCQkxLiArLS0gZm9sZGVkICAgMS4gICstLSBmb2xkZWQKKzIuIHR3bwkJMi4gKy0tIGZvbGRlZAkyLiBmaXZlCQkyLiAgZml2ZQorMy4gdGhyZWUJMy4gZml2ZQkJMy4gc2l4CQkzLiAgc2l4Cis0LiBmb3VyCQk0LiBzaXgJCTQuIHNldmVuCTQuICBzZXZlbgorNS4gZml2ZQkJNS4gc2V2ZW4JCQk1LiAgPT09IHN0YXR1cyBsaW5lID09PQorNi4gc2l4CQkJCQkJNi4gIGFhYQorNy4gc2V2ZW4JCQkJCTcuICBiYmIKKwkJCQkJCTguICBjY2MgY2NjIGMKKzEuIGFhYQkJMS4gYWFhCQkxLiBhYWEJCTkuICBjYworMi4gYmJiCQkyLiBiYmIJCTIuIGJiYgkJMTAuIGRkZAorMy4gY2NjIGNjYyBjY2MJMy4gY2NjIGNjYyBjY2MJMy4gY2NjIGNjYyBjCTExLiB+IAorNC4gZGRkCQk0LiBkZGQJCTQuIGNjCQkxMi4gPT09IHN0YXR1cyBsaW5lID09PQorCQkJCTUuIGRkZAkJMTMuIChjb21tYW5kIGxpbmUpCisJCQkJNi4gfiAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbWFrZWh0bWwuYXdrIGIvcnVudGltZS9kb2MvbWFrZWh0bWwuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTA2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9tYWtlaHRtbC5hd2sKQEAgLTAsMCArMSw3ODAgQEAKK0JFR0lOICAgeworCSMgc29tZSBpbml0aWFsaXphdGlvbiB2YXJpYWJsZXMKKwlhc2NpaWFydD0ibm8iOworCXdhc3NldD0ibm8iOworCWxpbmVzZXQ9MDsKKwlzYW1wbGU9Im5vIjsKKwl3aGlsZSAoIGdldGxpbmUgdGkgPCJ0YWdzLnJlZiIgPiAwICkgeworCQluZj1zcGxpdCh0aSx0YWcsIgkiKTsKKwkJdGFna2V5W3RhZ1sxXV09InllcyI7dGFncmVmW3RhZ1sxXV09dGFnWzJdOworCX0KKwlza2lwX3dvcmRbImFuZCJdPSJ5ZXMiOworCXNraXBfd29yZFsiYmFja3NwYWNlIl09InllcyI7CisJc2tpcF93b3JkWyJiZWVwIl09InllcyI7CisJc2tpcF93b3JkWyJidWdzIl09InllcyI7CisJc2tpcF93b3JkWyJkYSJdPSJ5ZXMiOworCXNraXBfd29yZFsiZW5kIl09InllcyI7CisJc2tpcF93b3JkWyJmdHAiXT0ieWVzIjsKKwlza2lwX3dvcmRbImdvIl09InllcyI7CisJc2tpcF93b3JkWyJoZWxwIl09InllcyI7CisJc2tpcF93b3JkWyJob21lIl09InllcyI7CisJc2tpcF93b3JkWyJuZXdzIl09InllcyI7CisJc2tpcF93b3JkWyJpbmRleCJdPSJ5ZXMiOworCXNraXBfd29yZFsiaW5zZXJ0Il09InllcyI7CisJc2tpcF93b3JkWyJpbnRvIl09InllcyI7CisJc2tpcF93b3JkWyJwdXQiXT0ieWVzIjsKKwlza2lwX3dvcmRbInJlZmVyZW5jZSJdPSJ5ZXMiOworCXNraXBfd29yZFsic2VjdGlvbiJdPSJ5ZXMiOworCXNraXBfd29yZFsic3BhY2UiXT0ieWVzIjsKKwlza2lwX3dvcmRbInN0YXJ0aW5nIl09InllcyI7CisJc2tpcF93b3JkWyJ0b2dnbGUiXT0ieWVzIjsKKwlza2lwX3dvcmRbInZhcmlvdXMiXT0ieWVzIjsKKwlza2lwX3dvcmRbInZlcnNpb24iXT0ieWVzIjsKKwlza2lwX3dvcmRbImlzIl09InllcyI7Cit9CisjCisjIHByb3RlY3Qgc3BlY2lhbCBjaGFycworIworL1s+PCbhXS8ge2dzdWIoLyYvLCJcXCZhbXA7Iik7Z3N1YigvPi8sIlxcJmd0OyIpO2dzdWIoLzwvLCJcXCZsdDsiKTtnc3ViKCLhIiwiXFwmYWFjdXRlOyIpO30KKyMKKyMgZW5kIG9mIHNhbXBsZSBsaW5lcyBieSBub24tYmxhbmsgaW4gZmlyc3QgY29sdW1uCisjCitzYW1wbGUgPT0gInllcyIgJiYgc3Vic3RyKCQwLDEsNCkgPT0gIiZsdDsiIHsgc2FtcGxlID0gIm5vIjsgZ3N1YigvXiZsdDsvLCAiICIpOyB9CitzYW1wbGUgPT0gInllcyIgJiYgc3Vic3RyKCQwLDEsMSkgIT0gIiAiICYmIHN1YnN0cigkMCwxLDEpICE9ICIJIiAmJiBsZW5ndGgoJDApID4gMCB7IHNhbXBsZSA9ICJubyIgfQorIworIyBzYW1wbGUgbGluZXMgcHJpbnRlZCBib2xkIHVubGVzcyBlbXB0eS4uLgorIworc2FtcGxlID09ICJ5ZXMiICYmICQwID09IiIgeyBwcmludCAiIjsgbmV4dDsgfQorc2FtcGxlID09ICJ5ZXMiICYmICQwICE9IiIgeyBwcmludCAiPEI+IiAkMCAiPC9CPiI7IG5leHQ7IH0KKyMKKyMgc3RhcnQgb2Ygc2FtcGxlIGxpbmVzIGluIG5leHQgbGluZQorIworJDAgPT0gIiZndDsiIHsgc2FtcGxlID0gInllcyI7IHByaW50ICIiOyBuZXh0OyB9CitzdWJzdHIoJDAsbGVuZ3RoKCQwKS00LDUpID09ICIgJmd0OyIgeyBzYW1wbGUgPSAieWVzIjsgZ3N1YigvICZndDskLywgIiIpOyB9CisjCisjIGhlYWRlciBsaW5lcyBwcmludGVkIGJvbGQsIGNvbG9yZWQKKyMKK3N1YnN0cigkMCxsZW5ndGgoJDApLDEpID09ICJ+IiB7IHByaW50ICI8Qj48Rk9OVCBDT0xPUj1cIlBVUlBMRVwiPiIgc3Vic3RyKCQwLDEsbGVuZ3RoKCQwKS0xKSAiPC9GT05UPjwvQj4iOyBuZXh0OyB9CisjCisjYWQgaG9jIGNvZGUKKyMKKy9eIlx8XCYgLyB7Z3N1YigvXHwvLCJcXCYjMTI0OyIpOyB9CisvID0gYiAvIHtnc3ViKC8gYiAvLCIgXFwmIzk4OyAiKTsgfQorIworIyBvbmUgbGV0dGVyIHRhZworIworL1sgCV1cKi5cKlsgCV0vIHtnc3ViKC9cKi8sIlpXV1oiKTsgfQorIworIyBpc29sYXRlZCAiKiIKKyMKKy9bIAldXCpbIAldLyB7Z3N1YigvIFwqIC8sIiBcXCYjNDI7ICIpOworCQkgICAgZ3N1YigvIFwqCS8sIiBcXCYjNDI7CSIpOworCQkgICAgZ3N1YigvCVwqIC8sIglcXCYjNDI7ICIpOworCQkgICAgZ3N1YigvCVwqCS8sIglcXCYjNDI7CSIpOyB9CisjCisjIHRhZyBzdGFydAorIworL1sgCV1cKlteIAldLwl7Z3N1YigvIFwqLywiIFpXV1oiKTtnc3ViKC8JXCovLCIJWldXWiIpO30KKy9eXCpbXiAJXS8gCSB7Z3N1YigvXlwqLywiWldXWiIpO30KKyMKKyMgdGFnIGVuZAorIworL1teIAldXCokLyAJIHtnc3ViKC9cKiQvLCJaV1daIik7fQorL1teIFwvCV1cKlsgCV0vICB7Z3N1YigvXCovLCJaV1daIik7fQorIworIyBpc29sYXRlZCAifCIKKyMKKy9bIAldXHxbIAldLyB7Z3N1YigvIFx8IC8sIiBcXCYjMTI0OyAiKTsKKwkJICAgIGdzdWIoLyBcfAkvLCIgXFwmIzEyNDsJIik7CisJCSAgICBnc3ViKC8JXHwgLywiCVxcJiMxMjQ7ICIpOworCQkgICAgZ3N1YigvCVx8CS8sIglcXCYjMTI0OwkiKTsgfQorLydcfCcvIHsgZ3N1YigvJ1x8Jy8sIidcXCYjMTI0OyciKTsgfQorL1xeVlx8LyB7Z3N1YigvXF5WXHwvLCJeVlxcJiMxMjQ7Iik7fQorLyBcXFx8CS8ge2dzdWIoL1x8LywiXFwmIzEyNDsiKTt9CisjCisjIG9uZSBsZXR0ZXIgcGlwZXMgYW5kICJ8fCIgZmFsc2UgcGlwZSAoZGlncmFwaHMpCisjCisvWyAJXVx8Llx8WyAJXS8gJiYgYXNjaWlhcnQgPT0gIm5vIiB7Z3N1YigvXHwvLCJZWFhZIik7IH0KKy9eXHwuXHxbIAldLyB7Z3N1YigvXHwvLCJZWFhZIik7IH0KKy9cfFx8LyB7Z3N1YigvXHxcfC8sIlxcJiMxMjQ7XFwmIzEyNDsiKTsgfQorL15zaGVsbHBpcGUvIHtnc3ViKC9cfC8sIlxcJiMxMjQ7Iik7IH0KKyMKKyMgcGlwZSBzdGFydAorIworL1sgCV1cfFteIAldLyAmJiBhc2NpaWFydCA9PSAibm8iCXtnc3ViKC8gXHwvLCIgWVhYWSIpOworCQkJZ3N1YigvCVx8LywiCVlYWFkiKTt9CisvXlx8W14gCV0vIAkge2dzdWIoL15cfC8sIllYWFkiKTt9CisjCisjIHBpcGUgZW5kCisjCisvW14gCV1cfCQvICYmIGFzY2lpYXJ0ID09ICJubyIge2dzdWIoL1x8JC8sIllYWFkiKTt9CisvW14gCV1cfFtzICwuKTsJXS8gJiYgYXNjaWlhcnQgPT0gIm5vIiB7Z3N1YigvXHwvLCJZWFhZIik7fQorL1teIAldXHxdLyAmJiBhc2NpaWFydCA9PSAibm8iIHtnc3ViKC9cfC8sIllYWFkiKTt9CisjCisjIHZhcmlvdXMKKyMKKy8nIi8gCXtnc3ViKC8nIi8sIlxcJiMzOTtcXCYjMzQ7JyIpO30KKy8iLwl7Z3N1YigvIi8sIlxcJnF1b3Q7Iik7fQorLyUvCXtnc3ViKC8lLywiXFwmIzM3OyIpO30KKworTlIgPT0gMSB7IG5mPXNwbGl0KEZJTEVOQU1FLGYsIi4iKQorCXByaW50ICI8SFRNTD4iOworCisJcHJpbnQgIjxIRUFEPiIKKwlpZiAoIEZJTEVOQU1FID09ICJtYnl0ZS50eHQiICkgeworCSAgICAjIG5lZWRzIHV0Zi04IGFzIHVzZXMgbWFueSBsYW5ndWFnZXMKKwkgICAgcHJpbnQgIjxNRVRBIEhUVFAtRVFVSVY9XCJDb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCI+IjsKKwl9IGVsc2UgeworCSAgICAjIGNvbW1vbiBjYXNlIC0gTGF0aW4xCisJICAgIHByaW50ICI8TUVUQSBIVFRQLUVRVUlWPVwiQ29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xXCI+IjsKKwl9CisJcHJpbnQgIjxUSVRMRT5WaW0gZG9jdW1lbnRhdGlvbjogIiBmWzFdICI8L1RJVExFPiI7CisJcHJpbnQgIjwvSEVBRD4iOworCisJcHJpbnQgIjxCT0RZIEJHQ09MT1I9XCIjZmZmZmZmXCI+IjsKKwlwcmludCAiPEgxPlZpbSBkb2N1bWVudGF0aW9uOiAiIGZbMV0gIjwvSDE+IjsKKwlwcmludCAiPEEgTkFNRT1cInRvcFwiPjwvQT4iOworCWlmICggRklMRU5BTUUgIT0gImhlbHAudHh0IiApIHsKKwkgIHByaW50ICI8QSBIUkVGPVwiaGVscC5odG1sXCI+bWFpbiBoZWxwIGZpbGU8L0E+XG4iOworCX0KKwlwcmludCAiPEhSPiI7CisJcHJpbnQgIjxQUkU+IjsKKwlmaWxlbmFtZT1mWzFdIi5odG1sIjsKK30KKworIyBzZXQgdG8gYSBsb3cgdmFsdWUgdG8gdGVzdCBmb3IgZmV3IGxpbmVzIG9mIHRleHQKKyMgTlIgPT0gOTk5OTkgeyBleGl0OyB9CisKKyMgaWdub3JlIHVuZGVybGluZXMgYW5kIHRhZ3MKK3N1YnN0cigkMCwxLDUpID09ICIgdmltOiIgeyBuZXh0OyB9CitzdWJzdHIoJDAsMSw0KSA9PSAidmltOiIgeyBuZXh0OyB9CisjIGtlZXAganVzdCB3aG9sZSBsaW5lcyBvZiAiLSIsICI9Igorc3Vic3RyKCQwLDEsMykgPT0gIj09PSIgJiYgc3Vic3RyKCQwLDc1LDEpICE9ICI9IiB7IG5leHQ7IH0KK3N1YnN0cigkMCwxLDMpID09ICItLS0iICYmIHN1YnN0cigkMCw3NSwxKSAhPSAiLSIgeyBuZXh0OyB9CisKK3sKKwluc3RhciA9IHNwbGl0KCQwLHMsIlpXV1oiKTsKKwlmb3IgKCBpPTIgOyBpIDw9IG5zdGFyIDsgaT1pKzIgKSB7CisJCW5ibGE9c3BsaXQoc1tpXSxibGF0YSwiWyAJXSIpOworCQlpZiAoIG5ibGEgPiAxICkgeworCQkJZ3N1YigiWldXWiIsIioiKTsKKwkJCW5zdGFyID0gc3BsaXQoJDAscywiWldXWiIpOworCQl9CisJfQorCW5waXBlID0gc3BsaXQoJDAscCwiWVhYWSIpOworCWZvciAoIGk9MiA7IGkgPD0gbnBpcGUgOyBpPWkrMiApIHsKKwkJbmJsYT1zcGxpdChwW2ldLGJsYXRhLCJbIAldIik7CisJCWlmICggbmJsYSA+IDEgKSB7CisJCQlnc3ViKCJZWFhZIiwifCIpOworCQkJbnRhYnMgPSBzcGxpdCgkMCxwLCJZWFhZIik7CisJCX0KKwl9Cit9CisKKworRklMRU5BTUUgPT0gImd1aS50eHQiICYmIGFzY2lpYXJ0ID09ICJubyIgIFwKKwkgICYmICQwIH4gL1wrLS0tLS8gJiYgJDAgfiAvLS0tLVwrLyB7CisJYXNjaWlhcnQ9ICJ5ZXMiOworCWFzY2lpY250PTA7CisJfQorCitGSUxFTkFNRSA9PSAicXVvdGVzLnR4dCIgJiYgYXNjaWlhcnQgPT0gIm5vIiBcCisJICAmJiAkMCB+IC9JbiBzdW1tYXJ5Oi8geworCWFzY2lpYXJ0PSAieWVzIjsKKwlhc2NpaWNudD0wOworCX0KKworRklMRU5BTUUgPT0gInVzcl8yMC50eHQiICYmIGFzY2lpYXJ0ID09ICJubyIgXAorCSAgJiYgJDAgfiAvYW4gZW1wdHkgbGluZSBhdCB0aGUgZW5kOi8geworCWFzY2lpYXJ0PSAieWVzIjsKKwlhc2NpaWNudD0wOworCX0KKworYXNjaWlhcnQgPT0gInllcyIgJiYgJDA9PSIiIHsgYXNjaWljbnQrKzsgfQorCithc2NpaWFydCA9PSAieWVzIiAmJiBhc2NpaWNudCA9PSAyIHsgYXNjaWlhcnQgPSAibm8iOyB9CisKK2FzY2lpYXJ0ID09ICJ5ZXMiIHsgbnBpcGUgPSAxOyB9CisjCXsgcHJpbnQgTlIgIiA8PT4gIiBhc2NpaWFydDsgfQorCisjCisjIGxpbmUgY29udGFpbnMgICIqIgorIworbnN0YXIgPiAyICYmIG5waXBlIDwgMyB7CisJcHJpbnRmKCJcbiIpOworCWZvciAoIGk9MTsgaSA8PSBuc3RhciA7IGk9aSsyICkgeworCQl0aGlzPXNbaV07CisJCXB1dF90aGlzKCk7CisJCWlpPWkrMTsKKwkJbmJsYSA9IHNwbGl0KHNbaWldLGJsYXRhLCIgIik7CisJCWlmICggaWkgPD0gbnN0YXIgKSB7CisJCQlpZiAoIG5ibGEgPT0gMSAmJiBzdWJzdHIoc1tpaV0sbGVuZ3RoKHNbaWldKSwxKSAhPSAiICIgKSB7CisJCQlwcmludGYoIio8QSBOQU1FPVwiJXNcIj48L0E+IixzW2lpXSk7CisJCQkJcHJpbnRmKCI8Qj4lczwvQj4qIixzW2lpXSk7CisJCQl9IGVsc2UgeworCQkJcHJpbnRmKCIqJXMqIixzW2lpXSk7CisJCQl9CisJCX0KKwl9CisJcHJpbnRmKCJcbiIpOworCW5leHQ7CisJfQorIworIyBsaW5lIGNvbnRhaW5zICJ8IgorIworbnBpcGUgPiAyICYmIG5zdGFyIDwgMyB7CisJaWYgICggbnBpcGUlMiA9PSAwICkgeworCQlmb3IgKCBpPTE7IGkgPCBucGlwZSA7IGkrKyApIHsKKwkJCWdzdWIoIlpXV1oiLCIqIixwW2ldKTsKKwkJCXByaW50ZigiJXN8IixwW2ldKTsKKwkJfQorCQlwcmludGYoIiVzXG4iLHBbbnBpcGVdKTsKKwkJbmV4dDsKKwkJfQorCWZvciAoIGk9MTsgaSA8PSBucGlwZSA7IGkrKyApCisJCXsKKwkJaWYgKCBpICUgMiA9PSAxICkgeworCQkJZ3N1YigiWldXWiIsIioiLHBbaV0pOworCQkJdGhpcz1wW2ldOworCQkJcHV0X3RoaXMoKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJbmZuPXNwbGl0KHBbaV0sZiwiLiIpOworCQkJaWYgKCBuZm4gPT0gMSB8fCBmWzJdID09ICIiIHx8IGZbMV0gPT0gIiIgfHwgbGVuZ3RoKGZbMl0pIDwgMyApIHsKKwkJCQlmaW5kX3RhZzEoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCXByaW50ZiAifDxBIEhSRUY9XCIiIGZbMV0gIi5odG1sXCI+IiBwW2ldICI8L0E+fCI7CisJCQkJfQorCQkJfQorCQl9CisJCXByaW50ZigiXG4iKTsKKwkJbmV4dDsKKwl9CisjCisjIGxpbmUgY29udGFpbnMgYm90aCAifCIgYW5kICIqIgorIworbnBpcGUgPiAyICYmIG5zdGFyID4gMiB7CisJcHJpbnRmKCJcbiIpOworCWZvciAoIGo9MTsgaiA8PSBuc3RhciA7IGo9aisyICkgeworCQlucGlwZSA9IHNwbGl0KHNbal0scCwiWVhYWSIpOworCQlpZiAoIG5waXBlID4gMSApIHsKKwkJCWZvciAoIG5wPTE7IG5wPD1ucGlwZTsgbnA9bnArMiApIHsKKwkJCQl0aGlzPXBbbnBdOworCQkJCXB1dF90aGlzKCk7CisJCQkJaT1ucCsxO2ZpbmRfdGFnMSgpOworCQkJfQorCQl9IGVsc2UgeworCQkJdGhpcz1zW2pdOworCQkJcHV0X3RoaXMoKTsKKwkJfQorCQlqaj1qKzE7CisJCW5ibGEgPSBzcGxpdChzW2pqXSxibGF0YSwiICIpOworCQlpZiAoIGpqIDw9IG5zdGFyICYmIG5ibGEgPT0gMSAmJiBzW2pqXSAhPSAiIiApIHsKKwkJcHJpbnRmKCIqPEEgTkFNRT1cIiVzXCI+PC9BPiIsc1tqal0pOworCQkJcHJpbnRmKCI8Qj4lczwvQj4qIixzW2pqXSk7CisJCX0gZWxzZSB7CisJCQlpZiAoIHNbampdICE9ICIiICkgeworCQkJcHJpbnRmKCIqJXMqIixzW2pqXSk7CisJCQl9CisJCX0KKwl9CisJcHJpbnRmKCJcbiIpOworCW5leHQ7CisJfQorIworIyBsaW5lIGNvbnRhaW5zIGUtbWFpbCBhZGRyZXNzIGpvaG4uZG9lQHNvbWUucGxhY2UuZWR1CisjCiskMCB+IC9ALyAmJiAkMCB+IC9bYS16QS1aMC05XUBbYS16XS8gXAorCXsKKwluZW1haWw9c3BsaXQoJDAsZW0sIiAiKTsKKwlpZiAoIHN1YnN0cigkMCwxLDEpID09ICIJIiApIHsgcHJpbnRmKCIJIik7IH0KKwlmb3IgKCBpPTE7IGkgPD0gbmVtYWlsOyBpKysgKSB7CisJCWlmICggZW1baV0gfiAvQC8gKSB7CisJCQlpZiAoIHN1YnN0cihlbVtpXSwyLDMpID09ICJsdDsiICYmIHN1YnN0cihlbVtpXSxsZW5ndGgoZW1baV0pLTIsMykgPT0gImd0OyIgKSB7CisJCQkJbWFpbGFkZHI9c3Vic3RyKGVtW2ldLDUsbGVuZ3RoKGVtW2ldKS04KTsKKwkJCQlwcmludGYoIjxBIEhSRUY9XCJtYWlsdG86JXNcIj4mbHQ7JXMmZ3Q7PC9BPiAiLG1haWxhZGRyLG1haWxhZGRyKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCBzdWJzdHIoZW1baV0sMiwzKSA9PSAibHQ7IiAmJiBzdWJzdHIoZW1baV0sbGVuZ3RoKGVtW2ldKS0zLDMpID09ICJndDsiICkgeworCQkJCQltYWlsYWRkcj1zdWJzdHIoZW1baV0sNSxsZW5ndGgoZW1baV0pLTkpOworCQkJCQlwcmludGYoIjxBIEhSRUY9XCJtYWlsdG86JXNcIj4mbHQ7JXMmZ3Q7PC9BPiVzICIsbWFpbGFkZHIsbWFpbGFkZHIsc3Vic3RyKGVtW2ldLGxlbmd0aChlbVtpXSksMSkpOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ZigiPEEgSFJFRj1cIm1haWx0bzolc1wiPiVzPC9BPiAiLGVtW2ldLGVtW2ldKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCIlcyAiLGVtW2ldKTsKKwkJfQorCX0KKwkjcHJpbnQgIioqKiAiIE5SICIgIiBGSUxFTkFNRSAiIC0gcG9zc2libGUgbWFpbCByZWYiOworCXByaW50ZigiXG4iKTsKKwluZXh0OworCX0KKyMKKyMgbGluZSBjb250YWlucyBodHRwIC8gZnRwIHJlZmVyZW5jZQorIworJDAgfiAvaHR0cDpcL1wvLyB8fCAkMCB+IC9mdHA6XC9cLy8geworCWdzdWIoIlVSTDoiLCIiKTsKKwlnc3ViKCImbHQ7IiwiIik7CisJZ3N1YigiJmd0OyIsIiIpOworCWdzdWIoIlxcKCIsIiIpOworCWdzdWIoIlxcKSIsIiIpOworCW5lbWFpbD1zcGxpdCgkMCxlbSwiICIpOworCWZvciAoIGk9MTsgaSA8PSBuZW1haWw7IGkrKyApIHsKKwkJaWYgKCBzdWJzdHIoZW1baV0sMSw1KSA9PSAiaHR0cDoiIHx8CisJICAgICAJc3Vic3RyKGVtW2ldLDEsNCkgPT0gImZ0cDoiICkgeworCQkJaWYgKCBzdWJzdHIoZW1baV0sbGVuZ3RoKGVtW2ldKSwxKSAhPSAiLiIgKSB7CisJCQkJcHJpbnRmKCIJPEEgSFJFRj1cIiVzXCI+JXM8L0E+IixlbVtpXSxlbVtpXSk7CisJCQl9IGVsc2UgeworCQkJCWVtW2ldPXN1YnN0cihlbVtpXSwxLGxlbmd0aChlbVtpXSktMSk7CisJCQkJcHJpbnRmKCIJPEEgSFJFRj1cIiVzXCI+JXM8L0E+LiIsZW1baV0sZW1baV0pOworCQkJfQorCQl9IGVsc2UgeworCQlwcmludGYoIiAlcyIsZW1baV0pOworCQl9CisJfQorCSNwcmludCAiKioqICIgTlIgIiAiIEZJTEVOQU1FICIgLSBwb3NzaWJsZSBodHRwIHJlZiI7CisJcHJpbnRmKCJcbiIpOworCW5leHQ7CisJfQorIworIyBzb21lIGxpbmVzIGNvbnRhaW5zIGp1c3Qgb25lICJhbG1vc3QgcmVndWxhciIgIioiLi4uCisjCituc3RhciA9PSAyICB7CisJdGhpcz1zWzFdOworCXB1dF90aGlzKCk7CisJcHJpbnRmKCIqIik7CisJdGhpcz1zWzJdOworCXB1dF90aGlzKCk7CisJcHJpbnRmKCJcbiIpOworCW5leHQ7CisJfQorIworIyByZWd1bGFyIGxpbmUKKyMKKwl7IG50YWJzID0gc3BsaXQoJDAsdGIsIgkiKTsKKwlmb3IgKCBpPTE7IGkgPCBudGFicyA7IGkrKykgeworCQl0aGlzPXRiW2ldOworCQlwdXRfdGhpcygpOworCQlwcmludGYoIgkiKTsKKwkJfQorCXRoaXM9dGJbbnRhYnNdOworCXB1dF90aGlzKCk7CisJcHJpbnRmKCJcbiIpOworCX0KKworCithc2NpaWFydCA9PSAieWVzIiAgJiYgJDAgfiAvXCstXCstLS8gIFwKKwkmJiAkMCB+ICJzY3JvbGxiYXIiIHsgYXNjaWlhcnQgPSAibm8iOyB9CisKK0VORCB7CisJdG9wYmFjaygpOworCXByaW50ICI8L1BSRT5cbjwvQk9EWT5cblxuXG48L0hUTUw+IjsgfQorCisjCisjIGFzIG1haW4gd2Uga2VlcCBpbmRleC50eHQgKGJ5IGRlZmF1bHQpCisjIG90aGVyIGNhbmRpZGF0ZSwgaGVscC50eHQKKyMKK2Z1bmN0aW9uIHRvcGJhY2sgKCkgeworCWlmICggRklMRU5BTUUgIT0gInRhZ3MiICkgeworCWlmICggRklMRU5BTUUgIT0gImhlbHAudHh0IiApIHsKKwlwcmludGYoIjxBIEhSRUY9XCIjdG9wXCI+dG9wPC9BPiAtICIpOworCXByaW50ZigiPEEgSFJFRj1cImhlbHAuaHRtbFwiPm1haW4gaGVscCBmaWxlPC9BPlxuIik7CisJfSBlbHNlIHsKKwlwcmludGYoIjxBIEhSRUY9XCIjdG9wXCI+dG9wPC9BPlxuIik7CisJfQorCX0KK30KKworZnVuY3Rpb24gZmluZF90YWcxKCkgeworCWlmICggcFtpXSA9PSAiIiApIHsgcmV0dXJuOyB9CisJaWYgKCB0YWdrZXlbcFtpXV0gPT0gInllcyIgKSB7CisJCXdoaWNoPXRhZ3JlZltwW2ldXTsKKwkJcHV0X2hyZWYoKTsKKwkJcmV0dXJuOworCX0KKwkjIGlmIG5vdCBmb3VuZCwgdGhlbiB3ZSBoYXZlIGEgcHJvYmxlbQorCXByaW50ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgID4+ImVycm9ycy5sb2ciOworCXByaW50IEZJTEVOQU1FICIsIGxpbmUgIiBOUiAiLCBwb2ludGVyOiA+PiIgcFtpXSAiPDwiID4+ImVycm9ycy5sb2ciOworCXByaW50ICQwID4+ImVycm9ycy5sb2ciOworCXdoaWNoPSJpbnRyby5odG1sIjsKKwlwdXRfaHJlZigpOworfQorCitmdW5jdGlvbiBzZWVfdGFnKCkgeworIyBhZC1ob2MgY29kZToKK2lmICggYXRhZyA9PSAiXCItLSIgfHwgYXRhZyA9PSAiLS1cIiIgKSB7IHJldHVybjsgfQoraWZfYWxyZWFkeSgpOworaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCXByaW50ZigiJXMiLGF3b3JkKTsKKwlyZXR1cm47CisJfQorYWxsb3dfb25lX2NoYXI9Im5vIjsKK2ZpbmRfdGFnMigpOworaWYgKCBkb25lID09ICJ5ZXMiICkgeyByZXR1cm47IH0KK3JpZ2h0Y2hhcj1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyksMSk7CitpZiAoICAgIHJpZ2h0Y2hhciA9PSAiLiIgXAorICAgICB8fCByaWdodGNoYXIgPT0gIiwiIFwKKyAgICAgfHwgcmlnaHRjaGFyID09ICI6IiBcCisgICAgIHx8IHJpZ2h0Y2hhciA9PSAiOyIgXAorICAgICB8fCByaWdodGNoYXIgPT0gIiEiIFwKKyAgICAgfHwgcmlnaHRjaGFyID09ICI/IiBcCisgICAgIHx8IHJpZ2h0Y2hhciA9PSAiKSIgKSB7CisJYXRhZz1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKS0xKTsKKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiVzIixhd29yZCk7CisJCXJldHVybjsKKwl9CisJZmluZF90YWcyKCk7CisJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixyaWdodGNoYXIpO3JldHVybjsgfQorCWxlZnRjaGFyPXN1YnN0cihhdGFnLDEsMSk7CisJbGFzdGJ1dDE9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLDEpOworCWlmICggICAgbGVmdGNoYXIgPT0gIiciICYmIGxhc3RidXQxID09ICInIiAgKSB7CisJCWFsbG93X29uZV9jaGFyPSJ5ZXMiOworCQlhdGFnPXN1YnN0cihhdGFnLDIsbGVuZ3RoKGF0YWcpLTIpOworCQlpZl9hbHJlYWR5KCk7CisJCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKKwkJCXByaW50ZigiJXMiLGF3b3JkKTsKKwkJCXJldHVybjsKKwkJfQorCQlwcmludGYoIiVzIixsZWZ0Y2hhcik7CisJCWF3b3JkPXN1YnN0cihhdGFnLDEsbGVuZ3RoKGF0YWcpKSIibGFzdGJ1dDEiInJpZ2h0Y2hhcjsKKwkJZmluZF90YWcyKCk7CisJCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyVzIixsYXN0YnV0MSxyaWdodGNoYXIpO3JldHVybjsgfQorCQl9CisJfQorYXRhZz1hd29yZDsKK2xlZnRjaGFyPXN1YnN0cihhdGFnLDEsMSk7CitpZiAoICAgIGxlZnRjaGFyID09ICInIiAmJiByaWdodGNoYXIgPT0gIiciICApIHsKKwlhbGxvd19vbmVfY2hhcj0ieWVzIjsKKwlhdGFnPXN1YnN0cihhdGFnLDIsbGVuZ3RoKGF0YWcpLTIpOworCWlmICAoIGF0YWcgPT0gIjwiICkgeyBwcmludGYoIiB8JXN8JXN8ICIsYXRhZyxwWzJdKTsgfQorCWlmX2FscmVhZHkoKTsKKwlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CisJCXByaW50ZigiJXMiLGF3b3JkKTsKKwkJcmV0dXJuOworCQl9CisJcHJpbnRmKCIlcyIsbGVmdGNoYXIpOworCWZpbmRfdGFnMigpOworCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIscmlnaHRjaGFyKTtyZXR1cm47IH0KKwlwcmludGYoIiVzJXMiLGF0YWcscmlnaHRjaGFyKTsKKwlyZXR1cm47CisJfQorbGFzdDI9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLTEsMik7CitmaXJzdDI9c3Vic3RyKGF0YWcsMSwyKTsKK2lmICggICAgZmlyc3QyID09ICIoJyIgJiYgbGFzdDIgPT0gIicpIiAgKSB7CisJYWxsb3dfb25lX2NoYXI9InllcyI7CisJYXRhZz1zdWJzdHIoYXRhZywzLGxlbmd0aChhdGFnKS00KTsKKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiVzIixhd29yZCk7CisJCXJldHVybjsKKwkJfQorCXByaW50ZigiJXMiLGZpcnN0Mik7CisJZmluZF90YWcyKCk7CisJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzIixsYXN0Mik7cmV0dXJuOyB9CisJcHJpbnRmKCIlcyVzIixhdGFnLGxhc3QyKTsKKwlyZXR1cm47CisJfQoraWYgKCBsYXN0MiA9PSAiLikiICkgeworCWF0YWc9c3Vic3RyKGF0YWcsMSxsZW5ndGgoYXRhZyktMik7CisJaWZfYWxyZWFkeSgpOworCWlmICggYWxyZWFkeSA9PSAieWVzIiApIHsKKwkJcHJpbnRmKCIlcyIsYXdvcmQpOworCQlyZXR1cm47CisJCX0KKwlmaW5kX3RhZzIoKTsKKwlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3QyKTtyZXR1cm47IH0KKwlwcmludGYoIiVzJXMiLGF0YWcsbGFzdDIpOworCXJldHVybjsKKwl9CitpZiAoIGxhc3QyID09ICIpLiIgKSB7CisJYXRhZz1zdWJzdHIoYXRhZywxLGxlbmd0aChhdGFnKS0yKTsKKwlmaW5kX3RhZzIoKTsKKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiVzIixhd29yZCk7CisJCXJldHVybjsKKwkJfQorCWlmICggZG9uZSA9PSAieWVzIiApIHsgcHJpbnRmKCIlcyIsbGFzdDIpO3JldHVybjsgfQorCXByaW50ZigiJXMlcyIsYXRhZyxsYXN0Mik7CisJcmV0dXJuOworCX0KK2ZpcnN0Nj1zdWJzdHIoYXRhZywxLDYpOworbGFzdDY9c3Vic3RyKGF0YWcsbGVuZ3RoKGF0YWcpLTUsNik7CitpZiAoIGxhc3Q2ID09IGF0YWcgKSB7CisJcHJpbnRmKCIlcyIsYXdvcmQpOworCXJldHVybjsKKwl9CitsYXN0Nm9mNz1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktNiw2KTsKK2lmICggZmlyc3Q2ID09ICImcXVvdDsiICYmIGxhc3Q2b2Y3ID09ICImcXVvdDsiICYmIGxlbmd0aChhdGFnKSA+IDEyICkgeworCWFsbG93X29uZV9jaGFyPSJ5ZXMiOworCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktMTMpOworCWlmX2FscmVhZHkoKTsKKwlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CisJCXByaW50ZigiJXMiLGF3b3JkKTsKKwkJcmV0dXJuOworCQl9CisJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKKwlmaW5kX3RhZzIoKTsKKwlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLHJpZ2h0Y2hhcik7IHJldHVybjsgfQorCXByaW50ZigiJXMmcXVvdDslcyIsYXRhZyxyaWdodGNoYXIpOworCXJldHVybjsKKwl9CitpZiAoIGZpcnN0NiA9PSAiJnF1b3Q7IiAmJiBsYXN0NiAhPSAiJnF1b3Q7IiApIHsKKwlhbGxvd19vbmVfY2hhcj0ieWVzIjsKKwlhdGFnPXN1YnN0cihhdGFnLDcsbGVuZ3RoKGF0YWcpLTYpOworCWlmICggYXRhZyA9PSAiWyIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KKwlpZiAoIGF0YWcgPT0gIi4iICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CisJaWYgKCBhdGFnID09ICI6IiApIHsgcHJpbnRmKCImcXVvdDslcyIsYXRhZyk7IHJldHVybjsgfQorCWlmICggYXRhZyA9PSAiYSIgKSB7IHByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOyByZXR1cm47IH0KKwlpZiAoIGF0YWcgPT0gIkEiICkgeyBwcmludGYoIiZxdW90OyVzIixhdGFnKTsgcmV0dXJuOyB9CisJaWYgKCBhdGFnID09ICJnIiApIHsgcHJpbnRmKCImcXVvdDslcyIsYXRhZyk7IHJldHVybjsgfQorCWlmX2FscmVhZHkoKTsKKwlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CisJCXByaW50ZigiJnF1b3Q7JXMiLGF0YWcpOworCQlyZXR1cm47CisJCX0KKwlwcmludGYoIiVzIixmaXJzdDYpOworCWZpbmRfdGFnMigpOworCWlmICggZG9uZSA9PSAieWVzIiApIHsgcmV0dXJuOyB9CisJcHJpbnRmKCIlcyIsYXRhZyk7CisJcmV0dXJuOworCX0KK2lmICggbGFzdDYgPT0gIiZxdW90OyIgJiYgZmlyc3Q2ID09ICImcXVvdDsiICkgeworCWFsbG93X29uZV9jaGFyPSJ5ZXMiOworCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktMTIpOworCWlmX2FscmVhZHkoKTsKKwlpZiAoIGFscmVhZHkgPT0gInllcyIgKSB7CisJCXByaW50ZigiJXMiLGF3b3JkKTsKKwkJcmV0dXJuOworCQl9CisJcHJpbnRmKCIlcyIsZmlyc3Q2KTsKKwlmaW5kX3RhZzIoKTsKKwlpZiAoIGRvbmUgPT0gInllcyIgKSB7IHByaW50ZigiJXMiLGxhc3Q2KTtyZXR1cm47IH0KKwlwcmludGYoIiVzJXMiLGF0YWcsbGFzdDYpOworCXJldHVybjsKKwl9CitsYXN0Nm9mNz1zdWJzdHIoYXRhZyxsZW5ndGgoYXRhZyktNiw2KTsKK2lmICggbGFzdDZvZjcgPT0gIiZxdW90OyIgJiYgZmlyc3Q2ID09ICImcXVvdDsiICkgeworCWFsbG93X29uZV9jaGFyPSJ5ZXMiOworCWF0YWc9c3Vic3RyKGF0YWcsNyxsZW5ndGgoYXRhZyktMTMpOworCSNwcmludGYoIlxuYXRhZz0lcyxhd29yZD0lc1xuIixhdGFnLGF3b3JkKTsKKwlpZl9hbHJlYWR5KCk7CisJaWYgKCBhbHJlYWR5ID09ICJ5ZXMiICkgeworCQlwcmludGYoIiVzIixhd29yZCk7CisJCXJldHVybjsKKwkJfQorCXByaW50ZigiJXMiLGZpcnN0Nik7CisJZmluZF90YWcyKCk7CisJaWYgKCBkb25lID09ICJ5ZXMiICkgeyBwcmludGYoIiVzJXMiLGxhc3Q2b2Y3LHJpZ2h0Y2hhcik7cmV0dXJuOyB9CisJcHJpbnRmKCIlcyVzJXMiLGF0YWcsbGFzdDZvZjcscmlnaHRjaGFyKTsKKwlyZXR1cm47CisJfQorcHJpbnRmKCIlcyIsYXdvcmQpOworfQorCitmdW5jdGlvbiBmaW5kX3RhZzIoKSB7CisJZG9uZT0ibm8iOworCSMgbm8gYmxhbmtzIHByZXNlbnQgaW4gYSB0YWcuLi4KKwludGFncz1zcGxpdChhdGFnLGJsYXRhLCJbIAldIik7CisJaWYgKCBudGFncyA+IDEgKSB7IHJldHVybjsgfQorCWlmIAkoICggYWxsb3dfb25lX2NoYXIgPT0gIm5vIiApICYmIFwKKwkJICAoIGluZGV4KCIhIyQlXCYnKCkrLC0uLzA6Oz0/QEFDSU5YXFxbXFxdXl9gYXRcXHtcXH1+IixhdGFnKSAhPTAgKSApIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoIHNraXBfd29yZFthdGFnXSA9PSAieWVzIiApIHsgcmV0dXJuOyB9CisJaWYgKCB3YXNzZXQgPT0gInllcyIgJiYgbGluZXNldCA9PSBOUiApIHsKKwl3YXNzZXQ9Im5vIjsKKwlzZWVfb3B0KCk7CisJaWYgKCBkb25lX29wdCA9PSAieWVzIiApIHtyZXR1cm47fQorCX0KKwlpZiAoIHdhc3NldCA9PSAieWVzIiAmJiBsaW5lc2V0ICE9IE5SICkgeworCXdhc3NldD0ibm8iOworCX0KKwlpZiAoIGF0YWcgPT0gIjpzZXQiICkgeworCXdhc3NldD0ieWVzIjsKKwlsaW5lc2V0PU5SOworCX0KKwlpZiAoIHRhZ2tleVthdGFnXSA9PSAieWVzIiApIHsKKwkJd2hpY2g9dGFncmVmW2F0YWddOworCQlwdXRfaHJlZjIoKTsKKwkJZG9uZT0ieWVzIjsKKwl9Cit9CisKK2Z1bmN0aW9uIGZpbmRfdGFnMygpIHsKKwlkb25lPSJubyI7CisJIyBubyBibGFua3MgcHJlc2VudCBpbiBhIHRhZy4uLgorCW50YWdzPXNwbGl0KGJ0YWcsYmxhdGEsIlsgCV0iKTsKKwlpZiAoIG50YWdzID4gMSApIHsgcmV0dXJuOyB9CisJaWYgCSggKCBhbGxvd19vbmVfY2hhciA9PSAibm8iICkgJiYgXAorCQkgICggaW5kZXgoIiEjJCVcJicoKSssLS4vMDo7PT9AQUNJTlhcXFtcXF1eX2BhdFxce1xcfX4iLGJ0YWcpICE9MCApICkgeworCSAgCXJldHVybjsKKwl9CisJaWYgKCBza2lwX3dvcmRbYnRhZ10gPT0gInllcyIgKSB7IHJldHVybjsgfQorCWlmICggdGFna2V5W2J0YWddID09ICJ5ZXMiICkgeworCQl3aGljaD10YWdyZWZbYnRhZ107CisJCXB1dF9ocmVmMygpOworCQlkb25lPSJ5ZXMiOworCX0KK30KKworZnVuY3Rpb24gcHV0X2hyZWYoKSB7CisJaWYgKCBwW2ldID09ICIiICkgeyByZXR1cm47IH0KKwlpZiAoIHdoaWNoID09IEZJTEVOQU1FICkgeworCQlwcmludGYoInw8QSBIUkVGPVwiIyVzXCI+JXM8L0E+fCIscFtpXSxwW2ldKTsKKwkJfQorCQllbHNlIHsKKwkJbno9c3BsaXQod2hpY2gsenosIi4iKTsKKwkJaWYgKCB6elsyXSA9PSAidHh0IiB8fCB6elsxXSA9PSAidGFncyIgKSB7CisJCXByaW50ZigifDxBIEhSRUY9XCIlcy5odG1sIyVzXCI+JXM8L0E+fCIsenpbMV0scFtpXSxwW2ldKTsKKwkJfQorCQllbHNlIHsKKwkJcHJpbnRmKCJ8PEEgSFJFRj1cImludHJvLmh0bWwjJXNcIj4lczwvQT58IixwW2ldLHBbaV0pOworCQl9CisJfQorfQorCitmdW5jdGlvbiBwdXRfaHJlZjIoKSB7CisJaWYgKCBhdGFnID09ICIiICkgeyByZXR1cm47IH0KKwlpZiAoIHdoaWNoID09IEZJTEVOQU1FICkgeworCQlwcmludGYoIjxBIEhSRUY9XCIjJXNcIj4lczwvQT4iLGF0YWcsYXRhZyk7CisJCX0KKwkJZWxzZSB7CisJCW56PXNwbGl0KHdoaWNoLHp6LCIuIik7CisJCWlmICggenpbMl0gPT0gInR4dCIgfHwgenpbMV0gPT0gInRhZ3MiICkgeworCQlwcmludGYoIjxBIEhSRUY9XCIlcy5odG1sIyVzXCI+JXM8L0E+Iix6elsxXSxhdGFnLGF0YWcpOworCQl9CisJCWVsc2UgeworCQlwcmludGYoIjxBIEhSRUY9XCJpbnRyby5odG1sIyVzXCI+JXM8L0E+IixhdGFnLGF0YWcpOworCQl9CisJfQorfQorCitmdW5jdGlvbiBwdXRfaHJlZjMoKSB7CisJaWYgKCBidGFnID09ICIiICkgeyByZXR1cm47IH0KKwlpZiAoIHdoaWNoID09IEZJTEVOQU1FICkgeworCQlwcmludGYoIjxBIEhSRUY9XCIjJXNcIj4lczwvQT4iLGJ0YWcsYnRhZzIpOworCQl9CisJCWVsc2UgeworCQluej1zcGxpdCh3aGljaCx6eiwiLiIpOworCQlpZiAoIHp6WzJdID09ICJ0eHQiIHx8IHp6WzFdID09ICJ0YWdzIiApIHsKKwkJcHJpbnRmKCI8QSBIUkVGPVwiJXMuaHRtbCMlc1wiPiVzPC9BPiIsenpbMV0sYnRhZyxidGFnMik7CisJCX0KKwkJZWxzZSB7CisJCXByaW50ZigiPEEgSFJFRj1cImludHJvLmh0bWwjJXNcIj4lczwvQT4iLGJ0YWcsYnRhZzIpOworCQl9CisJfQorfQorCitmdW5jdGlvbiBwdXRfdGhpcygpIHsKKwludGFiPXNwbGl0KHRoaXMsdGEsIgkiKTsKKwlmb3IgKCBudGE9MSA7IG50YSA8PSBudGFiIDsgbnRhKysgKSB7CisJCWF0YT10YVtudGFdOworCQlsYXRhPWxlbmd0aChhdGEpOworCQlhd29yZD0iIjsKKwkJZm9yICggaWF0YT0xIDsgaWF0YSA8PWxhdGEgOyBpYXRhKysgKSB7CisJCQlhY2hhcj1zdWJzdHIoYXRhLGlhdGEsMSk7CisJCQlpZiAoIGFjaGFyICE9ICIgIiApIHsgYXdvcmQ9YXdvcmQiImFjaGFyOyB9CisJCQllbHNlIHsKKwkJCQlpZiAoIGF3b3JkICE9ICIiICkgeyBhdGFnPWF3b3JkOworCQkJCQlzZWVfdGFnKCk7CisJCQkJCWF3b3JkPSIiOworCQkJCQlwcmludGYoIiAiKTsgfQorCQkJCWVsc2UJeworCQkJCQlwcmludGYoIiAiKTsKKwkJCQkJfQorCQkJfQorCQl9CisJCWlmICggYXdvcmQgIT0gIiIgKSB7IGF0YWc9YXdvcmQ7CisJCQkJCXNlZV90YWcoKTsKKwkJCQkJfQorCQlpZiAoIG50YSAhPSBudGFiICkgeyBwcmludGYoIgkiKTsgfQorCX0KK30KKworZnVuY3Rpb24gaWZfYWxyZWFkeSgpIHsKKwlhbHJlYWR5PSJubyI7CisJaWYgICggbnBpcGUgPCAyICkgeyByZXR1cm47IH0KKwlpZiAgKCBhdGFnID09ICI6YXUiICYmIHBbMl0gPT0gIjphdXRvY21kIiApIHsgYWxyZWFkeT0ieWVzIjtyZXR1cm47IH0KKwlmb3IgKCBucHA9MiA7IG5wcCA8PSBucGlwZSA7IG5wcD1ucHArMiApIHsKKwkJaWYgCSggICggIChpbmRleChwW25wcF0sYXRhZykpICE9IDAgXAorCQkJICAgICAgJiYgbGVuZ3RoKHBbbnBwXSkgPiBsZW5ndGgoYXRhZykgXAorCQkJICAgICAgJiYgbGVuZ3RoKGF0YWcpID49IDEgIFwKKwkJCSAgICApIFwKKwkJCSAgICB8fCAocFtucHBdID09IGF0YWcpIFwKKwkJCSkgeworCQkjIHByaW50ZigicD18JXN8LHRhZz18JXN8ICIscFtucHBdLGF0YWcpOworCQlhbHJlYWR5PSJ5ZXMiOyByZXR1cm47IH0KKwl9Cit9CisKK2Z1bmN0aW9uIHNlZV9vcHQoKSB7CisJZG9uZV9vcHQ9Im5vIjsKKwlzdGFnPWF0YWc7CisJbmZpZWxkcyA9IHNwbGl0KGF0YWcsdGFlLCI9Iik7CisJaWYgKCBuZmllbGRzID4gMSApICB7CisJCWJ0YWc9IicidGFlWzFdIiciOworCQlidGFnMj10YWVbMV07CisJICAgIGZpbmRfdGFnMygpOworCQlpZiAoZG9uZSA9PSAieWVzIikgeworCQkJZm9yICggbnRhZT0yIDsgbnRhZSA8PSBuZmllbGRzIDsgbnRhZSsrICkgeworCQkJCXByaW50ZigiPSVzIix0YWVbbnRhZV0pOworCQkJfQorCQkJYXRhZz1zdGFnOworCQkJZG9uZV9vcHQ9InllcyI7CisJCQlyZXR1cm47CisJCX0KKwkJYnRhZz10YWVbMV07CisJCWJ0YWcyPXRhZVsxXTsKKwkgICAgZmluZF90YWczKCk7CisJCWlmICggZG9uZT09InllcyIgKSB7CisJCQlmb3IgKCBudGFlPTIgOyBudGFlIDw9IG5maWVsZHMgOyBudGFlKysgKSB7CisJCQkJcHJpbnRmKCI9JXMiLHRhZVtudGFlXSk7CisJCQl9CisJCQlhdGFnPXN0YWc7CisJCQlkb25lX29wdD0ieWVzIjsKKwkJCXJldHVybjsKKwkJfQorCX0KKwluZmllbGRzID0gc3BsaXQoYXRhZyx0YWUsIiZxdW90OyIpOworCWlmICggbmZpZWxkcyA+IDEgKSAgeworCQlidGFnPSInInRhZVsxXSInIjsKKwkJYnRhZzI9dGFlWzFdOworCSAgIAlmaW5kX3RhZzMoKTsKKwkJaWYgKGRvbmUgPT0gInllcyIpIHsKKwkJCXByaW50ZigiJnF1b3Q7Iik7CisJCQlhdGFnPXN0YWc7CisJCQlkb25lX29wdD0ieWVzIjsKKwkJCXJldHVybjsKKwkJfQorCQlidGFnPXRhZVsxXTsKKwkJYnRhZzI9dGFlWzFdOworCSAgICBmaW5kX3RhZzMoKTsKKwkJaWYgKGRvbmUgPT0gInllcyIpIHsKKwkJCXByaW50ZigiJnF1b3Q7Iik7CisJCQlhdGFnPXN0YWc7CisJCQlkb25lX29wdD0ieWVzIjsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlidGFnPSInInRhZVsxXSInIjsKKwlidGFnMj10YWVbMV07CisJZmluZF90YWczKCk7CisJaWYgKGRvbmUgPT0gInllcyIpIHsKKwkJYXRhZz1zdGFnOworCQlkb25lX29wdD0ieWVzIjsKKwkJcmV0dXJuOworCX0KKwlidGFnPXRhZVsxXTsKKwlidGFnMj10YWVbMV07CisJZmluZF90YWczKCk7CisJaWYgKGRvbmUgPT0gInllcyIpIHsKKwkJYXRhZz1zdGFnOworCQlkb25lX29wdD0ieWVzIjsKKwkJcmV0dXJuOworCX0KKwlhdGFnPXN0YWc7Cit9CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9tYWtldGFncy5hd2sgYi9ydW50aW1lL2RvYy9tYWtldGFncy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiMmNkOQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL21ha2V0YWdzLmF3awpAQCAtMCwwICsxLDQyIEBACitCRUdJTiAgIHsgRlM9IgkiOyB9CisKK05SID09IDEgeyBuZj1zcGxpdChGSUxFTkFNRSxmLCIuIikKKwlwcmludCAiPEhUTUw+IjsKKwlwcmludCAiPEhFQUQ+PFRJVExFPiIgZlsxXSAiPC9USVRMRT48L0hFQUQ+IjsKKwlwcmludCAiPEJPRFkgQkdDT0xPUj1cIiNmZmZmZmZcIj4iOworCXByaW50ICI8SDE+VmltIERvY3VtZW50YXRpb246ICIgZlsxXSAiPC9IMT4iOworCXByaW50ICI8QSBOQU1FPVwidG9wXCI+PC9BPiI7CisJcHJpbnQgIjxIUj4iOworCXByaW50ICI8UFJFPiI7Cit9CisKK3sKKwkjCisJIyBwcm90ZWN0IHNwZWNpYWwgY2hhcnMKKwkjCisJZ3N1YigvJi8sIlxcJmFtcDsiKTsKKwlnc3ViKC8+LywiXFwmZ3Q7Iik7CisJZ3N1YigvPC8sIlxcJmx0OyIpOworCWdzdWIoLyIvLCJcXCZxdW90OyIpOworCWdzdWIoLyUvLCJcXCYjMzc7Iik7CisKKwluZj1zcGxpdCgkMCx0YWcsIgkiKTsKKwl0YWdrZXlbdF09dGFnWzFdO3RhZ3JlZlt0XT10YWdbMl07dGFnbnVtW3RdPU5SOworCXByaW50ICQxICIJIiAkMiAiCWxpbmUgIiBOUiA+InRhZ3MucmVmIgorCW49c3BsaXQoJDIsdywiLiIpOworCXByaW50ZiAoInw8QSBIUkVGPVwiJXMuaHRtbCMlc1wiPiVzPC9BPnwJJXNcbiIsd1sxXSwkMSwkMSwkMik7Cit9CisKK0VORCAgICAgeworCXRvcGJhY2soKTsKKwlwcmludCAiPC9QUkU+XG48L0JPRFk+XG5cblxuPC9IVE1MPiI7CisJfQorCisjCisjIGFzIG1haW4gd2Uga2VlcCBpbmRleC50eHQgKGJ5IGRlZmF1bHQpCisjIG90aGVyIGNhbmRpZGF0ZSwgaGVscC50eHQKKyMKK2Z1bmN0aW9uIHRvcGJhY2sgKCkgeworCXByaW50ZigiPEEgSFJFRj1cIiN0b3BcIj50b3A8L0E+IC0gIik7CisJcHJpbnRmKCI8QSBIUkVGPVwiaGVscC5odG1sXCI+YmFjayB0byBoZWxwPC9BPlxuIik7Cit9CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9tYXAudHh0IGIvcnVudGltZS9kb2MvbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA1ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvbWFwLnR4dApAQCAtMCwwICsxLDEwOTQgQEAKKyptYXAudHh0KiAgICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMjEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitLZXkgbWFwcGluZywgYWJicmV2aWF0aW9ucyBhbmQgdXNlci1kZWZpbmVkIGNvbW1hbmRzLgorCitUaGlzIHN1YmplY3QgaXMgaW50cm9kdWNlZCBpbiBzZWN0aW9ucyB8MDUuM3wsIHwyNC43fCBhbmQgfDQwLjF8IG9mIHRoZSB1c2VyCittYW51YWwuCisKKzEuIEtleSBtYXBwaW5nCQkJfGtleS1tYXBwaW5nfAorMi4gQWJicmV2aWF0aW9ucwkJfGFiYnJldmlhdGlvbnN8CiszLiBMb2NhbCBtYXBwaW5ncyBhbmQgZnVuY3Rpb25zCXxzY3JpcHQtbG9jYWx8Cis0LiBVc2VyLWRlZmluZWQgY29tbWFuZHMJfHVzZXItY29tbWFuZHN8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gS2V5IG1hcHBpbmcJCQkJKmtleS1tYXBwaW5nKiAqbWFwcGluZyogKm1hY3JvKgorCitLZXkgbWFwcGluZyBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0eXBlZCBrZXlzLiAgVGhlIG1vc3QgY29tbW9uIHVzZQoraXMgdG8gZGVmaW5lIGEgc2VxdWVuY2UgY29tbWFuZHMgZm9yIGEgZnVuY3Rpb24ga2V5LiAgRXhhbXBsZTogPgorCisJOm1hcCA8RjI+IGE8Qy1SPj1zdHJmdGltZSgiJWMiKTxDUj48RXNjPgorCitUaGlzIGFwcGVuZHMgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBhZnRlciB0aGUgY3Vyc29yLiAoaW4gPD4gbm90YXRpb24gfDw+fCkKKworVGhlcmUgYXJlIGNvbW1hbmRzIHRvIGVudGVyIG5ldyBtYXBwaW5ncywgcmVtb3ZlIG1hcHBpbmdzIGFuZCBsaXN0IG1hcHBpbmdzLgorU2VlIHxtYXAtb3ZlcnZpZXd8IGZvciB0aGUgdmFyaW91cyBmb3JtcyBvZiAibWFwIiBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB3aXRoCittb2Rlcy4KKwore2xoc30JbWVhbnMgbGVmdC1oYW5kLXNpZGUJKntsaHN9Kgore3Joc30JbWVhbnMgcmlnaHQtaGFuZC1zaWRlCSp7cmhzfSoKKworOm1hcAl7bGhzfSB7cmhzfQkJCQkJKjptYXAqCis6bm1bYXBdCXtsaHN9IHtyaHN9CQkJCQkqOm5tKiAqOm5tYXAqCis6dm1bYXBdCXtsaHN9IHtyaHN9CQkJCQkqOnZtKiAqOnZtYXAqCis6b21bYXBdCXtsaHN9IHtyaHN9CQkJCQkqOm9tKiAqOm9tYXAqCis6bWFwIQl7bGhzfSB7cmhzfQkJCQkJKjptYXAhKgorOmltW2FwXQl7bGhzfSB7cmhzfQkJCQkJKjppbSogKjppbWFwKgorOmxtW2FwXQl7bGhzfSB7cmhzfQkJCQkJKjpsbSogKjpsbWFwKgorOmNtW2FwXQl7bGhzfSB7cmhzfQkJCQkJKjpjbSogKjpjbWFwKgorCQkJTWFwIHRoZSBrZXkgc2VxdWVuY2Uge2xoc30gdG8ge3Joc30gZm9yIHRoZSBtb2RlcworCQkJd2hlcmUgdGhlIG1hcCBjb21tYW5kIGFwcGxpZXMuICBUaGUgcmVzdWx0LCBpbmNsdWRpbmcKKwkJCXtyaHN9LCBpcyB0aGVuIGZ1cnRoZXIgc2Nhbm5lZCBmb3IgbWFwcGluZ3MuICBUaGlzCisJCQlhbGxvd3MgZm9yIG5lc3RlZCBhbmQgcmVjdXJzaXZlIHVzZSBvZiBtYXBwaW5ncy4KKworCis6bm9bcmVtYXBdICB7bGhzfSB7cmhzfQkJCQkJKjpubyogICo6bm9yZW1hcCoKKzpubltvcmVtYXBdIHtsaHN9IHtyaHN9CQkJCQkqOm5uKiAgKjpubm9yZW1hcCoKKzp2bltvcmVtYXBdIHtsaHN9IHtyaHN9CQkJCQkqOnZuKiAgKjp2bm9yZW1hcCoKKzpvbm9bcmVtYXBdIHtsaHN9IHtyaHN9CQkJCQkqOm9ubyogKjpvbm9yZW1hcCoKKzpub1tyZW1hcF0hIHtsaHN9IHtyaHN9CQkJCQkqOm5vISogKjpub3JlbWFwISoKKzppbm9bcmVtYXBdIHtsaHN9IHtyaHN9CQkJCQkqOmlubyogKjppbm9yZW1hcCoKKzpsbltvcmVtYXBdIHtsaHN9IHtyaHN9CQkJCQkqOmxuKiAgKjpsbm9yZW1hcCoKKzpjbm9bcmVtYXBdIHtsaHN9IHtyaHN9CQkJCQkqOmNubyogKjpjbm9yZW1hcCoKKwkJCU1hcCB0aGUga2V5IHNlcXVlbmNlIHtsaHN9IHRvIHtyaHN9IGZvciB0aGUgbW9kZXMKKwkJCXdoZXJlIHRoZSBtYXAgY29tbWFuZCBhcHBsaWVzLiAgRGlzYWxsb3cgbWFwcGluZyBvZgorCQkJe3Joc30sIHRvIGF2b2lkIG5lc3RlZCBhbmQgcmVjdXJzaXZlIG1hcHBpbmdzLiAgT2Z0ZW4KKwkJCXVzZWQgdG8gcmVkZWZpbmUgYSBjb21tYW5kLiAge25vdCBpbiBWaX0KKworCis6dW5tW2FwXSAge2xoc30JCQkJCQkqOnVubSogICo6dW5tYXAqCis6bnVuW21hcF0ge2xoc30JCQkJCQkqOm51biogICo6bnVubWFwKgorOnZ1W25tYXBdIHtsaHN9CQkJCQkJKjp2dSogICAqOnZ1bm1hcCoKKzpvdVtubWFwXSB7bGhzfQkJCQkJCSo6b3UqICAgKjpvdW5tYXAqCis6dW5tW2FwXSEge2xoc30JCQkJCQkqOnVubSEqICo6dW5tYXAhKgorOml1W25tYXBdIHtsaHN9CQkJCQkJKjppdSogICAqOml1bm1hcCoKKzpsdVtubWFwXSB7bGhzfQkJCQkJCSo6bHUqICAgKjpsdW5tYXAqCis6Y3Vbbm1hcF0ge2xoc30JCQkJCQkqOmN1KiAgICo6Y3VubWFwKgorCQkJUmVtb3ZlIHRoZSBtYXBwaW5nIG9mIHtsaHN9IGZvciB0aGUgbW9kZXMgd2hlcmUgdGhlCisJCQltYXAgY29tbWFuZCBhcHBsaWVzLiAgVGhlIG1hcHBpbmcgbWF5IHJlbWFpbiBkZWZpbmVkCisJCQlmb3Igb3RoZXIgbW9kZXMgd2hlcmUgaXQgYXBwbGllcy4KKwkJCU5vdGU6IFRyYWlsaW5nIHNwYWNlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHtsaHN9LiAgVGhpcworCQkJdW5tYXAgZG9lcyBOT1Qgd29yazogPgorCQkJCTptYXAgQEAgZm9vCisJCQkJOnVubWFwIEBAIHwgcHJpbnQKKworOm1hcGNbbGVhcl0JCQkJCQkqOm1hcGMqICAgKjptYXBjbGVhcioKKzpubWFwY1tsZWFyXQkJCQkJCSo6bm1hcGMqICAqOm5tYXBjbGVhcioKKzp2bWFwY1tsZWFyXQkJCQkJCSo6dm1hcGMqICAqOnZtYXBjbGVhcioKKzpvbWFwY1tsZWFyXQkJCQkJCSo6b21hcGMqICAqOm9tYXBjbGVhcioKKzptYXBjW2xlYXJdIQkJCQkJCSo6bWFwYyEqICAqOm1hcGNsZWFyISoKKzppbWFwY1tsZWFyXQkJCQkJCSo6aW1hcGMqICAqOmltYXBjbGVhcioKKzpsbWFwY1tsZWFyXQkJCQkJCSo6bG1hcGMqICAqOmxtYXBjbGVhcioKKzpjbWFwY1tsZWFyXQkJCQkJCSo6Y21hcGMqICAqOmNtYXBjbGVhcioKKwkJCVJlbW92ZSBBTEwgbWFwcGluZ3MgZm9yIHRoZSBtb2RlcyB3aGVyZSB0aGUgbWFwCisJCQljb21tYW5kIGFwcGxpZXMuICB7bm90IGluIFZpfQorCQkJV2FybmluZzogVGhpcyBhbHNvIHJlbW92ZXMgdGhlIGRlZmF1bHQgbWFwcGluZ3MuCisKKzptYXAKKzpubVthcF0KKzp2bVthcF0KKzpvbVthcF0KKzptYXAhCis6aW1bYXBdCis6bG1bYXBdCis6Y21bYXBdCisJCQlMaXN0IGFsbCBrZXkgbWFwcGluZ3MgZm9yIHRoZSBtb2RlcyB3aGVyZSB0aGUgbWFwCisJCQljb21tYW5kIGFwcGxpZXMuICBOb3RlIHRoYXQgIjptYXAiIGFuZCAiOm1hcCEiIGFyZQorCQkJdXNlZCBtb3N0IG9mdGVuLCBiZWNhdXNlIHRoZXkgaW5jbHVkZSB0aGUgb3RoZXIgbW9kZXMuCisKKzptYXAgICAge2xoc30JCQkJCQkqOm1hcF9sKgorOm5tW2FwXSB7bGhzfQkJCQkJCSo6bm1hcF9sKgorOnZtW2FwXSB7bGhzfQkJCQkJCSo6dm1hcF9sKgorOm9tW2FwXSB7bGhzfQkJCQkJCSo6b21hcF9sKgorOm1hcCEgICB7bGhzfQkJCQkJCSo6bWFwX2whKgorOmltW2FwXSB7bGhzfQkJCQkJCSo6aW1hcF9sKgorOmxtW2FwXSB7bGhzfQkJCQkJCSo6bG1hcF9sKgorOmNtW2FwXSB7bGhzfQkJCQkJCSo6Y21hcF9sKgorCQkJTGlzdCB0aGUga2V5IG1hcHBpbmdzIGZvciB0aGUga2V5IHNlcXVlbmNlcyBzdGFydGluZworCQkJd2l0aCB7bGhzfSBpbiB0aGUgbW9kZXMgd2hlcmUgdGhlIG1hcCBjb21tYW5kIGFwcGxpZXMuCisJCQl7bm90IGluIFZpfQorCitUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byBtYXAgYSBrZXkgb3Iga2V5IHNlcXVlbmNlIHRvIGEgc3RyaW5nIG9mCitjaGFyYWN0ZXJzLiAgWW91IGNhbiB1c2UgdGhpcyB0byBwdXQgY29tbWFuZCBzZXF1ZW5jZXMgdW5kZXIgZnVuY3Rpb24ga2V5cywKK3RyYW5zbGF0ZSBvbmUga2V5IGludG8gYW5vdGhlciwgZXRjLiAgU2VlIHw6bWtleHJjfCBmb3IgaG93IHRvIHNhdmUgYW5kCityZXN0b3JlIHRoZSBjdXJyZW50IG1hcHBpbmdzLgorCisJCQkJKjptYXAtbG9jYWwqICo6bWFwLTxidWZmZXI+KiAqRTIyNCogKkUyMjUqCitJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb25lIG9mIHRoZXNlIGNvbW1hbmRzIGlzICI8YnVmZmVyPiIgaXQgd2lsbCBhcHBseSB0bworbWFwcGluZ3MgbG9jYWxseSB0byB0aGUgY3VycmVudCBidWZmZXIgb25seS4gIEV4YW1wbGU6ID4KKwk6bWFwIDxidWZmZXI+ICAsdyAgL1suLDtdPENSPgorVGhlbiB5b3UgY2FuIG1hcCAiLHciIHRvIHNvbWV0aGluZyBlbHNlIGluIGFub3RoZXIgYnVmZmVyOiA+CisJOm1hcCA8YnVmZmVyPiAgLHcgIC9bIyYhXTxDUj4KK1RoZSBsb2NhbCBidWZmZXIgbWFwcGluZ3MgYXJlIHVzZWQgYmVmb3JlIHRoZSBnbG9iYWwgb25lcy4KK1RoZSAiPGJ1ZmZlcj4iIGFyZ3VtZW50IGNhbiBhbHNvIGJlIHVzZWQgdG8gY2xlYXIgbWFwcGluZ3M6ID4KKwk6dW5tYXAgPGJ1ZmZlcj4gLHcKKwk6bWFwY2xlYXIgPGJ1ZmZlcj4KK0xvY2FsIG1hcHBpbmdzIGFyZSBhbHNvIGNsZWFyZWQgd2hlbiBhIGJ1ZmZlciBpcyBkZWxldGVkLCBidXQgbm90IHdoZW4gaXQgaXMKK3VubG9hZGVkLiAgSnVzdCBsaWtlIGxvY2FsIG9wdGlvbiB2YWx1ZXMuCisKKwkJCQkJCSo6bWFwLTxzaWxlbnQ+KiAqOm1hcC1zaWxlbnQqCitUbyBkZWZpbmUgYSBtYXBwaW5nIHdoaWNoIHdpbGwgbm90IGJlIGVjaG9lZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhZGQKKyI8c2lsZW50PiIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgRXhhbXBsZTogPgorCTptYXAgPHNpbGVudD4gLGggL0hlYWRlcjxDUj4KK1RoZSBzZWFyY2ggc3RyaW5nIHdpbGwgbm90IGJlIGVjaG9lZCB3aGVuIHVzaW5nIHRoaXMgbWFwcGluZy4gIE1lc3NhZ2VzIGZyb20KK3RoZSBleGVjdXRlZCBjb21tYW5kIGFyZSBzdGlsbCBnaXZlbiB0aG91Z2guICBUbyBzaHV0IHRoZW0gdXAgdG9vLCBhZGQgYQorIjpzaWxlbnQiIGluIHRoZSBleGVjdXRlZCBjb21tYW5kOiA+CisJOm1hcCA8c2lsZW50PiAsaCA6ZXhlICI6c2lsZW50IG5vcm1hbCAvSGVhZGVyXHIiPENSPgorUHJvbXB0cyB3aWxsIHN0aWxsIGJlIGdpdmVuLCBlLmcuLCBmb3IgaW5wdXRkaWFsb2coKS4KK1VzaW5nICI8c2lsZW50PiIgZm9yIGFuIGFiYnJldmlhdGlvbiBpcyBwb3NzaWJsZSwgYnV0IHdpbGwgY2F1c2UgcmVkcmF3aW5nIG9mCit0aGUgY29tbWFuZCBsaW5lIHRvIGZhaWwuCisKKwkJCQkJCSo6bWFwLTxzY3JpcHQ+KiAqOm1hcC1zY3JpcHQqCitJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb25lIG9mIHRoZXNlIGNvbW1hbmRzIGlzICI8c2NyaXB0PiIgYW5kIGl0IGlzIHVzZWQgdG8KK2RlZmluZSBhIG5ldyBtYXBwaW5nIG9yIGFiYnJldmlhdGlvbiwgdGhlIG1hcHBpbmcgd2lsbCBvbmx5IHJlbWFwIGNoYXJhY3RlcnMKK2luIHRoZSB7cmhzfSB1c2luZyBtYXBwaW5ncyB0aGF0IHdlcmUgZGVmaW5lZCBsb2NhbCB0byBhIHNjcmlwdCwgc3RhcnRpbmcgd2l0aAorIjxTSUQ+Ii4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCBtYXBwaW5ncyBmcm9tIG91dHNpZGUgYSBzY3JpcHQKK2ludGVyZmVyZSAoZS5nLiwgd2hlbiBDVFJMLVYgaXMgcmVtYXBwZWQgaW4gbXN3aW4udmltKSwgYnV0IGRvIHVzZSBvdGhlcgorbWFwcGluZ3MgZGVmaW5lZCBpbiB0aGUgc2NyaXB0LgorTm90ZTogIjptYXAgPHNjcmlwdD4iIGFuZCAiOm5vcmVtYXAgPHNjcmlwdD4iIGRvIHRoZSBzYW1lIHRoaW5nLiAgVGhlCisiPHNjcmlwdD4iIG92ZXJydWxlcyB0aGUgY29tbWFuZCBuYW1lLiAgVXNpbmcgIjpub3JlbWFwIDxzY3JpcHQ+IiBpcworcHJlZmVycmVkLCBiZWNhdXNlIGl0J3MgY2xlYXJlciB0aGF0IHJlbWFwcGluZyBpcyAobW9zdGx5KSBkaXNhYmxlZC4KKworCQkJCQkJKjptYXAtPHVuaXF1ZT4qICpFMjI2KiAqRTIyNyoKK0lmIHRoZSBmaXJzdCBhcmd1bWVudCB0byBvbmUgb2YgdGhlc2UgY29tbWFuZHMgaXMgIjx1bmlxdWU+IiBhbmQgaXQgaXMgdXNlZCB0bworZGVmaW5lIGEgbmV3IG1hcHBpbmcgb3IgYWJicmV2aWF0aW9uLCB0aGUgY29tbWFuZCB3aWxsIGZhaWwgaWYgdGhlIG1hcHBpbmcgb3IKK2FiYnJldmlhdGlvbiBhbHJlYWR5IGV4aXN0cy4gIEV4YW1wbGU6ID4KKwk6bWFwIDx1bmlxdWU+ICx3ICAvWyMmIV08Q1I+CitXaGVuIGRlZmluaW5nIGEgbG9jYWwgbWFwcGluZywgdGhlcmUgd2lsbCBhbHNvIGJlIGEgY2hlY2sgaWYgYSBnbG9iYWwgbWFwCithbHJlYWR5IGV4aXN0cyB3aGljaCBpcyBlcXVhbC4KK0V4YW1wbGUgb2Ygd2hhdCB3aWxsIGZhaWw6ID4KKwk6bWFwICx3ICAvWyMmIV08Q1I+CisJOm1hcCA8YnVmZmVyPiA8dW5pcXVlPiAsdyAgL1suLDtdPENSPgorCisiPGJ1ZmZlcj4iLCAiPHNpbGVudD4iLCAiPHNjcmlwdD4iIGFuZCAiPHVuaXF1ZT4iIGNhbiBiZSB1c2VkIGluIGFueSBvcmRlci4KK1RoZXkgbXVzdCBhcHBlYXIgcmlnaHQgYWZ0ZXIgdGhlIGNvbW1hbmQsIGJlZm9yZSBhbnkgb3RoZXIgYXJndW1lbnRzLgorCisKK01BUFBJTkcgQU5EIE1PREVTCisKK1RoZXJlIGFyZSBmaXZlIHNldHMgb2YgbWFwcGluZ3MKKy0gRm9yIE5vcm1hbCBtb2RlOiBXaGVuIHR5cGluZyBjb21tYW5kcy4KKy0gRm9yIFZpc3VhbCBtb2RlOiBXaGVuIHR5cGluZyBjb21tYW5kcyB3aGlsZSB0aGUgVmlzdWFsIGFyZWEgaXMgaGlnaGxpZ2h0ZWQuCistIEZvciBPcGVyYXRvci1wZW5kaW5nIG1vZGU6IFdoZW4gYW4gb3BlcmF0b3IgaXMgcGVuZGluZyAoYWZ0ZXIgImQiLCAieSIsICJjIiwKKyAgZXRjLikuICBFeGFtcGxlOiAiOm9tYXAgeyB3IiBtYWtlcyAieXsiIHdvcmsgbGlrZSAieXciIGFuZCAiZHsiIGxpa2UgImR3Ii4KKy0gRm9yIEluc2VydCBtb2RlLiBUaGVzZSBhcmUgYWxzbyB1c2VkIGluIFJlcGxhY2UgbW9kZS4KKy0gRm9yIENvbW1hbmQtbGluZSBtb2RlOiBXaGVuIGVudGVyaW5nIGEgIjoiIG9yICIvIiBjb21tYW5kLgorCitUaGVyZSBhcmUgbm8gc2VwYXJhdGUgbWFwcGluZ3MgZm9yIFNlbGVjdCBtb2RlLiAgVGhlIHNhbWUgYXMgZm9yIFZpc3VhbCBtb2RlCithcmUgdXNlZCB8U2VsZWN0LW1vZGUtbWFwcGluZ3wuCisKK1NwZWNpYWwgY2FzZTogV2hpbGUgdHlwaW5nIGEgY291bnQgZm9yIGEgY29tbWFuZCBpbiBOb3JtYWwgbW9kZSwgbWFwcGluZyB6ZXJvCitpcyBkaXNhYmxlZC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbWFwIHplcm8gd2l0aG91dCBtYWtpbmcgaXQgaW1wb3NzaWJsZQordG8gdHlwZSBhIGNvdW50IHdpdGggYSB6ZXJvLgorCisJCQkJCQkqbWFwLW92ZXJ2aWV3KiAqbWFwLW1vZGVzKgorT3ZlcnZpZXcgb2Ygd2hpY2ggbWFwIGNvbW1hbmQgd29ya3MgaW4gd2hpY2ggbW9kZToKKworICAgIGNvbW1hbmRzOgkJCQkgICAgICBtb2RlczogfgorCQkJCQkgIE5vcm1hbCAgICAgVmlzdWFsICBPcGVyYXRvci1wZW5kaW5nIH4KKzptYXAgICA6bm9yZW1hcCAgIDp1bm1hcCAgIDptYXBjbGVhcgkgICAgeWVzCSAgICAgICB5ZXMJICB5ZXMKKzpubWFwICA6bm5vcmVtYXAgIDpudW5tYXAgIDpubWFwY2xlYXIJICAgIHllcwkJLQkgICAtCis6dm1hcCAgOnZub3JlbWFwICA6dnVubWFwICA6dm1hcGNsZWFyCSAgICAgLQkgICAgICAgeWVzCSAgIC0KKzpvbWFwICA6b25vcmVtYXAgIDpvdW5tYXAgIDpvbWFwY2xlYXIJICAgICAtCQktCSAgeWVzCisKKwkJCQkJICBJbnNlcnQgIENvbW1hbmQtbGluZQlMYW5nLUFyZyB+Cis6bWFwISAgOm5vcmVtYXAhICA6dW5tYXAhICA6bWFwY2xlYXIhCSAgICB5ZXMJICAgICAgIHllcwkgICAtCis6aW1hcCAgOmlub3JlbWFwICA6aXVubWFwICA6aW1hcGNsZWFyCSAgICB5ZXMJCS0JICAgLQorOmNtYXAgIDpjbm9yZW1hcCAgOmN1bm1hcCAgOmNtYXBjbGVhcgkgICAgIC0JICAgICAgIHllcwkgICAtCis6bG1hcCAgOmxub3JlbWFwICA6bHVubWFwICA6bG1hcGNsZWFyCSAgICB5ZXMqICAgICAgIHllcyoJICB5ZXMqCisKK1RoZSBvcmlnaW5hbCBWaSBkaWQgbm90IGhhdmUgc2VwYXJhdGUgbWFwcGluZ3MgZm9yCitOb3JtYWwvVmlzdWFsL09wZXJhdG9yLXBlbmRpbmcgbW9kZSBhbmQgZm9yIEluc2VydC9Db21tYW5kLWxpbmUgbW9kZS4KK1RoZXJlZm9yZSB0aGUgIjptYXAiIGFuZCAiOm1hcCEiIGNvbW1hbmRzIGVudGVyIGFuZCBkaXNwbGF5IG1hcHBpbmdzIGZvcgorc2V2ZXJhbCBtb2Rlcy4gIEluIFZpbSB5b3UgY2FuIHVzZSB0aGUgIjpubWFwIiwgIjp2bWFwIiwgIjpvbWFwIiwgIjpjbWFwIiBhbmQKKyI6aW1hcCIgY29tbWFuZHMgdG8gZW50ZXIgbWFwcGluZ3MgZm9yIGVhY2ggbW9kZSBzZXBhcmF0ZWx5LgorCitUbyBlbnRlciBhIG1hcHBpbmcgZm9yIE5vcm1hbCBhbmQgVmlzdWFsIG1vZGUsIGJ1dCBub3QgT3BlcmF0b3ItcGVuZGluZyBtb2RlLAorZmlyc3QgZGVmaW5lIGl0IGZvciBhbGwgdGhyZWUgbW9kZXMsIHRoZW4gdW5tYXAgaXQgZm9yIE9wZXJhdG9yLXBlbmRpbmcgbW9kZToKKwk6bWFwICAgIHh4IHNvbWV0aGluZy1kaWZmaWN1bHQKKwk6b3VubWFwIHh4CitMaWtld2lzZSBmb3IgYSBtYXBwaW5nIGZvciBWaXN1YWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcgbW9kZSBvciBOb3JtYWwgYW5kCitPcGVyYXRvci1wZW5kaW5nIG1vZGUuCisKKwkJCQkJCSpsYW5ndWFnZS1tYXBwaW5nKgorIjpsbWFwIiBkZWZpbmVzIGEgbWFwcGluZyB0aGF0IGFwcGxpZXMgdG86CistIEluc2VydCBtb2RlCistIENvbW1hbmQtbGluZSBtb2RlCistIHdoZW4gZW50ZXJpbmcgYSBzZWFyY2ggcGF0dGVybgorLSB0aGUgYXJndW1lbnQgb2YgdGhlIGNvbW1hbmRzIHRoYXQgYWNjZXB0IGEgdGV4dCBjaGFyYWN0ZXIsIHN1Y2ggYXMgInIiIGFuZAorICAiZiIKKy0gZm9yIHRoZSBpbnB1dCgpIGxpbmUKK0dlbmVyYWxseTogV2hlbmV2ZXIgYSBjaGFyYWN0ZXIgaXMgdG8gYmUgdHlwZWQgdGhhdCBpcyBwYXJ0IG9mIHRoZSB0ZXh0IGluIHRoZQorYnVmZmVyLCBub3QgYSBWaW0gY29tbWFuZCBjaGFyYWN0ZXIuICAiTGFuZy1BcmciIGlzbid0IHJlYWxseSBhbm90aGVyIG1vZGUsCitpdCdzIGp1c3QgdXNlZCBoZXJlIGZvciB0aGlzIHNpdHVhdGlvbi4KKyAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gbG9hZCBhIHNldCBvZiByZWxhdGVkIGxhbmd1YWdlIG1hcHBpbmdzIGlzIGJ5IHVzaW5nIHRoZQorJ2tleW1hcCcgb3B0aW9uLiAgU2VlIHw0NS41fC4KKyAgIEluIEluc2VydCBtb2RlIGFuZCBpbiBDb21tYW5kLWxpbmUgbW9kZSB0aGUgbWFwcGluZ3MgY2FuIGJlIGRpc2FibGVkIHdpdGgKK3RoZSBDVFJMLV4gY29tbWFuZCB8aV9DVFJMLV58IHxjX0NUUkwtXnwuICBXaGVuIHN0YXJ0aW5nIHRvIGVudGVyIGEgbm9ybWFsCitjb21tYW5kIGxpbmUgKG5vdCBhIHNlYXJjaCBwYXR0ZXJuKSB0aGUgbWFwcGluZ3MgYXJlIGRpc2FibGVkIHVudGlsIGEgQ1RSTC1eCitpcyB0eXBlZC4gIFRoZSBzdGF0ZSBsYXN0IHVzZWQgaXMgcmVtZW1iZXJlZCBmb3IgSW5zZXJ0IG1vZGUgYW5kIFNlYXJjaAorcGF0dGVybnMgc2VwYXJhdGVseS4gIFRoZSBzdGF0ZSBmb3IgSW5zZXJ0IG1vZGUgaXMgYWxzbyB1c2VkIHdoZW4gdHlwaW5nIGEKK2NoYXJhY3RlciBhcyBhbiBhcmd1bWVudCB0byBjb21tYW5kIGxpa2UgImYiIG9yICJ0Ii4KKyAgIFdoZW4gYWRkaW5nIGEgIjpsbWFwIiBtYXBwaW5nIHRoZSB1c2Ugb2YgdGhlc2UgbWFwcGluZ3MgaW4gSW5zZXJ0IG1vZGUgYW5kCitmb3IgU2VhcmNoIHBhdHRlcm5zIHdpbGwgYmUgc3dpdGNoZWQgb24uCisgICBMYW5ndWFnZSBtYXBwaW5ncyB3aWxsIG5ldmVyIGJlIGFwcGxpZWQgdG8gYWxyZWFkeSBtYXBwZWQgY2hhcmFjdGVycy4gIFRoZXkKK2FyZSBvbmx5IHVzZWQgZm9yIHR5cGVkIGNoYXJhY3RlcnMuICBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbGFuZ3VhZ2UgbWFwcGluZword2FzIGFscmVhZHkgZG9uZSB3aGVuIHR5cGluZyB0aGUgbWFwcGluZy4KKworCQkJCQkJCSptYXAtbXVsdGlieXRlKgorSXQgaXMgcG9zc2libGUgdG8gbWFwIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCBidXQgb25seSB0aGUgd2hvbGUgY2hhcmFjdGVyLiAgWW91CitjYW5ub3QgbWFwIHRoZSBmaXJzdCBieXRlIG9ubHkuICBUaGlzIHdhcyBkb25lIHRvIHByZXZlbnQgcHJvYmxlbXMgaW4gdGhpcworc2NlbmFyaW86ID4KKwk6c2V0IGVuY29kaW5nPWxhdGluMQorCTppbWFwIDxNLUM+IGZvbworCTpzZXQgZW5jb2Rpbmc9dXRmLTgKK1RoZSBtYXBwaW5nIGZvciA8TS1DPiBpcyBkZWZpbmVkIHdpdGggdGhlIGxhdGluMSBlbmNvZGluZywgcmVzdWx0aW5nIGluIGEgMHhjMworYnl0ZS4gIElmIHlvdSB0eXBlIHRoZSBjaGFyYWN0ZXIg4SAoMHhlYSA8TS1hPikgaW4gVVRGLTggZW5jb2RpbmcgdGhpcyBpcyB0aGUKK3R3byBieXRlcyAweGMzIDB4YTEuICBZb3UgZG9uJ3Qgd2FudCB0aGUgMHhjMyBieXRlIHRvIGJlIG1hcHBlZCB0aGVuLAorb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gdHlwZSB0aGUg4SBjaGFyYWN0ZXIuCisKKwkJCQkJCQkqbWFwLWxpc3RpbmcqCitXaGVuIGxpc3RpbmcgbWFwcGluZ3MgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGZpcnN0IHR3byBjb2x1bW5zIGFyZToKKworICAgICAgQ0hBUglNT0RFCX4KKyAgICAgPFNwYWNlPglOb3JtYWwsIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZworCW4JTm9ybWFsCisJdglWaXN1YWwKKwlvCU9wZXJhdG9yLXBlbmRpbmcKKwkhCUluc2VydCBhbmQgQ29tbWFuZC1saW5lCisJaQlJbnNlcnQKKwlsCSI6bG1hcCIgbWFwcGluZ3MgZm9yIEluc2VydCwgQ29tbWFuZC1saW5lIGFuZCBMYW5nLUFyZworCWMJQ29tbWFuZC1saW5lCisKK0p1c3QgYmVmb3JlIHRoZSB7cmhzfSBhIHNwZWNpYWwgY2hhcmFjdGVyIGNhbiBhcHBlYXI6CisJKglpbmRpY2F0ZXMgdGhhdCBpdCBpcyBub3QgcmVtYXBwYWJsZQorCSYJaW5kaWNhdGVzIHRoYXQgb25seSBzY3JpcHQtbG9jYWwgbWFwcGluZ3MgYXJlIHJlbWFwcGFibGUKKwlACWluZGljYXRlcyBhIGJ1ZmZlci1sb2NhbCBtYXBwaW5nCisKK0V2ZXJ5dGhpbmcgZnJvbSB0aGUgZmlyc3Qgbm9uLWJsYW5rIGFmdGVyIHtsaHN9IHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUKKyhvciAnfCcpIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB7cmhzfS4gIFRoaXMgYWxsb3dzIHRoZSB7cmhzfSB0byBlbmQKK3dpdGggYSBzcGFjZS4KKworTm90ZTogV2hlbiB1c2luZyBtYXBwaW5ncyBmb3IgVmlzdWFsIG1vZGUsIHlvdSBjYW4gdXNlIHRoZSAiJzwiIG1hcmssIHdoaWNoCitpcyB0aGUgc3RhcnQgb2YgdGhlIGxhc3Qgc2VsZWN0ZWQgVmlzdWFsIGFyZWEgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIHwnPHwuCisKKwkJCQkJCQkqbWFwX2JhY2tzbGFzaCoKK05vdGUgdGhhdCBvbmx5IENUUkwtViBpcyBtZW50aW9uZWQgaGVyZSBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIGZvciBtYXBwaW5ncworYW5kIGFiYnJldmlhdGlvbnMuICBXaGVuICdjcG9wdGlvbnMnIGRvZXMgbm90IGNvbnRhaW4gJ0InLCBhIGJhY2tzbGFzaCBjYW4KK2Fsc28gYmUgdXNlZCBsaWtlIENUUkwtVi4gIFRoZSA8PiBub3RhdGlvbiBjYW4gYmUgZnVsbHkgdXNlZCB0aGVuIHw8PnwuICBCdXQKK3lvdSBjYW5ub3QgdXNlICI8Qy1WPiIgbGlrZSBDVFJMLVYgdG8gZXNjYXBlIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2Ygd2hhdAorZm9sbG93cy4KKworVG8gbWFwIGEgYmFja3NsYXNoLCBvciB1c2UgYSBiYWNrc2xhc2ggbGl0ZXJhbGx5IGluIHRoZSB7cmhzfSwgdGhlIHNwZWNpYWwKK3NlcXVlbmNlICI8QnNsYXNoPiIgY2FuIGJlIHVzZWQuICBUaGlzIGF2b2lkcyB0aGUgbmVlZCB0byBkb3VibGUgYmFja3NsYXNoZXMKK3doZW4gdXNpbmcgbmVzdGVkIG1hcHBpbmdzLgorCisJCQkJCQkJKm1hcC1hbWJpZ3VvdXMqCitXaGVuIHR3byBtYXBwaW5ncyBzdGFydCB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIHRoZXkgYXJlCithbWJpZ3VvdXMuICBFeGFtcGxlOiA+CisJOmltYXAgYWEgZm9vCisJOmltYXAgYWFhIGJhcgorV2hlbiBWaW0gaGFzIHJlYWQgImFhIiwgaXQgd2lsbCBuZWVkIHRvIGdldCBhbm90aGVyIGNoYXJhY3RlciB0byBiZSBhYmxlIHRvCitkZWNpZGUgaWYgImFhIiBvciAiYWFhIiBzaG91bGQgYmUgbWFwcGVkLiAgVGhpcyBtZWFucyB0aGF0IGFmdGVyIHR5cGluZyAiYWEiCit0aGF0IG1hcHBpbmcgd29uJ3QgZ2V0IGV4cGFuZGVkIHlldCwgVmltIGlzIHdhaXRpbmcgZm9yIGFub3RoZXIgY2hhcmFjdGVyLgorSWYgeW91IHR5cGUgYSBzcGFjZSwgdGhlbiAiZm9vIiB3aWxsIGdldCBpbnNlcnRlZCwgcGx1cyB0aGUgc3BhY2UuICBJZiB5b3UKK3R5cGUgImEiLCB0aGVuICJiYXIiIHdpbGwgZ2V0IGluc2VydGVkLgore1ZpIGRvZXMgbm90IGFsbG93IGFtYmlndW91cyBtYXBwaW5nc30KKworCQkJCQkJCSptYXBfQ1RSTF9DKgorSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGEgQ1RSTC1DIGluIHRoZSB7bGhzfS4gIFlvdSBqdXN0IGNhbid0IG1hcCBDVFJMLUMuCitUaGUgcmVhc29uIGlzIHRoYXQgQ1RSTC1DIG11c3QgYWx3YXlzIGJlIGF2YWlsYWJsZSB0byBicmVhayBhIHJ1bm5pbmcgY29tbWFuZC4KK0V4Y2VwdGlvbjogV2hlbiB1c2luZyB0aGUgR1VJIHZlcnNpb24gb24gTVMtV2luZG93cyBDVFJMLUMgY2FuIGJlIG1hcHBlZCB0bworYWxsb3cgYSBDb3B5IGNvbW1hbmQgdG8gdGhlIGNsaXBib2FyZC4gIFVzZSBDVFJMLUJyZWFrIHRvIGludGVycnVwdCBWaW0uCisKKwkJCQkJCQkqbWFwX3NwYWNlX2luX2xocyoKK1RvIGluY2x1ZGUgYSBzcGFjZSBpbiB7bGhzfSBwcmVjZWRlIGl0IHdpdGggYSBDVFJMLVYgKHR5cGUgdHdvIENUUkwtVnMgZm9yCitlYWNoIHNwYWNlKS4KKwkJCQkJCQkqbWFwX3NwYWNlX2luX3JocyoKK0lmIHlvdSB3YW50IGEge3Joc30gdGhhdCBzdGFydHMgd2l0aCBhIHNwYWNlLCB1c2UgIjxTcGFjZT4iLiAgVG8gYmUgZnVsbHkgVmkKK2NvbXBhdGlibGUgKGJ1dCB1bnJlYWRhYmxlKSBkb24ndCB1c2UgdGhlIHw8Pnwgbm90YXRpb24sIHByZWNlZGUge3Joc30gd2l0aCBhCitzaW5nbGUgQ1RSTC1WICh5b3UgaGF2ZSB0byB0eXBlIENUUkwtViB0d28gdGltZXMpLgorCQkJCQkJCSptYXBfZW1wdHlfcmhzKgorWW91IGNhbiBjcmVhdGUgYW4gZW1wdHkge3Joc30gYnkgdHlwaW5nIG5vdGhpbmcgYWZ0ZXIgYSBzaW5nbGUgQ1RSTC1WICh5b3UKK2hhdmUgdG8gdHlwZSBDVFJMLVYgdHdvIHRpbWVzKS4gIFVuZm9ydHVuYXRlbHksIHlvdSBjYW5ub3QgZG8gdGhpcyBpbiBhIHZpbXJjCitmaWxlLgorCQkJCQkJCSo8Tm9wPioKK0EgZWFzaWVyIHdheSB0byBnZXQgYSBtYXBwaW5nIHRoYXQgZG9lc24ndCBwcm9kdWNlIGFueXRoaW5nLCBpcyB0byB1c2UgIjxOb3A+IgorZm9yIHRoZSB7cmhzfS4gIFRoaXMgb25seSB3b3JrcyB3aGVuIHRoZSB8PD58IG5vdGF0aW9uIGlzIGVuYWJsZWQuICBGb3IKK2V4YW1wbGUsIHRvIG1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGtleSA4IGRvZXMgbm90aGluZyBhdCBhbGw6ID4KKwk6bWFwICA8Rjg+ICA8Tm9wPgorCTptYXAhIDxGOD4gIDxOb3A+Cis8CisJCQkJCSo8TGVhZGVyPiogKm1hcGxlYWRlcioKK1RvIGRlZmluZSBhIG1hcHBpbmcgd2hpY2ggdXNlcyB0aGUgIm1hcGxlYWRlciIgdmFyaWFibGUsIHRoZSBzcGVjaWFsIHN0cmluZworIjxMZWFkZXI+IiBjYW4gYmUgdXNlZC4gIEl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiAibWFwbGVhZGVyIi4KK0lmICJtYXBsZWFkZXIiIGlzIG5vdCBzZXQgb3IgZW1wdHksIGEgYmFja3NsYXNoIGlzIHVzZWQgaW5zdGVhZC4gIEV4YW1wbGU6ID4KKwk6bWFwIDxMZWFkZXI+QSAgb2Fub3RoZXIgbGluZTxFc2M+CitXb3JrcyBsaWtlOiA+CisJOm1hcCBcQSAgb2Fub3RoZXIgbGluZTxFc2M+CitCdXQgYWZ0ZXI6ID4KKwk6bGV0IG1hcGxlYWRlciA9ICIsIgorSXQgd29ya3MgbGlrZTogPgorCTptYXAgLEEgIG9hbm90aGVyIGxpbmU8RXNjPgorCitOb3RlIHRoYXQgdGhlIHZhbHVlIG9mICJtYXBsZWFkZXIiIGlzIHVzZWQgYXQgdGhlIG1vbWVudCB0aGUgbWFwcGluZyBpcworZGVmaW5lZC4gIENoYW5naW5nICJtYXBsZWFkZXIiIGFmdGVyIHRoYXQgaGFzIG5vIGVmZmVjdCBmb3IgYWxyZWFkeSBkZWZpbmVkCittYXBwaW5ncy4KKworCQkJCQkqPExvY2FsTGVhZGVyPiogKm1hcGxvY2FsbGVhZGVyKgorSnVzdCBsaWtlIDxMZWFkZXI+LCBleGNlcHQgdGhhdCBpdCB1c2VzICJtYXBsb2NhbGxlYWRlciIgaW5zdGVhZCBvZgorIm1hcGxlYWRlciIuICA8TG9jYWxMZWFkZXI+IGlzIHRvIGJlIHVzZWQgZm9yIG1hcHBpbmdzIHdoaWNoIGFyZSBsb2NhbCB0byBhCitidWZmZXIuICBFeGFtcGxlOiA+CisgICAgICA6bWFwIDxMb2NhbExlYWRlcj5xICBcRG9JdE5vdworPAorSW4gYSBnbG9iYWwgcGx1Z2luIDxMZWFkZXI+IHNob3VsZCBiZSB1c2VkIGFuZCBpbiBhIGZpbGV0eXBlIHBsdWdpbgorPExvY2FsTGVhZGVyPi4gICJtYXBsZWFkZXIiIGFuZCAibWFwbG9jYWxsZWFkZXIiIGNhbiBiZSBlcXVhbC4gIEFsdGhvdWdoLCBpZgoreW91IG1ha2UgdGhlbSBkaWZmZXJlbnQsIHRoZXJlIGlzIGEgc21hbGxlciBjaGFuY2Ugb2YgbWFwcGluZ3MgZnJvbSBnbG9iYWwKK3BsdWdpbnMgdG8gY2xhc2ggd2l0aCBtYXBwaW5ncyBmb3IgZmlsZXR5cGUgcGx1Z2lucy4gIEZvciBleGFtcGxlLCB5b3UgY291bGQKK2tlZXAgIm1hcGxlYWRlciIgYXQgdGhlIGRlZmF1bHQgYmFja3NsYXNoLCBhbmQgc2V0ICJtYXBsb2NhbGxlYWRlciIgdG8gYW4KK3VuZGVyc2NvcmUuCisKKwkJCQkJCQkqbWFwLTxTSUQ+KgorSW4gYSBzY3JpcHQgdGhlIHNwZWNpYWwga2V5IG5hbWUgIjxTSUQ+IiBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYSBtYXBwaW5nCit0aGF0J3MgbG9jYWwgdG8gdGhlIHNjcmlwdC4gIFNlZSB8PFNJRD58IGZvciBkZXRhaWxzLgorCisJCQkJCQkJKjxQbHVnPioKK1RoZSBzcGVjaWFsIGtleSBuYW1lICI8UGx1Zz4iIGNhbiBiZSB1c2VkIGZvciBhbiBpbnRlcm5hbCBtYXBwaW5nLCB3aGljaCBpcworbm90IHRvIGJlIG1hdGNoZWQgd2l0aCBhbnkga2V5IHNlcXVlbmNlLiAgVGhpcyBpcyB1c2VmdWwgaW4gcGx1Z2lucworfHVzaW5nLTxQbHVnPnwuCisKKwkJCQkJCQkqPENoYXI+KiAqPENoYXItPioKK1RvIG1hcCBhIGNoYXJhY3RlciBieSBpdHMgZGVjaW1hbCwgb2N0YWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVyIHRoZSA8Q2hhcj4KK2NvbnN0cnVjdCBjYW4gYmUgdXNlZDoKKwk8Q2hhci0xMjM+CWNoYXJhY3RlciAxMjMKKwk8Q2hhci0wMzM+CWNoYXJhY3RlciAyNworCTxDaGFyLTB4N2Y+CWNoYXJhY3RlciAxMjcKK1RoaXMgaXMgdXNlZnVsIHRvIHNwZWNpZnkgYSAobXVsdGktYnl0ZSkgY2hhcmFjdGVyIGluIGEgJ2tleW1hcCcgZmlsZS4KK1VwcGVyIGFuZCBsb3dlcmNhc2UgZGlmZmVyZW5jZXMgYXJlIGlnbm9yZWQuCisKKwkJCQkJCQkqbWFwLWNvbW1lbnRzKgorSXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBhIGNvbW1lbnQgYWZ0ZXIgdGhlc2UgY29tbWFuZHMsIGJlY2F1c2UgdGhlICciJworY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUge2xoc30gb3Ige3Joc30uCisKKwkJCQkJCQkqbWFwX2JhcioKK1NpbmNlIHRoZSAnfCcgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwYXJhdGUgYSBtYXAgY29tbWFuZCBmcm9tIHRoZSBuZXh0Citjb21tYW5kLCB5b3Ugd2lsbCBoYXZlIHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsIHRvIGluY2x1ZGUgIGEgJ3wnIGluIHtyaHN9LgorVGhlcmUgYXJlIHRocmVlIG1ldGhvZHM6CisgICB1c2UJICAgICB3b3JrcyB3aGVuCQkJICAgZXhhbXBsZQl+CisgICA8QmFyPiAgICAgJzwnIGlzIG5vdCBpbiAnY3BvcHRpb25zJwkgICA6bWFwIF9sIDohbHMgPEJhcj4gbW9yZV5NCisgICBcfAkgICAgICdiJyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycJICAgOm1hcCBfbCA6IWxzIFx8IG1vcmVeTQorICAgXlZ8CSAgICAgYWx3YXlzLCBpbiBWaW0gYW5kIFZpCSAgIDptYXAgX2wgOiFscyBeVnwgbW9yZV5NCisKKyhoZXJlIF5WIHN0YW5kcyBmb3IgQ1RSTC1WOyB0byBnZXQgb25lIENUUkwtViB5b3UgaGF2ZSB0byB0eXBlIGl0IHR3aWNlOyB5b3UKK2Nhbm5vdCB1c2UgdGhlIDw+IG5vdGF0aW9uICI8Qy1WPiIgaGVyZSkuCisKK0FsbCB0aHJlZSB3b3JrIHdoZW4geW91IHVzZSB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciAnY3BvcHRpb25zJy4KKworV2hlbiAnYicgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJywgIlx8IiB3aWxsIGJlIHJlY29nbml6ZWQgYXMgYSBtYXBwaW5nCitlbmRpbmcgaW4gYSAnXCcgYW5kIHRoZW4gYW5vdGhlciBjb21tYW5kLiAgVGhpcyBpcyBWaSBjb21wYXRpYmxlLCBidXQKK2lsbG9naWNhbCB3aGVuIGNvbXBhcmVkIHRvIG90aGVyIGNvbW1hbmRzLgorCisJCQkJCQkJKm1hcF9yZXR1cm4qCitXaGVuIHlvdSBoYXZlIGEgbWFwcGluZyB0aGF0IGNvbnRhaW5zIGFuIEV4IGNvbW1hbmQsIHlvdSBuZWVkIHRvIHB1dCBhIGxpbmUKK3Rlcm1pbmF0b3IgYWZ0ZXIgaXQgdG8gaGF2ZSBpdCBleGVjdXRlZC4gIFRoZSB1c2Ugb2YgPENSPiBpcyByZWNvbW1lbmRlZCBmb3IKK3RoaXMgKHNlZSB8PD58KS4gIEV4YW1wbGU6ID4KKyAgIDptYXAgIF9scyAgOiFscyAtbCAlPENSPjplY2hvICJ0aGUgZW5kIjxDUj4KKworVG8gYXZvaWQgbWFwcGluZyBvZiB0aGUgY2hhcmFjdGVycyB5b3UgdHlwZSBpbiBpbnNlcnQgb3IgQ29tbWFuZC1saW5lIG1vZGUsCit0eXBlIGEgQ1RSTC1WIGZpcnN0LiAgVGhlIG1hcHBpbmcgaW4gSW5zZXJ0IG1vZGUgaXMgZGlzYWJsZWQgaWYgdGhlICdwYXN0ZScKK29wdGlvbiBpcyBvbi4KKworTm90ZSB0aGF0IHdoZW4gYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgKHRoYXQgY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2Ugb3IgYmVlcCkKK3RoZSByZXN0IG9mIHRoZSBtYXBwaW5nIGlzIG5vdCBleGVjdXRlZC4gIFRoaXMgaXMgVmktY29tcGF0aWJsZS4KKworTm90ZSB0aGF0IHRoZSBzZWNvbmQgY2hhcmFjdGVyIChhcmd1bWVudCkgb2YgdGhlIGNvbW1hbmRzIEB6WnRUZkZbXXJtJ2AidgorYW5kIENUUkwtWCBpcyBub3QgbWFwcGVkLiAgVGhpcyB3YXMgZG9uZSB0byBiZSBhYmxlIHRvIHVzZSBhbGwgdGhlIG5hbWVkCityZWdpc3RlcnMgYW5kIG1hcmtzLCBldmVuIHdoZW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGhhcyBiZWVuCittYXBwZWQuCisKKwkJCQkJCQkqbWFwLXdoaWNoLWtleXMqCitJZiB5b3UgYXJlIGdvaW5nIHRvIG1hcCBzb21ldGhpbmcsIHlvdSB3aWxsIG5lZWQgdG8gY2hvb3NlIHdoaWNoIGtleShzKSB0byB1c2UKK2ZvciB0aGUge2xoc30uICBZb3Ugd2lsbCBoYXZlIHRvIGF2b2lkIGtleXMgdGhhdCBhcmUgdXNlZCBmb3IgVmltIGNvbW1hbmRzLAorb3RoZXJ3aXNlIHlvdSB3b3VsZCBub3QgYmUgYWJsZSB0byB1c2UgdGhvc2UgY29tbWFuZHMgYW55bW9yZS4gIEhlcmUgYXJlIGEgZmV3CitzdWdnZXN0aW9uczoKKy0gRnVuY3Rpb24ga2V5cyA8RjI+LCA8RjM+LCBldGMuLiAgQWxzbyB0aGUgc2hpZnRlZCBmdW5jdGlvbiBrZXlzIDxTLUYxPiwKKyAgPFMtRjI+LCBldGMuICBOb3RlIHRoYXQgPEYxPiBpcyBhbHJlYWR5IHVzZWQgZm9yIHRoZSBoZWxwIGNvbW1hbmQuCistIE1ldGEta2V5cyAod2l0aCB0aGUgQUxUIGtleSBwcmVzc2VkKS4KKy0gVXNlIHRoZSAnXycgb3IgJywnIGNoYXJhY3RlciBhbmQgdGhlbiBhbnkgb3RoZXIgY2hhcmFjdGVyLiAgVGhlICJfIiBhbmQgIiwiCisgIGNvbW1hbmRzIGRvIGV4aXN0IGluIFZpbSAoc2VlIHxffCBhbmQgfCx8KSwgYnV0IHlvdSBwcm9iYWJseSBuZXZlciB1c2UgdGhlbS4KKy0gVXNlIGEga2V5IHRoYXQgaXMgYSBzeW5vbnltIGZvciBhbm90aGVyIGNvbW1hbmQuICBGb3IgZXhhbXBsZTogQ1RSTC1QIGFuZAorICBDVFJMLU4uICBVc2UgYW4gZXh0cmEgY2hhcmFjdGVyIHRvIGFsbG93IG1vcmUgbWFwcGluZ3MuCisKK1NlZSB0aGUgZmlsZSAiaW5kZXgiIGZvciBrZXlzIHRoYXQgYXJlIG5vdCB1c2VkIGFuZCB0aHVzIGNhbiBiZSBtYXBwZWQgd2l0aG91dAorbG9zaW5nIGFueSBidWlsdGluIGZ1bmN0aW9uLiAgWW91IGNhbiBhbHNvIHVzZSAiOmhlbHAge2tleX1eRCIgdG8gZmluZCBvdXQgaWYKK2Ega2V5IGlzIHVzZWQgZm9yIHNvbWUgY29tbWFuZC4gICh7a2V5fSBpcyB0aGUgc3BlY2lmaWMga2V5IHlvdSB3YW50IHRvIGZpbmQKK291dCBhYm91dCwgXkQgaXMgQ1RSTC1EKS4KKworCQkJCQkJCSptYXAtZXhhbXBsZXMqCitBIGZldyBleGFtcGxlcyAoZ2l2ZW4gYXMgeW91IHR5cGUgdGhlbSwgZm9yICI8Q1I+IiB5b3UgdHlwZSBmb3VyIGNoYXJhY3RlcnM7Cit0aGUgJzwnIGZsYWcgbXVzdCBub3QgYmUgcHJlc2VudCBpbiAnY3BvcHRpb25zJyBmb3IgdGhpcyB0byB3b3JrKS4gPgorCisgICA6bWFwIDxGMz4gIG8jaW5jbHVkZQorICAgOm1hcCA8TS1nPiAvZm9vPENSPmN3YmFyPEVzYz4KKyAgIDptYXAgX3ggICAgZC9FTkQvZTxDUj4KKyAgIDptYXAhIHFxICAgcXVhZHJpbGxpb24gcXVlc3Rpb25zCis8CisJCQkJCQkJKm1hcC10eXBpbmcqCitWaW0gd2lsbCBjb21wYXJlIHdoYXQgeW91IHR5cGUgd2l0aCB0aGUgc3RhcnQgb2YgYSBtYXBwZWQgc2VxdWVuY2UuICBJZiB0aGVyZQoraXMgYW4gaW5jb21wbGV0ZSBtYXRjaCwgaXQgd2lsbCBnZXQgbW9yZSBjaGFyYWN0ZXJzIHVudGlsIHRoZXJlIGVpdGhlciBpcyBhCitjb21wbGV0ZSBtYXRjaCBvciB1bnRpbCB0aGVyZSBpcyBubyBtYXRjaCBhdCBhbGwuICBFeGFtcGxlOiBJZiB5b3UgbWFwISAicXEiLAordGhlIGZpcnN0ICdxJyB3aWxsIG5vdCBhcHBlYXIgb24gdGhlIHNjcmVlbiB1bnRpbCB5b3UgdHlwZSBhbm90aGVyCitjaGFyYWN0ZXIuICBUaGlzIGlzIGJlY2F1c2UgVmltIGNhbm5vdCBrbm93IGlmIHRoZSBuZXh0IGNoYXJhY3RlciB3aWxsIGJlIGEKKydxJyBvciBub3QuICBJZiB0aGUgJ3RpbWVvdXQnIG9wdGlvbiBpcyBvbiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpIFZpbSB3aWxsCitvbmx5IHdhaXQgZm9yIG9uZSBzZWNvbmQgKG9yIGFzIGxvbmcgYXMgc3BlY2lmaWVkIHdpdGggdGhlICd0aW1lb3V0bGVuJworb3B0aW9uKS4gIEFmdGVyIHRoYXQgaXQgYXNzdW1lcyB0aGF0IHRoZSAncScgaXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgc3VjaC4gIElmCit5b3UgdHlwZSBzbG93bHksIG9yIHlvdXIgc3lzdGVtIGlzIHNsb3csIHJlc2V0IHRoZSAndGltZW91dCcgb3B0aW9uLiAgVGhlbiB5b3UKK21pZ2h0IHdhbnQgdG8gc2V0IHRoZSAndHRpbWVvdXQnIG9wdGlvbi4KKworCQkJCQkJCSptYXAta2V5cy1mYWlscyoKK1RoZXJlIGlzIG9uZSBzaXR1YXRpb24gd2hlcmUga2V5IGNvZGVzIG1pZ2h0IG5vdCBiZSByZWNvZ25pemVkOgorLSBWaW0gY2FuIG9ubHkgcmVhZCBwYXJ0IG9mIHRoZSBrZXkgY29kZS4gIE1vc3RseSB0aGlzIGlzIG9ubHkgdGhlIGZpcnN0CisgIGNoYXJhY3Rlci4gIFRoaXMgaGFwcGVucyBvbiBzb21lIFVuaXggdmVyc2lvbnMgaW4gYW4geHRlcm0uCistIFRoZSBrZXkgY29kZSBpcyBhZnRlciBjaGFyYWN0ZXIocykgdGhhdCBhcmUgbWFwcGVkLiAgRS5nLiwgIjxGMT48RjE+IiBvcgorICAiZzxGMT4iLgorVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBrZXkgY29kZSBpcyBub3QgcmVjb2duaXplZCBpbiB0aGlzIHNpdHVhdGlvbiwgYW5kIHRoZQorbWFwcGluZyBmYWlscy4KK1RoZXJlIGFyZSB0d28gYWN0aW9ucyBuZWVkZWQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtOgorLSBSZW1vdmUgdGhlICdLJyBmbGFnIGZyb20gJ2Nwb3B0aW9ucycuICBUaGlzIHdpbGwgbWFrZSBWaW0gd2FpdCBmb3IgdGhlIHJlc3QKKyAgb2YgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIGZ1bmN0aW9uIGtleS4KKy0gV2hlbiB1c2luZyA8RjE+IHRvIDxGND4gdGhlIGFjdHVhbCBrZXkgY29kZSBnZW5lcmF0ZWQgbWF5IGNvcnJlc3BvbmQgdG8KKyAgPHhGMT4gdG8gPHhGND4uICBUaGVyZSBhcmUgbWFwcGluZ3MgZnJvbSA8eEYxPiB0byA8RjE+LCA8eEYyPiB0byA8RjI+LCBldGMuLAorICBidXQgdGhlc2UgYXJlIG5vdCByZWNvZ25pemVkIGFmdGVyIGFub3RoZXIgaGFsZiBhIG1hcHBpbmcuICBNYWtlIHN1cmUgdGhlCisgIGtleSBjb2RlcyBmb3IgPEYxPiB0byA8RjQ+IGFyZSBjb3JyZWN0OiA+CisJOnNldCA8RjE+PTx0eXBlIENUUkwtVj48dHlwZSBGMT4KKzwgVHlwZSB0aGUgPEYxPiBhcyBmb3VyIGNoYXJhY3RlcnMuICBUaGUgcGFydCBhZnRlciB0aGUgIj0iIG11c3QgYmUgZG9uZSB3aXRoCisgIHRoZSBhY3R1YWwga2V5cywgbm90IHRoZSBsaXRlcmFsIHRleHQuCitBbm90aGVyIHNvbHV0aW9uIGlzIHRvIHVzZSB0aGUgYWN0dWFsIGtleSBjb2RlIGluIHRoZSBtYXBwaW5nIGZvciB0aGUgc2Vjb25kCitzcGVjaWFsIGtleTogPgorCTptYXAgPEYxPjxFc2M+T1AgOmVjaG8gInllcyI8Q1I+CitEb24ndCB0eXBlIGEgcmVhbCA8RXNjPiwgVmltIHdpbGwgcmVjb2duaXplIHRoZSBrZXkgY29kZSBhbmQgcmVwbGFjZSBpdCB3aXRoCis8RjE+IGFueXdheS4KKworCQkJCQkJKnJlY3Vyc2l2ZV9tYXBwaW5nKgorSWYgeW91IGluY2x1ZGUgdGhlIHtsaHN9IGluIHRoZSB7cmhzfSB5b3UgaGF2ZSBhIHJlY3Vyc2l2ZSBtYXBwaW5nLiAgV2hlbgore2xoc30gaXMgdHlwZWQsIGl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB7cmhzfS4gIFdoZW4gdGhlIHtsaHN9IHdoaWNoIGlzCitpbmNsdWRlZCBpbiB7cmhzfSBpcyBlbmNvdW50ZXJlZCBpdCB3aWxsIGJlIHJlcGxhY2VkIHdpdGgge3Joc30sIGFuZCBzbyBvbi4KK1RoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gcmVwZWF0IGEgY29tbWFuZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGltZXMuICBUaGUKK29ubHkgcHJvYmxlbSBpcyB0aGF0IHRoZSBvbmx5IHdheSB0byBzdG9wIHRoaXMgaXMgYnkgY2F1c2luZyBhbiBlcnJvci4gIFRoZQorbWFjcm9zIHRvIHNvbHZlIGEgbWF6ZSB1c2VzIHRoaXMsIGxvb2sgdGhlcmUgZm9yIGFuIGV4YW1wbGUuICBUaGVyZSBpcyBvbmUKK2V4Y2VwdGlvbjogSWYgdGhlIHtyaHN9IHN0YXJ0cyB3aXRoIHtsaHN9LCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIG5vdCBtYXBwZWQKK2FnYWluICh0aGlzIGlzIFZpIGNvbXBhdGlibGUpLgorRm9yIGV4YW1wbGU6ID4KKyAgIDptYXAgYWIgYWJjZAord2lsbCBleGVjdXRlIHRoZSAiYSIgY29tbWFuZCBhbmQgaW5zZXJ0ICJiY2QiIGluIHRoZSB0ZXh0LiAgVGhlICJhYiIgaW4gdGhlCit7cmhzfSB3aWxsIG5vdCBiZSBtYXBwZWQgYWdhaW4uCisKK0lmIHlvdSB3YW50IHRvIGV4Y2hhbmdlIHRoZSBtZWFuaW5nIG9mIHR3byBrZXlzIHlvdSBzaG91bGQgdXNlIHRoZSA6bm9yZW1hcAorY29tbWFuZC4gIEZvciBleGFtcGxlOiA+CisgICA6bm9yZW1hcCBrIGoKKyAgIDpub3JlbWFwIGogaworVGhpcyB3aWxsIGV4Y2hhbmdlIHRoZSBjdXJzb3IgdXAgYW5kIGRvd24gY29tbWFuZHMuCisKK1dpdGggdGhlIG5vcm1hbCA6bWFwIGNvbW1hbmQsIHdoZW4gdGhlICdyZW1hcCcgb3B0aW9uIGlzIG9uLCBtYXBwaW5nIHRha2VzCitwbGFjZSB1bnRpbCB0aGUgdGV4dCBpcyBmb3VuZCBub3QgdG8gYmUgYSBwYXJ0IG9mIGEge2xoc30uICBGb3IgZXhhbXBsZSwgaWYKK3lvdSB1c2U6ID4KKyAgIDptYXAgeCB5CisgICA6bWFwIHkgeAorVmltIHdpbGwgcmVwbGFjZSB4IHdpdGggeSwgYW5kIHRoZW4geSB3aXRoIHgsIGV0Yy4gIFdoZW4gdGhpcyBoYXMgaGFwcGVuZWQKKydtYXhtYXBkZXB0aCcgdGltZXMgKGRlZmF1bHQgMTAwMCksIFZpbSB3aWxsIGdpdmUgdGhlIGVycm9yIG1lc3NhZ2UKKyJyZWN1cnNpdmUgbWFwcGluZyIuCisKKwkJCQkJCQkqOm1hcC11bmRvKgorSWYgeW91IGluY2x1ZGUgYW4gdW5kbyBjb21tYW5kIGluc2lkZSBhIG1hcHBlZCBzZXF1ZW5jZSwgdGhpcyB3aWxsIGJyaW5nIHRoZQordGV4dCBiYWNrIGluIHRoZSBzdGF0ZSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBtYWNyby4gIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoCit0aGUgb3JpZ2luYWwgVmksIGFzIGxvbmcgYXMgdGhlcmUgaXMgb25seSBvbmUgdW5kbyBjb21tYW5kIGluIHRoZSBtYXBwZWQKK3NlcXVlbmNlIChoYXZpbmcgdHdvIHVuZG8gY29tbWFuZHMgaW4gYSBtYXBwZWQgc2VxdWVuY2UgZGlkIG5vdCBtYWtlIHNlbnNlCitpbiB0aGUgb3JpZ2luYWwgVmksIHlvdSB3b3VsZCBnZXQgYmFjayB0aGUgdGV4dCBiZWZvcmUgdGhlIGZpcnN0IHVuZG8pLgorCisJCQkJCQkJKjptYXAtc3BlY2lhbC1rZXlzKgorVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gbWFwIGEgc3BlY2lhbCBrZXk6CisxLiBUaGUgVmktY29tcGF0aWJsZSBtZXRob2Q6IE1hcCB0aGUga2V5IGNvZGUuICBPZnRlbiB0aGlzIGlzIGEgc2VxdWVuY2UgdGhhdAorICAgc3RhcnRzIHdpdGggPEVzYz4uICBUbyBlbnRlciBhIG1hcHBpbmcgbGlrZSB0aGlzIHlvdSB0eXBlICI6bWFwICIgYW5kIHRoZW4KKyAgIHlvdSBoYXZlIHRvIHR5cGUgQ1RSTC1WIGJlZm9yZSBoaXR0aW5nIHRoZSBmdW5jdGlvbiBrZXkuICBOb3RlIHRoYXQgd2hlbgorICAgdGhlIGtleSBjb2RlIGZvciB0aGUga2V5IGlzIGluIHRoZSB0ZXJtY2FwICh0aGUgdF8gb3B0aW9ucyksIGl0IHdpbGwKKyAgIGF1dG9tYXRpY2FsbHkgYmUgdHJhbnNsYXRlZCBpbnRvIHRoZSBpbnRlcm5hbCBjb2RlIGFuZCBiZWNvbWUgdGhlIHNlY29uZAorICAgd2F5IG9mIG1hcHBpbmcgKHVubGVzcyB0aGUgJ2snIGZsYWcgaXMgaW5jbHVkZWQgaW4gJ2Nwb3B0aW9ucycpLgorMi4gVGhlIHNlY29uZCBtZXRob2QgaXMgdG8gdXNlIHRoZSBpbnRlcm5hbCBjb2RlIGZvciB0aGUgZnVuY3Rpb24ga2V5LiAgVG8KKyAgIGVudGVyIHN1Y2ggYSBtYXBwaW5nIHR5cGUgQ1RSTC1LIGFuZCB0aGVuIGhpdCB0aGUgZnVuY3Rpb24ga2V5LCBvciB1c2UKKyAgIHRoZSBmb3JtICIjMSIsICIjMiIsIC4uICIjOSIsICIjMCIsICI8VXA+IiwgIjxTLURvd24+IiwgIjxTLUY3PiIsIGV0Yy4KKyAgIChzZWUgdGFibGUgb2Yga2V5cyB8a2V5LW5vdGF0aW9ufCwgYWxsIGtleXMgZnJvbSA8VXA+IGNhbiBiZSB1c2VkKS4gIFRoZQorICAgZmlyc3QgdGVuIGZ1bmN0aW9uIGtleXMgY2FuIGJlIGRlZmluZWQgaW4gdHdvIHdheXM6IEp1c3QgdGhlIG51bWJlciwgbGlrZQorICAgIiMyIiwgYW5kIHdpdGggIjxGPiIsIGxpa2UgIjxGMj4iLiAgQm90aCBzdGFuZCBmb3IgZnVuY3Rpb24ga2V5IDIuICAiIzAiCisgICByZWZlcnMgdG8gZnVuY3Rpb24ga2V5IDEwLCBkZWZpbmVkIHdpdGggb3B0aW9uICd0X2YxMCcsIHdoaWNoIG1heSBiZQorICAgZnVuY3Rpb24ga2V5IHplcm8gb24gc29tZSBrZXlib2FyZHMuICBUaGUgPD4gZm9ybSBjYW5ub3QgYmUgdXNlZCB3aGVuCisgICAnY3BvcHRpb25zJyBpbmNsdWRlcyB0aGUgJzwnIGZsYWcuCiszLiBVc2UgdGhlIHRlcm1jYXAgZW50cnksIHdpdGggdGhlIGZvcm0gPHRfeHg+LCB3aGVyZSAieHgiIGlzIHRoZSBuYW1lIG9mIHRoZQorICAgdGVybWNhcCBlbnRyeS4gIEFueSBzdHJpbmcgZW50cnkgY2FuIGJlIHVzZWQuICBGb3IgZXhhbXBsZTogPgorICAgICA6bWFwIDx0X0YzPiBHCis8ICBNYXBzIGZ1bmN0aW9uIGtleSAxMyB0byAiRyIuICBUaGlzIGRvZXMgbm90IHdvcmsgaWYgJ2Nwb3B0aW9ucycgaW5jbHVkZXMKKyAgIHRoZSAnPCcgZmxhZy4KKworVGhlIGFkdmFudGFnZSBvZiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBtZXRob2QgaXMgdGhhdCB0aGUgbWFwcGluZyB3aWxsIHdvcmsgb24KK2RpZmZlcmVudCB0ZXJtaW5hbHMgd2l0aG91dCBtb2RpZmljYXRpb24gKHRoZSBmdW5jdGlvbiBrZXkgd2lsbCBiZQordHJhbnNsYXRlZCBpbnRvIHRoZSBzYW1lIGludGVybmFsIGNvZGUgb3IgdGhlIGFjdHVhbCBrZXkgY29kZSwgbm8gbWF0dGVyIHdoYXQKK3Rlcm1pbmFsIHlvdSBhcmUgdXNpbmcuICBUaGUgdGVybWNhcCBtdXN0IGJlIGNvcnJlY3QgZm9yIHRoaXMgdG8gd29yaywgYW5kIHlvdQorbXVzdCB1c2UgdGhlIHNhbWUgbWFwcGluZ3MpLgorCitERVRBSUw6IFZpbSBmaXJzdCBjaGVja3MgaWYgYSBzZXF1ZW5jZSBmcm9tIHRoZSBrZXlib2FyZCBpcyBtYXBwZWQuICBJZiBpdAoraXNuJ3QgdGhlIHRlcm1pbmFsIGtleSBjb2RlcyBhcmUgdHJpZWQgKHNlZSB8dGVybWluYWwtb3B0aW9uc3wpLiAgSWYgYQordGVybWluYWwgY29kZSBpcyBmb3VuZCBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBpbnRlcm5hbCBjb2RlLiAgVGhlbiB0aGUgY2hlY2sKK2ZvciBhIG1hcHBpbmcgaXMgZG9uZSBhZ2FpbiAoc28geW91IGNhbiBtYXAgYW4gaW50ZXJuYWwgY29kZSB0byBzb21ldGhpbmcKK2Vsc2UpLiAgV2hhdCBpcyB3cml0dGVuIGludG8gdGhlIHNjcmlwdCBmaWxlIGRlcGVuZHMgb24gd2hhdCBpcyByZWNvZ25pemVkLgorSWYgdGhlIHRlcm1pbmFsIGtleSBjb2RlIHdhcyByZWNvZ25pemVkIGFzIGEgbWFwcGluZyB0aGUga2V5IGNvZGUgaXRzZWxmIGlzCit3cml0dGVuIHRvIHRoZSBzY3JpcHQgZmlsZS4gIElmIGl0IHdhcyByZWNvZ25pemVkIGFzIGEgdGVybWluYWwgY29kZSB0aGUKK2ludGVybmFsIGNvZGUgaXMgd3JpdHRlbiB0byB0aGUgc2NyaXB0IGZpbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQWJicmV2aWF0aW9ucwkJCSphYmJyZXZpYXRpb25zKiAqQWJicmV2aWF0aW9ucyoKKworQWJicmV2aWF0aW9ucyBhcmUgdXNlZCBpbiBJbnNlcnQgbW9kZSwgUmVwbGFjZSBtb2RlIGFuZCBDb21tYW5kLWxpbmUgbW9kZS4KK0lmIHlvdSBlbnRlciBhIHdvcmQgdGhhdCBpcyBhbiBhYmJyZXZpYXRpb24sIGl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHdvcmQgaXQKK3N0YW5kcyBmb3IuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNhdmUgdHlwaW5nIGZvciBvZnRlbiB1c2VkIGxvbmcgd29yZHMuICBBbmQKK3lvdSBjYW4gdXNlIGl0IHRvIGF1dG9tYXRpY2FsbHkgY29ycmVjdCBvYnZpb3VzIHNwZWxsaW5nIGVycm9ycy4KK0V4YW1wbGVzOgorCisJOmlhYiBtcyBNaWNyb1NvZnQKKwk6aWFiIHRpaHMgdGhpcworCitUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgYWJicmV2aWF0aW9uczoKKworZnVsbC1pZAkgIFRoZSAiZnVsbC1pZCIgdHlwZSBjb25zaXN0cyBlbnRpcmVseSBvZiBrZXl3b3JkIGNoYXJhY3RlcnMgKGxldHRlcnMKKwkgIGFuZCBjaGFyYWN0ZXJzIGZyb20gJ2lza2V5d29yZCcgb3B0aW9uKS4gIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uCisJICBhYmJyZXZpYXRpb24uCisKKwkgIEV4YW1wbGVzOiAiZm9vIiwgImczIiwgIi0xIgorCitlbmQtaWQJICBUaGUgImVuZC1pZCIgdHlwZSBlbmRzIGluIGEga2V5d29yZCBjaGFyYWN0ZXIsIGJ1dCBhbGwgdGhlIG90aGVyCisJICBjaGFyYWN0ZXJzIGFyZSBub3Qga2V5d29yZCBjaGFyYWN0ZXJzLgorCisJICBFeGFtcGxlczogIiNpIiwgIi4uZiIsICIkLzciCisKK25vbi1pZAkgIFRoZSAibm9uLWlkIiB0eXBlIGVuZHMgaW4gYSBub24ta2V5d29yZCBjaGFyYWN0ZXIsIHRoZSBvdGhlcgorCSAgY2hhcmFjdGVycyBtYXkgYmUgb2YgYW55IHR5cGUsIGV4Y2x1ZGluZyBzcGFjZSBhbmQgVGFiLiAge3RoaXMgdHlwZQorCSAgaXMgbm90IHN1cHBvcnRlZCBieSBWaX0KKworCSAgRXhhbXBsZXM6ICJkZWYjIiwgIjQvNyQiCisKK0V4YW1wbGVzIG9mIHN0cmluZ3MgdGhhdCBjYW5ub3QgYmUgYWJicmV2aWF0aW9uczogImEuYiIsICIjZGVmIiwgImEgYiIsICJfJHIiCisKK0FuIGFiYnJldmlhdGlvbiBpcyBvbmx5IHJlY29nbml6ZWQgd2hlbiB5b3UgdHlwZSBhIG5vbi1rZXl3b3JkIGNoYXJhY3Rlci4KK1RoaXMgY2FuIGFsc28gYmUgdGhlIDxFc2M+IHRoYXQgZW5kcyBpbnNlcnQgbW9kZSBvciB0aGUgPENSPiB0aGF0IGVuZHMgYQorY29tbWFuZC4gIFRoZSBub24ta2V5d29yZCBjaGFyYWN0ZXIgd2hpY2ggZW5kcyB0aGUgYWJicmV2aWF0aW9uIGlzIGluc2VydGVkCithZnRlciB0aGUgZXhwYW5kZWQgYWJicmV2aWF0aW9uLiAgQW4gZXhjZXB0aW9uIHRvIHRoaXMgaXMgdGhlIGNoYXJhY3RlciA8Qy1dPiwKK3doaWNoIGlzIHVzZWQgdG8gZXhwYW5kIGFuIGFiYnJldmlhdGlvbiB3aXRob3V0IGluc2VydGluZyBhbnkgZXh0cmEKK2NoYXJhY3RlcnMuCisKK0V4YW1wbGU6ID4KKyAgIDphYiBoaAloZWxsbworPAkgICAgImhoPFNwYWNlPiIgaXMgZXhwYW5kZWQgdG8gImhlbGxvPFNwYWNlPiIKKwkgICAgImhoPEMtXT4iIGlzIGV4cGFuZGVkIHRvICJoZWxsbyIKKworVGhlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjdXJzb3IgbXVzdCBtYXRjaCB0aGUgYWJicmV2aWF0aW9uLiAgRWFjaCB0eXBlIGhhcworYW4gYWRkaXRpb25hbCBydWxlOgorCitmdWxsLWlkCSAgSW4gZnJvbnQgb2YgdGhlIG1hdGNoIGlzIGEgbm9uLWtleXdvcmQgY2hhcmFjdGVyLCBvciB0aGlzIGlzIHdoZXJlCisJICB0aGUgbGluZSBvciBpbnNlcnRpb24gc3RhcnRzLiAgRXhjZXB0aW9uOiBXaGVuIHRoZSBhYmJyZXZpYXRpb24gaXMKKwkgIG9ubHkgb25lIGNoYXJhY3RlciwgaXQgaXMgbm90IHJlY29nbml6ZWQgaWYgdGhlcmUgaXMgYSBub24ta2V5d29yZAorCSAgY2hhcmFjdGVyIGluIGZyb250IG9mIGl0LCBvdGhlciB0aGFuIGEgc3BhY2Ugb3IgYSA8VGFiPi4KKworZW5kLWlkCSAgSW4gZnJvbnQgb2YgdGhlIG1hdGNoIGlzIGEga2V5d29yZCBjaGFyYWN0ZXIsIG9yIGEgc3BhY2Ugb3IgYSA8VGFiPiwKKwkgIG9yIHRoaXMgaXMgd2hlcmUgdGhlIGxpbmUgb3IgaW5zZXJ0aW9uIHN0YXJ0cy4KKworbm9uLWlkCSAgSW4gZnJvbnQgb2YgdGhlIG1hdGNoIGlzIGEgc3BhY2UsIDxUYWI+IG9yIHRoZSBzdGFydCBvZiB0aGUgbGluZSBvcgorCSAgdGhlIGluc2VydGlvbi4KKworRXhhbXBsZXM6ICh7Q1VSU09SfSBpcyB3aGVyZSB5b3UgdHlwZSBhIG5vbi1rZXl3b3JkIGNoYXJhY3RlcikgPgorICAgOmFiIGZvbyAgIGZvdXIgb2xkIG90dGVycworPAkJIiBmb297Q1VSU09SfSIJICBpcyBleHBhbmRlZCB0byAiIGZvdXIgb2xkIG90dGVycyIKKwkJIiBmb29iYXJ7Q1VSU09SfSIgaXMgbm90IGV4cGFuZGVkCisJCSJiYXJmb297Q1VSU09SfSIgIGlzIG5vdCBleHBhbmRlZAorPgorICAgOmFiICNpICNpbmNsdWRlCis8CQkiI2l7Q1VSU09SfSIJICBpcyBleHBhbmRlZCB0byAiI2luY2x1ZGUiCisJCSI+I2l7Q1VSU09SfSIJICBpcyBub3QgZXhwYW5kZWQKKz4KKyAgIDphYiA7OyA8ZW5kb2ZsaW5lPiIKKzwJCSJ0ZXN0OzsiCSAgaXMgbm90IGV4cGFuZGVkCisJCSJ0ZXN0IDs7IgkgIGlzIGV4cGFuZGVkIHRvICJ0ZXN0IDxlbmRvZmxpbmU+IgorCitUbyBhdm9pZCB0aGUgYWJicmV2aWF0aW9uIGluIGluc2VydCBtb2RlOiBUeXBlIHBhcnQgb2YgdGhlIGFiYnJldmlhdGlvbiwgZXhpdAoraW5zZXJ0IG1vZGUgd2l0aCA8RXNjPiwgcmUtZW50ZXIgaW5zZXJ0IG1vZGUgd2l0aCAiYSIgYW5kIHR5cGUgdGhlIHJlc3QuICBPcgordHlwZSBDVFJMLVYgYmVmb3JlIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGFiYnJldmlhdGlvbi4KK1RvIGF2b2lkIHRoZSBhYmJyZXZpYXRpb24gaW4gQ29tbWFuZC1saW5lIG1vZGU6IFR5cGUgQ1RSTC1WIHR3aWNlIHNvbWV3aGVyZSBpbgordGhlIGFiYnJldmlhdGlvbiB0byBhdm9pZCBpdCB0byBiZSByZXBsYWNlZC4gIEEgQ1RSTC1WIGluIGZyb250IG9mIGEgbm9ybWFsCitjaGFyYWN0ZXIgaXMgbW9zdGx5IGlnbm9yZWQgb3RoZXJ3aXNlLgorCitJdCBpcyBwb3NzaWJsZSB0byBtb3ZlIHRoZSBjdXJzb3IgYWZ0ZXIgYW4gYWJicmV2aWF0aW9uOiA+CisgICA6aWFiIGlmIGlmICgpPExlZnQ+CitUaGlzIGRvZXMgbm90IHdvcmsgaWYgJ2Nwb3B0aW9ucycgaW5jbHVkZXMgdGhlICc8JyBmbGFnLiB8PD58CisKK1lvdSBjYW4gZXZlbiBkbyBtb3JlIGNvbXBsaWNhdGVkIHRoaW5ncy4gIEZvciBleGFtcGxlLCB0byBjb25zdW1lIHRoZSBzcGFjZQordHlwZWQgYWZ0ZXIgYW4gYWJicmV2aWF0aW9uOiA+CisgICBmdW5jIEVhdGNoYXIocGF0KQorICAgICAgbGV0IGMgPSBucjJjaGFyKGdldGNoYXIoKSkKKyAgICAgIHJldHVybiAoYyA9fiBhOnBhdCkgPyAnJyA6IGMKKyAgIGVuZGZ1bmMKKyAgIGlhYmJyIDxzaWxlbnQ+IGlmIGlmICgpPExlZnQ+PEMtUj49RWF0Y2hhcignXHMnKTxDUj4KKworVGhlcmUgYXJlIG5vIGRlZmF1bHQgYWJicmV2aWF0aW9ucy4KKworQWJicmV2aWF0aW9ucyBhcmUgbmV2ZXIgcmVjdXJzaXZlLiAgWW91IGNhbiB1c2UgIjphYiBmIGYtby1vIiB3aXRob3V0IGFueQorcHJvYmxlbS4gIEJ1dCBhYmJyZXZpYXRpb25zIGNhbiBiZSBtYXBwZWQuICB7c29tZSB2ZXJzaW9ucyBvZiBWaSBzdXBwb3J0CityZWN1cnNpdmUgYWJicmV2aWF0aW9ucywgZm9yIG5vIGFwcGFyZW50IHJlYXNvbn0KKworQWJicmV2aWF0aW9ucyBhcmUgZGlzYWJsZWQgaWYgdGhlICdwYXN0ZScgb3B0aW9uIGlzIG9uLgorCisJCQkJKjphYmJyZXZpYXRlLWxvY2FsKiAqOmFiYnJldmlhdGUtPGJ1ZmZlcj4qCitKdXN0IGxpa2UgbWFwcGluZ3MsIGFiYnJldmlhdGlvbnMgY2FuIGJlIGxvY2FsIHRvIGEgYnVmZmVyLiAgVGhpcyBpcyBtb3N0bHkKK3VzZWQgaW4gYSB8ZmlsZXR5cGUtcGx1Z2lufCBmaWxlLiAgRXhhbXBsZSBmb3IgYSBDIHBsdWdpbiBmaWxlOiA+CisJOmFiYiA8YnVmZmVyPiBGRiAgZm9yIChpID0gMDsgaSA8IDsgKytpKQorPAorCQkJCQkJKjphYiogKjphYmJyZXZpYXRlKgorOmFiW2JyZXZpYXRlXQkJbGlzdCBhbGwgYWJicmV2aWF0aW9ucy4gIFRoZSBjaGFyYWN0ZXIgaW4gdGhlIGZpcnN0CisJCQljb2x1bW4gaW5kaWNhdGVzIHRoZSBtb2RlIHdoZXJlIHRoZSBhYmJyZXZpYXRpb24gaXMKKwkJCXVzZWQ6ICdpJyBmb3IgaW5zZXJ0IG1vZGUsICdjJyBmb3IgQ29tbWFuZC1saW5lCisJCQltb2RlLCAnIScgZm9yIGJvdGguICBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgZm9yCisJCQltYXBwaW5ncywgc2VlIHxtYXAtbGlzdGluZ3wuCisKKzphYlticmV2aWF0ZV0ge2xoc30JbGlzdCB0aGUgYWJicmV2aWF0aW9ucyB0aGF0IHN0YXJ0IHdpdGgge2xoc30KKwkJCVlvdSBtYXkgbmVlZCB0byBpbnNlcnQgYSBDVFJMLVYgKHR5cGUgaXQgdHdpY2UpIHRvCisJCQlhdm9pZCB0aGF0IGEgdHlwZWQge2xoc30gaXMgZXhwYW5kZWQsIHNpbmNlCisJCQljb21tYW5kLWxpbmUgYWJicmV2aWF0aW9ucyBhcHBseSBoZXJlLgorCis6YWJbYnJldmlhdGVdIHtsaHN9IHtyaHN9CisJCQlhZGQgYWJicmV2aWF0aW9uIGZvciB7bGhzfSB0byB7cmhzfS4gIElmIHtsaHN9IGFscmVhZHkKKwkJCWV4aXN0ZWQgaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IHtyaHN9LiAge3Joc30gbWF5CisJCQljb250YWluIHNwYWNlcy4KKworCQkJCQkJKjp1bmEqICo6dW5hYmJyZXZpYXRlKgorOnVuYVtiYnJldmlhdGVdIHtsaHN9CVJlbW92ZSBhYmJyZXZpYXRpb24gZm9yIHtsaHN9IGZyb20gdGhlIGxpc3QuICBJZiBub25lCisJCQlpcyBmb3VuZCwgcmVtb3ZlIGFiYnJldmlhdGlvbnMgaW4gd2hpY2gge2xoc30gbWF0Y2hlcworCQkJd2l0aCB0aGUge3Joc30uICBUaGlzIGlzIGRvbmUgc28gdGhhdCB5b3UgY2FuIGV2ZW4KKwkJCXJlbW92ZSBhYmJyZXZpYXRpb25zIGFmdGVyIGV4cGFuc2lvbi4gIFRvIGF2b2lkCisJCQlleHBhbnNpb24gaW5zZXJ0IGEgQ1RSTC1WICh0eXBlIGl0IHR3aWNlKS4KKworCQkJCQkJKjpub3JlYSogKjpub3JlYWJicmV2KgorOm5vcmVhW2JicmV2XSBbbGhzXSBbcmhzXQorCQkJc2FtZSBhcyAiOmFiIiwgYnV0IG5vIHJlbWFwcGluZyBmb3IgdGhpcyB7cmhzfSB7bm90CisJCQlpbiBWaX0KKworCQkJCQkJKjpjYSogKjpjYWJicmV2KgorOmNhW2JicmV2XSBbbGhzXSBbcmhzXQlzYW1lIGFzICI6YWIiLCBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlIG9ubHkuICB7bm90CisJCQlpbiBWaX0KKworCQkJCQkJKjpjdW5hKiAqOmN1bmFiYnJldioKKzpjdW5hW2JicmV2XSB7bGhzfQlzYW1lIGFzICI6dW5hIiwgYnV0IGZvciBDb21tYW5kLWxpbmUgbW9kZSBvbmx5LiAge25vdAorCQkJaW4gVml9CisKKwkJCQkJCSo6Y25vcmVhKiAqOmNub3JlYWJicmV2KgorOmNub3JlYVtiYnJldl0gW2xoc10gW3Joc10KKwkJCXNhbWUgYXMgIjphYiIsIGJ1dCBmb3IgQ29tbWFuZC1saW5lIG1vZGUgb25seSBhbmQgbm8KKwkJCXJlbWFwcGluZyBmb3IgdGhpcyB7cmhzfSB7bm90IGluIFZpfQorCisJCQkJCQkqOmlhKiAqOmlhYmJyZXYqCis6aWFbYmJyZXZdIFtsaHNdIFtyaHNdCXNhbWUgYXMgIjphYiIsIGJ1dCBmb3IgSW5zZXJ0IG1vZGUgb25seS4gIHtub3QgaW4gVml9CisKKwkJCQkJCSo6aXVuYSogKjppdW5hYmJyZXYqCis6aXVuYVtiYnJldl0ge2xoc30Jc2FtZSBhcyAiOnVuYSIsIGJ1dCBmb3IgaW5zZXJ0IG1vZGUgb25seS4gIHtub3QgaW4KKwkJCVZpfQorCisJCQkJCQkqOmlub3JlYSogKjppbm9yZWFiYnJldioKKzppbm9yZWFbYmJyZXZdIFtsaHNdIFtyaHNdCisJCQlzYW1lIGFzICI6YWIiLCBidXQgZm9yIEluc2VydCBtb2RlIG9ubHkgYW5kIG5vCisJCQlyZW1hcHBpbmcgZm9yIHRoaXMge3Joc30ge25vdCBpbiBWaX0KKworCQkJCQkJCSo6YWJjKiAqOmFiY2xlYXIqCis6YWJjW2xlYXJdCQlSZW1vdmUgYWxsIGFiYnJldmlhdGlvbnMuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjppYWJjKiAqOmlhYmNsZWFyKgorOmlhYmNbbGVhcl0JCVJlbW92ZSBhbGwgYWJicmV2aWF0aW9ucyBmb3IgSW5zZXJ0IG1vZGUuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjpjYWJjKiAqOmNhYmNsZWFyKgorOmNhYmNbbGVhcl0JCVJlbW92ZSBhbGwgYWJicmV2aWF0aW9ucyBmb3IgQ29tbWFuZC1saW5lIG1vZGUuICB7bm90CisJCQlpbiBWaX0KKworCQkJCQkJCSp1c2luZ19DVFJMLVYqCitJdCBpcyBwb3NzaWJsZSB0byB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSByaHMgb2YgYW4gYWJicmV2aWF0aW9uLgorQ1RSTC1WIGhhcyB0byBiZSB1c2VkIHRvIGF2b2lkIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgbW9zdCBub24gcHJpbnRhYmxlCitjaGFyYWN0ZXJzLiAgSG93IG1hbnkgQ1RSTC1WcyBuZWVkIHRvIGJlIHR5cGVkIGRlcGVuZHMgb24gaG93IHlvdSBlbnRlciB0aGUKK2FiYnJldmlhdGlvbi4gIFRoaXMgYWxzbyBhcHBsaWVzIHRvIG1hcHBpbmdzLiAgTGV0J3MgdXNlIGFuIGV4YW1wbGUgaGVyZS4KKworU3VwcG9zZSB5b3Ugd2FudCB0byBhYmJyZXZpYXRlICJlc2MiIHRvIGVudGVyIGFuIDxFc2M+IGNoYXJhY3Rlci4gIFdoZW4geW91Cit0eXBlIHRoZSAiOmFiIiBjb21tYW5kIGluIFZpbSwgeW91IGhhdmUgdG8gZW50ZXIgdGhpczogKGhlcmUgXlYgaXMgYSBDVFJMLVYKK2FuZCBeWyBpcyA8RXNjPikKKworWW91IHR5cGU6ICAgYWIgZXNjIF5WXlZeVl5WXlZeWworCisJQWxsIGtleWJvYXJkIGlucHV0IGlzIHN1YmplY3RlZCB0byBeViBxdW90ZSBpbnRlcnByZXRhdGlvbiwgc28KKwl0aGUgZmlyc3QsIHRoaXJkLCBhbmQgZmlmdGggXlYgIGNoYXJhY3RlcnMgc2ltcGx5IGFsbG93IHRoZSBzZWNvbmQsCisJYW5kIGZvdXJ0aCBeVnMsIGFuZCB0aGUgXlssIHRvIGJlIGVudGVyZWQgaW50byB0aGUgY29tbWFuZC1saW5lLgorCitZb3Ugc2VlOiAgICBhYiBlc2MgXlZeVl5bCisKKwlUaGUgY29tbWFuZC1saW5lIGNvbnRhaW5zIHR3byBhY3R1YWwgXlZzIGJlZm9yZSB0aGUgXlsuICBUaGlzIGlzCisJaG93IGl0IHNob3VsZCBhcHBlYXIgaW4geW91ciAuZXhyYyBmaWxlLCBpZiB5b3UgY2hvb3NlIHRvIGdvIHRoYXQKKwlyb3V0ZS4gIFRoZSBmaXJzdCBeViBpcyB0aGVyZSB0byBxdW90ZSB0aGUgc2Vjb25kIF5WOyB0aGUgOmFiCisJY29tbWFuZCB1c2VzIF5WIGFzIGl0cyBvd24gcXVvdGUgY2hhcmFjdGVyLCBzbyB5b3UgY2FuIGluY2x1ZGUgcXVvdGVkCisJd2hpdGVzcGFjZSBvciB0aGUgfCBjaGFyYWN0ZXIgaW4gdGhlIGFiYnJldmlhdGlvbi4gICBUaGUgOmFiIGNvbW1hbmQKKwlkb2Vzbid0IGRvIGFueXRoaW5nIHNwZWNpYWwgd2l0aCB0aGUgXlsgY2hhcmFjdGVyLCBzbyBpdCBkb2Vzbid0IG5lZWQKKwl0byBiZSBxdW90ZWQuICAoQWx0aG91Z2ggcXVvdGluZyBpc24ndCBoYXJtZnVsOyB0aGF0J3Mgd2h5IHR5cGluZyA3CisJW2J1dCBub3QgOCFdIF5WcyB3b3Jrcy4pCisKK1N0b3JlZCBhczogIGVzYyAgICAgXlZeWworCisJQWZ0ZXIgcGFyc2luZywgdGhlIGFiYnJldmlhdGlvbidzIHNob3J0IGZvcm0gKCJlc2MiKSBhbmQgbG9uZyBmb3JtCisJKHRoZSB0d28gY2hhcmFjdGVycyAiXlZeWyIpIGFyZSBzdG9yZWQgaW4gdGhlIGFiYnJldmlhdGlvbiB0YWJsZS4KKwlJZiB5b3UgZ2l2ZSB0aGUgOmFiIGNvbW1hbmQgd2l0aCBubyBhcmd1bWVudHMsIHRoaXMgaXMgaG93IHRoZQorCWFiYnJldmlhdGlvbiB3aWxsIGJlIGRpc3BsYXllZC4KKworCUxhdGVyLCB3aGVuIHRoZSBhYmJyZXZpYXRpb24gaXMgZXhwYW5kZWQgYmVjYXVzZSB0aGUgdXNlciB0eXBlZCBpbgorCXRoZSB3b3JkICJlc2MiLCB0aGUgbG9uZyBmb3JtIGlzIHN1YmplY3RlZCB0byB0aGUgc2FtZSB0eXBlIG9mCisJXlYgaW50ZXJwcmV0YXRpb24gYXMga2V5Ym9hcmQgaW5wdXQuICBTbyB0aGUgXlYgcHJvdGVjdHMgdGhlIF5bCisJY2hhcmFjdGVyIGZyb20gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgdGhlICJleGl0IGlucHV0LW1vZGUiIGNoYXJhY3Rlci4KKwlJbnN0ZWFkLCB0aGUgXlsgaXMgaW5zZXJ0ZWQgaW50byB0aGUgdGV4dC4KKworRXhwYW5kcyB0bzogXlsKKworW2V4YW1wbGUgZ2l2ZW4gYnkgU3RldmUgS2lya2VuZGFsbF0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBMb2NhbCBtYXBwaW5ncyBhbmQgZnVuY3Rpb25zCQkJCSpzY3JpcHQtbG9jYWwqCisKK1doZW4gdXNpbmcgc2V2ZXJhbCBWaW0gc2NyaXB0IGZpbGVzLCB0aGVyZSBpcyB0aGUgZGFuZ2VyIHRoYXQgbWFwcGluZ3MgYW5kCitmdW5jdGlvbnMgdXNlZCBpbiBvbmUgc2NyaXB0IHVzZSB0aGUgc2FtZSBuYW1lIGFzIGluIG90aGVyIHNjcmlwdHMuICBUbyBhdm9pZAordGhpcywgdGhleSBjYW4gYmUgbWFkZSBsb2NhbCB0byB0aGUgc2NyaXB0LgorCisJCQkJCQkqPFNJRD4qICo8U05SPiogKkU4MSoKK1RoZSBzdHJpbmcgIjxTSUQ+IiBjYW4gYmUgdXNlZCBpbiBhIG1hcHBpbmcgb3IgbWVudS4gIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUKKyc8JyBmbGFnIGlzIG5vdCBwcmVzZW50IGluICdjcG9wdGlvbnMnLgorICAgV2hlbiBleGVjdXRpbmcgdGhlIG1hcCBjb21tYW5kLCBWaW0gd2lsbCByZXBsYWNlICI8U0lEPiIgd2l0aCB0aGUgc3BlY2lhbAora2V5IGNvZGUgPFNOUj4sIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIHRoYXQncyB1bmlxdWUgZm9yIHRoZSBzY3JpcHQsIGFuZCBhbgordW5kZXJzY29yZS4gIEV4YW1wbGU6ID4KKwk6bWFwIDxTSUQ+QWRkCitjb3VsZCBkZWZpbmUgYSBtYXBwaW5nICI8U05SPjIzX0FkZCIuCisKK1doZW4gZGVmaW5pbmcgYSBmdW5jdGlvbiBpbiBhIHNjcmlwdCwgInM6IiBjYW4gYmUgcHJlcGVuZGVkIHRvIHRoZSBuYW1lIHRvCittYWtlIGl0IGxvY2FsIHRvIHRoZSBzY3JpcHQuICBCdXQgd2hlbiBhIG1hcHBpbmcgaXMgZXhlY3V0ZWQgZnJvbSBvdXRzaWRlIG9mCit0aGUgc2NyaXB0LCBpdCBkb2Vzbid0IGtub3cgaW4gd2hpY2ggc2NyaXB0IHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZC4gIFRvCithdm9pZCB0aGlzIHByb2JsZW0sIHVzZSAiPFNJRD4iIGluc3RlYWQgb2YgInM6Ii4gIFRoZSBzYW1lIHRyYW5zbGF0aW9uIGlzIGRvbmUKK2FzIGZvciBtYXBwaW5ncy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZGVmaW5lIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gaW4KK21hcHBpbmcuCisKK1doZW4gYSBsb2NhbCBmdW5jdGlvbiBpcyBleGVjdXRlZCwgaXQgcnVucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0IGl0IHdhcworZGVmaW5lZCBpbi4gIFRoaXMgbWVhbnMgdGhhdCBuZXcgZnVuY3Rpb25zIGFuZCBtYXBwaW5ncyBpdCBkZWZpbmVzIGNhbiBhbHNvCit1c2UgInM6IiBvciAiPFNJRD4iIGFuZCBpdCB3aWxsIHVzZSB0aGUgc2FtZSB1bmlxdWUgbnVtYmVyIGFzIHdoZW4gdGhlCitmdW5jdGlvbiBpdHNlbGYgd2FzIGRlZmluZWQuICBBbHNvLCB0aGUgInM6dmFyIiBsb2NhbCBzY3JpcHQgdmFyaWFibGVzIGNhbiBiZQordXNlZC4KKworV2hlbiBleGVjdXRpbmcgYW4gYXV0b2NvbW1hbmQgb3IgYSB1c2VyIGNvbW1hbmQsIGl0IHdpbGwgcnVuIGluIHRoZSBjb250ZXh0IG9mCit0aGUgc2NyaXB0IGl0IHdhcyBkZWZpbmVkIGluLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0aGF0IHRoZSBjb21tYW5kIGNhbGxzIGEKK2xvY2FsIGZ1bmN0aW9uIG9yIHVzZXMgYSBsb2NhbCBtYXBwaW5nLgorCitPdGhlcndpc2UsIHVzaW5nICI8U0lEPiIgb3V0c2lkZSBvZiBhIHNjcmlwdCBjb250ZXh0IGlzIGFuIGVycm9yLgorCitJZiB5b3UgbmVlZCB0byBnZXQgdGhlIHNjcmlwdCBudW1iZXIgdG8gdXNlIGluIGEgY29tcGxpY2F0ZWQgc2NyaXB0LCB5b3UgY2FuCit1c2UgdGhpcyB0cmljazogPgorCTptYXAgPFNJRD54eCA8U0lEPnh4CisJOmxldCBzOnNpZCA9IG1hcGFyZygiPFNJRD54eCIpCisJOnVubWFwIDxTSUQ+eHgKK0FuZCByZW1vdmUgdGhlIHRyYWlsaW5nICJ4eCIuCisKK1RoZSAiPFNOUj4iIHdpbGwgYmUgc2hvd24gd2hlbiBsaXN0aW5nIGZ1bmN0aW9ucyBhbmQgbWFwcGluZ3MuICBUaGlzIGlzIHVzZWZ1bAordG8gZmluZCBvdXQgd2hhdCB0aGV5IGFyZSBkZWZpbmVkIHRvLgorCitUaGUgfDpzY3JpcHRuYW1lc3wgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZWUgd2hpY2ggc2NyaXB0cyBoYXZlIGJlZW4gc291cmNlZAorYW5kIHdoYXQgdGhlaXIgPFNOUj4gbnVtYmVyIGlzLgorCitUaGlzIGlzIGFsbCB7bm90IGluIFZpfSBhbmQge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArZXZhbAorZmVhdHVyZX0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVXNlci1kZWZpbmVkIGNvbW1hbmRzCQkJCSp1c2VyLWNvbW1hbmRzKgorCitJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgeW91ciBvd24gRXggY29tbWFuZHMuIEEgdXNlci1kZWZpbmVkIGNvbW1hbmQgY2FuIGFjdAoranVzdCBsaWtlIGEgYnVpbHQtaW4gY29tbWFuZCAoaXQgY2FuIGhhdmUgYSByYW5nZSBvciBhcmd1bWVudHMsIGFyZ3VtZW50cyBjYW4KK2JlIGNvbXBsZXRlZCBhcyBmaWxlbmFtZXMgb3IgYnVmZmVyIG5hbWVzLCBldGMpLCBleGNlcHQgdGhhdCB3aGVuIHRoZSBjb21tYW5kCitpcyBleGVjdXRlZCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhIG5vcm1hbCBleCBjb21tYW5kIGFuZCB0aGVuIGV4ZWN1dGVkLgorCitGb3Igc3RhcnRlcnM6IFNlZSBzZWN0aW9uIHw0MC4yfCBpbiB0aGUgdXNlciBtYW51YWwuCisKKwkJCQkJCSpFMTgzKiAqdXNlci1jbWQtYW1iaWd1b3VzKgorQWxsIHVzZXIgZGVmaW5lZCBjb21tYW5kcyBtdXN0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciwgdG8gYXZvaWQKK2NvbmZ1c2lvbiB3aXRoIGJ1aWx0aW4gY29tbWFuZHMuIChUaGVyZSBhcmUgYSBmZXcgYnVpbHRpbiBjb21tYW5kcywgbm90YWJseQorOk5leHQsIDpQcmludCBhbmQgOlgsIHdoaWNoIGRvIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlci4gIFRoZSBidWlsdGluCit3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UgaW4gdGhlc2UgY2FzZXMpLiAgVGhlIG90aGVyIGNoYXJhY3RlcnMgb2YgdGhlIHVzZXIKK2NvbW1hbmQgY2FuIGJlIHVwcGVyY2FzZSBsZXR0ZXJzLCBsb3dlcmNhc2UgbGV0dGVycyBvciBkaWdpdHMuICBXaGVuIHVzaW5nCitkaWdpdHMsIG5vdGUgdGhhdCBvdGhlciBjb21tYW5kcyB0aGF0IHRha2UgYSBudW1lcmljIGFyZ3VtZW50IG1heSBiZWNvbWUKK2FtYmlndW91cy4gIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZCAiOkNjMiIgY291bGQgYmUgdGhlIHVzZXIgY29tbWFuZCAiOkNjMiIKK3dpdGhvdXQgYW4gYXJndW1lbnQsIG9yIHRoZSBjb21tYW5kICI6Q2MiIHdpdGggYXJndW1lbnQgIjIiLiAgSXQgaXMgYWR2aXNlZCB0bworcHV0IGEgc3BhY2UgYmV0d2VlbiB0aGUgY29tbWFuZCBuYW1lIGFuZCB0aGUgYXJndW1lbnQgdG8gYXZvaWQgdGhlc2UgcHJvYmxlbXMuCisKK1doZW4gdXNpbmcgYSB1c2VyLWRlZmluZWQgY29tbWFuZCwgdGhlIGNvbW1hbmQgY2FuIGJlIGFiYnJldmlhdGVkLiBIb3dldmVyLCBpZgorYW4gYWJicmV2aWF0aW9uIGlzIG5vdCB1bmlxdWUsIGFuIGVycm9yIHdpbGwgYmUgaXNzdWVkLiBGdXJ0aGVybW9yZSwgYQorYnVpbHQtaW4gY29tbWFuZCB3aWxsIGFsd2F5cyB0YWtlIHByZWNlZGVuY2UuCisKK0V4YW1wbGU6ID4KKwk6Y29tbWFuZCBSZW5hbWUgLi4uCisJOmNvbW1hbmQgUmVudW1iZXIgLi4uCisJOlJlbmEJCQkJIiBNZWFucyAiUmVuYW1lIgorCTpSZW51CQkJCSIgTWVhbnMgIlJlbnVtYmVyIgorCTpSZW4JCQkJIiBFcnJvciAtIGFtYmlndW91cworCTpjb21tYW5kIFBhc3RlIC4uLgorCTpQCQkJCSIgVGhlIGJ1aWx0LWluIDpQcmludAorCitJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGZ1bGwgbmFtZXMgZm9yIHVzZXItZGVmaW5lZCBjb21tYW5kcyBhcmUgdXNlZCBpbgorc2NyaXB0cy4KKworOmNvbVttYW5kXQkJCQkJCSo6Y29tKiAqOmNvbW1hbmQqCisJCQlMaXN0IGFsbCB1c2VyLWRlZmluZWQgY29tbWFuZHMuIFdoZW4gbGlzdGluZyBjb21tYW5kcywKKwkJCXRoZSBjaGFyYWN0ZXJzIGluIHRoZSBmaXJzdCB0d28gY29sdW1ucyBhcmUKKwkJCSAgICAhCUNvbW1hbmQgaGFzIHRoZSAtYmFuZyBhdHRyaWJ1dGUKKwkJCSAgICAiCUNvbW1hbmQgaGFzIHRoZSAtcmVnaXN0ZXIgYXR0cmlidXRlCisJCQkgICAgYglDb21tYW5kIGlzIGxvY2FsIHRvIGN1cnJlbnQgYnVmZmVyCisJCQkoc2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIGF0dHJpYnV0ZXMpCisKKzpjb21bbWFuZF0ge2NtZH0JTGlzdCB0aGUgdXNlci1kZWZpbmVkIGNvbW1hbmRzIHRoYXQgc3RhcnQgd2l0aCB7Y21kfQorCisJCQkJCQkJKkUxNzQqICpFMTgyKgorOmNvbVttYW5kXVshXSBbe2F0dHJ9Li4uXSB7Y21kfSB7cmVwfQorCQkJRGVmaW5lIGEgdXNlciBjb21tYW5kLiAgVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgaXMKKwkJCXtjbWR9IGFuZCBpdHMgcmVwbGFjZW1lbnQgdGV4dCBpcyB7cmVwfS4gVGhlIGNvbW1hbmQncworCQkJYXR0cmlidXRlcyAoc2VlIGJlbG93KSBhcmUge2F0dHJ9LiBJZiB0aGUgY29tbWFuZAorCQkJYWxyZWFkeSBleGlzdHMsIGFuIGVycm9yIGlzIHJlcG9ydGVkLCB1bmxlc3MgYSAhIGlzCisJCQlzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgdGhlIGNvbW1hbmQgaXMgcmVkZWZpbmVkLgorCis6ZGVsY1tvbW1hbmRdIHtjbWR9CQkJCSo6ZGVsYyogKjpkZWxjb21tYW5kKiAqRTE4NCoKKwkJCURlbGV0ZSB0aGUgdXNlci1kZWZpbmVkIGNvbW1hbmQge2NtZH0uCisKKzpjb21jW2xlYXJdCQkJCQkJKjpjb21jKiAqOmNvbWNsZWFyKgorCQkJRGVsZXRlIGFsbCB1c2VyLWRlZmluZWQgY29tbWFuZHMuCisKK0NvbW1hbmQgYXR0cmlidXRlcworCitVc2VyLWRlZmluZWQgY29tbWFuZHMgYXJlIHRyZWF0ZWQgYnkgVmltIGp1c3QgbGlrZSBhbnkgb3RoZXIgZXggY29tbWFuZHMuIFRoZXkKK2NhbiBoYXZlIGFyZ3VtZW50cywgb3IgaGF2ZSBhIHJhbmdlIHNwZWNpZmllZC4gQXJndW1lbnRzIGFyZSBzdWJqZWN0IHRvCitjb21wbGV0aW9uIGFzIGZpbGVuYW1lcywgYnVmZmVycywgZXRjLiBFeGFjdGx5IGhvdyB0aGlzIHdvcmtzIGRlcGVuZHMgdXBvbiB0aGUKK2NvbW1hbmQncyBhdHRyaWJ1dGVzLCB3aGljaCBhcmUgc3BlY2lmaWVkIHdoZW4gdGhlIGNvbW1hbmQgaXMgZGVmaW5lZC4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMsIHNwbGl0IGludG8gZm91ciBjYXRlZ29yaWVzOiBhcmd1bWVudAoraGFuZGxpbmcsIGNvbXBsZXRpb24gYmVoYXZpb3IsIHJhbmdlIGhhbmRsaW5nLCBhbmQgc3BlY2lhbCBjYXNlcy4gVGhlCithdHRyaWJ1dGVzIGFyZSBkZXNjcmliZWQgYmVsb3csIGJ5IGNhdGVnb3J5LgorCitBcmd1bWVudCBoYW5kbGluZwkJCQkJKkUxNzUqICpFMTc2KgorCitCeSBkZWZhdWx0LCBhIHVzZXIgZGVmaW5lZCBjb21tYW5kIHdpbGwgdGFrZSBubyBhcmd1bWVudHMgKGFuZCBhbiBlcnJvciBpcworcmVwb3J0ZWQgaWYgYW55IGFyZSBzdXBwbGllZCkuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhhdCB0aGUKK2NvbW1hbmQgY2FuIHRha2UgYXJndW1lbnRzLCB1c2luZyB0aGUgLW5hcmdzIGF0dHJpYnV0ZS4gVmFsaWQgY2FzZXMgYXJlOgorCisJLW5hcmdzPTAgICAgTm8gYXJndW1lbnRzIGFyZSBhbGxvd2VkICh0aGUgZGVmYXVsdCkKKwktbmFyZ3M9MSAgICBFeGFjdGx5IG9uZSBhcmd1bWVudCBpcyByZXF1aXJlZAorCS1uYXJncz0qICAgIEFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBhbGxvd2VkICgwLCAxLCBvciBtYW55KQorCS1uYXJncz0/ICAgIDAgb3IgMSBhcmd1bWVudHMgYXJlIGFsbG93ZWQKKwktbmFyZ3M9KyAgICBBcmd1bWVudHMgbXVzdCBiZSBzdXBwbGllZCwgYnV0IGFueSBudW1iZXIgYXJlIGFsbG93ZWQKKworQXJndW1lbnRzIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNlcGFyYXRlZCBieSAodW5lc2NhcGVkKSBzcGFjZXMgb3IgVGFicyBpbiB0aGlzCitjb250ZXh0LgorCitOb3RlIHRoYXQgYXJndW1lbnRzIGFyZSB1c2VkIGFzIHRleHQsIG5vdCBhcyBleHByZXNzaW9ucy4gIFNwZWNpZmljYWxseSwKKyJzOnZhciIgd2lsbCB1c2UgdGhlIHNjcmlwdC1sb2NhbCB2YXJpYWJsZSBpbiB0aGUgc2NyaXB0IHdoZXJlIHRoZSBjb21tYW5kIHdhcworZGVmaW5lZCwgbm90IHdoZXJlIGl0IGlzIGludm9rZWQhICBFeGFtcGxlOgorICAgIHNjcmlwdDEudmltOiA+CisJOmxldCBzOmVycm9yID0gIk5vbmUiCisJOmNvbW1hbmQgLW5hcmdzPTEgRXJyb3IgZWNob2VyciA8YXJncz4KKzwgICBzY3JpcHQyLnZpbTogPgorCTpzb3VyY2Ugc2NyaXB0MS52aW0KKwk6bGV0IHM6ZXJyb3IgPSAiV3JvbmchIgorCTpFcnJvciBzOmVycm9yCitFeGVjdXRpbmcgc2NyaXB0Mi52aW0gd2lsbCByZXN1bHQgaW4gIk5vbmUiIHRvIGJlIGVjaG9lZC4gIE5vdCB3aGF0IHlvdQoraW50ZW5kZWQhICBDYWxsaW5nIGEgZnVuY3Rpb24gbWF5IGJlIGFuIGFsdGVybmF0aXZlLgorCitDb21wbGV0aW9uIGJlaGF2aW9yCQkJCSo6Y29tbWFuZC1jb21wbGV0aW9uKgorCQkJCQkJCSpFMTc5KiAqRTE4MCogKkUxODEqCitCeSBkZWZhdWx0LCB0aGUgYXJndW1lbnRzIG9mIHVzZXIgZGVmaW5lZCBjb21tYW5kcyBkbyBub3QgdW5kZXJnbyBjb21wbGV0aW9uLgorSG93ZXZlciwgYnkgc3BlY2lmeWluZyBvbmUgb3IgdGhlIG90aGVyIG9mIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcywgYXJndW1lbnQKK2NvbXBsZXRpb24gY2FuIGJlIGVuYWJsZWQ6CisKKwktY29tcGxldGU9YXVncm91cAlhdXRvY21kIGdyb3VwcworCS1jb21wbGV0ZT1idWZmZXIJYnVmZmVyIG5hbWVzCisJLWNvbXBsZXRlPWNvbW1hbmQJRXggY29tbWFuZCAoYW5kIGFyZ3VtZW50cykKKwktY29tcGxldGU9ZGlyCQlkaXJlY3RvcnkgbmFtZXMKKwktY29tcGxldGU9ZW52aXJvbm1lbnQJZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMKKwktY29tcGxldGU9ZXZlbnQJCWF1dG9jb21tYW5kIGV2ZW50cworCS1jb21wbGV0ZT1leHByZXNzaW9uCVZpbSBleHByZXNzaW9uCisJLWNvbXBsZXRlPWZpbGUJCWZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lcworCS1jb21wbGV0ZT1mdW5jdGlvbglmdW5jdGlvbiBuYW1lCisJLWNvbXBsZXRlPWhlbHAJCWhlbHAgc3ViamVjdHMKKwktY29tcGxldGU9aGlnaGxpZ2h0CWhpZ2hsaWdodCBncm91cHMKKwktY29tcGxldGU9bWFwcGluZwltYXBwaW5nIG5hbWUKKwktY29tcGxldGU9bWVudQkJbWVudXMKKwktY29tcGxldGU9b3B0aW9uCW9wdGlvbnMKKwktY29tcGxldGU9dGFnCQl0YWdzCisJLWNvbXBsZXRlPXRhZ19saXN0ZmlsZXMJdGFncywgZmlsZSBuYW1lcyBhcmUgc2hvd24gd2hlbiBDVFJMLUQgaXMgaGl0CisJLWNvbXBsZXRlPXZhcgkJdXNlciB2YXJpYWJsZXMKKwktY29tcGxldGU9Y3VzdG9tLHtmdW5jfSBjdXN0b20gY29tcGxldGlvbiwgZGVmaW5lZCB2aWEge2Z1bmN9CisKK0N1c3RvbSBjb21wbGV0aW9uCQkJICAgICo6Y29tbWFuZC1jb21wbGV0aW9uLWN1c3RvbSoKKwkJCQkJCQkqRTQ2NyogKkU0NjgqCitJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgY3VzdG9taXplZCBjb21wbGV0aW9uIHNjaGVtZXMgdmlhIHRoZSAiY3VzdG9tLHtmdW5jfSIKK2NvbXBsZXRpb24gYXJndW1lbnQuICBUaGUge2Z1bmN9IHBhcnQgc2hvdWxkIGJlIGEgZnVuY3Rpb24gd2l0aCB0aGUgZm9sbG93aW5nCitwcm90b3R5cGUgPgorCisJOmZ1bmN0aW9uIHtmdW5jfShBcmdMZWFkLCBDbWRMaW5lLCBDdXJzb3JQb3MpCisKK1RoZSBmdW5jdGlvbiBuZWVkIG5vdCB1c2UgYWxsIHRoZXNlIGFyZ3VtZW50cywgYnV0IGl0IHNob3VsZCBwcm92aWRlIHRoZQorY29tcGxldGlvbiBjYW5kaWRhdGVzIGFzIHRoZSByZXR1cm4gdmFsdWUsIG9uZSBwZXIgbGluZSBpbiBhIG5ld2xpbmUgc2VwYXJhdGVkCitzdHJpbmcuICBUaGUgZnVuY3Rpb24gYXJndW1lbnRzIGFyZToKKwlBcmdMZWFkCQl0aGUgbGVhZGluZyBwb3J0aW9uIG9mIHRoZSBhcmd1bWVudCBjdXJyZW50bHkgYmVpbmcKKwkJCWNvbXBsZXRlZCBvbgorCUNtZExpbmUJCXRoZSBlbnRpcmUgY29tbWFuZCBsaW5lCisJQ3Vyc29yUG9zCXRoZSBjdXJzb3IgcG9zaXRpb24gaW4gaXQKK1RoZSBmdW5jdGlvbiBtYXkgdXNlIHRoZXNlIGZvciBkZXRlcm1pbmluZyBjb250ZXh0LiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0bworZmlsdGVyIGNhbmRpZGF0ZXMgYWdhaW5zdCB0aGUgKGltcGxpY2l0IHBhdHRlcm4gaW4pIEFyZ0xlYWQuICBWaW0gd2lsbCBkbworZmlsdGVyIHRoZSBjYW5kaWRhdGVzIHdpdGggaXRzIHJlZ2V4cCBlbmdpbmUgYWZ0ZXIgZnVuY3Rpb24gcmV0dXJuLCBhbmQgdGhpcworaXMgcHJvYmFibHkgbW9yZSBlZmZpY2llbnQgaW4gbW9zdCBjYXNlcy4KKworVGhlIGZvbGxvd2luZyBleGFtcGxlIGxpc3RzIHVzZXIgbmFtZXMgdG8gYSBGaW5nZXIgY29tbWFuZCA+CisgICAgOmNvbSAtY29tcGxldGU9Y3VzdG9tLExpc3RVc2VycyAtbmFyZ3M9MSBGaW5nZXIgIWZpbmdlciA8YXJncz4KKyAgICA6ZnVuIExpc3RVc2VycyhBLEwsUCkKKyAgICA6ICAgIHJldHVybiBzeXN0ZW0oImN1dCAtZDogLWYxIC9ldGMvcGFzc3dkIikKKyAgICA6ZW5kZnVuCisKK1JhbmdlIGhhbmRsaW5nCQkJCQkJKkUxNzcqICpFMTc4KgorCitCeSBkZWZhdWx0LCB1c2VyLWRlZmluZWQgY29tbWFuZHMgZG8gbm90IGFjY2VwdCBhIGxpbmUgbnVtYmVyIHJhbmdlLiBIb3dldmVyLAoraXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSB0aGF0IHRoZSBjb21tYW5kIGRvZXMgdGFrZSBhIHJhbmdlICh0aGUgLXJhbmdlCithdHRyaWJ1dGUpLCBvciB0aGF0IGl0IHRha2VzIGFuIGFyYml0cmFyeSBjb3VudCB2YWx1ZSwgZWl0aGVyIGluIHRoZSBsaW5lCitudW1iZXIgcG9zaXRpb24gKC1yYW5nZT1OLCBsaWtlIHRoZSB8OnNwbGl0fCBjb21tYW5kKSBvciBhcyBhICJjb3VudCIKK2FyZ3VtZW50ICgtY291bnQ9TiwgbGlrZSB0aGUgfDpOZXh0fCBjb21tYW5kKS4gUG9zc2libGUgYXR0cmlidXRlcyBhcmU6CisKKwktcmFuZ2UJICAgIFJhbmdlIGFsbG93ZWQsIGRlZmF1bHQgaXMgY3VycmVudCBsaW5lCisJLXJhbmdlPSUgICAgUmFuZ2UgYWxsb3dlZCwgZGVmYXVsdCBpcyB3aG9sZSBmaWxlICgxLCQpCisJLXJhbmdlPU4gICAgQSBjb3VudCAoZGVmYXVsdCBOKSB3aGljaCBpcyBzcGVjaWZpZWQgaW4gdGhlIGxpbmUKKwkJICAgIG51bWJlciBwb3NpdGlvbiAobGlrZSB8OnNwbGl0fCkKKwktY291bnQ9TiAgICBBIGNvdW50IChkZWZhdWx0IE4pIHdoaWNoIGlzIHNwZWNpZmllZCBlaXRoZXIgaW4gdGhlIGxpbmUKKwkJICAgIG51bWJlciBwb3NpdGlvbiwgb3IgYXMgYW4gaW5pdGlhbCBhcmd1bWVudCAobGlrZSB8Ok5leHR8KQorCQkgICAgU3BlY2lmeWluZyAtY291bnQgKHdpdGhvdXQgYSBkZWZhdWx0KSBhY3RzIGxpa2UgLWNvdW50PTAKKworTm90ZSB0aGF0IC1yYW5nZT1OIGFuZCAtY291bnQ9TiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIC0gb25seSBvbmUgc2hvdWxkIGJlCitzcGVjaWZpZWQuCisKK1NwZWNpYWwgY2FzZXMKKworVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBjYXNlcyBhcyB3ZWxsOgorCisJLWJhbmcJICAgIFRoZSBjb21tYW5kIGNhbiB0YWtlIGEgISBtb2RpZmllciAobGlrZSA6cSBvciA6dykKKwktYmFyCSAgICBUaGUgY29tbWFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgYSAifCIgYW5kIGFub3RoZXIgY29tbWFuZC4KKwkJICAgIEEgInwiIGluc2lkZSB0aGUgY29tbWFuZCBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCB0aGVuLgorCQkgICAgQWxzbyBjaGVja3MgZm9yIGEgIiB0byBzdGFydCBhIGNvbW1lbnQuCisJLXJlZ2lzdGVyICAgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjb21tYW5kIGNhbiBiZSBhbiBvcHRpb25hbAorCQkgICAgcmVnaXN0ZXIgbmFtZSAobGlrZSA6ZGVsLCA6cHV0LCA6eWFuaykuCisJLWJ1ZmZlcgkgICAgVGhlIGNvbW1hbmQgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBidWZmZXIuCisKK0luIHRoZSBjYXNlcyBvZiB0aGUgLWNvdW50IGFuZCAtcmVnaXN0ZXIgYXR0cmlidXRlcywgaWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50CitpcyBzdXBwbGllZCwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhcmd1bWVudCBsaXN0IGFuZCBpcyBhdmFpbGFibGUgdG8gdGhlCityZXBsYWNlbWVudCB0ZXh0IHNlcGFyYXRlbHkuCisKK1JlcGxhY2VtZW50IHRleHQKKworVGhlIHJlcGxhY2VtZW50IHRleHQgZm9yIGEgdXNlciBkZWZpbmVkIGNvbW1hbmQgaXMgc2Nhbm5lZCBmb3Igc3BlY2lhbCBlc2NhcGUKK3NlcXVlbmNlcywgdXNpbmcgPC4uLj4gbm90YXRpb24uIEVzY2FwZSBzZXF1ZW5jZXMgYXJlIHJlcGxhY2VkIHdpdGggdmFsdWVzCitmcm9tIHRoZSBlbnRlcmVkIGNvbW1hbmQgbGluZSwgYW5kIGFsbCBvdGhlciB0ZXh0IGlzIGNvcGllZCB1bmNoYW5nZWQuIFRoZQorcmVzdWx0aW5nIHN0cmluZyBpcyBleGVjdXRlZCBhcyBhbiBFeCBjb21tYW5kLiBJZiB0aGUgaW5pdGlhbCA8IG9mIGFuIGVzY2FwZQorc2VxdWVuY2UgaXMgcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2gsIHRoZSBzZXF1ZW5jZSBpcyBjb3BpZWQgdW5jaGFuZ2VkLgorCitUaGUgdmFsaWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUKKworCQkJCQkJKjxsaW5lMT4qCisJPGxpbmUxPglUaGUgc3RhcnRpbmcgbGluZSBvZiB0aGUgY29tbWFuZCByYW5nZS4KKwkJCQkJCSo8bGluZTI+KgorCTxsaW5lMj4JVGhlIGZpbmFsIGxpbmUgb2YgdGhlIGNvbW1hbmQgcmFuZ2UuCisJCQkJCQkqPGNvdW50PioKKwk8Y291bnQ+CUFueSBjb3VudCBzdXBwbGllZCAoYXMgZGVzY3JpYmVkIGZvciB0aGUgJy1yYW5nZScKKwkJYW5kICctY291bnQnIGF0dHJpYnV0ZXMpLgorCQkJCQkJKjxiYW5nPioKKwk8YmFuZz4JKFNlZSB0aGUgJy1iYW5nJyBhdHRyaWJ1dGUpIEV4cGFuZHMgdG8gYSAhIGlmIHRoZQorCQljb21tYW5kIHdhcyBleGVjdXRlZCB3aXRoIGEgISBtb2RpZmllciwgb3RoZXJ3aXNlCisJCWV4cGFuZHMgdG8gbm90aGluZy4KKwkJCQkJCSo8cmVnPiogKjxyZWdpc3Rlcj4qCisJPHJlZz4JKFNlZSB0aGUgJy1yZWdpc3RlcicgYXR0cmlidXRlKSBUaGUgb3B0aW9uYWwgcmVnaXN0ZXIsCisJCWlmIHNwZWNpZmllZC4gT3RoZXJ3aXNlLCBleHBhbmRzIHRvIG5vdGhpbmcuIDxyZWdpc3Rlcj4KKwkJaXMgYSBzeW5vbnltIGZvciB0aGlzLgorCQkJCQkJKjxhcmdzPioKKwk8YXJncz4JVGhlIGNvbW1hbmQgYXJndW1lbnRzLCBleGFjdGx5IGFzIHN1cHBsaWVkIChidXQgYXMKKwkJbm90ZWQgYWJvdmUsIGFueSBjb3VudCBvciByZWdpc3RlciBjYW4gY29uc3VtZSBzb21lCisJCW9mIHRoZSBhcmd1bWVudHMsIHdoaWNoIGFyZSB0aGVuIG5vdCBwYXJ0IG9mIDxhcmdzPikuCisJPGx0PglBIHNpbmdsZSAnPCcgKExlc3MtVGhhbikgY2hhcmFjdGVyLiAgVGhpcyBpcyBuZWVkZWQgaWYgeW91CisJCXdhbnQgdG8gZ2V0IGEgbGl0ZXJhbCBjb3B5IG9mIG9uZSBvZiB0aGVzZSBlc2NhcGUgc2VxdWVuY2VzCisJCWludG8gdGhlIGV4cGFuc2lvbiAtIGZvciBleGFtcGxlLCB0byBnZXQgPGJhbmc+LCB1c2UKKwkJPGx0PmJhbmc+LgorCisJCQkJCQkJKjxxLWFyZ3M+KgorSWYgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIGFuIGVzY2FwZSBzZXF1ZW5jZSBhcmUgInEtIiAoZm9yIGV4YW1wbGUsCis8cS1hcmdzPikgdGhlbiB0aGUgdmFsdWUgaXMgcXVvdGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gbWFrZSBpdCBhIHZhbGlkIHZhbHVlCitmb3IgdXNlIGluIGFuIGV4cHJlc3Npb24uICBUaGlzIHVzZXMgdGhlIGFyZ3VtZW50IGFzIG9uZSBzaW5nbGUgdmFsdWUuCisKK1RvIGFsbG93IGNvbW1hbmRzIHRvIHBhc3MgdGhlaXIgYXJndW1lbnRzIG9uIHRvIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uLCB0aGVyZQoraXMgYSBzcGVjaWFsIGZvcm0gPGYtYXJncz4gKCJmdW5jdGlvbiBhcmdzIikuIFRoaXMgc3BsaXRzIHRoZSBjb21tYW5kCithcmd1bWVudHMgYXQgc3BhY2VzIGFuZCBUYWJzLCBxdW90ZXMgZWFjaCBhcmd1bWVudCBpbmRpdmlkdWFsbHksIGFuZCB0aGUKKzxmLWFyZ3M+IHNlcXVlbmNlIGlzIHJlcGxhY2VkIGJ5IHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBxdW90ZWQgYXJndW1lbnRzLgorU2VlIHRoZSBNeWNtZCBleGFtcGxlIGJlbG93LiAgV2hlbiB0aGVyZSBpcyBubyBhcmd1bWVudCwgPGYtYXJncz4gYWxzbyBoYXMgbm8KK2FyZ3VtZW50LgorCitFeGFtcGxlcyA+CisKKyAgICIgRGVsZXRlIGV2ZXJ5dGhpbmcgYWZ0ZXIgaGVyZSB0byB0aGUgZW5kCisgICA6Y29tIERkZWwgKywkZAorCisgICAiIFJlbmFtZSB0aGUgY3VycmVudCBidWZmZXIKKyAgIDpjb20gLW5hcmdzPTEgLWJhbmcgLWNvbXBsZXRlPWZpbGUgUmVuIGYgPGFyZ3M+fHc8YmFuZz4KKworICAgIiBSZXBsYWNlIGEgcmFuZ2Ugd2l0aCB0aGUgY29udGVudHMgb2YgYSBmaWxlCisgICAiIChFbnRlciB0aGlzIGFsbCBhcyBvbmUgbGluZSkKKyAgIDpjb20gLXJhbmdlIC1uYXJncz0xIC1jb21wbGV0ZT1maWxlCisJIFJlcGxhY2UgPGxpbmUxPi1wdV98PGxpbmUxPiw8bGluZTI+ZHxyIDxhcmdzPnw8bGluZTE+ZAorCisgICAiIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHJhbmdlCisgICA6Y29tISAtcmFuZ2UgLW5hcmdzPTAgTGluZXMgOmVjaG8gPGxpbmUyPiAtIDxsaW5lMT4gKyAxICJsaW5lcyIKKworICAgIiBDYWxsIGEgdXNlciBmdW5jdGlvbiAoZXhhbXBsZSBvZiA8Zi1hcmdzPikKKyAgIDpjb20gLW5hcmdzPSogTXljbWQgY2FsbCBNeWZ1bmMoPGYtYXJncz4pCisKK1doZW4gZXhlY3V0ZWQgYXM6ID4KKwk6TXljbWQgYXJnMSBhcmcyCitUaGlzIHdpbGwgaW52b2tlOiA+CisJOmNhbGwgTXlmdW5jKCJhcmcxIiwiYXJnMiIpCisKKyAgIDoiIEEgbW9yZSBzdWJzdGFudGlhbCBleGFtcGxlCisgICA6ZnVuY3Rpb24gQWxsYXJncyhjb21tYW5kKQorICAgOglsZXQgaSA9IDAKKyAgIDoJd2hpbGUgaSA8IGFyZ2MoKQorICAgOgkgICBpZiBmaWxlcmVhZGFibGUoYXJndihpKSkKKyAgIDoJICAgIGV4ZWN1dGUgImUgIiAuIGFyZ3YoaSkKKyAgIDoJICAgICBleGVjdXRlIGE6Y29tbWFuZAorICAgOiAgICAgIGVuZGlmCisgICA6ICAgICAgbGV0IGkgPSBpICsgMQorICAgOiAgIGVuZHdoaWxlCisgICA6ZW5kZnVuY3Rpb24KKyAgIDpjb21tYW5kIC1uYXJncz0rIC1jb21wbGV0ZT1jb21tYW5kIEFsbGFyZ3MgY2FsbCBBbGxhcmdzKDxxLWFyZ3M+KQorCitUaGUgY29tbWFuZCBBbGxhcmdzIHRha2VzIGFueSBWaW0gY29tbWFuZChzKSBhcyBhcmd1bWVudCBhbmQgZXhlY3V0ZXMgaXQgb24gYWxsCitmaWxlcyBpbiB0aGUgYXJndW1lbnQgbGlzdC4gIFVzYWdlIGV4YW1wbGUgKG5vdGUgdXNlIG9mIHRoZSAiZSIgZmxhZyB0byBpZ25vcmUKK2Vycm9ycyBhbmQgdGhlICJ1cGRhdGUiIGNvbW1hbmQgdG8gd3JpdGUgbW9kaWZpZWQgYnVmZmVycyk6ID4KKwk6QWxsYXJncyAlcy9mb28vYmFyL2dlfHVwZGF0ZQorVGhpcyB3aWxsIGludm9rZTogPgorCTpjYWxsIEFsbGFyZ3MoIiVzL2Zvby9iYXIvZ2V8dXBkYXRlIikKKzwKK1doZW4gZGVmaW5pbmcgYW4gdXNlciBjb21tYW5kIGluIGEgc2NyaXB0LCBpdCB3aWxsIGJlIGFibGUgdG8gY2FsbCBmdW5jdGlvbnMKK2xvY2FsIHRvIHRoZSBzY3JpcHQgYW5kIHVzZSBtYXBwaW5ncyBsb2NhbCB0byB0aGUgc2NyaXB0LiAgV2hlbiB0aGUgdXNlcgoraW52b2tlcyB0aGUgdXNlciBjb21tYW5kLCBpdCB3aWxsIHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0IGl0IHdhcworZGVmaW5lZCBpbi4gIFRoaXMgbWF0dGVycyBpZiB8PFNJRD58IGlzIHVzZWQgaW4gYSBjb21tYW5kLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbWJ5dGUudHh0IGIvcnVudGltZS9kb2MvbWJ5dGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzNiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9tYnl0ZS50eHQKQEAgLTAsMCArMSwxMzY4IEBACisqbWJ5dGUudHh0KiAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA3CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIgZXQgYWwuCisKKworTXVsdGktYnl0ZSBzdXBwb3J0CQkJCSptdWx0aWJ5dGUqICptdWx0aS1ieXRlKgorCQkJCQkJKkNoaW5lc2UqICpKYXBhbmVzZSogKktvcmVhbioKK1RoaXMgaXMgYWJvdXQgZWRpdGluZyB0ZXh0IGluIGxhbmd1YWdlcyB3aGljaCBoYXZlIG1hbnkgY2hhcmFjdGVycyB0aGF0IGNhbgorbm90IGJlIHJlcHJlc2VudGVkIHVzaW5nIG9uZSBieXRlIChvbmUgb2N0ZXQpLiAgRXhhbXBsZXMgYXJlIENoaW5lc2UsIEphcGFuZXNlCithbmQgS29yZWFuLiAgVW5pY29kZSBpcyBhbHNvIGNvdmVyZWQgaGVyZS4KKworRm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUgbW9zdCBjb21tb24gZmVhdHVyZXMsIHNlZSB8dXNyXzQ1LnR4dHwgaW4gdGhlIHVzZXIKK21hbnVhbC4KK0ZvciBjaGFuZ2luZyB0aGUgbGFuZ3VhZ2Ugb2YgbWVzc2FnZXMgYW5kIG1lbnVzIHNlZSB8bWxhbmcudHh0fC4KKwore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArbXVsdGlfYnl0ZSBmZWF0dXJlfQorCisKKzEuICBHZXR0aW5nIHN0YXJ0ZWQJCQl8bWJ5dGUtZmlyc3R8CisyLiAgTG9jYWxlCQkJCXxtYnl0ZS1sb2NhbGV8CiszLiAgRW5jb2RpbmcJCQkJfG1ieXRlLWVuY29kaW5nfAorNC4gIFVzaW5nIGEgdGVybWluYWwJCQl8bWJ5dGUtdGVybWluYWx8Cis1LiAgRm9udHMgb24gWDExCQkJfG1ieXRlLWZvbnRzLVgxMXwKKzYuICBGb250cyBvbiBNUy1XaW5kb3dzCQkJfG1ieXRlLWZvbnRzLU1Td2lufAorNy4gIElucHV0IG9uIFgxMQkJCXxtYnl0ZS1YSU18Cis4LiAgSW5wdXQgb24gTVMtV2luZG93cwkJCXxtYnl0ZS1JTUV8Cis5LiAgSW5wdXQgd2l0aCBhIGtleW1hcAkJCXxtYnl0ZS1rZXltYXB8CisxMC4gVXNpbmcgVVRGLTgJCQkJfG1ieXRlLXV0Zjh8CisxMS4gT3ZlcnZpZXcgb2Ygb3B0aW9ucwkJCXxtYnl0ZS1vcHRpb25zfAorCitOT1RFOiBUaGlzIGZpbGUgY29udGFpbnMgVVRGLTggY2hhcmFjdGVycy4gIFRoZXNlIG1heSBzaG93IHVwIGFzIHN0cmFuZ2UKK2NoYXJhY3RlcnMgb3IgYm94ZXMgd2hlbiB1c2luZyBhbm90aGVyIGVuY29kaW5nLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEdldHRpbmcgc3RhcnRlZAkJCQkJKm1ieXRlLWZpcnN0KgorCitUaGlzIGlzIGEgc3VtbWFyeSBvZiB0aGUgbXVsdGlieXRlIGZlYXR1cmVzIGluIFZpbS4gIElmIHlvdSBhcmUgbHVja3kgaXQgd29ya3MKK2FzIGRlc2NyaWJlZCBhbmQgeW91IGNhbiBzdGFydCB1c2luZyBWaW0gd2l0aG91dCBtdWNoIHRyb3VibGUuICBJZiBzb21ldGhpbmcKK2RvZXNuJ3Qgd29yayB5b3Ugd2lsbCBoYXZlIHRvIHJlYWQgdGhlIHJlc3QuICBEb24ndCBiZSBzdXJwcmlzZWQgaWYgaXQgdGFrZXMKK3F1aXRlIGEgYml0IG9mIHdvcmsgYW5kIGV4cGVyaW1lbnRpbmcgdG8gbWFrZSBWaW0gdXNlIGFsbCB0aGUgbXVsdGktYnl0ZQorZmVhdHVyZXMuICBVbmZvcnR1bmF0ZWx5LCBldmVyeSBzeXN0ZW0gaGFzIGl0cyBvd24gd2F5IHRvIGRlYWwgd2l0aCBtdWx0aWJ5dGUKK2xhbmd1YWdlcyBhbmQgaXQgaXMgcXVpdGUgY29tcGxpY2F0ZWQuCisKKworQ09NUElMSU5HCisKK0lmIHlvdSBhbHJlYWR5IGhhdmUgYSBjb21waWxlZCBWaW0gcHJvZ3JhbSwgY2hlY2sgaWYgdGhlIHwrbXVsdGlfYnl0ZXwgZmVhdHVyZQoraXMgaW5jbHVkZWQuICBUaGUgfDp2ZXJzaW9ufCBjb21tYW5kIGNhbiBiZSB1c2VkIGZvciB0aGlzLgorCitJZiArbXVsdGlfYnl0ZSBpcyBub3QgaW5jbHVkZWQsIHlvdSBzaG91bGQgY29tcGlsZSBWaW0gd2l0aCAiYmlnIiBmZWF0dXJlcy4KK1lvdSBjYW4gZnVydGhlciB0dW5lIHdoYXQgZmVhdHVyZXMgYXJlIGluY2x1ZGVkLiAgU2VlIHRoZSBJTlNUQUxMIGZpbGVzIGluIHRoZQorc291cmNlIGRpcmVjdG9yeS4KKworCitMT0NBTEUKKworRmlyc3Qgb2YgYWxsLCB5b3UgbXVzdCBtYWtlIHN1cmUgeW91ciBjdXJyZW50IGxvY2FsZSBpcyBzZXQgY29ycmVjdGx5LiAgSWYKK3lvdXIgc3lzdGVtIGhhcyBiZWVuIGluc3RhbGxlZCB0byB1c2UgdGhlIGxhbmd1YWdlLCBpdCBwcm9iYWJseSB3b3JrcyByaWdodAorYXdheS4gIElmIG5vdCwgeW91IGNhbiBvZnRlbiBtYWtlIGl0IHdvcmsgYnkgc2V0dGluZyB0aGUgJExBTkcgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGluIHlvdXIgc2hlbGw6ID4KKworCXNldGVudiBMQU5HIGphX0pQLkVVQworCitVbmZvcnR1bmF0ZWx5LCB0aGUgbmFtZSBvZiB0aGUgbG9jYWxlIGRlcGVuZHMgb24geW91ciBzeXN0ZW0uICBKYXBhbmVzZSBtaWdodAorYWxzbyBiZSBjYWxsZWQgImphX0pQLkVVQ2pwIiBvciBqdXN0ICJqYSIuICBUbyBzZWUgd2hhdCBpcyBjdXJyZW50bHkgdXNlZDogPgorCisJOmxhbmd1YWdlCisKK1RvIGNoYW5nZSB0aGUgbG9jYWxlIGluc2lkZSBWaW0gdXNlOiA+CisKKwk6bGFuZ3VhZ2UgamFfSlAuRVVDCisKK1ZpbSB3aWxsIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGlzIGRvZXNuJ3Qgd29yay4gIFRoaXMgaXMgYSBnb29kIHdheSB0bworZXhwZXJpbWVudCBhbmQgZmluZCB0aGUgbG9jYWxlIG5hbWUgeW91IHdhbnQgdG8gdXNlLiAgQnV0IGl0J3MgYWx3YXlzIGJldHRlcgordG8gc2V0IHRoZSBsb2NhbGUgaW4gdGhlIHNoZWxsLCBzbyB0aGF0IGl0IGlzIHVzZWQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuCisKK1NlZSB8bWJ5dGUtbG9jYWxlfCBmb3IgZGV0YWlscy4KKworCitFTkNPRElORworCitJZiB5b3VyIGxvY2FsZSB3b3JrcyBwcm9wZXJseSwgVmltIHdpbGwgdHJ5IHRvIHNldCB0aGUgJ2VuY29kaW5nJyBvcHRpb24KK2FjY29yZGluZ2x5LiAgSWYgdGhpcyBkb2Vzbid0IHdvcmsgeW91IGNhbiBvdmVycnVsZSBpdHMgdmFsdWU6ID4KKworCTpzZXQgZW5jb2Rpbmc9dXRmLTgKKworU2VlIHxlbmNvZGluZy12YWx1ZXN8IGZvciBhIGxpc3Qgb2YgYWNjZXB0YWJsZSB2YWx1ZXMuCisKK1RoZSByZXN1bHQgaXMgdGhhdCBhbGwgdGhlIHRleHQgdGhhdCBpcyB1c2VkIGluc2lkZSBWaW0gd2lsbCBiZSBpbiB0aGlzCitlbmNvZGluZy4gIE5vdCBvbmx5IHRoZSB0ZXh0IGluIHRoZSBidWZmZXJzLCBidXQgYWxzbyBpbiByZWdpc3RlcnMsIHZhcmlhYmxlcywKK2V0Yy4gIFRoaXMgYWxzbyBtZWFucyB0aGF0IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiAnZW5jb2RpbmcnIG1ha2VzIHRoZSBleGlzdGluZwordGV4dCBpbnZhbGlkISAgVGhlIHRleHQgZG9lc24ndCBjaGFuZ2UsIGJ1dCBpdCB3aWxsIGJlIGRpc3BsYXllZCB3cm9uZy4KKworWW91IGNhbiBlZGl0IGZpbGVzIGluIGFub3RoZXIgZW5jb2RpbmcgdGhhbiB3aGF0ICdlbmNvZGluZycgaXMgc2V0IHRvLiAgVmltCit3aWxsIGNvbnZlcnQgdGhlIGZpbGUgd2hlbiB5b3UgcmVhZCBpdCBhbmQgY29udmVydCBpdCBiYWNrIHdoZW4geW91IHdyaXRlIGl0LgorU2VlICdmaWxlZW5jb2RpbmcnLCAnZmlsZWVuY29kaW5ncycgYW5kIHwrK2VuY3wuCisKKworRElTUExBWSBBTkQgRk9OVFMKKworSWYgeW91IGFyZSB3b3JraW5nIGluIGEgdGVybWluYWwgKGVtdWxhdG9yKSB5b3UgbXVzdCBtYWtlIHN1cmUgaXQgYWNjZXB0cyB0aGUKK3NhbWUgZW5jb2RpbmcgYXMgd2hpY2ggVmltIGlzIHdvcmtpbmcgd2l0aC4gIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB5b3UgY2FuCit1c2UgdGhlICd0ZXJtZW5jb2RpbmcnIG9wdGlvbiB0byBtYWtlIFZpbSBjb252ZXJ0IHRleHQgYXV0b21hdGljYWxseS4KKworRm9yIHRoZSBHVUkgeW91IG11c3Qgc2VsZWN0IGZvbnRzIHRoYXQgd29yayB3aXRoIHRoZSBjdXJyZW50ICdlbmNvZGluZycuICBUaGlzCitpcyB0aGUgZGlmZmljdWx0IHBhcnQuICBJdCBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0geW91IGFyZSB1c2luZywgdGhlIGxvY2FsZSBhbmQKK2EgZmV3IG90aGVyIHRoaW5ncy4gIFNlZSB0aGUgY2hhcHRlcnMgb24gZm9udHM6IHxtYnl0ZS1mb250cy1YMTF8IGZvcgorWC1XaW5kb3dzIGFuZCB8bWJ5dGUtZm9udHMtTVN3aW58IGZvciBNUy1XaW5kb3dzLgorCitGb3IgR1RLKyAyLCB5b3UgY2FuIHNraXAgbW9zdCBvZiB0aGlzIHNlY3Rpb24uICBUaGUgb3B0aW9uICdndWlmb250c2V0JyBkb2VzCitubyBsb25nZXIgZXhpc3QuICBZb3Ugb25seSBuZWVkIHRvIHNldCAnZ3VpZm9udCcgYW5kIGV2ZXJ5dGhpbmcgc2hvdWxkICJqdXN0Cit3b3JrIi4gIElmIHlvdXIgc3lzdGVtIGNvbWVzIHdpdGggWGZ0MiBhbmQgZm9udGNvbmZpZyBhbmQgdGhlIGN1cnJlbnQgZm9udAorZG9lcyBub3QgY29udGFpbiBhIGNlcnRhaW4gZ2x5cGgsIGEgZGlmZmVyZW50IGZvbnQgd2lsbCBiZSB1c2VkIGF1dG9tYXRpY2FsbHkKK2lmIGF2YWlsYWJsZS4gIFRoZSAnZ3VpZm9udHdpZGUnIG9wdGlvbiBpcyBzdGlsbCBzdXBwb3J0ZWQgYnV0IHVzdWFsbHkgeW91IGRvCitub3QgbmVlZCB0byBzZXQgaXQuICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB0aGUgYXV0b21hdGljIGZvbnQgc2VsZWN0aW9uIGRvZXMKK25vdCBzdWl0IHlvdXIgbmVlZHMuCisKK0ZvciBYMTEgeW91IGNhbiBzZXQgdGhlICdndWlmb250c2V0JyBvcHRpb24gdG8gYSBsaXN0IG9mIGZvbnRzIHRoYXQgdG9nZXRoZXIKK2NvdmVyIHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVzZWQuICBFeGFtcGxlIGZvciBLb3JlYW46ID4KKworCTpzZXQgZ3VpZm9udHNldD1rMTIscjEyCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0ICdndWlmb250JyBhbmQgJ2d1aWZvbnR3aWRlJy4gICdndWlmb250JyBpcyB1c2VkIGZvcgordGhlIHNpbmdsZS13aWR0aCBjaGFyYWN0ZXJzLCAnZ3VpZm9udHdpZGUnIGZvciB0aGUgZG91YmxlLXdpZHRoIGNoYXJhY3RlcnMuCitUaHVzIHRoZSAnZ3VpZm9udHdpZGUnIGZvbnQgbXVzdCBiZSBleGFjdGx5IHR3aWNlIGFzIHdpZGUgYXMgJ2d1aWZvbnQnLgorRXhhbXBsZSBmb3IgVVRGLTg6ID4KKworCTpzZXQgZ3VpZm9udD0tbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtKi0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzEwNjQ2LTEKKwk6c2V0IGd1aWZvbnR3aWRlPS1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0qLTE4LTEyMC0xMDAtMTAwLWMtMTgwLWlzbzEwNjQ2LTEKKworWW91IGNhbiBhbHNvIHNldCAnZ3VpZm9udCcgYWxvbmUsIFZpbSB3aWxsIHRyeSB0byBmaW5kIGEgbWF0Y2hpbmcKKydndWlmb250d2lkZScgZm9yIHlvdS4KKworCitJTlBVVAorCitUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGVudGVyIG11bHRpLWJ5dGUgY2hhcmFjdGVyczoKKy0gRm9yIFgxMSBYSU0gY2FuIGJlIHVzZWQuICBTZWUgfFhJTXwuCistIEZvciBNUy1XaW5kb3dzIElNRSBjYW4gYmUgdXNlZC4gIFNlZSB8SU1FfC4KKy0gRm9yIGFsbCBzeXN0ZW1zIGtleW1hcHMgY2FuIGJlIHVzZWQuICBTZWUgfG1ieXRlLWtleW1hcHwuCisKK1RoZSBvcHRpb25zICdpbWluc2VydCcsICdpbXNlYXJjaCcgYW5kICdpbWNtZGxpbmUnIGNhbiBiZSB1c2VkIHRvIGNob3NlCit0aGUgZGlmZmVyZW50IGlucHV0IG1lZGhvZHMgb3IgZGlzYWJsZSB0aGVtIHRlbXBvcmFyaWx5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuICBMb2NhbGUJCQkJCQkqbWJ5dGUtbG9jYWxlKgorCitUaGUgZWFzaWVzdCBzZXR1cCBpcyB3aGVuIHlvdXIgd2hvbGUgc3lzdGVtIHVzZXMgdGhlIGxvY2FsZSB5b3Ugd2FudCB0byB3b3JrCitpbi4gIEJ1dCBpdCdzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSBsb2NhbGUgZm9yIG9uZSBzaGVsbCB5b3UgYXJlIHdvcmtpbmcKK2luLCBvciBqdXN0IHVzZSBhIGNlcnRhaW4gbG9jYWxlIGluc2lkZSBWaW0uCisKKworV0hBVCBJUyBBIExPQ0FMRT8JCQkJCSpsb2NhbGUqCisKK1RoZXJlIGFyZSBtYW55IG9mIGxhbmd1YWdlcyBpbiB0aGUgd29ybGQuICBBbmQgdGhlcmUgYXJlIGRpZmZlcmVudCBjdWx0dXJlcworYW5kIGVudmlyb25tZW50cyBhdCBsZWFzdCBhcyBtdWNoIGFzIHRoZSBudW1iZXIgb2YgbGFuZ3VhZ2VzLglBIGxpbmd1aXN0aWMKK2Vudmlyb25tZW50IGNvcnJlc3BvbmRpbmcgdG8gYW4gYXJlYSBpcyBjYWxsZWQgImxvY2FsZSIuICBUaGlzIGluY2x1ZGVzCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlZCBsYW5ndWFnZSwgdGhlIGNoYXJzZXQsIGNvbGxhdGluZyBvcmRlciBmb3Igc29ydGluZywKK2RhdGUgZm9ybWF0LCBjdXJyZW5jeSBmb3JtYXQgYW5kIHNvIG9uLiAgRm9yIFZpbSBvbmx5IHRoZSBsYW5ndWFnZSBhbmQgY2hhcnNldAorcmVhbGx5IG1hdHRlci4KKworWW91IGNhbiBvbmx5IHVzZSBhIGxvY2FsZSBpZiB5b3VyIHN5c3RlbSBoYXMgc3VwcG9ydCBmb3IgaXQuICBTb21lIHN5c3RlbXMKK2hhdmUgb25seSBhIGZldyBsb2NhbGVzLCBlc3BlY2lhbGx5IGluIHRoZSBVU0EuICBUaGUgbGFuZ3VhZ2Ugd2hpY2ggeW91IHdhbnQKK3RvIHVzZSBtYXkgbm90IGJlIG9uIHlvdXIgc3lzdGVtLiAgSW4gdGhhdCBjYXNlIHlvdSBtaWdodCBiZSBhYmxlIHRvIGluc3RhbGwKK2l0IGFzIGFuIGV4dHJhIHBhY2thZ2UuICBDaGVjayB5b3VyIHN5c3RlbSBkb2N1bWVudGF0aW9uIGZvciBob3cgdG8gZG8gdGhhdC4KKworVGhlIGxvY2F0aW9uIGluIHdoaWNoIHRoZSBsb2NhbGVzIGFyZSBpbnN0YWxsZWQgdmFyaWVzIGZyb20gc3lzdGVtIHRvIHN5c3RlbS4KK0ZvciBleGFtcGxlLCAiL3Vzci9zaGFyZS9sb2NhbGUiIG9yICIvdXNyL2xpYi9sb2NhbGUiLiAgU2VlIHlvdXIgc3lzdGVtJ3MKK3NldGxvY2FsZSgpIG1hbiBwYWdlLgorCitMb29raW5nIGluIHRoZXNlIGRpcmVjdG9yaWVzIHdpbGwgc2hvdyB5b3UgdGhlIGV4YWN0IG5hbWUgb2YgZWFjaCBsb2NhbGUuCitNb3N0bHkgdXBwZXIvbG93ZXJjYXNlIG1hdHRlcnMsIHRodXMgImphX0pQLkVVQyIgYW5kICJqYV9qcC5ldWMiIGFyZQorZGlmZmVyZW50LiAgU29tZSBzeXN0ZW1zIGhhdmUgYSBsb2NhbGUuYWxpYXMgZmlsZSwgd2hpY2ggYWxsb3dzIHRyYW5zbGF0aW9uCitmcm9tIGEgc2hvcnQgbmFtZSBsaWtlICJubCIgdG8gdGhlIGZ1bGwgbmFtZSAibmxfTkwuSVNPXzg4NTktMSIuCisKK05vdGUgdGhhdCBYLXdpbmRvd3MgaGFzIGl0cyBvd24gbG9jYWxlIHN0dWZmLiAgQW5kIHVuZm9ydHVuYXRlbHkgdXNlcyBsb2NhbGUKK25hbWVzIGRpZmZlcmVudCBmcm9tIHdoYXQgaXMgdXNlZCBlbHNld2hlcmUuICBUaGlzIGlzIGNvbmZ1c2luZyEgIEZvciBWaW0gaXQKK21hdHRlcnMgd2hhdCB0aGUgc2V0bG9jYWxlKCkgZnVuY3Rpb24gdXNlcywgd2hpY2ggaXMgZ2VuZXJhbGx5IE5PVCB0aGUKK1gtd2luZG93cyBzdHVmZi4gIFlvdSBtaWdodCBoYXZlIHRvIGRvIHNvbWUgZXhwZXJpbWVudHMgdG8gZmluZCBvdXQgd2hhdAorcmVhbGx5IHdvcmtzLgorCisJCQkJCQkJKmxvY2FsZS1uYW1lKgorVGhlIChzaW1wbGlmaWVkKSBmb3JtYXQgb2YgfGxvY2FsZXwgbmFtZSBpczoKKworCWxhbmd1YWdlCitvcglsYW5ndWFnZV90ZXJyaXRvcnkKK29yCWxhbmd1YWdlX3RlcnJpdG9yeS5jb2Rlc2V0CisKK1RlcnJpdG9yeSBtZWFucyB0aGUgY291bnRyeSAob3IgcGFydCBvZiBpdCksIGNvZGVzZXQgbWVhbnMgdGhlIHxjaGFyc2V0fC4gIEZvcgorZXhhbXBsZSwgdGhlIGxvY2FsZSBuYW1lICJqYV9KUC5ldWNKUCIgbWVhbnM6CisJamEJdGhlIGxhbmd1YWdlIGlzIEphcGFuZXNlCisJSlAJdGhlIGNvdW50cnkgaXMgSmFwYW4KKwlldWNKUAl0aGUgY29kZXNldCBpcyBFVUMtSlAKK0J1dCBpdCBhbHNvIGNvdWxkIGJlICJqYSIsICJqYV9KUC5FVUMiLCAiamFfSlAudWppcyIsIGV0Yy4gIEFuZCB1bmZvcnR1bmF0ZWx5LAordGhlIGxvY2FsZSBuYW1lIGZvciBhIHNwZWNpZmljIGxhbmd1YWdlLCB0ZXJyaXRvcnkgYW5kIGNvZGVzZXQgaXMgbm90IHVuaWZpZWQKK2FuZCBkZXBlbmRzIG9uIHlvdXIgc3lzdGVtLgorCitFeGFtcGxlcyBvZiBsb2NhbGUgbmFtZToKKyAgICBjaGFyc2V0CSAgICBsYW5ndWFnZQkJICBsb2NhbGUgbmFtZSB+CisgICAgR0IyMzEyCSAgICBDaGluZXNlIChzaW1wbGlmaWVkKSAgemhfQ04uRVVDLCB6aF9DTi5HQjIzMTIKKyAgICBCaWc1CSAgICBDaGluZXNlICh0cmFkaXRpb25hbCkgemhfVFcuQklHNSwgemhfVFcuQmlnNQorICAgIENOUy0xMTY0MwkgICAgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIHpoX1RXCisgICAgRVVDLUpQCSAgICBKYXBhbmVzZQkJICBqYSwgamFfSlAuRVVDLCBqYV9KUC51amlzLCBqYV9KUC5ldWNKUAorICAgIFNoaWZ0X0pJUwkgICAgSmFwYW5lc2UJCSAgamFfSlAuU0pJUywgamFfSlAuU2hpZnRfSklTCisgICAgRVVDLUtSCSAgICBLb3JlYW4JCSAga28sIGtvX0tSLkVVQworCisKK1VTSU5HIEEgTE9DQUxFCisKK1RvIHN0YXJ0IHVzaW5nIGEgbG9jYWxlIGZvciB0aGUgd2hvbGUgc3lzdGVtLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgeW91cgorc3lzdGVtLiAgTW9zdGx5IHlvdSBuZWVkIHRvIHNldCBpdCBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiAiL2V0YyIuCisKK1RvIHVzZSBhIGxvY2FsZSBpbiBhIHNoZWxsLCBzZXQgdGhlICRMQU5HIGVudmlyb25tZW50IHZhbHVlLiAgV2hlbiB5b3Ugd2FudCB0bwordXNlIEtvcmVhbiBhbmQgdGhlIHxsb2NhbGV8IG5hbWUgaXMgImtvIiwgZG8gdGhpczoKKworICAgIHNoOiAgICBleHBvcnQgTEFORz1rbworICAgIGNzaDogICBzZXRlbnYgTEFORyBrbworCitZb3UgY2FuIHB1dCB0aGlzIGluIHlvdXIgfi8ucHJvZmlsZSBvciB+Ly5jc2hyYyBmaWxlIHRvIGFsd2F5cyB1c2UgaXQuCisKK1RvIHVzZSBhIGxvY2FsZSBpbiBWaW0gb25seSwgdXNlIHRoZSB8Omxhbmd1YWdlfCBjb21tYW5kOiA+CisKKwk6bGFuZ3VhZ2Uga28KKworUHV0IHRoaXMgaW4geW91ciB+Ly52aW1yYyBmaWxlIHRvIHVzZSBpdCBhbHdheXMuCisKK09yIHNwZWNpZnkgJExBTkcgd2hlbiBzdGFydGluZyBWaW06CisKKyAgIHNoOiAgICBMQU5HPWtvIHZpbSB7dmltLWFyZ3VtZW50c30KKyAgIGNzaDoJICBlbnYgTEFORz1rbyB2aW0ge3ZpbS1hcmd1bWVudHN9CisKK1lvdSBjb3VsZCBtYWtlIGEgc21hbGwgc2hlbGwgc2NyaXB0IGZvciB0aGlzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuICBFbmNvZGluZwkJCQkqbWJ5dGUtZW5jb2RpbmcqCisKK1ZpbSB1c2VzIHRoZSAnZW5jb2RpbmcnIG9wdGlvbiB0byBzcGVjaWZ5IGhvdyBjaGFyYWN0ZXJzIGlkZW50aWZpZWQgYW5kCitlbmNvZGVkIHdoZW4gdGhleSBhcmUgdXNlZCBpbnNpZGUgVmltLiAgVGhpcyBhcHBsaWVzIHRvIGFsbCB0aGUgcGxhY2VzIHdoZXJlCit0ZXh0IGlzIHVzZWQsIGluY2x1ZGluZyBidWZmZXJzIChmaWxlcyBsb2FkZWQgaW50byBtZW1vcnkpLCByZWdpc3RlcnMgYW5kCit2YXJpYWJsZXMuCisKKwkJCQkJCQkqY2hhcnNldCogKmNvZGVzZXQqCitDaGFyc2V0IGlzIGFub3RoZXIgbmFtZSBmb3IgZW5jb2RpbmcuICBUaGVyZSBhcmUgc3VidGxlIGRpZmZlcmVuY2VzLCBidXQgdGhlc2UKK2Rvbid0IG1hdHRlciB3aGVuIHVzaW5nIFZpbS4gICJjb2Rlc2V0IiBpcyBhbm90aGVyIHNpbWlsYXIgbmFtZS4KKworRWFjaCBjaGFyYWN0ZXIgaXMgZW5jb2RlZCBhcyBvbmUgb3IgbW9yZSBieXRlcy4gIFdoZW4gYWxsIGNoYXJhY3RlcnMgYXJlCitlbmNvZGVkIHdpdGggb25lIGJ5dGUsIHdlIGNhbGwgdGhpcyBhIHNpbmdsZS1ieXRlIGVuY29kaW5nLiAgVGhlIG1vc3Qgb2Z0ZW4KK3VzZWQgb25lIGlzIGNhbGxlZCAibGF0aW4xIi4gIFRoaXMgbGltaXRzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byAyNTYuCitTb21lIG9mIHRoZXNlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMsIHRodXMgZXZlbiBmZXdlciBjYW4gYmUgdXNlZCBmb3IgdGV4dC4KKworV2hlbiBzb21lIGNoYXJhY3RlcnMgdXNlIHR3byBvciBtb3JlIGJ5dGVzLCB3ZSBjYWxsIHRoaXMgYSBtdWx0aS1ieXRlCitlbmNvZGluZy4gIFRoaXMgYWxsb3dzIHVzaW5nIG11Y2ggbW9yZSB0aGFuIDI1NiBjaGFyYWN0ZXJzLCB3aGljaCBpcyByZXF1aXJlZAorZm9yIG1vc3QgRWFzdCBBc2lhbiBsYW5ndWFnZXMuCisKK01vc3QgbXVsdGktYnl0ZSBlbmNvZGluZ3MgdXNlIG9uZSBieXRlIGZvciB0aGUgZmlyc3QgMTI3IGNoYXJhY3RlcnMuICBUaGVzZQorYXJlIGVxdWFsIHRvIEFTQ0lJLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIGV4Y2hhbmdlIHBsYWluLUFTQ0lJIHRleHQsIG5vCittYXR0ZXIgd2hhdCBsYW5ndWFnZSBpcyB1c2VkLiAgVGh1cyB5b3UgbWlnaHQgc2VlIHRoZSByaWdodCB0ZXh0IGV2ZW4gd2hlbiB0aGUKK2VuY29kaW5nIHdhcyBzZXQgd3JvbmcuCisKKwkJCQkJCQkqZW5jb2RpbmctbmFtZXMqCitWaW0gY2FuIHVzZSBtYW55IGRpZmZlcmVudCBjaGFyYWN0ZXIgZW5jb2RpbmdzLiAgVGhlcmUgYXJlIHRocmVlIG1ham9yIGdyb3VwczoKKworMSAgIDhiaXQJU2luZ2xlLWJ5dGUgZW5jb2RpbmdzLCAyNTYgZGlmZmVyZW50IGNoYXJhY3RlcnMuICBNb3N0bHkgdXNlZAorCQlpbiBVU0EgYW5kIEV1cm9wZS4gIEV4YW1wbGU6IElTTy04ODU5LTEgKExhdGluMSkuICBBbGwKKwkJY2hhcmFjdGVycyBvY2N1cHkgb25lIHNjcmVlbiBjZWxsIG9ubHkuCisKKzIgICAyYnl0ZQlEb3VibGUtYnl0ZSBlbmNvZGluZ3MsIG92ZXIgMTAwMDAgZGlmZmVyZW50IGNoYXJhY3RlcnMuCisJCU1vc3RseSB1c2VkIGluIEFzaWFuIGNvdW50cmllcy4gIEV4YW1wbGU6IGV1Yy1rciAoS29yZWFuKQorCQlUaGUgbnVtYmVyIG9mIHNjcmVlbiBjZWxscyBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzCisJCShleGNlcHQgZm9yIGV1Yy1qcCB3aGVuIHRoZSBmaXJzdCBieXRlIGlzIDB4OGUpLgorCit1ICAgVW5pY29kZQlVbml2ZXJzYWwgZW5jb2RpbmcsIGNhbiByZXBsYWNlIGFsbCBvdGhlcnMuICBJU08gMTA2NDYuCisJCU1pbGxpb25zIG9mIGRpZmZlcmVudCBjaGFyYWN0ZXJzLiAgRXhhbXBsZTogVVRGLTguICBUaGUKKwkJcmVsYXRpb24gYmV0d2VlbiBieXRlcyBhbmQgc2NyZWVuIGNlbGxzIGlzIGNvbXBsZXguCisKK090aGVyIGVuY29kaW5ncyBjYW5ub3QgYmUgdXNlZCBieSBWaW0gaW50ZXJuYWxseS4gIEJ1dCBmaWxlcyBpbiBvdGhlcgorZW5jb2RpbmdzIGNhbiBiZSBlZGl0ZWQgYnkgdXNpbmcgY29udmVyc2lvbiwgc2VlICdmaWxlZW5jb2RpbmcnLgorTm90ZSB0aGF0IGFsbCBlbmNvZGluZ3MgbXVzdCB1c2UgQVNDSUkgZm9yIHRoZSBjaGFyYWN0ZXJzIHVwIHRvIDEyOCAoZXhjZXB0Cit3aGVuIGNvbXBpbGVkIGZvciBFQkNESUMpLgorCitTdXBwb3J0ZWQgJ2VuY29kaW5nJyB2YWx1ZXMgYXJlOgkJCSplbmNvZGluZy12YWx1ZXMqCisxICAgbGF0aW4xCTgtYml0IGNoYXJhY3RlcnMgKElTTyA4ODU5LTEpCisxICAgaXNvLTg4NTktbglJU09fODg1OSB2YXJpYW50IChuID0gMiB0byAxNSkKKzEgICBrb2k4LXIJUnVzc2lhbgorMSAgIGtvaTgtdQlVa3JhaW5pYW4KKzEgICBtYWNyb21hbiAgICBNYWNSb21hbiAoTWFjaW50b3NoIGVuY29kaW5nKQorMSAgIDhiaXQte25hbWV9IGFueSA4LWJpdCBlbmNvZGluZyAoVmltIHNwZWNpZmljIG5hbWUpCisxICAgY3B7bnVtYmVyfQlNUy1XaW5kb3dzOiBhbnkgaW5zdGFsbGVkIHNpbmdsZS1ieXRlIGNvZGVwYWdlCisyICAgY3A5MzIJSmFwYW5lc2UgKFdpbmRvd3Mgb25seSkKKzIgICBldWMtanAJSmFwYW5lc2UgKFVuaXggb25seSkKKzIgICBzamlzCUphcGFuZXNlIChVbml4IG9ubHkpCisyICAgY3A5NDkJS29yZWFuIChVbml4IGFuZCBXaW5kb3dzKQorMiAgIGV1Yy1rcglLb3JlYW4gKFVuaXggb25seSkKKzIgICBjcDkzNglzaW1wbGlmaWVkIENoaW5lc2UgKFdpbmRvd3Mgb25seSkKKzIgICBldWMtY24Jc2ltcGxpZmllZCBDaGluZXNlIChVbml4IG9ubHkpCisyICAgY3A5NTAJdHJhZGl0aW9uYWwgQ2hpbmVzZSAob24gVW5peCBhbGlhcyBmb3IgYmlnNSkKKzIgICBiaWc1CXRyYWRpdGlvbmFsIENoaW5lc2UgKG9uIFdpbmRvd3MgYWxpYXMgZm9yIGNwOTUwKQorMiAgIGV1Yy10dwl0cmFkaXRpb25hbCBDaGluZXNlIChVbml4IG9ubHkpCisyICAgMmJ5dGUte25hbWV9IFVuaXg6IGFueSBkb3VibGUtYnl0ZSBlbmNvZGluZyAoVmltIHNwZWNpZmljIG5hbWUpCisyICAgY3B7bnVtYmVyfQlNUy1XaW5kb3dzOiBhbnkgaW5zdGFsbGVkIGRvdWJsZS1ieXRlIGNvZGVwYWdlCit1ICAgdXRmLTgJMzIgYml0IFVURi04IGVuY29kZWQgVW5pY29kZSAoSVNPL0lFQyAxMDY0Ni0xKQordSAgIHVjcy0yCTE2IGJpdCBVQ1MtMiBlbmNvZGVkIFVuaWNvZGUgKElTTy9JRUMgMTA2NDYtMSkKK3UgICB1Y3MtMmxlCWxpa2UgdWNzLTIsIGxpdHRsZSBlbmRpYW4KK3UgICB1dGYtMTYJdWNzLTIgZXh0ZW5kZWQgd2l0aCBkb3VibGUtd29yZHMgZm9yIG1vcmUgY2hhcmFjdGVycwordSAgIHV0Zi0xNmxlCWxpa2UgdXRmLTE2LCBsaXR0bGUgZW5kaWFuCit1ICAgdWNzLTQJMzIgYml0IFVDUy00IGVuY29kZWQgVW5pY29kZSAoSVNPL0lFQyAxMDY0Ni0xKQordSAgIHVjcy00bGUJbGlrZSB1Y3MtNCwgbGl0dGxlIGVuZGlhbgorCitUaGUge25hbWV9IGNhbiBiZSBhbnkgZW5jb2RpbmcgbmFtZSB0aGF0IHlvdXIgc3lzdGVtIHN1cHBvcnRzLiAgSXQgaXMgcGFzc2VkCit0byBpY29udigpIHRvIGNvbnZlcnQgYmV0d2VlbiB0aGUgZW5jb2Rpbmcgb2YgdGhlIGZpbGUgYW5kIHRoZSBjdXJyZW50IGxvY2FsZS4KK0ZvciBNUy1XaW5kb3dzICJjcHtudW1iZXJ9IiBtZWFucyB1c2luZyBjb2RlcGFnZSB7bnVtYmVyfS4KK0V4YW1wbGVzOiA+CisJCTpzZXQgZW5jb2Rpbmc9OGJpdC1jcDEyNTIKKwkJOnNldCBlbmNvZGluZz0yYnl0ZS1jcDkzMgorPAorU2V2ZXJhbCBhbGlhc2VzIGNhbiBiZSB1c2VkLCB0aGV5IGFyZSB0cmFuc2xhdGVkIHRvIG9uZSBvZiB0aGUgbmFtZXMgYWJvdmUuCitBbiBpbmNvbXBsZXRlIGxpc3Q6CisKKzEgICBhbnNpCXNhbWUgYXMgbGF0aW4xIChvYnNvbGV0ZSwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpCisyICAgamFwYW4JSmFwYW5lc2U6IG9uIFVuaXggImV1Yy1qcCIsIG9uIE1TLVdpbmRvd3MgY3A5MzIKKzIgICBrb3JlYQlLb3JlYW46IG9uIFVuaXggImV1Yy1rciIsIG9uIE1TLVdpbmRvd3MgY3A5NDkKKzIgICBwcmMJCXNpbXBsaWZpZWQgQ2hpbmVzZTogb24gVW5peCAiZXVjLWNuIiwgb24gTVMtV2luZG93cyBjcDkzNgorMiAgIGNoaW5lc2UgICAgIHNhbWUgYXMgInByYyIKKzIgICB0YWl3YW4JdHJhZGl0aW9uYWwgQ2hpbmVzZTogb24gVW5peCAiZXVjLXR3Iiwgb24gTVMtV2luZG93cyBjcDk1MAordSAgIHV0ZjgJc2FtZSBhcyB1dGYtOAordSAgIHVuaWNvZGUJc2FtZSBhcyB1Y3MtMgordSAgIHVjczJiZQlzYW1lIGFzIHVjcy0yIChiaWcgZW5kaWFuKQordSAgIHVjcy0yYmUJc2FtZSBhcyB1Y3MtMiAoYmlnIGVuZGlhbikKK3UgICB1Y3MtNGJlCXNhbWUgYXMgdWNzLTQgKGJpZyBlbmRpYW4pCisKK0ZvciB0aGUgVUNTIGNvZGVzIHRoZSBieXRlIG9yZGVyIG1hdHRlcnMuICBUaGlzIGlzIHRyaWNreSwgdXNlIFVURi04IHdoZW5ldmVyCit5b3UgY2FuLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGJpZy1lbmRpYW4gKG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBjb21lcworZmlyc3QpOgorCSAgICBuYW1lCWJ5dGVzCQljaGFyIH4KKwkgICAgdWNzLTIJICAgICAgMTEgMjIJICAgIDExMjIKKwkgICAgdWNzLTJsZQkgICAgICAyMiAxMQkgICAgMTEyMgorCSAgICB1Y3MtNAkxMSAyMiAzMyA0NAkxMTIyMzM0NAorCSAgICB1Y3MtNGxlCTQ0IDMzIDIyIDExCTExMjIzMzQ0CisKK09uIE1TLVdpbmRvd3Mgc3lzdGVtcyB5b3Ugb2Z0ZW4gd2FudCB0byB1c2UgInVjcy0ybGUiLCBiZWNhdXNlIGl0IHVzZXMgbGl0dGxlCitlbmRpYW4gVUNTLTIuCisKK1RoZXJlIGFyZSBhIGZldyBlbmNvZGluZ3Mgd2hpY2ggYXJlIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSB0aGUgc2FtZS4gIFZpbQordHJlYXRzIHRoZW0gYXMgaWYgdGhleSB3ZXJlIGRpZmZlcmVudCBlbmNvZGluZ3MsIHNvIHRoYXQgY29udmVyc2lvbiB3aWxsIGJlCitkb25lIHdoZW4gbmVlZGVkLiAgWW91IG1pZ2h0IHdhbnQgdG8gdXNlIHRoZSBzaW1pbGFyIG5hbWUgdG8gYXZvaWQgY29udmVyc2lvbgorb3Igd2hlbiBjb252ZXJzaW9uIGlzIG5vdCBwb3NzaWJsZToKKworCWNwOTMyLCBzaGlmdC1qaXMsIHNqaXMKKwljcDkzNiwgZXVjLWNuCisKKwkJCQkJCQkqZW5jb2RpbmctdGFibGUqCitOb3JtYWxseSAnZW5jb2RpbmcnIGlzIGVxdWFsIHRvIHlvdXIgY3VycmVudCBsb2NhbGUgYW5kICd0ZXJtZW5jb2RpbmcnIGlzCitlbXB0eS4gIFRoaXMgbWVhbnMgdGhhdCB5b3VyIGtleWJvYXJkIGFuZCBkaXNwbGF5IHdvcmsgd2l0aCBjaGFyYWN0ZXJzIGVuY29kZWQKK2luIHlvdXIgY3VycmVudCBsb2NhbGUsIGFuZCBWaW0gdXNlcyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGludGVybmFsbHkuCisKK1lvdSBjYW4gbWFrZSBWaW0gdXNlIGNoYXJhY3RlcnMgaW4gYSBkaWZmZXJlbnQgZW5jb2RpbmcgYnkgc2V0dGluZyB0aGUKKydlbmNvZGluZycgb3B0aW9uIHRvIGEgZGlmZmVyZW50IHZhbHVlLiAgU2luY2UgdGhlIGtleWJvYXJkIGFuZCBkaXNwbGF5IHN0aWxsCit1c2UgdGhlIGN1cnJlbnQgbG9jYWxlLCBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIGRvbmUuICBUaGUgJ3Rlcm1lbmNvZGluZycgdGhlbgordGFrZXMgb3ZlciB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLCBzbyBWaW0gY29udmVydHMgYmV0d2VlbiAnZW5jb2RpbmcnCithbmQgJ3Rlcm1lbmNvZGluZycuICBFeGFtcGxlOiA+CisJOmxldCAmdGVybWVuY29kaW5nID0gJmVuY29kaW5nCisJOnNldCBlbmNvZGluZz11dGYtOAorCitIb3dldmVyLCBub3QgYWxsIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMgYXJlIHBvc3NpYmxlLiAgVGhlIHRhYmxlIGJlbG93IHRlbGxzCit5b3UgaG93IGVhY2ggb2YgdGhlIG5pbmUgY29tYmluYXRpb25zIHdvcmtzLiAgVGhpcyBpcyBmdXJ0aGVyIHJlc3RyaWN0ZWQgYnkKK25vdCBhbGwgY29udmVyc2lvbnMgYmVpbmcgcG9zc2libGUsIGljb252KCkgYmVpbmcgcHJlc2VudCwgZXRjLiAgU2luY2UgdGhpcworZGVwZW5kcyBvbiB0aGUgc3lzdGVtIHVzZWQsIG5vIGRldGFpbGVkIGxpc3QgY2FuIGJlIGdpdmVuLgorCisoJ3RlbmMnIGlzIHRoZSBzaG9ydCBuYW1lIGZvciAndGVybWVuY29kaW5nJyBhbmQgJ2VuYycgc2hvcnQgZm9yICdlbmNvZGluZycpCisKKyd0ZW5jJwkgICAgJ2VuYycJcmVtYXJrIH4KKworIDhiaXQJICAgIDhiaXQJV29ya3MuICBXaGVuICd0ZXJtZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tCisJCQknZW5jb2RpbmcnIHR5cGluZyBhbmQgZGlzcGxheWluZyBtYXkgYmUgd3JvbmcgZm9yIHNvbWUKKwkJCWNoYXJhY3RlcnMsIFZpbSBkb2VzIE5PVCBwZXJmb3JtIGNvbnZlcnNpb24gKHNldAorCQkJJ2VuY29kaW5nJyB0byAidXRmLTgiIHRvIGdldCB0aGlzKS4KKyA4Yml0ICAgICAgMmJ5dGUJTVMtV2luZG93czogd29ya3MgZm9yIGFsbCBjb2RlcGFnZXMgaW5zdGFsbGVkIG9uIHlvdXIKKwkJCXN5c3RlbTsgeW91IGNhbiBvbmx5IHR5cGUgOGJpdCBjaGFyYWN0ZXJzOworCQkJT3RoZXIgc3lzdGVtczogZG9lcyBOT1Qgd29yay4KKyA4Yml0CSAgIFVuaWNvZGUJV29ya3MsIGJ1dCB5b3UgY2FuIG9ubHkgdHlwZSA4Yml0IGNoYXJhY3RlcnM7IGluIGEKKwkJCXRlcm1pbmFsIHlvdSBjYW4gb25seSBzZWUgOGJpdCBjaGFyYWN0ZXJzOyB0aGUgR1VJIGNhbgorCQkJc2hvdyBhbGwgY2hhcmFjdGVycyB0aGF0IHRoZSAnZ3VpZm9udCcgc3VwcG9ydHMuCisKKyAyYnl0ZQkgICAgOGJpdAlXb3JrcywgYnV0IHR5cGluZyBub24tQVNDSUkgY2hhcmFjdGVycyBtaWdodAorCQkJYmUgYSBwcm9ibGVtLgorIDJieXRlCSAgIDJieXRlCU1TLVdpbmRvd3M6IHdvcmtzIGZvciBhbGwgY29kZXBhZ2VzIGluc3RhbGxlZCBvbiB5b3VyCisJCQlzeXN0ZW07IHR5cGluZyBjaGFyYWN0ZXJzIG1pZ2h0IGJlIGEgcHJvYmxlbSB3aGVuCisJCQlsb2NhbGUgaXMgZGlmZmVyZW50IGZyb20gJ2VuY29kaW5nJy4KKwkJCU90aGVyIHN5c3RlbXM6IE9ubHkgd29ya3Mgd2hlbiAndGVybWVuY29kaW5nJyBpcyBlcXVhbAorCQkJdG8gJ2VuY29kaW5nJywgeW91IG1pZ2h0IGFzIHdlbGwgbGVhdmUgaXQgZW1wdHkuCisgMmJ5dGUJICAgVW5pY29kZQl3b3JrcywgVmltIHdpbGwgdHJhbnNsYXRlIHR5cGVkIGNoYXJhY3RlcnMuCisKKyBVbmljb2RlICAgIDhiaXQJd29ya3MgKHVudXN1YWwpCisgVW5pY29kZSAgICAyYnl0ZQlkb2VzIE5PVCB3b3JrCisgVW5pY29kZSAgIFVuaWNvZGUJd29ya3MgdmVyeSB3ZWxsIChsZWF2aW5nICd0ZXJtZW5jb2RpbmcnIGVtcHR5IHdvcmtzCisJCQl0aGUgc2FtZSB3YXksIGJlY2F1c2UgYWxsIFVuaWNvZGUgaXMgaGFuZGxlZAorCQkJaW50ZXJuYWxseSBhcyBVVEYtOCkKKworQ09OVkVSU0lPTgkJCQkJCSpjaGFyc2V0LWNvbnZlcnNpb24qCisKK1ZpbSB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCBmcm9tIG9uZSB0byBhbm90aGVyIGVuY29kaW5nIGluIHNldmVyYWwgcGxhY2VzOgorLSBXaGVuIHJlYWRpbmcgYSBmaWxlIGFuZCAnZmlsZWVuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnCistIFdoZW4gd3JpdGluZyBhIGZpbGUgYW5kICdmaWxlZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycKKy0gV2hlbiBkaXNwbGF5aW5nIGNoYXJhY3RlcnMgYW5kICd0ZXJtZW5jb2RpbmcnIGlzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycKKy0gV2hlbiByZWFkaW5nIGlucHV0IGFuZCAndGVybWVuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnCistIFdoZW4gZGlzcGxheWluZyBtZXNzYWdlcyBhbmQgdGhlIGVuY29kaW5nIHVzZWQgZm9yIExDX01FU1NBR0VTIGRpZmZlcnMgZnJvbQorICAnZW5jb2RpbmcnIChyZXF1aXJlcyBhIGdldHRleHQgdmVyc2lvbiB0aGF0IHN1cHBvcnRzIHRoaXMpLgorLSBXaGVuIHJlYWRpbmcgYSBWaW0gc2NyaXB0IHdoZXJlIHw6c2NyaXB0ZW5jb2Rpbmd8IGlzIGRpZmZlcmVudCBmcm9tCisgICdlbmNvZGluZycuCistIFdoZW4gcmVhZGluZyBvciB3cml0aW5nIGEgfHZpbWluZm98IGZpbGUuCitNb3N0IG9mIHRoZXNlIHJlcXVpcmUgdGhlIHwraWNvbnZ8IGZlYXR1cmUuICBDb252ZXJzaW9uIGZvciByZWFkaW5nIGFuZAord3JpdGluZyBmaWxlcyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgJ2NoYXJjb252ZXJ0JyBvcHRpb24uCisKK1VzZWZ1bCB1dGlsaXRpZXMgZm9yIGNvbnZlcnRpbmcgdGhlIGNoYXJzZXQ6CisgICAgQWxsOgkgICAgaWNvbnYKKwlHTlUgaWNvbnYgY2FuIGNvbnZlcnQgbW9zdCBlbmNvZGluZ3MuICBVbmljb2RlIGlzIHVzZWQgYXMgdGhlCisJaW50ZXJtZWRpYXRlIGVuY29kaW5nLCB3aGljaCBhbGxvd3MgY29udmVyc2lvbiBmcm9tIGFuZCB0byBhbGwgb3RoZXIKKwllbmNvZGluZ3MuICBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2RpcmVjdG9yeS9saWJpY29udi5odG1sLgorCisgICAgSmFwYW5lc2U6CSAgICBua2YKKwlOa2YgaXMgIk5ldHdvcmsgS2FuamkgY29kZSBjb252ZXJzaW9uIEZpbHRlciIuICBPbmUgb2YgdGhlIG1vc3QgdW5pcXVlCisJZmFjaWxpdHkgb2YgbmtmIGlzIHRoZSBndWVzcyBvZiB0aGUgaW5wdXQgS2FuamkgY29kZS4gIFNvLCB5b3UgZG9uJ3QKKwluZWVkIHRvIGtub3cgd2hhdCB0aGUgaW5wdXR0aW5nIGZpbGUncyB8Y2hhcnNldHwgaXMuICBXaGVuIGNvbnZlcnQgdG8KKwlFVUMtSlAgZnJvbSBJU08tMjAyMi1KUCBvciBTaGlmdF9KSVMsIHNpbXBseSBkbyB0aGUgZm9sbG93aW5nIGNvbW1hbmQKKwlpbiBWaW06CisJICAgIDolIW5rZiAtZQorCU5rZiBjYW4gYmUgZm91bmQgYXQ6CisJaHR0cDovL3d3dy5zZmMud2lkZS5hZC5qcC9+bWF4L0ZyZWVCU0QvcG9ydHMvZGlzdGZpbGVzL25rZi0xLjYyLnRhci5negorCisgICAgQ2hpbmVzZToJICAgIGhjCisJSGMgaXMgIkhhbnppIENvbnZlcnRlciIuICBIYyBjb252ZXJ0IGEgR0IgZmlsZSB0byBhIEJpZzUgZmlsZSwgb3IgQmlnNQorCWZpbGUgdG8gR0IgZmlsZS4gIEhjIGNhbiBiZSBmb3VuZCBhdDoKKwlmdHA6Ly9mdHAuY3Voay5oay9wdWIvY2hpbmVzZS9pZmNzcy9zb2Z0d2FyZS91bml4L2NvbnZlcnQvaGMtMzAudGFyLmd6CisKKyAgICBLb3JlYW46CSAgICBobWNvbnYKKwlIbWNvbnYgaXMgS29yZWFuIGNvZGUgY29udmVyc2lvbiB1dGlsaXR5IGVzcGVjaWFsbHkgZm9yIEUtbWFpbC4gSXQgY2FuCisJY29udmVydCBiZXR3ZWVuIEVVQy1LUiBhbmQgSVNPLTIwMjItS1IuICBIbWNvbnYgY2FuIGJlIGZvdW5kIGF0OgorCWZ0cDovL2Z0cC5rYWlzdC5hYy5rci9wdWIvaGFuZ3VsL2NvZGUvaG1jb252LworCisgICAgTXVsdGlsaW5ndWFsOiAgIGx2CisJTHYgaXMgYSBQb3dlcmZ1bCBNdWx0aWxpbmd1YWwgRmlsZSBWaWV3ZXIuICBBbmQgaXQgY2FuIGJlIHdvcmtlZCBhcworCXxjaGFyc2V0fCBjb252ZXJ0ZXIuICBTdXBwb3J0ZWQgfGNoYXJzZXR8OiBJU08tMjAyMi1DTiwgSVNPLTIwMjItSlAsCisJSVNPLTIwMjItS1IsIEVVQy1DTiwgRVVDLUpQLCBFVUMtS1IsIEVVQy1UVywgVVRGLTcsIFVURi04LCBJU08tODg1OQorCXNlcmllcywgU2hpZnRfSklTLCBCaWc1IGFuZCBIWi4gTHYgY2FuIGJlIGZvdW5kIGF0OgorCWh0dHA6Ly93d3cuZmYuaWlqNHUub3IuanAvfm5ydC9mcmVld2FyZS9sdjQ0OTUudGFyLmd6CisKKworCQkJCQkJCSptYnl0ZS1jb252ZXJzaW9uKgorV2hlbiByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGluIGFuIGVuY29kaW5nIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycsCitjb252ZXJzaW9uIG5lZWRzIHRvIGJlIGRvbmUuICBUaGVzZSBjb252ZXJzaW9ucyBhcmUgc3VwcG9ydGVkOgorLSBBbGwgY29udmVyc2lvbnMgYmV0d2VlbiBMYXRpbi0xIChJU08tODg1OS0xKSwgVVRGLTgsIFVDUy0yIGFuZCBVQ1MtNCBhcmUKKyAgaGFuZGxlZCBpbnRlcm5hbGx5LgorLSBGb3IgTVMtV2luZG93cywgd2hlbiAnZW5jb2RpbmcnIGlzIGEgVW5pY29kZSBlbmNvZGluZywgY29udmVyc2lvbiBmcm9tIGFuZAorICB0byBhbnkgY29kZXBhZ2Ugc2hvdWxkIHdvcmsuCistIENvbnZlcnNpb24gc3BlY2lmaWVkIHdpdGggJ2NoYXJjb252ZXJ0JworLSBDb252ZXJzaW9uIHdpdGggdGhlIGljb252IGxpYnJhcnksIGlmIGl0IGlzIGF2YWlsYWJsZS4KKwlPbGQgdmVyc2lvbnMgb2YgR05VIGljb252KCkgbWF5IGNhdXNlIHRoZSBjb252ZXJzaW9uIHRvIGZhaWwgKHRoZXkKKwlyZXF1ZXN0IGEgdmVyeSBsYXJnZSBidWZmZXIsIG1vcmUgdGhhbiBWaW0gaXMgd2lsbGluZyB0byBwcm92aWRlKS4KKwlUcnkgZ2V0dGluZyBhbm90aGVyIGljb252KCkgaW1wbGVtZW50YXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVXNpbmcgYSB0ZXJtaW5hbAkJCQkJKm1ieXRlLXRlcm1pbmFsKgorCitUaGUgR1VJIGZ1bGx5IHN1cHBvcnRzIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gIEl0IGlzIGFsc28gcG9zc2libGUgaW4gYQordGVybWluYWwsIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyB0aGUgc2FtZSBlbmNvZGluZyB0aGF0IFZpbSB1c2VzLiAgVGh1cyB0aGlzCitpcyBsZXNzIGZsZXhpYmxlLgorCitGb3IgZXhhbXBsZSwgeW91IGNhbiBydW4gVmltIGluIGEgeHRlcm0gd2l0aCBhZGRlZCBtdWx0aS1ieXRlIHN1cHBvcnQgYW5kL29yCit8WElNfC4gIEV4YW1wbGVzIGFyZSBrdGVybSAoS2FuamkgdGVybSkgYW5kIGhhbnRlcm0gKGZvciBLb3JlYW4pLCBFdGVybQorKEVubGlnaHRlbmVkIHRlcm1pbmFsKSBhbmQgcnh2dC4KKworSWYgeW91ciB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoZSByaWdodCBlbmNvZGluZywgeW91IGNhbiBzZXQgdGhlCisndGVybWVuY29kaW5nJyBvcHRpb24uICBWaW0gd2lsbCB0aGVuIGNvbnZlcnQgdGhlIHR5cGVkIGNoYXJhY3RlcnMgZnJvbQorJ3Rlcm1lbmNvZGluZycgdG8gJ2VuY29kaW5nJy4gIEFuZCBkaXNwbGF5ZWQgdGV4dCB3aWxsIGJlIGNvbnZlcnRlZCBmcm9tCisnZW5jb2RpbmcnIHRvICd0ZXJtZW5jb2RpbmcnLiAgSWYgdGhlIGVuY29kaW5nIHN1cHBvcnRlZCBieSB0aGUgdGVybWluYWwKK2RvZXNuJ3QgaW5jbHVkZSBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCBWaW0gdXNlcywgdGhpcyBsZWFkcyB0byBsb3N0CitjaGFyYWN0ZXJzLiAgVGhpcyBtYXkgbWVzcyB1cCB0aGUgZGlzcGxheS4gIElmIHlvdSB1c2UgYSB0ZXJtaW5hbCB0aGF0CitzdXBwb3J0cyBVbmljb2RlLCBzdWNoIGFzIHRoZSB4dGVybSBtZW50aW9uZWQgYmVsb3csIGl0IHNob3VsZCB3b3JrIGp1c3QgZmluZSwKK3NpbmNlIG5lYXJseSBldmVyeSBjaGFyYWN0ZXIgc2V0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gVW5pY29kZSB3aXRob3V0IGxvc3Mgb2YKK2luZm9ybWF0aW9uLgorCisKK1VURi04IElOIFhGUkVFODYgWFRFUk0JCQkJCSpVVEY4LXh0ZXJtKgorCitUaGlzIGlzIGEgc2hvcnQgZXhwbGFuYXRpb24gb2YgaG93IHRvIHVzZSBVVEYtOCBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gdGhlCit4dGVybSB0aGF0IGNvbWVzIHdpdGggWEZyZWU4NiBieSBUaG9tYXMgRGlja2V5ICh0ZXh0IGJ5IE1hcmt1cyBLdWhuKS4KKworR2V0IHRoZSBsYXRlc3QgeHRlcm0gdmVyc2lvbiB3aGljaCBoYXMgbm93IFVURi04IHN1cHBvcnQ6CisKKwlodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQveHRlcm0veHRlcm0uaHRtbAorCitDb21waWxlIGl0IHdpdGggIi4vY29uZmlndXJlIC0tZW5hYmxlLXdpZGUtY2hhcnMgOyBtYWtlIgorCitBbHNvIGdldCB0aGUgSVNPIDEwNjQ2LTEgdmVyc2lvbiBvZiB2YXJpb3VzIGZvbnRzLCB3aGljaCBpcyBhdmFpbGFibGUgb24KKworCWh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS9kb3dubG9hZC91Y3MtZm9udHMudGFyLmd6CisKK2FuZCBpbnN0YWxsIHRoZSBmb250IGFzIGRlc2NyaWJlZCBpbiB0aGUgUkVBRE1FIGZpbGUuCisKK05vdyBzdGFydCB4dGVybSB3aXRoID4KKworICB4dGVybSAtdTggLWZuIC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKK29yLCBmb3IgYmlnZ2VyIGNoYXJhY3RlcjogPgorICB4dGVybSAtdTggLWZuIC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvMTA2NDYtMQorCithbmQgeW91IHdpbGwgaGF2ZSBhIHdvcmtpbmcgVVRGLTggdGVybWluYWwgZW11bGF0b3IuIFRyeSBib3RoID4KKworICAgY2F0IHV0Zi04LWRlbW8udHh0CisgICB2aW0gdXRmLTgtZGVtby50eHQKKword2l0aCB0aGUgZGVtbyB0ZXh0IHRoYXQgY29tZXMgd2l0aCB1Y3MtZm9udHMudGFyLmd6IGluIG9yZGVyIHRvIHNlZQord2hldGhlciB0aGVyZSBhcmUgYW55IHByb2JsZW1zIHdpdGggVVRGLTggaW4geW91ciB4dGVybS4KKworRm9yIFZpbSB5b3UgbWF5IG5lZWQgdG8gc2V0ICdlbmNvZGluZycgdG8gInV0Zi04Ii4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiAgRm9udHMgb24gWDExCQkJCQkqbWJ5dGUtZm9udHMtWDExKgorCitVbmZvcnR1bmF0ZWx5LCB1c2luZyBmb250cyBpbiBYMTEgaXMgY29tcGxpY2F0ZWQuICBUaGUgbmFtZSBvZiBhIHNpbmdsZS1ieXRlCitmb250IGlzIGEgbG9uZyBzdHJpbmcuICBGb3IgbXVsdGktYnl0ZSBmb250cyB3ZSBuZWVkIHNldmVyYWwgb2YgdGhlc2UuLi4KKworTm90ZTogTW9zdCBvZiB0aGlzIGlzIG5vIGxvbmdlciByZWxldmFudCBmb3IgR1RLKyAyLiAgU2VsZWN0aW5nIGEgZm9udCB2aWEKK2l0cyBYTEZEIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZTsgc2VlICdndWlmb250JyBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8KK3NldCB0aGUgZm9udC4gIERvIHlvdXJzZWxmIGEgZmF2b3IgYW5kIGlnbm9yZSB0aGUgfFhMRkR8IGFuZCB8eGZvbnRzZXR8CitzZWN0aW9ucyBiZWxvdy4KKworRmlyc3Qgb2YgYWxsLCBWaW0gb25seSBhY2NlcHRzIGZpeGVkLXdpZHRoIGZvbnRzIGZvciBkaXNwbGF5aW5nIHRleHQuICBZb3UKK2Nhbm5vdCB1c2UgcHJvcG9ydGlvbmFsbHkgc3BhY2VkIGZvbnRzLiAgVGhpcyBleGNsdWRlcyBtYW55IG9mIHRoZSBhdmFpbGFibGUKKyhhbmQgbmljZXIgbG9va2luZykgZm9udHMuICBIb3dldmVyLCBmb3IgbWVudXMgYW5kIHRvb2x0aXBzIGFueSBmb250IGNhbiBiZQordXNlZC4KKworTm90ZSB0aGF0IERpc3BsYXkgYW5kIElucHV0IGFyZSBpbmRlcGVuZGVudC4gIEl0IGlzIHBvc3NpYmxlIHRvIHNlZSB5b3VyCitsYW5ndWFnZSBldmVuIHRob3VnaCB5b3UgaGF2ZSBubyBpbnB1dCBtZXRob2QgZm9yIGl0LgorCitZb3Ugc2hvdWxkIGdldCBhIGRlZmF1bHQgZm9udCBmb3IgbWVudXMgYW5kIHRvb2x0aXBzIHRoYXQgd29ya3MsIGJ1dCBpdCBtaWdodAorYmUgdWdseS4gIFJlYWQgdGhlIGZvbGxvd2luZyB0byBmaW5kIG91dCBob3cgdG8gc2VsZWN0IGEgYmV0dGVyIGZvbnQuCisKKworWCBMT0dJQ0FMIEZPTlQgREVTQ1JJUFRJT04gKFhMRkQpCisJCQkJCQkJKlhMRkQqCitYTEZEIGlzIHRoZSBYIGZvbnQgbmFtZSBhbmQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb250IHNpemUsCitjaGFyc2V0LCBldGMuICBUaGUgbmFtZSBpcyBpbiB0aGlzIGZvcm1hdDoKKworRk9VTkRSWS1GQU1JTFktV0VJR0hULVNMQU5ULVdJRFRILVNUWUxFLVBJWEVMLVBPSU5ULVgtWS1TUEFDRS1BVkUtQ1ItQ0UKKworRWFjaCBmaWVsZCBtZWFuczoKKworLSBGT1VORFJZOiAgRk9VTkRSWSBmaWVsZC4gIFRoZSBjb21wYW55IHRoYXQgY3JlYXRlZCB0aGUgZm9udC4KKy0gRkFNSUxZOiAgIEZBTUlMWV9OQU1FIGZpZWxkLiAgQmFzaWMgZm9udCBmYW1pbHkgbmFtZS4gIChoZWx2ZXRpY2EsIGdvdGhpYywKKwkgICAgdGltZXMsIGV0YykKKy0gV0VJR0hUOiAgIFdFSUdIVF9OQU1FIGZpZWxkLiAgSG93IHRoaWNrIHRoZSBsZXR0ZXJzIGFyZS4gIChsaWdodCwgbWVkaXVtLAorCSAgICBib2xkLCBldGMpCistIFNMQU5UOiAgICBTTEFOVCBmaWVsZC4KKwkJcjogIFJvbWFuIChubyBzbGFudCkKKwkJaTogIEl0YWxpYworCQlvOiAgT2JsaXF1ZQorCQlyaTogUmV2ZXJzZSBJdGFsaWMKKwkJcm86IFJldmVyc2UgT2JsaXF1ZQorCQlvdDogT3RoZXIKKwkJbnVtYmVyOglTY2FsZWQgZm9udAorLSBXSURUSDogICAgU0VUV0lEVEhfTkFNRSBmaWVsZC4gIFdpZHRoIG9mIGNoYXJhY3RlcnMuICAobm9ybWFsLCBjb25kZW5zZWQsCisJICAgIG5hcnJvdywgZG91YmxlIHdpZGUpCistIFNUWUxFOiAgICBBRERfU1RZTEVfTkFNRSBmaWVsZC4gIEV4dHJhIGluZm8gdG8gZGVzY3JpYmUgZm9udC4gIChTZXJpZiwgU2FucworCSAgICBTZXJpZiwgSW5mb3JtYWwsIERlY29yYXRlZCwgZXRjKQorLSBQSVhFTDogICAgUElYRUxfU0laRSBmaWVsZC4gIEhlaWdodCwgaW4gcGl4ZWxzLCBvZiBjaGFyYWN0ZXJzLgorLSBQT0lOVDogICAgUE9JTlRfU0laRSBmaWVsZC4gIFRlbiB0aW1lcyBoZWlnaHQgb2YgY2hhcmFjdGVycyBpbiBwb2ludHMuCistIFg6CSAgICBSRVNPTFVUSU9OX1ggZmllbGQuICBYIHJlc29sdXRpb24gKGRvdHMgcGVyIGluY2gpLgorLSBZOgkgICAgUkVTT0xVVElPTl9ZIGZpZWxkLiAgWSByZXNvbHV0aW9uIChkb3RzIHBlciBpbmNoKS4KKy0gU1BBQ0U6ICAgIFNQQUNJTkcgZmllbGQuCisJCXA6ICBQcm9wb3J0aW9uYWwKKwkJbTogIE1vbm9zcGFjZWQKKwkJYzogIENoYXJDZWxsCistIEFWRToJICAgIEFWRVJBR0VfV0lEVEggZmllbGQuICBUZW4gdGltZXMgYXZlcmFnZSB3aWR0aCBpbiBwaXhlbHMuCistIENSOgkgICAgQ0hBUlNFVF9SRUdJU1RSWSBmaWVsZC4gIFRoZSBuYW1lIG9mIHRoZSBjaGFyc2V0IGdyb3VwLgorLSBDRToJICAgIENIQVJTRVRfRU5DT0RJTkcgZmllbGQuICBUaGUgcmVzdCBvZiB0aGUgY2hhcnNldCBuYW1lLiAgRm9yIHNvbWUKKwkgICAgY2hhcnNldHMsIHN1Y2ggYXMgSklTIFggMDIwOCwgaWYgdGhpcyBmaWVsZCBpcyAwLCBjb2RlIHBvaW50cyBoYXMKKwkgICAgdGhlIHNhbWUgdmFsdWUgYXMgR0wsIGFuZCBHUiBpZiAxLgorCitGb3IgZXhhbXBsZSwgaW4gY2FzZSBvZiBhIDE0IGRvdHMgZm9udCBjb3JyZXNwb25kaW5nIHRvIEpJUyBYIDAyMDgsIGl0IGlzCit3cml0dGVuIGxpa2U6CisgICAgLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNi0xMTAtMTAwLTEwMC1jLTE2MC1qaXN4MDIwOC4xOTkwLTAKKworCitYIEZPTlRTRVQKKwkJCQkJCSpmb250c2V0KiAqeGZvbnRzZXQqCitBIHNpbmdsZS1ieXRlIGNoYXJzZXQgaXMgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBvbmUgZm9udC4gIEZvciBtdWx0aS1ieXRlCitjaGFyc2V0cyBhIGNvbWJpbmF0aW9uIG9mIGZvbnRzIGlzIG9mdGVuIHVzZWQuICBUaGlzIG1lYW5zIHRoYXQgb25lIGdyb3VwIG9mCitjaGFyYWN0ZXJzIGFyZSB1c2VkIGZyb20gb25lIGZvbnQgYW5kIGFub3RoZXIgZ3JvdXAgZnJvbSBhbm90aGVyIGZvbnQgKHdoaWNoCittaWdodCBiZSBkb3VibGUgd2lkZSkuICBUaGlzIGNvbGxlY3Rpb24gb2YgZm9udHMgaXMgY2FsbGVkIGEgZm9udHNldC4KKworV2hpY2ggZm9udHMgYXJlIHJlcXVpcmVkIGluIGEgZm9udHNldCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4gIFgKK3dpbmRvd3MgbWFpbnRhaW5zIGEgdGFibGUgb2Ygd2hpY2ggZ3JvdXBzIG9mIGNoYXJhY3RlcnMgYXJlIHJlcXVpcmVkIGZvciBhCitsb2NhbGUuICBZb3UgaGF2ZSB0byBzcGVjaWZ5IGFsbCB0aGUgZm9udHMgdGhhdCBhIGxvY2FsZSByZXF1aXJlcyBpbiB0aGUKKydndWlmb250c2V0JyBvcHRpb24uCisKK05PVEU6IFRoZSBmb250c2V0IGFsd2F5cyB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZSwgZXZlbiB0aG91Z2ggJ2VuY29kaW5nJyBtYXkKK2JlIHNldCB0byB1c2UgYSBkaWZmZXJlbnQgY2hhcnNldC4gIEluIHRoYXQgc2l0dWF0aW9uIHlvdSBtaWdodCB3YW50IHRvIHVzZQorJ2d1aWZvbnQnIGFuZCAnZ3VpZm9udHdpZGUnIGluc3RlYWQgb2YgJ2d1aWZvbnRzZXQnLgorCitFeGFtcGxlOgorICAgIHxjaGFyc2V0fCBsYW5ndWFnZQkJICAgICJncm91cHMgb2YgY2hhcmFjdGVycyIgfgorICAgIEdCMjMxMiAgICBDaGluZXNlIChzaW1wbGlmaWVkKSAgSVNPLTg4NTktMSBhbmQgR0IgMjMxMgorICAgIEJpZzUgICAgICBDaGluZXNlICh0cmFkaXRpb25hbCkgSVNPLTg4NTktMSBhbmQgQmlnNQorICAgIENOUy0xMTY0MyBDaGluZXNlICh0cmFkaXRpb25hbCkgSVNPLTg4NTktMSwgQ05TIDExNjQzLTEgYW5kIENOUyAxMTY0My0yCisgICAgRVVDLUpQICAgIEphcGFuZXNlCQkgICAgSklTIFggMDIwMSBhbmQgSklTIFggMDIwOAorICAgIEVVQy1LUiAgICBLb3JlYW4JCSAgICBJU08tODg1OS0xIGFuZCBLUyBDIDU2MDEgKEtTIFggMTAwMSkKKworWW91IGNhbiBzZWFyY2ggZm9yIGZvbnRzIHVzaW5nIHRoZSB4bHNmb250cyBjb21tYW5kLiAgRm9yIGV4YW1wbGUsIHdoZW4geW91J3JlCitzZWFyY2hpbmcgZm9yIGEgZm9udCBmb3IgS1MgQyA1NjAxOiA+CisgICAgeGxzZm9udHMgfCBncmVwIGtzYzU2MDEKKworVGhpcyBpcyBjb21wbGljYXRlZCBhbmQgY29uZnVzaW5nLiAgWW91IG1pZ2h0IHdhbnQgdG8gY29uc3VsdCB0aGUgWC1XaW5kb3dzCitkb2N1bWVudGF0aW9uIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB5b3UgZG9uJ3QgdW5kZXJzdGFuZC4KKworCQkJCQkJKmJhc2VfZm9udF9uYW1lX2xpc3QqCitXaGVuIHlvdSBoYXZlIGZvdW5kIHRoZSBuYW1lcyBvZiB0aGUgZm9udHMgeW91IHdhbnQgdG8gdXNlLCB5b3UgbmVlZCB0byBzZXQKK3RoZSAnZ3VpZm9udHNldCcgb3B0aW9uLiAgWW91IHNwZWNpZnkgdGhlIGxpc3QgYnkgY29uY2F0ZW5hdGluZyB0aGUgZm9udCBuYW1lcworYW5kIHB1dHRpbmcgYSBjb21tYSBpbiBiZXR3ZWVuIHRoZW0uCisKK0ZvciBleGFtcGxlLCB3aGVuIHlvdSB1c2UgdGhlIGphX0pQLmV1Y0pQIGxvY2FsZSwgdGhpcyByZXF1aXJlcyBKSVMgWCAwMjAxCithbmQgSklTIFggMDIwOC4gIFlvdSBjb3VsZCBzdXBwbHkgYSBsaXN0IG9mIGZvbnRzIHRoYXQgZXhwbGljaXRseSBzcGVjaWZpZXMKK3RoZSBjaGFyc2V0cywgbGlrZTogPgorCisgOnNldCBndWlmb250c2V0PS1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtMTQwLWppc3gwMjA4LjE5ODMtMCwKKwlcLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1qaXN4MDIwMS4xOTc2LTAKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzdXBwbHkgYSBiYXNlIGZvbnQgbmFtZSBsaXN0IHRoYXQgb21pdHMgdGhlIGNoYXJzZXQKK25hbWUsIGxldHRpbmcgWC1XaW5kb3dzIHNlbGVjdCBmb250IGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIHRoZSBsb2NhbGUuICBGb3IKK2V4YW1wbGU6ID4KKworIDpzZXQgZ3VpZm9udHNldD0tbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTE0MCwKKwlcLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MAorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHN1cHBseSBhIHNpbmdsZSBiYXNlIGZvbnQgbmFtZSB0aGF0IGFsbG93cyBYLVdpbmRvd3MgdG8KK3NlbGVjdCBmcm9tIGFsbCBhdmFpbGFibGUgZm9udHMuICBGb3IgZXhhbXBsZTogPgorCisgOnNldCBndWlmb250c2V0PS1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtKgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNwZWNpZnkgYWxpYXMgbmFtZXMuICBTZWUgdGhlIGZvbnRzLmFsaWFzIGZpbGUgaW4gdGhlCitmb250cyBkaXJlY3RvcnkgKGUuZy4sIC91c3IvWDExUjYvbGliL1gxMS9mb250cy8pLiAgRm9yIGV4YW1wbGU6ID4KKworIDpzZXQgZ3VpZm9udHNldD1rMTQscjE0Cis8CisJCQkJCQkJKkUyNTMqCitOb3RlIHRoYXQgaW4gRWFzdCBBc2lhbiBmb250cywgdGhlIHN0YW5kYXJkIGNoYXJhY3RlciBjZWxsIGlzIHNxdWFyZS4gIFdoZW4KK21peGluZyBhIExhdGluIGZvbnQgYW5kIGFuIEVhc3QgQXNpYW4gZm9udCwgdGhlIEVhc3QgQXNpYW4gZm9udCB3aWR0aCBzaG91bGQKK2JlIHR3aWNlIHRoZSBMYXRpbiBmb250IHdpZHRoLgorCitJZiAnZ3VpZm9udHNldCcgaXMgbm90IGVtcHR5LCB0aGUgImZvbnQiIGFyZ3VtZW50IG9mIHRoZSB8OmhpZ2hsaWdodHwgY29tbWFuZAoraXMgYWxzbyBpbnRlcnByZXRlZCBhcyBhIGZvbnRzZXQuICBGb3IgZXhhbXBsZSwgeW91IHNob3VsZCB1c2UgZm9yCitoaWdobGlnaHRpbmc6ID4KKwk6aGkgQ29tbWVudCBmb250PWVuZ2xpc2hfZm9udCx5b3VyX2ZvbnQKK0lmIHlvdSB1c2UgYSB3cm9uZyAiZm9udCIgYXJndW1lbnQgeW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuCitBbHNvIG1ha2Ugc3VyZSB0aGF0IHlvdSBzZXQgJ2d1aWZvbnRzZXQnIGJlZm9yZSBzZXR0aW5nIGZvbnRzIGZvciBoaWdobGlnaHQKK2dyb3Vwcy4KKworCitVU0lORyBSRVNPVVJDRSBGSUxFUworCitJbnN0ZWFkIG9mIHNwZWNpZnlpbmcgJ2d1aWZvbnRzZXQnLCB5b3UgY2FuIHNldCBYMTEgcmVzb3VyY2VzIGFuZCBWaW0gd2lsbAorcGljayB0aGVtIHVwLiAgVGhpcyBpcyBvbmx5IGZvciBwZW9wbGUgd2hvIGtub3cgaG93IFggcmVzb3VyY2UgZmlsZXMgd29yay4KKworRm9yIE1vdGlmIGFuZCBBdGhlbmEgaW5zZXJ0IHRoZXNlIHRocmVlIGxpbmVzIGluIHlvdXIgJEhPTUUvLlhkZWZhdWx0cyBmaWxlOgorCisJVmltLmZvbnQ6IHxiYXNlX2ZvbnRfbmFtZV9saXN0fAorCVZpbSpmb250U2V0OiB8YmFzZV9mb250X25hbWVfbGlzdHwKKwlWaW0qZm9udExpc3Q6IHlvdXJfbGFuZ3VhZ2VfZm9udAorCitOb3RlOiBWaW0uZm9udCBpcyBmb3IgdGV4dCBhcmVhLgorICAgICAgVmltKmZvbnRTZXQgaXMgZm9yIG1lbnUuCisgICAgICBWaW0qZm9udExpc3QgaXMgZm9yIG1lbnUgKGZvciBNb3RpZiBHVUkpCisKK0ZvciBleGFtcGxlLCB3aGVuIHlvdSBhcmUgdXNpbmcgSmFwYW5lc2UgYW5kIGEgMTQgZG90cyBmb250LCA+CisKKwlWaW0uZm9udDogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0qCisJVmltKmZvbnRTZXQ6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtKgorCVZpbSpmb250TGlzdDogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0qCis8CitvcjogPgorCisJVmltKmZvbnQ6IGsxNCxyMTQKKwlWaW0qZm9udFNldDogazE0LHIxNAorCVZpbSpmb250TGlzdDogazE0LHIxNAorPAorVG8gaGF2ZSB0aGVtIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5IHlvdSB3aWxsIGhhdmUgdG8gZG8gPgorCisJeHJkYiAtbWVyZ2Ugfi8uWGRlZmF1bHRzCisKK090aGVyd2lzZSB5b3Ugd2lsbCBoYXZlIHRvIHN0b3AgYW5kIHJlc3RhcnQgdGhlIFggc2VydmVyIGJlZm9yZSB0aGUgY2hhbmdlcwordGFrZSBlZmZlY3QuCisKKworVGhlIEdUSysgdmVyc2lvbiBvZiBHVUkgVmltIGRvZXMgbm90IHVzZSAuWGRlZmF1bHRzLCB1c2Ugfi8uZ3RrcmMgaW5zdGVhZC4KK1RoZSBkZWZhdWx0IG1vc3RseSB3b3JrcyBPSy4gIEJ1dCBmb3IgdGhlIG1lbnVzIHlvdSBtaWdodCBoYXZlIHRvIGNoYW5nZQoraXQuICBFeGFtcGxlOiA+CisKKwlzdHlsZSAiZGVmYXVsdCIKKwl7CisJCWZvbnRzZXQ9Ii0qLSotbWVkaXVtLXItbm9ybWFsLS0xNC0qLSotKi1jLSotKi0qIgorCX0KKwl3aWRnZXRfY2xhc3MgIioiIHN0eWxlICJkZWZhdWx0IgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuICBGb250cyBvbiBNUy1XaW5kb3dzCQkJCSptYnl0ZS1mb250cy1NU3dpbioKKworVGhlIHNpbXBsZXN0IGlzIHRvIHVzZSB0aGUgZm9udCBkaWFsb2cgdG8gc2VsZWN0IGZvbnRzIGFuZCB0cnkgdGhlbSBvdXQuICBZb3UKK2NhbiBmaW5kIHRoaXMgYXQgdGhlICJFZGl0L1NlbGVjdCBGb250Li4uIiBtZW51LiAgT25jZSB5b3UgZmluZCBhIGZvbnQgbmFtZQordGhhdCB3b3JrcyB3ZWxsIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCB0byBzZWUgaXRzIG5hbWU6ID4KKworCTpzZXQgZ3VpZm9udAorCitUaGVuIGFkZCBhIGNvbW1hbmQgdG8geW91ciB8Z3ZpbXJjfCBmaWxlIHRvIHNldCAnZ3VpZm9udCc6ID4KKworCTpzZXQgZ3VpZm9udD1jb3VyaWVyX25ldzpoMTIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiAgSW5wdXQgb24gWDExCQkJCSptYnl0ZS1YSU0qCisKK1ggSU5QVVQgTUVUSE9EIChYSU0pIEJBQ0tHUk9VTkQJCQkqWElNKiAqeGltKiAqeC1pbnB1dC1tZXRob2QqCisKK1hJTSBpcyBhbiBpbnRlcm5hdGlvbmFsIGlucHV0IG1vZHVsZSBmb3IgWC4gIFRoZXJlIGFyZSB0d28ga2luZCBvZiBzdHJ1Y3R1cmVzLAorWGxpYiB1bml0IHR5cGUgYW5kIHxJTS1zZXJ2ZXJ8IChJbnB1dC1NZXRob2Qgc2VydmVyKSB0eXBlLiAgfElNLXNlcnZlcnwgdHlwZQoraXMgc3VpdGFibGUgZm9yIGNvbXBsZXggaW5wdXQsIHN1Y2ggYXMgQ0pLLgorCistIElNLXNlcnZlcgorCQkJCQkJCSpJTS1zZXJ2ZXIqCisgIEluIHxJTS1zZXJ2ZXJ8IHR5cGUgaW5wdXQgc3RydWN0dXJlcywgdGhlIGlucHV0IGV2ZW50IGlzIGhhbmRsZWQgYnkgZWl0aGVyCisgIG9mIHRoZSB0d28gd2F5czogRnJvbnRFbmQgc3lzdGVtIGFuZCBCYWNrRW5kIHN5c3RlbS4gIEluIHRoZSBGcm9udEVuZAorICBzeXN0ZW0sIGlucHV0IGV2ZW50cyBhcmUgc25hdGNoZWQgYnkgdGhlIHxJTS1zZXJ2ZXJ8IGZpcnN0LCB0aGVuIHxJTS1zZXJ2ZXJ8CisgIGdpdmUgdGhlIGFwcGxpY2F0aW9uIHRoZSByZXN1bHQgb2YgaW5wdXQuICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIEJhY2tFbmQKKyAgc3lzdGVtIHdvcmtzIHJldmVyc2Ugb3JkZXIuICBNUyBXaW5kb3dzIGFkb3B0IEJhY2tFbmQgc3lzdGVtLiAgSW4gWCwgbW9zdCBvZgorICB8SU0tc2VydmVyfHMgYWRvcHQgRnJvbnRFbmQgc3lzdGVtLiAgVGhlIGRlbWVyaXQgb2YgQmFja0VuZCBzeXN0ZW0gaXMgdGhlCisgIGxhcmdlIG92ZXJoZWFkIGluIGNvbW11bmljYXRpb24sIGJ1dCBpdCBwcm92aWRlcyBzYWZlIHN5bmNocm9uaXphdGlvbiB3aXRoCisgIG5vIHJlc3RyaWN0aW9ucyBvbiBhcHBsaWNhdGlvbnMuCisKKyAgRm9yIGV4YW1wbGUsIHRoZXJlIGFyZSB4d25tbyBhbmQga2lucHV0MiBKYXBhbmVzZSB8SU0tc2VydmVyfCwgYm90aCBhcmUKKyAgRnJvbnRFbmQgc3lzdGVtLiAgWHdubW8gaXMgZGlzdHJpYnV0ZWQgd2l0aCBXbm4gKHNlZSBiZWxvdyksIGtpbnB1dDIgY2FuIGJlCisgIGZvdW5kIGF0OiBmdHA6Ly9mdHAuc3JhLmNvLmpwL3B1Yi94MTEva2lucHV0Mi8KKworICBGb3IgQ2hpbmVzZSwgdGhlcmUncyBhIGdyZWF0IFhJTSBzZXJ2ZXIgbmFtZWQgInhjaW4iLCB5b3UgY2FuIGlucHV0IGJvdGgKKyAgVHJhZGl0aW9uYWwgYW5kIFNpbXBsaWZpZWQgQ2hpbmVzZSBjaGFyYWN0ZXJzLiAgQW5kIGl0IGNhbiBhY2NlcHQgb3RoZXIKKyAgbG9jYWxlIGlmIHlvdSBtYWtlIGEgY29ycmVjdCBpbnB1dCB0YWJsZS4gIFhjaW4gY2FuIGJlIGZvdW5kIGF0OgorICBodHRwOi8veGNpbi5saW51eC5vcmcudHcvCisKKy0gQ29udmVyc2lvbiBTZXJ2ZXIKKwkJCQkJCQkqY29udmVyc2lvbi1zZXJ2ZXIqCisgIFNvbWUgc3lzdGVtIG5lZWRzIGFkZGl0aW9uYWwgc2VydmVyOiBjb252ZXJzaW9uIHNlcnZlci4gIE1vc3Qgb2YgSmFwYW5lc2UKKyAgfElNLXNlcnZlcnxzIG5lZWQgaXQsIEthbmEtS2FuamkgY29udmVyc2lvbiBzZXJ2ZXIuICBGb3IgQ2hpbmVzZSBpbnB1dHRpbmcsCisgIGl0IGRlcGVuZHMgb24gdGhlIG1ldGhvZCBvZiBpbnB1dHRpbmcsIGluIHNvbWUgbWV0aG9kcywgUGluWWluIG9yIFpodVlpbiB0bworICBIYW5aaSBjb252ZXJzaW9uIHNlcnZlciBpcyBuZWVkZWQuICBGb3IgS29yZWFuIGlucHV0dGluZywgaWYgeW91IHdhbnQgdG8KKyAgaW5wdXQgSGFuamEsIEhhbmd1bC1IYW5qYSBjb252ZXJzaW9uIHNlcnZlciBpcyBuZWVkZWQuCisKKyAgRm9yIGV4YW1wbGUsIHRoZSBKYXBhbmVzZSBpbnB1dHRpbmcgcHJvY2VzcyBpcyBkaXZpZGVkIGludG8gMiBzdGVwcy4gIEZpcnN0CisgIHdlIHByZS1pbnB1dCBIaXJhLWdhbmEsIHNlY29uZCBLYW5hLUthbmppIGNvbnZlcnNpb24uICBUaGVyZSBhcmUgc28gbWFueQorICBLYW5qaSBjaGFyYWN0ZXJzICg2MzQ5IEthbmppIGNoYXJhY3RlcnMgYXJlIGRlZmluZWQgaW4gSklTIFggMDIwOCkgYW5kIHRoZQorICBudW1iZXIgb2YgSGlyYS1nYW5hIGNoYXJhY3RlcnMgYXJlIDc2LiAgU28sIGZpcnN0LCB3ZSBwcmUtaW5wdXQgdGV4dCBhcworICBwcm9ub3VuY2VkIGluIEhpcmEtZ2FuYSwgc2Vjb25kLCB3ZSBjb252ZXJ0IEhpcmEtZ2FuYSB0byBLYW5qaSBvciBLYXRhLUthbmEsCisgIGlmIG5lZWRlZC4gIFRoZXJlIGFyZSBzb21lIEthbmEtS2FuamkgY29udmVyc2lvbiBzZXJ2ZXI6IGpzZXJ2ZXIKKyAgKGRpc3RyaWJ1dGVkIHdpdGggV25uLCBzZWUgYmVsb3cpIGFuZCBjYW5uYS4gQ2FubmEgY291bGQgYmUgZm91bmQgYXQ6CisgIGZ0cDovL2Z0cC5uZWMuY28uanAvcHViL0Nhbm5hLyAobm8gbG9uZ2VyIHdvcmtzKS4KKworVGhlcmUgaXMgYSBnb29kIGlucHV0IHN5c3RlbTogV25uNC4yLiAgV25uIDQuMiBjb250YWlucywKKyAgICB4d25tbyAofElNLXNlcnZlcnwpCisgICAganNlcnZlciAoSmFwYW5lc2UgS2FuYS1LYW5qaSBjb252ZXJzaW9uIHNlcnZlcikKKyAgICBjc2VydmVyIChDaGluZXNlIFBpbllpbiBvciBaaHVZaW4gdG8gc2ltcGxpZmllZCBIYW5aaSBjb252ZXJzaW9uIHNlcnZlcikKKyAgICB0c2VydmVyIChDaGluZXNlIFBpbllpbiBvciBaaHVZaW4gdG8gdHJhZGl0aW9uYWwgSGFuWmkgY29udmVyc2lvbiBzZXJ2ZXIpCisgICAga3NlcnZlciAoSGFuZ3VsLUhhbmphIGNvbnZlcnNpb24gc2VydmVyKQorV25uIDQuMiBmb3Igc2V2ZXJhbCBzeXN0ZW1zIGNhbiBiZSBmb3VuZCBhdCB2YXJpb3VzIHBsYWNlcyBvbiB0aGUgaW50ZXJuZXQuCitVc2UgdGhlIFJQTSBvciBwb3J0IGZvciB5b3VyIHN5c3RlbS4KKworCistIElucHV0IFN0eWxlCisJCQkJCQkJKnhpbS1pbnB1dC1zdHlsZSoKKyAgV2hlbiBpbnB1dHRpbmcgQ0pLLCB0aGVyZSBhcmUgZm91ciBhcmVhczoKKyAgICAgIDEuIFRoZSBhcmVhIHRvIGRpc3BsYXkgb2YgdGhlIGlucHV0IHdoaWxlIGl0IGlzIGJlaW5nIGNvbXBvc2VkCisgICAgICAyLiBUaGUgYXJlYSB0byBkaXNwbGF5IHRoZSBjdXJyZW50bHkgYWN0aXZlIGlucHV0IG1vZGUuCisgICAgICAzLiBUaGUgYXJlYSB0byBkaXNwbGF5IHRoZSBuZXh0IGNhbmRpZGF0ZSBmb3IgdGhlIHNlbGVjdGlvbi4KKyAgICAgIDQuIFRoZSBhcmVhIHRvIGRpc3BsYXkgb3RoZXIgdG9vbHMuCisKKyAgVGhlIHRoaXJkIGFyZWEgaXMgbmVlZGVkIHdoZW4gY29udmVydGluZy4gIEZvciBleGFtcGxlLCBpbiBKYXBhbmVzZQorICBpbnB1dHRpbmcsIG11bHRpcGxlIEthbmppIGNoYXJhY3RlcnMgY291bGQgaGF2ZSB0aGUgc2FtZSBwcm9udW5jaWF0aW9uLCBzbworICBhIHNlcXVlbmNlIG9mIEhpcmEtZ2FuYSBjaGFyYWN0ZXJzIGNvdWxkIG1hcCB0byBhIGRpc3RpbmN0IHNlcXVlbmNlIG9mIEthbmppCisgIGNoYXJhY3RlcnMuCisKKyAgVGhlIGZpcnN0IGFuZCBzZWNvbmQgYXJlYXMgYXJlIGRlZmluZWQgaW4gaW50ZXJuYXRpb25hbCBpbnB1dCBvZiBYIHdpdGggdGhlCisgIG5hbWVzIG9mICJQcmVlZGl0IEFyZWEiLCAiU3RhdHVzIEFyZWEiIHJlc3BlY3RpdmVseS4gIFRoZSB0aGlyZCBhbmQgZm91cnRoCisgIGFyZWFzIGFyZSBub3QgZGVmaW5lZCBhbmQgYXJlIGxlZnQgdG8gYmUgbWFuYWdlZCBieSB0aGUgfElNLXNlcnZlcnwuICBJbiB0aGUKKyAgaW50ZXJuYXRpb25hbCBpbnB1dCwgZm91ciBpbnB1dCBzdHlsZXMgaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmcgY29tYmluYXRpb25zCisgIG9mIFByZWVkaXQgQXJlYSBhbmQgU3RhdHVzIEFyZWE6IHxPblRoZVNwb3R8LCB8T2ZmVGhlU3BvdHwsIHxPdmVyVGhlU3BvdHwKKyAgYW5kIHxSb290fC4KKworICBDdXJyZW50bHksIEdVSSBWaW0gc3VwcG9ydCB0aHJlZSBzdHlsZSwgfE92ZXJUaGVTcG90fCwgfE9mZlRoZVNwb3R8IGFuZAorICB8Um9vdHwuCisKKyouICBvbi10aGUtc3BvdAkJCQkJCSpPblRoZVNwb3QqCisgICAgUHJlZWRpdCBBcmVhIGFuZCBTdGF0dXMgQXJlYSBhcmUgcGVyZm9ybWVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24gaW4KKyAgICB0aGUgYXJlYSBvZiBhcHBsaWNhdGlvbi4gIFRoZSBjbGllbnQgYXBwbGljYXRpb24gaXMgZGlyZWN0ZWQgYnkgdGhlCisgICAgfElNLXNlcnZlcnwgdG8gZGlzcGxheSBhbGwgcHJlLWVkaXQgZGF0YSBhdCB0aGUgbG9jYXRpb24gb2YgdGV4dAorICAgIGluc2VydGlvbi4gVGhlIGNsaWVudCByZWdpc3RlcnMgY2FsbGJhY2tzIGludm9rZWQgYnkgdGhlIGlucHV0IG1ldGhvZAorICAgIGR1cmluZyBwcmUtZWRpdGluZy4KKyouICBvdmVyLXRoZS1zcG90CQkJCQkqT3ZlclRoZVNwb3QqCisgICAgU3RhdHVzIEFyZWEgaXMgY3JlYXRlZCBpbiBhIGZpeGVkIHBvc2l0aW9uIHdpdGhpbiB0aGUgYXJlYSBvZiBhcHBsaWNhdGlvbiwKKyAgICBpbiBjYXNlIG9mIFZpbSwgdGhlIHBvc2l0aW9uIGlzIHRoZSBhZGRpdGlvbmFsIHN0YXR1cyBsaW5lLiAgUHJlZWRpdCBBcmVhCisgICAgaXMgbWFkZSBhdCBwcmVzZW50IGlucHV0IHBvc2l0aW9uIG9mIGFwcGxpY2F0aW9uLiAgVGhlIGlucHV0IG1ldGhvZAorICAgIGRpc3BsYXlzIHByZS1lZGl0IGRhdGEgaW4gYSB3aW5kb3cgd2hpY2ggaXQgYnJpbmdzIHVwIGRpcmVjdGx5IG92ZXIgdGhlCisgICAgdGV4dCBpbnNlcnRpb24gcG9zaXRpb24uCisqLiAgb2ZmLXRoZS1zcG90CQkJCQkqT2ZmVGhlU3BvdCoKKyAgICBQcmVlZGl0IEFyZWEgYW5kIFN0YXR1cyBBcmVhIGFyZSBwZXJmb3JtZWQgaW4gdGhlIGFyZWEgb2YgYXBwbGljYXRpb24sIGluCisgICAgY2FzZSBvZiBWaW0sIHRoZSBhcmVhIGlzIGFkZGl0aW9uYWwgc3RhdHVzIGxpbmUuICBUaGUgY2xpZW50IGFwcGxpY2F0aW9uCisgICAgcHJvdmlkZXMgZGlzcGxheSB3aW5kb3dzIGZvciB0aGUgcHJlLWVkaXQgZGF0YSB0byB0aGUgaW5wdXQgbWV0aG9kIHdoaWNoCisgICAgZGlzcGxheXMgaW50byB0aGVtIGRpcmVjdGx5LgorKi4gIHJvb3Qtd2luZG93CQkJCQkJKlJvb3QqCisgICAgUHJlZWRpdCBBcmVhIGFuZCBTdGF0dXMgQXJlYSBhcmUgb3V0c2lkZSBvZiB0aGUgYXBwbGljYXRpb24uICBUaGUgaW5wdXQKKyAgICBtZXRob2QgZGlzcGxheXMgYWxsIHByZS1lZGl0IGRhdGEgaW4gYSBzZXBhcmF0ZSBhcmVhIG9mIHRoZSBzY3JlZW4gaW4gYQorICAgIHdpbmRvdyBzcGVjaWZpYyB0byB0aGUgaW5wdXQgbWV0aG9kLgorCisKK1VTSU5HIFhJTQkJCSptdWx0aWJ5dGUtaW5wdXQqICpFMjg0KiAqRTI4NiogKkUyODcqICpFMjg4KgorCQkJCSpFMjg1KiAqRTI5MSogKkUyOTIqICpFMjkwKiAqRTI4OSoKKworTm90ZSB0aGF0IERpc3BsYXkgYW5kIElucHV0IGFyZSBpbmRlcGVuZGVudC4gIEl0IGlzIHBvc3NpYmxlIHRvIHNlZSB5b3VyCitsYW5ndWFnZSBldmVuIHRob3VnaCB5b3UgaGF2ZSBubyBpbnB1dCBtZXRob2QgZm9yIGl0LiAgQnV0IHdoZW4geW91ciBEaXNwbGF5CittZXRob2QgZG9lc24ndCBtYXRjaCB5b3VyIElucHV0IG1ldGhvZCwgdGhlIHRleHQgd2lsbCBiZSBkaXNwbGF5ZWQgd3JvbmcuCisKKwlOb3RlOiBZb3UgY2FuIG5vdCB1c2UgSU0gdW5sZXNzIHlvdSBzcGVjaWZ5ICdndWlmb250c2V0Jy4KKwkgICAgICBUaGVyZWZvcmUsIExhdGluIHVzZXJzLCB5b3UgaGF2ZSB0byBhbHNvIHVzZSAnZ3VpZm9udHNldCcKKwkgICAgICBpZiB5b3UgdXNlIElNLgorCitUbyBpbnB1dCB5b3VyIGxhbmd1YWdlIHlvdSBzaG91bGQgcnVuIHRoZSB8SU0tc2VydmVyfCB3aGljaCBzdXBwb3J0cyB5b3VyCitsYW5ndWFnZSBhbmQgfGNvbnZlcnNpb24tc2VydmVyfCBpZiBuZWVkZWQuCisKK1RoZSBuZXh0IDMgbGluZXMgc2hvdWxkIGJlIHB1dCBpbiB5b3VyIH4vLlhkZWZhdWx0cyBmaWxlLiAgVGhleSBhcmUgY29tbW9uIGZvcgorYWxsIFggYXBwbGljYXRpb25zIHdoaWNoIHVzZXMgfFhJTXwuICBJZiB5b3UgYWxyZWFkeSB1c2UgfFhJTXwsIHlvdSBjYW4gc2tpcAordGhpcy4gPgorCisJKmludGVybmF0aW9uYWw6IFRydWUKKwkqLmlucHV0TWV0aG9kOiB5b3VyX2lucHV0X3NlcnZlcl9uYW1lCisJKi5wcmVlZGl0VHlwZTogeW91cl9pbnB1dF9zdHlsZQorPAoraW5wdXRfc2VydmVyX25hbWUJaXMgeW91ciB8SU0tc2VydmVyfCBuYW1lIChjaGVjayB5b3VyIHxJTS1zZXJ2ZXJ8CisJCQltYW51YWwpLgoreW91cl9pbnB1dF9zdHlsZQlpcyBvbmUgb2YgfE92ZXJUaGVTcG90fCwgfE9mZlRoZVNwb3R8LCB8Um9vdHwuICBTZWUKKwkJCWFsc28gfHhpbS1pbnB1dC1zdHlsZXwuCisKKyppbnRlcm5hdGlvbmFsIG1heSBub3QgbmVjZXNzYXJ5IGlmIHlvdSB1c2UgWDExUjYuCisqLmlucHV0TWV0aG9kIGFuZCAqLnByZWVkaXRUeXBlIGFyZSBvcHRpb25hbCBpZiB5b3UgdXNlIFgxMVI2LgorCitGb3IgZXhhbXBsZSwgd2hlbiB5b3UgYXJlIHVzaW5nIGtpbnB1dDIgYXMgfElNLXNlcnZlcnwsID4KKworCSppbnRlcm5hdGlvbmFsOiBUcnVlCisJKi5pbnB1dE1ldGhvZDoga2lucHV0MgorCSoucHJlZWRpdFR5cGU6IE92ZXJUaGVTcG90Cis8CitXaGVuIHVzaW5nIHxPdmVyVGhlU3BvdHwsIEdVSSBWaW0gYWx3YXlzIGNvbm5lY3RzIHRvIHRoZSBJTSBTZXJ2ZXIgZXZlbiBpbgorTm9ybWFsIG1vZGUsIHNvIHlvdSBjYW4gaW5wdXQgeW91ciBsYW5ndWFnZSB3aXRoIGNvbW1hbmRzIGxpa2UgImYiIGFuZCAiciIuCitCdXQgd2hlbiB1c2luZyBvbmUgb2YgdGhlIG90aGVyIHR3byBtZXRob2RzLCBHVUkgVmltIGNvbm5lY3RzIHRvIHRoZSBJTSBTZXJ2ZXIKK29ubHkgaWYgaXQgaXMgbm90IGluIE5vcm1hbCBtb2RlLgorCitJZiB5b3VyIElNIFNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHxPdmVyVGhlU3BvdHwsIGFuZCBpZiB5b3Ugd2FudCB0byB1c2UgeW91cgorbGFuZ3VhZ2Ugd2l0aCBzb21lIE5vcm1hbCBtb2RlIGNvbW1hbmQgbGlrZSAiZiIgb3IgInIiLCB0aGVuIHlvdSBzaG91bGQgdXNlIGEKK2xvY2FsaXplZCB4dGVybSAgb3IgYW4geHRlcm0gd2hpY2ggc3VwcG9ydHMgfFhJTXwKKworSWYgbmVlZGVkLCB5b3UgY2FuIHNldCB0aGUgWE1PRElGSUVSUyBlbnZpcm9ubWVudCB2YXJpYWJsZToKKworCXNoOiAgZXhwb3J0IFhNT0RJRklFUlM9IkBpbT1pbnB1dF9zZXJ2ZXJfbmFtZSIKKwljc2g6IHNldGVudiBYTU9ESUZJRVJTICJAaW09aW5wdXRfc2VydmVyX25hbWUiCisKK0ZvciBleGFtcGxlLCB3aGVuIHlvdSBhcmUgdXNpbmcga2lucHV0MiBhcyB8SU0tc2VydmVyfCBhbmQgc2gsID4KKworCWV4cG9ydCBYTU9ESUZJRVJTPSJAaW09a2lucHV0MiIKKzwKKworRlVMTFkgQ09OVFJPTExFRCBYSU0KKworWW91IGNhbiBmdWxseSBjb250cm9sIFhJTSwgbGlrZSB3aXRoIElNRSBvZiBNUy1XaW5kb3dzIChzZWUgfG11bHRpYnl0ZS1pbWV8KS4KK1RoaXMgaXMgY3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciB0aGUgR1RLIEdVSS4KKworQmVmb3JlIHVzaW5nIGZ1bGx5IGNvbnRyb2xsZWQgWElNLCBvbmUgc2V0dGluZyBpcyByZXF1aXJlZC4gIFNldCB0aGUKKydpbWFjdGl2YXRla2V5JyBvcHRpb24gdG8gdGhlIGtleSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBpbnB1dAorbWV0aG9kLiAgRm9yIGV4YW1wbGUsIHdoZW4geW91IGFyZSB1c2luZyBraW5wdXQyICsgY2FubmEgYXMgSU0gU2VydmVyLCB0aGUKK2FjdGl2YXRpb24ga2V5IGlzIHByb2JhYmx5IFNoaWZ0K1NwYWNlOiA+CisKKwk6c2V0IGltYWN0aXZhdGVrZXk9Uy1zcGFjZQorCitTZWUgJ2ltYWN0aXZhdGVrZXknIGZvciB0aGUgZm9ybWF0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguICBJbnB1dCBvbiBNUy1XaW5kb3dzCQkJCQkqbWJ5dGUtSU1FKgorCisoV2luZG93cyBJTUUgc3VwcG9ydCkJCQkJKm11bHRpYnl0ZS1pbWUqICpJTUUqCisKK3tvbmx5IHdvcmtzIFdpbmRvd3MgR1VJIGFuZCBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGVfaW1lfCBmZWF0dXJlfQorCitUbyBpbnB1dCBtdWx0aWJ5dGUgY2hhcmFjdGVycyBvbiBXaW5kb3dzLCB5b3UgaGF2ZSB0byB1c2UgSW5wdXQgTWV0aG9kIEVkaXRvcgorKElNRSkuICBJbiBwcm9jZXNzIG9mIHlvdXIgZWRpdGluZyB0ZXh0LCB5b3UgbXVzdCBzd2l0Y2ggc3RhdHVzIChvbi9vZmYpIG9mCitJTUUgbWFueSBtYW55IG1hbnkgdGltZXMuICBCZWNhdXNlIElNRSB3aXRoIHN0YXR1cyBvbiBpcyBob29raW5nIGFsbCBvZiB5b3VyCitrZXkgaW5wdXRzLCB5b3UgY2Fubm90IGlucHV0ICdqJywgJ2snLCBvciBhbG1vc3QgYWxsIG9mIGtleXMgdG8gVmltIGRpcmVjdGx5LgorCitUaGlzIHwrbXVsdGlfYnl0ZV9pbWV8IGZlYXR1cmUgaGVscCB0aGlzLiAgSXQgcmVkdWNlIHRpbWVzIG9mIHN3aXRjaCBzdGF0dXMgb2YKK0lNRSBtYW51YWxseS4gIEluIG5vcm1hbCBtb2RlLCB0aGVyZSBhcmUgYWxtb3N0IG5vIG5lZWQgd29ya2luZyBJTUUsIGV2ZW4KK2VkaXRpbmcgbXVsdGlieXRlIHRleHQuICBTbyBleGl0aW5nIGluc2VydCBtb2RlIHdpdGggRVNDLCBWaW0gbWVtb3JpemUgbGFzdAorc3RhdHVzIG9mIElNRSBhbmQgZm9yY2UgdHVybiBvZmYgSU1FLiAgV2hlbiByZS1lbnRlciBpbnNlcnQgbW9kZSwgVmltIHJldmVydAorSU1FIHN0YXR1cyB0byB0aGF0IG1lbW9yaXplZCBhdXRvbWF0aWNhbGx5LgorCitUaGlzIHdvcmtzIG9uIG5vdCBvbmx5IGluc2VydC1ub3JtYWwgbW9kZSwgYnV0IGFsc28gc2VhcmNoLWNvbW1hbmQgaW5wdXQgYW5kCityZXBsYWNlIG1vZGUuCitUaGUgb3B0aW9ucyAnaW1pbnNlcnQnLCAnaW1zZWFyY2gnIGFuZCAnaW1jbWRsaW5lJyBjYW4gYmUgdXNlZCB0byBjaG9zZQordGhlIGRpZmZlcmVudCBpbnB1dCBtZWRob2RzIG9yIGRpc2FibGUgdGhlbSB0ZW1wb3JhcmlseS4KKworV0hBVCBJUyBJTUUKKyAgICBJTUUgaXMgYSBwYXJ0IG9mIEVhc3QgYXNpYW4gdmVyc2lvbiBXaW5kb3dzLiAgVGhhdCBoZWxwcyB5b3UgdG8gaW5wdXQKKyAgICBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgRW5nbGlzaCBhbmQgb3RoZXIgbGFuZ3VhZ2UgdmVyc2lvbiBXaW5kb3dzIGRvZXMgbm90CisgICAgaGF2ZSBhbnkgSU1FLiAgKEFsc28gdGhlcmUgYXJlIG5vIG5lZWQgdXN1YWxseS4pIEJ1dCB0aGVyZSBpcyBvbmUgdGhhdAorICAgIGNhbGxlZCBNaWNyb3NvZnQgR2xvYmFsIElNRS4gIEdsb2JhbCBJTUUgaXMgYSBwYXJ0IG9mIEludGVybmV0IEV4cGxvcmVyCisgICAgNC4wIG9yIGFib3ZlLiAgWW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBHbG9iYWwgSU1FLCBhdCBiZWxvdworICAgIFVSTC4KKworV0hBVCBJUyBHTE9CQUwgSU1FCQkJCQkqZ2xvYmFsLWltZSoKKyAgICBHbG9iYWwgSU1FIG1ha2VzIGNhcGFiaWxpdHkgdG8gaW5wdXQgQ2hpbmVzZSwgSmFwYW5lc2UsIGFuZCBLb3JlYW4gdGV4dAorICAgIGludG8gVmltIGJ1ZmZlciBvbiBhbnkgbGFuZ3VhZ2UgdmVyc2lvbiBvZiBXaW5kb3dzIDk4LCBXaW5kb3dzIDk1LCBhbmQKKyAgICBXaW5kb3dzIE5UIDQuMC4KKyAgICBPbiBXaW5kb3dzIDIwMDAgYW5kIFhQIGl0IHNob3VsZCB3b3JrIGFzIHdlbGwgKHdpdGhvdXQgZG93bmxvYWRpbmcpLiAgT24KKyAgICBXaW5kb3dzIDIwMDAgUHJvZmVzc2lvbmFsLCBHbG9iYWwgSU1FIGlzIGJ1aWx0IGluLCBhbmQgdGhlIElucHV0IExvY2FsZXMKKyAgICBjYW4gYmUgYWRkZWQgdGhyb3VnaCBDb250cm9sIFBhbmVsL1JlZ2lvbmFsIE9wdGlvbnMvSW5wdXQgTG9jYWxlcy4KKyAgICBQbGVhc2Ugc2VlIGJlbG93IFVSTCBmb3IgZGV0YWlsIG9mIEdsb2JhbCBJTUUuICBZb3UgY2FuIGFsc28gZmluZCB2YXJpb3VzCisgICAgbGFuZ3VhZ2UgdmVyc2lvbiBvZiBHbG9iYWwgSU1FIGF0IHNhbWUgcGxhY2UuCisKKyAgICAtIEdsb2JhbCBJTUUgZGV0YWlsZWQgaW5mb3JtYXRpb24uCisJaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3dpbmRvd3MvaWUvZmVhdHVyZXMvaW1lLmFzcAorCisgICAgLSBBY3RpdmUgSW5wdXQgTWV0aG9kIE1hbmFnZXIgKEdsb2JhbCBJTUUpCisJaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93b3Jrc2hvcC9taXNjL0FJTU0vYWltbS5hc3AKKworICAgIFN1cHBvcnQgR2xvYmFsIElNRSBpcyBhIGV4cGVyaW1lbnRhbCBmZWF0dXJlLgorCitOT1RFOiBGb3IgSU1FIHRvIHdvcmsgeW91IG11c3QgbWFrZSBzdXJlIHRoZSBpbnB1dCBsb2NhbGVzIG9mIHlvdXIgbGFuZ3VhZ2UKK2FyZSBhZGRlZCB0byB5b3VyIHN5c3RlbS4gIFRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGlzIGRlcGVuZHMgb24gdGhlIHZlcnNpb24KK29mIFdpbmRvd3MgeW91IHVzZS4gIEZvciBleGFtcGxlLCBvbiBteSBXMlAgYm94OgorMS4gQ29udHJvbCBQYW5lbAorMi4gUmVnaW9uYWwgT3B0aW9ucworMy4gSW5wdXQgTG9jYWxlcyBUYWIKKzQuIEFkZCBJbnN0YWxsZWQgaW5wdXQgbG9jYWxlcyAtPiBDaGluZXNlKFBSQykKKyAgIFRoZSBkZWZhdWx0IGlzIHN0aWxsIEVuZ2xpc2ggKFVuaXRlZCBTdGF0ZWQpCisKKworQ3Vyc29yIGNvbG9yIHdoZW4gSU1FIG9yIFhJTSBpcyBvbgkJCQkqQ3Vyc29ySU0qCisgICAgVGhlcmUgaXMgYSBsaXR0bGUgY3V0ZSBmZWF0dXJlIGZvciBJTUUuICBDdXJzb3IgY2FuIGluZGljYXRlIHN0YXR1cyBvZiBJTUUKKyAgICBieSBjaGFuZ2luZyBpdHMgY29sb3IuICBVc3VhbGx5IHN0YXR1cyBvZiBJTUUgd2FzIGluZGljYXRlZCBieSBsaXR0bGUgaWNvbgorICAgIGF0IGEgY29ybmVyIG9mIGRlc2t0b3AgKG9yIHRhc2tiYXIpLiAgSXQgaXMgbm90IGVhc3kgdG8gdmVyaWZ5IHN0YXR1cyBvZgorICAgIElNRS4gIEJ1dCB0aGlzIGZlYXR1cmUgaGVscCB0aGlzLgorICAgIFRoaXMgd29ya3MgaW4gdGhlIHNhbWUgd2F5IHdoZW4gdXNpbmcgWElNLgorCisgICAgWW91IGNhbiBzZWxlY3QgY3Vyc29yIGNvbG9yIHdoZW4gc3RhdHVzIGlzIG9uIGJ5IHVzaW5nIGhpZ2hsaWdodCBncm91cAorICAgIEN1cnNvcklNLiAgRm9yIGV4YW1wbGUsIGFkZCB0aGVzZSBsaW5lcyB0byB5b3VyIF9ndmltcmM6ID4KKworCWlmIGhhcygnbXVsdGlfYnl0ZV9pbWUnKQorCSAgICBoaWdobGlnaHQgQ3Vyc29yIGd1aWZnPU5PTkUgZ3VpYmc9R3JlZW4KKwkgICAgaGlnaGxpZ2h0IEN1cnNvcklNIGd1aWZnPU5PTkUgZ3VpYmc9UHVycGxlCisJZW5kaWYKKzwKKyAgICBDdXJzb3IgY29sb3Igd2l0aCBvZmYgSU1FIGlzIGdyZWVuLiAgQW5kIHB1cnBsZSBjdXJzb3IgaW5kaWNhdGVzIHRoYXQKKyAgICBzdGF0dXMgaXMgb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gSW5wdXQgd2l0aCBhIGtleW1hcAkJCQkJKm1ieXRlLWtleW1hcCoKKworV2hlbiB0aGUga2V5Ym9hcmQgZG9lc24ndCBwcm9kdWNlIHRoZSBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIGVudGVyIGluIHlvdXIKK3RleHQsIHlvdSBjYW4gdXNlIHRoZSAna2V5bWFwJyBvcHRpb24uICBUaGlzIHdpbGwgdHJhbnNsYXRlIG9uZSBvciBtb3JlCisoRW5nbGlzaCkgY2hhcmFjdGVycyB0byBhbm90aGVyIChub24tRW5nbGlzaCkgY2hhcmFjdGVyLiAgVGhpcyBvbmx5IGhhcHBlbnMKK3doZW4gdHlwaW5nIHRleHQsIG5vdCB3aGVuIHR5cGluZyBWaW0gY29tbWFuZHMuICBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gc3dpdGNoCitiZXR3ZWVuIHR3byBrZXlib2FyZCBzZXR0aW5ncy4KKworVGhlIHZhbHVlIG9mIHRoZSAna2V5bWFwJyBvcHRpb24gc3BlY2lmaWVzIGEga2V5bWFwIGZpbGUgdG8gdXNlLiAgVGhlIG5hbWUgb2YKK3RoaXMgZmlsZSBpcyBvbmUgb2YgdGhlc2UgdHdvOgorCisJa2V5bWFwL3trZXltYXB9X3tlbmNvZGluZ30udmltCisJa2V5bWFwL3trZXltYXB9LnZpbQorCitIZXJlIHtrZXltYXB9IGlzIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleW1hcCcgb3B0aW9uIGFuZCB7ZW5jb2Rpbmd9IG9mIHRoZQorJ2VuY29kaW5nJyBvcHRpb24uICBUaGUgZmlsZSBuYW1lIHdpdGggdGhlIHtlbmNvZGluZ30gaW5jbHVkZWQgaXMgdHJpZWQgZmlyc3QuCisKKydydW50aW1lcGF0aCcgaXMgdXNlZCB0byBmaW5kIHRoZXNlIGZpbGVzLiAgVG8gc2VlIGFuIG92ZXJ2aWV3IG9mIGFsbAorYXZhaWxhYmxlIGtleW1hcCBmaWxlcywgdXNlIHRoaXM6ID4KKwk6ZWNobyBnbG9icGF0aCgmcnRwLCAia2V5bWFwLyoudmltIikKKworSW4gSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZSB5b3UgY2FuIHVzZSBDVFJMLV4gdG8gdG9nZ2xlIGJldHdlZW4gdXNpbmcgdGhlCitrZXlib2FyZCBtYXAgb3Igbm90LiB8aV9DVFJMLV58IHxjX0NUUkwtXnwKK1RoaXMgZmxhZyBpcyByZW1lbWJlcmVkIGZvciBJbnNlcnQgbW9kZSB3aXRoIHRoZSAnaW1pbnNlcnQnIG9wdGlvbi4gIFdoZW4KK2xlYXZpbmcgYW5kIGVudGVyaW5nIEluc2VydCBtb2RlIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyB1c2VkLiAgVGhlIHNhbWUgdmFsdWUKK2lzIGFsc28gdXNlZCBmb3IgY29tbWFuZHMgdGhhdCB0YWtlIGEgc2luZ2xlIGNoYXJhY3RlciBhcmd1bWVudCwgbGlrZSB8ZnwgYW5kCit8cnwuCitGb3IgQ29tbWFuZC1saW5lIG1vZGUgdGhlIGZsYWcgaXMgTk9UIHJlbWVtYmVyZWQuICBZb3UgYXJlIGV4cGVjdGVkIHRvIHR5cGUgYW4KK0V4IGNvbW1hbmQgZmlyc3QsIHdoaWNoIGlzIEFTQ0lJLgorRm9yIHR5cGluZyBzZWFyY2ggcGF0dGVybnMgdGhlICdpbXNlYXJjaCcgb3B0aW9uIGlzIHVzZWQuICBJdCBjYW4gYmUgc2V0IHRvCit1c2UgdGhlIHNhbWUgdmFsdWUgYXMgZm9yICdpbWluc2VydCcuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGdpdmUgdGhlIEdVSSBjdXJzb3IgYW5vdGhlciBjb2xvciB3aGVuIHRoZSBsYW5ndWFnZSBtYXBwaW5ncworYXJlIGJlaW5nIHVzZWQuICBUaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHRvIGF2b2lkIHRoYXQgdGhlIGN1cnNvciBiZWNvbWVzCitpbnZpc2libGUgd2hlbiB5b3UgdXNlIGEgbm9uLXN0YW5kYXJkIGJhY2tncm91bmQgY29sb3IuICBIZXJlIGlzIGFuIGV4YW1wbGUgdG8KK3VzZSBhIGJyaWdodGx5IGNvbG9yZWQgY3Vyc29yOiA+CisJOmhpZ2hsaWdodCBDdXJzb3IgZ3VpZmc9Tk9ORSBndWliZz1HcmVlbgorCTpoaWdobGlnaHQgbEN1cnNvciBndWlmZz1OT05FIGd1aWJnPUN5YW4KKzwKKwkJCSprZXltYXAtZmlsZS1mb3JtYXQqICo6bG9hZGsqICo6bG9hZGtleW1hcCogKkUxMDUqCitUaGUga2V5bWFwIGZpbGUgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczogPgorCisJIiBNYWludGFpbmVyOgluYW1lIDxlbWFpbEBhZGRyZXNzPgorCSIgTGFzdCBDaGFuZ2VkOgkyMDAxIEphbiAxCisKKwlsZXQgYjprZXltYXBfbmFtZSA9ICJzaG9ydCIKKworCWxvYWRrZXltYXAKKwlhCUEKKwliCUIJY29tbWVudAorCitUaGUgbGluZXMgc3RhcnRpbmcgd2l0aCBhICIgYXJlIGNvbW1lbnRzIGFuZCB3aWxsIGJlIGlnbm9yZWQuICBCbGFuayBsaW5lcyBhcmUKK2Fsc28gaWdub3JlZC4gIFRoZSBsaW5lcyB3aXRoIHRoZSBtYXBwaW5ncyBtYXkgaGF2ZSBhIGNvbW1lbnQgYWZ0ZXIgdGhlIHVzZWZ1bAordGV4dC4KKworVGhlICJiOmtleW1hcF9uYW1lIiBjYW4gYmUgc2V0IHRvIGEgc2hvcnQgbmFtZSwgd2hpY2ggd2lsbCBiZSBzaG93biBpbiB0aGUKK3N0YXR1cyBsaW5lLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGlzIHRha2VzIGxlc3Mgcm9vbSB0aGFuIHRoZSB2YWx1ZSBvZgorJ2tleW1hcCcsIHdoaWNoIG1pZ2h0IGJlIGxvbmcgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzLAora2V5Ym9hcmRzIGFuZCBlbmNvZGluZ3MuCisKK1RoZSBhY3R1YWwgbWFwcGluZ3MgYXJlIGluIHRoZSBsaW5lcyBiZWxvdyAibG9hZGtleW1hcCIuICBJbiB0aGUgZXhhbXBsZSAiYSIKK2lzIG1hcHBlZCB0byAiQSIgYW5kICJiIiB0byAiQiIuICBUaHVzIHRoZSBmaXJzdCBpdGVtIGlzIG1hcHBlZCB0byB0aGUgc2Vjb25kCitpdGVtLiAgVGhpcyBpcyBkb25lIGZvciBlYWNoIGxpbmUsIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZpbGUuCitUaGVzZSBpdGVtcyBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyB3aGF0IGNhbiBiZSB1c2VkIGluIGEgfDpsbm9yZW1hcHwgY29tbWFuZCwKK3VzaW5nICI8YnVmZmVyPiIgdG8gbWFrZSB0aGUgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIGJ1ZmZlci4uCitZb3UgY2FuIGNoZWNrIHRoZSByZXN1bHQgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKwk6bG1hcAorVGhlIHR3byBpdGVtcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZS4gIFlvdSBjYW5ub3QgaW5jbHVkZSB3aGl0ZQorc3BhY2UgaW5zaWRlIGFuIGl0ZW0sIHVzZSB0aGUgc3BlY2lhbCBuYW1lcyAiPFRhYj4iIGFuZCAiPFNwYWNlPiIgaW5zdGVhZC4KK1RoZSBsZW5ndGggb2YgdGhlIHR3byBpdGVtcyB0b2dldGhlciBtdXN0IG5vdCBleGNlZWQgMjAwIGJ5dGVzLgorCitJdCdzIHBvc3NpYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gdGhlIGZpcnN0IGNvbHVtbi4gIFRoaXMgd29ya3MKK2xpa2UgYSBkZWFkIGtleS4gIEV4YW1wbGU6ID4KKwknYQnDoQorU2luY2UgVmltIGRvZXNuJ3Qga25vdyBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgYSBxdW90ZSBpcyByZWFsbHkgYW4gImEiLAoraXQgd2lsbCB3YWl0IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuICBUbyBiZSBhYmxlIHRvIGluc2VydCBhIHNpbmdsZSBxdW90ZSwKK2Fsc28gYWRkIHRoaXMgbGluZTogPgorCScnCScKK1NpbmNlIHRoZSBtYXBwaW5nIGlzIGRlZmluZWQgd2l0aCB8Omxub3JlbWFwfCB0aGUgcmVzdWx0aW5nIHF1b3RlIHdpbGwgbm90IGJlCit1c2VkIGZvciB0aGUgc3RhcnQgb2YgYW5vdGhlciBjaGFyYWN0ZXIuCisKK0FsdGhvdWdoIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciBpbiB0aGUgc2Vjb25kIGNvbHVtbiwKK3RoaXMgaXMgdW51c3VhbC4gIEJ1dCB5b3UgY2FuIHVzZSB2YXJpb3VzIHdheXMgdG8gc3BlY2lmeSB0aGUgY2hhcmFjdGVyOiA+CisJQQlhCQlsaXRlcmFsIGNoYXJhY3RlcgorCUEJPGNoYXItOTc+CWRlY2ltYWwgdmFsdWUKKwlBCTxjaGFyLTB4NjE+CWhleGFkZWNpbWFsIHZhbHVlCisJQQk8Y2hhci0wMTQxPglvY3RhbCB2YWx1ZQorCXgJPFNwYWNlPgkJc3BlY2lhbCBrZXkgbmFtZQorCitUaGUgY2hhcmFjdGVycyBhcmUgYXNzdW1lZCB0byBiZSBlbmNvZGVkIGZvciB0aGUgY3VycmVudCB2YWx1ZSBvZiAnZW5jb2RpbmcnLgorSXQncyBwb3NzaWJsZSB0byB1c2UgIjpzY3JpcHRlbmNvZGluZyIgd2hlbiBhbGwgY2hhcmFjdGVycyBhcmUgZ2l2ZW4KK2xpdGVyYWxseS4gIFRoYXQgZG9lc24ndCB3b3JrIHdoZW4gdXNpbmcgdGhlIDxjaGFyLT4gY29uc3RydWN0LCBiZWNhdXNlIHRoZQorY29udmVyc2lvbiBpcyBkb25lIG9uIHRoZSBrZXltYXAgZmlsZSwgbm90IG9uIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyLgorCitUaGUgbGluZXMgYWZ0ZXIgImxvYWRrZXltYXAiIGFyZSBpbnRlcnByZXRlZCB3aXRoICdjcG9wdGlvbnMnIHNldCB0byAiQyIuCitUaGlzIG1lYW5zIHRoYXQgY29udGludWF0aW9uIGxpbmVzIGFyZSBub3QgdXNlZCBhbmQgYSBiYWNrc2xhc2ggaGFzIGEgc3BlY2lhbAorbWVhbmluZyBpbiB0aGUgbWFwcGluZ3MuICBFeGFtcGxlczogPgorCisJIiBhIGNvbW1lbnQgbGluZQorCVwiCXgJbWFwcyAiIHRvIHgKKwlcXAl5CW1hcHMgXCB0byB5CisKK0lmIHlvdSB3cml0ZSBhIGtleW1hcCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VmdWwgZm9yIG90aGVycywgY29uc2lkZXIgc3VibWl0dGluZworaXQgdG8gdGhlIFZpbSBtYWludGFpbmVyIGZvciBpbmNsdXNpb24gaW4gdGhlIGRpc3RyaWJ1dGlvbjoKKzxtYWludGFpbmVyQHZpbS5vcmc+CisKKworSEVCUkVXIEtFWU1BUAkJCQkJCSprZXltYXAtaGVicmV3KgorCitUaGlzIGZpbGUgZXhwbGFpbnMgd2hhdCBjaGFyYWN0ZXJzIGFyZSBhdmFpbGFibGUgaW4gVVRGLTggYW5kIENQMTI1NSBlbmNvZGluZ3MsCithbmQgd2hhdCB0aGUga2V5bWFwcyBhcmUgdG8gZ2V0IHRob3NlIGNoYXJhY3RlcnM6CisKK2dseXBoICAgZW5jb2RpbmcJICAga2V5bWFwIH4KK0NoYXIgICB1dGYtOCBjcDEyNTUgIGhlYnJldyAgaGVicmV3cCAgbmFtZSB+CivXkCAgICAweDVkMCAgMHhlMCAgICAgdAkgICAgICBhICAgICAnYWxlZgor15EgICAgMHg1ZDEgIDB4ZTEgICAgIGMJICAgICAgYiAgICAgYmV0CivXkiAgICAweDVkMiAgMHhlMiAgICAgZAkgICAgICBnICAgICBnaW1lbAor15MgICAgMHg1ZDMgIDB4ZTMgICAgIHMJICAgICAgZCAgICAgZGFsZXQKK9eUICAgIDB4NWQ0ICAweGU0ICAgICB2CSAgICAgIGggICAgIGhlCivXlSAgICAweDVkNSAgMHhlNSAgICAgdQkgICAgICB2ICAgICB2YXYKK9eWICAgIDB4NWQ2ICAweGU2ICAgICB6CSAgICAgIHogICAgIHpheWluCivXlyAgICAweDVkNyAgMHhlNyAgICAgagkgICAgICBqICAgICBoZXQKK9eYICAgIDB4NWQ4ICAweGU4ICAgICB5CSAgICAgIFQgICAgIHRldAor15kgICAgMHg1ZDkgIDB4ZTkgICAgIGgJICAgICAgeSAgICAgeW9kCivXmiAgICAweDVkYSAgMHhlYSAgICAgbAkgICAgICBLICAgICBrYWYgc29maXQKK9ebICAgIDB4NWRiICAweGViICAgICBmCSAgICAgIGsgICAgIGthZgor15wgICAgMHg1ZGMgIDB4ZWMgICAgIGsJICAgICAgbCAgICAgbGFtZWQKK9edICAgIDB4NWRkICAweGVkICAgICBvCSAgICAgIE0gICAgIG1lbSBzb2ZpdAor154gICAgMHg1ZGUgIDB4ZWUgICAgIG4JICAgICAgbSAgICAgbWVtCivXnyAgICAweDVkZiAgMHhlZiAgICAgaQkgICAgICBOICAgICBudW4gc29maXQKK9egICAgIDB4NWUwICAweGYwICAgICBiCSAgICAgIG4gICAgIG51bgor16EgICAgMHg1ZTEgIDB4ZjEgICAgIHgJICAgICAgcyAgICAgc2FtZWNoCivXoiAgICAweDVlMiAgMHhmMiAgICAgZwkgICAgICB1ICAgICBgYXlpbgor16MgICAgMHg1ZTMgIDB4ZjMgICAgIDsJICAgICAgUCAgICAgcGUgc29maXQKK9ekICAgIDB4NWU0ICAweGY0ICAgICBwCSAgICAgIHAgICAgIHBlCivXpSAgICAweDVlNSAgMHhmNSAgICAgLgkgICAgICBYICAgICB0c2FkaSBzb2ZpdAor16YgICAgMHg1ZTYgIDB4ZjYgICAgIG0JICAgICAgeCAgICAgdHNhZGkKK9enICAgIDB4NWU3ICAweGY3ICAgICBlCSAgICAgIHEgICAgIHFvZgor16ggICAgMHg1ZTggIDB4ZjggICAgIHIJICAgICAgciAgICAgcmVzaAor16kgICAgMHg1ZTkgIDB4ZjkgICAgIGEJICAgICAgdyAgICAgc2hpbgor16ogICAgMHg1ZWEgIDB4ZmEgICAgICwJICAgICAgdCAgICAgdGF2CisKK1Zvd2VsIG1hcmtzIGFuZCBzcGVjaWFsIHB1bmN0dWF0aW9uOgor15TWsCAgICAweDViMCAgMHhjMCAgICAgQTogICAgICBBOiAgIHNoZXZhCivXlNaxICAgIDB4NWIxICAweGMxICAgICBIRSAgICAgIEhFICAgaGF0YWYgc2Vnb2wKK9eU1rIgICAgMHg1YjIgIDB4YzIgICAgIEhBICAgICAgSEEgICBoYXRhZiBwYXRhaAor15TWsyAgICAweDViMyAgMHhjMyAgICAgSE8gICAgICBITyAgIGhhdGFmIHFhbWF0cwor15TWtCAgICAweDViNCAgMHhjNCAgICAgSSAgICAgICBJICAgIGhpcmlxCivXlNa1ICAgIDB4NWI1ICAweGM1ICAgICBBWSAgICAgIEFZICAgdHNlcmUKK9eU1rYgICAgMHg1YjYgIDB4YzYgICAgIEUgICAgICAgRSAgICBzZWdvbAor15TWtyAgICAweDViNyAgMHhjNyAgICAgQUEgICAgICBBQSAgIHBhdGFoCivXlNa4ICAgIDB4NWI4ICAweGM4ICAgICBBTyAgICAgIEFPICAgcWFtYXRzCivXlNa5ICAgIDB4NWI5ICAweGM5ICAgICBPICAgICAgIE8gICAgaG9sYW0KK9eU1rsgICAgMHg1YmIgIDB4Y2IgICAgIFUgICAgICAgVSAgICBxdWJ1dHMKK9eb1rwgICAgMHg1YmMgIDB4Y2MgICAgIEQgICAgICAgRCAgICBkYWdlc2gKK9eU1r0gICAgMHg1YmQgIDB4Y2QgICAgIF1UICAgICAgXVQgICBtZXRlZwor15TWviAgIDB4NWJlICAweGNlICAgICBdUSAgICAgIF1RICAgbWFxYWYKK9eR1r8gICAgMHg1YmYgIDB4Y2YgICAgIF1SICAgICAgXVIgICByYWZlCivXkdeAICAgMHg1YzAgIDB4ZDAgICAgIF1wICAgICAgXXAgICBwYXNlcQor16nXgSAgICAweDVjMSAgMHhkMSAgICAgU1IgICAgICBTUiAgIHNoaW4tZG90CivXqdeCICAgIDB4NWMyICAweGQyICAgICBTTCAgICAgIFNMICAgc2luLWRvdAor14MgICAgMHg1YzMgIDB4ZDMgICAgIF1QICAgICAgXVAgICBzb2YtcGFzdXEKK9ewICAgIDB4NWYwICAweGQ0ICAgICBWViAgICAgIFZWICAgZG91YmxlLXZhdgor17EgICAgMHg1ZjEgIDB4ZDUgICAgIFZZICAgICAgVlkgICB2YXYteW9kCivXsiAgICAweDVmMiAgMHhkNiAgICAgWVkgICAgICBZWSAgIHlvZC15b2QKKworVGhlIGZvbGxvd2luZyBhcmUgb25seSBhdmFpbGFibGUgaW4gdXRmLTgKKworQ2FudGlsbGF0aW9uIG1hcmtzOgorZ2x5cGgKK0NoYXIgdXRmLTggaGVicmV3IG5hbWUKK9eR1pEgICAgMHg1OTEgICBDOiAgIGV0bmFodGEKK9eR1pIgICAgMHg1OTIgICBDcyAgIHNlZ29sCivXkdaTICAgIDB4NTkzICAgQ1MgICBzaGFsc2hlbGV0CivXkdaUICAgIDB4NTk0ICAgQ3ogICB6YXFlZiBxYXRhbgor15HWlSAgICAweDU5NSAgIENaICAgemFxZWYgZ2Fkb2wKK9eR1pYgICAgMHg1OTYgICBDdCAgIHRpcGVoYQor15HWlyAgICAweDU5NyAgIENyICAgcmV2aWEKK9eR1pggICAgMHg1OTggICBDcSAgIHphcnFhCivXkdaZICAgIDB4NTk5ICAgQ3AgICBwYXNodGEKK9eR1pogICAgMHg1OWEgICBDISAgIHlldGl2CivXkdabICAgIDB4NTliICAgQ3YgICB0ZXZpcgor15HWnCAgICAweDU5YyAgIENnICAgZ2VyZXNoCivXkdadICAgIDB4NTlkICAgQyogICBnZXJlc2ggcWFkaW0KK9eR1p4gICAgMHg1OWUgICBDRyAgIGdlcnNoYXlpbQor15HWnyAgICAweDU5ZiAgIENQICAgcWFybmVpLXBhcmFoCivXkdaqICAgIDB4NWFhICAgQ3kgICB5ZXJhY2gtYmVuLXlvbW8KK9eR1qsgICAgMHg1YWIgICBDbyAgIG9sZQor15HWrCAgICAweDVhYyAgIENpICAgaWx1eQor15HWrSAgICAweDVhZCAgIENkICAgZGVoaQor15HWriAgICAweDVhZSAgIENuICAgemlub3IKK9eR1q8gICAgMHg1YWYgICBDQyAgIG1hc29yYSBjaXJjbGUKKworQ29tYmluaW5nIGZvcm1zOgor76ygICAgIDB4ZmIyMCAgWGAgICBBbHRlcm5hdGl2ZSBgYXlpbgor76yhICAgIDB4ZmIyMSAgWCcgICBBbHRlcm5hdGl2ZSAnYWxlZgor76yiICAgIDB4ZmIyMiAgWC1kICBBbHRlcm5hdGl2ZSBkYWxldAor76yjICAgIDB4ZmIyMyAgWC1oICBBbHRlcm5hdGl2ZSBoZQor76ykICAgIDB4ZmIyNCAgWC1rICBBbHRlcm5hdGl2ZSBrYWYKK++spSAgICAweGZiMjUgIFgtbCAgQWx0ZXJuYXRpdmUgbGFtZWQKK++spiAgICAweGZiMjYgIFgtbSAgQWx0ZXJuYXRpdmUgbWVtLXNvZml0CivvrKcgICAgMHhmYjI3ICBYLXIgIEFsdGVybmF0aXZlIHJlc2gKK++sqCAgICAweGZiMjggIFgtdCAgQWx0ZXJuYXRpdmUgdGF2CivvrKkgICAgMHhmYjI5ICBYLSsgIEFsdGVybmF0aXZlIHBsdXMKK++sqiAgICAweGZiMmEgIFhXICAgc2hpbitzaGluLWRvdAor76yrICAgIDB4ZmIyYiAgWHcgICBzaGluK3Npbi1kb3QKK++srCAgICAweGZiMmMgIFguLlcgIHNoaW4rc2hpbi1kb3QrZGFnZXNoCivvrK0gICAgMHhmYjJkICBYLi53ICBzaGluK3Npbi1kb3QrZGFnZXNoCivvrK4gICAgMHhmYjJlICBYQSAgIGFsZWYrcGF0YWgKK++sryAgICAweGZiMmYgIFhPICAgYWxlZitxYW1hdHMKK++ssCAgICAweGZiMzAgIFhJICAgYWxlZitoaXJpcSAobWFwaXEpCivvrLEgICAgMHhmYjMxICBYLmIgIGJldCtkYWdlc2gKK++ssiAgICAweGZiMzIgIFguZyAgZ2ltZWwrZGFnZXNoCivvrLMgICAgMHhmYjMzICBYLmQgIGRhbGV0K2RhZ2VzaAor76y0ICAgIDB4ZmIzNCAgWC5oICBoZStkYWdlc2gKK++stSAgICAweGZiMzUgIFh1ICB2YXYrZGFnZXNoCivvrLYgICAgMHhmYjM2ICBYLnogIHpheWluK2RhZ2VzaAor76y4ICAgIDB4ZmIzOCAgWC5UICB0ZXQrZGFnZXNoCivvrLkgICAgMHhmYjM5ICBYLnkgIHl1ZCtkYWdlc2gKK++suiAgICAweGZiM2EgIFguSyAga2FmIHNvZml0K2RhZ2VzaAor76y7ICAgIDB4ZmIzYiAgWC5rICBrYWYrZGFnZXNoCivvrLwgICAgMHhmYjNjICBYLmwgIGxhbWVkK2RhZ2VzaAor76y+ICAgIDB4ZmIzZSAgWC5tICBtZW0rZGFnZXNoCivvrYAgICAgMHhmYjQwICBYLm4gIG51bitkYWdlc2gKK++tgSAgICAweGZiNDEgIFgucyAgc2FtZWNoK2RhZ2VzaAor762DICAgIDB4ZmI0MyAgWC5QICBwZSBzb2ZpdCtkYWdlc2gKK++thCAgICAweGZiNDQgIFgucCAgcGUrZGFnZXNoCivvrYYgICAgMHhmYjQ2ICBYLnggIHRzYWRpK2RhZ2VzaAor762HICAgIDB4ZmI0NyAgWC5xICBxb2YrZGFnZXNoCivvrYggICAgMHhmYjQ4ICBYLnIgIHJlc2grZGFnZXNoCivvrYkgICAgMHhmYjQ5ICBYLncgIHNoaW4rZGFnZXNoCivvrYogICAgMHhmYjRhICBYLnQgIHRhditkYWdlc2gKK++tiyAgICAweGZiNGIgIFhvICAgdmF2K2hvbGFtCivvrYwgICAgMHhmYjRjICBYUmIgIGJldCtyYWZlCivvrY0gICAgMHhmYjRkICBYUmsgIGthZityYWZlCivvrY4gICAgMHhmYjRlICBYUnAgIHBlK3JhZmUKK++tjyAgICAweGZiNGYgIFhhbCAgYWxlZi1sYW1lZAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEwLiBVc2luZyBVVEYtOAkJCQkqbWJ5dGUtdXRmOCogKlVURi04KiAqdXRmLTgqICp1dGY4KgorCQkJCQkJCSpVbmljb2RlKiAqdW5pY29kZSoKK1RoZSBVbmljb2RlIGNoYXJhY3RlciBzZXQgd2FzIGRlc2lnbmVkIHRvIGluY2x1ZGUgYWxsIGNoYXJhY3RlcnMgZnJvbSBvdGhlcgorY2hhcmFjdGVyIHNldHMuICBUaGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUgdGV4dCBpbiBhbnkgbGFuZ3VhZ2UgdXNpbmcKK1VuaWNvZGUgKHdpdGggYSBmZXcgcmFyZWx5IHVzZWQgbGFuZ3VhZ2VzIGV4Y2x1ZGVkKS4gIEFuZCBpdCdzIG1vc3RseSBwb3NzaWJsZQordG8gbWl4IHRoZXNlIGxhbmd1YWdlcyBpbiBvbmUgZmlsZSwgd2hpY2ggaXMgaW1wb3NzaWJsZSB3aXRoIG90aGVyIGVuY29kaW5ncy4KKworVW5pY29kZSBjYW4gYmUgZW5jb2RlZCBpbiBzZXZlcmFsIHdheXMuICBUaGUgdHdvIG1vc3QgcG9wdWxhciBvbmVzIGFyZSBVQ1MtMiwKK3doaWNoIHVzZXMgMTYtYml0IHdvcmRzIGFuZCBVVEYtOCwgd2hpY2ggdXNlcyBvbmUgb3IgbW9yZSBieXRlcyBmb3IgZWFjaAorY2hhcmFjdGVyLiAgVmltIGNhbiBzdXBwb3J0IGFsbCBvZiB0aGVzZSBlbmNvZGluZ3MsIGJ1dCBhbHdheXMgdXNlcyBVVEYtOAoraW50ZXJuYWxseS4KKworVmltIGhhcyBjb21wcmVoZW5zaXZlIFVURi04IHN1cHBvcnQuICBJdCBhcHBlYXJzIHRvIHdvcmsgaW46CistIHh0ZXJtIHdpdGggdXRmLTggc3VwcG9ydCBlbmFibGVkCistIEF0aGVuYSwgTW90aWYgYW5kIEdUSyBHVUkKKy0gTVMtV2luZG93cyBHVUkKKworRG91YmxlLXdpZHRoIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZC4gIFRoaXMgd29ya3MgYmVzdCB3aXRoICdndWlmb250d2lkZScgb3IKKydndWlmb250c2V0Jy4gIFdoZW4gdXNpbmcgb25seSAnZ3VpZm9udCcgdGhlIHdpZGUgY2hhcmFjdGVycyBhcmUgZHJhd24gaW4gdGhlCitub3JtYWwgd2lkdGggYW5kIGEgc3BhY2UgdG8gZmlsbCB0aGUgZ2FwLiAgTm90ZSB0aGF0IHRoZSAnZ3VpZm9udHNldCcgb3B0aW9uCitpcyBubyBsb25nZXIgcmVsZXZhbnQgaW4gdGhlIEdUSysgMiBHVUkuCisKK1VwIHRvIHR3byBjb21iaW5pbmcgY2hhcmFjdGVycyBjYW4gYmUgdXNlZC4gIFRoZSBjb21iaW5pbmcgY2hhcmFjdGVyIGlzIGRyYXduCitvbiB0b3Agb2YgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIuICBXaGVuIGVkaXRpbmcgdGV4dCBhIGNvbXBvc2luZyBjaGFyYWN0ZXIgaXMKK21vc3RseSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIuICBGb3IgZXhhbXBsZSAieCIgd2lsbAorZGVsZXRlIGEgY2hhcmFjdGVyIGFuZCBpdHMgZm9sbG93aW5nIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQuIElmIHRoZQorJ2RlbGNvbWJpbmUnIG9wdGlvbiBpcyBvbiwgdGhlbiBwcmVzc2luZyAneCcgd2lsbCBkZWxldGUgdGhlIGNvbWJpbmluZworY2hhcmFjdGVycywgb25lIGF0IGEgdGltZSwgdGhlbiB0aGUgYmFzZSBjaGFyYWN0ZXIuICBCdXQgd2hlbiBpbnNlcnRpbmcsIHlvdQordHlwZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCB0aGUgZm9sbG93aW5nIGNvbXBvc2luZyBjaGFyYWN0ZXJzIHNlcGFyYXRlbHksCithZnRlciB3aGljaCB0aGV5IHdpbGwgYmUgam9pbmVkLiAgVGhlICJyIiBjb21tYW5kIHdpbGwgbm90IGFsbG93IHlvdSB0byB0eXBlIGEKK2NvbWJpbmluZyBjaGFyYWN0ZXIsIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IG9uZSBpcyBjb21pbmcuICBVc2UgIlIiIGluc3RlYWQuCisKK0J5dGVzIHdoaWNoIGFyZSBub3QgcGFydCBvZiBhIHZhbGlkIFVURi04IGJ5dGUgc2VxdWVuY2UgYXJlIGhhbmRsZWQgbGlrZSBhCitzaW5nbGUgY2hhcmFjdGVyIGFuZCBkaXNwbGF5ZWQgYXMgPHh4Piwgd2hlcmUgInh4IiBpcyB0aGUgaGV4IHZhbHVlIG9mIHRoZQorYnl0ZS4KKworT3Zlcmxvbmcgc2VxdWVuY2VzIGFyZSBub3QgaGFuZGxlZCBzcGVjaWFsbHkgYW5kIGRpc3BsYXllZCBsaWtlIGEgdmFsaWQKK2NoYXJhY3Rlci4gIEhvd2V2ZXIsIHNlYXJjaCBwYXR0ZXJucyBtYXkgbm90IG1hdGNoIG9uIGFuIG92ZXJsb25nIHNlcXVlbmNlLgorKGFuIG92ZXJsb25nIHNlcXVlbmNlIGlzIHdoZXJlIG1vcmUgYnl0ZXMgYXJlIHVzZWQgdGhhbiByZXF1aXJlZCBmb3IgdGhlCitjaGFyYWN0ZXIuKSAgQW4gZXhjZXB0aW9uIGlzIE5VTCAoemVybykgd2hpY2ggaXMgZGlzcGxheWVkIGFzICI8MDA+Ii4KKworSW4gdGhlIGZpbGUgYW5kIGJ1ZmZlciB0aGUgZnVsbCByYW5nZSBvZiBVbmljb2RlIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQgKDMxCitiaXRzKS4gIEhvd2V2ZXIsIGRpc3BsYXlpbmcgb25seSB3b3JrcyBmb3IgMTYgYml0IGNoYXJhY3RlcnMsIGFuZCBvbmx5IGZvciB0aGUKK2NoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUgc2VsZWN0ZWQgZm9udC4KKworVXNlZnVsIGNvbW1hbmRzOgorLSAiZ2EiIHNob3dzIHRoZSBkZWNpbWFsLCBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgdmFsdWUgb2YgdGhlIGNoYXJhY3RlciB1bmRlcgorICB0aGUgY3Vyc29yLiAgSWYgdGhlcmUgYXJlIGNvbXBvc2luZyBjaGFyYWN0ZXJzIHRoZXNlIGFyZSBzaG93biB0b28uIChpZiB0aGUKKyAgbWVzc2FnZSBpcyB0cnVuY2F0ZWQsIHVzZSAiOm1lc3NhZ2VzIikuCistICJnOCIgc2hvd3MgdGhlIGJ5dGVzIHVzZWQgaW4gYSBVVEYtOCBjaGFyYWN0ZXIsIGFsc28gdGhlIGNvbXBvc2luZworICBjaGFyYWN0ZXJzLCBhcyBoZXggbnVtYmVycy4KKy0gIjpzZXQgZW5jb2Rpbmc9dXRmLTggZmlsZWVuY29kaW5ncz0iIGZvcmNlcyB1c2luZyBVVEYtOCBmb3IgYWxsIGZpbGVzLiAgVGhlCisgIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBjdXJyZW50IGxvY2FsZSBmb3IgJ2VuY29kaW5nJyBhbmQgc2V0ICdmaWxlZW5jb2RpbmdzJworICB0byBhdXRvbWF0aWNhbGx5IHRoZSBlbmNvZGluZyBvZiBhIGZpbGUuCisKKworU1RBUlRJTkcgVklNCisKK0lmIHlvdXIgY3VycmVudCBsb2NhbGUgaXMgaW4gYW4gdXRmLTggZW5jb2RpbmcsIFZpbSB3aWxsIGF1dG9tYXRpY2FsbHkgc3RhcnQKK2luIHV0Zi04IG1vZGUuCisKK0lmIHlvdSBhcmUgdXNpbmcgYW5vdGhlciBsb2NhbGU6ID4KKworCXNldCBlbmNvZGluZz11dGYtOAorCitZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHNlbGVjdCB0aGUgZm9udCB1c2VkIGZvciB0aGUgbWVudXMuICBVbmZvcnR1bmF0ZWx5IHRoaXMKK2RvZXNuJ3QgYWx3YXlzIHdvcmsuICBTZWUgdGhlIHN5c3RlbSBzcGVjaWZpYyByZW1hcmtzIGJlbG93LCBhbmQgJ2xhbmdtZW51Jy4KKworCitVU0lORyBVVEYtOCBJTiBYLVdpbmRvd3MJCQkJKnV0Zi04LWluLXh3aW5kb3dzKgorCitOb3RlOiBUaGlzIHNlY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gdGhlIEdUSysgMiBHVUkuCisKK1lvdSBuZWVkIHRvIHNwZWNpZnkgYSBmb250IHRvIGJlIHVzZWQuICBGb3IgZG91YmxlLXdpZGUgY2hhcmFjdGVycyBhbm90aGVyCitmb250IGlzIHJlcXVpcmVkLCB3aGljaCBpcyBleGFjdGx5IHR3aWNlIGFzIHdpZGUuICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBkbwordGhpczoKKworMS4gU2V0ICdndWlmb250JyBhbmQgbGV0IFZpbSBmaW5kIGEgbWF0Y2hpbmcgJ2d1aWZvbnR3aWRlJworMi4gU2V0ICdndWlmb250JyBhbmQgJ2d1aWZvbnR3aWRlJworMy4gU2V0ICdndWlmb250c2V0JworCitTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGVhY2ggb3B0aW9uIGZvciBkZXRhaWxzLiAgRXhhbXBsZTogPgorCisgICA6c2V0IGd1aWZvbnQ9LW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc28xMDY0Ni0xCisKK1lvdSBtaWdodCBhbHNvIHdhbnQgdG8gc2V0IHRoZSBmb250IHVzZWQgZm9yIHRoZSBtZW51cy4gIFRoaXMgb25seSB3b3JrcyBmb3IKK01vdGlmLiAgVXNlIHRoZSAiOmhpIE1lbnUgZm9udD17Zm9udG5hbWV9IiBjb21tYW5kIGZvciB0aGlzLiB8OmhpZ2hsaWdodHwKKworCitUWVBJTkcgVVRGLTgJCQkJCQkqdXRmLTgtdHlwaW5nKgorCitJZiB5b3UgYXJlIHVzaW5nIFgtV2luZG93cywgeW91IHNob3VsZCBmaW5kIGFuIGlucHV0IG1ldGhvZCB0aGF0IHN1cHBvcnRzCit1dGYtOC4KKworSWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBzdXBwb3J0IGZvciB0eXBpbmcgdXRmLTgsIHlvdSBjYW4gdXNlIHRoZQorJ2tleW1hcCcgZmVhdHVyZS4gIFRoaXMgYWxsb3dzIHdyaXRpbmcgYSBrZXltYXAgZmlsZSwgd2hpY2ggZGVmaW5lcyBhIHV0Zi04CitjaGFyYWN0ZXIgYXMgYSBzZXF1ZW5jZSBvZiBBU0NJSSBjaGFyYWN0ZXJzLiAgU2VlIHxtYnl0ZS1rZXltYXB8LgorCitBbm90aGVyIG1ldGhvZCBpcyB0byBzZXQgdGhlIGN1cnJlbnQgbG9jYWxlIHRvIHRoZSBsYW5ndWFnZSB5b3Ugd2FudCB0byB1c2UKK2FuZCBmb3Igd2hpY2ggeW91IGhhdmUgYSBYSU0gYXZhaWxhYmxlLiAgVGhlbiBzZXQgJ3Rlcm1lbmNvZGluZycgdG8gdGhhdAorbGFuZ3VhZ2UgYW5kIFZpbSB3aWxsIGNvbnZlcnQgdGhlIHR5cGVkIGNoYXJhY3RlcnMgdG8gJ2VuY29kaW5nJyBmb3IgeW91LgorCitJZiBldmVyeXRoaW5nIGVsc2UgZmFpbHMsIHlvdSBjYW4gdHlwZSBhbnkgY2hhcmFjdGVyIGFzIGZvdXIgaGV4IGJ5dGVzOiA+CisKKwlDVFJMLVYgdSAxMjM0CisKKyIxMjM0IiBpcyBpbnRlcnByZXRlZCBhcyBhIGhleCBudW1iZXIuICBZb3UgbXVzdCB0eXBlIGZvdXIgY2hhcmFjdGVycywgcHJlcGVuZAorYSB6ZXJvIGlmIG5lY2Vzc2FyeS4KKworCitDT01NQU5EIEFSR1VNRU5UUwkJCQkJKnV0Zi04LWNoYXItYXJnKgorCitDb21tYW5kcyBsaWtlIHxmfCwgfEZ8LCB8dHwgYW5kIHxyfCB0YWtlIGFuIGFyZ3VtZW50IG9mIG9uZSBjaGFyYWN0ZXIuICBGb3IKK1VURi04IHRoaXMgYXJndW1lbnQgbWF5IGluY2x1ZGUgb25lIG9yIHR3byBjb21wb3NpbmcgY2hhcmFjdGVycy4gIFRoZXNlIG5lZWRzCit0byBiZSBwcm9kdWNlZCB0b2dldGhlciB3aXRoIHRoZSBiYXNlIGNoYXJhY3RlciwgVmltIGRvZXNuJ3Qgd2FpdCBmb3IgdGhlIG5leHQKK2NoYXJhY3RlciB0byBiZSB0eXBlZCB0byBmaW5kIG91dCBpZiBpdCBpcyBhIGNvbXBvc2luZyBjaGFyYWN0ZXIgb3Igbm90LgorVXNpbmcgJ2tleW1hcCcgb3IgfDpsbWFwfCBpcyBhIG5pY2Ugd2F5IHRvIHR5cGUgdGhlc2UgY2hhcmFjdGVycy4KKworVGhlIGNvbW1hbmRzIHRoYXQgc2VhcmNoIGZvciBhIGNoYXJhY3RlciBpbiBhIGxpbmUgaGFuZGxlIGNvbXBvc2luZyBjaGFyYWN0ZXJzCithcyBmb2xsb3dzLiAgV2hlbiBzZWFyY2hpbmcgZm9yIGEgY2hhcmFjdGVyIHdpdGhvdXQgYSBjb21wb3NpbmcgY2hhcmFjdGVyLAordGhpcyB3aWxsIGZpbmQgbWF0Y2hlcyBpbiB0aGUgdGV4dCB3aXRoIG9yIHdpdGhvdXQgY29tcG9zaW5nIGNoYXJhY3RlcnMuICBXaGVuCitzZWFyY2hpbmcgZm9yIGEgY2hhcmFjdGVyIHdpdGggYSBjb21wb3NpbmcgY2hhcmFjdGVyLCB0aGlzIHdpbGwgb25seSBmaW5kCittYXRjaGVzIHdpdGggdGhhdCBjb21wb3NpbmcgY2hhcmFjdGVyLiAgSXQgd2FzIGltcGxlbWVudGVkIHRoaXMgd2F5LCBiZWNhdXNlCitub3QgZXZlcnlib2R5IGlzIGFibGUgdG8gdHlwZSBhIGNvbXBvc2luZyBjaGFyYWN0ZXIuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMS4gT3ZlcnZpZXcgb2Ygb3B0aW9ucwkJCQkJKm1ieXRlLW9wdGlvbnMqCisKK1RoZXNlIG9wdGlvbnMgYXJlIHJlbGV2YW50IGZvciBlZGl0aW5nIG11bHRpLWJ5dGUgZmlsZXMuICBDaGVjayB0aGUgaGVscCBpbgorb3B0aW9ucy50eHQgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLgorCisnZW5jb2RpbmcnCUVuY29kaW5nIHVzZWQgZm9yIHRoZSBrZXlib2FyZCBhbmQgZGlzcGxheS4gIEl0IGlzIGFsc28gdGhlCisJCWRlZmF1bHQgZW5jb2RpbmcgZm9yIGZpbGVzLgorCisnZmlsZWVuY29kaW5nJwlFbmNvZGluZyBvZiBhIGZpbGUuICBXaGVuIGl0J3MgZGlmZmVyZW50IGZyb20gJ2VuY29kaW5nJworCQljb252ZXJzaW9uIGlzIGRvbmUgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIGZpbGUuCisKKydmaWxlZW5jb2RpbmdzJwlMaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncyBvZiBhIGZpbGUuICBXaGVuIG9wZW5pbmcgYSBmaWxlCisJCXRoZXNlIHdpbGwgYmUgdHJpZWQgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBkb2Vzbid0IGNhdXNlIGFuCisJCWVycm9yIGlzIHVzZWQgZm9yICdmaWxlZW5jb2RpbmcnLgorCisnY2hhcmNvbnZlcnQnCUV4cHJlc3Npb24gdXNlZCB0byBjb252ZXJ0IGZpbGVzIGZyb20gb25lIGVuY29kaW5nIHRvIGFub3RoZXIuCisKKydmb3JtYXRvcHRpb25zJyBUaGUgJ20nIGZsYWcgY2FuIGJlIGluY2x1ZGVkIHRvIGhhdmUgZm9ybWF0dGluZyBicmVhayBhIGxpbmUKKwkJYXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIG9mIDI1NiBvciBoaWdoZXIuICBUaHVzIGlzIHVzZWZ1bCBmb3IKKwkJbGFuZ3VhZ2VzIHdoZXJlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBjYW4gYmUgYnJva2VuCisJCWFueXdoZXJlLgorCisnZ3VpZm9udHNldCcJVGhlIGxpc3Qgb2YgZm9udCBuYW1lcyB1c2VkIGZvciBhIG11bHRpLWJ5dGUgZW5jb2RpbmcuICBXaGVuCisJCXRoaXMgb3B0aW9uIGlzIG5vdCBlbXB0eSwgaXQgcmVwbGFjZXMgJ2d1aWZvbnQnLgorCisna2V5bWFwJwlTcGVjaWZ5IHRoZSBuYW1lIG9mIGEga2V5Ym9hcmQgbWFwcGluZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnRyaWJ1dGlvbnMgc3BlY2lmaWNhbGx5IGZvciB0aGUgbXVsdGktYnl0ZSBmZWF0dXJlcyBieToKKwlDaGktRGVvayBId2FuZyA8aHdhbmdAbWl6aS5jby5rcj4KKwlOYW0gU3VuZ0h5dW4gPG5hbXNoQGxnZS5jb20+CisJSy5OYWdhbm8gPG5hZ2Fub0BhdGVzZS5hZHZhbnRlc3QuY28uanA+CisJVGFybyBNdXJhb2thICA8a29yb25AdGthLmF0dC5uZS5qcD4KKwlZYXN1aGlybyBNYXRzdW1vdG8gPG1hdHRuQG1haWwuZ29vLm5lLmpwPgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbWVzc2FnZS50eHQgYi9ydW50aW1lL2RvYy9tZXNzYWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTk3M2IwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvbWVzc2FnZS50eHQKQEAgLTAsMCArMSw3NzUgQEAKKyptZXNzYWdlLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMTcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitUaGlzIGZpbGUgY29udGFpbnMgYW4gYWxwaGFiZXRpY2FsIGxpc3Qgb2YgbWVzc2FnZXMgYW5kIGVycm9yIG1lc3NhZ2VzIHRoYXQKK1ZpbSBwcm9kdWNlcy4gIFlvdSBjYW4gdXNlIHRoaXMgaWYgeW91IGRvbid0IHVuZGVyc3RhbmQgd2hhdCB0aGUgbWVzc2FnZQorbWVhbnMuICBJdCBpcyBub3QgY29tcGxldGUgdGhvdWdoLgorCisxLiBPbGQgbWVzc2FnZXMJCXw6bWVzc2FnZXN8CisyLiBFcnJvciBtZXNzYWdlcwl8ZXJyb3ItbWVzc2FnZXN8CiszLiBNZXNzYWdlcwkJfG1lc3NhZ2VzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIE9sZCBtZXNzYWdlcwkJCSo6bWVzc2FnZXMqICo6bWVzKiAqbWVzc2FnZS1oaXN0b3J5KgorCitUaGUgIjptZXNzYWdlcyIgY29tbWFuZCBjYW4gYmUgdXNlZCB0byB2aWV3IHByZXZpb3VzbHkgZ2l2ZW4gbWVzc2FnZXMuICBUaGlzCitpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIG1lc3NhZ2VzIGhhdmUgYmVlbiBvdmVyd3JpdHRlbiBvciB0cnVuY2F0ZWQuICBUaGlzCitkZXBlbmRzIG9uIHRoZSAnc2hvcnRtZXNzJyBvcHRpb24uCisKK1RoZSBudW1iZXIgb2YgcmVtZW1iZXJlZCBtZXNzYWdlcyBpcyBmaXhlZCBhdCAyMC4KKworSWYgeW91IGFyZSB1c2luZyB0cmFuc2xhdGVkIG1lc3NhZ2VzLCB0aGUgZmlyc3QgcHJpbnRlZCBsaW5lIHRlbGxzIHdobworbWFpbnRhaW5zIHRoZSBtZXNzYWdlcyBvciB0aGUgdHJhbnNsYXRpb25zLiAgWW91IGNhbiB1c2UgdGhpcyB0byBjb250YWN0IHRoZQorbWFpbnRhaW5lciB3aGVuIHlvdSBzcG90IGEgbWlzdGFrZS4KKworSWYgeW91IHdhbnQgdG8gZmluZCBoZWxwIG9uIGEgc3BlY2lmaWMgKGVycm9yKSBtZXNzYWdlLCB1c2UgdGhlIElEIGF0IHRoZQorc3RhcnQgb2YgdGhlIG1lc3NhZ2UuICBGb3IgZXhhbXBsZSwgdG8gZ2V0IGhlbHAgb24gdGhlIG1lc3NhZ2U6ID4KKworCUU3MjogQ2xvc2UgZXJyb3Igb24gc3dhcCBmaWxlCisKK29yICh0cmFuc2xhdGVkKTogPgorCisJRTcyOiBFcnJvcmUgZHVyYW50ZSBjaGl1c3VyYSBzd2FwIGZpbGUKKworVXNlOiA+CisKKwk6aGVscCBFNzIKKworSWYgeW91IGFyZSBsYXp5LCBpdCBhbHNvIHdvcmtzIHdpdGhvdXQgdGhlIHNoaWZ0IGtleTogPgorCisJOmhlbHAgZTcyCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gRXJyb3IgbWVzc2FnZXMJCQkJCSplcnJvci1tZXNzYWdlcyoKKworV2hlbiBhbiBlcnJvciBtZXNzYWdlIGlzIGRpc3BsYXllZCwgYnV0IGl0IGlzIHJlbW92ZWQgYmVmb3JlIHlvdSBjb3VsZCByZWFkCitpdCwgeW91IGNhbiBzZWUgaXQgYWdhaW4gd2l0aDogPgorICA6ZWNobyBlcnJtc2cKK29yIHZpZXcgYSBsaXN0IG9mIHJlY2VudCBtZXNzYWdlcyB3aXRoOiA+CisgIDptZXNzYWdlcworCisKK0xJU1QgT0YgTUVTU0FHRVMKKwkJCSpFMjIyKiAqRTIyOCogKkUyMzIqICpFMjU2KiAqRTI5MyogKkUyOTgqICpFMzA0KiAqRTMxNyoKKwkJCSpFMzE4KiAqRTM1NiogKkU0MzgqICpFNDM5KiAqRTQ0MCogKkUzMTYqICpFMzIwKiAqRTMyMioKKwkJCSpFMzIzKiAqRTM0MSogKkU0NzMqICpFNTcwKiAgPgorICBBZGQgdG8gcmVhZCBidWZmZXIKKyAgbWFrZW1hcDogSWxsZWdhbCBtb2RlCisgIENhbm5vdCBjcmVhdGUgQmFsbG9vbkV2YWwgd2l0aCBib3RoIG1lc3NhZ2UgYW5kIGNhbGxiYWNrCisgIEhhbmd1bCBhdXRvbWF0YSBFUlJPUgorICBibG9jayB3YXMgbm90IGxvY2tlZAorICBEaWRuJ3QgZ2V0IGJsb2NrIG5yIHtOfT8KKyAgbWxfdGltZXN0YW1wOiBEaWRuJ3QgZ2V0IGJsb2NrIDA/PworICBwb2ludGVyIGJsb2NrIGlkIHdyb25nIHtOfQorICBVcGRhdGVkIHRvbyBtYW55IGJsb2Nrcz8KKyAgZ2V0X3ZhcnAgRVJST1IKKyAgdV91bmRvOiBsaW5lIG51bWJlcnMgd3JvbmcKKyAgdW5kbyBsaXN0IGNvcnJ1cHQKKyAgdW5kbyBsaW5lIG1pc3NpbmcKKyAgbWxfZ2V0OiBjYW5ub3QgZmluZCBsaW5lIHtOfQorICBjYW5ub3QgZmluZCBsaW5lIHtOfQorICBsaW5lIG51bWJlciBvdXQgb2YgcmFuZ2U6IHtOfSBwYXN0IHRoZSBlbmQKKyAgbGluZSBjb3VudCB3cm9uZyBpbiBibG9jayB7Tn0KKyAgSW50ZXJuYWwgZXJyb3IKKyAgZmF0YWwgZXJyb3IgaW4gY3NfbWFuYWdlX21hdGNoZXMKKworVGhpcyBpcyBhbiBpbnRlcm5hbCBlcnJvci4gIElmIHlvdSBjYW4gcmVwcm9kdWNlIGl0LCBwbGVhc2Ugc2VuZCBpbiBhIGJ1ZworcmVwb3J0LiB8YnVnc3wKKworPgorICBBVFRFTlRJT04KKyAgRm91bmQgYSBzd2FwIGZpbGUgYnkgdGhlIG5hbWUgLi4uCisKK1NlZSB8QVRURU5USU9OfC4KKworCQkJCQkJCSpFOTIqICA+CisgIEJ1ZmZlciB7Tn0gbm90IGZvdW5kCisKK1RoZSBidWZmZXIgeW91IHJlcXVlc3RlZCBkb2VzIG5vdCBleGlzdC4gIFRoaXMgY2FuIGFsc28gaGFwcGVuIHdoZW4geW91IGhhdmUKK3dpcGVkIG91dCBhIGJ1ZmZlciB3aGljaCBjb250YWlucyBhIG1hcmsgb3IgaXMgcmVmZXJlbmNlZCBpbiBhbm90aGVyIHdheS4KK3w6YndpcGVvdXR8CisKKwkJCQkJCQkqRTk1KiAgPgorICBCdWZmZXIgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMKKworWW91IGNhbm5vdCBoYXZlIHR3byBidWZmZXJzIHdpdGggdGhlIHNhbWUgbmFtZS4KKworCQkJCQkJCSpFNzIqICA+CisgIENsb3NlIGVycm9yIG9uIHN3YXAgZmlsZQorCitUaGUgfHN3YXAtZmlsZXwsIHRoYXQgaXMgdXNlZCB0byBrZWVwIGEgY29weSBvZiB0aGUgZWRpdGVkIHRleHQsIGNvdWxkIG5vdCBiZQorY2xvc2VkIHByb3Blcmx5LiAgTW9zdGx5IGhhcm1sZXNzLgorCisJCQkJCQkJKkUxNjkqICA+CisgIENvbW1hbmQgdG9vIHJlY3Vyc2l2ZQorCitUaGlzIGhhcHBlbnMgd2hlbiBhbiBFeCBjb21tYW5kIGV4ZWN1dGVzIGFuIEV4IGNvbW1hbmQgdGhhdCBleGVjdXRlcyBhbiBFeAorY29tbWFuZCwgZXRjLiAgVGhpcyBpcyBvbmx5IGFsbG93ZWQgMjAwIHRpbWVzLiAgV2hlbiBpdCdzIG1vcmUgdGhlcmUgcHJvYmFibHkKK2lzIGFuIGVuZGxlc3MgbG9vcC4gIFByb2JhYmx5IGEgfDpleGVjdXRlfCBvciB8OnNvdXJjZXwgY29tbWFuZCBpcyBpbnZvbHZlZC4KKworCQkJCQkJCSpFMjU0KiAgPgorICBDYW5ub3QgYWxsb2NhdGUgY29sb3Ige25hbWV9CisKK1RoZSBjb2xvciBuYW1lIHtuYW1lfSBpcyB1bmtub3duLiAgU2VlIHxndWktY29sb3JzfCBmb3IgYSBsaXN0IG9mIGNvbG9ycyB0aGF0CithcmUgYXZhaWxhYmxlIG9uIG1vc3Qgc3lzdGVtcy4KKworCQkJCQkJCSpFNDU4KiAgPgorICBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnkgZm9yICJ4eHh4IgorICBDYW5ub3QgYWxsb2NhdGUgY29sb3JtYXAgZW50cnksIHNvbWUgY29sb3JzIG1heSBiZSBpbmNvcnJlY3QKKworVGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBub3QgZW5vdWdoIGNvbG9ycyBhdmFpbGFibGUgZm9yIFZpbS4gIEl0IHdpbGwgc3RpbGwKK3J1biwgYnV0IHNvbWUgb2YgdGhlIGNvbG9ycyB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIHNwZWNpZmllZCBjb2xvci4gIFRyeQorc3RvcHBpbmcgb3RoZXIgYXBwbGljYXRpb25zIHRoYXQgdXNlIG1hbnkgY29sb3JzLCBvciBzdGFydCB0aGVtIGFmdGVyIHN0YXJ0aW5nCitndmltLgorTmV0c2NhcGUgaXMga25vd24gdG8gY29uc3VtZSBhIGxvdCBvZiBjb2xvcnMuICBZb3UgY2FuIGF2b2lkIHRoaXMgYnkgdGVsbGluZworaXQgdG8gdXNlIGl0cyBvd24gY29sb3JtYXA6ID4KKwluZXRzY2FwZSAtaW5zdGFsbAorT3IgdGVsbCBpdCB0byBsaW1pdCB0byBhIGNlcnRhaW4gbnVtYmVyIG9mIGNvbG9ycyAoNjQgc2hvdWxkIHdvcmsgd2VsbCk6ID4KKwluZXRzY2FwZSAtbmNvbHMgNjQKK1RoaXMgY2FuIGFsc28gYmUgZG9uZSB3aXRoIGEgbGluZSBpbiB5b3VyIFhkZWZhdWx0cyBmaWxlOiA+CisJTmV0c2NhcGUqaW5zdGFsbENvbG9ybWFwOiBZZXMKK29yID4KKwlOZXRzY2FwZSptYXhJbWFnZUNvbG9yczogIDY0Cis8CisJCQkJCQkJKkU3OSogID4KKyAgQ2Fubm90IGV4cGFuZCB3aWxkY2FyZHMKKworQSBmaWxlbmFtZSBjb250YWlucyBhIHN0cmFuZ2UgY29tYmluYXRpb24gb2YgY2hhcmFjdGVycywgd2hpY2ggY2F1c2VzIFZpbSB0bworYXR0ZW1wdCBleHBhbmRpbmcgd2lsZGNhcmRzIGJ1dCB0aGlzIGZhaWxzLiAgVGhpcyBkb2VzIE5PVCBtZWFuIHRoYXQgbm8KK21hdGNoaW5nIGZpbGUgbmFtZXMgY291bGQgYmUgZm91bmQsIGJ1dCB0aGF0IHRoZSBwYXR0ZXJuIHdhcyBpbGxlZ2FsLgorCisJCQkJCQkJKkU0NTkqICA+CisgIENhbm5vdCBnbyBiYWNrIHRvIHByZXZpb3VzIGRpcmVjdG9yeQorCitXaGlsZSBleHBhbmRpbmcgYSBmaWxlIG5hbWUsIFZpbSBmYWlsZWQgdG8gZ28gYmFjayB0byB0aGUgcHJldmlvdXNseSB1c2VkCitkaXJlY3RvcnkuICBBbGwgZmlsZSBuYW1lcyBiZWluZyB1c2VkIG1heSBiZSBpbnZhbGlkIG5vdyEgIFlvdSBuZWVkIHRvIGhhdmUKK2V4ZWN1dGUgcGVybWlzc2lvbiBvbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKwkJCQkJCQkqRTE5MCogKkUyMTIqICA+CisgIENhbm5vdCBvcGVuICJ7ZmlsZW5hbWV9IiBmb3Igd3JpdGluZworICBDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmcKKworRm9yIHNvbWUgcmVhc29uIHRoZSBmaWxlIHlvdSBhcmUgd3JpdGluZyB0byBjYW5ub3QgYmUgY3JlYXRlZCBvciBvdmVyd3JpdHRlbi4KK1RoZSByZWFzb24gY291bGQgYmUgdGhhdCB5b3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSBpbiB0aGUgZGlyZWN0b3J5CitvciB0aGUgZmlsZSBuYW1lIGlzIG5vdCB2YWxpZC4KKworCQkJCQkJCSpFMTY2KiAgPgorICBDYW4ndCBvcGVuIGxpbmtlZCBmaWxlIGZvciB3cml0aW5nCisKK1lvdSBhcmUgdHJ5aW5nIHRvIHdyaXRlIHRvIGEgZmlsZSB3aGljaCBjYW4ndCBiZSBvdmVyd3JpdHRlbiwgYW5kIHRoZSBmaWxlIGlzCithIGxpbmsgKGVpdGhlciBhIGhhcmQgbGluayBvciBhIHN5bWJvbGljIGxpbmspLiAgV3JpdGluZyBtaWdodCBzdGlsbCBiZQorcG9zc2libGUgaWYgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBsaW5rIG9yIHRoZSBmaWxlIGlzIHdyaXRhYmxlLCBidXQKK1ZpbSBub3cgZG9lc24ndCBrbm93IGlmIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgbGluayBhbmQgd3JpdGUgdGhlIGZpbGUgaW4gaXRzCitwbGFjZSwgb3IgaWYgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBmaWxlIGl0c2VsZiBhbmQgd3JpdGUgdGhlIG5ldyBmaWxlIGluIGl0cworcGxhY2UuICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gd3JpdGUgdGhlIGZpbGUgdW5kZXIgdGhpcyBuYW1lLCB5b3UgaGF2ZSB0bworbWFudWFsbHkgZGVsZXRlIHRoZSBsaW5rIG9yIHRoZSBmaWxlLCBvciBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIHNvIHRoYXQgVmltCitjYW4gb3ZlcndyaXRlLgorCisJCQkJCQkJKkU0NiogID4KKyAgQ2Fubm90IHNldCByZWFkLW9ubHkgdmFyaWFibGUgIntuYW1lfSIKKworWW91IGFyZSB0cnlpbmcgdG8gYXNzaWduIGEgdmFsdWUgdG8gYW4gYXJndW1lbnQgb2YgYSBmdW5jdGlvbiB8YTp2YXJ8IG9yIGEgVmltCitpbnRlcm5hbCB2YXJpYWJsZSB8djp2YXJ8IHdoaWNoIGlzIHJlYWQtb25seS4KKworCQkJCQkJCSpFOTAqICA+CisgIENhbm5vdCB1bmxvYWQgbGFzdCBidWZmZXIKKworVmltIGFsd2F5cyByZXF1aXJlcyBvbmUgYnVmZmVyIHRvIGJlIGxvYWRlZCwgb3RoZXJ3aXNlIHRoZXJlIHdvdWxkIGJlIG5vdGhpbmcKK3RvIGRpc3BsYXkgaW4gdGhlIHdpbmRvdy4KKworCQkJCQkJCSpFNDAqICA+CisgIENhbid0IG9wZW4gZXJyb3JmaWxlIDxmaWxlbmFtZT4KKworV2hlbiB1c2luZyB0aGUgIjptYWtlIiBvciAiOmdyZXAiIGNvbW1hbmRzOiBUaGUgZmlsZSB1c2VkIHRvIHNhdmUgdGhlIGVycm9yCittZXNzYWdlcyBvciBncmVwIG91dHB1dCBjYW5ub3QgYmUgb3BlbmVkLiAgVGhpcyBjYW4gaGF2ZSBzZXZlcmFsIGNhdXNlczoKKy0gJ3NoZWxscmVkaXInIGhhcyBhIHdyb25nIHZhbHVlLgorLSBUaGUgc2hlbGwgY2hhbmdlcyBkaXJlY3RvcnksIGNhdXNpbmcgdGhlIGVycm9yIGZpbGUgdG8gYmUgd3JpdHRlbiBpbiBhbm90aGVyCisgIGRpcmVjdG9yeS4gIFRoaXMgY291bGQgYmUgZml4ZWQgYnkgY2hhbmdpbmcgJ21ha2VlZicsIGJ1dCB0aGVuIHRoZSBtYWtlCisgIGNvbW1hbmQgaXMgc3RpbGwgZXhlY3V0ZWQgaW4gdGhlIHdyb25nIGRpcmVjdG9yeS4KKy0gJ21ha2VlZicgaGFzIGEgd3JvbmcgdmFsdWUuCistIFRoZSAnZ3JlcHByZycgb3IgJ21ha2VwcmcnIGNvdWxkIG5vdCBiZSBleGVjdXRlZC4gIFRoaXMgY2Fubm90IGFsd2F5cyBiZQorICBkZXRlY3RlZCAoZXNwZWNpYWxseSBvbiBNUy1XaW5kb3dzKS4gIENoZWNrIHlvdXIgJFBBVEguCisKKyA+CisgIENhbid0IG9wZW4gZmlsZSBDOlxURU1QXFZJb0QyNDMuVE1QCisKK09uIE1TLVdpbmRvd3MsIHRoaXMgbWVzc2FnZSBhcHBlYXJzIHdoZW4gdGhlIG91dHB1dCBvZiBhbiBleHRlcm5hbCBjb21tYW5kIHdhcwordG8gYmUgcmVhZCwgYnV0IHRoZSBjb21tYW5kIGRpZG4ndCBydW4gc3VjY2Vzc2Z1bGx5LiAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5CittYW55IHRoaW5ncy4gIENoZWNrIHRoZSAnc2hlbGwnLCAnc2hlbGxxdW90ZScsICdzaGVsbHhxdW90ZScsICdzaGVsbHNsYXNoJyBhbmQKK3JlbGF0ZWQgb3B0aW9ucy4gIEl0IG1pZ2h0IGFsc28gYmUgdGhhdCB0aGUgZXh0ZXJuYWwgY29tbWFuZCB3YXMgbm90IGZvdW5kLAordGhlcmUgaXMgbm8gZGlmZmVyZW50IGVycm9yIG1lc3NhZ2UgZm9yIHRoYXQuCisKKwkJCQkJCQkqRTEyKiAgPgorICBDb21tYW5kIG5vdCBhbGxvd2VkIGZyb20gZXhyYy92aW1yYyBpbiBjdXJyZW50IGRpciBvciB0YWcgc2VhcmNoCisKK1NvbWUgY29tbWFuZHMgYXJlIG5vdCBhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLiAgVGhlc2UgY29tbWFuZHMgbW9zdGx5Citjb21lIGZyb20gYSAuZXhyYyBvciAudmltcmMgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIG9yIGZyb20gYSB0YWdzCitmaWxlLiAgQWxzbyBzZWUgJ3NlY3VyZScuCisKKwkJCQkJCQkqRTc0KiAgPgorICBDb21tYW5kIHRvbyBjb21wbGV4CisKK0EgbWFwcGluZyByZXN1bHRlZCBpbiBhIHZlcnkgbG9uZyBjb21tYW5kIHN0cmluZy4gIENvdWxkIGJlIGNhdXNlZCBieSBhCittYXBwaW5nIHRoYXQgaW5kaXJlY3RseSBjYWxscyBpdHNlbGYuCisKKz4KKyAgQ09OVkVSU0lPTiBFUlJPUgorCitXaGVuIHdyaXRpbmcgYSBmaWxlIGFuZCB0aGUgdGV4dCAiQ09OVkVSU0lPTiBFUlJPUiIgYXBwZWFycywgdGhpcyBtZWFucyB0aGF0Citzb21lIGJpdHMgd2VyZSBsb3N0IHdoZW4gY29udmVydGluZyB0ZXh0IGZyb20gdGhlIGludGVybmFsbHkgdXNlZCBVVEYtOCB0byB0aGUKK2Zvcm1hdCBvZiB0aGUgZmlsZS4gIFRoZSBmaWxlIHdpbGwgbm90IGJlIG1hcmtlZCB1bm1vZGlmaWVkLiAgSWYgeW91IGNhcmUKK2Fib3V0IHRoZSBsb3NzIG9mIGluZm9ybWF0aW9uLCBzZXQgdGhlICdmaWxlZW5jb2RpbmcnIG9wdGlvbiB0byBhbm90aGVyIHZhbHVlCit0aGF0IGNhbiBoYW5kbGUgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGJ1ZmZlciBhbmQgd3JpdGUgYWdhaW4uICBJZiB5b3UgZG9uJ3QKK2NhcmUsIHlvdSBjYW4gYWJhbmRvbiB0aGUgYnVmZmVyIG9yIHJlc2V0IHRoZSAnbW9kaWZpZWQnIG9wdGlvbi4KKworCQkJCQkJCSpFMzAyKiAgPgorICBDb3VsZCBub3QgcmVuYW1lIHN3YXAgZmlsZQorCitXaGVuIHRoZSBmaWxlIG5hbWUgY2hhbmdlcywgVmltIHRyaWVzIHRvIHJlbmFtZSB0aGUgfHN3YXAtZmlsZXwgYXMgd2VsbC4KK1RoaXMgZmFpbGVkIGFuZCB0aGUgb2xkIHN3YXAgZmlsZSBpcyBub3cgc3RpbGwgdXNlZC4gIE1vc3RseSBoYXJtbGVzcy4KKworCQkJCQkJCSpFNDMqICpFNDQqICA+CisgIERhbWFnZWQgbWF0Y2ggc3RyaW5nCisgIENvcnJ1cHRlZCByZWdleHAgcHJvZ3JhbQorCitTb21ldGhpbmcgaW5zaWRlIFZpbSB3ZW50IHdyb25nIGFuZCByZXN1bHRlZCBpbiBhIGNvcnJ1cHRlZCByZWdleHAuICBJZiB5b3UKK2tub3cgaG93IHRvIHJlcHJvZHVjZSB0aGlzIHByb2JsZW0sIHBsZWFzZSByZXBvcnQgaXQuIHxidWdzfAorCisJCQkJCQkJKkUyMDgqICpFMjA5KiAqRTIxMCogID4KKyAgRXJyb3Igd3JpdGluZyB0byAie2ZpbGVuYW1lfSIKKyAgRXJyb3IgY2xvc2luZyAie2ZpbGVuYW1lfSIKKyAgRXJyb3IgcmVhZGluZyAie2ZpbGVuYW1lfSIKKworVGhpcyBvY2N1cnMgd2hlbiBWaW0gaXMgdHJ5aW5nIHRvIHJlbmFtZSBhIGZpbGUsIGJ1dCBhIHNpbXBsZSBjaGFuZ2Ugb2YgZmlsZQorbmFtZSBkb2Vzbid0IHdvcmsuICBUaGVuIHRoZSBmaWxlIHdpbGwgYmUgY29waWVkLCBidXQgc29tZWhvdyB0aGlzIGZhaWxlZC4KK1RoZSByZXN1bHQgbWF5IGJlIHRoYXQgYm90aCB0aGUgb3JpZ2luYWwgZmlsZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgZXhpc3QKK2FuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtYXkgYmUgaW5jb21wbGV0ZS4KKworPgorICBWaW06IEVycm9yIHJlYWRpbmcgaW5wdXQsIGV4aXRpbmcuLi4KKworVGhpcyBvY2N1cnMgd2hlbiBWaW0gY2Fubm90IHJlYWQgdHlwZWQgY2hhcmFjdGVycyB3aGlsZSBpbnB1dCBpcyByZXF1aXJlZC4KK1ZpbSBnb3Qgc3R1Y2ssIHRoZSBvbmx5IHRoaW5nIGl0IGNhbiBkbyBpcyBleGl0LiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYm90aAorc3RkaW4gYW5kIHN0ZGVyciBhcmUgcmVkaXJlY3RlZCBhbmQgZXhlY3V0aW5nIGEgc2NyaXB0IHRoYXQgZG9lc24ndCBleGl0IFZpbS4KKworCQkJCQkJCSpFNDcqICA+CisgIEVycm9yIHdoaWxlIHJlYWRpbmcgZXJyb3JmaWxlCisKK1JlYWRpbmcgdGhlIGVycm9yIGZpbGUgd2FzIG5vdCBwb3NzaWJsZS4gIFRoaXMgaXMgTk9UIGNhdXNlZCBieSBhbiBlcnJvcgorbWVzc2FnZSB0aGF0IHdhcyBub3QgcmVjb2duaXplZC4KKworCQkJCQkJCSpFODAqICA+CisgIEVycm9yIHdoaWxlIHdyaXRpbmcKKworV3JpdGluZyBhIGZpbGUgd2FzIG5vdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAgVGhlIGZpbGUgaXMgcHJvYmFibHkKK2luY29tcGxldGUuCisKKwkJCQkJCQkqRTEzKiAqRTE4OSogID4KKyAgRmlsZSBleGlzdHMgKHVzZSAhIHRvIG92ZXJyaWRlKQorICAie2ZpbGVuYW1lfSIgZXhpc3RzICh1c2UgISB0byBvdmVycmlkZSkKKworWW91IGFyZSBwcm90ZWN0ZWQgZnJvbSBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgYSBmaWxlLiAgV2hlbiB5b3Ugd2FudCB0bword3JpdGUgYW55d2F5LCB1c2UgdGhlIHNhbWUgY29tbWFuZCwgYnV0IGFkZCBhICIhIiBqdXN0IGFmdGVyIHRoZSBjb21tYW5kLgorRXhhbXBsZTogPgorCTp3IC90bXAvdGVzdAorY2hhbmdlcyB0bzogPgorCTp3ISAvdG1wL3Rlc3QKKzwKKwkJCQkJCQkqRTEzOSogID4KKyAgRmlsZSBpcyBsb2FkZWQgaW4gYW5vdGhlciBidWZmZXIKKworWW91IGFyZSB0cnlpbmcgdG8gd3JpdGUgYSBmaWxlIHVuZGVyIGEgbmFtZSB3aGljaCBpcyBhbHNvIHVzZWQgaW4gYW5vdGhlcgorYnVmZmVyLiAgVGhpcyB3b3VsZCByZXN1bHQgaW4gdHdvIHZlcnNpb25zIG9mIHRoZSBzYW1lIGZpbGUuCisKKwkJCQkJCQkqRTE0MiogID4KKyAgRmlsZSBub3Qgd3JpdHRlbjogV3JpdGluZyBpcyBkaXNhYmxlZCBieSAnd3JpdGUnIG9wdGlvbgorCitUaGUgJ3dyaXRlJyBvcHRpb24gaXMgb2ZmLiAgVGhpcyBtYWtlcyBhbGwgY29tbWFuZHMgdGhhdCB0cnkgdG8gd3JpdGUgYSBmaWxlCitnZW5lcmF0ZSB0aGlzIG1lc3NhZ2UuICBUaGlzIGNvdWxkIGJlIGNhdXNlZCBieSBhIHwtbXwgY29tbWFuZGxpbmUgYXJndW1lbnQuCitZb3UgY2FuIHN3aXRjaCB0aGUgJ3dyaXRlJyBvcHRpb24gb24gd2l0aCAiOnNldCB3cml0ZSIuCisKKwkJCQkJCQkqRTI1KiAgPgorICBHVUkgY2Fubm90IGJlIHVzZWQ6IE5vdCBlbmFibGVkIGF0IGNvbXBpbGUgdGltZQorCitZb3UgYXJlIHJ1bm5pbmcgYSB2ZXJzaW9uIG9mIFZpbSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgR1VJIGNvZGUuICBUaGVyZWZvcmUKKyJndmltIiBhbmQgIjpndWkiIGRvbid0IHdvcmsuCisKKwkJCQkJCQkqRTQ5KiAgPgorICBJbnZhbGlkIHNjcm9sbCBzaXplCisKK1RoaXMgaXMgY2F1c2VkIGJ5IHNldHRpbmcgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlICdzY3JvbGwnLCAnc2Nyb2xsanVtcCcgb3IKKydzY3JvbGxvZmYnIG9wdGlvbnMuCisKKwkJCQkJCQkqRTE3KiAgPgorICAie2ZpbGVuYW1lfSIgaXMgYSBkaXJlY3RvcnkKKworWW91IHRyaWVkIHRvIHdyaXRlIGEgZmlsZSB3aXRoIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5LiAgVGhpcyBpcyBub3QgcG9zc2libGUuCitZb3UgcHJvYmFibHkgbmVlZCB0byBhcHBlbmQgYSBmaWxlIG5hbWUuCisKKwkJCQkJCQkqRTE5KiAgPgorICBNYXJrIGhhcyBpbnZhbGlkIGxpbmUgbnVtYmVyCisKK1lvdSBhcmUgdXNpbmcgYSBtYXJrIHRoYXQgaGFzIGEgbGluZSBudW1iZXIgdGhhdCBkb2Vzbid0IGV4aXN0LiAgVGhpcyBjYW4KK2hhcHBlbiB3aGVuIHlvdSBoYXZlIGEgbWFyayBpbiBhbm90aGVyIGZpbGUsIGFuZCBzb21lIG90aGVyIHByb2dyYW0gaGFzCitkZWxldGVkIGxpbmVzIGZyb20gaXQuCisKKwkJCQkJCQkqRTIxOSogKkUyMjAqICA+CisgIE1pc3Npbmcgey4KKyAgTWlzc2luZyB9LgorCitVc2luZyBhIHt9IGNvbnN0cnVjdCBpbiBhIGZpbGUgbmFtZSwgYnV0IHRoZXJlIGlzIGEgeyB3aXRob3V0IGEgbWF0Y2hpbmcgfSBvcgordGhlIG90aGVyIHdheSBhcm91bmQuICBJdCBzaG91bGQgYmUgdXNlZCBsaWtlIHRoaXM6IHtmb28sYmFyfS4gIFRoaXMgbWF0Y2hlcworImZvbyIgYW5kICJiYXIiLgorCisJCQkJCQkJKkUzMTUqICA+CisgIG1sX2dldDogaW52YWxpZCBsbnVtOgorCitUaGlzIGlzIGFuIGludGVybmFsIFZpbSBlcnJvci4gIFBsZWFzZSB0cnkgdG8gZmluZCBvdXQgaG93IGl0IGNhbiBiZQorcmVwcm9kdWNlZCwgYW5kIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgfGJ1Z3JlcG9ydC52aW18LgorCisJCQkJCQkJKkUxNzMqICA+CisgIHtudW1iZXJ9IG1vcmUgZmlsZXMgdG8gZWRpdAorCitZb3UgYXJlIHRyeWluZyB0byBleGl0LCB3aGlsZSB0aGUgbGFzdCBpdGVtIGluIHRoZSBhcmd1bWVudCBsaXN0IGhhcyBub3QgYmVlbgorZWRpdGVkLiAgVGhpcyBwcm90ZWN0cyB5b3UgZnJvbSBhY2NpZGVudGFsbHkgZXhpdGluZyB3aGVuIHlvdSBzdGlsbCBoYXZlIG1vcmUKK2ZpbGVzIHRvIHdvcmsgb24uICBTZWUgfGFyZ3VtZW50LWxpc3R8LiAgSWYgeW91IGRvIHdhbnQgdG8gZXhpdCwganVzdCBkbyBpdAorYWdhaW4gYW5kIGl0IHdpbGwgd29yay4KKworCQkJCQkJCSpFMjMqICpFMTk0KiAgPgorICBObyBhbHRlcm5hdGUgZmlsZQorICBObyBhbHRlcm5hdGUgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yICcjJworCitUaGUgYWx0ZXJuYXRlIGZpbGUgaXMgbm90IGRlZmluZWQgeWV0LiAgU2VlIHxhbHRlcm5hdGUtZmlsZXwuCisKKwkJCQkJCQkqRTMyKiAgPgorICBObyBmaWxlIG5hbWUKKworVGhlIGN1cnJlbnQgYnVmZmVyIGhhcyBubyBuYW1lLiAgVG8gd3JpdGUgaXQsIHVzZSAiOncgZm5hbWUiLiAgT3IgZ2l2ZSB0aGUKK2J1ZmZlciBhIG5hbWUgd2l0aCAiOmZpbGUgZm5hbWUiLgorCisJCQkJCQkJKkUxNDEqICA+CisgIE5vIGZpbGUgbmFtZSBmb3IgYnVmZmVyIHtudW1iZXJ9CisKK09uZSBvZiB0aGUgYnVmZmVycyB0aGF0IHdhcyBjaGFuZ2VkIGRvZXMgbm90IGhhdmUgYSBmaWxlIG5hbWUuICBUaGVyZWZvcmUgaXQKK2Nhbm5vdCBiZSB3cml0dGVuLiAgWW91IG5lZWQgdG8gZ2l2ZSB0aGUgYnVmZmVyIGEgZmlsZSBuYW1lOiA+CisJOmJ1ZmZlciB7bnVtYmVyfQorCTpmaWxlIHtmaWxlbmFtZX0KKzwKKwkJCQkJCQkqRTMzKiAgPgorICBObyBwcmV2aW91cyBzdWJzdGl0dXRlIHJlZ3VsYXIgZXhwcmVzc2lvbgorCitXaGVuIHVzaW5nIHRoZSAnficgY2hhcmFjdGVyIGluIGEgcGF0dGVybiwgaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJldmlvdXNseQordXNlZCBwYXR0ZXJuIGluIGEgIjpzdWJzdGl0dXRlIiBjb21tYW5kLiAgVGhpcyBmYWlscyB3aGVuIG5vIHN1Y2ggY29tbWFuZCBoYXMKK2JlZW4gdXNlZCB5ZXQuICBTZWUgfC9+fC4KKworCQkJCQkJCSpFMzUqICA+CisgIE5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbgorCitXaGVuIHVzaW5nIGFuIGVtcHR5IHNlYXJjaCBwYXR0ZXJuLCB0aGUgcHJldmlvdXMgc2VhcmNoIHBhdHRlcm4gaXMgdXNlZC4gIEJ1dAordGhhdCBpcyBub3QgcG9zc2libGUgaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIHNlYXJjaC4KKworCQkJCQkJCSpFMjQqICA+CisgIE5vIHN1Y2ggYWJicmV2aWF0aW9uCisKK1lvdSBoYXZlIHVzZWQgYW4gIjp1bmFiYnJldmlhdGUiIGNvbW1hbmQgd2l0aCBhbiBhcmd1bWVudCB3aGljaCBpcyBub3QgYW4KK2V4aXN0aW5nIGFiYnJldmlhdGlvbi4gIEFsbCB2YXJpYXRpb25zIG9mIHRoaXMgY29tbWFuZCBnaXZlIHRoZSBzYW1lIG1lc3NhZ2U6CisiOmN1bmFiYnJldiIsICI6aXVuYWJicmV2IiwgZXRjLiAgQ2hlY2sgZm9yIHRyYWlsaW5nIHdoaXRlIHNwYWNlLgorCis+CisgIC9kZXYvZHNwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK09ubHkgZ2l2ZW4gZm9yIEdUSyBHVUkgd2l0aCBHbm9tZSBzdXBwb3J0LiAgR25vbWUgdHJpZXMgdG8gdXNlIHRoZSBhdWRpbworZGV2aWNlIGFuZCBpdCBpc24ndCBwcmVzZW50LiAgWW91IGNhbiBpZ25vcmUgdGhpcyBlcnJvci4KKworCQkJCQkJCSpFMzEqICA+CisgIE5vIHN1Y2ggbWFwcGluZworCitZb3UgaGF2ZSB1c2VkIGFuICI6dW5tYXAiIGNvbW1hbmQgd2l0aCBhbiBhcmd1bWVudCB3aGljaCBpcyBub3QgYW4gZXhpc3RpbmcKK21hcHBpbmcuICBBbGwgdmFyaWF0aW9ucyBvZiB0aGlzIGNvbW1hbmQgZ2l2ZSB0aGUgc2FtZSBtZXNzYWdlOiAiOmN1bm1hcCIsCisiOnVubWFwISIsIGV0Yy4gIENoZWNrIGZvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKworCQkJCQkJCSpFMzcqICpFODkqICA+CisgIE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkKKyAgTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciB7Tn0gKHVzZSAhIHRvIG92ZXJyaWRlKQorCitZb3UgYXJlIHRyeWluZyB0byB8YWJhbmRvbnwgYSBmaWxlIHRoYXQgaGFzIGNoYW5nZXMuICBWaW0gcHJvdGVjdHMgeW91IGZyb20KK2xvc2luZyB5b3VyIHdvcmsuICBZb3UgY2FuIGVpdGhlciB3cml0ZSB0aGUgY2hhbmdlZCBmaWxlIHdpdGggIjp3Iiwgb3IsIGlmIHlvdQorYXJlIHN1cmUsIHxhYmFuZG9ufCBpdCBhbnl3YXksIGFuZCBsb3NlIGFsbCB0aGUgY2hhbmdlcy4gIFRoaXMgY2FuIGJlIGRvbmUgYnkKK2FkZGluZyBhICchJyBjaGFyYWN0ZXIganVzdCBhZnRlciB0aGUgY29tbWFuZCB5b3UgdXNlZC4gIEV4YW1wbGU6ID4KKwk6ZSBvdGhlcl9maWxlCitjaGFuZ2VzIHRvOiA+CisJOmUhIG90aGVyX2ZpbGUKKzwKKwkJCQkJCQkqRTE2MiogID4KKyAgTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgZm9yIGJ1ZmZlciAie25hbWV9IgorCitUaGlzIGFwcGVhcnMgd2hlbiB5b3UgdHJ5IHRvIGV4aXQgVmltIHdoaWxlIHNvbWUgYnVmZmVycyBhcmUgY2hhbmdlZC4gIFlvdQord2lsbCBlaXRoZXIgaGF2ZSB0byB3cml0ZSB0aGUgY2hhbmdlZCBidWZmZXIgKHdpdGggfDp3fCksIG9yIHVzZSBhIGNvbW1hbmQgdG8KK2FiYW5kb24gdGhlIGJ1ZmZlciBmb3JjZWZ1bGx5LCBlLmcuLCB3aXRoICI6cWEhIi4gIENhcmVmdWwsIG1ha2Ugc3VyZSB5b3UKK2Rvbid0IHRocm93IGF3YXkgY2hhbmdlcyB5b3UgcmVhbGx5IHdhbnQgdG8ga2VlcC4gIFlvdSBtaWdodCBoYXZlIGZvcmdvdHRlbgorYWJvdXQgYSBidWZmZXIsIGVzcGVjaWFsbHkgd2hlbiAnaGlkZGVuJyBpcyBzZXQuCisKKwkJCQkJCQkqRTM4KiAgPgorICBOdWxsIGFyZ3VtZW50CisKK1NvbWV0aGluZyBpbnNpZGUgVmltIHdlbnQgd3JvbmcgYW5kIHJlc3VsdGVkIGluIGEgTlVMTCBwb2ludGVyLiAgSWYgeW91IGtub3cKK2hvdyB0byByZXByb2R1Y2UgdGhpcyBwcm9ibGVtLCBwbGVhc2UgcmVwb3J0IGl0LiB8YnVnc3wKKworCQkJCQkJCSpFMTcyKiAgPgorICBPbmx5IG9uZSBmaWxlIG5hbWUgYWxsb3dlZAorCitUaGUgIjplZGl0IiBjb21tYW5kIG9ubHkgYWNjZXB0cyBvbmUgZmlsZSBuYW1lLiAgV2hlbiB5b3Ugd2FudCB0byBzcGVjaWZ5CitzZXZlcmFsIGZpbGVzIGZvciBlZGl0aW5nIHVzZSAiOm5leHQiIHw6bmV4dHwuCisKKwkJCQkJCSpFNDEqICpFODIqICpFODMqICpFMzQyKiAgPgorICBPdXQgb2YgbWVtb3J5IQorICBPdXQgb2YgbWVtb3J5ISAgKGFsbG9jYXRpbmcge251bWJlcn0gYnl0ZXMpCisgIENhbm5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLCBleGl0aW5nLi4uCisgIENhbm5vdCBhbGxvY2F0ZSBidWZmZXIsIHVzaW5nIG90aGVyIG9uZS4uLgorCitPaCwgb2guICBZb3UgbXVzdCBoYXZlIGJlZW4gZG9pbmcgc29tZXRoaW5nIGNvbXBsaWNhdGVkLCBvciBzb21lIG90aGVyIHByb2dyYW0KK2lzIGNvbnN1bWluZyB5b3VyIG1lbW9yeS4gIEJlIGNhcmVmdWwhICBWaW0gaXMgbm90IGNvbXBsZXRlbHkgcHJlcGFyZWQgZm9yIGFuCitvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbi4gIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IGFueSBjaGFuZ2VzIGFyZSBzYXZlZC4gIFRoZW4KK3RyeSB0byBzb2x2ZSB0aGUgbWVtb3J5IHNob3J0YWdlLiAgVG8gc3RheSBvbiB0aGUgc2FmZSBzaWRlLCBleGl0IFZpbSBhbmQKK3N0YXJ0IGFnYWluLiAgQWxzbyBzZWUgfG1zZG9zLWxpbWl0YXRpb25zfC4KKworCQkJCQkJCSpFMzM5KiAgPgorICBQYXR0ZXJuIHRvbyBsb25nCisKK1RoaXMgb25seSBoYXBwZW5zIG9uIHN5c3RlbXMgd2l0aCAxNiBiaXQgaW50czogVGhlIGNvbXBpbGVkIHJlZ2V4cCBwYXR0ZXJuIGlzCitsb25nZXIgdGhhbiBhYm91dCA2NTAwMCBjaGFyYWN0ZXJzLiAgVHJ5IHVzaW5nIGEgc2hvcnRlciBwYXR0ZXJuLgorCisJCQkJCQkJKkU0NSogID4KKyAgJ3JlYWRvbmx5JyBvcHRpb24gaXMgc2V0ICh1c2UgISB0byBvdmVycmlkZSkKKworWW91IGFyZSB0cnlpbmcgdG8gd3JpdGUgYSBmaWxlIHRoYXQgd2FzIG1hcmtlZCBhcyByZWFkLW9ubHkuICBUbyB3cml0ZSB0aGUKK2ZpbGUgYW55d2F5LCBlaXRoZXIgcmVzZXQgdGhlICdyZWFkb25seScgb3B0aW9uLCBvciBhZGQgYSAnIScgY2hhcmFjdGVyIGp1c3QKK2FmdGVyIHRoZSBjb21tYW5kIHlvdSB1c2VkLiAgRXhhbXBsZTogPgorCTp3CitjaGFuZ2VzIHRvOiA+CisJOnchCis8CisJCQkJCQkJKkUyOTQqICpFMjk1KiAqRTMwMSogID4KKyAgUmVhZCBlcnJvciBpbiBzd2FwIGZpbGUKKyAgU2VlayBlcnJvciBpbiBzd2FwIGZpbGUgcmVhZAorICBPb3BzLCBsb3N0IHRoZSBzd2FwIGZpbGUhISEKKworVmltIHRyaWVkIHRvIHJlYWQgdGV4dCBmcm9tIHRoZSB8c3dhcC1maWxlfCwgYnV0IHNvbWV0aGluZyB3ZW50IHdyb25nLiAgVGhlCit0ZXh0IGluIHRoZSByZWxhdGVkIGJ1ZmZlciBtYXkgbm93IGJlIGNvcnJ1cHRlZCEgIENoZWNrIGNhcmVmdWxseSBiZWZvcmUgeW91Cit3cml0ZSBhIGJ1ZmZlci4gIFlvdSBtYXkgd2FudCB0byB3cml0ZSBpdCBpbiBhbm90aGVyIGZpbGUgYW5kIGNoZWNrIGZvcgorZGlmZmVyZW5jZXMuCisKKwkJCQkJCQkqRTE5MiogID4KKyAgUmVjdXJzaXZlIHVzZSBvZiA6bm9ybWFsIHRvbyBkZWVwCisKK1lvdSBhcmUgdXNpbmcgYSAiOm5vcm1hbCIgY29tbWFuZCwgd2hvc2UgYXJndW1lbnQgYWdhaW4gdXNlcyBhICI6bm9ybWFsIgorY29tbWFuZCBpbiBhIHJlY3Vyc2l2ZSB3YXkuICBUaGlzIGlzIHJlc3RyaWN0ZWQgdG8gJ21heG1hcGRlcHRoJyBsZXZlbHMuICBUaGlzCitleGFtcGxlIGlsbHVzdHJhdGVzIGhvdyB0byBnZXQgdGhpcyBtZXNzYWdlOiA+CisJOm1hcCBncSA6bm9ybWFsIGdxPENSPgorSWYgeW91IHR5cGUgImdxIiwgaXQgd2lsbCBleGVjdXRlIHRoaXMgbWFwcGluZywgd2hpY2ggd2lsbCBjYWxsICJncSIgYWdhaW4uCisKKwkJCQkJCQkqRTIyKiAgPgorICBTY3JpcHRzIG5lc3RlZCB0b28gZGVlcAorCitTY3JpcHRzIGNhbiBiZSByZWFkIHdpdGggdGhlICItcyIgY29tbWFuZC1saW5lIGFyZ3VtZW50IGFuZCB3aXRoIHRoZSAiOnNvdXJjZSIKK2NvbW1hbmQuICBUaGUgc2NyaXB0IGNhbiB0aGVuIGFnYWluIHJlYWQgYW5vdGhlciBzY3JpcHQuICBUaGlzIGNhbiBjb250aW51ZQorZm9yIGFib3V0IDE0IGxldmVscy4gIFdoZW4gbW9yZSBuZXN0aW5nIGlzIGRvbmUsIFZpbSBhc3N1bWVzIHRoYXQgdGhlcmUgaXMgYQorcmVjdXJzaXZlIGxvb3Agc29tZXdoZXJlIGFuZCBzdG9wcyB3aXRoIHRoaXMgZXJyb3IgbWVzc2FnZS4KKworCQkJCQkJCSpFMzE5KiAgPgorICBTb3JyeSwgdGhlIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24KKworWW91IGhhdmUgdXNlZCBhIGNvbW1hbmQgdGhhdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgdmVyc2lvbiBvZiBWaW0geW91IGFyZQordXNpbmcuICBXaGVuIGNvbXBpbGluZyBWaW0sIG1hbnkgZGlmZmVyZW50IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIG9yCitkaXNhYmxlZC4gIFRoaXMgZGVwZW5kcyBvbiBob3cgYmlnIFZpbSBoYXMgY2hvc2VuIHRvIGJlIGFuZCB0aGUgb3BlcmF0aW5nCitzeXN0ZW0uICBTZWUgfCtmZWF0dXJlLWxpc3R8IGZvciB3aGVuIHdoaWNoIGZlYXR1cmUgaXMgYXZhaWxhYmxlLiAgVGhlCit8OnZlcnNpb258IGNvbW1hbmQgc2hvd3Mgd2hpY2ggZmVhdHVyZSBWaW0gd2FzIGNvbXBpbGVkIHdpdGguCisKKwkJCQkJCQkqRTMwMCogID4KKyAgU3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIChzeW1saW5rIGF0dGFjaz8pCisKK1RoaXMgbWVzc2FnZSBhcHBlYXJzIHdoZW4gVmltIGlzIHRyeWluZyB0byBvcGVuIGEgc3dhcCBmaWxlIGFuZCBmaW5kcyBpdAorYWxyZWFkeSBleGlzdHMgb3IgZmluZHMgYSBzeW1ib2xpYyBsaW5rIGluIGl0cyBwbGFjZS4gIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwKK2JlY2F1c2UgVmltIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QuICBFaXRoZXIgc29tZW9uZSBlbHNlCitvcGVuZWQgdGhlIHNhbWUgZmlsZSBhdCBleGFjdGx5IHRoZSBzYW1lIG1vbWVudCAodmVyeSB1bmxpa2VseSkgb3Igc29tZW9uZSBpcworYXR0ZW1wdGluZyBhIHN5bWxpbmsgYXR0YWNrIChjb3VsZCBoYXBwZW4gd2hlbiBlZGl0aW5nIGEgZmlsZSBpbiAvdG1wIG9yIHdoZW4KKydkaXJlY3RvcnknIHN0YXJ0cyB3aXRoICIvdG1wIiwgd2hpY2ggaXMgYSBiYWQgY2hvaWNlKS4KKworCQkJCQkJCSpFNDMyKiAgPgorICBUYWdzIGZpbGUgbm90IHNvcnRlZDoge2ZpbGUgbmFtZX0KKworVmltIChhbmQgVmkpIGV4cGVjdCB0YWdzIGZpbGVzIHRvIGJlIHNvcnRlZCBpbiBBU0NJSSBvcmRlci4gIEJpbmFyeSBzZWFyY2hpbmcKK2NhbiB0aGVuIGJlIHVzZWQsIHdoaWNoIGlzIGEgbG90IGZhc3RlciB0aGFuIGEgbGluZWFyIHNlYXJjaC4gIElmIHlvdXIgdGFncworZmlsZXMgYXJlIG5vdCBwcm9wZXJseSBzb3J0ZWQsIHJlc2V0IHRoZSB8J3RhZ2JzZWFyY2gnfCBvcHRpb24uCitUaGlzIG1lc3NhZ2UgaXMgb25seSBnaXZlbiB3aGVuIFZpbSBkZXRlY3RzIGEgcHJvYmxlbSB3aGVuIHNlYXJjaGluZyBmb3IgYQordGFnLiAgU29tZXRpbWVzIHRoaXMgbWVzc2FnZSBpcyBub3QgZ2l2ZW4sIGV2ZW4gdGhvdWdodCB0aGUgdGFncyBmaWxlIGlzIG5vdAorcHJvcGVybHkgc29ydGVkLgorCisJCQkJCQkJKkU0NjAqICA+CisgIFRoZSByZXNvdXJjZSBmb3JrIHdvdWxkIGJlIGxvc3QgKGFkZCAhIHRvIG92ZXJyaWRlKQorCitPbiB0aGUgTWFjaW50b3NoIChjbGFzc2ljKSwgd2hlbiB3cml0aW5nIGEgZmlsZSwgVmltIGF0dGVtcHRzIHRvIHByZXNlcnZlIGFsbAoraW5mbyBhYm91dCBhIGZpbGUsIGluY2x1ZGluZyBpdHMgcmVzb3VyY2UgZm9yay4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlIHlvdQorZ2V0IHRoaXMgZXJyb3IgbWVzc2FnZS4gIEFwcGVuZCAiISIgdG8gdGhlIGNvbW1hbmQgbmFtZSB0byB3cml0ZSBhbnl3YXkgKGFuZAorbG9zZSB0aGUgaW5mbykuCisKKwkJCQkJCQkqRTQyNCogID4KKyAgVG9vIG1hbnkgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBhdHRyaWJ1dGVzIGluIHVzZQorCitWaW0gY2FuIG9ubHkgaGFuZGxlIGFib3V0IDIyMyBkaWZmZXJlbnQga2luZHMgb2YgaGlnaGxpZ2h0aW5nLiAgSWYgeW91IHJ1bgoraW50byB0aGlzIGxpbWl0LCB5b3UgaGF2ZSB1c2VkIHRvbyBtYW55IHw6aGlnaGxpZ2h0fCBjb21tYW5kcyB3aXRoIGRpZmZlcmVudAorYXJndW1lbnRzLiAgQSAiOmhpZ2hsaWdodCBsaW5rIiBpcyBub3QgY291bnRlZC4KKworCQkJCQkJCSpFNzcqICA+CisgIFRvbyBtYW55IGZpbGUgbmFtZXMKKworV2hlbiBleHBhbmRpbmcgZmlsZSBuYW1lcywgbW9yZSB0aGFuIG9uZSBtYXRjaCB3YXMgZm91bmQuICBPbmx5IG9uZSBtYXRjaCBpcworYWxsb3dlZCBmb3IgdGhlIGNvbW1hbmQgdGhhdCB3YXMgdXNlZC4KKworCQkJCQkJCSpFMzAzKiAgPgorICBVbmFibGUgdG8gb3BlbiBzd2FwIGZpbGUgZm9yICJ7ZmlsZW5hbWV9IiwgcmVjb3ZlcnkgaW1wb3NzaWJsZQorCitWaW0gd2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBhIHN3YXAgZmlsZS4gIFlvdSBjYW4gc3RpbGwgZWRpdCB0aGUgZmlsZSwgYnV0IGlmCitWaW0gdW5leHBlY3RlZCBleGl0cyB0aGUgY2hhbmdlcyB3aWxsIGJlIGxvc3QuICBBbmQgVmltIG1heSBjb25zdW1lIGEgbG90IG9mCittZW1vcnkgd2hlbiBlZGl0aW5nIGEgYmlnIGZpbGUuICBZb3UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoZSAnZGlyZWN0b3J5JyBvcHRpb24KK3RvIGF2b2lkIHRoaXMgZXJyb3IuICBTZWUgfHN3YXAtZmlsZXwuCisKKwkJCQkJCQkqRTE0MCogID4KKyAgVXNlICEgdG8gd3JpdGUgcGFydGlhbCBidWZmZXIKKworV2hlbiB1c2luZyBhIHJhbmdlIHRvIHdyaXRlIHBhcnQgb2YgYSBidWZmZXIsIGl0IGlzIHVudXN1YWwgdG8gb3ZlcndyaXRlIHRoZQorb3JpZ2luYWwgZmlsZS4gIEl0IGlzIHByb2JhYmx5IGEgbWlzdGFrZSAoZS5nLiwgd2hlbiBWaXN1YWwgbW9kZSB3YXMgYWN0aXZlCit3aGVuIHVzaW5nICI6dyIpLCB0aGVyZWZvcmUgVmltIHJlcXVpcmVzIHVzaW5nIGEgISAgYWZ0ZXIgdGhlIGNvbW1hbmQsIGUuZy46CisiOjMsMTB3ISIuCis+CisKKyAgV2FybmluZzogQ2Fubm90IGNvbnZlcnQgc3RyaW5nICI8S2V5PkVzY2FwZSxfS2V5X0NhbmNlbCIgdG8gdHlwZQorICBWaXJ0dWFsQmluZGluZworCitNZXNzYWdlcyBsaWtlIHRoaXMgYXBwZWFyIHdoZW4gc3RhcnRpbmcgdXAuICBUaGlzIGlzIG5vdCBhIFZpbSBwcm9ibGVtLCB5b3VyCitYMTEgY29uZmlndXJhdGlvbiBpcyB3cm9uZy4gIFlvdSBjYW4gZmluZCBhIGhpbnQgb24gaG93IHRvIHNvbHZlIHRoaXMgaGVyZToKK2h0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3NvbGFyaXNvbmludGVsL21lc3NhZ2UvMTIxNzkuCisKKwkJCQkJCQkqVzEwKiAgPgorICBXYXJuaW5nOiBDaGFuZ2luZyBhIHJlYWRvbmx5IGZpbGUKKworVGhlIGZpbGUgaXMgcmVhZC1vbmx5IGFuZCB5b3UgYXJlIG1ha2luZyBhIGNoYW5nZSB0byBpdCBhbnl3YXkuICBZb3UgY2FuIHVzZQordGhlIHxGaWxlQ2hhbmdlZFJPfCBhdXRvY29tbWFuZCBldmVudCB0byBhdm9pZCB0aGlzIG1lc3NhZ2UgKHRoZSBhdXRvY29tbWFuZAorbXVzdCByZXNldCB0aGUgJ3JlYWRvbmx5JyBvcHRpb24pLiAgU2VlICdtb2RpZmlhYmxlJyB0byBjb21wbGV0ZWx5IGRpc2FsbG93CittYWtpbmcgY2hhbmdlcyB0byBhIGZpbGUuCisKKwkJCQkJCQkqVzEzKiAgPgorICBXYXJuaW5nOiBGaWxlICJ7ZmlsZW5hbWV9IiBoYXMgYmVlbiBjcmVhdGVkIGFmdGVyIGVkaXRpbmcgc3RhcnRlZAorCitZb3UgYXJlIGVkaXRpbmcgYSBmaWxlIGluIFZpbSB3aGVuIGl0IGRpZG4ndCBleGlzdCwgYnV0IGl0IGRvZXMgZXhpc3Qgbm93LgorWW91IHdpbGwgaGF2ZSB0byBkZWNpZGUgaWYgeW91IHdhbnQgdG8ga2VlcCB0aGUgdmVyc2lvbiBpbiBWaW0gb3IgdGhlIG5ld2x5CitjcmVhdGVkIGZpbGUuICBUaGlzIG1lc3NhZ2UgaXMgbm90IGdpdmVuIHdoZW4gJ2J1ZnR5cGUnIGlzIG5vdCBlbXB0eS4KKworCQkJCQkJCSpXMTEqICA+CisgIFdhcm5pbmc6IEZpbGUgIntmaWxlbmFtZX0iIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZAorCitUaGUgZmlsZSB3aGljaCB5b3UgaGF2ZSBzdGFydGVkIGVkaXRpbmcgaGFzIGdvdCBhbm90aGVyIHRpbWVzdGFtcCBhbmQgdGhlCitjb250ZW50cyBjaGFuZ2VkIChtb3JlIHByZWNpc2VseTogV2hlbiByZWFkaW5nIHRoZSBmaWxlIGFnYWluIHdpdGggdGhlIGN1cnJlbnQKK29wdGlvbiBzZXR0aW5ncyBhbmQgYXV0b2NvbW1hbmRzIHlvdSB3b3VsZCBlbmQgdXAgd2l0aCBkaWZmZXJlbnQgdGV4dCkuICBUaGlzCitwcm9iYWJseSBtZWFucyB0aGF0IHNvbWUgb3RoZXIgcHJvZ3JhbSBjaGFuZ2VkIHRoZSBmaWxlLiAgWW91IHdpbGwgaGF2ZSB0bworZmluZCBvdXQgd2hhdCBoYXBwZW5lZCwgYW5kIGRlY2lkZSB3aGljaCB2ZXJzaW9uIG9mIHRoZSBmaWxlIHlvdSB3YW50IHRvIGtlZXAuCitTZXQgdGhlICdhdXRvcmVhZCcgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGRvIHRoaXMgYXV0b21hdGljYWxseS4KK1RoaXMgbWVzc2FnZSBpcyBub3QgZ2l2ZW4gd2hlbiAnYnVmdHlwZScgaXMgbm90IGVtcHR5LgorCitUaGVyZSBpcyBvbmUgc2l0dWF0aW9uIHdoZXJlIHlvdSBnZXQgdGhpcyBtZXNzYWdlIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIG5vdGhpbmcKK3dyb25nOiBJZiB5b3Ugc2F2ZSBhIGZpbGUgaW4gV2luZG93cyBvbiB0aGUgZGF5IHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZQorc3RhcnRzLiAgSXQgY2FuIGJlIGZpeGVkIGluIG9uZSBvZiB0aGVzZSB3YXlzOgorLSBBZGQgdGhpcyBsaW5lIGluIHlvdXIgYXV0b2V4ZWMuYmF0OiA+CisJICAgU0VUIFRaPS0xCis8IEFkanVzdCB0aGUgIi0xIiBmb3IgeW91ciB0aW1lIHpvbmUuCistIERpc2FibGUgImF1dG9tYXRpY2FsbHkgYWRqdXN0IGNsb2NrIGZvciBkYXlsaWdodCBzYXZpbmcgY2hhbmdlcyIuCistIEp1c3Qgd3JpdGUgdGhlIGZpbGUgYWdhaW4gdGhlIG5leHQgZGF5LiAgT3Igc2V0IHlvdXIgY2xvY2sgdG8gdGhlIG5leHQgZGF5LAorICB3cml0ZSB0aGUgZmlsZSB0d2ljZSBhbmQgc2V0IHRoZSBjbG9jayBiYWNrLgorCisJCQkJCQkJKlcxMiogID4KKyAgV2FybmluZzogRmlsZSAie2ZpbGVuYW1lfSIgaGFzIGNoYW5nZWQgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQgaW4gVmltIGFzIHdlbGwKKworTGlrZSB0aGUgYWJvdmUsIGFuZCB0aGUgYnVmZmVyIGZvciB0aGUgZmlsZSB3YXMgY2hhbmdlZCBpbiB0aGlzIFZpbSBhcyB3ZWxsLgorWW91IHdpbGwgaGF2ZSB0byBkZWNpZGUgaWYgeW91IHdhbnQgdG8ga2VlcCB0aGUgdmVyc2lvbiBpbiB0aGlzIFZpbSBvciB0aGUgb25lCitvbiBkaXNrLiAgVGhpcyBtZXNzYWdlIGlzIG5vdCBnaXZlbiB3aGVuICdidWZ0eXBlJyBpcyBub3QgZW1wdHkuCisKKwkJCQkJCQkqVzE2KiAgPgorICBXYXJuaW5nOiBNb2RlIG9mIGZpbGUgIntmaWxlbmFtZX0iIGhhcyBjaGFuZ2VkIHNpbmNlIGVkaXRpbmcgc3RhcnRlZAorCitXaGVuIHRoZSB0aW1lc3RhbXAgZm9yIGEgYnVmZmVyIHdhcyBjaGFuZ2VkIGFuZCB0aGUgY29udGVudHMgYXJlIHN0aWxsIHRoZQorc2FtZSBidXQgdGhlIG1vZGUgKHBlcm1pc3Npb25zKSBoYXZlIGNoYW5nZWQuICBUaGlzIHVzdWFsbHkgb2NjdXJzIHdoZW4KK2NoZWNraW5nIG91dCBhIGZpbGUgZnJvbSBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0sIHdoaWNoIGNhdXNlcyB0aGUgcmVhZC1vbmx5CitiaXQgdG8gYmUgcmVzZXQuICBJdCBzaG91bGQgYmUgc2FmZSB0byByZWxvYWQgdGhlIGZpbGUuICBTZXQgJ2F1dG9yZWFkJyB0bworYXV0b21hdGljYWxseSByZWxvYWQgdGhlIGZpbGUuCisKKwkJCQkJCQkqRTIxMSogID4KKyAgV2FybmluZzogRmlsZSAie2ZpbGVuYW1lfSIgbm8gbG9uZ2VyIGF2YWlsYWJsZQorCitUaGUgZmlsZSB3aGljaCB5b3UgaGF2ZSBzdGFydGVkIGVkaXRpbmcgaGFzIGRpc2FwcGVhcmVkLCBvciBpcyBubyBsb25nZXIKK2FjY2Vzc2libGUuICBNYWtlIHN1cmUgeW91IHdyaXRlIHRoZSBidWZmZXIgc29tZXdoZXJlIHRvIGF2b2lkIGxvc2luZworY2hhbmdlcy4gIFRoaXMgbWVzc2FnZSBpcyBub3QgZ2l2ZW4gd2hlbiAnYnVmdHlwZScgaXMgbm90IGVtcHR5LgorCisJCQkJCQkJKlcxNCogID4KKyAgV2FybmluZzogTGlzdCBvZiBmaWxlIG5hbWVzIG92ZXJmbG93CisKK1lvdSBtdXN0IGJlIHVzaW5nIGFuIGF3ZnVsIGxvdCBvZiBidWZmZXJzLiAgSXQncyBub3cgcG9zc2libGUgdGhhdCB0d28gYnVmZmVycworaGF2ZSB0aGUgc2FtZSBudW1iZXIsIHdoaWNoIGNhdXNlcyB2YXJpb3VzIHByb2JsZW1zLiAgWW91IG1pZ2h0IHdhbnQgdG8gZXhpdAorVmltIGFuZCByZXN0YXJ0IGl0LgorCisJCQkJCQkJKkUyOTYqICpFMjk3KiAgPgorICBTZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZQorICBXcml0ZSBlcnJvciBpbiBzd2FwIGZpbGUKKworVGhpcyBtb3N0bHkgaGFwcGVucyB3aGVuIHRoZSBkaXNrIGlzIGZ1bGwuICBWaW0gY291bGQgbm90IHdyaXRlIHRleHQgaW50byB0aGUKK3xzd2FwLWZpbGV8LiAgSXQncyBub3QgZGlyZWN0bHkgaGFybWZ1bCwgYnV0IHdoZW4gVmltIHVuZXhwZWN0ZWRseSBleGl0cyBzb21lCit0ZXh0IG1heSBiZSBsb3N0IHdpdGhvdXQgcmVjb3ZlcnkgYmVpbmcgcG9zc2libGUuICBWaW0gbWlnaHQgcnVuIG91dCBvZiBtZW1vcnkKK3doZW4gdGhpcyBwcm9ibGVtIHBlcnNpc3RzLgorCisJCQkJCQkqY29ubmVjdGlvbi1yZWZ1c2VkKiAgPgorICBYbGliOiBjb25uZWN0aW9uIHRvICI8bWFjaGluZS1uYW1lOjAuMCIgcmVmdXNlZCBieSBzZXJ2ZXIKKworVGhpcyBoYXBwZW5zIHdoZW4gVmltIHRyaWVzIHRvIGNvbm5lY3QgdG8gdGhlIFggc2VydmVyLCBidXQgdGhlIFggc2VydmVyIGRvZXMKK25vdCBhbGxvdyBhIGNvbm5lY3Rpb24uICBUaGUgY29ubmVjdGlvbiB0byB0aGUgWCBzZXJ2ZXIgaXMgbmVlZGVkIHRvIGJlIGFibGUKK3RvIHJlc3RvcmUgdGhlIHRpdGxlIGFuZCBmb3IgdGhlIHh0ZXJtIGNsaXBib2FyZCBzdXBwb3J0LiAgVW5mb3J0dW5hdGVseSB0aGlzCitlcnJvciBtZXNzYWdlIGNhbm5vdCBiZSBhdm9pZGVkLCBleGNlcHQgYnkgZGlzYWJsaW5nIHRoZSB8K3h0ZXJtX2NsaXBib2FyZHwKK2FuZCB8K1gxMXwgZmVhdHVyZXMuCisKKwkJCQkJCQkqRTEwKiAgPgorICBcXCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgLywgPyBvciAmCisKK0EgY29tbWFuZCBsaW5lIHN0YXJ0ZWQgd2l0aCBhIGJhY2tzbGFzaCBvciB0aGUgcmFuZ2Ugb2YgYSBjb21tYW5kIGNvbnRhaW5lZCBhCitiYWNrc2xhc2ggaW4gYSB3cm9uZyBwbGFjZS4gIFRoaXMgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGNvbW1hbmQtbGluZSBjb250aW51YXRpb24KK2JlaW5nIGRpc2FibGVkLiAgUmVtb3ZlIHRoZSAnQycgZmxhZyBmcm9tIHRoZSAnY3BvcHRpb25zJyBvcHRpb24gdG8gZW5hYmxlIGl0LgorCisJCQkJCQkJKkU0NzEqICA+CisgIEFyZ3VtZW50IHJlcXVpcmVkCisKK1RoaXMgaGFwcGVucyB3aGVuIGFuIEV4IGNvbW1hbmQgd2l0aCBtYW5kYXRvcnkgYXJndW1lbnQocykgd2FzIGV4ZWN1dGVkLCBidXQKK25vIGFyZ3VtZW50IGhhcyBiZWVuIHNwZWNpZmllZC4KKworCQkJCQkJCSpFNDc0KiAqRTQ3NSogID4KKyAgSW52YWxpZCBhcmd1bWVudAorCitBbiBFeCBjb21tYW5kIGhhcyBiZWVuIGV4ZWN1dGVkLCBidXQgYW4gaW52YWxpZCBhcmd1bWVudCBoYXMgYmVlbiBzcGVjaWZpZWQuCisKKwkJCQkJCQkqRTQ4OCogID4KKyAgVHJhaWxpbmcgY2hhcmFjdGVycworCitBbiBhcmd1bWVudCBoYXMgYmVlbiBhZGRlZCB0byBhbiBFeCBjb21tYW5kIHRoYXQgZG9lcyBub3QgcGVybWl0IG9uZS4KKworCQkJCQkJCSpFNDc3KiAqRTQ3OCogID4KKyAgTm8gISBhbGxvd2VkCisgIERvbid0IHBhbmljIQorCitZb3UgaGF2ZSBhZGRlZCBhICIhIiBhZnRlciBhbiBFeCBjb21tYW5kIHRoYXQgZG9lc24ndCBwZXJtaXQgb25lLgorCisJCQkJCQkJKkU0ODEqICA+CisgIE5vIHJhbmdlIGFsbG93ZWQKKworQSByYW5nZSB3YXMgc3BlY2lmaWVkIGZvciBhbiBFeCBjb21tYW5kIHRoYXQgZG9lc24ndCBwZXJtaXQgb25lLiAgU2VlCit8Y21kbGluZS1yYW5nZXN8LgorCisJCQkJCQkJKkU0ODIqICpFNDgzKiAgPgorICBDYW4ndCBjcmVhdGUgZmlsZSB7ZmlsZW5hbWV9CisgIENhbid0IGdldCB0ZW1wIGZpbGUgbmFtZQorCitWaW0gY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLgorCisJCQkJCQkJKkU0ODQqICpFNDg1KiAgPgorICBDYW4ndCBvcGVuIGZpbGUgJXMiCisgIENhbid0IHJlYWQgZmlsZSAlcyIKKworVmltIGNhbm5vdCByZWFkIGEgdGVtcG9yYXJ5IGZpbGUuCisKKwkJCQkJCQkqRTQ2NCogID4KKyAgQW1iaWd1b3VzIHVzZSBvZiB1c2VyLWRlZmluZWQgY29tbWFuZAorCitUaGVyZSBhcmUgdHdvIHVzZXItZGVmaW5lZCBjb21tYW5kcyB3aXRoIGEgY29tbW9uIG5hbWUgcHJlZml4LCBhbmQgeW91IHVzZWQKK0NvbW1hbmQtbGluZSBjb21wbGV0aW9uIHRvIGV4ZWN1dGUgb25lIG9mIHRoZW0uIHx1c2VyLWNtZC1hbWJpZ3VvdXN8CitFeGFtcGxlOiA+CisJOmNvbW1hbmQgTXlDb21tYW5kMSBlY2hvICJvbmUiCisJOmNvbW1hbmQgTXlDb21tYW5kMiBlY2hvICJ0d28iCisJOk15Q29tbWFuZAorPAorCQkJCQkJCSpFNDkyKiAgPgorICBOb3QgYW4gZWRpdG9yIGNvbW1hbmQKKworWW91IHRyaWVkIHRvIGV4ZWN1dGUgYSBjb21tYW5kIHRoYXQgaXMgbmVpdGhlciBhbiBFeCBjb21tYW5kIG5vcgorYSB1c2VyLWRlZmluZWQgY29tbWFuZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBNZXNzYWdlcwkJCQkJCSptZXNzYWdlcyoKKworVGhpcyBpcyBhbiAoaW5jb21wbGV0ZSkgb3ZlcnZpZXcgb2YgdmFyaW91cyBtZXNzYWdlcyB0aGF0IFZpbSBnaXZlczoKKworCQkqaGl0LWVudGVyKiAqcHJlc3MtZW50ZXIqICpoaXQtcmV0dXJuKiAqcHJlc3MtcmV0dXJuKiAgPgorCisgIEhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUKKworVGhpcyBtZXNzYWdlIGlzIGdpdmVuIHdoZW4gdGhlcmUgaXMgc29tZXRoaW5nIG9uIHRoZSBzY3JlZW4gZm9yIHlvdSB0byByZWFkLAorYW5kIHRoZSBzY3JlZW4gaXMgYWJvdXQgdG8gYmUgcmVkcmF3bjoKKy0gQWZ0ZXIgZXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgKGUuZy4sICI6IWxzIiBhbmQgIj0iKS4KKy0gU29tZXRoaW5nIGlzIGRpc3BsYXllZCBvbiB0aGUgc3RhdHVzIGxpbmUgdGhhdCBpcyBsb25nZXIgdGhhbiB0aGUgd2lkdGggb2YKKyAgdGhlIHdpbmRvdywgb3IgcnVucyBpbnRvIHRoZSAnc2hvd2NtZCcgb3IgJ3J1bGVyJyBvdXRwdXQuCisKKy0+IEhpdCA8RW50ZXI+IG9yIDxTcGFjZT4gdG8gcmVkcmF3IHRoZSBzY3JlZW4gYW5kIGNvbnRpbnVlLCB3aXRob3V0IHRoYXQga2V5CisgICBiZWluZyB1c2VkIG90aGVyd2lzZS4KKy0+IEhpdCAiOiIgb3IgYW55IG90aGVyIE5vcm1hbCBtb2RlIGNvbW1hbmQgY2hhcmFjdGVyIHRvIHN0YXJ0IHRoYXQgY29tbWFuZC4KKy0+IEhpdCA8Qy1ZPiB0byBjb3B5ICh5YW5rKSBhIG1vZGVsZXNzIHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkIHJlZ2lzdGVyLgorLT4gVXNlIGEgbWVudS4gIFRoZSBjaGFyYWN0ZXJzIGRlZmluZWQgZm9yIENtZGxpbmUtbW9kZSBhcmUgdXNlZC4KKy0+IFdoZW4gJ21vdXNlJyBjb250YWlucyB0aGUgJ3InIGZsYWcsIGNsaWNraW5nIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiB3b3JrcworICAgbGlrZSBwcmVzc2luZyA8U3BhY2U+LiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHNlbGVjdCB0ZXh0IHRob3VnaC4KKy0+IEZvciB0aGUgR1VJIGNsaWNraW5nIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBpbiB0aGUgbGFzdCBsaW5lIHdvcmtzIGxpa2UKKyAgIHByZXNzaW5nIDxTcGFjZT4uCit7Vmk6IG9ubHkgIjoiIGNvbW1hbmRzIGFyZSBpbnRlcnByZXRlZH0KKworVG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgaGl0LWVudGVyIHByb21wdHM6CistIFNldCAnY21kaGVpZ2h0JyB0byAyIG9yIGhpZ2hlci4KKy0gQWRkIGZsYWdzIHRvICdzaG9ydG1lc3MnLgorLSBSZXNldCAnc2hvd2NtZCcgYW5kL29yICdydWxlcicuCisKK0Fsc28gc2VlICdtb3VzZScuICBUaGUgaGl0LWVudGVyIG1lc3NhZ2UgaXMgaGlnaGxpZ2h0ZWQgd2l0aCB0aGUgfGhsLVF1ZXN0aW9ufAorZ3JvdXAuCisKKworCQkJCQkJKm1vcmUtcHJvbXB0KiAqcGFnZXIqICA+CisgIC0tIE1vcmUgLS0KKyAgLS0gTW9yZSAtLSAoUkVUOiBsaW5lLCBTUEFDRTogcGFnZSwgZDogaGFsZiBwYWdlLCBxOiBxdWl0KQorICAtLSBNb3JlIC0tIChSRVQvQlM6IGxpbmUsIFNQQUNFL2I6IHBhZ2UsIGQvdTogaGFsZiBwYWdlLCBxOiBxdWl0KQorCitUaGlzIG1lc3NhZ2UgaXMgZ2l2ZW4gd2hlbiB0aGUgc2NyZWVuIGlzIGZpbGxlZCB3aXRoIG1lc3NhZ2VzLiAgSXQgaXMgb25seQorZ2l2ZW4gd2hlbiB0aGUgJ21vcmUnIG9wdGlvbiBpcyBvbi4gIEl0IGlzIGhpZ2hsaWdodGVkIHdpdGggdGhlIHxobC1Nb3JlTXNnfAorZ3JvdXAuCisKK1R5cGUJCQkJCWVmZmVjdCB+CisgICAgIDxDUj4gb3IgPE5MPiBvciBqIG9yIDxEb3duPglvbmUgbW9yZSBsaW5lCisgICAgIDxCUz4gb3IgayBvciA8VXA+CQkJb25lIGxpbmUgYmFjayAoKikKKyAgICAgPFNwYWNlPiBvciA8UGFnZURvd24+CQluZXh0IHBhZ2UKKyAgICAgYiBvciA8UGFnZVVwPgkJCXByZXZpb3VzIHBhZ2UgKCopCisgICAgIGQJCQkJCWRvd24gaGFsZiBhIHBhZ2UKKyAgICAgdQkJCQkJdXAgaGFsZiBhIHBhZ2UgKCopCisgICAgIHEsIDxFc2M+IG9yIENUUkwtQwkJCXN0b3AgdGhlIGxpc3RpbmcKKyAgICAgOgkJCQkJc3RvcCB0aGUgbGlzdGluZyBhbmQgZW50ZXIgYQorCQkJCQkgICAgIGNvbW1hbmQtbGluZQorICAgIDxDLVk+CQkJCXlhbmsgKGNvcHkpIGEgbW9kZWxlc3Mgc2VsZWN0aW9uIHRvCisJCQkJCXRoZSBjbGlwYm9hcmQgKCIqIGFuZCAiKyByZWdpc3RlcnMpCisgICAge21lbnUtZW50cnl9CQkJd2hhdCB0aGUgbWVudSBpcyBkZWZpbmVkIHRvIGluCisJCQkJCUNtZGxpbmUtbW9kZS4KKyAgICA8TGVmdE1vdXNlPiAoKiopCQkJbmV4dCBwYWdlCisKK0FueSBvdGhlciBrZXkgY2F1c2VzIHRoZSBtZWFuaW5nIG9mIHRoZSBrZXlzIHRvIGJlIGRpc3BsYXllZC4KKworKCopIGJhY2t3YXJkcyBzY3JvbGxpbmcgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZXNlIGNvbW1hbmRzOiA+CisgICAgOmNsaXN0CisoKiopIENsaWNraW5nIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBvbmx5IHdvcmtzOgorICAgICAtIEZvciB0aGUgR1VJOiBpbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzY3JlZW4uCisgICAgIC0gV2hlbiAncicgaXMgaW5jbHVkZWQgaW4gJ21vdXNlJyAoYnV0IHRoZW4gc2VsZWN0aW5nIHRleHQgd29uJ3Qgd29yaykuCisKKworTm90ZTogVGhlIHR5cGVkIGtleSBpcyBkaXJlY3RseSBvYnRhaW5lZCBmcm9tIHRoZSB0ZXJtaW5hbCwgaXQgaXMgbm90IG1hcHBlZAorYW5kIHR5cGVhaGVhZCBpcyBpZ25vcmVkLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvbWxhbmcudHh0IGIvcnVudGltZS9kb2MvbWxhbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNDViNDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9tbGFuZy50eHQKQEAgLTAsMCArMSwyMDUgQEAKKyptbGFuZy50eHQqICAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBGZWIgMjQKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitNdWx0aS1sYW5ndWFnZSBmZWF0dXJlcwkJCQkqbXVsdGlsYW5nKiAqbXVsdGktbGFuZyoKKworVGhpcyBpcyBhYm91dCB1c2luZyBtZXNzYWdlcyBhbmQgbWVudXMgaW4gdmFyaW91cyBsYW5ndWFnZXMuICBGb3IgZWRpdGluZworbXVsdGktYnl0ZSB0ZXh0IHNlZSB8bXVsdGlieXRlfC4KKworVGhlIGJhc2ljcyBhcmUgZXhwbGFpbmVkIGluIHRoZSB1c2VyIG1hbnVhbDogfHVzcl80NS50eHR8LgorCisxLiBNZXNzYWdlcwkJCXxtdWx0aWxhbmctbWVzc2FnZXN8CisyLiBNZW51cwkJCXxtdWx0aWxhbmctbWVudXN8CiszLiBTY3JpcHRzCQkJfG11bHRpbGFuZy1zY3JpcHRzfAorCitBbHNvIHNlZSB8aGVscC10cmFuc2xhdGVkfCBmb3IgbXVsdGktbGFuZ3VhZ2UgaGVscC4KKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGZlYXR1cmVzfQore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K211bHRpX2xhbmd8IGZlYXR1cmV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gTWVzc2FnZXMJCQkJCQkqbXVsdGlsYW5nLW1lc3NhZ2VzKgorCitWaW0gcGlja3MgdXAgdGhlIGxvY2FsZSBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIEluIG1vc3QgY2FzZXMgdGhpcyBtZWFucyBWaW0KK3dpbGwgdXNlIHRoZSBsYW5ndWFnZSB0aGF0IHlvdSBwcmVmZXIsIHVubGVzcyBpdCdzIG5vdCBhdmFpbGFibGUuCisKK1RvIHNlZSBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGxvY2FsZSBuYW1lcyBvbiB5b3VyIHN5c3RlbSwgbG9vayBpbiBvbmUgb2YgdGhlc2UKK2RpcmVjdG9yaWVzIChmb3IgVW5peCk6CisJL3Vzci9saWIvbG9jYWxlIH4KKwkvdXNyL3NoYXJlL2xvY2FsZSB+CitVbmZvcnR1bmF0ZWx5LCB1cHBlci9sb3dlcmNhc2UgZGlmZmVyZW5jZXMgbWF0dGVyLiAgQWxzbyB3YXRjaCBvdXQgZm9yIHRoZQordXNlIG9mICItIiBhbmQgIl8iLgorCisJCQkJCSAgICAqOmxhbiogKjpsYW5nKiAqOmxhbmd1YWdlKiAqRTE5NyoKKzpsYW5bZ3VhZ2VdCis6bGFuW2d1YWdlXSBtZXNbc2FnZXNdCis6bGFuW2d1YWdlXSBjdHlbcGVdCis6bGFuW2d1YWdlXSB0aW1bZV0KKwkJCVByaW50IHRoZSBjdXJyZW50IGxhbmd1YWdlIChha2EgbG9jYWxlKS4KKwkJCVdpdGggdGhlICJtZXNzYWdlcyIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCisJCQltZXNzYWdlcyBpcyBwcmludGVkLiAgVGVjaG5pY2FsOiBMQ19NRVNTQUdFUy4KKwkJCVdpdGggdGhlICJjdHlwZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCisJCQljaGFyYWN0ZXIgZW5jb2RpbmcgaXMgcHJpbnRlZC4gIFRlY2huaWNhbDogTENfQ1RZUEUuCisJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCisJCQlzdHJmdGltZSgpIGlzIHByaW50ZWQuICBUZWNobmljYWw6IExDX1RJTUUuCisJCQlXaXRob3V0IGFyZ3VtZW50IGFsbCBwYXJ0cyBvZiB0aGUgbG9jYWxlIGFyZSBwcmludGVkCisJCQkodGhpcyBpcyBzeXN0ZW0gZGVwZW5kZW50KS4KKwkJCVRoZSBjdXJyZW50IGxhbmd1YWdlIGNhbiBhbHNvIGJlIG9idGFpbmVkIHdpdGggdGhlCisJCQl8djpsYW5nfCwgfHY6Y3R5cGV8IGFuZCB8djpsY190aW1lfCB2YXJpYWJsZXMuCisKKzpsYW5bZ3VhZ2VdIHtuYW1lfQorOmxhbltndWFnZV0gbWVzW3NhZ2VzXSB7bmFtZX0KKzpsYW5bZ3VhZ2VdIGN0eVtwZV0ge25hbWV9Cis6bGFuW2d1YWdlXSB0aW1bZV0ge25hbWV9CisJCQlTZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKGFrYSBsb2NhbGUpIHRvIHtuYW1lfS4KKwkJCVRoZSBsb2NhbGUge25hbWV9IG11c3QgYmUgYSB2YWxpZCBsb2NhbGUgb24geW91cgorCQkJc3lzdGVtLiAgU29tZSBzeXN0ZW1zIGFjY2VwdCBhbGlhc2VzIGxpa2UgImVuIiBvcgorCQkJImVuX1VTIiwgYnV0IHNvbWUgb25seSBhY2NlcHQgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbgorCQkJbGlrZSAiZW5fVVMuSVNPXzg4NTktMSIuCisJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgorCQkJbWVzc2FnZXMgaXMgc2V0LiAgVGhpcyBjYW4gYmUgZGlmZmVyZW50IHdoZW4geW91IHdhbnQsCisJCQlmb3IgZXhhbXBsZSwgRW5nbGlzaCBtZXNzYWdlcyB3aGlsZSBlZGl0aW5nIEphcGFuZXNlCisJCQl0ZXh0LiAgVGhpcyBzZXRzICRMQ19NRVNTQUdFUy4KKwkJCVdpdGggdGhlICJjdHlwZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCisJCQljaGFyYWN0ZXIgZW5jb2RpbmcgaXMgc2V0LiAgVGhpcyBhZmZlY3RzIHRoZSBsaWJyYXJpZXMKKwkJCXRoYXQgVmltIHdhcyBsaW5rZWQgd2l0aC4gIEl0J3MgdW51c3VhbCB0byBzZXQgdGhpcyB0bworCQkJYSBkaWZmZXJlbnQgdmFsdWUgZnJvbSAnZW5jb2RpbmcnLiAgVGhpcyBzZXRzCisJCQkkTENfQ1RZUEUuCisJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yIHRpbWUKKwkJCWFuZCBkYXRlIG1lc3NhZ2VzIGlzIHNldC4gIFRoaXMgYWZmZWN0cyBzdHJmdGltZSgpLgorCQkJVGhpcyBzZXRzICRMQ19USU1FLgorCQkJV2l0aG91dCBhbiBhcmd1bWVudCBib3RoIGFyZSBzZXQsIGFuZCBhZGRpdGlvbmFsbHkKKwkJCSRMQU5HIGlzIHNldC4KKwkJCVRoaXMgd2lsbCBtYWtlIGEgZGlmZmVyZW5jZSBmb3IgaXRlbXMgdGhhdCBkZXBlbmQgb24KKwkJCXRoZSBsYW5ndWFnZSAoc29tZSBtZXNzYWdlcywgdGltZSBhbmQgZGF0ZSBmb3JtYXQpLgorCQkJTm90IGZ1bGx5IHN1cHBvcnRlZCBvbiBhbGwgc3lzdGVtcworCQkJSWYgdGhpcyBmYWlscyB0aGVyZSB3aWxsIGJlIGFuIGVycm9yIG1lc3NhZ2UuICBJZiBpdAorCQkJc3VjY2VlZHMgdGhlcmUgaXMgbm8gbWVzc2FnZS4gIEV4YW1wbGU6ID4KKwkJCQk6bGFuZ3VhZ2UKKwkJCQlDdXJyZW50IGxhbmd1YWdlOiBDCisJCQkJOmxhbmd1YWdlIGRlX0RFLklTT184ODU5LTEKKwkJCQk6bGFuZ3VhZ2UgbWVzCisJCQkJQ3VycmVudCBtZXNzYWdlcyBsYW5ndWFnZTogZGVfREUuSVNPXzg4NTktMQorCQkJCTpsYW5nIG1lcyBlbgorPAorCitNUy1XSU5ET1dTIE1FU1NBR0UgVFJBTlNMQVRJT05TCQkJCSp3aW4zMi1nZXR0ZXh0KgorCitJZiB5b3UgdXNlZCB0aGUgc2VsZi1pbnN0YWxsaW5nIC5leGUgZmlsZSwgbWVzc2FnZSB0cmFuc2xhdGlvbnMgc2hvdWxkIHdvcmsKK2FscmVhZHkuICBPdGhlcndpc2UgZ2V0IHRoZSBsaWJpbnRsLmRsbCBmaWxlIGlmIHlvdSBkb24ndCBoYXZlIGl0IHlldDoKKworCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2V0dGV4dAorCitUaGlzIGFsc28gY29udGFpbnMgdG9vbHMgeGdldHRleHQsIG1zZ2Zvcm1hdCBhbmQgb3RoZXJzLgorCitsaWJpbnRsLmRsbCBzaG91bGQgYmUgcGxhY2VkIGluIHNhbWUgZGlyZWN0b3J5IHdpdGggKGcpdmltLmV4ZSwgb3Igc29tZQorcGxhY2Ugd2hlcmUgUEFUSCBlbnZpcm9ubWVudCB2YWx1ZSBkZXNjcmliZS4gIE1lc3NhZ2UgZmlsZXMgKHZpbS5tbykKK2hhdmUgdG8gYmUgcGxhY2VkIGluICIkVklNUlVOVElNRS9sYW5nL3h4L0xDX01FU1NBR0VTIiwgd2hlcmUgInh4IiBpcyB0aGUKK2FiYnJldmlhdGlvbiBvZiB0aGUgbGFuZ3VhZ2UgKG1vc3RseSB0d28gbGV0dGVycykuCisKK0lmIHlvdSB3cml0ZSB5b3VyIG93biB0cmFuc2xhdGlvbnMgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIC5wbyBmaWxlIGFuZAorY29udmVydCBpdCB0byBhIC5tbyBmaWxlLiAgWW91IG5lZWQgdG8gZ2V0IHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFuZCByZWFkCit0aGUgZmlsZSAic3JjL3BvL1JFQURNRS50eHQiLgorCitUbyBvdmVycnVsZSB0aGUgYXV0b21hdGljIGNob2ljZSBvZiB0aGUgbGFuZ3VhZ2UsIHNldCB0aGUgJExBTkcgdmFyaWFibGUgdG8KK3RoZSBsYW5ndWFnZSBvZiB5b3VyIGNob2ljZS4gIHVzZSAiZW4iIHRvIGRpc2FibGUgdHJhbnNsYXRpb25zLiA+CisKKyAgOmxldCAkTEFORyA9ICdqYScKKworKHRleHQgZm9yIFdpbmRvd3MgYnkgTXVyYW9rYSBUYXJvKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIE1lbnVzCQkJCQkJKm11bHRpbGFuZy1tZW51cyoKKworU2VlIHw0NS4yfCBmb3IgdGhlIGJhc2ljcy4KKworTm90ZSB0aGF0IGlmIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIG1lbnVzIGFmdGVyIHRoZSB0cmFuc2xhdGlvbiB3YXMKK2RvbmUsIHNvbWUgb2YgdGhlIG1lbnVzIG1heSBiZSBzaG93biBpbiBFbmdsaXNoLiAgUGxlYXNlIHRyeSBjb250YWN0aW5nIHRoZQorbWFpbnRhaW5lciBvZiB0aGUgdHJhbnNsYXRpb24gYW5kIGFzayBoaW0gdG8gdXBkYXRlIGl0LiAgWW91IGNhbiBmaW5kIHRoZQorbmFtZSBhbmQgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIHRyYW5zbGF0b3IgaW4KKyIkVklNUlVOVElNRS9sYW5nL21lbnVfPGxhbmc+LnZpbSIuCisKK1RvIHNldCB0aGUgZm9udCAob3IgZm9udHNldCkgdG8gdXNlIGZvciB0aGUgbWVudXMsIHVzZSB0aGUgfDpoaWdobGlnaHR8Citjb21tYW5kLiAgRXhhbXBsZTogPgorCisJOmhpZ2hsaWdodCBNZW51IGZvbnQ9azEyLHIxMgorCisKK0FMSUFTIExPQ0FMRSBOQU1FUworCitVbmZvcnR1bmF0ZWx5LCB0aGUgbG9jYWxlIG5hbWVzIGFyZSBkaWZmZXJlbnQgb24gdmFyaW91cyBzeXN0ZW1zLCBldmVuIHRob3VnaAordGhleSBhcmUgZm9yIHRoZSBzYW1lIGxhbmd1YWdlIGFuZCBlbmNvZGluZy4gIElmIHlvdSBkbyBub3QgZ2V0IHRoZSBtZW51Cit0cmFuc2xhdGlvbnMgeW91IGV4cGVjdGVkLCBjaGVjayB0aGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZDogPgorCisJZWNobyB2OmxhbmcKKworTm93IGNoZWNrIHRoZSAiJFZJTVJVTlRJTUUvbGFuZyIgZGlyZWN0b3J5IGZvciBtZW51IHRyYW5zbGF0aW9uIGZpbGVzIHRoYXQgdXNlCithIHNpbWlsYXIgbGFuZ3VhZ2UuICBBIGRpZmZlcmVuY2UgaW4gYSAiLSIgYmVpbmcgYSAiXyIgYWxyZWFkeSBjYXVzZXMgYSBmaWxlCitub3QgdG8gYmUgZm91bmQhICBBbm90aGVyIGNvbW1vbiBkaWZmZXJlbmNlIHRvIHdhdGNoIG91dCBmb3IgaXMgImlzbzg4NTktMSIKK3ZlcnN1cyAiaXNvXzg4NTktMSIuICBGb3J0dW5hdGVseSBWaW0gbWFrZXMgYWxsIG5hbWVzIGxvd2VyY2FzZSwgdGh1cyB5b3UKK2Rvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgY2FzZSBkaWZmZXJlbmNlcy4gIFNwYWNlcyBhcmUgY2hhbmdlZCB0bwordW5kZXJzY29yZXMsIHRvIGF2b2lkIGhhdmluZyB0byBlc2NhcGUgdGhlbS4KKworSWYgeW91IGZpbmQgYSBtZW51IHRyYW5zbGF0aW9uIGZpbGUgZm9yIHlvdXIgbGFuZ3VhZ2Ugd2l0aCBhIGRpZmZlcmVudCBuYW1lLAorY3JlYXRlIGEgZmlsZSBpbiB5b3VyIG93biBydW50aW1lIGRpcmVjdG9yeSB0byBsb2FkIHRoYXQgb25lLiAgVGhlIG5hbWUgb2YKK3RoYXQgZmlsZSBjb3VsZCBiZTogPgorCisJfi8udmltL2xhbmcvbWVudV88djpsYW5nPi52aW0KKworQ2hlY2sgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uIGZvciBkaXJlY3RvcmllcyB3aGljaCBhcmUgc2VhcmNoZWQuICBJbiB0aGF0CitmaWxlIHB1dCBhIGNvbW1hbmQgdG8gbG9hZCB0aGUgbWVudSBmaWxlIHdpdGggdGhlIG90aGVyIG5hbWU6ID4KKworCXJ1bnRpbWUgbGFuZy9tZW51XzxvdGhlcl9sYW5nPi52aW0KKworCitUUkFOU0xBVElORyBNRU5VUworCitJZiB5b3Ugd2FudCB0byBkbyB5b3VyIG93biB0cmFuc2xhdGlvbnMsIHlvdSBjYW4gdXNlIHRoZSB8Om1lbnV0cmFuc3wgY29tbWFuZCwKK2V4cGxhaW5lZCBiZWxvdy4gIEl0IGlzIHJlY29tbWVuZGVkIHRvIHB1dCB0aGUgdHJhbnNsYXRpb25zIGZvciBvbmUgbGFuZ3VhZ2UKK2luIGEgVmltIHNjcmlwdC4gIEZvciBhIGxhbmd1YWdlIHRoYXQgaGFzIG5vIHRyYW5zbGF0aW9uIHlldCwgcGxlYXNlIGNvbnNpZGVyCitiZWNvbWluZyB0aGUgbWFpbnRhaW5lciBhbmQgbWFrZSB5b3VyIHRyYW5zbGF0aW9ucyBhdmFpbGFibGUgdG8gYWxsIFZpbSB1c2Vycy4KK1NlbmQgYW4gZS1tYWlsIHRvIHRoZSBWaW0gbWFpbnRhaW5lciA8bWFpbnRhaW5lckB2aW0ub3JnPi4KKworCQkJCQkqOm1lbnV0KiAqOm1lbnV0cmFucyogKjptZW51dHJhbnNsYXRlKgorOm1lbnV0W3JhbnNsYXRlXSBjbGVhcgorCQkJQ2xlYXIgYWxsIG1lbnUgdHJhbnNsYXRpb25zLgorCis6bWVudXRbcmFuc2xhdGVdIHtlbmdsaXNofSB7bXlsYW5nfQorCQkJVHJhbnNsYXRlIG1lbnUgbmFtZSB7ZW5nbGlzaH0gdG8ge215bGFuZ30uICBBbGwKKwkJCXNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICImIiBhbmQgIjxUYWI+IiBuZWVkIHRvIGJlCisJCQlpbmNsdWRlZC4gIFNwYWNlcyBhbmQgZG90cyBuZWVkIHRvIGJlIGVzY2FwZWQgd2l0aCBhCisJCQliYWNrc2xhc2gsIGp1c3QgbGlrZSBpbiBvdGhlciB8Om1lbnV8IGNvbW1hbmRzLgorCitTZWUgdGhlICRWSU1SVU5USU1FL2xhbmcgZGlyZWN0b3J5IGZvciBleGFtcGxlcy4KKworVG8gdHJ5IG91dCB5b3VyIHRyYW5zbGF0aW9ucyB5b3UgZmlyc3QgaGF2ZSB0byByZW1vdmUgYWxsIG1lbnVzLiAgVGhpcyBpcyBob3cKK3lvdSBjYW4gZG8gaXQgd2l0aG91dCByZXN0YXJ0aW5nIFZpbTogPgorCTpzb3VyY2UgJFZJTVJVTlRJTUUvZGVsbWVudS52aW0KKwk6c291cmNlIDx5b3VyLW5ldy1tZW51LWZpbGU+CisJOnNvdXJjZSAkVklNUlVOVElNRS9tZW51LnZpbQorCitFYWNoIHBhcnQgb2YgYSBtZW51IHBhdGggaXMgdHJhbnNsYXRlZCBzZXBhcmF0ZWx5LiAgVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4KKyJIZWxwIiBpcyB0cmFuc2xhdGVkIHRvICJIaWxmZSIgYW5kICJPdmVydmlldyIgdG8gItxiZXJibGljayIgdGhlbgorIkhlbHAuT3ZlcnZpZXciIHdpbGwgYmUgdHJhbnNsYXRlZCB0byAiSGlsZmUu3GJlcmJsaWNrIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBTY3JpcHRzCQkJCQkJKm11bHRpbGFuZy1zY3JpcHRzKgorCitJbiBWaW0gc2NyaXB0cyB5b3UgY2FuIHVzZSB0aGUgfHY6bGFuZ3wgdmFyaWFibGUgdG8gZ2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlCisobG9jYWxlKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJDIiBvciBjb21lcyBmcm9tIHRoZSAkTEFORyBlbnZpcm9ubWVudAordmFyaWFibGUuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIGEgc2ltcGxlIHdheSwgdG8gbWFrZQorYSBtZXNzYWdlIGFkYXB0IHRvIGxhbmd1YWdlIHByZWZlcmVuY2VzIG9mIHRoZSB1c2VyLCA+CisKKwk6aWYgdjpsYW5nID1+ICJkZV9ERSIKKwk6ICBlY2hvICJHdXRlbiBNb3JnZW4iCisJOmVsc2UKKwk6ICBlY2hvICJHb29kIG1vcm5pbmciCisJOmVuZGlmCis8CisKKyB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL21vdGlvbi50eHQgYi9ydW50aW1lL2RvYy9tb3Rpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjQxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9tb3Rpb24udHh0CkBAIC0wLDAgKzEsMTE5MSBAQAorKm1vdGlvbi50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAxMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0N1cnNvciBtb3Rpb25zCQkJCQkqY3Vyc29yLW1vdGlvbnMqICpuYXZpZ2F0aW9uKgorCitUaGVzZSBjb21tYW5kcyBtb3ZlIHRoZSBjdXJzb3IgcG9zaXRpb24uICBJZiB0aGUgbmV3IHBvc2l0aW9uIGlzIG9mZiBvZiB0aGUKK3NjcmVlbiwgdGhlIHNjcmVlbiBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjdXJzb3IgKHNlZSBhbHNvICdzY3JvbGxqdW1wJyBhbmQKKydzY3JvbGxvZmYnIG9wdGlvbnMpLgorCisxLiBNb3Rpb25zIGFuZCBvcGVyYXRvcnMJfG9wZXJhdG9yfAorMi4gTGVmdC1yaWdodCBtb3Rpb25zCQl8bGVmdC1yaWdodC1tb3Rpb25zfAorMy4gVXAtZG93biBtb3Rpb25zCQl8dXAtZG93bi1tb3Rpb25zfAorNC4gV29yZCBtb3Rpb25zCQkJfHdvcmQtbW90aW9uc3wKKzUuIFRleHQgb2JqZWN0IG1vdGlvbnMJCXxvYmplY3QtbW90aW9uc3wKKzYuIFRleHQgb2JqZWN0IHNlbGVjdGlvbgl8b2JqZWN0LXNlbGVjdHwKKzcuIE1hcmtzCQkJfG1hcmstbW90aW9uc3wKKzguIEp1bXBzCQkJfGp1bXAtbW90aW9uc3wKKzkuIFZhcmlvdXMgbW90aW9ucwkJfHZhcmlvdXMtbW90aW9uc3wKKworR2VuZXJhbCByZW1hcmtzOgorCitJZiB5b3Ugd2FudCB0byBrbm93IHdoZXJlIHlvdSBhcmUgaW4gdGhlIGZpbGUgdXNlIHRoZSAiQ1RSTC1HIiBjb21tYW5kCit8Q1RSTC1HfCBvciB0aGUgImcgQ1RSTC1HIiBjb21tYW5kIHxnX0NUUkwtR3wuICBJZiB5b3Ugc2V0IHRoZSAncnVsZXInIG9wdGlvbiwKK3RoZSBjdXJzb3IgcG9zaXRpb24gaXMgY29udGludW91c2x5IHNob3duIGluIHRoZSBzdGF0dXMgbGluZSAod2hpY2ggc2xvd3MgZG93bgorVmltIGEgbGl0dGxlKS4KKworRXhwZXJpZW5jZWQgdXNlcnMgcHJlZmVyIHRoZSBoamtsIGtleXMgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgcmlnaHQgdW5kZXIKK3RoZWlyIGZpbmdlcnMuICBCZWdpbm5lcnMgb2Z0ZW4gcHJlZmVyIHRoZSBhcnJvdyBrZXlzLCBiZWNhdXNlIHRoZXkgZG8gbm90Citrbm93IHdoYXQgdGhlIGhqa2wga2V5cyBkby4gIFRoZSBtbmVtb25pYyB2YWx1ZSBvZiBoamtsIGlzIGNsZWFyIGZyb20gbG9va2luZworYXQgdGhlIGtleWJvYXJkLiAgVGhpbmsgb2YgaiBhcyBhbiBhcnJvdyBwb2ludGluZyBkb3dud2FyZHMuCisKK1RoZSAndmlydHVhbGVkaXQnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIG1ha2UgaXQgcG9zc2libGUgdG8gbW92ZSB0aGUgY3Vyc29yIHRvCitwb3NpdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIG9yIGhhbGZ3YXkgYSBjaGFyYWN0ZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gTW90aW9ucyBhbmQgb3BlcmF0b3JzCQkJCSpvcGVyYXRvcioKKworVGhlIG1vdGlvbiBjb21tYW5kcyBjYW4gYmUgdXNlZCBhZnRlciBhbiBvcGVyYXRvciBjb21tYW5kLCB0byBoYXZlIHRoZSBjb21tYW5kCitvcGVyYXRlIG9uIHRoZSB0ZXh0IHRoYXQgd2FzIG1vdmVkIG92ZXIuICBUaGF0IGlzIHRoZSB0ZXh0IGJldHdlZW4gdGhlIGN1cnNvcgorcG9zaXRpb24gYmVmb3JlIGFuZCBhZnRlciB0aGUgbW90aW9uLiAgT3BlcmF0b3JzIGFyZSBnZW5lcmFsbHkgdXNlZCB0byBkZWxldGUKK29yIGNoYW5nZSB0ZXh0LiAgVGhlIGZvbGxvd2luZyBvcGVyYXRvcnMgYXJlIGF2YWlsYWJsZToKKworCXxjfAljCWNoYW5nZQorCXxkfAlkCWRlbGV0ZQorCXx5fAl5CXlhbmsgaW50byByZWdpc3RlciAoZG9lcyBub3QgY2hhbmdlIHRoZSB0ZXh0KQorCXx+fAl+CXN3YXAgY2FzZSAob25seSBpZiAndGlsZGVvcCcgaXMgc2V0KQorCXxnfnwJZ34Jc3dhcCBjYXNlCisJfGd1fAlndQltYWtlIGxvd2VyY2FzZQorCXxnVXwJZ1UJbWFrZSB1cHBlcmNhc2UKKwl8IXwJIQlmaWx0ZXIgdGhyb3VnaCBhbiBleHRlcm5hbCBwcm9ncmFtCisJfD18CT0JZmlsdGVyIHRocm91Z2ggJ2VxdWFscHJnJyBvciBDLWluZGVudGluZyBpZiBlbXB0eQorCXxncXwJZ3EJdGV4dCBmb3JtYXR0aW5nCisJfGc/fAlnPwlST1QxMyBlbmNvZGluZworCXw+fAk+CXNoaWZ0IHJpZ2h0CisJfDx8CTwJc2hpZnQgbGVmdAorCXx6ZnwJemYJZGVmaW5lIGEgZm9sZAorCitJZiB0aGUgbW90aW9uIGluY2x1ZGVzIGEgY291bnQgYW5kIHRoZSBvcGVyYXRvciBhbHNvIGhhZCBhIGNvdW50IGJlZm9yZSBpdCwKK3RoZSB0d28gY291bnRzIGFyZSBtdWx0aXBsaWVkLiAgRm9yIGV4YW1wbGU6ICIyZDN3IiBkZWxldGVzIHNpeCB3b3Jkcy4KKworQWZ0ZXIgYXBwbHlpbmcgdGhlIG9wZXJhdG9yIHRoZSBjdXJzb3IgaXMgbW9zdGx5IGxlZnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0Cit0aGF0IHdhcyBvcGVyYXRlZCB1cG9uLiAgRm9yIGV4YW1wbGUsICJ5ZmUiIGRvZXNuJ3QgbW92ZSB0aGUgY3Vyc29yLCBidXQgInlGZSIKK21vdmVzIHRoZSBjdXJzb3IgbGVmdHdhcmRzIHRvIHRoZSAiZSIgd2hlcmUgdGhlIHlhbmsgc3RhcnRlZC4KKworCQkJCQkJKmxpbmV3aXNlKiAqY2hhcmFjdGVyd2lzZSoKK1RoZSBvcGVyYXRvciBlaXRoZXIgYWZmZWN0cyB3aG9sZSBsaW5lcywgb3IgdGhlIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgc3RhcnQKK2FuZCBlbmQgcG9zaXRpb24uICBHZW5lcmFsbHksIG1vdGlvbnMgdGhhdCBtb3ZlIGJldHdlZW4gbGluZXMgYWZmZWN0IGxpbmVzCisoYXJlIGxpbmV3aXNlKSwgYW5kIG1vdGlvbnMgdGhhdCBtb3ZlIHdpdGhpbiBhIGxpbmUgYWZmZWN0IGNoYXJhY3RlcnMgKGFyZQorY2hhcmFjdGVyd2lzZSkuICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBleGNlcHRpb25zLgorCisJCQkJCQkqZXhjbHVzaXZlKiAqaW5jbHVzaXZlKgorQSBjaGFyYWN0ZXIgbW90aW9uIGlzIGVpdGhlciBpbmNsdXNpdmUgb3IgZXhjbHVzaXZlLiBXaGVuIGluY2x1c2l2ZSwgdGhlIHN0YXJ0CithbmQgZW5kIHBvc2l0aW9uIG9mIHRoZSBtb3Rpb24gYXJlIGluY2x1ZGVkIGluIHRoZSBvcGVyYXRpb24uICBXaGVuIGV4Y2x1c2l2ZSwKK3RoZSBsYXN0IGNoYXJhY3RlciB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBpcyBub3QgaW5jbHVkZWQuICBMaW5ld2lzZQorbW90aW9ucyBhbHdheXMgaW5jbHVkZSB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbi4KKworV2hpY2ggbW90aW9ucyBhcmUgbGluZXdpc2UsIGluY2x1c2l2ZSBvciBleGNsdXNpdmUgaXMgbWVudGlvbmVkIGJlbG93LiAgVGhlcmUKK2FyZSBob3dldmVyLCB0d28gZ2VuZXJhbCBleGNlcHRpb25zOgorMS4gSWYgdGhlIG1vdGlvbiBpcyBleGNsdXNpdmUgYW5kIHRoZSBlbmQgb2YgdGhlIG1vdGlvbiBpcyBpbiBjb2x1bW4gMSwgdGhlCisgICBlbmQgb2YgdGhlIG1vdGlvbiBpcyBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBsaW5lIGFuZCB0aGUgbW90aW9uCisgICBiZWNvbWVzIGluY2x1c2l2ZS4gIEV4YW1wbGU6ICJ9IiBtb3ZlcyB0byB0aGUgZmlyc3QgbGluZSBhZnRlciBhIHBhcmFncmFwaCwKKyAgIGJ1dCAiZH0iIHdpbGwgbm90IGluY2x1ZGUgdGhhdCBsaW5lLgorMi4gSWYgdGhlIG1vdGlvbiBpcyBleGNsdXNpdmUsIHRoZSBlbmQgb2YgdGhlIG1vdGlvbiBpcyBpbiBjb2x1bW4gMSBhbmQgdGhlCisgICBzdGFydCBvZiB0aGUgbW90aW9uIHdhcyBhdCBvciBiZWZvcmUgdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZSwgdGhlCisgICBtb3Rpb24gYmVjb21lcyBsaW5ld2lzZS4gIEV4YW1wbGU6IElmIGEgcGFyYWdyYXBoIGJlZ2lucyB3aXRoIHNvbWUgYmxhbmtzCisgICBhbmQgeW91IGRvICJkfSIgd2hpbGUgc3RhbmRpbmcgb24gdGhlIGZpcnN0IG5vbi1ibGFuaywgYWxsIHRoZSBsaW5lcyBvZgorICAgdGhlIHBhcmFncmFwaCBhcmUgZGVsZXRlZCwgaW5jbHVkaW5nIHRoZSBibGFua3MuICBJZiB5b3UgZG8gYSBwdXQgbm93LCB0aGUKKyAgIGRlbGV0ZWQgbGluZXMgd2lsbCBiZSBpbnNlcnRlZCBiZWxvdyB0aGUgY3Vyc29yIHBvc2l0aW9uLgorCitOb3RlIHRoYXQgd2hlbiB0aGUgb3BlcmF0b3IgaXMgcGVuZGluZyAodGhlIG9wZXJhdG9yIGNvbW1hbmQgaXMgdHlwZWQsIGJ1dCB0aGUKK21vdGlvbiBpc24ndCB5ZXQpLCBhIHNwZWNpYWwgc2V0IG9mIG1hcHBpbmdzIGNhbiBiZSB1c2VkLiAgU2VlIHw6b21hcHwuCisKK0luc3RlYWQgb2YgZmlyc3QgZ2l2aW5nIHRoZSBvcGVyYXRvciBhbmQgdGhlbiBhIG1vdGlvbiB5b3UgY2FuIHVzZSBWaXN1YWwKK21vZGU6IG1hcmsgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHdpdGggInYiLCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUKK3RleHQgdGhhdCBpcyB0byBiZSBhZmZlY3RlZCBhbmQgdGhlbiBoaXQgdGhlIG9wZXJhdG9yLiAgVGhlIHRleHQgYmV0d2VlbiB0aGUKK3N0YXJ0IGFuZCB0aGUgY3Vyc29yIHBvc2l0aW9uIGlzIGhpZ2hsaWdodGVkLCBzbyB5b3UgY2FuIHNlZSB3aGF0IHRleHQgd2lsbAorYmUgb3BlcmF0ZWQgdXBvbi4gIFRoaXMgYWxsb3dzIG11Y2ggbW9yZSBmcmVlZG9tLCBidXQgcmVxdWlyZXMgbW9yZSBrZXkKK3N0cm9rZXMgYW5kIGhhcyBsaW1pdGVkIHJlZG8gZnVuY3Rpb25hbGl0eS4gIFNlZSB0aGUgY2hhcHRlciBvbiBWaXN1YWwgbW9kZQorfFZpc3VhbC1tb2RlfC4KKworWW91IGNhbiB1c2UgYSAiOiIgY29tbWFuZCBmb3IgYSBtb3Rpb24uICBGb3IgZXhhbXBsZSAiZDpjYWxsIEZpbmRFbmQoKSIuCitCdXQgdGhpcyBjYW4ndCBiZSByZWRvbmUgd2l0aCAiLiIgaWYgdGhlIGNvbW1hbmQgaXMgbW9yZSB0aGFuIG9uZSBsaW5lLgorVGhpcyBjYW4gYmUgcmVwZWF0ZWQ6ID4KKwlkOmNhbGwgc2VhcmNoKCJmIik8Q1I+CitUaGlzIGNhbm5vdCBiZSByZXBlYXRlZDogPgorCWQ6aWYgMTxDUj4KKwkgICBjYWxsIHNlYXJjaCgiZiIpPENSPgorCWVuZGlmPENSPgorCisKK0ZPUkNJTkcgQSBNT1RJT04gVE8gQkUgTElORVdJU0UsIENIQVJBQ1RFUldJU0UgT1IgQkxPQ0tXSVNFCisKK1doZW4gYSBtb3Rpb24gaXMgbm90IG9mIHRoZSB0eXBlIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSwgeW91IGNhbiBmb3JjZSBhbm90aGVyCit0eXBlIGJ5IHVzaW5nICJ2IiwgIlYiIG9yIENUUkwtViBqdXN0IGFmdGVyIHRoZSBvcGVyYXRvci4KK0V4YW1wbGU6ID4KKwlkagorZGVsZXRlcyB0d28gbGluZXMgPgorCWR2agorZGVsZXRlcyBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24gdW50aWwgdGhlIGNoYXJhY3RlciBiZWxvdyB0aGUgY3Vyc29yID4KKwlkPEMtVj5qCitkZWxldGVzIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciBhbmQgdGhlIGNoYXJhY3RlciBiZWxvdyB0aGUgY3Vyc29yLiA+CisKK0JlIGNhcmVmdWwgd2l0aCBmb3JjaW5nIGEgbGluZXdpc2UgbW92ZW1lbnQgdG8gYmUgdXNlZCBjaGFyYWN0ZXJ3aXNlIG9yCitibG9ja3dpc2UsIHRoZSBjb2x1bW4gbWF5IG5vdCBhbHdheXMgYmUgZGVmaW5lZC4KKworCQkJCQkJCSpvX3YqCit2CQlXaGVuIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3IsIGJlZm9yZSB0aGUgbW90aW9uIGNvbW1hbmQ6IEZvcmNlCisJCXRoZSBvcGVyYXRvciB0byB3b3JrIGNoYXJhY3Rlcndpc2UsIGFsc28gd2hlbiB0aGUgbW90aW9uIGlzCisJCWxpbmV3aXNlLiAgSWYgdGhlIG1vdGlvbiB3YXMgbGluZXdpc2UsIGl0IHdpbGwgYmVjb21lCisJCXxleGNsdXNpdmV8LgorCQlJZiB0aGUgbW90aW9uIGFscmVhZHkgd2FzIGNoYXJhY3Rlcndpc2UsIHRvZ2dsZQorCQlpbmNsdXNpdmUvZXhjbHVzaXZlLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBtYWtlIGFuIGV4Y2x1c2l2ZQorCQltb3Rpb24gaW5jbHVzaXZlIGFuZCBhbiBpbmNsdXNpdmUgbW90aW9uIGV4Y2x1c2l2ZS4KKworCQkJCQkJCSpvX1YqCitWCQlXaGVuIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3IsIGJlZm9yZSB0aGUgbW90aW9uIGNvbW1hbmQ6IEZvcmNlCisJCXRoZSBvcGVyYXRvciB0byB3b3JrIGxpbmV3aXNlLCBhbHNvIHdoZW4gdGhlIG1vdGlvbiBpcworCQljaGFyYWN0ZXJ3aXNlLgorCisJCQkJCQkJKm9fQ1RSTC1WKgorQ1RSTC1WCQlXaGVuIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3IsIGJlZm9yZSB0aGUgbW90aW9uIGNvbW1hbmQ6IEZvcmNlCisJCXRoZSBvcGVyYXRvciB0byB3b3JrIGJsb2Nrd2lzZS4gIFRoaXMgd29ya3MgbGlrZSBWaXN1YWwgYmxvY2sKKwkJbW9kZSBzZWxlY3Rpb24sIHdpdGggdGhlIGNvcm5lcnMgZGVmaW5lZCBieSB0aGUgY3Vyc29yCisJCXBvc2l0aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1vdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBMZWZ0LXJpZ2h0IG1vdGlvbnMJCQkJCSpsZWZ0LXJpZ2h0LW1vdGlvbnMqCisKK2gJCW9yCQkJCQkqaCoKKzxMZWZ0PgkJb3IJCQkJCSo8TGVmdD4qCitDVFJMLUgJCW9yCQkJCQkqQ1RSTC1IKiAqPEJTPioKKzxCUz4JCQlbY291bnRdIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisJCQlOb3RlOiBJZiB5b3UgcHJlZmVyIDxCUz4gdG8gZGVsZXRlIGEgY2hhcmFjdGVyLCB1c2UKKwkJCXRoZSBtYXBwaW5nOgorCQkJCTptYXAgQ1RSTC1WPEJTPgkJWAorCQkJKHRvIGVudGVyICJDVFJMLVY8QlM+IiB0eXBlIHRoZSBDVFJMLVYga2V5LCBmb2xsb3dlZAorCQkJYnkgdGhlIDxCUz4ga2V5KQorCQkJU2VlIHw6Zml4ZGVsfCBpZiB0aGUgPEJTPiBrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3UKKwkJCXdhbnQuCisKK2wJCW9yCQkJCQkqbCoKKzxSaWdodD4JCW9yCQkJCQkqPFJpZ2h0PiogKjxTcGFjZT4qCis8U3BhY2U+CQkJW2NvdW50XSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodC4gIHxleGNsdXNpdmV8IG1vdGlvbi4KKworCQkJCQkJCSowKgorMAkJCVRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUuICB8ZXhjbHVzaXZlfAorCQkJbW90aW9uLiAgV2hlbiBtb3ZpbmcgdXAgb3IgZG93biwgc3RheSBpbiBzYW1lIHNjcmVlbgorCQkJY29sdW1uIChpZiBwb3NzaWJsZSkuCisKKwkJCQkJCQkqPEhvbWU+KiAqPGtIb21lPioKKzxIb21lPgkJCVRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUuICB8ZXhjbHVzaXZlfAorCQkJbW90aW9uLiAgV2hlbiBtb3ZpbmcgdXAgb3IgZG93biwgc3RheSBpbiBzYW1lIHRleHQKKwkJCWNvbHVtbiAoaWYgcG9zc2libGUpLiAgV29ya3MgbGlrZSAiMXwiLCB3aGljaCBkaWZmZXJzCisJCQlmcm9tICIwIiB3aGVuIHRoZSBsaW5lIHN0YXJ0cyB3aXRoIGEgPFRhYj4uICB7bm90IGluCisJCQlWaX0KKworCQkJCQkJCSpeKgorXgkJCVRvIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9mIHRoZSBsaW5lLgorCQkJfGV4Y2x1c2l2ZXwgbW90aW9uLgorCisJCQkJCQkJKiQqICo8RW5kPiogKjxrRW5kPioKKyQgIG9yIDxFbmQ+CQlUbyB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgV2hlbiBhIGNvdW50IGlzIGdpdmVuIGFsc28gZ28KKwkJCVtjb3VudCAtIDFdIGxpbmVzIGRvd253YXJkIHxpbmNsdXNpdmV8LgorCQkJSW4gVmlzdWFsIG1vZGUgdGhlIGN1cnNvciBnb2VzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxhc3QKKwkJCWNoYXJhY3RlciBpbiB0aGUgbGluZS4KKwkJCVdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBhY3RpdmUsICIkIiBtYXkgbW92ZSB0aGUgY3Vyc29yCisJCQliYWNrIGZyb20gcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRvIHRoZSBsYXN0CisJCQljaGFyYWN0ZXIgaW4gdGhlIGxpbmUuCisKKwkJCQkJCQkqZ18qCitnXwkJCVRvIHRoZSBsYXN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUgYW5kCisJCQlbY291bnQgLSAxXSBsaW5lcyBkb3dud2FyZCB8aW5jbHVzaXZlfC4ge25vdCBpbiBWaX0KKworCQkJCQkJCSpnMCogKmc8SG9tZT4qCitnMCBvciBnPEhvbWU+CQlXaGVuIGxpbmVzIHdyYXAgKCd3cmFwJyBvbik6IFRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKKwkJCXRoZSBzY3JlZW4gbGluZS4gIHxleGNsdXNpdmV8IG1vdGlvbi4gIERpZmZlcnMgZnJvbQorCQkJIjAiIHdoZW4gYSBsaW5lIGlzIHdpZGVyIHRoYW4gdGhlIHNjcmVlbi4KKwkJCVdoZW4gbGluZXMgZG9uJ3Qgd3JhcCAoJ3dyYXAnIG9mZik6IFRvIHRoZSBsZWZ0bW9zdAorCQkJY2hhcmFjdGVyIG9mIHRoZSBjdXJyZW50IGxpbmUgdGhhdCBpcyBvbiB0aGUgc2NyZWVuLgorCQkJRGlmZmVycyBmcm9tICIwIiB3aGVuIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUKKwkJCWlzIG5vdCBvbiB0aGUgc2NyZWVuLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnXioKK2deCQkJV2hlbiBsaW5lcyB3cmFwICgnd3JhcCcgb24pOiBUbyB0aGUgZmlyc3Qgbm9uLWJsYW5rCisJCQljaGFyYWN0ZXIgb2YgdGhlIHNjcmVlbiBsaW5lLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCQkJRGlmZmVycyBmcm9tICJeIiB3aGVuIGEgbGluZSBpcyB3aWRlciB0aGFuIHRoZSBzY3JlZW4uCisJCQlXaGVuIGxpbmVzIGRvbid0IHdyYXAgKCd3cmFwJyBvZmYpOiBUbyB0aGUgbGVmdG1vc3QKKwkJCW5vbi1ibGFuayBjaGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQgbGluZSB0aGF0IGlzIG9uIHRoZQorCQkJc2NyZWVuLiAgRGlmZmVycyBmcm9tICJeIiB3aGVuIHRoZSBmaXJzdCBub24tYmxhbmsKKwkJCWNoYXJhY3RlciBvZiB0aGUgbGluZSBpcyBub3Qgb24gdGhlIHNjcmVlbi4gIHtub3QgaW4KKwkJCVZpfQorCisJCQkJCQkJKmdtKgorZ20JCQlMaWtlICJnMCIsIGJ1dCBoYWxmIGEgc2NyZWVud2lkdGggdG8gdGhlIHJpZ2h0IChvciBhcworCQkJbXVjaCBhcyBwb3NzaWJsZSkuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZyQqICpnPEVuZD4qCitnJCBvciBnPEVuZD4JCVdoZW4gbGluZXMgd3JhcCAoJ3dyYXAnIG9uKTogVG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9mCisJCQl0aGUgc2NyZWVuIGxpbmUgYW5kIFtjb3VudCAtIDFdIHNjcmVlbiBsaW5lcyBkb3dud2FyZAorCQkJfGluY2x1c2l2ZXwuICBEaWZmZXJzIGZyb20gIiQiIHdoZW4gYSBsaW5lIGlzIHdpZGVyCisJCQl0aGFuIHRoZSBzY3JlZW4uCisJCQlXaGVuIGxpbmVzIGRvbid0IHdyYXAgKCd3cmFwJyBvZmYpOiBUbyB0aGUgcmlnaHRtb3N0CisJCQljaGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQgbGluZSB0aGF0IGlzIHZpc2libGUgb24gdGhlCisJCQlzY3JlZW4uICBEaWZmZXJzIGZyb20gIiQiIHdoZW4gdGhlIGxhc3QgY2hhcmFjdGVyIG9mCisJCQl0aGUgbGluZSBpcyBub3Qgb24gdGhlIHNjcmVlbiBvciB3aGVuIGEgY291bnQgaXMgdXNlZC4KKwkJCUFkZGl0aW9uYWxseSwgdmVydGljYWwgbW92ZW1lbnRzIGtlZXAgdGhlIGNvbHVtbiwKKwkJCWluc3RlYWQgb2YgZ29pbmcgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqYmFyKgorfAkJCVRvIHNjcmVlbiBjb2x1bW4gW2NvdW50XSBpbiB0aGUgY3VycmVudCBsaW5lLgorCQkJfGV4Y2x1c2l2ZXwgbW90aW9uLgorCisJCQkJCQkJKmYqCitme2NoYXJ9CQkJVG8gW2NvdW50XSd0aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0byB0aGUgcmlnaHQuICBUaGUKKwkJCWN1cnNvciBpcyBwbGFjZWQgb24ge2NoYXJ9IHxpbmNsdXNpdmV8LgorCQkJe2NoYXJ9IGNhbiBiZSBlbnRlcmVkIGFzIGEgZGlncmFwaCB8ZGlncmFwaC1hcmd8LgorCQkJV2hlbiAnZW5jb2RpbmcnIGlzIHNldCB0byBVbmljb2RlLCBjb21wb3NpbmcKKwkJCWNoYXJhY3RlcnMgbWF5IGJlIHVzZWQsIHNlZSB8dXRmLTgtY2hhci1hcmd8LgorCQkJfDpsbWFwfCBtYXBwaW5ncyBhcHBseSB0byB7Y2hhcn0uICBUaGUgQ1RSTC1eIGNvbW1hbmQKKwkJCWluIEluc2VydCBtb2RlIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB0aGlzIG9uL29mZgorCQkJfGlfQ1RSTC1efC4KKworCQkJCQkJCSpGKgorRntjaGFyfQkJCVRvIHRoZSBbY291bnRdJ3RoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9IHRvIHRoZSBsZWZ0LgorCQkJVGhlIGN1cnNvciBpcyBwbGFjZWQgb24ge2NoYXJ9IHxpbmNsdXNpdmV8LgorCQkJe2NoYXJ9IGNhbiBiZSBlbnRlcmVkIGxpa2Ugd2l0aCB0aGUgfGZ8IGNvbW1hbmQuCisKKwkJCQkJCQkqdCoKK3R7Y2hhcn0JCQlUaWxsIGJlZm9yZSBbY291bnRdJ3RoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9IHRvIHRoZQorCQkJcmlnaHQuICBUaGUgY3Vyc29yIGlzIHBsYWNlZCBvbiB0aGUgY2hhcmFjdGVyIGxlZnQgb2YKKwkJCXtjaGFyfSB8aW5jbHVzaXZlfC4KKwkJCXtjaGFyfSBjYW4gYmUgZW50ZXJlZCBsaWtlIHdpdGggdGhlIHxmfCBjb21tYW5kLgorCisJCQkJCQkJKlQqCitUe2NoYXJ9CQkJVGlsbCBhZnRlciBbY291bnRdJ3RoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9IHRvIHRoZQorCQkJbGVmdC4gIFRoZSBjdXJzb3IgaXMgcGxhY2VkIG9uIHRoZSBjaGFyYWN0ZXIgcmlnaHQgb2YKKwkJCXtjaGFyfSB8aW5jbHVzaXZlfC4KKwkJCXtjaGFyfSBjYW4gYmUgZW50ZXJlZCBsaWtlIHdpdGggdGhlIHxmfCBjb21tYW5kLgorCisJCQkJCQkJKjsqCis7CQkJUmVwZWF0IGxhdGVzdCBmLCB0LCBGIG9yIFQgW2NvdW50XSB0aW1lcy4KKworCQkJCQkJCSosKgorLAkJCVJlcGVhdCBsYXRlc3QgZiwgdCwgRiBvciBUIGluIG9wcG9zaXRlIGRpcmVjdGlvbgorCQkJW2NvdW50XSB0aW1lcy4KKworVGhlc2UgY29tbWFuZHMgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgY29sdW1uIGluIHRoZSBjdXJyZW50IGxpbmUuCitUaGV5IHN0b3AgYXQgdGhlIGZpcnN0IGNvbHVtbiBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSwgZXhjZXB0ICIkIiwgd2hpY2gKK21heSBtb3ZlIHRvIG9uZSBvZiB0aGUgbmV4dCBsaW5lcy4gIFNlZSAnd2hpY2h3cmFwJyBvcHRpb24gdG8gbWFrZSBzb21lIG9mIHRoZQorY29tbWFuZHMgbW92ZSBhY3Jvc3MgbGluZSBib3VuZGFyaWVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFVwLWRvd24gbW90aW9ucwkJCQkJKnVwLWRvd24tbW90aW9ucyoKKworawkJb3IJCQkJCSprKgorPFVwPgkJb3IJCQkJCSo8VXA+KiAqQ1RSTC1QKgorQ1RSTC1QCQkJW2NvdW50XSBsaW5lcyB1cHdhcmQgfGxpbmV3aXNlfC4KKworagkJb3IJCQkJCSpqKgorPERvd24+CQlvcgkJCQkJKjxEb3duPioKK0NUUkwtSgkJb3IJCQkJCSpDVFJMLUoqCis8Tkw+CQlvcgkJCQkJKjxOTD4qICpDVFJMLU4qCitDVFJMLU4JCQlbY291bnRdIGxpbmVzIGRvd253YXJkIHxsaW5ld2lzZXwuCisKK2drCQlvcgkJCQkJKmdrKiAqZzxVcD4qCitnPFVwPgkJCVtjb3VudF0gZGlzcGxheSBsaW5lcyB1cHdhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisJCQlEaWZmZXJzIGZyb20gJ2snIHdoZW4gbGluZXMgd3JhcCwgYW5kIHdoZW4gdXNlZCB3aXRoCisJCQlhbiBvcGVyYXRvciwgYmVjYXVzZSBpdCdzIG5vdCBsaW5ld2lzZS4gIHtub3QgaW4gVml9CisKK2dqCQlvcgkJCQkJKmdqKiAqZzxEb3duPioKK2c8RG93bj4JCQlbY291bnRdIGRpc3BsYXkgbGluZXMgZG93bndhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisJCQlEaWZmZXJzIGZyb20gJ2onIHdoZW4gbGluZXMgd3JhcCwgYW5kIHdoZW4gdXNlZCB3aXRoCisJCQlhbiBvcGVyYXRvciwgYmVjYXVzZSBpdCdzIG5vdCBsaW5ld2lzZS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqLSoKKy0gIDxtaW51cz4JCVtjb3VudF0gbGluZXMgdXB3YXJkLCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rCisJCQljaGFyYWN0ZXIgfGxpbmV3aXNlfC4KKworKwkJb3IJCQkJCSorKgorQ1RSTC1NCQlvcgkJCQkJKkNUUkwtTSogKjxDUj4qCis8Q1I+CQkJW2NvdW50XSBsaW5lcyBkb3dud2FyZCwgb24gdGhlIGZpcnN0IG5vbi1ibGFuaworCQkJY2hhcmFjdGVyIHxsaW5ld2lzZXwuCisKKwkJCQkJCQkqXyoKK18gIDx1bmRlcnNjb3JlPgkJW2NvdW50XSAtIDEgbGluZXMgZG93bndhcmQsIG9uIHRoZSBmaXJzdCBub24tYmxhbmsKKwkJCWNoYXJhY3RlciB8bGluZXdpc2V8LgorCisJCQkJCQkJKkcqCitHCQkJR290byBsaW5lIFtjb3VudF0sIGRlZmF1bHQgbGFzdCBsaW5lLCBvbiB0aGUgZmlyc3QKKwkJCW5vbi1ibGFuayBjaGFyYWN0ZXIgfGxpbmV3aXNlfC4gIElmICdzdGFydG9mbGluZScgbm90CisJCQlzZXQsIGtlZXAgdGhlIHNhbWUgY29sdW1uLgorCisJCQkJCQkJKjxDLUVuZD4qCis8Qy1FbmQ+CQkJR290byBsaW5lIFtjb3VudF0sIGRlZmF1bHQgbGFzdCBsaW5lLCBvbiB0aGUgbGFzdAorCQkJY2hhcmFjdGVyIHxpbmNsdXNpdmV8LiB7bm90IGluIFZpfQorCis8Qy1Ib21lPglvcgkJCQkJKmdnKiAqPEMtSG9tZT4qCitnZwkJCUdvdG8gbGluZSBbY291bnRdLCBkZWZhdWx0IGZpcnN0IGxpbmUsIG9uIHRoZSBmaXJzdAorCQkJbm9uLWJsYW5rIGNoYXJhY3RlciB8bGluZXdpc2V8LiAgSWYgJ3N0YXJ0b2ZsaW5lJyBub3QKKwkJCXNldCwga2VlcCB0aGUgc2FtZSBjb2x1bW4uCisKKzpbcmFuZ2VdCQlTZXQgdGhlIGN1cnNvciBvbiB0aGUgc3BlY2lmaWVkIGxpbmUgbnVtYmVyLiAgSWYKKwkJCXRoZXJlIGFyZSBzZXZlcmFsIG51bWJlcnMsIHRoZSBsYXN0IG9uZSBpcyB1c2VkLgorCisJCQkJCQkJKk4lKgore2NvdW50fSUJCUdvIHRvIHtjb3VudH0gcGVyY2VudGFnZSBpbiB0aGUgZmlsZSwgb24gdGhlIGZpcnN0CisJCQlub24tYmxhbmsgaW4gdGhlIGxpbmUgfGxpbmV3aXNlfC4gIFRvIGNvbXB1dGUgdGhlIG5ldworCQkJbGluZSBudW1iZXIgdGhpcyBmb3JtdWxhIGlzIHVzZWQ6CisJCQkgICAgKHtjb3VudH0gKiBudW1iZXItb2YtbGluZXMgKyA5OSkgLyAxMDAKKwkJCVNlZSBhbHNvICdzdGFydG9mbGluZScgb3B0aW9uLiAge25vdCBpbiBWaX0KKworOltyYW5nZV1nb1t0b10gW2NvdW50XQkJCQkJKjpnbyogKjpnb3RvKiAqZ28qCitbY291bnRdZ28JCUdvIHRvIHtjb3VudH0gYnl0ZSBpbiB0aGUgYnVmZmVyLiAgRGVmYXVsdCBbY291bnRdIGlzCisJCQlvbmUsIHN0YXJ0IG9mIHRoZSBmaWxlLiAgV2hlbiBnaXZpbmcgW3JhbmdlXSwgdGhlCisJCQlsYXN0IG51bWJlciBpbiBpdCB1c2VkIGFzIHRoZSBieXRlIGNvdW50LiAgRW5kLW9mLWxpbmUKKwkJCWNoYXJhY3RlcnMgYXJlIGNvdW50ZWQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50CisJCQknZmlsZWZvcm1hdCcgc2V0dGluZy4KKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2J5dGVfb2Zmc2V0fCBmZWF0dXJlfQorCitUaGVzZSBjb21tYW5kcyBtb3ZlIHRvIHRoZSBzcGVjaWZpZWQgbGluZS4gIFRoZXkgc3RvcCB3aGVuIHJlYWNoaW5nIHRoZSBmaXJzdAorb3IgdGhlIGxhc3QgbGluZS4gIFRoZSBmaXJzdCB0d28gY29tbWFuZHMgcHV0IHRoZSBjdXJzb3IgaW4gdGhlIHNhbWUgY29sdW1uCisoaWYgcG9zc2libGUpIGFzIGl0IHdhcyBhZnRlciB0aGUgbGFzdCBjb21tYW5kIHRoYXQgY2hhbmdlZCB0aGUgY29sdW1uLAorZXhjZXB0IGFmdGVyIHRoZSAiJCIgY29tbWFuZCwgdGhlbiB0aGUgY3Vyc29yIHdpbGwgYmUgcHV0IG9uIHRoZSBsYXN0CitjaGFyYWN0ZXIgb2YgdGhlIGxpbmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gV29yZCBtb3Rpb25zCQkJCQkJKndvcmQtbW90aW9ucyoKKworPFMtUmlnaHQ+CW9yCQkJCQkqPFMtUmlnaHQ+KiAqdyoKK3cJCQlbY291bnRdIHdvcmRzIGZvcndhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKzxDLVJpZ2h0PglvcgkJCQkJKjxDLVJpZ2h0PiogKlcqCitXCQkJW2NvdW50XSBXT1JEUyBmb3J3YXJkLiAgfGV4Y2x1c2l2ZXwgbW90aW9uLgorCisJCQkJCQkJKmUqCitlCQkJRm9yd2FyZCB0byB0aGUgZW5kIG9mIHdvcmQgW2NvdW50XSB8aW5jbHVzaXZlfC4KKworCQkJCQkJCSpFKgorRQkJCUZvcndhcmQgdG8gdGhlIGVuZCBvZiBXT1JEIFtjb3VudF0gfGluY2x1c2l2ZXwuCisKKzxTLUxlZnQ+CW9yCQkJCQkqPFMtTGVmdD4qICpiKgorYgkJCVtjb3VudF0gd29yZHMgYmFja3dhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKzxDLUxlZnQ+CW9yCQkJCQkqPEMtTGVmdD4qICpCKgorQgkJCVtjb3VudF0gV09SRFMgYmFja3dhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKwkJCQkJCQkqZ2UqCitnZQkJCUJhY2t3YXJkIHRvIHRoZSBlbmQgb2Ygd29yZCBbY291bnRdIHxpbmNsdXNpdmV8LgorCisJCQkJCQkJKmdFKgorZ0UJCQlCYWNrd2FyZCB0byB0aGUgZW5kIG9mIFdPUkQgW2NvdW50XSB8aW5jbHVzaXZlfC4KKworVGhlc2UgY29tbWFuZHMgbW92ZSBvdmVyIHdvcmRzIG9yIFdPUkRTLgorCQkJCQkJCSp3b3JkKgorQSB3b3JkIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgbGV0dGVycywgZGlnaXRzIGFuZCB1bmRlcnNjb3Jlcywgb3IgYQorc2VxdWVuY2Ugb2Ygb3RoZXIgbm9uLWJsYW5rIGNoYXJhY3RlcnMsIHNlcGFyYXRlZCB3aXRoIHdoaXRlIHNwYWNlIChzcGFjZXMsCit0YWJzLCA8RU9MPikuICBUaGlzIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlICdpc2tleXdvcmQnIG9wdGlvbi4KKwkJCQkJCQkqV09SRCoKK0EgV09SRCBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIG5vbi1ibGFuayBjaGFyYWN0ZXJzLCBzZXBhcmF0ZWQgd2l0aCB3aGl0ZQorc3BhY2UuICBBbiBlbXB0eSBsaW5lIGlzIGFsc28gY29uc2lkZXJlZCB0byBiZSBhIHdvcmQgYW5kIGEgV09SRC4KKworQSBzZXF1ZW5jZSBvZiBmb2xkZWQgbGluZXMgaXMgY291bnRlZCBmb3Igb25lIHdvcmQgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLgorInciIGFuZCAiVyIsICJlIiBhbmQgIkUiIG1vdmUgdG8gdGhlIHN0YXJ0L2VuZCBvZiB0aGUgZmlyc3Qgd29yZCBvciBXT1JEIGFmdGVyCithIHJhbmdlIG9mIGZvbGRlZCBsaW5lcy4gICJiIiBhbmQgIkIiIG1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCB3b3JkIG9yCitXT1JEIGJlZm9yZSB0aGUgZm9sZC4KKworU3BlY2lhbCBjYXNlOiAiY3ciIGFuZCAiY1ciIGFyZSB0cmVhdGVkIGxpa2UgImNlIiBhbmQgImNFIiBpZiB0aGUgY3Vyc29yIGlzCitvbiBhIG5vbi1ibGFuay4gIFRoaXMgaXMgYmVjYXVzZSAiY3ciIGlzIGludGVycHJldGVkIGFzIGNoYW5nZS13b3JkLCBhbmQgYQord29yZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgd2hpdGUgc3BhY2UuICB7Vmk6ICJjdyIgd2hlbiBvbiBhIGJsYW5rCitmb2xsb3dlZCBieSBvdGhlciBibGFua3MgY2hhbmdlcyBvbmx5IHRoZSBmaXJzdCBibGFuazsgdGhpcyBpcyBwcm9iYWJseSBhCitidWcsIGJlY2F1c2UgImR3IiBkZWxldGVzIGFsbCB0aGUgYmxhbmtzfQorCitBbm90aGVyIHNwZWNpYWwgY2FzZTogV2hlbiB1c2luZyB0aGUgInciIG1vdGlvbiBpbiBjb21iaW5hdGlvbiB3aXRoIGFuCitvcGVyYXRvciBhbmQgdGhlIGxhc3Qgd29yZCBtb3ZlZCBvdmVyIGlzIGF0IHRoZSBlbmQgb2YgYSBsaW5lLCB0aGUgZW5kIG9mCit0aGF0IHdvcmQgYmVjb21lcyB0aGUgZW5kIG9mIHRoZSBvcGVyYXRlZCB0ZXh0LCBub3QgdGhlIGZpcnN0IHdvcmQgaW4gdGhlCituZXh0IGxpbmUuCisKK1RoZSBvcmlnaW5hbCBWaSBpbXBsZW1lbnRhdGlvbiBvZiAiZSIgaXMgYnVnZ3kuICBGb3IgZXhhbXBsZSwgdGhlICJlIiBjb21tYW5kCit3aWxsIHN0b3Agb24gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgaWYgdGhlIHByZXZpb3VzIGxpbmUgd2FzIGVtcHR5LgorQnV0IHdoZW4geW91IHVzZSAiMmUiIHRoaXMgZG9lcyBub3QgaGFwcGVuLiAgSW4gVmltICJlZSIgYW5kICIyZSIgYXJlIHRoZQorc2FtZSwgd2hpY2ggaXMgbW9yZSBsb2dpY2FsLiAgSG93ZXZlciwgdGhpcyBjYXVzZXMgYSBzbWFsbCBpbmNvbXBhdGliaWxpdHkKK2JldHdlZW4gVmkgYW5kIFZpbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBUZXh0IG9iamVjdCBtb3Rpb25zCQkJCQkqb2JqZWN0LW1vdGlvbnMqCisKKwkJCQkJCQkqKCoKKygJCQlbY291bnRdIHNlbnRlbmNlcyBiYWNrd2FyZC4gIHxleGNsdXNpdmV8IG1vdGlvbi4KKworCQkJCQkJCSopKgorKQkJCVtjb3VudF0gc2VudGVuY2VzIGZvcndhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKwkJCQkJCQkqeyoKK3sJCQlbY291bnRdIHBhcmFncmFwaHMgYmFja3dhcmQuICB8ZXhjbHVzaXZlfCBtb3Rpb24uCisKKwkJCQkJCQkqfSoKK30JCQlbY291bnRdIHBhcmFncmFwaHMgZm9yd2FyZC4gIHxleGNsdXNpdmV8IG1vdGlvbi4KKworCQkJCQkJCSpdXSoKK11dCQkJW2NvdW50XSBzZWN0aW9ucyBmb3J3YXJkIG9yIHRvIHRoZSBuZXh0ICd7JyBpbiB0aGUKKwkJCWZpcnN0IGNvbHVtbi4gIFdoZW4gdXNlZCBhZnRlciBhbiBvcGVyYXRvciwgdGhlbiB0aGUKKwkJCSd9JyBpbiB0aGUgZmlyc3QgY29sdW1uLiAgfGxpbmV3aXNlfAorCisJCQkJCQkJKl1bKgorXVsJCQlbY291bnRdIHNlY3Rpb25zIGZvcndhcmQgb3IgdG8gdGhlIG5leHQgJ30nIGluIHRoZQorCQkJZmlyc3QgY29sdW1uLiAgfGxpbmV3aXNlfAorCisJCQkJCQkJKltbKgorW1sJCQlbY291bnRdIHNlY3Rpb25zIGJhY2t3YXJkIG9yIHRvIHRoZSBwcmV2aW91cyAneycgaW4KKwkJCXRoZSBmaXJzdCBjb2x1bW4uICB8bGluZXdpc2V8CisKKwkJCQkJCQkqW10qCitbXQkJCVtjb3VudF0gc2VjdGlvbnMgYmFja3dhcmQgb3IgdG8gdGhlIHByZXZpb3VzICd9JyBpbgorCQkJdGhlIGZpcnN0IGNvbHVtbi4gIHxsaW5ld2lzZXwKKworVGhlc2UgY29tbWFuZHMgbW92ZSBvdmVyIHRocmVlIGtpbmRzIG9mIHRleHQgb2JqZWN0cy4KKworCQkJCQkJCSpzZW50ZW5jZSoKK0Egc2VudGVuY2UgaXMgZGVmaW5lZCBhcyBlbmRpbmcgYXQgYSAnLicsICchJyBvciAnPycgZm9sbG93ZWQgYnkgZWl0aGVyIHRoZQorZW5kIG9mIGEgbGluZSwgb3IgYnkgYSBzcGFjZSBvciB0YWIuICBBbnkgbnVtYmVyIG9mIGNsb3NpbmcgJyknLCAnXScsICciJworYW5kICcnJyBjaGFyYWN0ZXJzIG1heSBhcHBlYXIgYWZ0ZXIgdGhlICcuJywgJyEnIG9yICc/JyBiZWZvcmUgdGhlIHNwYWNlcywKK3RhYnMgb3IgZW5kIG9mIGxpbmUuICBBIHBhcmFncmFwaCBhbmQgc2VjdGlvbiBib3VuZGFyeSBpcyBhbHNvIGEgc2VudGVuY2UKK2JvdW5kYXJ5LgorSWYgdGhlICdKJyBmbGFnIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycsIGF0IGxlYXN0IHR3byBzcGFjZXMgaGF2ZSB0bworZm9sbG93IHRoZSBwdW5jdHVhdGlvbiBtYXJrOyA8VGFiPnMgYXJlIG5vdCByZWNvZ25pemVkIGFzIHdoaXRlIHNwYWNlLgorVGhlIGRlZmluaXRpb24gb2YgYSBzZW50ZW5jZSBjYW5ub3QgYmUgY2hhbmdlZC4KKworCQkJCQkJCSpwYXJhZ3JhcGgqCitBIHBhcmFncmFwaCBiZWdpbnMgYWZ0ZXIgZWFjaCBlbXB0eSBsaW5lLCBhbmQgYWxzbyBhdCBlYWNoIG9mIGEgc2V0IG9mCitwYXJhZ3JhcGggbWFjcm9zLCBzcGVjaWZpZWQgYnkgdGhlIHBhaXJzIG9mIGNoYXJhY3RlcnMgaW4gdGhlICdwYXJhZ3JhcGhzJworb3B0aW9uLiAgVGhlIGRlZmF1bHQgaXMgIklQTFBQUFFQUCBMSXBwbHBpcGJwIiwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlCittYWNyb3MgIi5JUCIsICIuTFAiLCBldGMuICAoVGhlc2UgYXJlIG5yb2ZmIG1hY3Jvcywgc28gdGhlIGRvdCBtdXN0IGJlIGluIHRoZQorZmlyc3QgY29sdW1uKS4gIEEgc2VjdGlvbiBib3VuZGFyeSBpcyBhbHNvIGEgcGFyYWdyYXBoIGJvdW5kYXJ5LiAgTm90ZSB0aGF0Cit0aGlzIGRvZXMgbm90IGluY2x1ZGUgYSAneycgb3IgJ30nIGluIHRoZSBmaXJzdCBjb2x1bW4uICBBbHNvIG5vdGUgdGhhdCBhCitibGFuayBsaW5lIChvbmx5IGNvbnRhaW5pbmcgd2hpdGUgc3BhY2UpIGlzIE5PVCBhIHBhcmFncmFwaCBib3VuZGFyeS4KKworCQkJCQkJCSpzZWN0aW9uKgorQSBzZWN0aW9uIGJlZ2lucyBhZnRlciBhIGZvcm0tZmVlZCAoPEMtTD4pIGluIHRoZSBmaXJzdCBjb2x1bW4gYW5kIGF0IGVhY2ggb2YKK2Egc2V0IG9mIHNlY3Rpb24gbWFjcm9zLCBzcGVjaWZpZWQgYnkgdGhlIHBhaXJzIG9mIGNoYXJhY3RlcnMgaW4gdGhlCisnc2VjdGlvbnMnIG9wdGlvbi4gIFRoZSBkZWZhdWx0IGlzICJTSE5ISCBIVW5oc2giLCB3aGljaCBkZWZpbmVzIGEgc2VjdGlvbiB0bworc3RhcnQgYXQgdGhlIG5yb2ZmIG1hY3JvcyAiLlNIIiwgIi5OSCIsICIuSCIsICIuSFUiLCAiLm5oIiBhbmQgIi5zaCIuCisKK1RoZSAiXSIgYW5kICJbIiBjb21tYW5kcyBzdG9wIGF0IHRoZSAneycgb3IgJ30nIGluIHRoZSBmaXJzdCBjb2x1bW4uICBUaGlzIGlzCit1c2VmdWwgdG8gZmluZCB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgZnVuY3Rpb24gaW4gYSBDIHByb2dyYW0uICBOb3RlIHRoYXQgdGhlCitmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGNvbW1hbmQgZGV0ZXJtaW5lcyB0aGUgc2VhcmNoIGRpcmVjdGlvbiBhbmQgdGhlCitzZWNvbmQgY2hhcmFjdGVyIHRoZSB0eXBlIG9mIGJyYWNlIGZvdW5kLgorCitJZiB5b3VyICd7JyBvciAnfScgYXJlIG5vdCBpbiB0aGUgZmlyc3QgY29sdW1uLCBhbmQgeW91IHdvdWxkIGxpa2UgdG8gdXNlICJbWyIKK2FuZCAiXV0iIGFueXdheSwgdHJ5IHRoZXNlIG1hcHBpbmdzOiA+CisgICA6bWFwIFtbID97PENSPnc5OVt7CisgICA6bWFwIF1bIC99PENSPmI5OV19CisgICA6bWFwIF1dIGowW1slL3s8Q1I+CisgICA6bWFwIFtdIGskXVslP308Q1I+CitbdHlwZSB0aGVzZSBsaXRlcmFsbHksIHNlZSB8PD58XQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFRleHQgb2JqZWN0IHNlbGVjdGlvbgkJCSpvYmplY3Qtc2VsZWN0KiAqdGV4dC1vYmplY3RzKgorCQkJCQkJKnZfYSogKnZfaSoKKworVGhpcyBpcyBhIHNlcmllcyBvZiBjb21tYW5kcyB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgd2hpbGUgaW4gVmlzdWFsIG1vZGUgb3IKK2FmdGVyIGFuIG9wZXJhdG9yLiAgVGhlIGNvbW1hbmRzIHRoYXQgc3RhcnQgd2l0aCAiYSIgc2VsZWN0ICJhIm4gb2JqZWN0CitpbmNsdWRpbmcgd2hpdGUgc3BhY2UsIHRoZSBjb21tYW5kcyBzdGFydGluZyB3aXRoICJpIiBzZWxlY3QgYW4gImlubmVyIiBvYmplY3QKK3dpdGhvdXQgd2hpdGUgc3BhY2UsIG9yIGp1c3QgdGhlIHdoaXRlIHNwYWNlLiAgVGh1cyB0aGUgImlubmVyIiBjb21tYW5kcworYWx3YXlzIHNlbGVjdCBsZXNzIHRleHQgdGhhbiB0aGUgImEiIGNvbW1hbmRzLgorCitUaGVzZSBjb21tYW5kcyBhcmUge25vdCBpbiBWaX0uCitUaGVzZSBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3RleHRvYmplY3RzfCBmZWF0dXJlIGhhcyBiZWVuCitkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCisJCQkJCQkJKnZfYXcqICphdyoKK2F3CQkJImEgd29yZCIsIHNlbGVjdCBbY291bnRdIHdvcmRzIChzZWUgfHdvcmR8KS4KKwkJCUxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgaW5jbHVkZWQsIGJ1dCBub3QKKwkJCWNvdW50ZWQuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIGxpbmV3aXNlIG1vZGUgImF3IiBzd2l0Y2hlcyB0bworCQkJVmlzdWFsIGNoYXJhY3Rlcndpc2UgbW9kZS4KKworCQkJCQkJCSp2X2l3KiAqaXcqCitpdwkJCSJpbm5lciB3b3JkIiwgc2VsZWN0IFtjb3VudF0gd29yZHMgKHNlZSB8d29yZHwpLgorCQkJV2hpdGUgc3BhY2UgYmV0d2VlbiB3b3JkcyBpcyBjb3VudGVkIHRvby4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbGluZXdpc2UgbW9kZSAiaXciIHN3aXRjaGVzIHRvCisJCQlWaXN1YWwgY2hhcmFjdGVyd2lzZSBtb2RlLgorCisJCQkJCQkJKnZfYVcqICphVyoKK2FXCQkJImEgV09SRCIsIHNlbGVjdCBbY291bnRdIFdPUkRzIChzZWUgfFdPUkR8KS4KKwkJCUxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgaW5jbHVkZWQsIGJ1dCBub3QKKwkJCWNvdW50ZWQuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIGxpbmV3aXNlIG1vZGUgImFXIiBzd2l0Y2hlcyB0bworCQkJVmlzdWFsIGNoYXJhY3Rlcndpc2UgbW9kZS4KKworCQkJCQkJCSp2X2lXKiAqaVcqCitpVwkJCSJpbm5lciBXT1JEIiwgc2VsZWN0IFtjb3VudF0gV09SRHMgKHNlZSB8V09SRHwpLgorCQkJV2hpdGUgc3BhY2UgYmV0d2VlbiB3b3JkcyBpcyBjb3VudGVkIHRvby4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbGluZXdpc2UgbW9kZSAiaVciIHN3aXRjaGVzIHRvCisJCQlWaXN1YWwgY2hhcmFjdGVyd2lzZSBtb2RlLgorCisJCQkJCQkJKnZfYXMqICphcyoKK2FzCQkJImEgc2VudGVuY2UiLCBzZWxlY3QgW2NvdW50XSBzZW50ZW5jZXMgKHNlZQorCQkJfHNlbnRlbmNlfCkuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGUgaXQgaXMgbWFkZSBjaGFyYWN0ZXJ3aXNlLgorCisJCQkJCQkJKnZfaXMqICppcyoKK2lzCQkJImlubmVyIHNlbnRlbmNlIiwgc2VsZWN0IFtjb3VudF0gc2VudGVuY2VzIChzZWUKKwkJCXxzZW50ZW5jZXwpLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgY2hhcmFjdGVyd2lzZS4KKworCQkJCQkJCSp2X2FwKiAqYXAqCithcAkJCSJhIHBhcmFncmFwaCIsIHNlbGVjdCBbY291bnRdIHBhcmFncmFwaHMgKHNlZQorCQkJfHBhcmFncmFwaHwpLgorCQkJRXhjZXB0aW9uOiBhIGJsYW5rIGxpbmUgKG9ubHkgY29udGFpbmluZyB3aGl0ZSBzcGFjZSkKKwkJCWlzIGFsc28gYSBwYXJhZ3JhcGggYm91bmRhcnkuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGUgaXQgaXMgbWFkZSBsaW5ld2lzZS4KKworCQkJCQkJCSp2X2lwKiAqaXAqCitpcAkJCSJpbm5lciBwYXJhZ3JhcGgiLCBzZWxlY3QgW2NvdW50XSBwYXJhZ3JhcGhzIChzZWUKKwkJCXxwYXJhZ3JhcGh8KS4KKwkJCUV4Y2VwdGlvbjogYSBibGFuayBsaW5lIChvbmx5IGNvbnRhaW5pbmcgd2hpdGUgc3BhY2UpCisJCQlpcyBhbHNvIGEgcGFyYWdyYXBoIGJvdW5kYXJ5LgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgbGluZXdpc2UuCisKK2FdCQkJCQkJKnZfYV0qICp2X2FbKiAqYV0qICphWyoKK2FbCQkJImEgW10gYmxvY2siLCBzZWxlY3QgW2NvdW50XSAnWycgJ10nIGJsb2Nrcy4gIFRoaXMKKwkJCWdvZXMgYmFja3dhcmRzIHRvIHRoZSBbY291bnRdIHVuY2xvc2VkICdbJywgYW5kIGZpbmRzCisJCQl0aGUgbWF0Y2hpbmcgJ10nLiAgVGhlIGVuY2xvc2VkIHRleHQgaXMgc2VsZWN0ZWQsCisJCQlpbmNsdWRpbmcgdGhlICdbJyBhbmQgJ10nLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgY2hhcmFjdGVyd2lzZS4KKworaV0JCQkJCQkqdl9pXSogKnZfaVsqICppXSogKmlbKgoraVsJCQkiaW5uZXIgW10gYmxvY2siLCBzZWxlY3QgW2NvdW50XSAnWycgJ10nIGJsb2Nrcy4gIFRoaXMKKwkJCWdvZXMgYmFja3dhcmRzIHRvIHRoZSBbY291bnRdIHVuY2xvc2VkICdbJywgYW5kIGZpbmRzCisJCQl0aGUgbWF0Y2hpbmcgJ10nLiAgVGhlIGVuY2xvc2VkIHRleHQgaXMgc2VsZWN0ZWQsCisJCQlleGNsdWRpbmcgdGhlICdbJyBhbmQgJ10nLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgY2hhcmFjdGVyd2lzZS4KKworYSkJCQkJCQkJKnZfYSkqICphKSogKmEoKgorYSgJCQkJCQkJKnZfYWIqICp2X2EoKiAqYWIqCithYgkJCSJhIGJsb2NrIiwgc2VsZWN0IFtjb3VudF0gYmxvY2tzLCBmcm9tICJbY291bnRdIFsoIiB0bworCQkJdGhlIG1hdGNoaW5nICcpJywgaW5jbHVkaW5nIHRoZSAnKCcgYW5kICcpJyAoc2VlCisJCQl8Wyh8KS4gIERvZXMgbm90IGluY2x1ZGUgd2hpdGUgc3BhY2Ugb3V0c2lkZSBvZiB0aGUKKwkJCXBhcmVudGhlc2lzLgorCQkJV2hlbiB1c2VkIGluIFZpc3VhbCBtb2RlIGl0IGlzIG1hZGUgY2hhcmFjdGVyd2lzZS4KKworaSkJCQkJCQkJKnZfaSkqICppKSogKmkoKgoraSgJCQkJCQkJKnZfaWIqICp2X2koKiAqaWIqCitpYgkJCSJpbm5lciBibG9jayIsIHNlbGVjdCBbY291bnRdIGJsb2NrcywgZnJvbSAiW2NvdW50XSBbKCIKKwkJCXRvIHRoZSBtYXRjaGluZyAnKScsIGV4Y2x1ZGluZyB0aGUgJygnIGFuZCAnKScgKHNlZQorCQkJfFsofCkuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGUgaXQgaXMgbWFkZSBjaGFyYWN0ZXJ3aXNlLgorCithPgkJCQkJCSp2X2E+KiAqdl9hPCogKmE+KiAqYTwqCithPAkJCSJhIDw+IGJsb2NrIiwgc2VsZWN0IFtjb3VudF0gPD4gYmxvY2tzLCBmcm9tIHRoZQorCQkJW2NvdW50XSd0aCB1bm1hdGNoZWQgJzwnIGJhY2t3YXJkcyB0byB0aGUgbWF0Y2hpbmcKKwkJCSc+JywgaW5jbHVkaW5nIHRoZSAnPCcgYW5kICc+Jy4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGNoYXJhY3Rlcndpc2UuCisKK2k+CQkJCQkJKnZfaT4qICp2X2k8KiAqaT4qICppPCoKK2k8CQkJImlubmVyIDw+IGJsb2NrIiwgc2VsZWN0IFtjb3VudF0gPD4gYmxvY2tzLCBmcm9tCisJCQl0aGUgW2NvdW50XSd0aCB1bm1hdGNoZWQgJzwnIGJhY2t3YXJkcyB0byB0aGUgbWF0Y2hpbmcKKwkJCSc+JywgZXhjbHVkaW5nIHRoZSAnPCcgYW5kICc+Jy4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGNoYXJhY3Rlcndpc2UuCisKK2F9CQkJCQkJCSp2X2F9KiAqYX0qICpheyoKK2F7CQkJCQkJCSp2X2FCKiAqdl9heyogKmFCKgorYUIJCQkiYSBCbG9jayIsIHNlbGVjdCBbY291bnRdIEJsb2NrcywgZnJvbSAiW2NvdW50XSBbeyIgdG8KKwkJCXRoZSBtYXRjaGluZyAnfScsIGluY2x1ZGluZyB0aGUgJ3snIGFuZCAnfScgKHNlZQorCQkJfFt7fCkuCisJCQlXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGUgaXQgaXMgbWFkZSBjaGFyYWN0ZXJ3aXNlLgorCitpfQkJCQkJCQkqdl9pfSogKml9KiAqaXsqCitpewkJCQkJCQkqdl9pQiogKnZfaXsqICppQioKK2lCCQkJImlubmVyIEJsb2NrIiwgc2VsZWN0IFtjb3VudF0gQmxvY2tzLCBmcm9tICJbY291bnRdIFt7IgorCQkJdG8gdGhlIG1hdGNoaW5nICd9JywgZXhjbHVkaW5nIHRoZSAneycgYW5kICd9JyAoc2VlCisJCQl8W3t8KS4KKwkJCVdoZW4gdXNlZCBpbiBWaXN1YWwgbW9kZSBpdCBpcyBtYWRlIGNoYXJhY3Rlcndpc2UuCisKK1doZW4gdXNlZCBhZnRlciBhbiBvcGVyYXRvcjoKK0ZvciBub24tYmxvY2sgb2JqZWN0czoKKwlGb3IgdGhlICJhIiBjb21tYW5kczogVGhlIG9wZXJhdG9yIGFwcGxpZXMgdG8gdGhlIG9iamVjdCBhbmQgdGhlIHdoaXRlCisJc3BhY2UgYWZ0ZXIgdGhlIG9iamVjdC4gIElmIHRoZXJlIGlzIG5vIHdoaXRlIHNwYWNlIGFmdGVyIHRoZSBvYmplY3QKKwlvciB3aGVuIHRoZSBjdXJzb3Igd2FzIGluIHRoZSB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlIG9iamVjdCwgdGhlIHdoaXRlCisJc3BhY2UgYmVmb3JlIHRoZSBvYmplY3QgaXMgaW5jbHVkZWQuCisJRm9yIHRoZSAiaW5uZXIiIGNvbW1hbmRzOiBJZiB0aGUgY3Vyc29yIHdhcyBvbiB0aGUgb2JqZWN0LCB0aGUKKwlvcGVyYXRvciBhcHBsaWVzIHRvIHRoZSBvYmplY3QuICBJZiB0aGUgY3Vyc29yIHdhcyBvbiB3aGl0ZSBzcGFjZSwgdGhlCisJb3BlcmF0b3IgYXBwbGllcyB0byB0aGUgd2hpdGUgc3BhY2UuCitGb3IgYSBibG9jayBvYmplY3Q6CisJVGhlIG9wZXJhdG9yIGFwcGxpZXMgdG8gdGhlIGJsb2NrIHdoZXJlIHRoZSBjdXJzb3IgaXMgaW4sIG9yIHRoZSBibG9jaworCW9uIHdoaWNoIHRoZSBjdXJzb3IgaXMgb24gb25lIG9mIHRoZSBicmFjZXMuICBGb3IgdGhlICJpbm5lciIgY29tbWFuZHMKKwl0aGUgc3Vycm91bmRpbmcgYnJhY2VzIGFyZSBleGNsdWRlZC4gIEZvciB0aGUgImEiIGNvbW1hbmRzLCB0aGUgYnJhY2VzCisJYXJlIGluY2x1ZGVkLgorCitXaGVuIHVzZWQgaW4gVmlzdWFsIG1vZGU6CitXaGVuIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIFZpc3VhbCBhcmVhIGFyZSB0aGUgc2FtZSAoanVzdCBhZnRlciB0eXBpbmcgInYiKToKKwlPbmUgb2JqZWN0IGlzIHNlbGVjdGVkLCB0aGUgc2FtZSBhcyBmb3IgdXNpbmcgYW4gb3BlcmF0b3IuCitXaGVuIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIFZpc3VhbCBhcmVhIGFyZSBub3QgdGhlIHNhbWU6CisJRm9yIG5vbi1ibG9jayBvYmplY3RzIHRoZSBhcmVhIGlzIGV4dGVuZGVkIGJ5IG9uZSBvYmplY3Qgb3IgdGhlIHdoaXRlCisJc3BhY2UgdXAgdG8gdGhlIG5leHQgb2JqZWN0LCBvciBib3RoIGZvciB0aGUgImEiIG9iamVjdHMuICBUaGUKKwlkaXJlY3Rpb24gaW4gd2hpY2ggdGhpcyBoYXBwZW5zIGRlcGVuZHMgb24gd2hpY2ggc2lkZSBvZiB0aGUgVmlzdWFsCisJYXJlYSB0aGUgY3Vyc29yIGlzLiAgRm9yIHRoZSBibG9jayBvYmplY3RzIHRoZSBibG9jayBpcyBleHRlbmRlZCBvbmUKKwlsZXZlbCBvdXR3YXJkcy4KKworRm9yIGlsbHVzdHJhdGlvbiwgaGVyZSBpcyBhIGxpc3Qgb2YgZGVsZXRlIGNvbW1hbmRzLCBncm91cGVkIGZyb20gc21hbGwgdG8gYmlnCitvYmplY3RzLiAgTm90ZSB0aGF0IGZvciBhIHNpbmdsZSBjaGFyYWN0ZXIgYW5kIGEgd2hvbGUgbGluZSB0aGUgZXhpc3RpbmcgdmkKK21vdmVtZW50IGNvbW1hbmRzIGFyZSB1c2VkLgorCSJkbCIJZGVsZXRlIGNoYXJhY3RlciAoYWxpYXM6ICJ4IikJCXxkbHwKKwkiZGl3IglkZWxldGUgaW5uZXIgd29yZAkJCSpkaXcqCisJImRhdyIJZGVsZXRlIGEgd29yZAkJCQkqZGF3KgorCSJkaVciCWRlbGV0ZSBpbm5lciBXT1JEIChzZWUgfFdPUkR8KQkJKmRpVyoKKwkiZGFXIglkZWxldGUgYSBXT1JEIChzZWUgfFdPUkR8KQkJKmRhVyoKKwkiZGQiCWRlbGV0ZSBvbmUgbGluZQkJCQl8ZGR8CisJImRpcyIJZGVsZXRlIGlubmVyIHNlbnRlbmNlCQkJKmRpcyoKKwkiZGFzIglkZWxldGUgYSBzZW50ZW5jZQkJCSpkYXMqCisJImRpYiIJZGVsZXRlIGlubmVyICcoJyAnKScgYmxvY2sJCSpkaWIqCisJImRhYiIJZGVsZXRlIGEgJygnICcpJyBibG9jawkJCSpkYWIqCisJImRpcCIJZGVsZXRlIGlubmVyIHBhcmFncmFwaAkJCSpkaXAqCisJImRhcCIJZGVsZXRlIGEgcGFyYWdyYXBoCQkJKmRhcCoKKwkiZGlCIglkZWxldGUgaW5uZXIgJ3snICd9JyBibG9jawkJKmRpQioKKwkiZGFCIglkZWxldGUgYSAneycgJ30nIGJsb2NrCQkJKmRhQioKKworTm90ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIGEgbW92ZW1lbnQgY29tbWFuZCBhbmQgYW4gb2JqZWN0LiAgVGhlCittb3ZlbWVudCBjb21tYW5kIG9wZXJhdGVzIGZyb20gaGVyZSAoY3Vyc29yIHBvc2l0aW9uKSB0byB3aGVyZSB0aGUgbW92ZW1lbnQKK3Rha2VzIHVzLiAgV2hlbiB1c2luZyBhbiBvYmplY3QgdGhlIHdob2xlIG9iamVjdCBpcyBvcGVyYXRlZCB1cG9uLCBubyBtYXR0ZXIKK3doZXJlIG9uIHRoZSBvYmplY3QgdGhlIGN1cnNvciBpcy4gIEZvciBleGFtcGxlLCBjb21wYXJlICJkdyIgYW5kICJkYXciOiAiZHciCitkZWxldGVzIGZyb20gdGhlIGN1cnNvciBwb3NpdGlvbiB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgd29yZCwgImRhdyIgZGVsZXRlcwordGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciBhbmQgdGhlIHNwYWNlIGFmdGVyIG9yIGJlZm9yZSBpdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBNYXJrcwkJCQkJKm1hcmstbW90aW9ucyogKkUyMCogKkU3OCoKKworSnVtcGluZyB0byBhIG1hcmsgY2FuIGJlIGRvbmUgaW4gdHdvIHdheXM6CisxLiBXaXRoIGAgKGJhY2t0aWNrKToJICBUaGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbgorCQkJICBhbmQgdGhlIG1vdGlvbiBpcyB8ZXhjbHVzaXZlfC4KKzIuIFdpdGggJyAoc2luZ2xlIHF1b3RlKTogVGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIG9uIHRoZSBmaXJzdCBub24tYmxhbmsKKwkJCSAgY2hhcmFjdGVyIGluIHRoZSBsaW5lIG9mIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gYW5kCisJCQkgIHRoZSBtb3Rpb24gaXMgbGluZXdpc2UuCisKKwkJCQkJCSptKiAqbWFyayogKk1hcmsqCitte2EtekEtWn0JCVNldCBtYXJrIHthLXpBLVp9IGF0IGN1cnNvciBwb3NpdGlvbiAoZG9lcyBub3QgbW92ZQorCQkJdGhlIGN1cnNvciwgdGhpcyBpcyBub3QgYSBtb3Rpb24gY29tbWFuZCkuCisKKwkJCQkJCSptJyogKm1gKgorbScgIG9yICBtYAkJU2V0IHRoZSBwcmV2aW91cyBjb250ZXh0IG1hcmsuICBUaGlzIGNhbiBiZSBqdW1wZWQgdG8KKwkJCXdpdGggdGhlICInJyIgb3IgImBgIiBjb21tYW5kIChkb2VzIG5vdCBtb3ZlIHRoZQorCQkJY3Vyc29yLCB0aGlzIGlzIG5vdCBhIG1vdGlvbiBjb21tYW5kKS4KKworCQkJCQkJKm1bKiAqbV0qCittWyAgb3IgIG1dCQlTZXQgdGhlIHwnW3wgb3IgfCddfCBtYXJrLiAgVXNlZnVsIHdoZW4gYW4gb3BlcmF0b3IgaXMKKwkJCXRvIGJlIHNpbXVsYXRlZCBieSBtdWx0aXBsZSBjb21tYW5kcy4gIChkb2VzIG5vdCBtb3ZlCisJCQl0aGUgY3Vyc29yLCB0aGlzIGlzIG5vdCBhIG1vdGlvbiBjb21tYW5kKS4KKworCQkJCQkJKjptYSogKjptYXJrKiAqRTE5MSoKKzpbcmFuZ2VdbWFbcmtdIHthLXpBLVp9CVNldCBtYXJrIHthLXpBLVp9IGF0IGxhc3QgbGluZSBudW1iZXIgaW4gW3JhbmdlXSwKKwkJCWNvbHVtbiAwLiAgRGVmYXVsdCBpcyBjdXJzb3IgbGluZS4KKworCQkJCQkJKjprKgorOltyYW5nZV1re2EtekEtWn0JU2FtZSBhcyA6bWFyaywgYnV0IHRoZSBzcGFjZSBiZWZvcmUgdGhlIG1hcmsgbmFtZSBjYW4KKwkJCWJlIG9taXR0ZWQuCisKKwkJCQkJCSonKiAqJ2EqICpgKiAqYGEqCisne2Eten0gIGB7YS16fQkJSnVtcCB0byB0aGUgbWFyayB7YS16fS4KKworCQkJCQkJKidBKiAqJzAqICpgQSogKmAwKgorJ3tBLVowLTl9ICBge0EtWjAtOX0JVG8gdGhlIG1hcmsge0EtWjAtOX0gaW4gdGhlIGNvcnJlY3QgZmlsZSAobm90IGEgbW90aW9uCisJCQljb21tYW5kIHdoZW4gaW4gYW5vdGhlciBmaWxlKS4gIHtub3QgaW4gVml9CisKKwkJCQkJCSpnJyogKmcnYSogKmdgKiAqZ2BhKgorZyd7bWFya30gIGdge21hcmt9CisJCQlKdW1wIHRvIHRoZSB7bWFya30sIGJ1dCBkb24ndCBjaGFuZ2UgdGhlIGp1bXBsaXN0IHdoZW4KKwkJCWp1bXBpbmcgd2l0aGluIHRoZSBjdXJyZW50IGJ1ZmZlci4gIEV4YW1wbGU6ID4KKwkJCQlnYCIKKzwJCQlqdW1wcyB0byB0aGUgbGFzdCBrbm93biBwb3NpdGlvbiBpbiBhIGZpbGUuICBTZWUKKwkJCSRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltLiAge25vdCBpbiBWaX0KKworCQkJCQkJKjptYXJrcyoKKzptYXJrcwkJCUxpc3QgYWxsIHRoZSBjdXJyZW50IG1hcmtzIChub3QgYSBtb3Rpb24gY29tbWFuZCkuCisJCQlUaGUgfCcofCwgfCcpfCwgfCd7fCBhbmQgfCd9fCBtYXJrcyBhcmUgbm90IGxpc3RlZC4KKwkJCXtub3QgaW4gVml9CisJCQkJCQkqRTI4MyoKKzptYXJrcyB7YXJnfQkJTGlzdCB0aGUgbWFya3MgdGhhdCBhcmUgbWVudGlvbmVkIGluIHthcmd9IChub3QgYQorCQkJbW90aW9uIGNvbW1hbmQpLiAgRm9yIGV4YW1wbGU6ID4KKwkJCQk6bWFya3MgYUIKKzwJCQl0byBsaXN0IG1hcmtzICdhJyBhbmQgJ0InLiAge25vdCBpbiBWaX0KKworQSBtYXJrIGlzIG5vdCB2aXNpYmxlIGluIGFueSB3YXkuICBJdCBpcyBqdXN0IGEgcG9zaXRpb24gaW4gdGhlIGZpbGUgdGhhdCBpcworcmVtZW1iZXJlZC4gIERvIG5vdCBjb25mdXNlIG1hcmtzIHdpdGggbmFtZWQgcmVnaXN0ZXJzLCB0aGV5IGFyZSB0b3RhbGx5Cit1bnJlbGF0ZWQuCisKKydhIC0gJ3oJCWxvd2VyY2FzZSBtYXJrcywgdmFsaWQgd2l0aGluIG9uZSBmaWxlCisnQSAtICdaCQl1cHBlcmNhc2UgbWFya3MsIGFsc28gY2FsbGVkIGZpbGUgbWFya3MsIHZhbGlkIGJldHdlZW4gZmlsZXMKKycwIC0gJzkJCW51bWJlcmVkIG1hcmtzLCBzZXQgZnJvbSAudmltaW5mbyBmaWxlCisKK0xvd2VyY2FzZSBtYXJrcyAnYSB0byAneiBhcmUgcmVtZW1iZXJlZCBhcyBsb25nIGFzIHRoZSBmaWxlIHJlbWFpbnMgaW4gdGhlCitidWZmZXIgbGlzdC4gIElmIHlvdSByZW1vdmUgdGhlIGZpbGUgZnJvbSB0aGUgYnVmZmVyIGxpc3QsIGFsbCBpdHMgbWFya3MgYXJlCitsb3N0LiAgSWYgeW91IGRlbGV0ZSBhIGxpbmUgdGhhdCBjb250YWlucyBhIG1hcmssIHRoYXQgbWFyayBpcyBlcmFzZWQuCisKK1RvIGRlbGV0ZSBhIG1hcms6IENyZWF0ZSBhIG5ldyBsaW5lLCBwb3NpdGlvbiB0aGUgbWFyayB0aGVyZSwgZGVsZXRlIHRoZSBsaW5lLgorRS5nLjogIm88RXNjPm14ZGQiLiAgVGhpcyBkb2VzIGNoYW5nZSB0aGUgZmlsZSB0aG91Z2guICBVc2luZyAidSIgd29uJ3Qgd29yaywKK2l0IGFsc28gcmVzdG9yZXMgbWFya3MuCisKK0xvd2VyY2FzZSBtYXJrcyBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wZXJhdG9ycy4gIEZvciBleGFtcGxlOiAiZCd0IgorZGVsZXRlcyB0aGUgbGluZXMgZnJvbSB0aGUgY3Vyc29yIHBvc2l0aW9uIHRvIG1hcmsgJ3QnLiAgSGludDogVXNlIG1hcmsgJ3QnIGZvcgorVG9wLCAnYicgZm9yIEJvdHRvbSwgZXRjLi4gIExvd2VyY2FzZSBtYXJrcyBhcmUgcmVzdG9yZWQgd2hlbiB1c2luZyB1bmRvIGFuZAorcmVkby4KKworVXBwZXJjYXNlIG1hcmtzICdBIHRvICdaIGluY2x1ZGUgdGhlIGZpbGUgbmFtZS4gIHtWaTogbm8gdXBwZXJjYXNlIG1hcmtzfSBZb3UKK2NhbiB1c2UgdGhlbSB0byBqdW1wIGZyb20gZmlsZSB0byBmaWxlLiAgWW91IGNhbiBvbmx5IHVzZSBhbiB1cHBlcmNhc2UgbWFyaword2l0aCBhbiBvcGVyYXRvciBpZiB0aGUgbWFyayBpcyBpbiB0aGUgY3VycmVudCBmaWxlLiAgVGhlIGxpbmUgbnVtYmVyIG9mIHRoZQorbWFyayByZW1haW5zIGNvcnJlY3QsIGV2ZW4gaWYgeW91IGluc2VydC9kZWxldGUgbGluZXMgb3IgZWRpdCBhbm90aGVyIGZpbGUgZm9yCithIG1vbWVudC4gIFdoZW4gdGhlICd2aW1pbmZvJyBvcHRpb24gaXMgbm90IGVtcHR5LCB1cHBlcmNhc2UgbWFya3MgYXJlIGtlcHQgaW4KK3RoZSAudmltaW5mbyBmaWxlLiAgU2VlIHx2aW1pbmZvLWZpbGUtbWFya3N8LgorCitOdW1iZXJlZCBtYXJrcyAnMCB0byAnOSBhcmUgcXVpdGUgZGlmZmVyZW50LiAgVGhleSBjYW4gbm90IGJlIHNldCBkaXJlY3RseS4KK1RoZXkgYXJlIG9ubHkgcHJlc2VudCB3aGVuIHVzaW5nIGEgdmltaW5mbyBmaWxlIHx2aW1pbmZvLWZpbGV8LiAgQmFzaWNhbGx5ICcwCitpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnNvciB3aGVuIHlvdSBsYXN0IGV4aXRlZCBWaW0sICcxIHRoZSBsYXN0IGJ1dCBvbmUKK3RpbWUsIGV0Yy4gIFVzZSB0aGUgInIiIGZsYWcgaW4gJ3ZpbWluZm8nIHRvIHNwZWNpZnkgZmlsZXMgZm9yIHdoaWNoIG5vCitOdW1iZXJlZCBtYXJrIHNob3VsZCBiZSBzdG9yZWQuICBTZWUgfHZpbWluZm8tZmlsZS1tYXJrc3wuCisKKworCQkJCQkJCSonWyogKmBbKgorJ1sgIGBbCQkJVG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcHJldmlvdXNseSBjaGFuZ2VkCisJCQlvciB5YW5rZWQgdGV4dC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqJ10qICpgXSoKKyddICBgXQkJCVRvIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgcHJldmlvdXNseSBjaGFuZ2VkIG9yCisJCQl5YW5rZWQgdGV4dC4gIHtub3QgaW4gVml9CisKK0FmdGVyIGV4ZWN1dGluZyBhbiBvcGVyYXRvciB0aGUgQ3Vyc29yIGlzIHB1dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0Cit0aGF0IHdhcyBvcGVyYXRlZCB1cG9uLiAgQWZ0ZXIgYSBwdXQgY29tbWFuZCAoInAiIG9yICJQIikgdGhlIGN1cnNvciBpcworc29tZXRpbWVzIHBsYWNlZCBhdCB0aGUgZmlyc3QgaW5zZXJ0ZWQgbGluZSBhbmQgc29tZXRpbWVzIG9uIHRoZSBsYXN0IGluc2VydGVkCitjaGFyYWN0ZXIuICBUaGUgZm91ciBjb21tYW5kcyBhYm92ZSBwdXQgdGhlIGN1cnNvciBhdCBlaXRoZXIgZW5kLiAgRXhhbXBsZToKK0FmdGVyIHlhbmtpbmcgMTAgbGluZXMgeW91IHdhbnQgdG8gZ28gdG8gdGhlIGxhc3Qgb25lIG9mIHRoZW06ICIxMFknXSIuICBBZnRlcgoraW5zZXJ0aW5nIHNldmVyYWwgbGluZXMgd2l0aCB0aGUgInAiIGNvbW1hbmQgeW91IHdhbnQgdG8ganVtcCB0byB0aGUgbG93ZXN0CitpbnNlcnRlZCBsaW5lOiAicCddIi4gIFRoaXMgYWxzbyB3b3JrcyBmb3IgdGV4dCB0aGF0IGhhcyBiZWVuIGluc2VydGVkLgorCitOb3RlOiBBZnRlciBkZWxldGluZyB0ZXh0LCB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgYXJlIHRoZSBzYW1lLCBleGNlcHQKK3doZW4gdXNpbmcgYmxvY2t3aXNlIFZpc3VhbCBtb2RlLiAgVGhlc2UgY29tbWFuZHMgZG8gbm90IHdvcmsgd2hlbiBubyBjaGFuZ2UKK3dhcyBtYWRlIHlldCBpbiB0aGUgY3VycmVudCBmaWxlLgorCisJCQkJCQkJKic8KiAqYDwqCisnPCAgYDwJCQlUbyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsYXN0IHNlbGVjdGVkIFZpc3VhbAorCQkJYXJlYSBpbiB0aGUgY3VycmVudCBidWZmZXIuICB7bm90IGluIFZpfS4KKworCQkJCQkJCSonPiogKmA+KgorJz4gIGA+CQkJVG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBsYXN0IHNlbGVjdGVkIFZpc3VhbAorCQkJYXJlYSBpbiB0aGUgY3VycmVudCBidWZmZXIuICB7bm90IGluIFZpfS4KKworCQkJCQkJCSonJyogKmBgKgorJycgIGBgCQkJVG8gdGhlIHBvc2l0aW9uIGJlZm9yZSBsYXRlc3QganVtcCwgb3Igd2hlcmUgdGhlIGxhc3QKKwkJCSJtJyIgb3IgIm1gIiBjb21tYW5kIHdhcyBnaXZlbi4gIE5vdCBzZXQgd2hlbiB0aGUKKwkJCXw6a2VlcGp1bXBzfCBjb21tYW5kIG1vZGlmaWVyIHdhcyB1c2VkLgorCQkJQWxzbyBzZWUgfHJlc3RvcmUtcG9zaXRpb258LgorCisJCQkJCQkJKidxdW90ZSogKmBxdW90ZSoKKyciICBgIgkJCVRvIHRoZSBjdXJzb3IgcG9zaXRpb24gd2hlbiBsYXN0IGV4aXRpbmcgdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlci4gIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0CisJCQlsaW5lLiAgU2VlIHxsYXN0LXBvc2l0aW9uLWp1bXB8IGZvciBob3cgdG8gdXNlIHRoaXMKKwkJCWZvciBlYWNoIG9wZW5lZCBmaWxlLgorCQkJT25seSBvbmUgcG9zaXRpb24gaXMgcmVtZW1iZXJlZCBwZXIgYnVmZmVyLCBub3Qgb25lCisJCQlmb3IgZWFjaCB3aW5kb3cuICBBcyBsb25nIGFzIHRoZSBidWZmZXIgaXMgdmlzaWJsZSBpbgorCQkJYSB3aW5kb3cgdGhlIHBvc2l0aW9uIHdvbid0IGJlIGNoYW5nZWQuCisJCQl7bm90IGluIFZpfS4KKworCQkJCQkJCSonXiogKmBeKgorJ14gIGBeCQkJVG8gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBjdXJzb3Igd2FzIHRoZSBsYXN0IHRpbWUKKwkJCXdoZW4gSW5zZXJ0IG1vZGUgd2FzIHN0b3BwZWQgIFRoaXMgaXMgdXNlZCBieSB0aGUgfGdpfAorCQkJY29tbWFuZC4gIE5vdCBzZXQgd2hlbiB0aGUgfDprZWVwanVtcHN8IGNvbW1hbmQKKwkJCW1vZGlmaWVyIHdhcyB1c2VkLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSonLiogKmAuKgorJy4gIGAuCQkJVG8gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBsYXN0IGNoYW5nZSB3YXMgbWFkZS4gIFRoZQorCQkJcG9zaXRpb24gaXMgYXQgb3IgbmVhciB3aGVyZSB0aGUgY2hhbmdlIHN0YXJ0ZWQuCisJCQlTb21ldGltZXMgYSBjb21tYW5kIGlzIGV4ZWN1dGVkIGFzIHNldmVyYWwgY2hhbmdlcywKKwkJCXRoZW4gdGhlIHBvc2l0aW9uIGNhbiBiZSBuZWFyIHRoZSBlbmQgb2Ygd2hhdCB0aGUKKwkJCWNvbW1hbmQgY2hhbmdlZC4gIEZvciBleGFtcGxlIHdoZW4gaW5zZXJ0aW5nIGEgd29yZCwKKwkJCXRoZSBwb3NpdGlvbiB3aWxsIGJlIG9uIHRoZSBsYXN0IGNoYXJhY3Rlci4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqJygqICpgKCoKKycoICBgKAkJCVRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBzZW50ZW5jZSwgbGlrZSB0aGUgfCh8CisJCQljb21tYW5kLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSonKSogKmApKgorJykgIGApCQkJVG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzZW50ZW5jZSwgbGlrZSB0aGUgfCl8CisJCQljb21tYW5kLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSoneyogKmB7KgorJ3sgIGB7CQkJVG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHBhcmFncmFwaCwgbGlrZSB0aGUgfHt8CisJCQljb21tYW5kLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSonfSogKmB9KgorJ30gIGB9CQkJVG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwYXJhZ3JhcGgsIGxpa2UgdGhlIHx9fAorCQkJY29tbWFuZC4gIHtub3QgaW4gVml9CisKK1RoZXNlIGNvbW1hbmRzIGFyZSBub3QgbWFya3MgdGhlbXNlbHZlcywgYnV0IGp1bXAgdG8gYSBtYXJrOgorCisJCQkJCQkJKl0nKgorXScJCQlbY291bnRdIHRpbWVzIHRvIG5leHQgbGluZSB3aXRoIGEgbG93ZXJjYXNlIG1hcmsgYmVsb3cKKwkJCXRoZSBjdXJzb3IsIG9uIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIGluIHRoZQorCQkJbGluZS4ge25vdCBpbiBWaX0KKworCQkJCQkJCSpdYCoKK11gCQkJW2NvdW50XSB0aW1lcyB0byBsb3dlcmNhc2UgbWFyayBhZnRlciB0aGUgY3Vyc29yLiB7bm90CisJCQlpbiBWaX0KKworCQkJCQkJCSpbJyoKK1snCQkJW2NvdW50XSB0aW1lcyB0byBwcmV2aW91cyBsaW5lIHdpdGggYSBsb3dlcmNhc2UgbWFyaworCQkJYmVmb3JlIHRoZSBjdXJzb3IsIG9uIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIGluCisJCQl0aGUgbGluZS4ge25vdCBpbiBWaX0KKworCQkJCQkJCSpbYCoKK1tgCQkJW2NvdW50XSB0aW1lcyB0byBsb3dlcmNhc2UgbWFyayBiZWZvcmUgdGhlIGN1cnNvci4KKwkJCXtub3QgaW4gVml9CisKKworOmxvY1trbWFya3NdIHtjb21tYW5kfQkJCQkJKjpsb2MqICo6bG9ja21hcmtzKgorCQkJRXhlY3V0ZSB7Y29tbWFuZH0gd2l0aG91dCBhZGp1c3RpbmcgbWFya3MuICBUaGlzIGlzCisJCQl1c2VmdWwgd2hlbiBjaGFuZ2luZyB0ZXh0IGluIGEgd2F5IHRoYXQgdGhlIGxpbmUgY291bnQKKwkJCXdpbGwgYmUgdGhlIHNhbWUgd2hlbiB0aGUgY2hhbmdlIGhhcyBjb21wbGV0ZWQuCisJCQlXQVJOSU5HOiBXaGVuIHRoZSBsaW5lIGNvdW50IGRvZXMgY2hhbmdlLCBtYXJrcyBiZWxvdworCQkJdGhlIGNoYW5nZSB3aWxsIGtlZXAgdGhlaXIgbGluZSBudW1iZXIsIHRodXMgbW92ZSB0bworCQkJYW5vdGhlciB0ZXh0IGxpbmUuCisJCQlUaGVzZSBpdGVtcyB3aWxsIG5vdCBiZSBhZGp1c3RlZCBmb3IgZGVsZXRlZC9pbnNlcnRlZAorCQkJbGluZXM6CisJCQktIGxvd2VyIGNhc2UgbGV0dGVyIG1hcmtzICdhIC0gJ3oKKwkJCS0gdXBwZXIgY2FzZSBsZXR0ZXIgbWFya3MgJ0EgLSAnWgorCQkJLSBudW1iZXJlZCBtYXJrcyAnMCAtICc5CisJCQktIGxhc3QgaW5zZXJ0IHBvc2l0aW9uICdeCisJCQktIGxhc3QgY2hhbmdlIHBvc2l0aW9uICcuCisJCQktIHRoZSBWaXN1YWwgYXJlYSAnPCBhbmQgJz4KKwkJCS0gbGluZSBudW1iZXJzIGluIHBsYWNlZCBzaWducworCQkJLSBsaW5lIG51bWJlcnMgaW4gcXVpY2tmaXggcG9zaXRpb25zCisJCQktIHBvc2l0aW9ucyBpbiB0aGUgfGp1bXBsaXN0fAorCQkJLSBwb3NpdGlvbnMgaW4gdGhlIHx0YWdzdGFja3wKKwkJCVRoZXNlIGl0ZW1zIHdpbGwgc3RpbGwgYmUgYWRqdXN0ZWQ6CisJCQktIHByZXZpb3VzIGNvbnRleHQgbWFyayAnJworCQkJLSB0aGUgY3Vyc29yIHBvc2l0aW9uCisJCQktIHRoZSB2aWV3IG9mIGEgd2luZG93IG9uIGEgYnVmZmVyCisJCQktIGZvbGRzCisJCQktIGRpZmZzCisKKzprZWVbcG1hcmtzXSB7Y29tbWFuZH0JCQkJCSo6a2VlKiAqOmtlZXBtYXJrcyoKKwkJCUN1cnJlbnRseSBvbmx5IGhhcyBlZmZlY3QgZm9yIHRoZSBmaWx0ZXIgY29tbWFuZAorCQkJfDpyYW5nZSF8OgorCQkJLSBXaGVuIHRoZSBudW1iZXIgb2YgbGluZXMgYWZ0ZXIgZmlsdGVyaW5nIGlzIGVxdWFsIHRvCisJCQkgIG9yIGxhcmdlciB0aGFuIGJlZm9yZSwgYWxsIG1hcmtzIGFyZSBrZXB0IGF0IHRoZQorCQkJICBzYW1lIGxpbmUgbnVtYmVyLgorCQkJLSBXaGVuIHRoZSBudW1iZXIgb2YgbGluZXMgZGVjcmVhc2VzLCB0aGUgbWFya3MgaW4gdGhlCisJCQkgIGlsbmVzIHRoYXQgZGlzYXBwZWFyZWQgYXJlIGRlbGV0ZWQuCisJCQlJbiBhbnkgY2FzZSB0aGUgbWFya3MgYmVsb3cgdGhlIGZpbHRlcmVkIHRleHQgaGF2ZQorCQkJdGhlaXIgbGluZSBudW1iZXJzIGFkanVzdGVkLCB0aHVzIHN0aWNrIHRvIHRoZSB0ZXh0LAorCQkJYXMgdXN1YWwuCisJCQlXaGVuIHRoZSAnUicgZmxhZyBpcyBtaXNzaW5nIGZyb20gJ2Nwb3B0aW9ucycgdGhpcyBoYXMKKwkJCXRoZSBzYW1lIGVmZmVjdCBhcyB1c2luZyAiOmtlZXBtYXJrcyIuCisKKwkJCQkJCQkqOmtlZXBqKiAqOmtlZXBqdW1wcyoKKzprZWVwalt1bXBzXSB7Y29tbWFuZH0KKwkJCURvIG5vdCBjaGFuZ2UgdGhlIHwnJ3wsIHwnLnwgYW5kIHwnXnwgbWFya3MsIHRoZQorCQkJfGp1bXBsaXN0fCBvciB0aGUgfGNoYW5nZWxpc3R8LiAgVXNlZnVsIHdoZW4gbWFraW5nIGEKKwkJCWNoYW5nZSBvciBpbnNlcnRpbmcgdGV4dCBhdXRvbWF0aWNhbGx5IGFuZCB0aGUgdXNlcgorCQkJZG9lc24ndCB3YW50IHRvIGdvIHRvIHRoaXMgcG9zaXRpb24uICBFLmcuLCB3aGVuCisJCQl1cGRhdGluZyBhICJMYXN0IGNoYW5nZSIgdGltZXN0YW1wOiA+CisJYXV0b2NtZCBCdWZXcml0ZVByZSxGaWxlV3JpdGVQcmUgKi5hYmMga2VlcGp1bXBzIGNhbGwgU2V0TGFzdENoYW5nZSgpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gSnVtcHMJCQkJCSpqdW1wLW1vdGlvbnMqCisKK0EgImp1bXAiIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOiAiJyIsICJgIiwgIkciLCAiLyIsICI/IiwgIm4iLAorIk4iLCAiJSIsICIoIiwgIikiLCAiW1siLCAiXV0iLCAieyIsICJ9IiwgIjpzIiwgIjp0YWciLCAiTCIsICJNIiwgIkgiIGFuZAordGhlIGNvbW1hbmRzIHRoYXQgc3RhcnQgZWRpdGluZyBhIG5ldyBmaWxlLiAgSWYgeW91IG1ha2UgdGhlIGN1cnNvciAianVtcCIKK3dpdGggb25lIG9mIHRoZXNlIGNvbW1hbmRzLCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvciBiZWZvcmUgdGhlIGp1bXAgaXMKK3JlbWVtYmVyZWQuICBZb3UgY2FuIHJldHVybiB0byB0aGF0IHBvc2l0aW9uIHdpdGggdGhlICInJyIgYW5kICJgYCIgY29tbWFuZCwKK3VubGVzcyB0aGUgbGluZSBjb250YWluaW5nIHRoYXQgcG9zaXRpb24gd2FzIGNoYW5nZWQgb3IgZGVsZXRlZC4KKworCQkJCQkJCSpDVFJMLU8qCitDVFJMLU8JCQlHbyB0byBbY291bnRdIE9sZGVyIGN1cnNvciBwb3NpdGlvbiBpbiBqdW1wIGxpc3QKKwkJCShub3QgYSBtb3Rpb24gY29tbWFuZCkuICB7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2l0aG91dCB0aGUgK2p1bXBsaXN0IGZlYXR1cmV9CisKKzxUYWI+CQlvcgkJCQkJKkNUUkwtSSogKjxUYWI+KgorQ1RSTC1JCQkJR28gdG8gW2NvdW50XSBuZXdlciBjdXJzb3IgcG9zaXRpb24gaW4ganVtcCBsaXN0CisJCQkobm90IGEgbW90aW9uIGNvbW1hbmQpLgorCQkJSW4gYSB8cXVpY2tmaXgtd2luZG93fCBpdCB0YWtlcyB5b3UgdG8gdGhlIHBvc2l0aW9uIG9mCisJCQl0aGUgZXJyb3IgdW5kZXIgdGhlIGN1cnNvci4KKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aXRob3V0IHRoZSAranVtcGxpc3QgZmVhdHVyZX0KKworCQkJCQkJCSo6anUqICo6anVtcHMqCis6anVbbXBzXQkJUHJpbnQgdGhlIGp1bXAgbGlzdCAobm90IGEgbW90aW9uIGNvbW1hbmQpLiAge25vdCBpbgorCQkJVml9IHtub3QgYXZhaWxhYmxlIHdpdGhvdXQgdGhlICtqdW1wbGlzdCBmZWF0dXJlfQorCisJCQkJCQkJKmp1bXBsaXN0KgorSnVtcHMgYXJlIHJlbWVtYmVyZWQgaW4gYSBqdW1wIGxpc3QuICBXaXRoIHRoZSBDVFJMLU8gYW5kIENUUkwtSSBjb21tYW5kIHlvdQorY2FuIGdvIHRvIGN1cnNvciBwb3NpdGlvbnMgYmVmb3JlIG9sZGVyIGp1bXBzLCBhbmQgYmFjayBhZ2Fpbi4gIFRodXMgeW91IGNhbgorbW92ZSB1cCBhbmQgZG93biB0aGUgbGlzdC4gIFRoZXJlIGlzIGEgc2VwYXJhdGUganVtcCBsaXN0IGZvciBlYWNoIHdpbmRvdy4KK1RoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGlzIGZpeGVkIGF0IDEwMC4KK3tub3QgYXZhaWxhYmxlIHdpdGhvdXQgdGhlICtqdW1wbGlzdCBmZWF0dXJlfQorCitGb3IgZXhhbXBsZSwgYWZ0ZXIgdGhyZWUganVtcCBjb21tYW5kcyB5b3UgaGF2ZSB0aGlzIGp1bXAgbGlzdDoKKworICBqdW1wIGxpbmUgIGNvbCBmaWxlL2xpbmUgfgorICAgIDMJICAxICAgIDAgc29tZSB0ZXh0IH4KKyAgICAyCSA3MCAgICAwIGFub3RoZXIgbGluZSB+CisgICAgMSAgMTE1NCAgIDIzIGVuZC4gfgorID4gfgorCitUaGUgImZpbGUvbGluZSIgY29sdW1uIHNob3dzIHRoZSBmaWxlIG5hbWUsIG9yIHRoZSB0ZXh0IGF0IHRoZSBqdW1wIGlmIGl0IGlzCitpbiB0aGUgY3VycmVudCBmaWxlIChhbiBpbmRlbnQgaXMgcmVtb3ZlZCBhbmQgYSBsb25nIGxpbmUgaXMgdHJ1bmNhdGVkIHRvIGZpdAoraW4gdGhlIHdpbmRvdykuCisKK1lvdSBhcmUgY3VycmVudGx5IGluIGxpbmUgMTE2Ny4gIElmIHlvdSB0aGVuIHVzZSB0aGUgQ1RSTC1PIGNvbW1hbmQsIHRoZQorY3Vyc29yIGlzIHB1dCBpbiBsaW5lIDExNTQuICBUaGlzIHJlc3VsdHMgaW46CisKKyAganVtcCBsaW5lICBjb2wgZmlsZS9saW5lIH4KKyAgICAyCSAgMSAgICAwIHNvbWUgdGV4dCB+CisgICAgMQkgNzAgICAgMCBhbm90aGVyIGxpbmUgfgorID4gIDAgIDExNTQgICAyMyBlbmQuIH4KKyAgICAxICAxMTY3ICAgIDAgZm9vIGJhciB+CisKK1RoZSBwb2ludGVyIHdpbGwgYmUgc2V0IGF0IHRoZSBsYXN0IHVzZWQganVtcCBwb3NpdGlvbi4gIFRoZSBuZXh0IENUUkwtTworY29tbWFuZCB3aWxsIHVzZSB0aGUgZW50cnkgYWJvdmUgaXQsIHRoZSBuZXh0IENUUkwtSSBjb21tYW5kIHdpbGwgdXNlIHRoZQorZW50cnkgYmVsb3cgaXQuICBJZiB0aGUgcG9pbnRlciBpcyBiZWxvdyB0aGUgbGFzdCBlbnRyeSwgdGhpcyBpbmRpY2F0ZXMgdGhhdAoreW91IGRpZCBub3QgdXNlIGEgQ1RSTC1JIG9yIENUUkwtTyBiZWZvcmUuICBJbiB0aGlzIGNhc2UgdGhlIENUUkwtTyBjb21tYW5kCit3aWxsIGNhdXNlIHRoZSBjdXJzb3IgcG9zaXRpb24gdG8gYmUgYWRkZWQgdG8gdGhlIGp1bXAgbGlzdCwgc28geW91IGNhbiBnZXQKK2JhY2sgdG8gdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgQ1RSTC1PLiAgSW4gdGhpcyBjYXNlIHRoaXMgaXMgbGluZSAxMTY3LgorCitXaXRoIG1vcmUgQ1RSTC1PIGNvbW1hbmRzIHlvdSB3aWxsIGdvIHRvIGxpbmVzIDcwIGFuZCAxLiAgSWYgeW91IHVzZSBDVFJMLUkKK3lvdSBjYW4gZ28gYmFjayB0byAxMTU0IGFuZCAxMTY3IGFnYWluLiAgTm90ZSB0aGF0IHRoZSBudW1iZXIgaW4gdGhlICJqdW1wIgorY29sdW1uIGluZGljYXRlcyB0aGUgY291bnQgZm9yIHRoZSBDVFJMLU8gb3IgQ1RSTC1JIGNvbW1hbmQgdGhhdCB0YWtlcyB5b3UgdG8KK3RoaXMgcG9zaXRpb24uCisKK0lmIHlvdSB1c2UgYSBqdW1wIGNvbW1hbmQsIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIGlzIGluc2VydGVkIGF0IHRoZSBlbmQgb2YKK3RoZSBqdW1wIGxpc3QuICBJZiB0aGUgc2FtZSBsaW5lIHdhcyBhbHJlYWR5IGluIHRoZSBqdW1wIGxpc3QsIGl0IGlzIHJlbW92ZWQuCitUaGUgcmVzdWx0IGlzIHRoYXQgd2hlbiByZXBlYXRpbmcgQ1RSTC1PIHlvdSB3aWxsIGdldCBiYWNrIHRvIG9sZCBwb3NpdGlvbnMKK29ubHkgb25jZS4KKworV2hlbiB0aGUgfDprZWVwanVtcHN8IGNvbW1hbmQgbW9kaWZpZXIgaXMgdXNlZCwganVtcHMgYXJlIG5vdCBzdG9yZWQgaW4gdGhlCitqdW1wbGlzdC4KKworQWZ0ZXIgdGhlIENUUkwtTyBjb21tYW5kIHRoYXQgZ290IHlvdSBpbnRvIGxpbmUgMTE1NCB5b3UgY291bGQgZ2l2ZSBhbm90aGVyCitqdW1wIGNvbW1hbmQgKGUuZy4sICJHIikuICBUaGUganVtcCBsaXN0IHdvdWxkIHRoZW4gYmVjb21lOgorCisgIGp1bXAgbGluZSAgY29sIGZpbGUvbGluZSB+CisgICAgNAkgIDEgICAgMCBzb21lIHRleHQgfgorICAgIDMJIDcwICAgIDAgYW5vdGhlciBsaW5lIH4KKyAgICAyICAxMTY3ICAgIDAgZm9vIGJhciB+CisgICAgMSAgMTE1NCAgIDIzIGVuZC4gfgorID4gfgorCitUaGUgbGluZSBudW1iZXJzIHdpbGwgYmUgYWRqdXN0ZWQgZm9yIGRlbGV0ZWQgYW5kIGluc2VydGVkIGxpbmVzLiAgVGhpcyBmYWlscworaWYgeW91IHN0b3AgZWRpdGluZyBhIGZpbGUgd2l0aG91dCB3cml0aW5nLCBsaWtlIHdpdGggIjpuISIuCisKK1doZW4geW91IHNwbGl0IGEgd2luZG93LCB0aGUganVtcGxpc3Qgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIG5ldyB3aW5kb3cuCisKK0lmIHlvdSBoYXZlIGluY2x1ZGVkIHRoZSAnIGl0ZW0gaW4gdGhlICd2aW1pbmZvJyBvcHRpb24gdGhlIGp1bXBsaXN0IHdpbGwgYmUKK3N0b3JlZCBpbiB0aGUgdmltaW5mbyBmaWxlIGFuZCByZXN0b3JlZCB3aGVuIHN0YXJ0aW5nIFZpbS4KKworCitDSEFOR0UgTElTVCBKVU1QUwkJCSpjaGFuZ2VsaXN0KiAqY2hhbmdlLWxpc3QtanVtcHMqICpFNjY0KgorCitXaGVuIG1ha2luZyBhIGNoYW5nZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGlzIHJlbWVtYmVyZWQuICBPbmUgcG9zaXRpb24gaXMKK3JlbWVtYmVyZWQgZm9yIGV2ZXJ5IGNoYW5nZSB0aGF0IGNhbiBiZSB1bmRvbmUsIHVubGVzcyBpdCBpcyBjbG9zZSB0byBhCitwcmV2aW91cyBjaGFuZ2UuICBUd28gY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8ganVtcCB0byBwb3NpdGlvbnMgb2YgY2hhbmdlcywKK2Fsc28gdGhvc2UgdGhhdCBoYXZlIGJlZW4gdW5kb25lOgorCisJCQkJCQkJKmc7KiAqRTY2MioKK2c7CQkJR28gdG8gW2NvdW50XSBvbGRlciBwb3NpdGlvbiBpbiBjaGFuZ2UgbGlzdC4KKwkJCUlmIFtjb3VudF0gaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBvbGRlciBjaGFuZ2UKKwkJCXBvc2l0aW9ucyBnbyB0byB0aGUgb2xkZXN0IGNoYW5nZS4KKwkJCUlmIHRoZXJlIGlzIG5vIG9sZGVyIGNoYW5nZSBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuLgorCQkJKG5vdCBhIG1vdGlvbiBjb21tYW5kKQorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdpdGhvdXQgdGhlICtqdW1wbGlzdCBmZWF0dXJlfQorCisJCQkJCQkJKmcsKiAqRTY2MyoKK2csCQkJR28gdG8gW2NvdW50XSBuZXdlciBjdXJzb3IgcG9zaXRpb24gaW4gY2hhbmdlIGxpc3QuCisJCQlKdXN0IGxpa2UgImc7fCBidXQgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KKwkJCShub3QgYSBtb3Rpb24gY29tbWFuZCkKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aXRob3V0IHRoZSAranVtcGxpc3QgZmVhdHVyZX0KKworV2hlbiB1c2luZyBhIGNvdW50IHlvdSBqdW1wIGFzIGZhciBiYWNrIG9yIGZvcndhcmQgYXMgcG9zc2libGUuICBUaHVzIHlvdSBjYW4KK3VzZSAiOTk5ZzsiIHRvIGdvIHRvIHRoZSBmaXJzdCBjaGFuZ2UgZm9yIHdoaWNoIHRoZSBwb3NpdGlvbiBpcyBzdGlsbAorcmVtZW1iZXJlZC4gIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2hhbmdlIGxpc3QgaXMgZml4ZWQgYW5kIGlzIHRoZSBzYW1lCithcyBmb3IgdGhlIHxqdW1wbGlzdHwuCisKK1doZW4gdHdvIHVuZG8tYWJsZSBjaGFuZ2VzIGFyZSBpbiB0aGUgc2FtZSBsaW5lIGFuZCBhdCBhIGNvbHVtbiBwb3NpdGlvbiBsZXNzCit0aGFuICd0ZXh0d2lkdGgnIGFwYXJ0IG9ubHkgdGhlIGxhc3Qgb25lIGlzIHJlbWVtYmVyZWQuICBUaGlzIGF2b2lkcyB0aGF0IGEKK3NlcXVlbmNlIG9mIHNtYWxsIGNoYW5nZXMgaW4gYSBsaW5lLCBmb3IgZXhhbXBsZSAieHh4eHgiLCBhZGRzIG1hbnkgcG9zaXRpb25zCit0byB0aGUgY2hhbmdlIGxpc3QuICBXaGVuICd0ZXh0d2lkdGgnIGlzIHplcm8gJ3dyYXBtYXJnaW4nIGlzIHVzZWQuICBXaGVuIHRoYXQKK2Fsc28gaXNuJ3Qgc2V0IGEgZml4ZWQgbnVtYmVyIG9mIDc5IGlzIHVzZWQuICBEZXRhaWw6IEZvciB0aGUgY29tcHV0YXRpb25zCitieXRlcyBhcmUgdXNlZCwgbm90IGNoYXJhY3RlcnMsIHRvIGF2b2lkIGEgc3BlZWQgcGVuYWx0eSAodGhpcyBvbmx5IG1hdHRlcnMKK2ZvciBtdWx0aS1ieXRlIGVuY29kaW5ncykuCisKK05vdGUgdGhhdCB3aGVuIHRleHQgaGFzIGJlZW4gaW5zZXJ0ZWQgb3IgZGVsZXRlZCB0aGUgY3Vyc29yIHBvc2l0aW9uIG1pZ2h0IGJlCithIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYW5nZS4gIEVzcGVjaWFsbHkgd2hlbiBsaW5lcyBoYXZlCitiZWVuIGRlbGV0ZWQuCisKK1doZW4gdGhlIHw6a2VlcGp1bXBzfCBjb21tYW5kIG1vZGlmaWVyIGlzIHVzZWQgdGhlIHBvc2l0aW9uIG9mIGEgY2hhbmdlIGlzIG5vdAorcmVtZW1iZXJlZC4KKworCQkJCQkJCSo6Y2hhbmdlcyoKKzpjaGFuZ2VzCQlQcmludCB0aGUgY2hhbmdlIGxpc3QuICBBICI+IiBjaGFyYWN0ZXIgaW5kaWNhdGVzIHRoZQorCQkJY3VycmVudCBwb3NpdGlvbi4gIEp1c3QgYWZ0ZXIgYSBjaGFuZ2UgaXQgaXMgYmVsb3cgdGhlCisJCQluZXdlc3QgZW50cnksIGluZGljYXRpbmcgdGhhdCAiZzsiIHRha2VzIHlvdSB0byB0aGUKKwkJCW5ld2VzdCBlbnRyeSBwb3NpdGlvbi4gIFRoZSBmaXJzdCBjb2x1bW4gaW5kaWNhdGVzIHRoZQorCQkJY291bnQgbmVlZGVkIHRvIHRha2UgeW91IHRvIHRoaXMgcG9zaXRpb24uICBFeGFtcGxlOgorCisJCQkJY2hhbmdlIGxpbmUgIGNvbCB0ZXh0IH4KKwkJCQkgICAgMyAgICAgOSAgICA4IGJsYSBibGEgYmxhCisJCQkJICAgIDIgICAgMTEgICA1NyBmb28gaXMgYSBiYXIKKwkJCQkgICAgMSAgICAxNCAgIDU0IHRoZSBsYXRlc3QgY2hhbmdlZCBsaW5lCisJCQkJPgorCisJCQlUaGUgIjNnOyIgY29tbWFuZCB0YWtlcyB5b3UgdG8gbGluZSA5LiAgVGhlbiB0aGUKKwkJCW91dHB1dCBvZiAiOmNoYW5nZXMgaXM6CisKKwkJCQljaGFuZ2UgbGluZSAgY29sIHRleHQgfgorCQkJCT4gICAwICAgICA5ICAgIDggYmxhIGJsYSBibGEKKwkJCQkgICAgMSAgICAxMSAgIDU3IGZvbyBpcyBhIGJhcgorCQkJCSAgICAyICAgIDE0ICAgNTQgdGhlIGxhdGVzdCBjaGFuZ2VkIGxpbmUKKworCQkJTm93IHlvdSBjYW4gdXNlICJnLCIgdG8gZ28gdG8gbGluZSAxMSBhbmQgIjJnLCIgdG8gZ28KKwkJCXRvIGxpbmUgMTQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gVmFyaW91cyBtb3Rpb25zCQkJCSp2YXJpb3VzLW1vdGlvbnMqCisKKwkJCQkJCQkqJSoKKyUJCQlGaW5kIHRoZSBuZXh0IGl0ZW0gaW4gdGhpcyBsaW5lIGFmdGVyIG9yIHVuZGVyIHRoZQorCQkJY3Vyc29yIGFuZCBqdW1wIHRvIGl0cyBtYXRjaC4gfGluY2x1c2l2ZXwgbW90aW9uLgorCQkJSXRlbXMgY2FuIGJlOgorCQkJKFt7fV0pCQlwYXJlbnRoZXNpcyBvciAoY3VybHkvc3F1YXJlKSBicmFja2V0cworCQkJCQkodGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZQorCQkJCQknbWF0Y2hwYWlycycgb3B0aW9uKQorCQkJLyogKi8JCXN0YXJ0IG9yIGVuZCBvZiBDLXN0eWxlIGNvbW1lbnQKKwkJCSNpZiwgI2lmZGVmLCAjZWxzZSwgI2VsaWYsICNlbmRpZgorCQkJCQlDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgKHdoZW4gdGhlCisJCQkJCWN1cnNvciBpcyBvbiB0aGUgIyBvciBubyAoW3sKKwkJCQkJZm9sbG93aW5nKQorCQkJRm9yIG90aGVyIGl0ZW1zIHRoZSBtYXRjaGl0IHBsdWdpbiBjYW4gYmUgdXNlZCwgc2VlCisJCQl8bWF0Y2hpdC1pbnN0YWxsfC4KKworCQkJV2hlbiAnY3BvcHRpb25zJyBjb250YWlucyAiTSIgfGNwby1NfCBiYWNrc2xhc2hlcworCQkJYmVmb3JlIHBhcmVucyBhbmQgYnJhY2VzIGFyZSBpZ25vcmVkLiAgV2l0aG91dCAiTSIgdGhlCisJCQludW1iZXIgb2YgYmFja3NsYXNoZXMgbWF0dGVyczogYW4gZXZlbiBudW1iZXIgZG9lc24ndAorCQkJbWF0Y2ggd2l0aCBhbiBvZGQgbnVtYmVyLiAgVGh1cyBpbiAiKCBcKSApIiBhbmQgIlwoICgKKwkJCVwpIiB0aGUgZmlyc3QgYW5kIGxhc3QgcGFyZW50aGVzaXMgbWF0Y2guCisJCQlXaGVuIHRoZSAnJScgY2hhcmFjdGVyIGlzIG5vdCBwcmVzZW50IGluICdjcG9wdGlvbnMnCisJCQl8Y3BvLSV8LCBwYXJlbnMgYW5kIGJyYWNlcyBpbnNpZGUgZG91YmxlIHF1b3RlcyBhcmUKKwkJCWlnbm9yZWQsIHVubGVzcyB0aGUgbnVtYmVyIG9mIHBhcmVucy9icmFjZXMgaW4gYSBsaW5lCisJCQlpcyB1bmV2ZW4gYW5kIHRoaXMgbGluZSBhbmQgdGhlIHByZXZpb3VzIG9uZSBkb2VzIG5vdAorCQkJZW5kIGluIGEgYmFja3NsYXNoLiAgJygnLCAneycsICdbJywgJ10nLCAnfScgYW5kICcpJworCQkJYXJlIGFsc28gaWdub3JlZCAocGFyZW5zIGFuZCBicmFjZXMgaW5zaWRlIHNpbmdsZQorCQkJcXVvdGVzKS4gIE5vdGUgdGhhdCB0aGlzIHdvcmtzIGZpbmUgZm9yIEMsIGJ1dCBub3QgZm9yCisJCQlQZXJsLCB3aGVyZSBzaW5nbGUgcXVvdGVzIGFyZSB1c2VkIGZvciBzdHJpbmdzLgorCQkJTm8gY291bnQgaXMgYWxsb3dlZCAoe2NvdW50fSUganVtcHMgdG8gYSBsaW5lIHtjb3VudH0KKwkJCXBlcmNlbnRhZ2UgZG93biB0aGUgZmlsZSB8TiV8KS4gIFVzaW5nICclJyBvbgorCQkJI2lmLyNlbHNlLyNlbmRpZiBtYWtlcyB0aGUgbW92ZW1lbnQgbGluZXdpc2UuCisKKwkJCQkJCSpbKCoKK1soCQkJZ28gdG8gW2NvdW50XSBwcmV2aW91cyB1bm1hdGNoZWQgJygnLgorCQkJfGV4Y2x1c2l2ZXwgbW90aW9uLiB7bm90IGluIFZpfQorCisJCQkJCQkqW3sqCitbewkJCWdvIHRvIFtjb3VudF0gcHJldmlvdXMgdW5tYXRjaGVkICd7Jy4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKworCQkJCQkJKl0pKgorXSkJCQlnbyB0byBbY291bnRdIG5leHQgdW5tYXRjaGVkICcpJy4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKworCQkJCQkJKl19KgorXX0JCQlnbyB0byBbY291bnRdIG5leHQgdW5tYXRjaGVkICd9Jy4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKworVGhlIGFib3ZlIGZvdXIgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gZ28gdG8gdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgY3VycmVudAorY29kZSBibG9jay4gIEl0IGlzIGxpa2UgZG9pbmcgIiUiIG9uIHRoZSAnKCcsICcpJywgJ3snIG9yICd9JyBhdCB0aGUgb3RoZXIKK2VuZCBvZiB0aGUgY29kZSBibG9jaywgYnV0IHlvdSBjYW4gZG8gdGhpcyBmcm9tIGFueXdoZXJlIGluIHRoZSBjb2RlIGJsb2NrLgorVmVyeSB1c2VmdWwgZm9yIEMgcHJvZ3JhbXMuICBFeGFtcGxlOiBXaGVuIHN0YW5kaW5nIG9uICJjYXNlIHg6IiwgIlt7IiB3aWxsCiticmluZyB5b3UgYmFjayB0byB0aGUgc3dpdGNoIHN0YXRlbWVudC4KKworCQkJCQkJKl1tKgorXW0JCQlHbyB0byBbY291bnRdIG5leHQgc3RhcnQgb2YgYSBtZXRob2QgKGZvciBKYXZhIG9yCisJCQlzaW1pbGFyIHN0cnVjdHVyZWQgbGFuZ3VhZ2UpLiAgV2hlbiBub3QgYmVmb3JlIHRoZQorCQkJc3RhcnQgb2YgYSBtZXRob2QsIGp1bXAgdG8gdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUKKwkJCWNsYXNzLiAgV2hlbiBubyAneycgaXMgZm91bmQgYWZ0ZXIgdGhlIGN1cnNvciwgdGhpcyBpcworCQkJYW4gZXJyb3IuICB8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisJCQkJCQkqXU0qCitdTQkJCUdvIHRvIFtjb3VudF0gbmV4dCBlbmQgb2YgYSBtZXRob2QgKGZvciBKYXZhIG9yCisJCQlzaW1pbGFyIHN0cnVjdHVyZWQgbGFuZ3VhZ2UpLiAgV2hlbiBub3QgYmVmb3JlIHRoZSBlbmQKKwkJCW9mIGEgbWV0aG9kLCBqdW1wIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGNsYXNzLgorCQkJV2hlbiBubyAnfScgaXMgZm91bmQgYWZ0ZXIgdGhlIGN1cnNvciwgdGhpcyBpcyBhbgorCQkJZXJyb3IuIHxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKwkJCQkJCSpbbSoKK1ttCQkJR28gdG8gW2NvdW50XSBwcmV2aW91cyBzdGFydCBvZiBhIG1ldGhvZCAoZm9yIEphdmEgb3IKKwkJCXNpbWlsYXIgc3RydWN0dXJlZCBsYW5ndWFnZSkuICBXaGVuIG5vdCBhZnRlciB0aGUKKwkJCXN0YXJ0IG9mIGEgbWV0aG9kLCBqdW1wIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlCisJCQljbGFzcy4gIFdoZW4gbm8gJ3snIGlzIGZvdW5kIGJlZm9yZSB0aGUgY3Vyc29yIHRoaXMgaXMKKwkJCWFuIGVycm9yLiB8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisJCQkJCQkqW00qCitbTQkJCUdvIHRvIFtjb3VudF0gcHJldmlvdXMgZW5kIG9mIGEgbWV0aG9kIChmb3IgSmF2YSBvcgorCQkJc2ltaWxhciBzdHJ1Y3R1cmVkIGxhbmd1YWdlKS4gIFdoZW4gbm90IGFmdGVyIHRoZQorCQkJZW5kIG9mIGEgbWV0aG9kLCBqdW1wIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlCisJCQljbGFzcy4gIFdoZW4gbm8gJ30nIGlzIGZvdW5kIGJlZm9yZSB0aGUgY3Vyc29yIHRoaXMgaXMKKwkJCWFuIGVycm9yLiB8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisKK1RoZSBhYm92ZSB0d28gY29tbWFuZHMgYXNzdW1lIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgYSBjbGFzcyB3aXRoIG1ldGhvZHMuCitUaGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBzdXJyb3VuZGVkIGluICd7JyBhbmQgJ30nLiAgRWFjaCBtZXRob2QgaW4gdGhlIGNsYXNzCitpcyBhbHNvIHN1cnJvdW5kZWQgd2l0aCAneycgYW5kICd9Jy4gIFRoaXMgYXBwbGllcyB0byB0aGUgSmF2YSBsYW5ndWFnZS4gIFRoZQorZmlsZSBsb29rcyBsaWtlIHRoaXM6ID4KKworCS8vIGNvbW1lbnQKKwljbGFzcyBmb28geworCQlpbnQgbWV0aG9kX29uZSgpIHsKKwkJCWJvZHlfb25lKCk7CisJCX0KKwkJaW50IG1ldGhvZF90d28oKSB7CisJCQlib2R5X3R3bygpOworCQl9CisJfQorU3RhcnRpbmcgd2l0aCB0aGUgY3Vyc29yIG9uICJib2R5X3R3bygpIiwgdXNpbmcgIlttIiB3aWxsIGp1bXAgdG8gdGhlICd7JyBhdAordGhlIHN0YXJ0IG9mICJtZXRob2RfdHdvKCkiIChvYnZpb3VzbHkgdGhpcyBpcyBtdWNoIG1vcmUgdXNlZnVsIHdoZW4gdGhlCittZXRob2QgaXMgbG9uZyEpLiAgVXNpbmcgIjJbbSIgd2lsbCBqdW1wIHRvIHRoZSBzdGFydCBvZiAibWV0aG9kX29uZSgpIi4KK1VzaW5nICIzW20iIHdpbGwganVtcCB0byB0aGUgc3RhcnQgb2YgdGhlIGNsYXNzLgorCisJCQkJCQkqWyMqCitbIwkJCWdvIHRvIFtjb3VudF0gcHJldmlvdXMgdW5tYXRjaGVkICIjaWYiIG9yICIjZWxzZSIuCisJCQl8ZXhjbHVzaXZlfCBtb3Rpb24uIHtub3QgaW4gVml9CisKKwkJCQkJCSpdIyoKK10jCQkJZ28gdG8gW2NvdW50XSBuZXh0IHVubWF0Y2hlZCAiI2Vsc2UiIG9yICIjZW5kaWYiLgorCQkJfGV4Y2x1c2l2ZXwgbW90aW9uLiB7bm90IGluIFZpfQorCitUaGVzZSB0d28gY29tbWFuZHMgd29yayBpbiBDIHByb2dyYW1zIHRoYXQgY29udGFpbiAjaWYvI2Vsc2UvI2VuZGlmCitjb25zdHJ1Y3RzLiAgSXQgYnJpbmdzIHlvdSB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSAjaWYvI2Vsc2UvI2VuZGlmIHdoZXJlCit0aGUgY3VycmVudCBsaW5lIGlzIGluY2x1ZGVkLiAgWW91IGNhbiB0aGVuIHVzZSAiJSIgdG8gZ28gdG8gdGhlIG1hdGNoaW5nIGxpbmUuCisKKwkJCQkJCSpbc3RhciogKlsvKgorWyogIG9yICBbLwkJZ28gdG8gW2NvdW50XSBwcmV2aW91cyBzdGFydCBvZiBhIEMgY29tbWVudCAiLyoiLgorCQkJfGV4Y2x1c2l2ZXwgbW90aW9uLiB7bm90IGluIFZpfQorCisJCQkJCQkqXXN0YXIqICpdLyoKK10qICBvciAgXS8JCWdvIHRvIFtjb3VudF0gbmV4dCBlbmQgb2YgYSBDIGNvbW1lbnQgIiovIi4KKwkJCXxleGNsdXNpdmV8IG1vdGlvbi4ge25vdCBpbiBWaX0KKworCisJCQkJCQkqSCoKK0gJCQlUbyBsaW5lIFtjb3VudF0gZnJvbSB0b3AgKEhvbWUpIG9mIHdpbmRvdyAoZGVmYXVsdDoKKwkJCWZpcnN0IGxpbmUgb24gdGhlIHdpbmRvdykgb24gdGhlIGZpcnN0IG5vbi1ibGFuaworCQkJY2hhcmFjdGVyIHxsaW5ld2lzZXwuICBTZWUgYWxzbyAnc3RhcnRvZmxpbmUnIG9wdGlvbi4KKwkJCUN1cnNvciBpcyBhZGp1c3RlZCBmb3IgJ3Njcm9sbG9mZicgb3B0aW9uLgorCisJCQkJCQkqTSoKK00JCQlUbyBNaWRkbGUgbGluZSBvZiB3aW5kb3csIG9uIHRoZSBmaXJzdCBub24tYmxhbmsKKwkJCWNoYXJhY3RlciB8bGluZXdpc2V8LiAgU2VlIGFsc28gJ3N0YXJ0b2ZsaW5lJyBvcHRpb24uCisKKwkJCQkJCSpMKgorTAkJCVRvIGxpbmUgW2NvdW50XSBmcm9tIGJvdHRvbSBvZiB3aW5kb3cgKGRlZmF1bHQ6IExhc3QKKwkJCWxpbmUgb24gdGhlIHdpbmRvdykgb24gdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIKKwkJCXxsaW5ld2lzZXwuICBTZWUgYWxzbyAnc3RhcnRvZmxpbmUnIG9wdGlvbi4KKwkJCUN1cnNvciBpcyBhZGp1c3RlZCBmb3IgJ3Njcm9sbG9mZicgb3B0aW9uLgorCis8TGVmdE1vdXNlPgkJTW92ZXMgdG8gdGhlIHBvc2l0aW9uIG9uIHRoZSBzY3JlZW4gd2hlcmUgdGhlIG1vdXNlCisJCQljbGljayBpcyB8aW5jbHVzaXZlfC4gIFNlZSBhbHNvIHw8TGVmdE1vdXNlPnwuICBJZiB0aGUKKwkJCXBvc2l0aW9uIGlzIGluIGEgc3RhdHVzIGxpbmUsIHRoYXQgd2luZG93IGlzIG1hZGUgdGhlCisJCQlhY3RpdmUgd2luZG93IGFuZCB0aGUgY3Vyc29yIGlzIG5vdCBtb3ZlZC4gIHtub3QgaW4gVml9CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9uZXRiZWFucy50eHQgYi9ydW50aW1lL2RvYy9uZXRiZWFucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3MjVlMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL25ldGJlYW5zLnR4dApAQCAtMCwwICsxLDczNSBAQAorKm5ldGJlYW5zLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwMQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBHb3Jkb24gUHJpZXVyCisKKworTmV0QmVhbnMgRXh0ZXJuYWxFZGl0b3IgSW50ZWdyYXRpb24gRmVhdHVyZXMJCSpuZXRiZWFucyoKKwkJCQkJCQkqbmV0YmVhbnMtc3VwcG9ydCoKKzEuICBJbnRyb2R1Y3Rpb24JCQkJfG5ldGJlYW5zLWludHJvfAorMi4gIE5ldEJlYW5zIEtleSBCaW5kaW5ncwkJCXxuZXRiZWFucy1rZXliaW5kaW5nc3wKKzMuICBDb25maWd1cmluZyBWaW0gZm9yIE5ldEJlYW5zCQl8bmV0YmVhbnMtY29uZmlndXJlfAorNC4gIERvd25sb2FkaW5nIE5ldEJlYW5zCQkJfG5ldGJlYW5zLWRvd25sb2FkfAorNS4gIFByZXBhcmluZyBOZXRCZWFucyBmb3IgVmltCQkJfG5ldGJlYW5zLXByZXBhcmF0aW9ufAorNi4gIE9idGFpbmluZyB0aGUgRXh0ZXJuYWwgRWRpdG9yIE1vZHVsZQl8b2J0YWluaW5nLWV4dGVkfAorNy4gIFNldHRpbmcgdXAgTmV0QmVhbnMgdG8gcnVuIHdpdGggVmltCQl8bmV0YmVhbnMtc2V0dXB8Cis4LiAgTWVzc2FnZXMJCQkJCXxuZXRiZWFucy1tZXNzYWdlc3wKKzkuICBSdW5uaW5nIFZpbSBmcm9tIE5ldEJlYW5zCQkJfG5ldGJlYW5zLXJ1bnwKKzEwLiBOZXRCZWFucyBwcm90b2NvbAkJCQl8bmV0YmVhbnMtcHJvdG9jb2x8CisxMS4gS25vd24gcHJvYmxlbXMJCQkJfG5ldGJlYW5zLXByb2JsZW1zfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXN9Cit7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K25ldGJlYW5zX2ludGd8IGZlYXR1cmV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkJKm5ldGJlYW5zLWludHJvKgorCitOZXRCZWFucyBpcyBhbiBvcGVuIHNvdXJjZSBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IGRldmVsb3BlZAoram9pbnRseSBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCB0aGUgbmV0YmVhbnMub3JnIGRldmVsb3BlciBjb21tdW5pdHkuCitJbml0aWFsbHkganVzdCBhIEphdmEgSURFLCBOZXRCZWFucyBoYXMgaGFkIEMsIEMrKywgYW5kIEZvcnRyYW4gc3VwcG9ydCBhZGRlZAoraW4gcmVjZW50IHJlbGVhc2VzLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiB2aXNpdCB0aGUgbWFpbiBOZXRCZWFucyB3ZWIgc2l0ZSBodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZworb3IgdGhlIE5ldEJlYW5zIEV4dGVybmFsIEVkaXRvciBzaXRlIGF0IGh0dHA6Ly9leHRlcm5hbGVkaXRvci5uZXRiZWFucy5vcmcuCisKK1N1biBNaWNyb3N5c3RlbXMsIEluYy4gYWxzbyBzaGlwcyBOZXRCZWFucyB1bmRlciB0aGUgbmFtZSBTdW4gT05FIFN0dWRpby4KK1Zpc2l0IGh0dHA6Ly93d3cuc3VuLmNvbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIFN1biBPTkUgU3R1ZGlvCitwcm9kdWN0IGxpbmUuCisKK0N1cnJlbnQgcmVsZWFzZXMgb2YgTmV0QmVhbnMgcHJvdmlkZSBmdWxsIHN1cHBvcnQgZm9yIEphdmEgYW5kIGxpbWl0ZWQgc3VwcG9ydAorZm9yIEMsIEMrKywgYW5kIEZvcnRyYW4uIEN1cnJlbnQgcmVsZWFzZXMgb2YgU3VuIE9ORSBTdHVkaW8gcHJvdmlkZSBmdWxsCitzdXBwb3J0IGZvciBKYXZhLCBDLCBDKyssIGFuZCBGb3J0cmFuLgorCitUaGUgaW50ZXJmYWNlIHRvIE5ldEJlYW5zIGlzIGFsc28gc3VwcG9ydGVkIGJ5IEFnaWRlLCB0aGUgQS1BLVAgR1VJIElERS4KK0FnaWRlIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gTmV0QmVhbnM6CistIEJhc2VkIG9uIFB5dGhvbiBpbnN0ZWFkIG9mIEphdmEsIG11Y2ggc21hbGxlciBmb290cHJpbnQgYW5kIGZhc3Qgc3RhcnR1cC4KKy0gQWdpZGUgaXMgYSBmcmFtZXdvcmsgaW4gd2hpY2ggbWFueSBkaWZmZXJlbnQgdG9vbHMgY2FuIHdvcmsgdG9nZXRoZXIuCitTZWUgdGhlIEEtQS1QIHdlYnNpdGUgZm9yIGluZm9ybWF0aW9uOiBodHRwOi8vd3d3LkEtQS1QLm9yZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBOZXRCZWFucyBLZXkgQmluZGluZ3MJCQkJKm5ldGJlYW5zLWtleWJpbmRpbmdzKgorCitWaW0gdW5kZXJzdGFuZHMgYSBudW1iZXIgb2Yga2V5IGJpbmRpbmdzIHRoYXQgZXhlY3V0ZSBOZXRCZWFucyBjb21tYW5kcy4gVGhlc2UKK2FyZSB0eXBpY2FsbHkgYWxsIHRoZSBGdW5jdGlvbiBrZXkgY29tYmluYXRpb25zLiBUbyBleGVjdXRlIGEgTmV0QmVhbnMgY29tbWFuZCwKK3RoZSB1c2VyIG11c3QgcHJlc3MgdGhlIFBhdXNlIGtleSBmb2xsb3dlZCBieSBhIE5ldEJlYW5zIGtleSBiaW5kaW5nLiBGb3IKK2V4YW1wbGUsIGluIG9yZGVyIHRvIGNvbXBpbGUgYSBKYXZhIGZpbGUsIHRoZSBOZXRCZWFucyBrZXkgYmluZGluZyBpcyAiRjkiLiBTbywKK3doaWxlIGluIHZpbSwgcHJlc3MgIlBhdXNlIEY5IiB0byBjb21waWxlIGEgamF2YSBmaWxlLiBUbyB0b2dnbGUgYSBicmVha3BvaW50CithdCB0aGUgY3VycmVudCBsaW5lLCBwcmVzcyAiUGF1c2UgU2hpZnQgRjgiLgorCitUaGUgUGF1c2Uga2V5IGlzIEZ1bmN0aW9uIGtleSAyMS4gIElmIHlvdSBkb24ndCBoYXZlIGEgd29ya2luZyBQYXVzZSBrZXkgYW5kCit3YW50IHRvIHVzZSBGOCBpbnN0ZWFkLCB1c2U6ID4KKworCTptYXAgPEY4PiA8RjIxPgorCitUaGUgRXh0ZXJuYWwgRWRpdG9yIG1vZHVsZSBkeW5hbWljYWxseSByZWFkcyB0aGUgTmV0QmVhbnMga2V5IGJpbmRpbmdzIHNvIHZpbQorc2hvdWxkIGFsd2F5cyBoYXZlIHRoZSBsYXRlc3Qga2V5IGJpbmRpbmdzLCBldmVuIHdoZW4gTmV0QmVhbnMgY2hhbmdlcyB0aGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIENvbmZpZ3VyaW5nIFZpbSBmb3IgTmV0QmVhbnMJCQkqbmV0YmVhbnMtY29uZmlndXJlKgorCitGb3IgbW9yZSBoZWxwIGluc3RhbGxpbmcgdmltLCBwbGVhc2UgcmVhZCB8dXNyXzkwLnR4dHwgaW4gdGhlIFZpbSBVc2VyIE1hbnVhbC4KKworCitPbiBVbml4CisKK1doZW4gcnVubmluZyBjb25maWd1cmUgd2l0aG91dCBhcmd1bWVudHMgdGhlIE5ldEJlYW5zIGludGVyZmFjZSBzaG91bGQgYmUKK2luY2x1ZGVkLiAgVGhhdCBpcywgaWYgdGhlIGNvbmZpZ3VyZSBjaGVjayB0byBmaW5kIG91dCBpZiB5b3VyIHN5c3RlbSBzdXBwb3J0cwordGhlIHJlcXVpcmVkIGZlYXR1cmVzIHN1Y2NlZWRzLgorCitJbiBjYXNlIHlvdSBkbyBub3Qgd2FudCB0aGUgTmV0QmVhbnMgaW50ZXJmYWNlIHlvdSBjYW4gZGlzYWJsZSBpdCBieQordW5jb21tZW50aW5nIGEgbGluZSB3aXRoICItLWRpc2FibGUtbmV0YmVhbnMiIGluIHRoZSBNYWtlZmlsZS4KKworQ3VycmVudGx5LCBvbmx5IGd2aW0gaXMgc3VwcG9ydGVkIGluIHRoaXMgaW50ZWdyYXRpb24gYXMgTmV0QmVhbnMgZG9lcyBub3QKK2hhdmUgbWVhbnMgdG8gc3VwcGx5IGEgdGVybWluYWwgZW11bGF0b3IgZm9yIHRoZSB2aW0gY29tbWFuZC4gRnVydGhlcm1vcmUsCit0aGVyZSBpcyBvbmx5IEdVSSBzdXBwb3J0IGZvciBHVEssIEdOT01FLCBhbmQgTW90aWYuCisKK0lmIE1vdGlmIHN1cHBvcnQgaXMgcmVxdWlyZWQgdGhlIHVzZXIgbXVzdCBzdXBwbHkgWFBNIGxpYnJhcmllcy4gU2VlCit8d29ya3Nob3AteHBtfCBmb3IgZGV0YWlscyBvbiBvYnRhaW5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhQTS4KKworCitPbiBNUy1XaW5kb3dzCisKK1RoZSBXaW4zMiBzdXBwb3J0IGlzIG5vdyBpbiBiZXRhIHN0YWdlLgorCitUbyB1c2UgWFBNIHNpZ25zIG9uIFdpbjMyIChlLmcuIHdoZW4gdXNpbmcgd2l0aCBOZXRCZWFucykgeW91IGNhbiBjb21waWxlCitYUE0gYnkgeW91cnNlbGYgb3IgdXNlIHByZWNvbXBpbGVkIGxpYnJhcmllcyBmcm9tIGh0dHA6Ly9pYW1waGV0Lm5tLnJ1L21pc2MvCisoZm9yIE1TIFZpc3VhbCBDKyspIG9yIGh0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQgKGZvciBNaW5HVykuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gRG93bmxvYWRpbmcgTmV0QmVhbnMJCQkJCSpuZXRiZWFucy1kb3dubG9hZCoKKworVGhlIE5ldEJlYW5zIElERSBpcyBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20gbmV0YmVhbnMub3JnLiBZb3UgY2FuIGRvd25sb2FkCithIHJlbGVhc2VkIHZlcnNpb24sIGRvd25sb2FkIHNvdXJjZXMsIG9yIHVzZSBDVlMgdG8gZG93bmxvYWQgdGhlIGN1cnJlbnQKK3NvdXJjZSB0cmVlLiBJZiB5b3UgY2hvb3NlIHRvIGRvd25sb2FkIHNvdXJjZXMsIGZvbGxvdyBkaXJlY3Rpb25zIGZyb20KK25ldGJlYW5zLm9yZyBvbiBidWlsZGluZyBOZXRCZWFucy4KKworRGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIE5ldEJlYW5zIHlvdSBkb3dubG9hZCwgeW91IG1heSBuZWVkIHRvIGRvIGZ1cnRoZXIKK3dvcmsgdG8gZ2V0IHRoZSByZXF1aXJlZCBFeHRlcm5hbCBFZGl0b3IgbW9kdWxlLiBUaGlzIGlzIHRoZSBtb2R1bGUgd2hpY2ggbGV0cworTmV0QmVhbnMgd29yayB3aXRoIGd2aW0gKG9yIHhlbWFjcyA6LSkuIFNlZSBodHRwOi8vZXh0ZXJuYWxlZGl0b3IubmV0YmVhbnMub3JnCitmb3IgZGV0YWlscyBvbiBkb3dubG9hZGluZyB0aGlzIG1vZHVsZSBpZiB5b3VyIE5ldEJlYW5zIHJlbGVhc2UgZG9lcyBub3QgaGF2ZQoraXQuCisKK0ZvciBDLCBDKyssIGFuZCBGb3J0cmFuIHN1cHBvcnQgeW91IHdpbGwgYWxzbyBuZWVkIHRoZSBjcHAgbW9kdWxlLiBTZWUKK2h0dHA6Ly9jcHAubmV0YmVhbnMub3JnIGZvciBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhpcyBtb2R1bGUuCisKK1lvdSBjYW4gYWxzbyBkb3dubG9hZCBTdW4gT05FIFN0dWRpbyBmcm9tIFN1biBNaWNyb3N5c3RlbXMsIEluYyBmb3IgYSAzMCBkYXkKK2ZyZWUgdHJpYWwuIFNlZSBodHRwOi8vd3d3LnN1bi5jb20gZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBQcmVwYXJpbmcgTmV0QmVhbnMgZm9yIFZpbQkJCQkqbmV0YmVhbnMtcHJlcGFyYXRpb24qCisKK0luIG9yZGVyIGZvciBOZXRCZWFucyB0byB3b3JrIHdpdGggdmltLCB0aGUgTmV0QmVhbnMgRXh0ZXJuYWwgRWRpdG9yIG1vZHVsZQorbXVzdCBiZSBsb2FkZWQgYW5kIGVuYWJsZWQuIElmIHlvdSBoYXZlIGEgU3VuIE9ORSBTdHVkaW8gRW50ZXJwcmlzZSBFZGl0aW9uCit0aGVuIHRoaXMgbW9kdWxlIHNob3VsZCBiZSBsb2FkZWQgYW5kIGVuYWJsZWQuIElmIHlvdSBoYXZlIGEgTmV0QmVhbnMgcmVsZWFzZQoreW91IG1heSBuZWVkIHRvIGZpbmQgYW5vdGhlciB3YXkgb2Ygb2J0YWluaW5nIHRoaXMgb3BlbiBzb3VyY2UgbW9kdWxlLgorCitZb3UgY2FuIGNoZWNrIGlmIHlvdSBoYXZlIHRoaXMgbW9kdWxlIGJ5IG9wZW5pbmcgdGhlIFRvb2xzLT5PcHRpb25zIGRpYWxvZworYW5kIGRyaWxsaW5nIGRvd24gdG8gdGhlICJNb2R1bGVzIiBsaXN0IChJREUgQ29uZmlndXJhdGlvbi0+U3lzdGVtLT5Nb2R1bGVzKS4KK0lmIHlvdXIgTW9kdWxlcyBsaXN0IGhhcyBhbiBlbnRyeSBmb3IgIkV4dGVybmFsIEVkaXRvciIgeW91IG11c3QgbWFrZSBzdXJlCitpdCBpcyBlbmFibGVkICh0aGUgIkVuYWJsZWQiIHByb3BlcnR5IHNob3VsZCBoYXZlIHRoZSB2YWx1ZSAiVHJ1ZSIpLiBJZiB5b3VyCitNb2R1bGVzIGxpc3QgaGFzIG5vIEV4dGVybmFsIEVkaXRvciBzZWUgdGhlIG5leHQgc2VjdGlvbiBvbiB8b2J0YWluaW5nLWV4dGVkfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBPYnRhaW5pbmcgdGhlIEV4dGVybmFsIEVkaXRvciBNb2R1bGUJCQkgICAgKm9idGFpbmluZy1leHRlZCoKKworVGhlcmUgYXJlIDIgd2F5cyBvZiBvYnRhaW5pbmcgdGhlIEV4dGVybmFsIEVkaXRvciBtb2R1bGUuIFRoZSBlYXNpZXN0IHdheQoraXMgdG8gdXNlIHRoZSBOZXRCZWFucyBVcGRhdGUgQ2VudGVyIHRvIGRvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBtb2R1bGUuCitVbmZvcnR1bmF0ZWx5LCBzb21lIHZlcnNpb25zIGRvIG5vdCBoYXZlIHRoaXMgbW9kdWxlIGluIHRoZWlyIHVwZGF0ZQorY2VudGVyLiBJZiB5b3UgY2Fubm90IGRvd25sb2FkIHZpYSB0aGUgdXBkYXRlIGNlbnRlciB5b3Ugd2lsbCBuZWVkIHRvCitkb3dubG9hZCBzb3VyY2VzIGFuZCBidWlsZCB0aGUgbW9kdWxlLiBJIHdpbGwgdHJ5IGFuZCBnZXQgdGhlIG1vZHVsZQorYXZhaWxhYmxlIGZyb20gdGhlIE5ldEJlYW5zIFVwZGF0ZSBDZW50ZXIgc28gYnVpbGRpbmcgd2lsbCBiZSB1bm5lY2Vzc2FyeS4KK0Fsc28gY2hlY2sgaHR0cDovL2V4dGVybmFsZWRpdG9yLm5ldGJlYW5zLm9yZyBmb3Igb3RoZXIgYXZhaWxhYmlsaXR5IG9wdGlvbnMuCisKK1RvIGRvd25sb2FkIHRoZSBFeHRlcm5hbCBFZGl0b3Igc291cmNlcyB2aWEgQ1ZTIGFuZCBidWlsZCB5b3VyIG93biBtb2R1bGUsCitzZWUgaHR0cDovL2V4dGVybmFsZWRpdG9yLm5ldGJlYW5zLm9yZyBhbmQgaHR0cDovL3d3dy5uZXRiZWFucy5vcmcuCitVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCBhIHRyaXZpYWwgcHJvY2VkdXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFNldHRpbmcgdXAgTmV0QmVhbnMgdG8gcnVuIHdpdGggVmltCQkJICAgICpuZXRiZWFucy1zZXR1cCoKKworQXNzdW1pbmcgeW91IGhhdmUgbG9hZGVkIGFuZCBlbmFibGVkIHRoZSBOZXRCZWFucyBFeHRlcm5hbCBFZGl0b3IgbW9kdWxlCithcyBkZXNjcmliZWQgaW4gfG5ldGJlYW5zLXByZXBhcmF0aW9ufCBhbGwgeW91IG5lZWQgdG8gZG8gaXMgdmVyaWZ5IHRoYXQKK3RoZSBndmltIGNvbW1hbmQgbGluZSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGZvciB5b3VyIGVudmlyb25tZW50LgorCitPcGVuIHRoZSBUb29scy0+T3B0aW9ucyBkaWFsb2cgYW5kIG9wZW4gdGhlIEVkaXRpbmcgY2F0ZWdvcnkuIFNlbGVjdCB0aGUKK0V4dGVybmFsIEVkaXRvci4gVGhlIHJpZ2h0IGhhbmQgcGFuZSBzaG91bGQgY29udGFpbiBhIFByb3BlcnRpZXMgdGFiIGFuZAorYW4gRXhwZXJ0IHRhYi4gSW4gdGhlIFByb3BlcnRpZXMgdGFiIG1ha2Ugc3VyZSB0aGUgIkVkaXRvciBUeXBlIiBpcyBzZXQKK3RvICJWaW0iLiBJbiB0aGUgRXhwZXJ0IHRhYiBtYWtlIHN1cmUgdGhlICJWaW0gQ29tbWFuZCIgaXMgY29ycmVjdC4KKworWW91IHNob3VsZCBiZSBjYXJlZnVsIGlmIHlvdSBjaGFuZ2UgdGhlICJWaW0gQ29tbWFuZCIuIFRoZXJlIGFyZSBjb21tYW5kCitsaW5lIG9wdGlvbnMgdGhlcmUgd2hpY2ggbXVzdCBiZSB0aGVyZSBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmUgcHJvcGVybHkKK3NldCB1cC4gWW91IGNhbiBjaGFuZ2UgdGhlIGNvbW1hbmQgbmFtZSBidXQgdGhhdHMgYWJvdXQgaXQuIElmIHlvdXIgZ3ZpbQorY2FuIGJlIGZvdW5kIGJ5IHlvdXIgJFBBVEggdGhlbiB0aGUgVklNIENvbW1hbmQgY2FuIHN0YXJ0IHdpdGggImd2aW0iLiBJZgoreW91IGRvbid0IHdhbnQgZ3ZpbSBzZWFyY2hlZCBmcm9tIHlvdXIgJFBBVEggdGhlbiBoYXJkIGNvZGUgaW4gdGhlIGZ1bGwKK1VuaXggcGF0aCBuYW1lLiBBdCB0aGlzIHBvaW50IHlvdSBzaG91bGQgZ2V0IGEgZ3ZpbSBmb3IgYW55IHNvdXJjZSBmaWxlCit5b3Ugb3BlbiBpbiBOZXRCZWFucy4KKworSWYgc29tZSBmaWxlcyBjb21lIHVwIGluIGd2aW0gYW5kIG90aGVycyAod2l0aCBkaWZmZXJlbnQgZmlsZSBzdWZmaXhlcykgY29tZQordXAgaW4gdGhlIGRlZmF1bHQgTmV0QmVhbnMgZWRpdG9yIHlvdSBzaG91bGQgdmVyaWZ5IHRoZSBNSU1FIHR5cGUgaW4gdGhlCitFeHBlcnQgdGFiIE1JTUUgVHlwZSBwcm9wZXJ0eS4gTmV0QmVhbnMgaXMgTUlNRSBvcmllbnRlZCBhbmQgdGhlIEV4dGVybmFsCitFZGl0b3Igd2lsbCBvbmx5IG9wZW4gTUlNRSB0eXBlcyBzcGVjaWZpZWQgaW4gdGhpcyBwcm9wZXJ0eS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBNZXNzYWdlcwkJCQkJCSpuZXRiZWFucy1tZXNzYWdlcyoKKworVGhlc2UgbWVzc2FnZXMgYXJlIHNwZWNpZmljIGZvciBOZXRCZWFuczoKKworCQkJCQkJCSpFNDYzKgorUmVnaW9uIGlzIGd1YXJkZWQsIGNhbm5vdCBtb2RpZnkKKwkJTmV0QmVhbnMgZGVmaW5lcyBndWFyZGVkIGFyZWFzIGluIHRoZSB0ZXh0LCB3aGljaCB5b3UgY2Fubm90CisJCWNoYW5nZS4KKworCQkJCQkJCSpFNjU2KgorTmV0QmVhbnMgZGlzc2FsbG93cyB3cml0ZXMgb2YgdW5tb2RpZmllZCBidWZmZXJzCisJCU5ldEJlYW5zIGRvZXMgbm90IHN1cHBvcnQgd3JpdGVzIG9mIHVubW9kaWZpZWQgYnVmZmVycyB0aGF0CisJCXdlcmUgb3BlbmVkIGZyb20gTmV0QmVhbnMuCisKKwkJCQkJCQkqRTY1NyoKK1BhcnRpYWwgd3JpdGVzIGRpc2FsbG93ZWQgZm9yIE5ldEJlYW5zIGJ1ZmZlcnMKKwkJTmV0QmVhbnMgZG9lcyBub3Qgc3VwcG9ydCBwYXJ0aWFsIHdyaXRlcyBmb3IgYnVmZmVycyB0aGF0IHdlcmUKKwkJb3BlbmVkIGZyb20gTmV0QmVhbnMuCisKKwkJCQkJCQkqRTY1OCoKK05ldEJlYW5zIGNvbm5lY3Rpb24gbG9zdCBmb3IgdGhpcyBidWZmZXIKKwkJTmV0QmVhbnMgaGFzIGJlY29tZSBjb25mdXNlZCBhYm91dCB0aGUgc3RhdGUgb2YgdGhpcyBmaWxlLgorCQlSYXRoZXIgdGhhbiByaXNjIGRhdGEgY29ycnVwdGlvbiwgTmV0QmVhbnMgaGFzIHNldmVyZWQgdGhlCisJCWNvbm5lY3Rpb24gZm9yIHRoaXMgZmlsZS4gVmltIHdpbGwgdGFrZSBvdmVyIHJlc3BvbnNpYmlsaXR5CisJCWZvciBzYXZpbmcgY2hhbmdlcyB0byB0aGlzIGZpbGUgYW5kIE5ldEJlYW5zIHdpbGwgbm8gbG9uZ2VyCisJCWtub3cgb2YgdGhlc2UgY2hhbmdlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBSdW5uaW5nIFZpbSBmcm9tIE5ldEJlYW5zCQkJCSpuZXRiZWFucy1ydW4qCisKK05ldEJlYW5zIHN0YXJ0cyBWaW0gd2l0aCB0aGUgfC1uYnwgYXJndW1lbnQuICBUaHJlZSBmb3JtcyBjYW4gYmUgdXNlZCwgdGhhdAorZGlmZmVyIGluIHRoZSB3YXkgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgY29ubmVjdGlvbiBpcyBzcGVjaWZpZWQ6CisKKwktbmI9e2ZuYW1lfQkJCQlmcm9tIGEgZmlsZQorCS1uYjp7aG9zdG5hbWV9OnthZGRyfTp7cGFzc3dvcmR9CWRpcmVjdGx5CisJLW5iCQkJCQlmcm9tIGEgZmlsZSBvciBlbnZpcm9ubWVudAorCisJCQkJCQkJKkU2NjAqICpFNjY4KgorRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBiZXN0IG1ldGhvZCBpcyB0byB3cml0ZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBmaWxlCityZWFkYWJsZSBvbmx5IGJ5IHRoZSB1c2VyLiAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgY2FuIGJlIHBhc3NlZCB3aXRoIHRoZQorIi1uYj17Zm5hbWV9IiBhcmd1bWVudCBvciwgd2hlbiAiLW5iIiBpcyB1c2VkIHdpdGhvdXQgYSBwYXJhbWV0ZXIsIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgIl9fTkVUQkVBTlNfQ09OSU5GTyIuICBUaGUgZmlsZSBtdXN0IGNvbnRhaW4gdGhlc2UgdGhyZWUKK2xpbmVzLCBpbiBhbnkgb3JkZXI6CisKKwlob3N0PXtob3N0bmFtZX0KKwlwb3J0PXthZGRyfQorCWF1dGg9e3Bhc3N3b3JkfQorCitPdGhlciBsaW5lcyBhcmUgaWdub3JlZC4gIFRoZSBjYWxsZXIgb2YgVmltIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxldGluZyB0aGUKK2ZpbGUgYWZ0ZXJ3YXJkcy4KKwore2hvc3RuYW1lfSBpcyB0aGUgbmFtZSBvZiB0aGUgbWFjaGluZSB3aGVyZSBOZXRCZWFucyBpcyBydW5uaW5nLiAgV2hlbiBvbWl0dGVkCit0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIl9fTkVUQkVBTlNfSE9TVCIgaXMgdXNlZCBvciB0aGUgZGVmYXVsdCAibG9jYWxob3N0Ii4KKwore2FkZHJ9IGlzIHRoZSBwb3J0IG51bWJlciBmb3IgTmV0QmVhbnMuICBXaGVuIG9taXR0ZWQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisiX19ORVRCRUFOU19TT0NLRVQiIGlzIHVzZWQgb3IgdGhlIGRlZmF1bHQgMzIxOS4KKwore3Bhc3N3b3JkfSBpcyB0aGUgcGFzc3dvcmQgZm9yIGNvbm5lY3RpbmcgdG8gTmV0QmVhbnMuICBXaGVuIG9taXR0ZWQgdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSAiX19ORVRCRUFOU19WSU1fUEFTU1dPUkQiIGlzIHVzZWQgb3IgImNoYW5nZW1lIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMC4gTmV0QmVhbnMgcHJvdG9jb2wJCQkJCSpuZXRiZWFucy1wcm90b2NvbCoKKworVGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBOZXRCZWFucyBhbmQgVmltIHVzZXMgcGxhaW4gdGV4dCBtZXNzYWdlcy4gIFRoaXMKK3Byb3RvY29sIHdhcyBmaXJzdCBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIGV4dGVybmFsIGVkaXRvciBtb2R1bGUgb2YKK05ldEJlYW5zIChzZWUgaHR0cDovL2V4dGVybmFsZWRpdG9yLm5ldGJlYW5zLm9yZykuICBMYXRlciBpdCB3YXMgZXh0ZW5kZWQgdG8KK3dvcmsgd2l0aCBBZ2lkZSAoQS1BLVAgR1VJIElERSwgc2VlIGh0dHA6Ly93d3cuYS1hLXAub3JnKS4gIFRoZSBleHRlbnNpb25zIGFyZQorbWFya2VkIHdpdGggInZlcnNpb24gMi4xIi4KKworVmVyc2lvbiAyLjIgb2YgdGhlIHByb3RvY29sIGhhcyBzZXZlcmFsIG1pbm9yIGNoYW5nZXMgd2hpY2ggc2hvdWxkIG9ubHkKK2FmZmVjdCBOZXRCZWFucyB1c2VycyAoaWUsIG5vdCBBZ2lkZSB1c2VycykuIEhvd2V2ZXIsIGEgYnVnIHdhcyBmaXhlZCB3aGljaAorY291bGQgY2F1c2UgY29uZnVzaW9uLiBUaGUgbmV0YmVhbnNfc2F2ZWQoKSBmdW5jdGlvbiBzZW50IGEgInNhdmUiIHByb3RvY29sCitjb21tYW5kLiBJbiBwcm90b2NvbCB2ZXJzaW9uIDIuMSBhbmQgZWFybGllciB0aGlzIHdhcyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZAorYXMgYSBub3RpZmljYXRpb24gdGhhdCBhIHdyaXRlIGhhZCB0YWtlbiBwbGFjZS4gSW4gcmVhbGl0eSwgaXQgdG9sZCBOZXRCZWFucwordG8gc2F2ZSB0aGUgZmlsZSBzbyBtdWx0aXBsZSB3cml0ZXMgd2VyZSBiZWluZyBkb25lLiBUaGlzIGNhdXNlZCB2YXJpb3VzCitwcm9ibGVtcyBhbmQgaGFzIGJlZW4gZml4ZWQgaW4gMi4yLiBUbyBkZWNyZWFzZSB0aGUgbGlrZWx5aG9vZCBvZiB0aGlzCitjb25mdXNpb24gaGFwcGVuaW5nIGFnYWluLCBuZXRiZWFuc19zYXZlZCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8KK25ldGJlYW5zX3NhdmVfYnVmZmVyKCkuCisKK1RoZSBtZXNzYWdlcyBhcmUgY3VycmVudGx5IHNlbnQgb3ZlciBhIHNvY2tldC4gIFNpbmNlIHRoZSBtZXNzYWdlcyBhcmUgaW4KK3BsYWluIFVURi04IHRleHQgdGhpcyBwcm90b2NvbCBjb3VsZCBhbHNvIGJlIHVzZWQgd2l0aCBhbnkgb3RoZXIgY29tbXVuaWNhdGlvbgorbWVjaGFuaXNtLgorCisxMC4xIEtpbmRzIG9mIG1lc3NhZ2VzCQl8bmItbWVzc2FnZXN8CisxMC4yIFRlcm1zCQkJfG5iLXRlcm1zfAorMTAuMyBDb21tYW5kcwkJCXxuYi1jb21tYW5kc3wKKzEwLjQgRnVuY3Rpb25zIGFuZCBSZXBsaWVzCXxuYi1mdW5jdGlvbnN8CisxMC41IEV2ZW50cwkJCXxuYi1ldmVudHN8CisxMC42IFNwZWNpYWwgbWVzc2FnZXMJCXxuYi1zcGVjaWFsfAorCisqRTYyNyogKkU2MjgqICpFNjI5KiAqRTYzMCogKkU2MzEqICpFNjMyKiAqRTYzMyogKkU2MzQqICpFNjM1KiAqRTYzNioKKypFNjM3KiAqRTYzOCogKkU2MzkqICpFNjQwKiAqRTY0MSogKkU2NDIqICpFNjQzKiAqRTY0NCogKkU2NDUqICpFNjQ2KgorKkU2NDcqICpFNjQ4KiAqRTY0OSogKkU2NTAqICpFNjUxKiAqRTY1MiogKkU2NTMqICpFNjU0KgorVGhlc2UgZXJyb3JzIG9jY3VyIHdoZW4gYSBtZXNzYWdlIHZpb2xhdGVzIHRoZSBwcm90b2NvbC4KKworCisxMC4xIEtpbmRzIG9mIG1lc3NhZ2VzCQkJCQkqbmItbWVzc2FnZXMqCisKK1RoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIG1lc3NhZ2VzOgorCitraW5kCQlkaXJlY3Rpb24JY29tbWVudCB+CitDb21tYW5kCQlJREUgLT4gZWRpdG9yCW5vIHJlcGx5IG5lY2Vzc2FyeQorRnVuY3Rpb24JSURFIC0+IGVkaXRvcgllZGl0b3IgbXVzdCBzZW5kIGJhY2sgYSByZXBseQorUmVwbHkJCWVkaXRvciAtPiBJREUJb25seSBpbiByZXNwb25zZSB0byBhIEZ1bmN0aW9uCitFdmVudAkJZWRpdG9yIC0+IElERQlubyByZXBseSBuZWNlc3NhcnkKKworVGhlIG1lc3NhZ2VzIGFyZSBzZW50IGFzIGEgc2luZ2xlIGxpbmUgd2l0aCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgY2hhcmFjdGVyLgorQXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc3BhY2UuICBUaGUgZmlyc3QgaXRlbSBvZiB0aGUgbWVzc2FnZQorZGVwZW5kcyBvbiB0aGUga2luZCBvZiBtZXNzYWdlOgorCitraW5kCQlmaXJzdCBpdGVtCQlleGFtcGxlIH4KK0NvbW1hbmQJCWJ1ZklEOm5hbWUhc2Vxbm8JMTE6c2hvd0JhbGxvb24hMTIzICJ0ZXh0IgorRnVuY3Rpb24JYnVmSUQ6bmFtZS9zZXFubwkxMTpnZXRMZW5ndGgvMTIzCitSZXBseQkJc2Vxbm8JCQkxMjMgNTAwMAorRXZlbnQJCWJ1ZklEOm5hbWU9MTIzCQkxMTprZXlDb21tYW5kPTEyMyAiUy1GMiIKKworCisxMC4yIFRlcm1zCQkJCQkJKm5iLXRlcm1zKgorCitidWZJRAkJQnVmZmVyIG51bWJlci4gIEEgbWVzc2FnZSBtYXkgYmUgZWl0aGVyIGZvciBhIHNwZWNpZmljIGJ1ZmZlcgorCQlvciBnZW5lcmljLiAgR2VuZXJpYyBtZXNzYWdlcyB1c2UgYSBidWZJRCBvZiB6ZXJvLiAgTk9URTogdGhpcworCQlidWZmZXIgSUQgaXMgYXNzaWduZWQgYnkgdGhlIElERSwgaXQgaXMgbm90IFZpbSdzIGJ1ZmZlcgorCQludW1iZXIuICBUaGUgYnVmSUQgbXVzdCBiZSBhIHNlcXVlbnRpYWxseSByaXNpbmcgbnVtYmVyLAorCQlzdGFydGluZyBhdCBvbmUuCisKK3NlcW5vCQlUaGUgSURFIHVzZXMgYSBzZXF1ZW5jZSBudW1iZXIgZm9yIENvbW1hbmRzIGFuZCBGdW5jdGlvbnMuICBBCisJCVJlcGx5IG11c3QgdXNlIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIEZ1bmN0aW9uIHRoYXQgaXQgaXMKKwkJYXNzb2NpYXRlZCB3aXRoLiAgQSB6ZXJvIHNlcXVlbmNlIG51bWJlciBjYW4gYmUgdXNlZCBmb3IKKwkJRXZlbnRzICh0aGUgc2Vxbm8gb2YgdGhlIGxhc3QgcmVjZWl2ZWQgQ29tbWFuZCBvciBGdW5jdGlvbiBjYW4KKwkJYWxzbyBiZSB1c2VkKS4KKworc3RyaW5nCQlBcmd1bWVudCBpbiBkb3VibGUgcXVvdGVzLiAgVGV4dCBpcyBpbiBVVEYtOCBlbmNvZGluZy4gIFRoaXMKKwkJbWVhbnMgQVNDSUkgaXMgcGFzc2VkIGFzLWlzLiAgU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZQorCQlyZXByZXNlbnRlZCB3aXRoIGEgYmFja3NsYXNoOgorCQkJXCIJZG91YmxlIHF1b3RlCisJCQlcbgluZXdsaW5lCisJCQlccgljYXJyaWFnZS1yZXR1cm4KKwkJCVx0CXRhYiAob3B0aW9uYWwsIGFsc28gd29ya3MgbGl0ZXJhbGx5KQorCQkJXFwJYmFja3NsYXNoCisJCU5VTCBieXRlcyBhcmUgbm90IGFsbG93ZWQhCisKK2Jvb2xlYW4JCUFyZ3VtZW50IHdpdGggdHdvIHBvc3NpYmxlIHZhbHVlczoKKwkJCVQJdHJ1ZQorCQkJRglmYWxzZQorCitudW1iZXIJCUFyZ3VtZW50IHdpdGggYSBkZWNpbWFsIG51bWJlci4KKworb3B0bnVtCQlBcmd1bWVudCB3aXRoIGVpdGhlciBhIGRlY2ltYWwgbnVtYmVyIG9yICJub25lIiAod2l0aG91dCB0aGUKKwkJcXVvdGVzKS4KKworb2Zmc2V0CQlBIG51bWJlciBhcmd1bWVudCB0aGF0IGluZGljYXRlcyBhIGJ5dGUgcG9zaXRpb24gaW4gYSBidWZmZXIuCisJCVRoZSBmaXJzdCBieXRlIGhhcyBvZmZzZXQgemVyby4gIExpbmUgYnJlYWtzIGFyZSBjb3VudGVkIGZvcgorCQlob3cgdGhleSBhcHBlYXIgaW4gdGhlIGZpbGUgKENSL0xGIGNvdW50cyBmb3IgdHdvIGJ5dGVzKS4KKwkJTm90ZSB0aGF0IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaXMgY291bnRlZCBmb3IgdGhlIG51bWJlciBvZgorCQlieXRlcyBpdCB0YWtlcy4KKworbG51bS9jb2wJQXJndW1lbnQgd2l0aCBhIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4gbnVtYmVyIHBvc2l0aW9uLiAgVGhlCisJCWxpbmUgbnVtYmVyIHN0YXJ0cyB3aXRoIG9uZSwgdGhlIGNvbHVtbiBpcyB0aGUgYnl0ZSBwb3NpdGlvbiwKKwkJc3RhcnRpbmcgd2l0aCB6ZXJvLiAgTm90ZSB0aGF0IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgY291bnRzCisJCWZvciBzZXZlcmFsIGNvbHVtbnMuCisKK3BhdGhuYW1lCVN0cmluZyBhcmd1bWVudDogZmlsZSBuYW1lIHdpdGggZnVsbCBwYXRoLgorCisKKzEwLjMgQ29tbWFuZHMJCQkJCQkqbmItY29tbWFuZHMqCisKK2FjdGlvbk1lbnVJdGVtCU5vdCBpbXBsZW1lbnRlZC4KKworYWN0aW9uU2Vuc2l0aXZpdHkKKwkJTm90IGltcGxlbWVudGVkLgorCithZGRBbm5vIHNlck51bSB0eXBlTnVtIG9mZiBsZW4KKwkJUGxhY2UgYW4gYW5ub3RhdGlvbiBpbiB0aGlzIGJ1ZmZlci4KKwkJQXJndW1lbnRzOgorCQkgICBzZXJOdW0JbnVtYmVyCXNlcmlhbCBudW1iZXIgb2YgdGhpcyBwbGFjZWQKKwkJCQkJYW5ub3RhdGlvbiwgdXNlZCB0byBiZSBhYmxlIHRvIHJlbW92ZQorCQkJCQlpdAorCQkgICB0eXBlTnVtCW51bWJlcglzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGFubm90YXRpb24KKwkJCQkJZGVmaW5lZCB3aXRoIGRlZmluZUFubm9UeXBlIGZvciB0aGlzCisJCQkJCWJ1ZmZlcgorCQkgICBvZmYJCW51bWJlcglvZmZzZXQgd2hlcmUgYW5ub3RhdGlvbiBpcyB0byBiZSBwbGFjZWQKKwkJICAgbGVuCQludW1iZXIJbm90IHVzZWQKKwkJSW4gdmVyc2lvbiAyLjEgImxudW0vY29sIiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICJvZmYiLgorCitiYWxsb29uUmVzdWx0IHRleHQKKwkJTm90IGltcGxlbWVudGVkLgorCitjbG9zZQkJQ2xvc2UgdGhlIGJ1ZmZlci4gIFRoaXMgbGVhdmVzIHVzIHdpdGhvdXQgY3VycmVudCBidWZmZXIsIHZlcnkKKwkJZGFuZ2Vyb3VzIHRvIHVzZSEKKworY3JlYXRlCQlDcmVhdGVzIGEgYnVmZmVyIHdpdGhvdXQgYSBuYW1lLiAgUmVwbGFjZXMgdGhlIGN1cnJlbnQgYnVmZmVyCisJCShpdCdzIGhpZGRlbiB3aGVuIGl0IHdhcyBjaGFuZ2VkKS4KKwkJTmV0QmVhbnMgdXNlcyB0aGlzIGFzIHRoZSBmaXJzdCBjb21tYW5kIGZvciBhIGZpbGUgdGhhdCBpcworCQliZWluZyBvcGVuZWQuICBUaGUgc2VxdWVuY2Ugb2YgY29tbWFuZHMgY291bGQgYmU6CisJCQljcmVhdGUKKwkJCXNldENhcmV0TGlzdGVuZXIJKGlnbm9yZWQpCisJCQlzZXRNb2RpZmllZAkJKG5vIGVmZmVjdCkKKwkJCXNldENvbnRlbnRUeXBlCQkoaWdub3JlZCkKKwkJCXN0YXJ0RG9jdW1lbnRMaXN0ZW4KKwkJCXNldFRpdGxlCisJCQlzZXRGdWxsTmFtZQorCitkZWZpbmVBbm5vVHlwZSB0eXBlTnVtIHR5cGVOYW1lIHRvb2x0aXAgZ2x5cGhGaWxlIGZnIGJnCisJCURlZmluZSBhIHR5cGUgb2YgYW5ub3RhdGlvbiBmb3IgdGhpcyBidWZmZXIuCisJCUFyZ3VtZW50czoKKwkJICAgdHlwZU51bQludW1iZXIJc2VxdWVuY2UgbnVtYmVyIChub3QgcmVhbGx5IHVzZWQpCisJCSAgIHR5cGVOYW1lCXN0cmluZwluYW1lIHRoYXQgaWRlbnRpZmllcyB0aGlzIGFubm90YXRpb24KKwkJICAgdG9vbHRpcAlzdHJpbmcJbm90IHVzZWQKKwkJICAgZ2x5cGhGaWxlCXN0cmluZwluYW1lIG9mIGljb24gZmlsZQorCQkgICBmZwkJb3B0bnVtCWZvcmVncm91bmQgY29sb3IgZm9yIGxpbmUgaGlnaGxpZ2h0aW5nCisJCSAgIGJnCQlvcHRudW0JYmFja2dyb3VuZCBjb2xvciBmb3IgbGluZSBoaWdobGlnaHRpbmcKKwkJVmltIHdpbGwgZGVmaW5lIGEgc2lnbiBmb3IgdGhlIGFubm90YXRpb24uCisJCVdoZW4gYm90aCAiZmciIGFuZCAiYmciIGFyZSAibm9uZSIgbm8gbGluZSBoaWdobGlnaHRpbmcgaXMKKwkJdXNlZCAobmV3IGluIHZlcnNpb24gMi4xKS4KKwkJV2hlbiAiZ2x5cGhGaWxlIiBpcyBlbXB0eSwgbm8gdGV4dCBzaWduIGlzIHVzZWQgKG5ldyBpbgorCQl2ZXJzaW9uIDIuMSkuCisJCVdoZW4gImdseXBoRmlsZSIgaXMgb25lIG9yIHR3byBjaGFyYWN0ZXJzIGxvbmcsIGEgdGV4dCBzaWduIGlzCisJCWRlZmluZWQgKG5ldyBpbiB2ZXJzaW9uIDIuMSkuCisJCU5vdGU6IHRoZSBhbm5vdGF0aW9ucyB3aWxsIGJlIGRlZmluZWQgaW4gc2VxdWVuY2UsIGFuZCB0aGUKKwkJc2VxdWVuY2UgbnVtYmVyIGlzIGxhdGVyIHVzZWQgd2l0aCBhZGRBbm5vLgorCitlZGl0RmlsZSBwYXRobmFtZQorCQlTZXQgdGhlIG5hbWUgZm9yIHRoZSBidWZmZXIgYW5kIGVkaXQgdGhlIGZpbGUgInBhdGhuYW1lIiwgYQorCQlzdHJpbmcgYXJndW1lbnQuCisJCU5vcm1hbCB3YXkgZm9yIHRoZSBJREUgdG8gdGVsbCB0aGUgZWRpdG9yIHRvIGVkaXQgYSBmaWxlLiAgSWYKKwkJdGhlIElERSBpcyBnb2luZyB0byBwYXNzIHRoZSBmaWxlIHRleHQgdG8gdGhlIGVkaXRvciB1c2UgdGhlc2UKKwkJY29tbWFuZHMgaW5zdGVhZDoKKwkJCXNldEZ1bGxOYW1lCisJCQlpbnNlcnQKKwkJCWluaXREb25lCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKworZW5hYmxlQmFsbG9vbkV2YWwKKwkJTm90IGltcGxlbWVudGVkLgorCitlbmRBdG9taWMJRW5kIGFuIGF0b21pYyBvcGVyYXRpb24uICBUaGUgY2hhbmdlcyBiZXR3ZWVuICJzdGFydEF0b21pYyIKKwkJYW5kICJlbmRBdG9taWMiIGNhbiBiZSB1bmRvbmUgYXMgb25lIG9wZXJhdGlvbi4gIEJ1dCBpdCdzIG5vdAorCQlpbXBsZW1lbnRlZCB5ZXQuICBSZWRyYXcgd2hlbiBuZWNlc3NhcnkuCisKK2d1YXJkIG9mZiBsZW4KKwkJTWFyayBhbiBhcmVhIGluIHRoZSBidWZmZXIgYXMgZ3VhcmRlZC4gIFRoaXMgbWVhbnMgaXQgY2Fubm90CisJCWJlIGVkaXRlZC4gICJvZmYiIGFuZCAibGVuIiBhcmUgbnVtYmVycyBhbmQgc3BlY2lmeSB0aGUgdGV4dAorCQl0byBiZSBndWFyZGVkLgorCitpbml0RG9uZQlNYXJrIHRoZSBidWZmZXIgYXMgcmVhZHkgZm9yIHVzZS4gIEltcGxpY2l0bHkgbWFrZXMgdGhlIGJ1ZmZlcgorCQl0aGUgY3VycmVudCBidWZmZXIuICBGaXJlcyB0aGUgQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmQgZXZlbnQuCisKK21vdmVBbm5vVG9Gcm9udCBzZXJOdW0KKwkJTm90IGltcGxlbWVudGVkLgorCituZXRiZWFuc0J1ZmZlciBpc05ldGJlYW5zQnVmZmVyCisJCUlmICJpc05ldGJlYW5zQnVmZmVyIiBpcyAiVCIgdGhlbiB0aGlzIGJ1ZmZlciBpcyBgYG93bmVkJycgYnkKKwkJTmV0QmVhbnMuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMi4KKworcHV0QnVmZmVyTnVtYmVyIHBhdGhuYW1lCisJCUFzc29jaWF0ZSBhIGJ1ZmZlciBudW1iZXIgd2l0aCB0aGUgVmltIGJ1ZmZlciBieSB0aGUgbmFtZQorCQkicGF0aG5hbWUiLCBhIHN0cmluZyBhcmd1bWVudC4gIFRvIGJlIHVzZWQgd2hlbiB0aGUgZWRpdG9yCisJCXJlcG9ydGVkIGVkaXRpbmcgYW5vdGhlciBmaWxlIHRvIHRoZSBJREUgYW5kIHRoZSBJREUgbmVlZHMgdG8KKwkJdGVsbCB0aGUgZWRpdG9yIHdoYXQgYnVmZmVyIG51bWJlciBpdCB3aWxsIHVzZSBmb3IgdGhpcyBmaWxlLgorCQlBbHNvIG1hcmtzIHRoZSBidWZmZXIgYXMgaW5pdGlhbGl6ZWQuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKworcmFpc2UJCUJyaW5nIHRoZSBlZGl0b3IgdG8gdGhlIGZvcmVncm91bmQuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKworcmVtb3ZlQW5ubyBzZXJOdW0KKwkJUmVtb3ZlIGEgcHJldmlvdXNseSBwbGFjZSBhbm5vdGF0aW9uIGZvciB0aGlzIGJ1ZmZlci4KKwkJInNlck51bSIgaXMgdGhlIHNhbWUgbnVtYmVyIHVzZWQgaW4gYWRkQW5uby4KKworc2F2ZQkJU2F2ZSB0aGUgYnVmZmVyIHdoZW4gaXQgd2FzIG1vZGlmaWVkLiAgVGhlIG90aGVyIHNpZGUgb2YgdGhlCisJCWludGVyZmFjZSBpcyBleHBlY3RlZCB0byB3cml0ZSB0aGUgYnVmZmVyIGFuZCBpbnZva2UKKwkJInNldE1vZGlmaWVkIiB0byByZXNldCB0aGUgImNoYW5nZWQiIGZsYWcgb2YgdGhlIGJ1ZmZlci4KKwkJVGhlIHdyaXRpbmcgaXMgc2tpcHBlZCB3aGVuIG9uZSBvZiB0aGVzZSBjb25kaXRpb25zIGlzIHRydWU6CisJCS0gJ3dyaXRlJyBpcyBub3Qgc2V0CisJCS0gdGhlIGJ1ZmZlciBpcyByZWFkLW9ubHkKKwkJLSB0aGUgYnVmZmVyIGRvZXMgbm90IGhhdmUgYSBmaWxlIG5hbWUKKwkJLSAnYnVmdHlwZScgZGlzYWxsb3dzIHdyaXRpbmcKKwkJTmV3IGluIHZlcnNpb24gMi4yLgorCitzZXRBc1VzZXIJTm90IGltcGxlbWVudGVkLgorCitzZXRCdWZmZXJOdW1iZXIgcGF0aG5hbWUKKwkJQXNzb2NpYXRlIGEgYnVmZmVyIG51bWJlciB3aXRoIFZpbSBidWZmZXIgYnkgdGhlIG5hbWUKKwkJInBhdGhuYW1lIi4gIFRvIGJlIHVzZWQgd2hlbiB0aGUgZWRpdG9yIHJlcG9ydGVkIGVkaXRpbmcKKwkJYW5vdGhlciBmaWxlIHRvIHRoZSBJREUgYW5kIHRoZSBJREUgbmVlZHMgdG8gdGVsbCB0aGUgZWRpdG9yCisJCXdoYXQgYnVmZmVyIG51bWJlciBpdCB3aWxsIHVzZSBmb3IgdGhpcyBmaWxlLgorCQlIYXMgdGhlIHNpZGUgZWZmZWN0IG9mIG1ha2luZyB0aGUgYnVmZmVyIHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJU2VlICJwdXRCdWZmZXJOdW1iZXIiIGZvciBhIG1vcmUgdXNlZnVsIGNvbW1hbmQuCisKK3NldENvbnRlbnRUeXBlCisJCU5vdCBpbXBsZW1lbnRlZC4KKworc2V0RG90IG9mZglNYWtlIHRoZSBidWZmZXIgdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCBzZXQgdGhlIGN1cnNvciBhdCB0aGUKKwkJc3BlY2lmaWVkIHBvc2l0aW9uLiAgSWYgdGhlcmUgYXJlIGZvbGRzIHRoZXkgYXJlIG9wZW5lZCB0bworCQltYWtlIHRoZSBjdXJzb3IgbGluZSB2aXNpYmxlLgorCQlJbiB2ZXJzaW9uIDIuMSAibG51bS9jb2wiIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgIm9mZiIuCisKK3NldEV4aXREZWxheSBzZWNvbmRzCisJCVNldCB0aGUgZGVsYXkgZm9yIGV4aXRpbmcgdG8gInNlY29uZHMiLCBhIG51bWJlci4KKwkJVGhpcyBkZWxheSBpcyB1c2VkIHRvIGdpdmUgdGhlIElERSBhIGNoYW5jZSB0byBoYW5kbGUgdGhpbmdzCisJCWJlZm9yZSByZWFsbHkgZXhpdGluZy4gIFRoZSBkZWZhdWx0IGRlbGF5IGlzIHR3byBzZWNvbmRzLgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK3NldEZ1bGxOYW1lIHBhdGhuYW1lCisJCVNldCB0aGUgZmlsZSBuYW1lIHRvIGJlIHVzZWQgZm9yIGEgYnVmZmVyIHRvICJwYXRobmFtZSIsIGEKKwkJc3RyaW5nIGFyZ3VtZW50LgorCQlVc2VkIHdoZW4gdGhlIElERSB3YW50cyB0byBlZGl0IGEgZmlsZSB1bmRlciBjb250cm9sIG9mIHRoZQorCQlJREUuICBUaGlzIG1ha2VzIHRoZSBidWZmZXIgdGhlIGN1cnJlbnQgYnVmZmVyLCBidXQgZG9lcyBub3QKKwkJcmVhZCB0aGUgZmlsZS4gICJpbnNlcnQiIGNvbW1hbmRzIHdpbGwgYmUgdXNlZCBuZXh0IHRvIHNldCB0aGUKKwkJY29udGVudHMuCisKK3NldExvY0FuZFNpemUJTm90IGltcGxlbWVudGVkLgorCitzZXRNYXJrCQlOb3QgaW1wbGVtZW50ZWQuCisKK3NldE1vZGlmaWVkIG1vZGlmaWVkCisJCVdoZW4gdGhlIGJvb2xlYW4gYXJndW1lbnQgIm1vZGlmaWVkIiBpcyAiVCIgbWFyayB0aGUgYnVmZmVyIGFzCisJCW1vZGlmaWVkLCB3aGVuIGl0IGlzICJGIiBtYXJrIGl0IGFzIHVubW9kaWZpZWQuCisKK3NldFJlYWRPbmx5CU5vdCBpbXBsZW1lbnRlZC4KKworc2V0U3R5bGUJTm90IGltcGxlbWVudGVkLgorCitzZXRUaXRsZSBuYW1lCisJCVNldCB0aGUgdGl0bGUgZm9yIHRoZSBidWZmZXIgdG8gIm5hbWUiLCBhIHN0cmluZyBhcmd1bWVudC4KKwkJVGhlIHRpdGxlIGlzIG9ubHkgdXNlZCBmb3IgTmV0QmVhbnMgZnVuY3Rpb25zLCBub3QgYnkgVmltLgorCitzZXRWaXNpYmxlIHZpc2libGUKKwkJV2hlbiB0aGUgYm9vbGVhbiBhcmd1bWVudCAidmlzaWJsZSIgaXMgIlQiLCBnb3RvIHRoZSBidWZmZXIuCisJCVRoZSAiRiIgYXJndW1lbnQgZG9lcyBub3RoaW5nLgorCitzaG93QmFsbG9vbiB0ZXh0CisJCVNob3cgYSBiYWxsb29uIChwb3B1cCB3aW5kb3cpIGF0IHRoZSBtb3VzZSBwb2ludGVyIHBvc2l0aW9uLAorCQljb250YWluaW5nICJ0ZXh0IiwgYSBzdHJpbmcgYXJndW1lbnQuICBUaGUgYmFsbG9vbiBzaG91bGQKKwkJZGlzYXBwZWFyIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG1vcmUgdGhhbiBhIGZldyBwaXhlbHMuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKworc3BlY2lhbEtleXMJTm90IGltcGxlbWVudGVkLgorCitzdGFydEF0b21pYwlCZWdpbiBhbiBhdG9taWMgb3BlcmF0aW9uLiAgVGhlIHNjcmVlbiB3aWxsIG5vdCBiZSB1cGRhdGVkCisJCXVudGlsICJlbmRBdG9taWMiIGlzIGdpdmVuLgorCitzdGFydENhcmV0TGlzdGVuCisJCU5vdCBpbXBsZW1lbnRlZC4KKworc3RhcnREb2N1bWVudExpc3RlbgorCQlNYXJrIHRoZSBidWZmZXIgdG8gcmVwb3J0IGNoYW5nZXMgdG8gdGhlIElERSB3aXRoIHRoZQorCQkiaW5zZXJ0IiBhbmQgInJlbW92ZSIgZXZlbnRzLiAgVGhlIGRlZmF1bHQgaXMgdG8gcmVwb3J0CisJCWNoYW5nZXMuCisKK3N0b3BDYXJldExpc3RlbgorCQlOb3QgaW1wbGVtZW50ZWQuCisKK3N0b3BEb2N1bWVudExpc3RlbgorCQlNYXJrIHRoZSBidWZmZXIgdG8gc3RvcCByZXBvcnRpbmcgY2hhbmdlcyB0byB0aGUgSURFLgorCQlPcHBvc2l0ZSBvZiBzdGFydERvY3VtZW50TGlzdGVuLgorCit1bmd1YXJkIG9mZiBsZW4KKwkJT3Bwb3NpdGUgb2YgImd1YXJkIiwgcmVtb3ZlIGd1YXJkaW5nIGZvciBhIHRleHQgYXJlYS4KKwordmVyc2lvbgkJTm90IGltcGxlbWVudGVkLgorCisKKzEwLjQgRnVuY3Rpb25zIGFuZCBSZXBsaWVzCQkJCSpuYi1mdW5jdGlvbnMqCisKK2dldERvdAkJTm90IGltcGxlbWVudGVkLgorCitnZXRDdXJzb3IJUmV0dXJuIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgY3Vyc29yIHBvc2l0aW9uLgorCQlUaGUgcmVwbHkgaXM6CisJCQlzZXFubyBidWZJRCBsbnVtIGNvbCBvZmYKKwkJc2Vxbm8gPSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uCisJCWJ1ZklEID0gYnVmZmVyIElEIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciAoaWYgdGhpcyBpcyB1bmtub3duIC0xCisJCQlpcyB1c2VkKQorCQlsbnVtICA9IGxpbmUgbnVtYmVyIG9mIHRoZSBjdXJzb3IgKGZpcnN0IGxpbmUgaXMgb25lKQorCQljb2wgICA9IGNvbHVtbiBudW1iZXIgb2YgdGhlIGN1cnNvciAoaW4gYnl0ZXMsIHplcm8gYmFzZWQpCisJCW9mZiAgID0gb2Zmc2V0IG9mIHRoZSBjdXJzb3IgaW4gdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKworZ2V0TGVuZ3RoCVJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCisJCVJlcGx5IGV4YW1wbGUgZm9yIGEgYnVmZmVyIHdpdGggNTAwMCBieXRlczoKKwkJCTEyMyA1MDAwCisJCVRPRE86IGV4cGxhaW4gdXNlIG9mIHBhcnRpYWwgbGluZS4KKworZ2V0TWFyawkJTm90IGltcGxlbWVudGVkLgorCitnZXRNb2RpZmllZAlXaGVuIGEgYnVmZmVyIGlzIHNwZWNpZmllZDogUmV0dXJuIHplcm8gaWYgdGhlIGJ1ZmZlciBkb2VzIG5vdAorCQloYXZlIGNoYW5nZXMsIG9uZSBpZiBpdCBkb2VzIGhhdmUgY2hhbmdlcy4KKwkJV2hlbiBubyBidWZmZXIgaXMgc3BlY2lmaWVkIChidWZmZXIgbnVtYmVyIHplcm8pOiBSZXR1cm4gdGhlCisJCW51bWJlciBvZiBidWZmZXJzIHdpdGggY2hhbmdlcy4gIFdoZW4gdGhlIHJlc3VsdCBpcyB6ZXJvIGl0J3MKKwkJc2FmZSB0byB0ZWxsIFZpbSB0byBleGl0LgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK2dldFRleHQJCVJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBhcyBhIHN0cmluZy4KKwkJUmVwbHkgZXhhbXBsZSBmb3IgYSBidWZmZXIgd2l0aCB0d28gbGluZXMKKwkJCTEyMyAiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmVcbiIKKwkJTk9URTogZG9jcyBpbmRpY2F0ZSBhbiBvZmZzZXQgYW5kIGxlbmd0aCBhcmd1bWVudCwgYnV0IHRoaXMgaXMKKwkJbm90IGltcGxlbWVudGVkLgorCitpbnNlcnQgb2ZmIHRleHQKKwkJSW5zZXJ0ICJ0ZXh0IiBiZWZvcmUgcG9zaXRpb24gIm9mZiIuICAidGV4dCIgaXMgYSBzdHJpbmcKKwkJYXJndW1lbnQsICJvZmYiIGEgbnVtYmVyLgorCQlQb3NzaWJsZSByZXBsaWVzOgorCQkJMTIzCQlubyBwcm9ibGVtCisJCQkxMjMgIW1lc3NhZ2UJZmFpbGVkCisJCU5vdGUgdGhhdCB0aGUgbWVzc2FnZSBpbiB0aGUgcmVwbHkgaXMgbm90IHF1b3RlZC4KKworcmVtb3ZlIG9mZiBsZW5ndGgKKwkJRGVsZXRlICJsZW5ndGgiIGJ5dGVzIG9mIHRleHQgYXQgcG9zaXRpb24gIm9mZiIuICBCb3RoCisJCWFyZ3VtZW50cyBhcmUgbnVtYmVycy4KKwkJUG9zc2libGUgcmVwbGllczoKKwkJCTEyMwkJbm8gcHJvYmxlbQorCQkJMTIzICFtZXNzYWdlCWZhaWxlZAorCQlOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgaW4gdGhlIHJlcGx5IGlzIG5vdCBxdW90ZWQuCisKK3NhdmVBbmRFeGl0CVBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgY2xvc2luZyBWaW06ICI6Y29uZmlybSBxYWxsIi4KKwkJSWYgdGhlcmUgYXJlIG5vIGNoYW5nZWQgZmlsZXMgb3IgdGhlIHVzZXIgZG9lcyBub3QgY2FuY2VsIHRoZQorCQlvcGVyYXRpb24gVmltIGV4aXRzIGFuZCBubyByZXN1bHQgaXMgc2VudCBiYWNrLiAgVGhlIElERSBjYW4KKwkJY29uc2lkZXIgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBhcyBhIHN1Y2Nlc3NmdWwgcmVzdWx0LgorCQlJZiB0aGUgdXNlciBjYW5jZWxzIHRoZSBvcGVyYXRpb24gdGhlIG51bWJlciBvZiBtb2RpZmllZAorCQlidWZmZXJzIHRoYXQgcmVtYWlucyBpcyByZXR1cm5lZCBhbmQgVmltIGRvZXMgbm90IGV4aXQuCisJCU5ldyBpbiB2ZXJzaW9uIDIuMS4KKworCisxMC41IEV2ZW50cwkJCQkJCSpuYi1ldmVudHMqCisKK2JhbGxvb25FdmFsIG9mZiBsZW4gdHlwZQorCQlUaGUgbW91c2UgcG9pbnRlciByZXN0cyBvbiB0ZXh0IGZvciBhIHNob3J0IHdoaWxlLiAgV2hlbiAibGVuIgorCQlpcyB6ZXJvLCB0aGVyZSBpcyBubyBzZWxlY3Rpb24gYW5kIHRoZSBwb2ludGVyIGlzIGF0IHBvc2l0aW9uCisJCSJvZmYiLiAgV2hlbiAibGVuIiBpcyBub24temVybyB0aGUgdGV4dCBmcm9tIHBvc2l0aW9uICJvZmYiIHRvCisJCSJvZmYiICsgImxlbiIgaXMgc2VsZWN0ZWQuCisJCU9ubHkgc2VudCBhZnRlciAiZW5hYmxlQmFsbG9vbkV2YWwiIHdhcyB1c2VkIGZvciB0aGlzIGJ1ZmZlci4KKwkJInR5cGUiIGlzIG5vdCB5ZXQgZGVmaW5lZC4KKwkJTm90IGltcGxlbWVudGVkIHlldC4KKworYmFsbG9vblRleHQgdGV4dAorCQlVc2VkIHdoZW4gJ2JhbGxvb25ldmFsJyBpcyBzZXQgYW5kIHRoZSBtb3VzZSBwb2ludGVyIHJlc3RzIG9uCisJCXNvbWUgdGV4dCBmb3IgYSBtb21lbnQuICAidGV4dCIgaXMgYSBzdHJpbmcsIHRoZSB0ZXh0IHVuZGVyCisJCXRoZSBtb3VzZSBwb2ludGVyLgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK2J1dHRvblJlbGVhc2UgYnV0dG9uIGxudW0gY29sCisJCVJlcG9ydCB3aGljaCBidXR0b24gd2FzIHByZXNzZWQgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3Vyc29yCisJCWF0IHRoZSB0aW1lIG9mIHRoZSByZWxlYXNlLiAgT25seSBmb3IgYnVmZmVycyB0aGF0IGFyZSBvd25lZAorCQlieSBOZXRCZWFucy4gIFRoaXMgZXZlbnQgaXMgbm90IHNlbnQgaWYgdGhlIGJ1dHRvbiB3YXMKKwkJcmVsZWFzZWQgd2hpbGUgdGhlIG1vdXNlIHdhcyBpbiB0aGUgc3RhdHVzIGxpbmUgb3IgaW4gYQorCQlzZXBhcmF0b3IgbGluZS4gSWYgY29sIGlzIGxlc3MgdGhhbiAxIHRoZSBidXR0b24gcmVsZWFzZSB3YXMKKwkJaW4gdGhlIHNpZ24gYXJlYS4KKwkJTmV3IGluIHZlcnNpb24gMi4yLgorCitmaWxlQ2xvc2VkCU5vdCBpbXBsZW1lbnRlZC4KKworZmlsZU1vZGlmaWVkCU5vdCBpbXBsZW1lbnRlZC4KKworZmlsZU9wZW5lZCBwYXRobmFtZSBvcGVuIG1vZGlmaWVkCisJCUEgZmlsZSB3YXMgb3BlbmVkIGJ5IHRoZSB1c2VyLgorCQlBcmd1bWVudHM6CisJCSAgIHBhdGhuYW1lCXN0cmluZwkgIG5hbWUgb2YgdGhlIGZpbGUKKwkJICAgb3BlbgkJYm9vbGVhbiAgIGFsd2F5cyAiVCIKKwkJICAgbW9kaWZpZWQJYm9vbGVhbiAgIGFsd2F5cyAiRiIKKworZ2VvbWV0cnkgY29scyByb3dzIHggeQorCQlSZXBvcnQgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoZSBlZGl0b3Igd2luZG93LgorCQlBcmd1bWVudHM6CisJCSAgIGNvbHMJCW51bWJlcgkgIG51bWJlciBvZiB0ZXh0IGNvbHVtbnMKKwkJICAgcm93cwkJbnVtYmVyCSAgbnVtYmVyIG9mIHRleHQgcm93cworCQkgICB4CQludW1iZXIJICBwaXhlbCBwb3NpdGlvbiBvbiBzY3JlZW4KKwkJICAgeQkJbnVtYmVyCSAgcGl4ZWwgcG9zaXRpb24gb24gc2NyZWVuCisJCU9ubHkgd29ya3MgZm9yIE1vdGlmLgorCitpbnNlcnQgb2ZmIHRleHQKKwkJVGV4dCAidGV4dCIgaGFzIGJlZW4gaW5zZXJ0ZWQgaW4gVmltIGF0IHBvc2l0aW9uICJvZmYiLgorCQlPbmx5IGZpcmVkIHdoZW4gZW5hYmxlZCwgc2VlICJzdGFydERvY3VtZW50TGlzdGVuIi4KKworaW52b2tlQWN0aW9uCU5vdCBpbXBsZW1lbnRlZC4KKwora2V5Q29tbWFuZCBrZXlOYW1lCisJCVJlcG9ydHMgYSBzcGVjaWFsIGtleSBiZWluZyBwcmVzc2VkIHdpdGggbmFtZSAia2V5TmFtZSIsIHdoaWNoCisJCWlzIGEgc3RyaW5nLgorCQlTdXBwb3J0ZWQga2V5IG5hbWVzOgorCQkJRjEJCWZ1bmN0aW9uIGtleSAxCisJCQlGMgkJZnVuY3Rpb24ga2V5IDIKKwkJCS4uLgorCQkJRjEyCQlmdW5jdGlvbiBrZXkgMTIKKworCQkJJyAnCQlzcGFjZSAod2l0aG91dCB0aGUgcXVvdGVzKQorCQkJIQkJZXhjbGFtYXRpb24gbWFyaworCQkJLi4uCQlhbnkgb3RoZXIgQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcgorCQkJfgkJdGlsZGUKKworCQkJWAkJYW55IHVucmVjb2duaXplZCBrZXkKKworCQlUaGUga2V5IG1heSBiZSBwcmVwZW5kZWQgYnkgIkMiLCAiUyIgYW5kL29yICJNIiBmb3IgQ29udHJvbCwKKwkJU2hpZnQgYW5kIE1ldGEgKEFsdCkgbW9kaWZpZXJzLiAgSWYgdGhlcmUgaXMgYSBtb2RpZmllciBhIGRhc2gKKwkJaXMgdXNlZCB0byBzZXBhcmF0ZSBpdCBmcm9tIHRoZSBrZXkgbmFtZS4gIEZvciBleGFtcGxlOgorCQkiQy1GMiIuCisJCUFTQ0lJIGNoYXJhY3RlcnMgYXJlIG5ldyBpbiB2ZXJzaW9uIDIuMS4KKwora2V5QXRQb3Mga2V5TmFtZSBsbnVtL2NvbAorCQlMaWtlICJrZXlDb21tYW5kIiBhbmQgYWxzbyByZXBvcnQgdGhlIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4KKwkJb2YgdGhlIGN1cnNvci4KKwkJTmV3IGluIHZlcnNpb24gMi4xLgorCitraWxsZWQJCUEgZmlsZSB3YXMgY2xvc2VkIGJ5IHRoZSB1c2VyLiAgT25seSBmb3IgZmlsZXMgdGhhdCBoYXZlIGJlZW4KKwkJYXNzaWduZWQgYSBudW1iZXIgYnkgdGhlIElERS4KKworbmV3RG90QW5kTWFyayBvZmYgb2ZmCisJCVJlcG9ydHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IgYmVpbmcgYXQgIm9mZiIgYnl0ZXMgaW50bworCQl0aGUgYnVmZmVyLiAgT25seSBzZW50IGp1c3QgYmVmb3JlIGEgImtleUNvbW1hbmQiIGV2ZW50LgorCitxdWl0CQlOb3QgaW1wbGVtZW50ZWQuCisKK3JlbW92ZSBvZmYgbGVuCisJCVRleHQgd2FzIGRlbGV0ZWQgaW4gVmltIGF0IHBvc2l0aW9uICJvZmYiIHdpdGggYnl0ZSBsZW5ndGgKKwkJImxlbiIuCisJCU9ubHkgZmlyZWQgd2hlbiBlbmFibGVkLCBzZWUgInN0YXJ0RG9jdW1lbnRMaXN0ZW4iLgorCityZXZlcnQJCU5vdCBpbXBsZW1lbnRlZC4KKworc2F2ZQkJVGhlIGJ1ZmZlciBoYXMgYmVlbiBzYXZlZCBhbmQgaXMgbm93IHVubW9kaWZpZWQuCisJCU9ubHkgZmlyZWQgd2hlbiBlbmFibGVkLCBzZWUgInN0YXJ0RG9jdW1lbnRMaXN0ZW4iLgorCitzdGFydHVwRG9uZQlUaGUgZWRpdG9yIGhhcyBmaW5pc2hlZCBpdHMgc3RhcnR1cCB3b3JrIGFuZCBpcyByZWFkeSBmb3IKKwkJZWRpdGluZyBmaWxlcy4KKwkJTmV3IGluIHZlcnNpb24gMi4xLgorCit1bm1vZGlmaWVkCVRoZSBidWZmZXIgaXMgbm93IHVubW9kaWZpZWQuCisJCU9ubHkgZmlyZWQgd2hlbiBlbmFibGVkLCBzZWUgInN0YXJ0RG9jdW1lbnRMaXN0ZW4iLgorCit2ZXJzaW9uIHZlcnMJUmVwb3J0IHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24uICBWaW0KKwkJcmVwb3J0cyAiMi4yIiAoaW5jbHVkaW5nIHRoZSBxdW90ZXMpLgorCisKKzEwLjYgU3BlY2lhbCBtZXNzYWdlcwkJCQkJKm5iLXNwZWNpYWwqCisKK1RoZXNlIG1lc3NhZ2VzIGRvIG5vdCBmb2xsb3cgdGhlIHN0eWxlIG9mIHRoZSBtZXNzYWdlcyBhYm92ZS4gIFRoZXkgYXJlCit0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSBjaGFyYWN0ZXIuCisKK0FDQ0VQVAkJTm90IHVzZWQuCisKK0FVVEggcGFzc3dvcmQJZWRpdG9yIC0+IElERTogRmlyc3QgbWVzc2FnZSB0aGF0IHRoZSBlZGl0b3Igc2VuZHMgdG8gdGhlIElERS4KKwkJTXVzdCBjb250YWluIHRoZSBwYXNzd29yZCBmb3IgdGhlIHNvY2tldCBzZXJ2ZXIsIGFzIHNwZWNpZmllZAorCQl3aXRoIHRoZSB8LW5ifCBhcmd1bWVudC4gIE5vIHF1b3RlcyBhcmUgdXNlZCEKKworRElTQ09OTkVDVAlJREUgLT4gZWRpdG9yOiBicmVhayB0aGUgY29ubmVjdGlvbi4gIFRoZSBlZGl0b3Igd2lsbCBleGl0LgorCQlUaGUgSURFIG11c3Qgb25seSBzZW5kIHRoaXMgbWVzc2FnZSB3aGVuIHRoZXJlIGFyZSBubyB1bnNhdmVkCisJCWNoYW5nZXMhCisKK0RFVEFDSAkJSURFIC0+IGVkaXRvcjogYnJlYWsgdGhlIGNvbm5lY3Rpb24gd2l0aG91dCBleGl0aW5nIHRoZQorCQllZGl0b3IuICBVc2VkIHdoZW4gdGhlIElERSBleGl0cyB3aXRob3V0IGJyaW5naW5nIGRvd24gdGhlCisJCWVkaXRvciBhcyB3ZWxsLgorCQlOZXcgaW4gdmVyc2lvbiAyLjEuCisKK1JFSkVDVAkJTm90IHVzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTEuIEtub3duIHByb2JsZW1zCQkJCQkqbmV0YmVhbnMtcHJvYmxlbXMqCisKK05VTCBieXRlcyBhcmUgbm90IHBvc3NpYmxlLiAgRm9yIGVkaXRvciAtPiBJREUgdGhleSB3aWxsIGFwcGVhciBhcyBOTAorY2hhcmFjdGVycy4gIEZvciBJREUgLT4gZWRpdG9yIHRoZXkgY2Fubm90IGJlIGluc2VydGVkLgorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vcHRpb25zLnR4dCBiL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmI1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vcHRpb25zLnR4dApAQCAtMCwwICsxLDY4MjYgQEAKKypvcHRpb25zLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKKworCitPcHRpb25zCQkJCQkJCSpvcHRpb25zKgorCisxLiBTZXR0aW5nIG9wdGlvbnMJCQl8c2V0LW9wdGlvbnwKKzIuIEF1dG9tYXRpY2FsbHkgc2V0dGluZyBvcHRpb25zCXxhdXRvLXNldHRpbmd8CiszLiBPcHRpb25zIHN1bW1hcnkJCQl8b3B0aW9uLXN1bW1hcnl8CisKK0ZvciBhbiBvdmVydmlldyBvZiBvcHRpb25zIHNlZSBoZWxwLnR4dCB8b3B0aW9uLWxpc3R8LgorCitWaW0gaGFzIGEgbnVtYmVyIG9mIGludGVybmFsIHZhcmlhYmxlcyBhbmQgc3dpdGNoZXMgd2hpY2ggY2FuIGJlIHNldCB0bworYWNoaWV2ZSBzcGVjaWFsIGVmZmVjdHMuICBUaGVzZSBvcHRpb25zIGNvbWUgaW4gdGhyZWUgZm9ybXM6CisJYm9vbGVhbgkJY2FuIG9ubHkgYmUgb24gb3Igb2ZmCQkqYm9vbGVhbiogKnRvZ2dsZSoKKwludW1iZXIJCWhhcyBhIG51bWVyaWMgdmFsdWUKKwlzdHJpbmcJCWhhcyBhIHN0cmluZyB2YWx1ZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFNldHRpbmcgb3B0aW9ucwkJCQkJKnNldC1vcHRpb24qCisKKwkJCQkJCQkqOnNlKiAqOnNldCoKKzpzZVt0XQkJCVNob3cgYWxsIG9wdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGVpciBkZWZhdWx0IHZhbHVlLgorCis6c2VbdF0gYWxsCQlTaG93IGFsbCBidXQgdGVybWluYWwgb3B0aW9ucy4KKworOnNlW3RdIHRlcm1jYXAJCVNob3cgYWxsIHRlcm1pbmFsIG9wdGlvbnMuICBOb3RlIHRoYXQgaW4gdGhlIEdVSSB0aGUKKwkJCWtleSBjb2RlcyBhcmUgbm90IHNob3duLCBiZWNhdXNlIHRoZXkgYXJlIGdlbmVyYXRlZAorCQkJaW50ZXJuYWxseSBhbmQgY2FuJ3QgYmUgY2hhbmdlZC4gIENoYW5naW5nIHRoZSB0ZXJtaW5hbAorCQkJY29kZXMgaW4gdGhlIEdVSSBpcyBub3QgdXNlZnVsIGVpdGhlci4uLgorCisJCQkJCQkJCSpFNTE4KiAqRTUxOSoKKzpzZVt0XSB7b3B0aW9ufT8JU2hvdyB2YWx1ZSBvZiB7b3B0aW9ufS4KKworOnNlW3RdIHtvcHRpb259CQlUb2dnbGUgb3B0aW9uOiBzZXQsIHN3aXRjaCBpdCBvbi4KKwkJCU51bWJlciBvcHRpb246IHNob3cgdmFsdWUuCisJCQlTdHJpbmcgb3B0aW9uOiBzaG93IHZhbHVlLgorCis6c2VbdF0gbm97b3B0aW9ufQlUb2dnbGUgb3B0aW9uOiBSZXNldCwgc3dpdGNoIGl0IG9mZi4KKworOnNlW3RdIHtvcHRpb259ISAgIG9yCis6c2VbdF0gaW52e29wdGlvbn0JVG9nZ2xlIG9wdGlvbjogSW52ZXJ0IHZhbHVlLiB7bm90IGluIFZpfQorCisJCQkJKjpzZXQtZGVmYXVsdCogKjpzZXQtJiogKjpzZXQtJnZpKiAqOnNldC0mdmltKgorOnNlW3RdIHtvcHRpb259JglSZXNldCBvcHRpb24gdG8gaXRzIGRlZmF1bHQgdmFsdWUuICBNYXkgZGVwZW5kIG9uIHRoZQorCQkJY3VycmVudCB2YWx1ZSBvZiAnY29tcGF0aWJsZScuIHtub3QgaW4gVml9Cis6c2VbdF0ge29wdGlvbn0mdmkJUmVzZXQgb3B0aW9uIHRvIGl0cyBWaSBkZWZhdWx0IHZhbHVlLiB7bm90IGluIFZpfQorOnNlW3RdIHtvcHRpb259JnZpbQlSZXNldCBvcHRpb24gdG8gaXRzIFZpbSBkZWZhdWx0IHZhbHVlLiB7bm90IGluIFZpfQorCis6c2VbdF0gYWxsJgkJU2V0IGFsbCBvcHRpb25zLCBleGNlcHQgdGVybWluYWwgb3B0aW9ucywgdG8gdGhlaXIKKwkJCWRlZmF1bHQgdmFsdWUuCVRoZSB2YWx1ZXMgb2YgJ3Rlcm0nLCAnbGluZXMnIGFuZAorCQkJJ2NvbHVtbnMnIGFyZSBub3QgY2hhbmdlZC4ge25vdCBpbiBWaX0KKworCQkJCQkJKjpzZXQtYXJncyogKkU0ODcqICpFNTIxKgorOnNlW3RdIHtvcHRpb259PXt2YWx1ZX0JCW9yCis6c2VbdF0ge29wdGlvbn06e3ZhbHVlfQorCQkJU2V0IHN0cmluZyBvciBudW1iZXIgb3B0aW9uIHRvIHt2YWx1ZX0uCisJCQlGb3IgbnVtZXJpYyBvcHRpb25zIHRoZSB2YWx1ZSBjYW4gYmUgZ2l2ZW4gaW4gZGVjaW1hbCwKKwkJCWhleCAocHJlY2VkZWQgd2l0aCAweCkgb3Igb2N0YWwgKHByZWNlZGVkIHdpdGggJzAnKQorCQkJKGhleCBhbmQgb2N0YWwgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciBtYWNoaW5lcyB3aGljaAorCQkJaGF2ZSB0aGUgc3RydG9sKCkgZnVuY3Rpb24pLgorCQkJVGhlIG9sZCB2YWx1ZSBjYW4gYmUgaW5zZXJ0ZWQgYnkgdHlwaW5nICd3aWxkY2hhcicgKGJ5CisJCQlkZWZhdWx0IHRoaXMgaXMgYSA8VGFiPiBvciBDVFJMLUUgaWYgJ2NvbXBhdGlibGUnIGlzCisJCQlzZXQpLiAgU2VlIHxjbWRsaW5lLWNvbXBsZXRpb258LgorCQkJV2hpdGUgc3BhY2UgYmV0d2VlbiB7b3B0aW9ufSBhbmQgJz0nIGlzIGFsbG93ZWQgYW5kCisJCQl3aWxsIGJlIGlnbm9yZWQuICBXaGl0ZSBzcGFjZSBiZXR3ZWVuICc9JyBhbmQge3ZhbHVlfQorCQkJaXMgbm90IGFsbG93ZWQuCisJCQlTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGZvciB1c2luZyB3aGl0ZSBzcGFjZSBhbmQKKwkJCWJhY2tzbGFzaGVzIGluIHt2YWx1ZX0uCisKKzpzZVt0XSB7b3B0aW9ufSs9e3ZhbHVlfQkJCQkqOnNldCs9KgorCQkJQWRkIHRoZSB7dmFsdWV9IHRvIGEgbnVtYmVyIG9wdGlvbiwgb3IgYXBwZW5kIHRoZQorCQkJe3ZhbHVlfSB0byBhIHN0cmluZyBvcHRpb24uICBXaGVuIHRoZSBvcHRpb24gaXMgYQorCQkJY29tbWEgc2VwYXJhdGVkIGxpc3QsIGEgY29tbWEgaXMgYWRkZWQsIHVubGVzcyB0aGUKKwkJCXZhbHVlIHdhcyBlbXB0eS4KKwkJCUlmIHRoZSBvcHRpb24gaXMgYSBsaXN0IG9mIGZsYWdzLCBzdXBlcmZsdW91cyBmbGFncworCQkJYXJlIHJlbW92ZWQuICBPdGhlcndpc2UgdGhlcmUgaXMgbm8gY2hlY2sgZm9yIGRvdWJsZWQKKwkJCXZhbHVlcy4gIFlvdSBjYW4gYXZvaWQgdGhpcyBieSByZW1vdmluZyBhIHZhbHVlIGZpcnN0LgorCQkJRXhhbXBsZTogPgorCQkJCTpzZXQgZ3Vpb3B0aW9ucy09VCBndWlvcHRpb25zKz1UCis8CQkJQWxzbyBzZWUgfDpzZXQtYXJnc3wgYWJvdmUuCisJCQl7bm90IGluIFZpfQorCis6c2VbdF0ge29wdGlvbn1ePXt2YWx1ZX0JCQkJKjpzZXRePSoKKwkJCU11bHRpcGx5IHRoZSB7dmFsdWV9IHRvIGEgbnVtYmVyIG9wdGlvbiwgb3IgcHJlcGVuZAorCQkJdGhlIHt2YWx1ZX0gdG8gYSBzdHJpbmcgb3B0aW9uLiAgV2hlbiB0aGUgb3B0aW9uIGlzIGEKKwkJCWNvbW1hIHNlcGFyYXRlZCBsaXN0LCBhIGNvbW1hIGlzIGFkZGVkLCB1bmxlc3MgdGhlCisJCQl2YWx1ZSB3YXMgZW1wdHkuCisJCQlBbHNvIHNlZSB8OnNldC1hcmdzfCBhYm92ZS4KKwkJCXtub3QgaW4gVml9CisKKzpzZVt0XSB7b3B0aW9ufS09e3ZhbHVlfQkJCQkqOnNldC09KgorCQkJU3VidHJhY3QgdGhlIHt2YWx1ZX0gZnJvbSBhIG51bWJlciBvcHRpb24sIG9yIHJlbW92ZQorCQkJdGhlIHt2YWx1ZX0gZnJvbSBhIHN0cmluZyBvcHRpb24sIGlmIGl0IGlzIHRoZXJlLgorCQkJSWYgdGhlIHt2YWx1ZX0gaXMgbm90IGZvdW5kIGluIGEgc3RyaW5nIG9wdGlvbiwgdGhlcmUKKwkJCWlzIG5vIGVycm9yIG9yIHdhcm5pbmcuICBXaGVuIHRoZSBvcHRpb24gaXMgYSBjb21tYQorCQkJc2VwYXJhdGVkIGxpc3QsIGEgY29tbWEgaXMgZGVsZXRlZCwgdW5sZXNzIHRoZSBvcHRpb24KKwkJCWJlY29tZXMgZW1wdHkuCisJCQlXaGVuIHRoZSBvcHRpb24gaXMgYSBsaXN0IG9mIGZsYWdzLCB7dmFsdWV9IG11c3QgYmUKKwkJCWV4YWN0bHkgYXMgdGhleSBhcHBlYXIgaW4gdGhlIG9wdGlvbi4gIFJlbW92ZSBmbGFncworCQkJb25lIGJ5IG9uZSB0byBhdm9pZCBwcm9ibGVtcy4KKwkJCUFsc28gc2VlIHw6c2V0LWFyZ3N8IGFib3ZlLgorCQkJe25vdCBpbiBWaX0KKworVGhlIHtvcHRpb259IGFyZ3VtZW50cyB0byAiOnNldCIgbWF5IGJlIHJlcGVhdGVkLiAgRm9yIGV4YW1wbGU6ID4KKwk6c2V0IGFpIG5vc2kgc3c9MyB0cz0zCitJZiB5b3UgbWFrZSBhbiBlcnJvciBpbiBvbmUgb2YgdGhlIGFyZ3VtZW50cywgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGdpdmVuCithbmQgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgd2lsbCBiZSBpZ25vcmVkLgorCisJCQkJCQkJKjpzZXQtdmVyYm9zZSoKK1doZW4gJ3ZlcmJvc2UnIGlzIG5vbi16ZXJvLCBkaXNwbGF5aW5nIGFuIG9wdGlvbiB2YWx1ZSB3aWxsIGFsc28gdGVsbCB3aGVyZSBpdAord2FzIGxhc3Qgc2V0LiAgRXhhbXBsZTogPgorCTp2ZXJib3NlIHNldCBzaGlmdHdpZHRoIGNpbmRlbnQ/CisJICBzaGlmdHdpZHRoPTQKKwkJICBMYXN0IHNldCBmcm9tIG1vZGVsaW5lCisJICBjaW5kZW50CisJCSAgTGFzdCBzZXQgZnJvbSAvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02MC9mdHBsdWdpbi9jLnZpbQorVGhpcyBpcyBvbmx5IGRvbmUgd2hlbiBzcGVjaWZpYyBvcHRpb24gdmFsdWVzIGFyZSByZXF1ZXN0ZWQsIG5vdCBmb3IgIjpzZXQKK2FsbCIgb3IgIjpzZXQiIHdpdGhvdXQgYW4gYXJndW1lbnQuCitXaGVuIHRoZSBvcHRpb24gd2FzIHNldCBieSBoYW5kIHRoZXJlIGlzIG5vICJMYXN0IHNldCIgbWVzc2FnZS4gIFRoZXJlIGlzIG9ubHkKK29uZSB2YWx1ZSBmb3IgYWxsIGxvY2FsIG9wdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lLiAgVGh1cyB0aGUgbWVzc2FnZSBhcHBsaWVzCit0byB0aGUgb3B0aW9uIG5hbWUsIG5vdCBuZWNlc3NhcmlseSBpdHMgdmFsdWUuCitXaGVuIHRoZSBvcHRpb24gd2FzIHNldCB3aGlsZSBleGVjdXRpbmcgYSBmdW5jdGlvbiwgdXNlciBjb21tYW5kIG9yCithdXRvY29tbWFuZCwgdGhlIHNjcmlwdCBpbiB3aGljaCBpdCB3YXMgZGVmaW5lZCBpcyByZXBvcnRlZC4KK05vdGUgdGhhdCBhbiBvcHRpb24gbWF5IGFsc28gaGF2ZSBiZWVuIHNldCBhcyBhIHNpZGUgZWZmZWN0IG9mIHNldHRpbmcKKydjb21wYXRpYmxlJy4KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK2V2YWwgZmVhdHVyZX0KKworCQkJCQkJCSo6c2V0LXRlcm1jYXAqICpFNTIyKgorRm9yIHtvcHRpb259IHRoZSBmb3JtICJ0X3h4IiBtYXkgYmUgdXNlZCB0byBzZXQgYSB0ZXJtY2FwIG9wdGlvbi4gIFRoaXMgd2lsbAorb3ZlcnJpZGUgdGhlIHZhbHVlIGZyb20gdGhlIHRlcm1jYXAuICBZb3UgY2FuIHRoZW4gdXNlIGl0IGluIGEgbWFwcGluZy4gIElmCit0aGUgInh4IiBwYXJ0IGNvbnRhaW5zIHNwZWNpYWwgY2hhcmFjdGVycywgdXNlIHRoZSA8dF94eD4gZm9ybTogPgorCTpzZXQgPHRfIzQ+PV5bT3QKK1RoaXMgY2FuIGFsc28gYmUgdXNlZCB0byB0cmFuc2xhdGUgYSBzcGVjaWFsIGNvZGUgZm9yIGEgbm9ybWFsIGtleS4gIEZvcgorZXhhbXBsZSwgaWYgQWx0LWIgcHJvZHVjZXMgPEVzYz5iLCB1c2UgdGhpczogPgorCTpzZXQgPE0tYj49XltiCisodGhlIF5bIGlzIGEgcmVhbCA8RXNjPiBoZXJlLCB1c2UgQ1RSTC1WIDxFc2M+IHRvIGVudGVyIGl0KQorVGhlIGFkdmFudGFnZSBvdmVyIGEgbWFwcGluZyBpcyB0aGF0IGl0IHdvcmtzIGluIGFsbCBzaXR1YXRpb25zLgorCitUaGUgbGlzdGluZyBmcm9tICI6c2V0IiBsb29rcyBkaWZmZXJlbnQgZnJvbSBWaS4gIExvbmcgc3RyaW5nIG9wdGlvbnMgYXJlIHB1dAorYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gIFRoZSBudW1iZXIgb2Ygb3B0aW9ucyBpcyBxdWl0ZSBsYXJnZS4JVGhlIG91dHB1dCBvZgorInNldCBhbGwiIHByb2JhYmx5IGRvZXMgbm90IGZpdCBvbiB0aGUgc2NyZWVuLCBjYXVzaW5nIFZpbSB0byBnaXZlIHRoZQorfG1vcmUtcHJvbXB0fC4KKworCQkJCQkJCSpvcHRpb24tYmFja3NsYXNoKgorVG8gaW5jbHVkZSB3aGl0ZSBzcGFjZSBpbiBhIHN0cmluZyBvcHRpb24gdmFsdWUgaXQgaGFzIHRvIGJlIHByZWNlZGVkIHdpdGggYQorYmFja3NsYXNoLiAgVG8gaW5jbHVkZSBhIGJhY2tzbGFzaCB5b3UgaGF2ZSB0byB1c2UgdHdvLiAgRWZmZWN0aXZlbHkgdGhpcworbWVhbnMgdGhhdCB0aGUgbnVtYmVyIG9mIGJhY2tzbGFzaGVzIGluIGFuIG9wdGlvbiB2YWx1ZSBpcyBoYWx2ZWQgKHJvdW5kZWQKK2Rvd24pLgorQSBmZXcgZXhhbXBsZXM6ID4KKyAgIDpzZXQgdGFncz10YWdzXCAvdXNyL3RhZ3MJICAgIHJlc3VsdHMgaW4gInRhZ3MgL3Vzci90YWdzIgorICAgOnNldCB0YWdzPXRhZ3NcXCxmaWxlCSAgICByZXN1bHRzIGluICJ0YWdzXCxmaWxlIgorICAgOnNldCB0YWdzPXRhZ3NcXFwgZmlsZQkgICAgcmVzdWx0cyBpbiAidGFnc1wgZmlsZSIKKworVGhlICJ8IiBjaGFyYWN0ZXIgc2VwYXJhdGVzIGEgIjpzZXQiIGNvbW1hbmQgZnJvbSBhIGZvbGxvd2luZyBjb21tYW5kLglUbworaW5jbHVkZSB0aGUgInwiIGluIHRoZSBvcHRpb24gdmFsdWUsIHVzZSAiXHwiIGluc3RlYWQuCVRoaXMgZXhhbXBsZSBzZXRzIHRoZQorJ3RpdGxlc3RyaW5nJyBvcHRpb24gdG8gImhpfHRoZXJlIjogPgorICAgOnNldCB0aXRsZXN0cmluZz1oaVx8dGhlcmUKK1RoaXMgc2V0cyB0aGUgJ3RpdGxlc3RyaW5nJyBvcHRpb24gdG8gImhpIiBhbmQgJ2ljb25zdHJpbmcnIHRvICJ0aGVyZSI6ID4KKyAgIDpzZXQgdGl0bGVzdHJpbmc9aGl8c2V0IGljb25zdHJpbmc9dGhlcmUKKworRm9yIE1TLURPUyBhbmQgV0lOMzIgYmFja3NsYXNoZXMgaW4gZmlsZSBuYW1lcyBhcmUgbW9zdGx5IG5vdCByZW1vdmVkLglNb3JlCitwcmVjaXNlOiBGb3Igb3B0aW9ucyB0aGF0IGV4cGVjdCBhIGZpbGUgbmFtZSAodGhvc2Ugd2hlcmUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlcyBhcmUgZXhwYW5kZWQpIGEgYmFja3NsYXNoIGJlZm9yZSBhIG5vcm1hbCBmaWxlIG5hbWUgY2hhcmFjdGVyIGlzIG5vdAorcmVtb3ZlZC4gIEJ1dCBhIGJhY2tzbGFzaCBiZWZvcmUgYSBzcGVjaWFsIGNoYXJhY3RlciAoc3BhY2UsIGJhY2tzbGFzaCwgY29tbWEsCitldGMuKSBpcyB1c2VkIGxpa2UgZXhwbGFpbmVkIGFib3ZlLgorVGhlcmUgaXMgb25lIHNwZWNpYWwgc2l0dWF0aW9uLCB3aGVuIHRoZSB2YWx1ZSBzdGFydHMgd2l0aCAiXFwiOiA+CisgICA6c2V0IGRpcj1cXG1hY2hpbmVccGF0aAkgICAgcmVzdWx0cyBpbiAiXFxtYWNoaW5lXHBhdGgiCisgICA6c2V0IGRpcj1cXFxcbWFjaGluZVxccGF0aAkgICAgcmVzdWx0cyBpbiAiXFxtYWNoaW5lXHBhdGgiCisgICA6c2V0IGRpcj1cXHBhdGhcXGZpbGUJICAgIHJlc3VsdHMgaW4gIlxccGF0aFxmaWxlIiAod3JvbmchKQorRm9yIHRoZSBmaXJzdCBvbmUgdGhlIHN0YXJ0IGlzIGtlcHQsIGJ1dCBmb3IgdGhlIHNlY29uZCBvbmUgdGhlIGJhY2tzbGFzaGVzCithcmUgaGFsdmVkLiAgVGhpcyBtYWtlcyBzdXJlIGl0IHdvcmtzIGJvdGggd2hlbiB5b3UgZXhwZWN0IGJhY2tzbGFzaGVzIHRvIGJlCitoYWx2ZWQgYW5kIHdoZW4geW91IGV4cGVjdCB0aGUgYmFja3NsYXNoZXMgdG8gYmUga2VwdC4JVGhlIHRoaXJkIGdpdmVzIGEKK3Jlc3VsdCB3aGljaCBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3Ugd2FudC4gIEF2b2lkIGl0LgorCisJCQkJKmFkZC1vcHRpb24tZmxhZ3MqICpyZW1vdmUtb3B0aW9uLWZsYWdzKgorCQkJCSpFNTM5KiAqRTU1MCogKkU1NTEqICpFNTUyKgorU29tZSBvcHRpb25zIGFyZSBhIGxpc3Qgb2YgZmxhZ3MuICBXaGVuIHlvdSB3YW50IHRvIGFkZCBhIGZsYWcgdG8gc3VjaCBhbgorb3B0aW9uLCB3aXRob3V0IGNoYW5naW5nIHRoZSBleGlzdGluZyBvbmVzLCB5b3UgY2FuIGRvIGl0IGxpa2UgdGhpczogPgorICAgOnNldCBndWlvcHRpb25zKz1hCitSZW1vdmUgYSBmbGFnIGZyb20gYW4gb3B0aW9uIGxpa2UgdGhpczogPgorICAgOnNldCBndWlvcHRpb25zLT1hCitUaGlzIHJlbW92ZXMgdGhlICdhJyBmbGFnIGZyb20gJ2d1aW9wdGlvbnMnLgorTm90ZSB0aGF0IHlvdSBzaG91bGQgYWRkIG9yIHJlbW92ZSBvbmUgZmxhZyBhdCBhIHRpbWUuCUlmICdndWlvcHRpb25zJyBoYXMKK3RoZSB2YWx1ZSAiYWIiLCB1c2luZyAic2V0IGd1aW9wdGlvbnMtPWJhIiB3b24ndCB3b3JrLCBiZWNhdXNlIHRoZSBzdHJpbmcgImJhIgorZG9lc24ndCBhcHBlYXIuCisKKwkJCSAgICo6c2V0X2VudiogKmV4cGFuZC1lbnYqICpleHBhbmQtZW52aXJvbm1lbnQtdmFyKgorRW52aXJvbm1lbnQgdmFyaWFibGVzIGluIG1vc3Qgc3RyaW5nIG9wdGlvbnMgd2lsbCBiZSBleHBhbmRlZC4JSWYgdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSBleGlzdHMgdGhlICckJyBhbmQgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZQorbmFtZSBpcyByZXBsYWNlZCB3aXRoIGl0cyB2YWx1ZS4gIElmIGl0IGRvZXMgbm90IGV4aXN0IHRoZSAnJCcgYW5kIHRoZSBuYW1lCithcmUgbm90IG1vZGlmaWVkLiAgQW55IG5vbi1pZCBjaGFyYWN0ZXIgKG5vdCBhIGxldHRlciwgZGlnaXQgb3IgJ18nKSBtYXkKK2ZvbGxvdyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZS4gIFRoYXQgY2hhcmFjdGVyIGFuZCB3aGF0IGZvbGxvd3MgaXMKK2FwcGVuZGVkIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuICBFeGFtcGxlczogPgorICAgOnNldCB0ZXJtPSRURVJNLm5ldworICAgOnNldCBwYXRoPS91c3IvJElOQ0xVREUsJEhPTUUvaW5jbHVkZSwuCitXaGVuIGFkZGluZyBvciByZW1vdmluZyBhIHN0cmluZyBmcm9tIGFuIG9wdGlvbiB3aXRoICI6c2V0IG9wdC09dmFsIiBvciAiOnNldAorb3B0Kz12YWwiIHRoZSBleHBhbnNpb24gaXMgZG9uZSBiZWZvcmUgdGhlIGFkZGluZyBvciByZW1vdmluZy4KKworCitIYW5kbGluZyBvZiBsb2NhbCBvcHRpb25zCQkJKmxvY2FsLW9wdGlvbnMqCisKK1NvbWUgb2YgdGhlIG9wdGlvbnMgb25seSBhcHBseSB0byBhIHdpbmRvdyBvciBidWZmZXIuICBFYWNoIHdpbmRvdyBvciBidWZmZXIKK2hhcyBpdHMgb3duIGNvcHkgb2YgdGhpcyBvcHRpb24sIHRodXMgY2FuIGVhY2ggaGF2ZSB0aGVpciBvd24gdmFsdWUuICBUaGlzCithbGxvd3MgeW91IHRvIHNldCAnbGlzdCcgaW4gb25lIHdpbmRvdyBidXQgbm90IGluIGFub3RoZXIuICBBbmQgc2V0Cisnc2hpZnR3aWR0aCcgdG8gMyBpbiBvbmUgYnVmZmVyIGFuZCA0IGluIGFub3RoZXIuCisKK1RoZSBmb2xsb3dpbmcgZXhwbGFpbnMgd2hhdCBoYXBwZW5zIHRvIHRoZXNlIGxvY2FsIG9wdGlvbnMgaW4gc3BlY2lmaWMKK3NpdHVhdGlvbnMuICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8ga25vdyBhbGwgb2YgdGhpcywgc2luY2UgVmltIG1vc3RseSB1c2VzCit0aGUgb3B0aW9uIHZhbHVlcyB5b3Ugd291bGQgZXhwZWN0LiAgVW5mb3J0dW5hdGVseSwgZG9pbmcgd2hhdCB0aGUgdXNlcgorZXhwZWN0cyBpcyBhIGJpdCBjb21wbGljYXRlZC4uLgorCitXaGVuIHNwbGl0dGluZyBhIHdpbmRvdywgdGhlIGxvY2FsIG9wdGlvbnMgYXJlIGNvcGllZCB0byB0aGUgbmV3IHdpbmRvdy4gIFRodXMKK3JpZ2h0IGFmdGVyIHRoZSBzcGxpdCB0aGUgY29udGVudHMgb2YgdGhlIHR3byB3aW5kb3dzIGxvb2sgdGhlIHNhbWUuCisKK1doZW4gZWRpdGluZyBhIG5ldyBidWZmZXIsIGl0cyBsb2NhbCBvcHRpb24gdmFsdWVzIG11c3QgYmUgaW5pdGlhbGl6ZWQuICBTaW5jZQordGhlIGxvY2FsIG9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIG1pZ2h0IGJlIHNwZWNpZmljYWxseSBmb3IgdGhhdCBidWZmZXIsCit0aGVzZSBhcmUgbm90IHVzZWQuICBJbnN0ZWFkLCBmb3IgZWFjaCBidWZmZXItbG9jYWwgb3B0aW9uIHRoZXJlIGFsc28gaXMgYQorZ2xvYmFsIHZhbHVlLCB3aGljaCBpcyB1c2VkIGZvciBuZXcgYnVmZmVycy4gIFdpdGggIjpzZXQiIGJvdGggdGhlIGxvY2FsIGFuZAorZ2xvYmFsIHZhbHVlIGlzIGNoYW5nZWQuICBXaXRoICJzZXRsb2NhbCIgb25seSB0aGUgbG9jYWwgdmFsdWUgaXMgY2hhbmdlZCwKK3RodXMgdGhpcyB2YWx1ZSBpcyBub3QgdXNlZCB3aGVuIGVkaXRpbmcgYSBuZXcgYnVmZmVyLgorCitXaGVuIGVkaXRpbmcgYSBidWZmZXIgdGhhdCBoYXMgYmVlbiBlZGl0ZWQgYmVmb3JlLCB0aGUgbGFzdCB1c2VkIHdpbmRvdworb3B0aW9ucyBhcmUgdXNlZCBhZ2Fpbi4gIElmIHRoaXMgYnVmZmVyIGhhcyBiZWVuIGVkaXRlZCBpbiB0aGlzIHdpbmRvdywgdGhlCit2YWx1ZXMgZnJvbSBiYWNrIHRoZW4gYXJlIHVzZWQuICBPdGhlcndpc2UgdGhlIHZhbHVlcyBmcm9tIHRoZSB3aW5kb3cgd2hlcmUKK3RoZSBidWZmZXIgd2FzIGVkaXRlZCBsYXN0IGFyZSB1c2VkLgorCitJdCdzIHBvc3NpYmxlIHRvIHNldCBhIGxvY2FsIHdpbmRvdyBvcHRpb24gc3BlY2lmaWNhbGx5IGZvciBhIHR5cGUgb2YgYnVmZmVyLgorV2hlbiB5b3UgZWRpdCBhbm90aGVyIGJ1ZmZlciBpbiB0aGUgc2FtZSB3aW5kb3csIHlvdSBkb24ndCB3YW50IHRvIGtlZXAKK3VzaW5nIHRoZXNlIGxvY2FsIHdpbmRvdyBvcHRpb25zLiAgVGhlcmVmb3JlIFZpbSBrZWVwcyBhIGdsb2JhbCB2YWx1ZSBvZiB0aGUKK2xvY2FsIHdpbmRvdyBvcHRpb25zLCB3aGljaCBpcyB1c2VkIHdoZW4gZWRpdGluZyBhbm90aGVyIGJ1ZmZlci4gIEVhY2ggd2luZG93CitoYXMgaXRzIG93biBjb3B5IG9mIHRoZXNlIHZhbHVlcy4gIFRodXMgdGhlc2UgYXJlIGxvY2FsIHRvIHRoZSB3aW5kb3csIGJ1dAorZ2xvYmFsIHRvIGFsbCBidWZmZXJzIGluIHRoZSB3aW5kb3cuICBXaXRoIHRoaXMgeW91IGNhbiBkbzogPgorCTplIG9uZQorCTpzZXQgbGlzdAorCTplIHR3bworTm93IHRoZSAnbGlzdCcgb3B0aW9uIHdpbGwgYWxzbyBiZSBzZXQgaW4gInR3byIsIHNpbmNlIHdpdGggdGhlICI6c2V0IGxpc3QiCitjb21tYW5kIHlvdSBoYXZlIGFsc28gc2V0IHRoZSBnbG9iYWwgdmFsdWUuID4KKwk6c2V0IG5vbGlzdAorCTplIG9uZQorCTpzZXRsb2NhbCBsaXN0CisJOmUgdHdvCitOb3cgdGhlICdsaXN0JyBvcHRpb24gaXMgbm90IHNldCwgYmVjYXVzZSAiOnNldCBub2xpc3QiIHJlc2V0cyB0aGUgZ2xvYmFsCit2YWx1ZSwgIjpzZXRsb2NhbCBsaXN0IiBvbmx5IGNoYW5nZXMgdGhlIGxvY2FsIHZhbHVlIGFuZCAiOmUgdHdvIiBnZXRzIHRoZQorZ2xvYmFsIHZhbHVlLiAgTm90ZSB0aGF0IGlmIHlvdSBkbyB0aGlzIG5leHQ6ID4KKwk6ZSBvbmUKK1lvdSB3aWxsIG5vdCBnZXQgYmFjayB0aGUgJ2xpc3QnIHZhbHVlIGFzIGl0IHdhcyB0aGUgbGFzdCB0aW1lIHlvdSBlZGl0ZWQKKyJvbmUiLglUaGUgb3B0aW9ucyBsb2NhbCB0byBhIHdpbmRvdyBhcmUgbm90IHJlbWVtYmVyZWQgZm9yIGVhY2ggYnVmZmVyLgorCisJCQkJCQkJKjpzZXRsKiAqOnNldGxvY2FsKgorOnNldGxbb2NhbF0gLi4uCQlMaWtlICI6c2V0IiBidXQgc2V0IG9ubHkgdGhlIHZhbHVlIGxvY2FsIHRvIHRoZQorCQkJY3VycmVudCBidWZmZXIgb3Igd2luZG93LiAgTm90IGFsbCBvcHRpb25zIGhhdmUgYQorCQkJbG9jYWwgdmFsdWUuICBJZiB0aGUgb3B0aW9uIGRvZXMgbm90IGhhdmUgYSBsb2NhbAorCQkJdmFsdWUgdGhlIGdsb2JhbCB2YWx1ZSBpcyBzZXQuCisJCQlXaXRoIHRoZSAiYWxsIiBhcmd1bWVudDogZGlzcGxheSBhbGwgbG9jYWwgb3B0aW9uJ3MKKwkJCWxvY2FsIHZhbHVlcy4KKwkJCVdpdGhvdXQgYXJndW1lbnQ6IERpc3BsYXkgYWxsIGxvY2FsIG9wdGlvbidzIGxvY2FsCisJCQl2YWx1ZXMgd2hpY2ggYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LgorCQkJV2hlbiBkaXNwbGF5aW5nIGEgc3BlY2lmaWMgbG9jYWwgb3B0aW9uLCBzaG93IHRoZQorCQkJbG9jYWwgdmFsdWUuICBGb3IgYSBnbG9iYWwgb3B0aW9uIHRoZSBnbG9iYWwgdmFsdWUgaXMKKwkJCXNob3duIChidXQgdGhhdCBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSkuCisJCQl7bm90IGluIFZpfQorCis6c2V0bFtvY2FsXSB7b3B0aW9ufTwJU2V0IHRoZSBsb2NhbCB2YWx1ZSBvZiB7b3B0aW9ufSB0byBpdHMgZ2xvYmFsIHZhbHVlLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6c2V0ZyogKjpzZXRnbG9iYWwqCis6c2V0Z1tsb2JhbF0gLi4uCUxpa2UgIjpzZXQiIGJ1dCBzZXQgb25seSB0aGUgZ2xvYmFsIHZhbHVlIGZvciBhIGxvY2FsCisJCQlvcHRpb24gd2l0aG91dCBjaGFuZ2luZyB0aGUgbG9jYWwgdmFsdWUuCisJCQlXaGVuIGRpc3BsYXlpbmcgYW4gb3B0aW9uLCB0aGUgZ2xvYmFsIHZhbHVlIGlzIHNob3duLgorCQkJV2l0aCB0aGUgImFsbCIgYXJndW1lbnQ6IGRpc3BsYXkgYWxsIGxvY2FsIG9wdGlvbidzCisJCQlnbG9iYWwgdmFsdWVzLgorCQkJV2l0aG91dCBhcmd1bWVudDogZGlzcGxheSBhbGwgbG9jYWwgb3B0aW9uJ3MgZ2xvYmFsCisJCQl2YWx1ZXMgd2hpY2ggYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LgorCQkJe25vdCBpbiBWaX0KKworRm9yIGJ1ZmZlci1sb2NhbCBhbmQgd2luZG93LWxvY2FsIG9wdGlvbnM6CisJQ29tbWFuZAkJIGdsb2JhbCB2YWx1ZQkgICAgbG9jYWwgdmFsdWUgfgorICAgICAgOnNldCBvcHRpb249dmFsdWUJICAgICBzZXQJCXNldAorIDpzZXRsb2NhbCBvcHRpb249dmFsdWUJICAgICAgLQkJCXNldAorOnNldGdsb2JhbCBvcHRpb249dmFsdWUJICAgICBzZXQJCSAtCisgICAgICA6c2V0IG9wdGlvbj8JICAgICAgLQkJICAgICAgIGRpc3BsYXkKKyA6c2V0bG9jYWwgb3B0aW9uPwkgICAgICAtCQkgICAgICAgZGlzcGxheQorOnNldGdsb2JhbCBvcHRpb24/CSAgICBkaXNwbGF5CQkgLQorCisKK0dsb2JhbCBvcHRpb25zIHdpdGggYSBsb2NhbCB2YWx1ZQkJCSpnbG9iYWwtbG9jYWwqCisKK09wdGlvbnMgYXJlIGdsb2JhbCB3aGVuIHlvdSBtb3N0bHkgdXNlIG9uZSB2YWx1ZSBmb3IgYWxsIGJ1ZmZlcnMuICBGb3Igc29tZQorZ2xvYmFsIG9wdGlvbnMgaXQncyB1c2VmdWwgdG8gc29tZXRpbWVzIGhhdmUgYSBkaWZmZXJlbnQgbG9jYWwgdmFsdWUuICBZb3UgY2FuCitzZXQgdGhlIGxvY2FsIHZhbHVlIHdpdGggIjpzZXRsb2NhbCIuICBUaGF0IGJ1ZmZlciB3aWxsIHRoZW4gdXNlIHRoZSBsb2NhbAordmFsdWUsIHdoaWxlIG90aGVyIGJ1ZmZlcnMgY29udGludWUgdXNpbmcgdGhlIGdsb2JhbCB2YWx1ZS4KKworRm9yIGV4YW1wbGUsIHlvdSBoYXZlIHR3byB3aW5kb3dzLCBib3RoIG9uIEMgc291cmNlIGNvZGUuICBUaGV5IHVzZSB0aGUgZ2xvYmFsCisnbWFrZXByZycgb3B0aW9uLiAgSWYgeW91IGRvIHRoaXMgaW4gb25lIG9mIHRoZSB0d28gd2luZG93czogPgorCTpzZXQgbWFrZXByZz1nbWFrZQordGhlbiB0aGUgb3RoZXIgd2luZG93IHdpbGwgc3dpdGNoIHRvIHRoZSBzYW1lIHZhbHVlLiAgVGhlcmUgaXMgbm8gbmVlZCB0byBzZXQKK3RoZSAnbWFrZXByZycgb3B0aW9uIGluIHRoZSBvdGhlciBDIHNvdXJjZSB3aW5kb3cgdG9vLgorSG93ZXZlciwgaWYgeW91IHN0YXJ0IGVkaXRpbmcgYSBQZXJsIGZpbGUgaW4gYSBuZXcgd2luZG93LCB5b3Ugd2FudCB0byB1c2UKK2Fub3RoZXIgJ21ha2Vwcm9nJyBmb3IgaXQsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZhbHVlIHVzZWQgZm9yIHRoZSBDIHNvdXJjZQorZmlsZXMuCVlvdSB1c2UgdGhpcyBjb21tYW5kOiA+CisJOnNldGxvY2FsIG1ha2Vwcmc9cGVybG1ha2UKK1lvdSBjYW4gc3dpdGNoIGJhY2sgdG8gdXNpbmcgdGhlIGdsb2JhbCB2YWx1ZSBieSBtYWtpbmcgdGhlIGxvY2FsIHZhbHVlIGVtcHR5OiA+CisJOnNldGxvY2FsIG1ha2Vwcmc9CitUaGlzIG9ubHkgd29ya3MgZm9yIGEgc3RyaW5nIG9wdGlvbi4gIEZvciBhIGJvb2xlYW4gb3B0aW9uIHlvdSBuZWVkIHRvIHVzZSB0aGUKKyI8IiBmbGFnLCBsaWtlIHRoaXM6ID4KKwk6c2V0bG9jYWwgYXV0b3JlYWQ8CitOb3RlIHRoYXQgZm9yIG5vbi1ib29sZWFuIG9wdGlvbnMgdXNpbmcgIjwiIGNvcGllcyB0aGUgZ2xvYmFsIHZhbHVlIHRvIHRoZQorbG9jYWwgdmFsdWUsIGl0IGRvZXNuJ3Qgc3dpdGNoIGJhY2sgdG8gdXNpbmcgdGhlIGdsb2JhbCB2YWx1ZSAodGhhdCBtYXR0ZXJzCit3aGVuIGNoYW5naW5nIHRoZSBnbG9iYWwgdmFsdWUgbGF0ZXIpLgorTm90ZTogSW4gdGhlIGZ1dHVyZSBtb3JlIGdsb2JhbCBvcHRpb25zIGNhbiBiZSBtYWRlIGdsb2JhbC1sb2NhbC4gIFVzaW5nCisiOnNldGxvY2FsIiBvbiBhIGdsb2JhbCBvcHRpb24gbWlnaHQgd29yayBkaWZmZXJlbnRseSB0aGVuLgorCisKK1NldHRpbmcgdGhlIGZpbGV0eXBlCisKKzpzZXRmW2lsZXR5cGVdIHtmaWxldHlwZX0JCQkqOnNldGYqICo6c2V0ZmlsZXR5cGUqCisJCQlTZXQgdGhlICdmaWxldHlwZScgb3B0aW9uIHRvIHtmaWxldHlwZX0sIGJ1dCBvbmx5IGlmCisJCQlub3QgZG9uZSB5ZXQgaW4gYSBzZXF1ZW5jZSBvZiAobmVzdGVkKSBhdXRvY29tbWFuZHMuCisJCQlUaGlzIGlzIHNob3J0IGZvcjogPgorCQkJCTppZiAhZGlkX2ZpbGV0eXBlKCkKKwkJCQk6ICBzZXRsb2NhbCBmaWxldHlwZT17ZmlsZXR5cGV9CisJCQkJOmVuZGlmCis8CQkJVGhpcyBjb21tYW5kIGlzIHVzZWQgaW4gYSBmaWxldHlwZS52aW0gZmlsZSB0byBhdm9pZAorCQkJc2V0dGluZyB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24gdHdpY2UsIGNhdXNpbmcgZGlmZmVyZW50CisJCQlzZXR0aW5ncyBhbmQgc3ludGF4IGZpbGVzIHRvIGJlIGxvYWRlZC4KKwkJCXtub3QgaW4gVml9CisKKzpicm9bd3NlXSBzZVt0XQkJCSo6c2V0LWJyb3dzZSogKjpicm93c2Utc2V0KiAqOm9wdCogKjpvcHRpb25zKgorOm9wdFtpb25zXQkJT3BlbiBhIHdpbmRvdyBmb3Igdmlld2luZyBhbmQgc2V0dGluZyBhbGwgb3B0aW9ucy4KKwkJCU9wdGlvbnMgYXJlIGdyb3VwZWQgYnkgZnVuY3Rpb24uCisJCQlPZmZlcnMgc2hvcnQgaGVscCBmb3IgZWFjaCBvcHRpb24uICBIaXQgPENSPiBvbiB0aGUKKwkJCXNob3J0IGhlbHAgdG8gb3BlbiBhIGhlbHAgd2luZG93IHdpdGggbW9yZSBoZWxwIGZvcgorCQkJdGhlIG9wdGlvbi4KKwkJCU1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiBhbmQgaGl0IDxDUj4gb24gdGhlCisJCQkic2V0IiBsaW5lIHRvIHNldCB0aGUgbmV3IHZhbHVlLiAgRm9yIHdpbmRvdyBhbmQKKwkJCWJ1ZmZlciBzcGVjaWZpYyBvcHRpb25zLCB0aGUgbGFzdCBhY2Nlc3NlZCB3aW5kb3cgaXMKKwkJCXVzZWQgdG8gc2V0IHRoZSBvcHRpb24gdmFsdWUgaW4sIHVubGVzcyB0aGlzIGlzIGEgaGVscAorCQkJd2luZG93LCBpbiB3aGljaCBjYXNlIHRoZSB3aW5kb3cgYmVsb3cgaGVscCB3aW5kb3cgaXMKKwkJCXVzZWQgKHNraXBwaW5nIHRoZSBvcHRpb24td2luZG93KS4KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtldmFsfCBvcgorCQkJfCthdXRvY21kfCBmZWF0dXJlc30KKworCQkJCQkJCQkqJEhPTUUqCitVc2luZyAifiIgaXMgbGlrZSB1c2luZyAiJEhPTUUiLCBidXQgaXQgaXMgb25seSByZWNvZ25pemVkIGF0IHRoZSBzdGFydCBvZiBhbgorb3B0aW9uIGFuZCBhZnRlciBhIHNwYWNlIG9yIGNvbW1hLgorCitPbiBVbml4IHN5c3RlbXMgIn51c2VyIiBjYW4gYmUgdXNlZCB0b28uICBJdCBpcyByZXBsYWNlZCBieSB0aGUgaG9tZSBkaXJlY3RvcnkKK29mIHVzZXIgInVzZXIiLiAgRXhhbXBsZTogPgorICAgIDpzZXQgcGF0aD1+bW9vbC9pbmNsdWRlLC91c3IvaW5jbHVkZSwuCisKK09uIFVuaXggc3lzdGVtcyB0aGUgZm9ybSAiJHtIT01FfSIgY2FuIGJlIHVzZWQgdG9vLiAgVGhlIG5hbWUgYmV0d2VlbiB7fSBjYW4KK2NvbnRhaW4gbm9uLWlkIGNoYXJhY3RlcnMgdGhlbi4gIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBmb3IgdGhlCisiZ2YiIGNvbW1hbmQsIHlvdSBuZWVkIHRvIGFkZCB0aGUgJ3snIGFuZCAnfScgY2hhcmFjdGVycyB0byAnaXNmbmFtZScuCisKK05PVEU6IGV4cGFuZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kICJ+LyIgaXMgb25seSBkb25lIHdpdGggdGhlICI6c2V0IgorY29tbWFuZCwgbm90IHdoZW4gYXNzaWduaW5nIGEgdmFsdWUgdG8gYW4gb3B0aW9uIHdpdGggIjpsZXQiLgorCisKK05vdGUgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIGV4cGFuZGVkIG9wdGlvbiBpcyBsaW1pdGVkLiAgSG93IG11Y2ggZGVwZW5kcyBvbgordGhlIHN5c3RlbSwgbW9zdGx5IGl0IGlzIHNvbWV0aGluZyBsaWtlIDI1NiBvciAxMDI0IGNoYXJhY3RlcnMuCisKKwkJCQkJCQkqOmZpeCogKjpmaXhkZWwqCis6Zml4W2RlbF0JCVNldCB0aGUgdmFsdWUgb2YgJ3Rfa0QnOgorCQkJCSd0X2tiJyBpcyAgICAgJ3Rfa0QnIGJlY29tZXMJfgorCQkJCSAgQ1RSTC0/CUNUUkwtSAorCQkJCW5vdCBDVFJMLT8JQ1RSTC0/CisKKwkJCShDVFJMLT8gaXMgMDE3NyBvY3RhbCwgMHg3ZiBoZXgpIHtub3QgaW4gVml9CisKKwkJCUlmIHlvdXIgZGVsZXRlIGtleSB0ZXJtaW5hbCBjb2RlIGlzIHdyb25nLCBidXQgdGhlCisJCQljb2RlIGZvciBiYWNrc3BhY2UgaXMgYWxyaWdodCwgeW91IGNhbiBwdXQgdGhpcyBpbgorCQkJeW91ciAudmltcmM6ID4KKwkJCQk6Zml4ZGVsCis8CQkJVGhpcyB3b3JrcyBubyBtYXR0ZXIgd2hhdCB0aGUgYWN0dWFsIGNvZGUgZm9yCisJCQliYWNrc3BhY2UgaXMuCisKKwkJCUlmIHRoZSBiYWNrc3BhY2Uga2V5IHRlcm1pbmFsIGNvZGUgaXMgd3JvbmcgeW91IGNhbgorCQkJdXNlIHRoaXM6ID4KKwkJCQk6aWYgJnRlcm0gPT0gInRlcm1uYW1lIgorCQkJCTogIHNldCB0X2tiPV5WPEJTPgorCQkJCTogIGZpeGRlbAorCQkJCTplbmRpZgorPAkJCVdoZXJlICJeViIgaXMgQ1RSTC1WIGFuZCAiPEJTPiIgaXMgdGhlIGJhY2tzcGFjZSBrZXkKKwkJCShkb24ndCB0eXBlIGZvdXIgY2hhcmFjdGVycyEpLglSZXBsYWNlICJ0ZXJtbmFtZSIKKwkJCXdpdGggeW91ciB0ZXJtaW5hbCBuYW1lLgorCisJCQlJZiB5b3VyIDxEZWxldGU+IGtleSBzZW5kcyBhIHN0cmFuZ2Uga2V5IHNlcXVlbmNlIChub3QKKwkJCUNUUkwtPyBvciBDVFJMLUgpIHlvdSBjYW5ub3QgdXNlICI6Zml4ZGVsIi4gIFRoZW4gdXNlOiA+CisJCQkJOmlmICZ0ZXJtID09ICJ0ZXJtbmFtZSIKKwkJCQk6ICBzZXQgdF9rRD1eVjxEZWxldGU+CisJCQkJOmVuZGlmCis8CQkJV2hlcmUgIl5WIiBpcyBDVFJMLVYgYW5kICI8RGVsZXRlPiIgaXMgdGhlIGRlbGV0ZSBrZXkKKwkJCShkb24ndCB0eXBlIGVpZ2h0IGNoYXJhY3RlcnMhKS4gIFJlcGxhY2UgInRlcm1uYW1lIgorCQkJd2l0aCB5b3VyIHRlcm1pbmFsIG5hbWUuCisKKwkJCQkJCQkqTGludXgtYmFja3NwYWNlKgorCQkJTm90ZSBhYm91dCBMaW51eDogQnkgZGVmYXVsdCB0aGUgYmFja3NwYWNlIGtleQorCQkJcHJvZHVjZXMgQ1RSTC0/LCB3aGljaCBpcyB3cm9uZy4gIFlvdSBjYW4gZml4IGl0IGJ5CisJCQlwdXR0aW5nIHRoaXMgbGluZSBpbiB5b3VyIHJjLmxvY2FsOiA+CisJCQkJZWNobyAia2V5Y29kZSAxNCA9IEJhY2tTcGFjZSIgfCBsb2Fka2V5cworPAorCQkJCQkJCSpOZXRCU0QtYmFja3NwYWNlKgorCQkJTm90ZSBhYm91dCBOZXRCU0Q6IElmIHlvdXIgYmFja3NwYWNlIGRvZXNuJ3QgcHJvZHVjZQorCQkJdGhlIHJpZ2h0IGNvZGUsIHRyeSB0aGlzOiA+CisJCQkJeG1vZG1hcCAtZSAia2V5Y29kZSAyMiA9IEJhY2tTcGFjZSIKKzwJCQlJZiB0aGlzIHdvcmtzLCBhZGQgdGhpcyBpbiB5b3VyIC5YbW9kbWFwIGZpbGU6ID4KKwkJCQlrZXlzeW0gMjIgPSBCYWNrU3BhY2UKKzwJCQlZb3UgbmVlZCB0byByZXN0YXJ0IGZvciB0aGlzIHRvIHRha2UgZWZmZWN0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIEF1dG9tYXRpY2FsbHkgc2V0dGluZyBvcHRpb25zCQkJKmF1dG8tc2V0dGluZyoKKworQmVzaWRlcyBjaGFuZ2luZyBvcHRpb25zIHdpdGggdGhlICI6c2V0IiBjb21tYW5kLCB0aGVyZSBhcmUgdGhyZWUgYWx0ZXJuYXRpdmVzCit0byBzZXQgb3B0aW9ucyBhdXRvbWF0aWNhbGx5IGZvciBvbmUgb3IgbW9yZSBmaWxlczoKKworMS4gV2hlbiBzdGFydGluZyBWaW0gaW5pdGlhbGl6YXRpb25zIGFyZSByZWFkIGZyb20gdmFyaW91cyBwbGFjZXMuICBTZWUKKyAgIHxpbml0aWFsaXphdGlvbnwuICBNb3N0IG9mIHRoZW0gYXJlIHBlcmZvcm1lZCBmb3IgYWxsIGVkaXRpbmcgc2Vzc2lvbnMsCisgICBhbmQgc29tZSBvZiB0aGVtIGRlcGVuZCBvbiB0aGUgZGlyZWN0b3J5IHdoZXJlIFZpbSBpcyBzdGFydGVkLgorICAgWW91IGNhbiBjcmVhdGUgYW4gaW5pdGlhbGl6YXRpb24gZmlsZSB3aXRoIHw6bWt2aW1yY3wsIHw6bWt2aWV3fCBhbmQKKyAgIHw6bWtzZXNzaW9ufC4KKzIuIElmIHlvdSBzdGFydCBlZGl0aW5nIGEgbmV3IGZpbGUsIHRoZSBhdXRvbWF0aWMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorICAgVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgb3B0aW9ucyBmb3IgZmlsZXMgbWF0Y2hpbmcgYSBwYXJ0aWN1bGFyIHBhdHRlcm4gYW5kCisgICBtYW55IG90aGVyIHRoaW5ncy4gIFNlZSB8YXV0b2NvbW1hbmR8LgorMy4gSWYgeW91IHN0YXJ0IGVkaXRpbmcgYSBuZXcgZmlsZSwgYW5kIHRoZSAnbW9kZWxpbmUnIG9wdGlvbiBpcyBvbiwgYQorICAgbnVtYmVyIG9mIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgZmlsZSBhcmUgY2hlY2tlZCBmb3IKKyAgIG1vZGVsaW5lcy4gIFRoaXMgaXMgZXhwbGFpbmVkIGhlcmUuCisKKwkJCQkJKm1vZGVsaW5lKiAqdmltOiogKnZpOiogKmV4OiogKkU1MjAqCitUaGVyZSBhcmUgdHdvIGZvcm1zIG9mIG1vZGVsaW5lcy4gIFRoZSBmaXJzdCBmb3JtOgorCVt0ZXh0XXt3aGl0ZX17dmk6fHZpbTp8ZXg6fVt3aGl0ZV17b3B0aW9uc30KKworW3RleHRdCQlhbnkgdGV4dCBvciBlbXB0eQore3doaXRlfQkJYXQgbGVhc3Qgb25lIGJsYW5rIGNoYXJhY3RlciAoPFNwYWNlPiBvciA8VGFiPikKK3t2aTp8dmltOnxleDp9CXRoZSBzdHJpbmcgInZpOiIsICJ2aW06IiBvciAiZXg6IgorW3doaXRlXQkJb3B0aW9uYWwgd2hpdGUgc3BhY2UKK3tvcHRpb25zfQlhIGxpc3Qgb2Ygb3B0aW9uIHNldHRpbmdzLCBzZXBhcmF0ZWQgd2l0aCB3aGl0ZSBzcGFjZSBvciAnOicsCisJCXdoZXJlIGVhY2ggcGFydCBiZXR3ZWVuICc6JyBpcyB0aGUgYXJndW1lbnQgZm9yIGEgIjpzZXQiCisJCWNvbW1hbmQKKworRXhhbXBsZTogPgorICAgdmk6bm9haTpzdz0zIHRzPTYKKworVGhlIHNlY29uZCBmb3JtICh0aGlzIGlzIGNvbXBhdGlibGUgd2l0aCBzb21lIHZlcnNpb25zIG9mIFZpKToKKworCVt0ZXh0XXt3aGl0ZX17dmk6fHZpbTp8ZXg6fVt3aGl0ZV1zZVt0XSB7b3B0aW9uc306W3RleHRdCisKK1t0ZXh0XQkJYW55IHRleHQgb3IgZW1wdHkKK3t3aGl0ZX0JCWF0IGxlYXN0IG9uZSBibGFuayBjaGFyYWN0ZXIgKDxTcGFjZT4gb3IgPFRhYj4pCit7dmk6fHZpbTp8ZXg6fQl0aGUgc3RyaW5nICJ2aToiLCAidmltOiIgb3IgImV4OiIKK1t3aGl0ZV0JCW9wdGlvbmFsIHdoaXRlIHNwYWNlCitzZVt0XQkJdGhlIHN0cmluZyAic2V0ICIgb3IgInNlICIgKG5vdGUgdGhlIHNwYWNlKQore29wdGlvbnN9CWEgbGlzdCBvZiBvcHRpb25zLCBzZXBhcmF0ZWQgd2l0aCB3aGl0ZSBzcGFjZSwgd2hpY2ggaXMgdGhlCisJCWFyZ3VtZW50IGZvciBhICI6c2V0IiBjb21tYW5kCis6CQlhIGNvbG9uCitbdGV4dF0JCWFueSB0ZXh0IG9yIGVtcHR5CisKK0V4YW1wbGU6ID4KKyAgIC8qIHZpbTogc2V0IGFpIHR3PTc1OiAqLworCitUaGUgd2hpdGUgc3BhY2UgYmVmb3JlIHt2aTp8dmltOnxleDp9IGlzIHJlcXVpcmVkLiAgVGhpcyBtaW5pbWl6ZXMgdGhlIGNoYW5jZQordGhhdCBhIG5vcm1hbCB3b3JkIGxpa2UgImxleDoiIGlzIGNhdWdodC4gIFRoZXJlIGlzIG9uZSBleGNlcHRpb246ICJ2aToiIGFuZAorInZpbToiIGNhbiBhbHNvIGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9uCiszLjApLiAgVXNpbmcgImV4OiIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdpbGwgYmUgaWdub3JlZCAodGhpcyBjb3VsZCBiZQorc2hvcnQgZm9yICJleGFtcGxlOiIpLgorCisJCQkJCQkJKm1vZGVsaW5lLWxvY2FsKgorVGhlIG9wdGlvbnMgYXJlIHNldCBsaWtlIHdpdGggIjpzZXRsb2NhbCI6IFRoZSBuZXcgdmFsdWUgb25seSBhcHBsaWVzIHRvIHRoZQorYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIHdpbmRvdy4gIEFsdGhvdWdoIGl0J3MgcG9zc2libGUgdG8gc2V0IGdsb2JhbCBvcHRpb25zCitmcm9tIGEgbW9kZWxpbmUsIHRoaXMgaXMgdW51c3VhbC4gIElmIHlvdSBoYXZlIHR3byB3aW5kb3dzIG9wZW4gYW5kIHRoZSBmaWxlcworaW4gaXQgc2V0IHRoZSBzYW1lIGdsb2JhbCBvcHRpb24gdG8gYSBkaWZmZXJlbnQgdmFsdWUsIHRoZSByZXN1bHQgZGVwZW5kcyBvbgord2hpY2ggb25lIHdhcyBvcGVuZWQgbGFzdC4KKworCQkJCQkJCSptb2RlbGluZS12ZXJzaW9uKgorSWYgdGhlIG1vZGVsaW5lIGlzIG9ubHkgdG8gYmUgdXNlZCBmb3Igc29tZSB2ZXJzaW9ucyBvZiBWaW0sIHRoZSB2ZXJzaW9uCitudW1iZXIgY2FuIGJlIHNwZWNpZmllZCB3aGVyZSAidmltOiIgaXMgdXNlZDoKKwl2aW17dmVyc306CXZlcnNpb24ge3ZlcnN9IG9yIGxhdGVyCisJdmltPHt2ZXJzfToJdmVyc2lvbiBiZWZvcmUge3ZlcnN9CisJdmltPXt2ZXJzfToJdmVyc2lvbiB7dmVyc30KKwl2aW0+e3ZlcnN9Ogl2ZXJzaW9uIGFmdGVyIHt2ZXJzfQore3ZlcnN9IGlzIDYwMCBmb3IgVmltIDYuMCAoaHVuZHJlZCB0aW1lcyB0aGUgbWFqb3IgdmVyc2lvbiBwbHVzIG1pbm9yKS4KK0ZvciBleGFtcGxlLCB0byB1c2UgYSBtb2RlbGluZSBvbmx5IGZvciBWaW0gNi4wIGFuZCBsYXRlcjogPgorCS8qIHZpbTYwMDogc2V0IGZvbGRtZXRob2Q9bWFya2VyOiAqLworVG8gdXNlIGEgbW9kZWxpbmUgZm9yIFZpbSBiZWZvcmUgdmVyc2lvbiA1Ljc6ID4KKwkvKiB2aW08NTcwOiBzZXQgc3c9NDogKi8KK1RoZXJlIGNhbiBiZSBubyBibGFua3MgYmV0d2VlbiAidmltIiBhbmQgdGhlICI6Ii4KKworCitUaGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIGNoZWNrZWQgY2FuIGJlIHNldCB3aXRoIHRoZSAnbW9kZWxpbmVzJyBvcHRpb24uCitJZiAnbW9kZWxpbmUnIGlzIG9mZiBvciAnbW9kZWxpbmVzJyBpcyAwIG5vIGxpbmVzIGFyZSBjaGVja2VkLgorCitOb3RlIHRoYXQgZm9yIHRoZSBmaXJzdCBmb3JtIGFsbCBvZiB0aGUgcmVzdCBvZiB0aGUgbGluZSBpcyB1c2VkLCB0aHVzIGEgbGluZQorbGlrZTogPgorICAgLyogdmk6dHM9NDogKi8KK3dpbGwgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGUgdHJhaWxpbmcgIiovIi4gIFRoaXMgbGluZSBpcyBPSzogPgorICAgLyogdmk6c2V0IHRzPTQ6ICovCisKK0lmIGFuIGVycm9yIGlzIGRldGVjdGVkIHRoZSByZXN0IG9mIHRoZSBsaW5lIGlzIHNraXBwZWQuCisKK0lmIHlvdSB3YW50IHRvIGluY2x1ZGUgYSAnOicgaW4gYSBzZXQgY29tbWFuZCBwcmVjZWRlIGl0IHdpdGggYSAnXCcuICBUaGUKK2JhY2tzbGFzaCBpbiBmcm9udCBvZiB0aGUgJzonIHdpbGwgYmUgcmVtb3ZlZC4JRXhhbXBsZTogPgorICAgLyogdmk6c2V0IGRpcj1jXDpcdG1wOiAqLworVGhpcyBzZXRzIHRoZSAnZGlyJyBvcHRpb24gdG8gImM6XHRtcCIuICBPbmx5IGEgc2luZ2xlIGJhY2tzbGFzaCBiZWZvcmUgdGhlCisnOicgaXMgcmVtb3ZlZC4gIFRodXMgdG8gaW5jbHVkZSAiXDoiIHlvdSBoYXZlIHRvIHNwZWNpZnkgIlxcOiIuCisKK05vIG90aGVyIGNvbW1hbmRzIHRoYW4gInNldCIgYXJlIHN1cHBvcnRlZCwgZm9yIHNlY3VyaXR5IHJlYXNvbnMgKHNvbWVib2R5CittaWdodCBjcmVhdGUgYSBUcm9qYW4gaG9yc2UgdGV4dCBmaWxlIHdpdGggbW9kZWxpbmVzKS4KKworSGludDogSWYgeW91IHdvdWxkIGxpa2UgdG8gZG8gc29tZXRoaW5nIGVsc2UgdGhhbiBzZXR0aW5nIGFuIG9wdGlvbiwgeW91IGNvdWxkCitkZWZpbmUgYW4gYXV0b2NvbW1hbmQgdGhhdCBjaGVja3MgdGhlIGZpbGUgZm9yIGEgc3BlY2lmaWMgc3RyaW5nLiAgRm9yCitleGFtcGxlOiA+CisJYXUgQnVmUmVhZFBvc3QgKiBpZiBnZXRsaW5lKDEpID1+ICJWQVIiIHwgY2FsbCBTZXRWYXIoKSB8IGVuZGlmCitBbmQgZGVmaW5lIGEgZnVuY3Rpb24gU2V0VmFyKCkgdGhhdCBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcKKyJWQVIiLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIE9wdGlvbnMgc3VtbWFyeQkJCQkJKm9wdGlvbi1zdW1tYXJ5KgorCitJbiB0aGUgbGlzdCBiZWxvdyBhbGwgdGhlIG9wdGlvbnMgYXJlIG1lbnRpb25lZCB3aXRoIHRoZWlyIGZ1bGwgbmFtZSBhbmQgd2l0aAorYW4gYWJicmV2aWF0aW9uIGlmIHRoZXJlIGlzIG9uZS4gIEJvdGggZm9ybXMgbWF5IGJlIHVzZWQuCisKK0luIHRoaXMgZG9jdW1lbnQgd2hlbiBhIGJvb2xlYW4gb3B0aW9uIGlzICJzZXQiIHRoYXQgbWVhbnMgdGhhdCAiOnNldCBvcHRpb24iCitpcyBlbnRlcmVkLiAgV2hlbiBhbiBvcHRpb24gaXMgInJlc2V0IiwgIjpzZXQgbm9vcHRpb24iIGlzIHVzZWQuCisKK0ZvciBzb21lIG9wdGlvbnMgdGhlcmUgYXJlIHR3byBkZWZhdWx0IHZhbHVlczogVGhlICJWaW0gZGVmYXVsdCIsIHdoaWNoIGlzCit1c2VkIHdoZW4gJ2NvbXBhdGlibGUnIGlzIG5vdCBzZXQsIGFuZCB0aGUgIlZpIGRlZmF1bHQiLCB3aGljaCBpcyB1c2VkIHdoZW4KKydjb21wYXRpYmxlJyBpcyBzZXQuCisKK01vc3Qgb3B0aW9ucyBhcmUgdGhlIHNhbWUgaW4gYWxsIHdpbmRvd3MgYW5kIGJ1ZmZlcnMuICBUaGVyZSBhcmUgYSBmZXcgdGhhdAorYXJlIHNwZWNpZmljIHRvIGhvdyB0aGUgdGV4dCBpcyBwcmVzZW50ZWQgaW4gYSB3aW5kb3cuCVRoZXNlIGNhbiBiZSBzZXQgdG8gYQorZGlmZmVyZW50IHZhbHVlIGluIGVhY2ggd2luZG93LiAgRm9yIGV4YW1wbGUgdGhlICdsaXN0JyBvcHRpb24gY2FuIGJlIHNldCBpbgorb25lIHdpbmRvdyBhbmQgcmVzZXQgaW4gYW5vdGhlciBmb3IgdGhlIHNhbWUgdGV4dCwgZ2l2aW5nIGJvdGggdHlwZXMgb2YgdmlldworYXQgdGhlIHNhbWUgdGltZS4gIFRoZXJlIGFyZSBhIGZldyBvcHRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIGEgY2VydGFpbgorZmlsZS4gIFRoZXNlIGNhbiBoYXZlIGEgZGlmZmVyZW50IHZhbHVlIGZvciBlYWNoIGZpbGUgb3IgYnVmZmVyLiAgRm9yIGV4YW1wbGUKK3RoZSAndGV4dHdpZHRoJyBvcHRpb24gY2FuIGJlIDc4IGZvciBhIG5vcm1hbCB0ZXh0IGZpbGUgYW5kIDAgZm9yIGEgQworcHJvZ3JhbS4KKworCWdsb2JhbAkJCW9uZSBvcHRpb24gZm9yIGFsbCBidWZmZXJzIGFuZCB3aW5kb3dzCisJbG9jYWwgdG8gd2luZG93CQllYWNoIHdpbmRvdyBoYXMgaXRzIG93biBjb3B5IG9mIHRoaXMgb3B0aW9uCisJbG9jYWwgdG8gYnVmZmVyCQllYWNoIGJ1ZmZlciBoYXMgaXRzIG93biBjb3B5IG9mIHRoaXMgb3B0aW9uCisKK1doZW4gY3JlYXRpbmcgYSBuZXcgd2luZG93IHRoZSBvcHRpb24gdmFsdWVzIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgd2luZG93CithcmUgdXNlZCBhcyBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSB3aW5kb3ctc3BlY2lmaWMgb3B0aW9ucy4gIEZvciB0aGUKK2J1ZmZlci1zcGVjaWZpYyBvcHRpb25zIHRoaXMgZGVwZW5kcyBvbiB0aGUgJ3MnIGFuZCAnUycgZmxhZ3MgaW4gdGhlCisnY3BvcHRpb25zJyBvcHRpb24uICBJZiAncycgaXMgaW5jbHVkZWQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSB0aGUgdmFsdWVzIGZvcgorYnVmZmVyIG9wdGlvbnMgYXJlIGNvcGllZCBmcm9tIHRoZSBjdXJyZW50bHkgYWN0aXZlIGJ1ZmZlciB3aGVuIGEgYnVmZmVyIGlzCitmaXJzdCBlbnRlcmVkLglJZiAnUycgaXMgcHJlc2VudCB0aGUgb3B0aW9ucyBhcmUgY29waWVkIGVhY2ggdGltZSB0aGUgYnVmZmVyCitpcyBlbnRlcmVkLCB0aGlzIGlzIGFsbW9zdCBsaWtlIGhhdmluZyBnbG9iYWwgb3B0aW9ucy4JSWYgJ3MnIGFuZCAnUycgYXJlIG5vdAorcHJlc2VudCwgdGhlIG9wdGlvbnMgYXJlIGNvcGllZCBmcm9tIHRoZSBjdXJyZW50bHkgYWN0aXZlIGJ1ZmZlciB3aGVuIHRoZQorYnVmZmVyIGlzIGNyZWF0ZWQuCisKK05vdCBhbGwgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucy4JVG8gdGVzdCBpZiBvcHRpb24gImZvbyIgY2FuIGJlCit1c2VkIHdpdGggIjpzZXQiIHVzZSAiZXhpc3RzKCcmZm9vJykiLglUaGlzIGRvZXNuJ3QgbWVhbiB0aGUgdmFsdWUgaXMKK2FjdHVhbGx5IHJlbWVtYmVyZWQgYW5kIHdvcmtzLglTb21lIG9wdGlvbnMgYXJlIGhpZGRlbiwgd2hpY2ggbWVhbnMgdGhhdCB5b3UKK2NhbiBzZXQgdGhlbSBidXQgdGhlIHZhbHVlIGlzIG5vdCByZW1lbWJlcmVkLiAgVG8gdGVzdCBpZiBvcHRpb24gImZvbyIgaXMKK3JlYWxseSBzdXBwb3J0ZWQgdXNlICJleGlzdHMoJytmb28nKSIuCisKKwkJCQkJCQkqRTM1NSoKK0EganVtcCB0YWJsZSBmb3IgdGhlIG9wdGlvbnMgd2l0aCBhIHNob3J0IGRlc2NyaXB0aW9uIGNhbiBiZSBmb3VuZCBhdCB8UV9vcHwuCisKKwkJCQkJKidhbGVwaCcqIConYWwnKiAqYWxlcGgqICpBbGVwaCoKKydhbGVwaCcgJ2FsJwkJbnVtYmVyCShkZWZhdWx0IDEyOCBmb3IgTVMtRE9TLCAyMjQgb3RoZXJ3aXNlKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCVRoZSBBU0NJSSBjb2RlIGZvciB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBIZWJyZXcgYWxwaGFiZXQuICBUaGUKKwlyb3V0aW5lIHRoYXQgbWFwcyB0aGUga2V5Ym9hcmQgaW4gSGVicmV3IG1vZGUsIGJvdGggaW4gSW5zZXJ0IG1vZGUKKwkod2hlbiBoa21hcCBpcyBzZXQpIGFuZCBvbiB0aGUgY29tbWFuZC1saW5lICh3aGVuIGhpdHRpbmcgQ1RSTC1fKQorCW91dHB1dHMgdGhlIEhlYnJldyBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbYWxlcGguLmFsZXBoKzI2XS4KKwlhbGVwaD0xMjggYXBwbGllcyB0byBQQyBjb2RlLCBhbmQgYWxlcGg9MjI0IGFwcGxpZXMgdG8gSVNPIDg4NTktOC4KKwlTZWUgfHJpbGVmdC50eHR8LgorCisJCQkqJ2FsbG93cmV2aW5zJyogKidhcmknKiAqJ25vYWxsb3dyZXZpbnMnKiAqJ25vYXJpJyoKKydhbGxvd3JldmlucycgJ2FyaScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJQWxsb3cgQ1RSTC1fIGluIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUuICBUaGlzIGlzIGRlZmF1bHQgb2ZmLCB0bworCWF2b2lkIHRoYXQgdXNlcnMgdGhhdCBhY2NpZGVudGFsbHkgdHlwZSBDVFJMLV8gaW5zdGVhZCBvZiBTSElGVC1fIGdldAorCWludG8gcmV2ZXJzZSBJbnNlcnQgbW9kZSwgYW5kIGRvbid0IGtub3cgaG93IHRvIGdldCBvdXQuICBTZWUKKwkncmV2aW5zJy4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCSAqJ2FsdGtleW1hcCcqIConYWttJyogKidub2FsdGtleW1hcCcqIConbm9ha20nKgorJ2FsdGtleW1hcCcgJ2FrbScJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2ZhcnNpfAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCB0aGUgc2Vjb25kIGxhbmd1YWdlIGlzIEZhcnNpLiBJbiBlZGl0aW5nIG1vZGUgQ1RSTC1fIHRvZ2dsZXMKKwl0aGUga2V5Ym9hcmQgbWFwIGJldHdlZW4gRmFyc2kgYW5kIEVuZ2xpc2gsIHdoZW4gJ2FsbG93cmV2aW5zJyBzZXQuCisKKwlXaGVuIG9mZiwgdGhlIGtleWJvYXJkIG1hcCB0b2dnbGVzIGJldHdlZW4gSGVicmV3IGFuZCBFbmdsaXNoLiBUaGlzCisJaXMgdXNlZnVsIHRvIHN0YXJ0IHRoZSBWaW0gaW4gbmF0aXZlIG1vZGUgaS5lLiBFbmdsaXNoIChsZWZ0LXRvLXJpZ2h0CisJbW9kZSkgYW5kIGhhdmUgZGVmYXVsdCBzZWNvbmQgbGFuZ3VhZ2UgRmFyc2kgb3IgSGVicmV3IChyaWdodC10by1sZWZ0CisJbW9kZSkuCVNlZSB8ZmFyc2kudHh0fC4KKworCQkJCQkJKidhbWJpd2lkdGgnKiAqJ2FtYncnKgorJ2FtYml3aWR0aCcgJ2FtYncnCXN0cmluZyAoZGVmYXVsdDogInNpbmdsZSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCU9ubHkgZWZmZWN0aXZlIHdoZW4gJ2VuY29kaW5nJyBpcyAidXRmLTgiIG9yIGFub3RoZXIgVW5pY29kZSBlbmNvZGluZy4KKwlUZWxscyBWaW0gd2hhdCB0byBkbyB3aXRoIGNoYXJhY3RlcnMgd2l0aCBFYXN0IEFzaWFuIFdpZHRoIENsYXNzCisJQW1iaWd1b3VzIChzdWNoIGFzIEV1cm8sIFJlZ2lzdGVyZWQgU2lnbiwgQ29weXJpZ2h0IFNpZ24sIEdyZWVrCisJbGV0dGVycywgQ3lyaWxsaWMgbGV0dGVycykuCisKKwlUaGVyZSBhcmUgY3VycmVudGx5IHR3byBwb3NzaWJsZSB2YWx1ZXM6CisJInNpbmdsZSI6CVVzZSB0aGUgc2FtZSB3aWR0aCBhcyBjaGFyYWN0ZXJzIGluIFVTLUFTQ0lJLiBUaGlzIGlzCisJCQlleHBlY3RlZCBieSBtb3N0IHVzZXJzLgorCSJkb3VibGUiOglVc2UgdHdpY2UgdGhlIHdpZHRoIG9mIEFTQ0lJIGNoYXJhY3RlcnMuCisKKwlUaGVyZSBhcmUgYSBudW1iZXIgb2YgQ0pLIGZvbnRzIGZvciB3aGljaCB0aGUgd2lkdGggb2YgZ2x5cGhzIGZvcgorCXRob3NlIGNoYXJhY3RlcnMgYXJlIHNvbGVseSBiYXNlZCBvbiBob3cgbWFueSBvY3RldHMgdGhleSB0YWtlIGluCisJbGVnYWN5L3RyYWRpdGlvbmFsIENKSyBlbmNvZGluZ3MuICBJbiB0aG9zZSBlbmNvZGluZ3MsIEV1cm8sCisJUmVnaXN0ZXJlZCBzaWduLCBHcmVlay9DeXJpbGxpYyBsZXR0ZXJzIGFyZSByZXByZXNlbnRlZCBieSB0d28gb2N0ZXRzLAorCXRoZXJlZm9yZSB0aG9zZSBmb250cyBoYXZlICJ3aWRlIiBnbHlwaHMgZm9yIHRoZW0uIFRoaXMgaXMgYWxzbworCXRydWUgb2Ygc29tZSBsaW5lIGRyYXdpbmcgY2hhcmFjdGVycyB1c2VkIHRvIG1ha2UgdGFibGVzIGluIHRleHQKKwlmaWxlLiBUaGVyZWZvcmUsIHdoZW4gYSBDSksgZm9udCBpcyB1c2VkIGZvciBHVUkgVmltIG9yCisJVmltIGlzIHJ1bm5pbmcgaW5zaWRlIGEgdGVybWluYWwgKGVtdWxhdG9ycykgdGhhdCB1c2VzIGEgQ0pLIGZvbnQKKwkob3IgVmltIGlzIHJ1biBpbnNpZGUgYW4geHRlcm0gaW52b2tlZCB3aXRoICItY2prd2lkdGgiIG9wdGlvbi4pLAorCXRoaXMgb3B0aW9uIHNob3VsZCBiZSBzZXQgdG8gImRvdWJsZSIgdG8gbWF0Y2ggdGhlIHdpZHRoIHBlcmNlaXZlZAorCWJ5IFZpbSB3aXRoIHRoZSB3aWR0aCBvZiBnbHlwaHMgaW4gdGhlIGZvbnQuICBQZXJoYXBzIGl0IGFsc28gaGFzCisJdG8gYmUgc2V0IHRvICJkb3VibGUiIHVuZGVyIENKSyBXaW5kb3dzIDl4L01FIG9yIFdpbmRvd3MgMmsvWFAKKwl3aGVuIHRoZSBzeXN0ZW0gbG9jYWxlIGlzIHNldCB0byBvbmUgb2YgQ0pLIGxvY2FsZXMuICBTZWUgVW5pY29kZQorCVN0YW5kYXJkIEFubmV4ICMxMSAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMTEpLgorCisJCQkqJ2FudGlhbGlhcycqIConYW50aScqIConbm9hbnRpYWxpYXMnKiAqJ25vYW50aScqCisnYW50aWFsaWFzJyAnYW50aScJYm9vbGVhbiAoZGVmYXVsdDogb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZAorCQkJb24gTWFjIE9TIFh9CisJVGhpcyBvcHRpb24gb25seSBoYXMgYW4gZWZmZWN0IGluIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0gb24gTWFjIE9TIFgKKwl2MTAuMiBvciBsYXRlci4gIFdoZW4gb24sIFZpbSB3aWxsIHVzZSBzbW9vdGggKCJhbnRpYWxpYXNlZCIpIGZvbnRzLAorCXdoaWNoIGNhbiBiZSBlYXNpZXIgdG8gcmVhZCBhdCBjZXJ0YWluIHNpemVzIG9uIGNlcnRhaW4gZGlzcGxheXMuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zIGlmICdndWlmb250JyBpcyBzZXQKKwl0byBpdHMgZGVmYXVsdCAoZW1wdHkgc3RyaW5nKS4KKworCQkJKidhdXRvY2hkaXInKiAqJ2FjZCcqIConbm9hdXRvY2hkaXInKiAqJ25vYWNkJyoKKydhdXRvY2hkaXInICdhY2QnCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUKKwkJCXwrbmV0YmVhbnNfaW50Z3wgb3IgfCtzdW5fd29ya3Nob3B8IGZlYXR1cmV9CisJV2hlbiBvbiwgVmltIHdpbGwgY2hhbmdlIGl0cyB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKwl3aGVuZXZlciB5b3Ugb3BlbiBhIGZpbGUsIHN3aXRjaCBidWZmZXJzLCBkZWxldGUgYSBidWZmZXIgb3IKKwlvcGVuL2Nsb3NlIGEgd2luZG93LiBJdCB3aWxsIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisJZmlsZSB3aGljaCB3YXMgb3BlbmVkIG9yIHNlbGVjdGVkLiAgVGhpcyBvcHRpb24gaXMgcHJvdmlkZWQgZm9yCisJYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBWaW0gcmVsZWFzZWQgd2l0aCBTdW4gT05FIFN0dWRpbyA0CisJRW50ZXJwcmlzZSBFZGl0aW9uLgorCisJCQkJKidhcmFiaWMnKiAqJ2FyYWInKiAqJ25vYXJhYmljJyogKidub2FyYWInKgorJ2FyYWJpYycgJ2FyYWInCQlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrYXJhYmljfAorCQkJZmVhdHVyZX0KKwlUaGlzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHN0YXJ0IGVkaXRpbmcgQXJhYmljIHRleHQuCisJU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsOgorCS0gU2V0IHRoZSAncmlnaHRsZWZ0JyBvcHRpb24sIHVubGVzcyAndGVybWJpZGknIGlzIHNldC4KKwktIFNldCB0aGUgJ2FyYWJpY3NoYXBlJyBvcHRpb24sIHVubGVzcyAndGVybWJpZGknIGlzIHNldC4KKwktIFNldCB0aGUgJ2tleW1hcCcgb3B0aW9uIHRvICJhcmFiaWMiOyBpbiBJbnNlcnQgbW9kZSBDVFJMLV4gdG9nZ2xlcworCSAgYmV0d2VlbiB0eXBpbmcgRW5nbGlzaCBhbmQgQXJhYmljIGtleSBtYXBwaW5nLgorCS0gU2V0IHRoZSAnZGVsY29tYmluZScgb3B0aW9uCisJTm90ZSB0aGF0ICdlbmNvZGluZycgbXVzdCBiZSAidXRmLTgiIGZvciB3b3JraW5nIHdpdGggQXJhYmljIHRleHQuCisKKwlSZXNldHRpbmcgdGhpcyBvcHRpb24gd2lsbDoKKwktIFJlc2V0IHRoZSAncmlnaHRsZWZ0JyBvcHRpb24uCisJLSBEaXNhYmxlIHRoZSB1c2Ugb2YgJ2tleW1hcCcgKHdpdGhvdXQgY2hhbmdpbmcgaXRzIHZhbHVlKS4KKwlOb3RlIHRoYXQgJ2FyYWJpY3NoYXBlJyBhbmQgJ2RlbGNvbWJpbmUnIGFyZSBub3QgcmVzZXQgKGl0IGlzIGEgZ2xvYmFsCisJb3B0aW9uLgorCUFsc28gc2VlIHxhcmFiaWMudHh0fC4KKworCQkJCQkqJ2FyYWJpY3NoYXBlJyogKidhcnNoYXBlJyoKKwkJCQkJKidub2FyYWJpY3NoYXBlJyogKidub2Fyc2hhcGUnKgorJ2FyYWJpY3NoYXBlJyAnYXJzaGFwZScJYm9vbGVhbiAoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrYXJhYmljfAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uIGFuZCAndGVybWJpZGknIGlzIG9mZiwgdGhlIHJlcXVpcmVkIHZpc3VhbCBjaGFyYWN0ZXIKKwljb3JyZWN0aW9ucyB0aGF0IG5lZWQgdG8gdGFrZSBwbGFjZSBmb3IgZGlzcGxheWluZyB0aGUgQXJhYmljIGxhbmd1YWdlCisJdGFrZSBhZmZlY3QuICBTaGFwaW5nLCBpbiBlc3NlbmNlLCBnZXRzIGVuYWJsZWQ7IHRoZSB0ZXJtIGlzIGEgYnJvYWQKKwlvbmUgd2hpY2ggZW5jb21wYXNzZXM6CisJICBhKSB0aGUgY2hhbmdpbmcvbW9ycGhpbmcgb2YgY2hhcmFjdGVycyBiYXNlZCBvbiB0aGVpciBsb2NhdGlvbgorCSAgICAgd2l0aGluIGEgd29yZCAoaW5pdGlhbCwgbWVkaWFsLCBmaW5hbCBhbmQgc3RhbmQtYWxvbmUpLgorCSAgYikgdGhlIGVuYWJsaW5nIG9mIHRoZSBhYmlsaXR5IHRvIGNvbXBvc2UgY2hhcmFjdGVycworCSAgYykgdGhlIGVuYWJsaW5nIG9mIHRoZSByZXF1aXJlZCBjb21iaW5pbmcgb2Ygc29tZSBjaGFyYWN0ZXJzCisJV2hlbiBkaXNhYmxlZCB0aGUgY2hhcmFjdGVyIGRpc3BsYXkgcmV2ZXJ0cyBiYWNrIHRvIGVhY2ggY2hhcmFjdGVyJ3MKKwl0cnVlIHN0YW5kLWFsb25lIGZvcm0uCisJQXJhYmljIGlzIGEgY29tcGxleCBsYW5ndWFnZSB3aGljaCByZXF1aXJlcyBvdGhlciBzZXR0aW5ncywgZm9yCisJZnVydGhlciBkZXRhaWxzIHNlZSB8YXJhYmljLnR4dHwuCisKKwkJCSonYXV0b2luZGVudCcqIConYWknKiAqJ25vYXV0b2luZGVudCcqIConbm9haScqCisnYXV0b2luZGVudCcgJ2FpJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCUNvcHkgaW5kZW50IGZyb20gY3VycmVudCBsaW5lIHdoZW4gc3RhcnRpbmcgYSBuZXcgbGluZSAodHlwaW5nIDxDUj4KKwlpbiBJbnNlcnQgbW9kZSBvciB3aGVuIHVzaW5nIHRoZSAibyIgb3IgIk8iIGNvbW1hbmQpLiAgSWYgeW91IGRvIG5vdAorCXR5cGUgYW55dGhpbmcgb24gdGhlIG5ldyBsaW5lIGV4Y2VwdCA8QlM+IG9yIENUUkwtRCBhbmQgdGhlbiB0eXBlCisJPEVzYz4gb3IgPENSPiwgdGhlIGluZGVudCBpcyBkZWxldGVkIGFnYWluLiAgV2hlbiBhdXRvaW5kZW50IGlzIG9uLAorCWZvcm1hdHRpbmcgKHdpdGggdGhlICJncSIgY29tbWFuZCBvciB3aGVuIHlvdSByZWFjaCAndGV4dHdpZHRoJyBpbgorCUluc2VydCBtb2RlKSB1c2VzIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgZmlyc3QgbGluZS4KKwlXaGVuICdzbWFydGluZGVudCcgb3IgJ2NpbmRlbnQnIGlzIG9uIHRoZSBpbmRlbnQgaXMgY2hhbmdlZCBpbgorCWEgZGlmZmVyZW50IHdheS4KKwlUaGUgJ2F1dG9pbmRlbnQnIG9wdGlvbiBpcyByZXNldCB3aGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcyBzZXQuCisJe3NtYWxsIGRpZmZlcmVuY2UgZnJvbSBWaTogQWZ0ZXIgdGhlIGluZGVudCBpcyBkZWxldGVkIHdoZW4gdHlwaW5nCisJPEVzYz4gb3IgPENSPiwgdGhlIGN1cnNvciBwb3NpdGlvbiB3aGVuIG1vdmluZyB1cCBvciBkb3duIGlzIGFmdGVyIHRoZQorCWRlbGV0ZWQgaW5kZW50OyBWaSBwdXRzIHRoZSBjdXJzb3Igc29tZXdoZXJlIGluIHRoZSBkZWxldGVkIGluZGVudH0uCisKKwkJCQkgKidhdXRvcmVhZCcqIConYXInKiAqJ25vYXV0b3JlYWQnKiAqJ25vYXInKgorJ2F1dG9yZWFkJyAnYXInCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBhIGZpbGUgaGFzIGJlZW4gZGV0ZWN0ZWQgdG8gaGF2ZSBiZWVuIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0gYW5kCisJaXQgaGFzIG5vdCBiZWVuIGNoYW5nZWQgaW5zaWRlIG9mIFZpbSwgYXV0b21hdGljYWxseSByZWFkIGl0IGFnYWluLgorCVdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCB0aGlzIGlzIG5vdCBkb25lLiAgfHRpbWVzdGFtcHwKKwlJZiB0aGlzIG9wdGlvbiBoYXMgYSBsb2NhbCB2YWx1ZSwgdXNlIHRoaXMgY29tbWFuZCB0byBzd2l0Y2ggYmFjayB0bworCXVzaW5nIHRoZSBnbG9iYWwgdmFsdWU6ID4KKwkJOnNldCBhdXRvcmVhZDwKKzwKKwkJCQkgKidhdXRvd3JpdGUnKiAqJ2F3JyogKidub2F1dG93cml0ZScqIConbm9hdycqCisnYXV0b3dyaXRlJyAnYXcnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJV3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLCBpZiBpdCBoYXMgYmVlbiBtb2RpZmllZCwgb24gZWFjaAorCTpuZXh0LCA6cmV3aW5kLCA6bGFzdCwgOmZpcnN0LCA6cHJldmlvdXMsIDpzdG9wLCA6c3VzcGVuZCwgOnRhZywgOiEsCisJOm1ha2UsIENUUkwtXSBhbmQgQ1RSTC1eIGNvbW1hbmQ7IGFuZCB3aGVuIGEgQ1RSTC1PLCBDVFJMLUksCisJJ3tBLVowLTl9LCBvciBge0EtWjAtOX0gY29tbWFuZCB0YWtlcyBvbmUgdG8gYW5vdGhlciBmaWxlLgorCU5vdGUgdGhhdCBmb3Igc29tZSBjb21tYW5kcyB0aGUgJ2F1dG93cml0ZScgb3B0aW9uIGlzIG5vdCB1c2VkLCBzZWUKKwknYXV0b3dyaXRlYWxsJyBmb3IgdGhhdC4KKworCQkJIConYXV0b3dyaXRlYWxsJyogKidhd2EnKiAqJ25vYXV0b3dyaXRlYWxsJyogKidub2F3YScqCisnYXV0b3dyaXRlYWxsJyAnYXdhJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlMaWtlICdhdXRvd3JpdGUnLCBidXQgYWxzbyB1c2VkIGZvciBjb21tYW5kcyAiOmVkaXQiLCAiOmVuZXciLCAiOnF1aXQiLAorCSI6cWFsbCIsICI6ZXhpdCIsICI6eGl0IiwgIjpyZWNvdmVyIiBhbmQgY2xvc2luZyB0aGUgVmltIHdpbmRvdy4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGFsc28gaW1wbGllcyB0aGF0IFZpbSBiZWhhdmVzIGxpa2UgJ2F1dG93cml0ZScgaGFzCisJYmVlbiBzZXQuCisKKwkJCQkJCQkqJ2JhY2tncm91bmQnKiAqJ2JnJyoKKydiYWNrZ3JvdW5kJyAnYmcnCXN0cmluZwkoZGVmYXVsdCAiZGFyayIgb3IgImxpZ2h0IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHNldCB0byAiZGFyayIsIFZpbSB3aWxsIHRyeSB0byB1c2UgY29sb3JzIHRoYXQgbG9vayBnb29kIG9uIGEKKwlkYXJrIGJhY2tncm91bmQuICBXaGVuIHNldCB0byAibGlnaHQiLCBWaW0gd2lsbCB0cnkgdG8gdXNlIGNvbG9ycyB0aGF0CisJbG9vayBnb29kIG9uIGEgbGlnaHQgYmFja2dyb3VuZC4gIEFueSBvdGhlciB2YWx1ZSBpcyBpbGxlZ2FsLgorCVZpbSB0cmllcyB0byBzZXQgdGhlIGRlZmF1bHQgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtaW5hbCB1c2VkLgorCVRoaXMgd2lsbCBub3QgYWx3YXlzIGJlIGNvcnJlY3QuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIGJhY2tncm91bmQgY29sb3IsIGl0IHRlbGxzIFZpbQorCXdoYXQgdGhlIGJhY2tncm91bmQgY29sb3IgbG9va3MgbGlrZS4gIEZvciBjaGFuZ2luZyB0aGUgYmFja2dyb3VuZAorCWNvbG9yLCBzZWUgfDpoaS1ub3JtYWx8LgorCisJV2hlbiAnYmFja2dyb3VuZCcgaXMgc2V0IFZpbSB3aWxsIGFkanVzdCB0aGUgZGVmYXVsdCBjb2xvciBncm91cHMgZm9yCisJdGhlIG5ldyB2YWx1ZS4JQnV0IHRoZSBjb2xvcnMgdXNlZCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyB3aWxsIG5vdAorCWNoYW5nZS4KKwlXaGVuIGEgY29sb3Igc2NoZW1lIGlzIGxvYWRlZCAodGhlICJjb2xvcnNfbmFtZSIgdmFyaWFibGUgaXMgc2V0KQorCXNldHRpbmcgJ2JhY2tncm91bmQnIHdpbGwgY2F1c2UgdGhlIGNvbG9yIHNjaGVtZSB0byBiZSByZWxvYWRlZC4gIElmCisJdGhlIGNvbG9yIHNjaGVtZSBhZGp1c3RzIHRvIHRoZSB2YWx1ZSBvZiAnYmFja2dyb3VuZCcgdGhpcyB3aWxsIHdvcmsuCisJSG93ZXZlciwgaWYgdGhlIGNvbG9yIHNjaGVtZSBzZXRzICdiYWNrZ3JvdW5kJyBpdHNlbGYgdGhlIGVmZmVjdCBtYXkKKwliZSB1bmRvbmUuICBGaXJzdCBkZWxldGUgdGhlICJjb2xvcnNfbmFtZSIgdmFyaWFibGUgd2hlbiBuZWVkZWQuCisKKwlXaGVuIHNldHRpbmcgJ2JhY2tncm91bmQnIHRvIHRoZSBkZWZhdWx0IHZhbHVlIHdpdGg6ID4KKwkJOnNldCBiYWNrZ3JvdW5kJgorPAlWaW0gd2lsbCBndWVzcyB0aGUgdmFsdWUuICBJbiB0aGUgR1VJIHRoaXMgc2hvdWxkIHdvcmsgY29ycmVjdGx5LAorCWluIG90aGVyIGNhc2VzIFZpbSBtaWdodCBub3QgYmUgYWJsZSB0byBndWVzcyB0aGUgcmlnaHQgdmFsdWUuCisKKwlXaGVuIHN0YXJ0aW5nIHRoZSBHVUksIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAnYmFja2dyb3VuZCcgd2lsbCBiZQorCSJsaWdodCIuICBXaGVuIHRoZSB2YWx1ZSBpcyBub3Qgc2V0IGluIHRoZSAuZ3ZpbXJjLCBhbmQgVmltIGRldGVjdHMKKwl0aGF0IHRoZSBiYWNrZ3JvdW5kIGlzIGFjdHVhbGx5IHF1aXRlIGRhcmssICdiYWNrZ3JvdW5kJyBpcyBzZXQgdG8KKwkiZGFyayIuICBCdXQgdGhpcyBoYXBwZW5zIG9ubHkgQUZURVIgdGhlIC5ndmltcmMgZmlsZSBoYXMgYmVlbiByZWFkCisJKGJlY2F1c2UgdGhlIHdpbmRvdyBuZWVkcyB0byBiZSBvcGVuZWQgdG8gZmluZCB0aGUgYWN0dWFsIGJhY2tncm91bmQKKwljb2xvcikuICBUbyBnZXQgYXJvdW5kIHRoaXMsIGZvcmNlIHRoZSBHVUkgd2luZG93IHRvIGJlIG9wZW5lZCBieQorCXB1dHRpbmcgYSAiOmd1aSIgY29tbWFuZCBpbiB0aGUgLmd2aW1yYyBmaWxlLCBiZWZvcmUgd2hlcmUgdGhlIHZhbHVlCisJb2YgJ2JhY2tncm91bmQnIGlzIHVzZWQgKGUuZy4sIGJlZm9yZSAiOnN5bnRheCBvbiIpLgorCU5vcm1hbGx5IHRoaXMgb3B0aW9uIHdvdWxkIGJlIHNldCBpbiB0aGUgLnZpbXJjIGZpbGUuICBQb3NzaWJseQorCWRlcGVuZGluZyBvbiB0aGUgdGVybWluYWwgbmFtZS4gIEV4YW1wbGU6ID4KKwkJOmlmICZ0ZXJtID09ICJwY3Rlcm0iCisJCTogIHNldCBiYWNrZ3JvdW5kPWRhcmsKKwkJOmVuZGlmCis8CVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGhpZ2hsaWdodCBncm91cHMKKwl3aWxsIGNoYW5nZS4gIFRvIHVzZSBvdGhlciBzZXR0aW5ncywgcGxhY2UgIjpoaWdobGlnaHQiIGNvbW1hbmRzIEFGVEVSCisJdGhlIHNldHRpbmcgb2YgdGhlICdiYWNrZ3JvdW5kJyBvcHRpb24uCisJVGhpcyBvcHRpb24gaXMgYWxzbyB1c2VkIGluIHRoZSAiJFZJTVJVTlRJTUUvc3ludGF4L3N5bnRheC52aW0iIGZpbGUKKwl0byBzZWxlY3QgdGhlIGNvbG9ycyBmb3Igc3ludGF4IGhpZ2hsaWdodGluZy4gIEFmdGVyIGNoYW5naW5nIHRoaXMKKwlvcHRpb24sIHlvdSBtdXN0IGxvYWQgc3ludGF4LnZpbSBhZ2FpbiB0byBzZWUgdGhlIHJlc3VsdC4gIFRoaXMgY2FuIGJlCisJZG9uZSB3aXRoICI6c3ludGF4IG9uIi4KKworCQkJCQkJCSonYmFja3NwYWNlJyogKidicycqCisnYmFja3NwYWNlJyAnYnMnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlJbmZsdWVuY2VzIHRoZSB3b3JraW5nIG9mIDxCUz4sIDxEZWw+LCBDVFJMLVcgYW5kIENUUkwtVSBpbiBJbnNlcnQKKwltb2RlLiAgVGhpcyBpcyBhIGxpc3Qgb2YgaXRlbXMsIHNlcGFyYXRlZCBieSBjb21tYXMuICBFYWNoIGl0ZW0gYWxsb3dzCisJYSB3YXkgdG8gYmFja3NwYWNlIG92ZXIgc29tZXRoaW5nOgorCXZhbHVlCWVmZmVjdAl+CisJaW5kZW50CWFsbG93IGJhY2tzcGFjaW5nIG92ZXIgYXV0b2luZGVudAorCWVvbAlhbGxvdyBiYWNrc3BhY2luZyBvdmVyIGxpbmUgYnJlYWtzIChqb2luIGxpbmVzKQorCXN0YXJ0CWFsbG93IGJhY2tzcGFjaW5nIG92ZXIgdGhlIHN0YXJ0IG9mIGluc2VydDsgQ1RSTC1XIGFuZCBDVFJMLVUKKwkJc3RvcCBvbmNlIGF0IHRoZSBzdGFydCBvZiBpbnNlcnQuCisKKwlXaGVuIHRoZSB2YWx1ZSBpcyBlbXB0eSwgVmkgY29tcGF0aWJsZSBiYWNrc3BhY2luZyBpcyB1c2VkLgorCisJRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbiA1LjQgYW5kIGVhcmxpZXI6CisJdmFsdWUJZWZmZWN0CX4KKwkgIDAJc2FtZSBhcyAiOnNldCBiYWNrc3BhY2U9IiAoVmkgY29tcGF0aWJsZSkKKwkgIDEJc2FtZSBhcyAiOnNldCBiYWNrc3BhY2U9aW5kZW50LGVvbCIKKwkgIDIJc2FtZSBhcyAiOnNldCBiYWNrc3BhY2U9aW5kZW50LGVvbCxzdGFydCIKKworCVNlZSB8OmZpeGRlbHwgaWYgeW91ciA8QlM+IG9yIDxEZWw+IGtleSBkb2VzIG5vdCBkbyB3aGF0IHlvdSB3YW50LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byAiIiB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkqJ2JhY2t1cCcqIConYmsnKiAqJ25vYmFja3VwJyogKidub2JrJyoKKydiYWNrdXAnICdiaycJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1ha2UgYSBiYWNrdXAgYmVmb3JlIG92ZXJ3cml0aW5nIGEgZmlsZS4gIExlYXZlIGl0IGFyb3VuZCBhZnRlciB0aGUKKwlmaWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiAgSWYgeW91IGRvIG5vdCB3YW50IHRvIGtlZXAgdGhlCisJYmFja3VwIGZpbGUsIGJ1dCB5b3UgZG8gd2FudCBhIGJhY2t1cCB3aGlsZSB0aGUgZmlsZSBpcyBiZWluZworCXdyaXR0ZW4sIHJlc2V0IHRoaXMgb3B0aW9uIGFuZCBzZXQgdGhlICd3cml0ZWJhY2t1cCcgb3B0aW9uICh0aGlzIGlzCisJdGhlIGRlZmF1bHQpLiAgSWYgeW91IGRvIG5vdCB3YW50IGEgYmFja3VwIGZpbGUgYXQgYWxsIHJlc2V0IGJvdGgKKwlvcHRpb25zICh1c2UgdGhpcyBpZiB5b3VyIGZpbGUgc3lzdGVtIGlzIGFsbW9zdCBmdWxsKS4JU2VlIHRoZQorCXxiYWNrdXAtdGFibGV8IGZvciBtb3JlIGV4cGxhbmF0aW9ucy4KKwlXaGVuIHRoZSAnYmFja3Vwc2tpcCcgcGF0dGVybiBtYXRjaGVzLCBhIGJhY2t1cCBpcyBub3QgbWFkZSBhbnl3YXkuCisJV2hlbiAncGF0Y2htb2RlJyBpcyBzZXQsIHRoZSBiYWNrdXAgbWF5IGJlIHJlbmFtZWQgdG8gYmVjb21lIHRoZQorCW9sZGVzdCB2ZXJzaW9uIG9mIGEgZmlsZS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonYmFja3VwY29weScqIConYmtjJyoKKydiYWNrdXBjb3B5JyAnYmtjJwlzdHJpbmcJKFZpIGRlZmF1bHQgZm9yIFVuaXg6ICJ5ZXMiLCBvdGhlcndpc2U6ICJhdXRvIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHdyaXRpbmcgYSBmaWxlIGFuZCBhIGJhY2t1cCBpcyBtYWRlLCB0aGlzIG9wdGlvbiB0ZWxscyBob3cgaXQncworCWRvbmUuICBUaGlzIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMuCisKKwlUaGUgbWFpbiB2YWx1ZXMgYXJlOgorCSJ5ZXMiCW1ha2UgYSBjb3B5IG9mIHRoZSBmaWxlIGFuZCBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIG9uZQorCSJubyIJcmVuYW1lIHRoZSBmaWxlIGFuZCB3cml0ZSBhIG5ldyBvbmUKKwkiYXV0byIJb25lIG9mIHRoZSBwcmV2aW91cywgd2hhdCB3b3JrcyBiZXN0CisKKwlFeHRyYSB2YWx1ZXMgdGhhdCBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgb25lcyBhYm92ZSBhcmU6CisJImJyZWFrc3ltbGluayIJYWx3YXlzIGJyZWFrIHN5bWxpbmtzIHdoZW4gd3JpdGluZworCSJicmVha2hhcmRsaW5rIglhbHdheXMgYnJlYWsgaGFyZGxpbmtzIHdoZW4gd3JpdGluZworCisJTWFraW5nIGEgY29weSBhbmQgb3ZlcndyaXRpbmcgdGhlIG9yaWdpbmFsIGZpbGU6CisJLSBUYWtlcyBleHRyYSB0aW1lIHRvIGNvcHkgdGhlIGZpbGUuCisJKyBXaGVuIHRoZSBmaWxlIGhhcyBzcGVjaWFsIGF0dHJpYnV0ZXMsIGlzIGEgKGhhcmQvc3ltYm9saWMpIGxpbmsgb3IKKwkgIGhhcyBhIHJlc291cmNlIGZvcmssIGFsbCB0aGlzIGlzIHByZXNlcnZlZC4KKwktIFdoZW4gdGhlIGZpbGUgaXMgYSBsaW5rIHRoZSBiYWNrdXAgd2lsbCBoYXZlIHRoZSBuYW1lIG9mIHRoZSBsaW5rLAorCSAgbm90IG9mIHRoZSByZWFsIGZpbGUuCisKKwlSZW5hbWluZyB0aGUgZmlsZSBhbmQgd3JpdGluZyBhIG5ldyBvbmU6CisJKyBJdCdzIGZhc3QuCisJLSBTb21ldGltZXMgbm90IGFsbCBhdHRyaWJ1dGVzIG9mIHRoZSBmaWxlIGNhbiBiZSBjb3BpZWQgdG8gdGhlIG5ldworCSAgZmlsZS4KKwktIFdoZW4gdGhlIGZpbGUgaXMgYSBsaW5rIHRoZSBuZXcgZmlsZSB3aWxsIG5vdCBiZSBhIGxpbmsuCisKKwlUaGUgImF1dG8iIHZhbHVlIGlzIHRoZSBtaWRkbGUgd2F5OiBXaGVuIFZpbSBzZWVzIHRoYXQgcmVuYW1pbmcgZmlsZQorCWlzIHBvc3NpYmxlIHdpdGhvdXQgc2lkZSBlZmZlY3RzICh0aGUgYXR0cmlidXRlcyBjYW4gYmUgcGFzc2VkIG9uIGFuZAorCWFuZCB0aGUgZmlsZSBpcyBub3QgYSBsaW5rKSB0aGF0IGlzIHVzZWQuICBXaGVuIHByb2JsZW1zIGFyZSBleHBlY3RlZCwKKwlhIGNvcHkgd2lsbCBiZSBtYWRlLgorCisJVGhlICJicmVha3N5bWxpbmsiIGFuZCAiYnJlYWtoYXJkbGluayIgdmFsdWVzIGNhbiBiZSB1c2VkIGluCisJY29tYmluYXRpb24gd2l0aCBhbnkgb2YgInllcyIsICJubyIgYW5kICJhdXRvIi4gIFdoZW4gaW5jbHVkZWQsIHRoZXkKKwlmb3JjZSBWaW0gdG8gYWx3YXlzIGJyZWFrIGVpdGhlciBzeW1ib2xpYyBvciBoYXJkIGxpbmtzIGJ5IGRvaW5nCisJZXhhY3RseSB3aGF0IHRoZSAibm8iIG9wdGlvbiBkb2VzLCByZW5hbWluZyB0aGUgb3JpZ2luYWwgZmlsZSB0bworCWJlY29tZSB0aGUgYmFja3VwIGFuZCB3cml0aW5nIGEgbmV3IGZpbGUgaW4gaXRzIHBsYWNlLiAgVGhpcyBjYW4gYmUKKwl1c2VmdWwgZm9yIGV4YW1wbGUgaW4gc291cmNlIHRyZWVzIHdoZXJlIGFsbCB0aGUgZmlsZXMgYXJlIHN5bWJvbGljIG9yCisJaGFyZCBsaW5rcyBhbmQgYW55IGNoYW5nZXMgc2hvdWxkIHN0YXkgaW4gdGhlIGxvY2FsIHNvdXJjZSB0cmVlLCBub3QKKwliZSBwcm9wYWdhdGVkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZS4KKwkJCQkJCQkqY3JvbnRhYioKKwlPbmUgc2l0dWF0aW9uIHdoZXJlICJubyIgYW5kICJhdXRvIiB3aWxsIGNhdXNlIHByb2JsZW1zOiBBIHByb2dyYW0KKwl0aGF0IG9wZW5zIGEgZmlsZSwgaW52b2tlcyBWaW0gdG8gZWRpdCB0aGF0IGZpbGUsIGFuZCB0aGVuIHRlc3RzIGlmCisJdGhlIG9wZW4gZmlsZSB3YXMgY2hhbmdlZCAodGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlwdG9yKSB3aWxsIGNoZWNrIHRoZQorCWJhY2t1cCBmaWxlIGluc3RlYWQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgZmlsZS4JImNyb250YWIgLWUiIGlzIGFuCisJZXhhbXBsZS4KKworCVdoZW4gYSBjb3B5IGlzIG1hZGUsIHRoZSBvcmlnaW5hbCBmaWxlIGlzIHRydW5jYXRlZCBhbmQgdGhlbiBmaWxsZWQKKwl3aXRoIHRoZSBuZXcgdGV4dC4gIFRoaXMgbWVhbnMgdGhhdCBwcm90ZWN0aW9uIGJpdHMsIG93bmVyIGFuZAorCXN5bWJvbGljIGxpbmtzIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFyZSB1bm1vZGlmaWVkLiAgVGhlIGJhY2t1cCBmaWxlCisJaG93ZXZlciwgaXMgYSBuZXcgZmlsZSwgb3duZWQgYnkgdGhlIHVzZXIgd2hvIGVkaXRlZCB0aGUgZmlsZS4JVGhlCisJZ3JvdXAgb2YgdGhlIGJhY2t1cCBpcyBzZXQgdG8gdGhlIGdyb3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlLiAgSWYgdGhpcworCWZhaWxzLCB0aGUgcHJvdGVjdGlvbiBiaXRzIGZvciB0aGUgZ3JvdXAgYXJlIG1hZGUgdGhlIHNhbWUgYXMgZm9yCisJb3RoZXJzLgorCisJV2hlbiB0aGUgZmlsZSBpcyByZW5hbWVkIHRoaXMgaXMgdGhlIG90aGVyIHdheSBhcm91bmQ6IFRoZSBiYWNrdXAgaGFzCisJdGhlIHNhbWUgYXR0cmlidXRlcyBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHRoZSBuZXdseSB3cml0dGVuIGZpbGUKKwlpcyBvd25lZCBieSB0aGUgY3VycmVudCB1c2VyLiAgV2hlbiB0aGUgZmlsZSB3YXMgYSAoaGFyZC9zeW1ib2xpYykKKwlsaW5rLCB0aGUgbmV3IGZpbGUgd2lsbCBub3QhICBUaGF0J3Mgd2h5IHRoZSAiYXV0byIgdmFsdWUgZG9lc24ndAorCXJlbmFtZSB3aGVuIHRoZSBmaWxlIGlzIGEgbGluay4gIFRoZSBvd25lciBhbmQgZ3JvdXAgb2YgdGhlIG5ld2x5CisJd3JpdHRlbiBmaWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBzYW1lIG9uZXMgYXMgdGhlIG9yaWdpbmFsIGZpbGUsIGJ1dAorCXRoZSBzeXN0ZW0gbWF5IHJlZnVzZSB0byBkbyB0aGlzLiAgSW4gdGhhdCBjYXNlIHRoZSAiYXV0byIgdmFsdWUgd2lsbAorCWFnYWluIG5vdCByZW5hbWUgdGhlIGZpbGUuCisKKwkJCQkJCSonYmFja3VwZGlyJyogKidiZGlyJyoKKydiYWNrdXBkaXInICdiZGlyJwlzdHJpbmcJKGRlZmF1bHQgZm9yIEFtaWdhOiAiLix0OiIsCisJCQkJIGZvciBNUy1ET1MgYW5kIFdpbjMyOiAiLixjOi90bXAsYzovdGVtcCIKKwkJCQkgZm9yIFVuaXg6ICIuLH4vdG1wLH4vIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlMaXN0IG9mIGRpcmVjdG9yaWVzIGZvciB0aGUgYmFja3VwIGZpbGUsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4KKwktIFRoZSBiYWNrdXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGZpcnN0IGRpcmVjdG9yeSBpbiB0aGUgbGlzdAorCSAgd2hlcmUgdGhpcyBpcyBwb3NzaWJsZS4KKwktIEVtcHR5IG1lYW5zIHRoYXQgbm8gYmFja3VwIGZpbGUgd2lsbCBiZSBjcmVhdGVkICgncGF0Y2htb2RlJyBpcworCSAgaW1wb3NzaWJsZSEpLiAgV3JpdGluZyBtYXkgZmFpbCBiZWNhdXNlIG9mIHRoaXMuCisJLSBBIGRpcmVjdG9yeSAiLiIgbWVhbnMgdG8gcHV0IHRoZSBiYWNrdXAgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKwkgIGFzIHRoZSBlZGl0ZWQgZmlsZS4KKwktIEEgZGlyZWN0b3J5IHN0YXJ0aW5nIHdpdGggIi4vIiAob3IgIi5cIiBmb3IgTVMtRE9TIGV0LmFsLikgbWVhbnMgdG8KKwkgIHB1dCB0aGUgYmFja3VwIGZpbGUgcmVsYXRpdmUgdG8gd2hlcmUgdGhlIGVkaXRlZCBmaWxlIGlzLiAgVGhlCisJICBsZWFkaW5nICIuIiBpcyByZXBsYWNlZCB3aXRoIHRoZSBwYXRoIG5hbWUgb2YgdGhlIGVkaXRlZCBmaWxlLgorCSAgKCIuIiBpbnNpZGUgYSBkaXJlY3RvcnkgbmFtZSBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nKS4KKwktIFNwYWNlcyBhZnRlciB0aGUgY29tbWEgYXJlIGlnbm9yZWQsIG90aGVyIHNwYWNlcyBhcmUgY29uc2lkZXJlZCBwYXJ0CisJICBvZiB0aGUgZGlyZWN0b3J5IG5hbWUuICBUbyBoYXZlIGEgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIGEgZGlyZWN0b3J5CisJICBuYW1lLCBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2guCisJLSBUbyBpbmNsdWRlIGEgY29tbWEgaW4gYSBkaXJlY3RvcnkgbmFtZSBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2guCisJLSBBIGRpcmVjdG9yeSBuYW1lIG1heSBlbmQgaW4gYW4gJy8nLgorCS0gRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LgorCS0gQ2FyZWZ1bCB3aXRoICdcJyBjaGFyYWN0ZXJzLCB0eXBlIG9uZSBiZWZvcmUgYSBzcGFjZSwgdHlwZSB0d28gdG8KKwkgIGdldCBvbmUgaW4gdGhlIG9wdGlvbiAoc2VlIHxvcHRpb24tYmFja3NsYXNofCksIGZvciBleGFtcGxlOiA+CisJICAgIDpzZXQgYmRpcj1jOlxcdG1wLFwgZGlyXFwsd2l0aFxcLGNvbW1hcyxcXFwgZGlyXCB3aXRoXCBzcGFjZXMKKzwJLSBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBWaW0gdmVyc2lvbiAzLjAgYSAnPicgYXQgdGhlIHN0YXJ0CisJICBvZiB0aGUgb3B0aW9uIGlzIHJlbW92ZWQuCisJU2VlIGFsc28gJ2JhY2t1cCcgYW5kICd3cml0ZWJhY2t1cCcgb3B0aW9ucy4KKwlJZiB5b3Ugd2FudCB0byBoaWRlIHlvdXIgYmFja3VwIGZpbGVzIG9uIFVuaXgsIGNvbnNpZGVyIHRoaXMgdmFsdWU6ID4KKwkJOnNldCBiYWNrdXBkaXI9Li8uYmFja3VwLH4vLmJhY2t1cCwuLC90bXAKKzwJWW91IG11c3QgY3JlYXRlIGEgIi5iYWNrdXAiIGRpcmVjdG9yeSBpbiBlYWNoIGRpcmVjdG9yeSBhbmQgaW4geW91cgorCWhvbWUgZGlyZWN0b3J5IGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkuCisJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJZGlyZWN0b3JpZXMgZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidiYWNrdXBleHQnKiAqJ2JleCcqICpFNTg5KgorJ2JhY2t1cGV4dCcgJ2JleCcJc3RyaW5nCShkZWZhdWx0ICJ+IiwgZm9yIFZNUzogIl8iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVN0cmluZyB3aGljaCBpcyBhcHBlbmRlZCB0byBhIGZpbGUgbmFtZSB0byBtYWtlIHRoZSBuYW1lIG9mIHRoZQorCWJhY2t1cCBmaWxlLiAgVGhlIGRlZmF1bHQgaXMgcXVpdGUgdW51c3VhbCwgYmVjYXVzZSB0aGlzIGF2b2lkcworCWFjY2lkZW50YWxseSBvdmVyd3JpdGluZyBleGlzdGluZyBmaWxlcyB3aXRoIGEgYmFja3VwIGZpbGUuICBZb3UgbWlnaHQKKwlwcmVmZXIgdXNpbmcgIi5iYWsiLCBidXQgbWFrZSBzdXJlIHRoYXQgeW91IGRvbid0IGhhdmUgZmlsZXMgd2l0aAorCSIuYmFrIiB0aGF0IHlvdSB3YW50IHRvIGtlZXAuCisKKwkJCQkJCSonYmFja3Vwc2tpcCcqIConYnNrJyoKKydiYWNrdXBza2lwJyAnYnNrJwlzdHJpbmcJKGRlZmF1bHQ6ICIvdG1wLyosJFRNUERJUi8qLCRUTVAvKiwkVEVNUC8qIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt3aWxkaWdub3JlfAorCQkJZmVhdHVyZX0KKwlBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucy4gIFdoZW4gb25lIG9mIHRoZSBwYXR0ZXJucyBtYXRjaGVzIHdpdGggdGhlCisJbmFtZSBvZiB0aGUgZmlsZSB3aGljaCBpcyB3cml0dGVuLCBubyBiYWNrdXAgZmlsZSBpcyBjcmVhdGVkLiAgQm90aAorCXRoZSBzcGVjaWZpZWQgZmlsZSBuYW1lIGFuZCB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgdGhlIGZpbGUgYXJlIHVzZWQuCisJVGhlIHBhdHRlcm4gaXMgdXNlZCBsaWtlIHdpdGggfDphdXRvY21kfCwgc2VlIHxhdXRvY21kLXBhdHRlcm5zfC4KKwlXYXRjaCBvdXQgZm9yIHNwZWNpYWwgY2hhcmFjdGVycywgc2VlIHxvcHRpb24tYmFja3NsYXNofC4KKwlXaGVuICRUTVBESVIsICRUTVAgb3IgJFRFTVAgaXMgbm90IGRlZmluZWQsIGl0IGlzIG5vdCB1c2VkIGZvciB0aGUKKwlkZWZhdWx0IHZhbHVlLiAiL3RtcC8qIiBpcyBvbmx5IHVzZWQgZm9yIFVuaXguCisKKwkJCQkJCSonYmFsbG9vbmRlbGF5JyogKidiZGxheScqCisnYmFsbG9vbmRlbGF5JyAnYmRsYXknCW51bWJlcgkoZGVmYXVsdDogNjAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtiYWxsb29uX2V2YWx8CisJCQlmZWF0dXJlfQorCURlbGF5IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYSBiYWxsb29uIG1heSBwb3AgdXAuICBTZWUgfGJhbGxvb24tZXZhbHwuCisKKwkJICAgICAgIConYmFsbG9vbmV2YWwnKiAqJ2JldmFsJyogKidub2JhbGxvb25ldmFsJyogKidub2JldmFsJyoKKydiYWxsb29uZXZhbCcgJ2JldmFsJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrYmFsbG9vbl9ldmFsfAorCQkJYW5kIHwrc3VuX3dvcmtzaG9wfCBvciB8K25ldGJlYW5zX2ludGd8IGZlYXR1cmVzfQorCVN3aXRjaCBvbiB0aGUgfGJhbGxvb24tZXZhbHwgZnVuY3Rpb25hbGl0eS4KKworCQkJCSAgICAgKidiaW5hcnknKiAqJ2JpbicqIConbm9iaW5hcnknKiAqJ25vYmluJyoKKydiaW5hcnknICdiaW4nCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0IGJlZm9yZSBlZGl0aW5nIGEgYmluYXJ5IGZpbGUuICBZb3UgY2FuIGFsc28KKwl1c2UgdGhlIHwtYnwgVmltIGFyZ3VtZW50LiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBzd2l0Y2hlZCBvbiBhIGZldworCW9wdGlvbnMgd2lsbCBiZSBjaGFuZ2VkIChhbHNvIHdoZW4gaXQgYWxyZWFkeSB3YXMgb24pOgorCQkndGV4dHdpZHRoJyAgd2lsbCBiZSBzZXQgdG8gMAorCQknd3JhcG1hcmdpbicgd2lsbCBiZSBzZXQgdG8gMAorCQknbW9kZWxpbmUnICAgd2lsbCBiZSBvZmYKKwkJJ2V4cGFuZHRhYicgIHdpbGwgYmUgb2ZmCisJQWxzbywgJ2ZpbGVmb3JtYXQnIGFuZCAnZmlsZWZvcm1hdHMnIG9wdGlvbnMgd2lsbCBub3QgYmUgdXNlZCwgdGhlCisJZmlsZSBpcyByZWFkIGFuZCB3cml0dGVuIGxpa2UgJ2ZpbGVmb3JtYXQnIHdhcyAidW5peCIgKGEgc2luZ2xlIDxOTD4KKwlzZXBhcmF0ZXMgbGluZXMpLgorCVRoZSAnZmlsZWVuY29kaW5nJyBhbmQgJ2ZpbGVlbmNvZGluZ3MnIG9wdGlvbnMgd2lsbCBub3QgYmUgdXNlZCwgdGhlCisJZmlsZSBpcyByZWFkIHdpdGhvdXQgY29udmVyc2lvbi4KKwlOT1RFOiBXaGVuIHlvdSBzdGFydCBlZGl0aW5nIGEobm90aGVyKSBmaWxlIHdoaWxlIHRoZSAnYmluJyBvcHRpb24gaXMKKwlvbiwgc2V0dGluZ3MgZnJvbSBhdXRvY29tbWFuZHMgbWF5IGNoYW5nZSB0aGUgc2V0dGluZ3MgYWdhaW4gKGUuZy4sCisJJ3RleHR3aWR0aCcpLCBjYXVzaW5nIHRyb3VibGUgd2hlbiBlZGl0aW5nLiAgWW91IG1pZ2h0IHdhbnQgdG8gc2V0CisJJ2JpbicgYWdhaW4gd2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBsb2FkZWQuCisJVGhlIHByZXZpb3VzIHZhbHVlcyBvZiB0aGVzZSBvcHRpb25zIGFyZSByZW1lbWJlcmVkIGFuZCByZXN0b3JlZCB3aGVuCisJJ2JpbicgaXMgc3dpdGNoZWQgZnJvbSBvbiB0byBvZmYuICBFYWNoIGJ1ZmZlciBoYXMgaXRzIG93biBzZXQgb2YKKwlzYXZlZCBvcHRpb24gdmFsdWVzLgorCVRvIGVkaXQgYSBmaWxlIHdpdGggJ2JpbmFyeScgc2V0IHlvdSBjYW4gdXNlIHRoZSB8KytiaW58IGFyZ3VtZW50LgorCVRoaXMgYXZvaWRzIHlvdSBoYXZlIHRvIGRvICI6c2V0IGJpbiIsIHdoaWNoIHdvdWxkIGhhdmUgZWZmZWN0IGZvciBhbGwKKwlmaWxlcyB5b3UgZWRpdC4KKwlXaGVuIHdyaXRpbmcgYSBmaWxlIHRoZSA8RU9MPiBmb3IgdGhlIGxhc3QgbGluZSBpcyBvbmx5IHdyaXR0ZW4gaWYKKwl0aGVyZSB3YXMgb25lIGluIHRoZSBvcmlnaW5hbCBmaWxlIChub3JtYWxseSBWaW0gYXBwZW5kcyBhbiA8RU9MPiB0bworCXRoZSBsYXN0IGxpbmUgaWYgdGhlcmUgaXMgbm9uZTsgdGhpcyB3b3VsZCBtYWtlIHRoZSBmaWxlIGxvbmdlcikuICBTZWUKKwl0aGUgJ2VuZG9mbGluZScgb3B0aW9uLgorCisJCQkqJ2Jpb3NrZXknKiAqJ2Jpb3NrJyogKidub2Jpb3NrZXknKiAqJ25vYmlvc2snKgorJ2Jpb3NrZXknICdiaW9zaycJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0gIHtvbmx5IGZvciBNUy1ET1N9CisJV2hlbiBvbiB0aGUgYmlvcyBpcyBjYWxsZWQgdG8gb2J0YWluIGEga2V5Ym9hcmQgY2hhcmFjdGVyLiAgVGhpcyB3b3JrcworCWJldHRlciB0byBkZXRlY3QgQ1RSTC1DLCBidXQgb25seSB3b3JrcyBmb3IgdGhlIGNvbnNvbGUuICBXaGVuIHVzaW5nIGEKKwl0ZXJtaW5hbCBvdmVyIGEgc2VyaWFsIHBvcnQgcmVzZXQgdGhpcyBvcHRpb24uCisJQWxzbyBzZWUgfCdjb25za2V5J3wuCisKKwkJCQkJCQkqJ2JvbWInKiAqJ25vYm9tYicqCisnYm9tYicJCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmV9CisJV2hlbiB3cml0aW5nIGEgZmlsZSBhbmQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQsIGEgQk9NIChCeXRlCisJT3JkZXIgTWFyaykgaXMgcHJlcGVuZGVkIHRvIHRoZSBmaWxlOgorCS0gdGhpcyBvcHRpb24gaXMgb24KKwktIHRoZSAnYmluYXJ5JyBvcHRpb24gaXMgb2ZmCisJLSAnZmlsZWVuY29kaW5nJyBpcyAidXRmLTgiLCAidWNzLTIiLCAidWNzLTQiIG9yIG9uZSBvZiB0aGUgbGl0dGxlL2JpZworCSAgZW5kaWFuIHZhcmlhbnRzLgorCVNvbWUgYXBwbGljYXRpb25zIHVzZSB0aGUgQk9NIHRvIHJlY29nbml6ZSB0aGUgZW5jb2Rpbmcgb2YgdGhlIGZpbGUuCisJT2Z0ZW4gdXNlZCBmb3IgVUNTLTIgZmlsZXMgb24gTVMtV2luZG93cy4gIEZvciBvdGhlciBhcHBsaWNhdGlvbnMgaXQKKwljYXVzZXMgdHJvdWJsZSwgZm9yIGV4YW1wbGU6ICJjYXQgZmlsZTEgZmlsZTIiIG1ha2VzIHRoZSBCT00gb2YgZmlsZTIKKwlhcHBlYXIgaGFsZndheSB0aGUgcmVzdWx0aW5nIGZpbGUuCisJV2hlbiBWaW0gcmVhZHMgYSBmaWxlIGFuZCAnZmlsZWVuY29kaW5ncycgc3RhcnRzIHdpdGggInVjcy1ib20iLCBhCisJY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgQk9NIGlzIGRvbmUgYW5kICdib21iJyBzZXQgYWNjb3JkaW5nbHkuCisJVW5sZXNzICdiaW5hcnknIGlzIHNldCwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmaXJzdCBsaW5lLCBzbyB0aGF0IHlvdQorCWRvbid0IHNlZSBpdCB3aGVuIGVkaXRpbmcuICBXaGVuIHlvdSBkb24ndCBjaGFuZ2UgdGhlIG9wdGlvbnMsIHRoZSBCT00KKwl3aWxsIGJlIHJlc3RvcmVkIHdoZW4gd3JpdGluZyB0aGUgZmlsZS4KKworCQkJCQkJKidicmVha2F0JyogKidicmsnKgorJ2JyZWFrYXQnICdicmsnCQlzdHJpbmcJKGRlZmF1bHQgIiBeSSFAKi0rOzosLi8/IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgIHwrbGluZWJyZWFrfAorCQkJZmVhdHVyZX0KKwlUaGlzIG9wdGlvbiBsZXRzIHlvdSBjaG9vc2Ugd2hpY2ggY2hhcmFjdGVycyBtaWdodCBjYXVzZSBhIGxpbmUKKwlicmVhayBpZiAnbGluZWJyZWFrJyBpcyBvbi4KKworCQkJCQkJKidicm93c2VkaXInKiAqJ2JzZGlyJyoKKydicm93c2VkaXInICdic2RpcicJc3RyaW5nCShkZWZhdWx0IGZvciAibGFzdCIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9IHtvbmx5IGZvciBNb3RpZiBhbmQgV2luMzIgR1VJfQorCVdoaWNoIGRpcmVjdG9yeSB0byB1c2UgZm9yIHRoZSBmaWxlIGJyb3dzZXI6CisJICAgbGFzdAkJVXNlIHNhbWUgZGlyZWN0b3J5IGFzIHdpdGggbGFzdCBmaWxlIGJyb3dzZXIuCisJICAgYnVmZmVyCVVzZSB0aGUgZGlyZWN0b3J5IG9mIHRoZSByZWxhdGVkIGJ1ZmZlci4KKwkgICBjdXJyZW50CVVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisJICAge3BhdGh9CVVzZSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQorCisJCQkJCQkqJ2J1ZmhpZGRlbicqIConYmgnKgorJ2J1ZmhpZGRlbicgJ2JoJwlzdHJpbmcgKGRlZmF1bHQ6ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fAorCQkJZmVhdHVyZX0KKwlUaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hhdCBoYXBwZW5zIHdoZW4gYSBidWZmZXIgaXMgbm8gbG9uZ2VyCisJZGlzcGxheWVkIGluIGEgd2luZG93OgorCSAgPGVtcHR5Pglmb2xsb3cgdGhlIGdsb2JhbCAnaGlkZGVuJyBvcHRpb24KKwkgIGhpZGUJCWhpZGUgdGhlIGJ1ZmZlciAoZG9uJ3QgdW5sb2FkIGl0KSwgYWxzbyB3aGVuICdoaWRkZW4nCisJCQlpcyBub3Qgc2V0CisJICB1bmxvYWQJdW5sb2FkIHRoZSBidWZmZXIsIGFsc28gd2hlbiAnaGlkZGVuJyBpcyBzZXQgb3IgdXNpbmcKKwkJCXw6aGlkZXwKKwkgIGRlbGV0ZQlkZWxldGUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgbGlzdCwgYWxzbyB3aGVuCisJCQknaGlkZGVuJyBpcyBzZXQgb3IgdXNpbmcgfDpoaWRlfCwgbGlrZSB1c2luZworCQkJfDpiZGVsZXRlfAorCSAgd2lwZQkJd2lwZSBvdXQgdGhlIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgbGlzdCwgYWxzbyB3aGVuCisJCQknaGlkZGVuJyBpcyBzZXQgb3IgdXNpbmcgfDpoaWRlfCwgbGlrZSB1c2luZworCQkJfDpid2lwZW91dHwKKworCVRoaXMgb3B0aW9uIGlzIHVzZWQgdG9nZXRoZXIgd2l0aCAnYnVmdHlwZScgYW5kICdzd2FwZmlsZScgdG8gc3BlY2lmeQorCXNwZWNpYWwga2luZHMgb2YgYnVmZmVycy4gICBTZWUgfHNwZWNpYWwtYnVmZmVyc3wuCisKKwkJCSonYnVmbGlzdGVkJyogKidibCcqIConbm9idWZsaXN0ZWQnKiAqJ25vYmwnKiAqRTg1KgorJ2J1Zmxpc3RlZCcgJ2JsJwlib29sZWFuIChkZWZhdWx0OiBvbikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGJ1ZmZlciBzaG93cyB1cCBpbiB0aGUgYnVmZmVyIGxpc3QuICBJZgorCWl0IGlzIHJlc2V0IGl0IGlzIG5vdCB1c2VkIGZvciAiOmJuZXh0IiwgImxzIiwgdGhlIEJ1ZmZlcnMgbWVudSwgZXRjLgorCVRoaXMgb3B0aW9uIGlzIHJlc2V0IGJ5IFZpbSBmb3IgYnVmZmVycyB0aGF0IGFyZSBvbmx5IHVzZWQgdG8gcmVtZW1iZXIKKwlhIGZpbGUgbmFtZSBvciBtYXJrcy4gIFZpbSBzZXRzIGl0IHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIGJ1ZmZlci4KKwlCdXQgbm90IHdoZW4gbW92aW5nIHRvIGEgYnVmZmVyIHdpdGggIjpidWZmZXIiLgorCisJCQkJCQkqJ2J1ZnR5cGUnKiAqJ2J0JyogKkUzODIqCisnYnVmdHlwZScgJ2J0JwkJc3RyaW5nIChkZWZhdWx0OiAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwKKwkJCWZlYXR1cmV9CisJVGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgdHlwZSBvZiBhIGJ1ZmZlcjoKKwkgIDxlbXB0eT4Jbm9ybWFsIGJ1ZmZlcgorCSAgbm9maWxlCWJ1ZmZlciB3aGljaCBpcyBub3QgcmVsYXRlZCB0byBhIGZpbGUgYW5kIHdpbGwgbm90IGJlCisJCQl3cml0dGVuCisJICBub3dyaXRlCWJ1ZmZlciB3aGljaCB3aWxsIG5vdCBiZSB3cml0dGVuCisJICBxdWlja2ZpeAlxdWlja2ZpeCBidWZmZXIsIGNvbnRhaW5zIGxpc3Qgb2YgZXJyb3JzIHw6Y3dpbmRvd3wKKwkgIGhlbHAJCWhlbHAgYnVmZmVyICh5b3UgYXJlIG5vdCBzdXBwb3NlZCB0byBzZXQgdGhpcworCQkJbWFudWFsbHkpCisKKwlUaGlzIG9wdGlvbiBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggJ2J1ZmhpZGRlbicgYW5kICdzd2FwZmlsZScgdG8KKwlzcGVjaWZ5IHNwZWNpYWwga2luZHMgb2YgYnVmZmVycy4gICBTZWUgfHNwZWNpYWwtYnVmZmVyc3wuCisKKwlCZSBjYXJlZnVsIHdpdGggY2hhbmdpbmcgdGhpcyBvcHRpb24sIGl0IGNhbiBoYXZlIG1hbnkgc2lkZSBlZmZlY3RzIQorCisJQSAicXVpY2tmaXgiIGJ1ZmZlciBpcyBvbmx5IHVzZWQgZm9yIHRoZSBlcnJvciBsaXN0LiAgVGhpcyB2YWx1ZSBpcworCXNldCBieSB0aGUgfDpjd2luZG93fCBjb21tYW5kIGFuZCB5b3UgYXJlIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2UgaXQuCisKKwkibm9maWxlIiBhbmQgIm5vd3JpdGUiIGJ1ZmZlcnMgYXJlIHNpbWlsYXI6CisJYm90aDoJCVRoZSBidWZmZXIgaXMgbm90IHRvIGJlIHdyaXR0ZW4gdG8gZGlzaywgIjp3IiBkb2Vzbid0CisJCQl3b3JrICgiOncgZmlsZW5hbWUiIGRvZXMgd29yayB0aG91Z2gpLgorCWJvdGg6CQlUaGUgYnVmZmVyIGlzIG5ldmVyIGNvbnNpZGVyZWQgdG8gYmUgfCdtb2RpZmllZCd8LgorCQkJVGhlcmUgaXMgbm8gd2FybmluZyB3aGVuIHRoZSBjaGFuZ2VzIHdpbGwgYmUgbG9zdCwgZm9yCisJCQlleGFtcGxlIHdoZW4geW91IHF1aXQgVmltLgorCWJvdGg6CQlBIHN3YXAgZmlsZSBpcyBvbmx5IGNyZWF0ZWQgd2hlbiB1c2luZyB0b28gbXVjaCBtZW1vcnkKKwkJCSh3aGVuICdzd2FwZmlsZScgaGFzIGJlZW4gcmVzZXQgdGhlcmUgaXMgbmV2ZXIgYSBzd2FwCisJCQlmaWxlKS4KKwlub2ZpbGUgb25seToJVGhlIGJ1ZmZlciBuYW1lIGlzIGZpeGVkLCBpdCBpcyBub3QgaGFuZGxlZCBsaWtlIGEKKwkJCWZpbGUgbmFtZS4gIEl0IGlzIG5vdCBtb2RpZmllZCBpbiByZXNwb25zZSB0byBhIHw6Y2R8CisJCQljb21tYW5kLgorCisJCQkJCQkqJ2Nhc2VtYXAnKiAqJ2NtcCcqCisnY2FzZW1hcCcgJ2NtcCcJCXN0cmluZwkoZGVmYXVsdDogImludGVybmFsLGtlZXBhc2NpaSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJU3BlY2lmaWVzIGRldGFpbHMgYWJvdXQgY2hhbmdpbmcgdGhlIGNhc2Ugb2YgbGV0dGVycy4gIEl0IG1heSBjb250YWluCisJdGhlc2Ugd29yZHMsIHNlcGFyYXRlZCBieSBhIGNvbW1hOgorCWludGVybmFsCVVzZSBpbnRlcm5hbCBjYXNlIG1hcHBpbmcgZnVuY3Rpb25zLCB0aGUgY3VycmVudAorCQkJbG9jYWxlIGRvZXMgbm90IGNoYW5nZSB0aGUgY2FzZSBtYXBwaW5nLiAgVGhpcyBvbmx5CisJCQltYXR0ZXJzIHdoZW4gJ2VuY29kaW5nJyBpcyBhIFVuaWNvZGUgZW5jb2RpbmcuCVdoZW4KKwkJCSJpbnRlcm5hbCIgaXMgb21pdHRlZCwgdGhlIHRvd3VwcGVyKCkgYW5kIHRvd2xvd2VyKCkKKwkJCXN5c3RlbSBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGF2YWlsYWJsZS4KKwlrZWVwYXNjaWkJRm9yIHRoZSBBU0NJSSBjaGFyYWN0ZXJzICgweDAwIHRvIDB4N2YpIHVzZSB0aGUgVVMKKwkJCWNhc2UgbWFwcGluZywgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIG5vdCBlZmZlY3RpdmUuCisJCQlUaGlzIHByb2JhYmx5IG9ubHkgbWF0dGVycyBmb3IgVHVya2lzaC4KKworCQkJCQkJKidjZHBhdGgnKiAqJ2NkJyogKkUzNDQqICpFMzQ2KgorJ2NkcGF0aCcgJ2NkJwkJc3RyaW5nCShkZWZhdWx0OiBlcXVpdmFsZW50IHRvICRDRFBBVEggb3IgIiwsIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrZmlsZV9pbl9wYXRofCBmZWF0dXJlfQorCVRoaXMgaXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHdoaWNoIHdpbGwgYmUgc2VhcmNoZWQgd2hlbiB1c2luZyB0aGUKKwl8OmNkfCBhbmQgfDpsY2R8IGNvbW1hbmRzLCBwcm92aWRlZCB0aGF0IHRoZSBkaXJlY3RvcnkgYmVpbmcgc2VhcmNoZWQKKwlmb3IgaGFzIGEgcmVsYXRpdmUgcGF0aCAobm90IHN0YXJ0aW5nIHdpdGggIi8iLCAiLi8iIG9yICIuLi8iKS4KKwlUaGUgJ2NkcGF0aCcgb3B0aW9uJ3MgdmFsdWUgaGFzIHRoZSBzYW1lIGZvcm0gYW5kIHNlbWFudGljcyBhcworCXwncGF0aCd8LiAgQWxzbyBzZWUgfGZpbGUtc2VhcmNoaW5nfC4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0YWtlbiBmcm9tICRDRFBBVEgsIHdpdGggYSAiLCIgcHJlcGVuZGVkIHRvIGxvb2sKKwlpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZmlyc3QuCisJSWYgdGhlIGRlZmF1bHQgdmFsdWUgdGFrZW4gZnJvbSAkQ0RQQVRIIGlzIG5vdCB3aGF0IHlvdSB3YW50LCBpbmNsdWRlCisJYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB5b3VyIHZpbXJjIGZpbGUgdG8KKwlvdmVycmlkZSBpdDogPgorCSAgOmxldCAmY2RwYXRoID0gJywnIC4gc3Vic3RpdHV0ZShzdWJzdGl0dXRlKCRDRFBBVEgsICdbLCBdJywgJ1xcXDAnLCAnZycpLCAnOicsICcsJywgJ2cnKQorPAlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisJKHBhcnRzIG9mICdjZHBhdGgnIGNhbiBiZSBwYXNzZWQgdG8gdGhlIHNoZWxsIHRvIGV4cGFuZCBmaWxlIG5hbWVzKS4KKworCQkJCQkJKidjZWRpdCcqCisnY2VkaXQnCQkJc3RyaW5nCShWaSBkZWZhdWx0OiAiIiwgVmltIGRlZmF1bHQ6IENUUkwtRikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt2ZXJ0c3BsaXR8CisJCQlmZWF0dXJlfQorCVRoZSBrZXkgdXNlZCBpbiBDb21tYW5kLWxpbmUgTW9kZSB0byBvcGVuIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LgorCVRoZSBkZWZhdWx0IGlzIENUUkwtRiB3aGVuICdjb21wYXRpYmxlJyBpcyBvZmYuCisJT25seSBub24tcHJpbnRhYmxlIGtleXMgYXJlIGFsbG93ZWQuCisJVGhlIGtleSBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgc2luZ2xlIGNoYXJhY3RlciwgYnV0IGl0IGlzIGRpZmZpY3VsdCB0bworCXR5cGUuICBUaGUgcHJlZmVycmVkIHdheSBpcyB0byB1c2UgdGhlIDw+IG5vdGF0aW9uLiAgRXhhbXBsZXM6ID4KKwkJOnNldCBjZWRpdD08Qy1ZPgorCQk6c2V0IGNlZGl0PTxFc2M+Cis8CXxOdml8IGFsc28gaGFzIHRoaXMgb3B0aW9uLCBidXQgaXQgb25seSB1c2VzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCisJU2VlIHxjbWR3aW58LgorCisJCQkJKidjaGFyY29udmVydCcqIConY2N2JyogKkUyMDIqICpFMjE0KiAqRTUxMyoKKydjaGFyY29udmVydCcgJ2NjdicJc3RyaW5nIChkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlIGFuZCB0aGUgfCtldmFsfCBmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlBbiBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3IgY2hhcmFjdGVyIGVuY29kaW5nIGNvbnZlcnNpb24uICBJdCBpcworCWV2YWx1YXRlZCB3aGVuIGEgZmlsZSB0aGF0IGlzIHRvIGJlIHJlYWQgb3IgaGFzIGJlZW4gd3JpdHRlbiBoYXMgYQorCWRpZmZlcmVudCBlbmNvZGluZyBmcm9tIHdoYXQgaXMgZGVzaXJlZC4KKwknY2hhcmNvbnZlcnQnIGlzIG5vdCB1c2VkIHdoZW4gdGhlIGludGVybmFsIGljb252KCkgZnVuY3Rpb24gaXMKKwlzdXBwb3J0ZWQgYW5kIGlzIGFibGUgdG8gZG8gdGhlIGNvbnZlcnNpb24uICBVc2luZyBpY29udigpIGlzCisJcHJlZmVycmVkLCBiZWNhdXNlIGl0IGlzIG11Y2ggZmFzdGVyLgorCSdjaGFyY29udmVydCcgaXMgbm90IHVzZWQgd2hlbiByZWFkaW5nIHN0ZGluIHwtLXwsIGJlY2F1c2UgdGhlcmUgaXMgbm8KKwlmaWxlIHRvIGNvbnZlcnQgZnJvbS4gIFlvdSB3aWxsIGhhdmUgdG8gc2F2ZSB0aGUgdGV4dCBpbiBhIGZpbGUgZmlyc3QuCisJVGhlIGV4cHJlc3Npb24gbXVzdCByZXR1cm4gemVybyBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIHN1Y2Nlc3MsCisJbm9uLXplcm8gZm9yIGZhaWx1cmUuCisJVGhlIHBvc3NpYmxlIGVuY29kaW5nIG5hbWVzIGVuY291bnRlcmVkIGFyZSBpbiAnZW5jb2RpbmcnLgorCUFkZGl0aW9uYWxseSwgbmFtZXMgZ2l2ZW4gaW4gJ2ZpbGVlbmNvZGluZ3MnIGFuZCAnZmlsZWVuY29kaW5nJyBhcmUKKwl1c2VkLgorCUNvbnZlcnNpb24gYmV0d2VlbiAibGF0aW4xIiwgInVuaWNvZGUiLCAidWNzLTIiLCAidWNzLTQiIGFuZCAidXRmLTgiCisJaXMgZG9uZSBpbnRlcm5hbGx5IGJ5IFZpbSwgJ2NoYXJjb252ZXJ0JyBpcyBub3QgdXNlZCBmb3IgdGhpcy4KKwknY2hhcmNvbnZlcnQnIGlzIGFsc28gdXNlZCB0byBjb252ZXJ0IHRoZSB2aW1pbmZvIGZpbGUsIGlmIHRoZSAnYycKKwlmbGFnIGlzIHByZXNlbnQgaW4gJ3ZpbWluZm8nLiAgQWxzbyB1c2VkIGZvciBVbmljb2RlIGNvbnZlcnNpb24uCisJRXhhbXBsZTogPgorCQlzZXQgY2hhcmNvbnZlcnQ9Q2hhckNvbnZlcnQoKQorCQlmdW4gQ2hhckNvbnZlcnQoKQorCQkgIHN5c3RlbSgicmVjb2RlICIKKwkJCVwgLiB2OmNoYXJjb252ZXJ0X2Zyb20gLiAiLi4iIC4gdjpjaGFyY29udmVydF90bworCQkJXCAuICIgPCIgLiB2OmZuYW1lX2luIC4gIiA+IiB2OmZuYW1lX291dCkKKwkJICByZXR1cm4gdjpzaGVsbF9lcnJvcgorCQllbmRmdW4KKzwJVGhlIHJlbGF0ZWQgVmltIHZhcmlhYmxlcyBhcmU6CisJCXY6Y2hhcmNvbnZlcnRfZnJvbQluYW1lIG9mIHRoZSBjdXJyZW50IGVuY29kaW5nCisJCXY6Y2hhcmNvbnZlcnRfdG8JbmFtZSBvZiB0aGUgZGVzaXJlZCBlbmNvZGluZworCQl2OmZuYW1lX2luCQluYW1lIG9mIHRoZSBpbnB1dCBmaWxlCisJCXY6Zm5hbWVfb3V0CQluYW1lIG9mIHRoZSBvdXRwdXQgZmlsZQorCU5vdGUgdGhhdCB2OmZuYW1lX2luIGFuZCB2OmZuYW1lX291dCB3aWxsIG5ldmVyIGJlIHRoZSBzYW1lLgorCU5vdGUgdGhhdCB2OmNoYXJjb252ZXJ0X2Zyb20gYW5kIHY6Y2hhcmNvbnZlcnRfdG8gbWF5IGJlIGRpZmZlcmVudAorCWZyb20gJ2VuY29kaW5nJy4gIFZpbSBpbnRlcm5hbGx5IHVzZXMgVVRGLTggaW5zdGVhZCBvZiBVQ1MtMiBvciBVQ1MtNC4KKwlFbmNyeXB0aW9uIGlzIG5vdCBkb25lIGJ5IFZpbSB3aGVuIHVzaW5nICdjaGFyY29udmVydCcuICBJZiB5b3Ugd2FudAorCXRvIGVuY3J5cHQgdGhlIGZpbGUgYWZ0ZXIgY29udmVyc2lvbiwgJ2NoYXJjb252ZXJ0JyBzaG91bGQgdGFrZSBjYXJlCisJb2YgdGhpcy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkgICAqJ2NpbmRlbnQnKiAqJ2NpbicqIConbm9jaW5kZW50JyogKidub2NpbicqCisnY2luZGVudCcgJ2NpbicJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NpbmRlbnR8CisJCQlmZWF0dXJlfQorCUVuYWJsZXMgYXV0b21hdGljIEMgcHJvZ3JhbSBpbmRlbnRpbmcgIFNlZSAnY2lua2V5cycgdG8gc2V0IHRoZSBrZXlzCisJdGhhdCB0cmlnZ2VyIHJlaW5kZW50aW5nIGluIGluc2VydCBtb2RlIGFuZCAnY2lub3B0aW9ucycgdG8gc2V0IHlvdXIKKwlwcmVmZXJyZWQgaW5kZW50IHN0eWxlLgorCUlmICdpbmRlbnRleHByJyBpcyBub3QgZW1wdHksIGl0IG92ZXJydWxlcyAnY2luZGVudCcuCisJSWYgJ2xpc3AnIGlzIG5vdCBvbiBhbmQgYm90aCAnaW5kZW50ZXhwcicgYW5kICdlcXVhbHByZycgYXJlIGVtcHR5LAorCXRoZSAiPSIgb3BlcmF0b3IgaW5kZW50cyB1c2luZyB0aGlzIGFsZ29yaXRobSByYXRoZXIgdGhhbiBjYWxsaW5nIGFuCisJZXh0ZXJuYWwgcHJvZ3JhbS4KKwlTZWUgfEMtaW5kZW50aW5nfC4KKwlXaGVuIHlvdSBkb24ndCBsaWtlIHRoZSB3YXkgJ2NpbmRlbnQnIHdvcmtzLCB0cnkgdGhlICdzbWFydGluZGVudCcKKwlvcHRpb24gb3IgJ2luZGVudGV4cHInLgorCVRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkIHdoZW4gJ3Bhc3RlJyBpcyBzZXQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkJKidjaW5rZXlzJyogKidjaW5rJyoKKydjaW5rZXlzJyAnY2luaycJc3RyaW5nCShkZWZhdWx0ICIweywwfSwwKSw6LDAjLCFeRixvLE8sZSIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY2luZGVudHwKKwkJCWZlYXR1cmV9CisJQSBsaXN0IG9mIGtleXMgdGhhdCwgd2hlbiB0eXBlZCBpbiBJbnNlcnQgbW9kZSwgY2F1c2UgcmVpbmRlbnRpbmcgb2YKKwl0aGUgY3VycmVudCBsaW5lLiAgT25seSB1c2VkIGlmICdjaW5kZW50JyBpcyBvbiBhbmQgJ2luZGVudGV4cHInIGlzCisJZW1wdHkuCisJRm9yIHRoZSBmb3JtYXQgb2YgdGhpcyBvcHRpb24gc2VlIHxjaW5rZXlzLWZvcm1hdHwuCisJU2VlIHxDLWluZGVudGluZ3wuCisKKwkJCQkJCSonY2lub3B0aW9ucycqIConY2lubycqCisnY2lub3B0aW9ucycgJ2Npbm8nCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjaW5kZW50fAorCQkJZmVhdHVyZX0KKwlUaGUgJ2Npbm9wdGlvbnMnIGFmZmVjdCB0aGUgd2F5ICdjaW5kZW50JyByZWluZGVudHMgbGluZXMgaW4gYSBDCisJcHJvZ3JhbS4gIFNlZSB8Y2lub3B0aW9ucy12YWx1ZXN8IGZvciB0aGUgdmFsdWVzIG9mIHRoaXMgb3B0aW9uLCBhbmQKKwl8Qy1pbmRlbnRpbmd8IGZvciBpbmZvIG9uIEMgaW5kZW50aW5nIGluIGdlbmVyYWwuCisKKworCQkJCQkJKidjaW53b3JkcycqIConY2ludycqCisnY2lud29yZHMnICdjaW53JwlzdHJpbmcJKGRlZmF1bHQgImlmLGVsc2Usd2hpbGUsZG8sZm9yLHN3aXRjaCIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgYm90aCB0aGUKKwkJCXwrY2luZGVudHwgYW5kIHRoZSB8K3NtYXJ0aW5kZW50fCBmZWF0dXJlc30KKwlUaGVzZSBrZXl3b3JkcyBzdGFydCBhbiBleHRyYSBpbmRlbnQgaW4gdGhlIG5leHQgbGluZSB3aGVuCisJJ3NtYXJ0aW5kZW50JyBvciAnY2luZGVudCcgaXMgc2V0LiAgRm9yICdjaW5kZW50JyB0aGlzIGlzIG9ubHkgZG9uZSBhdAorCWFuIGFwcHJvcHJpYXRlIHBsYWNlIChpbnNpZGUge30pLgorCU5vdGUgdGhhdCAnaWdub3JlY2FzZScgaXNuJ3QgdXNlZCBmb3IgJ2NpbndvcmRzJy4gIElmIGNhc2UgZG9lc24ndAorCW1hdHRlciwgaW5jbHVkZSB0aGUga2V5d29yZCBib3RoIHRoZSB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZToKKwkiaWYsSWYsSUYiLgorCisJCQkJCQkqJ2NsaXBib2FyZCcqIConY2InKgorJ2NsaXBib2FyZCcgJ2NiJwlzdHJpbmcJKGRlZmF1bHQgImF1dG9zZWxlY3QsZXhjbHVkZTpjb25zXHxsaW51eCIKKwkJCQkJCSAgZm9yIFgtd2luZG93cywgIiIgb3RoZXJ3aXNlKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgaW4gR1VJIHZlcnNpb25zIG9yIHdoZW4gdGhlIHwreHRlcm1fY2xpcGJvYXJkfAorCQkJZmVhdHVyZSBpcyBpbmNsdWRlZH0KKwlUaGlzIG9wdGlvbiBpcyBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIG5hbWVzLgorCVRoZXNlIG5hbWVzIGFyZSByZWNvZ25pemVkOgorCisJdW5uYW1lZAkJV2hlbiBpbmNsdWRlZCwgVmltIHdpbGwgdXNlIHRoZSBjbGlwYm9hcmQgcmVnaXN0ZXIgJyonCisJCQlmb3IgYWxsIHlhbmssIGRlbGV0ZSwgY2hhbmdlIGFuZCBwdXQgb3BlcmF0aW9ucyB3aGljaAorCQkJd291bGQgbm9ybWFsbHkgZ28gdG8gdGhlIHVubmFtZWQgcmVnaXN0ZXIuICBXaGVuIGEKKwkJCXJlZ2lzdGVyIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBpdCB3aWxsIGFsd2F5cyBiZQorCQkJdXNlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgInVubmFtZWQiIGlzIGluICdjbGlwYm9hcmQnCisJCQlvciBub3QuICBUaGUgY2xpcGJvYXJkIHJlZ2lzdGVyIGNhbiBhbHdheXMgYmUKKwkJCWV4cGxpY2l0bHkgYWNjZXNzZWQgdXNpbmcgdGhlICIqIG5vdGF0aW9uLiAgQWxzbyBzZWUKKwkJCXxndWktY2xpcGJvYXJkfC4KKworCWF1dG9zZWxlY3QJV29ya3MgbGlrZSB0aGUgJ2EnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnOiBJZiBwcmVzZW50LAorCQkJdGhlbiB3aGVuZXZlciBWaXN1YWwgbW9kZSBpcyBzdGFydGVkLCBvciB0aGUgVmlzdWFsCisJCQlhcmVhIGV4dGVuZGVkLCBWaW0gdHJpZXMgdG8gYmVjb21lIHRoZSBvd25lciBvZiB0aGUKKwkJCXdpbmRvd2luZyBzeXN0ZW0ncyBnbG9iYWwgc2VsZWN0aW9uIG9yIHB1dCB0aGUKKwkJCXNlbGVjdGVkIHRleHQgb24gdGhlIGNsaXBib2FyZCB1c2VkIGJ5IHRoZSBzZWxlY3Rpb24KKwkJCXJlZ2lzdGVyICIqLiAgU2VlIHxndWlvcHRpb25zX2F8IGFuZCB8cXVvdGVzdGFyfCBmb3IKKwkJCWRldGFpbHMuICBXaGVuIHRoZSBHVUkgaXMgYWN0aXZlLCB0aGUgJ2EnIGZsYWcgaW4KKwkJCSdndWlvcHRpb25zJyBpcyB1c2VkLCB3aGVuIHRoZSBHVUkgaXMgbm90IGFjdGl2ZSwgdGhpcworCQkJImF1dG9zZWxlY3QiIGZsYWcgaXMgdXNlZC4KKwkJCUFsc28gYXBwbGllcyB0byB0aGUgbW9kZWxlc3Mgc2VsZWN0aW9uLgorCisJYXV0b3NlbGVjdG1sCUxpa2UgImF1dG9zZWxlY3QiLCBidXQgZm9yIHRoZSBtb2RlbGVzcyBzZWxlY3Rpb24KKwkJCW9ubHkuICBDb21wYXJlIHRvIHRoZSAnQScgZmxhZyBpbiAnZ3Vpb3B0aW9ucycuCisKKwlleGNsdWRlOntwYXR0ZXJufQorCQkJRGVmaW5lcyBhIHBhdHRlcm4gdGhhdCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIG5hbWUgb2YKKwkJCXRoZSB0ZXJtaW5hbCAndGVybScuICBJZiB0aGVyZSBpcyBhIG1hdGNoLCBubworCQkJY29ubmVjdGlvbiB3aWxsIGJlIG1hZGUgdG8gdGhlIFggc2VydmVyLiAgVGhpcyBpcworCQkJdXNlZnVsIGluIHRoaXMgc2l0dWF0aW9uOgorCQkJLSBSdW5uaW5nIFZpbSBpbiBhIGNvbnNvbGUuCisJCQktICRESVNQTEFZIGlzIHNldCB0byBzdGFydCBhcHBsaWNhdGlvbnMgb24gYW5vdGhlcgorCQkJICBkaXNwbGF5LgorCQkJLSBZb3UgZG8gbm90IHdhbnQgdG8gY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIgaW4gdGhlCisJCQkgIGNvbnNvbGUsIGJ1dCBkbyB3YW50IHRoaXMgaW4gYSB0ZXJtaW5hbCBlbXVsYXRvci4KKwkJCVRvIG5ldmVyIGNvbm5lY3QgdG8gdGhlIFggc2VydmVyIHVzZTogPgorCQkJCWV4Y2x1ZGU6LioKKzwJCQlUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdXNpbmcgdGhlIHwtWHwgYXJndW1lbnQuCisJCQlOb3RlIHRoYXQgd2hlbiB0aGVyZSBpcyBubyBjb25uZWN0aW9uIHRvIHRoZSBYIHNlcnZlcgorCQkJdGhlIHdpbmRvdyB0aXRsZSB3b24ndCBiZSByZXN0b3JlZCBhbmQgdGhlIGNsaXBib2FyZAorCQkJY2Fubm90IGJlIGFjY2Vzc2VkLgorCQkJVGhlIHZhbHVlIG9mICdtYWdpYycgaXMgaWdub3JlZCwge3BhdHRlcm59IGlzCisJCQlpbnRlcnByZXRlZCBhcyBpZiAnbWFnaWMnIHdhcyBvbi4KKwkJCVRoZSByZXN0IG9mIHRoZSBvcHRpb24gdmFsdWUgd2lsbCBiZSB1c2VkIGZvcgorCQkJe3BhdHRlcm59LCB0aGlzIG11c3QgYmUgdGhlIGxhc3QgZW50cnkuCisKKwkJCQkJCSonY21kaGVpZ2h0JyogKidjaCcqCisnY21kaGVpZ2h0JyAnY2gnCW51bWJlcgkoZGVmYXVsdCAxKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU51bWJlciBvZiBzY3JlZW4gbGluZXMgdG8gdXNlIGZvciB0aGUgY29tbWFuZC1saW5lLiAgSGVscHMgYXZvaWRpbmcKKwl8aGl0LWVudGVyfCBwcm9tcHRzLgorCisJCQkJCQkqJ2NtZHdpbmhlaWdodCcqIConY3doJyoKKydjbWR3aW5oZWlnaHQnICdjd2gnCW51bWJlcgkoZGVmYXVsdCA3KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3ZlcnRzcGxpdHwKKwkJCWZlYXR1cmV9CisJTnVtYmVyIG9mIHNjcmVlbiBsaW5lcyB0byB1c2UgZm9yIHRoZSBjb21tYW5kLWxpbmUgd2luZG93LiB8Y21kd2lufAorCisJCQkJCQkqJ2NvbHVtbnMnKiAqJ2NvJyogKkU1OTQqCisnY29sdW1ucycgJ2NvJwkJbnVtYmVyCShkZWZhdWx0IDgwIG9yIHRlcm1pbmFsIHdpZHRoKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBzY3JlZW4uICBOb3JtYWxseSB0aGlzIGlzIHNldCBieSB0aGUgdGVybWluYWwKKwlpbml0aWFsaXphdGlvbiBhbmQgZG9lcyBub3QgaGF2ZSB0byBiZSBzZXQgYnkgaGFuZC4KKwlXaGVuIFZpbSBpcyBydW5uaW5nIGluIHRoZSBHVUkgb3IgaW4gYSByZXNpemFibGUgd2luZG93LCBzZXR0aW5nIHRoaXMKKwlvcHRpb24gd2lsbCBjYXVzZSB0aGUgd2luZG93IHNpemUgdG8gYmUgY2hhbmdlZC4gIFdoZW4geW91IG9ubHkgd2FudAorCXRvIHVzZSB0aGUgc2l6ZSBmb3IgdGhlIEdVSSwgcHV0IHRoZSBjb21tYW5kIGluIHlvdXIgfGd2aW1yY3wgZmlsZS4KKwlXaGVuIHlvdSBzZXQgdGhpcyBvcHRpb24gYW5kIFZpbSBpcyB1bmFibGUgdG8gY2hhbmdlIHRoZSBwaHlzaWNhbAorCW51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBkaXNwbGF5LCB0aGUgZGlzcGxheSBtYXkgYmUgbWVzc2VkIHVwLgorCisJCQkJCSonY29tbWVudHMnKiAqJ2NvbScqICpFNTI0KiAqRTUyNSoKKydjb21tZW50cycgJ2NvbScJc3RyaW5nCShkZWZhdWx0CisJCQkJInMxOi8qLG1iOiosZXg6Ki8sOi8vLGI6Iyw6JSw6WENPTU0sbjo+LGZiOi0iKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NvbW1lbnRzfAorCQkJZmVhdHVyZX0KKwlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MgdGhhdCBjYW4gc3RhcnQgYSBjb21tZW50IGxpbmUuICBTZWUKKwl8Zm9ybWF0LWNvbW1lbnRzfC4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgdXNpbmcgYmFja3NsYXNoZXMgdG8KKwlpbnNlcnQgYSBzcGFjZS4KKworCQkJCQkqJ2NvbW1lbnRzdHJpbmcnKiAqJ2NtcycqICpFNTM3KgorJ2NvbW1lbnRzdHJpbmcnICdjbXMnCXN0cmluZwkoZGVmYXVsdCAiLyolcyovIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlBIHRlbXBsYXRlIGZvciBhIGNvbW1lbnQuICBUaGUgIiVzIiBpbiB0aGUgdmFsdWUgaXMgcmVwbGFjZWQgd2l0aCB0aGUKKwljb21tZW50IHRleHQuICBDdXJyZW50bHkgb25seSB1c2VkIHRvIGFkZCBtYXJrZXJzIGZvciBmb2xkaW5nLCBzZWUKKwl8Zm9sZC1tYXJrZXJ8LgorCisJCQkqJ2NvbXBhdGlibGUnKiAqJ2NwJyogKidub2NvbXBhdGlibGUnKiAqJ25vY3AnKgorJ2NvbXBhdGlibGUnICdjcCcJYm9vbGVhbgkoZGVmYXVsdCBvbiwgb2ZmIHdoZW4gYSAudmltcmMgZmlsZSBpcyBmb3VuZCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBoYXMgdGhlIGVmZmVjdCBvZiBtYWtpbmcgVmltIGVpdGhlciBtb3JlIFZpLWNvbXBhdGlibGUsIG9yCisJbWFrZSBWaW0gYmVoYXZlIGluIGEgbW9yZSB1c2VmdWwgd2F5LgorCVRoaXMgaXMgYSBzcGVjaWFsIGtpbmQgb2Ygb3B0aW9uLCBiZWNhdXNlIHdoZW4gaXQncyBzZXQgb3IgcmVzZXQsCisJb3RoZXIgb3B0aW9ucyBhcmUgYWxzbyBjaGFuZ2VkIGFzIGEgc2lkZSBlZmZlY3QuICBDQVJFRlVMOiBTZXR0aW5nIG9yCisJcmVzZXR0aW5nIHRoaXMgb3B0aW9uIGNhbiBoYXZlIGEgbG90IG9mIHVuZXhwZWN0ZWQgZWZmZWN0czogTWFwcGluZ3MKKwlhcmUgaW50ZXJwcmV0ZWQgaW4gYW5vdGhlciB3YXksIHVuZG8gYmVoYXZlcyBkaWZmZXJlbnRseSwgZXRjLglJZiB5b3UKKwlzZXQgdGhpcyBvcHRpb24gaW4geW91ciB2aW1yYyBmaWxlLCB5b3Ugc2hvdWxkIHByb2JhYmx5IHB1dCBpdCBhdCB0aGUKKwl2ZXJ5IHN0YXJ0LgorCUJ5IGRlZmF1bHQgdGhpcyBvcHRpb24gaXMgb24gYW5kIHRoZSBWaSBkZWZhdWx0cyBhcmUgdXNlZCBmb3IgdGhlCisJb3B0aW9ucy4gIFRoaXMgZGVmYXVsdCB3YXMgY2hvc2VuIGZvciB0aG9zZSBwZW9wbGUgd2hvIHdhbnQgdG8gdXNlIFZpbQorCWp1c3QgbGlrZSBWaSwgYW5kIGRvbid0IGV2ZW4gKHdhbnQgdG8pIGtub3cgYWJvdXQgdGhlICdjb21wYXRpYmxlJworCW9wdGlvbi4KKwlXaGVuIGEgIi52aW1yYyIgZmlsZSBpcyBmb3VuZCB3aGlsZSBWaW0gaXMgc3RhcnRpbmcgdXAsIHRoaXMgb3B0aW9uIGlzCisJc3dpdGNoZWQgb2ZmLCBhbmQgYWxsIG9wdGlvbnMgdGhhdCBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkIHdpbGwgYmUgc2V0CisJdG8gdGhlIFZpbSBkZWZhdWx0cy4gIEVmZmVjdGl2ZWx5LCB0aGlzIG1lYW5zIHRoYXQgd2hlbiBhICIudmltcmMiCisJZmlsZSBleGlzdHMsIFZpbSB3aWxsIHVzZSB0aGUgVmltIGRlZmF1bHRzLCBvdGhlcndpc2UgaXQgd2lsbCB1c2UgdGhlCisJVmkgZGVmYXVsdHMuICAoTm90ZTogVGhpcyBkb2Vzbid0IGhhcHBlbiBmb3IgdGhlIHN5c3RlbS13aWRlIHZpbXJjCisJZmlsZSkuCUFsc28gc2VlIHxjb21wYXRpYmxlLWRlZmF1bHR8LgorCVlvdSBjYW4gYWxzbyBzZXQgdGhpcyBvcHRpb24gd2l0aCB0aGUgIi1DIiBhcmd1bWVudCwgYW5kIHJlc2V0IGl0IHdpdGgKKwkiLU4iLiAgU2VlIHwtQ3wgYW5kIHwtTnwuCisJU3dpdGNoaW5nIHRoaXMgb3B0aW9uIG9mZiBtYWtlcyB0aGUgVmltIGRlZmF1bHRzIGJlIHVzZWQgZm9yIG9wdGlvbnMKKwl0aGF0IGhhdmUgYSBkaWZmZXJlbnQgVmkgYW5kIFZpbSBkZWZhdWx0IHZhbHVlLiAgU2VlIHRoZSBvcHRpb25zCisJbWFya2VkIHdpdGggYSAnKycgYmVsb3cuICBPdGhlciBvcHRpb25zIGFyZSBub3QgbW9kaWZpZWQuCisJQXQgdGhlIG1vbWVudCB0aGlzIG9wdGlvbiBpcyBzZXQsIHNldmVyYWwgb3RoZXIgb3B0aW9ucyB3aWxsIGJlIHNldAorCW9yIHJlc2V0IHRvIG1ha2UgVmltIGFzIFZpLWNvbXBhdGlibGUgYXMgcG9zc2libGUuICBTZWUgdGhlIHRhYmxlCisJYmVsb3cuCVRoaXMgY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gcmV2ZXJ0IHRvIFZpIGNvbXBhdGlibGUKKwllZGl0aW5nLgorCVNlZSBhbHNvICdjcG9wdGlvbnMnLgorCisJb3B0aW9uCQkrIHNldCB2YWx1ZQllZmZlY3QJfgorCisJJ2FsbG93cmV2aW5zJwkgIG9mZgkJbm8gQ1RSTC1fIGNvbW1hbmQKKwknYmFja3VwY29weScJICBVbml4OiAieWVzIgkgIGJhY2t1cCBmaWxlIGlzIGEgY29weQorCQkJICBvdGhlcnM6ICJhdXRvIiAgY29weSBvciByZW5hbWUgYmFja3VwIGZpbGUKKwknYmFja3NwYWNlJwkgICIiCQlub3JtYWwgYmFja3NwYWNlCisJJ2JhY2t1cCcJICBvZmYJCW5vIGJhY2t1cCBmaWxlCisJJ2NpbmRlbnQnCSAgb2ZmCQlubyBDIGNvZGUgaW5kZW50YXRpb24KKwknY2VkaXQnCQkrICIiCQlubyBrZXkgdG8gb3BlbiB0aGUgfGNtZHdpbnwKKwknY3BvcHRpb25zJwkrIChhbGwgZmxhZ3MpCVZpLWNvbXBhdGlibGUgZmxhZ3MKKwknY3Njb3BldGFnJwkgIG9mZgkJZG9uJ3QgdXNlIGNzY29wZSBmb3IgIjp0YWciCisJJ2NzY29wZXRhZ29yZGVyJyAgMAkJc2VlIHxjc2NvcGV0YWdvcmRlcnwKKwknY3Njb3BldmVyYm9zZScJICBvZmYJCXNlZSB8Y3Njb3BldmVyYm9zZXwKKwknZGlncmFwaCcJICBvZmYJCW5vIGRpZ3JhcGhzCisJJ2VzY2tleXMnCSsgb2ZmCQlubyA8RXNjPi1rZXlzIGluIEluc2VydCBtb2RlCisJJ2V4cGFuZHRhYicJICBvZmYJCXRhYnMgbm90IGV4cGFuZGVkIHRvIHNwYWNlcworCSdmaWxlZm9ybWF0cycJKyAiIgkJbm8gYXV0b21hdGljIGZpbGUgZm9ybWF0IGRldGVjdGlvbiwKKwkJCSAgImRvcyx1bml4IglleGNlcHQgZm9yIERPUywgV2luZG93cyBhbmQgT1MvMgorCSdmb3JtYXRvcHRpb25zJwkrICJ2dCIJCVZpIGNvbXBhdGlibGUgZm9ybWF0dGluZworCSdnZGVmYXVsdCcJICBvZmYJCW5vIGRlZmF1bHQgJ2cnIGZsYWcgZm9yICI6cyIKKwknaGlzdG9yeScJKyAwCQlubyBjb21tYW5kbGluZSBoaXN0b3J5CisJJ2hrbWFwJwkJICBvZmYJCW5vIEhlYnJldyBrZXlib2FyZCBtYXBwaW5nCisJJ2hrbWFwcCcJICBvZmYJCW5vIHBob25ldGljIEhlYnJldyBrZXlib2FyZCBtYXBwaW5nCisJJ2hsc2VhcmNoJwkgIG9mZgkJbm8gaGlnaGxpZ2h0aW5nIG9mIHNlYXJjaCBtYXRjaGVzCisJJ2luY3NlYXJjaCcJICBvZmYJCW5vIGluY3JlbWVudGFsIHNlYXJjaGluZworCSdpbmRlbnRleHByJwkgICIiCQlubyBpbmRlbnRpbmcgYnkgZXhwcmVzc2lvbgorCSdpbnNlcnRtb2RlJwkgIG9mZgkJZG8gbm90IHN0YXJ0IGluIEluc2VydCBtb2RlCisJJ2lza2V5d29yZCcJKyAiQCw0OC01NyxfIglrZXl3b3JkcyBjb250YWluIGFscGhhbnVtZXJpYworCQkJCQkJY2hhcmFjdGVycyBhbmQgJ18nCisJJ2pvaW5zcGFjZXMnCSAgb24JCWluc2VydCAyIHNwYWNlcyBhZnRlciBwZXJpb2QKKwknbW9kZWxpbmUnCSsgb2ZmCQlubyBtb2RlbGluZXMKKwknbW9yZScJCSsgb2ZmCQlubyBwYXVzZXMgaW4gbGlzdGluZ3MKKwkncmV2aW5zJwkgIG9mZgkJbm8gcmV2ZXJzZSBpbnNlcnQKKwkncnVsZXInCQkgIG9mZgkJbm8gcnVsZXIKKwknc2Nyb2xsanVtcCcJICAxCQlubyBqdW1wIHNjcm9sbAorCSdzY3JvbGxvZmYnCSAgMAkJbm8gc2Nyb2xsIG9mZnNldAorCSdzaGlmdHJvdW5kJwkgIG9mZgkJaW5kZW50IG5vdCByb3VuZGVkIHRvIHNoaWZ0d2lkdGgKKwknc2hvcnRtZXNzJwkrICIiCQlubyBzaG9ydGVuaW5nIG9mIG1lc3NhZ2VzCisJJ3Nob3djbWQnCSsgb2ZmCQljb21tYW5kIGNoYXJhY3RlcnMgbm90IHNob3duCisJJ3Nob3dtb2RlJwkrIG9mZgkJY3VycmVudCBtb2RlIG5vdCBzaG93bgorCSdzbWFydGNhc2UnCSAgb2ZmCQlubyBhdXRvbWF0aWMgaWdub3JlIGNhc2Ugc3dpdGNoCisJJ3NtYXJ0aW5kZW50JwkgIG9mZgkJbm8gc21hcnQgaW5kZW50YXRpb24KKwknc21hcnR0YWInCSAgb2ZmCQlubyBzbWFydCB0YWIgc2l6ZQorCSdzb2Z0dGFic3RvcCcJICAwCQl0YWJzIGFyZSBhbHdheXMgJ3RhYnN0b3AnIHBvc2l0aW9ucworCSdzdGFydG9mbGluZScJICBvbgkJZ290byBzdGFydG9mbGluZSB3aXRoIHNvbWUgY29tbWFuZHMKKwkndGFncmVsYXRpdmUnCSsgb2ZmCQl0YWcgZmlsZSBuYW1lcyBhcmUgbm90IHJlbGF0aXZlCisJJ3RleHRhdXRvJwkrIG9mZgkJbm8gYXV0b21hdGljIHRleHRtb2RlIGRldGVjdGlvbgorCSd0ZXh0d2lkdGgnCSAgMAkJbm8gYXV0b21hdGljIGxpbmUgd3JhcAorCSd0aWxkZW9wJwkgIG9mZgkJdGlsZGUgaXMgbm90IGFuIG9wZXJhdG9yCisJJ3R0aW1lb3V0JwkgIG9mZgkJbm8gdGVybWluYWwgdGltZW91dAorCSd3aGljaHdyYXAnCSsgIiIJCWxlZnQtcmlnaHQgbW92ZW1lbnRzIGRvbid0IHdyYXAKKwknd2lsZGNoYXInCSsgQ1RSTC1FCW9ubHkgd2hlbiB0aGUgY3VycmVudCB2YWx1ZSBpcyA8VGFiPgorCQkJCQl1c2UgQ1RSTC1FIGZvciBjbWRsaW5lIGNvbXBsZXRpb24KKwknd3JpdGViYWNrdXAnCSAgb24gb3Igb2ZmCWRlcGVuZHMgb24gK3dyaXRlYmFja3VwIGZlYXR1cmUKKworCQkJCQkJKidjb21wbGV0ZScqIConY3B0JyogKkU1MzUqCisnY29tcGxldGUnICdjcHQnCXN0cmluZwkoZGVmYXVsdDogIi4sdyxiLHUsdCxpIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBzcGVjaWZpZXMgaG93IGtleXdvcmQgY29tcGxldGlvbiB8aW5zLWNvbXBsZXRpb258IHdvcmtzCisJd2hlbiBDVFJMLVAgb3IgQ1RSTC1OIGFyZSB1c2VkLiAgSXQgaXMgYWxzbyB1c2VkIGZvciB3aG9sZS1saW5lCisJY29tcGxldGlvbiB8aV9DVFJMLVhfQ1RSTC1MfC4gIEl0IGluZGljYXRlcyB0aGUgdHlwZSBvZiBjb21wbGV0aW9uCisJYW5kIHRoZSBwbGFjZXMgdG8gc2Nhbi4gIEl0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZmxhZ3M6CisJLglzY2FuIHRoZSBjdXJyZW50IGJ1ZmZlciAoJ3dyYXBzY2FuJyBpcyBpZ25vcmVkKQorCXcJc2NhbiBidWZmZXJzIGZyb20gb3RoZXIgd2luZG93cworCWIJc2NhbiBvdGhlciBsb2FkZWQgYnVmZmVycyB0aGF0IGFyZSBpbiB0aGUgYnVmZmVyIGxpc3QKKwl1CXNjYW4gdGhlIHVubG9hZGVkIGJ1ZmZlcnMgdGhhdCBhcmUgaW4gdGhlIGJ1ZmZlciBsaXN0CisJVQlzY2FuIHRoZSBidWZmZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYnVmZmVyIGxpc3QKKwlrCXNjYW4gdGhlIGZpbGVzIGdpdmVuIHdpdGggdGhlICdkaWN0aW9uYXJ5JyBvcHRpb24KKwlre2RpY3R9CXNjYW4gdGhlIGZpbGUge2RpY3R9LiAgU2V2ZXJhbCAiayIgZmxhZ3MgY2FuIGJlIGdpdmVuLAorCQlwYXR0ZXJucyBhcmUgdmFsaWQgdG9vLiAgRm9yIGV4YW1wbGU6ID4KKwkJCTpzZXQgY3B0PWsvdXNyL2RpY3QvKixrfi9zcGFuaXNoCis8CXMJc2NhbiB0aGUgZmlsZXMgZ2l2ZW4gd2l0aCB0aGUgJ3RoZXNhdXJ1cycgb3B0aW9uCisJc3t0c3J9CXNjYW4gdGhlIGZpbGUge3Rzcn0uICBTZXZlcmFsICJzIiBmbGFncyBjYW4gYmUgZ2l2ZW4sIHBhdHRlcm5zCisJCWFyZSB2YWxpZCB0b28uCisJaQlzY2FuIGN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzCisJZAlzY2FuIGN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzIGZvciBkZWZpbmVkIG5hbWUgb3IgbWFjcm8KKwkJfGlfQ1RSTC1YX0NUUkwtRHwKKwldCXRhZyBjb21wbGV0aW9uCisJdAlzYW1lIGFzICJdIgorCisJVW5sb2FkZWQgYnVmZmVycyBhcmUgbm90IGxvYWRlZCwgdGh1cyB0aGVpciBhdXRvY21kcyB8OmF1dG9jbWR8IGFyZQorCW5vdCBleGVjdXRlZCwgdGhpcyBtYXkgbGVhZCB0byB1bmV4cGVjdGVkIGNvbXBsZXRpb25zIGZyb20gc29tZSBmaWxlcworCShnemlwcGVkIGZpbGVzIGZvciBleGFtcGxlKS4gIFVubG9hZGVkIGJ1ZmZlcnMgYXJlIG5vdCBzY2FubmVkIGZvcgorCXdob2xlLWxpbmUgY29tcGxldGlvbi4KKworCVRoZSBkZWZhdWx0IGlzICIuLHcsYix1LHQsaSIsIHdoaWNoIG1lYW5zIHRvIHNjYW46CisJICAgMS4gdGhlIGN1cnJlbnQgYnVmZmVyCisJICAgMi4gYnVmZmVycyBpbiBvdGhlciB3aW5kb3dzCisJICAgMy4gb3RoZXIgbG9hZGVkIGJ1ZmZlcnMKKwkgICA0LiB1bmxvYWRlZCBidWZmZXJzCisJICAgNS4gdGFncworCSAgIDYuIGluY2x1ZGVkIGZpbGVzCisKKwlBcyB5b3UgY2FuIHNlZSwgQ1RSTC1OIGFuZCBDVFJMLVAgY2FuIGJlIHVzZWQgdG8gZG8gYW55ICdpc2tleXdvcmQnLQorCWJhc2VkIGV4cGFuc2lvbiAoZWcgZGljdGlvbmFyeSB8aV9DVFJMLVhfQ1RSTC1LfCwgaW5jbHVkZWQgcGF0dGVybnMKKwl8aV9DVFJMLVhfQ1RSTC1JfCwgdGFncyB8aV9DVFJMLVhfQ1RSTC1dfCBhbmQgbm9ybWFsIGV4cGFuc2lvbnMpCisKKwkJCQkqJ2NvbmZpcm0nKiAqJ2NmJyogKidub2NvbmZpcm0nKiAqJ25vY2YnKgorJ2NvbmZpcm0nICdjZicJCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gJ2NvbmZpcm0nIGlzIG9uLCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCB3b3VsZCBub3JtYWxseQorCWZhaWwgYmVjYXVzZSBvZiB1bnNhdmVkIGNoYW5nZXMgdG8gYSBidWZmZXIsIGUuZy4gIjpxIiBhbmQgIjplIiwKKwlpbnN0ZWFkIHJhaXNlIGEgfGRpYWxvZ3wgYXNraW5nIGlmIHlvdSB3aXNoIHRvIHNhdmUgdGhlIGN1cnJlbnQKKwlmaWxlKHMpLiAgWW91IGNhbiBzdGlsbCB1c2UgYSAhIHRvIHVuY29uZGl0aW9uYWxseSB8YWJhbmRvbnwgYSBidWZmZXIuCisJSWYgJ2NvbmZpcm0nIGlzIG9mZiB5b3UgY2FuIHN0aWxsIGFjdGl2YXRlIGNvbmZpcm1hdGlvbiBmb3Igb25lCisJY29tbWFuZCBvbmx5ICh0aGlzIGlzIG1vc3QgdXNlZnVsIGluIG1hcHBpbmdzKSB3aXRoIHRoZSB8OmNvbmZpcm18CisJY29tbWFuZC4KKwlBbHNvIHNlZSB0aGUgfGNvbmZpcm0oKXwgZnVuY3Rpb24gYW5kIHRoZSAndicgZmxhZyBpbiAnZ3Vpb3B0aW9ucycuCisKKwkJCSonY29uc2tleScqIConY29uc2snKiAqJ25vY29uc2tleScqIConbm9jb25zaycqCisnY29uc2tleScgJ2NvbnNrJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0gIHtvbmx5IGZvciBNUy1ET1N9CisJV2hlbiBvbiBkaXJlY3QgY29uc29sZSBJL08gaXMgdXNlZCB0byBvYnRhaW4gYSBrZXlib2FyZCBjaGFyYWN0ZXIuCisJVGhpcyBzaG91bGQgd29yayBpbiBtb3N0IGNhc2VzLiAgQWxzbyBzZWUgfCdiaW9za2V5J3wuCVRvZ2V0aGVyLAorCXRocmVlIG1ldGhvZHMgb2YgY29uc29sZSBpbnB1dCBhcmUgYXZhaWxhYmxlOgorCSdjb25za2V5JyAgICdiaW9za2V5JwkgICAgYWN0aW9uIH4KKwkgICBvbgkgICAgIG9uIG9yIG9mZgkgICAgZGlyZWN0IGNvbnNvbGUgaW5wdXQKKwkgICBvZmYJCW9uCSAgICBCSU9TCisJICAgb2ZmCQlvZmYJICAgIFNURElOCisKKwkJCSonY29weWluZGVudCcqIConY2knKiAqJ25vY29weWluZGVudCcqIConbm9jaScqCisnY29weWluZGVudCcgJ2NpJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlDb3B5IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV4aXN0aW5nIGxpbmVzIGluZGVudCB3aGVuIGF1dG9pbmRlbnRpbmcgYQorCW5ldyBsaW5lLiAgTm9ybWFsbHkgdGhlIG5ldyBpbmRlbnQgaXMgcmVjb25zdHJ1Y3RlZCBieSBhIHNlcmllcyBvZgorCXRhYnMgZm9sbG93ZWQgYnkgc3BhY2VzIGFzIHJlcXVpcmVkICh1bmxlc3MgfCdleHBhbmR0YWInfCBpcyBlbmFibGVkLAorCWluIHdoaWNoIGNhc2Ugb25seSBzcGFjZXMgYXJlIHVzZWQpLiAgRW5hYmxpbmcgdGhpcyBvcHRpb24gbWFrZXMgdGhlCisJbmV3IGxpbmUgY29weSB3aGF0ZXZlciBjaGFyYWN0ZXJzIHdlcmUgdXNlZCBmb3IgaW5kZW50aW5nIG9uIHRoZQorCWV4aXN0aW5nIGxpbmUuICBJZiB0aGUgbmV3IGluZGVudCBpcyBncmVhdGVyIHRoYW4gb24gdGhlIGV4aXN0aW5nCisJbGluZSwgdGhlIHJlbWFpbmluZyBzcGFjZSBpcyBmaWxsZWQgaW4gdGhlIG5vcm1hbCBtYW5uZXIuCisJTk9URTogJ2NvcHlpbmRlbnQnIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKwlBbHNvIHNlZSAncHJlc2VydmVpbmRlbnQnLgorCisJCQkJCQkqJ2Nwb3B0aW9ucycqIConY3BvJyoKKydjcG9wdGlvbnMnICdjcG8nCXN0cmluZwkoVmltIGRlZmF1bHQ6ICJhQUJjZUZzIiwKKwkJCQkgVmkgZGVmYXVsdDogIGFsbCBmbGFncykKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlBIHNlcXVlbmNlIG9mIHNpbmdsZSBjaGFyYWN0ZXIgZmxhZ3MuICBXaGVuIGEgY2hhcmFjdGVyIGlzIHByZXNlbnQKKwl0aGlzIGluZGljYXRlcyB2aS1jb21wYXRpYmxlIGJlaGF2aW9yLglUaGlzIGlzIHVzZWQgZm9yIHRoaW5ncyB3aGVyZQorCW5vdCBiZWluZyB2aS1jb21wYXRpYmxlIGlzIG1vc3RseSBvciBzb21ldGltZXMgcHJlZmVycmVkLgorCSdjcG9wdGlvbnMnIHN0YW5kcyBmb3IgImNvbXBhdGlibGUtb3B0aW9ucyIuCisJQ29tbWFzIGNhbiBiZSBhZGRlZCBmb3IgcmVhZGFiaWxpdHkuCisJVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBmbGFncyB0aGF0IGFyZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCB1c2UgdGhlCisJIis9IiBhbmQgIi09IiBmZWF0dXJlIG9mICI6c2V0IiB8YWRkLW9wdGlvbi1mbGFnc3wuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkgICAgY29udGFpbnMJYmVoYXZpb3IJfgorCQkJCQkJCQkqY3BvLWEqCisJCWEJV2hlbiBpbmNsdWRlZCwgYSAiOnJlYWQiIGNvbW1hbmQgd2l0aCBhIGZpbGUgbmFtZQorCQkJYXJndW1lbnQgd2lsbCBzZXQgdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUgZm9yIHRoZQorCQkJY3VycmVudCB3aW5kb3cuCisJCQkJCQkJCSpjcG8tQSoKKwkJQQlXaGVuIGluY2x1ZGVkLCBhICI6d3JpdGUiIGNvbW1hbmQgd2l0aCBhIGZpbGUgbmFtZQorCQkJYXJndW1lbnQgd2lsbCBzZXQgdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUgZm9yIHRoZQorCQkJY3VycmVudCB3aW5kb3cuCisJCQkJCQkJCSpjcG8tYioKKwkJYgkiXHwiIGluIGEgIjptYXAiIGNvbW1hbmQgaXMgcmVjb2duaXplZCBhcyB0aGUgZW5kIG9mCisJCQl0aGUgbWFwIGNvbW1hbmQuICBUaGUgJ1wnIGlzIGluY2x1ZGVkIGluIHRoZSBtYXBwaW5nLAorCQkJdGhlIHRleHQgYWZ0ZXIgdGhlICd8JyBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmV4dAorCQkJY29tbWFuZC4gIFVzZSBhIENUUkwtViBpbnN0ZWFkIG9mIGEgYmFja3NsYXNoIHRvCisJCQlpbmNsdWRlIHRoZSAnfCcgaW4gdGhlIG1hcHBpbmcuICBBcHBsaWVzIHRvIGFsbAorCQkJbWFwcGluZywgYWJicmV2aWF0aW9uLCBtZW51IGFuZCBhdXRvY21kIGNvbW1hbmRzLgorCQkJU2VlIGFsc28gfG1hcF9iYXJ8LgorCQkJCQkJCQkqY3BvLUIqCisJCUIJQSBiYWNrc2xhc2ggaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBpbiBtYXBwaW5ncywKKwkJCWFiYnJldmlhdGlvbnMgYW5kIHRoZSAidG8iIHBhcnQgb2YgdGhlIG1lbnUgY29tbWFuZHMuCisJCQlSZW1vdmUgdGhpcyBmbGFnIHRvIGJlIGFibGUgdG8gdXNlIGEgYmFja3NsYXNoIGxpa2UgYQorCQkJQ1RSTC1WLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kICI6bWFwIFggXDxFc2M+IgorCQkJcmVzdWx0cyBpbiBYIGJlaW5nIG1hcHBlZCB0bzoKKwkJCQknQicgaW5jbHVkZWQ6CSJcXlsiCSAoXlsgaXMgYSByZWFsIDxFc2M+KQorCQkJCSdCJyBleGNsdWRlZDoJIjxFc2M+IiAgKDUgY2hhcmFjdGVycykKKwkJCQkoJzwnIGV4Y2x1ZGVkIGluIGJvdGggY2FzZXMpCisJCQkJCQkJCSpjcG8tYyoKKwkJYwlTZWFyY2hpbmcgY29udGludWVzIGF0IHRoZSBlbmQgb2YgYW55IG1hdGNoIGF0IHRoZQorCQkJY3Vyc29yIHBvc2l0aW9uLCBidXQgbm90IGZ1cnRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlCisJCQluZXh0IGxpbmUuICBXaGVuIG5vdCBwcmVzZW50IHNlYXJjaGluZyBjb250aW51ZXMKKwkJCW9uZSBjaGFyYWN0ZXIgZnJvbSB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgV2l0aCAnYycKKwkJCSJhYmFiYWJhYmFiYWIiIG9ubHkgZ2V0cyB0aHJlZSBtYXRjaGVzIHdoZW4gcmVwZWF0aW5nCisJCQkiL2FiYWIiLCB3aXRob3V0ICdjJyB0aGVyZSBhcmUgZml2ZSBtYXRjaGVzLgorCQkJCQkJCQkqY3BvLUMqCisJCUMJRG8gbm90IGNvbmNhdGVuYXRlIHNvdXJjZWQgbGluZXMgdGhhdCBzdGFydCB3aXRoIGEKKwkJCWJhY2tzbGFzaC4gIFNlZSB8bGluZS1jb250aW51YXRpb258LgorCQkJCQkJCQkqY3BvLWQqCisJCWQJVXNpbmcgIi4vIiBpbiB0aGUgJ3RhZ3MnIG9wdGlvbiBkb2Vzbid0IG1lYW4gdG8gdXNlCisJCQl0aGUgdGFncyBmaWxlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGZpbGUsIGJ1dCB0aGUKKwkJCXRhZ3MgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisJCQkJCQkJCSpjcG8tRCoKKwkJRAlDYW4ndCB1c2UgQ1RSTC1LIHRvIGVudGVyIGEgZGlncmFwaCBhZnRlciBOb3JtYWwgbW9kZQorCQkJY29tbWFuZHMgd2l0aCBhIGNoYXJhY3RlciBhcmd1bWVudCwgbGlrZSB8cnwsIHxmfCBhbmQKKwkJCXx0fC4KKwkJCQkJCQkJKmNwby1lKgorCQllCVdoZW4gZXhlY3V0aW5nIGEgcmVnaXN0ZXIgd2l0aCAiOkByIiwgYWx3YXlzIGFkZCBhCisJCQk8Q1I+IHRvIHRoZSBsYXN0IGxpbmUsIGFsc28gd2hlbiB0aGUgcmVnaXN0ZXIgaXMgbm90CisJCQlsaW5ld2lzZS4gIElmIHRoaXMgZmxhZyBpcyBub3QgcHJlc2VudCwgdGhlIHJlZ2lzdGVyCisJCQlpcyBub3QgbGluZXdpc2UgYW5kIHRoZSBsYXN0IGxpbmUgZG9lcyBub3QgZW5kIGluIGEKKwkJCTxDUj4sIHRoZW4gdGhlIGxhc3QgbGluZSBpcyBwdXQgb24gdGhlIGNvbW1hbmQtbGluZQorCQkJYW5kIGNhbiBiZSBlZGl0ZWQgYmVmb3JlIGhpdHRpbmcgPENSPi4KKwkJCQkJCQkJKmNwby1FKgorCQlFCUl0IGlzIGFuIGVycm9yIHdoZW4gdXNpbmcgInkiLCAiZCIsICJjIiwgImd+IiwgImd1IiBvcgorCQkJImdVIiBvbiBhbiBFbXB0eSByZWdpb24uICBUaGUgb3BlcmF0b3JzIG9ubHkgd29yayB3aGVuCisJCQlhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGlzIHRvIGJlIG9wZXJhdGUgb24uICBFeGFtcGxlOgorCQkJVGhpcyBtYWtlcyAieTAiIGZhaWwgaW4gdGhlIGZpcnN0IGNvbHVtbi4KKwkJCQkJCQkJKmNwby1mKgorCQlmCVdoZW4gaW5jbHVkZWQsIGEgIjpyZWFkIiBjb21tYW5kIHdpdGggYSBmaWxlIG5hbWUKKwkJCWFyZ3VtZW50IHdpbGwgc2V0IHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciwKKwkJCWlmIHRoZSBjdXJyZW50IGJ1ZmZlciBkb2Vzbid0IGhhdmUgYSBmaWxlIG5hbWUgeWV0LgorCQkJCQkJCQkqY3BvLUYqCisJCUYJV2hlbiBpbmNsdWRlZCwgYSAiOndyaXRlIiBjb21tYW5kIHdpdGggYSBmaWxlIG5hbWUKKwkJCWFyZ3VtZW50IHdpbGwgc2V0IHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBjdXJyZW50CisJCQlidWZmZXIsIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBkb2Vzbid0IGhhdmUgYSBmaWxlIG5hbWUKKwkJCXlldC4KKwkJCQkJCQkJKmNwby1nKgorCQlnCUdvdG8gbGluZSAxIHdoZW4gdXNpbmcgIjplZGl0IiB3aXRob3V0IGFyZ3VtZW50LgorCQkJCQkJCQkqY3BvLWkqCisJCWkJV2hlbiBpbmNsdWRlZCwgaW50ZXJydXB0aW5nIHRoZSByZWFkaW5nIG9mIGEgZmlsZSB3aWxsCisJCQlsZWF2ZSBpdCBtb2RpZmllZC4KKwkJCQkJCQkJKmNwby1qKgorCQlqCVdoZW4gam9pbmluZyBsaW5lcywgb25seSBhZGQgdHdvIHNwYWNlcyBhZnRlciBhICcuJywKKwkJCW5vdCBhZnRlciAnIScgb3IgJz8nLiAgQWxzbyBzZWUgJ2pvaW5zcGFjZXMnLgorCQkJCQkJCQkqY3BvLUoqCisJCUoJQSB8c2VudGVuY2V8IGhhcyB0byBiZSBmb2xsb3dlZCBieSB0d28gc3BhY2VzIGFmdGVyCisJCQl0aGUgJy4nLCAnIScgb3IgJz8nLiBBIDxUYWI+IGlzIG5vdCByZWNvZ25pemVkIGFzCisJCQl3aGl0ZSBzcGFjZS4KKwkJCQkJCQkJKmNwby1rKgorCQlrCURpc2FibGUgdGhlIHJlY29nbml0aW9uIG9mIHJhdyBrZXkgY29kZXMgaW4KKwkJCW1hcHBpbmdzLCBhYmJyZXZpYXRpb25zLCBhbmQgdGhlICJ0byIgcGFydCBvZiBtZW51CisJCQljb21tYW5kcy4gIEZvciBleGFtcGxlLCBpZiA8S2V5PiBzZW5kcyBeW09BICh3aGVyZSBeWworCQkJaXMgPEVzYz4pLCB0aGUgY29tbWFuZCAiOm1hcCBYIF5bT0EiIHJlc3VsdHMgaW4gWAorCQkJYmVpbmcgbWFwcGVkIHRvOgorCQkJCSdrJyBpbmNsdWRlZDoJIl5bT0EiCSAoMyBjaGFyYWN0ZXJzKQorCQkJCSdrJyBleGNsdWRlZDoJIjxLZXk+IiAgKG9uZSBrZXkgY29kZSkKKwkJCUFsc28gc2VlIHRoZSAnPCcgZmxhZyBiZWxvdy4KKwkJCQkJCQkJKmNwby1LKgorCQlLCURvbid0IHdhaXQgZm9yIGEga2V5IGNvZGUgdG8gY29tcGxldGUgd2hlbiBpdCBpcworCQkJaGFsZndheSBhIG1hcHBpbmcuICBUaGlzIGJyZWFrcyBtYXBwaW5nIDxGMT48RjE+IHdoZW4KKwkJCW9ubHkgcGFydCBvZiB0aGUgc2Vjb25kIDxGMT4gaGFzIGJlZW4gcmVhZC4gIEl0CisJCQllbmFibGVzIGNhbmNlbGxpbmcgdGhlIG1hcHBpbmcgYnkgdHlwaW5nIDxGMT48RXNjPi4KKwkJCQkJCQkJKmNwby1sKgorCQlsCUJhY2tzbGFzaCBpbiBhIFtdIHJhbmdlIGluIGEgc2VhcmNoIHBhdHRlcm4gaXMgdGFrZW4KKwkJCWxpdGVyYWxseSwgb25seSAiXF0iIGlzIHNwZWNpYWwgIFNlZSB8L1tdfAorCQkJICAgJ2wnIGluY2x1ZGVkOiAiL1sgXHRdIiAgZmluZHMgPFNwYWNlPiwgJ1wnIGFuZCAndCcKKwkJCSAgICdsJyBleGNsdWRlZDogIi9bIFx0XSIgIGZpbmRzIDxTcGFjZT4gYW5kIDxUYWI+CisJCQkJCQkJCSpjcG8tTCoKKwkJTAlXaGVuIHRoZSAnbGlzdCcgb3B0aW9uIGlzIHNldCwgJ3dyYXBtYXJnaW4nLAorCQkJJ3RleHR3aWR0aCcsICdzb2Z0dGFic3RvcCcgYW5kIFZpcnR1YWwgUmVwbGFjZSBtb2RlCisJCQkoc2VlIHxnUnwpIGNvdW50IGEgPFRhYj4gYXMgdHdvIGNoYXJhY3RlcnMsIGluc3RlYWQgb2YKKwkJCXRoZSBub3JtYWwgYmVoYXZpb3Igb2YgYSA8VGFiPi4KKwkJCQkJCQkJKmNwby1tKgorCQltCVdoZW4gaW5jbHVkZWQsIGEgc2hvd21hdGNoIHdpbGwgYWx3YXlzIHdhaXQgaGFsZiBhCisJCQlzZWNvbmQuICBXaGVuIG5vdCBpbmNsdWRlZCwgYSBzaG93bWF0Y2ggd2lsbCB3YWl0IGhhbGYKKwkJCWEgc2Vjb25kIG9yIHVudGlsIGEgY2hhcmFjdGVyIGlzIHR5cGVkLiAgfCdzaG93bWF0Y2gnfAorCQkJCQkJCQkqY3BvLU0qCisJCU0JV2hlbiBleGNsdWRlZCwgIiUiIG1hdGNoaW5nIHdpbGwgdGFrZSBiYWNrc2xhc2hlcyBpbnRvCisJCQlhY2NvdW50LiAgVGh1cyBpbiAiKCBcKCApIiBhbmQgIlwoICggXCkiIHRoZSBvdXRlcgorCQkJcGFyZW50aGVzaXMgbWF0Y2guICBXaGVuIGluY2x1ZGVkICIlIiBpZ25vcmVzCisJCQliYWNrc2xhc2hlcywgd2hpY2ggaXMgVmkgY29tcGF0aWJsZS4KKwkJCQkJCQkJKmNwby1uKgorCQluCVdoZW4gaW5jbHVkZWQsIHRoZSBjb2x1bW4gdXNlZCBmb3IgJ251bWJlcicgd2lsbCBhbHNvCisJCQliZSB1c2VkIGZvciB0ZXh0IG9mIHdyYXBwZWQgbGluZXMuCisJCQkJCQkJCSpjcG8tbyoKKwkJbwlMaW5lIG9mZnNldCB0byBzZWFyY2ggY29tbWFuZCBpcyBub3QgcmVtZW1iZXJlZCBmb3IKKwkJCW5leHQgc2VhcmNoLgorCQkJCQkJCQkqY3BvLU8qCisJCU8JRG9uJ3QgY29tcGxhaW4gaWYgYSBmaWxlIGlzIGJlaW5nIG92ZXJ3cml0dGVuLCBldmVuCisJCQl3aGVuIGl0IGRpZG4ndCBleGlzdCB3aGVuIGVkaXRpbmcgaXQuICBUaGlzIGlzIGEKKwkJCXByb3RlY3Rpb24gYWdhaW5zdCBhIGZpbGUgdW5leHBlY3RlZGx5IGNyZWF0ZWQgYnkKKwkJCXNvbWVvbmUgZWxzZS4gIFZpIGRpZG4ndCBjb21wbGFpbiBhYm91dCB0aGlzLgorCQkJCQkJCQkqY3BvLXAqCisJCXAJVmkgY29tcGF0aWJsZSBMaXNwIGluZGVudGluZy4gIFdoZW4gbm90IHByZXNlbnQsIGEKKwkJCXNsaWdodGx5IGJldHRlciBhbGdvcml0aG0gaXMgdXNlZC4KKwkJCQkJCQkJKmNwby1yKgorCQlyCVJlZG8gKCIuIiBjb21tYW5kKSB1c2VzICIvIiB0byByZXBlYXQgYSBzZWFyY2gKKwkJCWNvbW1hbmQsIGluc3RlYWQgb2YgdGhlIGFjdHVhbGx5IHVzZWQgc2VhcmNoIHN0cmluZy4KKwkJCQkJCQkJKmNwby1SKgorCQlSCVJlbW92ZSBtYXJrcyBmcm9tIGZpbHRlcmVkIGxpbmVzLiAgV2l0aG91dCB0aGlzIGZsYWcKKwkJCW1hcmtzIGFyZSBrZXB0IGxpa2UgfDprZWVwbWFya3N8IHdhcyB1c2VkLgorCQkJCQkJCQkqY3BvLXMqCisJCXMJU2V0IGJ1ZmZlciBvcHRpb25zIHdoZW4gZW50ZXJpbmcgdGhlIGJ1ZmZlciBmb3IgdGhlCisJCQlmaXJzdCB0aW1lLiAgVGhpcyBpcyBsaWtlIGl0IGlzIGluIFZpbSB2ZXJzaW9uIDMuMC4KKwkJCUFuZCBpdCBpcyB0aGUgZGVmYXVsdC4JSWYgbm90IHByZXNlbnQgdGhlIG9wdGlvbnMgYXJlCisJCQlzZXQgd2hlbiB0aGUgYnVmZmVyIGlzIGNyZWF0ZWQuCisJCQkJCQkJCSpjcG8tUyoKKwkJUwlTZXQgYnVmZmVyIG9wdGlvbnMgYWx3YXlzIHdoZW4gZW50ZXJpbmcgYSBidWZmZXIKKwkJCShleGNlcHQgJ3JlYWRvbmx5JywgJ2ZpbGVmb3JtYXQnLCAnZmlsZXR5cGUnIGFuZAorCQkJJ3N5bnRheCcpLiAgVGhpcyBpcyB0aGUgKG1vc3QpIFZpIGNvbXBhdGlibGUgc2V0dGluZy4KKwkJCVRoZSBvcHRpb25zIGFyZSBzZXQgdG8gdGhlIHZhbHVlcyBpbiB0aGUgY3VycmVudAorCQkJYnVmZmVyLiAgV2hlbiB5b3UgY2hhbmdlIGFuIG9wdGlvbiBhbmQgZ28gdG8gYW5vdGhlcgorCQkJYnVmZmVyLCB0aGUgdmFsdWUgaXMgY29waWVkLiAgRWZmZWN0aXZlbHkgbWFrZXMgdGhlCisJCQlidWZmZXIgb3B0aW9ucyBnbG9iYWwgdG8gYWxsIGJ1ZmZlcnMuCisKKwkJCSdzJyAgICAnUycgICAgIGNvcHkgYnVmZmVyIG9wdGlvbnMKKwkJCW5vICAgICBubyAgICAgIHdoZW4gYnVmZmVyIGNyZWF0ZWQKKwkJCXllcyAgICBubyAgICAgIHdoZW4gYnVmZmVyIGZpcnN0IGVudGVyZWQgKGRlZmF1bHQpCisJCQkgWCAgICAgeWVzICAgICBlYWNoIHRpbWUgd2hlbiBidWZmZXIgZW50ZXJlZCAodmkgY29tcC4pCisJCQkJCQkJCSpjcG8tdCoKKwkJdAlTZWFyY2ggcGF0dGVybiBmb3IgdGhlIHRhZyBjb21tYW5kIGlzIHJlbWVtYmVyZWQgZm9yCisJCQkibiIgY29tbWFuZC4gIE90aGVyd2lzZSBWaW0gb25seSBwdXRzIHRoZSBwYXR0ZXJuIGluCisJCQl0aGUgaGlzdG9yeSBmb3Igc2VhcmNoIHBhdHRlcm4sIGJ1dCBkb2Vzbid0IGNoYW5nZSB0aGUKKwkJCWxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybi4KKwkJCQkJCQkJKmNwby11KgorCQl1CVVuZG8gaXMgVmkgY29tcGF0aWJsZS4JU2VlIHx1bmRvLXR3by13YXlzfC4KKwkJCQkJCQkJKmNwby12KgorCQl2CUJhY2tzcGFjZWQgY2hhcmFjdGVycyByZW1haW4gdmlzaWJsZSBvbiB0aGUgc2NyZWVuIGluCisJCQlJbnNlcnQgbW9kZS4gIFdpdGhvdXQgdGhpcyBmbGFnIHRoZSBjaGFyYWN0ZXJzIGFyZQorCQkJZXJhc2VkIGZyb20gdGhlIHNjcmVlbiByaWdodCBhd2F5LiAgV2l0aCB0aGlzIGZsYWcgdGhlCisJCQlzY3JlZW4gbmV3bHkgdHlwZWQgdGV4dCBvdmVyd3JpdGVzIGJhY2tzcGFjZWQKKwkJCWNoYXJhY3RlcnMuCisJCQkJCQkJCSpjcG8tdyoKKwkJdwlXaGVuIHVzaW5nICJjdyIgb24gYSBibGFuayBjaGFyYWN0ZXIsIG9ubHkgY2hhbmdlIG9uZQorCQkJY2hhcmFjdGVyIGFuZCBub3QgYWxsIGJsYW5rcyB1bnRpbCB0aGUgc3RhcnQgb2YgdGhlCisJCQluZXh0IHdvcmQuCisJCQkJCQkJCSpjcG8tVyoKKwkJVwlEb24ndCBvdmVyd3JpdGUgYSByZWFkb25seSBmaWxlLiAgV2hlbiBvbWl0dGVkLCAiOnchIgorCQkJb3ZlcndyaXRlcyBhIHJlYWRvbmx5IGZpbGUsIGlmIHBvc3NpYmxlLgorCQkJCQkJCQkqY3BvLXgqCisJCXgJPEVzYz4gb24gdGhlIGNvbW1hbmQtbGluZSBleGVjdXRlcyB0aGUgY29tbWFuZC1saW5lLgorCQkJVGhlIGRlZmF1bHQgaW4gVmltIGlzIHRvIGFiYW5kb24gdGhlIGNvbW1hbmQtbGluZSwKKwkJCWJlY2F1c2UgPEVzYz4gbm9ybWFsbHkgYWJvcnRzIGEgY29tbWFuZC4gIHxjXzxFc2M+fAorCQkJCQkJCQkqY3BvLXkqCisJCXkJQSB5YW5rIGNvbW1hbmQgY2FuIGJlIHJlZG9uZSB3aXRoICIuIi4KKwkJCQkJCQkJKmNwby0hKgorCQkhCVdoZW4gcmVkb2luZyBhIGZpbHRlciBjb21tYW5kLCB1c2UgdGhlIGxhc3QgdXNlZAorCQkJZXh0ZXJuYWwgY29tbWFuZCwgd2hhdGV2ZXIgaXQgd2FzLiAgT3RoZXJ3aXNlIHRoZSBsYXN0CisJCQl1c2VkIC1maWx0ZXItIGNvbW1hbmQgaXMgdXNlZC4KKwkJCQkJCQkJKmNwby0kKgorCQkkCVdoZW4gbWFraW5nIGEgY2hhbmdlIHRvIG9uZSBsaW5lLCBkb24ndCByZWRpc3BsYXkgdGhlCisJCQlsaW5lLCBidXQgcHV0IGEgJyQnIGF0IHRoZSBlbmQgb2YgdGhlIGNoYW5nZWQgdGV4dC4KKwkJCVRoZSBjaGFuZ2VkIHRleHQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aGVuIHlvdSB0eXBlIHRoZQorCQkJbmV3IHRleHQuICBUaGUgbGluZSBpcyByZWRpc3BsYXllZCBpZiB5b3UgdHlwZSBhbnkKKwkJCWNvbW1hbmQgdGhhdCBtb3ZlcyB0aGUgY3Vyc29yIGZyb20gdGhlIGluc2VydGlvbgorCQkJcG9pbnQuCisJCQkJCQkJCSpjcG8tJSoKKwkJJQlWaS1jb21wYXRpYmxlIG1hdGNoaW5nIGlzIGRvbmUgZm9yIHRoZSAiJSIgY29tbWFuZC4KKwkJCURvZXMgbm90IHJlY29nbml6ZSAiI2lmIiwgIiNlbmRpZiIsIGV0Yy4KKwkJCURvZXMgbm90IHJlY29nbml6ZSAiLyoiIGFuZCAiKi8iLgorCQkJUGFyZW5zIGluc2lkZSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMgYXJlIGFsc28KKwkJCWNvdW50ZWQsIGNhdXNpbmcgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIHBhcmVuIHRvCisJCQlkaXN0dXJiIHRoZSBtYXRjaGluZy4gIEZvciBleGFtcGxlLCBpbiBhIGxpbmUgbGlrZQorCQkJImlmIChzdHJjbXAoImZvbygiLCBzKSkiIHRoZSBmaXJzdCBwYXJlbiBkb2VzIG5vdAorCQkJbWF0Y2ggdGhlIGxhc3Qgb25lLiAgV2hlbiB0aGlzIGZsYWcgaXMgbm90IGluY2x1ZGVkLAorCQkJcGFyZW5zIGluc2lkZSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMgYXJlIHRyZWF0ZWQKKwkJCXNwZWNpYWxseS4gIFdoZW4gbWF0Y2hpbmcgYSBwYXJlbiBvdXRzaWRlIG9mIHF1b3RlcywKKwkJCWV2ZXJ5dGhpbmcgaW5zaWRlIHF1b3RlcyBpcyBpZ25vcmVkLiAgV2hlbiBtYXRjaGluZyBhCisJCQlwYXJlbiBpbnNpZGUgcXVvdGVzLCBpdCB3aWxsIGZpbmQgdGhlIG1hdGNoaW5nIG9uZSAoaWYKKwkJCXRoZXJlIGlzIG9uZSkuCVRoaXMgd29ya3MgdmVyeSB3ZWxsIGZvciBDIHByb2dyYW1zLgorCQkJCQkJCQkqY3BvLXN0YXIqCisJCSoJVXNlICI6KiIgaW4gdGhlIHNhbWUgd2F5IGFzICI6QCIuICBXaGVuIG5vdCBpbmNsdWRlZCwKKwkJCSI6KiIgaXMgYW4gYWxpYXMgZm9yICI6JzwsJz4iLCBzZWxlY3QgdGhlIFZpc3VhbCBhcmVhLgorCQkJCQkJCQkqY3BvLTwqCisJCTwJRGlzYWJsZSB0aGUgcmVjb2duaXRpb24gb2Ygc3BlY2lhbCBrZXkgY29kZXMgaW4gfDw+fAorCQkJZm9ybSBpbiBtYXBwaW5ncywgYWJicmV2aWF0aW9ucywgYW5kIHRoZSAidG8iIHBhcnQgb2YKKwkJCW1lbnUgY29tbWFuZHMuCUZvciBleGFtcGxlLCB0aGUgY29tbWFuZAorCQkJIjptYXAgWCA8VGFiPiIgcmVzdWx0cyBpbiBYIGJlaW5nIG1hcHBlZCB0bzoKKwkJCQknPCcgaW5jbHVkZWQ6CSI8VGFiPiIgICg1IGNoYXJhY3RlcnMpCisJCQkJJzwnIGV4Y2x1ZGVkOgkiXkkiCSAoXkkgaXMgYSByZWFsIDxUYWI+KQorCQkJQWxzbyBzZWUgdGhlICdrJyBmbGFnIGFib3ZlLgorCisJCQkJCQkqJ2NzY29wZXBhdGhjb21wJyogKidjc3BjJyoKKydjc2NvcGVwYXRoY29tcCcgJ2NzcGMnCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY3Njb3BlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJRGV0ZXJtaW5lcyBob3cgbWFueSBjb21wb25lbnRzIG9mIHRoZSBwYXRoIHRvIHNob3cgaW4gYSBsaXN0IG9mIHRhZ3MuCisJU2VlIHxjc2NvcGVwYXRoY29tcHwuCisKKwkJCQkJCSonY3Njb3BlcHJnJyogKidjc3ByZycqCisnY3Njb3BlcHJnJyAnY3NwcmcnCXN0cmluZwkoZGVmYXVsdCAiY3Njb3BlIikKKwkJCWdsb2JhbAorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NzY29wZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCVNwZWNpZmllcyB0aGUgY29tbWFuZCB0byBleGVjdXRlIGNzY29wZS4gIFNlZSB8Y3Njb3BlcHJnfC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonY3Njb3BlcXVpY2tmaXgnKiAqJ2NzcWYnKgorJ2NzY29wZXF1aWNrZml4JyAnY3NxZicgc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY3Njb3BlfAorCQkJb3IgfCtxdWlja2ZpeHwgZmVhdHVyZXN9CisJCQl7bm90IGluIFZpfQorCVNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBxdWlja2ZpeCB3aW5kb3cgdG8gc2hvdyBjc2NvcGUgcmVzdWx0cy4KKwlTZWUgfGNzY29wZXF1aWNrZml4fC4KKworCQkJCSonY3Njb3BldGFnJyogKidjc3QnKiAqJ25vY3Njb3BldGFnJyogKidub2NzdCcqCisnY3Njb3BldGFnJyAnY3N0Jwlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NzY29wZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCVVzZSBjc2NvcGUgZm9yIHRhZyBjb21tYW5kcy4gIFNlZSB8Y3Njb3BlLW9wdGlvbnN8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidjc2NvcGV0YWdvcmRlcicqIConY3N0bycqCisnY3Njb3BldGFnb3JkZXInICdjc3RvJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NzY29wZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCURldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoICI6Y3N0YWciIHBlcmZvcm1zIGEgc2VhcmNoLiAgU2VlCisJfGNzY29wZXRhZ29yZGVyfC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gMCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJKidjc2NvcGV2ZXJib3NlJyogKidjc3ZlcmInKgorCQkJCQkqJ25vY3Njb3BldmVyYm9zZScqIConbm9jc3ZlcmInKgorJ2NzY29wZXZlcmJvc2UnICdjc3ZlcmInIGJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY3Njb3BlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJR2l2ZSBtZXNzYWdlcyB3aGVuIGFkZGluZyBhIGNzY29wZSBkYXRhYmFzZS4gIFNlZSB8Y3Njb3BldmVyYm9zZXwuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2RlYnVnJyoKKydkZWJ1ZycJCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBzZXQgdG8gIm1zZyIsIGVycm9yIG1lc3NhZ2VzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIG9taXR0ZWQgd2lsbAorCWJlIGdpdmVuIGFueXdheS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nICdmb2xkZXhwcicgb3IKKwknaW5kZW50ZXhwcicuCisKKwkJCQkJCSonZGVmaW5lJyogKidkZWYnKgorJ2RlZmluZScgJ2RlZicJCXN0cmluZwkoZGVmYXVsdCAiXlxzKiNccypkZWZpbmUiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlQYXR0ZXJuIHRvIGJlIHVzZWQgdG8gZmluZCBhIG1hY3JvIGRlZmluaXRpb24uCUl0IGlzIGEgc2VhcmNoCisJcGF0dGVybiwganVzdCBsaWtlIGZvciB0aGUgIi8iIGNvbW1hbmQuICBUaGlzIG9wdGlvbiBpcyB1c2VkIGZvciB0aGUKKwljb21tYW5kcyBsaWtlICJbaSIgYW5kICJbZCIgfGluY2x1ZGUtc2VhcmNofC4gIFRoZSAnaXNpZGVudCcgb3B0aW9uIGlzCisJdXNlZCB0byByZWNvZ25pemUgdGhlIGRlZmluZWQgbmFtZSBhZnRlciB0aGUgbWF0Y2g6CisJCXttYXRjaCB3aXRoICdkZWZpbmUnfXtub24tSUQgY2hhcnN9e2RlZmluZWQgbmFtZX17bm9uLUlEIGNoYXJ9CisJU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbnNlcnRpbmcgYmFja3NsYXNoZXMgdG8gaW5jbHVkZSBhIHNwYWNlCisJb3IgYmFja3NsYXNoLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzIGZvciBDIHByb2dyYW1zLiAgRm9yIEMrKyB0aGlzIHZhbHVlIHdvdWxkIGJlCisJdXNlZnVsLCB0byBpbmNsdWRlIGNvbnN0IHR5cGUgZGVjbGFyYXRpb25zOiA+CisJCV5cKCNccypkZWZpbmVcfFthLXpdKlxzKmNvbnN0XHMqW2Etel0qXCkKKzwJV2hlbiB1c2luZyB0aGUgIjpzZXQiIGNvbW1hbmQsIHlvdSBuZWVkIHRvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMhCisKKwkJCSonZGVsY29tYmluZScqIConZGVjbycqIConbm9kZWxjb21iaW5lJyogKidub2RlY28nKgorJ2RlbGNvbWJpbmUnICdkZWNvJwlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmV9CisJSWYgZWRpdGluZyBVbmljb2RlIGFuZCB0aGlzIG9wdGlvbiBpcyBzZXQsIGJhY2tzcGFjZSBhbmQgTm9ybWFsIG1vZGUKKwkieCIgZGVsZXRlIGVhY2ggY29tYmluaW5nIGNoYXJhY3RlciBvbiBpdHMgb3duLiAgV2hlbiBpdCBpcyBvZmYgKHRoZQorCWRlZmF1bHQpIHRoZSBjaGFyYWN0ZXIgYWxvbmcgd2l0aCBpdHMgY29tYmluaW5nIGNoYXJhY3RlcnMgYXJlCisJZGVsZXRlZC4KKwlOb3RlOiBXaGVuICdkZWxjb21iaW5lJyBpcyBzZXQgInh4IiBtYXkgd29yayBkaWZmZXJlbnQgZnJvbSAiMngiIQorCisJVGhpcyBpcyB1c2VmdWwgZm9yIEFyYWJpYywgSGVicmV3IGFuZCBtYW55IG90aGVyIGxhbmd1YWdlcyB3aGVyZSBvbmUKKwltYXkgaGF2ZSBjb21iaW5pbmcgY2hhcmFjdGVycyBvdmVydG9wIG9mIGJhc2UgY2hhcmFjdGVycywgYW5kIHdhbnQKKwl0byByZW1vdmUgb25seSB0aGUgY29tYmluaW5nIG9uZXMuCisKKwkJCQkJCSonZGljdGlvbmFyeScqIConZGljdCcqCisnZGljdGlvbmFyeScgJ2RpY3QnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJTGlzdCBvZiBmaWxlIG5hbWVzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCB0aGF0IGFyZSB1c2VkIHRvIGxvb2t1cCB3b3JkcworCWZvciBrZXl3b3JkIGNvbXBsZXRpb24gY29tbWFuZHMgfGlfQ1RSTC1YX0NUUkwtS3wuICBFYWNoIGZpbGUgc2hvdWxkCisJY29udGFpbiBhIGxpc3Qgb2Ygd29yZHMuICBUaGlzIGNhbiBiZSBvbmUgd29yZCBwZXIgbGluZSwgb3Igc2V2ZXJhbAorCXdvcmRzIHBlciBsaW5lLCBzZXBhcmF0ZWQgYnkgbm9uLWtleXdvcmQgY2hhcmFjdGVycyAod2hpdGUgc3BhY2UgaXMKKwlwcmVmZXJyZWQpLiAgTWF4aW11bSBsaW5lIGxlbmd0aCBpcyA1MTAgYnl0ZXMuCisJVG8gaW5jbHVkZSBhIGNvbW1hIGluIGEgZmlsZSBuYW1lIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4JU3BhY2VzCisJYWZ0ZXIgYSBjb21tYSBhcmUgaWdub3JlZCwgb3RoZXJ3aXNlIHNwYWNlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZpbGUKKwluYW1lLiAgU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCB1c2luZyBiYWNrc2xhc2hlcy4KKwlXaGVyZSB0byBmaW5kIGEgbGlzdCBvZiB3b3Jkcz8KKwktIE9uIEZyZWVCU0QsIHRoZXJlIGlzIHRoZSBmaWxlICIvdXNyL3NoYXJlL2RpY3Qvd29yZHMiLgorCS0gSW4gdGhlIFNpbXRlbCBhcmNoaXZlLCBsb29rIGluIHRoZSAibXNkb3MvbGluZ3Vpc3QiIGRpcmVjdG9yeS4KKwktIEluICJtaXNjZmlsZXMiIG9mIHRoZSBHTlUgY29sbGVjdGlvbi4KKwlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlkaXJlY3RvcmllcyBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuCisJQmFja3RpY2tzIGNhbm5vdCBiZSB1c2VkIGluIHRoaXMgb3B0aW9uIGZvciBzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkJKidkaWZmJyogKidub2RpZmYnKgorJ2RpZmYnCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZGlmZnwKKwkJCWZlYXR1cmV9CisJSm9pbiB0aGUgY3VycmVudCB3aW5kb3cgaW4gdGhlIGdyb3VwIG9mIHdpbmRvd3MgdGhhdCBzaG93cyBkaWZmZXJlbmNlcworCWJldHdlZW4gZmlsZXMuCVNlZSB8dmltZGlmZnwuCisKKwkJCQkJCSonZGV4JyogKidkaWZmZXhwcicqCisnZGlmZmV4cHInICdkZXgnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtkaWZmfAorCQkJZmVhdHVyZX0KKwlFeHByZXNzaW9uIHdoaWNoIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYW4gZWQtc3R5bGUgZGlmZiBmaWxlIGZyb20gdHdvCisJdmVyc2lvbnMgb2YgYSBmaWxlLiAgU2VlIHxkaWZmLWRpZmZleHByfC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonZGlwJyogKidkaWZmb3B0JyoKKydkaWZmb3B0JyAnZGlwJwkJc3RyaW5nCShkZWZhdWx0ICJmaWxsZXIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2RpZmZ8CisJCQlmZWF0dXJlfQorCU9wdGlvbiBzZXR0aW5ncyBmb3IgZGlmZiBtb2RlLglJdCBjYW4gY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nIGl0ZW1zLgorCUFsbCBhcmUgb3B0aW9uYWwuICBJdGVtcyBtdXN0IGJlIHNlcGFyYXRlZCBieSBhIGNvbW1hLgorCisJCWZpbGxlcgkJU2hvdyBmaWxsZXIgbGluZXMsIHRvIGtlZXAgdGhlIHRleHQKKwkJCQlzeW5jaHJvbml6ZWQgd2l0aCBhIHdpbmRvdyB0aGF0IGhhcyBpbnNlcnRlZAorCQkJCWxpbmVzIGF0IHRoZSBzYW1lIHBvc2l0aW9uLiAgTW9zdGx5IHVzZWZ1bAorCQkJCXdoZW4gd2luZG93cyBhcmUgc2lkZS1ieS1zaWRlIGFuZCAnc2Nyb2xsYmluZCcKKwkJCQlpcyBzZXQuCisKKwkJY29udGV4dDp7bn0JVXNlIGEgY29udGV4dCBvZiB7bn0gbGluZXMgYmV0d2VlbiBhIGNoYW5nZQorCQkJCWFuZCBhIGZvbGQgdGhhdCBjb250YWlucyB1bmNoYW5nZWQgbGluZXMuCisJCQkJV2hlbiBvbWl0dGVkIGEgY29udGV4dCBvZiBzaXggbGluZXMgaXMgdXNlZC4KKwkJCQlTZWUgfGZvbGQtZGlmZnwuCisKKwkJaWNhc2UJCUlnbm9yZSBjaGFuZ2VzIGluIGNhc2Ugb2YgdGV4dC4gICJhIiBhbmQgIkEiCisJCQkJYXJlIGNvbnNpZGVyZWQgdGhlIHNhbWUuICBBZGRzIHRoZSAiLWkiIGZsYWcKKwkJCQl0byB0aGUgImRpZmYiIGNvbW1hbmQgaWYgJ2RpZmZleHByJyBpcyBlbXB0eS4KKworCQlpd2hpdGUJCUlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZSBzcGFjZS4gIEFkZHMKKwkJCQl0aGUgIi1iIiBmbGFnIHRvIHRoZSAiZGlmZiIgY29tbWFuZCBpZgorCQkJCSdkaWZmZXhwcicgaXMgZW1wdHkuICBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbgorCQkJCW9mIHRoZSAiZGlmZiIgY29tbWFuZCBmb3Igd2hhdCB0aGlzIGRvZXMKKwkJCQlleGFjdGx5LiAgSXQgc2hvdWxkIGlnbm9yZSBhZGRpbmcgdHJhaWxpbmcKKwkJCQl3aGl0ZSBzcGFjZSwgYnV0IG5vdCBsZWFkaW5nIHdoaXRlIHNwYWNlLgorCisJRXhhbXBsZXM6ID4KKworCQk6c2V0IGRpZmZvcHQ9ZmlsbGVyLGNvbnRleHQ6NAorCQk6c2V0IGRpZmZvcHQ9CisJCTpzZXQgZGlmZm9wdD1maWxsZXIKKzwKKwkJCQkgICAgIConZGlncmFwaCcqIConZGcnKiAqJ25vZGlncmFwaCcqIConbm9kZycqCisnZGlncmFwaCcgJ2RnJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZGlncmFwaHN8CisJCQlmZWF0dXJlfQorCUVuYWJsZSB0aGUgZW50ZXJpbmcgb2YgZGlncmFwaHMgaW4gSW5zZXJ0IG1vZGUgd2l0aCB7Y2hhcjF9IDxCUz4KKwl7Y2hhcjJ9LiAgU2VlIHxkaWdyYXBoc3wuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2RpcmVjdG9yeScqIConZGlyJyoKKydkaXJlY3RvcnknICdkaXInCXN0cmluZwkoZGVmYXVsdCBmb3IgQW1pZ2E6ICIuLHQ6IiwKKwkJCQkgZm9yIE1TLURPUyBhbmQgV2luMzI6ICIuLGM6XHRtcCxjOlx0ZW1wIgorCQkJCSBmb3IgVW5peDogIi4sfi90bXAsL3Zhci90bXAsL3RtcCIpCisJCQlnbG9iYWwKKwlMaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIHN3YXAgZmlsZSwgc2VwYXJhdGVkIHdpdGggY29tbWFzLgorCS0gVGhlIHN3YXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGZpcnN0IGRpcmVjdG9yeSB3aGVyZSB0aGlzIGlzCisJICBwb3NzaWJsZS4KKwktIEVtcHR5IG1lYW5zIHRoYXQgbm8gc3dhcCBmaWxlIHdpbGwgYmUgdXNlZCAocmVjb3ZlcnkgaXMKKwkgIGltcG9zc2libGUhKS4KKwktIEEgZGlyZWN0b3J5ICIuIiBtZWFucyB0byBwdXQgdGhlIHN3YXAgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKKwkgIHRoZSBlZGl0ZWQgZmlsZS4gIE9uIFVuaXgsIGEgZG90IGlzIHByZXBlbmRlZCB0byB0aGUgZmlsZSBuYW1lLCBzbworCSAgaXQgZG9lc24ndCBzaG93IGluIGEgZGlyZWN0b3J5IGxpc3RpbmcuICBPbiBNUy1XaW5kb3dzIHRoZSAiaGlkZGVuIgorCSAgYXR0cmlidXRlIGlzIHNldCBhbmQgYSBkb3QgcHJlcGVuZGVkIGlmIHBvc3NpYmxlLgorCS0gQSBkaXJlY3Rvcnkgc3RhcnRpbmcgd2l0aCAiLi8iIChvciAiLlwiIGZvciBNUy1ET1MgZXQuYWwuKSBtZWFucyB0bworCSAgcHV0IHRoZSBzd2FwIGZpbGUgcmVsYXRpdmUgdG8gd2hlcmUgdGhlIGVkaXRlZCBmaWxlIGlzLiAgVGhlIGxlYWRpbmcKKwkgICIuIiBpcyByZXBsYWNlZCB3aXRoIHRoZSBwYXRoIG5hbWUgb2YgdGhlIGVkaXRlZCBmaWxlLgorCS0gRm9yIFVuaXggYW5kIFdpbjMyLCBpZiBhIGRpcmVjdG9yeSBlbmRzIGluIHR3byBwYXRoIHNlcGFyYXRvcnMsIHRoZQorCSAgc3dhcCBmaWxlIG5hbWUgd2lsbCBiZSBidWlsdCBmcm9tIHRoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSBmaWxlCisJICB3aXRoIGFsbCBwYXRoIHNlcGFyYXRvcnMgc3Vic3RpdHV0ZWQgdG8gcGVyY2VudCAnJScgc2lnbnMuIFRoaXMgd2lsbAorCSAgZW5zdXJlIGZpbGUgbmFtZSB1bmlxdWVuZXNzIGluIHRoZSBwcmVzZXJ2ZSBkaXJlY3RvcnkuCisJLSBTcGFjZXMgYWZ0ZXIgdGhlIGNvbW1hIGFyZSBpZ25vcmVkLCBvdGhlciBzcGFjZXMgYXJlIGNvbnNpZGVyZWQgcGFydAorCSAgb2YgdGhlIGRpcmVjdG9yeSBuYW1lLiAgVG8gaGF2ZSBhIHNwYWNlIGF0IHRoZSBzdGFydCBvZiBhIGRpcmVjdG9yeQorCSAgbmFtZSwgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoLgorCS0gVG8gaW5jbHVkZSBhIGNvbW1hIGluIGEgZGlyZWN0b3J5IG5hbWUgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoLgorCS0gQSBkaXJlY3RvcnkgbmFtZSBtYXkgZW5kIGluIGFuICc6JyBvciAnLycuCisJLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCisJLSBDYXJlZnVsIHdpdGggJ1wnIGNoYXJhY3RlcnMsIHR5cGUgb25lIGJlZm9yZSBhIHNwYWNlLCB0eXBlIHR3byB0bworCSAgZ2V0IG9uZSBpbiB0aGUgb3B0aW9uIChzZWUgfG9wdGlvbi1iYWNrc2xhc2h8KSwgZm9yIGV4YW1wbGU6ID4KKwkgICAgOnNldCBkaXI9YzpcXHRtcCxcIGRpclxcLHdpdGhcXCxjb21tYXMsXFxcIGRpclwgd2l0aFwgc3BhY2VzCis8CS0gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggVmltIHZlcnNpb24gMy4wIGEgJz4nIGF0IHRoZSBzdGFydAorCSAgb2YgdGhlIG9wdGlvbiBpcyByZW1vdmVkLgorCVVzaW5nICIuIiBmaXJzdCBpbiB0aGUgbGlzdCBpcyByZWNvbW1lbmRlZC4gIFRoaXMgbWVhbnMgdGhhdCBlZGl0aW5nCisJdGhlIHNhbWUgZmlsZSB0d2ljZSB3aWxsIHJlc3VsdCBpbiBhIHdhcm5pbmcuICBVc2luZyAiL3RtcCIgb24gVW5peCBpcworCWRpc2NvdXJhZ2VkOiBXaGVuIHRoZSBzeXN0ZW0gY3Jhc2hlcyB5b3UgbG9zZSB0aGUgc3dhcCBmaWxlLgorCSIvdmFyL3RtcCIgaXMgb2Z0ZW4gbm90IGNsZWFyZWQgd2hlbiByZWJvb3RpbmcsIHRodXMgaXMgYSBiZXR0ZXIKKwljaG9pY2UgdGhhbiAiL3RtcCIuICBCdXQgaXQgY2FuIGNvbnRhaW4gYSBsb3Qgb2YgZmlsZXMsIHlvdXIgc3dhcAorCWZpbGVzIGdldCBsb3N0IGluIHRoZSBjcm93ZC4gIFRoYXQgaXMgd2h5IGEgInRtcCIgZGlyZWN0b3J5IGluIHlvdXIKKwlob21lIGRpcmVjdG9yeSBpcyB0cmllZCBmaXJzdC4KKwlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlkaXJlY3RvcmllcyBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCXtWaTogZGlyZWN0b3J5IHRvIHB1dCB0ZW1wIGZpbGUgaW4sIGRlZmF1bHRzIHRvICIvdG1wIn0KKworCQkJCQkqJ2Rpc3BsYXknKiAqJ2R5JyoKKydkaXNwbGF5JyAnZHknCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQ2hhbmdlIHRoZSB3YXkgdGV4dCBpcyBkaXNwbGF5ZWQuICBUaGlzIGlzIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mCisJZmxhZ3M6CisJbGFzdGxpbmUJV2hlbiBpbmNsdWRlZCwgYXMgbXVjaCBhcyBwb3NzaWJsZSBvZiB0aGUgbGFzdCBsaW5lCisJCQlpbiBhIHdpbmRvdyB3aWxsIGJlIGRpc3BsYXllZC4JV2hlbiBub3QgaW5jbHVkZWQsIGEKKwkJCWxhc3QgbGluZSB0aGF0IGRvZXNuJ3QgZml0IGlzIHJlcGxhY2VkIHdpdGggIkAiIGxpbmVzLgorCXVoZXgJCVNob3cgdW5wcmludGFibGUgY2hhcmFjdGVycyBoZXhhZGVjaW1hbCBhcyA8eHg+CisJCQlpbnN0ZWFkIG9mIHVzaW5nIF5DIGFuZCB+Qy4KKworCQkJCQkJKidlYWRpcmVjdGlvbicqIConZWFkJyoKKydlYWRpcmVjdGlvbicgJ2VhZCcJc3RyaW5nCShkZWZhdWx0ICJib3RoIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3ZlcnRzcGxpdAorCQkJZmVhdHVyZX0KKwlUZWxscyB3aGVuIHRoZSAnZXF1YWxhbHdheXMnIG9wdGlvbiBhcHBsaWVzOgorCQl2ZXIJdmVydGljYWxseSwgd2lkdGggb2Ygd2luZG93cyBpcyBub3QgYWZmZWN0ZWQKKwkJaG9yCWhvcml6b250YWxseSwgaGVpZ2h0IG9mIHdpbmRvd3MgaXMgbm90IGFmZmVjdGVkCisJCWJvdGgJd2lkdGggYW5kIGhlaWdodCBvZiB3aW5kb3dzIGlzIGFmZmVjdGVkCisKKwkJCSAgIConZWQnKiAqJ2VkY29tcGF0aWJsZScqIConbm9lZCcqIConbm9lZGNvbXBhdGlibGUnKgorJ2VkY29tcGF0aWJsZScgJ2VkJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCU1ha2VzIHRoZSAnZycgYW5kICdjJyBmbGFncyBvZiB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kIHRvIGJlCisJdG9nZ2xlZCBlYWNoIHRpbWUgdGhlIGZsYWcgaXMgZ2l2ZW4uICBTZWUgfGNvbXBsZXgtY2hhbmdlfC4gIFNlZQorCWFsc28gJ2dkZWZhdWx0JyBvcHRpb24uCisJU3dpdGNoaW5nIHRoaXMgb3B0aW9uIG9uIGlzIGRpc2NvdXJhZ2VkIQorCisJCQkJCSonZW5jb2RpbmcnKiAqJ2VuYycqICpFNTQzKgorJ2VuY29kaW5nJyAnZW5jJwlzdHJpbmcgKGRlZmF1bHQ6ICJsYXRpbjEiIG9yIHZhbHVlIGZyb20gJExBTkcpCisJCQlnbG9iYWwKKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCVNldHMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyB1c2VkIGluc2lkZSBWaW0uICBJdCBhcHBsaWVzIHRvIHRleHQgaW4KKwl0aGUgYnVmZmVycywgcmVnaXN0ZXJzLCBTdHJpbmdzIGluIGV4cHJlc3Npb25zLCB0ZXh0IHN0b3JlZCBpbiB0aGUKKwl2aW1pbmZvIGZpbGUsIGV0Yy4gIEl0IHNldHMgdGhlIGtpbmQgb2YgY2hhcmFjdGVycyB3aGljaCBWaW0gY2FuIHdvcmsKKwl3aXRoLiAgU2VlIHxlbmNvZGluZy1uYW1lc3wgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuCisKKwlOT1RFOiBDaGFuZ2luZyB0aGlzIG9wdGlvbiB3aWxsIG5vdCBjaGFuZ2UgdGhlIGVuY29kaW5nIG9mIHRoZQorCWV4aXN0aW5nIHRleHQgaW4gVmltLiAgSXQgbWF5IGNhdXNlIG11bHRpLWJ5dGUgdGV4dCB0byBiZWNvbWUgaW52YWxpZC4KKwlJdCBzaG91bGQgbm9ybWFsbHkgYmUga2VwdCBhdCBpdHMgZGVmYXVsdCB2YWx1ZSwgb3Igc2V0IHdoZW4gVmltCisJc3RhcnRzIHVwLiAgU2VlIHxtdWx0aWJ5dGV8LgorCisJTk9URTogRm9yIEdUSysgMiBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2V0ICdlbmNvZGluZycgdG8KKwkidXRmLTgiLiAgQWx0aG91Z2ggY2FyZSBoYXMgYmVlbiB0YWtlbiB0byBhbGxvdyBkaWZmZXJlbnQgdmFsdWVzIG9mCisJJ2VuY29kaW5nJywgInV0Zi04IiBpcyB0aGUgbmF0dXJhbCBjaG9pY2UgZm9yIHRoZSBlbnZpcm9ubWVudCBhbmQKKwlhdm9pZHMgdW5uZWNlc3NhcnkgY29udmVyc2lvbiBvdmVyaGVhZC4gICJ1dGYtOCIgaGFzIG5vdCBiZWVuIG1hZGUKKwl0aGUgZGVmYXVsdCB0byBwcmV2ZW50IGRpZmZlcmVudCBiZWhhdmlvdXIgb2YgdGhlIEdVSSBhbmQgdGVybWluYWwKKwl2ZXJzaW9ucywgYW5kIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBlbmNvZGluZyBvZiBuZXdseSBjcmVhdGVkIGZpbGVzCisJd2l0aG91dCB5b3VyIGtub3dsZWRnZSAoaW4gY2FzZSAnZmlsZWVuY29kaW5ncycgaXMgZW1wdHkpLgorCisJVGhlIGNoYXJhY3RlciBlbmNvZGluZyBvZiBmaWxlcyBjYW4gYmUgZGlmZmVyZW50IGZyb20gJ2VuY29kaW5nJy4KKwlUaGlzIGlzIHNwZWNpZmllZCB3aXRoICdmaWxlZW5jb2RpbmcnLglUaGUgY29udmVyc2lvbiBpcyBkb25lIHdpdGgKKwlpY29udigpIG9yIGFzIHNwZWNpZmllZCB3aXRoICdjaGFyY29udmVydCcuCisKKwlOb3JtYWxseSAnZW5jb2RpbmcnIHdpbGwgYmUgZXF1YWwgdG8geW91ciBjdXJyZW50IGxvY2FsZS4gIFRoaXMgd2lsbAorCWJlIHRoZSBkZWZhdWx0IGlmIFZpbSByZWNvZ25pemVzIHlvdXIgZW52aXJvbm1lbnQgc2V0dGluZ3MuICBJZgorCSdlbmNvZGluZycgaXMgbm90IHNldCB0byB0aGUgY3VycmVudCBsb2NhbGUsICd0ZXJtZW5jb2RpbmcnIG11c3QgYmUKKwlzZXQgdG8gY29udmVydCB0eXBlZCBhbmQgZGlzcGxheWVkIHRleHQuICBTZWUgfGVuY29kaW5nLXRhYmxlfC4KKworCVdoZW4geW91IHNldCB0aGlzIG9wdGlvbiwgaXQgZmlyZXMgdGhlIHxFbmNvZGluZ0NoYW5nZWR8IGF1dG9jb21tYW5kCisJZXZlbnQgc28gdGhhdCB5b3UgY2FuIHNldCB1cCBmb250cyBpZiBuZWNlc3NhcnkuCisKKwlXaGVuIHRoZSBvcHRpb24gaXMgc2V0LCB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZS4gIFRodXMKKwl5b3UgY2FuIHNldCBpdCB3aXRoIHVwcGVyY2FzZSB2YWx1ZXMgdG9vLiAgVW5kZXJzY29yZXMgYXJlIHRyYW5zbGF0ZWQKKwl0byAnLScgc2lnbnMuCisJV2hlbiB0aGUgZW5jb2RpbmcgaXMgcmVjb2duaXplZCwgaXQgaXMgY2hhbmdlZCB0byB0aGUgc3RhbmRhcmQgbmFtZS4KKwlGb3IgZXhhbXBsZSAiTGF0aW4tMSIgYmVjb21lcyAibGF0aW4xIiwgIklTT184ODU5MiIgYmVjb21lcworCSJpc28tODg1OS0yIiBhbmQgInV0ZjgiIGJlY29tZXMgInV0Zi04Ii4KKworCU5vdGU6ICJsYXRpbjEiIGlzIGFsc28gdXNlZCB3aGVuIHRoZSBlbmNvZGluZyBjb3VsZCBub3QgYmUgZGV0ZWN0ZWQuCisJVGhpcyBvbmx5IHdvcmtzIHdoZW4gZWRpdGluZyBmaWxlcyBpbiB0aGUgc2FtZSBlbmNvZGluZyEgIFdoZW4gdGhlCisJYWN0dWFsIGNoYXJhY3RlciBzZXQgaXMgbm90IGxhdGluMSwgbWFrZSBzdXJlICdmaWxlZW5jb2RpbmcnIGFuZAorCSdmaWxlZW5jb2RpbmdzJyBhcmUgZW1wdHkuICBXaGVuIGNvbnZlcnNpb24gaXMgbmVlZGVkLCBzd2l0Y2ggdG8gdXNpbmcKKwl1dGYtOC4KKworCVdoZW4gInVuaWNvZGUiLCAidWNzLTIiIG9yICJ1Y3MtNCIgaXMgdXNlZCwgVmltIGludGVybmFsbHkgdXNlcyB1dGYtOC4KKwlZb3UgZG9uJ3Qgbm90aWNlIHRoaXMgd2hpbGUgZWRpdGluZywgYnV0IGl0IGRvZXMgbWF0dGVyIGZvciB0aGUKKwl8dmltaW5mby1maWxlfC4gIEFuZCBWaW0gZXhwZWN0cyB0aGUgdGVybWluYWwgdG8gdXNlIHV0Zi04IHRvby4gIFRodXMKKwlzZXR0aW5nICdlbmNvZGluZycgdG8gb25lIG9mIHRoZXNlIHZhbHVlcyBpbnN0ZWFkIG9mIHV0Zi04IG9ubHkgaGFzCisJZWZmZWN0IGZvciBlbmNvZGluZyB1c2VkIGZvciBmaWxlcyB3aGVuICdmaWxlZW5jb2RpbmcnIGlzIGVtcHR5LgorCisJIFdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gYSBVbmljb2RlIGVuY29kaW5nLCBhbmQgJ2ZpbGVlbmNvZGluZ3MnIHdhcworCSBub3Qgc2V0IHlldCwgdGhlIGRlZmF1bHQgZm9yICdmaWxlZW5jb2RpbmdzJyBpcyBjaGFuZ2VkLgorCisJCQkqJ2VuZG9mbGluZScqIConZW9sJyogKidub2VuZG9mbGluZScqIConbm9lb2wnKgorJ2VuZG9mbGluZScgJ2VvbCcJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHdyaXRpbmcgYSBmaWxlIGFuZCB0aGlzIG9wdGlvbiBpcyBvZmYgYW5kIHRoZSAnYmluYXJ5JyBvcHRpb24KKwlpcyBvbiwgbm8gPEVPTD4gd2lsbCBiZSB3cml0dGVuIGZvciB0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlLglUaGlzCisJb3B0aW9uIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIG5ldyBmaWxlLCB1bmxlc3MKKwl0aGUgZmlsZSBkb2VzIG5vdCBoYXZlIGFuIDxFT0w+IGZvciB0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlLCBpbgorCXdoaWNoIGNhc2UgaXQgaXMgcmVzZXQuICBOb3JtYWxseSB5b3UgZG9uJ3QgaGF2ZSB0byBzZXQgb3IgcmVzZXQgdGhpcworCW9wdGlvbi4gIFdoZW4gJ2JpbmFyeScgaXMgb2ZmIHRoZSB2YWx1ZSBpcyBub3QgdXNlZCB3aGVuIHdyaXRpbmcgdGhlCisJZmlsZS4gIFdoZW4gJ2JpbmFyeScgaXMgb24gaXQgaXMgdXNlZCB0byByZW1lbWJlciB0aGUgcHJlc2VuY2Ugb2YgYQorCTxFT0w+IGZvciB0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlLCBzbyB0aGF0IHdoZW4geW91IHdyaXRlIHRoZSBmaWxlCisJdGhlIHNpdHVhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBmaWxlIGNhbiBiZSBrZXB0LiAgQnV0IHlvdSBjYW4gY2hhbmdlCisJaXQgaWYgeW91IHdhbnQgdG8uCisKKwkJCSAgICAgKidlcXVhbGFsd2F5cycqIConZWEnKiAqJ25vZXF1YWxhbHdheXMnKiAqJ25vZWEnKgorJ2VxdWFsYWx3YXlzJyAnZWEnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiwgYWxsIHRoZSB3aW5kb3dzIGFyZSBhdXRvbWF0aWNhbGx5IG1hZGUgdGhlIHNhbWUgc2l6ZSBhZnRlcgorCXNwbGl0dGluZyBvciBjbG9zaW5nIGEgd2luZG93LglXaGVuIG9mZiwgc3BsaXR0aW5nIGEgd2luZG93IHdpbGwKKwlyZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgd2luZG93IGFuZCBsZWF2ZSB0aGUgb3RoZXIgd2luZG93cyB0aGUKKwlzYW1lLiAgV2hlbiBjbG9zaW5nIGEgd2luZG93IHRoZSBleHRyYSBsaW5lcyBhcmUgZ2l2ZW4gdG8gdGhlIHdpbmRvdworCW5leHQgdG8gaXQgKGRlcGVuZGluZyBvbiAnc3BsaXRiZWxvdycgYW5kICdzcGxpdHJpZ2h0JykuCisJV2hlbiBtaXhpbmcgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5IHNwbGl0IHdpbmRvd3MsIGEgbWluaW1hbCBzaXplCisJaXMgY29tcHV0ZWQgYW5kIHNvbWUgd2luZG93cyBtYXkgYmUgbGFyZ2VyIGlmIHRoZXJlIGlzIHJvb20uICBUaGUKKwknZWFkaXJlY3Rpb24nIG9wdGlvbiB0ZWxscyBpbiB3aGljaCBkaXJlY3Rpb24gdGhlIHNpemUgaXMgYWZmZWN0ZWQuCisJQ2hhbmdpbmcgdGhlIGhlaWdodCBvZiBhIHdpbmRvdyBjYW4gYmUgYXZvaWRlZCBieSBzZXR0aW5nCisJJ3dpbmZpeGhlaWdodCcuCisKKwkJCQkJCSonZXF1YWxwcmcnKiAqJ2VwJyoKKydlcXVhbHByZycgJ2VwJwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlFeHRlcm5hbCBwcm9ncmFtIHRvIHVzZSBmb3IgIj0iIGNvbW1hbmQuICBXaGVuIHRoaXMgb3B0aW9uIGlzIGVtcHR5CisJdGhlIGludGVybmFsIGZvcm1hdHRpbmcgZnVuY3Rpb25zIGFyZSB1c2VkICgnbGlzcCcsICdjaW5kZW50JyBvcgorCSdpbmRlbnRleHByJykuCisJRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LglTZWUgfG9wdGlvbi1iYWNrc2xhc2h8CisJYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkqJ2Vycm9yYmVsbHMnKiAqJ2ViJyogKidub2Vycm9yYmVsbHMnKiAqJ25vZWInKgorJ2Vycm9yYmVsbHMnICdlYicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwlSaW5nIHRoZSBiZWxsIChiZWVwIG9yIHNjcmVlbiBmbGFzaCkgZm9yIGVycm9yIG1lc3NhZ2VzLiAgVGhpcyBvbmx5CisJbWFrZXMgYSBkaWZmZXJlbmNlIGZvciBlcnJvciBtZXNzYWdlcywgdGhlIGJlbGwgd2lsbCBiZSB1c2VkIGFsd2F5cworCWZvciBhIGxvdCBvZiBlcnJvcnMgd2l0aG91dCBhIG1lc3NhZ2UgKGUuZy4sIGhpdHRpbmcgPEVzYz4gaW4gTm9ybWFsCisJbW9kZSkuCVNlZSAndmlzdWFsYmVsbCcgb24gaG93IHRvIG1ha2UgdGhlIGJlbGwgYmVoYXZlIGxpa2UgYSBiZWVwLAorCXNjcmVlbiBmbGFzaCBvciBkbyBub3RoaW5nLgorCisJCQkJCQkqJ2Vycm9yZmlsZScqIConZWYnKgorJ2Vycm9yZmlsZScgJ2VmJwlzdHJpbmcJKEFtaWdhIGRlZmF1bHQ6ICJBenRlY0MuRXJyIiwKKwkJCQkJb3RoZXJzOiAiZXJyb3JzLmVyciIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8CisJCQlmZWF0dXJlfQorCU5hbWUgb2YgdGhlIGVycm9yZmlsZSBmb3IgdGhlIFF1aWNrRml4IG1vZGUgKHNlZSB8OmNmfCkuCisJV2hlbiB0aGUgIi1xIiBjb21tYW5kLWxpbmUgYXJndW1lbnQgaXMgdXNlZCwgJ2Vycm9yZmlsZScgaXMgc2V0IHRvIHRoZQorCWZvbGxvd2luZyBhcmd1bWVudC4gIFNlZSB8LXF8LgorCU5PVCB1c2VkIGZvciB0aGUgIjptYWtlIiBjb21tYW5kLiAgU2VlICdtYWtlZWYnIGZvciB0aGF0LgorCUVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4KKwlTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidlcnJvcmZvcm1hdCcqIConZWZtJyoKKydlcnJvcmZvcm1hdCcgJ2VmbScJc3RyaW5nCShkZWZhdWx0IGlzIHZlcnkgbG9uZykKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8CisJCQlmZWF0dXJlfQorCVNjYW5mLWxpa2UgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCBmb3IgdGhlIGxpbmVzIGluIHRoZSBlcnJvciBmaWxlCisJKHNlZSB8ZXJyb3Jmb3JtYXR8KS4KKworCQkJCSAgICAgKidlc2NrZXlzJyogKidlaycqIConbm9lc2NrZXlzJyogKidub2VrJyoKKydlc2NrZXlzJyAnZWsnCQlib29sZWFuCShWaW0gZGVmYXVsdDogb24sIFZpIGRlZmF1bHQ6IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlGdW5jdGlvbiBrZXlzIHRoYXQgc3RhcnQgd2l0aCBhbiA8RXNjPiBhcmUgcmVjb2duaXplZCBpbiBJbnNlcnQKKwltb2RlLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBvZmYsIHRoZSBjdXJzb3IgYW5kIGZ1bmN0aW9uIGtleXMgY2Fubm90IGJlCisJdXNlZCBpbiBJbnNlcnQgbW9kZSBpZiB0aGV5IHN0YXJ0IHdpdGggYW4gPEVzYz4uICBUaGUgYWR2YW50YWdlIG9mCisJdGhpcyBpcyB0aGF0IHRoZSBzaW5nbGUgPEVzYz4gaXMgcmVjb2duaXplZCBpbW1lZGlhdGVseSwgaW5zdGVhZCBvZgorCWFmdGVyIG9uZSBzZWNvbmQuICBJbnN0ZWFkIG9mIHJlc2V0dGluZyB0aGlzIG9wdGlvbiwgeW91IG1pZ2h0IHdhbnQgdG8KKwl0cnkgY2hhbmdpbmcgdGhlIHZhbHVlcyBmb3IgJ3RpbWVvdXRsZW4nIGFuZCAndHRpbWVvdXRsZW4nLiAgTm90ZSB0aGF0CisJd2hlbiAnZXNja2V5cycgaXMgb2ZmLCB5b3UgY2FuIHN0aWxsIG1hcCBhbnl0aGluZywgYnV0IHRoZSBjdXJzb3Iga2V5cworCXdvbid0IHdvcmsgYnkgZGVmYXVsdC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKidldmVudGlnbm9yZScqIConZWknKgorJ2V2ZW50aWdub3JlJyAnZWknCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCthdXRvY21kfAorCQkJZmVhdHVyZX0KKwlBIGxpc3Qgb2YgYXV0b2NvbW1hbmQgZXZlbnQgbmFtZXMsIHdoaWNoIGFyZSB0byBiZSBpZ25vcmVkLgorCVdoZW4gc2V0IHRvICJhbGwiLCBhbGwgYXV0b2NvbW1hbmQgZXZlbnRzIGFyZSBpZ25vcmVkLCBhdXRvY29tbWFuZHMKKwl3aWxsIG5vdCBiZSBleGVjdXRlZC4KKwlPdGhlcndpc2UgdGhpcyBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50IG5hbWVzLiAgRXhhbXBsZTogPgorCSAgICA6c2V0IGVpPVdpbkVudGVyLFdpbkxlYXZlCis8CisJCQkJIConZXhwYW5kdGFiJyogKidldCcqIConbm9leHBhbmR0YWInKiAqJ25vZXQnKgorJ2V4cGFuZHRhYicgJ2V0Jwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlJbiBJbnNlcnQgbW9kZTogVXNlIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluc2VydCBhCisJPFRhYj4uCVNwYWNlcyBhcmUgdXNlZCBpbiBpbmRlbnRzIHdpdGggdGhlICc+JyBhbmQgJzwnIGNvbW1hbmRzIGFuZAorCXdoZW4gJ2F1dG9pbmRlbnQnIGlzIG9uLiAgVG8gaW5zZXJ0IGEgcmVhbCB0YWIgd2hlbiAnZXhwYW5kdGFiJyBpcworCW9uLCB1c2UgQ1RSTC1WPFRhYj4uICBTZWUgYWxzbyB8OnJldGFifCBhbmQgfGlucy1leHBhbmR0YWJ8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkqJ2V4cmMnKiAqJ2V4JyogKidub2V4cmMnKiAqJ25vZXgnKgorJ2V4cmMnICdleCcJCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUVuYWJsZXMgdGhlIHJlYWRpbmcgb2YgLnZpbXJjLCAuZXhyYyBhbmQgLmd2aW1yYyBpbiB0aGUgY3VycmVudAorCWRpcmVjdG9yeS4gIElmIHlvdSBzd2l0Y2ggdGhpcyBvcHRpb24gb24geW91IHNob3VsZCBhbHNvIGNvbnNpZGVyCisJc2V0dGluZyB0aGUgJ3NlY3VyZScgb3B0aW9uIChzZWUgfGluaXRpYWxpemF0aW9ufCkuICBVc2luZyBhIGxvY2FsCisJLmV4cmMsIC52aW1yYyBvciAuZ3ZpbXJjIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IGxlYWssIHVzZSB3aXRoIGNhcmUhCisJYWxzbyBzZWUgfC52aW1yY3wgYW5kIHxndWktaW5pdHwuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJKidmaWxlZW5jb2RpbmcnKiAqJ2ZlbmMnKiAqRTIxMyoKKydmaWxlZW5jb2RpbmcnICdmZW5jJwlzdHJpbmcgKGRlZmF1bHQ6ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIHRoZSBmaWxlIG9mIHRoaXMgYnVmZmVyLgorCVdoZW4gJ2ZpbGVlbmNvZGluZycgaXMgZGlmZmVyZW50IGZyb20gJ2VuY29kaW5nJywgY29udmVyc2lvbiB3aWxsIGJlCisJZG9uZSB3aGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGZpbGUuCisJV2hlbiAnZmlsZWVuY29kaW5nJyBpcyBlbXB0eSwgdGhlIHNhbWUgdmFsdWUgYXMgJ2VuY29kaW5nJyB3aWxsIGJlCisJdXNlZCAobm8gY29udmVyc2lvbiB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBhIGZpbGUpLgorCQlXQVJOSU5HOiBDb252ZXJzaW9uIGNhbiBjYXVzZSBsb3NzIG9mIGluZm9ybWF0aW9uISAgV2hlbgorCQknZW5jb2RpbmcnIGlzICJ1dGYtOCIgY29udmVyc2lvbiBpcyBtb3N0IGxpa2VseSBkb25lIGluIGEgd2F5CisJCXRoYXQgdGhlIHJldmVyc2UgY29udmVyc2lvbiByZXN1bHRzIGluIHRoZSBzYW1lIHRleHQuICBXaGVuCisJCSdlbmNvZGluZycgaXMgbm90ICJ1dGYtOCIgc29tZSBjaGFyYWN0ZXJzIG1heSBiZSBsb3N0IQorCVNlZSAnZW5jb2RpbmcnIGZvciB0aGUgcG9zc2libGUgdmFsdWVzLiAgQWRkaXRpb25hbGx5LCB2YWx1ZXMgbWF5IGJlCisJc3BlY2lmaWVkIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGNvbnZlcnRlciwgc2VlCisJfG1ieXRlLWNvbnZlcnNpb258LgorCVdoZW4gcmVhZGluZyBhIGZpbGUgJ2ZpbGVlbmNvZGluZycgd2lsbCBiZSBzZXQgZnJvbSAnZmlsZWVuY29kaW5ncycuCisJVG8gcmVhZCBhIGZpbGUgaW4gYSBjZXJ0YWluIGVuY29kaW5nIGl0IHdvbid0IHdvcmsgYnkgc2V0dGluZworCSdmaWxlZW5jb2RpbmcnLCB1c2UgdGhlIHwrK2VuY3wgYXJndW1lbnQuCisJUHJlcGVuZGluZyAiOGJpdC0iIGFuZCAiMmJ5dGUtIiBoYXMgbm8gbWVhbmluZyBoZXJlLCB0aGV5IGFyZSBpZ25vcmVkLgorCVdoZW4gdGhlIG9wdGlvbiBpcyBzZXQsIHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLiAgVGh1cworCXlvdSBjYW4gc2V0IGl0IHdpdGggdXBwZXJjYXNlIHZhbHVlcyB0b28uICAnXycgY2hhcmFjdGVycyBhcmUKKwlyZXBsYWNlZCB3aXRoICctJy4gIElmIGEgbmFtZSBpcyByZWNvZ25pemVkIGZyb20gdGhlIGxpc3QgZm9yCisJJ2VuY29kaW5nJywgaXQgaXMgcmVwbGFjZWQgYnkgdGhlIHN0YW5kYXJkIG5hbWUuICBGb3IgZXhhbXBsZQorCSJJU084ODU5LTIiIGJlY29tZXMgImlzby04ODU5LTIiLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCBhZnRlciBzdGFydGluZyB0byBlZGl0IGEgZmlsZSwgdGhlICdtb2RpZmllZCcKKwlvcHRpb24gaXMgc2V0LCBiZWNhdXNlIHRoZSBmaWxlIHdvdWxkIGJlIGRpZmZlcmVudCB3aGVuIHdyaXR0ZW4uCisJSWYgeW91IGRvIHRoaXMgaW4gYSBtb2RlbGluZSwgeW91IG1pZ2h0IHdhbnQgdG8gc2V0ICdub21vZGlmaWVkJyB0bworCWF2b2lkIHRoaXMuCisJVGhpcyBvcHRpb24gY2FuIG5vdCBiZSBjaGFuZ2VkIHdoZW4gJ21vZGlmaWFibGUnIGlzIG9mZi4KKworCQkJCQkJCSonZmUnKgorCU5PVEU6IEJlZm9yZSB2ZXJzaW9uIDYuMCB0aGlzIG9wdGlvbiBzcGVjaWZpZWQgdGhlIGVuY29kaW5nIGZvciB0aGUKKwl3aG9sZSBvZiBWaW0sIHRoaXMgd2FzIGEgbWlzdGFrZS4gIE5vdyB1c2UgJ2VuY29kaW5nJyBpbnN0ZWFkLglUaGUKKwlvbGQgc2hvcnQgbmFtZSB3YXMgJ2ZlJywgd2hpY2ggaXMgbm8gbG9uZ2VyIHVzZWQuCisKKwkJCQkJKidmaWxlZW5jb2RpbmdzJyogKidmZW5jcycqCisnZmlsZWVuY29kaW5ncycgJ2ZlbmNzJwlzdHJpbmcgKGRlZmF1bHQ6ICJ1Y3MtYm9tIiwgInVjcy1ib20sdXRmLTgsbGF0aW4xIgorCQkJCSAgICB3aGVuICdlbmNvZGluZycgaXMgc2V0IHRvIGEgVW5pY29kZSB2YWx1ZSkKKwkJCWdsb2JhbAorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJVGhpcyBpcyBhIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncyBjb25zaWRlcmVkIHdoZW4gc3RhcnRpbmcgdG8gZWRpdAorCWFuIGV4aXN0aW5nIGZpbGUuICBXaGVuIGEgZmlsZSBpcyByZWFkLCBWaW0gdHJpZXMgdG8gdXNlIHRoZSBmaXJzdAorCW1lbnRpb25lZCBjaGFyYWN0ZXIgZW5jb2RpbmcuICBJZiBhbiBlcnJvciBpcyBkZXRlY3RlZCwgdGhlIG5leHQgb25lCisJaW4gdGhlIGxpc3QgaXMgdHJpZWQuICBXaGVuIGFuIGVuY29kaW5nIGlzIGZvdW5kIHRoYXQgd29ya3MsCisJJ2ZpbGVlbmNvZGluZycgaXMgc2V0IHRvIGl0LglJZiBhbGwgZmFpbCwgJ2ZpbGVlbmNvZGluZycgaXMgc2V0IHRvCisJYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgdmFsdWUgb2YgJ2VuY29kaW5nJyBpcyB1c2VkLgorCQlXQVJOSU5HOiBDb252ZXJzaW9uIGNhbiBjYXVzZSBsb3NzIG9mIGluZm9ybWF0aW9uISAgV2hlbgorCQknZW5jb2RpbmcnIGlzICJ1dGYtOCIgKG9yIG9uZSBvZiB0aGUgb3RoZXIgVW5pY29kZSB2YXJpYW50cykKKwkJY29udmVyc2lvbiBpcyBtb3N0IGxpa2VseSBkb25lIGluIGEgd2F5IHRoYXQgdGhlIHJldmVyc2UKKwkJY29udmVyc2lvbiByZXN1bHRzIGluIHRoZSBzYW1lIHRleHQuICBXaGVuICdlbmNvZGluZycgaXMgbm90CisJCSJ1dGYtOCIgc3BlY2lhbCBjaGFyYWN0ZXJzIG1heSBiZSBsb3N0IQorCUZvciBhbiBlbXB0eSBmaWxlIG9yIGEgZmlsZSB3aXRoIG9ubHkgQVNDSUkgY2hhcmFjdGVycyBtb3N0IGVuY29kaW5ncworCXdpbGwgd29yayBhbmQgdGhlIGZpcnN0IGVudHJ5IG9mICdmaWxlZW5jb2RpbmdzJyB3aWxsIGJlIHVzZWQgKGV4Y2VwdAorCSJ1Y3MtYm9tIiwgd2hpY2ggcmVxdWlyZXMgdGhlIEJPTSB0byBiZSBwcmVzZW50KS4gIElmIHlvdSBwcmVmZXIKKwlhbm90aGVyIGVuY29kaW5nIHVzZSBhbiBCdWZSZWFkUG9zdCBhdXRvY29tbWFuZCBldmVudCB0byB0ZXN0IGlmIHlvdXIKKwlwcmVmZXJyZWQgZW5jb2RpbmcgaXMgdG8gYmUgdXNlZC4gIEV4YW1wbGU6ID4KKwkJYXUgQnVmUmVhZFBvc3QgKiBpZiBzZWFyY2goJ1xTJywgJ3cnKSA9PSAwIHwKKwkJCVwgc2V0IGZlbmM9aXNvLTIwMjItanAgfCBlbmRpZgorPAlUaGlzIHNldHMgJ2ZpbGVlbmNvZGluZycgdG8gImlzby0yMDIyLWpwIiBpZiB0aGUgZmlsZSBkb2VzIG5vdCBjb250YWluCisJbm9uLWJsYW5rIGNoYXJhY3RlcnMuCisJTm90ZSB0aGF0ICdmaWxlZW5jb2RpbmdzJyBpcyBub3QgdXNlZCBmb3IgYW4gbmV3IGZpbGUsICdmaWxlZW5jb2RpbmcnCisJaXMgYWx3YXlzIGVtcHR5IHRoZW4uICBUaGlzIG1lYW5zIHRoYXQgYSBub24tZXhpc3RpbmcgZmlsZSBtYXkgZ2V0IGEKKwlkaWZmZXJlbnQgZW5jb2RpbmcgdGhhbiBhbiBlbXB0eSBmaWxlLgorCVRoZSBzcGVjaWFsIHZhbHVlICJ1Y3MtYm9tIiBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgYSBVbmljb2RlIEJPTQorCShCeXRlIE9yZGVyIE1hcmspIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4gIEl0IG11c3Qgbm90IGJlIHByZWNlZGVkCisJYnkgInV0Zi04IiBvciBhbm90aGVyIFVuaWNvZGUgZW5jb2RpbmcgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS4KKwlBbiBlbnRyeSBmb3IgYW4gOC1iaXQgZW5jb2RpbmcgKGUuZy4sICJsYXRpbjEiKSBzaG91bGQgYmUgdGhlIGxhc3QsCisJYmVjYXVzZSBWaW0gY2Fubm90IGRldGVjdCBhbiBlcnJvciwgdGh1cyB0aGUgZW5jb2RpbmcgaXMgYWx3YXlzCisJYWNjZXB0ZWQuCisJV1JPTkcgVkFMVUVTOgkJCVdIQVQnUyBXUk9ORzoKKwkJbGF0aW4xLHV0Zi04CQkibGF0aW4xIiB3aWxsIGFsd2F5cyBiZSB1c2VkCisJCXV0Zi04LHVjcy1ib20sbGF0aW4xCUJPTSB3b24ndCBiZSByZWNvZ25pemVkIGluIGFuIHV0Zi04CisJCQkJCWZpbGUKKwkJY3AxMjUwLGxhdGluMQkJImNwMTI1MCIgd2lsbCBhbHdheXMgYmUgdXNlZAorCUlmICdmaWxlZW5jb2RpbmdzJyBpcyBlbXB0eSwgJ2ZpbGVlbmNvZGluZycgaXMgbm90IG1vZGlmaWVkLgorCVNlZSAnZmlsZWVuY29kaW5nJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGRvZXMgbm90IGhhdmUgYW4gZWZmZWN0IHVudGlsIHRoZSBuZXh0IHRpbWUgYSBmaWxlCisJaXMgcmVhZC4KKworCQkJCQkqJ2ZpbGVmb3JtYXQnKiAqJ2ZmJyoKKydmaWxlZm9ybWF0JyAnZmYnCXN0cmluZyAoTVMtRE9TLCBNUy1XaW5kb3dzLCBPUy8yIGRlZmF1bHQ6ICJkb3MiLAorCQkJCVVuaXggZGVmYXVsdDogInVuaXgiLAorCQkJCU1hY2ludG9zaCBkZWZhdWx0OiAibWFjIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGdpdmVzIHRoZSA8RU9MPiBvZiB0aGUgY3VycmVudCBidWZmZXIsIHdoaWNoIGlzIHVzZWQgZm9yCisJcmVhZGluZy93cml0aW5nIHRoZSBidWZmZXIgZnJvbS90byBhIGZpbGU6CisJICAgIGRvcwkgICAgPENSPiA8Tkw+CisJICAgIHVuaXggICAgPE5MPgorCSAgICBtYWMJICAgIDxDUj4KKwlXaGVuICJkb3MiIGlzIHVzZWQsIENUUkwtWiBhdCB0aGUgZW5kIG9mIGEgZmlsZSBpcyBpZ25vcmVkLgorCVNlZSB8ZmlsZS1mb3JtYXRzfCBhbmQgfGZpbGUtcmVhZHwuCisJRm9yIHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIGZpbGUgc2VlICdmaWxlZW5jb2RpbmcnLgorCVdoZW4gJ2JpbmFyeScgaXMgc2V0LCB0aGUgdmFsdWUgb2YgJ2ZpbGVmb3JtYXQnIGlzIGlnbm9yZWQsIGZpbGUgSS9PCisJd29ya3MgbGlrZSBpdCB3YXMgc2V0IHRvICJ1bml4Jy4KKwlUaGlzIG9wdGlvbiBpcyBzZXQgYXV0b21hdGljYWxseSB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlIGFuZAorCSdmaWxlZm9ybWF0cycgaXMgbm90IGVtcHR5IGFuZCAnYmluYXJ5JyBpcyBvZmYuCisJV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIGFmdGVyIHN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlLCB0aGUgJ21vZGlmaWVkJworCW9wdGlvbiBpcyBzZXQsIGJlY2F1c2UgdGhlIGZpbGUgd291bGQgYmUgZGlmZmVyZW50IHdoZW4gd3JpdHRlbi4KKwlUaGlzIG9wdGlvbiBjYW4gbm90IGJlIGNoYW5nZWQgd2hlbiAnbW9kaWZpYWJsZScgaXMgb2ZmLgorCUZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gImRvcyIsCisJJ3RleHRtb2RlJyBpcyBzZXQsIG90aGVyd2lzZSAndGV4dG1vZGUnIGlzIHJlc2V0LgorCisJCQkJCSonZmlsZWZvcm1hdHMnKiAqJ2ZmcycqCisnZmlsZWZvcm1hdHMnICdmZnMnCXN0cmluZyAoZGVmYXVsdDoKKwkJCQlWaW0rVmkJTVMtRE9TLCBNUy1XaW5kb3dzIE9TLzI6ICJkb3MsdW5peCIsCisJCQkJVmltCVVuaXg6ICJ1bml4LGRvcyIsCisJCQkJVmltCU1hYzogIm1hYyx1bml4LGRvcyIsCisJCQkJVmkJQ3lnd2luOiAidW5peCxkb3MiLAorCQkJCVZpCW90aGVyczogIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBnaXZlcyB0aGUgZW5kLW9mLWxpbmUgKDxFT0w+KSBmb3JtYXRzIHRoYXQgd2lsbCBiZSB0cmllZCB3aGVuCisJc3RhcnRpbmcgdG8gZWRpdCBhIG5ldyBidWZmZXIgYW5kIHdoZW4gcmVhZGluZyBhIGZpbGUgaW50byBhbiBleGlzdGluZworCWJ1ZmZlcjoKKwktIFdoZW4gZW1wdHksIHRoZSBmb3JtYXQgZGVmaW5lZCB3aXRoICdmaWxlZm9ybWF0JyB3aWxsIGJlIHVzZWQKKwkgIGFsd2F5cy4gIEl0IGlzIG5vdCBzZXQgYXV0b21hdGljYWxseS4KKwktIFdoZW4gc2V0IHRvIG9uZSBuYW1lLCB0aGF0IGZvcm1hdCB3aWxsIGJlIHVzZWQgd2hlbmV2ZXIgYSBuZXcgYnVmZmVyCisJICBpcyBvcGVuZWQuICAnZmlsZWZvcm1hdCcgaXMgc2V0IGFjY29yZGluZ2x5IGZvciB0aGF0IGJ1ZmZlci4JVGhlCisJICAnZmlsZWZvcm1hdHMnIG5hbWUgd2lsbCBiZSB1c2VkIHdoZW4gYSBmaWxlIGlzIHJlYWQgaW50byBhbiBleGlzdGluZworCSAgYnVmZmVyLCBubyBtYXR0ZXIgd2hhdCAnZmlsZWZvcm1hdCcgZm9yIHRoYXQgYnVmZmVyIGlzIHNldCB0by4KKwktIFdoZW4gbW9yZSB0aGFuIG9uZSBuYW1lIGlzIHByZXNlbnQsIHNlcGFyYXRlZCBieSBjb21tYXMsIGF1dG9tYXRpYworCSAgPEVPTD4gZGV0ZWN0aW9uIHdpbGwgYmUgZG9uZSB3aGVuIHJlYWRpbmcgYSBmaWxlLiAgV2hlbiBzdGFydGluZyB0bworCSAgZWRpdCBhIGZpbGUsIGEgY2hlY2sgaXMgZG9uZSBmb3IgdGhlIDxFT0w+OgorCSAgMS4gSWYgYWxsIGxpbmVzIGVuZCBpbiA8Q1I+PE5MPiwgYW5kICdmaWxlZm9ybWF0cycgaW5jbHVkZXMgImRvcyIsCisJICAgICAnZmlsZWZvcm1hdCcgaXMgc2V0IHRvICJkb3MiLgorCSAgMi4gSWYgYSA8Tkw+IGlzIGZvdW5kIGFuZCAnZmlsZWZvcm1hdHMnIGluY2x1ZGVzICJ1bml4IiwgJ2ZpbGVmb3JtYXQnCisJICAgICBpcyBzZXQgdG8gInVuaXgiLglOb3RlIHRoYXQgd2hlbiBhIDxOTD4gaXMgZm91bmQgd2l0aG91dCBhCisJICAgICBwcmVjZWRpbmcgPENSPiwgInVuaXgiIGlzIHByZWZlcnJlZCBvdmVyICJkb3MiLgorCSAgMy4gSWYgJ2ZpbGVmb3JtYXRzJyBpbmNsdWRlcyAibWFjIiwgJ2ZpbGVmb3JtYXQnIGlzIHNldCB0byAibWFjIi4KKwkgICAgIFRoaXMgbWVhbnMgdGhhdCAibWFjIiBpcyBvbmx5IGNob3NlbiB3aGVuICJ1bml4IiBpcyBub3QgcHJlc2VudCwKKwkgICAgIG9yIHdoZW4gbm8gPE5MPiBpcyBmb3VuZCBpbiB0aGUgZmlsZSwgYW5kIHdoZW4gImRvcyIgaXMgbm90CisJICAgICBwcmVzZW50LCBvciBubyA8Q1I+PE5MPiBpcyBwcmVzZW50IGluIHRoZSBmaWxlLgorCSAgICAgQWxzbyBpZiAidW5peCIgd2FzIGZpcnN0IGNob3NlbiwgYnV0IHRoZSBmaXJzdCA8Q1I+IGlzIGJlZm9yZQorCSAgICAgdGhlIGZpcnN0IDxOTD4gYW5kIHRoZXJlIGFwcGVhcnMgdG8gYmUgbW9yZSA8Q1I+J3MgdGhhbiA8Tkw+J3MgaW4KKwkgICAgIHRoZSBmaWxlLCB0aGVuICdmaWxlZm9ybWF0JyBpcyBzZXQgdG8gIm1hYyIuCisJICA0LiBJZiAnZmlsZWZvcm1hdCcgaXMgc3RpbGwgbm90IHNldCwgdGhlIGZpcnN0IG5hbWUgZnJvbQorCSAgICAgJ2ZpbGVmb3JtYXRzJyBpcyB1c2VkLgorCSAgV2hlbiByZWFkaW5nIGEgZmlsZSBpbnRvIGFuIGV4aXN0aW5nIGJ1ZmZlciwgdGhlIHNhbWUgaXMgZG9uZSwgYnV0CisJICB0aGlzIGhhcHBlbnMgbGlrZSAnZmlsZWZvcm1hdCcgaGFzIGJlZW4gc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoYXQKKwkgIGZpbGUgb25seSwgdGhlIG9wdGlvbiBpcyBub3QgY2hhbmdlZC4KKwlXaGVuICdiaW5hcnknIGlzIHNldCwgdGhlIHZhbHVlIG9mICdmaWxlZm9ybWF0cycgaXMgbm90IHVzZWQuCisKKwlGb3Igc3lzdGVtcyB3aXRoIGEgRG9zLWxpa2UgPEVPTD4gKDxDUj48Tkw+KSwgd2hlbiByZWFkaW5nIGZpbGVzIHRoYXQKKwlhcmUgIjpzb3VyY2UiZWQgYW5kIGZvciB2aW1yYyBmaWxlcywgYXV0b21hdGljIDxFT0w+IGRldGVjdGlvbiBtYXkgYmUKKwlkb25lOgorCS0gV2hlbiAnZmlsZWZvcm1hdHMnIGlzIGVtcHR5LCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgZGV0ZWN0aW9uLiAgRG9zCisJICBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCS0gV2hlbiAnZmlsZWZvcm1hdHMnIGlzIHNldCB0byBvbmUgb3IgbW9yZSBuYW1lcywgYXV0b21hdGljIGRldGVjdGlvbgorCSAgaXMgZG9uZS4gIFRoaXMgaXMgYmFzZWQgb24gdGhlIGZpcnN0IDxOTD4gaW4gdGhlIGZpbGU6IElmIHRoZXJlIGlzIGEKKwkgIDxDUj4gaW4gZnJvbnQgb2YgaXQsIERvcyBmb3JtYXQgaXMgdXNlZCwgb3RoZXJ3aXNlIFVuaXggZm9ybWF0IGlzCisJICB1c2VkLgorCUFsc28gc2VlIHxmaWxlLWZvcm1hdHN8LgorCUZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYW4gZW1wdHkKKwlzdHJpbmcgb3Igb25lIGZvcm1hdCAobm8gY29tbWEgaXMgaW5jbHVkZWQpLCAndGV4dGF1dG8nIGlzIHJlc2V0LAorCW90aGVyd2lzZSAndGV4dGF1dG8nIGlzIHNldC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkqJ2ZpbGV0eXBlJyogKidmdCcqCisnZmlsZXR5cGUnICdmdCcJCXN0cmluZyAoZGVmYXVsdDogIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrYXV0b2NtZHwKKwkJCWZlYXR1cmV9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBGaWxlVHlwZSBhdXRvY29tbWFuZCBldmVudCBpcyB0cmlnZ2VyZWQuCisJQWxsIGF1dG9jb21tYW5kcyB0aGF0IG1hdGNoIHdpdGggdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIHdpbGwgYmUKKwlleGVjdXRlZC4gIFRodXMgdGhlIHZhbHVlIG9mICdmaWxldHlwZScgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgZmlsZQorCW5hbWUuCisJT3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGRvZXMgbm90IGFsd2F5cyByZWZsZWN0IHRoZSBjdXJyZW50IGZpbGUgdHlwZS4KKwlUaGlzIG9wdGlvbiBpcyBub3JtYWxseSBzZXQgd2hlbiB0aGUgZmlsZSB0eXBlIGlzIGRldGVjdGVkLiAgVG8gZW5hYmxlCisJdGhpcyB1c2UgdGhlICI6ZmlsZXR5cGUgb24iIGNvbW1hbmQuIHw6ZmlsZXR5cGV8CisJU2V0dGluZyB0aGlzIG9wdGlvbiB0byBhIGRpZmZlcmVudCB2YWx1ZSBpcyBtb3N0IHVzZWZ1bCBpbiBhIG1vZGVsaW5lLAorCWZvciBhIGZpbGUgZm9yIHdoaWNoIHRoZSBmaWxlIHR5cGUgaXMgbm90IGF1dG9tYXRpY2FsbHkgcmVjb2duaXplZC4KKwlFeGFtcGxlLCBmb3IgaW4gYW4gSURMIGZpbGU6ID4KKwkJLyogdmltOiBzZXQgZmlsZXR5cGU9aWRsIDogKi8KKzwJfEZpbGVUeXBlfCB8ZmlsZXR5cGVzfAorCURvIG5vdCBjb25mdXNlIHRoaXMgb3B0aW9uIHdpdGggJ29zZmlsZXR5cGUnLCB3aGljaCBpcyBmb3IgdGhlIGZpbGUKKwl0eXBlIHRoYXQgaXMgYWN0dWFsbHkgc3RvcmVkIHdpdGggdGhlIGZpbGUuCisJVGhpcyBvcHRpb24gaXMgbm90IGNvcGllZCB0byBhbm90aGVyIGJ1ZmZlciwgaW5kZXBlbmRlbnQgb2YgdGhlICdzJyBvcgorCSdTJyBmbGFnIGluICdjcG9wdGlvbnMnLgorCisJCQkJCQkqJ2ZpbGxjaGFycycqIConZmNzJyoKKydmaWxsY2hhcnMnICdmY3MnCXN0cmluZwkoZGVmYXVsdCAidmVydDp8LGZvbGQ6LSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrd2luZG93c3wKKwkJCWFuZCB8K2ZvbGRpbmd8IGZlYXR1cmVzfQorCUNoYXJhY3RlcnMgdG8gZmlsbCB0aGUgc3RhdHVzbGluZXMgYW5kIHZlcnRpY2FsIHNlcGFyYXRvcnMuCisJSXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBpdGVtczoKKworCSAgaXRlbQkJZGVmYXVsdAkJVXNlZCBmb3IgfgorCSAgc3RsOmMJCScgJyBvciAnXicJc3RhdHVzbGluZSBvZiB0aGUgY3VycmVudCB3aW5kb3cKKwkgIHN0bG5jOmMJJyAnIG9yICctJwlzdGF0dXNsaW5lIG9mIHRoZSBub24tY3VycmVudCB3aW5kb3dzCisJICB2ZXJ0OmMJJ3wnCQl2ZXJ0aWNhbCBzZXBhcmF0b3JzIHw6dnNwbGl0fAorCSAgZm9sZDpjCSctJwkJZmlsbGluZyAnZm9sZHRleHQnCisJICBkaWZmOmMJJy0nCQlkZWxldGVkIGxpbmVzIG9mIHRoZSAnZGlmZicgb3B0aW9uCisKKwlBbnkgb25lIHRoYXQgaXMgb21pdHRlZCB3aWxsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdC4JRm9yICJzdGwiIGFuZAorCSJzdGxuYyIgdGhlIHNwYWNlIHdpbGwgYmUgdXNlZCB3aGVuIHRoZXJlIGlzIGhpZ2hsaWdodGluZywgJ14nIG9yICctJworCW90aGVyd2lzZS4KKworCUV4YW1wbGU6ID4KKwkgICAgOnNldCBmaWxsY2hhcnM9c3RsOl4sc3RsbmM6LSx2ZXJ0Olx8LGZvbGQ6LSxkaWZmOi0KKzwJVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBkZWZhdWx0LCBleGNlcHQgdGhhdCB0aGVzZSBjaGFyYWN0ZXJzIHdpbGwgYWxzbworCWJlIHVzZWQgd2hlbiB0aGVyZSBpcyBoaWdobGlnaHRpbmcuCisKKwlUaGUgaGlnaGxpZ2h0aW5nIHVzZWQgZm9yIHRoZXNlIGl0ZW1zOgorCSAgaXRlbQkJaGlnaGxpZ2h0IGdyb3VwIH4KKwkgIHN0bDpjCQlTdGF0dXNMaW5lCQl8aGwtU3RhdHVzTGluZXwKKwkgIHN0bG5jOmMJU3RhdHVzTGluZU5DCQl8aGwtU3RhdHVzTGluZU5DfAorCSAgdmVydDpjCVZlcnRTcGxpdAkJfGhsLVZlcnRTcGxpdHwKKwkgIGZvbGQ6YwlGb2xkZWQJCQl8aGwtRm9sZGVkfAorCSAgZGlmZjpjCURpZmZEZWxldGUJCXxobC1EaWZmRGVsZXRlfAorCisJCQkJCSonZmttYXAnKiAqJ2ZrJyogKidub2ZrbWFwJyogKidub2ZrJyoKKydma21hcCcgJ2ZrJwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCQkJKkUxOTgqCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgdGhlIGtleWJvYXJkIGlzIG1hcHBlZCBmb3IgdGhlIEZhcnNpIGNoYXJhY3RlciBzZXQuCisJTm9ybWFsbHkgeW91IHdvdWxkIHNldCAnYWxsb3dyZXZpbnMnIGFuZCB1c2UgQ1RSTC1fIGluIGluc2VydCBtb2RlIHRvCisJdG9nZ2xlIHRoaXMgb3B0aW9uIHxpX0NUUkwtX3wuCVNlZSB8ZmFyc2kudHh0fC4KKworCQkJCQkJKidmb2xkY2xvc2UnKiAqJ2ZjbCcqCisnZm9sZGNsb3NlJyAnZmNsJwlzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJV2hlbiBzZXQgdG8gImFsbCIsIGEgZm9sZCBpcyBjbG9zZWQgd2hlbiB0aGUgY3Vyc29yIGlzbid0IGluIGl0IGFuZAorCWl0cyBsZXZlbCBpcyBoaWdoZXIgdGhhbiAnZm9sZGxldmVsJy4gIFVzZWZ1bCBpZiB5b3Ugd2FudCBmb2xkcyB0bworCWF1dG9tYXRpY2FsbHkgY2xvc2Ugd2hlbiBtb3Zpbmcgb3V0IG9mIHRoZW0uCisKKwkJCQkJCSonZm9sZGNvbHVtbicqIConZmRjJyoKKydmb2xkY29sdW1uJyAnZmRjJwludW1iZXIgKGRlZmF1bHQgMCkKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlXaGVuIG5vbi16ZXJvLCBhIGNvbHVtbiB3aXRoIHRoZSBzcGVjaWZpZWQgd2lkdGggaXMgc2hvd24gYXQgdGhlIHNpZGUKKwlvZiB0aGUgd2luZG93IHdoaWNoIGluZGljYXRlcyBvcGVuIGFuZCBjbG9zZWQgZm9sZHMuICBUaGUgbWF4aW11bQorCXZhbHVlIGlzIDEyLgorCVNlZSB8Zm9sZGluZ3wuCisKKwkJCSonZm9sZGVuYWJsZScqIConZmVuJyogKidub2ZvbGRlbmFibGUnKiAqJ25vZmVuJyoKKydmb2xkZW5hYmxlJyAnZmVuJwlib29sZWFuIChkZWZhdWx0IG9uKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVdoZW4gb2ZmLCBhbGwgZm9sZHMgYXJlIG9wZW4uICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBxdWlja2x5CisJc3dpdGNoIGJldHdlZW4gc2hvd2luZyBhbGwgdGV4dCB1bmZvbGRlZCBhbmQgdmlld2luZyB0aGUgdGV4dCB3aXRoCisJZm9sZHMgKGluY2x1ZGluZyBtYW51YWxseSBvcGVuZWQgb3IgY2xvc2VkIGZvbGRzKS4gIEl0IGNhbiBiZSB0b2dnbGVkCisJd2l0aCB0aGUgfHppfCBjb21tYW5kLglUaGUgJ2ZvbGRjb2x1bW4nIHdpbGwgcmVtYWluIGJsYW5rIHdoZW4KKwknZm9sZGVuYWJsZScgaXMgb2ZmLgorCVRoaXMgb3B0aW9uIGlzIHNldCBieSBjb21tYW5kcyB0aGF0IGNyZWF0ZSBhIG5ldyBmb2xkIG9yIGNsb3NlIGEgZm9sZC4KKwlTZWUgfGZvbGRpbmd8LgorCisJCQkJCQkqJ2ZvbGRleHByJyogKidmZGUnKgorJ2ZvbGRleHByJyAnZmRlJwlzdHJpbmcgKGRlZmF1bHQ6ICIwIikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJb3IgfCtldmFsfCBmZWF0dXJlfQorCVRoZSBleHByZXNzaW9uIHVzZWQgZm9yIHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJleHByIi4gIEl0IGlzIGV2YWx1YXRlZAorCWZvciBlYWNoIGxpbmUgdG8gb2J0YWluIGl0cyBmb2xkIGxldmVsLiAgU2VlIHxmb2xkLWV4cHJ8LiAgQWxzbyBzZWUKKwl8ZXZhbC1zYW5kYm94fC4KKworCQkJCQkJKidmb2xkaWdub3JlJyogKidmZGknKgorJ2ZvbGRpZ25vcmUnICdmZGknCXN0cmluZyAoZGVmYXVsdDogIiMiKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVVzZWQgb25seSB3aGVuICdmb2xkbWV0aG9kJyBpcyAiaW5kZW50Ii4gIExpbmVzIHN0YXJ0aW5nIHdpdGgKKwljaGFyYWN0ZXJzIGluICdmb2xkaWdub3JlJyB3aWxsIGdldCB0aGVpciBmb2xkIGxldmVsIGZyb20gc3Vycm91bmRpbmcKKwlsaW5lcy4JV2hpdGUgc3BhY2UgaXMgc2tpcHBlZCBiZWZvcmUgY2hlY2tpbmcgZm9yIHRoaXMgY2hhcmFjdGVyLgorCVRoZSBkZWZhdWx0ICIjIiB3b3JrcyB3ZWxsIGZvciBDIHByb2dyYW1zLiAgU2VlIHxmb2xkLWluZGVudHwuCisKKwkJCQkJCSonZm9sZGxldmVsJyogKidmZGwnKgorJ2ZvbGRsZXZlbCcgJ2ZkbCcJbnVtYmVyIChkZWZhdWx0OiAwKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVNldHMgdGhlIGZvbGQgbGV2ZWw6IEZvbGRzIHdpdGggYSBoaWdoZXIgbGV2ZWwgd2lsbCBiZSBjbG9zZWQuCisJU2V0dGluZyB0aGlzIG9wdGlvbiB0byB6ZXJvIHdpbGwgY2xvc2UgYWxsIGZvbGRzLiAgSGlnaGVyIG51bWJlcnMgd2lsbAorCWNsb3NlIGZld2VyIGZvbGRzLgorCVRoaXMgb3B0aW9uIGlzIHNldCBieSBjb21tYW5kcyBsaWtlIHx6bXwsIHx6TXwgYW5kIHx6UnwuCisJU2VlIHxmb2xkLWZvbGRsZXZlbHwuCisKKwkJCQkJCSonZm9sZGxldmVsc3RhcnQnKiAqJ2ZkbHMnKgorJ2ZvbGRsZXZlbHN0YXJ0JyAnZmRscycJbnVtYmVyIChkZWZhdWx0OiAtMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlTZXRzICdmb2xkbGV2ZWwnIHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhbm90aGVyIGJ1ZmZlciBpbiBhIHdpbmRvdy4KKwlVc2VmdWwgdG8gYWx3YXlzIHN0YXJ0IGVkaXRpbmcgd2l0aCBhbGwgZm9sZHMgY2xvc2VkICh2YWx1ZSB6ZXJvKSwKKwlzb21lIGZvbGRzIGNsb3NlZCAob25lKSBvciBubyBmb2xkcyBjbG9zZWQgKDk5KS4KKwlUaGlzIGlzIGRvbmUgYmVmb3JlIHJlYWRpbmcgYW55IG1vZGVsaW5lLCB0aHVzIGEgc2V0dGluZyBpbiBhIG1vZGVsaW5lCisJb3ZlcnJ1bGVzIHRoaXMgb3B0aW9uLglTdGFydGluZyB0byBlZGl0IGEgZmlsZSBmb3IgfGRpZmYtbW9kZXwgYWxzbworCWlnbm9yZXMgdGhpcyBvcHRpb24gYW5kIGNsb3NlcyBhbGwgZm9sZHMuCisJSXQgaXMgYWxzbyBkb25lIGJlZm9yZSBCdWZSZWFkUHJlIGF1dG9jb21tYW5kcywgdG8gYWxsb3cgYW4gYXV0b2NtZCB0bworCW92ZXJydWxlIHRoZSAnZm9sZGxldmVsJyB2YWx1ZSBmb3Igc3BlY2lmaWMgZmlsZXMuCisJV2hlbiB0aGUgdmFsdWUgaXMgbmVnYXRpdmUsIGl0IGlzIG5vdCB1c2VkLgorCisJCQkJCQkqJ2ZvbGRtYXJrZXInKiAqJ2ZtcicqICpFNTM2KgorJ2ZvbGRtYXJrZXInICdmbXInCXN0cmluZyAoZGVmYXVsdDogInt7eyx9fX0iKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVRoZSBzdGFydCBhbmQgZW5kIG1hcmtlciB1c2VkIHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJtYXJrZXIiLiAgVGhlcmUKKwltdXN0IGJlIG9uZSBjb21tYSwgd2hpY2ggc2VwYXJhdGVzIHRoZSBzdGFydCBhbmQgZW5kIG1hcmtlci4gIFRoZQorCW1hcmtlciBpcyBhIGxpdGVyYWwgc3RyaW5nIChhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3b3VsZCBiZSB0b28gc2xvdykuCisJU2VlIHxmb2xkLW1hcmtlcnwuCisKKwkJCQkJCSonZm9sZG1ldGhvZCcqIConZmRtJyoKKydmb2xkbWV0aG9kJyAnZmRtJwlzdHJpbmcgKGRlZmF1bHQ6ICJtYW51YWwiKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVRoZSBraW5kIG9mIGZvbGRpbmcgdXNlZCBmb3IgdGhlIGN1cnJlbnQgd2luZG93LiAgUG9zc2libGUgdmFsdWVzOgorCXxmb2xkLW1hbnVhbHwJbWFudWFsCSAgICBGb2xkcyBhcmUgY3JlYXRlZCBtYW51YWxseS4KKwl8Zm9sZC1pbmRlbnR8CWluZGVudAkgICAgTGluZXMgd2l0aCBlcXVhbCBpbmRlbnQgZm9ybSBhIGZvbGQuCisJfGZvbGQtZXhwcnwJZXhwcgkgICAgJ2ZvbGRleHByJyBnaXZlcyB0aGUgZm9sZCBsZXZlbCBvZiBhIGxpbmUuCisJfGZvbGQtbWFya2VyfAltYXJrZXIJICAgIE1hcmtlcnMgYXJlIHVzZWQgdG8gc3BlY2lmeSBmb2xkcy4KKwl8Zm9sZC1zeW50YXh8CXN5bnRheAkgICAgU3ludGF4IGhpZ2hsaWdodGluZyBpdGVtcyBzcGVjaWZ5IGZvbGRzLgorCXxmb2xkLWRpZmZ8CWRpZmYJICAgIEZvbGQgdGV4dCB0aGF0IGlzIG5vdCBjaGFuZ2VkLgorCisJCQkJCQkqJ2ZvbGRtaW5saW5lcycqIConZm1sJyoKKydmb2xkbWlubGluZXMnICdmbWwnCW51bWJlciAoZGVmYXVsdDogMSkKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlTZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBzY3JlZW4gbGluZXMgZm9yIGEgZm9sZCB0byBiZSBkaXNwbGF5ZWQKKwljbG9zZWQuICBBbHNvIGZvciBtYW51YWxseSBjbG9zZWQgZm9sZHMuCisJTm90ZSB0aGF0IHRoaXMgb25seSBoYXMgYW4gZWZmZWN0IG9mIHdoYXQgaXMgZGlzcGxheWVkLiAgQWZ0ZXIgdXNpbmcKKwkiemMiIHRvIGNsb3NlIGEgZm9sZCwgd2hpY2ggaXMgZGlzcGxheWVkIG9wZW4gYmVjYXVzZSBpdCdzIHNtYWxsZXIKKwl0aGFuICdmb2xkbWlubGluZXMnLCBhIGZvbGxvd2luZyAiemMiIG1heSBjbG9zZSBhIGNvbnRhaW5pbmcgZm9sZC4KKworCQkJCQkJKidmb2xkbmVzdG1heCcqIConZmRuJyoKKydmb2xkbmVzdG1heCcgJ2ZkbicJbnVtYmVyIChkZWZhdWx0OiAyMCkKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlTZXRzIHRoZSBtYXhpbXVtIG5lc3Rpbmcgb2YgZm9sZHMgZm9yIHRoZSAiaW5kZW50IiBhbmQgInN5bnRheCIKKwltZXRob2RzLiAgVGhpcyBhdm9pZHMgdGhhdCB0b28gbWFueSBmb2xkcyB3aWxsIGJlIGNyZWF0ZWQuICBVc2luZyBtb3JlCisJdGhhbiAyMCBkb2Vzbid0IHdvcmssIGJlY2F1c2UgdGhlIGludGVybmFsIGxpbWl0IGlzIDIwLgorCisJCQkJCQkqJ2ZvbGRvcGVuJyogKidmZG8nKgorJ2ZvbGRvcGVuJyAnZmRvJwlzdHJpbmcgKGRlZmF1bHQ6ICJibG9jayxob3IsbWFyayxwZXJjZW50LHF1aWNrZml4LAorCQkJCQkJCSAgICAgc2VhcmNoLHRhZyx1bmRvIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlTcGVjaWZpZXMgZm9yIHdoaWNoIHR5cGUgb2YgY29tbWFuZHMgZm9sZHMgd2lsbCBiZSBvcGVuZWQsIGlmIHRoZQorCWNvbW1hbmQgbW92ZXMgdGhlIGN1cnNvciBpbnRvIGEgY2xvc2VkIGZvbGQuICBJdCBpcyBhIGNvbW1hIHNlcGFyYXRlZAorCWxpc3Qgb2YgaXRlbXMuCisJCWl0ZW0JCWNvbW1hbmRzIH4KKwkJYWxsCQlhbnkKKwkJYmxvY2sJCSIoIiwgInsiLCAiW1siLCAiW3siLCBldGMuCisJCWhvcgkJaG9yaXpvbnRhbCBtb3ZlbWVudHM6ICJsIiwgInciLCAiZngiLCBldGMuCisJCWluc2VydAkJYW55IGNvbW1hbmQgaW4gSW5zZXJ0IG1vZGUKKwkJanVtcAkJZmFyIGp1bXBzOiAiRyIsICJnZyIsIGV0Yy4KKwkJbWFyawkJanVtcGluZyB0byBhIG1hcms6ICInbSIsIENUUkwtTywgZXRjLgorCQlwZXJjZW50CQkiJSIKKwkJcXVpY2tmaXgJIjpjbiIsICI6Y3JldyIsICI6bWFrZSIsIGV0Yy4KKwkJc2VhcmNoCQlzZWFyY2ggZm9yIGEgcGF0dGVybjogIi8iLCAibiIsICIqIiwgImdkIiwgZXRjLgorCQkJCShub3QgZm9yIGEgc2VhcmNoIHBhdHRlcm4gaW4gYSAiOiIgY29tbWFuZCkKKwkJdGFnCQlqdW1waW5nIHRvIGEgdGFnOiAiOnRhIiwgQ1RSTC1ULCBldGMuCisJCXVuZG8JCXVuZG8gb3IgcmVkbzogInUiIGFuZCBDVFJMLVIKKwlXaGVuIHRoZSBjb21tYW5kIGlzIHBhcnQgb2YgYSBtYXBwaW5nIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLglBZGQKKwl0aGUgfHp2fCBjb21tYW5kIHRvIHRoZSBtYXBwaW5nIHRvIGdldCB0aGUgc2FtZSBlZmZlY3QuCisJV2hlbiBhIG1vdmVtZW50IGNvbW1hbmQgaXMgdXNlZCBmb3IgYW4gb3BlcmF0b3IgKGUuZy4sICJkbCIgb3IgInklIikKKwl0aGlzIG9wdGlvbiBpcyBub3QgdXNlZC4gIFRoaXMgbWVhbnMgdGhlIG9wZXJhdG9yIHdpbGwgaW5jbHVkZSB0aGUKKwl3aG9sZSBjbG9zZWQgZm9sZC4KKwlOb3RlIHRoYXQgdmVydGljYWwgbW92ZW1lbnRzIGFyZSBub3QgaGVyZSwgYmVjYXVzZSBpdCB3b3VsZCBtYWtlIGl0CisJdmVyeSBkaWZmaWN1bHQgdG8gbW92ZSBvbnRvIGEgY2xvc2VkIGZvbGQuCisJSW4gaW5zZXJ0IG1vZGUgdGhlIGZvbGRzIGNvbnRhaW5pbmcgdGhlIGN1cnNvciB3aWxsIGFsd2F5cyBiZSBvcGVuCisJd2hlbiB0ZXh0IGlzIGluc2VydGVkLgorCVRvIGNsb3NlIGZvbGRzIHlvdSBjYW4gcmUtYXBwbHkgJ2ZvbGRsZXZlbCcgd2l0aCB0aGUgfHp4fCBjb21tYW5kIG9yCisJc2V0IHRoZSAnZm9sZGNsb3NlJyBvcHRpb24gdG8gImFsbCIuCisKKwkJCQkJCSonZm9sZHRleHQnKiAqJ2ZkdCcqCisnZm9sZHRleHQnICdmZHQnCXN0cmluZyAoZGVmYXVsdDogImZvbGR0ZXh0KCkiKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCUFuIGV4cHJlc3Npb24gd2hpY2ggaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSB0ZXh0IGRpc3BsYXllZCBmb3IgYSBjbG9zZWQKKwlmb2xkLiAgU2VlIHxmb2xkLWZvbGR0ZXh0fC4KKworCQkJCQkqJ2Zvcm1hdG9wdGlvbnMnKiAqJ2ZvJyoKKydmb3JtYXRvcHRpb25zJyAnZm8nCXN0cmluZyAoVmltIGRlZmF1bHQ6ICJ0Y3EiLCBWaSBkZWZhdWx0OiAidnQiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVRoaXMgaXMgYSBzZXF1ZW5jZSBvZiBsZXR0ZXJzIHdoaWNoIGRlc2NyaWJlcyBob3cgYXV0b21hdGljCisJZm9ybWF0dGluZyBpcyB0byBiZSBkb25lLiAgU2VlIHxmby10YWJsZXwuICBXaGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcworCW9uLCBubyBmb3JtYXR0aW5nIGlzIGRvbmUgKGxpa2UgJ2Zvcm1hdG9wdGlvbnMnIGlzIGVtcHR5KS4gIENvbW1hcyBjYW4KKwliZSBpbnNlcnRlZCBmb3IgcmVhZGFiaWxpdHkuCisJVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBmbGFncyB0aGF0IGFyZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCB1c2UgdGhlCisJIis9IiBhbmQgIi09IiBmZWF0dXJlIG9mICI6c2V0IiB8YWRkLW9wdGlvbi1mbGFnc3wuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSonZm9ybWF0cHJnJyogKidmcCcqCisnZm9ybWF0cHJnJyAnZnAnCXN0cmluZyAoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgbmFtZSBvZiBhbiBleHRlcm5hbCBwcm9ncmFtIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGZvcm1hdCB0aGUgbGluZXMKKwlzZWxlY3RlZCB3aXRoIHRoZSAiZ3EiIGNvbW1hbmQuICBUaGUgcHJvZ3JhbSBtdXN0IHRha2UgdGhlIGlucHV0IG9uCisJc3RkaW4gYW5kIHByb2R1Y2UgdGhlIG91dHB1dCBvbiBzdGRvdXQuICBUaGUgVW5peCBwcm9ncmFtICJmbXQiIGlzCisJc3VjaCBhIHByb2dyYW0uICBJZiB0aGlzIG9wdGlvbiBpcyBhbiBlbXB0eSBzdHJpbmcsIHRoZSBpbnRlcm5hbAorCWZvcm1hdCBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgfEMtaW5kZW50aW5nfC4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKwlleHBhbmRlZCB8OnNldF9lbnZ8LiAgU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzCisJYW5kIGJhY2tzbGFzaGVzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCSAgIConZ2RlZmF1bHQnKiAqJ2dkJyogKidub2dkZWZhdWx0JyogKidub2dkJyoKKydnZGVmYXVsdCcgJ2dkJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiwgdGhlICI6c3Vic3RpdHV0ZSIgZmxhZyAnZycgaXMgZGVmYXVsdCBvbi4gIFRoaXMgbWVhbnMgdGhhdAorCWFsbCBtYXRjaGVzIGluIGEgbGluZSBhcmUgc3Vic3RpdHV0ZWQgaW5zdGVhZCBvZiBvbmUuICBXaGVuIGEgJ2cnIGZsYWcKKwlpcyBnaXZlbiB0byBhICI6c3Vic3RpdHV0ZSIgY29tbWFuZCwgdGhpcyB3aWxsIHRvZ2dsZSB0aGUgc3Vic3RpdHV0aW9uCisJb2YgYWxsIG9yIG9uZSBtYXRjaC4gIFNlZSB8Y29tcGxleC1jaGFuZ2V8LgorCisJCWNvbW1hbmQJCSdnZGVmYXVsdCcgb24JJ2dkZWZhdWx0JyBvZmYJfgorCQk6cy8vLwkJICBzdWJzdC4gYWxsCSAgc3Vic3QuIG9uZQorCQk6cy8vL2cJCSAgc3Vic3QuIG9uZQkgIHN1YnN0LiBhbGwKKwkJOnMvLy9nZwkJICBzdWJzdC4gYWxsCSAgc3Vic3QuIG9uZQorCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2dyZXBmb3JtYXQnKiAqJ2dmbScqCisnZ3JlcGZvcm1hdCcgJ2dmbScJc3RyaW5nCShkZWZhdWx0ICIlZjolbCVtLCVmICAlbCVtIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlGb3JtYXQgdG8gcmVjb2duaXplIGZvciB0aGUgIjpncmVwIiBjb21tYW5kIG91dHB1dC4KKwlUaGlzIGlzIGEgc2NhbmYtbGlrZSBzdHJpbmcgdGhhdCB1c2VzIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKKwknZXJyb3Jmb3JtYXQnIG9wdGlvbjogc2VlIHxlcnJvcmZvcm1hdHwuCisKKwkJCQkJCSonZ3JlcHByZycqIConZ3AnKgorJ2dyZXBwcmcnICdncCcJCXN0cmluZwkoZGVmYXVsdCAiZ3JlcCAtbiAiLAorCQkJCQlVbml4OiAiZ3JlcCAtbiAkKiAvZGV2L251bGwiLAorCQkJCQlXaW4zMjogImZpbmRzdHIgL24iIG9yICJncmVwIC1uIiwKKwkJCQkJCSAgICAgIFZNUzogIlNFQVJDSC9OVU1CRVJTICIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCVByb2dyYW0gdG8gdXNlIGZvciB0aGUgIjpncmVwIiBjb21tYW5kLiBUaGlzIG9wdGlvbiBtYXkgY29udGFpbiAnJScKKwlhbmQgJyMnIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSBleHBhbmRlZCBsaWtlIHdoZW4gdXNlZCBpbiBhIGNvbW1hbmQtCisJbGluZS4gIFRoZSBwbGFjZWhvbGRlciAiJCoiIGlzIGFsbG93ZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgYXJndW1lbnRzCisJd2lsbCBiZSBpbmNsdWRlZC4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4gIFNlZQorCXxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlXaGVuIHlvdXIgImdyZXAiIGFjY2VwdHMgdGhlICItSCIgYXJndW1lbnQsIHVzZSB0aGlzIHRvIG1ha2UgIjpncmVwIgorCWFsc28gd29yayB3ZWxsIHdpdGggYSBzaW5nbGUgZmlsZTogPgorCQk6c2V0IGdyZXBwcmc9Z3JlcFwgLW5ICis8CVNlZSBhbHNvIHRoZSBzZWN0aW9uIHw6bWFrZV9tYWtlcHJnfCwgc2luY2UgbW9zdCBvZiB0aGUgY29tbWVudHMgdGhlcmUKKwlhcHBseSBlcXVhbGx5IHRvICdncmVwcHJnJy4KKwlGb3IgV2luMzIsIHRoZSBkZWZhdWx0IGlzICJmaW5kc3RyIC9uIiBpZiAiZmluZHN0ci5leGUiIGNhbiBiZSBmb3VuZCwKKwlvdGhlcndpc2UgaXQncyAiZ3JlcCAtbiIuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkqJ2d1aWN1cnNvcicqIConZ2NyJyogKkU1NDUqICpFNTQ2KiAqRTU0OCogKkU1NDkqCisnZ3VpY3Vyc29yJyAnZ2NyJwlzdHJpbmcJKGRlZmF1bHQgIm4tdi1jOmJsb2NrLUN1cnNvci9sQ3Vyc29yLAorCQkJCQl2ZTp2ZXIzNS1DdXJzb3IsCisJCQkJCW86aG9yNTAtQ3Vyc29yLAorCQkJCQlpLWNpOnZlcjI1LUN1cnNvci9sQ3Vyc29yLAorCQkJCQlyLWNyOmhvcjIwLUN1cnNvci9sQ3Vyc29yLAorCQkJCQlzbTpibG9jay1DdXJzb3IKKwkJCQkJLWJsaW5rd2FpdDE3NS1ibGlua29mZjE1MC1ibGlua29uMTc1IiwKKwkJCQlmb3IgTVMtRE9TIGFuZCBXaW4zMiBjb25zb2xlOgorCQkJCQkibi12LWM6YmxvY2ssbzpob3I1MCxpLWNpOmhvcjE1LAorCQkJCQlyLWNyOmhvcjMwLHNtOmJsb2NrIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggR1VJIGVuYWJsZWQsIGFuZAorCQkJZm9yIE1TLURPUyBhbmQgV2luMzIgY29uc29sZX0KKwlUaGlzIG9wdGlvbiB0ZWxscyBWaW0gd2hhdCB0aGUgY3Vyc29yIHNob3VsZCBsb29rIGxpa2UgaW4gZGlmZmVyZW50CisJbW9kZXMuCUl0IGZ1bGx5IHdvcmtzIGluIHRoZSBHVUkuICBJbiBhbiBNU0RPUyBvciBXaW4zMiBjb25zb2xlLCBvbmx5CisJdGhlIGhlaWdodCBvZiB0aGUgY3Vyc29yIGNhbiBiZSBjaGFuZ2VkLiAgVGhpcyBjYW4gYmUgZG9uZSBieQorCXNwZWNpZnlpbmcgYSBibG9jayBjdXJzb3IsIG9yIGEgcGVyY2VudGFnZSBmb3IgYSB2ZXJ0aWNhbCBvcgorCWhvcml6b250YWwgY3Vyc29yLgorCisJVGhlIG9wdGlvbiBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcnRzLglFYWNoIHBhcnQgY29uc2lzdCBvZiBhCisJbW9kZS1saXN0IGFuZCBhbiBhcmd1bWVudC1saXN0OgorCQltb2RlLWxpc3Q6YXJndW1lbnQtbGlzdCxtb2RlLWxpc3Q6YXJndW1lbnQtbGlzdCwuLgorCVRoZSBtb2RlLWxpc3QgaXMgYSBkYXNoIHNlcGFyYXRlZCBsaXN0IG9mIHRoZXNlIG1vZGVzOgorCQluCU5vcm1hbCBtb2RlCisJCXYJVmlzdWFsIG1vZGUKKwkJdmUJVmlzdWFsIG1vZGUgd2l0aCAnc2VsZWN0aW9uJyAiZXhjbHVzaXZlIiAoc2FtZSBhcyAndicsCisJCQlpZiBub3Qgc3BlY2lmaWVkKQorCQlvCU9wZXJhdG9yLXBlbmRpbmcgbW9kZQorCQlpCUluc2VydCBtb2RlCisJCXIJUmVwbGFjZSBtb2RlCisJCWMJQ29tbWFuZC1saW5lIE5vcm1hbCAoYXBwZW5kKSBtb2RlCisJCWNpCUNvbW1hbmQtbGluZSBJbnNlcnQgbW9kZQorCQljcglDb21tYW5kLWxpbmUgUmVwbGFjZSBtb2RlCisJCXNtCXNob3dtYXRjaCBpbiBJbnNlcnQgbW9kZQorCQlhCWFsbCBtb2RlcworCVRoZSBhcmd1bWVudC1saXN0IGlzIGEgZGFzaCBzZXBhcmF0ZWQgbGlzdCBvZiB0aGVzZSBhcmd1bWVudHM6CisJCWhvcntOfQlob3Jpem9udGFsIGJhciwge059IHBlcmNlbnQgb2YgdGhlIGNoYXJhY3RlciBoZWlnaHQKKwkJdmVye059CXZlcnRpY2FsIGJhciwge059IHBlcmNlbnQgb2YgdGhlIGNoYXJhY3RlciB3aWR0aAorCQlibG9jawlibG9jayBjdXJzb3IsIGZpbGxzIHRoZSB3aG9sZSBjaGFyYWN0ZXIKKwkJCVtvbmx5IG9uZSBvZiB0aGUgYWJvdmUgdGhyZWUgc2hvdWxkIGJlIHByZXNlbnRdCisJCWJsaW5rd2FpdHtOfQkJCQkqY3Vyc29yLWJsaW5raW5nKgorCQlibGlua29ue059CisJCWJsaW5rb2Zme059CisJCQlibGluayB0aW1lcyBmb3IgY3Vyc29yOiBibGlua3dhaXQgaXMgdGhlIGRlbGF5IGJlZm9yZQorCQkJdGhlIGN1cnNvciBzdGFydHMgYmxpbmtpbmcsIGJsaW5rb24gaXMgdGhlIHRpbWUgdGhhdAorCQkJdGhlIGN1cnNvciBpcyBzaG93biBhbmQgYmxpbmtvZmYgaXMgdGhlIHRpbWUgdGhhdCB0aGUKKwkJCWN1cnNvciBpcyBub3Qgc2hvd24uICBUaGUgdGltZXMgYXJlIGluIG1zZWMuICBXaGVuIG9uZQorCQkJb2YgdGhlIG51bWJlcnMgaXMgemVybywgdGhlcmUgaXMgbm8gYmxpbmtpbmcuICBUaGUKKwkJCWRlZmF1bHQgaXM6ICJibGlua3dhaXQ3MDAtYmxpbmtvbjQwMC1ibGlua29mZjI1MCIuCisJCQlUaGVzZSBudW1iZXJzIGFyZSB1c2VkIGZvciBhIG1pc3NpbmcgZW50cnkuICBUaGlzCisJCQltZWFucyB0aGF0IGJsaW5raW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIFRvIHN3aXRjaAorCQkJYmxpbmtpbmcgb2ZmIHlvdSBjYW4gdXNlICJibGlua29uMCIuICBUaGUgY3Vyc29yIG9ubHkKKwkJCWJsaW5rcyB3aGVuIFZpbSBpcyB3YWl0aW5nIGZvciBpbnB1dCwgbm90IHdoaWxlCisJCQlleGVjdXRpbmcgYSBjb21tYW5kLgorCQkJVG8gbWFrZSB0aGUgY3Vyc29yIGJsaW5rIGluIGFuIHh0ZXJtLCBzZWUKKwkJCXx4dGVybS1ibGlua3wuCisJCXtncm91cC1uYW1lfQorCQkJYSBoaWdobGlnaHQgZ3JvdXAgbmFtZSwgdGhhdCBzZXRzIHRoZSBjb2xvciBhbmQgZm9udAorCQkJZm9yIHRoZSBjdXJzb3IKKwkJe2dyb3VwLW5hbWV9L3tncm91cC1uYW1lfQorCQkJVHdvIGhpZ2hsaWdodCBncm91cCBuYW1lcywgdGhlIGZpcnN0IGlzIHVzZWQgd2hlbgorCQkJbm8gbGFuZ3VhZ2UgbWFwcGluZ3MgYXJlIHVzZWQsIHRoZSBvdGhlciB3aGVuIHRoZXkKKwkJCWFyZS4gfGxhbmd1YWdlLW1hcHBpbmd8CisKKwlFeGFtcGxlcyBvZiBwYXJ0czoKKwkgICBuLWMtdjpibG9jay1uQ3Vyc29yCWluIE5vcm1hbCwgQ29tbWFuZC1saW5lIGFuZCBWaXN1YWwgbW9kZSwgdXNlIGEKKwkJCQlibG9jayBjdXJzb3Igd2l0aCBjb2xvcnMgZnJvbSB0aGUgIm5DdXJzb3IiCisJCQkJaGlnaGxpZ2h0IGdyb3VwCisJICAgaS1jaTp2ZXIzMC1pQ3Vyc29yLWJsaW5rd2FpdDMwMC1ibGlua29uMjAwLWJsaW5rb2ZmMTUwCisJCQkJSW4gSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgSW5zZXJ0IG1vZGUsIHVzZSBhCisJCQkJMzAlIHZlcnRpY2FsIGJhciBjdXJzb3Igd2l0aCBjb2xvcnMgZnJvbSB0aGUKKwkJCQkiaUN1cnNvciIgaGlnaGxpZ2h0IGdyb3VwLiAgQmxpbmsgYSBiaXQKKwkJCQlmYXN0ZXIuCisKKwlUaGUgJ2EnIG1vZGUgaXMgZGlmZmVyZW50LiAgSXQgd2lsbCBzZXQgdGhlIGdpdmVuIGFyZ3VtZW50LWxpc3QgZm9yCisJYWxsIG1vZGVzLiAgSXQgZG9lcyBub3QgcmVzZXQgYW55dGhpbmcgdG8gZGVmYXVsdHMuICBUaGlzIGNhbiBiZSB1c2VkCisJdG8gZG8gYSBjb21tb24gc2V0dGluZyBmb3IgYWxsIG1vZGVzLiAgRm9yIGV4YW1wbGUsIHRvIHN3aXRjaCBvZmYKKwlibGlua2luZzogImE6YmxpbmtvbjAiCisKKwlFeGFtcGxlcyBvZiBjdXJzb3IgaGlnaGxpZ2h0aW5nOiA+CisJICAgIDpoaWdobGlnaHQgQ3Vyc29yIGd1aT1yZXZlcnNlIGd1aWZnPU5PTkUgZ3VpYmc9Tk9ORQorCSAgICA6aGlnaGxpZ2h0IEN1cnNvciBndWk9Tk9ORSBndWlmZz1iZyBndWliZz1mZworPAorCQkJCQkqJ2d1aWZvbnQnKiAqJ2dmbicqCisJCQkJCQkgICAqRTIzNSogKkU1OTYqICpFNjEwKiAqRTYxMSoKKydndWlmb250JyAnZ2ZuJwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZH0KKwlUaGlzIGlzIGEgbGlzdCBvZiBmb250cyB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0uCisJSW4gaXRzIHNpbXBsZXN0IGZvcm0gdGhlIHZhbHVlIGlzIGp1c3Qgb25lIGZvbnQgbmFtZS4gIFdoZW4KKwl0aGUgZm9udCBjYW5ub3QgYmUgZm91bmQgeW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBUbyB0cnkgb3RoZXIKKwlmb250IG5hbWVzIGEgbGlzdCBjYW4gYmUgc3BlY2lmaWVkLCBmb250IG5hbWVzIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4KKwlUaGUgZmlyc3QgdmFsaWQgZm9udCBpcyB1c2VkLgorCVdoZW4gJ2d1aWZvbnRzZXQnIGlzIG5vdCBlbXB0eSwgJ2d1aWZvbnQnIGlzIG5vdCB1c2VkLgorCVNwYWNlcyBhZnRlciBhIGNvbW1hIGFyZSBpZ25vcmVkLiAgVG8gaW5jbHVkZSBhIGNvbW1hIGluIGEgZm9udCBuYW1lCisJcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoLiAgU2V0dGluZyBhbiBvcHRpb24gcmVxdWlyZXMgYW4gZXh0cmEKKwliYWNrc2xhc2ggYmVmb3JlIGEgc3BhY2UgYW5kIGEgYmFja3NsYXNoLiAgU2VlIGFsc28KKwl8b3B0aW9uLWJhY2tzbGFzaHwuICBGb3IgZXhhbXBsZTogPgorCSAgICA6c2V0IGd1aWZvbnQ9U2NyZWVuMTUsXCA3eDEzLGZvbnRcXCx3aXRoXFwsY29tbWFzCis8CXdpbGwgbWFrZSB2aW0gdHJ5IHRvIHVzZSB0aGUgZm9udCAiU2NyZWVuMTUiIGZpcnN0LCBhbmQgaWYgaXQgZmFpbHMgaXQKKwl3aWxsIHRyeSB0byB1c2UgIjd4MTMiIGFuZCB0aGVuICJmb250LHdpdGgsY29tbWFzIiBpbnN0ZWFkLgorCUZvciB0aGUgR1RLKyAyIEdVSSB0aGUgZm9udCBuYW1lIGxvb2tzIGxpa2UgdGhpczogPgorCSAgICA6c2V0IGd1aWZvbnQ9QW5kYWxlXCBNb25vXCAxMQorPAlUaGF0J3MgYWxsLiAgWExGRHMgYXJlIG5vIGxvbmdlciBhY2NlcHRlZC4KKwkJCQkJCQkJKkUyMzYqCisJTm90ZSB0aGF0IHRoZSBmb250cyBtdXN0IGJlIG1vbm8tc3BhY2VkIChhbGwgY2hhcmFjdGVycyBoYXZlIHRoZSBzYW1lCisJd2lkdGgpLgorCVRvIHByZXZpZXcgYSBmb250IG9uIFgxMSwgeW91IG1pZ2h0IGJlIGFibGUgdG8gdXNlIHRoZSAieGZvbnRzZWwiCisJcHJvZ3JhbS4gIFRoZSAieGxzZm9udHMiIHByb2dyYW0gZ2l2ZXMgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgZm9udHMuCisJRm9yIFdpbjMyLCBHVEsgYW5kIFBob3RvbiBvbmx5OiA+CisJICAgIDpzZXQgZ3VpZm9udD0qCis8CXdpbGwgYnJpbmcgdXAgYSBmb250IHJlcXVlc3Rlciwgd2hlcmUgeW91IGNhbiBwaWNrIHRoZSBmb250IHlvdSB3YW50LgorCUlmIG5vbmUgb2YgdGhlIGZvbnRzIGNhbiBiZSBsb2FkZWQsIHZpbSB3aWxsIGtlZXAgdGhlIGN1cnJlbnQgc2V0dGluZy4KKwlJZiBhbiBlbXB0eSBmb250IGxpc3QgaXMgZ2l2ZW4sIHZpbSB3aWxsIHRyeSB1c2luZyBvdGhlciByZXNvdXJjZQorCXNldHRpbmdzIChmb3IgWCwgaXQgd2lsbCB1c2UgdGhlIFZpbS5mb250IHJlc291cmNlKSwgYW5kIGZpbmFsbHkgaXQKKwl3aWxsIHRyeSBzb21lIGJ1aWx0aW4gZGVmYXVsdCB3aGljaCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlICgiN3gxMyIgaW4KKwl0aGUgY2FzZSBvZiBYKS4gIFRoZSBmb250IG5hbWVzIGdpdmVuIHNob3VsZCBiZSAibm9ybWFsIiBmb250cy4gIFZpbQorCXdpbGwgdHJ5IHRvIGZpbmQgdGhlIHJlbGF0ZWQgYm9sZCBhbmQgaXRhbGljIGZvbnRzLgorCUZvciB0aGUgV2luMzIgR1VJCQkJCQkqRTI0NCogKkUyNDUqCisJLSB0YWtlcyB0aGVzZSBvcHRpb25zIGluIHRoZSBmb250IG5hbWU6CisJCWhYWCAtIGhlaWdodCBpcyBYWCAocG9pbnRzLCBjYW4gYmUgZmxvYXRpbmctcG9pbnQpCisJCXdYWCAtIHdpZHRoIGlzIFhYIChwb2ludHMsIGNhbiBiZSBmbG9hdGluZy1wb2ludCkKKwkJYiAgIC0gYm9sZAorCQlpICAgLSBpdGFsaWMKKwkJdSAgIC0gdW5kZXJsaW5lCisJCXMgICAtIHN0cmlrZW91dAorCQljWFggLSBjaGFyYWN0ZXIgc2V0IFhYLiB2YWxpZCBjaGFyc2V0cyBhcmU6IEFOU0ksIEFSQUJJQywKKwkJICAgICAgQkFMVElDLCBDSElORVNFQklHNSwgREVGQVVMVCwgRUFTVEVVUk9QRSwgR0IyMzEyLCBHUkVFSywKKwkJICAgICAgSEFOR0VVTCwgSEVCUkVXLCBKT0hBQiwgTUFDLCBPRU0sIFJVU1NJQU4sIFNISUZUSklTLAorCQkgICAgICBTWU1CT0wsIFRIQUksIFRVUktJU0gsIFZJRVROQU1FU0UgQU5TSSBhbmQgQkFMVElDLgorCisJICBVc2UgYSAnOicgdG8gc2VwYXJhdGUgdGhlIG9wdGlvbnMuCisJLSBBICdfJyBjYW4gYmUgdXNlZCBpbiB0aGUgcGxhY2Ugb2YgYSBzcGFjZSwgc28geW91IGRvbid0IG5lZWQgdG8gdXNlCisJICBiYWNrc2xhc2hlcyB0byBlc2NhcGUgdGhlIHNwYWNlcy4KKwktIEV4YW1wbGVzOiA+CisJICAgIDpzZXQgZ3VpZm9udD1jb3VyaWVyX25ldzpoMTI6dzU6YjpjUlVTU0lBTgorCSAgICA6c2V0IGd1aWZvbnQ9QW5kYWxlX01vbm86aDcuNTp3NC41Cis8CVNlZSBhbHNvIHxmb250LXNpemVzfC4KKworCQkJCQkqJ2d1aWZvbnRzZXQnKiAqJ2dmcycqCisJCQkJCSpFMjUwKiAqRTI1MiogKkUyMzQqICpFNTk3KiAqRTU5OCoKKydndWlmb250c2V0JyAnZ2ZzJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIEdVSSBlbmFibGVkIGFuZAorCQkJd2l0aCB0aGUgfCt4Zm9udHNldHwgZmVhdHVyZX0KKwkJCXtub3QgYXZhaWxhYmxlIGluIHRoZSBHVEsrIDIgR1VJfQorCVdoZW4gbm90IGVtcHR5LCBzcGVjaWZpZXMgdHdvIChvciBtb3JlKSBmb250cyB0byBiZSB1c2VkLiAgVGhlIGZpcnN0CisJb25lIGZvciBub3JtYWwgRW5nbGlzaCwgdGhlIHNlY29uZCBvbmUgZm9yIHlvdXIgc3BlY2lhbCBsYW5ndWFnZS4gIFNlZQorCXx4Zm9udHNldHwuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBhbHNvIG1lYW5zIHRoYXQgYWxsIGZvbnQgbmFtZXMgd2lsbCBiZSBoYW5kbGVkIGFzCisJYSBmb250c2V0IG5hbWUuICBBbHNvIHRoZSBvbmVzIHVzZWQgZm9yIHRoZSAiZm9udCIgYXJndW1lbnQgb2YgdGhlCisJfDpoaWdobGlnaHR8IGNvbW1hbmQuCisJVGhlIGZvbnRzIG11c3QgbWF0Y2ggd2l0aCB0aGUgY3VycmVudCBsb2NhbGUuICBJZiBmb250cyBmb3IgdGhlCisJY2hhcmFjdGVyIHNldHMgdGhhdCB0aGUgY3VycmVudCBsb2NhbGUgdXNlcyBhcmUgbm90IGluY2x1ZGVkLCBzZXR0aW5nCisJJ2d1aWZvbnRzZXQnIHdpbGwgZmFpbC4KKwlOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ2d1aWZvbnQnIGFuZCAnZ3VpZm9udHNldCc6IEluICdndWlmb250JworCXRoZSBjb21tYS1zZXBhcmF0ZWQgbmFtZXMgYXJlIGFsdGVybmF0aXZlIG5hbWVzLCBvbmUgb2Ygd2hpY2ggd2lsbCBiZQorCXVzZWQuICBJbiAnZ3VpZm9udHNldCcgdGhlIHdob2xlIHN0cmluZyBpcyBvbmUgZm9udHNldCBuYW1lLAorCWluY2x1ZGluZyB0aGUgY29tbWFzLiAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpZnkgYWx0ZXJuYXRpdmUKKwlmb250c2V0IG5hbWVzLgorCVRoaXMgZXhhbXBsZSB3b3JrcyBvbiBtYW55IFgxMSBzeXN0ZW1zOiA+CisJCTpzZXQgZ3VpZm9udHNldD0tKi0qLW1lZGl1bS1yLW5vcm1hbC0tMTYtKi0qLSotYy0qLSotKgorPAorCQkJCSonZ3VpZm9udHdpZGUnKiAqJ2dmdycqICpFMjMxKiAqRTUzMyogKkU1MzQqCisnZ3VpZm9udHdpZGUnICdnZncnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggR1VJIGVuYWJsZWR9CisJV2hlbiBub3QgZW1wdHksIHNwZWNpZmllcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZvbnRzIHRvIGJlIHVzZWQKKwlmb3IgZG91YmxlLXdpZHRoIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgZm9udCB0aGF0IGNhbiBiZSBsb2FkZWQgaXMKKwl1c2VkLgorCU5vdGU6IFRoZSBzaXplIG9mIHRoZXNlIGZvbnRzIG11c3QgYmUgZXhhY3RseSB0d2ljZSBhcyB3aWRlIGFzIHRoZSBvbmUKKwlzcGVjaWZpZWQgd2l0aCAnZ3VpZm9udCcgYW5kIHRoZSBzYW1lIGhlaWdodC4KKworCUFsbCBHVUkgdmVyc2lvbnMgYnV0IEdUSysgMjoKKworCSdndWlmb250d2lkZScgaXMgb25seSB1c2VkIHdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gInV0Zi04IiBhbmQKKwknZ3VpZm9udHNldCcgaXMgZW1wdHkgb3IgaW52YWxpZC4KKwlXaGVuICdndWlmb250JyBpcyBzZXQgYW5kIGEgdmFsaWQgZm9udCBpcyBmb3VuZCBpbiBpdCBhbmQKKwknZ3VpZm9udHdpZGUnIGlzIGVtcHR5IFZpbSB3aWxsIGF0dGVtcHQgdG8gZmluZCBhIG1hdGNoaW5nCisJZG91YmxlLXdpZHRoIGZvbnQgYW5kIHNldCAnZ3VpZm9udHdpZGUnIHRvIGl0LgorCisJR1RLKyAyIEdVSSBvbmx5OgkJCSpndWlmb250d2lkZV9ndGsyKgorCisJSWYgc2V0IGFuZCB2YWxpZCwgJ2d1aWZvbnR3aWRlJyBpcyBhbHdheXMgdXNlZCBmb3IgZG91YmxlIHdpZHRoCisJY2hhcmFjdGVycywgZXZlbiBpZiAnZW5jb2RpbmcnIGlzIG5vdCBzZXQgdG8gInV0Zi04Ii4KKwlWaW0gZG9lcyBub3QgYXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGZvciAnZ3VpZm9udHdpZGUnCisJYXV0b21hdGljYWxseS4JSWYgJ2d1aWZvbnR3aWRlJyBpcyBlbXB0eSBQYW5nby9YZnQgd2lsbCBjaG9vc2UgdGhlCisJZm9udCBmb3IgY2hhcmFjdGVycyBub3QgYXZhaWxhYmxlIGluICdndWlmb250Jy4gIFRodXMgeW91IGRvIG5vdCBuZWVkCisJdG8gc2V0ICdndWlmb250d2lkZScgYXQgYWxsIHVubGVzcyB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgY2hvaWNlCisJbWFkZSBieSBQYW5nby9YZnQuCisKKwkJCQkJCSonZ3VpaGVhZHJvb20nKiAqJ2docicqCisnZ3VpaGVhZHJvb20nICdnaHInCW51bWJlcgkoZGVmYXVsdCA1MCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0ge29ubHkgZm9yIEdUSyBhbmQgWDExIEdVSX0KKwlUaGUgbnVtYmVyIG9mIHBpeGVscyBzdWJ0cmFjdGVkIGZyb20gdGhlIHNjcmVlbiBoZWlnaHQgd2hlbiBmaXR0aW5nCisJdGhlIEdVSSB3aW5kb3cgb24gdGhlIHNjcmVlbi4gIFNldCB0aGlzIGJlZm9yZSB0aGUgR1VJIGlzIHN0YXJ0ZWQsCisJZS5nLiwgaW4geW91ciB8Z3ZpbXJjfCBmaWxlLiAgV2hlbiB6ZXJvLCB0aGUgd2hvbGUgc2NyZWVuIGhlaWdodCB3aWxsCisJYmUgdXNlZCBieSB0aGUgd2luZG93LglXaGVuIHBvc2l0aXZlLCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBwaXhlbAorCWxpbmVzIHdpbGwgYmUgbGVmdCBmb3Igd2luZG93IGRlY29yYXRpb25zIGFuZCBvdGhlciBpdGVtcyBvbiB0aGUKKwlzY3JlZW4uICBTZXQgaXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZSB0byBhbGxvdyB3aW5kb3dzIHRhbGxlciB0aGFuIHRoZQorCXNjcmVlbi4KKworCQkJCQkJKidndWlvcHRpb25zJyogKidnbycqCisnZ3Vpb3B0aW9ucycgJ2dvJwlzdHJpbmcJKGRlZmF1bHQgImdtckx0VCIgICAoTVMtV2luZG93cyksCisJCQkJCSAiYWdpbXJMdFQiIChHVEssIE1vdGlmIGFuZCBBdGhlbmEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIEdVSSBlbmFibGVkfQorCVRoaXMgb3B0aW9uIG9ubHkgaGFzIGFuIGVmZmVjdCBpbiB0aGUgR1VJIHZlcnNpb24gb2YgdmltLiAgSXQgaXMgYQorCXNlcXVlbmNlIG9mIGxldHRlcnMgd2hpY2ggZGVzY3JpYmVzIHdoYXQgY29tcG9uZW50cyBhbmQgb3B0aW9ucyBvZiB0aGUKKwlHVUkgc2hvdWxkIGJlIHVzZWQuCisJVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBmbGFncyB0aGF0IGFyZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCB1c2UgdGhlCisJIis9IiBhbmQgIi09IiBmZWF0dXJlIG9mICI6c2V0IiB8YWRkLW9wdGlvbi1mbGFnc3wuCisKKwlWYWxpZCBsZXR0ZXJzIGFyZSBhcyBmb2xsb3dzOgorCQkJCQkJCSpndWlvcHRpb25zX2EqCisJICAnYScJQXV0b3NlbGVjdDogIElmIHByZXNlbnQsIHRoZW4gd2hlbmV2ZXIgVklTVUFMIG1vZGUgaXMgc3RhcnRlZCwKKwkJb3IgdGhlIFZpc3VhbCBhcmVhIGV4dGVuZGVkLCBWaW0gdHJpZXMgdG8gYmVjb21lIHRoZSBvd25lciBvZgorCQl0aGUgd2luZG93aW5nIHN5c3RlbSdzIGdsb2JhbCBzZWxlY3Rpb24uICBUaGlzIG1lYW5zIHRoYXQgdGhlCisJCVZpc3VhbGx5IGhpZ2hsaWdodGVkIHRleHQgaXMgYXZhaWxhYmxlIGZvciBwYXN0aW5nIGludG8gb3RoZXIKKwkJYXBwbGljYXRpb25zIGFzIHdlbGwgYXMgaW50byBWaW0gaXRzZWxmLiAgV2hlbiB0aGUgVmlzdWFsIG1vZGUKKwkJZW5kcywgcG9zc2libHkgZHVlIHRvIGFuIG9wZXJhdGlvbiBvbiB0aGUgdGV4dCwgb3Igd2hlbiBhbgorCQlhcHBsaWNhdGlvbiB3YW50cyB0byBwYXN0ZSB0aGUgc2VsZWN0aW9uLCB0aGUgaGlnaGxpZ2h0ZWQgdGV4dAorCQlpcyBhdXRvbWF0aWNhbGx5IHlhbmtlZCBpbnRvIHRoZSAiKiBzZWxlY3Rpb24gcmVnaXN0ZXIuCisJCVRodXMgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCBhdmFpbGFibGUgZm9yIHBhc3RpbmcgaW50byBvdGhlcgorCQlhcHBsaWNhdGlvbnMgYWZ0ZXIgdGhlIFZJU1VBTCBtb2RlIGhhcyBlbmRlZC4KKwkJICAgIElmIG5vdCBwcmVzZW50LCB0aGVuIFZpbSB3b24ndCBiZWNvbWUgdGhlIG93bmVyIG9mIHRoZQorCQl3aW5kb3dpbmcgc3lzdGVtJ3MgZ2xvYmFsIHNlbGVjdGlvbiB1bmxlc3MgZXhwbGljaXRseSB0b2xkIHRvCisJCWJ5IGEgeWFuayBvciBkZWxldGUgb3BlcmF0aW9uIGZvciB0aGUgIiogcmVnaXN0ZXIuCisJCVRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIG1vZGVsZXNzIHNlbGVjdGlvbi4KKworCSAgJ0EnCUF1dG9zZWxlY3QgZm9yIHRoZSBtb2RlbGVzcyBzZWxlY3Rpb24uCUxpa2UgJ2EnLCBidXQgb25seQorCQlhcHBsaWVzIHRvIHRoZSBtb2RlbGVzcyBzZWxlY3Rpb24uCisKKwkJICAgICdndWlvcHRpb25zJyAgIGF1dG9zZWxlY3QgVmlzdWFsICBhdXRvc2VsZWN0IG1vZGVsZXNzIH4KKwkJCSAiIgkJIC0JCQkgLQorCQkJICJhIgkJeWVzCQkJeWVzCisJCQkgIkEiCQkgLQkJCXllcworCQkJICJhQSIJCXllcwkJCXllcworCisJICAnYycJVXNlIGNvbnNvbGUgZGlhbG9ncyBpbnN0ZWFkIG9mIHBvcHVwIGRpYWxvZ3MgZm9yIHNpbXBsZQorCQljaG9pY2VzLgorCisJICAnZicJRm9yZWdyb3VuZDogRG9uJ3QgdXNlIGZvcmsoKSB0byBkZXRhY2ggdGhlIEdVSSBmcm9tIHRoZSBzaGVsbAorCQl3aGVyZSBpdCB3YXMgc3RhcnRlZC4gIFVzZSB0aGlzIGZvciBwcm9ncmFtcyB0aGF0IHdhaXQgZm9yIHRoZQorCQllZGl0b3IgdG8gZmluaXNoIChlLmcuLCBhbiBlLW1haWwgcHJvZ3JhbSkuICBBbHRlcm5hdGl2ZWx5IHlvdQorCQljYW4gdXNlICJndmltIC1mIiBvciAiOmd1aSAtZiIgdG8gc3RhcnQgdGhlIEdVSSBpbiB0aGUKKwkJZm9yZWdyb3VuZC4gIHxndWktZm9ya3wKKwkJTm90ZTogU2V0IHRoaXMgb3B0aW9uIGluIHRoZSB2aW1yYyBmaWxlLiAgVGhlIGZvcmtpbmcgbWF5IGhhdmUKKwkJaGFwcGVuZWQgYWxyZWFkeSB3aGVuIHRoZSBndmltcmMgZmlsZSBpcyByZWFkLgorCisJICAnaScJVXNlIGEgVmltIGljb24uICBGb3IgR1RLIHdpdGggS0RFIGl0IGlzIHVzZWQgaW4gdGhlIGxlZnQtdXBwZXIKKwkJY29ybmVyIG9mIHRoZSB3aW5kb3cuICBJdCdzIGJsYWNrJndoaXRlIG9uIG5vbi1HVEssIGJlY2F1c2Ugb2YKKwkJbGltaXRhdGlvbnMgb2YgWDExLiAgRm9yIGEgY29sb3IgaWNvbiwgc2VlIHxYMTEtaWNvbnwuCisKKwkgICdtJwlNZW51IGJhciBpcyBwcmVzZW50LgorCSAgJ00nCVRoZSBzeXN0ZW0gbWVudSAiJFZJTVJVTlRJTUUvbWVudS52aW0iIGlzIG5vdCBzb3VyY2VkLglOb3RlCisJCXRoYXQgdGhpcyBmbGFnIG11c3QgYmUgYWRkZWQgaW4gdGhlIC52aW1yYyBmaWxlLCBiZWZvcmUKKwkJc3dpdGNoaW5nIG9uIHN5bnRheCBvciBmaWxldHlwZSByZWNvZ25pdGlvbiAod2hlbiB0aGUgLmd2aW1yYworCQlmaWxlIGlzIHNvdXJjZWQgdGhlIHN5c3RlbSBtZW51IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkOyB0aGUKKwkJIjpzeW50YXggb24iIGFuZCAiOmZpbGV0eXBlIG9uIiBjb21tYW5kcyBsb2FkIHRoZSBtZW51IHRvbykuCisJICAnZycJR3JleSBtZW51IGl0ZW1zOiBNYWtlIG1lbnUgaXRlbXMgdGhhdCBhcmUgbm90IGFjdGl2ZSBncmV5LiAgSWYKKwkJJ2cnIGlzIG5vdCBpbmNsdWRlZCBpbmFjdGl2ZSBtZW51IGl0ZW1zIGFyZSBub3Qgc2hvd24gYXQgYWxsLgorCQlFeGNlcHRpb246IEF0aGVuYSB3aWxsIGFsd2F5cyB1c2UgZ3JleSBtZW51IGl0ZW1zLgorCisJICAndCcJSW5jbHVkZSB0ZWFyb2ZmIG1lbnUgaXRlbXMuICBDdXJyZW50bHkgb25seSB3b3JrcyBmb3IgV2luMzIsCisJCUdUSyssIGFuZCBNb3RpZiAxLjIgR1VJLgorCSAgJ1QnCUluY2x1ZGUgVG9vbGJhci4gIEN1cnJlbnRseSBvbmx5IGluIFdpbjMyLCBHVEsrLCBNb3RpZiwgYW5kCisJCUF0aGVuYSBHVUlzLgorCisJICAncicJUmlnaHQtaGFuZCBzY3JvbGxiYXIgaXMgYWx3YXlzIHByZXNlbnQuCisJICAnUicJUmlnaHQtaGFuZCBzY3JvbGxiYXIgaXMgcHJlc2VudCB3aGVuIHRoZXJlIGlzIGEgdmVydGljYWxseQorCQlzcGxpdCB3aW5kb3cuCisJICAnbCcJTGVmdC1oYW5kIHNjcm9sbGJhciBpcyBhbHdheXMgcHJlc2VudC4KKwkgICdMJwlMZWZ0LWhhbmQgc2Nyb2xsYmFyIGlzIHByZXNlbnQgd2hlbiB0aGVyZSBpcyBhIHZlcnRpY2FsbHkKKwkJc3BsaXQgd2luZG93LgorCSAgJ2InCUJvdHRvbSAoaG9yaXpvbnRhbCkgc2Nyb2xsYmFyIGlzIHByZXNlbnQuICBJdHMgc2l6ZSBkZXBlbmRzIG9uCisJCXRoZSBsb25nZXN0IHZpc2libGUgbGluZSwgb3Igb24gdGhlIGN1cnNvciBsaW5lIGlmIHRoZSAnaCcKKwkJZmxhZyBpcyBpbmNsdWRlZC4gfGd1aS1ob3Jpei1zY3JvbGx8CisJICAnaCcJTGltaXQgaG9yaXpvbnRhbCBzY3JvbGxiYXIgc2l6ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJzb3IKKwkJbGluZS4gIFJlZHVjZXMgY29tcHV0YXRpb25zLiB8Z3VpLWhvcml6LXNjcm9sbHwKKworCUFuZCB5ZXMsIHlvdSBtYXkgZXZlbiBoYXZlIHNjcm9sbGJhcnMgb24gdGhlIGxlZnQgQU5EIHRoZSByaWdodCBpZgorCXlvdSByZWFsbHkgd2FudCB0byA6LSkuICBTZWUgfGd1aS1zY3JvbGxiYXJzfCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCSAgJ3YnCVVzZSBhIHZlcnRpY2FsIGJ1dHRvbiBsYXlvdXQgZm9yIGRpYWxvZ3MuICBXaGVuIG5vdCBpbmNsdWRlZCwKKwkJYSBob3Jpem9udGFsIGxheW91dCBpcyBwcmVmZXJyZWQsIGJ1dCB3aGVuIGl0IGRvZXNuJ3QgZml0IGEKKwkJdmVydGljYWwgbGF5b3V0IGlzIHVzZWQgYW55d2F5LgorCSAgJ3AnCVVzZSBQb2ludGVyIGNhbGxiYWNrcyBmb3IgWDExIEdVSS4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHNvbWUKKwkJd2luZG93IG1hbmFnZXJzLiAgSWYgdGhlIGN1cnNvciBpcyBub3QgYmxpbmtpbmcgb3IgaG9sbG93IGF0CisJCXRoZSByaWdodCBtb21lbnQsIHRyeSBhZGRpbmcgdGhpcyBmbGFnLiAgVGhpcyBtdXN0IGJlIGRvbmUKKwkJYmVmb3JlIHN0YXJ0aW5nIHRoZSBHVUkuICBTZXQgaXQgaW4geW91ciBndmltcmMuICBBZGRpbmcgb3IKKwkJcmVtb3ZpbmcgaXQgYWZ0ZXIgdGhlIEdVSSBoYXMgc3RhcnRlZCBoYXMgbm8gZWZmZWN0LgorCSAgJ0YnCUFkZCBhIGZvb3Rlci4gIE9ubHkgZm9yIE1vdGlmLglTZWUgfGd1aS1mb290ZXJ8LgorCisJCQkJCQkqJ2d1aXB0eScqIConbm9ndWlwdHknKgorJ2d1aXB0eScJCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIEdVSSBlbmFibGVkfQorCU9ubHkgaW4gdGhlIEdVSTogSWYgb24sIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBvcGVuIGEgcHNldWRvLXR0eSBmb3IKKwlJL08gdG8vZnJvbSBzaGVsbCBjb21tYW5kcy4gIFNlZSB8Z3VpLXB0eXwuCisKKwkJCQkJCSonaGVscGZpbGUnKiAqJ2hmJyoKKydoZWxwZmlsZScgJ2hmJwkJc3RyaW5nCShkZWZhdWx0IChNU0RPUykgICIkVklNUlVOVElNRVxkb2NcaGVscC50eHQiCisJCQkJCSAob3RoZXJzKSAiJFZJTVJVTlRJTUUvZG9jL2hlbHAudHh0IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlOYW1lIG9mIHRoZSBtYWluIGhlbHAgZmlsZS4gIEFsbCBkaXN0cmlidXRlZCBoZWxwIGZpbGVzIHNob3VsZCBiZQorCXBsYWNlZCB0b2dldGhlciBpbiBvbmUgZGlyZWN0b3J5LiAgQWRkaXRpb25hbGx5LCBhbGwgImRvYyIgZGlyZWN0b3JpZXMKKwlpbiAncnVudGltZXBhdGgnIHdpbGwgYmUgdXNlZC4KKwlFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuICBGb3IgZXhhbXBsZToKKwkiJFZJTVJVTlRJTUUvZG9jL2hlbHAudHh0Ii4gIElmICRWSU1SVU5USU1FIGlzIG5vdCBzZXQsICRWSU0gaXMgYWxzbworCXRyaWVkLglBbHNvIHNlZSB8JFZJTVJVTlRJTUV8IGFuZCB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nCisJc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonaGVscGhlaWdodCcqIConaGgnKgorJ2hlbHBoZWlnaHQnICdoaCcJbnVtYmVyCShkZWZhdWx0IDIwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArd2luZG93cworCQkJZmVhdHVyZX0KKwlNaW5pbWFsIGluaXRpYWwgaGVpZ2h0IG9mIHRoZSBoZWxwIHdpbmRvdyB3aGVuIGl0IGlzIG9wZW5lZCB3aXRoIHRoZQorCSI6aGVscCIgY29tbWFuZC4gIFRoZSBpbml0aWFsIGhlaWdodCBvZiB0aGUgaGVscCB3aW5kb3cgaXMgaGFsZiBvZiB0aGUKKwljdXJyZW50IHdpbmRvdywgb3IgKHdoZW4gdGhlICdlYScgb3B0aW9uIGlzIG9uKSB0aGUgc2FtZSBhcyBvdGhlcgorCXdpbmRvd3MuICBXaGVuIHRoZSBoZWlnaHQgaXMgbGVzcyB0aGFuICdoZWxwaGVpZ2h0JywgdGhlIGhlaWdodCBpcworCXNldCB0byAnaGVscGhlaWdodCcuICBTZXQgdG8gemVybyB0byBkaXNhYmxlLgorCisJCQkJCQkqJ2hlbHBsYW5nJyogKidobGcnKgorJ2hlbHBsYW5nJyAnaGxnJwlzdHJpbmcJKGRlZmF1bHQ6IG1lc3NhZ2VzIGxhbmd1YWdlIG9yIGVtcHR5KQorCQkJZ2xvYmFsCisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2xhbmd8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBsYW5ndWFnZXMuICBWaW0gd2lsbCB1c2UgdGhlIGZpcnN0IGxhbmd1YWdlCisJZm9yIHdoaWNoIHRoZSBkZXNpcmVkIGhlbHAgY2FuIGJlIGZvdW5kLiAgVGhlIEVuZ2xpc2ggaGVscCB3aWxsIGFsd2F5cworCWJlIHVzZWQgYXMgYSBsYXN0IHJlc29ydC4gIFlvdSBjYW4gYWRkICJlbiIgdG8gcHJlZmVyIEVuZ2xpc2ggb3ZlcgorCWFub3RoZXIgbGFuZ3VhZ2UsIGJ1dCB0aGF0IHdpbGwgb25seSBmaW5kIHRhZ3MgdGhhdCBleGlzdCBpbiB0aGF0CisJbGFuZ3VhZ2UgYW5kIG5vdCBpbiB0aGUgRW5nbGlzaCBoZWxwLgorCUV4YW1wbGU6ID4KKwkJOnNldCBoZWxwbGFuZz1kZSxpdAorPAlUaGlzIHdpbGwgZmlyc3Qgc2VhcmNoIEdlcm1hbiwgdGhlbiBJdGFsaWFuIGFuZCBmaW5hbGx5IEVuZ2xpc2ggaGVscAorCWZpbGVzLgorCVdoZW4gdXNpbmcgfENUUkwtXXwgYW5kICI6aGVscCEiIGluIGEgbm9uLUVuZ2xpc2ggaGVscCBmaWxlIFZpbSB3aWxsCisJdHJ5IHRvIGZpbmQgdGhlIHRhZyBpbiB0aGUgY3VycmVudCBsYW5ndWFnZSBiZWZvcmUgdXNpbmcgdGhpcyBvcHRpb24uCisJU2VlIHxoZWxwLXRyYW5zbGF0ZWR8LgorCisJCQkJICAgICAqJ2hpZGRlbicqIConaGlkJyogKidub2hpZGRlbicqIConbm9oaWQnKgorJ2hpZGRlbicgJ2hpZCcJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb2ZmIGEgYnVmZmVyIGlzIHVubG9hZGVkIHdoZW4gaXQgaXMgfGFiYW5kb258ZWQuICBXaGVuIG9uIGEKKwlidWZmZXIgYmVjb21lcyBoaWRkZW4gd2hlbiBpdCBpcyB8YWJhbmRvbnxlZC4gIElmIHRoZSBidWZmZXIgaXMgc3RpbGwKKwlkaXNwbGF5ZWQgaW4gYW5vdGhlciB3aW5kb3csIGl0IGRvZXMgbm90IGJlY29tZSBoaWRkZW4sIG9mIGNvdXJzZS4KKwlUaGUgY29tbWFuZHMgdGhhdCBtb3ZlIHRocm91Z2ggdGhlIGJ1ZmZlciBsaXN0IHNvbWV0aW1lcyBtYWtlIGEgYnVmZmVyCisJaGlkZGVuIGFsdGhvdWdoIHRoZSAnaGlkZGVuJyBvcHRpb24gaXMgb2ZmOiBXaGVuIHRoZSBidWZmZXIgaXMKKwltb2RpZmllZCwgJ2F1dG93cml0ZScgaXMgb2ZmIG9yIHdyaXRpbmcgaXMgbm90IHBvc3NpYmxlLCBhbmQgdGhlICchJworCWZsYWcgd2FzIHVzZWQuCVNlZSBhbHNvIHx3aW5kb3dzLnR4dHwuCisJVGhpcyBvcHRpb24gaXMgc2V0IGZvciBvbmUgY29tbWFuZCB3aXRoICI6aGlkZSB7Y29tbWFuZH0iIHw6aGlkZXwuCisJV0FSTklORzogSXQncyBlYXN5IHRvIGZvcmdldCB0aGF0IHlvdSBoYXZlIGNoYW5nZXMgaW4gaGlkZGVuIGJ1ZmZlcnMuCisJVGhpbmsgdHdpY2Ugd2hlbiB1c2luZyAiOnEhIiBvciAiOnFhISIuCisKKwkJCQkJCSonaGlnaGxpZ2h0JyogKidobCcqCisnaGlnaGxpZ2h0JyAnaGwnCXN0cmluZwkoZGVmYXVsdCAoYXMgYSBzaW5nbGUgc3RyaW5nKToKKwkJCQkgICAgICI4OlNwZWNpYWxLZXksQDpOb25UZXh0LGQ6RGlyZWN0b3J5LAorCQkJCSAgICAgZTpFcnJvck1zZyxpOkluY1NlYXJjaCxsOlNlYXJjaCxtOk1vcmVNc2csCisJCQkJICAgICBNOk1vZGVNc2csbjpMaW5lTnIscjpRdWVzdGlvbiwKKwkJCQkgICAgIHM6U3RhdHVzTGluZSxTOlN0YXR1c0xpbmVOQyxjOlZlcnRTcGxpdAorCQkJCSAgICAgdDpUaXRsZSx2OlZpc3VhbCx3Oldhcm5pbmdNc2csVzpXaWxkTWVudSwKKwkJCQkgICAgIGY6Rm9sZGVkLEY6Rm9sZENvbHVtbixBOkRpZmZBZGQsCisJCQkJICAgICBDOkRpZmZDaGFuZ2UsRDpEaWZmRGVsZXRlLFQ6RGlmZlRleHQsCisJCQkJICAgICA+OlNpZ25Db2x1bW4iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCBoaWdobGlnaHRpbmcgbW9kZSBmb3IgdmFyaW91cworCW9jY2FzaW9ucy4gIEl0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIHBhaXJzLiAgVGhlCisJZmlyc3QgY2hhcmFjdGVyIGluIGEgcGFpciBnaXZlcyB0aGUgb2NjYXNpb24sIHRoZSBzZWNvbmQgdGhlIG1vZGUgdG8KKwl1c2UgZm9yIHRoYXQgb2NjYXNpb24uCVRoZSBvY2Nhc2lvbnMgYXJlOgorCXxobC1TcGVjaWFsS2V5fAkgOCAgTWV0YSBhbmQgc3BlY2lhbCBrZXlzIGxpc3RlZCB3aXRoICI6bWFwIgorCXxobC1Ob25UZXh0fAkgQCAgJ34nIGFuZCAnQCcgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93IGFuZAorCQkJICAgIGNoYXJhY3RlcnMgZnJvbSAnc2hvd2JyZWFrJworCXxobC1EaXJlY3Rvcnl8CSBkICBkaXJlY3RvcmllcyBpbiBDVFJMLUQgbGlzdGluZyBhbmQgb3RoZXIgc3BlY2lhbAorCQkJICAgIHRoaW5ncyBpbiBsaXN0aW5ncworCXxobC1FcnJvck1zZ3wJIGUgIGVycm9yIG1lc3NhZ2VzCisJCQkgaCAgKG9ic29sZXRlLCBpZ25vcmVkKQorCXxobC1JbmNTZWFyY2h8CSBpICAnaW5jc2VhcmNoJyBoaWdobGlnaHRpbmcKKwl8aGwtU2VhcmNofAkgbCAgbGFzdCBzZWFyY2ggcGF0dGVybiBoaWdobGlnaHRpbmcgKHNlZSAnaGxzZWFyY2gnKQorCXxobC1Nb3JlTXNnfAkgbSAgfG1vcmUtcHJvbXB0fAorCXxobC1Nb2RlTXNnfAkgTSAgTW9kZSAoZS5nLiwgIi0tIElOU0VSVCAtLSIpCisJfGhsLUxpbmVOcnwJIG4gIGxpbmUgbnVtYmVyIGZvciAiOm51bWJlciIgYW5kICI6IyIgY29tbWFuZHMKKwl8aGwtUXVlc3Rpb258CSByICB8aGl0LWVudGVyfCBwcm9tcHQgYW5kIHllcy9ubyBxdWVzdGlvbnMKKwl8aGwtU3RhdHVzTGluZXwJIHMgIHN0YXR1cyBsaW5lIG9mIGN1cnJlbnQgd2luZG93IHxzdGF0dXMtbGluZXwKKwl8aGwtU3RhdHVzTGluZU5DfCBTICBzdGF0dXMgbGluZXMgb2Ygbm90LWN1cnJlbnQgd2luZG93cworCXxobC1UaXRsZXwJIHQgIFRpdGxlcyBmb3Igb3V0cHV0IGZyb20gIjpzZXQgYWxsIiwgIjphdXRvY21kIiBldGMuCisJfGhsLVZlcnRTcGxpdHwJIGMgIGNvbHVtbiB1c2VkIHRvIHNlcGFyYXRlIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cworCXxobC1WaXN1YWx8CSB2ICBWaXN1YWwgbW9kZQorCXxobC1WaXN1YWxOT1N8CSBWICBWaXN1YWwgbW9kZSB3aGVuIFZpbSBkb2VzIGlzICJOb3QgT3duaW5nIHRoZQorCQkJICAgIFNlbGVjdGlvbiIgT25seSBYMTEgR3VpJ3MgfGd1aS14MTF8IGFuZAorCQkJICAgIHx4dGVybS1jbGlwYm9hcmR8LgorCXxobC1XYXJuaW5nTXNnfAkgdyAgd2FybmluZyBtZXNzYWdlcworCXxobC1XaWxkTWVudXwJIFcgIHdpbGRjYXJkIG1hdGNoZXMgZGlzcGxheWVkIGZvciAnd2lsZG1lbnUnCisJfGhsLUZvbGRlZHwJIGYgIGxpbmUgdXNlZCBmb3IgY2xvc2VkIGZvbGRzCisJfGhsLUZvbGRDb2x1bW58CSBGICAnZm9sZGNvbHVtbicKKwl8aGwtU2lnbkNvbHVtbnwJID4gIGNvbHVtbiB1c2VkIGZvciB8c2lnbnN8CisKKwlUaGUgZGlzcGxheSBtb2RlcyBhcmU6CisJCXIJcmV2ZXJzZQkJKHRlcm1jYXAgZW50cnkgIm1yIiBhbmQgIm1lIikKKwkJaQlpdGFsaWMJCSh0ZXJtY2FwIGVudHJ5ICJaSCIgYW5kICJaUiIpCisJCWIJYm9sZAkJKHRlcm1jYXAgZW50cnkgIm1kIiBhbmQgIm1lIikKKwkJcwlzdGFuZG91dAkodGVybWNhcCBlbnRyeSAic28iIGFuZCAic2UiKQorCQl1CXVuZGVybGluZQkodGVybWNhcCBlbnRyeSAidXMiIGFuZCAidWUiKQorCQluCW5vIGhpZ2hsaWdodGluZworCQktCW5vIGhpZ2hsaWdodGluZworCQk6CXVzZSBhIGhpZ2hsaWdodCBncm91cAorCVRoZSBkZWZhdWx0IGlzIHVzZWQgZm9yIG9jY2FzaW9ucyB0aGF0IGFyZSBub3QgaW5jbHVkZWQuCisJSWYgeW91IHdhbnQgdG8gY2hhbmdlIHdoYXQgdGhlIGRpc3BsYXkgbW9kZXMgZG8sIHNlZSB8ZG9zLWNvbG9yc3wKKwlmb3IgYW4gZXhhbXBsZS4KKwlXaGVuIHVzaW5nIHRoZSAnOicgZGlzcGxheSBtb2RlLCB0aGlzIG11c3QgYmUgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YKKwlhIGhpZ2hsaWdodCBncm91cC4gIEEgaGlnaGxpZ2h0IGdyb3VwIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbnkgdHlwZQorCW9mIGhpZ2hsaWdodGluZywgaW5jbHVkaW5nIHVzaW5nIGNvbG9yLiAgU2VlIHw6aGlnaGxpZ2h0fCBvbiBob3cgdG8KKwlkZWZpbmUgb25lLiAgVGhlIGRlZmF1bHQgdXNlcyBhIGRpZmZlcmVudCBncm91cCBmb3IgZWFjaCBvY2Nhc2lvbi4KKwlTZWUgfGhpZ2hsaWdodC1kZWZhdWx0fCBmb3IgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0IGdyb3Vwcy4KKworCQkJCSAqJ2hsc2VhcmNoJyogKidobHMnKiAqJ25vaGxzZWFyY2gnKiAqJ25vaGxzJyoKKydobHNlYXJjaCcgJ2hscycJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2V4dHJhX3NlYXJjaHwgZmVhdHVyZX0KKwlXaGVuIHRoZXJlIGlzIGEgcHJldmlvdXMgc2VhcmNoIHBhdHRlcm4sIGhpZ2hsaWdodCBhbGwgaXRzIG1hdGNoZXMuCisJVGhlIHR5cGUgb2YgaGlnaGxpZ2h0aW5nIHVzZWQgY2FuIGJlIHNldCB3aXRoIHRoZSAnbCcgb2NjYXNpb24gaW4gdGhlCisJJ2hpZ2hsaWdodCcgb3B0aW9uLiAgVGhpcyB1c2VzIHRoZSAiU2VhcmNoIiBoaWdobGlnaHQgZ3JvdXAgYnkKKwlkZWZhdWx0LiAgTm90ZSB0aGF0IG9ubHkgdGhlIG1hdGNoaW5nIHRleHQgaXMgaGlnaGxpZ2h0ZWQsIGFueSBvZmZzZXRzCisJYXJlIG5vdCBhcHBsaWVkLgorCVNlZSBhbHNvOiAnaW5jc2VhcmNoJyBhbmQgfDptYXRjaHwuCisJV2hlbiB5b3UgZ2V0IGJvcmVkIGxvb2tpbmcgYXQgdGhlIGhpZ2hsaWdodGVkIG1hdGNoZXMsIHlvdSBjYW4gdHVybiBpdAorCW9mZiB3aXRoIHw6bm9obHNlYXJjaHwuICBBcyBzb29uIGFzIHlvdSB1c2UgYSBzZWFyY2ggY29tbWFuZCwgdGhlCisJaGlnaGxpZ2h0aW5nIGNvbWVzIGJhY2suCisJV2hlbiB0aGUgc2VhcmNoIHBhdHRlcm4gY2FuIG1hdGNoIGFuIGVuZC1vZi1saW5lLCBWaW0gd2lsbCB0cnkgdG8KKwloaWdobGlnaHQgYWxsIG9mIHRoZSBtYXRjaGVkIHRleHQuICBIb3dldmVyLCB0aGlzIGRlcGVuZHMgb24gd2hlcmUgdGhlCisJc2VhcmNoIHN0YXJ0cy4JVGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBsaW5lIGluIHRoZSB3aW5kb3cgb3IgdGhlIGZpcnN0CisJbGluZSBiZWxvdyBhIGNsb3NlZCBmb2xkLiAgQSBtYXRjaCBpbiBhIHByZXZpb3VzIGxpbmUgd2hpY2ggaXMgbm90CisJZHJhd24gbWF5IG5vdCBjb250aW51ZSBpbiBhbiBuZXdseSBkcmF3biBsaW5lLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidoaXN0b3J5JyogKidoaScqCisnaGlzdG9yeScgJ2hpJwkJbnVtYmVyCShWaW0gZGVmYXVsdDogMjAsIFZpIGRlZmF1bHQ6IDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQSBoaXN0b3J5IG9mICI6IiBjb21tYW5kcywgYW5kIGEgaGlzdG9yeSBvZiBwcmV2aW91cyBzZWFyY2ggcGF0dGVybnMKKwlhcmUgcmVtZW1iZXJlZC4gIFRoaXMgb3B0aW9uIGRlY2lkZXMgaG93IG1hbnkgZW50cmllcyBtYXkgYmUgc3RvcmVkIGluCisJZWFjaCBvZiB0aGVzZSBoaXN0b3JpZXMgKHNlZSB8Y21kbGluZS1lZGl0aW5nfCkuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJIConaGttYXAnKiAqJ2hrJyogKidub2hrbWFwJyogKidub2hrJyoKKydoa21hcCcgJ2hrJwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgdGhlIGtleWJvYXJkIGlzIG1hcHBlZCBmb3IgdGhlIEhlYnJldyBjaGFyYWN0ZXIgc2V0LgorCU5vcm1hbGx5IHlvdSB3b3VsZCBzZXQgJ2FsbG93cmV2aW5zJyBhbmQgdXNlIENUUkwtXyBpbiBpbnNlcnQgbW9kZSB0bworCXRvZ2dsZSB0aGlzIG9wdGlvbi4gIFNlZSB8cmlsZWZ0LnR4dHwuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJIConaGttYXBwJyogKidoa3AnKiAqJ25vaGttYXBwJyogKidub2hrcCcqCisnaGttYXBwJyAnaGtwJwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgcGhvbmV0aWMga2V5Ym9hcmQgbWFwcGluZyBpcyB1c2VkLiAgJ2hrbWFwJyBtdXN0IGFsc28gYmUgb24uCisJVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgYSBub24tSGVicmV3IGtleWJvYXJkLgorCVNlZSB8cmlsZWZ0LnR4dHwuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2ljb24nKiAqJ25vaWNvbicqCisnaWNvbicJCQlib29sZWFuCShkZWZhdWx0IG9mZiwgb24gd2hlbiB0aXRsZSBjYW4gYmUgcmVzdG9yZWQpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdGl0bGV8CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHRoZSBpY29uIHRleHQgb2YgdGhlIHdpbmRvdyB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YKKwknaWNvbnN0cmluZycgKGlmIGl0IGlzIG5vdCBlbXB0eSksIG9yIHRvIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisJY3VycmVudGx5IGJlaW5nIGVkaXRlZC4gIE9ubHkgdGhlIGxhc3QgcGFydCBvZiB0aGUgbmFtZSBpcyB1c2VkLgorCU92ZXJyaWRkZW4gYnkgdGhlICdpY29uc3RyaW5nJyBvcHRpb24uCisJT25seSB3b3JrcyBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgc2V0dGluZyB3aW5kb3cgaWNvbnMgKGN1cnJlbnRseQorCW9ubHkgWDExIEdVSSBhbmQgdGVybWluYWxzIHdpdGggYSBub24tZW1wdHkgJ3RfSVMnIG9wdGlvbiAtIHRoZXNlIGFyZQorCVVuaXggeHRlcm0gYW5kIGlyaXMtYW5zaSBieSBkZWZhdWx0LCB3aGVyZSAndF9JUycgaXMgdGFrZW4gZnJvbSB0aGUKKwlidWlsdGluIHRlcm1jYXApLgorCVdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIEhBVkVfWDExIGRlZmluZWQsIHRoZSBvcmlnaW5hbCBpY29uIHdpbGwgYmUKKwlyZXN0b3JlZCBpZiBwb3NzaWJsZSB8WDExfC4gU2VlIHxYMTEtaWNvbnwgZm9yIGNoYW5naW5nIHRoZSBpY29uIG9uCisJWDExLgorCisJCQkJCQkqJ2ljb25zdHJpbmcnKgorJ2ljb25zdHJpbmcnCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdGl0bGV8CisJCQlmZWF0dXJlfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgbm90IGVtcHR5LCBpdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBpY29uIHRleHQgb2YKKwl0aGUgd2luZG93LiAgVGhpcyBoYXBwZW5zIG9ubHkgd2hlbiB0aGUgJ2ljb24nIG9wdGlvbiBpcyBvbi4KKwlPbmx5IHdvcmtzIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBzZXR0aW5nIHdpbmRvdyBpY29uIHRleHQKKwkoY3VycmVudGx5IG9ubHkgWDExIEdVSSBhbmQgdGVybWluYWxzIHdpdGggYSBub24tZW1wdHkgJ3RfSVMnIG9wdGlvbikuCisJRG9lcyBub3Qgd29yayBmb3IgTVMgV2luZG93cy4KKwlXaGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCBIQVZFX1gxMSBkZWZpbmVkLCB0aGUgb3JpZ2luYWwgaWNvbiB3aWxsIGJlCisJcmVzdG9yZWQgaWYgcG9zc2libGUgfFgxMXwuCisJV2hlbiB0aGlzIG9wdGlvbiBjb250YWlucyBwcmludGYtc3R5bGUgJyUnIGl0ZW1zLCB0aGV5IHdpbGwgYmUKKwlleHBhbmRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIHVzZWQgZm9yICdzdGF0dXNsaW5lJy4JU2VlCisJJ3RpdGxlc3RyaW5nJyBmb3IgZXhhbXBsZSBzZXR0aW5ncy4KKwl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrc3RhdHVzbGluZXwgZmVhdHVyZX0KKworCQkJKidpZ25vcmVjYXNlJyogKidpYycqIConbm9pZ25vcmVjYXNlJyogKidub2ljJyoKKydpZ25vcmVjYXNlJyAnaWMnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJSWdub3JlIGNhc2UgaW4gc2VhcmNoIHBhdHRlcm5zLiAgQWxzbyB1c2VkIHdoZW4gc2VhcmNoaW5nIGluIHRoZSB0YWdzCisJZmlsZS4KKwlBbHNvIHNlZSAnc21hcnRjYXNlJy4KKwlDYW4gYmUgb3ZlcnJ1bGVkIGJ5IHVzaW5nICJcYyIgb3IgIlxDIiBpbiB0aGUgcGF0dGVybiwgc2VlCisJfC9pZ25vcmVjYXNlfC4KKworCQkJCQkJKidpbWFjdGl2YXRla2V5JyogKidpbWFrJyoKKydpbWFjdGl2YXRla2V5JyAnaW1haycJc3RyaW5nIChkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB8K3hpbXwgYW5kCisJCQl8K0dVSV9HVEt8fQorCVNwZWNpZmllcyB0aGUga2V5IHRoYXQgeW91ciBJbnB1dCBNZXRob2QgaW4gWC1XaW5kb3dzIHVzZXMgZm9yCisJYWN0aXZhdGlvbi4gIFdoZW4gdGhpcyBpcyBzcGVjaWZpZWQgY29ycmVjdGx5LCB2aW0gY2FuIGZ1bGx5IGNvbnRyb2wKKwlJTSB3aXRoICdpbWNtZGxpbmUnLCAnaW1pbnNlcnQnIGFuZCAnaW1zZWFyY2gnLgorCVlvdSBjYW4ndCB1c2UgdGhpcyBvcHRpb24gdG8gY2hhbmdlIHRoZSBhY3RpdmF0aW9uIGtleSwgdGhlIG9wdGlvbgorCXRlbGxzIFZpbSB3aGF0IHRoZSBrZXkgaXMuCisJRm9ybWF0OgorCQlbTU9ESUZJRVJfRkxBRy1dS0VZX1NUUklORworCisJVGhlc2UgY2hhcmFjdGVycyBjYW4gYmUgdXNlZCBmb3IgTU9ESUZJRVJfRkxBRyAoY2FzZSBpcyBpZ25vcmVkKToKKwkJUwkgICAgU2hpZnQga2V5CisJCUwJICAgIExvY2sga2V5CisJCUMJICAgIENvbnRyb2wga2V5CisJCTEJICAgIE1vZDEga2V5CisJCTIJICAgIE1vZDIga2V5CisJCTMJICAgIE1vZDMga2V5CisJCTQJICAgIE1vZDQga2V5CisJCTUJICAgIE1vZDUga2V5CisJQ29tYmluYXRpb25zIGFyZSBhbGxvd2VkLCBmb3IgZXhhbXBsZSAiUy1DLXNwYWNlIiBvciAiU0Mtc3BhY2UiIGFyZQorCWJvdGggc2hpZnQrY3RybCtzcGFjZS4KKwlTZWUgPFgxMS9rZXlzeW1kZWYuaD4gYW5kIFhTdHJpbmdUb0tleXN5bSBmb3IgS0VZX1NUUklORy4KKworCUV4YW1wbGU6ID4KKwkJOnNldCBpbWFjdGl2YXRla2V5PVMtc3BhY2UKKzwJIlMtc3BhY2UiIG1lYW5zIHNoaWZ0K3NwYWNlLiAgVGhpcyBpcyB0aGUgYWN0aXZhdGlvbiBrZXkgZm9yIGtpbnB1dDIgKworCWNhbm5hIChKYXBhbmVzZSksIGFuZCBhbWkgKEtvcmVhbikuCisKKwkJCQkqJ2ltY21kbGluZScqIConaW1jJyogKidub2ltY21kbGluZScqIConbm9pbWMnKgorJ2ltY21kbGluZScgJ2ltYycJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3hpbXwKKwkJCXwrbXVsdGlfYnl0ZV9pbWV8IG9yIHxnbG9iYWwtaW1lfCBmZWF0dXJlfQorCVdoZW4gc2V0IHRoZSBJbnB1dCBNZXRob2QgaXMgYWx3YXlzIG9uIHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIGNvbW1hbmQKKwlsaW5lLCB1bmxlc3MgZW50ZXJpbmcgYSBzZWFyY2ggcGF0dGVybiAoc2VlICdpbXNlYXJjaCcgZm9yIHRoYXQpLgorCVNldHRpbmcgdGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91ciBpbnB1dCBtZXRob2QgYWxsb3dzIGVudGVyaW5nCisJRW5nbGlzaCBjaGFyYWN0ZXJzIGRpcmVjdGx5LCBlLmcuLCB3aGVuIGl0J3MgdXNlZCB0byB0eXBlIGFjY2VudGVkCisJY2hhcmFjdGVycyB3aXRoIGRlYWQga2V5cy4KKworCQkJCSonaW1kaXNhYmxlJyogKidpbWQnKiAqJ25vZGlzYWJsZScqIConbm9pbWQnKgorJ2ltZGlzYWJsZScgJ2ltZCcJYm9vbGVhbiAoZGVmYXVsdCBvZmYsIG9uIGZvciBzb21lIHN5c3RlbXMgKFNHSSkpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3hpbXwKKwkJCXwrbXVsdGlfYnl0ZV9pbWV8IG9yIHxnbG9iYWwtaW1lfCBmZWF0dXJlfQorCVdoZW4gc2V0IHRoZSBJbnB1dCBNZXRob2QgaXMgbmV2ZXIgdXNlZC4gIFRoaXMgaXMgdXNlZnVsIHRvIGRpc2FibGUKKwl0aGUgSU0gd2hlbiBpdCBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCisJQ3VycmVudGx5IHRoaXMgb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQgZm9yIFNHSS9JUklYIG1hY2hpbmVzLiAgVGhpcworCW1heSBjaGFuZ2UgaW4gbGF0ZXIgcmVsZWFzZXMuCisKKwkJCQkJCSonaW1pbnNlcnQnKiAqJ2ltaScqCisnaW1pbnNlcnQnICdpbWknCW51bWJlciAoZGVmYXVsdCAwLCAyIHdoZW4gYW4gaW5wdXQgbWV0aG9kIGlzIHN1cHBvcnRlZCkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlTcGVjaWZpZXMgd2hldGhlciA6bG1hcCBvciBhbiBJbnB1dCBNZXRob2QgKElNKSBpcyB0byBiZSB1c2VkIGluCisJSW5zZXJ0IG1vZGUuICBWYWxpZCB2YWx1ZXM6CisJCTAJOmxtYXAgaXMgb2ZmIGFuZCBJTSBpcyBvZmYKKwkJMQk6bG1hcCBpcyBPTiBhbmQgSU0gaXMgb2ZmCisJCTIJOmxtYXAgaXMgb2ZmIGFuZCBJTSBpcyBPTgorCTIgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGVfaW1lfCwgfCt4aW18CisJb3IgfGdsb2JhbC1pbWV8LgorCVRvIGFsd2F5cyByZXNldCB0aGUgb3B0aW9uIHRvIHplcm8gd2hlbiBsZWF2aW5nIEluc2VydCBtb2RlIHdpdGggPEVzYz4KKwl0aGlzIGNhbiBiZSB1c2VkOiA+CisJCTppbm9yZW1hcCA8RVNDPiA8RVNDPjpzZXQgaW1pbnNlcnQ9MDxDUj4KKzwJVGhpcyBtYWtlcyA6bG1hcCBhbmQgSU0gdHVybiBvZmYgYXV0b21hdGljYWxseSB3aGVuIGxlYXZpbmcgSW5zZXJ0CisJbW9kZS4KKwlOb3RlIHRoYXQgdGhpcyBvcHRpb24gY2hhbmdlcyB3aGVuIHVzaW5nIENUUkwtXiBpbiBJbnNlcnQgbW9kZQorCXxpX0NUUkwtXnwuCisJVGhlIHZhbHVlIGlzIHNldCB0byAxIHdoZW4gc2V0dGluZyAna2V5bWFwJyB0byBhIHZhbGlkIGtleW1hcCBuYW1lLgorCUl0IGlzIGFsc28gdXNlZCBmb3IgdGhlIGFyZ3VtZW50IG9mIGNvbW1hbmRzIGxpa2UgInIiIGFuZCAiZiIuCisJVGhlIHZhbHVlIDAgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSB3aXRoIEF0aGVuYSBhbmQgTW90aWYgd2l0aCBzb21lIFhJTQorCW1ldGhvZHMuICBVc2UgJ2ltZGlzYWJsZScgdG8gZGlzYWJsZSBYSU0gdGhlbi4KKworCQkJCQkJKidpbXNlYXJjaCcqIConaW1zJyoKKydpbXNlYXJjaCcgJ2ltcycJbnVtYmVyIChkZWZhdWx0IDAsIDIgd2hlbiBhbiBpbnB1dCBtZXRob2QgaXMgc3VwcG9ydGVkKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVNwZWNpZmllcyB3aGV0aGVyIDpsbWFwIG9yIGFuIElucHV0IE1ldGhvZCAoSU0pIGlzIHRvIGJlIHVzZWQgd2hlbgorCWVudGVyaW5nIGEgc2VhcmNoIHBhdHRlcm4uICBWYWxpZCB2YWx1ZXM6CisJCS0xCXRoZSB2YWx1ZSBvZiAnaW1pbnNlcnQnIGlzIHVzZWQsIG1ha2VzIGl0IGxvb2sgbGlrZQorCQkJJ2ltaW5zZXJ0JyBpcyBhbHNvIHVzZWQgd2hlbiB0eXBpbmcgYSBzZWFyY2ggcGF0dGVybgorCQkwCTpsbWFwIGlzIG9mZiBhbmQgSU0gaXMgb2ZmCisJCTEJOmxtYXAgaXMgT04gYW5kIElNIGlzIG9mZgorCQkyCTpsbWFwIGlzIG9mZiBhbmQgSU0gaXMgT04KKwlOb3RlIHRoYXQgdGhpcyBvcHRpb24gY2hhbmdlcyB3aGVuIHVzaW5nIENUUkwtXiBpbiBDb21tYW5kLWxpbmUgbW9kZQorCXxjX0NUUkwtXnwuCisJVGhlIHZhbHVlIGlzIHNldCB0byAxIHdoZW4gaXQgaXMgbm90IC0xIGFuZCBzZXR0aW5nIHRoZSAna2V5bWFwJworCW9wdGlvbiB0byBhIHZhbGlkIGtleW1hcCBuYW1lLgorCVRoZSB2YWx1ZSAwIG1heSBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCBBdGhlbmEgYW5kIE1vdGlmIHdpdGggc29tZSBYSU0KKwltZXRob2RzLiAgVXNlICdpbWRpc2FibGUnIHRvIGRpc2FibGUgWElNIHRoZW4uCisKKwkJCQkJCSonaW5jbHVkZScqIConaW5jJyoKKydpbmNsdWRlJyAnaW5jJwkJc3RyaW5nCShkZWZhdWx0ICJeXHMqI1xzKmluY2x1ZGUiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrZmluZF9pbl9wYXRofCBmZWF0dXJlfQorCVBhdHRlcm4gdG8gYmUgdXNlZCB0byBmaW5kIGFuIGluY2x1ZGUgY29tbWFuZC4JSXQgaXMgYSBzZWFyY2gKKwlwYXR0ZXJuLCBqdXN0IGxpa2UgZm9yIHRoZSAiLyIgY29tbWFuZCAoU2VlIHxwYXR0ZXJufCkuICBUaGUgZGVmYXVsdAorCXZhbHVlIGlzIGZvciBDIHByb2dyYW1zLiAgVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgdGhlIGNvbW1hbmRzICJbaSIsCisJIl1JIiwgIltkIiwgZXRjLi4gIFRoZSAnaXNmbmFtZScgb3B0aW9uIGlzIHVzZWQgdG8gcmVjb2duaXplIHRoZSBmaWxlCisJbmFtZSB0aGF0IGNvbWVzIGFmdGVyIHRoZSBtYXRjaGVkIHBhdHRlcm4uICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8CisJYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisKKwkJCQkJCSonaW5jbHVkZWV4cHInKiAqJ2luZXgnKgorJ2luY2x1ZGVleHByJyAnaW5leCcJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtmaW5kX2luX3BhdGh8IG9yIHwrZXZhbHwgZmVhdHVyZX0KKwlFeHByZXNzaW9uIHRvIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBzdHJpbmcgZm91bmQgd2l0aCB0aGUgJ2luY2x1ZGUnCisJb3B0aW9uIHRvIGEgZmlsZSBuYW1lLglNb3N0bHkgdXNlZnVsIHRvIGNoYW5nZSAiLiIgdG8gIi8iIGZvciBKYXZhOiA+CisJCTpzZXQgaW5jbHVkZWV4cHI9c3Vic3RpdHV0ZSh2OmZuYW1lLCdcXC4nLCcvJywnZycpCis8CVRoZSAidjpmbmFtZSIgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gdGhlIGZpbGUgbmFtZSB0aGF0IHdhcyBkZXRlY3RlZC4KKwlFdmFsdWF0ZWQgaW4gdGhlIHxzYW5kYm94fC4KKwlBbHNvIHVzZWQgZm9yIHRoZSB8Z2Z8IGNvbW1hbmQgaWYgYW4gdW5tb2RpZmllZCBmaWxlIG5hbWUgY2FuJ3QgYmUKKwlmb3VuZC4JQWxsb3dzIGRvaW5nICJnZiIgb24gdGhlIG5hbWUgYWZ0ZXIgYW4gJ2luY2x1ZGUnIHN0YXRlbWVudC4KKwlBbHNvIHVzZWQgZm9yIHw8Y2ZpbGU+fC4KKworCQkJCSAqJ2luY3NlYXJjaCcqIConaXMnKiAqJ25vaW5jc2VhcmNoJyogKidub2lzJyoKKydpbmNzZWFyY2gnICdpcycJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2V4dHJhX3NlYXJjaHwgZmVhdHVyZX0KKwlXaGlsZSB0eXBpbmcgYSBzZWFyY2ggY29tbWFuZCwgc2hvdyBpbW1lZGlhdGVseSB3aGVyZSB0aGUgc28gZmFyCisJdHlwZWQgcGF0dGVybiBtYXRjaGVzLglUaGUgbWF0Y2hlZCBzdHJpbmcgaXMgaGlnaGxpZ2h0ZWQuICBJZiB0aGUKKwlwYXR0ZXJuIGlzIGludmFsaWQgb3Igbm90IGZvdW5kLCBub3RoaW5nIGlzIHNob3duLiAgVGhlIHNjcmVlbiB3aWxsCisJYmUgdXBkYXRlZCBvZnRlbiwgdGhpcyBpcyBvbmx5IHVzZWZ1bCBvbiBmYXN0IHRlcm1pbmFscy4gIE5vdGUgdGhhdAorCXRoZSBtYXRjaCB3aWxsIGJlIHNob3duLCBidXQgdGhlIGN1cnNvciBpcyBub3QgYWN0dWFsbHkgcG9zaXRpb25lZAorCXRoZXJlLglZb3Ugc3RpbGwgbmVlZCB0byBmaW5pc2ggdGhlIHNlYXJjaCBjb21tYW5kIHdpdGggPENSPiB0byBtb3ZlCisJdGhlIGN1cnNvci4gIFRoZSBoaWdobGlnaHRpbmcgY2FuIGJlIHNldCB3aXRoIHRoZSAnaScgZmxhZyBpbgorCSdoaWdobGlnaHQnLiAgU2VlIGFsc286ICdobHNlYXJjaCcuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2luZGVudGV4cHInKiAqJ2luZGUnKgorJ2luZGVudGV4cHInICdpbmRlJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY2luZGVudHwKKwkJCW9yIHwrZXZhbHwgZmVhdHVyZXN9CisJRXhwcmVzc2lvbiB3aGljaCBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIHRoZSBwcm9wZXIgaW5kZW50IGZvciBhIGxpbmUuCisJSXQgaXMgdXNlZCB3aGVuIGEgbmV3IGxpbmUgaXMgY3JlYXRlZCwgZm9yIHRoZSB8PXwgb3BlcmF0b3IgYW5kCisJaW4gSW5zZXJ0IG1vZGUgYXMgc3BlY2lmaWVkIHdpdGggdGhlICdpbmRlbnRrZXlzJyBvcHRpb24uCisJV2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgZW1wdHksIGl0IG92ZXJydWxlcyB0aGUgJ2NpbmRlbnQnIGFuZAorCSdzbWFydGluZGVudCcgaW5kZW50aW5nLgorCVdoZW4gJ3Bhc3RlJyBpcyBzZXQgdGhpcyBvcHRpb24gaXMgbm90IHVzZWQgZm9yIGluZGVudGluZy4KKwlUaGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgd2l0aCB8djpsbnVtfCBzZXQgdG8gdGhlIGxpbmUgbnVtYmVyIGZvcgorCXdoaWNoIHRoZSBpbmRlbnQgaXMgdG8gYmUgY29tcHV0ZWQuICBUaGUgY3Vyc29yIGlzIGFsc28gYXMgdGhpcyBsaW5lCisJd2hlbiB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgKGJ1dCBpdCBtYXkgYmUgbW92ZWQgYXJvdW5kKS4KKwlUaGUgZXhwcmVzc2lvbiBtdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIHNwYWNlcyB3b3J0aCBvZiBpbmRlbnQuICBJdAorCWNhbiByZXR1cm4gIi0xIiB0byBrZWVwIHRoZSBjdXJyZW50IGluZGVudCAodGhpcyBtZWFucyAnYXV0b2luZGVudCcgaXMKKwl1c2VkIGZvciB0aGUgaW5kZW50KS4KKwlGdW5jdGlvbnMgdXNlZnVsIGZvciBjb21wdXRpbmcgdGhlIGluZGVudCBhcmUgfGluZGVudCgpfCwgfGNpbmRlbnQoKXwKKwlhbmQgfGxpc3BpbmRlbnQoKXwuCisJVGhlIGV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gbXVzdCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMhICBJdCBtdXN0CisJbm90IGNoYW5nZSB0aGUgdGV4dCwganVtcCB0byBhbm90aGVyIHdpbmRvdywgZXRjLiAgQWZ0ZXJ3YXJkcyB0aGUKKwljdXJzb3IgcG9zaXRpb24gaXMgYWx3YXlzIHJlc3RvcmVkLCB0aHVzIHRoZSBjdXJzb3IgbWF5IGJlIG1vdmVkLgorCU5vcm1hbGx5IHRoaXMgb3B0aW9uIHdvdWxkIGJlIHNldCB0byBjYWxsIGEgZnVuY3Rpb246ID4KKwkJOnNldCBpbmRlbnRleHByPUdldE15SW5kZW50KCkKKzwJRXJyb3IgbWVzc2FnZXMgd2lsbCBiZSBzdXBwcmVzc2VkLCB1bmxlc3MgdGhlICdkZWJ1Zycgb3B0aW9uIGNvbnRhaW5zCisJIm1zZyIuCisJU2VlIHxpbmRlbnQtZXhwcmVzc2lvbnwuICBBbHNvIHNlZSB8ZXZhbC1zYW5kYm94fC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBtYWRlIGVtcHR5IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidpbmRlbnRrZXlzJyogKidpbmRrJyoKKydpbmRlbnRrZXlzJyAnaW5kaycJc3RyaW5nCShkZWZhdWx0ICIweywwfSw6LDAjLCFeRixvLE8sZSIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY2luZGVudHwKKwkJCWZlYXR1cmV9CisJQSBsaXN0IG9mIGtleXMgdGhhdCwgd2hlbiB0eXBlZCBpbiBJbnNlcnQgbW9kZSwgY2F1c2UgcmVpbmRlbnRpbmcgb2YKKwl0aGUgY3VycmVudCBsaW5lLiAgT25seSBoYXBwZW5zIGlmICdpbmRlbnRleHByJyBpc24ndCBlbXB0eS4KKwlUaGUgZm9ybWF0IGlzIGlkZW50aWNhbCB0byAnY2lua2V5cycsIHNlZSB8aW5kZW50a2V5cy1mb3JtYXR8LgorCVNlZSB8Qy1pbmRlbnRpbmd8IGFuZCB8aW5kZW50LWV4cHJlc3Npb258LgorCisJCQkqJ2luZmVyY2FzZScqIConaW5mJyogKidub2luZmVyY2FzZScqIConbm9pbmYnKgorJ2luZmVyY2FzZScgJ2luZicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJV2hlbiBkb2luZyBrZXl3b3JkIGNvbXBsZXRpb24gaW4gaW5zZXJ0IG1vZGUgfGlucy1jb21wbGV0aW9ufCwgYW5kCisJJ2lnbm9yZWNhc2UnIGlzIGFsc28gb24sIHRoZSBjYXNlIG9mIHRoZSBtYXRjaCBpcyBhZGp1c3RlZC4gIElmIHRoZQorCXR5cGVkIHRleHQgY29udGFpbnMgYSBsb3dlcmNhc2UgbGV0dGVyIHdoZXJlIHRoZSBtYXRjaCBoYXMgYW4gdXBwZXIKKwljYXNlIGxldHRlciwgdGhlIGNvbXBsZXRlZCBwYXJ0IGlzIG1hZGUgbG93ZXJjYXNlLiAgSWYgdGhlIHR5cGVkIHRleHQKKwloYXMgbm8gbG93ZXJjYXNlIGxldHRlcnMgYW5kIHRoZSBtYXRjaCBoYXMgYSBsb3dlcmNhc2UgbGV0dGVyIHdoZXJlCisJdGhlIHR5cGVkIHRleHQgaGFzIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGFuZCB0aGVyZSBpcyBhIGxldHRlciBiZWZvcmUKKwlpdCwgdGhlIGNvbXBsZXRlZCBwYXJ0IGlzIG1hZGUgdXBwZXJjYXNlLgorCisJCQkqJ2luc2VydG1vZGUnKiAqJ2ltJyogKidub2luc2VydG1vZGUnKiAqJ25vaW0nKgorJ2luc2VydG1vZGUnICdpbScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWFrZXMgVmltIHdvcmsgaW4gYSB3YXkgdGhhdCBJbnNlcnQgbW9kZSBpcyB0aGUgZGVmYXVsdCBtb2RlLiAgVXNlZnVsCisJaWYgeW91IHdhbnQgdG8gdXNlIFZpbSBhcyBhIG1vZGVsZXNzIGVkaXRvci4gIFVzZWQgZm9yIHxldmltfC4KKwlUaGVzZSBJbnNlcnQgbW9kZSBjb21tYW5kcyB3aWxsIGJlIHVzZWZ1bDoKKwktIFVzZSB0aGUgY3Vyc29yIGtleXMgdG8gbW92ZSBhcm91bmQuCisJLSBVc2UgQ1RSTC1PIHRvIGV4ZWN1dGUgb25lIE5vcm1hbCBtb2RlIGNvbW1hbmQgfGlfQ1RSTC1PfCkuICBXaGVuCisJICB0aGlzIGlzIGEgbWFwcGluZywgaXQgaXMgZXhlY3V0ZWQgYXMgaWYgJ2luc2VydG1vZGUnIHdhcyBvZmYuCisJICBOb3JtYWwgbW9kZSByZW1haW5zIGFjdGl2ZSB1bnRpbCB0aGUgbWFwcGluZyBpcyBmaW5pc2hlZC4KKwkJCQkJCQkJKmlfQ1RSTC1MKgorCS0gVXNlIENUUkwtTCB0byBleGVjdXRlIGEgbnVtYmVyIG9mIE5vcm1hbCBtb2RlIGNvbW1hbmRzLCB0aGVuIHVzZQorCSAgPEVzYz4gdG8gZ2V0IGJhY2sgdG8gSW5zZXJ0IG1vZGUuCisKKwlUaGVzZSBpdGVtcyBjaGFuZ2Ugd2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0OgorCS0gd2hlbiBzdGFydGluZyB0byBlZGl0IG9mIGEgZmlsZSwgVmltIGdvZXMgdG8gSW5zZXJ0IG1vZGUuCisJLSA8RXNjPiBpbiBJbnNlcnQgbW9kZSBpcyBhIG5vLW9wIGFuZCBiZWVwcy4KKwktIDxFc2M+IGluIE5vcm1hbCBtb2RlIG1ha2VzIFZpbSBnbyB0byBJbnNlcnQgbW9kZS4KKwktIENUUkwtTCBpbiBJbnNlcnQgbW9kZSBpcyBhIGNvbW1hbmQsIGl0IGlzIG5vdCBpbnNlcnRlZC4KKwktIENUUkwtWiBpbiBJbnNlcnQgbW9kZSBzdXNwZW5kcyBWaW0sIHNlZSB8Q1RSTC1afC4JKmlfQ1RSTC1aKgorCUhvd2V2ZXIsIHdoZW4gPEVzYz4gaXMgdXNlZCBpbnNpZGUgYSBtYXBwaW5nLCBpdCBiZWhhdmVzIGxpa2UKKwknaW5zZXJ0bW9kZScgd2FzIG5vdCBzZXQuICBUaGlzIHdhcyBkb25lIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBzYW1lCisJbWFwcGluZ3Mgd2l0aCAnaW5zZXJ0bW9kZScgc2V0IG9yIG5vdCBzZXQuCisJV2hlbiBleGVjdXRpbmcgY29tbWFuZHMgd2l0aCB8Om5vcm1hbHwgJ2luc2VydG1vZGUnIGlzIG5vdCB1c2VkLgorCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2lzZm5hbWUnKiAqJ2lzZicqCisnaXNmbmFtZScgJ2lzZicJCXN0cmluZwkoZGVmYXVsdCBmb3IgTVMtRE9TLCBXaW4zMiBhbmQgT1MvMjoKKwkJCSAgICAgIkAsNDgtNTcsLyxcLC4sLSxfLCssLCwjLCQsJSx7LH0sWyxdLDosQC1ALCEsfiw9IgorCQkJICAgIGZvciBBTUlHQTogIkAsNDgtNTcsLywuLC0sXywrLCwsJCw6IgorCQkJICAgIGZvciBWTVM6ICJALDQ4LTU3LC8sLiwtLF8sKywsLCMsJCwlLDwsPixbLF0sOiw7LH4iCisJCQkgICAgZm9yIE9TLzM5MDogIkAsMjQwLTI0OSwvLC4sLSxfLCssLCwjLCQsJSx+LD0iCisJCQkgICAgb3RoZXJ3aXNlOiAiQCw0OC01NywvLC4sLSxfLCssLCwjLCQsJSx+LD0iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSBjaGFyYWN0ZXJzIHNwZWNpZmllZCBieSB0aGlzIG9wdGlvbiBhcmUgaW5jbHVkZWQgaW4gZmlsZSBuYW1lcyBhbmQKKwlwYXRoIG5hbWVzLiAgRmlsZW5hbWVzIGFyZSB1c2VkIGZvciBjb21tYW5kcyBsaWtlICJnZiIsICJbaSIgYW5kIGluCisJdGhlIHRhZ3MgZmlsZS4JSXQgaXMgYWxzbyB1c2VkIGZvciAiXGYiIGluIGEgfHBhdHRlcm58LgorCU11bHRpLWJ5dGUgY2hhcmFjdGVycyAyNTYgYW5kIGFib3ZlIGFyZSBhbHdheXMgaW5jbHVkZWQsIG9ubHkgdGhlCisJY2hhcmFjdGVycyB1cCB0byAyNTUgYXJlIHNwZWNpZmllZCB3aXRoIHRoaXMgb3B0aW9uLgorCUZvciBVVEYtOCB0aGUgY2hhcmFjdGVycyAweGEwIHRvIDB4ZmYgYXJlIGluY2x1ZGVkIGFzIHdlbGwuCisKKwlOb3RlIHRoYXQgb24gc3lzdGVtcyB1c2luZyBhIGJhY2tzbGFzaCBhcyBwYXRoIHNlcGFyYXRvciwgVmltIHRyaWVzIHRvCisJZG8gaXRzIGJlc3QgdG8gbWFrZSBpdCB3b3JrIGFzIHlvdSB3b3VsZCBleHBlY3QuICBUaGF0IGlzIGEgYml0CisJdHJpY2t5LCBzaW5jZSBWaSBvcmlnaW5hbGx5IHVzZWQgdGhlIGJhY2tzbGFzaCB0byBlc2NhcGUgc3BlY2lhbAorCWNoYXJhY3RlcnMuICBWaW0gd2lsbCBub3QgcmVtb3ZlIGEgYmFja3NsYXNoIGluIGZyb250IG9mIGEgbm9ybWFsIGZpbGUKKwluYW1lIGNoYXJhY3RlciBvbiB0aGVzZSBzeXN0ZW1zLCBidXQgaXQgd2lsbCBvbiBVbml4IGFuZCBhbGlrZXMuICBUaGUKKwknJicgYW5kICdeJyBhcmUgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQsIGJlY2F1c2UgdGhlc2UgYXJlIHNwZWNpYWwgZm9yCisJY21kLmV4ZS4KKworCVRoZSBmb3JtYXQgb2YgdGhpcyBvcHRpb24gaXMgYSBsaXN0IG9mIHBhcnRzLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMuCisJRWFjaCBwYXJ0IGNhbiBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgbnVtYmVyIG9yIGEgcmFuZ2UuCUEgcmFuZ2UgaXMgdHdvCisJY2hhcmFjdGVyIG51bWJlcnMgd2l0aCAnLScgaW4gYmV0d2Vlbi4JQSBjaGFyYWN0ZXIgbnVtYmVyIGNhbiBiZSBhCisJZGVjaW1hbCBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUgb3IgdGhlIEFTQ0lJIGNoYXJhY3RlciBpdHNlbGYgKGRvZXMKKwlub3Qgd29yayBmb3IgZGlnaXRzKS4gIEV4YW1wbGU6CisJCSJfLC0sMTI4LTE0MCwjLTQzIgkoaW5jbHVkZSAnXycgYW5kICctJyBhbmQgdGhlIHJhbmdlCisJCQkJCTEyOCB0byAxNDAgYW5kICcjJyB0byA0MykKKwlJZiBhIHBhcnQgc3RhcnRzIHdpdGggJ14nLCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBudW1iZXIgb3IgcmFuZ2UKKwl3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIG9wdGlvbi4gIFRoZSBvcHRpb24gaXMgaW50ZXJwcmV0ZWQgZnJvbSBsZWZ0CisJdG8gcmlnaHQuICBQdXQgdGhlIGV4Y2x1ZGVkIGNoYXJhY3RlciBhZnRlciB0aGUgcmFuZ2Ugd2hlcmUgaXQgaXMKKwlpbmNsdWRlZC4gIFRvIGluY2x1ZGUgJ14nIGl0c2VsZiB1c2UgaXQgYXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZQorCW9wdGlvbiBvciB0aGUgZW5kIG9mIGEgcmFuZ2UuICBFeGFtcGxlOgorCQkiXmEteiwjLF4iCShleGNsdWRlICdhJyB0byAneicsIGluY2x1ZGUgJyMnIGFuZCAnXicpCisJSWYgdGhlIGNoYXJhY3RlciBpcyAnQCcsIGFsbCBjaGFyYWN0ZXJzIHdoZXJlIGlzYWxwaGEoKSByZXR1cm5zIFRSVUUKKwlhcmUgaW5jbHVkZWQuICBOb3JtYWxseSB0aGVzZSBhcmUgdGhlIGNoYXJhY3RlcnMgYSB0byB6IGFuZCBBIHRvIFosCisJcGx1cyBhY2NlbnRlZCBjaGFyYWN0ZXJzLiAgVG8gaW5jbHVkZSAnQCcgaXRzZWxmIHVzZSAiQC1AIi4gIEV4YW1wbGVzOgorCQkiQCxeYS16IglBbGwgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLCBleGNsdWRpbmcgbG93ZXIKKwkJCQljYXNlIGxldHRlcnMuCisJCSJhLXosQS1aLEAtQCIJQWxsIGxldHRlcnMgcGx1cyB0aGUgJ0AnIGNoYXJhY3Rlci4KKwlBIGNvbW1hIGNhbiBiZSBpbmNsdWRlZCBieSB1c2luZyBpdCB3aGVyZSBhIGNoYXJhY3RlciBudW1iZXIgaXMKKwlleHBlY3RlZC4gIEV4YW1wbGU6CisJCSI0OC01NywsLF8iCURpZ2l0cywgY29tbWEgYW5kIHVuZGVyc2NvcmUuCisJQSBjb21tYSBjYW4gYmUgZXhjbHVkZWQgYnkgcHJlcGVuZGluZyBhICdeJy4gIEV4YW1wbGU6CisJCSIgLX4sXiwsOSIJQWxsIGNoYXJhY3RlcnMgZnJvbSBzcGFjZSB0byAnficsIGV4Y2x1ZGluZworCQkJCWNvbW1hLCBwbHVzIDxUYWI+LgorCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisKKwkJCQkJCSonaXNpZGVudCcqIConaXNpJyoKKydpc2lkZW50JyAnaXNpJwkJc3RyaW5nCShkZWZhdWx0IGZvciBNUy1ET1MsIFdpbjMyIGFuZCBPUy8yOgorCQkJCQkgICAiQCw0OC01NyxfLDEyOC0xNjcsMjI0LTIzNSIKKwkJCQlvdGhlcndpc2U6ICJALDQ4LTU3LF8sMTkyLTI1NSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIGNoYXJhY3RlcnMgZ2l2ZW4gYnkgdGhpcyBvcHRpb24gYXJlIGluY2x1ZGVkIGluIGlkZW50aWZpZXJzLgorCUlkZW50aWZpZXJzIGFyZSB1c2VkIGluIHJlY29nbml6aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgYWZ0ZXIgYQorCW1hdGNoIG9mIHRoZSAnZGVmaW5lJyBvcHRpb24uICBJdCBpcyBhbHNvIHVzZWQgZm9yICJcaSIgaW4gYQorCXxwYXR0ZXJufC4gU2VlICdpc2ZuYW1lJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0IG9mIHRoaXMKKwlvcHRpb24uCisJQ2FyZWZ1bDogSWYgeW91IGNoYW5nZSB0aGlzIG9wdGlvbiwgaXQgbWlnaHQgYnJlYWsgZXhwYW5kaW5nCisJZW52aXJvbm1lbnQgdmFyaWFibGVzLglFLmcuLCB3aGVuICcvJyBpcyBpbmNsdWRlZCBhbmQgVmltIHRyaWVzIHRvCisJZXhwYW5kICIkSE9NRS8udmltaW5mbyIuICBNYXliZSB5b3Ugc2hvdWxkIGNoYW5nZSAnaXNrZXl3b3JkJyBpbnN0ZWFkLgorCisJCQkJCQkqJ2lza2V5d29yZCcqIConaXNrJyoKKydpc2tleXdvcmQnICdpc2snCXN0cmluZyAoVmltIGRlZmF1bHQgZm9yIE1TLURPUyBhbmQgV2luMzI6CisJCQkJCSAgICAiQCw0OC01NyxfLDEyOC0xNjcsMjI0LTIzNSIKKwkJCQkgICBvdGhlcndpc2U6ICAiQCw0OC01NyxfLDE5Mi0yNTUiCisJCQkJVmkgZGVmYXVsdDogIkAsNDgtNTcsXyIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJS2V5d29yZHMgYXJlIHVzZWQgaW4gc2VhcmNoaW5nIGFuZCByZWNvZ25pemluZyB3aXRoIG1hbnkgY29tbWFuZHM6CisJInciLCAiKiIsICJbaSIsIGV0Yy4gIEl0IGlzIGFsc28gdXNlZCBmb3IgIlxrIiBpbiBhIHxwYXR0ZXJufC4JU2VlCisJJ2lzZm5hbWUnIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXQgb2YgdGhpcyBvcHRpb24uICBGb3IgQworCXByb2dyYW1zIHlvdSBjb3VsZCB1c2UgImEteixBLVosNDgtNTcsXywuLC0sPiIuCisJRm9yIGEgaGVscCBmaWxlIGl0IGlzIHNldCB0byBhbGwgbm9uLWJsYW5rIHByaW50YWJsZSBjaGFyYWN0ZXJzIGV4Y2VwdAorCScqJywgJyInIGFuZCAnfCcgKHNvIHRoYXQgQ1RSTC1dIG9uIGEgY29tbWFuZCBmaW5kcyB0aGUgaGVscCBmb3IgdGhhdAorCWNvbW1hbmQpLgorCVdoZW4gdGhlICdsaXNwJyBvcHRpb24gaXMgb24gdGhlICctJyBjaGFyYWN0ZXIgaXMgYWx3YXlzIGluY2x1ZGVkLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ2lzcHJpbnQnKiAqJ2lzcCcqCisnaXNwcmludCcgJ2lzcCcJc3RyaW5nCShkZWZhdWx0IGZvciBNUy1ET1MsIFdpbjMyLCBPUy8yIGFuZCBNYWNpbnRvc2g6CisJCQkJIkAsfi0yNTUiOyBvdGhlcndpc2U6ICJALDE2MS0yNTUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSBjaGFyYWN0ZXJzIGdpdmVuIGJ5IHRoaXMgb3B0aW9uIGFyZSBkaXNwbGF5ZWQgZGlyZWN0bHkgb24gdGhlCisJc2NyZWVuLiAgSXQgaXMgYWxzbyB1c2VkIGZvciAiXHAiIGluIGEgfHBhdHRlcm58LiAgVGhlIGNoYXJhY3RlcnMgZnJvbQorCXNwYWNlIChBU0NJSSAzMikgdG8gJ34nIChBU0NJSSAxMjYpIGFyZSBhbHdheXMgZGlzcGxheWVkIGRpcmVjdGx5LAorCWV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgaW5jbHVkZWQgaW4gJ2lzcHJpbnQnIG9yIGV4Y2x1ZGVkLiAgU2VlCisJJ2lzZm5hbWUnIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXQgb2YgdGhpcyBvcHRpb24uCisKKwlOb24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCB3aXRoIHR3byBjaGFyYWN0ZXJzOgorCQkgIDAgLSAgMzEJIl5AIiAtICJeXyIKKwkJIDMyIC0gMTI2CWFsd2F5cyBzaW5nbGUgY2hhcmFjdGVycworCQkgICAxMjcJCSJePyIKKwkJMTI4IC0gMTU5CSJ+QCIgLSAifl8iCisJCTE2MCAtIDI1NAkifCAiIC0gInx+IgorCQkgICAyNTUJCSJ+PyIKKwlXaGVuICdlbmNvZGluZycgaXMgYSBVbmljb2RlIG9uZSwgaWxsZWdhbCBieXRlcyBmcm9tIDEyOCB0byAyNTUgYXJlCisJZGlzcGxheWVkIGFzIDx4eD4sIHdpdGggdGhlIGhleGFkZWNpbWFsIHZhbHVlIG9mIHRoZSBieXRlLgorCVdoZW4gJ2Rpc3BsYXknIGNvbnRhaW5zICJ1aGV4IiBhbGwgdW5wcmludGFibGUgY2hhcmFjdGVycyBhcmUKKwlkaXNwbGF5ZWQgYXMgPHh4Pi4KKwlUaGUgTm9uVGV4dCBoaWdobGlnaHRpbmcgd2lsbCBiZSB1c2VkIGZvciB1bnByaW50YWJsZSBjaGFyYWN0ZXJzLgorCXxobC1Ob25UZXh0fAorCisJTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIDI1NiBhbmQgYWJvdmUgYXJlIGFsd2F5cyBpbmNsdWRlZCwgb25seSB0aGUKKwljaGFyYWN0ZXJzIHVwIHRvIDI1NSBhcmUgc3BlY2lmaWVkIHdpdGggdGhpcyBvcHRpb24uICBXaGVuIGEgY2hhcmFjdGVyCisJaXMgcHJpbnRhYmxlIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGZvbnQsIGEKKwlyZXBsYWNlbWVudCBjaGFyYWN0ZXIgd2lsbCBiZSBzaG93bi4KKwlVbnByaW50YWJsZSBhbmQgemVyby13aWR0aCBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBhcyA8eHh4eD4uCisJVGhlcmUgaXMgbm8gb3B0aW9uIHRvIHNwZWNpZnkgdGhlc2UgY2hhcmFjdGVycy4KKworCQkJKidqb2luc3BhY2VzJyogKidqcycqIConbm9qb2luc3BhY2VzJyogKidub2pzJyoKKydqb2luc3BhY2VzJyAnanMnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJSW5zZXJ0IHR3byBzcGFjZXMgYWZ0ZXIgYSAnLicsICc/JyBhbmQgJyEnIHdpdGggYSBqb2luIGNvbW1hbmQuCisJV2hlbiAnY3BvcHRpb25zJyBpbmNsdWRlcyB0aGUgJ2onIGZsYWcsIG9ubHkgZG8gdGhpcyBhZnRlciBhICcuJy4KKwlPdGhlcndpc2Ugb25seSBvbmUgc3BhY2UgaXMgaW5zZXJ0ZWQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJCSona2V5JyoKKydrZXknCQkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVRoZSBrZXkgdGhhdCBpcyB1c2VkIGZvciBlbmNyeXB0aW5nIGFuZCBkZWNyeXB0aW5nIHRoZSBjdXJyZW50IGJ1ZmZlci4KKwlTZWUgfGVuY3J5cHRpb258LgorCUNhcmVmdWw6IERvIG5vdCBzZXQgdGhlIGtleSB2YWx1ZSBieSBoYW5kLCBzb21lb25lIG1pZ2h0IHNlZSB0aGUgdHlwZWQKKwlrZXkuICBVc2UgdGhlIHw6WHwgY29tbWFuZC4gIEJ1dCB5b3UgY2FuIG1ha2UgJ2tleScgZW1wdHk6ID4KKwkJOnNldCBrZXk9Cis8CUl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIHdpdGggIjpzZXQga2V5IiBvcgorCSJlY2hvICZrZXkiLiAgVGhpcyBpcyB0byBhdm9pZCBzaG93aW5nIGl0IHRvIHNvbWVvbmUgd2hvIHNob3VsZG4ndAorCWtub3cuICBJdCBhbHNvIG1lYW5zIHlvdSBjYW5ub3Qgc2VlIGl0IHlvdXJzZWxmIG9uY2UgeW91IGhhdmUgc2V0IGl0LAorCWJlIGNhcmVmdWwgbm90IHRvIG1ha2UgYSB0eXBpbmcgZXJyb3IhCisKKwkJCQkJKidrZXltYXAnKiAqJ2ttcCcqICpFNTQ0KgorJ2tleW1hcCcgJ2ttcCcJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwra2V5bWFwfAorCQkJZmVhdHVyZX0KKwlOYW1lIG9mIGEga2V5Ym9hcmQgbWFwcGluZy4gIFNlZSB8bWJ5dGUta2V5bWFwfC4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGEgdmFsaWQga2V5bWFwIG5hbWUgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZgorCXNldHRpbmcgJ2ltaW5zZXJ0JyB0byBvbmUsIHNvIHRoYXQgdGhlIGtleW1hcCBiZWNvbWVzIGVmZmVjdGl2ZS4KKwknaW1zZWFyY2gnIGlzIGFsc28gc2V0IHRvIG9uZSwgdW5sZXNzIGl0IHdhcyAtMQorCisJCQkJCSona2V5bW9kZWwnKiAqJ2ttJyoKKydrZXltb2RlbCcgJ2ttJwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzLCB3aGljaCBlbmFibGUgc3BlY2lhbCB0aGluZ3MgdGhhdCBrZXlzCisJY2FuIGRvLiAgVGhlc2UgdmFsdWVzIGNhbiBiZSB1c2VkOgorCSAgIHN0YXJ0c2VsCVVzaW5nIGEgc2hpZnRlZCBzcGVjaWFsIGtleSBzdGFydHMgc2VsZWN0aW9uIChlaXRoZXIKKwkJCVNlbGVjdCBtb2RlIG9yIFZpc3VhbCBtb2RlLCBkZXBlbmRpbmcgb24gImtleSIgYmVpbmcKKwkJCXByZXNlbnQgaW4gJ3NlbGVjdG1vZGUnKS4KKwkgICBzdG9wc2VsCVVzaW5nIGEgbm90LXNoaWZ0ZWQgc3BlY2lhbCBrZXkgc3RvcHMgc2VsZWN0aW9uLgorCVNwZWNpYWwga2V5cyBpbiB0aGlzIGNvbnRleHQgYXJlIHRoZSBjdXJzb3Iga2V5cywgPEVuZD4sIDxIb21lPiwKKwk8UGFnZVVwPiBhbmQgPFBhZ2VEb3duPi4KKwlUaGUgJ2tleW1vZGVsJyBvcHRpb24gaXMgc2V0IGJ5IHRoZSB8OmJlaGF2ZXwgY29tbWFuZC4KKworCQkJCQkqJ2tleXdvcmRwcmcnKiAqJ2twJyoKKydrZXl3b3JkcHJnJyAna3AnCXN0cmluZwkoZGVmYXVsdCAibWFuIiBvciAibWFuIC1zIiwgIERPUzogIjpoZWxwIiwKKwkJCQkJCU9TLzI6ICJ2aWV3IC8iLCBWTVM6ICJoZWxwIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJUHJvZ3JhbSB0byB1c2UgZm9yIHRoZSB8S3wgY29tbWFuZC4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKwlleHBhbmRlZCB8OnNldF9lbnZ8LiAgIjpoZWxwIiBtYXkgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIFZpbSBpbnRlcm5hbAorCWhlbHAuICAoTm90ZSB0aGF0IHByZXZpb3VzbHkgc2V0dGluZyB0aGUgZ2xvYmFsIG9wdGlvbiB0byB0aGUgZW1wdHkKKwl2YWx1ZSBkaWQgdGhpcywgd2hpY2ggaXMgbm93IGRlcHJlY2F0ZWQuKQorCVdoZW4gIm1hbiIgaXMgdXNlZCwgVmltIHdpbGwgYXV0b21hdGljYWxseSB0cmFuc2xhdGUgYSBjb3VudCBmb3IgdGhlCisJIksiIGNvbW1hbmQgdG8gYSBzZWN0aW9uIG51bWJlci4gIEFsc28gZm9yICJtYW4gLXMiLCBpbiB3aGljaCBjYXNlIHRoZQorCSItcyIgaXMgcmVtb3ZlZCB3aGVuIHRoZXJlIGlzIG5vIGNvdW50LgorCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJRXhhbXBsZTogPgorCQk6c2V0IGtleXdvcmRwcmc9bWFuXCAtcworPAlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJKidsYW5nbWFwJyogKidsbWFwJyogKkUzNTcqICpFMzU4KgorJ2xhbmdtYXAnICdsbWFwJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2xhbmdtYXB8CisJCQlmZWF0dXJlfQorCVRoaXMgb3B0aW9uIGFsbG93cyBzd2l0Y2hpbmcgeW91ciBrZXlib2FyZCBpbnRvIGEgc3BlY2lhbCBsYW5ndWFnZQorCW1vZGUuCVdoZW4geW91IGFyZSB0eXBpbmcgdGV4dCBpbiBJbnNlcnQgbW9kZSB0aGUgY2hhcmFjdGVycyBhcmUKKwlpbnNlcnRlZCBkaXJlY3RseS4gIFdoZW4gaW4gY29tbWFuZCBtb2RlIHRoZSAnbGFuZ21hcCcgb3B0aW9uIHRha2VzCisJY2FyZSBvZiB0cmFuc2xhdGluZyB0aGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gdGhlIG9yaWdpbmFsIG1lYW5pbmcKKwlvZiB0aGUga2V5LiAgVGhpcyBtZWFucyB5b3UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgdGhlIGtleWJvYXJkIG1vZGUgdG8KKwliZSBhYmxlIHRvIGV4ZWN1dGUgTm9ybWFsIG1vZGUgY29tbWFuZHMuCisJVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlICdrZXltYXAnIG9wdGlvbiwgd2hlcmUgY2hhcmFjdGVycyBhcmUKKwltYXBwZWQgaW4gSW5zZXJ0IG1vZGUuCisJVGhpcyBvbmx5IHdvcmtzIGZvciA4LWJpdCBjaGFyYWN0ZXJzLiAgVGhlIHZhbHVlIG9mICdsYW5nbWFwJyBtYXkgYmUKKwlzcGVjaWZpZWQgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgKGUuZy4sIFVURi04KSwgYnV0IG9ubHkgdGhlIGxvd2VyCisJOCBiaXRzIG9mIGVhY2ggY2hhcmFjdGVyIHdpbGwgYmUgdXNlZC4KKworCUV4YW1wbGUgKGZvciBHcmVlayk6CQkJCQkqZ3JlZWsqICA+CisJICAgIDpzZXQgbGFuZ21hcD3BQSzCQizYQyzERCzFRSzWRizDRyzHSCzJSSzOSizKSyzLTCzMTSzNTizPTyzQUCxRUSzRUizTUyzUVCzIVSzZVixXVyzXWCzVWSzGWizhYSziYiz4YyzkZCzlZSz2ZizjZyznaCzpaSzuaizqayzrbCzsbSztbizvbyzwcCxxcSzxcizzcyz0dCzodSz5dizydyz3eCz1eSzmegorPAlFeGFtcGxlIChleGNoYW5nZXMgbWVhbmluZyBvZiB6IGFuZCB5IGZvciBjb21tYW5kcyk6ID4KKwkgICAgOnNldCBsYW5nbWFwPXp5LHl6LFpZLFlaCis8CisJVGhlICdsYW5nbWFwJyBvcHRpb24gaXMgYSBsaXN0IG9mIHBhcnRzLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMuICBFYWNoCisJcGFydCBjYW4gYmUgaW4gb25lIG9mIHR3byBmb3JtczoKKwkxLiAgQSBsaXN0IG9mIHBhaXJzLiAgRWFjaCBwYWlyIGlzIGEgImZyb20iIGNoYXJhY3RlciBpbW1lZGlhdGVseQorCSAgICBmb2xsb3dlZCBieSB0aGUgInRvIiBjaGFyYWN0ZXIuICBFeGFtcGxlczogImFBIiwgImFBYkJjQyIuCisJMi4gIEEgbGlzdCBvZiAiZnJvbSIgY2hhcmFjdGVycywgYSBzZW1pLWNvbG9uIGFuZCBhIGxpc3Qgb2YgInRvIgorCSAgICBjaGFyYWN0ZXJzLiAgRXhhbXBsZTogImFiYztBQkMiCisJRXhhbXBsZTogImFBLGZnaDtGR0gsY0NkRGVFIgorCVNwZWNpYWwgY2hhcmFjdGVycyBuZWVkIHRvIGJlIHByZWNlZGVkIHdpdGggYSBiYWNrc2xhc2guICBUaGVzZSBhcmUKKwkiOyIsICcsJyBhbmQgYmFja3NsYXNoIGl0c2VsZi4KKworCVRoaXMgd2lsbCBhbGxvdyB5b3UgdG8gYWN0aXZhdGUgdmltIGFjdGlvbnMgd2l0aG91dCBoYXZpbmcgdG8gc3dpdGNoCisJYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgbGFuZ3VhZ2VzLiAgWW91ciBsYW5ndWFnZSBjaGFyYWN0ZXJzIHdpbGwKKwliZSB1bmRlcnN0b29kIGFzIG5vcm1hbCB2aW0gRW5nbGlzaCBjaGFyYWN0ZXJzIChhY2NvcmRpbmcgdG8gdGhlCisJbGFuZ21hcCBtYXBwaW5ncykgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKKwkgbyBOb3JtYWwvVmlzdWFsIG1vZGUgKGNvbW1hbmRzLCBidWZmZXIvcmVnaXN0ZXIgbmFtZXMsIHVzZXIgbWFwcGluZ3MpCisJIG8gSW5zZXJ0L1JlcGxhY2UgTW9kZTogUmVnaXN0ZXIgbmFtZXMgYWZ0ZXIgQ1RSTC1SCisJIG8gSW5zZXJ0L1JlcGxhY2UgTW9kZTogTWFwcGluZ3MKKwlDaGFyYWN0ZXJzIGVudGVyZWQgaW4gQ29tbWFuZC1saW5lIG1vZGUgd2lsbCBOT1QgYmUgYWZmZWN0ZWQgYnkKKwl0aGlzIG9wdGlvbi4gICBOb3RlIHRoYXQgdGhpcyBvcHRpb24gY2FuIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUKKwlhbGxvd2luZyB0byBzd2l0Y2ggYmV0d2VlbiBtYXBwaW5ncyBmb3IgZGlmZmVyZW50IGxhbmd1YWdlcy9lbmNvZGluZ3MuCisJVXNlIGEgbWFwcGluZyB0byBhdm9pZCBoYXZpbmcgdG8gdHlwZSBpdCBlYWNoIHRpbWUhCisKKwkJCQkJKidsYW5nbWVudScqIConbG0nKgorJ2xhbmdtZW51JyAnbG0nCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K21lbnV8IGFuZAorCQkJfCttdWx0aV9sYW5nfCBmZWF0dXJlc30KKwlMYW5ndWFnZSB0byB1c2UgZm9yIG1lbnUgdHJhbnNsYXRpb24uICBUZWxscyB3aGljaCBmaWxlIGlzIGxvYWRlZAorCWZyb20gdGhlICJsYW5nIiBkaXJlY3RvcnkgaW4gJ3J1bnRpbWVwYXRoJzogPgorCQkibGFuZy9tZW51XyIgLiAmbGFuZ21lbnUgLiAiLnZpbSIKKzwJKHdpdGhvdXQgdGhlIHNwYWNlcykuICBGb3IgZXhhbXBsZSwgdG8gYWx3YXlzIHVzZSB0aGUgRHV0Y2ggbWVudXMsIG5vCisJbWF0dGVyIHdoYXQgJExBTkcgaXMgc2V0IHRvOiA+CisJCTpzZXQgbGFuZ21lbnU9bmxfTkwuSVNPXzg4NTktMQorPAlXaGVuICdsYW5nbWVudScgaXMgZW1wdHksIHx2Omxhbmd8IGlzIHVzZWQuCisJSWYgeW91ciAkTEFORyBpcyBzZXQgdG8gYSBub24tRW5nbGlzaCBsYW5ndWFnZSBidXQgeW91IGRvIHdhbnQgdG8gdXNlCisJdGhlIEVuZ2xpc2ggbWVudXM6ID4KKwkJOnNldCBsYW5nbWVudT1ub25lCis8CVRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGJlZm9yZSBsb2FkaW5nIG1lbnVzLCBzd2l0Y2hpbmcgb24gZmlsZXR5cGUKKwlkZXRlY3Rpb24gb3Igc3ludGF4IGhpZ2hsaWdodGluZy4gIE9uY2UgdGhlIG1lbnVzIGFyZSBkZWZpbmVkIHNldHRpbmcKKwl0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LiAgQnV0IHlvdSBjb3VsZCBkbyB0aGlzOiA+CisJCTpzb3VyY2UgJFZJTVJVTlRJTUUvZGVsbWVudS52aW0KKwkJOnNldCBsYW5nbWVudT1kZV9ERS5JU09fODg1OS0xCisJCTpzb3VyY2UgJFZJTVJVTlRJTUUvbWVudS52aW0KKzwJV2FybmluZzogVGhpcyBkZWxldGVzIGFsbCBtZW51cyB0aGF0IHlvdSBkZWZpbmVkIHlvdXJzZWxmIQorCisJCQkJCSonbGFzdHN0YXR1cycqIConbHMnKgorJ2xhc3RzdGF0dXMnICdscycJbnVtYmVyCShkZWZhdWx0IDEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIGluZmx1ZW5jZXMgd2hlbiB0aGUgbGFzdCB3aW5kb3cgd2lsbCBoYXZlIGEKKwlzdGF0dXMgbGluZToKKwkJMDogbmV2ZXIKKwkJMTogb25seSBpZiB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIHdpbmRvd3MKKwkJMjogYWx3YXlzCisJVGhlIHNjcmVlbiBsb29rcyBuaWNlciB3aXRoIGEgc3RhdHVzIGxpbmUgaWYgeW91IGhhdmUgc2V2ZXJhbAorCXdpbmRvd3MsIGJ1dCBpdCB0YWtlcyBhbm90aGVyIHNjcmVlbiBsaW5lLiB8c3RhdHVzLWxpbmV8CisKKwkJCSonbGF6eXJlZHJhdycqIConbHonKiAqJ25vbGF6eXJlZHJhdycqIConbm9seicqCisnbGF6eXJlZHJhdycgJ2x6Jwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHNjcmVlbiB3aWxsIG5vdCBiZSByZWRyYXduIHdoaWxlCisJZXhlY3V0aW5nIG1hY3JvcywgcmVnaXN0ZXJzIGFuZCBvdGhlciBjb21tYW5kcyB0aGF0IGhhdmUgbm90IGJlZW4KKwl0eXBlZC4JQWxzbywgdXBkYXRpbmcgdGhlIHdpbmRvdyB0aXRsZSBpcyBwb3N0cG9uZWQuICBUbyBmb3JjZSBhbgorCXVwZGF0ZSB1c2UgfDpyZWRyYXd8LgorCisJCQkqJ2xpbmVicmVhaycqIConbGJyJyogKidub2xpbmVicmVhaycqIConbm9sYnInKgorJ2xpbmVicmVhaycgJ2xicicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICB8K2xpbmVicmVha3wKKwkJCWZlYXR1cmV9CisJSWYgb24gVmltIHdpbGwgd3JhcCBsb25nIGxpbmVzIGF0IGEgY2hhcmFjdGVyIGluICdicmVha2F0JyByYXRoZXIKKwl0aGFuIGF0IHRoZSBsYXN0IGNoYXJhY3RlciB0aGF0IGZpdHMgb24gdGhlIHNjcmVlbi4gIFVubGlrZQorCSd3cmFwbWFyZ2luJyBhbmQgJ3RleHR3aWR0aCcsIHRoaXMgZG9lcyBub3QgaW5zZXJ0IDxFT0w+cyBpbiB0aGUgZmlsZSwKKwlpdCBvbmx5IGFmZmVjdHMgdGhlIHdheSB0aGUgZmlsZSBpcyBkaXNwbGF5ZWQsIG5vdCBpdHMgY29udGVudHMuICBUaGUKKwl2YWx1ZSBvZiAnc2hvd2JyZWFrJyBpcyB1c2VkIHRvIHB1dCBpbiBmcm9udCBvZiB3cmFwcGVkIGxpbmVzLgorCVRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkIHdoZW4gdGhlICd3cmFwJyBvcHRpb24gaXMgb2ZmIG9yICdsaXN0JyBpcyBvbi4KKwlOb3RlIHRoYXQgPFRhYj4gY2hhcmFjdGVycyBhZnRlciBhbiA8RU9MPiBhcmUgbW9zdGx5IG5vdCBkaXNwbGF5ZWQKKwl3aXRoIHRoZSByaWdodCBhbW91bnQgb2Ygd2hpdGUgc3BhY2UuCisKKwkJCQkJCSonbGluZXMnKiAqRTU5MyoKKydsaW5lcycJCQludW1iZXIJKGRlZmF1bHQgMjQgb3IgdGVybWluYWwgaGVpZ2h0KQorCQkJZ2xvYmFsCisJTnVtYmVyIG9mIGxpbmVzIG9mIHRoZSBWaW0gd2luZG93LgorCU5vcm1hbGx5IHlvdSBkb24ndCBuZWVkIHRvIHNldCB0aGlzLiAgSXQgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IHRoZQorCXRlcm1pbmFsIGluaXRpYWxpemF0aW9uIGNvZGUuCisJV2hlbiBWaW0gaXMgcnVubmluZyBpbiB0aGUgR1VJIG9yIGluIGEgcmVzaXphYmxlIHdpbmRvdywgc2V0dGluZyB0aGlzCisJb3B0aW9uIHdpbGwgY2F1c2UgdGhlIHdpbmRvdyBzaXplIHRvIGJlIGNoYW5nZWQuICBXaGVuIHlvdSBvbmx5IHdhbnQKKwl0byB1c2UgdGhlIHNpemUgZm9yIHRoZSBHVUksIHB1dCB0aGUgY29tbWFuZCBpbiB5b3VyIHxndmltcmN8IGZpbGUuCisJVmltIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHdoYXQgZml0cyBvbiB0aGUgc2NyZWVuLiAgWW91IGNhbgorCXVzZSB0aGlzIGNvbW1hbmQgdG8gZ2V0IHRoZSB0YWxsZXN0IHdpbmRvdyBwb3NzaWJsZTogPgorCQk6c2V0IGxpbmVzPTk5OQorPAlJZiB5b3UgZ2V0IGxlc3MgbGluZXMgdGhhbiBleHBlY3RlZCwgY2hlY2sgdGhlICdndWloZWFkcm9vbScgb3B0aW9uLgorCVdoZW4geW91IHNldCB0aGlzIG9wdGlvbiBhbmQgVmltIGlzIHVuYWJsZSB0byBjaGFuZ2UgdGhlIHBoeXNpY2FsCisJbnVtYmVyIG9mIGxpbmVzIG9mIHRoZSBkaXNwbGF5LCB0aGUgZGlzcGxheSBtYXkgYmUgbWVzc2VkIHVwLgorCisJCQkJCQkqJ2xpbmVzcGFjZScqIConbHNwJyoKKydsaW5lc3BhY2UnICdsc3AnCW51bWJlcgkoZGVmYXVsdCAwLCAxIGZvciBXaW4zMiBHVUkpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBpbiB0aGUgR1VJfQorCU51bWJlciBvZiBwaXhlbCBsaW5lcyBpbnNlcnRlZCBiZXR3ZWVuIGNoYXJhY3RlcnMuICBVc2VmdWwgaWYgdGhlIGZvbnQKKwl1c2VzIHRoZSBmdWxsIGNoYXJhY3RlciBjZWxsIGhlaWdodCwgbWFraW5nIGxpbmVzIHRvdWNoIGVhY2ggb3RoZXIuCisJV2hlbiBub24temVybyB0aGVyZSBpcyByb29tIGZvciB1bmRlcmxpbmluZy4KKworCQkJCQkJKidsaXNwJyogKidub2xpc3AnKgorJ2xpc3AnCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtsaXNwaW5kZW50fAorCQkJZmVhdHVyZX0KKwlMaXNwIG1vZGU6IFdoZW4gPEVudGVyPiBpcyB0eXBlZCBpbiBpbnNlcnQgbW9kZSBzZXQgdGhlIGluZGVudCBmb3IKKwl0aGUgbmV4dCBsaW5lIHRvIExpc3Agc3RhbmRhcmRzICh3ZWxsLCBzb3J0IG9mKS4gIEFsc28gaGFwcGVucyB3aXRoCisJImNjIiBvciAiUyIuICAnYXV0b2luZGVudCcgbXVzdCBhbHNvIGJlIG9uIGZvciB0aGlzIHRvIHdvcmsuICBUaGUgJ3AnCisJZmxhZyBpbiAnY3BvcHRpb25zJyBjaGFuZ2VzIHRoZSBtZXRob2Qgb2YgaW5kZW50aW5nOiBWaSBjb21wYXRpYmxlIG9yCisJYmV0dGVyLiAgQWxzbyBzZWUgJ2xpc3B3b3JkcycuCisJVGhlICctJyBjaGFyYWN0ZXIgaXMgaW5jbHVkZWQgaW4ga2V5d29yZCBjaGFyYWN0ZXJzLiAgUmVkZWZpbmVzIHRoZQorCSI9IiBvcGVyYXRvciB0byB1c2UgdGhpcyBzYW1lIGluZGVudGF0aW9uIGFsZ29yaXRobSByYXRoZXIgdGhhbgorCWNhbGxpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBpZiAnZXF1YWxwcmcnIGlzIGVtcHR5LgorCVRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkIHdoZW4gJ3Bhc3RlJyBpcyBzZXQuCisJe1ZpOiBEb2VzIGl0IGEgbGl0dGxlIGJpdCBkaWZmZXJlbnRseX0KKworCQkJCQkJKidsaXNwd29yZHMnKiAqJ2x3JyoKKydsaXNwd29yZHMnICdsdycJc3RyaW5nCShkZWZhdWx0IGlzIHZlcnkgbG9uZykKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtsaXNwaW5kZW50fAorCQkJZmVhdHVyZX0KKwlDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB3b3JkcyB0aGF0IGluZmx1ZW5jZSB0aGUgTGlzcCBpbmRlbnRpbmcuCisJfCdsaXNwJ3wKKworCQkJCQkJKidsaXN0JyogKidub2xpc3QnKgorJ2xpc3QnCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwlMaXN0IG1vZGU6IFNob3cgdGFicyBhcyBDVFJMLUksIHNob3cgZW5kIG9mIGxpbmUgd2l0aCAkLiAgVXNlZnVsIHRvCisJc2VlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGFicyBhbmQgc3BhY2VzIGFuZCBmb3IgdHJhaWxpbmcgYmxhbmtzLgorCU5vdGUgdGhhdCB0aGlzIHdpbGwgYWxzbyBhZmZlY3QgZm9ybWF0dGluZyAoc2V0IHdpdGggJ3RleHR3aWR0aCcgb3IKKwknd3JhcG1hcmdpbicpIHdoZW4gJ2Nwb3B0aW9ucycgaW5jbHVkZXMgJ0wnLiAgU2VlICdsaXN0Y2hhcnMnIGZvcgorCWNoYW5naW5nIHRoZSB3YXkgdGFicyBhcmUgZGlzcGxheWVkLgorCisJCQkJCQkqJ2xpc3RjaGFycycqIConbGNzJyoKKydsaXN0Y2hhcnMnICdsY3MnCXN0cmluZwkoZGVmYXVsdCAiZW9sOiQiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVN0cmluZ3MgdG8gdXNlIGluICdsaXN0JyBtb2RlLglJdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZworCXNldHRpbmdzLgorCSAgZW9sOmMJCUNoYXJhY3RlciB0byBzaG93IGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLiAgV2hlbgorCQkJb21pdHRlZCwgdGhlcmUgaXMgbm8gZXh0cmEgY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgdGhlCisJCQlsaW5lLgorCSAgdGFiOnh5CVR3byBjaGFyYWN0ZXJzIHRvIGJlIHVzZWQgdG8gc2hvdyBhIFRhYi4gIFRoZSBmaXJzdAorCQkJY2hhciBpcyB1c2VkIG9uY2UuICBUaGUgc2Vjb25kIGNoYXIgaXMgcmVwZWF0ZWQgdG8KKwkJCWZpbGwgdGhlIHNwYWNlIHRoYXQgdGhlIFRhYiBub3JtYWxseSBvY2N1cGllcy4KKwkJCSJ0YWI6Pi0iIHdpbGwgc2hvdyBhIFRhYiB0aGF0IHRha2VzIGZvdXIgc3BhY2VzIGFzCisJCQkiPi0tLSIuICBXaGVuIG9taXR0ZWQsIGEgVGFiIGlzIHNob3cgYXMgXkkuCisJICB0cmFpbDpjCUNoYXJhY3RlciB0byBzaG93IGZvciB0cmFpbGluZyBzcGFjZXMuCVdoZW4gb21pdHRlZCwKKwkJCXRyYWlsaW5nIHNwYWNlcyBhcmUgYmxhbmsuCisJICBleHRlbmRzOmMJQ2hhcmFjdGVyIHRvIHNob3cgaW4gdGhlIGxhc3QgY29sdW1uLCB3aGVuICd3cmFwJyBpcworCQkJb2ZmIGFuZCB0aGUgbGluZSBjb250aW51ZXMgYmV5b25kIHRoZSByaWdodCBvZiB0aGUKKwkJCXNjcmVlbi4KKwkgIHByZWNlZGVzOmMJQ2hhcmFjdGVyIHRvIHNob3cgaW4gdGhlIGZpcnN0IGNvbHVtbiwgd2hlbiAnd3JhcCcKKwkJCWlzIG9mZiBhbmQgdGhlcmUgaXMgdGV4dCBwcmVjZWRpbmcgdGhlIGNoYXJhY3RlcgorCQkJdmlzaWJsZSBpbiB0aGUgZmlyc3QgY29sdW1uLgorCisJVGhlIGNoYXJhY3RlcnMgJzonIGFuZCAnLCcgc2hvdWxkIG5vdCBiZSB1c2VkLglVVEYtOCBjaGFyYWN0ZXJzIGNhbgorCWJlIHVzZWQgd2hlbiAnZW5jb2RpbmcnIGlzICJ1dGYtOCIsIG90aGVyd2lzZSBvbmx5IHByaW50YWJsZQorCWNoYXJhY3RlcnMgYXJlIGFsbG93ZWQuCisKKwlFeGFtcGxlczogPgorCSAgICA6c2V0IGxjcz10YWI6Pi0sdHJhaWw6LQorCSAgICA6c2V0IGxjcz10YWI6Pi0sZW9sOjwKKwkgICAgOnNldCBsY3M9ZXh0ZW5kczo+LHByZWNlZGVzOjwKKzwJVGhlICJOb25UZXh0IiBoaWdobGlnaHRpbmcgd2lsbCBiZSB1c2VkIGZvciAiZW9sIiwgImV4dGVuZHMiIGFuZAorCSJwcmVjZWRlcyIuICAiU3BlY2lhbEtleSIgZm9yICJ0YWIiIGFuZCAidHJhaWwiLgorCisJCQkqJ2xwbCcqIConbm9scGwnKiAqJ2xvYWRwbHVnaW5zJyogKidub2xvYWRwbHVnaW5zJyoKKydsb2FkcGx1Z2lucycgJ2xwbCcJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uIHRoZSBwbHVnaW4gc2NyaXB0cyBhcmUgbG9hZGVkIHdoZW4gc3RhcnRpbmcgdXAgfGxvYWQtcGx1Z2luc3wuCisJVGhpcyBvcHRpb24gY2FuIGJlIHJlc2V0IGluIHlvdXIgfHZpbXJjfCBmaWxlIHRvIGRpc2FibGUgdGhlIGxvYWRpbmcKKwlvZiBwbHVnaW5zLgorCU5vdGUgdGhhdCB1c2luZyB0aGUgIi11IE5PTkUiIGFuZCAiLS1ub3BsdWdpbiIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworCXJlc2V0IHRoaXMgb3B0aW9uLiB8LXV8IHwtLW5vcGx1Z2lufAorCisJCQkJCQkqJ21hZ2ljJyogKidub21hZ2ljJyoKKydtYWdpYycJCQlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJQ2hhbmdlcyB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgaW4gc2VhcmNoIHBhdHRlcm5zLgorCVNlZSB8cGF0dGVybnwuCisJTk9URTogVG8gYXZvaWQgcG9ydGFiaWxpdHkgcHJvYmxlbXMgd2l0aCB1c2luZyBwYXR0ZXJucywgYWx3YXlzIGtlZXAKKwl0aGlzIG9wdGlvbiBhdCB0aGUgZGVmYXVsdCAib24iLiAgT25seSBzd2l0Y2ggaXQgb2ZmIHdoZW4gd29ya2luZyB3aXRoCisJb2xkIFZpIHNjcmlwdHMuICBJbiBhbnkgb3RoZXIgc2l0dWF0aW9uIHdyaXRlIHBhdHRlcm5zIHRoYXQgd29yayB3aGVuCisJJ21hZ2ljJyBpcyBvbi4KKworCQkJCQkJKidtYWtlZWYnKiAqJ21lZicqCisnbWFrZWVmJyAnbWVmJwkJc3RyaW5nCShkZWZhdWx0OiAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwKKwkJCWZlYXR1cmV9CisJTmFtZSBvZiB0aGUgZXJyb3JmaWxlIGZvciB0aGUgfDptYWtlfCBjb21tYW5kIChzZWUgfDptYWtlX21ha2Vwcmd8KQorCWFuZCB0aGUgfDpncmVwfCBjb21tYW5kLgorCVdoZW4gaXQgaXMgZW1wdHksIGFuIGludGVybmFsbHkgZ2VuZXJhdGVkIHRlbXAgZmlsZSB3aWxsIGJlIHVzZWQuCisJV2hlbiAiIyMiIGlzIGluY2x1ZGVkLCBpdCBpcyByZXBsYWNlZCBieSBhIG51bWJlciB0byBtYWtlIHRoZSBuYW1lCisJdW5pcXVlLiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlICI6bWFrZSIgY29tbWFuZCBkb2Vzbid0IG92ZXJ3cml0ZSBhbgorCWV4aXN0aW5nIGZpbGUuCisJTk9UIHVzZWQgZm9yIHRoZSAiOmNmIiBjb21tYW5kLiAgU2VlICdlcnJvcmZpbGUnIGZvciB0aGF0LgorCUVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4KKwlTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidtYWtlcHJnJyogKidtcCcqCisnbWFrZXByZycgJ21wJwkJc3RyaW5nCShkZWZhdWx0ICJtYWtlIiwgVk1TOiAiTU1TIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJUHJvZ3JhbSB0byB1c2UgZm9yIHRoZSAiOm1ha2UiIGNvbW1hbmQuICBTZWUgfDptYWtlX21ha2Vwcmd8LiAgVGhpcworCW9wdGlvbiBtYXkgY29udGFpbiAnJScgYW5kICcjJyBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgZXhwYW5kZWQgbGlrZQorCXdoZW4gdXNlZCBpbiBhIGNvbW1hbmQtbGluZS4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQKKwl8OnNldF9lbnZ8LiAgU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZAorCWJhY2tzbGFzaGVzLiAgTm90ZSB0aGF0IGEgJ3wnIG11c3QgYmUgZXNjYXBlZCB0d2ljZTogb25jZSBmb3IgIjpzZXQiCisJYW5kIG9uY2UgZm9yIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIGNvbW1hbmQuICBXaGVuIHlvdSB1c2UgYSBmaWx0ZXIKKwljYWxsZWQgIm15ZmlsdGVyIiBkbyBpdCBsaWtlIHRoaXM6ID4KKwkgICAgOnNldCBtYWtlcHJnPWdtYWtlXCBcXFx8XCBteWZpbHRlcgorPAlUaGUgcGxhY2Vob2xkZXIgIiQqIiBjYW4gYmUgZ2l2ZW4gKGV2ZW4gbXVsdGlwbGUgdGltZXMpIHRvIHNwZWNpZnkKKwl3aGVyZSB0aGUgYXJndW1lbnRzIHdpbGwgYmUgaW5jbHVkZWQsIGZvciBleGFtcGxlOiA+CisJICAgIDpzZXQgbWFrZXByZz1sYXRleFwgXFxcXG5vbnN0b3Btb2RlXCBcXFxcaW5wdXRcXHskKn0KKzwJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ21hdGNocGFpcnMnKiAqJ21wcycqCisnbWF0Y2hwYWlycycgJ21wcycJc3RyaW5nCShkZWZhdWx0ICIoOiksezp9LFs6XSIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJQ2hhcmFjdGVycyB0aGF0IGZvcm0gcGFpcnMuICBUaGUgfCV8IGNvbW1hbmQganVtcHMgZnJvbSBvbmUgdG8gdGhlCisJb3RoZXIuCUN1cnJlbnRseSBvbmx5IHNpbmdsZSBjaGFyYWN0ZXIgcGFpcnMgYXJlIGFsbG93ZWQsIGFuZCB0aGV5CisJbXVzdCBiZSBkaWZmZXJlbnQuICBUaGUgY2hhcmFjdGVycyBtdXN0IGJlIHNlcGFyYXRlZCBieSBhIGNvbG9uLiAgVGhlCisJcGFpcnMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gIEV4YW1wbGUgZm9yIGluY2x1ZGluZyAnPCcgYW5kICc+JworCShIVE1MKTogPgorCQk6c2V0IG1wcys9PDo+CisKKzwJQSBtb3JlIGV4b3RpYyBleGFtcGxlLCB0byBqdW1wIGJldHdlZW4gdGhlICc9JyBhbmQgJzsnIGluIGFuCisJYXNzaWdubWVudCwgdXNlZnVsIGZvciBsYW5ndWFnZXMgbGlrZSBDIGFuZCBKYXZhOiA+CisJCTphdSBGaWxlVHlwZSBjLGNwcCxqYXZhIHNldCBtcHMrPT06OworCis8CUZvciBhIG1vcmUgYWR2YW5jZWQgd2F5IG9mIHVzaW5nICIlIiwgc2VlIHRoZSBtYXRjaGl0LnZpbSBwbHVnaW4gaW4KKwl0aGUgJFZJTVJVTlRJTUUvbWFjcm9zIGRpcmVjdG9yeS4gfGFkZC1sb2NhbC1oZWxwfAorCisJCQkJCQkqJ21hdGNodGltZScqIConbWF0JyoKKydtYXRjaHRpbWUnICdtYXQnCW51bWJlcgkoZGVmYXVsdCA1KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfXtpbiBOdml9CisJVGVudGhzIG9mIGEgc2Vjb25kIHRvIHNob3cgdGhlIG1hdGNoaW5nIHBhcmVuLCB3aGVuICdzaG93bWF0Y2gnIGlzCisJc2V0LiAgTm90ZSB0aGF0IHRoaXMgaXMgbm90IGluIG1pbGxpc2Vjb25kcywgbGlrZSBvdGhlciBvcHRpb25zIHRoYXQKKwlzZXQgYSB0aW1lLiAgVGhpcyBpcyB0byBiZSBjb21wYXRpYmxlIHdpdGggTnZpLgorCisJCQkJCQkqJ21heGZ1bmNkZXB0aCcqIConbWZkJyoKKydtYXhmdW5jZGVwdGgnICdtZmQnCW51bWJlcgkoZGVmYXVsdCAxMDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWF4aW11bSBkZXB0aCBvZiBmdW5jdGlvbiBjYWxscyBmb3IgdXNlciBmdW5jdGlvbnMuICBUaGlzIG5vcm1hbGx5CisJY2F0Y2hlcyBlbmRsZXNzIHJlY3Vyc2lvbi4gIFdoZW4gdXNpbmcgYSByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aAorCW1vcmUgZGVwdGgsIHNldCAnbWF4ZnVuY2RlcHRoJyB0byBhIGJpZ2dlciBudW1iZXIuICBCdXQgdGhpcyB3aWxsIHVzZQorCW1vcmUgbWVtb3J5LCB0aGVyZSBpcyB0aGUgZGFuZ2VyIG9mIGZhaWxpbmcgd2hlbiBtZW1vcnkgaXMgZXhoYXVzdGVkLgorCVNlZSBhbHNvIHw6ZnVuY3Rpb258LgorCisJCQkJCQkqJ21heG1hcGRlcHRoJyogKidtbWQnKiAqRTIyMyoKKydtYXhtYXBkZXB0aCcgJ21tZCcJbnVtYmVyCShkZWZhdWx0IDEwMDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWF4aW11bSBudW1iZXIgb2YgdGltZXMgYSBtYXBwaW5nIGlzIGRvbmUgd2l0aG91dCByZXN1bHRpbmcgaW4gYQorCWNoYXJhY3RlciB0byBiZSB1c2VkLiAgVGhpcyBub3JtYWxseSBjYXRjaGVzIGVuZGxlc3MgbWFwcGluZ3MsIGxpa2UKKwkiOm1hcCB4IHkiIHdpdGggIjptYXAgeSB4Ii4gIEl0IHN0aWxsIGRvZXMgbm90IGNhdGNoICI6bWFwIGcgd2ciLAorCWJlY2F1c2UgdGhlICd3JyBpcyB1c2VkIGJlZm9yZSB0aGUgbmV4dCBtYXBwaW5nIGlzIGRvbmUuICBTZWUgYWxzbworCXxrZXktbWFwcGluZ3wuCisKKwkJCQkJCSonbWF4bWVtJyogKidtbScqCisnbWF4bWVtJyAnbW0nCQludW1iZXIJKGRlZmF1bHQgYmV0d2VlbiAyNTYgdG8gNTEyMCAoc3lzdGVtCisJCQkJIGRlcGVuZGVudCkgb3IgaGFsZiB0aGUgYW1vdW50IG9mIG1lbW9yeQorCQkJCSBhdmFpbGFibGUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IChpbiBLYnl0ZSkgdG8gdXNlIGZvciBvbmUgYnVmZmVyLiAgV2hlbiB0aGlzCisJbGltaXQgaXMgcmVhY2hlZCBhbGxvY2F0aW5nIGV4dHJhIG1lbW9yeSBmb3IgYSBidWZmZXIgd2lsbCBjYXVzZQorCW90aGVyIG1lbW9yeSB0byBiZSBmcmVlZC4gIE1heGltdW0gdmFsdWUgMjAwMDAwMC4gIFVzZSB0aGlzIHRvIHdvcmsKKwl3aXRob3V0IGEgbGltaXQuICBBbHNvIHNlZSAnbWF4bWVtdG90Jy4KKworCQkJCQkJKidtYXhtZW10b3QnKiAqJ21tdCcqCisnbWF4bWVtdG90JyAnbW10JwludW1iZXIJKGRlZmF1bHQgYmV0d2VlbiAyMDQ4IGFuZCAxMDI0MCAoc3lzdGVtCisJCQkJIGRlcGVuZGVudCkgb3IgaGFsZiB0aGUgYW1vdW50IG9mIG1lbW9yeQorCQkJCSBhdmFpbGFibGUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IChpbiBLYnl0ZSkgdG8gdXNlIGZvciBhbGwgYnVmZmVycyB0b2dldGhlci4KKwlNYXhpbXVtIHZhbHVlIDIwMDAwMDAuCVVzZSB0aGlzIHRvIHdvcmsgd2l0aG91dCBhIGxpbWl0LiAgQWxzbyBzZWUKKwknbWF4bWVtJy4KKworCQkJCQkJKidtZW51aXRlbXMnKiAqJ21pcycqCisnbWVudWl0ZW1zJyAnbWlzJwludW1iZXIJKGRlZmF1bHQgMjUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrbWVudXwKKwkJCWZlYXR1cmV9CisJTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gdXNlIGluIGEgbWVudS4gIFVzZWQgZm9yIG1lbnVzIHRoYXQgYXJlCisJZ2VuZXJhdGVkIGZyb20gYSBsaXN0IG9mIGl0ZW1zLCBlLmcuLCB0aGUgQnVmZmVycyBtZW51LiAgQ2hhbmdpbmcgdGhpcworCW9wdGlvbiBoYXMgbm8gZGlyZWN0IGVmZmVjdCwgdGhlIG1lbnUgbXVzdCBiZSByZWZyZXNoZWQgZmlyc3QuCisKKwkJCQkgICAqJ21vZGVsaW5lJyogKidtbCcqIConbm9tb2RlbGluZScqIConbm9tbCcqCisnbW9kZWxpbmUnICdtbCcJCWJvb2xlYW4JKFZpbSBkZWZhdWx0OiBvbiwgVmkgZGVmYXVsdDogb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQkJCQkqJ21vZGVsaW5lcycqIConbWxzJyoKKydtb2RlbGluZXMnICdtbHMnCW51bWJlcgkoZGVmYXVsdCA1KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUlmICdtb2RlbGluZScgaXMgb24gJ21vZGVsaW5lcycgZ2l2ZXMgdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IGlzCisJY2hlY2tlZCBmb3Igc2V0IGNvbW1hbmRzLiAgSWYgJ21vZGVsaW5lJyBpcyBvZmYgb3IgJ21vZGVsaW5lcycgaXMgemVybworCW5vIGxpbmVzIGFyZSBjaGVja2VkLiAgU2VlIHxtb2RlbGluZXwuCisJTk9URTogJ21vZGVsaW5lJyBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCSonbW9kaWZpYWJsZScqIConbWEnKiAqJ25vbW9kaWZpYWJsZScqIConbm9tYScqCisnbW9kaWZpYWJsZScgJ21hJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQkJKkUyMSoKKwlXaGVuIG9mZiB0aGUgYnVmZmVyIGNvbnRlbnRzIGNhbm5vdCBiZSBjaGFuZ2VkLiAgVGhlICdmaWxlZm9ybWF0JyBhbmQKKwknZmlsZWVuY29kaW5nJyBvcHRpb25zIGFsc28gY2FuJ3QgYmUgY2hhbmdlZC4KKwlDYW4gYmUgcmVzZXQgd2l0aCB0aGUgfC1NfCBjb21tYW5kIGxpbmUgYXJndW1lbnQuCisKKwkJCQkqJ21vZGlmaWVkJyogKidtb2QnKiAqJ25vbW9kaWZpZWQnKiAqJ25vbW9kJyoKKydtb2RpZmllZCcgJ21vZCcJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiwgdGhlIGJ1ZmZlciBpcyBjb25zaWRlcmVkIHRvIGJlIG1vZGlmaWVkLiAgVGhpcyBvcHRpb24gaXMgc2V0CisJd2hlbjoKKwkxLiBBIGNoYW5nZSB3YXMgbWFkZSB0byB0aGUgdGV4dCBzaW5jZSBpdCB3YXMgbGFzdCB3cml0dGVuLiAgVXNpbmcgdGhlCisJICAgfHVuZG98IGNvbW1hbmQgdG8gZ28gYmFjayB0byB0aGUgb3JpZ2luYWwgdGV4dCB3aWxsIHJlc2V0IHRoZQorCSAgIG9wdGlvbi4gIEJ1dCB1bmRvaW5nIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgYmVmb3JlIHdyaXRpbmcgdGhlCisJICAgYnVmZmVyIHdpbGwgc2V0IHRoZSBvcHRpb24gYWdhaW4sIHNpbmNlIHRoZSB0ZXh0IGlzIGRpZmZlcmVudCBmcm9tCisJICAgd2hlbiBpdCB3YXMgd3JpdHRlbi4KKwkyLiAnZmlsZWZvcm1hdCcgb3IgJ2ZpbGVlbmNvZGluZycgaXMgZGlmZmVyZW50IGZyb20gaXRzIG9yaWdpbmFsCisJICAgdmFsdWUuICBUaGUgb3JpZ2luYWwgdmFsdWUgaXMgc2V0IHdoZW4gdGhlIGJ1ZmZlciBpcyByZWFkIG9yCisJICAgd3JpdHRlbi4gIEEgIjpzZXQgbm9tb2RpZmllZCIgY29tbWFuZCBhbHNvIHJlc2V0cyB0aGUgb3JpZ2luYWwKKwkgICB2YWx1ZXMgdG8gdGhlIGN1cnJlbnQgdmFsdWVzIGFuZCB0aGUgJ21vZGlmaWVkJyBvcHRpb24gd2lsbCBiZQorCSAgIHJlc2V0LgorCVdoZW4gJ2J1ZnR5cGUnIGlzICJub3dyaXRlIiBvciAibm9maWxlIiB0aGlzIG9wdGlvbiBtYXkgYmUgc2V0LCBidXQKKwl3aWxsIGJlIGlnbm9yZWQuCisKKwkJCQkJCSonbW9yZScqIConbm9tb3JlJyoKKydtb3JlJwkJCWJvb2xlYW4JKFZpbSBkZWZhdWx0OiBvbiwgVmkgZGVmYXVsdDogb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24sIGxpc3RpbmdzIHBhdXNlIHdoZW4gdGhlIHdob2xlIHNjcmVlbiBpcyBmaWxsZWQuICBZb3Ugd2lsbCBnZXQKKwl0aGUgfG1vcmUtcHJvbXB0fC4gIFdoZW4gdGhpcyBvcHRpb24gaXMgb2ZmIHRoZXJlIGFyZSBubyBwYXVzZXMsIHRoZQorCWxpc3RpbmcgY29udGludWVzIHVudGlsIGZpbmlzaGVkLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ21vdXNlJyogKkU1MzgqCisnbW91c2UnCQkJc3RyaW5nCShkZWZhdWx0ICIiLCAiYSIgZm9yIEdVSSwgTVMtRE9TIGFuZCBXaW4zMikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlFbmFibGUgdGhlIHVzZSBvZiB0aGUgbW91c2UuICBPbmx5IHdvcmtzIGZvciBjZXJ0YWluIHRlcm1pbmFscworCSh4dGVybSwgTVMtRE9TLCBXaW4zMiB8d2luMzItbW91c2V8LCBRTlggcHRlcm0sIGFuZCBMaW51eCBjb25zb2xlCisJd2l0aCBncG0pLiAgRm9yIHVzaW5nIHRoZSBtb3VzZSBpbiB0aGUgR1VJLCBzZWUgfGd1aS1tb3VzZXwuCisJVGhlIG1vdXNlIGNhbiBiZSBlbmFibGVkIGZvciBkaWZmZXJlbnQgbW9kZXM6CisJCW4JTm9ybWFsIG1vZGUKKwkJdglWaXN1YWwgbW9kZQorCQlpCUluc2VydCBtb2RlCisJCWMJQ29tbWFuZC1saW5lIG1vZGUKKwkJaAlhbGwgcHJldmlvdXMgbW9kZXMgd2hlbiBlZGl0aW5nIGEgaGVscCBmaWxlCisJCWEJYWxsIHByZXZpb3VzIG1vZGVzCisJCXIJZm9yIHxoaXQtZW50ZXJ8IGFuZCB8bW9yZS1wcm9tcHR8IHByb21wdAorCQlBCWF1dG8tc2VsZWN0IGluIFZpc3VhbCBtb2RlCisJTm9ybWFsbHkgeW91IHdvdWxkIGVuYWJsZSB0aGUgbW91c2UgaW4gYWxsIGZvdXIgbW9kZXMgd2l0aDogPgorCQk6c2V0IG1vdXNlPWEKKzwJV2hlbiB0aGUgbW91c2UgaXMgbm90IGVuYWJsZWQsIHRoZSBHVUkgd2lsbCBzdGlsbCB1c2UgdGhlIG1vdXNlIGZvcgorCW1vZGVsZXNzIHNlbGVjdGlvbi4gIFRoaXMgZG9lc24ndCBtb3ZlIHRoZSB0ZXh0IGN1cnNvci4KKworCVNlZSB8bW91c2UtdXNpbmd8LiAgQWxzbyBzZWUgfCdjbGlwYm9hcmQnfC4KKworCU5vdGU6IFdoZW4gZW5hYmxpbmcgdGhlIG1vdXNlIGluIGEgdGVybWluYWwsIGNvcHkvcGFzdGUgd2lsbCB1c2UgdGhlCisJIiogcmVnaXN0ZXIgaWYgdGhlcmUgaXMgYWNjZXNzIHRvIGFuIFgtc2VydmVyLglUaGUgeHRlcm0gaGFuZGxpbmcgb2YKKwl0aGUgbW91c2UgYnV0dG9ucyBjYW4gc3RpbGwgYmUgdXNlZCBieSBrZWVwaW5nIHRoZSBzaGlmdCBrZXkgcHJlc3NlZC4KKwlBbHNvIHNlZSB0aGUgJ2NsaXBib2FyZCcgb3B0aW9uLgorCisJCQkqJ21vdXNlZm9jdXMnKiAqJ21vdXNlZicqIConbm9tb3VzZWZvY3VzJyogKidub21vdXNlZicqCisnbW91c2Vmb2N1cycgJ21vdXNlZicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSB3b3JrcyBpbiB0aGUgR1VJfQorCVRoZSB3aW5kb3cgdGhhdCB0aGUgbW91c2UgcG9pbnRlciBpcyBvbiBpcyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZC4KKwlXaGVuIGNoYW5naW5nIHRoZSB3aW5kb3cgbGF5b3V0IG9yIHdpbmRvdyBmb2N1cyBpbiBhbm90aGVyIHdheSwgdGhlCisJbW91c2UgcG9pbnRlciBpcyBtb3ZlZCB0byB0aGUgd2luZG93IHdpdGgga2V5Ym9hcmQgZm9jdXMuICBPZmYgaXMgdGhlCisJZGVmYXVsdCBiZWNhdXNlIGl0IG1ha2VzIHVzaW5nIHRoZSBwdWxsIGRvd24gbWVudXMgYSBsaXR0bGUgZ29vZnksIGFzCisJYSBwb2ludGVyIHRyYW5zaXQgbWF5IGFjdGl2YXRlIGEgd2luZG93IHVuaW50ZW50aW9uYWxseS4KKworCQkJKidtb3VzZWhpZGUnKiAqJ21oJyogKidub21vdXNlaGlkZScqIConbm9taCcqCisnbW91c2VoaWRlJyAnbWgnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSB3b3JrcyBpbiB0aGUgR1VJfQorCVdoZW4gb24sIHRoZSBtb3VzZSBwb2ludGVyIGlzIGhpZGRlbiB3aGVuIGNoYXJhY3RlcnMgYXJlIHR5cGVkLgorCVRoZSBtb3VzZSBwb2ludGVyIGlzIHJlc3RvcmVkIHdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkLgorCisJCQkJCQkqJ21vdXNlbW9kZWwnKiAqJ21vdXNlbScqCisnbW91c2Vtb2RlbCcgJ21vdXNlbScJc3RyaW5nCShkZWZhdWx0ICJleHRlbmQiLCAicG9wdXAiIGZvciBNUy1ET1MgYW5kIFdpbjMyKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVNldHMgdGhlIG1vZGVsIHRvIHVzZSBmb3IgdGhlIG1vdXNlLiAgVGhlIG5hbWUgbW9zdGx5IHNwZWNpZmllcyB3aGF0CisJdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyB1c2VkIGZvcjoKKwkgICBleHRlbmQJUmlnaHQgbW91c2UgYnV0dG9uIGV4dGVuZHMgYSBzZWxlY3Rpb24uICBUaGlzIHdvcmtzCisJCQlsaWtlIGluIGFuIHh0ZXJtLgorCSAgIHBvcHVwCVJpZ2h0IG1vdXNlIGJ1dHRvbiBwb3BzIHVwIGEgbWVudS4gIFRoZSBzaGlmdGVkIGxlZnQKKwkJCW1vdXNlIGJ1dHRvbiBleHRlbmRzIGEgc2VsZWN0aW9uLiAgVGhpcyB3b3JrcyBsaWtlCisJCQl3aXRoIE1pY3Jvc29mdCBXaW5kb3dzCisJICAgcG9wdXBfc2V0cG9zIExpa2UgInBvcHVwIiwgYnV0IHRoZSBjdXJzb3Igd2lsbCBiZSBtb3ZlZCB0byB0aGUKKwkJCXBvc2l0aW9uIHdoZXJlIHRoZSBtb3VzZSB3YXMgY2xpY2tlZCwgYW5kIHRodXMgdGhlCisJCQlzZWxlY3RlZCBvcGVyYXRpb24gd2lsbCBhY3QgdXBvbiB0aGUgY2xpY2tlZCBvYmplY3QuCisJCQlJZiBjbGlja2luZyBpbnNpZGUgYSBzZWxlY3Rpb24sIHRoYXQgc2VsZWN0aW9uIHdpbGwKKwkJCWJlIGFjdGVkIHVwb24sIGllLiBubyBjdXJzb3IgbW92ZS4gIFRoaXMgaW1wbGllcyBvZgorCQkJY291cnNlLCB0aGF0IHJpZ2h0IGNsaWNraW5nIG91dHNpZGUgYSBzZWxlY3Rpb24gd2lsbAorCQkJZW5kIFZpc3VhbCBtb2RlLgorCU92ZXJ2aWV3IG9mIHdoYXQgYnV0dG9uIGRvZXMgd2hhdCBmb3IgZWFjaCBtb2RlbDoKKwltb3VzZQkJICAgIGV4dGVuZAkJcG9wdXAoX3NldHBvcykgfgorCWxlZnQgY2xpY2sJICAgIHBsYWNlIGN1cnNvcglwbGFjZSBjdXJzb3IKKwlsZWZ0IGRyYWcJICAgIHN0YXJ0IHNlbGVjdGlvbglzdGFydCBzZWxlY3Rpb24KKwlzaGlmdC1sZWZ0CSAgICBzZWFyY2ggd29yZAkJZXh0ZW5kIHNlbGVjdGlvbgorCXJpZ2h0IGNsaWNrCSAgICBleHRlbmQgc2VsZWN0aW9uCXBvcHVwIG1lbnUgKHBsYWNlIGN1cnNvcikKKwlyaWdodCBkcmFnCSAgICBleHRlbmQgc2VsZWN0aW9uCS0KKwltaWRkbGUgY2xpY2sJICAgIHBhc3RlCQlwYXN0ZQorCisJSW4gdGhlICJwb3B1cCIgbW9kZWwgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBwcm9kdWNlcyBhIHBvcC11cCBtZW51LgorCVlvdSBuZWVkIHRvIGRlZmluZSB0aGlzIGZpcnN0LCBzZWUgfHBvcHVwLW1lbnV8LgorCisJTm90ZSB0aGF0IHlvdSBjYW4gZnVydGhlciByZWZpbmUgdGhlIG1lYW5pbmcgb2YgYnV0dG9ucyB3aXRoIG1hcHBpbmdzLgorCVNlZSB8Z3VpLW1vdXNlLW1hcHBpbmd8LiAgQnV0IG1hcHBpbmdzIGFyZSBOT1QgdXNlZCBmb3IgbW9kZWxlc3MKKwlzZWxlY3Rpb24gKGJlY2F1c2UgdGhhdCdzIGhhbmRsZWQgaW4gdGhlIEdVSSBjb2RlIGRpcmVjdGx5KS4KKworCVRoZSAnbW91c2Vtb2RlbCcgb3B0aW9uIGlzIHNldCBieSB0aGUgfDpiZWhhdmV8IGNvbW1hbmQuCisKKwkJCQkJKidtb3VzZXNoYXBlJyogKidtb3VzZXMnKiAqRTU0NyoKKydtb3VzZXNoYXBlJyAnbW91c2VzJwlzdHJpbmcJKGRlZmF1bHQgImk6YmVhbSxyOmJlYW0sczp1cGRvd24sc2Q6Y3Jvc3MsCisJCQkJCW06bm8sbWw6dXAtYXJyb3csdjpyaWdodHVwLWFycm93IgorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttb3VzZXNoYXBlfAorCQkJZmVhdHVyZX0KKwlUaGlzIG9wdGlvbiB0ZWxscyBWaW0gd2hhdCB0aGUgbW91c2UgcG9pbnRlciBzaG91bGQgbG9vayBsaWtlIGluCisJZGlmZmVyZW50IG1vZGVzLiAgVGhlIG9wdGlvbiBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcnRzLCBtdWNoCisJbGlrZSB1c2VkIGZvciAnZ3VpY3Vyc29yJy4gIEVhY2ggcGFydCBjb25zaXN0IG9mIGEgbW9kZS9sb2NhdGlvbi1saXN0CisJYW5kIGFuIGFyZ3VtZW50LWxpc3Q6CisJCW1vZGUtbGlzdDpzaGFwZSxtb2RlLWxpc3Q6c2hhcGUsLi4KKwlUaGUgbW9kZS1saXN0IGlzIGEgZGFzaCBzZXBhcmF0ZWQgbGlzdCBvZiB0aGVzZSBtb2Rlcy9sb2NhdGlvbnM6CisJCQlJbiBhIG5vcm1hbCB3aW5kb3c6IH4KKwkJbglOb3JtYWwgbW9kZQorCQl2CVZpc3VhbCBtb2RlCisJCXZlCVZpc3VhbCBtb2RlIHdpdGggJ3NlbGVjdGlvbicgImV4Y2x1c2l2ZSIgKHNhbWUgYXMgJ3YnLAorCQkJaWYgbm90IHNwZWNpZmllZCkKKwkJbwlPcGVyYXRvci1wZW5kaW5nIG1vZGUKKwkJaQlJbnNlcnQgbW9kZQorCQlyCVJlcGxhY2UgbW9kZQorCisJCQlPdGhlcnM6IH4KKwkJYwlhcHBlbmRpbmcgdG8gdGhlIGNvbW1hbmQtbGluZQorCQljaQlpbnNlcnRpbmcgaW4gdGhlIGNvbW1hbmQtbGluZQorCQljcglyZXBsYWNpbmcgaW4gdGhlIGNvbW1hbmQtbGluZQorCQltCWF0IHRoZSAnSGl0IEVOVEVSJyBvciAnTW9yZScgcHJvbXB0cworCQltbAlpZGVtLCBidXQgY3Vyc29yIGluIHRoZSBsYXN0IGxpbmUKKwkJZQlhbnkgbW9kZSwgcG9pbnRlciBiZWxvdyBsYXN0IHdpbmRvdworCQlzCWFueSBtb2RlLCBwb2ludGVyIG9uIGEgc3RhdHVzIGxpbmUKKwkJc2QJYW55IG1vZGUsIHdoaWxlIGRyYWdnaW5nIGEgc3RhdHVzIGxpbmUKKwkJdnMJYW55IG1vZGUsIHBvaW50ZXIgb24gYSB2ZXJ0aWNhbCBzZXBhcmF0b3IgbGluZQorCQl2ZAlhbnkgbW9kZSwgd2hpbGUgZHJhZ2dpbmcgYSB2ZXJ0aWNhbCBzZXBhcmF0b3IgbGluZQorCQlhCWV2ZXJ5d2hlcmUKKworCVRoZSBzaGFwZSBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwlhdmFpbAluYW1lCQlsb29rcyBsaWtlIH4KKwl3IHgJYXJyb3cJCU5vcm1hbCBtb3VzZSBwb2ludGVyCisJdyB4CWJsYW5rCQlubyBwb2ludGVyIGF0IGFsbCAodXNlIHdpdGggY2FyZSEpCisJdyB4CWJlYW0JCUktYmVhbQorCXcgeAl1cGRvd24JCXVwLWRvd24gc2l6aW5nIGFycm93cworCXcgeAlsZWZ0cmlnaHQJbGVmdC1yaWdodCBzaXppbmcgYXJyb3dzCisJdyB4CWJ1c3kJCVRoZSBzeXN0ZW0ncyB1c3VhbCBidXN5IHBvaW50ZXIKKwl3IHgJbm8JCVRoZSBzeXN0ZW0ncyB1c3VhbCAnbm8gaW5wdXQnIHBvaW50ZXIKKwkgIHgJdWRzaXppbmcJaW5kaWNhdGVzIHVwLWRvd24gcmVzaXppbmcKKwkgIHgJbHJzaXppbmcJaW5kaWNhdGVzIGxlZnQtcmlnaHQgcmVzaXppbmcKKwkgIHgJY3Jvc3NoYWlyCWxpa2UgYSBiaWcgdGhpbiArCisJICB4CWhhbmQxCQlibGFjayBoYW5kCisJICB4CWhhbmQyCQl3aGl0ZSBoYW5kCisJICB4CXBlbmNpbAkJd2hhdCB5b3Ugd3JpdGUgd2l0aAorCSAgeAlxdWVzdGlvbgliaWcgPworCSAgeAlyaWdodHVwLWFycm93CWFycm93IHBvaW50aW5nIHJpZ2h0LXVwCisJdyB4CXVwLWFycm93CWFycm93IHBvaW50aW5nIHVwCisJICB4CTxudW1iZXI+CWFueSBYMTEgcG9pbnRlciBudW1iZXIgKHNlZSBYMTEvY3Vyc29yZm9udC5oKQorCisJVGhlICJhdmFpbCIgY29sdW1uIGNvbnRhaW5zIGEgJ3cnIGlmIHRoZSBzaGFwZSBpcyBhdmFpbGFibGUgZm9yIFdpbjMyLAorCXggZm9yIFgxMS4KKwlBbnkgbW9kZXMgbm90IHNwZWNpZmllZCBvciBzaGFwZXMgbm90IGF2YWlsYWJsZSB1c2UgdGhlIG5vcm1hbCBtb3VzZQorCXBvaW50ZXIuCisKKwlFeGFtcGxlOiA+CisJCTpzZXQgbW91c2VzaGFwZT1zOnVkc2l6aW5nLG06bm8KKzwJd2lsbCBtYWtlIHRoZSBtb3VzZSB0dXJuIHRvIGEgc2l6aW5nIGFycm93IG92ZXIgdGhlIHN0YXR1cyBsaW5lcyBhbmQKKwlpbmRpY2F0ZSBubyBpbnB1dCB3aGVuIHRoZSBoaXQtZW50ZXIgcHJvbXB0IGlzIGRpc3BsYXllZCAoc2luY2UKKwljbGlja2luZyB0aGUgbW91c2UgaGFzIG5vIGVmZmVjdCBpbiB0aGlzIHN0YXRlLikKKworCQkJCQkJKidtb3VzZXRpbWUnKiAqJ21vdXNldCcqCisnbW91c2V0aW1lJyAnbW91c2V0JwludW1iZXIJKGRlZmF1bHQgNTAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU9ubHkgZm9yIEdVSSwgTVMtRE9TLCBXaW4zMiBhbmQgVW5peCB3aXRoIHh0ZXJtLiAgRGVmaW5lcyB0aGUgbWF4aW11bQorCXRpbWUgaW4gbXNlYyBiZXR3ZWVuIHR3byBtb3VzZSBjbGlja3MgZm9yIHRoZSBzZWNvbmQgY2xpY2sgdG8gYmUKKwlyZWNvZ25pemVkIGFzIGEgbXVsdGkgY2xpY2suCisKKwkJCQkJCQkqJ25yZm9ybWF0cycqIConbmYnKgorJ25yZm9ybWF0cycgJ25mJwlzdHJpbmcJKGRlZmF1bHQgIm9jdGFsLGhleCIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVGhpcyBkZWZpbmVzIHdoYXQgYmFzZXMgVmltIHdpbGwgY29uc2lkZXIgZm9yIG51bWJlcnMgd2hlbiB1c2luZyB0aGUKKwlDVFJMLUEgYW5kIENUUkwtWCBjb21tYW5kcyBmb3IgYWRkaW5nIHRvIGFuZCBzdWJ0cmFjdGluZyBmcm9tIGEgbnVtYmVyCisJcmVzcGVjdGl2ZWx5OyBzZWUgfENUUkwtQXwgZm9yIG1vcmUgaW5mbyBvbiB0aGVzZSBjb21tYW5kcy4KKwlhbHBoYQlpZiBpbmNsdWRlZCwgc2luZ2xlIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHdpbGwgYmUKKwkJaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgYSBsaXN0IHdpdGggYQorCQlsZXR0ZXIgaW5kZXggYSksIGIpLCBldGMuCisJb2N0YWwJaWYgaW5jbHVkZWQsIG51bWJlcnMgdGhhdCBzdGFydCB3aXRoIGEgemVybyB3aWxsIGJlIGNvbnNpZGVyZWQKKwkJdG8gYmUgb2N0YWwuICBFeGFtcGxlOiBVc2luZyBDVFJMLUEgb24gIjAwNyIgcmVzdWx0cyBpbiAiMDEwIi4KKwloZXgJaWYgaW5jbHVkZWQsIG51bWJlcnMgc3RhcnRpbmcgd2l0aCAiMHgiIG9yICIwWCIgd2lsbCBiZQorCQljb25zaWRlcmVkIHRvIGJlIGhleGFkZWNpbWFsLiAgRXhhbXBsZTogVXNpbmcgQ1RSTC1YIG9uCisJCSIweDEwMCIgcmVzdWx0cyBpbiAiMHgwZmYiLgorCU51bWJlcnMgd2hpY2ggc2ltcGx5IGJlZ2luIHdpdGggYSBkaWdpdCBpbiB0aGUgcmFuZ2UgMS05IGFyZSBhbHdheXMKKwljb25zaWRlcmVkIGRlY2ltYWwuICBUaGlzIGFsc28gaGFwcGVucyBmb3IgbnVtYmVycyB0aGF0IGFyZSBub3QKKwlyZWNvZ25pemVkIGFzIG9jdGFsIG9yIGhleC4KKworCQkJCSonbnVtYmVyJyogKidudScqIConbm9udW1iZXInKiAqJ25vbnUnKgorJ251bWJlcicgJ251JwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwlQcmludCB0aGUgbGluZSBudW1iZXIgaW4gZnJvbnQgb2YgZWFjaCBsaW5lLiAgV2hlbiB0aGUgJ24nIG9wdGlvbiBpcworCWV4Y2x1ZGVkIGZyb20gJ2Nwb3B0aW9ucycgYSB3cmFwcGVkIGxpbmUgd2lsbCBub3QgdXNlIHRoZSBjb2x1bW4gb2YKKwlsaW5lIG51bWJlcnMgKHRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiAnY29tcGF0aWJsZScgaXNuJ3Qgc2V0KS4KKwlXaGVuIGEgbG9uZywgd3JhcHBlZCBsaW5lIGRvZXNuJ3Qgc3RhcnQgd2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyLCAnLScKKwljaGFyYWN0ZXJzIGFyZSBwdXQgYmVmb3JlIHRoZSBudW1iZXIuCisJU2VlIHxobC1MaW5lTnJ8IGZvciB0aGUgaGlnaGxpZ2h0aW5nIHVzZWQgZm9yIHRoZSBudW1iZXIuCisKKwkJCQkJKidvc2ZpbGV0eXBlJyogKidvZnQnKiAqRTM2NioKKydvc2ZpbGV0eXBlJyAnb2Z0JwlzdHJpbmcgKFJJU0MtT1MgZGVmYXVsdDogIlRleHQiLAorCQkJCW90aGVycyBkZWZhdWx0OiAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrb3NmaWxldHlwZXwKKwkJCWZlYXR1cmV9CisJU29tZSBvcGVyYXRpbmcgc3lzdGVtcyBzdG9yZSBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBiZXNpZGVzCisJbmFtZSwgZGF0ZXN0YW1wIGFuZCBwZXJtaXNzaW9ucy4gIFRoaXMgb3B0aW9uIGNvbnRhaW5zIHRoZSBleHRyYQorCWluZm9ybWF0aW9uLCB0aGUgbmF0dXJlIG9mIHdoaWNoIHdpbGwgdmFyeSBiZXR3ZWVuIHN5c3RlbXMuCisJVGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIGlzIHVzdWFsbHkgc2V0IHdoZW4gdGhlIGZpbGUgaXMgbG9hZGVkLCBhbmQKKwl1c2UgdG8gc2V0IHRoZSBmaWxlIHR5cGUgd2hlbiBmaWxlIGlzIHdyaXR0ZW4uCisJSXQgY2FuIGFmZmVjdCB0aGUgcGF0dGVybiBtYXRjaGluZyBvZiB0aGUgYXV0b21hdGljIGNvbW1hbmRzLgorCXxhdXRvY21kLW9zZmlsZXR5cGVzfAorCisJCQkJCQkqJ3BhcmFncmFwaHMnKiAqJ3BhcmEnKgorJ3BhcmFncmFwaHMnICdwYXJhJwlzdHJpbmcJKGRlZmF1bHQgIklQTFBQUFFQUCBMSXBwbHBpcGJwIikKKwkJCWdsb2JhbAorCVNwZWNpZmllcyB0aGUgbnJvZmYgbWFjcm9zIHRoYXQgc2VwYXJhdGUgcGFyYWdyYXBocy4gIFRoZXNlIGFyZSBwYWlycworCW9mIHR3byBsZXR0ZXJzIChzZWUgfG9iamVjdC1tb3Rpb25zfCkuCisKKwkJCQkJCSoncGFzdGUnKiAqJ25vcGFzdGUnKgorJ3Bhc3RlJwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVB1dCBWaW0gaW4gUGFzdGUgbW9kZS4JVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY3V0IG9yIGNvcHkKKwlzb21lIHRleHQgZnJvbSBvbmUgd2luZG93IGFuZCBwYXN0ZSBpdCBpbiBWaW0uCVRoaXMgd2lsbCBhdm9pZAorCXVuZXhwZWN0ZWQgZWZmZWN0cy4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIFZpbSBpbiBhIHRlcm1pbmFsLCB3aGVyZSBWaW0KKwljYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0eXBlZCB0ZXh0IGFuZCBwYXN0ZWQgdGV4dC4JSW4gdGhlIEdVSSwgVmltCisJa25vd3MgYWJvdXQgcGFzdGluZyBhbmQgd2lsbCBtb3N0bHkgZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGhvdXQgJ3Bhc3RlJworCWJlaW5nIHNldC4gIFRoZSBzYW1lIGlzIHRydWUgZm9yIGEgdGVybWluYWwgd2hlcmUgVmltIGhhbmRsZXMgdGhlCisJbW91c2UgY2xpY2tzIGl0c2VsZi4KKwlXaGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcyBzd2l0Y2hlZCBvbiAoYWxzbyB3aGVuIGl0IHdhcyBhbHJlYWR5IG9uKToKKwkJLSBtYXBwaW5nIGluIEluc2VydCBtb2RlIGFuZCBDb21tYW5kLWxpbmUgbW9kZSBpcyBkaXNhYmxlZAorCQktIGFiYnJldmlhdGlvbnMgYXJlIGRpc2FibGVkCisJCS0gJ3RleHR3aWR0aCcgaXMgc2V0IHRvIDAKKwkJLSAnd3JhcG1hcmdpbicgaXMgc2V0IHRvIDAKKwkJLSAnYXV0b2luZGVudCcgaXMgcmVzZXQKKwkJLSAnc21hcnRpbmRlbnQnIGlzIHJlc2V0CisJCS0gJ3NvZnR0YWJzdG9wJyBpcyBzZXQgdG8gMAorCQktICdyZXZpbnMnIGlzIHJlc2V0CisJCS0gJ3J1bGVyJyBpcyByZXNldAorCQktICdzaG93bWF0Y2gnIGlzIHJlc2V0CisJCS0gJ2Zvcm1hdG9wdGlvbnMnIGlzIHVzZWQgbGlrZSBpdCBpcyBlbXB0eQorCVRoZXNlIG9wdGlvbnMga2VlcCB0aGVpciB2YWx1ZSwgYnV0IHRoZWlyIGVmZmVjdCBpcyBkaXNhYmxlZDoKKwkJLSAnbGlzcCcKKwkJLSAnaW5kZW50ZXhwcicKKwkJLSAnY2luZGVudCcKKwlOT1RFOiBXaGVuIHlvdSBzdGFydCBlZGl0aW5nIGFub3RoZXIgZmlsZSB3aGlsZSB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMKKwlvbiwgc2V0dGluZ3MgZnJvbSB0aGUgbW9kZWxpbmVzIG9yIGF1dG9jb21tYW5kcyBtYXkgY2hhbmdlIHRoZQorCXNldHRpbmdzIGFnYWluLCBjYXVzaW5nIHRyb3VibGUgd2hlbiBwYXN0aW5nIHRleHQuICBZb3UgbWlnaHQgd2FudCB0bworCXNldCB0aGUgJ3Bhc3RlJyBvcHRpb24gYWdhaW4uCisJV2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgcmVzZXQgdGhlIG1lbnRpb25lZCBvcHRpb25zIGFyZSByZXN0b3JlZCB0bworCXRoZSB2YWx1ZSBiZWZvcmUgdGhlIG1vbWVudCAncGFzdGUnIHdhcyBzd2l0Y2hlZCBmcm9tIG9mZiB0byBvbi4KKwlSZXNldHRpbmcgJ3Bhc3RlJyBiZWZvcmUgZXZlciBzZXR0aW5nIGl0IGRvZXMgbm90IGhhdmUgYW55IGVmZmVjdC4KKwlTaW5jZSBtYXBwaW5nIGRvZXNuJ3Qgd29yayB3aGlsZSAncGFzdGUnIGlzIGFjdGl2ZSwgeW91IG5lZWQgdG8gdXNlCisJdGhlICdwYXN0ZXRvZ2dsZScgb3B0aW9uIHRvIHRvZ2dsZSB0aGUgJ3Bhc3RlJyBvcHRpb24gd2l0aCBzb21lIGtleS4KKworCQkJCQkJKidwYXN0ZXRvZ2dsZScqIConcHQnKgorJ3Bhc3RldG9nZ2xlJyAncHQnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG5vbi1lbXB0eSwgc3BlY2lmaWVzIHRoZSBrZXkgc2VxdWVuY2UgdGhhdCB0b2dnbGVzIHRoZSAncGFzdGUnCisJb3B0aW9uLiAgVGhpcyBpcyBsaWtlIHNwZWNpZnlpbmcgYSBtYXBwaW5nOiA+CisJICAgIDptYXAge2tleXN9IDpzZXQgaW52cGFzdGU8Q1I+Cis8CVdoZXJlIHtrZXlzfSBpcyB0aGUgdmFsdWUgb2YgJ3Bhc3RldG9nZ2xlJy4KKwlUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IGl0IHdpbGwgd29yayBldmVuIHdoZW4gJ3Bhc3RlJyBpcyBzZXQuCisJJ3Bhc3RldG9nZ2xlJyB3b3JrcyBpbiBJbnNlcnQgbW9kZSBhbmQgTm9ybWFsIG1vZGUsIGJ1dCBub3QgaW4KKwlDb21tYW5kLWxpbmUgbW9kZS4KKwlNYXBwaW5ncyBhcmUgY2hlY2tlZCBmaXJzdCwgdGh1cyBvdmVycnVsZSAncGFzdGV0b2dnbGUnLiAgSG93ZXZlciwKKwl3aGVuICdwYXN0ZScgaXMgb24gbWFwcGluZ3MgYXJlIGlnbm9yZWQgaW4gSW5zZXJ0IG1vZGUsIHRodXMgeW91IGNhbiBkbworCXRoaXM6ID4KKwkgICAgOm1hcCA8RjEwPiA6c2V0IHBhc3RlPENSPgorCSAgICA6bWFwIDxGMTE+IDpzZXQgbm9wYXN0ZTxDUj4KKwkgICAgOmltYXAgPEYxMD4gPEMtTz46c2V0IHBhc3RlPENSPgorCSAgICA6aW1hcCA8RjExPiA8bm9wPgorCSAgICA6c2V0IHBhc3RldG9nZ2xlPTxGMTE+Cis8CVRoaXMgd2lsbCBtYWtlIDxGMTA+IHN0YXJ0IHBhc3RlIG1vZGUgYW5kIDxGMTE+IHN0b3AgcGFzdGUgbW9kZS4KKwlOb3RlIHRoYXQgdHlwaW5nIDxGMTA+IGluIHBhc3RlIG1vZGUgaW5zZXJ0cyAiPEYxMD4iLCBzaW5jZSBpbiBwYXN0ZQorCW1vZGUgZXZlcnl0aGluZyBpcyBpbnNlcnRlZCBsaXRlcmFsbHksIGV4Y2VwdCB0aGUgJ3Bhc3RldG9nZ2xlJyBrZXkKKwlzZXF1ZW5jZS4KKworCQkJCQkJKidwZXgnKiAqJ3BhdGNoZXhwcicqCisncGF0Y2hleHByJyAncGV4JwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZGlmZnwKKwkJCWZlYXR1cmV9CisJRXhwcmVzc2lvbiB3aGljaCBpcyBldmFsdWF0ZWQgdG8gYXBwbHkgYSBwYXRjaCB0byBhIGZpbGUgYW5kIGdlbmVyYXRlCisJdGhlIHJlc3VsdGluZyBuZXcgdmVyc2lvbiBvZiB0aGUgZmlsZS4JU2VlIHxkaWZmLXBhdGNoZXhwcnwuCisKKwkJCQkJCSoncGF0Y2htb2RlJyogKidwbScqICpFMjA2KgorJ3BhdGNobW9kZScgJ3BtJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBub24tZW1wdHkgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIGEgZmlsZSBpcyBrZXB0LiAgVGhpcyBjYW4gYmUgdXNlZAorCXRvIGtlZXAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgYSBmaWxlIGlmIHlvdSBhcmUgY2hhbmdpbmcgZmlsZXMgaW4gYQorCXNvdXJjZSBkaXN0cmlidXRpb24uICBPbmx5IHRoZSBmaXJzdCB0aW1lIHRoYXQgYSBmaWxlIGlzIHdyaXR0ZW4gYQorCWNvcHkgb2YgdGhlIG9yaWdpbmFsIGZpbGUgd2lsbCBiZSBrZXB0LiAgVGhlIG5hbWUgb2YgdGhlIGNvcHkgaXMgdGhlCisJbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSB3aXRoIHRoZSBzdHJpbmcgaW4gdGhlICdwYXRjaG1vZGUnIG9wdGlvbgorCWFwcGVuZGVkLiAgVGhpcyBvcHRpb24gc2hvdWxkIHN0YXJ0IHdpdGggYSBkb3QuICBVc2UgYSBzdHJpbmcgbGlrZQorCSIub3JnIi4gICdiYWNrdXBkaXInIG11c3Qgbm90IGJlIGVtcHR5IGZvciB0aGlzIHRvIHdvcmsgKERldGFpbDogVGhlCisJYmFja3VwIGZpbGUgaXMgcmVuYW1lZCB0byB0aGUgcGF0Y2htb2RlIGZpbGUgYWZ0ZXIgdGhlIG5ldyBmaWxlIGhhcworCWJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4sIHRoYXQncyB3aHkgaXQgbXVzdCBiZSBwb3NzaWJsZSB0byB3cml0ZSBhCisJYmFja3VwIGZpbGUpLiAgSWYgdGhlcmUgd2FzIG5vIGZpbGUgdG8gYmUgYmFja2VkIHVwLCBhbiBlbXB0eSBmaWxlIGlzCisJY3JlYXRlZC4KKwlXaGVuIHRoZSAnYmFja3Vwc2tpcCcgcGF0dGVybiBtYXRjaGVzLCBhIHBhdGNobW9kZSBmaWxlIGlzIG5vdCBtYWRlLgorCVVzaW5nICdwYXRjaG1vZGUnIGZvciBjb21wcmVzc2VkIGZpbGVzIGFwcGVuZHMgdGhlIGV4dGVuc2lvbiBhdCB0aGUKKwllbmQgKGUuZy4sICJmaWxlLmd6Lm9yaWciKSwgdGh1cyB0aGUgcmVzdWx0aW5nIG5hbWUgaXNuJ3QgYWx3YXlzCisJcmVjb2duaXplZCBhcyBhIGNvbXByZXNzZWQgZmlsZS4KKworCQkJCQkqJ3BhdGgnKiAqJ3BhJyogKkUzNDMqICpFMzQ1KiAqRTM0NyoKKydwYXRoJyAncGEnCQlzdHJpbmcJKGRlZmF1bHQgb24gVW5peDogIi4sL3Vzci9pbmNsdWRlLCwiCisJCQkJICAgb24gT1MvMjoJICAiLiwvZW14L2luY2x1ZGUsLCIKKwkJCQkgICBvdGhlciBzeXN0ZW1zOiAiLiwsIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2hpY2ggd2lsbCBiZSBzZWFyY2hlZCB3aGVuIHVzaW5nIHRoZQorCXxnZnwsIFtmLCBdZiwgXldmLCB8OmZpbmR8IGFuZCBvdGhlciBjb21tYW5kcywgcHJvdmlkZWQgdGhhdCB0aGUgZmlsZQorCWJlaW5nIHNlYXJjaGVkIGZvciBoYXMgYSByZWxhdGl2ZSBwYXRoIChub3Qgc3RhcnRpbmcgd2l0aCAnLycpLiAgVGhlCisJZGlyZWN0b3JpZXMgaW4gdGhlICdwYXRoJyBvcHRpb24gbWF5IGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLgorCS0gVXNlIGNvbW1hcyB0byBzZXBhcmF0ZSBkaXJlY3RvcnkgbmFtZXM6ID4KKwkJOnNldCBwYXRoPS4sL3Vzci9sb2NhbC9pbmNsdWRlLC91c3IvaW5jbHVkZQorPAktIFNwYWNlcyBjYW4gYWxzbyBiZSB1c2VkIHRvIHNlcGFyYXRlIGRpcmVjdG9yeSBuYW1lcyAoZm9yIGJhY2t3YXJkcworCSAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb24gMy4wKS4gIFRvIGhhdmUgYSBzcGFjZSBpbiBhIGRpcmVjdG9yeQorCSAgbmFtZSwgcHJlY2VkZSBpdCB3aXRoIGFuIGV4dHJhIGJhY2tzbGFzaCwgYW5kIGVzY2FwZSB0aGUgc3BhY2U6ID4KKwkJOnNldCBwYXRoPS4sL2Rpci93aXRoXFxcIHNwYWNlCis8CS0gVG8gaW5jbHVkZSBhIGNvbW1hIGluIGEgZGlyZWN0b3J5IG5hbWUgcHJlY2VkZSBpdCB3aXRoIGFuIGV4dHJhCisJICBiYWNrc2xhc2g6ID4KKwkJOnNldCBwYXRoPS4sL2Rpci93aXRoXFwsY29tbWEKKzwJLSBUbyBzZWFyY2ggcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlLCB1c2U6ID4KKwkJOnNldCBwYXRoPS4KKzwJLSBUbyBzZWFyY2ggaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHVzZSBhbiBlbXB0eSBzdHJpbmcgYmV0d2VlbiB0d28KKwkgIGNvbW1hczogPgorCQk6c2V0IHBhdGg9LCwKKzwJLSBBIGRpcmVjdG9yeSBuYW1lIG1heSBlbmQgaW4gYSAnOicgb3IgJy8nLgorCS0gRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LgorCS0gV2hlbiB1c2luZyB8bmV0cncudmltfCBVUkxzIGNhbiBiZSB1c2VkLiAgRm9yIGV4YW1wbGUsIGFkZGluZworCSAgImh0dHA6Ly93d3cudmltLm9yZyIgd2lsbCBtYWtlICI6ZmluZCBpbmRleC5odG1sIiB3b3JrLgorCS0gU2VhcmNoIHVwd2FyZHMgYW5kIGRvd253YXJkcyBpbiBhIGRpcmVjdG9yeSB0cmVlOgorCSAgMSkgIioiIG1hdGNoZXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLCBlLmcuOiA+CisJCTpzZXQgcGF0aD0vdXNyL2luY2x1ZGUvKgorPAkgICAgIG1lYW5zIGFsbCBzdWJkaXJlY3RvcmllcyBpbiAvdXNyL2luY2x1ZGUgKGJ1dCBub3QgL3Vzci9pbmNsdWRlCisJICAgICBpdHNlbGYpLiA+CisJCTpzZXQgcGF0aD0vdXNyLypjCis8CSAgICAgbWF0Y2hlcyAvdXNyL2RvYyBhbmQgL3Vzci9zcmMuCisJICAyKSAiKioiIG1hdGNoZXMgYSBzdWJ0cmVlLCB1cCB0byAxMDAgZGlyZWN0b3JpZXMgZGVlcC4gIEV4YW1wbGU6ID4KKwkJOnNldCBwYXRoPS9ob21lL3VzZXJfeC9zcmMvKioKKzwJICAgICBtZWFucyBzZWFyY2ggaW4gdGhlIHdob2xlIHN1YnRyZWUgdW5kZXIgIi9ob21lL3Vzcl94L3NyYyIuCisJICAzKSBJZiB0aGUgcGF0aCBlbmRzIHdpdGggYSAnOycsIHRoaXMgcGF0aCBpcyB0aGUgc3RhcnRwb2ludAorCSAgICAgZm9yIHVwd2FyZCBzZWFyY2guCisJICBTZWUgfGZpbGUtc2VhcmNoaW5nfCBmb3IgbW9yZSBpbmZvIGFuZCBleGFjdCBzeW50YXguCisJICB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcGF0aF9leHRyYXwgZmVhdHVyZX0KKwktIENhcmVmdWwgd2l0aCAnXCcgY2hhcmFjdGVycywgdHlwZSB0d28gdG8gZ2V0IG9uZSBpbiB0aGUgb3B0aW9uOiA+CisJCTpzZXQgcGF0aD0uLGM6XFxpbmNsdWRlCis8CSAgT3IganVzdCB1c2UgJy8nIGluc3RlYWQ6ID4KKwkJOnNldCBwYXRoPS4sYzovaW5jbHVkZQorPAlEb24ndCBmb3JnZXQgIi4iIG9yIGZpbGVzIHdvbid0IGV2ZW4gYmUgZm91bmQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzCisJdGhlIGZpbGUhCisJVGhlIG1heGltdW0gbGVuZ3RoIGlzIGxpbWl0ZWQuCUhvdyBtdWNoIGRlcGVuZHMgb24gdGhlIHN5c3RlbSwgbW9zdGx5CisJaXQgaXMgc29tZXRoaW5nIGxpa2UgMjU2IG9yIDEwMjQgY2hhcmFjdGVycy4KKwlZb3UgY2FuIGNoZWNrIGlmIGFsbCB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgZm91bmQsIHVzaW5nIHRoZSB2YWx1ZSBvZgorCSdwYXRoJywgc2VlIHw6Y2hlY2twYXRofC4KKwlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlkaXJlY3RvcmllcyBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuICBUbyByZW1vdmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHVzZTogPgorCQk6c2V0IHBhdGgtPQorPAlUbyBhZGQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHVzZTogPgorCQk6c2V0IHBhdGgrPQorPAlUbyB1c2UgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHlvdSBwcm9iYWJseSBuZWVkIHRvIHJlcGxhY2UgdGhlCisJc2VwYXJhdG9yLiAgSGVyZSBpcyBhbiBleGFtcGxlIHRvIGFwcGVuZCAkSU5DTCwgaW4gd2hpY2ggZGlyZWN0b3J5CisJbmFtZXMgYXJlIHNlcGFyYXRlZCB3aXRoIGEgc2VtaS1jb2xvbjogPgorCQk6bGV0ICZwYXRoID0gJnBhdGggLiAiLCIgLiBzdWJzdGl0dXRlKCRJTkNMLCAnOycsICcsJywgJ2cnKQorPAlSZXBsYWNlIHRoZSAnOycgd2l0aCBhICc6JyBvciB3aGF0ZXZlciBzZXBhcmF0b3IgaXMgdXNlZC4gIE5vdGUgdGhhdAorCXRoaXMgZG9lc24ndCB3b3JrIHdoZW4gJElOQ0wgY29udGFpbnMgYSBjb21tYSBvciB3aGl0ZSBzcGFjZS4KKworCQkJKidwcmVzZXJ2ZWluZGVudCcqIConcGknKiAqJ25vcHJlc2VydmVpbmRlbnQnKiAqJ25vcGknKgorJ3ByZXNlcnZlaW5kZW50JyAncGknCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVdoZW4gY2hhbmdpbmcgdGhlIGluZGVudCBvZiB0aGUgY3VycmVudCBsaW5lLCBwcmVzZXJ2ZSBhcyBtdWNoIG9mIHRoZQorCWluZGVudCBzdHJ1Y3R1cmUgYXMgcG9zc2libGUuICBOb3JtYWxseSB0aGUgaW5kZW50IGlzIHJlcGxhY2VkIGJ5IGEKKwlzZXJpZXMgb2YgdGFicyBmb2xsb3dlZCBieSBzcGFjZXMgYXMgcmVxdWlyZWQgKHVubGVzcyB8J2V4cGFuZHRhYid8IGlzCisJZW5hYmxlZCwgaW4gd2hpY2ggY2FzZSBvbmx5IHNwYWNlcyBhcmUgdXNlZCkuICBFbmFibGluZyB0aGlzIG9wdGlvbgorCW1lYW5zIHRoZSBpbmRlbnQgd2lsbCBwcmVzZXJ2ZSBhcyBtYW55IGV4aXN0aW5nIGNoYXJhY3RlcnMgYXMgcG9zc2libGUKKwlmb3IgaW5kZW50aW5nLCBhbmQgb25seSBhZGQgYWRkaXRpb25hbCB0YWJzIG9yIHNwYWNlcyBhcyByZXF1aXJlZC4KKwlOT1RFOiBXaGVuIHVzaW5nICI+PiIgbXVsdGlwbGUgdGltZXMgdGhlIHJlc3VsdGluZyBpbmRlbnQgaXMgYSBtaXggb2YKKwl0YWJzIGFuZCBzcGFjZXMuICBZb3UgbWlnaHQgbm90IGxpa2UgdGhpcy4KKwlOT1RFOiAncHJlc2VydmVpbmRlbnQnIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKwlBbHNvIHNlZSAnY29weWluZGVudCcuCisJVXNlIHw6cmV0YWJ8IHRvIGNsZWFuIHVwIHdoaXRlIHNwYWNlLgorCisJCQkJCSoncHJldmlld2hlaWdodCcqIConcHZoJyoKKydwcmV2aWV3aGVpZ2h0JyAncHZoJwludW1iZXIgKGRlZmF1bHQgMTIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrd2luZG93c3wgb3IKKwkJCXwrcXVpY2tmaXh8IGZlYXR1cmV9CisJRGVmYXVsdCBoZWlnaHQgZm9yIGEgcHJldmlldyB3aW5kb3cuICBVc2VkIGZvciB8OnB0YWd8IGFuZCBhc3NvY2lhdGVkCisJY29tbWFuZHMuICBVc2VkIGZvciB8Q1RSTC1XX318IHdoZW4gbm8gY291bnQgaXMgZ2l2ZW4uCisKKwkJCQkJKidwcmV2aWV3d2luZG93JyogKidub3ByZXZpZXd3aW5kb3cnKgorCQkJCQkqJ3B2dycqIConbm9wdncnKiAqRTU5MCoKKydwcmV2aWV3d2luZG93JyAncHZ3Jwlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt3aW5kb3dzfCBvcgorCQkJfCtxdWlja2ZpeHwgZmVhdHVyZX0KKwlJZGVudGlmaWVzIHRoZSBwcmV2aWV3IHdpbmRvdy4JT25seSBvbmUgd2luZG93IGNhbiBoYXZlIHRoaXMgb3B0aW9uCisJc2V0LiAgSXQncyBub3JtYWxseSBub3Qgc2V0IGRpcmVjdGx5LCBidXQgYnkgdXNpbmcgb25lIG9mIHRoZSBjb21tYW5kcworCXw6cHRhZ3wsIHw6cGVkaXR8LCBldGMuCisKKwkJCQkJCSoncHJpbnRkZXZpY2UnKiAqJ3BkZXYnKgorJ3ByaW50ZGV2aWNlJyAncGRldicJc3RyaW5nCShkZWZhdWx0IGVtcHR5KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwcmludGVyfAorCQkJZmVhdHVyZX0KKwlUaGlzIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHByaW50ZXIgdG8gYmUgdXNlZCB3aGVuIHRoZSB8OmhhcmRjb3B5fAorCWNvbW1hbmQgaXMgaXNzdWVkIHdpdGggYSBiYW5nICghKSB0byBza2lwIHRoZSBwcmludGVyIHNlbGVjdGlvbgorCWRpYWxvZy4gIE9uIFdpbjMyLCBpdCBzaG91bGQgYmUgdGhlIHByaW50ZXIgbmFtZSBleGFjdGx5IGFzIGl0IGFwcGVhcnMKKwlpbiB0aGUgc3RhbmRhcmQgcHJpbnRlciBkaWFsb2cuCisJSWYgdGhlIG9wdGlvbiBpcyBlbXB0eSwgdGhlbiB2aW0gd2lsbCB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IHByaW50ZXIKKwlmb3IgIjpoYXJkY29weSEiCisKKwkJCQkJKidwcmludGVuY29kaW5nJyogKidwZW5jJyogKkU2MjAqCisncHJpbnRlbmNvZGluZycgJ3BlbmMnCVN0cmluZwkoZGVmYXVsdCBlbXB0eSwgZXhjZXB0IGZvcjoKKwkJCQkJV2luZG93cywgT1MvMjogY3AxMjUyLAorCQkJCQlNYWNpbnRvc2g6IG1hYy1yb21hbiwKKwkJCQkJVk1TOiBkZWMtbWNzLAorCQkJCQlIUFVYOiBocC1yb21hbjgsCisJCQkJCUVCQ0RJQzogZWJjZGljLXVrKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwcmludGVyfAorCQkJYW5kIHwrcG9zdHNjcmlwdHwgZmVhdHVyZXN9CisJU2V0cyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHVzZWQgd2hlbiBwcmludGluZy4gIFRoaXMgb3B0aW9uIHRlbGxzIFZJTQorCXdoaWNoIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyBmaWxlIGZyb20gdGhlICJwcmludCIgZGlyZWN0b3J5IGluCisJJ3J1bnRpbWVwYXRoJyB0byB1c2UuCisKKwlUaGlzIG9wdGlvbiB3aWxsIGFjY2VwdCBhbnkgdmFsdWUgZnJvbSB8ZW5jb2RpbmctbmFtZXN8LiAgQW55CisJcmVjb2duaXplZCBuYW1lcyBhcmUgY29udmVydGVkIHRvIFZJTSBzdGFuZGFyZCBuYW1lcyAtIHNlZSAnZW5jb2RpbmcnCisJZm9yIG1vcmUgZGV0YWlscy4gIE5hbWVzIG5vdCByZWNvZ25pemVkIGJ5IFZJTSB3aWxsIGp1c3QgYmUgY29udmVydGVkCisJdG8gbG93ZXIgY2FzZSBhbmQgdW5kZXJzY29yZXMgcmVwbGFjZWQgd2l0aCAnLScgc2lnbnMuCisKKwlJZiAncHJpbnRlbmNvZGluZycgaXMgZW1wdHkgb3IgVklNIGNhbm5vdCBmaW5kIHRoZSBmaWxlIHRoZW4gaXQgd2lsbAorCXVzZSAnZW5jb2RpbmcnIChpZiBWSU0gaXMgY29tcGlsZWQgd2l0aCB8K211bHRpX2J5dGV8IGFuZCBpdCBpcyBzZXQgYW4KKwk4LWJpdCBlbmNvZGluZykgdG8gZmluZCB0aGUgcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGUuICBJZiBWSU0gaXMKKwl1bmFibGUgdG8gZmluZCBhIGNoYXJhY3RlciBlbmNvZGluZyBmaWxlIHRoZW4gaXQgd2lsbCB1c2UgdGhlICJsYXRpbjEiCisJcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGUuCisKKwlXaGVuICdlbmNvZGluZycgaXMgc2V0IHRvIGEgbXVsdGktYnl0ZSBlbmNvZGluZywgVklNIHdpbGwgdHJ5IHRvCisJY29udmVydCBjaGFyYWN0ZXJzIHRvIHRoZSBwcmludGluZyBlbmNvZGluZyBmb3IgcHJpbnRpbmcgKGlmCisJJ3ByaW50ZW5jb2RpbmcnIGlzIGVtcHR5IHRoZW4gdGhlIGNvbnZlcnNpb24gd2lsbCBiZSB0byBsYXRpbjEpLgorCUNvbnZlcnNpb24gdG8gYSBwcmludGluZyBlbmNvZGluZyBvdGhlciB0aGFuIGxhdGluMSB3aWxsIHJlcXVpcmUgVklNCisJdG8gYmUgY29tcGlsZWQgd2l0aCB0aGUgfCtpY29udnwgZmVhdHVyZS4gIElmIG5vIGNvbnZlcnNpb24gaXMKKwlwb3NzaWJsZSB0aGVuIHByaW50aW5nIHdpbGwgZmFpbC4gIEFueSBjaGFyYWN0ZXJzIHRoYXQgY2Fubm90IGJlCisJY29udmVydGVkIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB1cHNpZGUgZG93biBxdWVzdGlvbiBtYXJrcy4KKworCUZvdXIgcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGVzIGFyZSBwcm92aWRlZCB0byBzdXBwb3J0IGRlZmF1bHQKKwlNYWMsIFZNUywgSFBVWCwgYW5kIEVCQ0RJQyBjaGFyYWN0ZXIgZW5jb2RpbmdzIGFuZCBhcmUgdXNlZCBieSBkZWZhdWx0CisJb24gdGhlc2UgcGxhdGZvcm1zLiAgQ29kZSBwYWdlIDEyNTIgcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIGlzIHVzZWQKKwlieSBkZWZhdWx0IG9uIFdpbmRvd3MgYW5kIE9TLzIgcGxhdGZvcm1zLgorCisKKwkJCQkJCSoncHJpbnRleHByJyogKidwZXhwcicqCisncHJpbnRleHByJyAncGV4cHInCVN0cmluZwkoZGVmYXVsdDogc2VlIGJlbG93KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwcmludGVyfAorCQkJYW5kIHwrcG9zdHNjcmlwdHwgZmVhdHVyZXN9CisJRXhwcmVzc2lvbiB0aGF0IGlzIGV2YWx1YXRlZCB0byBwcmludCB0aGUgUG9zdFNjcmlwdCBwcm9kdWNlZCB3aXRoCisJIjpoYXJkY29weSIuCisJVGhlIGZpbGUgbmFtZSB0byBiZSBwcmludGVkIGlzIGluIHx2OmZuYW1lX2lufC4KKwlUaGUgYXJndW1lbnRzIHRvIHRoZSAiOmhhcmRjb3B5IiBjb21tYW5kIGFyZSBpbiB8djpjbWRhcmd8LgorCVRoZSBleHByZXNzaW9uIG11c3QgdGFrZSBjYXJlIG9mIGRlbGV0aW5nIHRoZSBmaWxlIGFmdGVyIHByaW50aW5nIGl0LgorCVdoZW4gdGhlcmUgaXMgYW4gZXJyb3IsIHRoZSBleHByZXNzaW9uIG11c3QgcmV0dXJuIGEgbm9uLXplcm8gbnVtYmVyLgorCUlmIHRoZXJlIGlzIG5vIGVycm9yLCByZXR1cm4gemVybyBvciBhbiBlbXB0eSBzdHJpbmcuCisJVGhlIGRlZmF1bHQgZm9yIG5vbiBNUy1XaW5kb3dzIG9yIFZNUyBzeXN0ZW1zIGlzIHRvIHNpbXBseSB1c2UgImxwciIKKwl0byBwcmludCB0aGUgZmlsZTogPgorCisJICAgIHN5c3RlbSgnbHByJyAuICgmcHJpbnRkZXZpY2UgPT0gJycgPyAnJyA6ICcgLVAnIC4gJnByaW50ZGV2aWNlKQorCQkuICcgJyAuIHY6Zm5hbWVfaW4pIC4gZGVsZXRlKHY6Zm5hbWVfaW4pICsgdjpzaGVsbF9lcnJvcgorPAorCU9uIE1TLVdpbmRvd3MgbWFjaGluZXMgdGhlIGRlZmF1bHQgaXMgdG8gY29weSB0aGUgZmlsZSB0byB0aGUKKwljdXJyZW50bHkgc3BlY2lmaWVkIHByaW50ZGV2aWNlOiA+CisKKwkgICAgc3lzdGVtKCdjb3B5JyAuICcgJyAuIHY6Zm5hbWVfaW4gLiAnICInIC4gJnByaW50ZGV2aWNlIC4gJyInKQorCQkJLiBkZWxldGUodjpmbmFtZV9pbikKKzwKKwlPbiBWTVMgbWFjaGluZXMgdGhlIGRlZmF1bHQgaXMgdG8gc2VuZCB0aGUgZmlsZSB0byBlaXRoZXIgdGhlIGRlZmF1bHQKKwlvciBjdXJyZW50bHkgc3BlY2lmaWVkIHByaW50ZGV2aWNlOiA+CisKKwkgICAgc3lzdGVtKCdwcmludCcgLiAoJnByaW50ZGV2aWNlID09ICcnID8gJycgOiAnIC9xdWV1ZT0nIC4KKwkJCSZwcmludGRldmljZSkgLiAnICcgLiB2OmZuYW1lX2luKSAuIGRlbGV0ZSh2OmZuYW1lX2luKQorPAorCUlmIHlvdSBjaGFuZ2UgdGhpcyBvcHRpb24sIHVzaW5nIGEgZnVuY3Rpb24gaXMgYW4gZWFzeSB3YXkgdG8gYXZvaWQKKwloYXZpbmcgdG8gZXNjYXBlIGFsbCB0aGUgc3BhY2VzLiAgRXhhbXBsZTogPgorCisJCTpzZXQgcHJpbnRleHByPVByaW50RmlsZSh2OmZuYW1lX2luKQorCQk6ZnVuY3Rpb24gUHJpbnRGaWxlKGZuYW1lKQorCQk6ICBjYWxsIHN5c3RlbSgiZ2hvc3R2aWV3ICIgLiBhOmZuYW1lKQorCQk6ICBjYWxsIGRlbGV0ZShhOmZuYW1lKQorCQk6ICByZXR1cm4gdjpzaGVsbF9lcnJvcgorCQk6ZW5kZnVuYworCis8CUJlIGF3YXJlIHRoYXQgc29tZSBwcmludCBwcm9ncmFtcyByZXR1cm4gY29udHJvbCBiZWZvcmUgdGhleSBoYXZlIHJlYWQKKwl0aGUgZmlsZS4gIElmIHlvdSBkZWxldGUgdGhlIGZpbGUgdG9vIHNvb24gaXQgd2lsbCBub3QgYmUgcHJpbnRlZC4KKwlUaGVzZSBwcm9ncmFtcyB1c3VhbGx5IG9mZmVyIGFuIG9wdGlvbiB0byBoYXZlIHRoZW0gcmVtb3ZlIHRoZSBmaWxlCisJd2hlbiBwcmludGluZyBpcyBkb25lLgorCQkJCQkJCQkqRTM2NSoKKwlJZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIGZhaWxzIG9yIGl0IHJlc3VsdHMgaW4gYSBub24temVybyBudW1iZXIsCisJeW91IGdldCBhbiBlcnJvciBtZXNzYWdlLiAgSW4gdGhhdCBjYXNlIFZpbSB3aWxsIGRlbGV0ZSB0aGUKKwlmaWxlLiAgSW4gdGhlIGRlZmF1bHQgdmFsdWUgZm9yIG5vbi1NUy1XaW5kb3dzIGEgdHJpY2sgaXMgdXNlZDogQWRkaW5nCisJInY6c2hlbGxfZXJyb3IiIHdpbGwgcmVzdWx0IGluIGEgbm9uLXplcm8gbnVtYmVyIHdoZW4gdGhlIHN5c3RlbSgpCisJY2FsbCBmYWlscy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSoncHJpbnRmb250JyogKidwZm4nKiAqRTYxMyoKKydwcmludGZvbnQnICdwZm4nCXN0cmluZwkoZGVmYXVsdCAiY291cmllciIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CisJCQlmZWF0dXJlfQorCVRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGZvbnQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSB8OmhhcmRjb3B5fAorCWNvbW1hbmQncyBvdXRwdXQuICBJdCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSAnZ3VpZm9udCcgb3B0aW9uLAorCWV4Y2VwdCB0aGF0IG9ubHkgb25lIGZvbnQgbWF5IGJlIG5hbWVkLCBhbmQgdGhlIHNwZWNpYWwgImd1aWZvbnQ9KiIKKwlzeW50YXggaXMgbm90IGF2YWlsYWJsZS4KKwlJbiB0aGUgV2luMzIgR1VJIHZlcnNpb24gdGhpcyBzcGVjaWZpZXMgYSBmb250IG5hbWUgd2l0aCBpdHMgZXh0cmEKKwlhdHRyaWJ1dGVzLCBhcyB3aXRoIHRoZSAnZ3VpZm9udCcgb3B0aW9uLgorCUZvciBvdGhlciBzeXN0ZW1zLCBvbmx5ICI6aDExIiBpcyByZWNvZ25pemVkLCB3aGVyZSAiMTEiIGlzIHRoZSBwb2ludAorCXNpemUgb2YgdGhlIGZvbnQuICBXaGVuIG9taXR0ZWQsIHRoZSBwb2ludCBzaXplIGlzIDEwLgorCisJCQkJCQkqJ3ByaW50aGVhZGVyJyogKidwaGVhZGVyJyoKKydwcmludGhlYWRlcicgJ3BoZWFkZXInICBzdHJpbmcgIChkZWZhdWx0ICIlPCVmJWglbSU9UGFnZSAlTiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CisJCQlmZWF0dXJlfQorCVRoaXMgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBoZWFkZXIgcHJvZHVjZWQgaW4gfDpoYXJkY29weXwgb3V0cHV0LgorCVRoZSBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlICdzdGF0dXNsaW5lJyBvcHRpb24uCisJSWYgVmltIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIHRoZSB8K3N0YXR1c2xpbmV8IGZlYXR1cmUsIHRoaXMKKwlvcHRpb24gaGFzIG5vIGVmZmVjdCBhbmQgYSBzaW1wbGUgZGVmYXVsdCBoZWFkZXIgaXMgdXNlZCwgd2hpY2ggc2hvd3MKKwl0aGUgcGFnZSBudW1iZXIuCisKKwkJCQkJCSoncHJpbnRvcHRpb25zJyogKidwb3B0JyoKKydwcmludG9wdGlvbnMnICdwb3B0JyBzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHwrcHJpbnRlcnwgZmVhdHVyZX0KKwlUaGlzIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXMgdGhhdCBjb250cm9sIHRoZSBmb3JtYXQgb2YKKwl0aGUgb3V0cHV0IG9mIHw6aGFyZGNvcHl8OgorCisJICBsZWZ0OntzcGVjfQkJbGVmdCBtYXJnaW4gKGRlZmF1bHQ6IDEwcGMpCisJICByaWdodDp7c3BlY30JCXJpZ2h0IG1hcmdpbiAoZGVmYXVsdDogNXBjKQorCSAgdG9wOntzcGVjfQkJdG9wIG1hcmdpbiAoZGVmYXVsdDogNXBjKQorCSAgYm90dG9tOntzcGVjfQkJYm90dG9tIG1hcmdpbiAoZGVmYXVsdDogNXBjKQorCQkJCXtzcGVjfSBpcyBhIG51bWJlciBmb2xsb3dlZCBieSAiaW4iIGZvcgorCQkJCWluY2hlcywgInB0IiBmb3IgcG9pbnRzICgxIHBvaW50IGlzIDEvNzIgb2YgYW4KKwkJCQlpbmNoKSwgIm1tIiBmb3IgbWlsbGltZXRlcnMgb3IgInBjIiBmb3IgYQorCQkJCXBlcmNlbnRhZ2Ugb2YgdGhlIG1lZGlhIHNpemUuCisJCQkJV2VpcmQgZXhhbXBsZToKKwkJCQkgICAgbGVmdDoyaW4sdG9wOjMwcHQscmlnaHQ6MTZtbSxib3R0b206M3BjCisJCQkJSWYgdGhlIHVuaXQgaXMgbm90IHJlY29nbml6ZWQgdGhlcmUgaXMgbm8KKwkJCQllcnJvciBhbmQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4KKworCSAgaGVhZGVyOntucn0JCU51bWJlciBvZiBsaW5lcyB0byByZXNlcnZlIGZvciB0aGUgaGVhZGVyLgorCQkJCU9ubHkgdGhlIGZpcnN0IGxpbmUgaXMgYWN0dWFsbHkgZmlsbGVkLCB0aHVzCisJCQkJd2hlbiB7bnJ9IGlzIDIgdGhlcmUgaXMgb25lIGVtcHR5IGxpbmUuICBUaGUKKwkJCQloZWFkZXIgaXMgZm9ybWF0dGVkIGFjY29yZGluZyB0bworCQkJCSdwcmludGhlYWRlcicuCisJICBoZWFkZXI6MAkJRG8gbm90IHByaW50IGEgaGVhZGVyLgorCSAgaGVhZGVyOjIgIChkZWZhdWx0KQlVc2UgdHdvIGxpbmVzIGZvciB0aGUgaGVhZGVyCisKKwkgIHN5bnRheDpuCQlEbyBub3QgdXNlIHN5bnRheCBoaWdobGlnaHRpbmcuICBUaGlzIGlzCisJCQkJZmFzdGVyIGFuZCB0aHVzIHVzZWZ1bCB3aGVuIHByaW50aW5nIGxhcmdlCisJCQkJZmlsZXMuCisJICBzeW50YXg6eQkJRG8gc3ludGF4IGhpZ2hsaWdodGluZy4KKwkgIHN5bnRheDphICAoZGVmYXVsdCkJVXNlIHN5bnRheCBoaWdobGlnaHRpbmcgaWYgdGhlIHByaW50ZXIgYXBwZWFycworCQkJCXRvIGJlIGFibGUgdG8gcHJpbnQgY29sb3Igb3IgZ3JleS4KKworCSAgbnVtYmVyOnkJCUluY2x1ZGUgbGluZSBudW1iZXJzIGluIHRoZSBwcmludGVkIG91dHB1dC4KKwkgIG51bWJlcjpuICAoZGVmYXVsdCkJTm8gbGluZSBudW1iZXJzLgorCisJICB3cmFwOnkgICAgKGRlZmF1bHQpCVdyYXAgbG9uZyBsaW5lcy4KKwkgIHdyYXA6bgkJVHJ1bmNhdGUgbG9uZyBsaW5lcy4KKworCSAgZHVwbGV4Om9mZgkJUHJpbnQgb24gb25lIHNpZGUuCisJICBkdXBsZXg6bG9uZyAoZGVmYXVsdCkJUHJpbnQgb24gYm90aCBzaWRlcyAod2hlbiBwb3NzaWJsZSksIGJpbmQgb24KKwkJCQlsb25nIHNpZGUuCisJICBkdXBsZXg6c2hvcnQJCVByaW50IG9uIGJvdGggc2lkZXMgKHdoZW4gcG9zc2libGUpLCBiaW5kIG9uCisJCQkJc2hvcnQgc2lkZS4KKworCSAgY29sbGF0ZTp5ICAoZGVmYXVsdCkJQ29sbGF0aW5nOiAxIDIgMywgMSAyIDMsIDEgMiAzCisJICBjb2xsYXRlOm4JCU5vIGNvbGxhdGluZzogMSAxIDEsIDIgMiAyLCAzIDMgMworCisJICBqb2JzcGxpdDpuIChkZWZhdWx0KQlEbyBhbGwgY29waWVzIGluIG9uZSBwcmludCBqb2IKKwkgIGpvYnNwbGl0OnkJCURvIGVhY2ggY29weSBhcyBhIHNlcGFyYXRlIHByaW50IGpvYi4gIFVzZWZ1bAorCQkJCXdoZW4gZG9pbmcgTi11cCBwb3N0cHJvY2Vzc2luZy4KKworCSAgcG9ydHJhaXQ6eSAoZGVmYXVsdCkJT3JpZW50YXRpb24gaXMgcG9ydHJhaXQuCisJICBwb3J0cmFpdDpuCQlPcmllbnRhdGlvbiBpcyBsYW5kc2NhcGUuCisJCQkJCQkJKmE0KiAqbGV0dGVyKgorCSAgcGFwZXI6QTQgICAoZGVmYXVsdCkJUGFwZXIgc2l6ZTogQTQKKwkgIHBhcGVyOntuYW1lfQkJUGFwZXIgc2l6ZSBmcm9tIHRoaXMgdGFibGU6CisJCQkJe25hbWV9CSAgICBzaXplIGluIGNtCSAgICAgc2l6ZSBpbiBpbmNoIH4KKwkJCQkxMHgxNAkgICAgMjUuNCAgeCAzNS41NyAgICAxMCAgICB4IDE0CisJCQkJQTMJICAgIDI5LjcgIHggNDIJICAgICAxMS42OSB4IDE2LjU0CisJCQkJQTQJICAgIDIxCSAgeCAyOS43ICAgICAgOC4yNyB4IDExLjY5CisJCQkJQTUJICAgIDE0LjggIHggMjEJICAgICAgNS44MyB4ICA4LjI3CisJCQkJQjQJICAgIDI1CSAgeCAzNS4zICAgICAxMC4xMiB4IDE0LjMzCisJCQkJQjUJICAgIDE3LjYgIHggMjUJICAgICAgNy4xNyB4IDEwLjEyCisJCQkJZXhlY3V0aXZlICAgMTguNDIgeCAyNi42NyAgICAgNy4yNSB4IDEwLjUKKwkJCQlmb2xpbwkgICAgMjEJICB4IDMzCSAgICAgIDguMjcgeCAxMworCQkJCWxlZGdlcgkgICAgNDMuMTMgeCAyNy45NiAgICAxNyAgICB4IDExCisJCQkJbGVnYWwJICAgIDIxLjU5IHggMzUuNTcgICAgIDguNSAgeCAxNAorCQkJCWxldHRlcgkgICAgMjEuNTkgeCAyNy45NiAgICAgOC41ICB4IDExCisJCQkJcXVhcnRvCSAgICAyMS41OSB4IDI3LjUgICAgICA4LjUgIHggMTAuODMKKwkJCQlzdGF0ZW1lbnQgICAxMy45NyB4IDIxLjU5ICAgICA1LjUgIHggIDguNQorCQkJCXRhYmxvaWQgICAgIDI3Ljk2IHggNDMuMTMgICAgMTEgICAgeCAxNworCisJICBmb3JtZmVlZDpuIChkZWZhdWx0KQlUcmVhdCBmb3JtIGZlZWQgY2hhcmFjdGVycyAoMHgwYykgYXMgYSBub3JtYWwKKwkJCQlwcmludCBjaGFyYWN0ZXIuCisJICBmb3JtZmVlZDp5CQlXaGVuIGEgZm9ybSBmZWVkIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCwKKwkJCQljb250aW51ZSBwcmludGluZyBvZiB0aGUgY3VycmVudCBsaW5lIGF0IHRoZQorCQkJCWJlZ2lubmluZyBvZiB0aGUgZmlyc3QgbGluZSBvbiBhIG5ldyBwYWdlLgorCisJVGhlIGl0ZW0gaW5kaWNhdGVkIHdpdGggKGRlZmF1bHQpIGlzIHVzZWQgd2hlbiB0aGUgaXRlbSBpcyBub3QKKwlwcmVzZW50LiAgVGhlIHZhbHVlcyBhcmUgbm90IGFsd2F5cyB1c2VkLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgYQorCWRpYWxvZyB0byBzZWxlY3QgdGhlIHByaW50ZXIgYW5kIG9wdGlvbnMuCisJRXhhbXBsZTogPgorCQk6c2V0IHByaW50b3B0aW9ucz1wYXBlcjpsZXR0ZXIsZHVwbGV4Om9mZgorPAorCQkJCSAgIConcmVhZG9ubHknKiAqJ3JvJyogKidub3JlYWRvbmx5JyogKidub3JvJyoKKydyZWFkb25seScgJ3JvJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwlJZiBvbiwgd3JpdGVzIGZhaWwgdW5sZXNzIHlvdSB1c2UgYSAnIScuICBQcm90ZWN0cyB5b3UgZnJvbQorCWFjY2lkZW50YWxseSBvdmVyd3JpdGluZyBhIGZpbGUuICBEZWZhdWx0IG9uIHdoZW4gVmltIGlzIHN0YXJ0ZWQKKwlpbiByZWFkLW9ubHkgbW9kZSAoInZpbSAtUiIpIG9yIHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgY2FsbGVkICJ2aWV3Ii4KKwl7bm90IGluIFZpOn0gIFdoZW4gdXNpbmcgdGhlICI6dmlldyIgY29tbWFuZCB0aGUgJ3JlYWRvbmx5JyBvcHRpb24gaXMKKwlzZXQgZm9yIHRoZSBuZXdseSBlZGl0ZWQgYnVmZmVyLiAgV2hlbiB1c2luZyAiOnchIiB0aGUgJ3JlYWRvbmx5JworCW9wdGlvbiBpcyByZXNldCBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLgorCisJCQkJCQkqJ3JlbWFwJyogKidub3JlbWFwJyoKKydyZW1hcCcJCQlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJQWxsb3dzIGZvciBtYXBwaW5ncyB0byB3b3JrIHJlY3Vyc2l2ZWx5LiAgSWYgeW91IGRvIG5vdCB3YW50IHRoaXMgZm9yCisJYSBzaW5nbGUgZW50cnksIHVzZSB0aGUgOm5vcmVtYXBbIV0gY29tbWFuZC4KKworCQkJCQkJKidyZXBvcnQnKgorJ3JlcG9ydCcJCW51bWJlcgkoZGVmYXVsdCAyKQorCQkJZ2xvYmFsCisJVGhyZXNob2xkIGZvciByZXBvcnRpbmcgbnVtYmVyIG9mIGxpbmVzIGNoYW5nZWQuICBXaGVuIHRoZSBudW1iZXIgb2YKKwljaGFuZ2VkIGxpbmVzIGlzIG1vcmUgdGhhbiAncmVwb3J0JyBhIG1lc3NhZ2Ugd2lsbCBiZSBnaXZlbiBmb3IgbW9zdAorCSI6IiBjb21tYW5kcy4gIElmIHlvdSB3YW50IGl0IGFsd2F5cywgc2V0ICdyZXBvcnQnIHRvIDAuCisJRm9yIHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgdGhlIG51bWJlciBvZiBzdWJzdGl0dXRpb25zIGlzIHVzZWQKKwlpbnN0ZWFkIG9mIHRoZSBudW1iZXIgb2YgbGluZXMuCisKKwkJCSAqJ3Jlc3RvcmVzY3JlZW4nKiAqJ3JzJyogKidub3Jlc3RvcmVzY3JlZW4nKiAqJ25vcnMnKgorJ3Jlc3RvcmVzY3JlZW4nICdycycJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0gIHtvbmx5IGluIFdpbmRvd3MgOTUvTlQgY29uc29sZSB2ZXJzaW9ufQorCVdoZW4gc2V0LCB0aGUgc2NyZWVuIGNvbnRlbnRzIGlzIHJlc3RvcmVkIHdoZW4gZXhpdGluZyBWaW0uICBUaGlzIGFsc28KKwloYXBwZW5zIHdoZW4gZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzLgorCisJRm9yIG5vbi1XaW5kb3dzIFZpbTogWW91IGNhbiBzZXQgb3IgcmVzZXQgdGhlICd0X3RpJyBhbmQgJ3RfdGUnCisJb3B0aW9ucyBpbiB5b3VyIC52aW1yYy4gIFRvIGRpc2FibGUgcmVzdG9yaW5nOgorCQlzZXQgdF90aT0gdF90ZT0KKwlUbyBlbmFibGUgcmVzdG9yaW5nIChmb3IgYW4geHRlcm0pOgorCQlzZXQgdF90aT1eWzdeW1tyXltbPzQ3aCB0X3RlPV5bWz80N2xeWzgKKwkoV2hlcmUgXlsgaXMgYW4gPEVzYz4sIHR5cGUgQ1RSTC1WIDxFc2M+IHRvIGluc2VydCBpdCkKKworCQkJCSoncmV2aW5zJyogKidyaScqIConbm9yZXZpbnMnKiAqJ25vcmknKgorJ3JldmlucycgJ3JpJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJSW5zZXJ0aW5nIGNoYXJhY3RlcnMgaW4gSW5zZXJ0IG1vZGUgd2lsbCB3b3JrIGJhY2t3YXJkcy4gIFNlZSAidHlwaW5nCisJYmFja3dhcmRzIiB8aW5zLXJldmVyc2V8LiAgVGhpcyBvcHRpb24gY2FuIGJlIHRvZ2dsZWQgd2l0aCB0aGUgQ1RSTC1fCisJY29tbWFuZCBpbiBJbnNlcnQgbW9kZSwgd2hlbiAnYWxsb3dyZXZpbnMnIGlzIHNldC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBvciAncGFzdGUnIGlzIHNldC4KKworCQkJCSAqJ3JpZ2h0bGVmdCcqIConcmwnKiAqJ25vcmlnaHRsZWZ0JyogKidub3JsJyoKKydyaWdodGxlZnQnICdybCcJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgZGlzcGxheSBvcmllbnRhdGlvbiBiZWNvbWVzIHJpZ2h0LXRvLWxlZnQsIGkuZS4sIGNoYXJhY3RlcnMKKwl0aGF0IGFyZSBzdG9yZWQgaW4gdGhlIGZpbGUgYXBwZWFyIGZyb20gdGhlIHJpZ2h0IHRvIHRoZSBsZWZ0LgorCVVzaW5nIHRoaXMgb3B0aW9uLCBpdCBpcyBwb3NzaWJsZSB0byBlZGl0IGZpbGVzIGZvciBsYW5ndWFnZXMgdGhhdAorCWFyZSB3cml0dGVuIGZyb20gdGhlIHJpZ2h0IHRvIHRoZSBsZWZ0IHN1Y2ggYXMgSGVicmV3IGFuZCBBcmFiaWMuCisJVGhpcyBvcHRpb24gaXMgcGVyIHdpbmRvdywgc28gaXQgaXMgcG9zc2libGUgdG8gZWRpdCBtaXhlZCBmaWxlcworCXNpbXVsdGFuZW91c2x5LCBvciB0byB2aWV3IHRoZSBzYW1lIGZpbGUgaW4gYm90aCB3YXlzICh0aGlzIGlzCisJdXNlZnVsIHdoZW5ldmVyIHlvdSBoYXZlIGEgbWl4ZWQgdGV4dCBmaWxlIHdpdGggYm90aCByaWdodC10by1sZWZ0CisJYW5kIGxlZnQtdG8tcmlnaHQgc3RyaW5ncyBzbyB0aGF0IGJvdGggc2V0cyBhcmUgZGlzcGxheWVkIHByb3Blcmx5CisJaW4gZGlmZmVyZW50IHdpbmRvd3MpLiAgQWxzbyBzZWUgfHJpbGVmdC50eHR8LgorCisJCQkqJ3JpZ2h0bGVmdGNtZCcqIConcmxjJyogKidub3JpZ2h0bGVmdGNtZCcqIConbm9ybGMnKgorJ3JpZ2h0bGVmdGNtZCcgJ3JsYycJc3RyaW5nCShkZWZhdWx0ICJzZWFyY2giKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtyaWdodGxlZnR8CisJCQlmZWF0dXJlfQorCUVhY2ggd29yZCBpbiB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBjb21tYW5kIGxpbmUgZWRpdGluZyB0byB3b3JrIGluCisJcmlnaHQtdG8tbGVmdCBtb2RlIGZvciBhIGdyb3VwIG9mIGNvbW1hbmRzOgorCisJCXNlYXJjaAkJIi8iIGFuZCAiPyIgY29tbWFuZHMKKworCVRoaXMgaXMgdXNlZnVsIGZvciBsYW5ndWFnZXMgc3VjaCBhcyBIZWJyZXcsIEFyYWJpYyBhbmQgRmFyc2kuCisJVGhlICdyaWdodGxlZnQnIG9wdGlvbiBtdXN0IGJlIHNldCBmb3IgJ3JpZ2h0bGVmdGNtZCcgdG8gdGFrZSBlZmZlY3QuCisKKwkJCQkJIConcnVsZXInKiAqJ3J1JyogKidub3J1bGVyJyogKidub3J1JyoKKydydWxlcicgJ3J1JwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2NtZGxpbmVfaW5mb3wgZmVhdHVyZX0KKwlTaG93IHRoZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJzb3IgcG9zaXRpb24sIHNlcGFyYXRlZCBieSBhCisJY29tbWEuCVdoZW4gdGhlcmUgaXMgcm9vbSwgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5ZWQKKwl0ZXh0IGluIHRoZSBmaWxlIGlzIHNob3duIG9uIHRoZSBmYXIgcmlnaHQ6CisJCVRvcAlmaXJzdCBsaW5lIGlzIHZpc2libGUKKwkJQm90CWxhc3QgbGluZSBpcyB2aXNpYmxlCisJCUFsbAlmaXJzdCBhbmQgbGFzdCBsaW5lIGFyZSB2aXNpYmxlCisJCTQ1JQlyZWxhdGl2ZSBwb3NpdGlvbiBpbiB0aGUgZmlsZQorCUlmICdydWxlcmZvcm1hdCcgaXMgc2V0LCBpdCB3aWxsIGRldGVybWluZSB0aGUgY29udGVudHMgb2YgdGhlIHJ1bGVyLgorCUVhY2ggd2luZG93IGhhcyBpdHMgb3duIHJ1bGVyLglJZiBhIHdpbmRvdyBoYXMgYSBzdGF0dXMgbGluZSwgdGhlCisJcnVsZXIgaXMgc2hvd24gdGhlcmUuICBPdGhlcndpc2UgaXQgaXMgc2hvd24gaW4gdGhlIGxhc3QgbGluZSBvZiB0aGUKKwlzY3JlZW4uICBJZiB0aGUgc3RhdHVzbGluZSBpcyBnaXZlbiBieSAnc3RhdHVzbGluZScgKGllLiBub3QgZW1wdHkpLAorCXRoaXMgb3B0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciAncnVsZXInIGFuZCAncnVsZXJmb3JtYXQnCisJSWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGRpc3BsYXllZCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbnVtYmVyIG9mCisJYnl0ZXMgaW4gdGhlIHRleHQgKGUuZy4sIGZvciBhIFRBQiBvciBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyKSwgYm90aAorCXRoZSB0ZXh0IGNvbHVtbiAoYnl0ZSBudW1iZXIpIGFuZCB0aGUgc2NyZWVuIGNvbHVtbiBhcmUgc2hvd24sCisJc2VwYXJhdGVkIHdpdGggYSBkYXNoLgorCUZvciBhbiBlbXB0eSBsaW5lICIwLTEiIGlzIHNob3duLgorCUZvciBhbiBlbXB0eSBidWZmZXIgdGhlIGxpbmUgbnVtYmVyIHdpbGwgYWxzbyBiZSB6ZXJvOiAiMCwwLTEiLgorCVRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHNldC4KKwlJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZWUgdGhlIHJ1bGVyIGFsbCB0aGUgdGltZSBidXQgd2FudCB0byBrbm93IHdoZXJlCisJeW91IGFyZSwgdXNlICJnIENUUkwtRyIgfGdfQ1RSTC1HfC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSoncnVsZXJmb3JtYXQnKiAqJ3J1ZicqCisncnVsZXJmb3JtYXQnICdydWYnCXN0cmluZwkoZGVmYXVsdCBlbXB0eSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzdGF0dXNsaW5lfAorCQkJZmVhdHVyZX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCBlbXB0eSwgaXQgZGV0ZXJtaW5lcyB0aGUgY29udGVudCBvZiB0aGUgcnVsZXIKKwlzdHJpbmcsIGFzIGRpc3BsYXllZCBmb3IgdGhlICdydWxlcicgb3B0aW9uLgorCVRoZSBmb3JtYXQgb2YgdGhpcyBvcHRpb24sIGlzIGxpa2UgdGhhdCBvZiAnc3RhdHVzbGluZScuCisJVGhlIGRlZmF1bHQgcnVsZXIgd2lkdGggaXMgMTcgY2hhcmFjdGVycy4gIFRvIG1ha2UgdGhlIHJ1bGVyIDE1CisJY2hhcmFjdGVycyB3aWRlLCBwdXQgIiUxNSgiIGF0IHRoZSBzdGFydCBhbmQgIiUpIiBhdCB0aGUgZW5kLgorCUV4YW1wbGU6ID4KKwkJOnNldCBydWxlcmZvcm1hdD0lMTUoJWMlVlwgJXAlJSUpCis8CisJCQkJKidydW50aW1lcGF0aCcqIConcnRwJyogKnZpbWZpbGVzKgorJ3J1bnRpbWVwYXRoJyAncnRwJwlzdHJpbmcJKGRlZmF1bHQ6CisJCQkJCVVuaXg6ICIkSE9NRS8udmltLAorCQkJCQkJJFZJTS92aW1maWxlcywKKwkJCQkJCSRWSU1SVU5USU1FLAorCQkJCQkJJFZJTS92aW1maWxlcy9hZnRlciwKKwkJCQkJCSRIT01FLy52aW0vYWZ0ZXIiCisJCQkJCUFtaWdhOiAiaG9tZTp2aW1maWxlcywKKwkJCQkJCSRWSU0vdmltZmlsZXMsCisJCQkJCQkkVklNUlVOVElNRSwKKwkJCQkJCSRWSU0vdmltZmlsZXMvYWZ0ZXIsCisJCQkJCQlob21lOnZpbWZpbGVzL2FmdGVyIgorCQkJCQlQQywgT1MvMjogIiRIT01FL3ZpbWZpbGVzLAorCQkJCQkJJFZJTS92aW1maWxlcywKKwkJCQkJCSRWSU1SVU5USU1FLAorCQkJCQkJJFZJTS92aW1maWxlcy9hZnRlciwKKwkJCQkJCSRIT01FL3ZpbWZpbGVzL2FmdGVyIgorCQkJCQlNYWNpbnRvc2g6ICIkVklNOnZpbWZpbGVzLAorCQkJCQkJJFZJTVJVTlRJTUUsCisJCQkJCQkkVklNOnZpbWZpbGVzOmFmdGVyIgorCQkJCQlSSVNDLU9TOiAiQ2hvaWNlczp2aW1maWxlcywKKwkJCQkJCSRWSU1SVU5USU1FLAorCQkJCQkJQ2hvaWNlczp2aW1maWxlcy9hZnRlciIKKwkJCQkJVk1TOiAic3lzJGxvZ2luOnZpbWZpbGVzLAorCQkJCQkJJFZJTS92aW1maWxlcywKKwkJCQkJCSRWSU1SVU5USU1FLAorCQkJCQkJJFZJTS92aW1maWxlcy9hZnRlciwKKwkJCQkJCXN5cyRsb2dpbjp2aW1maWxlcy9hZnRlciIKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGlzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB3aGljaCB3aWxsIGJlIHNlYXJjaGVkIGZvciBydW50aW1lCisJZmlsZXM6CisJICBmaWxldHlwZS52aW0JZmlsZXR5cGVzIGJ5IGZpbGUgbmFtZSB8bmV3LWZpbGV0eXBlfAorCSAgc2NyaXB0cy52aW0JZmlsZXR5cGVzIGJ5IGZpbGUgY29udGVudHMgfG5ldy1maWxldHlwZS1zY3JpcHRzfAorCSAgY29sb3JzLwljb2xvciBzY2hlbWUgZmlsZXMgfDpjb2xvcnNjaGVtZXwKKwkgIGNvbXBpbGVyLwljb21waWxlciBmaWxlcyB8OmNvbXBpbGVyfAorCSAgZG9jLwkJZG9jdW1lbnRhdGlvbiB8d3JpdGUtbG9jYWwtaGVscHwKKwkgIGZ0cGx1Z2luLwlmaWxldHlwZSBwbHVnaW5zIHx3cml0ZS1maWxldHlwZS1wbHVnaW58CisJICBpbmRlbnQvCWluZGVudCBzY3JpcHRzIHxpbmRlbnQtZXhwcmVzc2lvbnwKKwkgIGtleW1hcC8Ja2V5IG1hcHBpbmcgZmlsZXMgfG1ieXRlLWtleW1hcHwKKwkgIGxhbmcvCQltZW51IHRyYW5zbGF0aW9ucyB8Om1lbnV0cmFuc3wKKwkgIG1lbnUudmltCUdVSSBtZW51cyB8bWVudS52aW18CisJICBwbHVnaW4vCXBsdWdpbiBzY3JpcHRzIHx3cml0ZS1wbHVnaW58CisJICBwcmludC8JZmlsZXMgZm9yIHByaW50aW5nIHxwb3N0c2NyaXB0LXByaW50LWVuY29kaW5nfAorCSAgc3ludGF4LwlzeW50YXggZmlsZXMgfG15c3ludGF4ZmlsZXwKKwkgIHR1dG9yLwlmaWxlcyBmb3IgdmltdHV0b3IgfHR1dG9yfAorCisJQW5kIGFueSBvdGhlciBmaWxlIHNlYXJjaGVkIGZvciB3aXRoIHRoZSB8OnJ1bnRpbWV8IGNvbW1hbmQuCisKKwlUaGUgZGVmYXVsdHMgZm9yIG1vc3Qgc3lzdGVtcyBhcmUgc2V0dXAgdG8gc2VhcmNoIGZpdmUgbG9jYXRpb25zOgorCTEuIEluIHlvdXIgaG9tZSBkaXJlY3RvcnksIGZvciB5b3VyIHBlcnNvbmFsIHByZWZlcmVuY2VzLgorCTIuIEluIGEgc3lzdGVtLXdpZGUgVmltIGRpcmVjdG9yeSwgZm9yIHByZWZlcmVuY2VzIGZyb20gdGhlIHN5c3RlbQorCSAgIGFkbWluaXN0cmF0b3IuCisJMy4gSW4gJFZJTVJVTlRJTUUsIGZvciBmaWxlcyBkaXN0cmlidXRlZCB3aXRoIFZpbS4KKwkJCQkJCQkqYWZ0ZXItZGlyZWN0b3J5KgorCTQuIEluIHRoZSAiYWZ0ZXIiIGRpcmVjdG9yeSBpbiB0aGUgc3lzdGVtLXdpZGUgVmltIGRpcmVjdG9yeS4gIFRoaXMgaXMKKwkgICBmb3IgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIG92ZXJydWxlIG9yIGFkZCB0byB0aGUgZGlzdHJpYnV0ZWQKKwkgICBkZWZhdWx0cyAocmFyZWx5IG5lZWRlZCkKKwk1LiBJbiB0aGUgImFmdGVyIiBkaXJlY3RvcnkgaW4geW91ciBob21lIGRpcmVjdG9yeS4gIFRoaXMgaXMgZm9yCisJICAgcGVyc29uYWwgcHJlZmVyZW5jZXMgdG8gb3ZlcnJ1bGUgb3IgYWRkIHRvIHRoZSBkaXN0cmlidXRlZCBkZWZhdWx0cworCSAgIG9yIHN5c3RlbS13aWRlIHNldHRpbmdzIChyYXJlbHkgbmVlZGVkKS4KKworCU5vdGUgdGhhdCwgdW5saWtlICdwYXRoJywgbm8gd2lsZGNhcmRzIGxpa2UgIioqIiBhcmUgYWxsb3dlZC4gIE5vcm1hbAorCXdpbGRjYXJkcyBhcmUgYWxsb3dlZCwgYnV0IGNhbiBzaWduaWZpY2FudGx5IHNsb3cgZG93biBzZWFyY2hpbmcgZm9yCisJcnVudGltZSBmaWxlcy4JRm9yIHNwZWVkLCB1c2UgYXMgZmV3IGl0ZW1zIGFzIHBvc3NpYmxlIGFuZCBhdm9pZAorCXdpbGRjYXJkcy4KKwlTZWUgfDpydW50aW1lfC4KKwlFeGFtcGxlOiA+CisJCTpzZXQgcnVudGltZXBhdGg9fi92aW1ydW50aW1lLC9teWdyb3VwL3ZpbSwkVklNUlVOVElNRQorPAlUaGlzIHdpbGwgdXNlIHRoZSBkaXJlY3RvcnkgIn4vdmltcnVudGltZSIgZmlyc3QgKGNvbnRhaW5pbmcgeW91cgorCXBlcnNvbmFsIFZpbSBydW50aW1lIGZpbGVzKSwgdGhlbiAiL215Z3JvdXAvdmltIiAoc2hhcmVkIGJldHdlZW4gYQorCWdyb3VwIG9mIHBlb3BsZSkgYW5kIGZpbmFsbHkgIiRWSU1SVU5USU1FIiAodGhlIGRpc3RyaWJ1dGVkIHJ1bnRpbWUKKwlmaWxlcykuCisJWW91IHByb2JhYmx5IHNob3VsZCBhbHdheXMgaW5jbHVkZSAkVklNUlVOVElNRSBzb21ld2hlcmUsIHRvIHVzZSB0aGUKKwlkaXN0cmlidXRlZCBydW50aW1lIGZpbGVzLiAgWW91IGNhbiBwdXQgYSBkaXJlY3RvcnkgYmVmb3JlICRWSU1SVU5USU1FCisJdG8gZmluZCBmaWxlcyB3aGljaCByZXBsYWNlIGEgZGlzdHJpYnV0ZWQgcnVudGltZSBmaWxlcy4gIFlvdSBjYW4gcHV0CisJYSBkaXJlY3RvcnkgYWZ0ZXIgJFZJTVJVTlRJTUUgdG8gZmluZCBmaWxlcyB3aGljaCBhZGQgdG8gZGlzdHJpYnV0ZWQKKwlydW50aW1lIGZpbGVzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidzY3JvbGwnKiAqJ3NjcicqCisnc2Nyb2xsJyAnc2NyJwkJbnVtYmVyCShkZWZhdWx0OiBoYWxmIHRoZSB3aW5kb3cgaGVpZ2h0KQorCQkJbG9jYWwgdG8gd2luZG93CisJTnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCB3aXRoIENUUkwtVSBhbmQgQ1RSTC1EIGNvbW1hbmRzLiAgV2lsbCBiZQorCXNldCB0byBoYWxmIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHdpbmRvdyB3aGVuIHRoZSB3aW5kb3cgc2l6ZQorCWNoYW5nZXMuICBJZiB5b3UgZ2l2ZSBhIGNvdW50IHRvIHRoZSBDVFJMLVUgb3IgQ1RSTC1EIGNvbW1hbmQgaXQgd2lsbAorCWJlIHVzZWQgYXMgdGhlIG5ldyB2YWx1ZSBmb3IgJ3Njcm9sbCcuCVJlc2V0IHRvIGhhbGYgdGhlIHdpbmRvdworCWhlaWdodCB3aXRoICI6c2V0IHNjcm9sbD0wIi4gICB7VmkgaXMgYSBiaXQgZGlmZmVyZW50OiAnc2Nyb2xsJyBnaXZlcworCXRoZSBudW1iZXIgb2Ygc2NyZWVuIGxpbmVzIGluc3RlYWQgb2YgZmlsZSBsaW5lcywgbWFrZXMgYSBkaWZmZXJlbmNlCisJd2hlbiBsaW5lcyB3cmFwfQorCisJCQkqJ3Njcm9sbGJpbmQnKiAqJ3NjYicqIConbm9zY3JvbGxiaW5kJyogKidub3NjYicqCisnc2Nyb2xsYmluZCcgJ3NjYicJYm9vbGVhbiAgKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3Njcm9sbGJpbmR8CisJCQlmZWF0dXJlfQorCVNlZSBhbHNvIHxzY3JvbGwtYmluZGluZ3wuICBXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGN1cnJlbnQKKwl3aW5kb3cgc2Nyb2xscyBhcyBvdGhlciBzY3JvbGxiaW5kIHdpbmRvd3MgKHdpbmRvd3MgdGhhdCBhbHNvIGhhdmUKKwl0aGlzIG9wdGlvbiBzZXQpIHNjcm9sbC4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3Igdmlld2luZyB0aGUKKwlkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byB2ZXJzaW9ucyBvZiBhIGZpbGUsIHNlZSAnZGlmZicuCisJU2VlIHwnc2Nyb2xsb3B0J3wgZm9yIG9wdGlvbnMgdGhhdCBkZXRlcm1pbmUgaG93IHRoaXMgb3B0aW9uIHNob3VsZCBiZQorCWludGVycHJldGVkLgorCVRoaXMgb3B0aW9uIGlzIG1vc3RseSByZXNldCB3aGVuIHNwbGl0dGluZyBhIHdpbmRvdyB0byBlZGl0IGFub3RoZXIKKwlmaWxlLiAgVGhpcyBtZWFucyB0aGF0ICI6c3BsaXQgfCBlZGl0IGZpbGUiIHJlc3VsdHMgaW4gdHdvIHdpbmRvd3MKKwl3aXRoIHNjcm9sbC1iaW5kaW5nLCBidXQgIjpzcGxpdCBmaWxlIiBkb2VzIG5vdC4KKworCQkJCQkJKidzY3JvbGxqdW1wJyogKidzaicqCisnc2Nyb2xsanVtcCcgJ3NqJwludW1iZXIJKGRlZmF1bHQgMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNaW5pbWFsIG51bWJlciBvZiBsaW5lcyB0byBzY3JvbGwgd2hlbiB0aGUgY3Vyc29yIGdldHMgb2ZmIHRoZQorCXNjcmVlbiAoZS5nLiwgd2l0aCAiaiIpLiAgTm90IHVzZWQgZm9yIHNjcm9sbCBjb21tYW5kcyAoZS5nLiwgQ1RSTC1FLAorCUNUUkwtRCkuICBVc2VmdWwgaWYgeW91ciB0ZXJtaW5hbCBzY3JvbGxzIHZlcnkgc2xvd2x5LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byAxIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidzY3JvbGxvZmYnKiAqJ3NvJyoKKydzY3JvbGxvZmYnICdzbycJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWluaW1hbCBudW1iZXIgb2Ygc2NyZWVuIGxpbmVzIHRvIGtlZXAgYWJvdmUgYW5kIGJlbG93IHRoZSBjdXJzb3IuCisJVGhpcyB3aWxsIG1ha2Ugc29tZSBjb250ZXh0IHZpc2libGUgYXJvdW5kIHdoZXJlIHlvdSBhcmUgd29ya2luZy4gIElmCisJeW91IHNldCBpdCB0byBhIHZlcnkgbGFyZ2UgdmFsdWUgKDk5OSkgdGhlIGN1cnNvciBsaW5lIHdpbGwgYWx3YXlzIGJlCisJaW4gdGhlIG1pZGRsZSBvZiB0aGUgd2luZG93IChleGNlcHQgYXQgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgZmlsZSBvcgorCXdoZW4gbG9uZyBsaW5lcyB3cmFwKS4KKwlGb3Igc2Nyb2xsaW5nIGhvcml6b250YWxseSBzZWUgJ3NpZGVzY3JvbGxvZmYnLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byAwIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidzY3JvbGxvcHQnKiAqJ3NibycqCisnc2Nyb2xsb3B0JyAnc2JvJwlzdHJpbmcJKGRlZmF1bHQgInZlcixqdW1wIikKKwkJCWdsb2JhbAorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3Njcm9sbGJpbmR8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMgdGhhdCBzcGVjaWZpZXMgaG93CisJJ3Njcm9sbGJpbmQnIHdpbmRvd3Mgc2hvdWxkIGJlaGF2ZS4KKwlUaGUgZm9sbG93aW5nIHdvcmRzIGFyZSBhdmFpbGFibGU6CisJICAgIHZlcgkJQmluZCB2ZXJ0aWNhbCBzY3JvbGxpbmcgZm9yICdzY3JvbGxiaW5kJyB3aW5kb3dzCisJICAgIGhvcgkJQmluZCBob3Jpem9udGFsIHNjcm9sbGluZyBmb3IgJ3Njcm9sbGJpbmQnIHdpbmRvd3MKKwkgICAganVtcAlBcHBsaWVzIHRvIHRoZSBvZmZzZXQgYmV0d2VlbiB0d28gd2luZG93cyBmb3IgdmVydGljYWwKKwkJCXNjcm9sbGluZy4gIFRoaXMgb2Zmc2V0IGlzIHRoZSBkaWZmZXJlbmNlIGluIHRoZSBmaXJzdAorCQkJZGlzcGxheWVkIGxpbmUgb2YgdGhlIGJvdW5kIHdpbmRvd3MuICBXaGVuIG1vdmluZworCQkJYXJvdW5kIGluIGEgd2luZG93LCBhbm90aGVyICdzY3JvbGxiaW5kJyB3aW5kb3cgbWF5CisJCQlyZWFjaCBhIHBvc2l0aW9uIGJlZm9yZSB0aGUgc3RhcnQgb3IgYWZ0ZXIgdGhlIGVuZCBvZgorCQkJdGhlIGJ1ZmZlci4gIFRoZSBvZmZzZXQgaXMgbm90IGNoYW5nZWQgdGhvdWdoLCB3aGVuCisJCQltb3ZpbmcgYmFjayB0aGUgJ3Njcm9sbGJpbmQnIHdpbmRvdyB3aWxsIHRyeSB0byBzY3JvbGwKKwkJCXRvIHRoZSBkZXNpcmVkIHBvc2l0aW9uIHdoZW4gcG9zc2libGUuCisJCQlXaGVuIG5vdyBtYWtpbmcgdGhhdCB3aW5kb3cgdGhlIGN1cnJlbnQgb25lLCB0d28KKwkJCXRoaW5ncyBjYW4gYmUgZG9uZSB3aXRoIHRoZSByZWxhdGl2ZSBvZmZzZXQ6CisJCQkxLiBXaGVuICJqdW1wIiBpcyBub3QgaW5jbHVkZWQsIHRoZSByZWxhdGl2ZSBvZmZzZXQgaXMKKwkJCSAgIGFkanVzdGVkIGZvciB0aGUgc2Nyb2xsIHBvc2l0aW9uIGluIHRoZSBuZXcgY3VycmVudAorCQkJICAgd2luZG93LiAgV2hlbiBnb2luZyBiYWNrIHRvIHRoZSBvdGhlciB3aW5kb3csIHRoZQorCQkJICAgdGhlIG5ldyByZWxhdGl2ZSBvZmZzZXQgd2lsbCBiZSB1c2VkLgorCQkJMi4gV2hlbiAianVtcCIgaXMgaW5jbHVkZWQsIHRoZSBvdGhlciB3aW5kb3dzIGFyZQorCQkJICAgc2Nyb2xsZWQgdG8ga2VlcCB0aGUgc2FtZSByZWxhdGl2ZSBvZmZzZXQuICBXaGVuCisJCQkgICBnb2luZyBiYWNrIHRvIHRoZSBvdGhlciB3aW5kb3csIGl0IHN0aWxsIHVzZXMgdGhlCisJCQkgICBzYW1lIHJlbGF0aXZlIG9mZnNldC4KKwlBbHNvIHNlZSB8c2Nyb2xsLWJpbmRpbmd8LgorCisJCQkJCQkqJ3NlY3Rpb25zJyogKidzZWN0JyoKKydzZWN0aW9ucycgJ3NlY3QnCXN0cmluZwkoZGVmYXVsdCAiU0hOSEggSFVuaHNoIikKKwkJCWdsb2JhbAorCVNwZWNpZmllcyB0aGUgbnJvZmYgbWFjcm9zIHRoYXQgc2VwYXJhdGUgc2VjdGlvbnMuICBUaGVzZSBhcmUgcGFpcnMgb2YKKwl0d28gbGV0dGVycyAoU2VlIHxvYmplY3QtbW90aW9uc3wpLiAgVGhlIGRlZmF1bHQgbWFrZXMgYSBzZWN0aW9uIHN0YXJ0CisJYXQgdGhlIG5yb2ZmIG1hY3JvcyAiLlNIIiwgIi5OSCIsICIuSCIsICIuSFUiLCAiLm5oIiBhbmQgIi5zaCIuCisKKwkJCQkJCSonc2VjdXJlJyogKidub3NlY3VyZScqICpFNTIzKgorJ3NlY3VyZScJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24sICI6YXV0b2NtZCIsIHNoZWxsIGFuZCB3cml0ZSBjb21tYW5kcyBhcmUgbm90IGFsbG93ZWQgaW4KKwkiLnZpbXJjIiBhbmQgIi5leHJjIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIG1hcCBjb21tYW5kcyBhcmUKKwlkaXNwbGF5ZWQuICBTd2l0Y2ggaXQgb2ZmIG9ubHkgaWYgeW91IGtub3cgdGhhdCB5b3Ugd2lsbCBub3QgcnVuIGludG8KKwlwcm9ibGVtcywgb3Igd2hlbiB0aGUgJ2V4cmMnIG9wdGlvbiBpcyBvZmYuICBPbiBVbml4IHRoaXMgb3B0aW9uIGlzCisJb25seSB1c2VkIGlmIHRoZSAiLnZpbXJjIiBvciAiLmV4cmMiIGlzIG5vdCBvd25lZCBieSB5b3UuICBUaGlzIGNhbiBiZQorCWRhbmdlcm91cyBpZiB0aGUgc3lzdGVtcyBhbGxvd3MgdXNlcnMgdG8gZG8gYSAiY2hvd24iLglZb3UgYmV0dGVyIHNldAorCSdzZWN1cmUnIGF0IHRoZSBlbmQgb2YgeW91ciB+Ly52aW1yYyB0aGVuLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidzZWxlY3Rpb24nKiAqJ3NlbCcqCisnc2VsZWN0aW9uJyAnc2VsJwlzdHJpbmcJKGRlZmF1bHQgImluY2x1c2l2ZSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNlbGVjdGlvbi4gIEl0IGlzIG9ubHkgdXNlZAorCWluIFZpc3VhbCBhbmQgU2VsZWN0IG1vZGUuCisJUG9zc2libGUgdmFsdWVzOgorCSAgIHZhbHVlCXBhc3QgbGluZSAgICAgaW5jbHVzaXZlIH4KKwkgICBvbGQJCSAgIG5vCQl5ZXMKKwkgICBpbmNsdXNpdmUJICAgeWVzCQl5ZXMKKwkgICBleGNsdXNpdmUJICAgeWVzCQlubworCSJwYXN0IGxpbmUiIG1lYW5zIHRoYXQgdGhlIGN1cnNvciBpcyBhbGxvd2VkIHRvIGJlIHBvc2l0aW9uZWQgb25lCisJY2hhcmFjdGVyIHBhc3QgdGhlIGxpbmUuCisJImluY2x1c2l2ZSIgbWVhbnMgdGhhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlbGVjdGlvbiBpcyBpbmNsdWRlZAorCWluIGFuIG9wZXJhdGlvbi4gIEZvciBleGFtcGxlLCB3aGVuICJ4IiBpcyB1c2VkIHRvIGRlbGV0ZSB0aGUKKwlzZWxlY3Rpb24uCisJTm90ZSB0aGF0IHdoZW4gImV4Y2x1c2l2ZSIgaXMgdXNlZCBhbmQgc2VsZWN0aW5nIGZyb20gdGhlIGVuZAorCWJhY2t3YXJkcywgeW91IGNhbm5vdCBpbmNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIGxpbmUsIHdoZW4KKwlzdGFydGluZyBpbiBOb3JtYWwgbW9kZSBhbmQgJ3ZpcnR1YWxlZGl0JyBlbXB0eS4KKworCVRoZSAnc2VsZWN0aW9uJyBvcHRpb24gaXMgc2V0IGJ5IHRoZSB8OmJlaGF2ZXwgY29tbWFuZC4KKworCQkJCQkJKidzZWxlY3Rtb2RlJyogKidzbG0nKgorJ3NlbGVjdG1vZGUnICdzbG0nCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMsIHdoaWNoIHNwZWNpZmllcyB3aGVuIHRvIHN0YXJ0CisJU2VsZWN0IG1vZGUgaW5zdGVhZCBvZiBWaXN1YWwgbW9kZSwgd2hlbiBhIHNlbGVjdGlvbiBpcyBzdGFydGVkLgorCVBvc3NpYmxlIHZhbHVlczoKKwkgICBtb3VzZQl3aGVuIHVzaW5nIHRoZSBtb3VzZQorCSAgIGtleQkJd2hlbiB1c2luZyBzaGlmdGVkIHNwZWNpYWwga2V5cworCSAgIGNtZAkJd2hlbiB1c2luZyAidiIsICJWIiBvciBDVFJMLVYKKwlTZWUgfFNlbGVjdC1tb2RlfC4KKwlUaGUgJ3NlbGVjdG1vZGUnIG9wdGlvbiBpcyBzZXQgYnkgdGhlIHw6YmVoYXZlfCBjb21tYW5kLgorCisJCQkJCQkqJ3Nlc3Npb25vcHRpb25zJyogKidzc29wJyoKKydzZXNzaW9ub3B0aW9ucycgJ3Nzb3AnCXN0cmluZwkoZGVmYXVsdDogImJsYW5rLGJ1ZmZlcnMsY3VyZGlyLGZvbGRzLAorCQkJCQkJCWhlbHAsb3B0aW9ucyx3aW5zaXplIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK21rc2Vzc2lvbgorCQkJZmVhdHVyZX0KKwlDaGFuZ2VzIHRoZSBlZmZlY3Qgb2YgdGhlIHw6bWtzZXNzaW9ufCBjb21tYW5kLiAgSXQgaXMgYSBjb21tYQorCXNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzLiAgRWFjaCB3b3JkIGVuYWJsZXMgc2F2aW5nIGFuZCByZXN0b3JpbmcKKwlzb21ldGhpbmc6CisJICAgd29yZAkJc2F2ZSBhbmQgcmVzdG9yZSB+CisJICAgYmxhbmsJZW1wdHkgd2luZG93cworCSAgIGJ1ZmZlcnMJaGlkZGVuIGFuZCB1bmxvYWRlZCBidWZmZXJzLCBub3QganVzdCB0aG9zZSBpbiB3aW5kb3dzCisJICAgY3VyZGlyCXRoZSBjdXJyZW50IGRpcmVjdG9yeQorCSAgIGZvbGRzCW1hbnVhbGx5IGNyZWF0ZWQgZm9sZHMsIG9wZW5lZC9jbG9zZWQgZm9sZHMgYW5kIGxvY2FsCisJCQlmb2xkIG9wdGlvbnMKKwkgICBnbG9iYWxzCWdsb2JhbCB2YXJpYWJsZXMgdGhhdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIKKwkJCWFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBsb3dlcmNhc2UgbGV0dGVyLgorCSAgIGhlbHAJCXRoZSBoZWxwIHdpbmRvdworCSAgIGxvY2Fsb3B0aW9ucwlvcHRpb25zIGFuZCBtYXBwaW5ncyBsb2NhbCB0byBhIHdpbmRvdyBvciBidWZmZXIgKG5vdAorCQkJZ2xvYmFsIHZhbHVlcyBmb3IgbG9jYWwgb3B0aW9ucykKKwkgICBvcHRpb25zCWFsbCBvcHRpb25zIGFuZCBtYXBwaW5ncyAoYWxzbyBnbG9iYWwgdmFsdWVzIGZvciBsb2NhbAorCQkJb3B0aW9ucykKKwkgICByZXNpemUJc2l6ZSBvZiB0aGUgVmltIHdpbmRvdzogJ2xpbmVzJyBhbmQgJ2NvbHVtbnMnCisJICAgc2VzZGlyCXRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHNlc3Npb24gZmlsZSBpcyBsb2NhdGVkCisJCQl3aWxsIGJlY29tZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgKHVzZWZ1bCB3aXRoCisJCQlwcm9qZWN0cyBhY2Nlc3NlZCBvdmVyIGEgbmV0d29yayBmcm9tIGRpZmZlcmVudAorCQkJc3lzdGVtcykKKwkgICBzbGFzaAliYWNrc2xhc2hlcyBpbiBmaWxlIG5hbWVzIHJlcGxhY2VkIHdpdGggZm9yd2FyZAorCQkJc2xhc2hlcworCSAgIHVuaXgJCXdpdGggVW5peCBlbmQtb2YtbGluZSBmb3JtYXQgKHNpbmdsZSA8Tkw+KSwgZXZlbiB3aGVuCisJCQlvbiBXaW5kb3dzIG9yIERPUworCSAgIHdpbnBvcwlwb3NpdGlvbiBvZiB0aGUgd2hvbGUgVmltIHdpbmRvdworCSAgIHdpbnNpemUJd2luZG93IHNpemVzCisKKwlEb24ndCBpbmNsdWRlIGJvdGggImN1cmRpciIgYW5kICJzZXNkaXIiLgorCVdoZW4gImN1cmRpciIgbm9yICJzZXNkaXIiIGlzIGluY2x1ZGVkLCBmaWxlIG5hbWVzIGFyZSBzdG9yZWQgd2l0aAorCWFic29sdXRlIHBhdGhzLgorCSJzbGFzaCIgYW5kICJ1bml4IiBhcmUgdXNlZnVsIG9uIFdpbmRvd3Mgd2hlbiBzaGFyaW5nIHNlc3Npb24gZmlsZXMKKwl3aXRoIFVuaXguICBUaGUgVW5peCB2ZXJzaW9uIG9mIFZpbSBjYW5ub3Qgc291cmNlIGRvcyBmb3JtYXQgc2NyaXB0cywKKwlidXQgdGhlIFdpbmRvd3MgdmVyc2lvbiBvZiBWaW0gY2FuIHNvdXJjZSB1bml4IGZvcm1hdCBzY3JpcHRzLgorCisJCQkJCQkqJ3NoZWxsJyogKidzaCcqICpFOTEqCisnc2hlbGwnICdzaCcJCXN0cmluZwkoZGVmYXVsdCAkU0hFTEwgb3IgInNoIiwKKwkJCQkJTVMtRE9TIGFuZCBXaW4zMjogImNvbW1hbmQuY29tIiBvcgorCQkJCQkiY21kLmV4ZSIsIE9TLzI6ICJjbWQiKQorCQkJZ2xvYmFsCisJTmFtZSBvZiB0aGUgc2hlbGwgdG8gdXNlIGZvciAhIGFuZCA6ISBjb21tYW5kcy4gIFdoZW4gY2hhbmdpbmcgdGhlCisJdmFsdWUgYWxzbyBjaGVjayB0aGVzZSBvcHRpb25zOiAnc2hlbGx0eXBlJywgJ3NoZWxscGlwZScsICdzaGVsbHNsYXNoJworCSdzaGVsbHJlZGlyJywgJ3NoZWxscXVvdGUnLCAnc2hlbGx4cXVvdGUnIGFuZCAnc2hlbGxjbWRmbGFnJy4KKwlJdCBpcyBhbGxvd2VkIHRvIGdpdmUgYW4gYXJndW1lbnQgdG8gdGhlIGNvbW1hbmQsIGUuZy4JImNzaCAtZiIuCisJU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCisJSWYgdGhlIG5hbWUgb2YgdGhlIHNoZWxsIGNvbnRhaW5zIGEgc3BhY2UsIHlvdSBtaWdodCBuZWVkIHRvIGVuY2xvc2UKKwlpdCBpbiBxdW90ZXMuICBFeGFtcGxlOiA+CisJCTpzZXQgc2hlbGw9XCJjOlxwcm9ncmFtXCBmaWxlc1x1bml4XHNoLmV4ZVwiXCAtZgorPAlOb3RlIHRoZSBiYWNrc2xhc2ggYmVmb3JlIGVhY2ggcXVvdGUgKHRvIGF2b2lkIHN0YXJ0aW5nIGEgY29tbWVudCkgYW5kCisJZWFjaCBzcGFjZSAodG8gYXZvaWQgZW5kaW5nIHRoZSBvcHRpb24gdmFsdWUpLglBbHNvIG5vdGUgdGhhdCB0aGUKKwkiLWYiIGlzIG5vdCBpbnNpZGUgdGhlIHF1b3RlcywgYmVjYXVzZSBpdCBpcyBub3QgcGFydCBvZiB0aGUgY29tbWFuZAorCW5hbWUuICBBbmQgVmltIGF1dG9tYWdpY2FsbHkgcmVjb2duaXplcyB0aGUgYmFja3NsYXNoZXMgdGhhdCBhcmUgcGF0aAorCXNlcGFyYXRvcnMuCisJRm9yIERvcyAzMiBiaXRzIChESkdQUCksIHlvdSBjYW4gc2V0IHRoZSAkREpTWVNGTEFHUyBlbnZpcm9ubWVudAorCXZhcmlhYmxlIHRvIGNoYW5nZSB0aGUgd2F5IGV4dGVybmFsIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4gIFNlZSB0aGUKKwlsaWJjLmluZiBmaWxlIG9mIERKR1BQLgorCVVuZGVyIE1TLVdpbmRvd3MsIHdoZW4gdGhlIGV4ZWN1dGFibGUgZW5kcyBpbiAiLmNvbSIgaXQgbXVzdCBiZQorCWluY2x1ZGVkLiAgVGh1cyBzZXR0aW5nIHRoZSBzaGVsbCB0byAiY29tbWFuZC5jb20iIG9yICI0ZG9zLmNvbSIKKwl3b3JrcywgYnV0ICJjb21tYW5kIiBhbmQgIjRkb3MiIGRvIG5vdCB3b3JrIGZvciBhbGwgY29tbWFuZHMgKGUuZy4sCisJZmlsdGVyaW5nKS4KKwlGb3IgdW5rbm93biByZWFzb25zLCB3aGVuIHVzaW5nICI0ZG9zLmNvbSIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzCisJY2hhbmdlZCB0byAiQzpcIi4gIFRvIGF2b2lkIHRoaXMgc2V0ICdzaGVsbCcgbGlrZSB0aGlzOiA+CisJCTpzZXQgc2hlbGw9Y29tbWFuZC5jb21cIC9jXCA0ZG9zCis8CVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidzaGVsbGNtZGZsYWcnKiAqJ3NoY2YnKgorJ3NoZWxsY21kZmxhZycgJ3NoY2YnCXN0cmluZwkoZGVmYXVsdDogIi1jIiwgTVMtRE9TIGFuZCBXaW4zMiwgd2hlbiAnc2hlbGwnCisJCQkJCWRvZXMgbm90IGNvbnRhaW4gInNoIiBzb21ld2hlcmU6ICIvYyIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJRmxhZyBwYXNzZWQgdG8gdGhlIHNoZWxsIHRvIGV4ZWN1dGUgIiEiIGFuZCAiOiEiIGNvbW1hbmRzOyBlLmcuLAorCSJiYXNoLmV4ZSAtYyBscyIgb3IgImNvbW1hbmQuY29tIC9jIGRpciIuICBGb3IgdGhlIE1TLURPUy1saWtlCisJc3lzdGVtcywgdGhlIGRlZmF1bHQgaXMgc2V0IGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgJ3NoZWxsJywgdG8KKwlyZWR1Y2UgdGhlIG5lZWQgdG8gc2V0IHRoaXMgb3B0aW9uIGJ5IHRoZSB1c2VyLiAgSXQncyBub3QgdXNlZCBmb3IKKwlPUy8yIChFTVggZmlndXJlcyB0aGlzIG91dCBpdHNlbGYpLiAgU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dAorCWluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLiAgU2VlIHxkb3Mtc2hlbGx8LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidzaGVsbHBpcGUnKiAqJ3NwJyoKKydzaGVsbHBpcGUnICdzcCcJc3RyaW5nCShkZWZhdWx0ICI+IiwgInwgdGVlIiwgInwmIHRlZSIgb3IgIjI+JjF8IHRlZSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8CisJCQlmZWF0dXJlfQorCVN0cmluZyB0byBiZSB1c2VkIHRvIHB1dCB0aGUgb3V0cHV0IG9mIHRoZSAiOm1ha2UiIGNvbW1hbmQgaW4gdGhlCisJZXJyb3IgZmlsZS4gIFNlZSBhbHNvIHw6bWFrZV9tYWtlcHJnfC4JU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dAorCWluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCVRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgIiVzIiBpZiBuZWNlc3NhcnkKKwkodGhlIGZpbGUgbmFtZSBpcyBhcHBlbmRlZCBhdXRvbWF0aWNhbGx5IGlmIG5vICVzIGFwcGVhcnMgaW4gdGhlIHZhbHVlCisJb2YgdGhpcyBvcHRpb24pLgorCUZvciB0aGUgQW1pZ2EgYW5kIE1TLURPUyB0aGUgZGVmYXVsdCBpcyAiPiIuICBUaGUgb3V0cHV0IGlzIGRpcmVjdGx5CisJc2F2ZWQgaW4gYSBmaWxlIGFuZCBub3QgZWNob2VkIHRvIHRoZSBzY3JlZW4uCisJRm9yIFVuaXggdGhlIGRlZmF1bHQgaXQgInwgdGVlIi4gIFRoZSBzdGRvdXQgb2YgdGhlIGNvbXBpbGVyIGlzIHNhdmVkCisJaW4gYSBmaWxlIGFuZCBlY2hvZWQgdG8gdGhlIHNjcmVlbi4gIElmIHRoZSAnc2hlbGwnIG9wdGlvbiBpcyAiY3NoIiBvcgorCSJ0Y3NoIiBhZnRlciBpbml0aWFsaXphdGlvbnMsIHRoZSBkZWZhdWx0IGJlY29tZXMgInwmIHRlZSIuICBJZiB0aGUKKwknc2hlbGwnIG9wdGlvbiBpcyAic2giLCAia3NoIiwgInpzaCIgb3IgImJhc2giIHRoZSBkZWZhdWx0IGJlY29tZXMKKwkiMj4mMXwgdGVlIi4gIFRoaXMgbWVhbnMgdGhhdCBzdGRlcnIgaXMgYWxzbyBpbmNsdWRlZC4KKwlUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBvcHRpb24gaXMgZG9uZSBhZnRlciByZWFkaW5nIHRoZSAiLnZpbXJjIgorCWFuZCB0aGUgb3RoZXIgaW5pdGlhbGl6YXRpb25zLCBzbyB0aGF0IHdoZW4gdGhlICdzaGVsbCcgb3B0aW9uIGlzIHNldAorCXRoZXJlLCB0aGUgJ3NoZWxscGlwZScgb3B0aW9uIGNoYW5nZXMgYXV0b21hdGljYWxseSwgdW5sZXNzIGl0IHdhcworCWV4cGxpY2l0bHkgc2V0IGJlZm9yZS4KKwlXaGVuICdzaGVsbHBpcGUnIGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIG5vIHJlZGlyZWN0aW9uIG9mIHRoZQorCSI6bWFrZSIgb3V0cHV0IHdpbGwgYmUgZG9uZS4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB1c2UgYSAnbWFrZXByZycKKwl0aGF0IHdyaXRlcyB0byAnbWFrZWVmJyBieSBpdHNlbGYuICBJZiB5b3Ugd2FudCBubyBwaXBpbmcsIGJ1dCBkbworCXdhbnQgdG8gaW5jbHVkZSB0aGUgJ21ha2VlZicsIHNldCAnc2hlbGxwaXBlJyB0byBhIHNpbmdsZSBzcGFjZS4KKwlEb24ndCBmb3JnZXQgdG8gcHJlY2VkZSB0aGUgc3BhY2Ugd2l0aCBhIGJhY2tzbGFzaDogIjpzZXQgc3A9XCAiLgorCUluIHRoZSBmdXR1cmUgcGlwZXMgbWF5IGJlIHVzZWQgZm9yIGZpbHRlcmluZyBhbmQgdGhpcyBvcHRpb24gd2lsbAorCWJlY29tZSBvYnNvbGV0ZSAoYXQgbGVhc3QgZm9yIFVuaXgpLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidzaGVsbHF1b3RlJyogKidzaHEnKgorJ3NoZWxscXVvdGUnICdzaHEnCXN0cmluZwkoZGVmYXVsdDogIiI7IE1TLURPUyBhbmQgV2luMzIsIHdoZW4gJ3NoZWxsJworCQkJCQljb250YWlucyAic2giIHNvbWV3aGVyZTogIlwiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlRdW90aW5nIGNoYXJhY3RlcihzKSwgcHV0IGFyb3VuZCB0aGUgY29tbWFuZCBwYXNzZWQgdG8gdGhlIHNoZWxsLCBmb3IKKwl0aGUgIiEiIGFuZCAiOiEiIGNvbW1hbmRzLiAgVGhlIHJlZGlyZWN0aW9uIGlzIGtlcHQgb3V0c2lkZSBvZiB0aGUKKwlxdW90aW5nLiAgU2VlICdzaGVsbHhxdW90ZScgdG8gaW5jbHVkZSB0aGUgcmVkaXJlY3Rpb24uICBJdCdzCisJcHJvYmFibHkgbm90IHVzZWZ1bCB0byBzZXQgYm90aCBvcHRpb25zLgorCVRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuICBPbmx5IGtub3duIHRvIGJlIHVzZWZ1bCBmb3IKKwl0aGlyZC1wYXJ0eSBzaGVsbHMgb24gTVMtRE9TLWxpa2Ugc3lzdGVtcywgc3VjaCBhcyB0aGUgTUtTIEtvcm4gU2hlbGwKKwlvciBiYXNoLCB3aGVyZSBpdCBzaG91bGQgYmUgIlwiIi4gIFRoZSBkZWZhdWx0IGlzIGFkanVzdGVkIGFjY29yZGluZworCXRoZSB2YWx1ZSBvZiAnc2hlbGwnLCB0byByZWR1Y2UgdGhlIG5lZWQgdG8gc2V0IHRoaXMgb3B0aW9uIGJ5IHRoZQorCXVzZXIuICBTZWUgfGRvcy1zaGVsbHwuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3NoZWxscmVkaXInKiAqJ3NycicqCisnc2hlbGxyZWRpcicgJ3NycicJc3RyaW5nCShkZWZhdWx0ICI+IiwgIj4mIiBvciAiPiVzIDI+JjEiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVN0cmluZyB0byBiZSB1c2VkIHRvIHB1dCB0aGUgb3V0cHV0IG9mIGEgZmlsdGVyIGNvbW1hbmQgaW4gYSB0ZW1wb3JhcnkKKwlmaWxlLiAgU2VlIGFsc28gfDohfC4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcworCWFuZCBiYWNrc2xhc2hlcy4KKwlUaGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY2FuIGJlIHJlcHJlc2VudGVkIGJ5ICIlcyIgaWYgbmVjZXNzYXJ5CisJKHRoZSBmaWxlIG5hbWUgaXMgYXBwZW5kZWQgYXV0b21hdGljYWxseSBpZiBubyAlcyBhcHBlYXJzIGluIHRoZSB2YWx1ZQorCW9mIHRoaXMgb3B0aW9uKS4KKwlUaGUgZGVmYXVsdCBpcyAiPiIuICBGb3IgVW5peCwgaWYgdGhlICdzaGVsbCcgb3B0aW9uIGlzICJjc2giLCAidGNzaCIKKwlvciAienNoIiBkdXJpbmcgaW5pdGlhbGl6YXRpb25zLCB0aGUgZGVmYXVsdCBiZWNvbWVzICI+JiIuICBJZiB0aGUKKwknc2hlbGwnIG9wdGlvbiBpcyAic2giLCAia3NoIiBvciAiYmFzaCIgdGhlIGRlZmF1bHQgYmVjb21lcworCSI+JXMgMj4mMSIuICBUaGlzIG1lYW5zIHRoYXQgc3RkZXJyIGlzIGFsc28gaW5jbHVkZWQuCisJRm9yIFdpbjMyLCB0aGUgVW5peCBjaGVja3MgYXJlIGRvbmUgYW5kIGFkZGl0aW9uYWxseSAiY21kIiBpcyBjaGVja2VkCisJZm9yLCB3aGljaCBtYWtlcyB0aGUgZGVmYXVsdCAiPiVzIDI+JjEiLiAgQWxzbywgdGhlIHNhbWUgbmFtZXMgd2l0aAorCSIuZXhlIiBhcHBlbmRlZCBhcmUgY2hlY2tlZCBmb3IuCisJVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgb3B0aW9uIGlzIGRvbmUgYWZ0ZXIgcmVhZGluZyB0aGUgIi52aW1yYyIKKwlhbmQgdGhlIG90aGVyIGluaXRpYWxpemF0aW9ucywgc28gdGhhdCB3aGVuIHRoZSAnc2hlbGwnIG9wdGlvbiBpcyBzZXQKKwl0aGVyZSwgdGhlICdzaGVsbHJlZGlyJyBvcHRpb24gY2hhbmdlcyBhdXRvbWF0aWNhbGx5IHVubGVzcyBpdCB3YXMKKwlleHBsaWNpdGx5IHNldCBiZWZvcmUuCisJSW4gdGhlIGZ1dHVyZSBwaXBlcyBtYXkgYmUgdXNlZCBmb3IgZmlsdGVyaW5nIGFuZCB0aGlzIG9wdGlvbiB3aWxsCisJYmVjb21lIG9ic29sZXRlIChhdCBsZWFzdCBmb3IgVW5peCkuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkqJ3NoZWxsc2xhc2gnKiAqJ3NzbCcqIConbm9zaGVsbHNsYXNoJyogKidub3NzbCcqCisnc2hlbGxzbGFzaCcgJ3NzbCcJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9IHtvbmx5IGZvciBNU0RPUywgTVMtV2luZG93cyBhbmQgT1MvMn0KKwlXaGVuIHNldCwgYSBmb3J3YXJkIHNsYXNoIGlzIHVzZWQgd2hlbiBleHBhbmRpbmcgZmlsZSBuYW1lcy4gIFRoaXMgaXMKKwl1c2VmdWwgd2hlbiBhIFVuaXgtbGlrZSBzaGVsbCBpcyB1c2VkIGluc3RlYWQgb2YgY29tbWFuZC5jb20gb3IKKwljbWQuZXhlLiAgQmFja3dhcmQgc2xhc2hlcyBjYW4gc3RpbGwgYmUgdHlwZWQsIGJ1dCB0aGV5IGFyZSBjaGFuZ2VkIHRvCisJZm9yd2FyZCBzbGFzaGVzIGJ5IFZpbS4KKwlOb3RlIHRoYXQgc2V0dGluZyBvciByZXNldHRpbmcgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBmb3Igc29tZQorCWV4aXN0aW5nIGZpbGUgbmFtZXMsIHRodXMgdGhpcyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBvcGVuaW5nCisJYW55IGZpbGUgZm9yIGJlc3QgcmVzdWx0cy4gIFRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisJJ3NoZWxsc2xhc2gnIG9ubHkgd29ya3Mgd2hlbiBhIGJhY2tzbGFzaCBjYW4gYmUgdXNlZCBhcyBhIHBhdGgKKwlzZXBhcmF0b3IuICBUbyB0ZXN0IGlmIHRoaXMgaXMgc28gdXNlOiA+CisJCWlmIGV4aXN0cygnK3NoZWxsc2xhc2gnKQorPAorCQkJCQkJKidzaGVsbHR5cGUnKiAqJ3N0JyoKKydzaGVsbHR5cGUnICdzdCcJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9IHtvbmx5IGZvciB0aGUgQW1pZ2F9CisJT24gdGhlIEFtaWdhIHRoaXMgb3B0aW9uIGluZmx1ZW5jZXMgdGhlIHdheSBob3cgdGhlIGNvbW1hbmRzIHdvcmsKKwl3aGljaCB1c2UgYSBzaGVsbC4KKwkwIGFuZCAxOiBhbHdheXMgdXNlIHRoZSBzaGVsbAorCTIgYW5kIDM6IHVzZSB0aGUgc2hlbGwgb25seSB0byBmaWx0ZXIgbGluZXMKKwk0IGFuZCA1OiB1c2Ugc2hlbGwgb25seSBmb3IgJzpzaCcgY29tbWFuZAorCVdoZW4gbm90IHVzaW5nIHRoZSBzaGVsbCwgdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgZGlyZWN0bHkuCisKKwkwIGFuZCAyOiB1c2UgInNoZWxsICdzaGVsbGNtZGZsYWcnIGNtZCIgdG8gc3RhcnQgZXh0ZXJuYWwgY29tbWFuZHMKKwkxIGFuZCAzOiB1c2UgInNoZWxsIGNtZCIgdG8gc3RhcnQgZXh0ZXJuYWwgY29tbWFuZHMKKworCQkJCQkJKidzaGVsbHhxdW90ZScqIConc3hxJyoKKydzaGVsbHhxdW90ZScgJ3N4cScJc3RyaW5nCShkZWZhdWx0OiAiIjsKKwkJCQkJZm9yIFdpbjMyLCB3aGVuICdzaGVsbCcgY29udGFpbnMgInNoIgorCQkJCQlzb21ld2hlcmU6ICJcIiIKKwkJCQkJZm9yIFVuaXgsIHdoZW4gdXNpbmcgc3lzdGVtKCk6ICJcIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJUXVvdGluZyBjaGFyYWN0ZXIocyksIHB1dCBhcm91bmQgdGhlIGNvbW1hbmQgcGFzc2VkIHRvIHRoZSBzaGVsbCwgZm9yCisJdGhlICIhIiBhbmQgIjohIiBjb21tYW5kcy4gIEluY2x1ZGVzIHRoZSByZWRpcmVjdGlvbi4gIFNlZQorCSdzaGVsbHF1b3RlJyB0byBleGNsdWRlIHRoZSByZWRpcmVjdGlvbi4gIEl0J3MgcHJvYmFibHkgbm90IHVzZWZ1bAorCXRvIHNldCBib3RoIG9wdGlvbnMuCisJVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4gIEtub3duIHRvIGJlIHVzZWZ1bCBmb3IKKwl0aGlyZC1wYXJ0eSBzaGVsbHMgd2hlbiB1c2luZyB0aGUgV2luMzIgdmVyc2lvbiwgc3VjaCBhcyB0aGUgTUtTIEtvcm4KKwlTaGVsbCBvciBiYXNoLCB3aGVyZSBpdCBzaG91bGQgYmUgIlwiIi4gIFRoZSBkZWZhdWx0IGlzIGFkanVzdGVkCisJYWNjb3JkaW5nIHRoZSB2YWx1ZSBvZiAnc2hlbGwnLCB0byByZWR1Y2UgdGhlIG5lZWQgdG8gc2V0IHRoaXMgb3B0aW9uCisJYnkgdGhlIHVzZXIuICBTZWUgfGRvcy1zaGVsbHwuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkqJ3NoaWZ0cm91bmQnKiAqJ3NyJyogKidub3NoaWZ0cm91bmQnKiAqJ25vc3InKgorJ3NoaWZ0cm91bmQnICdzcicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJUm91bmQgaW5kZW50IHRvIG11bHRpcGxlIG9mICdzaGlmdHdpZHRoJy4gIEFwcGxpZXMgdG8gPiBhbmQgPAorCWNvbW1hbmRzLiAgQ1RSTC1UIGFuZCBDVFJMLUQgaW4gSW5zZXJ0IG1vZGUgYWx3YXlzIHJvdW5kIHRoZSBpbmRlbnQgdG8KKwlhIG11bHRpcGxlIG9mICdzaGlmdHdpZHRoJyAodGhpcyBpcyBWaSBjb21wYXRpYmxlKS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonc2hpZnR3aWR0aCcqIConc3cnKgorJ3NoaWZ0d2lkdGgnICdzdycJbnVtYmVyCShkZWZhdWx0IDgpCisJCQlsb2NhbCB0byBidWZmZXIKKwlOdW1iZXIgb2Ygc3BhY2VzIHRvIHVzZSBmb3IgZWFjaCBzdGVwIG9mIChhdXRvKWluZGVudC4JVXNlZCBmb3IKKwl8J2NpbmRlbnQnfCwgfD4+fCwgfDw8fCwgZXRjLgorCisJCQkJCQkqJ3Nob3J0bWVzcycqIConc2htJyoKKydzaG9ydG1lc3MnICdzaG0nCXN0cmluZwkoVmltIGRlZmF1bHQgImZpbG54dFRvTyIsIFZpIGRlZmF1bHQ6ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGhlbHBzIHRvIGF2b2lkIGFsbCB0aGUgfGhpdC1lbnRlcnwgcHJvbXB0cyBjYXVzZWQgYnkgZmlsZQorCW1lc3NhZ2VzLCBmb3IgZXhhbXBsZSAgd2l0aCBDVFJMLUcsIGFuZCB0byBhdm9pZCBzb21lIG90aGVyIG1lc3NhZ2VzLgorCUl0IGlzIGEgbGlzdCBvZiBmbGFnczoKKwkgZmxhZwltZWFuaW5nIHdoZW4gcHJlc2VudAl+CisJICBmCXVzZSAiKDMgb2YgNSkiIGluc3RlYWQgb2YgIihmaWxlIDMgb2YgNSkiCisJICBpCXVzZSAiW25vZW9sXSIgaW5zdGVhZCBvZiAiW0luY29tcGxldGUgbGFzdCBsaW5lXSIKKwkgIGwJdXNlICI5OTlMLCA4ODhDIiBpbnN0ZWFkIG9mICI5OTkgbGluZXMsIDg4OCBjaGFyYWN0ZXJzIgorCSAgbQl1c2UgIlsrXSIgaW5zdGVhZCBvZiAiW01vZGlmaWVkXSIKKwkgIG4JdXNlICJbTmV3XSIgaW5zdGVhZCBvZiAiW05ldyBGaWxlXSIKKwkgIHIJdXNlICJbUk9dIiBpbnN0ZWFkIG9mICJbcmVhZG9ubHldIgorCSAgdwl1c2UgIlt3XSIgaW5zdGVhZCBvZiAid3JpdHRlbiIgZm9yIGZpbGUgd3JpdGUgbWVzc2FnZQorCQlhbmQgIlthXSIgaW5zdGVhZCBvZiAiYXBwZW5kZWQiIGZvciAnOncgPj4gZmlsZScgY29tbWFuZAorCSAgeAl1c2UgIltkb3NdIiBpbnN0ZWFkIG9mICJbZG9zIGZvcm1hdF0iLCAiW3VuaXhdIiBpbnN0ZWFkIG9mCisJCSJbdW5peCBmb3JtYXRdIiBhbmQgIlttYWNdIiBpbnN0ZWFkIG9mICJbbWFjIGZvcm1hdF0iLgorCSAgYQlhbGwgb2YgdGhlIGFib3ZlIGFiYnJldmlhdGlvbnMKKworCSAgbwlvdmVyd3JpdGUgbWVzc2FnZSBmb3Igd3JpdGluZyBhIGZpbGUgd2l0aCBzdWJzZXF1ZW50IG1lc3NhZ2UKKwkJZm9yIHJlYWRpbmcgYSBmaWxlICh1c2VmdWwgZm9yICI6d24iIG9yIHdoZW4gJ2F1dG93cml0ZScgb24pCisJICBPCW1lc3NhZ2UgZm9yIHJlYWRpbmcgYSBmaWxlIG92ZXJ3cml0ZXMgYW55IHByZXZpb3VzIG1lc3NhZ2UuCisJCUFsc28gZm9yIHF1aWNrZml4IG1lc3NhZ2UgKGUuZy4sICI6Y24iKS4KKwkgIHMJZG9uJ3QgZ2l2ZSAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIiBvciAic2VhcmNoCisJCWhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIiBtZXNzYWdlcworCSAgdAl0cnVuY2F0ZSBmaWxlIG1lc3NhZ2UgYXQgdGhlIHN0YXJ0IGlmIGl0IGlzIHRvbyBsb25nIHRvIGZpdAorCQlvbiB0aGUgY29tbWFuZC1saW5lLCAiPCIgd2lsbCBhcHBlYXIgaW4gdGhlIGxlZnQgbW9zdCBjb2x1bW4uCisJCUlnbm9yZWQgaW4gRXggbW9kZS4KKwkgIFQJdHJ1bmNhdGUgb3RoZXIgbWVzc2FnZXMgaW4gdGhlIG1pZGRsZSBpZiB0aGV5IGFyZSB0b28gbG9uZyB0bworCQlmaXQgb24gdGhlIGNvbW1hbmQgbGluZS4gIi4uLiIgd2lsbCBhcHBlYXIgaW4gdGhlIG1pZGRsZS4KKwkJSWdub3JlZCBpbiBFeCBtb2RlLgorCSAgVwlkb24ndCBnaXZlICJ3cml0dGVuIiBvciAiW3ddIiB3aGVuIHdyaXRpbmcgYSBmaWxlCisJICBBCWRvbid0IGdpdmUgdGhlICJBVFRFTlRJT04iIG1lc3NhZ2Ugd2hlbiBhbiBleGlzdGluZyBzd2FwIGZpbGUKKwkJaXMgZm91bmQuCisJICBJCWRvbid0IGdpdmUgdGhlIGludHJvIG1lc3NhZ2Ugd2hlbiBzdGFydGluZyBWaW0gfDppbnRyb3wuCisKKwlUaGlzIGdpdmVzIHlvdSB0aGUgb3Bwb3J0dW5pdHkgdG8gYXZvaWQgdGhhdCBhIGNoYW5nZSBiZXR3ZWVuIGJ1ZmZlcnMKKwlyZXF1aXJlcyB5b3UgdG8gaGl0IDxFbnRlcj4sIGJ1dCBzdGlsbCBnaXZlcyBhcyB1c2VmdWwgYSBtZXNzYWdlIGFzCisJcG9zc2libGUgZm9yIHRoZSBzcGFjZSBhdmFpbGFibGUuICBUbyBnZXQgdGhlIHdob2xlIG1lc3NhZ2UgdGhhdCB5b3UKKwl3b3VsZCBoYXZlIGdvdCB3aXRoICdzaG0nIGVtcHR5LCB1c2UgIjpmaWxlISIKKwlVc2VmdWwgdmFsdWVzOgorCSAgICBzaG09CU5vIGFiYnJldmlhdGlvbiBvZiBtZXNzYWdlLgorCSAgICBzaG09YQlBYmJyZXZpYXRpb24sIGJ1dCBubyBsb3NzIG9mIGluZm9ybWF0aW9uLgorCSAgICBzaG09YXQJQWJicmV2aWF0aW9uLCBhbmQgdHJ1bmNhdGUgbWVzc2FnZSB3aGVuIG5lY2Vzc2FyeS4KKworCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJIConc2hvcnRuYW1lJyogKidzbicqIConbm9zaG9ydG5hbWUnKiAqJ25vc24nKgorJ3Nob3J0bmFtZScgJ3NuJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaSwgbm90IGluIE1TLURPUyB2ZXJzaW9uc30KKwlGaWxlbmFtZXMgYXJlIGFzc3VtZWQgdG8gYmUgOCBjaGFyYWN0ZXJzIHBsdXMgb25lIGV4dGVuc2lvbiBvZiAzCisJY2hhcmFjdGVycy4gIE11bHRpcGxlIGRvdHMgaW4gZmlsZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQuICBXaGVuIHRoaXMKKwlvcHRpb24gaXMgb24sIGRvdHMgaW4gZmlsZSBuYW1lcyBhcmUgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3JlcyB3aGVuCisJYWRkaW5nIGFuIGV4dGVuc2lvbiAoIi5+IiBvciAiLnN3cCIpLiAgVGhpcyBvcHRpb24gaXMgbm90IGF2YWlsYWJsZQorCWZvciBNUy1ET1MsIGJlY2F1c2UgdGhlbiBpdCB3b3VsZCBhbHdheXMgYmUgb24uICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwKKwl3aGVuIGVkaXRpbmcgZmlsZXMgb24gYW4gTVMtRE9TIGNvbXBhdGlibGUgZmlsZXN5c3RlbSwgZS5nLiwgbWVzc3lkb3MKKwlvciBjcm9zc2Rvcy4gIFdoZW4gcnVubmluZyB0aGUgV2luMzIgR1VJIHZlcnNpb24gdW5kZXIgV2luMzJzLCB0aGlzCisJb3B0aW9uIGlzIGFsd2F5cyBvbiBieSBkZWZhdWx0LgorCisJCQkJCQkqJ3Nob3dicmVhaycqIConc2JyJyogKkU1OTUqCisnc2hvd2JyZWFrJyAnc2JyJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICB8K2xpbmVicmVha3wKKwkJCWZlYXR1cmV9CisJU3RyaW5nIHRvIHB1dCBhdCB0aGUgc3RhcnQgb2YgbGluZXMgdGhhdCBoYXZlIGJlZW4gd3JhcHBlZC4gIFVzZWZ1bAorCXZhbHVlcyBhcmUgIj4gIiBvciAiKysrICIuCisJT25seSBwcmludGFibGUgc2luZ2xlLWNlbGwgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCwgZXhjbHVkaW5nIDxUYWI+IGFuZAorCWNvbW1hIChpbiBhIGZ1dHVyZSB2ZXJzaW9uIHRoZSBjb21tYSBtaWdodCBiZSB1c2VkIHRvIHNlcGFyYXRlIHRoZQorCXBhcnQgdGhhdCBpcyBzaG93biBhdCB0aGUgZW5kIGFuZCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lKS4KKwlUaGUgY2hhcmFjdGVycyBhcmUgaGlnaGxpZ2h0ZWQgYWNjb3JkaW5nIHRvIHRoZSAnQCcgZmxhZyBpbgorCSdoaWdobGlnaHQnLgorCU5vdGUgdGhhdCB0YWJzIGFmdGVyIHRoZSBzaG93YnJlYWsgd2lsbCBiZSBkaXNwbGF5ZWQgZGlmZmVyZW50bHkuCisJSWYgeW91IHdhbnQgdGhlICdzaG93YnJlYWsnIHRvIGFwcGVhciBpbiBiZXR3ZWVuIGxpbmUgbnVtYmVycywgYWRkIHRoZQorCSJuIiBmbGFnIHRvICdjcG9wdGlvbnMnLgorCisJCQkJICAgICAqJ3Nob3djbWQnKiAqJ3NjJyogKidub3Nob3djbWQnKiAqJ25vc2MnKgorJ3Nob3djbWQnICdzYycJCWJvb2xlYW4JKFZpbSBkZWZhdWx0OiBvbiwgb2ZmIGZvciBVbml4LCBWaSBkZWZhdWx0OgorCQkJCSBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2NtZGxpbmVfaW5mb3wgZmVhdHVyZX0KKwlTaG93IChwYXJ0aWFsKSBjb21tYW5kIGluIHN0YXR1cyBsaW5lLglTZXQgdGhpcyBvcHRpb24gb2ZmIGlmIHlvdXIKKwl0ZXJtaW5hbCBpcyBzbG93LgorCUluIFZpc3VhbCBtb2RlIHRoZSBzaXplIG9mIHRoZSBzZWxlY3RlZCBhcmVhIGlzIHNob3duOgorCS0gV2hlbiBzZWxlY3RpbmcgY2hhcmFjdGVycyB3aXRoaW4gYSBsaW5lLCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisJLSBXaGVuIHNlbGVjdGluZyBtb3JlIHRoYW4gb25lIGxpbmUsIHRoZSBudW1iZXIgb2YgbGluZXMuCisJLSBXaGVuIHNlbGVjdGluZyBhIGJsb2NrLCB0aGUgc2l6ZSBpbiBzY3JlZW4gY2hhcmFjdGVyczogbGluZXN4Y29sdW1ucy4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJKidzaG93ZnVsbHRhZycqIConc2Z0JyogKidub3Nob3dmdWxsdGFnJyogKidub3NmdCcqCisnc2hvd2Z1bGx0YWcnICdzZnQnCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gY29tcGxldGluZyBhIHdvcmQgaW4gaW5zZXJ0IG1vZGUgKHNlZSB8aW5zLWNvbXBsZXRpb258KSBmcm9tIHRoZQorCXRhZ3MgZmlsZSwgc2hvdyBib3RoIHRoZSB0YWcgbmFtZSBhbmQgYSB0aWRpZWQtdXAgZm9ybSBvZiB0aGUgc2VhcmNoCisJcGF0dGVybiAoaWYgdGhlcmUgaXMgb25lKSBhcyBwb3NzaWJsZSBtYXRjaGVzLglUaHVzLCBpZiB5b3UgaGF2ZQorCW1hdGNoZWQgYSBDIGZ1bmN0aW9uLCB5b3UgY2FuIHNlZSBhIHRlbXBsYXRlIGZvciB3aGF0IGFyZ3VtZW50cyBhcmUKKwlyZXF1aXJlZCAoY29kaW5nIHN0eWxlIHBlcm1pdHRpbmcpLgorCisJCQkJIConc2hvd21hdGNoJyogKidzbScqIConbm9zaG93bWF0Y2gnKiAqJ25vc20nKgorJ3Nob3dtYXRjaCcgJ3NtJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCVdoZW4gYSBicmFja2V0IGlzIGluc2VydGVkLCBicmllZmx5IGp1bXAgdG8gdGhlIG1hdGNoaW5nIG9uZS4gIFRoZQorCWp1bXAgaXMgb25seSBkb25lIGlmIHRoZSBtYXRjaCBjYW4gYmUgc2VlbiBvbiB0aGUgc2NyZWVuLiAgVGhlIHRpbWUgdG8KKwlzaG93IHRoZSBtYXRjaCBjYW4gYmUgc2V0IHdpdGggJ21hdGNodGltZScuCisJQSBCZWVwIGlzIGdpdmVuIGlmIHRoZXJlIGlzIG5vIG1hdGNoIChubyBtYXR0ZXIgaWYgdGhlIG1hdGNoIGNhbiBiZQorCXNlZW4gb3Igbm90KS4gIFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHNldC4KKwlXaGVuIHRoZSAnbScgZmxhZyBpcyBub3QgaW5jbHVkZWQgaW4gJ2Nwb3B0aW9ucycsIHR5cGluZyBhIGNoYXJhY3RlcgorCXdpbGwgaW1tZWRpYXRlbHkgbW92ZSB0aGUgY3Vyc29yIGJhY2sgdG8gd2hlcmUgaXQgYmVsb25ncy4KKwlTZWUgdGhlICJzbSIgZmllbGQgaW4gJ2d1aWN1cnNvcicgZm9yIHNldHRpbmcgdGhlIGN1cnNvciBzaGFwZSBhbmQKKwlibGlua2luZyB3aGVuIHNob3dpbmcgdGhlIG1hdGNoLgorCVRoZSAnbWF0Y2hwYWlycycgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNoYXJhY3RlcnMgdG8gc2hvdworCW1hdGNoZXMgZm9yLiAgJ3JpZ2h0bGVmdCcgYW5kICdyZXZpbnMnIGFyZSB1c2VkIHRvIGxvb2sgZm9yIG9wcG9zaXRlCisJbWF0Y2hlcy4KKwlOb3RlOiBGb3IgdGhlIHVzZSBvZiB0aGUgc2hvcnQgZm9ybSBwYXJlbnRhbCBndWlkYW5jZSBpcyBhZHZpc2VkLgorCisJCQkJIConc2hvd21vZGUnKiAqJ3NtZCcqIConbm9zaG93bW9kZScqIConbm9zbWQnKgorJ3Nob3dtb2RlJyAnc21kJwlib29sZWFuCShWaW0gZGVmYXVsdDogb24sIFZpIGRlZmF1bHQ6IG9mZikKKwkJCWdsb2JhbAorCUlmIGluIEluc2VydCwgUmVwbGFjZSBvciBWaXN1YWwgbW9kZSBwdXQgYSBtZXNzYWdlIG9uIHRoZSBsYXN0IGxpbmUuCisJVXNlIHRoZSAnTScgZmxhZyBpbiAnaGlnaGxpZ2h0JyB0byBzZXQgdGhlIHR5cGUgb2YgaGlnaGxpZ2h0aW5nIGZvcgorCXRoaXMgbWVzc2FnZS4KKwlXaGVuIHxYSU18IG1heSBiZSB1c2VkIHRoZSBtZXNzYWdlIHdpbGwgaW5jbHVkZSAiWElNIi4JQnV0IHRoaXMKKwlkb2Vzbid0IG1lYW4gWElNIGlzIHJlYWxseSBhY3RpdmUsIGVzcGVjaWFsbHkgd2hlbiAnaW1hY3RpdmF0ZWtleScgaXMKKwlub3Qgc2V0LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ3NpZGVzY3JvbGwnKiAqJ3NzJyoKKydzaWRlc2Nyb2xsJyAnc3MnCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSBtaW5pbWFsIG51bWJlciBvZiBjb2x1bW5zIHRvIHNjcm9sbCBob3Jpem9udGFsbHkuICBVc2VkIG9ubHkgd2hlbgorCXRoZSAnd3JhcCcgb3B0aW9uIGlzIG9mZiBhbmQgdGhlIGN1cnNvciBpcyBtb3ZlZCBvZmYgb2YgdGhlIHNjcmVlbi4KKwlXaGVuIGl0IGlzIHplcm8gdGhlIGN1cnNvciB3aWxsIGJlIHB1dCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4uCisJV2hlbiB1c2luZyBhIHNsb3cgdGVybWluYWwgc2V0IGl0IHRvIGEgbGFyZ2UgbnVtYmVyIG9yIDAuICBXaGVuIHVzaW5nCisJYSBmYXN0IHRlcm1pbmFsIHVzZSBhIHNtYWxsIG51bWJlciBvciAxLiAgTm90IHVzZWQgZm9yICJ6aCIgYW5kICJ6bCIKKwljb21tYW5kcy4KKworCQkJCQkJKidzaWRlc2Nyb2xsb2ZmJyogKidzaXNvJyoKKydzaWRlc2Nyb2xsb2ZmJyAnc2lzbycJbnVtYmVyIChkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIG1pbmltYWwgbnVtYmVyIG9mIHNjcmVlbiBjb2x1bW5zIHRvIGtlZXAgdG8gdGhlIGxlZnQgYW5kIHRvIHRoZQorCXJpZ2h0IG9mIHRoZSBjdXJzb3IgaWYgJ25vd3JhcCcgaXMgc2V0LiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGEgdmFsdWUKKwlncmVhdGVyIHRoYW4gMCB3aGlsZSBoYXZpbmcgfCdzaWRlc2Nyb2xsJ3wgYWxzbyBhdCBhIG5vbi16ZXJvIHZhbHVlCisJbWFrZXMgc29tZSBjb250ZXh0IHZpc2libGUgaW4gdGhlIGxpbmUgeW91IGFyZSBzY3JvbGxpbmcgaW4KKwlob3Jpem9udGFsbHkgKGV4Y2VwdCBhdCB0aGUgZW5kIGFuZCBiZWdpbm5pbmcgb2YgdGhlIGxpbmUpLiAgU2V0dGluZworCXRoaXMgb3B0aW9uIHRvIGEgbGFyZ2UgdmFsdWUgKGxpa2UgOTk5KSBoYXMgdGhlIGVmZmVjdCBvZiBrZWVwaW5nIHRoZQorCWN1cnNvciBob3Jpem9udGFsbHkgY2VudGVyZWQgaW4gdGhlIHdpbmRvdywgYXMgbG9uZyBhcyBvbmUgZG9lcyBub3QKKwljb21lIHRvbyBjbG9zZSB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgbGluZS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gMCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwlFeGFtcGxlOiBUcnkgdGhpcyB0b2dldGhlciB3aXRoICdzaWRlc2Nyb2xsJyBhbmQgJ2xpc3RjaGFycycgYXMKKwkJIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB0byBuZXZlciBhbGxvdyB0aGUgY3Vyc29yIHRvIG1vdmUKKwkJIG9udG8gdGhlICJleHRlbmRzIiBjaGFyYWN0ZXI6CisKKwkJIDpzZXQgbm93cmFwIHNpZGVzY3JvbGw9MSBsaXN0Y2hhcnM9ZXh0ZW5kczo+LHByZWNlZGVzOjwKKwkJIDpzZXQgc2lkZXNjcm9sbG9mZj0xCisKKworCQkJKidzbWFydGNhc2UnKiAqJ3NjcycqIConbm9zbWFydGNhc2UnKiAqJ25vc2NzJyoKKydzbWFydGNhc2UnICdzY3MnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU92ZXJyaWRlIHRoZSAnaWdub3JlY2FzZScgb3B0aW9uIGlmIHRoZSBzZWFyY2ggcGF0dGVybiBjb250YWlucyB1cHBlcgorCWNhc2UgY2hhcmFjdGVycy4gIE9ubHkgdXNlZCB3aGVuIHRoZSBzZWFyY2ggcGF0dGVybiBpcyB0eXBlZCBhbmQKKwknaWdub3JlY2FzZScgb3B0aW9uIGlzIG9uLiAgVXNlZCBmb3IgdGhlIGNvbW1hbmRzICIvIiwgIj8iLCAibiIsICJOIiwKKwkiOmciIGFuZCAiOnMiLglOb3QgdXNlZCBmb3IgIioiLCAiIyIsICJnZCIsIHRhZyBzZWFyY2gsIGV0Yy4uCUFmdGVyCisJIioiIGFuZCAiIyIgeW91IGNhbiBtYWtlICdzbWFydGNhc2UnIHVzZWQgYnkgZG9pbmcgYSAiLyIgY29tbWFuZCwKKwlyZWNhbGxpbmcgdGhlIHNlYXJjaCBwYXR0ZXJuIGZyb20gaGlzdG9yeSBhbmQgaGl0dGluZyA8RW50ZXI+LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJICAgICAqJ3NtYXJ0aW5kZW50JyogKidzaScqIConbm9zbWFydGluZGVudCcqIConbm9zaScqCisnc21hcnRpbmRlbnQnICdzaScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K3NtYXJ0aW5kZW50fCBmZWF0dXJlfQorCURvIHNtYXJ0IGF1dG9pbmRlbnRpbmcgd2hlbiBzdGFydGluZyBhIG5ldyBsaW5lLiAgV29ya3MgZm9yIEMtbGlrZQorCXByb2dyYW1zLCBidXQgY2FuIGFsc28gYmUgdXNlZCBmb3Igb3RoZXIgbGFuZ3VhZ2VzLiAgJ2NpbmRlbnQnIGRvZXMKKwlzb21ldGhpbmcgbGlrZSB0aGlzLCB3b3JrcyBiZXR0ZXIgaW4gbW9zdCBjYXNlcywgYnV0IGlzIG1vcmUgc3RyaWN0LAorCXNlZSB8Qy1pbmRlbnRpbmd8LiAgV2hlbiAnY2luZGVudCcgaXMgb24sIHNldHRpbmcgJ3NpJyBoYXMgbm8gZWZmZWN0LgorCSdpbmRlbnRleHByJyBpcyBhIG1vcmUgYWR2YW5jZWQgYWx0ZXJuYXRpdmUuCisJTm9ybWFsbHkgJ2F1dG9pbmRlbnQnIHNob3VsZCBhbHNvIGJlIG9uIHdoZW4gdXNpbmcgJ3NtYXJ0aW5kZW50Jy4KKwlBbiBpbmRlbnQgaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZDoKKwktIEFmdGVyIGEgbGluZSBlbmRpbmcgaW4gJ3snLgorCS0gQWZ0ZXIgYSBsaW5lIHN0YXJ0aW5nIHdpdGggYSBrZXl3b3JkIGZyb20gJ2NpbndvcmRzJy4KKwktIEJlZm9yZSBhIGxpbmUgc3RhcnRpbmcgd2l0aCAnfScgKG9ubHkgd2l0aCB0aGUgIk8iIGNvbW1hbmQpLgorCVdoZW4gdHlwaW5nICd9JyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEgbmV3IGxpbmUsIHRoYXQgbGluZSBpcworCWdpdmVuIHRoZSBzYW1lIGluZGVudCBhcyB0aGUgbWF0Y2hpbmcgJ3snLgorCVdoZW4gdHlwaW5nICcjJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEgbmV3IGxpbmUsIHRoZSBpbmRlbnQgZm9yCisJdGhhdCBsaW5lIGlzIHJlbW92ZWQsIHRoZSAnIycgaXMgcHV0IGluIHRoZSBmaXJzdCBjb2x1bW4uICBUaGUgaW5kZW50CisJaXMgcmVzdG9yZWQgZm9yIHRoZSBuZXh0IGxpbmUuCUlmIHlvdSBkb24ndCB3YW50IHRoaXMsIHVzZSB0aGlzCisJbWFwcGluZzogIjppbm9yZW1hcCAjIFheSCMiLCB3aGVyZSBeSCBpcyBlbnRlcmVkIHdpdGggQ1RSTC1WIENUUkwtSC4KKwlXaGVuIHVzaW5nIHRoZSAiPj4iIGNvbW1hbmQsIGxpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIGFyZSBub3Qgc2hpZnRlZAorCXJpZ2h0LgorCU5PVEU6ICdzbWFydGluZGVudCcgaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LglXaGVuICdwYXN0ZScKKwlpcyBzZXQgc21hcnQgaW5kZW50aW5nIGlzIGRpc2FibGVkLgorCisJCQkJIConc21hcnR0YWInKiAqJ3N0YScqIConbm9zbWFydHRhYicqIConbm9zdGEnKgorJ3NtYXJ0dGFiJyAnc3RhJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uLCBhIDxUYWI+IGluIGZyb250IG9mIGEgbGluZSBpbnNlcnRzIGJsYW5rcyBhY2NvcmRpbmcgdG8KKwknc2hpZnR3aWR0aCcuICAndGFic3RvcCcgaXMgdXNlZCBpbiBvdGhlciBwbGFjZXMuICBBIDxCUz4gd2lsbCBkZWxldGUKKwlhICdzaGlmdHdpZHRoJyB3b3J0aCBvZiBzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUuCisJV2hlbiBvZmYgYSA8VGFiPiBhbHdheXMgaW5zZXJ0cyBibGFua3MgYWNjb3JkaW5nIHRvICd0YWJzdG9wJy4KKwknc2hpZnR3aWR0aCcgaXMgb25seSB1c2VkIGZvciBzaGlmdGluZyB0ZXh0IGxlZnQgb3IgcmlnaHQKKwl8c2hpZnQtbGVmdC1yaWdodHwuCisJV2hhdCBnZXRzIGluc2VydGVkIChhIFRhYiBvciBzcGFjZXMpIGRlcGVuZHMgb24gdGhlICdleHBhbmR0YWInCisJb3B0aW9uLiAgQWxzbyBzZWUgfGlucy1leHBhbmR0YWJ8LiAgV2hlbiAnZXhwYW5kdGFiJyBpcyBub3Qgc2V0LCB0aGUKKwludW1iZXIgb2Ygc3BhY2VzIG1pbmltaXplZCBieSB1c2luZyA8VGFiPnMuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCSonc29mdHRhYnN0b3AnKiAqJ3N0cycqCisnc29mdHRhYnN0b3AnICdzdHMnCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCU51bWJlciBvZiBzcGFjZXMgdGhhdCBhIDxUYWI+IGNvdW50cyBmb3Igd2hpbGUgcGVyZm9ybWluZyBlZGl0aW5nCisJb3BlcmF0aW9ucywgbGlrZSBpbnNlcnRpbmcgYSA8VGFiPiBvciB1c2luZyA8QlM+LiAgSXQgImZlZWxzIiBsaWtlCisJPFRhYj5zIGFyZSBiZWluZyBpbnNlcnRlZCwgd2hpbGUgaW4gZmFjdCBhIG1peCBvZiBzcGFjZXMgYW5kIDxUYWI+cyBpcworCXVzZWQuICBUaGlzIGlzIHVzZWZ1bCB0byBrZWVwIHRoZSAndHMnIHNldHRpbmcgYXQgaXRzIHN0YW5kYXJkIHZhbHVlCisJb2YgOCwgd2hpbGUgYmVpbmcgYWJsZSB0byBlZGl0IGxpa2UgaXQgaXMgc2V0IHRvICdzdHMnLiAgSG93ZXZlciwKKwljb21tYW5kcyBsaWtlICJ4IiBzdGlsbCB3b3JrIG9uIHRoZSBhY3R1YWwgY2hhcmFjdGVycy4KKwlXaGVuICdzdHMnIGlzIHplcm8sIHRoaXMgZmVhdHVyZSBpcyBvZmYuCisJJ3NvZnR0YWJzdG9wJyBpcyBzZXQgdG8gMCB3aGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcyBzZXQuCisJU2VlIGFsc28gfGlucy1leHBhbmR0YWJ8LiAgV2hlbiAnZXhwYW5kdGFiJyBpcyBub3Qgc2V0LCB0aGUgbnVtYmVyIG9mCisJc3BhY2VzIGlzIG1pbmltaXplZCBieSB1c2luZyA8VGFiPnMuCisJVGhlICdMJyBmbGFnIGluICdjcG9wdGlvbnMnIGNoYW5nZXMgaG93IHRhYnMgYXJlIHVzZWQgd2hlbiAnbGlzdCcgaXMKKwlzZXQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIDAgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkqJ3NwbGl0YmVsb3cnKiAqJ3NiJyogKidub3NwbGl0YmVsb3cnKiAqJ25vc2InKgorJ3NwbGl0YmVsb3cnICdzYicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt3aW5kb3dzCisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHNwbGl0dGluZyBhIHdpbmRvdyB3aWxsIHB1dCB0aGUgbmV3IHdpbmRvdyBiZWxvdyB0aGUgY3VycmVudAorCW9uZS4gfDpzcGxpdHwKKworCQkJKidzcGxpdHJpZ2h0JyogKidzcHInKiAqJ25vc3BsaXRyaWdodCcqIConbm9zcHInKgorJ3NwbGl0cmlnaHQnICdzcHInCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdmVydHNwbGl0CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHNwbGl0dGluZyBhIHdpbmRvdyB3aWxsIHB1dCB0aGUgbmV3IHdpbmRvdyByaWdodCBvZiB0aGUKKwljdXJyZW50IG9uZS4gfDp2c3BsaXR8CisKKwkJCSAgIConc3RhcnRvZmxpbmUnKiAqJ3NvbCcqIConbm9zdGFydG9mbGluZScqIConbm9zb2wnKgorJ3N0YXJ0b2ZsaW5lJyAnc29sJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gIm9uIiB0aGUgY29tbWFuZHMgbGlzdGVkIGJlbG93IG1vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QKKwlibGFuayBvZiB0aGUgbGluZS4gIFdoZW4gb2ZmIHRoZSBjdXJzb3IgaXMga2VwdCBpbiB0aGUgc2FtZSBjb2x1bW4KKwkoaWYgcG9zc2libGUpLglUaGlzIGFwcGxpZXMgdG8gdGhlIGNvbW1hbmRzOiBDVFJMLUQsIENUUkwtVSwgQ1RSTC1CLAorCUNUUkwtRiwgIkciLCAiSCIsICJNIiwgIkwiLCAsIGFuZCB0byB0aGUgY29tbWFuZHMgImQiLCAiPDwiIGFuZCAiPj4iCisJd2l0aCBhIGxpbmV3aXNlIG9wZXJhdG9yLCB3aXRoICIlIiB3aXRoIGEgY291bnQgYW5kIHRvIGJ1ZmZlciBjaGFuZ2luZworCWNvbW1hbmRzIChDVFJMLV4sIDpibmV4dCwgOmJOZXh0LCBldGMuKS4gIEFsc28gZm9yIGFuIEV4IGNvbW1hbmQgdGhhdAorCW9ubHkgaGFzIGEgbGluZSBudW1iZXIsIGUuZy4sICI6MjUiIG9yICI6KyIuCisJSW4gY2FzZSBvZiBidWZmZXIgY2hhbmdpbmcgY29tbWFuZHMgdGhlIGN1cnNvciBpcyBwbGFjZWQgYXQgdGhlIGNvbHVtbgorCXdoZXJlIGl0IHdhcyB0aGUgbGFzdCB0aW1lIHRoZSBidWZmZXIgd2FzIGVkaXRlZC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkgICAqJ3N0YXR1c2xpbmUnKiAqJ3N0bCcqICpFNTQwKiAqRTU0MSogKkU1NDIqCisnc3RhdHVzbGluZScgJ3N0bCcJc3RyaW5nCShkZWZhdWx0IGVtcHR5KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3N0YXR1c2xpbmV8CisJCQlmZWF0dXJlfQorCVdoZW4gbm9uZW1wdHksIHRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHN0YXR1cyBsaW5lLgorCUFsc28gc2VlIHxzdGF0dXMtbGluZXwuCisKKwlUaGUgb3B0aW9uIGNvbnNpc3RzIG9mIHByaW50ZiBzdHlsZSAnJScgaXRlbXMgaW50ZXJzcGVyc2VkIHdpdGgKKwlub3JtYWwgdGV4dC4gIEVhY2ggc3RhdHVzIGxpbmUgaXRlbSBpcyBvZiB0aGUgZm9ybToKKwkgICUtMHttaW53aWR9LnttYXh3aWR9e2l0ZW19CisJQWxsIGZpZWxkcyBleGNlcHQgdGhlIHtpdGVtfSBpcyBvcHRpb25hbC4gIEEgc2luZ2xlIHBlcmNlbnQgc2lnbiBjYW4KKwliZSBnaXZlbiBhcyAiJSUiLiAgVXAgdG8gODAgaXRlbXMgY2FuIGJlIHNwZWNpZmllZC4KKworCU5vdGUgdGhhdCB0aGUgb25seSBlZmZlY3Qgb2YgJ3J1bGVyJyB3aGVuIHRoaXMgb3B0aW9uIGlzIHNldCAoYW5kCisJJ2xhc3RzdGF0dXMnIGlzIDIpIGlzIGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgb2YgfENUUkwtR3wuCisKKwlmaWVsZAkgICAgbWVhbmluZyB+CisJLQkgICAgTGVmdCBqdXN0aWZ5IHRoZSBpdGVtLiBUaGUgZGVmYXVsdCBpcyByaWdodCBqdXN0aWZpZWQKKwkJICAgIHdoZW4gbWlud2lkIGlzIGxhcmdlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGl0ZW0uCisJMAkgICAgTGVhZGluZyB6ZXJvZXMgaW4gbnVtZXJpYyBpdGVtcy4gT3ZlcnJpZGRlbiBieSAnLScuCisJbWlud2lkCSAgICBNaW5pbXVtIHdpZHRoIG9mIHRoZSBpdGVtLCBwYWRkaW5nIGFzIHNldCBieSAnLScgJiAnMCcuCisJCSAgICBWYWx1ZSBtdXN0IGJlIDUwIG9yIGxlc3MuCisJbWF4d2lkCSAgICBNYXhpbXVtIHdpZHRoIG9mIHRoZSBpdGVtLglUcnVuY2F0aW9uIG9jY3VycyB3aXRoIGEgJzwnCisJCSAgICBvbiB0aGUgbGVmdCBmb3IgdGV4dCBpdGVtcy4gIE51bWVyaWMgaXRlbXMgd2lsbCBiZQorCQkgICAgc2hpZnRlZCBkb3duIHRvIG1heHdpZC0yIGRpZ2l0cyBmb2xsb3dlZCBieSAnPidudW1iZXIKKwkJICAgIHdoZXJlIG51bWJlciBpcyB0aGUgYW1vdW50IG9mIG1pc3NpbmcgZGlnaXRzLCBtdWNoIGxpa2UKKwkJICAgIGFuIGV4cG9uZW50aWFsIG5vdGF0aW9uLgorCWl0ZW0JICAgIEEgb25lIGxldHRlciBjb2RlIGFzIGRlc2NyaWJlZCBiZWxvdy4KKworCUZvbGxvd2luZyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwb3NzaWJsZSBzdGF0dXNsaW5lIGl0ZW1zLiAgVGhlCisJc2Vjb25kIGNoYXJhY3RlciBpbiAiaXRlbSIgaXMgdGhlIHR5cGU6CisJCU4gZm9yIG51bWJlcgorCQlTIGZvciBzdHJpbmcKKwkJRiBmb3IgZmxhZ3MgYXMgZGVzY3JpYmVkIGJlbG93CisJCS0gbm90IGFwcGxpY2FibGUKKworCWl0ZW0gIG1lYW5pbmcgfgorCWYgUyAgIFBhdGggdG8gdGhlIGZpbGUgaW4gdGhlIGJ1ZmZlciwgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3RvcnkuCisJRiBTICAgRnVsbCBwYXRoIHRvIHRoZSBmaWxlIGluIHRoZSBidWZmZXIuCisJdCBTICAgRmlsZSBuYW1lICh0YWlsKSBvZiBmaWxlIGluIHRoZSBidWZmZXIuCisJbSBGICAgTW9kaWZpZWQgZmxhZywgdGV4dCBpcyAiIFsrXSI7ICIgWy1dIiBpZiAnbW9kaWZpYWJsZScgaXMgb2ZmLgorCU0gRiAgIE1vZGlmaWVkIGZsYWcsIHRleHQgaXMgIiwrIiBvciAiLC0iLgorCXIgRiAgIFJlYWRvbmx5IGZsYWcsIHRleHQgaXMgIiBbUk9dIi4KKwlSIEYgICBSZWFkb25seSBmbGFnLCB0ZXh0IGlzICIsUk8iLgorCWggRiAgIEhlbHAgYnVmZmVyIGZsYWcsIHRleHQgaXMgIiBbaGVscF0iLgorCUggRiAgIEhlbHAgYnVmZmVyIGZsYWcsIHRleHQgaXMgIixITFAiLgorCXcgRiAgIFByZXZpZXcgd2luZG93IGZsYWcsIHRleHQgaXMgIiBbUHJldmlld10iLgorCVcgRiAgIFByZXZpZXcgd2luZG93IGZsYWcsIHRleHQgaXMgIixQUlYiLgorCXkgRiAgIFR5cGUgb2YgZmlsZSBpbiB0aGUgYnVmZmVyLCBlLmcuLCAiIFt2aW1dIi4gIFNlZSAnZmlsZXR5cGUnLgorCVkgRiAgIFR5cGUgb2YgZmlsZSBpbiB0aGUgYnVmZmVyLCBlLmcuLCAiLFZJTSIuICBTZWUgJ2ZpbGV0eXBlJy4KKwkgICAgICB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgfCthdXRvY21kfCBmZWF0dXJlfQorCWsgUyAgIFZhbHVlIG9mICJiOmtleW1hcF9uYW1lIiBvciAna2V5bWFwJyB3aGVuIHw6bG1hcHwgbWFwcGluZ3MgYXJlCisJICAgICAgYmVpbmcgdXNlZDogIjxrZXltYXA+IgorCW4gTiAgIEJ1ZmZlciBudW1iZXIuCisJYiBOICAgVmFsdWUgb2YgYnl0ZSB1bmRlciBjdXJzb3IuCisJQiBOICAgQXMgYWJvdmUsIGluIGhleGFkZWNpbWFsLgorCW8gTiAgIEJ5dGUgbnVtYmVyIGluIGZpbGUgb2YgYnl0ZSB1bmRlciBjdXJzb3IsIGZpcnN0IGJ5dGUgaXMgMS4KKwkgICAgICBNbmVtb25pYzogT2Zmc2V0IGZyb20gc3RhcnQgb2YgZmlsZSAod2l0aCBvbmUgYWRkZWQpCisJICAgICAge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHwrYnl0ZV9vZmZzZXR8IGZlYXR1cmV9CisJTyBOICAgQXMgYWJvdmUsIGluIGhleGFkZWNpbWFsLgorCU4gTiAgIFByaW50ZXIgcGFnZSBudW1iZXIuIChPbmx5IHdvcmtzIGluIHRoZSAncHJpbnRoZWFkZXInIG9wdGlvbi4pCisJbCBOICAgTGluZSBudW1iZXIuCisJTCBOICAgTnVtYmVyIG9mIGxpbmVzIGluIGJ1ZmZlci4KKwljIE4gICBDb2x1bW4gbnVtYmVyLgorCXYgTiAgIFZpcnR1YWwgY29sdW1uIG51bWJlci4KKwlWIE4gICBWaXJ0dWFsIGNvbHVtbiBudW1iZXIgYXMgLXtudW19LglOb3QgZGlzcGxheWVkIGlmIGVxdWFsIHRvICdjJy4KKwlwIE4gICBQZXJjZW50YWdlIHRocm91Z2ggZmlsZSBpbiBsaW5lcyBhcyBpbiB8Q1RSTC1HfC4KKwlQIFMgICBQZXJjZW50YWdlIHRocm91Z2ggZmlsZSBvZiBkaXNwbGF5ZWQgd2luZG93LiAgVGhpcyBpcyBsaWtlIHRoZQorCSAgICAgIHBlcmNlbnRhZ2UgZGVzY3JpYmVkIGZvciAncnVsZXInLiAgQWx3YXlzIDMgaW4gbGVuZ3RoLgorCWEgUyAgIEFyZ3VtZW50IGxpc3Qgc3RhdHVzIGFzIGluIGRlZmF1bHQgdGl0bGUuICh7Y3VycmVudH0gb2Yge21heH0pCisJICAgICAgRW1wdHkgaWYgdGhlIGFyZ3VtZW50IGZpbGUgY291bnQgaXMgemVybyBvciBvbmUuCisJeyBORiAgRXZhbHVhdGUgZXhwcmVzc2lvbiBiZXR3ZWVuICd7JyBhbmQgJ30nIGFuZCBzdWJzdGl0dXRlIHJlc3VsdC4KKwkoIC0gICBTdGFydCBvZiBpdGVtIGdyb3VwLiAgQ2FuIGJlIHVzZWQgZm9yIHNldHRpbmcgdGhlIHdpZHRoIGFuZAorCSAgICAgIGFsaWdubWVudCBvZiBhIHNlY3Rpb24uICBNdXN0IGJlIGZvbGxvd2VkIGJ5ICUpIHNvbWV3aGVyZS4KKwkpIC0gICBFbmQgb2YgaXRlbSBncm91cC4gIE5vIHdpZHRoIGZpZWxkcyBhbGxvd2VkLgorCTwgLSAgIFdoZXJlIHRvIHRydW5jYXRlIGxpbmUgaWYgdG9vIGxvbmcuICBEZWZhdWx0IGlzIGF0IHRoZSBzdGFydC4KKwkgICAgICBObyB3aWR0aCBmaWVsZHMgYWxsb3dlZC4KKwk9IC0gICBTZXBhcmF0aW9uIHBvaW50IGJldHdlZW4gbGVmdCBhbmQgcmlnaHQgYWxpZ25lZCBpdGVtcy4KKwkgICAgICBObyB3aWR0aCBmaWVsZHMgYWxsb3dlZC4KKwkqIC0gICBTZXQgaGlnaGxpZ2h0IGdyb3VwIHRvIFVzZXJ7Tn0sIHdoZXJlIHtOfSBpcyB0YWtlbiBmcm9tIHRoZQorCSAgICAgIG1pbndpZCBmaWVsZC4gZWcuICUxKi4gIFJlc3RvcmUgbm9ybWFsIGhpZ2hsaWdodCB3aXRoICUqIG9yICUwKi4KKwkgICAgICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVzZXJ7Tn0gYW5kIFN0YXR1c0xpbmUgIHdpbGwgYmUgYXBwbGllZAorCSAgICAgIHRvIFN0YXR1c0xpbmVOQyBmb3IgdGhlIHN0YXR1c2xpbmUgb2Ygbm9uLWN1cnJlbnQgd2luZG93cy4KKwkgICAgICBUaGUgbnVtYmVyIE4gbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDkuICBTZWUgfGhsLVVzZXIxLi45fAorCisJRGlzcGxheSBvZiBmbGFncyBhcmUgY29udHJvbGxlZCBieSB0aGUgZm9sbG93aW5nIGhldXJpc3RpYzoKKwlJZiBhIGZsYWcgdGV4dCBzdGFydHMgd2l0aCBjb21tYSBpdCBpcyBhc3N1bWVkIHRoYXQgaXQgd2FudHMgdG8KKwlzZXBhcmF0ZSBpdHNlbGYgZnJvbSBhbnl0aGluZyBidXQgcHJlY2VkaW5nIHBsYWludGV4dC4JSWYgaXQgc3RhcnRzCisJd2l0aCBhIHNwYWNlIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCB3YW50cyB0byBzZXBhcmF0ZSBpdHNlbGYgZnJvbQorCWFueXRoaW5nIGJ1dCBvdGhlciBmbGFncy4gIFRoYXQgaXM6IEEgbGVhZGluZyBjb21tYSBpcyByZW1vdmVkIGlmIHRoZQorCXByZWNlZGluZyBjaGFyYWN0ZXIgc3RlbXMgZnJvbSBwbGFpbnRleHQuICBBIGxlYWRpbmcgc3BhY2UgaXMgcmVtb3ZlZAorCWlmIHRoZSBwcmVjZWRpbmcgY2hhcmFjdGVyIHN0ZW1zIGZyb20gYW5vdGhlciBhY3RpdmUgZmxhZy4gVGhpcyB3aWxsCisJbWFrZSBhIG5pY2UgZGlzcGxheSB3aGVuIGZsYWdzIGFyZSB1c2VkIGxpa2UgaW4gdGhlIGV4YW1wbGVzIGJlbG93LgorCisJV2hlbiBhbGwgaXRlbXMgaW4gYSBncm91cCBiZWNvbWVzIGFuIGVtcHR5IHN0cmluZyAoaWUuIGZsYWdzIHRoYXQgYXJlCisJbm90IHNldCkgYW5kIGEgbWlud2lkIGlzIG5vdCBzZXQgZm9yIHRoZSBncm91cCwgdGhlIHdob2xlIGdyb3VwIHdpbGwKKwliZWNvbWUgZW1wdHkuICBUaGlzIHdpbGwgbWFrZSBhIGdyb3VwIGxpa2UgdGhlIGZvbGxvd2luZyBkaXNhcHBlYXIKKwljb21wbGV0ZWx5IGZyb20gdGhlIHN0YXR1c2xpbmUgd2hlbiBub25lIG9mIHRoZSBmbGFncyBhcmUgc2V0LiA+CisJCTpzZXQgc3RhdHVzbGluZT0uLi4lKFwgWyVNJVIlSF0lKS4uLgorPAorCUJld2FyZSB0aGF0IGFuIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGVhY2ggYW5kIGV2ZXJ5IHRpbWUgdGhlIHN0YXR1cworCWxpbmUgaXMgZGlzcGxheWVkLiAgVGhlIGN1cnJlbnQgYnVmZmVyIGFuZCBjdXJyZW50IHdpbmRvdyB3aWxsIGJlIHNldAorCXRlbXBvcmFyaWx5IHRvIHRoYXQgb2YgdGhlIHdpbmRvdyAoYW5kIGJ1ZmZlcikgd2hvc2Ugc3RhdHVzbGluZSBpcworCWN1cnJlbnRseSBiZWluZyBkcmF3bi4gVGhlIGV4cHJlc3Npb24gd2lsbCBldmFsdWF0ZSBpbiB0aGlzIGNvbnRleHQuCisJVGhlIHZhcmlhYmxlICJhY3R1YWxfY3VyYnVmIiBpcyBzZXQgdG8gdGhlICdidWZucigpJyBudW1iZXIgb2YgdGhlCisJcmVhbCBjdXJyZW50IGJ1ZmZlci4gIFRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBpbiB0aGUgfHNhbmRib3h8LgorCisJSWYgdGhlIHN0YXR1c2xpbmUgaXMgbm90IHVwZGF0ZWQgd2hlbiB5b3Ugd2FudCBpdCAoZS5nLiwgYWZ0ZXIgc2V0dGluZworCWEgdmFyaWFibGUgdGhhdCdzIHVzZWQgaW4gYW4gZXhwcmVzc2lvbiksIHlvdSBjYW4gZm9yY2UgYW4gdXBkYXRlIGJ5CisJc2V0dGluZyBhbiBvcHRpb24gd2l0aG91dCBjaGFuZ2luZyBpdHMgdmFsdWUuICBFeGFtcGxlOiA+CisJCTpsZXQgJnJvID0gJnJvCisKKzwJQSByZXN1bHQgb2YgYWxsIGRpZ2l0cyBpcyByZWdhcmRlZCBhIG51bWJlciBmb3IgZGlzcGxheSBwdXJwb3Nlcy4KKwlPdGhlcndpc2UgdGhlIHJlc3VsdCBpcyB0YWtlbiBhcyBmbGFnIHRleHQgYW5kIGFwcGxpZWQgdG8gdGhlIHJ1bGVzCisJZGVzY3JpYmVkIGFib3ZlLgorCisJV2F0Y2ggb3V0IGZvciBlcnJvcnMgaW4gZXhwcmVzc2lvbnMuICBUaGV5IG1heSByZW5kZXIgVmltIHVudXNhYmxlICEKKwlJZiB5b3UgYXJlIHN0dWNrLCBob2xkIGRvd24gJzonIG9yICdRJyB0byBnZXQgYSBwcm9tcHQsIHRoZW4gcXVpdCBhbmQKKwllZGl0IHlvdXIgLnZpbXJjIG9yIHdoYXRldmVyIHdpdGggInZpbSAtdSBOT05FIiB0byBnZXQgaXQgcmlnaHQuCisKKwlFeGFtcGxlczoKKwlFbXVsYXRlIHN0YW5kYXJkIHN0YXR1cyBsaW5lIHdpdGggJ3J1bGVyJyBzZXQgPgorCSAgOnNldCBzdGF0dXNsaW5lPSU8JWZcICVoJW0lciU9JS0xNC4oJWwsJWMlViUpXCAlUAorPAlTaW1pbGFyLCBidXQgYWRkIEFTQ0lJIHZhbHVlIG9mIGNoYXIgdW5kZXIgdGhlIGN1cnNvciAobGlrZSAiZ2EiKSA+CisJICA6c2V0IHN0YXR1c2xpbmU9JTwlZiVoJW0lciU9JWJcIDB4JUJcIFwgJWwsJWMlVlwgJVAKKzwJRGlzcGxheSBieXRlIGNvdW50IGFuZCBieXRlIHZhbHVlLCBtb2RpZmllZCBmbGFnIGluIHJlZC4gPgorCSAgOnNldCBzdGF0dXNsaW5lPSU8JWYlPVwgWyUxKiVNJSolbiVSJUhdXCAlLTE5KCUzbCwlMDJjJTAzViUpJU8nJTAyYicKKwkgIDpoaSBVc2VyMSB0ZXJtPWludmVyc2UsYm9sZCBjdGVybT1pbnZlcnNlLGJvbGQgY3Rlcm1mZz1yZWQKKzwJRGlzcGxheSBhICxHWiBmbGFnIGlmIGEgY29tcHJlc3NlZCBmaWxlIGlzIGxvYWRlZCA+CisJICA6c2V0IHN0YXR1c2xpbmU9Li4uJXIle1ZhckV4aXN0cygnYjpnemZsYWcnLCdcIFtHWl0nKX0laC4uLgorPAlJbiB0aGUgfDphdXRvY21kfCdzOiA+CisJICA6bGV0IGI6Z3pmbGFnID0gMQorPAlBbmQ6ID4KKwkgIDp1bmxldCBiOmd6ZmxhZworPAlBbmQgZGVmaW5lIHRoaXMgZnVuY3Rpb246ID4KKwkgIDpmdW5jdGlvbiBWYXJFeGlzdHModmFyLCB2YWwpCisJICA6ICAgIGlmIGV4aXN0cyhhOnZhcikgfCByZXR1cm4gYTp2YWwgfCBlbHNlIHwgcmV0dXJuICcnIHwgZW5kaWYKKwkgIDplbmRmdW5jdGlvbgorPAorCQkJCQkJKidzdWZmaXhlcycqIConc3UnKgorJ3N1ZmZpeGVzJyAnc3UnCQlzdHJpbmcJKGRlZmF1bHQgIi5iYWssfiwubywuaCwuaW5mbywuc3dwLC5vYmoiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUZpbGVzIHdpdGggdGhlc2Ugc3VmZml4ZXMgZ2V0IGEgbG93ZXIgcHJpb3JpdHkgd2hlbiBtdWx0aXBsZSBmaWxlcworCW1hdGNoIGEgd2lsZGNhcmQuICBTZWUgfHN1ZmZpeGVzfC4gIENvbW1hcyBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSB0aGUKKwlzdWZmaXhlcy4gIFNwYWNlcyBhZnRlciB0aGUgY29tbWEgYXJlIGlnbm9yZWQuCUEgZG90IGlzIGFsc28gc2VlbiBhcworCXRoZSBzdGFydCBvZiBhIHN1ZmZpeC4JVG8gYXZvaWQgYSBkb3Qgb3IgY29tbWEgYmVpbmcgcmVjb2duaXplZCBhcyBhCisJc2VwYXJhdG9yLCBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2ggKHNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQKKwlpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcykuCisJU2VlICd3aWxkaWdub3JlJyBmb3IgY29tcGxldGVseSBpZ25vcmluZyBmaWxlcy4KKwlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlzdWZmaXhlcyBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuCisKKwkJCQkJCSonc3VmZml4ZXNhZGQnKiAqJ3N1YScqCisnc3VmZml4ZXNhZGQnICdzdWEnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrZmlsZV9pbl9wYXRofCBmZWF0dXJlfQorCUNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHN1ZmZpeGVzLCB3aGljaCBhcmUgdXNlZCB3aGVuIHNlYXJjaGluZyBmb3IgYQorCWZpbGUgZm9yIHRoZSAiZ2YiLCAiW0kiLCBldGMuIGNvbW1hbmRzLiAgRXhhbXBsZTogPgorCQk6c2V0IHN1ZmZpeGVzYWRkPS5qYXZhCis8CisJCQkJKidzd2FwZmlsZScqIConc3dmJyogKidub3N3YXBmaWxlJyogKidub3N3ZicqCisnc3dhcGZpbGUnICdzd2YnCWJvb2xlYW4gKGRlZmF1bHQgb24pCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVXNlIGEgc3dhcGZpbGUgZm9yIHRoZSBidWZmZXIuCVRoaXMgb3B0aW9uIGNhbiBiZSByZXNldCB3aGVuIGEKKwlzd2FwZmlsZSBpcyBub3Qgd2FudGVkIGZvciBhIHNwZWNpZmljIGJ1ZmZlci4gIEZvciBleGFtcGxlLCB3aXRoCisJY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIHRoYXQgZXZlbiByb290IG11c3Qgbm90IGJlIGFibGUgdG8gYWNjZXNzLgorCUNhcmVmdWw6IEFsbCB0ZXh0IHdpbGwgYmUgaW4gbWVtb3J5OgorCQktIERvbid0IHVzZSB0aGlzIGZvciBiaWcgZmlsZXMuCisJCS0gUmVjb3Zlcnkgd2lsbCBiZSBpbXBvc3NpYmxlIQorCUEgc3dhcGZpbGUgd2lsbCBvbmx5IGJlIHByZXNlbnQgd2hlbiB8J3VwZGF0ZWNvdW50J3wgaXMgbm9uLXplcm8gYW5kCisJJ3N3YXBmaWxlJyBpcyBzZXQuCisJV2hlbiAnc3dhcGZpbGUnIGlzIHJlc2V0LCB0aGUgc3dhcCBmaWxlIGZvciB0aGUgY3VycmVudCBidWZmZXIgaXMKKwlpbW1lZGlhdGVseSBkZWxldGVkLiAgV2hlbiAnc3dhcGZpbGUnIGlzIHNldCwgYW5kICd1cGRhdGVjb3VudCcgaXMKKwlub24temVybywgYSBzd2FwIGZpbGUgaXMgaW1tZWRpYXRlbHkgY3JlYXRlZC4KKwlBbHNvIHNlZSB8c3dhcC1maWxlfCBhbmQgfCdzd2Fwc3luYyd8LgorCisJVGhpcyBvcHRpb24gaXMgdXNlZCB0b2dldGhlciB3aXRoICdidWZoaWRkZW4nIGFuZCAnYnVmdHlwZScgdG8KKwlzcGVjaWZ5IHNwZWNpYWwga2luZHMgb2YgYnVmZmVycy4gICBTZWUgfHNwZWNpYWwtYnVmZmVyc3wuCisKKwkJCQkJCSonc3dhcHN5bmMnKiAqJ3N3cycqCisnc3dhcHN5bmMnICdzd3MnCXN0cmluZwkoZGVmYXVsdCAiZnN5bmMiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgbm90IGVtcHR5IGEgc3dhcCBmaWxlIGlzIHN5bmNlZCB0byBkaXNrIGFmdGVyCisJd3JpdGluZyB0byBpdC4JVGhpcyB0YWtlcyBzb21lIHRpbWUsIGVzcGVjaWFsbHkgb24gYnVzeSB1bml4IHN5c3RlbXMuCisJV2hlbiB0aGlzIG9wdGlvbiBpcyBlbXB0eSBwYXJ0cyBvZiB0aGUgc3dhcCBmaWxlIG1heSBiZSBpbiBtZW1vcnkgYW5kCisJbm90IHdyaXR0ZW4gdG8gZGlzay4gIFdoZW4gdGhlIHN5c3RlbSBjcmFzaGVzIHlvdSBtYXkgbG9zZSBtb3JlIHdvcmsuCisJT24gVW5peCB0aGUgc3lzdGVtIGRvZXMgYSBzeW5jIG5vdyBhbmQgdGhlbiB3aXRob3V0IFZpbSBhc2tpbmcgZm9yIGl0LAorCXNvIHRoZSBkaXNhZHZhbnRhZ2Ugb2Ygc2V0dGluZyB0aGlzIG9wdGlvbiBvZmYgaXMgc21hbGwuICBPbiBzb21lCisJc3lzdGVtcyB0aGUgc3dhcCBmaWxlIHdpbGwgbm90IGJlIHdyaXR0ZW4gYXQgYWxsLiAgRm9yIGEgdW5peCBzeXN0ZW0KKwlzZXR0aW5nIGl0IHRvICJzeW5jIiB3aWxsIHVzZSB0aGUgc3luYygpIGNhbGwgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAorCWZzeW5jKCksIHdoaWNoIG1heSB3b3JrIGJldHRlciBvbiBzb21lIHN5c3RlbXMuCisKKwkJCQkJCSonc3dpdGNoYnVmJyogKidzd2InKgorJ3N3aXRjaGJ1ZicgJ3N3YicJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBiZWhhdmlvciB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJ1ZmZlcnMuCisJUG9zc2libGUgdmFsdWVzIChjb21tYSBzZXBhcmF0ZWQgbGlzdCk6CisJICAgdXNlb3BlbglJZiBpbmNsdWRlZCwganVtcCB0byB0aGUgZmlyc3Qgb3BlbiB3aW5kb3cgdGhhdAorCQkJY29udGFpbnMgdGhlIHNwZWNpZmllZCBidWZmZXIgKGlmIHRoZXJlIGlzIG9uZSkuCisJCQlPdGhlcndpc2U6IERvIG5vdCBleGFtaW5lIG90aGVyIHdpbmRvd3MuCisJCQlUaGlzIHNldHRpbmcgaXMgY2hlY2tlZCB3aXRoIHxxdWlja2ZpeHwgY29tbWFuZHMsIHdoZW4KKwkJCWp1bXBpbmcgdG8gZXJyb3JzICgiOmNjIiwgIjpjbiIsICJjcCIsIGV0Yy4pLiAgSXQgaXMKKwkJCWFsc28gdXNlZCBpbiBhbGwgYnVmZmVyIHJlbGF0ZWQgc3BsaXQgY29tbWFuZHMsIGZvcgorCQkJZXhhbXBsZSAiOnNidWZmZXIiLCAiOnNibmV4dCIsIG9yICI6c2JyZXdpbmQiLgorCSAgIHNwbGl0CUlmIGluY2x1ZGVkLCBzcGxpdCB0aGUgY3VycmVudCB3aW5kb3cgYmVmb3JlIGxvYWRpbmcKKwkJCWEgYnVmZmVyLiBPdGhlcndpc2U6IGRvIG5vdCBzcGxpdCwgdXNlIGN1cnJlbnQgd2luZG93LgorCQkJU3VwcG9ydGVkIGluIHxxdWlja2ZpeHwgY29tbWFuZHMgdGhhdCBkaXNwbGF5IGVycm9ycy4KKworCQkJCQkJKidzeW50YXgnKiAqJ3N5bicqCisnc3ludGF4JyAnc3luJwkJc3RyaW5nCShkZWZhdWx0IGVtcHR5KQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3N5bnRheHwKKwkJCWZlYXR1cmV9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBzeW50YXggd2l0aCB0aGlzIG5hbWUgaXMgbG9hZGVkLCB1bmxlc3MKKwlzeW50YXggaGlnaGxpZ2h0aW5nIGhhcyBiZWVuIHN3aXRjaGVkIG9mZiB3aXRoICI6c3ludGF4IG9mZiIuCisJT3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGRvZXMgbm90IGFsd2F5cyByZWZsZWN0IHRoZSBjdXJyZW50IHN5bnRheCAodGhlCisJYjpjdXJyZW50X3N5bnRheCB2YXJpYWJsZSBkb2VzKS4KKwlUaGlzIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBhIG1vZGVsaW5lLCBmb3IgYSBmaWxlIHdoaWNoIHN5bnRheCBpcworCW5vdCBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQuICBFeGFtcGxlLCBmb3IgaW4gYW4gSURMIGZpbGU6ID4KKwkJLyogdmltOiBzZXQgc3ludGF4PWlkbCA6ICovCis8CVRvIHN3aXRjaCBvZmYgc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgdGhlIGN1cnJlbnQgZmlsZSwgdXNlOiA+CisJCTpzZXQgc3ludGF4PU9GRgorPAlUbyBzd2l0Y2ggc3ludGF4IGhpZ2hsaWdodGluZyBvbiBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCisJJ2ZpbGV0eXBlJyBvcHRpb246ID4KKwkJOnNldCBzeW50YXg9T04KKzwJV2hhdCBhY3R1YWxseSBoYXBwZW5zIHdoZW4gc2V0dGluZyB0aGUgJ3N5bnRheCcgb3B0aW9uIGlzIHRoYXQgdGhlCisJU3ludGF4IGF1dG9jb21tYW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB3aXRoIHRoZSB2YWx1ZSBhcyBhcmd1bWVudC4KKwlUaGlzIG9wdGlvbiBpcyBub3QgY29waWVkIHRvIGFub3RoZXIgYnVmZmVyLCBpbmRlcGVuZGVudCBvZiB0aGUgJ3MnIG9yCisJJ1MnIGZsYWcgaW4gJ2Nwb3B0aW9ucycuCisKKwkJCQkJKid0YWJzdG9wJyogKid0cycqCisndGFic3RvcCcgJ3RzJwkJbnVtYmVyCShkZWZhdWx0IDgpCisJCQlsb2NhbCB0byBidWZmZXIKKwlOdW1iZXIgb2Ygc3BhY2VzIHRoYXQgYSA8VGFiPiBpbiB0aGUgZmlsZSBjb3VudHMgZm9yLiAgQWxzbyBzZWUKKwl8OnJldGFifCBjb21tYW5kLCBhbmQgJ3NvZnR0YWJzdG9wJyBvcHRpb24uCisKKwlOb3RlOiBTZXR0aW5nICd0YWJzdG9wJyB0byBhbnkgb3RoZXIgdmFsdWUgdGhhbiA4IGNhbiBtYWtlIHlvdXIgZmlsZQorCWFwcGVhciB3cm9uZyBpbiBtYW55IHBsYWNlcyAoZS5nLiwgd2hlbiBwcmludGluZyBpdCkuCisKKwlUaGVyZSBhcmUgZm91ciBtYWluIHdheXMgdG8gdXNlIHRhYnMgaW4gVmltOgorCTEuIEFsd2F5cyBrZWVwICd0YWJzdG9wJyBhdCA4LCBzZXQgJ3NvZnR0YWJzdG9wJyBhbmQgJ3NoaWZ0d2lkdGgnIHRvIDQKKwkgICAob3IgMyBvciB3aGF0ZXZlciB5b3UgcHJlZmVyKSBhbmQgdXNlICdub2V4cGFuZHRhYicuICBUaGVuIFZpbQorCSAgIHdpbGwgdXNlIGEgbWl4IG9mIHRhYnMgYW5kIHNwYWNlcywgYnV0IHR5cGluZyBUYWIgYW5kIEJTIHdpbGwKKwkgICBiZWhhdmUgbGlrZSBhIHRhYiBhcHBlYXJzIGV2ZXJ5IDQgKG9yIDMpIGNoYXJhY3RlcnMuCisJMi4gU2V0ICd0YWJzdG9wJyBhbmQgJ3NoaWZ0d2lkdGgnIHRvIHdoYXRldmVyIHlvdSBwcmVmZXIgYW5kIHVzZQorCSAgICdleHBhbmR0YWInLiAgVGhpcyB3YXkgeW91IHdpbGwgYWx3YXlzIGluc2VydCBzcGFjZXMuICBUaGUKKwkgICBmb3JtYXR0aW5nIHdpbGwgbmV2ZXIgYmUgbWVzc2VkIHVwIHdoZW4gJ3RhYnN0b3AnIGlzIGNoYW5nZWQuCisJMy4gU2V0ICd0YWJzdG9wJyBhbmQgJ3NoaWZ0d2lkdGgnIHRvIHdoYXRldmVyIHlvdSBwcmVmZXIgYW5kIHVzZSBhCisJICAgfG1vZGVsaW5lfCB0byBzZXQgdGhlc2UgdmFsdWVzIHdoZW4gZWRpdGluZyB0aGUgZmlsZSBhZ2Fpbi4JT25seQorCSAgIHdvcmtzIHdoZW4gdXNpbmcgVmltIHRvIGVkaXQgdGhlIGZpbGUuCisJNC4gQWx3YXlzIHNldCAndGFic3RvcCcgYW5kICdzaGlmdHdpZHRoJyB0byB0aGUgc2FtZSB2YWx1ZSwgYW5kCisJICAgJ25vZXhwYW5kdGFiJy4gIFRoaXMgc2hvdWxkIHRoZW4gd29yayAoZm9yIGluaXRpYWwgaW5kZW50cyBvbmx5KQorCSAgIGZvciBhbnkgdGFic3RvcCBzZXR0aW5nIHRoYXQgcGVvcGxlIHVzZS4gIEl0IG1pZ2h0IGJlIG5pY2UgdG8gaGF2ZQorCSAgIHRhYnMgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1ibGFuayBpbnNlcnRlZCBhcyBzcGFjZXMgaWYgeW91IGRvIHRoaXMKKwkgICB0aG91Z2guICBPdGhlcndpc2UgYWxpZ25lZCBjb21tZW50cyB3aWxsIGJlIHdyb25nIHdoZW4gJ3RhYnN0b3AnIGlzCisJICAgY2hhbmdlZC4KKworCQkJKid0YWdic2VhcmNoJyogKid0YnMnKiAqJ25vdGFnYnNlYXJjaCcqIConbm90YnMnKgorJ3RhZ2JzZWFyY2gnICd0YnMnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBzZWFyY2hpbmcgZm9yIGEgdGFnIChlLmcuLCBmb3IgdGhlIHw6dGF8IGNvbW1hbmQpLCBWaW0gY2FuIGVpdGhlcgorCXVzZSBhIGJpbmFyeSBzZWFyY2ggb3IgYSBsaW5lYXIgc2VhcmNoIGluIGEgdGFncyBmaWxlLglCaW5hcnkKKwlzZWFyY2hpbmcgbWFrZXMgc2VhcmNoaW5nIGZvciBhIHRhZyBhIExPVCBmYXN0ZXIsIGJ1dCBhIGxpbmVhciBzZWFyY2gKKwl3aWxsIGZpbmQgbW9yZSB0YWdzIGlmIHRoZSB0YWdzIGZpbGUgd2Fzbid0IHByb3Blcmx5IHNvcnRlZC4KKwlWaW0gbm9ybWFsbHkgYXNzdW1lcyB0aGF0IHlvdXIgdGFncyBmaWxlcyBhcmUgc29ydGVkLCBvciBpbmRpY2F0ZSB0aGF0CisJdGhleSBhcmUgbm90IHNvcnRlZC4gIE9ubHkgd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZSBkb2VzIHRoZQorCSd0YWdic2VhcmNoJyBvcHRpb24gbmVlZCB0byBiZSBzd2l0Y2hlZCBvZmYuCisKKwlXaGVuICd0YWdic2VhcmNoJyBpcyBvbiwgYmluYXJ5IHNlYXJjaGluZyBpcyBmaXJzdCB1c2VkIGluIHRoZSB0YWdzCisJZmlsZXMuCUluIGNlcnRhaW4gc2l0dWF0aW9ucywgVmltIHdpbGwgZG8gYSBsaW5lYXIgc2VhcmNoIGluc3RlYWQgZm9yCisJY2VydGFpbiBmaWxlcywgb3IgcmV0cnkgYWxsIGZpbGVzIHdpdGggYSBsaW5lYXIgc2VhcmNoLiAgV2hlbgorCSd0YWdic2VhcmNoJyBpcyBvZmYsIG9ubHkgYSBsaW5lYXIgc2VhcmNoIGlzIGRvbmUuCisKKwlMaW5lYXIgc2VhcmNoaW5nIGlzIGRvbmUgYW55d2F5LCBmb3Igb25lIGZpbGUsIHdoZW4gVmltIGZpbmRzIGEgbGluZQorCWF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSBpbmRpY2F0aW5nIHRoYXQgaXQncyBub3Qgc29ydGVkOiA+CisgICAhX1RBR19GSUxFX1NPUlRFRAkwCS9zb21lIGNvbW1hbmQvCis8CVtUaGUgd2hpdGVzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSAnMCcgbXVzdCBiZSBhIHNpbmdsZSA8VGFiPl0KKworCVdoZW4gYSBiaW5hcnkgc2VhcmNoIHdhcyBkb25lIGFuZCBubyBtYXRjaCB3YXMgZm91bmQgaW4gYW55IG9mIHRoZQorCWZpbGVzIGxpc3RlZCBpbiAndGFncycsIGFuZCAnaWdub3JlY2FzZScgaXMgc2V0IG9yIGEgcGF0dGVybiBpcyB1c2VkCisJaW5zdGVhZCBvZiBhIG5vcm1hbCB0YWcgbmFtZSwgYSByZXRyeSBpcyBkb25lIHdpdGggYSBsaW5lYXIgc2VhcmNoLgorCVRhZ3MgaW4gdW5zb3J0ZWQgdGFncyBmaWxlcywgYW5kIG1hdGNoZXMgd2l0aCBkaWZmZXJlbnQgY2FzZSB3aWxsIG9ubHkKKwliZSBmb3VuZCBpbiB0aGUgcmV0cnkuCisKKwlJZiBhIHRhZyBmaWxlIGluZGljYXRlcyB0aGF0IGlzIGlzIGNhc2UtZm9sZCBzb3J0ZWQsIHRoZSBzZWNvbmQsCisJbGluZWFyIHNlYXJjaCBjYW4gYmUgYXZvaWRlZCBmb3IgdGhlICdpZ25vcmVjYXNlJyBjYXNlLiAgVXNlIGEgdmFsdWUKKwlvZiAnMicgaW4gdGhlICIhX1RBR19GSUxFX1NPUlRFRCIgbGluZSBmb3IgdGhpcy4gIEEgdGFnIGZpbGUgY2FuIGJlCisJY2FzZS1mb2xkIHNvcnRlZCB3aXRoIHRoZSAtZiBzd2l0Y2ggdG8gInNvcnQiIGluIG1vc3QgdW5pY2VzLCBhcyBpbgorCXRoZSBjb21tYW5kOiAic29ydCAtZiAtbyB0YWdzIHRhZ3MiLiAgRm9yICJFeHViZXJhbnQgY3RhZ3MiIHZlcnNpb24KKwk1LjMgb3IgaGlnaGVyIHRoZSAtZiBvciAtLWZvbGQtY2FzZS1zb3J0IHN3aXRjaCBjYW4gYmUgdXNlZCBmb3IgdGhpcworCWFzIHdlbGwuICBOb3RlIHRoYXQgY2FzZSBtdXN0IGJlIGZvbGRlZCB0byB1cHBlcmNhc2UgZm9yIHRoaXMgdG8gd29yay4KKworCVdoZW4gJ3RhZ2JzZWFyY2gnIGlzIG9mZiwgdGFncyBzZWFyY2hpbmcgaXMgc2xvd2VyIHdoZW4gYSBmdWxsIG1hdGNoCisJZXhpc3RzLCBidXQgZmFzdGVyIHdoZW4gbm8gZnVsbCBtYXRjaCBleGlzdHMuICBUYWdzIGluIHVuc29ydGVkIHRhZ3MKKwlmaWxlcyBtYXkgb25seSBiZSBmb3VuZCB3aXRoICd0YWdic2VhcmNoJyBvZmYuCisJV2hlbiB0aGUgdGFncyBmaWxlIGlzIG5vdCBzb3J0ZWQsIG9yIHNvcnRlZCBpbiBhIHdyb25nIHdheSAobm90IG9uCisJQVNDSUkgYnl0ZSB2YWx1ZSksICd0YWdic2VhcmNoJyBzaG91bGQgYmUgb2ZmLCBvciB0aGUgbGluZSBnaXZlbiBhYm92ZQorCW11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIHRhZ3MgZmlsZS4KKwlUaGlzIG9wdGlvbiBkb2Vzbid0IGFmZmVjdCBjb21tYW5kcyB0aGF0IGZpbmQgYWxsIG1hdGNoaW5nIHRhZ3MgKGUuZy4sCisJY29tbWFuZC1saW5lIGNvbXBsZXRpb24gYW5kICI6aGVscCIpLgorCXtWaTogYWx3YXlzIHVzZXMgYmluYXJ5IHNlYXJjaCBpbiBzb21lIHZlcnNpb25zfQorCisJCQkJCQkqJ3RhZ2xlbmd0aCcqICondGwnKgorJ3RhZ2xlbmd0aCcgJ3RsJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCUlmIG5vbi16ZXJvLCB0YWdzIGFyZSBzaWduaWZpY2FudCB1cCB0byB0aGlzIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorCisJCQkqJ3RhZ3JlbGF0aXZlJyogKid0cicqIConbm90YWdyZWxhdGl2ZScqIConbm90cicqCisndGFncmVsYXRpdmUnICd0cicJYm9vbGVhbgkoVmltIGRlZmF1bHQ6IG9uLCBWaSBkZWZhdWx0OiBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJSWYgb24gYW5kIHVzaW5nIGEgdGFnIGZpbGUgaW4gYW5vdGhlciBkaXJlY3RvcnksIGZpbGUgbmFtZXMgaW4gdGhhdAorCXRhZyBmaWxlIGFyZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB0YWcgZmlsZSBpcy4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKid0YWdzJyogKid0YWcnKiAqRTQzMyoKKyd0YWdzJyAndGFnJwkJc3RyaW5nCShkZWZhdWx0ICIuL3RhZ3MsdGFncyIsIHdoZW4gY29tcGlsZWQgd2l0aAorCQkJCXwrZW1hY3NfdGFnc3w6ICIuL3RhZ3MsLi9UQUdTLHRhZ3MsVEFHUyIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJRmlsZW5hbWVzIGZvciB0aGUgdGFnIGNvbW1hbmQsIHNlcGFyYXRlZCBieSBzcGFjZXMgb3IgY29tbWFzLiAgVG8KKwlpbmNsdWRlIGEgc3BhY2Ugb3IgY29tbWEgaW4gYSBmaWxlIG5hbWUsIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaAorCShzZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzKS4KKwlXaGVuIGEgZmlsZSBuYW1lIHN0YXJ0cyB3aXRoICIuLyIsIHRoZSAnLicgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcGF0aAorCW9mIHRoZSBjdXJyZW50IGZpbGUuICBCdXQgb25seSB3aGVuIHRoZSAnZCcgZmxhZyBpcyBub3QgaW5jbHVkZWQgaW4KKwknY3BvcHRpb25zJy4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4gIEFsc28gc2VlCisJfHRhZ3Mtb3B0aW9ufC4KKwkiKiIsICIqKiIgYW5kIG90aGVyIHdpbGRjYXJkcyBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIHRhZ3MgZmlsZXMgaW4KKwlhIGRpcmVjdG9yeSB0cmVlLiAgU2VlIHxmaWxlLXNlYXJjaGluZ3wuICB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkCisJd2l0aG91dCB0aGUgfCtwYXRoX2V4dHJhfCBmZWF0dXJlfQorCUlmIFZpbSB3YXMgY29tcGlsZWQgd2l0aCB0aGUgfCtlbWFjc190YWdzfCBmZWF0dXJlLCBFbWFjcy1zdHlsZSB0YWcKKwlmaWxlcyBhcmUgYWxzbyBzdXBwb3J0ZWQuICBUaGV5IGFyZSBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQuICBUaGUKKwlkZWZhdWx0IHZhbHVlIGJlY29tZXMgIi4vdGFncywuL1RBR1MsdGFncyxUQUdTIiwgdW5sZXNzIGNhc2UKKwlkaWZmZXJlbmNlcyBhcmUgaWdub3JlZCAoTVMtV2luZG93cykuICB8ZW1hY3MtdGFnc3wKKwlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlmaWxlIG5hbWVzIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4KKwl7Vmk6IGRlZmF1bHQgaXMgInRhZ3MgL3Vzci9saWIvdGFncyJ9CisKKwkJCQkqJ3RhZ3N0YWNrJyogKid0Z3N0JyogKidub3RhZ3N0YWNrJyogKidub3Rnc3QnKgorJ3RhZ3N0YWNrJyAndGdzdCcJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBhbGwgdmVyc2lvbnMgb2YgVml9CisJV2hlbiBvbiwgdGhlIHx0YWdzdGFja3wgaXMgdXNlZCBub3JtYWxseS4gIFdoZW4gb2ZmLCBhICI6dGFnIiBvcgorCSI6dHNlbGVjdCIgY29tbWFuZCB3aXRoIGFuIGFyZ3VtZW50IHdpbGwgbm90IHB1c2ggdGhlIHRhZyBvbnRvIHRoZQorCXRhZ3N0YWNrLiAgQSBmb2xsb3dpbmcgIjp0YWciIHdpdGhvdXQgYW4gYXJndW1lbnQsIGEgIjpwb3AiIGNvbW1hbmQgb3IKKwlhbnkgb3RoZXIgY29tbWFuZCB0aGF0IHVzZXMgdGhlIHRhZ3N0YWNrIHdpbGwgdXNlIHRoZSB1bm1vZGlmaWVkCisJdGFnc3RhY2ssIGJ1dCBkb2VzIGNoYW5nZSB0aGUgcG9pbnRlciB0byB0aGUgYWN0aXZlIGVudHJ5LgorCVJlc2V0dGluZyB0aGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB1c2luZyBhICI6dGFnIiBjb21tYW5kIGluIGEKKwltYXBwaW5nIHdoaWNoIHNob3VsZCBub3QgY2hhbmdlIHRoZSB0YWdzdGFjay4KKworCQkJCQkJKid0ZXJtJyogKkU1MjkqICpFNTMwKiAqRTUzMSoKKyd0ZXJtJwkJCXN0cmluZwkoZGVmYXVsdCBpcyAkVEVSTSwgaWYgdGhhdCBmYWlsczoKKwkJCQkgICAgICBpbiB0aGUgR1VJOiAiYnVpbHRpbl9ndWkiCisJCQkJCW9uIEFtaWdhOiAiYW1pZ2EiCisJCQkJCSBvbiBCZU9TOiAiYmVvcy1hbnNpIgorCQkJCQkgIG9uIE1hYzogIm1hYy1hbnNpIgorCQkJCQkgb24gTWlOVDogInZ0NTIiCisJCQkJICAgICAgIG9uIE1TLURPUzogInBjdGVybSIKKwkJCQkJIG9uIE9TLzI6ICJvczJhbnNpIgorCQkJCQkgb24gVW5peDogImFuc2kiCisJCQkJCSAgb24gVk1TOiAiYW5zaSIKKwkJCQkgICAgICAgb24gV2luIDMyOiAid2luMzIiKQorCQkJZ2xvYmFsCisJTmFtZSBvZiB0aGUgdGVybWluYWwuICBVc2VkIGZvciBjaG9vc2luZyB0aGUgdGVybWluYWwgY29udHJvbAorCWNoYXJhY3RlcnMuICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCisJRm9yIGV4YW1wbGU6ID4KKwkJOnNldCB0ZXJtPSRURVJNCis8CVNlZSB8dGVybWNhcHwuCisKKwkJCQkJCSondGVybWJpZGknKiAqJ3RiaWRpJyoKKwkJCQkJCSonbm90ZXJtYmlkaScqIConbm90YmlkaScqCisndGVybWJpZGknICd0YmlkaScJYm9vbGVhbiAoZGVmYXVsdCBvZmYsIG9uIGZvciAibWx0ZXJtIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrYXJhYmljfAorCQkJZmVhdHVyZX0KKwlUaGUgdGVybWluYWwgaXMgaW4gY2hhcmdlIG9mIEJpLWRpcmVjdGlvbmFsaXR5IG9mIHRleHQgKGFzIHNwZWNpZmllZAorCWJ5IFVuaWNvZGUpLiAgVGhlIHRlcm1pbmFsIGlzIGFsc28gZXhwZWN0ZWQgdG8gZG8gdGhlIHJlcXVpcmVkIHNoYXBpbmcKKwl0aGF0IHNvbWUgbGFuZ3VhZ2VzIChzdWNoIGFzIEFyYWJpYykgcmVxdWlyZS4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGltcGxpZXMgdGhhdCAncmlnaHRsZWZ0JyB3aWxsIG5vdCBiZSBzZXQgd2hlbgorCSdhcmFiaWMnIGlzIHNldCBhbmQgdGhlIHZhbHVlIG9mICdhcmFiaWNzaGFwZScgd2lsbCBiZSBpZ25vcmVkLgorCU5vdGUgdGhhdCBzZXR0aW5nICd0ZXJtYmlkaScgaGFzIHRoZSBpbW1lZGlhdGUgZWZmZWN0IHRoYXQKKwknYXJhYmljc2hhcGUnIGlzIGlnbm9yZWQsIGJ1dCAncmlnaHRsZWZ0JyBpc24ndCBjaGFuZ2VkIGF1dG9tYXRpY2FsbHkuCisJVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiB0aGUgR1VJIGlzIHN0YXJ0ZWQuCisJRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWUgfGFyYWJpYy50eHR8LgorCisJCQkJCSondGVybWVuY29kaW5nJyogKid0ZW5jJyoKKyd0ZXJtZW5jb2RpbmcnICd0ZW5jJwlzdHJpbmcJKGRlZmF1bHQgIiI7IHdpdGggR1RLKyAyIEdVSTogInV0Zi04Ijsgd2l0aAorCQkJCQkJICAgIE1hY2ludG9zaCBHVUk6ICJtYWNyb21hbiIpCisJCQlnbG9iYWwKKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCUVuY29kaW5nIHVzZWQgZm9yIHRoZSB0ZXJtaW5hbC4gIFRoaXMgc3BlY2lmaWVzIHdoYXQgY2hhcmFjdGVyCisJZW5jb2RpbmcgdGhlIGtleWJvYXJkIHByb2R1Y2VzIGFuZCB0aGUgZGlzcGxheSB3aWxsIHVuZGVyc3RhbmQuICBGb3IKKwl0aGUgR1VJIGl0IG9ubHkgYXBwbGllcyB0byB0aGUga2V5Ym9hcmQgKCdlbmNvZGluZycgaXMgdXNlZCBmb3IgdGhlCisJZGlzcGxheSkuCisJSW4gdGhlIFdpbjMyIGNvbnNvbGUgdmVyc2lvbiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY29uc29sZSBjb2RlcGFnZQorCXdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBBTlNJIGNvZGVwYWdlLgorCQkJCQkJCQkqRTYxNyoKKwlOb3RlOiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBHVEsrIDIgR1VJLiAgQWZ0ZXIgdGhlIEdVSSBoYXMgYmVlbgorCXN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCwgJ3Rlcm1lbmNvZGluZycgaXMgZm9yY2libHkgc2V0IHRvICJ1dGYtOCIuCisJQW55IGF0dGVtcHRzIHRvIHNldCBhIGRpZmZlcmVudCB2YWx1ZSB3aWxsIGJlIHJlamVjdGVkLCBhbmQgYW4gZXJyb3IKKwltZXNzYWdlIGlzIHNob3duLgorCUZvciB0aGUgV2luMzIgR1VJICd0ZXJtZW5jb2RpbmcnIGlzIG5vdCB1c2VkIGZvciB0eXBlZCBjaGFyYWN0ZXJzLAorCWJlY2F1c2UgdGhlIFdpbjMyIHN5c3RlbSBhbHdheXMgcGFzc2VzIFVuaWNvZGUgY2hhcmFjdGVycy4KKwlXaGVuIGVtcHR5LCB0aGUgc2FtZSBlbmNvZGluZyBpcyB1c2VkIGFzIGZvciB0aGUgJ2VuY29kaW5nJyBvcHRpb24uCisJVGhpcyBpcyB0aGUgbm9ybWFsIHZhbHVlLgorCU5vdCBhbGwgY29tYmluYXRpb25zIGZvciAndGVybWVuY29kaW5nJyBhbmQgJ2VuY29kaW5nJyBhcmUgdmFsaWQuICBTZWUKKwl8ZW5jb2RpbmctdGFibGV8LgorCVRoZSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gbXVzdCBiZSBzdXBwb3J0ZWQgYnkgaW50ZXJuYWwgY29udmVyc2lvbnMgb3IKKwlpY29udigpLiAgV2hlbiB0aGlzIGlzIG5vdCBwb3NzaWJsZSBubyBjb252ZXJzaW9uIHdpbGwgYmUgZG9uZSBhbmQgeW91CisJd2lsbCBwcm9iYWJseSBleHBlcmllbmNlIHByb2JsZW1zIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisJRXhhbXBsZTogWW91IGFyZSB3b3JraW5nIHdpdGggdGhlIGxvY2FsZSBzZXQgdG8gZXVjLWpwIChKYXBhbmVzZSkgYW5kCisJd2FudCB0byBlZGl0IGEgVVRGLTggZmlsZTogPgorCQk6bGV0ICZ0ZXJtZW5jb2RpbmcgPSAmZW5jb2RpbmcKKwkJOnNldCBlbmNvZGluZz11dGYtOAorPAlZb3UgbmVlZCB0byBkbyB0aGlzIHdoZW4geW91ciBzeXN0ZW0gaGFzIG5vIGxvY2FsZSBzdXBwb3J0IGZvciBVVEYtOC4KKworCQkJCQkJKid0ZXJzZScqIConbm90ZXJzZScqCisndGVyc2UnCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwlXaGVuIHNldDogQWRkICdzJyBmbGFnIHRvICdzaG9ydG1lc3MnIG9wdGlvbiAodGhpcyBtYWtlcyB0aGUgbWVzc2FnZQorCWZvciBhIHNlYXJjaCB0aGF0IGhpdHMgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgZmlsZSBub3QgYmVpbmcKKwlkaXNwbGF5ZWQpLiAgV2hlbiByZXNldDogUmVtb3ZlICdzJyBmbGFnIGZyb20gJ3Nob3J0bWVzcycgb3B0aW9uLiAge1ZpCisJc2hvcnRlbnMgYSBsb3Qgb2YgbWVzc2FnZXN9CisKKwkJCQkgICAqJ3RleHRhdXRvJyogKid0YScqIConbm90ZXh0YXV0bycqIConbm90YScqCisndGV4dGF1dG8nICd0YScJCWJvb2xlYW4JKFZpbSBkZWZhdWx0OiBvbiwgVmkgZGVmYXVsdDogb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGlzIG9ic29sZXRlLiAgVXNlICdmaWxlZm9ybWF0cycuCisJRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3aGVuICd0ZXh0YXV0bycgaXMgc2V0LCAnZmlsZWZvcm1hdHMnIGlzCisJc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY3VycmVudCBzeXN0ZW0uICBXaGVuICd0ZXh0YXV0bycgaXMKKwlyZXNldCwgJ2ZpbGVmb3JtYXRzJyBpcyBtYWRlIGVtcHR5LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJICAgKid0ZXh0bW9kZScqICondHgnKiAqJ25vdGV4dG1vZGUnKiAqJ25vdHgnKgorJ3RleHRtb2RlJyAndHgnCQlib29sZWFuCShNUy1ET1MsIFdpbjMyIGFuZCBPUy8yOiBkZWZhdWx0IG9uLAorCQkJCSBvdGhlcnM6IGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGlzIG9ic29sZXRlLiAgVXNlICdmaWxlZm9ybWF0Jy4KKwlGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gJ3RleHRtb2RlJyBpcyBzZXQsICdmaWxlZm9ybWF0JyBpcworCXNldCB0byAiZG9zIi4gIFdoZW4gJ3RleHRtb2RlJyBpcyByZXNldCwgJ2ZpbGVmb3JtYXQnIGlzIHNldCB0bworCSJ1bml4Ii4KKworCQkJCQkJKid0ZXh0d2lkdGgnKiAqJ3R3JyoKKyd0ZXh0d2lkdGgnICd0dycJbnVtYmVyCShkZWZhdWx0IDApCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJTWF4aW11bSB3aWR0aCBvZiB0ZXh0IHRoYXQgaXMgYmVpbmcgaW5zZXJ0ZWQuICBBIGxvbmdlciBsaW5lIHdpbGwgYmUKKwlicm9rZW4gYWZ0ZXIgd2hpdGUgc3BhY2UgdG8gZ2V0IHRoaXMgd2lkdGguICBBIHplcm8gdmFsdWUgZGlzYWJsZXMKKwl0aGlzLiAgJ3RleHR3aWR0aCcgaXMgc2V0IHRvIDAgd2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgc2V0LglXaGVuCisJJ3RleHR3aWR0aCcgaXMgemVybywgJ3dyYXBtYXJnaW4nIG1heSBiZSB1c2VkLglTZWUgYWxzbworCSdmb3JtYXRvcHRpb25zJyBhbmQgfGlucy10ZXh0d2lkdGh8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byAwIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKid0aGVzYXVydXMnKiAqJ3RzcicqCisndGhlc2F1cnVzJyAndHNyJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCUxpc3Qgb2YgZmlsZSBuYW1lcywgc2VwYXJhdGVkIGJ5IGNvbW1hcywgdGhhdCBhcmUgdXNlZCB0byBsb29rdXAgd29yZHMKKwlmb3IgdGhlc2F1cnVzIGNvbXBsZXRpb24gY29tbWFuZHMgfGlfQ1RSTC1YX0NUUkwtVHwuCUVhY2ggbGluZSBpbgorCXRoZSBmaWxlIHNob3VsZCBjb250YWluIHdvcmRzIHdpdGggc2ltaWxhciBtZWFuaW5nLCBzZXBhcmF0ZWQgYnkKKwlub24ta2V5d29yZCBjaGFyYWN0ZXJzICh3aGl0ZSBzcGFjZSBpcyBwcmVmZXJyZWQpLiAgTWF4aW11bSBsaW5lCisJbGVuZ3RoIGlzIDUxMCBieXRlcy4KKwlUbyBvYnRhaW4gYSBmaWxlIHRvIGJlIHVzZWQgaGVyZSwgY2hlY2sgb3V0IHRoZSB3b3JkbGlzdCBGQVEgYXQKKwlodHRwOi8vd3d3Lmh5cGhlbm9sb2dpc3QuY28udWsgLgorCVRvIGluY2x1ZGUgYSBjb21tYSBpbiBhIGZpbGUgbmFtZSBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2guCVNwYWNlcworCWFmdGVyIGEgY29tbWEgYXJlIGlnbm9yZWQsIG90aGVyd2lzZSBzcGFjZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBmaWxlCisJbmFtZS4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgdXNpbmcgYmFja3NsYXNoZXMuCisJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJZGlyZWN0b3JpZXMgZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LgorCUJhY2t0aWNrcyBjYW5ub3QgYmUgdXNlZCBpbiB0aGlzIG9wdGlvbiBmb3Igc2VjdXJpdHkgcmVhc29ucy4KKworCQkJICAgICAqJ3RpbGRlb3AnKiAqJ3RvcCcqIConbm90aWxkZW9wJyogKidub3RvcCcqCisndGlsZGVvcCcgJ3RvcCcJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb246IFRoZSB0aWxkZSBjb21tYW5kICJ+IiBiZWhhdmVzIGxpa2UgYW4gb3BlcmF0b3IuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJKid0aW1lb3V0JyogKid0bycqIConbm90aW1lb3V0JyogKidub3RvJyoKKyd0aW1lb3V0JyAndG8nCQlib29sZWFuIChkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQkJCQkqJ3R0aW1lb3V0JyogKidub3R0aW1lb3V0JyoKKyd0dGltZW91dCcJCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZXNlIHR3byBvcHRpb25zIHRvZ2V0aGVyIGRldGVybWluZSB0aGUgYmVoYXZpb3Igd2hlbiBwYXJ0IG9mIGEKKwltYXBwZWQga2V5IHNlcXVlbmNlIG9yIGtleWJvYXJkIGNvZGUgaGFzIGJlZW4gcmVjZWl2ZWQ6CisKKwkndGltZW91dCcgICAgJ3R0aW1lb3V0JwkJYWN0aW9uCX4KKwkgICBvZmYJCW9mZgkJZG8gbm90IHRpbWUgb3V0CisJICAgb24JCW9uIG9yIG9mZgl0aW1lIG91dCBvbiA6bWFwcGluZ3MgYW5kIGtleSBjb2RlcworCSAgIG9mZgkJb24JCXRpbWUgb3V0IG9uIGtleSBjb2RlcworCisJSWYgYm90aCBvcHRpb25zIGFyZSBvZmYsIFZpbSB3aWxsIHdhaXQgdW50aWwgZWl0aGVyIHRoZSBjb21wbGV0ZQorCW1hcHBpbmcgb3Iga2V5IHNlcXVlbmNlIGhhcyBiZWVuIHJlY2VpdmVkLCBvciBpdCBpcyBjbGVhciB0aGF0IHRoZXJlCisJaXMgbm8gbWFwcGluZyBvciBrZXkgc2VxdWVuY2UgZm9yIHRoZSByZWNlaXZlZCBjaGFyYWN0ZXJzLiAgRm9yCisJZXhhbXBsZTogaWYgeW91IGhhdmUgbWFwcGVkICJ2bCIgYW5kIFZpbSBoYXMgcmVjZWl2ZWQgJ3YnLCB0aGUgbmV4dAorCWNoYXJhY3RlciBpcyBuZWVkZWQgdG8gc2VlIGlmIHRoZSAndicgaXMgZm9sbG93ZWQgYnkgYW4gJ2wnLgorCVdoZW4gb25lIG9mIHRoZSBvcHRpb25zIGlzIG9uLCBWaW0gd2lsbCB3YWl0IGZvciBhYm91dCAxIHNlY29uZCBmb3IKKwl0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYXJyaXZlLiAgQWZ0ZXIgdGhhdCB0aGUgYWxyZWFkeSByZWNlaXZlZAorCWNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIHNpbmdsZSBjaGFyYWN0ZXJzLiAgVGhlIHdhaXRpbmcgdGltZSBjYW4KKwliZSBjaGFuZ2VkIHdpdGggdGhlICd0aW1lb3V0bGVuJyBvcHRpb24uCisJT24gc2xvdyB0ZXJtaW5hbHMgb3IgdmVyeSBidXN5IHN5c3RlbXMgdGltaW5nIG91dCBtYXkgY2F1c2UKKwltYWxmdW5jdGlvbmluZyBjdXJzb3Iga2V5cy4gIElmIGJvdGggb3B0aW9ucyBhcmUgb2ZmLCBWaW0gd2FpdHMKKwlmb3JldmVyIGFmdGVyIGFuIGVudGVyZWQgPEVzYz4gaWYgdGhlcmUgYXJlIGtleSBjb2RlcyB0aGF0IHN0YXJ0CisJd2l0aCA8RXNjPi4gIFlvdSB3aWxsIGhhdmUgdG8gdHlwZSA8RXNjPiB0d2ljZS4gIElmIHlvdSBkbyBub3QgaGF2ZQorCXByb2JsZW1zIHdpdGgga2V5IGNvZGVzLCBidXQgd291bGQgbGlrZSB0byBoYXZlIDptYXBwZWQga2V5CisJc2VxdWVuY2VzIG5vdCB0aW1pbmcgb3V0IGluIDEgc2Vjb25kLCBzZXQgdGhlICd0dGltZW91dCcgb3B0aW9uIGFuZAorCXJlc2V0IHRoZSAndGltZW91dCcgb3B0aW9uLgorCisJTk9URTogJ3R0aW1lb3V0JyBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSondGltZW91dGxlbicqICondG0nKgorJ3RpbWVvdXRsZW4nICd0bScJbnVtYmVyCShkZWZhdWx0IDEwMDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gYWxsIHZlcnNpb25zIG9mIFZpfQorCQkJCQkJKid0dGltZW91dGxlbicqICondHRtJyoKKyd0dGltZW91dGxlbicgJ3R0bScJbnVtYmVyCShkZWZhdWx0IC0xKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IGlzIHdhaXRlZCBmb3IgYSBrZXkgY29kZSBvciBtYXBwZWQga2V5CisJc2VxdWVuY2UgdG8gY29tcGxldGUuICBBbHNvIHVzZWQgZm9yIENUUkwtXCBDVFJMLU4gYW5kIENUUkwtXCBDVFJMLUcKKwl3aGVuIHBhcnQgb2YgYSBjb21tYW5kIGhhcyBiZWVuIHR5cGVkLgorCU5vcm1hbGx5IG9ubHkgJ3RpbWVvdXRsZW4nIGlzIHVzZWQgYW5kICd0dGltZW91dGxlbicgaXMgLTEuICBXaGVuIGEKKwlkaWZmZXJlbnQgdGltZW91dCB2YWx1ZSBmb3Iga2V5IGNvZGVzIGlzIGRlc2lyZWQgc2V0ICd0dGltZW91dGxlbicgdG8KKwlhIG5vbi1uZWdhdGl2ZSBudW1iZXIuCisKKwkJdHRpbWVvdXRsZW4JbWFwcGluZyBkZWxheQkgICBrZXkgY29kZSBkZWxheQl+CisJCSAgIDwgMAkJJ3RpbWVvdXRsZW4nCSAgICd0aW1lb3V0bGVuJworCQkgID49IDAJCSd0aW1lb3V0bGVuJwkgICAndHRpbWVvdXRsZW4nCisKKwlUaGUgdGltZW91dCBvbmx5IGhhcHBlbnMgd2hlbiB0aGUgJ3RpbWVvdXQnIGFuZCAndHRpbWVvdXQnIG9wdGlvbnMKKwl0ZWxsIHNvLiAgQSB1c2VmdWwgc2V0dGluZyB3b3VsZCBiZSA+CisJCTpzZXQgdGltZW91dCB0aW1lb3V0bGVuPTMwMDAgdHRpbWVvdXRsZW49MTAwCis8CSh0aW1lIG91dCBvbiBtYXBwaW5nIGFmdGVyIHRocmVlIHNlY29uZHMsIHRpbWUgb3V0IG9uIGtleSBjb2RlcyBhZnRlcgorCWEgdGVudGggb2YgYSBzZWNvbmQpLgorCisJCQkJCQkqJ3RpdGxlJyogKidub3RpdGxlJyoKKyd0aXRsZScJCQlib29sZWFuCShkZWZhdWx0IG9mZiwgb24gd2hlbiB0aXRsZSBjYW4gYmUgcmVzdG9yZWQpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdGl0bGV8CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHRoZSB0aXRsZSBvZiB0aGUgd2luZG93IHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZgorCSd0aXRsZXN0cmluZycgKGlmIGl0IGlzIG5vdCBlbXB0eSksIG9yIHRvOgorCQlmaWxlbmFtZSBbKz0tXSAocGF0aCkgLSBWSU0KKwlXaGVyZToKKwkJZmlsZW5hbWUJdGhlIG5hbWUgb2YgdGhlIGZpbGUgYmVpbmcgZWRpdGVkCisJCS0JCWluZGljYXRlcyB0aGUgZmlsZSBjYW5ub3QgYmUgbW9kaWZpZWQsICdtYScgb2ZmCisJCSsJCWluZGljYXRlcyB0aGUgZmlsZSB3YXMgbW9kaWZpZWQKKwkJPQkJaW5kaWNhdGVzIHRoZSBmaWxlIGlzIHJlYWQtb25seQorCQk9KwkJaW5kaWNhdGVzIHRoZSBmaWxlIGlzIHJlYWQtb25seSBhbmQgbW9kaWZpZWQKKwkJKHBhdGgpCQlpcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSBiZWluZyBlZGl0ZWQKKwkJLSBWSU0JCXRoZSBzZXJ2ZXIgbmFtZSB8djpzZXJ2ZXJuYW1lfCBvciAiVklNIgorCU9ubHkgd29ya3MgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIHNldHRpbmcgd2luZG93IHRpdGxlcworCShjdXJyZW50bHkgQW1pZ2EgY29uc29sZSwgV2luMzIgY29uc29sZSwgYWxsIEdVSSB2ZXJzaW9ucyBhbmQKKwl0ZXJtaW5hbHMgd2l0aCBhIG5vbi0gZW1wdHkgJ3RfdHMnIG9wdGlvbiAtIHRoZXNlIGFyZSBVbml4IHh0ZXJtIGFuZAorCWlyaXMtYW5zaSBieSBkZWZhdWx0LCB3aGVyZSAndF90cycgaXMgdGFrZW4gZnJvbSB0aGUgYnVpbHRpbiB0ZXJtY2FwKS4KKwkJCQkJCQkJKlgxMSoKKwlXaGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCBIQVZFX1gxMSBkZWZpbmVkLCB0aGUgb3JpZ2luYWwgdGl0bGUgd2lsbAorCWJlIHJlc3RvcmVkIGlmIHBvc3NpYmxlLiAgVGhlIG91dHB1dCBvZiAiOnZlcnNpb24iIHdpbGwgaW5jbHVkZSAiK1gxMSIKKwl3aGVuIEhBVkVfWDExIHdhcyBkZWZpbmVkLCBvdGhlcndpc2UgaXQgd2lsbCBiZSAiLVgxMSIuICBUaGlzIGFsc28KKwl3b3JrcyBmb3IgdGhlIGljb24gbmFtZSB8J2ljb24nfC4KKwlCdXQ6IFdoZW4gVmltIHdhcyBzdGFydGVkIHdpdGggdGhlIHwtWHwgYXJndW1lbnQsIHJlc3RvcmluZyB0aGUgdGl0bGUKKwl3aWxsIG5vdCB3b3JrIChleGNlcHQgaW4gdGhlIEdVSSkuCisJSWYgdGhlIHRpdGxlIGNhbm5vdCBiZSByZXN0b3JlZCwgaXQgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiAndGl0bGVvbGQnLgorCVlvdSBtaWdodCB3YW50IHRvIHJlc3RvcmUgdGhlIHRpdGxlIG91dHNpZGUgb2YgVmltIHRoZW4uCisJV2hlbiB1c2luZyBhbiB4dGVybSBmcm9tIGEgcmVtb3RlIG1hY2hpbmUgeW91IGNhbiB1c2UgdGhpcyBjb21tYW5kOgorCSAgICByc2ggbWFjaGluZV9uYW1lIHh0ZXJtIC1kaXNwbGF5ICRESVNQTEFZICYKKwl0aGVuIHRoZSBXSU5ET1dJRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzaG91bGQgYmUgaW5oZXJpdGVkIGFuZCB0aGUKKwl0aXRsZSBvZiB0aGUgd2luZG93IHNob3VsZCBjaGFuZ2UgYmFjayB0byB3aGF0IGl0IHNob3VsZCBiZSBhZnRlcgorCWV4aXRpbmcgVmltLgorCisJCQkJCQkJCSondGl0bGVsZW4nKgorJ3RpdGxlbGVuJwkJbnVtYmVyCShkZWZhdWx0IDg1KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3RpdGxlfAorCQkJZmVhdHVyZX0KKwlHaXZlcyB0aGUgcGVyY2VudGFnZSBvZiAnY29sdW1ucycgdG8gdXNlIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSB3aW5kb3cKKwl0aXRsZS4JV2hlbiB0aGUgdGl0bGUgaXMgbG9uZ2VyLCBvbmx5IHRoZSBlbmQgb2YgdGhlIHBhdGggbmFtZSBpcworCXNob3duLglBICc8JyBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBwYXRoIG5hbWUgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGlzLgorCVVzaW5nIGEgcGVyY2VudGFnZSBtYWtlcyB0aGlzIGFkYXB0IHRvIHRoZSB3aWR0aCBvZiB0aGUgd2luZG93LiAgQnV0CisJaXQgd29uJ3Qgd29yayBwZXJmZWN0bHksIGJlY2F1c2UgdGhlIGFjdHVhbCBudW1iZXIgb2YgY2hhcmFjdGVycworCWF2YWlsYWJsZSBhbHNvIGRlcGVuZHMgb24gdGhlIGZvbnQgdXNlZCBhbmQgb3RoZXIgdGhpbmdzIGluIHRoZSB0aXRsZQorCWJhci4gIFdoZW4gJ3RpdGxlbGVuJyBpcyB6ZXJvIHRoZSBmdWxsIHBhdGggaXMgdXNlZC4gIE90aGVyd2lzZSwKKwl2YWx1ZXMgZnJvbSAxIHRvIDMwMDAwIHBlcmNlbnQgY2FuIGJlIHVzZWQuCisJJ3RpdGxlbGVuJyBpcyBhbHNvIHVzZWQgZm9yIHRoZSAndGl0bGVzdHJpbmcnIG9wdGlvbi4KKworCQkJCQkJKid0aXRsZW9sZCcqCisndGl0bGVvbGQnCQlzdHJpbmcJKGRlZmF1bHQgIlRoYW5rcyBmb3IgZmx5aW5nIFZpbSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3RpdGxlfAorCQkJZmVhdHVyZX0KKwlUaGlzIG9wdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHRoZSB3aW5kb3cgdGl0bGUgd2hlbiBleGl0aW5nIFZpbSBpZiB0aGUKKwlvcmlnaW5hbCB0aXRsZSBjYW5ub3QgYmUgcmVzdG9yZWQuICBPbmx5IGhhcHBlbnMgaWYgJ3RpdGxlJyBpcyBvbiBvcgorCSd0aXRsZXN0cmluZycgaXMgbm90IGVtcHR5LgorCQkJCQkJKid0aXRsZXN0cmluZycqCisndGl0bGVzdHJpbmcnCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdGl0bGV8CisJCQlmZWF0dXJlfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgbm90IGVtcHR5LCBpdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSB0aXRsZSBvZiB0aGUKKwl3aW5kb3cuICBUaGlzIGhhcHBlbnMgb25seSB3aGVuIHRoZSAndGl0bGUnIG9wdGlvbiBpcyBvbi4KKwlPbmx5IHdvcmtzIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBzZXR0aW5nIHdpbmRvdyB0aXRsZXMgKGN1cnJlbnRseQorCUFtaWdhIGNvbnNvbGUsIFdpbjMyIGNvbnNvbGUsIGFsbCBHVUkgdmVyc2lvbnMgYW5kIHRlcm1pbmFscyB3aXRoIGEKKwlub24tZW1wdHkgJ3RfdHMnIG9wdGlvbikuCisJV2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggSEFWRV9YMTEgZGVmaW5lZCwgdGhlIG9yaWdpbmFsIHRpdGxlIHdpbGwKKwliZSByZXN0b3JlZCBpZiBwb3NzaWJsZSB8WDExfC4KKwlXaGVuIHRoaXMgb3B0aW9uIGNvbnRhaW5zIHByaW50Zi1zdHlsZSAnJScgaXRlbXMsIHRoZXkgd2lsbCBiZQorCWV4cGFuZGVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgdXNlZCBmb3IgJ3N0YXR1c2xpbmUnLgorCUV4YW1wbGU6ID4KKyAgICA6YXV0byBCdWZFbnRlciAqIGxldCAmdGl0bGVzdHJpbmcgPSBob3N0bmFtZSgpIC4gIi8iIC4gZXhwYW5kKCIlOnAiKQorICAgIDpzZXQgdGl0bGUgdGl0bGVzdHJpbmc9JTwlRiU9JWwvJUwtJVAgdGl0bGVsZW49NzAKKzwJVGhlIHZhbHVlIG9mICd0aXRsZWxlbicgaXMgdXNlZCB0byBhbGlnbiBpdGVtcyBpbiB0aGUgbWlkZGxlIG9yIHJpZ2h0CisJb2YgdGhlIGF2YWlsYWJsZSBzcGFjZS4KKwlTb21lIHBlb3BsZSBwcmVmZXIgdG8gaGF2ZSB0aGUgZmlsZSBuYW1lIGZpcnN0OiA+CisgICAgOnNldCB0aXRsZXN0cmluZz0ldCUoXCAlTSUpJShcICgle2V4cGFuZChcIiU6fjouOmhcIil9KSUpJShcICVhJSkKKzwJTm90ZSB0aGUgdXNlIG9mICIleyB9IiBhbmQgYW4gZXhwcmVzc2lvbiB0byBnZXQgdGhlIHBhdGggb2YgdGhlIGZpbGUsCisJd2l0aG91dCB0aGUgZmlsZSBuYW1lLglUaGUgIiUoICUpIiBjb25zdHJ1Y3RzIGFyZSB1c2VkIHRvIGFkZCBhCisJc2VwYXJhdGluZyBzcGFjZSBvbmx5IHdoZW4gbmVlZGVkLgorCU5PVEU6IFVzZSBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gJ3RpdGxlc3RyaW5nJyBtYXkgY2F1c2UgdGhlIGRpc3BsYXkKKwl0byBiZSBnYXJibGVkIChlLmcuLCB3aGVuIGl0IGNvbnRhaW5zIGEgQ1Igb3IgTkwgY2hhcmFjdGVyKS4KKwl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrc3RhdHVzbGluZXwgZmVhdHVyZX0KKworCQkJCSondG9vbGJhcicqICondGInKgorJ3Rvb2xiYXInICd0YicJCXN0cmluZwkoZGVmYXVsdCAiaWNvbnMsdG9vbHRpcHMiKQorCQkJZ2xvYmFsCisJCQl7b25seSBmb3IgfCtHVUlfR1RLfCwgfCtHVUlfQXRoZW5hfCwgfCtHVUlfTW90aWZ8IGFuZAorCQkJfCtHVUlfUGhvdG9ufH0KKwlUaGUgY29udGVudHMgb2YgdGhpcyBvcHRpb24gY29udHJvbHMgdmFyaW91cyB0b29sYmFyIHNldHRpbmdzLglUaGUKKwlwb3NzaWJsZSB2YWx1ZXMgYXJlOgorCQlpY29ucwkJVG9vbGJhciBidXR0b25zIGFyZSBzaG93biB3aXRoIGljb25zLgorCQl0ZXh0CQlUb29sYmFyIGJ1dHRvbnMgc2hvd24gd2l0aCB0ZXh0LgorCQlob3JpegkJSWNvbiBhbmQgdGV4dCBvZiBhIHRvb2xiYXIgYnV0dG9uIGFyZQorCQkJCWhvcml6b250YWxseSBhcnJhbmdlZC4Je29ubHkgaW4gR1RLKyAyIEdVSX0KKwkJdG9vbHRpcHMJVG9vbHRpcHMgYXJlIGFjdGl2ZSBmb3IgdG9vbGJhciBidXR0b25zLgorCVRvb2x0aXBzIHJlZmVyIHRvIHRoZSBwb3B1cCBoZWxwIHRleHQgd2hpY2ggYXBwZWFycyBhZnRlciB0aGUgbW91c2UKKwljdXJzb3IgaXMgcGxhY2VkIG92ZXIgYSB0b29sYmFyIGJ1dHRvbiBmb3IgYSBicmllZiBtb21lbnQuCisKKwlJZiB5b3Ugd2FudCB0aGUgdG9vbGJhciB0byBiZSBzaG93biB3aXRoIGljb25zIGFzIHdlbGwgYXMgdGV4dCwgZG8gdGhlCisJZm9sbG93aW5nOiA+CisJCTpzZXQgdGI9aWNvbnMsdGV4dAorPAlNb3RpZiBhbmQgQXRoZW5hIGNhbm5vdCBkaXNwbGF5IGljb25zIGFuZCB0ZXh0IGF0IHRoZSBzYW1lIHRpbWUuICBUaGV5CisJd2lsbCBzaG93IGljb25zIGlmIGJvdGggYXJlIHJlcXVlc3RlZC4KKworCUlmIG5vbmUgb2YgdGhlIHN0cmluZ3Mgc3BlY2lmaWVkIGluICd0b29sYmFyJyBhcmUgdmFsaWQgb3IgaWYKKwkndG9vbGJhcicgaXMgZW1wdHksIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuICBJZiB5b3Ugd2FudCB0byBkaXNhYmxlCisJdGhlIHRvb2xiYXIsIHlvdSBuZWVkIHRvIHNldCB0aGUgJ2d1aW9wdGlvbnMnIG9wdGlvbi4gIEZvciBleGFtcGxlOiA+CisJCTpzZXQgZ3Vpb3B0aW9ucy09VAorPAlBbHNvIHNlZSB8Z3VpLXRvb2xiYXJ8LgorCisJCQkJCQkqJ3Rvb2xiYXJpY29uc2l6ZScqICondGJpcycqCisndG9vbGJhcmljb25zaXplJyAndGJpcycJc3RyaW5nCShkZWZhdWx0ICJzbWFsbCIpCisJCQkJZ2xvYmFsCisJCQkJe25vdCBpbiBWaX0KKwkJCQl7b25seSBpbiB0aGUgR1RLKyAyIEdVSX0KKwlDb250cm9scyB0aGUgc2l6ZSBvZiB0b29sYmFyIGljb25zLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6CisJCXRpbnkJCVVzZSB0aW55IHRvb2xiYXIgaWNvbnMuCisJCXNtYWxsCQlVc2Ugc21hbGwgdG9vbGJhciBpY29ucyAoZGVmYXVsdCkuCisJCW1lZGl1bQkJVXNlIG1lZGl1bS1zaXplZCB0b29sYmFyIGljb25zLgorCQlsYXJnZQkJVXNlIGxhcmdlIHRvb2xiYXIgaWNvbnMuCisJVGhlIGV4YWN0IGRpbWVuc2lvbnMgaW4gcGl4ZWxzIG9mIHRoZSB2YXJpb3VzIGljb24gc2l6ZXMgZGVwZW5kIG9uCisJdGhlIGN1cnJlbnQgdGhlbWUuICBDb21tb24gZGltZW5zaW9ucyBhcmUgbGFyZ2U9MzJ4MzIsIG1lZGl1bT0yNHgyNCwKKwlzbWFsbD0yMHgyMCBhbmQgdGlueT0xNngxNi4KKworCUlmICd0b29sYmFyaWNvbnNpemUnIGlzIGVtcHR5LCB0aGUgZ2xvYmFsIGRlZmF1bHQgc2l6ZSBhcyBkZXRlcm1pbmVkCisJYnkgdXNlciBwcmVmZXJlbmNlcyBvciB0aGUgY3VycmVudCB0aGVtZSBpcyB1c2VkLgorCisJCQkgICAgICondHR5YnVpbHRpbicqICondGJpJyogKidub3R0eWJ1aWx0aW4nKiAqJ25vdGJpJyoKKyd0dHlidWlsdGluJyAndGJpJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24sIHRoZSBidWlsdGluIHRlcm1jYXBzIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGV4dGVybmFsIG9uZXMuCisJV2hlbiBvZmYgdGhlIGJ1aWx0aW4gdGVybWNhcHMgYXJlIHNlYXJjaGVkIGFmdGVyIHRoZSBleHRlcm5hbCBvbmVzLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgY2hhbmdlZCwgeW91IHNob3VsZCBzZXQgdGhlICd0ZXJtJyBvcHRpb24gbmV4dCBmb3IKKwl0aGUgY2hhbmdlIHRvIHRha2UgZWZmZWN0LCBmb3IgZXhhbXBsZTogPgorCQk6c2V0IG5vdGJpIHRlcm09JFRFUk0KKzwJU2VlIGFsc28gfHRlcm1jYXB8LgorCVJhdGlvbmFsZTogVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzICJvbiIsIGJlY2F1c2UgdGhlIGJ1aWx0aW4KKwl0ZXJtY2FwIGVudHJpZXMgYXJlIGdlbmVyYWxseSBiZXR0ZXIgKG1hbnkgc3lzdGVtcyBjb250YWluIGZhdWx0eQorCXh0ZXJtIGVudHJpZXMuLi4pLgorCisJCQkJICAgICAqJ3R0eWZhc3QnKiAqJ3RmJyogKidub3R0eWZhc3QnKiAqJ25vdGYnKgorJ3R0eWZhc3QnICd0ZicJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmLCBvbiB3aGVuICd0ZXJtJyBpcyB4dGVybSwgaHB0ZXJtLAorCQkJCQlzdW4tY21kLCBzY3JlZW4sIHJ4dnQsIGR0dGVybSBvcgorCQkJCQlpcmlzLWFuc2k7IGFsc28gb24gd2hlbiBydW5uaW5nIFZpbSBpbgorCQkJCQlhIERPUyBjb25zb2xlKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUluZGljYXRlcyBhIGZhc3QgdGVybWluYWwgY29ubmVjdGlvbi4gIE1vcmUgY2hhcmFjdGVycyB3aWxsIGJlIHNlbnQgdG8KKwl0aGUgc2NyZWVuIGZvciByZWRyYXdpbmcsIGluc3RlYWQgb2YgdXNpbmcgaW5zZXJ0L2RlbGV0ZSBsaW5lCisJY29tbWFuZHMuICBJbXByb3ZlcyBzbW9vdGhuZXNzIG9mIHJlZHJhd2luZyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQorCXdpbmRvd3MgYW5kIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IGEgc2Nyb2xsaW5nIHJlZ2lvbi4KKwlBbHNvIGVuYWJsZXMgdGhlIGV4dHJhIHdyaXRpbmcgb2YgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVuCisJbGluZSBmb3IgbGluZXMgdGhhdCB3cmFwLiAgVGhpcyBoZWxwcyB3aGVuIHVzaW5nIGNvcHkvcGFzdGUgd2l0aCB0aGUKKwltb3VzZSBpbiBhbiB4dGVybSBhbmQgb3RoZXIgdGVybWluYWxzLgorCisJCQkJCQkqJ3R0eW1vdXNlJyogKid0dHltJyoKKyd0dHltb3VzZScgJ3R0eW0nCXN0cmluZwkoZGVmYXVsdCBkZXBlbmRzIG9uICd0ZXJtJykKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGluIFVuaXggYW5kIFZNUywgZG9lc24ndCB3b3JrIGluIHRoZSBHVUk7IG5vdAorCQkJYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB8K21vdXNlfH0KKwlOYW1lIG9mIHRoZSB0ZXJtaW5hbCB0eXBlIGZvciB3aGljaCBtb3VzZSBjb2RlcyBhcmUgdG8gYmUgcmVjb2duaXplZC4KKwlDdXJyZW50bHkgdGhlc2UgdGhyZWUgc3RyaW5ncyBhcmUgdmFsaWQ6CisJCQkJCQkJKnh0ZXJtLW1vdXNlKgorCSAgIHh0ZXJtCXh0ZXJtLWxpa2UgbW91c2UgaGFuZGxpbmcuICBUaGUgbW91c2UgZ2VuZXJhdGVzCisJCQkiPEVzYz5bTXNjciIsIHdoZXJlICJzY3IiIGlzIHRocmVlIGJ5dGVzOgorCQkJCSJzIiAgPSBidXR0b24gc3RhdGUKKwkJCQkiYyIgID0gY29sdW1uIHBsdXMgMzMKKwkJCQkiciIgID0gcm93IHBsdXMgMzMKKwkgICB4dGVybTIJV29ya3MgbGlrZSAieHRlcm0iLCBidXQgd2l0aCB0aGUgeHRlcm0gcmVwb3J0aW5nIHRoZQorCQkJbW91c2UgcG9zaXRpb24gd2hpbGUgdGhlIG1vdXNlIGlzIGRyYWdnZWQuICBUaGlzIHdvcmtzCisJCQltdWNoIGZhc3RlciBhbmQgbW9yZSBwcmVjaXNlLiAgWW91ciB4dGVybSBtdXN0IGF0CisJCQlsZWFzdCBhdCBwYXRjaGxldmVsIDg4CS8gWEZyZWUgMy4zLjMgZm9yIHRoaXMgdG8KKwkJCXdvcmsuICBTZWUgYmVsb3cgZm9yIGhvdyBWaW0gZGV0ZWN0cyB0aGlzCisJCQlhdXRvbWF0aWNhbGx5LgorCQkJCQkJCSpuZXR0ZXJtLW1vdXNlKgorCSAgIG5ldHRlcm0JTmV0VGVybSBtb3VzZSBoYW5kbGluZy4gIFRoZSBtb3VzZSBnZW5lcmF0ZXMKKwkJCSI8RXNjPn1yLGM8Q1I+Iiwgd2hlcmUgInIsYyIgYXJlIHR3byBkZWNpbWFsIG51bWJlcnMKKwkJCWZvciB0aGUgcm93IGFuZCBjb2x1bW4uCisJCQkJCQkJKmRlYy1tb3VzZSoKKwkgICBkZWMJCURFQyB0ZXJtaW5hbCBtb3VzZSBoYW5kbGluZy4gIFRoZSBtb3VzZSBnZW5lcmF0ZXMgYQorCQkJcmF0aGVyIGNvbXBsZXggc2VxdWVuY2UsIHN0YXJ0aW5nIHdpdGggIjxFc2M+WyIuCisJCQkJCQkJKmpzYnRlcm0tbW91c2UqCisJICAganNidGVybQlKU0IgdGVybSBtb3VzZSBoYW5kbGluZy4KKwkJCQkJCQkqcHRlcm0tbW91c2UqCisJICAgcHRlcm0JUU5YIHB0ZXJtIG1vdXNlIGhhbmRsaW5nLgorCisJVGhlIG1vdXNlIGhhbmRsaW5nIG11c3QgYmUgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUgfCttb3VzZV94dGVybXwKKwl8K21vdXNlX2RlY3wgfCttb3VzZV9uZXR0ZXJtfC4KKwlPbmx5ICJ4dGVybSIoMikgaXMgcmVhbGx5IHJlY29nbml6ZWQuICBOZXRUZXJtIG1vdXNlIGNvZGVzIGFyZSBhbHdheXMKKwlyZWNvZ25pemVkLCBpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZS4gIERFQyB0ZXJtaW5hbCBtb3VzZSBjb2RlcworCWFyZSByZWNvZ25pemVkIGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLCBhbmQgJ3R0eW1vdXNlJyBpcyBub3QKKwkieHRlcm0iIChiZWNhdXNlIHRoZSB4dGVybSBhbmQgZGVjIG1vdXNlIGNvZGVzIGNvbmZsaWN0KS4KKwlUaGlzIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAieHRlcm0iLCB3aGVuIHRoZSAndGVybScgb3B0aW9uIGlzCisJc2V0IHRvIGEgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoICJ4dGVybSIsIGFuZCAndHR5bW91c2UnIGlzIG5vdCAieHRlcm0iCisJb3IgInh0ZXJtMiIgYWxyZWFkeS4gIFRoZSBtYWluIHVzZSBvZiB0aGlzIG9wdGlvbiBpcyB0byBzZXQgaXQgdG8KKwkieHRlcm0iLCB3aGVuIHRoZSB0ZXJtaW5hbCBuYW1lIGRvZXNuJ3Qgc3RhcnQgd2l0aCAieHRlcm0iLCBidXQgaXQgY2FuCisJaGFuZGxlIHh0ZXJtIG1vdXNlIGNvZGVzLgorCVRoZSAieHRlcm0yIiB2YWx1ZSB3aWxsIGJlIHNldCBpZiB0aGUgeHRlcm0gdmVyc2lvbiBpcyByZXBvcnRlZCB0byBiZQorCTk1IG9mIGhpZ2hlci4gIFRoaXMgb25seSB3b3JrcyB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrdGVybXJlc3BvbnNlfAorCWZlYXR1cmUgYW5kIGlmIHx0X1JWfCBpcyBzZXQgdG8gdGhlIGVzY2FwZSBzZXF1ZW5jZSB0byByZXF1ZXN0IHRoZQorCXh0ZXJtIHZlcnNpb24gbnVtYmVyLiAgT3RoZXJ3aXNlICJ4dGVybTIiIG11c3QgYmUgc2V0IGV4cGxpY2l0bHkuCisJSWYgeW91IGRvIG5vdCB3YW50ICd0dHltb3VzZScgdG8gYmUgc2V0IHRvICJ4dGVybTIiIGF1dG9tYXRpY2FsbHksIHNldAorCXRfUlYgdG8gYW4gZW1wdHkgc3RyaW5nOiA+CisJCTpzZXQgdF9SVj0KKzwKKwkJCQkJCSondHR5c2Nyb2xsJyogKid0c2wnKgorJ3R0eXNjcm9sbCcgJ3RzbCcJbnVtYmVyCShkZWZhdWx0IDk5OSkKKwkJCWdsb2JhbAorCU1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCB0aGUgc2NyZWVuLiAgSWYgdGhlcmUgYXJlIG1vcmUgbGluZXMKKwl0byBzY3JvbGwgdGhlIHdpbmRvdyBpcyByZWRyYXduLiAgRm9yIHRlcm1pbmFscyB3aGVyZSBzY3JvbGxpbmcgaXMKKwl2ZXJ5IHNsb3cgYW5kIHJlZHJhd2luZyBpcyBub3Qgc2xvdyB0aGlzIGNhbiBiZSBzZXQgdG8gYSBzbWFsbCBudW1iZXIsCisJZS5nLiwgMywgdG8gc3BlZWQgdXAgZGlzcGxheWluZy4KKworCQkJCQkJKid0dHl0eXBlJyogKid0dHknKgorJ3R0eXR5cGUnICd0dHknCQlzdHJpbmcJKGRlZmF1bHQgZnJvbSAkVEVSTSkKKwkJCWdsb2JhbAorCUFsaWFzIGZvciAndGVybScsIHNlZSBhYm92ZS4KKworCQkJCQkJKid1bmRvbGV2ZWxzJyogKid1bCcqCisndW5kb2xldmVscycgJ3VsJwludW1iZXIJKGRlZmF1bHQgMTAwLCAxMDAwIGZvciBVbml4LCBWTVMsCisJCQkJCQlXaW4zMiBhbmQgT1MvMikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYXhpbXVtIG51bWJlciBvZiBjaGFuZ2VzIHRoYXQgY2FuIGJlIHVuZG9uZS4gIFNpbmNlIHVuZG8gaW5mb3JtYXRpb24KKwlpcyBrZXB0IGluIG1lbW9yeSwgaGlnaGVyIG51bWJlcnMgd2lsbCBjYXVzZSBtb3JlIG1lbW9yeSB0byBiZSB1c2VkCisJKG5ldmVydGhlbGVzcywgYSBzaW5nbGUgY2hhbmdlIGNhbiB1c2UgYW4gdW5saW1pdGVkIGFtb3VudCBvZiBtZW1vcnkpLgorCVNldCB0byAwIGZvciBWaSBjb21wYXRpYmlsaXR5OiBPbmUgbGV2ZWwgb2YgdW5kbyBhbmQgInUiIHVuZG9lcworCWl0c2VsZjogPgorCQlzZXQgdWw9MAorPAlCdXQgeW91IGNhbiBhbHNvIGdldCBWaSBjb21wYXRpYmlsaXR5IGJ5IGluY2x1ZGluZyB0aGUgJ3UnIGZsYWcgaW4KKwknY3BvcHRpb25zJywgYW5kIHN0aWxsIGJlIGFibGUgdG8gdXNlIENUUkwtUiB0byByZXBlYXQgdW5kby4KKwlTZXQgdG8gYSBuZWdhdGl2ZSBudW1iZXIgZm9yIG5vIHVuZG8gYXQgYWxsOiA+CisJCXNldCB1bD0tMQorPAlUaGlzIGhlbHBzIHdoZW4geW91IHJ1biBvdXQgb2YgbWVtb3J5IGZvciBhIHNpbmdsZSBjaGFuZ2UuCisJQWxzbyBzZWUgfHVuZG8tdHdvLXdheXN8LgorCisJCQkJCQkqJ3VwZGF0ZWNvdW50JyogKid1YycqCisndXBkYXRlY291bnQnICd1YycJbnVtYmVyCShkZWZhdWx0OiAyMDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQWZ0ZXIgdHlwaW5nIHRoaXMgbWFueSBjaGFyYWN0ZXJzIHRoZSBzd2FwIGZpbGUgd2lsbCBiZSB3cml0dGVuIHRvCisJZGlzay4gIFdoZW4gemVybywgbm8gc3dhcCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhdCBhbGwgKHNlZSBjaGFwdGVyIG9uCisJcmVjb3ZlcnkgfGNyYXNoLXJlY292ZXJ5fCkuICAndXBkYXRlY291bnQnIGlzIHNldCB0byB6ZXJvIGJ5IHN0YXJ0aW5nCisJVmltIHdpdGggdGhlICItbiIgb3B0aW9uLCBzZWUgfHN0YXJ0dXB8LiAgV2hlbiBlZGl0aW5nIGluIHJlYWRvbmx5CisJbW9kZSB0aGlzIG9wdGlvbiB3aWxsIGJlIGluaXRpYWxpemVkIHRvIDEwMDAwLgorCVRoZSBzd2FwZmlsZSBjYW4gYmUgZGlzYWJsZWQgcGVyIGJ1ZmZlciB3aXRoIHwnc3dhcGZpbGUnfC4KKwlXaGVuICd1cGRhdGVjb3VudCcgaXMgc2V0IGZyb20gemVybyB0byBub24temVybywgc3dhcCBmaWxlcyBhcmUKKwljcmVhdGVkIGZvciBhbGwgYnVmZmVycyB0aGF0IGhhdmUgJ3N3YXBmaWxlJyBzZXQuICBXaGVuICd1cGRhdGVjb3VudCcKKwlpcyBzZXQgdG8gemVybywgZXhpc3Rpbmcgc3dhcCBmaWxlcyBhcmUgbm90IGRlbGV0ZWQuCisJQWxzbyBzZWUgfCdzd2Fwc3luYyd8LgorCVRoaXMgb3B0aW9uIGhhcyBubyBtZWFuaW5nIGluIGJ1ZmZlcnMgd2hlcmUgfCdidWZ0eXBlJ3wgaXMgIm5vZmlsZSIKKwlvciAibm93cml0ZSIuCisKKwkJCQkJCSondXBkYXRldGltZScqICondXQnKgorJ3VwZGF0ZXRpbWUnICd1dCcJbnVtYmVyCShkZWZhdWx0IDQwMDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJSWYgdGhpcyBtYW55IG1pbGxpc2Vjb25kcyBub3RoaW5nIGlzIHR5cGVkIHRoZSBzd2FwIGZpbGUgd2lsbCBiZQorCXdyaXR0ZW4gdG8gZGlzayAoc2VlIHxjcmFzaC1yZWNvdmVyeXwpLiAgQWxzbyB1c2VkIGZvciB0aGUKKwl8Q3Vyc29ySG9sZHwgYXV0b2NvbW1hbmQgZXZlbnQuCisKKwkJCQkJCSondmVyYm9zZScqICondmJzJyoKKyd2ZXJib3NlJyAndmJzJwkJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVmksIGFsdGhvdWdoIHNvbWUgdmVyc2lvbnMgaGF2ZSBhIGJvb2xlYW4KKwkJCXZlcmJvc2Ugb3B0aW9ufQorCVdoZW4gYmlnZ2VyIHRoYW4gemVybywgVmltIHdpbGwgZ2l2ZSBtZXNzYWdlcyBhYm91dCB3aGF0IGl0IGlzIGRvaW5nLgorCUN1cnJlbnRseSwgdGhlc2UgbWVzc2FnZXMgYXJlIGdpdmVuOgorCT49IDEJV2hlbiB0aGUgdmltaW5mbyBmaWxlIGlzIHJlYWQgb3Igd3JpdHRlbi4KKwk+PSAyCVdoZW4gYSBmaWxlIGlzICI6c291cmNlIidlZC4KKwk+PSA1CUV2ZXJ5IHNlYXJjaGVkIHRhZ3MgZmlsZS4KKwk+PSA4CUZpbGVzIGZvciB3aGljaCBhIGdyb3VwIG9mIGF1dG9jb21tYW5kcyBpcyBleGVjdXRlZC4KKwk+PSA5CUV2ZXJ5IGV4ZWN1dGVkIGF1dG9jb21tYW5kLgorCT49IDEyCUV2ZXJ5IGV4ZWN1dGVkIGZ1bmN0aW9uLgorCT49IDEzCVdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93biwgY2F1Z2h0LCBmaW5pc2hlZCwgb3IgZGlzY2FyZGVkLgorCT49IDE0CUFueXRoaW5nIHBlbmRpbmcgaW4gYSAiOmZpbmFsbHkiIGNsYXVzZS4KKwk+PSAxNQlFdmVyeSBleGVjdXRlZCBFeCBjb21tYW5kICh0cnVuY2F0ZWQgYXQgMjAwIGNoYXJhY3RlcnMpLgorCisJVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlICItViIgYXJndW1lbnQuICBTZWUgfC1WfC4KKwlUaGlzIG9wdGlvbiBpcyBhbHNvIHNldCBieSB0aGUgfDp2ZXJib3NlfCBjb21tYW5kLgorCisJCQkJCQkqJ3ZpZXdkaXInKiAqJ3ZkaXInKgorJ3ZpZXdkaXInICd2ZGlyJwlzdHJpbmcJKGRlZmF1bHQgZm9yIEFtaWdhLCBNUy1ET1MsIE9TLzIgYW5kIFdpbjMyOgorCQkJCQkJCSAiJFZJTS92aW1maWxlcy92aWV3IiwKKwkJCQkgZm9yIFVuaXg6ICJ+Ly52aW0vdmlldyIsCisJCQkJIGZvciBNYWNpbnRvc2g6ICIkVklNOnZpbWZpbGVzOnZpZXciCisJCQkJIGZvciBWTVM6ICJzeXMkbG9naW46dmltZmlsZXMvdmlldyIKKwkJCQkgZm9yIFJpc2NPUzogIkNob2ljZXM6dmltZmlsZXMvdmlldyIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtta3Nlc3Npb24KKwkJCWZlYXR1cmV9CisJTmFtZSBvZiB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGZpbGVzIGZvciB8Om1rdmlld3wuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3ZpZXdvcHRpb25zJyogKid2b3AnKgorJ3ZpZXdvcHRpb25zJyAndm9wJwlzdHJpbmcJKGRlZmF1bHQ6ICJmb2xkcyxvcHRpb25zLGN1cnNvciIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtta3Nlc3Npb24KKwkJCWZlYXR1cmV9CisJQ2hhbmdlcyB0aGUgZWZmZWN0IG9mIHRoZSB8Om1rdmlld3wgY29tbWFuZC4gIEl0IGlzIGEgY29tbWEgc2VwYXJhdGVkCisJbGlzdCBvZiB3b3Jkcy4JRWFjaCB3b3JkIGVuYWJsZXMgc2F2aW5nIGFuZCByZXN0b3Jpbmcgc29tZXRoaW5nOgorCSAgIHdvcmQJCXNhdmUgYW5kIHJlc3RvcmUgfgorCSAgIGN1cnNvcgljdXJzb3IgcG9zaXRpb24gaW4gZmlsZSBhbmQgaW4gd2luZG93CisJICAgZm9sZHMJbWFudWFsbHkgY3JlYXRlZCBmb2xkcywgb3BlbmVkL2Nsb3NlZCBmb2xkcyBhbmQgbG9jYWwKKwkJCWZvbGQgb3B0aW9ucworCSAgIG9wdGlvbnMJb3B0aW9ucyBhbmQgbWFwcGluZ3MgbG9jYWwgdG8gYSB3aW5kb3cgb3IgYnVmZmVyIChub3QKKwkJCWdsb2JhbCB2YWx1ZXMgZm9yIGxvY2FsIG9wdGlvbnMpCisJICAgc2xhc2gJYmFja3NsYXNoZXMgaW4gZmlsZSBuYW1lcyByZXBsYWNlZCB3aXRoIGZvcndhcmQKKwkJCXNsYXNoZXMKKwkgICB1bml4CQl3aXRoIFVuaXggZW5kLW9mLWxpbmUgZm9ybWF0IChzaW5nbGUgPE5MPiksIGV2ZW4gd2hlbgorCQkJb24gV2luZG93cyBvciBET1MKKworCSJzbGFzaCIgYW5kICJ1bml4IiBhcmUgdXNlZnVsIG9uIFdpbmRvd3Mgd2hlbiBzaGFyaW5nIHZpZXcgZmlsZXMKKwl3aXRoIFVuaXguICBUaGUgVW5peCB2ZXJzaW9uIG9mIFZpbSBjYW5ub3Qgc291cmNlIGRvcyBmb3JtYXQgc2NyaXB0cywKKwlidXQgdGhlIFdpbmRvd3MgdmVyc2lvbiBvZiBWaW0gY2FuIHNvdXJjZSB1bml4IGZvcm1hdCBzY3JpcHRzLgorCisJCQkJKid2aW1pbmZvJyogKid2aScqICpFNTI2KiAqRTUyNyogKkU1MjgqCisndmltaW5mbycgJ3ZpJwkJc3RyaW5nCShWaSBkZWZhdWx0OiAiIiwgVmltIGRlZmF1bHQgZm9yIE1TLURPUywKKwkJCQkgICBXaW5kb3dzIGFuZCBPUy8yOiAnMjAsPDUwLHMxMCxoLHJBOixyQjosCisJCQkJICAgZm9yIEFtaWdhOiAnMjAsPDUwLHMxMCxoLHJkZjA6LHJkZjE6LHJkZjI6CisJCQkJICAgZm9yIG90aGVyczogJzIwLDw1MCxzMTAsaCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgIHwrdmltaW5mb3wKKwkJCWZlYXR1cmV9CisJV2hlbiBub24tZW1wdHksIHRoZSB2aW1pbmZvIGZpbGUgaXMgcmVhZCB1cG9uIHN0YXJ0dXAgYW5kIHdyaXR0ZW4KKwl3aGVuIGV4aXRpbmcgVmltIChzZWUgfHZpbWluZm8tZmlsZXwpLglUaGUgc3RyaW5nIHNob3VsZCBiZSBhIGNvbW1hCisJc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycywgZWFjaCBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGNoYXJhY3RlcgorCWlkZW50aWZ5aW5nIHRoZSBwYXJ0aWN1bGFyIHBhcmFtZXRlciwgZm9sbG93ZWQgYnkgYSBudW1iZXIgb3Igc3RyaW5nCisJd2hpY2ggc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGF0IHBhcmFtZXRlci4gIElmIGEgcGFydGljdWxhcgorCWNoYXJhY3RlciBpcyBsZWZ0IG91dCwgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkIGZvciB0aGF0CisJcGFyYW1ldGVyLiAgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgdGhlIGlkZW50aWZ5aW5nIGNoYXJhY3RlcnMgYW5kCisJdGhlIGVmZmVjdCBvZiB0aGVpciB2YWx1ZS4KKwlDSEFSCVZBTFVFCX4KKwkhCVdoZW4gaW5jbHVkZWQsIHNhdmUgYW5kIHJlc3RvcmUgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IHN0YXJ0CisJCXdpdGggYW4gdXBwZXJjYXNlIGxldHRlciwgYW5kIGRvbid0IGNvbnRhaW4gYSBsb3dlcmNhc2UKKwkJbGV0dGVyLiAgVGh1cyAiS0VFUFRISVMgYW5kICJLX0xfTSIgYXJlIHN0b3JlZCwgYnV0ICJLZWVwVGhpcyIKKwkJYW5kICJfS19MX00iIGFyZSBub3QuCisJIglNYXhpbXVtIG51bWJlciBvZiBsaW5lcyBzYXZlZCBmb3IgZWFjaCByZWdpc3Rlci4gIE9sZCBuYW1lIG9mCisJCXRoZSAnPCcgaXRlbSwgd2l0aCB0aGUgZGlzYWR2YW50YWdlIHRoYXQgeW91IG5lZWQgdG8gcHV0IGEKKwkJYmFja3NsYXNoIGJlZm9yZSB0aGUgIiwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgcmVjb2duaXplZCBhcyB0aGUKKwkJc3RhcnQgb2YgYSBjb21tZW50IQorCSUJV2hlbiBpbmNsdWRlZCwgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgYnVmZmVyIGxpc3QuICBJZiBWaW0gaXMKKwkJc3RhcnRlZCB3aXRoIGEgZmlsZSBuYW1lIGFyZ3VtZW50LCB0aGUgYnVmZmVyIGxpc3QgaXMgbm90CisJCXJlc3RvcmVkLiAgSWYgVmltIGlzIHN0YXJ0ZWQgd2l0aG91dCBhIGZpbGUgbmFtZSBhcmd1bWVudCwgdGhlCisJCWJ1ZmZlciBsaXN0IGlzIHJlc3RvcmVkIGZyb20gdGhlIHZpbWluZm8gZmlsZS4JQnVmZmVycworCQl3aXRob3V0IGEgZmlsZSBuYW1lIGFuZCBidWZmZXJzIGZvciBoZWxwIGZpbGVzIGFyZSBub3Qgd3JpdHRlbgorCQl0byB0aGUgdmltaW5mbyBmaWxlLgorCScJTWF4aW11bSBudW1iZXIgb2YgcHJldmlvdXNseSBlZGl0ZWQgZmlsZXMgZm9yIHdoaWNoIHRoZSBtYXJrcworCQlhcmUgcmVtZW1iZXJlZC4gIFRoaXMgcGFyYW1ldGVyIG11c3QgYWx3YXlzIGJlIGluY2x1ZGVkIHdoZW4KKwkJJ3ZpbWluZm8nIGlzIG5vbi1lbXB0eS4KKwkJSW5jbHVkaW5nIHRoaXMgaXRlbSBhbHNvIG1lYW5zIHRoYXQgdGhlIHxqdW1wbGlzdHwgYW5kIHRoZQorCQl8Y2hhbmdlbGlzdHwgYXJlIHN0b3JlZCBpbiB0aGUgdmltaW5mbyBmaWxlLgorCS8JTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlYXJjaCBwYXR0ZXJuIGhpc3RvcnkgdG8gYmUKKwkJc2F2ZWQuCUlmIG5vbi16ZXJvLCB0aGVuIHRoZSBwcmV2aW91cyBzZWFyY2ggYW5kIHN1YnN0aXR1dGUKKwkJcGF0dGVybnMgYXJlIGFsc28gc2F2ZWQuICBXaGVuIG5vdCBpbmNsdWRlZCwgdGhlIHZhbHVlIG9mCisJCSdoaXN0b3J5JyBpcyB1c2VkLgorCToJTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNvbW1hbmQtbGluZSBoaXN0b3J5IHRvIGJlCisJCXNhdmVkLglXaGVuIG5vdCBpbmNsdWRlZCwgdGhlIHZhbHVlIG9mICdoaXN0b3J5JyBpcyB1c2VkLgorCTwJTWF4aW11bSBudW1iZXIgb2YgbGluZXMgc2F2ZWQgZm9yIGVhY2ggcmVnaXN0ZXIuICBJZiB6ZXJvIHRoZW4KKwkJcmVnaXN0ZXJzIGFyZSBub3Qgc2F2ZWQuICBXaGVuIG5vdCBpbmNsdWRlZCwgYWxsIGxpbmVzIGFyZQorCQlzYXZlZC4gICciJyBpcyB0aGUgb2xkIG5hbWUgZm9yIHRoaXMgaXRlbS4KKwkJQWxzbyBzZWUgdGhlICdzJyBpdGVtIGJlbG93OiBsaW1pdCBzcGVjaWZpZWQgaW4gS2J5dGUuCisJQAlNYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgaW5wdXQtbGluZSBoaXN0b3J5IHRvIGJlCisJCXNhdmVkLglXaGVuIG5vdCBpbmNsdWRlZCwgdGhlIHZhbHVlIG9mICdoaXN0b3J5JyBpcyB1c2VkLgorCWMJV2hlbiBpbmNsdWRlZCwgY29udmVydCB0aGUgdGV4dCBpbiB0aGUgdmltaW5mbyBmaWxlIGZyb20gdGhlCisJCSdlbmNvZGluZycgdXNlZCB3aGVuIHdyaXRpbmcgdGhlIGZpbGUgdG8gdGhlIGN1cnJlbnQKKwkJJ2VuY29kaW5nJy4gU2VlIHx2aW1pbmZvLWVuY29kaW5nfC4KKwlmCVdoZXRoZXIgZmlsZSBtYXJrcyBuZWVkIHRvIGJlIHN0b3JlZC4gIElmIHplcm8sIGZpbGUgbWFya3MgKCcwCisJCXRvICc5LCAnQSB0byAnWikgYXJlIG5vdCBzdG9yZWQuICBXaGVuIG5vdCBwcmVzZW50IG9yIHdoZW4KKwkJbm9uLXplcm8sIHRoZXkgYXJlIGFsbCBzdG9yZWQuCScwIGlzIHVzZWQgZm9yIHRoZSBjdXJyZW50CisJCWN1cnNvciBwb3NpdGlvbiAod2hlbiBleGl0aW5nIG9yIHdoZW4gZG9pbmcgIjp3dmltaW5mbyIpLgorCWgJRGlzYWJsZSB0aGUgZWZmZWN0IG9mICdobHNlYXJjaCcgd2hlbiBsb2FkaW5nIHRoZSB2aW1pbmZvCisJCWZpbGUuICBXaGVuIG5vdCBpbmNsdWRlZCwgaXQgZGVwZW5kcyBvbiB3aGV0aGVyICI6bm9obHNlYXJjaCIKKwkJaGFzIGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdCBzZWFyY2ggY29tbWFuZC4KKwluCU5hbWUgb2YgdGhlIHZpbWluZm8gZmlsZS4gIFRoZSBuYW1lIG11c3QgaW1tZWRpYXRlbHkgZm9sbG93CisJCXRoZSAnbicuICBNdXN0IGJlIHRoZSBsYXN0IG9uZSEgIElmIHRoZSAiLWkiIGFyZ3VtZW50IHdhcworCQlnaXZlbiB3aGVuIHN0YXJ0aW5nIFZpbSwgdGhhdCBmaWxlIG5hbWUgb3ZlcnJpZGVzIHRoZSBvbmUKKwkJZ2l2ZW4gaGVyZSB3aXRoICd2aW1pbmZvJy4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQKKwkJd2hlbiBvcGVuaW5nIHRoZSBmaWxlLCBub3Qgd2hlbiBzZXR0aW5nIHRoZSBvcHRpb24uCisJcglSZW1vdmFibGUgbWVkaWEuICBUaGUgYXJndW1lbnQgaXMgYSBzdHJpbmcgKHVwIHRvIHRoZSBuZXh0CisJCScsJykuICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgZ2l2ZW4gc2V2ZXJhbCB0aW1lcy4gIEVhY2gKKwkJc3BlY2lmaWVzIHRoZSBzdGFydCBvZiBhIHBhdGggZm9yIHdoaWNoIG5vIG1hcmtzIHdpbGwgYmUKKwkJc3RvcmVkLiAgVGhpcyBpcyB0byBhdm9pZCByZW1vdmFibGUgbWVkaWEuICBGb3IgTVMtRE9TIHlvdQorCQljb3VsZCB1c2UgInJhOixyYjoiLCBmb3IgQW1pZ2EgInJkZjA6LHJkZjE6LHJkZjI6Ii4gIFlvdSBjYW4KKwkJYWxzbyB1c2UgaXQgZm9yIHRlbXAgZmlsZXMsIGUuZy4sIGZvciBVbml4OiAici90bXAiLiAgQ2FzZSBpcworCQlpZ25vcmVkLiAgTWF4aW11bSBsZW5ndGggb2YgZWFjaCAncicgYXJndW1lbnQgaXMgNTAKKwkJY2hhcmFjdGVycy4KKwlzCU1heGltdW0gc2l6ZSBvZiBhbiBpdGVtIGluIEtieXRlLiAgSWYgemVybyB0aGVuIHJlZ2lzdGVycyBhcmUKKwkJbm90IHNhdmVkLiAgQ3VycmVudGx5IG9ubHkgYXBwbGllcyB0byByZWdpc3RlcnMuICBUaGUgZGVmYXVsdAorCQkiczEwIiB3aWxsIGV4Y2x1ZGUgcmVnaXN0ZXJzIHdpdGggbW9yZSB0aGFuIDEwIEtieXRlIG9mIHRleHQuCisJCUFsc28gc2VlIHRoZSAnPCcgaXRlbSBhYm92ZTogbGluZSBjb3VudCBsaW1pdC4KKworCUV4YW1wbGU6ID4KKwkgICAgOnNldCB2aW1pbmZvPSc1MCw8MTAwMCxzMTAwLDowLG5+L3ZpbS92aW1pbmZvCis8CisJJzUwCQlNYXJrcyB3aWxsIGJlIHJlbWVtYmVyZWQgZm9yIHRoZSBsYXN0IDUwIGZpbGVzIHlvdQorCQkJZWRpdGVkLgorCTwxMDAwCQlDb250ZW50cyBvZiByZWdpc3RlcnMgKHVwIHRvIDEwMDAgbGluZXMgZWFjaCkgd2lsbCBiZQorCQkJcmVtZW1iZXJlZC4KKwlzMTAwCQlSZWdpc3RlcnMgd2l0aCBtb3JlIHRoYW4gMTAwIEtieXRlIHRleHQgYXJlIHNraXBwZWQuCisJOjAJCUNvbW1hbmQtbGluZSBoaXN0b3J5IHdpbGwgbm90IGJlIHNhdmVkLgorCW5+L3ZpbS92aW1pbmZvCVRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHVzZSBpcyAifi92aW0vdmltaW5mbyIuCisJbm8gLwkJU2luY2UgJy8nIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHdpbGwgYmUgdXNlZCwKKwkJCXRoYXQgaXMsIHNhdmUgYWxsIG9mIHRoZSBzZWFyY2ggaGlzdG9yeSwgYW5kIGFsc28gdGhlCisJCQlwcmV2aW91cyBzZWFyY2ggYW5kIHN1YnN0aXR1dGUgcGF0dGVybnMuCisJbm8gJQkJVGhlIGJ1ZmZlciBsaXN0IHdpbGwgbm90IGJlIHNhdmVkIG5vciByZWFkIGJhY2suCisJbm8gaAkJJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgd2lsbCBiZSByZXN0b3JlZC4KKworCVdoZW4gc2V0dGluZyAndmltaW5mbycgZnJvbSBhbiBlbXB0eSB2YWx1ZSB5b3UgY2FuIHVzZSB8OnJ2aW1pbmZvfCB0bworCWxvYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLCB0aGlzIGlzIG5vdCBkb25lIGF1dG9tYXRpY2FsbHkuCisKKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJICAgICondmlydHVhbGVkaXQnKiAqJ3ZlJyoKKyd2aXJ0dWFsZWRpdCcgJ3ZlJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K3ZpcnR1YWxlZGl0fCBmZWF0dXJlfQorCUEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdGhlc2Ugd29yZHM6CisJICAgIGJsb2NrCUFsbG93IHZpcnR1YWwgZWRpdGluZyBpbiBWaXN1YWwgYmxvY2sgbW9kZS4KKwkgICAgaW5zZXJ0CUFsbG93IHZpcnR1YWwgZWRpdGluZyBpbiBJbnNlcnQgbW9kZS4KKwkgICAgYWxsCQlBbGxvdyB2aXJ0dWFsIGVkaXRpbmcgaW4gYWxsIG1vZGVzLgorCVZpcnR1YWwgZWRpdGluZyBtZWFucyB0aGF0IHRoZSBjdXJzb3IgY2FuIGJlIHBvc2l0aW9uZWQgd2hlcmUgdGhlcmUgaXMKKwlubyBhY3R1YWwgY2hhcmFjdGVyLiAgVGhpcyBjYW4gYmUgaGFsZndheSBpbnRvIGEgVGFiIG9yIGJleW9uZCB0aGUgZW5kCisJb2YgdGhlIGxpbmUuICBVc2VmdWwgZm9yIHNlbGVjdGluZyBhIHJlY3RhbmdsZSBpbiBWaXN1YWwgbW9kZSBhbmQKKwllZGl0aW5nIGEgdGFibGUuCisKKwkJCSondmlzdWFsYmVsbCcqICondmInKiAqJ25vdmlzdWFsYmVsbCcqIConbm92YicqICpiZWVwKgorJ3Zpc3VhbGJlbGwnICd2YicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVXNlIHZpc3VhbCBiZWxsIGluc3RlYWQgb2YgYmVlcGluZy4gIFRoZSB0ZXJtaW5hbCBjb2RlIHRvIGRpc3BsYXkgdGhlCisJdmlzdWFsIGJlbGwgaXMgZ2l2ZW4gd2l0aCAndF92YicuICBXaGVuIG5vIGJlZXAgb3IgZmxhc2ggaXMgd2FudGVkLAorCXVzZSAiOnNldCB2YiB0X3ZiPSIuCisJTm90ZTogV2hlbiB0aGUgR1VJIHN0YXJ0cywgJ3RfdmInIGlzIHJlc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLiAgWW91CisJbWlnaHQgd2FudCB0byBzZXQgaXQgYWdhaW4gaW4geW91ciB8Z3ZpbXJjfC4KKwlJbiB0aGUgR1VJLCAndF92YicgZGVmYXVsdHMgdG8gIjxFc2M+fGYiLCB3aGljaCBpbnZlcnRzIHRoZSBkaXNwbGF5CisJZm9yIDIwIG1zZWMuICBJZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgdGltZSwgdXNlICI8RXNjPnw0MGYiLAorCXdoZXJlIDQwIGlzIHRoZSB0aW1lIGluIG1zZWMuCisJRG9lcyBub3Qgd29yayBvbiB0aGUgQW1pZ2EsIHlvdSBhbHdheXMgZ2V0IGEgc2NyZWVuIGZsYXNoLgorCUFsc28gc2VlICdlcnJvcmJlbGxzJy4KKworCQkJCQkJKid3YXJuJyogKidub3dhcm4nKgorJ3dhcm4nCQkJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCUdpdmUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiBhIHNoZWxsIGNvbW1hbmQgaXMgdXNlZCB3aGlsZSB0aGUgYnVmZmVyCisJaGFzIGJlZW4gY2hhbmdlZC4KKworCQkgICAgICond2VpcmRpbnZlcnQnKiAqJ3dpdicqIConbm93ZWlyZGludmVydCcqIConbm93aXYnKgorJ3dlaXJkaW52ZXJ0JyAnd2l2Jwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSAndF94cycgdGVybWNhcCBvcHRpb24uCisJSXQgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbiA0LnguCisJU2V0dGluZyAnd2VpcmRpbnZlcnQnIGhhcyB0aGUgZWZmZWN0IG9mIG1ha2luZyAndF94cycgbm9uLWVtcHR5LCBhbmQKKwl2aWNlIHZlcnNhLiAgSGFzIG5vIGVmZmVjdCB3aGVuIHRoZSBHVUkgaXMgcnVubmluZy4KKworCQkJCQkJKid3aGljaHdyYXAnKiAqJ3d3JyoKKyd3aGljaHdyYXAnICd3dycJc3RyaW5nCShWaW0gZGVmYXVsdDogImIscyIsIFZpIGRlZmF1bHQ6ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUFsbG93IHNwZWNpZmllZCBrZXlzIHRoYXQgbW92ZSB0aGUgY3Vyc29yIGxlZnQvcmlnaHQgdG8gbW92ZSB0byB0aGUKKwlwcmV2aW91cy9uZXh0IGxpbmUgd2hlbiB0aGUgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdC9sYXN0IGNoYXJhY3RlciBpbgorCXRoZSBsaW5lLiAgQ29uY2F0ZW5hdGUgY2hhcmFjdGVycyB0byBhbGxvdyB0aGlzIGZvciB0aGVzZSBrZXlzOgorCQljaGFyICAga2V5CSAgbW9kZQl+CisJCSBiICAgIDxCUz4JIE5vcm1hbCBhbmQgVmlzdWFsCisJCSBzICAgIDxTcGFjZT4JIE5vcm1hbCBhbmQgVmlzdWFsCisJCSBoICAgICJoIgkgTm9ybWFsIGFuZCBWaXN1YWwKKwkJIGwgICAgImwiCSBOb3JtYWwgYW5kIFZpc3VhbAorCQkgPCAgICA8TGVmdD4JIE5vcm1hbCBhbmQgVmlzdWFsCisJCSA+ICAgIDxSaWdodD4JIE5vcm1hbCBhbmQgVmlzdWFsCisJCSB+ICAgICJ+IgkgTm9ybWFsCisJCSBbICAgIDxMZWZ0PgkgSW5zZXJ0IGFuZCBSZXBsYWNlCisJCSBdICAgIDxSaWdodD4JIEluc2VydCBhbmQgUmVwbGFjZQorCUZvciBleGFtcGxlOiA+CisJCTpzZXQgd3c9PCw+LFssXQorPAlhbGxvd3Mgd3JhcCBvbmx5IHdoZW4gY3Vyc29yIGtleXMgYXJlIHVzZWQuCisJV2hlbiB0aGUgbW92ZW1lbnQga2V5cyBhcmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgZGVsZXRlIG9yIGNoYW5nZQorCW9wZXJhdG9yLCB0aGUgPEVPTD4gYWxzbyBjb3VudHMgZm9yIGEgY2hhcmFjdGVyLiAgVGhpcyBtYWtlcyAiM2giCisJZGlmZmVyZW50IGZyb20gIjNkaCIgd2hlbiB0aGUgY3Vyc29yIGNyb3NzZXMgdGhlIGVuZCBvZiBhIGxpbmUuICBUaGlzCisJaXMgYWxzbyB0cnVlIGZvciAieCIgYW5kICJYIiwgYmVjYXVzZSB0aGV5IGRvIHRoZSBzYW1lIGFzICJkbCIgYW5kCisJImRoIi4gIElmIHlvdSB1c2UgdGhpcywgeW91IG1heSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBtYXBwaW5nCisJIjptYXAgPEJTPiBYIiB0byBtYWtlIGJhY2tzcGFjZSBkZWxldGUgdGhlIGNoYXJhY3RlciBpbiBmcm9udCBvZiB0aGUKKwljdXJzb3IuCisJV2hlbiAnbCcgaXMgaW5jbHVkZWQsIHlvdSBnZXQgYSBzaWRlIGVmZmVjdDogInlsIiBvbiBhbiBlbXB0eSBsaW5lCisJd2lsbCBpbmNsdWRlIHRoZSA8RU9MPiwgc28gdGhhdCAicCIgd2lsbCBpbnNlcnQgYSBuZXcgbGluZS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKid3aWxkY2hhcicqICond2MnKgorJ3dpbGRjaGFyJyAnd2MnCQludW1iZXIJKFZpbSBkZWZhdWx0OiA8VGFiPiwgVmkgZGVmYXVsdDogQ1RSTC1FKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUNoYXJhY3RlciB5b3UgaGF2ZSB0byB0eXBlIHRvIHN0YXJ0IHdpbGRjYXJkIGV4cGFuc2lvbiBpbiB0aGUKKwljb21tYW5kLWxpbmUsIGFzIHNwZWNpZmllZCB3aXRoICd3aWxkbW9kZScuCisJVGhlIGNoYXJhY3RlciBpcyBub3QgcmVjb2duaXplZCB3aGVuIHVzZWQgaW5zaWRlIGEgbWFjcm8uICBTZWUKKwknd2lsZGNoYXJtJyBmb3IgdGhhdC4KKwlBbHRob3VnaCAnd2MnIGlzIGEgbnVtYmVyIG9wdGlvbiwgeW91IGNhbiBzZXQgaXQgdG8gYSBzcGVjaWFsIGtleTogPgorCQk6c2V0IHdjPTxFc2M+Cis8CU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ3dpbGRjaGFybScqICond2NtJyoKKyd3aWxkY2hhcm0nICd3Y20nCW51bWJlcgkoZGVmYXVsdDogbm9uZSAoMCkpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJJ3dpbGRjaGFybScgd29ya3MgZXhhY3RseSBsaWtlICd3aWxkY2hhcicsIGV4Y2VwdCB0aGF0IGl0IGlzCisJcmVjb2duaXplZCB3aGVuIHVzZWQgaW5zaWRlIGEgbWFjcm8uIFlvdSBjYW4gZmluZCAic3BhcmUiIGNvbW1hbmQtbGluZQorCWtleXMgc3VpdGFibGUgZm9yIHRoaXMgb3B0aW9uIGJ5IGxvb2tpbmcgYXQgfGV4LWVkaXQtaW5kZXh8LiBOb3JtYWxseQorCXlvdSdsbCBuZXZlciBhY3R1YWxseSB0eXBlICd3aWxkY2hhcm0nLCBqdXN0IHVzZSBpdCBpbiBtYXBwaW5ncyB0aGF0CisJYXV0b21hdGljYWxseSBpbnZva2UgY29tcGxldGlvbiBtb2RlLCBlLmcuOiA+CisJCTpzZXQgd2NtPTxDLVo+CisJCTpjbWFwIHNzIHNvICR2aW0vc2Vzc2lvbnMvKi52aW08Qy1aPgorPAlUaGVuIGFmdGVyIHR5cGluZyA6c3MgeW91IGNhbiB1c2UgQ1RSTC1QICYgQ1RSTC1OLgorCisJCQkJCQkqJ3dpbGRpZ25vcmUnKiAqJ3dpZycqCisnd2lsZGlnbm9yZScgJ3dpZycJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3dpbGRpZ25vcmV8CisJCQlmZWF0dXJlfQorCUEgbGlzdCBvZiBmaWxlIHBhdHRlcm5zLiAgQSBmaWxlIHRoYXQgbWF0Y2hlcyB3aXRoIG9uZSBvZiB0aGVzZQorCXBhdHRlcm5zIGlzIGlnbm9yZWQgd2hlbiBjb21wbGV0aW5nIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzLgorCVRoZSBwYXR0ZXJuIGlzIHVzZWQgbGlrZSB3aXRoIHw6YXV0b2NtZHwsIHNlZSB8YXV0b2NtZC1wYXR0ZXJuc3wuCisJQWxzbyBzZWUgJ3N1ZmZpeGVzJy4KKwlFeGFtcGxlOiA+CisJCTpzZXQgd2lsZGlnbm9yZT0qLm8sKi5vYmoKKzwJVGhlIHVzZSBvZiB8OnNldCs9fCBhbmQgfDpzZXQtPXwgaXMgcHJlZmVycmVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nCisJYSBwYXR0ZXJuIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4KKworCQkJCSond2lsZG1lbnUnKiAqJ3dtbnUnKiAqJ25vd2lsZG1lbnUnKiAqJ25vd21udScqCisnd2lsZG1lbnUnICd3bW51Jwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIGlmIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrd2lsZG1lbnV8CisJCQlmZWF0dXJlfQorCVdoZW4gJ3dpbGRtZW51JyBpcyBvbiwgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gb3BlcmF0ZXMgaW4gYW4gZW5oYW5jZWQKKwltb2RlLiAgT24gcHJlc3NpbmcgJ3dpbGRjaGFyJyAodXN1YWxseSA8VGFiPikgdG8gaW52b2tlIGNvbXBsZXRpb24sCisJdGhlIHBvc3NpYmxlIG1hdGNoZXMgYXJlIHNob3duIGp1c3QgYWJvdmUgdGhlIGNvbW1hbmQgbGluZSwgd2l0aCB0aGUKKwlmaXJzdCBtYXRjaCBoaWdobGlnaHRlZCAob3ZlcndyaXRpbmcgdGhlIHN0YXR1cyBsaW5lLCBpZiB0aGVyZSBpcworCW9uZSkuICBLZXlzIHRoYXQgc2hvdyB0aGUgcHJldmlvdXMvbmV4dCBtYXRjaCwgc3VjaCBhcyA8VGFiPiBvcgorCUNUUkwtUC9DVFJMLU4sIGNhdXNlIHRoZSBoaWdobGlnaHQgdG8gbW92ZSB0byB0aGUgYXBwcm9wcmlhdGUgbWF0Y2guCisJV2hlbiAnd2lsZG1vZGUnIGlzIHVzZWQsICJ3aWxkbWVudSIgbW9kZSBpcyB1c2VkIHdoZXJlICJmdWxsIiBpcworCXNwZWNpZmllZC4gICJsb25nZXN0IiBhbmQgImxpc3QiIGRvIG5vdCBzdGFydCAid2lsZG1lbnUiIG1vZGUuCisJSWYgdGhlcmUgYXJlIG1vcmUgbWF0Y2hlcyB0aGFuIGNhbiBmaXQgaW4gdGhlIGxpbmUsIGEgIj4iIGlzIHNob3duIG9uCisJdGhlIHJpZ2h0IGFuZC9vciBhICI8IiBpcyBzaG93biBvbiB0aGUgbGVmdC4gIFRoZSBzdGF0dXMgbGluZSBzY3JvbGxzCisJYXMgbmVlZGVkLgorCVRoZSAid2lsZG1lbnUiIG1vZGUgaXMgYWJhbmRvbmVkIHdoZW4gYSBrZXkgaXMgaGl0IHRoYXQgaXMgbm90IHVzZWQKKwlmb3Igc2VsZWN0aW5nIGEgY29tcGxldGlvbi4KKwlXaGlsZSB0aGUgIndpbGRtZW51IiBpcyBhY3RpdmUgdGhlIGZvbGxvd2luZyBrZXlzIGhhdmUgc3BlY2lhbAorCW1lYW5pbmdzOgorCisJPExlZnQ+IDxSaWdodD4JLSBzZWxlY3QgcHJldmlvdXMvbmV4dCBtYXRjaCAobGlrZSBDVFJMLVAvQ1RSTC1OKQorCTxEb3duPgkJLSBpbiBmaWxlbmFtZS9tZW51IG5hbWUgY29tcGxldGlvbjogbW92ZSBpbnRvIGEKKwkJCSAgc3ViZGlyZWN0b3J5IG9yIHN1Ym1lbnUuCisJPENSPgkJLSBpbiBtZW51IGNvbXBsZXRpb24sIHdoZW4gdGhlIGN1cnNvciBpcyBqdXN0IGFmdGVyIGEKKwkJCSAgZG90OiBtb3ZlIGludG8gYSBzdWJtZW51LgorCTxVcD4JCS0gaW4gZmlsZW5hbWUvbWVudSBuYW1lIGNvbXBsZXRpb246IG1vdmUgdXAgaW50bworCQkJICBwYXJlbnQgZGlyZWN0b3J5IG9yIHBhcmVudCBtZW51LgorCisJVGhpcyBtYWtlcyB0aGUgbWVudXMgYWNjZXNzaWJsZSBmcm9tIHRoZSBjb25zb2xlIHxjb25zb2xlLW1lbnVzfC4KKworCUlmIHlvdSBwcmVmZXIgdGhlIDxMZWZ0PiBhbmQgPFJpZ2h0PiBrZXlzIHRvIG1vdmUgdGhlIGN1cnNvciBpbnN0ZWFkCisJb2Ygc2VsZWN0aW5nIGEgZGlmZmVyZW50IG1hdGNoLCB1c2UgdGhpczogPgorCQk6Y25vcmVtYXAgPExlZnQ+IDxTcGFjZT48QlM+PExlZnQ+CisJCTpjbm9yZW1hcCA8UmlnaHQ+IDxTcGFjZT48QlM+PFJpZ2h0PgorPAorCVRoZSAiV2lsZE1lbnUiIGhpZ2hsaWdodGluZyBpcyB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSBjdXJyZW50IG1hdGNoCisJfGhsLVdpbGRNZW51fC4KKworCQkJCQkJKid3aWxkbW9kZScqICond2ltJyoKKyd3aWxkbW9kZScgJ3dpbScJc3RyaW5nCShWaW0gZGVmYXVsdDogImZ1bGwiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUNvbXBsZXRpb24gbW9kZSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBjaGFyYWN0ZXIgc3BlY2lmaWVkIHdpdGgKKwknd2lsZGNoYXInLiAgSXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB1cCB0byBmb3VyIHBhcnRzLglFYWNoCisJcGFydCBzcGVjaWZpZXMgd2hhdCB0byBkbyBmb3IgZWFjaCBjb25zZWN1dGl2ZSB1c2Ugb2YgJ3dpbGRjaGFyLiAgVGhlCisJZmlyc3QgcGFydCBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIGZvciB0aGUgZmlyc3QgdXNlIG9mICd3aWxkY2hhcicsCisJVGhlIHNlY29uZCBwYXJ0IGZvciB0aGUgc2Vjb25kIHVzZSwgZXRjLgorCVRoZXNlIGFyZSB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBlYWNoIHBhcnQ6CisJIiIJCUNvbXBsZXRlIG9ubHkgdGhlIGZpcnN0IG1hdGNoLgorCSJmdWxsIgkJQ29tcGxldGUgdGhlIG5leHQgZnVsbCBtYXRjaC4gIEFmdGVyIHRoZSBsYXN0IG1hdGNoLAorCQkJdGhlIG9yaWdpbmFsIHN0cmluZyBpcyB1c2VkIGFuZCB0aGVuIHRoZSBmaXJzdCBtYXRjaAorCQkJYWdhaW4uCisJImxvbmdlc3QiCUNvbXBsZXRlIHRpbGwgbG9uZ2VzdCBjb21tb24gc3RyaW5nLiAgSWYgdGhpcyBkb2Vzbid0CisJCQlyZXN1bHQgaW4gYSBsb25nZXIgc3RyaW5nLCB1c2UgdGhlIG5leHQgcGFydC4KKwkibG9uZ2VzdDpmdWxsIglMaWtlICJsb25nZXN0IiwgYnV0IGFsc28gc3RhcnQgJ3dpbGRtZW51JyBpZiBpdCBpcworCQkJZW5hYmxlZC4KKwkibGlzdCIJCVdoZW4gbW9yZSB0aGFuIG9uZSBtYXRjaCwgbGlzdCBhbGwgbWF0Y2hlcy4KKwkibGlzdDpmdWxsIglXaGVuIG1vcmUgdGhhbiBvbmUgbWF0Y2gsIGxpc3QgYWxsIG1hdGNoZXMgYW5kCisJCQljb21wbGV0ZSBmaXJzdCBtYXRjaC4KKwkibGlzdDpsb25nZXN0IglXaGVuIG1vcmUgdGhhbiBvbmUgbWF0Y2gsIGxpc3QgYWxsIG1hdGNoZXMgYW5kCisJCQljb21wbGV0ZSB0aWxsIGxvbmdlc3QgY29tbW9uIHN0cmluZy4KKwlXaGVuIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbWF0Y2gsIGl0IGlzIGZ1bGx5IGNvbXBsZXRlZCBpbiBhbGwgY2FzZXMuCisKKwlFeGFtcGxlczogPgorCQk6c2V0IHdpbGRtb2RlPWZ1bGwKKzwJQ29tcGxldGUgZmlyc3QgZnVsbCBtYXRjaCwgbmV4dCBtYXRjaCwgZXRjLiAodGhlIGRlZmF1bHQpID4KKwkJOnNldCB3aWxkbW9kZT1sb25nZXN0LGZ1bGwKKzwJQ29tcGxldGUgbG9uZ2VzdCBjb21tb24gc3RyaW5nLCB0aGVuIGVhY2ggZnVsbCBtYXRjaCA+CisJCTpzZXQgd2lsZG1vZGU9bGlzdDpmdWxsCis8CUxpc3QgYWxsIG1hdGNoZXMgYW5kIGNvbXBsZXRlIGVhY2ggZnVsbCBtYXRjaCA+CisJCTpzZXQgd2lsZG1vZGU9bGlzdCxmdWxsCis8CUxpc3QgYWxsIG1hdGNoZXMgd2l0aG91dCBjb21wbGV0aW5nLCB0aGVuIGVhY2ggZnVsbCBtYXRjaCA+CisJCTpzZXQgd2lsZG1vZGU9bG9uZ2VzdCxsaXN0Cis8CUNvbXBsZXRlIGxvbmdlc3QgY29tbW9uIHN0cmluZywgdGhlbiBsaXN0IGFsdGVybmF0aXZlcy4KKworCQkJCQkJKid3aW5hbHRrZXlzJyogKid3YWsnKgorJ3dpbmFsdGtleXMnICd3YWsnCXN0cmluZwkoZGVmYXVsdCAibWVudSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSB1c2VkIGluIFdpbjMyLCBNb3RpZiwgR1RLIGFuZCBQaG90b24gR1VJfQorCVNvbWUgR1VJIHZlcnNpb25zIGFsbG93IHRoZSBhY2Nlc3MgdG8gbWVudSBlbnRyaWVzIGJ5IHVzaW5nIHRoZSBBTFQKKwlrZXkgaW4gY29tYmluYXRpb24gd2l0aCBhIGNoYXJhY3RlciB0aGF0IGFwcGVhcnMgdW5kZXJsaW5lZCBpbiB0aGUKKwltZW51LiAgVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgdXNlIG9mIHRoZSBBTFQga2V5IGZvciBtYXBwaW5ncyBhbmQKKwllbnRlcmluZyBzcGVjaWFsIGNoYXJhY3RlcnMuICBUaGlzIG9wdGlvbiB0ZWxscyB3aGF0IHRvIGRvOgorCSAgbm8JRG9uJ3QgdXNlIEFMVCBrZXlzIGZvciBtZW51cy4gIEFMVCBrZXkgY29tYmluYXRpb25zIGNhbiBiZQorCQltYXBwZWQsIGJ1dCB0aGVyZSBpcyBubyBhdXRvbWF0aWMgaGFuZGxpbmcuICBUaGlzIGNhbiB0aGVuIGJlCisJCWRvbmUgd2l0aCB0aGUgfDpzaW1hbHR8IGNvbW1hbmQuCisJICB5ZXMJQUxUIGtleSBoYW5kbGluZyBpcyBkb25lIGJ5IHRoZSB3aW5kb3dpbmcgc3lzdGVtLiAgQUxUIGtleQorCQljb21iaW5hdGlvbnMgY2Fubm90IGJlIG1hcHBlZC4KKwkgIG1lbnUJVXNpbmcgQUxUIGluIGNvbWJpbmF0aW9uIHdpdGggYSBjaGFyYWN0ZXIgdGhhdCBpcyBhIG1lbnUKKwkJc2hvcnRjdXQga2V5LCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIHdpbmRvd2luZyBzeXN0ZW0uCU90aGVyCisJCWtleXMgY2FuIGJlIG1hcHBlZC4KKwlJZiB0aGUgbWVudSBpcyBkaXNhYmxlZCBieSBleGNsdWRpbmcgJ20nIGZyb20gJ2d1aW9wdGlvbnMnLCB0aGUgQUxUCisJa2V5IGlzIG5ldmVyIHVzZWQgZm9yIHRoZSBtZW51LgorCUluIHRoZSBXaW4zMiB2ZXJzaW9uLCB0aGUgPEYxMD4ga2V5IGlzIGhhbmRsZWQgbGlrZSB0aGlzIHRvbywgc2luY2UKKwlXaW5kb3dzIHVzZXMgaXQgdG8gc2VsZWN0IGEgbWVudS4KKworCQkJCQkJKid3aW5oZWlnaHQnKiAqJ3doJyogKkU1OTEqCisnd2luaGVpZ2h0JyAnd2gnCW51bWJlcgkoZGVmYXVsdCAxKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArd2luZG93cworCQkJZmVhdHVyZX0KKwlNaW5pbWFsIG51bWJlciBvZiBsaW5lcyBmb3IgdGhlIGN1cnJlbnQgd2luZG93LiAgVGhpcyBpcyBub3QgYSBoYXJkCisJbWluaW11bSwgVmltIHdpbGwgdXNlIGZld2VyIGxpbmVzIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbS4JSWYgdGhlCisJY3VycmVudCB3aW5kb3cgaXMgc21hbGxlciwgaXRzIHNpemUgaXMgaW5jcmVhc2VkLCBhdCB0aGUgY29zdCBvZiB0aGUKKwloZWlnaHQgb2Ygb3RoZXIgd2luZG93cy4gIFNldCBpdCB0byA5OTkgdG8gbWFrZSB0aGUgY3VycmVudCB3aW5kb3cKKwlhbHdheXMgZmlsbCB0aGUgc2NyZWVuIChhbHRob3VnaCB0aGlzIGhhcyB0aGUgZHJhd2JhY2sgdGhhdCAiOmFsbCIKKwl3aWxsIGNyZWF0ZSBvbmx5IHR3byB3aW5kb3dzKS4gIFNldCBpdCB0byBhIHNtYWxsIG51bWJlciBmb3Igbm9ybWFsCisJZWRpdGluZy4KKwlNaW5pbXVtIHZhbHVlIGlzIDEuCisJVGhlIGhlaWdodCBpcyBub3QgYWRqdXN0ZWQgYWZ0ZXIgb25lIG9mIHRoZSBjb21tYW5kcyB0byBjaGFuZ2UgdGhlCisJaGVpZ2h0IG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KKwknd2luaGVpZ2h0JyBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IHdpbmRvdy4gIFVzZSAnd2lubWluaGVpZ2h0JyB0byBzZXQKKwl0aGUgbWluaW1hbCBoZWlnaHQgZm9yIG90aGVyIHdpbmRvd3MuCisKKwkJCSond2luZml4aGVpZ2h0JyogKid3ZmgnKiAqJ25vd2luZml4aGVpZ2h0JyogKidub3dmaCcqCisnd2luZml4aGVpZ2h0JyAnd2ZoJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3dpbmRvd3MKKwkJCWZlYXR1cmV9CisJS2VlcCB0aGUgd2luZG93IGhlaWdodCB3aGVuIHdpbmRvd3MgYXJlIG9wZW5lZCBvciBjbG9zZWQgYW5kCisJJ2VxdWFsYWx3YXlzJyBpcyBzZXQuICBTZXQgYnkgZGVmYXVsdCBmb3IgdGhlIHxwcmV2aWV3LXdpbmRvd3wgYW5kCisJfHF1aWNrZml4LXdpbmRvd3wuCisJVGhlIGhlaWdodCBtYXkgYmUgY2hhbmdlZCBhbnl3YXkgd2hlbiBydW5uaW5nIG91dCBvZiByb29tLgorCisJCQkJCQkqJ3dpbm1pbmhlaWdodCcqICond21oJyoKKyd3aW5taW5oZWlnaHQnICd3bWgnCW51bWJlcgkoZGVmYXVsdCAxKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArd2luZG93cworCQkJZmVhdHVyZX0KKwlUaGUgbWluaW1hbCBoZWlnaHQgb2YgYSB3aW5kb3csIHdoZW4gaXQncyBub3QgdGhlIGN1cnJlbnQgd2luZG93LgorCVRoaXMgaXMgYSBoYXJkIG1pbmltdW0sIHdpbmRvd3Mgd2lsbCBuZXZlciBiZWNvbWUgc21hbGxlci4KKwlXaGVuIHNldCB0byB6ZXJvLCB3aW5kb3dzIG1heSBiZSAic3F1YXNoZWQiIHRvIHplcm8gbGluZXMgKGkuZS4ganVzdCBhCisJc3RhdHVzIGJhcikgaWYgbmVjZXNzYXJ5LiAgVGhleSB3aWxsIHJldHVybiB0byBhdCBsZWFzdCBvbmUgbGluZSB3aGVuCisJdGhleSBiZWNvbWUgYWN0aXZlIChzaW5jZSB0aGUgY3Vyc29yIGhhcyB0byBoYXZlIHNvbWV3aGVyZSB0byBnby4pCisJVXNlICd3aW5oZWlnaHQnIHRvIHNldCB0aGUgbWluaW1hbCBoZWlnaHQgb2YgdGhlIGN1cnJlbnQgd2luZG93LgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgY2hlY2tlZCB3aGVuIG1ha2luZyBhIHdpbmRvdyBzbWFsbGVyLiAgRG9uJ3QgdXNlIGEKKwlsYXJnZSBudW1iZXIsIGl0IHdpbGwgY2F1c2UgZXJyb3JzIHdoZW4gb3BlbmluZyBtb3JlIHRoYW4gYSBmZXcKKwl3aW5kb3dzLiAgQSB2YWx1ZSBvZiAwIHRvIDMgaXMgcmVhc29uYWJsZS4KKworCQkJCQkJKid3aW5taW53aWR0aCcqICond213JyoKKyd3aW5taW53aWR0aCcgJ3dtdycJbnVtYmVyCShkZWZhdWx0IDEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2ZXJ0c3BsaXQKKwkJCWZlYXR1cmV9CisJVGhlIG1pbmltYWwgd2lkdGggb2YgYSB3aW5kb3csIHdoZW4gaXQncyBub3QgdGhlIGN1cnJlbnQgd2luZG93LgorCVRoaXMgaXMgYSBoYXJkIG1pbmltdW0sIHdpbmRvd3Mgd2lsbCBuZXZlciBiZWNvbWUgc21hbGxlci4KKwlXaGVuIHNldCB0byB6ZXJvLCB3aW5kb3dzIG1heSBiZSAic3F1YXNoZWQiIHRvIHplcm8gY29sdW1ucyAoaS5lLiBqdXN0CisJYSB2ZXJ0aWNhbCBzZXBhcmF0b3IpIGlmIG5lY2Vzc2FyeS4gIFRoZXkgd2lsbCByZXR1cm4gdG8gYXQgbGVhc3Qgb25lCisJbGluZSB3aGVuIHRoZXkgYmVjb21lIGFjdGl2ZSAoc2luY2UgdGhlIGN1cnNvciBoYXMgdG8gaGF2ZSBzb21ld2hlcmUKKwl0byBnby4pCisJVXNlICd3aW53aWR0aCcgdG8gc2V0IHRoZSBtaW5pbWFsIHdpZHRoIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KKwlUaGlzIG9wdGlvbiBpcyBvbmx5IGNoZWNrZWQgd2hlbiBtYWtpbmcgYSB3aW5kb3cgc21hbGxlci4gIERvbid0IHVzZSBhCisJbGFyZ2UgbnVtYmVyLCBpdCB3aWxsIGNhdXNlIGVycm9ycyB3aGVuIG9wZW5pbmcgbW9yZSB0aGFuIGEgZmV3CisJd2luZG93cy4gIEEgdmFsdWUgb2YgMCB0byAxMiBpcyByZWFzb25hYmxlLgorCisJCQkJCQkqJ3dpbndpZHRoJyogKid3aXcnKiAqRTU5MioKKyd3aW53aWR0aCcgJ3dpdycJbnVtYmVyCShkZWZhdWx0IDIwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdmVydHNwbGl0CisJCQlmZWF0dXJlfQorCU1pbmltYWwgbnVtYmVyIG9mIGNvbHVtbnMgZm9yIHRoZSBjdXJyZW50IHdpbmRvdy4gIFRoaXMgaXMgbm90IGEgaGFyZAorCW1pbmltdW0sIFZpbSB3aWxsIHVzZSBmZXdlciBjb2x1bW5zIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbS4gIElmCisJdGhlIGN1cnJlbnQgd2luZG93IGlzIHNtYWxsZXIsIGl0cyBzaXplIGlzIGluY3JlYXNlZCwgYXQgdGhlIGNvc3Qgb2YKKwl0aGUgd2lkdGggb2Ygb3RoZXIgd2luZG93cy4gIFNldCBpdCB0byA5OTkgdG8gbWFrZSB0aGUgY3VycmVudCB3aW5kb3cKKwlhbHdheXMgZmlsbCB0aGUgc2NyZWVuLiAgU2V0IGl0IHRvIGEgc21hbGwgbnVtYmVyIGZvciBub3JtYWwgZWRpdGluZy4KKwlUaGUgd2lkdGggaXMgbm90IGFkanVzdGVkIGFmdGVyIG9uZSBvZiB0aGUgY29tbWFuZHMgdG8gY2hhbmdlIHRoZQorCXdpZHRoIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KKwknd2lud2lkdGgnIGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgd2luZG93LiAgVXNlICd3aW5taW53aWR0aCcgdG8gc2V0CisJdGhlIG1pbmltYWwgd2lkdGggZm9yIG90aGVyIHdpbmRvd3MuCisKKwkJCQkJCSond3JhcCcqIConbm93cmFwJyoKKyd3cmFwJwkJCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gY2hhbmdlcyBob3cgdGV4dCBpcyBkaXNwbGF5ZWQuICBJdCBkb2Vzbid0IGNoYW5nZSB0aGUgdGV4dAorCWluIHRoZSBidWZmZXIsIHNlZSAndGV4dHdpZHRoJyBmb3IgdGhhdC4KKwlXaGVuIG9uLCBsaW5lcyBsb25nZXIgdGhhbiB0aGUgd2lkdGggb2YgdGhlIHdpbmRvdyB3aWxsIHdyYXAgYW5kCisJZGlzcGxheWluZyBjb250aW51ZXMgb24gdGhlIG5leHQgbGluZS4JV2hlbiBvZmYgbGluZXMgd2lsbCBub3Qgd3JhcAorCWFuZCBvbmx5IHBhcnQgb2YgbG9uZyBsaW5lcyB3aWxsIGJlIGRpc3BsYXllZC4JV2hlbiB0aGUgY3Vyc29yIGlzCisJbW92ZWQgdG8gYSBwYXJ0IHRoYXQgaXMgbm90IHNob3duLCB0aGUgc2NyZWVuIHdpbGwgc2Nyb2xsCisJaG9yaXpvbnRhbGx5LgorCVRoZSBsaW5lIHdpbGwgYmUgYnJva2VuIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkIGlmIG5lY2Vzc2FyeS4gIFNlZQorCSdsaW5lYnJlYWsnIHRvIGdldCB0aGUgYnJlYWsgYXQgYSB3b3JkIGJvdW5kYXJ5LgorCVRvIG1ha2Ugc2Nyb2xsaW5nIGhvcml6b250YWxseSBhIGJpdCBtb3JlIHVzZWZ1bCwgdHJ5IHRoaXM6ID4KKwkJOnNldCBzaWRlc2Nyb2xsPTUKKwkJOnNldCBsaXN0Y2hhcnMrPXByZWNlZGVzOjwsZXh0ZW5kczo+Cis8CVNlZSAnc2lkZXNjcm9sbCcsICdsaXN0Y2hhcnMnIGFuZCB8d3JhcC1vZmZ8LgorCisJCQkJCQkqJ3dyYXBtYXJnaW4nKiAqJ3dtJyoKKyd3cmFwbWFyZ2luJyAnd20nCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgcmlnaHQgd2luZG93IGJvcmRlciB3aGVyZSB3cmFwcGluZworCXN0YXJ0cy4gIFdoZW4gdHlwaW5nIHRleHQgYmV5b25kIHRoaXMgbGltaXQsIGFuIDxFT0w+IHdpbGwgYmUgaW5zZXJ0ZWQKKwlhbmQgaW5zZXJ0aW5nIGNvbnRpbnVlcyBvbiB0aGUgbmV4dCBsaW5lLgorCU9wdGlvbnMgdGhhdCBhZGQgYSBtYXJnaW4sIHN1Y2ggYXMgJ251bWJlcicgYW5kICdmb2xkY29sdW1uJywgY2F1c2UKKwl0aGUgdGV4dCB3aWR0aCB0byBiZSBmdXJ0aGVyIHJlZHVjZWQuICBUaGlzIGlzIFZpIGNvbXBhdGlibGUuCisJV2hlbiAndGV4dHdpZHRoJyBpcyBub24temVybywgdGhpcyBvcHRpb24gaXMgbm90IHVzZWQuCisJU2VlIGFsc28gJ2Zvcm1hdG9wdGlvbnMnIGFuZCB8aW5zLXRleHR3aWR0aHwuICB7Vmk6IHdvcmtzIGRpZmZlcmVudGx5CisJYW5kIGxlc3MgdXNlZnVsbHl9CisKKwkJCQkgICAqJ3dyYXBzY2FuJyogKid3cycqIConbm93cmFwc2NhbicqIConbm93cycqCisnd3JhcHNjYW4nICd3cycJCWJvb2xlYW4JKGRlZmF1bHQgb24pCQkJKkUzODQqICpFMzg1KgorCQkJZ2xvYmFsCisJU2VhcmNoZXMgd3JhcCBhcm91bmQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworCQkJCQkJICAgKid3cml0ZScqIConbm93cml0ZScqCisnd3JpdGUnCQkJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlBbGxvd3Mgd3JpdGluZyBmaWxlcy4gIFdoZW4gbm90IHNldCwgd3JpdGluZyBhIGZpbGUgaXMgbm90IGFsbG93ZWQuCisJQ2FuIGJlIHVzZWQgZm9yIGEgdmlldy1vbmx5IG1vZGUsIHdoZXJlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRleHQgYXJlCisJc3RpbGwgYWxsb3dlZC4JQ2FuIGJlIHJlc2V0IHdpdGggdGhlIHwtbXwgb3IgfC1NfCBjb21tYW5kIGxpbmUKKwlhcmd1bWVudC4gIEZpbHRlcmluZyB0ZXh0IGlzIHN0aWxsIHBvc3NpYmxlLCBldmVuIHRob3VnaCB0aGlzIHJlcXVpcmVzCisJd3JpdGluZyBhIHRlbXBvcmFyeSBmaWxlLgorCisJCQkJICAgKid3cml0ZWFueScqICond2EnKiAqJ25vd3JpdGVhbnknKiAqJ25vd2EnKgorJ3dyaXRlYW55JyAnd2EnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCUFsbG93cyB3cml0aW5nIHRvIGFueSBmaWxlIHdpdGggbm8gbmVlZCBmb3IgIiEiIG92ZXJyaWRlLgorCisJCQkgICAgICond3JpdGViYWNrdXAnKiAqJ3diJyogKidub3dyaXRlYmFja3VwJyogKidub3diJyoKKyd3cml0ZWJhY2t1cCcgJ3diJwlib29sZWFuCShkZWZhdWx0IG9uIHdpdGggfCt3cml0ZWJhY2t1cHwgZmVhdHVyZSwgb2ZmCisJCQkJCW90aGVyd2lzZSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYWtlIGEgYmFja3VwIGJlZm9yZSBvdmVyd3JpdGluZyBhIGZpbGUuICBUaGUgYmFja3VwIGlzIHJlbW92ZWQgYWZ0ZXIKKwl0aGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4sIHVubGVzcyB0aGUgJ2JhY2t1cCcgb3B0aW9uIGlzCisJYWxzbyBvbi4gIFJlc2V0IHRoaXMgb3B0aW9uIGlmIHlvdXIgZmlsZSBzeXN0ZW0gaXMgYWxtb3N0IGZ1bGwuICBTZWUKKwl8YmFja3VwLXRhYmxlfCBmb3IgYW5vdGhlciBleHBsYW5hdGlvbi4KKwlXaGVuIHRoZSAnYmFja3Vwc2tpcCcgcGF0dGVybiBtYXRjaGVzLCBhIGJhY2t1cCBpcyBub3QgbWFkZSBhbnl3YXkuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0LgorCisJCQkJCQkqJ3dyaXRlZGVsYXknKiAqJ3dkJyoKKyd3cml0ZWRlbGF5JyAnd2QnCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHRvIHdhaXQgZm9yIGVhY2ggY2hhcmFjdGVyIHNlbnQgdG8gdGhlCisJc2NyZWVuLiAgV2hlbiBub24temVybywgY2hhcmFjdGVycyBhcmUgc2VudCB0byB0aGUgdGVybWluYWwgb25lIGJ5CisJb25lLiAgRm9yIE1TLURPUyBwY3Rlcm0gdGhpcyBkb2VzIG5vdCB3b3JrLiAgRm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29zXzM5MC50eHQgYi9ydW50aW1lL2RvYy9vc18zOTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDI2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vc18zOTAudHh0CkBAIC0wLDAgKzEsMzQwIEBACisqb3NfMzkwLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgSnVuIDAzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgUmFsZiBTY2hhbmRsCisKKwkJCQkJKnpPUyogKnovT1MqICpPUzM5MCogKm9zMzkwKiAqTVZTKgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFycyBmb3IgdGhlIHovT1MgVU5JWCB2ZXJzaW9uIG9mIFZpbS4KKworMS4gT3BlbiBzb3VyY2Ugb24gei9PUyBVTklYCQl8ek9TLW9wZW4tc291cmNlfAorMi4gWW91ciBmZWVkYmFjayBpcyBuZWVkZWQJCXx6T1MtZmVlZGJhY2t8CiszLiBCdWlsZGluZyBWSU0gZm9yIHovT1MgVU5JWAkJfHpPUy1idWlsZGluZ3wKKzQuIEFTQ0lJL0VCQ0RJQyBkZXBlbmRlbnQgc2NyaXB0cwl8ek9TLWhhcy1lYmNkaWN8Cis1LiBYVGVybSBQcm9ibGVtcwkJCXx6T1MteHRlcm18Cis2LiBNb3RpZiBQcm9ibGVtcwkJCXx6T1MtTW90aWZ8Cis3ICBCdWdzCQkJCQl8ek9TLUJ1Z3N8Cis4LiBLbm93biB3ZWFrbmVzc2VzCQkJfHpPUy13ZWFrbmVzc2VzfAorOS4gQ2hhbmdlcwkJCQl8ek9TLWNoYW5nZXN8CisKK0RJU0NMQUlNRVI6IH4KK1dlIGFyZSBJQk0gZW1wbG95ZWVzLCBidXQgSUJNIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgdGhpcyBwb3J0LiBUaGlzIGlzIG91cgorcHJpdmF0ZSBmdW4sIGFuZCBpcyBwcm92aWRlZCBpbiB0aGUgaG9wZXMgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIHRvIG90aGVycy4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHNvZnR3YXJlIGhhcyBOT1QgYmVlbiBzdWJtaXR0ZWQgdG8gYW55IGZvcm1hbCBJQk0KK3Rlc3RpbmcgYW5kIGlzIHB1Ymxpc2hlZCBBUyBJUy4gUGxlYXNlIGRvIG5vdCBjb250YWN0IElCTSBmb3Igc3VwcG9ydCBmb3IgdGhpcworc29mdHdhcmUsIGFzIGl0IGlzIG5vdCBhbiBvZmZpY2lhbCBjb21wb25lbnQgb2YgYW55IElCTSBwcm9kdWN0LiBJVCBJUyBOT1QKK1NVUFBPUlRFRCwgR1VBUkFOVEVFRCwgT1IgUkVMQVRFRCBXSEFUU09FVkVSIFRPIElCTS4KKworQ29udHJpYnV0b3JzOiB+CitUaGUgcG9ydCB0byB6L09TIFVOSVggd2FzIGRvbmUgYnkgUmFsZiBTY2hhbmRsIGZvciB0aGUgUmVkYm9vayBtZW50aW9uZWQKK2JlbG93LgorCitDaGFuZ2VzLCBidWctcmVwb3J0cywgb3IgYm90aCBieToKKworCURhdmlkIE1vb3JlCisJQW50aG9ueSBHaW9yZ2lvIDxhZ2lvcmdpb0BmYXN0bWFpbC5mbT4KKwlhbmQgb3RoZXJzCisKK1RoaXMgZG9jdW1lbnQgd2FzIHdyaXR0ZW4gYnkgUmFsZiBTY2hhbmRsIGFuZCByZXZpc2VkIGJ5IEFudGhvbnkgR2lvcmdpby4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBPcGVuIHNvdXJjZSBvbiB6L09TIFVOSVgJCSpPUzM5MC1vcGVuLXNvdXJjZSogKnpPUy1vcGVuLXNvdXJjZSoKKworSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIG90aGVyIE9wZW4gU291cmNlIFNvZnR3YXJlIG9uIHovT1MgVU5JWCwgaGF2ZSBhCitsb29rIGF0IHRoZSBmb2xsb3dpbmcgUmVkYm9vazoKKworICAgIE1pa2UgTWFjSXNhYWMgZXQgYWwKKyAgICAiT3BlbiBTb3VyY2UgU29mdHdhcmUgZm9yIHovT1MgYW5kIE9TLzM5MCBVTklYIgorICAgIElCTSBGb3JtIE51bWJlcjogU0cyNC01OTQ0LTAxCisgICAgSVNCTjogMDczODQyNDYzMworCitZb3UgY2FuIGZpbmQgb3V0IG1vcmUgaW5mb3JtYXRpb24sIG9yZGVyIGEgaGFyZCBjb3B5LCBvciBkb3dubG9hZCBhIFBERgordmVyc2lvbiBvZiB0aGVzZSBSZWRib29rcyBhdDoKKworCSAgICBodHRwOi8vd3d3LnJlZGJvb2tzLmlibS5jb20KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBZb3VyIGZlZWRiYWNrIGlzIG5lZWRlZAkJKk9TMzkwLWZlZWRiYWNrKiAqek9TLWZlZWRiYWNrKgorCitWaW0gc2hvdWxkIGNvbXBpbGUsIGxpbmssIGFuZCBydW4gcmlnaHQgb3V0IG9mIHRoZSBib3ggb24gYSBzdGFuZGFyZCBJQk0gei9PUworVU5JWCBtYWluZnJhbWUuICBJJ3ZlIHBlcnNvbmFsbHkgcnVuIGl0IG9uIHovT1MgVjFSMiBhbmQgVjFSMyBtYWNoaW5lcyB3aXRob3V0Citwcm9ibGVtcy4KKworTWFueSBjaGFuZ2VzIGhhZCB0byBiZSBkb25lIHRvIHRoZSBjb2RlIHRvIHBvcnQgVmltIHRvIHovT1MgVU5JWC4gQXMgbGlrZQorbW9zdCBVTklYIHByb2dyYW1zLCBWaW0gY29udGFpbmVkIGhlYXZ5IEFTQ0lJIGRlcGVuZGVuY2llcy4gSSBtaWdodCBoYXZlCittaXNzZWQgYW4gQVNDSUkgZGVwZW5kZW5jeSwgb3IgaXQgaXMgcG9zc2libGUgdGhhdCBhIG5ldyBvbmUgaGFzIGJlZW4gYWRkZWQKK3dpdGggYSBmZWF0dXJlIG9yIGJ1ZyBmaXguIE1vc3QgcHJvZ3JhbW1lcnMgYXJlIHNpbXBseSBub3QgYXdhcmUgb2YgcG9zc2libGUKK0FTQ0lJL0VCQ0RJQyBjb252ZXJzaW9uIGlzc3Vlcy4gSWYgeW91IGhpdCBhIHByb2JsZW0gdGhhdCBzZWVtcyByZWxhdGVkIHRvCit0aGlzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBhdCB0aGUgZW1haWwgYWRkcmVzc2VzIGFib3ZlLgorCitPbmUgaW5kaWNhdGlvbiBvZiBBU0NJSS9FQkNESUMgY29udmVyc2lvbiBwcm9ibGVtcyBpcyBzY3JlZW4gY29ycnVwdGlvbiB3aXRoCisidW5wcmludGFibGUiIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgYXQgb25lIHBvaW50IHRoZSBlcnJvcmJlbGwgd2FzIGJyb2tlbgoraW4gVmltLiBBbnkgdGltZSBWaW0gdHJpZWQgdG8gcmluZyB0aGUgdGVybWluYWwgYmVsbCBhbiBBU0NJSSBjaGFyYWN0ZXIgMHgwNword291bGQgYmUgcHJpbnRlZC4gVGhpcyB3b3JrcyBmaW5lIG9uIG1vc3QgdGVybWluYWxzLCBidXQgaXMgYnJva2VuIG9uIGFuCitFQkNESUMgb25lLiBUaGUgY29ycmVjdCBzb2x1dGlvbiB3YXMgdG8gZGVmaW5lIGEgZGlmZmVyZW50IHZhbHVlIGZvciB0aGUgYmVsbAorY2hhcmFjdGVyIG9uIEVCQ0RJQyBzeXN0ZW1zLgorCitSZW1lbWJlciwgaXQncyBvbmx5IHBvc3NpYmxlIHRvIGZpeCBhIGJ1ZyBpZiB0aGUgY29tbXVuaXR5IGtub3dzIGFib3V0IGl0LgorRG9uJ3QgcmVseSBvbiBzb21lb25lIGVsc2UgdG8gcmVwb3J0IGl0ISBTZWUgdGhlIHNlY3Rpb24gfGJ1Zy1yZXBvcnRzfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBCdWlsZGluZyBWSU0gZm9yIHovT1MgVU5JWAkJKk9TMzkwLWJ1aWxkaW5nKiAqek9TLWJ1aWxkaW5nKgorCitBIHdvcmQgb24gZGVidWdnaW5nIGNvZGUgZmlyc3Q6IH4KKworVGhlIG5vcm1hbCBydW4gb2YgY29uZmlndXJlIGFkZHMgdGhlIGZsYWcgJy1nJyB0byB0aGUgY29tcGlsZXIgb3B0aW9ucywKK3RvIGluY2x1ZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGludG8gdGhlIGV4ZWN1dGFibGUuIFRoaXMgaW5mb3JtYXRpb24KK2FyZSBub3JtYWxseSByZW1vdmVkIGZyb20gdGhlIGV4ZWN1dGFibGUgd2l0aCB0aGUgc3RyaXAgY29tbWFuZCBkdXJpbmcKK2luc3RhbGxhdGlvbi4gT24gei9PUyBVTklYLCBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVtb3ZlIHRoaXMgZnJvbQordGhlIGV4ZWN1dGFibGUuIFRoZSBzdHJpcCBjb21tYW5kIGV4aXN0cyBvbiB6L09TIFVOSVggYW5kIGlzIGNhbGxlZAorZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24sIGJ1dCBpdCBkb2VzIG5vdGhpbmcuICBJdCBpcyBlcXVpdmFsZW50IHRvIHRoZQorJ3RvdWNoJyBjb21tYW5kLiBUaGlzIGlzIGR1ZSB0byB0aGUgd2F5IGRlYnVnIHN5bWJvbHMgYXJlIHN0b3JlZCBpbiB0aGUKK29iamVjdHMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4KKworSWYgeW91IHdhbnQgdG8gYnVpbGQgVmltIHdpdGhvdXQgZGVidWdnaW5nIGNvZGUsIGV4cG9ydCB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIENGTEFHUyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGJlZm9yZSB5b3UgY2FsbCB0aGUgY29uZmlndXJlIHNjcmlwdC4KKz4KKwlleHBvcnQgQ0ZMQUdTPSIiCisKKworQnVpbGRpbmcgd2l0aG91dCBYMTE6IH4KKworTm90ZTogVXNlIGNjIHRvIGJ1aWxkIFZpbS4gVGhlIGM4OSBjb21waWxlciBoYXMgc3RyaWN0ZXIgc3ludGF4IGNoZWNraW5nCithbmQgd2lsbCBub3QgY29tcGlsZSBWaW0gY2xlYW5seS4KKworSWYgeW91IGJ1aWxkIFZJTSB3aXRob3V0IFgxMSBzdXBwb3J0LCBjb21waWxpbmcgYW5kIGJ1aWxkaW5nIGlzCitzdHJhaWdodGZvcndhcmQuIERvbid0IGZvcmdldCB0byBleHBvcnQgX0NDX0NDTU9ERT0xIGJlZm9yZSBjYWxsaW5nCitjb25maWd1cmUgYW5kIG1ha2UuCis+CisgICAgJCBleHBvcnQgX0NDX0NDTU9ERT0xCisgICAgJC4vY29uZmlndXJlIC0td2l0aC1mZWF0dXJlcz1iaWcgLS13aXRob3V0LXggLS1lbmFibGUtZ3VpPW5vCisgICAgJCBtYWtlCisgICAgJCBtYWtlIHRlc3QKKzwKKwlUZXN0IG5vdGVzOgorCVRlc3QgMTEgd2lsbCBmYWlsIGlmIHlvdSBkbyBub3QgaGF2ZSBnemlwIGluc3RhbGxlZC4KKwlUZXN0IDQyIHdpbGwgZmFpbCwgYXMgVklNIG9uIHovT1MgVU5JWCBkb2Vzbid0IHN1cHBvcnQgdGhlIG11bHRpYnl0ZQorCWZlYXR1cmUuIChEYXZpZCBNb29yZTogIkRvZXNuJ3Qgd29yayBfeWV0XyEgIDotKSAgSSdsbCBzZWUgd2hhdCBJCisJY2FuIGRvLiIpCis+CisKKyAgICAkIG1ha2UgaW5zdGFsbAorCisKK0J1aWxkaW5nIHdpdGggWDExOiB+CisKK1RoZXJlIGFyZSB0d28gd2F5cyBmb3IgYnVpbGRpbmcgVmltIHdpdGggWDExIHN1cHBvcnQuIFlvdSBjYW4gbGluayBpdAorc3RhdGljYWxseSB3aXRoIHRoZSBYMTEgbGlicmFyaWVzIG9yIGNhbiBiaW5kIGl0IHdpdGggdGhlIFgxMSBETExzLiBUaGUKK3N0YXRpY2FsbHkgbGlua2VkIHZlcnNpb24gcmVzdWx0cyBpbiBhIGh1Z2UgZXhlY3V0YWJsZSAofjEzTUIpLCB3aGlsZSB0aGUKK2R5bmFtaWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlIGlzIG11Y2ggc21hbGxlciAofjQuNU1CKS4KKworSGVyZSBpcyB3aGF0IHlvdSBkbywgaWYgeW91IHdhbnQgTW90aWY6CisKKyAgYSkgU3RhdGljIGxpbmsgPgorCSQgY29uZmlndXJlIC0td2l0aC1mZWF0dXJlcz1iaWcgLS1lbmFibGUtZ3VpPW1vdGlmCisJJCBtYWtlCis8CisgICAgIFZJTSBpcyBub3cgbGlua2VkIHN0YXRpY2FsbHkgd2l0aCB0aGUgWDExIGxpYnJhcmllcy4KKworICBiKSBEeW5hbWljIGxpbms6CisgICAgIE1ha2UgVklNIGFzIGRlc2NyaWJlZCBmb3IgdGhlIHN0YXRpYyBsaW5rLiBUaGVuIGNoYW5nZSB0aGUgY29udGVudHMgb2YKKyAgICAgdGhlICdhdXRvL2xpbmsuc2VkJyBmaWxlIGJ5IGFwcGVuZGluZzogPgorCXMlLWxYbSAgKiUvdXNyL2xpYi9YbS54ICVnCisJcyUtbFgxMSAgKiUvdXNyL2xpYi9YMTEueCAlZworCXMlLWxTTSAgKiUvdXNyL2xpYi9TTS54ICVnCisJcyUtbElDRSAgKiUvdXNyL2xpYi9JQ0UueCAlZworPAorICAgICBUaGVuIGRvOiA+CisJJCBybSB2aW0KKwkkIG1ha2UKKzwKKyAgICAgTm93IFZpbSBpcyBsaW5rZWQgd2l0aCB0aGUgWDExLURMTHMuCisKK1NlZSB0aGUgTWFrZWZpbGUgYW5kIHRoZSBmaWxlIGxpbmsuc2ggb24gaG93IGxpbmsuc2VkIGlzIHVzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gQVNDSUkvRUJDRElDIGRlcGVuZGVudCBzY3JpcHRzCSpPUzM5MC1oYXMtZWJjZGljKiAqek9TLWhhcy1lYmNkaWMqCisKK0ZvciB0aGUgaW50ZXJuYWwgc2NyaXB0IGxhbmd1YWdlIHRoZSBmZWF0dXJlICJlYmNkaWMiIHdhcyBhZGRlZC4gV2l0aCB0aGlzCit5b3UgY2FuIGZpeCBBU0NJSSBkZXBlbmRlbnQgc2NyaXB0cyBsaWtlIHRoaXM6Cis+CisgICAgaWYgaGFzKCJlYmNkaWMiKQorCWxldCBzcGFjZSA9IDY0CisgICAgZWxzZQorCWxldCBzcGFjZSA9IDMyCisgICAgZW5kaWYKKzwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gWFRlcm0gcHJvYmxlbXMJCQkqT1MzOTAteHRlcm0qICp6T1MteHRlcm0qCisKK05vdGU6IFRoaXMgcHJvYmxlbSB3YXMgcmVzb2x2ZWQgaW4gdmVyc2lvbiA2LjFiLiB+CisKK0kgc2F3IG9uZSBwcm9ibGVtIHdpdGggWFRlcm0gb24gei9PUyBVTklYLiAgVGhlIHRlcm1pbmFsIGNvZGUgZm9yIG1vdmluZyB0aGUKK2N1cnNvciB0byB0aGUgbGVmdCBpcyB3cm9uZyBpbiB0aGUgdGVybWxpYiBkYXRhYmFzZS4gIFBlcmhhcHMgbm90IHdyb25nLCBidXQKK2l0IGRpZG4ndCB3b3JrIHdpdGggVklNIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIGNvbW1hbmQgbGluZSBjdXJzb3IgbW92ZW1lbnQuCisKK0lmIHRoZSBoaWdobGlnaHRpbmcgaXMgbWVzc2VkIHVwIHdoaWxlIHlvdSB0eXBlLCBidXQgaXMgb2theSBhZnRlciB5b3UgcmVmcmVzaGVkCit0aGUgc2NyZWVuIHdpdGggPEMtTD4gb3IgaWYgeW91IGNhbid0IG1vdmUgdG8gdGhlIGxlZnQgd2l0aCB0aGUgY3Vyc29yIGtleSBvbgordGhlIGNvbW1hbmQgbGluZSwgdHJ5IGFkZGluZyA+CisJOnNldCB0X2xlPV5ICis8Cit0byB5b3VyIC52aW1yYy4gTm90ZTogJ15IJyBpcyBvbmUgY2hhcmFjdGVyLCBoaXQgPEMtVj48Qy1IPiB0byBnZXQgaXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gTW90aWYgUHJvYmxlbXMJCQkqT1MzOTAtTW90aWYqICp6T1MtTW90aWYqCisKK0l0IHNlZW1zIHRoYXQgaW4gcG9ydGluZyB0aGUgTW90aWYgbGlicmFyeSB0byB6L09TLCBhIHRyYW5zbGF0aW9uIGZyb20gRUJDRElDCit0byBBU0NJSSBmb3IgdGhlIGFjY2VsZXJhdG9yIGNoYXJhY3RlcnMgb2YgdGhlIHB1bGwtZG93biBtZW51cyB3YXMgZm9yZ290dGVuLgorRXZlbiBhZnRlciBJIHRyaWVkIHRvIGhhbmQgY29udmVydCB0aGUgbWVudXMsIHRoZSBhY2NlbGVyYXRvciBrZXlzIGNvbnRpbnVlZAordG8gb25seSB3b3JrIGZvciB0aGUgb3BlbmluZyBvZiBtZW51cyAobGlrZSA8QWx0LUY+IHRvIG9wZW4gdGhlIGZpbGUgbWVudSkuCitUaGV5IHN0aWxsIGRvIG5vdCB3b3JrIGZvciB0aGUgbWVudSBpdGVtcyB0aGVtc2VsdmVzIChsaWtlIDxBbHQtRj5PIHRvIG9wZW4KK3RoZSBmaWxlIGJyb3dzZXIpLgorCitUaGVyZSBpcyBubyBzb2x1dGlvbiBmb3IgdGhpcyBhcyBvZiB5ZXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gQnVncwkJCQkJKk9TMzkwLWJ1Z3MqICp6T1MtQnVncyoKKworLSBWaW0gd2lsbCBjb25zaXN0ZW50bHkgaGFuZyB3aGVuIGEgbGFyZ2UgYW1vdW50IG9mIHRleHQgaXMgc2VsZWN0ZWQgaW4KKyAgdmlzdWFsIGJsb2NrIG1vZGUuICBUaGlzIG1heSBiZSBkdWUgdG8gYSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZS4gIE5vdGUgdGhhdAorICB0aGlzIG9jY3VycyBpbiBib3RoIHRoZSB0ZXJtaW5hbCBhbmQgZ3VpIHZlcnNpb25zLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIEtub3duIHdlYWtuZXNzZXMJCQkqT1MzOTAtd2Vha25lc3NlcyogKnpPUy13ZWFrbmVzc2VzKgorCistIE5vIGJpbmFyeSBzZWFyY2ggaW4gdGFnIGZpbGVzLgorICBUaGUgcHJvZ3JhbSAvYmluL3NvcnQgc29ydHMgYnkgQVNDSUkgdmFsdWUgYnkgZGVmYXVsdC4gVGhpcyBwcm9ncmFtIGlzCisgIG5vcm1hbGx5IHVzZWQgYnkgY3RhZ3MgdG8gc29ydCB0aGUgdGFncy4gVGhlcmUgbWlnaHQgYmUgYSB2ZXJzaW9uIG9mCisgIGN0YWdzIG91dCB0aGVyZSwgdGhhdCBkb2VzIGl0IHJpZ2h0LCBidXQgd2UgY2FuJ3QgYmUgc3VyZS4gU28gdGhpcyBzZWVtcyB0bworICBiZSBhIHBlcm1hbmVudCByZXN0cmljdGlvbi4KKworLSBNdWx0aWJ5dGUgc3VwcG9ydCAodXRmLTgpIGRvZXNuJ3Qgd29yaywgaXQncyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCisgICh8bXVsdGlieXRlfCkKKworLSBUaGUgY3Njb3BlIGludGVyZmFjZSAofGNzY29wZXwpIGRvZXNuJ3Qgd29yayBmb3IgdGhlIHZlcnNpb24gb2YgY3Njb3BlCisgIHRoYXQgd2UgdXNlIG9uIG91ciBtYWluZnJhbWUuICBXZSBoYXZlIGEgY29weSBvZiB2ZXJzaW9uIDE1LjBiMTIsIGFuZCBpdAorICBjYXVzZXMgVmltIHRvIGhhbmcgd2hlbiB1c2luZyB0aGUgImNzY29wZSBhZGQiIGNvbW1hbmQuICBJJ20gZ3Vlc3NpbmcgdGhhdAorICB0aGUgYmluYXJ5IGZvcm1hdCBvZiB0aGUgY3Njb3BlIGRhdGFiYXNlIGlzbid0IHF1aXRlIHdoYXQgVmltIGlzIGV4cGVjdGluZy4KKyAgSSd2ZSB0cmllZCB0byBwb3J0IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgY3Njb3BlICgxNS4zKSB0byB6L09TLCB3aXRob3V0CisgIG11Y2ggc3VjY2Vzcy4gIElmIGFueW9uZSBpcyBpbnRlcmVzdGVkIGluIHRyeWluZywgZHJvcCBtZSBhIGxpbmUgaWYgeW91CisgIG1ha2UgYW55IHByb2dyZXNzLgorCistIE5vIGdsaWIvZ3RrIHN1cHBvcnQuICBJIGhhdmUgbm90IGJlZW4gYWJsZSB0byBzdWNjZXNzZnVsbHkgY29tcGlsZSBnbGliIG9uCisgIHovT1MgVU5JWC4gIFRoaXMgbWVhbnMgeW91J2xsIGhhdmUgdG8gbGl2ZSB3aXRob3V0IHRoZSBwcmV0dHkgZ3RrIHRvb2xiYXIuCisKK05ldmVyIHRlc3RlZDoKKyAgICAtIFBlcmwgaW50ZXJmYWNlCQkofHBlcmx8KQorICAgIC0gSGFuZ3VsIGlucHV0CQkofGhhbmd1bHwpCisgICAgLSBFbmNyeXB0aW9uIHN1cHBvcnQJKHxlbmNyeXB0aW9ufCkKKyAgICAtIExhbmdtYXAJCQkofCdsYW5nbWFwJ3wpCisgICAgLSBQeXRob24gc3VwcG9ydAkJKHxQeXRob258KQorICAgIC0gUmlnaHQtdG8tbGVmdCBtb2RlCSh8J3JpZ2h0bGVmdCd8KQorICAgIC0gU05pRkYrIGludGVyZmFjZQkJKHxzbmlmZnwpCisgICAgLSBUQ0wgaW50ZXJmYWNlCQkofHRjbHwpCisgICAgLi4uCisKK0lmIHlvdSB0cnkgYW55IG9mIHRoZXNlIGZlYXR1cmVzIGFuZCB0aGV5IHdvcmssIGRyb3AgdXMgYSBub3RlIQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIENoYW5nZXMJCQkJKk9TMzkwLWNoYW5nZXMqCSp6T1MtY2hhbmdlcyoKKworVGhpcyBpcyBhIHNtYWxsIHJlZmVyZW5jZSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSB6L09TIHBvcnQgb2YgVmltLiAgSXQgaXMKK25vdCBhbiBleGhhdXN0aXZlIHN1bW1hcnkgb2YgYWxsIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIGNvZGUgYmFzZS4KKworNi4xYiAoYmV0YSk6CisgIENoYW5nZWQgS1NfTEUgaW4gdGVybS5jIHRvIGJlICJcYiIgaW5zdGVhZCBvZiAiXDAxMCIgIFRoaXMgZml4ZWQgdGhlCisgIHNjcmVlbiBjb3JydXB0aW9uIHByb2JsZW1zIGluIGdWaW0gcmVwb3J0ZWQgYnkgQW50aG9ueSBHaW9yZ2lvLgorCisgIEFudGhvbnkgR2lvcmdpbyB1cGRhdGVkIHRoaXMgZG9jdW1lbnQ6CisJLSBDaGFuZ2VkIE9TLzM5MCB0byB6L09TIHdoZXJlIGFwcHJvcHJpYXRlLiBJQk0gZGVjaWRlZCB0byByZW5hbWUKKwkJYWxsIG9mIGl0cyBzZXJ2ZXJzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcy4gIHovT1MgYW5kIE9TLzM5MAorCQlhcmUgdGhlIHNhbWUgcHJvZHVjdCwgYnV0IHRoZSB2ZXJzaW9uIG51bWJlcmluZyBzeXN0ZW0gd2FzCisJCXJlc2V0IGZvciB0aGUgbmFtZSBjaGFuZ2UuIChlLmcuIE9TLzM5MCBWMlIxMSA9PSB6L09TIFYxUjEpCisJLSBBZGRlZCBpbmZvcm1hdGlvbiBhYm91dCBzZWNvbmQgZWRpdGlvbiBvZiB0aGUgT3BlbiBTb3VyY2UgUmVkYm9vay4KKwktIE1vdmVkIFJlZGJvb2sgaW5mb3JtYXRpb24gdG8gYSBzZXBhcmF0ZSBzZWN0aW9uLgorCS0gVmFyaW91cyB0d2Vha3MgYW5kIGNoYW5nZXMuCisJLSBVcGRhdGVkIHRlc3Rpbmcgc2VjdGlvbi4KKworNi4wYXU6CisgIENoYW5nZWQgY29uZmlndXJlLmluCisgIENoYW5nZWQgZG9jdW1lbnRhdGlvbi4KKyAgQW50aG9ueSBHaW9yZ2lvIGZpeGVkIHRoZSBlcnJvcmJlbGwuCisKKyAgRGF2aWQgTW9vcmUgZm91bmQgc29tZSBwcm9ibGVtcywgd2hpY2ggd2VyZSBmaXhlZCBieSBCcmFtIGFuZC9vciBEYXZpZCBmb3IKKyAgNi4wYXUuCisKKzYuMHEgKGFscGhhKToKKyAgTWlub3IgY2hhbmdlcyBmb3IgbnJmb3JtYXRzPWFscGhhIChzZWUgfCducmZvcm1hdHMnfCkuCisgIFByb2JsZW0gd2l0aCBoYXJkLWNvZGVkIGtleWNvZGUgZm9yIHRoZSBFbmdsaXNoIHBvdW5kIHNpZ24uIEFkZGVkIGEgZGVmaW5lIGluCisgIGFzY2lpLmgKKyAgRGlzYWJsZWQgbXVsdGlieXRlIGZvciBFQkNESUMgaW4gZmVhdHVyZS5oCisKKzYuMGYgKGFscGhhKToKKyAgRmlyc3QgY29tcGlsZSBvZiBWaW0gNiBvbiB6L09TIFVOSVguIFNvbWUgbWlub3IgY2hhbmdlcyB3ZXJlIG5lZWRlZC4KKworICBGaW5hbGx5IGZvdW5kIHRoZSByZWFzb24gd2h5IG1ha2UgZnJvbSB0aGUgdG9wIGxldmVsIGRpZG4ndCB3b3JrIChJIG11c3QgaGF2ZQorICBiZWVuIGJsaW5kIGJlZm9yZSEpLiBUaGUgTWFrZWZpbGUgY29udGFpbmVkIGEgbGlzdCBvZiB0YXJnZXRzIGluIG9uZSB0YXJnZXQKKyAgbGluZS4gT24gYWxsIG90aGVyIFVOSVgncyB0aGUgbWFjcm8gJEAgZXZhbHVhdGVzIHRvIHRoZSBmaXJzdCB0YXJnZXQgaW4gdGhpcworICBsaXN0LCBvbmx5IG9uIHovT1MgVU5JWCBpdCBldmFsdWF0ZXMgdG8gdGhlIGxhc3Qgb25lIDotKC4KKworNS42LTM5MGQ6CisgIENsZWFuZWQgdXAgc29tZSBoYWNrcy4KKworNS42LTM5MGM6CisgIEkgZ3JlcHBlZCB0aHJvdWdoIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmVkIGV2ZXJ5IHNwb3Qgd2l0aCBhIGNoYXJhY3RlcgorICBpbnZvbHZlZCBpbiBhIG9wZXJhdGlvbiAoKy0pLiBJIGhvcGUgSSBub3cgZm91bmQgYWxsIEVCQ0RJQy9BU0NJSQorICBzdHVmZiwgYnV0IC4uLi4KKworICBGaXhlZDoKKyAgICAtIGZpeGVkIHdhcm5pbmcgbWVzc2FnZSBpbiBkb19maXhkZWwoKQorICAgIC0gZml4ZWQgdHJhbnNsYXRpb24gZnJvbSBDdHJsLUNoYXIgdG8gc3ltYm9saWMgbmFtZSAobGlrZSBeaCB0byBDVFJMLUgpCisJICAgIGZvciA6aGVscAorICAgIC0gZml4ZWQgeWFuay9kZWxldGUvLi4uIGludG8gcmVnaXN0ZXIKKyAgICAtIGZpeGVkIDpyZWdpc3RlciBjb21tYW5kCisgICAgLSBmaXhlZCB2aW1pbmZvIHJlZ2lzdGVyIHN0b3JpbmcKKyAgICAtIGZpeGVkIHF1aWNrLWFjY2VzcyB0YWJsZSBpbiBmaW5kb3B0aW9ucygpCisgICAgLSBmaXhlZCAnZ15IJyBzZWxlY3QgbW9kZQorICAgIC0gZml4ZWQgdGdldHN0cigpICdnZXQgdGVybWluYWwgY2FwYWJpbGl0eSBzdHJpbmcnLCBFU0MgYW5kCisJICAgIEN0cmwgY2hhcnMgd2hlcmUgd3JvbmcuIChOb3QgdXNlZCBvbiBPUy8zOTAgVU5JWCkKKworCisgIGN0YWdzOgorICAgIC0gYWRkZWQgdHJpZ3JhcGhzIHN1cHBvcnQgKHVzZWQgaW4gcHJvbG9nIG9mIHN5c3RlbSBoZWFkZXIgZmlsZXMpCisJICAgIChnZXQuYykKKyAgICAtIGZpeGVkIHNvcnRpbmcgb3JkZXIgd2l0aCBMQ19DT0xMQVRFPVMzOTAgdG8gZm9yY2UgRUJDRElDIHNvcnRpbmcuCisJICAgIChzb3J0LmMpCisKKzUuNi0zOTBiOgorICBDaGFuZ2VkOgorICAgIC0gY29uZmlndXJlLmluOgorCS0gYWRkZWQgdGVzdCBmb3IgT1MvMzkwIFVOSVgKKwktIGFkZGVkIHNwZWNpYWwgY29tcGlsZXIgYW5kIGxpbmtlciBvcHRpb25zIGlmIGJ1aWxkaW5nIHdpdGggWDExCisgICAgLSBjb25maWd1cmU6CisJLSBhZnRlciBjcmVhdGVkIHZpYSBhdXRvY29uZiBoYW5kLWVkaXRlZCBpdCB0byBtYWtlIHRoZSB0ZXN0IGZvcgorCSAgSUNFQ29ubmVjdGlvbk51bWJlciB3b3JrLiBUaGlzIGlzIGEgYXV0b2NvbmYgcHJvYmxlbS4gT1MvMzkwIFVOSVgKKwkgIG5lZWRzIC1sWDExIGZvciB0aGlzLgorICAgIC0gTWFrZWZpbGUKKwktIERvbid0IGluY2x1ZGUgdGhlIGxpYiBkaXJlY3RvcmllcyAoJy1MLi4uJykgaW50byB0aGUgdmFyaWFibGUKKwkgIEFMTF9MSUJTLiBVc2Ugb3duIHZhcmlhYmxlIEFMTF9MSUJfRElSUyBpbnN0ZWFkLiBBIGZ1bGx5IFBPU0lYCisJICBjb21wbGlhbnQgY29tcGlsZXIgbXVzdCBub3QgYWNjZXB0IG9iamVjdHMvbGlicmFyaWVzIGFuZCBvcHRpb25zCisJICBtaXhlZC4gTm93IHdlIGNhbiBjYWxsIHRoZSBsaW5rZXIgbGlrZSB0aGlzOgorCisJICAgICQoQ0MpICQoTERGTEFHUykgJChBTExfTElCX0RJUlMpICQoT0JKKSAkKEFMTF9MSUJTKQorCisgIEZpeGVkOgorICAgIC0gRG91YmxlIHF1b3RlIGNvdWxkbid0IGJlIGVudGVyZWQKKyAgICAgIE1pc3NlZCBBU0NJSSBkZXBlbmRlbmNpZXMgd2hpbGUgc2V0dGluZyB1cCB0ZXJtaW5hbAorICAgICAgSW4gQVNDSUkgMTI3IGlzIHRoZSBkZWxldGUgY2hhciwgaW4gRUJDRElDIGNvZGVwYWdlIDEwNDcgdGhlIHZhbHVlIDEyNworICAgICAgaXMgdGhlIGRvdWJsZSBxdW90ZS4KKyAgICAtIGZpeGVkICc6Zml4ZGVsJworCis1LjYtMzkwYToKKyAgZmlyc3QgYWxwaGEgcmVsZWFzZSBmb3IgT1MvMzkwIFVOSVguCisKKyAgQWRkaXRpb246CisgICAgLSBGb3IgdGhlIGludGVybmFsIHNjcmlwdCBsYW5ndWFnZSBJIGFkZGVkIHRoZSBmZWF0dXJlICJlYmNkaWMiLgorICAgICAgVGhpcyBjYW4gYmUgcXVlcmllZCB3aXRoIHRoZSBoYXMoKS1mdW5jdGlvbiBvZiB0aGUgaW50ZXJuYWwKKyAgICAgIHNjcmlwdCBsYW5ndWFnZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdmltOnR3PTc4OmZvPXRjcTI6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19hbWlnYS50eHQgYi9ydW50aW1lL2RvYy9vc19hbWlnYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyMTU4MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX2FtaWdhLnR4dApAQCAtMCwwICsxLDEzOSBAQAorKm9zX2FtaWdhLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyNQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKKwkJCQkJCQkqQW1pZ2EqCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcnRpY3VsYXJpdGllcyBmb3IgdGhlIEFtaWdhIHZlcnNpb24gb2YgVmltLgorVGhlcmUgaXMgYWxzbyBhIHNlY3Rpb24gc3BlY2lmaWNhbGx5IGZvciB8TW9ycGhPU3wgYmVsb3cuCisKK0luc3RhbGxhdGlvbiBvbiB0aGUgQW1pZ2E6CistIEFzc2lnbiAiVklNOiIgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgVmltICJkb2MiIGRpcmVjdG9yeSBpcy4gIFZpbSB3aWxsCisgIGxvb2sgZm9yIHRoZSBmaWxlICJWSU06ZG9jL2hlbHAudHh0IiAoZm9yIHRoZSBoZWxwIGNvbW1hbmQpLgorICBTZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkVklNIGFsc28gd29ya3MuICBBbmQgdGhlIG90aGVyIHdheSBhcm91bmQ6CisgIHdoZW4gJFZJTSB1c2VkIGFuZCBpdCBpcyBub3QgZGVmaW5lZCwgIlZJTToiIGlzIHVzZWQuCistIFdpdGggRE9TIDEuMyBvciBlYXJsaWVyOiBQdXQgImFycC5saWJyYXJ5IiBpbiAibGliczoiLiBWaW0gbXVzdCBoYXZlIGJlZW4KKyAgY29tcGlsZWQgd2l0aCB0aGUgfCtBUlB8IGZlYXR1cmUgZW5hYmxlZC4gIE1ha2Ugc3VyZSB0aGF0IG5ld2NsaSBhbmQgcnVuIGFyZQorICBpbiAiQzoiIChmb3IgZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzKS4KKy0gUHV0IGEgc2hlbGwgdGhhdCBhY2NlcHRzIGEgY29tbWFuZCB3aXRoICItYyIgKGUuZy4gIkNzaCIgZnJvbSBGaXNoIGRpc2sKKyAgNjI0KSBpbiAiYzoiIG9yIGluIGFueSBvdGhlciBkaXJlY3RvcnkgdGhhdCBpcyBpbiB5b3VyIHNlYXJjaCBwYXRoIChmb3IKKyAgZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzKS4KKworSWYgeW91IGhhdmUgc3VmZmljaWVudCBtZW1vcnkgeW91IGNhbiBhdm9pZCBzdGFydHVwIGRlbGF5cyBieSBtYWtpbmcgVmltIGFuZAorY3NoIHJlc2lkZW50IHdpdGggdGhlIGNvbW1hbmQgInJleiBjc2ggdmltIi4gWW91IHdpbGwgaGF2ZSB0byBwdXQKKyJyZXpsaWIubGlicmFyeSIgaW4geW91ciAibGliczoiIGRpcmVjdG9yeS4gVW5kZXIgMi4wIHlvdSB3aWxsIG5lZWQgcmV6Cit2ZXJzaW9uIDAuNS4KKworSWYgeW91IGRvIG5vdCB1c2UgZGlncmFwaHMsIHlvdSBjYW4gc2F2ZSBzb21lIG1lbW9yeSBieSByZWNvbXBpbGluZyB3aXRob3V0Cit0aGUgfCtkaWdyYXBoc3wgZmVhdHVyZS4gSWYgeW91IHdhbnQgdG8gdXNlIFZpbSB3aXRoIG90aGVyIHRlcm1pbmFscyB5b3UgY2FuCityZWNvbXBpbGUgd2l0aCB0aGUgVEVSTUNBUCBvcHRpb24uIFZpbSBjb21waWxlcyB3aXRoIE1hbnggNS54IGFuZCBTQVMgNi54LgorU2VlIHRoZSBtYWtlZmlsZXMgYW5kIGZlYXR1cmUuaC4KKworSWYgeW91IHdhbnQgdG8gdXNlIGRpZmZlcmVudCBjb2xvcnMgc2V0IHRoZSB0ZXJtY2FwIGNvZGVzOgorCXRfbXIgKGZvciBpbnZlcnRlZCB0ZXh0KQorCXRfbWQgKGZvciBib2xkIHRleHQpCisJdF9tZSAoZm9yIG5vcm1hbCB0ZXh0IGFmdGVyIHRfbXIgYW5kIHRfbWQpCisJdF9zbyAoZm9yIHN0YW5kb3V0IG1vZGUpCisJdF9zZSAoZm9yIG5vcm1hbCB0ZXh0IGFmdGVyIHRfc28pCisJdF91cyAoZm9yIHVuZGVybGluZWQgdGV4dCkKKwl0X3VlIChmb3Igbm9ybWFsIHRleHQgYWZ0ZXIgdF91cykKKwl0X1pIIChmb3IgaXRhbGljIHRleHQpCisJdF9aUiAoZm9yIG5vcm1hbCB0ZXh0IGFmdGVyIHRfWkgpCisKK1N0YW5kYXJkIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBhcmUgdXNlZC4gVGhlIGNvZGVzIGFyZToKKzMwIGdyZXkgY2hhciAgIDQwIGdyZXkgY2VsbCAgID4wIGdyZXkgYmFja2dyb3VuZCAgICAwIGFsbCBhdHRyaWJ1dGVzIG9mZgorMzEgYmxhY2sgY2hhciAgNDEgYmxhY2sgY2VsbCAgPjEgYmxhY2sgYmFja2dyb3VuZCAgIDEgYm9sZGZhY2UKKzMyIHdoaXRlIGNoYXIgIDQyIHdoaXRlIGNlbGwgID4yIHdoaXRlIGJhY2tncm91bmQgICAyIGZhaW50CiszMyBibHVlIGNoYXIgICA0MyBibHVlIGNlbGwgICA+MyBibHVlIGJhY2tncm91bmQgICAgMyBpdGFsaWMKKzM0IGdyZXkgY2hhciAgIDQ0IGdyZXkgY2VsbCAgID40IGdyZXkgYmFja2dyb3VuZCAgICA0IHVuZGVyc2NvcmUKKzM1IGJsYWNrIGNoYXIgIDQ1IGJsYWNrIGNlbGwgID41IGJsYWNrIGJhY2tncm91bmQgICA3IHJldmVyc2UgdmlkZW8KKzM2IHdoaXRlIGNoYXIgIDQ2IHdoaXRlIGNlbGwgID42IHdoaXRlIGJhY2tncm91bmQgICA4IGludmlzaWJsZQorMzcgYmx1ZSBjaGFyICAgNDcgYmx1ZSBjZWxsICAgPjcgYmx1ZSBiYWNrZ3JvdW5kCisKK1RoZSBjb2RlcyB3aXRoICc+JyBtdXN0IGJlIHRoZSBsYXN0LiBUaGUgY2VsbCBhbmQgYmFja2dyb3VuZCBjb2xvciBzaG91bGQgYmUKK3RoZSBzYW1lLiBUaGUgY29kZXMgY2FuIGJlIGNvbWJpbmVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoIGEgc2VtaWNvbG9uLiBGb3IKK2V4YW1wbGUgdG8gZ2V0IHdoaXRlIHRleHQgb24gYSBibHVlIGJhY2tncm91bmQ6ID4KKyAgOnNldCB0X21lPV5WPEVzYz5bMDszMjs0Mzs+M20KKyAgOnNldCB0X3NlPV5WPEVzYz5bMDszMjs0Mzs+M20KKyAgOnNldCB0X3VlPV5WPEVzYz5bMDszMjs0Mzs+M20KKyAgOnNldCB0X1pSPV5WPEVzYz5bMDszMjs0Mzs+M20KKyAgOnNldCB0X21kPV5WPEVzYz5bMTszMjs0Mzs+M20KKyAgOnNldCB0X21yPV5WPEVzYz5bNzszMjs0Mzs+M20KKyAgOnNldCB0X3NvPV5WPEVzYz5bMDszMTs0Mzs+M20KKyAgOnNldCB0X3VzPV5WPEVzYz5bNDszMjs0Mzs+M20KKyAgOnNldCB0X1pIPV5WPEVzYz5bMzszMjs0Mzs+M20KKworV2hlbiB1c2luZyBtdWx0aXBsZSBjb21tYW5kcyB3aXRoIGEgZmlsdGVyIGNvbW1hbmQsIGUuZy4gPgorICA6ciEgZWNobyB0aGlzOyBlY2hvIHRoYXQKK09ubHkgdGhlIG91dHB1dCBvZiB0aGUgbGFzdCBjb21tYW5kIGlzIHVzZWQuIFRvIGZpeCB0aGlzIHlvdSBoYXZlIHRvIGdyb3VwIHRoZQorY29tbWFuZHMuIFRoaXMgZGVwZW5kcyBvbiB0aGUgc2hlbGwgeW91IHVzZSAodGhhdCBpcyB3aHkgaXQgaXMgbm90IGRvbmUKK2F1dG9tYXRpY2FsbHkgaW4gVmltKS4gRXhhbXBsZXM6ID4KKyAgOnIhIChlY2hvIHRoaXM7IGVjaG8gdGhhdCkKKyAgOnIhIHtlY2hvIHRoaXM7IGVjaG8gdGhhdH0KKworQ29tbWFuZHMgdGhhdCBhY2NlcHQgYSBzaW5nbGUgZmlsZSBuYW1lIGFsbG93IGZvciBlbWJlZGRlZCBzcGFjZXMgaW4gdGhlIGZpbGUKK25hbWUuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgY29tbWFuZHMgdGhhdCBhY2NlcHQgc2V2ZXJhbCBmaWxlIG5hbWVzLCBlbWJlZGRlZAorc3BhY2VzIG5lZWQgdG8gYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZpbSBmb3IgTW9ycGhPUwkJCQkJCQkqTW9ycGhPUyoKKworW3RoaXMgc2VjdGlvbiBtb3N0bHkgYnkgQWxpIEFrY2FhZ2FjXQorCitGb3IgdGhlIGxhdGVzdCBpbmZvIGFib3V0IHRoZSBNb3JwaE9TIHZlcnNpb246CisJaHR0cDovL3d3dy5ha2NhYWdhYy5jb20vaW5kZXhfdmltLmh0bWwKKworCitQcm9ibGVtcyB+CisKK1RoZXJlIGFyZSBhIGNvdXBsZSBvZiBwcm9ibGVtcyB3aGljaCBhcmUgbm90IE1vcnBoT1MgcmVsYXRlZCBidXQgbW9yZSBWaW0gYW5kCitVTipYIHJlbGF0ZWQuIFdoZW4gc3RhcnRpbmcgdXAgVmltIGluIHJhbTogaXQgY29tcGxhaW5zIHdpdGggYSBuYWcgcmVxdWVzdGVyCitmcm9tIE1vcnBoT1MgcGxlYXNlIHNpbXBseSBpZ25vcmUgaXQuIEFub3RoZXIgcHJvYmxlbSBpcyB3aGVuIHJ1bm5pbmcgVmltIGFzCitpcyBzb21lIHBsdWdpbnMgd2lsbCBjYXVzZSBhIGZldyBwcm9ibGVtcyB3aGljaCB5b3UgY2FuIGlnbm9yZSBhcyB3ZWxsLgorSG9wZWZ1bGx5IHNvbWVvbmUgd2lsbCBiZSBmaXhpbmcgaXQgb3ZlciB0aGUgdGltZS4KKworVG8gcGFzcyBhbGwgdGhlc2UgcHJvYmxlbXMgZm9yIG5vdyB5b3UgY2FuIGVpdGhlciBydW46CisKKwl2aW0gPGZpbGUgdG8gYmUgZWRpdGVkPgorCitvciBpZiB5b3Ugd2FudCB0byBydW4gVmltIHBsYWluIGFuZCBlbmpveSB0aGUgbW90aW9uIG9mIEhlbHBmaWxlcyBldGMuIGl0IHRoZW4KK3dvdWxkIGJlIGJldHRlciB0byBlbnRlcjoKKworCXZpbSAtLW5vcGx1Z2lucyA8b2YgY291cnNlIHlvdSBjYW4gYWRkIGEgZmlsZT4KKworCitJbnN0YWxsYXRpb24gfgorCisxKSBQbGVhc2UgY29weSB0aGUgYmluYXJ5ICdWSU0nIGZpbGUgdG8gYzoKKzIpIEdldCB0aGUgVmltIHJ1bnRpbWUgcGFja2FnZSBmcm9tOgorCisJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9hbWlnYS92aW02MnJ0LnRnegorCisgICBhbmQgdW5wYWNrIGl0IGluIHlvdXIgJ0FwcHMnIGRpcmVjdG9yeSBvZiB0aGUgTW9ycGhPUyBpbnN0YWxsYXRpb24uIEZvciBtZQorICAgdGhpcyB3b3VsZCBjcmVhdGUgZm9sbG93aW5nIGRpcmVjdG9yeSBoaWVyYXJjaHk6CisKKwlNb3JwaE9TOkFwcHMvVmltL1ZpbTYyLy4uLgorCiszKSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIHM6c2hlbGwtc3RhcnR1cCAoSW1wb3J0YW50ISkuCisKKwk7QmVnaW4gVklNCisJU2V0IFZJTT1Nb3JwaE9TOkFwcHMvVmltL1ZpbTYyCisJQXNzaWduIEhPTUU6ICIiCisJO0VuZCBWSU0KKworNCkgQ29weSB0aGUgJy52aW1yYycgZmlsZSB0byBzOgorCis1KSBUaGVyZSBpcyBhbHNvIGEgZmlsZSBuYW1lZCAnY29sb3Itc2VxdWVuY2UnIGluY2x1ZGVkIGluIHRoaXMgYXJjaGl2ZS4gVGhpcworICAgd2lsbCBzZXQgdGhlIE1vcnBoT1MgU2hlbGwgdG8gc2hvdyBBTlNJIGNvbG9ycy4gUGxlYXNlIGNvcHkgdGhlIGZpbGUgdG8gczoKKyAgIGFuZCBjaGFuZ2UgdGhlIHM6c2hlbGwtc3RhcnR1cCB0bzoKKworCTtCZWdpbiBWSU0KKwlTZXQgVklNPU1vcnBoT1M6QXBwcy9WaW0vVmltNjIKKwlBc3NpZ24gSE9NRTogIiIKKwlFeGVjdXRlIFM6Q29sb3ItU2VxdWVuY2UKKwlDbHMKKwk7RW5kIFZJTQorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19iZW9zLnR4dCBiL3J1bnRpbWUvZG9jL29zX2Jlb3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODk2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vc19iZW9zLnR4dApAQCAtMCwwICsxLDM0OCBAQAorKm9zX2Jlb3MudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJCQkJKkJlT1MqICpCZUJveCoKK1RoaXMgaXMgYSBwb3J0IG9mIFZpbSA1LjEgdG8gdGhlIEJlT1MgUHJldmlldyBSZWxlYXNlIDIgKGFsc28ga25vd24gYXMgUFIyKQorb3IgbGF0ZXIuCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgcGFydGljdWxhcml0aWVzIGZvciB0aGUgQmVCb3gvQmVPUyB2ZXJzaW9uIG9mIFZpbS4gIEZvcgorbWF0dGVycyBub3QgZGlzY3Vzc2VkIGluIHRoaXMgZmlsZSwgVmltIGJlaGF2ZXMgdmVyeSBtdWNoIGxpa2UgdGhlIFVuaXgKK3xvc191bml4LnR4dHwgdmVyc2lvbi4KKworIDEuIEdlbmVyYWwJCQl8YmVvcy1nZW5lcmFsfAorIDIuIENvbXBpbGluZyBWaW0JCXxiZW9zLWNvbXBpbGluZ3wKKyAzLiBUaW1lb3V0IGluIHRoZSBUZXJtaW5hbAl8YmVvcy10aW1lb3V0fAorIDQuIFVuaWNvZGUgdnMuIExhdGluMQkJfGJlb3MtdW5pY29kZXwKKyA1LiBUaGUgQmVPUyBHVUkJCXxiZW9zLWd1aXwKKyA2LiBUaGUgJFZJTSBkaXJlY3RvcnkJCXxiZW9zLXZpbWRpcnwKKyA3LiBEcmFnICYgRHJvcAkJCXxiZW9zLWRyYWduZHJvcHwKKyA4LiBTaW5nbGUgTGF1bmNoIHZzLiBNdWx0aXBsZQorICAgIExhdW5jaAkJCXxiZW9zLWxhdW5jaHwKKyA5LiBGb250cwkJCXxiZW9zLWZvbnRzfAorMTAuIFRoZSBtZXRhIGtleSBtb2RpZmllcgl8YmVvcy1tZXRhfAorMTEuIE1vdXNlIGtleSBtYXBwaW5ncwkJfGJlb3MtbW91c2V8CisxMi4gQ29sb3IgbmFtZXMJCQl8YmVvcy1jb2xvcnN8CisxMy4gQ29tcGlsaW5nIHdpdGggUGVybAkJfGJlb3MtcGVybHwKKworCisxLiBHZW5lcmFsCQkJCQkJKmJlb3MtZ2VuZXJhbCoKKworVGhlIGRlZmF1bHQgc3ludGF4IGhpZ2hsaWdodGluZyBtb3N0bHkgd29ya3Mgd2l0aCBkaWZmZXJlbnQgZm9yZWdyb3VuZCBjb2xvcnMKK3RvIGhpZ2hsaWdodCBpdGVtcy4gVGhpcyB3b3JrcyBiZXN0IGlmIHlvdSBzZXQgeW91ciBUZXJtaW5hbCB3aW5kb3cgdG8gYQorZGFya2lzaCBiYWNrZ3JvdW5kIGFuZCBsaWdodCBsZXR0ZXJzLiBTb21lIG1pZGRsZS1ncmV5IGJhY2tncm91bmQgKGZvcgoraW5zdGFuY2UgKHIsZyxiKT0oMTY4LDE2OCwxNjgpKSB3aXRoIGJsYWNrIGxldHRlcnMgYWxzbyB3b3JrcyBuaWNlbHkuICBJZiB5b3UKK3VzZSB0aGUgZGVmYXVsdCBsaWdodCBiYWNrZ3JvdW5kIGFuZCBkYXJrIGxldHRlcnMsIGl0IG1heSBsb29rIGJldHRlciB0bworc2ltcGx5IHJldmVyc2UgdGhlIG5vdGlvbiBvZiBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9yIHNldHRpbmdzLiBUbyBkbwordGhpcywgYWRkIHRoaXMgdG8geW91ciAudmltcmMgZmlsZSAod2hlcmUgPEVzYz4gbWF5IG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aAordGhlIGVzY2FwZSBjaGFyYWN0ZXIpOiA+CisKKyAgOmlmICZ0ZXJtID09ICJiZW9zLWFuc2kiCisgIDogICAgc2V0IHRfQUI9PEVzYz5bMyVkbQorICA6ICAgIHNldCB0X0FGPTxFc2M+WzQlZG0KKyAgOmVuZGlmCisKKworMi4gQ29tcGlsaW5nIFZpbQkJCQkJKmJlb3MtY29tcGlsaW5nKgorCitGcm9tIHRoZSBBZHZhbmNlZCBBY2Nlc3MgUHJldmlldyBSZWxlYXNlIChBQVBSKSBvbiwgVmltIGNhbiBiZSBjb25maWd1cmVkIHdpdGgKK3RoZSBzdGFuZGFyZCBjb25maWd1cmUgc2NyaXB0LiBUbyBnZXQgdGhlIGNvbXBpbGVyIGFuZCBpdHMgZmxhZ3MgcmlnaHQsIHVzZQordGhlIGZvbGxvd2luZyBjb21tYW5kLWxpbmUgaW4gdGhlIHNoZWxsICh5b3UgY2FuIGN1dCBhbmQgcGFzdGUgaXQgaW4gb25lIGdvKToKKworQ0M9JEJFX0NfQ09NUElMRVIgQ0ZMQUdTPSIkQkVfREVGQVVMVF9DX0ZMQUdTIC1PNyIgXAorICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS9ib290L2hvbWUvY29uZmlnCisKKyRCRV9DX0NPTVBJTEVSIGlzIHVzdWFsbHkgIm13Y2MiLCAkQkVfREVGQVVMVF9DX0ZMQUdTIGlzIHVzdWFsbHkgIi1JLSAtSS4iCisKK1doZW4gY29uZmlndXJlIGhhcyBydW4sIGFuZCB5b3Ugd2lzaCB0byBlbmFibGUgR1VJIHN1cHBvcnQsIHlvdSBtdXN0IGVkaXQgdGhlCitjb25maWcubWsgZmlsZSBzbyB0aGF0IHRoZSBsaW5lcyB3aXRoIEdVSV94eHggcmVmZXIgdG8gJChCRU9TR1VJX3h4eCkgaW5zdGVhZAorb2YgJChOT05FX3h4eCkuCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gbWFrZSB0aGlzIGNoYW5nZSBpbiB0aGUgTWFrZWZpbGU7IGl0IHdpbGwgaGF2ZSBhCittb3JlIHBlcm1hbmVudCBlZmZlY3QuIFNlYXJjaCBmb3IgIk5PTkVfIi4KKworQWZ0ZXIgY29tcGlsYXRpb24geW91IG5lZWQgdG8gYWRkIHRoZSByZXNvdXJjZXMgdG8gdGhlIGJpbmFyeS4gQWRkIHRoZQorZm9sbG93aW5nIGZldyBsaW5lcyBuZWFyIHRoZSBlbmQgKGJlZm9yZSB0aGUgbGluZSB3aXRoICJleGl0ICRleGl0X3ZhbHVlIikgb2YKK3RoZSBsaW5rLnNoIHNjcmlwdCB0byBkbyB0aGlzIGF1dG9tYXRpY2FsbHkuCisKKyAgICBybWF0dHIgQkVPUzpUWVBFIHZpbQorICAgIGNvcHlyZXMgb3NfYmVvcy5yc3JjIHZpbQorICAgIG1pbWVzZXQgdmltCisKK0Fsc28sIGNyZWF0ZSBhIGR1bW15IGZpbGUgInN0cmlwIjoKKworICAgICMhL2Jpbi9zaAorICAgIG1pbWVzZXQgJDEKKyAgICBleGl0IDAKKworWW91IHdpbGwgbmVlZCBpdCB3aGVuIHVzaW5nICJtYWtlIGluc3RhbGwiIHRvIGluc3RhbGwgVmltLgorCitOb3cgdHlwZSAibWFrZSIgdG8gY29tcGlsZSBWaW0sIHRoZW4gIm1ha2UgaW5zdGFsbCIgdG8gaW5zdGFsbCBpdC4KKworSWYgeW91IHdhbnQgdG8gaW5zdGFsbCBWaW0gYnkgaGFuZCwgeW91IG11c3QgY29weSBWaW0gdG8gJEhPTUUvY29uZmlnL2JpbiwgYW5kCitjcmVhdGUgYSBidW5jaCBvZiBzeW1saW5rcyB0byBpdCAoe2cscixyZ317dmltLGV4LHZpZXd9KS4gRnVydGhlcm1vcmUgeW91IG11c3QKK2NvcHkgVmltcyBjb25maWd1cmF0aW9uIGZpbGVzIHRvICRIT01FL2NvbmZpZy9zaGFyZS92aW06Cit2aW0tNS4wcy97Ki52aW0sZG9jLHN5bnRheH0uICBGb3IgY29tcGxldGVuZXNzLCB5b3Ugc2hvdWxkIGFsc28gY29weSB0aGUgbnJvZmYKK21hbnVhbCBwYWdlcyB0byAkSE9NRS9jb25maWcvbWFuL21hbjEuIERvbid0IGZvcmdldCBjdGFncy9jdGFncyBhbmQgeHhkL3h4ZCEKKworT2J2aW91c2x5LCB5b3UgbmVlZCB0aGUgdW5saW1pdGVkIGxpbmtlciB0byBhY3R1YWxseSBsaW5rIFZpbS4gU2VlCitodHRwOi8vd3d3Lm1ldHJvd2Vya3MuY29tIGZvciBwdXJjaGFzaW5nIHRoZSBDb2RlV2FycmlvciBjb21waWxlciBmb3IgQmVPUy4KK1RoZXJlIGFyZSBjdXJyZW50bHkgbm8gb3RoZXIgbGlua2VycyB0aGF0IGNhbiBkbyB0aGUgam9iLgorCitUaGlzIHdvbid0IGJlIGFibGUgdG8gaW5jbHVkZSB0aGUgUGVybCBvciBQeXRob24gaW50ZXJmYWNlcyBldmVuIGlmCit5b3UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgZmlsZXMgaW5zdGFsbGVkLiB8YmVvcy1wZXJsfAorCisKKzMuIFRpbWVvdXQgaW4gdGhlIFRlcm1pbmFsCQkJCSpiZW9zLXRpbWVvdXQqCisKK0JlY2F1c2Ugc29tZSBQT1NJWC9VTklYIGZlYXR1cmVzIGFyZSBzdGlsbCBtaXNzaW5nWzFdLCB0aGVyZSBpcyBubyBkaXJlY3QgT1MKK3N1cHBvcnQgZm9yIHJlYWQtd2l0aC10aW1lb3V0IGluIHRoZSBUZXJtaW5hbC4gVGhpcyB3b3VsZCBtZWF0IHRoYXQgeW91IGNhbm5vdAordXNlIDptYXBwaW5ncyBvZiBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciwgdW5sZXNzIHlvdSBhbHNvIDpzZXQgbm90aW1lb3V0LgorfCd0aW1lb3V0J3wKKworVG8gY2lyY3VtdmVudCB0aGlzIHByb2JsZW0sIEkgYWRkZWQgYSB3b3JrYXJvdW5kIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeQoraW5wdXQgd2l0aCB0aW1lb3V0IGJ5IHVzaW5nIGFuIGV4dHJhIHRocmVhZCB3aGljaCByZWFkcyBhaGVhZCBvbmUgY2hhcmFjdGVyLgorQXMgYSBzaWRlIGVmZmVjdCwgaXQgYWxzbyBtYWtlcyBWaW0gcmVjb2duaXplIHdoZW4gdGhlIFRlcm1pbmFsIHdpbmRvdworcmVzaXplcy4KKworRnVuY3Rpb24ga2V5cyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGUgVGVybWluYWwgc2luY2UgdGhleSBwcm9kdWNlIHZlcnkKK2luZGlzdGluY3RpdmUgY2hhcmFjdGVyIHNlcXVlbmNlcy4KKworVGhlc2UgcHJvYmxlbXMgZG8gbm90IGV4aXN0IGluIHRoZSBHVUkuCisKK1sxXTogdGhlcmUgaXMgbm8gc2VsZWN0KCkgb24gZmlsZSBkZXNjcmlwdG9yczsgYWxzbyB0aGUgdGVybWlvcyBWTUlOIGFuZCBWVElNRQorc2V0dGluZ3MgZG8gbm90IHNlZW0gdG8gd29yayBwcm9wZXJseS4gVGhpcyBoYXMgYmVlbiB0aGUgY2FzZSBzaW5jZSBEUjcgYXQKK2xlYXN0IGFuZCBzdGlsbCBoYXMgbm90IGJlZW4gZml4ZWQgYXMgb2YgUFIyLgorCisJCQkJCQkJKmJlb3MtdW5pY29kZSoKKzQuIFVuaWNvZGUgdnMuIExhdGluMQkJCQkJKmJlb3MtdXRmOCoKKworQmVPUyB1c2VzIFVuaWNvZGUgYW5kIFVURi04IGZvciB0ZXh0IHN0cmluZ3MgKDE2LWJpdCBjaGFyYWN0ZXJzIGVuY29kZWQgdG8KKzgtYml0IGNoYXJhY3RlcnMpLiBWaW0gYXNzdW1lcyBJU08tTGF0aW4xIG9yIG90aGVyIDgtYml0IGNoYXJhY3RlciBjb2Rlcy4KK1RoaXMgZG9lcyBub3QgcHJvZHVjZSB0aGUgZGVzaXJlZCByZXN1bHRzIGZvciBub24tQVNDSUkgY2hhcmFjdGVycy4gVHJ5IHRoZQorY29tbWFuZCA6ZGlncmFwaHMgdG8gc2VlLiBJZiB0aGV5IGxvb2sgbWVzc2VkIHVwLCB1c2UgOnNldCBpc3ByaW50PUAgdG8KKyhzbGlnaHRseSkgaW1wcm92ZSB0aGUgZGlzcGxheSBvZiBJU08tTGF0aW4xIGNoYXJhY3RlcnMgMTI4LTI1NS4gIFRoaXMgd29ya3MKK2JldHRlciBpbiB0aGUgR1VJLCBkZXBlbmRpbmcgb24gd2hpY2ggZm9udCB5b3UgdXNlIChiZWxvdykuCisKK1lvdSBtYXkgYWxzbyB1c2UgdGhlIC9ib290L2Jpbi94dG91IGNvbW1hbmQgdG8gY29udmVydCBVVEYtOCBmaWxlcyBmcm9tICh4dG91CistZiBpc28xIGZpbGVuYW1lKSBvciB0byAoeHRvdSAtdCBpc28xIGZpbGVuYW1lKSBJU08tTGF0aW4xIGNoYXJhY3RlcnMuCisKKworNS4gVGhlIEJlT1MgR1VJCQkJCQkJKmJlb3MtZ3VpKgorCitOb3JtYWxseSBWaW0gc3RhcnRzIHdpdGggdGhlIEdVSSBpZiB5b3Ugc3RhcnQgaXQgYXMgZ3ZpbSBvciB2aW0gLWcuICBUaGUgQmVPUwordmVyc2lvbiB0cmllcyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHN0YXJ0ZWQgZnJvbSB0aGUgVHJhY2tlciBpbnN0ZWFkIG9mIHRoZQorVGVybWluYWwsIGFuZCBpZiBzbywgdXNlIHRoZSBHVUkgYW55d2F5LiBIb3dldmVyLCB0aGUgY3VycmVudCBkZXRlY3Rpb24gc2NoZW1lCitpcyBmb29sZWQgaWYgeW91IHVzZSB0aGUgY29tbWFuZCAidmltIC0gPC9kZXYvbnVsbCIgb3IgInZpbSBmaWxlbmFtZSAmIi4gVGhlCitsYXR0ZXIgY2FuIGJlIGNhbGxlZCBhIGZlYXR1cmUgYnV0IHByb2JhYmx5IG9ubHkgd29ya3MgYmVjYXVzZSB0aGVyZSBpcyBubworQlNELXN0eWxlIGpvYiBjb250cm9sLgorCitTdHVmZiB0aGF0IGRvZXMgbm90IHdvcmsgeWV0OgorCistIFJ1bm5pbmcgZXh0ZXJuYWwgY29tbWFuZHMgZnJvbSB0aGUgR1VJIGRvZXMgbm90IHdvcmsgMTAwJSAoYWdhaW4gZHVlIHRvIGxhY2sKKyAgb2Ygc3VwcG9ydCBmb3Igc2VsZWN0KCkpLiBUaGVyZSB3YXMgYSBjaG9pY2UgYmV0d2VlbiBzZWVpbmcgdGhlIGNvbW1hbmQncworICBvdXRwdXQsIG9yIGJlaW5nIGFibGUgdG8gaW50ZXJydXB0IGl0LiBJIGNob3NlIGZvciBzZWVpbmcgdGhlIG91dHB1dC4gRXZlbgorICBub3cgdGhlIGNvbW1hbmQgc29tZXRpbWVzIGNyYXNoZXMgbXlzdGVyaW91c2x5LCBhcHBhcmVudGx5IGluIEJlJ3MKKyAgbWFsbG9jX2ludGVybmFsKCkgY2FsbGVkIGZyb20gdGhlIHB1dGVudigpIGZ1bmN0aW9uLCBhZnRlciBmb3JrKClpbmcuIChkYXRhCisgIGFjY2VzcyBleGNlcHRpb24gb2NjdXJyZWQsIGVjMDFiMGVjOiAgOTBlODAwMDAgKnN0dyByNywgMHgwMDAwIChyOCkpKDohbHMKKyAgd29ya3MgdXN1YWxseSwgOnIgIWxzIHVzdWFsbHkgZG9lc24ndCkuIFRoaXMgaGFzIGJlZW4gcmVwb3J0ZWQgYXMgYnVnCisgICMgOTcxMjE1LTA4MzgyNi4KKy0gVGhlIHdpbmRvdyB0aXRsZS4KKy0gU3RhcnRpbmcgdGhlIEdVSSBmcm9tIHRoZSBUZXJtaW5hbCB2ZXJzaW9uIHdpdGggOmd1aSBhbHdheXMgYWN0cyBhcyBpZgorICA6Z3VpIC1mIHdlcmUgdXNlZC4gVGhlcmUgaXMgbm8gd2F5IHRvIGZpeCB0aGlzIHRoYXQgSSBjYW4gc2VlLgorLSBUaGVyZSBhcmUgc29tZSBzbWFsbCBkaXNwbGF5IGdsaXRjaGVzIGhlcmUgYW5kIHRoZXJlIHRoYXQgSSBob3BlIHRvIGNsZWFuIHVwCisgIGxhdGVyLiBNb3N0IG9mIHRoZW0gb2NjdXIgd2hlbiB0aGUgd2luZG93IGlzIHBhcnRpYWxseSBvYnNjdXJlZC4gU29tZSBvZgorICB0aGVtIHNlZW0gdG8gYmUgYnVncyBpbiBCZU9TLCBiZWNhdXNlIHRoZSBUZXJtaW5hbCBoYXMgc2ltaWxhciBnbGl0Y2hlcy4KKy0gTW91c2UgdXAgZXZlbnRzIGFyZSBub3QgZ2VuZXJhdGVkIHdoZW4gb3V0c2lkZSB0aGUgd2luZG93LiBUaGlzIGlzIGEgYnVnIGluCisgIEJlT1MuIFlvdSBjYW4gbm90aWNlIHRoaXMgd2hlbiBzZWxlY3RpbmcgdGV4dCBhbmQgbW92aW5nIHRoZSBjdXJzb3Igb3V0c2lkZQorICB0aGUgd2luZG93LCB0aGVuIGxldHRpbmcgZ28gb2YgdGhlIG1vdXNlIGJ1dHRvbi4gIEFub3RoZXIgd2F5IGlzIHdoZW4geW91CisgIGRyYWcgdGhlIHNjcm9sbGJhciBhbmQgZG8gdGhlIHNhbWUgdGhpbmcuICBCZWNhdXNlIFZpbSBzdGlsbCB0aGlua3MgeW91IGFyZQorICBzdGlsbCBwbGF5aW5nIHdpdGggdGhlIHNjcm9sbGJhciBpdCB3b24ndCBjaGFuZ2UgaXQgaXRzZWxmLiBJIHByb3ZpZGVkIGEKKyAgd29ya2Fyb3VuZCB3aGljaCBraWNrcyBpbiB3aGVuIHRoZSB3aW5kb3cgaXMgYWN0aXZhdGVkIG9yIGRlYWN0aXZhdGVkIChzbyBpdAorICB3b3JrcyBiZXN0IHdpdGggZm9jdXMtIGZvbGxvd3MtbW91c2UgKC9ib290L2Jpbi9mZm0pIHR1cm5lZCBvbikuCistIFRoZSBjdXJzb3IgZG9lcyBub3QgZmxhc2ggKHZlcnkgbG93IHByaW9yaXR5OyBJJ20gbm90IHN1cmUgSSBldmVuIGxpa2UgaXQKKyAgd2hlbiBpdCBmbGFzaGVzKQorCisKK1RoZSAkVklNIGRpcmVjdG9yeQkJCQkJKmJlb3MtdmltZGlyKgorCiskVklNIGlzIHRoZSBzeW1ib2xpYyBuYW1lIGZvciB0aGUgcGxhY2Ugd2hlcmUgVmltcyBzdXBwb3J0IGZpbGVzIGFyZSBzdG9yZWQuCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJFZJTSBpcyBzZXQgYXQgY29tcGlsZSB0aW1lIGFuZCBjYW4gYmUgZGV0ZXJtaW5lZCB3aXRoID4KKworICA6dmVyc2lvbgorCitUaGUgbm9ybWFsIHZhbHVlIGlzIC9ib290L2hvbWUvY29uZmlnL3NoYXJlL3ZpbS4gSWYgeW91IGRvbid0IGxpa2UgaXQgeW91IGNhbgorc2V0IHRoZSBWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgdGhpcywgb3Igc2V0ICdoZWxwZmlsZScgaW4geW91cgorLnZpbXJjOiA+CisKKyAgOmlmIHZlcnNpb24gPj0gNTAwCisgIDogICAgc2V0IGhlbHBmaWxlPX4vdmltL3ZpbTU0L2RvYy9oZWxwLnR4dAorICA6ICAgIHN5bnRheCBvbgorICA6ZW5kaWYKKworCis3LiBEcmFnICYgRHJvcAkJCQkJCSpiZW9zLWRyYWduZHJvcCoKKworWW91IGNhbiBkcm9wIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvbiBlaXRoZXIgdGhlIFZpbSBpY29uIChzdGFydHMgYSBuZXcgVmltCitzZXNzaW9uLCB1bmxlc3MgeW91IHVzZSB0aGUgRmlsZSBUeXBlcyBhcHBsaWNhdGlvbiB0byBzZXQgVmltIHRvIGJlICJTaW5nbGUKK0xhdW5jaCIpIG9yIG9uIHRoZSBWaW0gd2luZG93IChzdGFydHMgZWRpdGluZyB0aGUgZmlsZXMpLiAgRHJvcHBpbmcgYSBmb2xkZXIKK3NldHMgVmltJ3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gfDpjZHwgfDpwd2R8IElmIHlvdSBkcm9wIGZpbGVzIG9yCitmb2xkZXJzIHdpdGggZWl0aGVyIFNISUZUIGtleSBwcmVzc2VkLCBWaW0gY2hhbmdlcyBkaXJlY3RvcnkgdG8gdGhlIGZvbGRlcgordGhhdCBjb250YWlucyB0aGUgZmlyc3QgaXRlbSBkcm9wcGVkLiBXaGVuIHN0YXJ0aW5nIFZpbSwgdGhlcmUgaXMgbm8gbmVlZCB0bworcHJlc3Mgc2hpZnQ6IFZpbSBiZWhhdmVzIGFzIGlmIHlvdSBkby4KKworRmlsZXMgZHJvcHBlZCBzZXQgdGhlIGN1cnJlbnQgYXJndW1lbnQgbGlzdC4gfGFyZ3VtZW50LWxpc3R8CisKKworOC4gU2luZ2xlIExhdW5jaCB2cy4gTXVsdGlwbGUgTGF1bmNoCQkJKmJlb3MtbGF1bmNoKgorCitBcyBkaXN0cmlidXRlZCBWaW0ncyBBcHBsaWNhdGlvbiBGbGFncyAoYXMgc2VlbiBpbiB0aGUgRmlsZVR5cGVzIHByZWZlcmVuY2UpCithcmUgc2V0IHRvIE11bHRpcGxlIExhdW5jaC4gSWYgeW91IHByZWZlciwgeW91IGNhbiBzZXQgdGhlbSB0byBTaW5nbGUgTGF1bmNoCitpbnN0ZWFkLiAgQXR0ZW1wdHMgdG8gc3RhcnQgYSBzZWNvbmQgY29weSBvZiBWaW0gd2lsbCBjYXVzZSB0aGUgZmlyc3QgVmltIHRvCitvcGVuIHRoZSBmaWxlcyBpbnN0ZWFkLiBUaGlzIHdvcmtzIGZyb20gdGhlIFRyYWNrZXIgYnV0IGFsc28gZnJvbSB0aGUgY29tbWFuZAorbGluZS4gSW4gdGhlIGxhdHRlciBjYXNlLCBub24tZmlsZSAob3B0aW9uKSBhcmd1bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisKK05COiBPbmx5IHRoZSBHVUkgdmVyc2lvbiBoYXMgYSBCQXBwbGljYXRpb24gKGFuZCBoZW5jZSBBcHBsaWNhdGlvbiBGbGFncykuCitUaGlzIHNlY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gdGhlIEdVSS1sZXNzIHZlcnNpb24sIHNob3VsZCB5b3UgY29tcGlsZSBvbmUuCisKKworOS4gRm9udHMJCQkJCQkqYmVvcy1mb250cyoKKworU2V0IGZvbnRzIHdpdGggPgorCisgIDpzZXQgZ3VpZm9udD1Db3VyaWVyMTBfQlQvUm9tYW4vMTAKKword2hlcmUgdGhlIGZpcnN0IHBhcnQgaXMgdGhlIGZvbnQgZmFtaWx5LCB0aGUgc2Vjb25kIHBhcnQgdGhlIHN0eWxlLCBhbmQgdGhlCit0aGlyZCBwYXJ0IHRoZSBzaXplLiBZb3UgY2FuIHVzZSB1bmRlcnNjb3JlcyBpbnN0ZWFkIG9mIHNwYWNlcyBpbiBmYW1pbHkgYW5kCitzdHlsZS4KKworQmVzdCByZXN1bHRzIGFyZSBvYnRhaW5lZCB3aXRoIG1vbm9zcGFjZWQgZm9udHMgKHN1Y2ggYXMgQ291cmllcikuIFZpbQorYXR0ZW1wdHMgdG8gdXNlIGFsbCBmb250cyBpbiBCX0ZJWEVEX1NQQUNJTkcgbW9kZSBidXQgYXBwYXJlbnRseSB0aGlzIGRvZXMgbm90Cit3b3JrIGZvciBwcm9wb3J0aW9uYWwgZm9udHMgKGRlc3BpdGUgd2hhdCB0aGUgQmVCb29rIHNheXMpLgorCitWaW0gYWxzbyB0cmllcyB0byB1c2UgdGhlIEJfSVNPODg1OV8xIGVuY29kaW5nLCBhbHNvIGtub3duIGFzIElTTyBMYXRpbiAxLgorVGhpcyBhbHNvIGRvZXMgbm90IHdvcmsgZm9yIGFsbCBmb250cy4gSXQgZG9lcyB3b3JrIGZvciBDb3VyaWVyLCBidXQgbm90IGZvcgorUHJvRm9udElTT0xhdGluMS9SZWd1bGFyIChzdHJhbmdlbHkgZW5vdWdoKS4gWW91IGNhbiB2ZXJpZnkgdGhpcyBieSBnaXZpbmcgdGhlID4KKworICA6ZGlncmFwaHMKKworY29tbWFuZCwgd2hpY2ggbGlzdHMgYSBidW5jaCBvZiBjaGFyYWN0ZXJzIHdpdGggdGhlaXIgSVNPIExhdGluIDEgZW5jb2RpbmcuCitJZiwgZm9yIGluc3RhbmNlLCB0aGVyZSBhcmUgImJveCIgY2hhcmFjdGVycyBhbW9uZyB0aGVtLCBvciB0aGUgbGFzdCBjaGFyYWN0ZXIKK2lzbid0IGEgZG90dGVkLXksIHRoZW4gZm9yIHRoaXMgZm9udCB0aGUgZW5jb2RpbmcgZG9lcyBub3Qgd29yay4KKworSWYgdGhlIGZvbnQgeW91IHNwZWNpZnkgaXMgdW5hdmFpbGFibGUsIHlvdSBnZXQgdGhlIHN5c3RlbSBmaXhlZCBmb250LgorCitTdGFuZGFyZCBmaXhlZC13aWR0aCBzeXN0ZW0gZm9udHMgYXJlOgorCisJICAgICAgUHJvRm9udElTT0xhdGluMS9SZWd1bGFyCisJCSAgQ291cmllcjEwX0JUL1JvbWFuCisJCSAgQ291cmllcjEwX0JUL0l0YWxpYworCQkgIENvdXJpZXIxMF9CVC9Cb2xkCisJCSAgQ291cmllcjEwX0JUL0JvbGRfSXRhbGljCisKK1N0YW5kYXJkIHByb3BvcnRpb25hbCBzeXN0ZW0gZm9udHMgYXJlOgorCisJCSAgICBTd2lzNzIxX0JUL1JvbWFuCisJCSAgICBTd2lzNzIxX0JUL0l0YWxpYworCQkgICAgU3dpczcyMV9CVC9Cb2xkCisJCSAgICBTd2lzNzIxX0JUL0JvbGRfSXRhbGljCisJCUR1dGNoODAxX1JtX0JUL1JvbWFuCisJCUR1dGNoODAxX1JtX0JUL0l0YWxpYworCQlEdXRjaDgwMV9SbV9CVC9Cb2xkCisJCUR1dGNoODAxX1JtX0JUL0JvbGRfSXRhbGljCisJCSAgIEJhc2tlcnZpbGxlL1JvbWFuCisJCSAgIEJhc2tlcnZpbGxlL0l0YWxpYworCQkgICBCYXNrZXJ2aWxsZS9Cb2xkCisJCSAgIEJhc2tlcnZpbGxlL0JvbGRfSXRhbGljCisJCSBTeW1ib2xQcm9wX0JUL1JlZ3VsYXIKKworVHJ5IHNvbWUgb2YgdGhlbSwganVzdCBmb3IgZnVuLgorCisKKzEwLiBUaGUgbWV0YSBrZXkgbW9kaWZpZXIJCQkJKmJlb3MtbWV0YSoKKworVGhlIE1FVEEga2V5IG1vZGlmaWVyIGlzIG9idGFpbmVkIGJ5IHRoZSBsZWZ0IG9yIHJpZ2h0IE9QVElPTiBrZXlzLiAgVGhpcyBpcworYmVjYXVzZSB0aGUgQUxUIChha2EgQ09NTUFORCkga2V5cyBhcmUgbm90IHBhc3NlZCB0byBhcHBsaWNhdGlvbnMuCisKKworMTEuIE1vdXNlIGtleSBtYXBwaW5ncwkJCQkJKmJlb3MtbW91c2UqCisKK1ZpbSBjYWxscyB0aGUgdmFyaW91cyBtb3VzZSBidXR0b25zIExlZnRNb3VzZSwgTWlkZGxlTW91c2UgYW5kIFJpZ2h0TW91c2UuICBJZgoreW91IHVzZSB0aGUgZGVmYXVsdCBNb3VzZSBwcmVmZXJlbmNlIHNldHRpbmdzIHRoZXNlIG5hbWVzIGluZGVlZCBjb3JyZXNwb25kIHRvCityZWFsaXR5LiBWaW0gdXNlcyB0aGlzIG1hcHBpbmc6CisKKyAgICBCdXR0b24gMSAtPiBMZWZ0TW91c2UsCisgICAgQnV0dG9uIDIgLT4gUmlnaHRNb3VzZSwKKyAgICBCdXR0b24gMyAtPiBNaWRkbGVNb3VzZS4KKworSWYgeW91ciBtb3VzZSBoYXMgZmV3ZXIgdGhhbiAzIGJ1dHRvbnMgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duIG1hcHBpbmcgZnJvbQorbW91c2UgY2xpY2tzIHdpdGggbW9kaWZpZXIocykgdG8gb3RoZXIgbW91c2UgYnV0dG9ucy4gU2VlIHRoZSBmaWxlCit2aW0tNS54L21hY3Jvcy9zd2FwbW91cy52aW0gZm9yIGFuIGV4YW1wbGUuCQl8Z3VpLW1vdXNlLW1hcHBpbmd8CisKKworMTIuIENvbG9yIG5hbWVzCQkJCQkJKmJlb3MtY29sb3JzKgorCitWaW0gaGFzIGEgbnVtYmVyIG9mIGNvbG9yIG5hbWVzIGJ1aWx0LWluLiBBZGRpdGlvbmFsIG5hbWVzIGFyZSByZWFkIGZyb20gdGhlCitmaWxlICRWSU1SVU5USU1FL3JnYi50eHQsIGlmIHByZXNlbnQuIFRoaXMgZmlsZSBpcyBiYXNpY2FsbHkgdGhlIGNvbG9yCitkYXRhYmFzZSBmcm9tIFguIE5hbWVzIHVzZWQgZnJvbSB0aGlzIGZpbGUgYXJlIGNhY2hlZCBmb3IgZWZmaWNpZW5jeS4KKworCisxMy4gQ29tcGlsaW5nIHdpdGggUGVybAkJCQkJKmJlb3MtcGVybCoKKworQ29tcGlsaW5nIHdpdGggUGVybCBzdXBwb3J0IGVuYWJsZWQgaXMgc2xpZ2h0bHkgdHJpY2t5LiBUaGUgTWV0cm93ZXJrcworY29tcGlsZXIgaGFzIHNvbWUgc3RyYW5nZSBpZGVhcyB3aGVyZSB0byBzZWFyY2ggZm9yIGluY2x1ZGUgZmlsZXMuIFNpbmNlCitzZXZlcmFsIGluY2x1ZGUgZmlsZXMgd2l0aCBQZXJsIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgc29tZSBWaW0gaGVhZGVyCitmaWxlcywgdGhlIHdyb25nIG9uZXMgZ2V0IGluY2x1ZGVkLiBUbyBmaXggdGhpcywgcnVuIHRoZSBmb2xsb3dpbmcgUGVybAorc2NyaXB0IHdoaWxlIGluIHRoZSB2aW0tNS4wL3NyYyBkaXJlY3Rvcnk6ID4KKworICAgcHJlcHJvYy5wbCA+IHBlcmwuaAorCisgICAgIyEvYmluL2VudiBwZXJsCisgICAgIyBTaW1wbGUgI2luY2x1ZGUgZXhwYW5kZXIsIGp1c3QgZ29vZCBlbm91Z2ggZm9yIHRoZSBQZXJsIGhlYWRlciBmaWxlcy4KKworICAgIHVzZSBzdHJpY3Q7CisgICAgdXNlIElPOjpGaWxlOworICAgIHVzZSBDb25maWc7CisKKyAgICBzdWIgZG9pbmNsdWRlCisgICAgeworCW15ICRmaWxlbmFtZSA9ICRfWzBdOworCW15ICRmaCA9IG5ldyBJTzo6RmlsZSgkZmlsZW5hbWUsICJyIik7CisJaWYgKGRlZmluZWQgJGZoKSB7CisJICAgIHByaW50ICIvKiBTdGFydCBvZiAkZmlsZW5hbWUgKi9cbiI7CisKKwkgICAgd2hpbGUgKDwkZmg+KSB7CisJCWlmICgvXiNpbmNsdWRlICIoLiopIi8pIHsKKwkJICAgIGRvaW5jbHVkZSgkMSk7CisJCSAgICBwcmludCAiLyogQmFjayBpbiAkZmlsZW5hbWUgKi9cbiI7CisJCX0gZWxzZSB7CisJCSAgICBwcmludCAkXzsKKwkJfQorCSAgICB9CisJICAgIHByaW50ICIvKiBFbmQgb2YgJGZpbGVuYW1lICovXG4iOworCisJICAgIHVuZGVmICRmaDsKKwl9IGVsc2UgeworCSAgICBwcmludCAiLyogQ2Fubm90IG9wZW4gJGZpbGVuYW1lICovXG4iOworCSAgICBwcmludCAiI2luY2x1ZGUgXCIkZmlsZW5hbWVcIlxuIjsKKwl9CisgICAgfQorCisgICAgY2hkaXIgICAgICRDb25maWd7aW5zdGFsbGFyY2hsaWJ9LiIvQ09SRSI7CisgICAgZG9pbmNsdWRlICJwZXJsLmgiOworCitJdCBleHBhbmRzIHRoZSAicGVybC5oIiBoZWFkZXIgZmlsZSwgdXNpbmcgb25seSBvdGhlciBQZXJsIGhlYWRlciBmaWxlcy4KKworTm93IHlvdSBjYW4gY29uZmlndXJlICYgbWFrZSBWaW0gd2l0aCB0aGUgLS1lbmFibGUtcGVybGludGVycCBvcHRpb24uCitCZSB3YXJuZWQgdGhvdWdoIHRoYXQgdGhpcyBhZGRzIGFib3V0IDYxNiBraWxvYnl0ZXMgdG8gdGhlIHNpemUgb2YgVmltIQorV2l0aG91dCBQZXJsLCBWaW0gd2l0aCBkZWZhdWx0IGZlYXR1cmVzIGFuZCBHVUkgaXMgYWJvdXQgNTc1Sywgd2l0aCBQZXJsCitpdCBpcyBhYm91dCAxMTkxSy4KKworLU9sYWYgU2VpYmVydAorCitbTm90ZTogdGhlc2UgYWRkcmVzc2VzIG5vIGxvbmdlciB3b3JrOl0KKzxyaGlhbHRvQHBvbGRlci51YmMua3VuLm5sPgoraHR0cDovL3BvbGRlci51YmMua3VuLm5sL35yaGlhbHRvL2JlCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19kb3MudHh0IGIvcnVudGltZS9kb2Mvb3NfZG9zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzgyZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3NfZG9zLnR4dApAQCAtMCwwICsxLDI5NSBAQAorKm9zX2Rvcy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIERlYyAyMAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKKwkJCQkJCQkqZG9zKiAqRE9TKgorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgY29tbW9uIHBhcnRpY3VsYXJpdGllcyBvZiB0aGUgTVMtRE9TIGFuZCBXaW4zMgordmVyc2lvbnMgb2YgVmltLiAgQWxzbyBzZWUgfG9zX3dpbjMyLnR4dHwgYW5kIHxvc19tc2Rvcy50eHR8LgorCisxLiBGaWxlIGxvY2F0aW9ucwkJfGRvcy1sb2NhdGlvbnN8CisyLiBVc2luZyBiYWNrc2xhc2hlcwkJfGRvcy1iYWNrc2xhc2h8CiszLiBTdGFuZGFyZCBtYXBwaW5ncwkJfGRvcy1zdGFuZGFyZC1tYXBwaW5nc3wKKzQuIFNjcmVlbiBvdXRwdXQgYW5kIGNvbG9ycwl8ZG9zLWNvbG9yc3wKKzUuIEZpbGUgZm9ybWF0cwkJCXxkb3MtZmlsZS1mb3JtYXRzfAorNi4gOmNkIGNvbW1hbmQJCQl8ZG9zLTpjZHwKKzcuIEludGVycnVwdGluZwkJCXxkb3MtQ1RSTC1CcmVha3wKKzguIFRlbXAgZmlsZXMJCQl8ZG9zLXRlbXAtZmlsZXN8Cis5LiBTaGVsbCBvcHRpb24gZGVmYXVsdAkJfGRvcy1zaGVsbHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBGaWxlIGxvY2F0aW9ucwkJCQkJKmRvcy1sb2NhdGlvbnMqCisKK0lmIHlvdSBrZWVwIHRoZSBWaW0gZXhlY3V0YWJsZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGhlbHAgYW5kCitzeW50YXggc3ViZGlyZWN0b3JpZXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgVmltIHRvCit3b3JrLiAgTm8gcmVnaXN0cnkgZW50cmllcyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbmVlZCB0byBiZSBzZXQuICBKdXN0IG1ha2UKK3N1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGlzIGluIHlvdXIgc2VhcmNoIHBhdGgsIG9yIHVzZSBhIHNob3J0Y3V0IG9uIHRoZQorZGVza3RvcC4KKworWW91ciB2aW1yYyBmaWxlcyAoIl92aW1yYyIgYW5kICJfZ3ZpbXJjIikgYXJlIG5vcm1hbGx5IGxvY2F0ZWQgb25lIGRpcmVjdG9yeQordXAgZnJvbSB0aGUgcnVudGltZSBmaWxlcy4gIElmIHlvdSB3YW50IHRvIHB1dCB0aGVtIHNvbWV3aGVyZSBlbHNlLCBzZXQgdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSAkVklNIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IGtlZXAgdGhlbS4gIEV4YW1wbGU6ID4KKwlzZXQgVklNPUM6XHVzZXJccGlldAorV2lsbCBmaW5kICJjOlx1c2VyXHBpZXRcX3ZpbXJjIi4KK05vdGU6IFRoaXMgd291bGQgb25seSBiZSBuZWVkZWQgd2hlbiB0aGUgY29tcHV0ZXIgaXMgdXNlZCBieSBzZXZlcmFsIHBlb3BsZS4KK090aGVyd2lzZSBpdCdzIHNpbXBsZXIgdG8ga2VlcCB5b3VyIF92aW1yYyBmaWxlIGluIHRoZSBkZWZhdWx0IHBsYWNlLgorCitJZiB5b3UgbW92ZSB0aGUgZXhlY3V0YWJsZSB0byBhbm90aGVyIGxvY2F0aW9uLCB5b3UgYWxzbyBuZWVkIHRvIHNldCB0aGUgJFZJTQorZW52aXJvbm1lbnQgdmFyaWFibGUuICBUaGUgcnVudGltZSBmaWxlcyB3aWxsIGJlIGZvdW5kIGluICIkVklNL3ZpbXt2ZXJzaW9ufSIuCitFeGFtcGxlOiA+CisJc2V0IFZJTT1FOlx2aW0KK1dpbGwgZmluZCB0aGUgdmVyc2lvbiA1LjQgcnVudGltZSBmaWxlcyBpbiAiZTpcdmltXHZpbTU0Ii4KK05vdGU6IFRoaXMgaXMgX25vdF8gcmVjb21tZW5kZWQuICBUaGUgcHJlZmVycmVkIHdheSBpcyB0byBrZWVwIHRoZSBleGVjdXRhYmxlCitpbiB0aGUgcnVudGltZSBkaXJlY3RvcnkuCisKK0lmIHlvdSBtb3ZlIHlvdXIgZXhlY3V0YWJsZSBBTkQgd2FudCB0byBwdXQgeW91ciAiX3ZpbXJjIiBhbmQgIl9ndmltcmMiIGZpbGVzCitzb21ld2hlcmUgZWxzZSwgeW91IG11c3Qgc2V0ICRWSU0gdG8gd2hlcmUgeW91IHZpbXJjIGZpbGVzIGFyZSwgYW5kIHNldAorJFZJTVJVTlRJTUUgdG8gdGhlIHJ1bnRpbWUgZmlsZXMuICBFeGFtcGxlOiA+CisJc2V0IFZJTT1DOlx1c3JccGlldAorCXNldCBWSU1SVU5USU1FPUU6XHZpbVx2aW01NAorV2lsbCBmaW5kICJjOlx1c2VyXHBpZXRcX3ZpbXJjIiBhbmQgdGhlIHJ1bnRpbWUgZmlsZXMgaW4gImU6XHZpbVx2aW01NCIuCisKK1NlZSB8JFZJTXwgYW5kIHwkVklNUlVOVElNRXwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1VuZGVyIFdpbmRvd3MgOTUsIHlvdSBjYW4gc2V0ICRWSU0gaW4geW91ciBDOlxhdXRvZXhlYy5iYXQgZmlsZS4gIEZvcgorZXhhbXBsZTogPgorICBzZXQgVklNPUQ6XHZpbQorVW5kZXIgV2luZG93cyBOVCwgeW91IGNhbiBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBlYWNoIHVzZXIgc2VwYXJhdGVseQordW5kZXIgIlN0YXJ0L1NldHRpbmdzL0NvbnRyb2wgUGFuZWwtPlN5c3RlbSIsIG9yIHRocm91Z2ggdGhlIHByb3BlcnRpZXMgaW4gdGhlCittZW51IG9mICJNeSBDb21wdXRlciIsIHVuZGVyIHRoZSBFbnZpcm9ubWVudCBUYWIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVXNpbmcgYmFja3NsYXNoZXMJCQkJCSpkb3MtYmFja3NsYXNoKgorCitVc2luZyBiYWNrc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGNhbiBiZSBhIHByb2JsZW0uICBWaSBoYWx2ZXMgdGhlIG51bWJlciBvZgorYmFja3NsYXNoZXMgZm9yIHNvbWUgY29tbWFuZHMuICBWaW0gaXMgYSBiaXQgbW9yZSB0b2xlcmFudCBhbmQgZG9lcyBub3QgcmVtb3ZlCitiYWNrc2xhc2hlcyBmcm9tIGEgZmlsZSBuYW1lLCBzbyAiOmUgYzpcZm9vXGJhciIgd29ya3MgYXMgZXhwZWN0ZWQuICBCdXQgd2hlbgorYSBiYWNrc2xhc2ggb2NjdXJzIGJlZm9yZSBhIHNwZWNpYWwgY2hhcmFjdGVyIChzcGFjZSwgY29tbWEsIGJhY2tzbGFzaCwgZXRjLiksCitWaW0gcmVtb3ZlcyB0aGUgYmFja3NsYXNoLiAgVXNlIHNsYXNoZXMgdG8gYXZvaWQgcHJvYmxlbXM6ICI6ZSBjOi9mb28vYmFyIgord29ya3MgZmluZS4gIFZpbSByZXBsYWNlcyB0aGUgc2xhc2hlcyB3aXRoIGJhY2tzbGFzaGVzIGludGVybmFsbHkgdG8gYXZvaWQKK3Byb2JsZW1zIHdpdGggc29tZSBNUy1ET1MgcHJvZ3JhbXMgYW5kIFdpbjMyIHByb2dyYW1zLgorCitXaGVuIHlvdSBwcmVmZXIgdG8gdXNlIGZvcndhcmQgc2xhc2hlcywgc2V0IHRoZSAnc2hlbGxzbGFzaCcgb3B0aW9uLiAgVmltIHdpbGwKK3RoZW4gcmVwbGFjZSBiYWNrc2xhc2hlcyB3aXRoIGZvcndhcmQgc2xhc2hlcyB3aGVuIGV4cGFuZGluZyBmaWxlIG5hbWVzLiAgVGhpcworaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiB1c2luZyBhIFVuaXgtbGlrZSAnc2hlbGwnLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFN0YW5kYXJkIG1hcHBpbmdzCQkJCSpkb3Mtc3RhbmRhcmQtbWFwcGluZ3MqCisKK0NUUkwtUGFnZVVwCWN1cnNvciB0byBmaXJzdCBzY3JlZW4gbGluZQkJCSo8Qy1QYWdlVXA+KgorQ1RSTC1QYWdlRG93bgljdXJzb3IgdG8gbGFzdCBzY3JlZW4gbGluZSwgbGFzdCBjaGFyYWN0ZXIJKjxDLVBhZ2VEb3duPioKKworVGhlc2UgbWFwcGluZ3MgYWNjb21wbGlzaCB0aGlzOgorCitrZXkJCWtleSBjb2RlICAgICBOb3JtYWwvVmlzdWFsIG1vZGUJICAgIEluc2VydCBtb2RlIH4KK0NUUkwtUGFnZVVwCTxNLU4+PE0tQy1EPgkgICAgSAkJICAgIDxDLU8+SAorQ1RSTC1QYWdlRG93bgk8TS1OPnYJCSAgICBMJAkJICAgIDxDLU8+TDxDLU8+JAorCitBZGRpdGlvbmFsbHksIHRoZXNlIGtleXMgYXJlIGF2YWlsYWJsZSBmb3IgY29weS9jdXQvcGFzdGUuICBJbiB0aGUgV2luMzIKK2FuZCBESkdQUCB2ZXJzaW9ucywgdGhleSBhbHNvIHVzZSB0aGUgY2xpcGJvYXJkLgorCitTaGlmdC1JbnNlcnQJcGFzdGUgdGV4dCAoZnJvbSBjbGlwYm9hcmQpCQkJKjxTLUluc2VydD4qCitDVFJMLUluc2VydAljb3B5IFZpc3VhbCB0ZXh0ICh0byBjbGlwYm9hcmQpCQkJKjxDLUluc2VydD4qCitDVFJMLURlbAljdXQgVmlzdWFsIHRleHQgKHRvIGNsaXBib2FyZCkJCQkqPEMtRGVsPioKK1NoaWZ0LURlbAljdXQgVmlzdWFsIHRleHQgKHRvIGNsaXBib2FyZCkJCQkqPFMtRGVsPioKKworVGhlc2UgbWFwcGluZ3MgYWNjb21wbGlzaCB0aGlzIChXaW4zMiBhbmQgREpHUFAgdmVyc2lvbnMgb2YgVmltKToKKwora2V5CQlrZXkgY29kZSAgICAgTm9ybWFsCVZpc3VhbAkgICAgSW5zZXJ0IH4KK1NoaWZ0LUluc2VydAk8TS1OPjxNLVQ+ICAgIipQCSItZCIqUCAgICAgIDxDLVI+PEMtTz4qCitDVFJMLUluc2VydAk8TS1OPjxNLVU+CQkiKnkKK1NoaWZ0LURlbAk8TS1OPjxNLVc+CQkiKmQKK0NUUkwtRGVsCTxNLU4+PE0tWD4JCSIqZAorCitPciB0aGVzZSBtYXBwaW5ncyAobm9uLVdpbjMyIHZlcnNpb24gb2YgVmltKToKKwora2V5CQlrZXkgY29kZSAgICAgTm9ybWFsCVZpc3VhbAkgICAgSW5zZXJ0IH4KK1NoaWZ0LUluc2VydAk8TS1OPjxNLVQ+ICAgUAkJIi1kUAkgICAgPEMtUj48Qy1PPiIKK0NUUkwtSW5zZXJ0CTxNLU4+PE0tVT4JCXkKK1NoaWZ0LURlbAk8TS1OPjxNLVc+CQlkCitDVFJMLURlbAk8TS1OPjxNLVg+CQlkCisKK1doZW4gdGhlIGNsaXBib2FyZCBpcyBzdXBwb3J0ZWQsIHRoZSAiKiByZWdpc3RlciBpcyB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFNjcmVlbiBvdXRwdXQgYW5kIGNvbG9ycwkJCQkqZG9zLWNvbG9ycyoKKworVGhlIGRlZmF1bHQgb3V0cHV0IG1ldGhvZCBmb3IgdGhlIHNjcmVlbiBpcyB0byB1c2UgYmlvcyBjYWxscy4gIFRoaXMgd29ya3MKK3JpZ2h0IGF3YXkgb24gbW9zdCBzeXN0ZW1zLiAgWW91IGRvIG5vdCBuZWVkIGFuc2kuc3lzLiAgWW91IGNhbiB1c2UgIjptb2RlIiB0bworc2V0IHRoZSBjdXJyZW50IHNjcmVlbiBtb2RlLiAgU2VlIHw6bW9kZXwuCisKK1RvIGNoYW5nZSB0aGUgc2NyZWVuIGNvbG9ycyB0aGF0IFZpbSB1c2VzLCB5b3UgY2FuIHVzZSB0aGUgfDpoaWdobGlnaHR8Citjb21tYW5kLiAgVGhlIE5vcm1hbCBoaWdobGlnaHQgZ3JvdXAgc3BlY2lmaWVzIHRoZSBjb2xvcnMgVmltIHVzZXMgZm9yIG5vcm1hbAordGV4dC4gIEZvciBleGFtcGxlLCB0byBnZXQgZ3JleSB0ZXh0IG9uIGEgYmx1ZSBiYWNrZ3JvdW5kOiA+CisJOmhpIE5vcm1hbCBjdGVybWJnPUJsdWUgY3Rlcm1mZz1ncmV5CitTZWUgfGhpZ2hsaWdodC1ncm91cHN8IGZvciBvdGhlciBncm91cHMgdGhhdCBhcmUgYXZhaWxhYmxlLgorCitBIERPUyBjb25zb2xlIGRvZXMgbm90IHN1cHBvcnQgYXR0cmlidXRlcyBsaWtlIGJvbGQgYW5kIHVuZGVybGluaW5nLiAgWW91IGNhbgorc2V0IHRoZSBjb2xvciB1c2VkIGluIGZpdmUgbW9kZXMgd2l0aCBuaW5lIHRlcm1jYXAgb3B0aW9ucy4gIE5vdGUgdGhhdCB0aGlzIGlzCitub3QgbmVjZXNzYXJ5IHNpbmNlIHlvdSBjYW4gc2V0IHRoZSBjb2xvciBkaXJlY3RseSB3aXRoIHRoZSAiOmhpZ2hsaWdodCIKK2NvbW1hbmQ7IHRoZXNlIG9wdGlvbnMgYXJlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgVmltIHZlcnNpb25zLgorVGhlIHwnaGlnaGxpZ2h0J3wgb3B0aW9uIHNwZWNpZmllcyB3aGljaCBvZiB0aGUgZml2ZSBtb2RlcyBpcyB1c2VkIGZvciB3aGljaAorYWN0aW9uLiA+CisKKwk6c2V0IHRfbXI9XlZeW1x8eHhtCQlzdGFydCBvZiBpbnZlcnQgbW9kZQorCTpzZXQgdF9tZD1eVl5bXHx4eG0JCXN0YXJ0IG9mIGJvbGQgbW9kZQorCTpzZXQgdF9tZT1eVl5bXHx4eG0JCWJhY2sgdG8gbm9ybWFsIHRleHQKKworCTpzZXQgdF9zbz1eVl5bXHx4eG0JCXN0YXJ0IG9mIHN0YW5kb3V0IG1vZGUKKwk6c2V0IHRfc2U9XlZeW1x8eHhtCQliYWNrIHRvIG5vcm1hbCB0ZXh0CisKKwk6c2V0IHRfdXM9XlZeW1x8eHhtCQlzdGFydCBvZiB1bmRlcmxpbmUgbW9kZQorCTpzZXQgdF91ZT1eVl5bXHx4eG0JCWJhY2sgdG8gbm9ybWFsIHRleHQKKworCTpzZXQgdF9aSD1eVl5bXHx4eG0JCXN0YXJ0IG9mIGl0YWxpY3MgbW9kZQorCTpzZXQgdF9aUj1eVl5bXHx4eG0JCWJhY2sgdG8gbm9ybWFsIHRleHQKKworXlYgaXMgQ1RSTC1WCiteWyBpcyA8RXNjPgorWW91IG11c3QgcmVwbGFjZSB4eCB3aXRoIGEgZGVjaW1hbCBjb2RlLCB3aGljaCBpcyB0aGUgZm9yZWdyb3VuZCBjb2xvciBudW1iZXIKK2FuZCBiYWNrZ3JvdW5kIGNvbG9yIG51bWJlciBhZGRlZCB0b2dldGhlcjoKKworQ09MT1IJCQlGT1JFR1JPVU5ECUJBQ0tHUk9VTkQJfgorQmxhY2sJCQkgICAgMAkJICAgIDAKK0RhcmtCbHVlCQkgICAgMQkJICAgMTYKK0RhcmtHcmVlbgkJICAgIDIJCSAgIDMyCitEYXJrQ3lhbgkJICAgIDMJCSAgIDQ4CitEYXJrUmVkCQkJICAgIDQJCSAgIDY0CitEYXJrTWFnZW50YQkJICAgIDUJCSAgIDgwCitCcm93biwgRGFya1llbGxvdwkgICAgNgkJICAgOTYKK0xpZ2h0R3JheQkJICAgIDcJCSAgMTEyCitEYXJrR3JheQkJICAgIDgJCSAgMTI4ICoKK0JsdWUsIExpZ2h0Qmx1ZQkJICAgIDkJCSAgMTQ0ICoKK0dyZWVuLCBMaWdodEdyZWVuCSAgIDEwCQkgIDE2MCAqCitDeWFuLCBMaWdodEN5YW4JCSAgIDExCQkgIDE3NiAqCitSZWQsIExpZ2h0UmVkCQkgICAxMgkJICAxOTIgKgorTWFnZW50YSwgTGlnaHRNYWdlbnRhCSAgIDEzCQkgIDIwOCAqCitZZWxsb3csIExpZ2h0WWVsbG93CSAgIDE0CQkgIDIyNCAqCitXaGl0ZQkJCSAgIDE1CQkgIDI0MCAqCisKKyogRGVwZW5kaW5nIG9uIHRoZSBkaXNwbGF5IG1vZGUsIHRoZSBjb2xvciBjb2RlcyBhYm92ZSAxMjggbWF5IG5vdCBiZQorICBhdmFpbGFibGUsIGFuZCBjb2RlIDEyOCB3aWxsIG1ha2UgdGhlIHRleHQgYmxpbmsuCisKK1doZW4geW91IHVzZSAwLCB0aGUgY29sb3IgaXMgcmVzZXQgdG8gdGhlIG9uZSB1c2VkIHdoZW4geW91IHN0YXJ0ZWQgVmltCisodXN1YWxseSA3LCBsaWdodGdyYXkgb24gYmxhY2ssIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMuICBJZiB5b3UgaGF2ZQorb3ZlcnJpZGRlbiB0aGUgZGVmYXVsdCBjb2xvcnMgaW4gYSBjb21tYW5kIHByb21wdCwgeW91IG1heSBuZWVkIHRvIGFkanVzdAorc29tZSBvZiB0aGUgaGlnaGxpZ2h0IGNvbG9ycyBpbiB5b3VyIHZpbXJjLS0tc2VlIGJlbG93KS4KK1RoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIHRfbWUuCisKK1RoZSBkZWZhdWx0cyBmb3IgdGhlIHZhcmlvdXMgaGlnaGxpZ2h0IG1vZGVzIGFyZToKKwl0X21yCTExMgkgcmV2ZXJzZSBtb2RlOiBCbGFjayB0ZXh0ICgwKSBvbiBMaWdodEdyYXkgKDExMikKKwl0X21kCSAxNQkgYm9sZCBtb2RlOiBXaGl0ZSB0ZXh0ICgxNSkgb24gQmxhY2sgKDApCisJdF9tZQkgIDAJIG5vcm1hbCBtb2RlIChyZXZlcnQgdG8gZGVmYXVsdCkKKworCXRfc28JIDMxCSBzdGFuZG91dCBtb2RlOiBXaGl0ZSAoMTUpIHRleHQgb24gRGFya0JsdWUgKDE2KQorCXRfc2UJICAwCSBzdGFuZG91dCBtb2RlIGVuZCAocmV2ZXJ0IHRvIGRlZmF1bHQpCisKKwl0X2N6aAkyMjUJIGl0YWxpYyBtb2RlOiBEYXJrQmx1ZSB0ZXh0ICgxKSBvbiBZZWxsb3cgKDIyNCkKKwl0X2N6cgkgIDAJIGl0YWxpYyBtb2RlIGVuZCAocmV2ZXJ0IHRvIGRlZmF1bHQpCisKKwl0X3VzCSA2NwkgdW5kZXJsaW5lIG1vZGU6IERhcmtDeWFuIHRleHQgKDMpIG9uIERhcmtSZWQgKDY0KQorCXRfdWUJICAwCSB1bmRlcmxpbmUgbW9kZSBlbmQgKHJldmVydCB0byBkZWZhdWx0KQorCitUaGVzZSBjb2xvcnMgd2VyZSBjaG9zZW4gYmVjYXVzZSB0aGV5IGFsc28gbG9vayBnb29kIHdoZW4gdXNpbmcgYW4gaW52ZXJ0ZWQKK2Rpc3BsYXksIGJ1dCB5b3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgbGlraW5nLgorCitFeGFtcGxlOiA+CisgIDpzZXQgdF9tcj1eVl5bXHw5N20JIiBzdGFydCBvZiBpbnZlcnQgbW9kZTogRGFya0JsdWUgKDEpIG9uIEJyb3duICg5NikKKyAgOnNldCB0X21kPV5WXltcfDY3bQkiIHN0YXJ0IG9mIGJvbGQgbW9kZTogRGFya0N5YW4gKDMpIG9uIERhcmtSZWQgKDY0KQorICA6c2V0IHRfbWU9XlZeW1x8MTEybQkiIGJhY2sgdG8gbm9ybWFsIG1vZGU6IEJsYWNrICgwKSBvbiBMaWdodEdyYXkgKDExMikKKworICA6c2V0IHRfc289XlZeW1x8MzdtCSIgc3RhcnQgb2Ygc3RhbmRvdXQgbW9kZTogRGFya01hZ2VudGEgKDUpIG9uIERhcmtHcmVlbgorCQkJCQkJCQkJKDMyKQorICA6c2V0IHRfc2U9XlZeW1x8MTEybQkiIGJhY2sgdG8gbm9ybWFsIG1vZGU6IEJsYWNrICgwKSBvbiBMaWdodEdyYXkgKDExMikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBGaWxlIGZvcm1hdHMJCQkJCQkqZG9zLWZpbGUtZm9ybWF0cyoKKworSWYgdGhlICdmaWxlZm9ybWF0JyBvcHRpb24gaXMgc2V0IHRvICJkb3MiICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIFZpbSBhY2NlcHRzCithIHNpbmdsZSA8Tkw+IG9yIGEgPENSPjxOTD4gcGFpciBmb3IgZW5kLW9mLWxpbmUgKDxFT0w+KS4gIFdoZW4gd3JpdGluZyBhCitmaWxlLCBWaW0gdXNlcyA8Q1I+PE5MPi4gIFRodXMsIGlmIHlvdSBlZGl0IGEgZmlsZSBhbmQgd3JpdGUgaXQsIFZpbSByZXBsYWNlcworPE5MPiB3aXRoIDxDUj48Tkw+LgorCitJZiB0aGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbiBpcyBzZXQgdG8gInVuaXgiLCBWaW0gdXNlcyBhIHNpbmdsZSA8Tkw+IGZvciA8RU9MPgorYW5kIHNob3dzIDxDUj4gYXMgXk0uCisKK1lvdSBjYW4gdXNlIFZpbSB0byByZXBsYWNlIDxOTD4gd2l0aCA8Q1I+PE5MPiBieSByZWFkaW5nIGluIGFueSBtb2RlIGFuZAord3JpdGluZyBpbiBEb3MgbW9kZSAoIjpzZSBmZj1kb3MiKS4KK1lvdSBjYW4gdXNlIFZpbSB0byByZXBsYWNlIDxDUj48Tkw+IHdpdGggPE5MPiBieSByZWFkaW5nIGluIERvcyBtb2RlIGFuZAord3JpdGluZyBpbiBVbml4IG1vZGUgKCI6c2UgZmY9dW5peCIpLgorCitWaW0gc2V0cyAnZmlsZWZvcm1hdCcgYXV0b21hdGljYWxseSB3aGVuICdmaWxlZm9ybWF0cycgaXMgbm90IGVtcHR5ICh3aGljaCBpcwordGhlIGRlZmF1bHQpLCBzbyB5b3UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8gd29ycnkgYWJvdXQgd2hhdCB5b3UgYXJlIGRvaW5nLgorCQkJCQl8J2ZpbGVmb3JtYXQnfCB8J2ZpbGVmb3JtYXRzJ3wKKworSWYgeW91IHdhbnQgdG8gZWRpdCBhIHNjcmlwdCBmaWxlIG9yIGEgYmluYXJ5IGZpbGUsIHlvdSBzaG91bGQgc2V0IHRoZQorJ2JpbmFyeScgb3B0aW9uIGJlZm9yZSBsb2FkaW5nIHRoZSBmaWxlLiAgU2NyaXB0IGZpbGVzIGFuZCBiaW5hcnkgZmlsZXMgbWF5Citjb250YWluIHNpbmdsZSA8Tkw+IGNoYXJhY3RlcnMgd2hpY2ggVmltIHdvdWxkIHJlcGxhY2Ugd2l0aCA8Q1I+PE5MPi4gIFlvdSBjYW4KK3NldCAnYmluYXJ5JyBhdXRvbWF0aWNhbGx5IGJ5IHN0YXJ0aW5nIFZpbSB3aXRoIHRoZSAiLWIiIChiaW5hcnkpIG9wdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiA6Y2QgY29tbWFuZAkJCQkJCSpkb3MtOmNkKgorCitUaGUgIjpjZCIgY29tbWFuZCByZWNvZ25pemVzIHRoZSBkcml2ZSBzcGVjaWZpZXIgYW5kIGNoYW5nZXMgdGhlIGN1cnJlbnQKK2RyaXZlLiAgVXNlICI6Y2QgYzoiIHRvIG1ha2UgZHJpdmUgQyB0aGUgYWN0aXZlIGRyaXZlLiAgVXNlICI6Y2QgZDpcZm9vIiB0byBnbwordG8gdGhlIGRpcmVjdG9yeSAiZm9vIiBpbiB0aGUgcm9vdCBvZiBkcml2ZSBELiAgVmltIGFsc28gcmVjb2duaXplcyBVTkMgbmFtZXMKK2lmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgdGhlbTsgZS5nLiwgIjpjZCBcXHNlcnZlclxzaGFyZVxkaXIiLiAgfDpjZHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBJbnRlcnJ1cHRpbmcJCQkJCQkqZG9zLUNUUkwtQnJlYWsqCisKK1VzZSBDVFJMLUJyZWFrIGluc3RlYWQgb2YgQ1RSTC1DIHRvIGludGVycnVwdCBzZWFyY2hlcy4gIFZpbSBkb2VzIG5vdCBkZXRlY3QKK3RoZSBDVFJMLUMgdW50aWwgaXQgdHJpZXMgdG8gcmVhZCBhIGtleS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBUZW1wIGZpbGVzCQkJCQkJKmRvcy10ZW1wLWZpbGVzKgorCitPbmx5IGZvciB0aGUgMTYgYml0IGFuZCAzMiBiaXQgRE9TIHZlcnNpb246CitWaW0gcHV0cyB0ZW1wb3JhcnkgZmlsZXMgKGZvciBmaWx0ZXJpbmcpIGluIHRoZSBmaXJzdCBvZiB0aGVzZSBkaXJlY3RvcmllcwordGhhdCBleGlzdHMgYW5kIGluIHdoaWNoIFZpbSBjYW4gY3JlYXRlIGEgZmlsZToKKwkkVE1QCisJJFRFTVAKKwlDOlxUTVAKKwlDOlxURU1QCisJY3VycmVudCBkaXJlY3RvcnkKKworRm9yIHRoZSBXaW4zMiB2ZXJzaW9uIChib3RoIGNvbnNvbGUgYW5kIEdVSSk6CitWaW0gdXNlcyBzdGFuZGFyZCBXaW5kb3dzIGZ1bmN0aW9ucyB0byBvYnRhaW4gYSB0ZW1wb3JhcnkgZmlsZSBuYW1lIChmb3IKK2ZpbHRlcmluZykuICBUaGUgZmlyc3Qgb2YgdGhlc2UgZGlyZWN0b3JpZXMgdGhhdCBleGlzdHMgYW5kIGluIHdoaWNoIFZpbSBjYW4KK2NyZWF0ZSBhIGZpbGUgaXMgdXNlZDoKKwkkVE1QCisJJFRFTVAKKwljdXJyZW50IGRpcmVjdG9yeQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIFNoZWxsIG9wdGlvbiBkZWZhdWx0CQkJCQkqZG9zLXNoZWxsKgorCitUaGUgZGVmYXVsdCBmb3IgdGhlICdzaCcgKCdzaGVsbCcpIG9wdGlvbiBpcyAiY29tbWFuZC5jb20iIG9uIFdpbmRvd3MgOTUgYW5kCisiY21kLmV4ZSIgb24gV2luZG93cyBOVC4gIElmIFNIRUxMIGlzIGRlZmluZWQsIFZpbSB1c2VzIFNIRUxMIGluc3RlYWQsIGFuZCBpZgorU0hFTEwgaXMgbm90IGRlZmluZWQgYnV0IENPTVNQRUMgaXMsIFZpbSB1c2VzIENPTVNQRUMuICBWaW0gc3RhcnRzIGV4dGVybmFsCitjb21tYW5kcyB3aXRoICI8c2hlbGw+IC9jIDxjb21tYW5kX25hbWU+Ii4gIFR5cGluZyBDVFJMLVogc3RhcnRzIGEgbmV3IGNvbW1hbmQKK3N1YnNoZWxsLiAgUmV0dXJuIHRvIFZpbSB3aXRoICJleGl0Ii4JfCdzaGVsbCd8IHxDVFJMLVp8CisKK0lmIHlvdSBhcmUgcnVubmluZyBhIHRoaXJkLXBhcnR5IHNoZWxsLCB5b3UgbWF5IG5lZWQgdG8gc2V0IHRoZQorfCdzaGVsbGNtZGZsYWcnfCAoJ3NoY2YnKSBhbmQgfCdzaGVsbHF1b3RlJ3wgKCdzaHEnKSBvciB8J3NoZWxseHF1b3RlJ3wKKygnc3hxJykgb3B0aW9ucy4gIFVuZm9ydHVuYXRlbHksIHRoaXMgYWxzbyBkZXBlbmRzIG9uIHRoZSB2ZXJzaW9uIG9mIFZpbSB1c2VkLgorRm9yIGV4YW1wbGUsIHdpdGggdGhlIE1LUyBLb3JuIHNoZWxsIG9yIHdpdGggYmFzaCwgdGhlIHZhbHVlcyBvZiB0aGUgb3B0aW9ucworc2hvdWxkIGJlOgorCisJCURPUyAxNiBiaXQJICAgIERPUyAzMiBiaXQJCVdpbjMyICB+Cisnc2hlbGxjbWRmbGFnJwkgICAtYwkJCS1jCQkgLWMKKydzaGVsbHF1b3RlJwkgICAiCisnc2hlbGx4cXVvdGUnCQkJCQkJICIKKworRm9yIERvcyAxNiBiaXQgdGhpcyBzdGFydHMgdGhlIHNoZWxsIGFzOgorCTxzaGVsbD4gLWMgImNvbW1hbmQgbmFtZSIgPmZpbGUKK0ZvciBXaW4zMiBhczoKKwk8c2hlbGw+IC1jICJjb21tYW5kIG5hbWUgPmZpbGUiCitGb3IgRE9TIDMyIGJpdCwgREpHUFAgZG9lcyB0aGlzIGludGVybmFsbHkgc29tZWhvdy4KKworV2hlbiBzdGFydGluZyB1cCwgVmltIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mICJzaCIgYW55d2hlcmUgaW4gdGhlICdzaGVsbCcKK29wdGlvbi4gIElmIGl0IGlzIHByZXNlbnQsIFZpbSBzZXRzIHRoZSAnc2hlbGxjbWRmbGFnJyBhbmQgJ3NoZWxscXVvdGUnIG9yCisnc2hlbGx4cXVvdGUnIG9wdGlvbnMgd2lsbCBiZSBzZXQgYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3NfbWFjLnR4dCBiL3J1bnRpbWUvZG9jL29zX21hYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxMDJiZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX21hYy50eHQKQEAgLTAsMCArMSw5OCBAQAorKm9zX21hYy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyNworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhciBldCBhbC4KKworCisJCQkJCSptYWMqICpNYWMqICptYWNpbnRvc2gqICpNYWNpbnRvc2gqCisKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHBhcnRpY3VsYXJpdGllcyBvZiB0aGUgTWFjaW50b3NoIHZlcnNpb24gb2YgVmltLgorCitOT1RFOiBUaGlzIGZpbGUgaXMgYSBiaXQgb3V0ZGF0ZWQuICBZb3UgbWlnaHQgZmluZCBtb3JlIHVzZWZ1bCBpbmZvIGhlcmU6CisJaHR0cDovL21hY3ZpbS5zd2Rldi5vcmcvCisKKzEuIEZpbGVuYW1lIENvbnZlbnRpb24JCXxtYWMtZmlsZW5hbWV8CisyLiAudmltcmMgYW4gLnZpbSBmaWxlcwkJfG1hYy12aW1maWxlfAorMy4gRkFRCQkJCXxtYWMtZmFxfAorNC4gS25vd24gTGFjawkJCXxtYWMtbGFja3wKKzUuIE1hYyBCdWcgUmVwb3J0CQl8bWFjLWJ1Z3wKKzYuIENvbXBpbGluZyBWaW0JCXxtYWMtY29tcGlsZXwKKworVGhlcmUgd2FzIGEgTWFjIHBvcnQgZm9yIHZlcnNpb24gMy4wIG9mIFZpbS4gIEhlcmUgYXJlIHRoZSBmaXJzdCBmZXcgbGluZXMKK2Zyb20gdGhlIG9sZCBmaWxlOgorCitWSU0gUmVsZWFzZSBOb3RlcworSW5pdGlhbCBNYWNpbnRvc2ggcmVsZWFzZSwgVklNIHZlcnNpb24gMy4wCisxOSBPY3RvYmVyIDE5OTQKKworRXJpYyBGaXNjaGVyCis8ZW5mMUBtaWR3YXkudWNoaWNhZ28uZWR1PiwgPGVyaWNAamNwLnVjaGljYWdvLmVkdT4sIDxldGFvaW5AdWNoaWNhZ28uZWR1PgorNTc1OSBOLiBHdWlsZm9yZCBBdmUKK0luZGlhbmFwb2xpcyBJTiA0NjIyMCBVU0EKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBGaWxlbmFtZSBDb252ZW50aW9uCQkJCQkqbWFjLWZpbGVuYW1lKgorCitZb3UgY2FuIHVzZSBlaXRoZXIgdGhlIHVuaXggb3IgbWFjIHBhdGggc2VwYXJhdG9yIG9yIGEgbWl4IG9mIGJvdGguIEluIG9yZGVyCit0byBkZXRlcm1pbmUgaWYgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBmb2xkZXIgb3IKK2Fic29sdXRlIChpLmUuIHJlbGF0aXZlIHRvIHRoZSAiRGVza3RvcCIpLCB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSBpcyB1c2VkOgorCisJSWYgdGhlIHBhdGggc3RhcnQgYnkgYSAiLyIsIHRoZSBwYXRoIGlzIGFic29sdXRlCisJSWYgdGhlIHBhdGggc3RhcnQgYnkgYSAiOiIsIHRoZSBwYXRoIGlzIHJlbGF0aXZlCisJSWYgdGhlIHBhdGggZG9lc24ndCBzdGFydCBieSBuZWl0aGVyIGEgIi8iIG5vciAiOiIsCisJICBhbmQgYSAiOiIgaXMgZm91bmQgYmVmb3JlIGEgIi8iIHRoZW4gdGhlIHBhdGggaXMgYWJzb2x1dGUKKz4KKwkJOmUgL0hEL3RleHQKKwkJOmUgSEQ6dGV4dAorPAlFZGl0IHRoZSBmaWxlICJ0ZXh0IiBvZiB0aGUgZGlzayAiSEQiID4KKwkJOmUgOnNyYzptYWluLmMKKwkJOmUgc3JjL21haW4uYworPAlFZGl0IHRoZSBmaWxlICJtYWluLmMiIGluIHRoZSBmb2xkZXIgInNyYyIgaW4gdGhlIGN1cnJlbnQgZm9sZGVyID4KKwkJOmUgb3NfbWFjLmMKKzwJRWRpdCB0aGUgZmlsZSAib3NfbWFjLmMiIGluIHRoZSBjdXJyZW50IGZvbGRlci4KKworWW91IGNhbiB1c2UgdGhlIHwkVklNfCBhbmQgfCRWSU1SVU5USU1FfCAgdmFyaWFibGUuID4KKworCQk6c28gJFZJTVJVTlRJTUU6c3ludGF4OnN5bnRheC52aW0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiAudmltcmMgYW5kIC52aW0gZmlsZXMJCQkJKm1hYy12aW1maWxlKgorCitPbiB0aGUgTWFjIGZpbGVzIHN0YXJ0aW5nIHdpdGggYSBkb3QgIi4iIGFyZSBkaXNjb3VyYWdlZCwgdGh1cyB0aGUgcmMgZmlsZXMKK2FyZSBuYW1lZCAidmltcmMiIG9yICJfdmltcmMiIGFuZCAiZ3ZpbXJjIiBvciAiX2d2aW1yYyIuIFRoZXNlIGZpbGVzIGNhbiBiZSBpbgorYW55IGZvcm1hdCAobWFjLCBkb3Mgb3IgdW5peCkuICBWaW0gY2FuIGhhbmRsZSBhbnkgZmlsZSBmb3JtYXQgd2hlbiB0aGUKK3wnbm9jb21wYXRpYmxlJ3wgb3B0aW9uIGlzIHNldCwgb3RoZXJ3aXNlIGl0IHdpbGwgb25seSBoYW5kbGUgbWFjIGZvcm1hdAorZmlsZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gTWFjIEZBUQkJCQkJCSptYWMtZmFxKgorCitROiBJIGNhbid0IGVudGVyIG5vbi1BU0NJSSBjaGFyYWN0ZXIgaW4gQXBwbGUgVGVybWluYWwuCitBOiBVbmRlciBXaW5kb3cgU2V0dGluZ3MsIEVtdWxhdGlvbiwgbWFrZSBzdXJlIHRoYXQgIkVzY2FwZSBub24tQVNDSUkKKyAgIGNoYXJhY3RlcnMiIGlzIG5vdCBjaGVja2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIE1hYyBMYWNrCQkJCQkJKm1hYy1sYWNrKgorCistVGhlIGZpbGVuYW1lcyBjb250YWluaW5nIGJvdGggIjoiIGFuZCAiLyIgYXJlIHNvbWV0aW1lcyBtaXNpbnRlcnByZXRlZC4KKyAgKGp1c3QgcmUtZXhlY3V0ZSB0aGUgY29tbWFuZCkKKy1TY3JvbGxiYXIgYXJlIG5vdCBzY3JvbGxpbmcgbGl2ZSwgYW5kICB3aGVuIG9ubHkgdGhlIGFycm93IG9yIHNjcm9sbCBhcmVhLAorICAgYSBsaW1pdCBvZiAzMiBsaW5lIG9yIHBhZ2UgaXMgc2Nyb2xsZWQuCistU3ludGF4IGhpZ2hsaWdodGluZyB3b3JrcyBvbiA2OGsgTWFjcyBidXQgaXMgX3JlYWxseV8gc2xvdy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBNYWMgQnVnIFJlcG9ydAkJCQkJKm1hYy1idWcqCisKK1doZW4gcmVwb3J0aW5nIGFueSBNYWMgc3BlY2lmaWMgYnVnIG9yIGZlYXR1cmUgY2hhbmdlLCBwbGVhc2UgdXNlIHRoZSB2aW0tbWFjCittYWlsbGlzdCB8dmltLW1hY3wuICBIb3dldmVyLCB5b3UgbmVlZCB0byBiZSBzdWJzY3JpYmVkLiAgQW4gYWx0ZXJuYXRpdmUgaXMgdG8KK3NlbmQgYSBtZXNzYWdlIHRvIHRoZSBjdXJyZW50IE1hY1ZpbSBtYWludGFpbmVyczoKKworCW1hY0B2aW0ub3JnCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gQ29tcGlsaW5nIFZpbQkJCQkJKm1hYy1jb21waWxlKgorCitTZWUgdGhlIGZpbGUgInNyYy9JTlNUQUxMbWFjLnR4dCIgdGhhdCBjb21lcyB3aXRoIHRoZSBzb3VyY2UgZmlsZXMuCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29zX21pbnQudHh0IGIvcnVudGltZS9kb2Mvb3NfbWludC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5Nzc2ZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX21pbnQudHh0CkBAIC0wLDAgKzEsMzkgQEAKKypvc19taW50LnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMSBTZXAgMDMKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgSmVucyBNLiBGZWxkZXJob2ZmCisKKworCQkJCQkJCSpNaU5UKiAqQXRhcmkqCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcnRpY3VsYXJpdGllcyBmb3IgdGhlIEF0YXJpIE1pTlQgdmVyc2lvbiBvZiBWaW0uCisKK0ZvciBjb21waWxpbmcgVmltIG9uIHRoZSBBdGFyaSBydW5uaW5nIE1pTlQgc2VlICJJTlNUQUxMIiBhbmQgIk1ha2VmaWxlIgoraW4gdGhlIHNyYyBkaXJlY3RvcnkuCisKK1ZpbSBmb3IgTWlOVCBiZWhhdmVzIGFsbW9zdCBleGFjdGx5IGxpa2UgdGhlIFVuaXggdmVyc2lvbi4KK1RoZSBVbml4IGJlaGF2aW9yIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbHNvIHJlZmVycyB0byB0aGUKK01pTlQgdmVyc2lvbiBvZiBWaW0gdW5sZXNzIGV4cGxpY2l0bHkgc3RhdGVkIG90aGVyd2lzZS4KKworRm9yIHdpbGRjYXJkIGV4cGFuc2lvbiBvZiA8fj4gKGhvbWUgZGlyZWN0b3J5KSB5b3UgbmVlZCBhIHNoZWxsIHRoYXQKK2V4cGFuZHMgdGhlIHRpbGRlLiBUaGUgdmFuaWxsYSBCb3VybmUgc2hlbGwgZG9lc24ndCByZWNvZ25pemUgaXQuCitXaXRoIGNzaCBhbmQga3NoIGl0IHNob3VsZCB3b3JrIE9LLgorCitUaGUgTWlOVCB2ZXJzaW9uIG9mIHZpbSBuZWVkcyB0aGUgdGVybWNhcCBmaWxlIC9ldGMvdGVybWNhcCB3aXRoIHRoZQordGVybWluYWwgY2FwYWJpbGl0aWVzIG9mIHlvdXIgdGVybWluYWwuIEJ1aWx0aW4gdGVybWNhcHMgYXJlCitzdXBwb3J0ZWQgZm9yIHRoZSB2dDUyIHRlcm1pbmFsLiBUZXJtY2FwIGVudHJpZXMgZm9yIHRoZSBUT1NXSU4gd2luZG93CittYW5hZ2VyIGFuZCB0aGUgdmlydHVhbCBjb25zb2xlIHRlcm1pbmFscyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlCit0ZXJtY2FwIGZpbGUgdGhhdCBjb21lcyB3aXRoIHRoZSBWaW0gZGlzdHJpYnV0aW9uLgorCitJZiB5b3Ugc2hvdWxkIGVuY291bnRlciBwcm9ibGVtcyB3aXRoIHN3YXBwZWQgPEJTPiBhbmQgPERlbD4ga2V5cywgc2VlCit8OmZpeGRlbHwuCisKK0JlY2F1c2UgdGVybWluYWwgdXBkYXRpbmcgdW5kZXIgTWlOVCBpcyBvZnRlbiBzbG93IChlLmcuIHNlcmlhbCBsaW5lCit0ZXJtaW5hbCksIHRoZSAnc2hvd2NtZCcgYW5kICdydWxlcicgb3B0aW9ucyBhcmUgZGVmYXVsdCBvZmYuCitJZiB5b3UgaGF2ZSBhIGZhc3QgdGVybWluYWwsIHRyeSBzZXR0aW5nIHRoZW0gb24uICBZb3UgbWlnaHQKK2Fsc28gd2FudCB0byBzZXQgJ3R0eWZhc3QnLgorCitTZW5kIGJ1ZyByZXBvcnRzIHRvCisKKwlKZW5zIE0uIEZlbGRlcmhvZmYsIGUtbWFpbDogPGptZkBpbmZrby51bmkta29ibGVuei5kZT4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29zX21zZG9zLnR4dCBiL3J1bnRpbWUvZG9jL29zX21zZG9zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTI5MGU5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3NfbXNkb3MudHh0CkBAIC0wLDAgKzEsMjcwIEBACisqb3NfbXNkb3MudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDEgU2VwIDAzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCQkJCQkqbXNkb3MqICptcy1kb3MqICpNU0RPUyogKk1TLURPUyoKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgcGFydGljdWxhcml0aWVzIGZvciB0aGUgTVMtRE9TIHZlcnNpb24gb2YgVmltLgorCisxLiBUd28gdmVyc2lvbnMgZm9yIE1TLURPUwl8bXNkb3MtdmVyc2lvbnN8CisyLiBLbm93biBwcm9ibGVtcwkJfG1zZG9zLXByb2JsZW1zfAorMy4gTG9uZyBmaWxlIG5hbWVzCQl8bXNkb3MtbG9uZ2ZuYW1lfAorNC4gVGVybWNhcCBjb2RlcwkJfG1zZG9zLXRlcm1jYXB8Cis1LiBTaGlmdGVkIGFycm93IGtleXMJCXxtc2Rvcy1hcnJvd3N8Cis2LiBGaWxlbmFtZSBleHRlbnNpb25zCQl8bXNkb3MtZm5hbWUtZXh0ZW5zaW9uc3wKKzcuIE1lbW9yeSB1c2FnZSBhbmQgbGltaXRhdGlvbnMJfG1zZG9zLWxpbWl0YXRpb25zfAorOC4gU3ltYm9saWNhbGx5IGxpbmtlZCBmaWxlcwl8bXNkb3MtbGlua2VkLWZpbGVzfAorOS4gQ29weS9wYXN0ZSBpbiBhIGRvcyBib3gJfG1zZG9zLWNvcHktcGFzdGV8CisKK0FkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGNvbW1vbiBXaW4zMiBhbmQgRE9TIGl0ZW1zOgorRmlsZSBsb2NhdGlvbnMJCQl8ZG9zLWxvY2F0aW9uc3wKK1VzaW5nIGJhY2tzbGFzaGVzCQl8ZG9zLWJhY2tzbGFzaHwKK1N0YW5kYXJkIG1hcHBpbmdzCQl8ZG9zLXN0YW5kYXJkLW1hcHBpbmdzfAorU2NyZWVuIG91dHB1dCBhbmQgY29sb3JzCXxkb3MtY29sb3JzfAorRmlsZSBmb3JtYXRzCQkJfGRvcy1maWxlLWZvcm1hdHN8Cis6Y2QgY29tbWFuZAkJCXxkb3MtOmNkfAorSW50ZXJydXB0aW5nCQkJfGRvcy1DVFJMLUJyZWFrfAorVGVtcCBmaWxlcwkJCXxkb3MtdGVtcC1maWxlc3wKK1NoZWxsIG9wdGlvbiBkZWZhdWx0CQl8ZG9zLXNoZWxsfAorCitGb3IgY29tcGlsaW5nIFZpbSBzZWUgc3JjL0lOU1RBTEwucGMuCQkJKm1zZG9zLWNvbXBpbGluZyoKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBUd28gdmVyc2lvbnMgZm9yIE1TLURPUwkJCQkqbXNkb3MtdmVyc2lvbnMqCisKK1RoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgVmltIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBNUy1ET1MgbWFjaGluZXM6CisKKwkJCQkJCQkqZG9zMTYqCitEb3MxNiB2ZXJzaW9uCUNhbiBiZSB1c2VkIG9uIGFueSBNUy1ET1Mgc3lzdGVtLCBvbmx5IHVzZXMgdXAgdG8gNjQwIEtieXRlIG9mCisJCW1lbW9yeS4gIEFsc28gcnVucyBvbiBPUy8yLCBXaW5kb3dzIDk1LCBhbmQgTlQuICBFeGNsdWRlcyBzb21lCisJCVZpbS1zcGVjaWZpYyBmZWF0dXJlcyAoYXV0b2NvbW1hbmRzLCBzeW50YXggaGlnaGxpZ2h0aW5nLAorCQlldGMuKS4gIFJlY29tbWVuZGVkIGZvciB1c2Ugb24gcHJlLTM4NiBtYWNoaW5lcy4KKwkJCQkJCQkqZG9zMzIqCitEb3MzMiB2ZXJzaW9uCVJlcXVpcmVzIDM4NiBwcm9jZXNzb3IgYW5kIGEgfERQTUl8IGRyaXZlciwgdXNlcyBhbGwKKwkJYXZhaWxhYmxlIG1lbW9yeS4gIFN1cHBvcnRzIGxvbmcgZmlsZSBuYW1lcyBhbmQgdGhlIFdpbmRvd3MKKwkJY2xpcGJvYXJkLCBidXQgTk9UIG9uIFdpbmRvd3MgTlQuICBSZWNvbW1lbmRlZCBmb3IgTVMtRE9TLAorCQlXaW5kb3dzIDMuMSBhbmQgV2luZG93cyA5NS4KKworVGhlcmUgYXJlIGFsc28gdHdvIHZlcnNpb25zIHRoYXQgcnVuIHVuZGVyIFdpbmRvd3M6CitXaW4zMiB2ZXJzaW9uICAgUmVxdWlyZXMgV2luZG93cyA5NSBvciBXaW5kb3dzIE5ULCB1c2VzIGFsbCBhdmFpbGFibGUKKwkJbWVtb3J5LCBzdXBwb3J0cyBsb25nIGZpbGUgbmFtZXMsIGV0Yy4gIEhhcyBzb21lIHByb2JsZW1zIG9uCisJCVdpbmRvd3MgOTUuICBSZWNvbW1lbmRlZCBmb3IgV2luZG93cyBOVC4gIFNlZSB8b3Nfd2luMzIudHh0fAorV2luMzIgR1VJCVJlcXVpcmVtZW50cyBsaWtlIHRoZSBXaW4zMiB2ZXJzaW9uLCBidXQgcnVucyBpbiBpdHMgb3duCisJCXdpbmRvdywgaW5zdGVhZCBvZiBhIGNvbnNvbGUuICBIYXMgc2Nyb2xsYmFycywgbWVudSwgZXRjLgorCQlSZWNvbW1lbmRlZCBmb3IgV2luZG93cyA5NSBhbmQgV2luZG93cyBOVC4gIFNlZSB8Z3VpLXczMnwuCisKK0l0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgRG9zMzIgb3IgV2luMzIgdmVyc2lvbi4gIEFsdGhvdWdoIHRoZSBEb3MxNgordmVyc2lvbiBpcyBhYmxlIHRvIGVkaXQgdmVyeSBiaWcgZmlsZXMsIGl0IHF1aWNrbHkgcnVucyBvdXQgb2YgbWVtb3J5IHdoZW4KK21ha2luZyBiaWcgY2hhbmdlcy4gIERpc2FibGluZyB1bmRvIGhlbHBzOiAiOnNldCB1bD0tMSIuICBUaGUgc2NyZWVuIHVwZGF0aW5nCitvZiB0aGUgRG9zMTYgdmVyc2lvbiBpcyB0aGUgZmFzdGVzdCBvZiB0aGUgdGhyZWUgb24gRE9TIG9yIFdpbmRvd3MgOTU7IG9uCitXaW5kb3dzIE5ULCB0aGUgV2luMzIgdmVyc2lvbiBpcyBqdXN0IGFzIGZhc3QuCisKKwkJCQkJCQkJKkRQTUkqCitGb3IgdGhlIERvczMyIHZlcnNpb24sIHlvdSBtYXkgbmVlZCBhIERQTUkgZHJpdmVyIHdoZW4gcnVubmluZyBpbiBNUy1ET1MuICBJZgoreW91IGFyZSBydW5uaW5nIFdpbmRvd3Mgb3IgaW5zdGFsbGVkIGEgY2xldmVyIG1lbW9yeSBtYW5hZ2VyLCBpdCB3aWxsIHByb2JhYmx5Cit3b3JrIGFscmVhZHkuICBJZiB5b3UgZ2V0IHRoZSBtZXNzYWdlICJObyBEUE1JIiwgeW91IG5lZWQgdG8gaW5zdGFsbCBhIERQTUkKK2RyaXZlci4gIFN1Y2ggYSBkcml2ZXIgaXMgaW5jbHVkZWQgd2l0aCB0aGUgZXhlY3V0YWJsZSBpbiBDU0RQTUk0Qi5aSVAuICBSdW4KKyJjd3NkcG1pIiBqdXN0IGJlZm9yZSBzdGFydGluZyBWaW0gZWFjaCB0aW1lLiAgT3IgeW91IG1pZ2h0IHdhbnQgdG8gaW5jbHVkZQorImN3c2RwbWkgLXAiIGluIHlvdXIgYXV0b2V4ZWMuYmF0IHRvIG1ha2UgaXQgcmVzaWRlbnQuICBUaGUgbGF0ZXN0IHZlcnNpb24gb2YKKyJDU0RQTUkqLlpJUCIgY2FuIGJlIG9idGFpbmVkIGZyb206ICJmdHAubmVvc29mdC5jb206cHViL3VzZXJzL3Mvc2FuZG1hbm4iLgorCisJCQkJCQkJKm1pbmltYWwtZmVhdHVyZXMqCitUaGUgMTYgYml0IERPUyB2ZXJzaW9uIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggbWluaW1hbCBmZWF0dXJlcy4gIENoZWNrIHRoZQorfCtmZWF0dXJlLWxpc3R8IHdoaWNoIG9uZXMgYXJlIGluY2x1ZGVkIChtYXJrZWQgd2l0aCBhICJUIikuCitZb3UgY2FuIGluY2x1ZGUgbW9yZSBmZWF0dXJlcyBieSBlZGl0aW5nIGZlYXR1cmUuaCBhbmQgcmVjb21waWxpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gS25vd24gcHJvYmxlbXMJCQkJCSptc2Rvcy1wcm9ibGVtcyoKKworV2hlbiB1c2luZyBzbWFydGRyaXZlIChNUy1ET1MgNi54KSB3aXRoIHdyaXRlLWJlaGluZCBjYWNoaW5nLCBpdCBpcyBwb3NzaWJsZQordGhhdCBWaW0gd2lsbCB0cnkgdG8gY3JlYXRlIGEgc3dhcCBmaWxlIG9uIGEgcmVhZC1vbmx5IGZpbGUgc3lzdGVtIChlLmcuCit3cml0ZSBwcm90ZWN0ZWQgZmxvcHB5KS4gIFlvdSB3aWxsIHRoZW4gYmUgZ2l2ZW4gdGhlIG1lc3NhZ2UgPgorCUEgc2VyaW91cyBkaXNrIGVycm9yIGhhcyBvY2N1cnJlZCAuLiwgUmV0cnkgKHIpPworVGhlcmUgaXMgbm90aGluZyB5b3UgY2FuIGRvIGJ1dCB1bnByb3RlY3QgdGhlIGZsb3BweSBvciBzd2l0Y2ggb2ZmIHRoZQorY29tcHV0ZXIuICBFdmVuIENUUkwtQUxULURFTCB3aWxsIG5vdCBnZXQgeW91IG91dCBvZiB0aGlzLiAgVGhpcyBpcyByZWFsbHkgYQorcHJvYmxlbSBvZiBzbWFydGRyaXZlLCBub3QgVmltLiAgU21hcnRkcml2ZSB3b3JrcyBmaW5lIG90aGVyd2lzZS4gIElmIHRoaXMKK2JvdGhlcnMgeW91LCBkb24ndCB1c2UgdGhlIHdyaXRlLWJlaGluZCBjYWNoaW5nLgorCitWaW0gY2FuJ3QgcmVhZCBzd2FwIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG9wZW5lZCBhbHJlYWR5LCB1bmxlc3MgdGhlICJzaGFyZSIKK2NvbW1hbmQgaGFzIGJlZW4gdXNlZC4gIElmIHlvdSBzZWUgc3RyYXkgd2FybmluZ3MgZm9yIGV4aXN0aW5nIHN3YXAgZmlsZXMsCitpbmNsdWRlIHRoZSAic2hhcmUiIGNvbW1hbmQgaW4geW91ciBjb25maWcuc3lzIG9yIGF1dG9leGVjLmJhdCAoc2VlIHlvdXIgTVNET1MKK2RvY3VtZW50YXRpb24pLgorCitUaGUgRG9zMTYgdmVyc2lvbiBjYW4gb25seSBoYXZlIGFib3V0IDEwIGZpbGVzIG9wZW4gKGluIGEgd2luZG93IG9yIGhpZGRlbikgYXQKK29uZSB0aW1lLiAgV2l0aCBtb3JlIGZpbGVzIHlvdSB3aWxsIGdldCBlcnJvciBtZXNzYWdlcyB3aGVuIHRyeWluZyB0byByZWFkIG9yCit3cml0ZSBhIGZpbGUsIGFuZCBmb3IgZmlsdGVyIGNvbW1hbmRzLiAgT3IgVmltIHJ1bnMgb3V0IG9mIG1lbW9yeSwgYW5kIHJhbmRvbQorcHJvYmxlbXMgbWF5IHJlc3VsdC4KKworVGhlIERvczMyIHZlcnNpb24gY2Fubm90IGhhdmUgYW4gdW5saW1pdGVkIG51bWJlciBvZiBmaWxlcyBvcGVuIGF0IGFueSBvbmUKK3RpbWUuICBUaGUgbGltaXQgZGVwZW5kcyBvbiB0aGUgc2V0dGluZyBvZiBGSUxFUyBpbiB5b3VyIENPTkZJRy5TWVMuIFRoaXMKK2RlZmF1bHRzIHRvIDE1OyBpZiB5b3UgbmVlZCB0byBlZGl0IGEgbG90IG9mIGZpbGVzLCB5b3Ugc2hvdWxkIGluY3JlYXNlIHRoaXMuCitJZiB5b3UgZG8gbm90IHNldCBGSUxFUyBoaWdoIGVub3VnaCwgeW91IGNhbiBnZXQgc3RyYW5nZSBlcnJvcnMsIGFuZCBzaGVsbAorY29tbWFuZHMgbWF5IGNhdXNlIGEgY3Jhc2ghCisKK1RoZSBEb3MzMiB2ZXJzaW9uIGNhbiB3b3JrIHdpdGggbG9uZyBmaWxlIG5hbWVzLiAgV2hlbiBkb2luZyBmaWxlIG5hbWUKK2NvbXBsZXRpb24sIG1hdGNoZXMgZm9yIHRoZSBzaG9ydCBmaWxlIG5hbWUgd2lsbCBhbHNvIGJlIGZvdW5kLiAgQnV0IHRoaXMgd2lsbAorcmVzdWx0IGluIHRoZSBjb3JyZXNwb25kaW5nIGxvbmcgZmlsZSBuYW1lLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHRoZSBsb25nCitmaWxlIG5hbWUgInRoaXNfaXNfYV90ZXN0IiB3aXRoIHRoZSBzaG9ydCBmaWxlIG5hbWUgInRoaXNfaX4xIiwgdGhlIGNvbW1hbmQKKyI6ZSAqMSIgd2lsbCBzdGFydCBlZGl0aW5nICJ0aGlzX2lzX2FfdGVzdCIuCisKK1doZW4gdXNpbmcgdGhlIERvczMyIHZlcnNpb24gYW5kIHlvdSBydW4gaW50byBwcm9ibGVtcyB3aXRoIERQTUkgc3VwcG9ydCwKK2NoZWNrIGlmIHRoZXJlIGlzIGEgcHJvZ3JhbSBpbiB5b3VyIGNvbmZpZy5zeXMgdGhhdCBlYXRzIHJlc291cmNlcy4gIE9uZQorcHJvZ3JhbSBrbm93biB0byBjYXVzZSB0aGlzIHByb2JsZW0gaXMgIm5ldHgiLCB3aGljaCBzYXlzICJOZXRXYXJlIHYuIDMuMjYKK1dvcmtzdGF0aW9uIHNoZWxsIi4gIFJlcGxhY2UgaXQgd2l0aCB2ZXJzaW9uIDMuMzIgdG8gZml4IHRoZSBwcm9ibGVtLgorCitUaGUgRG9zMzIgdmVyc2lvbiB3aWxsIHBhcnNlIGl0cyBhcmd1bWVudHMgdG8gaGFuZGxlIHF1b3RhdGlvbi4gIFRoaXMgaXMgZ29vZAordG8gZWRpdCBhIGZpbGUgd2l0aCBzcGFjZXMgaW4gaXRzIG5hbWUsIGZvciBleGFtcGxlOiA+CisJdmltICJwcm9ncmFtIGZpbGVzXGFjY2Vzc29yaWVzXHBwcC5zY3AiCitBIHNpZGUgZWZmZWN0IGlzIHRoYXQgc2luZ2xlIHF1b3RlcyBhcmUgcmVtb3ZlZC4gIEluc2VydCBhIGJhY2tzbGFzaCB0byBhdm9pZAordGhhdC4gIEZvciBleGFtcGxlLCB0byBlZGl0IHRoZSBmaWxlICJmaSdsZS50eHQiOiA+CisJdmltIGZpXCdsZS50eHQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBMb25nIGZpbGUgbmFtZXMJCQkJCSptc2Rvcy1sb25nZm5hbWUqCisKK0lmIHRoZSBEb3MzMiB2ZXJzaW9uIGlzIHJ1biBvbiBXaW5kb3dzIDk1LCBpdCBjYW4gdXNlIGxvbmcgZmlsZSBuYW1lcy4gIEl0Cit3aWxsIHdvcmsgYnkgZGVmYXVsdC4gIElmIHlvdSB3YW50IHRvIGRpc2FibGUgdGhpcywgdXNlIHRoaXMgc2V0dGluZzoKKwlzZXQgTEZOPU4KK1lvdSBjYW4gcHV0IHRoaXMgaW4geW91ciBhdXRvZXhlYy5iYXQgZmlsZS4KKworTm90ZTogSWYgeW91IGhhdmUgaW5zdGFsbGVkIERKR1BQIG9uIHlvdXIgbWFjaGluZSwgeW91IHByb2JhYmx5IGhhdmUgYQorImRqZ3BwLmVudiIgZmlsZSwgd2hpY2ggY29udGFpbnMgIkxGTj1uIi4gIFlvdSBuZWVkIHRvIHVzZSAiTEZOPVkiIHRvIHN3aXRjaAorb24gdXNpbmcgbG9uZyBmaWxlIG5hbWVzIHRoZW4uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVGVybWNhcCBjb2RlcwkJCQkJKm1zZG9zLXRlcm1jYXAqCisKK0lmIHlvdSB3YW50IHRvIHVzZSBhbm90aGVyIG91dHB1dCBtZXRob2QgKGUuZy4sIHdoZW4gdXNpbmcgYSB0ZXJtaW5hbCBvbiBhIENPTQorcG9ydCksIHNldCB0aGUgdGVybWluYWwgbmFtZSB0byAicGNhbnNpIi4gIFlvdSBjYW4gY2hhbmdlIHRoZSB0ZXJtY2FwIG9wdGlvbnMKK3doZW4gbmVlZGVkIChzZWUgfHRlcm1pbmFsLW9wdGlvbnN8KS4gIE5vdGUgdGhhdCB0aGUKK25vcm1hbCBJQk0gYW5zaS5zeXMgZG9lcyBub3Qgc3VwcG9ydCBhbGwgdGhlIGNvZGVzIG9mIHRoZSBidWlsdGluIHBjYW5zaQordGVybWluYWwuICBJZiB5b3UgdXNlIGFuc2kuc3lzLCB5b3Ugd2lsbCBuZWVkIHRvIGRlbGV0ZSB0aGUgdGVybWNhcCBlbnRyaWVzCit0X2FsIGFuZCB0X2RsIHdpdGggPgorICAgOnNldCB0X2FsPSB0X2RsPQorT3RoZXJ3aXNlLCB0aGUgc2NyZWVuIHdpbGwgbm90IGJlIHVwZGF0ZWQgY29ycmVjdGx5LiAgSXQgaXMgYmV0dGVyIHRvIHVzZQorbmFuc2kuc3lzLCBubmFuc2kuc3lzLCBvciB0aGUgbGlrZSBpbnN0ZWFkIG9mIGFuc2kuc3lzLgorCitJZiB5b3Ugd2FudCB0byB1c2UgVmltIG9uIGEgdGVybWluYWwgY29ubmVjdGVkIHRvIGEgQ09NOiBwb3J0LCByZXNldCB0aGUKKydiaW9za2V5JyBvcHRpb24uICBPdGhlcndpc2UgdGhlIGNvbW1hbmRzIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBQQyBrZXlib2FyZC4KK0NUUkwtQyBhbmQgQ1RSTC1QIG1heSBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCAnYmlvc2tleScgcmVzZXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gU2hpZnRlZCBhcnJvdyBrZXlzCQkJCQkqbXNkb3MtYXJyb3dzKgorCitVc2UgQ1RSTC1hcnJvdy1sZWZ0IGFuZCBDVFJMLWFycm93LXJpZ2h0IGluc3RlYWQgb2YgU0hJRlQtYXJyb3ctbGVmdCBhbmQKK1NISUZULWFycm93LXJpZ2h0LiAgVGhlIGFycm93LXVwIGFuZCBhcnJvdy1kb3duIGNhbm5vdCBiZSB1c2VkIHdpdGggU0hJRlQgb3IKK0NUUkwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gRmlsZW5hbWUgZXh0ZW5zaW9ucwkJCQkqbXNkb3MtZm5hbWUtZXh0ZW5zaW9ucyoKKworTVMtRE9TIGFsbG93cyBmb3Igb25seSBvbmUgZmlsZSBuYW1lIGV4dGVuc2lvbi4gIFRoZXJlZm9yZSwgd2hlbiBhcHBlbmRpbmcgYW4KK2V4dGVuc2lvbiwgdGhlICcuJyBpbiB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIGlzIHJlcGxhY2VkIHdpdGggYSAnXycsIHRoZSBuYW1lCitpcyB0cnVuY2F0ZWQgdG8gOCBjaGFyYWN0ZXJzLCBhbmQgdGhlIG5ldyBleHRlbnNpb24gKGUuZy4sICIuc3dwIikgaXMKK2FwcGVuZGVkLiAgVHdvIGV4YW1wbGVzOiAidGVzdC5jIiBiZWNvbWVzICJ0ZXN0X2MuYmFrIiwgInRoaXNpc2F0LmVzdCIKK2JlY29tZXMgInRoaXNpc2F0LmJhayIuICBUbyByZWR1Y2UgdGhlc2UgcHJvYmxlbXMsIHRoZSBkZWZhdWx0IGZvcgorJ2JhY2t1cGV4dCcgaXMgIn4iIGluc3RlYWQgb2YgIi5iYWsiLiAgVGhlIGJhY2t1cCBmaWxlIGZvciAidGhpc2lzYXQuZXN0IgordGhlbiBiZWNvbWVzICJ0aGlzaXNhdC5lc34iLiAgVGhlICdzaG9ydG5hbWUnIG9wdGlvbiBpcyBub3QgYXZhaWxhYmxlLAorYmVjYXVzZSBpdCB3b3VsZCBhbHdheXMgYmUgc2V0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIE1lbW9yeSB1c2FnZSBhbmQgbGltaXRhdGlvbnMJCQkqbXNkb3MtbGltaXRhdGlvbnMqCisKK0Egc3dhcCBmaWxlIGlzIHVzZWQgdG8gc3RvcmUgbW9zdCBvZiB0aGUgdGV4dC4gIFlvdSBzaG91bGQgYmUgYWJsZSB0byBlZGl0Cit2ZXJ5IGxhcmdlIGZpbGVzLiAgSG93ZXZlciwgbWVtb3J5IGlzIHVzZWQgZm9yIHVuZG8gYW5kIG90aGVyIHRoaW5ncy4gIElmIHlvdQorZGVsZXRlIGEgbG90IG9mIHRleHQsIHlvdSBjYW4gc3RpbGwgcnVuIG91dCBvZiBtZW1vcnkgaW4gdGhlIERvczE2IHZlcnNpb24uCisKK0lmIFZpbSBnaXZlcyBhbiAiT3V0IG9mIG1lbW9yeSIgd2FybmluZywgeW91IHNob3VsZCBzdG9wIGVkaXRpbmcuICBUaGUgcmVzdWx0CitvZiBmdXJ0aGVyIGVkaXRpbmcgYWN0aW9ucyBpcyB1bnByZWRpY3RhYmxlLiAgU2V0dGluZyAndW5kb2xldmVscycgdG8gMCBzYXZlcworc29tZSBtZW1vcnkuICBSdW5uaW5nIHRoZSBtYXplIG1hY3JvcyBvbiBhIGJpZyBtYXplIGlzIGd1YXJhbnRlZWQgdG8gcnVuIG91dAorb2YgbWVtb3J5LCBiZWNhdXNlIGVhY2ggY2hhbmdlIGlzIHJlbWVtYmVyZWQgZm9yIHVuZG8uICBJbiB0aGlzIGNhc2Ugc2V0CisndW5kb2xldmVscycgdG8gYSBuZWdhdGl2ZSBudW1iZXIuICBUaGlzIHdpbGwgc3dpdGNoIG9mZiB1bmRvIGNvbXBsZXRlbHkuCisKKwkJCQkJCSptc2Rvcy1jbGlwYm9hcmQtbGltaXRzKgorSW4gdGhlIERvczMyIHZlcnNpb24sIGV4dGVuZGVkIG1lbW9yeSBpcyB1c2VkIHRvIGF2b2lkIHRoZXNlIHByb2JsZW1zLgorSG93ZXZlciwgaWYgeW91IGFyZSB1c2luZyB0aGUgY2xpcGJvYXJkLCB5b3UgY2FuIHN0aWxsIHJ1biBpbnRvIG1lbW9yeQorbGltaXRhdGlvbnMgYmVjYXVzZSB0aGUgV2luZG93cyBjbGlwYm9hcmQgY2FuIG9ubHkgY29tbXVuaWNhdGUgd2l0aCBWaW0gdXNpbmcKK0RvcyBtZW1vcnkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGxhcmdlc3QgYW1vdW50IG9mIHRleHQgdGhhdCBjYW4gYmUgc2VudCB0bworb3IgcmVjZWl2ZWQgZnJvbSB0aGUgV2luZG93cyBjbGlwYm9hcmQgaXMgbGltaXRlZCBieSBob3cgbXVjaCBmcmVlIERvcyBtZW1vcnkKK2lzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbS4KKworWW91IGNhbiB1c3VhbGx5IG1heGltaXplIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIERvcyBtZW1vcnkgYnkgYWRkaW5nIHRoZQorZm9sbG93aW5nIGxpbmVzIHRvIERvcydzICJjb25maWcuc3lzIiBmaWxlOiA+CisKKwlET1M9SElHSCxVTUIKKwlERVZJQ0U9QzpcV0lORE9XU1xoaW1lbS5zeXMKKwlERVZJQ0U9QzpcV0lORE9XU1xlbW0zODYuZXhlIFJBTQorCitNb2RpZnlpbmcgY29uZmlnLnN5cyBpbiB0aGlzIHdheSB3aWxsIGFsc28gaGVscCB0byBtYWtlIG1vcmUgbWVtb3J5IGF2YWlsYWJsZQorZm9yIHRoZSBEb3MxNiB2ZXJzaW9uLCBpZiB5b3UgYXJlIHVzaW5nIHRoYXQuCisKK0luIHRoZSBEb3MxNiB2ZXJzaW9uIHRoZSBsaW5lIGxlbmd0aCBpcyBsaW1pdGVkIHRvIGFib3V0IDMyMDAwIGNoYXJhY3RlcnMuCitXaGVuIHJlYWRpbmcgYSBmaWxlIHRoZSBsaW5lcyBhcmUgYXV0b21hdGljYWxseSBzcGxpdC4gIEJ1dCBlZGl0aW5nIGEgbGluZQoraW4gc3VjaCBhIHdheSB0aGF0IGl0IGJlY29tZXMgdG9vIGxvbmcgbWF5IGdpdmUgdW5leHBlY3RlZCByZXN1bHRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIFN5bWJvbGljYWxseSBsaW5rZWQgZmlsZXMJCQkqbXNkb3MtbGlua2VkLWZpbGVzKgorCitXaGVuIHVzaW5nIFZpbSB0byBlZGl0IGEgc3ltYm9saWNhbGx5IGxpbmtlZCBmaWxlIG9uIGEgdW5peCBORlMgZmlsZSBzZXJ2ZXIsCit5b3UgbWF5IHJ1biBpbnRvIHByb2JsZW1zLgorV2hlbiB3cml0aW5nIHRoZSBmaWxlLCBWaW0gZG9lcyBub3QgIndyaXRlIHRocm91Z2giIHRoZSBzeW1saW5rLiAgSW5zdGVhZCwgaXQKK2RlbGV0ZXMgdGhlIHN5bWJvbGljIGxpbmsgYW5kIGNyZWF0ZXMgYSBuZXcgZmlsZSBpbiBpdHMgcGxhY2UuCisgICBPbiBVbml4LCBWaW0gaXMgcHJlcGFyZWQgZm9yIGxpbmtzIChzeW1ib2xpYyBvciBoYXJkKS4gIEEgYmFja3VwIGNvcHkgb2YKK3RoZSBvcmlnaW5hbCBmaWxlIGlzIG1hZGUgYW5kIHRoZW4gdGhlIG9yaWdpbmFsIGZpbGUgaXMgb3ZlcndyaXR0ZW4uICBUaGlzCithc3N1cmVzIHRoYXQgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGZpbGUgcmVtYWluIHRoZSBzYW1lLiAgT24gbm9uLVVuaXggc3lzdGVtcywKK3RoZSBvcmlnaW5hbCBmaWxlIGlzIHJlbmFtZWQgYW5kIGEgbmV3IGZpbGUgaXMgd3JpdHRlbi4gIE9ubHkgdGhlIHByb3RlY3Rpb24KK2JpdHMgYXJlIHNldCBsaWtlIHRoZSBvcmlnaW5hbCBmaWxlLiAgSG93ZXZlciwgdGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkgd2hlbgord29ya2luZyBvbiBhbiBORlMtbW91bnRlZCBmaWxlIHN5c3RlbSB3aGVyZSBsaW5rcyBhbmQgb3RoZXIgdGhpbmdzIGV4aXN0LiAgVGhlCitvbmx5IHdheSB0byBmaXggdGhpcyBpbiB0aGUgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBtYWtpbmcgYSBiYWNrdXAgZmlsZSwgYnkKKyI6c2V0IG5vYmFja3VwIG5vd3JpdGViYWNrdXAiCXwnd3JpdGViYWNrdXAnfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzkuIENvcHkvcGFzdGUgaW4gYSBkb3MgYm94CQkJKm1zZG9zLWNvcHktcGFzdGUqCisKKwkJCQkJKkU0NTAqICpFNDUxKiAqRTQ1MiogKkU0NTMqICpFNDU0KgorVGhlIDMyIGJpdCB2ZXJzaW9uIGNhbiBjb3B5L3Bhc3RlIGZyb20vdG8gdGhlIFdpbmRvd3MgY2xpcGJvYXJkIGRpcmVjdGx5LiAgVXNlCit0aGUgIiogcmVnaXN0ZXIuICBMYXJnZSBhbW91bnRzIG9mIHRleHQgY2FuIGJlIGNvcGllZCB0aGlzIHdheSwgYnV0IGl0IG11c3QgYmUKK3Bvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaXQsIHNlZSB8bXNkb3MtY2xpcGJvYXJkLWxpbWl0c3wuICBXaGVuIG1vdmluZwordGV4dCBmcm9tIG9uZSBWaW0gdG8gYW5vdGhlciwgdGhlIHR5cGUgb2YgdGhlIHNlbGVjdGlvbgorKGNoYXJhY3Rlcndpc2UvbGluZXdpc2UvYmxvY2t3aXNlKSBpcyBwYXNzZWQgb24uCisKK0luIG90aGVyIHZlcnNpb25zLCB0aGUgZm9sbG93aW5nIGNhbiBiZSB1c2VkLgorCisocG9zdGVkIHRvIGNvbXAuZWRpdG9ycyBieSBKb2huIFZlbG1hbiA8dmVsbWFuQGlnYXRlMS5oYWMuY29tPikKKworSG93IHRvIGNvcHkvcGFzdGUgdGV4dCBmcm9tL3RvIHZpbSBpbiBhIGRvcyBib3g6CisKKzEpIHRvIGdldCBWSU0gdG8gcnVuIGluIGEgd2luZG93LCBpbnN0ZWFkIG9mIGZ1bGwgc2NyZWVuLCBwcmVzcyBhbHQrZW50ZXIuCisgICBUaGlzIHRvZ2dsZXMgYmFjayBhbmQgZm9ydGggYmV0d2VlbiBmdWxsIHNjcmVlbiBhbmQgYSBkb3Mgd2luZG93LgorICAgTk9URTogSW4gV2luZG93cyA5NSB5b3UgbXVzdCBoYXZlIHRoZSBwcm9wZXJ0eSAiRmFzdCBQYXN0aW5nIiB1bmNoZWNrZWQhCisgICBJbiB0aGUgcHJvcGVydGllcyBkaWFsb2cgYm94IGZvciB0aGUgTVMtRE9TIHdpbmRvdywgZ28gdG8gIk1TLURPUworICAgUHJvbXB0L01pc2MvRmFzdCBwYXN0aW5nIiBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgaXMgTk9UIGNoZWNrZWQuCisgICBUbyBtYWtlIHRoaXMgcGVybWFuZW50LCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgZm9yCisgICAiXHdpbmRvd3Ncc3lzdGVtXGNvbmFnZW50LmV4ZSIgKGZyb20gUGhpbGlwIE5lbHNvbiwgdW52ZXJpZmllZCkuCisKKzIpIFRvIHBhc3RlIHNvbWV0aGluZyBfaW50b18gVmltLCBwdXQgVmltIGluIGluc2VydCBtb2RlLgorCiszKSBwdXQgdGhlIHRleHQgeW91IHdhbnQgdG8gcGFzdGUgb24gdGhlIHdpbmRvd3MgY2xpcGJvYXJkLgorCis0KSBDbGljayB0aGUgY29udHJvbCBib3ggaW4gdGhlIHVwcGVyIGxlZnQgb2YgdGhlIFZpbSB3aW5kb3cuIChUaGlzIGxvb2tzCisgICBsaWtlIGEgYmlnIG1pbnVzIHNpZ24pLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIG1vdXNlLCB5b3UgY2FuIGdldAorICAgdGhpcyB3aXRoIGFsdCtzcGFjZWJhci4KKzUpIG9uIHRoZSByZXN1bHRpbmcgZHJvcGRvd24gbWVudSBjaG9vc2UgIkVkaXQiCis2KSBvbiB0aGUgY2hpbGQgZHJvcGRvd24gbWVudSBjaG9vc2UgIlBhc3RlIgorCitUbyBjb3B5IHNvbWV0aGluZyBmcm9tIHRoZSBWaW0gd2luZG93IHRvIHRoZSBjbGlwYm9hcmQsCisKKzEpIHNlbGVjdCB0aGUgY29udHJvbCBib3ggdG8gZ2V0IHRoZSBjb250cm9sIGRyb3AgZG93biBtZW51LgorMikgc2VsZWN0ICJFZGl0Ii4KKzMpIHNlbGVjdCAiTWFyayIKKzQpIHVzaW5nIGVpdGhlciB0aGUga2V5cyBvciB0aGUgbW91c2UsIHNlbGVjdCB0aGUgcGFydCBvZiB0aGUgVmltIHdpbmRvdyB0aGF0CisgICB5b3Ugd2FudCB0byBjb3B5LiBUbyB1c2UgdGhlIGtleXMsIHVzZSB0aGUgYXJyb3cga2V5cywgYW5kIGhvbGQgZG93biBzaGlmdAorICAgdG8gZXh0ZW5kIHRoZSBzZWxlY3Rpb24uCis1KSB3aGVuIHlvdSd2ZSBjb21wbGV0ZWQgeW91ciBzZWxlY3Rpb24sIHByZXNzICdlbnRlci4nIFRoZSBzZWxlY3Rpb24KKyAgIGlzIG5vdyBpbiB0aGUgd2luZG93cyBjbGlwYm9hcmQuIEJ5IHRoZSB3YXksIHRoaXMgY2FuIGJlIGFueQorICAgcmVjdGFuZ3VsYXIgc2VsZWN0aW9uLCBmb3IgZXhhbXBsZSBjb2x1bW5zIDQtMjUgaW4gcm93cyA3LTEwLiBJdCBjYW4KKyAgIGluY2x1ZGUgYW55dGhpbmcgaW4gdGhlIFZJTSB3aW5kb3c6IHRoZSBvdXRwdXQgb2YgYSA6IWRpciwgZm9yCisgICBleGFtcGxlLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3Nfb3MyLnR4dCBiL3J1bnRpbWUvZG9jL29zX29zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E0ZGQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29zX29zMi50eHQKQEAgLTAsMCArMSwyMjAgQEAKKypvc19vczIudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMDkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgUGF1bCBTbG9vdG1hbgorCisKKwkJCQkJCQkqb3MyKiAqT1MyKiAqT1MvMioKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgcGFydGljdWxhcml0aWVzIGZvciB0aGUgT1MvMiB2ZXJzaW9uIG9mIFZpbS4KKworQXQgcHJlc2VudCB0aGVyZSBpcyBubyBuYXRpdmUgUE0gdmVyc2lvbiBvZiB0aGUgR1VJIHZlcnNpb24gb2YgVmltOiBUaGUgT1MvMgordmVyc2lvbiBpcyBhIGNvbnNvbGUgYXBwbGljYXRpb24uICBIb3dldmVyLCB0aGVyZSBpcyBub3cgYSBXaW4zMnMtY29tcGF0aWJsZQorR1VJIHZlcnNpb24sIHdoaWNoIHNob3VsZCBiZSB1c2FibGUgYnkgb3duZXJzIG9mIFdhcnAgNCAod2hpY2ggc3VwcG9ydHMKK1dpbjMycykgaW4gYSBXaW4tT1MvMiBzZXNzaW9uLiAgVGhlIG5vdGVzIGluIHRoaXMgZmlsZSByZWZlciB0byB0aGUgbmF0aXZlCitjb25zb2xlIHZlcnNpb24uCisKKworTk9URQorCitUaGlzIE9TLzIgcG9ydCB3b3JrcyB3ZWxsIGZvciBtZSBhbmQgYSBjb3VwbGUgb2Ygb3RoZXIgT1MvMiB1c2VyczsgaG93ZXZlciwKK3NpbmNlIEkgaGF2ZW4ndCBoYWQgbXVjaCBmZWVkYmFjaywgdGhhdCBlaXRoZXIgbWVhbnMgbm8gKE9TLzItc3BlY2lmaWMpIGJ1Z3MKK2V4aXN0IChiZXNpZGVzIHRoZSBvbmVzIG1lbnRpb25lZCBiZWxvdyksIG9yIG5vIG9uZSBoYXMgeWV0IGNyZWF0ZWQgYQorc2l0dWF0aW9uIGluIHdoaWNoIGFueSBidWdzIGFyZSBhcHBhcmVudC4gIEZpbGUgSS9PIGluIERvcyBhbmQgVW5peCBtb2RlLAorYmluYXJ5IG1vZGUsIGFuZCBGQVQgaGFuZGxpbmcgYWxsIHNlZW0gdG8gd29yayB3ZWxsLCB3aGljaCB3b3VsZCBzZWVtIHRvIGJlCit0aGUgbW9zdCBsaWtlbHkgcGxhY2VzIGZvciB0cm91YmxlLgorCitBIGtub3duIHByb2JsZW0gaXMgdGhhdCBmaWxlcyBvcGVuZWQgYnkgVmltIGFyZSBpbmhlcml0ZWQgYnkgb3RoZXIgcHJvZ3JhbXMKK3RoYXQgYXJlIHN0YXJ0ZWQgdmlhIGEgc2hlbGwgZXNjYXBlIGZyb20gd2l0aGluIFZpbS4gIFRoaXMgc3BlY2lmaWNhbGx5IG1lYW5zCit0aGF0IFZpbSB3b24ndCBiZSBhYmxlIHRvIHJlbW92ZSB0aGUgc3dhcCBmaWxlKHMpIGFzc29jaWF0ZWQgd2l0aCBidWZmZXJzIG9wZW4KK2F0IHRoZSB0aW1lIHRoZSBvdGhlciBwcm9ncmFtIHdhcyBzdGFydGVkLCB1bnRpbCB0aGUgb3RoZXIgcHJvZ3JhbSBpcyBzdG9wcGVkLgorQXQgdGhhdCB0aW1lLCB0aGUgc3dhcCBmaWxlIG1heSBiZSByZW1vdmVkLCBidXQgaWYgVmltIGNvdWxkIG5vdCBkbyB0aGF0IHRoZQorZmlyc3QgdGltZSwgaXQgd29uJ3QgYmUgcmVtb3ZlZCBhdCBhbGwuIFlvdSdsbCBnZXQgd2FybmluZ3MgdGhhdCBzb21lIG90aGVyCitWaW0gc2Vzc2lvbiBtYXkgYmUgZWRpdGluZyB0aGUgZmlsZSB3aGVuIHlvdSBzdGFydCBWaW0gdXAgYWdhaW4gb24gdGhhdCBmaWxlLgorVGhpcyBjYW4gYmUgcmVwcm9kdWNlZCB3aXRoICI6IXN0YXJ0IGVwbSIuIE5vdyBxdWl0IFZpbSwgYW5kIHN0YXJ0IFZpbSBhZ2Fpbgord2l0aCB0aGUgZmlsZSB0aGF0IHdhcyBpbiB0aGUgYnVmZmVyIGF0IHRoZSB0aW1lIGVwbSB3YXMgc3RhcnRlZC4gIEknbSB3b3JraW5nCitvbiB0aGlzIQorCitBIHNlY29uZCBwcm9ibGVtIGlzIHRoYXQgVmltIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgc2l0dWF0aW9uIHdoZW4gdXNpbmcgaXQKK3doZW4gYWNjZXNzaW5nIHRoZSBPUy8yIHN5c3RlbSB2aWEgdGhlIG5ldHdvcmssIGUuZy4gdXNpbmcgdGVsbmV0IGZyb20gYSBVbml4CitzeXN0ZW0sIGFuZCB0aGVuIHN0YXJ0aW5nIFZpbS4gVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhhdCBPUy8yID1zb21ldGltZXM9CityZWNvZ25pemVzIGZ1bmN0aW9uIC8gY3Vyc29yIGtleXMsIGFuZCB0cmllcyB0byBjb252ZXJ0IHRob3NlIHRvIHRoZQorY29ycmVzcG9uZGluZyBPUy8yIGNvZGVzIGdlbmVyYXRlZCBieSB0aGUgIm5vcm1hbCIgUEMga2V5Ym9hcmQuIEkndmUgYmVlbgordGVzdGluZyBhIHdvcmthcm91bmQgKG1hcHBpbmcgdGhlIE9TLzIgY29kZXMgdG8gdGhlIGNvcnJlY3QgZnVuY3Rpb25zKSwgYnV0IHNvCitmYXIgSSBjYW4ndCBzYXkgYW55dGhpbmcgY29uY2x1c2l2ZSAodGhpcyBpcyBvbiBXYXJwIDMsIGJ5IHRoZSB3YXkpLiBJbiB0aGUKK21lYW50aW1lIGFueSBoZWxwIHdpbGwgYmUgYXBwcmVjaWF0ZWQuCisKKworUFJFUkVRVUlTSVRFUworCitUbyBydW4gVmltLCB5b3UgbmVlZCB0aGUgZW14IHJ1bnRpbWUgZW52aXJvbm1lbnQgKGF0IGxlYXN0IHJldi4gMC45YikuICBUaGlzCitpcyBnZW5lcmFsbHkgYXZhaWxhYmxlIGFzIChhc2sgQXJjaGllIGFib3V0IGl0KToKKworICAgIGVteHJ0LnppcCAgICAgZW14IHJ1bnRpbWUgcGFja2FnZQorCitJJ3ZlIGluY2x1ZGVkIGEgY29weSBvZiBlbXguZGxsLCB3aGljaCBzaG91bGQgYmUgY29waWVkIHRvIG9uZSBvZiB0aGUKK2RpcmVjdG9yaWVzIGxpc3RlZCBpbiB5b3VyIExJQlBBVEguIEVteCBpcyBHUEwnZWQsIGJ1dCB0aGUgZW14LmRsbCBsaWJyYXJ5IGlzCitub3QgKHJlYWQgQ09QWUlORy5FTVggdG8gZmluZCBvdXQgd2hhdCB0aGF0IG1lYW5zIHRvIHlvdSkuCisKK1RoaXMgZW14LmRsbCBpcyBmcm9tIHRoZSBlbXhmaXgwNC56aXAgcGFja2FnZSwgd2hpY2ggdW5mb3J0dW5hdGVseSBoYXMgYSBidWcsCitlaCwgSSBtZWFuIGEgUE9TSVggZmVhdHVyZSwgaW4gc2VsZWN0KCkuICBWZXJzaW9ucyBvZiBWaW0gYmVmb3JlIDMuMjcgd2lsbAorYXBwZWFyIHRvIGhhbmcgd2hlbiBzdGFydGluZyAoYWN0dWFsbHksIHdoaWxlIHByb2Nlc3NpbmcgdmltcmMpLiBIaXQgPEVudGVyPiBhCitjb3VwbGUgb2YgdGltZXMgdW50aWwgVmltIHN0YXJ0cyB3b3JraW5nIGlmIHRoaXMgaGFwcGVucy4gIE5leHQsIGdldCBhbiB1cCB0bworZGF0ZSB2ZXJzaW9uIG9mIFZpbSEKKworCitIRUxQIEFORCBWSU1SQyBGSUxFCisKK0lmIHlvdSB1bnBhY2sgdGhlIGFyY2hpdmUgdGhhdCBWaW0gY2FtZSBpbiBhbmQgcnVuIFZpbSBkaXJlY3RseSBmcm9tIHdoZXJlIGl0Cit3YXMgdW5wYWNrZWQsIFZpbSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSBydW50aW1lIGZpbGVzIGFuZCB5b3VyIC52aW1yYword2l0aG91dCBhbnkgc2V0dGluZ3MuCisKK0lmIHlvdSBwdXQgdGhlIHJ1bnRpbWUgZmlsZXMgc2VwYXJhdGVseSBmcm9tIHRoZSBiaW5hcnksIHRoZSBWSU0gZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGlzIHVzZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgdGhlIGhlbHAgZmlsZXMgYW5kIHRoZSBzeXN0ZW0gLnZpbXJjLgorUGxhY2UgYW4gZW50cnkgc3VjaCBhcyB0aGlzIGluIENPTkZJRy5TWVM6ID4KKworICBTRVQgVklNPWM6L2xvY2FsL2xpYi92aW0KKworUHV0IHlvdXIgLnZpbXJjIGFuZCB5b3VyIG90aGVyIFZpbSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4gIENvcHkgdGhlIHJ1bnRpbWUKK2RpcmVjdG9yeSB0byB0aGlzIGRpcmVjdG9yeS4gIEVhY2ggdmVyc2lvbiBvZiBWaW0gaGFzIGl0cyBvd24gcnVudGltZQorZGlyZWN0b3J5LiAgSXQgd2lsbCBiZSBjYWxsZWQgc29tZXRoaW5nIGxpa2UgImM6L2xvY2FsL2xpYi92aW0vdmltNTQiLiAgVGh1cworeW91IGdldCBhIHRyZWUgb2YgVmltIGZpbGVzIGxpa2UgdGhpczoKKwljOi9sb2NhbC9saWIvdmltLy52aW1yYworCWM6L2xvY2FsL2xpYi92aW0vdmltNTQvZmlsZXR5cGUudmltCisJYzovbG9jYWwvbGliL3ZpbS92aW01NC9kb2MvaGVscC50eHQKKwlldGMuCisKK05vdGU6IC52aW1yYyBtYXkgYWxzbyBiZSBjYWxsZWQgX3ZpbXJjIHRvIGFjY29tbW9kYXRlIHRob3NlIHdobyBoYXZlIGNob3NlbiB0bworaW5zdGFsbCBPUy8yIG9uIGEgRkFUIGZpbGUgc3lzdGVtLiBWaW0gZmlyc3QgdHJpZXMgdG8gZmluZCAudmltcmMgYW5kIGlmIHRoYXQKK2ZhaWxzLCBsb29rcyBmb3IgX3ZpbXJjIGluIHRoZSBzYW1lIHBsYWNlLiAgVGhlIGV4aXN0ZW5jZSBvZiBhIC52aW1yYyBvcgorX3ZpbXJjIGZpbGUgaW5mbHVlbmNlcyB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbnMsIHdoaWNoIGNhbiBoYXZlIHVuZXhwZWN0ZWQgc2lkZQorZWZmZWN0cy4gIFNlZSB8J2NvbXBhdGlibGUnfC4KKworSWYgeW91J3JlIHVzaW5nIG5ldHdvcmsgZHJpdmVzIHdpdGggT1MvMiwgdGhlbiB5b3UgY2FuIGluc3RhbGwgVmltIG9uIGEKK25ldHdvcmsgZHJpdmUgKGluY2x1ZGluZyAudmltcmM7IHRoaXMgaXMgdGhlbiBjYWxsZWQgdGhlICJzeXN0ZW0iIHZpbXJjIGZpbGUpLAorYW5kIHRoZW4gdXNlIGEgcGVyc29uYWwgY29weSBvZiAudmltcmMgKHRoZSAidXNlciIgdmltcmMgZmlsZSkuIFRoaXMgc2hvdWxkIGJlCitsb2NhdGVkIGluIGEgZGlyZWN0b3J5IGluZGljYXRlZCBieSB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworCitFTlZJUk9OTUVOVCBWQVJJQUJMRVMgSU4gRklMRSBOQU1FUworCitUaGlzIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgYWxzbyB1c2VkIHdoZW4gdXNpbmcgfiBpbiBmaWxlIG5hbWVzLCBzbworIjplIH4vdGV4dGZpbGUiIHdpbGwgZWRpdCB0aGUgZmlsZSAidGV4dGZpbGUiIGluIHRoZSBkaXJlY3RvcnkgcmVmZXJyZWQgdG8gYnkKK0hPTUUuICBBZGRpdGlvbmFsbHkgeW91IGNhbiB1c2Ugb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGZpbGUgbmFtZXMsIGFzCithcyAiOm4gJFNSQy8qLmMiLgorCitUaGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBhbHNvIHVzZWQgdG8gbG9jYXRlIHRoZSAudmltaW5mbyBmaWxlCisoc2VlIHx2aW1pbmZvLWZpbGV8KS4gIFRoZXJlIGlzIG5vIHN1cHBvcnQgeWV0IGZvciAudmltaW5mbyBvbiBGQVQgZmlsZQorc3lzdGVtcyB5ZXQsIHNvcnJ5LiAgWW91IGNvdWxkIHRyeSB0aGUgLWkgc3RhcnR1cCBmbGFnIChhcyBpbiAidmltIC1pCiskSE9NRS9fdmltaW5mbyIpIGhvd2V2ZXIuCisKK0lmIHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQsIHRoZSB2YWx1ZSAiQzovIiBpcyB1c2VkIGFzIGEKK2RlZmF1bHQuCisKKworQkFDS1NMQVNIRVMKKworVXNpbmcgc2xhc2hlcyAoJy8nKSBhbmQgYmFja3NsYXNoZXMgKCdcJykgY2FuIGJlIGEgYml0IG9mIGEgcHJvYmxlbSAoc2VlCit8ZG9zLWJhY2tzbGFzaHwgZm9yIG1vcmUgZXhwbGFuYXRpb24pLCBidXQgaW4gYWxtb3N0IGFsbCBjYXNlcyBWaW0gZG9lcyAiVGhlCitSaWdodCBUaGluZyIuICBWaW0gaXRzZWxmIHVzZXMgYmFja3NsYXNoZXMgaW4gZmlsZSBuYW1lcywgYnV0IHdpbGwgaGFwcGlseQorYWNjZXB0IGZvcndhcmQgc2xhc2hlcyBpZiB0aGV5IGFyZSBlbnRlcmVkIChpbiBmYWN0LCBzb21ldGltZXMgdGhhdCB3b3JrcworYmV0dGVyISkuCisKKworVEVNUCBGSUxFUworCitUZW1wb3JhcnkgZmlsZXMgKGZvciBmaWx0ZXJpbmcpIGFyZSBwdXQgaW4gdGhlIGZpcnN0IGRpcmVjdG9yeSBpbiB0aGUgbmV4dAorbGlzdCB0aGF0IGV4aXN0cyBhbmQgd2hlcmUgYSBmaWxlIGNhbiBiZSBjcmVhdGVkOgorCSRUTVAKKwkkVEVNUAorCUM6XFRNUAorCUM6XFRFTVAKKwljdXJyZW50IGRpcmVjdG9yeQorCisKK1RFUk1JTkFMIFNFVFRJTkcKKworCQkJCQkJCSpvczJhbnNpKgorVXNlICJvczJhbnNpIiBhcyB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSAob3IgZG9uJ3Qgc2V0IGl0IGF0IGFsbCwgYXMgdGhlCitkZWZhdWx0IGlzIHRoZSBjb3JyZWN0IHZhbHVlKS4gWW91IGNhbiBzZXQgdGVybSB0byBvczJhbnNpIGluIHRoZSAudmltcmMsIGluCitjYXNlIHlvdSBuZWVkIFRFUk0gdG8gYmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIG90aGVyIGFwcGxpY2F0aW9ucy4gIFRoZQorcHJvYmxlbSBpcyB0aGF0IE9TLzIgQU5TSSBlbXVsYXRpb24gaXMgcXVpdGUgbGltaXRlZCAoaXQgZG9lc24ndCBoYXZlIGluc2VydCAvCitkZWxldGUgbGluZSwgZm9yIGV4YW1wbGUpLgorCitJZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIFRFUk0gKGJlY2F1c2Ugb2Ygb3RoZXIgcHJvZ3JhbXMsIGZvcgorZXhhbXBsZSksIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXJtY2FwIGVudHJ5IGZvciB0aGF0IFRFUk0gdmFsdWUgaGFzIHRoZQorYXBwcm9wcmlhdGUga2V5IG1hcHBpbmdzLiBUaGUgdGVybWNhcC5kYXQgZGlzdHJpYnV0ZWQgd2l0aCBlbXggZG9lcyBub3QgYWx3YXlzCitoYXZlIHRoZW0uICBIZXJlIGFyZSBzb21lIHN1aXRhYmxlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHRlcm1jYXAgZW50cnkgb2YgeW91cgorY2hvaWNlOyB0aGVzZSBhbGxvdyB0aGUgY3Vyc29yIGtleXMgYW5kIHRoZSBuYW1lZCBmdW5jdGlvbiBrZXlzIChzdWNoIGFzCitwYWdlZG93bikgdG8gd29yay4KKworCTprdT1cMzE2SDprZD1cMzE2UDprbD1cMzE2Szprcj1cMzE2TTolaT1cMzE2dDojND1cMzE2czpcCisJOmtEPVwzMTZTOmtJPVwzMTZSOmtOPVwzMTZROmtQPVwzMTZJOmtoPVwzMTZHOkA3PVwzMTZPOlwKKwk6azE9XDMxNjs6azI9XDMxNjw6azM9XDMxNj06azQ9XDMxNj46azU9XDMxNj86azY9XDMxNkA6XAorCTprNz1cMzE2QTprOD1cMzE2QjprOT1cMzE2QzprOz1cMzE2RDoKKworCitQYXVsIFNsb290bWFuCisKKworNDMgTElORSBXSU5ET1cKKworQSBzdWdnZXN0aW9uIGZyb20gU3RldmVuIFRyeW9uLCBvbiBob3cgdG8gcnVuIFZpbSBpbiBhIGJpZ2dlciB3aW5kb3c6CisKK1doZW4gSSBjYWxsIFZpbSBmcm9tIGFuIE9TLzIgV1BTIGFwcGxpY2F0aW9uIHN1Y2ggYXMgUE1NYWlsIGl0IGNvbWVzIHVwCitpbiB0aGUgZGVmYXVsdCAyNS1saW5lIG1vZGUuICBUbyBnZXQgYSBtb3JlIHVzZWZ1bCB3aW5kb3cgc2l6ZSBJIG1ha2UKK215IGV4dGVybmFsIGVkaXRvciAidmltYmlnLmNtZCIgd2hpY2ggaW4gdHVybiBjYWxscyAidmltYmlnMi5jbWQiLgorQnJ1dGUgZm9yY2UgYW5kIGF3a3dhcmRuZXNzLCBwZXJoYXBzLCBidXQgaXQgd29ya3MuCisKK3ZpbWJpZy5jbWQ6ID4KKyAgIEBlY2hvIG9mZgorICAgc3RhcnQgIlZpIEltcHJvdmVkIiAvZiB2aW1iaWcyLmNtZCAlMSAlMiAlMyAlNAorCit2aW1iaWcyLmNtZDogPgorICAgQGVjaG8gb2ZmCisgICBtb2RlIDgwLDQzCisgICB2aW0uZXhlICUxICUyICUzICU0CisgICBleGl0Cis8CisKK0NMSVBCT0FSRCBBQ0NFU1MgKHByb3ZpZGVkIGJ5IEFsZXhhbmRlciBXYWduZXIpCisKK1ZpbSBmb3IgT1MvMiBoYXMgbm8gZGlyZWN0IGFjY2VzcyB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4gIFRvIGVuYWJsZSBhY2Nlc3MKK2FueXdheSB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHRvb2wgd2hpY2ggZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUgY2xpcGJvYXJkCitmcm9tIHdpdGhpbiBhIHZpbyBhcHBsaWNhdGlvbi4gIFRoZSBmcmVld2FyZSBwYWNrYWdlIGNsaXBicmQuemlwIGJ5IFN0ZWZhbgorR3J1ZW5kZWwgY2FuIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gIFlvdSBtaWdodCBkb3dubG9hZCB0aGUgcGFja2FnZQoraW5jbHVkaW5nIHByZWNvbXBpbGVkIGJpbmFyaWVzIGFuZCBhbGwgc291cmNlcyBmcm9tOgorCWh0dHA6Ly93d3cuc3RlbGxhcmNvbS5vcmcvdmltL2luZGV4Lmh0bWwKKworSW5zdGFsbGF0aW9uIG9mIHRoaXMgcGFja2FnZSBpcyBzdHJhaWdodCBmb3J3YXJkOiBqdXN0IHB1dCB0aGUgdHdvIGV4ZWN1dGFibGVzCit0aGF0IGNvbWUgd2l0aCB0aGlzIHBhY2thZ2UgaW50byBhIGRpcmVjdG9yeSB3aXRoaW4geW91ciBQQVRIIGZvciBWaW0gc2hvdWxkCitiZSBhYmxlIHRvIGNhbGwgdGhlbSBmcm9tIHdoYXRldmVyIGRpcmVjdG9yeSB5b3UgYXJlIHdvcmtpbmcuCisKK1RvIGNvcHkgdGV4dCBmcm9tIHRoZSBjbGlwYm9hcmQgdG8geW91ciBWaW0gc2Vzc2lvbiB5b3UgY2FuIHVzZSB0aGUgOnIKK2NvbW1hbmQuICBTaW1wbHkgY2FsbCBjbGlwYnJkLmV4ZSBmcm9tIHdpdGhpbiBWaW0gaW4gdGhlIGZvbGxvd2luZyB3YXk6ID4KKworCTpyICFjbGlwYnJkIC1yCisKK1RvIGNvcHkgdGV4dCBmcm9tIFZpbSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZCBqdXN0IG1hcmsgdGhlIHRleHQgaW4gdGhlIHVzdWFsCit2aW0tbWFubmVyIGFuZCBjYWxsOiA+CisKKwk6IWNsaXBicmQgLXcKKword2hpY2ggd2lsbCB3cml0ZSB5b3VyIHNlbGVjdGlvbiByaWdodCBpbnRvIE9TLzIncyBjbGlwYm9hcmQuCisKK0ZvciBlYXNlIG9mIHVzZSB5b3UgbWlnaHQgd2FudCB0byBhZGQgc29tZSBtYXBzIGZvciB0aGlzIGNvbW1hbmRzLiAgRS5nLiB0bwordXNlIEYxMSB0byBwYXN0ZSB0aGUgY2xpcGJvYXJkIGludG8gVmltIGFuZCBGMTIgdG8gY29weSBzZWxlY3RlZCB0ZXh0IHRvIHRoZQorY2xpcGJvYXJkIHlvdSB3b3VsZCB1c2U6ID4KKworCWlmIGhhcygib3MyIikKKwkgIGltYXAgPEYxMT4gICAgIDxFU0M+OnIgIWNsaXBicmQgLXI8Q1I+aQorCSAgdm1hcCA8RjEyPiAgICAgOiFjbGlwYnJkIC13PGNyPgorCWVsc2UKKwkgIGltYXAgPEYxMT4gICAgIDxFU0M+IipwPENSPmkKKwkgIHZtYXAgPEYxMj4gICAgICIqeQorCWVuZGlmCisKK1RoaXMgd2lsbCBlbnN1cmUgdGhhdCBvbmx5IG9uIE9TLzIgY2xpcGJyZCBpcyBjYWxsZWQgd2hlcmVhcyBvbiBvdGhlcgorcGxhdGZvcm1zIHZpbXMgYnVpbGQgaW4gbWVjaGFuaXNtIGlzIHVzZWQuIChUbyBlbmFibGUgdGhpcyBmdW5jdGlvbnMgb24gZXZlcnkKK2xvYWQgb2YgVmltIHBsYWNlIHRoZSBhYm92ZSBsaW5lcyBpbiB5b3VyIC52aW1yYy4pCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19xbngudHh0IGIvcnVudGltZS9kb2Mvb3NfcW54LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQxYTRiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3NfcW54LnR4dApAQCAtMCwwICsxLDEzOCBAQAorKm9zX3FueC50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAyMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBKdWxpYW4gS2lucmFpZAorCisKKwkJCQkJCQkqUU5YKiAqcW54KgorCisxLiBHZW5lcmFsCQkJfHFueC1nZW5lcmFsfAorMi4gQ29tcGlsaW5nIFZpbQkJfHFueC1jb21waWxpbmd8CiszLiBUZXJtaW5hbCBzdXBwb3J0CQl8cW54LXRlcm1pbmFsfAorNC4gUGhvdG9uIEdVSQkJCXxwaG90b24tZ3VpfAorNS4gUGhvdG9uIGZvbnRzCQkJfHBob3Rvbi1mb250c3wKKzYuIEJ1Z3MgJiB0aGluZ3MgVG8gRG8KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIEdlbmVyYWwJCQkJCQkqcW54LWdlbmVyYWwqCisKK1ZpbSBvbiBRTlggYmVoYXZlcyBtdWNoIGxpa2Ugb3RoZXIgdW5peCB2ZXJzaW9ucy4gfG9zX3VuaXgudHh0fAorCisKKzIuIENvbXBpbGluZyBWaW0JCQkJCSpxbngtY29tcGlsaW5nKgorCitWaW0gY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBzdGFuZGFyZCBjb25maWd1cmUvbWFrZSBhcHByb2FjaC4gSWYgeW91IHdhbnQgdG8KK2NvbXBpbGUgZm9yIFgxMSwgcGFzcyB0aGUgLS13aXRoLXggb3B0aW9uIHRvIGNvbmZpZ3VyZS4gIE90aGVyd2lzZSwgcnVubmluZworLi9jb25maWd1cmUgd2l0aG91dCBhbnkgYXJndW1lbnRzIG9yIHBhc3NpbmcgLS1lbmFibGUtZ3VpPXBob3Rvbiwgd2lsbCBjb21waWxlCit2aW0gd2l0aCB0aGUgUGhvdG9uIGd1aSBzdXBwb3J0LiAgUnVuIC4vY29uZmlndXJlIC0taGVscCAsIHRvIGZpbmQgb3V0IG90aGVyCitmZWF0dXJlcyB5b3UgY2FuIGVuYWJsZS9kaXNhYmxlLgorCisKKzMuIFRlcm1pbmFsIHN1cHBvcnQJCQkJCSpxbngtdGVybWluYWwqCisKK1ZpbSBoYXMgc3VwcG9ydCBmb3IgdGhlIG1vdXNlIGFuZCBjbGlwYm9hcmQgaW4gYSBwdGVybSwgaWYgdGhvc2Ugb3B0aW9ucworYXJlIGNvbXBpbGVkIGluLCB3aGljaCB0aGV5IGFyZSBub3JtYWxseS4KKworVGhlIG9wdGlvbnMgdGhhdCBhZmZlY3QgbW91c2Ugc3VwcG9ydCBhcmUgfCdtb3VzZSd8IGFuZCB8J3R0eW1vdXNlJ3wuICBXaGVuCit1c2luZyB0aGUgbW91c2UsIG9ubHkgc2ltcGxlIGxlZnQgYW5kIHJpZ2h0IG1vdXNlIGNsaWNraW5nL2RyYWdnaW5nIGlzCitzdXBwb3J0ZWQuICBJZiB5b3UgaG9sZCBkb3duIHNoaWZ0LCBjdHJsLCBvciBhbHQgd2hpbGUgdXNpbmcgdGhlIG1vdXNlLCBwdGVybQord2lsbCBoYW5kbGUgdGhlIG1vdXNlIGl0c2VsZi4gIEl0IHdpbGwgbWFrZSBhIHNlbGVjdGlvbiwgc2VwYXJhdGUgZnJvbSB3aGF0Cit2aW0ncyBkb2luZy4KKworV2hlbiB0aGUgbW91c2UgaXMgaW4gdXNlLCB5b3UgY2FuIHByZXNzIEFsdC1SaWdodE1vdXNlIHRvIG9wZW4gdGhlIHB0ZXJtIG1lbnUuCitUbyB0dXJuIHRoZSBtb3VzZSBvZmYgaW4gdmltLCBzZXQgdGhlIG1vdXNlIG9wdGlvbiB0byBub3RoaW5nLCBzZXQgbW91c2U9CisKKworNC4gUGhvdG9uIEdVSQkJCQkJCSpwaG90b24tZ3VpKgorCitUbyBzdGFydCB0aGUgZ3VpIGZvciB2aW0sIHlvdSBuZWVkIHRvIHJ1biBlaXRoZXIgZ3ZpbSBvciB2aW0gLWcsIG90aGVyd2lzZQordGhlIHRlcm1pbmFsIHZlcnNpb24gd2lsbCBydW4uICBGb3IgbW9yZSBpbmZvIC0gfGd1aS14MTEtc3RhcnR8CisKK1N1cHBvcnRlZCBmZWF0dXJlczoKKwk6YnJvd3NlIGNvbW1hbmQJCQkJCXw6YnJvd3NlfAorCTpjb25maXJtIGNvbW1hbmQJCQkJfDpjb25maXJtfAorCUN1cnNvciBibGlua2luZwkJCQkJfCdndWljdXJzb3InfAorCU1lbnVzLCBwb3B1cCBtZW51cyBhbmQgbWVudSBwcmlvcml0aWVzCQl8Om1lbnV8CisJCQkJCQkJfHBvcHVwLW1lbnV8CisJCQkJCQkJfG1lbnUtcHJpb3JpdHl8CisJVG9vbGJhcgkJCQkJCXxndWktdG9vbGJhcnwKKwkJCQkJCQl8J3Rvb2xiYXInfAorCUZvbnQgc2VsZWN0b3IgKDpzZXQgZ3VpZm9udD0qKQkJCXxwaG90b24tZm9udHN8CisJTW91c2UgZm9jdXMJCQkJCXwnbW91c2Vmb2N1cyd8CisJTW91c2UgaGlkZQkJCQkJfCdtb3VzZWhpZGUnfAorCU1vdXNlIGN1cnNvciBzaGFwZXMJCQkJfCdtb3VzZXNoYXBlJ3wKKwlDbGlwYm9hcmQJCQkJCXxndWktY2xpcGJvYXJkfAorCitVbmZpbmlzaGVkIGZlYXR1cmVzOgorCVZhcmlvdXMgaW50ZXJuYXRpb25hbCBzdXBwb3J0LCBzdWNoIGFzIEZhcnNpICYgSGVicmV3IHN1cHBvcnQsCisJZGlmZmVyZW50IGVuY29kaW5ncywgZXRjLgorCisJVGhpcyBoZWxwIGZpbGUKKworVW5zdXBwb3J0ZWQgZmVhdHVyZXM6CisJRmluZCAmIFJlcGxhY2Ugd2luZG93CQkJCXw6cHJvbXB0ZmluZHwKKwlUZWFyb2ZmIG1lbnVzCisKKwlPdGhlciB0aGluZ3Mgd2hpY2ggSSBjYW4ndCB0aGluayBvZiBzbyBJIGNhbid0IGxpc3QgdGhlbQorCisKKzUuIEZvbnRzCQkJCQkJKnBob3Rvbi1mb250cyoKKworWW91IHNldCBmb250cyBpbiB0aGUgZ3VpIHdpdGggdGhlIGd1aWZvbnQgb3B0aW9uID4KKwk6c2V0IGd1aWZvbnQ9THVjaWRhXCBUZXJtaW5hbAorPAorVGhlIGZvbnQgbXVzdCBiZSBhIG1vbm9zcGFjZSBmb250LCBhbmQgYW55IHNwYWNlcyBpbiB0aGUgZm9udCBuYW1lIG11c3QgYmUKK2VzY2FwZWQgd2l0aCBhICdcJy4gIFRoZSBkZWZhdWx0IGZvbnQgdXNlZCBpcyBQQyBUZXJtaW5hbCwgc2l6ZSA4LiAgVXNpbmcKKycqJyBhcyB0aGUgZm9udCBuYW1lIHdpbGwgb3BlbiBhIHN0YW5kYXJkIFBob3RvbiBmb250IHNlbGVjdG9yIHdoZXJlIHlvdSBjYW4KK3NlbGVjdCBhIGZvbnQuCisKK0ZvbGxvd2luZyB0aGUgbmFtZSwgeW91IGNhbiBpbmNsdWRlIG9wdGlvbmFsIHNldHRpbmdzIHRvIGNvbnRyb2wgdGhlIHNpemUgYW5kCitzdHlsZSBvZiB0aGUgZm9udCwgZWFjaCBzZXR0aW5nIHNlcGFyYXRlZCBieSBhICc6Jy4gIE5vdCBhbGwgZm9udHMgc3VwcG9ydCB0aGUKK3ZhcmlvdXMgc3R5bGVzLgorCitUaGUgb3B0aW9ucyBhcmUsCisgICAgc3tzaXplfQlTZXQgdGhlIHNpemUgb2YgdGhlIGZvbnQgdG8ge3NpemV9CisgICAgYgkJQm9sZCBzdHlsZQorICAgIGEJCVVzZSBhbnRpYWxpYXNpbmcKKyAgICBpCQlJdGFsaWMgc3R5bGUKKworRXhhbXBsZXM6CisKK1NldCB0aGUgZm9udCB0byBtb25vc3BhY2Ugc2l6ZSAxMCB3aXRoIGFudGlhbGlhc2luZyA+CisJOnNldCBndWlmb250PW1vbm9zcGFjZTpzMTA6YQorPAorU2V0IHRoZSBmb250IHRvIENvdXJpZXIgc2l6ZSAxMiwgd2l0aCBib2xkIGFuZCBpdGFsaWNzID4KKwk6c2V0IGd1aWZvbnQ9Q291cmllcjpzMTI6YjppCis8CitTZWxlY3QgYSBmb250IHdpdGggdGhlIHJlcXVlc3RlciA+CisJOnNldCBndWlmb250PSoKKzwKKworCis2LiBCdWdzICYgdGhpbmdzIFRvIERvCisKK0tub3duIHByb2JsZW1zOgorCS0gVmltIGhhbmdzIHNvbWV0aW1lcyB3aGVuIHJ1bm5pbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbS4gIFdvcmthcm91bmQ6CisJICBwdXQgdGhpcyBsaW5lIGluIHlvdXIgfHZpbXJjfCBmaWxlOiA+CisJCXNldCBub2d1aXB0eQorCitCdWdzOgorCS0gU3RpbGwgYSBzbGlnaHQgcHJvYmxlbSB3aXRoIG1lbnUgaGlnaGxpZ2h0aW5nCisJLSBXaGVuIHVzaW5nIHBoZGl0dG8vcGhpbm93cy9ldGMuLCBpZiB5b3UgYXJlIHVzaW5nIGEgZm9udCB0aGF0CisJICBkb2Vzbid0IHN1cHBvcnQgdGhlIGJvbGQgYXR0cmlidXRlLCB3aGVuIHZpbSBhdHRlbXB0cyB0byBkcmF3CisJICBib2xkIHRleHQgaXQgd2lsbCBiZSBhbGwgbWVzc2VkIHVwLgorCS0gVGhlIGN1cnNvciBjYW4gc29tZXRpbWVzIGJlIGhhcmQgdG8gc2VlLgorCS0gQSBudW1iZXIgb2YgbWlub3IgcHJvYmxlbXMgdGhhdCBjYW4gZml4ZWQgOikKKworVG9kbzoKKwktIEltcHJvdmUgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydC4KKwktIE9wdGlvbnMgZm9yIHNldHRpbmcgdGhlIGZvbnRzIHVzZWQgaW4gdGhlIG1lbnUgYW5kIHRvb2xiYXIuCisJLSBGaW5kICYgUmVwbGFjZSBkaWFsb2cuCisJLSBUaGUgY2xpZW50c2VydmVyIGZlYXR1cmVzLgorCS0gTWF5YmUgdGVhcm9mZiBtZW51cy4KKworCS0gUmVwbGFjZSB1c2FnZSBvZiBmb3JrKCkgd2l0aCBzcGF3bigpIHdoZW4gbGF1bmNoaW5nIGV4dGVybmFsCisJICBwcm9ncmFtcy4KKworIHZpbTp0dz03ODpzdz00OnRzPTg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc19yaXNjLnR4dCBiL3J1bnRpbWUvZG9jL29zX3Jpc2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjliYTUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9vc19yaXNjLnR4dApAQCAtMCwwICsxLDMyMyBAQAorKm9zX3Jpc2MudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwMQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBUaG9tYXMgTGVvbmFyZAorCisKKwkJCQkJCSpyaXNjb3MqICpSSVNDT1MqICpSSVNDLU9TKgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBSSVNDIE9TIHZlcnNpb24gb2YgVmltLgorCitUaGUgUklTQyBPUyBwb3J0IGlzIGEgY29tcGxldGVseSBuZXcgcG9ydCBhbmQgaXMgbm90IGJhc2VkIG9uIHRoZSBvbGQgYGFyY2hpJworcG9ydC4KKworMS4gIEZpbGUgbG9jYXRpb25zCQl8cmlzY29zLWxvY2F0aW9uc3wKKzIuICBGaWxlbmFtZSBtdW5naW5nCQl8cmlzY29zLW11bmdpbmd8CiszLiAgQ29tbWFuZC1saW5lIHVzZQkJfHJpc2Nvcy1jb21tYW5kbGluZXwKKzQuICBEZXNrdG9wIChHVUkpIHVzZQkJfHJpc2Nvcy1ndWl8Cis1LiAgUmVtb3RlIHVzZSAodGVsbmV0KQkJfHJpc2Nvcy1yZW1vdGV8Cis2LiAgVGVtcG9yYXJ5IGZpbGVzCQl8cmlzY29zLXRlbXAtZmlsZXN8Cis3LiAgSW50ZXJydXB0aW5nCQl8cmlzY29zLWludGVycnVwdHwKKzguICBNZW1vcnkgdXNhZ2UJCXxyaXNjb3MtbWVtb3J5fAorOS4gIEZpbGV0eXBlcwkJCXxyaXNjb3MtZmlsZXR5cGVzfAorMTAuIFRoZSBzaGVsbAkJCXxyaXNjb3Mtc2hlbGx8CisxMS4gUG9ydGluZyBuZXcgcmVsZWFzZXMJfHJpc2Nvcy1wb3J0aW5nfAorCitJZiBJJ3ZlIG1pc3NlZCBhbnl0aGluZywgZW1haWwgbWUgYW5kIEknbGwgdHJ5IHRvIGZpeCBpdC4gIEluIGZhY3QsIGV2ZW4gaWYgSQoraGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgdGhlbiBlbWFpbCBtZSBhbnl3YXkgdG8gZ2l2ZSBtZSBzb21lIGNvbmZpZGVuY2UgdGhhdCBpdAorYWN0dWFsbHkgd29ya3MhCisKK1Rob21hcyBMZW9uYXJkIDx0YWwxOTdAZWNzLnNvdG9uLmFjLnVrPgorCisJW3RoZXNlIFVSTHMgbm8gbG9uZ2VyIHdvcmsuLi5dCisgUG9ydCBob21lcGFnZToJaHR0cDovL3d3dy5lY3Muc290b24uYWMudWsvfnRhbDE5Ny8KKwlvciB0cnk6CWh0dHA6Ly93d3cuc290b24uYWMudWsvfnRhbDE5Ny8KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1sb2NhdGlvbnMqCisxLiBGaWxlIGxvY2F0aW9ucworCitUaGUgVmltIGV4ZWN1dGFibGUgYW5kIHNoYXJlZCByZXNvdXJjZSBmaWxlcyBhcmUgYWxsIHN0b3JlZCBpbnNpZGUgdGhlICFWaW0KK2FwcGxpY2F0aW9uIGRpcmVjdG9yeS4KKworV2hlbiAhVmltIGlzIGZpcnN0IHNlZW4gYnkgdGhlIGZpbGVyLCBpdCBhbGlhc2VzIHRoZSAqdmkgYW5kICpleCBjb21tYW5kcyB0bworcnVuIHRoZSBjb21tYW5kLWxpbmUgdmVyc2lvbnMgb2YgVmltIChzZWUgfHJpc2Nvcy1jb21tYW5kbGluZXwpLgorCishVmltLlJlc291cmNlcyBhbmQgIVZpbS5SZXNvdXJjZXMyIGNvbnRhaW4gdGhlIGZpbGVzIGZyb20gdGhlIHN0YW5kYXJkIFZpbQorZGlzdHJpYnV0aW9uLCBidXQgbW9kaWZpZWQgc2xpZ2h0bHkgdG8gd29yayB3aXRoaW4gdGhlIGxpbWl0cyBvZiBBREZTLCBwbHVzCitzb21lIGV4dHJhIGZpbGVzIHN1Y2ggYXMgdGhlIHdpbmRvdyB0ZW1wbGF0ZXMuCisKK1VzZXIgY2hvaWNlcyBhcmUgcmVhZCBmcm9tIGBDaG9pY2VzOionIGFuZCBhcmUgc2F2ZWQgdG8gYDxDaG9pY2VzJFdyaXRlPi4qJy4KK0lmIHlvdSBoYXZlIHRoZSBuZXcgIUJvb3Qgc3RydWN0dXJlIHRoZW4gdGhlc2Ugc2hvdWxkIGJlIHNldCB1cCBhbHJlYWR5LiBJZgorbm90LCBzZXQgQ2hvaWNlcyRQYXRoIHRvIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggd2hlbiBsb29raW5nIGZvcgordXNlciBjb25maWd1cmF0aW9uIGZpbGVzLiBTZXQgQ2hvaWNlcyRXcml0ZSB0byB0aGUgZGlyZWN0b3J5IHlvdSB3YW50IGZpbGVzCit0byBiZSBzYXZlZCBpbnRvIChzbyB5b3VyIHNlYXJjaCBwYXR0ZXJucyBhbmQgbWFya3MgY2FuIGJlIHJlbWVtYmVyZWQgYmV0d2Vlbgorc2Vzc2lvbnMpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJCQkqcmlzY29zLW11bmdpbmcqCisyLiBGaWxlbmFtZSBtdW5naW5nCisKK0FsbCBwYXRobmFtZSBtdW5naW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHNvIFZpbSBzaG91bGQgYmVoYXZlIGxpa2UgYQorbm9ybWFsIFJJU0MgT1MgYXBwbGljYXRpb24gbm93LiBTbywgaWYgeW91IHdhbnQgdG8gZWRpdCBgZG9jL2h0bWwnIHRoZW4geW91CithY3R1YWxseSB0eXBlIGAqdmkgZG9jL2h0bWwnLgorCitUaGUgb25seSB0aW1lcyBtdW5naW5nIGlzIGRvbmUgaXMgd2hlbjoKKworLSBTZWFyY2hpbmcgaW5jbHVkZWQgZmlsZXMgZnJvbSBDIHByb2dyYW1zLCBzaW5jZSB0aGVzZSBhcmUgYWx3YXlzIG11bmdlZC4KKyAgU2VlIHxbSXwuCisgIE5vdGU6IG1ha2Ugc3VyZSB5b3UgYXJlIGluIHRoZSByaWdodCBkaXJlY3Rvcnkgd2hlbiB5b3UgdXNlIHRoaXMKKwljb21tYW5kIChpZSB0aGUgb25lIHdpdGggc3ViZGlyZWN0b3JpZXMgJ2MnIGFuZCAnaCcpLgorCistIFNvdXJjaW5nIGZpbGVzIHVzaW5nIHw6c298LgorICBQYXRocyBzdGFydGluZyBgJFZJTS8nIGFyZSBtdW5nZWQgbGlrZSB0aGlzOgorCisgICRWSU0vc3ludGF4L2hlbHAudmltICAtPiAgVmltOnN5bnRheC5oZWxwCisKKyAgQWxzbywgZmlsZXMgZW5kaW5nIGluIGAudmltJyBoYXZlIHRoZWlyIGV4dGVuc2lvbnMgcmVtb3ZlZCwgYW5kIHNsYXNoZXMKKyAgcmVwbGFjZWQgd2l0aCBkb3RzLgorCitTb21lIHRhZyBmaWxlcyBhbmQgc2NyaXB0IGZpbGVzIG1heSBoYXZlIHRvIGJlIGVkaXRlZCB0byB3b3JrIHVuZGVyIHRoaXMgcG9ydC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1jb21tYW5kbGluZSoKKzMuIENvbW1hbmQtbGluZSB1c2UKKworVG8gdXNlIFZpbSBmcm9tIHRoZSBjb21tYW5kLWxpbmUgdXNlIHRoZSBgKnZpJyBjb21tYW5kIChvciAnKmV4JyBmb3IKK3xFeC1tb2RlfCkuCisKK1R5cGUgYCp2aSAtaCcgZm9yIGEgbGlzdCBvZiBvcHRpb25zLgorCitSdW5uaW5nIHRoZSBjb21tYW5kLWxpbmUgdmVyc2lvbiBvZiBWaW0gaW4gYSBsYXJnZSBoaWdoLWNvbG9yIG1vZGUgbWF5IGNhdXNlCit0aGUgc2Nyb2xsaW5nIHRvIGJlIHZlcnkgc2xvdy4gRWl0aGVyIGNoYW5nZSB0byBhIG1vZGUgd2l0aCBmZXdlciBjb2xvcnMgb3IKK3VzZSB0aGUgR1VJIHZlcnNpb24uCisKK0Fsc28sIGhvbGRpbmcgZG93biBDdHJsIHdpbGwgc2xvdyBpdCBkb3duIGV2ZW4gbW9yZSwgYW5kIEN0cmwtU2hpZnQgd2lsbAorZnJlZXplIGl0LCBhcyB1c3VhbCBmb3IgdGV4dCBwcm9ncmFtcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1ndWkqCis0LiBEZXNrdG9wIHVzZQorCitMaW1pdGF0aW9uczoKKworLSBMZWZ0IHNjcm9sbGJhcnMgZG9uJ3Qgd29yayBwcm9wZXJseSAocmlnaHQgYW5kIGJvdHRvbSBhcmUgZmluZSkuCistIERvZXNuJ3QgaW5jcmVhc2Ugc2Nyb2xsIHNwZWVkIGlmIGl0IGdldHMgYmVoaW5kLgorCitZb3UgY2FuIHJlc2l6ZSB0aGUgd2luZG93IGJ5IGRyYWdnaW5nIHRoZSBsb3dlci1yaWdodCBjb3JuZXIsIGV2ZW4gdGhvdWdoCit0aGVyZSBpcyBubyBpY29uIHNob3duIHRoZXJlLgorCitZb3UgY2FuIHVzZSB0aGUgLS1yb3dzIGFuZCAtLWNvbHVtbnMgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGluaXRpYWwgc2l6ZSBvZgordGhlIFZpbSB3aW5kb3csIGxpa2UgdGhpczogPgorCisgICpWaSAtZyAtLXJvd3MgMjAgLS1jb2x1bW5zIDgwCisKK1RoZSBnbG9iYWwgY2xpcGJvYXJkIGlzIHN1cHBvcnRlZCwgc28geW91IGNhbiBzZWxlY3Qgc29tZSB0ZXh0IGFuZCB0aGVuCitwYXN0ZSBpdCBkaXJlY3RseSBpbnRvIGFub3RoZXIgYXBwbGljYXRpb24gKHByb3ZpZGVkIGl0IHN1cHBvcnRzIHRoZQorY2xpcGJvYXJkIHRvbykuCisKK0NsaWNraW5nIE1lbnUgbm93IG9wZW5zIGEgbWVudSBsaWtlIGEgbm9ybWFsIFJJU0MgT1MgcHJvZ3JhbS4gSG9sZCBkb3duIFNoaWZ0Cit3aGVuIGNsaWNraW5nIE1lbnUgdG8gcGFzdGUgKGZyb20gdGhlIGdsb2JhbCBjbGlwYm9hcmQpLgorCitEcmFnZ2luZyBhIGZpbGUgdG8gdGhlIHdpbmRvdyByZXBsYWNlcyB0aGUgQ1VSUkVOVCBidWZmZXIgKHRoZSBvbmUgd2l0aCB0aGUKK2N1cnNvciwgTk9UIHRoZSBvbmUgeW91IGRyYWdnZWQgdG8pIHdpdGggdGhlIGZpbGUuCisKK0RyYWdnaW5nIHdpdGggQ3RybCBoZWxkIGRvd24gY2F1c2VzIGEgbmV3IFZpbSB3aW5kb3cgdG8gYmUgb3BlbmVkIGZvciB0aGUKK2ZpbGUgKHNlZSB8OnNwfCkuCisKK0RyYWdnaW5nIGEgZmlsZSBpbiB3aXRoIFNoaWZ0IGhlbGQgZG93biBpbiBpbnNlcnQgbW9kZSBpbnNlcnRzIHRoZSBwYXRobmFtZSBvZgordGhlIGZpbGUuCisKKzpicm93c2UgOncgb3BlbnMgYSBzdGFuZGFyZCBSSVNDIE9TIHNhdmUgYm94LgorOmJyb3dzZSA6ZSBvcGVucyBhIGRpcmVjdG9yeSB2aWV3ZXIuCisKK0ZvciBmb250cywgeW91IGhhdmUgdGhlIGNob2ljZSBvZiB0aGUgc3lzdGVtIGZvbnQsIGFuIG91dGxpbmUgZm9udCwgdGhlIHN5c3RlbQorZm9udCB2aWEgWmFwUmVkcmF3IGFuZCBhbnkgb2YgdGhlIFphcCBmb250cyB2aWEgWmFwUmVkcmF3OiA+CisKKyAgOnNldCBndWlmb250PQorPAkJCVRvIHVzZSB0aGUgc3lzdGVtIGZvbnQgdmlhIHRoZSBWRFUgZHJpdmVycy4gU3VwcG9ydHMKKwkJCWJvbGQgYW5kIHVuZGVybGluZS4KKz4KKyAgOnNldCBndWlmb250PUNvcnB1cy5NZWRpdW0KKzwJCQlVc2UgdGhlIG5hbWVkIG91dGxpbmUgZm9udC4gWW91IGNhbiB1c2UgYW55IGZvbnQsIGJ1dAorCQkJb25seSBtb25vc3BhY2VkIG9uZXMgbGlrZSBDb3JwdXMgbG9vayByaWdodC4KKz4KKyAgOnNldCBndWlmb250PUNvcnB1cy5NZWRpdW06dzg6aDEyOmI6aQorPAkJCUFzIGJlZm9yZSwgYnV0IHdpdGggc2l6ZSBvZiA4IHBvaW50IGJ5IDEyIHBvaW50LCBhbmQKKwkJCWluIGJvbGQgaXRhbGljLgorCQkJSWYgb25seSBvbmUgb2Ygd2lkdGggYW5kIGhlaWdodCBpcyBnaXZlbiB0aGVuIHRoYXQKKwkJCXZhbHVlIGlzIHVzZWQgZm9yIGJvdGguIElmIG5laXRoZXIgaXMgZ2l2ZW4gdGhlbiAxMAorCQkJcG9pbnQgaXMgdXNlZC4KKworVGhhbmtzIHRvIEpvaG4gS29ydGluaywgVmltIGNhbiB1c2UgdGhlIFphcFJlZHJhdyBtb2R1bGUuIFN0YXJ0IHRoZSBmb250IG5hbWUKK3dpdGggJyEnIChvciAnISEnIGZvciBkb3VibGUgaGVpZ2h0KSwgbGlrZSB0aGlzOiA+CisKKyAgOnNldCBndWlmb250PSEhCis8CQkJVXNlIHRoZSBzeXN0ZW0gZm9udCwgYnV0IHZpYSBaYXBSZWRyYXcuICBUaGlzIGdpdmVzIGEKKwkJCWZhc3RlciByZWRyYXcgb24gU3Ryb25nQVJNIHByb2Nlc3NvcnMsIGJ1dCB5b3UgY2FuJ3QKKwkJCWdldCBib2xkIG9yIGl0YWxpYyB0ZXh0LiBEb3VibGUgaGVpZ2h0LgorPgorICA6c2V0IGd1aWZvbnQ9IXNjcmlwdAorPAkJCVVzZXMgdGhlIG5hbWVkIFphcCBmb250IChhIGRpcmVjdG9yeSBpbiBWaW1Gb250JFBhdGgpLgorCQkJVGhlIHJlZHJhdyBpcyB0aGUgc2FtZSBzcGVlZCBhcyBmb3IgJyEhJywgYnV0IHlvdSBnZXQKKwkJCWEgbmljZXIgbG9va2luZyBmb250LgorCQkJT25seSB0aGUgIm1hbisiIGFuZCAic2NyaXB0IiBmb250cyBhcmUgc3VwcGxpZWQKKwkJCWN1cnJlbnRseSwgYnV0IHlvdSBjYW4gdXNlIGFueSBvZiB0aGUgWmFwIGZvbnRzIGlmCisJCQl0aGV5IGFyZSBpbiBWaW1Gb250JFBhdGguCisJCQlWaW0gd2lsbCB0cnkgdG8gbG9hZCBmb250IGZpbGVzICcwJywgJ0InLCAnSScgYW5kICdJQicKKwkJCWZyb20gdGhlIG5hbWVkIGRpcmVjdG9yeS4gT25seSAnMCcgKG5vcm1hbCBzdHlsZSkgTVVTVAorCQkJYmUgcHJlc2VudC4gTGluayBmaWxlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisKK05vdGUgdGhhdCB3aGVuIHVzaW5nIFphcFJlZHJhdyB0aGUgZWRpdCBiYXIgaXMgZHJhd24gaW4gZnJvbnQgb2YgdGhlIGNoYXJhY3RlcgoreW91IGFyZSBvbiByYXRoZXIgdGhhbiBiZWhpbmQgaXQuIEFsc28gcmVkcmF3IGlzIGluY29ycmVjdCBmb3Igc2NyZWVuIG1vZGVzCit3aXRoIGVpZ2VuIHZhbHVlcyBvZiAwLiBJZiB0aGUgZm9udCBpbmNsdWRlcyBjb250cm9sIGNoYXJhY3RlcnMgdGhlbiB5b3UgY2FuCitnZXQgVmltIHRvIGRpc3BsYXkgdGhlbSBieSBjaGFuZ2luZyB0aGUgJ2lzcHJpbnQnIG9wdGlvbi4KKworSWYgeW91IGZpbmQgdGhlIHNjcm9sbGluZyBpcyB0b28gc2xvdyBvbiB5b3VyIG1hY2hpbmUsIHRyeSBleHBlcmltZW50aW5nCit3aXRoIHRoZSAnc2Nyb2xsanVtcCcgYW5kICd0dHlzY3JvbGwnIG9wdGlvbnMuCisKK0luIHBhcnRpY3VsYXIsIFN0cm9uZ0FSTSB1c2VycyBtYXkgZmluZCB0aGF0OiA+CisKKyAgOnNldCB0dHlzY3JvbGw9MAorCittYWtlcyBzY3JvbGxpbmcgZmFzdGVyIGluIGhpZ2gtY29sb3IgbW9kZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1yZW1vdGUqCis1LiBSZW1vdGUgdXNlICh0ZWxuZXQpCisKK0kgaGF2ZSBpbmNsdWRlZCBhIGJ1aWx0LWluIHRlcm1jYXAgZW50cnksIGJ1dCB5b3UgY2FuIGVkaXQgdGhlIHRlcm1jYXAgZmlsZSB0bworYWxsb3cgb3RoZXIgY29kZXMgdG8gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byB1c2UgVmltIGZyb20gYSByZW1vdGUgdGVybWluYWwuCisKK0FsdGhvdWdoIEkgZG8gbm90IGhhdmUgYW4gaW50ZXJuZXQgY29ubmVjdGlvbiB0byBteSBBY29ybiwgSSBoYXZlIG1hbmFnZWQgdG8KK3J1biBWaW0gaW4gYSBGcmVlVGVybSB3aW5kb3cgdXNpbmcgdGhlIGxvb3BiYWNrIGNvbm5lY3Rpb24uCisKK0l0IHNlZW1zIHRvIHdvcmsgcHJldHR5IHdlbGwgbm93LCB1c2luZyAnKnZpIC1UIGFuc2knLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJCQkqcmlzY29zLXRlbXAtZmlsZXMqCis2LiBUZW1wb3JhcnkgZmlsZXMKKworSWYgVmltIGNyYXNoZXMgdGhlbiB0aGUgc3dhcCBhbmQgYmFja3VwIGZpbGVzIChpZiBhbnkpIHdpbGwgYmUgaW4gdGhlCitkaXJlY3RvcmllcyBzZXQgd2l0aCB0aGUgJ2RpcmVjdG9yeScgYW5kICdiZGlyJyBvcHRpb25zLiAgQnkgZGVmYXVsdCB0aGUgc3dhcAorZmlsZXMgYXJlIGluIDxXaW1wJFNjcmFwRGlyPiAoaWUgaW5zaWRlICFTY3JhcCkgYW5kIGJhY2t1cHMgYXJlIGluIHRoZQorZGlyZWN0b3J5IHlvdSB3ZXJlIHNhdmluZyB0by4gVmltIHdpbGwgYWxsb3cgeW91IHRvIHRyeSBhbmQgcmVjb3ZlciB0aGUgZmlsZQord2hlbiB5b3UgbmV4dCB0cnkgdG8gZWRpdCBpdC4KKworVG8gc2VlIGEgbGlzdCBvZiBzd2FwIGZpbGVzLCBwcmVzcyA8RjEyPiBhbmQgdHlwZSBgKnZpIC1yJy4KKworVmltIG5vIGxvbmdlciBicmluZ3MgdXAgQVRURU5USU9OIHdhcm5pbmdzIGlmIHlvdSB0cnkgdG8gZWRpdCB0d28gZmlsZXMgd2l0aAordGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuCisKK0hvd2V2ZXIsIGl0IGFsc28gbm8gbG9uZ2VyIHdhcm5zIGlmIHlvdSB0cnkgdG8gZWRpdCB0aGUgc2FtZSBmaWxlIHR3aWNlICh3aXRoCit0d28gY29waWVzIG9mIFZpbSksIHRob3VnaCB5b3Ugd2lsbCBzdGlsbCBiZSB3YXJuZWQgd2hlbiB5b3Ugc2F2ZSB0aGF0IHRoZQorZGF0ZXN0YW1wIGhhcyBjaGFuZ2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJCQkqcmlzY29zLWludGVycnVwdCoKKzcuIEludGVycnVwdGluZworCitUbyBicmVhayBvdXQgb2YgYSBsb29waW5nIG1hY3JvLCBvciBzaW1pbGFyLCBob2xkIGRvd24gRXNjYXBlIGluIHRoZQorY29tbWFuZC1saW5lIHZlcnNpb24sIG9yIHByZXNzIENUUkwtQyBpbiB0aGUgR1VJIHZlcnNpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCQkJCSpyaXNjb3MtbWVtb3J5KgorOC4gTWVtb3J5IHVzYWdlCisKK1ZpbSB3aWxsIHVzZSBkeW5hbWljIGFyZWFzIG9uIFJJU0MgT1MgMy41IG9yIGxhdGVyLiBJZiB5b3UgY2FuIHVzZSB0aGVtIG9uCitvbGRlciBtYWNoaW5lcyB0aGVuIGVkaXQgdGhlICFSdW5UeHQgYW5kIEdWaW0gZmlsZXMuIEkgZG9uJ3Qga25vdyB3aGF0IFVuaXhMaWIKK2RvZXMgYnkgZGVmYXVsdCBvbiB0aGVzZSBtYWNoaW5lcyBzbyBJJ20gcGxheWluZyBzYWZlLgorCitJdCBkb2Vzbid0IHdvcmsgYXQgYWxsIHdlbGwgd2l0aG91dCBkeW5hbWljIGFyZWFzLCBzaW5jZSBpdCBjYW4ndCBjaGFuZ2UgaXRzCittZW1vcnkgYWxsb2NhdGlvbiBvbmNlIHJ1bm5pbmcuIEhlbmNlIHlvdSBzaG91bGQgZWRpdCBgIVZpbS5HVmltJyBhbmQKK2AhVmltLiFSdW5UeHQnIHRvIGNob29zZSB0aGUgYmVzdCBzaXplIGZvciB5b3UuIFlvdSBwcm9iYWJseSBuZWVkIGF0IGxlYXN0CithYm91dCAxNDAwSy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkJCQkJKnJpc2Nvcy1maWxldHlwZXMqCis5LiBGaWxldHlwZXMKKworWW91IGNhbiBub3cgc3BlY2lmeSB0aGF0IGF1dG9jb21tYW5kcyBhcmUgb25seSBleGVjdXRlZCBmb3IgZmlsZXMgb2YgY2VydGFpbgordHlwZXMuIFRoZSBmaWxldHlwZSBpcyBnaXZlbiBpbiB0aGUgZm9ybSAmeHh4LCB3aGVuIHh4eCBpcyB0aGUgZmlsZXR5cGUuCisKK0ZpbGV0eXBlcyBtdXN0IGJlIHNwZWNpZmllZCBieSBudW1iZXIgKGVnICZmZmYgZm9yIFRleHQpLgorCitUaGUgc3lzdGVtIGhhcyBjaGFuZ2VkIGZyb20gdmVyc2lvbiA1LjMuIFRoZSBuZXcgc2VxdWVuY2Ugb2YgZXZlbnRzIGlzOgorCistIEEgZmlsZSBpcyBsb2FkZWQuIHwnb3NmaWxldHlwZSd8IGlzIHNldCB0byB0aGUgUklTQyBPUyBmaWxldHlwZS4KKy0gQmFzZWQgb24gdGhlIGZpbGV0eXBlIGFuZCBwYXRobmFtZSwgVmltIHdpbGwgdHJ5IHRvIHNldCB8J2ZpbGV0eXBlJ3wgdG8gdGhlCisgIFZpbS10eXBlIG9mIHRoZSBmaWxlLgorLSBTZXR0aW5nIHRoaXMgb3B0aW9uIG1heSBsb2FkIHN5bnRheCBmaWxlcyBhbmQgcGVyZm9ybSBvdGhlciBhY3Rpb25zLgorLSBTYXZpbmcgdGhlIGZpbGUgd2lsbCBnaXZlIGl0IGEgZmlsZXR5cGUgb2YgfCdvc2ZpbGV0eXBlJ3wuCisKK1NvbWUgZXhhbXBsZXMgbWF5IG1ha2UgdGhpcyBjbGVhcmVyOgorCisgIEtpbmQgb2YgZmlsZSBsb2FkZWQJb3NmaWxldHlwZQlmaWxldHlwZSB+CisgIEMgY29kZSAnYy5oZWxsb3cnCVRleHQgKCZmZmYpCUMKKyAgTGFUZVggZG9jdW1lbnQJTGFUZVggKCYyYTgpCVRlWAorICBEcmF3IGRvY3VtZW50CQlEcmF3RmlsZSAoJmFmZikJKG5vdCBjaGFuZ2VkKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJCQkqcmlzY29zLXNoZWxsKgorMTAuIFRoZSBzaGVsbAorCistIEJhbmdzICghcykgYXJlIG9ubHkgcmVwbGFjZWQgaWYgdGhleSBhcmUgZm9sbG93ZWQgYnkgYSBzcGFjZSBvciBlbmQtb2YtbGluZSwKKyAgc2luY2UgbWFueSBwYXRobmFtZXMgY29udGFpbiB0aGVtLgorCistIFlvdSBjYW4gcHJlZml4IHRoZSBjb21tYW5kIHdpdGggJ34nLCB3aGljaCBzdG9wcyBhbnkgb3V0cHV0IGZyb20gYmVpbmcKKyAgZGlzcGxheWVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBwcmVzcyA8RW50ZXI+IGFmdGVyd2FyZHMsCisgIGFuZCBzdG9wcyB0aGUgc2NyZWVuIGZyb20gYmVpbmcgcmVkcmF3bi4ge29ubHkgaW4gdGhlIEdVSSB2ZXJzaW9ufQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkJCQkqcmlzY29zLXBvcnRpbmcqCisxMS4gUG9ydGluZyBuZXcgcmVsZWFzZXMgdG8gUklTQyBPUworCitEb3dubG9hZGluZyBldmVyeXRoaW5nIHlvdSBuZWVkOgorCistIEdldCB0aGUgbGF0ZXN0IHNvdXJjZSBkaXN0cmlidXRpb24gKHNlZSB3d3cudmltLm9yZykKKy0gR2V0IHRoZSBydW50aW1lIGVudmlyb25tZW50IGZpbGVzIChlZyB0aGVzZSBoZWxwIGZpbGVzKQorLSBHZXQgdGhlIGBleHRyYScgYXJjaGl2ZSAoY29udGFpbnMgdGhlIFJJU0MgT1Mgc3BlY2lmaWMgYml0cykKKy0gR2V0IHRoZSBSSVNDIE9TIGJpbmFyeSBkaXN0cmlidXRpb24gKGlmIHBvc3NpYmxlKQorCisKK1VuYXJjaGl2aW5nOgorCistIENyZWF0ZSBhIHJhRlMgZGlzayBhbmQgcHV0IHRoZSBhcmNoaXZlcyBvbiBpdC4KKy0gVW4tZ3ppcCB0aGVtCistIFVuLXRhciB0aGVtICAgKCp0YXIgeEVMZiA1MCBhcmNoaXZlL3RhcikKKworCitSZWNvbXBpbGluZyB0aGUgc291cmNlczoKKworLSBDcmVhdGUgYywgcywgYW5kIGggZGlyZWN0b3JpZXMuCistIFB1dCBhbGwgdGhlIGhlYWRlciBmaWxlcyBpbiAnaCcJICAgICBcCistIFB1dCBhbGwgdGhlIEMgZmlsZXMgaW4gYGMnCQkgICAgIHwgQW5kIGxvc2UgdGhlIGV4dGVuc2lvbnMKKy0gUHV0IHRoZSBhc3NlbWJsZXIgZmlsZSAoYHN3aXMvcycpIGluICdzJyAgIC8KKy0gUmVuYW1lIGFsbCB0aGUgZmlsZXMgaW4gYHByb3RvJyB0byBgaCcsIGxpa2UgdGhpczoKKyAgICByYUZTOjpWaW1TcmMuc291cmNlLnByb3RvLmZpbGUvcHJvCisJICBiZWNvbWVzCisgICAgcmFGUzo6VmltU3JjLnNvdXJjZS5oLmZpbGVfcHJvCistIEluIHRoZSBmaWxlcyBgaC5wcm90bycgYW5kIGBjLnRlcm1saWInLCBzZWFyY2ggYW5kIHJlcGxhY2UKKyAgICAucHJvIgorICAgICAgIHdpdGgKKyAgICBfcHJvLmgiCistIENyZWF0ZSBhIHNpbXBsZSBNYWtlZmlsZSBpZiBkZXNpcmVkIGFuZCBkbyAnKm1ha2UgLWsnCisgIFVzZSAnQ0MgPSBnY2MgLURSSVNDT1MgLURVU0VfR1VJIC1PMiAteCBjJyBpbiB0aGUgTWFrZWZpbGUKKy0gU2F2ZSB0aGUgYmluYXJ5IGFzICFWaW0uVmltIGluIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uCisKKworVXBkYXRpbmcgdGhlIHJ1bi10aW1lIGVudmlyb25tZW50OgorCistIFJlcGxhY2Ugb2xkIG9yIG1pc3NpbmcgZmlsZXMgaW5zaWRlICFWaW0uUmVzb3VyY2VzIHdpdGggdGhlCisgIG5ldyBmaWxlcy4KKy0gUmVtb3ZlIGZpbGVzIGluIGBkb2MnIG5vdCBlbmRpbmcgaW4gYC90eHQnLCBleGNlcHQgZm9yIGB0YWdzJy4KKy0gTG9zZSB0aGUgZXh0ZW5zaW9ucyBmcm9tIHRoZSBmaWxlcyBpbiBgZG9jJy4KKy0gRWRpdCB0aGUgYGRvYy50YWdzJyBmaWxlLiBSZW1vdmUgZXh0ZW5zaW9ucyBmcm9tIHRoZSBzZWNvbmQgY29sdW1uOiA+CisJOiVzL15cKC5bXlx0XSpcdC4qXClcLnR4dFx0L1wxXHQvCistIFJlbW92ZSBleHRlbnNpb25zIGZyb20gdGhlIHN5bnRheCBmaWxlcy4gU3BsaXQgdGhlbSBpbnRvIHR3byBkaXJlY3RvcmllcworICB0byBhdm9pZCB0aGUgNzcgZW50cnkgbGltaXQgb24gb2xkIEFERlMgZmlsZXN5c3RlbXMuCistIEVkaXQgYFZpbTpGaWxlVHlwZScgdG8gbWF0Y2ggYCouYy4qJyBhcyB3ZWxsIGFzIGAqL2MnIGFuZCBzbyBvbi4KKyAgQWRkIGZpbGV0eXBlIGNoZWNraW5nIHRvby4KKy0gRWRpdCBgVmltOk1lbnUnIGFuZCByZW1vdmUgYWxsIHRoZSBrZXlzIGZyb20gdGhlIG1lbnVzOiA+CisJOiVzLzxUYWI+W14gXHRdKi8vCis8CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvb3NfdW5peC50eHQgYi9ydW50aW1lL2RvYy9vc191bml4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDNhNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3NfdW5peC50eHQKQEAgLTAsMCArMSw2MCBAQAorKm9zX3VuaXgudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIE1hciAxNQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKKwkJCQkJCQkqdW5peCogKlVuaXgqCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhcnRpY3VsYXJpdGllcyBmb3IgdGhlIFVuaXggdmVyc2lvbiBvZiBWaW0uCisKK0ZvciBjb21waWxpbmcgVmltIG9uIFVuaXggc2VlICJJTlNUQUxMIiBhbmQgIk1ha2VmaWxlIiBpbiB0aGUgc3JjIGRpcmVjdG9yeS4KKworVGhlIGRlZmF1bHQgaGVscCBmaWxlIG5hbWUgaXMgIi91c3IvbG9jYWwvbGliL3ZpbS9oZWxwLnR4dCIKK1RoZSBmaWxlcyAiJEhPTUUvLnZpbXJjIiBhbmQgIiRIT01FLy5leHJjIiBhcmUgdXNlZCBpbnN0ZWFkIG9mICJzOi52aW1yYyIgYW5kCisiczouZXhyYyIuIEFkZGl0aW9uYWxseSAiL3Vzci9sb2NhbC9ldGMvdmltcmMiIGlzIHVzZWQgZmlyc3QuCitJZiAiL3Vzci9sb2NhbC9zaGFyZSIgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZCBvZiAiL3Vzci9sb2NhbC9saWIiLgorCitUZW1wb3JhcnkgZmlsZXMgKGZvciBmaWx0ZXJpbmcpIGFyZSBwdXQgaW4gIi90bXAiLiAgSWYgeW91IHdhbnQgdG8gcGxhY2UgdGhlbQorc29tZXdoZXJlIGVsc2UsIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJFRNUERJUiB0byB0aGUgZGlyZWN0b3J5IHlvdQorcHJlZmVyLgorCitXaXRoIHdpbGRjYXJkIGV4cGFuc2lvbiB5b3UgY2FuIHVzZSAnficgKGhvbWUgZGlyZWN0b3J5KSBhbmQgJyQnCisoZW52aXJvbm1lbnQgdmFyaWFibGUpLgorCisJCQkJCQkJKmZvcmsqICpzcG9vbioKK0ZvciBleGVjdXRpbmcgZXh0ZXJuYWwgY29tbWFuZHMgZm9yaygpL2V4ZWMoKSBpcyB1c2VkIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZQorc3lzdGVtKCkgaXMgdXNlZCwgd2hpY2ggaXMgYSBiaXQgc2xvd2VyLiAgVGhlIG91dHB1dCBvZiAiOnZlcnNpb24iIGluY2x1ZGVzCit8K2Zvcmt8IHdoZW4gZm9yaygpL2V4ZWMoKSBpcyB1c2VkLCB8K3N5c3RlbSgpfCB3aGVuIHN5c3RlbSgpIGlzIHVzZWQuICBUaGlzCitjYW4gYmUgY2hhbmdlZCBhdCBjb21waWxlIHRpbWUuCisoRm9yIGZvcmtpbmcgb2YgdGhlIEdVSSB2ZXJzaW9uIHNlZSB8Z3VpLWZvcmt8KS4KKworQmVjYXVzZSB0ZXJtaW5hbCB1cGRhdGluZyB1bmRlciBVbml4IGlzIG9mdGVuIHNsb3cgKGUuZy4gc2VyaWFsIGxpbmUKK3Rlcm1pbmFsLCBzaGVsbCB3aW5kb3cgaW4gc3VudG9vbHMpLCB0aGUgJ3Nob3djbWQnIGFuZCAncnVsZXInIG9wdGlvbnMKK2FyZSBkZWZhdWx0IG9mZi4gSWYgeW91IGhhdmUgYSBmYXN0IHRlcm1pbmFsLCB0cnkgc2V0dGluZyB0aGVtIG9uLiAgWW91IG1pZ2h0CithbHNvIHdhbnQgdG8gc2V0ICd0dHlmYXN0Jy4KKworV2hlbiB1c2luZyBWaW0gaW4gYW4geHRlcm0gdGhlIG1vdXNlIGNsaWNrcyBjYW4gYmUgdXNlZCBieSBWaW0gYnkgc2V0dGluZworJ21vdXNlJyB0byAiYSIuIElmIHRoZXJlIGlzIGFjY2VzcyB0byBhbiBYLXNlcnZlciBndWkgc3R5bGUgY29weS9wYXN0ZSB3aWxsCitiZSB1c2VkIGFuZCB2aXN1YWwgZmVlZGJhY2sgd2lsbCBiZSBwcm92aWRlZCB3aGlsZSBkcmFnZ2luZyB3aXRoIHRoZSBtb3VzZS4KK0lmIHlvdSB0aGVuIHN0aWxsIHdhbnQgdGhlIHh0ZXJtIGNvcHkvcGFzdGUgd2l0aCB0aGUgbW91c2UsIHByZXNzIHRoZSBzaGlmdAora2V5IHdoZW4gdXNpbmcgdGhlIG1vdXNlLiAgU2VlIHxtb3VzZS11c2luZ3wuICBWaXN1YWwgZmVlZGJhY2sgd2hpbGUgZHJhZ2dpbmcKK2NhbiBhbHNvIGJlIGFjaGlldmVkIHZpYSB0aGUgJ3R0eW1vdXNlJyBvcHRpb24gaWYgeW91ciB4dGVybSBpcyBuZXcgZW5vdWdoLgorCisJCQkJCQkJKnRlcm1pbmFsLWNvbG9ycyoKK1RvIHVzZSBjb2xvcnMgaW4gVmltIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAoaWYgeW91ciB0ZXJtaW5hbAorc3VwcG9ydHMgY29sb3JzLCBidXQgIlRfQ28iIGlzIGVtcHR5IG9yIHplcm8pOiA+CisgICA6c2V0IHRfbWU9XltbMDsxOzM2bSAgICAgIiBub3JtYWwgbW9kZSAodW5kb2VzIHRfbXIgYW5kIHRfbWQpCisgICA6c2V0IHRfbXI9XltbMDsxOzMzOzQ0bSAgIiByZXZlcnNlIChpbnZlcnQpIG1vZGUKKyAgIDpzZXQgdF9tZD1eW1sxOzMzOzQxbSAgICAiIGJvbGQgbW9kZQorICAgOnNldCB0X3NlPV5bWzE7MzY7NDBtICAgICIgc3RhbmRvdXQgZW5kCisgICA6c2V0IHRfc289XltbMTszMjs0NW0gICAgIiBzdGFuZG91dCBtb2RlCisgICA6c2V0IHRfdWU9XltbMDsxOzM2bSAgICAgIiB1bmRlcmxpbmUgZW5kCisgICA6c2V0IHRfdXM9XltbMTszMm0gICAgICAgIiB1bmRlcmxpbmUgbW9kZSBzdGFydAorW3RoZSBeWyBpcyBhbiA8RXNjPiwgdHlwZSBDVFJMLVYgPEVzYz4gdG8gZW50ZXIgaXRdCisKK0ZvciByZWFsIGNvbG9yIHRlcm1pbmFscyB0aGUgIjpoaWdobGlnaHQiIGNvbW1hbmQgY2FuIGJlIHVzZWQuCisKK1RoZSBmaWxlICJ0b29scy9WaW0xMzIiIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcHV0IFZpbSBpbiAxMzIKK2NvbHVtbiBtb2RlIG9uIGEgdnQxMDAgYW5kIGxvb2thbGlrZXMuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9vc192bXMudHh0IGIvcnVudGltZS9kb2Mvb3Nfdm1zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRiMzViCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3Nfdm1zLnR4dApAQCAtMCwwICsxLDc3OSBAQAorKm9zX3Ztcy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAxNgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAorCisKKwkJCQkJCQkqVk1TKiAqdm1zKgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBWTVMgdmVyc2lvbiBvZiBWaW0uCitZb3UgY2FuIHJlYWNoIHRoaXMgaW5mb3JtYXRpb24gZmlsZSBieSB0eXBpbmcgOmhlbHAgVk1TIGluIFZpbSBjb21tYW5kCitwcm9tcHQuCisKKyAxLiBHZXR0aW5nIHN0YXJ0ZWQJfHZtcy1zdGFydGVkfAorIDIuIERvd25sb2FkIGZpbGVzCXx2bXMtZG93bmxvYWR8CisgMy4gQ29tcGlsaW5nCQl8dm1zLWNvbXBpbGluZ3wKKyA0LiBQcm9ibGVtcwkJfHZtcy1wcm9ibGVtc3wKKyA1LiBEZXBsb3kJCXx2bXMtZGVwbG95fAorIDYuIFByYWN0aWNhbCB1c2FnZQl8dm1zLXVzYWdlfAorIDcuIEdVSSBtb2RlIHF1ZXN0aW9ucwl8dm1zLWd1aXwKKyA4LiBVc2VmdWwgbm90ZXMJfHZtcy1ub3Rlc3wKKyA5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCXx2bXMtY2hhbmdlc3wKKzEwLiBBdXRob3JzCQl8dm1zLWF1dGhvcnN8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBHZXR0aW5nIHN0YXJ0ZWQJCQkJCSp2bXMtc3RhcnRlZCoKKworVmltIChWaSBJTXByb3ZlZCkgaXMgYSB2aS1jb21wYXRpYmxlIHRleHQgZWRpdG9yIHRoYXQgcnVucyBvbiBuZWFybHkgZXZlcnkKK29wZXJhdGluZyBzeXN0ZW0ga25vd24gdG8gaHVtYW5pdHkuICBOb3cgdXNlIFZpbSBvbiBPcGVuVk1TIHRvbywgaW4gY2hhcmFjdGVyCitvciBYL01vdGlmIGVudmlyb25tZW50LiAgSXQgaXMgZnVsbHkgZmVhdHVyZWQgYW5kIGFic29sdXRlbHkgY29tcGF0aWJsZSB3aXRoCitWaW0gb24gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisyLiBEb3dubG9hZCBmaWxlcwkJCQkJKnZtcy1kb3dubG9hZCoKKworWW91IGNhbiBkb3dubG9hZCB0aGUgVmltIHNvdXJjZSBjb2RlIGJ5IGZ0cCBmcm9tIHRoZSBvZmZpY2lhbCBWaW0gc2l0ZToKKwlmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltLworT3IgdXNlIG9uZSBvZiB0aGUgbWlycm9yczoKKwlmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL01JUlJPUlMKKworWW91IHdpbGwgbmVlZCBib3RoIHRoZSBVbml4IGFuZCBFeHRyYSBhcmNoaXZlcyB0byBidWlsZCB2aW0uZXhlIGZvciBWTVMuCitGb3IgdXNpbmcgVmltJ3MgZnVsbCBwb3dlciB5b3Ugd2lsbCBuZWVkIHRoZSBydW50aW1lIGZpbGVzIGFzIHdlbGwuCisKK1lvdSBjYW4gZG93bmxvYWQgcHJlY29tcGlsZWQgZXhlY3V0YWJsZXMgZnJvbToKKwlodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltLworCWZ0cDovL2Z0cC5wb2xhcmhvbWUuY29tL3B1Yi92aW0vCisKK1RvIHVzZSB0aGUgcHJlY29tcGlsZWQgYmluYXJ5IHZlcnNpb24sIHlvdSBuZWVkIG9uZSBvZiB0aGVzZSBhcmNoaXZlczoKKworICB2aW0tWFgtZXhlLWFscGhhLWd1aS56aXAgICAgICBBbHBoYSBHVUkvTW90aWYgZXhlY3V0YWJsZXMKKyAgdmltLVhYLWV4ZS1hbHBoYS1ndGsuemlwICAgICAgQWxwaGEgR1VJL0dUSyBleGVjdXRhYmxlcworICB2aW0tWFgtZXhlLWFscGhhLXRlcm0uemlwICAgICBBbHBoYSBjb25zb2xlIGV4ZWN1dGFibGVzCisgIHZpbS1YWC1leGUtdmF4LWd1aS56aXAJVkFYIEdVSSBleGVjdXRhYmxlcworICB2aW0tWFgtZXhlLXZheC10ZXJtLnppcCAgICAgICBWQVggY29uc29sZSBleGVjdXRhYmxlcworCithbmQgb2YgY291cnNlCisgIHZpbS1YWC1ydW50aW1lLnppcAkJcnVudGltZSBmaWxlcworCitUaGUgYmluYXJ5IGFyY2hpdmVzIGNvbnRhaW46IHZpbS5leGUsIGN0YWdzLmV4ZSwgeHhkLmV4ZSwgbW1zX3ZpbS5leGUgZmlsZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiszLiBDb21waWxpbmcJCQkJCQkqdm1zLWNvbXBpbGluZyoKKworU2VlIHRoZSBmaWxlIFsuU1JDXUlOU1RBTExWTVMuVFhULgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNC4gUHJvYmxlbXMJCQkJCQkqdm1zLXByb2JsZW1zKgorCitUaGUgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgdW5kZXIgT3BlbiBWTVMgNi4yIC0gNy4zIG9uIEFscGhhIGFuZCBWQVggcGxhdGZvcm1zCit3aXRoIHRoZSBERUNDIGNvbXBpbGVyLiBJdCBzaG91bGQgd29yayB3aXRob3V0IGJpZ2dlciBwcm9ibGVtcy4KK0lmIGl0IGhhcHBlbmVkIHRoYXQgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBzb21lIGluY2x1ZGUgbGlicmFyaWVzIHlvdSBjYW4KK3R1bmUgdXAgaW4gT1NfVk1TX0NPTkYuSCBmaWxlLgorCitJZiB5b3UgZGVjaWRlZCB0byBidWlsZCBWaW0gd2l0aCArcGVybCwgK3B5dGhvbiwgZXRjLiBvcHRpb25zLCBmaXJzdCB5b3UgbmVlZAordG8gZG93bmxvYWQgT3BlblZNUyBkaXN0cmlidXRpb25zIG9mIFBlcmwgYW5kIFB5dGhvbi4gQnVpbGQgYW5kIGRlcGxveSB0aGUKK2xpYnJhcmllcyBhbmQgY2hhbmdlIGFkZXF1YXRlIGxpbmVzIGluIE1BS0VfVk1TLk1NUyBmaWxlLiBUaGVyZSBzaG91bGQgbm90IGJlCitwcm9ibGVtIGZyb20gVmltIHNpZGUuCisKK05vdGU6IFVuZGVyIFZBWCBpdCBzaG91bGQgd29yayB3aXRoIERFQyBDIGNvbXBpbGVyIHdpdGhvdXQgcHJvYmxlbS4gVkFYQworY29tcGlsZXIgaXMgbm90IGZ1bGx5IEFOU0kgQyBjb21wYXRpYmxlIGluIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlcworc2VtYW50aWNzLCB0aGVyZWZvcmUgeW91IGhhdmUgdG8gdXNlIGEgY29udmVydGVyIHByb2dyYW0gd2hhdCB3aWxsIGRvIHRoZQorbGlvbiBwYXJ0IG9mIHRoZSBqb2IuIEZvciBkZXRhaWxlZCBpbnN0cnVjdGlvbiByZWFkIGZpbGUgSU5TVEFMTHZtcy50eHQKKworTU1TX1ZJTS5FWEUgaXMgYnVpbGRpbmcgdG9nZXRoZXIgd2l0aCBWSU0uRVhFLCBidXQgZm9yIFhELkVYRSB5b3Ugc2hvdWxkCitjaGFuZ2UgdG8gc3ViZGlyZWN0b3J5IGFuZCBidWlsZCBpdCBzZXBhcmF0ZWx5LgorCitDVEFHUyBpcyBub3QgcGFydCBvZiBWaW0gc291cmNlIGRpc3RyaWJ1dGlvbiBhbnkgbW9yZSwgaG93ZXZlciB0aGUgT3BlblZNUworc3BlY2lmaWMgc291cmNlIG1pZ2h0IGNvbnRhaW4gQ1RBR1Mgc291cmNlIGZpbGVzIGFzIGl0IGlzIGRlc2NyaWJlZCBhYm92ZS4KK1lvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENUQUdTIG9uIFZNUyBhdAoraHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL2N0YWdzLworCitBZHZhbmNlZCB1c2VycyBtYXkgdHJ5IHNvbWUgYWNyb2JhdGljcyBpbiBGRUFUVVJFLkggZmlsZSBhbHNvLgorCitJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggK3hmb250c2V0ICt4aW0gb3B0aW9ucyB0b28sIGJ1dCB0aGVuIHlvdSBoYXZlCit0byBzZXQgdXAgR1VJIGZvbnRzIGV0Yy4gY29ycmVjdGx5LiBTZWUuIDpoZWxwIHhpbSBmcm9tIFZpbSBjb21tYW5kIHByb21wdC4KKworWW91IG1heSB3YW50IHRvIHVzZSBHVUkgd2l0aCBHVEsgaWNvbnMsIHRoZW4geW91IGhhdmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwKK0dUSyBmb3IgT3BlblZNUyBvciBhdCBsZWFzdCBydW50aW1lIHNoYXJlYWJsZSBpbWFnZXMgLSBMSUJHVEsgZnJvbQorcG9sYXJob21lLmNvbQorCitGb3IgbW9yZSBhZHZhbmNlZCBxdWVzdGlvbnMsIHBsZWFzZSBzZW5kIHlvdXIgcHJvYmxlbSB0byBWaW0gb24gVk1TIG1haWxpbmcKK2xpc3QgPHZpbS12bXNAcG9sYXJob21lLmNvbT4KK01vcmUgYWJvdXQgdGhlIHZpbS12bXMgbGlzdCBjYW4gYmUgZm91bmQgYXQ6CitodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vbWFpbG1hbi9saXN0aW5mby92aW0tdm1zCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis1LiBEZXBsb3kJCQkJCQkqdm1zLWRlcGxveSoKKworVmltIHVzZXMgYSBzcGVjaWFsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZG9jdW1lbnQgYW5kIHJ1bnRpbWUgZmlsZXM6CisKKyAgIHZpbSAob3Igd2hlcmV2ZXIpCisgICAgfC0gdG1wCisgICAgfC0gdmltNTcKKyAgICB8LS0tLS0gZG9jCisgICAgfC0tLS0tIHN5bnRheAorICAgIHwtIHZpbTYwCisgICAgfC0tLS0tIGRvYworICAgIHwtLS0tLSBzeW50YXgKKyAgICB8LSB2aW02MQorICAgIHwtLS0tLSBkb2MKKyAgICB8LS0tLS0gc3ludGF4CisgICAgdmltcmMgICAgKHN5c3RlbSByYyBmaWxlcykKKyAgICBndmltcmMKKworVXNlOiA+CisKKwlkZWZpbmUvbm9sb2cgVklNCWRldmljZTpbcGF0aC52aW1dCisJZGVmaW5lL25vbG9nIFZJTVJVTlRJTUUgZGV2aWNlOltwYXRoLnZpbS52aW02MF0KKwlkZWZpbmUvbm9sb2cgVE1QCWRldmljZTpbcGF0aC50bXBdCisKK3RvIGdldCB2aW0uZXhlIHRvIGZpbmQgaXRzIGRvY3VtZW50LCBmaWxldHlwZSwgYW5kIHN5bnRheCBmaWxlcywgYW5kIHRvCitzcGVjaWZ5IGEgZGlyZWN0b3J5IHdoZXJlIHRlbXBvcmFyeSBmaWxlcyB3aWxsIGJlIGxvY2F0ZWQuIENvcHkgdGhlICJydW50aW1lIgorc3ViZGlyZWN0b3J5IG9mIHRoZSB2aW0gZGlzdHJpYnV0aW9uIHRvIHZpbXJ1bnRpbWUuCisKK0xvZ2ljYWxzICRWSU1SVU5USU1FIGFuZCAkVE1QIGFyZSBvcHRpb25hbC4KKworSWYgJFZJTVJVTlRJTUUgaXMgbm90IHNldCwgVmltIHdpbGwgZ3Vlc3MgYW5kIHRyeSB0byBzZXQgdXAgYXV0b21hdGljYWxseS4KK1JlYWQgbW9yZSBhYm91dCBhdCA6aGVscCBydW50aW1lCisKK0lmICRUTVAgaXMgbm90IHNldCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHNvbWUgZnVuY3Rpb25zIGFzIENUQUdTLAorWFhELCBwcmludGluZyBldGMuIHRoYXQgdXNlIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIG5vcm1hbCBvcGVyYXRpb24uCiskVE1QIGRpcmVjdG9yeSBzaG91bGQgYmUgcmVhZGFibGUgYW5kIHdyaXRhYmxlIGJ5IHRoZSB1c2VyKHMpLgorVGhlIGVhc2llc3Qgd2F5IHRvIHNldCB1cCAkVE1QIGlzIHRvIGRlZmluZSBsb2dpY2FsOiA+CisKKwlkZWZpbmUvbm9sb2cgVE1QIFNZUyRTQ1JBVENICitvciBhczogPgorCWRlZmluZS9ub2xvZyBUTVAgU1lTJExPR0lOCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis2LiBQcmFjdGljYWwgdXNhZ2UJCQkJCSp2bXMtdXNhZ2UqCisKK1VzdWFsbHksIHlvdSB3YW50IHRvIHJ1biBqdXN0IG9uZSB2ZXJzaW9uIG9mIFZpbSBvbiB5b3VyIHN5c3RlbSwgdGhlcmVmb3JlCitpdCBpcyBlbm91Z2ggdG8gZGVkaWNhdGUgb25lIGRpcmVjdG9yeSBmb3IgVmltLgorQ29weSBhbGwgVmltIHJ1bnRpbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0byB0aGUgZGVwbG95bWVudCBwb3NpdGlvbi4KK0FkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgTE9HSU4uQ09NIChpbiBTWVMkTE9HSU4gZGlyZWN0b3J5KS4KK1NldCB1cCBsb2dpY2FsICRWSU0gYXM6ID4KKworCSQgZGVmaW5lIFZJTSBkZXZpY2U6PHBhdGg+CisKK1NldCB1cCBzb21lIHN5bWJvbHM6ID4KKworCSQgISB2aSBzdGFydHMgVmltIGluIGNoci4gbW9kZS4KKwkkIHZpKm0gIDo9PSBtY3IgVklNOlZJTS5FWEUKKworCSQgIWd2aSBzdGFydHMgVmltIGluIEdVSSBtb2RlLgorCSQgZ3YqaW0gOj09IHNwYXduL25vd2FpdCBtY3IgVklNOlZJTS5FWEUgLWcKKworUGxlYXNlLCBjaGVjayB0aGUgbm90ZXMgZm9yIGN1c3RvbWl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2Ygc3ltYm9scy4KKworWW91IG1heSB3YW50IHRvIGNyZWF0ZSAudmltcmMgYW5kIC5ndmltcmMgZmlsZXMgaW4geW91ciBob21lIGRpcmVjdG9yeQorKFNZUyRMT0dJTikgdG8gb3ZlcndyaXRlIGRlZmF1bHQgc2V0dGluZ3MuCisKK1RoZSBlYXNpZXN0IHdheSBpcyBqdXN0IHJlbmFtZSBleGFtcGxlIGZpbGVzLiBZb3UgbWF5IGxlYXZlIHRoZSBtZW51IGZpbGUKKyhNRU5VLlZJTSkgYW5kIGZpbGVzIHZpbXJjIGFuZCBndmltcmMgaW4gdGhlIG9yaWdpbmFsICRWSU0gZGlyZWN0b3J5LiBJdCB3aWxsCitiZSBkZWZhdWx0IHNldHVwIGZvciBhbGwgdXNlcnMsIGFuZCBmb3IgdXNlcnMgaXMgZW5vdWdoIGp1c3QgdG8gaGF2ZSB0aGVpcgorb3duIGFkZGl0aW9ucyBvciByZXNldHRpbmcgaW4gaG9tZSBkaXJlY3RvcnkgaW4gZmlsZXMgLnZpbXJjIGFuZCAuZ3ZpbXJjLgorSXQgc2hvdWxkIHdvcmsgd2l0aG91dCBwcm9ibGVtcy4KKworTm90ZTogUmVtZW1iZXIsIHN5c3RlbSByYyBmaWxlcyAoZGVmYXVsdCBmb3IgYWxsIHVzZXJzKSBkb2VzIG5vdCBoYXZlIGxlYWRpbmcKKyIuIiBTbywgc3lzdGVtIHJjIGZpbGVzIGFyZTogPgorCisJJFZJTTp2aW1yYworCSRWSU06Z3ZpbXJjCisJJFZJTTptZW51LnZpbQorCithbmQgdXNlcidzIGN1c3RvbWl6ZWQgcmMgZmlsZXMgYXJlOiA+CisKKwlzeXMkbG9naW46LnZpbXJjCisJc3lzJGxvZ2luOi5ndmltcmMKKworWW91IGNhbiBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgb24gdGhlIHJpZ2h0IHBsYWNlIHdpdGggdGhlIDp2ZXJzaW9uIGNvbW1hbmQuCisKK0V4YW1wbGUgTE9HSU4uQ09NOiA+CisKKwkkIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5WSU1dCisJJCB2aSptIDo9PSBtY3IgVklNOlZJTS5FWEUKKwkkIGd2KmltOj09IHNwYXduL25vd2FpdC9pbnB1dD1OTEEwIG1jciBWSU06VklNLkVYRSAtZyAtR0VPTUVUUlkgODB4NDAKKwkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTE5Mi4xNjguNS4yMjMvdHJhbnM9dGNwaXAKKworTm90ZTogVGhpcyBzZXQtdXAgc2hvdWxkIGJlIGVub3VnaCwgaWYgeW91IGFyZSB3b3JraW5nIG9uIHN0YW5kYWxvbmUgc2VydmVyIG9yCitjbHVzdGVyZWQgZW52aXJvbm1lbnQsIGJ1dCBpZiB5b3Ugd2FudCB0byB1c2UgVmltIGFzIGludGVybm9kZSBlZGl0b3IgaW4KK0RFQ05FVCBlbnZpcm9ubWVudCwgaXQgd2lsbCBzYXRpc2Z5IHlvdSBhcyB3ZWxsLgorWW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlICJ3aG9sZSIgcGF0aDogPgorCisJJCBkZWZpbmUgVklNICI8c2VydmVyX25hbWU+WyIidXNlciBwYXNzd29yZCIiXTo6ZGV2aWNlOjxwYXRoPiIKKwkkIHZpKm0gOj09ICJtY3IgVklNOlZJTS5FWEUiCisKK2FzIGZvciBleGFtcGxlOiA+CisKKwkkIGRlZmluZSBWSU0gIlBMVVRPOjpSRjEwOltVVElMLlZJTV0iCisJJCBkZWZpbmUgVklNICJQTFVUTyIiWkFZIG15cGFzcyIiOjpSRjEwOltVVElMLlZJTV0iICEgaWYgcGFzc3dkIHJlcXVpcmVkCisKK1lvdSBjYW4gYWxzbyB1c2UgJFZJTVJVTlRJTUUgbG9naWNhbCB0byBwb2ludCB0byBwcm9wZXIgdmVyc2lvbiBvZiBWaW0gaWYgeW91CitoYXZlIGluc3RhbGxlZCBtb3JlIHZlcnNpb25zIGluIHRoZSBzYW1lIHRpbWUuIElmICRWSU1SVU5USU1FIGlzIG5vdCBkZWZpbmVkCitWaW0gd2lsbCBib3Jyb3cgdmFsdWUgZnJvbSAkVklNIGxvZ2ljYWwuIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0CiskVklNUlVOVElNRSBsb2dpY2FsIGJ5IHR5cGluZyA6aGVscCBydW50aW1lIGFzIGEgVmltIGNvbW1hbmQuCisKK1N5c3RlbSBhZG1pbmlzdHJhdG9ycyBtaWdodCB3YW50IHRvIHNldCB1cCBhIHN5c3RlbSB3aWRlIFZpbSBpbnN0YWxsYXRpb24sCit0aGVuIGFkZCB0byB0aGUgU1lTJFNUQVJUVVA6U1lMT0dJQ0FMUy5DT00gPgorCisJJCBkZWZpbmUvbm9sb2cvc3lzIFZJTSBkZXZpY2U6PHBhdGg+CisJJCBkZWZpbmUvbm9sb2cvc3lzIFRNUCBTWVMkU0NSQVRDSAorCithbmQgdG8gdGhlIFNZUyRTVEFSVFVQOlNZTE9HSU4uQ09NID4KKworCSQgdmkqbSA6PT0gbWNyIFZJTTpWSU0uRVhFCisJJCBndippbTo9PSBzcGF3bi9ub3dhaXQvaW5wdXQ9TkxBMCBtY3IgVklNOlZJTS5FWEUgLWcgLUdFT01FVFJZIDgweDQwCisKKworSXQgd2lsbCBzZXQgdXAgbm9ybWFsIFZpbSB3b3JrIGVudmlyb25tZW50IGZvciBldmVyeSB1c2VyIG9uIHRoZSBzeXN0ZW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis3LiBHVUkgbW9kZSBxdWVzdGlvbnMJCQkJCSp2bXMtZ3VpKgorCitPcGVuVk1TIGluIGEgcmVhbCBtYWluZnJhbWUgT1MsIHRoZXJlZm9yZSBldmVuIGlmIGl0IGhhcyBhIEdVSSBjb25zb2xlLCBtb3N0IG9mCit0aGUgdXNlcnMgZG9lcyBub3QgdXNlIGEgbmF0aXZlIFgvV2luZG93IGVudmlyb25tZW50IGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLgorSXQgaXMgbm90IHBvc3NpYmxlIHRvIHN0YXJ0IFZpbSBpbiBHVUkgbW9kZSAianVzdCBsaWtlIHRoYXQiLiBCdXQgYW55aG93IGl0IGlzCitub3QgdG9vIGNvbXBsaWNhdGUgZWl0aGVyLgorCitGaXJzdCBvZiBhbGw6IHlvdSB3aWxsIG5lZWQgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGJ1aWx0IHdpdGggZW5hYmxlZCBHVUkuCisKK1NlY29uZDogeW91IG5lZWQgdG8gaGF2ZSBpbnN0YWxsZWQgREVDVy9Nb3RpZiBvbiB5b3VyIFZNUyBzZXJ2ZXIsIG90aGVyd2lzZQoreW91IHdpbGwgZ2V0IGVycm9ycyB0aGF0IHNvbWUgc2hhcmVhYmxlIGxpYnJhcmllcyBhcmUgbWlzc2luZy4KKworVGhpcmQ6IElmIHlvdSBjaG9vc2UgdG8gcnVuIFZpbSB3aXRoIGV4dHJhIGZlYXR1cmUgYXMgR1VJL0dUSyB0aGVuIHlvdSBuZWVkCitHVEsgaW5zdGFsbGF0aW9uIHRvbyBvciBhdCBsZWFzdCBHVEsgcnVudGltZSBlbnZpcm9ubWVudCAoTElCR1RLIGV0Yy4pCisKKzEpIElmIHlvdSBhcmUgd29ya2luZyBvbiB0aGUgVk1TIFgvTW90aWYgY29uc29sZToKKyAgIFN0YXJ0IFZpbSB3aXRoIHRoZSBjb21tYW5kOiA+CisKKwkkIG1jIGRldmljZTo8cGF0aD5WSU0uRVhFIC1nCis8CisgICBvciB0eXBlIDpndWkgYXMgYSBjb21tYW5kIHRvIHRoZSBWaW0gY29tbWFuZCBwcm9tcHQuIEZvciBtb3JlIGluZm8gOmhlbHAgZ3VpCisKKzIpIElmIHlvdSBhcmUgd29ya2luZyBvbiBvdGhlciBYL1dpbmRvdyBlbnZpcm9ubWVudCBhcyBVbml4IG9yIHNvbWUgcmVtb3RlIFgKKyAgIFZNUyBjb25zb2xlLiBTZXQgdXAgZGlzcGxheSB0byB5b3VyIGhvc3Qgd2l0aDogPgorCisJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT08eW91ciBJUCBhZGRyZXNzPi90cmFucz08dHJhbnNwb3J0LW5hbWU+Cis8CisgICBhbmQgc3RhcnQgVmltIGFzIGluIHBvaW50IDEuIFlvdSBjYW4gZmluZCBtb3JlIGhlbHAgaW4gVk1TIGRvY3VtZW50YXRpb24gb3IKKyAgIHR5cGU6IGhlbHAgc2V0IGRpc3AgaW4gVk1TIHByb21wdC4KKyAgIEV4YW1wbGVzOiA+CisKKwkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTE5Mi4xNjguNS4xNTkJCSAhIGRlZmF1bHQgdHJhbnMgaXMgREVDbmV0CisJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5L3RyYW5zPXRjcGlwICEgVENQL0lQIG5ldHdvcmsKKwkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTE5Mi4xNjguNS4xNTkvdHJhbnM9bG9jYWwgISBkaXNwbGF5IG9uIHRoZSBzYW1lIG5vZGUKKworTm90ZTogeW91IHNob3VsZCBkZWZpbmUganVzdCBvbmUgb2YgdGhlc2UuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiB0eXBlICRoZWxwIHNldCBkaXNwIGluIFZNUyBwcm9tcHQuCisKKzMpIEFub3RoZXIgZWxlZ2FudCBzb2x1dGlvbiBpcyBYRE0gaWYgeW91IGhhdmUgaW5zdGFsbGVkIG9uIE9wZW5WTVMgYm94LgorICAgSXQgaXMgcG9zc2libGUgdG8gd29yayBmcm9tIFhETSBjbGllbnQgYXMgZnJvbSBHVUkgY29uc29sZS4KKworNCkgSWYgeW91IGFyZSB3b3JraW5nIG9uIE1TIFdpbmRvd3Mgb3Igb3RoZXIgbm9uIFgvV2luZG93IGVudmlyb25tZW50CisgICBZb3UgbmVlZCB0byBzZXQgdXAgb25lIFggc2VydmVyIGFuZCBydW4gVmltIGFzIGluIHBvaW50IDIuCisgICBGb3IgTVMgV2luZG93cyB0aGVyZSBhcmUgYXZhaWxhYmxlIGZyZWUgWCBzZXJ2ZXJzIGFzIE1JWCAsIE9tbmkgWCBldGMuCisgICBhcyB3ZWxsIGFzIGV4Y2VsbGVudCBjb21tZXJjaWFsIHByb2R1Y3RzIGFzIGVYY3Vyc2lvbiBvciBSZWZsZWN0aW9uWCB3aXRoCisgICBidWl0IGluIERFQyBzdXBwb3J0LgorCitQbGVhc2Ugbm90ZSwgdGhhdCBleGVjdXRhYmxlcyB3aXRob3V0IEdVSSBhcmUgc2xpZ2h0bHkgZmFzdGVyIGR1cmluZyBzdGFydHVwCit0aGVuIHdpdGggZW5hYmxlZCBHVUkgaW4gY2hhcmFjdGVyIG1vZGUuIFRoZXJlZm9yZSwgaWYgeW91IGRvIG5vdCB1c2UgR1VJCitmZWF0dXJlcywgaXQgaXMgd29ydGggdG8gY2hvb3NlIG5vbiBHVUkgZXhlY3V0YWJsZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis4LiBVc2VmdWwgbm90ZXMJCQkJCQkqdm1zLW5vdGVzKgorCis4LjEgYmFja3NwYWNlL2RlbGV0ZQorOC4yIEZpbHRlcnMKKzguMyBWTVMgZmlsZSB2ZXJzaW9uIG51bWJlcnMKKzguNCBEaXJlY3RvcnkgY29udmVyc2lvbgorOC41IFJlbW90ZSBob3N0IGludm9jYXRpb24KKzguNiBUZXJtaW5hbCBwcm9ibGVtcworOC43IEhleC1lZGl0aW5nIGFuZCBvdGhlciBleHRlcm5hbCB0b29scworOC44IFNvdXJjaW5nIHZpbXJjIGFuZCBndmltcmMKKzguOSBQcmludGluZyBmcm9tIFZpbQorOC4xMCBTZXR0aW5nIHVwIHRoZSBzeW1ib2xzCis4LjExIGRpZmYgYW5kIG90aGVyIEdOVSBwcm9ncmFtcworOC4xMiBkaWZmLW1vZGUKKzguMTMgQWxsb3cgJyQnIGluIEMga2V5d29yZHMKKzguMTQgVklNVFVUT1IgZm9yIGJlZ2lubmVycworCis4LjEgYmFja3NwYWNlL2RlbGV0ZQorCitUaGVyZSBhcmUgYmFja3NwYWNlL2RlbGV0ZSBrZXkgaW5jb25zaXN0ZW5jaWVzIHdpdGggVk1TLgorOmZpeGRlbCBkb2Vzbid0IGRvIHRoZSB0cmljaywgYnV0IHRoZSBzb2x1dGlvbiBpczogPgorCisJOmlub3JlbWFwIF4/IF5ICQkiIGZvciB0ZXJtaW5hbCBtb2RlCisJOmlub3JlbWFwIDxEZWw+IF5ICSIgZm9yIGd1aSBtb2RlCisKK1JlYWQgbW9yZSBpbiBjaDogOC42IChUZXJtaW5hbCBwcm9ibGVtcykuCisoQnJ1Y2UgSHVuc2FrZXIgPEJOSHVuc2FrZXJAY2hxLmJ5dS5lZHU+IFZpbSA1LjMpCisKKworOC4yIEZpbHRlcnMKKworVmltIHN1cHBvcnRzIGZpbHRlcnM7IGllLiBpZiB5b3UgaGF2ZSBhIHNvcnQgcHJvZ3JhbSB0aGF0IGNhbiBoYW5kbGUKK2lucHV0L291dHB1dCByZWRpcmVjdGlvbiBsaWtlIFVuaXggKDxpbmZpbGUgPm91dGZpbGUpLCB5b3UgY291bGQgdXNlID4KKworCTptYXAgXHMgMCEnYXFzb3J0PENSPgorCisoQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxjZWNAZ3J5cGhvbi5nc2ZjLm5hc2EuZ292PiBWaW0gNS40KQorCisKKzguMyBWTVMgZmlsZSB2ZXJzaW9uIG51bWJlcnMKKworVmltIGlzIHNhdmluZyBmaWxlcyBpbnRvIGEgbmV3IGZpbGUgd2l0aCB0aGUgbmV4dCBoaWdoZXIgZmlsZSB2ZXJzaW9uCitudW1iZXIsIHRyeSB0aGVzZSBzZXR0aW5ncy4gPgorCisJOnNldCBub2JhY2t1cAkgICAgICIgZG9lcyBub3QgY3JlYXRlICouKl8gYmFja3VwIGZpbGVzCisJOnNldCBub3dyaXRlYmFja3VwICAgIiBkb2VzIG5vdCBoYXZlIGFueSBwdXJwb3NlIG9uIFZNUy4gSXQncyBkZWZhdWx0LgorCitSZWNvdmVyeSBpcyB3b3JraW5nIHBlcmZlY3QgYXMgd2VsbCBmcm9tIHRoZSBkZWZhdWx0IHN3YXAgZmlsZS4KK1JlYWQgbW9yZSB3aXRoIDpoZWxwIHN3YXBmaWxlCisKKyhDbGF1ZGUgTWFyaW5pZXIgPENsYXVkZU1hcmluaWVyQHh3YXZlc29sdXRpb25zLmNvbT4gVmltIDUuNSwgWm9sdGFuIEFycGFkZmZ5CitWaW0gNS42ICkKKworCis4LjQgRGlyZWN0b3J5IGNvbnZlcnNpb24KKworVmltIHdpbGwgaW50ZXJuYWxseSBjb252ZXJ0IGFueSB1bml4LXN0eWxlIHBhdGhzIGFuZCBldmVuIG1peGVkIHVuaXgvVk1TCitwYXRocyBpbnRvIFZNUyBzdHlsZSBwYXRocy4gU29tZSB0eXBpY2FsIGNvbnZlcnNpb25zIHJlc2VtYmxlOgorCisJL2FiYy9kZWYvZ2hpCQktPiBhYmM6W2RlZl1naGkuCisJL2FiYy9kZWYvZ2hpLmoJCS0+IGFiYzpbZGVmXWdoaS5qCisJL2FiYy9kZWYvZ2hpLmo7MgktPiBhYmM6W2RlZl1naGkuajsyCisJL2FiYy9kZWYvZ2hpL2prbC9tbm8JLT4gYWJjOltkZWYuZ2hpLmprbF1tbm8uCisJYWJjOltkZWYuZ2hpXWprbC9tbm8JLT4gYWJjOltkZWYuZ2hpLmprbF1tbm8uCisJICAuLwkJCS0+IGN1cnJlbnQgZGlyZWN0b3J5CisJICAuLi8JCQktPiByZWxhdGl2ZSBwYXJlbnQgZGlyZWN0b3J5CisJICBbLmRlZi5naGldCQktPiByZWxhdGl2ZSBjaGlsZCBkaXJlY3RvcnkKKwkgICAuL2RlZi9naGkJCS0+IHJlbGF0aXZlIGNoaWxkIGRpcmVjdG9yeQorCitOb3RlOiBZb3UgbWF5IHVzZSA8LD4gYnJhY2tldHMgYXMgd2VsbCAoZGV2aWNlOjxwYXRoPmZpbGUuZXh0O3ZlcnNpb24pIGFzCityZjEwOjx1c2VyLnpheS53b3JrPnRlc3QuYzsxCisKKyhEYXZpZCBFbGlucyA8ZGVsaW5zQGZvbGlhZ2UuY29tPiwgSmVyb21lIExhdXJldAorPEpMQVVSRVRAbWFpbC5jaGVtLnN1bnlzYi5lZHU+IFZpbSA1LjYgKQorCisKKzguNSBSZW1vdGUgaG9zdCBpbnZvY2F0aW9uCisKK0l0IGlzIHBvc3NpYmxlIHRvIHVzZSBWaW0gYXMgYW4gaW50ZXJub2RlIGVkaXRvci4KKzEuIEVkaXQgc29tZSBmaWxlIGZyb20gcmVtb3RlIG5vZGU6ID4KKworCXZpICI8c2VydmVyPiIidXNlcm5hbWUgcGFzc3dkIiI6OjxkZXZpY2U+OjxwYXRoPjxmaWxlbmFtZT47PHZlcnNpb24+IgorCitleGFtcGxlOiA+CisJdmkgInBsdXRvIiJ6YXkgcGFzc3dkIiI6OlJGMTA6PFVTRVIuWkFZLldPUks+VEVTVC5DOzEiCisKK05vdGU6IHN5bnRheCBpcyB2ZXJ5IGltcG9ydGFudCwgb3RoZXJ3aXNlIFZNUyB3aWxsIHJlY29nbml6ZSBtb3JlIHBhcmFtZXRlcnMKK2luc3RlYWQgb2Ygb25lIChyZXN1bHRpbmcgd2l0aDogZmlsZSBub3QgZm91bmQpCisKKzIuICBTZXQgdXAgVmltIGFzIHlvdXIgaW50ZXJub2RlIGVkaXRvci4gSWYgVmltIGlzIG5vdCBpbnN0YWxsZWQgb24geW91ciBob3N0LAoranVzdCBzZXQgdXAgeW91ciBJUCBhZGRyZXNzLCBmdWxsIFZpbSBwYXRoIGluY2x1ZGluZyB0aGUgc2VydmVyIG5hbWUgYW5kIHJ1bgordGhlIGNvbW1hbmQgcHJvY2VkdXJlIGJlbG93OiA+CisKKwkkIGlmIChwMSAuZXFzLiAiIikgLk9SLiAocDIgLmVxcy4gIiIpIHRoZW4gZ290byB1c2FnZQorCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9PHlvdXJfSVBfaGVyZT4vdHJhbnM9dGNwaXAKKwkkIGRlZmluZSAiVklNICI8dmltX3NlcnZlcj4iIicncDEnICcncDInIiI6OjxkZXZpY2U+Ojx2aW1fcGF0aD4iCisJJCAgdmkqbSA6PT0gIm1jciBWSU06VklNLkVYRSIKKwkkIGd2KmltIDo9PSAic3Bhd24vbm93YWl0IG1jciBWSU06VklNLkVYRSAtZyIKKwkkIGdvdG8gZW5kCisJJCB1c2FnZToKKwkkIHdyaXRlIHN5cyRvdXRwdXQgIiBQbGVhc2UgZW50ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFzIGEgcGFyYW1ldGVyLiIKKwkkIHdyaXRlIHN5cyRvdXRwdXQgIiBFeGFtcGxlOiBAU0VUVklNLkNPTSB1c2VybmFtZSBwYXNzd2QiCisJJCBlbmQ6CisKK05vdGU6IE5ldmVyIHVzZSBpdCBpbiBjbHVzdGVyZWQgZW52aXJvbm1lbnQgKHlvdSBkbyBub3QgbmVlZCBpdCksIGFuZCBsb2FkIGNvdWxkCitiZSB2ZXJ5LXZlcnkgc2xvdywgYnV0IGV2ZW4gZmFzdGVyIHRoZW4gYSBsb2NhbCBFbWFjcy4gOi0pCisKKyhab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYpCisKKworOC42IFRlcm1pbmFsIHByb2JsZW1zCisKK0lmIHlvdXIgdGVybWluYWwgbmFtZSBpcyBub3Qga25vd24gdG8gVmltIGFuZCBpdCBpcyB0cnlpbmcgdG8gZmluZCB0aGUgZGVmYXVsdAorb25lIHlvdSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgZHVyaW5nIHN0YXJ0LXVwOgorLS0tCitUZXJtaW5hbCBlbnRyeSBub3QgZm91bmQgaW4gdGVybWNhcAorJ3Vua25vd24tdGVybWluYWwnIG5vdCBrbm93bi4gQXZhaWxhYmxlIGJ1aWx0LWluIHRlcm1pbmFscyBhcmU6CisgICAgYnVpbHRpbl9ndWkKKyAgICBidWlsdGluX3Jpc2NvcworICAgIGJ1aWx0aW5fYW1pZ2EKKyAgICBidWlsdGluX2Jlb3MtYW5zaQorICAgIGJ1aWx0aW5fYW5zaQorICAgIGJ1aWx0aW5fdnQzMjAKKyAgICBidWlsdGluX3Z0NTIKKyAgICBidWlsdGluX3BjYW5zaQorICAgIGJ1aWx0aW5fd2luMzIKKyAgICBidWlsdGluX3h0ZXJtCisgICAgYnVpbHRpbl9pcmlzLWFuc2kKKyAgICBidWlsdGluX2RlYnVnCisgICAgYnVpbHRpbl9kdW1iCitkZWZhdWx0aW5nIHRvICd2dDMyMCcKKy0tLQorVGhlIHNvbHV0aW9uIGlzIHRvIGRlZmluZSBkZWZhdWx0IHRlcm1pbmFsIG5hbWU6ID4KKworCSQgISB1bmtub3duIHRlcm1pbmFsIG5hbWUuIGxldCB1cyB1c2UgdnQzMjAgb3IgYW5zaSBpbnN0ZWFkLgorCSQgISBOb3RlOiBpdCdzIGNhc2Ugc2Vuc2l0aXZlCisJJCBkZWZpbmUgdGVybSAidnQzMjAiCisKK1Rlcm1pbmFscyBmcm9tIFZUMTAwIHRvIFZUMzIwIChhcyBWMzAwLCBWVDIyMCwgVlQyMDAgKSBkbyBub3QgbmVlZCBhbnkgZXh0cmEKK2tleWJvYXJkIG1hcHBpbmdzLiBUaGV5IHNob3VsZCB3b3JrIHBlcmZlY3QgYXMgdGhleSBhcmUsIGluY2x1ZGluZyBhcnJvd3MsCitJbnMsIERlbCBidXR0b25zIGV0Yy4gRXhjZXB0IEJhY2tzcGFjZSBpbiBHVUkgbW9kZS4gVG8gc29sdmUgaXQsIGFkZCB0bworLmd2aW1yYzogPgorCisJaW5vcmVtYXAgPERlbD4gPEJTPgorCitWaW0gd2lsbCBhbHNvIHJlY29nbml6ZSB0aGF0IHRoZXkgYXJlIGZhc3QgdGVybWluYWxzLgorCitJZiB5b3UgaGF2ZSBzb21lIGFubm95aW5nIGxpbmUganVtcGluZyBvbiB0aGUgc2NyZWVuIGJldHdlZW4gd2luZG93cyBhZGQgdG8KK3lvdXIgLnZpbXJjIGZpbGU6ID4KKworCXNldCB0dHlmYXN0CSIgc2V0IGZhc3QgdGVybWluYWwKKworTm90ZTogaWYgeW91J3JlIHVzaW5nIFZpbSBvbiByZW1vdGUgaG9zdCBvciB0aHJvdWdoIHZlcnkgc2xvdyBjb25uZWN0aW9uLCBpdCdzCityZWNvbW1lbmRlZCB0byBhdm9pZCBmYXN0IHRlcm1pbmFsIG9wdGlvbiB3aXRoOiA+CisKKwlzZXQgbm90dHlmYXN0ICAgIiBzZXQgdGVybWluYWwgdG8gc2xvdyBtb2RlCisKKyhab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYpCisKKworOC43IEhleC1lZGl0aW5nIGFuZCBvdGhlciBleHRlcm5hbCB0b29scworCitBIHZlcnkgaW1wb3J0YW50IGRpZmZlcmVuY2UgYmV0d2VlbiBPcGVuVk1TIGFuZCBvdGhlciBzeXN0ZW1zIGlzIHRoYXQgVk1TIHVzZXMKK3NwZWNpYWwgY29tbWFuZHMgdG8gZXhlY3V0ZSBleGVjdXRhYmxlczogPgorCisJUlVOIDxwYXRoPmZpbGVuYW1lCisJTUNSIDxwYXRoPmZpbGVuYW1lIDxwYXJhbWV0ZXJzPgorCitPcGVuVk1TIHVzZXJzIGFsd2F5cyBoYXZlIHRvIGJlIGF3YXJlIHRoYXQgdGhlIFZpbSBjb21tYW5kIDohICJqdXN0IiBkcm9wIHRoZW0KK3RvIERDTCBwcm9tcHQuIFRoaXMgZmVhdHVyZSBpcyBwb3NzaWJsZSB0byB1c2Ugd2l0aG91dCBhbnkgcHJvYmxlbSB3aXRoIGFsbAorRENMIGNvbW1hbmRzLCBidXQgaWYgd2Ugd2FudCB0byBleGVjdXRlIHNvbWUgcHJvZ3JhbSBhcyBYWEQsIENUQUdTLCBKVEFHUyBldGMuCit3ZSdyZSBydW5uaW5nIGludG8gdHJvdWJsZSBpZiB3ZSBmb2xsb3dpbmcgdGhlIFZpbSBkb2N1bWVudGF0aW9uIChzZWU6IGhlbHAKK3h4ZCkuCisKK1NvbHV0aW9uOiBFeGVjdXRlIHdpdGggdGhlIE1DIGNvbW1hbmQgYW5kIGFkZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLgorRXhhbXBsZTogSW5zdGVhZCBvZiA6JSF4eGQgY29tbWFuZCB1c2U6ID4KKworCTolIW1jIHZpbTp4eGQKKworLi4uIG9yIGluIGdlbmVyYWw6ID4KKwk6IW1jIDxwYXRoPmZpbGVuYW1lIDxwYXJhbWV0ZXJzPgorCitOb3RlOiBZb3UgY2FuIHVzZSBYWEQsIGFuZCBDVEFHUyBmcm9tIEdVSSBtZW51LgorCitUbyBjdXN0b21pemUgY3RhZ3MgaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIGxvZ2ljYWwgJENUQUdTIHdpdGggc3RhbmRhcmQKK3BhcmFtZXRlcnMgYXM6ID4KKworCWRlZmluZS9ub2xvZyBDVEFHUyAiLS10b3RhbHMgLW8gc3lzJGxvZ2luOnRhZ3MiCisKK0ZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVhZCA6aGVscCB0YWdzZWFyY2ggYW5kIENUQUdTCitkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9jdGFncy5zb3VyY2Vmb3JnZS5uZXQvY3RhZ3MuaHRtbC4KKworKFpvbHRhbiBBcnBhZGZmeSwgVmltIDUuNi03MCkKKworCis4LjggU291cmNpbmcgdmltcmMgYW5kIGd2aW1yYworCitJZiB5b3Ugd2FudCB0byB1c2UgeW91ciAudmltcmMgYW5kIC5ndmltcmMgZnJvbSBvdGhlciBwbGF0Zm9ybXMgKGUuZy4gV2luZG93cykKK3lvdSBjYW4gZ2V0IGluIHRyb3VibGUgaWYgeW91IGZ0cCB0aGF0IGZpbGUocyk6IFZNUyBoYXMgZGlmZmVyZW50IGVuZC1vZi1saW5lCitpbmRpY2F0aW9uLgorVGhlIHN5bXB0b20gaXMgdGhhdCBWaU0gaXMgbm90IHNvdXJjaW5nIHlvdXIgLnZpbXJjLy5ndmltcmMsIGV2ZW4gaWYgeW91IHNheToKKz4KKwk6c28gc3lzJGxvZ2luOi52aW1yYworCitPbmUgdHJpY2sgaXMgdG8gY29tcHJlc3MgKGUuZy4gemlwKSB0aGUgZmlsZXMgb24gdGhlIG90aGVyIHBsYXRmb3JtIGFuZAordW5jb21wcmVzcyBpdCBvbiBWTVM7IGlmIHlvdSBoYXZlIHRoZSBzYW1lIHN5bXB0b20sIHRyeSB0byBjcmVhdGUgdGhlIGZpbGVzCit3aXRoIGNvcHktcGFzdGUgKGZvciB0aGlzIHlvdSBuZWVkIGJvdGggb3AuIHN5c3RlbXMgcmVhY2hhYmxlIGZyb20gb25lCittYWNoaW5lLCBlLmcuIGFuIFh0ZXJtIG9uIFdpbmRvd3Mgb3IgdGVsbmV0IHRvIFdpbmRvd3MgZnJvbSBWTVMpLgorCisoU2FuZG9yIEtvcGFueWksIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PiBWaW0gNi4wYSkKKworCis4LjkgUHJpbnRpbmcgZnJvbSBWaW0KKworVG8gYmUgYWJsZSB0byBwcmludCBmcm9tIFZpbSAocnVubmluZyBpbiBHVUkgbW9kZSkgdW5kZXIgVk1TIHlvdSBoYXZlIHRvIHNldAordXAgJFRNUCBsb2dpY2FsIHdoaWNoIHNob3VsZCBwb2ludCB0byBzb21lIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGxvZ2ljYWwKK1NZUyRQUklOVCB0byB5b3VyIGRlZmF1bHQgcHJpbnQgcXVldWUuCitFeGFtcGxlOiA+CisKKwkkZGVmaW5lIFNZUyRQUklOVCBIUDVBTlNJCisKK1lvdSBjYW4gcHJpbnQgb3V0IHdob2xlIGJ1ZmZlciBvciBqdXN0IHRoZSBtYXJrZWQgYXJlYS4KK01vcmUgaW5mbyB1bmRlciA6aGVscCBoYXJkY29weQorCisoWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4wYykKKworCis4LjEwIFNldHRpbmcgdXAgdGhlIHN5bWJvbHMKKworV2hlbiBJIHVzZSBHVklNIHRoaXMgd2F5IGFuZCBwcmVzcyBDVFJMLVkgaW4gdGhlIHBhcmVudCB0ZXJtaW5hbCwgZ3ZpbSBleGl0cy4KK0kgbm93IHVzZSBhIGRpZmZlcmVudCBzeW1ib2wgdGhhdCBzZWVtcyB0byB3b3JrIE9LIGFuZCBmaXhlcyB0aGUgcHJvYmxlbS4KK0kgc3VnZ2VzdCB0aGlzIGluc3RlYWQ6ID4KKworCSQgR1YqSU06PT1TUEFXTi9OT1dBSVQvSU5QVVQ9TkxBMDogTUNSIFZJTTpWSU0uRVhFIC1HIC1HRU9NRVRSWSA4MFg0MAorCitUaGUgL0lOUFVUPU5MQTA6IHNlcGFyYXRlcyB0aGUgc3RhbmRhcmQgaW5wdXQgb2YgdGhlIGd2aW0gcHJvY2VzcyBmcm9tIHRoZQorcGFyZW50IHRlcm1pbmFsLCB0byBibG9jayBzaWduYWxzIGZyb20gdGhlIHBhcmVudCB3aW5kb3cuCitXaXRob3V0IHRoZSAtR0VPTUVUUlksIHRoZSBHVklNIHdpbmRvdyBzaXplIHdpbGwgYmUgbWluaW1hbCBhbmQgdGhlIG1lbnUKK3dpbGwgYmUgY29uZnVzZWQgYWZ0ZXIgYSB3aW5kb3ctcmVzaXplLgorCisoQ2FybG8gTWVrZW5rYW1wLCBDb2VuIEVuZ2VsYmFydHMsIFZpbSA2LjBhYykKKworCis4LjExIGRpZmYgYW5kIG90aGVyIEdOVSBwcm9ncmFtcworCitGcm9tIDYuMCBkaWZmIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW1wbGVtZW50ZWQsIGJ1dCBPcGVuVk1TIGRvZXMgbm90IHVzZQorR05VL1VuaXggbGlrZSBkaWZmIHRoZXJlZm9yZSBidWlsdCBpbiBkaWZmIGRvZXMgbm90IHdvcmsuCitUaGVyZSBpcyBhIHNpbXBsZSBzb2x1dGlvbiB0byBzb2x2ZSB0aGlzIGFub21hbHkuIEluc3RhbGwgYW4gVW5peCBsaWtlIGRpZmYKK2FuZCBWaW0gd2lsbCB3b3JrIHBlcmZlY3QgaW4gZGlmZiBtb2RlIHRvby4gWW91IGp1c3QgaGF2ZSB0byByZWRlZmluZSB5b3VyCitkaWZmIHByb2dyYW0gYXM6ID4KKworCWRlZmluZSAvbm9sb2cgZGlmZiA8R05VX1BBVEg+ZGlmZi5leGUKKworQW5vdGhlciwgbW9yZSBzb3BoaXN0aWNhdGVkIHNvbHV0aW9uIGlzIGRlc2NyaWJlZCBiZWxvdyAoOC4xMiBkaWZmLW1vZGUpCitUaGVyZSBhcmUgc29tZSBvdGhlciBwcm9ncmFtcyBhcyBwYXRjaCwgbWFrZSBldGMgdGhhdCBtYXkgY2F1c2Ugc2FtZSBwcm9ibGVtcy4KK0F0IHd3dy5wb2xhcmhvbWUuY29tIGlzIHBvc3NpYmxlIHRvIGRvd25sb2FkIGFuIEdOVSBwYWNrYWdlIGZvciBBbHBoYSBhbmQgVkFYCitib3hlcyB0aGF0IGlzIG1lYW50IHRvIHNvbHZlIEdOVSBwcm9ibGVtcyBvbiBPcGVuVk1TLgorKCBab2x0YW4gQXJwYWRmZnksIFZpbSA2LjEpCisKKworOC4xMiBkaWZmLW1vZGUKKworVmltIDYuMCBhbmQgaGlnaGVyIHN1cHBvcnRzIHZpbSBkaWZmLW1vZGUgKFNlZSB8bmV3LWRpZmYtbW9kZXwsIHxkaWZmLW1vZGV8CithbmQgfDA4Ljd8KS4gVGhpcyB1c2VzIHRoZSBleHRlcm5hbCBwcm9ncmFtICdkaWZmJyBhbmQgZXhwZWN0cyBhIFVuaXgtbGlrZQorb3V0cHV0IGZvcm1hdCBmcm9tIGRpZmYuIFRoZSBzdGFuZGFyZCBWTVMgZGlmZiBoYXMgYSBkaWZmZXJlbnQgb3V0cHV0Citmb3JtYXQuIFRvIHVzZSB2aW0gb24gVk1TIGluIGRpZmYtbW9kZSwgeW91IG5lZWQgdG86CisgICAgMSBJbnN0YWxsIGEgVW5peC1saWtlIGRpZmYgcHJvZ3JhbSwgZS5nLiBHTlUgZGlmZgorICAgIDIgVGVsbCB2aW0gdG8gdXNlIHRoZSBVbml4LWxpa2UgZGlmZiBmb3IgZGlmZi1tb2RlLgorCitZb3UgY2FuIGRvd25sb2FkIEdOVSBkaWZmIGZyb20gdGhlIFZJTS1WTVMgd2Vic2l0ZSwgaXQgaXMgb25lIG9mIHRoZSBHTlUKK3Rvb2xzIGluIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vZmlsZXMvZ251X3Rvb2xzLnppcC4gSSBzdWdnZXN0IHRvCit1bnBhY2sgaXQgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkgIkdOVSIgYW5kIGNyZWF0ZSBhIGxvZ2ljYWwgR05VOiB0aGF0Citwb2ludHMgdG8gdGhhdCBkaXJlY3RvcnkuIGUuZzogPgorCisgICBERUZJTkUgR05VICAgIDxESVNLPjpbPERJUkVDVE9SWT4uQklOLkdOVV0KKworWW91IG1heSBhbHNvIHdhbnQgdG8gZGVmaW5lIGEgc3ltYm9sIEdESUZGLCB0byB1c2UgdGhlIEdOVSBkaWZmIGZyb20gdGhlIERDTAorcHJvbXB0OiA+CisKKyAgIEdESUZGIDo9PSAgICAgJEdOVTpESUZGLkVYRQorCitOb3cgeW91IG5lZWQgdG8gdGVsbCB2aW0gdG8gdXNlIHRoZSBuZXcgZGlmZiBwcm9ncmFtLiBUYWtlIHRoZSBleGFtcGxlCitzZXR0aW5ncyBmcm9tIHxkaWZmLWRpZmZleHByfCBhbmQgY2hhbmdlIHRoZSBjYWxsIHRvIHRoZSBleHRlcm5hbCBkaWZmCitwcm9ncmFtIHRvIHRoZSBuZXcgZGlmZiBvbiBWTVMuIEFkZCB0aGlzIHRvIHlvdXIgLnZpbXJjIGZpbGU6ID4KKworICAgICAiIFNldCB1cCB2aW1kaWZmIG9wdGlvbnMKKyAgICAgICBpZiB2OnZlcnNpb24gPj0gNjAwCisJIiBVc2UgR05VIGRpZmYgb24gVk1TCisJc2V0IGRpZmZleHByPU15RGlmZigpCisJZnVuY3Rpb24gTXlEaWZmKCkKKwkgICBsZXQgb3B0ID0gIiIKKwkgICBpZiAmZGlmZm9wdCA9fiAiaWNhc2UiCisJICAgICBsZXQgb3B0ID0gb3B0IC4gIi1pICIKKwkgICBlbmRpZgorCSAgIGlmICZkaWZmb3B0ID1+ICJpd2hpdGUiCisJICAgICBsZXQgb3B0ID0gb3B0IC4gIi1iICIKKwkgICBlbmRpZgorCSAgIHNpbGVudCBleGVjdXRlICIhbWMgR05VOmRpZmYuZXhlIC1hICIgLiBvcHQgLiB2OmZuYW1lX2luIC4gIiAiIC4gIHY6Zm5hbWVfbmV3IC4KKwkJXCAgIiA+ICIgLiB2OmZuYW1lX291dAorCWVuZGZ1bmN0aW9uCisgICAgICBlbmRpZgorCitZb3UgY2FuIG5vdyB1c2UgdmltIGluIGRpZmYtbW9kZSwgZS5nLiB0byBjb21wYXJlIHR3byBmaWxlcyBpbiByZWFkLW9ubHkKK21vZGU6ID4KKworICAgICQgVklNIC1EL1IgPEZJTEUxPiA8RklMRTI+CisKK1lvdSBjYW4gYWxzbyBkZWZpbmUgbmV3IHN5bWJvbHMgZm9yIHZpbWRpZmYsIGUuZy46ID4KKworICAgICQgVklNRElGRiAgICAgOj09ICdWSU0nIC1EL1IKKyAgICAkIEdWSU1ESUZGICAgIDo9PSAnR1ZJTScgLUQvUgorCitZb3UgY2FuIG5vdyBjb21wYXJlIGZpbGVzIGluIDQgd2F5czogPgorCisgICAgMS4gVk1TICBkaWZmOiAgJCBESUZGICAgICA8RklMRTE+IDxGSUxFMj4KKyAgICAyLiBHTlUgIGRpZmY6ICAkIEdESUZGICAgIDxGSUxFMT4gPEZJTEUyPgorICAgIDMuIFZJTSAgZGlmZjogICQgVklNRElGRiAgPEZJTEUxPiA8RklMRTI+CisgICAgNC4gR1ZJTSBkaWZmOiAgJCBHVklNRElGRiA8RklMRTE+IDxGSUxFMj4KKworKCBDb2VuIEVuZ2VsYmFydHMsIFZpbSA2LjEpCisKKworOC4xMyBBbGxvdyAnJCcgaW4gQyBrZXl3b3JkcworCitERUMgQyB1c2VzIG1hbnkgaWRlbnRpZmllcnMgd2l0aCAnJCcgaW4gdGhlbS4gVGhpcyBpcyBub3QgYWxsb3dlZCBpbiBBTlNJIEMsCithbmQgdmltIHJlY29nbmlzZXMgdGhlICckJyBhcyB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyLiBZb3UgY2FuIGNoYW5nZSB0aGlzCit3aXRoIHRoZSB8aXNrZXl3b3JkfGNvbW1hbmQuCitBZGQgdGhpcyBjb21tYW5kIHRvIHlvdXIgLnZpbXJjIGZpbGU6ID4KKworICAgIGF1dG9jbWQgRmlsZVR5cGUgYyxjcHAsY3MgIHNldCBpc2tleXdvcmQrPSQKKworWW91IGNhbiBhbHNvIGNyZWF0ZSB0aGUgZmlsZShzKSAkVklNL0ZUUExVR0lOL0MuVklNIChhbmQvb3IgQ1BQLlZJTSBhbmQKK0NTLlZJTSkgYW5kIGFkZCB0aGlzIGNvbW1hbmQ6ID4KKworCXNldCBpc2tleXdvcmQrPSQKKworTm93IHdvcmQtYmFzZWQgY29tbWFuZHMsIGUuZy4gdGhlICcqJy1zZWFyY2gtY29tbWFuZCBhbmQgdGhlIENUUkwtXQordGFnLWxvb2t1cCwgd29yayBvbiB0aGUgd2hvbGUgaWRlbnRpZmllci4gKEN0YWdzIG9uIFZNUyBhbHNvIHN1cHBvcnRzICckJyBpbgorQyBrZXl3b3JkcyBzaW5jZSBjdGFncyB2ZXJzaW9uIDUuMS4pCisKKyggQ29lbiBFbmdlbGJhcnRzLCBWaW0gNi4xKQorCis4LjE0IFZJTVRVVE9SIGZvciBiZWdpbm5lcnMKKworSXQgZXhpdHMgVklNVFVUT1IuQ09NIERDTCBzY3JpcHQgdGhhdCBjYW4gaGVscCBWaW0gYmVnaW5uZXJzIHRvIGxlYXJuL21ha2UKK2ZpcnN0IHN0ZXBzIHdpdGggVmltIG9uIE9wZW5WTVMuIERlcGVuZGluZyBvZiBiaW5hcnkgZGlzdHJpYnV0aW9uIHlvdSBtYXkgc3RhcnQKK2l0IHdpdGg6ID4KKworCUB2aW06dmltdHV0b3IKKworKFRob21hcy5SLld5YW50IElJSSwgVmltIDYuMSkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzkuIFZNUyByZWxhdGVkIGNoYW5nZXMJCQkJCSp2bXMtY2hhbmdlcyoKKworVmVyc2lvbiA2LjMgKDIwMDQgTWF5IDEwKQorLSBJbXByb3ZlZCB2bXNfcmVhZCBmdW5jdGlvbgorLSBDVEFHUyB2NS41LjQgaW5jbHVkZWQKKy0gRG9jdW1lbnRhdGlvbiBjb3JyZWN0ZWQgYW5kIHVwZGF0ZWQKKworVmVyc2lvbiA2LjIgKDIwMDMgTWF5IDcpCistIENvcnJlY3RlZCBWTVMgc3lzdGVtIGNhbGwgcmVzdWx0cworLSBMb3cgbGV2ZWwgY2hhcmFjdGVyIGlucHV0IGlzIHJld3JpdHRlbgorLSBDb3JyZWN0aW9uIGluIHRhZyBhbmQgcXVpY2tmaXggaGFuZGxpbmcKKy0gRmlyc3QgR1RLIGJ1aWxkCistIE1ha2UgZmlsZSBjaGFuZ2VzCisgICAgLSBHVEsgZmVhdHVyZSBhZGRlZAorICAgIC0gRGVmaW5lIGZvciBPTERfVk1TCisgICAgLSBPcGVuVk1TIHZlcnNpb24gNi4yIG9yIG9sZGVyCistIERvY3VtZW50YXRpb24gdXBkYXRlZCB3aXRoIEdUSyBmZWF0dXJlcworLSBDVEFHUyB2NS41IGluY2x1ZGVkCistIFZNUyBWSU0gdHV0b3IgY3JlYXRlZAorCitWZXJzaW9uIDYuMSAoMjAwMiBNYXIgMjUpCistIFRDTCBpbml0X3RjbCgpIHByb2JsZW0gZml4ZWQKKy0gQ1RBR1MgdjUuNCBpbmNsdWRlZAorLSBHTlUgdG9vbHMgYmluYXJpZXMgZm9yIE9wZW5WTVMKKy0gTWFrZSBmaWxlIGNoYW5nZXMKKyAgICAtIFBFUkwsIFBZVEhPTiBhbmQgVENMIHN1cHBvcnQgaW1wcm92ZWQKKyAgICAtIEluc3RhbGxWTVMudHh0IGhhcyBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIEhPV1RPIGJ1aWxkCistIFZNUy9Vbml4IGZpbGUgaGFuZGxpbmcgcmV3cml0dGVuCistIE1pbm9yIGNhc3RpbmcgYW5kIGJ1ZyBmaXhlcworCitWZXJzaW9uIDYuMCAoMjAwMSBTZXAgMjgpCistIFVuaXggYW5kIFZNUyBjb2RlIGhhcyBiZWVuIG1lcmdlZAorCS0gc2VwYXJhdGVkICJyZWFsbHkiIFZNUyByZWxhdGVkIGNvZGUKKwktIGluY2x1ZGVkIGFsbCBwb3NzaWJsZSBVbml4IGZ1bmN0aW9uYWxpdHkKKwktIHNpbXBsaWZpZWQgb3IgZGVsZXRlZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcworCS0gbWFrZWZpbGUgTUFLRV9WTVMuTU1TIHJldmlld2VkCistIG1lbnUgY2hhbmdlcyAoZml4ZWQgcHJpbnRpbmcsIENUQUdTIGFuZCBYWEQgdXNhZ2UpCistIGZpeGVkIHZhcmlhYmxlIFJNUyByZWNvcmQgZm9ybWF0IGhhbmRsaW5nIGFub21hbHkKKy0gY29ycmVjdGVkIHN5bnRheCwgZnRwbHVnaW4gZXRjIGZpbGVzIGxvYWQKKy0gY2hhbmdlZCBleHBhbmRfd2lsZGNhcmRzIGFuZCBleHBhbmRwYXRoIGZ1bmN0aW9ucyB0byB3b3JrIG1vcmUgZ2VuZXJhbAorLSBjcmVhdGVkIE9TX1ZNU19GSUxURVIuQ09NIC0gREVDQy0+VkFYQyBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZSBjb252ZXJ0CisgIHNjcmlwdC4KKy0gSW1wcm92ZWQgY29kZSdzIFZBWEMgYW5kIG5ldyBERUNDIGNvbXBpbGVycyBjb21wYXRpYmlsaXR5CistIGNoYW5nZWQgcXVpY2tmaXggcGFyYW1ldGVyczoKKwktIGVycm9ybWVzc2FnZSBmb3JtYXQgdG8gc3VpdGUgREVDQworCS0gc2VhcmNoLCBtYWtlIGFuZCBvdGhlciBjb21tYW5kcyB0byBzdWl0ZSBWTVMgc3lzdGVtCistIHVwZGF0ZWQgYW5kIHJlbmFtZWQgTU1TIG1ha2UgZmlsZXMgZm9yIFZpbSBhbmQgQ1RBR1MuCistIENUQUdTIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBzb3VyY2UgZGlzdHJpYnV0aW9uIG9mIFZpbSBidXQgaXQgd2lsbCByZW1haW4KKyAgaW4gT3BlblZNUyBiaW5hcnkgZGlzdHJpYnV0aW9ucy4KKy0gc2ltcGxpZmllZCBidWlsZC9jb25maWd1cmF0aW9uIHByb2NlZHVyZQorLSBjcmVhdGVkIElOU1RBTEx2bXMudHh0IC0gZGV0YWlsZWQgY29tcGlsaW5nIGluc3RydWN0aW9ucyB1bmRlciBWTVMuCistIHVwZGF0ZWQgdGVzdCBzY3JpcHRzLgorCitWZXJzaW9uIDUuOCAoMjAwMSBKdW4gMSkKKy0gT1NfVk1TLlRYVCB1cGRhdGVkIHdpdGggbmV3IGZlYXR1cmVzLgorLSBvdGhlciBtaW5vciBmaXhlcy4KKy0gZG9jdW1lbnRhdGlvbiB1cGRhdGVkCistIHRoaXMgdmVyc2lvbiBoYWQgYmVlbiB0ZXN0ZWQgbXVjaCBtb3JlIHRoYW4gYW55IG90aGVyIE9wZW5WTVMgdmVyc2lvbgorICBlYXJsaWVyCisKK1ZlcnNpb24gNS43ICgyMDAwIEp1biAyNCkKKy0gTmV3IENUQUdTIHY1LjAgaW4gZGlzdHJpYnV0aW9uCistIERvY3VtZW50YXRpb24gdXBkYXRlZAorCitWZXJzaW9uIDUuNiAoMjAwMCBKYW4gMTcpCistIFZNUyBmaWxlbmFtZSByZWxhdGVkIGNoYW5nZXM6CisJLSB2ZXJzaW9uIGhhbmRsaW5nIChvcGVuIGV2ZXJ5dGhpbmcsIHNhdmUgdG8gbmV3IHZlcnNpb24pCisJLSBjb3JyZWN0IGZpbGUgZXh0ZW5zaW9uIG1hdGNoaW5nIGZvciBzeW50YXggKHZlcnNpb24gcHJvYmxlbSkKKwktIGhhbmRsZSA8LD4gY2hhcmFjdGVycyBhbmQgcGFzc3dvcmRzIGluIGRpcmVjdG9yeSBkZWZpbml0aW9uCisJLSBoYW5kbGUgaW50ZXJub2RlL3JlbW90ZSBpbnZvY2F0aW9uIGFuZCBlZGl0aW5nIHdpdGggcGFzc3dvcmRzCisJLSBPcGVuVk1TIGZpbGVzIHdpbGwgYmUgdHJlYXRlZCBjYXNlIGluc2Vuc2l0aXZlIGZyb20gbm93CisJLSBjb3JyZWN0ZWQgcmVzcG9uc2Ugb2YgZXhwYW5kKCIlOi4iKSBldGMgcGF0aCByZWxhdGVkIGZ1bmN0aW9ucworCShpbiBvbmUgd29yZDogVk1TIGRpcmVjdG9yeSBoYW5kbGluZyBpbnRlcm5hbGx5KQorLSB2ZXJzaW9uIGNvbW1hbmQKKwktIGNvcnJlY3RlZCAoKywtKSBpbmZvcm1hdGlvbiBkYXRhCisJLSBhZGRlZCBjb21waWxlciBhbmQgT1MgdmVyc2lvbgorCS0gYWRkZWQgdXNlciBhbmQgaG9zdCBpbmZvcm1hdGlvbgorCS0gcmVzb2x2aW5nICRWSU0gYW5kICRWSU1SVU5USU1FIGxvZ2ljYWxzCistIFZNUyBwb3J0IGlzIGluIE1BWF9GRUFUIChtYXhpbXVtIGZlYXR1cmVzKSBjbHViIHdpdGggVW5peCwgV2luMzIgYW5kIE9TLzIuCisJLSBlbmFibGVkIGZhcnNpLCByaWdodGxlZnQgZXRjLiBmZWF0dXJlcworCS0gdW5kbyBsZXZlbCByYWlzZWQgdXAgdG8gMTAwMAorLSBVcGRhdGVkIE9TX1ZNUy5NTVMgZmlsZS4KKwktIG1heGltdW0gZmVhdHVyZXMgT04gaXMgZGVmYXVsdAorCS0gVmltIGlzIGNvbXBpbGFibGUgd2l0aCArcGVybCwgK3B5dGhvbiBhbmQgK3RjbCBmZWF0dXJlcy4KKwktIGltcHJvdmVkIE1NSyBjb21wYXRpYmlsaXR5CistIENyZWF0ZWQgTUFLRUZJTEVfVk1TLk1NUywgbWFrZWZpbGUgZm9yIHRlc3RpbmcgVmltIGR1cmluZyBkZXZlbG9wbWVudC4KKy0gRGVmaW5lZCBERUMgdGVybWluYWwgVlQzMjAKKwktIGNvbXBhdGliaWxpdHkgZm9yIFZUMyowLCBWVDIqMCBhbmQgVlQxKjAgLSBBTlNJIHRlcm1pbmFscworCSAgYmFja3dhcmRzLCBidXQgbm90IFZUMzQwIGFuZCBuZXdlciB3aXRoIGNvbG91ciBjYXBhYmlsaXR5LgorCS0gVlQzMjAgaXMgZGVmYXVsdCB0ZXJtaW5hbCBmb3IgT3BlblZNUworCS0gdGhlc2UgbmV3IHRlcm1pbmFscyBhcmUgYWxzbyBmYXN0IHR0eXMgKGRlZmF1bHQgZm9yIE9wZW5WTVMpLgorCS0gYWxsb3dlZCBkZWNfbW91c2UgdHR5bQorLSBVcGRhdGVkIGZpbGVzIHZpbXJjIGFuZCBndmltcmMgd2l0aCBWTVMgc3BlY2lmaWMgc3VnZ2VzdGlvbnMuCistIE9TX1ZNUy5UWFQgdXBkYXRlZCB3aXRoIG5ldyBmZWF0dXJlcy4KKworVmVyc2lvbiA1LjUgKDE5OTkgRGVjIDMpCistIFBvcHVwIG1lbnUgbGluZSBjcmFzaCBjb3JyZWN0ZWQuCistIEhhbmRsZSBmdWxsIGZpbGUgbmFtZXMgd2l0aCB2ZXJzaW9uIG51bWJlcnMuCistIERpcmVjdG9yeSBoYW5kbGluZyAoQ0QgY29tbWFuZCBldGMuKQorLSBDb3JyZWN0ZWQgZmlsZSBuYW1lIGNvbnZlcnNpb24gVk1TIHRvIFVuaXggYW5kIHYudi4KKy0gQ29ycmVjdCByZXNwb25zZSBvZiBleHBhbmQgd2lsZGNhcmRzCistIFJlY292ZXJ5IGlzIHdvcmtpbmcgZnJvbSB0aGlzIHZlcnNpb24gdW5kZXIgVk1TIGFzIHdlbGwuCistIEltcHJvdmVkIHRlcm1pbmFsIGFuZCBzaWduYWwgaGFuZGluZy4KKy0gSW1wcm92ZWQgT1NfVk1TLlRYVAorCitWZXJzaW9uIDUuNCAoMTk5OSBTZXAgOSkKKy0gQ3V0IGFuZCBwYXN0ZSBtaXNtYXRjaCBjb3JyZWN0ZWQuCistIE1vdGlmIGRpcmVjdG9yaWVzIGR1cmluZyBvcGVuIGFuZCBzYXZlIGFyZSBjb3JyZWN0ZWQuCisKK1ZlcnNpb24gNS4zICgxOTk4IE9jdCAxMikKKy0gTWlub3IgY2hhbmdlcyBpbiB0aGUgY29kZQorLSBTdGFuZGFyZCBkaXN0cmlidXRpb24gd2l0aCArR1VJIG9wdGlvbgorCitWZXJzaW9uIDUuMSAoMTk5OCBBcHIgMjEpCistIFN5bnRheCBhbmQgREVDIEMgY2hhbmdlcyBpbiB0aGUgY29kZQorLSBGaXhpbmcgcHJvYmxlbXMgd2l0aCB0aGUgL2RvYyBzdWJkaXJlY3RvcnkKKy0gSW1wcm92ZSBPU19WTVMuTU1TCisKK1ZlcnNpb24gNC41ICgxOTk2IERlYyAxNikKKy0gRmlyc3QgVk1TIHBvcnQgYnkgSGVuayBFbGJlcnMgPGhlbmtAeHM0YWxsLm5sPgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMTAuIEF1dGhvcnMJCQkJCQkqdm1zLWF1dGhvcnMqCisKK09wZW5WTVMgZG9jdW1lbnRhdGlvbiBhbmQgZXhlY3V0YWJsZXMgYXJlIG1haW50YWluZWQgYnk6Citab2x0YW4gQXJwYWRmZnkgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+CisKK1RoaXMgZG9jdW1lbnQgdXNlcyBwYXJ0cyBhbmQgcmVtYXJrcyBmcm9tIGVhcmxpZXIgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzCitvZiBPU19WTVMuVFhUOgorCUNoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8Y2VjQGdyeXBob24uZ3NmYy5uYXNhLmdvdj4KKwlCcnVjZSBIdW5zYWtlciA8Qk5IdW5zYWtlckBjaHEuYnl1LmVkdT4KKwlTYW5kb3IgS29wYW55aSA8c2FuZG9yLmtvcGFueWlAbWFpbGJveC5odT4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29zX3dpbjMyLnR4dCBiL3J1bnRpbWUvZG9jL29zX3dpbjMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWQ3MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvb3Nfd2luMzIudHh0CkBAIC0wLDAgKzEsMzE5IEBACisqb3Nfd2luMzIudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDAxCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEdlb3JnZSBSZWlsbHkKKworCisJCQkJCQkqd2luMzIqICpXaW4zMiogKk1TLVdpbmRvd3MqCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBpZGlvc3luY3Jhc2llcyBvZiB0aGUgV2luMzIgdmVyc2lvbiBvZiBWaW0uCisKK1RoZSBXaW4zMiB2ZXJzaW9uIG9mIFZpbSB3b3JrcyBvbiBib3RoIFdpbmRvd3MgTlQgYW5kIFdpbmRvd3MgOTUuICBUaGVyZSBhcmUKK2JvdGggY29uc29sZSBhbmQgR1VJIHZlcnNpb25zLiAgVGhlcmUgaXMgR1VJIHZlcnNpb24gZm9yIHVzZSBpbiB0aGUgV2luMzJzCitzdWJzeXN0ZW0gaW4gV2luZG93cyAzLjFbMV0uICBZb3UgY2FuIGFsc28gdXNlIHRoZSAzMi1iaXQgRE9TIHZlcnNpb24gb2YgVmltCitpbnN0ZWFkLiAgU2VlIHxvc19tc2Rvcy50eHR8LgorCisxLiBLbm93biBwcm9ibGVtcwkJfHdpbjMyLXByb2JsZW1zfAorMi4gU3RhcnR1cAkJCXx3aW4zMi1zdGFydHVwfAorMy4gUmVzdG9yZSBzY3JlZW4gY29udGVudHMJfHdpbjMyLXJlc3RvcmV8Cis0LiBVc2luZyB0aGUgbW91c2UJCXx3aW4zMi1tb3VzZXwKKzUuIFJ1bm5pbmcgdW5kZXIgV2luZG93cyAzLjEJfHdpbjMyLXdpbjMuMXwKKzYuIFdpbjMyIG1pbmkgRkFRCQl8d2luMzItZmFxfAorCitBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBhIG51bWJlciBvZiBjb21tb24gV2luMzIgYW5kIERPUyBpdGVtczoKK0ZpbGUgbG9jYXRpb25zCQkJfGRvcy1sb2NhdGlvbnN8CitVc2luZyBiYWNrc2xhc2hlcwkJfGRvcy1iYWNrc2xhc2h8CitTdGFuZGFyZCBtYXBwaW5ncwkJfGRvcy1zdGFuZGFyZC1tYXBwaW5nc3wKK1NjcmVlbiBvdXRwdXQgYW5kIGNvbG9ycwl8ZG9zLWNvbG9yc3wKK0ZpbGUgZm9ybWF0cwkJCXxkb3MtZmlsZS1mb3JtYXRzfAorOmNkIGNvbW1hbmQJCQl8ZG9zLTpjZHwKK0ludGVycnVwdGluZwkJCXxkb3MtQ1RSTC1CcmVha3wKK1RlbXAgZmlsZXMJCQl8ZG9zLXRlbXAtZmlsZXN8CitTaGVsbCBvcHRpb24gZGVmYXVsdAkJfGRvcy1zaGVsbHwKKworV2luMzIgR1VJCQkJfGd1aS13MzJ8CisKK0NyZWRpdHM6CitUaGUgV2luMzIgdmVyc2lvbiB3YXMgd3JpdHRlbiBieSBHZW9yZ2UgVi4gUmVpbGx5IDxnZW9yZ2VAcmVpbGx5Lm9yZz4uCitUaGUgb3JpZ2luYWwgV2luZG93cyBOVCBwb3J0IHdhcyBkb25lIGJ5IFJvZ2VyIEtub2JiZSA8Um9nZXJLQHdvbmRlcndhcmUuY29tPi4KK1RoZSBHVUkgdmVyc2lvbiB3YXMgbWFkZSBieSBHZW9yZ2UgVi4gUmVpbGx5IGFuZCBSb2JlcnQgV2ViYi4KKworRm9yIGNvbXBpbGluZyBzZWUgInNyYy9JTlNUQUxMLnBjIi4JCQkqd2luMzItY29tcGlsaW5nKgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEtub3duIHByb2JsZW1zCQkJCSp3aW5kb3dzOTUqICp3aW4zMi1wcm9ibGVtcyoKKworVGhlcmUgYXJlIGEgZmV3IGtub3duIHByb2JsZW1zIHdpdGggcnVubmluZyBpbiBhIGNvbnNvbGUgb24gV2luZG93cyA5NS4gIEFzCitmYXIgYXMgd2Uga25vdywgdGhpcyBpcyB0aGUgc2FtZSBpbiBXaW5kb3dzIDk4IGFuZCBXaW5kb3dzIE1FLgorCitDb21tZW50cyBmcm9tIHNvbWVib2R5IHdvcmtpbmcgYXQgTWljcm9zb2Z0OiAiV2luOTUgY29uc29sZSBzdXBwb3J0IGhhcyBhbHdheXMKK2JlZW4gYW5kIHdpbGwgYWx3YXlzIGJlIGZsYWt5Ii4KKzEuICBEZWFkIGtleSBzdXBwb3J0IGRvZXNuJ3Qgd29yay4KKzIuICBSZXNpemluZyB0aGUgd2luZG93IHdpdGggIjpzZXQgY29sdW1ucz1ubiBsaW5lcz1ubiIgd29ya3MsIGJ1dCBleGVjdXRpbmcKKyAgICBleHRlcm5hbCBjb21tYW5kcyBNQVkgQ0FVU0UgVEhFIFNZU1RFTSBUTyBIQU5HIE9SIENSQVNILgorMy4gIFNjcmVlbiB1cGRhdGluZyBpcyBzbG93LCB1bmxlc3MgeW91IGNoYW5nZSAnY29sdW1ucycgb3IgJ2xpbmVzJyB0byBhCisgICAgbm9uLURPUyB2YWx1ZS4gIEJ1dCB0aGVuIHRoZSBzZWNvbmQgcHJvYmxlbSBhcHBsaWVzIQorCitJZiB0aGlzIGJvdGhlcnMgeW91LCB1c2UgdGhlIDMyIGJpdCBNUy1ET1MgdmVyc2lvbiBvciB0aGUgV2luMzIgR1VJIHZlcnNpb24uCisKK1doZW4gZG9pbmcgZmlsZSBuYW1lIGNvbXBsZXRpb24sIFZpbSBhbHNvIGZpbmRzIG1hdGNoZXMgZm9yIHRoZSBzaG9ydCBmaWxlCituYW1lLiAgQnV0IFZpbSB3aWxsIHN0aWxsIGZpbmQgYW5kIHVzZSB0aGUgY29ycmVzcG9uZGluZyBsb25nIGZpbGUgbmFtZS4gIEZvcgorZXhhbXBsZSwgaWYgeW91IGhhdmUgdGhlIGxvbmcgZmlsZSBuYW1lICJ0aGlzX2lzX2FfdGVzdCIgd2l0aCB0aGUgc2hvcnQgZmlsZQorbmFtZSAidGhpc19pfjEiLCB0aGUgY29tbWFuZCAiOmUgKjEiIHdpbGwgc3RhcnQgZWRpdGluZyAidGhpc19pc19hX3Rlc3QiLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFN0YXJ0dXAJCQkJCQkqd2luMzItc3RhcnR1cCoKKworQ3VycmVudCBkaXJlY3RvcnkJCQkJCSp3aW4zMi1jdXJkaXIqCisKK0lmIFZpbSBpcyBzdGFydGVkIHdpdGggYSBzaW5nbGUgZmlsZSBuYW1lIGFyZ3VtZW50LCBhbmQgaXQgaGFzIGEgZnVsbCBwYXRoCisoc3RhcnRzIHdpdGggIng6XCIpLCBWaW0gYXNzdW1lcyBpdCB3YXMgc3RhcnRlZCBmcm9tIHRoZSBmaWxlIGV4cGxvcmVyIGFuZAord2lsbCBzZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRvIHdoZXJlIHRoYXQgZmlsZSBpcy4gIFRvIGF2b2lkIHRoaXMgd2hlbgordHlwaW5nIGEgY29tbWFuZCB0byBzdGFydCBWaW0sIHVzZSBhIGZvcndhcmQgc2xhc2ggaW5zdGVhZCBvZiBhIGJhY2tzbGFzaC4KK0V4YW1wbGU6ID4KKworCXZpbSBjOlx0ZXh0XGZpbGVzXGZvby50eHQKKworV2lsbCBjaGFuZ2UgdG8gdGhlICJDOlx0ZXh0XGZpbGVzIiBkaXJlY3RvcnkuID4KKworCXZpbSBjOi90ZXh0XGZpbGVzXGZvby50eHQKKworV2lsbCB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisKK1Rlcm0gb3B0aW9uCQkJCQkJKndpbjMyLXRlcm0qCisKK1RoZSBvbmx5IGtpbmQgb2YgdGVybWluYWwgdHlwZSB0aGF0IHRoZSBXaW4zMiB2ZXJzaW9uIG9mIFZpbSB1bmRlcnN0YW5kcyBpcworIndpbjMyIiwgd2hpY2ggaXMgYnVpbHQtaW4uICBJZiB5b3Ugc2V0ICd0ZXJtJyB0byBhbnl0aGluZyBlbHNlLCB5b3Ugd2lsbAorcHJvYmFibHkgZ2V0IHZlcnkgc3RyYW5nZSBiZWhhdmlvciBmcm9tIFZpbS4gIFRoZXJlZm9yZSBWaW0gZG9lcyBub3Qgb2J0YWluCit0aGUgZGVmYXVsdCB2YWx1ZSBvZiAndGVybScgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIlRFUk0iLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFJlc3RvcmUgc2NyZWVuIGNvbnRlbnRzCQkJCSp3aW4zMi1yZXN0b3JlKgorCitXaGVuICdyZXN0b3Jlc2NyZWVuJyBpcyBzZXQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgVmltIHdpbGwgcmVzdG9yZSB0aGUKK29yaWdpbmFsIGNvbnRlbnRzIG9mIHRoZSBjb25zb2xlIHdoZW4gZXhpdGluZyBvciB3aGVuIGV4ZWN1dGluZyBleHRlcm5hbAorY29tbWFuZHMuICBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLCB1c2UgIjpzZXQgbm9ycyIuCXwncmVzdG9yZXNjcmVlbid8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVXNpbmcgdGhlIG1vdXNlCQkJCQkqd2luMzItbW91c2UqCisKK1RoZSBXaW4zMiB2ZXJzaW9uIG9mIFZpbSBzdXBwb3J0cyB1c2luZyB0aGUgbW91c2UuICBJZiB5b3UgaGF2ZSBhIHR3by1idXR0b24KK21vdXNlLCB0aGUgbWlkZGxlIGJ1dHRvbiBjYW4gYmUgZW11bGF0ZWQgYnkgcHJlc3NpbmcgYm90aCBsZWZ0IGFuZCByaWdodAorYnV0dG9ucyBzaW11bHRhbmVvdXNseSAtIGJ1dCBub3RlIHRoYXQgaW4gdGhlIFdpbjMyIEdVSSwgaWYgeW91IGhhdmUgdGhlIHJpZ2h0Cittb3VzZSBidXR0b24gcG9wLXVwIG1lbnUgZW5hYmxlZCAoc2VlICdtb3VzZScpLCB5b3Ugc2hvdWxkIGVyciBvbiB0aGUgc2lkZSBvZgorcHJlc3NpbmcgdGhlIGxlZnQgYnV0dG9uIGZpcnN0LgkJCQl8bW91c2UtdXNpbmd8CisKK1doZW4gdGhlIG1vdXNlIGRvZXNuJ3Qgd29yaywgdHJ5IGRpc2FibGluZyB0aGUgIlF1aWNrIEVkaXQgTW9kZSIgZmVhdHVyZSBvZgordGhlIGNvbnNvbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gUnVubmluZyB1bmRlciBXaW5kb3dzIDMuMQkJCQkqd2luMzItd2luMy4xKgorCisJCQkJCQkqd2luMzJzKiAqd2luZG93cy0zLjEqCitUaGVyZSBpcyBhIHNwZWNpYWwgdmVyc2lvbiBvZiBHdmltIHRoYXQgcnVucyB1bmRlciBXaW5kb3dzIDMuMSBhbmQgMy4xMS4gIFlvdQorbmVlZCB0aGUgZ3ZpbS5leGUgdGhhdCB3YXMgY29tcGlsZWQgd2l0aCBWaXN1YWwgQysrIDQuMS4KKworVG8gcnVuIHRoZSBXaW4zMiB2ZXJzaW9uIHVuZGVyIFdpbmRvd3MgMy4xLCB5b3UgbmVlZCB0byBpbnN0YWxsIFdpbjMycy4gIFlvdQorbWlnaHQgaGF2ZSBpdCBhbHJlYWR5IGZyb20gYW5vdGhlciBXaW4zMiBhcHBsaWNhdGlvbiB3aGljaCB5b3UgaGF2ZSBpbnN0YWxsZWQuCitJZiBWaW0gZG9lc24ndCBzZWVtIHRvIGJlIHJ1bm5pbmcgcHJvcGVybHksIGdldCB0aGUgbGF0ZXN0IHZlcnNpb246IDEuMzBjLgorWW91IGNhbiBmaW5kIGl0IGF0OgorCisJaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9kb3dubG9hZC9zdXBwb3J0L21zbGZpbGVzL3B3MTExOC5leGUKKworKE1pY3Jvc29mdCBtb3ZlZCBpdCBhZ2Fpbiwgd2UgZG9uJ3Qga25vdyB3aGVyZSBpdCBpcyBub3cgOi0oICkuCisKK1RoZSByZWFzb24gZm9yIGhhdmluZyB0d28gdmVyc2lvbnMgb2YgZ3ZpbS5leGUgaXMgdGhhdCB0aGUgV2luMzJzIHZlcnNpb24gd2FzCitjb21waWxlZCB3aXRoIFZDKysgNC4xLiAgVGhpcyBpcyB0aGUgbGFzdCB2ZXJzaW9uIG9mIFZDKysgdGhhdCBzdXBwb3J0cyBXaW4zMnMKK3Byb2dyYW1zLiAgVkMrKyA1LjAgaXMgYmV0dGVyLCBzbyB0aGF0IG9uZSB3YXMgdXNlZCBmb3IgdGhlIFdpbjMyIHZlcnNpb24uCitBcGFydCBmcm9tIHRoYXQsIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcHJvZ3JhbXMuICBJZiB5b3UgYXJlIGluIGEKK21peGVkIGVudmlyb25tZW50LCB5b3UgY2FuIHVzZSB0aGUgZ3ZpbS5leGUgZm9yIFdpbjMycyBvbiBib3RoLgorCitUaGUgV2luMzJzIHZlcnNpb24gd29ya3MgdGhlIHNhbWUgd2F5IGFzIHRoZSBXaW4zMiB2ZXJzaW9uIHVuZGVyIDk1L05ULiAgV2hlbgorcnVubmluZyB1bmRlciBXaW4zMnMgdGhlIGZvbGxvd2luZyBkaWZmZXJlbmNlcyBhcHBseToKKy0gWW91IGNhbm5vdCB1c2UgbG9uZyBmaWxlIG5hbWVzLCBiZWNhdXNlIFdpbmRvd3MgMy4xIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIQorLSBXaGVuIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kLCBpdCBkb2Vzbid0IHJldHVybiBhbiBleGl0IGNvZGUuICBBZnRlcgorICBkb2luZyAiOm1ha2UiIHlvdSBoYXZlIHRvIGRvICI6Y24iIHlvdXJzZWxmLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFdpbjMyIG1pbmkgRkFRCQkJCQkqd2luMzItZmFxKgorCitRLiBXaHkgZG9lcyB0aGUgV2luMzIgdmVyc2lvbiBvZiBWaW0gdXBkYXRlIHRoZSBzY3JlZW4gc28gc2xvd2x5IG9uIFdpbmRvd3MgOTU/CitBLiBUaGUgc3VwcG9ydCBmb3IgV2luMzIgY29uc29sZSBtb2RlIGFwcGxpY2F0aW9ucyBpcyB2ZXJ5IGJ1Z2d5IGluIFdpbjk1LgorICAgRm9yIHNvbWUgdW5rbm93biByZWFzb24sIHRoZSBzY3JlZW4gdXBkYXRlcyB2ZXJ5IHNsb3dseSB3aGVuIFZpbSBpcyBydW4gYXQKKyAgIG9uZSBvZiB0aGUgc3RhbmRhcmQgcmVzb2x1dGlvbnMgKDgweDI1LCA4MHg0Mywgb3IgODB4NTApIGFuZCB0aGUgMTYtYml0IERPUworICAgdmVyc2lvbiB1cGRhdGVzIHRoZSBzY3JlZW4gbXVjaCBtb3JlIHF1aWNrbHkgdGhhbiB0aGUgV2luMzIgdmVyc2lvbi4KKyAgIEhvd2V2ZXIsIGlmIHRoZSBzY3JlZW4gaXMgc2V0IHRvIHNvbWUgb3RoZXIgcmVzb2x1dGlvbiwgc3VjaCBhcyBieSAiOnNldAorICAgY29sdW1ucz0xMDAiIG9yICI6c2V0IGxpbmVzPTQwIiwgc2NyZWVuIHVwZGF0aW5nIGJlY29tZXMgYWJvdXQgYXMgZmFzdCBhcworICAgaXQgaXMgd2l0aCB0aGUgMTYtYml0IHZlcnNpb24uCisKKyAgIFdBUk5JTkc6IENoYW5naW5nICdjb2x1bW5zJyBtYXkgbWFrZSBXaW5kb3dzIDk1IGNyYXNoIHdoaWxlIHVwZGF0aW5nIHRoZQorICAgd2luZG93IChjb21wbGFpbnRzIC0tPiBNaWNyb3NvZnQpLiAgU2luY2UgdGhpcyBtb3N0bHkgd29ya3MsIHRoaXMgaGFzIG5vdAorICAgYmVlbiBkaXNhYmxlZCwgYnV0IGJlIGNhcmVmdWwgd2l0aCBjaGFuZ2luZyAnY29sdW1ucycuCisKKyAgIENoYW5naW5nIHRoZSBzY3JlZW4gcmVzb2x1dGlvbiBtYWtlcyB1cGRhdGVzIGZhc3RlciwgYnV0IGl0IGJyaW5ncworICAgYWRkaXRpb25hbCBwcm9ibGVtcy4gIEV4dGVybmFsIGNvbW1hbmRzIChlLmcuLCAiOiFkaXIiKSBjYW4gY2F1c2UgVmltIHRvCisgICBmcmVlemUgd2hlbiB0aGUgc2NyZWVuIGlzIHNldCB0byBhIG5vbi1zdGFuZGFyZCByZXNvbHV0aW9uLCBwYXJ0aWN1bGFybHkKKyAgIHdoZW4gJ2NvbHVtbnMnIGlzIG5vdCBlcXVhbCB0byA4MC4gIEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgVmltIHRvIHJlbGlhYmx5CisgICBzZXQgdGhlIHNjcmVlbiByZXNvbHV0aW9uIGJhY2sgdG8gdGhlIHZhbHVlIGl0IGhhZCB1cG9uIHN0YXJ0dXAgYmVmb3JlCisgICBydW5uaW5nIGV4dGVybmFsIGNvbW1hbmRzLCBzbyBpZiB5b3UgY2hhbmdlIHRoZSBudW1iZXIgb2YgJ2xpbmVzJyBvcgorICAgJ2NvbHVtbnMnLCBiZSB2ZXJ5LCB2ZXJ5IGNhcmVmdWwuICBJbiBmYWN0LCBWaW0gd2lsbCBub3QgYWxsb3cgeW91IHRvCisgICBleGVjdXRlIGV4dGVybmFsIGNvbW1hbmRzIHdoZW4gJ2NvbHVtbnMnIGlzIG5vdCBlcXVhbCB0byA4MCwgYmVjYXVzZSBpdCBpcworICAgc28gbGlrZWx5IHRvIGZyZWV6ZSB1cCBhZnRlcndhcmRzLgorCisgICBOb25lIG9mIHRoZSBhYm92ZSBhcHBsaWVzIG9uIFdpbmRvd3MgTlQuICBTY3JlZW4gdXBkYXRlcyBhcmUgZmFzdCwgbm8KKyAgIG1hdHRlciBob3cgbWFueSAnbGluZXMnIG9yICdjb2x1bW5zJyB0aGUgd2luZG93IGhhcywgYW5kIGV4dGVybmFsIGNvbW1hbmRzCisgICBkbyBub3QgY2F1c2UgVmltIHRvIGZyZWV6ZS4KKworUS4gU28gaWYgdGhlIFdpbjMyIHZlcnNpb24gdXBkYXRlcyB0aGUgc2NyZWVuIHNvIHNsb3dseSBvbiBXaW5kb3dzIDk1IGFuZCB0aGUKKyAgIDE2LWJpdCBET1MgdmVyc2lvbiB1cGRhdGVzIHRoZSBzY3JlZW4gcXVpY2tseSwgd2h5IHdvdWxkIEkgd2FudCB0byBydW4gdGhlCisgICBXaW4zMiB2ZXJzaW9uPworQS4gRmlyc3RseSwgdGhlIFdpbjMyIHZlcnNpb24gaXNuJ3QgdGhhdCBzbG93LCBlc3BlY2lhbGx5IHdoZW4gdGhlIHNjcmVlbiBpcworICAgc2V0IHRvIHNvbWUgbm9uLXN0YW5kYXJkIG51bWJlciBvZiAnbGluZXMnIG9yICdjb2x1bW5zJy4gIFNlY29uZGx5LCB0aGUKKyAgIDE2LWJpdCBET1MgdmVyc2lvbiBoYXMgc29tZSBzZXZlcmUgbGltaXRhdGlvbnM6IEl0IGNhbid0IGRvIGJpZyBjaGFuZ2VzIGFuZAorICAgaXQgZG9lc24ndCBrbm93IGFib3V0IGxvbmcgZmlsZSBuYW1lcy4gIFRoZSBXaW4zMiB2ZXJzaW9uIGRvZXNuJ3QgaGF2ZSB0aGVzZQorICAgbGltaXRhdGlvbnMgYW5kIGl0J3MgZmFzdGVyIG92ZXJhbGwgKHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSAzMi1iaXQgREpHUFAKKyAgIERPUyB2ZXJzaW9uIG9mIFZpbSkuICBUaGUgV2luMzIgdmVyc2lvbiBpcyBzbWFydGVyIGFib3V0IGhhbmRsaW5nIHRoZQorICAgc2NyZWVuLCB0aGUgbW91c2UsIGFuZCB0aGUga2V5Ym9hcmQgdGhhbiB0aGUgREpHUFAgdmVyc2lvbiBpcy4KKworUS4gQW5kIHdoYXQgYWJvdXQgdGhlIDE2LWJpdCBET1MgdmVyc2lvbiB2ZXJzdXMgdGhlIFdpbjMyIHZlcnNpb24gb24gTlQ/CitBLiBUaGVyZSBhcmUgbm8gZ29vZCByZWFzb25zIHRvIHJ1biB0aGUgMTYtYml0IERPUyB2ZXJzaW9uIG9uIE5ULiAgVGhlIFdpbjMyCisgICB2ZXJzaW9uIHVwZGF0ZXMgdGhlIHNjcmVlbiBqdXN0IGFzIGZhc3QgYXMgdGhlIDE2LWJpdCB2ZXJzaW9uIGRvZXMgd2hlbgorICAgcnVubmluZyBvbiBOVC4gIEFsbCBvZiB0aGUgYWJvdmUgZGlzYWR2YW50YWdlcyBhcHBseS4gIEZpbmFsbHksIERPUworICAgYXBwbGljYXRpb25zIGNhbiB0YWtlIGEgbG9uZyB0aW1lIHRvIHN0YXJ0IHVwIGFuZCB3aWxsIHJ1biBtb3JlIHNsb3dseS4gIE9uCisgICBub24tSW50ZWwgTlQgcGxhdGZvcm1zLCB0aGUgRE9TIHZlcnNpb24gaXMgYWxtb3N0IHVudXNhYmx5IHNsb3csIGJlY2F1c2UgaXQKKyAgIHJ1bnMgb24gdG9wIG9mIGFuIDgweDg2IGVtdWxhdG9yLgorCitRLiBIb3cgZG8gSSBjaGFuZ2UgdGhlIGZvbnQ/CitBLiBJbiB0aGUgR1VJIHZlcnNpb24sIHlvdSBjYW4gdXNlIHRoZSAnZ3VpZm9udCcgb3B0aW9uLgorICAgSW4gdGhlIGNvbnNvbGUgdmVyc2lvbiwgeW91IG5lZWQgdG8gc2V0IHRoZSBmb250IG9mIHRoZSBjb25zb2xlIGl0c2VsZi4KKyAgIFlvdSBjYW5ub3QgZG8gdGhpcyBmcm9tIHdpdGhpbiBWaW0uCisKK1EuIFdoZW4gSSBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGNvbnNvbGUgd2luZG93IHdpdGggJzpzZXQgbGluZXM9eHgnIG9yCisgICBzaW1pbGFyLCB0aGUgZm9udCBjaGFuZ2VzISAoV2luOTUpCitBLiBZb3UgaGF2ZSB0aGUgY29uc29sZSBmb250IHNldCB0byAnQXV0bycgaW4gVmltJ3MgKG9yIHlvdXIgTVMtRE9TIHByb21wdCdzKQorICAgcHJvcGVydGllcy4gVGhpcyBtYWtlcyBXOTUgZ3Vlc3MgKGJhZGx5ISkgd2hhdCBmb250IGlzIGJlc3QuIFNldCBhbiBleHBsaWNpdAorICAgZm9udCBpbnN0ZWFkLgorCitRLiBXaHkgY2FuJ3QgSSBwYXN0ZSBpbnRvIFZpbSB3aGVuIHJ1bm5pbmcgV2luZG93cyA5NT8KK0EuIEluIHRoZSBwcm9wZXJ0aWVzIGRpYWxvZyBib3ggZm9yIHRoZSBNUy1ET1Mgd2luZG93LCBnbyB0byAiTVMtRE9TCisgICBQcm9tcHQvTWlzYy9GYXN0IHBhc3RpbmciIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCBpcyBOT1QgY2hlY2tlZC4gIFlvdSBzaG91bGQKKyAgIGFsc28gZG8gIjpzZXQgcGFzdGUiIGluIFZpbSB0byBhdm9pZCB1bmV4cGVjdGVkIGVmZmVjdHMuCXwncGFzdGUnfAorCitRLiBIb3cgZG8gSSB0eXBlIGRlYWQga2V5cyBvbiBXaW5kb3dzIDk1LCBpbiB0aGUgY29uc29sZSB2ZXJzaW9uPworICAgKEEgZGVhZCBrZXkgaXMgYW4gYWNjZW50IGtleSwgc3VjaCBhcyBhY3V0ZSwgZ3JhdmUsIG9yIHVtbGF1dCwgdGhhdCBkb2Vzbid0CisgICBwcm9kdWNlIGEgY2hhcmFjdGVyIGJ5IGl0c2VsZiwgYnV0IHdoZW4gZm9sbG93ZWQgYnkgYW5vdGhlciBrZXksIHByb2R1Y2VzCisgICBhbiBhY2NlbnRlZCBjaGFyYWN0ZXIsIHN1Y2ggYXMgYS1hY3V0ZSwgZS1ncmF2ZSwgdS11bWxhdXQsIG4tdGlsZGUsIGFuZCBzbworICAgb24uICBWZXJ5IHVzZWZ1bCBmb3IgbW9zdCBFdXJvcGVhbiBsYW5ndWFnZXMuICBFbmdsaXNoLWxhbmd1YWdlIGtleWJvYXJkCisgICBsYXlvdXRzIGRvbid0IHVzZSBkZWFkIGtleXMsIGFzIGZhciBhcyB3ZSBrbm93LikKK0EuIFlvdSBkb24ndC4gIFRoZSBjb25zb2xlIG1vZGUgaW5wdXQgcm91dGluZXMgc2ltcGx5IGRvIG5vdCB3b3JrIGNvcnJlY3RseSBpbgorICAgV2luZG93cyA5NSwgYW5kIEkgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIHdvcmsgYXJvdW5kIHRoZW0uICBJbiB0aGUgd29yZHMKKyAgIG9mIGEgc2VuaW9yIGRldmVsb3BlciBhdCBNaWNyb3NvZnQ6CisJV2luOTUgY29uc29sZSBzdXBwb3J0IGhhcyBhbHdheXMgYmVlbiBhbmQgd2lsbCBhbHdheXMgYmUgZmxha3kuCisKKwlUaGUgZmxha2luZXNzIGlzIHVuYXZvaWRhYmxlIGJlY2F1c2Ugd2UgYXJlIHN0dWNrIGJldHdlZW4gdGhlIHdvcmxkIG9mCisJTVMtRE9TIGtleWJvYXJkIFRTUnMgbGlrZSBLRVlCICh3aGljaCB3YW50cyB0byBjb29rIHRoZSBkYXRhOworCWltcG9ydGFudCBmb3IgaW50ZXJuYXRpb25hbCkgYW5kIHRoZSB3b3JsZCBvZiBXaW4zMi4KKworCVNvIGtleXMgdGhhdCBkb24ndCAiZXhpc3QiIGluIE1TLURPUyBsYW5kIChsaWtlIGRlYWQga2V5cykgaGF2ZSBhCisJdmVyeSB0ZW51b3VzIGV4aXN0ZW5jZSBpbiBXaW4zMiBjb25zb2xlIGxhbmQuICBLZXlzIHRoYXQgYWN0CisJZGlmZmVyZW50bHkgYmV0d2VlbiBNUy1ET1MgbGFuZCBhbmQgV2luMzIgY29uc29sZSBsYW5kIChsaWtlCisJY2Fwc2xvY2spIHdpbGwgYWN0IGZsYWt5LgorCisJRG9uJ3QgZXZlbiBfbWVudGlvbl8gdGhlIHByb2JsZW1zIHdpdGggbXVsdGlwbGUgbGFuZ3VhZ2Uga2V5Ym9hcmQKKwlsYXlvdXRzLi4uCisKKyAgIFlvdSBtYXkgYmUgYWJsZSB0byBmYXNoaW9uIHNvbWUgc29ydCBvZiB3b3JrYXJvdW5kIHdpdGggdGhlIGRpZ3JhcGhzCisgICBtZWNoYW5pc20uCQkJCQkJCXxkaWdyYXBoc3wKKworICAgVGhlIGJlc3Qgc29sdXRpb24gaXMgdG8gdXNlIHRoZSBXaW4zMiBHVUkgdmVyc2lvbiBndmltLmV4ZS4gIEFsdGVybmF0aXZlbHksCisgICB5b3UgY2FuIHRyeSBvbmUgb2YgdGhlIERPUyB2ZXJzaW9ucyBvZiBWaW0gd2hlcmUgZGVhZCBrZXlzIHJlcG9ydGVkbHkgZG8KKyAgIHdvcmsuCisKK1EuIEhvdyBkbyBJIHR5cGUgZGVhZCBrZXlzIG9uIFdpbmRvd3MgTlQ/CitBLiBEZWFkIGtleXMgd29yayBvbiBOVCAzLjUxLiAgSnVzdCB0eXBlIHRoZW0gYXMgeW91IHdvdWxkIGluIGFueSBvdGhlcgorICAgYXBwbGljYXRpb24uCisgICBPbiBOVCA0LjAsIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZhdWx0IGxvY2FsZSAoc2V0IGluIHRoZQorICAgS2V5Ym9hcmQgcGFydCBvZiB0aGUgQ29udHJvbCBQYW5lbCkgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnRseSBhY3RpdmUKKyAgIGxvY2FsZS4gIE90aGVyd2lzZSB0aGUgTlQgY29kZSB3aWxsIGdldCBjb25mdXNlZCBhbmQgY3Jhc2ghICBUaGlzIGlzIGEgTlQKKyAgIDQuMCBwcm9ibGVtLCBub3QgcmVhbGx5IGEgVmltIHByb2JsZW0uCisKK1EuIEknbSB1c2luZyBWaW0gdG8gZWRpdCBhIHN5bWJvbGljYWxseSBsaW5rZWQgZmlsZSBvbiBhIFVuaXggTkZTIGZpbGUgc2VydmVyLgorICAgV2hlbiBJIHdyaXRlIHRoZSBmaWxlLCBWaW0gZG9lcyBub3QgIndyaXRlIHRocm91Z2giIHRoZSBzeW1saW5rLiAgSW5zdGVhZCwKKyAgIGl0IGRlbGV0ZXMgdGhlIHN5bWJvbGljIGxpbmsgYW5kIGNyZWF0ZXMgYSBuZXcgZmlsZSBpbiBpdHMgcGxhY2UuICBXaHk/CitBLiBPbiBVbml4LCBWaW0gaXMgcHJlcGFyZWQgZm9yIGxpbmtzIChzeW1ib2xpYyBvciBoYXJkKS4gIEEgYmFja3VwIGNvcHkgb2YKKyAgIHRoZSBvcmlnaW5hbCBmaWxlIGlzIG1hZGUgYW5kIHRoZW4gdGhlIG9yaWdpbmFsIGZpbGUgaXMgb3ZlcndyaXR0ZW4uICBUaGlzCisgICBhc3N1cmVzIHRoYXQgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGZpbGUgcmVtYWluIHRoZSBzYW1lLiAgT24gbm9uLVVuaXgKKyAgIHN5c3RlbXMsIHRoZSBvcmlnaW5hbCBmaWxlIGlzIHJlbmFtZWQgYW5kIGEgbmV3IGZpbGUgaXMgd3JpdHRlbi4gIE9ubHkgdGhlCisgICBwcm90ZWN0aW9uIGJpdHMgYXJlIHNldCBsaWtlIHRoZSBvcmlnaW5hbCBmaWxlLiAgSG93ZXZlciwgdGhpcyBkb2Vzbid0IHdvcmsKKyAgIHByb3Blcmx5IHdoZW4gd29ya2luZyBvbiBhbiBORlMtbW91bnRlZCBmaWxlIHN5c3RlbSB3aGVyZSBsaW5rcyBhbmQgb3RoZXIKKyAgIHRoaW5ncyBleGlzdC4gIFRoZSBvbmx5IHdheSB0byBmaXggdGhpcyBpbiB0aGUgY3VycmVudCB2ZXJzaW9uIGlzIG5vdAorICAgbWFraW5nIGEgYmFja3VwIGZpbGUsIGJ5ICI6c2V0IG5vYmFja3VwIG5vd3JpdGViYWNrdXAiICAgICB8J3dyaXRlYmFja3VwJ3wKKworUS4gSG93IGRvIEkgZ2V0IHRvIHNlZSB0aGUgb3V0cHV0IG9mICI6bWFrZSIgd2hpbGUgaXQncyBydW5uaW5nPworQS4gQmFzaWNhbGx5IHdoYXQgeW91IG5lZWQgaXMgdG8gcHV0IGEgdGVlIHByb2dyYW0gdGhhdCB3aWxsIGNvcHkgaXRzIGlucHV0CisgICAodGhlIG91dHB1dCBmcm9tIG1ha2UpIHRvIGJvdGggc3Rkb3V0IGFuZCB0byB0aGUgZXJyb3JmaWxlLiAgWW91IGNhbiBmaW5kIGEKKyAgIGNvcHkgb2YgdGVlIChhbmQgYSBudW1iZXIgb2Ygb3RoZXIgR05VIHRvb2xzIHRvb2xzKSBhdAorICAgaHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldCBvciBodHRwOi8vdW54dXRpbHMuc291cmNlZm9yZ2UubmV0CisgICBBbHRlcm5hdGl2ZWx5LCB0cnkgdGhlIG1vcmUgcmVjZW50IEN5Z251cyB2ZXJzaW9uIG9mIHRoZSBHTlUgdG9vbHMgYXQKKyAgIGh0dHA6Ly93d3cuY3lnd2luLmNvbSAgT3RoZXIgVW5peC1zdHlsZSB0b29scyBmb3IgV2luMzIgYXJlIGxpc3RlZCBhdAorICAgaHR0cDovL2RpcmVjdG9yeS5nb29nbGUuY29tL1RvcC9Db21wdXRlcnMvU29mdHdhcmUvT3BlcmF0aW5nX1N5c3RlbXMvVW5peC9XaW4zMi8KKyAgIFdoZW4geW91IGRvIGdldCBhIGNvcHkgb2YgdGVlLCB5b3UnbGwgbmVlZCB0byBhZGQgPgorCTpzZXQgc2hlbGxwaXBlPVx8XCB0ZWUKKzwgIHRvIHlvdXIgX3ZpbXJjLgorCitRLiBJJ20gc3RvcmluZyBmaWxlcyBvbiBhIHJlbW90ZSBtYWNoaW5lIHRoYXQgd29ya3Mgd2l0aCBWaXNpb25GUywgYW5kIGZpbGVzCisgICBkaXNhcHBlYXIhCitBLiBWaXNpb25GUyBjYW4ndCBoYW5kbGUgY2VydGFpbiBkb3QgKC4pIHRocmVlIGxldHRlciBleHRlbnNpb24gZmlsZSBuYW1lcy4KKyAgIFNDTyBkZWNsYXJlcyB0aGlzIGJlaGF2aW9yIHJlcXVpcmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDE2Yml0CisgICBET1MvV2luZG93cyBlbnZpcm9ubWVudHMuICBUaGUgdHdvIGNvbW1hbmRzIGJlbG93IGRlbW9uc3RyYXRlIHRoZSBiZWhhdmlvcjoKKz4KKwllY2hvIEhlbGxvID4gZmlsZS5iYXR+IAorCWRpciA+IGZpbGUuYmF0Cis8CisgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlICJkaXIiIGNvbW1hbmQgdXBkYXRlcyB0aGUgImZpbGUuYmF0fiIgZmlsZSwgaW5zdGVhZAorICAgb2YgY3JlYXRpbmcgYSBuZXcgImZpbGUuYmF0IiBmaWxlLiBUaGlzIHNhbWUgYmVoYXZpb3IgaXMgZXhoaWJpdGVkIGluIFZpbQorICAgd2hlbiBlZGl0aW5nIGFuIGV4aXN0aW5nIGZpbGUgbmFtZWQgImZvby5iYXQiIGJlY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IKKyAgIG9mIFZpbSBpcyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgJ34nIGNoYXJhY3RlciBhcHBlbmRlZCB0byB0aGUKKyAgIG5hbWUuICBXaGVuIHRoZSBmaWxlIGlzIHdyaXR0ZW4sIGl0IHdpbmRzIHVwIGJlaW5nIGRlbGV0ZWQuCisKKyAgIFNvbHV0aW9uOiBBZGQgdGhpcyBjb21tYW5kIHRvIHlvdXIgX3ZpbXJjIGZpbGU6ID4KKwk6c2V0IGJhY2t1cGV4dD0udGVtcG9yYXJ5CisKK1EuIEhvdyBkbyBJIGNoYW5nZSB0aGUgYmxpbmsgcmF0ZSBvZiB0aGUgY3Vyc29yPworQS4gWW91IGNhbid0ISAgVGhpcyBpcyBhIGxpbWl0YXRpb24gb2YgdGhlIE5UIGNvbnNvbGUuICBOVCA1LjAgaXMgcmVwb3J0ZWQgdG8KKyAgIGJlIGFibGUgdG8gc2V0IHRoZSBibGluayByYXRlIGZvciBhbGwgY29uc29sZSB3aW5kb3dzIGF0IHRoZSBzYW1lIHRpbWUuCisKKwkJCQkJCQkqOiFzdGFydCoKK1EuIEhvdyBjYW4gSSBydW4gYW4gZXh0ZXJuYWwgY29tbWFuZCBvciBwcm9ncmFtIGFzeW5jaHJvbm91c2x5PworQS4gV2hlbiB1c2luZyA6ISB0byBydW4gYW4gZXh0ZXJuYWwgY29tbWFuZCwgeW91IGNhbiBydW4gaXQgd2l0aCAic3RhcnQiOiA+CisJOiFzdGFydCB3aW5maWxlLmV4ZTxDUj4KKzwgIFVzaW5nICJzdGFydCIgc3RvcHMgVmltIHN3aXRjaGluZyB0byBhbm90aGVyIHNjcmVlbiwgb3BlbmluZyBhIG5ldyBjb25zb2xlLAorICAgb3Igd2FpdGluZyBmb3IgdGhlIHByb2dyYW0gdG8gY29tcGxldGU7IGl0IGluZGljYXRlcyB0aGF0IHlvdSBhcmUgcnVubmluZyBhCisgICBwcm9ncmFtIHRoYXQgZG9lcyBub3QgZWZmZWN0IHRoZSBmaWxlcyB5b3UgYXJlIGVkaXRpbmcuICBQcm9ncmFtcyBiZWd1bgorICAgd2l0aCA6IXN0YXJ0IGRvIG5vdCBnZXQgcGFzc2VkIFZpbSdzIG9wZW4gZmlsZSBoYW5kbGVzLCB3aGljaCBtZWFucyB0aGV5IGRvCisgICBub3QgaGF2ZSB0byBiZSBjbG9zZWQgYmVmb3JlIFZpbS4KKyAgIFRvIGF2b2lkIHRoaXMgc3BlY2lhbCB0cmVhdG1lbnQsIHVzZSAiOiEgc3RhcnQiLgorCitRLiBJJ20gdXNpbmcgV2luMzJzLCBhbmQgd2hlbiBJIHRyeSB0byBydW4gYW4gZXh0ZXJuYWwgY29tbWFuZCBsaWtlICJtYWtlIiwKKyAgIFZpbSBkb2Vzbid0IHdhaXQgZm9yIGl0IHRvIGZpbmlzaCEgSGVscCEKK0EuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYSAzMi1iaXQgYXBwbGljYXRpb24gKFZpbSkgY2FuJ3QgZ2V0IG5vdGlmaWNhdGlvbiBmcm9tCisgICBXaW5kb3dzIHRoYXQgYSAxNi1iaXQgYXBwbGljYXRpb24gKHlvdXIgRE9TIHNlc3Npb24pIGhhcyBmaW5pc2hlZC4gVmltCisgICBpbmNsdWRlcyBhIHdvcmstYXJvdW5kIGZvciB0aGlzLCBidXQgeW91IG11c3Qgc2V0IHVwIHlvdXIgRE9TIGNvbW1hbmRzIHRvCisgICBydW4gaW4gYSB3aW5kb3csIG5vdCBmdWxsLXNjcmVlbi4gVW5mb3J0dW5hdGVseSB0aGUgZGVmYXVsdCB3aGVuIHlvdQorICAgaW5zdGFsbCBXaW5kb3dzIGlzIGZ1bGwtc2NyZWVuLiBUbyBjaGFuZ2UgdGhpczoKKyAgIDEpIFN0YXJ0IFBJRiBlZGl0b3IgKGluIHRoZSBNYWluIHByb2dyYW0gZ3JvdXApCisgICAyKSBPcGVuIHRoZSBmaWxlICJfREVGQVVMVC5QSUYiIGluIHlvdXIgV2luZG93cyBkaXJlY3RvcnkuCisgICAzKSBDaGFuZ2VzIHRoZSBkaXNwbGF5IG9wdGlvbiBmcm9tICJGdWxsIFNjcmVlbiIgdG8gIldpbmRvd2VkIi4KKyAgIDQpIFNhdmUgYW5kIGV4aXQuCisKKyAgIFRvIHRlc3QsIHN0YXJ0IFZpbSBhbmQgdHlwZSA+CisJOiFkaXIgQzpcPENSPiIuCis8ICBZb3Ugc2hvdWxkIHNlZSBhIERPUyBib3ggd2luZG93IGFwcGVhciBicmllZmx5IHdpdGggdGhlIGRpcmVjdG9yeSBsaXN0aW5nLgorCitRLiBJIHVzZSBWaW0gdW5kZXIgV2luMzJzIGFuZCBOVC4gSW4gTlQsIEkgY2FuIGRlZmluZSB0aGUgY29uc29sZSB0byBkZWZhdWx0IHRvCisgICA1MCBsaW5lcywgc28gdGhhdCBJIGdldCBhIDgweDUwIHNoZWxsIHdoZW4gSSAnOnNoJy4gQ2FuIEkgZG8gdGhlIHNhbWUgaW4KKyAgIFczLjF4LCBvciBhbSBJIHN0dWNrIHdpdGggODB4MjU/CitBLiBFZGl0IFNZU1RFTS5JTkkgYW5kIGFkZCAnU2NyZWVuTGluZXM9NTAnIHRvIHRoZSBbTm9uV2luZG93c0FwcF0gc2VjdGlvbi4gRE9TCisgICBwcm9tcHRzIGFuZCBleHRlcm5hbCBET1MgY29tbWFuZHMgd2lsbCBub3cgcnVuIGluIGEgNTAtbGluZSB3aW5kb3cuCisKKyB2aW06dHc9Nzg6Zm89dGNxMjp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0IGIvcnVudGltZS9kb2MvcGF0dGVybi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNWEwMAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0CkBAIC0wLDAgKzEsMTE0NiBAQAorKnBhdHRlcm4udHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwOQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1BhdHRlcm5zIGFuZCBzZWFyY2ggY29tbWFuZHMJCQkJKnBhdHRlcm4tc2VhcmNoZXMqCisKK1RoZSB2ZXJ5IGJhc2ljcyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvbiB8MDMuOXwgb2YgdGhlIHVzZXIgbWFudWFsLiAgQSBmZXcgbW9yZQorZXhwbGFuYXRpb25zIGFyZSBpbiBjaGFwdGVyIDI3IHx1c3JfMjcudHh0fC4KKworMS4gU2VhcmNoIGNvbW1hbmRzCQl8c2VhcmNoLWNvbW1hbmRzfAorMi4gVGhlIGRlZmluaXRpb24gb2YgYSBwYXR0ZXJuCXxzZWFyY2gtcGF0dGVybnwKKzMuIE1hZ2ljCQkJfC9tYWdpY3wKKzQuIE92ZXJ2aWV3IG9mIHBhdHRlcm4gaXRlbXMJfHBhdHRlcm4tb3ZlcnZpZXd8Cis1LiBNdWx0aSBpdGVtcwkJCXxwYXR0ZXJuLW11bHRpLWl0ZW1zfAorNi4gT3JkaW5hcnkgYXRvbXMJCXxwYXR0ZXJuLWF0b21zfAorNy4gSWdub3JpbmcgY2FzZSBpbiBhIHBhdHRlcm4JfC9pZ25vcmVjYXNlfAorOC4gQ29tcGFyZSB3aXRoIFBlcmwgcGF0dGVybnMJfHBlcmwtcGF0dGVybnN8Cis5LiBIaWdobGlnaHRpbmcgbWF0Y2hlcwkJfG1hdGNoLWhpZ2hsaWdodHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTZWFyY2ggY29tbWFuZHMJCQkJKnNlYXJjaC1jb21tYW5kcyogKkU0ODYqCisKKwkJCQkJCQkqLyoKKy97cGF0dGVybn1bL108Q1I+CVNlYXJjaCBmb3J3YXJkIGZvciB0aGUgW2NvdW50XSd0aCBvY2N1cnJlbmNlIG9mCisJCQl7cGF0dGVybn0gfGV4Y2x1c2l2ZXwuCisKKy97cGF0dGVybn0ve29mZnNldH08Q1I+CVNlYXJjaCBmb3J3YXJkIGZvciB0aGUgW2NvdW50XSd0aCBvY2N1cnJlbmNlIG9mCisJCQl7cGF0dGVybn0gYW5kIGdvIHx7b2Zmc2V0fXwgbGluZXMgdXAgb3IgZG93bi4KKwkJCXxsaW5ld2lzZXwuCisKKwkJCQkJCQkqLzxDUj4qCisvPENSPgkJCVNlYXJjaCBmb3J3YXJkIGZvciB0aGUgW2NvdW50XSd0aCBsYXRlc3QgdXNlZAorCQkJcGF0dGVybiB8bGFzdC1wYXR0ZXJufCB3aXRoIGxhdGVzdCB1c2VkIHx7b2Zmc2V0fXwuCisKKy8ve29mZnNldH08Q1I+CQlTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggbGF0ZXN0IHVzZWQKKwkJCXBhdHRlcm4gfGxhc3QtcGF0dGVybnwgd2l0aCBuZXcgfHtvZmZzZXR9fC4gIElmCisJCQl7b2Zmc2V0fSBpcyBlbXB0eSBubyBvZmZzZXQgaXMgdXNlZC4KKworCQkJCQkJCSo/KgorP3twYXR0ZXJufVs/XTxDUj4JU2VhcmNoIGJhY2t3YXJkIGZvciB0aGUgW2NvdW50XSd0aCBwcmV2aW91cworCQkJb2NjdXJyZW5jZSBvZiB7cGF0dGVybn0gfGV4Y2x1c2l2ZXwuCisKKz97cGF0dGVybn0/e29mZnNldH08Q1I+CVNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggcHJldmlvdXMKKwkJCW9jY3VycmVuY2Ugb2Yge3BhdHRlcm59IGFuZCBnbyB8e29mZnNldH18IGxpbmVzIHVwIG9yCisJCQlkb3duIHxsaW5ld2lzZXwuCisKKwkJCQkJCQkqPzxDUj4qCis/PENSPgkJCVNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggbGF0ZXN0IHVzZWQKKwkJCXBhdHRlcm4gfGxhc3QtcGF0dGVybnwgd2l0aCBsYXRlc3QgdXNlZCB8e29mZnNldH18LgorCis/P3tvZmZzZXR9PENSPgkJU2VhcmNoIGJhY2t3YXJkIGZvciB0aGUgW2NvdW50XSd0aCBsYXRlc3QgdXNlZAorCQkJcGF0dGVybiB8bGFzdC1wYXR0ZXJufCB3aXRoIG5ldyB8e29mZnNldH18LiAgSWYKKwkJCXtvZmZzZXR9IGlzIGVtcHR5IG5vIG9mZnNldCBpcyB1c2VkLgorCisJCQkJCQkJKm4qCituCQkJUmVwZWF0IHRoZSBsYXRlc3QgIi8iIG9yICI/IiBbY291bnRdIHRpbWVzLgorCQkJfGxhc3QtcGF0dGVybnwge1ZpOiBubyBjb3VudH0KKworCQkJCQkJCSpOKgorTgkJCVJlcGVhdCB0aGUgbGF0ZXN0ICIvIiBvciAiPyIgW2NvdW50XSB0aW1lcyBpbgorCQkJb3Bwb3NpdGUgZGlyZWN0aW9uLiB8bGFzdC1wYXR0ZXJufCB7Vmk6IG5vIGNvdW50fQorCisJCQkJCQkJKnN0YXIqICpFMzQ4KiAqRTM0OSoKKyoJCQlTZWFyY2ggZm9yd2FyZCBmb3IgdGhlIFtjb3VudF0ndGggb2NjdXJyZW5jZSBvZiB0aGUKKwkJCXdvcmQgbmVhcmVzdCB0byB0aGUgY3Vyc29yLiAgVGhlIHdvcmQgdXNlZCBmb3IgdGhlCisJCQlzZWFyY2ggaXMgdGhlIGZpcnN0IG9mOgorCQkJCTEuIHRoZSBrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3IgfCdpc2tleXdvcmQnfAorCQkJCTIuIHRoZSBmaXJzdCBrZXl3b3JkIGFmdGVyIHRoZSBjdXJzb3IsIGluIHRoZQorCQkJCSAgIGN1cnJlbnQgbGluZQorCQkJCTMuIHRoZSBub24tYmxhbmsgd29yZCB1bmRlciB0aGUgY3Vyc29yCisJCQkJNC4gdGhlIGZpcnN0IG5vbi1ibGFuayB3b3JkIGFmdGVyIHRoZSBjdXJzb3IsCisJCQkJICAgaW4gdGhlIGN1cnJlbnQgbGluZQorCQkJT25seSB3aG9sZSBrZXl3b3JkcyBhcmUgc2VhcmNoZWQgZm9yLCBsaWtlIHdpdGggdGhlCisJCQljb21tYW5kICIvXDxrZXl3b3JkXD4iLiAgfGV4Y2x1c2l2ZXwgIHtub3QgaW4gVml9CisJCQknaWdub3JlY2FzZScgaXMgdXNlZCwgJ3NtYXJ0Y2FzZScgaXMgbm90LgorCisJCQkJCQkJKiMqCisjCQkJU2FtZSBhcyAiKiIsIGJ1dCBzZWFyY2ggYmFja3dhcmQuICBUaGUgcG91bmQgc2lnbgorCQkJKGNoYXJhY3RlciAxNjMpIGFsc28gd29ya3MuICBJZiB0aGUgIiMiIGtleSB3b3JrcyBhcworCQkJYmFja3NwYWNlLCB0cnkgdXNpbmcgInN0dHkgZXJhc2UgPEJTPiIgYmVmb3JlIHN0YXJ0aW5nCisJCQlWaW0gKDxCUz4gaXMgQ1RSTC1IIG9yIGEgcmVhbCBiYWNrc3BhY2UpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnc3RhcioKK2cqCQkJTGlrZSAiKiIsIGJ1dCBkb24ndCBwdXQgIlw8IiBhbmQgIlw+IiBhcm91bmQgdGhlIHdvcmQuCisJCQlUaGlzIG1ha2VzIHRoZSBzZWFyY2ggYWxzbyBmaW5kIG1hdGNoZXMgdGhhdCBhcmUgbm90IGEKKwkJCXdob2xlIHdvcmQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKmcjKgorZyMJCQlMaWtlICIjIiwgYnV0IGRvbid0IHB1dCAiXDwiIGFuZCAiXD4iIGFyb3VuZCB0aGUgd29yZC4KKwkJCVRoaXMgbWFrZXMgdGhlIHNlYXJjaCBhbHNvIGZpbmQgbWF0Y2hlcyB0aGF0IGFyZSBub3QgYQorCQkJd2hvbGUgd29yZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqZ2QqCitnZAkJCUdvdG8gbG9jYWwgRGVjbGFyYXRpb24uICBXaGVuIHRoZSBjdXJzb3IgaXMgb24gYSBsb2NhbAorCQkJdmFyaWFibGUsIHRoaXMgY29tbWFuZCB3aWxsIGp1bXAgdG8gaXRzIGRlY2xhcmF0aW9uLgorCQkJRmlyc3QgVmltIHNlYXJjaGVzIGZvciB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQKKwkJCWZ1bmN0aW9uLCBqdXN0IGxpa2UgIltbIi4gIElmIGl0IGlzIG5vdCBmb3VuZCB0aGUKKwkJCXNlYXJjaCBzdG9wcyBpbiBsaW5lIDEuICBJZiBpdCBpcyBmb3VuZCwgVmltIGdvZXMgYmFjaworCQkJdW50aWwgYSBibGFuayBsaW5lIGlzIGZvdW5kLiAgRnJvbSB0aGlzIHBvc2l0aW9uIFZpbQorCQkJc2VhcmNoZXMgZm9yIHRoZSBrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3IsIGxpa2Ugd2l0aAorCQkJIioiLCBidXQgbGluZXMgdGhhdCBsb29rIGxpa2UgYSBjb21tZW50IGFyZSBpZ25vcmVkCisJCQkoc2VlICdjb21tZW50cycgb3B0aW9uKS4KKwkJCU5vdGUgdGhhdCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmssIFZpbSBkb2VzIG5vdAorCQkJcmVhbGx5IGNoZWNrIHRoZSBzeW50YXgsIGl0IG9ubHkgc2VhcmNoZXMgZm9yIGEgbWF0Y2gKKwkJCXdpdGggdGhlIGtleXdvcmQuICBJZiBpbmNsdWRlZCBmaWxlcyBhbHNvIG5lZWQgdG8gYmUKKwkJCXNlYXJjaGVkIHVzZSB0aGUgY29tbWFuZHMgbGlzdGVkIGluIHxpbmNsdWRlLXNlYXJjaHwuCisJCQlBZnRlciB0aGlzIGNvbW1hbmQgfG58IHNlYXJjaGVzIGZvcndhcmQgZm9yIHRoZSBuZXh0CisJCQltYXRjaCAobm90IGJhY2t3YXJkKS4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqZ0QqCitnRAkJCUdvdG8gZ2xvYmFsIERlY2xhcmF0aW9uLiAgV2hlbiB0aGUgY3Vyc29yIGlzIG9uIGEKKwkJCWdsb2JhbCB2YXJpYWJsZSB0aGF0IGlzIGRlZmluZWQgaW4gdGhlIGZpbGUsIHRoaXMKKwkJCWNvbW1hbmQgd2lsbCBqdW1wIHRvIGl0cyBkZWNsYXJhdGlvbi4gIFRoaXMgd29ya3MganVzdAorCQkJbGlrZSAiZ2QiLCBleGNlcHQgdGhhdCB0aGUgc2VhcmNoIGZvciB0aGUga2V5d29yZAorCQkJYWx3YXlzIHN0YXJ0cyBpbiBsaW5lIDEuICB7bm90IGluIFZpfQorCisJCQkJCQkJKkNUUkwtQyoKK0NUUkwtQwkJCUludGVycnVwdCBjdXJyZW50IChzZWFyY2gpIGNvbW1hbmQuICBVc2UgQ1RSTC1CcmVhayBvbgorCQkJTVMtRE9TIHxkb3MtQ1RSTC1CcmVha3wuCisJCQlJbiBOb3JtYWwgbW9kZSwgYW55IHBlbmRpbmcgY29tbWFuZCBpcyBhYm9ydGVkLgorCisJCQkJCQkJKjpub2gqICo6bm9obHNlYXJjaCoKKzpub2hbbHNlYXJjaF0JCVN0b3AgdGhlIGhpZ2hsaWdodGluZyBmb3IgdGhlICdobHNlYXJjaCcgb3B0aW9uLiAgSXQKKwkJCWlzIGF1dG9tYXRpY2FsbHkgdHVybmVkIGJhY2sgb24gd2hlbiB1c2luZyBhIHNlYXJjaAorCQkJY29tbWFuZCwgb3Igc2V0dGluZyB0aGUgJ2hsc2VhcmNoJyBvcHRpb24uCisJCQlUaGlzIGNvbW1hbmQgZG9lc24ndCB3b3JrIGluIGFuIGF1dG9jb21tYW5kLCBiZWNhdXNlCisJCQl0aGUgaGlnaGxpZ2h0aW5nIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCB3aGVuCisJCQlleGVjdXRpbmcgYXV0b2NvbW1hbmRzIHxhdXRvY21kLXNlYXJjaHBhdHwuCisKK1doaWxlIHR5cGluZyB0aGUgc2VhcmNoIHBhdHRlcm4gdGhlIGN1cnJlbnQgbWF0Y2ggd2lsbCBiZSBzaG93biBpZiB0aGUKKydpbmNzZWFyY2gnIG9wdGlvbiBpcyBvbi4gIFJlbWVtYmVyIHRoYXQgeW91IHN0aWxsIGhhdmUgdG8gZmluaXNoIHRoZSBzZWFyY2gKK2NvbW1hbmQgd2l0aCA8Q1I+IHRvIGFjdHVhbGx5IHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGRpc3BsYXllZCBtYXRjaC4gIE9yCit1c2UgPEVzYz4gdG8gYWJhbmRvbiB0aGUgc2VhcmNoLgorCitBbGwgbWF0Y2hlcyBmb3IgdGhlIGxhc3QgdXNlZCBzZWFyY2ggcGF0dGVybiB3aWxsIGJlIGhpZ2hsaWdodGVkIGlmIHlvdSBzZXQKK3RoZSAnaGxzZWFyY2gnIG9wdGlvbi4gIFRoaXMgY2FuIGJlIHN1c3BlbmRlZCB3aXRoIHRoZSB8Om5vaGxzZWFyY2h8IGNvbW1hbmQuCisKKwkJCQkJKnNlYXJjaC1vZmZzZXQqICp7b2Zmc2V0fSoKK1RoZXNlIGNvbW1hbmRzIHNlYXJjaCBmb3IgdGhlIHNwZWNpZmllZCBwYXR0ZXJuLiAgV2l0aCAiLyIgYW5kICI/IiBhbgorYWRkaXRpb25hbCBvZmZzZXQgbWF5IGJlIGdpdmVuLiAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvZmZzZXRzOiBsaW5lIG9mZnNldHMKK2FuZCBjaGFyYWN0ZXIgb2Zmc2V0cy4gIHt0aGUgY2hhcmFjdGVyIG9mZnNldHMgYXJlIG5vdCBpbiBWaX0KKworVGhlIG9mZnNldCBnaXZlcyB0aGUgY3Vyc29yIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBmb3VuZCBtYXRjaDoKKyAgICBbbnVtXQlbbnVtXSBsaW5lcyBkb3dud2FyZHMsIGluIGNvbHVtbiAxCisgICAgK1tudW1dCVtudW1dIGxpbmVzIGRvd253YXJkcywgaW4gY29sdW1uIDEKKyAgICAtW251bV0JW251bV0gbGluZXMgdXB3YXJkcywgaW4gY29sdW1uIDEKKyAgICBlWytudW1dCVtudW1dIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbmQgb2YgdGhlIG1hdGNoCisgICAgZVstbnVtXQlbbnVtXSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbmQgb2YgdGhlIG1hdGNoCisgICAgc1srbnVtXQlbbnVtXSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoCisgICAgc1stbnVtXQlbbnVtXSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IG9mIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2gKKyAgICBiWytudW1dCVtudW1dIGlkZW50aWNhbCB0byBzWytudW1dIGFib3ZlIChtbmVtb25pYzogYmVnaW4pCisgICAgYlstbnVtXQlbbnVtXSBpZGVudGljYWwgdG8gc1stbnVtXSBhYm92ZSAobW5lbW9uaWM6IGJlZ2luKQorCitJZiBhICctJyBvciAnKycgaXMgZ2l2ZW4gYnV0IFtudW1dIGlzIG9taXR0ZWQsIGEgY291bnQgb2Ygb25lIHdpbGwgYmUgdXNlZC4KK1doZW4gaW5jbHVkaW5nIGFuIG9mZnNldCB3aXRoICdlJywgdGhlIHNlYXJjaCBiZWNvbWVzIGluY2x1c2l2ZSAodGhlCitjaGFyYWN0ZXIgdGhlIGN1cnNvciBsYW5kcyBvbiBpcyBpbmNsdWRlZCBpbiBvcGVyYXRpb25zKS4KKworRXhhbXBsZXM6CisKK3BhdHRlcm4JCQljdXJzb3IgcG9zaXRpb24JfgorL3Rlc3QvKzEJCW9uZSBsaW5lIGJlbG93ICJ0ZXN0IiwgaW4gY29sdW1uIDEKKy90ZXN0L2UJCQlvbiB0aGUgbGFzdCB0IG9mICJ0ZXN0IgorL3Rlc3QvcysyCQlvbiB0aGUgJ3MnIG9mICJ0ZXN0IgorL3Rlc3QvYi0zCQl0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSAidGVzdCIKKworSWYgb25lIG9mIHRoZXNlIGNvbW1hbmRzIGlzIHVzZWQgYWZ0ZXIgYW4gb3BlcmF0b3IsIHRoZSBjaGFyYWN0ZXJzIGJldHdlZW4KK3RoZSBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VhcmNoIGlzIGFmZmVjdGVkLiAgSG93ZXZlciwgaWYgYQorbGluZSBvZmZzZXQgaXMgZ2l2ZW4sIHRoZSB3aG9sZSBsaW5lcyBiZXR3ZWVuIHRoZSB0d28gY3Vyc29yIHBvc2l0aW9ucyBhcmUKK2FmZmVjdGVkLgorCitBbiBleGFtcGxlIG9mIGhvdyB0byBzZWFyY2ggZm9yIG1hdGNoZXMgd2l0aCBhIHBhdHRlcm4gYW5kIGNoYW5nZSB0aGUgbWF0Y2gKK3dpdGggYW5vdGhlciB3b3JkOiA+CisJL2ZvbzxDUj4JZmluZCAiZm9vIgorCWMvL2UJCWNoYW5nZSB1bnRpbCBlbmQgb2YgbWF0Y2gKKwliYXI8RXNjPgl0eXBlIHJlcGxhY2VtZW50CisJLy88Q1I+CQlnbyB0byBzdGFydCBvZiBuZXh0IG1hdGNoCisJYy8vZQkJY2hhbmdlIHVudGlsIGVuZCBvZiBtYXRjaAorCWJlZXA8RXNjPgl0eXBlIGFub3RoZXIgcmVwbGFjZW1lbnQKKwkJCWV0Yy4KKzwKKwkJCQkJCQkqLy87KiAqRTM4NioKK0EgdmVyeSBzcGVjaWFsIG9mZnNldCBpcyAnOycgZm9sbG93ZWQgYnkgYW5vdGhlciBzZWFyY2ggY29tbWFuZC4gIEZvciBleGFtcGxlOiA+CisKKyAgIC90ZXN0IDEvOy90ZXN0CisgICAvdGVzdC4qLysxOz9pbmc/CisKK1RoZSBmaXJzdCBvbmUgZmlyc3QgZmluZHMgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiAidGVzdCAxIiwgYW5kIHRoZW4gdGhlIGZpcnN0CitvY2N1cnJlbmNlIG9mICJ0ZXN0IiBhZnRlciB0aGF0LgorCitUaGlzIGlzIGxpa2UgZXhlY3V0aW5nIHR3byBzZWFyY2ggY29tbWFuZHMgYWZ0ZXIgZWFjaCBvdGhlciwgZXhjZXB0IHRoYXQ6CistIEl0IGNhbiBiZSB1c2VkIGFzIGEgc2luZ2xlIG1vdGlvbiBjb21tYW5kIGFmdGVyIGFuIG9wZXJhdG9yLgorLSBUaGUgZGlyZWN0aW9uIGZvciBhIGZvbGxvd2luZyAibiIgb3IgIk4iIGNvbW1hbmQgY29tZXMgZnJvbSB0aGUgZmlyc3QKKyAgc2VhcmNoIGNvbW1hbmQuCistIFdoZW4gYW4gZXJyb3Igb2NjdXJzIHRoZSBjdXJzb3IgaXMgbm90IG1vdmVkIGF0IGFsbC4KKworCQkJCQkJCSpsYXN0LXBhdHRlcm4qCitUaGUgbGFzdCB1c2VkIHBhdHRlcm4gYW5kIG9mZnNldCBhcmUgcmVtZW1iZXJlZC4gIFRoZXkgY2FuIGJlIHVzZWQgdG8gcmVwZWF0Cit0aGUgc2VhcmNoLCBwb3NzaWJseSBpbiBhbm90aGVyIGRpcmVjdGlvbiBvciB3aXRoIGFub3RoZXIgY291bnQuICBOb3RlIHRoYXQKK3R3byBwYXR0ZXJucyBhcmUgcmVtZW1iZXJlZDogT25lIGZvciAnbm9ybWFsJyBzZWFyY2ggY29tbWFuZHMgYW5kIG9uZSBmb3IgdGhlCitzdWJzdGl0dXRlIGNvbW1hbmQgIjpzIi4gIEVhY2ggdGltZSBhbiBlbXB0eSBwYXR0ZXJuIGlzIGdpdmVuLCB0aGUgcHJldmlvdXNseQordXNlZCBwYXR0ZXJuIGlzIHVzZWQuCisKK1RoZSAnbWFnaWMnIG9wdGlvbiBzdGlja3Mgd2l0aCB0aGUgbGFzdCB1c2VkIHBhdHRlcm4uICBJZiB5b3UgY2hhbmdlICdtYWdpYycsCit0aGlzIHdpbGwgbm90IGNoYW5nZSBob3cgdGhlIGxhc3QgdXNlZCBwYXR0ZXJuIHdpbGwgYmUgaW50ZXJwcmV0ZWQuCitUaGUgJ2lnbm9yZWNhc2UnIG9wdGlvbiBkb2VzIG5vdCBkbyB0aGlzLiAgV2hlbiAnaWdub3JlY2FzZScgaXMgY2hhbmdlZCwgaXQKK3dpbGwgcmVzdWx0IGluIHRoZSBwYXR0ZXJuIHRvIG1hdGNoIG90aGVyIHRleHQuCisKK0FsbCBtYXRjaGVzIGZvciB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgaWYgeW91IHNldAordGhlICdobHNlYXJjaCcgb3B0aW9uLgorCitUbyBjbGVhciB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuOiA+CisJOmxldCBALyA9ICIiCitUaGlzIHdpbGwgbm90IHNldCB0aGUgcGF0dGVybiB0byBhbiBlbXB0eSBzdHJpbmcsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYXRjaAorZXZlcnl3aGVyZS4gIFRoZSBwYXR0ZXJuIGlzIHJlYWxseSBjbGVhcmVkLCBsaWtlIHdoZW4gc3RhcnRpbmcgVmltLgorCitUaGUgc2VhcmNoIHVzdWFsIHNraXBzIG1hdGNoZXMgdGhhdCBkb24ndCBtb3ZlIHRoZSBjdXJzb3IuICBXaGV0aGVyIHRoZSBuZXh0CittYXRjaCBpcyBmb3VuZCBhdCB0aGUgbmV4dCBjaGFyYWN0ZXIgb3IgYWZ0ZXIgdGhlIHNraXBwZWQgbWF0Y2ggZGVwZW5kcyBvbiB0aGUKKydjJyBmbGFnIGluICdjcG9wdGlvbnMnLiAgU2VlIHxjcG8tY3wuCisJICAgd2l0aCAnYycgZmxhZzogICAiLy4uLiIgYWR2YW5jZXMgMSB0byAzIGNoYXJhY3RlcnMKKwl3aXRob3V0ICdjJyBmbGFnOiAgICIvLi4uIiBhZHZhbmNlcyAxIGNoYXJhY3RlcgorVGhlIHVucHJlZGljdGFiaWxpdHkgd2l0aCB0aGUgJ2MnIGZsYWcgaXMgY2F1c2VkIGJ5IHN0YXJ0aW5nIHRoZSBzZWFyY2ggaW4gdGhlCitmaXJzdCBjb2x1bW4sIHNraXBwaW5nIG1hdGNoZXMgdW50aWwgb25lIGlzIGZvdW5kIHBhc3QgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworSW4gVmkgdGhlICI6dGFnIiBjb21tYW5kIHNldHMgdGhlIGxhc3Qgc2VhcmNoIHBhdHRlcm4gd2hlbiB0aGUgdGFnIGlzIHNlYXJjaGVkCitmb3IuICBJbiBWaW0gdGhpcyBpcyBub3QgZG9uZSwgdGhlIHByZXZpb3VzIHNlYXJjaCBwYXR0ZXJuIGlzIHN0aWxsIHJlbWVtYmVyZWQsCit1bmxlc3MgdGhlICd0JyBmbGFnIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycuICBUaGUgc2VhcmNoIHBhdHRlcm4gaXMgYWx3YXlzCitwdXQgaW4gdGhlIHNlYXJjaCBoaXN0b3J5LgorCitJZiB0aGUgJ3dyYXBzY2FuJyBvcHRpb24gaXMgb24gKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgc2VhcmNoZXMgd3JhcCBhcm91bmQKK3RoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gIElmICd3cmFwc2NhbicgaXMgbm90IHNldCwgdGhlIGJhY2t3YXJkIHNlYXJjaCBzdG9wcworYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGZvcndhcmQgc2VhcmNoIHN0b3BzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gIElmCisnd3JhcHNjYW4nIGlzIHNldCBhbmQgdGhlIHBhdHRlcm4gd2FzIG5vdCBmb3VuZCB0aGUgZXJyb3IgbWVzc2FnZSAicGF0dGVybgorbm90IGZvdW5kIiBpcyBnaXZlbiwgYW5kIHRoZSBjdXJzb3Igd2lsbCBub3QgYmUgbW92ZWQuICBJZiAnd3JhcHNjYW4nIGlzIG5vdAorc2V0IHRoZSBtZXNzYWdlIGJlY29tZXMgInNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2giIHdoZW4gc2VhcmNoaW5nCitmb3J3YXJkLCBvciAic2VhcmNoIGhpdCBUT1Agd2l0aG91dCBtYXRjaCIgd2hlbiBzZWFyY2hpbmcgYmFja3dhcmQuICBJZgord3JhcHNjYW4gaXMgc2V0IGFuZCB0aGUgc2VhcmNoIHdyYXBzIGFyb3VuZCB0aGUgZW5kIG9mIHRoZSBmaWxlIHRoZSBtZXNzYWdlCisic2VhcmNoIGhpdCBUT1AsIGNvbnRpbnVpbmcgYXQgQk9UVE9NIiBvciAic2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQKK1RPUCIgaXMgZ2l2ZW4gd2hlbiBzZWFyY2hpbmcgYmFja3dhcmRzIG9yIGZvcndhcmRzIHJlc3BlY3RpdmVseS4gIFRoaXMgY2FuIGJlCitzd2l0Y2hlZCBvZmYgYnkgc2V0dGluZyB0aGUgJ3MnIGZsYWcgaW4gdGhlICdzaG9ydG1lc3MnIG9wdGlvbi4gIFRoZSBoaWdobGlnaHQKK21ldGhvZCAndycgaXMgdXNlZCBmb3IgdGhpcyBtZXNzYWdlIChkZWZhdWx0OiBzdGFuZG91dCkuCisKKwkJCQkJCQkqc2VhcmNoLXJhbmdlKgorWW91IGNhbm5vdCBsaW1pdCB0aGUgc2VhcmNoIGNvbW1hbmQgIi8iIHRvIGEgY2VydGFpbiByYW5nZSBvZiBsaW5lcy4gIEEgdHJpY2sKK3RvIGRvIHRoaXMgYW55d2F5IGlzIHRvIHVzZSB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kIHdpdGggdGhlICdjJyBmbGFnLgorRXhhbXBsZTogPgorICAgOi4sMzAwcy9QYXR0ZXJuLy9nYworVGhpcyBjb21tYW5kIHdpbGwgc2VhcmNoIGZyb20gdGhlIGN1cnNvciBwb3NpdGlvbiB1bnRpbCBsaW5lIDMwMCBmb3IKKyJQYXR0ZXJuIi4gIEF0IHRoZSBtYXRjaCwgeW91IHdpbGwgYmUgYXNrZWQgdG8gdHlwZSBhIGNoYXJhY3Rlci4gIFR5cGUgJ3EnIHRvCitzdG9wIGF0IHRoaXMgbWF0Y2gsIHR5cGUgJ24nIHRvIGZpbmQgdGhlIG5leHQgbWF0Y2guCisKK1RoZSAiKiIsICIjIiwgImcqIiBhbmQgImcjIiBjb21tYW5kcyBsb29rIGZvciBhIHdvcmQgbmVhciB0aGUgY3Vyc29yIGluIHRoaXMKK29yZGVyLCB0aGUgZmlyc3Qgb25lIHRoYXQgaXMgZm91bmQgaXMgdXNlZDoKKy0gVGhlIGtleXdvcmQgY3VycmVudGx5IHVuZGVyIHRoZSBjdXJzb3IuCistIFRoZSBmaXJzdCBrZXl3b3JkIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yLCBpbiB0aGUgc2FtZSBsaW5lLgorLSBUaGUgV09SRCBjdXJyZW50bHkgdW5kZXIgdGhlIGN1cnNvci4KKy0gVGhlIGZpcnN0IFdPUkQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IsIGluIHRoZSBzYW1lIGxpbmUuCitUaGUga2V5d29yZCBtYXkgb25seSBjb250YWluIGxldHRlcnMgYW5kIGNoYXJhY3RlcnMgaW4gJ2lza2V5d29yZCcuCitUaGUgV09SRCBtYXkgY29udGFpbiBhbnkgbm9uLWJsYW5rcyAoPFRhYj5zIGFuZC9vciA8U3BhY2U+cykuCitOb3RlIHRoYXQgaWYgeW91IHR5cGUgd2l0aCB0ZW4gZmluZ2VycywgdGhlIGNoYXJhY3RlcnMgYXJlIGVhc3kgdG8gcmVtZW1iZXI6Cit0aGUgIiMiIGlzIHVuZGVyIHlvdXIgbGVmdCBoYW5kIG1pZGRsZSBmaW5nZXIgKHNlYXJjaCB0byB0aGUgbGVmdCBhbmQgdXApIGFuZAordGhlICIqIiBpcyB1bmRlciB5b3VyIHJpZ2h0IGhhbmQgbWlkZGxlIGZpbmdlciAoc2VhcmNoIHRvIHRoZSByaWdodCBhbmQgZG93bikuCisodGhpcyBkZXBlbmRzIG9uIHlvdXIga2V5Ym9hcmQgbGF5b3V0IHRob3VnaCkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gVGhlIGRlZmluaXRpb24gb2YgYSBwYXR0ZXJuCQkqc2VhcmNoLXBhdHRlcm4qICpwYXR0ZXJuKiAqW3BhdHRlcm5dKgorCQkJCQkqcmVndWxhci1leHByZXNzaW9uKiAqcmVnZXhwKiAqUGF0dGVybioKKwkJCQkJKkU3NiogKkUzNjEqICpFMzYzKiAqRTM4MyogKkU0NzYqCisKK0ZvciBzdGFydGVycywgcmVhZCBjaGFwdGVyIDI3IG9mIHRoZSB1c2VyIG1hbnVhbCB8dXNyXzI3LnR4dHwuCisKKwkJCQkJCSovYmFyKiAqL1xiYXIqICovcGF0dGVybioKKzEuIEEgcGF0dGVybiBpcyBvbmUgb3IgbW9yZSBicmFuY2hlcywgc2VwYXJhdGVkIGJ5ICJcfCIuICBJdCBtYXRjaGVzIGFueXRoaW5nCisgICB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZSBicmFuY2hlcy4gIEV4YW1wbGU6ICJmb29cfGJlZXAiIG1hdGNoZXMgImZvbyIgYW5kCisgICBtYXRjaGVzICJiZWVwIi4gIElmIG1vcmUgdGhhbiBvbmUgYnJhbmNoIG1hdGNoZXMsIHRoZSBmaXJzdCBvbmUgaXMgdXNlZC4KKworICAgcGF0dGVybiA6Oj0JICAgIGJyYW5jaAorCQlvciAgYnJhbmNoIFx8IGJyYW5jaAorCQlvciAgYnJhbmNoIFx8IGJyYW5jaCBcfCBicmFuY2gKKwkJZXRjLgorCisJCQkJCQkqL2JyYW5jaCogKi9cJioKKzIuIEEgYnJhbmNoIGlzIG9uZSBvciBtb3JlIGNvbmNhdHMsIHNlcGFyYXRlZCBieSAiXCYiLiAgSXQgbWF0Y2hlcyB0aGUgbGFzdAorICAgY29uY2F0LCBidXQgb25seSBpZiBhbGwgdGhlIHByZWNlZGluZyBjb25jYXRzIGFsc28gbWF0Y2ggYXQgdGhlIHNhbWUKKyAgIHBvc2l0aW9uLiAgRXhhbXBsZXM6CisJImZvb2JlZXBcJi4uLiIgbWF0Y2hlcyAiZm9vIiBpbiAiZm9vYmVlcCIuCisJIi4qUGV0ZXJcJi4qQm9iIiBtYXRjaGVzIGluIGEgbGluZSBjb250YWluaW5nIGJvdGggIlBldGVyIiBhbmQgIkJvYiIKKworICAgYnJhbmNoIDo6PQkgICAgY29uY2F0CisJCW9yICBjb25jYXQgXCYgY29uY2F0CisJCW9yICBjb25jYXQgXCYgY29uY2F0IFwmIGNvbmNhdAorCQlldGMuCisKKwkJCQkJCSovY29uY2F0KgorMy4gQSBjb25jYXQgaXMgb25lIG9yIG1vcmUgcGllY2VzLCBjb25jYXRlbmF0ZWQuICBJdCBtYXRjaGVzIGEgbWF0Y2ggZm9yIHRoZQorICAgZmlyc3QgcGllY2UsIGZvbGxvd2VkIGJ5IGEgbWF0Y2ggZm9yIHRoZSBzZWNvbmQgcGllY2UsIGV0Yy4gIEV4YW1wbGU6CisgICAiZlswLTldYiIsIGZpcnN0IG1hdGNoZXMgImYiLCB0aGVuIGEgZGlnaXQgYW5kIHRoZW4gImIiLgorCisgICBjb25jYXQgIDo6PQkgICAgcGllY2UKKwkJb3IgIHBpZWNlIHBpZWNlCisJCW9yICBwaWVjZSBwaWVjZSBwaWVjZQorCQlldGMuCisKKwkJCQkJCSovcGllY2UqCis0LiBBIHBpZWNlIGlzIGFuIGF0b20sIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgbXVsdGksIGFuIGluZGljYXRpb24gb2YgaG93IG1hbnkKKyAgIHRpbWVzIHRoZSBhdG9tIGNhbiBiZSBtYXRjaGVkLiAgRXhhbXBsZTogImEqIiBtYXRjaGVzIGFueSBzZXF1ZW5jZSBvZiAiYSIKKyAgIGNoYXJhY3RlcnM6ICIiLCAiYSIsICJhYSIsIGV0Yy4gIFNlZSB8L211bHRpfC4KKworICAgcGllY2UgICA6Oj0JICAgIGF0b20KKwkJb3IgIGF0b20gIG11bHRpCisKKwkJCQkJCSovYXRvbSoKKzUuIEFuIGF0b20gY2FuIGJlIG9uZSBvZiBhIGxvbmcgbGlzdCBvZiBpdGVtcy4gIE1hbnkgYXRvbXMgbWF0Y2ggb25lIGNoYXJhY3RlcgorICAgaW4gdGhlIHRleHQuICBJdCBpcyBvZnRlbiBhbiBvcmRpbmFyeSBjaGFyYWN0ZXIgb3IgYSBjaGFyYWN0ZXIgY2xhc3MuCisgICBCcmFjZXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIHBhdHRlcm4gaW50byBhbiBhdG9tLiAgVGhlICJceihcKSIgY29uc3RydWN0CisgICBpcyBvbmx5IGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLgorCisgICBhdG9tICAgIDo6PQkgICAgb3JkaW5hcnktYXRvbQkJfC9vcmRpbmFyeS1hdG9tfAorCQlvciAgXCggcGF0dGVybiBcKQkJfC9cKHwKKwkJb3IgIFwlKCBwYXR0ZXJuIFwpCQl8L1wlKHwKKwkJb3IgIFx6KCBwYXR0ZXJuIFwpCQl8L1x6KHwKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIE92ZXJ2aWV3IG9mIHBhdHRlcm4gaXRlbXMJCQkJKnBhdHRlcm4tb3ZlcnZpZXcqCisKK092ZXJ2aWV3IG9mIG11bHRpIGl0ZW1zLgkJCQkqL211bHRpKiAqRTYxKiAqRTYyKgorTW9yZSBleHBsYW5hdGlvbiBhbmQgZXhhbXBsZXMgYmVsb3csIGZvbGxvdyB0aGUgbGlua3MuCQkJKkU2NCoKKworCSAgbXVsdGkgfgorICAgICAnbWFnaWMnICdub21hZ2ljJwltYXRjaGVzIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSB+Cit8L3N0YXJ8CSoJXCoJMCBvciBtb3JlCWFzIG1hbnkgYXMgcG9zc2libGUKK3wvXCt8CVwrCVwrCTEgb3IgbW9yZQlhcyBtYW55IGFzIHBvc3NpYmxlICgqKQorfC9cPXwJXD0JXD0JMCBvciAxCQlhcyBtYW55IGFzIHBvc3NpYmxlICgqKQorfC9cP3wJXD8JXD8JMCBvciAxCQlhcyBtYW55IGFzIHBvc3NpYmxlICgqKQorCit8L1x7fAlce24sbX0JXHtuLG19CW4gdG8gbQkJYXMgbWFueSBhcyBwb3NzaWJsZSAoKikKKwlce259CVx7bn0JbgkJZXhhY3RseSAoKikKKwlce24sfQlce24sfQlhdCBsZWFzdCBuCWFzIG1hbnkgYXMgcG9zc2libGUgKCopCisJXHssbX0JXHssbX0JMCB0byBtCQlhcyBtYW55IGFzIHBvc3NpYmxlICgqKQorCVx7fQlce30JMCBvciBtb3JlCWFzIG1hbnkgYXMgcG9zc2libGUgKHNhbWUgYXMgKikgKCopCisKK3wvXHstfAlcey1uLG19CVx7LW4sbX0JbiB0byBtCQlhcyBmZXcgYXMgcG9zc2libGUgKCopCisJXHstbn0JXHstbn0JbgkJZXhhY3RseSAoKikKKwlcey1uLH0JXHstbix9CWF0IGxlYXN0IG4JYXMgZmV3IGFzIHBvc3NpYmxlICgqKQorCVx7LSxtfQlcey0sbX0JMCB0byBtCQlhcyBmZXcgYXMgcG9zc2libGUgKCopCisJXHstfQlcey19CTAgb3IgbW9yZQlhcyBmZXcgYXMgcG9zc2libGUgKCopCisKKwkJCQkJCQkqRTU5KgorfC9cQD58CVxAPglcQD4JMSwgbGlrZSBtYXRjaGluZyBhIHdob2xlIHBhdHRlcm4gKCopCit8L1xAPXwJXEA9CVxAPQlub3RoaW5nLCByZXF1aXJlcyBhIG1hdGNoIHwvemVyby13aWR0aHwgKCopCit8L1xAIXwJXEAhCVxAIQlub3RoaW5nLCByZXF1aXJlcyBOTyBtYXRjaCB8L3plcm8td2lkdGh8ICgqKQorfC9cQDw9fAlcQDw9CVxAPD0Jbm90aGluZywgcmVxdWlyZXMgYSBtYXRjaCBiZWhpbmQgfC96ZXJvLXdpZHRofCAoKikKK3wvXEA8IXwJXEA8IQlcQDwhCW5vdGhpbmcsIHJlcXVpcmVzIE5PIG1hdGNoIGJlaGluZCB8L3plcm8td2lkdGh8ICgqKQorCisoKikge25vdCBpbiBWaX0KKworCitPdmVydmlldyBvZiBvcmRpbmFyeSBhdG9tcy4JCQkJKi9vcmRpbmFyeS1hdG9tKgorTW9yZSBleHBsYW5hdGlvbiBhbmQgZXhhbXBsZXMgYmVsb3csIGZvbGxvdyB0aGUgbGlua3MuCisKKyAgICAgIG9yZGluYXJ5IGF0b20gfgorICAgICAgbWFnaWMgICBub21hZ2ljCW1hdGNoZXMgfgorfC9efAleCV4Jc3RhcnQtb2YtbGluZSAoYXQgc3RhcnQgb2YgcGF0dGVybikgfC96ZXJvLXdpZHRofAorfC9cXnwJXF4JXF4JbGl0ZXJhbCAnXicKK3wvXF9efAlcX14JXF9eCXN0YXJ0LW9mLWxpbmUgKHVzZWQgYW55d2hlcmUpIHwvemVyby13aWR0aHwKK3wvJHwJJAkkCWVuZC1vZi1saW5lIChhdCBlbmQgb2YgcGF0dGVybikgfC96ZXJvLXdpZHRofAorfC9cJHwJXCQJXCQJbGl0ZXJhbCAnJCcKK3wvXF8kfAlcXyQJXF8kCWVuZC1vZi1saW5lICh1c2VkIGFueXdoZXJlKSB8L3plcm8td2lkdGh8Cit8Ly58CS4JXC4JYW55IHNpbmdsZSBjaGFyYWN0ZXIgKG5vdCBhbiBlbmQtb2YtbGluZSkKK3wvXF8ufAlcXy4JXF8uCWFueSBzaW5nbGUgY2hhcmFjdGVyIG9yIGVuZC1vZi1saW5lCit8L1w8fAlcPAlcPAliZWdpbm5pbmcgb2YgYSB3b3JkIHwvemVyby13aWR0aHwKK3wvXD58CVw+CVw+CWVuZCBvZiBhIHdvcmQgfC96ZXJvLXdpZHRofAorfC9cenN8CVx6cwlcenMJYW55dGhpbmcsIHNldHMgc3RhcnQgb2YgbWF0Y2gKK3wvXHplfAlcemUJXHplCWFueXRoaW5nLCBzZXRzIGVuZCBvZiBtYXRjaAorfC9cJV58CVwlXglcJV4JYmVnaW5uaW5nIG9mIGZpbGUgfC96ZXJvLXdpZHRofAkJKkU3MSoKK3wvXCUkfAlcJSQJXCUkCWVuZCBvZiBmaWxlIHwvemVyby13aWR0aHwKK3wvXCUjfAlcJSMJXCUjCWN1cnNvciBwb3NpdGlvbiB8L3plcm8td2lkdGh8Cit8L1wlbHwJXCUyM2wJXCUyM2wJaW4gbGluZSAyMyB8L3plcm8td2lkdGh8Cit8L1wlY3wJXCUyM2MJXCUyM2MJaW4gY29sdW1uIDIzIHwvemVyby13aWR0aHwKK3wvXCV2fAlcJTIzdglcJTIzdglpbiB2aXJ0dWFsIGNvbHVtbiAyMyB8L3plcm8td2lkdGh8CisKK0NoYXJhY3RlciBjbGFzc2VzIHtub3QgaW4gVml9OgorfC9caXwJXGkJXGkJaWRlbnRpZmllciBjaGFyYWN0ZXIgKHNlZSAnaXNpZGVudCcgb3B0aW9uKQorfC9cSXwJXEkJXEkJbGlrZSAiXGkiLCBidXQgZXhjbHVkaW5nIGRpZ2l0cworfC9ca3wJXGsJXGsJa2V5d29yZCBjaGFyYWN0ZXIgKHNlZSAnaXNrZXl3b3JkJyBvcHRpb24pCit8L1xLfAlcSwlcSwlsaWtlICJcayIsIGJ1dCBleGNsdWRpbmcgZGlnaXRzCit8L1xmfAlcZglcZglmaWxlIG5hbWUgY2hhcmFjdGVyIChzZWUgJ2lzZm5hbWUnIG9wdGlvbikKK3wvXEZ8CVxGCVxGCWxpa2UgIlxmIiwgYnV0IGV4Y2x1ZGluZyBkaWdpdHMKK3wvXHB8CVxwCVxwCXByaW50YWJsZSBjaGFyYWN0ZXIgKHNlZSAnaXNwcmludCcgb3B0aW9uKQorfC9cUHwJXFAJXFAJbGlrZSAiXHAiLCBidXQgZXhjbHVkaW5nIGRpZ2l0cworfC9cc3wJXHMJXHMJd2hpdGVzcGFjZSBjaGFyYWN0ZXI6IDxTcGFjZT4gYW5kIDxUYWI+Cit8L1xTfAlcUwlcUwlub24td2hpdGVzcGFjZSBjaGFyYWN0ZXI7IG9wcG9zaXRlIG9mIFxzCit8L1xkfAlcZAlcZAlkaWdpdDoJCQkJWzAtOV0KK3wvXER8CVxECVxECW5vbi1kaWdpdDoJCQlbXjAtOV0KK3wvXHh8CVx4CVx4CWhleCBkaWdpdDoJCQlbMC05QS1GYS1mXQorfC9cWHwJXFgJXFgJbm9uLWhleCBkaWdpdDoJCQlbXjAtOUEtRmEtZl0KK3wvXG98CVxvCVxvCW9jdGFsIGRpZ2l0OgkJCVswLTddCit8L1xPfAlcTwlcTwlub24tb2N0YWwgZGlnaXQ6CQlbXjAtN10KK3wvXHd8CVx3CVx3CXdvcmQgY2hhcmFjdGVyOgkJCVswLTlBLVphLXpfXQorfC9cV3wJXFcJXFcJbm9uLXdvcmQgY2hhcmFjdGVyOgkJW14wLTlBLVphLXpfXQorfC9caHwJXGgJXGgJaGVhZCBvZiB3b3JkIGNoYXJhY3RlcjoJCVtBLVphLXpfXQorfC9cSHwJXEgJXEgJbm9uLWhlYWQgb2Ygd29yZCBjaGFyYWN0ZXI6CVteQS1aYS16X10KK3wvXGF8CVxhCVxhCWFscGhhYmV0aWMgY2hhcmFjdGVyOgkJW0EtWmEtel0KK3wvXEF8CVxBCVxBCW5vbi1hbHBoYWJldGljIGNoYXJhY3RlcjoJW15BLVphLXpdCit8L1xsfAlcbAlcbAlsb3dlcmNhc2UgY2hhcmFjdGVyOgkJW2Etel0KK3wvXEx8CVxMCVxMCW5vbi1sb3dlcmNhc2UgY2hhcmFjdGVyOglbXmEtel0KK3wvXHV8CVx1CVx1CXVwcGVyY2FzZSBjaGFyYWN0ZXI6CQlbQS1aXQorfC9cVXwJXFUJXFUJbm9uLXVwcGVyY2FzZSBjaGFyYWN0ZXIJCVteQS1aXQorfC9cX3wJXF94CVxfeAl3aGVyZSB4IGlzIGFueSBvZiB0aGUgY2hhcmFjdGVycyBhYm92ZTogY2hhcmFjdGVyCisJCQljbGFzcyB3aXRoIGVuZC1vZi1saW5lIGluY2x1ZGVkCisoZW5kIG9mIGNoYXJhY3RlciBjbGFzc2VzKQorCit8L1xlfAlcZQlcZQk8RXNjPgorfC9cdHwJXHQJXHQJPFRhYj4KK3wvXHJ8CVxyCVxyCTxDUj4KK3wvXGJ8CVxiCVxiCTxCUz4KK3wvXG58CVxuCVxuCWVuZC1vZi1saW5lCit8L358CX4JXH4JbGFzdCBnaXZlbiBzdWJzdGl0dXRlIHN0cmluZworfC9cMXwJXDEJXDEJc2FtZSBzdHJpbmcgYXMgbWF0Y2hlZCBieSBmaXJzdCBcKFwpIHtub3QgaW4gVml9Cit8L1wyfAlcMglcMglMaWtlICJcMSIsIGJ1dCB1c2VzIHNlY29uZCBcKFwpCisJICAgLi4uCit8L1w5fAlcOQlcOQlMaWtlICJcMSIsIGJ1dCB1c2VzIG5pbnRoIFwoXCkKKwkJCQkJCQkJKkU2OCoKK3wvXHoxfAlcejEJXHoxCW9ubHkgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcsIHNlZSB8OnN5bi1leHQtbWF0Y2h8CisJICAgLi4uCit8L1x6MXwJXHo5CVx6OQlvbmx5IGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLCBzZWUgfDpzeW4tZXh0LW1hdGNofAorCisJeAl4CWEgY2hhcmFjdGVyIHdpdGggbm8gc3BlY2lhbCBtZWFuaW5nIG1hdGNoZXMgaXRzZWxmCisKK3wvW118CVtdCVxbXQlhbnkgY2hhcmFjdGVyIHNwZWNpZmllZCBpbnNpZGUgdGhlIFtdCit8L1wlW118IFwlW10JXCVbXQlhIGxpc3Qgb2Ygb3B0aW9uYWxseSBtYXRjaGVkIGF0b21zCisKK3wvXGN8CVxjCVxjCWlnbm9yZSBjYXNlCit8L1xDfAlcQwlcQwltYXRjaCBjYXNlCit8L1xtfAlcbQlcbQknbWFnaWMnIG9uIGZvciB0aGUgZm9sbG93aW5nIGNoYXJzIGluIHRoZSBwYXR0ZXJuCit8L1xNfAlcTQlcTQknbWFnaWMnIG9mZiBmb3IgdGhlIGZvbGxvd2luZyBjaGFycyBpbiB0aGUgcGF0dGVybgorfC9cdnwJXHYJXHYJdGhlIGZvbGxvd2luZyBjaGFycyBpbiB0aGUgcGF0dGVybiBhcmUgInZlcnkgbWFnaWMiCit8L1xWfAlcVglcVgl0aGUgZm9sbG93aW5nIGNoYXJzIGluIHRoZSBwYXR0ZXJuIGFyZSAidmVyeSBub21hZ2ljIgorfC9cWnwJXFoJXFoJaWdub3JlIGRpZmZlcmVuY2VzIGluIFVuaWNvZGUgImNvbWJpbmluZyBjaGFyYWN0ZXJzIi4KKwkJCVVzZWZ1bCB3aGVuIHNlYXJjaGluZyB2b3dlbGVkIEhlYnJldyBvciBBcmFiaWMgdGV4dC4KKworCitFeGFtcGxlCQkJbWF0Y2hlcyB+CitcPFxJXGkqCQlvcgorXDxcaFx3KgorXDxbYS16QS1aX11bYS16QS1aMC05X10qCisJCQlBbiBpZGVudGlmaWVyIChlLmcuLCBpbiBhIEMgcHJvZ3JhbSkuCisKK1woXC4kXHxcLiBcKQkJQSBwZXJpb2QgZm9sbG93ZWQgYnkgPEVPTD4gb3IgYSBzcGFjZS4KKworWy4hP11bXSkiJ10qXCgkXHxbIF1cKQlBIHNlYXJjaCBwYXR0ZXJuIHRoYXQgZmluZHMgdGhlIGVuZCBvZiBhIHNlbnRlbmNlLAorCQkJd2l0aCBhbG1vc3QgdGhlIHNhbWUgZGVmaW5pdGlvbiBhcyB0aGUgIikiIGNvbW1hbmQuCisKK2NhdFxaCQkJQm90aCAiY2F0IiBhbmQgImNhzIB0IiAoImEiIGZvbGxvd2VkIGJ5IDB4MDMwMCkKKwkJCURvZXMgbm90IG1hdGNoICJjw6B0IiAoY2hhcmFjdGVyIDB4MDBlMCksIGV2ZW4KKwkJCXRob3VnaCBpdCBtYXkgbG9vayB0aGUgc2FtZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIE1hZ2ljCQkJCQkJCSovbWFnaWMqCisKK1NvbWUgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybiBhcmUgdGFrZW4gbGl0ZXJhbGx5LiAgVGhleSBtYXRjaCB3aXRoIHRoZSBzYW1lCitjaGFyYWN0ZXIgaW4gdGhlIHRleHQuICBXaGVuIHByZWNlZGVkIHdpdGggYSBiYWNrc2xhc2ggaG93ZXZlciwgdGhlc2UKK2NoYXJhY3RlcnMgZ2V0IGEgc3BlY2lhbCBtZWFuaW5nLgorCitPdGhlciBjaGFyYWN0ZXJzIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgd2l0aG91dCBhIGJhY2tzbGFzaC4gIFRoZXkgbmVlZCB0byBiZQorcHJlY2VkZWQgd2l0aCBhIGJhY2tzbGFzaCB0byBtYXRjaCBsaXRlcmFsbHkuCisKK0lmIGEgY2hhcmFjdGVyIGlzIHRha2VuIGxpdGVyYWxseSBvciBub3QgZGVwZW5kcyBvbiB0aGUgJ21hZ2ljJyBvcHRpb24gYW5kIHRoZQoraXRlbXMgbWVudGlvbmVkIG5leHQuCisJCQkJCQkJKi9cbSogKi9cTSoKK1VzZSBvZiAiXG0iIG1ha2VzIHRoZSBwYXR0ZXJuIGFmdGVyIGl0IGJlIGludGVycHJldGVkIGFzIGlmICdtYWdpYycgaXMgc2V0LAoraWdub3JpbmcgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgJ21hZ2ljJyBvcHRpb24uCitVc2Ugb2YgIlxNIiBtYWtlcyB0aGUgcGF0dGVybiBhZnRlciBpdCBiZSBpbnRlcnByZXRlZCBhcyBpZiAnbm9tYWdpYycgaXMgdXNlZC4KKwkJCQkJCQkqL1x2KiAqL1xWKgorVXNlIG9mICJcdiIgbWVhbnMgdGhhdCBpbiB0aGUgcGF0dGVybiBhZnRlciBpdCBhbGwgQVNDSUkgY2hhcmFjdGVycyBleGNlcHQKKycwJy0nOScsICdhJy0neicsICdBJy0nWicgYW5kICdfJyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nLiAgInZlcnkgbWFnaWMiCisKK1VzZSBvZiAiXFYiIG1lYW5zIHRoYXQgaW4gdGhlIHBhdHRlcm4gYWZ0ZXIgaXQgb25seSB0aGUgYmFja3NsYXNoIGhhcyBhCitzcGVjaWFsIG1lYW5pbmcuICAidmVyeSBub21hZ2ljIgorCitFeGFtcGxlczoKK2FmdGVyOgkgIFx2CSAgIFxtCSAgICBcTQkgICAgIFxWCQltYXRjaGVzIH4KKwkJJ21hZ2ljJyAnbm9tYWdpYycKKwkgICQJICAgJAkgICAgJAkgICAgIFwkCQltYXRjaGVzIGVuZC1vZi1saW5lCisJICAuCSAgIC4JICAgIFwuCSAgICAgXC4JCW1hdGNoZXMgYW55IGNoYXJhY3RlcgorCSAgKgkgICAqCSAgICBcKgkgICAgIFwqCQlhbnkgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBhdG9tCisJICAoKQkgICBcKFwpICAgICBcKFwpICAgICBcKFwpCWdyb3VwaW5nIGludG8gYW4gYXRvbQorCSAgfAkgICBcfAkgICAgXHwJICAgICBcfAkJc2VwYXJhdGluZyBhbHRlcm5hdGl2ZXMKKwkgIFxhCSAgIFxhCSAgICBcYQkgICAgIFxhCQlhbHBoYWJldGljIGNoYXJhY3RlcgorCSAgXFwJICAgXFwJICAgIFxcCSAgICAgXFwJCWxpdGVyYWwgYmFja3NsYXNoCisJICBcLgkgICBcLgkgICAgLgkgICAgIC4JCWxpdGVyYWwgZG90CisJICBcewkgICB7CSAgICB7CSAgICAgewkJbGl0ZXJhbCAneycKKwkgIGEJICAgYQkgICAgYQkgICAgIGEJCWxpdGVyYWwgJ2EnCisKK3tvbmx5IFZpbSBzdXBwb3J0cyBcbSwgXE0sIFx2IGFuZCBcVn0KKworSXQgaXMgcmVjb21tZW5kZWQgdG8gYWx3YXlzIGtlZXAgdGhlICdtYWdpYycgb3B0aW9uIGF0IHRoZSBkZWZhdWx0IHNldHRpbmcsCit3aGljaCBpcyAnbWFnaWMnLiAgVGhpcyBhdm9pZHMgcG9ydGFiaWxpdHkgcHJvYmxlbXMuICBUbyBtYWtlIGEgcGF0dGVybiBpbW11bmUKK3RvIHRoZSAnbWFnaWMnIG9wdGlvbiBiZWluZyBzZXQgb3Igbm90LCBwdXQgIlxtIiBvciAiXE0iIGF0IHRoZSBzdGFydCBvZiB0aGUKK3BhdHRlcm4uCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBNdWx0aSBpdGVtcwkJCQkJCSpwYXR0ZXJuLW11bHRpLWl0ZW1zKgorCitBbiBhdG9tIGNhbiBiZSBmb2xsb3dlZCBieSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBhdG9tIGNhbiBiZQorbWF0Y2hlZCBhbmQgaW4gd2hhdCB3YXkuICBUaGlzIGlzIGNhbGxlZCBhIG11bHRpLiAgU2VlIHwvbXVsdGl8IGZvciBhbgorb3ZlcnZpZXcuCisKK0l0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYSBtdWx0aSB0aGF0IGNhbiBtYXRjaCBtb3JlIHRoYW4gb25lIHRpbWUgYWZ0ZXIgYW4KK2F0b20gdGhhdCBjYW4gbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiAgVGhhdCdzIGJlY2F1c2UgdGhpcyBjb3VsZCByZXN1bHQgaW4gYW4KK2VuZGxlc3MgbG9vcC4gIElmIHlvdSB0cnkgaXQsIHlvdSB3aWxsIGdldCB0aGlzIGVycm9yIG1lc3NhZ2U6ID4KKwkqLCBcKyBvciBceyBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5Cis8CisJCQkJCQkqL3N0YXIqICovXHN0YXIqICpFNTYqCisqCSh1c2UgXCogd2hlbiAnbWFnaWMnIGlzIG5vdCBzZXQpCisJTWF0Y2hlcyAwIG9yIG1vcmUgb2YgdGhlIHByZWNlZGluZyBhdG9tLCBhcyBtYW55IGFzIHBvc3NpYmxlLgorCUV4YW1wbGUgICdub21hZ2ljJwltYXRjaGVzIH4KKwlhKgkgICBhXCoJCSIiLCAiYSIsICJhYSIsICJhYWEiLCBldGMuCisJLioJICAgXC5cKgkJYW55dGhpbmcsIGFsc28gYW4gZW1wdHkgc3RyaW5nLCBubyBlbmQtb2YtbGluZQorCVxfLioJICAgXF8uXCoJZXZlcnl0aGluZyB1cCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIKKwlcXy4qRU5ECSAgIFxfLlwqRU5ECWV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbGFzdCAiRU5EIgorCQkJCWluIHRoZSBidWZmZXIKKworCUV4Y2VwdGlvbjogV2hlbiAiKiIgaXMgdXNlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gb3IganVzdCBhZnRlcgorCSJeIiBpdCBtYXRjaGVzIHRoZSBzdGFyIGNoYXJhY3Rlci4KKworCUJlIGF3YXJlIHRoYXQgcmVwZWF0aW5nICJcXy4iIGNhbiBtYXRjaCBhIGxvdCBvZiB0ZXh0IGFuZCB0YWtlIGEgbG9uZworCXRpbWUuICBGb3IgZXhhbXBsZSwgIlxfLipFTkQiIG1hdGNoZXMgYWxsIHRleHQgZnJvbSB0aGUgY3VycmVudAorCXBvc2l0aW9uIHRvIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgIkVORCIgaW4gdGhlIGZpbGUuICBTaW5jZSB0aGUgIioiCisJd2lsbCBtYXRjaCBhcyBtYW55IGFzIHBvc3NpYmxlLCB0aGlzIGZpcnN0IHNraXBzIG92ZXIgYWxsIGxpbmVzIHVudGlsCisJdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgdGhlbiB0cmllcyBtYXRjaGluZyAiRU5EIiwgYmFja2luZyB1cCBvbmUKKwljaGFyYWN0ZXIgYXQgYSB0aW1lLgorCisJCQkJCQkJKi9cKyogKkU1NyoKK1wrCU1hdGNoZXMgMSBvciBtb3JlIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgbWFueSBhcyBwb3NzaWJsZS4ge25vdCBpbgorCVZpfQorCUV4YW1wbGUJCW1hdGNoZXMgfgorCV4uXCskCQlhbnkgbm9uLWVtcHR5IGxpbmUKKwlcc1wrCQl3aGl0ZSBzcGFjZSBvZiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyCisKKwkJCQkJCQkqL1w9KgorXD0JTWF0Y2hlcyAwIG9yIDEgb2YgdGhlIHByZWNlZGluZyBhdG9tLCBhcyBtYW55IGFzIHBvc3NpYmxlLiB7bm90IGluIFZpfQorCUV4YW1wbGUJCW1hdGNoZXMgfgorCWZvb1w9CQkiZm8iIGFuZCAiZm9vIgorCisJCQkJCQkJKi9cPyoKK1w/CUp1c3QgbGlrZSBcPS4gIENhbm5vdCBiZSB1c2VkIHdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkcyB3aXRoIHRoZSAiPyIKKwljb21tYW5kLiB7bm90IGluIFZpfQorCisJCQkJCQkqL1x7KiAqRTU4KiAqRTYwKiAqRTU1NCoKK1x7bixtfQlNYXRjaGVzIG4gdG8gbSBvZiB0aGUgcHJlY2VkaW5nIGF0b20sIGFzIG1hbnkgYXMgcG9zc2libGUKK1x7bn0JTWF0Y2hlcyBuIG9mIHRoZSBwcmVjZWRpbmcgYXRvbQorXHtuLH0JTWF0Y2hlcyBhdCBsZWFzdCBuIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgbWFueSBhcyBwb3NzaWJsZQorXHssbX0JTWF0Y2hlcyAwIHRvIG0gb2YgdGhlIHByZWNlZGluZyBhdG9tLCBhcyBtYW55IGFzIHBvc3NpYmxlCitce30JTWF0Y2hlcyAwIG9yIG1vcmUgb2YgdGhlIHByZWNlZGluZyBhdG9tLCBhcyBtYW55IGFzIHBvc3NpYmxlIChsaWtlICopCisJCQkJCQkJKi9cey0qCitcey1uLG19CW1hdGNoZXMgbiB0byBtIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgZmV3IGFzIHBvc3NpYmxlCitcey1ufQltYXRjaGVzIG4gb2YgdGhlIHByZWNlZGluZyBhdG9tCitcey1uLH0JbWF0Y2hlcyBhdCBsZWFzdCBuIG9mIHRoZSBwcmVjZWRpbmcgYXRvbSwgYXMgZmV3IGFzIHBvc3NpYmxlCitcey0sbX0JbWF0Y2hlcyAwIHRvIG0gb2YgdGhlIHByZWNlZGluZyBhdG9tLCBhcyBmZXcgYXMgcG9zc2libGUKK1x7LX0JbWF0Y2hlcyAwIG9yIG1vcmUgb2YgdGhlIHByZWNlZGluZyBhdG9tLCBhcyBmZXcgYXMgcG9zc2libGUKKwl7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2V9CisKKwluIGFuZCBtIGFyZSBwb3NpdGl2ZSBkZWNpbWFsIG51bWJlcnMKKworCUlmIGEgIi0iIGFwcGVhcnMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICJ7IiwgdGhlbiBhIHNob3J0ZXN0IG1hdGNoCisJZmlyc3QgYWxnb3JpdGhtIGlzIHVzZWQgKHNlZSBleGFtcGxlIGJlbG93KS4gIEluIHBhcnRpY3VsYXIsICJcey19IiBpcworCXRoZSBzYW1lIGFzICIqIiBidXQgdXNlcyB0aGUgc2hvcnRlc3QgbWF0Y2ggZmlyc3QgYWxnb3JpdGhtLiAgQlVUOiBBCisJbWF0Y2ggdGhhdCBzdGFydHMgZWFybGllciBpcyBwcmVmZXJyZWQgb3ZlciBhIHNob3J0ZXIgbWF0Y2g6ICJhXHstfWIiCisJbWF0Y2hlcyAiYWFhYiIgaW4gInhhYWFiIi4KKworCUV4YW1wbGUJCQltYXRjaGVzIH4KKwlhYlx7MiwzfWMJCSJhYmJjIiBvciAiYWJiYmMiCisJYVx7NX0JCQkiYWFhYWEiLgorCWFiXHsyLH1jCQkiYWJiYyIsICJhYmJiYyIsICJhYmJiYmMiLCBldGMKKwlhYlx7LDN9YwkJImFjIiwgImFiYyIsICJhYmJjIiBvciAiYWJiYmMiLgorCWFbYmNdXHszfWQJCSJhYmJiZCIsICJhYmJjZCIsICJhY2JjZCIsICJhY2NjZCIsIGV0Yy4KKwlhXChiY1wpXHsxLDJ9ZAkJImFiY2QiIG9yICJhYmNiY2QiCisJYVtiY11cey19W2NkXQkJImFiYyIgaW4gImFiY2QiCisJYVtiY10qW2NkXQkJImFiY2QiIGluICJhYmNkIgorCisJVGhlIH0gbWF5IG9wdGlvbmFsbHkgYmUgcHJlY2VkZWQgd2l0aCBhIGJhY2tzbGFzaDogXHtuLG1cfS4KKworCQkJCQkJCSovXEA9KgorXEA9CU1hdGNoZXMgdGhlIHByZWNlZGluZyBhdG9tIHdpdGggemVybyB3aWR0aC4ge25vdCBpbiBWaX0KKwlMaWtlICIoPz1wYXR0ZXJuKSIgaW4gUGVybC4KKwlFeGFtcGxlCQkJbWF0Y2hlcyB+CisJZm9vXChiYXJcKVxAPQkJImZvbyIgaW4gImZvb2JhciIKKwlmb29cKGJhclwpXEA9Zm9vCW5vdGhpbmcKKwkJCQkJCQkqL3plcm8td2lkdGgqCisJV2hlbiB1c2luZyAiXEA9IiAob3IgIl4iLCAiJCIsICJcPCIsICJcPiIpIG5vIGNoYXJhY3RlcnMgYXJlIGluY2x1ZGVkCisJaW4gdGhlIG1hdGNoLiAgVGhlc2UgaXRlbXMgYXJlIG9ubHkgdXNlZCB0byBjaGVjayBpZiBhIG1hdGNoIGNhbiBiZQorCW1hZGUuICBUaGlzIGNhbiBiZSB0cmlja3ksIGJlY2F1c2UgYSBtYXRjaCB3aXRoIGZvbGxvd2luZyBpdGVtcyB3aWxsCisJYmUgZG9uZSBpbiB0aGUgc2FtZSBwb3NpdGlvbi4gIFRoZSBsYXN0IGV4YW1wbGUgYWJvdmUgd2lsbCBub3QgbWF0Y2gKKwkiZm9vYmFyZm9vIiwgYmVjYXVzZSBpdCB0cmllcyBtYXRjaCAiZm9vIiBpbiB0aGUgc2FtZSBwb3NpdGlvbiB3aGVyZQorCSJiYXIiIG1hdGNoZWQuCisKKwlOb3RlIHRoYXQgdXNpbmcgIlwmIiB3b3JrcyB0aGUgc2FtZSBhcyB1c2luZyAiXEA9IjogImZvb1wmLi4iIGlzIHRoZQorCXNhbWUgYXMgIlwoZm9vXClcQD0uLiIuICBCdXQgdXNpbmcgIlwmIiBpcyBlYXNpZXIsIHlvdSBkb24ndCBuZWVkIHRoZQorCWJyYWNlcy4KKworCisJCQkJCQkJKi9cQCEqCitcQCEJTWF0Y2hlcyB3aXRoIHplcm8gd2lkdGggaWYgdGhlIHByZWNlZGluZyBhdG9tIGRvZXMgTk9UIG1hdGNoIGF0IHRoZQorCWN1cnJlbnQgcG9zaXRpb24uIHwvemVyby13aWR0aHwge25vdCBpbiBWaX0KKwlMaWtlICcoPyFwYXR0ZXJuKSIgaW4gUGVybC4KKwlFeGFtcGxlCQkJbWF0Y2hlcyB+CisJZm9vXChiYXJcKVxAIQkJYW55ICJmb28iIG5vdCBmb2xsb3dlZCBieSAiYmFyIgorCWEuXHstfXBcQCEJCSJhIiwgImFwIiwgImFwcCIsIGV0Yy4gbm90IGZvbGxvd2VkIGJ5IGEgInAiCisJaWYgXChcKHRoZW5cKVxAIS5cKSokCSJpZiAiIG5vdCBmb2xsb3dlZCBieSAidGhlbiIKKworCVVzaW5nICJcQCEiIGlzIHRyaWNreSwgYmVjYXVzZSB0aGVyZSBhcmUgbWFueSBwbGFjZXMgd2hlcmUgYSBwYXR0ZXJuCisJZG9lcyBub3QgbWF0Y2guICAiYS4qcFxAISIgd2lsbCBtYXRjaCBmcm9tIGFuICJhIiB0byB0aGUgZW5kIG9mIHRoZQorCWxpbmUsIGJlY2F1c2UgIi4qIiBjYW4gbWF0Y2ggYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGxpbmUgYW5kIHRoZSAicCIKKwlkb2Vzbid0IG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICAiYS5cey19cFxAISIgd2lsbCBtYXRjaCBhbnkKKwkiYSIsICJhcCIsICJhYXAiLCBldGMuIHRoYXQgaXNuJ3QgZm9sbG93ZWQgYnkgYSAicCIsIGJlY2F1c2UgdGhlICIuIgorCWNhbiBtYXRjaCBhICJwIiBhbmQgInBcQCEiIGRvZXNuJ3QgbWF0Y2ggYWZ0ZXIgdGhhdC4KKworCVlvdSBjYW4ndCB1c2UgIlxAISIgdG8gbG9vayBmb3IgYSBub24tbWF0Y2ggYmVmb3JlIHRoZSBtYXRjaGluZworCXBvc2l0aW9uOiAiXChmb29cKVxAIWJhciIgd2lsbCBtYXRjaCAiYmFyIiBpbiAiZm9vYmFyIiwgYmVjYXVzZSBhdCB0aGUKKwlwb3NpdGlvbiB3aGVyZSAiYmFyIiBtYXRjaGVzLCAiZm9vIiBkb2VzIG5vdCBtYXRjaC4gIFRvIGF2b2lkIG1hdGNoaW5nCisJImZvb2JhciIgeW91IGNvdWxkIHVzZSAiXChmb29cKVxAIS4uLmJhciIsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0Y2ggYQorCWJhciBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLiBVc2UgIlwoZm9vXClcQDwhYmFyIi4KKworCQkJCQkJCSovXEA8PSoKK1xAPD0JTWF0Y2hlcyB3aXRoIHplcm8gd2lkdGggaWYgdGhlIHByZWNlZGluZyBhdG9tIG1hdGNoZXMganVzdCBiZWZvcmUgd2hhdAorCWZvbGxvd3MuIHwvemVyby13aWR0aHwge25vdCBpbiBWaX0KKwlMaWtlICcoPzw9cGF0dGVybikiIGluIFBlcmwsIGJ1dCBWaW0gYWxsb3dzIG5vbi1maXhlZC13aWR0aCBwYXR0ZXJucy4KKwlFeGFtcGxlCQkJbWF0Y2hlcyB+CisJXChhblxfc1wrXClcQDw9ZmlsZQkiZmlsZSIgYWZ0ZXIgImFuIiBhbmQgd2hpdGUgc3BhY2Ugb3IgYW4KKwkJCQllbmQtb2YtbGluZQorCUZvciBzcGVlZCBpdCdzIG9mdGVuIG11Y2ggYmV0dGVyIHRvIGF2b2lkIHRoaXMgbXVsdGkuICBUcnkgdXNpbmcgIlx6cyIKKwlpbnN0ZWFkIHwvXHpzfC4gIFRvIG1hdGNoIHRoZSBzYW1lIGFzIHRoZSBhYm92ZSBleGFtcGxlOgorCQlhblxfc1wrXHpzZmlsZQorCisJIlxAPD0iIGFuZCAiXEA8ISIgY2hlY2sgZm9yIG1hdGNoZXMganVzdCBiZWZvcmUgd2hhdCBmb2xsb3dzLgorCVRoZW9yZXRpY2FsbHkgdGhlc2UgbWF0Y2hlcyBjb3VsZCBzdGFydCBhbnl3aGVyZSBiZWZvcmUgdGhpcyBwb3NpdGlvbi4KKwlCdXQgdG8gbGltaXQgdGhlIHRpbWUgbmVlZGVkLCBvbmx5IHRoZSBsaW5lIHdoZXJlIHdoYXQgZm9sbG93cyBtYXRjaGVzCisJaXMgc2VhcmNoZWQsIGFuZCBvbmUgbGluZSBiZWZvcmUgdGhhdCAoaWYgdGhlcmUgaXMgb25lKS4gIFRoaXMgc2hvdWxkCisJYmUgc3VmZmljaWVudCB0byBtYXRjaCBtb3N0IHRoaW5ncyBhbmQgbm90IGJlIHRvbyBzbG93LgorCVRoZSBwYXJ0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyICJcQDw9IiBhbmQgIlxAPCEiIGFyZSBjaGVja2VkIGZvciBhCisJbWF0Y2ggZmlyc3QsIHRodXMgdGhpbmdzIGxpa2UgIlwxIiBkb24ndCB3b3JrIHRvIHJlZmVyZW5jZSBcKFwpIGluc2lkZQorCXRoZSBwcmVjZWRpbmcgYXRvbS4gIEl0IGRvZXMgd29yayB0aGUgb3RoZXIgd2F5IGFyb3VuZDoKKwlFeGFtcGxlCQkJbWF0Y2hlcyB+CisJXDFcQDw9LFwoW2Etel1cK1wpCSIsYWJjIiBpbiAiYWJjLGFiYyIKKworCQkJCQkJCSovXEA8ISoKK1xAPCEJTWF0Y2hlcyB3aXRoIHplcm8gd2lkdGggaWYgdGhlIHByZWNlZGluZyBhdG9tIGRvZXMgTk9UIG1hdGNoIGp1c3QKKwliZWZvcmUgd2hhdCBmb2xsb3dzLiAgVGh1cyB0aGlzIG1hdGNoZXMgaWYgdGhlcmUgaXMgbm8gcG9zaXRpb24gaW4gdGhlCisJY3VycmVudCBvciBwcmV2aW91cyBsaW5lIHdoZXJlIHRoZSBhdG9tIG1hdGNoZXMgc3VjaCB0aGF0IGl0IGVuZHMganVzdAorCWJlZm9yZSB3aGF0IGZvbGxvd3MuICB8L3plcm8td2lkdGh8IHtub3QgaW4gVml9CisJTGlrZSAnKD88IXBhdHRlcm4pIiBpbiBQZXJsLCBidXQgVmltIGFsbG93cyBub24tZml4ZWQtd2lkdGggcGF0dGVybnMuCisJVGhlIG1hdGNoIHdpdGggdGhlIHByZWNlZGluZyBhdG9tIGlzIG1hZGUgdG8gZW5kIGp1c3QgYmVmb3JlIHRoZSBtYXRjaAorCXdpdGggd2hhdCBmb2xsb3dzLCB0aHVzIGFuIGF0b20gdGhhdCBlbmRzIGluICIuKiIgd2lsbCB3b3JrLgorCVdhcm5pbmc6IFRoaXMgY2FuIGJlIHNsb3cgKGJlY2F1c2UgbWFueSBwb3NpdGlvbnMgbmVlZCB0byBiZSBjaGVja2VkCisJZm9yIGEgbWF0Y2gpLgorCUV4YW1wbGUJCQltYXRjaGVzIH4KKwlcKGZvb1wpXEA8IWJhcgkJYW55ICJiYXIiIHRoYXQncyBub3QgaW4gImZvb2JhciIKKwlcKFwvXC8uKlwpXEBcPCFpbgkiaW4iIHdoaWNoIGlzIG5vdCBhZnRlciAiLy8iCisKKwkJCQkJCQkqL1xAPioKK1xAPglNYXRjaGVzIHRoZSBwcmVjZWRpbmcgYXRvbSBsaWtlIG1hdGNoaW5nIGEgd2hvbGUgcGF0dGVybi4ge25vdCBpbiBWaX0KKwlMaWtlICcoPz5wYXR0ZXJuKSIgaW4gUGVybC4KKwlFeGFtcGxlCQltYXRjaGVzIH4KKwlcKGEqXClcQD5hCW5vdGhpbmcgKHRoZSAiYSoiIHRha2VzIGFsbCB0aGUgImEiJ3MsIHRoZXJlIGNhbid0IGJlCisJCQlhbm90aGVyIG9uZSBmb2xsb3dpbmcpCisKKwlUaGlzIG1hdGNoZXMgdGhlIHByZWNlZGluZyBhdG9tIGFzIGlmIGl0IHdhcyBhIHBhdHRlcm4gYnkgaXRzZWxmLiAgSWYKKwlpdCBkb2Vzbid0IG1hdGNoLCB0aGVyZSBpcyBubyByZXRyeSB3aXRoIHNob3J0ZXIgc3ViLW1hdGNoZXMgb3IKKwlhbnl0aGluZy4gIE9ic2VydmUgdGhpcyBkaWZmZXJlbmNlOiAiYSpiIiBhbmQgImEqYWIiIGJvdGggbWF0Y2gKKwkiYWFhYiIsIGJ1dCBpbiB0aGUgc2Vjb25kIGNhc2UgdGhlICJhKiIgbWF0Y2hlcyBvbmx5IHRoZSBmaXJzdCB0d28KKwkiYSJzLiAgIlwoYSpcKVxAPmFiIiB3aWxsIG5vdCBtYXRjaCAiYWFhYiIsIGJlY2F1c2UgdGhlICJhKiIgbWF0Y2hlcworCXRoZSAiYWFhIiAoYXMgbWFueSAiYSJzIGFzIHBvc3NpYmxlKSwgdGh1cyB0aGUgImFiIiBjYW4ndCBtYXRjaC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuICBPcmRpbmFyeSBhdG9tcwkJCQkJKnBhdHRlcm4tYXRvbXMqCisKK0FuIG9yZGluYXJ5IGF0b20gY2FuIGJlOgorCisJCQkJCQkJKi9eKgorXglBdCBiZWdpbm5pbmcgb2YgcGF0dGVybiBvciBhZnRlciAiXHwiLCAiXCgiLCAiXCUoIiBvciAiXG4iOiBtYXRjaGVzCisJc3RhcnQtb2YtbGluZTsgYXQgb3RoZXIgcG9zaXRpb25zLCBtYXRjaGVzIGxpdGVyYWwgJ14nLiB8L3plcm8td2lkdGh8CisJRXhhbXBsZQkJbWF0Y2hlcyB+CisJXmJlZXAoCQl0aGUgc3RhcnQgb2YgdGhlIEMgZnVuY3Rpb24gImJlZXAiIChwcm9iYWJseSkuCisKKwkJCQkJCQkqL1xeKgorXF4JTWF0Y2hlcyBsaXRlcmFsICdeJy4gIENhbiBiZSB1c2VkIGF0IGFueSBwb3NpdGlvbiBpbiB0aGUgcGF0dGVybi4KKworCQkJCQkJCSovXF9eKgorXF9eCU1hdGNoZXMgc3RhcnQtb2YtbGluZS4gfC96ZXJvLXdpZHRofCAgQ2FuIGJlIHVzZWQgYXQgYW55IHBvc2l0aW9uIGluCisJdGhlIHBhdHRlcm4uCisJRXhhbXBsZQkJbWF0Y2hlcyB+CisJXF9zKlxfXmZvbwl3aGl0ZSBzcGFjZSBhbmQgYmxhbmsgbGluZXMgYW5kIHRoZW4gImZvbyIgYXQKKwkJCXN0YXJ0LW9mLWxpbmUKKworCQkJCQkJCSovJCoKKyQJQXQgZW5kIG9mIHBhdHRlcm4gb3IgaW4gZnJvbnQgb2YgIlx8IiBvciAiXCkiICgifCIgb3IgIikiIGFmdGVyICJcdiIpOgorCW1hdGNoZXMgZW5kLW9mLWxpbmUgPEVPTD47IGF0IG90aGVyIHBvc2l0aW9ucywgbWF0Y2hlcyBsaXRlcmFsICckJy4KKwl8L3plcm8td2lkdGh8CisKKwkJCQkJCQkqL1wkKgorXCQJTWF0Y2hlcyBsaXRlcmFsICckJy4gIENhbiBiZSB1c2VkIGF0IGFueSBwb3NpdGlvbiBpbiB0aGUgcGF0dGVybi4KKworCQkJCQkJCSovXF8kKgorXF8kCU1hdGNoZXMgZW5kLW9mLWxpbmUuIHwvemVyby13aWR0aHwgIENhbiBiZSB1c2VkIGF0IGFueSBwb3NpdGlvbiBpbiB0aGUKKwlwYXR0ZXJuLiAgTm90ZSB0aGF0ICJhXF8kYiIgbmV2ZXIgbWF0Y2hlcywgc2luY2UgImIiIGNhbm5vdCBtYXRjaCBhbgorCWVuZC1vZi1saW5lLiAgVXNlICJhXG5iIiBpbnN0ZWFkIHwvXG58LgorCUV4YW1wbGUJCW1hdGNoZXMgfgorCWZvb1xfJFxfcyoJImZvbyIgYXQgZW5kLW9mLWxpbmUgYW5kIGZvbGxvd2luZyB3aGl0ZSBzcGFjZSBhbmQKKwkJCWJsYW5rIGxpbmVzCisKKy4JKHdpdGggJ25vbWFnaWMnOiBcLikJCQkJKi8uKiAqL1wuKgorCU1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIsIGJ1dCBub3QgYW4gZW5kLW9mLWxpbmUuCisKKwkJCQkJCQkqL1xfLioKK1xfLglNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIG9yIGVuZC1vZi1saW5lLgorCUNhcmVmdWw6ICJcXy4qIiBtYXRjaGVzIGFsbCB0ZXh0IHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciEKKworCQkJCQkJCSovXDwqCitcPAlNYXRjaGVzIHRoZSBiZWdpbm5pbmcgb2YgYSB3b3JkOiBUaGUgbmV4dCBjaGFyIGlzIHRoZSBmaXJzdCBjaGFyIG9mIGEKKwl3b3JkLiAgVGhlICdpc2tleXdvcmQnIG9wdGlvbiBzcGVjaWZpZXMgd2hhdCBpcyBhIHdvcmQgY2hhcmFjdGVyLgorCXwvemVyby13aWR0aHwKKworCQkJCQkJCSovXD4qCitcPglNYXRjaGVzIHRoZSBlbmQgb2YgYSB3b3JkOiBUaGUgcHJldmlvdXMgY2hhciBpcyB0aGUgbGFzdCBjaGFyIG9mIGEKKwl3b3JkLiBUaGUgJ2lza2V5d29yZCcgb3B0aW9uIHNwZWNpZmllcyB3aGF0IGlzIGEgd29yZCBjaGFyYWN0ZXIuCisJfC96ZXJvLXdpZHRofAorCisJCQkJCQkJKi9cenMqCitcenMJTWF0Y2hlcyBhdCBhbnkgcG9zaXRpb24sIGFuZCBzZXRzIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2ggdGhlcmU6IFRoZQorCW5leHQgY2hhciBpcyB0aGUgZmlyc3QgY2hhciBvZiB0aGUgd2hvbGUgbWF0Y2guIHwvemVyby13aWR0aHwKKwlFeGFtcGxlOiA+CisJCS9eXHMqXHpzaWYKKzwJbWF0Y2hlcyBhbiAiaWYiIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUsIGlnbm9yaW5nIHdoaXRlIHNwYWNlLgorCUNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvbmUgZW5jb3VudGVyZWQgaW4gYSBtYXRjaGluZworCWJyYW5jaCBpcyB1c2VkLiBFeGFtcGxlOiA+CisJCS9cKC5cey19XHpzRmFiXClcezN9Cis8CUZpbmRzIHRoZSB0aGlyZCBvY2N1cnJlbmNlIG9mICJGYWIiLgorCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3N5bnRheCBmZWF0dXJlfQorCQkJCQkJCSovXHplKgorXHplCU1hdGNoZXMgYXQgYW55IHBvc2l0aW9uLCBhbmQgc2V0cyB0aGUgZW5kIG9mIHRoZSBtYXRjaCB0aGVyZTogVGhlCisJcHJldmlvdXMgY2hhciBpcyB0aGUgbGFzdCBjaGFyIG9mIHRoZSB3aG9sZSBtYXRjaC4gfC96ZXJvLXdpZHRofAorCUNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvbmUgZW5jb3VudGVyZWQgaW4gYSBtYXRjaGluZworCWJyYW5jaCBpcyB1c2VkLgorCUV4YW1wbGU6ICJlbmRcemVcKGlmXHxmb3JcKSIgbWF0Y2hlcyB0aGUgImVuZCIgaW4gImVuZGlmIiBhbmQKKwkiZW5kZm9yIi4KKwl7bm90IGluIFZpfSB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtzeW50YXggZmVhdHVyZX0KKworCQkJCQkJKi9cJV4qICpzdGFydC1vZi1maWxlKgorXCVeCU1hdGNoZXMgc3RhcnQgb2YgdGhlIGZpbGUuICBXaGVuIG1hdGNoaW5nIHdpdGggYSBzdHJpbmcsIG1hdGNoZXMgdGhlCisJc3RhcnQgb2YgdGhlIHN0cmluZy4ge25vdCBpbiBWaX0KKwlGb3IgZXhhbXBsZSwgdG8gZmluZCB0aGUgZmlyc3QgIlZJTSIgaW4gYSBmaWxlOiA+CisJCS9cJV5cXy5cey19XHpzVklNCis8CisJCQkJCQkqL1wlJCogKmVuZC1vZi1maWxlKgorXCUkCU1hdGNoZXMgZW5kIG9mIHRoZSBmaWxlLiAgV2hlbiBtYXRjaGluZyB3aXRoIGEgc3RyaW5nLCBtYXRjaGVzIHRoZQorCWVuZCBvZiB0aGUgc3RyaW5nLiB7bm90IGluIFZpfQorCU5vdGUgdGhhdCB0aGlzIGRvZXMgTk9UIGZpbmQgdGhlIGxhc3QgIlZJTSIgaW4gYSBmaWxlOiA+CisJCS9WSU1cXy5cey19XCUkCis8CUl0IHdpbGwgZmluZCB0aGUgbmV4dCBWSU0sIGJlY2F1c2UgdGhlIHBhcnQgYWZ0ZXIgaXQgd2lsbCBhbHdheXMKKwltYXRjaC4gIFRoaXMgb25lIHdpbGwgZmluZCB0aGUgbGFzdCAiVklNIiBpbiB0aGUgZmlsZTogPgorCQkvVklNXHplXChcKFZJTVwpXEAhXF8uXCkqXCUkCis8CVRoaXMgdXNlcyB8L1xAIXwgdG8gYXNjZXJ0YWluIHRoYXQgIlZJTSIgZG9lcyBOT1QgbWF0Y2ggaW4gYW55CisJcG9zaXRpb24gYWZ0ZXIgdGhlIGZpcnN0ICJWSU0iLgorCVNlYXJjaGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIGZpbGUgYmFja3dhcmRzIGlzIGVhc2llciEKKworCQkJCQkJKi9cJSMqICpjdXJzb3ItcG9zaXRpb24qCitcJSMJTWF0Y2hlcyB3aXRoIHRoZSBjdXJzb3IgcG9zaXRpb24uICBPbmx5IHdvcmtzIHdoZW4gbWF0Y2hpbmcgaW4gYQorCWJ1ZmZlciBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cuIHtub3QgaW4gVml9CisJV0FSTklORzogV2hlbiB0aGUgY3Vyc29yIGlzIG1vdmVkIGFmdGVyIHRoZSBwYXR0ZXJuIHdhcyB1c2VkLCB0aGUKKwlyZXN1bHQgYmVjb21lcyBpbnZhbGlkLiAgVmltIGRvZXNuJ3QgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIG1hdGNoZXMuCisJVGhpcyBpcyBlc3BlY2lhbGx5IHJlbGV2YW50IGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIGFuZCAnaGxzZWFyY2gnLgorCUluIG90aGVyIHdvcmRzOiBXaGVuIHRoZSBjdXJzb3IgbW92ZXMgdGhlIGRpc3BsYXkgaXNuJ3QgdXBkYXRlZCBmb3IKKwl0aGlzIGNoYW5nZS4gIEFuIHVwZGF0ZSBpcyBkb25lIGZvciBsaW5lcyB3aGljaCBhcmUgY2hhbmdlZCAodGhlIHdob2xlCisJbGluZSBpcyB1cGRhdGVkKSBvciB3aGVuIHVzaW5nIHRoZSB8Q1RSTC1MfCBjb21tYW5kICh0aGUgd2hvbGUgc2NyZWVuCisJaXMgdXBkYXRlZCkuICBFeGFtcGxlLCB0byBoaWdobGlnaHQgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvcjogPgorCQkvXGsqXCUjXGsqCis8CVdoZW4gJ2hsc2VhcmNoJyBpcyBzZXQgYW5kIHlvdSBtb3ZlIHRoZSBjdXJzb3IgYXJvdW5kIGFuZCBtYWtlIGNoYW5nZXMKKwl0aGlzIHdpbGwgY2xlYXJseSBzaG93IHdoZW4gdGhlIG1hdGNoIGlzIHVwZGF0ZWQgb3Igbm90LgorCisJCQkJCQkqL1wlbCogKi9cJT5sKiAqL1wlPGwqCitcJTIzbAlNYXRjaGVzIGluIGEgc3BlY2lmaWMgbGluZS4KK1wlPDIzbAlNYXRjaGVzIGFib3ZlIGEgc3BlY2lmaWMgbGluZS4KK1wlPjIzbAlNYXRjaGVzIGJlbG93IGEgc3BlY2lmaWMgbGluZS4KKwlUaGVzZSB0aHJlZSBjYW4gYmUgdXNlZCB0byBtYXRjaCBzcGVjaWZpYyBsaW5lcyBpbiBhIGJ1ZmZlci4gIFRoZSAiMjMiCisJY2FuIGJlIGFueSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCBsaW5lIGlzIDEuIHtub3QgaW4gVml9CisJV0FSTklORzogV2hlbiBpbnNlcnRpbmcgb3IgZGVsZXRpbmcgbGluZXMgVmltIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKKwl1cGRhdGUgdGhlIG1hdGNoZXMuICBUaGlzIG1lYW5zIFN5bnRheCBoaWdobGlnaHRpbmcgcXVpY2tseSBiZWNvbWVzCisJd3JvbmcuCisJRXhhbXBsZSwgdG8gaGlnaGxpZ2h0IHRoZSBsaW5lIHdoZXJlIHRoZSBjdXJzb3IgY3VycmVudGx5IGlzOiA+CisJCTpleGUgJy9cJScgLiBsaW5lKCIuIikgLiAnbC4qJworPAlXaGVuICdobHNlYXJjaCcgaXMgc2V0IGFuZCB5b3UgbW92ZSB0aGUgY3Vyc29yIGFyb3VuZCBhbmQgbWFrZSBjaGFuZ2VzCisJdGhpcyB3aWxsIGNsZWFybHkgc2hvdyB3aGVuIHRoZSBtYXRjaCBpcyB1cGRhdGVkIG9yIG5vdC4KKworCQkJCQkJKi9cJWMqICovXCU+YyogKi9cJTxjKgorXCUyM2MJTWF0Y2hlcyBpbiBhIHNwZWNpZmljIGNvbHVtbi4KK1wlPDIzYwlNYXRjaGVzIGJlZm9yZSBhIHNwZWNpZmljIGNvbHVtbi4KK1wlPjIzYwlNYXRjaGVzIGFmdGVyIGEgc3BlY2lmaWMgY29sdW1uLgorCVRoZXNlIHRocmVlIGNhbiBiZSB1c2VkIHRvIG1hdGNoIHNwZWNpZmljIGNvbHVtbnMgaW4gYSBidWZmZXIgb3IKKwlzdHJpbmcuICBUaGUgIjIzIiBjYW4gYmUgYW55IGNvbHVtbiBudW1iZXIuICBUaGUgZmlyc3QgY29sdW1uIGlzIDEuCisJQWN0dWFsbHksIHRoZSBjb2x1bW4gaXMgdGhlIGJ5dGUgbnVtYmVyICh0aHVzIGl0J3Mgbm90IGV4YWN0bHkgcmlnaHQKKwlmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzKS4gIHtub3QgaW4gVml9CisJV0FSTklORzogV2hlbiBpbnNlcnRpbmcgb3IgZGVsZXRpbmcgdGV4dCBWaW0gZG9lcyBub3QgYXV0b21hdGljYWxseQorCXVwZGF0ZSB0aGUgbWF0Y2hlcy4gIFRoaXMgbWVhbnMgU3ludGF4IGhpZ2hsaWdodGluZyBxdWlja2x5IGJlY29tZXMKKwl3cm9uZy4KKwlFeGFtcGxlLCB0byBoaWdobGlnaHQgdGhlIGNvbHVtbiB3aGVyZSB0aGUgY3Vyc29yIGN1cnJlbnRseSBpczogPgorCQk6ZXhlICcvXCUnIC4gY29sKCIuIikgLiAnYycKKzwJV2hlbiAnaGxzZWFyY2gnIGlzIHNldCBhbmQgeW91IG1vdmUgdGhlIGN1cnNvciBhcm91bmQgYW5kIG1ha2UgY2hhbmdlcworCXRoaXMgd2lsbCBjbGVhcmx5IHNob3cgd2hlbiB0aGUgbWF0Y2ggaXMgdXBkYXRlZCBvciBub3QuCisJRXhhbXBsZSBmb3IgbWF0Y2hpbmcgYSBzaW5nbGUgYnl0ZSBpbiBjb2x1bW4gNDQ6ID4KKwkJL1wlPjQzYy5cJTw0NmMKKzwJTm90ZSB0aGF0ICJcJTw0NmMiIG1hdGNoZXMgaW4gY29sdW1uIDQ1IHdoZW4gdGhlICIuIiBtYXRjaGVzIGEgYnl0ZSBpbgorCWNvbHVtbiA0NC4KKwkJCQkJCSovXCV2KiAqL1wlPnYqICovXCU8dioKK1wlMjN2CU1hdGNoZXMgaW4gYSBzcGVjaWZpYyB2aXJ0dWFsIGNvbHVtbi4KK1wlPDIzdglNYXRjaGVzIGJlZm9yZSBhIHNwZWNpZmljIHZpcnR1YWwgY29sdW1uLgorXCU+MjN2CU1hdGNoZXMgYWZ0ZXIgYSBzcGVjaWZpYyB2aXJ0dWFsIGNvbHVtbi4KKwlUaGVzZSB0aHJlZSBjYW4gYmUgdXNlZCB0byBtYXRjaCBzcGVjaWZpYyB2aXJ0dWFsIGNvbHVtbnMgaW4gYSBidWZmZXIKKwlvciBzdHJpbmcuICBXaGVuIG5vdCBtYXRjaGluZyB3aXRoIGEgYnVmZmVyIGluIGEgd2luZG93LCB0aGUgb3B0aW9uCisJdmFsdWVzIG9mIHRoZSBjdXJyZW50IHdpbmRvdyBhcmUgdXNlZCAoZS5nLiwgJ3RhYnN0b3AnKS4KKwlUaGUgIjIzIiBjYW4gYmUgYW55IGNvbHVtbiBudW1iZXIuICBUaGUgZmlyc3QgY29sdW1uIGlzIDEuCisJTm90ZSB0aGF0IHNvbWUgdmlydHVhbCBjb2x1bW4gcG9zaXRpb25zIHdpbGwgbmV2ZXIgbWF0Y2gsIGJlY2F1c2UgdGhleQorCWFyZSBoYWxmd2F5IGEgVGFiIG9yIG90aGVyIGNoYXJhY3RlciB0aGF0IG9jY3VwaWVzIG1vcmUgdGhhbiBvbmUKKwlzY3JlZW4gY2hhcmFjdGVyLiAge25vdCBpbiBWaX0KKwlXQVJOSU5HOiBXaGVuIGluc2VydGluZyBvciBkZWxldGluZyB0ZXh0IFZpbSBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5CisJdXBkYXRlIHRoZSBtYXRjaGVzLiAgVGhpcyBtZWFucyBTeW50YXggaGlnaGxpZ2h0aW5nIHF1aWNrbHkgYmVjb21lcworCXdyb25nLgorCUV4YW1wbGUsIHRvIGhpZ2hsaWdodCB0aGUgYWxsIGNoYXJhY3RlcnMgYWZ0ZXIgdmlydHVhbCBjb2x1bW4gNzI6ID4KKwkJL1wlPjcydi4qCis8CVdoZW4gJ2hsc2VhcmNoJyBpcyBzZXQgYW5kIHlvdSBtb3ZlIHRoZSBjdXJzb3IgYXJvdW5kIGFuZCBtYWtlIGNoYW5nZXMKKwl0aGlzIHdpbGwgY2xlYXJseSBzaG93IHdoZW4gdGhlIG1hdGNoIGlzIHVwZGF0ZWQgb3Igbm90LgorCVRvIG1hdGNoIHRoZSB0ZXh0IHVwIHRvIGNvbHVtbiAxNzogPgorCQkvLipcJTE3dgorPAlDb2x1bW4gMTcgaXMgbm90IGluY2x1ZGVkLCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgIlwlMTd2IiBtYXRjaGVzLAorCWFuZCBzaW5jZSB0aGlzIGlzIGEgfC96ZXJvLXdpZHRofCBtYXRjaCwgY29sdW1uIDE3IGlzbid0IGluY2x1ZGVkIGluCisJdGhlIG1hdGNoLiAgVGhpcyBkb2VzIHRoZSBzYW1lOiA+CisJCS8uKlwlPDE4dgorPAorCitDaGFyYWN0ZXIgY2xhc3Nlczoge25vdCBpbiBWaX0KK1xpCWlkZW50aWZpZXIgY2hhcmFjdGVyIChzZWUgJ2lzaWRlbnQnIG9wdGlvbikJKi9caSoKK1xJCWxpa2UgIlxpIiwgYnV0IGV4Y2x1ZGluZyBkaWdpdHMJCQkqL1xJKgorXGsJa2V5d29yZCBjaGFyYWN0ZXIgKHNlZSAnaXNrZXl3b3JkJyBvcHRpb24pCSovXGsqCitcSwlsaWtlICJcayIsIGJ1dCBleGNsdWRpbmcgZGlnaXRzCQkJKi9cSyoKK1xmCWZpbGUgbmFtZSBjaGFyYWN0ZXIgKHNlZSAnaXNmbmFtZScgb3B0aW9uKQkqL1xmKgorXEYJbGlrZSAiXGYiLCBidXQgZXhjbHVkaW5nIGRpZ2l0cwkJCSovXEYqCitccAlwcmludGFibGUgY2hhcmFjdGVyIChzZWUgJ2lzcHJpbnQnIG9wdGlvbikJKi9ccCoKK1xQCWxpa2UgIlxwIiwgYnV0IGV4Y2x1ZGluZyBkaWdpdHMJCQkqL1xQKgorCitOT1RFOiB0aGUgYWJvdmUgYWxzbyB3b3JrIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBUaGUgb25lcyBiZWxvdyBvbmx5CittYXRjaCBBU0NJSSBjaGFyYWN0ZXJzLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIHJhbmdlLgorCisJCQkJCQkqd2hpdGVzcGFjZSogKndoaXRlLXNwYWNlKgorXHMJd2hpdGVzcGFjZSBjaGFyYWN0ZXI6IDxTcGFjZT4gYW5kIDxUYWI+CQkqL1xzKgorXFMJbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyOyBvcHBvc2l0ZSBvZiBccwkqL1xTKgorXGQJZGlnaXQ6CQkJCVswLTldCQkqL1xkKgorXEQJbm9uLWRpZ2l0OgkJCVteMC05XQkJKi9cRCoKK1x4CWhleCBkaWdpdDoJCQlbMC05QS1GYS1mXQkqL1x4KgorXFgJbm9uLWhleCBkaWdpdDoJCQlbXjAtOUEtRmEtZl0JKi9cWCoKK1xvCW9jdGFsIGRpZ2l0OgkJCVswLTddCQkqL1xvKgorXE8Jbm9uLW9jdGFsIGRpZ2l0OgkJW14wLTddCQkqL1xPKgorXHcJd29yZCBjaGFyYWN0ZXI6CQkJWzAtOUEtWmEtel9dCSovXHcqCitcVwlub24td29yZCBjaGFyYWN0ZXI6CQlbXjAtOUEtWmEtel9dCSovXFcqCitcaAloZWFkIG9mIHdvcmQgY2hhcmFjdGVyOgkJW0EtWmEtel9dCSovXGgqCitcSAlub24taGVhZCBvZiB3b3JkIGNoYXJhY3RlcjoJW15BLVphLXpfXQkqL1xIKgorXGEJYWxwaGFiZXRpYyBjaGFyYWN0ZXI6CQlbQS1aYS16XQkqL1xhKgorXEEJbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVyOglbXkEtWmEtel0JKi9cQSoKK1xsCWxvd2VyY2FzZSBjaGFyYWN0ZXI6CQlbYS16XQkJKi9cbCoKK1xMCW5vbi1sb3dlcmNhc2UgY2hhcmFjdGVyOglbXmEtel0JCSovXEwqCitcdQl1cHBlcmNhc2UgY2hhcmFjdGVyOgkJW0EtWl0JCSovXHUqCitcVQlub24tdXBwZXJjYXNlIGNoYXJhY3RlcgkJW15BLVpdCQkqL1xVKgorCisJTk9URTogVXNpbmcgdGhlIGF0b20gaXMgZmFzdGVyIHRoYW4gdGhlIFtdIGZvcm0uCisKKwlOT1RFOiAnaWdub3JlY2FzZScsICJcYyIgYW5kICJcQyIgYXJlIG5vdCB1c2VkIGJ5IGNoYXJhY3RlciBjbGFzc2VzLgorCisJCQkqL1xfKiAqRTYzKiAqL1xfaSogKi9cX0kqICovXF9rKiAqL1xfSyogKi9cX2YqICovXF9GKgorCQkJKi9cX3AqICovXF9QKiAqL1xfcyogKi9cX1MqICovXF9kKiAqL1xfRCogKi9cX3gqICovXF9YKgorCQkJKi9cX28qICovXF9PKiAqL1xfdyogKi9cX1cqICovXF9oKiAqL1xfSCogKi9cX2EqICovXF9BKgorCQkJKi9cX2wqICovXF9MKiAqL1xfdSogKi9cX1UqCitcX3gJV2hlcmUgIngiIGlzIGFueSBvZiB0aGUgY2hhcmFjdGVycyBhYm92ZTogVGhlIGNoYXJhY3RlciBjbGFzcyB3aXRoCisJZW5kLW9mLWxpbmUgYWRkZWQKKyhlbmQgb2YgY2hhcmFjdGVyIGNsYXNzZXMpCisKK1xlCW1hdGNoZXMgPEVzYz4JCQkJCSovXGUqCitcdAltYXRjaGVzIDxUYWI+CQkJCQkqL1x0KgorXHIJbWF0Y2hlcyA8Q1I+CQkJCQkqL1xyKgorXGIJbWF0Y2hlcyA8QlM+CQkJCQkqL1xiKgorXG4JbWF0Y2hlcyBhbiBlbmQtb2YtbGluZQkJCQkqL1xuKgorCVdoZW4gbWF0Y2hpbmcgaW4gYSBzdHJpbmcgaW5zdGVhZCBvZiBidWZmZXIgdGV4dCBhIGxpdGVyYWwgbmV3bGluZQorCWNoYXJhY3RlciBpcyBtYXRjaGVkLgorCit+CW1hdGNoZXMgdGhlIGxhc3QgZ2l2ZW4gc3Vic3RpdHV0ZSBzdHJpbmcJKi9+KiAqL1x+KgorCitcKFwpCUEgcGF0dGVybiBlbmNsb3NlZCBieSBlc2NhcGVkIHBhcmVudGhlc2VzLgkqL1woKiAqL1woXCkqICovXCkqCisJRS5nLiwgIlwoXmFcKSIgbWF0Y2hlcyAnYScgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4gICpFNTEqICpFNTQqICpFNTUqCisKK1wxICAgICAgTWF0Y2hlcyB0aGUgc2FtZSBzdHJpbmcgdGhhdCB3YXMgbWF0Y2hlZCBieQkqL1wxKiAqRTY1KgorCXRoZSBmaXJzdCBzdWItZXhwcmVzc2lvbiBpbiBcKCBhbmQgXCkuIHtub3QgaW4gVml9CisJRXhhbXBsZTogIlwoW2Etel1cKS5cMSIgbWF0Y2hlcyAiYXRhIiwgImVoZSIsICJ0b3QiLCBldGMuCitcMiAgICAgIExpa2UgIlwxIiwgYnV0IHVzZXMgc2Vjb25kIHN1Yi1leHByZXNzaW9uLAkqL1wyKgorICAgLi4uCQkJCQkJCSovXDMqCitcOSAgICAgIExpa2UgIlwxIiwgYnV0IHVzZXMgbmludGggc3ViLWV4cHJlc3Npb24uCSovXDkqCisJTm90ZTogVGhlIG51bWJlcmluZyBvZiBncm91cHMgaXMgZG9uZSBiYXNlZCBvbiB3aGljaCAiXCgiIGNvbWVzIGZpcnN0CisJaW4gdGhlIHBhdHRlcm4gKGdvaW5nIGxlZnQgdG8gcmlnaHQpLCBOT1QgYmFzZWQgb24gd2hhdCBpcyBtYXRjaGVkCisJZmlyc3QuCisKK1wlKFwpCUEgcGF0dGVybiBlbmNsb3NlZCBieSBlc2NhcGVkIHBhcmVudGhlc2VzLgkqL1wlKFwpKiAqL1wlKCogKkU1MyoKKwlKdXN0IGxpa2UgXChcKSwgYnV0IHdpdGhvdXQgY291bnRpbmcgaXQgYXMgYSBzdWItZXhwcmVzc2lvbi4gIFRoaXMKKwlhbGxvd3MgdXNpbmcgbW9yZSBncm91cHMgYW5kIGl0J3MgYSBsaXR0bGUgYml0IGZhc3Rlci4KKwl7bm90IGluIFZpfQorCit4CUEgc2luZ2xlIGNoYXJhY3Rlciwgd2l0aCBubyBzcGVjaWFsIG1lYW5pbmcsIG1hdGNoZXMgaXRzZWxmCisKKwkJCQkJCQkqL1wqICovXFwqCitceAlBIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIHNpbmdsZSBjaGFyYWN0ZXIsIHdpdGggbm8gc3BlY2lhbCBtZWFuaW5nLAorCWlzIHJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9ucworCitbXQkod2l0aCAnbm9tYWdpYyc6IFxbXSkJCSovW10qICovXFtdKiAqL1xfW10qICovY29sbGVjdGlvbioKK1xfW10KKwlBIGNvbGxlY3Rpb24uIFRoaXMgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGVuY2xvc2VkIGluIGJyYWNrZXRzLgorCUl0IG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlIGNvbGxlY3Rpb24uCisJRXhhbXBsZQkJbWF0Y2hlcyB+CisJW3h5el0JCWFueSAneCcsICd5JyBvciAneicKKwlbYS16QS1aXSQJYW55IGFscGhhYmV0aWMgY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgYSBsaW5lCisJXGNbYS16XSQJc2FtZQorCisJV2l0aCAiXF8iIHByZXBlbmRlZCB0aGUgY29sbGVjdGlvbiBhbHNvIGluY2x1ZGVzIHRoZSBlbmQtb2YtbGluZS4KKwlUaGUgc2FtZSBjYW4gYmUgZG9uZSBieSBpbmNsdWRpbmcgIlxuIiBpbiB0aGUgY29sbGVjdGlvbi4gIFRoZQorCWVuZC1vZi1saW5lIGlzIGFsc28gbWF0Y2hlZCB3aGVuIHRoZSBjb2xsZWN0aW9uIHN0YXJ0cyB3aXRoICJeIiEgIFRodXMKKwkiXF9bXmFiXSIgbWF0Y2hlcyB0aGUgZW5kLW9mLWxpbmUgYW5kIGFueSBjaGFyYWN0ZXIgYnV0ICJhIiBhbmQgImIiLgorCVRoaXMgbWFrZXMgaXQgVmkgY29tcGF0aWJsZTogV2l0aG91dCB0aGUgIlxfIiBvciAiXG4iIHRoZSBjb2xsZWN0aW9uCisJZG9lcyBub3QgbWF0Y2ggYW4gZW5kLW9mLWxpbmUuCisKKwlJZiB0aGUgc2VxdWVuY2UgYmVnaW5zIHdpdGggIl4iLCBpdCBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIE5PVAorCWluIHRoZSBjb2xsZWN0aW9uOiAiW154eXpdIiBtYXRjaGVzIGFueXRoaW5nIGJ1dCAneCcsICd5JyBhbmQgJ3onLgorCS0gSWYgdHdvIGNoYXJhY3RlcnMgaW4gdGhlIHNlcXVlbmNlIGFyZSBzZXBhcmF0ZWQgYnkgJy0nLCB0aGlzIGlzCisJICBzaG9ydGhhbmQgZm9yIHRoZSBmdWxsIGxpc3Qgb2YgQVNDSUkgY2hhcmFjdGVycyBiZXR3ZWVuIHRoZW0uICBFLmcuLAorCSAgIlswLTldIiBtYXRjaGVzIGFueSBkZWNpbWFsIGRpZ2l0LgorCS0gQSBjaGFyYWN0ZXIgY2xhc3MgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgdG8gdGhlIHNldCBvZiBjaGFyYWN0ZXJzCisJICBiZWxvbmdpbmcgdG8gdGhhdCBjaGFyYWN0ZXIgY2xhc3MuICBUaGUgZm9sbG93aW5nIGNoYXJhY3RlciBjbGFzc2VzCisJICBhcmUgc3VwcG9ydGVkOgorCQkJICBOYW1lCQlDb250ZW50cyB+CisqWzphbG51bTpdKgkJICBbOmFsbnVtOl0gICAgIGxldHRlcnMgYW5kIGRpZ2l0cworKls6YWxwaGE6XSoJCSAgWzphbHBoYTpdICAgICBsZXR0ZXJzCisqWzpibGFuazpdKgkJICBbOmJsYW5rOl0gICAgIHNwYWNlIGFuZCB0YWIgY2hhcmFjdGVycworKls6Y250cmw6XSoJCSAgWzpjbnRybDpdICAgICBjb250cm9sIGNoYXJhY3RlcnMKKypbOmRpZ2l0Ol0qCQkgIFs6ZGlnaXQ6XSAgICAgZGVjaW1hbCBkaWdpdHMKKypbOmdyYXBoOl0qCQkgIFs6Z3JhcGg6XSAgICAgcHJpbnRhYmxlIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHNwYWNlCisqWzpsb3dlcjpdKgkJICBbOmxvd2VyOl0gICAgIGxvd2VyY2FzZSBsZXR0ZXJzIChhbGwgbGV0dGVycyB3aGVuCisJCQkJCSdpZ25vcmVjYXNlJyBpcyB1c2VkKQorKls6cHJpbnQ6XSoJCSAgWzpwcmludDpdICAgICBwcmludGFibGUgY2hhcmFjdGVycyBpbmNsdWRpbmcgc3BhY2UKKypbOnB1bmN0Ol0qCQkgIFs6cHVuY3Q6XSAgICAgcHVuY3R1YXRpb24gY2hhcmFjdGVycworKls6c3BhY2U6XSoJCSAgWzpzcGFjZTpdICAgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKypbOnVwcGVyOl0qCQkgIFs6dXBwZXI6XSAgICAgdXBwZXJjYXNlIGxldHRlcnMgKGFsbCBsZXR0ZXJzIHdoZW4KKwkJCQkJJ2lnbm9yZWNhc2UnIGlzIHVzZWQpCisqWzp4ZGlnaXQ6XSoJCSAgWzp4ZGlnaXQ6XSAgICBoZXhhZGVjaW1hbCBkaWdpdHMKKypbOnJldHVybjpdKgkJICBbOnJldHVybjpdCXRoZSA8Q1I+IGNoYXJhY3RlcgorKls6dGFiOl0qCQkgIFs6dGFiOl0JdGhlIDxUYWI+IGNoYXJhY3RlcgorKls6ZXNjYXBlOl0qCQkgIFs6ZXNjYXBlOl0JdGhlIDxFc2M+IGNoYXJhY3RlcgorKls6YmFja3NwYWNlOl0qCQkgIFs6YmFja3NwYWNlOl0JdGhlIDxCUz4gY2hhcmFjdGVyCisJICBUaGUgYnJhY2tldHMgaW4gY2hhcmFjdGVyIGNsYXNzIGV4cHJlc3Npb25zIGFyZSBhZGRpdGlvbmFsIHRvIHRoZQorCSAgYnJhY2tldHMgZGVsaW1pdGluZyBhIGNvbGxlY3Rpb24uICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBpcyBhCisJICBwbGF1c2libGUgcGF0dGVybiBmb3IgYSBVTklYIGZpbGVuYW1lOiAiWy0uL1s6YWxudW06XV9+XVwrIiBUaGF0IGlzLAorCSAgYSBsaXN0IG9mIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGVhY2ggb2Ygd2hpY2ggaXMgZWl0aGVyICctJywgJy4nLAorCSAgJy8nLCBhbHBoYWJldGljLCBudW1lcmljLCAnXycgb3IgJ34nLgorCSAgVGhlc2UgaXRlbXMgb25seSB3b3JrIGZvciA4LWJpdCBjaGFyYWN0ZXJzLgorCQkJCQkJCSAgKi9cXSoKKwktIFRvIGluY2x1ZGUgYSBsaXRlcmFsICddJywgJ14nLCAnLScgb3IgJ1wnIGluIHRoZSBjb2xsZWN0aW9uLCBwdXQgYQorCSAgYmFja3NsYXNoIGJlZm9yZSBpdDogIlt4eXpcXV0iLCAiW1xeeHl6XSIsICJbeHlcLXpdIiBhbmQgIlt4eXpcXF0iLgorCSAgKE5vdGU6IFBPU0lYIGRvZXMgbm90IHN1cHBvcnQgdGhlIHVzZSBvZiBhIGJhY2tzbGFzaCB0aGlzIHdheSkuICBGb3IKKwkgICddJyB5b3UgY2FuIGFsc28gbWFrZSBpdCB0aGUgZmlyc3QgY2hhcmFjdGVyIChmb2xsb3dpbmcgYSBwb3NzaWJsZQorCSAgIl4iKTogICJbXXh5el0iIG9yICJbXl14eXpdIiB7bm90IGluIFZpfS4KKwkgIEZvciAnLScgeW91IGNhbiBhbHNvIG1ha2UgaXQgdGhlIGZpcnN0IG9yIGxhc3QgY2hhcmFjdGVyOiAiWy14eXpdIiwKKwkgICJbXi14eXpdIiBvciAiW3h5ei1dIi4gIEZvciAnXCcgeW91IGNhbiBhbHNvIGxldCBpdCBiZSBmb2xsb3dlZCBieQorCSAgYW55IGNoYXJhY3RlciB0aGF0J3Mgbm90IGluICJeXS1cYmVydG4iLiAgIltceHl6XSIgbWF0Y2hlcyAnXCcsICd4JywKKwkgICd5JyBhbmQgJ3onLiAgSXQncyBiZXR0ZXIgdG8gdXNlICJcXCIgdGhvdWdoLCBmdXR1cmUgZXhwYW5zaW9ucyBtYXkKKwkgIHVzZSBvdGhlciBjaGFyYWN0ZXJzIGFmdGVyICdcJy4KKwktIFRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb25zIGFyZSBhY2NlcHRlZCB3aGVuIHRoZSAnbCcgZmxhZyBpcyBub3QKKwkgIGluY2x1ZGVkIGluICdjcG9wdGlvbnMnIHtub3QgaW4gVml9OgorCQlcZQk8RXNjPgorCQlcdAk8VGFiPgorCQlccgk8Q1I+CShOT1QgZW5kLW9mLWxpbmUhKQorCQlcYgk8QlM+CisJICBOT1RFOiBUaGUgb3RoZXIgYmFja3NsYXNoIGNvZGVzIG1lbnRpb25lZCBhYm92ZSBkbyBub3Qgd29yayBpbnNpZGUKKwkgIFtdIQorCS0gTWF0Y2hpbmcgd2l0aCBhIGNvbGxlY3Rpb24gY2FuIGJlIHNsb3csIGJlY2F1c2UgZWFjaCBjaGFyYWN0ZXIgaW4KKwkgIHRoZSB0ZXh0IGhhcyB0byBiZSBjb21wYXJlZCB3aXRoIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBjb2xsZWN0aW9uLgorCSAgVXNlIG9uZSBvZiB0aGUgb3RoZXIgYXRvbXMgYWJvdmUgd2hlbiBwb3NzaWJsZS4gIEV4YW1wbGU6ICJcZCIgaXMKKwkgIG11Y2ggZmFzdGVyIHRoYW4gIlswLTldIiBhbmQgbWF0Y2hlcyB0aGUgc2FtZSBjaGFyYWN0ZXJzLgorCisJCQkJCQkqL1wlW10qICpFNjkqICpFNzAqICpFMzY5KgorXCVbXQlBIGxpc3Qgb2Ygb3B0aW9uYWxseSBtYXRjaGVkIGF0b21zLiAgVGhpcyBhbHdheXMgbWF0Y2hlcy4KKwlJdCBtYXRjaGVzIGFzIG11Y2ggb2YgdGhlIGxpc3Qgb2YgYXRvbXMgaXQgY29udGFpbnMgYXMgcG9zc2libGUuICBUaHVzCisJaXQgc3RvcHMgYXQgdGhlIGZpcnN0IGF0b20gdGhhdCBkb2Vzbid0IG1hdGNoLiAgRm9yIGV4YW1wbGU6ID4KKwkJL3JcJVtlYWRdCis8CW1hdGNoZXMgInIiLCAicmUiLCAicmVhIiBvciAicmVhZCIuICBUaGUgbG9uZ2VzdCB0aGF0IG1hdGNoZXMgaXMgdXNlZC4KKwlUbyBtYXRjaCB0aGUgRXggY29tbWFuZCAiZnVuY3Rpb24iLCB3aGVyZSAiZnUiIGlzIHJlcXVpcmVkIGFuZAorCSJuY3Rpb24iIGlzIG9wdGlvbmFsLCB0aGlzIHdvdWxkIHdvcms6ID4KKwkJL1w8ZnVcJVtuY3Rpb25dXD4KKzwJVGhlIGVuZC1vZi13b3JkIGF0b20gIlw+IiBpcyB1c2VkIHRvIGF2b2lkIG1hdGNoaW5nICJmdSIgaW4gImZ1bGwiLgorCUl0IGdldHMgbW9yZSBjb21wbGljYXRlZCB3aGVuIHRoZSBhdG9tcyBhcmUgbm90IG9yZGluYXJ5IGNoYXJhY3RlcnMuCisJWW91IGRvbid0IG9mdGVuIGhhdmUgdG8gdXNlIGl0LCBidXQgaXQgaXMgcG9zc2libGUuICBFeGFtcGxlOiA+CisJCS9cPHJcJVtbZW9dYWRdXD4KKzwJTWF0Y2hlcyB0aGUgd29yZHMgInIiLCAicmUiLCAicm8iLCAicmVhIiwgInJvYSIsICJyZWFkIiBhbmQgInJvYWQiLgorCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3N5bnRheCBmZWF0dXJlfQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gSWdub3JpbmcgY2FzZSBpbiBhIHBhdHRlcm4JCQkJCSovaWdub3JlY2FzZSoKKworSWYgdGhlICdpZ25vcmVjYXNlJyBvcHRpb24gaXMgb24sIHRoZSBjYXNlIG9mIG5vcm1hbCBsZXR0ZXJzIGlzIGlnbm9yZWQuCisnc21hcnRjYXNlJyBjYW4gYmUgc2V0IHRvIGlnbm9yZSBjYXNlIHdoZW4gdGhlIHBhdHRlcm4gY29udGFpbnMgbG93ZXJjYXNlCitsZXR0ZXJzIG9ubHkuCisJCQkJCQkJKi9cYyogKi9cQyoKK1doZW4gIlxjIiBhcHBlYXJzIGFueXdoZXJlIGluIHRoZSBwYXR0ZXJuLCB0aGUgd2hvbGUgcGF0dGVybiBpcyBoYW5kbGVkIGxpa2UKKydpZ25vcmVjYXNlJyBpcyBvbi4gIFRoZSBhY3R1YWwgdmFsdWUgb2YgJ2lnbm9yZWNhc2UnIGFuZCAnc21hcnRjYXNlJyBpcworaWdub3JlZC4gICJcQyIgZG9lcyB0aGUgb3Bwb3NpdGU6IEZvcmNlIG1hdGNoaW5nIGNhc2UgZm9yIHRoZSB3aG9sZSBwYXR0ZXJuLgore29ubHkgVmltIHN1cHBvcnRzIFxjIGFuZCBcQ30KK05vdGUgdGhhdCAnaWdub3JlY2FzZScsICJcYyIgYW5kICJcQyIgYXJlIG5vdCB1c2VkIGZvciB0aGUgY2hhcmFjdGVyIGNsYXNzZXMuCisKK0V4YW1wbGVzOgorICAgICAgcGF0dGVybgknaWdub3JlY2FzZScgICdzbWFydGNhc2UnCW1hdGNoZXMgfgorCWZvbwkgIG9mZgkJLQkJZm9vCisJZm9vCSAgb24JCS0JCWZvbyBGb28gRk9PCisJRm9vCSAgb24JCW9mZgkJZm9vIEZvbyBGT08KKwlGb28JICBvbgkJb24JCSAgICBGb28KKwlcY2ZvbwkgIC0JCS0JCWZvbyBGb28gRk9PCisJZm9vXEMJICAtCQktCQlmb28KKworCQkJCQkJCSovXFoqCitXaGVuICJcWiIgYXBwZWFycyBhbnl3aGVyZSBpbiB0aGUgcGF0dGVybiwgY29tcG9zaW5nIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuCitUaHVzIG9ubHkgdGhlIGJhc2UgY2hhcmFjdGVycyBuZWVkIHRvIG1hdGNoLCB0aGUgY29tcG9zaW5nIGNoYXJhY3RlcnMgbWF5IGJlCitkaWZmZXJlbnQgYW5kIHRoZSBudW1iZXIgb2YgY29tcG9zaW5nIGNoYXJhY3RlcnMgbWF5IGRpZmZlci4gIE9ubHkgcmVsZXZhbnQKK3doZW4gJ2VuY29kaW5nJyBpcyAidXRmLTgiLgorCitUZWNobmljYWwgZGV0YWlsOgkJCQkqTkwtdXNlZC1mb3ItTnVsKgorPE51bD4gY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBhcmUgc3RvcmVkIGFzIDxOTD4gaW4gbWVtb3J5LiAgSW4gdGhlIGRpc3BsYXkKK3RoZXkgYXJlIHNob3duIGFzICJeQCIuICBUaGUgdHJhbnNsYXRpb24gaXMgZG9uZSB3aGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcKK2ZpbGVzLiAgVG8gbWF0Y2ggYSA8TnVsPiB3aXRoIGEgc2VhcmNoIHBhdHRlcm4geW91IGNhbiBqdXN0IGVudGVyIENUUkwtQCBvcgorIkNUUkwtViAwMDAiLiAgVGhpcyBpcyBwcm9iYWJseSBqdXN0IHdoYXQgeW91IGV4cGVjdC4gIEludGVybmFsbHkgdGhlCitjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgd2l0aCBhIDxOTD4gaW4gdGhlIHNlYXJjaCBwYXR0ZXJuLiAgV2hhdCBpcyB1bnVzdWFsIGlzCit0aGF0IHR5cGluZyBDVFJMLVYgQ1RSTC1KIGFsc28gaW5zZXJ0cyBhIDxOTD4sIHRodXMgYWxzbyBzZWFyY2hlcyBmb3IgYSA8TnVsPgoraW4gdGhlIGZpbGUuICB7VmkgY2Fubm90IGhhbmRsZSA8TnVsPiBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIGF0IGFsbH0KKworCQkJCQkJKkNSLXVzZWQtZm9yLU5MKgorV2hlbiAnZmlsZWZvcm1hdCcgaXMgIm1hYyIsIDxOTD4gY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBhcmUgc3RvcmVkIGFzIDxDUj4KK2NoYXJhY3RlcnMgaW50ZXJuYWxseS4gIEluIHRoZSBkaXNwbGF5IHRoZXkgYXJlIHNob3duIGFzICJeTSIuICBPdGhlcndpc2UgdGhpcword29ya3Mgc2ltaWxhciB0byB0aGUgdXNhZ2Ugb2YgPE5MPiBmb3IgYSA8TnVsPi4KKworV2hlbiB3b3JraW5nIHdpdGggZXhwcmVzc2lvbiBldmFsdWF0aW9uLCBhIDxOTD4gY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuCittYXRjaGVzIGEgPE5MPiBpbiB0aGUgc3RyaW5nLiAgVGhlIHVzZSBvZiAiXG4iIChiYWNrc2xhc2ggbikgdG8gbWF0Y2ggYSA8Tkw+Citkb2Vzbid0IHdvcmsgdGhlcmUsIGl0IG9ubHkgd29ya3MgdG8gbWF0Y2ggdGV4dCBpbiB0aGUgYnVmZmVyLgorCisJCQkJCQkqcGF0dGVybi1tdWx0aS1ieXRlKgorUGF0dGVybnMgd2lsbCBhbHNvIHdvcmsgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMsIG1vc3RseSBhcyB5b3Ugd291bGQKK2V4cGVjdC4gIEJ1dCBpbnZhbGlkIGJ5dGVzIG1heSBjYXVzZSB0cm91YmxlLCBhIHBhdHRlcm4gd2l0aCBhbiBpbnZhbGlkIGJ5dGUKK3dpbGwgcHJvYmFibHkgbmV2ZXIgbWF0Y2guCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gQ29tcGFyZSB3aXRoIFBlcmwgcGF0dGVybnMJCQkJKnBlcmwtcGF0dGVybnMqCisKK1ZpbSdzIHJlZ2V4ZXMgYXJlIG1vc3Qgc2ltaWxhciB0byBQZXJsJ3MsIGluIHRlcm1zIG9mIHdoYXQgeW91IGNhbiBkby4gIFRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMgbW9zdGx5IGp1c3Qgbm90YXRpb247ICBoZXJlJ3MgYSBzdW1tYXJ5IG9mIHdoZXJlCit0aGV5IGRpZmZlcjoKKworQ2FwYWJpbGl0eQkJCWluIFZpbXNwZWFrCWluIFBlcmxzcGVhayB+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitmb3JjZSBjYXNlIGluc2Vuc2l0aXZpdHkJXGMJCSg/aSkKK2ZvcmNlIGNhc2Ugc2Vuc2l0aXZpdHkJCVxDCQkoPy1pKQorYmFja3JlZi1sZXNzIGdyb3VwaW5nCQlcJShhdG9tKQkoPzphdG9tKQorY29uc2VydmF0aXZlIHF1YW50aWZpZXJzCVx7LW4sbX0JCSo/LCArPywgPz8sIHt9PworMC13aWR0aCBtYXRjaAkJCWF0b21cQD0JCSg/PWF0b20pCiswLXdpZHRoIG5vbi1tYXRjaAkJYXRvbVxAIQkJKD8hYXRvbSkKKzAtd2lkdGggcHJlY2VkaW5nIG1hdGNoCQlhdG9tXEA8PQkoPzw9YXRvbSkKKzAtd2lkdGggcHJlY2VkaW5nIG5vbi1tYXRjaAlhdG9tXEA8IQkoPzwhYXRvbSkKK21hdGNoIHdpdGhvdXQgcmV0cnkJCWF0b21cQD4JCSg/PmF0b20pCisKK1ZpbSBhbmQgUGVybCBoYW5kbGUgbmV3bGluZSBjaGFyYWN0ZXJzIGluc2lkZSBhIHN0cmluZyBhIGJpdCBkaWZmZXJlbnRseToKKworSW4gUGVybCwgXiBhbmQgJCBvbmx5IG1hdGNoIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSB0ZXh0LAorYnkgZGVmYXVsdCwgYnV0IHlvdSBjYW4gc2V0IHRoZSAnbScgZmxhZywgd2hpY2ggbGV0cyB0aGVtIG1hdGNoIGF0CitlbWJlZGRlZCBuZXdsaW5lcyBhcyB3ZWxsLiAgWW91IGNhbiBhbHNvIHNldCB0aGUgJ3MnIGZsYWcsIHdoaWNoIGNhdXNlcworYSAuIHRvIG1hdGNoIG5ld2xpbmVzIGFzIHdlbGwuICAoQm90aCB0aGVzZSBmbGFncyBjYW4gYmUgY2hhbmdlZCBpbnNpZGUKK2EgcGF0dGVybiB1c2luZyB0aGUgc2FtZSBzeW50YXggdXNlZCBmb3IgdGhlIGkgZmxhZyBhYm92ZSwgQlRXLikKKworT24gdGhlIG90aGVyIGhhbmQsIFZpbSdzIF4gYW5kICQgYWx3YXlzIG1hdGNoIGF0IGVtYmVkZGVkIG5ld2xpbmVzLCBhbmQKK3lvdSBnZXQgdHdvIHNlcGFyYXRlIGF0b21zLCBcJV4gYW5kIFwlJCwgd2hpY2ggb25seSBtYXRjaCBhdCB0aGUgdmVyeQorc3RhcnQgYW5kIGVuZCBvZiB0aGUgdGV4dCwgcmVzcGVjdGl2ZWx5LiAgVmltIHNvbHZlcyB0aGUgc2Vjb25kIHByb2JsZW0KK2J5IGdpdmluZyB5b3UgdGhlIFxfICJtb2RpZmllciI6ICBwdXQgaXQgaW4gZnJvbnQgb2YgYSAuIG9yIGEgY2hhcmFjdGVyCitjbGFzcywgYW5kIHRoZXkgd2lsbCBtYXRjaCBuZXdsaW5lcyBhcyB3ZWxsLgorCitGaW5hbGx5LCB0aGVzZSBjb25zdHJ1Y3RzIGFyZSB1bmlxdWUgdG8gUGVybDoKKy0gZXhlY3V0aW9uIG9mIGFyYml0cmFyeSBjb2RlIGluIHRoZSByZWdleDogICg/e3BlcmwgY29kZX0pCistIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zOiAgKD8oY29uZGl0aW9uKXRydWUtZXhwcnxmYWxzZS1leHByKQorCisuLi5hbmQgdGhlc2UgYXJlIHVuaXF1ZSB0byBWaW06CistIGNoYW5naW5nIHRoZSBtYWdpYy1uZXNzIG9mIGEgcGF0dGVybjogIFx2IFxWIFxtIFxNCisgICAodmVyeSB1c2VmdWwgZm9yIGF2b2lkaW5nIGJhY2tzbGFzaGl0aXMpCistIHNlcXVlbmNlIG9mIG9wdGlvbmFsbHkgbWF0Y2hpbmcgYXRvbXM6ICBcJVthdG9tc10KKy0gXCYgKHdoaWNoIGlzIHRvIFx8IHdoYXQgImFuZCIgaXMgdG8gIm9yIjsgIGl0IGZvcmNlcyBzZXZlcmFsIGJyYW5jaGVzCisgICB0byBtYXRjaCBhdCBvbmUgc3BvdCkKKy0gbWF0Y2hpbmcgbGluZXMvY29sdW1ucyBieSBudW1iZXI6ICBcJTVsIFwlNWMgXCU1dgorLSBsaW1pdGluZyB0aGUgInJldHVybiB2YWx1ZSIgb2YgYSByZWdleDogIFx6cyBcemUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBIaWdobGlnaHRpbmcgbWF0Y2hlcwkJCQkJKm1hdGNoLWhpZ2hsaWdodCoKKworCQkJCQkJCSo6bWF0KiAqOm1hdGNoKgorOm1hdFtjaF0ge2dyb3VwfSAve3BhdHRlcm59LworCQlEZWZpbmUgYSBwYXR0ZXJuIHRvIGhpZ2hsaWdodCBpbiB0aGUgY3VycmVudCB3aW5kb3cuICBJdCB3aWxsCisJCWJlIGhpZ2hsaWdodGVkIHdpdGgge2dyb3VwfS4gIEV4YW1wbGU6ID4KKwkJCTpoaWdobGlnaHQgTXlHcm91cCBjdGVybWJnPWdyZWVuIGd1aWJnPWdyZWVuCisJCQk6bWF0Y2ggTXlHcm91cCAvVE9ETy8KKzwJCUluc3RlYWQgb2YgLy8gYW55IGNoYXJhY3RlciBjYW4gYmUgdXNlZCB0byBtYXJrIHRoZSBzdGFydCBhbmQKKwkJZW5kIG9mIHRoZSB7cGF0dGVybn0uICBXYXRjaCBvdXQgZm9yIHVzaW5nIHNwZWNpYWwgY2hhcmFjdGVycywKKwkJc3VjaCBhcyAnIicgYW5kICd8Jy4KKwkJe2dyb3VwfSBtdXN0IGV4aXN0IGF0IHRoZSBtb21lbnQgdGhpcyBjb21tYW5kIGlzIGV4ZWN1dGVkLgorCQlUaGUgbWF0Y2ggb3ZlcnJpZGVzIHRoZSAnaGxzZWFyY2gnIGhpZ2hsaWdodGluZy4KKwkJJ2lnbm9yZWNhc2UnIGRvZXMgbm90IGFwcGx5LCB1c2UgfC9cY3wgaW4gdGhlIHBhdHRlcm4gdG8KKwkJaWdub3JlIGNhc2UuICBPdGhlcndpc2UgY2FzZSBpcyBub3QgaWdub3JlZC4KKwkJTm90ZSB0aGF0IGhpZ2hsaWdodGluZyB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuIHdpdGgKKwkJJ2hsc2VhcmNoJyBpcyB1c2VkIGluIGFsbCB3aW5kb3dzLCB3aGlsZSB0aGUgcGF0dGVybiBkZWZpbmVkCisJCXdpdGggIjptYXRjaCIgb25seSBleGlzdHMgaW4gdGhlIGN1cnJlbnQgd2luZG93LiAgSXQgaXMga2VwdAorCQl3aGVuIHN3aXRjaGluZyB0byBhbm90aGVyIGJ1ZmZlci4KKwkJQW5vdGhlciBleGFtcGxlLCB3aGljaCBoaWdobGlnaHRzIGFsbCBjaGFyYWN0ZXJzIGluIHZpcnR1YWwKKwkJY29sdW1uIDcyIGFuZCBtb3JlOiA+CisJCQk6aGlnaGxpZ2h0IHJpZ2h0TWFyZ2luIHRlcm09Ym9sZCBjdGVybWZnPWJsdWUgZ3VpZmc9Ymx1ZQorCQkJOm1hdGNoIHJpZ2h0TWFyZ2luIC8uXCU+NzJ2LworPAkJVG8gaGlnaGxpZ2h0IGFsbCBjaGFyYWN0ZXIgdGhhdCBhcmUgaW4gdmlydHVhbCBjb2x1bW4gNzogPgorCQkJOmhpZ2hsaWdodCBjb2w4IGN0ZXJtYmc9Z3JleSBndWliZz1ncmV5CisJCQk6bWF0Y2ggY29sOCAvXCU8OHYuXCU+N3YvCis8CQlOb3RlIHRoZSB1c2Ugb2YgdHdvIGl0ZW1zIHRvIGFsc28gbWF0Y2ggYSBjaGFyYWN0ZXIgdGhhdAorCQlvY2N1cGllcyBtb3JlIHRoYW4gb25lIHZpcnR1YWwgY29sdW1uLCBzdWNoIGFzIGEgVEFCLgorCis6bWF0W2NoXQorOm1hdFtjaF0gbm9uZQorCQlDbGVhciBhIHByZXZpb3VzbHkgZGVmaW5lZCBtYXRjaCBwYXR0ZXJuLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcGlfZXhwbC50eHQgYi9ydW50aW1lL2RvYy9waV9leHBsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzk2MmZmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvcGlfZXhwbC50eHQKQEAgLTAsMCArMSwyMTUgQEAKKypwaV9leHBsLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMiBOb3YgMDgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgTSBBIEF6aXogQWhtZWQKKwkJCQkJICB1cGRhdGVkIGJ5IE1hcmsgV2FnZ29uZXIKKworCisJCQkJCQkqZmlsZS1leHBsb3JlciogKmZpbGUtYnJvd3NlcioKK1BsdWdpbiBmb3IgZXhwbG9yaW5nIChvciBicm93c2luZykgZGlyZWN0b3JpZXMgYW5kIGZpbGVzCisKKzEuIFN0YXJ0aW5nIHRoZSBmaWxlIGV4cGxvcmVyCQl8ZXhwbC1zdGFydGluZ3wKKworVGhlIGZ1bmN0aW9uYWxpdHkgbWVudGlvbmVkIGhlcmUgaXMgYSB8c3RhbmRhcmQtcGx1Z2lufC4KK1RoaXMgcGx1Z2luIGlzIG9ubHkgYXZhaWxhYmxlIGlmICdjb21wYXRpYmxlJyBpcyBub3Qgc2V0LgorWW91IGNhbiBhdm9pZCBsb2FkaW5nIHRoaXMgcGx1Z2luIGJ5IHNldHRpbmcgdGhlICJsb2FkZWRfZXhwbG9yZXIiIHZhcmlhYmxlOiA+CisJOmxldCBsb2FkZWRfZXhwbG9yZXIgPSAxCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGlzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFN0YXJ0aW5nIHRoZSBmaWxlIGV4cGxvcmVyCQkJCSpleHBsLXN0YXJ0aW5nKgorCitUaGlzIHBsdWdpbiBpcyB1c2VkIHRvIGV4cGxvcmUgZGlyZWN0b3JpZXMgaW5zaWRlIFZpbS4gVGhlIGZpbGUgZXhwbG9yZXIgaXMKK2xhdW5jaGVkIHdoZW5ldmVyIHRoZSB1c2VyIHRyaWVzIHRvIGVkaXQgYSBkaXJlY3RvcnkuCisJCQkJCQkqOkV4cGxvcmUqICo6U2V4cGxvcmUqCitUbyBsYXVuY2ggdGhlIGV4cGxvcmVyIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgY3VycmVudGx5IGVkaXRlZDogPgorCTpFeHBsb3JlCitJZiB0aGUgZmlsZSBoYXMgY2hhbmdlcyB0aGUgd2luZG93IGlzIHNwbGl0LiAgVG8gYWx3YXlzIHNwbGl0IHRoZSB3aW5kb3c6ID4KKwk6U2V4cGxvcmUKK1RvIGxhdW5jaCB0aGUgZXhwbG9yZXIgaW4gYSBzcGVjaWZpYyBkaXJlY3Rvcnk6ID4KKwk6RXhwbG9yZSBkaXJuYW1lCisJOlNleHBsb3JlIGRpcm5hbWUKKworRnJvbSBpbnNpZGUgdGhlIGV4cGxvcmVyIG1vdmUgeW91ciBjdXJzb3IgdG8gYSBsaW5lIGNvbnRhaW5pbmcgYSBmaWxlIG9yCitkaXJlY3RvcnkgbmFtZS4gIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBrZXlzIGFyZSBhdmFpbGFibGU6CisKKyAgPGVudGVyPiB3aWxsIG9wZW4gdGhlIGZpbGUgaW4gdGhlIHdpbmRvdyB0aGUgZXhwbG9yZXIgaXMgY3VycmVudGx5CisgICAgICBvY2N1cHlpbmcuCisgICdvJyB3aWxsIHNwbGl0IGEgbmV3IHdpbmRvdyBhbmQgb3BlbiB0aGUgZmlsZSBpbiB0aGUgbmV3IHdpbmRvdy4KKyAgJ08nIHdpbGwgb3BlbiB0aGUgZmlsZSBjaG9zZW4gdXNpbmcgdGhlIHdpbmRvdyB0aGF0IHRoZSBjdXJzb3Igd2FzIGluIGp1c3QKKyAgICAgIGJlZm9yZSB5b3Ugc3RhcnRlZCBvciBlbnRlcmVkIHRoZSBleHBsb3JlciB3aW5kb3cuICBJZiB0aGUgZXhwbG9yZXIgaXMKKyAgICAgIHRoZSBvbmx5IHdpbmRvdywgaXQgd2lsbCBmaXJzdCBzcGxpdCBhIG5ldyB3aW5kb3cgdG8gdXNlIGZvciB0aGUgZmlsZSB0bworICAgICAgYmUgb3BlbmVkLgorICAncCcgd2lsbCBvcGVuIChvciB1c2UpIHRoZSBwcmV2aWV3IHdpbmRvdyBzaG93aW5nIHRoZSBmaWxlCisgICd4JyB3aWxsIGV4ZWN1dGUgdGhlIGZpbGUgd2l0aCB0aGUgc3lzdGVtIHRvb2xzLiAgT25seSB3aGVuIHN1cHBvcnRlZAorICAgICAgKGN1cnJlbnRseSBNUy1XaW5kb3dzIGFuZCBLREUpLgorCitXaGVuIHNwbGl0dGluZyBvZmYgYSBuZXcgd2luZG93LCB5b3UgY2FuIGNvbnRyb2wgd2hlcmUgdGhlIHNwbGl0IHdpbmRvdyB3aWxsCitnbyByZWxhdGl2ZSB0byB0aGUgZXhwbG9yZXIgd2luZG93IHVzaW5nIHRoZSB2YXJpYWJsZXMgZzpleHBsVmVydGljYWwsCitnOmV4cGxTcGxpdEJlbG93IGFuZCBnOmV4cGxTcGxpdFJpZ2h0LgorCisJCQkJCQkJKmc6ZXhwbFZlcnRpY2FsKgorCQkJCQkJCSpnOmV4cGxTcGxpdEJlbG93KgorCQkJCQkJCSpnOmV4cGxTcGxpdFJpZ2h0KgorCQkJCQkJCSpnOmV4cGxTdGFydEJlbG93KgorCQkJCQkJCSpnOmV4cGxTdGFydFJpZ2h0KgorVG8gY29udHJvbCB3aGV0aGVyIHRoZSBzcGxpdCBpcyBtYWRlIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5LCB1c2U6ID4KKyAgbGV0IGc6ZXhwbFZlcnRpY2FsPTEJIiBTcGxpdCB2ZXJ0aWNhbGx5CisgIGxldCBnOmV4cGxWZXJ0aWNhbD0wCSIgU3BsaXQgaG9yaXpvbnRhbGx5IChkZWZhdWx0KQorCitUbyBjb250cm9sIHdoZXJlIHRoZSB3aW5kb3cgZ29lcyByZWxhdGl2ZSB0byB0aGUgZXhwbG9yZXIgd2luZG93IHdoZW4KK3NwbGl0dGluZyBob3Jpem9udGFsbHksIHVzZSB0aGUgdmFyaWFibGU6ID4KKyAgbGV0IGc6ZXhwbFNwbGl0QmVsb3c9MSAgICAiIFB1dCBuZXcgd2luZG93IGJlbG93IGV4cGxvcmVyIHdpbmRvdworICBsZXQgZzpleHBsU3BsaXRCZWxvdz0wICAgICIgUHV0IG5ldyB3aW5kb3cgYWJvdmUgZXhwbG9yZXIgd2luZG93CitUaGUgZGVmYXVsdCBmb3IgdGhpcyBpcyB0aGUgc2V0dGluZyBvZiBzcGxpdGJlbG93IGF0IHRoZSB0aW1lIHRoZSBwbHVnaW4gaXMKK2xvYWRlZC4KKworVG8gY29udHJvbCB3aGVyZSB0aGUgd2luZG93cyBnb2VzIHJlbGF0aXZlIHRvIHRoZSBleHBsb3JlciB3aW5kb3cgd2hlbgorc3BsaXR0aW5nIHZlcnRpY2FsbHksIHVzZSB0aGUgdmFyaWFibGU6ID4KKyAgbGV0IGc6ZXhwbFNwbGl0UmlnaHQ9MSAgICAiIFB1dCBuZXcgd2luZG93IHRvIHRoZSByaWdodCBvZiB0aGUgZXhwbG9yZXIKKyAgbGV0IGc6ZXhwbFNwbGl0UmlnaHQ9MCAgICAiIFB1dCBuZXcgd2luZG93IHRvIHRoZSBsZWZ0IG9mIHRoZSBleHBsb3JlcgorVGhlIGRlZmF1bHQgZm9yIHRoaXMgaXMgdGhlIHNldHRpbmcgb2Ygc3BsaXRyaWdodCBhdCB0aGUgdGltZSB0aGUgcGx1Z2luIGlzCitsb2FkZWQuCisKK1RvIHVzZSBhIGRpZmZlcmVudCBzcGxpdCBtZXRob2QgZm9yIHRoZSBleHBsb3JlciB3aW5kb3csIHVzZTogPgorICBsZXQgZzpleHBsU3RhcnRSaWdodD0xICAgICIgUHV0IG5ldyBleHBsb3JlciB3aW5kb3cgdG8gdGhlIHJpZ2h0IG9mIHRoZQorCQkJICAgICIgY3VycmVudCB3aW5kb3cKKyAgbGV0IGc6ZXhwbFN0YXJ0UmlnaHQ9MCAgICAiIFB1dCBuZXcgZXhwbG9yZXIgd2luZG93IHRvIHRoZSBsZWZ0IG9mIHRoZQorCQkJICAgICIgY3VycmVudCB3aW5kb3cKK1RoZSBkZWZhdWx0IGZvciB0aGlzIHNldCB0byBnOmV4cGxTcGxpdFJpZ2h0IGF0IHRoZSB0aW1lIHRoZSBwbHVnaW4gaXMgbG9hZGVkLgorCitUbyB1c2UgYSBkaWZmZXJlbnQgc3BsaXQgbWV0aG9kIGZvciB0aGUgZXhwbG9yZXIgd2luZG93LCB1c2U6ID4KKyAgbGV0IGc6ZXhwbFN0YXJ0QmVsb3c9MSAgICAiIFB1dCBuZXcgZXhwbG9yZXIgd2luZG93IGJlbG93IHRoZQorCQkJICAgICIgY3VycmVudCB3aW5kb3cKKyAgbGV0IGc6ZXhwbFN0YXJ0QmVsb3c9MCAgICAiIFB1dCBuZXcgZXhwbG9yZXIgd2luZG93IGFib3ZlIHRoZQorCQkJICAgICIgY3VycmVudCB3aW5kb3cKK1RoZSBkZWZhdWx0IGZvciB0aGlzIHNldCB0byBnOmV4cGxTcGxpdEJlbG93IGF0IHRoZSB0aW1lIHRoZSBwbHVnaW4gaXMgbG9hZGVkLgorCitUaGUgc3RhcnQgc3BsaXRzIGFsbG93IGZvciB0aGUgZXhwbG9yZXIgd2luZG93IHRvIGJlIHBsYWNlZCBpbiBhIGZpbGUgYnJvd3NlcgordHlwZSBhcnJhbmdlbWVudCwgd2hlcmUgdGhlIGRpcmVjdG9yaWVzIGFyZSBzaG93biBvbiB0aGUgbGVmdCBhbmQgdGhlIGNvbnRlbnRzCitvcGVuZWQgb24gdGhlIHJpZ2h0LiAgVGhlIHN0YXJ0IHNwbGl0IHNldHRpbmdzIGFyZSBvbmx5IHVzZWQgd2hlbiBpc3N1aW5nCit0aGUgU2V4cGxvcmUgY29tbWFuZC4KKworTm90ZSB0aGF0IHRoZSB3aW5kb3cgc3BsaXQgaXMgZG9uZSBhIGxpdHRsZSBiaXQgZGlmZmVyZW50bHkgdGhhbiB3aW5kb3cgc3BsaXRzCithcmUgdXN1YWxseSBkb25lLiAgT3JkaW5hcmlseSwgd2hlbiBzcGxpdHRpbmcgYSB3aW5kb3csIHRoZSBzcGFjZSBvY2N1cGllZCBieQordGhlIGN1cnJlbnQgd2luZG93IHdpbGwgYmUgc3BsaXQgdG8gZ2l2ZSBzcGFjZSBmb3IgdGhlIG5ldyB3aW5kb3cuICBUaGUKK2V4cGxvcmVyIGF0dGVtcHRzIHRvIGluc3RlYWQgc3BsaXQgZnJvbSBhIHdpbmRvdyBhZGphY2VudCB0byB0aGUgZXhwbG9yZXIKK3dpbmRvdyBzbyB0aGF0IHRoZSBleHBsb3JlciB3aW5kb3cgd2lsbCBub3QgY2hhbmdlIHNpemVzLiAgSWYgdGhlcmUgaXMgbm90IGFuCithZGphY2VudCB3aW5kb3cgaW4gdGhlIGRpcmVjdGlvbiB5b3UgYXJlIHNwbGl0dGluZywgdGhlIGV4cGxvcmVyIHdpbmRvdyBpcworc3BsaXQuCisKKwkJCQkJCQkqZzpleHBsV2luU2l6ZSoKK0FmdGVyIG9wZW5pbmcgYSBmaWxlIHdpdGggdGhlICdvJyBjb21tYW5kLCB5b3UgbWlnaHQgd2FudCB0byByZXNpemUgdGhlCitleHBsb3JlciB3aW5kb3cuIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUgPgorICBsZXQgZzpleHBsV2luU2l6ZT1OCitOIGlzIHRoZSBudW1iZXIgb2Ygcm93cyAod2hlbiB0aGUgd2luZG93IGlzIHNwbGl0IGhvcml6b250YWxseSkgb3IgdGhlIG51bWJlcgorb2YgY29sdW1ucyAod2hlbiB0aGUgd2luZG93IGlzIHNwbGl0IHZlcnRpY2FsbHkpLiAgSWYgZzpleHBsV2luU2l6ZSBpcyBzZXQgdG8KK2FuIGVtcHR5IHN0cmluZyAoIiIpLCByZXNpemluZyB3aWxsIG5vdCBiZSBkb25lLiAgZzpleHBsV2luU2l6ZSBkZWZhdWx0cyB0bworMTUuCisKKwkJCQkJCQkqZzpleHBsRGV0YWlsZWRMaXN0KgorVGhlIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpIGFuZCBtb2RpZmljYXRpb24gdGltZSBjYW4gYmUgZGlzcGxheWVkIGluc2lkZSB0aGUKK2ZpbGUgZXhwbG9yZXIgd2luZG93LiBCeSBwcmVzc2luZyAnaScsIHlvdSBjYW4gdG9nZ2xlIGJldHdlZW4gdGhlIG5hbWUgb25seQorZGlzcGxheSBhbmQgdGhlIG1vcmUgbGVuZ3RoeSBkaXNwbGF5LiAgSWYgeW91IHdhbnQgdGhlIHNpemUgYW5kIGRhdGUgdG8gc2hvdworYnkgZGVmYXVsdCwgdXNlID4KKyAgbGV0IGc6ZXhwbERldGFpbGVkTGlzdD0xCitEb2luZyB0aGlzIG1heSBzbGlnaHRseSBzbG93IGRvd24gZXhwbG9yZXIuIFRoZSBkaWZmZXJlbmNlIG1heSBvciBtYXkgbm90IGJlCitub3RpY2VhYmxlIGRlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSBhbmQgd2hldGhlciB0aGUgZGlyZWN0b3J5IGlzIGxvY2FsIG9yIG9uCit0aGUgbmV0d29yayBhbmQgb24gdGhlIHNpemUgb2YgdGhlIGRpcmVjdG9yeS4KKworCQkJCQkJCSpnOmV4cGxEYXRlRm9ybWF0KgorVGhlIGZvcm1hdCBvZiBkYXRlIGRpc3BsYXllZCBpcyBjb25maWd1cmFibGUgdXNpbmcgdGhlIHZhcmlhYmxlCitnOmV4cGxEYXRlRm9ybWF0LiAgZXhwbG9yZXIgdXNlcyB0aGlzIHZhcmlhYmxlIHRvIHBhc3MgdG8gc3RyZnRpbWUoKSB0byBmZXRjaAordGhlIGRhdGUgaW5mb3JtYXRpb24uIHxzdHJmdGltZSgpfCAgVGhlIGRlZmF1bHQgaXMgPgorICBsZXQgZzpleHBsRGF0ZUZvcm1hdD0iJWQgJWIgJVkgJUg6JU0iCisKK05vdGUgdGhhdCBmb3Igc29ydGluZyBwdXJwb3NlcywgdGhlIGRhdGUgaXMgYWx3YXlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZQorbGluZSBpbiBpdHMgJ3JhdycgZm9ybS4gIElmIHlvdSBoYXZlIHN5bnRheCBoaWdobGlnaHRpbmcgdHVybmVkIG9uLCB0aGlzIHJhdworZGF0ZSBzaG91bGQgYmUgaW52aXNpYmxlLgorCisJCQkJCQkJKmc6ZXhwbEhpZGVGaWxlcyoKK1lvdSBjYW4gaGlkZSBzb21lIGZpbGVzIGJ5IGZpbGxpbmcgdGhlIHZhcmlhYmxlIGc6ZXhwbEhpZEZpbGVzIHdpdGggcmVndWxhcgorZXhwcmVzc2lvbnMuIEEgZmlsZW5hbWUgdGhhdCBtYXRjaGVzIGFueSBvZiB0aGVzZSByZWd1bGFyIGV4cHJlc3Npb25zIHdpbGwgbm90CitiZSBzaG93bi4gRm9yIGV4YW1wbGUsID4KKworICBsZXQgZzpleHBsSGlkZUZpbGVzPSdeXC4sXC5neiQsXC5leGUkLFwuemlwJCcKKword2lsbCBub3Qgc2hvdyBmaWxlcyB0aGF0IGJlZ2luIHdpdGggIi4iIGFuZCB0aG9zZSB0aGF0IGVuZCBpbiAuZ3osIC5leGUgb3IKKy56aXAuIEhvd2V2ZXIsIGFsbCBkaXJlY3RvcnkgbmFtZXMgd2lsbCBhbHdheXMgYmUgc2hvd24uIElmIHdoaWxlIGV4cGxvcmluZywKK3lvdSdkIGxpa2UgdG8gc2VlIHRoZSBoaWRkZW4gZmlsZXMgYXMgd2VsbCwgdXNlIHRoZSBjb21tYW5kICJhIi4KK1RoZSBleHBsb3JlciBoZWFkZXIgd2lsbCBpbmRpY2F0ZSBpZiBmaWx0ZXJpbmcgaXMgYmVpbmcgZG9uZS4KKworCQkJCQkJCSpnOmV4cGxEZXRhaWxlZEhlbHAqCitUaGUgaGVscCBpbmZvcm1hdGlvbiBzcGFubmluZyBhIGZldyBsaW5lcyBjYW4gYmUgdHVybmVkIG9mZiAoYW5kIGp1c3QgYSBzaW5nbGUKK2hlbHAgbWVzc2FnZSBlbmFibGVkKSB1c2luZyB0aGUgb3B0aW9uID4KKyAgbGV0IGc6ZXhwbERldGFpbGVkSGVscD0wCitZb3UgY2FuIGFueXRpbWUgc3dpdGNoIHRvIHRoZSBkZXRhaWxlZCBoZWxwIGZvcm1hdCBieSBwcmVzc2luZyA/LgorCisJCQkJCQkJKmV4cGxvcmVyLWRlbGV0ZSoKK1ByZXNzaW5nICdEJyBpbnNpZGUgZXhwbG9yZXIgZGVsZXRlcyB0aGUgZmlsZSB1bmRlciB0aGUgY3Vyc29yLiBZb3UgY2FuIGRlbGV0ZQorbWFueSBmaWxlcyBieSB2aXN1YWxseSBzZWxlY3RpbmcgdGhlbSBhbmQgdXNpbmcgJ0QnLiBUaGUgZGVsZXRpb24gaXMKK2ludGVyYWN0aXZlIGluIHRoZSBmb3JtIHkvbi9hL3EuIERpcmVjdG9yeSBkZWxldGlvbiBpcyBub3Qgc3VwcG9ydGVkIChtYWlubHkKK2JlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIGRlbGV0ZSBhIGRpcmVjdG9yeSB1c2luZyBhIHZpbSBidWlsdC1pbiBmdW5jdGlvbikuCisKKwkJCQkJCQkqZXhwbG9yZXItcmVuYW1lKgorUHJlc3NpbmcgJ1InIGluc2lkZSBleHBsb3JlciB3aWxsIGFsbG93IHlvdSB0byByZW5hbWUgdGhlIGZpbGUgdW5kZXIgdGhlCitjdXJzb3IuCisKKwkJCQkJCQkqZzpleHBsU29ydEJ5KgorVGhlIGRpc3BsYXkgaW4gdGhlIGZpbGUgZXhwbG9yZXIgY2FuIGJlIHNvcnRlZCBpbiBmb3J3YXJkIG9yIHJldmVyc2Ugb3JkZXIgYnkKK25hbWUsIHNpemUsIG9yIG1vZGlmaWNhdGlvbiBkYXRlLiAgWW91IGNhbiBzZXQgdGhlIGRlZmF1bHQgc29ydGluZyBkaXJlY3Rpb24KK3dpdGggdGhlIG9wdGlvbiA+CisgIGxldCBnOmV4cGxTb3J0Qnk9J25hbWUnCQkiIGFscGhhYmV0aWNhbGx5CisgIGxldCBnOmV4cGxTb3J0Qnk9J3JldmVyc2UgbmFtZScJIiByZXZlcnNlIGFscGhhYmV0aWNhbGx5CisgIGxldCBnOmV4cGxTb3J0Qnk9J2RhdGUnCQkiIG5ld2VzdCBmaXJzdAorICBsZXQgZzpleHBsU29ydEJ5PSdyZXZlcnNlIGRhdGUnCSIgb2xkZXN0IGZpcnN0CisgIGxldCBnOmV4cGxTb3J0Qnk9J3NpemUnCQkiIGxhcmdlc3QgZmlyc3QKKyAgbGV0IGc6ZXhwbFNvcnRCeT0ncmV2ZXJzZSBzaXplJyAgICAgICAiIHNtYWxsZXN0IGZpcnN0CitXaGlsZSBpbiB0aGUgZXhwbG9yZXIsIHlvdSBjYW4gcm90YXRlIHRocm91Z2ggdGhlIHNvcnQgZmllbGRzIGJ5IHByZXNzaW5nIHRoZQorJ3MnIGtleSBhbmQgeW91IGNhbiByZXZlcnNlIHRoZSBjdXJyZW50IHNvcnQgb3JkZXIgYnkgcHJlc3NpbmcgdGhlICdyJyBrZXkuCitTb3J0aW5nIG9uIGZpZWxkcyBvdGhlciB0aGFuIHRoZSBuYW1lIHdpbGwgYmUgZmFzdGVyIGlmIHRoZSBzaXplIGFuZCBkYXRlIGFyZQorZGlzcGxheWVkICh1c2luZyAnaScgb3IgZzpleHBsRGV0YWlsZWRMaXN0KS4KK1RoZSBleHBsb3JlciBoZWFkaW5nIHdpbGwgaW5kaWNhdGUgdGhlIGN1cnJlbnQgc29ydCBvcmRlci4KKworCQkJCQkJCSpnOmV4cGxEaXJzRmlyc3QqCitUbyBjb250cm9sIHRoZSBzZWdyZWdhdGlvbiBvZiBkaXJlY3RvcmllcyBhbmQgZmlsZXMsIHlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uID4KKyAgbGV0IGc6ZXhwbERpcnNGaXJzdD0xICAgICAiIERpcmVjdG9yaWVzIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QgKGRlZmF1bHQpCisgIGxldCBnOmV4cGxEaXJzRmlyc3Q9MCAgICAgIiBEaXJlY3RvcmllcyBtaXhlZCBpbiB3aXRoIGZpbGVzCisgIGxldCBnOmV4cGxEaXJzRmlyc3Q9LTEgICAgIiBEaXJlY3RvcmllcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0CisKKwkJCQkJCQkqZzpleHBsU3VmZml4ZXNMYXN0KgorVG8gY29udHJvbCB0aGUgc2VncmVnYXRpb24gb2YgZmlsZXMgbWF0Y2hpbmcgdGhlIHN1ZmZpeGVzIG9wdGlvbiwgeW91IGNhbiBzZXQKK3RoaXMgb3B0aW9uID4KKyAgbGV0IGc6ZXhwbFN1ZmZpeGVzTGFzdD0xICAgICAiIEZpbGVzIG1hdGNoaW5nIHN1ZmZpeGVzIHNvcnRlZCBhdCB0aGUgYm90dG9tCisJCQkgICAgICAgIiBvZiB0aGUgbGlzdCAoZGVmYXVsdCkKKyAgbGV0IGc6ZXhwbFN1ZmZpeGVzTGFzdD0wICAgICAiIEZpbGVzIG1hdGNoaW5nIHN1ZmZpeGVzIHNvcnRlZCBub3JtYWxseQorICBsZXQgZzpleHBsU3VmZml4ZXNMYXN0PS0xICAgICIgRmlsZXMgbWF0Y2hpbmcgc3VmZml4ZXMgc29ydGVkIGF0IHRoZSB0b3Agb2YKKwkJCSAgICAgICAiIHRoZSBsaXN0CitUaGUgaGVhZGluZyB3aWxsIGluZGljYXRlIGlmIHN1ZmZpeGVzIGhhdmUgYmVlbiBtb3ZlZCB0byB0aGUgZW5kIChvciBzdGFydCkgb2YKK3RoZSBsaXN0LgorCisJCQkJCQkJKmc6ZXhwbFVzZVNlcGFyYXRvcnMqCitEaXJlY3RvcmllcyBhbmQgZmlsZXMgbWF0Y2hpbmcgdGhlIHN1ZmZpeGVzIGxpc3Qgd2lsbCBiZSBoaWdobGlnaHRlZC4gIElmIHlvdQoraGF2ZSB0aGUgZGlyZWN0b3JpZXMsIGZpbGVzLCBhbmQgc3VmZml4ZXMgc2VwYXJhdGVkLCBhbmQgeW91IHdvdWxkIGxpa2UgYQorc2VwYXJhdG9yIGxpbmUgYmV0d2VlbiB0aGUgZ3JvdXBzLCB5b3UgY2FuIHNldCB0aGUgb3B0aW9uID4KKyAgbGV0IGc6ZXhwbFVzZVNlcGFyYXRvcnM9MSAgICAiIFVzZSBzZXBhcmF0b3IgbGluZXMKKyAgbGV0IGc6ZXhwbFVzZVNlcGFyYXRvcnM9MCAgICAiIERvbid0IHVzZSBzZXBhcmF0b3IgbGluZXMKKzwKKwkJCQkJCQkgKmc6ZXhwbEZpbGVIYW5kbGVyKgorSWYgeW91IHNldCB0aGUgImc6ZXhwbEZpbGVIYW5kbGVyIiB2YXJpYWJsZSB0byB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLCB0eXBpbmcKKyd4JyB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi4gIFRoZSBmaWxlIG9yIGRpcmVjdG9yeSB1bmRlciB0aGUgY3Vyc29yIHdpbGwgYmUKK3Bhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24uICBTdXBwb3NlIHlvdSBoYXZlIEtERSwgeW91IGNvdWxkIHVzZQordGhpczogPgorCisgIGZ1bmN0aW9uIE15RmlsZUhhbmRsZXIoZm4pCisgICAgZXhlYyAic2lsZW50ISAha2ZtY2xpZW50IGV4ZWMgIiAuIGVzY2FwZShhOmZuLCcgXCUjJykKKyAgZW5kZnVuY3Rpb24KKyAgbGV0IGc6ZXhwbEZpbGVIYW5kbGVyID0gJ015RmlsZUhhbmRsZXInCisKK0ZvciBXaW4zMiB0aGUgdmFyaWFibGUgaXMgc2V0IGJ5IGRlZmF1bHQgdG8gaW52b2tlIHRoZSBleGVjdXRlIGFjdGlvbi4gSWYgeW91Cit0eXBlICd4JyBvbiBhIEhUTUwgZmlsZSwgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIHdpbGwgc3RhcnQgKG9yIHdoYXRldmVyCithcHBsaWNhdGlvbiB5b3UgaGF2ZSBhc3NvY2lhdGVkIHdpdGggSFRNTCBmaWxlcykuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHZpbTp0dz03ODpub2V0OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcGlfZ3ppcC50eHQgYi9ydW50aW1lL2RvYy9waV9nemlwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWVjZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvcGlfZ3ppcC50eHQKQEAgLTAsMCArMSwzOSBAQAorKnBpX2d6aXAudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIE9jdCAyOQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK0VkaXRpbmcgY29tcHJlc3NlZCBmaWxlcyB3aXRoIFZpbQkJKmd6aXAqICpiemlwMiogKmNvbXByZXNzKgorCisxLiBBdXRvY29tbWFuZHMJCQl8Z3ppcC1hdXRvY21kfAorCitUaGUgZnVuY3Rpb25hbGl0eSBtZW50aW9uZWQgaGVyZSBpcyBhIHxzdGFuZGFyZC1wbHVnaW58LgorVGhpcyBwbHVnaW4gaXMgb25seSBhdmFpbGFibGUgaWYgJ2NvbXBhdGlibGUnIGlzIG5vdCBzZXQuCitZb3UgY2FuIGF2b2lkIGxvYWRpbmcgdGhpcyBwbHVnaW4gYnkgc2V0dGluZyB0aGUgImxvYWRlZF9nemlwIiB2YXJpYWJsZTogPgorCTpsZXQgbG9hZGVkX2d6aXAgPSAxCisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGlzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEF1dG9jb21tYW5kcwkJCQkJCSpnemlwLWF1dG9jbWQqCisKK1RoZSBwbHVnaW4gaW5zdGFsbHMgYXV0b2NvbW1hbmRzIHRvIGludGVyY2VwdCByZWFkaW5nIGFuZCB3cml0aW5nIG9mIGZpbGVzCit3aXRoIHRoZXNlIGV4dGVuc2lvbnM6CisKKwlleHRlbnNpb24JY29tcHJlc3Npb24gfgorCSouWgkJY29tcHJlc3MgKExlbXBlbC1aaXYpCisJKi5negkJZ3ppcAorCSouYnoyCQliemlwMgorCitUaGF0J3MgYWN0dWFsbHkgdGhlIG9ubHkgdGhpbmcgeW91IG5lZWQgdG8ga25vdy4gIFRoZXJlIGFyZSBubyBvcHRpb25zLgorCitBZnRlciBkZWNvbXByZXNzaW5nIGEgZmlsZSwgdGhlIGZpbGV0eXBlIHdpbGwgYmUgZGV0ZWN0ZWQgYWdhaW4uICBUaGlzIHdpbGwKK21ha2UgYSBmaWxlIGxpa2UgImZvby5jLmd6IiBnZXQgdGhlICJjIiBmaWxldHlwZS4KKworSWYgeW91IGhhdmUgJ3BhdGNobW9kZScgc2V0LCBpdCB3aWxsIGJlIGFwcGVuZGVkIGFmdGVyIHRoZSBleHRlbnNpb24gZm9yCitjb21wcmVzc2lvbi4gIFRodXMgZWRpdGluZyB0aGUgcGF0Y2htb2RlIGZpbGUgd2lsbCBub3QgZ2l2ZSB5b3UgdGhlIGF1dG9tYXRpYworZGVjb21wcmVzc2lvbi4gIFlvdSBoYXZlIHRvIHJlbmFtZSB0aGUgZmlsZSBpZiB5b3Ugd2FudCB0aGlzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9waV9uZXRydy50eHQgYi9ydW50aW1lL2RvYy9waV9uZXRydy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmYThjZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3BpX25ldHJ3LnR4dApAQCAtMCwwICsxLDU0MyBAQAorKnBpX25ldHJ3LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiBBcHIgMjEsIDIwMDQKKworCisJCVZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLgorCisqZGF2KgkJKmh0dHAqCQkqbmV0d29yayoJKnJjcCoJCSpzY3AqCisqZmV0Y2gqCQkqbmV0cncqCQkqTnJlYWQqCQkqcnN5bmMqCQkqc2Z0cCoKKypmdHAqCQkqbmV0cncudmltKgkqTndyaXRlKgkqbmV0cnctZmlsZSoKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiswLiBDb250ZW50cwkJCQkJCSpuZXRydy1jb250ZW50cyoKKworMS4gIE5ldHJ3IFJlZmVyZW5jZS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcmVmfAorMi4gIE5ldHdvcmstT3JpZW50ZWQgRmlsZSBUcmFuc2Zlci4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cncteGZlcnwKKzMuICBBY3RpdmF0aW9uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWFjdGl2YXRlfAorNC4gIFRyYW5zcGFyZW50IEZpbGUgVHJhbnNmZXIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctdHJhbnNwYXJlbnR8Cis1LiAgRXggQ29tbWFuZHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1leHwKKzYuICBWYXJpYWJsZXMgYW5kIE9wdGlvbnMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXZhcnwKKzcuICBEZWJ1Z2dpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWRlYnVnfAorOC4gIE5ldyBTdHVmZi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbmV3fAorOS4gIENyZWRpdHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctY3JlZGl0c3wKKworVGhlIGZ1bmN0aW9uYWxpdHkgbWVudGlvbmVkIGhlcmUgaXMgZG9uZSB2aWEgdXNpbmcgfHN0YW5kYXJkLXBsdWdpbnwKK3RlY2huaXF1ZXMuICBUaGlzIHBsdWdpbiBpcyBvbmx5IGF2YWlsYWJsZSBpZgorCisJc2V0IG5vY3AJCSAgICAiICdjb21wYXRpYmxlJyBpcyBub3Qgc2V0CisJZmlsZXR5cGUgcGx1Z2luIG9uCSAgICAiIHBsdWdpbnMgYXJlIGVuYWJsZWQKKworWW91IGNhbiBhdm9pZCBsb2FkaW5nIHRoaXMgcGx1Z2luIGJ5IHNldHRpbmcgdGhlICJsb2FkZWRfbmV0cnciIHZhcmlhYmxlCitpbiB5b3VyIDwudmltcmM+IGZpbGU6ID4KKworCTpsZXQgbG9hZGVkX25ldHJ3ID0gMQorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhpc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBOZXRydyBSZWZlcmVuY2UJCQkJCQkqbmV0cnctcmVmKgorCisgICAgT1BUSU9OUworCWxldCBnOm5ldHJ3X2Z0cCA9MCB1c2UgZnRwIChkZWZhdWx0KQkJICAgICAodWlkIHBhc3N3b3JkKQorCQkJPTEgdXNlIGFsdGVybmF0ZSBmdHAgbWV0aG9kCSh1c2VyIHVpZCBwYXNzd29yZCkKKwkgIElmIHlvdSdyZSBoYXZpbmcgdHJvdWJsZSB3aXRoIGZ0cCwgdHJ5IGNoYW5naW5nIHRoZSB2YWx1ZQorCSAgb2YgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIDwudmltcmM+IHRvIGNoYW5nZSBtZXRob2RzCisKKwlsZXQgZzpuZXRyd19pZ25vcmVuZXRyYz0gMQorCSAgSWYgeW91IGhhdmUgYSA8Lm5ldHJjPiBmaWxlIGJ1dCBpdCBkb2Vzbid0IHdvcmsgYW5kIHlvdQorCSAgd2FudCBpdCBpZ25vcmVkLCB0aGVuIHNldCB0aGlzIHZhcmlhYmxlIGFzIHNob3duLiAgSXRzIG1lcmUKKwkgIGV4aXN0ZW5jZSBpcyBlbm91Z2ggdG8gY2F1c2UgPC5uZXRyYz4gdG8gYmUgaWdub3JlZC4KKworCUNvbnRyb2xsaW5nIEV4dGVybmFsIEFwcGxpY2F0aW9ucworCisJIFByb3RvY29sICBWYXJpYWJsZQkgICAgICAgRGVmYXVsdCBWYWx1ZQorCSAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tCisJICAgZGF2OiAgICBnOm5ldHJ3X2Rhdl9jbWQgICA9ICJjYWRhdmVyIgorCSAgIGZldGNoOiAgZzpuZXRyd19mZXRjaF9jbWQgPSAiZmV0Y2ggLW8iCisJICAgZnRwOiAgICBnOm5ldHJ3X2Z0cF9jbWQgICA9ICJmdHAiCisJICAgaHR0cDogICBnOm5ldHJ3X2h0dHBfY21kICA9ICJmZXRjaCAtbyIgICBlbHNlIGlmIGZldGNoIGlzIGF2YWlsYWJsZQorCSAgIGh0dHA6ICAgZzpuZXRyd19odHRwX2NtZCAgPSAid2dldCAtcSAtTyIgICAgSWYgd2dldCBpcyBhdmFpbGFibGUKKwkgICByY3A6ICAgIGc6bmV0cndfcmNwX2NtZCAgID0gInJjcCIKKwkgICByc3luYzogIGc6bmV0cndfcnN5bmNfY21kID0gInJzeW5jIC1hIgorCSAgIHNjcDogICAgZzpuZXRyd19zY3BfY21kICAgPSAic2NwIC1xIgorCSAgIHNmdHA6ICAgZzpuZXRyd19zZnRwX2NtZCAgPSAic2Z0cCIKKworICAgIFJFQURJTkcKKwk6TnJlYWQgPwkJCQkJZ2l2ZSBoZWxwCisJOk5yZWFkICJtYWNoaW5lOmZpbGUiCQkJCXVzZXMgcmNwCisJOk5yZWFkICJtYWNoaW5lIGZpbGUiCQkJCXVzZXMgZnRwICAgd2l0aCA8Lm5ldHJjPgorCTpOcmVhZCAibWFjaGluZSBpZCBwYXNzd29yZCBmaWxlIgkJdXNlcyBmdHAKKwk6TnJlYWQgImRhdjovL21hY2hpbmVbOnBvcnRdL2ZpbGUiCQl1c2VzIGNhZGF2ZXIKKwk6TnJlYWQgImZldGNoOi8vW3VzZXJAXW1hY2hpbmUvZmlsZSIJCXVzZXMgZmV0Y2gKKwk6TnJlYWQgImZ0cDovL1t1c2VyQF1tYWNoaW5lW1s6I11wb3J0XS9maWxlIgl1c2VzIGZ0cCAgIGF1dG9kZXRlY3RzIDwubmV0cmM+CisJOk5yZWFkICJodHRwOi8vW3VzZXJAXW1hY2hpbmUvZmlsZSIJCXVzZXMgaHR0cCAgdXNlcyB3Z2V0CisJOk5yZWFkICJyY3A6Ly9bdXNlckBdbWFjaGluZS9maWxlIgkJdXNlcyByY3AKKwk6TnJlYWQgInJzeW5jOi8vW3VzZXJAXW1hY2hpbmVbOnBvcnRdL2ZpbGUiCXVzZXMgcnN5bmMKKwk6TnJlYWQgInNjcDovL1t1c2VyQF1tYWNoaW5lW1s6I11wb3J0XS9maWxlIgl1c2VzIHNjcAorCTpOcmVhZCAic2Z0cDovL1t1c2VyQF1tYWNoaW5lL2ZpbGUiCQl1c2VzIHNmdHAKKworICAgIFdSSVRJTkcKKwk6TndyaXRlID8JCQkJCWdpdmUgaGVscAorCTpOd3JpdGUgIm1hY2hpbmU6ZmlsZSIJCQkJdXNlcyByY3AKKwk6TndyaXRlICJtYWNoaW5lIGZpbGUiCQkJCXVzZXMgZnRwICAgd2l0aCA8Lm5ldHJjPgorCTpOd3JpdGUgIm1hY2hpbmUgaWQgcGFzc3dvcmQgZmlsZSIJCXVzZXMgZnRwCisJOk53cml0ZSAiZGF2Oi8vbWFjaGluZVs6cG9ydF0vZmlsZSIJCXVzZXMgY2FkYXZlcgorCTpOd3JpdGUgImZ0cDovL1t1c2VyQF1tYWNoaW5lW1s6I11wb3J0XS9maWxlIgl1c2VzIGZ0cCAgIGF1dG9kZXRlY3RzIDwubmV0cmM+CisJOk53cml0ZSAicmNwOi8vW3VzZXJAXW1hY2hpbmUvZmlsZSIJCXVzZXMgcmNwCisJOk53cml0ZSAicnN5bmM6Ly9bdXNlckBdbWFjaGluZVs6cG9ydF0vZmlsZSIJdXNlcyByc3luYworCTpOd3JpdGUgInNjcDovL1t1c2VyQF1tYWNoaW5lW1s6I11wb3J0XS9maWxlIgl1c2VzIHNjcAorCTpOd3JpdGUgInNmdHA6Ly9bdXNlckBdbWFjaGluZS9maWxlIgkJdXNlcyBzZnRwCisJaHR0cDogbm90IHN1cHBvcnRlZCEKKworICAgIFVTRVIgQU5EIFBBU1NXT1JEIENIQU5HSU5HCisJQXR0ZW1wdHMgdG8gdXNlIGZ0cCB3aWxsIHByb21wdCB5b3UgZm9yIGEgdXNlci1pZCBhbmQgYSBwYXNzd29yZC4KKwlUaGVzZSB3aWxsIGJlIHNhdmVkIGluIGc6bmV0cndfdWlkIGFuZCBnOm5ldHJ3X3Bhc3N3ZCBTdWJzZXF1ZW50IHVzZXMKKwlvZiBmdHAgd2lsbCByZS11c2UgdGhvc2UuICBJZiB5b3UgbmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgdXNlciBpZAorCWFuZC9vciBwYXNzd29yZCwgeW91J2xsIHdhbnQgdG8gY2FsbCBOZXRVc2VyUGFzcygpIGZpcnN0LgorCisJOk5ldFVzZXJQYXNzIFt1aWQgW3Bhc3N3b3JkXV0JCS0tIHByb21wdHMgYXMgbmVlZGVkCisJOmNhbGwgTmV0VXNlclBhc3MoKQkJCS0tIHByb21wdHMgZm9yIHVpZCBhbmQgcGFzc3dvcmQKKwk6Y2FsbCBOZXRVc2VyUGFzcygidWlkIikJCS0tIHByb21wdHMgZm9yIHBhc3N3b3JkCisJOmNhbGwgTmV0VXNlclBhc3MoInVpZCIsInBhc3N3b3JkIikJLS0gc2V0cyBnbG9iYWwgdWlkIGFuZCBwYXNzd29yZAorCisgICAgVkFSSUFCTEVTCisJYjpuZXRyd19sYXN0ZmlsZSBsYXN0IGZpbGUgTmV0d29yay1yZWFkL3dyaXR0ZW4gcmV0YWluZWQgb24KKwkJCSAgYSBwZXItYnVmZmVyIGJhc2lzCQkoc3VwcG9ydHMgcGxhaW4gOk53ICkKKwlzOm5ldHJ3X2xpbmUJICBkdXJpbmcgTncvTmV0V3JpdGUsIGhvbGRzIGN1cnJlbnQgbGluZSAgIG51bWJlcgorCXM6bmV0cndfY29sCSAgZHVyaW5nIE53L05ldFdyaXRlLCBob2xkcyBjdXJyZW50IGNvbHVtbiBudW1iZXIKKwkJCSAgczpuZXRyd19saW5lIGFuZCBzOm5ldHJ3X2NvbCBhcmUgdXNlZCB0bworCQkJICByZXN0b3JlIHRoZSBjdXJzb3IgcG9zaXRpb24gb24gd3JpdGVzCisJZzpuZXRyd19mdHAJICBpZiBpdCBkb2Vzbid0IGV4aXN0LCB1c2UgZGVmYXVsdCBmdHAKKwkJCSAgPTAgdXNlIGRlZmF1bHQgZnRwCQkgICAgICAgKHVpZCBwYXNzd29yZCkKKwkJCSAgPTEgdXNlIGFsdGVybmF0ZSBmdHAgbWV0aG9kCSAgKHVzZXIgdWlkIHBhc3N3b3JkKQorCWc6bmV0cndfZnRwbW9kZSAgID0iYmluYXJ5IgkJCQkgICAgKGRlZmF1bHQpCisJCQkgID0iYXNjaWkiCQkJICAgICAob3IgeW91ciBjaG9pY2UpCisJZzpuZXRyd191aWQJICAoZnRwKSB1c2VyLWlkLCAgICAgIHJldGFpbmVkIG9uIGEgcGVyLXNlc3Npb24gYmFzaXMKKwlnOm5ldHJ3X3Bhc3N3ZAkgIChmdHApIHBhc3N3b3JkLCAgICAgcmV0YWluZWQgb24gYSBwZXItc2Vzc2lvbiBiYXNpcworCWc6bmV0cndfd2luOTVmdHAgID0wIHVzZSB1bml4LXN0eWxlIGZ0cCBldmVuIGlmIHdpbjk1L3dpbjk4L3dpbk1FCisJCQkgID0xIHVzZSBkZWZhdWx0IG1ldGhvZCB0byBkbyBmdHAKKwlnOm5ldHJ3X2N5Z3dpbgkgID0xIGFzc3VtZSBzY3AgdW5kZXIgd2luZG93cyBpcyBmcm9tIGN5Z3dpbgorCQkJCQkJCSAoZGVmYXVsdCBpZiB3aW5kb3dzKQorCQkJICA9MCBhc3N1bWUgc2NwIHVuZGVyIHdpbmRvd3MgYWNjZXB0cworCQkJICAgIHdpbmRvd3Mtc3R5bGUgcGF0aHMJCSAoZGVmYXVsdCBvdGhlcndpc2UpCisJZzpuZXRyd191c2VfbnRfcmNwPTAgZG9uJ3QgdXNlIHRoZSByY3Agb2YgV2luTlQsIFdpbjIwMDAgYW5kIFdpblhQIChkZWZhdWx0KQorCQkJICA9MSB1c2UgdGhlIHJjcCBvZiBXaW5OVCwuLi4gaW4gYmluYXJ5IG1vZGUKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIE5ldHdvcmstT3JpZW50ZWQgRmlsZSBUcmFuc2ZlcgkJCQkqbmV0cncteGZlcioKKworTmV0d29yay1vcmllbnRlZCBmaWxlIHRyYW5zZmVyIHVuZGVyIFZpbSBpcyBpbXBsZW1lbnRlZCBieSBhIFZpbUwtYmFzZWQgc2NyaXB0CisoPG5ldHJ3LnZpbT4pIHVzaW5nIHBsdWdpbiB0ZWNobmlxdWVzLiAgSXQgY3VycmVudGx5IHN1cHBvcnRzIGJvdGggcmVhZGluZworYW5kIHdyaXRpbmcgYWNyb3NzIG5ldHdvcmtzIHVzaW5nIHJjcCwgc2NwLCBmdHAgb3IgZnRwKzwubmV0cmM+LCBzY3AsIGZldGNoLAorZGF2L2NhZGF2ZXIsIHJzeW5jLCBvciBzZnRwLgorCitodHRwIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgcmVhZC1vbmx5IHZpYSB1c2Ugb2Ygd2dldCBvciBmZXRjaC4KKworPG5ldHJ3LnZpbT4gaXMgYSBzdGFuZGFyZCBwbHVnaW4gd2hpY2ggYWN0cyBhcyBnbHVlIGJldHdlZW4gVmltIGFuZCB0aGUKK3ZhcmlvdXMgZmlsZSB0cmFuc2ZlciBwcm9ncmFtcy4gIEl0IHVzZXMgYXV0b2NvbW1hbmQgZXZlbnRzIChCdWZSZWFkQ21kLAorRmlsZVJlYWRDbWQsIEJ1ZldyaXRlQ21kKSB0byBpbnRlcmNlcHQgcmVhZHMvd3JpdGVzIHdpdGggdXJsLWxpa2UgZmlsZW5hbWVzLiA+CisKKwlleC4gdmltIGZ0cDovL2hvc3RuYW1lL3BhdGgvdG8vZmlsZQorPAorVGhlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBjb2xvbiBzcGVjaWZ5IHRoZSBwcm90b2NvbCB0byB1c2U7CitpbiB0aGUgZXhhbXBsZSwgaXRzIGZ0cC4gIFRoZSA8bmV0cncudmltPiBzY3JpcHQgdGhlbiBmb3JtdWxhdGVzCithIGNvbW1hbmQgb3IgYSBzZXJpZXMgb2YgY29tbWFuZHMgKHR5cGljYWxseSBmdHApIHdoaWNoIGl0IGlzc3VlcwordG8gYW4gZXh0ZXJuYWwgcHJvZ3JhbSAoZnRwLCBzY3AsIGV0Yykgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZpbGUKK3RyYW5zZmVyL3Byb3RvY29sLiAgRmlsZXMgYXJlIHJlYWQgZnJvbS93cml0dGVuIHRvIGEgdGVtcG9yYXJ5IGZpbGUKKyh1bmRlciBVbml4L0xpbnV4LCAvdG1wLy4uLikgd2hpY2ggdGhlIDxuZXRydy52aW0+IHNjcmlwdCB3aWxsCitjbGVhbiB1cC4KKworT25lIG1heSBtb2RpZnkgYW55IHByb3RvY29sJ3MgaW1wbGVtZW50aW5nIGV4dGVybmFsIGFwcGxpY2F0aW9uCitieSBzZXR0aW5nIGEgdmFyaWFibGUgKGV4LiBzY3AgdXNlcyB0aGUgdmFyaWFibGUgZzpuZXRyd19zY3BfY21kLAord2hpY2ggaXMgZGVmYXVsdGVkIHRvICJzY3AgLXEiKS4KKworRnRwLCBhbiBvbGQgcHJvdG9jb2wsIHNlZW1zIHRvIGJlIGJsZXNzZWQgYnkgbnVtZXJvdXMgaW1wbGVtZW50YXRpb25zLgorVW5mb3J0dW5hdGVseSwgc29tZSBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vaXN5IChpZS4sIGFkZCBqdW5rIHRvIHRoZSBlbmQKK29mIHRoZSBmaWxlKS4gIFRodXMsIGNvbmNlcm5lZCB1c2VycyBtYXkgZGVjaWRlIHRvIHdyaXRlIGEgTmV0UmVhZEZpeHVwKCkKK2Z1bmN0aW9uIHRoYXQgd2lsbCBjbGVhbiB1cCBhZnRlciByZWFkaW5nIHdpdGggdGhlaXIgZnRwLiAgU29tZSBVbml4IHN5c3RlbXMKKyhpZS4sIEZyZWVCU0QpIHByb3ZpZGUgYSB1dGlsaXR5IGNhbGxlZCAiZmV0Y2giIHdoaWNoIHVzZXMgdGhlIGZ0cCBwcm90b2NvbAorYnV0IGlzIG5vdCBub2lzeSBhbmQgbW9yZSBjb252ZW5pZW50LCBhY3R1YWxseSwgZm9yIDxuZXRydy52aW0+IHRvIHVzZS4KK0NvbnNlcXVlbnRseSwgaWYgImZldGNoIiBpcyBleGVjdXRhYmxlLCBpdCB3aWxsIGJlIHVzZWQgdG8gZG8gcmVhZHMgZm9yCitmdHA6Ly8uLi4gKGFuZCBodHRwOi8vLi4uKSAuICBTZWUgfG5ldHJ3LXZhcnwgZm9yIG1vcmUgYWJvdXQgdGhpcy4KKworRm9yIHJjcCwgc2NwLCBzZnRwLCBhbmQgaHR0cCwgb25lIG1heSB1c2UgbmV0d29yay1vcmllbnRlZCBmaWxlIHRyYW5zZmVycwordHJhbnNwYXJlbnRseTsgaWUuCis+CisJdmltIHJjcDovL1t1c2VyQF1tYWNoaW5lL3BhdGgKKwl2aW0gc2NwOi8vW3VzZXJAXW1hY2hpbmUvcGF0aAorPAorSWYgeW91ciBmdHAgc3VwcG9ydHMgPC5uZXRyYz4sIHRoZW4gaXQgdG9vIGNhbiBiZSBqdXN0IGFzIHRyYW5zcGFyZW50bHkgdXNlZAoraWYgdGhlIG5lZWRlZCB0cmlhZCBvZiBtYWNoaW5lIG5hbWUsIHVzZXIgaWQsIGFuZCBwYXNzd29yZCBhcmUgcHJlc2VudCBpbgordGhhdCBmaWxlLiAgWW91ciBmdHAgbXVzdCBiZSBhYmxlIHRvIHVzZSB0aGUgPC5uZXRyYz4gZmlsZSBvbiBpdHMgb3duLCBob3dldmVyLgorPgorCXZpbSBmdHA6Ly9bdXNlckBdbWFjaGluZVtbOiNdcG9ydG51bWJlcl0vcGF0aAorPAorSG93ZXZlciwgZnRwIHdpbGwgb2Z0ZW4gbmVlZCB0byBxdWVyeSB0aGUgdXNlciBmb3IgdGhlIHVzZXJpZCBhbmQgcGFzc3dvcmQuCitUaGUgbGF0dGVyIHdpbGwgYmUgZG9uZSAic2lsZW50bHkiOyBpZS4gYXN0ZXJpc2tzIHdpbGwgc2hvdyB1cCBpbnN0ZWFkIG9mCit0aGUgYWN0dWFsbHktdHlwZWQtaW4gcGFzc3dvcmQuICBOZXRydyB3aWxsIHJldGFpbiB0aGUgdXNlcmlkIGFuZCBwYXNzd29yZAorZm9yIHN1YnNlcXVlbnQgcmVhZC93cml0ZXMgZnJvbSB0aGUgbW9zdCByZWNlbnQgdHJhbnNmZXIgc28gc3Vic2VxdWVudAordHJhbnNmZXJzIChyZWFkL3dyaXRlKSB0byBvciBmcm9tIHRoYXQgbWFjaGluZSB3aWxsIHRha2UgcGxhY2Ugd2l0aG91dAorYWRkaXRpb25hbCBwcm9tcHRpbmcuCisKKwkJCQkJCQkJKm5ldHJ3LXVybHMqCisgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rCisgIHwgIFJlYWRpbmcJCQkgICAgfCBXcml0aW5nCQkJIHwgIFVzZXMgICAgICB8CisgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rCisgIHwgREFWOgkJCSAgICB8CQkJCSB8CSAgICAgIHwKKyAgfCAgZGF2Oi8vaG9zdC9wYXRoCQkgICAgfAkJCQkgfCBjYWRhdmVyICAgIHwKKyAgfCAgOk5yZWFkIGRhdjovL2hvc3QvcGF0aAkgICAgfCA6TndyaXRlIGRhdjovL2hvc3QvcGF0aAkgfCBjYWRhdmVyICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgfCBGRVRDSDoJCQkgICAgfAkJCQkgfAkgICAgICB8CisgIHwgIGZldGNoOi8vW3VzZXJAXWhvc3QvcGF0aAkgICAgfAkJCQkgfAkgICAgICB8CisgIHwgIGZldGNoOi8vW3VzZXJAXWhvc3Q6aHR0cC9wYXRoICB8ICBOb3QgQXZhaWxhYmxlCQkgfCBmZXRjaCAgICAgIHwKKyAgfCAgOk5yZWFkIGZldGNoOi8vW3VzZXJAXWhvc3QvcGF0aHwJCQkJIHwJICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICB8IEZJTEU6CQkJICAgIHwJCQkJIHwJICAgICAgfAorICB8ICBmaWxlOi8vLyoJCQkgICAgfCBmaWxlOi8vLyoJCQkgfAkgICAgICB8CisgIHwgIGZpbGU6Ly9sb2NhbGhvc3QvKgkJICAgIHwgZmlsZTovL2xvY2FsaG9zdC8qCSB8CSAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgfCBGVFA6CSAgKCozKQkJICAgIHwJCSAgICgqMykJCSB8CSAgICAgIHwKKyAgfCAgZnRwOi8vW3VzZXJAXWhvc3QvcGF0aAkgICAgfCBmdHA6Ly9bdXNlckBdaG9zdC9wYXRoCSB8IGZ0cAkoKjIpICB8CisgIHwgIDpOcmVhZCBmdHA6Ly9ob3N0L3BhdGgJICAgIHwgOk53cml0ZSBmdHA6Ly9ob3N0L3BhdGgJIHwgZnRwKy5uZXRyYyB8CisgIHwgIDpOcmVhZCBob3N0IHBhdGgJCSAgICB8IDpOd3JpdGUgaG9zdCBwYXRoCQkgfCBmdHArLm5ldHJjIHwKKyAgfCAgOk5yZWFkIGhvc3QgdWlkIHBhc3MgcGF0aAkgICAgfCA6TndyaXRlIGhvc3QgdWlkIHBhc3MgcGF0aCB8IGZ0cAkgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgIHwgSFRUUDogd2dldCBpcyBleGVjdXRhYmxlOiAoKjQpICB8CQkJCSB8CSAgICAgIHwKKyAgfCAgaHR0cDovL1t1c2VyQF1ob3N0L3BhdGgJICAgIHwJICAgICBOb3QgQXZhaWxhYmxlCSB8IHdnZXQgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICB8IEhUVFA6IGZldGNoIGlzIGV4ZWN1dGFibGUgKCo0KSAgfAkJCQkgfAkgICAgICB8CisgIHwgIGh0dHA6Ly9bdXNlckBdaG9zdC9wYXRoCSAgICB8CSAgICAgTm90IEF2YWlsYWJsZQkgfCBmZXRjaCAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgfCBSQ1A6CQkJICAgIHwJCQkJIHwJICAgICAgfAorICB8ICByY3A6Ly9bdXNlckBdaG9zdC9wYXRoCSAgICB8IHJjcDovL1t1c2VyQF1ob3N0L3BhdGgJIHwgcmNwCSAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgfCBSU1lOQzoJCQkgICAgfAkJCQkgfAkgICAgICB8CisgIHwgIHJzeW5jOi8vW3VzZXJAXWhvc3QvcGF0aAkgICAgfCByc3luYzovL1t1c2VyQF1ob3N0L3BhdGgJIHwgcnN5bmMgICAgICB8CisgIHwgIDpOcmVhZCByc3luYzovL2hvc3QvcGF0aAkgICAgfCA6TndyaXRlIHJzeW5jOi8vaG9zdC9wYXRoICB8IHJzeW5jICAgICAgfAorICB8ICA6TnJlYWQgcmNwOi8vaG9zdC9wYXRoCSAgICB8IDpOd3JpdGUgcmNwOi8vaG9zdC9wYXRoCSB8IHJjcAkgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisgIHwgU0NQOgkJCSAgICB8CQkJCSB8CSAgICAgIHwKKyAgfCAgc2NwOi8vW3VzZXJAXWhvc3QvcGF0aAkgICAgfCBzY3A6Ly9bdXNlckBdaG9zdC9wYXRoCSB8IHNjcAkgICAgICB8CisgIHwgIDpOcmVhZCBzY3A6Ly9ob3N0L3BhdGgJICAgIHwgOk53cml0ZSBzY3A6Ly9ob3N0L3BhdGgJIHwgc2NwCSgqMSkgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgfCBTRlRQOgkJCSAgICB8CQkJCSB8CSAgICAgIHwKKyAgfCAgc2Z0cDovL1t1c2VyQF1ob3N0L3BhdGgJICAgIHwgc2Z0cDovL1t1c2VyQF1ob3N0L3BhdGgJIHwgc2Z0cCAgICAgICB8CisgIHwgIDpOcmVhZCBzZnRwOi8vaG9zdC9wYXRoCSAgICB8IDpOd3JpdGUgc2Z0cDovL2hvc3QvcGF0aAkgfCBzZnRwICAoKjEpIHwKKyAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PSsKKworCSgqMSkgRm9yIGFuIGFic29sdXRlIHBhdGggdXNlIHNjcDovL21hY2hpbmUvL3BhdGguCisKKwkoKjIpIGlmIDwubmV0cmM+IGlzIHByZXNlbnQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCB3aWxsCisJd29yayB3aXRoIHlvdXIgZnRwIGNsaWVudC4gIE90aGVyd2lzZSB0aGUgc2NyaXB0IHdpbGwKKwlwcm9tcHQgZm9yIHVzZXItaWQgYW5kIHBhc3N3b3JkLgorCisJKCozKSBmb3IgZnRwLCAibWFjaGluZSIgbWF5IGJlIG1hY2hpbmUjcG9ydCBvciBtYWNoaW5lOnBvcnQKKwlpZiBhIGRpZmZlcmVudCBwb3J0IGlzIG5lZWRlZCB0aGFuIHRoZSBzdGFuZGFyZCBmdHAgcG9ydAorCisJKCo0KSBmb3IgaHR0cDouLi4sIGlmIHdnZXQgaXMgYXZhaWxhYmxlIGl0IHdpbGwgYmUgdXNlZC4gIE90aGVyd2lzZSwKKwlpZiBmZXRjaCBpcyBhdmFpbGFibGUgaXQgd2lsbCBiZSB1c2VkLgorCitCb3RoIHRoZSA6TnJlYWQgYW5kIHRoZSA6TndyaXRlIGV4LWNvbW1hbmRzIGNhbiBhY2NlcHQgbXVsdGlwbGUgZmlsZW5hbWVzLgorCisKK05FVFJDCQkJCQkJCSpuZXRydy1uZXRyYyoKKworVGhlIHR5cGljYWwgc3ludGF4IGZvciBsaW5lcyBpbiBhIDwubmV0cmM+IGZpbGUgaXMgZ2l2ZW4gYXMgc2hvd24gYmVsb3cuCitGdHAgdW5kZXIgVW5peCB1c3VhbGx5IHN1cHBvcnQgPC5uZXRyYz47IFdpbmRvd3MnIGZ0cCB1c3VhbGx5IGRvZXNuJ3QuCis+CisJbWFjaGluZSB7ZnVsbCBtYWNoaW5lIG5hbWV9IGxvZ2luIHt1c2VyLWlkfSBwYXNzd29yZCAie3Bhc3N3b3JkfSIKKwlkZWZhdWx0IGxvZ2luIHt1c2VyLWlkfSBwYXNzd29yZCAie3Bhc3N3b3JkfSIKKworWW91ciBmdHAgY2xpZW50IG11c3QgaGFuZGxlIHRoZSB1c2Ugb2YgPC5uZXRyYz4gb24gaXRzIG93biwgYnV0IGlmIHRoZQorPC5uZXRyYz4gZmlsZSBleGlzdHMsIGFuIGZ0cCB0cmFuc2ZlciB3aWxsIG5vdCBhc2sgZm9yIHRoZSB1c2VyLWlkIG9yCitwYXNzd29yZC4KKworCU5vdGU6CisJU2luY2UgdGhpcyBmaWxlIGNvbnRhaW5zIHBhc3N3b3JkcywgbWFrZSB2ZXJ5IHN1cmUgbm9ib2R5IGVsc2UgY2FuCisJcmVhZCB0aGlzIGZpbGUhICBNb3N0IHByb2dyYW1zIHdpbGwgcmVmdXNlIHRvIHVzZSBhIC5uZXRyYyB0aGF0IGlzCisJcmVhZGFibGUgZm9yIG90aGVycy4gIERvbid0IGZvcmdldCB0aGF0IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBjYW4KKwlzdGlsbCByZWFkIHRoZSBmaWxlIQorCisKK1BBU1NXT1JECQkJCQkJKm5ldHJ3LXBhc3N3ZCoKKworVGhlIHNjcmlwdCBhdHRlbXB0cyB0byBnZXQgcGFzc3dvcmRzIGZvciBmdHAgaW52aXNpYmx5IHVzaW5nIHxpbnB1dHNlY3JldCgpfCwKK2EgYnVpbHQtaW4gVmltIGZ1bmN0aW9uLiAgU2VlIHxuZXRydy11aWRwYXNzfCBmb3IgaG93IHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQKK2FmdGVyIG9uZSBoYXMgc2V0IGl0LgorCitVbmZvcnR1bmF0ZWx5IHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IGZvciBuZXRydyB0byBmZWVkIGEgcGFzc3dvcmQKK3RvIHNjcC4gIFRodXMgZXZlcnkgdHJhbnNmZXIgdmlhIHNjcCB3aWxsIHJlcXVpcmUgcmUtZW50cnkgb2YgdGhlIHBhc3N3b3JkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gQWN0aXZhdGlvbgkJCQkJCSpuZXRydy1hY3RpdmF0ZSoKKworTmV0d29yay1vcmllbnRlZCBmaWxlIHRyYW5zZmVycyBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHQgd2hlbmV2ZXIKK3wnbm9jb21wYXRpYmxlJ3wgbW9kZSBpcyBlbmFibGVkLiAgVGhlIDxuZXRydy52aW0+IGZpbGUgcmVzaWRlcyBpbiB5b3VyCitzeXN0ZW0ncyB2aW0tcGx1Z2luIGRpcmVjdG9yeSBhbmQgaXMgc291cmNlZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHlvdQorYnJpbmcgdXAgdmltLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVHJhbnNwYXJlbnQgRmlsZSBUcmFuc2ZlcgkJCQkqbmV0cnctdHJhbnNwYXJlbnQqCisKK1RyYW5zcGFyZW50IGZpbGUgdHJhbnNmZXJzIG9jY3VyIHdoZW5ldmVyIGEgcmVndWxhciBmaWxlIHJlYWQgb3Igd3JpdGUKKyhpbnZva2VkIHZpYSBhbiB8OmF1dG9jbWR8IGZvciB8QnVmUmVhZENtZHwgb3IgfEJ1ZldyaXRlQ21kfCBldmVudHMpIGlzIG1hZGUuCitUaHVzIG9uZSBtYXkgdXNlIGZpbGVzIGFjcm9zcyBuZXR3b3JrcyBhcyBpZiB0aGV5IHdlcmUgbG9jYWwuID4KKworCXZpbSBmdHA6Ly9bdXNlckBdbWFjaGluZS9wYXRoCisJLi4uCisJOndxCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBFeCBDb21tYW5kcwkJCQkJCSpuZXRydy1leCoKKworVGhlIHVzdWFsIHJlYWQvd3JpdGUgY29tbWFuZHMgYXJlIHN1cHBvcnRlZC4gIFRoZXJlIGFyZSBhbHNvIGEgY291cGxlIG9mCithZGRpdGlvbmFsIGNvbW1hbmRzIGF2YWlsYWJsZS4KKworOltyYW5nZV1OdwlXcml0ZSB0aGUgc3BlY2lmaWVkIGxpbmVzIHRvIHRoZSBjdXJyZW50CisJCWZpbGUgYXMgc3BlY2lmaWVkIGluIGI6bmV0cndfbGFzdGZpbGUuCisKKzpbcmFuZ2VdTncge25ldGZpbGV9IFt7bmV0ZmlsZX1dLi4uCisJCVdyaXRlIHRoZSBzcGVjaWZpZWQgbGluZXMgdG8gdGhlIHtuZXRmaWxlfS4KKworOk5yZWFkCisJCVJlYWQgdGhlIHNwZWNpZmllZCBsaW5lcyBpbnRvIHRoZSBjdXJyZW50CisJCWJ1ZmZlciBmcm9tIHRoZSBmaWxlIHNwZWNpZmllZCBpbgorCQliOm5ldHJ3X2xhc3RmaWxlLgorCis6TnJlYWQge25ldGZpbGV9IHtuZXRmaWxlfS4uLgorCQlSZWFkIHRoZSB7bmV0ZmlsZX0gYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZS4KKworCQkJCQkJCQkJKm5ldHJ3LXVpZHBhc3MqCis6Y2FsbCBOZXRVc2VyUGFzcygpCisJCUlmIGI6bmV0cndfdWlkIGFuZCBiOm5ldHJ3X3Bhc3N3ZCBkb24ndCBleGlzdCwKKwkJdGhpcyBmdW5jdGlvbiBxdWVyeSB0aGUgdXNlciBmb3IgdGhlbS4KKworOmNhbGwgTmV0VXNlclBhc3MoInVzZXJpZCIpCisJCVRoaXMgY2FsbCB3aWxsIHNldCB0aGUgYjpuZXRyd191aWQgYW5kLCBpZgorCQl0aGUgcGFzc3dvcmQgZG9lc24ndCBleGlzdCwgd2lsbCBxdWVyeSB0aGUgdXNlciBmb3IgaXQuCisKKzpjYWxsIE5ldFVzZXJQYXNzKCJ1c2VyaWQiLCJwYXNzd2QiKQorCQlUaGlzIGNhbGwgd2lsbCBzZXQgYm90aCB0aGUgYjpuZXRyd191aWQgYW5kIGI6bmV0cndfcGFzc3dkLgorCQlUaGUgdXNlci1pZCBhbmQgcGFzc3dvcmQgYXJlIHVzZWQgYnkgZnRwIHRyYW5zZmVycy4gIE9uZSBtYXkKKwkJZWZmZWN0aXZlbHkgcmVtb3ZlIHRoZSB1c2VyLWlkIGFuZCBwYXNzd29yZCBieSB1c2luZyAiIgorCQlzdHJpbmdzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gVmFyaWFibGVzIGFuZCBPcHRpb25zCQkJKm5ldHJ3LW9wdGlvbnMqICpuZXRydy12YXIqCisKK1RoZSBzY3JpcHQgPG5ldHJ3LnZpbT4gdXNlcyBzZXZlcmFsIHZhcmlhYmxlcyB3aGljaCBjYW4gYWZmZWN0IDxuZXRydy52aW0+J3MKK2JlaGF2aW9yLiAgVGhlc2UgdmFyaWFibGVzIHR5cGljYWxseSBtYXkgYmUgc2V0IGluIHRoZSB1c2VyJ3MgPC52aW1yYz4gZmlsZToKKworCWc6bmV0cndfdWlkCQlIb2xkcyBjdXJyZW50IHVzZXItaWQgZm9yIGZ0cC4KKwlnOm5ldHJ3X3Bhc3N3ZAkJSG9sZHMgY3VycmVudCBwYXNzd29yZCBmb3IgZnRwLgorCWI6bmV0cndfbGFzdGZpbGUJSG9sZHMgbGF0ZXN0IG1ldGhvZC9tYWNoaW5lL3BhdGguCisJYjpuZXRyd19saW5lCQlIb2xkcyBjdXJyZW50IGxpbmUgbnVtYmVyICAgICAoZHVyaW5nIE5ldFdyaXRlKQorCWI6bmV0cndfY29sCQlIb2xkcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAoZHVyaW5nIE5ldFdyaXRlKQorCWc6bmV0cndfZnRwCQk9MCB1c2UgZGVmYXVsdCBmdHAJICAgICAgKHVpZCBwYXNzd29yZCkKKwkJCQk9MSB1c2UgYWx0ZXJuYXRlIGZ0cAkgICAgICAodXNlciB1aWQgcGFzc3dvcmQpCisJCQkJKHNlZSB8bmV0cnctb3B0aW9uc3wpCisJZzpuZXRyd19mdHBtb2RlCQk9ImJpbmFyeSIJCSAgICAgIChkZWZhdWx0KQorCQkJCT0iYXNjaWkiCQkgICAgICAoeW91ciBjaG9pY2UpCisJZzpuZXRyd19pZ25vcmVuZXRyYwk9MQkJCSAgICAgIChkZWZhdWx0KQorCQkJCSAgIGlmIHlvdSBoYXZlIGEgPC5uZXRyYz4gZmlsZSBidXQgeW91IGRvbid0CisJCQkJICAgd2FudCBpdCB1c2VkLCB0aGVuIHNldCB0aGlzIHZhcmlhYmxlLiAgSXRzCisJCQkJICAgbWVyZSBleGlzdGVuY2UgaXMgZW5vdWdoIHRvIGNhdXNlIDwubmV0cmM+CisJCQkJICAgdG8gYmUgaWdub3JlZC4KKwlnOm5ldHJ3X3dpbjk1ZnRwCT0wIHVzZSB1bml4LXN0eWxlIGZ0cCBldmVuIGlmIHdpbjk1Lzk4L01FL2V0YworCQkJCT0xIHVzZSBkZWZhdWx0IG1ldGhvZCB0byBkbyBmdHAKKwlnOm5ldHJ3X2N5Z3dpbgkJPTEgYXNzdW1lIHNjcCB1bmRlciB3aW5kb3dzIGlzIGZyb20gY3lnd2luCisJCQkJCQkJICAgICAgKGRlZmF1bHQvd2luZG93cykKKwkJCQk9MCBhc3N1bWUgc2NwIHVuZGVyIHdpbmRvd3MgYWNjZXB0cyB3aW5kb3dzCisJCQkJICAgc3R5bGUgcGF0aHMJCSAgICAgIChkZWZhdWx0L2Vsc2UpCisJZzpuZXRyd191c2VfbnRfcmNwCT0wIGRvbid0IHVzZSBXaW5OVC8ySy9YUCdzIHJjcCAoZGVmYXVsdCkKKwkJCQk9MSB1c2UgV2luTlQvMksvWFAncyByY3AsIGJpbmFyeSBtb2RlCisKKworVGhlIHNjcmlwdCB3aWxsIGFsc28gbWFrZSB1c2Ugb2YgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaW50ZXJuYWxseSwgYWxiZWl0Cit0ZW1wb3JhcmlseS4KKworCWc6bmV0cndfbWV0aG9kCQlJbmRleCBpbmRpY2F0aW5nIHJjcC9mdHArLm5ldHJjL2Z0cAorCWc6bmV0cndfbWFjaGluZQkJSG9sZHMgbWFjaGluZSBuYW1lIHBhcnNlZCBmcm9tIGlucHV0CisJZzpuZXRyd19mbmFtZQkJSG9sZHMgZmlsZW5hbWUgYmVpbmcgYWNjZXNzZWQKKworCQkJCQkJCQkqbmV0cnctcHJvdG9jb2wqCis+CisJCQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCSAgIFByb3RvY29sIENvbnRyb2wgT3B0aW9ucworCQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgT3B0aW9uCSAgICAgIFR5cGUJICBTZXR0aW5nCSAgTWVhbmluZyB+CisgICAgLS0tLS0tLS0tCSAgICAgIC0tLS0tLS0tCSAgLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+CisgICAgbmV0cndfZnRwCSAgICAgIHZhcmlhYmxlCSAgPWRvZXNuJ3QgZXhpc3QgIHVzZXJpZCBzZXQgYnkgInVzZXIgdXNlcmlkIgorCQkJCSAgPTAJCSAgdXNlcmlkIHNldCBieSAidXNlciB1c2VyaWQiCisJCQkJICA9MQkJICB1c2VyaWQgc2V0IGJ5ICJ1c2VyaWQiCisgICAgTmV0UmVhZEZpeHVwICAgICAgZnVuY3Rpb24JICA9ZG9lc24ndCBleGlzdCAgbm8gY2hhbmdlCisJCQkJICA9ZXhpc3RzCSAgQWxsb3dzIHVzZXIgdG8gaGF2ZSBmaWxlcworCQkJCQkJICByZWFkIHZpYSBmdHAgYXV0b21hdGljYWxseQorCQkJCQkJICB0cmFuc2Zvcm1lZCBob3dldmVyIHRoZXkgd2lzaAorCQkJCQkJICBieSBOZXRSZWFkRml4dXAoKQorICAgIGc6bmV0cndfZGF2X2NtZCAgICB2YXJpYWJsZSAgID0iY2FkYXZlciIKKyAgICBnOm5ldHJ3X2ZldGNoX2NtZCAgdmFyaWFibGUgICA9ImZldGNoIC1vIgorICAgIGc6bmV0cndfZnRwX2NtZCAgICB2YXJpYWJsZSAgID0iZnRwIgorICAgIGc6bmV0cndfaHR0cF9jbWQgICB2YXJpYWJsZSAgID0iZmV0Y2ggLW8iIGVsc2UgaWYgZmV0Y2ggaXMgZXhlY3V0YWJsZQorICAgIGc6bmV0cndfaHR0cF9jbWQgICB2YXJpYWJsZSAgID0id2dldCAtTyIgIGlmICAgICAgd2dldCAgaXMgZXhlY3V0YWJsZQorICAgIGc6bmV0cndfcmNwX2NtZCAgICB2YXJpYWJsZSAgID0icmNwIgorICAgIGc6bmV0cndfcnN5bmNfY21kICB2YXJpYWJsZSAgID0icnN5bmMgLWEiCisgICAgZzpuZXRyd19zY3BfY21kICAgIHZhcmlhYmxlICAgPSJzY3AgLXEiCisgICAgZzpuZXRyd19zZnRwX2NtZCAgIHZhcmlhYmxlICAgPSJzZnRwIgorPAorVGhlIGZpcnN0IHR3byBvcHRpb25zIGJvdGggaGVscCB3aXRoIGNlcnRhaW4gZnRwJ3MgdGhhdCBnaXZlIHRyb3VibGUgb3RoZXJ3aXNlLgorSW4gb3JkZXIgdG8gYmVzdCB1bmRlcnN0YW5kIGhvdyB0byB1c2UgdGhlc2Ugb3B0aW9ucyBpZiBmdHAgaXMgZ2l2aW5nIHlvdQordHJvdWJsZXMsIGEgYml0IG9mIGRpc2N1c3Npb24gZm9sbG93cyBvbiBob3cgbmV0cncgZG9lcyBmdHAgcmVhZHMuCisKK1RoZSBnOm5ldHJ3Xy4uLl9jbWQgdmFyaWFibGVzIHNwZWNpZnkgdGhlIGV4dGVybmFsIHByb2dyYW0gdG8gdXNlIGhhbmRsZQordGhlIGFzc29jaWF0ZWQgcHJvdG9jb2wgKHJjcCwgZnRwLCBldGMpLCBwbHVzIGFueSBvcHRpb25zLgorCitOZXRydyB0eXBpY2FsbHkgYnVpbGRzIHVwIGxpbmVzIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHMgaW4gYQordGVtcG9yYXJ5IGZpbGU6Cis+CisgIElGIGc6bmV0cndfZnRwICFleGlzdHMgb3IgaXMgbm90IDEgICAgIElGIGc6bmV0cndfZnRwIGV4aXN0cyBhbmQgaXMgMQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBvcGVuIG1hY2hpbmUgW3BvcnRdCQkgICAgICBvcGVuIG1hY2hpbmUgW3BvcnRdCisgICAgICAgdXNlciB1c2VyaWQgcGFzc3dvcmQJCSAgICAgIHVzZXJpZCBwYXNzd29yZAorICAgICAgIFtnOm5ldHJ3X2Z0cG1vZGVdCQkgICAgICBwYXNzd29yZAorICAgICAgIGdldCBmaWxlbmFtZSB0ZW1wZmlsZQkJICAgICAgW2c6bmV0cndfZnRwbW9kZV0KKwkJCQkJICAgICAgZ2V0IGZpbGVuYW1lIHRlbXBmaWxlCis8CitOZXRydyB0aGVuIGV4ZWN1dGVzIHRoZSBsaW5lcyBhYm92ZSBieSB1c2Ugb2YgYSBmaWx0ZXI6Cis+CisJOiUhIHtnOm5ldHJ3X2Z0cF9jbWR9IC1pIFstbl0KKzwKKword2hlcmUKKwlnOm5ldHJ3X2Z0cF9jbWQgaXMgdXN1YWxseSAiZnRwIiwKKwktaSB0ZWxscyBmdHAgbm90IHRvIGJlIGludGVyYWN0aXZlCisJLW4gbWVhbnMgZG9uJ3QgdXNlIG5ldHJjIGFuZCBpcyB1c2VkIGZvciBNZXRob2QgIzMgKGZ0cCB3L28gPC5uZXRyYz4pCisKK0lmIDwubmV0cmM+IGV4aXN0cyBpdCB3aWxsIGJlIHVzZWQgdG8gYXZvaWQgaGF2aW5nIHRvIHF1ZXJ5IHRoZSB1c2VyIGZvcgordXNlcmlkIGFuZCBwYXNzd29yZCkuICBUaGUgdHJhbnNmZXJyZWQgZmlsZSBpcyBwdXQgaW50byBhIHRlbXBvcmFyeSBmaWxlLgorVGhlIHRlbXBvcmFyeSBmaWxlIGlzIHRoZW4gcmVhZCBpbnRvIHRoZSBtYWluIGVkaXRpbmcgc2Vzc2lvbiB3aW5kb3cgdGhhdAorcmVxdWVzdGVkIGl0IGFuZCB0aGUgdGVtcG9yYXJ5IGZpbGUgZGVsZXRlZC4KKworSWYgeW91ciBmdHAgZG9lc24ndCBhY2NlcHQgdGhlICJ1c2VyIiBjb21tYW5kIGFuZCBpbW1lZGlhdGVseSBqdXN0IGRlbWFuZHMKK2EgdXNlcmlkLCB0aGVuIHRyeSBwdXR0aW5nICJsZXQgbmV0cndfZnRwPTEiIGluIHlvdXIgPC52aW1yYz4uCisKKwkJCQkJCQkJKm5ldHJ3LWZpeHVwKgorSWYgeW91ciBmdHAgZm9yIHdoYXRldmVyIHJlYXNvbiBnZW5lcmF0ZXMgdW53YW50ZWQgbGluZXMgKHN1Y2ggYXMgQVVUSAorbWVzc2FnZXMpIHlvdSBtYXkgd3JpdGUgYSBOZXRSZWFkRml4dXAodG1wZmlsZSkgZnVuY3Rpb246Cis+CisgICAgZnVuY3Rpb24hIE5ldFJlYWRGaXh1cChtZXRob2QsbGluZTEsbGluZTIpCisgICAgICAiIGE6bGluZTE6IGZpcnN0IG5ldyBsaW5lIGluIGN1cnJlbnQgZmlsZQorICAgICAgIiBhOmxpbmUyOiBsYXN0ICBuZXcgbGluZSBpbiBjdXJyZW50IGZpbGUKKyAgICAgIGlmICAgICBhOm1ldGhvZCA9PSAxICJyY3AKKyAgICAgIGVsc2VpZiBhOm1ldGhvZCA9PSAyICJmdHAgKyA8Lm5ldHJjPgorICAgICAgZWxzZWlmIGE6bWV0aG9kID09IDMgImZ0cCArIG1hY2hpbmUsdWlkLHBhc3N3b3JkLGZpbGVuYW1lCisgICAgICBlbHNlaWYgYTptZXRob2QgPT0gNCAic2NwCisgICAgICBlbHNlaWYgYTptZXRob2QgPT0gNSAiaHR0cC93Z2V0CisgICAgICBlbHNlaWYgYTptZXRob2QgPT0gNiAiZGF2L2NhZGF2ZXIKKyAgICAgIGVsc2VpZiBhOm1ldGhvZCA9PSA3ICJyc3luYworICAgICAgZWxzZWlmIGE6bWV0aG9kID09IDggImZldGNoCisgICAgICBlbHNlaWYgYTptZXRob2QgPT0gOSAic2Z0cAorICAgICAgZWxzZQkJICIgY29tcGxhaW4KKyAgICAgIGVuZGlmCisgICAgZW5kZnVuY3Rpb24KKz4KK1RoZSBOZXRSZWFkRml4dXAoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpZiBpdCBleGlzdHMgYW5kIHRodXMgYWxsb3dzCit5b3UgdG8gY3VzdG9taXplIHlvdXIgcmVhZGluZyBwcm9jZXNzLiAgQXMgYSBmdXJ0aGVyIGV4YW1wbGUsIDxuZXRydy52aW0+Citjb250YWlucyBqdXN0IHN1Y2ggYSBmdW5jdGlvbiB0byBoYW5kbGUgV2luZG93cyA5NSBmdHAuICBGb3Igd2hhdGV2ZXIKK3JlYXNvbiwgV2luZG93cyA5NSdzIGZ0cCBkdW1wcyBmb3VyIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgYSB0cmFuc2ZlciwKK2FuZCBzbyBpdCBpcyBkZXNpcmFibGUgdG8gYXV0b21hdGUgdGhlaXIgcmVtb3ZhbC4gIEhlcmUncyBzb21lIGNvZGUgdGFrZW4KK2Zyb20gPG5ldHJ3LnZpbT4gaXRzZWxmOgorPgorICAgIGlmIGhhcygid2luOTUiKSAmJiBnOm5ldHJ3X3dpbjk1ZnRwCisgICAgIGZ1ISBOZXRSZWFkRml4dXAobWV0aG9kLCBsaW5lMSwgbGluZTIpCisgICAgICAgaWYgbWV0aG9kID09IDMgICAiIGZ0cCAobm8gPC5uZXRyYz4pCisJbGV0IGZvdXJibGFua2xpbmVzPSBsaW5lMiAtIDMKKwlzaWxlbnQgZm91cmJsYW5rbGluZXMuIiwiLmxpbmUyLiJnL15ccyovZCIKKyAgICAgICBlbmRpZgorICAgICBlbmRmdW5jdGlvbgorICAgIGVuZGlmCis+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gRGVidWdnaW5nCQkJCQkJKm5ldHJ3LWRlYnVnKgorCitUaGUgPG5ldHJ3LnZpbT4gc2NyaXB0IGlzIHR5cGljYWxseSBhdmFpbGFibGUgYXM6CisKKwkvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02eC9wbHVnaW4vbmV0cncudmltCisKK3doaWNoIGlzIGxvYWRlZCBhdXRvbWF0aWNhbGx5IGF0IHN0YXJ0dXAgKGFzc3VtaW5nIDpzZXQgbm9jcCkuCisKKwkxLiBHZXQgdGhlIDxEZWNoby52aW0+IHNjcmlwdCwgYXZhaWxhYmxlIGFzOgorCisJCWh0dHA6Ly9teXNpdGUudmVyaXpvbi5uZXQvYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3NjcmlwdHMKKwkJYXMgIkRlY2hvLCBhIHZpbUwgZGVidWdnaW5nIGFpZCIKKwkgICBvcgorCQlodHRwOi8vdmltLnNvdXJjZWZvcmdlLm5ldC9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTEyMAorCisJICAgYW5kIHB1dCBpdCBpbnRvIHlvdXIgbG9jYWwgcGx1Z2luIGRpcmVjdG9yeQorCisJMi4gRWRpdCB0aGUgPG5ldHJ3LnZpbT4gZmlsZSBhcyBmb2xsb3dzOgorCisJCTpEZWNob09uCisKKwkgICAodG8gcmVzdG9yZSB0byBub3JtYWwsIHVzZSAgOkRlY2hvT2ZmICkKKworCTMuIFRoZW4gYnJpbmcgdXAgdmltIGFuZCBhdHRlbXB0IGEgdHJhbnNmZXIuICBBIHNldCBvZiBtZXNzYWdlcworCSAgIHNob3VsZCBhcHBlYXIgY29uY2VybmluZyB0aGUgc3RlcHMgdGhhdCA8bmV0cncudmltPiB0b29rIGluCisJICAgYXR0ZW1wdGluZyB0byByZWFkL3dyaXRlIHlvdXIgZmlsZSBvdmVyIHRoZSBuZXR3b3JrLiAgUGxlYXNlCisJICAgc2VuZCB0aGF0IGluZm9ybWF0aW9uIHRvIDxuZXRydy52aW0+J3MgbWFpbnRhaW5lciwKKworCQlkcmNoaXBOT1NQQU0gYXQgY2FtcGJlbGxmYW1pbHkuYml6IC0gTk9TUEFNCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gTmV3IFN0dWZmCQkJCQkJKm5ldHJ3LW5ldyogKm5ldHJ3LW5ld3N0dWZmKgorCisgICAgICAgdjQzOiAqIG1vdmVkICJFeHBsYW5hdGlvbiIgY29tbWVudHMgdG8gPHBpX25ldHJ3LnR4dD4gaGVscCBmaWxlCisJICAgICAgYXMgIk5ldHdvcmsgUmVmZXJlbmNlIiAofG5ldHJ3LXJlZnwpCisJICAgICogPG5ldHJ3LnZpbT4gbm93IHVzZXMgRGZ1bmMoKSBEZWNobygpIGFuZCBEcmV0KCkgZm9yIGRlYnVnZ2luZworCSAgICAqIHJlbW92ZWQgc3VwZXJmbHVvdXMgTmV0UmVzdG9yZVBvc24oKSBjYWxscworICAgICAgIHY0MjogKiBub3cgZG9lcyBCdWZSZWFkUHJlIGFuZCBCdWZSZWFkUG9zdCBldmVudHMgb24gZmlsZTovLy8qCisJICAgICAgYW5kIGZpbGU6Ly9sb2NhbGhvc3QvKgorICAgICAgIHY0MTogKiBpbnN0YWxsZWQgZmlsZTovLy8qIGFuZCBmaWxlOi8vbG9jYWxob3N0LyogaGFuZGxpbmcKKyAgICAgICB2NDA6ICogcHJldmVudHMgcmVkcmF3IHdoZW4gYSBwcm90b2NvbCBlcnJvciBvY2N1cnMgc28gdGhhdCB0aGUKKwkgICAgICB1c2VyIG1heSBzZWUgaXQKKyAgICAgICB2Mzk6ICogc2Z0cCBzdXBwb3J0CisgICAgICAgdjM4OiAqIE5vdyB1c2VzIE5ldFJlc3RvcmVQb3NuKCkgY2FsbHMgd2l0aCBOcmVhZC9Od3JpdGUgY29tbWFuZHMKKwkgICAgKiBUZW1wb3JhcnkgZmlsZXMgbm93IHJlbW92ZWQgdmlhIGJ3aXBlISBpbnN0ZWFkIG9mIGJ3aXBlCisJICAgICAgKHRoYW5rcyB0byBEYXZlIFJvYmVydHMpCisgICAgICAgdjM3OiAqIENsYWFyJ3MgbW9kaWZpY2F0aW9ucyB3aGljaCB0ZXN0IGlmIGZ0cCBpcyBzdWNjZXNzZnVsLCBvdGhlcndpc2UKKwkgICAgICBnaXZlIGFuIGVycm9yIG1lc3NhZ2UKKwkgICAgKiBBZnRlciBhIHJlYWQsIHRoZSBhbHRlcm5hdGUgZmlsZSB3YXMgcG9pbnRpbmcgdG8gdGhlIHRlbXAgZmlsZS4KKwkgICAgICBUaGUgdGVtcCBmaWxlIGJ1ZmZlciBpcyBub3cgd2lwZWQgb3V0LgorCSAgICAqIHJlbW92ZWQgc2lsZW50IGZyb20gdHJhbnNmZXIgbWV0aG9kcyBzbyB1c2VyIGNhbiBzZWUgd2hhdCdzCisJICAgICAgaGFwcGVuaW5nCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBDcmVkaXRzCQkJCQkJKm5ldHJ3LWNyZWRpdHMqCisKKwlWaW0gZWRpdG9yCWJ5IEJyYW0gTW9vbGVuYWFyIChUaGFua3MsIEJyYW0hKQorCWRhdgkJc3VwcG9ydCBieSBDIENhbXBiZWxsCisJZmV0Y2gJCXN1cHBvcnQgYnkgQnJhbSBNb29sZW5hYXIgYW5kIEMgQ2FtcGJlbGwKKwlmdHAJCXN1cHBvcnQgYnkgQyBDYW1wYmVsbCA8TmRyT2NoaXBAU2NhbXBiZWxsUGZhbWlseS5BYml6TT4gLSBOT1NQQU0KKwlodHRwCQlzdXBwb3J0IGJ5IEJyYW0gTW9vbGVuYWFyIDxicmFtQG1vb2xlbmFhci5uZXQ+CisJcmNwCisJcnN5bmMJCXN1cHBvcnQgYnkgQyBDYW1wYmVsbCAoc3VnZ2VzdGVkIGJ5IEVyaWsgV2FyZW5kb3JwaCkKKwlzY3AJCXN1cHBvcnQgYnkgcmFmIDxyYWZAY29tZHluLmNvbS5hdT4KKwlzZnRwCQlzdXBwb3J0IGJ5IEMgQ2FtcGJlbGwKKworCWlucHV0c2VjcmV0KCksIEJ1ZlJlYWRDbWQsIEJ1ZldyaXRlQ21kIGNvbnRyaWJ1dGVkIGJ5IEMgQ2FtcGJlbGwKKworCUrDqXLDtG1lIEF1Z8OpCQktLSBhbHNvIHVzaW5nIG5ldyBidWZmZXIgbWV0aG9kIHdpdGggZnRwKy5uZXRyYworCUJyYW0gTW9vbGVuYWFyCQktLSBvYnZpb3VzbHkgdmltIGl0c2VsZiwgOmUgYW5kIHY6Y21kYXJnIHVzZSwgZmV0Y2gsLi4uCisJWWFzdWhpcm8gTWF0c3Vtb3RvCS0tIHBvaW50aW5nIG91dCB1bmRvKzByIHByb2JsZW0gYW5kIGEgc29sdXRpb24KKwlFcmlrIFdhcmVuZG9ycGgJCS0tIGZvciBzZXZlcmFsIHN1Z2dlc3Rpb25zIChnOm5ldHJ3Xy4uLl9jbWQKKwkJCQkgICB2YXJpYWJsZXMsIHJzeW5jIGV0YykKKwlEb3VnIENsYWFyCQktLSBtb2RpZmljYXRpb25zIHRvIHRlc3QgZm9yIHN1Y2Nlc3Mgd2l0aCBmdHAgb3BlcmF0aW9uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3BpX3NwZWMudHh0IGIvcnVudGltZS9kb2MvcGlfc3BlYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyOTg0YQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3BpX3NwZWMudHh0CkBAIC0wLDAgKzEsMTExIEBACisqcGlfc3BlYy50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDIgT2N0IDI5CisKK2J5IEd1c3Rhdm8gTmllbWV5ZXIgfgorCitUaGlzIGlzIGEgZmlsZXR5cGUgcGx1Z2luIHRvIHdvcmsgd2l0aCBycG0gc3BlYyBmaWxlcy4KKworQ3VycmVudGx5LCB0aGlzIFZpbSBwbHVnaW4gYWxsb3dzIHlvdSB0byBlYXNpbHkgdXBkYXRlIHRoZSAlY2hhbmdlbG9nCitzZWN0aW9uIGluIFJQTSBzcGVjIGZpbGVzLiBJdCB3aWxsIGV2ZW4gY3JlYXRlIGEgc2VjdGlvbiBmb3IgeW91IGlmIGl0Citkb2Vzbid0IGV4aXN0IHlldC4gSWYgeW91J3ZlIGFscmVhZHkgaW5zZXJ0ZWQgYW4gZW50cnkgdG9kYXksIGl0IHdpbGwKK2dpdmUgeW91IHRoZSBvcHBvcnR1bml0eSB0byBqdXN0IGFkZCBhIG5ldyBpdGVtIGluIHRvZGF5J3MgZW50cnkuIElmIHlvdQorZG9uJ3QgcHJvdmlkZSBhIGZvcm1hdCBzdHJpbmcgKHxzcGVjX2NoZ2xvZ19mb3JtYXR8KSwgaXQnbGwgYXNrIHlvdSBhbgorZW1haWwgYWRkcmVzcyBhbmQgYnVpbGQgYSBmb3JtYXQgc3RyaW5nIGJ5IGl0c2VsZi4KKworMS4gSG93IHRvIHVzZSBpdAl8c3BlYy1ob3ctdG8tdXNlLWl0fAorMi4gQ3VzdG9taXppbmcJCXxzcGVjLWN1c3RvbWl6aW5nfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIEhvdyB0byB1c2UgaXQJCQkJKnNwZWMtaG93LXRvLXVzZS1pdCoKKworVGhlIHNwZWNfY2hnbG9nIHBsdWdpbiBwcm92aWRlcyBhIG1hcCBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKwk6bWFwIDxidWZmZXI+IDxMb2NhbExlYWRlcj5jIDxQbHVnPlNwZWNDaGFuZ2Vsb2cKKworSXQgbWVhbnMgdGhhdCB5b3UgbWF5IHJ1biB0aGUgcGx1Z2luIGluc2lkZSBhIHNwZWMgZmlsZSBieSBwcmVzc2luZworeW91ciBtYXBsb2NhbGxlYWRlciBrZXkgKGRlZmF1bHQgaXMgJ1wnKSBwbHVzICdjJy4gSWYgeW91IGRvIG5vdCBoYXZlCit8c3BlY19jaGdsb2dfZm9ybWF0fCBzZXQsIHRoZSBwbHVnaW4gd2lsbCBhc2sgeW91IGZvciBhbiBlbWFpbCBhZGRyZXNzCit0byB1c2UgaW4gdGhpcyBlZGl0IHNlc3Npb24uCisKK0V2ZXJ5dGltZSB5b3UgcnVuIHRoZSBwbHVnaW4sIGl0IHdpbGwgY2hlY2sgdG8gc2VlIGlmIHRoZSBsYXN0IGVudHJ5CitpbiB0aGUgY2hhbmdlbG9nIGhhcyBiZWVuIHdyaXR0ZW4gdG9kYXkgYW5kIGJ5IHlvdS4gSWYgaXQncyB0aGUgZW50cnkKK21hdGhlcywgaXQgd2lsbCBqdXN0IGluc2VydCBhIG5ldyBjaGFuZ2Vsb2cgaXRlbSwgb3RoZXJ3aXNlIGl0IHdpbGwKK2NyZWF0ZSBhIG5ldyBjaGFuZ2Vsb2cgZW50cnkuIElmIHlvdSBhcmUgcnVubmluZyB3aXRoCit8c3BlY19jaGdsb2dfcmVsZWFzZV9pbmZvfCBlbmFibGVkLCBpdCB3aWxsIGFsc28gY2hlY2sgaWYgdGhlIG5hbWUsIHZlcnNpb24KK2FuZCByZWxlYXNlIG1hdGNoZXMuIFRoZSBwbHVnaW4gaXMgc21hcnQgZW5vdWdoIHRvIGFzayB5b3UgaWYgaXQgc2hvdWxkCit1cGRhdGUgdGhlIHBhY2thZ2UgcmVsZWFzZSwgaWYgeW91IGhhdmUgbm90IGRvbmUgc28uCisKK1NldHRpbmcgYSBtYXAJCQkJCSpzcGVjLXNldHRpbmctYS1tYXAqCistLS0tLS0tLS0tLS0tCisKK0FzIHlvdSBzaG91bGQga25vdywgeW91IGNhbiBlYXNpbHkgc2V0IGEgbWFwIHRvIGFjY2VzcyBhbnkgVmltIGNvbW1hbmQgKG9yCithbnl0aGluZywgZm9yIHRoYXQgbWF0dGVyKS4gSWYgeW91IGRvbid0IGxpa2UgdGhlIGRlZmF1bHQgbWFwIG9mCis8TG9jYWxMZWFkZXI+YywgeW91IG1heSBqdXN0IHNldCB1cCB5b3VyIG93biBrZXkuIFRoZSBmb2xsb3dpbmcgbGluZQorc2hvd3MgeW91IGhvdyB5b3UgY291bGQgZG8gdGhpcyBpbiB5b3VyIC52aW1yYyBmaWxlLCBtYXBwaW5nIHRoZSBwbHVnaW4gdG8KK3RoZSA8RjU+IGtleToKKworCWF1IEZpbGVUeXBlIHNwZWMgbWFwIDxidWZmZXI+IDxGNT4gPFBsdWc+U3BlY0NoYW5nZWxvZworCitOb3RlOiB0aGUgcGx1Z2luIHdpbGwgcmVzcGVjdCB5b3VyIGRlc2lyZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgbWFwcGluZworICAgICAgYW5kIHdvbid0IHNldCBpdC4KKworVGhpcyBjb21tYW5kIHdpbGwgYWRkIGEgbWFwIG9ubHkgaW4gdGhlIHNwZWMgZmlsZSBidWZmZXJzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQ3VzdG9taXppbmcJCQkJCSpzcGVjLWN1c3RvbWl6aW5nKgorCitUaGUgZm9ybWF0IHN0cmluZwkJCQkqc3BlY19jaGdsb2dfZm9ybWF0KgorLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBlYXNpbHkgY3VzdG9taXplIGhvdyB5b3VyIHNwZWMgZmlsZSBlbnRyeSB3aWxsIGxvb2sgbGlrZS4gVG8gZG8KK3RoaXMganVzdCBzZXQgdGhlIHZhcmlhYmxlICJzcGVjX2NoZ2xvZ19mb3JtYXQiIGluIHlvdXIgLnZpbXJjIGZpbGUgbGlrZQordGhpczogPgorCisJbGV0IHNwZWNfY2hnbG9nX2Zvcm1hdCA9ICIlYSAlYiAlZCAlWSBNeSBOYW1lIDxteUBlbWFpbC5jb20+IgorCitOb3RlIHRoYXQgIiVhICViICVkICVZIiBpcyB0aGUgbW9zdCB1c2VkIHRpbWUgZm9ybWF0LiBJZiB5b3UgZG9uJ3QgcHJvdmlkZQorYSBmb3JtYXQgc3RyaW5nLCB3aGVuIHlvdSBydW4gdGhlIFNwZWNDaGFuZ2Vsb2cgY29tbWFuZCBmb3IgdGhlIGZpcnN0Cit0aW1lLCBpdCB3aWxsIGFzayB5b3UgYW4gZW1haWwgYWRkcmVzcyBhbmQgYnVpbGQgdGhlIHxzcGVjX2NoZ2xvZ19mb3JtYXR8Cit2YXJpYWJsZSBmb3IgeW91LiBUaGlzIHdheSwgeW91IHdpbGwgb25seSBuZWVkIHRvIHByb3ZpZGUgeW91ciBlbWFpbAorYWRkcmVzcyBvbmNlLgorCitUbyBkaXNjb3ZlciB3aGljaCBmb3JtYXQgb3B0aW9ucyB5b3UgY2FuIHVzZSwgdGFrZSBhIGxvb2sgYXQgdGhlIHN0cmZ0aW1lKCkKK2Z1bmN0aW9uIG1hbiBwYWdlLgorCitXaGVyZSB0byBpbnNlcnQgbmV3IGl0ZW1zCQkJKnNwZWNfY2hnbG9nX3ByZXBlbmQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwbHVnaW4gd2lsbCB1c3VhbGx5IGluc2VydCBuZXcgJWNoYW5nZWxvZyBlbnRyeSBpdGVtcyAobm90ZSB0aGF0IGl0J3MKK25vdCB0aGUgZW50cnkgaXRzZWxmKSBhZnRlciB0aGUgZXhpc3Rpbmcgb25lcy4gSWYgeW91IHNldCB0aGUKK3NwZWNfY2hnbG9nX3ByZXBlbmQgdmFyaWFibGUgPgorCisJbGV0IHNwZWNfY2hnbG9nX3ByZXBlbmQgPSAxCisKK2l0IHdpbGwgaW5zZXJ0IG5ldyBpdGVtcyBiZWZvcmUgdGhlIGV4aXN0aW5nIG9uZXMuCisKK0luc2VydGluZyByZWxlYXNlIGluZm8JCQkJKnNwZWNfY2hnbG9nX3JlbGVhc2VfaW5mbyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQsIHRoZSBwbHVnaW4gbWF5IGF1dG9tYXRpY2FsbHkgaW5zZXJ0IHJlbGVhc2UgaW5mb3JtYXRpb24KK29uIGVhY2ggY2hhbmdlbG9nIGVudHJ5LiBPbmUgYWR2YW50YWdlIG9mIHR1cm5pbmcgdGhpcyBmZWF0dXJlIG9uIGlzCit0aGF0IGl0IG1heSBjb250cm9sIGlmIHRoZSByZWxlYXNlIGhhcyBiZWVuIHVwZGF0ZWQgYWZ0ZXIgdGhlIGxhc3QKK2NoYW5nZSBpbiB0aGUgcGFja2FnZSBvciBub3QuIElmIHlvdSBoYXZlIG5vdCB1cGRhdGVkIHRoZSBwYWNrYWdlCit2ZXJzaW9uIG9yIHJlbGVhc2UsIGl0IHdpbGwgYXNrIHlvdSBpZiBpdCBzaG91bGQgdXBkYXRlIHRoZSBwYWNrYWdlCityZWxlYXNlIGZvciB5b3UuIFRvIHR1cm4gdGhpcyBmZWF0dXJlIG9uLCBqdXN0IGluc2VydCB0aGUgZm9sbG93aW5nCitjb2RlIGluIHlvdXIgLnZpbXJjOiA+CisKKwlsZXQgc3BlY19jaGdsb2dfcmVsZWFzZV9pbmZvID0gMQorCitUaGVuLCB0aGUgZmlyc3QgaXRlbSBpbiB5b3VyIGNoYW5nZWxvZyBlbnRyeSB3aWxsIGJlIHNvbWV0aGluZyBsaWtlOiA+CisKKwkrIG5hbWUtMS4wLTFjbAorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgcmVsZWFzZSB1cGRhdGluZyBmZWF0dXJlIGFuZCBkb24ndCB3YW50IHRvIGFuc3dlcgorIk5vIiBlYWNoIHRpbWUgaXQgZGV0ZWN0cyBhbiBvbGQgcmVsZWFzZSwgeW91IG1heSBkaXNhYmxlIGl0IHdpdGggPgorCisJbGV0IHNwZWNfY2hnbG9nX25ldmVyX2luY3JlYXNlX3JlbGVhc2UgPSAxCisKKworR29vZCBsdWNrISEKKwordmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcXVpY2tmaXgudHh0IGIvcnVudGltZS9kb2MvcXVpY2tmaXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzVkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9xdWlja2ZpeC50eHQKQEAgLTAsMCArMSwxMDEwIEBACisqcXVpY2tmaXgudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDIwCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVGhpcyBzdWJqZWN0IGlzIGludHJvZHVjZWQgaW4gc2VjdGlvbiB8MzAuMXwgb2YgdGhlIHVzZXIgbWFudWFsLgorCisxLiBVc2luZyBRdWlja0ZpeCBjb21tYW5kcwkJfHF1aWNrZml4fAorMi4gVGhlIGVycm9yIHdpbmRvdwkJCXxxdWlja2ZpeC13aW5kb3d8CiszLiBVc2luZyBtb3JlIHRoYW4gb25lIGxpc3Qgb2YgZXJyb3JzCXxxdWlja2ZpeC1lcnJvci1saXN0c3wKKzQuIFVzaW5nIDptYWtlCQkJCXw6bWFrZV9tYWtlcHJnfAorNS4gVXNpbmcgOmdyZXAJCQkJfGdyZXB8Cis2LiBTZWxlY3RpbmcgYSBjb21waWxlcgkJCXxjb21waWxlci1zZWxlY3R8Cis3LiBUaGUgZXJyb3IgZm9ybWF0CQkJfGVycm9yLWZpbGUtZm9ybWF0fAorOC4gVGhlIGRpcmVjdG9yeSBzdGFjawkJCXxxdWlja2ZpeC1kaXJlY3Rvcnktc3RhY2t8Cis5LiBTcGVjaWZpYyBlcnJvciBmaWxlIGZvcm1hdHMJCXxlcnJvcmZvcm1hdHN8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KKworVGhlIHF1aWNrZml4IGNvbW1hbmRzIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdGhlIHwrcXVpY2tmaXh8IGZlYXR1cmUgd2FzCitkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBVc2luZyBRdWlja0ZpeCBjb21tYW5kcwkJCSpxdWlja2ZpeCogKlF1aWNrZml4KiAqRTQyKgorCitWaW0gaGFzIGEgc3BlY2lhbCBtb2RlIHRvIHNwZWVkdXAgdGhlIGVkaXQtY29tcGlsZS1lZGl0IGN5Y2xlLiAgVGhpcyBpcworaW5zcGlyZWQgYnkgdGhlIHF1aWNrZml4IG9wdGlvbiBvZiB0aGUgTWFueCdzIEF6dGVjIEMgY29tcGlsZXIgb24gdGhlIEFtaWdhLgorVGhlIGlkZWEgaXMgdG8gc2F2ZSB0aGUgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgY29tcGlsZXIgaW4gYSBmaWxlIGFuZCB1c2UgVmltCit0byBqdW1wIHRvIHRoZSBlcnJvcnMgb25lIGJ5IG9uZS4gIFlvdSBjYW4gZXhhbWluZSBlYWNoIHByb2JsZW0gYW5kIGZpeCBpdCwKK3dpdGhvdXQgaGF2aW5nIHRvIHJlbWVtYmVyIGFsbCB0aGUgZXJyb3IgbWVzc2FnZXMuCisKK0lmIHlvdSBhcmUgdXNpbmcgTWFueCdzIEF6dGVjIEMgY29tcGlsZXIgb24gdGhlIEFtaWdhIGxvb2sgaGVyZSBmb3IgaG93IHRvIHVzZQoraXQgd2l0aCBWaW06IHxxdWlja2ZpeC1tYW54fC4gIElmIHlvdSBhcmUgdXNpbmcgYW5vdGhlciBjb21waWxlciB5b3Ugc2hvdWxkCitzYXZlIHRoZSBlcnJvciBtZXNzYWdlcyBpbiBhIGZpbGUgYW5kIHN0YXJ0IFZpbSB3aXRoICJ2aW0gLXEgZmlsZW5hbWUiLiAgQW4KK2Vhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCB0aGUgfDptYWtlfCBjb21tYW5kIChzZWUgYmVsb3cpLiAgVGhlCisnZXJyb3Jmb3JtYXQnIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvIG1hdGNoIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHlvdXIKK2NvbXBpbGVyIChzZWUgfGVycm9yZm9ybWF0fCBiZWxvdykuCisKK1RoZSBmb2xsb3dpbmcgcXVpY2tmaXggY29tbWFuZHMgY2FuIGJlIHVzZWQ6CisKKwkJCQkJCQkqOmNjKgorOmNjWyFdIFtucl0JCURpc3BsYXkgZXJyb3IgW25yXS4gIElmIFtucl0gaXMgb21pdHRlZCwgdGhlIHNhbWUKKwkJCWVycm9yIGlzIGRpc3BsYXllZCBhZ2Fpbi4gIFdpdGhvdXQgWyFdIHRoaXMgZG9lc24ndAorCQkJd29yayB3aGVuIGp1bXBpbmcgdG8gYW5vdGhlciBidWZmZXIsIHRoZSBjdXJyZW50IGJ1ZmZlcgorCQkJaGFzIGJlZW4gY2hhbmdlZCwgdGhlcmUgaXMgdGhlIG9ubHkgd2luZG93IGZvciB0aGUKKwkJCWJ1ZmZlciBhbmQgYm90aCAnaGlkZGVuJyBhbmQgJ2F1dG93cml0ZScgYXJlIG9mZi4KKwkJCVdoZW4ganVtcGluZyB0byBhbm90aGVyIGJ1ZmZlciB3aXRoIFshXSBhbnkgY2hhbmdlcyB0bworCQkJdGhlIGN1cnJlbnQgYnVmZmVyIGFyZSBsb3N0LCB1bmxlc3MgJ2hpZGRlbicgaXMgc2V0IG9yCisJCQl0aGVyZSBpcyBhbm90aGVyIHdpbmRvdyBmb3IgdGhpcyBidWZmZXIuCisJCQlUaGUgJ3N3aXRjaGJ1Zicgc2V0dGluZ3MgYXJlIHJlc3BlY3RlZCB3aGVuIGp1bXBpbmcKKwkJCXRvIGEgYnVmZmVyLgorCisJCQkJCQkJKjpjbiogKjpjbmV4dCogKkU1NTMqCis6W2NvdW50XWNuW2V4dF1bIV0JRGlzcGxheSB0aGUgW2NvdW50XSBuZXh0IGVycm9yIGluIHRoZSBsaXN0IHRoYXQKKwkJCWluY2x1ZGVzIGEgZmlsZSBuYW1lLiAgSWYgdGhlcmUgYXJlIG5vIGZpbGUgbmFtZXMgYXQKKwkJCWFsbCwgZ28gdG8gdGhlIFtjb3VudF0gbmV4dCBlcnJvci4gIFNlZSB8OmNjfCBmb3IKKwkJCVshXSBhbmQgJ3N3aXRjaGJ1ZicuCisKKzpbY291bnRdY05bZXh0XVshXQkJCSo6Y3AqICo6Y3ByZXZpb3VzKiAqOmNOKiAqOmNOZXh0KgorOltjb3VudF1jcFtyZXZpb3VzXVshXQlEaXNwbGF5IHRoZSBbY291bnRdIHByZXZpb3VzIGVycm9yIGluIHRoZSBsaXN0IHRoYXQKKwkJCWluY2x1ZGVzIGEgZmlsZSBuYW1lLiAgSWYgdGhlcmUgYXJlIG5vIGZpbGUgbmFtZXMgYXQKKwkJCWFsbCwgZ28gdG8gdGhlIFtjb3VudF0gcHJldmlvdXMgZXJyb3IuICBTZWUgfDpjY3wgZm9yCisJCQlbIV0gYW5kICdzd2l0Y2hidWYnLgorCisJCQkJCQkJKjpjbmYqICo6Y25maWxlKgorOltjb3VudF1jbmZbaWxlXVshXQlEaXNwbGF5IHRoZSBmaXJzdCBlcnJvciBpbiB0aGUgW2NvdW50XSBuZXh0IGZpbGUgaW4KKwkJCXRoZSBsaXN0IHRoYXQgaW5jbHVkZXMgYSBmaWxlIG5hbWUuICBJZiB0aGVyZSBhcmUgbm8KKwkJCWZpbGUgbmFtZXMgYXQgYWxsIG9yIGlmIHRoZXJlIGlzIG5vIG5leHQgZmlsZSwgZ28gdG8KKwkJCXRoZSBbY291bnRdIG5leHQgZXJyb3IuICBTZWUgfDpjY3wgZm9yIFshXSBhbmQKKwkJCSdzd2l0Y2hidWYnLgorCis6W2NvdW50XWNOZltpbGVdWyFdCQkJKjpjcGYqICo6Y3BmaWxlKiAqOmNOZiogKjpjTmZpbGUqCis6W2NvdW50XWNwZltpbGVdWyFdCURpc3BsYXkgdGhlIGxhc3QgZXJyb3IgaW4gdGhlIFtjb3VudF0gcHJldmlvdXMgZmlsZSBpbgorCQkJdGhlIGxpc3QgdGhhdCBpbmNsdWRlcyBhIGZpbGUgbmFtZS4gIElmIHRoZXJlIGFyZSBubworCQkJZmlsZSBuYW1lcyBhdCBhbGwgb3IgaWYgdGhlcmUgaXMgbm8gbmV4dCBmaWxlLCBnbyB0bworCQkJdGhlIFtjb3VudF0gcHJldmlvdXMgZXJyb3IuICBTZWUgfDpjY3wgZm9yIFshXSBhbmQKKwkJCSdzd2l0Y2hidWYnLgorCisJCQkJCQkJKjpjcmV3aW5kKiAqOmNyKgorOmNyW2V3aW5kXVshXSBbbnJdCURpc3BsYXkgZXJyb3IgW25yXS4gIElmIFtucl0gaXMgb21pdHRlZCwgdGhlIEZJUlNUCisJCQllcnJvciBpcyBkaXNwbGF5ZWQuICBTZWUgfDpjY3wuCisKKwkJCQkJCQkqOmNmaXJzdCogKjpjZmlyKgorOmNmaXJbc3RdWyFdIFtucl0JU2FtZSBhcyAiOmNyZXdpbmQiLgorCisJCQkJCQkJKjpjbGFzdCogKjpjbGEqCis6Y2xhW3N0XVshXSBbbnJdCURpc3BsYXkgZXJyb3IgW25yXS4gIElmIFtucl0gaXMgb21pdHRlZCwgdGhlIExBU1QKKwkJCWVycm9yIGlzIGRpc3BsYXllZC4gIFNlZSB8OmNjfC4KKworCQkJCQkJCSo6Y3EqICo6Y3F1aXQqCis6Y3FbdWl0XQkJUXVpdCBWaW0gd2l0aCBhbiBlcnJvciBjb2RlLCBzbyB0aGF0IHRoZSBjb21waWxlcgorCQkJd2lsbCBub3QgY29tcGlsZSB0aGUgc2FtZSBmaWxlIGFnYWluLgorCisJCQkJCQkJKjpjZiogKjpjZmlsZSoKKzpjZltpbGVdWyFdIFtlcnJvcmZpbGVdCVJlYWQgdGhlIGVycm9yIGZpbGUgYW5kIGp1bXAgdG8gdGhlIGZpcnN0IGVycm9yLgorCQkJVGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgd2hlbiBWaW0gaXMgc3RhcnRlZCB3aXRoCisJCQl0aGUgLXEgb3B0aW9uLiAgWW91IGNhbiB1c2UgdGhpcyBjb21tYW5kIHdoZW4geW91CisJCQlrZWVwIFZpbSBydW5uaW5nIHdoaWxlIGNvbXBpbGluZy4gIElmIHlvdSBnaXZlIHRoZQorCQkJbmFtZSBvZiB0aGUgZXJyb3JmaWxlLCB0aGUgJ2Vycm9yZmlsZScgb3B0aW9uIHdpbGwKKwkJCWJlIHNldCB0byBbZXJyb3JmaWxlXS4gIFNlZSB8OmNjfCBmb3IgWyFdLgorCisJCQkJCQkJKjpjZyogKjpjZ2V0ZmlsZSoKKzpjZ1tldGZpbGVdWyFdIFtlcnJvcmZpbGVdCisJCQlSZWFkIHRoZSBlcnJvciBmaWxlLiAgSnVzdCBsaWtlICI6Y2ZpbGUiIGJ1dCBkb24ndAorCQkJanVtcCB0byB0aGUgZmlyc3QgZXJyb3IuCisKKwkJCQkJCQkqOmNsKiAqOmNsaXN0KgorOmNsW2lzdF0gW2Zyb21dIFssIFt0b11dCisJCQlMaXN0IGFsbCBlcnJvcnMgdGhhdCBhcmUgdmFsaWQgfHF1aWNrZml4LXZhbGlkfC4KKwkJCUlmIG51bWJlcnMgW2Zyb21dIGFuZC9vciBbdG9dIGFyZSBnaXZlbiwgdGhlIHJlc3BlY3RpdmUKKwkJCXJhbmdlIG9mIGVycm9ycyBpcyBsaXN0ZWQuIEEgbmVnYXRpdmUgbnVtYmVyIGNvdW50cworCQkJZnJvbSB0aGUgbGFzdCBlcnJvciBiYWNrd2FyZHMsIC0xIGJlaW5nIHRoZSBsYXN0IGVycm9yLgorCQkJVGhlICdzd2l0Y2hidWYnIHNldHRpbmdzIGFyZSByZXNwZWN0ZWQgd2hlbiBqdW1waW5nCisJCQl0byBhIGJ1ZmZlci4KKworOmNsW2lzdF0hIFtmcm9tXSBbLCBbdG9dXQorCQkJTGlzdCBhbGwgZXJyb3JzLgorCitJZiB5b3UgaW5zZXJ0IG9yIGRlbGV0ZSBsaW5lcywgbW9zdGx5IHRoZSBjb3JyZWN0IGVycm9yIGxvY2F0aW9uIGlzIHN0aWxsCitmb3VuZCBiZWNhdXNlIGhpZGRlbiBtYXJrcyBhcmUgdXNlZC4gIFNvbWV0aW1lcywgd2hlbiB0aGUgbWFyayBoYXMgYmVlbgorZGVsZXRlZCBmb3Igc29tZSByZWFzb24sIHRoZSBtZXNzYWdlICJsaW5lIGNoYW5nZWQiIGlzIHNob3duIHRvIHdhcm4geW91IHRoYXQKK3RoZSBlcnJvciBsb2NhdGlvbiBtYXkgbm90IGJlIGNvcnJlY3QuICBJZiB5b3UgcXVpdCBWaW0gYW5kIHN0YXJ0IGFnYWluIHRoZQorbWFya3MgYXJlIGxvc3QgYW5kIHRoZSBlcnJvciBsb2NhdGlvbnMgbWF5IG5vdCBiZSBjb3JyZWN0IGFueW1vcmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBUaGUgZXJyb3Igd2luZG93CQkJCQkqcXVpY2tmaXgtd2luZG93KgorCisJCQkJCQkJKjpjb3BlKiAqOmNvcGVuKgorOmNvcGVbbl0gW2hlaWdodF0JT3BlbiBhIHdpbmRvdyB0byBzaG93IHRoZSBjdXJyZW50IGxpc3Qgb2YgZXJyb3JzLgorCQkJV2hlbiBbaGVpZ2h0XSBpcyBnaXZlbiwgdGhlIHdpbmRvdyBiZWNvbWVzIHRoYXQgaGlnaAorCQkJKGlmIHRoZXJlIGlzIHJvb20pLiAgT3RoZXJ3aXNlIHRoZSB3aW5kb3cgaXMgbWFkZSB0ZW4KKwkJCWxpbmVzIGhpZ2guCisJCQlUaGUgd2luZG93IHdpbGwgY29udGFpbiBhIHNwZWNpYWwgYnVmZmVyLCB3aXRoCisJCQknYnVmdHlwZScgZXF1YWwgdG8gInF1aWNrZml4Ii4gIERvbid0IGNoYW5nZSB0aGlzIQorCQkJSWYgdGhlcmUgYWxyZWFkeSBpcyBhIHF1aWNrZml4IHdpbmRvdywgaXQgd2lsbCBiZSBtYWRlCisJCQl0aGUgY3VycmVudCB3aW5kb3cuICBJdCBpcyBub3QgcG9zc2libGUgdG8gb3BlbiBhCisJCQlzZWNvbmQgcXVpY2tmaXggd2luZG93LgorCisJCQkJCQkJKjpjY2wqICo6Y2Nsb3NlKgorOmNjbFtvc2VdCQlDbG9zZSB0aGUgcXVpY2tmaXggd2luZG93LgorCisJCQkJCQkJKjpjdyogKjpjd2luZG93KgorOmN3W2luZG93XSBbaGVpZ2h0XQlPcGVuIHRoZSBxdWlja2ZpeCB3aW5kb3cgd2hlbiB0aGVyZSBhcmUgcmVjb2duaXplZAorCQkJZXJyb3JzLiAgSWYgdGhlIHdpbmRvdyBpcyBhbHJlYWR5IG9wZW4gYW5kIHRoZXJlIGFyZQorCQkJbm8gcmVjb2duaXplZCBlcnJvcnMsIGNsb3NlIHRoZSB3aW5kb3cuCisKKworTm9ybWFsbHkgdGhlIHF1aWNrZml4IHdpbmRvdyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uICBJZiB0aGVyZSBhcmUKK3ZlcnRpY2FsIHNwbGl0cywgaXQncyBhdCB0aGUgYm90dG9tIG9mIHRoZSByaWdodG1vc3QgY29sdW1uIG9mIHdpbmRvd3MuICBUbworbWFrZSBpdCBhbHdheXMgb2NjdXB5IHRoZSBmdWxsIHdpZHRoOiA+CisJOmJvdHJpZ2h0IGN3aW5kb3cKK1lvdSBjYW4gbW92ZSB0aGUgd2luZG93IGFyb3VuZCB3aXRoIHx3aW5kb3ctbW92aW5nfCBjb21tYW5kcy4KK0ZvciBleGFtcGxlLCB0byBtb3ZlIGl0IHRvIHRoZSB0b3A6IENUUkwtVyBLCitUaGUgJ3dpbmZpeGhlaWdodCcgb3B0aW9uIHdpbGwgYmUgc2V0LCB3aGljaCBtZWFucyB0aGF0IHRoZSB3aW5kb3cgd2lsbCBtb3N0bHkKK2tlZXAgaXRzIGhlaWdodCwgaWdub3JpbmcgJ3dpbmhlaWdodCcgYW5kICdlcXVhbGFsd2F5cycuICBZb3UgY2FuIGNoYW5nZSB0aGUKK2hlaWdodCBtYW51YWxseSAoZS5nLiwgYnkgZHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lIGFib3ZlIGl0IHdpdGggdGhlIG1vdXNlKS4KKworSW4gdGhlIHF1aWNrZml4IHdpbmRvdywgZWFjaCBsaW5lIGlzIG9uZSBlcnJvci4gIFRoZSBsaW5lIG51bWJlciBpcyBlcXVhbCB0bwordGhlIGVycm9yIG51bWJlci4gIFlvdSBjYW4gdXNlICI6LmNjIiB0byBqdW1wIHRvIHRoZSBlcnJvciB1bmRlciB0aGUgY3Vyc29yLgorSGl0dGluZyB0aGUgPENSPiBrZXkgb3IgZG91YmxlLWNsaWNraW5nIHRoZSBtb3VzZSBvbiBhIGxpbmUgaGFzIHRoZSBzYW1lCitlZmZlY3QuICBUaGUgZmlsZSBjb250YWluaW5nIHRoZSBlcnJvciBpcyBvcGVuZWQgaW4gdGhlIHdpbmRvdyBhYm92ZSB0aGUKK3F1aWNrZml4IHdpbmRvdy4gIElmIHRoZXJlIGFscmVhZHkgaXMgYSB3aW5kb3cgZm9yIHRoYXQgZmlsZSwgaXQgaXMgdXNlZAoraW5zdGVhZC4gIElmIHRoZSBidWZmZXIgaW4gdGhlIHVzZWQgd2luZG93IGhhcyBjaGFuZ2VkLCBhbmQgdGhlIGVycm9yIGlzIGluCithbm90aGVyIGZpbGUsIGp1bXBpbmcgdG8gdGhlIGVycm9yIHdpbGwgZmFpbC4gIFlvdSB3aWxsIGZpcnN0IGhhdmUgdG8gbWFrZQorc3VyZSB0aGUgd2luZG93IGNvbnRhaW5zIGEgYnVmZmVyIHdoaWNoIGNhbiBiZSBhYmFuZG9uZWQuCisKK1doZW4gdGhlIHF1aWNrZml4IHdpbmRvdyBoYXMgYmVlbiBmaWxsZWQsIHR3byBhdXRvY29tbWFuZCBldmVudHMgYXJlCit0cmlnZ2VyZWQuICBGaXJzdCB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24gaXMgc2V0IHRvICJxZiIsIHdoaWNoIHRyaWdnZXJzIHRoZQorRmlsZVR5cGUgZXZlbnQuICBUaGVuIHRoZSBCdWZSZWFkUG9zdCBldmVudCBpcyB0cmlnZ2VyZWQuICBUaGlzIGNhbiBiZSB1c2VkIHRvCitwZXJmb3JtIHNvbWUgYWN0aW9uIG9uIHRoZSBsaXN0ZWQgZXJyb3JzLiAgRXhhbXBsZTogPgorCWF1IEJ1ZlJlYWRQb3N0IHF1aWNrZml4ICBzZXRsb2NhbCBub21vZGlmaWFibGUKKwkJXCB8IHNpbGVudCBnL14vcy8vXD1saW5lKCIuIikuIiAiLworCQlcIHwgc2V0bG9jYWwgbW9kaWZpYWJsZQorVGhpcyBwcmVwZW5kcyB0aGUgbGluZSBudW1iZXIgdG8gZWFjaCBsaW5lLiAgTm90ZSB0aGUgdXNlIG9mICJcPSIgaW4gdGhlCitzdWJzdGl0dXRlIHN0cmluZyBvZiB0aGUgIjpzIiBjb21tYW5kLCB3aGljaCBpcyB1c2VkIHRvIGV2YWx1YXRlIGFuCitleHByZXNzaW9uLgorCitOb3RlOiBNYWtpbmcgY2hhbmdlcyBpbiB0aGUgcXVpY2tmaXggd2luZG93IGhhcyBubyBlZmZlY3Qgb24gdGhlIGxpc3Qgb2YKK2Vycm9ycy4gICdtb2RpZmlhYmxlJyBpcyBvZmYgdG8gYXZvaWQgbWFraW5nIGNoYW5nZXMuICBJZiB5b3UgZGVsZXRlIG9yIGluc2VydAorbGluZXMgYW55d2F5LCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhlIGVycm9yIG51bWJlciBpcyBtZXNzZWQgdXAuCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhpcywgeW91IGNvdWxkIHdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcXVpY2tmaXgKK3dpbmRvdyB0byBhIGZpbGUgYW5kIHVzZSAiOmNmaWxlIiB0byBoYXZlIGl0IHBhcnNlZCBhbmQgdXNlZCBhcyB0aGUgbmV3IGVycm9yCitsaXN0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gVXNpbmcgbW9yZSB0aGFuIG9uZSBsaXN0IG9mIGVycm9ycwkJCSpxdWlja2ZpeC1lcnJvci1saXN0cyoKKworU28gZmFyIGhhcyBiZWVuIGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBsaXN0IG9mIGVycm9ycy4gIEFjdHVhbGx5IHRoZQordGVuIGxhc3QgdXNlZCBsaXN0cyBhcmUgcmVtZW1iZXJlZC4gIFdoZW4gc3RhcnRpbmcgYSBuZXcgbGlzdCwgdGhlIHByZXZpb3VzCitvbmVzIGFyZSBhdXRvbWF0aWNhbGx5IGtlcHQuICBUd28gY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIG9sZGVyIGVycm9yCitsaXN0cy4gIFRoZXkgc2V0IG9uZSBvZiB0aGUgZXhpc3RpbmcgZXJyb3IgbGlzdHMgYXMgdGhlIGN1cnJlbnQgb25lLgorCisJCQkJCQkqOmNvbGRlciogKjpjb2wqICpFMzgwKgorOmNvbFtkZXJdIFtjb3VudF0JR28gdG8gb2xkZXIgZXJyb3IgbGlzdC4gIFdoZW4gW2NvdW50XSBpcyBnaXZlbiwgZG8KKwkJCXRoaXMgW2NvdW50XSB0aW1lcy4gIFdoZW4gYWxyZWFkeSBhdCB0aGUgb2xkZXN0IGVycm9yCisJCQlsaXN0LCBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuLgorCisJCQkJCQkqOmNuZXdlciogKjpjbmV3KiAqRTM4MSoKKzpjbmV3W2VyXSBbY291bnRdCUdvIHRvIG5ld2VyIGVycm9yIGxpc3QuICBXaGVuIFtjb3VudF0gaXMgZ2l2ZW4sIGRvCisJCQl0aGlzIFtjb3VudF0gdGltZXMuICBXaGVuIGFscmVhZHkgYXQgdGhlIG5ld2VzdCBlcnJvcgorCQkJbGlzdCwgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbi4KKworV2hlbiBhZGRpbmcgYSBuZXcgZXJyb3IgbGlzdCwgaXQgYmVjb21lcyB0aGUgY3VycmVudCBsaXN0LgorCitXaGVuICI6Y29sZGVyIiBoYXMgYmVlbiB1c2VkIGFuZCAiOm1ha2UiIG9yICI6Z3JlcCIgaXMgdXNlZCB0byBhZGQgYSBuZXcgZXJyb3IKK2xpc3QsIG9uZSBuZXdlciBsaXN0IGlzIG92ZXJ3cml0dGVuLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpZiB5b3UgYXJlCiticm93c2luZyB3aXRoICI6Z3JlcCIgfGdyZXB8LiAgSWYgeW91IHdhbnQgdG8ga2VlcCB0aGUgbW9yZSByZWNlbnQgZXJyb3IKK2xpc3RzLCB1c2UgIjpjbmV3ZXIgOTkiIGZpcnN0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gVXNpbmcgOm1ha2UJCQkJCQkqOm1ha2VfbWFrZXByZyoKKworCQkJCQkJCSo6bWFrKiAqOm1ha2UqCis6bWFrW2VdWyFdIFthcmd1bWVudHNdCTEuIElmIHRoZSAnYXV0b3dyaXRlJyBvcHRpb24gaXMgb24sIHdyaXRlIGFueSBjaGFuZ2VkCisJCQkgICBidWZmZXJzCisJCQkyLiBBbiBlcnJvcmZpbGUgbmFtZSBpcyBtYWRlIGZyb20gJ21ha2VlZicuICBJZgorCQkJICAgJ21ha2VlZicgZG9lc24ndCBjb250YWluICIjIyIsIGFuZCBhIGZpbGUgd2l0aCB0aGlzCisJCQkgICBuYW1lIGFscmVhZHkgZXhpc3RzLCBpdCBpcyBkZWxldGVkLgorCQkJMy4gVGhlIHByb2dyYW0gZ2l2ZW4gd2l0aCB0aGUgJ21ha2VwcmcnIG9wdGlvbiBpcworCQkJICAgc3RhcnRlZCAoZGVmYXVsdCAibWFrZSIpIHdpdGggdGhlIG9wdGlvbmFsCisJCQkgICBbYXJndW1lbnRzXSBhbmQgdGhlIG91dHB1dCBpcyBzYXZlZCBpbiB0aGUKKwkJCSAgIGVycm9yZmlsZSAoZm9yIFVuaXggaXQgaXMgYWxzbyBlY2hvZWQgb24gdGhlCisJCQkgICBzY3JlZW4pLgorCQkJNC4gVGhlIGVycm9yZmlsZSBpcyByZWFkIHVzaW5nICdlcnJvcmZvcm1hdCcuCisJCQk1LiBJZiBbIV0gaXMgbm90IGdpdmVuIHRoZSBmaXJzdCBlcnJvciBpcyBqdW1wZWQgdG8uCisJCQk2LiBUaGUgZXJyb3JmaWxlIGlzIGRlbGV0ZWQuCisJCQk3LiBZb3UgY2FuIG5vdyBtb3ZlIHRocm91Z2ggdGhlIGVycm9ycyB3aXRoIGNvbW1hbmRzCisJCQkgICBsaWtlIHw6Y25leHR8IGFuZCB8OmNwcmV2aW91c3wsIHNlZSBhYm92ZS4KKwkJCVRoaXMgY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgYSBjb21tZW50LCBhbnkgIgorCQkJY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBhcmd1bWVudHMuCisKK1RoZSAiOm1ha2UiIGNvbW1hbmQgZXhlY3V0ZXMgdGhlIGNvbW1hbmQgZ2l2ZW4gd2l0aCB0aGUgJ21ha2VwcmcnIG9wdGlvbi4KK1RoaXMgaXMgZG9uZSBieSBwYXNzaW5nIHRoZSBjb21tYW5kIHRvIHRoZSBzaGVsbCBnaXZlbiB3aXRoIHRoZSAnc2hlbGwnCitvcHRpb24uICBUaGlzIHdvcmtzIGFsbW9zdCBsaWtlIHR5cGluZworCisJIjohe21ha2Vwcmd9IFthcmd1bWVudHNdIHtzaGVsbHBpcGV9IHtlcnJvcmZpbGV9Ii4KKwore21ha2Vwcmd9IGlzIHRoZSBzdHJpbmcgZ2l2ZW4gd2l0aCB0aGUgJ21ha2VwcmcnIG9wdGlvbi4gIEFueSBjb21tYW5kIGNhbiBiZQordXNlZCwgbm90IGp1c3QgIm1ha2UiLiAgQ2hhcmFjdGVycyAnJScgYW5kICcjJyBhcmUgZXhwYW5kZWQgYXMgdXN1YWwgb24gYQorY29tbWFuZC1saW5lLiAgWW91IGNhbiB1c2UgIiU8IiB0byBpbnNlcnQgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIHdpdGhvdXQKK2V4dGVuc2lvbiwgb3IgIiM8IiB0byBpbnNlcnQgdGhlIGFsdGVybmF0ZSBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24sIGZvcgorZXhhbXBsZTogPgorICAgOnNldCBtYWtlcHJnPW1ha2VcICM8Lm8KKworW2FyZ3VtZW50c10gaXMgYW55dGhpbmcgdGhhdCBpcyB0eXBlZCBhZnRlciAiOm1ha2UiLgore3NoZWxscGlwZX0gaXMgdGhlICdzaGVsbHBpcGUnIG9wdGlvbi4KK3tlcnJvcmZpbGV9IGlzIHRoZSAnbWFrZWVmJyBvcHRpb24sIHdpdGggIyMgcmVwbGFjZWQgdG8gbWFrZSBpdCB1bmlxdWUuCisKK1RoZSBwbGFjZWhvbGRlciAiJCoiIGNhbiBiZSB1c2VkIGZvciB0aGUgYXJndW1lbnQgbGlzdCBpbiB7bWFrZXByb2d9IGlmIHRoZQorY29tbWFuZCBuZWVkcyBzb21lIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBhZnRlciBpdHMgYXJndW1lbnRzLiAgVGhlICQqIGlzCityZXBsYWNlZCB0aGVuIGJ5IGFsbCBhcmd1bWVudHMuICBFeGFtcGxlOiA+CisgICA6c2V0IG1ha2Vwcmc9bGF0ZXhcIFxcXFxub25zdG9wbW9kZVwgXFxcXGlucHV0XFx7JCp9CitvciBzaW1wbGVyID4KKyAgIDpsZXQgJm1wID0gJ2xhdGV4IFxcbm9uc3RvcG1vZGUgXFxpbnB1dFx7JCp9JworIiQqIiBjYW4gYmUgZ2l2ZW4gbXVsdGlwbGUgdGltZXMsIGZvciBleGFtcGxlOiA+CisgICA6c2V0IG1ha2Vwcmc9Z2NjXCAtb1wgJCpcICQqCisKK1RoZSAnc2hlbGxwaXBlJyBvcHRpb24gZGVmYXVsdHMgdG8gIj4iIGZvciB0aGUgQW1pZ2EsIE1TLURPUyBhbmQgV2luMzIuICBUaGlzCittZWFucyB0aGF0IHRoZSBvdXRwdXQgb2YgdGhlIGNvbXBpbGVyIGlzIHNhdmVkIGluIGEgZmlsZSBhbmQgbm90IHNob3duIG9uIHRoZQorc2NyZWVuIGRpcmVjdGx5LiAgRm9yIFVuaXggInwgdGVlIiBpcyB1c2VkLiAgVGhlIGNvbXBpbGVyIG91dHB1dCBpcyBzaG93biBvbgordGhlIHNjcmVlbiBhbmQgc2F2ZWQgaW4gYSBmaWxlIHRoZSBzYW1lIHRpbWUuICBEZXBlbmRpbmcgb24gdGhlIHNoZWxsIHVzZWQKKyJ8JiB0ZWUiIG9yICIyPiYxfCB0ZWUiIGlzIHRoZSBkZWZhdWx0LCBzbyBzdGRlcnIgb3V0cHV0IHdpbGwgYmUgaW5jbHVkZWQuCisKK0lmICdzaGVsbHBpcGUnIGlzIGVtcHR5LCB0aGUge2Vycm9yZmlsZX0gcGFydCB3aWxsIGJlIG9taXR0ZWQuICBUaGlzIGlzIHVzZWZ1bAorZm9yIGNvbXBpbGVycyB0aGF0IHdyaXRlIHRvIGFuIGVycm9yZmlsZSB0aGVtc2VsdmVzIChlLmcuLCBNYW54J3MgQW1pZ2EgQykuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gVXNpbmcgOmdyZXAJCQkJCQkqZ3JlcCogKmxpZCoKKworVmltIGNhbiBpbnRlcmZhY2Ugd2l0aCAiZ3JlcCIgYW5kIGdyZXAtbGlrZSBwcm9ncmFtcyAoc3VjaCBhcyB0aGUgR05VCitpZC11dGlscykgaW4gYSBzaW1pbGFyIHdheSB0byBpdHMgY29tcGlsZXIgaW50ZWdyYXRpb24gKHNlZSB8Om1ha2V8IGFib3ZlKS4KKworW1VuaXggdHJpdmlhOiBUaGUgbmFtZSBmb3IgdGhlIFVuaXggImdyZXAiIGNvbW1hbmQgY29tZXMgZnJvbSAiOmcvcmUvcCIsIHdoZXJlCisicmUiIHN0YW5kcyBmb3IgUmVndWxhciBFeHByZXNzaW9uLl0KKworCQkJCQkJCSAgICAqOmdyKiAqOmdyZXAqCis6Z3JbZXBdWyFdIFthcmd1bWVudHNdCUp1c3QgbGlrZSAiOm1ha2UiLCBidXQgdXNlICdncmVwcHJnJyBpbnN0ZWFkIG9mCisJCQknbWFrZXByZycgYW5kICdncmVwZm9ybWF0JyBpbnN0ZWFkIG9mICdlcnJvcmZvcm1hdCcuCisJCQkJCQkJKjpncmVwYSogKjpncmVwYWRkKgorOmdyZXBhW2RkXVshXSBbYXJndW1lbnRzXQorCQkJSnVzdCBsaWtlICI6Z3JlcCIsIGJ1dCBpbnN0ZWFkIG9mIG1ha2luZyBhIG5ldyBsaXN0IG9mCisJCQllcnJvcnMgdGhlIG1hdGNoZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBjdXJyZW50IGxpc3QuCisJCQlFeGFtcGxlOiA+CisJCQkJOmdyZXAgbm90aGluZyAlCisJCQkJOmJ1ZmRvIGdyZXBhZGQhIHNvbWV0aGluZyAlCis8CQkJVGhlIGZpcnN0IGNvbW1hbmQgbWFrZXMgYSBuZXcgZXJyb3IgbGlzdCB3aGljaCBpcworCQkJZW1wdHkuICBUaGUgc2Vjb25kIGNvbW1hbmQgZXhlY3V0ZXMgImdyZXBhZGQiIGZvciBlYWNoCisJCQlsaXN0ZWQgYnVmZmVyLiAgTm90ZSB0aGUgdXNlIG9mICEgdG8gYXZvaWQgdGhhdAorCQkJIjpncmVwYWRkIiBqdW1wcyB0byB0aGUgZmlyc3QgZXJyb3IsIHdoaWNoIGlzIG5vdAorCQkJYWxsb3dlZCB3aXRoIHw6YnVmZG98LgorCis1LjEgU2V0dGluZyB1cCBncmVwCisKK0lmIHlvdSBoYXZlIGEgc3RhbmRhcmQgImdyZXAiIHByb2dyYW0gaW5zdGFsbGVkLCB0aGUgOmdyZXAgY29tbWFuZCBtYXkgd29yaword2VsbCB3aXRoIHRoZSBkZWZhdWx0cy4gVGhlIHN5bnRheCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGNvbW1hbmQ6ID4KKworCTpncmVwIGZvbyAqLmMKKworV2lsbCBzZWFyY2ggYWxsIGZpbGVzIHdpdGggdGhlIC5jIGV4dGVuc2lvbiBmb3IgdGhlIHN1YnN0cmluZyAiZm9vIi4gVGhlCithcmd1bWVudHMgdG8gOmdyZXAgYXJlIHBhc3NlZCBzdHJhaWdodCB0byB0aGUgImdyZXAiIHByb2dyYW0sIHNvIHlvdSBjYW4gdXNlCit3aGF0ZXZlciBvcHRpb25zIHlvdXIgImdyZXAiIHN1cHBvcnRzLgorCitCeSBkZWZhdWx0LCA6Z3JlcCBpbnZva2VzIGdyZXAgd2l0aCB0aGUgLW4gb3B0aW9uIChzaG93IGZpbGUgYW5kIGxpbmUKK251bWJlcnMpLiBZb3UgY2FuIGNoYW5nZSB0aGlzIHdpdGggdGhlICdncmVwcHJnJyBvcHRpb24uIFlvdSB3aWxsIG5lZWQgdG8gc2V0CisnZ3JlcHByZycgaWY6CisKK2EpCVlvdSBhcmUgdXNpbmcgYSBwcm9ncmFtIHRoYXQgaXNuJ3QgY2FsbGVkICJncmVwIgorYikJWW91IGhhdmUgdG8gY2FsbCBncmVwIHdpdGggYSBmdWxsIHBhdGgKK2MpCVlvdSB3YW50IHRvIHBhc3Mgb3RoZXIgb3B0aW9ucyBhdXRvbWF0aWNhbGx5IChlLmcuIGNhc2UgaW5zZW5zaXRpdmUKKwlzZWFyY2guKQorCitPbmNlICJncmVwIiBoYXMgZXhlY3V0ZWQsIFZpbSBwYXJzZXMgdGhlIHJlc3VsdHMgdXNpbmcgdGhlICdncmVwZm9ybWF0Jworb3B0aW9uLiAgVGhpcyBvcHRpb24gd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSAnZXJyb3Jmb3JtYXQnIG9wdGlvbiAtIHNlZQordGhhdCBmb3IgZGV0YWlscy4gIFlvdSBtYXkgbmVlZCB0byBjaGFuZ2UgJ2dyZXBmb3JtYXQnIGZyb20gdGhlIGRlZmF1bHQgaWYKK3lvdXIgZ3JlcCBvdXRwdXRzIGluIGEgbm9uLXN0YW5kYXJkIGZvcm1hdCwgb3IgeW91IGFyZSB1c2luZyBzb21lIG90aGVyCitwcm9ncmFtIHdpdGggYSBzcGVjaWFsIGZvcm1hdC4KKworT25jZSB0aGUgcmVzdWx0cyBhcmUgcGFyc2VkLCBWaW0gbG9hZHMgdGhlIGZpcnN0IGZpbGUgY29udGFpbmluZyBhIG1hdGNoIGFuZAoranVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIGxpbmUsIGluIHRoZSBzYW1lIHdheSB0aGF0IGl0IGp1bXBzIHRvIGEgY29tcGlsZXIKK2Vycm9yIGluIHxxdWlja2ZpeHwgbW9kZS4gIFlvdSBjYW4gdGhlbiB1c2UgdGhlIHw6Y25leHR8LCB8OmNsaXN0fCwgZXRjLgorY29tbWFuZHMgdG8gc2VlIHRoZSBvdGhlciBtYXRjaGVzLgorCisKKzUuMiBVc2luZyA6Z3JlcCB3aXRoIGlkLXV0aWxzCisKK1lvdSBjYW4gc2V0IHVwIDpncmVwIHRvIHdvcmsgd2l0aCB0aGUgR05VIGlkLXV0aWxzIGxpa2UgdGhpczogPgorCisJOnNldCBncmVwcHJnPWxpZFwgLVJncmVwXCAtcworCTpzZXQgZ3JlcGZvcm1hdD0lZjolbDolbQorCit0aGVuID4KKwk6Z3JlcCAocmVnZXhwKQorCit3b3JrcyBqdXN0IGFzIHlvdSdkIGV4cGVjdC4KKyhwcm92aWRlZCB5b3UgcmVtZW1iZXJlZCB0byBta2lkIGZpcnN0IDopCisKKworNS4zIEJyb3dzaW5nIHNvdXJjZSBjb2RlIHdpdGggOmdyZXAKKworVXNpbmcgdGhlIHN0YWNrIG9mIGVycm9yIGxpc3RzIHRoYXQgVmltIGtlZXBzLCB5b3UgY2FuIGJyb3dzZSB5b3VyIGZpbGVzIHRvCitsb29rIGZvciBmdW5jdGlvbnMgYW5kIHRoZSBmdW5jdGlvbnMgdGhleSBjYWxsLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhhdCB5b3UKK2hhdmUgdG8gYWRkIGFuIGFyZ3VtZW50IHRvIHRoZSByZWFkX2ZpbGUoKSBmdW5jdGlvbi4gIFlvdSBlbnRlciB0aGlzIGNvbW1hbmQ6ID4KKworCTpncmVwIHJlYWRfZmlsZSAqLmMKKworWW91IHVzZSAiOmNuIiB0byBnbyBhbG9uZyB0aGUgbGlzdCBvZiBtYXRjaGVzIGFuZCBhZGQgdGhlIGFyZ3VtZW50LiAgQXQgb25lCitwbGFjZSB5b3UgaGF2ZSB0byBnZXQgdGhlIG5ldyBhcmd1bWVudCBmcm9tIGEgaGlnaGVyIGxldmVsIGZ1bmN0aW9uIG1zZygpLCBhbmQKK25lZWQgdG8gY2hhbmdlIHRoYXQgb25lIHRvby4gIFRodXMgeW91IHVzZTogPgorCisJOmdyZXAgbXNnICouYworCitXaGlsZSBjaGFuZ2luZyB0aGUgbXNnKCkgZnVuY3Rpb25zLCB5b3UgZmluZCBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8KK2dldCB0aGUgYXJndW1lbnQgZnJvbSBhIGhpZ2hlciBsZXZlbC4gIFlvdSBjYW4gYWdhaW4gdXNlICI6Z3JlcCIgdG8gZmluZCB0aGVzZQorZnVuY3Rpb25zLiAgT25jZSB5b3UgYXJlIGZpbmlzaGVkIHdpdGggb25lIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZSA+CisKKwk6Y29sZGVyCisKK3RvIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIG9uZS4KKworVGhpcyB3b3JrcyBsaWtlIGJyb3dzaW5nIGEgdHJlZTogIjpncmVwIiBnb2VzIG9uZSBsZXZlbCBkZWVwZXIsIGNyZWF0aW5nIGEKK2xpc3Qgb2YgYnJhbmNoZXMuICAiOmNvbGRlciIgZ29lcyBiYWNrIHRvIHRoZSBwcmV2aW91cyBsZXZlbC4gIFlvdSBjYW4gbWl4Cit0aGlzIHVzZSBvZiAiOmdyZXAiIGFuZCAiY29sZGVyIiB0byBicm93c2UgYWxsIHRoZSBsb2NhdGlvbnMgaW4gYSB0cmVlLWxpa2UKK3dheS4gIElmIHlvdSBkbyB0aGlzIGNvbnNpc3RlbnRseSwgeW91IHdpbGwgZmluZCBhbGwgbG9jYXRpb25zIHdpdGhvdXQgdGhlCituZWVkIHRvIHdyaXRlIGRvd24gYSAidG9kbyIgbGlzdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFNlbGVjdGluZyBhIGNvbXBpbGVyCQkJCQkqY29tcGlsZXItc2VsZWN0KgorCisJCQkJCQkqOmNvbXAqICo6Y29tcGlsZXIqICpFNjY2KgorOmNvbXBbaWxlcl1bIV0ge25hbWV9CQlTZXQgb3B0aW9ucyB0byB3b3JrIHdpdGggY29tcGlsZXIge25hbWV9LgorCQkJCVdpdGhvdXQgdGhlICIhIiBvcHRpb25zIGFyZSBzZXQgZm9yIHRoZQorCQkJCWN1cnJlbnQgYnVmZmVyLiAgV2l0aCAiISIgZ2xvYmFsIG9wdGlvbnMgYXJlCisJCQkJc2V0LgorCQkJCUlmIHlvdSB1c2UgIjpjb21waWxlciBmb28iIGluICJmaWxlLmZvbyIgYW5kCisJCQkJdGhlbiAiOmNvbXBpbGVyISBiYXIiIGluIGFub3RoZXIgYnVmZmVyLCBWaW0KKwkJCQl3aWxsIGtlZXAgb24gdXNpbmcgImZvbyIgaW4gImZpbGUuZm9vIi4KKwkJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQkJfCtldmFsfCBmZWF0dXJlfQorCisKK1RoZSBWaW0gcGx1Z2lucyBpbiB0aGUgImNvbXBpbGVyIiBkaXJlY3Rvcnkgd2lsbCBzZXQgb3B0aW9ucyB0byB1c2UgdGhlCitzZWxlY3RlZCBjb21waWxlci4gIEZvciAiOmNvbXBpbGVyIiBsb2NhbCBvcHRpb25zIGFyZSBzZXQsIGZvciAiOmNvbXBpbGVyISIKK2dsb2JhbCBvcHRpb25zLgorCQkJCQkJCSpjdXJyZW50X2NvbXBpbGVyKgorVG8gc3VwcG9ydCBvbGRlciBWaW0gdmVyc2lvbnMsIHRoZSBwbHVnaW5zIGFsd2F5cyB1c2UgImN1cnJlbnRfY29tcGlsZXIiIGFuZAorbm90ICJiOmN1cnJlbnRfY29tcGlsZXIiLiAgV2hhdCB0aGUgY29tbWFuZCBhY3R1YWxseSBkb2VzIGlzIHRoZSBmb2xsb3dpbmc6CisKKy0gRGVsZXRlIHRoZSAiY3VycmVudF9jb21waWxlciIgYW5kICJiOmN1cnJlbnRfY29tcGlsZXIiIHZhcmlhYmxlcy4KKy0gRGVmaW5lIHRoZSAiQ29tcGlsZXJTZXQiIHVzZXIgY29tbWFuZC4gIFdpdGggIiEiIGl0IGRvZXMgIjpzZXQiLCB3aXRob3V0ICIhIgorICBpdCBkb2VzICI6c2V0bG9jYWwiLgorLSBFeGVjdXRlICI6cnVudGltZSEgY29tcGlsZXIve25hbWV9LnZpbSIuICBUaGUgcGx1Z2lucyBhcmUgZXhwZWN0ZWQgdG8gc2V0CisgIG9wdGlvbnMgd2l0aCAiQ29tcGlsZXJTZXQiIGFuZCBzZXQgdGhlICJjdXJyZW50X2NvbXBpbGVyIiB2YXJpYWJsZSB0byB0aGUKKyAgbmFtZSBvZiB0aGUgY29tcGlsZXIuCistIERlbGV0ZSB0aGUgIkNvbXBpbGVyU2V0IHVzZXIgY29tbWFuZC4KKy0gU2V0ICJiOmN1cnJlbnRfY29tcGlsZXIiIHRvIHRoZSB2YWx1ZSBvZiAiY3VycmVudF9jb21waWxlciIuCistIFdpdGhvdXQgIiEiIHRoZSBvbGQgdmFsdWUgb2YgImN1cnJlbnRfY29tcGlsZXIiIGlzIHJlc3RvcmVkLgorCisKK0ZvciB3cml0aW5nIGEgY29tcGlsZXIgcGx1Z2luLCBzZWUgfHdyaXRlLWNvbXBpbGVyLXBsdWdpbnwuCisKKworTUFOWCBBWlRFQyBDCQkJCSpxdWlja2ZpeC1tYW54KiAqY29tcGlsZXItbWFueCoKKworVG8gdXNlIFZpbSB3aXRoIE1hbngncyBBenRlYyBDIGNvbXBpbGVyIG9uIHRoZSBBbWlnYSB5b3Ugc2hvdWxkIGRvIHRoZQorZm9sbG93aW5nOgorLSBTZXQgdGhlIENDRURJVCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBjb21tYW5kOiA+CisJbXNldCAiQ0NFRElUPXZpbSAtcSIKKy0gQ29tcGlsZSB3aXRoIHRoZSAtcWYgb3B0aW9uLiAgSWYgdGhlIGNvbXBpbGVyIGZpbmRzIGFueSBlcnJvcnMsIFZpbSBpcworICBzdGFydGVkIGFuZCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgb24gdGhlIGZpcnN0IGVycm9yLiAgVGhlIGVycm9yIG1lc3NhZ2UKKyAgd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGhlIGxhc3QgbGluZS4gIFlvdSBjYW4gZ28gdG8gb3RoZXIgZXJyb3JzIHdpdGggdGhlCisgIGNvbW1hbmRzIG1lbnRpb25lZCBhYm92ZS4gIFlvdSBjYW4gZml4IHRoZSBlcnJvcnMgYW5kIHdyaXRlIHRoZSBmaWxlKHMpLgorLSBJZiB5b3UgZXhpdCBWaW0gbm9ybWFsbHkgdGhlIGNvbXBpbGVyIHdpbGwgcmUtY29tcGlsZSB0aGUgc2FtZSBmaWxlLiAgSWYgeW91CisgIGV4aXQgd2l0aCB0aGUgOmNxIGNvbW1hbmQsIHRoZSBjb21waWxlciB3aWxsIHRlcm1pbmF0ZS4gIERvIHRoaXMgaWYgeW91CisgIGNhbm5vdCBmaXggdGhlIGVycm9yLCBvciBpZiBhbm90aGVyIGZpbGUgbmVlZHMgdG8gYmUgY29tcGlsZWQgZmlyc3QuCisKK1RoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9ucyB0byB0aGUgUXVpY2tmaXggbW9kZSBvbiB0aGUgQW1pZ2EuICBUaGUKK2NvbXBpbGVyIG9ubHkgd3JpdGVzIHRoZSBmaXJzdCAyNSBlcnJvcnMgdG8gdGhlIGVycm9yZmlsZSAoTWFueCdzCitkb2N1bWVudGF0aW9uIGRvZXMgbm90IHNheSBob3cgdG8gZ2V0IG1vcmUpLiAgSWYgeW91IHdhbnQgdG8gZmluZCB0aGUgb3RoZXJzLAoreW91IHdpbGwgaGF2ZSB0byBmaXggYSBmZXcgZXJyb3JzIGFuZCBleGl0IHRoZSBlZGl0b3IuICBBZnRlciByZWNvbXBpbGluZywKK3VwIHRvIDI1IHJlbWFpbmluZyBlcnJvcnMgd2lsbCBiZSBmb3VuZC4KKworSWYgVmltIHdhcyBzdGFydGVkIGZyb20gdGhlIGNvbXBpbGVyLCB0aGUgOnNoIGFuZCBzb21lIDohICBjb21tYW5kcyB3aWxsIG5vdAord29yaywgYmVjYXVzZSBWaW0gaXMgdGhlbiBydW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIGNvbXBpbGVyIGFuZAorc3RkaW4gKHN0YW5kYXJkIGlucHV0KSB3aWxsIG5vdCBiZSBpbnRlcmFjdGl2ZS4KKworCitQWVVOSVQgQ09NUElMRVIJCQkJCQkqY29tcGlsZXItcHl1bml0KgorCitUaGlzIGlzIG5vdCBhY3R1YWxseSBhIGNvbXBpbGVyLCBidXQgYSB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIGZvciB0aGUKK1B5dGhvbiBsYW5ndWFnZS4gSXQgaXMgaW5jbHVkZWQgaW50byBzdGFuZGFyZCBQeXRob24gZGlzdHJpYnV0aW9uCitzdGFydGluZyBmcm9tIHZlcnNpb24gMi4wLiBGb3Igb2xkZXIgdmVyc2lvbnMsIHlvdSBjYW4gZ2V0IGl0IGZyb20KK2h0dHA6Ly9weXVuaXQuc291cmNlZm9yZ2UubmV0LgorCitXaGVuIHlvdSBydW4geW91ciB0ZXN0cyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBmcmFtZXdvcmssIHBvc3NpYmxlIGVycm9ycworYXJlIHBhcnNlZCBieSBWaW0gYW5kIHByZXNlbnRlZCBmb3IgeW91IGluIHF1aWNrLWZpeCBtb2RlLgorCitVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBzdGFuZGFyZCB3YXkgdG8gcnVuIHRoZSB0ZXN0cy4KK1RoZSBhbGx0ZXN0cy5weSBzY3JpcHQgc2VlbXMgdG8gYmUgdXNlZCBxdWl0ZSBvZnRlbiwgdGhhdCdzIGFsbC4KK1VzZWZ1bCB2YWx1ZXMgZm9yIHRoZSAnbWFrZXByZycgb3B0aW9ucyB0aGVyZWZvcmUgYXJlOgorIHNldGxvY2FsIG1ha2Vwcmc9Li9hbGx0ZXN0cy5weSAiIFJ1biBhIHRlc3RzdWl0ZQorIHNldGxvY2FsIG1ha2Vwcmc9cHl0aG9uICUgICAgICAiIFJ1biBhIHNpbmdsZSB0ZXN0Y2FzZQorCitBbHNvIHNlZSBodHRwOi8vdmltLnNvdXJjZWZvcmdlLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI4MC4KKworCitURVggQ09NUElMRVIJCQkJCQkqY29tcGlsZXItdGV4KgorCitJbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIGNvbXBpbGVyIGZvciBUZVggKCRWSU1SVU5USU1FL2NvbXBpbGVyL3RleC52aW0pCit1c2VzIG1ha2UgY29tbWFuZCBpZiBwb3NzaWJsZS4gSWYgdGhlIGNvbXBpbGVyIGZpbmRzIGEgZmlsZSBuYW1lZCAiTWFrZWZpbGUiCitvciAibWFrZWZpbGUiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaXQgc3VwcG9zZXMgdGhhdCB5b3Ugd2FudCB0byBwcm9jZXNzCit5b3VyICpUZVggZmlsZXMgd2l0aCBtYWtlLCBhbmQgdGhlIG1ha2VmaWxlIGRvZXMgdGhlIHJpZ2h0IHdvcmsuIEluIHRoaXMgY2FzZQorY29tcGlsZXIgc2V0cyAnZXJyb3Jmb3JtYXQnIGZvciAqVGVYIG91dHB1dCBhbmQgbGVhdmVzICdtYWtlcHJnJyB1bnRvdWNoZWQuIElmCituZWl0aGVyICJNYWtlZmlsZSIgbm9yICJtYWtlZmlsZSIgaXMgZm91bmQsIHRoZSBjb21waWxlciB3aWxsIG5vdCB1c2UgbWFrZS4KK1lvdSBjYW4gZm9yY2UgdGhlIGNvbXBpbGVyIHRvIGlnbm9yZSBtYWtlZmlsZXMgYnkgZGVmaW5pbmcKK2I6dGV4X2lnbm9yZV9tYWtlZmlsZSBvciBnOnRleF9pZ25vcmVfbWFrZWZpbGUgdmFyaWFibGUgKHRoZXkgYXJlIGNoZWNrZWQgZm9yCitleGlzdGVuY2Ugb25seSkuCisKK0lmIHRoZSBjb21waWxlciBjaG9zZSBub3QgdG8gdXNlIG1ha2UsIGl0IG5lZWQgdG8gY2hvb3NlIGEgcmlnaHQgcHJvZ3JhbSBmb3IKK3Byb2Nlc3NpbmcgeW91ciBpbnB1dC4gSWYgYjp0ZXhfZmxhdm9yIG9yIGc6dGV4X2ZsYXZvciAoaW4gdGhpcyBwcmVjZWRlbmNlKQordmFyaWFibGUgZXhpc3RzLCBpdCBkZWZpbmVzIFRlWCBmbGF2b3IgZm9yIDptYWtlIChhY3R1YWxseSwgdGhpcyBpcyB0aGUgbmFtZQorb2YgZXhlY3V0ZWQgY29tbWFuZCksIGFuZCBpZiBib3RoIHZhcmlhYmxlcyBkbyBub3QgZXhpc3QsIGl0IGRlZmF1bHRzIHRvCisibGF0ZXgiLiBGb3IgZXhhbXBsZSwgd2hpbGUgZWRpdGluZyBjaGFwdGVyMi50ZXggXGlucHV0LWVkIGZyb20gbXlwYXBlci50ZXgKK3dyaXR0ZW4gaW4gQU1TLVRlWDogPgorCisJOmxldCBiOnRleF9mbGF2b3IgPSAnYW1zdGV4JworCTpjb21waWxlciB0ZXgKKzwJW2VkaXRpbmcuLi5dID4KKwk6bWFrZSBteXBhcGVyCisKK05vdGUgdGhhdCB5b3UgbXVzdCBzcGVjaWZ5IGEgbmFtZSBvZiB0aGUgZmlsZSB0byBwcm9jZXNzIGFzIGFuIGFyZ3VtZW50ICh0bworcHJvY2VzcyB0aGUgcmlnaHQgZmlsZSB3aGVuIGVkaXRpbmcgXGlucHV0LWVkIG9yIFxpbmNsdWRlLWVkIGZpbGU7IHBvcnRhYmxlCitzb2x1dGlvbiBmb3Igc3Vic3RpdHV0aW5nICUgZm9yIG5vIGFyZ3VtZW50cyBpcyB3ZWxjb21lKS4gVGhpcyBpcyBub3QgaW4gdGhlCitzZW1hbnRpY3Mgb2YgbWFrZSwgd2hlcmUgeW91IHNwZWNpZnkgYSB0YXJnZXQsIG5vdCBzb3VyY2UsIGJ1dCB5b3UgbWF5IHNwZWNpZnkKK2ZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uICIudGV4IiBhbmQgbWVhbiB0aGlzIGFzICJtYWtlIGZpbGVuYW1lLmR2aSBvcgorZmlsZW5hbWUucGRmIG9yIGZpbGVuYW1lLnNvbWVfcmVzdWx0X2V4dGVuc2lvbiBhY2NvcmRpbmcgdG8gY29tcGlsZXIiLgorCitOb3RlOiB0ZXggY29tbWFuZCBsaW5lIHN5bnRheCBpcyBzZXQgdG8gdXNhYmxlIGJvdGggZm9yIE1pa1RlWCAoc3VnZ2VzdGlvbgorYnkgU3JpbmF0aCBBdmFkaGFudWxhKSBhbmQgdGVUZVggKGNoZWNrZWQgYnkgQXJ0ZW0gQ2h1cHJpbmEpLiBTdWdnZXN0aW9uCitmcm9tIHxlcnJvcmZvcm1hdC1MYVRlWHwgaXMgdG9vIGNvbXBsZXggdG8ga2VlcCBpdCB3b3JraW5nIGZvciBkaWZmZXJlbnQKK3NoZWxscyBhbmQgT1NlcyBhbmQgYWxzbyBkb2VzIG5vdCBhbGxvdyB0byB1c2Ugb3RoZXIgYXZhaWxhYmxlIFRlWCBvcHRpb25zLAoraWYgYW55LiBJZiB5b3VyIFRlWCBkb2Vzbid0IHN1cHBvcnQgIi1pbnRlcmFjdGlvbj1ub25zdG9wbW9kZSIsIHBsZWFzZQorcmVwb3J0IGl0IHdpdGggZGlmZmVyZW50IG1lYW5zIHRvIGV4cHJlc3MgXG5vbnN0b3Btb2RlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzcuIFRoZSBlcnJvciBmb3JtYXQJCQkJCSplcnJvci1maWxlLWZvcm1hdCoKKworCQkJCQkqZXJyb3Jmb3JtYXQqICpFMzcyKiAqRTM3MyogKkUzNzQqCisJCQkJCQkqRTM3NSogKkUzNzYqICpFMzc3KiAqRTM3OCoKK1RoZSAnZXJyb3Jmb3JtYXQnIG9wdGlvbiBzcGVjaWZpZXMgYSBsaXN0IG9mIGZvcm1hdHMgdGhhdCBhcmUgcmVjb2duaXplZC4gIFRoZQorZmlyc3QgZm9ybWF0IHRoYXQgbWF0Y2hlcyB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaXMgdXNlZC4gIFlvdSBjYW4gYWRkIHNldmVyYWwKK2Zvcm1hdHMgZm9yIGRpZmZlcmVudCBtZXNzYWdlcyB5b3VyIGNvbXBpbGVyIHByb2R1Y2VzLCBvciBldmVuIGVudHJpZXMgZm9yCittdWx0aXBsZSBjb21waWxlcnMuICBTZWUgfGVmbS1lbnRyaWVzfC4KKworRWFjaCBlbnRyeSBpbiAnZXJyb3Jmb3JtYXQnIGlzIGEgc2NhbmYtbGlrZSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIGZvcm1hdC4KK0ZpcnN0LCB5b3UgbmVlZCB0byBrbm93IGhvdyBzY2FuZiB3b3Jrcy4gIExvb2sgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91cgorQyBjb21waWxlci4gIEJlbG93IHlvdSBmaW5kIHRoZSAlIGl0ZW1zIHRoYXQgVmltIHVuZGVyc3RhbmRzLiAgT3RoZXJzIGFyZQoraW52YWxpZC4KKworU3BlY2lhbCBjaGFyYWN0ZXJzIGluICdlcnJvcmZvcm1hdCcgYXJlIGNvbW1hIGFuZCBiYWNrc2xhc2guICBTZWUKK3xlZm0tZW50cmllc3wgZm9yIGhvdyB0byBkZWFsIHdpdGggdGhlbS4gIE5vdGUgdGhhdCBhIGxpdGVyYWwgIiUiIGlzIG1hdGNoZWQKK2J5ICIlJSIsIHRodXMgaXQgaXMgbm90IGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4KKworTm90ZTogQnkgZGVmYXVsdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHVwcGVyIGFuZCBsb3dlcmNhc2UgaXMgaWdub3JlZC4gIElmCit5b3Ugd2FudCB0byBtYXRjaCBjYXNlLCBhZGQgIlxDIiB0byB0aGUgcGF0dGVybiB8L1xDfC4KKworCitCYXNpYyBpdGVtcworCisJJWYJCWZpbGUgbmFtZSAoZmluZHMgYSBzdHJpbmcpCisJJWwJCWxpbmUgbnVtYmVyIChmaW5kcyBhIG51bWJlcikKKwklYwkJY29sdW1uIG51bWJlciAoZmluZHMgYSBudW1iZXIgcmVwcmVzZW50aW5nIGNoYXJhY3RlcgorCQkJY29sdW1uIG9mIHRoZSBlcnJvciwgKDEgPHRhYj4gPT0gMSBjaGFyYWN0ZXIgY29sdW1uKSkKKwkldgkJdmlydHVhbCBjb2x1bW4gbnVtYmVyIChmaW5kcyBhIG51bWJlciByZXByZXNlbnRpbmcKKwkJCXNjcmVlbiBjb2x1bW4gb2YgdGhlIGVycm9yICgxIDx0YWI+ID09IDggc2NyZWVuCisJCQljb2x1bW5zKQorCSV0CQllcnJvciB0eXBlIChmaW5kcyBhIHNpbmdsZSBjaGFyYWN0ZXIpCisJJW4JCWVycm9yIG51bWJlciAoZmluZHMgYSBudW1iZXIpCisJJW0JCWVycm9yIG1lc3NhZ2UgKGZpbmRzIGEgc3RyaW5nKQorCSVyCQltYXRjaGVzIHRoZSAicmVzdCIgb2YgYSBzaW5nbGUtbGluZSBmaWxlIG1lc3NhZ2UgJU8vUC9RCisJJXAJCXBvaW50ZXIgbGluZSAoZmluZHMgYSBzZXF1ZW5jZSBvZiAnLScsICcuJyBvciAnICcgYW5kCisJCQl1c2VzIHRoZSBsZW5ndGggZm9yIHRoZSBjb2x1bW4gbnVtYmVyKQorCSUqe2NvbnZ9CWFueSBzY2FuZiBub24tYXNzaWduYWJsZSBjb252ZXJzaW9uCisJJSUJCXRoZSBzaW5nbGUgJyUnIGNoYXJhY3RlcgorCitUaGUgIiVmIiBjb252ZXJzaW9uIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgJ2lzZm5hbWUnIHNldHRpbmcuCisKK1RoZSAiJWYiIGFuZCAiJW0iIGNvbnZlcnNpb25zIGhhdmUgdG8gZGV0ZWN0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gIFRoZXkKK3Nob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSBpbiB0aGUgc3RyaW5nLiAgRXZlcnl0aGluZwordXAgdG8gdGhhdCBjaGFyYWN0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHN0cmluZy4gIEJ1dCB3aGVuIHRoZSBuZXh0IGNoYXJhY3RlcgoraXMgYSAnJScgb3IgYSBiYWNrc2xhc2gsICIlZiIgd2lsbCBsb29rIGZvciBhbnkgJ2lzZm5hbWUnIGNoYXJhY3RlciBhbmQgIiVtIgorZmluZHMgYW55dGhpbmcuICBJZiB0aGUgIiVmIiBvciAiJW0iIGlzIGF0IHRoZSBlbmQsIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGVuZAorb2YgdGhlIGxpbmUgaXMgaW5jbHVkZWQuCisKK09uIE1TLURPUywgTVMtV2luZG93cyBhbmQgT1MvMiBhIGxlYWRpbmcgIkM6IiB3aWxsIGJlIGluY2x1ZGVkIGluICIlZiIsIGV2ZW4KK3doZW4gdXNpbmcgIiVmOiIuICBUaGlzIG1lYW5zIHRoYXQgYSBmaWxlIG5hbWUgd2hpY2ggaXMgYSBzaW5nbGUgYWxwaGFiZXRpY2FsCitsZXR0ZXIgd2lsbCBub3QgYmUgZGV0ZWN0ZWQuCisKK1RoZSAiJXAiIGNvbnZlcnNpb24gaXMgbm9ybWFsbHkgZm9sbG93ZWQgYnkgYSAiXiIuICBJdCdzIHVzZWQgZm9yIGNvbXBpbGVycwordGhhdCBvdXRwdXQgYSBsaW5lIGxpa2U6ID4KKwkgICAgXgorb3IgPgorICAgLS0tLS0tLS0tXgordG8gaW5kaWNhdGUgdGhlIGNvbHVtbiBvZiB0aGUgZXJyb3IuICBUaGlzIGlzIHRvIGJlIHVzZWQgaW4gYSBtdWx0aS1saW5lIGVycm9yCittZXNzYWdlLiAgU2VlIHxlcnJvcmZvcm1hdC1qYXZhY3wgZm9yIGEgIHVzZWZ1bCBleGFtcGxlLgorCisKK0NoYW5naW5nIGRpcmVjdG9yeQorCitUaGUgZm9sbG93aW5nIHVwcGVyY2FzZSBjb252ZXJzaW9uIGNoYXJhY3RlcnMgc3BlY2lmeSB0aGUgdHlwZSBvZiBzcGVjaWFsCitmb3JtYXQgc3RyaW5ncy4gIEF0IG1vc3Qgb25lIG9mIHRoZW0gbWF5IGJlIGdpdmVuIGFzIGEgcHJlZml4IGF0IHRoZSBiZWdpbgorb2YgYSBzaW5nbGUgY29tbWEtc2VwYXJhdGVkIGZvcm1hdCBwYXR0ZXJuLgorU29tZSBjb21waWxlcnMgcHJvZHVjZSBtZXNzYWdlcyB0aGF0IGNvbnNpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzIHRoYXQgaGF2ZSB0bworYmUgcHJlcGVuZGVkIHRvIGVhY2ggZmlsZSBuYW1lIHJlYWQgYnkgJWYgKGV4YW1wbGU6IEdOVSBtYWtlKS4gVGhlIGZvbGxvd2luZworY29kZXMgY2FuIGJlIHVzZWQgdG8gc2NhbiB0aGVzZSBkaXJlY3RvcnkgbmFtZXM7IHRoZXkgd2lsbCBiZSBzdG9yZWQgaW4gYW4KK2ludGVybmFsIGRpcmVjdG9yeSBzdGFjay4JCQkJCSpFMzc5KgorCSVECQkiZW50ZXIgZGlyZWN0b3J5IiBmb3JtYXQgc3RyaW5nOyBleHBlY3RzIGEgZm9sbG93aW5nCisJCQkgICVmIHRoYXQgZmluZHMgdGhlIGRpcmVjdG9yeSBuYW1lCisJJVgJCSJsZWF2ZSBkaXJlY3RvcnkiIGZvcm1hdCBzdHJpbmc7IGV4cGVjdHMgZm9sbG93aW5nICVmCisKK1doZW4gZGVmaW5pbmcgYW4gImVudGVyIGRpcmVjdG9yeSIgb3IgImxlYXZlIGRpcmVjdG9yeSIgZm9ybWF0LCB0aGUgIiVEIiBvcgorIiVYIiBoYXMgdG8gYmUgZ2l2ZW4gYXQgdGhlIHN0YXJ0IG9mIHRoYXQgc3Vic3RyaW5nLiBWaW0gdHJhY2tzIHRoZSBkaXJlY3RvcnkKK2NoYW5nZXMgYW5kIHByZXBlbmRzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBlYWNoIGVycm9uZW91cyBmaWxlIGZvdW5kIHdpdGggYQorcmVsYXRpdmUgcGF0aC4gIFNlZSB8cXVpY2tmaXgtZGlyZWN0b3J5LXN0YWNrfCBmb3IgZGV0YWlscywgdGlwcyBhbmQKK2xpbWl0YXRpb25zLgorCisKK011bHRpLWxpbmUgbWVzc2FnZXMJCQkJKmVycm9yZm9ybWF0LW11bHRpLWxpbmUqCisKK0l0IGlzIHBvc3NpYmxlIHRvIHJlYWQgdGhlIG91dHB1dCBvZiBwcm9ncmFtcyB0aGF0IHByb2R1Y2UgbXVsdGktbGluZQorbWVzc2FnZXMsIGllLiBlcnJvciBzdHJpbmdzIHRoYXQgY29uc3VtZSBtb3JlIHRoYW4gb25lIGxpbmUuICBQb3NzaWJsZQorcHJlZml4ZXMgYXJlOgorCSVFCQlzdGFydCBvZiBhIG11bHRpLWxpbmUgZXJyb3IgbWVzc2FnZQorCSVXCQlzdGFydCBvZiBhIG11bHRpLWxpbmUgd2FybmluZyBtZXNzYWdlCisJJUkJCXN0YXJ0IG9mIGEgbXVsdGktbGluZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UKKwklQQkJc3RhcnQgb2YgYSBtdWx0aS1saW5lIG1lc3NhZ2UgKHVuc3BlY2lmaWVkIHR5cGUpCisJJUMJCWNvbnRpbnVhdGlvbiBvZiBhIG11bHRpLWxpbmUgbWVzc2FnZQorCSVaCQllbmQgb2YgYSBtdWx0aS1saW5lIG1lc3NhZ2UKK1RoZXNlIGNhbiBiZSB1c2VkIHdpdGggJysnIGFuZCAnLScsIHNlZSB8ZWZtLWlnbm9yZXwgYmVsb3cuCisKK0V4YW1wbGU6IFlvdXIgY29tcGlsZXIgaGFwcGVucyB0byB3cml0ZSBvdXQgZXJyb3JzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisobGVhZGluZyBsaW5lIG51bWJlcnMgbm90IGJlaW5nIHBhcnQgb2YgdGhlIGFjdHVhbCBvdXRwdXQpOgorCisgICAgIDEJRXJyb3IgMjc1CisgICAgIDIJbGluZSA0MgorICAgICAzCWNvbHVtbiAzCisgICAgIDQJJyAnIGV4cGVjdGVkIGFmdGVyICctLScKKworVGhlIGFwcHJvcHJpYXRlIGVycm9yIGZvcm1hdCBzdHJpbmcgaGFzIHRvIGxvb2sgbGlrZSB0aGlzOiA+CisgICA6c2V0IGVmbT0lRUVycm9yXCAlbiwlQ2xpbmVcICVsLCVDY29sdW1uXCAlYywlWiVtCisKK0FuZCB0aGUgfDpjbGlzdHwgZXJyb3IgbWVzc2FnZSBnZW5lcmF0ZWQgZm9yIHRoaXMgZXJyb3IgaXM6CisKKyAxOjQyIGNvbCAzIGVycm9yIDI3NTogICcgJyBleHBlY3RlZCBhZnRlciAnLS0nCisKK0Fub3RoZXIgZXhhbXBsZTogVGhpbmsgb2YgYSBQeXRob24gaW50ZXJwcmV0ZXIgdGhhdCBwcm9kdWNlcyB0aGUgZm9sbG93aW5nCitlcnJvciBtZXNzYWdlIChsaW5lIG51bWJlcnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBhY3R1YWwgb3V0cHV0KToKKworICAgICAxCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIDIJRkFJTDogdGVzdEdldFR5cGVJZENhY2hlc1Jlc3VsdCAoZGJmYWNhZGVUZXN0LkRqc0RCRmFjYWRlVGVzdCkKKyAgICAgMwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA0CVRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgNQkgIEZpbGUgInVuaXR0ZXN0cy9kYmZhY2FkZVRlc3QucHkiLCBsaW5lIDg5LCBpbiB0ZXN0Rm9vCisgICAgIDYJICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDM0LCBkdGlkKQorICAgICA3CSAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMi4yL3VuaXR0ZXN0LnB5IiwgbGluZSAyODYsIGluCisgICAgIDgJIGZhaWxVbmxlc3NFcXVhbAorICAgICA5CSAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sIFwKKyAgICAxMAlBc3NlcnRpb25FcnJvcjogMzQgIT0gMzMKKyAgICAxMQorICAgIDEyCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgMTMJUmFuIDI3IHRlc3RzIGluIDAuMDYzcworCitTYXkgeW91IHdhbnQgfDpjbGlzdHwgd3JpdGUgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIG9mIHRoaXMgbWVzc2FnZSBvbmx5LAorbmFtZWx5OgorIDUgdW5pdHRlc3RzL2RiZmFjYWRlVGVzdC5weTo4OTogIEFzc2VydGlvbkVycm9yOiAzNCAhPSAzMworCitUaGVuIHRoZSBlcnJvciBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIGRlZmluZWQgYXMgZm9sbG93czogPgorICA6c2V0IGVmbT0lQ1wgJS4lIywlQVwgXCBGaWxlXCBcIiVmXCJcXCxcIGxpbmVcICVsJS4lIywlWiVbJV5cIF0lXFxAPSVtCisKK05vdGUgdGhhdCB0aGUgJUMgc3RyaW5nIGlzIGdpdmVuIGJlZm9yZSB0aGUgJUEgaGVyZTogc2luY2UgdGhlIGV4cHJlc3Npb24KKycgJS4lIycgKHdoaWNoIHN0YW5kcyBmb3IgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAnIC4qJykgbWF0Y2hlcyBldmVyeSBsaW5lCitzdGFydGluZyB3aXRoIGEgc3BhY2UsIGZvbGxvd2VkIGJ5IGFueSBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUsCitpdCBhbHNvIGhpZGVzIGxpbmUgNyB3aGljaCB3b3VsZCB0cmlnZ2VyIGEgc2VwYXJhdGUgZXJyb3IgbWVzc2FnZSBvdGhlcndpc2UuCitFcnJvciBmb3JtYXQgc3RyaW5ncyBhcmUgYWx3YXlzIHBhcnNlZCBwYXR0ZXJuIGJ5IHBhdHRlcm4gdW50aWwgdGhlIGZpcnN0CittYXRjaCBvY2N1cnMuCisKKworU2VwYXJhdGUgZmlsZSBuYW1lCQkJKmVycm9yZm9ybWF0LXNlcGFyYXRlLWZpbGVuYW1lKgorCitUaGVzZSBwcmVmaXhlcyBhcmUgdXNlZnVsIGlmIHRoZSBmaWxlIG5hbWUgaXMgZ2l2ZW4gb25jZSBhbmQgbXVsdGlwbGUgbWVzc2FnZXMKK2ZvbGxvdyB0aGF0IHJlZmVyIHRvIHRoaXMgZmlsZSBuYW1lLgorCSVPCQlzaW5nbGUtbGluZSBmaWxlIG1lc3NhZ2U6IG92ZXJyZWFkIHRoZSBtYXRjaGVkIHBhcnQKKwklUAkJc2luZ2xlLWxpbmUgZmlsZSBtZXNzYWdlOiBwdXNoIGZpbGUgJWYgb250byB0aGUgc3RhY2sKKwklUQkJc2luZ2xlLWxpbmUgZmlsZSBtZXNzYWdlOiBwb3AgdGhlIGxhc3QgZmlsZSBmcm9tIHN0YWNrCisKK0V4YW1wbGU6IEdpdmVuIGEgY29tcGlsZXIgdGhhdCBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIGVycm9yIGxvZ2ZpbGUgKHdpdGhvdXQKK2xlYWRpbmcgbGluZSBudW1iZXJzKToKKworICAgICAxCVthMS50dF0KKyAgICAgMgkoMSwxNykgIGVycm9yOiAnOycgbWlzc2luZworICAgICAzCSgyMSwyKSAgd2FybmluZzogdmFyaWFibGUgJ3onIG5vdCBkZWZpbmVkCisgICAgIDQJKDY3LDMpICBlcnJvcjogZW5kIG9mIGZpbGUgZm91bmQgYmVmb3JlIHN0cmluZyBlbmRlZAorICAgICA1CisgICAgIDYJW2EyLnR0XQorICAgICA3CisgICAgIDgJW2EzLnR0XQorICAgICA5CU5FVyBjb21waWxlciB2MS4xCisgICAgMTAJKDIsMikgICB3YXJuaW5nOiB2YXJpYWJsZSAneCcgbm90IGRlZmluZWQKKyAgICAxMQkoNjcsMykgIHdhcm5pbmc6ICdzJyBhbHJlYWR5IGRlZmluZWQKKworVGhpcyBsb2dmaWxlIGxpc3RzIHNldmVyYWwgbWVzc2FnZXMgZm9yIGVhY2ggZmlsZSBlbmNsb3NlZCBpbiBbLi4uXSB3aGljaCBhcmUKK3Byb3Blcmx5IHBhcnNlZCBieSBhbiBlcnJvciBmb3JtYXQgbGlrZSB0aGlzOiA+CisgIDpzZXQgZWZtPSUrUFslZl0sKCVsXFwsJWMpJSpbXCBdJXQlKlteOl06XCAlbSwlLVEKKworQSBjYWxsIG9mIHw6Y2xpc3R8IHdyaXRlcyB0aGVtIGFjY29yZGluZ2x5IHdpdGggdGhlaXIgY29ycmVjdCBmaWxlbmFtZXM6CisKKyAgMiBhMS50dDoxIGNvbCAxNyBlcnJvcjogJzsnIG1pc3NpbmcKKyAgMyBhMS50dDoyMSBjb2wgMiB3YXJuaW5nOiB2YXJpYWJsZSAneicgbm90IGRlZmluZWQKKyAgNCBhMS50dDo2NyBjb2wgMyBlcnJvcjogZW5kIG9mIGZpbGUgZm91bmQgYmVmb3JlIHN0cmluZyBlbmRlZAorICA4IGEzLnR0OjIgY29sIDIgd2FybmluZzogdmFyaWFibGUgJ3gnIG5vdCBkZWZpbmVkCisgIDkgYTMudHQ6NjcgY29sIDMgd2FybmluZzogJ3MnIGFscmVhZHkgZGVmaW5lZAorCitVbmxpa2UgdGhlIG90aGVyIHByZWZpeGVzIHRoYXQgYWxsIG1hdGNoIGFnYWluc3Qgd2hvbGUgbGluZXMsICVQLCAlUSBhbmQgJU8KK2NhbiBiZSB1c2VkIHRvIG1hdGNoIHNldmVyYWwgcGF0dGVybnMgaW4gdGhlIHNhbWUgbGluZS4gVGh1cyBpdCBpcyBwb3NzaWJsZQordG8gcGFyc2UgZXZlbiBuZXN0ZWQgZmlsZXMgbGlrZSBpbiB0aGUgZm9sbG93aW5nIGxpbmU6CisgIHsiZmlsZTEiIHsiZmlsZTIiIGVycm9yMX0gZXJyb3IyIHsiZmlsZTMiIGVycm9yMyB7ImZpbGU0IiBlcnJvcjQgZXJyb3I1fX19CitUaGUgJU8gdGhlbiBwYXJzZXMgb3ZlciBzdHJpbmdzIHRoYXQgZG8gbm90IGNvbnRhaW4gYW55IHB1c2gvcG9wIGZpbGUgbmFtZQoraW5mb3JtYXRpb24uICBTZWUgfGVycm9yZm9ybWF0LUxhVGVYfCBmb3IgYW4gZXh0ZW5kZWQgZXhhbXBsZS4KKworCitJZ25vcmluZyBhbmQgdXNpbmcgd2hvbGUgbWVzc2FnZXMJCQkqZWZtLWlnbm9yZSoKKworVGhlIGNvZGVzICcrJyBvciAnLScgY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIHVwcGVyY2FzZSBjb2RlcyBhYm92ZTsgaW4gdGhhdAorY2FzZSB0aGV5IGhhdmUgdG8gcHJlY2VkZSB0aGUgbGV0dGVyLCBlZy4gJyUrQScgb3IgJyUtRyc6CisJJS0JCWRvIG5vdCBpbmNsdWRlIHRoZSBtYXRjaGluZyBtdWx0aS1saW5lIGluIGFueSBvdXRwdXQKKwklKwkJaW5jbHVkZSB0aGUgd2hvbGUgbWF0Y2hpbmcgbGluZSBpbiB0aGUgJW0gZXJyb3Igc3RyaW5nCisKK09uZSBwcmVmaXggaXMgb25seSB1c2VmdWwgaW4gY29tYmluYXRpb24gd2l0aCAnKycgb3IgJy0nLCBuYW1lbHkgJUcuIEl0IHBhcnNlcworb3ZlciBsaW5lcyBjb250YWluaW5nIGdlbmVyYWwgaW5mb3JtYXRpb24gbGlrZSBjb21waWxlciB2ZXJzaW9uIHN0cmluZ3Mgb3IKK290aGVyIGhlYWRlcnMgdGhhdCBjYW4gYmUgc2tpcHBlZC4KKwklLUcJCWlnbm9yZSB0aGlzIG1lc3NhZ2UKKwklK0cJCWdlbmVyYWwgbWVzc2FnZQorCisKK1BhdHRlcm4gbWF0Y2hpbmcKKworVGhlIHNjYW5mKCktbGlrZSAiJSpbXSIgbm90YXRpb24gaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5Cit3aXRoIHByZXZpb3VzIHZlcnNpb25zIG9mIFZpbS4gIEhvd2V2ZXIsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeQorKG5lYXJseSkgYW55IFZpbSBzdXBwb3J0ZWQgcmVndWxhciBleHByZXNzaW9uIGluIGZvcm1hdCBzdHJpbmdzLgorU2luY2UgbWV0YSBjaGFyYWN0ZXJzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbGFuZ3VhZ2UgY2FuIGJlIHBhcnQgb2YKK29yZGluYXJ5IG1hdGNoaW5nIHN0cmluZ3Mgb3IgZmlsZSBuYW1lcyAoYW5kIHRoZXJlZm9yZSBpbnRlcm5hbGx5IGhhdmUgdG8KK2JlIGVzY2FwZWQpLCBtZXRhIHN5bWJvbHMgaGF2ZSB0byBiZSB3cml0dGVuIHdpdGggbGVhZGluZyAnJSc6CisJJVwJCXRoZSBzaW5nbGUgJ1wnIGNoYXJhY3Rlci4gTm90ZSB0aGF0IHRoaXMgaGFzIHRvIGJlCisJCQllc2NhcGVkICgiJVxcIikgaW4gIjpzZXQgZXJyb3Jmb3JtYXQ9IiBkZWZpbml0aW9ucy4KKwklLgkJdGhlIHNpbmdsZSAnLicgY2hhcmFjdGVyLgorCSUjCQl0aGUgc2luZ2xlICcqJyghKSBjaGFyYWN0ZXIuCisJJV4JCXRoZSBzaW5nbGUgJ14nIGNoYXJhY3Rlci4KKwklJAkJdGhlIHNpbmdsZSAnJCcgY2hhcmFjdGVyLgorCSVbCQl0aGUgc2luZ2xlICdbJyBjaGFyYWN0ZXIgZm9yIGEgW10gY2hhcmFjdGVyIHJhbmdlLgorCSV+CQl0aGUgc2luZ2xlICd+JyBjaGFyYWN0ZXIuCitXaGVuIHVzaW5nIGNoYXJhY3RlciBjbGFzc2VzIGluIGV4cHJlc3Npb25zIChzZWUgfC9caXwgZm9yIGFuIG92ZXJ2aWV3KSwKK3Rlcm1zIGNvbnRhaW5pbmcgdGhlICJcKyIgcXVhbnRpZmllciBjYW4gYmUgd3JpdHRlbiBpbiB0aGUgc2NhbmYoKSAiJSoiCitub3RhdGlvbi4gRXhhbXBsZTogIiVcXGQlXFwrIiAoIlxkXCsiLCAiYW55IG51bWJlciIpIGlzIGVxdWl2YWxlbnQgdG8gIiUqXFxkIi4KK0ltcG9ydGFudCBub3RlOiBUaGUgXCguLi5cKSBncm91cGluZyBvZiBzdWItbWF0Y2hlcyBjYW4gbm90IGJlIHVzZWQgaW4gZm9ybWF0CitzcGVjaWZpY2F0aW9ucyBiZWNhdXNlIGl0IGlzIHJlc2VydmVkIGZvciBpbnRlcm5hbCBjb252ZXJzaW9ucy4KKworCitNdWx0aXBsZSBlbnRyaWVzIGluICdlcnJvcmZvcm1hdCcJCQkqZWZtLWVudHJpZXMqCisKK1RvIGJlIGFibGUgdG8gZGV0ZWN0IG91dHB1dCBmcm9tIHNldmVyYWwgY29tcGlsZXJzLCBzZXZlcmFsIGZvcm1hdCBwYXR0ZXJucworbWF5IGJlIHB1dCBpbiAnZXJyb3Jmb3JtYXQnLCBzZXBhcmF0ZWQgYnkgY29tbWFzIChub3RlOiBibGFua3MgYWZ0ZXIgdGhlIGNvbW1hCithcmUgaWdub3JlZCkuICBUaGUgZmlyc3QgcGF0dGVybiB0aGF0IGhhcyBhIGNvbXBsZXRlIG1hdGNoIGlzIHVzZWQuICBJZiBubworbWF0Y2ggaXMgZm91bmQsIG1hdGNoaW5nIHBhcnRzIGZyb20gdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCwgYWx0aG91Z2ggdGhlCitmaWxlIG5hbWUgaXMgcmVtb3ZlZCBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgaXMgc2V0IHRvIHRoZSB3aG9sZSBtZXNzYWdlLiAgSWYKK3RoZXJlIGlzIGEgcGF0dGVybiB0aGF0IG1heSBtYXRjaCBvdXRwdXQgZnJvbSBzZXZlcmFsIGNvbXBpbGVycyAoYnV0IG5vdCBpbiBhCityaWdodCB3YXkpLCBwdXQgaXQgYWZ0ZXIgb25lIHRoYXQgaXMgbW9yZSByZXN0cmljdGl2ZS4KKworVG8gaW5jbHVkZSBhIGNvbW1hIGluIGEgcGF0dGVybiBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2ggKHlvdSBoYXZlIHRvIHR5cGUKK3R3byBpbiBhICI6c2V0IiBjb21tYW5kKS4gIFRvIGluY2x1ZGUgYSBiYWNrc2xhc2ggaXRzZWxmIGdpdmUgdHdvIGJhY2tzbGFzaGVzCisoeW91IGhhdmUgdG8gdHlwZSBmb3VyIGluIGEgIjpzZXQiIGNvbW1hbmQpLiAgWW91IGFsc28gbmVlZCB0byBwdXQgYSBiYWNrc2xhc2gKK2JlZm9yZSBhIHNwYWNlIGZvciAiOnNldCIuCisKKworVmFsaWQgbWF0Y2hlcwkJCQkJCSpxdWlja2ZpeC12YWxpZCoKKworSWYgYSBsaW5lIGRvZXMgbm90IGNvbXBsZXRlbHkgbWF0Y2ggb25lIG9mIHRoZSBlbnRyaWVzIGluICdlcnJvcmZvcm1hdCcsIHRoZQord2hvbGUgbGluZSBpcyBwdXQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgYW5kIHRoZSBlbnRyeSBpcyBtYXJrZWQgIm5vdCB2YWxpZCIKK1RoZXNlIGxpbmVzIGFyZSBza2lwcGVkIHdpdGggdGhlICI6Y24iIGFuZCAiOmNwIiBjb21tYW5kcyAodW5sZXNzIHRoZXJlIGlzCitubyB2YWxpZCBsaW5lIGF0IGFsbCkuICBZb3UgY2FuIHVzZSAiOmNsISIgdG8gZGlzcGxheSBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzLgorCitJZiB0aGUgZXJyb3IgZm9ybWF0IGRvZXMgbm90IGNvbnRhaW4gYSBmaWxlIG5hbWUgVmltIGNhbm5vdCBzd2l0Y2ggdG8gdGhlCitjb3JyZWN0IGZpbGUuICBZb3Ugd2lsbCBoYXZlIHRvIGRvIHRoaXMgYnkgaGFuZC4KKworCitFeGFtcGxlcworCitUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIGZyb20gdGhlIEFtaWdhIEF6dGVjIGNvbXBpbGVyIGlzOgorCisJZmlsZW5hbWU+bGluZW51bWJlcjpjb2x1bW5udW1iZXI6ZXJyb3J0eXBlOmVycm9ybnVtYmVyOmVycm9ybWVzc2FnZQorCisJZmlsZW5hbWUJbmFtZSBvZiB0aGUgZmlsZSBpbiB3aGljaCB0aGUgZXJyb3Igd2FzIGRldGVjdGVkCisJbGluZW51bWJlcglsaW5lIG51bWJlciB3aGVyZSB0aGUgZXJyb3Igd2FzIGRldGVjdGVkCisJY29sdW1ubnVtYmVyCWNvbHVtbiBudW1iZXIgd2hlcmUgdGhlIGVycm9yIHdhcyBkZXRlY3RlZAorCWVycm9ydHlwZQl0eXBlIG9mIHRoZSBlcnJvciwgbm9ybWFsbHkgYSBzaW5nbGUgJ0UnIG9yICdXJworCWVycm9ybnVtYmVyCW51bWJlciBvZiB0aGUgZXJyb3IgKGZvciBsb29rdXAgaW4gdGhlIG1hbnVhbCkKKwllcnJvcm1lc3NhZ2UJZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yCisKK1RoaXMgY2FuIGJlIG1hdGNoZWQgd2l0aCB0aGlzICdlcnJvcmZvcm1hdCcgZW50cnk6CisJJWY+JWw6JWM6JXQ6JW46JW0KKworU29tZSBleGFtcGxlcyBmb3IgQyBjb21waWxlcnMgdGhhdCBwcm9kdWNlIHNpbmdsZS1saW5lIGVycm9yIG91dHB1dHM6CislZjolbDpcICV0JSpbXjAxMjM0NTY3ODldJW46XCAlbQlmb3IgTWFueC9BenRlYyBDIGVycm9yIG1lc3NhZ2VzCisJCQkJCShzY2FuZigpIGRvZXNuJ3QgdW5kZXJzdGFuZCBbMC05XSkKKyVmXCAlbFwgJXQlKlteMC05XSVuOlwgJW0JCWZvciBTQVMgQworXCIlZlwiXFwsJSpbXjAtOV0lbDpcICVtCQlmb3IgZ2VuZXJpYyBDIGNvbXBpbGVycworJWY6JWw6XCAlbQkJCQlmb3IgR0NDCislZjolbDpcICVtLCVEZ21ha2VbJSpcXGRdOlwgRW50ZXJpbmdcIGRpcmVjdG9yeVwgYCVmJywKKyVEZ21ha2VbJSpcXGRdOlwgTGVhdmluZ1wgZGlyZWN0b3J5XCBgJWYnCisJCQkJCWZvciBHQ0Mgd2l0aCBnbWFrZSAoY29uY2F0IHRoZSBsaW5lcyEpCislZiglbClcIDpcICUqW146XTpcICVtCQkJb2xkIFNDTyBDIGNvbXBpbGVyIChwcmUtT1M1KQorJWYoJWwpXCA6XCAldCUqW14wLTldJW46XCAlbQkJaWRlbSwgd2l0aCBlcnJvciB0eXBlIGFuZCBudW1iZXIKKyVmOiVsOlwgJW0sSW5cIGZpbGVcIGluY2x1ZGVkXCBmcm9tXCAlZjolbDosXF5JXF5JZnJvbVwgJWY6JWwlbQorCQkJCQlmb3IgR0NDLCB3aXRoIHNvbWUgZXh0cmFzCisKK0V4dGVuZGVkIGV4YW1wbGVzIGZvciB0aGUgaGFuZGxpbmcgb2YgbXVsdGktbGluZSBtZXNzYWdlcyBhcmUgZ2l2ZW4gYmVsb3csCitzZWUgfGVycm9yZm9ybWF0LUppa2VzfCBhbmQgfGVycm9yZm9ybWF0LUxhVGVYfC4KKworTm90ZSB0aGUgYmFja3NsYXNoIGluIGZyb250IG9mIGEgc3BhY2UgYW5kIGRvdWJsZSBxdW90ZS4gIEl0IGlzIHJlcXVpcmVkIGZvcgordGhlIDpzZXQgY29tbWFuZC4gIFRoZXJlIGFyZSB0d28gYmFja3NsYXNoZXMgaW4gZnJvbnQgb2YgYSBjb21tYSwgb25lIGZvciB0aGUKKzpzZXQgY29tbWFuZCBhbmQgb25lIHRvIGF2b2lkIHJlY29nbml6aW5nIHRoZSBjb21tYSBhcyBhIHNlcGFyYXRvciBvZiBlcnJvcgorZm9ybWF0cy4KKworCitGaWx0ZXJpbmcgbWVzc2FnZXMKKworSWYgeW91IGhhdmUgYSBjb21waWxlciB0aGF0IHByb2R1Y2VzIGVycm9yIG1lc3NhZ2VzIHRoYXQgZG8gbm90IGZpdCBpbiB0aGUKK2Zvcm1hdCBzdHJpbmcsIHlvdSBjb3VsZCB3cml0ZSBhIHByb2dyYW0gdGhhdCB0cmFuc2xhdGVzIHRoZSBlcnJvciBtZXNzYWdlcworaW50byB0aGlzIGZvcm1hdC4gIFlvdSBjYW4gdXNlIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSAiOm1ha2UiIGNvbW1hbmQgYnkKK2NoYW5naW5nIHRoZSAnbWFrZXByZycgb3B0aW9uLiAgRm9yIGV4YW1wbGU6ID4KKyAgIDpzZXQgbXA9bWFrZVwgXFxcfCZcIGVycm9yX2ZpbHRlcgorVGhlIGJhY2tzbGFzaGVzIGJlZm9yZSB0aGUgcGlwZSBjaGFyYWN0ZXIgYXJlIHJlcXVpcmVkIHRvIGF2b2lkIGl0IHRvIGJlCityZWNvZ25pemVkIGFzIGEgY29tbWFuZCBzZXBhcmF0b3IuICBUaGUgYmFja3NsYXNoIGJlZm9yZSBlYWNoIHNwYWNlIGlzCityZXF1aXJlZCBmb3IgdGhlIHNldCBjb21tYW5kLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gVGhlIGRpcmVjdG9yeSBzdGFjawkJCQkqcXVpY2tmaXgtZGlyZWN0b3J5LXN0YWNrKgorCitRdWlja2ZpeCBtYWludGFpbnMgYSBzdGFjayBmb3Igc2F2aW5nIGFsbCB1c2VkIGRpcmVjdG9yaWVzIHBhcnNlZCBmcm9tIHRoZQorbWFrZSBvdXRwdXQuIEZvciBHTlUtbWFrZSB0aGlzIGlzIHJhdGhlciBzaW1wbGUsIGFzIGl0IGFsd2F5cyBwcmludHMgdGhlCithYnNvbHV0ZSBwYXRoIG9mIGFsbCBkaXJlY3RvcmllcyBpdCBlbnRlcnMgYW5kIGxlYXZlcy4gUmVnYXJkbGVzcyBpZiB0aGlzIGlzCitkb25lIHZpYSBhICdjZCcgY29tbWFuZCBpbiB0aGUgbWFrZWZpbGUgb3Igd2l0aCB0aGUgcGFyYW1ldGVyICItQyBkaXIiIChjaGFuZ2UKK3RvIGRpcmVjdG9yeSBiZWZvcmUgcmVhZGluZyB0aGUgbWFrZWZpbGUpLiBJdCBtYXkgYmUgdXNlZnVsIHRvIHVzZSB0aGUgc3dpdGNoCisiLXciIHRvIGZvcmNlIEdOVS1tYWtlIHRvIHByaW50IG91dCB0aGUgd29ya2luZyBkaXJlY3RvcnkgYmVmb3JlIGFuZCBhZnRlcgorcHJvY2Vzc2luZy4KKworTWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgZGlyZWN0b3J5IGlzIG1vcmUgY29tcGxpY2F0ZWQgaWYgeW91IGRvbid0IHVzZQorR05VLW1ha2UuIEFJWC1tYWtlIGZvciBleGFtcGxlIGRvZXNuJ3QgcHJpbnQgYW55IGluZm9ybWF0aW9uIGFib3V0IGl0cyB3b3JraW5nCitkaXJlY3RvcnkuIFRoZW4geW91IG5lZWQgdG8gZW5oYW5jZSB0aGUgbWFrZWZpbGUuIEluIHRoZSBtYWtlZmlsZSBvZiBsZXNzdGlmZgordGhlcmUgaXMgYSBjb21tYW5kIHdoaWNoIGVjaG9lcyAiTWFraW5nIHt0YXJnZXR9IGluIHtkaXJ9Ii4gVGhlIHNwZWNpYWwKK3Byb2JsZW0gaGVyZSBpcyB0aGF0IGl0IGRvZXNuJ3QgcHJpbnQgaW5mb3JtYXRpb25zIG9uIGxlYXZpbmcgdGhlIGRpcmVjdG9yeQorYW5kIHRoYXQgaXQgZG9lc24ndCBwcmludCB0aGUgYWJzb2x1dGUgcGF0aC4KKworVG8gc29sdmUgdGhlIHByb2JsZW0gd2l0aCByZWxhdGl2ZSBwYXRocyBhbmQgbWlzc2luZyAibGVhdmUgZGlyZWN0b3J5IgorbWVzc2FnZXMgVmltIHVzZXMgZm9sbG93aW5nIGFsZ29yaXRobToKKworMSkgQ2hlY2sgaWYgdGhlIGdpdmVuIGRpcmVjdG9yeSBpcyBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICBJZiB0aGlzIGlzIHRydWUsIHN0b3JlIGl0IGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKzIpIElmIGl0IGlzIG5vdCBhIHN1YmRpciBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRyeSBpZiB0aGlzIGlzIGEKKyAgIHN1YmRpcmVjdG9yeSBvZiBvbmUgb2YgdGhlIHVwcGVyIGRpcmVjdG9yaWVzLgorMykgSWYgdGhlIGRpcmVjdG9yeSBzdGlsbCBpc24ndCBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIHN1YmRpcmVjdG9yeQorICAgb2YgVmltJ3MgY3VycmVudCBkaXJlY3RvcnkuCisKK0FkZGl0aW9uYWxseSBpdCBpcyBjaGVja2VkIGZvciBldmVyeSBmaWxlLCBpZiBpdCByZWFsbHkgZXhpc3RzIGluIHRoZQoraWRlbnRpZmllZCBkaXJlY3RvcnkuICBJZiBub3QsIGl0IGlzIHNlYXJjaGVkIGluIGFsbCBvdGhlciBkaXJlY3RvcmllcyBvZiB0aGUKK2RpcmVjdG9yeSBzdGFjayAoTk9UIHRoZSBkaXJlY3Rvcnkgc3VidHJlZSEpLiBJZiBpdCBpcyBzdGlsbCBub3QgZm91bmQsIGl0IGlzCithc3N1bWVkIHRoYXQgaXQgaXMgaW4gVmltJ3MgY3VycmVudCBkaXJlY3RvcnkuCisKK1RoZXJlIGFyZSBsaW1pdGF0aW9uIGluIHRoaXMgYWxnb3JpdGhtLiBUaGlzIGV4YW1wbGVzIGFzc3VtZSB0aGF0IG1ha2UganVzdAorcHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IGVudGVyaW5nIGEgZGlyZWN0b3J5IGluIHRoZSBmb3JtICJNYWtpbmcgYWxsIGluIGRpciIuCisKKzEpIEFzc3VtZSB5b3UgaGF2ZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgYW5kIGZpbGVzOgorICAgLi9kaXIxCisgICAuL2RpcjEvZmlsZTEuYworICAgLi9maWxlMS5jCisKKyAgIElmIG1ha2UgcHJvY2Vzc2VzIHRoZSBkaXJlY3RvcnkgIi4vZGlyMSIgYmVmb3JlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQKKyAgIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBmaWxlICIuL2ZpbGUxLmMiLCB5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgZmlsZQorICAgIi4vZGlyMS9maWxlLmMiIGxvYWRlZCBieSBWaW0uCisKKyAgIFRoaXMgY2FuIG9ubHkgYmUgc29sdmVkIHdpdGggYSAibGVhdmUgZGlyZWN0b3J5IiBtZXNzYWdlLgorCisyKSBBc3N1bWUgeW91IGhhdmUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIGFuZCBmaWxlczoKKyAgIC4vZGlyMQorICAgLi9kaXIxL2RpcjIKKyAgIC4vZGlyMgorCisgICBZb3UgZ2V0IHRoZSBmb2xsb3dpbmc6CisKKyAgIE1ha2Ugb3V0cHV0CQkJICBEaXJlY3RvcnkgaW50ZXJwcmV0ZWQgYnkgVmltCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNYWtpbmcgYWxsIGluIGRpcjEJCSAgLi9kaXIxCisgICBNYWtpbmcgYWxsIGluIGRpcjIJCSAgLi9kaXIxL2RpcjIKKyAgIE1ha2luZyBhbGwgaW4gZGlyMgkJICAuL2RpcjEvZGlyMgorCisgICBUaGlzIGNhbiBiZSBzb2x2ZWQgYnkgcHJpbnRpbmcgYWJzb2x1dGUgZGlyZWN0b3JpZXMgaW4gdGhlICJlbnRlciBkaXJlY3RvcnkiCisgICBtZXNzYWdlIG9yIGJ5IHByaW50aW5nICJsZWF2ZSBkaXJlY3RvcnkiIG1lc3NhZ2VzLi4KKworVG8gYXZvaWQgdGhpcyBwcm9ibGVtcywgZW5zdXJlIHRvIHByaW50IGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcyBhbmQgImxlYXZlCitkaXJlY3RvcnkiIG1lc3NhZ2VzLgorCitFeGFtcGxlcyBmb3IgTWFrZWZpbGVzOgorCitVbml4OgorICAgIGxpYnM6CisJICAgIGZvciBkbiBpbiAkKExJQkRJUlMpOyBkbwkJCQlcCisJCShjZCAkJGRuOyBlY2hvICJFbnRlcmluZyBkaXIgJyQkKHB3ZCknIjsgbWFrZSk7IFwKKwkJZWNobyAiTGVhdmluZyBkaXIiOwkJCQlcCisJICAgIGRvbmUKKworQWRkCisgICAgJURFbnRlcmluZ1wgZGlyXCAnJWYnLCVYTGVhdmluZ1wgZGlyCit0byB5b3VyICdlcnJvcmZvcm1hdCcgdG8gaGFuZGxlIHRoZSBhYm92ZSBvdXRwdXQuCisKK05vdGUgdGhhdCBWaW0gZG9lc24ndCBjaGVjayBpZiB0aGUgZGlyZWN0b3J5IG5hbWUgaW4gYSAibGVhdmUgZGlyZWN0b3J5IgorbWVzc2FnZXMgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBUaGlzIGlzIHdoeSB5b3UgY291bGQganVzdCB1c2UgdGhlIG1lc3NhZ2UKKyJMZWF2aW5nIGRpciIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBTcGVjaWZpYyBlcnJvciBmaWxlIGZvcm1hdHMJCQkqZXJyb3Jmb3JtYXRzKgorCisJCQkJCQkqZXJyb3Jmb3JtYXQtSmlrZXMqCitKaWtlcyhUTSksIGEgc291cmNlLXRvLWJ5dGVjb2RlIEphdmEgY29tcGlsZXIgcHVibGlzaGVkIGJ5IElCTSBSZXNlYXJjaCwKK3Byb2R1Y2VzIHNpbXBsZSBtdWx0aS1saW5lIGVycm9yIG1lc3NhZ2VzLgorCitBbiAnZXJyb3Jmb3JtYXQnIHN0cmluZyBtYXRjaGluZyB0aGUgcHJvZHVjZWQgbWVzc2FnZXMgaXMgc2hvd24gYmVsb3cuCitUaGUgZm9sbG93aW5nIGxpbmVzIGNhbiBiZSBwbGFjZWQgaW4gdGhlIHVzZXIncyB8dmltcmN8IHRvIG92ZXJ3cml0ZSBWaW0ncworcmVjb2duaXplZCBkZWZhdWx0IGZvcm1hdHMsIG9yIHNlZSB8OnNldCs9fCBob3cgdG8gaW5zdGFsbCB0aGlzIGZvcm1hdAorYWRkaXRpb25hbGx5IHRvIHRoZSBkZWZhdWx0LiA+CisKKyAgOnNldCBlZm09JUElZjolbDolYzolKlxcZDolKlxcZDosCisJXCVDJSpcXHMldHJyb3I6JW0sCisJXCUrQyUqW146XSV0cnJvcjolbSwKKwlcJUMlKlxccyV0YXJuaW5nOiVtLAorCVwlQyVtCis8CitKaWtlcyhUTSkgcHJvZHVjZXMgYSBzaW5nbGUtbGluZSBlcnJvciBtZXNzYWdlIHdoZW4gaW52b2tlZCB3aXRoIHRoZSBvcHRpb24KKyIrRSIsIGFuZCBjYW4gYmUgbWF0Y2hlZCB3aXRoIHRoZSBmb2xsb3dpbmc6ID4KKworICA6c2V0IGVmbT0lZjolbDoldjolKlxcZDolKlxcZDolKlxccyVtCis8CisJCQkJCQkqZXJyb3Jmb3JtYXQtamF2YWMqCitUaGlzICdlcnJvcmZvcm1hdCcgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gd29yayB3ZWxsIGZvciBqYXZhYywgd2hpY2ggb3V0cHV0cyBhCitsaW5lIHdpdGggIl4iIHRvIGluZGljYXRlIHRoZSBjb2x1bW4gb2YgdGhlIGVycm9yOiA+CisgIDpzZXQgZWZtPSVBJWY6JWw6XCAlbSwlLVolcF4sJS1DJS4lIworb3I6ID4KKyAgOnNldCBlZm09JUElZjolbDpcICVtLCUrWiVwXiwlK0MlLiUjLCUtRyUuJSMKKzwKKwkJCQkJCSplcnJvcmZvcm1hdC1hbnQqCitGb3IgYW50IChodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnLykgdGhlIGFib3ZlIGVycm9yZm9ybWF0IGhhcyB0byBiZSBtb2RpZmllZAordG8gaG9ub3VyIHRoZSBsZWFkaW5nIFtqYXZhY10gaW4gZnJvbnQgb2YgZWFjaCBqYXZhYyBvdXRwdXQgbGluZTogPgorICA6c2V0IGVmbT0lQVwgJSNbamF2YWNdXCAlZjolbDpcICVtLCUtWlwgJSNbamF2YWNdXCAlcF4sJS1DJS4lIworCitUaGUgJ2Vycm9yZm9ybWF0JyBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvIGhhbmRsZSBhbnQgdG9nZXRoZXIgd2l0aCBlaXRoZXIKK2phdmFjIG9yIGppa2VzLiAgSWYgeW91J3JlIHVzaW5nIGppa2VzLCB5b3Ugc2hvdWxkIHRlbGwgYW50IHRvIHVzZSBqaWtlcycgK0UKK2NvbW1hbmQgbGluZSBzd2l0Y2ggd2hpY2ggZm9yY2VzIGppa2VzIHRvIGdlbmVyYXRlIG9uZS1saW5lIGVycm9yIG1lc3NhZ2VzLgorVGhpcyBpcyB3aGF0IHRoZSBzZWNvbmQgbGluZSAob2YgYSBidWlsZC54bWwgZmlsZSkgYmVsb3cgZG9lczogPgorICA8cHJvcGVydHkgbmFtZSA9ICJidWlsZC5jb21waWxlciIgICAgICAgdmFsdWUgPSAiamlrZXMiLz4KKyAgPHByb3BlcnR5IG5hbWUgPSAiYnVpbGQuY29tcGlsZXIuZW1hY3MiIHZhbHVlID0gInRydWUiLz4KKworVGhlICdlcnJvcmZvcm1hdCcgd2hpY2ggaGFuZGxlcyBhbnQgd2l0aCBib3RoIGphdmFjIGFuZCBqaWtlcyBpczogPgorICA6c2V0IGVmbT1cICUjW2phdmFjXVwgJSMlZjolbDolYzolKlxcZDolKlxcZDpcICV0JVslXjpdJSM6JW0sCisJICAgXCVBXCAlI1tqYXZhY11cICVmOiVsOlwgJW0sJS1aXCAlI1tqYXZhY11cICVwXiwlLUMlLiUjCis8CisJCQkJCQkqZXJyb3Jmb3JtYXQtamFkZSoKK3BhcnNpbmcgamFkZSAoc2VlIGh0dHA6Ly93d3cuamNsYXJrLmNvbS8pIGVycm9ycyBpcyBzaW1wbGU6ID4KKyAgOnNldCBlZm09amFkZTolZjolbDolYzoldDolbQorPAorCQkJCQkJKmVycm9yZm9ybWF0LUxhVGVYKgorVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGhvdyBhbiAnZXJyb3Jmb3JtYXQnIHN0cmluZyBjYW4gYmUgc3BlY2lmaWVkCitmb3IgdGhlIChMYSlUZVggdHlwZXNldHRpbmcgc3lzdGVtIHdoaWNoIGRpc3BsYXlzIGVycm9yIG1lc3NhZ2VzIG92ZXIKK211bHRpcGxlIGxpbmVzLiAgVGhlIG91dHB1dCBvZiAiOmNsaXN0IiBhbmQgIjpjYyIgZXRjLiBjb21tYW5kcyBkaXNwbGF5cworbXVsdGktbGluZXMgaW4gYSBzaW5nbGUgbGluZSwgbGVhZGluZyB3aGl0ZSBzcGFjZSBpcyByZW1vdmVkLgorSXQgc2hvdWxkIGJlIGVhc3kgdG8gYWRvcHQgdGhlIGFib3ZlIExhVGVYIGVycm9yZm9ybWF0IHRvIGFueSBjb21waWxlciBvdXRwdXQKK2NvbnNpc3Rpbmcgb2YgbXVsdGktbGluZSBlcnJvcnMuCisKK1RoZSBjb21tYW5kcyBjYW4gYmUgcGxhY2VkIGluIGEgfHZpbXJjfCBmaWxlIG9yIHNvbWUgb3RoZXIgVmltIHNjcmlwdCBmaWxlLAorZWcuIGEgc2NyaXB0IGNvbnRhaW5pbmcgTGFUZVggcmVsYXRlZCBzdHVmZiB3aGljaCBpcyBsb2FkZWQgb25seSB3aGVuIGVkaXRpbmcKK0xhVGVYIHNvdXJjZXMuCitNYWtlIHN1cmUgdG8gY29weSBhbGwgbGluZXMgb2YgdGhlIGV4YW1wbGUgKGluIHRoZSBnaXZlbiBvcmRlciksIGFmdGVyd2FyZHMKK3JlbW92ZSB0aGUgY29tbWVudCBsaW5lcy4gIEZvciB0aGUgJ1wnIG5vdGF0aW9uIGF0IHRoZSBzdGFydCBvZiBzb21lIGxpbmVzIHNlZQorfGxpbmUtY29udGludWF0aW9ufC4KKworCQlGaXJzdCBwcmVwYXJlICdtYWtlcHJnJyBzdWNoIHRoYXQgTGFUZVggd2lsbCByZXBvcnQgbXVsdGlwbGUKKwkJZXJyb3JzOyBkbyBub3Qgc3RvcCB3aGVuIHRoZSBmaXJzdCBlcnJvciBoYXMgb2NjdXJyZWQ6ID4KKyA6c2V0IG1ha2Vwcmc9bGF0ZXhcIFxcXFxub25zdG9wbW9kZVwgXFxcXGlucHV0XFx7JCp9Cis8CisJCVN0YXJ0IG9mIG11bHRpLWxpbmUgZXJyb3IgbWVzc2FnZXM6ID4KKyA6c2V0IGVmbT0lRSFcIExhVGVYXCAldHJyb3I6XCAlbSwKKwlcJUUhXCAlbSwKKzwJCVN0YXJ0IG9mIG11bHRpLWxpbmUgd2FybmluZyBtZXNzYWdlczsgdGhlIGZpcnN0IHR3byBhbHNvCisJCWluY2x1ZGUgdGhlIGxpbmUgbnVtYmVyLiBNZWFuaW5nIG9mIHNvbWUgcmVndWxhciBleHByZXNzaW9uczoKKwkJICAtICIlLiUjIiAgKCIuKiIpICAgbWF0Y2hlcyBhIChwb3NzaWJseSBlbXB0eSkgc3RyaW5nCisJCSAgLSAiJSpcXGQiICgiXGRcKyIpIG1hdGNoZXMgYSBudW1iZXIgPgorCVwlK1dMYVRlWFwgJS4lI1dhcm5pbmc6XCAlLiUjbGluZVwgJWwlLiUjLAorCVwlK1clLiUjXCBhdFwgbGluZXNcICVsLS0lKlxcZCwKKwlcJVdMYVRlWFwgJS4lI1dhcm5pbmc6XCAlbSwKKzwJCVBvc3NpYmxlIGNvbnRpbnVhdGlvbnMgb2YgZXJyb3Ivd2FybmluZyBtZXNzYWdlczsgdGhlIGZpcnN0CisJCW9uZSBhbHNvIGluY2x1ZGVzIHRoZSBsaW5lIG51bWJlcjogPgorCVwlQ2wuJWxcICVtLAorCVwlK0NcIFwgJW0uLAorCVwlK0MlLiUjLSUuJSMsCisJXCUrQyUuJSNbXSUuJSMsCisJXCUrQ1tdJS4lIywKKwlcJStDJS4lIyVbe31cXF0lLiUjLAorCVwlK0M8JS4lIz4lLiUjLAorCVwlQ1wgXCAlbSwKKzwJCUxpbmVzIHRoYXQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwYXR0ZXJucyBkbyBub3QgY29udGFpbiBhbnkKKwkJaW1wb3J0YW50IGluZm9ybWF0aW9uOyBkbyBub3QgaW5jbHVkZSB0aGVtIGluIG1lc3NhZ2VzOiA+CisJXCUtR1NlZVwgdGhlXCBMYVRlWCVtLAorCVwlLUdUeXBlXCBcIEhcIDxyZXR1cm4+JW0sCisJXCUtR1wgLi4uJS4lIywKKwlcJS1HJS4lI1wgKEMpXCAlLiUjLAorCVwlLUcoc2VlXCB0aGVcIHRyYW5zY3JpcHQlLiUjKSwKKzwJCUdlbmVyYWxseSBleGNsdWRlIGFueSBlbXB0eSBvciB3aGl0ZXNwYWNlLW9ubHkgbGluZSBmcm9tCisJCWJlaW5nIGRpc3BsYXllZDogPgorCVwlLUdcXHMlIywKKzwJCVRoZSBMYVRlWCBvdXRwdXQgbG9nIGRvZXMgbm90IHNwZWNpZnkgdGhlIG5hbWVzIG9mIGVycm9uZW91cworCQlzb3VyY2UgZmlsZXMgcGVyIGxpbmU7IHJhdGhlciB0aGV5IGFyZSBnaXZlbiBnbG9iYWxseSwKKwkJZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuCisJCVRoZSBmb2xsb3dpbmcgcGF0dGVybnMgdHJ5IHRvIG1hdGNoIHRoZXNlIG5hbWVzIGFuZCBzdG9yZQorCQl0aGVtIGluIGFuIGludGVybmFsIHN0YWNrLiAgVGhlIHBhdHRlcm5zIHBvc3NpYmx5IHNjYW4gb3ZlcgorCQl0aGUgc2FtZSBpbnB1dCBsaW5lIChvbmUgYWZ0ZXIgYW5vdGhlciksIHRoZSB0cmFpbGluZyAiJXIiCisJCWNvbnZlcnNpb24gaW5kaWNhdGVzIHRoZSAicmVzdCIgb2YgdGhlIGxpbmUgdGhhdCB3aWxsIGJlCisJCXBhcnNlZCBpbiB0aGUgbmV4dCBnbyB1bnRpbCB0aGUgZW5kIG9mIGxpbmUgaXMgcmVhY2hlZC4KKworCQlPdmVycmVhZCBhIGZpbGUgbmFtZSBlbmNsb3NlZCBpbiAnKCcuLi4nKSc7IGRvIG5vdCBwdXNoIGl0CisJCW9uIGEgc3RhY2sgc2luY2UgdGhlIGZpbGUgYXBwYXJlbnRseSBkb2VzIG5vdCBjb250YWluIGFueQorCQllcnJvcjogPgorCVwlK08oJWYpJXIsCis8CQlQdXNoIGEgZmlsZSBuYW1lIG9udG8gdGhlIHN0YWNrLiBUaGUgbmFtZSBpcyBnaXZlbiBhZnRlciAnKCc6ID4KKwlcJStQKCVmJXIsCisJXCUrUFwgJVxcPSglZiVyLAorCVwlK1AlKlteKCldKCVmJXIsCisJXCUrUFslXFxkJVteKCldJSMoJWYlciwKKzwJCVBvcCB0aGUgbGFzdCBzdG9yZWQgZmlsZSBuYW1lIHdoZW4gYSAnKScgaXMgc2Nhbm5lZDogPgorCVwlK1EpJXIsCisJXCUrUSUqW14oKV0pJXIsCisJXCUrUVslXFxkJSpbXigpXSklcgorCitOb3RlIHRoYXQgaW4gc29tZSBjYXNlcyBmaWxlIG5hbWVzIGluIHRoZSBMYVRlWCBvdXRwdXQgbG9nIGNhbm5vdCBiZSBwYXJzZWQKK3Byb3Blcmx5LiAgVGhlIHBhcnNlciBtaWdodCBoYXZlIGJlZW4gbWVzc2VkIHVwIGJ5IHVuYmFsYW5jZWQgcGFyZW50aGVzZXMKK3RoZW4uICBUaGUgYWJvdmUgZXhhbXBsZSB0cmllcyB0byBjYXRjaCB0aGUgbW9zdCByZWxldmFudCBjYXNlcyBvbmx5LgorWW91IGNhbiBjdXN0b21pemUgdGhlIGdpdmVuIHNldHRpbmcgdG8gc3VpdCB5b3VyIG93biBwdXJwb3NlcywgZm9yIGV4YW1wbGUsCithbGwgdGhlIGFubm95aW5nICJPdmVyZnVsbCAuLi4iIHdhcm5pbmdzIGNvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gYmVpbmcKK3JlY29nbml6ZWQgYXMgYW4gZXJyb3IuCitBbHRlcm5hdGl2ZWx5IHRvIGZpbHRlcmluZyB0aGUgTGFUZVggY29tcGlsZXIgb3V0cHV0LCBpdCBpcyBhbHNvIHBvc3NpYmxlCit0byBkaXJlY3RseSByZWFkIHRoZSAqLmxvZyBmaWxlIHRoYXQgaXMgcHJvZHVjZWQgYnkgdGhlIFtMYV1UZVggY29tcGlsZXIuCitUaGlzIGNvbnRhaW5zIGV2ZW4gbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgcG9zc2libGUgZXJyb3IgY2F1c2VzLgorSG93ZXZlciwgdG8gcHJvcGVybHkgcGFyc2Ugc3VjaCBhIGNvbXBsZXggZmlsZSwgYW4gZXh0ZXJuYWwgZmlsdGVyIHNob3VsZAorYmUgdXNlZC4gIFNlZSB0aGUgZGVzY3JpcHRpb24gZnVydGhlciBhYm92ZSBob3cgdG8gbWFrZSBzdWNoIGEgZmlsdGVyIGtub3duCitieSBWaW0uCisKKwkJCQkJCSplcnJvcmZvcm1hdC1QZXJsKgorSW4gJFZJTVJVTlRJTUUvdG9vbHMgeW91IGNhbiBmaW5kIHRoZSBlZm1fcGVybC5wbCBzY3JpcHQsIHdoaWNoIGZpbHRlcnMgUGVybAorZXJyb3IgbWVzc2FnZXMgaW50byBhIGZvcm1hdCB0aGF0IHF1aWNrZml4IG1vZGUgd2lsbCB1bmRlcnN0YW5kLiAgU2VlIHRoZQorc3RhcnQgb2YgdGhlIGZpbGUgYWJvdXQgaG93IHRvIHVzZSBpdC4KKworCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9xdWlja3JlZi50eHQgYi9ydW50aW1lL2RvYy9xdWlja3JlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ODI3ZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3F1aWNrcmVmLnR4dApAQCAtMCwwICsxLDEzMjUgQEAKKypxdWlja3JlZi50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDUKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgIFF1aWNrIHJlZmVyZW5jZSBndWlkZQorCisJCQkJCQkJICpxdWlja3JlZiogKkNvbnRlbnRzKgorIHRhZwkgIHN1YmplY3QJCQkgdGFnCSAgc3ViamVjdAl+Cit8UV9jdHwgIGxpc3Qgb2YgaGVscCBmaWxlcwkJfFFfcmV8CVJlcGVhdGluZyBjb21tYW5kcworfFFfbHJ8CW1vdGlvbjogTGVmdC1yaWdodAkJfFFfa218CUtleSBtYXBwaW5nCit8UV91ZHwJbW90aW9uOiBVcC1kb3duCQkJfFFfYWJ8CUFiYnJldmlhdGlvbnMKK3xRX3RtfAltb3Rpb246IFRleHQgb2JqZWN0CQl8UV9vcHwJT3B0aW9ucworfFFfcGF8CW1vdGlvbjogUGF0dGVybiBzZWFyY2hlcwl8UV91cnwJVW5kby9SZWRvIGNvbW1hbmRzCit8UV9tYXwJbW90aW9uOiBNYXJrcwkJCXxRX2V0fAlFeHRlcm5hbCBjb21tYW5kcworfFFfdm18CW1vdGlvbjogVmFyaW91cwkJCXxRX3FmfAlRdWlja2ZpeCBjb21tYW5kcworfFFfdGF8CW1vdGlvbjogVXNpbmcgdGFncwkJfFFfdmN8CVZhcmlvdXMgY29tbWFuZHMKK3xRX3NjfAlTY3JvbGxpbmcJCQl8UV9jZXwJRXg6IENvbW1hbmQtbGluZSBlZGl0aW5nCit8UV9pbnwJaW5zZXJ0OiBJbnNlcnRpbmcgdGV4dAkJfFFfcmF8CUV4OiBSYW5nZXMKK3xRX2FpfAlpbnNlcnQ6IEtleXMJCQl8UV9leHwJRXg6IFNwZWNpYWwgY2hhcmFjdGVycworfFFfc3N8CWluc2VydDogU3BlY2lhbCBrZXlzCQl8UV9lZHwJRWRpdGluZyBhIGZpbGUKK3xRX2RpfAlpbnNlcnQ6IERpZ3JhcGhzCQl8UV9mbHwJVXNpbmcgdGhlIGFyZ3VtZW50IGxpc3QKK3xRX3NpfAlpbnNlcnQ6IFNwZWNpYWwgaW5zZXJ0cwkJfFFfd3F8CVdyaXRpbmcgYW5kIHF1aXR0aW5nCit8UV9kZXwJY2hhbmdlOiBEZWxldGluZyB0ZXh0CQl8UV9zdHwJU3RhcnRpbmcgVklNCit8UV9jbXwJY2hhbmdlOiBDb3B5aW5nIGFuZCBtb3ZpbmcJfFFfYWN8CUF1dG9tYXRpYyBjb21tYW5kcworfFFfY2h8CWNoYW5nZTogQ2hhbmdpbmcgdGV4dAkJfFFfd2l8CU11bHRpLXdpbmRvdyBjb21tYW5kcworfFFfY298CWNoYW5nZTogQ29tcGxleAkJCXxRX2J1fAlCdWZmZXIgbGlzdCBjb21tYW5kcworfFFfdml8CVZpc3VhbCBtb2RlCQkJfFFfc3l8CVN5bnRheCBoaWdobGlnaHRpbmcKK3xRX3RvfAlUZXh0IG9iamVjdHMJCQl8UV9ndXwJR1VJIGNvbW1hbmRzCisJCQkJCXxRX2ZvfCAgRm9sZGluZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK04gaXMgdXNlZCB0byBpbmRpY2F0ZSBhbiBvcHRpb25hbCBjb3VudCB0aGF0IGNhbiBiZSBnaXZlbiBiZWZvcmUgdGhlIGNvbW1hbmQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2xyKgkJTGVmdC1yaWdodCBtb3Rpb25zCisKK3xofAlOICBoCQlsZWZ0IChhbHNvOiBDVFJMLUgsIDxCUz4sIG9yIDxMZWZ0PiBrZXkpCit8bHwJTiAgbAkJcmlnaHQgKGFsc286IDxTcGFjZT4gb3IgPFJpZ2h0PiBrZXkpCit8MHwJICAgMAkJdG8gZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lIChhbHNvOiA8SG9tZT4ga2V5KQorfF58CSAgIF4JCXRvIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUKK3wkfAlOICAkCQl0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgKE4tMSBsaW5lcyBsb3dlcikKKwkJCSAgIChhbHNvOiA8RW5kPiBrZXkpCit8ZzB8CU4gIGcwCQl0byBmaXJzdCBjaGFyYWN0ZXIgaW4gc2NyZWVuIGxpbmUgKGRpZmZlcnMgZnJvbSAiMCIKKwkJCSAgIHdoZW4gbGluZXMgd3JhcCkKK3xnXnwJTiAgZ14JCXRvIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgaW4gc2NyZWVuIGxpbmUgKGRpZmZlcnMKKwkJCSAgIGZyb20gIl4iIHdoZW4gbGluZXMgd3JhcCkKK3xnJHwJTiAgZyQJCXRvIGxhc3QgY2hhcmFjdGVyIGluIHNjcmVlbiBsaW5lIChkaWZmZXJzIGZyb20gIiQiCisJCQkgICB3aGVuIGxpbmVzIHdyYXApCit8Z218CU4gIGdtCQl0byBtaWRkbGUgb2YgdGhlIHNjcmVlbiBsaW5lCit8YmFyfAlOICB8CQl0byBjb2x1bW4gTiAoZGVmYXVsdDogMSkKK3xmfAlOICBme2NoYXJ9CXRvIHRoZSBOdGggb2NjdXJyZW5jZSBvZiB7Y2hhcn0gdG8gdGhlIHJpZ2h0Cit8RnwJTiAgRntjaGFyfQl0byB0aGUgTnRoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9IHRvIHRoZSBsZWZ0Cit8dHwJTiAgdHtjaGFyfQl0aWxsIGJlZm9yZSB0aGUgTnRoIG9jY3VycmVuY2Ugb2Yge2NoYXJ9IHRvIHRoZSByaWdodAorfFR8CU4gIFR7Y2hhcn0JdGlsbCBiZWZvcmUgdGhlIE50aCBvY2N1cnJlbmNlIG9mIHtjaGFyfSB0byB0aGUgbGVmdAorfDt8CU4gIDsJCXJlcGVhdCB0aGUgbGFzdCAiZiIsICJGIiwgInQiLCBvciAiVCIgTiB0aW1lcworfCx8CU4gICwJCXJlcGVhdCB0aGUgbGFzdCAiZiIsICJGIiwgInQiLCBvciAiVCIgTiB0aW1lcyBpbgorCQkJICAgb3Bwb3NpdGUgZGlyZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3VkKgkJVXAtZG93biBtb3Rpb25zCisKK3xrfAlOICBrCQl1cCBOIGxpbmVzIChhbHNvOiBDVFJMLVAgYW5kIDxVcD4pCit8anwJTiAgagkJZG93biBOIGxpbmVzIChhbHNvOiBDVFJMLUosIENUUkwtTiwgPE5MPiwgYW5kIDxEb3duPikKK3wtfAlOICAtCQl1cCBOIGxpbmVzLCBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3RlcgorfCt8CU4gICsJCWRvd24gTiBsaW5lcywgb24gdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgKGFsc286CisJCQkgICBDVFJMLU0gYW5kIDxDUj4pCit8X3wJTiAgXwkJZG93biBOLTEgbGluZXMsIG9uIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyCit8R3wJTiAgRwkJZ290byBsaW5lIE4gKGRlZmF1bHQ6IGxhc3QgbGluZSksIG9uIHRoZSBmaXJzdAorCQkJICAgbm9uLWJsYW5rIGNoYXJhY3RlcgorfGdnfAlOICBnZwkJZ290byBsaW5lIE4gKGRlZmF1bHQ6IGZpcnN0IGxpbmUpLCBvbiB0aGUgZmlyc3QKKwkJCSAgIG5vbi1ibGFuayBjaGFyYWN0ZXIKK3xOJXwJTiAgJQkJZ290byBsaW5lIE4gcGVyY2VudGFnZSBkb3duIGluIHRoZSBmaWxlLiAgTiBtdXN0IGJlCisJCQkgICBnaXZlbiwgb3RoZXJ3aXNlIGl0IGlzIHRoZSB8JXwgY29tbWFuZC4KK3xna3wJTiAgZ2sJCXVwIE4gc2NyZWVuIGxpbmVzIChkaWZmZXJzIGZyb20gImsiIHdoZW4gbGluZSB3cmFwcykKK3xnanwJTiAgZ2oJCWRvd24gTiBzY3JlZW4gbGluZXMgKGRpZmZlcnMgZnJvbSAiaiIgd2hlbiBsaW5lIHdyYXBzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV90bSoJCVRleHQgb2JqZWN0IG1vdGlvbnMKKworfHd8CU4gIHcJCU4gd29yZHMgZm9yd2FyZAorfFd8CU4gIFcJCU4gYmxhbmstc2VwYXJhdGVkIHxXT1JEfHMgZm9yd2FyZAorfGV8CU4gIGUJCWZvcndhcmQgdG8gdGhlIGVuZCBvZiB0aGUgTnRoIHdvcmQKK3xFfAlOICBFCQlmb3J3YXJkIHRvIHRoZSBlbmQgb2YgdGhlIE50aCBibGFuay1zZXBhcmF0ZWQgfFdPUkR8Cit8YnwJTiAgYgkJTiB3b3JkcyBiYWNrd2FyZAorfEJ8CU4gIEIJCU4gYmxhbmstc2VwYXJhdGVkIHxXT1JEfHMgYmFja3dhcmQKK3xnZXwJTiAgZ2UJCWJhY2t3YXJkIHRvIHRoZSBlbmQgb2YgdGhlIE50aCB3b3JkCit8Z0V8CU4gIGdFCQliYWNrd2FyZCB0byB0aGUgZW5kIG9mIHRoZSBOdGggYmxhbmstc2VwYXJhdGVkIHxXT1JEfAorCit8KXwJTiAgKQkJTiBzZW50ZW5jZXMgZm9yd2FyZAorfCh8CU4gICgJCU4gc2VudGVuY2VzIGJhY2t3YXJkCit8fXwJTiAgfQkJTiBwYXJhZ3JhcGhzIGZvcndhcmQKK3x7fAlOICB7CQlOIHBhcmFncmFwaHMgYmFja3dhcmQKK3xdXXwJTiAgXV0JCU4gc2VjdGlvbnMgZm9yd2FyZCwgYXQgc3RhcnQgb2Ygc2VjdGlvbgorfFtbfAlOICBbWwkJTiBzZWN0aW9ucyBiYWNrd2FyZCwgYXQgc3RhcnQgb2Ygc2VjdGlvbgorfF1bfAlOICBdWwkJTiBzZWN0aW9ucyBmb3J3YXJkLCBhdCBlbmQgb2Ygc2VjdGlvbgorfFtdfAlOICBbXQkJTiBzZWN0aW9ucyBiYWNrd2FyZCwgYXQgZW5kIG9mIHNlY3Rpb24KK3xbKHwJTiAgWygJCU4gdGltZXMgYmFjayB0byB1bmNsb3NlZCAnKCcKK3xbe3wJTiAgW3sJCU4gdGltZXMgYmFjayB0byB1bmNsb3NlZCAneycKK3xbbXwJTiAgW20JCU4gdGltZXMgYmFjayB0byBzdGFydCBvZiBtZXRob2QgKGZvciBKYXZhKQorfFtNfAlOICBbTQkJTiB0aW1lcyBiYWNrIHRvIGVuZCBvZiBtZXRob2QgKGZvciBKYXZhKQorfF0pfAlOICBdKQkJTiB0aW1lcyBmb3J3YXJkIHRvIHVuY2xvc2VkICcpJworfF19fAlOICBdfQkJTiB0aW1lcyBmb3J3YXJkIHRvIHVuY2xvc2VkICd9JworfF1tfAlOICBdbQkJTiB0aW1lcyBmb3J3YXJkIHRvIHN0YXJ0IG9mIG1ldGhvZCAoZm9yIEphdmEpCit8XU18CU4gIF1NCQlOIHRpbWVzIGZvcndhcmQgdG8gZW5kIG9mIG1ldGhvZCAoZm9yIEphdmEpCit8WyN8CU4gIFsjCQlOIHRpbWVzIGJhY2sgdG8gdW5jbG9zZWQgIiNpZiIgb3IgIiNlbHNlIgorfF0jfAlOICBdIwkJTiB0aW1lcyBmb3J3YXJkIHRvIHVuY2xvc2VkICIjZWxzZSIgb3IgIiNlbmRpZiIKK3xbc3RhcnwJTiAgWyoJCU4gdGltZXMgYmFjayB0byBzdGFydCBvZiBjb21tZW50ICIvKiIKK3xdc3RhcnwJTiAgXSoJCU4gdGltZXMgZm9yd2FyZCB0byBlbmQgb2YgY29tbWVudCAiKi8iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3BhKgkJUGF0dGVybiBzZWFyY2hlcworCit8L3wJTiAgL3twYXR0ZXJufVsvW29mZnNldF1dPENSPgorCQkJc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBOdGggb2NjdXJyZW5jZSBvZiB7cGF0dGVybn0KK3w/fAlOICA/e3BhdHRlcm59Wz9bb2Zmc2V0XV08Q1I+CisJCQlzZWFyY2ggYmFja3dhcmQgZm9yIHRoZSBOdGggb2NjdXJyZW5jZSBvZiB7cGF0dGVybn0KK3wvPENSPnwJTiAgLzxDUj4JcmVwZWF0IGxhc3Qgc2VhcmNoLCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24KK3w/PENSPnwJTiAgPzxDUj4JcmVwZWF0IGxhc3Qgc2VhcmNoLCBpbiB0aGUgYmFja3dhcmQgZGlyZWN0aW9uCit8bnwJTiAgbgkJcmVwZWF0IGxhc3Qgc2VhcmNoCit8TnwJTiAgTgkJcmVwZWF0IGxhc3Qgc2VhcmNoLCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb24KK3xzdGFyfAlOICAqCQlzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIGlkZW50aWZpZXIgdW5kZXIgdGhlIGN1cnNvcgorfCN8CU4gICMJCXNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIGlkZW50aWZpZXIgdW5kZXIgdGhlIGN1cnNvcgorfGdzdGFyfAlOICBnKgkJbGlrZSAiKiIsIGJ1dCBhbHNvIGZpbmQgcGFydGlhbCBtYXRjaGVzCit8ZyN8CU4gIGcjCQlsaWtlICIjIiwgYnV0IGFsc28gZmluZCBwYXJ0aWFsIG1hdGNoZXMKK3xnZHwJICAgZ2QJCWdvdG8gbG9jYWwgZGVjbGFyYXRpb24gb2YgaWRlbnRpZmllciB1bmRlciB0aGUgY3Vyc29yCit8Z0R8CSAgIGdECQlnb3RvIGdsb2JhbCBkZWNsYXJhdGlvbiBvZiBpZGVudGlmaWVyIHVuZGVyIHRoZSBjdXJzb3IKKworfHBhdHRlcm58CQlTcGVjaWFsIGNoYXJhY3RlcnMgaW4gc2VhcmNoIHBhdHRlcm5zCisKKwkJCW1lYW5pbmcJCSAgICAgIG1hZ2ljICAgbm9tYWdpYwl+CisJCW1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIJLglcLgorCQkgICAgICAgbWF0Y2hlcyBzdGFydCBvZiBsaW5lCV4JXgorCQkJICAgICAgIG1hdGNoZXMgPEVPTD4JJAkkCisJCSAgICAgICBtYXRjaGVzIHN0YXJ0IG9mIHdvcmQJXDwJXDwKKwkJCSBtYXRjaGVzIGVuZCBvZiB3b3JkCVw+CVw+CisJbWF0Y2hlcyBhIHNpbmdsZSBjaGFyIGZyb20gdGhlIHJhbmdlCVthLXpdCVxbYS16XQorICAgICAgbWF0Y2hlcyBhIHNpbmdsZSBjaGFyIG5vdCBpbiB0aGUgcmFuZ2UJW15hLXpdCVxbXmEtel0KKwkJICBtYXRjaGVzIGFuIGlkZW50aWZpZXIgY2hhcglcaQlcaQorCQkgICBpZGVtIGJ1dCBleGNsdWRpbmcgZGlnaXRzCVxJCVxJCisJCSBtYXRjaGVzIGEga2V5d29yZCBjaGFyYWN0ZXIJXGsJXGsKKwkJICAgaWRlbSBidXQgZXhjbHVkaW5nIGRpZ2l0cwlcSwlcSworCSAgICAgICBtYXRjaGVzIGEgZmlsZSBuYW1lIGNoYXJhY3RlcglcZglcZgorCQkgICBpZGVtIGJ1dCBleGNsdWRpbmcgZGlnaXRzCVxGCVxGCisJICAgICAgIG1hdGNoZXMgYSBwcmludGFibGUgY2hhcmFjdGVyCVxwCVxwCisJCSAgIGlkZW0gYnV0IGV4Y2x1ZGluZyBkaWdpdHMJXFAJXFAKKwkgICAgIG1hdGNoZXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIJXHMJXHMKKwkgbWF0Y2hlcyBhIG5vbi13aGl0ZSBzcGFjZSBjaGFyYWN0ZXIJXFMJXFMKKworCQkJICAgICAgIG1hdGNoZXMgPEVzYz4JXGUJXGUKKwkJCSAgICAgICBtYXRjaGVzIDxUYWI+CVx0CVx0CisJCQkJbWF0Y2hlcyA8Q1I+CVxyCVxyCisJCQkJbWF0Y2hlcyA8QlM+CVxiCVxiCisKKyAgICAgbWF0Y2hlcyAwIG9yIG1vcmUgb2YgdGhlIHByZWNlZGluZyBhdG9tCSoJXCoKKyAgICAgbWF0Y2hlcyAxIG9yIG1vcmUgb2YgdGhlIHByZWNlZGluZyBhdG9tCVwrCVwrCisJbWF0Y2hlcyAwIG9yIDEgb2YgdGhlIHByZWNlZGluZyBhdG9tCVw9CVw9CisJbWF0Y2hlcyAyIHRvIDUgb2YgdGhlIHByZWNlZGluZyBhdG9tCVx7Miw1fSAgXHsyLDV9CisJCSAgc2VwYXJhdGVzIHR3byBhbHRlcm5hdGl2ZXMJXHwJXHwKKwkJZ3JvdXAgYSBwYXR0ZXJuIGludG8gYW4gYXRvbQlcKFwpCVwoXCkKKworfHNlYXJjaC1vZmZzZXR8CQlPZmZzZXRzIGFsbG93ZWQgYWZ0ZXIgc2VhcmNoIGNvbW1hbmQKKworICAgIFtudW1dCVtudW1dIGxpbmVzIGRvd253YXJkcywgaW4gY29sdW1uIDEKKyAgICArW251bV0JW251bV0gbGluZXMgZG93bndhcmRzLCBpbiBjb2x1bW4gMQorICAgIC1bbnVtXQlbbnVtXSBsaW5lcyB1cHdhcmRzLCBpbiBjb2x1bW4gMQorICAgIGVbK251bV0JW251bV0gY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlIGVuZCBvZiB0aGUgbWF0Y2gKKyAgICBlWy1udW1dCVtudW1dIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQgb2YgdGhlIGVuZCBvZiB0aGUgbWF0Y2gKKyAgICBzWytudW1dCVtudW1dIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2gKKyAgICBzWy1udW1dCVtudW1dIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaAorICAgIGJbK251bV0JW251bV0gaWRlbnRpY2FsIHRvIHNbK251bV0gYWJvdmUgKG1uZW1vbmljOiBiZWdpbikKKyAgICBiWy1udW1dCVtudW1dIGlkZW50aWNhbCB0byBzWy1udW1dIGFib3ZlIChtbmVtb25pYzogYmVnaW4pCisgICAgO3tzZWFyY2gtY29tbWFuZH0JZXhlY3V0ZSB7c2VhcmNoLWNvbW1hbmR9IG5leHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfbWEqCQlNYXJrcyBhbmQgbW90aW9ucworCit8bXwJICAgbXthLXpBLVp9CW1hcmsgY3VycmVudCBwb3NpdGlvbiB3aXRoIG1hcmsge2EtekEtWn0KK3xgYXwJICAgYHthLXp9CWdvIHRvIG1hcmsge2Eten0gd2l0aGluIGN1cnJlbnQgZmlsZQorfGBBfAkgICBge0EtWn0JZ28gdG8gbWFyayB7QS1afSBpbiBhbnkgZmlsZQorfGAwfAkgICBgezAtOX0JZ28gdG8gdGhlIHBvc2l0aW9uIHdoZXJlIFZpbSB3YXMgcHJldmlvdXNseSBleGl0ZWQKK3xgYHwJICAgYGAJCWdvIHRvIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIGxhc3QganVtcAorfGBxdW90ZXwgICBgIgkJZ28gdG8gdGhlIHBvc2l0aW9uIHdoZW4gbGFzdCBlZGl0aW5nIHRoaXMgZmlsZQorfGBbfAkgICBgWwkJZ28gdG8gdGhlIHN0YXJ0IG9mIHRoZSBwcmV2aW91c2x5IG9wZXJhdGVkIG9yIHB1dCB0ZXh0Cit8YF18CSAgIGBdCQlnbyB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91c2x5IG9wZXJhdGVkIG9yIHB1dCB0ZXh0Cit8YDx8CSAgIGA8CQlnbyB0byB0aGUgc3RhcnQgb2YgdGhlIChwcmV2aW91cykgVmlzdWFsIGFyZWEKK3xgPnwJICAgYD4JCWdvIHRvIHRoZSBlbmQgb2YgdGhlIChwcmV2aW91cykgVmlzdWFsIGFyZWEKK3xgLnwJICAgYC4JCWdvIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBjaGFuZ2UgaW4gdGhpcyBmaWxlCit8J3wJICAgJ3thLXpBLVowLTlbXSciPD4ufQorCQkJc2FtZSBhcyBgLCBidXQgb24gdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZQorfDptYXJrc3wgIDptYXJrcwlwcmludCB0aGUgYWN0aXZlIG1hcmtzCit8Q1RSTC1PfCAgTiAgQ1RSTC1PCWdvIHRvIE50aCBvbGRlciBwb3NpdGlvbiBpbiBqdW1wIGxpc3QKK3xDVFJMLUl8ICBOICBDVFJMLUkJZ28gdG8gTnRoIG5ld2VyIHBvc2l0aW9uIGluIGp1bXAgbGlzdAorfDpqdXwJICA6anVbbXBzXQlwcmludCB0aGUganVtcCBsaXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3ZtKgkJVmFyaW91cyBtb3Rpb25zCisKK3wlfAkgICAlCQlmaW5kIHRoZSBuZXh0IGJyYWNlLCBicmFja2V0LCBjb21tZW50LCBvciAiI2lmIi8KKwkJCSAgICIjZWxzZSIvIiNlbmRpZiIgaW4gdGhpcyBsaW5lIGFuZCBnbyB0byBpdHMgbWF0Y2gKK3xIfAlOICBICQlnbyB0byB0aGUgTnRoIGxpbmUgaW4gdGhlIHdpbmRvdywgb24gdGhlIGZpcnN0CisJCQkgICBub24tYmxhbmsKK3xNfAkgICBNCQlnbyB0byB0aGUgbWlkZGxlIGxpbmUgaW4gdGhlIHdpbmRvdywgb24gdGhlIGZpcnN0CisJCQkgICBub24tYmxhbmsKK3xMfAlOICBMCQlnbyB0byB0aGUgTnRoIGxpbmUgZnJvbSB0aGUgYm90dG9tLCBvbiB0aGUgZmlyc3QKKwkJCSAgIG5vbi1ibGFuaworCit8Z298CU4gIGdvCQkJZ28gdG8gTnRoIGJ5dGUgaW4gdGhlIGJ1ZmZlcgorfDpnb3wJOltyYW5nZV1nb1t0b10gW29mZl0JZ28gdG8gW29mZl0gYnl0ZSBpbiB0aGUgYnVmZmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3RhKgkJVXNpbmcgdGFncworCit8OnRhfAkgICA6dGFbZ11bIV0ge3RhZ30JSnVtcCB0byB0YWcge3RhZ30KK3w6dGF8CSAgIDpbY291bnRddGFbZ11bIV0JSnVtcCB0byBbY291bnRdJ3RoIG5ld2VyIHRhZyBpbiB0YWcgbGlzdAorfENUUkwtXXwgICAgICBDVFJMLV0JCUp1bXAgdG8gdGhlIHRhZyB1bmRlciBjdXJzb3IsIHVubGVzcyBjaGFuZ2VzCisJCQkJICAgaGF2ZSBiZWVuIG1hZGUKK3w6dHN8CSAgIDp0c1tlbGVjdF1bIV0gW3RhZ10JTGlzdCBtYXRjaGluZyB0YWdzIGFuZCBzZWxlY3Qgb25lIHRvIGp1bXAgdG8KK3w6dGp1bXB8ICAgOnRqW3VtcF1bIV0gW3RhZ10JSnVtcCB0byB0YWcgW3RhZ10gb3Igc2VsZWN0IGZyb20gbGlzdCB3aGVuCisJCQkJICAgdGhlcmUgYXJlIG11bHRpcGxlIG1hdGNoZXMKKworfDp0YWdzfAkgICA6dGFncwkJUHJpbnQgdGFnIGxpc3QKK3xDVFJMLVR8ICAgTiAgQ1RSTC1UCQlKdW1wIGJhY2sgZnJvbSBOdGggb2xkZXIgdGFnIGluIHRhZyBsaXN0Cit8OnBvfAkgICA6W2NvdW50XXBvW3BdWyFdCUp1bXAgYmFjayBmcm9tIFtjb3VudF0ndGggb2xkZXIgdGFnIGluIHRhZyBsaXN0Cit8OnRuZXh0fCAgIDpbY291bnRddG5bZXh0XVshXQlKdW1wIHRvIFtjb3VudF0ndGggbmV4dCBtYXRjaGluZyB0YWcKK3w6dHB8ICAgICAgOltjb3VudF10cFtyZXZpb3VzXVshXSBKdW1wIHRvIFtjb3VudF0ndGggcHJldmlvdXMgbWF0Y2hpbmcgdGFnCit8OnRyfAkgICA6W2NvdW50XXRyW2V3aW5kXVshXSBKdW1wIHRvIFtjb3VudF0ndGggbWF0Y2hpbmcgdGFnCit8OnRsfAkgICA6dGxbYXN0XVshXQkJSnVtcCB0byBsYXN0IG1hdGNoaW5nIHRhZworCit8OnB0YWd8CSAgIDpwdFthZ10ge3RhZ30Jb3BlbiBhIHByZXZpZXcgd2luZG93IHRvIHNob3cgdGFnIHt0YWd9Cit8Q1RSTC1XX318ICAgICBDVFJMLVcgfQkJbGlrZSBDVFJMLV0gYnV0IHNob3cgdGFnIGluIHByZXZpZXcgd2luZG93Cit8OnB0c3wgICAgIDpwdHNbZWxlY3RdCQlsaWtlICI6dHNlbGVjdCIgYnV0IHNob3cgdGFnIGluIHByZXZpZXcgd2luZG93Cit8OnB0anVtcHwgIDpwdGpbdW1wXQkJbGlrZSAiOnRqdW1wIiBidXQgc2hvdyB0YWcgaW4gcHJldmlldyB3aW5kb3cKK3w6cGNsb3NlfCAgOnBjW2xvc2VdCQljbG9zZSB0YWcgcHJldmlldyB3aW5kb3cKK3xDVFJMLVdfenwgICAgIENUUkwtVyB6CQljbG9zZSB0YWcgcHJldmlldyB3aW5kb3cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfc2MqCQlTY3JvbGxpbmcKKworfENUUkwtRXwJTiAgQ1RSTC1FCXdpbmRvdyBOIGxpbmVzIGRvd253YXJkcyAoZGVmYXVsdDogMSkKK3xDVFJMLUR8CU4gIENUUkwtRAl3aW5kb3cgTiBsaW5lcyBEb3dud2FyZHMgKGRlZmF1bHQ6IDEvMiB3aW5kb3cpCit8Q1RSTC1GfAlOICBDVFJMLUYJd2luZG93IE4gcGFnZXMgRm9yd2FyZHMgKGRvd253YXJkcykKK3xDVFJMLVl8CU4gIENUUkwtWQl3aW5kb3cgTiBsaW5lcyB1cHdhcmRzIChkZWZhdWx0OiAxKQorfENUUkwtVXwJTiAgQ1RSTC1VCXdpbmRvdyBOIGxpbmVzIFVwd2FyZHMgKGRlZmF1bHQ6IDEvMiB3aW5kb3cpCit8Q1RSTC1CfAlOICBDVFJMLUIJd2luZG93IE4gcGFnZXMgQmFja3dhcmRzICh1cHdhcmRzKQorfHo8Q1I+fAkJICAgejxDUj4gb3IgenQJcmVkcmF3LCBjdXJyZW50IGxpbmUgYXQgdG9wIG9mIHdpbmRvdworfHoufAkJICAgei4JIG9yIHp6CXJlZHJhdywgY3VycmVudCBsaW5lIGF0IGNlbnRlciBvZiB3aW5kb3cKK3x6LXwJCSAgIHotCSBvciB6YglyZWRyYXcsIGN1cnJlbnQgbGluZSBhdCBib3R0b20gb2Ygd2luZG93CisKK1RoZXNlIG9ubHkgd29yayB3aGVuICd3cmFwJyBpcyBvZmY6Cit8emh8CQlOICB6aAkJc2Nyb2xsIHNjcmVlbiBOIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0Cit8emx8CQlOICB6bAkJc2Nyb2xsIHNjcmVlbiBOIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQKK3x6SHwJCU4gIHpICQlzY3JvbGwgc2NyZWVuIGhhbGYgYSBzY3JlZW53aWR0aCB0byB0aGUgcmlnaHQKK3x6THwJCU4gIHpMCQlzY3JvbGwgc2NyZWVuIGhhbGYgYSBzY3JlZW53aWR0aCB0byB0aGUgbGVmdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9pbioJCUluc2VydGluZyB0ZXh0CisKK3xhfAlOICBhCWFwcGVuZCB0ZXh0IGFmdGVyIHRoZSBjdXJzb3IgKE4gdGltZXMpCit8QXwJTiAgQQlhcHBlbmQgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIChOIHRpbWVzKQorfGl8CU4gIGkJaW5zZXJ0IHRleHQgYmVmb3JlIHRoZSBjdXJzb3IgKE4gdGltZXMpIChhbHNvOiA8SW5zZXJ0PikKK3xJfAlOICBJCWluc2VydCB0ZXh0IGJlZm9yZSB0aGUgZmlyc3Qgbm9uLWJsYW5rIGluIHRoZSBsaW5lIChOIHRpbWVzKQorfGdJfAlOICBnSQlpbnNlcnQgdGV4dCBpbiBjb2x1bW4gMSAoTiB0aW1lcykKK3xvfAlOICBvCW9wZW4gYSBuZXcgbGluZSBiZWxvdyB0aGUgY3VycmVudCBsaW5lLCBhcHBlbmQgdGV4dCAoTiB0aW1lcykKK3xPfAlOICBPCW9wZW4gYSBuZXcgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLCBhcHBlbmQgdGV4dCAoTiB0aW1lcykKK3w6c3RhcnRpbnNlcnR8ICA6c3Rhclt0aW5zZXJ0XVshXSAgc3RhcnQgSW5zZXJ0IG1vZGUsIGFwcGVuZCB3aGVuIFshXSB1c2VkCisKK2luIFZpc3VhbCBibG9jayBtb2RlOgorfHZfYl9JfCAgICBJCWluc2VydCB0aGUgc2FtZSB0ZXh0IGluIGZyb250IG9mIGFsbCB0aGUgc2VsZWN0ZWQgbGluZXMKK3x2X2JfQXwJICAgQQlhcHBlbmQgdGhlIHNhbWUgdGV4dCBhZnRlciBhbGwgdGhlIHNlbGVjdGVkIGxpbmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2FpKgkJSW5zZXJ0IG1vZGUga2V5cworCit8aW5zZXJ0LWluZGV4fAlhbHBoYWJldGljYWwgaW5kZXggb2YgSW5zZXJ0IG1vZGUgY29tbWFuZHMKKworbGVhdmluZyBJbnNlcnQgbW9kZToKK3xpXzxFc2M+fAk8RXNjPgkJICBlbmQgSW5zZXJ0IG1vZGUsIGJhY2sgdG8gTm9ybWFsIG1vZGUKK3xpX0NUUkwtQ3wJQ1RSTC1DCQkgIGxpa2UgPEVzYz4sIGJ1dCBkbyBub3QgdXNlIGFuIGFiYnJldmlhdGlvbgorfGlfQ1RSTC1PfAlDVFJMLU8ge2NvbW1hbmR9ICBleGVjdXRlIHtjb21tYW5kfSBhbmQgcmV0dXJuIHRvIEluc2VydCBtb2RlCisKK21vdmluZyBhcm91bmQ6Cit8aV88VXA+fAljdXJzb3Iga2V5cwkgIG1vdmUgY3Vyc29yIGxlZnQvcmlnaHQvdXAvZG93bgorfGlfPFMtTGVmdD58CXNoaWZ0LWxlZnQvcmlnaHQgIG9uZSB3b3JkIGxlZnQvcmlnaHQKK3xpXzxTLVVwPnwJc2hpZnQtdXAvZG93bgkgIG9uZSBzY3JlZW5mdWwgYmFja3dhcmQvZm9yd2FyZAorfGlfPEVuZD58CTxFbmQ+CQkgIGN1cnNvciBhZnRlciBsYXN0IGNoYXJhY3RlciBpbiB0aGUgbGluZQorfGlfPEhvbWU+fAk8SG9tZT4JCSAgY3Vyc29yIHRvIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgbGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9zcyoJCVNwZWNpYWwga2V5cyBpbiBJbnNlcnQgbW9kZQorCit8aV9DVFJMLVZ8CUNUUkwtViB7Y2hhcn0uLgkgIGluc2VydCBjaGFyYWN0ZXIgbGl0ZXJhbGx5LCBvciBlbnRlciBkZWNpbWFsCisJCQkJICAgICBieXRlIHZhbHVlCit8aV88Tkw+fAk8Tkw+IG9yIDxDUj4gb3IgQ1RSTC1NIG9yIENUUkwtSgorCQkJCSAgYmVnaW4gbmV3IGxpbmUKK3xpX0NUUkwtRXwJQ1RSTC1FCQkgIGluc2VydCB0aGUgY2hhcmFjdGVyIGZyb20gYmVsb3cgdGhlIGN1cnNvcgorfGlfQ1RSTC1ZfAlDVFJMLVkJCSAgaW5zZXJ0IHRoZSBjaGFyYWN0ZXIgZnJvbSBhYm92ZSB0aGUgY3Vyc29yCisKK3xpX0NUUkwtQXwJQ1RSTC1BCQkgIGluc2VydCBwcmV2aW91c2x5IGluc2VydGVkIHRleHQKK3xpX0NUUkwtQHwJQ1RSTC1ACQkgIGluc2VydCBwcmV2aW91c2x5IGluc2VydGVkIHRleHQgYW5kIHN0b3AKKwkJCQkgICAgIEluc2VydCBtb2RlCit8aV9DVFJMLVJ8CUNUUkwtUiB7MC05YS16JSM6Li09In0gIGluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlcgorCit8aV9DVFJMLU58CUNUUkwtTgkJICBpbnNlcnQgbmV4dCBtYXRjaCBvZiBpZGVudGlmaWVyIGJlZm9yZSB0aGUKKwkJCQkgICAgIGN1cnNvcgorfGlfQ1RSTC1QfAlDVFJMLVAJCSAgaW5zZXJ0IHByZXZpb3VzIG1hdGNoIG9mIGlkZW50aWZpZXIgYmVmb3JlCisJCQkJICAgICB0aGUgY3Vyc29yCit8aV9DVFJMLVh8CUNUUkwtWCAuLi4JICBjb21wbGV0ZSB0aGUgd29yZCBiZWZvcmUgdGhlIGN1cnNvciBpbgorCQkJCSAgICAgdmFyaW91cyB3YXlzCisKK3xpXzxCUz58CTxCUz4gb3IgQ1RSTC1ICSAgZGVsZXRlIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IKK3xpXzxEZWw+fAk8RGVsPgkJICBkZWxldGUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yCit8aV9DVFJMLVd8CUNUUkwtVwkJICBkZWxldGUgd29yZCBiZWZvcmUgdGhlIGN1cnNvcgorfGlfQ1RSTC1VfAlDVFJMLVUJCSAgZGVsZXRlIGFsbCBlbnRlcmVkIGNoYXJhY3RlcnMgaW4gdGhlIGN1cnJlbnQKKwkJCQkgICAgIGxpbmUKK3xpX0NUUkwtVHwJQ1RSTC1UCQkgIGluc2VydCBvbmUgc2hpZnR3aWR0aCBvZiBpbmRlbnQgaW4gZnJvbnQgb2YKKwkJCQkgICAgICAgdGhlIGN1cnJlbnQgbGluZQorfGlfQ1RSTC1EfAlDVFJMLUQJCSAgZGVsZXRlIG9uZSBzaGlmdHdpZHRoIG9mIGluZGVudCBpbiBmcm9udCBvZgorCQkJCSAgICAgdGhlIGN1cnJlbnQgbGluZQorfGlfMF9DVFJMLUR8CTAgQ1RSTC1ECSAgZGVsZXRlIGFsbCBpbmRlbnQgaW4gdGhlIGN1cnJlbnQgbGluZQorfGlfXl9DVFJMLUR8CV4gQ1RSTC1ECSAgZGVsZXRlIGFsbCBpbmRlbnQgaW4gdGhlIGN1cnJlbnQgbGluZSwKKwkJCQkgICAgIHJlc3RvcmUgaW5kZW50IGluIG5leHQgbGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9kaSoJCURpZ3JhcGhzCisKK3w6ZGlnfAkgICA6ZGlnW3JhcGhzXQkJc2hvdyBjdXJyZW50IGxpc3Qgb2YgZGlncmFwaHMKK3w6ZGlnfAkgICA6ZGlnW3JhcGhzXSB7Y2hhcjF9e2NoYXIyfSB7bnVtYmVyfSAuLi4KKwkJCQlhZGQgZGlncmFwaChzKSB0byB0aGUgbGlzdAorCitJbiBJbnNlcnQgb3IgQ29tbWFuZC1saW5lIG1vZGU6Cit8aV9DVFJMLUt8CUNUUkwtSyB7Y2hhcjF9IHtjaGFyMn0KKwkJCQkgIGVudGVyIGRpZ3JhcGgKK3xpX2RpZ3JhcGh8CXtjaGFyMX0gPEJTPiB7Y2hhcjJ9CisJCQkJICBlbnRlciBkaWdyYXBoIGlmICdkaWdyYXBoJyBvcHRpb24gc2V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3NpKgkJU3BlY2lhbCBpbnNlcnRzCisKK3w6cnwJICAgOnIgW2ZpbGVdCSAgIGluc2VydCB0aGUgY29udGVudHMgb2YgW2ZpbGVdIGJlbG93IHRoZSBjdXJzb3IKK3w6ciF8CSAgIDpyISB7Y29tbWFuZH0gICBpbnNlcnQgdGhlIHN0YW5kYXJkIG91dHB1dCBvZiB7Y29tbWFuZH0gYmVsb3cgdGhlCisJCQkgICAgICBjdXJzb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfZGUqCQlEZWxldGluZyB0ZXh0CisKK3x4fAlOICB4CQlkZWxldGUgTiBjaGFyYWN0ZXJzIHVuZGVyIGFuZCBhZnRlciB0aGUgY3Vyc29yCit8PERlbD58IE4gIDxEZWw+CWRlbGV0ZSBOIGNoYXJhY3RlcnMgdW5kZXIgYW5kIGFmdGVyIHRoZSBjdXJzb3IKK3xYfAlOICBYCQlkZWxldGUgTiBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgY3Vyc29yCit8ZHwJTiAgZHttb3Rpb259CWRlbGV0ZSB0aGUgdGV4dCB0aGF0IGlzIG1vdmVkIG92ZXIgd2l0aCB7bW90aW9ufQorfHZfZHwJe3Zpc3VhbH1kCWRlbGV0ZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dAorfGRkfAlOICBkZAkJZGVsZXRlIE4gbGluZXMKK3xEfAlOICBECQlkZWxldGUgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSAoYW5kIE4tMSBtb3JlIGxpbmVzKQorfEp8CU4gIEoJCWpvaW4gTi0xIGxpbmVzIChkZWxldGUgPEVPTD5zKQorfHZfSnwJe3Zpc3VhbH1KCWpvaW4gdGhlIGhpZ2hsaWdodGVkIGxpbmVzCit8Z0p8CU4gIGdKCQlsaWtlICJKIiwgYnV0IHdpdGhvdXQgaW5zZXJ0aW5nIHNwYWNlcworfHZfZ0p8CXt2aXN1YWx9Z0oJbGlrZSAie3Zpc3VhbH1KIiwgYnV0IHdpdGhvdXQgaW5zZXJ0aW5nIHNwYWNlcworfDpkfAk6W3JhbmdlXWQgW3hdCWRlbGV0ZSBbcmFuZ2VdIGxpbmVzIFtpbnRvIHJlZ2lzdGVyIHhdCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2NtKgkJQ29weWluZyBhbmQgbW92aW5nIHRleHQKKworfHF1b3RlfAkgICJ7Y2hhcn0JdXNlIHJlZ2lzdGVyIHtjaGFyfSBmb3IgdGhlIG5leHQgZGVsZXRlLCB5YW5rLCBvciBwdXQKK3w6cmVnfAkgIDpyZWcJCXNob3cgdGhlIGNvbnRlbnRzIG9mIGFsbCByZWdpc3RlcnMKK3w6cmVnfAkgIDpyZWcge2FyZ30Jc2hvdyB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXJzIG1lbnRpb25lZCBpbiB7YXJnfQorfHl8CSAgTiAgeXttb3Rpb259CXlhbmsgdGhlIHRleHQgbW92ZWQgb3ZlciB3aXRoIHttb3Rpb259IGludG8gYSByZWdpc3RlcgorfHZfeXwJICAgICB7dmlzdWFsfXkJeWFuayB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBpbnRvIGEgcmVnaXN0ZXIKK3x5eXwJICBOICB5eQkJeWFuayBOIGxpbmVzIGludG8gYSByZWdpc3RlcgorfFl8CSAgTiAgWQkJeWFuayBOIGxpbmVzIGludG8gYSByZWdpc3RlcgorfHB8CSAgTiAgcAkJcHV0IGEgcmVnaXN0ZXIgYWZ0ZXIgdGhlIGN1cnNvciBwb3NpdGlvbiAoTiB0aW1lcykKK3xQfAkgIE4gIFAJCXB1dCBhIHJlZ2lzdGVyIGJlZm9yZSB0aGUgY3Vyc29yIHBvc2l0aW9uIChOIHRpbWVzKQorfF1wfAkgIE4gIF1wCQlsaWtlIHAsIGJ1dCBhZGp1c3QgaW5kZW50IHRvIGN1cnJlbnQgbGluZQorfFtwfAkgIE4gIFtwCQlsaWtlIFAsIGJ1dCBhZGp1c3QgaW5kZW50IHRvIGN1cnJlbnQgbGluZQorfGdwfAkgIE4gIGdwCQlsaWtlIHAsIGJ1dCBsZWF2ZSBjdXJzb3IgYWZ0ZXIgdGhlIG5ldyB0ZXh0Cit8Z1B8CSAgTiAgZ1AJCWxpa2UgUCwgYnV0IGxlYXZlIGN1cnNvciBhZnRlciB0aGUgbmV3IHRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfY2gqCQlDaGFuZ2luZyB0ZXh0CisKK3xyfAkgIE4gIHJ7Y2hhcn0JcmVwbGFjZSBOIGNoYXJhY3RlcnMgd2l0aCB7Y2hhcn0KK3xncnwJICBOICBncntjaGFyfQlyZXBsYWNlIE4gY2hhcmFjdGVycyB3aXRob3V0IGFmZmVjdGluZyBsYXlvdXQKK3xSfAkgIE4gIFIJCWVudGVyIFJlcGxhY2UgbW9kZSAocmVwZWF0IHRoZSBlbnRlcmVkIHRleHQgTiB0aW1lcykKK3xnUnwJICBOICBnUgkJZW50ZXIgdmlydHVhbCBSZXBsYWNlIG1vZGU6IExpa2UgUmVwbGFjZSBtb2RlIGJ1dAorCQkJICAgd2l0aG91dCBhZmZlY3RpbmcgbGF5b3V0Cit8dl9iX3J8CSAge3Zpc3VhbH1ye2NoYXJ9CisJCQlpbiBWaXN1YWwgYmxvY2sgbW9kZTogUmVwbGFjZSBlYWNoIGNoYXIgb2YgdGhlCisJCQkgICBzZWxlY3RlZCB0ZXh0IHdpdGgge2NoYXJ9CisKKwkoY2hhbmdlID0gZGVsZXRlIHRleHQgYW5kIGVudGVyIEluc2VydCBtb2RlKQorfGN8CSAgTiAgY3ttb3Rpb259CWNoYW5nZSB0aGUgdGV4dCB0aGF0IGlzIG1vdmVkIG92ZXIgd2l0aCB7bW90aW9ufQorfHZfY3wJICAgICB7dmlzdWFsfWMJY2hhbmdlIHRoZSBoaWdobGlnaHRlZCB0ZXh0Cit8Y2N8CSAgTiAgY2MJCWNoYW5nZSBOIGxpbmVzCit8U3wJICBOICBTCQljaGFuZ2UgTiBsaW5lcworfEN8CSAgTiAgQwkJY2hhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgKGFuZCBOLTEgbW9yZSBsaW5lcykKK3xzfAkgIE4gIHMJCWNoYW5nZSBOIGNoYXJhY3RlcnMKK3x2X2JfY3wJICAgICB7dmlzdWFsfWMJaW4gVmlzdWFsIGJsb2NrIG1vZGU6IENoYW5nZSBlYWNoIG9mIHRoZSBzZWxlY3RlZAorCQkJICAgbGluZXMgd2l0aCB0aGUgZW50ZXJlZCB0ZXh0Cit8dl9iX0N8CSAgICAge3Zpc3VhbH1DCWluIFZpc3VhbCBibG9jayBtb2RlOiBDaGFuZ2UgZWFjaCBvZiB0aGUgc2VsZWN0ZWQKKwkJCSAgIGxpbmVzIHVudGlsIGVuZC1vZi1saW5lIHdpdGggdGhlIGVudGVyZWQgdGV4dAorCit8fnwJICBOICB+CQlzd2l0Y2ggY2FzZSBmb3IgTiBjaGFyYWN0ZXJzIGFuZCBhZHZhbmNlIGN1cnNvcgorfHZffnwJICAgICB7dmlzdWFsfX4Jc3dpdGNoIGNhc2UgZm9yIGhpZ2hsaWdodGVkIHRleHQKK3x2X3V8CSAgICAge3Zpc3VhbH11CW1ha2UgaGlnaGxpZ2h0ZWQgdGV4dCBsb3dlcmNhc2UKK3x2X1V8CSAgICAge3Zpc3VhbH1VCW1ha2UgaGlnaGxpZ2h0ZWQgdGV4dCB1cHBlcmNhc2UKK3xnfnwJICAgICBnfnttb3Rpb259IHN3aXRjaCBjYXNlIGZvciB0aGUgdGV4dCB0aGF0IGlzIG1vdmVkIG92ZXIgd2l0aAorCQkJICAge21vdGlvbn0KK3xndXwJICAgICBndXttb3Rpb259IG1ha2UgdGhlIHRleHQgdGhhdCBpcyBtb3ZlZCBvdmVyIHdpdGgge21vdGlvbn0KKwkJCSAgIGxvd2VyY2FzZQorfGdVfAkgICAgIGdVe21vdGlvbn0gbWFrZSB0aGUgdGV4dCB0aGF0IGlzIG1vdmVkIG92ZXIgd2l0aCB7bW90aW9ufQorCQkJICAgdXBwZXJjYXNlCit8dl9nP3wJICAgICB7dmlzdWFsfWc/IHBlcmZvcm0gcm90MTMgZW5jb2Rpbmcgb24gaGlnaGxpZ2h0ZWQgdGV4dAorfGc/fAkgICAgIGc/e21vdGlvbn0gcGVyZm9ybSByb3QxMyBlbmNvZGluZyBvbiB0aGUgdGV4dCB0aGF0IGlzIG1vdmVkIG92ZXIKKwkJCSAgIHdpdGgge21vdGlvbn0KKworfENUUkwtQXwgIE4gIENUUkwtQQlhZGQgTiB0byB0aGUgbnVtYmVyIGF0IG9yIGFmdGVyIHRoZSBjdXJzb3IKK3xDVFJMLVh8ICBOICBDVFJMLVgJc3VidHJhY3QgTiBmcm9tIHRoZSBudW1iZXIgYXQgb3IgYWZ0ZXIgdGhlIGN1cnNvcgorCit8PHwJICBOICA8e21vdGlvbn0JbW92ZSB0aGUgbGluZXMgdGhhdCBhcmUgbW92ZWQgb3ZlciB3aXRoIHttb3Rpb259IG9uZQorCQkJICAgc2hpZnR3aWR0aCBsZWZ0Cit8PDx8CSAgTiAgPDwJCW1vdmUgTiBsaW5lcyBvbmUgc2hpZnR3aWR0aCBsZWZ0Cit8PnwJICBOICA+e21vdGlvbn0JbW92ZSB0aGUgbGluZXMgdGhhdCBhcmUgbW92ZWQgb3ZlciB3aXRoIHttb3Rpb259IG9uZQorCQkJICAgc2hpZnR3aWR0aCByaWdodAorfD4+fAkgIE4gID4+CQltb3ZlIE4gbGluZXMgb25lIHNoaWZ0d2lkdGggcmlnaHQKK3xncXwJICBOICBncXttb3Rpb259CWZvcm1hdCB0aGUgbGluZXMgdGhhdCBhcmUgbW92ZWQgb3ZlciB3aXRoIHttb3Rpb259IHRvCisJCQkgICAndGV4dHdpZHRoJyBsZW5ndGgKK3w6Y2V8CSAgOltyYW5nZV1jZVtudGVyXSBbd2lkdGhdCisJCQljZW50ZXIgdGhlIGxpbmVzIGluIFtyYW5nZV0KK3w6bGV8CSAgOltyYW5nZV1sZVtmdF0gW2luZGVudF0KKwkJCWxlZnQtYWxpZ24gdGhlIGxpbmVzIGluIFtyYW5nZV0gKHdpdGggW2luZGVudF0pCit8OnJpfAkgIDpbcmFuZ2VdcmlbZ2h0XSBbd2lkdGhdCisJCQlyaWdodC1hbGlnbiB0aGUgbGluZXMgaW4gW3JhbmdlXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9jbyoJCUNvbXBsZXggY2hhbmdlcworCit8IXwJICAgTiAgIXttb3Rpb259e2NvbW1hbmR9PENSPgorCQkJZmlsdGVyIHRoZSBsaW5lcyB0aGF0IGFyZSBtb3ZlZCBvdmVyIHRocm91Z2gge2NvbW1hbmR9Cit8ISF8CSAgIE4gICEhe2NvbW1hbmR9PENSPgorCQkJZmlsdGVyIE4gbGluZXMgdGhyb3VnaCB7Y29tbWFuZH0KK3x2XyF8CSAgICAgIHt2aXN1YWx9IXtjb21tYW5kfTxDUj4KKwkJCWZpbHRlciB0aGUgaGlnaGxpZ2h0ZWQgbGluZXMgdGhyb3VnaCB7Y29tbWFuZH0KK3w6cmFuZ2UhfCAgOltyYW5nZV0hIHtjb21tYW5kfTxDUj4KKwkJCWZpbHRlciBbcmFuZ2VdIGxpbmVzIHRocm91Z2gge2NvbW1hbmR9Cit8PXwJICAgTiAgPXttb3Rpb259CisJCQlmaWx0ZXIgdGhlIGxpbmVzIHRoYXQgYXJlIG1vdmVkIG92ZXIgdGhyb3VnaCAnZXF1YWxwcmcnCit8PT18CSAgIE4gID09CWZpbHRlciBOIGxpbmVzIHRocm91Z2ggJ2VxdWFscHJnJworfHZfPXwJICAgICAge3Zpc3VhbH09CisJCQlmaWx0ZXIgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIHRocm91Z2ggJ2VxdWFscHJnJworfDpzfAkgICA6W3JhbmdlXXNbdWJzdGl0dXRlXS97cGF0dGVybn0ve3N0cmluZ30vW2ddW2NdCisJCQlzdWJzdGl0dXRlIHtwYXR0ZXJufSBieSB7c3RyaW5nfSBpbiBbcmFuZ2VdIGxpbmVzOworCQkJICAgd2l0aCBbZ10sIHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mIHtwYXR0ZXJufTsKKwkJCSAgIHdpdGggW2NdLCBjb25maXJtIGVhY2ggcmVwbGFjZW1lbnQKK3w6c3wJICAgOltyYW5nZV1zW3Vic3RpdHV0ZV0gW2ddW2NdCisJCQlyZXBlYXQgcHJldmlvdXMgIjpzIiB3aXRoIG5ldyByYW5nZSBhbmQgb3B0aW9ucworfCZ8CSAgICAgICYJCVJlcGVhdCBwcmV2aW91cyAiOnMiIG9uIGN1cnJlbnQgbGluZSB3aXRob3V0IG9wdGlvbnMKK3w6cmV0fAkgICA6W3JhbmdlXXJldFthYl1bIV0gW3RhYnN0b3BdCisJCQlzZXQgJ3RhYnN0b3AnIHRvIG5ldyB2YWx1ZSBhbmQgYWRqdXN0IHdoaXRlIHNwYWNlCisJCQkgICBhY2NvcmRpbmdseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV92aSoJCVZpc3VhbCBtb2RlCisKK3x2aXN1YWwtaW5kZXh8CWxpc3Qgb2YgVmlzdWFsIG1vZGUgY29tbWFuZHMuCisKK3x2fAkgICB2CQlzdGFydCBoaWdobGlnaHRpbmcgY2hhcmFjdGVycyAgfSAgbW92ZSBjdXJzb3IgYW5kIHVzZQorfFZ8CSAgIFYJCXN0YXJ0IGhpZ2hsaWdodGluZyBsaW5ld2lzZSAgICB9ICBvcGVyYXRvciB0byBhZmZlY3QKK3xDVFJMLVZ8ICAgQ1RSTC1WCXN0YXJ0IGhpZ2hsaWdodGluZyBibG9ja3dpc2UgICB9ICBoaWdobGlnaHRlZCB0ZXh0Cit8dl9vfAkgICBvCQlleGNoYW5nZSBjdXJzb3IgcG9zaXRpb24gd2l0aCBzdGFydCBvZiBoaWdobGlnaHRpbmcKK3xndnwJICAgZ3YJCXN0YXJ0IGhpZ2hsaWdodGluZyBvbiBwcmV2aW91cyB2aXN1YWwgYXJlYQorfHZfdnwJICAgdgkJaGlnaGxpZ2h0IGNoYXJhY3RlcnMgb3Igc3RvcCBoaWdobGlnaHRpbmcKK3x2X1Z8CSAgIFYJCWhpZ2hsaWdodCBsaW5ld2lzZSBvciBzdG9wIGhpZ2hsaWdodGluZworfHZfQ1RSTC1WfCBDVFJMLVYJaGlnaGxpZ2h0IGJsb2Nrd2lzZSBvciBzdG9wIGhpZ2hsaWdodGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV90byoJCVRleHQgb2JqZWN0cyAob25seSBpbiBWaXN1YWwgbW9kZSBvciBhZnRlciBhbiBvcGVyYXRvcikKKworfHZfYXd8CU4gIGF3CQlTZWxlY3QgImEgd29yZCIKK3x2X2l3fAlOICBpdwkJU2VsZWN0ICJpbm5lciB3b3JkIgorfHZfYVd8CU4gIGFXCQlTZWxlY3QgImEgfFdPUkR8IgorfHZfaVd8CU4gIGlXCQlTZWxlY3QgImlubmVyIHxXT1JEfCIKK3x2X2FzfAlOICBhcwkJU2VsZWN0ICJhIHNlbnRlbmNlIgorfHZfaXN8CU4gIGlzCQlTZWxlY3QgImlubmVyIHNlbnRlbmNlIgorfHZfYXB8CU4gIGFwCQlTZWxlY3QgImEgcGFyYWdyYXBoIgorfHZfaXB8CU4gIGlwCQlTZWxlY3QgImlubmVyIHBhcmFncmFwaCIKK3x2X2FifAlOICBhYgkJU2VsZWN0ICJhIGJsb2NrIiAoZnJvbSAiWygiIHRvICJdKSIpCit8dl9pYnwJTiAgaWIJCVNlbGVjdCAiaW5uZXIgYmxvY2siIChmcm9tICJbKCIgdG8gIl0pIikKK3x2X2FCfAlOICBhQgkJU2VsZWN0ICJhIEJsb2NrIiAoZnJvbSAiW3siIHRvICJdfSIpCit8dl9pQnwJTiAgaUIJCVNlbGVjdCAiaW5uZXIgQmxvY2siIChmcm9tICJbeyIgdG8gIl19IikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfcmUqCQlSZXBlYXRpbmcgY29tbWFuZHMKKworfC58CSAgIE4gIC4JCXJlcGVhdCBsYXN0IGNoYW5nZSAod2l0aCBjb3VudCByZXBsYWNlZCB3aXRoIE4pCit8cXwJICAgICAgcXthLXp9CXJlY29yZCB0eXBlZCBjaGFyYWN0ZXJzIGludG8gcmVnaXN0ZXIge2Eten0KK3xxfAkgICAgICBxe0EtWn0JcmVjb3JkIHR5cGVkIGNoYXJhY3RlcnMsIGFwcGVuZGVkIHRvIHJlZ2lzdGVyIHthLXp9Cit8cXwJICAgICAgcQkJc3RvcCByZWNvcmRpbmcKK3xAfAkgICBOICBAe2Eten0JZXhlY3V0ZSB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIge2Eten0gKE4gdGltZXMpCit8QEB8CSAgIE4gIEBACSAgIHJlcGVhdCBwcmV2aW91cyBAe2Eten0gKE4gdGltZXMpCit8OkB8CSAgIDpAe2Eten0JZXhlY3V0ZSB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIge2Eten0gYXMgYW4gRXgKKwkJCSAgIGNvbW1hbmQKK3w6QEB8CSAgIDpAQAkJcmVwZWF0IHByZXZpb3VzIDpAe2Eten0KK3w6Z3wJICAgOltyYW5nZV1nW2xvYmFsXS97cGF0dGVybn0vW2NtZF0KKwkJCUV4ZWN1dGUgRXggY29tbWFuZCBbY21kXSAoZGVmYXVsdDogIjpwIikgb24gdGhlIGxpbmVzCisJCQkgICB3aXRoaW4gW3JhbmdlXSB3aGVyZSB7cGF0dGVybn0gbWF0Y2hlcy4KK3w6Z3wJICAgOltyYW5nZV1nW2xvYmFsXSEve3BhdHRlcm59L1tjbWRdCisJCQlFeGVjdXRlIEV4IGNvbW1hbmQgW2NtZF0gKGRlZmF1bHQ6ICI6cCIpIG9uIHRoZSBsaW5lcworCQkJICAgd2l0aGluIFtyYW5nZV0gd2hlcmUge3BhdHRlcm59IGRvZXMgTk9UIG1hdGNoLgorfDpzb3wJICAgOnNvW3VyY2VdIHtmaWxlfQorCQkJUmVhZCBFeCBjb21tYW5kcyBmcm9tIHtmaWxlfS4KK3w6c298CSAgIDpzb1t1cmNlXSEge2ZpbGV9CisJCQlSZWFkIFZpbSBjb21tYW5kcyBmcm9tIHtmaWxlfS4KK3w6c2x8CSAgIDpzbFtlZXBdIFtzZWNdCisJCQlkb24ndCBkbyBhbnl0aGluZyBmb3IgW3NlY10gc2Vjb25kcworfGdzfAkgICBOICBncwlHb3RvIFNsZWVwIGZvciBOIHNlY29uZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfa20qCQlLZXkgbWFwcGluZworCit8Om1hcHwJICAgICA6bWFbcF0ge2xoc30ge3Joc30JICBNYXAge2xoc30gdG8ge3Joc30gaW4gTm9ybWFsIGFuZCBWaXN1YWwKKwkJCQkgICAgIG1vZGUuCit8Om1hcCF8CSAgICAgOm1hW3BdISB7bGhzfSB7cmhzfSAgTWFwIHtsaHN9IHRvIHtyaHN9IGluIEluc2VydCBhbmQgQ29tbWFuZC1saW5lCisJCQkJICAgICBtb2RlLgorfDpub3JlbWFwfCAgIDpub1tyZW1hcF1bIV0ge2xoc30ge3Joc30KKwkJCQkgIFNhbWUgYXMgIjptYXAiLCBubyByZW1hcHBpbmcgZm9yIHRoaXMge3Joc30KK3w6dW5tYXB8ICAgICA6dW5tW2FwXSB7bGhzfQkgIFJlbW92ZSB0aGUgbWFwcGluZyBvZiB7bGhzfSBmb3IgTm9ybWFsIGFuZAorCQkJCSAgICAgVmlzdWFsIG1vZGUuCit8OnVubWFwIXwgICAgOnVubVthcF0hIHtsaHN9CSAgUmVtb3ZlIHRoZSBtYXBwaW5nIG9mIHtsaHN9IGZvciBJbnNlcnQgYW5kCisJCQkJICAgICBDb21tYW5kLWxpbmUgbW9kZS4KK3w6bWFwX2x8ICAgICA6bWFbcF0gW2xoc10JICBMaXN0IG1hcHBpbmdzIChzdGFydGluZyB3aXRoIFtsaHNdKSBmb3IKKwkJCQkgICAgIE5vcm1hbCBhbmQgVmlzdWFsIG1vZGUuCit8Om1hcF9sIXwgICAgOm1hW3BdISBbbGhzXQkgIExpc3QgbWFwcGluZ3MgKHN0YXJ0aW5nIHdpdGggW2xoc10pIGZvcgorCQkJCSAgICAgSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZS4KK3w6Y21hcHwJICAgICA6Y21hcC86Y3VubWFwLzpjbm9yZW1hcAorCQkJCSAgbGlrZSAiOm1hcCEiLyI6dW5tYXAhIi8iOm5vcmVtYXAhIiBidXQgZm9yCisJCQkJICAgICBDb21tYW5kLWxpbmUgbW9kZSBvbmx5Cit8OmltYXB8CSAgICAgOmltYXAvOml1bm1hcC86aW5vcmVtYXAKKwkJCQkgIGxpa2UgIjptYXAhIi8iOnVubWFwISIvIjpub3JlbWFwISIgYnV0IGZvcgorCQkJCSAgICAgSW5zZXJ0IG1vZGUgb25seQorfDpubWFwfAkgICAgIDpubWFwLzpudW5tYXAvOm5ub3JlbWFwCisJCQkJICBsaWtlICI6bWFwIi8iOnVubWFwIi8iOm5vcmVtYXAiIGJ1dCBmb3IKKwkJCQkgICAgIE5vcm1hbCBtb2RlIG9ubHkKK3w6dm1hcHwJICAgICA6dm1hcC86dnVubWFwLzp2bm9yZW1hcAorCQkJCSAgbGlrZSAiOm1hcCIvIjp1bm1hcCIvIjpub3JlbWFwIiBidXQgZm9yCisJCQkJICAgICBWaXN1YWwgbW9kZSBvbmx5Cit8Om9tYXB8CSAgICAgOm9tYXAvOm91bm1hcC86b25vcmVtYXAKKwkJCQkgIGxpa2UgIjptYXAiLyI6dW5tYXAiLyI6bm9yZW1hcCIgYnV0IG9ubHkgZm9yCisJCQkJICAgICB3aGVuIGFuIG9wZXJhdG9yIGlzIHBlbmRpbmcKK3w6bWFwY3wgICAgICA6bWFwY1tsZWFyXQkgIHJlbW92ZSBtYXBwaW5ncyBmb3IgTm9ybWFsIGFuZCBWaXN1YWwgbW9kZQorfDptYXBjfCAgICAgIDptYXBjW2xlYXJdIQkgIHJlbW92ZSBtYXBwaW5ncyBmb3IgSW5zZXJ0IGFuZCBDbWRsaW5lIG1vZGUKK3w6aW1hcGN8ICAgICA6aW1hcGNbbGVhcl0JICByZW1vdmUgbWFwcGluZ3MgZm9yIEluc2VydCBtb2RlCit8OnZtYXBjfCAgICAgOnZtYXBjW2xlYXJdCSAgcmVtb3ZlIG1hcHBpbmdzIGZvciBWaXN1YWwgbW9kZQorfDpvbWFwY3wgICAgIDpvbWFwY1tsZWFyXQkgIHJlbW92ZSBtYXBwaW5ncyBmb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlCit8Om5tYXBjfCAgICAgOm5tYXBjW2xlYXJdCSAgcmVtb3ZlIG1hcHBpbmdzIGZvciBOb3JtYWwgbW9kZQorfDpjbWFwY3wgICAgIDpjbWFwY1tsZWFyXQkgIHJlbW92ZSBtYXBwaW5ncyBmb3IgQ21kbGluZSBtb2RlCit8Om1rZXhyY3wgICAgOm1rW2V4cmNdWyFdIFtmaWxlXSAgd3JpdGUgY3VycmVudCBtYXBwaW5ncywgYWJicmV2aWF0aW9ucywgYW5kCisJCQkJICAgICBzZXR0aW5ncyB0byBbZmlsZV0gKGRlZmF1bHQ6ICIuZXhyYyI7CisJCQkJICAgICB1c2UgISB0byBvdmVyd3JpdGUpCit8Om1rdmltcmN8ICAgOm1rdltpbXJjXVshXSBbZmlsZV0KKwkJCQkgIHNhbWUgYXMgIjpta2V4cmMiLCBidXQgd2l0aCBkZWZhdWx0ICIudmltcmMiCit8Om1rc2Vzc2lvbnwgOm1rc1tlc3Npb25dWyFdIFtmaWxlXQorCQkJCSAgbGlrZSAiOm1rdmltcmMiLCBidXQgc3RvcmUgY3VycmVudCBmaWxlcywKKwkJCQkgICAgIHdpbmRvd3MsIGV0Yy4gdG9vLCB0byBiZSBhYmxlIHRvIGNvbnRpbnVlCisJCQkJICAgICB0aGlzIHNlc3Npb24gbGF0ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2FiKgkJQWJicmV2aWF0aW9ucworCit8OmFiYnJldmlhdGV8CTphYlticmV2aWF0ZV0ge2xoc30ge3Joc30gIGFkZCBhYmJyZXZpYXRpb24gZm9yIHtsaHN9IHRvIHtyaHN9Cit8OmFiYnJldmlhdGV8CTphYlticmV2aWF0ZV0ge2xoc30JICAgc2hvdyBhYmJyJ3MgdGhhdCBzdGFydCB3aXRoIHtsaHN9Cit8OmFiYnJldmlhdGV8CTphYlticmV2aWF0ZV0JCSAgIHNob3cgYWxsIGFiYnJldmlhdGlvbnMKK3w6dW5hYmJyZXZpYXRlfAk6dW5hW2JicmV2aWF0ZV0ge2xoc30JICAgcmVtb3ZlIGFiYnJldmlhdGlvbiBmb3Ige2xoc30KK3w6bm9yZWFiYnJldnwJOm5vcmVhW2JicmV2XSBbbGhzXSBbcmhzXSAgbGlrZSAiOmFiIiwgYnV0IGRvbid0IHJlbWFwIFtyaHNdCit8OmlhYmJyZXZ8CTppYWIvOml1bmFiLzppbm9yZWFiCSAgIGxpa2UgIjphYiIsIGJ1dCBvbmx5IGZvciBJbnNlcnQgbW9kZQorfDpjYWJicmV2fAk6Y2FiLzpjdW5hYi86Y25vcmVhYgkgICBsaWtlICI6YWIiLCBidXQgb25seSBmb3IKKwkJCQkJCUNvbW1hbmQtbGluZSBtb2RlCit8OmFiY2xlYXJ8CTphYmNbbGVhcl0JCSAgIHJlbW92ZSBhbGwgYWJicmV2aWF0aW9ucworfDpjYWJjbGVhcnwJOmNhYmNbbGVhcl0JCSAgIHJlbW92ZSBhbGwgYWJicidzIGZvciBDbWRsaW5lIG1vZGUKK3w6aWFiY2xlYXJ8CTppYWJjW2xlYXJdCQkgICByZW1vdmUgYWxsIGFiYnIncyBmb3IgSW5zZXJ0IG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfb3AqCQlPcHRpb25zCisKK3w6c2V0fAkJOnNlW3RdCQkJICBTaG93IGFsbCBtb2RpZmllZCBvcHRpb25zLgorfDpzZXR8CQk6c2VbdF0gYWxsCQkgIFNob3cgYWxsIG5vbi10ZXJtY2FwIG9wdGlvbnMuCit8OnNldHwJCTpzZVt0XSB0ZXJtY2FwCQkgIFNob3cgYWxsIHRlcm1jYXAgb3B0aW9ucy4KK3w6c2V0fAkJOnNlW3RdIHtvcHRpb259CQkgIFNldCBib29sZWFuIG9wdGlvbiAoc3dpdGNoIGl0IG9uKSwKKwkJCQkJICBzaG93IHN0cmluZyBvciBudW1iZXIgb3B0aW9uLgorfDpzZXR8CQk6c2VbdF0gbm97b3B0aW9ufQkgIFJlc2V0IGJvb2xlYW4gb3B0aW9uIChzd2l0Y2ggaXQgb2ZmKS4KK3w6c2V0fAkJOnNlW3RdIGludntvcHRpb259CSAgaW52ZXJ0IGJvb2xlYW4gb3B0aW9uLgorfDpzZXR8CQk6c2VbdF0ge29wdGlvbn09e3ZhbHVlfQkgIFNldCBzdHJpbmcvbnVtYmVyIG9wdGlvbiB0byB7dmFsdWV9LgorfDpzZXR8CQk6c2VbdF0ge29wdGlvbn0rPXt2YWx1ZX0gIGFwcGVuZCB7dmFsdWV9IHRvIHN0cmluZyBvcHRpb24sIGFkZAorCQkJCQkgIHt2YWx1ZX0gdG8gbnVtYmVyIG9wdGlvbgorfDpzZXR8CQk6c2VbdF0ge29wdGlvbn0tPXt2YWx1ZX0gIHJlbW92ZSB7dmFsdWV9IHRvIHN0cmluZyBvcHRpb24sCisJCQkJCSAgc3VidHJhY3Qge3ZhbHVlfSBmcm9tIG51bWJlciBvcHRpb24KK3w6c2V0fAkJOnNlW3RdIHtvcHRpb259PwkgIFNob3cgdmFsdWUgb2Yge29wdGlvbn0uCit8OnNldHwJCTpzZVt0XSB7b3B0aW9ufSYJICBSZXNldCB7b3B0aW9ufSB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKworfDpzZXRsb2NhbHwJOnNldGxbb2NhbF0JCSAgbGlrZSAiOnNldCIgYnV0IHNldCB0aGUgbG9jYWwgdmFsdWUKKwkJCQkJICBmb3Igb3B0aW9ucyB0aGF0IGhhdmUgb25lCit8OnNldGdsb2JhbHwJOnNldGdbbG9iYWxdCQkgIGxpa2UgIjpzZXQiIGJ1dCBzZXQgdGhlIGdsb2JhbCB2YWx1ZQorCQkJCQkgIG9mIGEgbG9jYWwgb3B0aW9uCisKK3w6Zml4fAkJOmZpeFtkZWxdCQkgIFNldCB2YWx1ZSBvZiAndF9rRCcgYWNjb3JkaW5nIHRvCisJCQkJCSAgdmFsdWUgb2YgJ3Rfa2InLgorfDpvcHRpb25zfAk6b3B0W2lvbnNdCQkgIE9wZW4gYSBuZXcgd2luZG93IHRvIHZpZXcgYW5kIHNldAorCQkJCQkgIG9wdGlvbnMsIGdyb3VwZWQgYnkgZnVuY3Rpb25hbGl0eSwKKwkJCQkJICBhIG9uZSBsaW5lIGV4cGxhbmF0aW9uIGFuZCBsaW5rcyB0bworCQkJCQkgIHRoZSBoZWxwLgorCitTaG9ydCBleHBsYW5hdGlvbiBvZiBlYWNoIG9wdGlvbjoJCSpvcHRpb24tbGlzdCoKK3wnYWxlcGgnfAkgIHwnYWwnfCAgICAgQVNDSUkgY29kZSBvZiB0aGUgbGV0dGVyIEFsZXBoIChIZWJyZXcpCit8J2FsbG93cmV2aW5zJ3wJICB8J2FyaSd8ICAgIGFsbG93IENUUkwtXyBpbiBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlCit8J2FsdGtleW1hcCd8CSAgfCdha20nfCAgICBmb3IgZGVmYXVsdCBzZWNvbmQgbGFuZ3VhZ2UgKEZhcnNpL0hlYnJldykKK3wnYW1iaXdpZHRoJ3wJICB8J2FtYncnfCAgIHdoYXQgdG8gZG8gd2l0aCBVbmljb2RlIGNoYXJzIG9mIGFtYmlndW91cyB3aWR0aAorfCdhbnRpYWxpYXMnfAkgIHwnYW50aSd8ICAgTWFjIE9TIFg6IHVzZSBzbW9vdGgsIGFudGlhbGlhc2VkIGZvbnRzCit8J2F1dG9jaGRpcid8CSAgfCdhY2QnfCAgICBjaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBmaWxlIGluIHRoZSBjdXJyZW50IHdpbmRvdworfCdhcmFiaWMnfAkgIHwnYXJhYid8ICAgZm9yIEFyYWJpYyBhcyBhIGRlZmF1bHQgc2Vjb25kIGxhbmd1YWdlCit8J2FyYWJpY3NoYXBlJ3wgICB8J2Fyc2hhcGUnfCBkbyBzaGFwaW5nIGZvciBBcmFiaWMgY2hhcmFjdGVycworfCdhdXRvaW5kZW50J3wJICB8J2FpJ3wgICAgIHRha2UgaW5kZW50IGZvciBuZXcgbGluZSBmcm9tIHByZXZpb3VzIGxpbmUKK3wnYXV0b3JlYWQnfAkgIHwnYXInfCAgICAgYXV0b20uIHJlYWQgZmlsZSB3aGVuIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0KK3wnYXV0b3dyaXRlJ3wJICB8J2F3J3wgICAgIGF1dG9tYXRpY2FsbHkgd3JpdGUgZmlsZSBpZiBjaGFuZ2VkCit8J2F1dG93cml0ZWFsbCd8ICB8J2F3YSd8ICAgIGFzICdhdXRvd3JpdGUnLCBidXQgd29ya3Mgd2l0aCBtb3JlIGNvbW1hbmRzCit8J2JhY2tncm91bmQnfAkgIHwnYmcnfCAgICAgImRhcmsiIG9yICJsaWdodCIsIHVzZWQgZm9yIGhpZ2hsaWdodCBjb2xvcnMKK3wnYmFja3NwYWNlJ3wJICB8J2JzJ3wgICAgIGhvdyBiYWNrc3BhY2Ugd29ya3MgYXQgc3RhcnQgb2YgbGluZQorfCdiYWNrdXAnfAkgIHwnYmsnfCAgICAga2VlcCBiYWNrdXAgZmlsZSBhZnRlciBvdmVyd3JpdGluZyBhIGZpbGUKK3wnYmFja3VwY29weSd8CSAgfCdia2MnfCAgICBtYWtlIGJhY2t1cCBhcyBhIGNvcHksIGRvbid0IHJlbmFtZSB0aGUgZmlsZQorfCdiYWNrdXBkaXInfAkgIHwnYmRpcid8ICAgbGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgdGhlIGJhY2t1cCBmaWxlCit8J2JhY2t1cGV4dCd8CSAgfCdiZXgnfCAgICBleHRlbnNpb24gdXNlZCBmb3IgdGhlIGJhY2t1cCBmaWxlCit8J2JhY2t1cHNraXAnfAkgIHwnYnNrJ3wgICAgbm8gYmFja3VwIGZvciBmaWxlcyB0aGF0IG1hdGNoIHRoZXNlIHBhdHRlcm5zCit8J2JhbGxvb25kZWxheSd8ICB8J2JkbGF5J3wgIGRlbGF5IGluIG1TIGJlZm9yZSBhIGJhbGxvb24gbWF5IHBvcCB1cAorfCdiYWxsb29uZXZhbCd8ICAgfCdiZXZhbCd8ICBzd2l0Y2ggb24gYmFsbG9vbiBldmFsdWF0aW9uCit8J2JpbmFyeSd8CSAgfCdiaW4nfCAgICByZWFkL3dyaXRlL2VkaXQgZmlsZSBpbiBiaW5hcnkgbW9kZQorfCdiaW9za2V5J3wJICB8J2Jpb3NrJ3wgIE1TLURPUzogdXNlIGJpb3MgY2FsbHMgZm9yIGlucHV0IGNoYXJhY3RlcnMKK3wnYm9tYid8CQkgICAgIHByZXBlbmQgYSBCeXRlIE9yZGVyIE1hcmsgdG8gdGhlIGZpbGUKK3wnYnJlYWthdCd8CSAgfCdicmsnfCAgICBjaGFyYWN0ZXJzIHRoYXQgbWF5IGNhdXNlIGEgbGluZSBicmVhaworfCdicm93c2VkaXInfAkgIHwnYnNkaXInfCAgd2hpY2ggZGlyZWN0b3J5IHRvIHN0YXJ0IGJyb3dzaW5nIGluCit8J2J1ZmhpZGRlbid8CSAgfCdiaCd8ICAgICB3aGF0IHRvIGRvIHdoZW4gYnVmZmVyIGlzIG5vIGxvbmdlciBpbiB3aW5kb3cKK3wnYnVmbGlzdGVkJ3wJICB8J2JsJ3wgICAgIHdoZXRoZXIgdGhlIGJ1ZmZlciBzaG93cyB1cCBpbiB0aGUgYnVmZmVyIGxpc3QKK3wnYnVmdHlwZSd8CSAgfCdidCd8ICAgICBzcGVjaWFsIHR5cGUgb2YgYnVmZmVyCit8J2Nhc2VtYXAnfAkgIHwnY21wJ3wgICAgc3BlY2lmaWVzIGhvdyBjYXNlIG9mIGxldHRlcnMgaXMgY2hhbmdlZAorfCdjZHBhdGgnfAkgIHwnY2QnfCAgICAgbGlzdCBvZiBkaXJlY3RvcmllcyBzZWFyY2hlZCB3aXRoICI6Y2QiCit8J2NlZGl0J3wJCSAgICAga2V5IHVzZWQgdG8gb3BlbiB0aGUgY29tbWFuZC1saW5lIHdpbmRvdworfCdjaGFyY29udmVydCd8ICAgfCdjY3YnfCAgICBleHByZXNzaW9uIGZvciBjaGFyYWN0ZXIgZW5jb2RpbmcgY29udmVyc2lvbgorfCdjaW5kZW50J3wJICB8J2Npbid8ICAgIGRvIEMgcHJvZ3JhbSBpbmRlbnRpbmcKK3wnY2lua2V5cyd8CSAgfCdjaW5rJ3wgICBrZXlzIHRoYXQgdHJpZ2dlciBpbmRlbnQgd2hlbiAnY2luZGVudCcgaXMgc2V0Cit8J2Npbm9wdGlvbnMnfAkgIHwnY2lubyd8ICAgaG93IHRvIGRvIGluZGVudGluZyB3aGVuICdjaW5kZW50JyBpcyBzZXQKK3wnY2lud29yZHMnfAkgIHwnY2ludyd8ICAgd29yZHMgd2hlcmUgJ3NpJyBhbmQgJ2NpbicgYWRkIGFuIGluZGVudAorfCdjbGlwYm9hcmQnfAkgIHwnY2InfCAgICAgdXNlIHRoZSBjbGlwYm9hcmQgYXMgdGhlIHVubmFtZWQgcmVnaXN0ZXIKK3wnY21kaGVpZ2h0J3wJICB8J2NoJ3wgICAgIG51bWJlciBvZiBsaW5lcyB0byB1c2UgZm9yIHRoZSBjb21tYW5kLWxpbmUKK3wnY21kd2luaGVpZ2h0J3wgIHwnY3doJ3wgICAgaGVpZ2h0IG9mIHRoZSBjb21tYW5kLWxpbmUgd2luZG93Cit8J2NvbHVtbnMnfAkgIHwnY28nfCAgICAgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGRpc3BsYXkKK3wnY29tbWVudHMnfAkgIHwnY29tJ3wgICAgcGF0dGVybnMgdGhhdCBjYW4gc3RhcnQgYSBjb21tZW50IGxpbmUKK3wnY29tbWVudHN0cmluZyd8IHwnY21zJ3wgICAgdGVtcGxhdGUgZm9yIGNvbW1lbnRzOyB1c2VkIGZvciBmb2xkIG1hcmtlcgorfCdjb21wYXRpYmxlJ3wJICB8J2NwJ3wgICAgIGJlaGF2ZSBWaS1jb21wYXRpYmxlIGFzIG11Y2ggYXMgcG9zc2libGUKK3wnY29tcGxldGUnfAkgIHwnY3B0J3wgICAgc3BlY2lmeSBob3cgSW5zZXJ0IG1vZGUgY29tcGxldGlvbiB3b3JrcworfCdjb25maXJtJ3wJICB8J2NmJ3wgICAgIGFzayB3aGF0IHRvIGRvIGFib3V0IHVuc2F2ZWQvcmVhZC1vbmx5IGZpbGVzCit8J2NvbnNrZXknfAkgIHwnY29uc2snfCAgZ2V0IGtleXMgZGlyZWN0bHkgZnJvbSBjb25zb2xlIChNUy1ET1Mgb25seSkKK3wnY29weWluZGVudCd8ICAgIHwnY2knfCAgICAgbWFrZSAnYXV0b2luZGVudCcgdXNlIGV4aXN0aW5nIGluZGVudCBzdHJ1Y3R1cmUKK3wnY3BvcHRpb25zJ3wJICB8J2Nwbyd8ICAgIGZsYWdzIGZvciBWaS1jb21wYXRpYmxlIGJlaGF2aW9yCit8J2NzY29wZXBhdGhjb21wJ3wgfCdjc3BjJ3wgIGhvdyBtYW55IGNvbXBvbmVudHMgb2YgdGhlIHBhdGggdG8gc2hvdworfCdjc2NvcGVwcmcnfAkgIHwnY3NwcmcnfCAgY29tbWFuZCB0byBleGVjdXRlIGNzY29wZQorfCdjc2NvcGVxdWlja2ZpeCd8IHwnY3NxZid8ICB1c2UgcXVpY2tmaXggd2luZG93IGZvciBjc2NvcGUgcmVzdWx0cworfCdjc2NvcGV0YWcnfAkgIHwnY3N0J3wgICAgdXNlIGNzY29wZSBmb3IgdGFnIGNvbW1hbmRzCit8J2NzY29wZXRhZ29yZGVyJ3wgfCdjc3RvJ3wgIGRldGVybWluZXMgIjpjc3RhZyIgc2VhcmNoIG9yZGVyCit8J2NzY29wZXZlcmJvc2UnfCB8J2NzdmVyYid8IGdpdmUgbWVzc2FnZXMgd2hlbiBhZGRpbmcgYSBjc2NvcGUgZGF0YWJhc2UKK3wnZGVidWcnfAkJICAgICBzZXQgdG8gIm1zZyIgdG8gc2VlIGFsbCBlcnJvciBtZXNzYWdlcworfCdkZWZpbmUnfAkgIHwnZGVmJ3wgICAgcGF0dGVybiB0byBiZSB1c2VkIHRvIGZpbmQgYSBtYWNybyBkZWZpbml0aW9uCit8J2RlbGNvbWJpbmUnfAkgIHwnZGVjbyd8ICAgZGVsZXRlIGNvbWJpbmluZyBjaGFyYWN0ZXJzIG9uIHRoZWlyIG93bgorfCdkaWN0aW9uYXJ5J3wJICB8J2RpY3QnfCAgIGxpc3Qgb2YgZmlsZSBuYW1lcyB1c2VkIGZvciBrZXl3b3JkIGNvbXBsZXRpb24KK3wnZGlmZid8CQkgICAgIHVzZSBkaWZmIG1vZGUgZm9yIHRoZSBjdXJyZW50IHdpbmRvdworfCdkaWZmZXhwcid8CSAgfCdkZXgnfCAgICBleHByZXNzaW9uIHVzZWQgdG8gb2J0YWluIGEgZGlmZiBmaWxlCit8J2RpZmZvcHQnfAkgIHwnZGlwJ3wgICAgb3B0aW9ucyBmb3IgdXNpbmcgZGlmZiBtb2RlCit8J2RpZ3JhcGgnfAkgIHwnZGcnfCAgICAgZW5hYmxlIHRoZSBlbnRlcmluZyBvZiBkaWdyYXBocyBpbiBJbnNlcnQgbW9kZQorfCdkaXJlY3RvcnknfAkgIHwnZGlyJ3wgICAgbGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBzd2FwIGZpbGUKK3wnZGlzcGxheSd8CSAgfCdkeSd8ICAgICBsaXN0IG9mIGZsYWdzIGZvciBob3cgdG8gZGlzcGxheSB0ZXh0Cit8J2VhZGlyZWN0aW9uJ3wgICB8J2VhZCd8ICAgIGluIHdoaWNoIGRpcmVjdGlvbiAnZXF1YWxhbHdheXMnIHdvcmtzCit8J2VkY29tcGF0aWJsZSd8ICB8J2VkJ3wgICAgIHRvZ2dsZSBmbGFncyBvZiAiOnN1YnN0aXR1dGUiIGNvbW1hbmQKK3wnZW5jb2RpbmcnfAkgIHwnZW5jJ3wgICAgZW5jb2RpbmcgdXNlZCBpbnRlcm5hbGx5Cit8J2VuZG9mbGluZSd8CSAgfCdlb2wnfCAgICB3cml0ZSA8RU9MPiBmb3IgbGFzdCBsaW5lIGluIGZpbGUKK3wnZXF1YWxhbHdheXMnfCAgIHwnZWEnfCAgICAgd2luZG93cyBhcmUgYXV0b21hdGljYWxseSBtYWRlIHRoZSBzYW1lIHNpemUKK3wnZXF1YWxwcmcnfAkgIHwnZXAnfCAgICAgZXh0ZXJuYWwgcHJvZ3JhbSB0byB1c2UgZm9yICI9IiBjb21tYW5kCit8J2Vycm9yYmVsbHMnfAkgIHwnZWInfCAgICAgcmluZyB0aGUgYmVsbCBmb3IgZXJyb3IgbWVzc2FnZXMKK3wnZXJyb3JmaWxlJ3wJICB8J2VmJ3wgICAgIG5hbWUgb2YgdGhlIGVycm9yZmlsZSBmb3IgdGhlIFF1aWNrRml4IG1vZGUKK3wnZXJyb3Jmb3JtYXQnfCAgIHwnZWZtJ3wgICAgZGVzY3JpcHRpb24gb2YgdGhlIGxpbmVzIGluIHRoZSBlcnJvciBmaWxlCit8J2VzY2tleXMnfAkgIHwnZWsnfCAgICAgcmVjb2duaXplIGZ1bmN0aW9uIGtleXMgaW4gSW5zZXJ0IG1vZGUKK3wnZXZlbnRpZ25vcmUnfAkgIHwnZWknfCAgICAgYXV0b2NvbW1hbmQgZXZlbnRzIHRoYXQgYXJlIGlnbm9yZWQKK3wnZXhwYW5kdGFiJ3wJICB8J2V0J3wgICAgIHVzZSBzcGFjZXMgd2hlbiA8VGFiPiBpcyBpbnNlcnRlZAorfCdleHJjJ3wJICB8J2V4J3wgICAgIHJlYWQgLnZpbXJjIGFuZCAuZXhyYyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKK3wnZmlsZWVuY29kaW5nJ3wgIHwnZmVuYyd8ICAgZmlsZSBlbmNvZGluZyBmb3IgbXVsdGktYnl0ZSB0ZXh0Cit8J2ZpbGVlbmNvZGluZ3MnfCB8J2ZlbmNzJ3wgIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgY2hhcmFjdGVyIGVuY29kaW5ncworfCdmaWxlZm9ybWF0J3wJICB8J2ZmJ3wgICAgIGZpbGUgZm9ybWF0IHVzZWQgZm9yIGZpbGUgSS9PCit8J2ZpbGVmb3JtYXRzJ3wJICB8J2Zmcyd8ICAgIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgdmFsdWVzIGZvciAnZmlsZWZvcm1hdCcKK3wnZmlsZXR5cGUnfAkgIHwnZnQnfCAgICAgdHlwZSBvZiBmaWxlLCB1c2VkIGZvciBhdXRvY29tbWFuZHMKK3wnZmlsbGNoYXJzJ3wJICB8J2Zjcyd8ICAgIGNoYXJhY3RlcnMgdG8gdXNlIGZvciBkaXNwbGF5aW5nIHNwZWNpYWwgaXRlbXMKK3wnZmttYXAnfAkgIHwnZmsnfCAgICAgRmFyc2kga2V5Ym9hcmQgbWFwcGluZworfCdmb2xkY2xvc2UnfAkgIHwnZmNsJ3wgICAgY2xvc2UgYSBmb2xkIHdoZW4gdGhlIGN1cnNvciBsZWF2ZXMgaXQKK3wnZm9sZGNvbHVtbid8CSAgfCdmZGMnfCAgICB3aWR0aCBvZiB0aGUgY29sdW1uIHVzZWQgdG8gaW5kaWNhdGUgZm9sZHMKK3wnZm9sZGVuYWJsZSd8CSAgfCdmZW4nfCAgICBzZXQgdG8gZGlzcGxheSBhbGwgZm9sZHMgb3BlbgorfCdmb2xkZXhwcid8CSAgfCdmZGUnfCAgICBleHByZXNzaW9uIHVzZWQgd2hlbiAnZm9sZG1ldGhvZCcgaXMgImV4cHIiCit8J2ZvbGRpZ25vcmUnfAkgIHwnZmRpJ3wgICAgaWdub3JlIGxpbmVzIHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJpbmRlbnQiCit8J2ZvbGRsZXZlbCd8CSAgfCdmZGwnfCAgICBjbG9zZSBmb2xkcyB3aXRoIGEgbGV2ZWwgaGlnaGVyIHRoYW4gdGhpcworfCdmb2xkbGV2ZWxzdGFydCd8IHwnZmRscyd8ICAnZm9sZGxldmVsJyB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlCit8J2ZvbGRtYXJrZXInfAkgIHwnZm1yJ3wgICAgbWFya2VycyB1c2VkIHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJtYXJrZXIiCit8J2ZvbGRtZXRob2QnfAkgIHwnZmRtJ3wgICAgZm9sZGluZyB0eXBlCit8J2ZvbGRtaW5saW5lcyd8ICB8J2ZtbCd8ICAgIG1pbmltdW0gbnVtYmVyIG9mIGxpbmVzIGZvciBhIGZvbGQgdG8gYmUgY2xvc2VkCit8J2ZvbGRuZXN0bWF4J3wgICB8J2Zkbid8ICAgIG1heGltdW0gZm9sZCBkZXB0aAorfCdmb2xkb3Blbid8CSAgfCdmZG8nfCAgICBmb3Igd2hpY2ggY29tbWFuZHMgYSBmb2xkIHdpbGwgYmUgb3BlbmVkCit8J2ZvbGR0ZXh0J3wJICB8J2ZkdCd8ICAgIGV4cHJlc3Npb24gdXNlZCB0byBkaXNwbGF5IGZvciBhIGNsb3NlZCBmb2xkCit8J2Zvcm1hdG9wdGlvbnMnfCB8J2ZvJ3wgICAgIGhvdyBhdXRvbWF0aWMgZm9ybWF0dGluZyBpcyB0byBiZSBkb25lCit8J2Zvcm1hdHByZyd8CSAgfCdmcCd8ICAgICBuYW1lIG9mIGV4dGVybmFsIHByb2dyYW0gdXNlZCB3aXRoICJncSIgY29tbWFuZAorfCdnZGVmYXVsdCd8CSAgfCdnZCd8ICAgICB0aGUgIjpzdWJzdGl0dXRlIiBmbGFnICdnJyBpcyBkZWZhdWx0IG9uCit8J2dyZXBmb3JtYXQnfAkgIHwnZ2ZtJ3wgICAgZm9ybWF0IG9mICdncmVwcHJnJyBvdXRwdXQKK3wnZ3JlcHByZyd8CSAgfCdncCd8ICAgICBwcm9ncmFtIHRvIHVzZSBmb3IgIjpncmVwIgorfCdndWljdXJzb3InfAkgIHwnZ2NyJ3wgICAgR1VJOiBzZXR0aW5ncyBmb3IgY3Vyc29yIHNoYXBlIGFuZCBibGlua2luZworfCdndWlmb250J3wJICB8J2dmbid8ICAgIEdVSTogTmFtZShzKSBvZiBmb250KHMpIHRvIGJlIHVzZWQKK3wnZ3VpZm9udHNldCd8CSAgfCdnZnMnfCAgICBHVUk6IE5hbWVzIG9mIG11bHRpLWJ5dGUgZm9udHMgdG8gYmUgdXNlZAorfCdndWlmb250d2lkZSd8ICAgfCdnZncnfCAgICBsaXN0IG9mIGZvbnQgbmFtZXMgZm9yIGRvdWJsZS13aWRlIGNoYXJhY3RlcnMKK3wnZ3VpaGVhZHJvb20nfAkgIHwnZ2hyJ3wgICAgR1VJOiBwaXhlbHMgcm9vbSBmb3Igd2luZG93IGRlY29yYXRpb25zCit8J2d1aW9wdGlvbnMnfAkgIHwnZ28nfCAgICAgR1VJOiBXaGljaCBjb21wb25lbnRzIGFuZCBvcHRpb25zIGFyZSB1c2VkCit8J2d1aXB0eSd8CQkgICAgIEdVSTogdHJ5IHRvIHVzZSBhIHBzZXVkby10dHkgZm9yICI6ISIgY29tbWFuZHMKK3wnaGVscGZpbGUnfAkgIHwnaGYnfCAgICAgZnVsbCBwYXRoIG5hbWUgb2YgdGhlIG1haW4gaGVscCBmaWxlCit8J2hlbHBoZWlnaHQnfAkgIHwnaGgnfCAgICAgbWluaW11bSBoZWlnaHQgb2YgYSBuZXcgaGVscCB3aW5kb3cKK3wnaGVscGxhbmcnfAkgIHwnaGxnJ3wgICAgcHJlZmVycmVkIGhlbHAgbGFuZ3VhZ2VzCit8J2hpZGRlbid8CSAgfCdoaWQnfCAgICBkb24ndCB1bmxvYWQgYnVmZmVyIHdoZW4gaXQgaXMgfGFiYW5kb258ZWQKK3wnaGlnaGxpZ2h0J3wJICB8J2hsJ3wgICAgIHNldHMgaGlnaGxpZ2h0aW5nIG1vZGUgZm9yIHZhcmlvdXMgb2NjYXNpb25zCit8J2hsc2VhcmNoJ3wJICB8J2hscyd8ICAgIGhpZ2hsaWdodCBtYXRjaGVzIHdpdGggbGFzdCBzZWFyY2ggcGF0dGVybgorfCdoaXN0b3J5J3wJICB8J2hpJ3wgICAgIG51bWJlciBvZiBjb21tYW5kLWxpbmVzIHRoYXQgYXJlIHJlbWVtYmVyZWQKK3wnaGttYXAnfAkgIHwnaGsnfCAgICAgSGVicmV3IGtleWJvYXJkIG1hcHBpbmcKK3wnaGttYXBwJ3wJICB8J2hrcCd8ICAgIHBob25ldGljIEhlYnJldyBrZXlib2FyZCBtYXBwaW5nCit8J2ljb24nfAkJICAgICBsZXQgVmltIHNldCB0aGUgdGV4dCBvZiB0aGUgd2luZG93IGljb24KK3wnaWNvbnN0cmluZyd8CQkgICAgIHN0cmluZyB0byB1c2UgZm9yIHRoZSBWaW0gaWNvbiB0ZXh0Cit8J2lnbm9yZWNhc2UnfAkgIHwnaWMnfCAgICAgaWdub3JlIGNhc2UgaW4gc2VhcmNoIHBhdHRlcm5zCit8J2ltYWN0aXZhdGVrZXknfCB8J2ltYWsnfCAgIGtleSB0aGF0IGFjdGl2YXRlcyB0aGUgWCBpbnB1dCBtZXRob2QKK3wnaW1jbWRsaW5lJ3wJICB8J2ltYyd8ICAgIHVzZSBJTSB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBjb21tYW5kIGxpbmUKK3wnaW1kaXNhYmxlJ3wJICB8J2ltZCd8ICAgIGRvIG5vdCB1c2UgdGhlIElNIGluIGFueSBtb2RlCit8J2ltaW5zZXJ0J3wJICB8J2ltaSd8ICAgIHVzZSA6bG1hcCBvciBJTSBpbiBJbnNlcnQgbW9kZQorfCdpbXNlYXJjaCd8CSAgfCdpbXMnfCAgICB1c2UgOmxtYXAgb3IgSU0gd2hlbiB0eXBpbmcgYSBzZWFyY2ggcGF0dGVybgorfCdpbmNsdWRlJ3wJICB8J2luYyd8ICAgIHBhdHRlcm4gdG8gYmUgdXNlZCB0byBmaW5kIGFuIGluY2x1ZGUgZmlsZQorfCdpbmNsdWRlZXhwcid8ICAgfCdpbmV4J3wgICBleHByZXNzaW9uIHVzZWQgdG8gcHJvY2VzcyBhbiBpbmNsdWRlIGxpbmUKK3wnaW5jc2VhcmNoJ3wJICB8J2lzJ3wgICAgIGhpZ2hsaWdodCBtYXRjaCB3aGlsZSB0eXBpbmcgc2VhcmNoIHBhdHRlcm4KK3wnaW5kZW50ZXhwcid8CSAgfCdpbmRlJ3wgICBleHByZXNzaW9uIHVzZWQgdG8gb2J0YWluIHRoZSBpbmRlbnQgb2YgYSBsaW5lCit8J2luZGVudGtleXMnfAkgIHwnaW5kayd8ICAga2V5cyB0aGF0IHRyaWdnZXIgaW5kZW50aW5nIHdpdGggJ2luZGVudGV4cHInCit8J2luZmVyY2FzZSd8CSAgfCdpbmYnfCAgICBhZGp1c3QgY2FzZSBvZiBtYXRjaCBmb3Iga2V5d29yZCBjb21wbGV0aW9uCit8J2luc2VydG1vZGUnfAkgIHwnaW0nfCAgICAgc3RhcnQgdGhlIGVkaXQgb2YgYSBmaWxlIGluIEluc2VydCBtb2RlCit8J2lzZm5hbWUnfAkgIHwnaXNmJ3wgICAgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiBmaWxlIG5hbWVzIGFuZCBwYXRobmFtZXMKK3wnaXNpZGVudCd8CSAgfCdpc2knfCAgICBjaGFyYWN0ZXJzIGluY2x1ZGVkIGluIGlkZW50aWZpZXJzCit8J2lza2V5d29yZCd8CSAgfCdpc2snfCAgICBjaGFyYWN0ZXJzIGluY2x1ZGVkIGluIGtleXdvcmRzCit8J2lzcHJpbnQnfAkgIHwnaXNwJ3wgICAgcHJpbnRhYmxlIGNoYXJhY3RlcnMKK3wnam9pbnNwYWNlcyd8CSAgfCdqcyd8ICAgICB0d28gc3BhY2VzIGFmdGVyIGEgcGVyaW9kIHdpdGggYSBqb2luIGNvbW1hbmQKK3wna2V5J3wJCQkgICAgIGVuY3J5cHRpb24ga2V5Cit8J2tleW1hcCd8CSAgfCdrbXAnfCAgICBuYW1lIG9mIGEga2V5Ym9hcmQgbWFwcGluZworfCdrZXltb2RlbCd8CSAgfCdrbSd8ICAgICBlbmFibGUgc3RhcnRpbmcvc3RvcHBpbmcgc2VsZWN0aW9uIHdpdGgga2V5cworfCdrZXl3b3JkcHJnJ3wJICB8J2twJ3wgICAgIHByb2dyYW0gdG8gdXNlIGZvciB0aGUgIksiIGNvbW1hbmQKK3wnbGFuZ21hcCd8CSAgfCdsbWFwJ3wgICBhbHBoYWJldGljIGNoYXJhY3RlcnMgZm9yIG90aGVyIGxhbmd1YWdlIG1vZGUKK3wnbGFuZ21lbnUnfAkgIHwnbG0nfCAgICAgbGFuZ3VhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lbnVzCit8J2xhc3RzdGF0dXMnfAkgIHwnbHMnfCAgICAgdGVsbHMgd2hlbiBsYXN0IHdpbmRvdyBoYXMgc3RhdHVzIGxpbmVzCit8J2xhenlyZWRyYXcnfAkgIHwnbHonfCAgICAgZG9uJ3QgcmVkcmF3IHdoaWxlIGV4ZWN1dGluZyBtYWNyb3MKK3wnbGluZWJyZWFrJ3wJICB8J2xicid8ICAgIHdyYXAgbG9uZyBsaW5lcyBhdCBhIGJsYW5rCit8J2xpbmVzJ3wJCSAgICAgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBkaXNwbGF5Cit8J2xpbmVzcGFjZSd8CSAgfCdsc3AnfCAgICBudW1iZXIgb2YgcGl4ZWwgbGluZXMgdG8gdXNlIGJldHdlZW4gY2hhcmFjdGVycworfCdsaXNwJ3wJCSAgICAgYXV0b21hdGljIGluZGVudGluZyBmb3IgTGlzcAorfCdsaXNwd29yZHMnfAkgIHwnbHcnfCAgICAgd29yZHMgdGhhdCBjaGFuZ2UgaG93IGxpc3AgaW5kZW50aW5nIHdvcmtzCit8J2xpc3QnfAkJICAgICBzaG93IDxUYWI+IGFuZCA8RU9MPgorfCdsaXN0Y2hhcnMnfAkgIHwnbGNzJ3wgICAgY2hhcmFjdGVycyBmb3IgZGlzcGxheWluZyBpbiBsaXN0IG1vZGUKK3wnbG9hZHBsdWdpbnMnfCAgIHwnbHBsJ3wgICAgbG9hZCBwbHVnaW4gc2NyaXB0cyB3aGVuIHN0YXJ0aW5nIHVwCit8J21hZ2ljJ3wJCSAgICAgY2hhbmdlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gc2VhcmNoIHBhdHRlcm5zCit8J21ha2VlZid8CSAgfCdtZWYnfCAgICBuYW1lIG9mIHRoZSBlcnJvcmZpbGUgZm9yICI6bWFrZSIKK3wnbWFrZXByZyd8CSAgfCdtcCd8ICAgICBwcm9ncmFtIHRvIHVzZSBmb3IgdGhlICI6bWFrZSIgY29tbWFuZAorfCdtYXRjaHBhaXJzJ3wJICB8J21wcyd8ICAgIHBhaXJzIG9mIGNoYXJhY3RlcnMgdGhhdCAiJSIgY2FuIG1hdGNoCit8J21hdGNodGltZSd8CSAgfCdtYXQnfCAgICB0ZW50aHMgb2YgYSBzZWNvbmQgdG8gc2hvdyBtYXRjaGluZyBwYXJlbgorfCdtYXhmdW5jZGVwdGgnfCAgfCdtZmQnfCAgICBtYXhpbXVtIHJlY3Vyc2l2ZSBkZXB0aCBmb3IgdXNlciBmdW5jdGlvbnMKK3wnbWF4bWFwZGVwdGgnfCAgIHwnbW1kJ3wgICAgbWF4aW11bSByZWN1cnNpdmUgZGVwdGggZm9yIG1hcHBpbmcKK3wnbWF4bWVtJ3wJICB8J21tJ3wgICAgIG1heGltdW0gbWVtb3J5IChpbiBLYnl0ZSkgdXNlZCBmb3Igb25lIGJ1ZmZlcgorfCdtYXhtZW10b3QnfAkgIHwnbW10J3wgICAgbWF4aW11bSBtZW1vcnkgKGluIEtieXRlKSB1c2VkIGZvciBhbGwgYnVmZmVycworfCdtZW51aXRlbXMnfAkgIHwnbWlzJ3wgICAgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgaW4gYSBtZW51Cit8J21vZGVsaW5lJ3wJICB8J21sJ3wgICAgIHJlY29nbml6ZSBtb2RlbGluZXMgYXQgc3RhcnQgb3IgZW5kIG9mIGZpbGUKK3wnbW9kZWxpbmVzJ3wJICB8J21scyd8ICAgIG51bWJlciBvZiBsaW5lcyBjaGVja2VkIGZvciBtb2RlbGluZXMKK3wnbW9kaWZpYWJsZSd8CSAgfCdtYSd8ICAgICBjaGFuZ2VzIHRvIHRoZSB0ZXh0IGFyZSBub3QgcG9zc2libGUKK3wnbW9kaWZpZWQnfAkgIHwnbW9kJ3wgICAgYnVmZmVyIGhhcyBiZWVuIG1vZGlmaWVkCit8J21vcmUnfAkJICAgICBwYXVzZSBsaXN0aW5ncyB3aGVuIHRoZSB3aG9sZSBzY3JlZW4gaXMgZmlsbGVkCit8J21vdXNlJ3wJCSAgICAgZW5hYmxlIHRoZSB1c2Ugb2YgbW91c2UgY2xpY2tzCit8J21vdXNlZm9jdXMnfAkgIHwnbW91c2VmJ3wga2V5Ym9hcmQgZm9jdXMgZm9sbG93cyB0aGUgbW91c2UKK3wnbW91c2VoaWRlJ3wJICB8J21oJ3wgICAgIGhpZGUgbW91c2UgcG9pbnRlciB3aGlsZSB0eXBpbmcKK3wnbW91c2Vtb2RlbCd8CSAgfCdtb3VzZW0nfCBjaGFuZ2VzIG1lYW5pbmcgb2YgbW91c2UgYnV0dG9ucworfCdtb3VzZXNoYXBlJ3wJICB8J21vdXNlcyd8IHNoYXBlIG9mIHRoZSBtb3VzZSBwb2ludGVyIGluIGRpZmZlcmVudCBtb2RlcworfCdtb3VzZXRpbWUnfAkgIHwnbW91c2V0J3wgbWF4IHRpbWUgYmV0d2VlbiBtb3VzZSBkb3VibGUtY2xpY2sKK3wnbnJmb3JtYXRzJ3wJICB8J25mJ3wgICAgIG51bWJlciBmb3JtYXRzIHJlY29nbml6ZWQgZm9yIENUUkwtQSBjb21tYW5kCit8J251bWJlcid8CSAgfCdudSd8ICAgICBwcmludCB0aGUgbGluZSBudW1iZXIgaW4gZnJvbnQgb2YgZWFjaCBsaW5lCit8J29zZmlsZXR5cGUnfAkgIHwnb2Z0J3wgICAgb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYyBmaWxldHlwZSBpbmZvcm1hdGlvbgorfCdwYXJhZ3JhcGhzJ3wJICB8J3BhcmEnfCAgIG5yb2ZmIG1hY3JvcyB0aGF0IHNlcGFyYXRlIHBhcmFncmFwaHMKK3wncGFzdGUnfAkJICAgICBhbGxvdyBwYXN0aW5nIHRleHQKK3wncGFzdGV0b2dnbGUnfAkgIHwncHQnfCAgICAga2V5IGNvZGUgdGhhdCBjYXVzZXMgJ3Bhc3RlJyB0byB0b2dnbGUKK3wncGF0Y2hleHByJ3wJICB8J3BleCd8ICAgIGV4cHJlc3Npb24gdXNlZCB0byBwYXRjaCBhIGZpbGUKK3wncGF0Y2htb2RlJ3wJICB8J3BtJ3wgICAgIGtlZXAgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIGEgZmlsZQorfCdwYXRoJ3wJICB8J3BhJ3wgICAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VhcmNoZWQgd2l0aCAiZ2YiIGV0LmFsLgorfCdwcmVzZXJ2ZWluZGVudCd8IHwncGknfCAgICBwcmVzZXJ2ZSB0aGUgaW5kZW50IHN0cnVjdHVyZSB3aGVuIHJlaW5kZW50aW5nCit8J3ByZXZpZXdoZWlnaHQnfCB8J3B2aCd8ICAgIGhlaWdodCBvZiB0aGUgcHJldmlldyB3aW5kb3cKK3wncHJldmlld3dpbmRvdyd8IHwncHZ3J3wgICAgaWRlbnRpZmllcyB0aGUgcHJldmlldyB3aW5kb3cKK3wncHJpbnRkZXZpY2UnfCAgIHwncGRldid8ICAgbmFtZSBvZiB0aGUgcHJpbnRlciB0byBiZSB1c2VkIGZvciA6aGFyZGNvcHkKK3wncHJpbnRlbmNvZGluZyd8IHwncGVuYyd8ICAgZW5jb2RpbmcgdG8gYmUgdXNlZCBmb3IgcHJpbnRpbmcKK3wncHJpbnRleHByJ3wgICAgIHwncGV4cHInfCAgZXhwcmVzc2lvbiB1c2VkIHRvIHByaW50IFBvc3RTY3JpcHQgZm9yIDpoYXJkY29weQorfCdwcmludGZvbnQnfAkgIHwncGZuJ3wgICAgbmFtZSBvZiB0aGUgZm9udCB0byBiZSB1c2VkIGZvciA6aGFyZGNvcHkKK3wncHJpbnRoZWFkZXInfCAgIHwncGhlYWRlcid8IGZvcm1hdCBvZiB0aGUgaGVhZGVyIHVzZWQgZm9yIDpoYXJkY29weQorfCdwcmludG9wdGlvbnMnfCAgfCdwb3B0J3wgICBjb250cm9scyB0aGUgZm9ybWF0IG9mIDpoYXJkY29weSBvdXRwdXQKK3wncmVhZG9ubHknfAkgIHwncm8nfCAgICAgZGlzYWxsb3cgd3JpdGluZyB0aGUgYnVmZmVyCit8J3JlbWFwJ3wJCSAgICAgYWxsb3cgbWFwcGluZ3MgdG8gd29yayByZWN1cnNpdmVseQorfCdyZXBvcnQnfAkJICAgICB0aHJlc2hvbGQgZm9yIHJlcG9ydGluZyBuci4gb2YgbGluZXMgY2hhbmdlZAorfCdyZXN0b3Jlc2NyZWVuJ3wgfCdycyd8ICAgICBXaW4zMjogcmVzdG9yZSBzY3JlZW4gd2hlbiBleGl0aW5nCit8J3Jldmlucyd8CSAgfCdyaSd8ICAgICBpbnNlcnRpbmcgY2hhcmFjdGVycyB3aWxsIHdvcmsgYmFja3dhcmRzCit8J3JpZ2h0bGVmdCd8CSAgfCdybCd8ICAgICB3aW5kb3cgaXMgcmlnaHQtdG8tbGVmdCBvcmllbnRlZAorfCdyaWdodGxlZnRjbWQnfCAgfCdybGMnfCAgICBjb21tYW5kcyBmb3Igd2hpY2ggZWRpdGluZyB3b3JrcyByaWdodC10by1sZWZ0Cit8J3J1bGVyJ3wJICB8J3J1J3wgICAgIHNob3cgY3Vyc29yIGxpbmUgYW5kIGNvbHVtbiBpbiB0aGUgc3RhdHVzIGxpbmUKK3wncnVsZXJmb3JtYXQnfAkgIHwncnVmJ3wgICAgY3VzdG9tIGZvcm1hdCBmb3IgdGhlIHJ1bGVyCit8J3J1bnRpbWVwYXRoJ3wgICB8J3J0cCd8ICAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdXNlZCBmb3IgcnVudGltZSBmaWxlcworfCdzY3JvbGwnfAkgIHwnc2NyJ3wgICAgbGluZXMgdG8gc2Nyb2xsIHdpdGggQ1RSTC1VIGFuZCBDVFJMLUQKK3wnc2Nyb2xsYmluZCd8CSAgfCdzY2InfCAgICBzY3JvbGwgaW4gd2luZG93IGFzIG90aGVyIHdpbmRvd3Mgc2Nyb2xsCit8J3Njcm9sbGp1bXAnfAkgIHwnc2onfCAgICAgbWluaW11bSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsCit8J3Njcm9sbG9mZid8CSAgfCdzbyd8ICAgICBtaW5pbXVtIG5yLiBvZiBsaW5lcyBhYm92ZSBhbmQgYmVsb3cgY3Vyc29yCit8J3Njcm9sbG9wdCd8CSAgfCdzYm8nfCAgICBob3cgJ3Njcm9sbGJpbmQnIHNob3VsZCBiZWhhdmUKK3wnc2VjdGlvbnMnfAkgIHwnc2VjdCd8ICAgbnJvZmYgbWFjcm9zIHRoYXQgc2VwYXJhdGUgc2VjdGlvbnMKK3wnc2VjdXJlJ3wJCSAgICAgc2VjdXJlIG1vZGUgZm9yIHJlYWRpbmcgLnZpbXJjIGluIGN1cnJlbnQgZGlyCit8J3NlbGVjdGlvbid8CSAgfCdzZWwnfCAgICB3aGF0IHR5cGUgb2Ygc2VsZWN0aW9uIHRvIHVzZQorfCdzZWxlY3Rtb2RlJ3wJICB8J3NsbSd8ICAgIHdoZW4gdG8gdXNlIFNlbGVjdCBtb2RlIGluc3RlYWQgb2YgVmlzdWFsIG1vZGUKK3wnc2Vzc2lvbm9wdGlvbnMnfCB8J3Nzb3AnfCAgb3B0aW9ucyBmb3IgfDpta3Nlc3Npb258Cit8J3NoZWxsJ3wJICB8J3NoJ3wgICAgIG5hbWUgb2Ygc2hlbGwgdG8gdXNlIGZvciBleHRlcm5hbCBjb21tYW5kcworfCdzaGVsbGNtZGZsYWcnfCAgfCdzaGNmJ3wgICBmbGFnIHRvIHNoZWxsIHRvIGV4ZWN1dGUgb25lIGNvbW1hbmQKK3wnc2hlbGxwaXBlJ3wJICB8J3NwJ3wgICAgIHN0cmluZyB0byBwdXQgb3V0cHV0IG9mICI6bWFrZSIgaW4gZXJyb3IgZmlsZQorfCdzaGVsbHF1b3RlJ3wJICB8J3NocSd8ICAgIHF1b3RlIGNoYXJhY3RlcihzKSBmb3IgYXJvdW5kIHNoZWxsIGNvbW1hbmQKK3wnc2hlbGxyZWRpcid8CSAgfCdzcnInfCAgICBzdHJpbmcgdG8gcHV0IG91dHB1dCBvZiBmaWx0ZXIgaW4gYSB0ZW1wIGZpbGUKK3wnc2hlbGxzbGFzaCd8CSAgfCdzc2wnfCAgICB1c2UgZm9yd2FyZCBzbGFzaCBmb3Igc2hlbGwgZmlsZSBuYW1lcworfCdzaGVsbHR5cGUnfAkgIHwnc3QnfCAgICAgQW1pZ2E6IGluZmx1ZW5jZXMgaG93IHRvIHVzZSBhIHNoZWxsCit8J3NoZWxseHF1b3RlJ3wJICB8J3N4cSd8ICAgIGxpa2UgJ3NoZWxscXVvdGUnLCBidXQgaW5jbHVkZSByZWRpcmVjdGlvbgorfCdzaGlmdHJvdW5kJ3wJICB8J3NyJ3wgICAgIHJvdW5kIGluZGVudCB0byBtdWx0aXBsZSBvZiBzaGlmdHdpZHRoCit8J3NoaWZ0d2lkdGgnfAkgIHwnc3cnfCAgICAgbnVtYmVyIG9mIHNwYWNlcyB0byB1c2UgZm9yIChhdXRvKWluZGVudCBzdGVwCit8J3Nob3J0bWVzcyd8CSAgfCdzaG0nfCAgICBsaXN0IG9mIGZsYWdzLCByZWR1Y2UgbGVuZ3RoIG9mIG1lc3NhZ2VzCit8J3Nob3J0bmFtZSd8CSAgfCdzbid8ICAgICBub24tTVMtRE9TOiBGaWxlbmFtZXMgYXNzdW1lZCB0byBiZSA4LjMgY2hhcnMKK3wnc2hvd2JyZWFrJ3wJICB8J3Nicid8ICAgIHN0cmluZyB0byB1c2UgYXQgdGhlIHN0YXJ0IG9mIHdyYXBwZWQgbGluZXMKK3wnc2hvd2NtZCd8CSAgfCdzYyd8ICAgICBzaG93IChwYXJ0aWFsKSBjb21tYW5kIGluIHN0YXR1cyBsaW5lCit8J3Nob3dmdWxsdGFnJ3wJICB8J3NmdCd8ICAgIHNob3cgZnVsbCB0YWcgcGF0dGVybiB3aGVuIGNvbXBsZXRpbmcgdGFnCit8J3Nob3dtYXRjaCd8CSAgfCdzbSd8ICAgICBicmllZmx5IGp1bXAgdG8gbWF0Y2hpbmcgYnJhY2tldCBpZiBpbnNlcnQgb25lCit8J3Nob3dtb2RlJ3wJICB8J3NtZCd8ICAgIG1lc3NhZ2Ugb24gc3RhdHVzIGxpbmUgdG8gc2hvdyBjdXJyZW50IG1vZGUKK3wnc2lkZXNjcm9sbCd8CSAgfCdzcyd8ICAgICBtaW5pbXVtIG51bWJlciBvZiBjb2x1bW5zIHRvIHNjcm9sbCBob3Jpem9udGFsCit8J3NpZGVzY3JvbGxvZmYnfCB8J3Npc28nfCAgIG1pbi4gbnIuIG9mIGNvbHVtbnMgdG8gbGVmdCBhbmQgcmlnaHQgb2YgY3Vyc29yCit8J3NtYXJ0Y2FzZSd8CSAgfCdzY3MnfCAgICBubyBpZ25vcmUgY2FzZSB3aGVuIHBhdHRlcm4gaGFzIHVwcGVyY2FzZQorfCdzbWFydGluZGVudCd8ICAgfCdzaSd8ICAgICBzbWFydCBhdXRvaW5kZW50aW5nIGZvciBDIHByb2dyYW1zCit8J3NtYXJ0dGFiJ3wJICB8J3N0YSd8ICAgIHVzZSAnc2hpZnR3aWR0aCcgd2hlbiBpbnNlcnRpbmcgPFRhYj4KK3wnc29mdHRhYnN0b3AnfAkgIHwnc3RzJ3wgICAgbnVtYmVyIG9mIHNwYWNlcyB0aGF0IDxUYWI+IHVzZXMgd2hpbGUgZWRpdGluZworfCdzcGxpdGJlbG93J3wJICB8J3NiJ3wgICAgIG5ldyB3aW5kb3cgZnJvbSBzcGxpdCBpcyBiZWxvdyB0aGUgY3VycmVudCBvbmUKK3wnc3BsaXRyaWdodCd8CSAgfCdzcHInfCAgICBuZXcgd2luZG93IGlzIHB1dCByaWdodCBvZiB0aGUgY3VycmVudCBvbmUKK3wnc3RhcnRvZmxpbmUnfCAgIHwnc29sJ3wgICAgY29tbWFuZHMgbW92ZSBjdXJzb3IgdG8gZmlyc3QgYmxhbmsgaW4gbGluZQorfCdzdGF0dXNsaW5lJ3wJICB8J3N0bCd8ICAgIGN1c3RvbSBmb3JtYXQgZm9yIHRoZSBzdGF0dXMgbGluZQorfCdzdWZmaXhlcyd8CSAgfCdzdSd8ICAgICBzdWZmaXhlcyB0aGF0IGFyZSBpZ25vcmVkIHdpdGggbXVsdGlwbGUgbWF0Y2gKK3wnc3VmZml4ZXNhZGQnfCAgIHwnc3VhJ3wgICAgc3VmZml4ZXMgYWRkZWQgd2hlbiBzZWFyY2hpbmcgZm9yIGEgZmlsZQorfCdzd2FwZmlsZSd8CSAgfCdzd2YnfCAgICB3aGV0aGVyIHRvIHVzZSBhIHN3YXBmaWxlIGZvciBhIGJ1ZmZlcgorfCdzd2Fwc3luYyd8CSAgfCdzd3MnfCAgICBob3cgdG8gc3luYyB0aGUgc3dhcCBmaWxlCit8J3N3aXRjaGJ1Zid8CSAgfCdzd2InfCAgICBzZXRzIGJlaGF2aW9yIHdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgYnVmZmVyCit8J3N5bnRheCd8CSAgfCdzeW4nfCAgICBzeW50YXggdG8gYmUgbG9hZGVkIGZvciBjdXJyZW50IGJ1ZmZlcgorfCd0YWJzdG9wJ3wJICB8J3RzJ3wgICAgIG51bWJlciBvZiBzcGFjZXMgdGhhdCA8VGFiPiBpbiBmaWxlIHVzZXMKK3wndGFnYnNlYXJjaCd8CSAgfCd0YnMnfCAgICB1c2UgYmluYXJ5IHNlYXJjaGluZyBpbiB0YWdzIGZpbGVzCit8J3RhZ2xlbmd0aCd8CSAgfCd0bCd8ICAgICBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgY2hhcmFjdGVycyBmb3IgYSB0YWcKK3wndGFncmVsYXRpdmUnfCAgIHwndHInfCAgICAgZmlsZSBuYW1lcyBpbiB0YWcgZmlsZSBhcmUgcmVsYXRpdmUKK3wndGFncyd8CSAgfCd0YWcnfCAgICBsaXN0IG9mIGZpbGUgbmFtZXMgdXNlZCBieSB0aGUgdGFnIGNvbW1hbmQKK3wndGFnc3RhY2snfAkgIHwndGdzdCd8ICAgcHVzaCB0YWdzIG9udG8gdGhlIHRhZyBzdGFjaworfCd0ZXJtJ3wJCSAgICAgbmFtZSBvZiB0aGUgdGVybWluYWwKK3wndGVybWJpZGknfAkgIHwndGJpZGknfCAgdGVybWluYWwgdGFrZXMgY2FyZSBvZiBiaS1kaXJlY3Rpb25hbGl0eQorfCd0ZXJtZW5jb2RpbmcnfCAgfCd0ZW5jJ3wgICBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCBieSB0aGUgdGVybWluYWwKK3wndGVyc2UnfAkJICAgICBzaG9ydGVuIHNvbWUgbWVzc2FnZXMKK3wndGV4dGF1dG8nfAkgIHwndGEnfCAgICAgb2Jzb2xldGUsIHVzZSAnZmlsZWZvcm1hdHMnCit8J3RleHRtb2RlJ3wJICB8J3R4J3wgICAgIG9ic29sZXRlLCB1c2UgJ2ZpbGVmb3JtYXQnCit8J3RleHR3aWR0aCd8CSAgfCd0dyd8ICAgICBtYXhpbXVtIHdpZHRoIG9mIHRleHQgdGhhdCBpcyBiZWluZyBpbnNlcnRlZAorfCd0aGVzYXVydXMnfAkgIHwndHNyJ3wgICAgbGlzdCBvZiB0aGVzYXVydXMgZmlsZXMgZm9yIGtleXdvcmQgY29tcGxldGlvbgorfCd0aWxkZW9wJ3wJICB8J3RvcCd8ICAgIHRpbGRlIGNvbW1hbmQgIn4iIGJlaGF2ZXMgbGlrZSBhbiBvcGVyYXRvcgorfCd0aW1lb3V0J3wJICB8J3RvJ3wgICAgIHRpbWUgb3V0IG9uIG1hcHBpbmdzIGFuZCBrZXkgY29kZXMKK3wndGltZW91dGxlbid8CSAgfCd0bSd8ICAgICB0aW1lIG91dCB0aW1lIGluIG1pbGxpc2Vjb25kcworfCd0aXRsZSd8CQkgICAgIGxldCBWaW0gc2V0IHRoZSB0aXRsZSBvZiB0aGUgd2luZG93Cit8J3RpdGxlbGVuJ3wJCSAgICAgcGVyY2VudGFnZSBvZiAnY29sdW1ucycgdXNlZCBmb3Igd2luZG93IHRpdGxlCit8J3RpdGxlb2xkJ3wJCSAgICAgb2xkIHRpdGxlLCByZXN0b3JlZCB3aGVuIGV4aXRpbmcKK3wndGl0bGVzdHJpbmcnfAkJICAgICBzdHJpbmcgdG8gdXNlIGZvciB0aGUgVmltIHdpbmRvdyB0aXRsZQorfCd0b29sYmFyJ3wJICB8J3RiJ3wgICAgIEdVSTogd2hpY2ggaXRlbXMgdG8gc2hvdyBpbiB0aGUgdG9vbGJhcgorfCd0b29sYmFyaWNvbnNpemUnfCB8J3RiaXMnfCBzaXplIG9mIHRoZSB0b29sYmFyIGljb25zIChmb3IgR1RLIDIgb25seSkKK3wndHRpbWVvdXQnfAkJICAgICB0aW1lIG91dCBvbiBtYXBwaW5ncworfCd0dGltZW91dGxlbid8CSAgfCd0dG0nfCAgICB0aW1lIG91dCB0aW1lIGZvciBrZXkgY29kZXMgaW4gbWlsbGlzZWNvbmRzCit8J3R0eWJ1aWx0aW4nfAkgIHwndGJpJ3wgICAgdXNlIGJ1aWx0LWluIHRlcm1jYXAgYmVmb3JlIGV4dGVybmFsIHRlcm1jYXAKK3wndHR5ZmFzdCd8CSAgfCd0Zid8ICAgICBpbmRpY2F0ZXMgYSBmYXN0IHRlcm1pbmFsIGNvbm5lY3Rpb24KK3wndHR5bW91c2UnfAkgIHwndHR5bSd8ICAgdHlwZSBvZiBtb3VzZSBjb2RlcyBnZW5lcmF0ZWQKK3wndHR5c2Nyb2xsJ3wJICB8J3RzbCd8ICAgIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIGZvciBhIHNjcm9sbAorfCd0dHl0eXBlJ3wJICB8J3R0eSd8ICAgIGFsaWFzIGZvciAndGVybScKK3wndW5kb2xldmVscyd8CSAgfCd1bCd8ICAgICBtYXhpbXVtIG51bWJlciBvZiBjaGFuZ2VzIHRoYXQgY2FuIGJlIHVuZG9uZQorfCd1cGRhdGVjb3VudCd8ICAgfCd1Yyd8ICAgICBhZnRlciB0aGlzIG1hbnkgY2hhcmFjdGVycyBmbHVzaCBzd2FwIGZpbGUKK3wndXBkYXRldGltZSd8CSAgfCd1dCd8ICAgICBhZnRlciB0aGlzIG1hbnkgbWlsbGlzZWNvbmRzIGZsdXNoIHN3YXAgZmlsZQorfCd2ZXJib3NlJ3wJICB8J3Zicyd8ICAgIGdpdmUgaW5mb3JtYXRpdmUgbWVzc2FnZXMKK3wndmlld2Rpcid8CSAgfCd2ZGlyJ3wgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZmlsZXMgd2l0aCA6bWt2aWV3Cit8J3ZpZXdvcHRpb25zJ3wgICB8J3ZvcCd8ICAgIHNwZWNpZmllcyB3aGF0IHRvIHNhdmUgZm9yIDpta3ZpZXcKK3wndmltaW5mbyd8CSAgfCd2aSd8ICAgICB1c2UgLnZpbWluZm8gZmlsZSB1cG9uIHN0YXJ0dXAgYW5kIGV4aXRpbmcKK3wndmlydHVhbGVkaXQnfCAgIHwndmUnfCAgICAgd2hlbiB0byB1c2UgdmlydHVhbCBlZGl0aW5nCit8J3Zpc3VhbGJlbGwnfAkgIHwndmInfCAgICAgdXNlIHZpc3VhbCBiZWxsIGluc3RlYWQgb2YgYmVlcGluZworfCd3YXJuJ3wJCSAgICAgd2FybiBmb3Igc2hlbGwgY29tbWFuZCB3aGVuIGJ1ZmZlciB3YXMgY2hhbmdlZAorfCd3ZWlyZGludmVydCd8ICAgfCd3aSd8ICAgICBmb3IgdGVybWluYWxzIHRoYXQgaGF2ZSB3ZWlyZCBpbnZlcnNpb24gbWV0aG9kCit8J3doaWNod3JhcCd8CSAgfCd3dyd8ICAgICBhbGxvdyBzcGVjaWZpZWQga2V5cyB0byBjcm9zcyBsaW5lIGJvdW5kYXJpZXMKK3wnd2lsZGNoYXInfAkgIHwnd2MnfCAgICAgY29tbWFuZC1saW5lIGNoYXJhY3RlciBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uCit8J3dpbGRjaGFybSd8CSAgfCd3Y20nfCAgICBsaWtlICd3aWxkY2hhcicgYnV0IGFsc28gd29ya3Mgd2hlbiBtYXBwZWQKK3wnd2lsZGlnbm9yZSd8CSAgfCd3aWcnfCAgICBmaWxlcyBtYXRjaGluZyB0aGVzZSBwYXR0ZXJucyBhcmUgbm90IGNvbXBsZXRlZAorfCd3aWxkbWVudSd8CSAgfCd3bW51J3wgICB1c2UgbWVudSBmb3IgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24KK3wnd2lsZG1vZGUnfAkgIHwnd2ltJ3wgICAgbW9kZSBmb3IgJ3dpbGRjaGFyJyBjb21tYW5kLWxpbmUgZXhwYW5zaW9uCit8J3dpbmFsdGtleXMnfAkgIHwnd2FrJ3wgICAgd2hlbiB0aGUgd2luZG93cyBzeXN0ZW0gaGFuZGxlcyBBTFQga2V5cworfCd3aW5oZWlnaHQnfAkgIHwnd2gnfCAgICAgbWluaW11bSBudW1iZXIgb2YgbGluZXMgZm9yIHRoZSBjdXJyZW50IHdpbmRvdworfCd3aW5maXhoZWlnaHQnfCAgfCd3ZmgnfCAgICBrZWVwIHdpbmRvdyBoZWlnaHQgd2hlbiBvcGVuaW5nL2Nsb3Npbmcgd2luZG93cworfCd3aW5taW5oZWlnaHQnfCAgfCd3bWgnfCAgICBtaW5pbXVtIG51bWJlciBvZiBsaW5lcyBmb3IgYW55IHdpbmRvdworfCd3aW5taW53aWR0aCd8ICAgfCd3bXcnfCAgICBtaW5pbWFsIG51bWJlciBvZiBjb2x1bW5zIGZvciBhbnkgd2luZG93Cit8J3dpbndpZHRoJ3wJICB8J3dpdyd8ICAgIG1pbmltYWwgbnVtYmVyIG9mIGNvbHVtbnMgZm9yIGN1cnJlbnQgd2luZG93Cit8J3dyYXAnfAkJICAgICBsb25nIGxpbmVzIHdyYXAgYW5kIGNvbnRpbnVlIG9uIHRoZSBuZXh0IGxpbmUKK3wnd3JhcG1hcmdpbid8CSAgfCd3bSd8ICAgICBjaGFycyBmcm9tIHRoZSByaWdodCB3aGVyZSB3cmFwcGluZyBzdGFydHMKK3wnd3JhcHNjYW4nfAkgIHwnd3MnfCAgICAgc2VhcmNoZXMgd3JhcCBhcm91bmQgdGhlIGVuZCBvZiB0aGUgZmlsZQorfCd3cml0ZSd8CQkgICAgIHdyaXRpbmcgdG8gYSBmaWxlIGlzIGFsbG93ZWQKK3wnd3JpdGVhbnknfAkgIHwnd2EnfCAgICAgd3JpdGUgdG8gZmlsZSB3aXRoIG5vIG5lZWQgZm9yICIhIiBvdmVycmlkZQorfCd3cml0ZWJhY2t1cCd8ICAgfCd3Yid8ICAgICBtYWtlIGEgYmFja3VwIGJlZm9yZSBvdmVyd3JpdGluZyBhIGZpbGUKK3wnd3JpdGVkZWxheSd8CSAgfCd3ZCd8ICAgICBkZWxheSB0aGlzIG1hbnkgbXNlYyBmb3IgZWFjaCBjaGFyIChmb3IgZGVidWcpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3VyKgkJVW5kby9SZWRvIGNvbW1hbmRzCisKK3x1fAkgIE4gIHUJCXVuZG8gbGFzdCBOIGNoYW5nZXMKK3xDVFJMLVJ8ICBOICBDVFJMLVIJcmVkbyBsYXN0IE4gdW5kb25lIGNoYW5nZXMKK3xVfAkgICAgIFUJCXJlc3RvcmUgbGFzdCBjaGFuZ2VkIGxpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfZXQqCQlFeHRlcm5hbCBjb21tYW5kcworCit8OnNoZWxsfAk6c2hbZWxsXQlzdGFydCBhIHNoZWxsCit8OiF8CQk6IXtjb21tYW5kfQlleGVjdXRlIHtjb21tYW5kfSB3aXRoIGEgc2hlbGwKK3xLfAkJICAgSwkJbG9va3VwIGtleXdvcmQgdW5kZXIgdGhlIGN1cnNvciB3aXRoCisJCQkJICAgJ2tleXdvcmRwcmcnIHByb2dyYW0gKGRlZmF1bHQ6ICJtYW4iKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9xZioJCVF1aWNrZml4IGNvbW1hbmRzCisKK3w6Y2N8CQk6Y2MgW25yXQlkaXNwbGF5IGVycm9yIFtucl0gKGRlZmF1bHQgaXMgdGhlIHNhbWUgYWdhaW4pCit8OmNuZXh0fAk6Y24JCWRpc3BsYXkgdGhlIG5leHQgZXJyb3IKK3w6Y3ByZXZpb3VzfAk6Y3AJCWRpc3BsYXkgdGhlIHByZXZpb3VzIGVycm9yCit8OmNsaXN0fAk6Y2wJCWxpc3QgYWxsIGVycm9ycworfDpjZmlsZXwJOmNmCQlyZWFkIGVycm9ycyBmcm9tIHRoZSBmaWxlICdlcnJvcmZpbGUnCit8OmNxdWl0fAk6Y3EJCXF1aXQgd2l0aG91dCB3cml0aW5nIGFuZCByZXR1cm4gZXJyb3IgY29kZSAodG8KKwkJCQkgICB0aGUgY29tcGlsZXIpCit8Om1ha2V8CQk6bWFrZSBbYXJnc10Jc3RhcnQgbWFrZSwgcmVhZCBlcnJvcnMsIGFuZCBqdW1wIHRvIGZpcnN0CisJCQkJICAgZXJyb3IKK3w6Z3JlcHwJCTpncltlcF0gW2FyZ3NdCWV4ZWN1dGUgJ2dyZXBwcmcnIHRvIGZpbmQgbWF0Y2hlcyBhbmQganVtcCB0bworCQkJCSAgIHRoZSBmaXJzdCBvbmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3ZjKgkJVmFyaW91cyBjb21tYW5kcworCit8Q1RSTC1MfAkgICBDVFJMLUwJQ2xlYXIgYW5kIHJlZHJhdyB0aGUgc2NyZWVuLgorfENUUkwtR3wJICAgQ1RSTC1HCXNob3cgY3VycmVudCBmaWxlIG5hbWUgKHdpdGggcGF0aCkgYW5kIGN1cnNvcgorCQkJCSAgIHBvc2l0aW9uCit8Z2F8CQkgICBnYQkJc2hvdyBhc2NpaSB2YWx1ZSBvZiBjaGFyYWN0ZXIgdW5kZXIgY3Vyc29yIGluCisJCQkJICAgZGVjaW1hbCwgaGV4LCBhbmQgb2N0YWwKK3xnX0NUUkwtR3wJICAgZyBDVFJMLUcJc2hvdyBjdXJzb3IgY29sdW1uLCBsaW5lLCBhbmQgY2hhcmFjdGVyCisJCQkJICAgcG9zaXRpb24KK3xDVFJMLUN8CSAgIENUUkwtQwlkdXJpbmcgc2VhcmNoZXM6IEludGVycnVwdCB0aGUgc2VhcmNoCit8ZG9zLUNUUkwtQnJlYWt8ICAgQ1RSTC1CcmVhawlNUy1ET1M6IGR1cmluZyBzZWFyY2hlczogSW50ZXJydXB0IHRoZSBzZWFyY2gKK3w8RGVsPnwJCSAgIDxEZWw+CXdoaWxlIGVudGVyaW5nIGEgY291bnQ6IGRlbGV0ZSBsYXN0IGNoYXJhY3RlcgorfDp2ZXJzaW9ufAk6dmVbcnNpb25dCXNob3cgdmVyc2lvbiBpbmZvcm1hdGlvbgorfDptb2RlfAkJOm1vZGUgTgkJTVMtRE9TOiBzZXQgc2NyZWVuIG1vZGUgdG8gTiAobnVtYmVyLCBDODAsCisJCQkJICAgQzQzNTAsIGV0Yy4pCit8Om5vcm1hbHwJOm5vcm1bYWxdWyFdIHtjb21tYW5kc30KKwkJCQlFeGVjdXRlIE5vcm1hbCBtb2RlIGNvbW1hbmRzLgorfFF8CQlRCQlzd2l0Y2ggdG8gIkV4IiBtb2RlCisKK3w6cmVkaXJ8CTpyZWRpciA+e2ZpbGV9CQlyZWRpcmVjdCBtZXNzYWdlcyB0byB7ZmlsZX0KK3w6c2lsZW50fAk6c2lsZW50WyFdIHtjb21tYW5kfQlleGVjdXRlIHtjb21tYW5kfSBzaWxlbnRseQorfDpjb25maXJtfAk6Y29uZmlybSB7Y29tbWFuZH0JcXVpdCwgd3JpdGUsIGV0Yy4sIGFza2luZyBhYm91dAorCQkJCQl1bnNhdmVkIGNoYW5nZXMgb3IgcmVhZC1vbmx5IGZpbGVzLgorfDpicm93c2V8CTpicm93c2Uge2NvbW1hbmR9CW9wZW4vcmVhZC93cml0ZSBmaWxlLCB1c2luZyBhCisJCQkJCWZpbGUgc2VsZWN0aW9uIGRpYWxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9jZSoJCUNvbW1hbmQtbGluZSBlZGl0aW5nCisKK3xjXzxFc2M+fAk8RXNjPgkJICAgYWJhbmRvbiBjb21tYW5kLWxpbmUgKGlmICd3aWxkY2hhcicgaXMKKwkJCQkgICAgICA8RXNjPiwgdHlwZSBpdCB0d2ljZSkKKworfGNfQ1RSTC1WfAlDVFJMLVYge2NoYXJ9CSAgIGluc2VydCB7Y2hhcn0gbGl0ZXJhbGx5Cit8Y19DVFJMLVZ8CUNUUkwtViB7bnVtYmVyfSAgICBlbnRlciBkZWNpbWFsIHZhbHVlIG9mIGNoYXJhY3RlciAodXAgdG8KKwkJCQkgICAgICB0aHJlZSBkaWdpdHMpCit8Y19DVFJMLUt8CUNUUkwtSyB7Y2hhcjF9IHtjaGFyMn0KKwkJCQkgICBlbnRlciBkaWdyYXBoIChTZWUgfFFfZGl8KQorfGNfQ1RSTC1SfAlDVFJMLVIgezAtOWEteiIlIzotPX0KKwkJCQkgICBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIKKworfGNfPExlZnQ+fAk8TGVmdD4vPFJpZ2h0PgkgICBjdXJzb3IgbGVmdC9yaWdodAorfGNfPFMtTGVmdD58CTxTLUxlZnQ+LzxTLVJpZ2h0PiBjdXJzb3Igb25lIHdvcmQgbGVmdC9yaWdodAorfGNfQ1RSTC1CfAlDVFJMLUIvQ1RSTC1FCSAgIGN1cnNvciB0byBiZWdpbm5pbmcvZW5kIG9mIGNvbW1hbmQtbGluZQorCit8Y188QlM+fAk8QlM+CQkgICBkZWxldGUgdGhlIGNoYXJhY3RlciBpbiBmcm9udCBvZiB0aGUgY3Vyc29yCit8Y188RGVsPnwJPERlbD4JCSAgIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IKK3xjX0NUUkwtV3wJQ1RSTC1XCQkgICBkZWxldGUgdGhlIHdvcmQgaW4gZnJvbnQgb2YgdGhlIGN1cnNvcgorfGNfQ1RSTC1VfAlDVFJMLVUJCSAgIHJlbW92ZSBhbGwgY2hhcmFjdGVycworCit8Y188VXA+fAk8VXA+LzxEb3duPgkgICByZWNhbGwgb2xkZXIvbmV3ZXIgY29tbWFuZC1saW5lIHRoYXQgc3RhcnRzCisJCQkJICAgICAgd2l0aCBjdXJyZW50IGNvbW1hbmQKK3xjXzxTLVVwPnwJPFMtVXA+LzxTLURvd24+CSAgIHJlY2FsbCBvbGRlci9uZXdlciBjb21tYW5kLWxpbmUgZnJvbSBoaXN0b3J5Cit8Omhpc3Rvcnl8CTpoaXNbdG9yeV0JICAgc2hvdyBvbGRlciBjb21tYW5kLWxpbmVzCisKK0NvbnRleHQtc2Vuc2l0aXZlIGNvbXBsZXRpb24gb24gdGhlIGNvbW1hbmQtbGluZToKKworfGNfd2lsZGNoYXJ8CSd3aWxkY2hhcicgIChkZWZhdWx0OiA8VGFiPikKKwkJCQlkbyBjb21wbGV0aW9uIG9uIHRoZSBwYXR0ZXJuIGluIGZyb250IG9mIHRoZQorCQkJCSAgIGN1cnNvci4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGVzLAorCQkJCSAgIGJlZXAgYW5kIHNob3cgdGhlIGZpcnN0IG9uZTsgZnVydGhlcgorCQkJCSAgICd3aWxkY2hhcicgd2lsbCBzaG93IHRoZSBuZXh0IG9uZXMuCit8Y19DVFJMLUR8CUNUUkwtRAkJbGlzdCBhbGwgbmFtZXMgdGhhdCBtYXRjaCB0aGUgcGF0dGVybiBpbgorCQkJCSAgIGZyb250IG9mIHRoZSBjdXJzb3IKK3xjX0NUUkwtQXwJQ1RSTC1BCQlpbnNlcnQgYWxsIG5hbWVzIHRoYXQgbWF0Y2ggcGF0dGVybiBpbiBmcm9udAorCQkJCSAgIG9mIGN1cnNvcgorfGNfQ1RSTC1MfAlDVFJMLUwJCWluc2VydCBsb25nZXN0IGNvbW1vbiBwYXJ0IG9mIG5hbWVzIHRoYXQKKwkJCQkgICBtYXRjaCBwYXR0ZXJuCit8Y19DVFJMLU58CUNUUkwtTgkJYWZ0ZXIgJ3dpbGRjaGFyJyB3aXRoIG11bHRpcGxlIG1hdGNoZXM6IGdvCisJCQkJICAgdG8gbmV4dCBtYXRjaAorfGNfQ1RSTC1QfAlDVFJMLVAJCWFmdGVyICd3aWxkY2hhcicgd2l0aCBtdWx0aXBsZSBtYXRjaGVzOiBnbworCQkJCSAgIHRvIHByZXZpb3VzIG1hdGNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3JhKgkJRXggcmFuZ2VzCisKK3w6cmFuZ2V8CSwJCXNlcGFyYXRlcyB0d28gbGluZSBudW1iZXJzCit8OnJhbmdlfAk7CQlpZGVtLCBzZXQgY3Vyc29yIHRvIHRoZSBmaXJzdCBsaW5lIG51bWJlcgorCQkJCWJlZm9yZSBpbnRlcnByZXRpbmcgdGhlIHNlY29uZCBvbmUKKworfDpyYW5nZXwJe251bWJlcn0JYW4gYWJzb2x1dGUgbGluZSBudW1iZXIKK3w6cmFuZ2V8CS4JCXRoZSBjdXJyZW50IGxpbmUKK3w6cmFuZ2V8CSQJCXRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUKK3w6cmFuZ2V8CSUJCWVxdWFsIHRvIDEsJCAodGhlIGVudGlyZSBmaWxlKQorfDpyYW5nZXwJKgkJZXF1YWwgdG8gJzwsJz4gKHZpc3VhbCBhcmVhKQorfDpyYW5nZXwJJ3QJCXBvc2l0aW9uIG9mIG1hcmsgdAorfDpyYW5nZXwJL3twYXR0ZXJufVsvXQl0aGUgbmV4dCBsaW5lIHdoZXJlIHtwYXR0ZXJufSBtYXRjaGVzCit8OnJhbmdlfAk/e3BhdHRlcm59Wz9dCXRoZSBwcmV2aW91cyBsaW5lIHdoZXJlIHtwYXR0ZXJufSBtYXRjaGVzCisKK3w6cmFuZ2V8CStbbnVtXQkJYWRkIFtudW1dIHRvIHRoZSBwcmVjZWRpbmcgbGluZSBudW1iZXIKKwkJCQkgICAoZGVmYXVsdDogMSkKK3w6cmFuZ2V8CS1bbnVtXQkJc3VidHJhY3QgW251bV0gZnJvbSB0aGUgcHJlY2VkaW5nIGxpbmUKKwkJCQkgICBudW1iZXIgKGRlZmF1bHQ6IDEpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2V4KgkJU3BlY2lhbCBFeCBjaGFyYWN0ZXJzCisKK3w6YmFyfAkgICAgfAkJc2VwYXJhdGVzIHR3byBjb21tYW5kcyAobm90IGZvciAiOmdsb2JhbCIgYW5kICI6ISIpCit8OnF1b3RlfCAgICAiCQliZWdpbnMgY29tbWVudAorCit8Ol8lfAkgICAgJQkJY3VycmVudCBmaWxlIG5hbWUgKG9ubHkgd2hlcmUgYSBmaWxlIG5hbWUgaXMgZXhwZWN0ZWQpCit8Ol8jfAkgICAgI1tudW1dCWFsdGVybmF0ZSBmaWxlIG5hbWUgW251bV0gKG9ubHkgd2hlcmUgYSBmaWxlIG5hbWUgaXMKKwkJCSAgIGV4cGVjdGVkKQorCU5vdGU6IFRoZSBuZXh0IGZvdXIgYXJlIHR5cGVkIGxpdGVyYWxseTsgdGhlc2UgYXJlIG5vdCBzcGVjaWFsIGtleXMhCit8Ojxjd29yZD58ICA8Y3dvcmQ+CXdvcmQgdW5kZXIgdGhlIGN1cnNvciAob25seSB3aGVyZSBhIGZpbGUgbmFtZSBpcworCQkJICAgZXhwZWN0ZWQpCit8OjxjV09SRD58ICA8Y1dPUkQ+CVdPUkQgdW5kZXIgdGhlIGN1cnNvciAob25seSB3aGVyZSBhIGZpbGUgbmFtZSBpcworCQkJICAgZXhwZWN0ZWQpIChzZWUgfFdPUkR8KQorfDo8Y2ZpbGU+fCAgPGNmaWxlPglmaWxlIG5hbWUgdW5kZXIgdGhlIGN1cnNvciAob25seSB3aGVyZSBhIGZpbGUgbmFtZSBpcworCQkJICAgZXhwZWN0ZWQpCit8OjxhZmlsZT58ICA8YWZpbGU+CWZpbGUgbmFtZSBmb3IgYXV0b2NvbW1hbmQgKG9ubHkgd2hlcmUgYSBmaWxlIG5hbWUgaXMKKwkJCSAgIGV4cGVjdGVkKQorfDo8c2ZpbGU+fCAgPHNmaWxlPglmaWxlIG5hbWUgb2YgYSAiOnNvdXJjZSJkIGZpbGUsIHdpdGhpbiB0aGF0IGZpbGUgKG9ubHkKKwkJCSAgIHdoZXJlIGEgZmlsZSBuYW1lIGlzIGV4cGVjdGVkKQorCisJCUFmdGVyICIlIiwgIiMiLCAiPGNmaWxlPiIsICI8c2ZpbGU+IiBvciAiPGFmaWxlPiIKKwkJfDo6cHwJICAgIDpwCQlmdWxsIHBhdGgKKwkJfDo6aHwJICAgIDpoCQloZWFkIChmaWxlIG5hbWUgcmVtb3ZlZCkKKwkJfDo6dHwJICAgIDp0CQl0YWlsIChmaWxlIG5hbWUgb25seSkKKwkJfDo6cnwJICAgIDpyCQlyb290IChleHRlbnNpb24gcmVtb3ZlZCkKKwkJfDo6ZXwJICAgIDplCQlleHRlbnNpb24KKwkJfDo6c3wJICAgIDpzL3twYXR9L3tyZXBsfS8Jc3Vic3RpdHV0ZSB7cGF0fSB3aXRoIHtyZXBsfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9lZCoJCUVkaXRpbmcgYSBmaWxlCisKKwkgICBXaXRob3V0ICE6IEZhaWwgaWYgY2hhbmdlcyBoYXMgYmVlbiBtYWRlIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KKwkgICAgICBXaXRoICE6IERpc2NhcmQgYW55IGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLgorfDplZGl0X2Z8ICA6ZVtkaXRdWyFdIHtmaWxlfQlFZGl0IHtmaWxlfS4KK3w6ZWRpdHwJICAgOmVbZGl0XVshXQkJUmVsb2FkIHRoZSBjdXJyZW50IGZpbGUuCit8OmVuZXd8CSAgIDplbmVbd11bIV0JCUVkaXQgYSBuZXcsIHVubmFtZWQgYnVmZmVyLgorfDpmaW5kfCAgICA6ZmluW2RdWyFdIHtmaWxlfQlGaW5kIHtmaWxlfSBpbiAncGF0aCcgYW5kIGVkaXQgaXQuCisKK3xDVFJMLV58ICAgTiAgIENUUkwtXgkJRWRpdCBhbHRlcm5hdGUgZmlsZSBOIChlcXVpdmFsZW50IHRvICI6ZSAjTiIpLgorfGdmfAkgICAgICAgZ2YgIG9yIF1mCUVkaXQgdGhlIGZpbGUgd2hvc2UgbmFtZSBpcyB1bmRlciB0aGUgY3Vyc29yCit8OnB3ZHwJICAgOnB3ZAkJCVByaW50IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBuYW1lLgorfDpjZHwJICAgOmNkIFtwYXRoXQkJQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBbcGF0aF0uCit8OmNkLXwJICAgOmNkIC0JCUJhY2sgdG8gcHJldmlvdXMgY3VycmVudCBkaXJlY3RvcnkuCit8OmZpbGV8CSAgIDpmW2lsZV0JCVByaW50IHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQgdGhlIGN1cnNvcgorCQkJCSAgIHBvc2l0aW9uLgorfDpmaWxlfAkgICA6ZltpbGVdIHtuYW1lfQlTZXQgdGhlIGN1cnJlbnQgZmlsZSBuYW1lIHRvIHtuYW1lfS4KK3w6ZmlsZXN8ICAgOmZpbGVzCQlTaG93IGFsdGVybmF0ZSBmaWxlIG5hbWVzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9mbCoJCVVzaW5nIHRoZSBhcmd1bWVudCBsaXN0CQkJfGFyZ3VtZW50LWxpc3R8CisKK3w6YXJnc3wJICAgOmFyW2dzXQkJUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3QsIHdpdGggdGhlIGN1cnJlbnQgZmlsZQorCQkJCSAgIGluICJbXSIuCit8OmFsbHwJICAgOmFsbCAgb3IgOnNhbGwJT3BlbiBhIHdpbmRvdyBmb3IgZXZlcnkgZmlsZSBpbiB0aGUgYXJnIGxpc3QuCit8OndufAkgICA6d25bZXh0XVshXQkJV3JpdGUgZmlsZSBhbmQgZWRpdCBuZXh0IGZpbGUuCit8OndufAkgICA6d25bZXh0XVshXSB7ZmlsZX0JV3JpdGUgdG8ge2ZpbGV9IGFuZCBlZGl0IG5leHQgZmlsZSwgdW5sZXNzCisJCQkJICAge2ZpbGV9IGV4aXN0cy4gIFdpdGggISwgb3ZlcndyaXRlIGV4aXN0aW5nCisJCQkJICAgZmlsZS4KK3w6d058CSAgIDp3TltleHRdWyFdIFtmaWxlXQlXcml0ZSBmaWxlIGFuZCBlZGl0IHByZXZpb3VzIGZpbGUuCisKKwkgICAgIGluIGN1cnJlbnQgd2luZG93ICAgIGluIG5ldyB3aW5kb3cJfgorfDphcmd1bWVudHwgIDphcmd1W21lbnRdIE4JICA6c2FyW2d1bWVudF0gTglFZGl0IGZpbGUgTgorfDpuZXh0fAkgICAgIDpuW2V4dF0JCSAgOnNuW2V4dF0JCUVkaXQgbmV4dCBmaWxlCit8Om5leHRfZnwgICAgOm5bZXh0XSB7YXJnbGlzdH0JICA6c25bZXh0XSB7YXJnbGlzdH0JZGVmaW5lIG5ldyBhcmcgbGlzdAorCQkJCQkJCSAgIGFuZCBlZGl0IGZpcnN0IGZpbGUKK3w6TmV4dHwJICAgICA6TltleHRdCQkgIDpzTltleHRdCQlFZGl0IHByZXZpb3VzIGZpbGUKK3w6Zmlyc3R8ICAgICA6ZmlyW3N0XQkJICA6c2ZpcltzdF0JCUVkaXQgZmlyc3QgZmlsZQorfDpsYXN0fAkgICAgIDpsYVtzdF0JCSAgOnNsYVtzdF0JCUVkaXQgbGFzdCBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3dxKgkJV3JpdGluZyBhbmQgcXVpdHRpbmcKKworfDp3fAkgIDpbcmFuZ2Vdd1tyaXRlXVshXQkJV3JpdGUgdG8gdGhlIGN1cnJlbnQgZmlsZS4KK3w6d19mfAkgIDpbcmFuZ2Vdd1tyaXRlXSB7ZmlsZX0JV3JpdGUgdG8ge2ZpbGV9LCB1bmxlc3MgaXQgYWxyZWFkeQorCQkJCQkgICBleGlzdHMuCit8OndfZnwJICA6W3JhbmdlXXdbcml0ZV0hIHtmaWxlfQlXcml0ZSB0byB7ZmlsZX0uICBPdmVyd3JpdGUgYW4gZXhpc3RpbmcKKwkJCQkJICAgZmlsZS4KK3w6d19hfAkgIDpbcmFuZ2Vdd1tyaXRlXVshXSA+PgkJQXBwZW5kIHRvIHRoZSBjdXJyZW50IGZpbGUuCit8OndfYXwJICA6W3JhbmdlXXdbcml0ZV1bIV0gPj4ge2ZpbGV9CUFwcGVuZCB0byB7ZmlsZX0uCit8OndfY3wJICA6W3JhbmdlXXdbcml0ZV0gIXtjbWR9CUV4ZWN1dGUge2NtZH0gd2l0aCBbcmFuZ2VdIGxpbmVzIGFzCisJCQkJCSAgIHN0YW5kYXJkIGlucHV0LgorfDp1cHwJICA6W3JhbmdlXXVwW2RhdGVdWyFdCQl3cml0ZSB0byBjdXJyZW50IGZpbGUgaWYgbW9kaWZpZWQKK3w6d2FsbHwJICA6d2FbbGxdWyFdCQkJd3JpdGUgYWxsIGNoYW5nZWQgYnVmZmVycworCit8OnF8CSAgOnFbdWl0XQkJUXVpdCBjdXJyZW50IGJ1ZmZlciwgdW5sZXNzIGNoYW5nZXMgaGF2ZSBiZWVuCisJCQkJICAgbWFkZS4gIEV4aXQgVmltIHdoZW4gdGhlcmUgYXJlIG5vIG90aGVyCisJCQkJICAgbm9uLWhlbHAgYnVmZmVycworfDpxfAkgIDpxW3VpdF0hCQlRdWl0IGN1cnJlbnQgYnVmZmVyIGFsd2F5cywgZGlzY2FyZCBhbnkKKwkJCQkgICBjaGFuZ2VzLiAgRXhpdCBWaW0gd2hlbiB0aGVyZSBhcmUgbm8gb3RoZXIKKwkJCQkgICBub24taGVscCBidWZmZXJzCit8OnFhfAkgIDpxYVtsbF0JCUV4aXQgVmltLCB1bmxlc3MgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4KK3w6cWF8CSAgOnFhW2xsXSEJCUV4aXQgVmltIGFsd2F5cywgZGlzY2FyZCBhbnkgY2hhbmdlcy4KK3w6Y3F8CSAgOmNxCQkJUXVpdCB3aXRob3V0IHdyaXRpbmcgYW5kIHJldHVybiBlcnJvciBjb2RlLgorCit8OndxfAkgIDp3cVshXQkJV3JpdGUgdGhlIGN1cnJlbnQgZmlsZSBhbmQgZXhpdC4KK3w6d3F8CSAgOndxWyFdIHtmaWxlfQkJV3JpdGUgdG8ge2ZpbGV9IGFuZCBleGl0LgorfDp4aXR8CSAgOnhbaXRdWyFdIFtmaWxlXQlMaWtlICI6d3EiIGJ1dCB3cml0ZSBvbmx5IHdoZW4gY2hhbmdlcyBoYXZlCisJCQkJICAgYmVlbiBtYWRlCit8Wlp8CSAgICAgWloJCQlTYW1lIGFzICI6eCIuCit8WlF8CSAgICAgWlEJCQlTYW1lIGFzICI6cSEiLgorfDp4YWxsfAkgIDp4YVtsbF1bIV0gIG9yIDp3cWFsbFshXQorCQkJCVdyaXRlIGFsbCBjaGFuZ2VkIGJ1ZmZlcnMgYW5kIGV4aXQKKworfDpzdG9wfAkgIDpzdFtvcF1bIV0JCVN1c3BlbmQgVklNIG9yIHN0YXJ0IG5ldyBzaGVsbC4gSWYgJ2F3JyBvcHRpb24KKwkJCQkgICBpcyBzZXQgYW5kIFshXSBub3QgZ2l2ZW4gd3JpdGUgdGhlIGJ1ZmZlci4KK3xDVFJMLVp8ICAgICBDVFJMLVoJCVNhbWUgYXMgIjpzdG9wIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqUV9zdCoJCVN0YXJ0aW5nIFZJTQorCit8LXZpbXwJICAgdmltIFtvcHRpb25zXQkJc3RhcnQgZWRpdGluZyB3aXRoIGFuIGVtcHR5IGJ1ZmZlcgorfC1maWxlfAkgICB2aW0gW29wdGlvbnNdIHtmaWxlfSAuLglzdGFydCBlZGl0aW5nIG9uZSBvciBtb3JlIGZpbGVzCit8LS18CSAgIHZpbSBbb3B0aW9uc10gLQkJcmVhZCBmaWxlIGZyb20gc3RkaW4KK3wtdGFnfAkgICB2aW0gW29wdGlvbnNdIC10IHt0YWd9CWVkaXQgdGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHt0YWd9Cit8LXFmfAkgICB2aW0gW29wdGlvbnNdIC1xIFtmbmFtZV0Jc3RhcnQgZWRpdGluZyBpbiBRdWlja0ZpeCBtb2RlLAorCQkJCQkgICBkaXNwbGF5IHRoZSBmaXJzdCBlcnJvcgorCisJVmltIGFyZ3VtZW50czoKKworfC1ndWl8CS1nCQkgICAgc3RhcnQgR1VJIChhbHNvIGFsbG93cyBvdGhlciBvcHRpb25zKQorCit8LSt8CStbbnVtXQkJICAgIHB1dCB0aGUgY3Vyc29yIGF0IGxpbmUgW251bV0gKGRlZmF1bHQ6IGxhc3QgbGluZSkKK3wtK2N8CSt7Y29tbWFuZH0JICAgIGV4ZWN1dGUge2NvbW1hbmR9IGFmdGVyIGxvYWRpbmcgdGhlIGZpbGUKK3wtKy98CSsve3BhdH0ge2ZpbGV9IC4uICAgcHV0IHRoZSBjdXJzb3IgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2Yge3BhdH0KK3wtdnwJLXYJCSAgICBWaSBtb2RlLCBzdGFydCBleCBpbiBOb3JtYWwgbW9kZQorfC1lfAktZQkJICAgIEV4IG1vZGUsIHN0YXJ0IHZpbSBpbiBFeCBtb2RlCit8LVJ8CS1SCQkgICAgUmVhZC1vbmx5IG1vZGUsIGltcGxpZXMgLW4KK3wtbXwJLW0JCSAgICBtb2RpZmljYXRpb25zIG5vdCBhbGxvd2VkIChyZXNldHMgJ3dyaXRlJyBvcHRpb24pCit8LWJ8CS1iCQkgICAgYmluYXJ5IG1vZGUKK3wtbHwJLWwJCSAgICBsaXNwIG1vZGUKK3wtQXwJLUEJCSAgICBBcmFiaWMgbW9kZSAoJ2FyYWJpYycgaXMgc2V0KQorfC1GfAktRgkJICAgIEZhcnNpIG1vZGUgKCdma21hcCcgYW5kICdyaWdodGxlZnQnIGFyZSBzZXQpCit8LUh8CS1ICQkgICAgSGVicmV3IG1vZGUgKCdoa21hcCcgYW5kICdyaWdodGxlZnQnIGFyZSBzZXQpCit8LVZ8CS1WCQkgICAgVmVyYm9zZSwgZ2l2ZSBpbmZvcm1hdGl2ZSBtZXNzYWdlcworfC1DfAktQwkJICAgIENvbXBhdGlibGUsIHNldCB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbgorfC1OfAktTgkJICAgIE5vY29tcGF0aWJsZSwgcmVzZXQgdGhlICdjb21wYXRpYmxlJyBvcHRpb24KK3wtcnwJLXIJCSAgICBnaXZlIGxpc3Qgb2Ygc3dhcCBmaWxlcworfC1yfAktciB7ZmlsZX0gLi4JICAgIHJlY292ZXIgYWJvcnRlZCBlZGl0IHNlc3Npb24KK3wtbnwJLW4JCSAgICBkbyBub3QgY3JlYXRlIGEgc3dhcCBmaWxlCit8LW98CS1vIFtudW1dCSAgICBvcGVuIFtudW1dIHdpbmRvd3MgKGRlZmF1bHQ6IG9uZSBmb3IgZWFjaCBmaWxlKQorfC1mfAktZgkJICAgIEdVSTogZm9yZWdyb3VuZCBwcm9jZXNzLCBkb24ndCBmb3JrCisJCQkgICAgQW1pZ2E6IGRvIG5vdCByZXN0YXJ0IFZJTSB0byBvcGVuIGEgd2luZG93IChmb3IKKwkJCQllLmcuLCBtYWlsKQorfC1zfAktcyB7c2NyaXB0aW59CSAgICBmaXJzdCByZWFkIGNvbW1hbmRzIGZyb20gdGhlIGZpbGUge3NjcmlwdGlufQorfC13fAktdyB7c2NyaXB0b3V0fQkgICAgd3JpdGUgdHlwZWQgY2hhcnMgdG8gZmlsZSB7c2NyaXB0b3V0fSAoYXBwZW5kKQorfC1XfAktVyB7c2NyaXB0b3V0fQkgICAgd3JpdGUgdHlwZWQgY2hhcnMgdG8gZmlsZSB7c2NyaXB0b3V0fSAob3ZlcndyaXRlKQorfC1UfAktVCB7dGVybWluYWx9CSAgICBzZXQgdGVybWluYWwgbmFtZQorfC1kfAktZCB7ZGV2aWNlfQkgICAgQW1pZ2E6IG9wZW4ge2RldmljZX0gdG8gYmUgdXNlZCBhcyBhIGNvbnNvbGUKK3wtdXwJLXUge3ZpbXJjfQkgICAgcmVhZCBpbml0cyBmcm9tIHt2aW1yY30gaW5zdGVhZCBvZiBvdGhlciBpbml0cworfC1VfAktVSB7Z3ZpbXJjfQkgICAgaWRlbSwgZm9yIHdoZW4gc3RhcnRpbmcgdGhlIEdVSQorfC1pfAktaSB7dmltaW5mb30JICAgIHJlYWQgaW5mbyBmcm9tIHt2aW1pbmZvfSBpbnN0ZWFkIG9mIG90aGVyIGZpbGVzCit8LS0tfAktLQkJICAgIGVuZCBvZiBvcHRpb25zLCBvdGhlciBhcmd1bWVudHMgYXJlIGZpbGUgbmFtZXMKK3wtLWhlbHB8ICAgIC0taGVscAkgICAgc2hvdyBsaXN0IG9mIGFyZ3VtZW50cyBhbmQgZXhpdAorfC0tdmVyc2lvbnwgLS12ZXJzaW9uCSAgICBzaG93IHZlcnNpb24gaW5mbyBhbmQgZXhpdAorfC0tfAktCQkgICAgUmVhZCBmaWxlIGZyb20gc3RkaW4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2FjKgkJQXV0b21hdGljIENvbW1hbmRzCisKK3x2aW1pbmZvLWZpbGV8CVJlYWQgcmVnaXN0ZXJzLCBtYXJrcywgaGlzdG9yeSBhdCBzdGFydHVwLCBzYXZlIHdoZW4gZXhpdGluZy4KKworfDpydmltaW5mb3wJOnJ2W2ltaW5mb10gW2ZpbGVdCVJlYWQgaW5mbyBmcm9tIHZpbWluZm8gZmlsZSBbZmlsZV0KK3w6cnZpbWluZm98CTpydltpbWluZm9dISBbZmlsZV0JaWRlbSwgb3ZlcndyaXRlIGV4aXN0aW5nIGluZm8KK3w6d3ZpbWluZm98CTp3dltpbWluZm9dIFtmaWxlXQlBZGQgaW5mbyB0byB2aW1pbmZvIGZpbGUgW2ZpbGVdCit8Ond2aW1pbmZvfAk6d3ZbaW1pbmZvXSEgW2ZpbGVdCVdyaXRlIGluZm8gdG8gdmltaW5mbyBmaWxlIFtmaWxlXQorCit8bW9kZWxpbmV8CUF1dG9tYXRpYyBvcHRpb24gc2V0dGluZyB3aGVuIGVkaXRpbmcgYSBmaWxlCisKK3xtb2RlbGluZXwJdmltOntzZXQtYXJnfTogLi4JSW4gdGhlIGZpcnN0IGFuZCBsYXN0IGxpbmVzIG9mIHRoZQorCQkJCQlmaWxlIChzZWUgJ21sJyBvcHRpb24pLCB7c2V0LWFyZ30gaXMKKwkJCQkJZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gIjpzZXQiCisKK3xhdXRvY29tbWFuZHwJQXV0b21hdGljIGV4ZWN1dGlvbiBvZiBjb21tYW5kcyBvbiBjZXJ0YWluIGV2ZW50cy4KKworfDphdXRvY21kfAk6YXUJCQlMaXN0IGFsbCBhdXRvY29tbWFuZHMKK3w6YXV0b2NtZHwJOmF1IHtldmVudH0JCUxpc3QgYWxsIGF1dG9jb21tYW5kcyBmb3Ige2V2ZW50fQorfDphdXRvY21kfAk6YXUge2V2ZW50fSB7cGF0fQlMaXN0IGFsbCBhdXRvY29tbWFuZHMgZm9yIHtldmVudH0gd2l0aAorCQkJCQl7cGF0fQorfDphdXRvY21kfAk6YXUge2V2ZW50fSB7cGF0fSB7Y21kfQlFbnRlciBuZXcgYXV0b2NvbW1hbmRzIGZvciB7ZXZlbnR9CisJCQkJCXdpdGgge3BhdH0KK3w6YXV0b2NtZHwJOmF1IQkJCVJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzCit8OmF1dG9jbWR8CTphdSEge2V2ZW50fQkJUmVtb3ZlIGFsbCBhdXRvY29tbWFuZHMgZm9yIHtldmVudH0KK3w6YXV0b2NtZHwJOmF1ISAqIHtwYXR9CQlSZW1vdmUgYWxsIGF1dG9jb21tYW5kcyBmb3Ige3BhdH0KK3w6YXV0b2NtZHwJOmF1ISB7ZXZlbnR9IHtwYXR9CVJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzIGZvciB7ZXZlbnR9CisJCQkJCXdpdGgge3BhdH0KK3w6YXV0b2NtZHwJOmF1ISB7ZXZlbnR9IHtwYXR9IHtjbWR9ICBSZW1vdmUgYWxsIGF1dG9jb21tYW5kcyBmb3Ige2V2ZW50fQorCQkJCQl3aXRoIHtwYXR9IGFuZCBlbnRlciBuZXcgb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX3dpKgkJTXVsdGktd2luZG93IGNvbW1hbmRzCisKK3xDVFJMLVdfc3wJQ1RSTC1XIHMgIG9yICA6c3BsaXQJU3BsaXQgd2luZG93IGludG8gdHdvIHBhcnRzCit8OnNwbGl0X2Z8CTpzcGxpdCB7ZmlsZX0JCVNwbGl0IHdpbmRvdyBhbmQgZWRpdCB7ZmlsZX0gaW4gb25lIG9mCisJCQkJCSAgIHRoZW0KK3w6dnNwbGl0fAk6dnNwbGl0IHtmaWxlfQkJU2FtZSwgYnV0IHNwbGl0IHZlcnRpY2FsbHkKK3w6dmVydGljYWx8CTp2ZXJ0aWNhbCB7Y21kfQkJTWFrZSB7Y21kfSBzcGxpdCB2ZXJ0aWNhbGx5CisKK3w6c2ZpbmR8CTpzZltpbmRdIHtmaWxlfQkJU3BsaXQgd2luZG93LCBmaW5kIHtmaWxlfSBpbiAncGF0aCcKKwkJCQkJICAgYW5kIGVkaXQgaXQuCit8Q1RSTC1XX118CUNUUkwtVyBdCQlTcGxpdCB3aW5kb3cgYW5kIGp1bXAgdG8gdGFnIHVuZGVyCisJCQkJCSAgIGN1cnNvcgorfENUUkwtV19mfAlDVFJMLVcgZgkJU3BsaXQgd2luZG93IGFuZCBlZGl0IGZpbGUgbmFtZSB1bmRlcgorCQkJCQkgICB0aGUgY3Vyc29yCit8Q1RSTC1XX158CUNUUkwtVyBeCQlTcGxpdCB3aW5kb3cgYW5kIGVkaXQgYWx0ZXJuYXRlIGZpbGUKK3xDVFJMLVdfbnwJQ1RSTC1XIG4gIG9yICA6bmV3CUNyZWF0ZSBuZXcgZW1wdHkgd2luZG93Cit8Q1RSTC1XX3F8CUNUUkwtVyBxICBvciAgOnFbdWl0XQlRdWl0IGVkaXRpbmcgYW5kIGNsb3NlIHdpbmRvdworfENUUkwtV19jfAlDVFJMLVcgYyAgb3IgIDpjbFtvc2VdCU1ha2UgYnVmZmVyIGhpZGRlbiBhbmQgY2xvc2Ugd2luZG93Cit8Q1RSTC1XX298CUNUUkwtVyBvICBvciAgOm9uW2x5XQlNYWtlIGN1cnJlbnQgd2luZG93IG9ubHkgb25lIG9uIHRoZQorCQkJCQkgICBzY3JlZW4KKworfENUUkwtV19qfAlDVFJMLVcgagkJTW92ZSBjdXJzb3IgdG8gd2luZG93IGJlbG93Cit8Q1RSTC1XX2t8CUNUUkwtVyBrCQlNb3ZlIGN1cnNvciB0byB3aW5kb3cgYWJvdmUKK3xDVFJMLVdfQ1RSTC1XfAlDVFJMLVcgQ1RSTC1XCQlNb3ZlIGN1cnNvciB0byB3aW5kb3cgYmVsb3cgKHdyYXApCit8Q1RSTC1XX1d8CUNUUkwtVyBXCQlNb3ZlIGN1cnNvciB0byB3aW5kb3cgYWJvdmUgKHdyYXApCit8Q1RSTC1XX3R8CUNUUkwtVyB0CQlNb3ZlIGN1cnNvciB0byB0b3Agd2luZG93Cit8Q1RSTC1XX2J8CUNUUkwtVyBiCQlNb3ZlIGN1cnNvciB0byBib3R0b20gd2luZG93Cit8Q1RSTC1XX3B8CUNUUkwtVyBwCQlNb3ZlIGN1cnNvciB0byBwcmV2aW91cyBhY3RpdmUgd2luZG93CisKK3xDVFJMLVdfcnwJQ1RSTC1XIHIJCVJvdGF0ZSB3aW5kb3dzIGRvd253YXJkcworfENUUkwtV19SfAlDVFJMLVcgUgkJUm90YXRlIHdpbmRvd3MgdXB3YXJkcworfENUUkwtV194fAlDVFJMLVcgeAkJRXhjaGFuZ2UgY3VycmVudCB3aW5kb3cgd2l0aCBuZXh0IG9uZQorCit8Q1RSTC1XXz18CUNUUkwtVyA9CQlNYWtlIGFsbCB3aW5kb3dzIGVxdWFsIGhlaWdodAorfENUUkwtV18tfAlDVFJMLVcgLQkJRGVjcmVhc2UgY3VycmVudCB3aW5kb3cgaGVpZ2h0Cit8Q1RSTC1XXyt8CUNUUkwtVyArCQlJbmNyZWFzZSBjdXJyZW50IHdpbmRvdyBoZWlnaHQKK3xDVFJMLVdfX3wJQ1RSTC1XIF8JCVNldCBjdXJyZW50IHdpbmRvdyBoZWlnaHQgKGRlZmF1bHQ6CisJCQkJCSAgIHZlcnkgaGlnaCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfYnUqCQlCdWZmZXIgbGlzdCBjb21tYW5kcworCit8OmJ1ZmZlcnN8CTpidWZmZXJzICBvciAgOmZpbGVzCWxpc3QgYWxsIGtub3duIGJ1ZmZlciBhbmQgZmlsZSBuYW1lcworCit8OmJhbGx8CQk6YmFsbAkgIG9yICA6c2JhbGwJZWRpdCBhbGwgYXJncy9idWZmZXJzCit8OnVuaGlkZXwJOnVuaGlkZSAgIG9yICA6c3VuaGlkZQllZGl0IGFsbCBsb2FkZWQgYnVmZmVycworCit8OmJhZGR8CQk6YmFkZCB7Zm5hbWV9CQlhZGQgZmlsZSBuYW1lIHtmbmFtZX0gdG8gdGhlIGxpc3QKK3w6YnVubG9hZHwJOmJ1bmxvYWRbIV0gW05dCQl1bmxvYWQgYnVmZmVyIFtOXSBmcm9tIG1lbW9yeQorfDpiZGVsZXRlfAk6YmRlbGV0ZVshXSBbTl0JCXVubG9hZCBidWZmZXIgW05dIGFuZCBkZWxldGUgaXQgZnJvbQorCQkJCQkgICB0aGUgYnVmZmVyIGxpc3QKKworCSAgICAgIGluIGN1cnJlbnQgd2luZG93ICAgaW4gbmV3IHdpbmRvdwl+Cit8OmJ1ZmZlcnwgICAgIDpbTl1idWZmZXIgW05dCSAgOltOXXNidWZmZXIgW05dICAgICB0byBhcmcvYnVmIE4KK3w6Ym5leHR8ICAgICAgOltOXWJuZXh0IFtOXQkgIDpbTl1zYm5leHQgW05dICAgICAgdG8gTnRoIG5leHQgYXJnL2J1ZgorfDpiTmV4dHwgICAgICA6W05dYk5leHQgW05dCSAgOltOXXNiTmV4dCBbTl0gICAgICB0byBOdGggcHJldmlvdXMgYXJnL2J1ZgorfDpicHJldmlvdXN8ICA6W05dYnByZXZpb3VzIFtOXSAgIDpbTl1zYnByZXZpb3VzIFtOXSAgdG8gTnRoIHByZXZpb3VzIGFyZy9idWYKK3w6YmZpcnN0fCAgICAgOmJmaXJzdAkJICA6c2JmaXJzdAkgICAgICB0byBmaXJzdCBhcmcvYnVmCit8OmJsYXN0fCAgICAgIDpibGFzdAkJICA6c2JsYXN0CSAgICAgIHRvIGxhc3QgYXJnL2J1ZgorfDpibW9kaWZpZWR8ICA6W05dYm1vZCBbTl0JICA6W05dc2Jtb2QgW05dCSAgICAgIHRvIE50aCBtb2RpZmllZCBidWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfc3kqCQlTeW50YXggSGlnaGxpZ2h0aW5nCisKK3w6c3luLW9ufAk6c3ludGF4IG9uCQlzdGFydCB1c2luZyBzeW50YXggaGlnaGxpZ2h0aW5nCit8OnN5bi1vZmZ8CTpzeW50YXggb2ZmCQlzdG9wIHVzaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKKworfDpzeW4ta2V5d29yZHwJOnN5bnRheCBrZXl3b3JkIHtncm91cC1uYW1lfSB7a2V5d29yZH0gLi4KKwkJCQkJYWRkIGEgc3ludGF4IGtleXdvcmQgaXRlbQorfDpzeW4tbWF0Y2h8CTpzeW50YXggbWF0Y2gge2dyb3VwLW5hbWV9IHtwYXR0ZXJufSAuLi4KKwkJCQkJYWRkIHN5bnRheCBtYXRjaCBpdGVtCit8OnN5bi1yZWdpb258CTpzeW50YXggcmVnaW9uIHtncm91cC1uYW1lfSB7cGF0dGVybn0gLi4uCisJCQkJCWFkZCBzeW50YXggcmVnaW9uIGl0ZW0KK3w6c3luLXN5bmN8CTpzeW50YXggc3luYyBbY2NvbW1lbnQgfCBsaW5lcyB7Tn0gfCAuLi5dCisJCQkJCXRlbGwgc3ludGF4IGhvdyB0byBzeW5jCit8OnN5bnRheHwJOnN5bnRheCBbbGlzdF0JCWxpc3QgY3VycmVudCBzeW50YXggaXRlbXMKK3w6c3luLWNsZWFyfAk6c3ludGF4IGNsZWFyCQljbGVhciBhbGwgc3ludGF4IGluZm8KKworfDpoaWdobGlnaHR8CTpoaWdobGlnaHQgY2xlYXIJY2xlYXIgYWxsIGhpZ2hsaWdodCBpbmZvCit8OmhpZ2hsaWdodHwJOmhpZ2hsaWdodCB7Z3JvdXAtbmFtZX0ge2tleX09e2FyZ30gLi4KKwkJCQkJc2V0IGhpZ2hsaWdodGluZyBmb3Ige2dyb3VwLW5hbWV9CisKK3w6ZmlsZXR5cGV8CTpmaWxldHlwZSBvbgkJc3dpdGNoIG9uIGZpbGUgdHlwZSBkZXRlY3Rpb24sIHdpdGhvdXQKKwkJCQkJc3ludGF4IGhpZ2hsaWdodGluZworfDpmaWxldHlwZXwJOmZpbGV0eXBlIHBsdWdpbiBpbmRlbnQgb24KKwkJCQkJc3dpdGNoIG9uIGZpbGUgdHlwZSBkZXRlY3Rpb24sIHdpdGgKKwkJCQkJYXV0b21hdGljIGluZGVudGluZyBhbmQgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKlFfZ3UqCQlHVUkgY29tbWFuZHMKKworfDpndWl8CQk6Z3VpCQkJVU5JWDogc3RhcnQgdGhlIEdVSQorfDpndWl8CQk6Z3VpIHtmbmFtZX0gLi4JCWlkZW0sIGFuZCBlZGl0IHtmbmFtZX0gLi4KKworfDptZW51fAkJOm1lbnUJCQlsaXN0IGFsbCBtZW51cworfDptZW51fAkJOm1lbnUge21wYXRofQkJbGlzdCBtZW51cyBzdGFydGluZyB3aXRoIHttcGF0aH0KK3w6bWVudXwJCTptZW51IHttcGF0aH0ge3Joc30JYWRkIG1lbnUge21wYXRofSwgZ2l2aW5nIHtsaHN9Cit8Om1lbnV8CQk6bWVudSB7cHJpfSB7bXBhdGh9IHtyaHN9CisJCQkJCWlkZW0sIHdpdGggcHJpb3JpdGllcyB7cHJpfQorfDptZW51fAkJOm1lbnUgVG9vbEJhci57bmFtZX0ge3Joc30KKwkJCQkJYWRkIHRvb2xiYXIgaXRlbSwgZ2l2aW5nIHtsaHN9Cit8OnRtZW51fAk6dG1lbnUge21wYXRofSB7dGV4dH0JYWRkIHRvb2x0aXAgdG8gbWVudSB7bXBhdGh9Cit8OnVubWVudXwJOnVubWVudSB7bXBhdGh9CQlyZW1vdmUgbWVudSB7bXBhdGh9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKypRX2ZvKgkJRm9sZGluZworCit8J2ZvbGRtZXRob2QnfAlzZXQgZm9sZG1ldGhvZD1tYW51YWwJbWFudWFsIGZvbGRpbmcKKwkJc2V0IGZvbGRtZXRob2Q9aW5kZW50CWZvbGRpbmcgYnkgaW5kZW50CisJCXNldCBmb2xkbWV0aG9kPWV4cHIJZm9sZGluZyBieSAnZm9sZGV4cHInCisJCXNldCBmb2xkbWV0aG9kPXN5bnRheAlmb2xkaW5nIGJ5IHN5bnRheCByZWdpb25zCisJCXNldCBmb2xkbWV0aG9kPW1hcmtlcglmb2xkaW5nIGJ5ICdmb2xkbWFya2VycycKKworfHpmfAkJemZ7bW90aW9ufQkJb3BlcmF0b3I6IERlZmluZSBhIGZvbGQgbWFudWFsbHkKK3w6Zm9sZHwJCTp7cmFuZ2V9Zm9sZAkJZGVmaW5lIGEgZm9sZCBmb3Ige3JhbmdlfSBsaW5lcworfHpkfAkJemQJCQlkZWxldGUgb25lIGZvbGQgdW5kZXIgdGhlIGN1cnNvcgorfHpEfAkJekQJCQlkZWxldGUgYWxsIGZvbGRzIHVuZGVyIHRoZSBjdXJzb3IKKworfHpvfAkJem8JCQlvcGVuIG9uZSBmb2xkIHVuZGVyIHRoZSBjdXJzb3IKK3x6T3wJCXpPCQkJb3BlbiBhbGwgZm9sZHMgdW5kZXIgdGhlIGN1cnNvcgorfHpjfAkJemMJCQljbG9zZSBvbmUgZm9sZCB1bmRlciB0aGUgY3Vyc29yCit8ekN8CQl6QwkJCWNsb3NlIGFsbCBmb2xkcyB1bmRlciB0aGUgY3Vyc29yCisKK3x6bXwJCXptCQkJZm9sZCBtb3JlOiBkZWNyZWFzZSAnZm9sZGxldmVsJworfHpNfAkJek0JCQljbG9zZSBhbGwgZm9sZHM6IG1ha2UgJ2ZvbGRsZXZlbCcgemVybworfHpyfAkJenIJCQlyZWR1Y2UgZm9sZGluZzogaW5jcmVhc2UgJ2ZvbGRsZXZlbCcKK3x6UnwJCXpSCQkJb3BlbiBhbGwgZm9sZHM6IG1ha2UgJ2ZvbGRsZXZlbCcgbWF4LgorCit8em58CQl6bgkJCWZvbGQgbm9uZTogcmVzZXQgJ2ZvbGRlbmFibGUnCit8ek58CQl6TgkJCWZvbGQgbm9ybWFsIHNldCAnZm9sZGVuYWJsZScKK3x6aXwJCXppCQkJaW52ZXJ0ICdmb2xkZW5hYmxlJworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcXVvdGVzLnR4dCBiL3J1bnRpbWUvZG9jL3F1b3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1YzNhMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3F1b3Rlcy50eHQKQEAgLTAsMCArMSwyNzQgQEAKKypxdW90ZXMudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXkgMDYKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkJCQkJKnF1b3RlcyoKK0hlcmUgYXJlIHNvbWUgbmljZSBxdW90ZXMgYWJvdXQgVmltIHRoYXQgSSBjb2xsZWN0ZWQgZnJvbSBuZXdzIGFuZCBtYWlsLgorCisKK3ZpbSAodmltKSBub3VuIC0gRWJ1bGxpZW50IHZpdGFsaXR5IGFuZCBlbmVyZ3kuICBbTGF0aW4sIGFjY3VzYXRpdmUgb2YgdmlzLAorc3RyZW5ndGhdICAoRGljdGlvbmFyeSkKKworVmltIGlzIHNvIG11Y2ggYmV0dGVyIHRoYW4gdmkgdGhhdCBhIGdyZWF0IG1hbnkgb2YgbXkgb2xkIHZpIDptYXAncyBiZWNhbWUKK2ltbWVkaWF0ZWx5IG9ic29sZXRlISAoVG9ueSBOdWdlbnQsIEF1c3RyYWxpYSkKKworQ29taW5nIHdpdGggYSB2ZXJ5IEdVSSBtaW5kc2V0IGZyb20gV2luZG93cywgSSBhbHdheXMgdGhvdWdodCBvZiBwZW9wbGUgdXNpbmcKK1ZpIGFzIHNvbWUga2luZCBvZiBvdXRlciBzcGFjZSBhbGllbiBpbiBodW1hbiBjbG90aGVzLiAgT25jZSBJIHRyaWVkIEkgcmVhbGx5Citnb3QgYWRkaWN0ZWQgYnkgaXRzIHBvd2VyIGFuZCBub3cgSSBmb3VuZCBteXNlbGYgdHlwaW5nIFZpbSBrZXlwcmVzc2VzIGluIHRoZQorb2RkZXN0IHBsYWNlcyEgVGhhdCdzIHdoeSBJIHdvdWxkIGxpa2UgdG8gc2VlIFZpbSBlbWJlZGRlZCBpbiBldmVyeQorYXBwbGljYXRpb24gd2hpY2ggZGVhbHMgd2l0aCB0ZXh0IGVkaXRpbmcuIChKb3PpIEZvbnNlY2EpCisKK0kgd2FzIGEgMTIteWVhciBlbWFjcyB1c2VyIHdobyBzd2l0Y2hlZCB0byBWaW0gYWJvdXQgYSB5ZWFyIGFnbyBhZnRlciBmaW5hbGx5CitnaXZpbmcgdXAgb24gdGhlIG11bHRpcGxlIGluY29tcGF0aWJsZSB2ZXJzaW9ucywgZmxha3kgY29udHJpYnV0ZWQgcGFja2FnZXMsCitkaXNvcmdhbml6ZWQga2V5c3Ryb2tlcywgZXRjLiAgQW5kIGl0IHdhcyBvbmUgb2YgdGhlIGJlc3QgbW92ZXMgSSBldmVyIG1hZGUuCisoSm9lbCBCdXJ0b24pCisKK0FsdGhvdWdoIGFsbCBvZiB0aGUgcHJvZ3JhbXMgd2VyZSB1c2VkIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gb2YgdGhlIG5ldyBhbmQKK3JldmlzZWQgbWF0ZXJpYWwsIG1vc3Qgb2YgdGhlIGVkaXRpbmcgd2FzIGRvbmUgd2l0aCBWaW0gdmVyc2lvbnMgNC41IGFuZCA1LjAKK3VuZGVyIEdOVS1MaW51eCAoUmVkaGF0IDQuMikuICAoQXJub2xkIFJvYmJpbnMsIElzcmFlbCwgYXV0aG9yIG9mICJMZWFybmluZwordGhlIFZpIGVkaXRvciIpCisKK091dCBvZiBhbGwgdGhlIG9wZW4gc29mdHdhcmUgaSd2ZSBldmVyIHNlZW4gYW5kIHVzZWQsIGFuZCBpJ3ZlIHNlZW4gYSBsb3QsIFZpbQoraXMgdGhlIGJlc3QsIG1vc3QgdXNlZnVsIGFuZCBoaWdoZXN0IHF1YWxpdHkgdG8gd29yayB3aXRoLCBzZWNvbmQgb25seSB0byB0aGUKK2xpbnV4IGtlcm5lbCBpdHNlbGYuIChQZXRlciBKYXkgU2Fsem1hbikKKworSXQncyB3ZWxsIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBfZW50aXJldHlfIG9mIFNvdXJjZUZvcmdlIHdhcyB3cml0dGVuIHVzaW5nCitWaW0gYW5kIGl0cyBuaWZ0eSBQSFAgc3ludGF4IGhpZ2hsaWdodGluZy4gSSB0aGluayB0aGUgZW50aXJlIFNGLm5ldCB0ZWNoCitzdGFmZiB1c2VzIFZpbSBhbmQgd2UncmUgYWxsIGV4Y2l0ZWQgdG8gaGF2ZSB5b3UgYWJvYXJkISAoVGltIFBlcmR1ZSkKKworVmltIGlzIG9uZSBvZiBhIHNlbGVjdCBidW5jaCBvZiB0b29scyBmb3Igd2hpY2ggSSBoYXZlIG5vIHN1YnN0aXR1dGUuICBJdCBpcworYSBicmlsbGlhbnQgcGllY2Ugb2Ygd29yayEgKEJpanUgQ2hhY2tvKQorCitBIHByZXZpb3VzIGdpcmxmcmllbmQgb2YgbWluZSBzd2l0Y2hlZCB0byBlbWFjcy4gIE5lZWRsZXNzIHRvIHNheSwgdGhlCityZWxhdGlvbnNoaXAgd2VudCBub3doZXJlLiAoR2VvZmZyZXkgTWFubikKKworSSByYXJlbHkgdGhpbmsgYWJvdXQgVmltLCBpbiB0aGUgc2FtZSB3YXkgdGhhdCBJIGd1ZXNzIGEgZmlzaCByYXJlbHkgdGhpbmtzCithYm91dCB3YXRlci4gIEl0J3MgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIGV2ZXJ5dGhpbmcgZWxzZSBoYXBwZW5zLiAgSSdtIGEKK2ZhaXJseSBidXN5IHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdvcmtpbmcgb24gYSBsb3Qgb2YgZGlmZmVyZW50IHBsYXRmb3Jtcy4gIFZpbQoraXMgdGhlIG9ubHkgdGhpbmcgdGhhdCdzIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBteSBzeXN0ZW1zLCBhbmQgaXQncyBqdXN0IGFib3V0Cit0aGUgb25seSB0aGluZyB0aGF0IGRvZXNuJ3QgYnJlYWsgZnJvbSB0aW1lIHRvIHRpbWUuICBXaGVuIGEgbmV3IHN5c3RlbSBjb21lcworaW4gdGhlIGRvb3Igd2l0aG91dCBWaW0sIEkgaW5zdGFsbCBpdCByaWdodCBhd2F5LiAgR3JlYXQgdG8gaGF2ZSBhIHRvb2wgdGhhdCdzCit0aGUgc2FtZSBldmVyeXdoZXJlLCB0aGF0J3MgY29tcGxldGVseSByZWxpYWJsZSwgc28gSSBjYW4gaWdub3JlIGl0IGFuZCB0aGluaworYWJvdXQgb3RoZXIgdGhpbmdzLiAoUGV0ZSBTY2hhZWZmZXIpCisKK0hhdmluZyByZWNlbnRseSBzdWNjZWVkZWQgaW4gcnVubmluZyBWaW0gdmlhIHRlbG5ldCB0aHJvdWdoIGEgTm9raWEKK0NvbW11bmljYXRvciwgSSBjYW4gbm93IHJlcG9ydCB0aGF0IGl0IHdvcmtzIG5pY2VseSBvbiBhIFBhbG0gUGlsb3QgdG9vLgorKEFsbGFuIEtlbGx5LCBTY290bGFuZCkKKworWW91J3ZlIGRvbmUgYSB0cmVtZW5kb3VzIGpvYiB3aXRoICdWSU0nLCBCcmFtISAgVGhlIG1vcmUgSSB1c2UgaXQsIHRoZSBtb3JlCitpbXByZXNzZWQgSSBnZXQgKEkgYW0gYW4gb2xkICd2aScgZGllIGhhcmQgd2hvIG9uY2Ugc3RhcnRlZCBvdXQgd2l0aCBlYXJseQordmVyc2lvbnMgb2YgJ2VtYWNzJyBpbiB0aGUgbGF0ZSAxOTcwJ3MgYW5kIHdhcyByZWxpZXZlZCBieSBmaW5kaW5nICd2aScgaW4gdGhlCitmaXJzdCBVTklYIEkgY2FtZSBhY3Jvc3MgaW4gMTk4MykuICBJbiBteSBvcGluaW9uLCBpdCdzIGFib3V0IHRpbWUgJ1ZJTScKK3JlcGxhY2UgJ2VtYWNzJyBhcyB0aGUgc3RhbmRhcmQgZm9yIHRvcCBlZGl0b3JzLiAgKEJvIFRoaWRlJywgU3dlZGVuKQorCitJIGxvdmUgYW5kIHVzZSBWSU0gaGVhdmlseSB0b28uIChMYXJyeSBXYWxsKQorCitWaSBpcyBsaWtlIGEgRmVycmFyaSwgaWYgeW91J3JlIGEgYmVnaW5uZXIsIGl0IGhhbmRsZXMgbGlrZSBhIGJpdGNoLCBidXQgb25jZQoreW91IGdldCB0aGUgaGFuZyBvZiBpdCwgaXRzIHNtYWxsLCBwb3dlcmZ1bCBhbmQgRkFTVCEgKFVua25vd24pCitWSU0gaXMgbGlrZSBhIG5ldyBtb2RlbCBGZXJyYXJpLCBhbmQgc291bmRzIGxpa2Ugb25lIHRvbyAtICJWSUlJSUlJTU1NISIKKyhTdGVwaGVuIFJpZWhtLCBHZXJtYW55KQorCitTY2hvbiBiZWkgTnV0enVuZyBlaW5lcyBCcnVjaHRlaWxzIGRlciBWSU0tRnVua3Rpb25lbiB3aXJkIGRlciBCZW51dHplciByZWNodAorc2NobmVsbCBkaWUgVm9yenVlZ2UgZGllc2VzIEVkaXRvcnMga2VubmVuLSB1bmQgc2NoYWV0emVubGVybmVuLgorVHJhbnNsYXRlZDogRXZlbiB3aGVuIG9ubHkgdXNpbmcgYSBmcmFjdGlvbiBvZiBWSU0tZnVuY3Rpb25zLCB0aGUgdXNlciB3aWxsCitxdWlja2x5IGdldCB1c2VkIHRvIGFuZCBhcHByZWNpYXRlIHRoZSBhZHZhbnRhZ2VzIG9mIHRoaXMgZWRpdG9yLiAgKEdhcnJ5CitHbGVuZG93biwgY29uY2x1c2lvbiBvZiBhbiBhcnRpY2xlIG9uIFZJTSBpbiBpWCBtYWdhemluZSA5LzE5OTgpCisKK0kndmUgcmVjZW50bHkgYWNxdWlyZWQgdGhlIE8nUmVpbGx5IGJvb2sgb24gVkkgKGl0IGFsc28gZGlzY3Vzc2VzIFZJTQoraW4tZGVwdGgpLCBhbmQgSSdtIGFtYXplZCBhdCBqdXN0IGhvdyBwb3dlcmZ1bCB0aGlzIGFwcGxpY2F0aW9uIGlzLiAoSmVmZnJleQorUmFua2luKQorCitUaGlzIGd1aWRlIHdhcyB3cml0dGVuIHVzaW5nIHRoZSBXaW5kb3dzIDkueCBkaXN0cmlidXRpb24gb2YgR1ZJTSwgd2hpY2ggaXMKK3F1aXRlIHBvc3NpYmx5IHRoZSBncmVhdGVzdCB0aGluZyB0byBjb21lIGFsb25nIHNpbmNlIEdvZCBjcmVhdGVkIHRoZSBuYWtlZAorZ2lybC4gKE1pY2hhZWwgRGlCZXJuYXJkbykKKworQm95LCBJIHRob3VnaHQgSSBrbmV3IGFsbW9zdCBldmVyeXRoaW5nIGFib3V0IFZJTSwgYnV0IGV2ZXJ5IHRpbWUgSSBicm93c2UgdGhlCitvbmxpbmUgZG9jdW1lbnRhdGlvbiwgSSBoaXQgdXBvbiBhIG1pbm9yIGJ1dCBjb29sIGFzcGVjdCBvZiBhIFZJTSBmZWF0dXJlIHRoYXQKK0kgZGlkbid0IGtub3cgYmVmb3JlISAgSSBtdXN0IHNheSB0aGUgZG9jdW1lbnRhdGlvbiBpcyBvbmUgdGhlIGZpbmVzdCBJJ3ZlCitldmVyIHNlZW4gaW4gYSBwcm9kdWN0IC0tIGV2ZW4gYmV0dGVyIHRoYW4gbW9zdCBjb21tZXJjaWFsIHByb2R1Y3RzLgorKEdhdXRhbSBNdWR1bnVyaSkKKworVklNIDQuNSBpcyByZWFsbHkgYSBmYW50YXN0aWMgZWRpdG9yLiAgSXQgaGFzIHNvb29vbyBtYW55IGZlYXR1cmVzIGFuZCBtb3JlCitpbXBvcnRhbnRseSwgdGhlIGRlZmF1bHRzIGFyZSBzbyB3ZWxsIHRob3VnaHQgb3V0IHRoYXQgeW91IHJlYWxseSBkb24ndCBoYXZlCit0byBjaGFuZ2UgYW55dGhpbmchISAgV29yZHMgY2Fubm90IGV4cHJlc3MgbXkgYW1hemVtZW50IGFuZCBncmF0aXR1ZGUgdG8gdGhlCitjcmVhdG9ycyBvZiBWSU0uICBLZWVwIGl0IHVwLiAgKFZpa2FzLCBVU0EpCisKK0kgd29uZGVyIGhvdyBsb25nIGl0IHdpbGwgYmUgYmVmb3JlIHBlb3BsZSB3aWxsIHJlZmVyIHRvIG90aGVyIFZpIGVkaXRvcnMgYXMKK1ZJTSBjbG9uZXM/ICAoRGFycmVuIEhpZWJlcnQpCisKK0kgcmVhZCBhYm91dCBbYXV0by1wb3NpdGlvbmluZy1pbi1maWxlLWJhc2VkLW9uLXRoZS1lcnJvcnMtZnJvbS1tYWtlXSBpbiBvbmUKK29mIHRob3NlICJQZXJmZWN0IFByb2dyYW1tZXIncyBFZGl0b3IiIHRocmVhZHMgYW5kIHdhcyBkZWxpZ2h0ZWQgdG8gZGlzY292ZXIKK3RoYXQgVklNIGFscmVhZHkgc3VwcG9ydHMgaXQuICAoQnJlbmRhbiBNYWNtaWxsYW4sIEF1c3RyYWxpYSkKKworSSBqdXN0IGRpc2NvdmVyZWQgVklNICg1LjApIGFuZCBJJ20gdGVsbGluZyBldmVyeW9uZSBJIGtub3cgYWJvdXQgaXQhCitJIHRlbGwgdGhlbSBWSU0gc3RhbmRzIGZvciBWSSBmb3IgdGhlIG5ldyAoTSlpbGxlbml1bS4gVGhhbmtzIHNvIG11Y2ghCisoTWF0dCBGLiBWYWxlbnRpbmUpCisKK0kgdGhpbmsgZnJvbSBub3cgb24gInZpIiBzaG91bGQgYmUgY2FsbGVkICJWaW0gSW1pdGF0aW9uIiwgbm90IHRoZSBvdGhlciB3YXkKK2Fyb3VuZC4gIChSdW5ndW4gUmFtYW5hdGhhbikKKworVGhlIExhdyBvZiBWSU06CitGb3IgZWFjaCBtZW1iZXIgYiBvZiB0aGUgcG9zc2libGUgYmVoYXZpb3VyIHNwYWNlIEIgb2YgcHJvZ3JhbSBQLCB0aGVyZSBleGlzdHMKK2EgZmluaXRlIHRpbWUgdCBiZWZvcmUgd2hpY2ggYXQgbGVhc3Qgb25lIHVzZXIgdSBpbiB0aGUgdG90YWwgdXNlciBzcGFjZSBVIG9mCitwcm9ncmFtIFAgd2lsbCByZXF1ZXN0IGIgYmVjb21lcyBhIG1lbWJlciBvZiB0aGUgYWxsb3dlZCBiZWhhdmlvdXIgc3BhY2UgQicKKyhCJyA8PSBCKS4KK0luIG90aGVyIHdvcmRzOiBTb29uZXIgb3IgbGF0ZXIgZXZlcnlvbmUgd2FudHMgZXZlcnl0aGluZyBhcyBhbiBvcHRpb24uCisoTmVncmkpCisKK1doZW5ldmVyIEkgbW92ZSB0byBhIG5ldyBjb21wdXRpbmcgcGxhdGZvcm0sIHRoZSBmaXJzdCB0aGluZyBJIGRvIGlzIHRvIHBvcnQKK1ZJTS4gIExhdGVseSwgSSBhbSBzaW1wbHkgc3R1bm5lZCBieSBpdHMgZWFzZSBvZiBjb21waWxhdGlvbiB1c2luZyB0aGUKK2NvbmZpZ3VyZSBmYWNpbGl0eS4gIChBLk0uIFNhYnVuY3UsIFR1cmtleSkKKworVGhlIG9wdGlvbnMgYXJlIHJlYWxseSBleGNlbGxlbnQgYW5kIHZlcnkgcG93ZXJmdWwuIChBbmlzaCBNYWhhcmFqKQorCitUaGUgU3ByaW5nIHVzZXItaW50ZXJmYWNlIGRlc2lnbnMgYXJlIGluLCBhbmQgd29yZCBmcm9tIHRoZSBib3V0aXF1ZXMgaXMgdGhhdAorODB4MjQgdGV4dC1vbmx5IG1vZGUgaXMgYmFjayB3aXRoIGEgKnZlbmdlYW5jZSEgVmkgZWRpdG9yIGNsb25lIFZJTSBidXJzdCBvbnRvCitNYXJjaCBkZXNrLXRvcHMgd2l0aCBhIGRhenpsaW5nIHNob3cgb2YgcGFzdGVsIHN5bnRheCBoaWdobGlnaHRzIGZvciBpdHMgNS4wCitsb29rLiBTdHJpZGVudCBhbmQgY3VzdG9taXphYmxlLCBWSU0gcmFpc2VzIGV5ZWJyb3dzIHdpdGggaXRzIGludGVycHJldGF0aW9uCitvZiB0aGUgY2xhc3NpYyBWaSBzaW5nbGUta2V5IG1hY3JvIGNvbGxlY3Rpb24uCitodHRwOi8vd3d3Lm50ay5uZXQvaW5kZXguY2dpP2JhY2s9YXJjaGl2ZTk4L25vdzAzMjcudHh0JmxpbmU9MTc5I2wKKworSSBqdXN0IHdhbnRlZCB0byB0YWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gbGV0IHlvdSBrbm93IHRoYXQgVklNIDUgUk9DS1MhCitTeW50YXggaGlnaGxpZ2h0aW5nOiBob3cgZGlkIEkgc3Vydml2ZSB3aXRob3V0IGl0PyEgIFRoYW5rIHlvdSBmb3IgY3JlYXRpbmcKK21hbmtpbmQncyBiZXN0IGVkaXRvciEgIChNdW4gSm9obCwgVVNBKQorCitUaGFua3MgYWdhaW4gZm9yIFZJTS4gIEkgdXNlIGl0IGV2ZXJ5IGRheSBvbiBMaW51eC4gKEVyaWMgRm9zdGVyLUpvaG5zb24sCithdXRob3Igb2YgdGhlIGJvb2sgIlVOSVggUHJvZ3JhbW1pbmcgVG9vbHMiKQorCitUaGUgQkVTVCBFRElUT1IgRVZFUiAoU3R1YXJ0IFdvb2xmb3JkKQorCitJIGhhdmUgdXNlZCBtb3N0IG9mIFZJTSdzIGZhbmN5IGZlYXR1cmVzIGF0IGxlYXN0IG9uY2UsIG1hbnkgZnJlcXVlbnRseSwgYW5kIEkKK2NhbiBob25lc3RseSBzYXkgdGhhdCBJIGNvdWxkbid0IGxpdmUgd2l0aCBhbnl0aGluZyBsZXNzIGFueW1vcmUuICBNeQorcHJvZHVjdGl2aXR5IGhhcyBlYXNpbHkgZG91YmxlZCBjb21wYXJlZCB0byB3aGF0IGl0IHdhcyB3aGVuIEkgdXNlZCB2aS4KKyhTaXRhcmFtIENoYW1hcnR5KQorCitJIGx1diBWSU0uICBJdCBpcyBpbmNyZWRpYmxlLiAgSSdtIG5hbWluZyBteSBmaXJzdC1ib3JuIFZpbWJlcmx5LiAgKEpvc2UKK1VucGluZ2NvLCBVU0EpCisKK0hpbnQ6ICAiVklNIiBpcyAidmkgaW1wcm92ZWQiIC0gbXVjaCBiZXR0ZXIhIChTdmVuIEd1Y2tlcywgR2VybWFueSkKKworSSB1c2UgVklNIGV2ZXJ5IGRheS4gIEkgc3BlbmQgbW9yZSB0aW1lIGluIFZJTSB0aGFuIGluIGFueSBvdGhlciBwcm9ncmFtLi4uCitJdCdzIHRoZSBiZXN0IHZpIGNsb25lIHRoZXJlIGlzLiAgSSB0aGluayBpdCdzIGdyZWF0LiAgKENyYWlnIFNhbmRlcnMsCitBdXN0cmFsaWEpCisKK0kgc3Ryb25nbHkgYWR2aXNlIHVzaW5nIFZJTS0taXRzIGluZmluaXRlIHVuZG8vcmVkbyBzYXZlZCBtZSBtdWNoIGdyaWVmLgorKFRlcnJ5IEJyb3duKQorCitUaGFua3MgdmVyeSBtdWNoIGZvciB3cml0aW5nIHdoYXQgaW4gbXkgb3BpbmlvbiBpcyB0aGUgZmluZXN0IHRleHQgZWRpdG9yIG9uCit0aGUgcGxhbmV0LiAgSWYgSSB3ZXJlIHRvIGdldCBhbm90aGVyIGNhdCwgSSB3b3VsZCBuYW1lIGl0ICJWaW0iLgorKEJvYiBTaGVlaGFuLCBVU0EpCisKK0kgdHlwZWQgOnNldCBhbGwgYW5kIHRoZSBzY3JlZW4gRklMTEVEIHVwIHdpdGggb3B0aW9ucy4gIEEgd2hvbGUgc2NyZWVuIG9mCit0aGluZ3MgdG8gYmUgc2V0IGFuZCB1bnNldC4gIEkgc2F3IHNvbWUgb2YgbXkgb2xkIGZyaWVuZHMgbGlrZSB3cmFwbWFyZ2luLAorbW9kZWxpbmVzIGFuZCBzaG93bW9kZSwgYnV0IHRoZSBzY3JlZW4gd2FzIEZJTExFRCB3aXRoIG5ldyBmcmllbmRzISAgIEkgbG92ZQordGhlbSBhbGwhICAgSSBsb3ZlIFZJTSEgICBJJ20gc28gaGFwcHkgdGhhdCBJJ3ZlIGZvdW5kIHRoaXMgZWRpdG9yISAgSSBmZWVsCitsaWtlIGhvdyBJIG9uY2UgZmVsdCB3aGVuIEkgc3RhcnRlZCB1c2luZyB2aSBhZnRlciBhIGNvdXBsZSBvZiB5ZWFycyBvZiB1c2luZworZWQuICBJIG5ldmVyIHRob3VnaHQgSSdkIGZvcnNha2UgbXkgYmVsb3ZlZCBlZCwgYnV0IHZpIC4uLiBvaCBnb2QsIHZpIHdhcworZ3JlYXQuICBBbmQgbm93LCBWSU0uICAoUGV0ZXIgSmF5IFNhbHptYW4sIFVTQSkKKworSSBhbSByZWFsbHkgaGFwcHkgd2l0aCBzdWNoIGEgd29uZGVyZnVsIHNvZnR3YXJlIHBhY2thZ2UuICBNdWNoIGJldHRlciB0aGFuCithbG1vc3QgYW55IGV4cGVuc2l2ZSwgb2ZmIHRoZSBzaGVsZiBwcm9ncmFtLiAgKEplZmYgV2Fsa2VyKQorCitXaGVuZXZlciBJIHJlcmVhZCB0aGUgVklNIGRvY3VtZW50YXRpb24gSSdtIG92ZXJjb21lIHdpdGggZXhjaXRlbWVudCBhdCB0aGUKK3Bvd2VyIG9mIHRoZSBlZGl0b3IuIChXaWxsaWFtIEVkd2FyZCBXZWJiZXIsIEF1c3RyYWxpYSkKKworSHVycmFoIGZvciBWSU0hISBJdCBpcyAiYXQgeW91ciBmaW5nZXJ0aXBzIiBsaWtlIHZpLCBhbmQgaGFzIHRoZSBleHRlbnNpb25zCit0aGF0IHZpIHNvcmVseSBuZWVkczogaGlnaGxpZ2h0aW5nIGZvciBleGVjdXRpbmcgY29tbWFuZHMgb24gYmxvY2tzLCBhbiBlYXNpbHkKK25hdmlnYWJsZSBhbmQgZGlnZXN0aWJsZSBoZWxwIHNjcmVlbiwgYW5kIG1vcmUuIChQYXVsIFBheCkKKworVGhlIHJlYXNvbiBXSFkgSSBkb24ndCBoYXZlIHRoaXMgYW1hemluZ2x5IHVzZWZ1bCBtYWNybyBhbnkgbW9yZSwgaXMgdGhhdCBJCitub3cgdXNlIFZJTSAtIGFuZCB0aGlzIGlzIGJ1aWx0IGluISEgKFN0ZXBoZW4gUmllaG0sIEdlcm1hbnkpCisKK0kgYW0gYSB1c2VyIG9mIFZJTSBhbmQgSSBsb3ZlIGl0LiBJIHVzZSBpdCB0byBkbyBhbGwgbXkgcHJvZ3JhbW1pbmcsIEMsCitDKyssIEhUTUwgd2hhdCBldmVyLiAoVGltIEFsbHdpbmUpCisKK0kgZGlzY292ZXJlZCBWSU0gYWZ0ZXIgeWVhcnMgb2Ygc3RydWdnbGluZyB3aXRoIHRoZSBvcmlnaW5hbCB2aSwgYW5kIEkganVzdAorY2FuJ3QgbGl2ZSB3aXRob3V0IGl0IGFueSBtb3JlLiAgKEVtbWFudWVsIE1vZ2VuZXQsIFVTQSkKKworRW1hY3MgaGFzIG5vdCBhIGJpdCBvZiBjaGFuY2UgdG8gc3Vydml2ZSBzbyBsb25nIGFzIFZJTSBpcyBhcm91bmQuICBCZXNpZGVzLAoraXQgYWxzbyBoYXMgdGhlIG1vc3QgZGV0YWlsZWQgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiBJIGhhdmUgZXZlciBzZWVuLS0tbXVjaAorYmV0dGVyIHRoYW4gbW9zdCBjb21tZXJjaWFsIHNvZnR3YXJlISAgKExlaW1pbmcgUWlhbikKKworVGhpcyB2ZXJzaW9uIG9mIFZJTSB3aWxsIGp1c3QgYmxvdyBwZW9wbGUgYXBhcnQgd2hlbiB0aGV5IGRpc2NvdmVyIGp1c3QgaG93CitmYW50YXN0aWMgaXQgaXMhIChUb255IE51Z2VudCwgQXVzdHJhbGlhKQorCitJIHRvb2sgeW91ciBhZHZpY2UgJiBmaW5hbGx5IGdvdCBWSU0gJiBJJ20gcmVhbGx5IGltcHJlc3NlZC4gSW5zdGFudCBjb252ZXJ0LgorKFBhdHJpY2sgS2lsbGVsZWEsIFVTQSkKKworVklNIGlzIGJ5IGZhciBteSBmYXZvcml0ZSBwaWVjZSBvZiBzaGFyZXdhcmUgYW5kIEkgaGF2ZSBiZWVuIHBhcnRpY3VsYXJseQorcGxlYXNlZCB3aXRoIHZlcnNpb24gMy4wLiAgVGhpcyBpcyByZWFsbHkgYSBzb2xpZCBwaWVjZSBvZiB3b3JrLiAoUm9iZXJ0CitDb2xvbiwgVVNBKQorCitWSU0gaXMgYSBqb3kgdG8gdXNlLCBpdCBpcyBzbyB3ZWxsIHRob3VnaHQgYW5kIHByYWN0aWNhbCB0aGF0IEkgd29uZGVyIHdoeQorYW55Ym9keSB3b3VsZCB1c2UgdmlzdWFsIGRldmVsb3BtZW50IHRvb2xzLiAgVklNIGlzIHBvd2VyZnVsIGFuZCBlbGVnYW50LCBpdAorbG9va3MgZGVjZXB0aXZlbHkgc2ltcGxlIGJ1dCBpcyBhbG1vc3QgYXMgY29tcGxleCBhcyBhIDc0NyAoZXNwZWNpYWxseSB3aGVuIEkKK2xvb2sgYXQgbXkgZ3Jvd2luZyAudmltcmMpLCBrZWVwIHVwIHRoYXQgd29uZGVyZnVsIGpvYiwgVklNIGlzIGEgY2VudGVycGllY2UKK29mIHRoZSBmcmVlIHNvZnR3YXJlIHdvcmxkLiAgKExvdWlzLURhdmlkIE1pdHRlcmFuZCwgVVNBKQorCitJIGNhbm5vdCBiZWxpZXZlIGhvdyBncmVhdCBpdCBpcyB0byB1c2UgVklNLiAgSSB0aGluayB0aGUgZ3V5cyBhdCB3b3JrIGFyZQorZ2V0dGluZyB0aXJlZCBvZiBoZWFyaW5nIG1lIGJyYWdnaW5nIGFib3V0IGl0LiAgT3RoZXJzIGV5ZXMgYXJlIGxpZ2h0aW5nIHVwLgorKFJpY2sgQ3Jvb3RlKQorCitFbWFjcyB0YWtlcyB3YXkgdG8gbXVjaCB0aW1lIHRvIHN0YXJ0IHVwIGFuZCBydW4sIGl0IGlzIHRvIGJpZyBhbmQgYnVsa3kgZm9yCitlZmZlY3RpdmUgdXNlIGFuZCB0aGUgaW50ZXJmYWNlIGlzIG1vcmUgY29uZnVzaW5nIHRoYW4gaXQgaXMgb2YgYW55IGhlbHAuICBWSU0KK2hvd2V2ZXIgaXMgc2hvcnQsIGl0IGlzIGZhc3QsIGl0IGlzIHBvd2VyZnVsLCBpdCBoYXMgYSBnb29kIGludGVyZmFjZSBhbmQgaXQKK2lzIGFsbCBwdXJwb3NlLiAgKFBhYWwgRGl0bGVmc2VuIEVrcmFuKQorCitGcm9tIHRoZSBmaXJzdCB0aW1lIEkgZ290IFZJTTMuMCwgSSB3YXMgdmVyeSBlbnRodXNpYXN0aWMuICBJdCBoYXMgYWxtb3N0IG5vCitwcm9ibGVtcy4gIFRoZSBzd2FwZmlsZSBoYW5kbGluZyBhbmQgdGhlIGJhY2t1cCBwb3NzaWJpbGl0aWVzIGFyZSByb2J1c3QsIGFsc28KK3RoZSBwcm90ZWN0aW9uIGFnYWluc3QgZWRpdGluZyBvbmUgZmlsZSB0d2ljZS4gIEl0IGlzIHZlcnkgY29tcGF0aWJsZSB0byB0aGUKK3JlYWwgVkkgKGFuZCB0aGF0IGlzIGEgTVVTVCwgYmVjYXVzZSBteSBicmFpbiBpcyB0cmFpbmVkIG92ZXIgeWVhcnMgaW4gdXNpbmcKK2l0KS4gIChHZXJ0IHZhbiBBbnR3ZXJwZW4sIEhvbGxhbmQpCisKK1Zpc3VhbCBtb2RlIGluIFZJTSBpcyBhIHZlcnkgcG93ZXJmdWwgdGhpbmchIChUb255IE51Z2VudCwgQXVzdHJhbGlhKQorCitJIGhhdmUgdG8gc2F5IHRoYXQgVklNIGlzID1USEU9IHNpbmdsZSBncmVhdGVzdCBwaWVjZSBvZiBzb3VyY2UgY29kZSB0byBldmVyCitjb21lIGFjcm9zcyB0aGUgbmV0IChKaW0gQmF0dGxlLCBVU0EpLgorCitJbiBmYWN0LCBpZiB5b3UgZG8gd2FudCB0byBnZXQgYSBuZXcgdmkgSSdkIHN1Z2dlc3QgVklNLTMuMC4gIFRoaXMgaXMsIGJ5CitmYXIsIHRoZSBiZXN0IHZlcnNpb24gb2YgdmkgSSd2ZSBldmVyIHNlZW4gKEFsYmVydCBXLiBTY2h1ZWxsZXIpLgorCitJIHNob3VsZCBtZW50aW9uIHRoYXQgVklNIGlzIGEgdmVyeSBnb29kIGVkaXRvciBhbmQgY2FuIGNvbXBldGUgd2l0aCBhbnl0aGluZworKElseWEgQmVsb296ZXJvdikuCisKK1RvIHRlbGwgdGhlIHRydXRoIHNvbWV0aW1lcyBJIHVzZWQgZWx2aXMsIHZpbGUsIHh2aSwgY2FsdmluLCBldGMuICBBbmQgdGhpcyBpcwordGhlIHJlYXNvbiB0aGF0IEkgY2FuIHN0YXRlIHRoYXQgVklNIGlzIHRoZSBiZXN0ISAoRmVyZW5jIERlYWssIEh1bmdhcnkpCisKK1ZJTSBpcyBieSBmYXIgdGhlIGJlc3QgZWRpdG9yIHRoYXQgSSBoYXZlIHVzZWQgaW4gYSBsb25nIHRpbWUsIGFuZCBJIGhhdmUKK2xvb2tlZCBhdCBqdXN0IGFib3V0IGV2ZXJ5IHRoaW5nIHRoYXQgaXMgYXZhaWxhYmxlIGZvciBldmVyeSBwbGF0Zm9ybSB0aGF0IEkKK3VzZS4gIFZJTSBpcyB0aGUgYmVzdCBvbiBhbGwgb2YgdGhlbS4gIChHdXkgTC4gT2xpdmVyKQorCitWSU0gaXMgdGhlIGdyZWF0ZXN0IGVkaXRvciBzaW5jZSB0aGUgc3RvbmUgY2hpc2VsLiAgKEpvc2UgVW5waW5nY28sIFVTQSkKKworSSB3b3VsZCBsaWtlIHRvIHNheSB0aGF0IHdpdGggVklNIEkgYW0gZmluYWxseSBtYWtpbmcgdGhlICdlbWFjcyB0byB2aScKK3RyYW5zaXRpb24gLSBhcyBhbiBFZGl0b3IgaXQgaXMgc28gbXVjaCBiZXR0ZXIgaW4gbWFueSB3YXlzOiBrZXlib2FyZCBsYXlvdXQsCittZW1vcnkgdXNhZ2UsIHRleHQgYWx0ZXJhdGlvbiB0byBuYW1lIDMuIChNYXJrIEFkYW0pCisKK0luIGZhY3QsIG5vdyBpZiBJIHdhbnQgdG8ga25vdyB3aGF0IGEgcGFydGljdWxhciBzZXR0aW5nIGRvZXMgaW4gdmksIEkgZmlyZSB1cAorVklNIGFuZCBjaGVjayBvdXQgaXQncyBoZWxwISAgKE5pa2hpbCBQYXRlbCwgVVNBKQorCitBcyBhIHZpIHVzZXIsIFZJTSBoYXMgbWFkZSB3b3JraW5nIHdpdGggdGV4dCBhIGZhciBtb3JlIHBsZWFzYW50IHRhc2sgdGhhbgorYmVmb3JlIEkgZW5jb3VudGVyZWQgdGhpcyBwcm9ncmFtLiAgKFN0ZWluYXIgS251dHNlbiwgTm9yd2F5KQorCitJIHVzZSBWSU0gc2luY2UgdmVyc2lvbiAzLjAuICBTaW5jZSB0aGF0IHRpbWUsIGl0IGlzIHRoZSBPTkxZIGVkaXRvciBJIHVzZSwKK3dpdGggU29sYXJpcywgTGludXggYW5kIE9TLzIgV2FycC4gIEkgc3VnZ2VzdCBhbGwgbXkgZnJpZW5kcyB0byB1c2UgVklNLCB0aGV5Cit0cnksIGFuZCB0aGV5IGNvbnRpbnVlIHVzaW5nIGl0LiAgVklNIGlzIHJlYWxseSB0aGUgYmVzdCBzb2Z0d2FyZSBJIGhhdmUgZXZlcgorZG93bmxvYWRlZCBmcm9tIHRoZSBJbnRlcm5ldCwgYW5kIHRoZSBiZXN0IGVkaXRvciBJIGtub3cgb2YuIChNYXJjbworRWNjZXR0dWF0bywgSXRhbHkpCisKKworSW4gc3VtbWFyeToKKyAgICAgX18gICAgIF9fXwkJICAgIF8JICAgIF8JXyAgX19fIF9fX19fCisgICAgIFwgXCAgIC8gKF8pXyBfXyBfX18gICAoXylfX18gIHwgfCB8IHwvIF8gXF8gICBffAorICAgICAgXCBcIC8gL3wgfCAnXyBgIF8gXCAgfCAvIF9ffCB8IHxffCB8IHwgfCB8fCB8CisgICAgICAgXCBWIC8gfCB8IHwgfCB8IHwgfCB8IFxfXyBcIHwgIF8gIHwgfF98IHx8IHwKKwlcXy8gIHxffF98IHxffCB8X3wgfF98X19fLyB8X3wgfF98XF9fXy8gfF98CisJICAgICBfX19fIF9fX19fIF8gICBfIF9fX19fIF9fX19fIF8gXworCSAgICAvIF9fX3xfICAgX3wgfCB8IHwJX19ffCAgX19ffCB8IHwKKwkgICAgXF9fXyBcIHwgfCB8IHwgfCB8IHxfICB8IHxfICB8IHwgfAorCSAgICAgX19fKSB8fCB8IHwgfF98IHwJX3wgfCAgX3wgfF98X3wKKwkgICAgfF9fX18vIHxffAlcX19fL3xffCAgIHxffAkgKF98XykJICAgICAgKFRvbnkgTnVnZW50LCBBdXN0cmFsaWEpCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9yZWNvdmVyLnR4dCBiL3J1bnRpbWUvZG9jL3JlY292ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2JlMDEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9yZWNvdmVyLnR4dApAQCAtMCwwICsxLDE2NSBAQAorKnJlY292ZXIudHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEFwciAxNgorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1JlY292ZXJ5IGFmdGVyIGEgY3Jhc2gJCQkJCSpjcmFzaC1yZWNvdmVyeSoKKworWW91IGhhdmUgc3BlbnQgc2V2ZXJhbCBob3VycyB0eXBpbmcgaW4gdGhhdCB0ZXh0IHRoYXQgaGFzIHRvIGJlIGZpbmlzaGVkCituZXh0IG1vcm5pbmcsIGFuZCB0aGVuIGRpc2FzdGVyIHN0cmlrZXM6IFlvdXIgY29tcHV0ZXIgY3Jhc2hlcy4KKworCQkJRE9OJ1QgUEFOSUMhCisKK1lvdSBjYW4gcmVjb3ZlciBtb3N0IG9mIHlvdXIgY2hhbmdlcyBmcm9tIHRoZSBmaWxlcyB0aGF0IFZpbSB1c2VzIHRvIHN0b3JlCit0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBNb3N0bHkgeW91IGNhbiByZWNvdmVyIHlvdXIgd29yayB3aXRoIG9uZSBjb21tYW5kOgorCXZpbSAtciBmaWxlbmFtZQorCisxLiBUaGUgc3dhcCBmaWxlCXxzd2FwLWZpbGV8CisyLiBSZWNvdmVyeQkJfHJlY292ZXJ5fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFRoZSBzd2FwIGZpbGUJCQkJCSpzd2FwLWZpbGUqCisKK1ZpbSBzdG9yZXMgdGhlIHRoaW5ncyB5b3UgY2hhbmdlZCBpbiBhIHN3YXAgZmlsZS4gIFVzaW5nIHRoZSBvcmlnaW5hbCBmaWxlCit5b3Ugc3RhcnRlZCBmcm9tIHBsdXMgdGhlIHN3YXAgZmlsZSB5b3UgY2FuIG1vc3RseSByZWNvdmVyIHlvdXIgd29yay4KKworWW91IGNhbiBzZWUgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgc3dhcCBmaWxlIGJlaW5nIHVzZWQgd2l0aCB0aGUgY29tbWFuZDoKKworCTpzd1thcG5hbWVdCQkJCQkqOnN3KiAqOnN3YXBuYW1lKgorCitUaGUgbmFtZSBvZiB0aGUgc3dhcCBmaWxlIGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZSBmaWxlIHlvdSBhcmUgZWRpdGluZywKK3dpdGggdGhlIGV4dGVuc2lvbiAiLnN3cCIuCistIE9uIFVuaXgsIGEgJy4nIGlzIHByZXBlbmRlZCB0byBzd2FwIGZpbGUgbmFtZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQorICBlZGl0ZWQgZmlsZS4gIFRoaXMgYXZvaWRzIHRoYXQgdGhlIHN3YXAgZmlsZSBzaG93cyB1cCBpbiBhIGRpcmVjdG9yeQorICBsaXN0aW5nLgorLSBPbiBNUy1ET1MgbWFjaGluZXMgYW5kIHdoZW4gdGhlICdzaG9ydG5hbWUnIG9wdGlvbiBpcyBvbiwgYW55ICcuJyBpbiB0aGUKKyAgb3JpZ2luYWwgZmlsZSBuYW1lIGlzIHJlcGxhY2VkIHdpdGggJ18nLgorLSBJZiB0aGlzIGZpbGUgYWxyZWFkeSBleGlzdHMgKGUuZy4sIHdoZW4geW91IGFyZSByZWNvdmVyaW5nIGZyb20gYSBjcmFzaCkgYQorICB3YXJuaW5nIGlzIGdpdmVuIGFuZCBhbm90aGVyIGV4dGVuc2lvbiBpcyB1c2VkLCAiLnN3byIsICIuc3duIiwgZXRjLgorLSBBbiBleGlzdGluZyBmaWxlIHdpbGwgbmV2ZXIgYmUgb3ZlcndyaXR0ZW4uCistIFRoZSBzd2FwIGZpbGUgaXMgZGVsZXRlZCBhcyBzb29uIGFzIFZpbSBzdG9wcyBlZGl0aW5nIHRoZSBmaWxlLgorCitUZWNobmljYWw6IFRoZSByZXBsYWNlbWVudCBvZiAnLicgd2l0aCAnXycgaXMgZG9uZSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoCisJICAgTVMtRE9TIGNvbXBhdGlibGUgZmlsZXN5c3RlbXMgKGUuZy4sIGNyb3NzZG9zLCBtdWx0aWRvcykuICBJZiBWaW0KKwkgICBpcyBhYmxlIHRvIGRldGVjdCB0aGF0IHRoZSBmaWxlIGlzIG9uIGFuIE1TLURPUy1saWtlIGZpbGVzeXN0ZW0sIGEKKwkgICBmbGFnIGlzIHNldCB0aGF0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlICdzaG9ydG5hbWUnIG9wdGlvbi4KKwkgICBUaGlzIGZsYWcgaXMgcmVzZXQgd2hlbiB5b3Ugc3RhcnQgZWRpdGluZyBhbm90aGVyIGZpbGUuCisJCQkJCQkJKkUzMjYqCisJICAgSWYgdGhlICIuc3dwIiBmaWxlIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBsYXN0IGNoYXJhY3RlciBpcworCSAgIGRlY3JlbWVudGVkIHVudGlsIHRoZXJlIGlzIG5vIGZpbGUgd2l0aCB0aGF0IG5hbWUgb3IgIi5zYWEiIGlzCisJICAgcmVhY2hlZC4gIEluIHRoZSBsYXN0IGNhc2UsIG5vIHN3YXAgZmlsZSBpcyBjcmVhdGVkLgorCitCeSBzZXR0aW5nIHRoZSAnZGlyZWN0b3J5JyBvcHRpb24geW91IGNhbiBwbGFjZSB0aGUgc3dhcCBmaWxlIGluIGFub3RoZXIgcGxhY2UKK3RoYW4gd2hlcmUgdGhlIGVkaXRlZCBmaWxlIGlzLgorQWR2YW50YWdlczoKKy0gWW91IHdpbGwgbm90IHBvbGx1dGUgdGhlIGRpcmVjdG9yaWVzIHdpdGggIi5zd3AiIGZpbGVzLgorLSBXaGVuIHRoZSAnZGlyZWN0b3J5JyBpcyBvbiBhbm90aGVyIHBhcnRpdGlvbiwgcmVkdWNlIHRoZSByaXNrIG9mIGRhbWFnaW5nCisgIHRoZSBmaWxlIHN5c3RlbSB3aGVyZSB0aGUgZmlsZSBpcyAoaW4gYSBjcmFzaCkuCitEaXNhZHZhbnRhZ2VzOgorLSBZb3UgY2FuIGdldCBuYW1lIGNvbGxpc2lvbnMgZnJvbSBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGluIGRpZmZlcmVudAorICBkaXJlY3RvcmllcyAoYWx0aG91Z2ggVmltIHRyaWVzIHRvIGF2b2lkIHRoYXQgYnkgY29tcGFyaW5nIHRoZSBwYXRoIG5hbWUpLgorICBUaGlzIHdpbGwgcmVzdWx0IGluIGJvZ3VzIEFUVEVOVElPTiB3YXJuaW5nIG1lc3NhZ2VzLgorLSBXaGVuIHlvdSB1c2UgeW91ciBob21lIGRpcmVjdG9yeSwgYW5kIHNvbWVib2R5IGVsc2UgdHJpZXMgdG8gZWRpdCB0aGUgc2FtZQorICBmaWxlLCBoZSB3aWxsIG5vdCBzZWUgeW91ciBzd2FwIGZpbGUgYW5kIHdpbGwgbm90IGdldCB0aGUgQVRURU5USU9OIHdhcmluZworICBtZXNzYWdlLgorT24gdGhlIEFtaWdhIHlvdSBjYW4gYWxzbyB1c2UgYSByZWNvdmVyYWJsZSByYW0gZGlzaywgYnV0IHRoZXJlIGlzIG5vIDEwMCUKK2d1YXJhbnRlZSB0aGF0IHRoaXMgd29ya3MuICBQdXR0aW5nIHN3YXAgZmlsZXMgaW4gYSBub3JtYWwgcmFtIGRpc2sgKGxpa2UgUkFNOgorb24gdGhlIEFtaWdhKSBvciBpbiBhIHBsYWNlIHRoYXQgaXMgY2xlYXJlZCB3aGVuIHJlYm9vdGluZyAobGlrZSAvdG1wIG9uIFVuaXgpCittYWtlcyBubyBzZW5zZSwgeW91IHdpbGwgbG9zZSB0aGUgc3dhcCBmaWxlIGluIGEgY3Jhc2guCisKK0lmIHlvdSB3YW50IHRvIHB1dCBzd2FwIGZpbGVzIGluIGEgZml4ZWQgcGxhY2UsIHB1dCBhIGNvbW1hbmQgcmVzZW1ibGluZyB0aGUKK2ZvbGxvd2luZyBvbmVzIGluIHlvdXIgLnZpbXJjOgorCTpzZXQgZGlyPWRoMjp0bXAJKGZvciBBbWlnYSkKKwk6c2V0IGRpcj1+L3RtcAkJKGZvciBVbml4KQorCTpzZXQgZGlyPWM6XFx0bXAJKGZvciBNUy1ET1MgYW5kIFdpbjMyKQorVGhpcyBpcyBhbHNvIHZlcnkgaGFuZHkgd2hlbiBlZGl0aW5nIGZpbGVzIG9uIGZsb3BweS4gIE9mIGNvdXJzZSB5b3Ugd2lsbCBoYXZlCit0byBjcmVhdGUgdGhhdCAidG1wIiBkaXJlY3RvcnkgZm9yIHRoaXMgdG8gd29yayEKKworRm9yIHJlYWQtb25seSBmaWxlcywgYSBzd2FwIGZpbGUgaXMgbm90IHVzZWQuICBVbmxlc3MgdGhlIGZpbGUgaXMgYmlnLCBjYXVzaW5nCit0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIHRvIGJlIGhpZ2hlciB0aGFuIGdpdmVuIHdpdGggJ21heG1lbScgb3IKKydtYXhtZW10b3QnLiAgQW5kIHdoZW4gbWFraW5nIGEgY2hhbmdlIHRvIGEgcmVhZC1vbmx5IGZpbGUsIHRoZSBzd2FwIGZpbGUgaXMKK2NyZWF0ZWQgYW55d2F5LgorCitUaGUgJ3N3YXBmaWxlJyBvcHRpb24gY2FuIGJlIHJlc2V0IHRvIGF2b2lkIGNyZWF0aW5nIGEgc3dhcGZpbGUuCisKKworRGV0ZWN0aW5nIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSB+CisKK1lvdSBjYW4gZmluZCB0aGlzIGluIHRoZSB1c2VyIG1hbnVhbCwgc2VjdGlvbiB8MTEuM3wuCisKKworVXBkYXRpbmcgdGhlIHN3YXBmaWxlIH4KKworVGhlIHN3YXAgZmlsZSBpcyB1cGRhdGVkIGFmdGVyIHR5cGluZyAyMDAgY2hhcmFjdGVycyBvciB3aGVuIHlvdSBoYXZlIG5vdAordHlwZWQgYW55dGhpbmcgZm9yIGZvdXIgc2Vjb25kcy4gIFRoaXMgb25seSBoYXBwZW5zIGlmIHRoZSBidWZmZXIgd2FzCitjaGFuZ2VkLCBub3Qgd2hlbiB5b3Ugb25seSBtb3ZlZCBhcm91bmQuICBUaGUgcmVhc29uIHdoeSBpdCBpcyBub3Qga2VwdCB1cCB0bworZGF0ZSBhbGwgdGhlIHRpbWUgaXMgdGhhdCB0aGlzIHdvdWxkIHNsb3cgZG93biBub3JtYWwgd29yayB0b28gbXVjaC4gIFlvdSBjYW4KK2NoYW5nZSB0aGUgMjAwIGNoYXJhY3RlciBjb3VudCB3aXRoIHRoZSAndXBkYXRlY291bnQnIG9wdGlvbi4gIFlvdSBjYW4gc2V0Cit0aGUgdGltZSB3aXRoIHRoZSAndXBkYXRldGltZScgb3B0aW9uLiAgVGhlIHRpbWUgaXMgZ2l2ZW4gaW4gbWlsbGlzZWNvbmRzLgorQWZ0ZXIgd3JpdGluZyB0byB0aGUgc3dhcCBmaWxlIFZpbSBzeW5jcyB0aGUgZmlsZSB0byBkaXNrLiAgVGhpcyB0YWtlcyBzb21lCit0aW1lLCBlc3BlY2lhbGx5IG9uIGJ1c3kgVW5peCBzeXN0ZW1zLiAgSWYgeW91IGRvbid0IHdhbnQgdGhpcyB5b3UgY2FuIHNldCB0aGUKKydzd2Fwc3luYycgb3B0aW9uIHRvIGFuIGVtcHR5IHN0cmluZy4gIFRoZSByaXNrIG9mIGxvc2luZyB3b3JrIGJlY29tZXMgYmlnZ2VyCit0aG91Z2guICBPbiBzb21lIG5vbi1Vbml4IHN5c3RlbXMgKE1TLURPUywgQW1pZ2EpIHRoZSBzd2FwIGZpbGUgd29uJ3QgYmUKK3dyaXR0ZW4gYXQgYWxsLgorCitJZiB0aGUgd3JpdGluZyB0byB0aGUgc3dhcCBmaWxlIGlzIG5vdCB3YW50ZWQsIGl0IGNhbiBiZSBzd2l0Y2hlZCBvZmYgYnkKK3NldHRpbmcgdGhlICd1cGRhdGVjb3VudCcgb3B0aW9uIHRvIDAuICBUaGUgc2FtZSBpcyBkb25lIHdoZW4gc3RhcnRpbmcgVmltCit3aXRoIHRoZSAiLW4iIG9wdGlvbi4gIFdyaXRpbmcgY2FuIGJlIHN3aXRjaGVkIGJhY2sgb24gYnkgc2V0dGluZyB0aGUKKyd1cGRhdGVjb3VudCcgb3B0aW9uIHRvIG5vbi16ZXJvLiAgU3dhcCBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQgZm9yIGFsbCBidWZmZXJzCit3aGVuIGRvaW5nIHRoaXMuICBCdXQgd2hlbiBzZXR0aW5nICd1cGRhdGVjb3VudCcgdG8gemVybywgdGhlIGV4aXN0aW5nIHN3YXAKK2ZpbGVzIHdpbGwgbm90IGJlIHJlbW92ZWQsIGl0IHdpbGwgb25seSBhZmZlY3QgZmlsZXMgdGhhdCB3aWxsIGJlIG9wZW5lZAorYWZ0ZXIgdGhpcy4KKworSWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBjaGFuZ2VzIGFyZSBpbiB0aGUgc3dhcCBmaWxlIHVzZSB0aGlzCitjb21tYW5kOgorCisJCQkJCSo6cHJlKiAqOnByZXNlcnZlKiAqRTMxMyogKkUzMTQqCis6cHJlW3NlcnZlXQkJV3JpdGUgYWxsIHRleHQgZm9yIGFsbCBidWZmZXJzIGludG8gc3dhcCBmaWxlLiAgVGhlCisJCQlvcmlnaW5hbCBmaWxlIGlzIG5vIGxvbmdlciBuZWVkZWQgZm9yIHJlY292ZXJ5LiAge1ZpOgorCQkJZW1lcmdlbmN5IGV4aXR9CisKK0EgVmltIHN3YXAgZmlsZSBjYW4gYmUgcmVjb2duaXplZCBieSB0aGUgZmlyc3Qgc2l4IGNoYXJhY3RlcnM6ICJiMFZJTSAiLgorQWZ0ZXIgdGhhdCBjb21lcyB0aGUgdmVyc2lvbiBudW1iZXIsIGUuZy4sICIzLjAiLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFJlY292ZXJ5CQkJCQkqcmVjb3ZlcnkqICpFMzA4KiAqRTMxMSoKKworQmFzaWMgZmlsZSByZWNvdmVyeSBpcyBleHBsYWluZWQgaW4gdGhlIHVzZXIgbWFudWFsOiB8dXNyXzExLnR4dHwuCisKK0Fub3RoZXIgd2F5IHRvIGRvIHJlY292ZXJ5IGlzIHRvIHN0YXJ0IFZpbSBhbmQgdXNlIHRoZSAiOnJlY292ZXIiIGNvbW1hbmQuCitUaGlzIGlzIGVhc3kgd2hlbiB5b3Ugc3RhcnQgVmltIHRvIGVkaXQgYSBmaWxlIGFuZCB5b3UgZ2V0IHRoZSAiQVRURU5USU9OOgorRm91bmQgYSBzd2FwIGZpbGUgLi4uIiBtZXNzYWdlLiAgSW4gdGhpcyBjYXNlIHRoZSBzaW5nbGUgY29tbWFuZCAiOnJlY292ZXIiCit3aWxsIGRvIHRoZSB3b3JrLiAgWW91IGNhbiBhbHNvIGdpdmUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgb3IgdGhlIHN3YXAgZmlsZSB0bwordGhlIHJlY292ZXIgY29tbWFuZDoKKwkJCQkJKjpyZWMqICo6cmVjb3ZlciogKkUzMDUqICpFMzA2KiAqRTMwNyoKKzpyZWNbb3Zlcl0gW2ZpbGVdCVRyeSB0byByZWNvdmVyIFtmaWxlXSBmcm9tIHRoZSBzd2FwIGZpbGUuICBJZiBbZmlsZV0KKwkJCWlzIG5vdCBnaXZlbiB1c2UgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlci4gIFRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgYXJlIGxvc3QuCisJCQlUaGlzIGNvbW1hbmQgZmFpbHMgaWYgdGhlIGJ1ZmZlciB3YXMgbW9kaWZpZWQuCisKKzpyZWNbb3Zlcl0hIFtmaWxlXQlMaWtlICI6cmVjb3ZlciIsIGJ1dCBhbnkgY2hhbmdlcyBpbiB0aGUgY3VycmVudAorCQkJYnVmZmVyIGFyZSBsb3N0LgorCisJCQkJCQkJKkUzMTIqICpFMzA5KiAqRTMxMCoKK1ZpbSBoYXMgc29tZSBpbnRlbGxpZ2VuY2UgYWJvdXQgd2hhdCB0byBkbyBpZiB0aGUgc3dhcCBmaWxlIGlzIGNvcnJ1cHQgaW4KK3NvbWUgd2F5LiAgSWYgVmltIGhhcyBkb3VidCBhYm91dCB3aGF0IGl0IGZvdW5kLCBpdCB3aWxsIGdpdmUgYW4gZXJyb3IKK21lc3NhZ2UgYW5kIGluc2VydCBsaW5lcyB3aXRoICI/Pz8iIGluIHRoZSB0ZXh0LiAgSWYgeW91IHNlZSBhbiBlcnJvciBtZXNzYWdlCit3aGlsZSByZWNvdmVyaW5nLCBzZWFyY2ggaW4gdGhlIGZpbGUgZm9yICI/Pz8iIHRvIHNlZSB3aGF0IGlzIHdyb25nLiAgWW91IG1heQord2FudCB0byBjdXQgYW5kIHBhc3RlIHRvIGdldCB0aGUgdGV4dCB5b3UgbmVlZC4KKworVGhlIG1vc3QgY29tbW9uIHJlbWFyayBpcyAiPz8/TElORVMgTUlTU0lORyIuICBUaGlzIG1lYW5zIHRoYXQgVmltIGNhbm5vdCByZWFkCit0aGUgdGV4dCBmcm9tIHRoZSBvcmlnaW5hbCBmaWxlLiAgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBzeXN0ZW0gY3Jhc2hlZCBhbmQKK3BhcnRzIG9mIHRoZSBvcmlnaW5hbCBmaWxlIHdlcmUgbm90IHdyaXR0ZW4gdG8gZGlzay4KKworQmUgc3VyZSB0aGF0IHRoZSByZWNvdmVyeSB3YXMgc3VjY2Vzc2Z1bCBiZWZvcmUgb3ZlcndyaXRpbmcgdGhlIG9yaWdpbmFsCitmaWxlIG9yIGRlbGV0aW5nIHRoZSBzd2FwIGZpbGUuICBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHdyaXRlIHRoZSByZWNvdmVyZWQKK2ZpbGUgZWxzZXdoZXJlIGFuZCBydW4gJ2RpZmYnIHRvIGZpbmQgb3V0IGlmIHRoZSBjaGFuZ2VzIHlvdSB3YW50IGFyZSBpbiB0aGUKK3JlY292ZXJlZCBmaWxlLgorCitPbmNlIHlvdSBhcmUgc3VyZSB0aGUgcmVjb3ZlcnkgaXMgb2sgZGVsZXRlIHRoZSBzd2FwIGZpbGUuICBPdGhlcndpc2UsIHlvdQord2lsbCBjb250aW51ZSB0byBnZXQgd2FybmluZyBtZXNzYWdlcyB0aGF0IHRoZSAiLnN3cCIgZmlsZSBhbHJlYWR5IGV4aXN0cy4KKwore1ZpOiByZWNvdmVycyBpbiBhbm90aGVyIHdheSBhbmQgc2VuZHMgbWFpbCBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVjb3Zlcn0KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3JlbW90ZS50eHQgYi9ydW50aW1lL2RvYy9yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZDMyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9yZW1vdGUudHh0CkBAIC0wLDAgKzEsMTg4IEBACisqcmVtb3RlLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDMgTm92IDEwCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVmltIGNsaWVudC1zZXJ2ZXIgY29tbXVuaWNhdGlvbgkJCQkqY2xpZW50LXNlcnZlcioKKworMS4gQ29tbW9uIGZ1bmN0aW9uYWxpdHkJCXxjbGllbnRzZXJ2ZXJ8CisyLiBYMTEgc3BlY2lmaWMgaXRlbXMJCXx4MTEtY2xpZW50c2VydmVyfAorMy4gTVMtV2luZG93cyBzcGVjaWZpYyBpdGVtcwl8dzMyLWNsaWVudHNlcnZlcnwKKwore1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIENvbW1vbiBmdW5jdGlvbmFsaXR5CQkJCQkqY2xpZW50c2VydmVyKgorCitXaGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrY2xpZW50c2VydmVyfCBvcHRpb24sIFZpbSBjYW4gYWN0IGFzIGEgY29tbWFuZAorc2VydmVyLiAgSXQgYWNjZXB0cyBtZXNzYWdlcyBmcm9tIGEgY2xpZW50IGFuZCBleGVjdXRlcyB0aGVtLiAgQXQgdGhlIHNhbWUKK3RpbWUsIFZpbSBjYW4gZnVuY3Rpb24gYXMgYSBjbGllbnQgYW5kIHNlbmQgY29tbWFuZHMgdG8gYSBWaW0gc2VydmVyLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIGF2YWlsYWJsZToKKworICAgIGFyZ3VtZW50CQkJbWVhbmluZwl+CisKKyAgIC0tcmVtb3RlIFsre2NtZH1dIHtmaWxlfSAuLi4JCQkJCSotLXJlbW90ZSoKKwkJCQlPcGVuIHRoZSBmaWxlIGxpc3QgaW4gYSByZW1vdGUgVmltLiAgV2hlbgorCQkJCXRoZXJlIGlzIG5vIFZpbSBzZXJ2ZXIsIGV4ZWN1dGUgbG9jYWxseS4KKwkJCQlUaGVyZSBpcyBvbmUgb3B0aW9uYWwgaW5pdCBjb21tYW5kOiAre2NtZH0uCisJCQkJVGhpcyBtdXN0IGJlIGFuIEV4IGNvbW1hbmQgdGhhdCBjYW4gYmUKKwkJCQlmb2xsb3dlZCBieSAifCIuCisJCQkJVGhlIHJlc3Qgb2YgdGhlIGNvbW1hbmQgbGluZSBpcyB0YWtlbiBhcyB0aGUKKwkJCQlmaWxlIGxpc3QuICBUaHVzIGFueSBub24tZmlsZSBhcmd1bWVudHMgbXVzdAorCQkJCWNvbWUgYmVmb3JlIHRoaXMuCisJCQkJWW91IGNhbm5vdCBlZGl0IHN0ZGluIHRoaXMgd2F5IHwtLXwuCisJCQkJVGhlIHJlbW90ZSBWaW0gaXMgcmFpc2VkLiAgSWYgeW91IGRvbid0IHdhbnQKKwkJCQl0aGlzIHVzZSA+CisJCQkJIHZpbSAtLXJlbW90ZS1zZW5kICI8Qy1cPjxDLU4+Om4gZmlsZW5hbWU8Q1I+IgorPCAgLS1yZW1vdGUtc2lsZW50IFsre2NtZH1dIHtmaWxlfSAuLi4JCQkqLS1yZW1vdGUtc2lsZW50KgorCQkJCUFzIGFib3ZlLCBidXQgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8KKwkJCQlzZXJ2ZXIgYW5kIHRoZSBmaWxlIGlzIGVkaXRlZCBsb2NhbGx5LgorICAgLS1yZW1vdGUtd2FpdCBbK3tjbWR9XSB7ZmlsZX0gLi4uCQkJCSotLXJlbW90ZS13YWl0KgorCQkJCUFzIC0tcmVtb3RlLCBidXQgd2FpdCBmb3IgZmlsZXMgdG8gY29tcGxldGUKKwkJCQkodW5sb2FkKSBpbiByZW1vdGUgVmltLgorICAgLS1yZW1vdGUtd2FpdC1zaWxlbnQgWyt7Y21kfV0ge2ZpbGV9IC4uLgkJKi0tcmVtb3RlLXdhaXQtc2lsZW50KgorCQkJCUFzIC0tcmVtb3RlLXdhaXQsIGJ1dCBkb24ndCBjb21wbGFpbiBpZiB0aGVyZQorCQkJCWlzIG5vIHNlcnZlci4KKwkJCQkJCQkJKi0tc2VydmVybmFtZSoKKyAgIC0tc2VydmVybmFtZSB7bmFtZX0JCUJlY29tZSB0aGUgc2VydmVyIHtuYW1lfS4gIFdoZW4gdXNlZCB0b2dldGhlcgorCQkJCXdpdGggb25lIG9mIHRoZSAtLXJlbW90ZSBjb21tYW5kczogY29ubmVjdCB0bworCQkJCXNlcnZlciB7bmFtZX0gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAoc2VlCisJCQkJYmVsb3cpLgorCQkJCQkJCQkqLS1yZW1vdGUtc2VuZCoKKyAgIC0tcmVtb3RlLXNlbmQge2tleXN9CQlTZW5kIHtrZXlzfSB0byBzZXJ2ZXIgYW5kIGV4aXQuCisJCQkJCQkJCSotLXJlbW90ZS1leHByKgorICAgLS1yZW1vdGUtZXhwciB7ZXhwcn0JCUV2YWx1YXRlIHtleHByfSBpbiBzZXJ2ZXIgYW5kCisJCQkJcHJpbnQgdGhlIHJlc3VsdCBvbiBzdGRvdXQuCisJCQkJCQkJCSotLXNlcnZlcmxpc3QqCisgICAtLXNlcnZlcmxpc3QJCQlPdXRwdXQgYSBsaXN0IG9mIHNlcnZlciBuYW1lcy4KKworCitFeGFtcGxlcyB+CisKK0VkaXQgImZpbGUudHh0IiBpbiBhbiBhbHJlYWR5IHJ1bm5pbmcgR1ZJTSBzZXJ2ZXI6ID4KKyAgICBndmltIC0tcmVtb3RlIGZpbGUudHh0CisKK0VkaXQgImZpbGUudHh0IiBpbiBhbiBhbHJlYWR5IHJ1bm5pbmcgc2VydmVyIGNhbGxlZCBGT09CQVI6ID4KKyAgICBndmltIC0tc2VydmVybmFtZSBGT09CQVIgLS1yZW1vdGUgZmlsZS50eHQKKworRWRpdCAiZmlsZS50eHQiIGluIHNlcnZlciAiRklMRVMiIGlmIGl0IGV4aXN0cywgYmVjb21lIHNlcnZlciAiRklMRVMiCitvdGhlcndpc2U6ID4KKyAgICBndmltIC0tc2VydmVybmFtZSBGSUxFUyAtLXJlbW90ZS1zaWxlbnQgZmlsZS50eHQKKworVGhpcyBkb2Vzbid0IHdvcmssIGFsbCBhcmd1bWVudHMgYWZ0ZXIgLS1yZW1vdGUgd2lsbCBiZSB1c2VkIGFzIGZpbGUgbmFtZXM6ID4KKyAgICBndmltIC0tcmVtb3RlIC0tc2VydmVybmFtZSBGT09CQVIgZmlsZS50eHQKKworRWRpdCBmaWxlICIrZm9vIiBpbiBhIHJlbW90ZSBzZXJ2ZXIgKG5vdGUgdGhlIHVzZSBvZiAiLi8iIHRvIGF2b2lkIHRoZSBzcGVjaWFsCittZWFuaW5nIG9mIHRoZSBsZWFkaW5nIHBsdXMpOiA+CisgICAgdmltIC0tcmVtb3RlIC4vK2ZvbworCitUZWxsIHRoZSByZW1vdGUgc2VydmVyICJCTEEiIHRvIHdyaXRlIGFsbCBmaWxlcyBhbmQgZXhpdDogPgorICAgIHZpbSAtLXNlcnZlcm5hbWUgQkxBIC0tcmVtb3RlLXNlbmQgJzxDLVw+PEMtTj46d3FhPENSPicKKworCitTRVJWRVIgTkFNRQorCitCeSBkZWZhdWx0IFZpbSB3aWxsIHRyeSB0byByZWdpc3RlciB0aGUgbmFtZSB1bmRlciB3aGljaCBpdCB3YXMgaW52b2tlZCAoZ3ZpbSwKK2VndmltIC4uLikuICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIC0tc2VydmVybmFtZSBhcmd1bWVudC4gIElmIHRoZQorc3BlY2lmaWVkIG5hbWUgaXMgbm90IGF2YWlsYWJsZSwgYSBwb3N0Zml4IGlzIGFwcGxpZWQgdW50aWwgYSBmcmVlIG5hbWUgaXMKK2VuY291bnRlcmVkLCBpZS4gImd2aW0xIiBmb3IgdGhlIHNlY29uZCBpbnZvY2F0aW9uIG9mIGd2aW0gb24gYSBwYXJ0aWN1bGFyCitYLXNlcnZlci4gIFRoZSByZXN1bHRpbmcgbmFtZSBpcyBhdmFpbGFibGUgaW4gdGhlIHNlcnZlcm5hbWUgYnVpbHRpbiB2YXJpYWJsZQorfHY6c2VydmVybmFtZXwuICBUaGUgY2FzZSBvZiB0aGUgc2VydmVyIG5hbWUgaXMgaWdub3JlZCwgdGh1cyAiZ3ZpbSIgYW5kCisiR1ZJTSIgYXJlIGNvbnNpZGVyZWQgZXF1YWwuCisKK1doZW4gVmltIGlzIGludm9rZWQgd2l0aCAtLXJlbW90ZSwgLS1yZW1vdGUtd2FpdCBvciAtLXJlbW90ZS1zZW5kIGl0IHdpbGwgdHJ5Cit0byBsb2NhdGUgdGhlIHNlcnZlciBuYW1lIGRldGVybWluZWQgYnkgdGhlIGludm9jYXRpb24gbmFtZSBhbmQgLS1zZXJ2ZXJuYW1lCithcmd1bWVudCBhcyBkZXNjcmliZWQgYWJvdmUuICBJZiBhbiBleGFjdCBtYXRjaCBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZmlyc3QKK3NlcnZlciB3aXRoIHRoZSBudW1iZXIgcG9zdGZpeCB3aWxsIGJlIHVzZWQuICBJZiBhIG5hbWUgd2l0aCB0aGUgbnVtYmVyCitwb3N0Zml4IGlzIHNwZWNpZmllZCB3aXRoIHRoZSAtLXNlcnZlcm5hbWUgYXJndW1lbnQsIGl0IG11c3QgbWF0Y2ggZXhhY3RseS4KKworSWYgbm8gc2VydmVyIGNhbiBiZSBsb2NhdGVkIGFuZCAtLXJlbW90ZSBvciAtLXJlbW90ZS13YWl0IHdhcyB1c2VkLCBWaW0gd2lsbAorc3RhcnQgdXAgYWNjb3JkaW5nIHRvIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgYW5kIGRvIHRoZSBlZGl0aW5nIGJ5CitpdHNlbGYuICBUaGlzIHdheSBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGtub3cgd2hldGhlciBndmltIGlzIGFscmVhZHkgc3RhcnRlZAord2hlbiBzZW5kaW5nIGNvbW1hbmQgdG8gaXQuCisKK1RoZSAtLXNlcnZlcmxpc3QgYXJndW1lbnQgd2lsbCBjYXVzZSBWaW0gdG8gcHJpbnQgYSBsaXN0IG9mIHJlZ2lzdGVyZWQgY29tbWFuZAorc2VydmVycyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IChzdGRvdXQpIGFuZCBleGl0LgorCitXaW4zMiBOb3RlOiBNYWtpbmcgdGhlIFZpbSBzZXJ2ZXIgZ28gdG8gdGhlIGZvcmVncm91bmQgZG9lc24ndCBhbHdheXMgd29yaywKK2JlY2F1c2UgTVMtV2luZG93cyBkb2Vzbid0IGFsbG93IGl0LiAgVGhlIGNsaWVudCB3aWxsIG1vdmUgdGhlIHNlcnZlciB0byB0aGUKK2ZvcmVncm91bmQgd2hlbiB1c2luZyB0aGUgLS1yZW1vdGUgb3IgLS1yZW1vdGUtd2FpdCBhcmd1bWVudCBhbmQgdGhlIHNlcnZlcgorbmFtZSBzdGFydHMgd2l0aCAiZyIuCisKKworUkVNT1RFIEVESVRJTkcKKworVGhlIC0tcmVtb3RlIGFyZ3VtZW50IHdpbGwgY2F1c2UgYSB8OmRyb3B8IGNvbW1hbmQgdG8gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUKK3Jlc3Qgb2YgdGhlIGNvbW1hbmQgbGluZSBhbmQgc2VudCBhcyBkZXNjcmliZWQgYWJvdmUuCitUaGUgLS1yZW1vdGUtd2FpdCBhcmd1bWVudCBkb2VzIHRoZSBzYW1lIHRoaW5nIGFuZCBhZGRpdGlvbmFsbHkgc2V0cyB1cCB0bword2FpdCBmb3IgZWFjaCBvZiB0aGUgZmlsZXMgdG8gaGF2ZSBiZWVuIGVkaXRlZC4gIFRoaXMgdXNlcyB0aGUgQnVmVW5sb2FkCitldmVudCwgdGh1cyBhcyBzb29uIGFzIGEgZmlsZSBoYXMgYmVlbiB1bmxvYWRlZCwgVmltIGFzc3VtZXMgeW91IGFyZSBkb25lCitlZGl0aW5nIGl0LgorTm90ZSB0aGF0IHRoZSAtLXJlbW90ZSBhbmQgLS1yZW1vdGUtd2FpdCBhcmd1bWVudHMgd2lsbCBjb25zdW1lIHRoZSByZXN0IG9mCit0aGUgY29tbWFuZCBsaW5lLiAgSWUuIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHdpbGwgYmUgcmVnYXJkZWQgYXMgZmlsZW5hbWVzLgorWW91IGNhbiBub3QgcHV0IG9wdGlvbnMgdGhlcmUhCisKKworRlVOQ1RJT05TCisJCQkJCQkJCSpFMjQwKiAqRTU3MyoKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBWaW0gZnVuY3Rpb25zIGZvciBzY3JpcHRpbmcgdGhlIGNvbW1hbmQgc2VydmVyLiAgU2VlCit0aGUgZGVzY3JpcHRpb24gaW4gfGV2YWwudHh0fCBvciB1c2UgQ1RSTC1dIG9uIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGp1bXAgdG8KK3RoZSBmdWxsIGV4cGxhbmF0aW9uLgorCisgICAgc3lub3BzaXMJCQkJICAgICBleHBsYW5hdGlvbiB+CisgICAgcmVtb3RlX2V4cHIoIHNlcnZlciwgc3RyaW5nLCBpZHZhcikgICAgICBzZW5kIGV4cHJlc3Npb24KKyAgICByZW1vdGVfc2VuZCggc2VydmVyLCBzdHJpbmcsIGlkdmFyKSAgICAgIHNlbmQga2V5IHNlcXVlbmNlCisgICAgc2VydmVybGlzdCgpCQkJICAgICBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBzZXJ2ZXJzCisgICAgcmVtb3RlX3BlZWsoIHNlcnZlcmlkLCByZXR2YXIpCSAgICAgY2hlY2sgZm9yIHJlcGx5IHN0cmluZworICAgIHJlbW90ZV9yZWFkKCBzZXJ2ZXJpZCkJCSAgICAgcmVhZCByZXBseSBzdHJpbmcKKyAgICBzZXJ2ZXIyY2xpZW50KCBzZXJ2ZXJpZCwgc3RyaW5nKQkgICAgIHNlbmQgcmVwbHkgc3RyaW5nCisgICAgcmVtb3RlX2ZvcmVncm91bmQoIHNlcnZlcikJCSAgICAgYnJpbmcgc2VydmVyIHRvIHRoZSBmcm9udAorCitTZWUgYWxzbyB0aGUgZXhwbGFuYXRpb24gb2YgfENUUkwtXF9DVFJMLU58LiAgVmVyeSB1c2VmdWwgYXMgYSBsZWFkaW5nIGtleQorc2VxdWVuY2UuCitUaGUge3NlcnZlcmlkfSBmb3Igc2VydmVyMmNsaWVudCgpIGNhbiBiZSBvYnRhaW5lZCB3aXRoIGV4cGFuZCgiPGNsaWVudD4iKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFgxMSBzcGVjaWZpYyBpdGVtcwkJCQkJKngxMS1jbGllbnRzZXJ2ZXIqCisJCQkJICAgICpFMjQ3KiAqRTI0OCogKkUyNTEqICpFMjU4KiAqRTI3NyoKKworVGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciBnb2VzIHRocm91Z2ggdGhlIFggc2VydmVyLiAgVGhlCitkaXNwbGF5IG9mIHRoZSBWaW0gc2VydmVyIG11c3QgYmUgc3BlY2lmaWVkLiAgVGhlIHVzdWFsIHByb3RlY3Rpb24gb2YgdGhlIFgKK3NlcnZlciBpcyB1c2VkLCB5b3UgbXVzdCBiZSBhYmxlIHRvIG9wZW4gYSB3aW5kb3cgb24gdGhlIFggc2VydmVyIGZvciB0aGUKK2NvbW11bmljYXRpb24gdG8gd29yay4gIEl0IGlzIHBvc3NpYmxlIHRvIGNvbW11bmljYXRlIGJldHdlZW4gZGlmZmVyZW50CitzeXN0ZW1zLgorCitCeSBkZWZhdWx0LCBhIEdVSSBWaW0gd2lsbCByZWdpc3RlciBhIG5hbWUgb24gdGhlIFgtc2VydmVyIGJ5IHdoaWNoIGl0IGNhbiBiZQorYWRkcmVzc2VkIGZvciBzdWJzZXF1ZW50IGV4ZWN1dGlvbiBvZiBpbmplY3RlZCBzdHJpbmdzLiAgVmltIGNhbiBhbHNvIGFjdCBhcworYSBjbGllbnQgYW5kIHNlbmQgc3RyaW5ncyB0byBvdGhlciBpbnN0YW5jZXMgb2YgVmltIG9uIHRoZSBzYW1lIFgxMSBkaXNwbGF5LgorCitXaGVuIGFuIFgxMSBHVUkgVmltIChndmltKSBpcyBzdGFydGVkLCBpdCB3aWxsIHRyeSB0byByZWdpc3RlciBhIHNlbmQtc2VydmVyCituYW1lIG9uIHRoZSAnVmltUmVnaXN0cnknIHByb3BlcnR5IG9uIHRoZSByb290IHdpbmRvdy4KKworQSBub24gR1VJIFZpbSB3aXRoIGFjY2VzcyB0byB0aGUgWDExIGRpc3BsYXkgKHx4dGVybS1jbGlwYm9hcmR8IGVuYWJsZWQpLCBjYW4KK2Fsc28gYWN0IGFzIGEgY29tbWFuZCBzZXJ2ZXIgaWYgYSBzZXJ2ZXIgbmFtZSBpcyBleHBsaWNpdGx5IGdpdmVuIHdpdGggdGhlCistLXNlcnZlcm5hbWUgYXJndW1lbnQuCisKK0FuIGVtcHR5IC0tc2VydmVybmFtZSBhcmd1bWVudCB3aWxsIGNhdXNlIHRoZSBjb21tYW5kIHNlcnZlciB0byBiZSBkaXNhYmxlZC4KKworVG8gc2VuZCBjb21tYW5kcyB0byBhIFZpbSBzZXJ2ZXIgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uLCByZWFkIHRoZSBzb3VyY2UKK2ZpbGUgc3JjL2lmX3hjbWRzcnYuYywgaXQgY29udGFpbnMgc29tZSBoaW50cyBhYm91dCB0aGUgcHJvdG9jb2wgdXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBXaW4zMiBzcGVjaWZpYyBpdGVtcwkJCQkJKnczMi1jbGllbnRzZXJ2ZXIqCisKK0V2ZXJ5IFdpbjMyIFZpbSBjYW4gd29yayBhcyBhIHNlcnZlciwgYWxzbyBpbiB0aGUgY29uc29sZS4gIFlvdSBkbyBub3QgbmVlZCBhCit2ZXJzaW9uIGNvbXBpbGVkIHdpdGggT0xFLiAgV2luZG93cyBtZXNzYWdlcyBhcmUgdXNlZCwgdGhpcyB3b3JrcyBvbiBhbnkKK3ZlcnNpb24gb2YgTVMtV2luZG93cy4gIEJ1dCBvbmx5IGNvbW11bmljYXRpb24gd2l0aGluIG9uZSBzeXN0ZW0gaXMgcG9zc2libGUuCisKK1NpbmNlIE1TLVdpbmRvd3MgbWVzc2FnZXMgYXJlIHVzZWQsIGFueSBvdGhlciBhcHBsaWNhdGlvbiBzaG91bGQgYmUgYWJsZSB0bworY29tbXVuaWNhdGUgd2l0aCBhIFZpbSBzZXJ2ZXIuICBBbiBhbHRlcm5hdGl2ZSBpcyB1c2luZyB0aGUgT0xFIGZ1bmN0aW9uYWxpdHkKK3xvbGUtaW50ZXJmYWNlfC4KKworV2hlbiB1c2luZyBndmltLCB0aGUgLS1yZW1vdGUtd2FpdCBvbmx5IHdvcmtzIHByb3Blcmx5IHRoaXMgd2F5OiA+CisKKwlzdGFydCAvdyBndmltIC0tcmVtb3RlLXdhaXQgZmlsZS50eHQKKzwKKyB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3JlcGVhdC50eHQgYi9ydW50aW1lL2RvYy9yZXBlYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZWU0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9yZXBlYXQudHh0CkBAIC0wLDAgKzEsNTI5IEBACisqcmVwZWF0LnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgQXByIDAyCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworUmVwZWF0aW5nIGNvbW1hbmRzLCBWaW0gc2NyaXB0cyBhbmQgZGVidWdnaW5nCQkJKnJlcGVhdGluZyoKKworQ2hhcHRlciAyNiBvZiB0aGUgdXNlciBtYW51YWwgaW50cm9kdWNlcyByZXBlYXRpbmcgfHVzcl8yNi50eHR8LgorCisxLiBTaW5nbGUgcmVwZWF0cwl8c2luZ2xlLXJlcGVhdHwKKzIuIE11bHRpcGxlIHJlcGVhdHMJfG11bHRpLXJlcGVhdHwKKzMuIENvbXBsZXggcmVwZWF0cwl8Y29tcGxleC1yZXBlYXR8Cis0LiBVc2luZyBWaW0gc2NyaXB0cwl8dXNpbmctc2NyaXB0c3wKKzUuIERlYnVnZ2luZyBzY3JpcHRzCXxkZWJ1Zy1zY3JpcHRzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFNpbmdsZSByZXBlYXRzCQkJCQkqc2luZ2xlLXJlcGVhdCoKKworCQkJCQkJCSouKgorLgkJCVJlcGVhdCBsYXN0IGNoYW5nZSwgd2l0aCBjb3VudCByZXBsYWNlZCB3aXRoIFtjb3VudF0uCisJCQlBbHNvIHJlcGVhdCBhIHlhbmsgY29tbWFuZCwgd2hlbiB0aGUgJ3knIGZsYWcgaXMKKwkJCWluY2x1ZGVkIGluICdjcG9wdGlvbnMnLgorCitTaW1wbGUgY2hhbmdlcyBjYW4gYmUgcmVwZWF0ZWQgd2l0aCB0aGUgIi4iIGNvbW1hbmQuICBXaXRob3V0IGEgY291bnQsIHRoZQorY291bnQgb2YgdGhlIGxhc3QgY2hhbmdlIGlzIHVzZWQuICBJZiB5b3UgZW50ZXIgYSBjb3VudCwgaXQgd2lsbCByZXBsYWNlIHRoZQorbGFzdCBvbmUuICBJZiB0aGUgbGFzdCBjaGFuZ2UgaW5jbHVkZWQgYSBzcGVjaWZpY2F0aW9uIG9mIGEgbnVtYmVyZWQgcmVnaXN0ZXIsCit0aGUgcmVnaXN0ZXIgbnVtYmVyIHdpbGwgYmUgaW5jcmVtZW50ZWQuICBTZWUgfHJlZG8tcmVnaXN0ZXJ8IGZvciBhbiBleGFtcGxlCitob3cgdG8gdXNlIHRoaXMuICBOb3RlIHRoYXQgd2hlbiByZXBlYXRpbmcgYSBjb21tYW5kIHRoYXQgdXNlZCBhIFZpc3VhbAorc2VsZWN0aW9uLCB0aGUgc2FtZSBTSVpFIG9mIGFyZWEgaXMgdXNlZCwgc2VlIHx2aXN1YWwtcmVwZWF0fC4KKworCQkJCQkJCSpAOioKK0A6CQkJUmVwZWF0IGxhc3QgY29tbWFuZC1saW5lIFtjb3VudF0gdGltZXMuCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2NtZGxpbmVfaGlzdHwgZmVhdHVyZX0KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIE11bHRpcGxlIHJlcGVhdHMJCQkJCSptdWx0aS1yZXBlYXQqCisKKwkJCQkJCSo6ZyogKjpnbG9iYWwqICpFMTQ3KiAqRTE0OCoKKzpbcmFuZ2VdZ1tsb2JhbF0ve3BhdHRlcm59L1tjbWRdCisJCQlFeGVjdXRlIHRoZSBFeCBjb21tYW5kIFtjbWRdIChkZWZhdWx0ICI6cCIpIG9uIHRoZQorCQkJbGluZXMgd2l0aGluIFtyYW5nZV0gd2hlcmUge3BhdHRlcm59IG1hdGNoZXMuCisKKzpbcmFuZ2VdZ1tsb2JhbF0hL3twYXR0ZXJufS9bY21kXQorCQkJRXhlY3V0ZSB0aGUgRXggY29tbWFuZCBbY21kXSAoZGVmYXVsdCAiOnAiKSBvbiB0aGUKKwkJCWxpbmVzIHdpdGhpbiBbcmFuZ2VdIHdoZXJlIHtwYXR0ZXJufSBkb2VzIE5PVCBtYXRjaC4KKworCQkJCQkJCSo6diogKjp2Z2xvYmFsKgorOltyYW5nZV12W2dsb2JhbF0ve3BhdHRlcm59L1tjbWRdCisJCQlTYW1lIGFzIDpnIS4KKworVGhlIGdsb2JhbCBjb21tYW5kcyB3b3JrIGJ5IGZpcnN0IHNjYW5uaW5nIHRocm91Z2ggdGhlIFtyYW5nZV0gbGluZXMgYW5kCittYXJraW5nIGVhY2ggbGluZSB3aGVyZSBhIG1hdGNoIG9jY3VycyAoZm9yIGEgbXVsdGktbGluZSBwYXR0ZXJuLCBvbmx5IHRoZQorc3RhcnQgb2YgdGhlIG1hdGNoIG1hdHRlcnMpLgorSW4gYSBzZWNvbmQgc2NhbiB0aGUgW2NtZF0gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggbWFya2VkIGxpbmUgd2l0aCBpdHMgbGluZQorbnVtYmVyIHByZXBlbmRlZC4gIEZvciAiOnYiIGFuZCAiOmchIiB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCBmb3IgZWFjaCBub3QKK21hcmtlZCBsaW5lLiAgSWYgYSBsaW5lIGlzIGRlbGV0ZWQgaXRzIG1hcmsgZGlzYXBwZWFycy4KK1RoZSBkZWZhdWx0IGZvciBbcmFuZ2VdIGlzIHRoZSB3aG9sZSBidWZmZXIgKDEsJCkuICBVc2UgIkNUUkwtQyIgdG8gaW50ZXJydXB0Cit0aGUgY29tbWFuZC4gIElmIGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4gZm9yIGEgbGluZSwgdGhlIGNvbW1hbmQgZm9yIHRoYXQKK2xpbmUgaXMgYWJvcnRlZCBhbmQgdGhlIGdsb2JhbCBjb21tYW5kIGNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IG1hcmtlZCBvcgordW5tYXJrZWQgbGluZS4KKworVG8gcmVwZWF0IGEgbm9uLUV4IGNvbW1hbmQsIHlvdSBjYW4gdXNlIHRoZSAiOm5vcm1hbCIgY29tbWFuZDogPgorCTpnL3BhdC9ub3JtYWwge2NvbW1hbmRzfQorTWFrZSBzdXJlIHRoYXQge2NvbW1hbmRzfSBlbmRzIHdpdGggYSB3aG9sZSBjb21tYW5kLCBvdGhlcndpc2UgVmltIHdpbGwgd2FpdAorZm9yIHlvdSB0byB0eXBlIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGZvciBlYWNoIG1hdGNoLiAgVGhlIHNjcmVlbiB3aWxsIG5vdAoraGF2ZSBiZWVuIHVwZGF0ZWQsIHNvIHlvdSBkb24ndCBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gIFNlZSB8Om5vcm1hbHwuCisKK1RoZSB1bmRvL3JlZG8gY29tbWFuZCB3aWxsIHVuZG8vcmVkbyB0aGUgd2hvbGUgZ2xvYmFsIGNvbW1hbmQgYXQgb25jZS4KK1RoZSBwcmV2aW91cyBjb250ZXh0IG1hcmsgd2lsbCBvbmx5IGJlIHNldCBvbmNlICh3aXRoICInJyIgeW91IGdvIGJhY2sgdG8KK3doZXJlIHRoZSBjdXJzb3Igd2FzIGJlZm9yZSB0aGUgZ2xvYmFsIGNvbW1hbmQpLgorCitUaGUgZ2xvYmFsIGNvbW1hbmQgc2V0cyBib3RoIHRoZSBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4gYW5kIHRoZSBsYXN0IHVzZWQKK3N1YnN0aXR1dGUgcGF0dGVybiAodGhpcyBpcyB2aSBjb21wYXRpYmxlKS4gIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBnbG9iYWxseQorcmVwbGFjZSBhIHN0cmluZzoKKwk6Zy9wYXQvcy8vUEFUL2cKK1RoaXMgcmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mICJwYXQiIHdpdGggIlBBVCIuICBUaGUgc2FtZSBjYW4gYmUgZG9uZSB3aXRoOgorCTolcy9wYXQvUEFUL2cKK1doaWNoIGlzIHR3byBjaGFyYWN0ZXJzIHNob3J0ZXIhCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gQ29tcGxleCByZXBlYXRzCQkJCQkqY29tcGxleC1yZXBlYXQqCisKKwkJCQkJCQkqcSogKnJlY29yZGluZyoKK3F7MC05YS16QS1aIn0JCVJlY29yZCB0eXBlZCBjaGFyYWN0ZXJzIGludG8gcmVnaXN0ZXIgezAtOWEtekEtWiJ9CisJCQkodXBwZXJjYXNlIHRvIGFwcGVuZCkuICBUaGUgJ3EnIGNvbW1hbmQgaXMgZGlzYWJsZWQKKwkJCXdoaWxlIGV4ZWN1dGluZyBhIHJlZ2lzdGVyLCBhbmQgaXQgZG9lc24ndCB3b3JrIGluc2lkZQorCQkJYSBtYXBwaW5nLiAge1ZpOiBubyByZWNvcmRpbmd9CisKK3EJCQlTdG9wcyByZWNvcmRpbmcuICAoSW1wbGVtZW50YXRpb24gbm90ZTogVGhlICdxJyB0aGF0CisJCQlzdG9wcyByZWNvcmRpbmcgaXMgbm90IHN0b3JlZCBpbiB0aGUgcmVnaXN0ZXIsIHVubGVzcworCQkJaXQgd2FzIHRoZSByZXN1bHQgb2YgYSBtYXBwaW5nKSAge1ZpOiBubyByZWNvcmRpbmd9CisKKwkJCQkJCQkqQCoKK0B7MC05YS16Ii49Kn0JCUV4ZWN1dGUgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyIHswLTlhLXoiLj0qfSBbY291bnRdCisJCQl0aW1lcy4gIE5vdGUgdGhhdCByZWdpc3RlciAnJScgKG5hbWUgb2YgdGhlIGN1cnJlbnQKKwkJCWZpbGUpIGFuZCAnIycgKG5hbWUgb2YgdGhlIGFsdGVybmF0ZSBmaWxlKSBjYW5ub3QgYmUKKwkJCXVzZWQuICBGb3IgIkA9IiB5b3UgYXJlIHByb21wdGVkIHRvIGVudGVyIGFuCisJCQlleHByZXNzaW9uLiAgVGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBpcyB0aGVuCisJCQlleGVjdXRlZC4gIFNlZSBhbHNvIHxAOnwuICB7Vmk6IG9ubHkgbmFtZWQgcmVnaXN0ZXJzfQorCisJCQkJCQkJKkBAKgorQEAJCQlSZXBlYXQgdGhlIHByZXZpb3VzIEB7MC05YS16IjoqfSBbY291bnRdIHRpbWVzLgorCis6W2FkZHJdKnswLTlhLXoiLj19CQkJCQkJKjpAKiAqOnN0YXIqCis6W2FkZHJdQHswLTlhLXoiLj0qfQlFeGVjdXRlIHRoZSBjb250ZW50cyBvZiByZWdpc3RlciB7MC05YS16Ii49Kn0gYXMgYW4gRXgKKwkJCWNvbW1hbmQuICBGaXJzdCBzZXQgY3Vyc29yIGF0IGxpbmUgW2FkZHJdIChkZWZhdWx0IGlzCisJCQljdXJyZW50IGxpbmUpLiAgV2hlbiB0aGUgbGFzdCBsaW5lIGluIHRoZSByZWdpc3RlciBkb2VzCisJCQlub3QgaGF2ZSBhIDxDUj4gaXQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5IHdoZW4KKwkJCXRoZSAnZScgZmxhZyBpcyBwcmVzZW50IGluICdjcG9wdGlvbnMnLgorCQkJTm90ZSB0aGF0IHRoZSAiOioiIGNvbW1hbmQgaXMgb25seSByZWNvZ25pemVkIHdoZW4gdGhlCisJCQknKicgZmxhZyBpcyBwcmVzZW50IGluICdjcG9wdGlvbnMnLiAgVGhpcyBpcyBOT1QgdGhlCisJCQlkZWZhdWx0IHdoZW4gJ25vY29tcGF0aWJsZScgaXMgdXNlZC4KKwkJCUZvciAiOkA9IiB0aGUgbGFzdCB1c2VkIGV4cHJlc3Npb24gaXMgdXNlZC4gIFRoZQorCQkJcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gaXMgZXhlY3V0ZWQgYXMgYW4KKwkJCUV4IGNvbW1hbmQuCisJCQlNYXBwaW5ncyBhcmUgbm90IHJlY29nbml6ZWQgaW4gdGhlc2UgY29tbWFuZHMuCisJCQl7Vmk6IG9ubHkgaW4gc29tZSB2ZXJzaW9uc30gRnV0dXJlOiBXaWxsIGV4ZWN1dGUgdGhlCisJCQlyZWdpc3RlciBmb3IgZWFjaCBsaW5lIGluIHRoZSBhZGRyZXNzIHJhbmdlLgorCisJCQkJCQkJKjpAOioKKzpbYWRkcl1AOgkJUmVwZWF0IGxhc3QgY29tbWFuZC1saW5lLiAgRmlyc3Qgc2V0IGN1cnNvciBhdCBsaW5lCisJCQlbYWRkcl0gKGRlZmF1bHQgaXMgY3VycmVudCBsaW5lKS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOkBAKgorOlthZGRyXUBACQlSZXBlYXQgdGhlIHByZXZpb3VzIDpAezAtOWEteiJ9LiAgRmlyc3Qgc2V0IGN1cnNvciBhdAorCQkJbGluZSBbYWRkcl0gKGRlZmF1bHQgaXMgY3VycmVudCBsaW5lKS4gIHtWaTogb25seSBpbgorCQkJc29tZSB2ZXJzaW9uc30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBVc2luZyBWaW0gc2NyaXB0cwkJCQkJKnVzaW5nLXNjcmlwdHMqCisKK0ZvciB3cml0aW5nIGEgVmltIHNjcmlwdCwgc2VlIGNoYXB0ZXIgNDEgb2YgdGhlIHVzZXIgbWFudWFsIHx1c3JfNDEudHh0fC4KKworCQkJCQkqOnNvKiAqOnNvdXJjZSogKmxvYWQtdmltLXNjcmlwdCoKKzpzb1t1cmNlXSB7ZmlsZX0JUmVhZCBFeCBjb21tYW5kcyBmcm9tIHtmaWxlfS4gIFRoZXNlIGFyZSBjb21tYW5kcyB0aGF0CisJCQlzdGFydCB3aXRoIGEgIjoiLgorCis6c29bdXJjZV0hIHtmaWxlfQlSZWFkIFZpbSBjb21tYW5kcyBmcm9tIHtmaWxlfS4gIFRoZXNlIGFyZSBjb21tYW5kcworCQkJdGhhdCBhcmUgZXhlY3V0ZWQgZnJvbSBOb3JtYWwgbW9kZSwgbGlrZSB5b3UgdHlwZQorCQkJdGhlbS4KKwkJCVdoZW4gdXNlZCBhZnRlciB8Omdsb2JhbHwsIHw6YXJnZG98LCB8OndpbmRvfCwKKwkJCXw6YnVmZG98LCBpbiBhIGxvb3Agb3Igd2hlbiBhbm90aGVyIGNvbW1hbmQgZm9sbG93cworCQkJdGhlIGRpc3BsYXkgd29uJ3QgYmUgdXBkYXRlZCB3aGlsZSBleGVjdXRpbmcgdGhlCisJCQljb21tYW5kcy4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqOnJ1KiAqOnJ1bnRpbWUqCis6cnVbbnRpbWVdWyFdIHtmaWxlfSAuLgorCQkJUmVhZCBFeCBjb21tYW5kcyBmcm9tIHtmaWxlfSBpbiBlYWNoIGRpcmVjdG9yeSBnaXZlbgorCQkJYnkgJ3J1bnRpbWVwYXRoJy4gIFRoZXJlIGlzIG5vIGVycm9yIGZvciBub24tZXhpc3RpbmcKKwkJCWZpbGVzLiAgRXhhbXBsZTogPgorCQkJCTpydW50aW1lIHN5bnRheC9jLnZpbQorCis8CQkJVGhlcmUgY2FuIGJlIG11bHRpcGxlIHtmaWxlfSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieQorCQkJc3BhY2VzLiAgRWFjaCB7ZmlsZX0gaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBmaXJzdAorCQkJZGlyZWN0b3J5IGZyb20gJ3J1bnRpbWVwYXRoJywgdGhlbiBpbiB0aGUgc2Vjb25kCisJCQlkaXJlY3RvcnksIGV0Yy4gIFVzZSBhIGJhY2tzbGFzaCB0byBpbmNsdWRlIGEgc3BhY2UKKwkJCWluc2lkZSB7ZmlsZX0gKGFsdGhvdWdoIGl0J3MgYmV0dGVyIG5vdCB0byB1c2Ugc3BhY2VzCisJCQlpbiBmaWxlIG5hbWVzLCBpdCBjYXVzZXMgdHJvdWJsZSkuCisKKwkJCVdoZW4gWyFdIGlzIGluY2x1ZGVkLCBhbGwgZm91bmQgZmlsZXMgYXJlIHNvdXJjZWQuCisJCQlXaGVuIGl0IGlzIG5vdCBpbmNsdWRlZCBvbmx5IHRoZSBmaXJzdCBmb3VuZCBmaWxlIGlzCisJCQlzb3VyY2VkLgorCisJCQlXaGVuIHtmaWxlfSBjb250YWlucyB3aWxkY2FyZHMgaXQgaXMgZXhwYW5kZWQgdG8gYWxsCisJCQltYXRjaGluZyBmaWxlcy4gIEV4YW1wbGU6ID4KKwkJCQk6cnVudGltZSEgcGx1Z2luLyoudmltCis8CQkJVGhpcyBpcyB3aGF0IFZpbSB1c2VzIHRvIGxvYWQgdGhlIHBsdWdpbiBmaWxlcyB3aGVuCisJCQlzdGFydGluZyB1cC4gVGhpcyBzaW1pbGFyIGNvbW1hbmQ6ID4KKwkJCQk6cnVudGltZSBwbHVnaW4vKi52aW0KKzwJCQl3b3VsZCBzb3VyY2UgdGhlIGZpcnN0IGZpbGUgb25seS4KKworCQkJV2hlbiAndmVyYm9zZScgaXMgb25lIG9yIGhpZ2hlciwgdGhlcmUgaXMgYSBtZXNzYWdlCisJCQl3aGVuIG5vIGZpbGUgY291bGQgYmUgZm91bmQuCisJCQlXaGVuICd2ZXJib3NlJyBpcyB0d28gb3IgaGlnaGVyLCB0aGVyZSBpcyBhIG1lc3NhZ2UKKwkJCWFib3V0IGVhY2ggc2VhcmNoZWQgZmlsZS4KKwkJCXtub3QgaW4gVml9CisKKzpzY3JpcHRlW25jb2RpbmddIFtlbmNvZGluZ10JCSo6c2NyaXB0ZSogKjpzY3JpcHRlbmNvZGluZyogKkUxNjcqCisJCQlTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCBpbiB0aGUgc2NyaXB0LgorCQkJVGhlIGZvbGxvd2luZyBsaW5lcyB3aWxsIGJlIGNvbnZlcnRlZCBmcm9tIFtlbmNvZGluZ10KKwkJCXRvIHRoZSB2YWx1ZSBvZiB0aGUgJ2VuY29kaW5nJyBvcHRpb24sIGlmIHRoZXkgYXJlCisJCQlkaWZmZXJlbnQuICBFeGFtcGxlczogPgorCQkJCXNjcmlwdGVuY29kaW5nIGlzby04ODU5LTUKKwkJCQlzY3JpcHRlbmNvZGluZyBjcDkzMgorPAorCQkJV2hlbiBbZW5jb2RpbmddIGlzIGVtcHR5LCBubyBjb252ZXJzaW9uIGlzIGRvbmUuICBUaGlzCisJCQljYW4gYmUgdXNlZCB0byByZXN0cmljdCBjb252ZXJzaW9uIHRvIGEgc2VxdWVuY2Ugb2YKKwkJCWxpbmVzOiA+CisJCQkJc2NyaXB0ZW5jb2RpbmcgZXVjLWpwCisJCQkJLi4uIGxpbmVzIHRvIGJlIGNvbnZlcnRlZCAuLi4KKwkJCQlzY3JpcHRlbmNvZGluZworCQkJCS4uLiBub3QgY29udmVydGVkIC4uLgorCis8CQkJV2hlbiBjb252ZXJzaW9uIGlzbid0IHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLCB0aGVyZQorCQkJaXMgbm8gZXJyb3IgbWVzc2FnZSBhbmQgbm8gY29udmVyc2lvbiBpcyBkb25lLgorCisJCQlEb24ndCB1c2UgInVjcy0yIiBvciAidWNzLTQiLCBzY3JpcHRzIGNhbm5vdCBiZSBpbgorCQkJdGhlc2UgZW5jb2RpbmdzICh0aGV5IHdvdWxkIGNvbnRhaW4gTlVMIGJ5dGVzKS4KKwkJCVdoZW4gYSBzb3VyY2VkIHNjcmlwdCBzdGFydHMgd2l0aCBhIEJPTSAoQnl0ZSBPcmRlcgorCQkJTWFyaykgaW4gdXRmLTggZm9ybWF0IFZpbSB3aWxsIHJlY29nbml6ZWQgaXQsIG5vIG5lZWQKKwkJCXRvIHVzZSAiOnNjcmlwdGVuY29kaW5nIHV0Zi04IiB0aGVuLgorCisJCQlXaGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrbXVsdGlfYnl0ZXwgZmVhdHVyZSB0aGlzCisJCQljb21tYW5kIGlzIGlnbm9yZWQuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkqOnNjcmlwKiAqOnNjcmlwdG5hbWVzKgorOnNjcmlwW3RuYW1lc10JCUxpc3QgYWxsIHNvdXJjZWQgc2NyaXB0IG5hbWVzLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlCisJCQlmaXJzdCBzb3VyY2VkLiAgVGhlIG51bWJlciBpcyB1c2VkIGZvciB0aGUgc2NyaXB0IElECisJCQl8PFNJRD58LgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtldmFsfCBmZWF0dXJlfQorCisJCQkJCQkqOmZpbmkqICo6ZmluaXNoKiAqRTE2OCoKKzpmaW5pW3NoXQkJU3RvcCBzb3VyY2luZyBhIHNjcmlwdC4gIENhbiBvbmx5IGJlIHVzZWQgaW4gYSBWaW0KKwkJCXNjcmlwdCBmaWxlLiAgVGhpcyBpcyBhIHF1aWNrIHdheSB0byBza2lwIHRoZSByZXN0IG9mCisJCQl0aGUgZmlsZS4gIElmIGl0IGlzIHVzZWQgYWZ0ZXIgYSB8OnRyeXwgYnV0IGJlZm9yZSB0aGUKKwkJCW1hdGNoaW5nIHw6ZmluYWxseXwgKGlmIHByZXNlbnQpLCB0aGUgY29tbWFuZHMKKwkJCWZvbGxvd2luZyB0aGUgIjpmaW5hbGx5IiB1cCB0byB0aGUgbWF0Y2hpbmcgfDplbmR0cnl8CisJCQlhcmUgZXhlY3V0ZWQgZmlyc3QuICBUaGlzIHByb2Nlc3MgYXBwbGllcyB0byBhbGwKKwkJCW5lc3RlZCAiOnRyeSJzIGluIHRoZSBzY3JpcHQuICBUaGUgb3V0ZXJtb3N0ICI6ZW5kdHJ5IgorCQkJdGhlbiBzdG9wcyBzb3VyY2luZyB0aGUgc2NyaXB0LiAge25vdCBpbiBWaX0KKworQWxsIGNvbW1hbmRzIGFuZCBjb21tYW5kIHNlcXVlbmNlcyBjYW4gYmUgcmVwZWF0ZWQgYnkgcHV0dGluZyB0aGVtIGluIGEgbmFtZWQKK3JlZ2lzdGVyIGFuZCB0aGVuIGV4ZWN1dGluZyBpdC4gIFRoZXJlIGFyZSB0d28gd2F5cyB0byBnZXQgdGhlIGNvbW1hbmRzIGluIHRoZQorcmVnaXN0ZXI6CistIFVzZSB0aGUgcmVjb3JkIGNvbW1hbmQgInEiLiAgWW91IHR5cGUgdGhlIGNvbW1hbmRzIG9uY2UsIGFuZCB3aGlsZSB0aGV5IGFyZQorICBiZWluZyBleGVjdXRlZCB0aGV5IGFyZSBzdG9yZWQgaW4gYSByZWdpc3Rlci4gIEVhc3ksIGJlY2F1c2UgeW91IGNhbiBzZWUKKyAgd2hhdCB5b3UgYXJlIGRvaW5nLiAgSWYgeW91IG1ha2UgYSBtaXN0YWtlLCAicCJ1dCB0aGUgcmVnaXN0ZXIgaW50byB0aGUKKyAgZmlsZSwgZWRpdCB0aGUgY29tbWFuZCBzZXF1ZW5jZSwgYW5kIHRoZW4gZGVsZXRlIGl0IGludG8gdGhlIHJlZ2lzdGVyCisgIGFnYWluLiAgWW91IGNhbiBjb250aW51ZSByZWNvcmRpbmcgYnkgYXBwZW5kaW5nIHRvIHRoZSByZWdpc3RlciAodXNlIGFuCisgIHVwcGVyY2FzZSBsZXR0ZXIpLgorLSBEZWxldGUgb3IgeWFuayB0aGUgY29tbWFuZCBzZXF1ZW5jZSBpbnRvIHRoZSByZWdpc3Rlci4KKworT2Z0ZW4gdXNlZCBjb21tYW5kIHNlcXVlbmNlcyBjYW4gYmUgcHV0IHVuZGVyIGEgZnVuY3Rpb24ga2V5IHdpdGggdGhlICc6bWFwJworY29tbWFuZC4KKworQW4gYWx0ZXJuYXRpdmUgaXMgdG8gcHV0IHRoZSBjb21tYW5kcyBpbiBhIGZpbGUsIGFuZCBleGVjdXRlIHRoZW0gd2l0aCB0aGUKKyc6c291cmNlIScgY29tbWFuZC4gIFVzZWZ1bCBmb3IgbG9uZyBjb21tYW5kIHNlcXVlbmNlcy4gIENhbiBiZSBjb21iaW5lZCB3aXRoCit0aGUgJzptYXAnIGNvbW1hbmQgdG8gcHV0IGNvbXBsaWNhdGVkIGNvbW1hbmRzIHVuZGVyIGEgZnVuY3Rpb24ga2V5LgorCitUaGUgJzpzb3VyY2UnIGNvbW1hbmQgcmVhZHMgRXggY29tbWFuZHMgZnJvbSBhIGZpbGUgbGluZSBieSBsaW5lLiAgWW91IHdpbGwKK2hhdmUgdG8gdHlwZSBhbnkgbmVlZGVkIGtleWJvYXJkIGlucHV0LiAgVGhlICc6c291cmNlIScgY29tbWFuZCByZWFkcyBmcm9tIGEKK3NjcmlwdCBmaWxlIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGludGVycHJldGluZyBlYWNoIGNoYXJhY3RlciBhcyBpZiB5b3UKK3R5cGVkIGl0LgorCitFeGFtcGxlOiBXaGVuIHlvdSBnaXZlIHRoZSAiOiFscyIgY29tbWFuZCB5b3UgZ2V0IHRoZSB8aGl0LWVudGVyfCBwcm9tcHQuICBJZgoreW91ICc6c291cmNlJyBhIGZpbGUgd2l0aCB0aGUgbGluZSAiIWxzIiBpbiBpdCwgeW91IHdpbGwgaGF2ZSB0byB0eXBlIHRoZQorPEVudGVyPiB5b3Vyc2VsZi4gIEJ1dCBpZiB5b3UgJzpzb3VyY2UhJyBhIGZpbGUgd2l0aCB0aGUgbGluZSAiOiFscyIgaW4gaXQsCit0aGUgbmV4dCBjaGFyYWN0ZXJzIGZyb20gdGhhdCBmaWxlIGFyZSByZWFkIHVudGlsIGEgPENSPiBpcyBmb3VuZC4gIFlvdSB3aWxsCitub3QgaGF2ZSB0byB0eXBlIDxDUj4geW91cnNlbGYsIHVubGVzcyAiOiFscyIgd2FzIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUuCisKK0l0IGlzIHBvc3NpYmxlIHRvIHB1dCAnOnNvdXJjZVshXScgY29tbWFuZHMgaW4gdGhlIHNjcmlwdCBmaWxlLCBzbyB5b3UgY2FuCittYWtlIGEgdG9wLWRvd24gaGllcmFyY2h5IG9mIHNjcmlwdCBmaWxlcy4gIFRoZSAnOnNvdXJjZScgY29tbWFuZCBjYW4gYmUKK25lc3RlZCBhcyBkZWVwIGFzIHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbmVkIGF0IG9uZSB0aW1lIChhYm91dAorMTUpLiAgVGhlICc6c291cmNlIScgY29tbWFuZCBjYW4gYmUgbmVzdGVkIHVwIHRvIDE1IGxldmVscyBkZWVwLgorCitZb3UgY2FuIHVzZSB0aGUgIjxzZmlsZT4iIHN0cmluZyAobGl0ZXJhbGx5LCB0aGlzIGlzIG5vdCBhIHNwZWNpYWwga2V5KSBpbnNpZGUKK29mIHRoZSBzb3VyY2VkIGZpbGUsIGluIHBsYWNlcyB3aGVyZSBhIGZpbGUgbmFtZSBpcyBleHBlY3RlZC4gIEl0IHdpbGwgYmUKK3JlcGxhY2VkIGJ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHNvdXJjZWQgZmlsZS4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhCisib3RoZXIudmltcmMiIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHlvdXIgIi52aW1yYyIgZmlsZSwgeW91IGNhbiBzb3VyY2UKK2l0IGZyb20geW91ciAiLnZpbXJjIiBmaWxlIHdpdGggdGhpcyBjb21tYW5kOiA+CisJOnNvdXJjZSA8c2ZpbGU+Omgvb3RoZXIudmltcmMKKworSW4gc2NyaXB0IGZpbGVzIHRlcm1pbmFsLWRlcGVuZGVudCBrZXkgY29kZXMgYXJlIHJlcHJlc2VudGVkIGJ5Cit0ZXJtaW5hbC1pbmRlcGVuZGVudCB0d28gY2hhcmFjdGVyIGNvZGVzLiAgVGhpcyBtZWFucyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQKK2luIHRoZSBzYW1lIHdheSBvbiBkaWZmZXJlbnQga2luZHMgb2YgdGVybWluYWxzLiAgVGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhCitrZXkgY29kZSBpcyAweDgwIG9yIDEyOCwgc2hvd24gb24gdGhlIHNjcmVlbiBhcyAifkAiLiAgVGhlIHNlY29uZCBvbmUgY2FuIGJlCitmb3VuZCBpbiB0aGUgbGlzdCB8a2V5LW5vdGF0aW9ufC4gIEFueSBvZiB0aGVzZSBjb2RlcyBjYW4gYWxzbyBiZSBlbnRlcmVkCit3aXRoIENUUkwtViBmb2xsb3dlZCBieSB0aGUgdGhyZWUgZGlnaXQgZGVjaW1hbCBjb2RlLiAgVGhpcyBkb2VzIE5PVCB3b3JrIGZvcgordGhlIDx0X3h4PiB0ZXJtY2FwIGNvZGVzLCB0aGVzZSBjYW4gb25seSBiZSB1c2VkIGluIG1hcHBpbmdzLgorCisJCQkJCQkJKjpzb3VyY2VfY3JubCogKlcxNSoKK01TLURPUywgV2luMzIgYW5kIE9TLzI6IEZpbGVzIHRoYXQgYXJlIHJlYWQgd2l0aCAiOnNvdXJjZSIgbm9ybWFsbHkgaGF2ZQorPENSPjxOTD4gPEVPTD5zLiAgVGhlc2UgYWx3YXlzIHdvcmsuICBJZiB5b3UgYXJlIHVzaW5nIGEgZmlsZSB3aXRoIDxOTD4gPEVPTD5zCisoZm9yIGV4YW1wbGUsIGEgZmlsZSBtYWRlIG9uIFVuaXgpLCB0aGlzIHdpbGwgYmUgcmVjb2duaXplZCBpZiAnZmlsZWZvcm1hdHMnCitpcyBub3QgZW1wdHkgYW5kIHRoZSBmaXJzdCBsaW5lIGRvZXMgbm90IGVuZCBpbiBhIDxDUj4uICBUaGlzIGZhaWxzIGlmIHRoZQorZmlyc3QgbGluZSBoYXMgc29tZXRoaW5nIGxpa2UgIjptYXAgPEYxPiA6aGVscF5NIiwgd2hlcmUgIl5NIiBpcyBhIDxDUj4uICBJZgordGhlIGZpcnN0IGxpbmUgZW5kcyBpbiBhIDxDUj4sIGJ1dCBmb2xsb3dpbmcgb25lcyBkb24ndCwgeW91IHdpbGwgZ2V0IGFuIGVycm9yCittZXNzYWdlLCBiZWNhdXNlIHRoZSA8Q1I+IGZyb20gdGhlIGZpcnN0IGxpbmVzIHdpbGwgYmUgbG9zdC4KKworTWFjaW50b3NoOiBGaWxlcyB0aGF0IGFyZSByZWFkIHdpdGggIjpzb3VyY2UiIG5vcm1hbGx5IGhhdmUgPENSPiA8RU9MPnMuCitUaGVzZSBhbHdheXMgd29yay4gIElmIHlvdSBhcmUgdXNpbmcgYSBmaWxlIHdpdGggPE5MPiA8RU9MPnMgKGZvciBleGFtcGxlLCBhCitmaWxlIG1hZGUgb24gVW5peCksIHRoaXMgd2lsbCBiZSByZWNvZ25pemVkIGlmICdmaWxlZm9ybWF0cycgaXMgbm90IGVtcHR5IGFuZAordGhlIGZpcnN0IGxpbmUgZG9lcyBub3QgZW5kIGluIGEgPENSPi4gIEJlIGNhcmVmdWwgbm90IHRvIHVzZSBhIGZpbGUgd2l0aCA8Tkw+CitsaW5lYnJlYWtzIHdoaWNoIGhhcyBhIDxDUj4gaW4gZmlyc3QgbGluZS4KKworT24gb3RoZXIgc3lzdGVtcywgVmltIGV4cGVjdHMgIjpzb3VyY2UiZWQgZmlsZXMgdG8gZW5kIGluIGEgPE5MPi4gIFRoZXNlCithbHdheXMgd29yay4gIElmIHlvdSBhcmUgdXNpbmcgYSBmaWxlIHdpdGggPENSPjxOTD4gPEVPTD5zIChmb3IgZXhhbXBsZSwgYQorZmlsZSBtYWRlIG9uIE1TLURPUyksIGFsbCBsaW5lcyB3aWxsIGhhdmUgYSB0cmFpbGluZyA8Q1I+LiAgVGhpcyBtYXkgY2F1c2UKK3Byb2JsZW1zIGZvciBzb21lIGNvbW1hbmRzIChlLmcuLCBtYXBwaW5ncykuICBUaGVyZSBpcyBubyBhdXRvbWF0aWMgPEVPTD4KK2RldGVjdGlvbiwgYmVjYXVzZSBpdCdzIGNvbW1vbiB0byBzdGFydCB3aXRoIGEgbGluZSB0aGF0IGRlZmluZXMgYSBtYXBwaW5nCit0aGF0IGVuZHMgaW4gYSA8Q1I+LCB3aGljaCB3aWxsIGNvbmZ1c2UgdGhlIGF1dG9tYXRvbi4KKworCQkJCQkJCSpsaW5lLWNvbnRpbnVhdGlvbioKK0xvbmcgbGluZXMgaW4gYSAiOnNvdXJjZSJkIEV4IGNvbW1hbmQgc2NyaXB0IGZpbGUgY2FuIGJlIHNwbGl0IGJ5IGluc2VydGluZworYSBsaW5lIGNvbnRpbnVhdGlvbiBzeW1ib2wgIlwiIChiYWNrc2xhc2gpIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBsaW5lLgorVGhlcmUgY2FuIGJlIHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgYmFja3NsYXNoLCB3aGljaCBpcyBpZ25vcmVkLgorCitFeGFtcGxlOiB0aGUgbGluZXMgPgorCTpzZXQgY29tbWVudHM9c3I6LyosbWI6KixlbDoqLywKKwkJICAgICBcOi8vLAorCQkgICAgIFxiOiMsCisJCSAgICAgXDolLAorCQkgICAgIFxuOj4sCisJCSAgICAgXGZiOi0KK2FyZSBpbnRlcnByZXRlZCBhcyBpZiB0aGV5IHdlcmUgZ2l2ZW4gaW4gb25lIGxpbmU6CisJOnNldCBjb21tZW50cz1zcjovKixtYjoqLGVsOiovLDovLyxiOiMsOiUsbjo+LGZiOi0KKworQWxsIGxlYWRpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBsaW5lIGJlZm9yZSBhIGJhY2tzbGFzaCBhcmUgaWdub3JlZC4KK05vdGUgaG93ZXZlciB0aGF0IHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gdGhlIGxpbmUgYmVmb3JlIGl0IGNhbm5vdCBiZQoraW5zZXJ0ZWQgZnJlZWx5OyBpdCBkZXBlbmRzIG9uIHRoZSBwb3NpdGlvbiB3aGVyZSBhIGNvbW1hbmQgaXMgc3BsaXQgdXAKK3doZXRoZXIgYWRkaXRpb25hbCB3aGl0ZXNwYWNlIGlzIGFsbG93ZWQgb3Igbm90LgorCitUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgIjphcHBlbmQiIGFuZCAiOmluc2VydCIgY29tbWFuZHM6ID4KKyAgIDoxYXBwZW5kCisgICBcYXNkZgorICAgLgorVGhlIGJhY2tzbGFzaCBpcyBzZWVuIGFzIGEgbGluZS1jb250aW51YXRpb24gc3ltYm9sLCB0aHVzIHRoaXMgcmVzdWx0cyBpbiB0aGUKK2NvbW1hbmQ6ID4KKyAgIDoxYXBwZW5kYXNkZgorICAgLgorVG8gYXZvaWQgdGhpcywgYWRkIHRoZSAnQycgZmxhZyB0byB0aGUgJ2Nwb3B0aW9ucycgb3B0aW9uOiA+CisgICA6c2V0IGNwbys9QworICAgOjFhcHBlbmQKKyAgIFxhc2RmCisgICAuCisgICA6c2V0IGNwby09QworCitOb3RlIHRoYXQgd2hlbiB0aGUgY29tbWFuZHMgYXJlIGluc2lkZSBhIGZ1bmN0aW9uLCB5b3UgbmVlZCB0byBhZGQgdGhlICdDJworZmxhZyB3aGVuIGRlZmluaW5nIHRoZSBmdW5jdGlvbiwgaXQgaXMgbm90IHJlbGV2YW50IHdoZW4gZXhlY3V0aW5nIGl0LiA+CisgICA6c2V0IGNwbys9QworICAgOmZ1bmN0aW9uIEZvbygpCisgICA6MWFwcGVuZAorICAgXGFzZGYKKyAgIC4KKyAgIDplbmRmdW5jdGlvbgorICAgOnNldCBjcG8tPUMKKworUmF0aW9uYWxlOgorCU1vc3QgcHJvZ3JhbXMgd29yayB3aXRoIGEgdHJhaWxpbmcgYmFja3NsYXNoIHRvIGluZGljYXRlIGxpbmUKKwljb250aW51YXRpb24uICBVc2luZyB0aGlzIGluIFZpbSB3b3VsZCBjYXVzZSBpbmNvbXBhdGliaWxpdHkgd2l0aCBWaS4KKwlGb3IgZXhhbXBsZSBmb3IgdGhpcyBWaSBtYXBwaW5nOiA+CisJCTptYXAgeHggIGFzZGZcCis8CVRoZXJlZm9yZSB0aGUgdW51c3VhbCBsZWFkaW5nIGJhY2tzbGFzaCBpcyB1c2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIERlYnVnZ2luZyBzY3JpcHRzCQkJCQkqZGVidWctc2NyaXB0cyoKKworQmVzaWRlcyB0aGUgb2J2aW91cyBtZXNzYWdlcyB0aGF0IHlvdSBjYW4gYWRkIHRvIHlvdXIgc2NyaXB0cyB0byBmaW5kIG91dCB3aGF0Cit0aGV5IGFyZSBkb2luZywgVmltIG9mZmVycyBhIGRlYnVnIG1vZGUuICBUaGlzIGFsbG93cyB5b3UgdG8gc3RlcCB0aHJvdWdoIGEKK3NvdXJjZWQgZmlsZSBvciB1c2VyIGZ1bmN0aW9uIGFuZCBzZXQgYnJlYWtwb2ludHMuCisKK05PVEU6IFRoZSBkZWJ1Z2dpbmcgbW9kZSBpcyBmYXIgZnJvbSBwZXJmZWN0LiAgRGVidWdnaW5nIHdpbGwgaGF2ZSBzaWRlCitlZmZlY3RzIG9uIGhvdyBWaW0gd29ya3MuICBZb3UgY2Fubm90IHVzZSBpdCB0byBkZWJ1ZyBldmVyeXRoaW5nLiAgRm9yCitleGFtcGxlLCB0aGUgZGlzcGxheSBpcyBtZXNzZWQgdXAgYnkgdGhlIGRlYnVnZ2luZyBtZXNzYWdlcy4KK3tWaSBkb2VzIG5vdCBoYXZlIGEgZGVidWcgbW9kZX0KKworQW4gYWx0ZXJuYXRpdmUgdG8gZGVidWcgbW9kZSBpcyBzZXR0aW5nIHRoZSAndmVyYm9zZScgb3B0aW9uLiAgV2l0aCBhIGJpZ2dlcgorbnVtYmVyIGl0IHdpbGwgZ2l2ZSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMgYWJvdXQgd2hhdCBWaW0gaXMgZG9pbmcuCisKKworU1RBUlRJTkcgREVCVUcgTU9ERQkJCQkJCSpkZWJ1Zy1tb2RlKgorCitUbyBlbnRlciBkZWJ1Z2dpbmcgbW9kZSB1c2Ugb25lIG9mIHRoZXNlIG1ldGhvZHM6CisxLiBTdGFydCBWaW0gd2l0aCB0aGUgfC1EfCBhcmd1bWVudDogPgorCXZpbSAtRCBmaWxlLnR4dAorPCAgRGVidWdnaW5nIHdpbGwgc3RhcnQgYXMgc29vbiBhcyB0aGUgZmlyc3QgdmltcmMgZmlsZSBpcyBzb3VyY2VkLiAgVGhpcyBpcworICAgdXNlZnVsIHRvIGZpbmQgb3V0IHdoYXQgaXMgaGFwcGVuaW5nIHdoZW4gVmltIGlzIHN0YXJ0aW5nIHVwLiAgQSBzaWRlCisgICBlZmZlY3QgaXMgdGhhdCBWaW0gd2lsbCBzd2l0Y2ggdGhlIHRlcm1pbmFsIG1vZGUgYmVmb3JlIGluaXRpYWxpc2F0aW9ucworICAgaGF2ZSBmaW5pc2hlZCwgd2l0aCB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisgICBGb3IgYSBHVUktb25seSB2ZXJzaW9uIChXaW5kb3dzLCBNYWNpbnRvc2gpIHRoZSBkZWJ1Z2dpbmcgd2lsbCBzdGFydCBhcworICAgc29vbiBhcyB0aGUgR1VJIHdpbmRvdyBoYXMgYmVlbiBvcGVuZWQuICBUbyBtYWtlIHRoaXMgaGFwcGVuIGVhcmx5LCBhZGQgYQorICAgIjpndWkiIGNvbW1hbmQgaW4gdGhlIHZpbXJjIGZpbGUuCisJCQkJCQkJCSo6ZGVidWcqCisyLiBSdW4gYSBjb21tYW5kIHdpdGggIjpkZWJ1ZyIgcHJlcGVuZGVkLiAgRGVidWdnaW5nIHdpbGwgb25seSBiZSBkb25lIHdoaWxlCisgICB0aGlzIGNvbW1hbmQgZXhlY3V0ZXMuICBVc2VmdWwgZm9yIGRlYnVnZ2luZyBhIHNwZWNpZmljIHNjcmlwdCBvciB1c2VyCisgICBmdW5jdGlvbi4gIEFuZCBmb3Igc2NyaXB0cyBhbmQgZnVuY3Rpb25zIHVzZWQgYnkgYXV0b2NvbW1hbmRzLiAgRXhhbXBsZTogPgorCTpkZWJ1ZyBlZGl0IHRlc3QudHh0Lmd6CisKKzMuIFNldCBhIGJyZWFrcG9pbnQgaW4gYSBzb3VyY2VkIGZpbGUgb3IgdXNlciBmdW5jdGlvbi4gIFlvdSBjb3VsZCBkbyB0aGlzIGluCisgICB0aGUgY29tbWFuZCBsaW5lOiA+CisJdmltIC1jICJicmVha2FkZCBmaWxlICovZXhwbG9yZXIudmltIiAuCis8ICBUaGlzIHdpbGwgcnVuIFZpbSBhbmQgc3RvcCBpbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgImV4cGxvcmVyLnZpbSIgc2NyaXB0LgorICAgQnJlYWtwb2ludHMgY2FuIGFsc28gYmUgc2V0IHdoaWxlIGluIGRlYnVnZ2luZyBtb2RlLgorCitJbiBkZWJ1Z2dpbmcgbW9kZSBldmVyeSBleGVjdXRlZCBjb21tYW5kIGlzIGRpc3BsYXllZCBiZWZvcmUgaXQgaXMgZXhlY3V0ZWQuCitDb21tZW50IGxpbmVzLCBlbXB0eSBsaW5lcyBhbmQgbGluZXMgdGhhdCBhcmUgbm90IGV4ZWN1dGVkIGFyZSBza2lwcGVkLiAgV2hlbgorYSBsaW5lIGNvbnRhaW5zIHR3byBjb21tYW5kcywgc2VwYXJhdGVkIGJ5ICJ8IiwgZWFjaCBjb21tYW5kIHdpbGwgYmUgZGlzcGxheWVkCitzZXBhcmF0ZWx5LgorCisKK0RFQlVHIE1PREUKKworT25jZSBpbiBkZWJ1Z2dpbmcgbW9kZSwgdGhlIHVzdWFsIEV4IGNvbW1hbmRzIGNhbiBiZSB1c2VkLiAgRm9yIGV4YW1wbGUsIHRvCitpbnNwZWN0IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlOiA+CisJZWNobyBpZHgKK1doZW4gaW5zaWRlIGEgdXNlciBmdW5jdGlvbiwgdGhpcyB3aWxsIHByaW50IHRoZSB2YWx1ZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUKKyJpZHgiLiAgUHJlcGVuZCAiZzoiIHRvIGdldCB0aGUgdmFsdWUgb2YgYSBnbG9iYWwgdmFyaWFibGU6ID4KKwllY2hvIGc6aWR4CitBbGwgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIHNjcmlwdC4KK1lvdSBjYW4gYWxzbyBzZXQgb3B0aW9ucywgZm9yIGV4YW1wbGUgc2V0dGluZyBvciByZXNldHRpbmcgJ3ZlcmJvc2UnIHdpbGwgc2hvdword2hhdCBoYXBwZW5zLCBidXQgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IGl0IGp1c3QgYmVmb3JlIGV4ZWN1dGluZyB0aGUgbGluZXMgeW91CithcmUgaW50ZXJlc3RlZCBpbjogPgorCTpzZXQgdmVyYm9zZT0yMAorCitDb21tYW5kcyB0aGF0IHJlcXVpcmUgdXBkYXRpbmcgdGhlIHNjcmVlbiBzaG91bGQgYmUgYXZvaWRlZCwgYmVjYXVzZSB0aGVpcgorZWZmZWN0IHdvbid0IGJlIG5vdGljZWQgdW50aWwgYWZ0ZXIgbGVhdmluZyBkZWJ1ZyBtb2RlLiAgRm9yIGV4YW1wbGU6ID4KKwk6aGVscAord29uJ3QgYmUgdmVyeSBoZWxwZnVsLgorCitUaGVyZSBpcyBhIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBoaXN0b3J5IGZvciBkZWJ1ZyBtb2RlLgorCitUaGUgbGluZSBudW1iZXIgZm9yIGEgZnVuY3Rpb24gbGluZSBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLgorSWYgeW91IGhhdmUgdHJvdWJsZSBmaWd1cmluZyBvdXQgd2hlcmUgeW91IGFyZSwgZWRpdCB0aGUgZmlsZSB0aGF0IGRlZmluZXMKK3RoZSBmdW5jdGlvbiBpbiBhbm90aGVyIFZpbSwgc2VhcmNoIGZvciB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCBkbworIjk5aiIuICBSZXBsYWNlICI5OSIgd2l0aCB0aGUgbGluZSBudW1iZXIuCisKK0FkZGl0aW9uYWxseSwgdGhlc2UgY29tbWFuZHMgY2FuIGJlIHVzZWQ6CisJCQkJCQkJKj5jb250KgorCWNvbnQJCUNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBicmVha3BvaW50IGlzIGhpdC4KKwkJCQkJCQkqPnF1aXQqCisJcXVpdAkJQWJvcnQgZXhlY3V0aW9uLiAgVGhpcyBpcyBsaWtlIHVzaW5nIENUUkwtQywgc29tZQorCQkJdGhpbmdzIG1pZ2h0IHN0aWxsIGJlIGV4ZWN1dGVkLCBkb2Vzbid0IGFib3J0CisJCQlldmVyeXRoaW5nLiAgU3RpbGwgc3RvcHMgYXQgdGhlIG5leHQgYnJlYWtwb2ludC4KKwkJCQkJCQkqPm5leHQqCisJbmV4dAkJRXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgY29tZSBiYWNrIHRvIGRlYnVnIG1vZGUgd2hlbgorCQkJaXQncyBmaW5pc2hlZC4gIFRoaXMgc3RlcHMgb3ZlciB1c2VyIGZ1bmN0aW9uIGNhbGxzCisJCQlhbmQgc291cmNlZCBmaWxlcy4KKwkJCQkJCQkqPnN0ZXAqCisJc3RlcAkJRXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgY29tZSBiYWNrIHRvIGRlYnVnIG1vZGUgZm9yCisJCQl0aGUgbmV4dCBjb21tYW5kLiAgVGhpcyBzdGVwcyBpbnRvIGNhbGxlZCB1c2VyCisJCQlmdW5jdGlvbnMgYW5kIHNvdXJjZWQgZmlsZXMuCisJCQkJCQkJKj5pbnRlcnJ1cHQqCisJaW50ZXJydXB0CVRoaXMgaXMgbGlrZSB1c2luZyBDVFJMLUMsIGJ1dCB1bmxpa2UgIj5xdWl0IiBjb21lcworCQkJYmFjayB0byBkZWJ1ZyBtb2RlIGZvciB0aGUgbmV4dCBjb21tYW5kIHRoYXQgaXMKKwkJCWV4ZWN1dGVkLiAgVXNlZnVsIGZvciB0ZXN0aW5nIHw6ZmluYWxseXwgYW5kIHw6Y2F0Y2h8CisJCQlvbiBpbnRlcnJ1cHQgZXhjZXB0aW9ucy4KKwkJCQkJCQkqPmZpbmlzaCoKKwlmaW5pc2gJCUZpbmlzaCB0aGUgY3VycmVudCBzY3JpcHQgb3IgdXNlciBmdW5jdGlvbiBhbmQgY29tZQorCQkJYmFjayB0byBkZWJ1ZyBtb2RlIGZvciB0aGUgY29tbWFuZCBhZnRlciB0aGUgb25lIHRoYXQKKwkJCXNvdXJjZWQgb3IgY2FsbGVkIGl0LgorCitBYm91dCB0aGUgYWRkaXRpb25hbCBjb21tYW5kcyBpbiBkZWJ1ZyBtb2RlOgorLSBUaGVyZSBpcyBubyBjb21tYW5kLWxpbmUgY29tcGxldGlvbiBmb3IgdGhlbSwgeW91IGdldCB0aGUgY29tcGxldGlvbiBmb3IgdGhlCisgIG5vcm1hbCBFeCBjb21tYW5kcyBvbmx5LgorLSBZb3UgY2FuIHNob3J0ZW4gdGhlbSwgdXAgdG8gYSBzaW5nbGUgY2hhcmFjdGVyOiAiYyIsICJuIiwgInMiIGFuZCAiZiIuCistIEhpdHRpbmcgPENSPiB3aWxsIHJlcGVhdCB0aGUgcHJldmlvdXMgb25lLiAgV2hlbiBkb2luZyBhbm90aGVyIGNvbW1hbmQsIHRoaXMKKyAgaXMgcmVzZXQgKGJlY2F1c2UgaXQncyBub3QgY2xlYXIgd2hhdCB5b3Ugd2FudCB0byByZXBlYXQpLgorLSBXaGVuIHlvdSB3YW50IHRvIHVzZSB0aGUgRXggY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUsIHByZXBlbmQgYSBjb2xvbjoKKyAgIjpjb250IiwgIjpuZXh0IiwgIjpmaW5pc2giIChvciBzaG9ydGVyKS4KKworCitERUZJTklORyBCUkVBS1BPSU5UUworCQkJCQkJCSo6YnJlYWthKiAqOmJyZWFrYWRkKgorOmJyZWFrYVtkZF0gZnVuYyBbbG51bV0ge25hbWV9CisJCVNldCBhIGJyZWFrcG9pbnQgaW4gYSBmdW5jdGlvbi4gIEV4YW1wbGU6ID4KKwkJCTpicmVha2FkZCBmdW5jIEV4cGxvcmUKKzwJCURvZXNuJ3QgY2hlY2sgZm9yIGEgdmFsaWQgZnVuY3Rpb24gbmFtZSwgdGh1cyB0aGUgYnJlYWtwb2ludAorCQljYW4gYmUgc2V0IGJlZm9yZSB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC4KKworOmJyZWFrYVtkZF0gZmlsZSBbbG51bV0ge25hbWV9CisJCVNldCBhIGJyZWFrcG9pbnQgaW4gYSBzb3VyY2VkIGZpbGUuICBFeGFtcGxlOiA+CisJCQk6YnJlYWthZGQgZmlsZSA0MyAudmltcmMKKworVGhlIFtsbnVtXSBpcyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGJyZWFrcG9pbnQuICBWaW0gd2lsbCBzdG9wIGF0IG9yIGFmdGVyCit0aGlzIGxpbmUuICBXaGVuIG9taXR0ZWQgbGluZSAxIGlzIHVzZWQuCisKK3tuYW1lfSBpcyBhIHBhdHRlcm4gdGhhdCBpcyBtYXRjaGVkIHdpdGggdGhlIGZpbGUgb3IgZnVuY3Rpb24gbmFtZS4gIFRoZQorcGF0dGVybiBpcyBsaWtlIHdoYXQgaXMgdXNlZCBmb3IgYXV0b2NvbW1hbmRzLiAgVGhlcmUgbXVzdCBiZSBhIGZ1bGwgbWF0Y2ggKGFzCitpZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCAiXiIgYW5kIGVuZHMgaW4gIiQiKS4gIEEgIioiIG1hdGNoZXMgYW55IHNlcXVlbmNlCitvZiBjaGFyYWN0ZXJzLiAgJ2lnbm9yZWNhc2UnIGlzIG5vdCB1c2VkLCBidXQgIlxjIiBjYW4gYmUgdXNlZCBpbiB0aGUgcGF0dGVybgordG8gaWdub3JlIGNhc2UgfC9cY3wuICBEb24ndCBpbmNsdWRlIHRoZSAoKSBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUhCisKK1RoZSBtYXRjaCBmb3Igc291cmNlZCBzY3JpcHRzIGlzIGRvbmUgYWdhaW5zdCB0aGUgZnVsbCBmaWxlIG5hbWUuICBFeGFtcGxlczogPgorCWJyZWFrYWRkIGZpbGUgZXhwbG9yZXIKK3dvbid0IG1hdGNoLCB0aGUgcGF0aCBpcyBtaXNzaW5nLiA+CisJYnJlYWthZGQgZmlsZSAqZXhwbG9yZXIudmltCittYXRjaGVzICIuLi4vcGx1Z2luL2V4cGxvcmVyLnZpbSIgYW5kICIuLi4vcGx1Z2luL2lleHBsb3Jlci52aW0iLiA+CisJYnJlYWthZGQgZmlsZSAqL2V4cGxvcmVyLnZpbQorbWF0Y2hlcyAiLi4uL3BsdWdpbi9leHBsb3Jlci52aW0iIG9ubHkuCisKK1RoZSBtYXRjaCBmb3IgZnVuY3Rpb25zIGlzIGRvbmUgYWdhaW5zdCB0aGUgbmFtZSBhcyBpdCdzIHNob3duIGluIHRoZSBvdXRwdXQKK29mICI6ZnVuY3Rpb24iLiAgRm9yIGxvY2FsIGZ1bmN0aW9ucyB0aGlzIG1lYW5zIHRoYXQgc29tZXRoaW5nIGxpa2UgIjxTTlI+OTlfIgoraXMgcHJlcGVuZGVkLgorCisKK0RFTEVUSU5HIEJSRUFLUE9JTlRTCisJCQkJCQkqOmJyZWFrZCogKjpicmVha2RlbCogKkUxNjEqCis6YnJlYWtkW2VsXSB7bnJ9CisJCURlbGV0ZSBicmVha3BvaW50IHtucn0uICBVc2UgfDpicmVha2xpc3R8IHRvIHNlZSB0aGUgbnVtYmVyIG9mCisJCWVhY2ggYnJlYWtwb2ludC4KKworOmJyZWFrZFtlbF0gZnVuYyBbbG51bV0ge25hbWV9CisJCURlbGV0ZSBhIGJyZWFrcG9pbnQgaW4gYSBmdW5jdGlvbi4KKworOmJyZWFrZFtlbF0gZmlsZSBbbG51bV0ge25hbWV9CisJCURlbGV0ZSBhIGJyZWFrcG9pbnQgaW4gYSBzb3VyY2VkIGZpbGUuCisKK1doZW4gW2xudW1dIGlzIG9taXR0ZWQsIHRoZSBmaXJzdCBicmVha3BvaW50IGluIHRoZSBmdW5jdGlvbiBvciBmaWxlIGlzCitkZWxldGVkLgorVGhlIHtuYW1lfSBtdXN0IGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCB3YXMgdHlwZWQgZm9yIHRoZSAiOmJyZWFrYWRkIgorY29tbWFuZC4gICJleHBsb3JlciIsICIqZXhwbG9yZXIudmltIiBhbmQgIipleHBsb3JlcioiIGFyZSBkaWZmZXJlbnQuCisKKworTElTVElORyBCUkVBS1BPSU5UUworCQkJCQkJCSo6YnJlYWtsKiAqOmJyZWFrbGlzdCoKKzpicmVha2xbaXN0XQorCQlMaXN0IGFsbCBicmVha3BvaW50cy4KKworCitPQlNDVVJFCisKKwkJCQkJCSo6ZGVidWdnKiAqOmRlYnVnZ3JlZWR5KgorOmRlYnVnZ1tyZWVkeV0KKwkJUmVhZCBkZWJ1ZyBtb2RlIGNvbW1hbmRzIGZyb20gdGhlIG5vcm1hbCBpbnB1dCBzdHJlYW0sIGluc3RlYWQKKwkJb2YgZ2V0dGluZyB0aGVtIGRpcmVjdGx5IGZyb20gdGhlIHVzZXIuICBPbmx5IHVzZWZ1bCBmb3IgdGVzdAorCQlzY3JpcHRzLiAgRXhhbXBsZTogPgorCQkgIGVjaG8gJ3FeTXEnIHwgdmltIC1lIC1zIC1jIGRlYnVnZ3JlZWR5IC1jICdicmVha2FkZCBmaWxlIHNjcmlwdC52aW0nIC1TIHNjcmlwdC52aW0KKworOjBkZWJ1Z2dbcmVlZHldCisJCVVuZG8gIjpkZWJ1Z2dyZWVkeSI6IGdldCBkZWJ1ZyBtb2RlIGNvbW1hbmRzIGRpcmVjdGx5IGZyb20gdGhlCisJCXVzZXIsIGRvbid0IHVzZSB0eXBlYWhlYWQgZm9yIGRlYnVnIGNvbW1hbmRzLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcmlsZWZ0LnR4dCBiL3J1bnRpbWUvZG9jL3JpbGVmdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjNTNhYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3JpbGVmdC50eHQKQEAgLTAsMCArMSwxMjUgQEAKKypyaWxlZnQudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBNYXkgMDcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQXZuZXIgTG90dGVtCisJCQkJCSAgdXBkYXRlZCBieSBOYWRpbSBTaGFpa2xpCisKKworUmlnaHQgdG8gTGVmdCBkaXNwbGF5IG1vZGUgZm9yIFZpbQkJCQkqcmlsZWZ0KgorCisKK1RoZXNlIGZ1bmN0aW9ucyB3ZXJlIG9yaWdpbmFsbHkgY3JlYXRlZCBieSBBdm5lciBMb3R0ZW06CisgICBFLW1haWw6IGFsb3R0ZW1AaWlsLmludGVsLmNvbQorICAgUGhvbmU6ICArOTcyLTQtODMwNzMyMgorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKKwkJCQkJCQkJKkUyNioKK1RoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3JpZ2h0bGVmdHwgZmVhdHVyZSB3YXMgZW5hYmxlZAorYXQgY29tcGlsZSB0aW1lLgorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCitTb21lIGxhbmd1YWdlcyBzdWNoIGFzIEFyYWJpYywgRmFyc2ksIEhlYnJldyAoYW1vbmcgb3RoZXJzKSByZXF1aXJlIHRoZQorYWJpbGl0eSB0byBkaXNwbGF5IHRoZWlyIHRleHQgZnJvbSByaWdodC10by1sZWZ0LiAgRmlsZXMgaW4gdGhvc2UgbGFuZ3VhZ2VzCithcmUgc3RvcmVkIGNvbnZlbnRpb25hbGx5IGFuZCB0aGUgcmlnaHQtdG8tbGVmdCByZXF1aXJlbWVudCBpcyBvbmx5IGEKK2Z1bmN0aW9uIG9mIHRoZSBkaXNwbGF5IGVuZ2luZSAocGVyIHRoZSBVbmljb2RlIHNwZWNpZmljYXRpb24pLiAgSW4KK3JpZ2h0LXRvLWxlZnQgb3JpZW50ZWQgZmlsZXMgdGhlIGNoYXJhY3RlcnMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gZnJvbQorcmlnaHQgdG8gbGVmdC4KKworQmlkaXJlY3Rpb25hbGl0eSAob3IgYmlkaSBmb3Igc2hvcnQpIGlzIHdoYXQgVW5pY29kZSBvZmZlcnMgYXMgYSBmdWxsCitzb2x1dGlvbiB0byB0aGVzZSBsYW5ndWFnZXMuICBCaWRpIG9mZmVycyB0aGUgdXNlciB0aGUgYWJpbGl0eSB0byB2aWV3Citib3RoIHJpZ2h0LXRvLWxlZnQgYXMgd2VsbCBhcyBsZWZ0LXRvLXJpZ2h0IHRleHQgcHJvcGVybHkgYXQgdGhlIHNhbWUgdGltZQord2l0aGluIHRoZSBzYW1lIHdpbmRvdy4gIFZpbSBjdXJyZW50bHksIGR1ZSB0byBzaW1wbGljaXR5LCBkb2VzIG5vdCBvZmZlcgorYmlkaSBhbmQgaXMgbWVyZWx5IG9wdGluZyB0byBwcmVzZW50IGEgZnVuY3Rpb25hbCBtZWFucyB0byBkaXNwbGF5L2VudGVyL3VzZQorcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXMuICBBbiBvbGRlciBoeWJyaWQgc29sdXRpb24gaW4gd2hpY2ggZGlyZWN0aW9uIGlzCitlbmNvZGVkIGZvciBldmVyeSBjaGFyYWN0ZXIgKG9yIGdyb3VwIG9mIGNoYXJhY3RlcnMpIGFyZSBub3Qgc3VwcG9ydGVkIGVpdGhlcgorYXMgdGhpcyBraW5kIG9mIHN1cHBvcnQgaXMgb3V0IG9mIHRoZSBzY29wZSBvZiBhIHNpbXBsZSBhZGRpdGlvbiB0byBhbgorZXhpc3RpbmcgZWRpdG9yIChhbmQgaXRzIG5vdCBzYW5jdGlvbmVkIGJ5IFVuaWNvZGUgZWl0aGVyKS4KKworCitIaWdobGlnaHRzCistLS0tLS0tLS0tCitvICBFZGl0aW5nIGxlZnQtdG8tcmlnaHQgZmlsZXMgYXMgaW4gdGhlIG9yaWdpbmFsIFZpbSwgbm8gY2hhbmdlLgorCitvICBWaWV3aW5nIGFuZCBlZGl0aW5nIGZpbGVzIGluIHJpZ2h0LXRvLWxlZnQgd2luZG93cy4gIEZpbGUgb3JpZW50YXRpb24KKyAgIGlzIHBlciB3aW5kb3csIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHZpZXcgdGhlIHNhbWUgZmlsZSBpbiByaWdodC10by1sZWZ0CisgICBhbmQgbGVmdC10by1yaWdodCBtb2Rlcywgc2ltdWx0YW5lb3VzbHkuICAoVXNlZnVsIGZvciBlZGl0aW5nIG1peGVkIGZpbGVzCisgICBpbiB3aGljaCBib3RoIHJpZ2h0LXRvLWxlZnQgYW5kIGxlZnQtdG8tcmlnaHQgdGV4dCBleGlzdCkuCisKK28gIENvbXBhdGliaWxpdHkgdG8gdGhlIG9yaWdpbmFsIFZpbS4gIEFsbW9zdCBhbGwgZmVhdHVyZXMgd29yayBpbgorICAgcmlnaHQtdG8tbGVmdCBtb2RlIChzZWUgQnVncyBiZWxvdykuCisKK28gIEJhY2tpbmcgZnJvbSByZXZlcnNlIGluc2VydCBtb2RlIHRvIHRoZSBjb3JyZWN0IHBsYWNlIGluIHRoZSBmaWxlCisgICAoaWYgcG9zc2libGUpLgorCitvICBObyBzcGVjaWFsIHRlcm1pbmFsIHdpdGggcmlnaHQtdG8tbGVmdCBjYXBhYmlsaXRpZXMgaXMgcmVxdWlyZWQuICBUaGUKKyAgIHJpZ2h0LXRvLWxlZnQgY2hhbmdlcyBhcmUgY29tcGxldGVseSBoYXJkd2FyZSBpbmRlcGVuZGVudC4KKworbyAgTWFueSBsYW5ndWFnZXMgdXNlIGFuZCByZXF1aXJlIHJpZ2h0LXRvLWxlZnQgc3VwcG9ydC4gIFRoZXNlIGxhbmd1YWdlcworICAgY2FuIHF1aXRlIGVhc2lseSBiZSBzdXBwb3J0ZWQgZ2l2ZW4gdGhlIGluY2x1c2lvbiBvZiB0aGVpciByZXF1aXJlZAorICAga2V5Ym9hcmQgbWFwcGluZ3MgYW5kIHNvbWUgcG9zc2libGUgbWlub3IgY29kZSBjaGFuZ2UuICBTb21lIG9mIHRoZQorICAgY3VycmVudCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGluY2x1ZGUgLSB8YXJhYmljLnR4dHwsIHxmYXJzaS50eHR8IGFuZAorICAgfGhlYnJldy50eHR8LgorCisKK09mIEludGVyZXN0Li4uCistLS0tLS0tLS0tLS0tLQorCitvICBJbnZvY2F0aW9ucworICAgLS0tLS0tLS0tLS0KKyAgICsgJ3JpZ2h0bGVmdCcgKCdybCcpIHNldHMgd2luZG93IG9yaWVudGF0aW9uIHRvIHJpZ2h0LXRvLWxlZnQuCisgICArICdkZWxjb21iaW5lJyAoJ2RlY28nKSwgYm9vbGVhbiwgaWYgZWRpdGluZyBVVEYtOCBlbmNvZGVkIGxhbmd1YWdlcywKKyAgICAgYWxsb3dzIG9uZSB0byByZW1vdmUgYSBjb21wb3NpbmcgY2hhcmFjdGVyIHdoaWNoIGdldHMgc3VwZXJpbXBvc2VkCisgICAgIG9uIHRob3NlIHRoYXQgcHJvY2VlZGVkIHRoZW0gKHNvbWUgbGFuZ3VhZ2VzIHJlcXVpcmUgdGhpcykuCisgICArICdyaWdodGxlZnRjbWQnICgncmxjJykgc2V0cyB0aGUgY29tbWFuZC1saW5lIHdpdGhpbiBjZXJ0YWluIG1vZGVzCisgICAgIChzdWNoIGFzIHNlYXJjaCkgdG8gYmUgdXRpbGl6ZWQgaW4gcmlnaHQtdG8tbGVmdCBvcmllbnRhdGlvbiBhcyB3ZWxsLgorCitvICBUeXBpbmcgYmFja3dhcmRzCQkJCQkqaW5zLXJldmVyc2UqCisgICAtLS0tLS0tLS0tLS0tLS0tCisgICBJbiBsaWV1IG9mIHVzaW5nIGZ1bGwtZmxlZGdlZCB0aGUgJ3JpZ2h0bGVmdCcgb3B0aW9uLCBvbmUgY2FuIG9wdCBmb3IKKyAgIHJldmVyc2UgaW5zZXJ0aW9uLiAgV2hlbiB0aGUgJ3JldmlucycgKHJldmVyc2UgaW5zZXJ0KSBvcHRpb24gaXMgc2V0LAorICAgaW5zZXJ0aW5nIGhhcHBlbnMgYmFja3dhcmRzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB0eXBlIHJpZ2h0LXRvLWxlZnQKKyAgIHRleHQuICBXaGVuIGluc2VydGluZyBjaGFyYWN0ZXJzIHRoZSBjdXJzb3IgaXMgbm90IG1vdmVkIGFuZCB0aGUgdGV4dAorICAgbW92ZXMgcmlnaHR3YXJkcy4gIEEgPEJTPiBkZWxldGVzIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KKyAgIENUUkwtVyBhbmQgQ1RSTC1VIGFsc28gd29yayBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiAgPEJTPiwgQ1RSTC1XCisgICBhbmQgQ1RSTC1VIGRvIG5vdCBzdG9wIGF0IHRoZSBzdGFydCBvZiBpbnNlcnQgb3IgZW5kIG9mIGxpbmUsIG5vIG1hdHRlcgorICAgaG93IHRoZSAnYmFja3NwYWNlJyBvcHRpb24gaXMgc2V0LgorCisgICBUaGVyZSBpcyBubyByZXZlcnNlIHJlcGxhY2UgbW9kZSAoeWV0KS4KKworICAgSWYgdGhlICdzaG93bW9kZScgb3B0aW9uIGlzIHNldCwgIi0tIFJFVkVSU0UgSU5TRVJUIC0tIiB3aWxsIGJlIHNob3duCisgICBpbiB0aGUgc3RhdHVzIGxpbmUgd2hlbiByZXZlcnNlIEluc2VydCBtb2RlIGlzIGFjdGl2ZS4KKworbyAgUGFzdGluZyB3aGVuIGluIGEgcmlnaHRsZWZ0IHdpbmRvdworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgV2hlbiBjdXR0aW5nIHRleHQgd2l0aCB0aGUgbW91c2UgYW5kIHBhc3RpbmcgaXQgaW4gYSByaWdodGxlZnQgd2luZG93CisgICB0aGUgdGV4dCB3aWxsIGJlIHJldmVyc2VkLCBiZWNhdXNlIHRoZSBjaGFyYWN0ZXJzIGNvbWUgZnJvbSB0aGUgY3V0IGJ1ZmZlcgorICAgZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQsIHdoaWxlIGluc2VydGVkIGluIHRoZSBmaWxlIGZyb20gdGhlIHJpZ2h0IHRvCisgICB0aGUgbGVmdC4gICBJbiBvcmRlciB0byBhdm9pZCBpdCwgdG9nZ2xlICdyZXZpbnMnIGJlZm9yZSBwYXN0aW5nLgorCisKK0J1Z3MKKy0tLS0KK28gIERvZXMgbm90IGhhbmRsZSBDVFJMLUEgYW5kIENUUkwtWCBjb21tYW5kcyAoYWRkIGFuZCBzdWJ0cmFjdCkgY29ycmVjdGx5CisgICB3aGVuIGluIHJpZ2h0bGVmdCB3aW5kb3cuCisKK28gIERvZXMgbm90IHN1cHBvcnQgcmV2ZXJzZSBpbnNlcnQgYW5kIHJpZ2h0bGVmdCBtb2RlcyBvbiB0aGUgY29tbWFuZC1saW5lLgorICAgSG93ZXZlciwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZWRpdG9yIGlzIG5vdCByZWR1Y2VkLCBiZWNhdXNlIGl0IGlzCisgICBwb3NzaWJsZSB0byBlbnRlciBtYXBwaW5ncywgYWJicmV2aWF0aW9ucyBhbmQgc2VhcmNoZXMgdHlwZWQgZnJvbSB0aGUKKyAgIGxlZnQgdG8gdGhlIHJpZ2h0IG9uIHRoZSBjb21tYW5kLWxpbmUuCisKK28gIFNvbWV3aGF0IHNsb3dlciBpbiByaWdodC10by1sZWZ0IG1vZGUsIGJlY2F1c2UgcmlnaHQtdG8tbGVmdCBtb3Rpb24gaXMKKyAgIGVtdWxhdGVkIGluc2lkZSBWaW0sIG5vdCBieSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwuCisKK28gIFdoZW4gdGhlIEF0aGVuYSBHVUkgaXMgdXNlZCwgdGhlIGJvdHRvbSBzY3JvbGxiYXIgd29ya3MgaW4gdGhlIHdyb25nCisgICBkaXJlY3Rpb24uICBUaGlzIGlzIGRpZmZpY3VsdCB0byBmaXguCisKK28gIFdoZW4gYm90aCAncmlnaHRsZWZ0JyBhbmQgJ3JldmlucycgYXJlIG9uOiAndGV4dHdpZHRoJyBkb2VzIG5vdCB3b3JrLgorICAgTGluZXMgZG8gbm90IHdyYXAgYXQgYWxsOyB5b3UganVzdCBnZXQgYSBzaW5nbGUsIGxvbmcgbGluZS4KKworbyAgVGhlcmUgaXMgbm8gZnVsbCBiaWRpcmVjdGlvbmFsaXR5IChiaWRpKSBzdXBwb3J0LgorCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9ydXNzaWFuLnR4dCBiL3J1bnRpbWUvZG9jL3J1c3NpYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OGY1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy9ydXNzaWFuLnR4dApAQCAtMCwwICsxLDgzIEBACisqcnVzc2lhbi50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA5CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IFZhc3NpbHkgUmFnb3NpbgorCisKK1J1c3NpYW4gbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIGFuZCBzdXBwb3J0IGluIFZpbQkgICAqcnVzc2lhbiogKlJ1c3NpYW4qCisKKzEuIEludHJvZHVjdGlvbgkJCQkgIHxydXNzaWFuLWludHJvfAorMi4gUnVzc2lhbiBrZXltYXBzCQkJICB8cnVzc2lhbi1rZXltYXB8CiszLiBMb2NhbGl6YXRpb24JCQkJICB8cnVzc2lhbi1sMThufAorNC4gS25vd24gaXNzdWVzCQkJCSAgfHJ1c3NpYW4taXNzdWVzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJbnRyb2R1Y3Rpb24JCQkJCQkJKnJ1c3NpYW4taW50cm8qCisKK1J1c3NpYW4gbGFuZ3VhZ2UgaXMgc3VwcG9ydGVkIHBlcmZlY3RseSB3ZWxsIGluIFZpbS4gWW91IGNhbiB0eXBlIGFuZCB2aWV3CitSdXNzaWFuIHRleHQganVzdCBhcyBhbnkgb3RoZXIsIHdpdGhvdXQgdGhlIG5lZWQgdG8gdHdlYWsgdGhlIHNldHRpbmdzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBSdXNzaWFuIGtleW1hcHMJCQkJCSAgICAgICAqcnVzc2lhbi1rZXltYXAqCisKK1RvIHN3aXRjaCBiZXR3ZWVuIGxhbmd1YWdlcyB5b3UgY2FuIHVzZSB5b3VyIHN5c3RlbSBuYXRpdmUga2V5Ym9hcmQgc3dpdGNoZXIsCitvciB1c2Ugb25lIG9mIHRoZSBSdXNzaWFuIGtleW1hcHMsIGluY2x1ZGVkIGluIHRoZSBWaW0gZGlzdHJpYnV0aW9uLiAgRm9yCitleGFtcGxlLAorPgorICAgIDpzZXQga2V5bWFwPXJ1c3NpYW4tamN1a2Vud2luCis8CitJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4gbGFuZ3VhZ2VzIGV2ZW4gaWYgeW91IGRvIG5vdCBoYXZlCitzeXN0ZW0gUnVzc2lhbiBrZXlib2FyZCBvciBpbmRlcGVuZGVudGx5IGZyb20gYSBzeXN0ZW0td2lkZSBrZXlib2FyZCBzZXR0aW5ncy4KK1NlZSAna2V5bWFwJy4gWW91IGNhbiBhbHNvIG1hcCBhIGtleSB0byBzd2l0Y2ggYmV0d2VlbiBrZXlib2FyZHMsIGlmIHlvdQorY2hvb3NlIHRoZSBsYXR0ZXIgb3B0aW9uLiBTZWUgfDptYXB8LgorCitGb3IgeW91ciBjb252ZW5pZW5jZSwgdG8gYXZvaWQgc3dpdGNoaW5nIGJldHdlZW4ga2V5Ym9hcmRzLCB3aGVuIHlvdSBuZWVkIHRvCitlbnRlciBOb3JtYWwgbW9kZSBjb21tYW5kLCB5b3UgY2FuIGFsc28gc2V0ICdsYW5nbWFwJyBvcHRpb246Cis+CisgICAgOnNldCBsYW5nbWFwPdCk0JjQodCS0KPQkNCf0KDQqNCe0JvQlNCs0KLQqdCX0JnQmtCr0JXQk9Cc0KbQp9Cd0K87QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVosCisgICAg0YTQuNGB0LLRg9Cw0L/RgNGI0L7Qu9C00YzRgtGJ0LfQudC60YvQtdCz0LzRhtGH0L3RjzthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorCitUaGlzIGlzIGluIHV0Zi04LCB5b3UgY2Fubm90IHJlYWQgdGhpcyBpZiB5b3VyICdlbmNvZGluZycgaXMgbm90IHV0Zi04LgorWW91IGhhdmUgdG8gdHlwZSB0aGlzIGNvbW1hbmQgaW4gb25lIGxpbmUsIGl0IGlzIHdyYXBwZWQgZm9yIHRoZSBzYWtlIG9mCityZWFkYWJpbGl0eS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gTG9jYWxpemF0aW9uCQkJCQkJCSAqcnVzc2lhbi1sMThuKgorCitJZiB5b3Ugd2lzaCB0byB1c2UgbWVzc2FnZXMsIGhlbHAgZmlsZXMsIG1lbnVzIGFuZCBvdGhlciBpdGVtcyB0cmFuc2xhdGVkIHRvCitSdXNzaWFuLCB5b3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgdGhlIFJ1VmltIExhbmd1YWdlIFBhY2ssIGF2YWlsYWJsZSBpbgorZGlmZmVyZW50IGNvZGVwYWdlcyBmcm9tCisKKyAgICBodHRwOi8vd3d3LnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ydXZpbS8KKworTWFrZSBzdXJlIHRoYXQgeW91ciBWaW0gaXMgYXQgbGVhc3QgNi4yLjUwNiBhbmQgdXNlIHJ1dmltIDAuNSBvciBsYXRlciBmb3IKK2F1dG9tYXRpYyBpbnN0YWxscy4gVmltIGFsc28gbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCB8K2dldHRleHR8IGZlYXR1cmUgZm9yCit1c2VyIGludGVyZmFjZSBpdGVtcyB0cmFuc2xhdGlvbnMgdG8gd29yay4KKworQWZ0ZXIgZG93bmxvYWRpbmcgYW4gYXJjaGl2ZSBmcm9tIFJ1VmltIHByb2plY3QsIHVucGFjayBpdCBpbnRvIHlvdXIKKyRWSU1SVU5USU1FIGRpcmVjdG9yeS4gV2UgcmVjb21tZW5kIHVzaW5nIFVURi04IGFyY2hpdmUsIGlmIHlvdXIgdmVyc2lvbiBvZgorVmltIGlzIGNvbXBpbGVkIHdpdGggfCttdWx0aV9ieXRlfCBmZWF0dXJlIGVuYWJsZWQuCisKK0luIG9yZGVyIHRvIHVzZSB0aGUgUnVzc2lhbiBkb2N1bWVudGF0aW9uLCBtYWtlIHN1cmUgeW91IGhhdmUgc2V0IHRoZQorJ2hlbHBsYW5nJyBvcHRpb24gdG8gInJ1Ii4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gS25vd24gaXNzdWVzCQkJCQkJICAgICAgICpydXNzaWFuLWlzc3VlcyoKKworLS0gSWYgeW91IGFyZSB1c2luZyBSdXNzaWFuIG1lc3NhZ2UgdHJhbnNsYXRpb25zIGluIFdpbjMyIGNvbnNvbGUsIHRoZW4KKyAgIHlvdSBtYXkgc2VlIHRoZSBvdXRwdXQgcHJvZHVjZWQgYnkgInZpbSAtLWhlbHAiLCAidmltIC0tdmVyc2lvbiIgY29tbWFuZHMKKyAgIGFuZCBXaW4zMiBjb25zb2xlIHdpbmRvdyB0aXRsZSBhcHBlYXJpbmcgaW4gYSB3cm9uZyBjb2RlcGFnZS4gVGhpcyBwcm9ibGVtCisgICBpcyByZWxhdGVkIHRvIGEgYnVnIGluIEdOVSBnZXR0ZXh0IGxpYnJhcnkgYW5kIG1heSBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlCisgICByZWxlYXNlcyBvZiBnZXR0ZXh0LgorCistLSBXaGVuIHVzaW5nIHRoZSBXaW4zMiBjb25zb2xlIHZlcnNpb24gb2YgVmltIHlvdSBtYXkgZXhwZXJpZW5jZSBhIHByb2JsZW0KKyAgIHdpdGggbWFueSBDeXJpbGxpYyBnbHlwaHMgYmVpbmcgcmVwbGFjZWQgYnkgd2hpdGVzcGFjZXMgZm9yIHNvbWUgdW5rbm93bgorICAgcmVhc29uLiAgU2VyZ2V5IEtob3JldiBzdWdnZXN0ZWQgYSByZWdpc3RyeSBoYWNrIHRvIGF2b2lkIHRoaXM6CisKKyAgIFJFR0VESVQ0CisKKyAgIFtIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcTmxzXENvZGVQYWdlXQorICAgIjEyNTIiPSJjXzEyNTEubmxzIgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2Mvc2Nyb2xsLnR4dCBiL3J1bnRpbWUvZG9jL3Njcm9sbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4NTUyZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Njcm9sbC50eHQKQEAgLTAsMCArMSwzMDMgQEAKKypzY3JvbGwudHh0KiAgICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitTY3JvbGxpbmcJCQkJCQkqc2Nyb2xsaW5nKgorCitUaGVzZSBjb21tYW5kcyBtb3ZlIHRoZSBjb250ZW50cyBvZiB0aGUgd2luZG93LiAgSWYgdGhlIGN1cnNvciBwb3NpdGlvbiBpcworbW92ZWQgb2ZmIG9mIHRoZSB3aW5kb3csIHRoZSBjdXJzb3IgaXMgbW92ZWQgb250byB0aGUgd2luZG93ICh3aXRoCisnc2Nyb2xsb2ZmJyBzY3JlZW4gbGluZXMgYXJvdW5kIGl0KS4gIEEgcGFnZSBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZQord2luZG93IG1pbnVzIHR3by4gIFRoZSBtbmVtb25pY3MgZm9yIHRoZXNlIGNvbW1hbmRzIG1heSBiZSBhIGJpdCBjb25mdXNpbmcuCitSZW1lbWJlciB0aGF0IHRoZSBjb21tYW5kcyByZWZlciB0byBtb3ZpbmcgdGhlIHdpbmRvdyAodGhlIHBhcnQgb2YgdGhlIGJ1ZmZlcgordGhhdCB5b3Ugc2VlKSB1cHdhcmRzIG9yIGRvd253YXJkcyBpbiB0aGUgYnVmZmVyLiAgV2hlbiB0aGUgd2luZG93IG1vdmVzCit1cHdhcmRzIGluIHRoZSBidWZmZXIsIHRoZSB0ZXh0IGluIHRoZSB3aW5kb3cgbW92ZXMgZG93bndhcmRzIG9uIHlvdXIgc2NyZWVuLgorCitTZWUgc2VjdGlvbiB8MDMuN3wgb2YgdGhlIHVzZXIgbWFudWFsIGZvciBhbiBpbnRyb2R1Y3Rpb24uCisKKzEuIFNjcm9sbGluZyBkb3dud2FyZHMJCXxzY3JvbGwtZG93bnwKKzIuIFNjcm9sbGluZyB1cHdhcmRzCQl8c2Nyb2xsLXVwfAorMy4gU2Nyb2xsaW5nIHJlbGF0aXZlIHRvIGN1cnNvcgl8c2Nyb2xsLWN1cnNvcnwKKzQuIFNjcm9sbGluZyBob3Jpem9udGFsbHkJfHNjcm9sbC1ob3Jpem9udGFsfAorNS4gU2Nyb2xsaW5nIHN5bmNocm9ub3VzbHkJfHNjcm9sbC1iaW5kaW5nfAorNi4gU2Nyb2xsaW5nIHdpdGggYSBtb3VzZSB3aGVlbCB8c2Nyb2xsLW1vdXNlLXdoZWVsfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFNjcm9sbGluZyBkb3dud2FyZHMJCQkJCSpzY3JvbGwtZG93bioKKworVGhlIGZvbGxvd2luZyBjb21tYW5kcyBtb3ZlIHRoZSBlZGl0IHdpbmRvdyAodGhlIHBhcnQgb2YgdGhlIGJ1ZmZlciB0aGF0IHlvdQorc2VlKSBkb3dud2FyZHMgKHRoaXMgbWVhbnMgdGhhdCBtb3JlIGxpbmVzIGRvd253YXJkcyBpbiB0aGUgdGV4dCBidWZmZXIgY2FuIGJlCitzZWVuKToKKworCQkJCQkJCSpDVFJMLUUqCitDVFJMLUUJCQlTY3JvbGwgd2luZG93IFtjb3VudF0gbGluZXMgZG93bndhcmRzIGluIHRoZSBidWZmZXIuCisJCQlNbmVtb25pYzogRXh0cmEgbGluZXMuCisKKwkJCQkJCQkqQ1RSTC1EKgorQ1RSTC1ECQkJU2Nyb2xsIHdpbmRvdyBEb3dud2FyZHMgaW4gdGhlIGJ1ZmZlci4gIFRoZSBudW1iZXIgb2YKKwkJCWxpbmVzIGNvbWVzIGZyb20gdGhlICdzY3JvbGwnIG9wdGlvbiAoZGVmYXVsdDogaGFsZiBhCisJCQlzY3JlZW4pLiAgSWYgW2NvdW50XSBnaXZlbiwgZmlyc3Qgc2V0ICdzY3JvbGwnIG9wdGlvbgorCQkJdG8gW2NvdW50XS4gIFRoZSBjdXJzb3IgaXMgbW92ZWQgdGhlIHNhbWUgbnVtYmVyIG9mCisJCQlsaW5lcyBkb3duIGluIHRoZSBmaWxlIChpZiBwb3NzaWJsZTsgd2hlbiBsaW5lcyB3cmFwCisJCQlhbmQgd2hlbiBoaXR0aW5nIHRoZSBlbmQgb2YgdGhlIGZpbGUgdGhlcmUgbWF5IGJlIGEKKwkJCWRpZmZlcmVuY2UpLiAgV2hlbiB0aGUgY3Vyc29yIGlzIG9uIHRoZSBsYXN0IGxpbmUgb2YKKwkJCXRoZSBidWZmZXIgbm90aGluZyBoYXBwZW5zIGFuZCBhIGJlZXAgaXMgcHJvZHVjZWQuCisJCQlTZWUgYWxzbyAnc3RhcnRvZmxpbmUnIG9wdGlvbi4KKwkJCXtkaWZmZXJlbmNlIGZyb20gdmk6IFZpbSBzY3JvbGxzICdzY3JvbGwnIHNjcmVlbgorCQkJbGluZXMsIGluc3RlYWQgb2YgZmlsZSBsaW5lczsgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4KKwkJCWxpbmVzIHdyYXB9CisKKzxTLURvd24+CW9yCQkJCSo8Uy1Eb3duPiogKjxrUGFnZURvd24+KgorPFBhZ2VEb3duPglvcgkJCQkqPFBhZ2VEb3duPiogKkNUUkwtRioKK0NUUkwtRgkJCVNjcm9sbCB3aW5kb3cgW2NvdW50XSBwYWdlcyBGb3J3YXJkcyAoZG93bndhcmRzKSBpbgorCQkJdGhlIGJ1ZmZlci4gIFNlZSBhbHNvICdzdGFydG9mbGluZScgb3B0aW9uLgorCisJCQkJCQkJKnorKgoreisJCQlXaXRob3V0IFtjb3VudF06IFJlZHJhdyB3aXRoIHRoZSBsaW5lIGp1c3QgYmVsb3cgdGhlCisJCQl3aW5kb3cgYXQgdGhlIHRvcCBvZiB0aGUgd2luZG93LiAgUHV0IHRoZSBjdXJzb3IgaW4KKwkJCXRoYXQgbGluZSwgYXQgdGhlIGZpcnN0IG5vbi1ibGFuayBpbiB0aGUgbGluZS4KKwkJCVdpdGggW2NvdW50XToganVzdCBsaWtlICJ6PENSPiIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gU2Nyb2xsaW5nIHVwd2FyZHMJCQkJCSpzY3JvbGwtdXAqCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgbW92ZSB0aGUgZWRpdCB3aW5kb3cgKHRoZSBwYXJ0IG9mIHRoZSBidWZmZXIgdGhhdCB5b3UKK3NlZSkgdXB3YXJkcyAodGhpcyBtZWFucyB0aGF0IG1vcmUgbGluZXMgdXB3YXJkcyBpbiB0aGUgdGV4dCBidWZmZXIgY2FuIGJlCitzZWVuKToKKworCQkJCQkJCSpDVFJMLVkqCitDVFJMLVkJCQlTY3JvbGwgd2luZG93IFtjb3VudF0gbGluZXMgdXB3YXJkcyBpbiB0aGUgYnVmZmVyLgorCQkJTm90ZTogV2hlbiB1c2luZyB0aGUgTVMtV2luZG93cyBrZXkgYmluZGluZ3MgQ1RSTC1ZIGlzCisJCQlyZW1hcHBlZCB0byByZWRvLgorCisJCQkJCQkJKkNUUkwtVSoKK0NUUkwtVQkJCVNjcm9sbCB3aW5kb3cgVXB3YXJkcyBpbiB0aGUgYnVmZmVyLiAgVGhlIG51bWJlciBvZgorCQkJbGluZXMgY29tZXMgZnJvbSB0aGUgJ3Njcm9sbCcgb3B0aW9uIChkZWZhdWx0OiBoYWxmIGEKKwkJCXNjcmVlbikuICBJZiBbY291bnRdIGdpdmVuLCBmaXJzdCBzZXQgdGhlICdzY3JvbGwnCisJCQlvcHRpb24gdG8gW2NvdW50XS4gIFRoZSBjdXJzb3IgaXMgbW92ZWQgdGhlIHNhbWUKKwkJCW51bWJlciBvZiBsaW5lcyB1cCBpbiB0aGUgZmlsZSAoaWYgcG9zc2libGU7IHdoZW4KKwkJCWxpbmVzIHdyYXAgYW5kIHdoZW4gaGl0dGluZyB0aGUgZW5kIG9mIHRoZSBmaWxlIHRoZXJlCisJCQltYXkgYmUgYSBkaWZmZXJlbmNlKS4gIFdoZW4gdGhlIGN1cnNvciBpcyBvbiB0aGUgZmlyc3QKKwkJCWxpbmUgb2YgdGhlIGJ1ZmZlciBub3RoaW5nIGhhcHBlbnMgYW5kIGEgYmVlcCBpcworCQkJcHJvZHVjZWQuICBTZWUgYWxzbyAnc3RhcnRvZmxpbmUnIG9wdGlvbi4KKwkJCXtkaWZmZXJlbmNlIGZyb20gdmk6IFZpbSBzY3JvbGxzICdzY3JvbGwnIHNjcmVlbgorCQkJbGluZXMsIGluc3RlYWQgb2YgZmlsZSBsaW5lczsgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4KKwkJCWxpbmVzIHdyYXB9CisKKzxTLVVwPgkJb3IJCQkJCSo8Uy1VcD4qICo8a1BhZ2VVcD4qCis8UGFnZVVwPglvcgkJCQkJKjxQYWdlVXA+KiAqQ1RSTC1CKgorQ1RSTC1CCQkJU2Nyb2xsIHdpbmRvdyBbY291bnRdIHBhZ2VzIEJhY2t3YXJkcyAodXB3YXJkcykgaW4gdGhlCisJCQlidWZmZXIuICBTZWUgYWxzbyAnc3RhcnRvZmxpbmUnIG9wdGlvbi4KKworCQkJCQkJCSp6XioKK3peCQkJV2l0aG91dCBbY291bnRdOiBSZWRyYXcgd2l0aCB0aGUgbGluZSBqdXN0IGFib3ZlIHRoZQorCQkJd2luZG93IGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdy4gIFB1dCB0aGUgY3Vyc29yIGluCisJCQl0aGF0IGxpbmUsIGF0IHRoZSBmaXJzdCBub24tYmxhbmsgaW4gdGhlIGxpbmUuCisJCQlXaXRoIFtjb3VudF06IEZpcnN0IHNjcm9sbCB0aGUgdGV4dCB0byBwdXQgdGhlIFtjb3VudF0KKwkJCWxpbmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93LCB0aGVuIHJlZHJhdyB3aXRoIHRoZQorCQkJbGluZSB3aGljaCBpcyBub3cgYXQgdGhlIHRvcCBvZiB0aGUgd2luZG93IGF0IHRoZQorCQkJYm90dG9tIG9mIHRoZSB3aW5kb3cuICBQdXQgdGhlIGN1cnNvciBpbiB0aGF0IGxpbmUsIGF0CisJCQl0aGUgZmlyc3Qgbm9uLWJsYW5rIGluIHRoZSBsaW5lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFNjcm9sbGluZyByZWxhdGl2ZSB0byBjdXJzb3IJCQkJKnNjcm9sbC1jdXJzb3IqCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgcmVwb3NpdGlvbiB0aGUgZWRpdCB3aW5kb3cgKHRoZSBwYXJ0IG9mIHRoZSBidWZmZXIgdGhhdAoreW91IHNlZSkgd2hpbGUga2VlcGluZyB0aGUgY3Vyc29yIG9uIHRoZSBzYW1lIGxpbmU6CisKKwkJCQkJCQkqejxDUj4qCit6PENSPgkJCVJlZHJhdywgbGluZSBbY291bnRdIGF0IHRvcCBvZiB3aW5kb3cgKGRlZmF1bHQKKwkJCWN1cnNvciBsaW5lKS4gIFB1dCBjdXJzb3IgYXQgZmlyc3Qgbm9uLWJsYW5rIGluIHRoZQorCQkJbGluZS4KKworCQkJCQkJCSp6dCoKK3p0CQkJTGlrZSAiejxDUj4iLCBidXQgbGVhdmUgdGhlIGN1cnNvciBpbiB0aGUgc2FtZQorCQkJY29sdW1uLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp6TjxDUj4qCit6e2hlaWdodH08Q1I+CQlSZWRyYXcsIG1ha2Ugd2luZG93IHtoZWlnaHR9IGxpbmVzIHRhbGwuICBUaGlzIGlzCisJCQl1c2VmdWwgdG8gbWFrZSB0aGUgbnVtYmVyIG9mIGxpbmVzIHNtYWxsIHdoZW4gc2NyZWVuCisJCQl1cGRhdGluZyBpcyB2ZXJ5IHNsb3cuICBDYW5ub3QgbWFrZSB0aGUgaGVpZ2h0IG1vcmUKKwkJCXRoYW4gdGhlIHBoeXNpY2FsIHNjcmVlbiBoZWlnaHQuCisKKwkJCQkJCQkqei4qCit6LgkJCVJlZHJhdywgbGluZSBbY291bnRdIGF0IGNlbnRlciBvZiB3aW5kb3cgKGRlZmF1bHQKKwkJCWN1cnNvciBsaW5lKS4gIFB1dCBjdXJzb3IgYXQgZmlyc3Qgbm9uLWJsYW5rIGluIHRoZQorCQkJbGluZS4KKworCQkJCQkJCSp6eioKK3p6CQkJTGlrZSAiei4iLCBidXQgbGVhdmUgdGhlIGN1cnNvciBpbiB0aGUgc2FtZSBjb2x1bW4uCisJCQlDYXJlZnVsOiBJZiBjYXBzLWxvY2sgaXMgb24sIHRoaXMgY29tbWFuZHMgYmVjb21lcworCQkJIlpaIjogd3JpdGUgYnVmZmVyIGFuZCBleGl0ISAge25vdCBpbiBWaX0KKworCQkJCQkJCSp6LSoKK3otCQkJUmVkcmF3LCBsaW5lIFtjb3VudF0gYXQgYm90dG9tIG9mIHdpbmRvdyAoZGVmYXVsdAorCQkJY3Vyc29yIGxpbmUpLiAgUHV0IGN1cnNvciBhdCBmaXJzdCBub24tYmxhbmsgaW4gdGhlCisJCQlsaW5lLgorCisJCQkJCQkJKnpiKgoremIJCQlMaWtlICJ6LSIsIGJ1dCBsZWF2ZSB0aGUgY3Vyc29yIGluIHRoZSBzYW1lIGNvbHVtbi4KKwkJCXtub3QgaW4gVml9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gU2Nyb2xsaW5nIGhvcml6b250YWxseQkJCQkqc2Nyb2xsLWhvcml6b250YWwqCisKK0ZvciB0aGUgZm9sbG93aW5nIGZvdXIgY29tbWFuZHMgdGhlIGN1cnNvciBmb2xsb3dzIHRoZSBzY3JlZW4uICBJZiB0aGUKK2NoYXJhY3RlciB0aGF0IHRoZSBjdXJzb3IgaXMgb24gaXMgbW92ZWQgb2ZmIHRoZSBzY3JlZW4sIHRoZSBjdXJzb3IgaXMgbW92ZWQKK3RvIHRoZSBjbG9zZXN0IGNoYXJhY3RlciB0aGF0IGlzIG9uIHRoZSBzY3JlZW4uICBUaGUgdmFsdWUgb2YgJ3NpZGVzY3JvbGwnIGlzCitub3QgdXNlZC4KKworejxSaWdodD4gICAgb3IJCQkJCQkqemwqICp6PFJpZ2h0PioKK3psCQkJU2Nyb2xsIHRoZSBzY3JlZW4gW2NvdW50XSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0LgorCQkJVGhpcyBvbmx5IHdvcmtzIHdoZW4gJ3dyYXAnIGlzIG9mZi4gIHtub3QgaW4gVml9CisKK3o8TGVmdD4gICAgICBvcgkJCQkJCSp6aCogKno8TGVmdD4qCit6aAkJCVNjcm9sbCB0aGUgc2NyZWVuIFtjb3VudF0gY2hhcmFjdGVycyB0byB0aGUgcmlnaHQuCisJCQlUaGlzIG9ubHkgd29ya3Mgd2hlbiAnd3JhcCcgaXMgb2ZmLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp6TCoKK3pMCQkJU2Nyb2xsIHRoZSBzY3JlZW4gaGFsZiBhIHNjcmVlbndpZHRoIHRvIHRoZSBsZWZ0LgorCQkJVGhpcyBvbmx5IHdvcmtzIHdoZW4gJ3dyYXAnIGlzIG9mZi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqekgqCit6SAkJCVNjcm9sbCB0aGUgc2NyZWVuIGhhbGYgYSBzY3JlZW53aWR0aCB0byB0aGUgcmlnaHQuCisJCQlUaGlzIG9ubHkgd29ya3Mgd2hlbiAnd3JhcCcgaXMgb2ZmLiAge25vdCBpbiBWaX0KKworRm9yIHRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIHRoZSBjdXJzb3IgaXMgbm90IG1vdmVkIGluIHRoZSB0ZXh0LCBvbmx5IHRoZQordGV4dCBzY3JvbGxzIG9uIHRoZSBzY3JlZW4uCisKKwkJCQkJCQkqenMqCit6cwkJCVNjcm9sbCB0aGUgc2NyZWVuIGhvcml6b250YWxseSB0byBwb3NpdGlvbiB0aGUgY3Vyc29yCisJCQlhdCB0aGUgc3RhcnQgKGxlZnQgc2lkZSkgb2YgdGhlIHNjcmVlbi4gIFRoaXMgb25seQorCQkJd29ya3Mgd2hlbiAnd3JhcCcgaXMgb2ZmLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSp6ZSoKK3plCQkJU2Nyb2xsIHRoZSBzY3JlZW4gaG9yaXpvbnRhbGx5IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IKKwkJCWF0IHRoZSBlbmQgKHJpZ2h0IHNpZGUpIG9mIHRoZSBzY3JlZW4uICBUaGlzIG9ubHkKKwkJCXdvcmtzIHdoZW4gJ3dyYXAnIGlzIG9mZi4gIHtub3QgaW4gVml9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gU2Nyb2xsaW5nIHN5bmNocm9ub3VzbHkJCQkJKnNjcm9sbC1iaW5kaW5nKgorCitPY2Nhc2lvbmFsbHksIGl0IGlzIGRlc2lyYWJsZSB0byBiaW5kIHR3byBvciBtb3JlIHdpbmRvd3MgdG9nZXRoZXIgc3VjaCB0aGF0Cit3aGVuIG9uZSB3aW5kb3cgaXMgc2Nyb2xsZWQsIHRoZSBvdGhlciB3aW5kb3dzIGFyZSBzY3JvbGxlZCBhbHNvLiAgSW4gVmltLAord2luZG93cyBjYW4gYmUgZ2l2ZW4gdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nIHRoZSAod2luZG93LXNwZWNpZmljKQorJ3Njcm9sbGJpbmQnIG9wdGlvbi4gIFdoZW4gYSB3aW5kb3cgdGhhdCBoYXMgJ3Njcm9sbGJpbmQnIHNldCBpcyBzY3JvbGxlZCwgYWxsCitvdGhlciAnc2Nyb2xsYmluZCcgd2luZG93cyBhcmUgc2Nyb2xsZWQgdGhlIHNhbWUgYW1vdW50LCBpZiBwb3NzaWJsZS4gIFRoZQorYmVoYXZpb3Igb2YgJ3Njcm9sbGJpbmQnIGNhbiBiZSBtb2RpZmllZCBieSB0aGUgJ3Njcm9sbG9wdCcgb3B0aW9uLgorCitXaGVuIHVzaW5nIHRoZSBzY3JvbGxiYXJzLCB0aGUgYmluZGluZyBvbmx5IGhhcHBlbnMgd2hlbiBzY3JvbGxpbmcgdGhlIHdpbmRvdword2l0aCBmb2N1cyAod2hlcmUgdGhlIGN1cnNvciBpcykuICBZb3UgY2FuIHVzZSB0aGlzIHRvIGF2b2lkIHNjcm9sbC1iaW5kaW5nCitmb3IgYSBtb21lbnQgd2l0aG91dCByZXNldHRpbmcgb3B0aW9ucy4KKworV2hlbiBhIHdpbmRvdyBhbHNvIGhhcyB0aGUgJ2RpZmYnIG9wdGlvbiBzZXQsIHRoZSBzY3JvbGwtYmluZGluZyB1c2VzIHRoZQorZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIGJ1ZmZlcnMgdG8gc3luY2hyb25pemUgdGhlIHBvc2l0aW9uIHByZWNpc2VseS4KK090aGVyd2lzZSB0aGUgZm9sbG93aW5nIG1ldGhvZCBpcyB1c2VkLgorCisJCQkJCQkJKnNjcm9sbGJpbmQtcmVsYXRpdmUqCitFYWNoICdzY3JvbGxiaW5kJyB3aW5kb3cga2VlcHMgdHJhY2sgb2YgaXRzICJyZWxhdGl2ZSBvZmZzZXQsIiB3aGljaCBjYW4gYmUKK3Rob3VnaHQgb2YgYXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCB3aW5kb3cncyB2ZXJ0aWNhbCBzY3JvbGwKK3Bvc2l0aW9uIGFuZCB0aGUgb3RoZXIgd2luZG93J3MgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uLiAgV2hlbiBvbmUgb2YgdGhlCisnc2Nyb2xsYmluZCcgd2luZG93cyBpcyBhc2tlZCB0byB2ZXJ0aWNhbGx5IHNjcm9sbCBwYXN0IHRoZSBiZWdpbm5pbmcgb3IgZW5kCitsaW1pdCBvZiBpdHMgdGV4dCwgdGhlIHdpbmRvdyBubyBsb25nZXIgc2Nyb2xscywgYnV0IHJlbWVtYmVycyBob3cgZmFyIHBhc3QKK3RoZSBsaW1pdCBpdCB3aXNoZXMgdG8gYmUuICBUaGUgd2luZG93IGtlZXBzIHRoaXMgaW5mb3JtYXRpb24gc28gdGhhdCBpdCBjYW4KK21haW50YWluIHRoZSBzYW1lIHJlbGF0aXZlIG9mZnNldCwgcmVnYXJkbGVzcyBvZiBpdHMgYmVpbmcgYXNrZWQgdG8gc2Nyb2xsCitwYXN0IGl0cyBidWZmZXIncyBsaW1pdHMuCisKK0hvd2V2ZXIsIGlmIGEgJ3Njcm9sbGJpbmQnIHdpbmRvdyB0aGF0IGhhcyBhIHJlbGF0aXZlIG9mZnNldCB0aGF0IGlzIHBhc3QgaXRzCitidWZmZXIncyBsaW1pdHMgaXMgZ2l2ZW4gdGhlIGN1cnNvciBmb2N1cywgdGhlIG90aGVyICdzY3JvbGxiaW5kJyB3aW5kb3dzIG11c3QKK2p1bXAgdG8gYSBsb2NhdGlvbiB3aGVyZSB0aGUgY3VycmVudCB3aW5kb3cncyByZWxhdGl2ZSBvZmZzZXQgaXMgdmFsaWQuICBUaGlzCitiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSBjbGVhcmluZyB0aGUgJ2p1bXAnIGZsYWcgZnJvbSB0aGUgJ3Njcm9sbG9wdCcKK29wdGlvbi4KKworCQkJCQkJCSpzeW5jYmluZCogKjpzeW5jYmluZCoKKzpzeW5jYmluZAkJRm9yY2UgYWxsICdzY3JvbGxiaW5kJyB3aW5kb3dzIHRvIGhhdmUgdGhlIHNhbWUKKwkJCXJlbGF0aXZlIG9mZnNldC4gIEkuZS4sIHdoZW4gYW55IG9mIHRoZSAnc2Nyb2xsYmluZCcKKwkJCXdpbmRvd3MgaXMgc2Nyb2xsZWQgdG8gdGhlIHRvcCBvZiBpdHMgYnVmZmVyLCBhbGwgb2YKKwkJCXRoZSAnc2Nyb2xsYmluZCcgd2luZG93cyB3aWxsIGFsc28gYmUgYXQgdGhlIHRvcCBvZgorCQkJdGhlaXIgYnVmZmVycy4KKworCQkJCQkJCSpzY3JvbGxiaW5kLXF1aWNrYWRqKgorVGhlICdzY3JvbGxiaW5kJyBmbGFnIGlzIG1lYW5pbmdmdWwgd2hlbiB1c2luZyBrZXlib2FyZCBjb21tYW5kcyB0byB2ZXJ0aWNhbGx5CitzY3JvbGwgYSB3aW5kb3csIGFuZCBhbHNvIG1lYW5pbmdmdWwgd2hlbiB1c2luZyB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIG9mIHRoZQord2luZG93IHdoaWNoIGhhcyB0aGUgY3Vyc29yIGZvY3VzLiAgSG93ZXZlciwgd2hlbiB1c2luZyB0aGUgdmVydGljYWwgc2Nyb2xsYmFyCitvZiBhIHdpbmRvdyB3aGljaCBkb2Vzbid0IGhhdmUgdGhlIGN1cnNvciBmb2N1cywgJ3Njcm9sbGJpbmQnIGlzIGlnbm9yZWQuCitUaGlzIGFsbG93cyBxdWljayBhZGp1c3RtZW50IG9mIHRoZSByZWxhdGl2ZSBvZmZzZXQgb2YgJ3Njcm9sbGJpbmQnIHdpbmRvd3MuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gU2Nyb2xsaW5nIHdpdGggYSBtb3VzZSB3aGVlbAkJCQkqc2Nyb2xsLW1vdXNlLXdoZWVsKgorCitXaGVuIHlvdXIgbW91c2UgaGFzIGEgc2Nyb2xsIHdoZWVsLCBpdCBzaG91bGQgd29yayB3aXRoIFZpbSBpbiB0aGUgR1VJLiAgSG93CitpdCB3b3JrcyBkZXBlbmRzIG9uIHlvdXIgc3lzdGVtLiAgSXQgbWlnaHQgYWxzbyB3b3JrIGluIGFuIHh0ZXJtCit8eHRlcm0tbW91c2Utd2hlZWx8LgorCitGb3IgdGhlIFdpbjMyIEdVSSB0aGUgc2Nyb2xsIGFjdGlvbiBpcyBoYXJkIGNvZGVkLiAgSXQgd29ya3MganVzdCBsaWtlCitkcmFnZ2luZyB0aGUgc2Nyb2xsYmFyIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gIEhvdyBtYW55IGxpbmVzIGFyZSBzY3JvbGxlZAorZGVwZW5kcyBvbiB5b3VyIG1vdXNlIGRyaXZlci4gIElmIHRoZSBzY3JvbGwgYWN0aW9uIGNhdXNlcyBpbnB1dCBmb2N1cworcHJvYmxlbXMsIHNlZSB8aW50ZWxsaW1vdXNlLXdoZWVsLXByb2JsZW1zfC4KKworRm9yIHRoZSBYMTEgR1VJcyAoTW90aWYsIEF0aGVuYSBhbmQgR1RLKSBzY3JvbGxpbmcgdGhlIHdoZWVsIGdlbmVyYXRlcyBrZXkKK3ByZXNzZXMgPE1vdXNlRG93bj4gYW5kIDxNb3VzZVVwPi4gIFRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlc2Uga2V5cyBhcmU6CisgICAgPE1vdXNlRG93bj4JCXNjcm9sbCB0aHJlZSBsaW5lcyBkb3duLgkqPE1vdXNlRG93bj4qCisgICAgPFMtTW91c2VEb3duPglzY3JvbGwgYSBmdWxsIHBhZ2UgZG93bi4JKjxTLU1vdXNlRG93bj4qCisgICAgPEMtTW91c2VEb3duPglzY3JvbGwgYSBmdWxsIHBhZ2UgZG93bi4JKjxDLU1vdXNlRG93bj4qCisgICAgPE1vdXNlVXA+CQlzY3JvbGwgdGhyZWUgbGluZXMgdXAuCQkqPE1vdXNlVXA+KgorICAgIDxTLU1vdXNlVXA+CQlzY3JvbGwgYSBmdWxsIHBhZ2UgdXAuCQkqPFMtTW91c2VVcD4qCisgICAgPEMtTW91c2VVcD4JCXNjcm9sbCBhIGZ1bGwgcGFnZSB1cC4JCSo8Qy1Nb3VzZVVwPioKK1RoaXMgc2hvdWxkIHdvcmsgaW4gYWxsIG1vZGVzLCBleGNlcHQgd2hlbiBlZGl0aW5nIHRoZSBjb21tYW5kIGxpbmUuCisKK05vdGUgdGhhdCA8TW91c2VEb3duPiBpcyB1c2VkIGZvciBzY3JvbGxpbmcgdGhlIHRleHQgZG93biwgdGhpcyBoYXBwZW5zIHdoZW4KK3lvdSB0dXJuIHRoZSBtb3VzZSB3aGVlbCB1cCEKKworWW91IGNhbiBtb2RpZnkgdGhpcyBiZWhhdmlvciBieSBtYXBwaW5nIHRoZSBrZXlzLiAgRm9yIGV4YW1wbGUsIHRvIG1ha2UgdGhlCitzY3JvbGwgd2hlZWwgbW92ZSBvbmUgbGluZSBvciBoYWxmIGEgcGFnZSBpbiBOb3JtYWwgbW9kZTogPgorICAgOm1hcCA8TW91c2VEb3duPiA8Qy1ZPgorICAgOm1hcCA8Uy1Nb3VzZURvd24+IDxDLVU+CisgICA6bWFwIDxNb3VzZVVwPiA8Qy1FPgorICAgOm1hcCA8Uy1Nb3VzZVVwPiA8Qy1EPgorWW91IGNhbiBhbHNvIHVzZSBBbHQgYW5kIEN0cmwgbW9kaWZpZXJzLgorCitUaGlzIG9ubHkgd29ya3Mgd2hlbiBWaW0gZ2V0cyB0aGUgc2Nyb2xsIHdoZWVsIGV2ZW50cywgb2YgY291cnNlLiAgWW91IGNhbgorY2hlY2sgaWYgdGhpcyB3b3JrcyB3aXRoIHRoZSAieGV2IiBwcm9ncmFtLgorCitXaGVuIHVzaW5nIFhmcmVlODYsIHRoZSAvZXRjL1hGODZDb25maWcgZmlsZSBzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBlbnRyeSBmb3IKK3lvdXIgbW91c2UuICBGb3IgRnJlZUJTRCwgdGhpcyBlbnRyeSB3b3JrcyBmb3IgYSBMb2dpdGVjaCBzY3JvbGxtb3VzZTogPgorICAgIFByb3RvY29sICAgICAiTW91c2VNYW4iCisgICAgRGV2aWNlICAgICAgICIvZGV2L3BzbTAiCisgICAgWkF4aXNNYXBwaW5nIDQgNQorU2VlIHRoZSBYZnJlZTg2IGRvY3VtZW50YXRpb24gZm9yIGluZm9ybWF0aW9uLgorCisJCQkJCQkJKnh0ZXJtLW1vdXNlLXdoZWVsKgorVG8gdXNlIHRoZSBtb3VzZSB3aGVlbCBpbiBhIG5ldyB4dGVybSB5b3Ugb25seSBoYXZlIHRvIG1ha2UgdGhlIHNjcm9sbCB3aGVlbAord29yayBpbiB5b3VyIFhzZXJ2ZXIsIGFzIG1lbnRpb25lZCBhYm92ZS4KKworVG8gdXNlIHRoZSBtb3VzZSB3aGVlbCBpbiBhbiBvbGRlciB4dGVybSB5b3UgbXVzdCBkbyB0aGlzOgorMS4gTWFrZSBpdCB3b3JrIGluIHlvdXIgWHNlcnZlciwgYXMgbWVudGlvbmVkIGFib3ZlLgorMi4gQWRkIHRyYW5zbGF0aW9ucyBmb3IgdGhlIHh0ZXJtLCBzbyB0aGF0IHRoZSB4dGVybSB3aWxsIHBhc3MgYSBzY3JvbGwgZXZlbnQKKyAgIHRvIFZpbSBhcyBhbiBlc2NhcGUgc2VxdWVuY2UuCiszLiBBZGQgbWFwcGluZ3MgaW4gVmltLCB0byBpbnRlcnByZXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgYXMgPE1vdXNlVXA+IG9yCisgICA8TW91c2VEb3duPiBrZXlzLgorCitZb3UgY2FuIGRvIHRoZSB0cmFuc2xhdGlvbnMgYnkgYWRkaW5nIHRoaXMgdG8geW91ciB+LlhkZWZhdWx0cyBmaWxlIChvciBvdGhlcgorZmlsZSB3aGVyZSB5b3VyIFggcmVzb3VyY2VzIGFyZSBrZXB0KTogPgorCisgIFhUZXJtKlZUMTAwLlRyYW5zbGF0aW9uczoJCSNvdmVycmlkZSBcblwKKwkJczxCdG40RG93bj46IHN0cmluZygiMHg5YiIpIHN0cmluZygiWzY0fiIpIFxuXAorCQlzPEJ0bjVEb3duPjogc3RyaW5nKCIweDliIikgc3RyaW5nKCJbNjV+IikgXG5cCisJCTxCdG40RG93bj46IHN0cmluZygiMHg5YiIpIHN0cmluZygiWzYyfiIpIFxuXAorCQk8QnRuNURvd24+OiBzdHJpbmcoIjB4OWIiKSBzdHJpbmcoIls2M34iKSBcblwKKwkJPEJ0bjRVcD46IFxuXAorCQk8QnRuNVVwPjoKKworQWRkIHRoZXNlIG1hcHBpbmdzIHRvIHlvdXIgdmltcmMgZmlsZTogPgorCTptYXAgPE0tRXNjPls2Mn4gPE1vdXNlRG93bj4KKwk6bWFwISA8TS1Fc2M+WzYyfiA8TW91c2VEb3duPgorCTptYXAgPE0tRXNjPls2M34gPE1vdXNlVXA+CisJOm1hcCEgPE0tRXNjPls2M34gPE1vdXNlVXA+CisJOm1hcCA8TS1Fc2M+WzY0fiA8Uy1Nb3VzZURvd24+CisJOm1hcCEgPE0tRXNjPls2NH4gPFMtTW91c2VEb3duPgorCTptYXAgPE0tRXNjPls2NX4gPFMtTW91c2VVcD4KKwk6bWFwISA8TS1Fc2M+WzY1fiA8Uy1Nb3VzZVVwPgorPAorIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3NpZ24udHh0IGIvcnVudGltZS9kb2Mvc2lnbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1YjRlMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3NpZ24udHh0CkBAIC0wLDAgKzEsMTkxIEBACisqc2lnbi50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDIyCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEdvcmRvbiBQcmlldXIKKwkJCQkJICBhbmQgQnJhbSBNb29sZW5hYXIKKworCitTaWduIFN1cHBvcnQgRmVhdHVyZXMJCQkJKnNpZ24tc3VwcG9ydCoKKworMS4gSW50cm9kdWN0aW9uCQkJCXxzaWduLWludHJvfAorMi4gQ29tbWFuZHMJCQkJfHNpZ24tY29tbWFuZHN8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBmZWF0dXJlc30KK3tvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrc2lnbnN8IGZlYXR1cmV9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gSW50cm9kdWN0aW9uCQkJCQkqc2lnbi1pbnRybyogKnNpZ25zKgorCitXaGVuIGEgZGVidWdnZXIgb3Igb3RoZXIgSURFIHRvb2wgaXMgZHJpdmluZyBhbiBlZGl0b3IgaXQgbmVlZHMgdG8gYmUgYWJsZQordG8gZ2l2ZSBzcGVjaWZpYyBoaWdobGlnaHRzIHdoaWNoIHF1aWNrbHkgdGVsbCB0aGUgdXNlciB1c2VmdWwgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBmaWxlLiBPbmUgZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIGEgZGVidWdnZXIgd2hpY2ggaGFkIGFuIGljb24KK2luIHRoZSBsZWZ0LWhhbmQgY29sdW1uIGRlbm90aW5nIGEgYnJlYWtwb2ludC4gQW5vdGhlciBleGFtcGxlIG1pZ2h0IGJlIGFuCithcnJvdyByZXByZXNlbnRpbmcgdGhlIFByb2dyYW0gQ291bnRlciAoUEMpLiBUaGUgc2lnbiBmZWF0dXJlcyBhbGxvdyBib3RoCitwbGFjZW1lbnQgb2YgYSBzaWduLCBvciBpY29uLCBpbiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIHdpbmRvdyBhbmQKK2RlZmluaXRpb24gb2YgYSBoaWdobGlnaHQgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoYXQgbGluZS4gRGlzcGxheWluZyB0aGUKK3NpZ24gYXMgYW4gaW1hZ2UgaXMgbW9zdCBsaWtlbHkgb25seSBmZWFzaWJsZSBpbiBndmltIChhbHRob3VnaCBTdW4KK01pY3Jvc3lzdGVtJ3MgZHR0ZXJtIGRvZXMgc3VwcG9ydCB0aGlzIGl0cyB0aGUgb25seSB0ZXJtaW5hbCBlbXVsYXRvciBJIGtub3cKK29mIHdoaWNoIGRvZXMpLiAgQSB0ZXh0IHNpZ24gYW5kIHRoZSBoaWdobGlnaHQgc2hvdWxkIGJlIGZlYXNpYmxlIGluIGFueSBjb2xvcgordGVybWluYWwgZW11bGF0b3IuCisKK1NpZ25zIGFuZCBoaWdobGlnaHRzIGFyZSBub3QgdXNlZnVsIGp1c3QgZm9yIGRlYnVnZ2Vycy4gU3VuJ3MgVmlzdWFsCitXb3JrU2hvcCB1c2VzIHNpZ25zIGFuZCBoaWdobGlnaHRzIHRvIG1hcmsgYnVpbGQgZXJyb3JzIGFuZCBTb3VyY2VCcm93c2VyCitoaXRzLiBBZGRpdGlvbmFsbHksIHRoZSBkZWJ1Z2dlciBzdXBwb3J0cyA4IHRvIDEwIGRpZmZlcmVudCBzaWducyBhbmQKK2hpZ2hsaWdodCBjb2xvcnMuIHx3b3Jrc2hvcHwgIFNhbWUgZm9yIE5ldGJlYW5zIHxuZXRiZWFuc3wuCisKK1RoZXJlIGFyZSB0d28gc3RlcHMgaW4gdXNpbmcgc2lnbnM6CisKKzEuIERlZmluZSB0aGUgc2lnbi4gIFRoaXMgc3BlY2lmaWVzIHRoZSBpbWFnZSwgdGV4dCBhbmQgaGlnaGxpZ2h0aW5nLiAgRm9yCisgICBleGFtcGxlLCB5b3UgY2FuIGRlZmluZSBhICJicmVhayIgc2lnbiB3aXRoIGFuIGltYWdlIG9mIGEgc3RvcCByb2Fkc2lnbiBhbmQKKyAgIHRleHQgIiEhIi4KKworMi4gUGxhY2UgdGhlIHNpZ24uICBUaGlzIHNwZWNpZmllcyB0aGUgZmlsZSBhbmQgbGluZSBudW1iZXIgd2hlcmUgdGhlIHNpZ24gaXMKKyAgIGRpc3BsYXllZC4gIEEgZGVmaW5lZCBzaWduIGNhbiBiZSBwbGFjZWQgc2V2ZXJhbCB0aW1lcyBpbiBkaWZmZXJlbnQgbGluZXMKKyAgIGFuZCBmaWxlcy4KKworV2hlbiBzaWducyBhcmUgZGVmaW5lZCBmb3IgYSBmaWxlLCBWaW0gd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBhIGNvbHVtbiBvZiB0d28KK2NoYXJhY3RlcnMgdG8gZGlzcGxheSB0aGVtIGluLiAgV2hlbiB0aGUgbGFzdCBzaWduIGlzIHVucGxhY2VkIHRoZSBjb2x1bW4KK2Rpc2FwcGVhcnMgYWdhaW4uICBUaGUgY29sb3Igb2YgdGhlIGNvbHVtbiBpcyBzZXQgd2l0aCB0aGUgU2lnbkNvbHVtbiBncm91cAorfGhsLVNpZ25Db2x1bW58LiAgRXhhbXBsZSB0byBzZXQgdGhlIGNvbG9yOiA+CisKKwk6aGlnaGxpZ2h0IFNpZ25Db2x1bW4gZ3VpYmc9ZGFya2dyZXkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBDb21tYW5kcwkJCQkJKnNpZ24tY29tbWFuZHMqICo6c2lnKiAqOnNpZ24qCisKK0hlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHBsYWNlcyBhIHNpZ24gcGlldCwgZGlzcGxheWVkIHdpdGggdGhlIHRleHQgIj4+IiwgaW4KK2xpbmUgMjMgb2YgdGhlIGN1cnJlbnQgZmlsZTogPgorCTpzaWduIGRlZmluZSBwaWV0IHRleHQ9Pj4gdGV4dGhsPVNlYXJjaAorCTpleGUgIjpzaWduIHBsYWNlIDIgbGluZT0yMyBuYW1lPXBpZXQgZmlsZT0iIC4gZXhwYW5kKCIlOnAiKQorCitBbmQgaGVyZSBpcyB0aGUgY29tbWFuZCB0byBkZWxldGUgaXQgYWdhaW46ID4KKwk6c2lnbiB1bnBsYWNlIDIKKworTm90ZSB0aGF0IHRoZSAiOnNpZ24iIGNvbW1hbmQgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZCBvciBhCitjb21tZW50LiAgSWYgeW91IGRvIG5lZWQgdGhhdCwgdXNlIHRoZSB8OmV4ZWN1dGV8IGNvbW1hbmQuCisKKworREVGSU5JTkcgQSBTSUdOLgkJCSo6c2lnbi1kZWZpbmUqICpFMjU1KiAqRTE2MCogKkU2MTIqCisKKzpzaWduIGRlZmluZSB7bmFtZX0ge2FyZ3VtZW50fS4uLgorCQlEZWZpbmUgYSBuZXcgc2lnbiBvciBzZXQgYXR0cmlidXRlcyBmb3IgYW4gZXhpc3Rpbmcgc2lnbi4KKwkJVGhlIHtuYW1lfSBjYW4gZWl0aGVyIGJlIGEgbnVtYmVyIChhbGwgZGlnaXRzKSBvciBhIG5hbWUKKwkJc3RhcnRpbmcgd2l0aCBhIG5vbi1kaWdpdC4KKwkJQWJvdXQgMTIwIGRpZmZlcmVudCBzaWducyBjYW4gYmUgZGVmaW5lZC4KKworCQlBY2NlcHRlZCBhcmd1bWVudHM6CisKKwlpY29uPXtwaXhtYXB9CisJCURlZmluZSB0aGUgZmlsZSBuYW1lIHdoZXJlIHRoZSBiaXRtYXAgY2FuIGJlIGZvdW5kLiAgU2hvdWxkIGJlCisJCWEgZnVsbCBwYXRoLiAgVGhlIGJpdG1hcCBzaG91bGQgZml0IGluIHRoZSBwbGFjZSBvZiB0d28KKwkJY2hhcmFjdGVycy4gIFRoaXMgaXMgbm90IGNoZWNrZWQuICBJZiB0aGUgYml0bWFwIGlzIHRvbyBiaWcgaXQKKwkJd2lsbCBjYXVzZSByZWRyYXcgcHJvYmxlbXMuICBPbmx5IEdUSyAyIGNhbiBzY2FsZSB0aGUgYml0bWFwCisJCXRvIGZpdCB0aGUgc3BhY2UgYXZhaWxhYmxlLgorCQkJdG9vbGtpdAkJc3VwcG9ydHMgfgorCQkJR1RLIDEJCXBpeG1hcCAoLnhwbSkKKwkJCUdUSyAyCQltYW55CisJCQlNb3RpZgkJcGl4bWFwICgueHBtKQorCisJbGluZWhsPXtncm91cH0KKwkJSGlnaGxpZ2h0aW5nIGdyb3VwIHVzZWQgZm9yIHRoZSB3aG9sZSBsaW5lIHRoZSBzaWduIGlzIHBsYWNlZAorCQlpbi4gIE1vc3QgdXNlZnVsIGlzIGRlZmluaW5nIGEgYmFja2dyb3VuZCBjb2xvci4KKworCXRleHQ9e3RleHR9CQkJCQkJKkUyMzkqCisJCURlZmluZSB0aGUgdGV4dCB0aGF0IGlzIGRpc3BsYXllZCB3aGVuIHRoZXJlIGlzIG5vIGljb24gb3IgdGhlCisJCUdVSSBpcyBub3QgYmVpbmcgdXNlZC4gIE9ubHkgcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQKKwkJYW5kIHRoZXkgbXVzdCBvY2N1cHkgb25lIG9yIHR3byBkaXNwbGF5IGNlbGxzLgorCisJdGV4dGhsPXtncm91cH0KKwkJSGlnaGxpZ2h0aW5nIGdyb3VwIHVzZWQgZm9yIHRoZSB0ZXh0IGl0ZW0uCisKKworREVMRVRJTkcgQSBTSUdOCQkJCQkJKjpzaWduLXVuZGVmaW5lKiAqRTE1NSoKKworOnNpZ24gdW5kZWZpbmUge25hbWV9CisJCURlbGV0ZXMgYSBwcmV2aW91c2x5IGRlZmluZWQgc2lnbi4gIElmIHNpZ25zIHdpdGggdGhpcyB7bmFtZX0KKwkJYXJlIHN0aWxsIHBsYWNlZCB0aGlzIHdpbGwgY2F1c2UgdHJvdWJsZS4KKworCitMSVNUSU5HIFNJR05TCQkJCQkJKjpzaWduLWxpc3QqICpFMTU2KgorCis6c2lnbiBsaXN0CUxpc3RzIGFsbCBkZWZpbmVkIHNpZ25zIGFuZCB0aGVpciBhdHRyaWJ1dGVzLgorCis6c2lnbiBsaXN0IHtuYW1lfQorCQlMaXN0cyBvbmUgZGVmaW5lZCBzaWduIGFuZCBpdHMgYXR0cmlidXRlcy4KKworCitQTEFDSU5HIFNJR05TCQkJCQkJKjpzaWduLXBsYWNlKiAqRTE1OCoKKworOnNpZ24gcGxhY2Uge2lkfSBsaW5lPXtsbnVtfSBuYW1lPXtuYW1lfSBmaWxlPXtmbmFtZX0KKwkJUGxhY2Ugc2lnbiBkZWZpbmVkIGFzIHtuYW1lfSBhdCBsaW5lIHtsbnVtfSBpbiBmaWxlIHtmbmFtZX0uCisJCQkJCQkJKjpzaWduLWZuYW1lKgorCQlUaGUgZmlsZSB7Zm5hbWV9IG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYSBidWZmZXIuICBUaGUKKwkJZXhhY3QgZmlsZSBuYW1lIG11c3QgYmUgdXNlZCwgd2lsZGNhcmRzLCAkRU5WIGFuZCB+IGFyZSBub3QKKwkJZXhwYW5kZWQsIHdoaXRlIHNwYWNlIG11c3Qgbm90IGJlIGVzY2FwZWQuICBUcmFpbGluZyB3aGl0ZQorCQlzcGFjZSBpcyBpZ25vcmVkLgorCisJCVRoZSBzaWduIGlzIHJlbWVtYmVyZWQgdW5kZXIge2lkfSwgdGhpcyBjYW4gYmUgdXNlZCBmb3IKKwkJZnVydGhlciBtYW5pcHVsYXRpb24uICB7aWR9IG11c3QgYmUgYSBudW1iZXIuCisJCUl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gbWFrZSBzdXJlIHRoZSB7aWR9IGlzIHVzZWQgb25seSBvbmNlIGluCisJCWVhY2ggZmlsZSAoaWYgaXQncyB1c2VkIHNldmVyYWwgdGltZXMgdW5wbGFjaW5nIHdpbGwgYWxzbyBoYXZlCisJCXRvIGJlIGRvbmUgc2V2ZXJhbCB0aW1lcyBhbmQgbWFraW5nIGNoYW5nZXMgbWF5IG5vdCB3b3JrIGFzCisJCWV4cGVjdGVkKS4KKworOnNpZ24gcGxhY2Uge2lkfSBsaW5lPXtsbnVtfSBuYW1lPXtuYW1lfSBidWZmZXI9e25yfQorCQlTYW1lLCBidXQgdXNlIGJ1ZmZlciB7bnJ9LgorCis6c2lnbiBwbGFjZSB7aWR9IG5hbWU9e25hbWV9IGZpbGU9e2ZuYW1lfQorCQlDaGFuZ2UgdGhlIHBsYWNlZCBzaWduIHtpZH0gaW4gZmlsZSB7Zm5hbWV9IHRvIHVzZSB0aGUgZGVmaW5lZAorCQlzaWduIHtuYW1lfS4gIFNlZSByZW1hcmsgYWJvdmUgYWJvdXQge2ZuYW1lfSB8OnNpZ24tZm5hbWV8LgorCQlUaGlzIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgZGlzcGxheWVkIHNpZ24gd2l0aG91dCBtb3ZpbmcKKwkJaXQgKGUuZy4sIHdoZW4gdGhlIGRlYnVnZ2VyIGhhcyBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludCkuCisKKzpzaWduIHBsYWNlIHtpZH0gbmFtZT17bmFtZX0gYnVmZmVyPXtucn0KKwkJU2FtZSwgYnV0IHVzZSBidWZmZXIge25yfS4KKworCitSRU1PVklORyBTSUdOUwkJCQkJCSo6c2lnbi11bnBsYWNlKiAqRTE1OSoKKworOnNpZ24gdW5wbGFjZSB7aWR9IGZpbGU9e2ZuYW1lfQorCQlSZW1vdmUgdGhlIHByZXZpb3VzbHkgcGxhY2VkIHNpZ24ge2lkfSBmcm9tIGZpbGUge2ZuYW1lfS4KKwkJU2VlIHJlbWFyayBhYm92ZSBhYm91dCB7Zm5hbWV9IHw6c2lnbi1mbmFtZXwuCisKKzpzaWduIHVucGxhY2Uge2lkfSBidWZmZXI9e25yfQorCQlTYW1lLCBidXQgdXNlIGJ1ZmZlciB7bnJ9LgorCis6c2lnbiB1bnBsYWNlIHtpZH0KKwkJUmVtb3ZlIHRoZSBwcmV2aW91c2x5IHBsYWNlZCBzaWduIHtpZH0gZnJvbSBhbGwgZmlsZXMgaXQKKwkJYXBwZWFycyBpbi4KKworOnNpZ24gdW5wbGFjZSAqCisJCVJlbW92ZSBhbGwgcGxhY2VkIHNpZ25zLgorCis6c2lnbiB1bnBsYWNlCisJCVJlbW92ZSB0aGUgcGxhY2VkIHNpZ24gYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworCitMSVNUSU5HIFBMQUNFRCBTSUdOUworCis6c2lnbiBwbGFjZSBmaWxlPXtmbmFtZX0KKwkJTGlzdCBzaWducyBwbGFjZWQgaW4gZmlsZSB7Zm5hbWV9LgorCQlTZWUgcmVtYXJrIGFib3ZlIGFib3V0IHtmbmFtZX0gfDpzaWduLWZuYW1lfC4KKworOnNpZ24gcGxhY2UgYnVmZmVyPXtucn0KKwkJTGlzdCBzaWducyBwbGFjZWQgaW4gYnVmZmVyIHtucn0uCisKKzpzaWduIHBsYWNlCUxpc3QgcGxhY2VkIHNpZ25zIGluIGFsbCBmaWxlcy4KKworCitKVU1QSU5HIFRPIEEgU0lHTgkJCQkJKjpzaWduLWp1bXAqICpFMTU3KgorCis6c2lnbiBqdW1wIHtpZH0gZmlsZT17Zm5hbWV9CisJCU9wZW4gdGhlIGZpbGUge2ZuYW1lfSBvciBqdW1wIHRvIHRoZSB3aW5kb3cgdGhhdCBjb250YWlucworCQl7Zm5hbWV9IGFuZCBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHNpZ24ge2lkfS4KKwkJU2VlIHJlbWFyayBhYm92ZSBhYm91dCB7Zm5hbWV9IHw6c2lnbi1mbmFtZXwuCisJCUlmIHRoZSBmaWxlIGlzbid0IGRpc3BsYXllZCBpbiB3aW5kb3cgYW5kIHRoZSBjdXJyZW50IGZpbGUgY2FuCisJCW5vdCBiZSB8YWJhbmRvbnxlZCB0aGlzIGZhaWxzLgorCis6c2lnbiBqdW1wIHtpZH0gYnVmZmVyPXtucn0KKwkJU2FtZSwgYnV0IHVzZSBidWZmZXIge25yfS4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Nwb25zb3IudHh0IGIvcnVudGltZS9kb2Mvc3BvbnNvci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhYmM0NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Nwb25zb3IudHh0CkBAIC0wLDAgKzEsMjI5IEBACisqc3BvbnNvci50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgQXByIDIzCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCitTUE9OU09SIFZJTSBERVZFTE9QTUVOVAkJCQkJCSpzcG9uc29yKgorCitGaXhpbmcgYnVncyBhbmQgYWRkaW5nIG5ldyBmZWF0dXJlcyB0YWtlcyBhIGxvdCBvZiBlZmZvcnQuICBGb3IgYSBmZXcgeWVhcnMKK0JyYW0gaGFzIGF0dGVtcHRlZCB0byBkbyB0aGlzIG5leHQgdG8gYSBmdWxsLXRpbWUgam9iLiAgRHVyaW5nIHRoYXQgdGltZSB0aGUKK3RvZG8gbGlzdCBrZXB0IGdldHRpbmcgbG9uZ2VyIGFuZCBsb25nZXIuCisKK0luIG9yZGVyIGZvciBCcmFtIHRvIHN1cHBvcnQgVmltIHByb3Blcmx5IGhlIG5lZWRzIHlvdXIgc3VwcG9ydC4gIFRocm91Z2ggeW91cgorZG9uYXRpb25zIEJyYW0gd2lsbCBiZSBhYmxlIHRvIGhhdmUgYSBwYXJ0LXRpbWUgam9iIGFuZCBzcGVuZCBtb3JlIHRpbWUgb24KK2ZpeGluZyBidWdzIGFuZCBhZGRpbmcgbmV3IGZlYXR1cmVzLgorCitGb3IgdGhlIG1vc3QgcmVjZW50IGluZm9ybWF0aW9uIGFib3V0IHNwb25zb3JpbmcgbG9vayBvbiB0aGUgVmltIHdlYiBzaXRlOgorCisJaHR0cDovL3d3dy52aW0ub3JnL3Nwb25zb3IvCisKK01vcmUgZXhwbGFuYXRpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUgfHNwb25zb3ItZmFxfC4KKworCitSRUdJU1RFUkVEIFZJTSBVU0VSCQkJCQkJKnJlZ2lzdGVyKgorCitZb3UgY2FuIGJlY29tZSBhIHJlZ2lzdGVyZWQgVmltIHVzZXIgYnkgc2VuZGluZyBhdCBsZWFzdCAxMCBldXJvLiAgVGhpcyB3b3Jrcworc2ltaWxhciB0byBzcG9uc29yaW5nIFZpbSwgc2VlIHxzcG9uc29yfCBhYm92ZS4gIFJlZ2lzdHJhdGlvbiB3YXMgbWFkZQorcG9zc2libGUgZm9yIHRoZSBzaXR1YXRpb24gd2hlcmUgeW91ciBib3NzIG9yIGJvb2trZWVwZXIgbWF5IGJlIHdpbGxpbmcgdG8KK3JlZ2lzdGVyIHNvZnR3YXJlLCBidXQgZG9lcyBub3QgbGlrZSB0aGUgdGVybXMgInNwb25zb3JpbmciIGFuZCAiZG9uYXRpb24iLgorCitNb3JlIGV4cGxhbmF0aW9ucyBjYW4gYmUgZm91bmQgaW4gdGhlIHxyZWdpc3Rlci1mYXF8LgorCisKK1ZPVEUgRk9SIEZFQVRVUkVTCQkJCQkqdm90ZS1mb3ItZmVhdHVyZXMqCisKK1RvIGdpdmUgcmVnaXN0ZXJlZCBWaW0gdXNlcnMgYW5kIHNwb25zb3JzIGFuIGFkdmFudGFnZSBvdmVyIGx1cmtlcnMgdGhleSBjYW4KK3ZvdGUgZm9yIHRoZSBpdGVtcyBCcmFtIHNob3VsZCB3b3JrIG9uLiAgSG93IGRvZXMgdGhpcyB2b3Rpbmcgd29yaz8KKworMS4gIFlvdSBzZW5kIGF0IGxlYXN0IDEwIGV1cm8uICBTZWUgYmVsb3cgZm9yIHdheXMgdG8gdHJhbnNmZXIgbW9uZXkKKyAgICB8c2VuZC1tb25leXwuCisKKzIuICBZb3Ugd2lsbCBiZSBlLW1haWxlZCBhIHJlZ2lzdHJhdGlvbiBrZXkuICBFbnRlciB0aGlzIGtleSBvbiB5b3VyIGFjY291bnQKKyAgICBwYWdlIG9uIHRoZSBWaW0gd2Vic2l0ZS4gIFlvdSBjYW4gZWFzaWx5IGNyZWF0ZSBhbiBhY2NvdW50IGlmIHlvdSBkb24ndAorICAgIGhhdmUgb25lIHlldC4KKworMy4gIFlvdSBjYW4gZW50ZXIgeW91ciB2b3RlcyBvbiB0aGUgdm90aW5nIHBhZ2UuICBUaGVyZSBpcyBhIGxpbmsgdG8gdGhhdCBwYWdlCisgICAgb24geW91ciBhY2NvdW50IHBhZ2UgYWZ0ZXIgZW50ZXJpbmcgYSByZWdpc3RyYXRpb24ga2V5LiAgWW91ciB2b3RlcyB3aWxsCisgICAgYmUgY291bnRlZCBmb3IgdHdvIHllYXJzLgorCis0LiAgVGhlIHZvdGluZyByZXN1bHRzIGFwcGVhciBvbiB0aGUgcmVzdWx0cyBwYWdlLCB3aGljaCBpcyB2aXNpYmxlIGZvcgorICAgIGV2ZXJ5Ym9keTogIGh0dHA6Ly93d3cudmltLm9yZy9zcG9uc29yL3ZvdGVfcmVzdWx0cy5waHAKKworQWRkaXRpb25hbGx5LCBvbmNlIHlvdSBoYXZlIHNlbmQgMTAwIGV1cm8gb3IgbW9yZSBpbiB0b3RhbCwgeW91ciBuYW1lIGFwcGVhcnMKK2luIHRoZSAiVmltIGhhbGwgb2YgaG9ub3VyIjogICBodHRwOi8vd3d3LnZpbS5vcmcvc3BvbnNvci9oYWxsX29mX2hvbm91ci5waHAKK0J1dCBvbmx5IGlmIHlvdSBlbmFibGUgdGhpcyBvbiB5b3VyIGFjY291bnQgcGFnZS4KKworCitIT1cgVE8gU0VORCBNT05FWQkJCQkJCSpzZW5kLW1vbmV5KgorCitDcmVkaXRjYXJkCVRocm91Z2ggUGF5UGFsLCBzZWUgdGhlIFBheVBhbCBzaXRlIGZvciBpbmZvcm1hdGlvbjoKKwkJCWh0dHBzOi8vd3d3LnBheXBhbC5jb20KKwkJVGhlIGUtbWFpbCBhZGRyZXNzIGZvciBzZW5kaW5nIHNwb25zb3JzaGlwIG1vbmV5IGlzOgorCQkJZG9uYXRlQHZpbS5vcmcKKwkJVGhlIGUtbWFpbCBhZGRyZXNzIGZvciBWaW0gcmVnaXN0cmF0aW9uIGlzOgorCQkJcmVnaXN0ZXJAdmltLm9yZworCQlVc2luZyBFdXJvIGlzIHByZWZlcnJlZCwgb3RoZXIgY3VycmVuY2llcyBhcmUgYWxzbyBhY2NlcHRlZC4KKwkJSW4gRXVybyBjb3VudHJpZXMgYSBiYW5rIHRyYW5zZmVyIGlzIHByZWZlcnJlZCwgdGhpcyBoYXMgbG93ZXIKKwkJY29zdHMuCisKK0JhbmsgdHJhbnNmZXIJVHJhbnNmZXIgdG8gQnJhbSdzIGFjY291bnQgYXQgdGhlIFBvc3RiYW5rOiAxNjQ0NTAzLiAgRm9yCisJCWludGVybmF0aW9uYWwgdHJhbnNmZXJzIHlvdSBjYW4gdXNlIHRoZXNlIG51bWJlcnM6CisJCQlJQkFOOiAgICAgICBOTDc5IFBTVEIgMDAwMSA2NDQ1IDAzCisJCQlTV0lGVC9CSUM6ICBQU1RCTkwyMQorCQlUaGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBiYW5rOgorCQkJSU5HIEJhbmsgQW1zdGVyZGFtLCBGb3JlaWduIE9wZXJhdGlvbnMKKwkJCVBPIEJveCAxODAwCisJCQkxMDAwIEJWIEFtc3RlcmRhbQorCQkJVGhlIE5ldGhlcmxhbmRzCisJCUluY2x1ZGUgIlZpbSBzcG9uc29yIiBvciAiVmltIHJlZ2lzdHJhdGlvbiIgaW4gdGhlIGNvbW1lbnQgb2YKKwkJeW91ciBtb25leSB0cmFuc2Zlci4gIFNlbmQgbWUgYW4gZS1tYWlsIHRoYXQgbWVudGlvbnMgdGhlCisJCWFtb3VudCB5b3UgdHJhbnNmZXJyZWQgaWYgeW91IHdhbnQgdG8gdm90ZSBmb3IgZmVhdHVyZXMgYW5kCisJCXNob3cgb3RoZXJzIHlvdSBhcmUgYSByZWdpc3RlcmVkIFZpbSB1c2VyIG9yIHNwb25zb3IuCisKK0Nhc2gJCVNtYWxsIGFtb3VudHMgY2FuIGJlIHNlbmQgd2l0aCBvcmRpbmFyeSBtYWlsLiAgUHV0IHNvbWV0aGluZworCQlhcm91bmQgdGhlIG1vbmV5LCBzbyB0aGF0IGl0J3Mgbm90IG5vdGljYWJsZSBmcm9tIHRoZSBvdXRzaWRlLgorCQlNZW50aW9uIHlvdXIgZS1tYWlsIGFkZHJlc3MgaWYgeW91IHdhbnQgdG8gdm90ZSBmb3IgZmVhdHVyZXMKKwkJYW5kIHNob3cgb3RoZXJzIHlvdSBhcmUgYSByZWdpc3RlcmVkIFZpbSB1c2VyIG9yIHNwb25zb3IuCisKK1RoaXMgaXMgQnJhbSdzIGFkZHJlc3M6IEJyYW0gTW9vbGVuYWFyCisJCQlDbGVtYXRpc3N0cmFhdCAzMAorCQkJNTkyNSBCRSBWZW5sbworCQkJVGhlIE5ldGhlcmxhbmRzCisKKworQUxURVJOQVRJVkUKKworSWYgeW91IGRvbid0IGNhcmUgYWJvdXQgc3BvbnNvcmluZyBWaW0gRGV2ZWxvcG1lbnQgb3IgYmVjb21pbmcgYSByZWdpc3RlcmVkCitWaW0gdXNlciwgYnV0IGRvIGNhcmUgYWJvdXQgaGVscGluZyBuZWVkeSBjaGlsZHJlbiwgY29uc2lkZXIgZ2l2aW5nIHRvIHRoZQorSUNDRiBIb2xsYW5kIGZvdW5kYXRpb24uICBUaGlzIGlzIHRoZSBjaGFyaXR5IHJlY29tbWVuZGVkIGJ5IFZpbSdzIGF1dGhvci4KK1RoZSBtb25leSBpcyB1c2VkIGZvciBhIGNoaWxkcmVuIGNlbnRyZSBpbiB0aGUgc291dGggb2YgVWdhbmRhLCB3aGVyZSBBSURTIGhhcworY2F1c2VkIG1hbnkgdmljdGltcy4gIFNlZSB8dWdhbmRhfC4KKworCitRVUVTVElPTlMgQU5EIEFOU1dFUlMJCQkJKnNwb25zb3ItZmFxKiAqcmVnaXN0ZXItZmFxKgorCitXaHkgc2hvdWxkIEkgZ2l2ZSBtb25leT8KKworQnJhbSBoYXMgdHJpZWQgdG8gd29yayBvbiBWaW0gbmV4dCB0byBhIGZ1bGwtdGltZSBqb2IuICBUaGUgbGlzdCBvZiBrbm93biBidWdzCithbmQgaWRlYXMgZm9yIG5ldyBmZWF0dXJlcyBoYXMgY29uc3RhbnRseSBiZWVuIGdyb3dpbmcgZHVyaW5nIHRoaXMgdGltZS4gIEJyYW0KK3NpbXBseSBjYW4ndCBzcGVuZCBlbm91Z2ggdGltZSBvbiBWaW0gZGV2ZWxvcG1lbnQgd2hlbiBoZSBoYXMgYSBmdWxsLXRpbWUgam9iLgorWW91ciBjb250cmlidXRpb24gd2lsbCBtYWtlIGl0IHBvc3NpYmxlIGZvciBCcmFtIHRvIGhhdmUgYSBwYXJ0LXRpbWUgam9iIGFuZAorc3BlbmQgbXVjaCBtb3JlIHRpbWUgb24gVmltIGRldmVsb3BtZW50LiAgQnVncyB3aWxsIGJlIGZpeGVkIHF1aWNrZXIgYW5kIG5ldworVmltIHJlbGVhc2VzIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBtb3JlIG9mdGVuLgorCisKK0hvdyBtdWNoIG1vbmV5IHNob3VsZCBJIHNlbmQ/CisKK1RoYXQgaXMgdXAgdG8geW91LiAgVGhlIG1vcmUgeW91IGdpdmUsIHRoZSBtb3JlIHRpbWUgQnJhbSBjYW4gd29yayBvbiBWaW0uICBBbgoraW5kaWNhdGlvbiBmb3IgaW5kaXZpZHVhbHMgdGhhdCB1c2UgVmltIGF0IGhvbWU6IDEwIEV1cm8gcGVyIHllYXIuICBGb3IKK3Byb2Zlc3Npb25hbCB1c2U6IDMwIEV1cm8gcGVyIHllYXIgcGVyIHBlcnNvbi4gIFNlbmQgYXQgbGVhc3QgMTAgZXVybyB0byBiZQorYWJsZSB0byB2b3RlIGZvciBmZWF0dXJlcy4KKworCitXaGF0IGRvIEkgZ2V0IGluIHJldHVybj8KKworRWFjaCByZWdpc3RlcmVkIFZpbSB1c2VyIGFuZCBzcG9uc29yIHdobyBkb25hdGVzIGF0IGxlYXN0IDEwIGV1cm8gd2lsbCBiZSBhYmxlCit0byB2b3RlIGZvciBuZXcgZmVhdHVyZXMuICBUaGVzZSB2b3RlcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gdGhlIHdvcmsgb24gVmltLgorVGhlIHZvdGVzIGFyZSB2YWxpZCBmb3IgdHdvIHllYXJzLiAgVGhlIG1vcmUgbW9uZXkgeW91IHNlbmQgdGhlIG1vcmUgeW91cgordm90ZXMgY291bnQgfHZvdGVzLWNvdW50ZWR8LgorCitJZiB5b3Ugc2VuZCAxMDAgRXVybyBvciBtb3JlIGluIHRvdGFsIHlvdSB3aWxsIGJlIG1lbnRpb25lZCBvbiB0aGUgIlZpbSBoYWxsCitvZiBob25vdXIiIHBhZ2Ugb24gdGhlIFZpbSB3ZWIgc2l0ZS4gIEJ1dCBvbmx5IGlmIHlvdSBlbmFibGUgdGhpcyBvbiB5b3VyCithY2NvdW50IHBhZ2UuICBZb3UgY2FuIGFsc28gc2VsZWN0IHdoZXRoZXIgdGhlIGFtb3VudCB3aWxsIGJlIHZpc2libGUuCisKKworSG93IGRvIEkgYmVjb21lIGEgVmltIHNwb25zb3Igb3IgcmVnaXN0ZXJlZCBWaW0gdXNlcj8KKworU2VuZCBtb25leSwgYXMgZXhwbGFpbmVkIGFib3ZlIHxzZW5kLW1vbmV5fCBhbmQgaW5jbHVkZSB5b3VyIGUtbWFpbCBhZGRyZXNzLgorV2hlbiB0aGUgbW9uZXkgaGFzIGJlZW4gcmVjZWl2ZWQgeW91IHdpbGwgcmVjZWl2ZSBhIHVuaXF1ZSByZWdpc3RyYXRpb24ga2V5LgorVGhpcyBrZXkgY2FuIGJlIHVzZWQgb24gdGhlIFZpbSB3ZWJzaXRlIHRvIGFjdGl2YXRlIHZvdGluZyBvbiB5b3VyIFZpbQorYWNjb3VudC4gIFlvdSB3aWxsIHRoZW4gZ2V0IGFuIGV4dHJhIHBhZ2Ugd2hlcmUgeW91IGNhbiB2b3RlIGZvciBmZWF0dXJlcyBhbmQKK2Nob29zZSB3aGV0aGVyIG90aGVycyB3aWxsIGJlIGFibGUgdG8gc2VlIHRoYXQgeW91IGRvbmF0ZWQuICBUaGVyZSBpcyBhIGxpbmsKK3RvIHRoaXMgcGFnZSBvbiB5b3VyICJNeSBBY2NvdW50IiBwYWdlLgorCisKK1doYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzcG9uc29yaW5nIGFuZCByZWdpc3RlcmluZz8KKworSXQgaGFzIGEgZGlmZmVyZW50IG5hbWUuICBVc2UgdGhlIHRlcm0gInJlZ2lzdHJhdGlvbiIgaWYgeW91ciBib3NzIGRvZXNuJ3QKK2xpa2UgInNwb25zb3JpbmciIG9yICJkb25hdGlvbiIuICBUaGUgYmVuZWZpdHMgYXJlIHRoZSBzYW1lLgorCisKK0hvdyBjYW4gSSBzZW5kIG1vbmV5PworCitTZWUgfHNlbmQtbW9uZXl8LiAgQ2hlY2sgdGhlIHdlYiBzaXRlIGZvciB0aGUgbW9zdCByZWNlbnQgaW5mb3JtYXRpb246CitodHRwOi8vd3d3LnZpbS5vcmcvc3BvbnNvci8KKworCitXaHkgZG9uJ3QgeW91IHVzZSB0aGUgU291cmNlRm9yZ2UgZG9uYXRpb24gc3lzdGVtPworCitTb3VyY2VGb3JnZSB0YWtlcyA1JSBvZiB0aGUgZG9uYXRpb25zIGZvciB0aGVtc2VsdmVzLiAgSWYgeW91IHdhbnQgdG8gc3VwcG9ydAorU291cmNlRm9yZ2UgeW91IGNhbiBzZW5kIG1vbmV5IHRvIHRoZW0gZGlyZWN0bHkuCisKKworSSBjYW5ub3QgYWZmb3JkIHRvIHNlbmQgbW9uZXksIG1heSBJIHN0aWxsIHVzZSBWaW0/CisKK1llcy4KKworCitJIGRpZCBub3QgcmVnaXN0ZXIgVmltLCBjYW4gSSB1c2UgYWxsIGF2YWlsYWJsZSBmZWF0dXJlcz8KKworWWVzLgorCisKK0kgbm90aWNlZCBhIGJ1ZywgZG8gSSBuZWVkIHRvIHJlZ2lzdGVyIGJlZm9yZSBJIGNhbiByZXBvcnQgaXQ/CisKK05vLCBzdWdnZXN0aW9ucyBmb3IgaW1wcm92aW5nIFZpbSBjYW4gYWx3YXlzIGJlIGdpdmVuLiAgRm9yIGltcHJvdmVtZW50cyB1c2UKK3RoZSBkZXZlbG9wZXIgfG1haWxsaXN0fCwgZm9yIHJlcG9ydGluZyBidWdzIHNlZSB8YnVnc3wuCisKKworSG93IGFyZSBteSB2b3RlcyBjb3VudGVkPwkJCQkqdm90ZXMtY291bnRlZCoKKworWW91IG1heSB2b3RlIHdoZW4geW91IHNlbmQgMTAgZXVybyBvciBtb3JlLiAgWW91IGNhbiBlbnRlciB1cCB0byB0ZW4gdm90ZXMuCitZb3UgY2FuIHNlbGVjdCB0aGUgc2FtZSBpdGVtIHNldmVyYWwgdGltZXMgdG8gZ2l2ZSBpdCBtb3JlIHBvaW50cy4gIFlvdSBjYW4KK2Fsc28gZW50ZXIgdGhyZWUgY291bnRlciB2b3RlcywgdGhlc2UgY291bnQgYXMgbmVnYXRpdmUgcG9pbnRzLgorCitXaGVuIHlvdSBzZW5kIDMwIGV1cm8gb3IgbW9yZSB0aGUgcG9pbnRzIGFyZSBkb3VibGVkLiAgQWJvdmUgMTAwIGV1cm8gdGhleQorY291bnQgZm91ciB0aW1lcywgYWJvdmUgMzAwIGV1cm8gdGhleSBjb3VudCBzaXggdGltZXMsIGFib3ZlIDEwMDAgZXVybyB0ZW4KK3RpbWVzLgorCisKK0NhbiBJIGNoYW5nZSBteSB2b3Rlcz8KKworWW91IGNhbiBjaGFuZ2UgeW91ciB2b3RlcyBhbnkgdGltZSB5b3UgbGlrZSwgdXAgdG8gdHdvIHllYXJzIGFmdGVyIHlvdQorc2VudCBtb25leS4gIFRoZSBwb2ludHMgd2lsbCBiZSBjb3VudGVkIHJpZ2h0IGF3YXkuCisKKworSG93IGFib3V0IENoYXJpdHl3YXJlPworCitZb3UgaGF2ZSB0byBkZWNpZGUgeW91cnNlbGYgd2hldGhlciB5b3Ugd2FudCB0byBzcG9uc29yIFZpbSBkZXZlbG9wbWVudCwgaGVscAordGhlIHBvb3IgY2hpbGRyZW4gaW4gVWdhbmRhIChzZWUgfHVnYW5kYXwpIG9yIGJvdGguICBCcmFtIHdpbGwgY2VydGFpbmx5IGtlZXAKK29uIHN1cHBvcnRpbmcgdGhlIHByb2plY3QgaW4gVWdhbmRhLiAgSW4gdGhlICh1bmxpa2VseSkgc2l0dWF0aW9uIHRoYXQgQnJhbQorZ2V0cyBtb3JlIGRvbmF0aW9ucyBmb3IgVmltIGRldmVsb3BtZW50IHRoYW4gaGUgbmVlZHMsIGhlIHdpbGwgc2VuZCB0aGUgbW9uZXkKK3RvIFVnYW5kYS4KKworCitJIGRvbmF0ZWQgJCQkLCBub3cgcGxlYXNlIGFkZCBmZWF0dXJlIFhZWiEKKworVGhlcmUgaXMgbm8gZGlyZWN0IHJlbGF0aW9uIGJldHdlZW4geW91ciBkb25hdGlvbiBhbmQgdGhlIHdvcmsgQnJhbSBkb2VzLgorT3RoZXJ3aXNlIHlvdSB3b3VsZCBiZSBwYXlpbmcgZm9yIHdvcmsgYW5kIEJyYW0gaGFzIHRvIHBheSBpbmNvbWUgdGF4IG92ZXIgdGhlCitkb25hdGlvbi4gIElmIHlvdSB3YW50IHRvIGhpcmUgQnJhbSBmb3Igc3BlY2lmaWMgd29yaywgY29udGFjdCBoaW0gZGlyZWN0bHksCitkb24ndCB1c2UgdGhlIGRvbmF0aW9uIHN5c3RlbS4KKworCitBcmUgdGhlIGRvbmF0aW9ucyB0YXggZGVkdWN0YWJsZT8KKworTm8uICBTZXR0aW5nIHVwIGEgc3lzdGVtIGZvciB0aGlzIGlzIGNvbXBsZXggYW5kIGltcG9zZXMgdG9vIG1hbnkgcmVzdHJpY3Rpb25zLgorVGhlIGRvbmF0aW9ucyB0byBoZWxwIHRoZSBjaGlsZHJlbiBpbiB8VWdhbmRhfCBhcmUgdGF4IGRlZHVjdGFibGUgaW4gSG9sbGFuZCwKK0dlcm1hbnksIENhbmFkYSBhbmQgcHJvYmFibHkgYWxzbyBpbiB0aGUgVVNBLgorCisKK0NhbiB5b3Ugc2VuZCBtZSBhIGJpbGw/CisKK1NlbmRpbmcgYSBiaWxsIHdvdWxkIG1lYW4gQnJhbSBkb2VzIHNvbWV0aGluZyBpbiByZXR1cm4gZm9yIHlvdXIgY29udHJpYnV0aW9uLgorVGhhdCBpcyB3b3JrIGFuZCB3b3VsZCBtZWFuIEJyYW0gaGFzIHRvIHBheSBpbmNvbWUgdGF4IG92ZXIgdGhlIGFtb3VudC4gIEl0IGlzCitwb3NzaWJsZSwgYnV0IHRoZSBuZXQgYW1vdW50IHdpbGwgYmUgbG93ZXIuCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3N0YXJ0aW5nLnR4dCBiL3J1bnRpbWUvZG9jL3N0YXJ0aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjBiY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvc3RhcnRpbmcudHh0CkBAIC0wLDAgKzEsMTQxOCBAQAorKnN0YXJ0aW5nLnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAyOAorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1N0YXJ0aW5nIFZpbQkJCQkJCSpzdGFydGluZyoKKworMS4gVmltIGFyZ3VtZW50cwkJfHZpbS1hcmd1bWVudHN8CisyLiBWaW0gb24gdGhlIEFtaWdhCQl8c3RhcnRpbmctYW1pZ2F8CiszLiBSdW5uaW5nIGVWaW0JCQl8ZXZpbS1rZXlzfAorNC4gSW5pdGlhbGl6YXRpb24JCXxpbml0aWFsaXphdGlvbnwKKzUuICRWSU0gYW5kICRWSU1SVU5USU1FCQl8JFZJTXwKKzYuIFN1c3BlbmRpbmcJCQl8c3VzcGVuZHwKKzcuIFNhdmluZyBzZXR0aW5ncwkJfHNhdmUtc2V0dGluZ3N8Cis4LiBWaWV3cyBhbmQgU2Vzc2lvbnMJCXx2aWV3cy1zZXNzaW9uc3wKKzkuIFRoZSB2aW1pbmZvIGZpbGUJCXx2aW1pbmZvLWZpbGV8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gVmltIGFyZ3VtZW50cwkJCQkJKnZpbS1hcmd1bWVudHMqCisKK01vc3Qgb2Z0ZW4sIFZpbSBpcyBzdGFydGVkIHRvIGVkaXQgYSBzaW5nbGUgZmlsZSB3aXRoIHRoZSBjb21tYW5kCisKKwl2aW0gZmlsZW5hbWUJCQkJCSotdmltKgorCitNb3JlIGdlbmVyYWxseSwgVmltIGlzIHN0YXJ0ZWQgd2l0aDoKKworCXZpbSBbb3B0aW9uIHwgZmlsZW5hbWVdIC4uCisKK09wdGlvbiBhcmd1bWVudHMgYW5kIGZpbGUgbmFtZSBhcmd1bWVudHMgY2FuIGJlIG1peGVkLCBhbmQgYW55IG51bWJlciBvZiB0aGVtCitjYW4gYmUgZ2l2ZW4uICBIb3dldmVyLCB3YXRjaCBvdXQgZm9yIG9wdGlvbnMgdGhhdCB0YWtlIGFuIGFyZ3VtZW50LgorCitGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZhcmlvdXMgVmkgdmVyc2lvbnMsIHNlZQl8Y21kbGluZS1hcmd1bWVudHN8LgorCitFeGFjdGx5IG9uZSBvdXQgb2YgdGhlIGZvbGxvd2luZyBmaXZlIGl0ZW1zIG1heSBiZSB1c2VkIHRvIGNob29zZSBob3cgdG8KK3N0YXJ0IGVkaXRpbmc6CisKKwkJCQkJCQkqLWZpbGUqICotLS0qCitmaWxlbmFtZQlPbmUgb3IgbW9yZSBmaWxlIG5hbWVzLiAgVGhlIGZpcnN0IG9uZSB3aWxsIGJlIHRoZSBjdXJyZW50CisJCWZpbGUgYW5kIHJlYWQgaW50byB0aGUgYnVmZmVyLiAgVGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQKKwkJb24gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGJ1ZmZlci4KKwkJVG8gYXZvaWQgYSBmaWxlIG5hbWUgc3RhcnRpbmcgd2l0aCBhICctJyBiZWluZyBpbnRlcnByZXRlZCBhcworCQlhbiBvcHRpb24sIHByZWNlZGUgdGhlIGFyZ2xpc3Qgd2l0aCAiLS0iLCBlLmcuOiA+CisJCQl2aW0gLS0gLWZpbGVuYW1lCis8CQlBbGwgYXJndW1lbnRzIGFmdGVyIHRoZSAiLS0iIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgZmlsZSBuYW1lcywKKwkJbm8gb3RoZXIgb3B0aW9ucyBvciAiK2NvbW1hbmQiIGFyZ3VtZW50IGNhbiBmb2xsb3cuCisKKwkJCQkJCQkqLS0qCistCQlUaGlzIGFyZ3VtZW50IGNhbiBtZWFuIHR3byB0aGluZ3MsIGRlcGVuZGluZyBvbiB3aGV0aGVyIEV4CisJCW1vZGUgaXMgdG8gYmUgdXNlZC4KKworCQlTdGFydGluZyBpbiBOb3JtYWwgbW9kZTogPgorCQkJdmltIC0KKwkJCWV4IC12IC0KKzwJCVN0YXJ0IGVkaXRpbmcgYSBuZXcgYnVmZmVyLCB3aGljaCBpcyBmaWxsZWQgd2l0aCB0ZXh0CisJCXRoYXQgaXMgcmVhZCBmcm9tIHN0ZGluLiAgVGhlIGNvbW1hbmRzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUKKwkJcmVhZCBmcm9tIHN0ZGluIHdpbGwgbm93IGJlIHJlYWQgZnJvbSBzdGRlcnIuICBFeGFtcGxlOiA+CisJCQlmaW5kIC4gLW5hbWUgIiouYyIgLXByaW50IHwgdmltIC0KKzwJCVRoZSBidWZmZXIgd2lsbCBiZSBtYXJrZWQgbW9kaWZpZWQsIGJlY2F1c2UgaXQgY29udGFpbnMgdGV4dAorCQl0aGF0IG5lZWRzIHRvIGJlIHNhdmVkLiAgRXhjZXB0IHdoZW4gaW4gcmVhZG9ubHkgbW9kZSwgdGhlbgorCQl0aGUgYnVmZmVyIGlzIG5vdCBtYXJrZWQgbW9kaWZpZWQuICBFeGFtcGxlOiA+CisJCQlscyB8IHZpZXcgLQorPAorCQlTdGFydGluZyBpbiBFeCBtb2RlOiA+CisJCQlleCAtCisJCQl2aW0gLWUgLQorCQkJZXhpbSAtCisJCQl2aW0gLUUKKzwJCVN0YXJ0IGVkaXRpbmcgaW4gc2lsZW50IG1vZGUuICBTZWUgfC1zLWV4fC4KKworCQkJCQkJCSotdCogKi10YWcqCistdCB7dGFnfQlBIHRhZy4gICJ0YWciIGlzIGxvb2tlZCB1cCBpbiB0aGUgdGFncyBmaWxlLCB0aGUgYXNzb2NpYXRlZAorCQlmaWxlIGJlY29tZXMgdGhlIGN1cnJlbnQgZmlsZSwgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbW1hbmQgaXMKKwkJZXhlY3V0ZWQuICBNb3N0bHkgdGhpcyBpcyB1c2VkIGZvciBDIHByb2dyYW1zLCBpbiB3aGljaCBjYXNlCisJCSJ0YWciIG9mdGVuIGlzIGEgZnVuY3Rpb24gbmFtZS4gIFRoZSBlZmZlY3QgaXMgdGhhdCB0aGUgZmlsZQorCQljb250YWluaW5nIHRoYXQgZnVuY3Rpb24gYmVjb21lcyB0aGUgY3VycmVudCBmaWxlIGFuZCB0aGUKKwkJY3Vyc29yIGlzIHBvc2l0aW9uZWQgb24gdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiAoc2VlCisJCXx0YWdzfCkuCisKKwkJCQkJCQkqLXEqICotcWYqCistcSBbZXJyb3JmaWxlXQlRdWlja0ZpeCBtb2RlLiAgVGhlIGZpbGUgd2l0aCB0aGUgbmFtZSBbZXJyb3JmaWxlXSBpcyByZWFkCisJCWFuZCB0aGUgZmlyc3QgZXJyb3IgaXMgZGlzcGxheWVkLiAgU2VlIHxxdWlja2ZpeHwuCisJCUlmIFtlcnJvcmZpbGVdIGlzIG5vdCBnaXZlbiwgdGhlICdlcnJvcmZpbGUnIG9wdGlvbiBpcyB1c2VkCisJCWZvciB0aGUgZmlsZSBuYW1lLiAgU2VlICdlcnJvcmZpbGUnIGZvciB0aGUgZGVmYXVsdCB2YWx1ZS4KKwkJe25vdCBpbiBWaX0KKworKG5vdGhpbmcpCVdpdGhvdXQgb25lIG9mIHRoZSBmb3VyIGl0ZW1zIGFib3ZlLCBWaW0gd2lsbCBzdGFydCBlZGl0aW5nIGEKKwkJbmV3IGJ1ZmZlci4gIEl0J3MgZW1wdHkgYW5kIGRvZXNuJ3QgaGF2ZSBhIGZpbGUgbmFtZS4KKworCitUaGUgc3RhcnR1cCBtb2RlIGNhbiBiZSBjaGFuZ2VkIGJ5IHVzaW5nIGFub3RoZXIgbmFtZSBpbnN0ZWFkIG9mICJ2aW0iLCB3aGljaAoraXMgZXF1YWwgdG8gZ2l2aW5nIG9wdGlvbnM6CitleAl2aW0gLWUJICAgIFN0YXJ0IGluIEV4IG1vZGUgKHNlZSB8RXgtbW9kZXwpLgkJICAgICpleCoKK2V4aW0JdmltIC1FCSAgICBTdGFydCBpbiBpbXByb3ZlZCBFeCBtb2RlIChzZWUgfEV4LW1vZGV8KS4JICAgICpleGltKgorCQkJKG5vcm1hbGx5IG5vdCBpbnN0YWxsZWQpCit2aWV3CXZpbSAtUgkgICAgU3RhcnQgaW4gcmVhZC1vbmx5IG1vZGUgKHNlZSB8LVJ8KS4JCSAgICAqdmlldyoKK2d2aW0JdmltIC1nCSAgICBTdGFydCB0aGUgR1VJIChzZWUgfGd1aXwpLgkJCSAgICAqZ3ZpbSoKK2dleAl2aW0gLWVnCSAgICBTdGFydCB0aGUgR1VJIGluIEV4IG1vZGUuCQkJICAgICpnZXgqCitndmlldwl2aW0gLVJnCSAgICBTdGFydCB0aGUgR1VJIGluIHJlYWQtb25seSBtb2RlLgkJICAgICpndmlldyoKK3J2aW0JdmltIC1aCSAgICBMaWtlICJ2aW0iLCBidXQgaW4gcmVzdHJpY3RlZCBtb2RlIChzZWUgfC1afCkgICAqcnZpbSoKK3J2aWV3CXZpbSAtUloJICAgIExpa2UgInZpZXciLCBidXQgaW4gcmVzdHJpY3RlZCBtb2RlLgkgICAgKnJ2aWV3Kgorcmd2aW0JdmltIC1nWgkgICAgTGlrZSAiZ3ZpbSIsIGJ1dCBpbiByZXN0cmljdGVkIG1vZGUuCSAgICAqcmd2aW0qCityZ3ZpZXcJdmltIC1SZ1ogICAgTGlrZSAiZ3ZpZXciLCBidXQgaW4gcmVzdHJpY3RlZCBtb2RlLgkgICAgKnJndmlldyoKK2V2aW0gICAgdmltIC15ICAgICAgRWFzeSBWaW06IHNldCAnaW5zZXJ0bW9kZScgKHNlZSB8LXl8KQkgICAgKmV2aW0qCitldmlldyAgIHZpbSAteVIgICAgIExpa2UgImV2aW0iIGluIHJlYWQtb25seSBtb2RlCQkgICAgKmV2aWV3KgordmltZGlmZiB2aW0gLWQJICAgIFN0YXJ0IGluIGRpZmYgbW9kZSB8ZGlmZi1tb2RlfAorZ3ZpbWRpZmYgdmltIC1nZCAgICBTdGFydCBpbiBkaWZmIG1vZGUgfGRpZmYtbW9kZXwKKworQWRkaXRpb25hbCBjaGFyYWN0ZXJzIG1heSBmb2xsb3csIHRoZXkgYXJlIGlnbm9yZWQuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBoYXZlCisiZ3ZpbS01IiB0byBzdGFydCB0aGUgR1VJLiAgWW91IG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJ5IHRoYXQgbmFtZSB0aGVuLCBvZgorY291cnNlLgorCitPbiBVbml4LCB5b3Ugd291bGQgbm9ybWFsbHkgaGF2ZSBvbmUgZXhlY3V0YWJsZSBjYWxsZWQgVmltLCBhbmQgbGlua3MgZnJvbSB0aGUKK2RpZmZlcmVudCBzdGFydHVwLW5hbWVzIHRvIHRoYXQgZXhlY3V0YWJsZS4gIElmIHlvdXIgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQKK2xpbmtzIGFuZCB5b3UgZG8gbm90IHdhbnQgdG8gaGF2ZSBzZXZlcmFsIGNvcGllcyBvZiB0aGUgZXhlY3V0YWJsZSwgeW91IGNvdWxkCit1c2UgYW4gYWxpYXMgaW5zdGVhZC4gIEZvciBleGFtcGxlOiA+CisJYWxpYXMgdmlldyAgIHZpbSAtUgorCWFsaWFzIGd2aW0gICB2aW0gLWcKKzwKKwkJCQkJCQkqc3RhcnR1cC1vcHRpb25zKgorVGhlIG9wdGlvbiBhcmd1bWVudHMgbWF5IGJlIGdpdmVuIGluIGFueSBvcmRlci4gIFNpbmdsZS1sZXR0ZXIgb3B0aW9ucyBjYW4gYmUKK2NvbWJpbmVkIGFmdGVyIG9uZSBkYXNoLiAgVGhlcmUgY2FuIGJlIG5vIG9wdGlvbiBhcmd1bWVudHMgYWZ0ZXIgdGhlICItLSIKK2FyZ3VtZW50LgorCitPbiBWTVMgYWxsIG9wdGlvbiBhcmd1bWVudHMgYXJlIGFzc3VtZWQgdG8gYmUgbG93ZXJjYXNlLCB1bmxlc3MgcHJlY2VkZWQgd2l0aAorYSBzbGFzaC4gIFRodXMgIi1SIiBtZWFucyByZWNvdmVyeSBhbmQgIi0vUiIgcmVhZG9ubHkuCisKKy0taGVscAkJCQkJCQkqLWgqICotLWhlbHAqCistaAkJR2l2ZSB1c2FnZSAoaGVscCkgbWVzc2FnZSBhbmQgZXhpdC4gIHtub3QgaW4gVml9CisJCVNlZSB8aW5mby1tZXNzYWdlfCBhYm91dCBjYXB0dXJpbmcgdGhlIHRleHQuCisKKwkJCQkJCQkqLS12ZXJzaW9uKgorLS12ZXJzaW9uCVByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuICBTYW1lIG91dHB1dCBhcyBmb3IKKwkJfDp2ZXJzaW9ufCBjb21tYW5kLiAge25vdCBpbiBWaX0KKwkJU2VlIHxpbmZvLW1lc3NhZ2V8IGFib3V0IGNhcHR1cmluZyB0aGUgdGV4dC4KKworCQkJCQkJCSotLW5vcGx1Z2luKgorLS1ub3BsdWdpbglTa2lwIGxvYWRpbmcgcGx1Z2lucy4gIFJlc2V0cyB0aGUgJ2xvYWRwbHVnaW5zJyBvcHRpb24uCisJCXtub3QgaW4gVml9CisJCU5vdGUgdGhhdCB0aGUgfC11fCBhcmd1bWVudCBtYXkgYWxzbyBkaXNhYmxlIGxvYWRpbmcgcGx1Z2luczoKKwkJCWFyZ3VtZW50CWxvYWQgdmltcmMgZmlsZXMJbG9hZCBwbHVnaW5zIH4KKwkJCShub3RoaW5nKQkJeWVzCQkgICAgeWVzCisJCQktdSBOT05FCQkJbm8JCSAgICBubworCQkJLXUgTk9SQwkJCW5vCQkgICAgeWVzCisJCQktLW5vcGx1Z2luCQl5ZXMJCSAgICBubworCisJCQkJCQkJKi0tbGl0ZXJhbCoKKy0tbGl0ZXJhbAlUYWtlIGZpbGUgbmFtZXMgbGl0ZXJhbGx5LCBkb24ndCBleHBhbmQgd2lsZGNhcmRzLiAgTm90IG5lZWRlZAorCQlmb3IgVW5peCwgYmVjYXVzZSBWaW0gYWx3YXlzIHRha2VzIGZpbGUgbmFtZXMgbGl0ZXJhbGx5ICh0aGUKKwkJc2hlbGwgZXhwYW5kcyB3aWxkY2FyZHMpLgorCQlBcHBsaWVzIHRvIGFsbCB0aGUgbmFtZXMsIGFsc28gdGhlIG9uZXMgdGhhdCBjb21lIGJlZm9yZSB0aGlzCisJCWFyZ3VtZW50LgorCisJCQkJCQkJKi0rKgorK1tudW1dCQlUaGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBvbiBsaW5lICJudW0iIGZvciB0aGUgZmlyc3QKKwkJZmlsZSBiZWluZyBlZGl0ZWQuICBJZiAibnVtIiBpcyBtaXNzaW5nLCB0aGUgY3Vyc29yIHdpbGwgYmUKKwkJcG9zaXRpb25lZCBvbiB0aGUgbGFzdCBsaW5lLgorCisJCQkJCQkJKi0rLyoKKysve3BhdH0JCVRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIG9uIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5pbmcKKwkJInBhdCIgaW4gdGhlIGZpcnN0IGZpbGUgYmVpbmcgZWRpdGVkIChzZWUgfHBhdHRlcm58IGZvciB0aGUKKwkJYXZhaWxhYmxlIHNlYXJjaCBwYXR0ZXJucykuCisKKyt7Y29tbWFuZH0JCQkJCQkqLStjKiAqLWMqCistYyB7Y29tbWFuZH0Je2NvbW1hbmR9IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZpcnN0IGZpbGUgaGFzIGJlZW4KKwkJcmVhZCAoYW5kIGFmdGVyIGF1dG9jb21tYW5kcyBhbmQgbW9kZWxpbmVzIGZvciB0aGF0IGZpbGUgaGF2ZQorCQliZWVuIHByb2Nlc3NlZCkuICAiY29tbWFuZCIgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gRXggY29tbWFuZC4KKwkJSWYgdGhlICJjb21tYW5kIiBjb250YWlucyBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4KKwkJZG91YmxlIHF1b3RlcyAodGhpcyBkZXBlbmRzIG9uIHRoZSBzaGVsbCB0aGF0IGlzIHVzZWQpLgorCQlFeGFtcGxlOiA+CisJCQl2aW0gICIrc2V0IHNpIiAgbWFpbi5jCisJCQl2aW0gICIrZmluZCBzdGRpby5oIgorCQkJdmltICAtYyAic2V0IGZmPWRvcyIgIC1jIHdxICBtaW5lLm1haworPAorCQlOb3RlOiBZb3UgY2FuIHVzZSB1cCB0byAxMCAiKyIgb3IgIi1jIiBhcmd1bWVudHMgaW4gYSBWaW0KKwkJY29tbWFuZC4gIFRoZXkgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciBnaXZlbi4gIEEgIi1TIgorCQlhcmd1bWVudCBjb3VudHMgYXMgYSAiLWMiIGFyZ3VtZW50IGFzIHdlbGwuCisJCXtWaSBvbmx5IGFsbG93cyBvbmUgY29tbWFuZH0KKworLS1jbWQge2NvbW1hbmR9CQkJCQkJKi0tY21kKgorCQl7Y29tbWFuZH0gd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgcHJvY2Vzc2luZyBhbnkgdmltcmMgZmlsZS4KKwkJT3RoZXJ3aXNlIGl0IGFjdHMgbGlrZSAtYyB7Y29tbWFuZH0uICBZb3UgY2FuIHVzZSB1cCB0byAxMCBvZgorCQl0aGVzZSBjb21tYW5kcywgaW5kZXBlbmRlbnRseSBmcm9tICItYyIgY29tbWFuZHMuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLVMqCistUyB7ZmlsZX0JVGhlIHtmaWxlfSB3aWxsIGJlIHNvdXJjZWQgYWZ0ZXIgdGhlIGZpcnN0IGZpbGUgaGFzIGJlZW4gcmVhZC4KKwkJVGhpcyBpcyBhbiBlYXN5IHdheSB0byBkbyB0aGUgZXF1aXZhbGVudCBvZjogPgorCQkJLWMgInNvdXJjZSB7ZmlsZX0iCis8CQlJdCBjYW4gYmUgbWl4ZWQgd2l0aCAiLWMiIGFyZ3VtZW50cyBhbmQgcmVwZWF0ZWQgbGlrZSAiLWMiLgorCQlUaGUgbGltaXQgb2YgMTAgIi1jIiBhcmd1bWVudHMgYXBwbGllcyBoZXJlIGFzIHdlbGwuCisJCXtmaWxlfSBjYW5ub3Qgc3RhcnQgd2l0aCBhICItIi4KKwkJe25vdCBpbiBWaX0KKworLVMJCVdvcmtzIGxpa2UgIi1TIFNlc3Npb24udmltIi4gIE9ubHkgd2hlbiB1c2VkIGFzIHRoZSBsYXN0CisJCWFyZ3VtZW50IG9yIHdoZW4gYW5vdGhlciAiLSIgb3B0aW9uIGZvbGxvd3MuCisKKwkJCQkJCQkqLXIqCistcgkJUmVjb3ZlcnkgbW9kZS4gIFdpdGhvdXQgYSBmaWxlIG5hbWUgYXJndW1lbnQsIGEgbGlzdCBvZgorCQlleGlzdGluZyBzd2FwIGZpbGVzIGlzIGdpdmVuLiAgV2l0aCBhIGZpbGUgbmFtZSwgYSBzd2FwIGZpbGUKKwkJaXMgcmVhZCB0byByZWNvdmVyIGEgY3Jhc2hlZCBlZGl0aW5nIHNlc3Npb24uICBTZWUKKwkJfGNyYXNoLXJlY292ZXJ5fC4KKworCQkJCQkJCSotTCoKKy1MCQlTYW1lIGFzIC1yLiAge29ubHkgaW4gc29tZSB2ZXJzaW9ucyBvZiBWaTogIkxpc3QgcmVjb3ZlcmFibGUKKwkJZWRpdCBzZXNzaW9ucyJ9CisKKwkJCQkJCQkqLVIqCistUgkJUmVhZG9ubHkgbW9kZS4gIFRoZSAncmVhZG9ubHknIG9wdGlvbiB3aWxsIGJlIHNldCBmb3IgYWxsIHRoZQorCQlmaWxlcyBiZWluZyBlZGl0ZWQuICBZb3UgY2FuIHN0aWxsIGVkaXQgdGhlIGJ1ZmZlciwgYnV0IHdpbGwKKwkJYmUgcHJldmVudGVkIGZyb20gYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGEgZmlsZS4gIElmIHlvdQorCQlmb3Jnb3QgdGhhdCB5b3UgYXJlIGluIFZpZXcgbW9kZSBhbmQgZGlkIG1ha2Ugc29tZSBjaGFuZ2VzLAorCQl5b3UgY2FuIG92ZXJ3cml0ZSBhIGZpbGUgYnkgYWRkaW5nIGFuIGV4Y2xhbWF0aW9uIG1hcmsgdG8KKwkJdGhlIEV4IGNvbW1hbmQsIGFzIGluICI6dyEiLiAgVGhlICdyZWFkb25seScgb3B0aW9uIGNhbiBiZQorCQlyZXNldCB3aXRoICI6c2V0IG5vcm8iIChzZWUgdGhlIG9wdGlvbnMgY2hhcHRlciwgfG9wdGlvbnN8KS4KKwkJU3Vic2VxdWVudCBlZGl0cyB3aWxsIG5vdCBiZSBkb25lIGluIHJlYWRvbmx5IG1vZGUuICBDYWxsaW5nCisJCXRoZSBleGVjdXRhYmxlICJ2aWV3IiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSAtUiBhcmd1bWVudC4KKwkJVGhlICd1cGRhdGVjb3VudCcgb3B0aW9uIHdpbGwgYmUgc2V0IHRvIDEwMDAwLCBtZWFuaW5nIHRoYXQKKwkJdGhlIHN3YXAgZmlsZSB3aWxsIG5vdCBiZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgdmVyeSBvZnRlbi4KKworCQkJCQkJCSotbSoKKy1tCQlNb2RpZmljYXRpb25zIG5vdCBhbGxvd2VkIHRvIGJlIHdyaXR0ZW4uICBUaGUgJ3dyaXRlJyBvcHRpb24KKwkJd2lsbCBiZSByZXNldCwgc28gdGhhdCB3cml0aW5nIGZpbGVzIGlzIGRpc2FibGVkLiAgSG93ZXZlciwKKwkJdGhlICd3cml0ZScgb3B0aW9uIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHdyaXRpbmcgYWdhaW4uCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLU0qCistTQkJTW9kaWZpY2F0aW9ucyBub3QgYWxsb3dlZC4gIFRoZSAnbW9kaWZpYWJsZScgb3B0aW9uIHdpbGwgYmUKKwkJcmVzZXQsIHNvIHRoYXQgY2hhbmdlcyBhcmUgbm90IGFsbG93ZWQuICBUaGUgJ3dyaXRlJyBvcHRpb24KKwkJd2lsbCBiZSByZXNldCwgc28gdGhhdCB3cml0aW5nIGZpbGVzIGlzIGRpc2FibGVkLiAgSG93ZXZlciwKKwkJdGhlICdtb2RpZmlhYmxlJyBhbmQgJ3dyaXRlJyBvcHRpb25zIGNhbiBiZSBzZXQgdG8gZW5hYmxlCisJCWNoYW5nZXMgYW5kIHdyaXRpbmcuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCSotWiogKnJlc3RyaWN0ZWQtbW9kZSogKkUxNDUqCistWgkJUmVzdHJpY3RlZCBtb2RlLiAgQWxsIGNvbW1hbmRzIHRoYXQgbWFrZSB1c2Ugb2YgYW4gZXh0ZXJuYWwKKwkJc2hlbGwgYXJlIGRpc2FibGVkLiAgVGhpcyBpbmNsdWRlcyBzdXNwZW5kaW5nIHdpdGggQ1RSTC1aLAorCQkiOnNoIiwgZmlsdGVyaW5nLCB0aGUgc3lzdGVtKCkgZnVuY3Rpb24sIGJhY2t0aWNrIGV4cGFuc2lvbiwKKwkJZXRjLgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1nKgorLWcJCVN0YXJ0IFZpbSBpbiBHVUkgbW9kZS4gIFNlZSB8Z3VpfC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqLXYqCistdgkJU3RhcnQgRXggaW4gVmkgbW9kZS4gIE9ubHkgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4gdGhlCisJCWV4ZWN1dGFibGUgaXMgY2FsbGVkICJleCIgb3IgImd2aW0iLiAgRm9yIGd2aW0gdGhlIEdVSSBpcyBub3QKKwkJc3RhcnRlZCBpZiBwb3NzaWJsZS4KKworCQkJCQkJCSotZSoKKy1lCQlTdGFydCBWaW0gaW4gRXggbW9kZSB8UXwuICBPbmx5IG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHRoZQorCQlleGVjdXRhYmxlIGlzIG5vdCBjYWxsZWQgImV4Ii4KKworCQkJCQkJCSotRSoKKy1FCQlTdGFydCBWaW0gaW4gaW1wcm92ZWQgRXggbW9kZSB8Z1F8LiAgT25seSBtYWtlcyBhIGRpZmZlcmVuY2UKKwkJd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBub3QgY2FsbGVkICJleGltIi4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotcy1leCoKKy1zCQlTaWxlbnQgb3IgYmF0Y2ggbW9kZS4gIE9ubHkgd2hlbiBWaW0gd2FzIHN0YXJ0ZWQgYXMgImV4IiBvcgorCQl3aGVuIHByZWNlZGVkIHdpdGggdGhlICItZSIgYXJndW1lbnQuICBPdGhlcndpc2Ugc2VlIHwtc3wsCisJCXdoaWNoIGRvZXMgdGFrZSBhbiBhcmd1bWVudCB3aGlsZSB0aGlzIHVzZSBvZiAiLXMiIGRvZXNuJ3QuCisJCVRvIGJlIHVzZWQgd2hlbiBWaW0gaXMgdXNlZCB0byBleGVjdXRlIEV4IGNvbW1hbmRzIGZyb20gYSBmaWxlCisJCWluc3RlYWQgb2YgYSB0ZXJtaW5hbC4gIFN3aXRjaGVzIG9mZiBtb3N0IHByb21wdHMgYW5kCisJCWluZm9ybWF0aXZlIG1lc3NhZ2VzLiAgQWxzbyB3YXJuaW5ncyBhbmQgZXJyb3IgbWVzc2FnZXMuCisJCUJ1dCAiOnByaW50IiBvdXRwdXQgaXMgZGlzcGxheWVkLiAgQW5kIHdoZW4gJ3ZlcmJvc2UnIGlzCisJCW5vbi16ZXJvIG1lc3NhZ2VzIGFyZSBwcmludGVkIChmb3IgZGVidWdnaW5nKS4KKwkJSWYgVmltIGFwcGVhcnMgdG8gYmUgc3R1Y2sgdHJ5IHR5cGluZyAicWEhPEVudGVyPiIuICBZb3UgZG9uJ3QKKwkJZ2V0IGEgcHJvbXB0IHRodXMgeW91IGNhbid0IHNlZSBWaW0gaXMgd2FpdGluZyBmb3IgeW91IHRvIHR5cGUKKwkJc29tZXRoaW5nLgorCQlJbml0aWFsaXphdGlvbnMgYXJlIHNraXBwZWQgKGV4Y2VwdCB0aGUgb25lcyBnaXZlbiB3aXRoIHRoZQorCQkiLXUiIGFyZ3VtZW50KS4KKwkJRXhhbXBsZTogPgorCQkJdmltIC1lIC1zICA8IHRoZWZpbHRlciAgdGhlZmlsZQorPAorCQkJCQkJCSotYioKKy1iCQlCaW5hcnkgbW9kZS4gIEZpbGUgSS9PIHdpbGwgb25seSByZWNvZ25pemUgPE5MPiB0byBzZXBhcmF0ZQorCQlsaW5lcy4gVGhlICdleHBhbmR0YWInIG9wdGlvbiB3aWxsIGJlIHJlc2V0LiAgVGhlICd0ZXh0d2lkdGgnCisJCW9wdGlvbiBpcyBzZXQgdG8gMC4gICdtb2RlbGluZScgaXMgcmVzZXQuICBUaGUgJ2JpbmFyeScgb3B0aW9uCisJCWlzIHNldC4gIFRoaXMgaXMgZG9uZSBhZnRlciByZWFkaW5nIHRoZSB2aW1yYy9leHJjIGZpbGVzIGJ1dAorCQliZWZvcmUgcmVhZGluZyBhbnkgZmlsZSBpbiB0aGUgYXJnbGlzdC4gIFNlZSBhbHNvCisJCXxlZGl0LWJpbmFyeXwuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi1sKgorLWwJCUxpc3AgbW9kZS4gIFNldHMgdGhlICdsaXNwJyBhbmQgJ3Nob3dtYXRjaCcgb3B0aW9ucyBvbi4KKworCQkJCQkJCSotQSoKKy1BCQlBcmFiaWMgbW9kZS4gIFNldHMgdGhlICdhcmFiaWMnIG9wdGlvbiBvbi4gIChPbmx5IHdoZW4KKwkJY29tcGlsZWQgd2l0aCB0aGUgfCthcmFiaWN8IGZlYXR1cmVzICh3aGljaCBpbmNsdWRlCisJCXwrcmlnaHRsZWZ0fCksIG90aGVyd2lzZSBWaW0gZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZQorCQlhbmQgZXhpdHMuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi1GKgorLUYJCUZhcnNpIG1vZGUuICBTZXRzIHRoZSAnZmttYXAnIGFuZCAncmlnaHRsZWZ0JyBvcHRpb25zIG9uLgorCQkoT25seSB3aGVuIGNvbXBpbGVkIHdpdGggfCtyaWdodGxlZnR8IGFuZCB8K2ZhcnNpfCBmZWF0dXJlcywKKwkJb3RoZXJ3aXNlIFZpbSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGFuZCBleGl0cykuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi1IKgorLUgJCUhlYnJldyBtb2RlLiAgU2V0cyB0aGUgJ2hrbWFwJyBhbmQgJ3JpZ2h0bGVmdCcgb3B0aW9ucyBvbi4KKwkJKE9ubHkgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwgZmVhdHVyZSwgb3RoZXJ3aXNlCisJCVZpbSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGFuZCBleGl0cykuICB7bm90IGluIFZpfQorCisJCQkJCQkJKi1WKiAqdmVyYm9zZSoKKy1WW05dCQlWZXJib3NlLiAgU2V0cyB0aGUgJ3ZlcmJvc2UnIG9wdGlvbiB0byBbTl0gKGRlZmF1bHQ6IDEwKS4KKwkJTWVzc2FnZXMgd2lsbCBiZSBnaXZlbiBmb3IgZWFjaCBmaWxlIHRoYXQgaXMgIjpzb3VyY2UiZCBhbmQKKwkJZm9yIHJlYWRpbmcgb3Igd3JpdGluZyBhIHZpbWluZm8gZmlsZS4gIENhbiBiZSB1c2VkIHRvIGZpbmQKKwkJb3V0IHdoYXQgaXMgaGFwcGVuaW5nIHVwb24gc3RhcnR1cCBhbmQgZXhpdC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqLUQqCistRAkJRGVidWdnaW5nLiAgR28gdG8gZGVidWdnaW5nIG1vZGUgd2hlbiBleGVjdXRpbmcgdGhlIGZpcnN0CisJCWNvbW1hbmQgZnJvbSBhIHNjcmlwdC4gfGRlYnVnLW1vZGV8CisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtldmFsfCBmZWF0dXJlfQorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1DKgorLUMJCUNvbXBhdGlibGUgbW9kZS4gIFNldHMgdGhlICdjb21wYXRpYmxlJyBvcHRpb24uICBZb3UgY2FuIHVzZQorCQl0aGlzIHRvIGdldCAnY29tcGF0aWJsZScsIGV2ZW4gdGhvdWdoIGEgLnZpbXJjIGZpbGUgZXhpc3RzLgorCQlCdXQgdGhlIGNvbW1hbmQgIjpzZXQgbm9jb21wYXRpYmxlIiBvdmVycnVsZXMgaXQgYW55d2F5LgorCQlBbHNvIHNlZSB8Y29tcGF0aWJsZS1kZWZhdWx0fC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqLU4qCistTgkJTm90IGNvbXBhdGlibGUgbW9kZS4gIFJlc2V0cyB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbi4gIFlvdSBjYW4KKwkJdXNlIHRoaXMgdG8gZ2V0ICdub2NvbXBhdGlibGUnLCB3aGVuIHRoZXJlIGlzIG5vIC52aW1yYyBmaWxlLgorCQlBbHNvIHNlZSB8Y29tcGF0aWJsZS1kZWZhdWx0fC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqLXkqICplYXN5KgorLXkJCUVhc3kgbW9kZS4gIEltcGxpZWQgZm9yIHxldmltfCBhbmQgfGV2aWV3fC4gIFN0YXJ0cyB3aXRoCisJCSdpbnNlcnRtb2RlJyBzZXQgYW5kIGJlaGF2ZXMgbGlrZSBhIGNsaWNrLWFuZC10eXBlIGVkaXRvci4KKwkJVGhpcyBzb3VyY2VzIHRoZSBzY3JpcHQgJFZJTVJVTlRJTUUvZXZpbS52aW0uICBNYXBwaW5ncyBhcmUKKwkJc2V0IHVwIHRvIHdvcmsgbGlrZSBtb3N0IGNsaWNrLWFuZC10eXBlIGVkaXRvcnMsIHNlZQorCQl8ZXZpbS1rZXlzfC4gIFRoZSBHVUkgaXMgc3RhcnRlZCB3aGVuIGF2YWlsYWJsZS4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotbioKKy1uCQlObyBzd2FwIGZpbGUgd2lsbCBiZSB1c2VkLiAgUmVjb3ZlcnkgYWZ0ZXIgYSBjcmFzaCB3aWxsIGJlCisJCWltcG9zc2libGUuICBIYW5keSBpZiB5b3Ugd2FudCB0byB2aWV3IG9yIGVkaXQgYSBmaWxlIG9uIGEKKwkJdmVyeSBzbG93IG1lZGl1bSAoZS5nLiwgYSBmbG9wcHkpLgorCQlDYW4gYWxzbyBiZSBkb25lIHdpdGggIjpzZXQgdXBkYXRlY291bnQ9MCIuICBZb3UgY2FuIHN3aXRjaCBpdAorCQlvbiBhZ2FpbiBieSBzZXR0aW5nIHRoZSAndXBkYXRlY291bnQnIG9wdGlvbiB0byBzb21lIHZhbHVlLAorCQllLmcuLCAiOnNldCB1Yz0xMDAiLgorCQkndXBkYXRlY291bnQnIGlzIHNldCB0byAwIEFGVEVSIGV4ZWN1dGluZyBjb21tYW5kcyBmcm9tIGEKKwkJdmltcmMgZmlsZSwgYnV0IGJlZm9yZSB0aGUgR1VJIGluaXRpYWxpemF0aW9ucy4gIFRodXMgaXQKKwkJb3ZlcnJpZGVzIGEgc2V0dGluZyBmb3IgJ3VwZGF0ZWNvdW50JyBpbiBhIHZpbXJjIGZpbGUsIGJ1dCBub3QKKwkJaW4gYSBndmltcmMgZmlsZS4gIFNlZSB8c3RhcnR1cHwuCisJCVdoZW4geW91IHdhbnQgdG8gcmVkdWNlIGFjY2Vzc2VzIHRvIHRoZSBkaXNrIChlLmcuLCBmb3IgYQorCQlsYXB0b3ApLCBkb24ndCB1c2UgIi1uIiwgYnV0IHNldCAndXBkYXRldGltZScgYW5kCisJCSd1cGRhdGVjb3VudCcgdG8gdmVyeSBiaWcgbnVtYmVycywgYW5kIHR5cGUgIjpwcmVzZXJ2ZSIgd2hlbgorCQl5b3Ugd2FudCB0byBzYXZlIHlvdXIgd29yay4gIFRoaXMgd2F5IHlvdSBrZWVwIHRoZSBwb3NzaWJpbGl0eQorCQlmb3IgY3Jhc2ggcmVjb3ZlcnkuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLW8qCistb1tOXQkJT3BlbiBOIHdpbmRvd3MsIHNwbGl0IGhvcml6b250YWxseS4gIElmIFtOXSBpcyBub3QgZ2l2ZW4sCisJCW9uZSB3aW5kb3cgaXMgb3BlbmVkIGZvciBldmVyeSBmaWxlIGdpdmVuIGFzIGFyZ3VtZW50LiAgSWYKKwkJdGhlcmUgaXMgbm90IGVub3VnaCByb29tLCBvbmx5IHRoZSBmaXJzdCBmZXcgZmlsZXMgZ2V0IGEKKwkJd2luZG93LiAgSWYgdGhlcmUgYXJlIG1vcmUgd2luZG93cyB0aGFuIGFyZ3VtZW50cywgdGhlIGxhc3QKKwkJZmV3IHdpbmRvd3Mgd2lsbCBiZSBlZGl0aW5nIGFuIGVtcHR5IGZpbGUuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLU8qCistT1tOXQkJT3BlbiBOIHdpbmRvd3MsIHNwbGl0IHZlcnRpY2FsbHkuICBPdGhlcndpc2UgaXQncyBsaWtlIC1vLgorCQlJZiBib3RoIHRoZSAtbyBhbmQgdGhlIC1PIG9wdGlvbiBhcmUgZ2l2ZW4sIHRoZSBsYXN0IG9uZSBvbgorCQl0aGUgY29tbWFuZCBsaW5lIGRldGVybWluZXMgaG93IHRoZSB3aW5kb3dzIHdpbGwgYmUgc3BsaXQuCisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLVQqCistVCB7dGVybWluYWx9CVNldCB0aGUgdGVybWluYWwgdHlwZSB0byAidGVybWluYWwiLiAgVGhpcyBpbmZsdWVuY2VzIHRoZQorCQljb2RlcyB0aGF0IFZpbSB3aWxsIHNlbmQgdG8geW91ciB0ZXJtaW5hbC4gIFRoaXMgaXMgbm9ybWFsbHkKKwkJbm90IG5lZWRlZCwgYmVjYXVzZSBWaW0gd2lsbCBiZSBhYmxlIHRvIGZpbmQgb3V0IHdoYXQgdHlwZQorCQlvZiB0ZXJtaW5hbCB5b3UgYXJlIHVzaW5nIChTZWUgfHRlcm1pbmFsLWluZm98KS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqLWQqCistZAkJU3RhcnQgaW4gZGlmZiBtb2RlLCBsaWtlIHx2aW1kaWZmfC4KKwkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2RpZmZ8CisJCWZlYXR1cmV9CisKKy1kIHtkZXZpY2V9CU9ubHkgb24gdGhlIEFtaWdhIGFuZCB3aGVuIG5vdCBjb21waWxlZCB3aXRoIHRoZSB8K2RpZmZ8CisJCWZlYXR1cmUuICBXb3JrcyBsaWtlICItZGV2Ii4KKwkJCQkJCQkqLWRldioKKy1kZXYge2RldmljZX0JT25seSBvbiB0aGUgQW1pZ2E6IFRoZSB7ZGV2aWNlfSBpcyBvcGVuZWQgdG8gYmUgdXNlZCBmb3IKKwkJZWRpdGluZy4KKwkJTm9ybWFsbHkgeW91IHdvdWxkIHVzZSB0aGlzIHRvIHNldCB0aGUgd2luZG93IHBvc2l0aW9uIGFuZAorCQlzaXplOiAiLWQgY29uOngveS93aWR0aC9oZWlnaHQiLCBlLmcuLAorCQkiLWQgY29uOjMwLzEwLzYwMC8xNTAiLiAgQnV0IHlvdSBjYW4gYWxzbyB1c2UgaXQgdG8gc3RhcnQKKwkJZWRpdGluZyBvbiBhbm90aGVyIGRldmljZSwgZS5nLiwgQVVYOi4gIHtub3QgaW4gVml9CisJCQkJCQkJKi1mKgorLWYJCUFtaWdhOiBEbyBub3QgcmVzdGFydCBWaW0gdG8gb3BlbiBhIG5ldyB3aW5kb3cuICBUaGlzCisJCW9wdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuIFZpbSBpcyBzdGFydGVkIGJ5IGEgcHJvZ3JhbSB0aGF0CisJCXdpbGwgd2FpdCBmb3IgdGhlIGVkaXQgc2Vzc2lvbiB0byBmaW5pc2ggKGUuZy4sIG1haWwgb3IKKwkJcmVhZG5ld3MpLiAgU2VlIHxhbWlnYS13aW5kb3d8LgorCisJCUdVSTogRG8gbm90IGRpc2Nvbm5lY3QgZnJvbSB0aGUgcHJvZ3JhbSB0aGF0IHN0YXJ0ZWQgVmltLgorCQknZicgc3RhbmRzIGZvciAiZm9yZWdyb3VuZCIuICBJZiBvbWl0dGVkLCB0aGUgR1VJIGZvcmtzIGEgbmV3CisJCXByb2Nlc3MgYW5kIGV4aXRzIHRoZSBjdXJyZW50IG9uZS4gICItZiIgc2hvdWxkIGJlIHVzZWQgd2hlbgorCQlndmltIGlzIHN0YXJ0ZWQgYnkgYSBwcm9ncmFtIHRoYXQgd2lsbCB3YWl0IGZvciB0aGUgZWRpdAorCQlzZXNzaW9uIHRvIGZpbmlzaCAoZS5nLiwgbWFpbCBvciByZWFkbmV3cykuICBJZiB5b3Ugd2FudCBndmltCisJCW5ldmVyIHRvIGZvcmssIGluY2x1ZGUgJ2YnIGluICdndWlvcHRpb25zJyBpbiB5b3VyIC5ndmltcmMuCisJCUNhcmVmdWw6IFlvdSBjYW4gdXNlICItZ2YiIHRvIHN0YXJ0IHRoZSBHVUkgaW4gdGhlIGZvcmVncm91bmQsCisJCWJ1dCAiLWZnIiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGZvcmVncm91bmQgY29sb3IuICB8Z3VpLWZvcmt8CisJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqLS1ub2ZvcmsqCistLW5vZm9yawlHVUk6IERvIG5vdCBmb3JrLiAgU2FtZSBhcyB8LWZ8LgorCQkJCQkJCSotdSogKkUyODIqCistdSB7dmltcmN9CVRoZSBmaWxlIHt2aW1yY30gaXMgcmVhZCBmb3IgaW5pdGlhbGl6YXRpb25zLiAgTW9zdCBvdGhlcgorCQlpbml0aWFsaXphdGlvbnMgYXJlIHNraXBwZWQ7IHNlZSB8aW5pdGlhbGl6YXRpb258LiAgVGhpcyBjYW4KKwkJYmUgdXNlZCB0byBzdGFydCBWaW0gaW4gYSBzcGVjaWFsIG1vZGUsIHdpdGggc3BlY2lhbAorCQltYXBwaW5ncyBhbmQgc2V0dGluZ3MuICBBIHNoZWxsIGFsaWFzIGNhbiBiZSB1c2VkIHRvIG1ha2UKKwkJdGhpcyBlYXN5IHRvIHVzZS4gIEZvciBleGFtcGxlOiA+CisJCQlhbGlhcyB2aW1jIHZpbSAtdSB+Ly5jX3ZpbXJjICEqCis8CQlBbHNvIGNvbnNpZGVyIHVzaW5nIGF1dG9jb21tYW5kczsgc2VlIHxhdXRvY29tbWFuZHwuCisJCVdoZW4ge3ZpbXJjfSBpcyBlcXVhbCB0byAiTk9ORSIgKGFsbCB1cHBlcmNhc2UpLCBhbGwKKwkJaW5pdGlhbGl6YXRpb25zIGZyb20gZmlsZXMgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKwkJc2tpcHBlZCwgaW5jbHVkaW5nIHJlYWRpbmcgdGhlIC5ndmltcmMgZmlsZSB3aGVuIHRoZSBHVUkKKwkJc3RhcnRzLiAgTG9hZGluZyBwbHVnaW5zIGlzIGFsc28gc2tpcHBlZC4KKwkJV2hlbiB7dmltcmN9IGlzIGVxdWFsIHRvICJOT1JDIiAoYWxsIHVwcGVyY2FzZSksIHRoaXMgaGFzIHRoZQorCQlzYW1lIGVmZmVjdCBhcyAiTk9ORSIsIGJ1dCBsb2FkaW5nIHBsdWdpbnMgaXMgbm90IHNraXBwZWQuCisJCVVzaW5nIHRoZSAiLXUiIGFyZ3VtZW50IGhhcyB0aGUgc2lkZSBlZmZlY3QgdGhhdCB0aGUKKwkJJ2NvbXBhdGlibGUnIG9wdGlvbiB3aWxsIGJlIG9uIGJ5IGRlZmF1bHQuICBUaGlzIGNhbiBoYXZlCisJCXVuZXhwZWN0ZWQgZWZmZWN0cy4gIFNlZSB8J2NvbXBhdGlibGUnfC4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotVSogKkUyMzAqCistVSB7Z3ZpbXJjfQlUaGUgZmlsZSAiZ3ZpbXJjIiBpcyByZWFkIGZvciBpbml0aWFsaXphdGlvbnMgd2hlbiB0aGUgR1VJCisJCXN0YXJ0cy4gIE90aGVyIEdVSSBpbml0aWFsaXphdGlvbnMgYXJlIHNraXBwZWQuIFdoZW4ge2d2aW1yY30KKwkJaXMgZXF1YWwgdG8gIk5PTkUiLCBubyBmaWxlIGlzIHJlYWQgZm9yIGluaXRpYWxpemF0aW9ucyBhdAorCQlhbGwuCisJCUV4Y2VwdGlvbjogUmVhZGluZyB0aGUgc3lzdGVtLXdpZGUgbWVudSBmaWxlIGlzIGFsd2F5cyBkb25lLgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1pKgorLWkge3ZpbWluZm99CVRoZSBmaWxlICJ2aW1pbmZvIiBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdmltaW5mbworCQlmaWxlLiAgSWYgdGhlIG5hbWUgIk5PTkUiIGlzIHVzZWQgKGFsbCB1cHBlcmNhc2UpLCBubyB2aW1pbmZvCisJCWZpbGUgaXMgcmVhZCBvciB3cml0dGVuLCBldmVuIGlmICd2aW1pbmZvJyBpcyBzZXQgb3Igd2hlbgorCQkiOnJ2IiBvciAiOnd2IiBhcmUgdXNlZC4gIFNlZSBhbHNvIHx2aW1pbmZvLWZpbGV8LgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi14KgorLXgJCVVzZSBlbmNyeXB0aW9uIHRvIHJlYWQvd3JpdGUgZmlsZXMuICBXaWxsIHByb21wdCBmb3IgYSBrZXksCisJCXdoaWNoIGlzIHRoZW4gc3RvcmVkIGluIHRoZSAna2V5JyBvcHRpb24uICBBbGwgd3JpdGVzIHdpbGwKKwkJdGhlbiB1c2UgdGhpcyBrZXkgdG8gZW5jcnlwdCB0aGUgdGV4dC4gIFRoZSAnLXgnIGFyZ3VtZW50IGlzCisJCW5vdCBuZWVkZWQgd2hlbiByZWFkaW5nIGEgZmlsZSwgYmVjYXVzZSB0aGVyZSBpcyBhIGNoZWNrIGlmCisJCXRoZSBmaWxlIHRoYXQgaXMgYmVpbmcgcmVhZCBoYXMgYmVlbiBlbmNyeXB0ZWQsIGFuZCBWaW0gYXNrcworCQlmb3IgYSBrZXkgYXV0b21hdGljYWxseS4gfGVuY3J5cHRpb258CisKKwkJCQkJCQkqLVgqCistWAkJRG8gbm90IHRyeSBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlciB0byBnZXQgdGhlIGN1cnJlbnQKKwkJd2luZG93IHRpdGxlIGFuZCBjb3B5L3Bhc3RlIHVzaW5nIHRoZSBYIGNsaXBib2FyZC4gIFRoaXMKKwkJYXZvaWRzIGEgbG9uZyBzdGFydHVwIHRpbWUgd2hlbiBydW5uaW5nIFZpbSBpbiBhIHRlcm1pbmFsCisJCWVtdWxhdG9yIGFuZCB0aGUgY29ubmVjdGlvbiB0byB0aGUgWCBzZXJ2ZXIgaXMgc2xvdy4KKwkJT25seSBtYWtlcyBhIGRpZmZlcmVuY2Ugb24gVW5peCBvciBWTVMsIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUKKwkJfCtYMTF8IGZlYXR1cmUuICBPdGhlcndpc2UgaXQncyBpZ25vcmVkLgorCQlUbyBkaXNhYmxlIHRoZSBjb25uZWN0aW9uIG9ubHkgZm9yIHNwZWNpZmljIHRlcm1pbmFscywgc2VlIHRoZQorCQknY2xpcGJvYXJkJyBvcHRpb24uCisJCVdoZW4gdGhlIFgxMSBTZXNzaW9uIE1hbmFnZW1lbnQgUHJvdG9jb2wgKFhTTVApIGhhbmRsZXIgaGFzCisJCWJlZW4gYnVpbHQgaW4sIHRoZSAtWCBvcHRpb24gYWxzbyBkaXNhYmxlcyB0aGF0IGNvbm5lY3Rpb24gYXMKKwkJaXQsIHRvbywgbWF5IGhhdmUgdW5kZXNpcmFibGUgZGVsYXlzLgorCQlXaGVuIHRoZSBjb25uZWN0aW9uIGlzIGRlc2lyZWQgbGF0ZXIgYW55d2F5IChlLmcuLCBmb3IKKwkJY2xpZW50LXNlcnZlciBtZXNzYWdlcyksIGNhbGwgdGhlIHxzZXJ2ZXJsaXN0KCl8IGZ1bmN0aW9uLgorCQlUaGlzIGRvZXMgbm90IGVuYWJsZSB0aGUgWFNNUCBoYW5kbGVyIHRob3VnaC4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotcyoKKy1zIHtzY3JpcHRpbn0JVGhlIHNjcmlwdCBmaWxlICJzY3JpcHRpbiIgaXMgcmVhZC4gIFRoZSBjaGFyYWN0ZXJzIGluIHRoZQorCQlmaWxlIGFyZSBpbnRlcnByZXRlZCBhcyBpZiB5b3UgaGFkIHR5cGVkIHRoZW0uICBUaGUgc2FtZSBjYW4KKwkJYmUgZG9uZSB3aXRoIHRoZSBjb21tYW5kICI6c291cmNlISB7c2NyaXB0aW59Ii4gIElmIHRoZSBlbmQKKwkJb2YgdGhlIGZpbGUgaXMgcmVhY2hlZCBiZWZvcmUgdGhlIGVkaXRvciBleGl0cywgZnVydGhlcgorCQljaGFyYWN0ZXJzIGFyZSByZWFkIGZyb20gdGhlIGtleWJvYXJkLiAgT25seSB3b3JrcyB3aGVuIG5vdAorCQlzdGFydGVkIGluIEV4IG1vZGUsIHNlZSB8LXMtZXh8LiAgU2VlIGFsc28gfGNvbXBsZXgtcmVwZWF0fC4KKwkJe25vdCBpbiBWaX0KKworCQkJCQkJCSotdyoKKy13IHtzY3JpcHRvdXR9CUFsbCB0aGUgY2hhcmFjdGVycyB0aGF0IHlvdSB0eXBlIGFyZSByZWNvcmRlZCBpbiB0aGUgZmlsZQorCQkic2NyaXB0b3V0IiwgdW50aWwgeW91IGV4aXQgVmltLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQKKwkJdG8gY3JlYXRlIGEgc2NyaXB0IGZpbGUgdG8gYmUgdXNlZCB3aXRoICJ2aW0gLXMiIG9yCisJCSI6c291cmNlISIuICBXaGVuIHRoZSAic2NyaXB0b3V0IiBmaWxlIGFscmVhZHkgZXhpc3RzLCBuZXcKKwkJY2hhcmFjdGVycyBhcmUgYXBwZW5kZWQuICBTZWUgYWxzbyB8Y29tcGxleC1yZXBlYXR8LgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi1XKgorLVcge3NjcmlwdG91dH0JTGlrZSAtdywgYnV0IGRvIG5vdCBhcHBlbmQsIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlLgorCQl7bm90IGluIFZpfQorCisJCQkJCQkJKi13X25yKgorLXd7bnVtYmVyfQlEb2VzIG5vdGhpbmcuICBUaGlzIHdhcyBpbmNsdWRlZCBmb3IgVmktY29tcGF0aWJpbGl0eS4gIEluIFZpCisJCWl0IHNldHMgdGhlICd3aW5kb3cnIG9wdGlvbiwgd2hpY2ggaXMgbm90IGltcGxlbWVudGVkIGluIFZpbS4KKworLS1yZW1vdGUgWyt7Y21kfV0ge2ZpbGV9IC4uLgorCQlPcGVuIHRoZSB7ZmlsZX0gaW4gYW5vdGhlciBWaW0gdGhhdCBmdW5jdGlvbnMgYXMgYSBzZXJ2ZXIuCisJCUFueSBub24tZmlsZSBhcmd1bWVudHMgbXVzdCBjb21lIGJlZm9yZSB0aGlzLgorCQlTZWUgfC0tcmVtb3RlfC4ge25vdCBpbiBWaX0KKworLS1yZW1vdGUtc2lsZW50IFsre2NtZH1dIHtmaWxlfSAuLi4KKwkJTGlrZSAtLXJlbW90ZSwgYnV0IGRvbid0IGNvbXBsYWluIGlmIHRoZXJlIGlzIG5vIHNlcnZlci4KKwkJU2VlIHwtLXJlbW90ZS1zaWxlbnR8LiB7bm90IGluIFZpfQorCistLXJlbW90ZS13YWl0IFsre2NtZH1dIHtmaWxlfSAuLi4KKwkJTGlrZSAtLXJlbW90ZSwgYnV0IHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZmluaXNoIGVkaXRpbmcgdGhlCisJCWZpbGUocykuCisJCVNlZSB8LS1yZW1vdGUtd2FpdHwuIHtub3QgaW4gVml9CisKKy0tcmVtb3RlLXdhaXQtc2lsZW50IFsre2NtZH1dIHtmaWxlfSAuLi4KKwkJTGlrZSAtLXJlbW90ZS13YWl0LCBidXQgZG9uJ3QgY29tcGxhaW4gaWYgdGhlcmUgaXMgbm8gc2VydmVyLgorCQlTZWUgfC0tcmVtb3RlLXdhaXQtc2lsZW50fC4ge25vdCBpbiBWaX0KKworLS1zZXJ2ZXJuYW1lIHtuYW1lfQorCQlTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBWaW0gc2VydmVyIHRvIHNlbmQgdG8gb3IgdG8gYmVjb21lLgorCQlTZWUgfC0tc2VydmVybmFtZXwuIHtub3QgaW4gVml9CisKKy0tcmVtb3RlLXNlbmQge2tleXN9CisJCVNlbmQge2tleXN9IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdC4KKwkJU2VlIHwtLXJlbW90ZS1zZW5kfC4ge25vdCBpbiBWaX0KKworLS1yZW1vdGUtZXhwciB7ZXhwcn0KKwkJRXZhbHVhdGUge2V4cHJ9IGluIGFub3RoZXIgVmltIHRoYXQgZnVuY3Rpb25zIGFzIGEgc2VydmVyLgorCQlUaGUgcmVzdWx0IGlzIHByaW50ZWQgb24gc3Rkb3V0LgorCQlTZWUgfC0tcmVtb3RlLWV4cHJ8LiB7bm90IGluIFZpfQorCistLXNlcnZlcmxpc3QJT3V0cHV0IGEgbGlzdCBvZiBWaW0gc2VydmVyIG5hbWVzIGFuZCBleGl0LiAgU2VlCisJCVNlZSB8LS1zZXJ2ZXJsaXN0fC4ge25vdCBpbiBWaX0KKworLS1zb2NrZXRpZCB7aWR9CQkJCQkJKi0tc29ja2V0aWQqCisJCUdUSysgR1VJIFZpbSBvbmx5LiAgTWFrZSBndmltIHRyeSB0byB1c2UgR3RrUGx1ZyBtZWNoYW5pc20sIHNvCisJCXRoYXQgaXQgcnVucyBpbnNpZGUgYW5vdGhlciB3aW5kb3cuICBTZWUgfGd1aS1ndGstc29ja2V0aWR8CisJCWZvciBkZXRhaWxzLiB7bm90IGluIFZpfQorCistLWVjaG8td2lkCQkJCQkJKi0tZWNoby13aWQqCisJCUdUSysgR1VJIFZpbSBvbmx5LiAgTWFrZSBndmltIGVjaG8gdGhlIFdpbmRvdyBJRCBvbiBzdGRvdXQsCisJCXdoaWNoIGNhbiBiZSB1c2VkIHRvIHJ1biBndmltIGluIGEga3BhcnQgd2lkZ2V0LiAgVGhlIGZvcm1hdAorCQlvZiB0aGUgb3V0cHV0IGlzOiA+CisJCQlXSUQ6IDEyMzQ1XG4KKzwJCXtub3QgaW4gVml9CisKKy0tcm9sZSB7cm9sZX0JCQkJCQkqLS1yb2xlKgorCQlHVEsrIDIgR1VJIG9ubHkuICBTZXQgdGhlIHJvbGUgb2YgdGhlIG1haW4gd2luZG93IHRvIHtyb2xlfS4KKwkJVGhlIHdpbmRvdyByb2xlIGNhbiBiZSB1c2VkIGJ5IGEgd2luZG93IG1hbmFnZXIgdG8gdW5pcXVlbHkKKwkJaWRlbnRpZnkgYSB3aW5kb3csIGluIG9yZGVyIHRvIHJlc3RvcmUgd2luZG93IHBsYWNlbWVudCBhbmQKKwkJc3VjaC4gIFRoZSAtLXJvbGUgYXJndW1lbnQgaXMgcGFzc2VkIGF1dG9tYXRpY2FsbHkgd2hlbgorCQlyZXN0b3JpbmcgdGhlIHNlc3Npb24gb24gbG9naW4uICBTZWUgfGd1aS1nbm9tZS1zZXNzaW9ufAorCQl7bm90IGluIFZpfQorCistUCB7cGFyZW50LXRpdGxlfQkJCQkqLVAqICpNREkqICpFNjcxKiAqRTY3MioKKwkJV2luMzIgb25seTogU3BlY2lmeSB0aGUgdGl0bGUgb2YgdGhlIHBhcmVudCBhcHBsaWNhdGlvbi4gIFdoZW4KKwkJcG9zc2libGUsIFZpbSB3aWxsIHJ1biBpbiBhbiBNREkgd2luZG93IGluc2lkZSB0aGUKKwkJYXBwbGljYXRpb24uCisJCXtwYXJlbnQtdGl0bGV9IG11c3QgYXBwZWFyIGluIHRoZSB3aW5kb3cgdGl0bGUgb2YgdGhlIHBhcmVudAorCQlhcHBsaWNhdGlvbi4gIE1ha2Ugc3VyZSB0aGF0IGl0IGlzIHNwZWNpZmljIGVub3VnaC4KKwkJTm90ZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCBwcmltaXRpdmUuICBJdCB3b24ndAorCQl3b3JrIHdpdGggYWxsIGFwcGxpY2F0aW9ucyBhbmQgdGhlIG1lbnUgZG9lc24ndCB3b3JrLgorCistbmIJCQkJCQkJKi1uYioKKy1uYj17Zm5hbWV9CistbmI6e2hvc3RuYW1lfTp7YWRkcn06e3Bhc3N3b3JkfQorCQlBdHRlbXB0IGNvbm5lY3RpbmcgdG8gTmV0YmVhbnMgYW5kIGJlY29tZSBhbiBlZGl0b3Igc2VydmVyIGZvcgorCQlpdC4gIFRoZSBzZWNvbmQgZm9ybSBzcGVjaWZpZXMgYSBmaWxlIHRvIHJlYWQgY29ubmVjdGlvbiBpbmZvCisJCWZyb20uICBUaGUgdGhpcmQgZm9ybSBzcGVjaWZpZXMgdGhlIGhvc3RuYW1lLCBhZGRyZXNzIGFuZAorCQlwYXNzd29yZCBmb3IgY29ubmVjdGluZyB0byBOZXRiZWFucy4gfG5ldGJlYW5zLXJ1bnwKKworRXhhbXBsZSBmb3IgdXNpbmcgYSBzY3JpcHQgZmlsZSB0byBjaGFuZ2UgYSBuYW1lIGluIHNldmVyYWwgZmlsZXM6CisJQ3JlYXRlIGEgZmlsZSAic3Vicy52aSIgY29udGFpbmluZyBzdWJzdGl0dXRlIGNvbW1hbmRzIGFuZCBhIDp3cQorCWNvbW1hbmQ6ID4KKwkJOiVzL0pvbmVzL1NtaXRoL2cKKwkJOiVzL0FsbGVuL1BldGVyL2cKKwkJOndxCis8CisJRXhlY3V0ZSBWaW0gb24gYWxsIGZpbGVzIHlvdSB3YW50IHRvIGNoYW5nZTogPgorCisJCWZvcmVhY2ggaSAoICoubGV0ICkgdmltIC1zIHN1YnMudmkgJGkKKworSWYgdGhlIGV4ZWN1dGFibGUgaXMgY2FsbGVkICJ2aWV3IiwgVmltIHdpbGwgc3RhcnQgaW4gUmVhZG9ubHkgbW9kZS4gIFRoaXMgaXMKK3VzZWZ1bCBpZiB5b3UgY2FuIG1ha2UgYSBoYXJkIG9yIHN5bWJvbGljIGxpbmsgZnJvbSAidmlldyIgdG8gInZpbSIuCitTdGFydGluZyBpbiBSZWFkb25seSBtb2RlIGNhbiBhbHNvIGJlIGRvbmUgd2l0aCAidmltIC1SIi4KKworSWYgdGhlIGV4ZWN1dGFibGUgaXMgY2FsbGVkICJleCIsIFZpbSB3aWxsIHN0YXJ0IGluICJFeCIgbW9kZS4gIFRoaXMgbWVhbnMgaXQKK3dpbGwgYWNjZXB0IG9ubHkgIjoiIGNvbW1hbmRzLiAgQnV0IHdoZW4gdGhlICItdiIgYXJndW1lbnQgaXMgZ2l2ZW4sIFZpbSB3aWxsCitzdGFydCBpbiBOb3JtYWwgbW9kZSBhbnl3YXkuCisKK0FkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBhdmFpbGFibGUgb24gdW5peCBsaWtlIHN5c3RlbXMgd2hlbiBjb21waWxlZCB3aXRoCitYMTEgR1VJIHN1cHBvcnQuICBTZWUgfGd1aS1yZXNvdXJjZXN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIFZpbSBvbiB0aGUgQW1pZ2EJCQkJCSpzdGFydGluZy1hbWlnYSoKKworU3RhcnRpbmcgVmltIGZyb20gdGhlIFdvcmtiZW5jaAkJCQkqd29ya2JlbmNoKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWaW0gY2FuIGJlIHN0YXJ0ZWQgZnJvbSB0aGUgV29ya2JlbmNoIGJ5IGNsaWNraW5nIG9uIGl0cyBpY29uIHR3aWNlLiAgSXQgd2lsbAordGhlbiBzdGFydCB3aXRoIGFuIGVtcHR5IGJ1ZmZlci4KKworVmltIGNhbiBiZSBzdGFydGVkIHRvIGVkaXQgb25lIG9yIG1vcmUgZmlsZXMgYnkgdXNpbmcgYSAiUHJvamVjdCIgaWNvbi4gIFRoZQorIkRlZmF1bHQgVG9vbCIgb2YgdGhlIGljb24gbXVzdCBiZSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgVmltIGV4ZWN1dGFibGUuCitUaGUgbmFtZSBvZiB0aGUgIi5pbmZvIiBmaWxlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIHRleHQgZmlsZS4KK0J5IGNsaWNraW5nIG9uIHRoaXMgaWNvbiB0d2ljZSwgVmltIHdpbGwgYmUgc3RhcnRlZCB3aXRoIHRoZSBmaWxlIG5hbWUgYXMKK2N1cnJlbnQgZmlsZSBuYW1lLCB3aGljaCB3aWxsIGJlIHJlYWQgaW50byB0aGUgYnVmZmVyIChpZiBpdCBleGlzdHMpLiAgWW91IGNhbgorZWRpdCBtdWx0aXBsZSBmaWxlcyBieSBwcmVzc2luZyB0aGUgc2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIG9uIGljb25zLCBhbmQKK2NsaWNraW5nIHR3aWNlIG9uIHRoZSBsYXN0IG9uZS4gIFRoZSAiRGVmYXVsdCBUb29sIiBmb3IgYWxsIHRoZXNlIGljb25zIG11c3QKK2JlIHRoZSBzYW1lLgorCitJdCBpcyBub3QgcG9zc2libGUgdG8gZ2l2ZSBhcmd1bWVudHMgdG8gVmltLCBvdGhlciB0aGFuIGZpbGUgbmFtZXMsIGZyb20gdGhlCit3b3JrYmVuY2guCisKK1ZpbSB3aW5kb3cJCQkJCQkqYW1pZ2Etd2luZG93KgorLS0tLS0tLS0tLQorCitWaW0gd2lsbCBydW4gaW4gdGhlIENMSSB3aW5kb3cgd2hlcmUgaXQgd2FzIHN0YXJ0ZWQuICBJZiBWaW0gd2FzIHN0YXJ0ZWQgd2l0aAordGhlICJydW4iIG9yICJydW5iYWNrIiBjb21tYW5kLCBvciBpZiBWaW0gd2FzIHN0YXJ0ZWQgZnJvbSB0aGUgd29ya2JlbmNoLCBpdAord2lsbCBvcGVuIGEgd2luZG93IG9mIGl0cyBvd24uCisKK1RlY2huaWNhbCBkZXRhaWw6CisJVG8gb3BlbiB0aGUgbmV3IHdpbmRvdyBhIGxpdHRsZSB0cmljayBpcyB1c2VkLiAgQXMgc29vbiBhcyBWaW0KKwlyZWNvZ25pemVzIHRoYXQgaXQgZG9lcyBub3QgcnVuIGluIGEgbm9ybWFsIENMSSB3aW5kb3csIGl0IHdpbGwKKwljcmVhdGUgYSBzY3JpcHQgZmlsZSBpbiAidDoiLiAgVGhpcyBzY3JpcHQgZmlsZSBjb250YWlucyB0aGUgc2FtZQorCWNvbW1hbmQgYXMgdGhlIG9uZSBWaW0gd2FzIHN0YXJ0ZWQgd2l0aCwgYW5kIGFuICJlbmRjbGkiIGNvbW1hbmQuCisJVGhpcyBzY3JpcHQgZmlsZSBpcyB0aGVuIGV4ZWN1dGVkIHdpdGggYSAibmV3Y2xpIiBjb21tYW5kICh0aGUgImM6cnVuIgorCWFuZCAiYzpuZXdjbGkiIGNvbW1hbmRzIGFyZSByZXF1aXJlZCBmb3IgdGhpcyB0byB3b3JrKS4gIFRoZSBzY3JpcHQKKwlmaWxlIHdpbGwgaGFuZyBhcm91bmQgdW50aWwgcmVib290LCBvciB1bnRpbCB5b3UgZGVsZXRlIGl0LiAgVGhpcworCW1ldGhvZCBpcyByZXF1aXJlZCB0byBnZXQgdGhlICI6c2giIGFuZCAiOiEiIGNvbW1hbmRzIHRvIHdvcmsKKwljb3JyZWN0bHkuICBCdXQgd2hlbiBWaW0gd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgLWYgb3B0aW9uIChmb3JlZ3JvdW5kCisJbW9kZSksIHRoaXMgbWV0aG9kIGlzIG5vdCB1c2VkLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0CisJd2hlbiBhIHByb2dyYW0gc3RhcnRzIFZpbSB3aXRoIHRoZSAtZiBvcHRpb24gaXQgd2lsbCB3YWl0IGZvciBWaW0gdG8KKwlleGl0LiAgV2l0aCB0aGUgc2NyaXB0IHRyaWNrLCB0aGUgY2FsbGluZyBwcm9ncmFtIGRvZXMgbm90IGtub3cgd2hlbgorCVZpbSBleGl0cy4gIFRoZSAtZiBvcHRpb24gY2FuIGJlIHVzZWQgd2hlbiBWaW0gaXMgc3RhcnRlZCBieSBhIG1haWwKKwlwcm9ncmFtIHdoaWNoIGFsc28gd2FpdHMgZm9yIHRoZSBlZGl0IHNlc3Npb24gdG8gZmluaXNoLiAgQXMgYQorCWNvbnNlcXVlbmNlLCB0aGUgIjpzaCIgYW5kICI6ISIgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUKKwktZiBvcHRpb24gaXMgdXNlZC4KKworVmltIHdpbGwgYXV0b21hdGljYWxseSByZWNvZ25pemUgdGhlIHdpbmRvdyBzaXplIGFuZCByZWFjdCB0byB3aW5kb3cKK3Jlc2l6aW5nLiAgVW5kZXIgQW1pZ2EgRE9TIDEuMywgaXQgaXMgYWR2aXNlZCB0byB1c2UgdGhlIGZhc3Rmb250cyBwcm9ncmFtLAorIkZGIiwgdG8gc3BlZWQgdXAgZGlzcGxheSByZWRyYXdpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gUnVubmluZyBlVmltCQkJCQkJCSpldmltLWtleXMqCisKK0VWaW0gcnVucyBWaW0gYXMgY2xpY2stYW5kLXR5cGUgZWRpdG9yLiAgVGhpcyBpcyB2ZXJ5IHVubGlrZSB0aGUgb3JpZ2luYWwgVmkKK2lkZWEuICBCdXQgaXQgaGVscHMgZm9yIHBlb3BsZSB0aGF0IGRvbid0IHVzZSBWaW0gb2Z0ZW4gZW5vdWdoIHRvIGxlYXJuIHRoZQorY29tbWFuZHMuICBIb3BlZnVsbHkgdGhleSB3aWxsIGZpbmQgb3V0IHRoYXQgbGVhcm5pbmcgdG8gdXNlIE5vcm1hbCBtb2RlCitjb21tYW5kcyB3aWxsIG1ha2UgdGhlaXIgZWRpdGluZyBtdWNoIG1vcmUgZWZmZWN0aXZlLgorCitJbiBFdmltIHRoZXNlIG9wdGlvbnMgYXJlIGNoYW5nZWQgZnJvbSB0aGVpciBkZWZhdWx0IHZhbHVlOgorCisJOnNldCBub2NvbXBhdGlibGUJVXNlIFZpbSBpbXByb3ZlbWVudHMKKwk6c2V0IGluc2VydG1vZGUJCVJlbWFpbiBpbiBJbnNlcnQgbW9kZSBtb3N0IG9mIHRoZSB0aW1lCisJOnNldCBoaWRkZW4JCUtlZXAgaW52aXNpYmxlIGJ1ZmZlcnMgbG9hZGVkCisJOnNldCBiYWNrdXAJCUtlZXAgYmFja3VwIGZpbGVzIChub3QgZm9yIFZNUykKKwk6c2V0IGJhY2tzcGFjZT0yCUJhY2tzcGFjZSBvdmVyIGV2ZXJ5dGhpbmcKKwk6c2V0IGF1dG9pbmRlbnQJCWF1dG8taW5kZW50IG5ldyBsaW5lcworCTpzZXQgaGlzdG9yeT01MAkJa2VlcCA1MCBsaW5lcyBvZiBFeCBjb21tYW5kcworCTpzZXQgcnVsZXIJCXNob3cgdGhlIGN1cnNvciBwb3NpdGlvbgorCTpzZXQgaW5jc2VhcmNoCQlzaG93IG1hdGNoZXMgaGFsZndheSB0eXBpbmcgYSBwYXR0ZXJuCisJOnNldCBtb3VzZT1hCQl1c2UgdGhlIG1vdXNlIGluIGFsbCBtb2RlcworCTpzZXQgaGxzZWFyY2gJCWhpZ2hsaWdodCBhbGwgbWF0Y2hlcyBmb3IgYSBzZWFyY2ggcGF0dGVybgorCTpzZXQgd2hpY2h3cmFwKz08LD4sWyxdICA8TGVmdD4gYW5kIDxSaWdodD4gd3JhcCBhcm91bmQgbGluZSBicmVha3MKKwk6c2V0IGd1aW9wdGlvbnMtPWEJbm9uLVVuaXggb25seTogZG9uJ3QgZG8gYXV0by1zZWxlY3QKKworS2V5IG1hcHBpbmdzOgorCTxEb3duPgkJbW92ZXMgYnkgc2NyZWVuIGxpbmVzIHJhdGhlciB0aGFuIGZpbGUgbGluZXMKKwk8VXA+CQlpZGVtCisJUQkJZG9lcyAiZ3EiLCBmb3JtYXR0aW5nLCBpbnN0ZWFkIG9mIEV4IG1vZGUKKwk8QlM+CQlpbiBWaXN1YWwgbW9kZTogZGVsZXRlcyB0aGUgc2VsZWN0aW9uCisJQ1RSTC1YCQlpbiBWaXN1YWwgbW9kZTogQ3V0IHRvIGNsaXBib2FyZAorCTxTLURlbD4JCWlkZW0KKwlDVFJMLUMJCWluIFZpc3VhbCBtb2RlOiBDb3B5IHRvIGNsaXBib2FyZAorCTxDLUluc2VydD4JaWRlbQorCUNUUkwtVgkJUGFzdGVzIGZyb20gdGhlIGNsaXBib2FyZCAoaW4gYW55IG1vZGUpCisJPFMtSW5zZXJ0PglpZGVtCisJQ1RSTC1RCQlkbyB3aGF0IENUUkwtViB1c2VkIHRvIGRvCisJQ1RSTC1aCQl1bmRvCisJQ1RSTC1ZCQlyZWRvCisJPE0tU3BhY2U+CXN5c3RlbSBtZW51CisJQ1RSTC1BCQlzZWxlY3QgYWxsCisJPEMtVGFiPgkJbmV4dCB3aW5kb3csIENUUkwtVyB3CisJPEMtRjQ+CQljbG9zZSB3aW5kb3csIENUUkwtVyBjCisKK0FkZGl0aW9uYWxseToKKy0gIjpiZWhhdmUgbXN3aW4iIGlzIHVzZWQgfDpiZWhhdmV8CistIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgZW5hYmxlZAorLSBmaWxldHlwZSBkZXRlY3Rpb24gaXMgZW5hYmxlZCwgZmlsZXR5cGUgcGx1Z2lucyBhbmQgaW5kZW50aW5nIGlzIGVuYWJsZWQKKy0gaW4gYSB0ZXh0IGZpbGUgJ3RleHR3aWR0aCcgaXMgc2V0IHRvIDc4CisKK09uZSBoaW50OiBJZiB5b3Ugd2FudCB0byBnbyB0byBOb3JtYWwgbW9kZSB0byBiZSBhYmxlIHRvIHR5cGUgYSBzZXF1ZW5jZSBvZgorY29tbWFuZHMsIHVzZSBDVFJMLUwuIHxpX0NUUkwtTHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBJbml0aWFsaXphdGlvbgkJCQkqaW5pdGlhbGl6YXRpb24qICpzdGFydHVwKgorCitUaGlzIHNlY3Rpb24gaXMgYWJvdXQgdGhlIG5vbi1HVUkgdmVyc2lvbiBvZiBWaW0uICBTZWUgfGd1aS1mb3JrfCBmb3IKK2FkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gd2hlbiBzdGFydGluZyB0aGUgR1VJLgorCitBdCBzdGFydHVwLCBWaW0gY2hlY2tzIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgZmlsZXMgYW5kIHNldHMgdmFsdWVzCithY2NvcmRpbmdseS4gIFZpbSBwcm9jZWVkcyBpbiB0aGlzIG9yZGVyOgorCisxLiBTZXQgdGhlICdzaGVsbCcgYW5kICd0ZXJtJyBvcHRpb24JCSpTSEVMTCogKkNPTVNQRUMqICpURVJNKgorCVRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTSEVMTCwgaWYgaXQgZXhpc3RzLCBpcyB1c2VkIHRvIHNldCB0aGUKKwknc2hlbGwnIG9wdGlvbi4gIE9uIE1TLURPUyBhbmQgV2luMzIsIHRoZSBDT01TUEVDIHZhcmlhYmxlIGlzIHVzZWQKKwlpZiBTSEVMTCBpcyBub3Qgc2V0LgorCVRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNLCBpZiBpdCBleGlzdHMsIGlzIHVzZWQgdG8gc2V0IHRoZSAndGVybScKKwlvcHRpb24uCisKKzIuIFByb2Nlc3MgdGhlIGFyZ3VtZW50cworCVRoZSBvcHRpb25zIGFuZCBmaWxlIG5hbWVzIGZyb20gdGhlIGNvbW1hbmQgdGhhdCBzdGFydCBWaW0gYXJlCisJaW5zcGVjdGVkLiAgQnVmZmVycyBhcmUgY3JlYXRlZCBmb3IgYWxsIGZpbGVzIChidXQgbm90IGxvYWRlZCB5ZXQpLgorCiszLiBFeGVjdXRlIEV4IGNvbW1hbmRzLCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQvb3IgZmlsZXMKKwlBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZWFkIGFzIG9uZSBFeCBjb21tYW5kIGxpbmUsIHdoZXJlIG11bHRpcGxlCisJY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgd2l0aCAnfCcgb3IgIjxOTD4iLgorCQkJCQkJCQkqdmltcmMqICpleHJjKgorCUEgZmlsZSB0aGF0IGNvbnRhaW5zIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzIGlzIGNhbGxlZCBhICJ2aW1yYyIgZmlsZS4KKwlFYWNoIGxpbmUgaW4gYSB2aW1yYyBmaWxlIGlzIGV4ZWN1dGVkIGFzIGFuIEV4IGNvbW1hbmQgbGluZS4gIEl0IGlzCisJc29tZXRpbWVzIGFsc28gcmVmZXJyZWQgdG8gYXMgImV4cmMiIGZpbGUuICBUaGV5IGFyZSB0aGUgc2FtZSB0eXBlIG9mCisJZmlsZSwgYnV0ICJleHJjIiBpcyB3aGF0IFZpIGFsd2F5cyB1c2VkLCAidmltcmMiIGlzIGEgVmltIHNwZWNpZmljCisJbmFtZS4gIEFsc28gc2VlIHx2aW1yYy1pbnRyb3wuCisKKwlSZWNvbW1lbmRlZCBwbGFjZSBmb3IgeW91ciBwZXJzb25hbCBpbml0aWFsaXphdGlvbnM6CisJCVVuaXgJCSAgICAkSE9NRS8udmltcmMKKwkJT1MvMgkJICAgICRIT01FLy52aW1yYyBvciAkVklNLy52aW1yYyAob3IgX3ZpbXJjKQorCQlNUy1ET1MgYW5kIFdpbjMyICAgICRIT01FL192aW1yYyBvciAkVklNL192aW1yYworCQlBbWlnYQkJICAgIHM6LnZpbXJjIG9yICRWSU0vLnZpbXJjCisKKwlJZiBWaW0gd2FzIHN0YXJ0ZWQgd2l0aCAiLXUgZmlsZW5hbWUiLCB0aGUgZmlsZSAiZmlsZW5hbWUiIGlzIHVzZWQuCisJQWxsIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbnMgdW50aWwgNC4gYXJlIHNraXBwZWQuCisJInZpbSAtdSBOT1JDIiBjYW4gYmUgdXNlZCB0byBza2lwIHRoZXNlIGluaXRpYWxpemF0aW9ucyB3aXRob3V0CisJcmVhZGluZyBhIGZpbGUuICAidmltIC11IE5PTkUiIGFsc28gc2tpcHMgbG9hZGluZyBwbHVnaW5zLiAgfC11fAorCisJSWYgVmltIHdhcyBzdGFydGVkIGluIEV4IG1vZGUgd2l0aCB0aGUgIi1zIiBhcmd1bWVudCwgYWxsIGZvbGxvd2luZworCWluaXRpYWxpemF0aW9ucyB1bnRpbCA0LiBhcmUgc2tpcHBlZC4gIE9ubHkgdGhlICItdSIgb3B0aW9uIGlzCisJaW50ZXJwcmV0ZWQuCisJCQkJCQkJKmV2aW0udmltKgorICAgICBhLiBJZiB2aW0gd2FzIHN0YXJ0ZWQgYXMgfGV2aW18IG9yIHxldmlld3wgb3Igd2l0aCB0aGUgfC15fCBhcmd1bWVudCwgdGhlCisJc2NyaXB0ICRWSU1SVU5USU1FL2V2aW0udmltIHdpbGwgYmUgbG9hZGVkLgorCQkJCQkJCSpzeXN0ZW0tdmltcmMqCisgICAgIGIuIEZvciBVbml4LCBNUy1ET1MsIE1TLVdpbmRvd3MsIE9TLzIsIFZNUywgTWFjaW50b3NoLCBSSVNDLU9TIGFuZCBBbWlnYQorCXRoZSBzeXN0ZW0gdmltcmMgZmlsZSBpcyByZWFkIGZvciBpbml0aWFsaXphdGlvbnMuICBUaGUgcGF0aCBvZiB0aGlzCisJZmlsZSBpcyBzaG93biB3aXRoIHRoZSAiOnZlcnNpb24iIGNvbW1hbmQuICBNb3N0bHkgaXQncyAiJFZJTS92aW1yYyIuCisJTm90ZSB0aGF0IHRoaXMgZmlsZSBpcyBBTFdBWVMgcmVhZCBpbiAnY29tcGF0aWJsZScgbW9kZSwgc2luY2UgdGhlCisJYXV0b21hdGljIHJlc2V0dGluZyBvZiAnY29tcGF0aWJsZScgaXMgb25seSBkb25lIGxhdGVyLiAgQWRkIGEgIjpzZXQKKwlub2NwIiBjb21tYW5kIGlmIHlvdSBsaWtlLgorCisJCQkgICpWSU1JTklUKiAqLnZpbXJjKiAqX3ZpbXJjKiAqRVhJTklUKiAqLmV4cmMqICpfZXhyYyoKKyAgICAgYy4gRm91ciBwbGFjZXMgYXJlIHNlYXJjaGVkIGZvciBpbml0aWFsaXphdGlvbnMuICBUaGUgZmlyc3QgdGhhdCBleGlzdHMKKwlpcyB1c2VkLCB0aGUgb3RoZXJzIGFyZSBpZ25vcmVkLgorCS0gIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBWSU1JTklUIChzZWUgYWxzbyB8Y29tcGF0aWJsZS1kZWZhdWx0fCkgKCopCisJICAgVGhlIHZhbHVlIG9mICRWSU1JTklUIGlzIHVzZWQgYXMgYW4gRXggY29tbWFuZCBsaW5lLgorCS0gIFRoZSB1c2VyIHZpbXJjIGZpbGUocyk6CisJCSAgICAiJEhPTUUvLnZpbXJjIgkoZm9yIFVuaXggYW5kIE9TLzIpICgqKQorCQkgICAgInM6LnZpbXJjIgkJKGZvciBBbWlnYSkgKCopCisJCSAgICAiaG9tZToudmltcmMiCShmb3IgQW1pZ2EpICgqKQorCQkgICAgIiRWSU0vLnZpbXJjIgkoZm9yIE9TLzIgYW5kIEFtaWdhKSAoKikKKwkJICAgICIkSE9NRS9fdmltcmMiCShmb3IgTVMtRE9TIGFuZCBXaW4zMikgKCopCisJCSAgICAiJFZJTVxfdmltcmMiCShmb3IgTVMtRE9TIGFuZCBXaW4zMikgKCopCisJCU5vdGU6IEZvciBVbml4LCBPUy8yIGFuZCBBbWlnYSwgd2hlbiAiLnZpbXJjIiBkb2VzIG5vdCBleGlzdCwKKwkJIl92aW1yYyIgaXMgYWxzbyB0cmllZCwgaW4gY2FzZSBhbiBNUy1ET1MgY29tcGF0aWJsZSBmaWxlCisJCXN5c3RlbSBpcyB1c2VkLiAgRm9yIE1TLURPUyBhbmQgV2luMzIgIi52aW1yYyIgaXMgY2hlY2tlZAorCQlhZnRlciAiX3ZpbXJjIiwgaW4gY2FzZSBsb25nIGZpbGUgbmFtZXMgYXJlIHVzZWQuCisJCU5vdGU6IEZvciBNUy1ET1MgYW5kIFdpbjMyLCAiJEhPTUUiIGlzIGNoZWNrZWQgZmlyc3QuICBJZiBubworCQkiX3ZpbXJjIiBvciAiLnZpbXJjIiBpcyBmb3VuZCB0aGVyZSwgIiRWSU0iIGlzIHRyaWVkLgorCQlTZWUgfCRWSU18IGZvciB3aGVuICRWSU0gaXMgbm90IHNldC4KKwktICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRVhJTklULgorCSAgIFRoZSB2YWx1ZSBvZiAkRVhJTklUIGlzIHVzZWQgYXMgYW4gRXggY29tbWFuZCBsaW5lLgorCS0gIFRoZSB1c2VyIGV4cmMgZmlsZShzKS4gIFNhbWUgYXMgZm9yIHRoZSB1c2VyIHZpbXJjIGZpbGUsIGJ1dCB3aXRoCisJICAgInZpbXJjIiByZXBsYWNlZCBieSAiZXhyYyIuICBCdXQgd2l0aG91dCB0aGUgKCopIQorCisgICAgIGQuIElmIHRoZSAnZXhyYycgb3B0aW9uIGlzIG9uICh3aGljaCBpcyBub3QgdGhlIGRlZmF1bHQpLCB0aGUgY3VycmVudAorCWRpcmVjdG9yeSBpcyBzZWFyY2hlZCBmb3IgZm91ciBmaWxlcy4gIFRoZSBmaXJzdCB0aGF0IGV4aXN0cyBpcyB1c2VkLAorCXRoZSBvdGhlcnMgYXJlIGlnbm9yZWQuCisJLSAgVGhlIGZpbGUgIi52aW1yYyIgKGZvciBVbml4LCBBbWlnYSBhbmQgT1MvMikgKCopCisJCSAgICAiX3ZpbXJjIiAoZm9yIE1TLURPUyBhbmQgV2luMzIpICgqKQorCS0gIFRoZSBmaWxlICJfdmltcmMiIChmb3IgVW5peCwgQW1pZ2EgYW5kIE9TLzIpICgqKQorCQkgICAgIi52aW1yYyIgKGZvciBNUy1ET1MgYW5kIFdpbjMyKSAoKikKKwktICBUaGUgZmlsZSAiLmV4cmMiICAoZm9yIFVuaXgsIEFtaWdhIGFuZCBPUy8yKQorCQkgICAgIl9leHJjIiAgKGZvciBNUy1ET1MgYW5kIFdpbjMyKQorCS0gIFRoZSBmaWxlICJfZXhyYyIgIChmb3IgVW5peCwgQW1pZ2EgYW5kIE9TLzIpCisJCSAgICAiLmV4cmMiICAoZm9yIE1TLURPUyBhbmQgV2luMzIpCisKKyAgICAgKCopIFVzaW5nIHRoaXMgZmlsZSBvciBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGNhdXNlICdjb21wYXRpYmxlJyB0byBiZQorCSBvZmYgYnkgZGVmYXVsdC4gIFNlZSB8Y29tcGF0aWJsZS1kZWZhdWx0fC4KKworNC4gTG9hZCB0aGUgcGx1Z2luIHNjcmlwdHMuCQkJCQkqbG9hZC1wbHVnaW5zKgorCVRoaXMgZG9lcyB0aGUgc2FtZSBhcyB0aGUgY29tbWFuZDogPgorCQk6cnVudGltZSEgcGx1Z2luLyoudmltCis8CVRoZSByZXN1bHQgaXMgdGhhdCBhbGwgZGlyZWN0b3JpZXMgaW4gdGhlICdydW50aW1lcGF0aCcgb3B0aW9uIHdpbGwgYmUKKwlzZWFyY2hlZCBmb3IgdGhlICJwbHVnaW4iIHN1Yi1kaXJlY3RvcnkgYW5kIGFsbCBmaWxlcyBlbmRpbmcgaW4gIi52aW0iCisJd2lsbCBiZSBzb3VyY2VkIChpbiBhbHBoYWJldGljYWwgb3JkZXIgcGVyIGRpcmVjdG9yeSkuCisJTG9hZGluZyBwbHVnaW5zIHdvbid0IGJlIGRvbmUgd2hlbjoKKwktIFRoZSAnbG9hZHBsdWdpbnMnIG9wdGlvbiB3YXMgcmVzZXQgaW4gYSB2aW1yYyBmaWxlLgorCS0gVGhlIHwtLW5vcGx1Z2lufCBjb21tYW5kIGxpbmUgYXJndW1lbnQgaXMgdXNlZC4KKwktIFRoZSAiLXUgTk9ORSIgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGlzIHVzZWQgfC11fC4KKwktIFdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRob3V0IHRoZSB8K2V2YWx8IGZlYXR1cmUuCisJTm90ZSB0aGF0IHVzaW5nICItYyBzZXQgbm9sb2FkcGx1Z2lucyIgZG9lc24ndCB3b3JrLCBiZWNhdXNlIHRoZQorCWNvbW1hbmRzIGZyb20gdGhlIGNvbW1hbmQgbGluZSBoYXZlIG5vdCBiZWVuIGV4ZWN1dGVkIHlldC4KKworNS4gU2V0ICdzaGVsbHBpcGUnIGFuZCAnc2hlbGxyZWRpcicKKwlUaGUgJ3NoZWxscGlwZScgYW5kICdzaGVsbHJlZGlyJyBvcHRpb25zIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZQorCXZhbHVlIG9mIHRoZSAnc2hlbGwnIG9wdGlvbiwgdW5sZXNzIHRoZXkgaGF2ZSBiZWVuIHNldCBiZWZvcmUuCisJVGhpcyBtZWFucyB0aGF0IFZpbSB3aWxsIGZpZ3VyZSBvdXQgdGhlIHZhbHVlcyBvZiAnc2hlbGxwaXBlJyBhbmQKKwknc2hlbGxyZWRpcicgZm9yIHlvdSwgdW5sZXNzIHlvdSBoYXZlIHNldCB0aGVtIHlvdXJzZWxmLgorCis2LiBTZXQgJ3VwZGF0ZWNvdW50JyB0byB6ZXJvLCBpZiAiLW4iIGNvbW1hbmQgYXJndW1lbnQgdXNlZAorCis3LiBTZXQgYmluYXJ5IG9wdGlvbnMKKwlJZiB0aGUgIi1iIiBmbGFnIHdhcyBnaXZlbiB0byBWaW0sIHRoZSBvcHRpb25zIGZvciBiaW5hcnkgZWRpdGluZyB3aWxsCisJYmUgc2V0IG5vdy4gIFNlZSB8LWJ8LgorCis4LiBQZXJmb3JtIEdVSSBpbml0aWFsaXphdGlvbnMKKwlPbmx5IHdoZW4gc3RhcnRpbmcgImd2aW0iLCB0aGUgR1VJIGluaXRpYWxpemF0aW9ucyB3aWxsIGJlIGRvbmUuICBTZWUKKwl8Z3VpLWluaXR8LgorCis5LiBSZWFkIHRoZSB2aW1pbmZvIGZpbGUKKwlJZiB0aGUgJ3ZpbWluZm8nIG9wdGlvbiBpcyBub3QgZW1wdHksIHRoZSB2aW1pbmZvIGZpbGUgaXMgcmVhZC4gIFNlZQorCXx2aW1pbmZvLWZpbGV8LgorCisxMC4gUmVhZCB0aGUgcXVpY2tmaXggZmlsZQorCUlmIHRoZSAiLXEiIGZsYWcgd2FzIGdpdmVuIHRvIFZpbSwgdGhlIHF1aWNrZml4IGZpbGUgaXMgcmVhZC4gIElmIHRoaXMKKwlmYWlscywgVmltIGV4aXRzLgorCisxMS4gT3BlbiBhbGwgd2luZG93cworCVdoZW4gdGhlIHwtb3wgZmxhZyB3YXMgZ2l2ZW4sIHdpbmRvd3Mgd2lsbCBiZSBvcGVuZWQgKGJ1dCBub3QKKwlkaXNwbGF5ZWQgeWV0KS4KKwlXaGVuIHN3aXRjaGluZyBzY3JlZW5zLCBpdCBoYXBwZW5zIG5vdy4gIFJlZHJhd2luZyBzdGFydHMuCisJSWYgdGhlICItcSIgZmxhZyB3YXMgZ2l2ZW4gdG8gVmltLCB0aGUgZmlyc3QgZXJyb3IgaXMganVtcGVkIHRvLgorCUJ1ZmZlcnMgZm9yIGFsbCB3aW5kb3dzIHdpbGwgYmUgbG9hZGVkLgorCisxMi4gRXhlY3V0ZSBzdGFydHVwIGNvbW1hbmRzCisJSWYgYSAiLXQiIGZsYWcgd2FzIGdpdmVuIHRvIFZpbSwgdGhlIHRhZyBpcyBqdW1wZWQgdG8uCisJVGhlIGNvbW1hbmRzIGdpdmVuIHdpdGggdGhlIHwtY3wgYW5kIHwrY21kfCBhcmd1bWVudHMgYXJlIGV4ZWN1dGVkLgorCUlmIHRoZSAnaW5zZXJ0bW9kZScgb3B0aW9uIGlzIHNldCwgSW5zZXJ0IG1vZGUgaXMgZW50ZXJlZC4KKwlUaGUgfFZpbUVudGVyfCBhdXRvY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCitTb21lIGhpbnRzIG9uIHVzaW5nIGluaXRpYWxpemF0aW9uczoKKworU3RhbmRhcmQgc2V0dXA6CitDcmVhdGUgYSB2aW1yYyBmaWxlIHRvIHNldCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgbWFwcGluZ3MgZm9yIGFsbCB5b3VyIGVkaXQKK3Nlc3Npb25zLiAgUHV0IGl0IGluIGEgcGxhY2Ugc28gdGhhdCBpdCB3aWxsIGJlIGZvdW5kIGJ5IDNiOgorCX4vLnZpbXJjCShVbml4IGFuZCBPUy8yKQorCXM6LnZpbXJjCShBbWlnYSkKKwkkVklNXF92aW1yYwkoTVMtRE9TIGFuZCBXaW4zMikKK05vdGUgdGhhdCBjcmVhdGluZyBhIHZpbXJjIGZpbGUgd2lsbCBjYXVzZSB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbiB0byBiZSBvZmYKK2J5IGRlZmF1bHQuICBTZWUgfGNvbXBhdGlibGUtZGVmYXVsdHwuCisKK0xvY2FsIHNldHVwOgorUHV0IGFsbCBjb21tYW5kcyB0aGF0IHlvdSBuZWVkIGZvciBlZGl0aW5nIGEgc3BlY2lmaWMgZGlyZWN0b3J5IG9ubHkgaW50byBhCit2aW1yYyBmaWxlIGFuZCBwbGFjZSBpdCBpbiB0aGF0IGRpcmVjdG9yeSB1bmRlciB0aGUgbmFtZSAiLnZpbXJjIiAoIl92aW1yYyIKK2ZvciBNUy1ET1MgYW5kIFdpbjMyKS4gIE5PVEU6IFRvIG1ha2UgVmltIGxvb2sgZm9yIHRoZXNlIHNwZWNpYWwgZmlsZXMgeW91CitoYXZlIHRvIHR1cm4gb24gdGhlIG9wdGlvbiAnZXhyYycuICBTZWUgfHRyb2phbi1ob3JzZXwgdG9vLgorCitTeXN0ZW0gc2V0dXA6CitUaGlzIG9ubHkgYXBwbGllcyBpZiB5b3UgYXJlIG1hbmFnaW5nIGEgVW5peCBzeXN0ZW0gd2l0aCBzZXZlcmFsIHVzZXJzIGFuZAord2FudCB0byBzZXQgdGhlIGRlZmF1bHRzIGZvciBhbGwgdXNlcnMuICBDcmVhdGUgYSB2aW1yYyBmaWxlIHdpdGggY29tbWFuZHMKK2ZvciBkZWZhdWx0IHNldHRpbmdzIGFuZCBtYXBwaW5ncyBhbmQgcHV0IGl0IGluIHRoZSBwbGFjZSB0aGF0IGlzIGdpdmVuIHdpdGgKK3RoZSAiOnZlcnNpb24iIGNvbW1hbmQuCisKK1NhdmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBWaW0gdG8gYSBmaWxlOgorV2hlbmV2ZXIgeW91IGhhdmUgY2hhbmdlZCB2YWx1ZXMgb2Ygb3B0aW9ucyBvciB3aGVuIHlvdSBoYXZlIGNyZWF0ZWQgYQorbWFwcGluZywgdGhlbiB5b3UgbWF5IHdhbnQgdG8gc2F2ZSB0aGVtIGluIGEgdmltcmMgZmlsZSBmb3IgbGF0ZXIgdXNlLiAgU2VlCit8c2F2ZS1zZXR0aW5nc3wgYWJvdXQgc2F2aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNldHRpbmdzIHRvIGEgZmlsZS4KKworQXZvaWRpbmcgc2V0dXAgcHJvYmxlbXMgZm9yIFZpIHVzZXJzOgorVmkgdXNlcyB0aGUgdmFyaWFibGUgRVhJTklUIGFuZCB0aGUgZmlsZSAifi8uZXhyYyIuICBTbyBpZiB5b3UgZG8gbm90IHdhbnQgdG8KK2ludGVyZmVyZSB3aXRoIFZpLCB0aGVuIHVzZSB0aGUgdmFyaWFibGUgVklNSU5JVCBhbmQgdGhlIGZpbGUgInZpbXJjIiBpbnN0ZWFkLgorCitBbWlnYSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CitPbiB0aGUgQW1pZ2EsIHR3byB0eXBlcyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZXhpc3QuICBUaGUgb25lcyBzZXQgd2l0aCB0aGUKK0RPUyAxLjMgKG9yIGxhdGVyKSBzZXRlbnYgY29tbWFuZCBhcmUgcmVjb2duaXplZC4gIFNlZSB0aGUgQW1pZ2FEb3MgMS4zCittYW51YWwuICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCB3aXRoIHRoZSBvbGQgTWFueCBTZXQgY29tbWFuZCAoYmVmb3JlCit2ZXJzaW9uIDUuMCkgYXJlIG5vdCByZWNvZ25pemVkLgorCitNUy1ET1MgbGluZSBzZXBhcmF0b3JzOgorT24gTVMtRE9TLWxpa2Ugc3lzdGVtcyAoTVMtRE9TIGl0c2VsZiwgV2luMzIsIGFuZCBPUy8yKSwgVmltIGFzc3VtZXMgdGhhdCBhbGwKK3RoZSB2aW1yYyBmaWxlcyBoYXZlIDxDUj4gPE5MPiBwYWlycyBhcyBsaW5lIHNlcGFyYXRvcnMuICBUaGlzIHdpbGwgZ2l2ZQorcHJvYmxlbXMgaWYgeW91IGhhdmUgYSBmaWxlIHdpdGggb25seSA8Tkw+cyBhbmQgaGF2ZSBhIGxpbmUgbGlrZQorIjptYXAgeHggeXleTSIuICBUaGUgdHJhaWxpbmcgXk0gd2lsbCBiZSBpZ25vcmVkLgorCisJCQkJCQkgICAgICpjb21wYXRpYmxlLWRlZmF1bHQqCitXaGVuIFZpbSBzdGFydHMsIHRoZSAnY29tcGF0aWJsZScgb3B0aW9uIGlzIG9uLiAgVGhpcyB3aWxsIGJlIHVzZWQgd2hlbiBWaW0KK3N0YXJ0cyBpdHMgaW5pdGlhbGl6YXRpb25zLiAgQnV0IGFzIHNvb24gYXMgYSB1c2VyIHZpbXJjIGZpbGUgaXMgZm91bmQsIG9yIGEKK3ZpbXJjIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBvciB0aGUgIlZJTUlOSVQiIGVudmlyb25tZW50IHZhcmlhYmxlIGlzCitzZXQsIGl0IHdpbGwgYmUgc2V0IHRvICdub2NvbXBhdGlibGUnLiAgVGhpcyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNldHRpbmcgb3IKK3Jlc2V0dGluZyBvdGhlciBvcHRpb25zIChzZWUgJ2NvbXBhdGlibGUnKS4gIEJ1dCBvbmx5IHRoZSBvcHRpb25zIHRoYXQgaGF2ZQorbm90IGJlZW4gc2V0IG9yIHJlc2V0IHdpbGwgYmUgY2hhbmdlZC4gIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBsaWtlIHRoZQordmFsdWUgb2YgJ2NvbXBhdGlibGUnIGhhZCB0aGlzIHZhbHVlIHdoZW4gc3RhcnRpbmcgVmltLiAgTm90ZSB0aGF0IHRoaXMKK2RvZXNuJ3QgaGFwcGVuIGZvciB0aGUgc3lzdGVtLXdpZGUgdmltcmMgZmlsZS4KKworQnV0IHRoZXJlIGlzIGEgc2lkZSBlZmZlY3Qgb2Ygc2V0dGluZyBvciByZXNldHRpbmcgJ2NvbXBhdGlibGUnIGF0IHRoZSBtb21lbnQKK2EgLnZpbXJjIGZpbGUgaXMgZm91bmQ6IE1hcHBpbmdzIGFyZSBpbnRlcnByZXRlZCB0aGUgbW9tZW50IHRoZXkgYXJlCitlbmNvdW50ZXJlZC4gIFRoaXMgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4gdXNpbmcgdGhpbmdzIGxpa2UgIjxDUj4iLiAgSWYgdGhlCittYXBwaW5ncyBkZXBlbmQgb24gYSBjZXJ0YWluIHZhbHVlIG9mICdjb21wYXRpYmxlJywgc2V0IG9yIHJlc2V0IGl0IGJlZm9yZQorZ2l2aW5nIHRoZSBtYXBwaW5nLgorCitUaGUgYWJvdmUgYmVoYXZpb3IgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlc2Ugd2F5czoKKy0gSWYgdGhlICItTiIgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGlzIGdpdmVuLCAnbm9jb21wYXRpYmxlJyB3aWxsIGJlIHVzZWQsCisgIGV2ZW4gd2hlbiBubyB2aW1yYyBmaWxlIGV4aXN0cy4KKy0gSWYgdGhlICItQyIgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGlzIGdpdmVuLCAnY29tcGF0aWJsZScgd2lsbCBiZSB1c2VkLCBldmVuCisgIHdoZW4gYSB2aW1yYyBmaWxlIGV4aXN0cy4KKy0gSWYgdGhlICItdSB7dmltcmN9IiBhcmd1bWVudCBpcyB1c2VkLCAnY29tcGF0aWJsZScgd2lsbCBiZSB1c2VkLgorLSBXaGVuIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIGVuZHMgaW4gImV4IiwgdGhlbiB0aGlzIHdvcmtzIGxpa2UgdGhlICItQyIKKyAgYXJndW1lbnQgd2FzIGdpdmVuOiAnY29tcGF0aWJsZScgd2lsbCBiZSB1c2VkLCBldmVuIHdoZW4gYSB2aW1yYyBmaWxlCisgIGV4aXN0cy4gIFRoaXMgaGFzIGJlZW4gZG9uZSB0byBtYWtlIFZpbSBiZWhhdmUgbGlrZSAiZXgiLCB3aGVuIGl0IGlzIHN0YXJ0ZWQKKyAgYXMgImV4Ii4KKworQXZvaWRpbmcgdHJvamFuIGhvcnNlczoJCQkJCSp0cm9qYW4taG9yc2UqCitXaGlsZSByZWFkaW5nIHRoZSAidmltcmMiIG9yIHRoZSAiZXhyYyIgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHNvbWUKK2NvbW1hbmRzIGNhbiBiZSBkaXNhYmxlZCBmb3Igc2VjdXJpdHkgcmVhc29ucyBieSBzZXR0aW5nIHRoZSAnc2VjdXJlJyBvcHRpb24uCitUaGlzIGlzIGFsd2F5cyBkb25lIHdoZW4gZXhlY3V0aW5nIHRoZSBjb21tYW5kIGZyb20gYSB0YWdzIGZpbGUuICBPdGhlcndpc2UgaXQKK3dvdWxkIGJlIHBvc3NpYmxlIHRoYXQgeW91IGFjY2lkZW50YWxseSB1c2UgYSB2aW1yYyBvciB0YWdzIGZpbGUgdGhhdCBzb21lYm9keQorZWxzZSBjcmVhdGVkIGFuZCBjb250YWlucyBuYXN0eSBjb21tYW5kcy4gIFRoZSBkaXNhYmxlZCBjb21tYW5kcyBhcmUgdGhlIG9uZXMKK3RoYXQgc3RhcnQgYSBzaGVsbCwgdGhlIG9uZXMgdGhhdCB3cml0ZSB0byBhIGZpbGUsIGFuZCAiOmF1dG9jbWQiLiAgVGhlICI6bWFwIgorY29tbWFuZHMgYXJlIGVjaG9lZCwgc28geW91IGNhbiBzZWUgd2hpY2gga2V5cyBhcmUgYmVpbmcgbWFwcGVkLgorCUlmIHlvdSB3YW50IFZpbSB0byBleGVjdXRlIGFsbCBjb21tYW5kcyBpbiBhIGxvY2FsIHZpbXJjIGZpbGUsIHlvdQorY2FuIHJlc2V0IHRoZSAnc2VjdXJlJyBvcHRpb24gaW4gdGhlIEVYSU5JVCBvciBWSU1JTklUIGVudmlyb25tZW50IHZhcmlhYmxlIG9yCitpbiB0aGUgZ2xvYmFsICJleHJjIiBvciAidmltcmMiIGZpbGUuICBUaGlzIGlzIG5vdCBwb3NzaWJsZSBpbiAidmltcmMiIG9yCisiZXhyYyIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBmb3Igb2J2aW91cyByZWFzb25zLgorCU9uIFVuaXggc3lzdGVtcywgdGhpcyBvbmx5IGhhcHBlbnMgaWYgeW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoZQordmltcmMgZmlsZS4gIFdhcm5pbmc6IElmIHlvdSB1bnBhY2sgYW4gYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIGEgdmltcmMgb3IgZXhyYworZmlsZSwgaXQgd2lsbCBiZSBvd25lZCBieSB5b3UuICBZb3Ugd29uJ3QgaGF2ZSB0aGUgc2VjdXJpdHkgcHJvdGVjdGlvbi4gIENoZWNrCit0aGUgdmltcmMgZmlsZSBiZWZvcmUgeW91IHN0YXJ0IFZpbSBpbiB0aGF0IGRpcmVjdG9yeSwgb3IgcmVzZXQgdGhlICdleHJjJworb3B0aW9uLiAgU29tZSBVbml4IHN5c3RlbXMgYWxsb3cgYSB1c2VyIHRvIGRvICJjaG93biIgb24gYSBmaWxlLiAgVGhpcyBtYWtlcworaXQgcG9zc2libGUgZm9yIGFub3RoZXIgdXNlciB0byBjcmVhdGUgYSBuYXN0eSB2aW1yYyBhbmQgbWFrZSB5b3UgdGhlIG93bmVyLgorQmUgY2FyZWZ1bCEKKwlXaGVuIHVzaW5nIHRhZyBzZWFyY2ggY29tbWFuZHMsIGV4ZWN1dGluZyB0aGUgc2VhcmNoIGNvbW1hbmQgKHRoZSBsYXN0CitwYXJ0IG9mIHRoZSBsaW5lIGluIHRoZSB0YWdzIGZpbGUpIGlzIGFsd2F5cyBkb25lIGluIHNlY3VyZSBtb2RlLiAgVGhpcyB3b3JrcworanVzdCBsaWtlIGV4ZWN1dGluZyBhIGNvbW1hbmQgZnJvbSBhIHZpbXJjL2V4cmMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisJCQkJCQkJKnNsb3ctc3RhcnQqCitJZiBWaW0gdGFrZXMgYSBsb25nIHRpbWUgdG8gc3RhcnQgdXAsIHRoZXJlIG1heSBiZSBhIGZldyBjYXVzZXM6CistIElmIHRoZSBVbml4IHZlcnNpb24gd2FzIGNvbXBpbGVkIHdpdGggdGhlIEdVSSBhbmQvb3IgWDExIChjaGVjayB0aGUgb3V0cHV0CisgIG9mICI6dmVyc2lvbiIgZm9yICIrR1VJIiBhbmQgIitYMTEiKSwgaXQgbWF5IG5lZWQgdG8gbG9hZCBzaGFyZWQgbGlicmFyaWVzCisgIGFuZCBjb25uZWN0IHRvIHRoZSBYMTEgc2VydmVyLiAgVHJ5IGNvbXBpbGluZyBhIHZlcnNpb24gd2l0aCBHVUkgYW5kIFgxMQorICBkaXNhYmxlZC4gIFRoaXMgYWxzbyBzaG91bGQgbWFrZSB0aGUgZXhlY3V0YWJsZSBzbWFsbGVyLgorICBVc2UgdGhlIHwtWHwgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIGF2b2lkIGNvbm5lY3RpbmcgdG8gdGhlIFggc2VydmVyIHdoZW4KKyAgcnVubmluZyBpbiBhIHRlcm1pbmFsLgorLSBJZiB5b3UgaGF2ZSAidmltaW5mbyIgZW5hYmxlZCwgdGhlIGxvYWRpbmcgb2YgdGhlIHZpbWluZm8gZmlsZSBtYXkgdGFrZSBhCisgIHdoaWxlLiAgWW91IGNhbiBmaW5kIG91dCBpZiB0aGlzIGlzIHRoZSBwcm9ibGVtIGJ5IGRpc2FibGluZyB2aW1pbmZvIGZvciBhCisgIG1vbWVudCAodXNlIHRoZSBWaW0gYXJndW1lbnQgIi1pIE5PTkUiLCB8LWl8KS4gIFRyeSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mCisgIGxpbmVzIHN0b3JlZCBpbiBhIHJlZ2lzdGVyIHdpdGggIjpzZXQgdmltaW5mbz0nMjAsPDUwLHMxMCIuICB8dmltaW5mby1maWxlfC4KKworCQkJCQkJCSo6aW50cm8qCitXaGVuIFZpbSBzdGFydHMgd2l0aG91dCBhIGZpbGUgbmFtZSwgYW4gaW50cm9kdWN0b3J5IG1lc3NhZ2UgaXMgZGlzcGxheWVkIChmb3IKK3Rob3NlIHdobyBkb24ndCBrbm93IHdoYXQgVmltIGlzKS4gIEl0IGlzIHJlbW92ZWQgYXMgc29vbiBhcyB0aGUgZGlzcGxheSBpcworcmVkcmF3biBpbiBhbnkgd2F5LiAgVG8gc2VlIHRoZSBtZXNzYWdlIGFnYWluLCB1c2UgdGhlICI6aW50cm8iIGNvbW1hbmQgKGlmCit0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20sIHlvdSB3aWxsIHNlZSBvbmx5IHBhcnQgb2YgaXQpLgorICAgVG8gYXZvaWQgdGhlIGludHJvIG1lc3NhZ2Ugb24gc3RhcnR1cCwgYWRkIHRoZSAnSScgZmxhZyB0byAnc2hvcnRtZXNzJy4KKworCQkJCQkJCSppbmZvLW1lc3NhZ2UqCitUaGUgfC0taGVscHwgYW5kIHwtLXZlcnNpb258IGFyZ3VtZW50cyBjYXVzZSBWaW0gdG8gcHJpbnQgYSBtZXNzYWdlIGFuZCB0aGVuCitleGl0LiAgTm9ybWFsbHkgdGhlIG1lc3NhZ2UgaXMgc2VuZCB0byBzdGRvdXQsIHRodXMgY2FuIGJlIHJlZGlyZWN0ZWQgdG8gYQorZmlsZSB3aXRoOiA+CisKKwl2aW0gLS1oZWxwID5maWxlCisKK0Zyb20gaW5zaWRlIFZpbTogPgorCisJOnJlYWQgIXZpbSAtLWhlbHAKKworV2hlbiB1c2luZyBndmltLCBpdCBkZXRlY3RzIHRoYXQgaXQgbWlnaHQgaGF2ZSBiZWVuIHN0YXJ0ZWQgZnJvbSB0aGUgZGVza3RvcCwKK3dpdGhvdXQgYSB0ZXJtaW5hbCB0byBzaG93IG1lc3NhZ2VzIG9uLiAgVGhpcyBpcyBkZXRlY3RlZCB3aGVuIGJvdGggc3Rkb3V0IGFuZAorc3RkZXJyIGFyZSBub3QgYSB0dHkuICBUaGlzIGJyZWFrcyB0aGUgIjpyZWFkIiBjb21tYW5kLCBhcyB1c2VkIGluIHRoZSBleGFtcGxlCithYm92ZS4gIFRvIG1ha2UgaXQgd29yayBhZ2Fpbiwgc2V0ICdzaGVsbHJlZGlyJyB0byAiPiIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAorIj4mIjogPgorCisJOnNldCBzaGVsbHJlZGlyPT4KKwk6cmVhZCAhZ3ZpbSAtLWhlbHAKKworVGhpcyBzdGlsbCB3b24ndCB3b3JrIGZvciBzeXN0ZW1zIHdoZXJlIGd2aW0gZG9lcyBub3QgdXNlIHN0ZG91dCBhdCBhbGwKK3Rob3VnaC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiAkVklNIGFuZCAkVklNUlVOVElNRQorCQkJCQkJCQkqJFZJTSoKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAiJFZJTSIgaXMgdXNlZCB0byBsb2NhdGUgdmFyaW91cyB1c2VyIGZpbGVzIGZvciBWaW0sCitzdWNoIGFzIHRoZSB1c2VyIHN0YXJ0dXAgc2NyaXB0ICIudmltcmMiLiAgVGhpcyBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0sIHNlZQorfHN0YXJ0dXB8LgorCitUbyBhdm9pZCB0aGUgbmVlZCBmb3IgZXZlcnkgdXNlciB0byBzZXQgdGhlICRWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUsIFZpbQord2lsbCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmb3IgJFZJTSBpbiB0aGlzIG9yZGVyOgorMS4gVGhlIHZhbHVlIGRlZmluZWQgYnkgdGhlICRWSU0gZW52aXJvbm1lbnQgdmFyaWFibGUuICBZb3UgY2FuIHVzZSB0aGlzIHRvCisgICBtYWtlIFZpbSBsb29rIGluIGEgc3BlY2lmaWMgZGlyZWN0b3J5IGZvciBpdHMgc3VwcG9ydCBmaWxlcy4gIEV4YW1wbGU6ID4KKwlzZXRlbnYgVklNIC9ob21lL3BhdWwvdmltCisyLiBUaGUgcGF0aCBmcm9tICdoZWxwZmlsZScgaXMgdXNlZCwgdW5sZXNzIGl0IGNvbnRhaW5zIHNvbWUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIHRvbyAodGhlIGRlZmF1bHQgaXMgIiRWSU1SVU5USU1FL2RvYy9oZWxwLnR4dCI6IGNoaWNrZW4tZWdnCisgICBwcm9ibGVtKS4gIFRoZSBmaWxlIG5hbWUgKCJoZWxwLnR4dCIgb3IgYW55IG90aGVyKSBpcyByZW1vdmVkLiAgVGhlbgorICAgdHJhaWxpbmcgZGlyZWN0b3J5IG5hbWVzIGFyZSByZW1vdmVkLCBpbiB0aGlzIG9yZGVyOiAiZG9jIiwgInJ1bnRpbWUiIGFuZAorICAgInZpbXt2ZXJzaW9ufSIgKGUuZy4sICJ2aW01NCIpLgorMy4gRm9yIE1TRE9TLCBXaW4zMiBhbmQgT1MvMiBWaW0gdHJpZXMgdG8gdXNlIHRoZSBkaXJlY3RvcnkgbmFtZSBvZiB0aGUKKyAgIGV4ZWN1dGFibGUuICBJZiBpdCBlbmRzIGluICIvc3JjIiwgdGhpcyBpcyByZW1vdmVkLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICB1bnBhY2tlZCB0aGUgLnppcCBmaWxlIGluIHNvbWUgZGlyZWN0b3J5LCBhbmQgYWRqdXN0ZWQgdGhlIHNlYXJjaCBwYXRoIHRvCisgICBmaW5kIHRoZSB2aW0gZXhlY3V0YWJsZS4gIFRyYWlsaW5nIGRpcmVjdG9yeSBuYW1lcyBhcmUgcmVtb3ZlZCwgaW4gdGhpcworICAgb3JkZXI6ICJydW50aW1lIiBhbmQgInZpbXt2ZXJzaW9ufSIgKGUuZy4sICJ2aW01NCIpLgorNC4gRm9yIFVuaXggdGhlIGNvbXBpbGUtdGltZSBkZWZpbmVkIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgaXMgdXNlZCAoc2VlIHRoZQorICAgb3V0cHV0IG9mICI6dmVyc2lvbiIpLgorCitPbmNlIFZpbSBoYXMgZG9uZSB0aGlzIG9uY2UsIGl0IHdpbGwgc2V0IHRoZSAkVklNIGVudmlyb25tZW50IHZhcmlhYmxlLiAgVG8KK2NoYW5nZSBpdCBsYXRlciwgdXNlIGEgIjpsZXQiIGNvbW1hbmQgbGlrZSB0aGlzOiA+CisJOmxldCAkVklNID0gIi9ob21lL3BhdWwvdmltLyIKKzwKKwkJCQkJCQkJKiRWSU1SVU5USU1FKgorVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICIkVklNUlVOVElNRSIgaXMgdXNlZCB0byBsb2NhdGUgdmFyaW91cyBzdXBwb3J0CitmaWxlcywgc3VjaCBhcyB0aGUgb24tbGluZSBkb2N1bWVudGF0aW9uIGFuZCBmaWxlcyB1c2VkIGZvciBzeW50YXgKK2hpZ2hsaWdodGluZy4gIEZvciBleGFtcGxlLCB0aGUgbWFpbiBoZWxwIGZpbGUgaXMgbm9ybWFsbHkKKyIkVklNUlVOVElNRS9kb2MvaGVscC50eHQiLgorWW91IGRvbid0IG5vcm1hbGx5IHNldCAkVklNUlVOVElNRSB5b3Vyc2VsZiwgYnV0IGxldCBWaW0gZmlndXJlIGl0IG91dC4gIFRoaXMKK2lzIHRoZSBvcmRlciB1c2VkIHRvIGZpbmQgdGhlIHZhbHVlIG9mICRWSU1SVU5USU1FOgorMS4gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICRWSU1SVU5USU1FIGlzIHNldCwgaXQgaXMgdXNlZC4gIFlvdSBjYW4gdXNlCisgICB0aGlzIHdoZW4gdGhlIHJ1bnRpbWUgZmlsZXMgYXJlIGluIGFuIHVudXN1YWwgbG9jYXRpb24uCisyLiBJZiAiJFZJTS92aW17dmVyc2lvbn0iIGV4aXN0cywgaXQgaXMgdXNlZC4gIHt2ZXJzaW9ufSBpcyB0aGUgdmVyc2lvbgorICAgbnVtYmVyIG9mIFZpbSwgd2l0aG91dCBhbnkgJy0nIG9yICcuJy4gIEZvciBleGFtcGxlOiAiJFZJTS92aW01NCIuICBUaGlzIGlzCisgICB0aGUgbm9ybWFsIHZhbHVlIGZvciAkVklNUlVOVElNRS4KKzMuIElmICIkVklNL3J1bnRpbWUiIGV4aXN0cywgaXQgaXMgdXNlZC4KKzQuIFRoZSB2YWx1ZSBvZiAkVklNIGlzIHVzZWQuICBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyCisgICB2ZXJzaW9ucy4KKzUuIFdoZW4gdGhlICdoZWxwZmlsZScgb3B0aW9uIGlzIHNldCBhbmQgZG9lc24ndCBjb250YWluIGEgJyQnLCBpdHMgdmFsdWUgaXMKKyAgIHVzZWQsIHdpdGggImRvYy9oZWxwLnR4dCIgcmVtb3ZlZCBmcm9tIHRoZSBlbmQuCisKK0ZvciBVbml4LCB3aGVuIHRoZXJlIGlzIGEgY29tcGlsZWQtaW4gZGVmYXVsdCBmb3IgJFZJTVJVTlRJTUUgKGNoZWNrIHRoZQorb3V0cHV0IG9mICI6dmVyc2lvbiIpLCBzdGVwcyAyLCAzIGFuZCA0IGFyZSBza2lwcGVkLCBhbmQgdGhlIGNvbXBpbGVkLWluCitkZWZhdWx0IGlzIHVzZWQgYWZ0ZXIgc3RlcCA1LiAgVGhpcyBtZWFucyB0aGF0IHRoZSBjb21waWxlZC1pbiBkZWZhdWx0CitvdmVycnVsZXMgdGhlIHZhbHVlIG9mICRWSU0uICBUaGlzIGlzIHVzZWZ1bCBpZiAkVklNIGlzICIvZXRjIiBhbmQgdGhlIHJ1bnRpbWUKK2ZpbGVzIGFyZSBpbiAiL3Vzci9zaGFyZS92aW0vdmltNTQiLgorCitPbmNlIFZpbSBoYXMgZG9uZSB0aGlzIG9uY2UsIGl0IHdpbGwgc2V0IHRoZSAkVklNUlVOVElNRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KK1RvIGNoYW5nZSBpdCBsYXRlciwgdXNlIGEgIjpsZXQiIGNvbW1hbmQgbGlrZSB0aGlzOiA+CisJOmxldCAkVklNUlVOVElNRSA9ICIvaG9tZS9waWV0L3ZpbS92aW01NCIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBTdXNwZW5kaW5nCQkJCQkJKnN1c3BlbmQqCisKKwkJCQkJKmljb25pemUqICppY29uaXNlKiAqQ1RSTC1aKiAqdl9DVFJMLVoqCitDVFJMLVoJCQlTdXNwZW5kIFZpbSwgbGlrZSAiOnN0b3AiLgorCQkJV29ya3MgaW4gTm9ybWFsIGFuZCBpbiBWaXN1YWwgbW9kZS4gIEluIEluc2VydCBhbmQKKwkJCUNvbW1hbmQtbGluZSBtb2RlLCB0aGUgQ1RSTC1aIGlzIGluc2VydGVkIGFzIGEgbm9ybWFsCisJCQljaGFyYWN0ZXIuICBJbiBWaXN1YWwgbW9kZSBWaW0gZ29lcyBiYWNrIHRvIE5vcm1hbAorCQkJbW9kZS4KKworCis6c3VzW3BlbmRdWyFdCW9yCQkJKjpzdXMqICo6c3VzcGVuZCogKjpzdCogKjpzdG9wKgorOnN0W29wXVshXQkJU3VzcGVuZCBWaW0uCisJCQlJZiB0aGUgJyEnIGlzIG5vdCBnaXZlbiBhbmQgJ2F1dG93cml0ZScgaXMgc2V0LCBldmVyeQorCQkJYnVmZmVyIHdpdGggY2hhbmdlcyBhbmQgYSBmaWxlIG5hbWUgaXMgd3JpdHRlbiBvdXQuCisJCQlJZiB0aGUgJyEnIGlzIGdpdmVuIG9yICdhdXRvd3JpdGUnIGlzIG5vdCBzZXQsIGNoYW5nZWQKKwkJCWJ1ZmZlcnMgYXJlIG5vdCB3cml0dGVuLCBkb24ndCBmb3JnZXQgdG8gYnJpbmcgVmltCisJCQliYWNrIHRvIHRoZSBmb3JlZ3JvdW5kIGxhdGVyIQorCitJbiB0aGUgR1VJLCBzdXNwZW5kaW5nIGlzIGltcGxlbWVudGVkIGFzIGljb25pc2luZyBndmltLiAgSW4gV2luZG93cyA5NS9OVCwKK2d2aW0gaXMgbWluaW1pemVkLgorCitPbiBtYW55IFVuaXggc3lzdGVtcywgaXQgaXMgcG9zc2libGUgdG8gc3VzcGVuZCBWaW0gd2l0aCBDVFJMLVouICBUaGlzIGlzIG9ubHkKK3Bvc3NpYmxlIGluIE5vcm1hbCBhbmQgVmlzdWFsIG1vZGUgKHNlZSBuZXh0IGNoYXB0ZXIsIHx2aW0tbW9kZXN8KS4gIFZpbSB3aWxsCitjb250aW51ZSBpZiB5b3UgbWFrZSBpdCB0aGUgZm9yZWdyb3VuZCBqb2IgYWdhaW4uICBPbiBvdGhlciBzeXN0ZW1zLCBDVFJMLVoKK3dpbGwgc3RhcnQgYSBuZXcgc2hlbGwuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSAiOnNoIiBjb21tYW5kLiAgVmltIHdpbGwKK2NvbnRpbnVlIGlmIHlvdSBleGl0IGZyb20gdGhlIHNoZWxsLgorCitJbiBYLXdpbmRvd3MgdGhlIHNlbGVjdGlvbiBpcyBkaXNvd25lZCB3aGVuIFZpbSBzdXNwZW5kcy4gIHRoaXMgbWVhbnMgeW91CitjYW4ndCBwYXN0ZSBpdCBpbiBhbm90aGVyIGFwcGxpY2F0aW9uIChzaW5jZSBWaW0gaXMgZ29pbmcgdG8gc2xlZXAgYW4gYXR0ZW1wdAordG8gZ2V0IHRoZSBzZWxlY3Rpb24gd291bGQgbWFrZSB0aGUgcHJvZ3JhbSBoYW5nKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBTYXZpbmcgc2V0dGluZ3MJCQkJCSpzYXZlLXNldHRpbmdzKgorCitNb3N0bHkgeW91IHdpbGwgZWRpdCB5b3VyIHZpbXJjIGZpbGVzIG1hbnVhbGx5LiAgVGhpcyBnaXZlcyB5b3UgdGhlIGdyZWF0ZXN0CitmbGV4aWJpbGl0eS4gIFRoZXJlIGFyZSBhIGZldyBjb21tYW5kcyB0byBnZW5lcmF0ZSBhIHZpbXJjIGZpbGUgYXV0b21hdGljYWxseS4KK1lvdSBjYW4gdXNlIHRoZXNlIGZpbGVzIGFzIHRoZXkgYXJlLCBvciBjb3B5L3Bhc3RlIGxpbmVzIHRvIGluY2x1ZGUgaW4gYW5vdGhlcgordmltcmMgZmlsZS4KKworCQkJCQkJCSo6bWsqICo6bWtleHJjKgorOm1rW2V4cmNdIFtmaWxlXQlXcml0ZSBjdXJyZW50IGtleSBtYXBwaW5ncyBhbmQgY2hhbmdlZCBvcHRpb25zIHRvCisJCQlbZmlsZV0gKGRlZmF1bHQgIi5leHJjIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkpLAorCQkJdW5sZXNzIGl0IGFscmVhZHkgZXhpc3RzLiAge25vdCBpbiBWaX0KKworOm1rW2V4cmNdISBbZmlsZV0JQWx3YXlzIHdyaXRlIGN1cnJlbnQga2V5IG1hcHBpbmdzIGFuZCBjaGFuZ2VkCisJCQlvcHRpb25zIHRvIFtmaWxlXSAoZGVmYXVsdCAiLmV4cmMiIGluIHRoZSBjdXJyZW50CisJCQlkaXJlY3RvcnkpLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6bWt2KiAqOm1rdmltcmMqCis6bWt2W2ltcmNdWyFdIFtmaWxlXQlMaWtlICI6bWtleHJjIiwgYnV0IHRoZSBkZWZhdWx0IGlzICIudmltcmMiIGluIHRoZQorCQkJY3VycmVudCBkaXJlY3RvcnkuICBUaGUgIjp2ZXJzaW9uIiBjb21tYW5kIGlzIGFsc28KKwkJCXdyaXR0ZW4gdG8gdGhlIGZpbGUuICB7bm90IGluIFZpfQorCitUaGVzZSBjb21tYW5kcyB3aWxsIHdyaXRlICI6bWFwIiBhbmQgIjpzZXQiIGNvbW1hbmRzIHRvIGEgZmlsZSwgaW4gc3VjaCBhIHdheQordGhhdCB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCwgdGhlIGN1cnJlbnQga2V5IG1hcHBpbmdzIGFuZCBvcHRpb25zCit3aWxsIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZXMuICBUaGUgb3B0aW9ucyAnY29sdW1ucycsICdlbmRvZmxpbmUnLAorJ2ZpbGVmb3JtYXQnLCAna2V5JywgJ2xpbmVzJywgJ21vZGlmaWVkJywgJ3Njcm9sbCcsICd0ZXJtJywgJ3RleHRtb2RlJywKKyd0dHlmYXN0JyBhbmQgJ3R0eW1vdXNlJyBhcmUgbm90IGluY2x1ZGVkLCBiZWNhdXNlIHRoZXNlIGFyZSB0ZXJtaW5hbCBvciBmaWxlCitkZXBlbmRlbnQuICBOb3RlIHRoYXQgdGhlIG9wdGlvbnMgJ2JpbmFyeScsICdwYXN0ZScgYW5kICdyZWFkb25seScgYXJlCitpbmNsdWRlZCwgdGhpcyBtaWdodCBub3QgYWx3YXlzIGJlIHdoYXQgeW91IHdhbnQuCisKK1doZW4gc3BlY2lhbCBrZXlzIGFyZSB1c2VkIGluIG1hcHBpbmdzLCBUaGUgJ2Nwb3B0aW9ucycgb3B0aW9uIHdpbGwgYmUKK3RlbXBvcmFyaWx5IHNldCB0byBpdHMgVmltIGRlZmF1bHQsIHRvIGF2b2lkIHRoZSBtYXBwaW5ncyB0byBiZQorbWlzaW50ZXJwcmV0ZWQuICBUaGlzIG1ha2VzIHRoZSBmaWxlIGluY29tcGF0aWJsZSB3aXRoIFZpLCBidXQgbWFrZXMgc3VyZSBpdAorY2FuIGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgdGVybWluYWxzLgorCitPbmx5IGdsb2JhbCBtYXBwaW5ncyBhcmUgc3RvcmVkLCBub3QgbWFwcGluZ3MgbG9jYWwgdG8gYSBidWZmZXIuCisKK0EgY29tbW9uIG1ldGhvZCBpcyB0byB1c2UgYSBkZWZhdWx0ICIudmltcmMiIGZpbGUsIG1ha2Ugc29tZSBtb2RpZmljYXRpb25zCit3aXRoICI6bWFwIiBhbmQgIjpzZXQiIGNvbW1hbmRzIGFuZCB3cml0ZSB0aGUgbW9kaWZpZWQgZmlsZS4gIEZpcnN0IHJlYWQgdGhlCitkZWZhdWx0ICIudmltcmMiIGluIHdpdGggYSBjb21tYW5kIGxpa2UgIjpzb3VyY2UgfnBpZXQvLnZpbXJjLkNwcm9ncyIsIGNoYW5nZQordGhlIHNldHRpbmdzIGFuZCB0aGVuIHNhdmUgdGhlbSBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2l0aCAiOm1rdmltcmMhIi4gIElmCit5b3Ugd2FudCB0byBtYWtlIHRoaXMgZmlsZSB5b3VyIGRlZmF1bHQgLnZpbXJjLCBtb3ZlIGl0IHRvIHlvdXIgaG9tZSBkaXJlY3RvcnkKKyhvbiBVbml4KSwgczogKEFtaWdhKSBvciAkVklNIGRpcmVjdG9yeSAoTVMtRE9TKS4gIFlvdSBjb3VsZCBhbHNvIHVzZQorYXV0b2NvbW1hbmRzIHxhdXRvY29tbWFuZHwgYW5kL29yIG1vZGVsaW5lcyB8bW9kZWxpbmV8LgorCitJZiB5b3Ugb25seSB3YW50IHRvIGFkZCBhIHNpbmdsZSBvcHRpb24gc2V0dGluZyB0byB5b3VyIHZpbXJjLCB5b3UgY2FuIHVzZQordGhlc2Ugc3RlcHM6CisxLiBFZGl0IHlvdXIgdmltcmMgZmlsZSB3aXRoIFZpbS4KKzIuIFBsYXkgd2l0aCB0aGUgb3B0aW9uIHVudGlsIGl0J3MgcmlnaHQuICBFLmcuLCB0cnkgb3V0IGRpZmZlcmVudCB2YWx1ZXMgZm9yCisgICAnZ3VpZm9udCcuCiszLiBBcHBlbmQgYSBsaW5lIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiwgdXNpbmcgdGhlIGV4cHJlc3Npb24gcmVnaXN0ZXIKKyAgICc9JyB0byBlbnRlciB0aGUgdmFsdWUuICBFLmcuLCBmb3IgdGhlICdndWlmb250JyBvcHRpb246ID4KKyAgIG86c2V0IGd1aWZvbnQ9PEMtUj49Jmd1aWZvbnQ8Q1I+PEVzYz4KKzwgIFs8Qy1SPiBpcyBhIENUUkwtUiwgPENSPiBpcyBhIHJldHVybiwgPEVzYz4gaXMgdGhlIGVzY2FwZSBrZXldCisKK05vdGUgdGhhdCB3aGVuIHlvdSBjcmVhdGUgYSAudmltcmMgZmlsZSwgdGhpcyBjYW4gaW5mbHVlbmNlIHRoZSAnY29tcGF0aWJsZScKK29wdGlvbiwgd2hpY2ggaGFzIHNldmVyYWwgc2lkZSBlZmZlY3RzLiAgU2VlIHwnY29tcGF0aWJsZSd8LgorIjpta3ZpbXJjIiwgIjpta2V4cmMiIGFuZCAiOm1rc2Vzc2lvbiIgd3JpdGUgdGhlIGNvbW1hbmQgdG8gc2V0IG9yIHJlc2V0IHRoZQorJ2NvbXBhdGlibGUnIG9wdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgZmlyc3QsIGJlY2F1c2Ugb2YgdGhlc2Ugc2lkZSBlZmZlY3RzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIFZpZXdzIGFuZCBTZXNzaW9ucwkJCQkJKnZpZXdzLXNlc3Npb25zKgorCitUaGlzIGlzIGludHJvZHVjZWQgaW4gc2VjdGlvbnMgfDIxLjR8IGFuZCB8MjEuNXwgb2YgdGhlIHVzZXIgbWFudWFsLgorCisJCQkJCQkqVmlldyogKnZpZXctZmlsZSoKK0EgVmlldyBpcyBhIGNvbGxlY3Rpb24gb2Ygc2V0dGluZ3MgdGhhdCBhcHBseSB0byBvbmUgd2luZG93LiAgWW91IGNhbiBzYXZlIGEKK1ZpZXcgYW5kIHdoZW4geW91IHJlc3RvcmUgaXQgbGF0ZXIsIHRoZSB0ZXh0IGlzIGRpc3BsYXllZCBpbiB0aGUgc2FtZSB3YXkuCitUaGUgb3B0aW9ucyBhbmQgbWFwcGluZ3MgaW4gdGhpcyB3aW5kb3cgd2lsbCBhbHNvIGJlIHJlc3RvcmVkLCBzbyB0aGF0IHlvdSBjYW4KK2NvbnRpbnVlIGVkaXRpbmcgbGlrZSB3aGVuIHRoZSBWaWV3IHdhcyBzYXZlZC4KKworCQkJCQkJKlNlc3Npb24qICpzZXNzaW9uLWZpbGUqCitBIFNlc3Npb24ga2VlcHMgdGhlIFZpZXdzIGZvciBhbGwgd2luZG93cywgcGx1cyB0aGUgZ2xvYmFsIHNldHRpbmdzLiAgWW91IGNhbgorc2F2ZSBhIFNlc3Npb24gYW5kIHdoZW4geW91IHJlc3RvcmUgaXQgbGF0ZXIgdGhlIHdpbmRvdyBsYXlvdXQgbG9va3MgdGhlIHNhbWUuCitZb3UgY2FuIHVzZSBhIFNlc3Npb24gdG8gcXVpY2tseSBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgcHJvamVjdHMsCithdXRvbWF0aWNhbGx5IGxvYWRpbmcgdGhlIGZpbGVzIHlvdSB3ZXJlIGxhc3Qgd29ya2luZyBvbiBpbiB0aGF0IHByb2plY3QuCisKK1ZpZXdzIGFuZCBTZXNzaW9ucyBhcmUgYSBuaWNlIGFkZGl0aW9uIHRvIHZpbWluZm8tZmlsZXMsIHdoaWNoIGFyZSB1c2VkIHRvCityZW1lbWJlciBpbmZvcm1hdGlvbiBmb3IgYWxsIFZpZXdzIGFuZCBTZXNzaW9ucyB0b2dldGhlciB8dmltaW5mby1maWxlfC4KKworWW91IGNhbiBxdWlja2x5IHN0YXJ0IGVkaXRpbmcgd2l0aCBhIHByZXZpb3VzbHkgc2F2ZWQgVmlldyBvciBTZXNzaW9uIHdpdGggdGhlCit8LVN8IGFyZ3VtZW50OiA+CisJdmltIC1TIFNlc3Npb24udmltCis8CitBbGwgdGhpcyBpcyB7bm90IGluIFZpfSBhbmQge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorfCtta3Nlc3Npb258IGZlYXR1cmV9LgorCisJCQkJCQkJKjpta3MqICo6bWtzZXNzaW9uKgorOm1rc1tlc3Npb25dWyFdIFtmaWxlXQlXcml0ZSBhIFZpbSBzY3JpcHQgdGhhdCByZXN0b3JlcyB0aGUgY3VycmVudCBlZGl0aW5nCisJCQlzZXNzaW9uLgorCQkJV2hlbiBbIV0gaXMgaW5jbHVkZWQgYW4gZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbi4KKwkJCVdoZW4gW2ZpbGVdIGlzIG9taXR0ZWQgIlNlc3Npb24udmltIiBpcyB1c2VkLgorCitUaGUgb3V0cHV0IG9mICI6bWtzZXNzaW9uIiBpcyBsaWtlICI6bWt2aW1yYyIsIGJ1dCBhZGRpdGlvbmFsIGNvbW1hbmRzIGFyZQorYWRkZWQgdG8gdGhlIGZpbGUuICBXaGljaCBvbmVzIGRlcGVuZHMgb24gdGhlICdzZXNzaW9ub3B0aW9ucycgb3B0aW9uLiAgVGhlCityZXN1bHRpbmcgZmlsZSwgd2hlbiBleGVjdXRlZCB3aXRoIGEgIjpzb3VyY2UiIGNvbW1hbmQ6CisxLiBSZXN0b3JlcyBnbG9iYWwgbWFwcGluZ3MgYW5kIG9wdGlvbnMsIGlmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMKKyAgICJvcHRpb25zIi4gIFNjcmlwdC1sb2NhbCBtYXBwaW5ncyB3aWxsIG5vdCBiZSB3cml0dGVuLgorMi4gUmVzdG9yZXMgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlciBhbmQgY29udGFpbgorICAgYXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBsZXR0ZXIsIGlmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMgImdsb2JhbHMiLgorMy4gVW5sb2FkcyBhbGwgY3VycmVudGx5IGxvYWRlZCBidWZmZXJzLgorNC4gUmVzdG9yZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMgImN1cmRpciIsIG9yCisgICBzZXRzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byB3aGVyZSB0aGUgU2Vzc2lvbiBmaWxlIGlzIGlmICdzZXNzaW9ub3B0aW9ucycKKyAgIGNvbnRhaW5zICJzZXNkaXIiLgorNS4gUmVzdG9yZXMgR1VJIFZpbSB3aW5kb3cgcG9zaXRpb24sIGlmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMgIndpbnBvcyIuCis2LiBSZXN0b3JlcyBzY3JlZW4gc2l6ZSwgaWYgJ3Nlc3Npb25vcHRpb25zJyBjb250YWlucyAicmVzaXplIi4KKzcuIFJlbG9hZHMgdGhlIGJ1ZmZlciBsaXN0LCB3aXRoIHRoZSBsYXN0IGN1cnNvciBwb3NpdGlvbnMuICBJZgorICAgJ3Nlc3Npb25vcHRpb25zJyBjb250YWlucyAiYnVmZmVycyIgdGhlbiBhbGwgYnVmZmVycyBhcmUgcmVzdG9yZWQsCisgICBpbmNsdWRpbmcgaGlkZGVuIGFuZCB1bmxvYWRlZCBidWZmZXJzLiAgT3RoZXJ3aXNlIG9ubHkgYnVmZmVycyBpbiB3aW5kb3dzCisgICBhcmUgcmVzdG9yZWQuCis4LiBSZXN0b3JlcyBhbGwgd2luZG93cyB3aXRoIHRoZSBzYW1lIGxheW91dC4gIElmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMKKyAgIGNvbnRhaW5zICJoZWxwIiwgaGVscCB3aW5kb3dzIGFyZSByZXN0b3JlZC4gIElmICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMKKyAgICJibGFuayIsIHdpbmRvd3MgZWRpdGluZyBhIGJ1ZmZlciB3aXRob3V0IGEgbmFtZSB3aWxsIGJlIHJlc3RvcmVkLgorICAgSWYgJ3Nlc3Npb25vcHRpb25zJyBjb250YWlucyAid2luc2l6ZSIgYW5kIG5vIChoZWxwL2JsYW5rKSB3aW5kb3dzIHdlcmUKKyAgIGxlZnQgb3V0LCB0aGUgd2luZG93IHNpemVzIGFyZSByZXN0b3JlZCAocmVsYXRpdmUgdG8gdGhlIHNjcmVlbiBzaXplKS4KKyAgIE90aGVyd2lzZSwgdGhlIHdpbmRvd3MgYXJlIGp1c3QgZ2l2ZW4gc2Vuc2libGUgc2l6ZXMuCis5LiBSZXN0b3JlcyB0aGUgVmlld3MgZm9yIGFsbCB0aGUgd2luZG93cywgYXMgd2l0aCB8Om1rdmlld3wuICBCdXQKKyAgICdzZXNzaW9ub3B0aW9ucycgaXMgdXNlZCBpbnN0ZWFkIG9mICd2aWV3b3B0aW9ucycuCisxMC4gSWYgYSBmaWxlIGV4aXN0cyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIFNlc3Npb24gZmlsZSwgYnV0IGVuZGluZyBpbgorICAgIngudmltIiAoZm9yIGVYdHJhKSwgZXhlY3V0ZXMgdGhhdCBhcyB3ZWxsLiAgWW91IGNhbiB1c2UgKngudmltIGZpbGVzIHRvCisgICBzcGVjaWZ5IGFkZGl0aW9uYWwgc2V0dGluZ3MgYW5kIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gU2Vzc2lvbiwKKyAgIHN1Y2ggYXMgY3JlYXRpbmcgbWVudSBpdGVtcyBpbiB0aGUgR1VJIHZlcnNpb24uCisKK0FmdGVyIHJlc3RvcmluZyB0aGUgU2Vzc2lvbiwgdGhlIGZ1bGwgZmlsZW5hbWUgb2YgeW91ciBjdXJyZW50IFNlc3Npb24gaXMKK2F2YWlsYWJsZSBpbiB0aGUgaW50ZXJuYWwgdmFyaWFibGUgInY6dGhpc19zZXNzaW9uIiB8dGhpc19zZXNzaW9uLXZhcmlhYmxlfC4KK0FuIGV4YW1wbGUgbWFwcGluZzogPgorICA6bm1hcCA8RjI+IDp3YTxCYXI+ZXhlICJta3Nlc3Npb24hICIgLiB2OnRoaXNfc2Vzc2lvbjxDUj46c28gfi9zZXNzaW9ucy8KK1RoaXMgc2F2ZXMgdGhlIGN1cnJlbnQgU2Vzc2lvbiwgYW5kIHN0YXJ0cyBvZmYgdGhlIGNvbW1hbmQgdG8gbG9hZCBhbm90aGVyLgorCisJCQkJCQkJKjpta3ZpZSogKjpta3ZpZXcqCis6bWt2aWVbd11bIV0gW2ZpbGVdCVdyaXRlIGEgVmltIHNjcmlwdCB0aGF0IHJlc3RvcmVzIHRoZSBjb250ZW50cyBvZiB0aGUKKwkJCWN1cnJlbnQgd2luZG93LgorCQkJV2hlbiBbIV0gaXMgaW5jbHVkZWQgYW4gZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbi4KKwkJCVdoZW4gW2ZpbGVdIGlzIG9taXR0ZWQgb3IgaXMgYSBudW1iZXIgZnJvbSAxIHRvIDksIGEKKwkJCW5hbWUgaXMgZ2VuZXJhdGVkIGFuZCAndmlld2RpcicgcHJlcGVuZGVkLiAgV2hlbiBsYXN0CisJCQlkaXJlY3RvcnkgbmFtZSBpbiAndmlld2RpcicgZG9lcyBub3QgZXhpc3QsIHRoaXMKKwkJCWRpcmVjdG9yeSBpcyBjcmVhdGVkLgorCQkJQW4gZXhpc3RpbmcgZmlsZSBpcyBhbHdheXMgb3ZlcndyaXR0ZW4gdGhlbi4gIFVzZQorCQkJfDpsb2Fkdmlld3wgdG8gbG9hZCB0aGlzIHZpZXcgYWdhaW4uCisJCQlXaGVuIFtmaWxlXSBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgKCd2aWV3ZGlyJyBpcyBub3QKKwkJCXVzZWQpLCBhIGNvbW1hbmQgdG8gZWRpdCB0aGUgZmlsZSBpcyBhZGRlZCB0byB0aGUKKwkJCWdlbmVyYXRlZCBmaWxlLgorCitUaGUgb3V0cHV0IG9mICI6bWt2aWV3IiBjb250YWlucyB0aGVzZSBpdGVtczoKKzEuIFRoZSBhcmd1bWVudCBsaXN0IHVzZWQgaW4gdGhlIHdpbmRvdy4gIFdoZW4gdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0IGlzCisgICB1c2VkIGl0IGlzIHJlc2V0IHRvIHRoZSBnbG9iYWwgbGlzdC4KKyAgIFRoZSBpbmRleCBpbiB0aGUgYXJndW1lbnQgbGlzdCBpcyBhbHNvIHJlc3RvcmVkLgorMi4gVGhlIGZpbGUgYmVpbmcgZWRpdGVkIGluIHRoZSB3aW5kb3cuICBJZiB0aGVyZSBpcyBubyBmaWxlLCB0aGUgd2luZG93IGlzCisgICBtYWRlIGVtcHR5LgorMy4gUmVzdG9yZSBtYXBwaW5ncywgYWJicmV2aWF0aW9ucyBhbmQgb3B0aW9ucyBsb2NhbCB0byB0aGUgd2luZG93IGlmCisgICAndmlld29wdGlvbnMnIGNvbnRhaW5zICJvcHRpb25zIiBvciAibG9jYWxvcHRpb25zIi4gIEZvciB0aGUgb3B0aW9ucyBpdAorICAgcmVzdG9yZXMgb25seSB2YWx1ZXMgdGhhdCBhcmUgbG9jYWwgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCB2YWx1ZXMgbG9jYWwKKyAgIHRvIHRoZSB3aW5kb3cuCisgICBXaGVuIHN0b3JpbmcgdGhlIHZpZXcgYXMgcGFydCBvZiBhIHNlc3Npb24gYW5kICJvcHRpb25zIiBpcyBpbgorICAgJ3Nlc3Npb25vcHRpb25zJywgZ2xvYmFsIHZhbHVlcyBmb3IgbG9jYWwgb3B0aW9ucyB3aWxsIGJlIHN0b3JlZCB0b28uCis0LiBSZXN0b3JlIGZvbGRzIHdoZW4gdXNpbmcgbWFudWFsIGZvbGRpbmcgYW5kICd2aWV3b3B0aW9ucycgY29udGFpbnMKKyAgICJmb2xkcyIuICBSZXN0b3JlIG1hbnVhbGx5IG9wZW5lZCBhbmQgY2xvc2VkIGZvbGRzLgorNS4gVGhlIHNjcm9sbCBwb3NpdGlvbiBhbmQgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgZmlsZS4gIERvZXNuJ3Qgd29yayB2ZXJ5CisgICB3ZWxsIHdoZW4gdGhlcmUgYXJlIGNsb3NlZCBmb2xkcy4KKzYuIFRoZSBsb2NhbCBjdXJyZW50IGRpcmVjdG9yeSwgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGdsb2JhbCBjdXJyZW50CisgICBkaXJlY3RvcnkuCisKK05vdGUgdGhhdCBWaWV3cyBhbmQgU2Vzc2lvbnMgYXJlIG5vdCBwZXJmZWN0OgorLSBUaGV5IGRvbid0IHJlc3RvcmUgZXZlcnl0aGluZy4gIEZvciBleGFtcGxlLCBkZWZpbmVkIGZ1bmN0aW9ucywgYXV0b2NvbW1hbmRzCisgIGFuZCAiOnN5bnRheCBvbiIgYXJlIG5vdCBpbmNsdWRlZC4gIFRoaW5ncyBsaWtlIHJlZ2lzdGVyIGNvbnRlbnRzIGFuZAorICBjb21tYW5kIGxpbmUgaGlzdG9yeSBhcmUgaW4gdmltaW5mbywgbm90IGluIFNlc3Npb25zIG9yIFZpZXdzLgorLSBHbG9iYWwgb3B0aW9uIHZhbHVlcyBhcmUgb25seSBzZXQgd2hlbiB0aGUgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgdmFsdWUuCisgIFdoZW4gdGhlIGN1cnJlbnQgdmFsdWUgaXMgbm90IHRoZSBkZWZhdWx0IHZhbHVlLCBsb2FkaW5nIGEgU2Vzc2lvbiB3aWxsIG5vdAorICBzZXQgaXQgYmFjayB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gIExvY2FsIG9wdGlvbnMgd2lsbCBiZSBzZXQgYmFjayB0byB0aGUKKyAgZGVmYXVsdCB2YWx1ZSB0aG91Z2guCistIEV4aXN0aW5nIG1hcHBpbmdzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aG91dCB3YXJuaW5nLiAgQW4gZXhpc3RpbmcgbWFwcGluZworICBtYXkgY2F1c2UgYW4gZXJyb3IgZm9yIGFtYmlndWl0eS4KKy0gV2hlbiBzdG9yaW5nIG1hbnVhbCBmb2xkcyBhbmQgd2hlbiBzdG9yaW5nIG1hbnVhbGx5IG9wZW5lZC9jbG9zZWQgZm9sZHMsCisgIGNoYW5nZXMgaW4gdGhlIGZpbGUgYmV0d2VlbiBzYXZpbmcgYW5kIGxvYWRpbmcgdGhlIHZpZXcgd2lsbCBtZXNzIGl0IHVwLgorLSBUaGUgVmltIHNjcmlwdCBpcyBub3QgdmVyeSBlZmZpY2llbnQuICBCdXQgc3RpbGwgZmFzdGVyIHRoYW4gdHlwaW5nIHRoZQorICBjb21tYW5kcyB5b3Vyc2VsZiEKKworCQkJCQkJCSo6bG8qICo6bG9hZHZpZXcqCis6bG9bYWR2aWV3XSBbbnJdCUxvYWQgdGhlIHZpZXcgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaGVuIFtucl0gaXMKKwkJCW9taXR0ZWQsIHRoZSB2aWV3IHN0b3JlZCB3aXRoICI6bWt2aWV3IiBpcyBsb2FkZWQuCisJCQlXaGVuIFtucl0gaXMgc3BlY2lmaWVkLCB0aGUgdmlldyBzdG9yZWQgd2l0aCAiOm1rdmlldworCQkJW25yXSIgaXMgbG9hZGVkLgorCitUaGUgY29tYmluYXRpb24gb2YgIjpta3ZpZXciIGFuZCAiOmxvYWR2aWV3IiBjYW4gYmUgdXNlZCB0byBzdG9yZSB1cCB0byB0ZW4KK2RpZmZlcmVudCB2aWV3cyBvZiBhIGZpbGUuICBUaGVzZSBhcmUgcmVtZW1iZXJlZCBpbiB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZAord2l0aCB0aGUgJ3ZpZXdkaXInIG9wdGlvbi4gIFRoZSB2aWV3cyBhcmUgc3RvcmVkIHVzaW5nIHRoZSBmaWxlIG5hbWUuICBJZiBhCitmaWxlIGlzIHJlbmFtZWQgb3IgYWNjZXNzZWQgdGhyb3VnaCBhIChzeW1ib2xpYykgbGluayB0aGUgdmlldyB3aWxsIG5vdCBiZQorZm91bmQuCisKK1lvdSBtaWdodCB3YW50IHRvIGNsZWFuIHVwIHlvdXIgJ3ZpZXdkaXInIGRpcmVjdG9yeSBub3cgYW5kIHRoZW4uCisKK1RvIGF1dG9tYXRpY2FsbHkgc2F2ZSBhbmQgcmVzdG9yZSB2aWV3cyBmb3IgKi5jIGZpbGVzOiA+CisJYXUgQnVmV2luTGVhdmUgKi5jIG1rdmlldworCWF1IEJ1ZldpbkVudGVyICouYyBzaWxlbnQgbG9hZHZpZXcKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBUaGUgdmltaW5mbyBmaWxlCQkJCSp2aW1pbmZvKiAqdmltaW5mby1maWxlKiAqRTEzNioKKwkJCQkJCSpFNTc1KiAqRTU3NiogKkU1NzcqCitJZiB5b3UgZXhpdCBWaW0gYW5kIGxhdGVyIHN0YXJ0IGl0IGFnYWluLCB5b3Ugd291bGQgbm9ybWFsbHkgbG9zZSBhIGxvdCBvZgoraW5mb3JtYXRpb24uICBUaGUgdmltaW5mbyBmaWxlIGNhbiBiZSB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgaW5mb3JtYXRpb24sIHdoaWNoCitlbmFibGVzIHlvdSB0byBjb250aW51ZSB3aGVyZSB5b3UgbGVmdCBvZmYuCisKK1RoaXMgaXMgaW50cm9kdWNlZCBpbiBzZWN0aW9uIHwyMS4zfCBvZiB0aGUgdXNlciBtYW51YWwuCisKK1RoZSB2aW1pbmZvIGZpbGUgaXMgdXNlZCB0byBzdG9yZToKKy0gVGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5LgorLSBUaGUgc2VhcmNoIHN0cmluZyBoaXN0b3J5LgorLSBUaGUgaW5wdXQtbGluZSBoaXN0b3J5LgorLSBDb250ZW50cyBvZiByZWdpc3RlcnMuCistIE1hcmtzIGZvciBzZXZlcmFsIGZpbGVzLgorLSBGaWxlIG1hcmtzLCBwb2ludGluZyB0byBsb2NhdGlvbnMgaW4gZmlsZXMuCistIExhc3Qgc2VhcmNoL3N1YnN0aXR1dGUgcGF0dGVybiAoZm9yICduJyBhbmQgJyYnKS4KKy0gVGhlIGJ1ZmZlciBsaXN0LgorLSBHbG9iYWwgdmFyaWFibGVzLgorCitUaGUgdmltaW5mbyBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiB0aGUgfCt2aW1pbmZvfCBmZWF0dXJlIGhhcyBiZWVuCitkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCisKK1lvdSBjb3VsZCBhbHNvIHVzZSBhIFNlc3Npb24gZmlsZS4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIHZpbWluZm8gZmlsZQorZG9lcyBub3QgZGVwZW5kIG9uIHdoYXQgeW91IGFyZSB3b3JraW5nIG9uLiAgVGhlcmUgbm9ybWFsbHkgaXMgb25seSBvbmUKK3ZpbWluZm8gZmlsZS4gIFNlc3Npb24gZmlsZXMgYXJlIHVzZWQgdG8gc2F2ZSB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBlZGl0aW5nCitTZXNzaW9uLiAgWW91IGNvdWxkIGhhdmUgc2V2ZXJhbCBTZXNzaW9uIGZpbGVzLCBvbmUgZm9yIGVhY2ggcHJvamVjdCB5b3UgYXJlCit3b3JraW5nIG9uLiAgVmltaW5mbyBhbmQgU2Vzc2lvbiBmaWxlcyB0b2dldGhlciBjYW4gYmUgdXNlZCB0byBlZmZlY3RpdmVseQorZW50ZXIgVmltIGFuZCBkaXJlY3RseSBzdGFydCB3b3JraW5nIGluIHlvdXIgZGVzaXJlZCBzZXR1cC4gfHNlc3Npb24tZmlsZXwKKworCQkJCQkJCSp2aW1pbmZvLXJlYWQqCitXaGVuIFZpbSBpcyBzdGFydGVkIGFuZCB0aGUgJ3ZpbWluZm8nIG9wdGlvbiBpcyBub24tZW1wdHksIHRoZSBjb250ZW50cyBvZgordGhlIHZpbWluZm8gZmlsZSBhcmUgcmVhZCBhbmQgdGhlIGluZm8gY2FuIGJlIHVzZWQgaW4gdGhlIGFwcHJvcHJpYXRlIHBsYWNlcy4KK1RoZSBtYXJrcyBhcmUgbm90IHJlYWQgaW4gYXQgc3RhcnR1cCAoYnV0IGZpbGUgbWFya3MgYXJlKS4gIFNlZQorfGluaXRpYWxpemF0aW9ufCBmb3IgaG93IHRvIHNldCB0aGUgJ3ZpbWluZm8nIG9wdGlvbiB1cG9uIHN0YXJ0dXAuCisKKwkJCQkJCQkqdmltaW5mby13cml0ZSoKK1doZW4gVmltIGV4aXRzIGFuZCAndmltaW5mbycgaXMgbm9uLWVtcHR5LCB0aGUgaW5mbyBpcyBzdG9yZWQgaW4gdGhlIHZpbWluZm8KK2ZpbGUgKGl0J3MgYWN0dWFsbHkgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIG9uZSwgaWYgb25lIGV4aXN0cykuICBUaGUKKyd2aW1pbmZvJyBvcHRpb24gaXMgYSBzdHJpbmcgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGluZm8gc2hvdWxkIGJlCitzdG9yZWQsIGFuZCBjb250YWlucyBsaW1pdHMgb24gaG93IG11Y2ggc2hvdWxkIGJlIHN0b3JlZCAoc2VlICd2aW1pbmZvJykuCisKK05vdGVzIGZvciBVbml4OgorLSBUaGUgZmlsZSBwcm90ZWN0aW9uIGZvciB0aGUgdmltaW5mbyBmaWxlIHdpbGwgYmUgc2V0IHRvIHByZXZlbnQgb3RoZXIgdXNlcnMKKyAgZnJvbSBiZWluZyBhYmxlIHRvIHJlYWQgaXQsIGJlY2F1c2UgaXQgbWF5IGNvbnRhaW4gYW55IHRleHQgb3IgY29tbWFuZHMgdGhhdAorICB5b3UgaGF2ZSB3b3JrZWQgd2l0aC4KKy0gSWYgeW91IHdhbnQgdG8gc2hhcmUgdGhlIHZpbWluZm8gZmlsZSB3aXRoIG90aGVyIHVzZXJzIChlLmcuIHdoZW4geW91ICJzdSIKKyAgdG8gYW5vdGhlciB1c2VyKSwgeW91IGNhbiBtYWtlIHRoZSBmaWxlIHdyaXRhYmxlIGZvciB0aGUgZ3JvdXAgb3IgZXZlcnlib2R5LgorICBWaW0gd2lsbCBwcmVzZXJ2ZSB0aGlzIHdoZW4gd3JpdGluZyBuZXcgdmltaW5mbyBmaWxlcy4gIEJlIGNhcmVmdWwsIGRvbid0CisgIGFsbG93IGp1c3QgYW55Ym9keSB0byByZWFkIGFuZCB3cml0ZSB5b3VyIHZpbWluZm8gZmlsZSEKKy0gVmltIHdpbGwgbm90IG92ZXJ3cml0ZSBhIHZpbWluZm8gZmlsZSB0aGF0IGlzIG5vdCB3cml0YWJsZSBieSB0aGUgY3VycmVudAorICAicmVhbCIgdXNlci4gIFRoaXMgaGVscHMgZm9yIHdoZW4geW91IGRpZCAic3UiIHRvIGJlY29tZSByb290LCBidXQgeW91cgorICAkSE9NRSBpcyBzdGlsbCBzZXQgdG8gYSBub3JtYWwgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgT3RoZXJ3aXNlIFZpbSB3b3VsZAorICBjcmVhdGUgYSB2aW1pbmZvIGZpbGUgb3duZWQgYnkgcm9vdCB0aGF0IG5vYm9keSBlbHNlIGNhbiByZWFkLgorCitNYXJrcyBhcmUgc3RvcmVkIGZvciBlYWNoIGZpbGUgc2VwYXJhdGVseS4gIFdoZW4gYSBmaWxlIGlzIHJlYWQgYW5kICd2aW1pbmZvJworaXMgbm9uLWVtcHR5LCB0aGUgbWFya3MgZm9yIHRoYXQgZmlsZSBhcmUgcmVhZCBmcm9tIHRoZSB2aW1pbmZvIGZpbGUuICBOT1RFOgorVGhlIG1hcmtzIGFyZSBvbmx5IHdyaXR0ZW4gd2hlbiBleGl0aW5nIFZpbSwgd2hpY2ggaXMgZmluZSBiZWNhdXNlIG1hcmtzIGFyZQorcmVtZW1iZXJlZCBmb3IgYWxsIHRoZSBmaWxlcyB5b3UgaGF2ZSBvcGVuZWQgaW4gdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uLAordW5sZXNzICI6YmRlbCIgaXMgdXNlZC4gIElmIHlvdSB3YW50IHRvIHNhdmUgdGhlIG1hcmtzIGZvciBhIGZpbGUgdGhhdCB5b3UgYXJlCithYm91dCB0byBhYmFuZG9uIHdpdGggIjpiZGVsIiwgdXNlICI6d3YiLiAgVGhlICdbJyBhbmQgJ10nIG1hcmtzIGFyZSBub3QKK3N0b3JlZCwgYnV0IHRoZSAnIicgbWFyayBpcy4gIFRoZSAnIicgbWFyayBpcyB2ZXJ5IHVzZWZ1bCBmb3IganVtcGluZyB0byB0aGUKK2N1cnNvciBwb3NpdGlvbiB3aGVuIHRoZSBmaWxlIHdhcyBsYXN0IGV4aXRlZC4gIE5vIG1hcmtzIGFyZSBzYXZlZCBmb3IgZmlsZXMKK3RoYXQgc3RhcnQgd2l0aCBhbnkgc3RyaW5nIGdpdmVuIHdpdGggdGhlICJyIiBmbGFnIGluICd2aW1pbmZvJy4gIFRoaXMgY2FuIGJlCit1c2VkIHRvIGF2b2lkIHNhdmluZyBtYXJrcyBmb3IgZmlsZXMgb24gcmVtb3ZhYmxlIG1lZGlhIChmb3IgTVMtRE9TIHlvdSB3b3VsZAordXNlICJyYToscmI6IiwgZm9yIEFtaWdhICJyZGYwOixyZGYxOixyZGYyOiIpLgorCisJCQkJCQkJKnZpbWluZm8tZmlsZS1tYXJrcyoKK1VwcGVyY2FzZSBtYXJrcyAoJ0EgdG8gJ1opIGFyZSBzdG9yZWQgd2hlbiB3cml0aW5nIHRoZSB2aW1pbmZvIGZpbGUuICBUaGUKK251bWJlcmVkIG1hcmtzICgnMCB0byAnOSkgYXJlIGEgYml0IHNwZWNpYWwuICBXaGVuIHRoZSB2aW1pbmZvIGZpbGUgaXMgd3JpdHRlbgorKHdoZW4gZXhpdGluZyBvciB3aXRoIHRoZSAiOnd2aW1pbmZvIiBjb21tYW5kKSwgJzAgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGN1cnNvcgorcG9zaXRpb24gYW5kIGZpbGUuICBUaGUgb2xkICcwIGlzIG1vdmVkIHRvICcxLCAnMSB0byAnMiwgZXRjLiAgVGhpcworcmVzZW1ibGVzIHdoYXQgaGFwcGVucyB3aXRoIHRoZSAiMSB0byAiOSBkZWxldGUgcmVnaXN0ZXJzLiAgSWYgdGhlIGN1cnJlbnQKK2N1cnNvciBwb3NpdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgaW4gJzAgdG8gJzksIGl0IGlzIG1vdmVkIHRvICcwLCB0byBhdm9pZAoraGF2aW5nIHRoZSBzYW1lIHBvc2l0aW9uIHR3aWNlLiAgVGhlIHJlc3VsdCBpcyB0aGF0IHdpdGggIicwIiwgeW91IGNhbiBqdW1wCitiYWNrIHRvIHRoZSBmaWxlIGFuZCBsaW5lIHdoZXJlIHlvdSBleGl0ZWQgVmltLiAgVG8gZG8gdGhhdCByaWdodCBhd2F5LCB0cnkKK3VzaW5nIHRoaXMgY29tbWFuZDogPgorCisJdmltIC1jICJub3JtYWwgJzAiCisKK0luIGEgc2hlbGwgeW91IGNvdWxkIG1ha2UgYW4gYWxpYXMgZm9yIGl0OiA+CisKKwlhbGlhcyBsdmltIHZpbSAtYyAnIidub3JtYWwgIiciMCciJworCitVc2UgdGhlICJyIiBmbGFnIGluICd2aW1pbmZvJyB0byBzcGVjaWZ5IGZvciB3aGljaCBmaWxlcyBubyBtYXJrcyBzaG91bGQgYmUKK3JlbWVtYmVyZWQuCisKKworVklNSU5GTyBGSUxFIE5BTUUJCQkJCSp2aW1pbmZvLWZpbGUtbmFtZSoKKworLSBUaGUgZGVmYXVsdCBuYW1lIG9mIHRoZSB2aW1pbmZvIGZpbGUgaXMgIiRIT01FLy52aW1pbmZvIiBmb3IgVW5peCBhbmQgT1MvMiwKKyAgInM6LnZpbWluZm8iIGZvciBBbWlnYSwgIiRIT01FXF92aW1pbmZvIiBmb3IgTVMtRE9TIGFuZCBXaW4zMi4gIEZvciB0aGUgbGFzdAorICB0d28sIHdoZW4gJEhPTUUgaXMgbm90IHNldCwgIiRWSU1cX3ZpbWluZm8iIGlzIHVzZWQuICBXaGVuICRWSU0gaXMgYWxzbyBub3QKKyAgc2V0LCAiYzpcX3ZpbWluZm8iIGlzIHVzZWQuICBGb3IgT1MvMiAiJFZJTS8udmltaW5mbyIgaXMgdXNlZCB3aGVuICRIT01FIGlzCisgIG5vdCBzZXQgYW5kICRWSU0gaXMgc2V0LgorLSBUaGUgJ24nIGZsYWcgaW4gdGhlICd2aW1pbmZvJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbm90aGVyIHZpbWluZm8KKyAgZmlsZSBuYW1lIHwndmltaW5mbyd8LgorLSBUaGUgIi1pIiBWaW0gYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gc2V0IGFub3RoZXIgZmlsZSBuYW1lLCB8LWl8LiAgV2hlbiB0aGUKKyAgZmlsZSBuYW1lIGdpdmVuIGlzICJOT05FIiAoYWxsIHVwcGVyY2FzZSksIG5vIHZpbWluZm8gZmlsZSBpcyBldmVyIHJlYWQgb3IKKyAgd3JpdHRlbi4gIEFsc28gbm90IGZvciB0aGUgY29tbWFuZHMgYmVsb3chCistIEZvciB0aGUgY29tbWFuZHMgYmVsb3csIGFub3RoZXIgZmlsZSBuYW1lIGNhbiBiZSBnaXZlbiwgb3ZlcnJpZGluZyB0aGUKKyAgZGVmYXVsdCBhbmQgdGhlIG5hbWUgZ2l2ZW4gd2l0aCAndmltaW5mbycgb3IgIi1pIiAodW5sZXNzIGl0J3MgTk9ORSkuCisKKworQ0hBUkFDVEVSIEVOQ09ESU5HCQkJCQkqdmltaW5mby1lbmNvZGluZyoKKworVGhlIHRleHQgaW4gdGhlIHZpbWluZm8gZmlsZSBpcyBlbmNvZGVkIGFzIHNwZWNpZmllZCB3aXRoIHRoZSAnZW5jb2RpbmcnCitvcHRpb24uICBOb3JtYWxseSB5b3Ugd2lsbCBhbHdheXMgd29yayB3aXRoIHRoZSBzYW1lICdlbmNvZGluZycgdmFsdWUsIGFuZAordGhpcyB3b3JrcyBqdXN0IGZpbmUuICBIb3dldmVyLCBpZiB5b3UgcmVhZCB0aGUgdmltaW5mbyBmaWxlIHdpdGggYW5vdGhlcgordmFsdWUgZm9yICdlbmNvZGluZycgdGhhbiB3aGF0IGl0IHdhcyB3cml0dGVuIHdpdGgsIHNvbWUgb2YgdGhlIHRleHQKKyhub24tQVNDSUkgY2hhcmFjdGVycykgbWF5IGJlIGludmFsaWQuICBJZiB0aGlzIGlzIHVuYWNjZXB0YWJsZSwgYWRkIHRoZSAnYycKK2ZsYWcgdG8gdGhlICd2aW1pbmZvJyBvcHRpb246ID4KKwk6c2V0IHZpbWluZm8rPWMKK1ZpbSB3aWxsIHRoZW4gYXR0ZW1wdCB0byBjb252ZXJ0IHRoZSB0ZXh0IGluIHRoZSB2aW1pbmZvIGZpbGUgZnJvbSB0aGUKKydlbmNvZGluZycgdmFsdWUgaXQgd2FzIHdyaXR0ZW4gd2l0aCB0byB0aGUgY3VycmVudCAnZW5jb2RpbmcnIHZhbHVlLiAgVGhpcworcmVxdWlyZXMgVmltIHRvIGJlIGNvbXBpbGVkIHdpdGggdGhlIHwraWNvbnZ8IGZlYXR1cmUuICBGaWxlbmFtZXMgYXJlIG5vdAorY29udmVydGVkLgorCisKK01BTlVBTExZIFJFQURJTkcgQU5EIFdSSVRJTkcKKworVHdvIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIHRoZSB2aW1pbmZvIGZpbGUgbWFudWFsbHkuICBUaGlzCitjYW4gYmUgdXNlZCB0byBleGNoYW5nZSByZWdpc3RlcnMgYmV0d2VlbiB0d28gcnVubmluZyBWaW0gcHJvZ3JhbXM6IEZpcnN0Cit0eXBlICI6d3YiIGluIG9uZSBhbmQgdGhlbiAiOnJ2IiBpbiB0aGUgb3RoZXIuICBOb3RlIHRoYXQgaWYgdGhlIHJlZ2lzdGVyCithbHJlYWR5IGNvbnRhaW5lZCBzb21ldGhpbmcsIHRoZW4gIjpydiEiIHdvdWxkIGJlIHJlcXVpcmVkLiAgQWxzbyBub3RlCitob3dldmVyIHRoYXQgdGhpcyBtZWFucyBldmVyeXRoaW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBpbmZvcm1hdGlvbiBmcm9tCit0aGUgZmlyc3QgVmltLCBpbmNsdWRpbmcgdGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5LCBldGMuCisKK1RoZSB2aW1pbmZvIGZpbGUgaXRzZWxmIGNhbiBiZSBlZGl0ZWQgYnkgaGFuZCB0b28sIGFsdGhvdWdoIHdlIHN1Z2dlc3QgeW91CitzdGFydCB3aXRoIGFuIGV4aXN0aW5nIG9uZSB0byBnZXQgdGhlIGZvcm1hdCByaWdodC4gIEl0IGlzIHJlYXNvbmFibHkKK3NlbGYtZXhwbGFuYXRvcnkgb25jZSB5b3UncmUgaW4gdGhlcmUuICBUaGlzIGNhbiBiZSB1c2VmdWwgaW4gb3JkZXIgdG8KK2NyZWF0ZSBhIHNlY29uZCBmaWxlLCBzYXkgIn4vLm15X3ZpbWluZm8iIHdoaWNoIGNvdWxkIGNvbnRhaW4gY2VydGFpbgorc2V0dGluZ3MgdGhhdCB5b3UgYWx3YXlzIHdhbnQgd2hlbiB5b3UgZmlyc3Qgc3RhcnQgVmltLiAgRm9yIGV4YW1wbGUsIHlvdQorY2FuIHByZWxvYWQgcmVnaXN0ZXJzIHdpdGggcGFydGljdWxhciBkYXRhLCBvciBwdXQgY2VydGFpbiBjb21tYW5kcyBpbiB0aGUKK2NvbW1hbmQgbGluZSBoaXN0b3J5LiAgQSBsaW5lIGluIHlvdXIgLnZpbXJjIGZpbGUgbGlrZSA+CisJOnJ2aW1pbmZvISB+Ly5teV92aW1pbmZvCitjYW4gYmUgdXNlZCB0byBsb2FkIHRoaXMgaW5mb3JtYXRpb24uICBZb3UgY291bGQgZXZlbiBoYXZlIGRpZmZlcmVudCB2aW1pbmZvcworZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBmaWxlcyAoZS5nLiwgQyBjb2RlKSBhbmQgbG9hZCB0aGVtIGJhc2VkIG9uIHRoZSBmaWxlCituYW1lLCB1c2luZyB0aGUgIjphdXRvY21kIiBjb21tYW5kIChzZWUgfDphdXRvY21kfCkuCisKKwkJCQkJCQkqdmltaW5mby1lcnJvcnMqCitXaGVuIFZpbSBkZXRlY3RzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgYSB2aW1pbmZvIGZpbGUsIGl0IHdpbGwgbm90IG92ZXJ3cml0ZQordGhhdCBmaWxlLiAgSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiAxMCBlcnJvcnMsIFZpbSBzdG9wcyByZWFkaW5nIHRoZSB2aW1pbmZvCitmaWxlLiAgVGhpcyB3YXMgZG9uZSB0byBhdm9pZCBhY2NpZGVudGFsbHkgZGVzdHJveWluZyBhIGZpbGUgd2hlbiB0aGUgZmlsZQorbmFtZSBvZiB0aGUgdmltaW5mbyBmaWxlIGlzIHdyb25nLiAgVGhpcyBjb3VsZCBoYXBwZW4gd2hlbiBhY2NpZGVudGFsbHkgdHlwaW5nCisidmltIC1pIGZpbGUiIHdoZW4geW91IHdhbnRlZCAidmltIC1SIGZpbGUiICh5ZXMsIHNvbWVib2R5IGFjY2lkZW50YWxseSBkaWQKK3RoYXQhKS4gIElmIHlvdSB3YW50IHRvIG92ZXJ3cml0ZSBhIHZpbWluZm8gZmlsZSB3aXRoIGFuIGVycm9yIGluIGl0LCB5b3Ugd2lsbAorZWl0aGVyIGhhdmUgdG8gZml4IHRoZSBlcnJvciwgb3IgZGVsZXRlIHRoZSBmaWxlICh3aGlsZSBWaW0gaXMgcnVubmluZywgc28KK21vc3Qgb2YgdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgcmVzdG9yZWQpLgorCisJCQkJCQkgICAqOnJ2KiAqOnJ2aW1pbmZvKiAqRTE5NSoKKzpydltpbWluZm9dWyFdIFtmaWxlXQlSZWFkIGZyb20gdmltaW5mbyBmaWxlIFtmaWxlXSAoZGVmYXVsdDogc2VlIGFib3ZlKS4KKwkJCUlmIFshXSBpcyBnaXZlbiwgdGhlbiBhbnkgaW5mb3JtYXRpb24gdGhhdCBpcworCQkJYWxyZWFkeSBzZXQgKHJlZ2lzdGVycywgbWFya3MsIGV0Yy4pIHdpbGwgYmUKKwkJCW92ZXJ3cml0dGVuLiAge25vdCBpbiBWaX0KKworCQkJCQkqOnd2KiAqOnd2aW1pbmZvKiAqRTEzNyogKkUxMzgqICpFNTc0KgorOnd2W2ltaW5mb11bIV0gW2ZpbGVdCVdyaXRlIHRvIHZpbWluZm8gZmlsZSBbZmlsZV0gKGRlZmF1bHQ6IHNlZSBhYm92ZSkuCisJCQlUaGUgaW5mb3JtYXRpb24gaW4gdGhlIGZpbGUgaXMgZmlyc3QgcmVhZCBpbiB0byBtYWtlCisJCQlhIG1lcmdlIGJldHdlZW4gb2xkIGFuZCBuZXcgaW5mby4gIFdoZW4gWyFdIGlzIHVzZWQsCisJCQl0aGUgb2xkIGluZm9ybWF0aW9uIGlzIG5vdCByZWFkIGZpcnN0LCBvbmx5IHRoZQorCQkJaW50ZXJuYWwgaW5mbyBpcyB3cml0dGVuLiAgSWYgJ3ZpbWluZm8nIGlzIGVtcHR5LCBtYXJrcworCQkJZm9yIHVwIHRvIDEwMCBmaWxlcyB3aWxsIGJlIHdyaXR0ZW4uCisJCQlXaGVuIHlvdSBnZXQgZXJyb3IgIkUxMzg6IENhbid0IHdyaXRlIHZpbWluZm8gZmlsZSIKKwkJCWNoZWNrIHRoYXQgbm8gb2xkIHRlbXAgZmlsZXMgd2VyZSBsZWZ0IGJlaGluZCAoZS5nLgorCQkJfi8udmltaW5mKikgYW5kIHRoYXQgeW91IGNhbiB3cml0ZSBpbiB0aGUgZGlyZWN0b3J5IG9mCisJCQl0aGUgLnZpbWluZm8gZmlsZS4KKwkJCXtub3QgaW4gVml9CisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9zeW50YXgudHh0IGIvcnVudGltZS9kb2Mvc3ludGF4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjMyMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvc3ludGF4LnR4dApAQCAtMCwwICsxLDQxNjEgQEAKKypzeW50YXgudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1N5bnRheCBoaWdobGlnaHRpbmcJCSpzeW50YXgqICpzeW50YXgtaGlnaGxpZ2h0aW5nKiAqY29sb3JpbmcqCisKK1N5bnRheCBoaWdobGlnaHRpbmcgZW5hYmxlcyBWaW0gdG8gc2hvdyBwYXJ0cyBvZiB0aGUgdGV4dCBpbiBhbm90aGVyIGZvbnQgb3IKK2NvbG9yLglUaG9zZSBwYXJ0cyBjYW4gYmUgc3BlY2lmaWMga2V5d29yZHMgb3IgdGV4dCBtYXRjaGluZyBhIHBhdHRlcm4uICBWaW0KK2RvZXNuJ3QgcGFyc2UgdGhlIHdob2xlIGZpbGUgKHRvIGtlZXAgaXQgZmFzdCksIHNvIHRoZSBoaWdobGlnaHRpbmcgaGFzIGl0cworbGltaXRhdGlvbnMuICBMZXhpY2FsIGhpZ2hsaWdodGluZyBtaWdodCBiZSBhIGJldHRlciBuYW1lLCBidXQgc2luY2UgZXZlcnlib2R5CitjYWxscyBpdCBzeW50YXggaGlnaGxpZ2h0aW5nIHdlJ2xsIHN0aWNrIHdpdGggdGhhdC4KKworVmltIHN1cHBvcnRzIHN5bnRheCBoaWdobGlnaHRpbmcgb24gYWxsIHRlcm1pbmFscy4gIEJ1dCBzaW5jZSBtb3N0IG9yZGluYXJ5Cit0ZXJtaW5hbHMgaGF2ZSB2ZXJ5IGxpbWl0ZWQgaGlnaGxpZ2h0aW5nIHBvc3NpYmlsaXRpZXMsIGl0IHdvcmtzIGJlc3QgaW4gdGhlCitHVUkgdmVyc2lvbiwgZ3ZpbS4KKworSW4gdGhlIFVzZXIgTWFudWFsOgorfHVzcl8wNi50eHR8IGludHJvZHVjZXMgc3ludGF4IGhpZ2hsaWdodGluZy4KK3x1c3JfNDQudHh0fCBpbnRyb2R1Y2VzIHdyaXRpbmcgYSBzeW50YXggZmlsZS4KKworMS4gIFF1aWNrIHN0YXJ0CQkJfDpzeW4tcXN0YXJ0fAorMi4gIFN5bnRheCBmaWxlcwkJfDpzeW4tZmlsZXN8CiszLiAgU3ludGF4IGxvYWRpbmcgcHJvY2VkdXJlCXxzeW50YXgtbG9hZGluZ3wKKzQuICBTeW50YXggZmlsZSByZW1hcmtzCQl8OnN5bi1maWxlLXJlbWFya3N8Cis1LiAgRGVmaW5pbmcgYSBzeW50YXgJCXw6c3luLWRlZmluZXwKKzYuICA6c3ludGF4IGFyZ3VtZW50cwkJfDpzeW4tYXJndW1lbnRzfAorNy4gIFN5bnRheCBwYXR0ZXJucwkJfDpzeW4tcGF0dGVybnwKKzguICBTeW50YXggY2x1c3RlcnMJCXw6c3luLWNsdXN0ZXJ8Cis5LiAgSW5jbHVkaW5nIHN5bnRheCBmaWxlcwl8OnN5bi1pbmNsdWRlfAorMTAuIFN5bmNocm9uaXppbmcJCXw6c3luLXN5bmN8CisxMS4gTGlzdGluZyBzeW50YXggaXRlbXMJfDpzeW50YXh8CisxMi4gSGlnaGxpZ2h0IGNvbW1hbmQJCXw6aGlnaGxpZ2h0fAorMTMuIExpbmtpbmcgZ3JvdXBzCQl8OmhpZ2hsaWdodC1saW5rfAorMTQuIENsZWFuaW5nIHVwCQkJfDpzeW4tY2xlYXJ8CisxNS4gSGlnaGxpZ2h0aW5nIHRhZ3MJCXx0YWctaGlnaGxpZ2h0fAorMTYuIENvbG9yIHh0ZXJtcwkJfHh0ZXJtLWNvbG9yfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CisKK1N5bnRheCBoaWdobGlnaHRpbmcgaXMgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3N5bnRheHwgZmVhdHVyZSBoYXMgYmVlbgorZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFF1aWNrIHN0YXJ0CQkJCQkJKjpzeW4tcXN0YXJ0KgorCisJCQkJCQkqOnN5bi1lbmFibGUqICo6c3ludGF4LWVuYWJsZSoKK1RoaXMgY29tbWFuZCBzd2l0Y2hlcyBvbiBzeW50YXggaGlnaGxpZ2h0aW5nOiA+CisKKwk6c3ludGF4IGVuYWJsZQorCitXaGF0IHRoaXMgY29tbWFuZCBhY3R1YWxseSBkb2VzIGlzIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgPgorCTpzb3VyY2UgJFZJTVJVTlRJTUUvc3ludGF4L3N5bnRheC52aW0KKworSWYgdGhlIFZJTSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCBWaW0gd2lsbCB0cnkgdG8gZmluZAordGhlIHBhdGggaW4gYW5vdGhlciB3YXkgKHNlZSB8JFZJTVJVTlRJTUV8KS4gIFVzdWFsbHkgdGhpcyB3b3JrcyBqdXN0CitmaW5lLiAgSWYgaXQgZG9lc24ndCwgdHJ5IHNldHRpbmcgdGhlIFZJTSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUKK2RpcmVjdG9yeSB3aGVyZSB0aGUgVmltIHN0dWZmIGlzIGxvY2F0ZWQuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBzeW50YXggZmlsZXMKK2FyZSBpbiB0aGUgIi91c3IvdmltL3ZpbTUwL3N5bnRheCIgZGlyZWN0b3J5LCBzZXQgJFZJTVJVTlRJTUUgdG8KKyIvdXNyL3ZpbS92aW01MCIuICBZb3UgbXVzdCBkbyB0aGlzIGluIHRoZSBzaGVsbCwgYmVmb3JlIHN0YXJ0aW5nIFZpbS4KKworCQkJCQkJCSo6c3luLW9uKiAqOnN5bnRheC1vbioKK1RoZSAiOnN5bnRheCBlbmFibGUiIGNvbW1hbmQgd2lsbCBrZWVwIHlvdXIgY3VycmVudCBjb2xvciBzZXR0aW5ncy4gIFRoaXMKK2FsbG93cyB1c2luZyAiOmhpZ2hsaWdodCIgY29tbWFuZHMgdG8gc2V0IHlvdXIgcHJlZmVycmVkIGNvbG9ycyBiZWZvcmUgb3IKK2FmdGVyIHVzaW5nIHRoaXMgY29tbWFuZC4gIElmIHlvdSB3YW50IFZpbSB0byBvdmVycnVsZSB5b3VyIHNldHRpbmdzIHdpdGggdGhlCitkZWZhdWx0cywgdXNlOiA+CisJOnN5bnRheCBvbgorPAorCQkJCQkqOmhpLW5vcm1hbCogKjpoaWdobGlnaHQtbm9ybWFsKgorSWYgeW91IGFyZSBydW5uaW5nIGluIHRoZSBHVUksIHlvdSBjYW4gZ2V0IHdoaXRlIHRleHQgb24gYSBibGFjayBiYWNrZ3JvdW5kCit3aXRoOiA+CisJOmhpZ2hsaWdodCBOb3JtYWwgZ3VpYmc9QmxhY2sgZ3VpZmc9V2hpdGUKK0ZvciBhIGNvbG9yIHRlcm1pbmFsIHNlZSB8OmhpLW5vcm1hbC1jdGVybXwuCitGb3Igc2V0dGluZyB1cCB5b3VyIG93biBjb2xvcnMgc3ludGF4IGhpZ2hsaWdodGluZyBzZWUgfHN5bmNvbG9yfC4KKworTk9URTogVGhlIHN5bnRheCBmaWxlcyBvbiBNUy1ET1MgYW5kIFdpbmRvd3MgaGF2ZSBsaW5lcyB0aGF0IGVuZCBpbiA8Q1I+PE5MPi4KK1RoZSBmaWxlcyBmb3IgVW5peCBlbmQgaW4gPE5MPi4gIFRoaXMgbWVhbnMgeW91IHNob3VsZCB1c2UgdGhlIHJpZ2h0IHR5cGUgb2YKK2ZpbGUgZm9yIHlvdXIgc3lzdGVtLiAgQWx0aG91Z2ggb24gTVMtRE9TIGFuZCBXaW5kb3dzIHRoZSByaWdodCBmb3JtYXQgaXMKK2F1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgdGhlICdmaWxlZm9ybWF0cycgb3B0aW9uIGlzIG5vdCBlbXB0eS4KKworTk9URTogV2hlbiB1c2luZyByZXZlcnNlIHZpZGVvICgiZ3ZpbSAtZmcgd2hpdGUgLWJnIGJsYWNrIiksIHRoZSBkZWZhdWx0IHZhbHVlCitvZiAnYmFja2dyb3VuZCcgd2lsbCBub3QgYmUgc2V0IHVudGlsIHRoZSBHVUkgd2luZG93IGlzIG9wZW5lZCwgd2hpY2ggaXMgYWZ0ZXIKK3JlYWRpbmcgdGhlIC5ndmltcmMuICBUaGlzIHdpbGwgY2F1c2UgdGhlIHdyb25nIGRlZmF1bHQgaGlnaGxpZ2h0aW5nIHRvIGJlCit1c2VkLiAgVG8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mICdiYWNrZ3JvdW5kJyBiZWZvcmUgc3dpdGNoaW5nIG9uCitoaWdobGlnaHRpbmcsIGluY2x1ZGUgdGhlICI6Z3VpIiBjb21tYW5kIGluIHRoZSAuZ3ZpbXJjOiA+CisKKyAgIDpndWkJCSIgb3BlbiB3aW5kb3cgYW5kIHNldCBkZWZhdWx0IGZvciAnYmFja2dyb3VuZCcKKyAgIDpzeW50YXggb24JIiBzdGFydCBoaWdobGlnaHRpbmcsIHVzZSAnYmFja2dyb3VuZCcgdG8gc2V0IGNvbG9ycworCitOT1RFOiBVc2luZyAiOmd1aSIgaW4gdGhlIC5ndmltcmMgbWVhbnMgdGhhdCAiZ3ZpbSAtZiIgd29uJ3Qgc3RhcnQgaW4gdGhlCitmb3JlZ3JvdW5kISAgVXNlICI6Z3VpIC1mIiB0aGVuLgorCisKK1lvdSBjYW4gdG9nZ2xlIHRoZSBzeW50YXggb24vb2ZmIHdpdGggdGhpcyBjb21tYW5kID4KKyAgIDppZiBleGlzdHMoInN5bnRheF9vbiIpIHwgc3ludGF4IG9mZiB8IGVsc2UgfCBzeW50YXggZW5hYmxlIHwgZW5kaWYKKworVG8gcHV0IHRoaXMgaW50byBhIG1hcHBpbmcsIHlvdSBjYW4gdXNlOiA+CisgICA6bWFwIDxGNz4gOmlmIGV4aXN0cygic3ludGF4X29uIikgPEJhcj4KKwlcICAgc3ludGF4IG9mZiA8QmFyPgorCVwgZWxzZSA8QmFyPgorCVwgICBzeW50YXggZW5hYmxlIDxCYXI+CisJXCBlbmRpZiA8Q1I+CitbdXNpbmcgdGhlIHw8Pnwgbm90YXRpb24sIHR5cGUgdGhpcyBsaXRlcmFsbHldCisKK0RldGFpbHMKK1RoZSAiOnN5bnRheCIgY29tbWFuZHMgYXJlIGltcGxlbWVudGVkIGJ5IHNvdXJjaW5nIGEgZmlsZS4gIFRvIHNlZSBleGFjdGx5IGhvdwordGhpcyB3b3JrcywgbG9vayBpbiB0aGUgZmlsZToKKyAgICBjb21tYW5kCQlmaWxlIH4KKyAgICA6c3ludGF4IGVuYWJsZQkkVklNUlVOVElNRS9zeW50YXgvc3ludGF4LnZpbQorICAgIDpzeW50YXggb24JCSRWSU1SVU5USU1FL3N5bnRheC9zeW50YXgudmltCisgICAgOnN5bnRheCBtYW51YWwJJFZJTVJVTlRJTUUvc3ludGF4L21hbnVhbC52aW0KKyAgICA6c3ludGF4IG9mZgkJJFZJTVJVTlRJTUUvc3ludGF4L25vc3ludGF4LnZpbQorQWxzbyBzZWUgfHN5bnRheC1sb2FkaW5nfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBTeW50YXggZmlsZXMJCQkJCQkqOnN5bi1maWxlcyoKKworVGhlIHN5bnRheCBhbmQgaGlnaGxpZ2h0aW5nIGNvbW1hbmRzIGZvciBvbmUgbGFuZ3VhZ2UgYXJlIG5vcm1hbGx5IHN0b3JlZCBpbgorYSBzeW50YXggZmlsZS4JVGhlIG5hbWUgY29udmVudGlvbiBpczogIntuYW1lfS52aW0iLiAgV2hlcmUge25hbWV9IGlzIHRoZQorbmFtZSBvZiB0aGUgbGFuZ3VhZ2UsIG9yIGFuIGFiYnJldmlhdGlvbiAodG8gZml0IHRoZSBuYW1lIGluIDguMyBjaGFyYWN0ZXJzLAorYSByZXF1aXJlbWVudCBpbiBjYXNlIHRoZSBmaWxlIGlzIHVzZWQgb24gYSBET1MgZmlsZXN5c3RlbSkuCitFeGFtcGxlczoKKwljLnZpbQkJcGVybC52aW0JamF2YS52aW0JaHRtbC52aW0KKwljcHAudmltCQlzaC52aW0JCWNzaC52aW0KKworVGhlIHN5bnRheCBmaWxlIGNhbiBjb250YWluIGFueSBFeCBjb21tYW5kcywganVzdCBsaWtlIGEgdmltcmMgZmlsZS4gIEJ1dAordGhlIGlkZWEgaXMgdGhhdCBvbmx5IGNvbW1hbmRzIGZvciBhIHNwZWNpZmljIGxhbmd1YWdlIGFyZSBpbmNsdWRlZC4gIFdoZW4gYQorbGFuZ3VhZ2UgaXMgYSBzdXBlcnNldCBvZiBhbm90aGVyIGxhbmd1YWdlLCBpdCBtYXkgaW5jbHVkZSB0aGUgb3RoZXIgb25lLAorZm9yIGV4YW1wbGUsIHRoZSBjcHAudmltIGZpbGUgY291bGQgaW5jbHVkZSB0aGUgYy52aW0gZmlsZTogPgorICAgOnNvICRWSU1SVU5USU1FL3N5bnRheC9jLnZpbQorCitUaGUgLnZpbSBmaWxlcyBhcmUgbm9ybWFsbHkgbG9hZGVkIHdpdGggYW4gYXV0b2NvbW1hbmQuICBGb3IgZXhhbXBsZTogPgorICAgOmF1IFN5bnRheCBjCSAgICBydW50aW1lISBzeW50YXgvYy52aW0KKyAgIDphdSBTeW50YXggY3BwICAgcnVudGltZSEgc3ludGF4L2NwcC52aW0KK1RoZXNlIGNvbW1hbmRzIGFyZSBub3JtYWxseSBpbiB0aGUgZmlsZSAkVklNUlVOVElNRS9zeW50YXgvc3lubG9hZC52aW0uCisKKworTUFLSU5HIFlPVVIgT1dOIFNZTlRBWCBGSUxFUwkJCQkqbXlzeW50YXhmaWxlKgorCitXaGVuIHlvdSBjcmVhdGUgeW91ciBvd24gc3ludGF4IGZpbGVzLCBhbmQgeW91IHdhbnQgdG8gaGF2ZSBWaW0gdXNlIHRoZXNlCithdXRvbWF0aWNhbGx5IHdpdGggIjpzeW50YXggZW5hYmxlIiwgZG8gdGhpczoKKworMS4gQ3JlYXRlIHlvdXIgdXNlciBydW50aW1lIGRpcmVjdG9yeS4JWW91IHdvdWxkIG5vcm1hbGx5IHVzZSB0aGUgZmlyc3QgaXRlbQorICAgb2YgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uLiAgRXhhbXBsZSBmb3IgVW5peDogPgorCW1rZGlyIH4vLnZpbQorCisyLiBDcmVhdGUgYSBkaXJlY3RvcnkgaW4gdGhlcmUgY2FsbGVkICJzeW50YXgiLiAgRm9yIFVuaXg6ID4KKwlta2RpciB+Ly52aW0vc3ludGF4CisKKzMuIFdyaXRlIHRoZSBWaW0gc3ludGF4IGZpbGUuICBPciBkb3dubG9hZCBvbmUgZnJvbSB0aGUgaW50ZXJuZXQuICBUaGVuIHdyaXRlCisgICBpdCBpbiB5b3VyIHN5bnRheCBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgZm9yIHRoZSAibWluZSIgc3ludGF4OiA+CisJOncgfi8udmltL3N5bnRheC9taW5lLnZpbQorCitOb3cgeW91IGNhbiBzdGFydCB1c2luZyB5b3VyIHN5bnRheCBmaWxlIG1hbnVhbGx5OiA+CisJOnNldCBzeW50YXg9bWluZQorWW91IGRvbid0IGhhdmUgdG8gZXhpdCBWaW0gdG8gdXNlIHRoaXMuCisKK0lmIHlvdSBhbHNvIHdhbnQgVmltIHRvIGRldGVjdCB0aGUgdHlwZSBvZiBmaWxlLCBzZWUgfG5ldy1maWxldHlwZXwuCisKK0lmIHlvdSBhcmUgc2V0dGluZyB1cCBhIHN5c3RlbSB3aXRoIG1hbnkgdXNlcnMgYW5kIHlvdSBkb24ndCB3YW50IGVhY2ggdXNlcgordG8gYWRkIHRoZSBzYW1lIHN5bnRheCBmaWxlLCB5b3UgY2FuIHVzZSBhbm90aGVyIGRpcmVjdG9yeSBmcm9tICdydW50aW1lcGF0aCcuCisKKworQURESU5HIFRPIEFOIEVYSVNUSU5HIFNZTlRBWCBGSUxFCQkqbXlzeW50YXhmaWxlLWFkZCoKKworSWYgeW91IGFyZSBtb3N0bHkgc2F0aXNmaWVkIHdpdGggYW4gZXhpc3Rpbmcgc3ludGF4IGZpbGUsIGJ1dCB3b3VsZCBsaWtlIHRvCithZGQgYSBmZXcgaXRlbXMgb3IgY2hhbmdlIHRoZSBoaWdobGlnaHRpbmcsIGZvbGxvdyB0aGVzZSBzdGVwczoKKworMS4gQ3JlYXRlIHlvdXIgdXNlciBkaXJlY3RvcnkgZnJvbSAncnVudGltZXBhdGgnLCBzZWUgYWJvdmUuCisKKzIuIENyZWF0ZSBhIGRpcmVjdG9yeSBpbiB0aGVyZSBjYWxsZWQgImFmdGVyL3N5bnRheCIuICBGb3IgVW5peDogPgorCW1rZGlyIH4vLnZpbS9hZnRlcgorCW1rZGlyIH4vLnZpbS9hZnRlci9zeW50YXgKKworMy4gV3JpdGUgYSBWaW0gc2NyaXB0IHRoYXQgY29udGFpbnMgdGhlIGNvbW1hbmRzIHlvdSB3YW50IHRvIHVzZS4gIEZvcgorICAgZXhhbXBsZSwgdG8gY2hhbmdlIHRoZSBjb2xvcnMgZm9yIHRoZSBDIHN5bnRheDogPgorCWhpZ2hsaWdodCBjQ29tbWVudCBjdGVybWZnPUdyZWVuIGd1aWZnPUdyZWVuCisKKzQuIFdyaXRlIHRoYXQgZmlsZSBpbiB0aGUgImFmdGVyL3N5bnRheCIgZGlyZWN0b3J5LiAgVXNlIHRoZSBuYW1lIG9mIHRoZQorICAgc3ludGF4LCB3aXRoICIudmltIiBhZGRlZC4gIEZvciBvdXIgQyBzeW50YXg6ID4KKwk6dyB+Ly52aW0vYWZ0ZXIvc3ludGF4L2MudmltCisKK1RoYXQncyBpdC4gIFRoZSBuZXh0IHRpbWUgeW91IGVkaXQgYSBDIGZpbGUgdGhlIENvbW1lbnQgY29sb3Igd2lsbCBiZQorZGlmZmVyZW50LiAgWW91IGRvbid0IGV2ZW4gaGF2ZSB0byByZXN0YXJ0IFZpbS4KKworCitSRVBMQUNJTkcgQU4gRVhJU1RJTkcgU1lOVEFYIEZJTEUJCQkqbXlzeW50YXhmaWxlLXJlcGxhY2UqCisKK0lmIHlvdSBkb24ndCBsaWtlIGEgZGlzdHJpYnV0ZWQgc3ludGF4IGZpbGUsIG9yIHlvdSBoYXZlIGRvd25sb2FkZWQgYSBuZXcKK3ZlcnNpb24sIGZvbGxvdyB0aGUgc2FtZSBzdGVwcyBhcyBmb3IgfG15c3ludGF4ZmlsZXwgYWJvdmUuICBKdXN0IG1ha2Ugc3VyZQordGhhdCB5b3Ugd3JpdGUgdGhlIHN5bnRheCBmaWxlIGluIGEgZGlyZWN0b3J5IHRoYXQgaXMgZWFybHkgaW4gJ3J1bnRpbWVwYXRoJy4KK1ZpbSB3aWxsIG9ubHkgbG9hZCB0aGUgZmlyc3Qgc3ludGF4IGZpbGUgZm91bmQuCisKKworTkFNSU5HIENPTlZFTlRJT05TCisJCQkJICAgICpncm91cC1uYW1lKiAqe2dyb3VwLW5hbWV9KiAqRTY2OSogKlcxOCoKK1RoZSBuYW1lIGZvciBhIGhpZ2hsaWdodCBvciBzeW50YXggZ3JvdXAgbXVzdCBjb25zaXN0IG9mIEFTQ0lJIGxldHRlcnMsIGRpZ2l0cworYW5kIHRoZSB1bmRlcnNjb3JlLiAgQXMgYSByZWdleHA6ICJbYS16QS1aMC05X10qIgorCitUbyBiZSBhYmxlIHRvIGFsbG93IGVhY2ggdXNlciB0byBwaWNrIGhpcyBmYXZvcml0ZSBzZXQgb2YgY29sb3JzLCB0aGVyZSBtdXN0CitiZSBwcmVmZXJyZWQgbmFtZXMgZm9yIGhpZ2hsaWdodCBncm91cHMgdGhhdCBhcmUgY29tbW9uIGZvciBtYW55IGxhbmd1YWdlcy4KK1RoZXNlIGFyZSB0aGUgc3VnZ2VzdGVkIGdyb3VwIG5hbWVzIChpZiBzeW50YXggaGlnaGxpZ2h0aW5nIHdvcmtzIHByb3Blcmx5Cit5b3UgY2FuIHNlZSB0aGUgYWN0dWFsIGNvbG9yLCBleGNlcHQgZm9yICJJZ25vcmUiKToKKworCSpDb21tZW50CWFueSBjb21tZW50CisKKwkqQ29uc3RhbnQJYW55IGNvbnN0YW50CisJIFN0cmluZwkJYSBzdHJpbmcgY29uc3RhbnQ6ICJ0aGlzIGlzIGEgc3RyaW5nIgorCSBDaGFyYWN0ZXIJYSBjaGFyYWN0ZXIgY29uc3RhbnQ6ICdjJywgJ1xuJworCSBOdW1iZXIJCWEgbnVtYmVyIGNvbnN0YW50OiAyMzQsIDB4ZmYKKwkgQm9vbGVhbglhIGJvb2xlYW4gY29uc3RhbnQ6IFRSVUUsIGZhbHNlCisJIEZsb2F0CQlhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50OiAyLjNlMTAKKworCSpJZGVudGlmaWVyCWFueSB2YXJpYWJsZSBuYW1lCisJIEZ1bmN0aW9uCWZ1bmN0aW9uIG5hbWUgKGFsc286IG1ldGhvZHMgZm9yIGNsYXNzZXMpCisKKwkqU3RhdGVtZW50CWFueSBzdGF0ZW1lbnQKKwkgQ29uZGl0aW9uYWwJaWYsIHRoZW4sIGVsc2UsIGVuZGlmLCBzd2l0Y2gsIGV0Yy4KKwkgUmVwZWF0CQlmb3IsIGRvLCB3aGlsZSwgZXRjLgorCSBMYWJlbAkJY2FzZSwgZGVmYXVsdCwgZXRjLgorCSBPcGVyYXRvcgkic2l6ZW9mIiwgIisiLCAiKiIsIGV0Yy4KKwkgS2V5d29yZAlhbnkgb3RoZXIga2V5d29yZAorCSBFeGNlcHRpb24JdHJ5LCBjYXRjaCwgdGhyb3cKKworCSpQcmVQcm9jCWdlbmVyaWMgUHJlcHJvY2Vzc29yCisJIEluY2x1ZGUJcHJlcHJvY2Vzc29yICNpbmNsdWRlCisJIERlZmluZQkJcHJlcHJvY2Vzc29yICNkZWZpbmUKKwkgTWFjcm8JCXNhbWUgYXMgRGVmaW5lCisJIFByZUNvbmRpdAlwcmVwcm9jZXNzb3IgI2lmLCAjZWxzZSwgI2VuZGlmLCBldGMuCisKKwkqVHlwZQkJaW50LCBsb25nLCBjaGFyLCBldGMuCisJIFN0b3JhZ2VDbGFzcwlzdGF0aWMsIHJlZ2lzdGVyLCB2b2xhdGlsZSwgZXRjLgorCSBTdHJ1Y3R1cmUJc3RydWN0LCB1bmlvbiwgZW51bSwgZXRjLgorCSBUeXBlZGVmCUEgdHlwZWRlZgorCisJKlNwZWNpYWwJYW55IHNwZWNpYWwgc3ltYm9sCisJIFNwZWNpYWxDaGFyCXNwZWNpYWwgY2hhcmFjdGVyIGluIGEgY29uc3RhbnQKKwkgVGFnCQl5b3UgY2FuIHVzZSBDVFJMLV0gb24gdGhpcworCSBEZWxpbWl0ZXIJY2hhcmFjdGVyIHRoYXQgbmVlZHMgYXR0ZW50aW9uCisJIFNwZWNpYWxDb21tZW50CXNwZWNpYWwgdGhpbmdzIGluc2lkZSBhIGNvbW1lbnQKKwkgRGVidWcJCWRlYnVnZ2luZyBzdGF0ZW1lbnRzCisKKwkqVW5kZXJsaW5lZAl0ZXh0IHRoYXQgc3RhbmRzIG91dCwgSFRNTCBsaW5rcworCisJKklnbm9yZQkJbGVmdCBibGFuaywgaGlkZGVuCisKKwkqRXJyb3IJCWFueSBlcnJvbmVvdXMgY29uc3RydWN0CisKKwkqVG9kbwkJYW55dGhpbmcgdGhhdCBuZWVkcyBleHRyYSBhdHRlbnRpb247IG1vc3RseSB0aGUKKwkJCWtleXdvcmRzIFRPRE8gRklYTUUgYW5kIFhYWAorCitUaGUgbmFtZXMgbWFya2VkIHdpdGggKiBhcmUgdGhlIHByZWZlcnJlZCBncm91cHM7IHRoZSBvdGhlcnMgYXJlIG1pbm9yIGdyb3Vwcy4KK0ZvciB0aGUgcHJlZmVycmVkIGdyb3VwcywgdGhlICJzeW50YXgudmltIiBmaWxlIGNvbnRhaW5zIGRlZmF1bHQgaGlnaGxpZ2h0aW5nLgorVGhlIG1pbm9yIGdyb3VwcyBhcmUgbGlua2VkIHRvIHRoZSBwcmVmZXJyZWQgZ3JvdXBzLCBzbyB0aGV5IGdldCB0aGUgc2FtZQoraGlnaGxpZ2h0aW5nLiAgWW91IGNhbiBvdmVycmlkZSB0aGVzZSBkZWZhdWx0cyBieSB1c2luZyAiOmhpZ2hsaWdodCIgY29tbWFuZHMKK2FmdGVyIHNvdXJjaW5nIHRoZSAic3ludGF4LnZpbSIgZmlsZS4KKworTm90ZSB0aGF0IGhpZ2hsaWdodCBncm91cCBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLiAgIlN0cmluZyIgYW5kICJzdHJpbmciCitjYW4gYmUgdXNlZCBmb3IgdGhlIHNhbWUgZ3JvdXAuCisKK1RoZSBmb2xsb3dpbmcgbmFtZXMgYXJlIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBhIGdyb3VwIG5hbWU6CisJTk9ORSAgIEFMTCAgIEFMTEJVVCAgIGNvbnRhaW5zCSBjb250YWluZWQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBTeW50YXggbG9hZGluZyBwcm9jZWR1cmUJCQkJKnN5bnRheC1sb2FkaW5nKgorCitUaGlzIGV4cGxhaW5zIHRoZSBkZXRhaWxzIHRoYXQgaGFwcGVuIHdoZW4gdGhlIGNvbW1hbmQgIjpzeW50YXggZW5hYmxlIiBpcworaXNzdWVkLiAgV2hlbiBWaW0gaW5pdGlhbGl6ZXMgaXRzZWxmLCBpdCBmaW5kcyBvdXQgd2hlcmUgdGhlIHJ1bnRpbWUgZmlsZXMgYXJlCitsb2NhdGVkLiAgVGhpcyBpcyB1c2VkIGhlcmUgYXMgdGhlIHZhcmlhYmxlIHwkVklNUlVOVElNRXwuCisKKyI6c3ludGF4IGVuYWJsZSIgYW5kICI6c3ludGF4IG9uIiBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgU291cmNlICRWSU1SVU5USU1FL3N5bnRheC9zeW50YXgudmltCisgICAgfAorICAgICstCUNsZWFyIG91dCBhbnkgb2xkIHN5bnRheCBieSBzb3VyY2luZyAkVklNUlVOVElNRS9zeW50YXgvbm9zeW50YXgudmltCisgICAgfAorICAgICstCVNvdXJjZSBmaXJzdCBzeW50YXgvc3lubG9hZC52aW0gaW4gJ3J1bnRpbWVwYXRoJworICAgIHwJfAorICAgIHwJKy0gIFNldHVwIHRoZSBjb2xvcnMgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuICBJZiBhIGNvbG9yIHNjaGVtZSBpcworICAgIHwJfCAgIGRlZmluZWQgaXQgaXMgbG9hZGVkIGFnYWluIHdpdGggIjpjb2xvcnMge25hbWV9Ii4gIE90aGVyd2lzZQorICAgIHwJfCAgICI6cnVudGltZSEgc3ludGF4L3N5bmNvbG9yLnZpbSIgaXMgdXNlZC4gICI6c3ludGF4IG9uIiBvdmVycnVsZXMKKyAgICB8CXwgICBleGlzdGluZyBjb2xvcnMsICI6c3ludGF4IGVuYWJsZSIgb25seSBzZXRzIGdyb3VwcyB0aGF0IHdlcmVuJ3QKKyAgICB8CXwgICBzZXQgeWV0LgorICAgIHwJfAorICAgIHwJKy0gIFNldCB1cCBzeW50YXggYXV0b2NtZHMgdG8gbG9hZCB0aGUgYXBwcm9wcmlhdGUgc3ludGF4IGZpbGUgd2hlbgorICAgIHwJfCAgIHRoZSAnc3ludGF4JyBvcHRpb24gaXMgc2V0LiAqc3lubG9hZC0xKgorICAgIHwJfAorICAgIHwJKy0gIFNvdXJjZSB0aGUgdXNlcidzIG9wdGlvbmFsIGZpbGUsIGZyb20gdGhlIHxteXN5bnRheGZpbGV8IHZhcmlhYmxlLgorICAgIHwJICAgIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggVmltIDUueCBvbmx5LiAqc3lubG9hZC0yKgorICAgIHwKKyAgICArLQlEbyAiOmZpbGV0eXBlIG9uIiwgd2hpY2ggZG9lcyAiOnJ1bnRpbWUhIGZpbGV0eXBlLnZpbSIuICBJdCBsb2FkcyBhbnkKKyAgICB8CWZpbGV0eXBlLnZpbSBmaWxlcyBmb3VuZC4gIEl0IHNob3VsZCBhbHdheXMgU291cmNlCisgICAgfAkkVklNUlVOVElNRS9maWxldHlwZS52aW0sIHdoaWNoIGRvZXMgdGhlIGZvbGxvd2luZy4KKyAgICB8CXwKKyAgICB8CSstICBJbnN0YWxsIGF1dG9jbWRzIGJhc2VkIG9uIHN1ZmZpeCB0byBzZXQgdGhlICdmaWxldHlwZScgb3B0aW9uCisgICAgfAl8ICAgVGhpcyBpcyB3aGVyZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGZpbGUgbmFtZSBhbmQgZmlsZSB0eXBlIGlzCisgICAgfAl8ICAgbWFkZSBmb3Iga25vd24gZmlsZSB0eXBlcy4gKnN5bmxvYWQtMyoKKyAgICB8CXwKKyAgICB8CSstICBTb3VyY2UgdGhlIHVzZXIncyBvcHRpb25hbCBmaWxlLCBmcm9tIHRoZSAqbXlmaWxldHlwZWZpbGUqCisgICAgfAl8ICAgdmFyaWFibGUuICBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFZpbSA1Lnggb25seS4KKyAgICB8CXwgICAqc3lubG9hZC00KgorICAgIHwJfAorICAgIHwJKy0gIEluc3RhbGwgb25lIGF1dG9jb21tYW5kIHdoaWNoIHNvdXJjZXMgc2NyaXB0cy52aW0gd2hlbiBubyBmaWxlCisgICAgfAl8ICAgdHlwZSB3YXMgZGV0ZWN0ZWQgeWV0LiAqc3lubG9hZC01KgorICAgIHwJfAorICAgIHwJKy0gIFNvdXJjZSAkVklNUlVOVElNRS9tZW51LnZpbSwgdG8gc2V0dXAgdGhlIFN5bnRheCBtZW51LiB8bWVudS52aW18CisgICAgfAorICAgICstCUluc3RhbGwgYSBGaWxlVHlwZSBhdXRvY29tbWFuZCB0byBzZXQgdGhlICdzeW50YXgnIG9wdGlvbiB3aGVuIGEgZmlsZQorICAgIHwJdHlwZSBoYXMgYmVlbiBkZXRlY3RlZC4gKnN5bmxvYWQtNioKKyAgICB8CisgICAgKy0JRXhlY3V0ZSBzeW50YXggYXV0b2NvbW1hbmRzIHRvIHN0YXJ0IHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGVhY2gKKwlhbHJlYWR5IGxvYWRlZCBidWZmZXIuCisKKworVXBvbiBsb2FkaW5nIGEgZmlsZSwgVmltIGZpbmRzIHRoZSByZWxldmFudCBzeW50YXggZmlsZSBhcyBmb2xsb3dzOgorCisgICAgTG9hZGluZyB0aGUgZmlsZSB0cmlnZ2VycyB0aGUgQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmRzLgorICAgIHwKKyAgICArLQlJZiB0aGVyZSBpcyBhIG1hdGNoIHdpdGggb25lIG9mIHRoZSBhdXRvY29tbWFuZHMgZnJvbSB8c3lubG9hZC0zfAorICAgIHwJKGtub3duIGZpbGUgdHlwZXMpIG9yIHxzeW5sb2FkLTR8ICh1c2VyJ3MgZmlsZSB0eXBlcyksIHRoZSAnZmlsZXR5cGUnCisgICAgfAlvcHRpb24gaXMgc2V0IHRvIHRoZSBmaWxlIHR5cGUuCisgICAgfAorICAgICstCVRoZSBhdXRvY29tbWFuZCBhdCB8c3lubG9hZC01fCBpcyB0cmlnZ2VyZWQuICBJZiB0aGUgZmlsZSB0eXBlIHdhcyBub3QKKyAgICB8CWZvdW5kIHlldCwgdGhlbiBzY3JpcHRzLnZpbSBpcyBzZWFyY2hlZCBmb3IgaW4gJ3J1bnRpbWVwYXRoJy4gIFRoaXMKKyAgICB8CXNob3VsZCBhbHdheXMgbG9hZCAkVklNUlVOVElNRS9zY3JpcHRzLnZpbSwgd2hpY2ggZG9lcyB0aGUgZm9sbG93aW5nLgorICAgIHwJfAorICAgIHwJKy0gIFNvdXJjZSB0aGUgdXNlcidzIG9wdGlvbmFsIGZpbGUsIGZyb20gdGhlICpteXNjcmlwdHNmaWxlKgorICAgIHwJfCAgIHZhcmlhYmxlLiAgVGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBWaW0gNS54IG9ubHkuCisgICAgfAl8CisgICAgfAkrLSAgSWYgdGhlIGZpbGUgdHlwZSBpcyBzdGlsbCB1bmtub3duLCBjaGVjayB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUsCisgICAgfAkgICAgYWdhaW4gd2l0aCBjaGVja3MgbGlrZSAiZ2V0bGluZSgxKSA9fiBwYXR0ZXJuIiBhcyB0byB3aGV0aGVyIHRoZQorICAgIHwJICAgIGZpbGUgdHlwZSBjYW4gYmUgcmVjb2duaXplZCwgYW5kIHNldCAnZmlsZXR5cGUnLgorICAgIHwKKyAgICArLQlXaGVuIHRoZSBmaWxlIHR5cGUgd2FzIGRldGVybWluZWQgYW5kICdmaWxldHlwZScgd2FzIHNldCwgdGhpcworICAgIHwJdHJpZ2dlcnMgdGhlIEZpbGVUeXBlIGF1dG9jb21tYW5kIHxzeW5sb2FkLTZ8IGFib3ZlLiAgSXQgc2V0cworICAgIHwJJ3N5bnRheCcgdG8gdGhlIGRldGVybWluZWQgZmlsZSB0eXBlLgorICAgIHwKKyAgICArLQlXaGVuIHRoZSAnc3ludGF4JyBvcHRpb24gd2FzIHNldCBhYm92ZSwgdGhpcyB0cmlnZ2VycyBhbiBhdXRvY29tbWFuZAorICAgIHwJZnJvbSB8c3lubG9hZC0xfCAoYW5kIHxzeW5sb2FkLTJ8KS4gIFRoaXMgZmluZCB0aGUgbWFpbiBzeW50YXggZmlsZSBpbgorICAgIHwJJ3J1bnRpbWVwYXRoJywgd2l0aCB0aGlzIGNvbW1hbmQ6CisgICAgfAkJcnVudGltZSEgc3ludGF4LzxuYW1lPi52aW0KKyAgICB8CisgICAgKy0JQW55IG90aGVyIHVzZXIgaW5zdGFsbGVkIEZpbGVUeXBlIG9yIFN5bnRheCBhdXRvY29tbWFuZHMgYXJlCisJdHJpZ2dlcmVkLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGhpZ2hsaWdodGluZyBmb3IgYSBzcGVjaWZpYworCXN5bnRheC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBTeW50YXggZmlsZSByZW1hcmtzCQkJCQkqOnN5bi1maWxlLXJlbWFya3MqCisKKwkJCQkJCSpiOmN1cnJlbnRfc3ludGF4LXZhcmlhYmxlKgorVmltIHN0b3JlcyB0aGUgbmFtZSBvZiB0aGUgc3ludGF4IHRoYXQgaGFzIGJlZW4gbG9hZGVkIGluIHRoZQorImI6Y3VycmVudF9zeW50YXgiIHZhcmlhYmxlLiAgWW91IGNhbiB1c2UgdGhpcyBpZiB5b3Ugd2FudCB0byBsb2FkIG90aGVyCitzZXR0aW5ncywgZGVwZW5kaW5nIG9uIHdoaWNoIHN5bnRheCBpcyBhY3RpdmUuCUV4YW1wbGU6ID4KKyAgIDphdSBCdWZSZWFkUG9zdCAqIGlmIGI6Y3VycmVudF9zeW50YXggPT0gImNzaCIKKyAgIDphdSBCdWZSZWFkUG9zdCAqICAgZG8tc29tZS10aGluZ3MKKyAgIDphdSBCdWZSZWFkUG9zdCAqIGVuZGlmCisKKworMkhUTUwJCQkJCQkqMmh0bWwudmltKiAqY29udmVydC10by1IVE1MKgorCitUaGlzIGlzIG5vdCBhIHN5bnRheCBmaWxlIGl0c2VsZiwgYnV0IGEgc2NyaXB0IHRoYXQgY29udmVydHMgdGhlIGN1cnJlbnQKK3dpbmRvdyBpbnRvIEhUTUwuICBWaW0gb3BlbnMgYSBuZXcgd2luZG93IGluIHdoaWNoIGl0IGJ1aWxkcyB0aGUgSFRNTCBmaWxlLgorCitZb3UgYXJlIG5vdCBzdXBwb3NlZCB0byBzZXQgdGhlICdmaWxldHlwZScgb3IgJ3N5bnRheCcgb3B0aW9uIHRvICIyaHRtbCIhCitTb3VyY2UgdGhlIHNjcmlwdCB0byBjb252ZXJ0IHRoZSBjdXJyZW50IGZpbGU6ID4KKworCTpydW50aW1lISBzeW50YXgvMmh0bWwudmltCis8CitXYXJuaW5nOiBUaGlzIGlzIHNsb3chCisJCQkJCQkJKjpUT2h0bWwqCitPciB1c2UgdGhlICI6VE9odG1sIiB1c2VyIGNvbW1hbmQuICBJdCBpcyBkZWZpbmVkIGluIGEgc3RhbmRhcmQgcGx1Z2luLgorIjpUT2h0bWwiIGFsc28gd29ya3Mgd2l0aCBhIHJhbmdlIGFuZCBpbiBhIFZpc3VhbCBhcmVhOiA+CisKKwk6MTAsNDBUT2h0bWwKKworQWZ0ZXIgeW91IHNhdmUgdGhlIHJlc3VsdGluZyBmaWxlLCB5b3UgY2FuIHZpZXcgaXQgd2l0aCBhbnkgSFRNTCB2aWV3ZXIsIHN1Y2gKK2FzIE5ldHNjYXBlLiAgVGhlIGNvbG9ycyBzaG91bGQgYmUgZXhhY3RseSB0aGUgc2FtZSBhcyB5b3Ugc2VlIHRoZW0gaW4gVmltLgorCitUbyByZXN0cmljdCB0aGUgY29udmVyc2lvbiB0byBhIHJhbmdlIG9mIGxpbmVzIHNldCAiaHRtbF9zdGFydF9saW5lIiBhbmQKKyJodG1sX2VuZF9saW5lIiB0byB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZSB0byBiZSBjb252ZXJ0ZWQuICBFeGFtcGxlLCB1c2luZwordGhlIGxhc3Qgc2V0IFZpc3VhbCBhcmVhOiA+CisKKwk6bGV0IGh0bWxfc3RhcnRfbGluZSA9IGxpbmUoIic8IikKKwk6bGV0IGh0bWxfZW5kX2xpbmUgPSBsaW5lKCInPiIpCisKK1RoZSBsaW5lcyBhcmUgbnVtYmVyZWQgYWNjb3JkaW5nIHRvICdudW1iZXInIG9wdGlvbiBhbmQgdGhlIE51bWJlcgoraGlnaGxpZ2h0aW5nLiAgWW91IGNhbiBmb3JjZSBsaW5lcyB0byBiZSBudW1iZXJlZCBpbiB0aGUgSFRNTCBvdXRwdXQgYnkKK3NldHRpbmcgImh0bWxfbnVtYmVyX2xpbmVzIiB0byBub24temVybyB2YWx1ZTogPgorICAgOmxldCBodG1sX251bWJlcl9saW5lcyA9IDEKK0ZvcmNlIHRvIG9taXQgdGhlIGxpbmUgbnVtYmVycyBieSB1c2luZyBhIHplcm8gdmFsdWU6ID4KKyAgIDpsZXQgaHRtbF9udW1iZXJfbGluZXMgPSAwCitHbyBiYWNrIHRvIHRoZSBkZWZhdWx0IHRvIHVzZSAnbnVtYmVyJyBieSBkZWxldGluZyB0aGUgdmFyaWFibGU6ID4KKyAgIDp1bmxldCBodG1sX251bWJlcl9saW5lcworCitCeSBkZWZhdWx0LCBIVE1MIG9wdGltaXplZCBmb3Igb2xkIGJyb3dzZXJzIGlzIGdlbmVyYXRlZC4gIElmIHlvdSBwcmVmZXIgdXNpbmcKK2Nhc2NhZGluZyBzdHlsZSBzaGVldHMgKENTUzEpIGZvciB0aGUgYXR0cmlidXRlcyAocmVzdWx0aW5nIGluIGNvbnNpZGVyYWJseQorc2hvcnRlciBhbmQgdmFsaWQgSFRNTCA0IGZpbGUpLCB1c2U6ID4KKyAgIDpsZXQgaHRtbF91c2VfY3NzID0gMQorCitCeSBkZWZhdWx0ICI8cHJlPiIgYW5kICI8L3ByZT4iIGlzIHVzZWQgYXJvdW5kIHRoZSB0ZXh0LiAgVGhpcyBtYWtlcyBpdCBzaG93Cit1cCBhcyB5b3Ugc2VlIGl0IGluIFZpbSwgYnV0IHdpdGhvdXQgd3JhcHBpbmcuCUlmIHlvdSBwcmVmZXIgd3JhcHBpbmcsIGF0IHRoZQorcmlzayBvZiBtYWtpbmcgc29tZSB0aGluZ3MgbG9vayBhIGJpdCBkaWZmZXJlbnQsIHVzZTogPgorICAgOmxldCBodG1sX25vX3ByZSA9IDEKK1RoaXMgd2lsbCB1c2UgPGJyPiBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSBhbmQgdXNlICImbmJzcDsiIGZvciByZXBlYXRlZAorc3BhY2VzLgorCitUaGUgY3VycmVudCB2YWx1ZSBvZiAnZW5jb2RpbmcnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgY2hhcnNldCBvZiB0aGUgSFRNTAorZmlsZS4gIFRoaXMgb25seSB3b3JrcyBmb3IgdGhvc2UgdmFsdWVzIG9mICdlbmNvZGluZycgdGhhdCBoYXZlIGFuIGVxdWl2YWxlbnQKK0hUTUwgY2hhcnNldCBuYW1lLiAgVG8gb3ZlcnJ1bGUgdGhpcyBzZXQgZzpodG1sX3VzZV9lbmNvZGluZyB0byB0aGUgbmFtZSBvZgordGhlIGNoYXJzZXQgdG8gYmUgdXNlZDogPgorICAgOmxldCBodG1sX3VzZV9lbmNvZGluZyA9ICJmb29iYXIiCitUbyBvbWl0IHRoZSBsaW5lIHRoYXQgc3BlY2lmaWVzIHRoZSBjaGFyc2V0LCBzZXQgZzpodG1sX3VzZV9lbmNvZGluZyB0byBhbgorZW1wdHkgc3RyaW5nOiA+CisgICA6bGV0IGh0bWxfdXNlX2VuY29kaW5nID0gIiIKK1RvIGdvIGJhY2sgdG8gdGhlIGF1dG9tYXRpYyBtZWNoYW5pc20sIGRlbGV0ZSB0aGUgZzpodG1sX3VzZV9lbmNvZGluZwordmFyaWFibGU6ID4KKyAgIDp1bmxldCBodG1sX3VzZV9lbmNvZGluZworPAorCQkJCQkgICAgKmNvbnZlcnQtdG8tWE1MKiAqY29udmVydC10by1YSFRNTCoKK0FuIGFsdGVybmF0aXZlIGlzIHRvIGhhdmUgdGhlIHNjcmlwdCBnZW5lcmF0ZSBYSFRNTCAoWE1MIGNvbXBsaWFudCBIVE1MKS4gIFRvCitkbyB0aGlzIHNldCB0aGUgInVzZV94aHRtbCIgdmFyaWFibGU6ID4KKyAgICA6bGV0IHVzZV94aHRtbCA9IDEKK1RvIGRpc2FibGUgaXQgYWdhaW4gZGVsZXRlIHRoZSB2YXJpYWJsZTogPgorICAgIDp1bmxldCB1c2VfeGh0bWwKK1RoZSBnZW5lcmF0ZWQgWEhUTUwgZmlsZSBjYW4gYmUgdXNlZCBpbiBEb2NCb29rIFhNTCBkb2N1bWVudHMuICBTZWU6CisJaHR0cDovL3Blb3BsZS5tZWNoLmt1bGV1dmVuLmFjLmJlL35waXNzYXJpcy9ob3d0by9zcmMyZGIuaHRtbAorCitSZW1hcmtzOgorLSBUaGlzIG9ubHkgd29ya3MgaW4gYSB2ZXJzaW9uIHdpdGggR1VJIHN1cHBvcnQuICBJZiB0aGUgR1VJIGlzIG5vdCBhY3R1YWxseQorICBydW5uaW5nIChwb3NzaWJsZSBmb3IgWDExKSBpdCBzdGlsbCB3b3JrcywgYnV0IG5vdCB2ZXJ5IHdlbGwgKHRoZSBjb2xvcnMKKyAgbWF5IGJlIHdyb25nKS4KKy0gT2xkZXIgYnJvd3NlcnMgd2lsbCBub3Qgc2hvdyB0aGUgYmFja2dyb3VuZCBjb2xvcnMuCistIEZyb20gbW9zdCBicm93c2VycyB5b3UgY2FuIGFsc28gcHJpbnQgdGhlIGZpbGUgKGluIGNvbG9yKSEKKworSGVyZSBpcyBhbiBleGFtcGxlIGhvdyB0byBydW4gdGhlIHNjcmlwdCBvdmVyIGFsbCAuYyBhbmQgLmggZmlsZXMgZnJvbSBhCitVbml4IHNoZWxsOiA+CisgICBmb3IgZiBpbiAqLltjaF07IGRvIGd2aW0gLWYgKyJzeW4gb24iICsicnVuISBzeW50YXgvMmh0bWwudmltIiArIndxIiArInEiICRmOyBkb25lCis8CisKK0FCRUwJCQkJCQkJKmFiZWwudmltKiAqYWJlbC1zeW50YXgqCisKK0FCRUwgaGlnaGxpZ2h0aW5nIHByb3ZpZGVzIHNvbWUgdXNlci1kZWZpbmVkIG9wdGlvbnMuICBUbyBlbmFibGUgdGhlbSwgYXNzaWduCithbnkgdmFsdWUgdG8gdGhlIHJlc3BlY3RpdmUgdmFyaWFibGUuICBFeGFtcGxlOiA+CisJOmxldCBhYmVsX29ic29sZXRlX29rPTEKK1RvIGRpc2FibGUgdGhlbSB1c2UgIjp1bmxldCIuICBFeGFtcGxlOiA+CisJOnVubGV0IGFiZWxfb2Jzb2xldGVfb2sKKworVmFyaWFibGUJCQlIaWdobGlnaHQgfgorYWJlbF9vYnNvbGV0ZV9vawkJb2Jzb2xldGUga2V5d29yZHMgYXJlIHN0YXRlbWVudHMsIG5vdCBlcnJvcnMKK2FiZWxfY3BwX2NvbW1lbnRzX2lsbGVnYWwJZG8gbm90IGludGVycHJldCAnLy8nIGFzIGlubGluZSBjb21tZW50IGxlYWRlcgorCisKK0FEQQkJCQkJCQkqYWRhLnZpbSogKmFkYS1zeW50YXgqCisKK1RoaXMgbW9kZSBpcyBkZXNpZ25lZCBmb3IgdGhlIDE5OTUgZWRpdGlvbiBvZiBBZGEgKCJBZGE5NSIpLCB3aGljaAoraW5jbHVkZXMgc3VwcG9ydCBmb3Igb2JqZWN0ZWQtcHJvZ3JhbW1pbmcsIHByb3RlY3RlZCB0eXBlcywgYW5kIHNvIG9uLgorSXQgaGFuZGxlcyBjb2RlIHdyaXR0ZW4gZm9yIHRoZSBvcmlnaW5hbCBBZGEgbGFuZ3VhZ2UKKygiQWRhODMiIG9yICJBZGE4NyIpIGFzIHdlbGwsIHRob3VnaCBBZGE4MyBjb2RlIHdoaWNoIHVzZXMgQWRhOTUtb25seQora2V5d29yZHMgd2lsbCBiZSB3cm9uZ2x5IGNvbG9yZWQgKHN1Y2ggY29kZSBzaG91bGQgYmUgZml4ZWQgYW55d2F5KS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFkYSwgc2VlIGh0dHA6Ly93d3cuYWRhcG93ZXIuY29tLgorCitUaGUgQWRhIG1vZGUgaGFuZGxlcyBhIG51bWJlciBvZiBzaXR1YXRpb25zIGNsZWFubHkuCitGb3IgZXhhbXBsZSwgaXQga25vd3MgdGhhdCB0aGUgIi0iIGluICItNSIgaXMgYSBudW1iZXIsIGJ1dCB0aGUgc2FtZQorY2hhcmFjdGVyIGluICJBLTUiIGlzIGFuIG9wZXJhdG9yLiAgTm9ybWFsbHksIGEgIndpdGgiIG9yICJ1c2UiIGNsYXVzZQorcmVmZXJlbmNpbmcgYW5vdGhlciBjb21waWxhdGlvbiB1bml0IGlzIGNvbG9yZWQgdGhlIHNhbWUgd2F5IGFzIEMncworIiNpbmNsdWRlIiBpcyBjb2xvcmVkLglJZiB5b3UgaGF2ZSAiQ29uZGl0aW9uYWwiIG9yICJSZXBlYXQiCitncm91cHMgY29sb3JlZCBkaWZmZXJlbnRseSwgdGhlbiAiZW5kIGlmIiBhbmQgImVuZCBsb29wIiB3aWxsIGJlCitjb2xvcmVkIGFzIHBhcnQgb2YgdGhvc2UgcmVzcGVjdGl2ZSBncm91cHMuCitZb3UgY2FuIHNldCB0aGVzZSB0byBkaWZmZXJlbnQgY29sb3JzIHVzaW5nIHZpbSdzICJoaWdobGlnaHQiIGNvbW1hbmQKKyhlLmcuLCB0byBjaGFuZ2UgaG93IGxvb3BzIGFyZSBkaXNwbGF5ZWQsIGVudGVyIHRoZSBjb21tYW5kCisiOmhpIFJlcGVhdCIgZm9sbG93ZWQgYnkgdGhlIGNvbG9yIHNwZWNpZmljYXRpb247IG9uIHNpbXBsZSB0ZXJtaW5hbHMKK3RoZSBjb2xvciBzcGVjaWZpY2F0aW9uIGN0ZXJtZmc9V2hpdGUgb2Z0ZW4gc2hvd3Mgd2VsbCkuCisKK1RoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMgeW91IGNhbiBzZWxlY3QgaW4gdGhpcyBBZGEgbW9kZS4KK1RvIGVuYWJsZSB0aGVtLCBhc3NpZ24gYSB2YWx1ZSB0byB0aGUgb3B0aW9uLiAgRm9yIGV4YW1wbGUsIHRvIHR1cm4gb25lIG9uOgorICAgbGV0IGFkYV9zdGFuZGFyZF90eXBlcyA9IDEKK1RvIGRpc2FibGUgdGhlbSB1c2UgIjp1bmxldCIuICBFeGFtcGxlOgorICAgdW5sZXQgYWRhX3N0YW5kYXJkX3R5cGVzID0gMQorWW91IGNhbiBqdXN0IHVzZSAiOiIgYW5kIHR5cGUgdGhlc2UgaW50byB0aGUgY29tbWFuZCBsaW5lIHRvIHNldCB0aGVzZQordGVtcG9yYXJpbHkgYmVmb3JlIGxvYWRpbmcgYW4gQWRhIGZpbGUuICBZb3UgY2FuIG1ha2UgdGhlc2Ugb3B0aW9uIHNldHRpbmdzCitwZXJtYW5lbnQgYnkgYWRkaW5nIHRoZSAibGV0IiBjb21tYW5kKHMpLCB3aXRob3V0IGEgY29sb24sCit0byB5b3VyICJ+Ly52aW1yYyIgZmlsZS4KKworSGVyZSBhcmUgdGhlIEFkYSBtb2RlIG9wdGlvbnM6CisKK1ZhcmlhYmxlCQkgQWN0aW9uCX4KK2FkYV9zdGFuZGFyZF90eXBlcwkgSGlnaGxpZ2h0IHR5cGVzIGluIHBhY2thZ2UgU3RhbmRhcmQgKGUuZy4sICJGbG9hdCIpCithZGFfc3BhY2VfZXJyb3JzCSBIaWdobGlnaHQgZXh0cmFuZW91cyBlcnJvcnMgaW4gc3BhY2VzLi4uCithZGFfbm9fdHJhaWxfc3BhY2VfZXJyb3IgICBidXQgaWdub3JlIHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGEgbGluZQorYWRhX25vX3RhYl9zcGFjZV9lcnJvcgkgICBidXQgaWdub3JlIHRhYnMgYWZ0ZXIgc3BhY2VzCithZGFfd2l0aHVzZV9vcmRpbmFyeQkgU2hvdyAid2l0aCIgYW5kICJ1c2UiIGFzIG9yZGluYXJ5IGtleXdvcmRzCisJCQkgICAod2hlbiB1c2VkIHRvIHJlZmVyZW5jZSBvdGhlciBjb21waWxhdGlvbiB1bml0cworCQkJICAgdGhleSdyZSBub3JtYWxseSBoaWdobGlnaHRlZCBzcGVjaWFsbHkpLgorYWRhX2JlZ2luX3ByZXByb2MJIFNob3cgYWxsIGJlZ2luLWxpa2Uga2V5d29yZHMgdXNpbmcgdGhlIGNvbG9yaW5nCisJCQkgICBvZiBDIHByZXByb2Nlc3NvciBjb21tYW5kcy4KKworRXZlbiBvbiBhIHNsb3cgKDkwTWh6KSBQQyB0aGlzIG1vZGUgd29ya3MgcXVpY2tseSwgYnV0IGlmIHlvdSBmaW5kCit0aGUgcGVyZm9ybWFuY2UgdW5hY2NlcHRhYmxlLCB0dXJuIG9uIGFkYV93aXRodXNlX29yZGluYXJ5LgorCisKK0FOVAkJCQkJCSphbnQudmltKiAqYW50LXN5bnRheCoKKworVGhlIGFudCBzeW50YXggZmlsZSBwcm92aWRlcyBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBqYXZhc2NyaXB0IGFuZCBweXRob24KK2J5IGRlZmF1bHQuIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIG90aGVyIHNjcmlwdCBsYW5ndWFnZXMgY2FuIGJlIGluc3RhbGxlZAorYnkgdGhlIGZ1bmN0aW9uIEFudFN5bnRheFNjcmlwdCgpLCB3aGljaCB0YWtlcyB0aGUgdGFnIG5hbWUgYXMgZmlyc3QgYXJndW1lbnQKK2FuZCB0aGUgc2NyaXB0IHN5bnRheCBmaWxlIG5hbWUgYXMgc2Vjb25kIGFyZ3VtZW50LiBFeGFtcGxlOiA+CisKKwk6Y2FsbCBBbnRTeW50YXhTY3JpcHQoJ3BlcmwnLCAncGVybC52aW0nKQorCit3aWxsIGluc3RhbGwgc3ludGF4IHBlcmwgaGlnaGxpZ2h0aW5nIGZvciB0aGUgZm9sbG93aW5nIGFudCBjb2RlID4KKworCTxzY3JpcHQgbGFuZ3VhZ2UgPSAncGVybCc+PCFbQ0RBVEFbCisJICAgICMgZXZlcnl0aGluZyBpbnNpZGUgaXMgaGlnaGxpZ2h0ZWQgYXMgcGVybAorCV1dPjwvc2NyaXB0PgorCitTZWUgfG15c3ludGF4ZmlsZS1hZGR8IGZvciBpbnN0YWxsaW5nIHNjcmlwdCBsYW5ndWFnZXMgcGVybWFuZW50bHkuCisKKworQVBBQ0hFCQkJCQkJKmFwYWNoZS52aW0qICphcGFjaGUtc3ludGF4KgorCitUaGUgYXBhY2hlIHN5bnRheCBmaWxlIHByb3ZpZGVzIHN5bnRheCBoaWdobGlnaHRpbmcgZGVwZW5kaW5nIG9uIEFwYWNoZSBIVFRQCitzZXJ2ZXIgdmVyc2lvbiwgYnkgZGVmYXVsdCBmb3IgMS4zLnguICBTZXQgImFwYWNoZV92ZXJzaW9uIiB0byBBcGFjaGUgdmVyc2lvbgorKGFzIGEgc3RyaW5nKSB0byBnZXQgaGlnaGxpZ2h0aW5nIGZvciBhbm90aGVyIHZlcnNpb24uCUV4YW1wbGU6ID4KKworCTpsZXQgYXBhY2hlX3ZlcnNpb24gPSAiMi4wIgorPAorCisJCSphc20udmltKiAqYXNtaDgzMDAudmltKiAqbmFzbS52aW0qICptYXNtLnZpbSogKmFzbTY4ayoKK0FTU0VNQkxZCSphc20tc3ludGF4KiAqYXNtaDgzMDAtc3ludGF4KiAqbmFzbS1zeW50YXgqICptYXNtLXN5bnRheCoKKwkJKmFzbTY4ay1zeW50YXgqICpmYXNtLnZpbSoKKworRmlsZXMgbWF0Y2hpbmcgIiouaSIgY291bGQgYmUgUHJvZ3Jlc3Mgb3IgQXNzZW1ibHkuICBJZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbgorZG9lc24ndCB3b3JrIGZvciB5b3UsIG9yIHlvdSBkb24ndCBlZGl0IFByb2dyZXNzIGF0IGFsbCwgdXNlIHRoaXMgaW4geW91cgorc3RhcnR1cCB2aW1yYzogPgorICAgOmxldCBmaWxldHlwZV9pID0gImFzbSIKK1JlcGxhY2UgImFzbSIgd2l0aCB0aGUgdHlwZSBvZiBhc3NlbWJseSB5b3UgdXNlLgorCitUaGVyZSBhcmUgbWFueSB0eXBlcyBvZiBhc3NlbWJseSBsYW5ndWFnZXMgdGhhdCBhbGwgdXNlIHRoZSBzYW1lIGZpbGUgbmFtZQorZXh0ZW5zaW9ucy4gIFRoZXJlZm9yZSB5b3Ugd2lsbCBoYXZlIHRvIHNlbGVjdCB0aGUgdHlwZSB5b3Vyc2VsZiwgb3IgYWRkIGEKK2xpbmUgaW4gdGhlIGFzc2VtYmx5IGZpbGUgdGhhdCBWaW0gd2lsbCByZWNvZ25pemUuICBDdXJyZW50bHkgdGhlc2Ugc3ludGF4CitmaWxlcyBhcmUgaW5jbHVkZWQ6CisJYXNtCQlHTlUgYXNzZW1ibHkgKHRoZSBkZWZhdWx0KQorCWFzbTY4awkJTW90b3JvbGEgNjgweDAgYXNzZW1ibHkKKwlhc21oODMwMAlIaXRhY2hpIEgtODMwMCB2ZXJzaW9uIG9mIEdOVSBhc3NlbWJseQorCWlhNjQJCUludGVsIEl0YW5pdW0gNjQKKwlmYXNtCQlGbGF0IGFzc2VtYmx5IChodHRwOi8vZmxhdGFzc2VtYmxlci5uZXQpCisJbWFzbQkJTWljcm9zb2Z0IGFzc2VtYmx5IChwcm9iYWJseSB3b3JrcyBmb3IgYW55IDgweDg2KQorCW5hc20JCU5ldHdpZGUgYXNzZW1ibHkKKwl0YXNtCQlUdXJibyBBc3NlbWJseSAod2l0aCBvcGNvZGVzIDgweDg2IHVwIHRvIFBlbnRpdW0sIGFuZAorCQkJTU1YKQorCXBpYwkJUElDIGFzc2VtYmx5IChjdXJyZW50bHkgZm9yIFBJQzE2Rjg0KQorCitUaGUgbW9zdCBmbGV4aWJsZSBpcyB0byBhZGQgYSBsaW5lIGluIHlvdXIgYXNzZW1ibHkgZmlsZSBjb250YWluaW5nOiA+CisJOmFzbXN5bnRheD1uYXNtCitSZXBsYWNlICJuYXNtIiB3aXRoIHRoZSBuYW1lIG9mIHRoZSByZWFsIGFzc2VtYmx5IHN5bnRheC4gIFRoaXMgbGluZSBtdXN0IGJlCitvbmUgb2YgdGhlIGZpcnN0IGZpdmUgbGluZXMgaW4gdGhlIGZpbGUuCisKK1RoZSBzeW50YXggdHlwZSBjYW4gYWx3YXlzIGJlIG92ZXJydWxlZCBmb3IgYSBzcGVjaWZpYyBidWZmZXIgYnkgc2V0dGluZyB0aGUKK2I6YXNtc3ludGF4IHZhcmlhYmxlOiA+CisJOmxldCBiOmFzbXN5bnRheD1uYXNtCisKK0lmIGI6YXNtc3ludGF4IGlzIG5vdCBzZXQsIGVpdGhlciBhdXRvbWF0aWNhbGx5IG9yIGJ5IGhhbmQsIHRoZW4gdGhlIHZhbHVlIG9mCit0aGUgZ2xvYmFsIHZhcmlhYmxlIGFzbXN5bnRheCBpcyB1c2VkLglUaGlzIGNhbiBiZSBzZWVuIGFzIGEgZGVmYXVsdCBhc3NlbWJseQorbGFuZ3VhZ2U6ID4KKwk6bGV0IGFzbXN5bnRheD1uYXNtCisKK0FzIGEgbGFzdCByZXNvcnQsIGlmIG5vdGhpbmcgaXMgZGVmaW5lZCwgdGhlICJhc20iIHN5bnRheCBpcyB1c2VkLgorCisKK05ldHdpZGUgYXNzZW1ibGVyIChuYXNtLnZpbSkgb3B0aW9uYWwgaGlnaGxpZ2h0aW5nIH4KKworVG8gZW5hYmxlIGEgZmVhdHVyZTogPgorCTpsZXQgICB7dmFyaWFibGV9PTF8c2V0IHN5bnRheD1uYXNtCitUbyBkaXNhYmxlIGEgZmVhdHVyZTogPgorCTp1bmxldCB7dmFyaWFibGV9ICB8c2V0IHN5bnRheD1uYXNtCisKK1ZhcmlhYmxlCQlIaWdobGlnaHQgfgorbmFzbV9sb29zZV9zeW50YXgJdW5vZmZpY2lhbCBwYXJzZXIgYWxsb3dlZCBzeW50YXggbm90IGFzIEVycm9yCisJCQkgIChwYXJzZXIgZGVwZW5kZW50OyBub3QgcmVjb21tZW5kZWQpCituYXNtX2N0eF9vdXRzaWRlX21hY3JvCWNvbnRleHRzIG91dHNpZGUgbWFjcm8gbm90IGFzIEVycm9yCituYXNtX25vX3dhcm4JCXBvdGVudGlhbGx5IHJpc2t5IHN5bnRheCBub3QgYXMgVG9EbworCisKK0FTUFBFUkwgYW5kIEFTUFZCUwkJCSphc3BwZXJsLXN5bnRheCogKmFzcHZicy1zeW50YXgqCisKKyouYXNwIGFuZCAqLmFzYSBmaWxlcyBjb3VsZCBiZSBlaXRoZXIgUGVybCBvciBWaXN1YWwgQmFzaWMgc2NyaXB0LiAgU2luY2UgaXQncworaGFyZCB0byBkZXRlY3QgdGhpcyB5b3UgY2FuIHNldCB0d28gZ2xvYmFsIHZhcmlhYmxlcyB0byB0ZWxsIFZpbSB3aGF0IHlvdSBhcmUKK3VzaW5nLglGb3IgUGVybCBzY3JpcHQgdXNlOiA+CisJOmxldCBnOmZpbGV0eXBlX2FzYSA9ICJhc3BwZXJsIgorCTpsZXQgZzpmaWxldHlwZV9hc3AgPSAiYXNwcGVybCIKK0ZvciBWaXN1YWwgQmFzaWMgdXNlOiA+CisJOmxldCBnOmZpbGV0eXBlX2FzYSA9ICJhc3B2YnMiCisJOmxldCBnOmZpbGV0eXBlX2FzcCA9ICJhc3B2YnMiCisKKworQkFTSUMJCQkJKmJhc2ljLnZpbSogKnZiLnZpbSogKmJhc2ljLXN5bnRheCogKnZiLXN5bnRheCoKKworQm90aCBWaXN1YWwgQmFzaWMgYW5kICJub3JtYWwiIGJhc2ljIHVzZSB0aGUgZXh0ZW5zaW9uICIuYmFzIi4JVG8gZGV0ZWN0Cit3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQsIFZpbSBjaGVja3MgZm9yIHRoZSBzdHJpbmcgIlZCX05hbWUiIGluIHRoZSBmaXJzdAorZml2ZSBsaW5lcyBvZiB0aGUgZmlsZS4gIElmIGl0IGlzIG5vdCBmb3VuZCwgZmlsZXR5cGUgd2lsbCBiZSAiYmFzaWMiLAorb3RoZXJ3aXNlICJ2YiIuICBGaWxlcyB3aXRoIHRoZSAiLmZybSIgZXh0ZW5zaW9uIHdpbGwgYWx3YXlzIGJlIHNlZW4gYXMgVmlzdWFsCitCYXNpYy4KKworCitDCQkJCQkJCSpjLnZpbSogKmMtc3ludGF4KgorCitBIGZldyB0aGluZ3MgaW4gQyBoaWdobGlnaHRpbmcgYXJlIG9wdGlvbmFsLiAgVG8gZW5hYmxlIHRoZW0gYXNzaWduIGFueSB2YWx1ZQordG8gdGhlIHJlc3BlY3RpdmUgdmFyaWFibGUuICBFeGFtcGxlOiA+CisJOmxldCBjX2NvbW1lbnRfc3RyaW5ncz0xCitUbyBkaXNhYmxlIHRoZW0gdXNlICI6dW5sZXQiLiAgRXhhbXBsZTogPgorCTp1bmxldCBjX2NvbW1lbnRfc3RyaW5ncworCitWYXJpYWJsZQkJSGlnaGxpZ2h0IH4KK2NfZ251CQkJR05VIGdjYyBzcGVjaWZpYyBpdGVtcworY19jb21tZW50X3N0cmluZ3MJc3RyaW5ncyBhbmQgbnVtYmVycyBpbnNpZGUgYSBjb21tZW50CitjX3NwYWNlX2Vycm9ycwkJdHJhaWxpbmcgd2hpdGUgc3BhY2UgYW5kIHNwYWNlcyBiZWZvcmUgYSA8VGFiPgorY19ub190cmFpbF9zcGFjZV9lcnJvcgkgLi4uIGJ1dCBubyB0cmFpbGluZyBzcGFjZXMKK2Nfbm9fdGFiX3NwYWNlX2Vycm9yCSAuLi4gYnV0IG5vIHNwYWNlcyBiZWZvcmUgYSA8VGFiPgorY19ub19icmFja2V0X2Vycm9yCWRvbid0IGhpZ2hsaWdodCB7fTsgaW5zaWRlIFtdIGFzIGVycm9ycworY19ub19hbnNpCQlkb24ndCBkbyBzdGFuZGFyZCBBTlNJIHR5cGVzIGFuZCBjb25zdGFudHMKK2NfYW5zaV90eXBlZGVmcwkJIC4uLiBidXQgZG8gc3RhbmRhcmQgQU5TSSB0eXBlcworY19hbnNpX2NvbnN0YW50cwkgLi4uIGJ1dCBkbyBzdGFuZGFyZCBBTlNJIGNvbnN0YW50cworY19ub191dGYJCWRvbid0IGhpZ2hsaWdodCBcdSBhbmQgXFUgaW4gc3RyaW5ncworY19zeW50YXhfZm9yX2gJCXVzZSBDIHN5bnRheCBmb3IgKi5oIGZpbGVzLCBpbnN0ZWFkIG9mIEMrKworY19ub19pZjAJCWRvbid0IGhpZ2hsaWdodCAiI2lmIDAiIGJsb2NrcyBhcyBjb21tZW50cworY19ub19jZm9ybWF0CQlkb24ndCBoaWdobGlnaHQgJS1mb3JtYXRzIGluIHN0cmluZ3MKK2Nfbm9fYzk5CQlkb24ndCBoaWdobGlnaHQgQzk5IHN0YW5kYXJkIGl0ZW1zCisKK0lmIHlvdSBub3RpY2UgaGlnaGxpZ2h0aW5nIGVycm9ycyB3aGlsZSBzY3JvbGxpbmcgYmFja3dhcmRzLCB3aGljaCBhcmUgZml4ZWQKK3doZW4gcmVkcmF3aW5nIHdpdGggQ1RSTC1MLCB0cnkgc2V0dGluZyB0aGUgImNfbWlubGluZXMiIGludGVybmFsIHZhcmlhYmxlCit0byBhIGxhcmdlciBudW1iZXI6ID4KKwk6bGV0IGNfbWlubGluZXMgPSAxMDAKK1RoaXMgd2lsbCBtYWtlIHRoZSBzeW50YXggc3luY2hyb25pemF0aW9uIHN0YXJ0IDEwMCBsaW5lcyBiZWZvcmUgdGhlIGZpcnN0CitkaXNwbGF5ZWQgbGluZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUwICgxNSB3aGVuIGNfbm9faWYwIGlzIHNldCkuICBUaGUKK2Rpc2FkdmFudGFnZSBvZiB1c2luZyBhIGxhcmdlciBudW1iZXIgaXMgdGhhdCByZWRyYXdpbmcgY2FuIGJlY29tZSBzbG93LgorCitXaGVuIHVzaW5nIHRoZSAiI2lmIDAiIC8gIiNlbmRpZiIgY29tbWVudCBoaWdobGlnaHRpbmcsIG5vdGljZSB0aGF0IHRoaXMgb25seQord29ya3Mgd2hlbiB0aGUgIiNpZiAwIiBpcyB3aXRoaW4gImNfbWlubGluZXMiIGZyb20gdGhlIHRvcCBvZiB0aGUgd2luZG93LiAgSWYKK3lvdSBoYXZlIGEgbG9uZyAiI2lmIDAiIGNvbnN0cnVjdCBpdCB3aWxsIG5vdCBiZSBoaWdobGlnaHRlZCBjb3JyZWN0bHkuCisKK1RvIG1hdGNoIGV4dHJhIGl0ZW1zIGluIGNvbW1lbnRzLCB1c2UgdGhlIGNDb21tZW50R3JvdXAgY2x1c3Rlci4KK0V4YW1wbGU6ID4KKyAgIDphdSBTeW50YXggYyBjYWxsIE15Q2FkZCgpCisgICA6ZnVuY3Rpb24gTXlDYWRkKCkKKyAgIDogIHN5biBrZXl3b3JkIGNNeUl0ZW0gY29udGFpbmVkIE5pCisgICA6ICBzeW4gY2x1c3RlciBjQ29tbWVudEdyb3VwIGFkZD1jTXlJdGVtCisgICA6ICBoaSBsaW5rIGNNeUl0ZW0gVGl0bGUKKyAgIDplbmRmdW4KKworQU5TSSBjb25zdGFudHMgd2lsbCBiZSBoaWdobGlnaHRlZCB3aXRoIHRoZSAiY0NvbnN0YW50IiBncm91cC4JVGhpcyBpbmNsdWRlcworIk5VTEwiLCAiU0lHX0lHTiIgYW5kIG90aGVycy4gIEJ1dCBub3QgIlRSVUUiLCBmb3IgZXhhbXBsZSwgYmVjYXVzZSB0aGlzIGlzCitub3QgaW4gdGhlIEFOU0kgc3RhbmRhcmQuICBJZiB5b3UgZmluZCB0aGlzIGNvbmZ1c2luZywgcmVtb3ZlIHRoZSBjQ29uc3RhbnQKK2hpZ2hsaWdodGluZzogPgorCTpoaSBsaW5rIGNDb25zdGFudCBOT05FCisKK0lmIHlvdSBzZWUgJ3snIGFuZCAnfScgaGlnaGxpZ2h0ZWQgYXMgYW4gZXJyb3Igd2hlcmUgdGhleSBhcmUgT0ssIHJlc2V0IHRoZQoraGlnaGxpZ2h0aW5nIGZvciBjRXJySW5QYXJlbiBhbmQgY0VyckluQnJhY2tldC4KKworSWYgeW91IHdhbnQgdG8gdXNlIGZvbGRpbmcgaW4geW91ciBDIGZpbGVzLCB5b3UgY2FuIGFkZCB0aGVzZSBsaW5lcyBpbiBhIGZpbGUKK2FuIHRoZSAiYWZ0ZXIiIGRpcmVjdG9yeSBpbiAncnVudGltZXBhdGgnLiAgRm9yIFVuaXggdGhpcyB3b3VsZCBiZQorfi8udmltL2FmdGVyL3N5bnRheC9jLnZpbS4gPgorICAgIHN5biByZWdpb24gbXlGb2xkIHN0YXJ0PSJ7IiBlbmQ9In0iIHRyYW5zcGFyZW50IGZvbGQKKyAgICBzeW4gc3luYyBmcm9tc3RhcnQKKyAgICBzZXQgZm9sZG1ldGhvZD1zeW50YXgKKworCitDSElMTAkJCQkJCSpjaGlsbC52aW0qICpjaGlsbC1zeW50YXgqCisKK0NoaWxsIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgc2ltaWxhciB0byBDLiAgU2VlIHxjLnZpbXwgZm9yIGFsbCB0aGUgc2V0dGluZ3MKK3RoYXQgYXJlIGF2YWlsYWJsZS4gIEFkZGl0aW9uYWxseSB0aGVyZSBpczoKKworY2hpbGxfc3ludGF4X2Zvcl9oCXVzZSBDaCBzeW50YXggZm9yICouaCBmaWxlcywgaW5zdGVhZCBvZiBDIG9yIEMrKworY2hpbGxfc3BhY2VfZXJyb3JzCWxpa2UgY19zcGFjZV9lcnJvcnMKK2NoaWxsX2NvbW1lbnRfc3RyaW5nCWxpa2UgY19jb21tZW50X3N0cmluZ3MKK2NoaWxsX21pbmxpbmVzCQlsaWtlIGNfbWlubGluZXMKKworCitDSEFOR0VMT0cJCQkJKmNoYW5nZWxvZy52aW0qICpjaGFuZ2Vsb2ctc3ludGF4KgorCitDaGFuZ2VMb2cgc3VwcG9ydHMgaGlnaGxpZ2h0aW5nIHNwYWNlcyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLgorSWYgeW91IGRvIG5vdCBsaWtlIHRoaXMsIGFkZCBmb2xsb3dpbmcgbGluZSB0byB5b3VyIC52aW1yYzogPgorCWxldCBnOmNoYW5nZWxvZ19zcGFjaW5nX2Vycm9ycyA9IDAKK1RoaXMgd29ya3MgdGhlIG5leHQgdGltZSB5b3UgZWRpdCBhIGNoYW5nZWxvZyBmaWxlLiAgWW91IGNhbiBhbHNvIHVzZQorImI6Y2hhbmdlbG9nX3NwYWNpbmdfZXJyb3JzIiB0byBzZXQgdGhpcyBwZXIgYnVmZmVyIChiZWZvcmUgbG9hZGluZyB0aGUgc3ludGF4CitmaWxlKS4KKworWW91IGNhbiBjaGFuZ2UgdGhlIGhpZ2hsaWdodGluZyB1c2VkLCBlLmcuLCB0byBmbGFnIHRoZSBzcGFjZXMgYXMgYW4gZXJyb3I6ID4KKwk6aGkgbGluayBDaGFuZ2Vsb2dFcnJvciBFcnJvcgorT3IgdG8gYXZvaWQgdGhlIGhpZ2hsaWdodGluZzogPgorCTpoaSBsaW5rIENoYW5nZWxvZ0Vycm9yIE5PTkUKK1RoaXMgd29ya3MgaW1tZWRpYXRlbHkuCisKKworQ09CT0wJCQkJCQkqY29ib2wudmltKiAqY29ib2wtc3ludGF4KgorCitDT0JPTCBoaWdobGlnaHRpbmcgaGFzIGRpZmZlcmVudCBuZWVkcyBmb3IgbGVnYWN5IGNvZGUgdGhhbiBpdCBkb2VzIGZvciBmcmVzaAorZGV2ZWxvcG1lbnQuICBUaGlzIGlzIGR1ZSB0byBkaWZmZXJlbmNlcyBpbiB3aGF0IGlzIGJlaW5nIGRvbmUgKG1haW50ZW5hbmNlCit2ZXJzdXMgZGV2ZWxvcG1lbnQpIGFuZCBvdGhlciBmYWN0b3JzLglUbyBlbmFibGUgbGVnYWN5IGNvZGUgaGlnaGxpZ2h0aW5nLAorYWRkIHRoaXMgbGluZSB0byB5b3VyIC52aW1yYzogPgorCTpsZXQgY29ib2xfbGVnYWN5X2NvZGUgPSAxCitUbyBkaXNhYmxlIGl0IGFnYWluLCB1c2UgdGhpczogPgorCTp1bmxldCBjb2JvbF9sZWdhY3lfY29kZQorCisKK0NPTEQgRlVTSU9OCQkJCSpjb2xkZnVzaW9uLnZpbSogKmNvbGRmdXNpb24tc3ludGF4KgorCitUaGUgQ29sZEZ1c2lvbiBoYXMgaXRzIG93biB2ZXJzaW9uIG9mIEhUTUwgY29tbWVudHMuIFRvIHR1cm4gb24gQ29sZEZ1c2lvbgorY29tbWVudCBoaWdobGlnaHRpbmcsIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciBzdGFydHVwIGZpbGU6ID4KKworCTpsZXQgaHRtbF93cm9uZ19jb21tZW50cyA9IDEKKworVGhlIENvbGRGdXNpb24gc3ludGF4IGZpbGUgaXMgYmFzZWQgb24gdGhlIEhUTUwgc3ludGF4IGZpbGUuCisKKworQ1NICQkJCQkJKmNzaC52aW0qICpjc2gtc3ludGF4KgorCitUaGlzIGNvdmVycyB0aGUgc2hlbGwgbmFtZWQgImNzaCIuICBOb3RlIHRoYXQgb24gc29tZSBzeXN0ZW1zIHRjc2ggaXMgYWN0dWFsbHkKK3VzZWQuCisKK0RldGVjdGluZyB3aGV0aGVyIGEgZmlsZSBpcyBjc2ggb3IgdGNzaCBpcyBub3RvcmlvdXNseSBoYXJkLiAgU29tZSBzeXN0ZW1zCitzeW1saW5rIC9iaW4vY3NoIHRvIC9iaW4vdGNzaCwgbWFraW5nIGl0IGFsbW9zdCBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoCitiZXR3ZWVuIGNzaCBhbmQgdGNzaC4gIEluIGNhc2UgVklNIGd1ZXNzZXMgd3JvbmcgeW91IGNhbiBzZXQgdGhlCisiZmlsZXR5cGVfY3NoIiB2YXJpYWJsZS4gIEZvciB1c2luZyBjc2g6ID4KKworCTpsZXQgZmlsZXR5cGVfY3NoID0gImNzaCIKKworRm9yIHVzaW5nIHRjc2g6ID4KKworCTpsZXQgZmlsZXR5cGVfY3NoID0gInRjc2giCisKK0FueSBzY3JpcHQgd2l0aCBhIHRjc2ggZXh0ZW5zaW9uIG9yIGEgc3RhbmRhcmQgdGNzaCBmaWxlbmFtZSAoLnRjc2hyYywKK3Rjc2gudGNzaHJjLCB0Y3NoLmxvZ2luKSB3aWxsIGhhdmUgZmlsZXR5cGUgdGNzaC4gIEFsbCBvdGhlciB0Y3NoL2NzaCBzY3JpcHRzCit3aWxsIGJlIGNsYXNzaWZpZWQgYXMgdGNzaCwgVU5MRVNTIHRoZSAiZmlsZXR5cGVfY3NoIiB2YXJpYWJsZSBleGlzdHMuIElmIHRoZQorImZpbGV0eXBlX2NzaCIgdmFyaWFibGUgZXhpc3RzLCB0aGUgZmlsZXR5cGUgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZQordmFyaWFibGUuCisKKworQ1lOTElCCQkJCQkJKmN5bmxpYi52aW0qICpjeW5saWItc3ludGF4KgorCitDeW5saWIgZmlsZXMgYXJlIEMrKyBmaWxlcyB0aGF0IHVzZSB0aGUgQ3lubGliIGNsYXNzIGxpYnJhcnkgdG8gZW5hYmxlCitoYXJkd2FyZSBtb2RlbGluZyBhbmQgc2ltdWxhdGlvbiB1c2luZyBDKysuIFR5cGljYWxseSBDeW5saWIgZmlsZXMgaGF2ZSBhIC5jYworb3IgYSAuY3BwIGV4dGVuc2lvbiwgd2hpY2ggbWFrZXMgaXQgdmVyeSBkaWZmaWN1bHQgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGEKK25vcm1hbCBDKysgZmlsZS4gVGh1cywgdG8gZW5hYmxlIEN5bmxpYiBoaWdobGlnaHRpbmcgZm9yIC5jYyBmaWxlcywgYWRkIHRoaXMKK2xpbmUgdG8geW91ciAudmltcmMgZmlsZTogPgorCisJOmxldCBjeW5saWJfY3ludGF4X2Zvcl9jYz0xCisKK1NpbWlsYXJseSBmb3IgY3BwIGZpbGVzICh0aGlzIGV4dGVuc2lvbiBpcyBvbmx5IHVzdWFsbHkgdXNlZCBpbiBXaW5kb3dzKSA+CisKKwk6bGV0IGN5bmxpYl9jeW50YXhfZm9yX2NwcD0xCisKK1RvIGRpc2FibGUgdGhlc2UgYWdhaW4sIHVzZSB0aGlzOiA+CisKKwk6dW5sZXQgY3lubGliX2N5bnRheF9mb3JfY2MKKwk6dW5sZXQgY3lubGliX2N5bnRheF9mb3JfY3BwCis8CisKK0NXRUIJCQkJCQkqY3dlYi52aW0qICpjd2ViLXN5bnRheCoKKworRmlsZXMgbWF0Y2hpbmcgIioudyIgY291bGQgYmUgUHJvZ3Jlc3Mgb3IgY3dlYi4gIElmIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uCitkb2Vzbid0IHdvcmsgZm9yIHlvdSwgb3IgeW91IGRvbid0IGVkaXQgUHJvZ3Jlc3MgYXQgYWxsLCB1c2UgdGhpcyBpbiB5b3VyCitzdGFydHVwIHZpbXJjOiA+CisgICA6bGV0IGZpbGV0eXBlX3cgPSAiY3dlYiIKKworCitERVNLVE9QCQkJCQkgICAqZGVza3RvcC52aW0qICpkZXNrdG9wLXN5bnRheCoKKworUHJpbWFyeSBnb2FsIG9mIHRoaXMgc3ludGF4IGZpbGUgaXMgdG8gaGlnaGxpZ2h0IC5kZXNrdG9wIGFuZCAuZGlyZWN0b3J5IGZpbGVzCithY2NvcmRpbmcgdG8gZnJlZWRlc2t0b3Aub3JnIHN0YW5kYXJkOiBodHRwOi8vcGR4LmZyZWVkZXNrdG9wLm9yZy9TdGFuZGFyZHMvCitCdXQgYWN0dWFsbHkgYWxtb3N0IG5vbmUgaW1wbGVtZW50cyB0aGlzIHN0YW5kYXJkIGZ1bGx5LiAgVGh1cyBpdCB3aWxsCitoaWdobGlnaHQgYWxsIFVuaXggaW5pIGZpbGVzLiBCdXQgeW91IGNhbiBmb3JjZSBzdHJpY3QgaGlnaGxpZ2h0aW5nIGFjY29yZGluZwordG8gc3RhbmRhcmQgYnkgcGxhY2luZyB0aGlzIGluIHlvdXIgdmltcmMgZmlsZTogPgorCTpsZXQgZW5mb3JjZV9mcmVlZGVza3RvcF9zdGFuZGFyZCA9IDEKKworCitESVJDT0xPUlMJCQkgICAgICAgKmRpcmNvbG9ycy52aW0qICpkaXJjb2xvcnMtc3ludGF4KgorCitUaGUgZGlyY29sb3JzIHV0aWxpdHkgaGlnaGxpZ2h0aW5nIGRlZmluaXRpb24gaGFzIG9uZSBvcHRpb24uICBJdCBleGlzdHMgdG8KK3Byb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBTbGFja3dhcmUgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbnMgdmVyc2lvbiBvZgordGhlIGNvbW1hbmQuICBJdCBhZGRzIGEgZmV3IGtleXdvcmRzIHRoYXQgYXJlIGdlbmVyYWxseSBpZ25vcmVkIGJ5IG1vc3QKK3ZlcnNpb25zLiAgT24gU2xhY2t3YXJlIHN5c3RlbXMsIGhvd2V2ZXIsIHRoZSB1dGlsaXR5IGFjY2VwdHMgdGhlIGtleXdvcmRzIGFuZAordXNlcyB0aGVtIGZvciBwcm9jZXNzaW5nLiAgVG8gZW5hYmxlIHRoZSBTbGFja3dhcmUga2V5d29yZHMgYWRkIHRoZSBmb2xsb3dpbmcKK2xpbmUgdG8geW91ciBzdGFydHVwIGZpbGU6ID4KKwlsZXQgZGlyY29sb3JzX2lzX3NsYWNrd2FyZSA9IDEKKworCitET0NCT09LCQkJCQkqZG9jYmsudmltKiAqZG9jYmstc3ludGF4KiAqZG9jYm9vayoKK0RPQ0JPT0sJWE1MCQkJCSpkb2Nia3htbC52aW0qICpkb2Nia3htbC1zeW50YXgqCitET0NCT09LCVNHTUwJCQkJKmRvY2Jrc2dtbC52aW0qICpkb2Nia3NnbWwtc3ludGF4KgorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIERvY0Jvb2sgZmlsZXM6IFNHTUwgYW5kIFhNTC4gIFRvIHNwZWNpZnkgd2hhdCB0eXBlIHlvdQorYXJlIHVzaW5nIHRoZSAiYjpkb2Nia190eXBlIiB2YXJpYWJsZSBzaG91bGQgYmUgc2V0LiAgVmltIGRvZXMgdGhpcyBmb3IgeW91CithdXRvbWF0aWNhbGx5IGlmIGl0IGNhbiByZWNvZ25pemUgdGhlIHR5cGUuICBXaGVuIFZpbSBjYW4ndCBndWVzcyBpdCB0aGUgdHlwZQorZGVmYXVsdHMgdG8gWE1MLgorWW91IGNhbiBzZXQgdGhlIHR5cGUgbWFudWFsbHk6ID4KKwk6bGV0IGRvY2JrX3R5cGUgPSAic2dtbCIKK29yOiA+CisJOmxldCBkb2Nia190eXBlID0gInhtbCIKK1lvdSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGxvYWRpbmcgdGhlIHN5bnRheCBmaWxlLCB3aGljaCBpcyBjb21wbGljYXRlZC4KK1NpbXBsZXIgaXMgc2V0dGluZyB0aGUgZmlsZXR5cGUgdG8gImRvY2JreG1sIiBvciAiZG9jYmtzZ21sIjogPgorCTpzZXQgZmlsZXR5cGU9ZG9jYmtzZ21sCitvcjogPgorCTpzZXQgZmlsZXR5cGU9ZG9jYmt4bWwKKworCitET1NCQVRDSAkJCQkqZG9zYmF0Y2gudmltKiAqZG9zYmF0Y2gtc3ludGF4KgorCitUaGVyZSBpcyBvbmUgb3B0aW9uIHdpdGggaGlnaGxpZ2h0aW5nIERPUyBiYXRjaCBmaWxlcy4JVGhpcyBjb3ZlcnMgbmV3CitleHRlbnNpb25zIHRvIHRoZSBDb21tYW5kIEludGVycHJldGVyIGludHJvZHVjZWQgd2l0aCBXaW5kb3dzIDIwMDAgYW5kCitpcyBjb250cm9sbGVkIGJ5IHRoZSB2YXJpYWJsZSBkb3NiYXRjaF9jbWRleHR2ZXJzaW9uLiAgRm9yIFdpbmRvd3MgTlQKK3RoaXMgc2hvdWxkIGhhdmUgdGhlIHZhbHVlIDEsIGFuZCBmb3IgV2luZG93cyAyMDAwIGl0IHNob3VsZCBiZSAyLgorU2VsZWN0IHRoZSB2ZXJzaW9uIHlvdSB3YW50IHdpdGggdGhlIGZvbGxvd2luZyBsaW5lOiA+CisKKyAgOmxldCBkb3NiYXRjaF9jbWRleHR2ZXJzaW9uID0gMQorCitJZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkIGl0IGRlZmF1bHRzIHRvIGEgdmFsdWUgb2YgMiB0byBzdXBwb3J0CitXaW5kb3dzIDIwMDAuCisKKworRFRECQkJCQkJKmR0ZC52aW0qICpkdGQtc3ludGF4KgorCitUaGUgRFREIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgY2FzZSBzZW5zaXRpdmUgYnkgZGVmYXVsdC4gVG8gZGlzYWJsZQorY2FzZS1zZW5zaXRpdmUgaGlnaGxpZ2h0aW5nLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgc3RhcnR1cCBmaWxlOiA+CisKKwk6bGV0IGR0ZF9pZ25vcmVfY2FzZT0xCisKK1RoZSBEVEQgc3ludGF4IGZpbGUgd2lsbCBoaWdobGlnaHQgdW5rbm93biB0YWdzIGFzIGVycm9ycy4gSWYKK3RoaXMgaXMgYW5ub3lpbmcsIGl0IGNhbiBiZSB0dXJuZWQgb2ZmIGJ5IHNldHRpbmc6ID4KKworCTpsZXQgZHRkX25vX3RhZ19lcnJvcnM9MQorCitiZWZvcmUgc291cmNpbmcgdGhlIGR0ZC52aW0gc3ludGF4IGZpbGUuCitQYXJhbWV0ZXIgZW50aXR5IG5hbWVzIGFyZSBoaWdobGlnaHRlZCBpbiB0aGUgZGVmaW5pdGlvbiB1c2luZyB0aGUKKydUeXBlJyBoaWdobGlnaHRpbmcgZ3JvdXAgYW5kICdDb21tZW50JyBmb3IgcHVuY3R1YXRpb24gYW5kICclJy4KK1BhcmFtZXRlciBlbnRpdHkgaW5zdGFuY2VzIGFyZSBoaWdobGlnaHRlZCB1c2luZyB0aGUgJ0NvbnN0YW50JworaGlnaGxpZ2h0aW5nIGdyb3VwIGFuZCB0aGUgJ1R5cGUnIGhpZ2hsaWdodGluZyBncm91cCBmb3IgdGhlCitkZWxpbWl0ZXJzICUgYW5kIDsuIFRoaXMgY2FuIGJlIHR1cm5lZCBvZmYgYnkgc2V0dGluZzogPgorCisJOmxldCBkdGRfbm9fcGFyYW1fZW50aXRpZXM9MQorCitUaGUgRFREIHN5bnRheCBmaWxlIGlzIGFsc28gaW5jbHVkZWQgYnkgeG1sLnZpbSB0byBoaWdobGlnaHQgaW5jbHVkZWQgZHRkJ3MuCisKKworRUlGRkVMCQkJCQkJKmVpZmZlbC52aW0qICplaWZmZWwtc3ludGF4KgorCitXaGlsZSBFaWZmZWwgaXMgbm90IGNhc2Utc2Vuc2l0aXZlLCBpdHMgc3R5bGUgZ3VpZGVsaW5lcyBhcmUsIGFuZCB0aGUKK3N5bnRheCBoaWdobGlnaHRpbmcgZmlsZSBlbmNvdXJhZ2VzIHRoZWlyIHVzZS4gVGhpcyBhbHNvIGFsbG93cyB0bworaGlnaGxpZ2h0IGNsYXNzIG5hbWVzIGRpZmZlcmVudGx5LiBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGNhc2Utc2Vuc2l0aXZlCitoaWdobGlnaHRpbmcsIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciBzdGFydHVwIGZpbGU6ID4KKworCTpsZXQgZWlmZmVsX2lnbm9yZV9jYXNlPTEKKworQ2FzZSBzdGlsbCBtYXR0ZXJzIGZvciBjbGFzcyBuYW1lcyBhbmQgVE9ETyBtYXJrcyBpbiBjb21tZW50cy4KKworQ29udmVyc2VseSwgZm9yIGV2ZW4gc3RyaWN0ZXIgY2hlY2tzLCBhZGQgb25lIG9mIHRoZSBmb2xsb3dpbmcgbGluZXM6ID4KKworCTpsZXQgZWlmZmVsX3N0cmljdD0xCisJOmxldCBlaWZmZWxfcGVkYW50aWM9MQorCitTZXR0aW5nIGVpZmZlbF9zdHJpY3Qgd2lsbCBvbmx5IGNhdGNoIGltcHJvcGVyIGNhcGl0YWxpemF0aW9uIGZvciB0aGUKK2ZpdmUgcHJlZGVmaW5lZCB3b3JkcyAiQ3VycmVudCIsICJWb2lkIiwgIlJlc3VsdCIsICJQcmVjdXJzb3IiLCBhbmQKKyJOT05FIiwgdG8gd2FybiBhZ2FpbnN0IHRoZWlyIGFjY2lkZW50YWwgdXNlIGFzIGZlYXR1cmUgb3IgY2xhc3MgbmFtZXMuCisKK1NldHRpbmcgZWlmZmVsX3BlZGFudGljIHdpbGwgZW5mb3JjZSBhZGhlcmVuY2UgdG8gdGhlIEVpZmZlbCBzdHlsZQorZ3VpZGVsaW5lcyBmYWlybHkgcmlnb3JvdXNseSAobGlrZSBhcmJpdHJhcnkgbWl4ZXMgb2YgdXBwZXItIGFuZAorbG93ZXJjYXNlIGxldHRlcnMgYXMgd2VsbCBhcyBvdXRkYXRlZCB3YXlzIHRvIGNhcGl0YWxpemUga2V5d29yZHMpLgorCitJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGxvd2VyLWNhc2UgdmVyc2lvbiBvZiAiQ3VycmVudCIsICJWb2lkIiwKKyJSZXN1bHQiLCBhbmQgIlByZWN1cnNvciIsIHlvdSBjYW4gdXNlID4KKworCTpsZXQgZWlmZmVsX2xvd2VyX2Nhc2VfcHJlZGVmPTEKKworaW5zdGVhZCBvZiBjb21wbGV0ZWx5IHR1cm5pbmcgY2FzZS1zZW5zaXRpdmUgaGlnaGxpZ2h0aW5nIG9mZi4KKworU3VwcG9ydCBmb3IgSVNFJ3MgcHJvcG9zZWQgbmV3IGNyZWF0aW9uIHN5bnRheCB0aGF0IGlzIGFscmVhZHkKK2V4cGVyaW1lbnRhbGx5IGhhbmRsZWQgYnkgc29tZSBjb21waWxlcnMgY2FuIGJlIGVuYWJsZWQgYnk6ID4KKworCTpsZXQgZWlmZmVsX2lzZT0xCisKK0ZpbmFsbHksIHNvbWUgdmVuZG9ycyBzdXBwb3J0IGhleGFkZWNpbWFsIGNvbnN0YW50cy4gVG8gaGFuZGxlIHRoZW0sIGFkZCA+CisKKwk6bGV0IGVpZmZlbF9oZXhfY29uc3RhbnRzPTEKKwordG8geW91ciBzdGFydHVwIGZpbGUuCisKKworRVJMQU5HCQkJCQkJKmVybGFuZy52aW0qICplcmxhbmctc3ludGF4KgorCitUaGUgZXJsYW5nIGhpZ2hsaWdodGluZyBzdXBwb3J0cyBFcmxhbmcgKEVSaWNzc29uIExBTkd1YWdlKS4KK0VybGFuZyBpcyBjYXNlIHNlbnNpdGl2ZSBhbmQgZGVmYXVsdCBleHRlbnNpb24gaXMgIi5lcmwiLgorCitJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGtleXdvcmRzIGhpZ2hsaWdodGluZywgcHV0IGluIHlvdXIgLnZpbXJjOiA+CisJOmxldCBlcmxhbmdfa2V5d29yZHMgPSAxCitJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGJ1aWx0LWluLWZ1bmN0aW9ucyBoaWdobGlnaHRpbmcsIHB1dCBpbiB5b3VyCisudmltcmMgZmlsZTogPgorCTpsZXQgZXJsYW5nX2Z1bmN0aW9ucyA9IDEKK0lmIHlvdSB3YW50IHRvIGRpc2FibGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGhpZ2hsaWdodGluZywgcHV0IGluCit5b3VyIC52aW1yYzogPgorCTpsZXQgZXJsYW5nX2NoYXJhY3RlcnMgPSAxCisKKworRk9STQkJCQkJCSpmb3JtLnZpbSogKmZvcm0tc3ludGF4KgorCitUaGUgY29sb3Jpbmcgc2NoZW1lIGZvciBzeW50YXggZWxlbWVudHMgaW4gdGhlIEZPUk0gZmlsZSB1c2VzIHRoZSBkZWZhdWx0Cittb2RlcyBDb25kaXRpb25hbCwgTnVtYmVyLCBTdGF0ZW1lbnQsIENvbW1lbnQsIFByZVByb2MsIFR5cGUsIGFuZCBTdHJpbmcsCitmb2xsb3dpbmcgdGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb25zIGluICdTeW1ib2xpYyBNYW5pcHVsYXRpb24gd2l0aCBGT1JNJycgYnkKK0ouQS5NLiBWZXJtYXNlcmVuLCBDQU4sIE5ldGhlcmxhbmRzLCAxOTkxLgorCitJZiB5b3Ugd2FudCBpbmNsdWRlIHlvdXIgb3duIGNoYW5nZXMgdG8gdGhlIGRlZmF1bHQgY29sb3JzLCB5b3UgaGF2ZSB0bworcmVkZWZpbmUgdGhlIGZvbGxvd2luZyBzeW50YXggZ3JvdXBzOgorCisgICAgLSBmb3JtQ29uZGl0aW9uYWwKKyAgICAtIGZvcm1OdW1iZXIKKyAgICAtIGZvcm1TdGF0ZW1lbnQKKyAgICAtIGZvcm1IZWFkZXJTdGF0ZW1lbnQKKyAgICAtIGZvcm1Db21tZW50CisgICAgLSBmb3JtUHJlUHJvYworICAgIC0gZm9ybURpcmVjdGl2ZQorICAgIC0gZm9ybVR5cGUKKyAgICAtIGZvcm1TdHJpbmcKKworTm90ZSB0aGF0IHRoZSBmb3JtLnZpbSBzeW50YXggZmlsZSBpbXBsZW1lbnRzIEZPUk0gcHJlcHJvY2Vzc29yIGNvbW1hbmRzIGFuZAorZGlyZWN0aXZlcyBwZXIgZGVmYXVsdCBpbiB0aGUgc2FtZSBzeW50YXggZ3JvdXAuCisKK0EgcHJlZGVmaW5lZCBlbmhhbmNlZCBjb2xvciBtb2RlIGZvciBGT1JNIGlzIGF2YWlsYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuCitoZWFkZXIgc3RhdGVtZW50cyBhbmQgc3RhdGVtZW50cyBpbiB0aGUgYm9keSBvZiBhIEZPUk0gcHJvZ3JhbS4gVG8gYWN0aXZhdGUKK3RoaXMgbW9kZSBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBpbiB5b3VyIHZpbXJjIGZpbGUgPgorCisJOmxldCBmb3JtX2VuaGFuY2VkX2NvbG9yPTEKKworVGhlIGVuaGFuY2VkIG1vZGUgYWxzbyB0YWtlcyBhZHZhbnRhZ2Ugb2YgYWRkaXRpb25hbCBjb2xvciBmZWF0dXJlcyBmb3IgYSBkYXJrCitndmltIGRpc3BsYXkuIEhlcmUsIHN0YXRlbWVudHMgYXJlIGNvbG9yZWQgTGlnaHRZZWxsb3cgaW5zdGVhZCBvZiBZZWxsb3csIGFuZAorY29uZGl0aW9uYWxzIGFyZSBMaWdodEJsdWUgZm9yIGJldHRlciBkaXN0aW5jdGlvbi4KKworCitGT1JUUkFOCQkJCQkqZm9ydHJhbi52aW0qICpmb3J0cmFuLXN5bnRheCoKKworRGVmYXVsdCBoaWdobGlnaHRpbmcgYW5kIGRpYWxlY3QgfgorSGlnaGxpZ2h0aW5nIGFwcHJvcHJpYXRlIGZvciBmOTUgKEZvcnRyYW4gOTUpIGlzIHVzZWQgYnkgZGVmYXVsdC4gVGhpcyBjaG9pY2UKK3Nob3VsZCBiZSBhcHByb3ByaWF0ZSBmb3IgbW9zdCB1c2VycyBtb3N0IG9mIHRoZSB0aW1lIGJlY2F1c2UgRm9ydHJhbiA5NSBpcyBhCitzdXBlcnNldCBvZiBGb3J0cmFuIDkwIGFuZCBhbG1vc3QgYSBzdXBlcnNldCBvZiBGb3J0cmFuIDc3LgorCitGb3J0cmFuIHNvdXJjZSBjb2RlIGZvcm0gfgorRm9ydHJhbiA5eCBjb2RlIGNhbiBiZSBpbiBlaXRoZXIgZml4ZWQgb3IgZnJlZSBzb3VyY2UgZm9ybS4gTm90ZSB0aGF0IHRoZQorc3ludGF4IGhpZ2hsaWdodGluZyB3aWxsIG5vdCBiZSBjb3JyZWN0IGlmIHRoZSBmb3JtIGlzIGluY29ycmVjdGx5IHNldC4KKworV2hlbiB5b3UgY3JlYXRlIGEgbmV3IGZvcnRyYW4gZmlsZSwgdGhlIHN5bnRheCBzY3JpcHQgYXNzdW1lcyBmaXhlZCBzb3VyY2UKK2Zvcm0uIElmIHlvdSBhbHdheXMgdXNlIGZyZWUgc291cmNlIGZvcm0sIHRoZW4gPgorICAgIDpsZXQgZm9ydHJhbl9mcmVlX3NvdXJjZT0xCitpbiB5b3VyIC52aW1yYyBwcmlvciB0byB0aGUgOnN5bnRheCBvbiBjb21tYW5kLiBJZiB5b3UgYWx3YXlzIHVzZSBmaXhlZCBzb3VyY2UKK2Zvcm0sIHRoZW4gPgorICAgIDpsZXQgZm9ydHJhbl9maXhlZF9zb3VyY2U9MQoraW4geW91ciAudmltcmMgcHJpb3IgdG8gdGhlIDpzeW50YXggb24gY29tbWFuZC4KKworSWYgdGhlIGZvcm0gb2YgdGhlIHNvdXJjZSBjb2RlIGRlcGVuZHMgdXBvbiB0aGUgZmlsZSBleHRlbnNpb24sIHRoZW4gaXQgaXMKK21vc3QgY29udmVuaWVudCB0byBzZXQgZm9ydHJhbl9mcmVlX3NvdXJjZSBpbiBhIGZ0cGx1Z2luIGZpbGUuIEZvciBtb3JlCitpbmZvcm1hdGlvbiBvbiBmdHBsdWdpbiBmaWxlcywgc2VlIHxmdHBsdWdpbnwuIEZvciBleGFtcGxlLCBpZiBhbGwgeW91cgorZm9ydHJhbiBmaWxlcyB3aXRoIGFuIC5mOTAgZXh0ZW5zaW9uIGFyZSB3cml0dGVuIGluIGZyZWUgc291cmNlIGZvcm0gYW5kIHRoZQorcmVzdCBpbiBmaXhlZCBzb3VyY2UgZm9ybSwgYWRkIHRoZSBmb2xsb3dpbmcgY29kZSB0byB5b3VyIGZ0cGx1Z2luIGZpbGUgPgorICAgIGxldCBzOmV4dGZuYW1lID0gZXhwYW5kKCIlOmUiKQorICAgIGlmIHM6ZXh0Zm5hbWUgPT0/ICJmOTAiCisJbGV0IGZvcnRyYW5fZnJlZV9zb3VyY2U9MQorCXVubGV0ISBmb3J0cmFuX2ZpeGVkX3NvdXJjZQorICAgIGVsc2UKKwlsZXQgZm9ydHJhbl9maXhlZF9zb3VyY2U9MQorCXVubGV0ISBmb3J0cmFuX2ZyZWVfc291cmNlCisgICAgZW5kaWYKK05vdGUgdGhhdCB0aGlzIHdpbGwgd29yayBvbmx5IGlmIHRoZSAiZmlsZXR5cGUgcGx1Z2luIGluZGVudCBvbiIgY29tbWFuZAorcHJlY2VkZXMgdGhlICJzeW50YXggb24iIGNvbW1hbmQgaW4geW91ciAudmltcmMgZmlsZS4KKworV2hlbiB5b3UgZWRpdCBhbiBleGlzdGluZyBmb3J0cmFuIGZpbGUsIHRoZSBzeW50YXggc2NyaXB0IHdpbGwgYXNzdW1lIGZyZWUKK3NvdXJjZSBmb3JtIGlmIHRoZSBmb3J0cmFuX2ZyZWVfc291cmNlIHZhcmlhYmxlIGhhcyBiZWVuIHNldCwgYW5kIGFzc3VtZXMKK2ZpeGVkIHNvdXJjZSBmb3JtIGlmIHRoZSBmb3J0cmFuX2ZpeGVkX3NvdXJjZSB2YXJpYWJsZSBoYXMgYmVlbiBzZXQuIElmCituZWl0aGVyIG9mIHRoZXNlIHZhcmlhYmxlcyBoYXZlIGJlZW4gc2V0LCB0aGUgc3ludGF4IHNjcmlwdCBhdHRlbXB0cyB0bworZGV0ZXJtaW5lIHdoaWNoIHNvdXJjZSBmb3JtIGhhcyBiZWVuIHVzZWQgYnkgZXhhbWluaW5nIHRoZSBmaXJzdCBmaXZlIGNvbHVtbnMKK29mIHRoZSBmaXJzdCAyNSBsaW5lcyBvZiB5b3VyIGZpbGUuIElmIG5vIHNpZ25zIG9mIGZyZWUgc291cmNlIGZvcm0gYXJlCitkZXRlY3RlZCwgdGhlbiB0aGUgZmlsZSBpcyBhc3N1bWVkIHRvIGJlIGluIGZpeGVkIHNvdXJjZSBmb3JtLiBUaGUgYWxnb3JpdGhtCitzaG91bGQgd29yayBpbiB0aGUgdmFzdCBtYWpvcml0eSBvZiBjYXNlcy4gSW4gc29tZSBjYXNlcywgc3VjaCBhcyBhIGZpbGUgdGhhdAorYmVnaW5zIHdpdGggMjUgb3IgbW9yZSBmdWxsLWxpbmUgY29tbWVudHMsIHRoZSBzY3JpcHQgbWF5IGluY29ycmVjdGx5IGRlY2lkZQordGhhdCB0aGUgZm9ydHJhbiBjb2RlIGlzIGluIGZpeGVkIGZvcm0uIElmIHRoYXQgaGFwcGVucywganVzdCBhZGQgYQorbm9uLWNvbW1lbnQgc3RhdGVtZW50IGJlZ2lubmluZyBhbnl3aGVyZSBpbiB0aGUgZmlyc3QgZml2ZSBjb2x1bW5zIG9mIHRoZQorZmlyc3QgdHdlbnR5IGZpdmUgbGluZXMsIHNhdmUgKDp3KSBhbmQgdGhlbiByZWxvYWQgKDplISkgdGhlIGZpbGUuCisKK1RhYnMgaW4gZm9ydHJhbiBmaWxlcyB+CitUYWJzIGFyZSBub3QgcmVjb2duaXplZCBieSB0aGUgRm9ydHJhbiBzdGFuZGFyZHMuIFRhYnMgYXJlIG5vdCBhIGdvb2QgaWRlYSBpbgorZml4ZWQgZm9ybWF0IGZvcnRyYW4gc291cmNlIGNvZGUgd2hpY2ggcmVxdWlyZXMgZml4ZWQgY29sdW1uIGJvdW5kYXJpZXMuCitUaGVyZWZvcmUsIHRhYnMgYXJlIG1hcmtlZCBhcyBlcnJvcnMuIE5ldmVydGhlbGVzcywgc29tZSBwcm9ncmFtbWVycyBsaWtlCit1c2luZyB0YWJzLiBJZiB5b3VyIGZvcnRyYW4gZmlsZXMgY29udGFpbiB0YWJzLCB0aGVuIHlvdSBzaG91bGQgc2V0IHRoZQordmFyaWFibGUgZm9ydHJhbl9oYXZlX3RhYnMgaW4geW91ciAudmltcmMgd2l0aCBhIGNvbW1hbmQgc3VjaCBhcyA+CisgICAgOmxldCBmb3J0cmFuX2hhdmVfdGFicz0xCitwbGFjZWQgcHJpb3IgdG8gdGhlIDpzeW50YXggb24gY29tbWFuZC4gVW5mb3J0dW5hdGVseSwgdGhlIHVzZSBvZiB0YWJzIHdpbGwKK21lYW4gdGhhdCB0aGUgc3ludGF4IGZpbGUgd2lsbCBub3QgYmUgYWJsZSB0byBkZXRlY3QgaW5jb3JyZWN0IG1hcmdpbnMuCisKK1N5bnRheCBmb2xkaW5nIG9mIGZvcnRyYW4gZmlsZXMgfgorSWYgeW91IHdpc2ggdG8gdXNlIGZvbGRtZXRob2Q9c3ludGF4LCB0aGVuIHlvdSBtdXN0IGZpcnN0IHNldCB0aGUgdmFyaWFibGUKK2ZvcnRyYW5fZm9sZCB3aXRoIGEgY29tbWFuZCBzdWNoIGFzID4KKyAgICA6bGV0IGZvcnRyYW5fZm9sZD0xCit0byBpbnN0cnVjdCB0aGUgc3ludGF4IHNjcmlwdCB0byBkZWZpbmUgZm9sZCByZWdpb25zIGZvciBwcm9ncmFtIHVuaXRzLCB0aGF0CitpcyBtYWluIHByb2dyYW1zIHN0YXJ0aW5nIHdpdGggYSBwcm9ncmFtIHN0YXRlbWVudCwgc3Vicm91dGluZXMsIGZ1bmN0aW9uCitzdWJwcm9ncmFtcywgYmxvY2sgZGF0YSBzdWJwcm9ncmFtcywgaW50ZXJmYWNlIGJsb2NrcywgYW5kIG1vZHVsZXMuIElmIHlvdQorYWxzbyBzZXQgdGhlIHZhcmlhYmxlIGZvcnRyYW5fZm9sZF9jb25kaXRpb25hbHMgd2l0aCBhIGNvbW1hbmQgc3VjaCBhcyA+CisgICAgOmxldCBmb3J0cmFuX2ZvbGRfY29uZGl0aW9uYWxzPTEKK3RoZW4gZm9sZCByZWdpb25zIHdpbGwgYWxzbyBiZSBkZWZpbmVkIGZvciBkbyBsb29wcywgaWYgYmxvY2tzLCBhbmQgc2VsZWN0CitjYXNlIGNvbnN0cnVjdHMuIElmIHlvdSBhbHNvIHNldCB0aGUgdmFyaWFibGUKK2ZvcnRyYW5fZm9sZF9tdWx0aWxpbmVjb21tZW50cyB3aXRoIGEgY29tbWFuZCBzdWNoIGFzID4KKyAgICA6bGV0IGZvcnRyYW5fZm9sZF9tdWx0aWxpbmVjb21tZW50cz0xCit0aGVuIGZvbGQgcmVnaW9ucyB3aWxsIGFsc28gYmUgZGVmaW5lZCBmb3IgdGhyZWUgb3IgbW9yZSBjb25zZWN1dGl2ZSBjb21tZW50CitsaW5lcy4gTm90ZSB0aGF0IGRlZmluaW5nIGZvbGQgcmVnaW9ucyBjYW4gYmUgc2xvdyBmb3IgbGFyZ2UgZmlsZXMuCisKK0lmIGZvcnRyYW5fZm9sZCwgYW5kIHBvc3NpYmx5IGZvcnRyYW5fZm9sZF9jb25kaXRpb25hbHMgYW5kL29yCitmb3J0cmFuX2ZvbGRfbXVsdGlsaW5lY29tbWVudHMsIGhhdmUgYmVlbiBzZXQsIHRoZW4gdmltIHdpbGwgZm9sZCB5b3VyIGZpbGUgaWYKK3lvdSBzZXQgZm9sZG1ldGhvZD1zeW50YXguIENvbW1lbnRzIG9yIGJsYW5rIGxpbmVzIHBsYWNlZCBiZXR3ZWVuIHR3byBwcm9ncmFtCit1bml0cyBhcmUgbm90IGZvbGRlZCBiZWNhdXNlIHRoZXkgYXJlIHNlZW4gYXMgbm90IGJlbG9uZ2luZyB0byBhbnkgcHJvZ3JhbQordW5pdC4KKworTW9yZSBwcmVjaXNlIGZvcnRyYW4gc3ludGF4IH4KK0lmIHlvdSBzZXQgdGhlIHZhcmlhYmxlIGZvcnRyYW5fbW9yZV9wcmVjaXNlIHdpdGggYSBjb21tYW5kIHN1Y2ggYXMgPgorICAgIDpsZXQgZm9ydHJhbl9tb3JlX3ByZWNpc2U9MQordGhlbiB0aGUgc3ludGF4IGNvbG9yaW5nIHdpbGwgYmUgbW9yZSBwcmVjaXNlIGJ1dCBzbG93ZXIuIEluIHBhcnRpY3VsYXIsCitzdGF0ZW1lbnQgbGFiZWxzIHVzZWQgaW4gZG8sIGdvdG8gYW5kIGFyaXRobWV0aWMgaWYgc3RhdGVtZW50cyB3aWxsIGJlCityZWNvZ25pemVkLCBhcyB3aWxsIGNvbnN0cnVjdCBuYW1lcyBhdCB0aGUgZW5kIG9mIGEgZG8sIGlmLCBzZWxlY3Qgb3IgZm9yYWxsCitjb25zdHJ1Y3QuCisKK05vbi1kZWZhdWx0IGZvcnRyYW4gZGlhbGVjdHMgfgorVGhlIHN5bnRheCBzY3JpcHQgc3VwcG9ydHMgZml2ZSBGb3J0cmFuIGRpYWxlY3RzOiBmOTUsIGY5MCwgZjc3LCB0aGUgTGFoZXkKK3N1YnNldCBlbGY5MCwgYW5kIHRoZSBJbWFnaW5lMSBzdWJzZXQgRi4KKworSWYgeW91IHVzZSBmNzcgd2l0aCBleHRlbnNpb25zLCBldmVuIGNvbW1vbiBvbmVzIGxpa2UgZG8vZW5kZG8gbG9vcHMsIGRvL3doaWxlCitsb29wcyBhbmQgZnJlZSBzb3VyY2UgZm9ybSB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgbW9zdCBmNzcgY29tcGlsZXJzIGluY2x1ZGluZworZzc3IChHTlUgRm9ydHJhbiksIHRoZW4geW91IHdpbGwgcHJvYmFibHkgZmluZCB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcKK3NhdGlzZmFjdG9yeS4gSG93ZXZlciwgaWYgeW91IHVzZSBzdHJpY3QgZjc3IHdpdGggbm8gZXh0ZW5zaW9ucywgbm90IGV2ZW4gZnJlZQorc291cmNlIGZvcm0gb3IgdGhlIE1JTCBTVEQgMTc1MyBleHRlbnNpb25zLCB0aGVuIHRoZSBhZHZhbnRhZ2VzIG9mIHNldHRpbmcgdGhlCitkaWFsZWN0IHRvIGY3NyBhcmUgdGhhdCBuYW1lcyBzdWNoIGFzIFNVTSBhcmUgcmVjb2duaXplZCBhcyB1c2VyIHZhcmlhYmxlCituYW1lcyBhbmQgbm90IGhpZ2hsaWdodGVkIGFzIGY5eCBpbnRyaW5zaWMgZnVuY3Rpb25zLCB0aGF0IG9ic29sZXRlIGNvbnN0cnVjdHMKK3N1Y2ggYXMgQVNTSUdOIHN0YXRlbWVudHMgYXJlIG5vdCBoaWdobGlnaHRlZCBhcyB0b2RvIGl0ZW1zLCBhbmQgdGhhdCBmaXhlZAorc291cmNlIGZvcm0gd2lsbCBiZSBhc3N1bWVkLgorCitJZiB5b3UgdXNlIGVsZjkwIG9yIEYsIHRoZSBhZHZhbnRhZ2Ugb2Ygc2V0dGluZyB0aGUgZGlhbGVjdCBhcHByb3ByaWF0ZWx5IGlzCit0aGF0IGY5MCBmZWF0dXJlcyBleGNsdWRlZCBmcm9tIHRoZXNlIGRpYWxlY3RzIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYXMgdG9kbworaXRlbXMgYW5kIHRoYXQgZnJlZSBzb3VyY2UgZm9ybSB3aWxsIGJlIGFzc3VtZWQgYXMgcmVxdWlyZWQgZm9yIHRoZXNlCitkaWFsZWN0cy4KKworVGhlIGRpYWxlY3QgY2FuIGJlIHNlbGVjdGVkIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIGZvcnRyYW5fZGlhbGVjdC4gVGhlCitwZXJtaXNzaWJsZSB2YWx1ZXMgb2YgZm9ydHJhbl9kaWFsZWN0IGFyZSBjYXNlLXNlbnNpdGl2ZSBhbmQgbXVzdCBiZSAiZjk1IiwKKyJmOTAiLCAiZjc3IiwgImVsZiIgb3IgIkYiLiBJbnZhbGlkIHZhbHVlcyBvZiBmb3J0cmFuX2RpYWxlY3QgYXJlIGlnbm9yZWQuCisKK0lmIGFsbCB5b3VyIGZvcnRyYW4gZmlsZXMgdXNlIHRoZSBzYW1lIGRpYWxlY3QsIHNldCBmb3J0cmFuX2RpYWxlY3QgaW4geW91cgorLnZpbXJjIHByaW9yIHRvIHlvdXIgc3ludGF4IG9uIHN0YXRlbWVudC4gSWYgdGhlIGRpYWxlY3QgZGVwZW5kcyB1cG9uIHRoZSBmaWxlCitleHRlbnNpb24sIHRoZW4gaXQgaXMgbW9zdCBjb252ZW5pZW50IHRvIHNldCBpdCBpbiBhIGZ0cGx1Z2luIGZpbGUuIEZvciBtb3JlCitpbmZvcm1hdGlvbiBvbiBmdHBsdWdpbiBmaWxlcywgc2VlIHxmdHBsdWdpbnwuIEZvciBleGFtcGxlLCBpZiBhbGwgeW91cgorZm9ydHJhbiBmaWxlcyB3aXRoIGFuIC5mOTAgZXh0ZW5zaW9uIGFyZSB3cml0dGVuIGluIHRoZSBlbGYgc3Vic2V0LCB5b3VyCitmdHBsdWdpbiBmaWxlIHNob3VsZCBjb250YWluIHRoZSBjb2RlID4KKyAgICBsZXQgczpleHRmbmFtZSA9IGV4cGFuZCgiJTplIikKKyAgICBpZiBzOmV4dGZuYW1lID09PyAiZjkwIgorCWxldCBmb3J0cmFuX2RpYWxlY3Q9ImVsZiIKKyAgICBlbHNlCisJdW5sZXQhIGZvcnRyYW5fZGlhbGVjdAorICAgIGVuZGlmCitOb3RlIHRoYXQgdGhpcyB3aWxsIHdvcmsgb25seSBpZiB0aGUgImZpbGV0eXBlIHBsdWdpbiBpbmRlbnQgb24iIGNvbW1hbmQKK3ByZWNlZGVzIHRoZSAic3ludGF4IG9uIiBjb21tYW5kIGluIHlvdXIgLnZpbXJjIGZpbGUuCisKK0ZpbmVyIGNvbnRyb2wgaXMgbmVjZXNzYXJ5IGlmIHRoZSBmaWxlIGV4dGVuc2lvbiBkb2VzIG5vdCB1bmlxdWVseSBpZGVudGlmeQordGhlIGRpYWxlY3QuIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZGlhbGVjdCwgb24gYSBmaWxlLWJ5LWZpbGUgYmFzaXMsIGJ5CitpbmNsdWRpbmcgYSBjb21tZW50IHdpdGggdGhlIGRpcmVjdGl2ZSAiZm9ydHJhbl9kaWFsZWN0PXh4IiAod2hlcmUgeHg9Zjc3IG9yCitlbGYgb3IgRiBvciBmOTAgb3IgZjk1KSBpbiBvbmUgb2YgdGhlIGZpcnN0IHRocmVlIGxpbmVzIGluIHlvdXIgZmlsZS4gRm9yCitleGFtcGxlLCB5b3VyIG9sZGVyIC5mIGZpbGVzIG1heSBiZSB3cml0dGVuIGluIGV4dGVuZGVkIGY3NyBidXQgeW91ciBuZXdlcgorb25lcyBtYXkgYmUgRiBjb2RlcywgYW5kIHlvdSB3b3VsZCBpZGVudGlmeSB0aGUgbGF0dGVyIGJ5IGluY2x1ZGluZyBpbiB0aGUKK2ZpcnN0IHRocmVlIGxpbmVzIG9mIHRob3NlIGZpbGVzIGEgRm9ydHJhbiBjb21tZW50IG9mIHRoZSBmb3JtID4KKyAgISBmb3J0cmFuX2RpYWxlY3Q9RgorRiBvdmVycmlkZXMgZWxmIGlmIGJvdGggZGlyZWN0aXZlcyBhcmUgcHJlc2VudC4KKworTGltaXRhdGlvbnMgfgorUGFyZW50aGVzaXMgY2hlY2tpbmcgZG9lcyBub3QgY2F0Y2ggdG9vIGZldyBjbG9zaW5nIHBhcmVudGhlc2VzLiBIb2xsZXJpdGgKK3N0cmluZ3MgYXJlIG5vdCByZWNvZ25pemVkLiBTb21lIGtleXdvcmRzIG1heSBiZSBoaWdobGlnaHRlZCBpbmNvcnJlY3RseQorYmVjYXVzZSBGb3J0cmFuOTAgaGFzIG5vIHJlc2VydmVkIHdvcmRzLgorCitGb3IgZnVydGhlciBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGZvcnRyYW4sIHNlZSB8Zm9ydHJhbi1pbmRlbnR8IGFuZAorfGZvcnRyYW4tcGx1Z2lufC4KKworCitGVldNIENPTkZJR1VSQVRJT04gRklMRVMJCQkqZnZ3bS52aW0qICpmdndtLXN5bnRheCoKKworSW4gb3JkZXIgZm9yIFZpbSB0byByZWNvZ25pemUgRnZ3bSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgZG8gbm90IG1hdGNoCit0aGUgcGF0dGVybnMgKmZ2d21yYyogb3IgKmZ2d20ycmMqICwgeW91IG11c3QgcHV0IGFkZGl0aW9uYWwgcGF0dGVybnMKK2FwcHJvcHJpYXRlIHRvIHlvdXIgc3lzdGVtIGluIHlvdXIgbXlmaWxldHlwZXMudmltIGZpbGUuICBGb3IgdGhlc2UKK3BhdHRlcm5zLCB5b3UgbXVzdCBzZXQgdGhlIHZhcmlhYmxlICJiOmZ2d21fdmVyc2lvbiIgdG8gdGhlIG1ham9yIHZlcnNpb24KK251bWJlciBvZiBGdndtLCBhbmQgdGhlICdmaWxldHlwZScgb3B0aW9uIHRvIGZ2d20uCisKK0ZvciBleGFtcGxlLCB0byBtYWtlIFZpbSBpZGVudGlmeSBhbGwgZmlsZXMgaW4gL2V0Yy9YMTEvZnZ3bTIvCithcyBGdndtMiBjb25maWd1cmF0aW9uIGZpbGVzLCBhZGQgdGhlIGZvbGxvd2luZzogPgorCisgIDphdSEgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvWDExL2Z2d20yLyogIGxldCBiOmZ2d21fdmVyc2lvbiA9IDIgfAorCQkJCQkgXCBzZXQgZmlsZXR5cGU9ZnZ3bQorCitJZiB5b3UnZCBsaWtlIFZpbSB0byBoaWdobGlnaHQgYWxsIHZhbGlkIGNvbG9yIG5hbWVzLCB0ZWxsIGl0IHdoZXJlIHRvCitmaW5kIHRoZSBjb2xvciBkYXRhYmFzZSAocmdiLnR4dCkgb24geW91ciBzeXN0ZW0uICBEbyB0aGlzIGJ5IHNldHRpbmcKKyJyZ2JfZmlsZSIgdG8gaXRzIGxvY2F0aW9uLiAgQXNzdW1pbmcgeW91ciBjb2xvciBkYXRhYmFzZSBpcyBsb2NhdGVkCitpbiAvdXNyL1gxMS9saWIvWDExLywgeW91IHNob3VsZCBhZGQgdGhlIGxpbmUgPgorCisJOmxldCByZ2JfZmlsZSA9ICIvdXNyL1gxMS9saWIvWDExL3JnYi50eHQiCisKK3RvIHlvdXIgLnZpbXJjIGZpbGUuCisKKworR1NQCQkJCQkJCSpnc3AudmltKgorCitUaGUgZGVmYXVsdCBjb2xvcmluZyBzdHlsZSBmb3IgR1NQIHBhZ2VzIGlzIGRlZmluZWQgYnkgfGh0bWwudmltfCwgYW5kCit0aGUgY29sb3JpbmcgZm9yIGphdmEgY29kZSAod2l0aGluIGphdmEgdGFncyBvciBpbmxpbmUgYmV0d2VlbiBiYWNrdGlja3MpCitpcyBkZWZpbmVkIGJ5IHxqYXZhLnZpbXwuICBUaGUgZm9sbG93aW5nIEhUTUwgZ3JvdXBzIGRlZmluZWQgaW4gfGh0bWwudmltfAorYXJlIHJlZGVmaW5lZCB0byBpbmNvcnBvcmF0ZSBhbmQgaGlnaGxpZ2h0IGlubGluZSBqYXZhIGNvZGU6CisKKyAgICBodG1sU3RyaW5nCisgICAgaHRtbFZhbHVlCisgICAgaHRtbEVuZFRhZworICAgIGh0bWxUYWcKKyAgICBodG1sVGFnTgorCitIaWdobGlnaHRpbmcgc2hvdWxkIGxvb2sgZmluZSBtb3N0IG9mIHRoZSBwbGFjZXMgd2hlcmUgeW91J2Qgc2VlIGlubGluZQoramF2YSBjb2RlLCBidXQgaW4gc29tZSBzcGVjaWFsIGNhc2VzIGl0IG1heSBub3QuICBUbyBhZGQgYW5vdGhlciBIVE1MCitncm91cCB3aGVyZSB5b3Ugd2lsbCBoYXZlIGlubGluZSBqYXZhIGNvZGUgd2hlcmUgaXQgZG9lcyBub3QgaGlnaGxpZ2h0Citjb3JyZWN0bHksIGp1c3QgY29weSB0aGUgbGluZSB5b3Ugd2FudCBmcm9tIHxodG1sLnZpbXwgYW5kIGFkZCBnc3BKYXZhCit0byB0aGUgY29udGFpbnMgY2xhdXNlLgorCitUaGUgYmFja3RpY2tzIGZvciBpbmxpbmUgamF2YSBhcmUgaGlnaGxpZ2h0ZWQgYWNjb3JkaW5nIHRvIHRoZSBodG1sRXJyb3IKK2dyb3VwIHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gc2VlLgorCisKK0dST0ZGCQkJCQkJKmdyb2ZmLnZpbSogKmdyb2ZmLXN5bnRheCoKKworVGhlIGdyb2ZmIHN5bnRheCBmaWxlIGlzIGEgd3JhcHBlciBmb3IgfG5yb2ZmLnZpbXwsIHNlZSB0aGUgbm90ZXMKK3VuZGVyIHRoYXQgaGVhZGluZyBmb3IgZXhhbXBsZXMgb2YgdXNlIGFuZCBjb25maWd1cmF0aW9uLiBUaGUgcHVycG9zZQorb2YgdGhpcyB3cmFwcGVyIGlzIHRvIHNldCB1cCBncm9mZiBzeW50YXggZXh0ZW5zaW9ucyBieSBzZXR0aW5nIHRoZQorZmlsZXR5cGUgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gYSBwZXJzb25hbCBmaWxldHlwZSBkZWZpbml0aW9ucyBmaWxlCisoc2VlIHxmaWxldHlwZS50eHR8KS4KKworCitIQVNLRUxMCQkJICAgICAqaGFza2VsbC52aW0qICpsaGFza2VsbC52aW0qICpoYXNrZWxsLXN5bnRheCoKKworVGhlIEhhc2tlbGwgc3ludGF4IGZpbGVzIHN1cHBvcnQgcGxhaW4gSGFza2VsbCBjb2RlIGFzIHdlbGwgYXMgbGl0ZXJhdGUKK0hhc2tlbGwgY29kZSwgdGhlIGxhdHRlciBpbiBib3RoIEJpcmQgc3R5bGUgYW5kIFRlWCBzdHlsZS4gVGhlIEhhc2tlbGwKK3N5bnRheCBoaWdobGlnaHRpbmcgd2lsbCBhbHNvIGhpZ2hsaWdodCBDIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLgorCitJZiB5b3Ugd2FudCB0byBoaWdobGlnaHQgZGVsaW1pdGVyIGNoYXJhY3RlcnMgKHVzZWZ1bCBpZiB5b3UgaGF2ZSBhCitsaWdodC1jb2xvdXJlZCBiYWNrZ3JvdW5kKSwgYWRkIHRvIHlvdXIgLnZpbXJjOiA+CisJOmxldCBoc19oaWdobGlnaHRfZGVsaW1pdGVycyA9IDEKK1RvIHRyZWF0IFRydWUgYW5kIEZhbHNlIGFzIGtleXdvcmRzIGFzIG9wcG9zZWQgdG8gb3JkaW5hcnkgaWRlbnRpZmllcnMsCithZGQ6ID4KKwk6bGV0IGhzX2hpZ2hsaWdodF9ib29sZWFuID0gMQorVG8gYWxzbyB0cmVhdCB0aGUgbmFtZXMgb2YgcHJpbWl0aXZlIHR5cGVzIGFzIGtleXdvcmRzOiA+CisJOmxldCBoc19oaWdobGlnaHRfdHlwZXMgPSAxCitBbmQgdG8gdHJlYXQgdGhlIG5hbWVzIG9mIGV2ZW4gbW9yZSByZWxhdGl2ZWx5IGNvbW1vbiB0eXBlcyBhcyBrZXl3b3JkczogPgorCTpsZXQgaHNfaGlnaGxpZ2h0X21vcmVfdHlwZXMgPSAxCitJZiB5b3Ugd2FudCB0byBoaWdobGlnaHQgdGhlIG5hbWVzIG9mIGRlYnVnZ2luZyBmdW5jdGlvbnMsIHB1dCBpbgoreW91ciAudmltcmM6ID4KKwk6bGV0IGhzX2hpZ2hsaWdodF9kZWJ1ZyA9IDEKKworVGhlIEhhc2tlbGwgc3ludGF4IGhpZ2hsaWdodGluZyBhbHNvIGhpZ2hsaWdodHMgQyBwcmVwcm9jZXNzb3IKK2RpcmVjdGl2ZXMsIGFuZCBmbGFncyBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggIyBidXQgYXJlIG5vdCB2YWxpZAorZGlyZWN0aXZlcyBhcyBlcnJvbmVvdXMuIFRoaXMgaW50ZXJmZXJlcyB3aXRoIEhhc2tlbGwncyBzeW50YXggZm9yCitvcGVyYXRvcnMsIGFzIHRoZXkgbWF5IHN0YXJ0IHdpdGggIy4gSWYgeW91IHdhbnQgdG8gaGlnaGxpZ2h0IHRob3NlCithcyBvcGVyYXRvcnMgYXMgb3Bwb3NlZCB0byBlcnJvcnMsIHB1dCBpbiB5b3VyIC52aW1yYzogPgorCTpsZXQgaHNfYWxsb3dfaGFzaF9vcGVyYXRvciA9IDEKKworVGhlIHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGxpdGVyYXRlIEhhc2tlbGwgY29kZSB3aWxsIHRyeSB0bworYXV0b21hdGljYWxseSBndWVzcyB3aGV0aGVyIHlvdXIgbGl0ZXJhdGUgSGFza2VsbCBjb2RlIGNvbnRhaW5zCitUZVggbWFya3VwIG9yIG5vdCwgYW5kIGNvcnJlc3BvbmRpbmdseSBoaWdobGlnaHQgVGVYIGNvbnN0cnVjdHMKK29yIG5vdGhpbmcgYXQgYWxsLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZ2xvYmFsbHkgYnkgcHV0dGluZworaW4geW91ciAudmltcmMgPgorCTpsZXQgbGhzX21hcmt1cCA9IG5vbmUKK2ZvciBubyBoaWdobGlnaHRpbmcgYXQgYWxsLCBvciA+CisJOmxldCBsaHNfbWFya3VwID0gdGV4Cit0byBmb3JjZSB0aGUgaGlnaGxpZ2h0aW5nIHRvIGFsd2F5cyB0cnkgdG8gaGlnaGxpZ2h0IFRlWCBtYXJrdXAuCitGb3IgbW9yZSBmbGV4aWJpbGl0eSwgeW91IG1heSBhbHNvIHVzZSBidWZmZXIgbG9jYWwgdmVyc2lvbnMgb2YKK3RoaXMgdmFyaWFibGUsIHNvIGUuZy4gPgorCTpsZXQgYjpsaHNfbWFya3VwID0gdGV4Cit3aWxsIGZvcmNlIFRlWCBoaWdobGlnaHRpbmcgZm9yIGEgcGFydGljdWxhciBidWZmZXIuIEl0IGhhcyB0byBiZQorc2V0IGJlZm9yZSB0dXJuaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgb24gZm9yIHRoZSBidWZmZXIgb3IKK2xvYWRpbmcgYSBmaWxlLgorCisKK0hUTUwJCQkJCQkqaHRtbC52aW0qICpodG1sLXN5bnRheCoKKworVGhlIGNvbG9yaW5nIHNjaGVtZSBmb3IgdGFncyBpbiB0aGUgSFRNTCBmaWxlIHdvcmtzIGFzIGZvbGxvd3MuCisKK1RoZSAgPD4gb2Ygb3BlbmluZyB0YWdzIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IHRoYW4gdGhlIDwvPiBvZiBhIGNsb3NpbmcgdGFnLgorVGhpcyBpcyBvbiBwdXJwb3NlISBGb3Igb3BlbmluZyB0YWdzIHRoZSAnRnVuY3Rpb24nIGNvbG9yIGlzIHVzZWQsIHdoaWxlIGZvcgorY2xvc2luZyB0YWdzIHRoZSAnVHlwZScgY29sb3IgaXMgdXNlZCAoU2VlIHN5bnRheC52aW0gdG8gY2hlY2sgaG93IHRob3NlIGFyZQorZGVmaW5lZCBmb3IgeW91KQorCitLbm93biB0YWcgbmFtZXMgYXJlIGNvbG9yZWQgdGhlIHNhbWUgd2F5IGFzIHN0YXRlbWVudHMgaW4gQy4gIFVua25vd24gdGFnCituYW1lcyBhcmUgY29sb3JlZCB3aXRoIHRoZSBzYW1lIGNvbG9yIGFzIHRoZSA8PiBvciA8Lz4gcmVzcGVjdGl2ZWx5IHdoaWNoCittYWtlcyBpdCBlYXN5IHRvIHNwb3QgZXJyb3JzCisKK05vdGUgdGhhdCB0aGUgc2FtZSBpcyB0cnVlIGZvciBhcmd1bWVudCAob3IgYXR0cmlidXRlKSBuYW1lcy4gS25vd24gYXR0cmlidXRlCituYW1lcyBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSB0aGFuIHVua25vd24gb25lcy4KKworU29tZSBIVE1MIHRhZ3MgYXJlIHVzZWQgdG8gY2hhbmdlIHRoZSByZW5kZXJpbmcgb2YgdGV4dC4gVGhlIGZvbGxvd2luZyB0YWdzCithcmUgcmVjb2duaXplZCBieSB0aGUgaHRtbC52aW0gc3ludGF4IGNvbG9yaW5nIGZpbGUgYW5kIGNoYW5nZSB0aGUgd2F5IG5vcm1hbAordGV4dCBpcyBzaG93bjogPEI+IDxJPiA8VT4gPEVNPiA8U1RST05HPiAoPEVNPiBpcyB1c2VkIGFzIGFuIGFsaWFzIGZvciA8ST4sCit3aGlsZSA8U1RST05HPiBhcyBhbiBhbGlhcyBmb3IgPEI+KSwgPEgxPiAtIDxINj4sIDxIRUFEPiwgPFRJVExFPiBhbmQgPEE+LCBidXQKK29ubHkgaWYgdXNlZCBhcyBhIGxpbmsgdGhhdCBpcywgaXQgbXVzdCBpbmNsdWRlIGEgaHJlZiBhcyBpbgorPEEgaHJlZj0ic29tZmlsZS5odG1sIj4pLgorCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgaG93IHN1Y2ggdGV4dCBpcyByZW5kZXJlZCwgeW91IG11c3QgcmVkZWZpbmUgdGhlCitmb2xsb3dpbmcgc3ludGF4IGdyb3VwczoKKworICAgIC0gaHRtbEJvbGQKKyAgICAtIGh0bWxCb2xkVW5kZXJsaW5lCisgICAgLSBodG1sQm9sZFVuZGVybGluZUl0YWxpYworICAgIC0gaHRtbFVuZGVybGluZQorICAgIC0gaHRtbFVuZGVybGluZUl0YWxpYworICAgIC0gaHRtbEl0YWxpYworICAgIC0gaHRtbFRpdGxlIGZvciB0aXRsZXMKKyAgICAtIGh0bWxIMSAtIGh0bWxINiBmb3IgaGVhZGluZ3MKKworVG8gbWFrZSB0aGlzIHJlZGVmaW5pdGlvbiB3b3JrIHlvdSBtdXN0IHJlZGVmaW5lIHRoZW0gYWxsIHdpdGggdGhlIGV4Y2VwdGlvbgorb2YgdGhlIGxhc3QgdHdvIChodG1sVGl0bGUgYW5kIGh0bWxIWzEtNl0sIHdoaWNoIGFyZSBvcHRpb25hbCkgYW5kIGRlZmluZSB0aGUKK2ZvbGxvd2luZyB2YXJpYWJsZSBpbiB5b3VyIHZpbXJjICh0aGlzIGlzIGR1ZSB0byB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGZpbGVzCithcmUgcmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24pID4KKwk6bGV0IGh0bWxfbXlfcmVuZGVyaW5nPTEKKworSWYgeW91J2QgbGlrZSB0byBzZWUgYW4gZXhhbXBsZSBkb3dubG9hZCBteXN5bnRheC52aW0gYXQKK2h0dHA6Ly93d3cuZmxlaW5lci5jb20vdmltL2Rvd25sb2FkLmh0bWwKKworWW91IGNhbiBhbHNvIGRpc2FibGUgdGhpcyByZW5kZXJpbmcgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyCit2aW1yYyBmaWxlOiA+CisJOmxldCBodG1sX25vX3JlbmRlcmluZz0xCisKK0hUTUwgY29tbWVudHMgYXJlIHJhdGhlciBzcGVjaWFsIChzZWUgYW4gSFRNTCByZWZlcmVuY2UgZG9jdW1lbnQgZm9yIHRoZQorZGV0YWlscyksIGFuZCB0aGUgc3ludGF4IGNvbG9yaW5nIHNjaGVtZSB3aWxsIGhpZ2hsaWdodCBhbGwgZXJyb3JzLgorSG93ZXZlciwgaWYgeW91IHByZWZlciB0byB1c2UgdGhlIHdyb25nIHN0eWxlIChzdGFydHMgd2l0aCA8IS0tIGFuZAorZW5kcyB3aXRoIC0tIT4pIHlvdSBjYW4gZGVmaW5lID4KKwk6bGV0IGh0bWxfd3JvbmdfY29tbWVudHM9MQorCitKYXZhU2NyaXB0IGFuZCBWaXN1YWwgQmFzaWMgZW1iZWRkZWQgaW5zaWRlIEhUTUwgZG9jdW1lbnRzIGFyZSBoaWdobGlnaHRlZCBhcworJ1NwZWNpYWwnIHdpdGggc3RhdGVtZW50cywgY29tbWVudHMsIHN0cmluZ3MgYW5kIHNvIG9uIGNvbG9yZWQgYXMgaW4gc3RhbmRhcmQKK3Byb2dyYW1taW5nIGxhbmd1YWdlcy4gTm90ZSB0aGF0IG9ubHkgSmF2YVNjcmlwdCBhbmQgVmlzdWFsIEJhc2ljIGFyZSBjdXJyZW50bHkKK3N1cHBvcnRlZCwgbm8gb3RoZXIgc2NyaXB0aW5nIGxhbmd1YWdlIGhhcyBiZWVuIGFkZGVkIHlldC4KKworRW1iZWRkZWQgYW5kIGlubGluZWQgY2FzY2FkaW5nIHN0eWxlIHNoZWV0cyAoQ1NTKSBhcmUgaGlnaGxpZ2h0ZWQgdG9vLgorCitUaGVyZSBhcmUgc2V2ZXJhbCBodG1sIHByZXByb2Nlc3NvciBsYW5ndWFnZXMgb3V0IHRoZXJlLiBodG1sLnZpbSBoYXMgYmVlbgord3JpdHRlbiBzdWNoIHRoYXQgaXQgc2hvdWxkIGJlIHRyaXZpYWwgdG8gaW5jbHVkZSBpdC4gVG8gZG8gc28gYWRkIHRoZQorZm9sbG93aW5nIHR3byBsaW5lcyB0byB0aGUgc3ludGF4IGNvbG9yaW5nIGZpbGUgZm9yIHRoYXQgbGFuZ3VhZ2UKKyh0aGUgZXhhbXBsZSBjb21lcyBmcm9tIHRoZSBhc3AudmltIGZpbGUpOgorCisgICAgcnVudGltZSEgc3ludGF4L2h0bWwudmltCisgICAgc3luIGNsdXN0ZXIgaHRtbFByZXByb2MgYWRkPWFzcAorCitOb3cgeW91IGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgYWRkIGFsbCByZWdpb25zIHRoYXQgY29udGFpbgordGhlIHByZXByb2Nlc3NvciBsYW5ndWFnZSB0byB0aGUgY2x1c3RlciBodG1sUHJlcHJvYy4KKworCitIVE1ML09TIChieSBBZXN0aXZhKQkJCQkqaHRtbG9zLnZpbSogKmh0bWxvcy1zeW50YXgqCisKK1RoZSBjb2xvcmluZyBzY2hlbWUgZm9yIEhUTUwvT1Mgd29ya3MgYXMgZm9sbG93czoKKworRnVuY3Rpb25zIGFuZCB2YXJpYWJsZSBuYW1lcyBhcmUgdGhlIHNhbWUgY29sb3IgYnkgZGVmYXVsdCwgYmVjYXVzZSBWSU0KK2RvZXNuJ3Qgc3BlY2lmeSBkaWZmZXJlbnQgY29sb3JzIGZvciBGdW5jdGlvbnMgYW5kIElkZW50aWZpZXJzLiAgVG8gY2hhbmdlCit0aGlzICh3aGljaCBpcyByZWNvbW1lbmRlZCBpZiB5b3Ugd2FudCBmdW5jdGlvbiBuYW1lcyB0byBiZSByZWNvZ25pemFibGUgaW4gYQorZGlmZmVyZW50IGNvbG9yKSB5b3UgbmVlZCB0byBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVpdGhlciB5b3VyIH4vLnZpbXJjOiA+CisgIDpoaSBGdW5jdGlvbiB0ZXJtPXVuZGVybGluZSBjdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRHcmF5CisKK09mIGNvdXJzZSwgdGhlIGN0ZXJtZmcgY2FuIGJlIGEgZGlmZmVyZW50IGNvbG9yIGlmIHlvdSBjaG9vc2UuCisKK0Fub3RoZXIgaXNzdWVzIHRoYXQgSFRNTC9PUyBydW5zIGludG8gaXMgdGhhdCB0aGVyZSBpcyBubyBzcGVjaWFsIGZpbGV0eXBlIHRvCitzaWduaWZ5IHRoYXQgaXQgaXMgYSBmaWxlIHdpdGggSFRNTC9PUyBjb2RpbmcuCVlvdSBjYW4gY2hhbmdlIHRoaXMgYnkgb3BlbmluZworYSBmaWxlIGFuZCB0dXJuaW5nIG9uIEhUTUwvT1Mgc3ludGF4IGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6ID4KKyAgOnNldCBzeW50YXg9aHRtbG9zCisKK0xhc3RseSwgaXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgY2hhcmFjdGVycyB0byBiZWdpbiBhCitibG9jayBvZiBIVE1ML09TIGNvZGUgY2FuIGVpdGhlciBiZSA8PCBvciBbWyBhbmQgPj4gb3IgXV0sIHJlc3BlY3RpdmVseS4KKworCitJQTY0CQkJCSppYTY0LnZpbSogKmludGVsLWl0YW5pdW0qICppYTY0LXN5bnRheCoKKworSGlnaGxpZ2h0aW5nIGZvciB0aGUgSW50ZWwgSXRhbml1bSA2NCBhc3NlbWJseSBsYW5ndWFnZS4gIFNlZSB8YXNtLnZpbXwgZm9yCitob3cgdG8gcmVjb2duaXplIHRoaXMgZmlsZXR5cGUuCisKK1RvIGhhdmUgKi5pbmMgZmlsZXMgYmUgcmVjb2duaXplZCBhcyBJQTY0LCBhZGQgdGhpcyB0byB5b3VyIC52aW1yYyBmaWxlOiA+CisJOmxldCBnOmZpbGV0eXBlX2luYyA9ICJpYTY0IgorCisKK0lORk9STQkJCQkJCSppbmZvcm0udmltKiAqaW5mb3JtLXN5bnRheCoKKworSW5mb3JtIGhpZ2hsaWdodGluZyBpbmNsdWRlcyBzeW1ib2xzIHByb3ZpZGVkIGJ5IHRoZSBJbmZvcm0gTGlicmFyeSwgYXMKK21vc3QgcHJvZ3JhbXMgbWFrZSBleHRlbnNpdmUgdXNlIG9mIGl0LiAgSWYgZG8gbm90IHdpc2ggTGlicmFyeSBzeW1ib2xzCit0byBiZSBoaWdobGlnaHRlZCBhZGQgdGhpcyB0byB5b3VyIHZpbSBzdGFydHVwOiA+CisJOmxldCBpbmZvcm1faGlnaGxpZ2h0X3NpbXBsZT0xCisKK0J5IGRlZmF1bHQgaXQgaXMgYXNzdW1lZCB0aGF0IEluZm9ybSBwcm9ncmFtcyBhcmUgWi1tYWNoaW5lIHRhcmdldGVkLAorYW5kIGhpZ2hsaWdodHMgWi1tYWNoaW5lIGFzc2VtYmx5IGxhbmd1YWdlIHN5bWJvbHMgYXBwcm9wcmlhdGVseS4gIElmCit5b3UgaW50ZW5kIHlvdXIgcHJvZ3JhbSB0byBiZSB0YXJnZXRlZCB0byBhIEdsdWx4L0dsayBlbnZpcm9ubWVudCB5b3UKK25lZWQgdG8gYWRkIHRoaXMgdG8geW91ciBzdGFydHVwIHNlcXVlbmNlOiA+CisJOmxldCBpbmZvcm1faGlnaGxpZ2h0X2dsdWx4PTEKKworVGhpcyB3aWxsIGhpZ2hsaWdodCBHbHVseCBvcGNvZGVzIGluc3RlYWQsIGFuZCBhbHNvIGFkZHMgZ2xrKCkgdG8gdGhlCitzZXQgb2YgaGlnaGxpZ2h0ZWQgc3lzdGVtIGZ1bmN0aW9ucy4KKworVGhlIEluZm9ybSBjb21waWxlciB3aWxsIGZsYWcgY2VydGFpbiBvYnNvbGV0ZSBrZXl3b3JkcyBhcyBlcnJvcnMgd2hlbgoraXQgZW5jb3VudGVycyB0aGVtLiAgVGhlc2Uga2V5d29yZHMgYXJlIG5vcm1hbGx5IGhpZ2hsaWdodGVkIGFzIGVycm9ycworYnkgVmltLiAgVG8gcHJldmVudCBzdWNoIGVycm9yIGhpZ2hsaWdodGluZywgeW91IG11c3QgYWRkIHRoaXMgdG8geW91cgorc3RhcnR1cCBzZXF1ZW5jZTogPgorCTpsZXQgaW5mb3JtX3N1cHByZXNzX29ic29sZXRlPTEKKworQnkgZGVmYXVsdCwgdGhlIGxhbmd1YWdlIGZlYXR1cmVzIGhpZ2hsaWdodGVkIGNvbmZvcm0gdG8gQ29tcGlsZXIKK3ZlcnNpb24gNi4zMCBhbmQgTGlicmFyeSB2ZXJzaW9uIDYuMTEuICBJZiB5b3UgYXJlIHVzaW5nIGFuIG9sZGVyCitJbmZvcm0gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIHlvdSBtYXkgd2l0aCB0byBhZGQgdGhpcyB0byB5b3VyCitzdGFydHVwIHNlcXVlbmNlOiA+CisJOmxldCBpbmZvcm1faGlnaGxpZ2h0X29sZD0xCisKKworSkFWQQkJCQkJCSpqYXZhLnZpbSogKmphdmEtc3ludGF4KgorCitUaGUgamF2YS52aW0gc3ludGF4IGhpZ2hsaWdodGluZyBmaWxlIG9mZmVycyBzZXZlcmFsIG9wdGlvbnM6CisKK0luIEphdmEgMS4wLjIgaXQgd2FzIG5ldmVyIHBvc3NpYmxlIHRvIGhhdmUgYnJhY2VzIGluc2lkZSBwYXJlbnMsIHNvIHRoaXMgd2FzCitmbGFnZ2VkIGFzIGFuIGVycm9yLiAgU2luY2UgSmF2YSAxLjEgdGhpcyBpcyBwb3NzaWJsZSAod2l0aCBhbm9ueW1vdXMKK2NsYXNzZXMpLCBhbmQgdGhlcmVmb3JlIGlzIG5vIGxvbmdlciBtYXJrZWQgYXMgYW4gZXJyb3IuIElmIHlvdSBwcmVmZXIgdGhlIG9sZAord2F5LCBwdXQgdGhlIGZvbGxvd2luZyBsaW5lIGludG8geW91ciB2aW0gc3RhcnR1cCBmaWxlOiA+CisJOmxldCBqYXZhX21hcmtfYnJhY2VzX2luX3BhcmVuc19hc19lcnJvcnM9MQorCitBbGwgaWRlbnRpZmllcnMgaW4gamF2YS5sYW5nLiogYXJlIGFsd2F5cyB2aXNpYmxlIGluIGFsbCBjbGFzc2VzLiAgVG8KK2hpZ2hsaWdodCB0aGVtIHVzZTogPgorCTpsZXQgamF2YV9oaWdobGlnaHRfamF2YV9sYW5nX2lkcz0xCisKK1lvdSBjYW4gYWxzbyBoaWdobGlnaHQgaWRlbnRpZmllcnMgb2YgbW9zdCBzdGFuZGFyZCBqYXZhIHBhY2thZ2VzIGlmIHlvdQorZG93bmxvYWQgdGhlIGphdmFpZC52aW0gc2NyaXB0IGF0IGh0dHA6Ly93d3cuZmxlaW5lci5jb20vdmltL2Rvd25sb2FkLmh0bWwuCitJZiB5b3UgcHJlZmVyIHRvIG9ubHkgaGlnaGxpZ2h0IGlkZW50aWZpZXJzIG9mIGEgY2VydGFpbiBwYWNrYWdlLCBzYXkgamF2YS5pbwordXNlIHRoZSBmb2xsb3dpbmc6ID4KKwk6bGV0IGphdmFfaGlnaGxpZ2h0X2phdmFfaW89MQorQ2hlY2sgdGhlIGphdmFpZC52aW0gZmlsZSBmb3IgYSBsaXN0IG9mIGFsbCB0aGUgcGFja2FnZXMgdGhhdCBhcmUgc3VwcG9ydGVkLgorCitGdW5jdGlvbiBuYW1lcyBhcmUgbm90IGhpZ2hsaWdodGVkLCBhcyB0aGUgd2F5IHRvIGZpbmQgZnVuY3Rpb25zIGRlcGVuZHMgb24KK2hvdyB5b3Ugd3JpdGUgamF2YSBjb2RlLiAgVGhlIHN5bnRheCBmaWxlIGtub3dzIHR3byBwb3NzaWJsZSB3YXlzIHRvIGhpZ2hsaWdodAorZnVuY3Rpb25zOgorCitJZiB5b3Ugd3JpdGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRoYXQgYXJlIGFsd2F5cyBpbmRlbnRlZCBieSBlaXRoZXIKK2EgdGFiLCA4IHNwYWNlcyBvciAyIHNwYWNlcyB5b3UgbWF5IHdhbnQgdG8gc2V0ID4KKwk6bGV0IGphdmFfaGlnaGxpZ2h0X2Z1bmN0aW9ucz0iaW5kZW50IgorSG93ZXZlciwgaWYgeW91IGZvbGxvdyB0aGUgSmF2YSBndWlkZWxpbmVzIGFib3V0IGhvdyBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYXJlCitzdXBwb3NlZCB0byBiZSBuYW1lZCAod2l0aCByZXNwZWN0IHRvIHVwcGVyIGFuZCBsb3dlcmNhc2UpLCB1c2UgPgorCTpsZXQgamF2YV9oaWdobGlnaHRfZnVuY3Rpb25zPSJzdHlsZSIKK0lmIGJvdGggb3B0aW9ucyBkbyBub3Qgd29yayBmb3IgeW91LCBidXQgeW91IHdvdWxkIHN0aWxsIHdhbnQgZnVuY3Rpb24KK2RlY2xhcmF0aW9ucyB0byBiZSBoaWdobGlnaHRlZCBjcmVhdGUgeW91ciBvd24gZGVmaW5pdGlvbnMgYnkgY2hhbmdpbmcgdGhlCitkZWZpbml0aW9ucyBpbiBqYXZhLnZpbSBvciBieSBjcmVhdGluZyB5b3VyIG93biBqYXZhLnZpbSB3aGljaCBpbmNsdWRlcyB0aGUKK29yaWdpbmFsIG9uZSBhbmQgdGhlbiBhZGRzIHRoZSBjb2RlIHRvIGhpZ2hsaWdodCBmdW5jdGlvbnMuCisKK0luIGphdmEgMS4xIHRoZSBmdW5jdGlvbnMgU3lzdGVtLm91dC5wcmludGxuKCkgYW5kIFN5c3RlbS5lcnIucHJpbnRsbigpIHNob3VsZAorb25seSBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcuIFRoZXJlZm9yIGl0IGlzIHBvc3NpYmxlIHRvIGhpZ2hsaWdodCBkZWJ1Z2dpbmcKK3N0YXRlbWVudHMgZGlmZmVyZW50bHkuIFRvIGRvIHRoaXMgeW91IG11c3QgYWRkIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBpbgoreW91ciBzdGFydHVwIGZpbGU6ID4KKwk6bGV0IGphdmFfaGlnaGxpZ2h0X2RlYnVnPTEKK1RoZSByZXN1bHQgd2lsbCBiZSB0aGF0IHRob3NlIHN0YXRlbWVudHMgYXJlIGhpZ2hsaWdodGVkIGFzICdTcGVjaWFsJworY2hhcmFjdGVycy4gSWYgeW91IHByZWZlciB0byBoYXZlIHRoZW0gaGlnaGxpZ2h0ZWQgZGlmZmVyZW50bHkgeW91IG11c3QgZGVmaW5lCituZXcgaGlnaGxpZ2h0aW5ncyBmb3IgdGhlIGZvbGxvd2luZyBncm91cHMuOgorICAgIERlYnVnLCBEZWJ1Z1NwZWNpYWwsIERlYnVnU3RyaW5nLCBEZWJ1Z0Jvb2xlYW4sIERlYnVnVHlwZQord2hpY2ggYXJlIHVzZWQgZm9yIHRoZSBzdGF0ZW1lbnQgaXRzZWxmLCBzcGVjaWFsIGNoYXJhY3RlcnMgdXNlZCBpbiBkZWJ1Zworc3RyaW5ncywgc3RyaW5ncywgYm9vbGVhbiBjb25zdGFudHMgYW5kIHR5cGVzICh0aGlzLCBzdXBlcikgcmVzcGVjdGl2ZWx5LiBJCitoYXZlIG9wdGVkIHRvIGNob3NlIGFub3RoZXIgYmFja2dyb3VuZCBmb3IgdGhvc2Ugc3RhdGVtZW50cy4KKworSW4gb3JkZXIgdG8gaGVscCB5b3UgdG8gd3JpdGUgY29kZSB0aGF0IGNhbiBiZSBlYXNpbHkgcG9ydGVkIGJldHdlZW4KK2phdmEgYW5kIEMrKywgYWxsIEMrKyBrZXl3b3JkcyBhcmUgbWFya2VkIGFzIGVycm9yIGluIGEgamF2YSBwcm9ncmFtLgorSG93ZXZlciwgaWYgeW91IHVzZSB0aGVtIHJlZ3VsYXJseSwgeW91IG1heSB3YW50IHRvIGRlZmluZSB0aGUgZm9sbG93aW5nCit2YXJpYWJsZSBpbiB5b3VyIC52aW1yYyBmaWxlOiA+CisJOmxldCBqYXZhX2FsbG93X2NwcF9rZXl3b3Jkcz0xCisKK0phdmFkb2MgaXMgYSBwcm9ncmFtIHRoYXQgdGFrZXMgc3BlY2lhbCBjb21tZW50cyBvdXQgb2YgamF2YSBwcm9ncmFtIGZpbGVzIGFuZAorY3JlYXRlcyBIVE1MIHBhZ2VzLiBUaGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiB3aWxsIGhpZ2hsaWdodCB0aGlzIEhUTUwgY29kZQorc2ltaWxhcmx5IHRvIEhUTUwgZmlsZXMgKHNlZSB8aHRtbC52aW18KS4gWW91IGNhbiBldmVuIGFkZCBqYXZhc2NyaXB0CithbmQgQ1NTIGluc2lkZSB0aGlzIGNvZGUgKHNlZSBiZWxvdykuIFRoZXJlIGFyZSBmb3VyIGRpZmZlcmVuY2VzIGhvd2V2ZXI6CisgIDEuIFRoZSB0aXRsZSAoYWxsIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGZpcnN0ICcuJyB3aGljaCBpcyBmb2xsb3dlZCBieQorICAgICBzb21lIHdoaXRlIHNwYWNlIG9yIHVwIHRvIHRoZSBmaXJzdCAnQCcpIGlzIGNvbG9yZWQgZGlmZmVyZW50bHkgKHRvIGNoYW5nZQorICAgICB0aGUgY29sb3IgY2hhbmdlIHRoZSBncm91cCBDb21tZW50VGl0bGUpLgorICAyLiBUaGUgdGV4dCBpcyBjb2xvcmVkIGFzICdDb21tZW50Jy4KKyAgMy4gSFRNTCBjb21tZW50cyBhcmUgY29sb3JlZCBhcyAnU3BlY2lhbCcKKyAgNC4gVGhlIHNwZWNpYWwgamF2YWRvYyB0YWdzIChAc2VlLCBAcGFyYW0sIC4uLikgYXJlIGhpZ2hsaWdodGVkIGFzIHNwZWNpYWxzCisgICAgIGFuZCB0aGUgYXJndW1lbnQgKGZvciBAc2VlLCBAcGFyYW0sIEBleGNlcHRpb24pIGFzIEZ1bmN0aW9uLgorVG8gdHVybiB0aGlzIGZlYXR1cmUgb2ZmIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciBzdGFydHVwIGZpbGU6ID4KKwk6bGV0IGphdmFfaWdub3JlX2phdmFkb2M9MQorCitJZiB5b3UgdXNlIHRoZSBzcGVjaWFsIGphdmFkb2MgY29tbWVudCBoaWdobGlnaHRpbmcgZGVzY3JpYmVkIGFib3ZlIHlvdQorY2FuIGFsc28gdHVybiBvbiBzcGVjaWFsIGhpZ2hsaWdodGluZyBmb3IgamF2YXNjcmlwdCwgdmlzdWFsIGJhc2ljCitzY3JpcHRzIGFuZCBlbWJlZGRlZCBDU1MgKHN0eWxlc2hlZXRzKS4gVGhpcyBtYWtlcyBvbmx5IHNlbnNlIGlmIHlvdQorYWN0dWFsbHkgaGF2ZSBqYXZhZG9jIGNvbW1lbnRzIHRoYXQgaW5jbHVkZSBlaXRoZXIgamF2YXNjcmlwdCBvciBlbWJlZGRlZAorQ1NTLiBUaGUgb3B0aW9ucyB0byB1c2UgYXJlID4KKwk6bGV0IGphdmFfamF2YXNjcmlwdD0xCisJOmxldCBqYXZhX2Nzcz0xCisJOmxldCBqYXZhX3ZiPTEKKworSW4gb3JkZXIgdG8gaGlnaGxpZ2h0IG5lc3RlZCBwYXJlbnMgd2l0aCBkaWZmZXJlbnQgY29sb3JzIGRlZmluZSBjb2xvcnMKK2ZvciBqYXZhUGFyZW4sIGphdmFQYXJlbjEgYW5kIGphdmFQYXJlbjIsIGZvciBleGFtcGxlIHdpdGggPgorCTpoaSBsaW5rIGphdmFQYXJlbiBDb21tZW50CitvciA+CisJOmhpIGphdmFQYXJlbiBjdGVybWZnPWJsdWUgZ3VpZmc9IzAwMDBmZgorCitJZiB5b3Ugbm90aWNlIGhpZ2hsaWdodGluZyBlcnJvcnMgd2hpbGUgc2Nyb2xsaW5nIGJhY2t3YXJkcywgd2hpY2ggYXJlIGZpeGVkCit3aGVuIHJlZHJhd2luZyB3aXRoIENUUkwtTCwgdHJ5IHNldHRpbmcgdGhlICJqYXZhX21pbmxpbmVzIiBpbnRlcm5hbCB2YXJpYWJsZQordG8gYSBsYXJnZXIgbnVtYmVyOiA+CisJOmxldCBqYXZhX21pbmxpbmVzID0gNTAKK1RoaXMgd2lsbCBtYWtlIHRoZSBzeW50YXggc3luY2hyb25pemF0aW9uIHN0YXJ0IDUwIGxpbmVzIGJlZm9yZSB0aGUgZmlyc3QKK2Rpc3BsYXllZCBsaW5lLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuICBUaGUgZGlzYWR2YW50YWdlIG9mIHVzaW5nIGEgbGFyZ2VyCitudW1iZXIgaXMgdGhhdCByZWRyYXdpbmcgY2FuIGJlY29tZSBzbG93LgorCisKK0xBQ0UJCQkJCQkqbGFjZS52aW0qICpsYWNlLXN5bnRheCoKKworTGFjZSAoTGFuZ3VhZ2UgZm9yIEFzc2VtYmx5IG9mIENsYXNzZXMgaW4gRWlmZmVsKSBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgdGhlCitzdHlsZSBndWlkZSBsaW5lcyBhcmUgbm90LiAgSWYgeW91IHByZWZlciBjYXNlIGluc2Vuc2l0aXZlIGhpZ2hsaWdodGluZywganVzdAorZGVmaW5lIHRoZSB2aW0gdmFyaWFibGUgJ2xhY2VfY2FzZV9pbnNlbnNpdGl2ZScgaW4geW91ciBzdGFydHVwIGZpbGU6ID4KKwk6bGV0IGxhY2VfY2FzZV9pbnNlbnNpdGl2ZT0xCisKKworTEVYCQkJCQkJKmxleC52aW0qICpsZXgtc3ludGF4KgorCitMZXggdXNlcyBicnV0ZS1mb3JjZSBzeW5jaHJvbml6aW5nIGFzIHRoZSAiXiUlJCIgc2VjdGlvbiBkZWxpbWl0ZXIKK2dpdmVzIG5vIGNsdWUgYXMgdG8gd2hhdCBzZWN0aW9uIGZvbGxvd3MuICBDb25zZXF1ZW50bHksIHRoZSB2YWx1ZSBmb3IgPgorCTpzeW4gc3luYyBtaW5saW5lcz0zMDAKK21heSBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyIGlmIHMvaGUgaXMgZXhwZXJpZW5jaW5nIHN5bmNocm9uaXphdGlvbgorZGlmZmljdWx0aWVzIChzdWNoIGFzIG1heSBoYXBwZW4gd2l0aCBsYXJnZSBsZXggZmlsZXMpLgorCisKK0xJVEUJCQkJCQkqbGl0ZS52aW0qICpsaXRlLXN5bnRheCoKKworVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciB0aGUgbGl0ZSBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitJZiB5b3UgbGlrZSBTUUwgc3ludGF4IGhpZ2hsaWdodGluZyBpbnNpZGUgU3RyaW5ncywgdXNlIHRoaXM6ID4KKworCTpsZXQgbGl0ZV9zcWxfcXVlcnkgPSAxCisKK0ZvciBzeW5jaW5nLCBtaW5saW5lcyBkZWZhdWx0cyB0byAxMDAuCUlmIHlvdSBwcmVmZXIgYW5vdGhlciB2YWx1ZSwgeW91IGNhbgorc2V0ICJsaXRlX21pbmxpbmVzIiB0byB0aGUgdmFsdWUgeW91IGRlc2lyZS4gIEV4YW1wbGU6ID4KKworCTpsZXQgbGl0ZV9taW5saW5lcyA9IDIwMAorCisKK0xQQwkJCQkJCSpscGMudmltKiAqbHBjLXN5bnRheCoKKworTFBDIHN0YW5kcyBmb3IgYSBzaW1wbGUsIG1lbW9yeS1lZmZpY2llbnQgbGFuZ3VhZ2U6IExhcnMgUGVuc2p8IEMuIFRoZQorZmlsZSBuYW1lIG9mIExQQyBpcyB1c3VhbGx5ICouYy4gIFJlY29nbml6aW5nIHRoZXNlIGZpbGVzIGFzIExQQyB3b3VsZCBib3RoZXIKK3VzZXJzIHdyaXRpbmcgb25seSBDIHByb2dyYW1zLglJZiB5b3Ugd2FudCB0byB1c2UgTFBDIHN5bnRheCBpbiBWaW0sIHlvdQorc2hvdWxkIHNldCBhIHZhcmlhYmxlIGluIHlvdXIgLnZpbXJjIGZpbGU6ID4KKworCTpsZXQgbHBjX3N5bnRheF9mb3JfYyA9IDEKKworSWYgaXQgZG9lc24ndCB3b3JrIHByb3Blcmx5IGZvciBzb21lIHBhcnRpY3VsYXIgQyBvciBMUEMgZmlsZXMsIHVzZSBhCittb2RlbGluZS4gIEZvciBhIExQQyBmaWxlOgorCisJLy8gdmltOnNldCBmdD1scGM6CisKK0ZvciBhIEMgZmlsZSB0aGF0IGlzIHJlY29nbml6ZWQgYXMgTFBDOgorCisJLy8gdmltOnNldCBmdD1jOgorCitJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgdGhlIHZhcmlhYmxlLCB1c2UgdGhlIG1vZGVsaW5lIGluIEVWRVJZIExQQyBmaWxlLgorCitUaGVyZSBhcmUgc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbnMgZm9yIExQQywgd2UgaW50ZW5kIHRvIHN1cHBvcnQgbW9zdCB3aWRlbHkKK3VzZWQgb25lcy4gSGVyZSB0aGUgZGVmYXVsdCBMUEMgc3ludGF4IGlzIGZvciBNdWRPUyBzZXJpZXMsIGZvciBNdWRPUyB2MjIKK2FuZCBiZWZvcmUsIHlvdSBzaG91bGQgdHVybiBvZmYgdGhlIHNlbnNpYmxlIG1vZGlmaWVycywgYW5kIHRoaXMgd2lsbCBhbHNvCithc3NlcnRzIHRoZSBuZXcgZWZ1bnMgYWZ0ZXIgdjIyIHRvIGJlIGludmFsaWQsIGRvbid0IHNldCB0aGlzIHZhcmlhYmxlIHdoZW4KK3lvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE11ZE9TOiA+CisKKwk6bGV0IGxwY19wcmVfdjIyID0gMQorCitGb3IgTHBNdWQgMy4yIHNlcmllcyBvZiBMUEM6ID4KKworCTpsZXQgbHBjX2NvbXBhdF8zMiA9IDEKKworRm9yIExQQzQgc2VyaWVzIG9mIExQQzogPgorCisJOmxldCBscGNfdXNlX2xwYzRfc3ludGF4ID0gMQorCitGb3IgdUxQQyBzZXJpZXMgb2YgTFBDOgordUxQQyBoYXMgYmVlbiBkZXZlbG9wZWQgdG8gUGlrZSwgc28geW91IHNob3VsZCB1c2UgUGlrZSBzeW50YXgKK2luc3RlYWQsIGFuZCB0aGUgbmFtZSBvZiB5b3VyIHNvdXJjZSBmaWxlIHNob3VsZCBiZSAqLnBpa2UKKworCitMVUEJCQkJCQkqbHVhLnZpbSogKmx1YS1zeW50YXgqCisKK1RoaXMgc3ludGF4IGZpbGUgbWF5IGJlIHVzZWQgZm9yIEx1YSA0LjAgYW5kIEx1YSA1LjAgKGRlZmF1bHQpLiBJZiB5b3UgYXJlCitwcm9ncmFtbWluZyBpbiBMdWEgNC4wLCB1c2UgdGhpczogPgorCisJOmxldCBsdWFfdmVyc2lvbiA9IDQKKworSWYgbHVhX3ZlcnNpb24gdmFyaWFibGUgZG9lc24ndCBleGlzdCwgaXQgaXMgc2V0IHRvIDUuCisKKworTUFJTAkJCQkJCQkJKm1haWwudmltKgorCitWaW0gaGlnaGxpZ2h0cyBhbGwgdGhlIHN0YW5kYXJkIGVsZW1lbnRzIG9mIGFuIGVtYWlsIChoZWFkZXJzLCBzaWduYXR1cmVzLAorcXVvdGVkIHRleHQgYW5kIFVSTHMgLyBlbWFpbCBhZGRyZXNzZXMpLiBJbiBrZWVwaW5nIHdpdGggc3RhbmRhcmQgY29udmVudGlvbnMsCitzaWduYXR1cmVzIGJlZ2luIGluIGEgbGluZSBjb250YWluaW5nIG9ubHkgIi0tIiBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5Cit3aGl0ZXNwYWNlcyBhbmQgZW5kIHdpdGggYSBuZXdsaW5lLgorCitWaW0gdHJlYXRzIGxpbmVzIGJlZ2lubmluZyB3aXRoICddJywgJ30nLCAnfCcsICc+JyBvciBhIHdvcmQgZm9sbG93ZWQgYnkgJz4nCithcyBxdW90ZWQgdGV4dC4gSG93ZXZlciBWaW0gaGlnaGxpZ2h0cyBoZWFkZXJzIGFuZCBzaWduYXR1cmVzIGluIHF1b3RlZCB0ZXh0Citvbmx5IGlmIHRoZSB0ZXh0IGlzIHF1b3RlZCB3aXRoICc+JyAob3B0aW9uYWxseSBmb2xsb3dlZCBieSBvbmUgc3BhY2UpLgorCitCeSBkZWZhdWx0IG1haWwudmltIHN5bmNocm9uaXNlcyBzeW50YXggdG8gMTAwIGxpbmVzIGJlZm9yZSB0aGUgZmlyc3QKK2Rpc3BsYXllZCBsaW5lLiBJZiB5b3UgaGF2ZSBhIHNsb3cgbWFjaGluZSwgYW5kIGdlbmVyYWxseSBkZWFsIHdpdGggZW1haWxzCit3aXRoIHNob3J0IGhlYWRlcnMsIHlvdSBjYW4gY2hhbmdlIHRoaXMgdG8gYSBzbWFsbGVyIHZhbHVlOiA+CisKKyAgICA6bGV0IG1haWxfbWlubGluZXMgPSAzMAorCisKK01BS0UJCQkJCQkqbWFrZS52aW0qICptYWtlLXN5bnRheCoKKworSW4gbWFrZWZpbGVzLCBjb21tYW5kcyBhcmUgdXN1YWxseSBoaWdobGlnaHRlZCB0byBtYWtlIGl0IGVhc3kgZm9yIHlvdSB0byBzcG90CitlcnJvcnMuICBIb3dldmVyLCB0aGlzIG1heSBiZSB0b28gbXVjaCBjb2xvcmluZyBmb3IgeW91LiAgWW91IGNhbiB0dXJuIHRoaXMKK2ZlYXR1cmUgb2ZmIGJ5IHVzaW5nOiA+CisKKwk6bGV0IG1ha2Vfbm9fY29tbWFuZHMgPSAxCisKKworTUFQTEUJCQkJCQkqbWFwbGUudmltKiAqbWFwbGUtc3ludGF4KgorCitNYXBsZSBWLCBieSBXYXRlcmxvbyBNYXBsZSBJbmMsIHN1cHBvcnRzIHN5bWJvbGljIGFsZ2VicmEuICBUaGUgbGFuZ3VhZ2UKK3N1cHBvcnRzIG1hbnkgcGFja2FnZXMgb2YgZnVuY3Rpb25zIHdoaWNoIGFyZSBzZWxlY3RpdmVseSBsb2FkZWQgYnkgdGhlIHVzZXIuCitUaGUgc3RhbmRhcmQgc2V0IG9mIHBhY2thZ2VzJyBmdW5jdGlvbnMgYXMgc3VwcGxpZWQgaW4gTWFwbGUgViByZWxlYXNlIDQgbWF5IGJlCitoaWdobGlnaHRlZCBhdCB0aGUgdXNlcidzIGRpc2NyZXRpb24uICBVc2VycyBtYXkgcGxhY2UgaW4gdGhlaXIgLnZpbXJjIGZpbGU6ID4KKworCTpsZXQgbXZwa2dfYWxsPSAxCisKK3RvIGdldCBhbGwgcGFja2FnZSBmdW5jdGlvbnMgaGlnaGxpZ2h0ZWQsIG9yIHVzZXJzIG1heSBzZWxlY3QgYW55IHN1YnNldCBieQorY2hvb3NpbmcgYSB2YXJpYWJsZS9wYWNrYWdlIGZyb20gdGhlIHRhYmxlIGJlbG93IGFuZCBzZXR0aW5nIHRoYXQgdmFyaWFibGUgdG8KKzEsIGFsc28gaW4gdGhlaXIgLnZpbXJjIGZpbGUgKHByaW9yIHRvIHNvdXJjaW5nCiskVklNUlVOVElNRS9zeW50YXgvc3ludGF4LnZpbSkuCisKKwlUYWJsZSBvZiBNYXBsZSBWIFBhY2thZ2UgRnVuY3Rpb24gU2VsZWN0b3JzID4KKyAgbXZfREV0b29scwkgbXZfZ2VuZnVuYwltdl9uZXR3b3Jrcwltdl9wcm9jZXNzCisgIG12X0dhbG9pcwkgbXZfZ2VvbWV0cnkJbXZfbnVtYXBwcm94CW12X3NpbXBsZXgKKyAgbXZfR2F1c3NJbnQJIG12X2dyb2JuZXIJbXZfbnVtdGhlb3J5CW12X3N0YXRzCisgIG12X0xSRXRvb2xzCSBtdl9ncm91cAltdl9vcnRob3BvbHkJbXZfc3R1ZGVudAorICBtdl9jb21iaW5hdAkgbXZfaW50dHJhbnMJbXZfcGFkaWMJbXZfc3VtdG9vbHMKKyAgbXZfY29tYnN0cnVjdCBtdl9saWVzeW1tCW12X3Bsb3RzCW12X3RlbnNvcgorICBtdl9kaWZmb3JtcwkgbXZfbGluYWxnCW12X3Bsb3R0b29scwltdl90b3RvcmRlcgorICBtdl9maW5hbmNlCSBtdl9sb2dpYwltdl9wb3dzZXJpZXMKKworCitNT08JCQkJCQkqbW9vLnZpbSogKm1vby1zeW50YXgqCisKK0lmIHlvdSB1c2UgQy1zdHlsZSBjb21tZW50cyBpbnNpZGUgZXhwcmVzc2lvbnMgYW5kIGZpbmQgaXQgbWFuZ2xlcyB5b3VyCitoaWdobGlnaHRpbmcsIHlvdSBtYXkgd2FudCB0byB1c2UgZXh0ZW5kZWQgKHNsb3chKSBtYXRjaGVzIGZvciBDLXN0eWxlCitjb21tZW50czogPgorCisJOmxldCBtb29fZXh0ZW5kZWRfY3N0eWxlX2NvbW1lbnRzID0gMQorCitUbyBkaXNhYmxlIGhpZ2hsaWdodGluZyBvZiBwcm9ub3VuIHN1YnN0aXR1dGlvbiBwYXR0ZXJucyBpbnNpZGUgc3RyaW5nczogPgorCisJOmxldCBtb29fbm9fcHJvbm91bl9zdWIgPSAxCisKK1RvIGRpc2FibGUgaGlnaGxpZ2h0aW5nIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gb3BlcmF0b3IgJyV8JywgYW5kIG1hdGNoaW5nCisnJSgnIGFuZCAnJSknIGluc2lkZSBzdHJpbmdzOiA+CisKKwk6bGV0IG1vb19ub19yZWdleHAgPSAxCisKK1VubWF0Y2hlZCBkb3VibGUgcXVvdGVzIGNhbiBiZSByZWNvZ25pemVkIGFuZCBoaWdobGlnaHRlZCBhcyBlcnJvcnM6ID4KKworCTpsZXQgbW9vX3VubWF0Y2hlZF9xdW90ZXMgPSAxCisKK1RvIGhpZ2hsaWdodCBidWlsdGluIHByb3BlcnRpZXMgKC5uYW1lLCAubG9jYXRpb24sIC5wcm9ncmFtbWVyIGV0Yy4pOiA+CisKKwk6bGV0IG1vb19idWlsdGluX3Byb3BlcnRpZXMgPSAxCisKK1Vua25vd24gYnVpbHRpbiBmdW5jdGlvbnMgY2FuIGJlIHJlY29nbml6ZWQgYW5kIGhpZ2hsaWdodGVkIGFzIGVycm9ycy4gSWYgeW91Cit1c2UgdGhpcyBvcHRpb24sIGFkZCB5b3VyIG93biBleHRlbnNpb25zIHRvIHRoZSBtb29Lbm93bkJ1aWx0aW5GdW5jdGlvbiBncm91cC4KK1RvIGVuYWJsZSB0aGlzIG9wdGlvbjogPgorCisJOmxldCBtb29fdW5rbm93bl9idWlsdGluX2Z1bmN0aW9ucyA9IDEKKworQW4gZXhhbXBsZSBvZiBhZGRpbmcgc3ByaW50ZigpIHRvIHRoZSBsaXN0IG9mIGtub3duIGJ1aWx0aW4gZnVuY3Rpb25zOiA+CisKKwk6c3luIGtleXdvcmQgbW9vS25vd25CdWlsdGluRnVuY3Rpb24gc3ByaW50ZiBjb250YWluZWQKKworCitNU1FMCQkJCQkJKm1zcWwudmltKiAqbXNxbC1zeW50YXgqCisKK1RoZXJlIGFyZSB0d28gb3B0aW9ucyBmb3IgdGhlIG1zcWwgc3ludGF4IGhpZ2hsaWdodGluZy4KKworSWYgeW91IGxpa2UgU1FMIHN5bnRheCBoaWdobGlnaHRpbmcgaW5zaWRlIFN0cmluZ3MsIHVzZSB0aGlzOiA+CisKKwk6bGV0IG1zcWxfc3FsX3F1ZXJ5ID0gMQorCitGb3Igc3luY2luZywgbWlubGluZXMgZGVmYXVsdHMgdG8gMTAwLglJZiB5b3UgcHJlZmVyIGFub3RoZXIgdmFsdWUsIHlvdSBjYW4KK3NldCAibXNxbF9taW5saW5lcyIgdG8gdGhlIHZhbHVlIHlvdSBkZXNpcmUuICBFeGFtcGxlOiA+CisKKwk6bGV0IG1zcWxfbWlubGluZXMgPSAyMDAKKworCitOQ0YJCQkJCQkqbmNmLnZpbSogKm5jZi1zeW50YXgqCisKK1RoZXJlIGlzIG9uZSBvcHRpb24gZm9yIE5DRiBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitJZiB5b3Ugd2FudCB0byBoYXZlIHVucmVjb2duaXplZCAoYnkgbmNmLnZpbSkgc3RhdGVtZW50cyBoaWdobGlnaHRlZCBhcworZXJyb3JzLCB1c2UgdGhpczogPgorCisJOmxldCBuY2ZfaGlnaGxpZ2h0X3Vua25vd25zID0gMQorCitJZiB5b3UgZG9uJ3Qgd2FudCB0byBoaWdobGlnaHQgdGhlc2UgZXJyb3JzLCBsZWF2ZSBpdCB1bnNldC4KKworCitOUk9GRgkJCQkJCSpucm9mZi52aW0qICpucm9mZi1zeW50YXgqCisKK1RoZSBucm9mZiBzeW50YXggZmlsZSB3b3JrcyB3aXRoIEFUJlQgbi90cm9mZiBvdXQgb2YgdGhlIGJveC4gIFlvdSBuZWVkIHRvCithY3RpdmF0ZSB0aGUgR05VIGdyb2ZmIGV4dHJhIGZlYXR1cmVzIGluY2x1ZGVkIGluIHRoZSBzeW50YXggZmlsZSBiZWZvcmUgeW91CitjYW4gdXNlIHRoZW0uCisKK0ZvciBleGFtcGxlLCBMaW51eCBhbmQgQlNEIGRpc3RyaWJ1dGlvbnMgdXNlIGdyb2ZmIGFzIHRoZWlyIGRlZmF1bHQgdGV4dAorcHJvY2Vzc2luZyBwYWNrYWdlLiBJbiBvcmRlciB0byBhY3RpdmF0ZSB0aGUgZXh0cmEgc3ludGF4IGhpZ2hsaWdodGluZworZmVhdHVyZXMgZm9yIGdyb2ZmLCBhZGQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8geW91ciBzdGFydC11cCBmaWxlczogPgorCisgIDpsZXQgYjpucm9mZl9pc19ncm9mZiA9IDEKKworR3JvZmYgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBBVCZUIG4vdHJvZmYgdGhhdCB5b3UgbWF5IHN0aWxsIGZpbmQgaW4KK1NvbGFyaXMuICBHcm9mZiBtYWNybyBhbmQgcmVxdWVzdCBuYW1lcyBjYW4gYmUgbG9uZ2VyIHRoYW4gMiBjaGFyYWN0ZXJzIGFuZAordGhlcmUgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIGxhbmd1YWdlIHByaW1pdGl2ZXMuICBGb3IgZXhhbXBsZSwgaW4gQVQmVCB0cm9mZgoreW91IGFjY2VzcyB0aGUgeWVhciBhcyBhIDItZGlnaXQgbnVtYmVyIHdpdGggdGhlIHJlcXVlc3QgXCh5ci4gSW4gZ3JvZmYgeW91CitjYW4gdXNlIHRoZSBzYW1lIHJlcXVlc3QsIHJlY29nbml6ZWQgZm9yIGNvbXBhdGliaWxpdHksIG9yIHlvdSBjYW4gdXNlIGdyb2ZmJ3MKK25hdGl2ZSBzeW50YXgsIFxbeXJdLiAgRnVydGhlcm1vcmUsIHlvdSBjYW4gdXNlIGEgNC1kaWdpdCB5ZWFyIGRpcmVjdGx5OgorXFt5ZWFyXS4gIE1hY3JvIHJlcXVlc3RzIGNhbiBiZSBsb25nZXIgdGhhbiAyIGNoYXJhY3RlcnMsIGZvciBleGFtcGxlLCBHTlUgbW0KK2FjY2VwdHMgdGhlIHJlcXVlc3RzICIuVkVSQk9OIiBhbmQgIi5WRVJCT0ZGIiBmb3IgY3JlYXRpbmcgdmVyYmF0aW0KK2Vudmlyb25tZW50cy4KKworSW4gb3JkZXIgdG8gb2J0YWluIHRoZSBiZXN0IGZvcm1hdHRlZCBvdXRwdXQgZy90cm9mZiBjYW4gZ2l2ZSB5b3UsIHlvdSBzaG91bGQKK2ZvbGxvdyBhIGZldyBzaW1wbGUgcnVsZXMgYWJvdXQgc3BhY2luZyBhbmQgcHVuY3R1YXRpb24uCisKKzEuIERvIG5vdCBsZWF2ZSBlbXB0eSBzcGFjZXMgYXQgdGhlIGVuZCBvZiBsaW5lcy4KKworMi4gTGVhdmUgb25lIHNwYWNlIGFuZCBvbmUgc3BhY2Ugb25seSBhZnRlciBhbiBlbmQtb2Ytc2VudGVuY2UgcGVyaW9kLAorICAgZXhjbGFtYXRpb24gbWFyaywgZXRjLgorCiszLiBGb3IgcmVhc29ucyBzdGF0ZWQgYmVsb3csIGl0IGlzIGJlc3QgdG8gZm9sbG93IGFsbCBwZXJpb2QgbWFya3Mgd2l0aCBhCisgICBjYXJyaWFnZSByZXR1cm4uCisKK1RoZSByZWFzb24gYmVoaW5kIHRoZXNlIHVudXN1YWwgdGlwcyBpcyB0aGF0IGcvbi90cm9mZiBoYXZlIGEgbGluZSBicmVha2luZworYWxnb3JpdGhtIHRoYXQgY2FuIGJlIGVhc2lseSB1cHNldCBpZiB5b3UgZG9uJ3QgZm9sbG93IHRoZSBydWxlcyBnaXZlbiBhYm92ZS4KKworVW5saWtlIFRlWCwgdHJvZmYgZmlsbHMgdGV4dCBsaW5lLWJ5LWxpbmUsIG5vdCBwYXJhZ3JhcGgtYnktcGFyYWdyYXBoIGFuZCwKK2Z1cnRoZXJtb3JlLCBpdCBkb2VzIG5vdCBoYXZlIGEgY29uY2VwdCBvZiBnbHVlIG9yIHN0cmV0Y2gsIGFsbCBob3Jpem9udGFsIGFuZAordmVydGljYWwgc3BhY2UgaW5wdXQgd2lsbCBiZSBvdXRwdXQgYXMgaXMuCisKK1RoZXJlZm9yZSwgeW91IHNob3VsZCBiZSBjYXJlZnVsIGFib3V0IG5vdCB1c2luZyBtb3JlIHNwYWNlIGJldHdlZW4gc2VudGVuY2VzCit0aGFuIHlvdSBpbnRlbmQgdG8gaGF2ZSBpbiB5b3VyIGZpbmFsIGRvY3VtZW50LiAgRm9yIHRoaXMgcmVhc29uLCB0aGUgY29tbW9uCitwcmFjdGljZSBpcyB0byBpbnNlcnQgYSBjYXJyaWFnZSByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIHB1bmN0dWF0aW9uCittYXJrcy4gSWYgeW91IHdhbnQgdG8gaGF2ZSAiZXZlbiIgdGV4dCBpbiB5b3VyIGZpbmFsIHByb2Nlc3NlZCBvdXRwdXQsIHlvdQorbmVlZCB0byBtYWludGFpbmluZyByZWd1bGFyIHNwYWNpbmcgaW4gdGhlIGlucHV0IHRleHQuICBUbyBtYXJrIGJvdGggdHJhaWxpbmcKK3NwYWNlcyBhbmQgdHdvIG9yIG1vcmUgc3BhY2VzIGFmdGVyIGEgcHVuY3R1YXRpb24gYXMgYW4gZXJyb3IsIHVzZTogPgorCisgIDpsZXQgbnJvZmZfc3BhY2VfZXJyb3JzID0gMQorCitBbm90aGVyIHRlY2huaXF1ZSB0byBkZXRlY3QgZXh0cmEgc3BhY2luZyBhbmQgb3RoZXIgZXJyb3JzIHRoYXQgd2lsbCBpbnRlcmZlcmUKK3dpdGggdGhlIGNvcnJlY3QgdHlwZXNldHRpbmcgb2YgeW91ciBmaWxlLCBpcyB0byBkZWZpbmUgYW4gZXllLWNhdGNoaW5nCitoaWdobGlnaHRpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIHN5bnRheCBncm91cHMgIm5yb2ZmRGVmaW5pdGlvbiIgYW5kCisibnJvZmZEZWZTcGVjaWFsIiBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEZvciBleGFtcGxlOiA+CisKKyAgaGkgZGVmIG5yb2ZmRGVmaW5pdGlvbiB0ZXJtPWl0YWxpYyBjdGVybT1pdGFsaWMgZ3VpPXJldmVyc2UKKyAgaGkgZGVmIG5yb2ZmRGVmU3BlY2lhbCB0ZXJtPWl0YWxpYyxib2xkIGN0ZXJtPWl0YWxpYyxib2xkCisJCQkgXCBndWk9cmV2ZXJzZSxib2xkCisKK0lmIHlvdSB3YW50IHRvIG5hdmlnYXRlIHByZXByb2Nlc3NvciBlbnRyaWVzIGluIHlvdXIgc291cmNlIGZpbGUgYXMgZWFzaWx5IGFzCit3aXRoIHNlY3Rpb24gbWFya2VycywgeW91IGNhbiBhY3RpdmF0ZSB0aGUgZm9sbG93aW5nIG9wdGlvbiBpbiB5b3VyIC52aW1yYworZmlsZTogPgorCisJbGV0IGI6cHJlcHJvY3NfYXNfc2VjdGlvbnMgPSAxCisKK0FzIHdlbGwsIHRoZSBzeW50YXggZmlsZSBhZGRzIGFuIGV4dHJhIHBhcmFncmFwaCBtYXJrZXIgZm9yIHRoZSBleGRlbnRlZAorcGFyYWdyYXBoIG1hY3JvICguWFApIGluIHRoZSBtcyBwYWNrYWdlLgorCitGaW5hbGx5LCB0aGVyZSBpcyBhIHxncm9mZi52aW18IHN5bnRheCBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGVuYWJsaW5nCitncm9mZiBzeW50YXggaGlnaGxpZ2h0aW5nIGVpdGhlciBvbiBhIGZpbGUgYmFzaXMgb3IgZ2xvYmFsbHkgYnkgZGVmYXVsdC4KKworCitPQ0FNTAkJCQkJCSpvY2FtbC52aW0qICpvY2FtbC1zeW50YXgqCisKK1RoZSBPQ2FtbCBzeW50YXggZmlsZSBoYW5kbGVzIGZpbGVzIGhhdmluZyB0aGUgZm9sbG93aW5nIHByZWZpeGVzOiAubWwsCisubWxpLCAubWxsIGFuZCAubWx5LiAgQnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlID4KKworCTpsZXQgb2NhbWxfcmV2aXNlZCA9IDEKKworeW91IGNhbiBzd2l0Y2ggZnJvbSBzdGFuZGFyZCBPQ2FtbC1zeW50YXggdG8gcmV2aXNlZCBzeW50YXggYXMgc3VwcG9ydGVkCitieSB0aGUgY2FtbHA0IHByZXByb2Nlc3Nvci4gIFNldHRpbmcgdGhlIHZhcmlhYmxlID4KKworCTpsZXQgb2NhbWxfbm9lbmRfZXJyb3IgPSAxCisKK3ByZXZlbnRzIGhpZ2hsaWdodGluZyBvZiAiZW5kIiBhcyBlcnJvciwgd2hpY2ggaXMgdXNlZnVsIHdoZW4gc291cmNlcworY29udGFpbiB2ZXJ5IGxvbmcgc3RydWN0dXJlcyB0aGF0IFZpbSBkb2VzIG5vdCBzeW5jaHJvbml6ZSBhbnltb3JlLgorCisKK1BBUFAJCQkJCQkqcGFwcC52aW0qICpwYXBwLXN5bnRheCoKKworVGhlIFBBcHAgc3ludGF4IGZpbGUgaGFuZGxlcyAucGFwcCBmaWxlcyBhbmQsIHRvIGEgbGVzc2VyIGV4dGVuZCwgLnB4bWwKK2FuZCAucHhzbCBmaWxlcyB3aGljaCBhcmUgYWxsIGEgbWl4dHVyZSBvZiBwZXJsL3htbC9odG1sL290aGVyIHVzaW5nIHhtbAorYXMgdGhlIHRvcC1sZXZlbCBmaWxlIGZvcm1hdC4gQnkgZGVmYXVsdCBldmVyeXRoaW5nIGluc2lkZSBwaHRtbCBvciBweG1sCitzZWN0aW9ucyBpcyB0cmVhdGVkIGFzIGEgc3RyaW5nIHdpdGggZW1iZWRkZWQgcHJlcHJvY2Vzc29yIGNvbW1hbmRzLiBJZgoreW91IHNldCB0aGUgdmFyaWFibGU6ID4KKworCTpsZXQgcGFwcF9pbmNsdWRlX2h0bWw9MQorCitpbiB5b3VyIHN0YXJ0dXAgZmlsZSBpdCB3aWxsIHRyeSB0byBzeW50YXgtaGlsaWdodCBodG1sIGNvZGUgaW5zaWRlIHBodG1sCitzZWN0aW9ucywgYnV0IHRoaXMgaXMgcmVsYXRpdmVseSBzbG93IGFuZCBtdWNoIHRvbyBjb2xvdXJmdWwgdG8gYmUgYWJsZSB0bworZWRpdCBzZW5zaWJseSA7KQorCitUaGUgbmV3ZXN0IHZlcnNpb24gb2YgdGhlIHBhcHAudmltIHN5bnRheCBmaWxlIGNhbiB1c3VhbGx5IGJlIGZvdW5kIGF0CitodHRwOi8vcGFwcC5wbGFuOS5kZS4KKworCitQQVNDQUwJCQkJCQkqcGFzY2FsLnZpbSogKnBhc2NhbC1zeW50YXgqCisKK0ZpbGVzIG1hdGNoaW5nICIqLnAiIGNvdWxkIGJlIFByb2dyZXNzIG9yIFBhc2NhbC4gIElmIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uCitkb2Vzbid0IHdvcmsgZm9yIHlvdSwgb3IgeW91IGRvbid0IGVkaXQgUHJvZ3Jlc3MgYXQgYWxsLCB1c2UgdGhpcyBpbiB5b3VyCitzdGFydHVwIHZpbXJjOiA+CisKKyAgIDpsZXQgZmlsZXR5cGVfcCA9ICJwYXNjYWwiCisKK1RoZSBQYXNjYWwgc3ludGF4IGZpbGUgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgc29tZSBleHRlbnNpb25zCitwcm92aWRlZCBieSBUdXJibyBQYXNjYWwsIEZyZWUgUGFzY2FsIENvbXBpbGVyIGFuZCBHTlUgUGFzY2FsIENvbXBpbGVyLgorRGVscGhpIGtleXdvcmRzIGFyZSBhbHNvIHN1cHBvcnRlZC4gQnkgZGVmYXVsdCwgVHVyYm8gUGFzY2FsIDcuMCBmZWF0dXJlcyBhcmUKK2VuYWJsZWQuICBJZiB5b3UgcHJlZmVyIHRvIHN0aWNrIHdpdGggdGhlIHN0YW5kYXJkIFBhc2NhbCBrZXl3b3JkcywgYWRkIHRoZQorZm9sbG93aW5nIGxpbmUgdG8geW91ciBzdGFydHVwIGZpbGU6ID4KKworICAgOmxldCBwYXNjYWxfdHJhZGl0aW9uYWw9MQorCitUbyBzd2l0Y2ggb24gRGVscGhpIHNwZWNpZmljIGNvbnN0cnVjdGlvbnMgKHN1Y2ggYXMgb25lLWxpbmUgY29tbWVudHMsCitrZXl3b3JkcywgZXRjKTogPgorCisgICA6bGV0IHBhc2NhbF9kZWxwaGk9MQorCisKK1RoZSBvcHRpb24gcGFzY2FsX3N5bWJvbF9vcGVyYXRvciBjb250cm9scyB3aGV0aGVyIHN5bWJvbCBvcGVyYXRvcnMgc3VjaCBhcyArLAorKiwgLi4sIGV0Yy4gYXJlIGRpc3BsYXllZCB1c2luZyB0aGUgT3BlcmF0b3IgY29sb3Igb3Igbm90LiAgVG8gY29sb3JpemUgc3ltYm9sCitvcGVyYXRvcnMsIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciBzdGFydHVwIGZpbGU6ID4KKworICAgOmxldCBwYXNjYWxfc3ltYm9sX29wZXJhdG9yPTEKKworU29tZSBmdW5jdGlvbnMgYXJlIGhpZ2hsaWdodGVkIGJ5IGRlZmF1bHQuICBUbyBzd2l0Y2ggaXQgb2ZmOiA+CisKKyAgIDpsZXQgcGFzY2FsX25vX2Z1bmN0aW9ucz0xCisKK0Z1cnRoZXJtb3JlLCB0aGVyZSBhcmUgc3BlY2lmaWMgdmFyaWFibGUgZm9yIHNvbWUgY29tcGlsZXIuICBCZXNpZGVzCitwYXNjYWxfZGVscGhpLCB0aGVyZSBhcmUgcGFzY2FsX2dwYyBhbmQgcGFzY2FsX2ZwYy4gIERlZmF1bHQgZXh0ZW5zaW9ucyB0cnkgdG8KK21hdGNoIFR1cmJvIFBhc2NhbC4gPgorCisgICA6bGV0IHBhc2NhbF9ncGM9MQorCitvciA+CisKKyAgIDpsZXQgcGFzY2FsX2ZwYz0xCisKK1RvIGVuc3VyZSB0aGF0IHN0cmluZ3MgYXJlIGRlZmluZWQgb24gYSBzaW5nbGUgbGluZSwgeW91IGNhbiBkZWZpbmUgdGhlCitwYXNjYWxfb25lX2xpbmVfc3RyaW5nIHZhcmlhYmxlLiA+CisKKyAgIDpsZXQgcGFzY2FsX29uZV9saW5lX3N0cmluZz0xCisKK0lmIHlvdSBkaXNsaWtlIDxUYWI+IGNoYXJzLCB5b3UgY2FuIHNldCB0aGUgcGFzY2FsX25vX3RhYnMgdmFyaWFibGUuICBUYWJzCit3aWxsIGJlIGhpZ2hsaWdodGVkIGFzIEVycm9yLiA+CisKKyAgIDpsZXQgcGFzY2FsX25vX3RhYnM9MQorCisKKworUEVSTAkJCQkJCSpwZXJsLnZpbSogKnBlcmwtc3ludGF4KgorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgcG9zc2libGUgb3B0aW9ucyB0byB0aGUgcGVybCBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitJZiB5b3UgdXNlIFBPRCBmaWxlcyBvciBQT0Qgc2VnbWVudHMsIHlvdSBtaWdodDogPgorCisJOmxldCBwZXJsX2luY2x1ZGVfcG9kID0gMQorCitUbyBoYW5kbGUgcGFja2FnZSByZWZlcmVuY2VzIGluIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcyBkaWZmZXJlbnRseSBmcm9tCit0aGUgcmVzdCBvZiB0aGUgbmFtZSAobGlrZSAnUGtnTmFtZTo6JyBpbiAnJFBrZ05hbWU6OlZhck5hbWUnKTogPgorCisJOmxldCBwZXJsX3dhbnRfc2NvcGVfaW5fdmFyaWFibGVzID0gMQorCitJZiB5b3Ugd2FudCBjb21wbGV4IHRoaW5ncyBsaWtlICdAeyR7ImZvbyJ9fScgdG8gYmUgcGFyc2VkOiA+CisKKwk6bGV0IHBlcmxfZXh0ZW5kZWRfdmFycyA9IDEKKworVGhlIGNvbG9yaW5nIHN0cmluZ3MgY2FuIGJlIGNoYW5nZWQuIEJ5IGRlZmF1bHQgc3RyaW5ncyBhbmQgcXEgZnJpZW5kcyB3aWxsIGJlCitoaWdobGlnaHRlZCBsaWtlIHRoZSBmaXJzdCBsaW5lLiBJZiB5b3Ugc2V0IHRoZSB2YXJpYWJsZQorcGVybF9zdHJpbmdfYXNfc3RhdGVtZW50LCBpdCB3aWxsIGJlIGhpZ2hsaWdodGVkIGFzIGluIHRoZSBzZWNvbmQgbGluZS4KKworICAgImhlbGxvIHdvcmxkISI7IHFxfGhlbGxvIHdvcmxkfDsKKyAgIF5eXl5eXl5eXl5eXl5eTk5eXl5eXl5eXl5eXl5eXl5OCSAgKHVubGV0IHBlcmxfc3RyaW5nX2FzX3N0YXRlbWVudCkKKyAgIFNeXl5eXl5eXl5eXl5TTk5TU1NeXl5eXl5eXl5eXlNOCSAgKGxldCBwZXJsX3N0cmluZ19hc19zdGF0ZW1lbnQpCisKKyheID0gcGVybFN0cmluZywgUyA9IHBlcmxTdGF0ZW1lbnQsIE4gPSBOb25lIGF0IGFsbCkKKworVGhlIHN5bmNpbmcgaGFzIDMgb3B0aW9ucy4gVGhlIGZpcnN0IHR3byBzd2l0Y2ggb2ZmIHNvbWUgdHJpZ2dlcmluZyBvZgorc3luY2hyb25pemF0aW9uIGFuZCBzaG91bGQgb25seSBiZSBuZWVkZWQgaW4gY2FzZSBpdCBmYWlscyB0byB3b3JrIHByb3Blcmx5LgorSWYgd2hpbGUgc2Nyb2xsaW5nIGFsbCBvZiBhIHN1ZGRlbiB0aGUgd2hvbGUgc2NyZWVuIGNoYW5nZXMgY29sb3IgY29tcGxldGVseQordGhlbiB5b3Ugc2hvdWxkIHRyeSBhbmQgc3dpdGNoIG9mZiBvbmUgb2YgdGhvc2UuIExldCBtZSBrbm93IGlmIHlvdSBjYW4gZmlndXJlCitvdXQgdGhlIGxpbmUgdGhhdCBjYXVzZXMgdGhlIG1pc3Rha2UuCisKK09uZSB0cmlnZ2VycyBvbiAiXlxzKnN1YlxzKiIgYW5kIHRoZSBvdGhlciBvbiAiXlskQCVdIiBtb3JlIG9yIGxlc3MuID4KKworCTpsZXQgcGVybF9ub19zeW5jX29uX3N1YgorCTpsZXQgcGVybF9ub19zeW5jX29uX2dsb2JhbF92YXIKKworQmVsb3cgeW91IGNhbiBzZXQgdGhlIG1heGltdW0gZGlzdGFuY2UgVklNIHNob3VsZCBsb29rIGZvciBzdGFydGluZyBwb2ludHMgZm9yCitpdHMgYXR0ZW1wdHMgaW4gc3ludGF4IGhpZ2hsaWdodGluZy4gPgorCisJOmxldCBwZXJsX3N5bmNfZGlzdCA9IDEwMAorCitJZiB5b3Ugd2FudCB0byB1c2UgZm9sZGluZyB3aXRoIHBlcmwsIHNldCBwZXJsX2ZvbGQ6ID4KKworICAgICAgIDpsZXQgcGVybF9mb2xkID0gMQorCisKK1BIUDMgYW5kIFBIUDQJCSpwaHAudmltKiAqcGhwMy52aW0qICpwaHAtc3ludGF4KiAqcGhwMy1zeW50YXgqCisKK1tub3RlOiBwcmV2aW91c2x5IHRoaXMgd2FzIGNhbGxlZCAicGhwMyIsIGJ1dCBzaW5jZSBpdCBub3cgYWxzbyBzdXBwb3J0cyBwaHA0CitpdCBoYXMgYmVlbiByZW5hbWVkIHRvICJwaHAiXQorCitUaGVyZSBhcmUgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciB0aGUgcGhwIHN5bnRheCBoaWdobGlnaHRpbmcuCisKK0lmIHlvdSBsaWtlIFNRTCBzeW50YXggaGlnaGxpZ2h0aW5nIGluc2lkZSBTdHJpbmdzOiA+CisKKyAgbGV0IHBocF9zcWxfcXVlcnkgPSAxCisKK0ZvciBoaWdobGlnaHRpbmcgdGhlIEJhc2VsaWIgbWV0aG9kczogPgorCisgIGxldCBwaHBfYmFzZWxpYiA9IDEKKworRW5hYmxlIEhUTUwgc3ludGF4IGhpZ2hsaWdodGluZyBpbnNpZGUgc3RyaW5nczogPgorCisgIGxldCBwaHBfaHRtbEluU3RyaW5ncyA9IDEKKworVXNpbmcgdGhlIG9sZCBjb2xvcnN0eWxlOiA+CisKKyAgbGV0IHBocF9vbGRTdHlsZSA9IDEKKworRW5hYmxlIGhpZ2hsaWdodGluZyBBU1Atc3R5bGUgc2hvcnQgdGFnczogPgorCisgIGxldCBwaHBfYXNwX3RhZ3MgPSAxCisKK0Rpc2FibGUgc2hvcnQgdGFnczogPgorCisgIGxldCBwaHBfbm9TaG9ydFRhZ3MgPSAxCisKK0ZvciBoaWdobGlnaHRpbmcgcGFyZW50IGVycm9yIF0gb3IgKTogPgorCisgIGxldCBwaHBfcGFyZW50X2Vycm9yX2Nsb3NlID0gMQorCitGb3Igc2tpcHBpbmcgYW4gcGhwIGVuZCB0YWcsIGlmIHRoZXJlIGV4aXN0cyBhbiBvcGVuICggb3IgWyB3aXRob3V0IGEgY2xvc2luZworb25lOiA+CisKKyAgbGV0IHBocF9wYXJlbnRfZXJyb3Jfb3BlbiA9IDEKKworRW5hYmxlIGZvbGRpbmcgZm9yIGNsYXNzZXMgYW5kIGZ1bmN0aW9uczogPgorCisgIGxldCBwaHBfZm9sZGluZyA9IDEKKworU2VsZWN0aW5nIHN5bmNpbmcgbWV0aG9kOiA+CisKKyAgbGV0IHBocF9zeW5jX21ldGhvZCA9IHgKKworeCA9IC0xIHRvIHN5bmMgYnkgc2VhcmNoIChkZWZhdWx0KSwKK3ggPiAwIHRvIHN5bmMgYXQgbGVhc3QgeCBsaW5lcyBiYWNrd2FyZHMsCit4ID0gMCB0byBzeW5jIGZyb20gc3RhcnQuCisKKworUFBXSVpBUkQJCQkJCSpwcHdpei52aW0qICpwcHdpei1zeW50YXgqCisKK1BQV2l6YXJkIGlzIGEgcHJlcHJvY2Vzc29yIGZvciBIVE1MIGFuZCBPUy8yIElORiBmaWxlcworCitUaGlzIHN5bnRheCBmaWxlIGhhcyB0aGUgb3B0aW9uczoKKworLSBwcHdpel9oaWdobGlnaHRfZGVmcyA6IGRldGVybWluZXMgaGlnaGxpZ2h0aW5nIG1vZGUgZm9yIFBQV2l6YXJkJ3MKKyAgZGVmaW5pdGlvbnMuIFBvc3NpYmxlIHZhbHVlcyBhcmUKKworICBwcHdpel9oaWdobGlnaHRfZGVmcyA9IDEgOiBQUFdpemFyZCAjZGVmaW5lIHN0YXRlbWVudHMgcmV0YWluIHRoZQorICAgIGNvbG9ycyBvZiB0aGVpciBjb250ZW50cyAoZS4gZy4gUFBXaXphcmQgbWFjcm9zIGFuZCB2YXJpYWJsZXMpCisKKyAgcHB3aXpfaGlnaGxpZ2h0X2RlZnMgPSAyIDogcHJlcHJvY2Vzc29yICNkZWZpbmUgYW5kICNldmFsdWF0ZQorICAgIHN0YXRlbWVudHMgYXJlIHNob3duIGluIGEgc2luZ2xlIGNvbG9yIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBsaW5lCisgICAgY29udGludWF0aW9uIHN5bWJvbHMKKworICBUaGUgZGVmYXVsdCBzZXR0aW5nIGZvciBwcHdpel9oaWdobGlnaHRfZGVmcyBpcyAxLgorCistIHBwd2l6X3dpdGhfaHRtbCA6IElmIHRoZSB2YWx1ZSBpcyAxICh0aGUgZGVmYXVsdCksIGhpZ2hsaWdodCBsaXRlcmFsCisgIEhUTUwgY29kZTsgaWYgMCwgdHJlYXQgSFRNTCBjb2RlIGxpa2Ugb3JkaW5hcnkgdGV4dC4KKworCitQSFRNTAkJCQkJCSpwaHRtbC52aW0qICpwaHRtbC1zeW50YXgqCisKK1RoZXJlIGFyZSB0d28gb3B0aW9ucyBmb3IgdGhlIHBodG1sIHN5bnRheCBoaWdobGlnaHRpbmcuCisKK0lmIHlvdSBsaWtlIFNRTCBzeW50YXggaGlnaGxpZ2h0aW5nIGluc2lkZSBTdHJpbmdzLCB1c2UgdGhpczogPgorCisJOmxldCBwaHRtbF9zcWxfcXVlcnkgPSAxCisKK0ZvciBzeW5jaW5nLCBtaW5saW5lcyBkZWZhdWx0cyB0byAxMDAuCUlmIHlvdSBwcmVmZXIgYW5vdGhlciB2YWx1ZSwgeW91IGNhbgorc2V0ICJwaHRtbF9taW5saW5lcyIgdG8gdGhlIHZhbHVlIHlvdSBkZXNpcmUuICBFeGFtcGxlOiA+CisKKwk6bGV0IHBodG1sX21pbmxpbmVzID0gMjAwCisKKworUE9TVFNDUklQVAkJCQkJKnBvc3RzY3IudmltKiAqcG9zdHNjci1zeW50YXgqCisKK1RoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMgd2hlbiBpdCBjb21lcyB0byBoaWdobGlnaHRpbmcgUG9zdFNjcmlwdC4KKworRmlyc3Qgd2hpY2ggdmVyc2lvbiBvZiB0aGUgUG9zdFNjcmlwdCBsYW5ndWFnZSB0byBoaWdobGlnaHQuICBUaGVyZSBhcmUKK2N1cnJlbnRseSB0aHJlZSBkZWZpbmVkIGxhbmd1YWdlIHZlcnNpb25zLCBvciBsZXZlbHMuICBMZXZlbCAxIGlzIHRoZSBvcmlnaW5hbAorYW5kIGJhc2UgdmVyc2lvbiwgYW5kIGluY2x1ZGVzIGFsbCBleHRlbnNpb25zIHByaW9yIHRvIHRoZSByZWxlYXNlIG9mIGxldmVsIDIuCitMZXZlbCAyIGlzIHRoZSBtb3N0IGNvbW1vbiB2ZXJzaW9uIGFyb3VuZCwgYW5kIGluY2x1ZGVzIGl0cyBvd24gc2V0IG9mCitleHRlbnNpb25zIHByaW9yIHRvIHRoZSByZWxlYXNlIG9mIGxldmVsIDMuICBMZXZlbCAzIGlzIGN1cnJlbnRseSB0aGUgaGlnaGVzdAorbGV2ZWwgc3VwcG9ydGVkLiAgWW91IHNlbGVjdCB3aGljaCBsZXZlbCBvZiB0aGUgUG9zdFNjcmlwdCBsYW5ndWFnZSB5b3Ugd2FudAoraGlnaGxpZ2h0ZWQgYnkgZGVmaW5pbmcgdGhlIHBvc3RzY3JfbGV2ZWwgdmFyaWFibGUgYXMgZm9sbG93czogPgorCisJOmxldCBwb3N0c2NyX2xldmVsPTIKKworSWYgdGhpcyB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCBpdCBkZWZhdWx0cyB0byAyIChsZXZlbCAyKSBzaW5jZSB0aGlzIGlzCit0aGUgbW9zdCBwcmV2YWxlbnQgdmVyc2lvbiBjdXJyZW50bHkuCisKK05vdGUsIG5vdCBhbGwgUFMgaW50ZXJwcmV0ZXJzIHdpbGwgc3VwcG9ydCBhbGwgbGFuZ3VhZ2UgZmVhdHVyZXMgZm9yIGEKK3BhcnRpY3VsYXIgbGFuZ3VhZ2UgbGV2ZWwuICBJbiBwYXJ0aWN1bGFyIHRoZSAlIVBTLUFkb2JlLTMuMCBhdCB0aGUgc3RhcnQgb2YKK1BTIGZpbGVzIGRvZXMgTk9UIG1lYW4gdGhlIFBvc3RTY3JpcHQgcHJlc2VudCBpcyBsZXZlbCAzIFBvc3RTY3JpcHQhCisKK0lmIHlvdSBhcmUgd29ya2luZyB3aXRoIERpc3BsYXkgUG9zdFNjcmlwdCwgeW91IGNhbiBpbmNsdWRlIGhpZ2hsaWdodGluZyBvZgorRGlzcGxheSBQUyBsYW5ndWFnZSBmZWF0dXJlcyBieSBkZWZpbmluZyB0aGUgcG9zdHNjcl9kaXNwbGF5IHZhcmlhYmxlIGFzCitmb2xsb3dzOiA+CisKKwk6bGV0IHBvc3RzY3JfZGlzcGxheT0xCisKK0lmIHlvdSBhcmUgd29ya2luZyB3aXRoIEdob3N0c2NyaXB0LCB5b3UgY2FuIGluY2x1ZGUgaGlnaGxpZ2h0aW5nIG9mCitHaG9zdHNjcmlwdCBzcGVjaWZpYyBsYW5ndWFnZSBmZWF0dXJlcyBieSBkZWZpbmluZyB0aGUgdmFyaWFibGUKK3Bvc3RzY3JfZ2hvc3RzY3JpcHQgYXMgZm9sbG93czogPgorCisJOmxldCBwb3N0c2NyX2dob3N0c2NyaXB0PTEKKworUG9zdFNjcmlwdCBpcyBhIGxhcmdlIGxhbmd1YWdlLCB3aXRoIG1hbnkgcHJlZGVmaW5lZCBlbGVtZW50cy4JV2hpbGUgaXQKK3VzZWZ1bCB0byBoYXZlIGFsbCB0aGVzZSBlbGVtZW50cyBoaWdobGlnaHRlZCwgb24gc2xvd2VyIG1hY2hpbmVzIHRoaXMgY2FuCitjYXVzZSBWaW0gdG8gc2xvdyBkb3duLiAgSW4gYW4gYXR0ZW1wdCB0byBiZSBtYWNoaW5lIGZyaWVuZGx5IGZvbnQgbmFtZXMgYW5kCitjaGFyYWN0ZXIgZW5jb2RpbmdzIGFyZSBub3QgaGlnaGxpZ2h0ZWQgYnkgZGVmYXVsdC4gIFVubGVzcyB5b3UgYXJlIHdvcmtpbmcKK2V4cGxpY2l0bHkgd2l0aCBlaXRoZXIgb2YgdGhlc2UgdGhpcyBzaG91bGQgYmUgb2suICBJZiB5b3Ugd2FudCB0aGVtIHRvIGJlCitoaWdobGlnaHRlZCB5b3Ugc2hvdWxkIHNldCBvbmUgb3IgYm90aCBvZiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczogPgorCisJOmxldCBwb3N0c2NyX2ZvbnRzPTEKKwk6bGV0IHBvc3RzY3JfZW5jb2RpbmdzPTEKKworVGhlcmUgaXMgYSBzdHlsaXN0aWMgb3B0aW9uIHRvIHRoZSBoaWdobGlnaHRpbmcgb2YgYW5kLCBvciwgYW5kIG5vdC4gIEluCitQb3N0U2NyaXB0IHRoZSBmdW5jdGlvbiBvZiB0aGVzZSBvcGVyYXRvcnMgZGVwZW5kcyBvbiB0aGUgdHlwZXMgb2YgdGhlaXIKK29wZXJhbmRzIC0gaWYgdGhlIG9wZXJhbmRzIGFyZSBib29sZWFucyB0aGVuIHRoZXkgYXJlIHRoZSBsb2dpY2FsIG9wZXJhdG9ycywKK2lmIHRoZXkgYXJlIGludGVnZXJzIHRoZW4gdGhleSBhcmUgYmluYXJ5IG9wZXJhdG9ycy4gIEFzIGJpbmFyeSBhbmQgbG9naWNhbAorb3BlcmF0b3JzIGNhbiBiZSBoaWdobGlnaHRlZCBkaWZmZXJlbnRseSB0aGV5IGhhdmUgdG8gYmUgaGlnaGxpZ2h0ZWQgb25lIHdheQorb3IgdGhlIG90aGVyLiAgQnkgZGVmYXVsdCB0aGV5IGFyZSB0cmVhdGVkIGFzIGxvZ2ljYWwgb3BlcmF0b3JzLiAgVGhleSBjYW4gYmUKK2hpZ2hsaWdodGVkIGFzIGJpbmFyeSBvcGVyYXRvcnMgYnkgZGVmaW5pbmcgdGhlIHZhcmlhYmxlCitwb3N0c2NyX2FuZG9ybm90X2JpbmFyeSBhcyBmb2xsb3dzOiA+CisKKwk6bGV0IHBvc3RzY3JfYW5kb3Jub3RfYmluYXJ5PTEKKzwKKworCQkJKnB0Y2FwLnZpbSoKK1BSSU5UQ0FQICsgVEVSTUNBUAkqcHRjYXAtc3ludGF4KiAqdGVybWNhcC1zeW50YXgqICpwcmludGNhcC1zeW50YXgqCisKK1RoaXMgc3ludGF4IGZpbGUgYXBwbGllcyB0byB0aGUgcHJpbnRjYXAgYW5kIHRlcm1jYXAgZGF0YWJhc2VzLgorCitJbiBvcmRlciBmb3IgVmltIHRvIHJlY29nbml6ZSBwcmludGNhcC90ZXJtY2FwIGZpbGVzIHRoYXQgZG8gbm90IG1hdGNoCit0aGUgcGF0dGVybnMgKnByaW50Y2FwKiwgb3IgKnRlcm1jYXAqLCB5b3UgbXVzdCBwdXQgYWRkaXRpb25hbCBwYXR0ZXJucworYXBwcm9wcmlhdGUgdG8geW91ciBzeXN0ZW0gaW4geW91ciB8bXlmaWxldHlwZWZpbGV8IGZpbGUuICBGb3IgdGhlc2UKK3BhdHRlcm5zLCB5b3UgbXVzdCBzZXQgdGhlIHZhcmlhYmxlICJiOnB0Y2FwX3R5cGUiIHRvIGVpdGhlciAicHJpbnQiIG9yCisidGVybSIsIGFuZCB0aGVuIHRoZSAnZmlsZXR5cGUnIG9wdGlvbiB0byBwdGNhcC4KKworRm9yIGV4YW1wbGUsIHRvIG1ha2UgVmltIGlkZW50aWZ5IGFsbCBmaWxlcyBpbiAvZXRjL3Rlcm1jYXBzLyBhcyB0ZXJtY2FwCitmaWxlcywgYWRkIHRoZSBmb2xsb3dpbmc6ID4KKworICAgOmF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3Rlcm1jYXBzLyogbGV0IGI6cHRjYXBfdHlwZSA9ICJ0ZXJtIiB8CisJCQkJICAgICAgIFwgc2V0IGZpbGV0eXBlPXB0Y2FwCisKK0lmIHlvdSBub3RpY2UgaGlnaGxpZ2h0aW5nIGVycm9ycyB3aGlsZSBzY3JvbGxpbmcgYmFja3dhcmRzLCB3aGljaAorYXJlIGZpeGVkIHdoZW4gcmVkcmF3aW5nIHdpdGggQ1RSTC1MLCB0cnkgc2V0dGluZyB0aGUgInB0Y2FwX21pbmxpbmVzIgoraW50ZXJuYWwgdmFyaWFibGUgdG8gYSBsYXJnZXIgbnVtYmVyOiA+CisKKyAgIDpsZXQgcHRjYXBfbWlubGluZXMgPSA1MAorCisoVGhlIGRlZmF1bHQgaXMgMjAgbGluZXMuKQorCisKK1BST0dSRVNTCQkJCSpwcm9ncmVzcy52aW0qICpwcm9ncmVzcy1zeW50YXgqCisKK0ZpbGVzIG1hdGNoaW5nICIqLnciIGNvdWxkIGJlIFByb2dyZXNzIG9yIGN3ZWIuICBJZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbgorZG9lc24ndCB3b3JrIGZvciB5b3UsIG9yIHlvdSBkb24ndCBlZGl0IGN3ZWIgYXQgYWxsLCB1c2UgdGhpcyBpbiB5b3VyCitzdGFydHVwIHZpbXJjOiA+CisgICA6bGV0IGZpbGV0eXBlX3cgPSAicHJvZ3Jlc3MiCitUaGUgc2FtZSBoYXBwZW5zIGZvciAiKi5pIiwgd2hpY2ggY291bGQgYmUgYXNzZW1ibHksIGFuZCAiKi5wIiwgd2hpY2ggY291bGQgYmUKK1Bhc2NhbC4gIFVzZSB0aGlzIGlmIHlvdSBkb24ndCB1c2UgYXNzZW1ibHkgYW5kIFBhc2NhbDogPgorICAgOmxldCBmaWxldHlwZV9pID0gInByb2dyZXNzIgorICAgOmxldCBmaWxldHlwZV9wID0gInByb2dyZXNzIgorCisKK1BZVEhPTgkJCQkJCSpweXRob24udmltKiAqcHl0aG9uLXN5bnRheCoKKworVGhlcmUgYXJlIGZvdXIgb3B0aW9ucyB0byBjb250cm9sIFB5dGhvbiBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitGb3IgaGlnaGxpZ2h0ZWQgbnVtYmVyczogPgorCTpsZXQgcHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzID0gMQorCitGb3IgaGlnaGxpZ2h0ZWQgYnVpbHRpbiBmdW5jdGlvbnM6ID4KKwk6bGV0IHB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMgPSAxCisKK0ZvciBoaWdobGlnaHRlZCBzdGFuZGFyZCBleGNlcHRpb25zOiA+CisJOmxldCBweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMgPSAxCisKK0ZvciBoaWdobGlnaHRlZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBtaXggb2Ygc3BhY2VzIGFuZCB0YWJzOgorCTpsZXQgcHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMgPSAxCisKK0lmIHlvdSB3YW50IGFsbCBwb3NzaWJsZSBQeXRob24gaGlnaGxpZ2h0aW5nICh0aGUgc2FtZSBhcyBzZXR0aW5nIHRoZQorcHJlY2VkaW5nIHRocmVlIG9wdGlvbnMpOiA+CisJOmxldCBweXRob25faGlnaGxpZ2h0X2FsbCA9IDEKKworCitRVUFLRQkJCQkJCSpxdWFrZS52aW0qICpxdWFrZS1zeW50YXgqCisKK1RoZSBRdWFrZSBzeW50YXggZGVmaW5pdGlvbiBzaG91bGQgd29yayBmb3IgbW9zdCBhbnkgRlBTIChGaXJzdCBQZXJzb24KK1Nob290ZXIpIGJhc2VkIG9uIG9uZSBvZiB0aGUgUXVha2UgZW5naW5lcy4gSG93ZXZlciwgdGhlIGNvbW1hbmQgbmFtZXMgdmFyeQorYSBiaXQgYmV0d2VlbiB0aGUgdGhyZWUgZ2FtZXMgKFF1YWtlLCBRdWFrZSAyLCBhbmQgUXVha2UgMyBBcmVuYSkgc28gdGhlCitzeW50YXggZGVmaW5pdGlvbiBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhyZWUgZ2xvYmFsIHZhcmlhYmxlcyB0byBhbGxvdwordXNlcnMgdG8gc3BlY2lmeSB3aGF0IGNvbW1hbmRzIGFyZSBsZWdhbCBpbiB0aGVpciBmaWxlcy4gVGhlIHRocmVlIHZhcmlhYmxlcworY2FuIGJlIHNldCBmb3IgdGhlIGZvbGxvd2luZyBlZmZlY3RzOgorCitzZXQgdG8gaGlnaGxpZ2h0IGNvbW1hbmRzIG9ubHkgYXZhaWxhYmxlIGluIFF1YWtlOiA+CisJOmxldCBxdWFrZV9pc19xdWFrZTEgPSAxCisKK3NldCB0byBoaWdobGlnaHQgY29tbWFuZHMgb25seSBhdmFpbGFibGUgaW4gUXVha2UgMjogPgorCTpsZXQgcXVha2VfaXNfcXVha2UyID0gMQorCitzZXQgdG8gaGlnaGxpZ2h0IGNvbW1hbmRzIG9ubHkgYXZhaWxhYmxlIGluIFF1YWtlIDMgQXJlbmE6ID4KKwk6bGV0IHF1YWtlX2lzX3F1YWtlMyA9IDEKKworQW55IGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRocmVlIHZhcmlhYmxlcyBpcyBsZWdhbCwgYnV0IG1pZ2h0IGhpZ2hsaWdodCBtb3JlCitjb21tYW5kcyB0aGFuIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgdG8geW91IGJ5IHRoZSBnYW1lLgorCisKK1JFQURMSU5FCQkJCSpyZWFkbGluZS52aW0qICpyZWFkbGluZS1zeW50YXgqCisKK1RoZSByZWFkbGluZSBsaWJyYXJ5IGlzIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBCQVNIIHNoZWxsLCB3aGljaCBhZGRzIHF1aXRlIGEKK2ZldyBjb21tYW5kcyBhbmQgb3B0aW9ucyB0byB0aGUgb25lcyBhbHJlYWR5IGF2YWlsYWJsZS4gVG8gaGlnaGxpZ2h0IHRoZXNlCitpdGVtcyBhcyB3ZWxsIHlvdSBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciB8dmltcmN8IG9yIGp1c3QgdHlwZSBpdCBpbiB0aGUKK2NvbW1hbmQgbGluZSBiZWZvcmUgbG9hZGluZyBhIGZpbGUgd2l0aCB0aGUgcmVhZGxpbmUgc3ludGF4OiA+CisJbGV0IHJlYWRsaW5lX2hhc19iYXNoID0gMQorCitUaGlzIHdpbGwgYWRkIGhpZ2hsaWdodGluZyBmb3IgdGhlIGNvbW1hbmRzIHRoYXQgQkFTSCAodmVyc2lvbiAyLjA1YSBhbmQKK2xhdGVyLCBhbmQgcGFydCBlYXJsaWVyKSBhZGRzLgorCisKK1JFWFgJCQkJCQkqcmV4eC52aW0qICpyZXh4LXN5bnRheCoKKworSWYgeW91IG5vdGljZSBoaWdobGlnaHRpbmcgZXJyb3JzIHdoaWxlIHNjcm9sbGluZyBiYWNrd2FyZHMsIHdoaWNoIGFyZSBmaXhlZAord2hlbiByZWRyYXdpbmcgd2l0aCBDVFJMLUwsIHRyeSBzZXR0aW5nIHRoZSAicmV4eF9taW5saW5lcyIgaW50ZXJuYWwgdmFyaWFibGUKK3RvIGEgbGFyZ2VyIG51bWJlcjogPgorCTpsZXQgcmV4eF9taW5saW5lcyA9IDUwCitUaGlzIHdpbGwgbWFrZSB0aGUgc3ludGF4IHN5bmNocm9uaXphdGlvbiBzdGFydCA1MCBsaW5lcyBiZWZvcmUgdGhlIGZpcnN0CitkaXNwbGF5ZWQgbGluZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLiAgVGhlIGRpc2FkdmFudGFnZSBvZiB1c2luZyBhIGxhcmdlcgorbnVtYmVyIGlzIHRoYXQgcmVkcmF3aW5nIGNhbiBiZWNvbWUgc2xvdy4KKworCitSVUJZCQkJCQkJKnJ1YnkudmltKiAqcnVieS1zeW50YXgqCisKK1RoZXJlIGFyZSBhIGZldyBvcHRpb25zIHRvIHRoZSBSdWJ5IHN5bnRheCBoaWdobGlnaHRpbmcuCisKK0J5IGRlZmF1bHQsIHRoZSAiZW5kIiBrZXl3b3JkIGlzIGNvbG9yaXplZCBhY2NvcmRpbmcgdG8gdGhlIG9wZW5pbmcgc3RhdGVtZW50CitvZiB0aGUgYmxvY2sgaXQgY2xvc2VzLiBXaGlsZSB1c2VmdWwsIHRoaXMgZmVhdHVyZSBjYW4gYmUgZXhwZW5zaXZlOiBpZiB5b3UKK2V4cGVyaWVuY2Ugc2xvdyByZWRyYXdpbmcgKG9yIHlvdSBhcmUgb24gYSB0ZXJtaW5hbCB3aXRoIHBvb3IgY29sb3Igc3VwcG9ydCkKK3lvdSBtYXkgd2FudCB0byB0dXJuIGl0IG9mZiBieSBkZWZpbmluZyB0aGUgInJ1Ynlfbm9fZXhwZW5zaXZlIiB2YXJpYWJsZTogPgorCTpsZXQgcnVieV9ub19leHBlbnNpdmUgPSAxCitJbiB0aGlzIGNhc2UgdGhlIHNhbWUgY29sb3Igd2lsbCBiZSB1c2VkIGZvciBhbGwgY29udHJvbCBrZXl3b3Jkcy4KKworSWYgeW91IGRvIHdhbnQgdGhpcyBmZWF0dXJlIGVuYWJsZWQsIGJ1dCBub3RpY2UgaGlnaGxpZ2h0aW5nIGVycm9ycyB3aGlsZQorc2Nyb2xsaW5nIGJhY2t3YXJkcywgd2hpY2ggYXJlIGZpeGVkIHdoZW4gcmVkcmF3aW5nIHdpdGggQ1RSTC1MLCB0cnkgc2V0dGluZwordGhlICJydWJ5X21pbmxpbmVzIiB2YXJpYWJsZSB0byBhIHZhbHVlIGxhcmdlciB0aGFuIDUwOiA+CisJOmxldCBydWJ5X21pbmxpbmVzID0gMTAwCitJZGVhbGx5LCB0aGlzIHZhbHVlIHNob3VsZCBiZSBhIG51bWJlciBvZiBsaW5lcyBsYXJnZSBlbm91Z2ggdG8gZW1icmFjZSB5b3VyCitsYXJnZXN0IGNsYXNzIG9yIG1vZHVsZS4KKworRmluYWxseSwgaWYgeW91IGRvIG5vdCBsaWtlIHRvIHNlZSB0b28gbWFueSBjb2xvciBpdGVtcyBhcm91bmQsIHlvdSBjYW4gZGVmaW5lCisicnVieV9ub19pZGVudGlmaWVycyI6ID4KKwk6bGV0IHJ1Ynlfbm9faWRlbnRpZmllcnMgPSAxCitUaGlzIHdpbGwgcHJldmVudCBoaWdobGlnaHRpbmcgb2Ygc3BlY2lhbCBpZGVudGlmaWVycyBsaWtlICJDb25zdGFudE5hbWUiLAorIiRnbG9iYWxfdmFyIiwgIkBpbnN0YW5jZV92YXIiLCAifCBpdGVyYXRvciB8IiwgYW5kICI6c3ltYm9sIi4KKworCitTREwJCQkJCQkqc2RsLnZpbSogKnNkbC1zeW50YXgqCisKK1RoZSBTREwgaGlnaGxpZ2h0aW5nIHByb2JhYmx5IG1pc3NlcyBhIGZldyBrZXl3b3JkcywgYnV0IFNETCBoYXMgc28gbWFueQorb2YgdGhlbSBpdCdzIGFsbW9zdCBpbXBvc3NpYmx5IHRvIGNvcGUuCisKK1RoZSBuZXcgc3RhbmRhcmQsIFNETC0yMDAwLCBzcGVjaWZpZXMgdGhhdCBhbGwgaWRlbnRpZmllcnMgYXJlCitjYXNlLXNlbnNpdGl2ZSAod2hpY2ggd2FzIG5vdCBzbyBiZWZvcmUpLCBhbmQgdGhhdCBhbGwga2V5d29yZHMgY2FuIGJlCit1c2VkIGVpdGhlciBjb21wbGV0ZWx5IGxvd2VyY2FzZSBvciBjb21wbGV0ZWx5IHVwcGVyY2FzZS4gVG8gaGF2ZSB0aGUKK2hpZ2hsaWdodGluZyByZWZsZWN0IHRoaXMsIHlvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6ID4KKwk6bGV0IHNkbF8yMDAwPTEKKworVGhpcyBhbHNvIHNldHMgbWFueSBuZXcga2V5d29yZHMuIElmIHlvdSB3YW50IHRvIGRpc2FibGUgdGhlIG9sZAora2V5d29yZHMsIHdoaWNoIGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhLCB1c2U6ID4KKwk6bGV0IFNETF9ub185Nj0xCisKKworVGhlIGluZGVudGF0aW9uIGlzIHByb2JhYmx5IGFsc28gaW5jb21wbGV0ZSwgYnV0IHJpZ2h0IG5vdyBJIGFtIHZlcnkKK3NhdGlzZmllZCB3aXRoIGl0IGZvciBteSBvd24gcHJvamVjdHMuCisKKworU0VECQkJCQkJKnNlZC52aW0qICpzZWQtc3ludGF4KgorCitUbyBtYWtlIHRhYnMgc3RhbmQgb3V0IGZyb20gcmVndWxhciBibGFua3MgKGFjY29tcGxpc2hlZCBieSB1c2luZyBUb2RvCitoaWdobGlnaHRpbmcgb24gdGhlIHRhYnMpLCBkZWZpbmUgImhpZ2hsaWdodF9zZWR0YWJzIiBieSBwdXR0aW5nID4KKworCTpsZXQgaGlnaGxpZ2h0X3NlZHRhYnMgPSAxCisKK2luIHRoZSB2aW1yYyBmaWxlLiAgKFRoaXMgc3BlY2lhbCBoaWdobGlnaHRpbmcgb25seSBhcHBsaWVzIGZvciB0YWJzCitpbnNpZGUgc2VhcmNoIHBhdHRlcm5zLCByZXBsYWNlbWVudCB0ZXh0cywgYWRkcmVzc2VzIG9yIHRleHQgaW5jbHVkZWQKK2J5IGFuIEFwcGVuZC9DaGFuZ2UvSW5zZXJ0IGNvbW1hbmQuKSAgSWYgeW91IGVuYWJsZSB0aGlzIG9wdGlvbiwgaXQgaXMKK2Fsc28gYSBnb29kIGlkZWEgdG8gc2V0IHRoZSB0YWIgd2lkdGggdG8gb25lIGNoYXJhY3RlcjsgYnkgZG9pbmcgdGhhdCwKK3lvdSBjYW4gZWFzaWx5IGNvdW50IHRoZSBudW1iZXIgb2YgdGFicyBpbiBhIHN0cmluZy4KKworQnVnczoKKworICBUaGUgdHJhbnNmb3JtIGNvbW1hbmQgKHkpIGlzIHRyZWF0ZWQgZXhhY3RseSBsaWtlIHRoZSBzdWJzdGl0dXRlCisgIGNvbW1hbmQuICBUaGlzIG1lYW5zIHRoYXQsIGFzIGZhciBhcyB0aGlzIHN5bnRheCBmaWxlIGlzIGNvbmNlcm5lZCwKKyAgdHJhbnNmb3JtIGFjY2VwdHMgdGhlIHNhbWUgZmxhZ3MgYXMgc3Vic3RpdHV0ZSwgd2hpY2ggaXMgd3JvbmcuCisgIChUcmFuc2Zvcm0gYWNjZXB0cyBubyBmbGFncy4pICBJIHRvbGVyYXRlIHRoaXMgYnVnIGJlY2F1c2UgdGhlCisgIGludm9sdmVkIGNvbW1hbmRzIG5lZWQgdmVyeSBjb21wbGV4IHRyZWF0bWVudCAoOTUgcGF0dGVybnMsIG9uZSBmb3IKKyAgZWFjaCBwbGF1c2libGUgcGF0dGVybiBkZWxpbWl0ZXIpLgorCisKK1NHTUwJCQkJCQkqc2dtbC52aW0qICpzZ21sLXN5bnRheCoKKworVGhlIGNvbG9yaW5nIHNjaGVtZSBmb3IgdGFncyBpbiB0aGUgU0dNTCBmaWxlIHdvcmtzIGFzIGZvbGxvd3MuCisKK1RoZSA8PiBvZiBvcGVuaW5nIHRhZ3MgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkgdGhhbiB0aGUgPC8+IG9mIGEgY2xvc2luZyB0YWcuCitUaGlzIGlzIG9uIHB1cnBvc2UhIEZvciBvcGVuaW5nIHRhZ3MgdGhlICdGdW5jdGlvbicgY29sb3IgaXMgdXNlZCwgd2hpbGUgZm9yCitjbG9zaW5nIHRhZ3MgdGhlICdUeXBlJyBjb2xvciBpcyB1c2VkIChTZWUgc3ludGF4LnZpbSB0byBjaGVjayBob3cgdGhvc2UgYXJlCitkZWZpbmVkIGZvciB5b3UpCisKK0tub3duIHRhZyBuYW1lcyBhcmUgY29sb3JlZCB0aGUgc2FtZSB3YXkgYXMgc3RhdGVtZW50cyBpbiBDLiAgVW5rbm93biB0YWcKK25hbWVzIGFyZSBub3QgY29sb3JlZCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHNwb3QgZXJyb3JzLgorCitOb3RlIHRoYXQgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYXJndW1lbnQgKG9yIGF0dHJpYnV0ZSkgbmFtZXMuIEtub3duIGF0dHJpYnV0ZQorbmFtZXMgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkgdGhhbiB1bmtub3duIG9uZXMuCisKK1NvbWUgU0dNTCB0YWdzIGFyZSB1c2VkIHRvIGNoYW5nZSB0aGUgcmVuZGVyaW5nIG9mIHRleHQuIFRoZSBmb2xsb3dpbmcgdGFncworYXJlIHJlY29nbml6ZWQgYnkgdGhlIHNnbWwudmltIHN5bnRheCBjb2xvcmluZyBmaWxlIGFuZCBjaGFuZ2UgdGhlIHdheSBub3JtYWwKK3RleHQgaXMgc2hvd246IDx2YXJuYW1lPiA8ZW1waGFzaXM+IDxjb21tYW5kPiA8ZnVuY3Rpb24+IDxsaXRlcmFsPgorPHJlcGxhY2VhYmxlPiA8dWxpbms+IGFuZCA8bGluaz4uCisKK0lmIHlvdSB3YW50IHRvIGNoYW5nZSBob3cgc3VjaCB0ZXh0IGlzIHJlbmRlcmVkLCB5b3UgbXVzdCByZWRlZmluZSB0aGUKK2ZvbGxvd2luZyBzeW50YXggZ3JvdXBzOgorCisgICAgLSBzZ21sQm9sZAorICAgIC0gc2dtbEJvbGRJdGFsaWMKKyAgICAtIHNnbWxVbmRlcmxpbmUKKyAgICAtIHNnbWxJdGFsaWMKKyAgICAtIHNnbWxMaW5rIGZvciBsaW5rcworCitUbyBtYWtlIHRoaXMgcmVkZWZpbml0aW9uIHdvcmsgeW91IG11c3QgcmVkZWZpbmUgdGhlbSBhbGwgYW5kIGRlZmluZSB0aGUKK2ZvbGxvd2luZyB2YXJpYWJsZSBpbiB5b3VyIHZpbXJjICh0aGlzIGlzIGR1ZSB0byB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGZpbGVzCithcmUgcmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24pID4KKyAgIGxldCBzZ21sX215X3JlbmRlcmluZz0xCisKK1lvdSBjYW4gYWxzbyBkaXNhYmxlIHRoaXMgcmVuZGVyaW5nIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91cgordmltcmMgZmlsZTogPgorICAgbGV0IHNnbWxfbm9fcmVuZGVyaW5nPTEKKworKEFkYXB0ZWQgZnJvbSB0aGUgaHRtbC52aW0gaGVscCB0ZXh0IGJ5IENsYXVkaW8gRmxlaW5lciA8Y2xhdWRpb0BmbGVpbmVyLmNvbT4pCisKKworU0gJCQkJCQkqc2gudmltKiAqc2gtc3ludGF4KgorCitUaGlzIGNvdmVycyB0aGUgIm5vcm1hbCIgVW5peCAoQm91cm5lKSBzaCwgYmFzaCBhbmQgdGhlIEtvcm4gc2hlbGwuCisKK1ZpbSBhdHRlbXB0cyB0byBkZXRlcm1pbmUgd2hpY2ggc2hlbGwgdHlwZSBpcyBpbiB1c2UgYnkgc3BlY2lmeWluZyB0aGF0Cit2YXJpb3VzIGZpbGVuYW1lcyBhcmUgb2Ygc3BlY2lmaWMgdHlwZXM6ID4KKworICAgIGtzaCA6IC5rc2hyYyogKi5rc2gKKyAgICBiYXNoOiAuYmFzaHJjKiBiYXNocmMgYmFzaC5iYXNocmMgLmJhc2hfcHJvZmlsZSogKi5iYXNoCis8CitJZiBub25lIG9mIHRoZXNlIGNhc2VzIHBlcnRhaW4sIHRoZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgaXMgZXhhbWluZWQKKyhleC4gL2Jpbi9zaCAgL2Jpbi9rc2gJL2Jpbi9iYXNoKS4gIElmIHRoZSBmaXJzdCBsaW5lIHNwZWNpZmllcyBhIHNoZWxsdHlwZSwKK3RoZW4gdGhhdCBzaGVsbHR5cGUgaXMgdXNlZC4gIEhvd2V2ZXIgc29tZSBmaWxlcyAoZXguIC5wcm9maWxlKSBhcmUga25vd24gdG8KK2JlIHNoZWxsIGZpbGVzIGJ1dCB0aGUgdHlwZSBpcyBub3QgYXBwYXJlbnQuICBGdXJ0aGVybW9yZSwgb24gbWFueSBzeXN0ZW1zCitzaCBpcyBzeW1ib2xpY2FsbHkgbGlua2VkIHRvICJiYXNoIiAobGludXgpIG9yICJrc2giIChwb3NpeCkuCisKK09uZSBtYXkgc3BlY2lmeSBhIGdsb2JhbCBkZWZhdWx0IGJ5IGluc3RhbnRpYXRpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUKK3ZhcmlhYmxlcyBpbiB5b3VyIDwudmltcmM+OgorCisgICAga3NoOiA+CisJbGV0IGlzX2tvcm5zaGVsbCA9IDEKKzwgICBiYXNoOiA+CisJbGV0IGlzX2Jhc2gJID0gMQorPCAgIHNoOiA+CisJbGV0IGlzX3NoCSA9IDEKKworSWYsIGluIHlvdXIgPC52aW1yYz4sIHlvdSBzZXQgPgorCWxldCBnOnNoX2ZvbGRfZW5hYmxlZD0gMQorPgordGhlbiB2YXJpb3VzIHN5bnRheCBpdGVtcyAoSGVyZURvY3VtZW50cyBhbmQgZnVuY3Rpb24gYm9kaWVzKSBiZWNvbWUKK3N5bnRheC1mb2xkYWJsZSAoc2VlIHw6c3luLWZvbGR8KS4KKworSWYgeW91IG5vdGljZSBoaWdobGlnaHRpbmcgZXJyb3JzIHdoaWxlIHNjcm9sbGluZyBiYWNrd2FyZHMsIHdoaWNoIGFyZSBmaXhlZAord2hlbiByZWRyYXdpbmcgd2l0aCBDVFJMLUwsIHRyeSBzZXR0aW5nIHRoZSAic2hfbWlubGluZXMiIGludGVybmFsIHZhcmlhYmxlCit0byBhIGxhcmdlciBudW1iZXIuICBFeGFtcGxlOiA+CisKKwlsZXQgc2hfbWlubGluZXMgPSA1MDAKKworVGhpcyB3aWxsIG1ha2Ugc3ludGF4IHN5bmNocm9uaXphdGlvbiBzdGFydCA1MDAgbGluZXMgYmVmb3JlIHRoZSBmaXJzdAorZGlzcGxheWVkIGxpbmUuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMDAuICBUaGUgZGlzYWR2YW50YWdlIG9mIHVzaW5nIGEgbGFyZ2VyCitudW1iZXIgaXMgdGhhdCByZWRyYXdpbmcgY2FuIGJlY29tZSBzbG93LgorCitJZiB5b3UgZG9uJ3QgaGF2ZSBtdWNoIHRvIHN5bmNocm9uaXplIG9uLCBkaXNwbGF5aW5nIGNhbiBiZSB2ZXJ5IHNsb3cuCVRvCityZWR1Y2UgdGhpcywgdGhlICJzaF9tYXhsaW5lcyIgaW50ZXJuYWwgdmFyaWFibGUgY2FuIGJlIHNldC4gIEV4YW1wbGU6ID4KKworCWxldCBzaF9tYXhsaW5lcyA9IDEwMAorPAorVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSB0d2ljZSBzaF9taW5saW5lcy4gIFNldCBpdCB0byBhIHNtYWxsZXIgbnVtYmVyIHRvCitzcGVlZCB1cCBkaXNwbGF5aW5nLiAgVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IGhpZ2hsaWdodCBlcnJvcnMgbWF5IGFwcGVhci4KKworCitTUEVFRFVQIChBc3BlblRlY2ggcGxhbnQgc2ltdWxhdG9yKQkJKnNwdXAudmltKiAqc3B1cC1zeW50YXgqCisKK1RoZSBTcGVlZHVwIHN5bnRheCBmaWxlIGhhcyBzb21lIG9wdGlvbnM6CisKKy0gc3RyaWN0X3N1YnNlY3Rpb25zIDogSWYgdGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkLCBvbmx5IGtleXdvcmRzIGZvcgorICBzZWN0aW9ucyBhbmQgc3Vic2VjdGlvbnMgd2lsbCBiZSBoaWdobGlnaHRlZCBhcyBzdGF0ZW1lbnRzIGJ1dCBub3QKKyAgb3RoZXIga2V5d29yZHMgKGxpa2UgV0lUSElOIGluIHRoZSBPUEVSQVRJT04gc2VjdGlvbikuCisKKy0gaGlnaGxpZ2h0X3R5cGVzIDogRGVmaW5pdGlvbiBvZiB0aGlzIHZhcmlhYmxlIGNhdXNlcyBzdHJlYW0gdHlwZXMKKyAgbGlrZSB0ZW1wZXJhdHVyZSBvciBwcmVzc3VyZSB0byBiZSBoaWdobGlnaHRlZCBhcyBUeXBlLCBub3QgYXMgYQorICBwbGFpbiBJZGVudGlmaWVyLiBJbmNsdWRlZCBhcmUgdGhlIHR5cGVzIHRoYXQgYXJlIHVzdWFsbHkgZm91bmQgaW4KKyAgdGhlIERFQ0xBUkUgc2VjdGlvbjsgaWYgeW91IGRlZmluZWQgb3duIHR5cGVzLCB5b3UgaGF2ZSB0byBpbmNsdWRlCisgIHRoZW0gaW4gdGhlIHN5bnRheCBmaWxlLgorCistIG9uZWxpbmVfY29tbWVudHMgOiB0aGlzIHZhbHVlIHJhbmdlcyBmcm9tIDEgdG8gMyBhbmQgZGV0ZXJtaW5lcyB0aGUKKyAgaGlnaGxpZ2h0aW5nIG9mICMgc3R5bGUgY29tbWVudHMuCisKKyAgb25lbGluZV9jb21tZW50cyA9IDEgOiBhbGxvdyBub3JtYWwgU3BlZWR1cCBjb2RlIGFmdGVyIGFuIGV2ZW4KKyAgbnVtYmVyIG9mICNzLgorCisgIG9uZWxpbmVfY29tbWVudHMgPSAyIDogc2hvdyBjb2RlIHN0YXJ0aW5nIHdpdGggdGhlIHNlY29uZCAjIGFzCisgIGVycm9yLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuCisKKyAgb25lbGluZV9jb21tZW50cyA9IDMgOiBzaG93IHRoZSB3aG9sZSBsaW5lIGFzIGVycm9yIGlmIGl0IGNvbnRhaW5zCisgIG1vcmUgdGhhbiBvbmUgIy4KKworU2luY2UgZXNwZWNpYWxseSBPUEVSQVRJT04gc2VjdGlvbnMgdGVuZCB0byBiZWNvbWUgdmVyeSBsYXJnZSBkdWUgdG8KK1BSRVNFVHRpbmcgdmFyaWFibGVzLCBzeW5jaW5nIG1heSBiZSBjcml0aWNhbC4gSWYgeW91ciBjb21wdXRlciBpcworZmFzdCBlbm91Z2gsIHlvdSBjYW4gaW5jcmVhc2UgbWlubGluZXMgYW5kL29yIG1heGxpbmVzIG5lYXIgdGhlIGVuZCBvZgordGhlIHN5bnRheCBmaWxlLgorCisKK1RDU0gJCQkJCQkqdGNzaC52aW0qICp0Y3NoLXN5bnRheCoKKworVGhpcyBjb3ZlcnMgdGhlIHNoZWxsIG5hbWVkICJ0Y3NoIi4gIEl0IGlzIGEgc3VwZXJzZXQgb2YgY3NoLiAgU2VlIHxjc2gudmltfAorZm9yIGhvdyB0aGUgZmlsZXR5cGUgaXMgZGV0ZWN0ZWQuCisKK1Rjc2ggZG9lcyBub3QgYWxsb3cgXCIgaW4gc3RyaW5ncyB1bmxlc3MgdGhlICJiYWNrc2xhc2hfcXVvdGUiIHNoZWxsIHZhcmlhYmxlCitpcyBzZXQuIElmIHlvdSB3YW50IFZJTSB0byBhc3N1bWUgdGhhdCBubyBiYWNrc2xhc2ggcXVvdGUgY29uc3RydWN0cyBleGlzdCBhZGQKK3RoaXMgbGluZSB0byB5b3VyIC52aW1yYzogPgorCisJOmxldCB0Y3NoX2JhY2tzbGFzaF9xdW90ZSA9IDAKKworSWYgeW91IG5vdGljZSBoaWdobGlnaHRpbmcgZXJyb3JzIHdoaWxlIHNjcm9sbGluZyBiYWNrd2FyZHMsIHdoaWNoIGFyZSBmaXhlZAord2hlbiByZWRyYXdpbmcgd2l0aCBDVFJMLUwsIHRyeSBzZXR0aW5nIHRoZSAidGNzaF9taW5saW5lcyIgaW50ZXJuYWwgdmFyaWFibGUKK3RvIGEgbGFyZ2VyIG51bWJlcjogPgorCisJOmxldCB0Y3NoX21pbmxpbmVzID0gMTAwCisKK1RoaXMgd2lsbCBtYWtlIHRoZSBzeW50YXggc3luY2hyb25pemF0aW9uIHN0YXJ0IDEwMCBsaW5lcyBiZWZvcmUgdGhlIGZpcnN0CitkaXNwbGF5ZWQgbGluZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUuIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdXNpbmcgYSBsYXJnZXIKK251bWJlciBpcyB0aGF0IHJlZHJhd2luZyBjYW4gYmVjb21lIHNsb3cuCisKKworVEVYCQkJCQkJKnRleC52aW0qICp0ZXgtc3ludGF4KgorCitSdW4tb24gQ29tbWVudHMvTWF0aD8gfgorCitUaGUgdGV4IGhpZ2hsaWdodGluZyBzdXBwb3J0cyBUZVgsIExhVGVYLCBhbmQgc29tZSBBbXNUZVguICBUaGUKK2hpZ2hsaWdodGluZyBzdXBwb3J0cyB0aHJlZSBwcmltYXJ5IHpvbmVzOiBub3JtYWwsIHRleFpvbmUsIGFuZCB0ZXhNYXRoWm9uZS4KK0FsdGhvdWdoIGEgY29uc2lkZXJhYmxlIGVmZm9ydCBoYXMgYmVlbiBtYWRlIHRvIGhhdmUgdGhlc2Ugem9uZXMgdGVybWluYXRlCitwcm9wZXJseSwgem9uZXMgZGVsaW5lYXRlZCBieSAkLi4kIGFuZCAkJC4uJCQgY2Fubm90IGJlIHN5bmNocm9uaXplZCBhcwordGhlcmUncyBubyBkaWZmZXJlbmNlIGJldHdlZW4gc3RhcnQgYW5kIGVuZCBwYXR0ZXJucy4gIENvbnNlcXVlbnRseSwgYQorc3BlY2lhbCAiVGVYIGNvbW1lbnQiIGhhcyBiZWVuIHByb3ZpZGVkID4KKwklc3RvcHpvbmUKK3doaWNoIHdpbGwgZm9yY2libHkgdGVybWluYXRlIHRoZSBoaWdobGlnaHRpbmcgb2YgZWl0aGVyIGEgdGV4Wm9uZSBvciBhCit0ZXhNYXRoWm9uZS4KKworU2xvdyBTeW50YXggSGlnaGxpZ2h0aW5nPyB+CisKK0lmIHlvdSBoYXZlIGEgc2xvdyBjb21wdXRlciwgeW91IG1heSB3aXNoIHRvIHJlZHVjZSB0aGUgdmFsdWVzIGZvciA+CisJOnN5biBzeW5jIG1heGxpbmVzPTIwMAorCTpzeW4gc3luYyBtaW5saW5lcz01MAorKGVzcGVjaWFsbHkgdGhlIGxhdHRlcikuICBJZiB5b3VyIGNvbXB1dGVyIGlzIGZhc3QsIHlvdSBtYXkgd2lzaCB0bworaW5jcmVhc2UgdGhlbS4JVGhpcyBwcmltYXJpbHkgYWZmZWN0cyBzeW5jaHJvbml6aW5nIChpZS4ganVzdCB3aGF0IGdyb3VwLAoraWYgYW55LCBpcyB0aGUgdGV4dCBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4gc3VwcG9zZWQgdG8gYmUgaW4/KS4KKworRXhjZXNzaXZlIEVycm9yIEhpZ2hsaWdodGluZz8gfgorCitUaGUgPHRleC52aW0+IHN1cHBvcnRzIGxleGljYWwgZXJyb3IgY2hlY2tpbmcgb2YgdmFyaW91cyBzb3J0cy4gIFRodXMsCithbHRob3VnaCB0aGUgZXJyb3IgY2hlY2tpbmcgaXMgb2Z0dGltZXMgdmVyeSB1c2VmdWwsIGl0IGNhbiBpbmRpY2F0ZQorZXJyb3JzIHdoZXJlIG5vbmUgYWN0dWFsbHkgYXJlLiAgSWYgdGhpcyBwcm92ZXMgdG8gYmUgYSBwcm9ibGVtIGZvciB5b3UsCit5b3UgbWF5IHB1dCBpbiB5b3VyIDwudmltcmM+IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50OiA+CisJbGV0IHRleF9ub19lcnJvcj0xCithbmQgYWxsIGVycm9yIGNoZWNraW5nIGJ5IDx0ZXgudmltPiB3aWxsIGJlIHN1cHByZXNzZWQuCisKK05lZWQgYSBuZXcgTWF0aCBHcm91cD8gfgorCitJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGEgbmV3IG1hdGggZ3JvdXAgaW4geW91ciBMYVRlWCwgdGhlIGZvbGxvd2luZworY29kZSBzaG93cyB5b3UgYW4gZXhhbXBsZSBhcyB0byBob3cgeW91IG1pZ2h0IGRvIHNvOiA+CisKKyAgICBzeW4gY2x1c3RlciB0ZXhNYXRoWm9uZXMgYWRkPXRleE1hdGhab25lTE9DQUwKKyAgICBzeW4gcmVnaW9uIHRleE1hdGhab25lTE9DQUwgc3RhcnQ9IlxcYmVnaW5ccyp7XHMqTE9DQUxNQVRIXHMqfSIKKyAgICAgICBcIGVuZD0iXFxlbmRccyp7XHMqTE9DQUxNQVRIXHMqfSIga2VlcGVuZAorICAgICAgIFwgY29udGFpbnM9QHRleE1hdGhab25lR3JvdXAKKyAgICBpZiAhZXhpc3RzKCJ0ZXhfbm9fbWF0aCIpCisgICAgIHN5biBzeW5jIG1hdGNoIHRleFN5bmNNYXRoWm9uZUxPQ0FMIGdyb3VwaGVyZSB0ZXhNYXRoWm9uZUxPQ0FMCisgICAgICAgXCAiXFxiZWdpblxzKntccypMT0NBTE1BVEhcKlxzKn0iCisgICAgIHN5biBzeW5jIG1hdGNoIHRleFN5bmNNYXRoWm9uZUxPQ0FMIGdyb3VwdGhlcmUgTk9ORQorICAgICAgIFwgIlxcZW5kXHMqe1xzKkxPQ0FMTUFUSFwqXHMqfSIKKyAgICBlbmRpZgorICAgIGhpIGxpbmsgdGV4TWF0aFpvbmVMT0NBTCB0ZXhNYXRoCis8CitZb3UnbGwgbmVlZCB0byBjaGFuZ2UgTE9DQUxNQVRIIHRvIHRoZSBuYW1lIG9mIHlvdXIgbmV3IG1hdGggZ3JvdXAsCithbmQgdGhlbiB0byBwdXQgaXQgaW50byAudmltL2FmdGVyL3N5bnRheC90ZXgudmltLgorCitTdGFydGluZyBhIE5ldyBTdHlsZT8gfgorCitPbmUgbWF5IHVzZSAiXG1ha2VhdGxldHRlciIgaW4gKi50ZXggZmlsZXMsIHRoZXJlYnkgbWFraW5nIHRoZSB1c2Ugb2YgIkAiIGluCitjb21tYW5kcyBhdmFpbGFibGUuICBIb3dldmVyLCBzaW5jZSB0aGUgKi50ZXggZmlsZSBkb2Vzbid0IGhhdmUgb25lIG9mIHRoZQorZm9sbG93aW5nIHN1ZmZpY2VzOiBzdHkgY2xzIGNsbyBkdHggbHR4LCB0aGUgc3ludGF4IGhpZ2hsaWdodGluZyB3aWxsIGZsYWcKK3N1Y2ggdXNlIG9mIEAgYXMgYW4gZXJyb3IuICBUbyBzb2x2ZSB0aGlzOiA+CisKKwk6bGV0IGI6dGV4X3N0eWxpc2ggPSAxCisJOnNldCBmdD10ZXgKKworUHV0dGluZyAibGV0IGc6dGV4X3N0eWxpc2g9MSIgaW50byB5b3VyIDwudmltcmM+IHdpbGwgbWFrZSA8c3ludGF4L3RleC52aW0+CithbHdheXMgYWNjZXB0IHN1Y2ggdXNlIG9mIEAuCisKKworVEYJCQkJCQkqdGYudmltKiAqdGYtc3ludGF4KgorCitUaGVyZSBpcyBvbmUgb3B0aW9uIGZvciB0aGUgdGYgc3ludGF4IGhpZ2hsaWdodGluZy4KKworRm9yIHN5bmNpbmcsIG1pbmxpbmVzIGRlZmF1bHRzIHRvIDEwMC4JSWYgeW91IHByZWZlciBhbm90aGVyIHZhbHVlLCB5b3UgY2FuCitzZXQgInRmX21pbmxpbmVzIiB0byB0aGUgdmFsdWUgeW91IGRlc2lyZS4gIEV4YW1wbGU6ID4KKworCTpsZXQgdGZfbWlubGluZXMgPSB5b3VyIGNob2ljZQorCisKK1ZJTQkJCQkJCSp2aW0udmltKiAqdmltLXN5bnRheCoKKworVGhlcmUgaXMgYSB0cmFkZW9mZiBiZXR3ZWVuIG1vcmUgYWNjdXJhdGUgc3ludGF4IGhpZ2hsaWdodGluZyB2ZXJzdXMKK3NjcmVlbiB1cGRhdGluZyBzcGVlZC4gIFRvIGltcHJvdmUgYWNjdXJhY3ksIHlvdSBtYXkgd2lzaCB0byBpbmNyZWFzZQordGhlIGc6dmltX21pbmxpbmVzIHZhcmlhYmxlLiAgVGhlIGc6dmltX21heGxpbmVzIHZhcmlhYmxlIG1heSBiZSB1c2VkCit0byBpbXByb3ZlIHNjcmVlbiB1cGRhdGluZyByYXRlcyAoc2VlIHw6c3luLXN5bmN8IGZvciBtb3JlIG9uIHRoaXMpLgorCisJZzp2aW1fbWlubGluZXMgOiB1c2VkIHRvIHNldCBzeW5jaHJvbml6YXRpb24gbWlubGluZXMKKwlnOnZpbV9tYXhsaW5lcyA6IHVzZWQgdG8gc2V0IHN5bmNocm9uaXphdGlvbiBtYXhsaW5lcworCitUaGUgZzp2aW1lbWJlZHNjcmlwdCBvcHRpb24gYWxsb3dzIGZvciBzb21ld2hhdCBmYXN0ZXIgbG9hZGluZyBvZiBzeW50YXgKK2hpZ2hsaWdodGluZyBmb3IgdmltIHNjcmlwdHMgYXQgdGhlIGV4cGVuc2Ugb2Ygc3VwcG9ydGluZyBzeW50YXggaGlnaGxpZ2h0aW5nCitmb3IgZXh0ZXJuYWwgc2NyaXB0aW5nIGxhbmd1YWdlcyAoY3VycmVudGx5IHBlcmwsIHB5dGhvbiwgcnVieSwgYW5kIHRjbCkuCisKKwlnOnZpbWVtYmVkc2NyaXB0ID09IDEgKGRlZmF1bHQpICA8dmltLnZpbT4gd2lsbCBhbGxvdyBoaWdobGlnaHRpbmcKKwlnOnZpbWVtYmVkc2NyaXB0IGRvZXNuJ3QgZXhpc3QJIG9mIHN1cHBvcnRlZCBlbWJlZGRlZCBzY3JpcHRpbmcKKwkJCQkJIGxhbmd1YWdlczogcGVybCwgcHl0aG9uLCBydWJ5IGFuZAorCQkJCQkgdGNsLgorCisJZzp2aW1lbWJlZHNjcmlwdCA9PSAwCQkgU3ludGF4IGhpZ2hsaWdodGluZyBmb3IgZW1iZWRkZWQKKwkJCQkJIHNjcmlwdGluZyBsYW5ndWFnZXMgd2lsbCBub3QgYmUKKwkJCQkJIGxvYWRlZC4KKworCitYRjg2Q09ORklHCQkJCSp4Zjg2Y29uZi52aW0qICp4Zjg2Y29uZi1zeW50YXgqCisKK1RoZSBzeW50YXggb2YgWEY4NkNvbmZpZyBmaWxlIGRpZmZlcnMgaW4gWEZyZWU4NiB2My54IGFuZCB2NC54LiAgQm90aAordmFyaWFudHMgYXJlIHN1cHBvcnRlZC4gIEF1dG9tYXRpYyBkZXRlY3Rpb24gaXMgdXNlZCwgYnV0IGlzIGZhciBmcm9tIHBlcmZlY3QuCitZb3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgdmVyc2lvbiBtYW51YWxseS4gIFNldCB0aGUgdmFyaWFibGUKK3hmODZjb25mX3hmcmVlODZfdmVyc2lvbiB0byAzIG9yIDQgYWNjb3JkaW5nIHRvIHlvdXIgWEZyZWU4NiB2ZXJzaW9uIGluCit5b3VyIC52aW1yYy4gIEV4YW1wbGU6ID4KKwk6bGV0IHhmODZjb25mX3hmcmVlODZfdmVyc2lvbj0zCitXaGVuIHVzaW5nIGEgbWl4IG9mIHZlcnNpb25zLCBzZXQgdGhlIGI6eGY4NmNvbmZfeGZyZWU4Nl92ZXJzaW9uIHZhcmlhYmxlLgorCitOb3RlIHRoYXQgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyBpbiBvcHRpb24gbmFtZXMgYXJlIG5vdCBzdXBwb3J0ZWQuICBVc2UKKyJTeW5jT25HcmVlbiIgaW5zdGVhZCBvZiAiX19zIHluIGNvbiBncl9lX2VfbiIgaWYgeW91IHdhbnQgdGhlIG9wdGlvbiBuYW1lCitoaWdobGlnaHRlZC4KKworCitYTUwJCQkJCQkqeG1sLnZpbSogKnhtbC1zeW50YXgqCisKK1htbCBuYW1lc3BhY2VzIGFyZSBoaWdobGlnaHRlZCBieSBkZWZhdWx0LiBUaGlzIGNhbiBiZSBpbmhpYml0ZWQgYnkKK3NldHRpbmcgYSBnbG9iYWwgdmFyaWFibGU6ID4KKworCTpsZXQgZzp4bWxfbmFtZXNwYWNlX3RyYW5zcGFyZW50PTEKKzwKKwkJCQkJCQkqeG1sLWZvbGRpbmcqCitUaGUgeG1sIHN5bnRheCBmaWxlIHByb3ZpZGVzIHN5bnRheCB8Zm9sZGluZ3wgKHNlZSB8OnN5bi1mb2xkfCkgYmV0d2Vlbgorc3RhcnQgYW5kIGVuZCB0YWdzLiBUaGlzIGNhbiBiZSB0dXJuZWQgb24gYnkgPgorCisJOmxldCBnOnhtbF9zeW50YXhfZm9sZGluZyA9IDEKKwk6c2V0IGZvbGRtZXRob2Q9c3ludGF4CisKK05vdGU6IHN5bnRheCBmb2xkaW5nIG1pZ2h0IHNsb3cgZG93biBzeW50YXggaGlnaGxpZ2h0aW5nIHNpZ25pZmljYW50bHksCitlc3BlY2lhbGx5IGZvciBsYXJnZSBmaWxlcy4KKworCitYIFBpeG1hcHMgKFhQTSkJCQkJCSp4cG0udmltKiAqeHBtLXN5bnRheCoKKworeHBtLnZpbSBjcmVhdGVzIGl0cyBzeW50YXggaXRlbXMgZHluYW1pY2FsbHkgYmFzZWQgdXBvbiB0aGUgY29udGVudHMgb2YgdGhlCitYUE0gZmlsZS4gIFRodXMgaWYgeW91IG1ha2UgY2hhbmdlcyBlLmcuIGluIHRoZSBjb2xvciBzcGVjaWZpY2F0aW9uIHN0cmluZ3MsCit5b3UgaGF2ZSB0byBzb3VyY2UgaXQgYWdhaW4gZS5nLiB3aXRoICI6c2V0IHN5bj14cG0iLgorCitUbyBjb3B5IGEgcGl4ZWwgd2l0aCBvbmUgb2YgdGhlIGNvbG9ycywgeWFuayBhICJwaXhlbCIgd2l0aCAieWwiIGFuZCBpbnNlcnQgaXQKK3NvbWV3aGVyZSBlbHNlIHdpdGggIlAiLgorCitEbyB5b3Ugd2FudCB0byBkcmF3IHdpdGggdGhlIG1vdXNlPyAgVHJ5IHRoZSBmb2xsb3dpbmc6ID4KKyAgIDpmdW5jdGlvbiEgR2V0UGl4ZWwoKQorICAgOiAgIGxldCBjID0gZ2V0bGluZShsaW5lKCIuIikpW2NvbCgiLiIpIC0gMV0KKyAgIDogICBlY2hvIGMKKyAgIDogICBleGUgIm5vcmVtYXAgPExlZnRNb3VzZT4gPExlZnRNb3VzZT5yIi5jCisgICA6ICAgZXhlICJub3JlbWFwIDxMZWZ0RHJhZz4JPExlZnRNb3VzZT5yIi5jCisgICA6ZW5kZnVuY3Rpb24KKyAgIDpub3JlbWFwIDxSaWdodE1vdXNlPiA8TGVmdE1vdXNlPjpjYWxsIEdldFBpeGVsKCk8Q1I+CisgICA6c2V0IGd1aWN1cnNvcj1uOmhvcjIwCSAgICIgdG8gc2VlIHRoZSBjb2xvciBiZW5lYXRoIHRoZSBjdXJzb3IKK1RoaXMgdHVybnMgdGhlIHJpZ2h0IGJ1dHRvbiBpbnRvIGEgcGlwZXR0ZSBhbmQgdGhlIGxlZnQgYnV0dG9uIGludG8gYSBwZW4uCitJdCB3aWxsIHdvcmsgd2l0aCBYUE0gZmlsZXMgdGhhdCBoYXZlIG9uZSBjaGFyYWN0ZXIgcGVyIHBpeGVsIG9ubHkgYW5kIHlvdQorbXVzdCBub3QgY2xpY2sgb3V0c2lkZSBvZiB0aGUgcGl4ZWwgc3RyaW5ncywgYnV0IGZlZWwgZnJlZSB0byBpbXByb3ZlIGl0LgorCitJdCB3aWxsIGxvb2sgbXVjaCBiZXR0ZXIgd2l0aCBhIGZvbnQgaW4gYSBxdWFkcmF0aWMgY2VsbCBzaXplLCBlLmcuIGZvciBYOiA+CisJOnNldCBndWlmb250PS0qLWNsZWFuLW1lZGl1bS1yLSotKi04LSotKi0qLSotODAtKgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIERlZmluaW5nIGEgc3ludGF4CQkJCQkqOnN5bi1kZWZpbmUqICpFNDEwKgorCitWaW0gdW5kZXJzdGFuZHMgdGhyZWUgdHlwZXMgb2Ygc3ludGF4IGl0ZW1zOgorCisxLiBLZXl3b3JkLgorICAgSXQgY2FuIG9ubHkgY29udGFpbiBrZXl3b3JkIGNoYXJhY3RlcnMsIGFjY29yZGluZyB0byB0aGUgJ2lza2V5d29yZCcKKyAgIG9wdGlvbi4gIEl0IGNhbm5vdCBjb250YWluIG90aGVyIHN5bnRheCBpdGVtcy4gIEl0IHdpbGwgb25seSBtYXRjaCB3aXRoIGEKKyAgIGNvbXBsZXRlIHdvcmQgKHRoZXJlIGFyZSBubyBrZXl3b3JkIGNoYXJhY3RlcnMgYmVmb3JlIG9yIGFmdGVyIHRoZSBtYXRjaCkuCisgICBUaGUga2V5d29yZCAiaWYiIHdvdWxkIG1hdGNoIGluICJpZihhPWIpIiwgYnV0IG5vdCBpbiAiaWZkZWYgeCIsIGJlY2F1c2UKKyAgICIoIiBpcyBub3QgYSBrZXl3b3JkIGNoYXJhY3RlciBhbmQgImQiIGlzLgorCisyLiBNYXRjaC4KKyAgIFRoaXMgaXMgYSBtYXRjaCB3aXRoIGEgc2luZ2xlIHJlZ2V4cCBwYXR0ZXJuLgorCiszLiBSZWdpb24uCisgICBUaGlzIHN0YXJ0cyBhdCBhIG1hdGNoIG9mIHRoZSAic3RhcnQiIHJlZ2V4cCBwYXR0ZXJuIGFuZCBlbmRzIHdpdGggYSBtYXRjaAorICAgd2l0aCB0aGUgImVuZCIgcmVnZXhwIHBhdHRlcm4uICBBbnkgb3RoZXIgdGV4dCBjYW4gYXBwZWFyIGluIGJldHdlZW4uICBBCisgICAic2tpcCIgcmVnZXhwIHBhdHRlcm4gY2FuIGJlIHVzZWQgdG8gYXZvaWQgbWF0Y2hpbmcgdGhlICJlbmQiIHBhdHRlcm4uCisKK1NldmVyYWwgc3ludGF4IElURU1zIGNhbiBiZSBwdXQgaW50byBvbmUgc3ludGF4IEdST1VQLglGb3IgYSBzeW50YXggZ3JvdXAKK3lvdSBjYW4gZ2l2ZSBoaWdobGlnaHRpbmcgYXR0cmlidXRlcy4gIEZvciBleGFtcGxlLCB5b3UgY291bGQgaGF2ZSBhbiBpdGVtCit0byBkZWZpbmUgYSAiLyogLi4gKi8iIGNvbW1lbnQgYW5kIGFub3RoZXIgb25lIHRoYXQgZGVmaW5lcyBhICIvLyAuLiIgY29tbWVudCwKK2FuZCBwdXQgdGhlbSBib3RoIGluIHRoZSAiQ29tbWVudCIgZ3JvdXAuICBZb3UgY2FuIHRoZW4gc3BlY2lmeSB0aGF0IGEKKyJDb21tZW50IiB3aWxsIGJlIGluIGJvbGQgZm9udCBhbmQgaGF2ZSBhIGJsdWUgY29sb3IuICBZb3UgYXJlIGZyZWUgdG8gbWFrZQorb25lIGhpZ2hsaWdodCBncm91cCBmb3Igb25lIHN5bnRheCBpdGVtLCBvciBwdXQgYWxsIGl0ZW1zIGludG8gb25lIGdyb3VwLgorVGhpcyBkZXBlbmRzIG9uIGhvdyB5b3Ugd2FudCB0byBzcGVjaWZ5IHlvdXIgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMuICBQdXR0aW5nCitlYWNoIGl0ZW0gaW4gaXRzIG93biBncm91cCByZXN1bHRzIGluIGhhdmluZyB0byBzcGVjaWZ5IHRoZSBoaWdobGlnaHRpbmcKK2ZvciBhIGxvdCBvZiBncm91cHMuCisKK05vdGUgdGhhdCBhIHN5bnRheCBncm91cCBhbmQgYSBoaWdobGlnaHQgZ3JvdXAgYXJlIHNpbWlsYXIuICBGb3IgYSBoaWdobGlnaHQKK2dyb3VwIHlvdSB3aWxsIGhhdmUgZ2l2ZW4gaGlnaGxpZ2h0IGF0dHJpYnV0ZXMuICBUaGVzZSBhdHRyaWJ1dGVzIHdpbGwgYmUgdXNlZAorZm9yIHRoZSBzeW50YXggZ3JvdXAgd2l0aCB0aGUgc2FtZSBuYW1lLgorCitJbiBjYXNlIG1vcmUgdGhhbiBvbmUgaXRlbSBtYXRjaGVzIGF0IHRoZSBzYW1lIHBvc2l0aW9uLCB0aGUgb25lIHRoYXQgd2FzCitkZWZpbmVkIExBU1Qgd2lucy4gIFRodXMgeW91IGNhbiBvdmVycmlkZSBwcmV2aW91c2x5IGRlZmluZWQgc3ludGF4IGl0ZW1zIGJ5Cit1c2luZyBhbiBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgc2FtZSB0ZXh0LiAgQnV0IGEga2V5d29yZCBhbHdheXMgZ29lcyBiZWZvcmUgYQorbWF0Y2ggb3IgcmVnaW9uLiAgQW5kIGEga2V5d29yZCB3aXRoIG1hdGNoaW5nIGNhc2UgYWx3YXlzIGdvZXMgYmVmb3JlIGEKK2tleXdvcmQgd2l0aCBpZ25vcmluZyBjYXNlLgorCisKK1BSSU9SSVRZCQkJCQkJKjpzeW4tcHJpb3JpdHkqCisKK1doZW4gc2V2ZXJhbCBzeW50YXggaXRlbXMgbWF5IG1hdGNoLCB0aGVzZSBydWxlcyBhcmUgdXNlZDoKKworMS4gV2hlbiBtdWx0aXBsZSBNYXRjaCBvciBSZWdpb24gaXRlbXMgc3RhcnQgaW4gdGhlIHNhbWUgcG9zaXRpb24sIHRoZSBpdGVtCisgICBkZWZpbmVkIGxhc3QgaGFzIHByaW9yaXR5LgorMi4gQSBLZXl3b3JkIGhhcyBwcmlvcml0eSBvdmVyIE1hdGNoIGFuZCBSZWdpb24gaXRlbXMuCiszLiBBbiBpdGVtIHRoYXQgc3RhcnRzIGluIGFuIGVhcmxpZXIgcG9zaXRpb24gaGFzIHByaW9yaXR5IG92ZXIgaXRlbXMgdGhhdAorICAgc3RhcnQgaW4gbGF0ZXIgcG9zaXRpb25zLgorCisKK0RFRklOSU5HIENBU0UJCQkJCQkqOnN5bi1jYXNlKiAqRTM5MCoKKworOnN5W250YXhdIGNhc2UgW21hdGNofGlnbm9yZV0KKwlUaGlzIGRlZmluZXMgaWYgdGhlIGZvbGxvd2luZyAiOnN5bnRheCIgY29tbWFuZHMgd2lsbCB3b3JrIHdpdGgKKwltYXRjaGluZyBjYXNlLCB3aGVuIHVzaW5nICJtYXRjaCIsIG9yIHdpdGggaWdub3JpbmcgY2FzZSwgd2hlbiB1c2luZworCSJpZ25vcmUiLiAgTm90ZSB0aGF0IGFueSBpdGVtcyBiZWZvcmUgdGhpcyBhcmUgbm90IGFmZmVjdGVkLCBhbmQgYWxsCisJaXRlbXMgdW50aWwgdGhlIG5leHQgIjpzeW50YXggY2FzZSIgY29tbWFuZCBhcmUgYWZmZWN0ZWQuCisKKworREVGSU5JTkcgS0VZV09SRFMJCQkJCSo6c3luLWtleXdvcmQqCisKKzpzeVtudGF4XSBrZXl3b3JkIHtncm91cC1uYW1lfSBbe29wdGlvbnN9XSB7a2V5d29yZH0gLi4gW3tvcHRpb25zfV0KKworCVRoaXMgZGVmaW5lcyBhIG51bWJlciBvZiBrZXl3b3Jkcy4KKworCXtncm91cC1uYW1lfQlJcyBhIHN5bnRheCBncm91cCBuYW1lIHN1Y2ggYXMgIkNvbW1lbnQiLgorCVt7b3B0aW9uc31dCVNlZSB8OnN5bi1hcmd1bWVudHN8IGJlbG93LgorCXtrZXl3b3JkfSAuLglJcyBhIGxpc3Qgb2Yga2V5d29yZHMgd2hpY2ggYXJlIHBhcnQgb2YgdGhpcyBncm91cC4KKworCUV4YW1wbGU6ID4KKyAgOnN5bnRheCBrZXl3b3JkICAgVHlwZSAgIGludCBsb25nIGNoYXIKKzwKKwlUaGUge29wdGlvbnN9IGNhbiBiZSBnaXZlbiBhbnl3aGVyZSBpbiB0aGUgbGluZS4gIFRoZXkgd2lsbCBhcHBseSB0bworCWFsbCBrZXl3b3JkcyBnaXZlbiwgYWxzbyBmb3Igb3B0aW9ucyB0aGF0IGNvbWUgYWZ0ZXIgYSBrZXl3b3JkLgorCVRoZXNlIGV4YW1wbGVzIGRvIGV4YWN0bHkgdGhlIHNhbWU6ID4KKyAgOnN5bnRheCBrZXl3b3JkICAgVHlwZSAgIGNvbnRhaW5lZCBpbnQgbG9uZyBjaGFyCisgIDpzeW50YXgga2V5d29yZCAgIFR5cGUgICBpbnQgbG9uZyBjb250YWluZWQgY2hhcgorICA6c3ludGF4IGtleXdvcmQgICBUeXBlICAgaW50IGxvbmcgY2hhciBjb250YWluZWQKKzwKKwlXaGVuIHlvdSBoYXZlIGEga2V5d29yZCB3aXRoIGFuIG9wdGlvbmFsIHRhaWwsIGxpa2UgRXggY29tbWFuZHMgaW4KKwlWaW0sIHlvdSBjYW4gcHV0IHRoZSBvcHRpb25hbCBjaGFyYWN0ZXJzIGluc2lkZSBbXSwgdG8gZGVmaW5lIGFsbCB0aGUKKwl2YXJpYXRpb25zIGF0IG9uY2U6ID4KKyAgOnN5bnRheCBrZXl3b3JkICAgdmltQ29tbWFuZAkgYWJbYnJldmlhdGVdIG5bZXh0XQorPAorCURvbid0IGZvcmdldCB0aGF0IGEga2V5d29yZCBjYW4gb25seSBiZSByZWNvZ25pemVkIGlmIGFsbCB0aGUKKwljaGFyYWN0ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgJ2lza2V5d29yZCcgb3B0aW9uLiAgSWYgb25lIGNoYXJhY3RlcgorCWlzbid0LCB0aGUga2V5d29yZCB3aWxsIG5ldmVyIGJlIHJlY29nbml6ZWQuCisJTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGNhbiBhbHNvIGJlIHVzZWQuICBUaGVzZSBkbyBub3QgaGF2ZSB0byBiZSBpbgorCSdpc2tleXdvcmQnLgorCisJQSBrZXl3b3JkIGFsd2F5cyBoYXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gYSBtYXRjaCBvciByZWdpb24sIHRoZQorCWtleXdvcmQgaXMgdXNlZCBpZiBtb3JlIHRoYW4gb25lIGl0ZW0gbWF0Y2hlcy4JS2V5d29yZHMgZG8gbm90IG5lc3QKKwlhbmQgYSBrZXl3b3JkIGNhbid0IGNvbnRhaW4gYW55dGhpbmcgZWxzZS4KKworCU5vdGUgdGhhdCB3aGVuIHlvdSBoYXZlIGEga2V5d29yZCB0aGF0IGlzIHRoZSBzYW1lIGFzIGFuIG9wdGlvbiAoZXZlbgorCW9uZSB0aGF0IGlzbid0IGFsbG93ZWQgaGVyZSksIHlvdSBjYW4gbm90IHVzZSBpdC4gIFVzZSBhIG1hdGNoCisJaW5zdGVhZC4KKworCVRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGtleXdvcmQgaXMgODAgY2hhcmFjdGVycy4KKworCVRoZSBzYW1lIGtleXdvcmQgY2FuIGJlIGRlZmluZWQgbXVsdGlwbGUgdGltZXMsIHdoZW4gaXRzIGNvbnRhaW5tZW50CisJZGlmZmVycy4gIEZvciBleGFtcGxlLCB5b3UgY2FuIGRlZmluZSB0aGUga2V5d29yZCBvbmNlIG5vdCBjb250YWluZWQKKwlhbmQgdXNlIG9uZSBoaWdobGlnaHQgZ3JvdXAsIGFuZCBvbmNlIGNvbnRhaW5lZCwgYW5kIHVzZSBhIGRpZmZlcmVudAorCWhpZ2hsaWdodCBncm91cC4gRXhhbXBsZTogPgorICA6c3luIGtleXdvcmQgdmltQ29tbWFuZCB0YWcKKyAgOnN5biBrZXl3b3JkIHZpbVNldHRpbmcgY29udGFpbmVkIHRhZworPAlXaGVuIGZpbmRpbmcgInRhZyIgb3V0c2lkZSBvZiBhbnkgc3ludGF4IGl0ZW0sIHRoZSAidmltQ29tbWFuZCIKKwloaWdobGlnaHQgZ3JvdXAgaXMgdXNlZC4gIFdoZW4gZmluZGluZyAidGFnIiBpbiBhIHN5bnRheCBpdGVtIHRoYXQKKwljb250YWlucyAidmltU2V0dGluZyIsIHRoZSAidmltU2V0dGluZyIgZ3JvdXAgaXMgdXNlZC4KKworCitERUZJTklORyBNQVRDSEVTCQkJCQkqOnN5bi1tYXRjaCoKKworOnN5W250YXhdIG1hdGNoIHtncm91cC1uYW1lfSBbe29wdGlvbnN9XSBbZXhjbHVkZW5sXSB7cGF0dGVybn0gW3tvcHRpb25zfV0KKworCVRoaXMgZGVmaW5lcyBvbmUgbWF0Y2guCisKKwl7Z3JvdXAtbmFtZX0JCUEgc3ludGF4IGdyb3VwIG5hbWUgc3VjaCBhcyAiQ29tbWVudCIuCisJW3tvcHRpb25zfV0JCVNlZSB8OnN5bi1hcmd1bWVudHN8IGJlbG93LgorCVtleGNsdWRlbmxdCQlEb24ndCBtYWtlIGEgcGF0dGVybiB3aXRoIHRoZSBlbmQtb2YtbGluZSAiJCIKKwkJCQlleHRlbmQgYSBjb250YWluaW5nIG1hdGNoIG9yIHJlZ2lvbi4gIE11c3QgYmUKKwkJCQlnaXZlbiBiZWZvcmUgdGhlIHBhdHRlcm4uIHw6c3luLWV4Y2x1ZGVubHwKKwl7cGF0dGVybn0JCVRoZSBzZWFyY2ggcGF0dGVybiB0aGF0IGRlZmluZXMgdGhlIG1hdGNoLgorCQkJCVNlZSB8OnN5bi1wYXR0ZXJufCBiZWxvdy4KKwkJCQlOb3RlIHRoYXQgdGhlIHBhdHRlcm4gbWF5IG1hdGNoIG1vcmUgdGhhbiBvbmUKKwkJCQlsaW5lLCB3aGljaCBtYWtlcyB0aGUgbWF0Y2ggZGVwZW5kIG9uIHdoZXJlCisJCQkJVmltIHN0YXJ0cyBzZWFyY2hpbmcgZm9yIHRoZSBwYXR0ZXJuLiAgWW91CisJCQkJbmVlZCB0byBtYWtlIHN1cmUgc3luY2luZyB0YWtlcyBjYXJlIG9mIHRoaXMuCisKKwlFeGFtcGxlIChtYXRjaCBhIGNoYXJhY3RlciBjb25zdGFudCk6ID4KKyAgOnN5bnRheCBtYXRjaCBDaGFyYWN0ZXIgLycuJy9ocz1zKzEsaGU9ZS0xCis8CisKK0RFRklOSU5HIFJFR0lPTlMJKjpzeW4tcmVnaW9uKiAqOnN5bi1zdGFydCogKjpzeW4tc2tpcCogKjpzeW4tZW5kKgorCQkJCQkJCSpFMzk4KiAqRTM5OSoKKzpzeVtudGF4XSByZWdpb24ge2dyb3VwLW5hbWV9IFt7b3B0aW9uc31dCisJCVttYXRjaGdyb3VwPXtncm91cC1uYW1lfV0KKwkJW2tlZXBlbmRdCisJCVtleHRlbmRdCisJCVtleGNsdWRlbmxdCisJCXN0YXJ0PXtzdGFydF9wYXR0ZXJufSAuLgorCQlbc2tpcD17c2tpcF9wYXR0ZXJufV0KKwkJZW5kPXtlbmRfcGF0dGVybn0gLi4KKwkJW3tvcHRpb25zfV0KKworCVRoaXMgZGVmaW5lcyBvbmUgcmVnaW9uLiAgSXQgbWF5IHNwYW4gc2V2ZXJhbCBsaW5lcy4KKworCXtncm91cC1uYW1lfQkJQSBzeW50YXggZ3JvdXAgbmFtZSBzdWNoIGFzICJDb21tZW50Ii4KKwlbe29wdGlvbnN9XQkJU2VlIHw6c3luLWFyZ3VtZW50c3wgYmVsb3cuCisJW21hdGNoZ3JvdXA9e2dyb3VwLW5hbWV9XSAgVGhlIHN5bnRheCBncm91cCB0byB1c2UgZm9yIHRoZSBmb2xsb3dpbmcKKwkJCQlzdGFydCBvciBlbmQgcGF0dGVybiBtYXRjaGVzIG9ubHkuICBOb3QgdXNlZAorCQkJCWZvciB0aGUgdGV4dCBpbiBiZXR3ZWVuIHRoZSBtYXRjaGVkIHN0YXJ0IGFuZAorCQkJCWVuZCBwYXR0ZXJucy4gIFVzZSBOT05FIHRvIHJlc2V0IHRvIG5vdCB1c2luZworCQkJCWEgZGlmZmVyZW50IGdyb3VwIGZvciB0aGUgc3RhcnQgb3IgZW5kIG1hdGNoLgorCQkJCVNlZSB8OnN5bi1tYXRjaGdyb3VwfC4KKwlrZWVwZW5kCQkJRG9uJ3QgYWxsb3cgY29udGFpbmVkIG1hdGNoZXMgdG8gZ28gcGFzdCBhCisJCQkJbWF0Y2ggd2l0aCB0aGUgZW5kIHBhdHRlcm4uICBTZWUKKwkJCQl8OnN5bi1rZWVwZW5kfC4KKwlleHRlbmQJCQlPdmVycmlkZSBhICJrZWVwZW5kIiBmb3IgYW4gaXRlbSB0aGlzIHJlZ2lvbgorCQkJCWlzIGNvbnRhaW5lZCBpbi4gU2VlIHw6c3luLWV4dGVuZHwuCisJZXhjbHVkZW5sCQlEb24ndCBtYWtlIGEgcGF0dGVybiB3aXRoIHRoZSBlbmQtb2YtbGluZSAiJCIKKwkJCQlleHRlbmQgYSBjb250YWluaW5nIG1hdGNoIG9yIGl0ZW0uICBPbmx5CisJCQkJdXNlZnVsIGZvciBlbmQgcGF0dGVybnMuICBNdXN0IGJlIGdpdmVuIGJlZm9yZQorCQkJCXRoZSBwYXR0ZXJucyBpdCBhcHBsaWVzIHRvLiB8OnN5bi1leGNsdWRlbmx8CisJc3RhcnQ9e3N0YXJ0X3BhdHRlcm59CVRoZSBzZWFyY2ggcGF0dGVybiB0aGF0IGRlZmluZXMgdGhlIHN0YXJ0IG9mCisJCQkJdGhlIHJlZ2lvbi4gIFNlZSB8OnN5bi1wYXR0ZXJufCBiZWxvdy4KKwlza2lwPXtza2lwX3BhdHRlcm59CVRoZSBzZWFyY2ggcGF0dGVybiB0aGF0IGRlZmluZXMgdGV4dCBpbnNpZGUKKwkJCQl0aGUgcmVnaW9uIHdoZXJlIG5vdCB0byBsb29rIGZvciB0aGUgZW5kCisJCQkJcGF0dGVybi4gIFNlZSB8OnN5bi1wYXR0ZXJufCBiZWxvdy4KKwllbmQ9e2VuZF9wYXR0ZXJufQlUaGUgc2VhcmNoIHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRoZSBlbmQgb2YKKwkJCQl0aGUgcmVnaW9uLiAgU2VlIHw6c3luLXBhdHRlcm58IGJlbG93LgorCisJRXhhbXBsZTogPgorICA6c3ludGF4IHJlZ2lvbiBTdHJpbmcgICBzdGFydD0rIisgIHNraXA9K1xcIisgIGVuZD0rIisKKzwKKwlUaGUgc3RhcnQvc2tpcC9lbmQgcGF0dGVybnMgYW5kIHRoZSBvcHRpb25zIGNhbiBiZSBnaXZlbiBpbiBhbnkgb3JkZXIuCisJVGhlcmUgY2FuIGJlIHplcm8gb3Igb25lIHNraXAgcGF0dGVybi4JVGhlcmUgbXVzdCBiZSBvbmUgb3IgbW9yZQorCXN0YXJ0IGFuZCBlbmQgcGF0dGVybnMuICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBvbWl0IHRoZSBza2lwCisJcGF0dGVybiwgYnV0IHlvdSBtdXN0IGdpdmUgYXQgbGVhc3Qgb25lIHN0YXJ0IGFuZCBvbmUgZW5kIHBhdHRlcm4uICBJdAorCWlzIGFsbG93ZWQgdG8gaGF2ZSB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlcXVhbCBzaWduCisJKGFsdGhvdWdoIGl0IG1vc3RseSBsb29rcyBiZXR0ZXIgd2l0aG91dCB3aGl0ZSBzcGFjZSkuCisKKwlXaGVuIG1vcmUgdGhhbiBvbmUgc3RhcnQgcGF0dGVybiBpcyBnaXZlbiwgYSBtYXRjaCB3aXRoIG9uZSBvZiB0aGVzZQorCWlzIHN1ZmZpY2llbnQuCVRoaXMgbWVhbnMgdGhlcmUgaXMgYW4gT1IgcmVsYXRpb24gYmV0d2VlbiB0aGUgc3RhcnQKKwlwYXR0ZXJucy4gIFRoZSBsYXN0IG9uZSB0aGF0IG1hdGNoZXMgaXMgdXNlZC4gIFRoZSBzYW1lIGlzIHRydWUgZm9yCisJdGhlIGVuZCBwYXR0ZXJucy4KKworCVRoZSBzZWFyY2ggZm9yIHRoZSBlbmQgcGF0dGVybiBzdGFydHMgcmlnaHQgYWZ0ZXIgdGhlIHN0YXJ0IHBhdHRlcm4uCisJT2Zmc2V0cyBhcmUgbm90IHVzZWQgZm9yIHRoaXMuCVRoaXMgaW1wbGllcyB0aGF0IHRoZSBtYXRjaCBmb3IgdGhlCisJZW5kIHBhdHRlcm4gd2lsbCBuZXZlciBvdmVybGFwIHdpdGggdGhlIHN0YXJ0IHBhdHRlcm4uCisKKwlUaGUgc2tpcCBhbmQgZW5kIHBhdHRlcm4gY2FuIG1hdGNoIGFjcm9zcyBsaW5lIGJyZWFrcywgYnV0IHNpbmNlIHRoZQorCXNlYXJjaCBmb3IgdGhlIHBhdHRlcm4gY2FuIHN0YXJ0IGluIGFueSBsaW5lIGl0IG9mdGVuIGRvZXMgbm90IGRvIHdoYXQKKwl5b3Ugd2FudC4gIFRoZSBza2lwIHBhdHRlcm4gZG9lc24ndCBhdm9pZCBhIG1hdGNoIG9mIGFuIGVuZCBwYXR0ZXJuIGluCisJdGhlIG5leHQgbGluZS4JVXNlIHNpbmdsZS1saW5lIHBhdHRlcm5zIHRvIGF2b2lkIHRyb3VibGUuCisKKwlOb3RlOiBUaGUgZGVjaXNpb24gdG8gc3RhcnQgYSByZWdpb24gaXMgb25seSBiYXNlZCBvbiBhIG1hdGNoaW5nIHN0YXJ0CisJcGF0dGVybi4gIFRoZXJlIGlzIG5vIGNoZWNrIGZvciBhIG1hdGNoaW5nIGVuZCBwYXR0ZXJuLiAgVGhpcyBkb2VzIE5PVAorCXdvcms6ID4KKwkJOnN5biByZWdpb24gRmlyc3QgIHN0YXJ0PSIoIiAgZW5kPSI6IgorCQk6c3luIHJlZ2lvbiBTZWNvbmQgc3RhcnQ9IigiICBlbmQ9IjsiCis8CVRoZSBTZWNvbmQgYWx3YXlzIG1hdGNoZXMgYmVmb3JlIHRoZSBGaXJzdCAobGFzdCBkZWZpbmVkIHBhdHRlcm4gaGFzCisJaGlnaGVyIHByaW9yaXR5KS4gIFRoZSBTZWNvbmQgcmVnaW9uIHRoZW4gY29udGludWVzIHVudGlsIHRoZSBuZXh0CisJJzsnLCBubyBtYXR0ZXIgaWYgdGhlcmUgaXMgYSAnOicgYmVmb3JlIGl0LiAgVXNpbmcgYSBtYXRjaCBkb2VzIHdvcms6ID4KKwkJOnN5biBtYXRjaCBGaXJzdCAgIihcXy5cey19OiIKKwkJOnN5biBtYXRjaCBTZWNvbmQgIihcXy5cey19OyIKKzwJVGhpcyBwYXR0ZXJuIG1hdGNoZXMgYW55IGNoYXJhY3RlciBvciBsaW5lIGJyZWFrIHdpdGggIlxfLiIgYW5kCisJcmVwZWF0cyB0aGF0IHdpdGggIlx7LX0iIChyZXBlYXQgYXMgZmV3IGFzIHBvc3NpYmxlKS4KKworCQkJCQkJCSo6c3luLWtlZXBlbmQqCisJQnkgZGVmYXVsdCwgYSBjb250YWluZWQgbWF0Y2ggY2FuIG9ic2N1cmUgYSBtYXRjaCBmb3IgdGhlIGVuZCBwYXR0ZXJuLgorCVRoaXMgaXMgdXNlZnVsIGZvciBuZXN0aW5nLiAgRm9yIGV4YW1wbGUsIGEgcmVnaW9uIHRoYXQgc3RhcnRzIHdpdGgKKwkieyIgYW5kIGVuZHMgd2l0aCAifSIsIGNhbiBjb250YWluIGFub3RoZXIgcmVnaW9uLiAgQW4gZW5jb3VudGVyZWQgIn0iCisJd2lsbCB0aGVuIGVuZCB0aGUgY29udGFpbmVkIHJlZ2lvbiwgYnV0IG5vdCB0aGUgb3V0ZXIgcmVnaW9uOgorCSAgICB7CQlzdGFydHMgb3V0ZXIgInt9IiByZWdpb24KKwkJewlzdGFydHMgY29udGFpbmVkICJ7fSIgcmVnaW9uCisJCX0JZW5kcyBjb250YWluZWQgInt9IiByZWdpb24KKwkgICAgfQkJZW5kcyBvdXRlciAie30gcmVnaW9uCisJSWYgeW91IGRvbid0IHdhbnQgdGhpcywgdGhlICJrZWVwZW5kIiBhcmd1bWVudCB3aWxsIG1ha2UgdGhlIG1hdGNoaW5nCisJb2YgYW4gZW5kIHBhdHRlcm4gb2YgdGhlIG91dGVyIHJlZ2lvbiBhbHNvIGVuZCBhbnkgY29udGFpbmVkIGl0ZW0uCisJVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIG5lc3QgdGhlIHNhbWUgcmVnaW9uLCBidXQgYWxsb3dzIGZvcgorCWNvbnRhaW5lZCBpdGVtcyB0byBoaWdobGlnaHQgcGFydHMgb2YgdGhlIGVuZCBwYXR0ZXJuLCB3aXRob3V0IGNhdXNpbmcKKwl0aGF0IHRvIHNraXAgdGhlIG1hdGNoIHdpdGggdGhlIGVuZCBwYXR0ZXJuLiAgRXhhbXBsZTogPgorICA6c3luIG1hdGNoICB2aW1Db21tZW50ICsiW14iXVwrJCsKKyAgOnN5biByZWdpb24gdmltQ29tbWFuZCBzdGFydD0ic2V0IiBlbmQ9IiQiIGNvbnRhaW5zPXZpbUNvbW1lbnQga2VlcGVuZAorPAlUaGUgImtlZXBlbmQiIG1ha2VzIHRoZSB2aW1Db21tYW5kIGFsd2F5cyBlbmQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSwKKwlldmVuIHRob3VnaCB0aGUgY29udGFpbmVkIHZpbUNvbW1lbnQgaW5jbHVkZXMgYSBtYXRjaCB3aXRoIHRoZSA8RU9MPi4KKworCVdoZW4gImtlZXBlbmQiIGlzIG5vdCB1c2VkLCBhIG1hdGNoIHdpdGggYW4gZW5kIHBhdHRlcm4gaXMgcmV0cmllZAorCWFmdGVyIGVhY2ggY29udGFpbmVkIG1hdGNoLiAgV2hlbiAia2VlcGVuZCIgaXMgaW5jbHVkZWQsIHRoZSBmaXJzdAorCWVuY291bnRlcmVkIG1hdGNoIHdpdGggYW4gZW5kIHBhdHRlcm4gaXMgdXNlZCwgdHJ1bmNhdGluZyBhbnkKKwljb250YWluZWQgbWF0Y2hlcy4KKwkJCQkJCQkqOnN5bi1leHRlbmQqCisJVGhlICJrZWVwZW5kIiBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSB1c2luZyB0aGUgImV4dGVuZCIgYXJndW1lbnQuCisJV2hlbiBhbiBpdGVtIHdpdGggImV4dGVuZCIgaXMgY29udGFpbmVkIGluIGFuIGl0ZW0gdGhhdCB1c2VzCisJImtlZXBlbmQiLCB0aGUgImtlZXBlbmQiIGlzIGlnbm9yZWQgYW5kIHRoZSBjb250YWluaW5nIHJlZ2lvbiB3aWxsIGJlCisJZXh0ZW5kZWQuCisJVGhpcyBjYW4gYmUgdXNlZCB0byBoYXZlIHNvbWUgY29udGFpbmVkIGl0ZW1zIGV4dGVuZCBhIHJlZ2lvbiB3aGlsZQorCW90aGVycyBkb24ndC4gIEV4YW1wbGU6ID4KKworICAgOnN5biByZWdpb24gaHRtbFJlZiBzdGFydD0rPGE+KyBlbmQ9KzwvYT4rIGtlZXBlbmQgY29udGFpbnM9aHRtbEl0ZW0saHRtbFNjcmlwdAorICAgOnN5biBtYXRjaCBodG1sSXRlbSArPFtePl0qPisgY29udGFpbmVkCisgICA6c3luIHJlZ2lvbiBodG1sU2NyaXB0IHN0YXJ0PSs8c2NyaXB0KyBlbmQ9Kzwvc2NyaXB0W14+XSo+KyBjb250YWluZWQgZXh0ZW5kCisKKzwJSGVyZSB0aGUgaHRtbEl0ZW0gaXRlbSBkb2VzIG5vdCBtYWtlIHRoZSBodG1sUmVmIGl0ZW0gY29udGludWUKKwlmdXJ0aGVyLCBpdCBpcyBvbmx5IHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSA8PiBpdGVtcy4gIFRoZSBodG1sU2NyaXB0CisJaXRlbSBkb2VzIGV4dGVuZCB0aGUgaHRtbFJlZiBpdGVtLgorCisJQW5vdGhlciBleGFtcGxlOiA+CisgICA6c3luIHJlZ2lvbiB4bWxGb2xkIHN0YXJ0PSI8YT4iIGVuZD0iPC9hPiIgZm9sZCB0cmFuc3BhcmVudCBrZWVwZW5kIGV4dGVuZAorPAlUaGlzIGRlZmluZXMgYSByZWdpb24gd2l0aCAia2VlcGVuZCIsIHNvIHRoYXQgaXRzIGVuZCBjYW5ub3QgYmUKKwljaGFuZ2VkIGJ5IGNvbnRhaW5lZCBpdGVtcywgbGlrZSB3aGVuIHRoZSAiPC9hPiIgaXMgbWF0Y2hlZCB0bworCWhpZ2hsaWdodCBpdCBkaWZmZXJlbnRseS4gIEJ1dCB3aGVuIHRoZSB4bWxGb2xkIHJlZ2lvbiBpcyBuZXN0ZWQgKGl0CisJaW5jbHVkZXMgaXRzZWxmKSwgdGhlICJleHRlbmQiIGFwcGxpZXMsIHNvIHRoYXQgdGhlICI8L2E+IiBvZiBhIG5lc3RlZAorCXJlZ2lvbiBvbmx5IGVuZHMgdGhhdCByZWdpb24sIGFuZCBub3QgdGhlIG9uZSBpdCBpcyBjb250YWluZWQgaW4uCisKKwkJCQkJCQkqOnN5bi1leGNsdWRlbmwqCisJV2hlbiBhIHBhdHRlcm4gZm9yIGEgbWF0Y2ggb3IgZW5kIHBhdHRlcm4gb2YgYSByZWdpb24gaW5jbHVkZXMgYSAnJCcKKwl0byBtYXRjaCB0aGUgZW5kLW9mLWxpbmUsIGl0IHdpbGwgbWFrZSBhIHJlZ2lvbiBpdGVtIHRoYXQgaXQgaXMKKwljb250YWluZWQgaW4gY29udGludWUgb24gdGhlIG5leHQgbGluZS4gIEZvciBleGFtcGxlLCBhIG1hdGNoIHdpdGgKKwkiXFwkIiAoYmFja3NsYXNoIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpIGNhbiBtYWtlIGEgcmVnaW9uIGNvbnRpbnVlCisJdGhhdCB3b3VsZCBub3JtYWxseSBzdG9wIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICBUaGlzIGlzIHRoZSBkZWZhdWx0CisJYmVoYXZpb3IuICBJZiB0aGlzIGlzIG5vdCB3YW50ZWQsIHRoZXJlIGFyZSB0d28gd2F5cyB0byBhdm9pZCBpdDoKKwkxLiBVc2UgImtlZXBlbmQiIGZvciB0aGUgY29udGFpbmluZyBpdGVtLiAgVGhpcyB3aWxsIGtlZXAgYWxsCisJICAgY29udGFpbmVkIG1hdGNoZXMgZnJvbSBleHRlbmRpbmcgdGhlIG1hdGNoIG9yIHJlZ2lvbi4gIEl0IGNhbiBiZQorCSAgIHVzZWQgd2hlbiBhbGwgY29udGFpbmVkIGl0ZW1zIG11c3Qgbm90IGV4dGVuZCB0aGUgY29udGFpbmluZyBpdGVtLgorCTIuIFVzZSAiZXhjbHVkZW5sIiBpbiB0aGUgY29udGFpbmVkIGl0ZW0uICBUaGlzIHdpbGwga2VlcCB0aGF0IG1hdGNoCisJICAgZnJvbSBleHRlbmRpbmcgdGhlIGNvbnRhaW5pbmcgbWF0Y2ggb3IgcmVnaW9uLiAgSXQgY2FuIGJlIHVzZWQgaWYKKwkgICBvbmx5IHNvbWUgY29udGFpbmVkIGl0ZW1zIG11c3Qgbm90IGV4dGVuZCB0aGUgY29udGFpbmluZyBpdGVtLgorCSAgICJleGNsdWRlbmwiIG11c3QgYmUgZ2l2ZW4gYmVmb3JlIHRoZSBwYXR0ZXJuIGl0IGFwcGxpZXMgdG8uCisKKwkJCQkJCQkqOnN5bi1tYXRjaGdyb3VwKgorCSJtYXRjaGdyb3VwIiBjYW4gYmUgdXNlZCB0byBoaWdobGlnaHQgdGhlIHN0YXJ0IGFuZC9vciBlbmQgcGF0dGVybgorCWRpZmZlcmVudGx5IHRoYW4gdGhlIGJvZHkgb2YgdGhlIHJlZ2lvbi4gIEV4YW1wbGU6ID4KKyAgOnN5bnRheCByZWdpb24gU3RyaW5nIG1hdGNoZ3JvdXA9UXVvdGUgc3RhcnQ9KyIrICBza2lwPStcXCIrCWVuZD0rIisKKzwJVGhpcyB3aWxsIGhpZ2hsaWdodCB0aGUgcXVvdGVzIHdpdGggdGhlICJRdW90ZSIgZ3JvdXAsIGFuZCB0aGUgdGV4dCBpbgorCWJldHdlZW4gd2l0aCB0aGUgIlN0cmluZyIgZ3JvdXAuCisJVGhlICJtYXRjaGdyb3VwIiBpcyB1c2VkIGZvciBhbGwgc3RhcnQgYW5kIGVuZCBwYXR0ZXJucyB0aGF0IGZvbGxvdywKKwl1bnRpbCB0aGUgbmV4dCAibWF0Y2hncm91cCIuICBVc2UgIm1hdGNoZ3JvdXA9Tk9ORSIgdG8gZ28gYmFjayB0byBub3QKKwl1c2luZyBhIG1hdGNoZ3JvdXAuCisKKwlJbiBhIHN0YXJ0IG9yIGVuZCBwYXR0ZXJuIHRoYXQgaXMgaGlnaGxpZ2h0ZWQgd2l0aCAibWF0Y2hncm91cCIgdGhlCisJY29udGFpbmVkIGl0ZW1zIG9mIHRoZSByZWdpb24gYXJlIG5vdCB1c2VkLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBhdm9pZAorCXRoYXQgYSBjb250YWluZWQgaXRlbSBtYXRjaGVzIGluIHRoZSBzdGFydCBvciBlbmQgcGF0dGVybiBtYXRjaC4gIFdoZW4KKwl1c2luZyAidHJhbnNwYXJlbnQiLCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIGEgc3RhcnQgb3IgZW5kIHBhdHRlcm4KKwltYXRjaCB0aGF0IGlzIGhpZ2hsaWdodGVkIHdpdGggIm1hdGNoZ3JvdXAiLgorCisJSGVyZSBpcyBhbiBleGFtcGxlLCB3aGljaCBoaWdobGlnaHRzIHRocmVlIGxldmVscyBvZiBwYXJlbnRoZXNlcyBpbgorCWRpZmZlcmVudCBjb2xvcnM6ID4KKyAgIDpzeSByZWdpb24gcGFyMSBtYXRjaGdyb3VwPXBhcjEgc3RhcnQ9LygvIGVuZD0vKS8gY29udGFpbnM9cGFyMgorICAgOnN5IHJlZ2lvbiBwYXIyIG1hdGNoZ3JvdXA9cGFyMiBzdGFydD0vKC8gZW5kPS8pLyBjb250YWlucz1wYXIzIGNvbnRhaW5lZAorICAgOnN5IHJlZ2lvbiBwYXIzIG1hdGNoZ3JvdXA9cGFyMyBzdGFydD0vKC8gZW5kPS8pLyBjb250YWlucz1wYXIxIGNvbnRhaW5lZAorICAgOmhpIHBhcjEgY3Rlcm1mZz1yZWQgZ3VpZmc9cmVkCisgICA6aGkgcGFyMiBjdGVybWZnPWJsdWUgZ3VpZmc9Ymx1ZQorICAgOmhpIHBhcjMgY3Rlcm1mZz1kYXJrZ3JlZW4gZ3VpZmc9ZGFya2dyZWVuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gOnN5bnRheCBhcmd1bWVudHMJCQkJCSo6c3luLWFyZ3VtZW50cyoKKworVGhlIDpzeW50YXggY29tbWFuZHMgdGhhdCBkZWZpbmUgc3ludGF4IGl0ZW1zIHRha2UgYSBudW1iZXIgb2YgYXJndW1lbnRzLgorVGhlIGNvbW1vbiBvbmVzIGFyZSBleHBsYWluZWQgaGVyZS4gIFRoZSBhcmd1bWVudHMgbWF5IGJlIGdpdmVuIGluIGFueSBvcmRlcgorYW5kIG1heSBiZSBtaXhlZCB3aXRoIHBhdHRlcm5zLgorCitOb3QgYWxsIGNvbW1hbmRzIGFjY2VwdCBhbGwgYXJndW1lbnRzLglUaGlzIHRhYmxlIHNob3dzIHdoaWNoIGFyZ3VtZW50cworY2FuIG5vdCBiZSB1c2VkIGZvciBhbGwgY29tbWFuZHM6CisJCQkJCQkJKkUzOTUqICpFMzk2KgorCQkgICAgY29udGFpbnMgIG9uZWxpbmUJZm9sZCAgZGlzcGxheSAgZXh0ZW5kIH4KKzpzeW50YXgga2V5d29yZAkJIC0JIC0JIC0JIC0JIC0KKzpzeW50YXggbWF0Y2gJCXllcwkgLQl5ZXMJeWVzCXllcworOnN5bnRheCByZWdpb24JCXllcwl5ZXMJeWVzCXllcwl5ZXMKKworVGhlc2UgYXJndW1lbnRzIGNhbiBiZSB1c2VkIGZvciBhbGwgdGhyZWUgY29tbWFuZHM6CisJY29udGFpbmVkCisJY29udGFpbmVkaW4KKwluZXh0Z3JvdXAKKwl0cmFuc3BhcmVudAorCXNraXB3aGl0ZQorCXNraXBubAorCXNraXBlbXB0eQorCisKK2NvbnRhaW5lZAkJCQkJCSo6c3luLWNvbnRhaW5lZCoKKworV2hlbiB0aGUgImNvbnRhaW5lZCIgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoaXMgaXRlbSB3aWxsIG5vdCBiZSByZWNvZ25pemVkIGF0Cit0aGUgdG9wIGxldmVsLCBidXQgb25seSB3aGVuIGl0IGlzIG1lbnRpb25lZCBpbiB0aGUgImNvbnRhaW5zIiBmaWVsZCBvZgorYW5vdGhlciBtYXRjaC4JRXhhbXBsZTogPgorICAgOnN5bnRheCBrZXl3b3JkIFRvZG8gICAgVE9ETyAgICBjb250YWluZWQKKyAgIDpzeW50YXggbWF0Y2ggICBDb21tZW50ICIvLy4qIiAgY29udGFpbnM9VG9kbworCisKK2Rpc3BsYXkJCQkJCQkJKjpzeW4tZGlzcGxheSoKKworSWYgdGhlICJkaXNwbGF5IiBhcmd1bWVudCBpcyBnaXZlbiwgdGhpcyBpdGVtIHdpbGwgYmUgc2tpcHBlZCB3aGVuIHRoZQorZGV0ZWN0ZWQgaGlnaGxpZ2h0aW5nIHdpbGwgbm90IGJlIGRpc3BsYXllZC4gIFRoaXMgd2lsbCBzcGVlZCB1cCBoaWdobGlnaHRpbmcsCitieSBza2lwcGluZyB0aGlzIGl0ZW0gd2hlbiBvbmx5IGZpbmRpbmcgdGhlIHN5bnRheCBzdGF0ZSBmb3IgdGhlIHRleHQgdGhhdCBpcwordG8gYmUgZGlzcGxheWVkLgorCitHZW5lcmFsbHksIHlvdSBjYW4gdXNlICJkaXNwbGF5IiBmb3IgbWF0Y2ggYW5kIHJlZ2lvbiBpdGVtcyB0aGF0IG1lZXQgdGhlc2UKK2NvbmRpdGlvbnM6CistIFRoZSBpdGVtIGRvZXMgbm90IGNvbnRpbnVlIHBhc3QgdGhlIGVuZCBvZiBhIGxpbmUuICBFeGFtcGxlIGZvciBDOiBBIHJlZ2lvbgorICBmb3IgYSAiLyoiIGNvbW1lbnQgY2FuJ3QgY29udGFpbiAiZGlzcGxheSIsIGJlY2F1c2UgaXQgY29udGludWVzIG9uIHRoZSBuZXh0CisgIGxpbmUuCistIFRoZSBpdGVtIGRvZXMgbm90IGNvbnRhaW4gaXRlbXMgdGhhdCBjb250aW51ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUgb3IKKyAgbWFrZSBpdCBjb250aW51ZSBvbiB0aGUgbmV4dCBsaW5lLgorLSBUaGUgaXRlbSBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUgb2YgYW55IGl0ZW0gaXQgaXMgY29udGFpbmVkIGluLiAgRXhhbXBsZQorICBmb3IgQzogQSBtYXRjaCB3aXRoICJcXCQiIGluIGEgcHJlcHJvY2Vzc29yIG1hdGNoIGNhbid0IGhhdmUgImRpc3BsYXkiLAorICBiZWNhdXNlIGl0IG1heSBtYWtlIHRoYXQgcHJlcHJvY2Vzc29yIG1hdGNoIHNob3J0ZXIuCistIFRoZSBpdGVtIGRvZXMgbm90IGFsbG93IG90aGVyIGl0ZW1zIHRvIG1hdGNoIHRoYXQgZGlkbid0IG1hdGNoIG90aGVyd2lzZSwKKyAgYW5kIHRoYXQgaXRlbSBtYXkgZXh0ZW5kIHRoZSBtYXRjaCB0b28gZmFyLiAgRXhhbXBsZSBmb3IgQzogQSBtYXRjaCBmb3IgYQorICAiLy8iIGNvbW1lbnQgY2FuJ3QgdXNlICJkaXNwbGF5IiwgYmVjYXVzZSBhICIvKiIgaW5zaWRlIHRoYXQgY29tbWVudCB3b3VsZAorICBtYXRjaCB0aGVuIGFuZCBzdGFydCBhIGNvbW1lbnQgd2hpY2ggZXh0ZW5kcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKK0V4YW1wbGVzLCBmb3IgdGhlIEMgbGFuZ3VhZ2UsIHdoZXJlICJkaXNwbGF5IiBjYW4gYmUgdXNlZDoKKy0gbWF0Y2ggd2l0aCBhIG51bWJlcgorLSBtYXRjaCB3aXRoIGEgbGFiZWwKKworCit0cmFuc3BhcmVudAkJCQkJCSo6c3luLXRyYW5zcGFyZW50KgorCitJZiB0aGUgInRyYW5zcGFyZW50IiBhcmd1bWVudCBpcyBnaXZlbiwgdGhpcyBpdGVtIHdpbGwgbm90IGJlIGhpZ2hsaWdodGVkCitpdHNlbGYsIGJ1dCB3aWxsIHRha2UgdGhlIGhpZ2hsaWdodGluZyBvZiB0aGUgaXRlbSBpdCBpcyBjb250YWluZWQgaW4uCVRoaXMKK2lzIHVzZWZ1bCBmb3Igc3ludGF4IGl0ZW1zIHRoYXQgZG9uJ3QgbmVlZCBhbnkgaGlnaGxpZ2h0aW5nIGJ1dCBhcmUgdXNlZAorb25seSB0byBza2lwIG92ZXIgYSBwYXJ0IG9mIHRoZSB0ZXh0LgorCitUaGUgImNvbnRhaW5zPSIgYXJndW1lbnQgaXMgYWxzbyBpbmhlcml0ZWQgZnJvbSB0aGUgaXRlbSBpdCBpcyBjb250YWluZWQgaW4sCit1bmxlc3MgYSAiY29udGFpbnMiIGFyZ3VtZW50IGlzIGdpdmVuIGZvciB0aGUgdHJhbnNwYXJlbnQgaXRlbSBpdHNlbGYuCVRvCithdm9pZCB0aGF0IHVud2FudGVkIGl0ZW1zIGFyZSBjb250YWluZWQsIHVzZSAiY29udGFpbnM9Tk9ORSIuICBFeGFtcGxlLCB3aGljaAoraGlnaGxpZ2h0cyB3b3JkcyBpbiBzdHJpbmdzLCBidXQgbWFrZXMgYW4gZXhjZXB0aW9uIGZvciAidmltIjogPgorCTpzeW4gbWF0Y2ggbXlTdHJpbmcgLydbXiddKicvIGNvbnRhaW5zPW15V29yZCxteVZpbQorCTpzeW4gbWF0Y2ggbXlXb3JkICAgL1w8W2Etel0qXD4vIGNvbnRhaW5lZAorCTpzeW4gbWF0Y2ggbXlWaW0gICAgL1w8dmltXD4vIHRyYW5zcGFyZW50IGNvbnRhaW5lZCBjb250YWlucz1OT05FCisJOmhpIGxpbmsgbXlTdHJpbmcgU3RyaW5nCisJOmhpIGxpbmsgbXlXb3JkICAgQ29tbWVudAorU2luY2UgdGhlICJteVZpbSIgbWF0Y2ggY29tZXMgYWZ0ZXIgIm15V29yZCIgaXQgaXMgdGhlIHByZWZlcnJlZCBtYXRjaCAobGFzdAorbWF0Y2ggaW4gdGhlIHNhbWUgcG9zaXRpb24gb3ZlcnJ1bGVzIGFuIGVhcmxpZXIgb25lKS4gIFRoZSAidHJhbnNwYXJlbnQiCithcmd1bWVudCBtYWtlcyB0aGUgIm15VmltIiBtYXRjaCB1c2UgdGhlIHNhbWUgaGlnaGxpZ2h0aW5nIGFzICJteVN0cmluZyIuICBCdXQKK2l0IGRvZXMgbm90IGNvbnRhaW4gYW55dGhpbmcuICBJZiB0aGUgImNvbnRhaW5zPU5PTkUiIGFyZ3VtZW50IHdvdWxkIGJlIGxlZnQKK291dCwgdGhlbiAibXlWaW0iIHdvdWxkIHVzZSB0aGUgY29udGFpbnMgYXJndW1lbnQgZnJvbSBteVN0cmluZyBhbmQgYWxsb3cKKyJteVdvcmQiIHRvIGJlIGNvbnRhaW5lZCwgd2hpY2ggd2lsbCBiZSBoaWdobGlnaHRlZCBhcyBhIENvbnN0YW50LiAgVGhpcworaGFwcGVucyBiZWNhdXNlIGEgY29udGFpbmVkIG1hdGNoIGRvZXNuJ3QgbWF0Y2ggaW5zaWRlIGl0c2VsZiBpbiB0aGUgc2FtZQorcG9zaXRpb24sIHRodXMgdGhlICJteVZpbSIgbWF0Y2ggZG9lc24ndCBvdmVycnVsZSB0aGUgIm15V29yZCIgbWF0Y2ggaGVyZS4KKworV2hlbiB5b3UgbG9vayBhdCB0aGUgY29sb3JlZCB0ZXh0LCBpdCBpcyBsaWtlIGxvb2tpbmcgYXQgbGF5ZXJzIG9mIGNvbnRhaW5lZAoraXRlbXMuCVRoZSBjb250YWluZWQgaXRlbSBpcyBvbiB0b3Agb2YgdGhlIGl0ZW0gaXQgaXMgY29udGFpbmVkIGluLCB0aHVzIHlvdQorc2VlIHRoZSBjb250YWluZWQgaXRlbS4gIFdoZW4gYSBjb250YWluZWQgaXRlbSBpcyB0cmFuc3BhcmVudCwgeW91IGNhbiBsb29rCit0aHJvdWdoLCB0aHVzIHlvdSBzZWUgdGhlIGl0ZW0gaXQgaXMgY29udGFpbmVkIGluLiAgSW4gYSBwaWN0dXJlOgorCisJCWxvb2sgZnJvbSBoZXJlCisKKwkgICAgfAl8ICAgfAl8ICAgfAl8CisJICAgIFYJViAgIFYJViAgIFYJVgorCisJICAgICAgIHh4eHgJICB5eXkJCW1vcmUgY29udGFpbmVkIGl0ZW1zCisJICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uCWNvbnRhaW5lZCBpdGVtICh0cmFuc3BhcmVudCkKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQlmaXJzdCBpdGVtCisKK1RoZSAneCcsICd5JyBhbmQgJz0nIHJlcHJlc2VudCBhIGhpZ2hsaWdodGVkIHN5bnRheCBpdGVtLiAgVGhlICcuJyByZXByZXNlbnQgYQordHJhbnNwYXJlbnQgZ3JvdXAuCisKK1doYXQgeW91IHNlZSBpczoKKworCT09PT09PT14eHh4PT09PT09PXl5eT09PT09PT09CisKK1RodXMgeW91IGxvb2sgdGhyb3VnaCB0aGUgdHJhbnNwYXJlbnQgIi4uLi4iLgorCisKK29uZWxpbmUJCQkJCQkJKjpzeW4tb25lbGluZSoKKworVGhlICJvbmVsaW5lIiBhcmd1bWVudCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVnaW9uIGRvZXMgbm90IGNyb3NzIGEgbGluZQorYm91bmRhcnkuICBJdCBtdXN0IG1hdGNoIGNvbXBsZXRlbHkgaW4gdGhlIGN1cnJlbnQgbGluZS4gIEhvd2V2ZXIsIHdoZW4gdGhlCityZWdpb24gaGFzIGEgY29udGFpbmVkIGl0ZW0gdGhhdCBkb2VzIGNyb3NzIGEgbGluZSBib3VuZGFyeSwgaXQgY29udGludWVzIG9uCit0aGUgbmV4dCBsaW5lIGFueXdheS4gIEEgY29udGFpbmVkIGl0ZW0gY2FuIGJlIHVzZWQgdG8gcmVjb2duaXplIGEgbGluZQorY29udGludWF0aW9uIHBhdHRlcm4uICBCdXQgdGhlICJlbmQiIHBhdHRlcm4gbXVzdCBzdGlsbCBtYXRjaCBpbiB0aGUgZmlyc3QKK2xpbmUsIG90aGVyd2lzZSB0aGUgcmVnaW9uIGRvZXNuJ3QgZXZlbiBzdGFydC4KKworV2hlbiB0aGUgc3RhcnQgcGF0dGVybiBpbmNsdWRlcyBhICJcbiIgdG8gbWF0Y2ggYW4gZW5kLW9mLWxpbmUsIHRoZSBlbmQKK3BhdHRlcm4gbXVzdCBiZSBmb3VuZCBpbiB0aGUgc2FtZSBsaW5lIGFzIHdoZXJlIHRoZSBzdGFydCBwYXR0ZXJuIGVuZHMuICBUaGUKK2VuZCBwYXR0ZXJuIG1heSBhbHNvIGluY2x1ZGUgYW4gZW5kLW9mLWxpbmUuICBUaHVzIHRoZSAib25lbGluZSIgYXJndW1lbnQKK21lYW5zIHRoYXQgdGhlIGVuZCBvZiB0aGUgc3RhcnQgcGF0dGVybiBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBlbmQgcGF0dGVybiBtdXN0CitiZSB3aXRoaW4gb25lIGxpbmUuICBUaGlzIGNhbid0IGJlIGNoYW5nZWQgYnkgYSBza2lwIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGEKK2xpbmUgYnJlYWsuCisKKworZm9sZAkJCQkJCQkqOnN5bi1mb2xkKgorCitUaGUgImZvbGQiIGFyZ3VtZW50IG1ha2VzIHRoZSBmb2xkIGxldmVsIGluY3JlYXNlZCBieSBvbmUgZm9yIHRoaXMgaXRlbS4KK0V4YW1wbGU6ID4KKyAgIDpzeW4gcmVnaW9uIG15Rm9sZCBzdGFydD0ieyIgZW5kPSJ9IiB0cmFuc3BhcmVudCBmb2xkCisgICA6c3luIHN5bmMgZnJvbXN0YXJ0CisgICA6c2V0IGZvbGRtZXRob2Q9c3ludGF4CitUaGlzIHdpbGwgbWFrZSBlYWNoIHt9IGJsb2NrIGZvcm0gb25lIGZvbGQuCisKK1RoZSBmb2xkIHdpbGwgc3RhcnQgb24gdGhlIGxpbmUgd2hlcmUgdGhlIGl0ZW0gc3RhcnRzLCBhbmQgZW5kIHdoZXJlIHRoZSBpdGVtCitlbmRzLiAgSWYgdGhlIHN0YXJ0IGFuZCBlbmQgYXJlIHdpdGhpbiB0aGUgc2FtZSBsaW5lLCB0aGVyZSBpcyBubyBmb2xkLgorVGhlICdmb2xkbmVzdG1heCcgb3B0aW9uIGxpbWl0cyB0aGUgbmVzdGluZyBvZiBzeW50YXggZm9sZHMuCit7bm90IGF2YWlsYWJsZSB3aGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aG91dCB8K2ZvbGRpbmd8IGZlYXR1cmV9CisKKworCQkJKjpzeW4tY29udGFpbnMqICpFNDA1KiAqRTQwNiogKkU0MDcqICpFNDA4KiAqRTQwOSoKK2NvbnRhaW5zPXtncm91cG5hbWV9LC4uCisKK1RoZSAiY29udGFpbnMiIGFyZ3VtZW50IGlzIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBzeW50YXggZ3JvdXAgbmFtZXMuICBUaGVzZQorZ3JvdXBzIHdpbGwgYmUgYWxsb3dlZCB0byBiZWdpbiBpbnNpZGUgdGhlIGl0ZW0gKHRoZXkgbWF5IGV4dGVuZCBwYXN0IHRoZQorY29udGFpbmluZyBncm91cCdzIGVuZCkuICBUaGlzIGFsbG93cyBmb3IgcmVjdXJzaXZlIG5lc3Rpbmcgb2YgbWF0Y2hlcyBhbmQKK3JlZ2lvbnMuICBJZiB0aGVyZSBpcyBubyAiY29udGFpbnMiIGFyZ3VtZW50LCBubyBncm91cHMgd2lsbCBiZSBjb250YWluZWQgaW4KK3RoaXMgaXRlbS4gIFRoZSBncm91cCBuYW1lcyBkbyBub3QgbmVlZCB0byBiZSBkZWZpbmVkIGJlZm9yZSB0aGV5IGNhbiBiZSB1c2VkCitoZXJlLgorCitjb250YWlucz1BTEwKKwkJSWYgdGhlIG9ubHkgaXRlbSBpbiB0aGUgY29udGFpbnMgbGlzdCBpcyAiQUxMIiwgdGhlbiBhbGwKKwkJZ3JvdXBzIHdpbGwgYmUgYWNjZXB0ZWQgaW5zaWRlIHRoZSBpdGVtLgorCitjb250YWlucz1BTExCVVQse2dyb3VwLW5hbWV9LC4uCisJCUlmIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb250YWlucyBsaXN0IGlzICJBTExCVVQiLCB0aGVuIGFsbAorCQlncm91cHMgd2lsbCBiZSBhY2NlcHRlZCBpbnNpZGUgdGhlIGl0ZW0sIGV4Y2VwdCB0aGUgb25lcyB0aGF0CisJCWFyZSBsaXN0ZWQuICBFeGFtcGxlOiA+CisgIDpzeW50YXggcmVnaW9uIEJsb2NrIHN0YXJ0PSJ7IiBlbmQ9In0iIC4uLiBjb250YWlucz1BTExCVVQsRnVuY3Rpb24KKworY29udGFpbnM9VE9QCisJCUlmIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb250YWlucyBsaXN0IGlzICJUT1AiLCB0aGVuIGFsbAorCQlncm91cHMgd2lsbCBiZSBhY2NlcHRlZCB0aGF0IGRvbid0IGhhdmUgdGhlICJjb250YWluZWQiCisJCWFyZ3VtZW50LgorY29udGFpbnM9VE9QLHtncm91cC1uYW1lfSwuLgorCQlMaWtlICJUT1AiLCBidXQgZXhjbHVkaW5nIHRoZSBncm91cHMgdGhhdCBhcmUgbGlzdGVkLgorCitjb250YWlucz1DT05UQUlORUQKKwkJSWYgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbnRhaW5zIGxpc3QgaXMgIkNPTlRBSU5FRCIsIHRoZW4KKwkJYWxsIGdyb3VwcyB3aWxsIGJlIGFjY2VwdGVkIHRoYXQgaGF2ZSB0aGUgImNvbnRhaW5lZCIKKwkJYXJndW1lbnQuCitjb250YWlucz1DT05UQUlORUQse2dyb3VwLW5hbWV9LC4uCisJCUxpa2UgIkNPTlRBSU5FRCIsIGJ1dCBleGNsdWRpbmcgdGhlIGdyb3VwcyB0aGF0IGFyZQorCQlsaXN0ZWQuCisKKworVGhlIHtncm91cC1uYW1lfSBpbiB0aGUgImNvbnRhaW5zIiBsaXN0IGNhbiBiZSBhIHBhdHRlcm4uICBBbGwgZ3JvdXAgbmFtZXMKK3RoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gd2lsbCBiZSBpbmNsdWRlZCAob3IgZXhjbHVkZWQsIGlmICJBTExCVVQiIGlzIHVzZWQpLgorVGhlIHBhdHRlcm4gY2Fubm90IGNvbnRhaW4gd2hpdGUgc3BhY2Ugb3IgYSAnLCcuICBFeGFtcGxlOiA+CisgICAuLi4gY29udGFpbnM9Q29tbWVudC4qLEtleXdbMC0zXQorVGhlIG1hdGNoaW5nIHdpbGwgYmUgZG9uZSBhdCBtb21lbnQgdGhlIHN5bnRheCBjb21tYW5kIGlzIGV4ZWN1dGVkLiAgR3JvdXBzCit0aGF0IGFyZSBkZWZpbmVkIGxhdGVyIHdpbGwgbm90IGJlIG1hdGNoZWQuICBBbHNvLCBpZiB0aGUgY3VycmVudCBzeW50YXgKK2NvbW1hbmQgZGVmaW5lcyBhIG5ldyBncm91cCwgaXQgaXMgbm90IG1hdGNoZWQuICBCZSBjYXJlZnVsOiBXaGVuIHB1dHRpbmcKK3N5bnRheCBjb21tYW5kcyBpbiBhIGZpbGUgeW91IGNhbid0IHJlbHkgb24gZ3JvdXBzIE5PVCBiZWluZyBkZWZpbmVkLCBiZWNhdXNlCit0aGUgZmlsZSBtYXkgaGF2ZSBiZWVuIHNvdXJjZWQgYmVmb3JlLCBhbmQgIjpzeW4gY2xlYXIiIGRvZXNuJ3QgcmVtb3ZlIHRoZQorZ3JvdXAgbmFtZXMuCisKK1RoZSBjb250YWluZWQgZ3JvdXBzIHdpbGwgYWxzbyBtYXRjaCBpbiB0aGUgc3RhcnQgYW5kIGVuZCBwYXR0ZXJucyBvZiBhCityZWdpb24uICBJZiB0aGlzIGlzIG5vdCB3YW50ZWQsIHRoZSAibWF0Y2hncm91cCIgYXJndW1lbnQgY2FuIGJlIHVzZWQKK3w6c3luLW1hdGNoZ3JvdXB8LiAgVGhlICJtcz0iIGFuZCAibWU9IiBvZmZzZXRzIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUKK3JlZ2lvbiB3aGVyZSBjb250YWluZWQgaXRlbXMgZG8gbWF0Y2guCU5vdGUgdGhhdCB0aGlzIG1heSBhbHNvIGxpbWl0IHRoZQorYXJlYSB0aGF0IGlzIGhpZ2hsaWdodGVkCisKKworY29udGFpbmVkaW49e2dyb3VwbmFtZX0uLi4JCQkJKjpzeW4tY29udGFpbmVkaW4qCisKK1RoZSAiY29udGFpbmVkaW4iIGFyZ3VtZW50IGlzIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBzeW50YXggZ3JvdXAgbmFtZXMuICBUaGUKK2l0ZW0gd2lsbCBiZSBhbGxvd2VkIHRvIGJlZ2luIGluc2lkZSB0aGVzZSBncm91cHMuICBUaGlzIHdvcmtzIGFzIGlmIHRoZQorY29udGFpbmluZyBpdGVtIGhhcyBhICJjb250YWlucz0iIGFyZ3VtZW50IHRoYXQgaW5jbHVkZXMgdGhpcyBpdGVtLgorCitUaGUge2dyb3VwbmFtZX0uLi4gY2FuIGJlIHVzZWQganVzdCBsaWtlIGZvciAiY29udGFpbnMiLCBhcyBleHBsYWluZWQgYWJvdmUuCisKK1RoaXMgaXMgdXNlZnVsIHdoZW4gYWRkaW5nIGEgc3ludGF4IGl0ZW0gYWZ0ZXJ3YXJkcy4gIEFuIGl0ZW0gY2FuIGJlIHRvbGQgdG8KK2JlIGluY2x1ZGVkIGluc2lkZSBhbiBhbHJlYWR5IGV4aXN0aW5nIGl0ZW0sIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGRlZmluaXRpb24KK29mIHRoYXQgaXRlbS4gIEZvciBleGFtcGxlLCB0byBoaWdobGlnaHQgYSB3b3JkIGluIGEgQyBjb21tZW50IGFmdGVyIGxvYWRpbmcKK3RoZSBDIHN5bnRheDogPgorCTpzeW4ga2V5d29yZCBteXdvcmQgSEVMUCBjb250YWluZWRpbj1jQ29tbWVudCBjb250YWluZWQKK05vdGUgdGhhdCAiY29udGFpbmVkIiBpcyBhbHNvIHVzZWQsIHRvIGF2b2lkIHRoYXQgdGhlIGl0ZW0gbWF0Y2hlcyBhdCB0aGUgdG9wCitsZXZlbC4KKworTWF0Y2hlcyBmb3IgImNvbnRhaW5lZGluIiBhcmUgYWRkZWQgdG8gdGhlIG90aGVyIHBsYWNlcyB3aGVyZSB0aGUgaXRlbSBjYW4KK2FwcGVhci4gIEEgImNvbnRhaW5zIiBhcmd1bWVudCBtYXkgYWxzbyBiZSBhZGRlZCBhcyB1c3VhbC4gIERvbid0IGZvcmdldCB0aGF0CitrZXl3b3JkcyBuZXZlciBjb250YWluIGFub3RoZXIgaXRlbSwgdGh1cyBhZGRpbmcgdGhlbSB0byAiY29udGFpbmVkaW4iIHdvbid0Cit3b3JrLgorCisKK25leHRncm91cD17Z3JvdXBuYW1lfSwuLgkJCQkqOnN5bi1uZXh0Z3JvdXAqCisKK1RoZSAibmV4dGdyb3VwIiBhcmd1bWVudCBpcyBmb2xsb3dlZCBieSBhIGxpc3Qgb2Ygc3ludGF4IGdyb3VwIG5hbWVzLAorc2VwYXJhdGVkIGJ5IGNvbW1hcyAoanVzdCBsaWtlIHdpdGggImNvbnRhaW5zIiwgc28geW91IGNhbiBhbHNvIHVzZSBwYXR0ZXJucykuCisKK0lmIHRoZSAibmV4dGdyb3VwIiBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIG1lbnRpb25lZCBzeW50YXggZ3JvdXBzIHdpbGwgYmUKK3RyaWVkIGZvciBhIG1hdGNoLCBhZnRlciB0aGUgbWF0Y2ggb3IgcmVnaW9uIGVuZHMuICBJZiBub25lIG9mIHRoZSBncm91cHMgaGF2ZQorYSBtYXRjaCwgaGlnaGxpZ2h0aW5nIGNvbnRpbnVlcyBub3JtYWxseS4gIElmIHRoZXJlIGlzIGEgbWF0Y2gsIHRoaXMgZ3JvdXAKK3dpbGwgYmUgdXNlZCwgZXZlbiB3aGVuIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlICJjb250YWlucyIgZmllbGQgb2YgdGhlCitjdXJyZW50IGdyb3VwLglUaGlzIGlzIGxpa2UgZ2l2aW5nIHRoZSBtZW50aW9uZWQgZ3JvdXAgcHJpb3JpdHkgb3ZlciBhbGwKK290aGVyIGdyb3Vwcy4gIEV4YW1wbGU6ID4KKyAgIDpzeW50YXggbWF0Y2ggIGNjRm9vYmFyICAiRm9vLlx7LX1CYXIiICBjb250YWlucz1jY0ZvbworICAgOnN5bnRheCBtYXRjaCAgY2NGb28gICAgICJGb28iCSAgICBjb250YWluZWQgbmV4dGdyb3VwPWNjRmlsbGVyCisgICA6c3ludGF4IHJlZ2lvbiBjY0ZpbGxlciAgc3RhcnQ9Ii4iICBtYXRjaGdyb3VwPWNjQmFyICBlbmQ9IkJhciIgIGNvbnRhaW5lZAorCitUaGlzIHdpbGwgaGlnaGxpZ2h0ICJGb28iIGFuZCAiQmFyIiBkaWZmZXJlbnRseSwgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBhCisiQmFyIiBhZnRlciAiRm9vIi4gIEluIHRoZSB0ZXh0IGxpbmUgYmVsb3csICJmIiBzaG93cyB3aGVyZSBjY0ZvbyBpcyB1c2VkIGZvcgoraGlnaGxpZ2h0aW5nLCBhbmQgImJiYiIgd2hlcmUgY2NCYXIgaXMgdXNlZC4gPgorCisgICBGb28gYXNkZmFzZCBCYXIgYXNkZiBGb28gYXNkZiBCYXIgYXNkZgorICAgZmZmCSAgICAgICBiYmIJZmZmCSBiYmIKKworTm90ZSB0aGUgdXNlIG9mICIuXHstfSIgdG8gc2tpcCBhcyBsaXR0bGUgYXMgcG9zc2libGUgdW50aWwgdGhlIG5leHQgQmFyLgord2hlbiAiLioiIHdvdWxkIGJlIHVzZWQsIHRoZSAiYXNkZiIgaW4gYmV0d2VlbiAiQmFyIiBhbmQgIkZvbyIgd291bGQgYmUKK2hpZ2hsaWdodGVkIGFjY29yZGluZyB0byB0aGUgImNjRm9vYmFyIiBncm91cCwgYmVjYXVzZSB0aGUgY2NGb29CYXIgbWF0Y2gKK3dvdWxkIGluY2x1ZGUgdGhlIGZpcnN0ICJGb28iIGFuZCB0aGUgbGFzdCAiQmFyIiBpbiB0aGUgbGluZSAoc2VlIHxwYXR0ZXJufCkuCisKKworc2tpcHdoaXRlCQkJCQkJKjpzeW4tc2tpcHdoaXRlKgorc2tpcG5sCQkJCQkJCSo6c3luLXNraXBubCoKK3NraXBlbXB0eQkJCQkJCSo6c3luLXNraXBlbXB0eSoKKworVGhlc2UgYXJndW1lbnRzIGFyZSBvbmx5IHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCAibmV4dGdyb3VwIi4JVGhleSBjYW4gYmUKK3VzZWQgdG8gYWxsb3cgdGhlIG5leHQgZ3JvdXAgdG8gbWF0Y2ggYWZ0ZXIgc2tpcHBpbmcgc29tZSB0ZXh0OgorCXNraXB3aGl0ZQlza2lwIG92ZXIgc3BhY2UgYW5kIFRhYiBjaGFyYWN0ZXJzCisJc2tpcG5sCQlza2lwIG92ZXIgdGhlIGVuZCBvZiBhIGxpbmUKKwlza2lwZW1wdHkJc2tpcCBvdmVyIGVtcHR5IGxpbmVzIChpbXBsaWVzIGEgInNraXBubCIpCisKK1doZW4gInNraXB3aGl0ZSIgaXMgcHJlc2VudCwgdGhlIHdoaXRlIHNwYWNlIGlzIG9ubHkgc2tpcHBlZCBpZiB0aGVyZSBpcyBubworbmV4dCBncm91cCB0aGF0IG1hdGNoZXMgdGhlIHdoaXRlIHNwYWNlLgorCitXaGVuICJza2lwbmwiIGlzIHByZXNlbnQsIHRoZSBtYXRjaCB3aXRoIG5leHRncm91cCBtYXkgYmUgZm91bmQgaW4gdGhlIG5leHQKK2xpbmUuICBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBjdXJyZW50IGl0ZW0gZW5kcyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CitsaW5lISAgV2hlbiAic2tpcG5sIiBpcyBub3QgcHJlc2VudCwgdGhlIG5leHRncm91cCB3aWxsIG9ubHkgYmUgZm91bmQgYWZ0ZXIKK3RoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIHNhbWUgbGluZS4KKworV2hlbiBza2lwcGluZyB0ZXh0IHdoaWxlIGxvb2tpbmcgZm9yIGEgbmV4dCBncm91cCwgdGhlIG1hdGNoZXMgZm9yIG90aGVyCitncm91cHMgYXJlIGlnbm9yZWQuICBPbmx5IHdoZW4gbm8gbmV4dCBncm91cCBtYXRjaGVzLCBvdGhlciBpdGVtcyBhcmUgdHJpZWQKK2ZvciBhIG1hdGNoIGFnYWluLiAgVGhpcyBtZWFucyB0aGF0IG1hdGNoaW5nIGEgbmV4dCBncm91cCBhbmQgc2tpcHBpbmcgd2hpdGUKK3NwYWNlIGFuZCA8RU9MPnMgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gb3RoZXIgaXRlbXMuCisKK0V4YW1wbGU6ID4KKyAgOnN5biBtYXRjaCBpZnN0YXJ0ICJcPGlmLioiCSAgbmV4dGdyb3VwPWlmbGluZSBza2lwd2hpdGUgc2tpcGVtcHR5CisgIDpzeW4gbWF0Y2ggaWZsaW5lICAiW14gXHRdLioiIG5leHRncm91cD1pZmxpbmUgc2tpcHdoaXRlIHNraXBlbXB0eSBjb250YWluZWQKKyAgOnN5biBtYXRjaCBpZmxpbmUgICJlbmRpZiIJY29udGFpbmVkCitOb3RlIHRoYXQgdGhlICJbXiBcdF0uKiIgbWF0Y2ggbWF0Y2hlcyBhbGwgbm9uLXdoaXRlIHRleHQuICBUaHVzIGl0IHdvdWxkIGFsc28KK21hdGNoICJlbmRpZiIuCVRoZXJlZm9yZSB0aGUgImVuZGlmIiBtYXRjaCBpcyBwdXQgbGFzdCwgc28gdGhhdCBpdCB0YWtlcworcHJlY2VkZW5jZS4KK05vdGUgdGhhdCB0aGlzIGV4YW1wbGUgZG9lc24ndCB3b3JrIGZvciBuZXN0ZWQgImlmInMuICBZb3UgbmVlZCB0byBhZGQKKyJjb250YWlucyIgYXJndW1lbnRzIHRvIG1ha2UgdGhhdCB3b3JrIChvbWl0dGVkIGZvciBzaW1wbGljaXR5IG9mIHRoZQorZXhhbXBsZSkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNy4gU3ludGF4IHBhdHRlcm5zCQkJCSo6c3luLXBhdHRlcm4qICpFNDAxKiAqRTQwMioKKworSW4gdGhlIHN5bnRheCBjb21tYW5kcywgYSBwYXR0ZXJuIG11c3QgYmUgc3Vycm91bmRlZCBieSB0d28gaWRlbnRpY2FsCitjaGFyYWN0ZXJzLiAgVGhpcyBpcyBsaWtlIGl0IHdvcmtzIGZvciB0aGUgIjpzIiBjb21tYW5kLiAgVGhlIG1vc3QgY29tbW9uIHRvCit1c2UgaXMgdGhlIGRvdWJsZSBxdW90ZS4gIEJ1dCBpZiB0aGUgcGF0dGVybiBjb250YWlucyBhIGRvdWJsZSBxdW90ZSwgeW91IGNhbgordXNlIGFub3RoZXIgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWQgaW4gdGhlIHBhdHRlcm4uCUV4YW1wbGVzOiA+CisgIDpzeW50YXggcmVnaW9uIENvbW1lbnQgIHN0YXJ0PSIvXCoiICBlbmQ9IlwqLyIKKyAgOnN5bnRheCByZWdpb24gU3RyaW5nICAgc3RhcnQ9KyIrICAgIGVuZD0rIisJIHNraXA9K1xcIisKKworU2VlIHxwYXR0ZXJufCBmb3IgdGhlIGV4cGxhbmF0aW9uIG9mIHdoYXQgYSBwYXR0ZXJuIGlzLiAgU3ludGF4IHBhdHRlcm5zIGFyZQorYWx3YXlzIGludGVycHJldGVkIGxpa2UgdGhlICdtYWdpYycgb3B0aW9ucyBpcyBzZXQsIG5vIG1hdHRlciB3aGF0IHRoZSBhY3R1YWwKK3ZhbHVlIG9mICdtYWdpYycgaXMuICBBbmQgdGhlIHBhdHRlcm5zIGFyZSBpbnRlcnByZXRlZCBsaWtlIHRoZSAnbCcgZmxhZyBpcworbm90IGluY2x1ZGVkIGluICdjcG9wdGlvbnMnLiAgVGhpcyB3YXMgZG9uZSB0byBtYWtlIHN5bnRheCBmaWxlcyBwb3J0YWJsZSBhbmQKK2luZGVwZW5kZW50IG9mICdjb21wYXRpYmxlJyBhbmQgJ21hZ2ljJyBzZXR0aW5ncy4KKworVHJ5IHRvIGF2b2lkIHBhdHRlcm5zIHRoYXQgY2FuIG1hdGNoIGFuIGVtcHR5IHN0cmluZywgc3VjaCBhcyAiW2Etel0qIi4KK1RoaXMgc2xvd3MgZG93biB0aGUgaGlnaGxpZ2h0aW5nIGEgbG90LCBiZWNhdXNlIGl0IG1hdGNoZXMgZXZlcnl3aGVyZS4KKworCQkJCQkJKjpzeW4tcGF0dGVybi1vZmZzZXQqCitUaGUgcGF0dGVybiBjYW4gYmUgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgb2Zmc2V0LiAgVGhpcyBjYW4gYmUgdXNlZCB0bworY2hhbmdlIHRoZSBoaWdobGlnaHRlZCBwYXJ0LCBhbmQgdG8gY2hhbmdlIHRoZSB0ZXh0IGFyZWEgaW5jbHVkZWQgaW4gdGhlCittYXRjaCBvciByZWdpb24gKHdoaWNoIG9ubHkgbWF0dGVycyB3aGVuIHRyeWluZyB0byBtYXRjaCBvdGhlciBpdGVtcykuCUJvdGgKK2FyZSByZWxhdGl2ZSB0byB0aGUgbWF0Y2hlZCBwYXR0ZXJuLiAgVGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEgc2tpcAorcGF0dGVybiBjYW4gYmUgdXNlZCB0byB0ZWxsIHdoZXJlIHRvIGNvbnRpbnVlIGxvb2tpbmcgZm9yIGFuIGVuZCBwYXR0ZXJuLgorCitUaGUgb2Zmc2V0IHRha2VzIHRoZSBmb3JtIG9mICJ7d2hhdH09e29mZnNldH0iCitUaGUge3doYXR9IGNhbiBiZSBvbmUgb2Ygc2V2ZW4gc3RyaW5nczoKKworbXMJTWF0Y2ggU3RhcnQJb2Zmc2V0IGZvciB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dAorbWUJTWF0Y2ggRW5kCW9mZnNldCBmb3IgdGhlIGVuZCBvZiB0aGUgbWF0Y2hlZCB0ZXh0CitocwlIaWdobGlnaHQgU3RhcnQJb2Zmc2V0IGZvciB3aGVyZSB0aGUgaGlnaGxpZ2h0aW5nIHN0YXJ0cworaGUJSGlnaGxpZ2h0IEVuZAlvZmZzZXQgZm9yIHdoZXJlIHRoZSBoaWdobGlnaHRpbmcgZW5kcworcnMJUmVnaW9uIFN0YXJ0CW9mZnNldCBmb3Igd2hlcmUgdGhlIGJvZHkgb2YgYSByZWdpb24gc3RhcnRzCityZQlSZWdpb24gRW5kCW9mZnNldCBmb3Igd2hlcmUgdGhlIGJvZHkgb2YgYSByZWdpb24gZW5kcworbGMJTGVhZGluZyBDb250ZXh0CW9mZnNldCBwYXN0ICJsZWFkaW5nIGNvbnRleHQiIG9mIHBhdHRlcm4KKworVGhlIHtvZmZzZXR9IGNhbiBiZToKKworcwlzdGFydCBvZiB0aGUgbWF0Y2hlZCBwYXR0ZXJuCitzK3tucn0Jc3RhcnQgb2YgdGhlIG1hdGNoZWQgcGF0dGVybiBwbHVzIHtucn0gY2hhcnMgdG8gdGhlIHJpZ2h0CitzLXtucn0Jc3RhcnQgb2YgdGhlIG1hdGNoZWQgcGF0dGVybiBwbHVzIHtucn0gY2hhcnMgdG8gdGhlIGxlZnQKK2UJZW5kIG9mIHRoZSBtYXRjaGVkIHBhdHRlcm4KK2Ure25yfQllbmQgb2YgdGhlIG1hdGNoZWQgcGF0dGVybiBwbHVzIHtucn0gY2hhcnMgdG8gdGhlIHJpZ2h0CitlLXtucn0JZW5kIG9mIHRoZSBtYXRjaGVkIHBhdHRlcm4gcGx1cyB7bnJ9IGNoYXJzIHRvIHRoZSBsZWZ0Cit7bnJ9CShmb3IgImxjIiBvbmx5KTogc3RhcnQgbWF0Y2hpbmcge25yfSBjaGFycyB0byB0aGUgbGVmdAorCitFeGFtcGxlczogIm1zPXMrMSIsICJocz1lLTIiLCAibGM9MyIuCisKK0FsdGhvdWdoIGFsbCBvZmZzZXRzIGFyZSBhY2NlcHRlZCBhZnRlciBhbnkgcGF0dGVybiwgdGhleSBhcmUgbm90IGFsd2F5cworbWVhbmluZ2Z1bC4gIFRoaXMgdGFibGUgc2hvd3Mgd2hpY2ggb2Zmc2V0cyBhcmUgYWN0dWFsbHkgdXNlZDoKKworCQkgICAgbXMJIG1lICAgaHMgICBoZQlycyAgIHJlCSAgbGMgfgorbWF0Y2ggaXRlbQkgICAgeWVzICB5ZXMgIHllcyAgeWVzCS0gICAgLQkgIHllcworcmVnaW9uIGl0ZW0gc3RhcnQgICB5ZXMgIC0gICAgeWVzICAtCXllcyAgLQkgIHllcworcmVnaW9uIGl0ZW0gc2tpcCAgICAtCSB5ZXMgIC0gICAgLQktICAgIC0JICB5ZXMKK3JlZ2lvbiBpdGVtIGVuZCAgICAgLQkgeWVzICAtICAgIHllcwktICAgIHllcyAgeWVzCisKK09mZnNldHMgY2FuIGJlIGNvbmNhdGVuYXRlZCwgd2l0aCBhICcsJyBpbiBiZXR3ZWVuLiAgRXhhbXBsZTogPgorICA6c3luIG1hdGNoIFN0cmluZyAgLyJbXiJdKiIvaHM9cysxLGhlPWUtMQorPAorICAgIHNvbWUgInN0cmluZyIgdGV4dAorCSAgXl5eXl5eCQloaWdobGlnaHRlZAorCitOb3RlczoKKy0gVGhlcmUgbXVzdCBiZSBubyB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBwYXR0ZXJuIGFuZCB0aGUgY2hhcmFjdGVyCisgIG9mZnNldChzKS4KKy0gVGhlIGhpZ2hsaWdodGVkIGFyZWEgd2lsbCBuZXZlciBiZSBvdXRzaWRlIG9mIHRoZSBtYXRjaGVkIHRleHQuCistIEEgbmVnYXRpdmUgb2Zmc2V0IGZvciBhbiBlbmQgcGF0dGVybiBtYXkgbm90IGFsd2F5cyB3b3JrLCBiZWNhdXNlIHRoZSBlbmQKKyAgcGF0dGVybiBtYXkgYmUgZGV0ZWN0ZWQgd2hlbiB0aGUgaGlnaGxpZ2h0aW5nIHNob3VsZCBhbHJlYWR5IGhhdmUgc3RvcHBlZC4KKy0gVGhlIHN0YXJ0IG9mIGEgbWF0Y2ggY2Fubm90IGJlIGluIGEgbGluZSBvdGhlciB0aGFuIHdoZXJlIHRoZSBwYXR0ZXJuCisgIG1hdGNoZWQuICBUaGlzIGRvZXNuJ3Qgd29yazogImFcbmIibXM9ZS4gIFlvdSBjYW4gbWFrZSB0aGUgaGlnaGxpZ2h0aW5nCisgIHN0YXJ0IGluIGFub3RoZXIgbGluZSwgdGhpcyBkb2VzIHdvcms6ICJhXG5iImhzPWUuCisKK0V4YW1wbGUgKG1hdGNoIGEgY29tbWVudCBidXQgZG9uJ3QgaGlnaGxpZ2h0IHRoZSAvKiBhbmQgKi8pOiA+CisgIDpzeW50YXggcmVnaW9uIENvbW1lbnQgc3RhcnQ9Ii9cKiJocz1lKzEgZW5kPSJcKi8iaGU9cy0xCis8CisJLyogdGhpcyBpcyBhIGNvbW1lbnQgKi8KKwkgIF5eXl5eXl5eXl5eXl5eXl5eXl4JICBoaWdobGlnaHRlZAorCitBIG1vcmUgY29tcGxpY2F0ZWQgRXhhbXBsZTogPgorICA6c3luIHJlZ2lvbiBFeGEgbWF0Y2hncm91cD1Gb28gc3RhcnQ9ImZvbyJocz1zKzIscnM9ZSsyIG1hdGNoZ3JvdXA9QmFyIGVuZD0iYmFyIm1lPWUtMSxoZT1lLTEscmU9cy0xCis8CisJIGFiY2Zvb3N0cmluZ2JhcmFiYworCSAgICBtbW1tbW1tbW1tbQkgICAgbWF0Y2gKKwkgICAgICBzc3JycnJlZWUJICAgIGhpZ2hsaWdodCBzdGFydC9yZWdpb24vZW5kICgiRm9vIiwgIkV4YSIgYW5kICJCYXIiKQorCitMZWFkaW5nIGNvbnRleHQJCQkqOnN5bi1sYyogKjpzeW4tbGVhZGluZyogKjpzeW4tY29udGV4dCoKKworTm90ZTogVGhpcyBpcyBhbiBvYnNvbGV0ZSBmZWF0dXJlLCBvbmx5IGluY2x1ZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQord2l0aCBwcmV2aW91cyBWaW0gdmVyc2lvbnMuICBJdCdzIG5vdyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHwvXEA8PXwgY29uc3RydWN0CitpbiB0aGUgcGF0dGVybi4KKworVGhlICJsYyIgb2Zmc2V0IHNwZWNpZmllcyBsZWFkaW5nIGNvbnRleHQgLS0gYSBwYXJ0IG9mIHRoZSBwYXR0ZXJuIHRoYXQgbXVzdAorYmUgcHJlc2VudCwgYnV0IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIG1hdGNoLiAgQW4gb2Zmc2V0IG9mICJsYz1uIiB3aWxsCitjYXVzZSBWaW0gdG8gc3RlcCBiYWNrIG4gY29sdW1ucyBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgcGF0dGVybiBtYXRjaCwgYWxsb3dpbmcKK2NoYXJhY3RlcnMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gbWF0Y2hlZCBpbiBwcmV2aW91cyBwYXR0ZXJucyB0byBhbHNvIGJlCit1c2VkIGFzIGxlYWRpbmcgY29udGV4dCBmb3IgdGhpcyBtYXRjaC4gIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBpbnN0YW5jZSwgdG8KK3NwZWNpZnkgdGhhdCBhbiAiZXNjYXBpbmciIGNoYXJhY3RlciBtdXN0IG5vdCBwcmVjZWRlIHRoZSBtYXRjaDogPgorCisgIDpzeW4gbWF0Y2ggWk5vQmFja3NsYXNoICJbXlxcXXoibXM9cysxCisgIDpzeW4gbWF0Y2ggV05vQmFja3NsYXNoICJbXlxcXXcibGM9MQorICA6c3luIG1hdGNoIFVuZGVybGluZSAiX1wrIgorPAorCSAgX19fenp6eiBfX193d3d3CisJICBeXl4JICBeXl4JICBtYXRjaGVzIFVuZGVybGluZQorCSAgICAgIF4gXgkgIG1hdGNoZXMgWk5vQmFja3NsYXNoCisJCSAgICAgXl5eXiBtYXRjaGVzIFdOb0JhY2tzbGFzaAorCitUaGUgIm1zIiBvZmZzZXQgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdGhlICJsYyIgb2Zmc2V0LAordW5sZXNzIHlvdSBzZXQgIm1zIiBleHBsaWNpdGx5LgorCisKK011bHRpLWxpbmUgcGF0dGVybnMJCQkJCSo6c3luLW11bHRpLWxpbmUqCisKK1RoZSBwYXR0ZXJucyBjYW4gaW5jbHVkZSAiXG4iIHRvIG1hdGNoIGFuIGVuZC1vZi1saW5lLglNb3N0bHkgdGhpcyB3b3JrcyBhcworZXhwZWN0ZWQsIGJ1dCB0aGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9ucy4KKworV2hlbiB1c2luZyBhIHN0YXJ0IHBhdHRlcm4gd2l0aCBhbiBvZmZzZXQsIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2ggaXMgbm90CithbGxvd2VkIHRvIHN0YXJ0IGluIGEgZm9sbG93aW5nIGxpbmUuICBUaGUgaGlnaGxpZ2h0aW5nIGNhbiBzdGFydCBpbiBhCitmb2xsb3dpbmcgbGluZSB0aG91Z2guCisKK1RoZSBza2lwIHBhdHRlcm4gY2FuIGluY2x1ZGUgdGhlICJcbiIsIGJ1dCB0aGUgc2VhcmNoIGZvciBhbiBlbmQgcGF0dGVybiB3aWxsCitjb250aW51ZSBpbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBuZXh0IGxpbmUsIGFsc28gd2hlbiB0aGF0IGNoYXJhY3RlciBpcworbWF0Y2hlZCBieSB0aGUgc2tpcCBwYXR0ZXJuLiAgVGhpcyBpcyBiZWNhdXNlIHJlZHJhd2luZyBtYXkgc3RhcnQgaW4gYW55IGxpbmUKK2hhbGZ3YXkgYSByZWdpb24gYW5kIHRoZXJlIGlzIG5vIGNoZWNrIGlmIHRoZSBza2lwIHBhdHRlcm4gc3RhcnRlZCBpbiBhCitwcmV2aW91cyBsaW5lLglGb3IgZXhhbXBsZSwgaWYgdGhlIHNraXAgcGF0dGVybiBpcyAiYVxuYiIgYW5kIGFuIGVuZCBwYXR0ZXJuCitpcyAiYiIsIHRoZSBlbmQgcGF0dGVybiBkb2VzIG1hdGNoIGluIHRoZSBzZWNvbmQgbGluZSBvZiB0aGlzOiA+CisJIHggeCBhCisJIGIgeCB4CitHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHRoZSBza2lwIHBhdHRlcm4gc2hvdWxkIG5vdCBtYXRjaCBhbnkgY2hhcmFjdGVycworYWZ0ZXIgdGhlICJcbiIuCisKKworRXh0ZXJuYWwgbWF0Y2hlcwkJCQkJKjpzeW4tZXh0LW1hdGNoKgorCitUaGVzZSBleHRyYSByZWd1bGFyIGV4cHJlc3Npb24gaXRlbXMgYXJlIGF2YWlsYWJsZSBpbiByZWdpb24gcGF0dGVybnM6CisKKwkJCQkJCSovXHooKiAqL1x6KFwpKiAqRTUwKiAqRTUyKgorICAgIFx6KFwpCU1hcmtzIHRoZSBzdWItZXhwcmVzc2lvbiBhcyAiZXh0ZXJuYWwiLCBtZWFuaW5nIHRoYXQgaXQgaXMgY2FuCisJCWJlIGFjY2Vzc2VkIGZyb20gYW5vdGhlciBwYXR0ZXJuIG1hdGNoLiAgQ3VycmVudGx5IG9ubHkgdXNhYmxlCisJCWluIGRlZmluaW5nIGEgc3ludGF4IHJlZ2lvbiBzdGFydCBwYXR0ZXJuLgorCisJCQkJCSovXHoxKiAqL1x6MiogKi9cejMqICovXHo0KiAqL1x6NSoKKyAgICBcejEgIC4uLiAgXHo5CQkJKi9cejYqICovXHo3KiAqL1x6OCogKi9cejkqICpFNjYqICpFNjcqCisJCU1hdGNoZXMgdGhlIHNhbWUgc3RyaW5nIHRoYXQgd2FzIG1hdGNoZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKwkJc3ViLWV4cHJlc3Npb24gaW4gYSBwcmV2aW91cyBzdGFydCBwYXR0ZXJuIG1hdGNoLgorCitTb21ldGltZXMgdGhlIHN0YXJ0IGFuZCBlbmQgcGF0dGVybnMgb2YgYSByZWdpb24gbmVlZCB0byBzaGFyZSBhIGNvbW1vbgorc3ViLWV4cHJlc3Npb24uICBBIGNvbW1vbiBleGFtcGxlIGlzIHRoZSAiaGVyZSIgZG9jdW1lbnQgaW4gUGVybCBhbmQgbWFueSBVbml4CitzaGVsbHMuICBUaGlzIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgd2l0aCB0aGUgIlx6IiBzcGVjaWFsIHJlZ3VsYXIgZXhwcmVzc2lvbgoraXRlbXMsIHdoaWNoIG1hcmtzIGEgc3ViLWV4cHJlc3Npb24gYXMgImV4dGVybmFsIiwgaW4gdGhlIHNlbnNlIHRoYXQgaXQgY2FuIGJlCityZWZlcmVuY2VkIGZyb20gb3V0c2lkZSB0aGUgcGF0dGVybiBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLiAgVGhlIGhlcmUtZG9jdW1lbnQKK2V4YW1wbGUsIGZvciBpbnN0YW5jZSwgY2FuIGJlIGRvbmUgbGlrZSB0aGlzOiA+CisgIDpzeW4gcmVnaW9uIGhlcmVEb2Mgc3RhcnQ9Ijw8XHooXElcaSpcKSIgZW5kPSJeXHoxJCIKKworQXMgY2FuIGJlIHNlZW4gaGVyZSwgdGhlIFx6IGFjdHVhbGx5IGRvZXMgZG91YmxlIGR1dHkuCUluIHRoZSBzdGFydCBwYXR0ZXJuLAoraXQgbWFya3MgdGhlICJcKFxJXGkqXCkiIHN1Yi1leHByZXNzaW9uIGFzIGV4dGVybmFsOyBpbiB0aGUgZW5kIHBhdHRlcm4sIGl0CitjaGFuZ2VzIHRoZSBcMSBiYWNrLXJlZmVyZW5jZSBpbnRvIGFuIGV4dGVybmFsIHJlZmVyZW5jZSByZWZlcnJpbmcgdG8gdGhlCitmaXJzdCBleHRlcm5hbCBzdWItZXhwcmVzc2lvbiBpbiB0aGUgc3RhcnQgcGF0dGVybi4gIEV4dGVybmFsIHJlZmVyZW5jZXMgY2FuCithbHNvIGJlIHVzZWQgaW4gc2tpcCBwYXR0ZXJuczogPgorICA6c3luIHJlZ2lvbiBmb28gc3RhcnQ9InN0YXJ0IFwoXElcaSpcKSIgc2tpcD0ibm90IGVuZCBcejEiIGVuZD0iZW5kIFx6MSIKKworTm90ZSB0aGF0IG5vcm1hbCBhbmQgZXh0ZXJuYWwgc3ViLWV4cHJlc3Npb25zIGFyZSBjb21wbGV0ZWx5IG9ydGhvZ29uYWwgYW5kCitpbmRleGVkIHNlcGFyYXRlbHk7IGZvciBpbnN0YW5jZSwgaWYgdGhlIHBhdHRlcm4gIlx6KC4uXClcKC4uXCkiIGlzIGFwcGxpZWQKK3RvIHRoZSBzdHJpbmcgImFhYmIiLCB0aGVuIFwxIHdpbGwgcmVmZXIgdG8gImJiIiBhbmQgXHoxIHdpbGwgcmVmZXIgdG8gImFhIi4KK05vdGUgYWxzbyB0aGF0IGV4dGVybmFsIHN1Yi1leHByZXNzaW9ucyBjYW5ub3QgYmUgYWNjZXNzZWQgYXMgYmFjay1yZWZlcmVuY2VzCit3aXRoaW4gdGhlIHNhbWUgcGF0dGVybiBsaWtlIG5vcm1hbCBzdWItZXhwcmVzc2lvbnMuICBJZiB5b3Ugd2FudCB0byB1c2Ugb25lCitzdWItZXhwcmVzc2lvbiBhcyBib3RoIGEgbm9ybWFsIGFuZCBhbiBleHRlcm5hbCBzdWItZXhwcmVzc2lvbiwgeW91IGNhbiBuZXN0Cit0aGUgdHdvLCBhcyBpbiAiXChceiguLi5cKVwpIi4KKworTm90ZSB0aGF0IG9ubHkgbWF0Y2hlcyB3aXRoaW4gYSBzaW5nbGUgbGluZSBjYW4gYmUgdXNlZC4gIE11bHRpLWxpbmUgbWF0Y2hlcworY2Fubm90IGJlIHJlZmVycmVkIHRvLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzguIFN5bnRheCBjbHVzdGVycwkJCQkJKjpzeW4tY2x1c3RlciogKkU0MDAqCisKKzpzeVtudGF4XSBjbHVzdGVyIHtjbHVzdGVyLW5hbWV9IFtjb250YWlucz17Z3JvdXAtbmFtZX0uLl0KKwkJCQkgW2FkZD17Z3JvdXAtbmFtZX0uLl0KKwkJCQkgW3JlbW92ZT17Z3JvdXAtbmFtZX0uLl0KKworVGhpcyBjb21tYW5kIGFsbG93cyB5b3UgdG8gY2x1c3RlciBhIGxpc3Qgb2Ygc3ludGF4IGdyb3VwcyB0b2dldGhlciB1bmRlciBhCitzaW5nbGUgbmFtZS4KKworCWNvbnRhaW5zPXtncm91cC1uYW1lfS4uCisJCVRoZSBjbHVzdGVyIGlzIHNldCB0byB0aGUgc3BlY2lmaWVkIGxpc3Qgb2YgZ3JvdXBzLgorCWFkZD17Z3JvdXAtbmFtZX0uLgorCQlUaGUgc3BlY2lmaWVkIGdyb3VwcyBhcmUgYWRkZWQgdG8gdGhlIGNsdXN0ZXIuCisJcmVtb3ZlPXtncm91cC1uYW1lfS4uCisJCVRoZSBzcGVjaWZpZWQgZ3JvdXBzIGFyZSByZW1vdmVkIGZyb20gdGhlIGNsdXN0ZXIuCisKK0EgY2x1c3RlciBzbyBkZWZpbmVkIG1heSBiZSByZWZlcnJlZCB0byBpbiBhIGNvbnRhaW5zPS4uLCBuZXh0Z3JvdXA9Li4sIGFkZD0uLgorb3IgcmVtb3ZlPS4uIGxpc3Qgd2l0aCBhICJAIiBwcmVmaXguICBZb3UgY2FuIGFsc28gdXNlIHRoaXMgbm90YXRpb24gdG8KK2ltcGxpY2l0bHkgZGVjbGFyZSBhIGNsdXN0ZXIgYmVmb3JlIHNwZWNpZnlpbmcgaXRzIGNvbnRlbnRzLgorCitFeGFtcGxlOiA+CisgICA6c3ludGF4IG1hdGNoIFRoaW5nICIjIFteI11cKyAjIiBjb250YWlucz1AVGhpbmdNZW1iZXJzCisgICA6c3ludGF4IGNsdXN0ZXIgVGhpbmdNZW1iZXJzIGNvbnRhaW5zPVRoaW5nTWVtYmVyMSxUaGluZ01lbWJlcjIKKworQXMgdGhlIHByZXZpb3VzIGV4YW1wbGUgc3VnZ2VzdHMsIG1vZGlmaWNhdGlvbnMgdG8gYSBjbHVzdGVyIGFyZSBlZmZlY3RpdmVseQorcmV0cm9hY3RpdmU7IHRoZSBtZW1iZXJzaGlwIG9mIHRoZSBjbHVzdGVyIGlzIGNoZWNrZWQgYXQgdGhlIGxhc3QgbWludXRlLCBzbwordG8gc3BlYWs6ID4KKyAgIDpzeW50YXgga2V5d29yZCBBIGFhYQorICAgOnN5bnRheCBrZXl3b3JkIEIgYmJiCisgICA6c3ludGF4IGNsdXN0ZXIgQWFuZEIgY29udGFpbnM9QQorICAgOnN5bnRheCBtYXRjaCBTdHVmZiAiKCBhYWEgYmJiICkiIGNvbnRhaW5zPUBBYW5kQgorICAgOnN5bnRheCBjbHVzdGVyIEFhbmRCIGFkZD1CCSAgIiBub3cgYm90aCBrZXl3b3JkcyBhcmUgbWF0Y2hlZCBpbiBTdHVmZgorCitUaGlzIGFsc28gaGFzIGltcGxpY2F0aW9ucyBmb3IgbmVzdGVkIGNsdXN0ZXJzOiA+CisgICA6c3ludGF4IGtleXdvcmQgQSBhYWEKKyAgIDpzeW50YXgga2V5d29yZCBCIGJiYgorICAgOnN5bnRheCBjbHVzdGVyIFNtYWxsR3JvdXAgY29udGFpbnM9QgorICAgOnN5bnRheCBjbHVzdGVyIEJpZ0dyb3VwIGNvbnRhaW5zPUEsQFNtYWxsR3JvdXAKKyAgIDpzeW50YXggbWF0Y2ggU3R1ZmYgIiggYWFhIGJiYiApIiBjb250YWlucz1AQmlnR3JvdXAKKyAgIDpzeW50YXggY2x1c3RlciBCaWdHcm91cCByZW1vdmU9QgkiIG5vIGVmZmVjdCwgc2luY2UgQiBpc24ndCBpbiBCaWdHcm91cAorICAgOnN5bnRheCBjbHVzdGVyIFNtYWxsR3JvdXAgcmVtb3ZlPUIJIiBub3cgYmJiIGlzbid0IG1hdGNoZWQgd2l0aGluIFN0dWZmCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOS4gSW5jbHVkaW5nIHN5bnRheCBmaWxlcwkJCQkqOnN5bi1pbmNsdWRlKiAqRTM5NyoKKworSXQgaXMgb2Z0ZW4gdXNlZnVsIGZvciBvbmUgbGFuZ3VhZ2UncyBzeW50YXggZmlsZSB0byBpbmNsdWRlIGEgc3ludGF4IGZpbGUgZm9yCithIHJlbGF0ZWQgbGFuZ3VhZ2UuICBEZXBlbmRpbmcgb24gdGhlIGV4YWN0IHJlbGF0aW9uc2hpcCwgdGhpcyBjYW4gYmUgZG9uZSBpbgordHdvIGRpZmZlcmVudCB3YXlzOgorCisJLSBJZiB0b3AtbGV2ZWwgc3ludGF4IGl0ZW1zIGluIHRoZSBpbmNsdWRlZCBzeW50YXggZmlsZSBhcmUgdG8gYmUKKwkgIGFsbG93ZWQgYXQgdGhlIHRvcCBsZXZlbCBpbiB0aGUgaW5jbHVkaW5nIHN5bnRheCwgeW91IGNhbiBzaW1wbHkgdXNlCisJICB0aGUgfDpydW50aW1lfCBjb21tYW5kOiA+CisKKyAgIiBJbiBjcHAudmltOgorICA6cnVudGltZSEgc3ludGF4L2MudmltCisgIDp1bmxldCBiOmN1cnJlbnRfc3ludGF4CisKKzwJLSBJZiB0b3AtbGV2ZWwgc3ludGF4IGl0ZW1zIGluIHRoZSBpbmNsdWRlZCBzeW50YXggZmlsZSBhcmUgdG8gYmUKKwkgIGNvbnRhaW5lZCB3aXRoaW4gYSByZWdpb24gaW4gdGhlIGluY2x1ZGluZyBzeW50YXgsIHlvdSBjYW4gdXNlIHRoZQorCSAgIjpzeW50YXggaW5jbHVkZSIgY29tbWFuZDoKKworOnN5W250YXhdIGluY2x1ZGUgW0B7Z3JvdXBsaXN0LW5hbWV9XSB7ZmlsZS1uYW1lfQorCisJICBBbGwgc3ludGF4IGl0ZW1zIGRlY2xhcmVkIGluIHRoZSBpbmNsdWRlZCBmaWxlIHdpbGwgaGF2ZSB0aGUKKwkgICJjb250YWluZWQiIGZsYWcgYWRkZWQuICBJbiBhZGRpdGlvbiwgaWYgYSBncm91cCBsaXN0IGlzIHNwZWNpZmllZCwKKwkgIGFsbCB0b3AtbGV2ZWwgc3ludGF4IGl0ZW1zIGluIHRoZSBpbmNsdWRlZCBmaWxlIHdpbGwgYmUgYWRkZWQgdG8KKwkgIHRoYXQgbGlzdC4gPgorCisgICAiIEluIHBlcmwudmltOgorICAgOnN5bnRheCBpbmNsdWRlIEBQb2QgPHNmaWxlPjpwOmgvcG9kLnZpbQorICAgOnN5bnRheCByZWdpb24gcGVybFBPRCBzdGFydD0iXj1oZWFkIiBlbmQ9Il49Y3V0IiBjb250YWlucz1AUG9kCis8CisJICBXaGVuIHtmaWxlLW5hbWV9IGlzIGFuIGFic29sdXRlIHBhdGggKHN0YXJ0cyB3aXRoICIvIiwgImM6IiwgIiRWQVIiCisJICBvciAiPHNmaWxlPiIpIHRoYXQgZmlsZSBpcyBzb3VyY2VkLiAgV2hlbiBpdCBpcyBhIHJlbGF0aXZlIHBhdGgKKwkgIChlLmcuLCAic3ludGF4L3BvZC52aW0iKSB0aGUgZmlsZSBpcyBzZWFyY2hlZCBmb3IgaW4gJ3J1bnRpbWVwYXRoJy4KKwkgIEFsbCBtYXRjaGluZyBmaWxlcyBhcmUgbG9hZGVkLiAgVXNpbmcgYSByZWxhdGl2ZSBwYXRoIGlzCisJICByZWNvbW1lbmRlZCwgYmVjYXVzZSBpdCBhbGxvd3MgYSB1c2VyIHRvIHJlcGxhY2UgdGhlIGluY2x1ZGVkIGZpbGUKKwkgIHdpdGggaGlzIG93biB2ZXJzaW9uLCB3aXRob3V0IHJlcGxhY2luZyB0aGUgZmlsZSB0aGF0IGRvZXMgdGhlICI6c3luCisJICBpbmNsdWRlIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMC4gU3luY2hyb25pemluZwkJCQkqOnN5bi1zeW5jKiAqRTQwMyogKkU0MDQqCisKK1ZpbSB3YW50cyB0byBiZSBhYmxlIHRvIHN0YXJ0IHJlZHJhd2luZyBpbiBhbnkgcG9zaXRpb24gaW4gdGhlIGRvY3VtZW50LiAgVG8KK21ha2UgdGhpcyBwb3NzaWJsZSBpdCBuZWVkcyB0byBrbm93IHRoZSBzeW50YXggc3RhdGUgYXQgdGhlIHBvc2l0aW9uIHdoZXJlCityZWRyYXdpbmcgc3RhcnRzLgorCis6c3lbbnRheF0gc3luYyBbY2NvbW1lbnQgW2dyb3VwLW5hbWVdIHwgbWlubGluZXM9e059IHwgLi4uXQorCitUaGVyZSBhcmUgZm91ciB3YXlzIHRvIHN5bmNocm9uaXplOgorMS4gQWx3YXlzIHBhcnNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgorICAgfDpzeW4tc3luYy1maXJzdHwKKzIuIEJhc2VkIG9uIEMtc3R5bGUgY29tbWVudHMuICBWaW0gdW5kZXJzdGFuZHMgaG93IEMtY29tbWVudHMgd29yayBhbmQgY2FuCisgICBmaWd1cmUgb3V0IGlmIHRoZSBjdXJyZW50IGxpbmUgc3RhcnRzIGluc2lkZSBvciBvdXRzaWRlIGEgY29tbWVudC4KKyAgIHw6c3luLXN5bmMtc2Vjb25kfAorMy4gSnVtcGluZyBiYWNrIGEgY2VydGFpbiBudW1iZXIgb2YgbGluZXMgYW5kIHN0YXJ0IHBhcnNpbmcgdGhlcmUuCisgICB8OnN5bi1zeW5jLXRoaXJkfAorNC4gU2VhcmNoaW5nIGJhY2t3YXJkcyBpbiB0aGUgdGV4dCBmb3IgYSBwYXR0ZXJuIHRvIHN5bmMgb24uCisgICB8OnN5bi1zeW5jLWZvdXJ0aHwKKworCQkJCSo6c3luLXN5bmMtbWF4bGluZXMqICo6c3luLXN5bmMtbWlubGluZXMqCitGb3IgdGhlIGxhc3QgdGhyZWUgbWV0aG9kcywgdGhlIGxpbmUgcmFuZ2Ugd2hlcmUgdGhlIHBhcnNpbmcgY2FuIHN0YXJ0IGlzCitsaW1pdGVkIGJ5ICJtaW5saW5lcyIgYW5kICJtYXhsaW5lcyIuCisKK0lmIHRoZSAibWlubGluZXM9e059IiBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIHBhcnNpbmcgYWx3YXlzIHN0YXJ0cyBhdCBsZWFzdAordGhhdCBtYW55IGxpbmVzIGJhY2t3YXJkcy4gIFRoaXMgY2FuIGJlIHVzZWQgaWYgdGhlIHBhcnNpbmcgbWF5IHRha2UgYSBmZXcKK2xpbmVzIGJlZm9yZSBpdCdzIGNvcnJlY3QsIG9yIHdoZW4gaXQncyBub3QgcG9zc2libGUgdG8gdXNlIHN5bmNpbmcuCisKK0lmIHRoZSAibWF4bGluZXM9e059IiBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IGFyZSBzZWFyY2hlZAorZm9yIGEgY29tbWVudCBvciBzeW5jaW5nIHBhdHRlcm4gaXMgcmVzdHJpY3RlZCB0byBOIGxpbmVzIGJhY2t3YXJkcyAoYWZ0ZXIKK2FkZGluZyAibWlubGluZXMiKS4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGZldyB0aGluZ3MgdG8gc3luYyBvbiBhbmQgYQorc2xvdyBtYWNoaW5lLiAgRXhhbXBsZTogPgorICAgOnN5bnRheCBzeW5jIGNjb21tZW50IG1heGxpbmVzPTUwMAorPAorCQkJCQkJKjpzeW4tc3luYy1saW5lYnJlYWtzKgorV2hlbiB1c2luZyBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIG11bHRpcGxlIGxpbmVzLCBhIGNoYW5nZSBpbiBvbmUgbGluZSBtYXkKK2NhdXNlIGEgcGF0dGVybiB0byBubyBsb25nZXIgbWF0Y2ggaW4gYSBwcmV2aW91cyBsaW5lLglUaGlzIG1lYW5zIGhhcyB0bworc3RhcnQgYWJvdmUgd2hlcmUgdGhlIGNoYW5nZSB3YXMgbWFkZS4JSG93IG1hbnkgbGluZXMgY2FuIGJlIHNwZWNpZmllZCB3aXRoCit0aGUgImxpbmVicmVha3MiIGFyZ3VtZW50LiAgRm9yIGV4YW1wbGUsIHdoZW4gYSBwYXR0ZXJuIG1heSBpbmNsdWRlIG9uZSBsaW5lCiticmVhayB1c2UgdGhpczogPgorICAgOnN5bnRheCBzeW5jIGxpbmVicmVha3M9MQorVGhlIHJlc3VsdCBpcyB0aGF0IHJlZHJhd2luZyBhbHdheXMgc3RhcnRzIGF0IGxlYXN0IG9uZSBsaW5lIGJlZm9yZSB3aGVyZSBhCitjaGFuZ2Ugd2FzIG1hZGUuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgImxpbmVicmVha3MiIGlzIHplcm8uICBVc3VhbGx5IHRoZQordmFsdWUgZm9yICJtaW5saW5lcyIgaXMgYmlnZ2VyIHRoYW4gImxpbmVicmVha3MiLgorCisKK0ZpcnN0IHN5bmNpbmcgbWV0aG9kOgkJCSo6c3luLXN5bmMtZmlyc3QqCis+CisgICA6c3ludGF4IHN5bmMgZnJvbXN0YXJ0CisKK1RoZSBmaWxlIHdpbGwgYmUgcGFyc2VkIGZyb20gdGhlIHN0YXJ0LiAgVGhpcyBtYWtlcyBzeW50YXggaGlnaGxpZ2h0aW5nCithY2N1cmF0ZSwgYnV0IGNhbiBiZSBzbG93IGZvciBsb25nIGZpbGVzLiAgVmltIGNhY2hlcyBwcmV2aW91c2x5IHBhcnNlZCB0ZXh0LAorc28gdGhhdCBpdCdzIG9ubHkgc2xvdyB3aGVuIHBhcnNpbmcgdGhlIHRleHQgZm9yIHRoZSBmaXJzdCB0aW1lLiAgSG93ZXZlciwKK3doZW4gbWFraW5nIGNoYW5nZXMgc29tZSBwYXJ0IG9mIHRoZSBuZXh0IG5lZWRzIHRvIGJlIHBhcnNlZCBhZ2FpbiAod29yc3QKK2Nhc2U6IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUpLgorCitVc2luZyAiZnJvbXN0YXJ0IiBpcyBlcXVpdmFsZW50IHRvIHVzaW5nICJtaW5saW5lcyIgd2l0aCBhIHZlcnkgbGFyZ2UgbnVtYmVyLgorCisKK1NlY29uZCBzeW5jaW5nIG1ldGhvZDoJCQkqOnN5bi1zeW5jLXNlY29uZCogKjpzeW4tc3luYy1jY29tbWVudCoKKworRm9yIHRoZSBzZWNvbmQgbWV0aG9kLCBvbmx5IHRoZSAiY2NvbW1lbnQiIGFyZ3VtZW50IG5lZWRzIHRvIGJlIGdpdmVuLgorRXhhbXBsZTogPgorICAgOnN5bnRheCBzeW5jIGNjb21tZW50CisKK1doZW4gVmltIGZpbmRzIHRoYXQgdGhlIGxpbmUgd2hlcmUgZGlzcGxheWluZyBzdGFydHMgaXMgaW5zaWRlIGEgQy1zdHlsZQorY29tbWVudCwgdGhlIGxhc3QgcmVnaW9uIHN5bnRheCBpdGVtIHdpdGggdGhlIGdyb3VwLW5hbWUgIkNvbW1lbnQiIHdpbGwgYmUKK3VzZWQuICBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlcmUgaXMgYSByZWdpb24gd2l0aCB0aGUgZ3JvdXAtbmFtZSAiQ29tbWVudCIhCitBbiBhbHRlcm5hdGUgZ3JvdXAgbmFtZSBjYW4gYmUgc3BlY2lmaWVkLCBmb3IgZXhhbXBsZTogPgorICAgOnN5bnRheCBzeW5jIGNjb21tZW50IGphdmFDb21tZW50CitUaGlzIG1lYW5zIHRoYXQgdGhlIGxhc3QgaXRlbSBzcGVjaWZpZWQgd2l0aCAic3luIHJlZ2lvbiBqYXZhQ29tbWVudCIgd2lsbCBiZQordXNlZCBmb3IgdGhlIGRldGVjdGVkIEMgY29tbWVudCByZWdpb24uICBUaGlzIG9ubHkgd29ya3MgcHJvcGVybHkgaWYgdGhhdAorcmVnaW9uIGRvZXMgaGF2ZSBhIHN0YXJ0IHBhdHRlcm4gIlwvKiIgYW5kIGFuIGVuZCBwYXR0ZXJuICIqXC8iLgorCitUaGUgIm1heGxpbmVzIiBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUgc2VhcmNoIHRvIGEgbnVtYmVyIG9mCitsaW5lcy4JVGhlICJtaW5saW5lcyIgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gYXQgbGVhc3Qgc3RhcnQgYSBudW1iZXIgb2YKK2xpbmVzIGJhY2sgKGUuZy4sIGZvciB3aGVuIHRoZXJlIGlzIHNvbWUgY29uc3RydWN0IHRoYXQgb25seSB0YWtlcyBhIGZldworbGluZXMsIGJ1dCBpdCBoYXJkIHRvIHN5bmMgb24pLgorCitOb3RlOiBTeW5jaW5nIG9uIGEgQyBjb21tZW50IGRvZXNuJ3Qgd29yayBwcm9wZXJseSB3aGVuIHN0cmluZ3MgYXJlIHVzZWQKK3RoYXQgY3Jvc3MgYSBsaW5lIGFuZCBjb250YWluIGEgIiovIi4gIFNpbmNlIGxldHRpbmcgc3RyaW5ncyBjcm9zcyBhIGxpbmUKK2lzIGEgYmFkIHByb2dyYW1taW5nIGhhYml0IChtYW55IGNvbXBpbGVycyBnaXZlIGEgd2FybmluZyBtZXNzYWdlKSwgYW5kIHRoZQorY2hhbmNlIG9mIGEgIiovIiBhcHBlYXJpbmcgaW5zaWRlIGEgY29tbWVudCBpcyB2ZXJ5IHNtYWxsLCB0aGlzIHJlc3RyaWN0aW9uCitpcyBoYXJkbHkgZXZlciBub3RpY2VkLgorCisKK1RoaXJkIHN5bmNpbmcgbWV0aG9kOgkJCQkqOnN5bi1zeW5jLXRoaXJkKgorCitGb3IgdGhlIHRoaXJkIG1ldGhvZCwgb25seSB0aGUgIm1pbmxpbmVzPXtOfSIgYXJndW1lbnQgbmVlZHMgdG8gYmUgZ2l2ZW4uCitWaW0gd2lsbCBzdWJ0cmFjdCB7Tn0gZnJvbSB0aGUgbGluZSBudW1iZXIgYW5kIHN0YXJ0IHBhcnNpbmcgdGhlcmUuICBUaGlzCittZWFucyB7Tn0gZXh0cmEgbGluZXMgbmVlZCB0byBiZSBwYXJzZWQsIHdoaWNoIG1ha2VzIHRoaXMgbWV0aG9kIGEgYml0IHNsb3dlci4KK0V4YW1wbGU6ID4KKyAgIDpzeW50YXggc3luYyBtaW5saW5lcz01MAorCisibGluZXMiIGlzIGVxdWl2YWxlbnQgdG8gIm1pbmxpbmVzIiAodXNlZCBieSBvbGRlciB2ZXJzaW9ucykuCisKKworRm91cnRoIHN5bmNpbmcgbWV0aG9kOgkJCQkqOnN5bi1zeW5jLWZvdXJ0aCoKKworVGhlIGlkZWEgaXMgdG8gc3luY2hyb25pemUgb24gdGhlIGVuZCBvZiBhIGZldyBzcGVjaWZpYyByZWdpb25zLCBjYWxsZWQgYQorc3luYyBwYXR0ZXJuLiAgT25seSByZWdpb25zIGNhbiBjcm9zcyBsaW5lcywgc28gd2hlbiB3ZSBmaW5kIHRoZSBlbmQgb2Ygc29tZQorcmVnaW9uLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGtub3cgaW4gd2hpY2ggc3ludGF4IGl0ZW0gd2UgYXJlLiAgVGhlIHNlYXJjaAorc3RhcnRzIGluIHRoZSBsaW5lIGp1c3QgYWJvdmUgdGhlIG9uZSB3aGVyZSByZWRyYXdpbmcgc3RhcnRzLiAgRnJvbSB0aGVyZQordGhlIHNlYXJjaCBjb250aW51ZXMgYmFja3dhcmRzIGluIHRoZSBmaWxlLgorCitUaGlzIHdvcmtzIGp1c3QgbGlrZSB0aGUgbm9uLXN5bmNpbmcgc3ludGF4IGl0ZW1zLiAgWW91IGNhbiB1c2UgY29udGFpbmVkCittYXRjaGVzLCBuZXh0Z3JvdXAsIGV0Yy4gIEJ1dCB0aGVyZSBhcmUgYSBmZXcgZGlmZmVyZW5jZXM6CistIEtleXdvcmRzIGNhbm5vdCBiZSB1c2VkLgorLSBUaGUgc3ludGF4IGl0ZW1zIHdpdGggdGhlICJzeW5jIiBrZXl3b3JkIGZvcm0gYSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBncm91cAorICBvZiBzeW50YXggaXRlbXMuICBZb3UgY2FuJ3QgbWl4IHN5bmNpbmcgZ3JvdXBzIGFuZCBub24tc3luY2luZyBncm91cHMuCistIFRoZSBtYXRjaGluZyB3b3JrcyBiYWNrd2FyZHMgaW4gdGhlIGJ1ZmZlciAobGluZSBieSBsaW5lKSwgaW5zdGVhZCBvZgorICBmb3J3YXJkcy4KKy0gQSBsaW5lIGNvbnRpbnVhdGlvbiBwYXR0ZXJuIGNhbiBiZSBnaXZlbi4gIEl0IGlzIHVzZWQgdG8gZGVjaWRlIHdoaWNoIGdyb3VwCisgIG9mIGxpbmVzIG5lZWQgdG8gYmUgc2VhcmNoZWQgbGlrZSB0aGV5IHdlcmUgb25lIGxpbmUuICBUaGlzIG1lYW5zIHRoYXQgdGhlCisgIHNlYXJjaCBmb3IgYSBtYXRjaCB3aXRoIHRoZSBzcGVjaWZpZWQgaXRlbXMgc3RhcnRzIGluIHRoZSBmaXJzdCBvZiB0aGUKKyAgY29uc2VjdXRpdmUgdGhhdCBjb250YWluIHRoZSBjb250aW51YXRpb24gcGF0dGVybi4KKy0gV2hlbiB1c2luZyAibmV4dGdyb3VwIiBvciAiY29udGFpbnMiLCB0aGlzIG9ubHkgd29ya3Mgd2l0aGluIG9uZSBsaW5lIChvcgorICBncm91cCBvZiBjb250aW51ZWQgbGluZXMpLgorLSBXaGVuIHVzaW5nIGEgcmVnaW9uLCBpdCBtdXN0IHN0YXJ0IGFuZCBlbmQgaW4gdGhlIHNhbWUgbGluZSAob3IgZ3JvdXAgb2YKKyAgY29udGludWVkIGxpbmVzKS4gIE90aGVyd2lzZSB0aGUgZW5kIGlzIGFzc3VtZWQgdG8gYmUgYXQgdGhlIGVuZCBvZiB0aGUKKyAgbGluZSAob3IgZ3JvdXAgb2YgY29udGludWVkIGxpbmVzKS4KKy0gV2hlbiBhIG1hdGNoIHdpdGggYSBzeW5jIHBhdHRlcm4gaXMgZm91bmQsIHRoZSByZXN0IG9mIHRoZSBsaW5lIChvciBncm91cCBvZgorICBjb250aW51ZWQgbGluZXMpIGlzIHNlYXJjaGVkIGZvciBhbm90aGVyIG1hdGNoLiAgVGhlIGxhc3QgbWF0Y2ggaXMgdXNlZC4KKyAgVGhpcyBpcyB1c2VkIHdoZW4gYSBsaW5lIGNhbiBjb250YWluIGJvdGggdGhlIHN0YXJ0IGVuZCB0aGUgZW5kIG9mIGEgcmVnaW9uCisgIChlLmcuLCBpbiBhIEMtY29tbWVudCBsaWtlIC8qIHRoaXMgKi8sIHRoZSBsYXN0ICIqLyIgaXMgdXNlZCkuCisKK1RoZXJlIGFyZSB0d28gd2F5cyBob3cgYSBtYXRjaCB3aXRoIGEgc3luYyBwYXR0ZXJuIGNhbiBiZSB1c2VkOgorMS4gUGFyc2luZyBmb3IgaGlnaGxpZ2h0aW5nIHN0YXJ0cyB3aGVyZSByZWRyYXdpbmcgc3RhcnRzIChhbmQgd2hlcmUgdGhlCisgICBzZWFyY2ggZm9yIHRoZSBzeW5jIHBhdHRlcm4gc3RhcnRlZCkuICBUaGUgc3ludGF4IGdyb3VwIHRoYXQgaXMgZXhwZWN0ZWQKKyAgIHRvIGJlIHZhbGlkIHRoZXJlIG11c3QgYmUgc3BlY2lmaWVkLiAgVGhpcyB3b3JrcyB3ZWxsIHdoZW4gdGhlIHJlZ2lvbnMKKyAgIHRoYXQgY3Jvc3MgbGluZXMgY2Fubm90IGNvbnRhaW4gb3RoZXIgcmVnaW9ucy4KKzIuIFBhcnNpbmcgZm9yIGhpZ2hsaWdodGluZyBjb250aW51ZXMganVzdCBhZnRlciB0aGUgbWF0Y2guICBUaGUgc3ludGF4IGdyb3VwCisgICB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQganVzdCBhZnRlciB0aGUgbWF0Y2ggbXVzdCBiZSBzcGVjaWZpZWQuCisgICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gdGhlIHByZXZpb3VzIG1ldGhvZCBkb2Vzbid0IHdvcmsgd2VsbC4gIEl0J3MgbXVjaAorICAgc2xvd2VyLCBiZWNhdXNlIG1vcmUgdGV4dCBuZWVkcyB0byBiZSBwYXJzZWQuCitCb3RoIHR5cGVzIG9mIHN5bmMgcGF0dGVybnMgY2FuIGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZS4KKworQmVzaWRlcyB0aGUgc3luYyBwYXR0ZXJucywgb3RoZXIgbWF0Y2hlcyBhbmQgcmVnaW9ucyBjYW4gYmUgc3BlY2lmaWVkLCB0bworYXZvaWQgZmluZGluZyB1bndhbnRlZCBtYXRjaGVzLgorCitbVGhlIHJlYXNvbiB0aGF0IHRoZSBzeW5jIHBhdHRlcm5zIGFyZSBnaXZlbiBzZXBhcmF0ZWx5LCBpcyB0aGF0IG1vc3RseSB0aGUKK3NlYXJjaCBmb3IgdGhlIHN5bmMgcG9pbnQgY2FuIGJlIG11Y2ggc2ltcGxlciB0aGFuIGZpZ3VyaW5nIG91dCB0aGUKK2hpZ2hsaWdodGluZy4gIFRoZSByZWR1Y2VkIG51bWJlciBvZiBwYXR0ZXJucyBtZWFucyBpdCB3aWxsIGdvIChtdWNoKQorZmFzdGVyLl0KKworCQkJCQkgICAgKnN5bi1zeW5jLWdyb3VwaGVyZSogKkUzOTMqICpFMzk0KgorICAgIDpzeW50YXggc3luYyBtYXRjaCB7c3luYy1ncm91cC1uYW1lfSBncm91cGhlcmUge2dyb3VwLW5hbWV9ICJwYXR0ZXJuIiAuLgorCisJRGVmaW5lIGEgbWF0Y2ggdGhhdCBpcyB1c2VkIGZvciBzeW5jaW5nLiAge2dyb3VwLW5hbWV9IGlzIHRoZQorCW5hbWUgb2YgYSBzeW50YXggZ3JvdXAgdGhhdCBmb2xsb3dzIGp1c3QgYWZ0ZXIgdGhlIG1hdGNoLiAgUGFyc2luZworCW9mIHRoZSB0ZXh0IGZvciBoaWdobGlnaHRpbmcgc3RhcnRzIGp1c3QgYWZ0ZXIgdGhlIG1hdGNoLiAgQSByZWdpb24KKwltdXN0IGV4aXN0IGZvciB0aGlzIHtncm91cC1uYW1lfS4gIFRoZSBmaXJzdCBvbmUgZGVmaW5lZCB3aWxsIGJlIHVzZWQuCisJIk5PTkUiIGNhbiBiZSB1c2VkIGZvciB3aGVuIHRoZXJlIGlzIG5vIHN5bnRheCBncm91cCBhZnRlciB0aGUgbWF0Y2guCisKKwkJCQkJCSpzeW4tc3luYy1ncm91cHRoZXJlKgorICAgIDpzeW50YXggc3luYyBtYXRjaCB7c3luYy1ncm91cC1uYW1lfSBncm91cHRoZXJlIHtncm91cC1uYW1lfSAicGF0dGVybiIgLi4KKworCUxpa2UgImdyb3VwaGVyZSIsIGJ1dCB7Z3JvdXAtbmFtZX0gaXMgdGhlIG5hbWUgb2YgYSBzeW50YXggZ3JvdXAgdGhhdAorCWlzIHRvIGJlIHVzZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdoZXJlIHNlYXJjaGluZyBmb3IgdGhlIHN5bmMKKwlwb2ludCBzdGFydGVkLglUaGUgdGV4dCBiZXR3ZWVuIHRoZSBtYXRjaCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBzeW5jCisJcGF0dGVybiBzZWFyY2hpbmcgaXMgYXNzdW1lZCBub3QgdG8gY2hhbmdlIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nLgorCUZvciBleGFtcGxlLCBpbiBDIHlvdSBjb3VsZCBzZWFyY2ggYmFja3dhcmRzIGZvciAiLyoiIGFuZCAiKi8iLiAgSWYKKwkiLyoiIGlzIGZvdW5kIGZpcnN0LCB5b3Uga25vdyB0aGF0IHlvdSBhcmUgaW5zaWRlIGEgY29tbWVudCwgc28gdGhlCisJImdyb3VwdGhlcmUiIGlzICJjQ29tbWVudCIuICBJZiAiKi8iIGlzIGZvdW5kIGZpcnN0LCB5b3Uga25vdyB0aGF0IHlvdQorCWFyZSBub3QgaW4gYSBjb21tZW50LCBzbyB0aGUgImdyb3VwdGhlcmUiIGlzICJOT05FIi4gIChpbiBwcmFjdGljZQorCWl0J3MgYSBiaXQgbW9yZSBjb21wbGljYXRlZCwgYmVjYXVzZSB0aGUgIi8qIiBhbmQgIiovIiBjb3VsZCBhcHBlYXIKKwlpbnNpZGUgYSBzdHJpbmcuICBUaGF0J3MgbGVmdCBhcyBhbiBleGVyY2lzZSB0byB0aGUgcmVhZGVyLi4uKS4KKworICAgIDpzeW50YXggc3luYyBtYXRjaCAuLgorICAgIDpzeW50YXggc3luYyByZWdpb24gLi4KKworCVdpdGhvdXQgYSAiZ3JvdXB0aGVyZSIgYXJndW1lbnQuICBEZWZpbmUgYSByZWdpb24gb3IgbWF0Y2ggdGhhdCBpcworCXNraXBwZWQgd2hpbGUgc2VhcmNoaW5nIGZvciBhIHN5bmMgcG9pbnQuCisKKyAgICA6c3ludGF4IHN5bmMgbGluZWNvbnQge3BhdHRlcm59CisKKwlXaGVuIHtwYXR0ZXJufSBtYXRjaGVzIGluIGEgbGluZSwgaXQgaXMgY29uc2lkZXJlZCB0byBjb250aW51ZSBpbgorCXRoZSBuZXh0IGxpbmUuCVRoaXMgbWVhbnMgdGhhdCB0aGUgc2VhcmNoIGZvciBhIHN5bmMgcG9pbnQgd2lsbAorCWNvbnNpZGVyIHRoZSBsaW5lcyB0byBiZSBjb25jYXRlbmF0ZWQuCisKK0lmIHRoZSAibWF4bGluZXM9e059IiBhcmd1bWVudCBpcyBnaXZlbiB0b28sIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUKK3NlYXJjaGVkIGZvciBhIG1hdGNoIGlzIHJlc3RyaWN0ZWQgdG8gTi4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIHZlcnkKK2ZldyB0aGluZ3MgdG8gc3luYyBvbiBhbmQgYSBzbG93IG1hY2hpbmUuICBFeGFtcGxlOiA+CisgICA6c3ludGF4IHN5bmMgbWF4bGluZXM9MTAwCisKK1lvdSBjYW4gY2xlYXIgYWxsIHN5bmMgc2V0dGluZ3Mgd2l0aDogPgorICAgOnN5bnRheCBzeW5jIGNsZWFyCisKK1lvdSBjYW4gY2xlYXIgc3BlY2lmaWMgc3luYyBwYXR0ZXJucyB3aXRoOiA+CisgICA6c3ludGF4IHN5bmMgY2xlYXIge3N5bmMtZ3JvdXAtbmFtZX0gLi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMS4gTGlzdGluZyBzeW50YXggaXRlbXMJCSo6c3ludGF4KiAqOnN5KiAqOnN5biogKjpzeW4tbGlzdCoKKworVGhpcyBjb21tYW5kcyBsaXN0cyBhbGwgdGhlIHN5bnRheCBpdGVtczogPgorCisgICAgOnN5W250YXhdIFtsaXN0XQorCitUbyBzaG93IHRoZSBzeW50YXggaXRlbXMgZm9yIG9uZSBzeW50YXggZ3JvdXA6ID4KKworICAgIDpzeVtudGF4XSBsaXN0IHtncm91cC1uYW1lfQorCitUbyBsaXN0IHRoZSBzeW50YXggZ3JvdXBzIGluIG9uZSBjbHVzdGVyOgkJCSpFMzkyKgk+CisKKyAgICA6c3lbbnRheF0gbGlzdCBAe2NsdXN0ZXItbmFtZX0KKworU2VlIGFib3ZlIGZvciBvdGhlciBhcmd1bWVudHMgZm9yIHRoZSAiOnN5bnRheCIgY29tbWFuZC4KKworTm90ZSB0aGF0IHRoZSAiOnN5bnRheCIgY29tbWFuZCBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gIjpzeSIsIGFsdGhvdWdoICI6c3luIgoraXMgbW9zdGx5IHVzZWQsIGJlY2F1c2UgaXQgbG9va3MgYmV0dGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEyLiBIaWdobGlnaHQgY29tbWFuZAkJCSo6aGlnaGxpZ2h0KiAqOmhpKiAqRTI4KiAqRTQxMSogKkU0MTUqCisKK1RoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBoaWdobGlnaHQgZ3JvdXBzOgorLSBUaGUgb25lcyB1c2VkIGZvciBzcGVjaWZpYyBsYW5ndWFnZXMuICBGb3IgdGhlc2UgdGhlIG5hbWUgc3RhcnRzIHdpdGggdGhlCisgIG5hbWUgb2YgdGhlIGxhbmd1YWdlLiAgTWFueSBvZiB0aGVzZSBkb24ndCBoYXZlIGFueSBhdHRyaWJ1dGVzLCBidXQgYXJlCisgIGxpbmtlZCB0byBhIGdyb3VwIG9mIHRoZSBzZWNvbmQgdHlwZS4KKy0gVGhlIG9uZXMgdXNlZCBmb3IgYWxsIHN5bnRheCBsYW5ndWFnZXMuCistIFRoZSBvbmVzIHVzZWQgZm9yIHRoZSAnaGlnaGxpZ2h0JyBvcHRpb24uCisJCQkJCQkJKmhpdGVzdC52aW0qCitZb3UgY2FuIHNlZSBhbGwgdGhlIGdyb3VwcyBjdXJyZW50bHkgYWN0aXZlIHdpdGggdGhpcyBjb21tYW5kOiA+CisgICAgOnNvICRWSU1SVU5USU1FL3N5bnRheC9oaXRlc3QudmltCitUaGlzIHdpbGwgb3BlbiBhIG5ldyB3aW5kb3cgY29udGFpbmluZyBhbGwgaGlnaGxpZ2h0IGdyb3VwIG5hbWVzLCBkaXNwbGF5ZWQKK2luIHRoZWlyIG93biBjb2xvci4KKworCQkJCQkJKjpjb2xvKiAqOmNvbG9yc2NoZW1lKiAqRTE4NSoKKzpjb2xvW3JzY2hlbWVdIHtuYW1lfQlMb2FkIGNvbG9yIHNjaGVtZSB7bmFtZX0uICBUaGlzIHNlYXJjaGVzICdydW50aW1lcGF0aCcKKwkJCWZvciB0aGUgZmlsZSAiY29sb3JzL3tuYW1lfS52aW0uICBUaGUgZmlyc3Qgb25lIHRoYXQKKwkJCWlzIGZvdW5kIGlzIGxvYWRlZC4KKwkJCVRvIHNlZSB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb2xvciBzY2hlbWUKKwkJCShpZiB0aGVyZSBpcyBvbmUpOiA+CisJCQkJOmVjaG8gZzpjb2xvcnNfbmFtZQorPAkJCURvZXNuJ3Qgd29yayByZWN1cnNpdmVseSwgdGh1cyB5b3UgY2FuJ3QgdXNlCisJCQkiOmNvbG9yc2NoZW1lIiBpbiBhIGNvbG9yIHNjaGVtZSBzY3JpcHQuCisKKzpoaVtnaGxpZ2h0XQkJTGlzdCBhbGwgdGhlIGN1cnJlbnQgaGlnaGxpZ2h0IGdyb3VwcyB0aGF0IGhhdmUKKwkJCWF0dHJpYnV0ZXMgc2V0LgorCis6aGlbZ2hsaWdodF0ge2dyb3VwLW5hbWV9CisJCQlMaXN0IG9uZSBoaWdobGlnaHQgZ3JvdXAuCisKKzpoaVtnaGxpZ2h0XSBjbGVhcglSZXNldCBhbGwgaGlnaGxpZ2h0aW5nIHRvIHRoZSBkZWZhdWx0cy4gIFJlbW92ZXMgYWxsCisJCQloaWdobGlnaHRpbmcgZm9yIGdyb3VwcyBhZGRlZCBieSB0aGUgdXNlciEKKwkJCVVzZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ2JhY2tncm91bmQnIHRvIGRlY2lkZSB3aGljaAorCQkJZGVmYXVsdCBjb2xvcnMgdG8gdXNlLgorCis6aGlbZ2hsaWdodF0gY2xlYXIge2dyb3VwLW5hbWV9Cis6aGlbZ2hsaWdodF0ge2dyb3VwLW5hbWV9IE5PTkUKKwkJCURpc2FibGUgdGhlIGhpZ2hsaWdodGluZyBmb3Igb25lIGhpZ2hsaWdodCBncm91cC4gIEl0CisJCQlpcyBfbm90XyBzZXQgYmFjayB0byB0aGUgZGVmYXVsdCBjb2xvcnMuCisKKzpoaVtnaGxpZ2h0XSBbZGVmYXVsdF0ge2dyb3VwLW5hbWV9IHtrZXl9PXthcmd9IC4uCisJCQlBZGQgYSBoaWdobGlnaHQgZ3JvdXAsIG9yIGNoYW5nZSB0aGUgaGlnaGxpZ2h0aW5nIGZvcgorCQkJYW4gZXhpc3RpbmcgZ3JvdXAuCisJCQlTZWUgfGhpZ2hsaWdodC1hcmdzfCBmb3IgdGhlIHtrZXl9PXthcmd9IGFyZ3VtZW50cy4KKwkJCVNlZSB8OmhpZ2hsaWdodC1kZWZhdWx0fCBmb3IgdGhlIG9wdGlvbmFsIFtkZWZhdWx0XQorCQkJYXJndW1lbnQuCisKK05vcm1hbGx5IGEgaGlnaGxpZ2h0IGdyb3VwIGlzIGFkZGVkIG9uY2Ugd2hlbiBzdGFydGluZyB1cC4gIFRoaXMgc2V0cyB0aGUKK2RlZmF1bHQgdmFsdWVzIGZvciB0aGUgaGlnaGxpZ2h0aW5nLiAgQWZ0ZXIgdGhhdCwgeW91IGNhbiB1c2UgYWRkaXRpb25hbAoraGlnaGxpZ2h0IGNvbW1hbmRzIHRvIGNoYW5nZSB0aGUgYXJndW1lbnRzIHRoYXQgeW91IHdhbnQgdG8gc2V0IHRvIG5vbi1kZWZhdWx0Cit2YWx1ZXMuICBUaGUgdmFsdWUgIk5PTkUiIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB0aGUgdmFsdWUgb2ZmIG9yIGdvIGJhY2sgdG8KK3RoZSBkZWZhdWx0IHZhbHVlLgorCitBIHNpbXBsZSB3YXkgdG8gY2hhbmdlIGNvbG9ycyBpcyB3aXRoIHRoZSB8OmNvbG9yc2NoZW1lfCBjb21tYW5kLiAgVGhpcyBsb2FkcworYSBmaWxlIHdpdGggIjpoaWdobGlnaHQiIGNvbW1hbmRzIHN1Y2ggYXMgdGhpczogPgorCisgICA6aGkgQ29tbWVudAlndWk9Ym9sZAorCitOb3RlIHRoYXQgYWxsIHNldHRpbmdzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCByZW1haW4gdGhlIHNhbWUsIG9ubHkgdGhlCitzcGVjaWZpZWQgZmllbGQgaXMgdXNlZCwgYW5kIHNldHRpbmdzIGFyZSBtZXJnZWQgd2l0aCBwcmV2aW91cyBvbmVzLiAgU28sIHRoZQorcmVzdWx0IGlzIGxpa2UgdGhpcyBzaW5nbGUgY29tbWFuZCBoYXMgYmVlbiB1c2VkOiA+CisgICA6aGkgQ29tbWVudAl0ZXJtPWJvbGQgY3Rlcm1mZz1DeWFuIGd1aWZnPSM4MGEwZmYgZ3VpPWJvbGQKKzwKKwkJCQkJKmhpZ2hsaWdodC1hcmdzKiAqRTQxNiogKkU0MTcqICpFNDIzKgorVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIHRlcm1pbmFscyBmb3IgaGlnaGxpZ2h0aW5nOgordGVybQlhIG5vcm1hbCB0ZXJtaW5hbCAodnQxMDAsIHh0ZXJtKQorY3Rlcm0JYSBjb2xvciB0ZXJtaW5hbCAoTVMtRE9TIGNvbnNvbGUsIGNvbG9yLXh0ZXJtLCB0aGVzZSBoYXZlIHRoZSAiQ28iCisJdGVybWNhcCBlbnRyeSkKK2d1aQl0aGUgR1VJCisKK0ZvciBlYWNoIHR5cGUgdGhlIGhpZ2hsaWdodGluZyBjYW4gYmUgZ2l2ZW4uICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZQordGhlIHNhbWUgc3ludGF4IGZpbGUgb24gYWxsIHRlcm1pbmFscywgYW5kIHVzZSB0aGUgb3B0aW1hbCBoaWdobGlnaHRpbmcuCisKKzEuIGhpZ2hsaWdodCBhcmd1bWVudHMgZm9yIG5vcm1hbCB0ZXJtaW5hbHMKKwordGVybT17YXR0ci1saXN0fQkJCSphdHRyLWxpc3QqICpoaWdobGlnaHQtdGVybSogKkU0MTgqCisJYXR0ci1saXN0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QgKHdpdGhvdXQgc3BhY2VzKSBvZiB0aGUKKwlmb2xsb3dpbmcgaXRlbXMgKGluIGFueSBvcmRlcik6CisJCWJvbGQKKwkJdW5kZXJsaW5lCisJCXJldmVyc2UKKwkJaW52ZXJzZQkJc2FtZSBhcyByZXZlcnNlCisJCWl0YWxpYworCQlzdGFuZG91dAorCQlOT05FCQlubyBhdHRyaWJ1dGVzIHVzZWQgKHVzZWQgdG8gcmVzZXQgaXQpCisKKwlOb3RlIHRoYXQgImJvbGQiIGNhbiBiZSB1c2VkIGhlcmUgYW5kIGJ5IHVzaW5nIGEgYm9sZCBmb250LiAgVGhleQorCWhhdmUgdGhlIHNhbWUgZWZmZWN0LgorCitzdGFydD17dGVybS1saXN0fQkJCQkqaGlnaGxpZ2h0LXN0YXJ0KiAqRTQyMioKK3N0b3A9e3Rlcm0tbGlzdH0JCQkJKnRlcm0tbGlzdCogKmhpZ2hsaWdodC1zdG9wKgorCVRoZXNlIGxpc3RzIG9mIHRlcm1pbmFsIGNvZGVzIGNhbiBiZSB1c2VkIHRvIGdldAorCW5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzIG9uIGEgdGVybWluYWwuCisKKwlUaGUgZXNjYXBlIHNlcXVlbmNlIHNwZWNpZmllZCB3aXRoIHRoZSAic3RhcnQiIGFyZ3VtZW50CisJaXMgd3JpdHRlbiBiZWZvcmUgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGhpZ2hsaWdodGVkCisJYXJlYS4gIEl0IGNhbiBiZSBhbnl0aGluZyB0aGF0IHlvdSB3YW50IHRvIHNlbmQgdG8gdGhlCisJdGVybWluYWwgdG8gaGlnaGxpZ2h0IHRoaXMgYXJlYS4gIFRoZSBlc2NhcGUgc2VxdWVuY2UKKwlzcGVjaWZpZWQgd2l0aCB0aGUgInN0b3AiIGFyZ3VtZW50IGlzIHdyaXR0ZW4gYWZ0ZXIgdGhlCisJaGlnaGxpZ2h0ZWQgYXJlYS4gIFRoaXMgc2hvdWxkIHVuZG8gdGhlICJzdGFydCIgYXJndW1lbnQuCisJT3RoZXJ3aXNlIHRoZSBzY3JlZW4gd2lsbCBsb29rIG1lc3NlZCB1cC4KKworCVRoZSB7dGVybS1saXN0fSBjYW4gaGF2ZSB0d28gZm9ybXM6CisKKwkxLiBBIHN0cmluZyB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMuCisJICAgVGhpcyBpcyBhbnkgc3RyaW5nIG9mIGNoYXJhY3RlcnMsIGV4Y2VwdCB0aGF0IGl0IGNhbid0IHN0YXJ0IHdpdGgKKwkgICAidF8iIGFuZCBibGFua3MgYXJlIG5vdCBhbGxvd2VkLiAgVGhlIDw+IG5vdGF0aW9uIGlzIHJlY29nbml6ZWQKKwkgICBoZXJlLCBzbyB5b3UgY2FuIHVzZSB0aGluZ3MgbGlrZSAiPEVzYz4iIGFuZCAiPFNwYWNlPiIuICBFeGFtcGxlOgorCQlzdGFydD08RXNjPlsyN2g7PEVzYz5bPFNwYWNlPnI7CisKKwkyLiBBIGxpc3Qgb2YgdGVybWluYWwgY29kZXMuCisJICAgRWFjaCB0ZXJtaW5hbCBjb2RlIGhhcyB0aGUgZm9ybSAidF94eCIsIHdoZXJlICJ4eCIgaXMgdGhlIG5hbWUgb2YKKwkgICB0aGUgdGVybWNhcCBlbnRyeS4gIFRoZSBjb2RlcyBoYXZlIHRvIGJlIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4KKwkgICBXaGl0ZSBzcGFjZSBpcyBub3QgYWxsb3dlZC4JRXhhbXBsZToKKwkJc3RhcnQ9dF9DMSx0X0JMCisJICAgVGhlIHRlcm1pbmFsIGNvZGVzIG11c3QgZXhpc3QgZm9yIHRoaXMgdG8gd29yay4KKworCisyLiBoaWdobGlnaHQgYXJndW1lbnRzIGZvciBjb2xvciB0ZXJtaW5hbHMKKworY3Rlcm09e2F0dHItbGlzdH0JCQkJCSpoaWdobGlnaHQtY3Rlcm0qCisJU2VlIGFib3ZlIGZvciB0aGUgZGVzY3JpcHRpb24gb2Yge2F0dHItbGlzdH0gfGF0dHItbGlzdHwuCisJVGhlICJjdGVybSIgYXJndW1lbnQgaXMgbGlrZWx5IHRvIGJlIGRpZmZlcmVudCBmcm9tICJ0ZXJtIiwgd2hlbgorCWNvbG9ycyBhcmUgdXNlZC4gIEZvciBleGFtcGxlLCBpbiBhIG5vcm1hbCB0ZXJtaW5hbCBjb21tZW50cyBjb3VsZAorCWJlIHVuZGVybGluZWQsIGluIGEgY29sb3IgdGVybWluYWwgdGhleSBjYW4gYmUgbWFkZSBCbHVlLgorCU5vdGU6IE1hbnkgdGVybWluYWxzIChlLmcuLCBET1MgY29uc29sZSkgY2FuJ3QgbWl4IHRoZXNlIGF0dHJpYnV0ZXMKKwl3aXRoIGNvbG9yaW5nLglVc2Ugb25seSBvbmUgb2YgImN0ZXJtPSIgT1IgImN0ZXJtZmc9IiBPUiAiY3Rlcm1iZz0iLgorCitjdGVybWZnPXtjb2xvci1ucn0JCQkJKmhpZ2hsaWdodC1jdGVybWZnKiAqRTQyMSoKK2N0ZXJtYmc9e2NvbG9yLW5yfQkJCQkqaGlnaGxpZ2h0LWN0ZXJtYmcqCisJVGhlIHtjb2xvci1ucn0gYXJndW1lbnQgaXMgYSBjb2xvciBudW1iZXIuICBJdHMgcmFuZ2UgaXMgemVybyB0bworCShub3QgaW5jbHVkaW5nKSB0aGUgbnVtYmVyIGdpdmVuIGJ5IHRoZSB0ZXJtY2FwIGVudHJ5ICJDbyIuCisJVGhlIGFjdHVhbCBjb2xvciB3aXRoIHRoaXMgbnVtYmVyIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGVybWluYWwKKwlhbmQgaXRzIHNldHRpbmdzLiAgU29tZXRpbWVzIHRoZSBjb2xvciBhbHNvIGRlcGVuZHMgb24gdGhlIHNldHRpbmdzIG9mCisJImN0ZXJtIi4gIEZvciBleGFtcGxlLCBvbiBzb21lIHN5c3RlbXMgImN0ZXJtPWJvbGQgY3Rlcm1mZz0zIiBnaXZlcworCWFub3RoZXIgY29sb3IsIG9uIG90aGVycyB5b3UganVzdCBnZXQgY29sb3IgMy4KKworCUZvciBhbiB4dGVybSB0aGlzIGRlcGVuZHMgb24geW91ciByZXNvdXJjZXMsIGFuZCBpcyBhIGJpdAorCXVucHJlZGljdGFibGUuCVNlZSB5b3VyIHh0ZXJtIGRvY3VtZW50YXRpb24gZm9yIHRoZSBkZWZhdWx0cy4JVGhlCisJY29sb3JzIGZvciBhIGNvbG9yLXh0ZXJtIGNhbiBiZSBjaGFuZ2VkIGZyb20gdGhlIC5YZGVmYXVsdHMgZmlsZS4KKwlVbmZvcnR1bmF0ZWx5IHRoaXMgbWVhbnMgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byBnZXQgdGhlIHNhbWUgY29sb3JzCisJZm9yIGVhY2ggdXNlci4JU2VlIHx4dGVybS1jb2xvcnwgZm9yIGluZm8gYWJvdXQgY29sb3IgeHRlcm1zLgorCisJVGhlIE1TRE9TIHN0YW5kYXJkIGNvbG9ycyBhcmUgZml4ZWQgKGluIGEgY29uc29sZSB3aW5kb3cpLCBzbyB0aGVzZQorCWhhdmUgYmVlbiB1c2VkIGZvciB0aGUgbmFtZXMuICBCdXQgdGhlIG1lYW5pbmcgb2YgY29sb3IgbmFtZXMgaW4gWDExCisJYXJlIGZpeGVkLCBzbyB0aGVzZSBjb2xvciBzZXR0aW5ncyBoYXZlIGJlZW4gdXNlZCwgdG8gbWFrZSB0aGUKKwloaWdobGlnaHRpbmcgc2V0dGluZ3MgcG9ydGFibGUgKGNvbXBsaWNhdGVkLCBpc24ndCBpdD8pLiAgVGhlCisJZm9sbG93aW5nIG5hbWVzIGFyZSByZWNvZ25pemVkLCB3aXRoIHRoZSBjb2xvciBudW1iZXIgdXNlZDoKKworCQkJCQkJCSpjdGVybS1jb2xvcnMqCisJICAgIE5SLTE2ICAgTlItOCAgICBDT0xPUiBOQU1FIH4KKwkgICAgMAkgICAgMAkgICAgQmxhY2sKKwkgICAgMQkgICAgNAkgICAgRGFya0JsdWUKKwkgICAgMgkgICAgMgkgICAgRGFya0dyZWVuCisJICAgIDMJICAgIDYJICAgIERhcmtDeWFuCisJICAgIDQJICAgIDEJICAgIERhcmtSZWQKKwkgICAgNQkgICAgNQkgICAgRGFya01hZ2VudGEKKwkgICAgNgkgICAgMwkgICAgQnJvd24sIERhcmtZZWxsb3cKKwkgICAgNwkgICAgNwkgICAgTGlnaHRHcmF5LCBMaWdodEdyZXksIEdyYXksIEdyZXkKKwkgICAgOAkgICAgMCoJICAgIERhcmtHcmF5LCBEYXJrR3JleQorCSAgICA5CSAgICA0KgkgICAgQmx1ZSwgTGlnaHRCbHVlCisJICAgIDEwCSAgICAyKgkgICAgR3JlZW4sIExpZ2h0R3JlZW4KKwkgICAgMTEJICAgIDYqCSAgICBDeWFuLCBMaWdodEN5YW4KKwkgICAgMTIJICAgIDEqCSAgICBSZWQsIExpZ2h0UmVkCisJICAgIDEzCSAgICA1KgkgICAgTWFnZW50YSwgTGlnaHRNYWdlbnRhCisJICAgIDE0CSAgICAzKgkgICAgWWVsbG93LCBMaWdodFllbGxvdworCSAgICAxNQkgICAgNyoJICAgIFdoaXRlCisKKwlUaGUgbnVtYmVyIHVuZGVyICJOUi0xNiIgaXMgdXNlZCBmb3IgMTYtY29sb3IgdGVybWluYWxzICgndF9DbycKKwlncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTYpLiAgVGhlIG51bWJlciB1bmRlciAiTlItOCIgaXMgdXNlZCBmb3IKKwk4LWNvbG9yIHRlcm1pbmFscyAoJ3RfQ28nIGxlc3MgdGhhbiAxNikuICBUaGUgJyonIGluZGljYXRlcyB0aGF0IHRoZQorCWJvbGQgYXR0cmlidXRlIGlzIHNldCBmb3IgY3Rlcm1mZy4gIEluIG1hbnkgOC1jb2xvciB0ZXJtaW5hbHMgKGUuZy4sCisJImxpbnV4IiksIHRoaXMgY2F1c2VzIHRoZSBicmlnaHQgY29sb3JzIHRvIGFwcGVhci4gIFRoaXMgZG9lc24ndCB3b3JrCisJZm9yIGJhY2tncm91bmQgY29sb3JzIQlXaXRob3V0IHRoZSAnKicgdGhlIGJvbGQgYXR0cmlidXRlIGlzIHJlbW92ZWQuCisJSWYgeW91IHdhbnQgdG8gc2V0IHRoZSBib2xkIGF0dHJpYnV0ZSBpbiBhIGRpZmZlcmVudCB3YXksIHB1dCBhCisJImN0ZXJtPSIgYXJndW1lbnQgQUZURVIgdGhlICJjdGVybWZnPSIgb3IgImN0ZXJtYmc9IiBhcmd1bWVudC4JT3IgdXNlCisJYSBudW1iZXIgaW5zdGVhZCBvZiBhIGNvbG9yIG5hbWUuCisKKwlUaGUgY2FzZSBvZiB0aGUgY29sb3IgbmFtZXMgaXMgaWdub3JlZC4KKwlOb3RlIHRoYXQgZm9yIDE2IGNvbG9yIGFuc2kgc3R5bGUgdGVybWluYWxzIChpbmNsdWRpbmcgeHRlcm1zKSwgdGhlCisJbnVtYmVycyBpbiB0aGUgTlItOCBjb2x1bW4gaXMgdXNlZC4gSGVyZSAnKicgbWVhbnMgJ2FkZCA4JyBzbyB0aGF0IEJsdWUKKwlpcyAxMiwgRGFya0dyYXkgaXMgOCBldGMuCisKKwlOb3RlIHRoYXQgZm9yIHNvbWUgY29sb3IgdGVybWluYWxzIHRoZXNlIG5hbWVzIG1heSByZXN1bHQgaW4gdGhlIHdyb25nCisJY29sb3JzIQorCisJCQkJCQkJKjpoaS1ub3JtYWwtY3Rlcm0qCisJV2hlbiBzZXR0aW5nIHRoZSAiY3Rlcm1mZyIgb3IgImN0ZXJtYmciIGNvbG9ycyBmb3IgdGhlIE5vcm1hbCBncm91cCwKKwl0aGVzZSB3aWxsIGJlY29tZSB0aGUgY29sb3JzIHVzZWQgZm9yIHRoZSBub24taGlnaGxpZ2h0ZWQgdGV4dC4KKwlFeGFtcGxlOiA+CisJCTpoaWdobGlnaHQgTm9ybWFsIGN0ZXJtZmc9Z3JleSBjdGVybWJnPWRhcmtibHVlCis8CVdoZW4gc2V0dGluZyB0aGUgImN0ZXJtYmciIGNvbG9yIGZvciB0aGUgTm9ybWFsIGdyb3VwLCB0aGUKKwknYmFja2dyb3VuZCcgb3B0aW9uIHdpbGwgYmUgYWRqdXN0ZWQgYXV0b21hdGljYWxseS4gIFRoaXMgY2F1c2VzIHRoZQorCWhpZ2hsaWdodCBncm91cHMgdGhhdCBkZXBlbmQgb24gJ2JhY2tncm91bmQnIHRvIGNoYW5nZSEgIFRoaXMgbWVhbnMKKwl5b3Ugc2hvdWxkIHNldCB0aGUgY29sb3JzIGZvciBOb3JtYWwgZmlyc3QsIGJlZm9yZSBzZXR0aW5nIG90aGVyCisJY29sb3JzLgorCVdoZW4gYSBjb2xvcnNjaGVtZSBpcyBiZWluZyB1c2VkLCBjaGFuZ2luZyAnYmFja2dyb3VuZCcgY2F1c2VzIGl0IHRvCisJYmUgcmVsb2FkZWQsIHdoaWNoIG1heSByZXNldCBhbGwgY29sb3JzIChpbmNsdWRpbmcgTm9ybWFsKS4gIEZpcnN0CisJZGVsZXRlIHRoZSAiY29sb3JzX25hbWUiIHZhcmlhYmxlIHdoZW4geW91IGRvbid0IHdhbnQgdGhpcy4KKworCVdoZW4geW91IGhhdmUgc2V0ICJjdGVybWZnIiBvciAiY3Rlcm1iZyIgZm9yIHRoZSBOb3JtYWwgZ3JvdXAsIFZpbQorCW5lZWRzIHRvIHJlc2V0IHRoZSBjb2xvciB3aGVuIGV4aXRpbmcuCVRoaXMgaXMgZG9uZSB3aXRoIHRoZSAib3AiCisJdGVybWNhcCBlbnRyeSB8dF9vcHwuICBJZiB0aGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHksIHRyeSBzZXR0aW5nIHRoZQorCSd0X29wJyBvcHRpb24gaW4geW91ciAudmltcmMuCisJCQkJCQkJKkU0MTkqICpFNDIwKgorCVdoZW4gVmltIGtub3dzIHRoZSBub3JtYWwgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMsICJmZyIgYW5kCisJImJnIiBjYW4gYmUgdXNlZCBhcyBjb2xvciBuYW1lcy4gIFRoaXMgb25seSB3b3JrcyBhZnRlciBzZXR0aW5nIHRoZQorCWNvbG9ycyBmb3IgdGhlIE5vcm1hbCBncm91cCBhbmQgZm9yIHRoZSBNUy1ET1MgY29uc29sZS4gIEV4YW1wbGUsIGZvcgorCXJldmVyc2UgdmlkZW86ID4KKwkgICAgOmhpZ2hsaWdodCBWaXN1YWwgY3Rlcm1mZz1iZyBjdGVybWJnPWZnCis8CU5vdGUgdGhhdCB0aGUgY29sb3JzIGFyZSB1c2VkIHRoYXQgYXJlIHZhbGlkIGF0IHRoZSBtb21lbnQgdGhpcworCWNvbW1hbmQgYXJlIGdpdmVuLiAgSWYgdGhlIE5vcm1hbCBncm91cCBjb2xvcnMgYXJlIGNoYW5nZWQgbGF0ZXIsIHRoZQorCSJmZyIgYW5kICJiZyIgY29sb3JzIHdpbGwgbm90IGJlIGFkanVzdGVkLgorCisKKzMuIGhpZ2hsaWdodCBhcmd1bWVudHMgZm9yIHRoZSBHVUkKKworZ3VpPXthdHRyLWxpc3R9CQkJCQkJKmhpZ2hsaWdodC1ndWkqCisJVGhlc2UgZ2l2ZSB0aGUgYXR0cmlidXRlcyB0byB1c2UgaW4gdGhlIEdVSSBtb2RlLgorCVNlZSB8YXR0ci1saXN0fCBmb3IgYSBkZXNjcmlwdGlvbi4KKwlOb3RlIHRoYXQgImJvbGQiIGNhbiBiZSB1c2VkIGhlcmUgYW5kIGJ5IHVzaW5nIGEgYm9sZCBmb250LiAgVGhleQorCWhhdmUgdGhlIHNhbWUgZWZmZWN0LgorCU5vdGUgdGhhdCB0aGUgYXR0cmlidXRlcyBhcmUgaWdub3JlZCBmb3IgdGhlICJOb3JtYWwiIGdyb3VwLgorCitmb250PXtmb250LW5hbWV9CQkJCQkqaGlnaGxpZ2h0LWZvbnQqCisJZm9udC1uYW1lIGlzIHRoZSBuYW1lIG9mIGEgZm9udCwgYXMgaXQgaXMgdXNlZCBvbiB0aGUgc3lzdGVtIFZpbQorCXJ1bnMgb24uICBGb3IgWDExIHRoaXMgaXMgYSBjb21wbGljYXRlZCBuYW1lLCBmb3IgZXhhbXBsZTogPgorICAgZm9udD0tbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEKKzwKKwlUaGUgZm9udC1uYW1lICJOT05FIiBjYW4gYmUgdXNlZCB0byByZXZlcnQgdG8gdGhlIGRlZmF1bHQgZm9udC4KKwlXaGVuIHNldHRpbmcgdGhlIGZvbnQgZm9yIHRoZSAiTm9ybWFsIiBncm91cCwgdGhpcyBiZWNvbWVzIHRoZSBkZWZhdWx0CisJZm9udCAodW50aWwgdGhlICdndWlmb250JyBvcHRpb24gaXMgY2hhbmdlZDsgdGhlIGxhc3Qgb25lIHNldCBpcworCXVzZWQpLgorCVRoZSBmb2xsb3dpbmcgb25seSB3b3JrcyB3aXRoIE1vdGlmIGFuZCBBdGhlbmEsIG5vdCB3aXRoIG90aGVyIEdVSXM6CisJV2hlbiBzZXR0aW5nIHRoZSBmb250IGZvciB0aGUgIk1lbnUiIGdyb3VwLCB0aGUgbWVudXMgd2lsbCBiZSBjaGFuZ2VkLgorCVdoZW4gc2V0dGluZyB0aGUgZm9udCBmb3IgdGhlICJUb29sdGlwIiBncm91cCwgdGhlIHRvb2x0aXBzIHdpbGwgYmUKKwljaGFuZ2VkLgorCUFsbCBmb250cyB1c2VkLCBleGNlcHQgZm9yIE1lbnUgYW5kIFRvb2x0aXAsIHNob3VsZCBiZSBvZiB0aGUgc2FtZQorCWNoYXJhY3RlciBzaXplIGFzIHRoZSBkZWZhdWx0IGZvbnQhICBPdGhlcndpc2UgcmVkcmF3aW5nIHByb2JsZW1zIHdpbGwKKwlvY2N1ci4KKworZ3VpZmc9e2NvbG9yLW5hbWV9CQkJCQkqaGlnaGxpZ2h0LWd1aWZnKgorZ3VpYmc9e2NvbG9yLW5hbWV9CQkJCQkqaGlnaGxpZ2h0LWd1aWJnKgorCVRoZXNlIGdpdmUgdGhlIGZvcmVncm91bmQgKGd1aWZnKSBhbmQgYmFja2dyb3VuZCAoZ3VpYmcpIGNvbG9yIHRvCisJdXNlIGluIHRoZSBHVUkuICBUaGVyZSBhcmUgYSBmZXcgc3BlY2lhbCBuYW1lczoKKwkJTk9ORQkJbm8gY29sb3IgKHRyYW5zcGFyZW50KQorCQliZwkJdXNlIG5vcm1hbCBiYWNrZ3JvdW5kIGNvbG9yCisJCWJhY2tncm91bmQJdXNlIG5vcm1hbCBiYWNrZ3JvdW5kIGNvbG9yCisJCWZnCQl1c2Ugbm9ybWFsIGZvcmVncm91bmQgY29sb3IKKwkJZm9yZWdyb3VuZAl1c2Ugbm9ybWFsIGZvcmVncm91bmQgY29sb3IKKwlUbyB1c2UgYSBjb2xvciBuYW1lIHdpdGggYW4gZW1iZWRkZWQgc3BhY2Ugb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXIsCisJcHV0IGl0IGluIHNpbmdsZSBxdW90ZXMuICBUaGUgc2luZ2xlIHF1b3RlIGNhbm5vdCBiZSB1c2VkIHRoZW4uCisJRXhhbXBsZTogPgorCSAgICA6aGkgY29tbWVudCBndWlmZz0nc2FsbW9uIHBpbmsnCis8CisJCQkJCQkJKmd1aS1jb2xvcnMqCisJU3VnZ2VzdGVkIGNvbG9yIG5hbWVzICh0aGVzZSBhcmUgYXZhaWxhYmxlIG9uIG1vc3Qgc3lzdGVtcyk6CisJICAgIFJlZAkJTGlnaHRSZWQJRGFya1JlZAorCSAgICBHcmVlbglMaWdodEdyZWVuCURhcmtHcmVlbglTZWFHcmVlbgorCSAgICBCbHVlCUxpZ2h0Qmx1ZQlEYXJrQmx1ZQlTbGF0ZUJsdWUKKwkgICAgQ3lhbglMaWdodEN5YW4JRGFya0N5YW4KKwkgICAgTWFnZW50YQlMaWdodE1hZ2VudGEJRGFya01hZ2VudGEKKwkgICAgWWVsbG93CUxpZ2h0WWVsbG93CUJyb3duCQlEYXJrWWVsbG93CisJICAgIEdyYXkJTGlnaHRHcmF5CURhcmtHcmF5CisJICAgIEJsYWNrCVdoaXRlCisJICAgIE9yYW5nZQlQdXJwbGUJCVZpb2xldAorCisJSW4gdGhlIFdpbjMyIEdVSSB2ZXJzaW9uLCBhZGRpdGlvbmFsIHN5c3RlbSBjb2xvcnMgYXJlIGF2YWlsYWJsZS4gIFNlZQorCXx3aW4zMi1jb2xvcnN8LgorCisJWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjb2xvciBieSBpdHMgUmVkLCBHcmVlbiBhbmQgQmx1ZSB2YWx1ZXMuCisJVGhlIGZvcm1hdCBpcyAiI3JyZ2diYiIsIHdoZXJlCisJCSJyciIJaXMgdGhlIFJlZCB2YWx1ZQorCQkiYmIiCWlzIHRoZSBCbHVlIHZhbHVlCisJCSJnZyIJaXMgdGhlIEdyZWVuIHZhbHVlCisJQWxsIHZhbHVlcyBhcmUgaGV4YWRlY2ltYWwsIHJhbmdlIGZyb20gIjAwIiB0byAiZmYiLiAgRXhhbXBsZXM6ID4KKyAgOmhpZ2hsaWdodCBDb21tZW50IGd1aWZnPSMxMWYwYzMgZ3VpYmc9I2ZmMDBmZgorPAorCQkJCQkqaGlnaGxpZ2h0LWdyb3VwcyogKmhpZ2hsaWdodC1kZWZhdWx0KgorVGhlc2UgYXJlIHRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZyBncm91cHMuICBUaGVzZSBncm91cHMgYXJlIHVzZWQgYnkgdGhlCisnaGlnaGxpZ2h0JyBvcHRpb24gZGVmYXVsdC4gIE5vdGUgdGhhdCB0aGUgaGlnaGxpZ2h0aW5nIGRlcGVuZHMgb24gdGhlIHZhbHVlCitvZiAnYmFja2dyb3VuZCcuICBZb3UgY2FuIHNlZSB0aGUgY3VycmVudCBzZXR0aW5ncyB3aXRoIHRoZSAiOmhpZ2hsaWdodCIKK2NvbW1hbmQuCisJCQkJCQkJKmhsLUN1cnNvcioKK0N1cnNvcgkJdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yCisJCQkJCQkJKmhsLUN1cnNvcklNKgorQ3Vyc29ySU0JbGlrZSBDdXJzb3IsIGJ1dCB1c2VkIHdoZW4gaW4gSU1FIG1vZGUgfEN1cnNvcklNfAorCQkJCQkJCSpobC1EaXJlY3RvcnkqCitEaXJlY3RvcnkJZGlyZWN0b3J5IG5hbWVzIChhbmQgb3RoZXIgc3BlY2lhbCBuYW1lcyBpbiBsaXN0aW5ncykKKwkJCQkJCQkqaGwtRGlmZkFkZCoKK0RpZmZBZGQJCWRpZmYgbW9kZTogQWRkZWQgbGluZSB8ZGlmZi50eHR8CisJCQkJCQkJKmhsLURpZmZDaGFuZ2UqCitEaWZmQ2hhbmdlCWRpZmYgbW9kZTogQ2hhbmdlZCBsaW5lIHxkaWZmLnR4dHwKKwkJCQkJCQkqaGwtRGlmZkRlbGV0ZSoKK0RpZmZEZWxldGUJZGlmZiBtb2RlOiBEZWxldGVkIGxpbmUgfGRpZmYudHh0fAorCQkJCQkJCSpobC1EaWZmVGV4dCoKK0RpZmZUZXh0CWRpZmYgbW9kZTogQ2hhbmdlZCB0ZXh0IHdpdGhpbiBhIGNoYW5nZWQgbGluZSB8ZGlmZi50eHR8CisJCQkJCQkJKmhsLUVycm9yTXNnKgorRXJyb3JNc2cJZXJyb3IgbWVzc2FnZXMgb24gdGhlIGNvbW1hbmQgbGluZQorCQkJCQkJCSpobC1WZXJ0U3BsaXQqCitWZXJ0U3BsaXQJdGhlIGNvbHVtbiBzZXBhcmF0aW5nIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cworCQkJCQkJCSpobC1Gb2xkZWQqCitGb2xkZWQJCWxpbmUgdXNlZCBmb3IgY2xvc2VkIGZvbGRzCisJCQkJCQkJKmhsLUZvbGRDb2x1bW4qCitGb2xkQ29sdW1uCSdmb2xkY29sdW1uJworCQkJCQkJCSpobC1TaWduQ29sdW1uKgorU2lnbkNvbHVtbgljb2x1bW4gd2hlcmUgfHNpZ25zfCBhcmUgZGlzcGxheWVkCisJCQkJCQkJKmhsLUluY1NlYXJjaCoKK0luY1NlYXJjaAknaW5jc2VhcmNoJyBoaWdobGlnaHRpbmc7IGFsc28gdXNlZCBmb3IgdGhlIHRleHQgcmVwbGFjZWQgd2l0aAorCQkiOnMvLy9jIgorCQkJCQkJCSpobC1MaW5lTnIqCitMaW5lTnIJCWxpbmUgbnVtYmVyIGZvciAiOm51bWJlciIgYW5kICI6IyIgY29tbWFuZHMsIGFuZCB3aGVuICdudW1iZXInCisJCW9wdGlvbiBpcyBzZXQuCisJCQkJCQkJKmhsLU1vZGVNc2cqCitNb2RlTXNnCQknc2hvd21vZGUnIG1lc3NhZ2UgKGUuZy4sICItLSBJTlNFUlQgLS0iKQorCQkJCQkJCSpobC1Nb3JlTXNnKgorTW9yZU1zZwkJfG1vcmUtcHJvbXB0fAorCQkJCQkJCSpobC1Ob25UZXh0KgorTm9uVGV4dAkJJ34nIGFuZCAnQCcgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93LCBjaGFyYWN0ZXJzIGZyb20KKwkJJ3Nob3dicmVhaycgYW5kIG90aGVyIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgcmVhbGx5IGV4aXN0IGluCisJCXRoZSB0ZXh0IChlLmcuLCAiPiIgZGlzcGxheWVkIHdoZW4gYSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIKKwkJZG9lc24ndCBmaXQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSkuCisJCQkJCQkJKmhsLU5vcm1hbCoKK05vcm1hbAkJbm9ybWFsIHRleHQKKwkJCQkJCQkqaGwtUXVlc3Rpb24qCitRdWVzdGlvbgl8aGl0LWVudGVyfCBwcm9tcHQgYW5kIHllcy9ubyBxdWVzdGlvbnMKKwkJCQkJCQkqaGwtU2VhcmNoKgorU2VhcmNoCQlMYXN0IHNlYXJjaCBwYXR0ZXJuIGhpZ2hsaWdodGluZyAoc2VlICdobHNlYXJjaCcpLgorCQlBbHNvIHVzZWQgZm9yIGhpZ2hsaWdodGluZyB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBxdWlja2ZpeAorCQl3aW5kb3cgYW5kIHNpbWlsYXIgaXRlbXMgdGhhdCBuZWVkIHRvIHN0YW5kIG91dC4KKwkJCQkJCQkqaGwtU3BlY2lhbEtleSoKK1NwZWNpYWxLZXkJTWV0YSBhbmQgc3BlY2lhbCBrZXlzIGxpc3RlZCB3aXRoICI6bWFwIiwgYWxzbyBmb3IgdGV4dCB1c2VkCisJCXRvIHNob3cgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiB0aGUgdGV4dCwgJ2xpc3RjaGFycycuCisJCUdlbmVyYWxseTogdGV4dCB0aGF0IGlzIGRpc3BsYXllZCBkaWZmZXJlbnRseSBmcm9tIHdoYXQgaXQKKwkJcmVhbGx5IGlzLgorCQkJCQkJCSpobC1TdGF0dXNMaW5lKgorU3RhdHVzTGluZQlzdGF0dXMgbGluZSBvZiBjdXJyZW50IHdpbmRvdworCQkJCQkJCSpobC1TdGF0dXNMaW5lTkMqCitTdGF0dXNMaW5lTkMJc3RhdHVzIGxpbmVzIG9mIG5vdC1jdXJyZW50IHdpbmRvd3MKKwkJTm90ZTogaWYgdGhpcyBpcyBlcXVhbCB0byAiU3RhdHVzTGluZSIgVmltIHdpbGwgdXNlICJeXl4iIGluCisJCXRoZSBzdGF0dXMgbGluZSBvZiB0aGUgY3VycmVudCB3aW5kb3cuCisJCQkJCQkJKmhsLVRpdGxlKgorVGl0bGUJCXRpdGxlcyBmb3Igb3V0cHV0IGZyb20gIjpzZXQgYWxsIiwgIjphdXRvY21kIiBldGMuCisJCQkJCQkJKmhsLVZpc3VhbCoKK1Zpc3VhbAkJVmlzdWFsIG1vZGUgc2VsZWN0aW9uCisJCQkJCQkJKmhsLVZpc3VhbE5PUyoKK1Zpc3VhbE5PUwlWaXN1YWwgbW9kZSBzZWxlY3Rpb24gd2hlbiB2aW0gaXMgIk5vdCBPd25pbmcgdGhlIFNlbGVjdGlvbiIuCisJCU9ubHkgWDExIEd1aSdzIHxndWkteDExfCBhbmQgfHh0ZXJtLWNsaXBib2FyZHwgc3VwcG9ydHMgdGhpcy4KKwkJCQkJCQkqaGwtV2FybmluZ01zZyoKK1dhcm5pbmdNc2cJd2FybmluZyBtZXNzYWdlcworCQkJCQkJCSpobC1XaWxkTWVudSoKK1dpbGRNZW51CWN1cnJlbnQgbWF0Y2ggaW4gJ3dpbGRtZW51JyBjb21wbGV0aW9uCisKKwkJCQkJCSpobC1Vc2VyMSogKmhsLVVzZXIxLi45KgorVGhlICdzdGF0dXNsaW5lJyBzeW50YXggYWxsb3dzIHRoZSB1c2Ugb2YgOSBkaWZmZXJlbnQgaGlnaGxpZ2h0cyBpbiB0aGUKK3N0YXR1c2xpbmUgYW5kIHJ1bGVyICh2aWEgJ3J1bGVyZm9ybWF0JykuIFRoZSBuYW1lcyBhcmUgVXNlcjEgdG8gVXNlcjkuCisKK0ZvciB0aGUgR1VJIHlvdSBjYW4gdXNlIHRoZXNlIGdyb3VwcyB0byBzZXQgdGhlIGNvbG9ycyBmb3IgdGhlIG1lbnUsCitzY3JvbGxiYXJzIGFuZCB0b29sdGlwcy4gIFRoZXkgZG9uJ3QgaGF2ZSBkZWZhdWx0cy4gIFRoaXMgZG9lc24ndCB3b3JrIGZvciB0aGUKK1dpbjMyIEdVSS4gIE9ubHkgdGhyZWUgaGlnaGxpZ2h0IGFyZ3VtZW50cyBoYXZlIGFueSBlZmZlY3QgaGVyZTogZm9udCwgZ3VpYmcsCithbmQgZ3VpZmcuCisKKwkJCQkJCQkqaGwtTWVudSoKK01lbnUJCUN1cnJlbnQgZm9udCwgYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCBjb2xvcnMgb2YgdGhlIG1lbnVzLgorCQlBbHNvIHVzZWQgZm9yIHRoZSB0b29sYmFyLgorCQlBcHBsaWNhYmxlIGhpZ2hsaWdodCBhcmd1bWVudHM6IGZvbnQsIGd1aWJnLCBndWlmZy4KKworCQlOT1RFOiBGb3IgTW90aWYgYW5kIEF0aGVuYSB0aGUgZm9udCBhcmd1bWVudCBhY3R1YWxseQorCQlzcGVjaWZpZXMgYSBmb250c2V0IGF0IGFsbCB0aW1lcywgbm8gbWF0dGVyIGlmICdndWlmb250c2V0JyBpcworCQllbXB0eSwgYW5kIGFzIHN1Y2ggaXQgaXMgdGllZCB0byB0aGUgY3VycmVudCB8Omxhbmd1YWdlfCB3aGVuCisJCXNldC4KKworCQkJCQkJCSpobC1TY3JvbGxiYXIqCitTY3JvbGxiYXIJQ3VycmVudCBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIG9mIHRoZSBtYWluIHdpbmRvdydzCisJCXNjcm9sbGJhcnMuCisJCUFwcGxpY2FibGUgaGlnaGxpZ2h0IGFyZ3VtZW50czogZ3VpYmcsIGd1aWZnLgorCisJCQkJCQkJKmhsLVRvb2x0aXAqCitUb29sdGlwCQlDdXJyZW50IGZvbnQsIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgb2YgdGhlIHRvb2x0aXBzLgorCQlBcHBsaWNhYmxlIGhpZ2hsaWdodCBhcmd1bWVudHM6IGZvbnQsIGd1aWJnLCBndWlmZy4KKworCQlOT1RFOiBGb3IgTW90aWYgYW5kIEF0aGVuYSB0aGUgZm9udCBhcmd1bWVudCBhY3R1YWxseQorCQlzcGVjaWZpZXMgYSBmb250c2V0IGF0IGFsbCB0aW1lcywgbm8gbWF0dGVyIGlmICdndWlmb250c2V0JyBpcworCQllbXB0eSwgYW5kIGFzIHN1Y2ggaXQgaXMgdGllZCB0byB0aGUgY3VycmVudCB8Omxhbmd1YWdlfCB3aGVuCisJCXNldC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMy4gTGlua2luZyBncm91cHMJCSo6aGktbGluayogKjpoaWdobGlnaHQtbGluayogKkU0MTIqICpFNDEzKgorCitXaGVuIHlvdSB3YW50IHRvIHVzZSB0aGUgc2FtZSBoaWdobGlnaHRpbmcgZm9yIHNldmVyYWwgc3ludGF4IGdyb3VwcywgeW91CitjYW4gZG8gdGhpcyBtb3JlIGVhc2lseSBieSBsaW5raW5nIHRoZSBncm91cHMgaW50byBvbmUgY29tbW9uIGhpZ2hsaWdodAorZ3JvdXAsIGFuZCBnaXZlIHRoZSBjb2xvciBhdHRyaWJ1dGVzIG9ubHkgZm9yIHRoYXQgZ3JvdXAuCisKK1RvIHNldCBhIGxpbms6CisKKyAgICA6aGlbZ2hsaWdodF1bIV0gW2RlZmF1bHRdIGxpbmsge2Zyb20tZ3JvdXB9IHt0by1ncm91cH0KKworVG8gcmVtb3ZlIGEgbGluazoKKworICAgIDpoaVtnaGxpZ2h0XVshXSBbZGVmYXVsdF0gbGluayB7ZnJvbS1ncm91cH0gTk9ORQorCitOb3RlczoJCQkJCQkJKkU0MTQqCistIElmIHRoZSB7ZnJvbS1ncm91cH0gYW5kL29yIHt0by1ncm91cH0gZG9lc24ndCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gIFlvdQorICBkb24ndCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBmb3IgYSBub24tZXhpc3RpbmcgZ3JvdXAuCistIEFzIHNvb24gYXMgeW91IHVzZSBhICI6aGlnaGxpZ2h0IiBjb21tYW5kIGZvciBhIGxpbmtlZCBncm91cCwgdGhlIGxpbmsgaXMKKyAgcmVtb3ZlZC4KKy0gSWYgdGhlcmUgYXJlIGFscmVhZHkgaGlnaGxpZ2h0IHNldHRpbmdzIGZvciB0aGUge2Zyb20tZ3JvdXB9LCB0aGUgbGluayBpcworICBub3QgbWFkZSwgdW5sZXNzIHRoZSAnIScgaXMgZ2l2ZW4uICBGb3IgYSAiOmhpZ2hsaWdodCBsaW5rIiBjb21tYW5kIGluIGEKKyAgc291cmNlZCBmaWxlLCB5b3UgZG9uJ3QgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNraXAKKyAgbGlua3MgZm9yIGdyb3VwcyB0aGF0IGFscmVhZHkgaGF2ZSBzZXR0aW5ncy4KKworCQkJCQkqOmhpLWRlZmF1bHQqICo6aGlnaGxpZ2h0LWRlZmF1bHQqCitUaGUgW2RlZmF1bHRdIGFyZ3VtZW50IGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0aW5nIGZvciBhCitncm91cC4JSWYgaGlnaGxpZ2h0aW5nIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkIGZvciB0aGUgZ3JvdXAgdGhlIGNvbW1hbmQKK3dpbGwgYmUgaWdub3JlZC4gIEFsc28gd2hlbiB0aGVyZSBpcyBhbiBleGlzdGluZyBsaW5rLgorCitVc2luZyBbZGVmYXVsdF0gaXMgZXNwZWNpYWxseSB1c2VmdWwgdG8gb3ZlcnJ1bGUgdGhlIGhpZ2hsaWdodGluZyBvZiBhCitzcGVjaWZpYyBzeW50YXggZmlsZS4gIEZvciBleGFtcGxlLCB0aGUgQyBzeW50YXggZmlsZSBjb250YWluczogPgorCTpoaWdobGlnaHQgZGVmYXVsdCBsaW5rIGNDb21tZW50IENvbW1lbnQKK0lmIHlvdSBsaWtlIFF1ZXN0aW9uIGhpZ2hsaWdodGluZyBmb3IgQyBjb21tZW50cywgcHV0IHRoaXMgaW4geW91ciB2aW1yYyBmaWxlOiA+CisJOmhpZ2hsaWdodCBsaW5rIGNDb21tZW50IFF1ZXN0aW9uCitXaXRob3V0IHRoZSAiZGVmYXVsdCIgaW4gdGhlIEMgc3ludGF4IGZpbGUsIHRoZSBoaWdobGlnaHRpbmcgd291bGQgYmUKK292ZXJydWxlZCB3aGVuIHRoZSBzeW50YXggZmlsZSBpcyBsb2FkZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTQuIENsZWFuaW5nIHVwCQkJCQkJKjpzeW4tY2xlYXIqICpFMzkxKgorCitJZiB5b3Ugd2FudCB0byBjbGVhciB0aGUgc3ludGF4IHN0dWZmIGZvciB0aGUgY3VycmVudCBidWZmZXIsIHlvdSBjYW4gdXNlIHRoaXMKK2NvbW1hbmQ6ID4KKyAgOnN5bnRheCBjbGVhcgorCitUaGlzIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgd2hlbiB5b3Ugd2FudCB0byBzd2l0Y2ggb2ZmIHN5bnRheCBoaWdobGlnaHRpbmcsCitvciB3aGVuIHlvdSB3YW50IHRvIHN3aXRjaCB0byB1c2luZyBhbm90aGVyIHN5bnRheC4gIEl0J3Mgbm9ybWFsbHkgbm90IG5lZWRlZAoraW4gYSBzeW50YXggZmlsZSBpdHNlbGYsIGJlY2F1c2Ugc3ludGF4IGlzIGNsZWFyZWQgYnkgdGhlIGF1dG9jb21tYW5kcyB0aGF0Citsb2FkIHRoZSBzeW50YXggZmlsZS4KK1RoZSBjb21tYW5kIGFsc28gZGVsZXRlcyB0aGUgImI6Y3VycmVudF9zeW50YXgiIHZhcmlhYmxlLCBzaW5jZSBubyBzeW50YXggaXMKK2xvYWRlZCBhZnRlciB0aGlzIGNvbW1hbmQuCisKK0lmIHlvdSB3YW50IHRvIGRpc2FibGUgc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgYWxsIGJ1ZmZlcnMsIHlvdSBuZWVkIHRvIHJlbW92ZQordGhlIGF1dG9jb21tYW5kcyB0aGF0IGxvYWQgdGhlIHN5bnRheCBmaWxlczogPgorICA6c3ludGF4IG9mZgorCitXaGF0IHRoaXMgY29tbWFuZCBhY3R1YWxseSBkb2VzLCBpcyBleGVjdXRpbmcgdGhlIGNvbW1hbmQgPgorICA6c291cmNlICRWSU1SVU5USU1FL3N5bnRheC9ub3N5bnRheC52aW0KK1NlZSB0aGUgIm5vc3ludGF4LnZpbSIgZmlsZSBmb3IgZGV0YWlscy4gIE5vdGUgdGhhdCBmb3IgdGhpcyB0byB3b3JrCiskVklNUlVOVElNRSBtdXN0IGJlIHZhbGlkLiAgU2VlIHwkVklNUlVOVElNRXwuCisKK1RvIGNsZWFuIHVwIHNwZWNpZmljIHN5bnRheCBncm91cHMgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlcjogPgorICA6c3ludGF4IGNsZWFyIHtncm91cC1uYW1lfSAuLgorVGhpcyByZW1vdmVzIGFsbCBwYXR0ZXJucyBhbmQga2V5d29yZHMgZm9yIHtncm91cC1uYW1lfS4KKworVG8gY2xlYW4gdXAgc3BlY2lmaWMgc3ludGF4IGdyb3VwIGxpc3RzIGZvciB0aGUgY3VycmVudCBidWZmZXI6ID4KKyAgOnN5bnRheCBjbGVhciBAe2dyb3VwbGlzdC1uYW1lfSAuLgorVGhpcyBzZXRzIHtncm91cGxpc3QtbmFtZX0ncyBjb250ZW50cyB0byBhbiBlbXB0eSBsaXN0LgorCisJCQkJCQkqOnN5bnRheC1yZXNldCogKjpzeW4tcmVzZXQqCitJZiB5b3UgaGF2ZSBjaGFuZ2VkIHRoZSBjb2xvcnMgYW5kIG1lc3NlZCB0aGVtIHVwLCB1c2UgdGhpcyBjb21tYW5kIHRvIGdldCB0aGUKK2RlZmF1bHRzIGJhY2s6ID4KKworICA6c3ludGF4IHJlc2V0CisKK1RoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGNvbG9ycyBmb3IgdGhlICdoaWdobGlnaHQnIG9wdGlvbi4KKworTm90ZSB0aGF0IHRoZSBzeW50YXggY29sb3JzIHRoYXQgeW91IHNldCBpbiB5b3VyIHZpbXJjIGZpbGUgd2lsbCBhbHNvIGJlIHJlc2V0CitiYWNrIHRvIHRoZWlyIFZpbSBkZWZhdWx0LgorTm90ZSB0aGF0IGlmIHlvdSBhcmUgdXNpbmcgYSBjb2xvciBzY2hlbWUsIHRoZSBjb2xvcnMgZGVmaW5lZCBieSB0aGUgY29sb3IKK3NjaGVtZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyB3aWxsIGJlIGxvc3QuCisKK1doYXQgdGhpcyBhY3R1YWxseSBkb2VzIGlzOiA+CisKKwlsZXQgZzpzeW50YXhfY21kID0gInJlc2V0IgorCXJ1bnRpbWUhIHN5bnRheC9zeW5jb2xvci52aW0KKworTm90ZSB0aGF0IHRoaXMgdXNlcyB0aGUgJ3J1bnRpbWVwYXRoJyBvcHRpb24uCisKKwkJCQkJCQkqc3luY29sb3IqCitJZiB5b3Ugd2FudCB0byB1c2UgZGlmZmVyZW50IGNvbG9ycyBmb3Igc3ludGF4IGhpZ2hsaWdodGluZywgeW91IGNhbiBhZGQgYSBWaW0KK3NjcmlwdCBmaWxlIHRvIHNldCB0aGVzZSBjb2xvcnMuICBQdXQgdGhpcyBmaWxlIGluIGEgZGlyZWN0b3J5IGluCisncnVudGltZXBhdGgnIHdoaWNoIGNvbWVzIGFmdGVyICRWSU1SVU5USU1FLCBzbyB0aGF0IHlvdXIgc2V0dGluZ3Mgb3ZlcnJ1bGUKK3RoZSBkZWZhdWx0IGNvbG9ycy4gIFRoaXMgd2F5IHRoZXNlIGNvbG9ycyB3aWxsIGJlIHVzZWQgYWZ0ZXIgdGhlICI6c3ludGF4CityZXNldCIgY29tbWFuZC4KKworRm9yIFVuaXggeW91IGNhbiB1c2UgdGhlIGZpbGUgfi8udmltL2FmdGVyL3N5bnRheC9zeW5jb2xvci52aW0uICBFeGFtcGxlOiA+CisKKwlpZiAmYmFja2dyb3VuZCA9PSAibGlnaHQiCisJICBoaWdobGlnaHQgY29tbWVudCBjdGVybWZnPWRhcmtncmVlbiBndWlmZz1kYXJrZ3JlZW4KKwllbHNlCisJICBoaWdobGlnaHQgY29tbWVudCBjdGVybWZnPWdyZWVuIGd1aWZnPWdyZWVuCisJZW5kaWYKKworTm90ZSB0aGF0IHdoZW4gYSBjb2xvciBzY2hlbWUgaXMgdXNlZCwgdGhlcmUgbWlnaHQgYmUgc29tZSBjb25mdXNpb24gd2hldGhlcgoreW91ciBkZWZpbmVkIGNvbG9ycyBhcmUgdG8gYmUgdXNlZCBvciB0aGUgY29sb3JzIGZyb20gdGhlIHNjaGVtZS4gIFRoaXMKK2RlcGVuZHMgb24gdGhlIGNvbG9yIHNjaGVtZSBmaWxlLiAgU2VlIHw6Y29sb3JzY2hlbWV8LgorCisJCQkJCQkJKnN5bnRheF9jbWQqCitUaGUgInN5bnRheF9jbWQiIHZhcmlhYmxlIGlzIHNldCB0byBvbmUgb2YgdGhlc2UgdmFsdWVzIHdoZW4gdGhlCitzeW50YXgvc3luY29sb3IudmltIGZpbGVzIGFyZSBsb2FkZWQ6CisgICAib24iCQkiOnN5bnRheCBvbiIgY29tbWFuZC4gIEhpZ2hsaWdodCBjb2xvcnMgYXJlIG92ZXJydWxlZCBidXQKKwkJbGlua3MgYXJlIGtlcHQKKyAgICJlbmFibGUiCSI6c3ludGF4IGVuYWJsZSIgY29tbWFuZC4gIE9ubHkgZGVmaW5lIGNvbG9ycyBmb3IgZ3JvdXBzIHRoYXQKKwkJZG9uJ3QgaGF2ZSBoaWdobGlnaHRpbmcgeWV0LiAgVXNlICI6c3ludGF4IGRlZmF1bHQiLgorICAgInJlc2V0IgkiOnN5bnRheCByZXNldCIgY29tbWFuZCBvciBsb2FkaW5nIGEgY29sb3Igc2NoZW1lLiAgRGVmaW5lIGFsbAorCQl0aGUgY29sb3JzLgorICAgInNraXAiCURvbid0IGRlZmluZSBjb2xvcnMuICBVc2VkIHRvIHNraXAgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgd2hlbiBhCisJCXN5bmNvbG9yLnZpbSBmaWxlIGVhcmxpZXIgaW4gJ3J1bnRpbWVwYXRoJyBoYXMgYWxyZWFkeSBzZXQKKwkJdGhlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxNS4gSGlnaGxpZ2h0aW5nIHRhZ3MJCQkJCSp0YWctaGlnaGxpZ2h0KgorCitJZiB5b3Ugd2FudCB0byBoaWdobGlnaHQgYWxsIHRoZSB0YWdzIGluIHlvdXIgZmlsZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZworbWFwcGluZ3MuCisKKwk8RjExPgktLSBHZW5lcmF0ZSB0YWdzLnZpbSBmaWxlLCBhbmQgaGlnaGxpZ2h0IHRhZ3MuCisJPEYxMj4JLS0gSnVzdCBoaWdobGlnaHQgdGFncyBiYXNlZCBvbiBleGlzdGluZyB0YWdzLnZpbSBmaWxlLgorPgorICA6bWFwIDxGMTE+ICA6c3AgdGFnczxDUj46JXMvXlwoW14JOl0qOlwpXD1cKFteCV0qXCkuKi9zeW50YXgga2V5d29yZCBUYWcgXDIvPENSPjp3cSEgdGFncy52aW08Q1I+L148Q1I+PEYxMj4KKyAgOm1hcCA8RjEyPiAgOnNvIHRhZ3MudmltPENSPgorCitXQVJOSU5HOiBUaGUgbG9uZ2VyIHRoZSB0YWdzIGZpbGUsIHRoZSBzbG93ZXIgdGhpcyB3aWxsIGJlLCBhbmQgdGhlIG1vcmUKK21lbW9yeSBWaW0gd2lsbCBjb25zdW1lLgorCitPbmx5IGhpZ2hsaWdodGluZyB0eXBlZGVmcywgdW5pb25zIGFuZCBzdHJ1Y3RzIGNhbiBiZSBkb25lIHRvby4gIEZvciB0aGlzIHlvdQorbXVzdCB1c2UgRXh1YmVyYW50IGN0YWdzIChmb3VuZCBhdCBodHRwOi8vY3RhZ3Muc2YubmV0KS4KKworUHV0IHRoZXNlIGxpbmVzIGluIHlvdXIgTWFrZWZpbGU6CisKKyMgTWFrZSBhIGhpZ2hsaWdodCBmaWxlIGZvciB0eXBlcy4gIFJlcXVpcmVzIEV4dWJlcmFudCBjdGFncyBhbmQgYXdrCit0eXBlczogdHlwZXMudmltCit0eXBlcy52aW06ICouW2NoXQorCWN0YWdzIC1pPWdzdHVTIC1vLSAqLltjaF0gfFwKKwkJYXdrICdCRUdJTntwcmludGYoInN5bnRheCBrZXl3b3JkIFR5cGVcdCIpfVwKKwkJCXtwcmludGYoIiVzICIsICQkMSl9RU5Ee3ByaW50ICIifScgPiAkQAorCitBbmQgcHV0IHRoZXNlIGxpbmVzIGluIHlvdXIgLnZpbXJjOiA+CisKKyAgICIgbG9hZCB0aGUgdHlwZXMudmltIGhpZ2hsaWdodGluZyBmaWxlLCBpZiBpdCBleGlzdHMKKyAgIGF1dG9jbWQgQnVmUmVhZCxCdWZOZXdGaWxlICouW2NoXSBsZXQgZm5hbWUgPSBleHBhbmQoJzxhZmlsZT46cDpoJykgLiAnL3R5cGVzLnZpbScKKyAgIGF1dG9jbWQgQnVmUmVhZCxCdWZOZXdGaWxlICouW2NoXSBpZiBmaWxlcmVhZGFibGUoZm5hbWUpCisgICBhdXRvY21kIEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLltjaF0gICBleGUgJ3NvICcgLiBmbmFtZQorICAgYXV0b2NtZCBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5bY2hdIGVuZGlmCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTYuIENvbG9yIHh0ZXJtcwkJCQkqeHRlcm0tY29sb3IqICpjb2xvci14dGVybSoKKworTW9zdCBjb2xvciB4dGVybXMgaGF2ZSBvbmx5IGVpZ2h0IGNvbG9ycy4gIElmIHlvdSBkb24ndCBnZXQgY29sb3JzIHdpdGggdGhlCitkZWZhdWx0IHNldHVwLCBpdCBzaG91bGQgd29yayB3aXRoIHRoZXNlIGxpbmVzIGluIHlvdXIgLnZpbXJjOiA+CisgICA6aWYgJnRlcm0gPX4gInh0ZXJtIgorICAgOiAgaWYgaGFzKCJ0ZXJtaW5mbyIpCisgICA6CXNldCB0X0NvPTgKKyAgIDoJc2V0IHRfU2Y9PEVzYz5bMyVwMSVkbQorICAgOglzZXQgdF9TYj08RXNjPls0JXAxJWRtCisgICA6ICBlbHNlCisgICA6CXNldCB0X0NvPTgKKyAgIDoJc2V0IHRfU2Y9PEVzYz5bMyVkbQorICAgOglzZXQgdF9TYj08RXNjPls0JWRtCisgICA6ICBlbmRpZgorICAgOmVuZGlmCis8CVs8RXNjPiBpcyBhIHJlYWwgZXNjYXBlLCB0eXBlIENUUkwtViA8RXNjPl0KKworWW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIHRoZSBmaXJzdCAiaWYiIHRvIG1hdGNoIHRoZSBuYW1lIG9mIHlvdXIgdGVybWluYWwsCitlLmcuICJkdHRlcm0iIGluc3RlYWQgb2YgInh0ZXJtIi4KKworTm90ZTogRG8gdGhlc2Ugc2V0dGluZ3MgQkVGT1JFIGRvaW5nICI6c3ludGF4IG9uIi4gIE90aGVyd2lzZSB0aGUgY29sb3JzIG1heQorYmUgd3JvbmcuCisJCQkJCQkJKnhpdGVybSogKnJ4dnQqCitUaGUgYWJvdmUgc2V0dGluZ3MgaGF2ZSBiZWVuIG1lbnRpb25lZCB0byB3b3JrIGZvciB4aXRlcm0gYW5kIHJ4dnQgdG9vLgorQnV0IGZvciB1c2luZyAxNiBjb2xvcnMgaW4gYW4gcnh2dCB0aGVzZSBzaG91bGQgd29yayB3aXRoIHRlcm1pbmZvOiA+CisJOnNldCB0X0FCPTxFc2M+WyU/JXAxJXs4fSU8JXQyNTslcDElezQwfSUrJWU1OyVwMSV7MzJ9JSslOyVkbQorCTpzZXQgdF9BRj08RXNjPlslPyVwMSV7OH0lPCV0MjI7JXAxJXszMH0lKyVlMTslcDElezIyfSUrJTslZG0KKzwKKwkJCQkJCQkqY29sb3J0ZXN0LnZpbSoKK1RvIHRlc3QgeW91ciBjb2xvciBzZXR1cCwgYSBmaWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBWaW0gZGlzdHJpYnV0aW9uLgorVG8gdXNlIGl0LCBleGVjdXRlIHRoZXNlIGNvbW1hbmRzOiA+CisgICA6ZSAkVklNUlVOVElNRS9zeW50YXgvY29sb3J0ZXN0LnZpbQorICAgOnNvICUKKworU29tZSB2ZXJzaW9ucyBvZiB4dGVybSAoYW5kIG90aGVyIHRlcm1pbmFscywgbGlrZSB0aGUgbGludXggY29uc29sZSkgY2FuCitvdXRwdXQgbGlnaHRlciBmb3JlZ3JvdW5kIGNvbG9ycywgZXZlbiB0aG91Z2ggdGhlIG51bWJlciBvZiBjb2xvcnMgaXMgZGVmaW5lZAorYXQgOC4gIFRoZXJlZm9yZSBWaW0gc2V0cyB0aGUgImN0ZXJtPWJvbGQiIGF0dHJpYnV0ZSBmb3IgbGlnaHQgZm9yZWdyb3VuZAorY29sb3JzLCB3aGVuICd0X0NvJyBpcyA4LgorCisJCQkJCQkJKnhmcmVlLXh0ZXJtKgorVG8gZ2V0IDE2IGNvbG9ycyBvciBtb3JlLCBnZXQgdGhlIG5ld2VzdCB4dGVybSB2ZXJzaW9uICh3aGljaCBzaG91bGQgYmUKK2luY2x1ZGVkIHdpdGggWGZyZWU4NiAzLjMgYW5kIGxhdGVyKS4gIFlvdSBjYW4gYWxzbyBmaW5kIHRoZSBsYXRlc3QgdmVyc2lvbgorYXQ6ID4KKwlodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQveHRlcm0veHRlcm0uaHRtbAorSGVyZSBpcyBhIGdvb2Qgd2F5IHRvIGNvbmZpZ3VyZSBpdC4gIFRoaXMgdXNlcyA4OCBjb2xvcnMgYW5kIGVuYWJsZXMgdGhlCit0ZXJtY2FwLXF1ZXJ5IGZlYXR1cmUsIHdoaWNoIGFsbG93cyBWaW0gdG8gYXNrIHRoZSB4dGVybSBob3cgbWFueSBjb2xvcnMgaXQKK3N1cHBvcnRzLiA+CisJLi9jb25maWd1cmUgLS1kaXNhYmxlLWJvbGQtY29sb3IgLS1lbmFibGUtODgtY29sb3IgLS1lbmFibGUtdGNhcC1xdWVyeQorSWYgeW91IG9ubHkgZ2V0IDggY29sb3JzLCBjaGVjayB0aGUgeHRlcm0gY29tcGlsYXRpb24gc2V0dGluZ3MuCisoQWxzbyBzZWUgfFVURjgteHRlcm18IGZvciB1c2luZyB0aGlzIHh0ZXJtIHdpdGggVVRGLTggY2hhcmFjdGVyIGVuY29kaW5nKS4KKworVGhpcyB4dGVybSBzaG91bGQgd29yayB3aXRoIHRoZXNlIGxpbmVzIGluIHlvdXIgLnZpbXJjIChmb3IgMTYgY29sb3JzKTogPgorICAgOmlmIGhhcygidGVybWluZm8iKQorICAgOiAgc2V0IHRfQ289MTYKKyAgIDogIHNldCB0X0FCPTxFc2M+WyU/JXAxJXs4fSU8JXQlcDElezQwfSUrJWUlcDElezkyfSUrJTslZG0KKyAgIDogIHNldCB0X0FGPTxFc2M+WyU/JXAxJXs4fSU8JXQlcDElezMwfSUrJWUlcDElezgyfSUrJTslZG0KKyAgIDplbHNlCisgICA6ICBzZXQgdF9Dbz0xNgorICAgOiAgc2V0IHRfU2Y9PEVzYz5bMyVkbQorICAgOiAgc2V0IHRfU2I9PEVzYz5bNCVkbQorICAgOmVuZGlmCis8CVs8RXNjPiBpcyBhIHJlYWwgZXNjYXBlLCB0eXBlIENUUkwtViA8RXNjPl0KKworV2l0aG91dCB8K3Rlcm1pbmZvfCwgVmltIHdpbGwgcmVjb2duaXplIHRoZXNlIHNldHRpbmdzLCBhbmQgYXV0b21hdGljYWxseQordHJhbnNsYXRlIGN0ZXJtIGNvbG9ycyBvZiA4IGFuZCBhYm92ZSB0byAiPEVzYz5bOSVkbSIgYW5kICI8RXNjPlsxMCVkbSIuCitDb2xvcnMgYWJvdmUgMTYgYXJlIGFsc28gdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5LgorCitGb3IgMjU2IGNvbG9ycyB0aGlzIGhhcyBiZWVuIHJlcG9ydGVkIHRvIHdvcms6ID4KKworICAgOnNldCB0X0FCPTxFc2M+WzQ4OzU7JWRtCisgICA6c2V0IHRfQUY9PEVzYz5bMzg7NTslZG0KKworT3IganVzdCBzZXQgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gInh0ZXJtLWNvbG9yIiBvciAieHRlcm0tMTZjb2xvciIKK2FuZCB0cnkgaWYgdGhhdCB3b3Jrcy4KKworWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZXNlIFggcmVzb3VyY2VzIChpbiB5b3VyIH4vLlhkZWZhdWx0cyBmaWxlKToKKwlYVGVybSpjb2xvcjA6CQkJIzAwMDAwMAorCVhUZXJtKmNvbG9yMToJCQkjYzAwMDAwCisJWFRlcm0qY29sb3IyOgkJCSMwMDgwMDAKKwlYVGVybSpjb2xvcjM6CQkJIzgwODAwMAorCVhUZXJtKmNvbG9yNDoJCQkjMDAwMGMwCisJWFRlcm0qY29sb3I1OgkJCSNjMDAwYzAKKwlYVGVybSpjb2xvcjY6CQkJIzAwODA4MAorCVhUZXJtKmNvbG9yNzoJCQkjYzBjMGMwCisJWFRlcm0qY29sb3I4OgkJCSM4MDgwODAKKwlYVGVybSpjb2xvcjk6CQkJI2ZmNjA2MAorCVhUZXJtKmNvbG9yMTA6CQkJIzAwZmYwMAorCVhUZXJtKmNvbG9yMTE6CQkJI2ZmZmYwMAorCVhUZXJtKmNvbG9yMTI6CQkJIzgwODBmZgorCVhUZXJtKmNvbG9yMTM6CQkJI2ZmNDBmZgorCVhUZXJtKmNvbG9yMTQ6CQkJIzAwZmZmZgorCVhUZXJtKmNvbG9yMTU6CQkJI2ZmZmZmZgorCVh0ZXJtKmN1cnNvckNvbG9yOgkJQmxhY2sKKworW05vdGU6IFRoZSBjdXJzb3JDb2xvciBpcyByZXF1aXJlZCB0byB3b3JrIGFyb3VuZCBhIGJ1Zywgd2hpY2ggY2hhbmdlcyB0aGUKK2N1cnNvciBjb2xvciB0byB0aGUgY29sb3Igb2YgdGhlIGxhc3QgZHJhd24gdGV4dC4gIFRoaXMgaGFzIGJlZW4gZml4ZWQgYnkgYQorbmV3ZXIgdmVyc2lvbiBvZiB4dGVybSwgYnV0IG5vdCBldmVyeWJvZHkgaXMgaXQgdXNpbmcgeWV0Ll0KKworVG8gZ2V0IHRoZXNlIHJpZ2h0IGF3YXksIHJlbG9hZCB0aGUgLlhkZWZhdWx0cyBmaWxlIHRvIHRoZSBYIE9wdGlvbiBkYXRhYmFzZQorTWFuYWdlciAoeW91IG9ubHkgbmVlZCB0byBkbyB0aGlzIHdoZW4geW91IGp1c3QgY2hhbmdlZCB0aGUgLlhkZWZhdWx0cyBmaWxlKTogPgorICB4cmRiIC1tZXJnZSB+Ly5YZGVmYXVsdHMKKzwKKwkJCQkJKnh0ZXJtLWJsaW5rKiAqeHRlcm0tYmxpbmtpbmctY3Vyc29yKgorVG8gbWFrZSB0aGUgY3Vyc29yIGJsaW5rIGluIGFuIHh0ZXJtLCBzZWUgdG9vbHMvYmxpbmsuYy4gIE9yIHVzZSBUaG9tYXMKK0RpY2tleSdzIHh0ZXJtIGFib3ZlIHBhdGNobGV2ZWwgMTA3IChzZWUgYWJvdmUgZm9yIHdoZXJlIHRvIGdldCBpdCksIHdpdGgKK3RoZXNlIHJlc291cmNlczoKKwlYVGVybSpjdXJzb3JCbGluazoJb24KKwlYVGVybSpjdXJzb3JPblRpbWU6CTQwMAorCVhUZXJtKmN1cnNvck9mZlRpbWU6CTI1MAorCVhUZXJtKmN1cnNvckNvbG9yOglXaGl0ZQorCisJCQkJCQkJKmhwdGVybS1jb2xvcioKK1RoZXNlIHNldHRpbmdzIHdvcmsgKG1vcmUgb3IgbGVzcykgZm9yIGEgaHB0ZXJtLCB3aGljaCBvbmx5IHN1cHBvcnRzIDgKK2ZvcmVncm91bmQgY29sb3JzOiA+CisgICA6aWYgaGFzKCJ0ZXJtaW5mbyIpCisgICA6ICBzZXQgdF9Dbz04CisgICA6ICBzZXQgdF9TZj08RXNjPlsmdiVwMSVkUworICAgOiAgc2V0IHRfU2I9PEVzYz5bJnY3UworICAgOmVsc2UKKyAgIDogIHNldCB0X0NvPTgKKyAgIDogIHNldCB0X1NmPTxFc2M+WyZ2JWRTCisgICA6ICBzZXQgdF9TYj08RXNjPlsmdjdTCisgICA6ZW5kaWYKKzwJWzxFc2M+IGlzIGEgcmVhbCBlc2NhcGUsIHR5cGUgQ1RSTC1WIDxFc2M+XQorCisJCQkJCQkqRXRlcm0qICplbmxpZ2h0ZW5lZC10ZXJtaW5hbCoKK1RoZXNlIHNldHRpbmdzIGhhdmUgYmVlbiByZXBvcnRlZCB0byB3b3JrIGZvciB0aGUgRW5saWdodGVuZWQgdGVybWluYWwKK2VtdWxhdG9yLCBvciBFdGVybS4gIFRoZXkgbWlnaHQgd29yayBmb3IgYWxsIHh0ZXJtLWxpa2UgdGVybWluYWxzIHRoYXQgdXNlIHRoZQorYm9sZCBhdHRyaWJ1dGUgdG8gZ2V0IGJyaWdodCBjb2xvcnMuICBBZGQgYW4gIjppZiIgbGlrZSBhYm92ZSB3aGVuIG5lZWRlZC4gPgorICAgICAgIDpzZXQgdF9Dbz0xNgorICAgICAgIDpzZXQgdF9BRj1eW1slPyVwMSV7OH0lPCV0MyVwMSVkJWUlcDElezIyfSUrJWQ7MSU7bQorICAgICAgIDpzZXQgdF9BQj1eW1slPyVwMSV7OH0lPCV0NCVwMSVkJWUlcDElezMyfSUrJWQ7MSU7bQorPAorCQkJCQkJKlRUcHJvLXRlbG5ldCoKK1RoZXNlIHNldHRpbmdzIHNob3VsZCB3b3JrIGZvciBUVHBybyB0ZWxuZXQuICBUZXJhIFRlcm0gUHJvIGlzIGEgZnJlZXdhcmUgLworb3Blbi1zb3VyY2UgcHJvZ3JhbSBmb3IgTVMtV2luZG93cy4gPgorCXNldCB0X0NvPTE2CisJc2V0IHRfQUI9XltbJT8lcDElezh9JTwldCVwMSV7NDB9JSslZSVwMSV7MzJ9JSs1OyU7JWRtCisJc2V0IHRfQUY9XltbJT8lcDElezh9JTwldCVwMSV7MzB9JSslZSVwMSV7MjJ9JSsxOyU7JWRtCitBbHNvIG1ha2Ugc3VyZSBUVHBybydzIFNldHVwIC8gV2luZG93IC8gRnVsbCBDb2xvciBpcyBlbmFibGVkLCBhbmQgbWFrZSBzdXJlCit0aGF0IFNldHVwIC8gRm9udCAvIEVuYWJsZSBCb2xkIGlzIE5PVCBlbmFibGVkLgorKGluZm8gcHJvdmlkZWQgYnkgSm9obiBMb3ZlLUplbnNlbiA8ZWxqYXlAQWRvYmUuQ09NPikKKworIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdGFncyBiL3J1bnRpbWUvZG9jL3RhZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3N2FkZQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3RhZ3MKQEAgLTAsMCArMSw2NjQ5IEBACishCWNoYW5nZS50eHQJLyohKgorISEJY2hhbmdlLnR4dAkvKiEhKgorIwlwYXR0ZXJuLnR4dAkvKiMqCiskCW1vdGlvbi50eHQJLyokKgorJEhPTUUJb3B0aW9ucy50eHQJLyokSE9NRSoKKyRIT01FLXVzZQl2ZXJzaW9uNS50eHQJLyokSE9NRS11c2UqCiskVklNCXN0YXJ0aW5nLnR4dAkvKiRWSU0qCiskVklNLXVzZQl2ZXJzaW9uNS50eHQJLyokVklNLXVzZSoKKyRWSU1SVU5USU1FCXN0YXJ0aW5nLnR4dAkvKiRWSU1SVU5USU1FKgorJQltb3Rpb24udHh0CS8qJSoKKyYJY2hhbmdlLnR4dAkvKiYqCisnCW1vdGlvbi50eHQJLyonKgorJycJbW90aW9uLnR4dAkvKicnKgorJygJbW90aW9uLnR4dAkvKicoKgorJykJbW90aW9uLnR4dAkvKicpKgorJy4JbW90aW9uLnR4dAkvKicuKgorJzAJbW90aW9uLnR4dAkvKicwKgorJzwJbW90aW9uLnR4dAkvKic8KgorJz4JbW90aW9uLnR4dAkvKic+KgorJ0EJbW90aW9uLnR4dAkvKidBKgorJ1sJbW90aW9uLnR4dAkvKidbKgorJ10JbW90aW9uLnR4dAkvKiddKgorJ14JbW90aW9uLnR4dAkvKideKgorJ2EJbW90aW9uLnR4dAkvKidhKgorJ2FjZCcJb3B0aW9ucy50eHQJLyonYWNkJyoKKydhaScJb3B0aW9ucy50eHQJLyonYWknKgorJ2FrbScJb3B0aW9ucy50eHQJLyonYWttJyoKKydhbCcJb3B0aW9ucy50eHQJLyonYWwnKgorJ2FsZXBoJwlvcHRpb25zLnR4dAkvKidhbGVwaCcqCisnYWxsb3dyZXZpbnMnCW9wdGlvbnMudHh0CS8qJ2FsbG93cmV2aW5zJyoKKydhbHRrZXltYXAnCW9wdGlvbnMudHh0CS8qJ2FsdGtleW1hcCcqCisnYW1iaXdpZHRoJwlvcHRpb25zLnR4dAkvKidhbWJpd2lkdGgnKgorJ2FtYncnCW9wdGlvbnMudHh0CS8qJ2FtYncnKgorJ2FudGknCW9wdGlvbnMudHh0CS8qJ2FudGknKgorJ2FudGlhbGlhcycJb3B0aW9ucy50eHQJLyonYW50aWFsaWFzJyoKKydhcCcJdmlfZGlmZi50eHQJLyonYXAnKgorJ2FyJwlvcHRpb25zLnR4dAkvKidhcicqCisnYXJhYicJb3B0aW9ucy50eHQJLyonYXJhYicqCisnYXJhYmljJwlvcHRpb25zLnR4dAkvKidhcmFiaWMnKgorJ2FyYWJpY3NoYXBlJwlvcHRpb25zLnR4dAkvKidhcmFiaWNzaGFwZScqCisnYXJpJwlvcHRpb25zLnR4dAkvKidhcmknKgorJ2Fyc2hhcGUnCW9wdGlvbnMudHh0CS8qJ2Fyc2hhcGUnKgorJ2FzJwl0b2RvLnR4dAkvKidhcycqCisnYXV0b2NoZGlyJwlvcHRpb25zLnR4dAkvKidhdXRvY2hkaXInKgorJ2F1dG9pbmRlbnQnCW9wdGlvbnMudHh0CS8qJ2F1dG9pbmRlbnQnKgorJ2F1dG9wcmludCcJdmlfZGlmZi50eHQJLyonYXV0b3ByaW50JyoKKydhdXRvcmVhZCcJb3B0aW9ucy50eHQJLyonYXV0b3JlYWQnKgorJ2F1dG9zYXZlJwl0b2RvLnR4dAkvKidhdXRvc2F2ZScqCisnYXV0b3dyaXRlJwlvcHRpb25zLnR4dAkvKidhdXRvd3JpdGUnKgorJ2F1dG93cml0ZWFsbCcJb3B0aW9ucy50eHQJLyonYXV0b3dyaXRlYWxsJyoKKydhdycJb3B0aW9ucy50eHQJLyonYXcnKgorJ2F3YScJb3B0aW9ucy50eHQJLyonYXdhJyoKKydiYWNrZ3JvdW5kJwlvcHRpb25zLnR4dAkvKidiYWNrZ3JvdW5kJyoKKydiYWNrc3BhY2UnCW9wdGlvbnMudHh0CS8qJ2JhY2tzcGFjZScqCisnYmFja3VwJwlvcHRpb25zLnR4dAkvKidiYWNrdXAnKgorJ2JhY2t1cGNvcHknCW9wdGlvbnMudHh0CS8qJ2JhY2t1cGNvcHknKgorJ2JhY2t1cGRpcicJb3B0aW9ucy50eHQJLyonYmFja3VwZGlyJyoKKydiYWNrdXBleHQnCW9wdGlvbnMudHh0CS8qJ2JhY2t1cGV4dCcqCisnYmFja3Vwc2tpcCcJb3B0aW9ucy50eHQJLyonYmFja3Vwc2tpcCcqCisnYmFsbG9vbmRlbGF5JwlvcHRpb25zLnR4dAkvKidiYWxsb29uZGVsYXknKgorJ2JhbGxvb25ldmFsJwlvcHRpb25zLnR4dAkvKidiYWxsb29uZXZhbCcqCisnYmRpcicJb3B0aW9ucy50eHQJLyonYmRpcicqCisnYmRsYXknCW9wdGlvbnMudHh0CS8qJ2JkbGF5JyoKKydiZWF1dGlmeScJdmlfZGlmZi50eHQJLyonYmVhdXRpZnknKgorJ2JldmFsJwlvcHRpb25zLnR4dAkvKidiZXZhbCcqCisnYmV4JwlvcHRpb25zLnR4dAkvKidiZXgnKgorJ2JmJwl2aV9kaWZmLnR4dAkvKidiZicqCisnYmcnCW9wdGlvbnMudHh0CS8qJ2JnJyoKKydiaCcJb3B0aW9ucy50eHQJLyonYmgnKgorJ2JpbicJb3B0aW9ucy50eHQJLyonYmluJyoKKydiaW5hcnknCW9wdGlvbnMudHh0CS8qJ2JpbmFyeScqCisnYmlvc2snCW9wdGlvbnMudHh0CS8qJ2Jpb3NrJyoKKydiaW9za2V5JwlvcHRpb25zLnR4dAkvKidiaW9za2V5JyoKKydiaycJb3B0aW9ucy50eHQJLyonYmsnKgorJ2JrYycJb3B0aW9ucy50eHQJLyonYmtjJyoKKydibCcJb3B0aW9ucy50eHQJLyonYmwnKgorJ2JvbWInCW9wdGlvbnMudHh0CS8qJ2JvbWInKgorJ2JyZWFrYXQnCW9wdGlvbnMudHh0CS8qJ2JyZWFrYXQnKgorJ2JyaycJb3B0aW9ucy50eHQJLyonYnJrJyoKKydicm93c2VkaXInCW9wdGlvbnMudHh0CS8qJ2Jyb3dzZWRpcicqCisnYnMnCW9wdGlvbnMudHh0CS8qJ2JzJyoKKydic2RpcicJb3B0aW9ucy50eHQJLyonYnNkaXInKgorJ2JzaycJb3B0aW9ucy50eHQJLyonYnNrJyoKKydidCcJb3B0aW9ucy50eHQJLyonYnQnKgorJ2J1ZmhpZGRlbicJb3B0aW9ucy50eHQJLyonYnVmaGlkZGVuJyoKKydidWZsaXN0ZWQnCW9wdGlvbnMudHh0CS8qJ2J1Zmxpc3RlZCcqCisnYnVmdHlwZScJb3B0aW9ucy50eHQJLyonYnVmdHlwZScqCisnY2FzZW1hcCcJb3B0aW9ucy50eHQJLyonY2FzZW1hcCcqCisnY2InCW9wdGlvbnMudHh0CS8qJ2NiJyoKKydjY3YnCW9wdGlvbnMudHh0CS8qJ2NjdicqCisnY2QnCW9wdGlvbnMudHh0CS8qJ2NkJyoKKydjZHBhdGgnCW9wdGlvbnMudHh0CS8qJ2NkcGF0aCcqCisnY2VkaXQnCW9wdGlvbnMudHh0CS8qJ2NlZGl0JyoKKydjZicJb3B0aW9ucy50eHQJLyonY2YnKgorJ2NoJwlvcHRpb25zLnR4dAkvKidjaCcqCisnY2hhcmFjdGVyJwlpbnRyby50eHQJLyonY2hhcmFjdGVyJyoKKydjaGFyY29udmVydCcJb3B0aW9ucy50eHQJLyonY2hhcmNvbnZlcnQnKgorJ2NpJwlvcHRpb25zLnR4dAkvKidjaScqCisnY2luJwlvcHRpb25zLnR4dAkvKidjaW4nKgorJ2NpbmRlbnQnCW9wdGlvbnMudHh0CS8qJ2NpbmRlbnQnKgorJ2NpbmsnCW9wdGlvbnMudHh0CS8qJ2NpbmsnKgorJ2NpbmtleXMnCW9wdGlvbnMudHh0CS8qJ2NpbmtleXMnKgorJ2Npbm8nCW9wdGlvbnMudHh0CS8qJ2Npbm8nKgorJ2Npbm9wdGlvbnMnCW9wdGlvbnMudHh0CS8qJ2Npbm9wdGlvbnMnKgorJ2NpbncnCW9wdGlvbnMudHh0CS8qJ2NpbncnKgorJ2NpbndvcmRzJwlvcHRpb25zLnR4dAkvKidjaW53b3JkcycqCisnY2xpcGJvYXJkJwlvcHRpb25zLnR4dAkvKidjbGlwYm9hcmQnKgorJ2NtZGhlaWdodCcJb3B0aW9ucy50eHQJLyonY21kaGVpZ2h0JyoKKydjbWR3aW5oZWlnaHQnCW9wdGlvbnMudHh0CS8qJ2NtZHdpbmhlaWdodCcqCisnY21wJwlvcHRpb25zLnR4dAkvKidjbXAnKgorJ2NtcycJb3B0aW9ucy50eHQJLyonY21zJyoKKydjbycJb3B0aW9ucy50eHQJLyonY28nKgorJ2NvbHVtbnMnCW9wdGlvbnMudHh0CS8qJ2NvbHVtbnMnKgorJ2NvbScJb3B0aW9ucy50eHQJLyonY29tJyoKKydjb21tZW50cycJb3B0aW9ucy50eHQJLyonY29tbWVudHMnKgorJ2NvbW1lbnRzdHJpbmcnCW9wdGlvbnMudHh0CS8qJ2NvbW1lbnRzdHJpbmcnKgorJ2NvbXBhdGlibGUnCW9wdGlvbnMudHh0CS8qJ2NvbXBhdGlibGUnKgorJ2NvbXBsZXRlJwlvcHRpb25zLnR4dAkvKidjb21wbGV0ZScqCisnY29uZmlybScJb3B0aW9ucy50eHQJLyonY29uZmlybScqCisnY29uc2snCW9wdGlvbnMudHh0CS8qJ2NvbnNrJyoKKydjb25za2V5JwlvcHRpb25zLnR4dAkvKidjb25za2V5JyoKKydjb3B5aW5kZW50JwlvcHRpb25zLnR4dAkvKidjb3B5aW5kZW50JyoKKydjcCcJb3B0aW9ucy50eHQJLyonY3AnKgorJ2NwbycJb3B0aW9ucy50eHQJLyonY3BvJyoKKydjcG9wdGlvbnMnCW9wdGlvbnMudHh0CS8qJ2Nwb3B0aW9ucycqCisnY3B0JwlvcHRpb25zLnR4dAkvKidjcHQnKgorJ2NzY29wZXBhdGhjb21wJwlvcHRpb25zLnR4dAkvKidjc2NvcGVwYXRoY29tcCcqCisnY3Njb3BlcHJnJwlvcHRpb25zLnR4dAkvKidjc2NvcGVwcmcnKgorJ2NzY29wZXF1aWNrZml4JwlvcHRpb25zLnR4dAkvKidjc2NvcGVxdWlja2ZpeCcqCisnY3Njb3BldGFnJwlvcHRpb25zLnR4dAkvKidjc2NvcGV0YWcnKgorJ2NzY29wZXRhZ29yZGVyJwlvcHRpb25zLnR4dAkvKidjc2NvcGV0YWdvcmRlcicqCisnY3Njb3BldmVyYm9zZScJb3B0aW9ucy50eHQJLyonY3Njb3BldmVyYm9zZScqCisnY3NwYycJb3B0aW9ucy50eHQJLyonY3NwYycqCisnY3NwcmcnCW9wdGlvbnMudHh0CS8qJ2NzcHJnJyoKKydjc3FmJwlvcHRpb25zLnR4dAkvKidjc3FmJyoKKydjc3QnCW9wdGlvbnMudHh0CS8qJ2NzdCcqCisnY3N0bycJb3B0aW9ucy50eHQJLyonY3N0bycqCisnY3N2ZXJiJwlvcHRpb25zLnR4dAkvKidjc3ZlcmInKgorJ2N3aCcJb3B0aW9ucy50eHQJLyonY3doJyoKKydkZWJ1ZycJb3B0aW9ucy50eHQJLyonZGVidWcnKgorJ2RlY28nCW9wdGlvbnMudHh0CS8qJ2RlY28nKgorJ2RlZicJb3B0aW9ucy50eHQJLyonZGVmJyoKKydkZWZpbmUnCW9wdGlvbnMudHh0CS8qJ2RlZmluZScqCisnZGVsY29tYmluZScJb3B0aW9ucy50eHQJLyonZGVsY29tYmluZScqCisnZGV4JwlvcHRpb25zLnR4dAkvKidkZXgnKgorJ2RnJwlvcHRpb25zLnR4dAkvKidkZycqCisnZGljdCcJb3B0aW9ucy50eHQJLyonZGljdCcqCisnZGljdGlvbmFyeScJb3B0aW9ucy50eHQJLyonZGljdGlvbmFyeScqCisnZGlmZicJb3B0aW9ucy50eHQJLyonZGlmZicqCisnZGlmZmV4cHInCW9wdGlvbnMudHh0CS8qJ2RpZmZleHByJyoKKydkaWZmb3B0JwlvcHRpb25zLnR4dAkvKidkaWZmb3B0JyoKKydkaWdyYXBoJwlvcHRpb25zLnR4dAkvKidkaWdyYXBoJyoKKydkaXAnCW9wdGlvbnMudHh0CS8qJ2RpcCcqCisnZGlyJwlvcHRpb25zLnR4dAkvKidkaXInKgorJ2RpcmVjdG9yeScJb3B0aW9ucy50eHQJLyonZGlyZWN0b3J5JyoKKydkaXNwbGF5JwlvcHRpb25zLnR4dAkvKidkaXNwbGF5JyoKKydkeScJb3B0aW9ucy50eHQJLyonZHknKgorJ2VhJwlvcHRpb25zLnR4dAkvKidlYScqCisnZWFkJwlvcHRpb25zLnR4dAkvKidlYWQnKgorJ2VhZGlyZWN0aW9uJwlvcHRpb25zLnR4dAkvKidlYWRpcmVjdGlvbicqCisnZWInCW9wdGlvbnMudHh0CS8qJ2ViJyoKKydlZCcJb3B0aW9ucy50eHQJLyonZWQnKgorJ2VkY29tcGF0aWJsZScJb3B0aW9ucy50eHQJLyonZWRjb21wYXRpYmxlJyoKKydlZicJb3B0aW9ucy50eHQJLyonZWYnKgorJ2VmbScJb3B0aW9ucy50eHQJLyonZWZtJyoKKydlaScJb3B0aW9ucy50eHQJLyonZWknKgorJ2VrJwlvcHRpb25zLnR4dAkvKidlaycqCisnZW5jJwlvcHRpb25zLnR4dAkvKidlbmMnKgorJ2VuY29kaW5nJwlvcHRpb25zLnR4dAkvKidlbmNvZGluZycqCisnZW5kb2ZsaW5lJwlvcHRpb25zLnR4dAkvKidlbmRvZmxpbmUnKgorJ2VvbCcJb3B0aW9ucy50eHQJLyonZW9sJyoKKydlcCcJb3B0aW9ucy50eHQJLyonZXAnKgorJ2VxdWFsYWx3YXlzJwlvcHRpb25zLnR4dAkvKidlcXVhbGFsd2F5cycqCisnZXF1YWxwcmcnCW9wdGlvbnMudHh0CS8qJ2VxdWFscHJnJyoKKydlcnJvcmJlbGxzJwlvcHRpb25zLnR4dAkvKidlcnJvcmJlbGxzJyoKKydlcnJvcmZpbGUnCW9wdGlvbnMudHh0CS8qJ2Vycm9yZmlsZScqCisnZXJyb3Jmb3JtYXQnCW9wdGlvbnMudHh0CS8qJ2Vycm9yZm9ybWF0JyoKKydlc2NrZXlzJwlvcHRpb25zLnR4dAkvKidlc2NrZXlzJyoKKydldCcJb3B0aW9ucy50eHQJLyonZXQnKgorJ2V2ZW50aWdub3JlJwlvcHRpb25zLnR4dAkvKidldmVudGlnbm9yZScqCisnZXgnCW9wdGlvbnMudHh0CS8qJ2V4JyoKKydleHBhbmR0YWInCW9wdGlvbnMudHh0CS8qJ2V4cGFuZHRhYicqCisnZXhyYycJb3B0aW9ucy50eHQJLyonZXhyYycqCisnZmNsJwlvcHRpb25zLnR4dAkvKidmY2wnKgorJ2ZjcycJb3B0aW9ucy50eHQJLyonZmNzJyoKKydmZGMnCW9wdGlvbnMudHh0CS8qJ2ZkYycqCisnZmRlJwlvcHRpb25zLnR4dAkvKidmZGUnKgorJ2ZkaScJb3B0aW9ucy50eHQJLyonZmRpJyoKKydmZGwnCW9wdGlvbnMudHh0CS8qJ2ZkbCcqCisnZmRscycJb3B0aW9ucy50eHQJLyonZmRscycqCisnZmRtJwlvcHRpb25zLnR4dAkvKidmZG0nKgorJ2ZkbicJb3B0aW9ucy50eHQJLyonZmRuJyoKKydmZG8nCW9wdGlvbnMudHh0CS8qJ2ZkbycqCisnZmR0JwlvcHRpb25zLnR4dAkvKidmZHQnKgorJ2ZlJwlvcHRpb25zLnR4dAkvKidmZScqCisnZmVuJwlvcHRpb25zLnR4dAkvKidmZW4nKgorJ2ZlbmMnCW9wdGlvbnMudHh0CS8qJ2ZlbmMnKgorJ2ZlbmNzJwlvcHRpb25zLnR4dAkvKidmZW5jcycqCisnZmYnCW9wdGlvbnMudHh0CS8qJ2ZmJyoKKydmZnMnCW9wdGlvbnMudHh0CS8qJ2ZmcycqCisnZmlsZWVuY29kaW5nJwlvcHRpb25zLnR4dAkvKidmaWxlZW5jb2RpbmcnKgorJ2ZpbGVlbmNvZGluZ3MnCW9wdGlvbnMudHh0CS8qJ2ZpbGVlbmNvZGluZ3MnKgorJ2ZpbGVmb3JtYXQnCW9wdGlvbnMudHh0CS8qJ2ZpbGVmb3JtYXQnKgorJ2ZpbGVmb3JtYXRzJwlvcHRpb25zLnR4dAkvKidmaWxlZm9ybWF0cycqCisnZmlsZXR5cGUnCW9wdGlvbnMudHh0CS8qJ2ZpbGV0eXBlJyoKKydmaWxsY2hhcnMnCW9wdGlvbnMudHh0CS8qJ2ZpbGxjaGFycycqCisnZmsnCW9wdGlvbnMudHh0CS8qJ2ZrJyoKKydma21hcCcJb3B0aW9ucy50eHQJLyonZmttYXAnKgorJ2ZsJwl2aV9kaWZmLnR4dAkvKidmbCcqCisnZmxhc2gnCXZpX2RpZmYudHh0CS8qJ2ZsYXNoJyoKKydmbWwnCW9wdGlvbnMudHh0CS8qJ2ZtbCcqCisnZm1yJwlvcHRpb25zLnR4dAkvKidmbXInKgorJ2ZvJwlvcHRpb25zLnR4dAkvKidmbycqCisnZm9sZGNsb3NlJwlvcHRpb25zLnR4dAkvKidmb2xkY2xvc2UnKgorJ2ZvbGRjb2x1bW4nCW9wdGlvbnMudHh0CS8qJ2ZvbGRjb2x1bW4nKgorJ2ZvbGRlbmFibGUnCW9wdGlvbnMudHh0CS8qJ2ZvbGRlbmFibGUnKgorJ2ZvbGRleHByJwlvcHRpb25zLnR4dAkvKidmb2xkZXhwcicqCisnZm9sZGlnbm9yZScJb3B0aW9ucy50eHQJLyonZm9sZGlnbm9yZScqCisnZm9sZGxldmVsJwlvcHRpb25zLnR4dAkvKidmb2xkbGV2ZWwnKgorJ2ZvbGRsZXZlbHN0YXJ0JwlvcHRpb25zLnR4dAkvKidmb2xkbGV2ZWxzdGFydCcqCisnZm9sZG1hcmtlcicJb3B0aW9ucy50eHQJLyonZm9sZG1hcmtlcicqCisnZm9sZG1ldGhvZCcJb3B0aW9ucy50eHQJLyonZm9sZG1ldGhvZCcqCisnZm9sZG1pbmxpbmVzJwlvcHRpb25zLnR4dAkvKidmb2xkbWlubGluZXMnKgorJ2ZvbGRuZXN0bWF4JwlvcHRpb25zLnR4dAkvKidmb2xkbmVzdG1heCcqCisnZm9sZG9wZW4nCW9wdGlvbnMudHh0CS8qJ2ZvbGRvcGVuJyoKKydmb2xkdGV4dCcJb3B0aW9ucy50eHQJLyonZm9sZHRleHQnKgorJ2Zvcm1hdG9wdGlvbnMnCW9wdGlvbnMudHh0CS8qJ2Zvcm1hdG9wdGlvbnMnKgorJ2Zvcm1hdHByZycJb3B0aW9ucy50eHQJLyonZm9ybWF0cHJnJyoKKydmcCcJb3B0aW9ucy50eHQJLyonZnAnKgorJ2Z0JwlvcHRpb25zLnR4dAkvKidmdCcqCisnZ2NyJwlvcHRpb25zLnR4dAkvKidnY3InKgorJ2dkJwlvcHRpb25zLnR4dAkvKidnZCcqCisnZ2RlZmF1bHQnCW9wdGlvbnMudHh0CS8qJ2dkZWZhdWx0JyoKKydnZm0nCW9wdGlvbnMudHh0CS8qJ2dmbScqCisnZ2ZuJwlvcHRpb25zLnR4dAkvKidnZm4nKgorJ2dmcycJb3B0aW9ucy50eHQJLyonZ2ZzJyoKKydnZncnCW9wdGlvbnMudHh0CS8qJ2dmdycqCisnZ2hyJwlvcHRpb25zLnR4dAkvKidnaHInKgorJ2dvJwlvcHRpb25zLnR4dAkvKidnbycqCisnZ3AnCW9wdGlvbnMudHh0CS8qJ2dwJyoKKydncicJdmlfZGlmZi50eHQJLyonZ3InKgorJ2dyYXBoaWMnCXZpX2RpZmYudHh0CS8qJ2dyYXBoaWMnKgorJ2dyZXBmb3JtYXQnCW9wdGlvbnMudHh0CS8qJ2dyZXBmb3JtYXQnKgorJ2dyZXBwcmcnCW9wdGlvbnMudHh0CS8qJ2dyZXBwcmcnKgorJ2d1aWN1cnNvcicJb3B0aW9ucy50eHQJLyonZ3VpY3Vyc29yJyoKKydndWlmb250JwlvcHRpb25zLnR4dAkvKidndWlmb250JyoKKydndWlmb250c2V0JwlvcHRpb25zLnR4dAkvKidndWlmb250c2V0JyoKKydndWlmb250d2lkZScJb3B0aW9ucy50eHQJLyonZ3VpZm9udHdpZGUnKgorJ2d1aWhlYWRyb29tJwlvcHRpb25zLnR4dAkvKidndWloZWFkcm9vbScqCisnZ3Vpb3B0aW9ucycJb3B0aW9ucy50eHQJLyonZ3Vpb3B0aW9ucycqCisnZ3VpcHR5JwlvcHRpb25zLnR4dAkvKidndWlwdHknKgorJ2hhcmR0YWJzJwl2aV9kaWZmLnR4dAkvKidoYXJkdGFicycqCisnaGVscGZpbGUnCW9wdGlvbnMudHh0CS8qJ2hlbHBmaWxlJyoKKydoZWxwaGVpZ2h0JwlvcHRpb25zLnR4dAkvKidoZWxwaGVpZ2h0JyoKKydoZWxwbGFuZycJb3B0aW9ucy50eHQJLyonaGVscGxhbmcnKgorJ2hmJwlvcHRpb25zLnR4dAkvKidoZicqCisnaGgnCW9wdGlvbnMudHh0CS8qJ2hoJyoKKydoaScJb3B0aW9ucy50eHQJLyonaGknKgorJ2hpZCcJb3B0aW9ucy50eHQJLyonaGlkJyoKKydoaWRkZW4nCW9wdGlvbnMudHh0CS8qJ2hpZGRlbicqCisnaGlnaGxpZ2h0JwlvcHRpb25zLnR4dAkvKidoaWdobGlnaHQnKgorJ2hpc3RvcnknCW9wdGlvbnMudHh0CS8qJ2hpc3RvcnknKgorJ2hrJwlvcHRpb25zLnR4dAkvKidoaycqCisnaGttYXAnCW9wdGlvbnMudHh0CS8qJ2hrbWFwJyoKKydoa21hcHAnCW9wdGlvbnMudHh0CS8qJ2hrbWFwcCcqCisnaGtwJwlvcHRpb25zLnR4dAkvKidoa3AnKgorJ2hsJwlvcHRpb25zLnR4dAkvKidobCcqCisnaGxnJwlvcHRpb25zLnR4dAkvKidobGcnKgorJ2hscycJb3B0aW9ucy50eHQJLyonaGxzJyoKKydobHNlYXJjaCcJb3B0aW9ucy50eHQJLyonaGxzZWFyY2gnKgorJ2h0Jwl2aV9kaWZmLnR4dAkvKidodCcqCisnaWMnCW9wdGlvbnMudHh0CS8qJ2ljJyoKKydpY29uJwlvcHRpb25zLnR4dAkvKidpY29uJyoKKydpY29uc3RyaW5nJwlvcHRpb25zLnR4dAkvKidpY29uc3RyaW5nJyoKKydpZ25vcmVjYXNlJwlvcHRpb25zLnR4dAkvKidpZ25vcmVjYXNlJyoKKydpbScJb3B0aW9ucy50eHQJLyonaW0nKgorJ2ltYWN0aXZhdGVrZXknCW9wdGlvbnMudHh0CS8qJ2ltYWN0aXZhdGVrZXknKgorJ2ltYWsnCW9wdGlvbnMudHh0CS8qJ2ltYWsnKgorJ2ltYycJb3B0aW9ucy50eHQJLyonaW1jJyoKKydpbWNtZGxpbmUnCW9wdGlvbnMudHh0CS8qJ2ltY21kbGluZScqCisnaW1kJwlvcHRpb25zLnR4dAkvKidpbWQnKgorJ2ltZGlzYWJsZScJb3B0aW9ucy50eHQJLyonaW1kaXNhYmxlJyoKKydpbWknCW9wdGlvbnMudHh0CS8qJ2ltaScqCisnaW1pbnNlcnQnCW9wdGlvbnMudHh0CS8qJ2ltaW5zZXJ0JyoKKydpbXMnCW9wdGlvbnMudHh0CS8qJ2ltcycqCisnaW1zZWFyY2gnCW9wdGlvbnMudHh0CS8qJ2ltc2VhcmNoJyoKKydpbmMnCW9wdGlvbnMudHh0CS8qJ2luYycqCisnaW5jbHVkZScJb3B0aW9ucy50eHQJLyonaW5jbHVkZScqCisnaW5jbHVkZWV4cHInCW9wdGlvbnMudHh0CS8qJ2luY2x1ZGVleHByJyoKKydpbmNzZWFyY2gnCW9wdGlvbnMudHh0CS8qJ2luY3NlYXJjaCcqCisnaW5kZScJb3B0aW9ucy50eHQJLyonaW5kZScqCisnaW5kZW50ZXhwcicJb3B0aW9ucy50eHQJLyonaW5kZW50ZXhwcicqCisnaW5kZW50a2V5cycJb3B0aW9ucy50eHQJLyonaW5kZW50a2V5cycqCisnaW5kaycJb3B0aW9ucy50eHQJLyonaW5kaycqCisnaW5leCcJb3B0aW9ucy50eHQJLyonaW5leCcqCisnaW5mJwlvcHRpb25zLnR4dAkvKidpbmYnKgorJ2luZmVyY2FzZScJb3B0aW9ucy50eHQJLyonaW5mZXJjYXNlJyoKKydpbnNlcnRtb2RlJwlvcHRpb25zLnR4dAkvKidpbnNlcnRtb2RlJyoKKydpcycJb3B0aW9ucy50eHQJLyonaXMnKgorJ2lzZicJb3B0aW9ucy50eHQJLyonaXNmJyoKKydpc2ZuYW1lJwlvcHRpb25zLnR4dAkvKidpc2ZuYW1lJyoKKydpc2knCW9wdGlvbnMudHh0CS8qJ2lzaScqCisnaXNpZGVudCcJb3B0aW9ucy50eHQJLyonaXNpZGVudCcqCisnaXNrJwlvcHRpb25zLnR4dAkvKidpc2snKgorJ2lza2V5d29yZCcJb3B0aW9ucy50eHQJLyonaXNrZXl3b3JkJyoKKydpc3AnCW9wdGlvbnMudHh0CS8qJ2lzcCcqCisnaXNwcmludCcJb3B0aW9ucy50eHQJLyonaXNwcmludCcqCisnam9pbnNwYWNlcycJb3B0aW9ucy50eHQJLyonam9pbnNwYWNlcycqCisnanMnCW9wdGlvbnMudHh0CS8qJ2pzJyoKKydrZXknCW9wdGlvbnMudHh0CS8qJ2tleScqCisna2V5bWFwJwlvcHRpb25zLnR4dAkvKidrZXltYXAnKgorJ2tleW1vZGVsJwlvcHRpb25zLnR4dAkvKidrZXltb2RlbCcqCisna2V5d29yZHByZycJb3B0aW9ucy50eHQJLyona2V5d29yZHByZycqCisna20nCW9wdGlvbnMudHh0CS8qJ2ttJyoKKydrbXAnCW9wdGlvbnMudHh0CS8qJ2ttcCcqCisna3AnCW9wdGlvbnMudHh0CS8qJ2twJyoKKydsYW5nbWFwJwlvcHRpb25zLnR4dAkvKidsYW5nbWFwJyoKKydsYW5nbWVudScJb3B0aW9ucy50eHQJLyonbGFuZ21lbnUnKgorJ2xhc3RzdGF0dXMnCW9wdGlvbnMudHh0CS8qJ2xhc3RzdGF0dXMnKgorJ2xhenlyZWRyYXcnCW9wdGlvbnMudHh0CS8qJ2xhenlyZWRyYXcnKgorJ2xicicJb3B0aW9ucy50eHQJLyonbGJyJyoKKydsY3MnCW9wdGlvbnMudHh0CS8qJ2xjcycqCisnbGluZWJyZWFrJwlvcHRpb25zLnR4dAkvKidsaW5lYnJlYWsnKgorJ2xpbmVzJwlvcHRpb25zLnR4dAkvKidsaW5lcycqCisnbGluZXNwYWNlJwlvcHRpb25zLnR4dAkvKidsaW5lc3BhY2UnKgorJ2xpc3AnCW9wdGlvbnMudHh0CS8qJ2xpc3AnKgorJ2xpc3B3b3JkcycJb3B0aW9ucy50eHQJLyonbGlzcHdvcmRzJyoKKydsaXN0JwlvcHRpb25zLnR4dAkvKidsaXN0JyoKKydsaXN0Y2hhcnMnCW9wdGlvbnMudHh0CS8qJ2xpc3RjaGFycycqCisnbG0nCW9wdGlvbnMudHh0CS8qJ2xtJyoKKydsbWFwJwlvcHRpb25zLnR4dAkvKidsbWFwJyoKKydsb2FkcGx1Z2lucycJb3B0aW9ucy50eHQJLyonbG9hZHBsdWdpbnMnKgorJ2xwbCcJb3B0aW9ucy50eHQJLyonbHBsJyoKKydscycJb3B0aW9ucy50eHQJLyonbHMnKgorJ2xzcCcJb3B0aW9ucy50eHQJLyonbHNwJyoKKydsdycJb3B0aW9ucy50eHQJLyonbHcnKgorJ2x6JwlvcHRpb25zLnR4dAkvKidseicqCisnbWEnCW9wdGlvbnMudHh0CS8qJ21hJyoKKydtYWdpYycJb3B0aW9ucy50eHQJLyonbWFnaWMnKgorJ21ha2VlZicJb3B0aW9ucy50eHQJLyonbWFrZWVmJyoKKydtYWtlcHJnJwlvcHRpb25zLnR4dAkvKidtYWtlcHJnJyoKKydtYXQnCW9wdGlvbnMudHh0CS8qJ21hdCcqCisnbWF0Y2hwYWlycycJb3B0aW9ucy50eHQJLyonbWF0Y2hwYWlycycqCisnbWF0Y2h0aW1lJwlvcHRpb25zLnR4dAkvKidtYXRjaHRpbWUnKgorJ21heGZ1bmNkZXB0aCcJb3B0aW9ucy50eHQJLyonbWF4ZnVuY2RlcHRoJyoKKydtYXhtYXBkZXB0aCcJb3B0aW9ucy50eHQJLyonbWF4bWFwZGVwdGgnKgorJ21heG1lbScJb3B0aW9ucy50eHQJLyonbWF4bWVtJyoKKydtYXhtZW10b3QnCW9wdGlvbnMudHh0CS8qJ21heG1lbXRvdCcqCisnbWVmJwlvcHRpb25zLnR4dAkvKidtZWYnKgorJ21lbnVpdGVtcycJb3B0aW9ucy50eHQJLyonbWVudWl0ZW1zJyoKKydtZXNnJwl2aV9kaWZmLnR4dAkvKidtZXNnJyoKKydtZmQnCW9wdGlvbnMudHh0CS8qJ21mZCcqCisnbWgnCW9wdGlvbnMudHh0CS8qJ21oJyoKKydtaXMnCW9wdGlvbnMudHh0CS8qJ21pcycqCisnbWwnCW9wdGlvbnMudHh0CS8qJ21sJyoKKydtbHMnCW9wdGlvbnMudHh0CS8qJ21scycqCisnbW0nCW9wdGlvbnMudHh0CS8qJ21tJyoKKydtbWQnCW9wdGlvbnMudHh0CS8qJ21tZCcqCisnbW10JwlvcHRpb25zLnR4dAkvKidtbXQnKgorJ21vZCcJb3B0aW9ucy50eHQJLyonbW9kJyoKKydtb2RlbGluZScJb3B0aW9ucy50eHQJLyonbW9kZWxpbmUnKgorJ21vZGVsaW5lcycJb3B0aW9ucy50eHQJLyonbW9kZWxpbmVzJyoKKydtb2RpZmlhYmxlJwlvcHRpb25zLnR4dAkvKidtb2RpZmlhYmxlJyoKKydtb2RpZmllZCcJb3B0aW9ucy50eHQJLyonbW9kaWZpZWQnKgorJ21vcmUnCW9wdGlvbnMudHh0CS8qJ21vcmUnKgorJ21vdXNlJwlvcHRpb25zLnR4dAkvKidtb3VzZScqCisnbW91c2VmJwlvcHRpb25zLnR4dAkvKidtb3VzZWYnKgorJ21vdXNlZm9jdXMnCW9wdGlvbnMudHh0CS8qJ21vdXNlZm9jdXMnKgorJ21vdXNlaGlkZScJb3B0aW9ucy50eHQJLyonbW91c2VoaWRlJyoKKydtb3VzZW0nCW9wdGlvbnMudHh0CS8qJ21vdXNlbScqCisnbW91c2Vtb2RlbCcJb3B0aW9ucy50eHQJLyonbW91c2Vtb2RlbCcqCisnbW91c2VzJwlvcHRpb25zLnR4dAkvKidtb3VzZXMnKgorJ21vdXNlc2hhcGUnCW9wdGlvbnMudHh0CS8qJ21vdXNlc2hhcGUnKgorJ21vdXNldCcJb3B0aW9ucy50eHQJLyonbW91c2V0JyoKKydtb3VzZXRpbWUnCW9wdGlvbnMudHh0CS8qJ21vdXNldGltZScqCisnbXAnCW9wdGlvbnMudHh0CS8qJ21wJyoKKydtcHMnCW9wdGlvbnMudHh0CS8qJ21wcycqCisnbmYnCW9wdGlvbnMudHh0CS8qJ25mJyoKKydub2FjZCcJb3B0aW9ucy50eHQJLyonbm9hY2QnKgorJ25vYWknCW9wdGlvbnMudHh0CS8qJ25vYWknKgorJ25vYWttJwlvcHRpb25zLnR4dAkvKidub2FrbScqCisnbm9hbGxvd3JldmlucycJb3B0aW9ucy50eHQJLyonbm9hbGxvd3JldmlucycqCisnbm9hbHRrZXltYXAnCW9wdGlvbnMudHh0CS8qJ25vYWx0a2V5bWFwJyoKKydub2FudGknCW9wdGlvbnMudHh0CS8qJ25vYW50aScqCisnbm9hbnRpYWxpYXMnCW9wdGlvbnMudHh0CS8qJ25vYW50aWFsaWFzJyoKKydub2FyJwlvcHRpb25zLnR4dAkvKidub2FyJyoKKydub2FyYWInCW9wdGlvbnMudHh0CS8qJ25vYXJhYicqCisnbm9hcmFiaWMnCW9wdGlvbnMudHh0CS8qJ25vYXJhYmljJyoKKydub2FyYWJpY3NoYXBlJwlvcHRpb25zLnR4dAkvKidub2FyYWJpY3NoYXBlJyoKKydub2FyaScJb3B0aW9ucy50eHQJLyonbm9hcmknKgorJ25vYXJzaGFwZScJb3B0aW9ucy50eHQJLyonbm9hcnNoYXBlJyoKKydub2FzJwl0b2RvLnR4dAkvKidub2FzJyoKKydub2F1dG9jaGRpcicJb3B0aW9ucy50eHQJLyonbm9hdXRvY2hkaXInKgorJ25vYXV0b2luZGVudCcJb3B0aW9ucy50eHQJLyonbm9hdXRvaW5kZW50JyoKKydub2F1dG9yZWFkJwlvcHRpb25zLnR4dAkvKidub2F1dG9yZWFkJyoKKydub2F1dG9zYXZlJwl0b2RvLnR4dAkvKidub2F1dG9zYXZlJyoKKydub2F1dG93cml0ZScJb3B0aW9ucy50eHQJLyonbm9hdXRvd3JpdGUnKgorJ25vYXV0b3dyaXRlYWxsJwlvcHRpb25zLnR4dAkvKidub2F1dG93cml0ZWFsbCcqCisnbm9hdycJb3B0aW9ucy50eHQJLyonbm9hdycqCisnbm9hd2EnCW9wdGlvbnMudHh0CS8qJ25vYXdhJyoKKydub2JhY2t1cCcJb3B0aW9ucy50eHQJLyonbm9iYWNrdXAnKgorJ25vYmFsbG9vbmV2YWwnCW9wdGlvbnMudHh0CS8qJ25vYmFsbG9vbmV2YWwnKgorJ25vYmV2YWwnCW9wdGlvbnMudHh0CS8qJ25vYmV2YWwnKgorJ25vYmluJwlvcHRpb25zLnR4dAkvKidub2JpbicqCisnbm9iaW5hcnknCW9wdGlvbnMudHh0CS8qJ25vYmluYXJ5JyoKKydub2Jpb3NrJwlvcHRpb25zLnR4dAkvKidub2Jpb3NrJyoKKydub2Jpb3NrZXknCW9wdGlvbnMudHh0CS8qJ25vYmlvc2tleScqCisnbm9iaycJb3B0aW9ucy50eHQJLyonbm9iaycqCisnbm9ibCcJb3B0aW9ucy50eHQJLyonbm9ibCcqCisnbm9ib21iJwlvcHRpb25zLnR4dAkvKidub2JvbWInKgorJ25vYnVmbGlzdGVkJwlvcHRpb25zLnR4dAkvKidub2J1Zmxpc3RlZCcqCisnbm9jZicJb3B0aW9ucy50eHQJLyonbm9jZicqCisnbm9jaScJb3B0aW9ucy50eHQJLyonbm9jaScqCisnbm9jaW4nCW9wdGlvbnMudHh0CS8qJ25vY2luJyoKKydub2NpbmRlbnQnCW9wdGlvbnMudHh0CS8qJ25vY2luZGVudCcqCisnbm9jb21wYXRpYmxlJwlvcHRpb25zLnR4dAkvKidub2NvbXBhdGlibGUnKgorJ25vY29uZmlybScJb3B0aW9ucy50eHQJLyonbm9jb25maXJtJyoKKydub2NvbnNrJwlvcHRpb25zLnR4dAkvKidub2NvbnNrJyoKKydub2NvbnNrZXknCW9wdGlvbnMudHh0CS8qJ25vY29uc2tleScqCisnbm9jb3B5aW5kZW50JwlvcHRpb25zLnR4dAkvKidub2NvcHlpbmRlbnQnKgorJ25vY3AnCW9wdGlvbnMudHh0CS8qJ25vY3AnKgorJ25vY3Njb3BldGFnJwlvcHRpb25zLnR4dAkvKidub2NzY29wZXRhZycqCisnbm9jc2NvcGV2ZXJib3NlJwlvcHRpb25zLnR4dAkvKidub2NzY29wZXZlcmJvc2UnKgorJ25vY3N0JwlvcHRpb25zLnR4dAkvKidub2NzdCcqCisnbm9jc3ZlcmInCW9wdGlvbnMudHh0CS8qJ25vY3N2ZXJiJyoKKydub2RlY28nCW9wdGlvbnMudHh0CS8qJ25vZGVjbycqCisnbm9kZWxjb21iaW5lJwlvcHRpb25zLnR4dAkvKidub2RlbGNvbWJpbmUnKgorJ25vZGcnCW9wdGlvbnMudHh0CS8qJ25vZGcnKgorJ25vZGlmZicJb3B0aW9ucy50eHQJLyonbm9kaWZmJyoKKydub2RpZ3JhcGgnCW9wdGlvbnMudHh0CS8qJ25vZGlncmFwaCcqCisnbm9kaXNhYmxlJwlvcHRpb25zLnR4dAkvKidub2Rpc2FibGUnKgorJ25vZWEnCW9wdGlvbnMudHh0CS8qJ25vZWEnKgorJ25vZWInCW9wdGlvbnMudHh0CS8qJ25vZWInKgorJ25vZWQnCW9wdGlvbnMudHh0CS8qJ25vZWQnKgorJ25vZWRjb21wYXRpYmxlJwlvcHRpb25zLnR4dAkvKidub2VkY29tcGF0aWJsZScqCisnbm9laycJb3B0aW9ucy50eHQJLyonbm9laycqCisnbm9lbmRvZmxpbmUnCW9wdGlvbnMudHh0CS8qJ25vZW5kb2ZsaW5lJyoKKydub2VvbCcJb3B0aW9ucy50eHQJLyonbm9lb2wnKgorJ25vZXF1YWxhbHdheXMnCW9wdGlvbnMudHh0CS8qJ25vZXF1YWxhbHdheXMnKgorJ25vZXJyb3JiZWxscycJb3B0aW9ucy50eHQJLyonbm9lcnJvcmJlbGxzJyoKKydub2VzY2tleXMnCW9wdGlvbnMudHh0CS8qJ25vZXNja2V5cycqCisnbm9ldCcJb3B0aW9ucy50eHQJLyonbm9ldCcqCisnbm9leCcJb3B0aW9ucy50eHQJLyonbm9leCcqCisnbm9leHBhbmR0YWInCW9wdGlvbnMudHh0CS8qJ25vZXhwYW5kdGFiJyoKKydub2V4cmMnCW9wdGlvbnMudHh0CS8qJ25vZXhyYycqCisnbm9mZW4nCW9wdGlvbnMudHh0CS8qJ25vZmVuJyoKKydub2ZrJwlvcHRpb25zLnR4dAkvKidub2ZrJyoKKydub2ZrbWFwJwlvcHRpb25zLnR4dAkvKidub2ZrbWFwJyoKKydub2ZvbGRlbmFibGUnCW9wdGlvbnMudHh0CS8qJ25vZm9sZGVuYWJsZScqCisnbm9nZCcJb3B0aW9ucy50eHQJLyonbm9nZCcqCisnbm9nZGVmYXVsdCcJb3B0aW9ucy50eHQJLyonbm9nZGVmYXVsdCcqCisnbm9ndWlwdHknCW9wdGlvbnMudHh0CS8qJ25vZ3VpcHR5JyoKKydub2hpZCcJb3B0aW9ucy50eHQJLyonbm9oaWQnKgorJ25vaGlkZGVuJwlvcHRpb25zLnR4dAkvKidub2hpZGRlbicqCisnbm9oaycJb3B0aW9ucy50eHQJLyonbm9oaycqCisnbm9oa21hcCcJb3B0aW9ucy50eHQJLyonbm9oa21hcCcqCisnbm9oa21hcHAnCW9wdGlvbnMudHh0CS8qJ25vaGttYXBwJyoKKydub2hrcCcJb3B0aW9ucy50eHQJLyonbm9oa3AnKgorJ25vaGxzJwlvcHRpb25zLnR4dAkvKidub2hscycqCisnbm9obHNlYXJjaCcJb3B0aW9ucy50eHQJLyonbm9obHNlYXJjaCcqCisnbm9pYycJb3B0aW9ucy50eHQJLyonbm9pYycqCisnbm9pY29uJwlvcHRpb25zLnR4dAkvKidub2ljb24nKgorJ25vaWdub3JlY2FzZScJb3B0aW9ucy50eHQJLyonbm9pZ25vcmVjYXNlJyoKKydub2ltJwlvcHRpb25zLnR4dAkvKidub2ltJyoKKydub2ltYycJb3B0aW9ucy50eHQJLyonbm9pbWMnKgorJ25vaW1jbWRsaW5lJwlvcHRpb25zLnR4dAkvKidub2ltY21kbGluZScqCisnbm9pbWQnCW9wdGlvbnMudHh0CS8qJ25vaW1kJyoKKydub2luY3NlYXJjaCcJb3B0aW9ucy50eHQJLyonbm9pbmNzZWFyY2gnKgorJ25vaW5mJwlvcHRpb25zLnR4dAkvKidub2luZicqCisnbm9pbmZlcmNhc2UnCW9wdGlvbnMudHh0CS8qJ25vaW5mZXJjYXNlJyoKKydub2luc2VydG1vZGUnCW9wdGlvbnMudHh0CS8qJ25vaW5zZXJ0bW9kZScqCisnbm9pcycJb3B0aW9ucy50eHQJLyonbm9pcycqCisnbm9qb2luc3BhY2VzJwlvcHRpb25zLnR4dAkvKidub2pvaW5zcGFjZXMnKgorJ25vanMnCW9wdGlvbnMudHh0CS8qJ25vanMnKgorJ25vbGF6eXJlZHJhdycJb3B0aW9ucy50eHQJLyonbm9sYXp5cmVkcmF3JyoKKydub2xicicJb3B0aW9ucy50eHQJLyonbm9sYnInKgorJ25vbGluZWJyZWFrJwlvcHRpb25zLnR4dAkvKidub2xpbmVicmVhaycqCisnbm9saXNwJwlvcHRpb25zLnR4dAkvKidub2xpc3AnKgorJ25vbGlzdCcJb3B0aW9ucy50eHQJLyonbm9saXN0JyoKKydub2xvYWRwbHVnaW5zJwlvcHRpb25zLnR4dAkvKidub2xvYWRwbHVnaW5zJyoKKydub2xwbCcJb3B0aW9ucy50eHQJLyonbm9scGwnKgorJ25vbHonCW9wdGlvbnMudHh0CS8qJ25vbHonKgorJ25vbWEnCW9wdGlvbnMudHh0CS8qJ25vbWEnKgorJ25vbWFnaWMnCW9wdGlvbnMudHh0CS8qJ25vbWFnaWMnKgorJ25vbWgnCW9wdGlvbnMudHh0CS8qJ25vbWgnKgorJ25vbWwnCW9wdGlvbnMudHh0CS8qJ25vbWwnKgorJ25vbW9kJwlvcHRpb25zLnR4dAkvKidub21vZCcqCisnbm9tb2RlbGluZScJb3B0aW9ucy50eHQJLyonbm9tb2RlbGluZScqCisnbm9tb2RpZmlhYmxlJwlvcHRpb25zLnR4dAkvKidub21vZGlmaWFibGUnKgorJ25vbW9kaWZpZWQnCW9wdGlvbnMudHh0CS8qJ25vbW9kaWZpZWQnKgorJ25vbW9yZScJb3B0aW9ucy50eHQJLyonbm9tb3JlJyoKKydub21vdXNlZicJb3B0aW9ucy50eHQJLyonbm9tb3VzZWYnKgorJ25vbW91c2Vmb2N1cycJb3B0aW9ucy50eHQJLyonbm9tb3VzZWZvY3VzJyoKKydub21vdXNlaGlkZScJb3B0aW9ucy50eHQJLyonbm9tb3VzZWhpZGUnKgorJ25vbnUnCW9wdGlvbnMudHh0CS8qJ25vbnUnKgorJ25vbnVtYmVyJwlvcHRpb25zLnR4dAkvKidub251bWJlcicqCisnbm9wYXN0ZScJb3B0aW9ucy50eHQJLyonbm9wYXN0ZScqCisnbm9waScJb3B0aW9ucy50eHQJLyonbm9waScqCisnbm9wcmVzZXJ2ZWluZGVudCcJb3B0aW9ucy50eHQJLyonbm9wcmVzZXJ2ZWluZGVudCcqCisnbm9wcmV2aWV3d2luZG93JwlvcHRpb25zLnR4dAkvKidub3ByZXZpZXd3aW5kb3cnKgorJ25vcHZ3JwlvcHRpb25zLnR4dAkvKidub3B2dycqCisnbm9yZWFkb25seScJb3B0aW9ucy50eHQJLyonbm9yZWFkb25seScqCisnbm9yZW1hcCcJb3B0aW9ucy50eHQJLyonbm9yZW1hcCcqCisnbm9yZXN0b3Jlc2NyZWVuJwlvcHRpb25zLnR4dAkvKidub3Jlc3RvcmVzY3JlZW4nKgorJ25vcmV2aW5zJwlvcHRpb25zLnR4dAkvKidub3JldmlucycqCisnbm9yaScJb3B0aW9ucy50eHQJLyonbm9yaScqCisnbm9yaWdodGxlZnQnCW9wdGlvbnMudHh0CS8qJ25vcmlnaHRsZWZ0JyoKKydub3JpZ2h0bGVmdGNtZCcJb3B0aW9ucy50eHQJLyonbm9yaWdodGxlZnRjbWQnKgorJ25vcmwnCW9wdGlvbnMudHh0CS8qJ25vcmwnKgorJ25vcmxjJwlvcHRpb25zLnR4dAkvKidub3JsYycqCisnbm9ybycJb3B0aW9ucy50eHQJLyonbm9ybycqCisnbm9ycycJb3B0aW9ucy50eHQJLyonbm9ycycqCisnbm9ydScJb3B0aW9ucy50eHQJLyonbm9ydScqCisnbm9ydWxlcicJb3B0aW9ucy50eHQJLyonbm9ydWxlcicqCisnbm9zYicJb3B0aW9ucy50eHQJLyonbm9zYicqCisnbm9zYycJb3B0aW9ucy50eHQJLyonbm9zYycqCisnbm9zY2InCW9wdGlvbnMudHh0CS8qJ25vc2NiJyoKKydub3Njcm9sbGJpbmQnCW9wdGlvbnMudHh0CS8qJ25vc2Nyb2xsYmluZCcqCisnbm9zY3MnCW9wdGlvbnMudHh0CS8qJ25vc2NzJyoKKydub3NlY3VyZScJb3B0aW9ucy50eHQJLyonbm9zZWN1cmUnKgorJ25vc2Z0JwlvcHRpb25zLnR4dAkvKidub3NmdCcqCisnbm9zaGVsbHNsYXNoJwlvcHRpb25zLnR4dAkvKidub3NoZWxsc2xhc2gnKgorJ25vc2hpZnRyb3VuZCcJb3B0aW9ucy50eHQJLyonbm9zaGlmdHJvdW5kJyoKKydub3Nob3J0bmFtZScJb3B0aW9ucy50eHQJLyonbm9zaG9ydG5hbWUnKgorJ25vc2hvd2NtZCcJb3B0aW9ucy50eHQJLyonbm9zaG93Y21kJyoKKydub3Nob3dmdWxsdGFnJwlvcHRpb25zLnR4dAkvKidub3Nob3dmdWxsdGFnJyoKKydub3Nob3dtYXRjaCcJb3B0aW9ucy50eHQJLyonbm9zaG93bWF0Y2gnKgorJ25vc2hvd21vZGUnCW9wdGlvbnMudHh0CS8qJ25vc2hvd21vZGUnKgorJ25vc2knCW9wdGlvbnMudHh0CS8qJ25vc2knKgorJ25vc20nCW9wdGlvbnMudHh0CS8qJ25vc20nKgorJ25vc21hcnRjYXNlJwlvcHRpb25zLnR4dAkvKidub3NtYXJ0Y2FzZScqCisnbm9zbWFydGluZGVudCcJb3B0aW9ucy50eHQJLyonbm9zbWFydGluZGVudCcqCisnbm9zbWFydHRhYicJb3B0aW9ucy50eHQJLyonbm9zbWFydHRhYicqCisnbm9zbWQnCW9wdGlvbnMudHh0CS8qJ25vc21kJyoKKydub3NuJwlvcHRpb25zLnR4dAkvKidub3NuJyoKKydub3NvbCcJb3B0aW9ucy50eHQJLyonbm9zb2wnKgorJ25vc3BsaXRiZWxvdycJb3B0aW9ucy50eHQJLyonbm9zcGxpdGJlbG93JyoKKydub3NwbGl0cmlnaHQnCW9wdGlvbnMudHh0CS8qJ25vc3BsaXRyaWdodCcqCisnbm9zcHInCW9wdGlvbnMudHh0CS8qJ25vc3ByJyoKKydub3NyJwlvcHRpb25zLnR4dAkvKidub3NyJyoKKydub3NzbCcJb3B0aW9ucy50eHQJLyonbm9zc2wnKgorJ25vc3RhJwlvcHRpb25zLnR4dAkvKidub3N0YScqCisnbm9zdGFydG9mbGluZScJb3B0aW9ucy50eHQJLyonbm9zdGFydG9mbGluZScqCisnbm9zd2FwZmlsZScJb3B0aW9ucy50eHQJLyonbm9zd2FwZmlsZScqCisnbm9zd2YnCW9wdGlvbnMudHh0CS8qJ25vc3dmJyoKKydub3RhJwlvcHRpb25zLnR4dAkvKidub3RhJyoKKydub3RhZ2JzZWFyY2gnCW9wdGlvbnMudHh0CS8qJ25vdGFnYnNlYXJjaCcqCisnbm90YWdyZWxhdGl2ZScJb3B0aW9ucy50eHQJLyonbm90YWdyZWxhdGl2ZScqCisnbm90YWdzdGFjaycJb3B0aW9ucy50eHQJLyonbm90YWdzdGFjaycqCisnbm90YmknCW9wdGlvbnMudHh0CS8qJ25vdGJpJyoKKydub3RiaWRpJwlvcHRpb25zLnR4dAkvKidub3RiaWRpJyoKKydub3RicycJb3B0aW9ucy50eHQJLyonbm90YnMnKgorJ25vdGVybWJpZGknCW9wdGlvbnMudHh0CS8qJ25vdGVybWJpZGknKgorJ25vdGVyc2UnCW9wdGlvbnMudHh0CS8qJ25vdGVyc2UnKgorJ25vdGV4dGF1dG8nCW9wdGlvbnMudHh0CS8qJ25vdGV4dGF1dG8nKgorJ25vdGV4dG1vZGUnCW9wdGlvbnMudHh0CS8qJ25vdGV4dG1vZGUnKgorJ25vdGYnCW9wdGlvbnMudHh0CS8qJ25vdGYnKgorJ25vdGdzdCcJb3B0aW9ucy50eHQJLyonbm90Z3N0JyoKKydub3RpbGRlb3AnCW9wdGlvbnMudHh0CS8qJ25vdGlsZGVvcCcqCisnbm90aW1lb3V0JwlvcHRpb25zLnR4dAkvKidub3RpbWVvdXQnKgorJ25vdGl0bGUnCW9wdGlvbnMudHh0CS8qJ25vdGl0bGUnKgorJ25vdG8nCW9wdGlvbnMudHh0CS8qJ25vdG8nKgorJ25vdG9wJwlvcHRpb25zLnR4dAkvKidub3RvcCcqCisnbm90cicJb3B0aW9ucy50eHQJLyonbm90cicqCisnbm90dGltZW91dCcJb3B0aW9ucy50eHQJLyonbm90dGltZW91dCcqCisnbm90dHlidWlsdGluJwlvcHRpb25zLnR4dAkvKidub3R0eWJ1aWx0aW4nKgorJ25vdHR5ZmFzdCcJb3B0aW9ucy50eHQJLyonbm90dHlmYXN0JyoKKydub3R4JwlvcHRpb25zLnR4dAkvKidub3R4JyoKKydub3ZiJwlvcHRpb25zLnR4dAkvKidub3ZiJyoKKydub3ZpY2UnCXZpX2RpZmYudHh0CS8qJ25vdmljZScqCisnbm92aXN1YWxiZWxsJwlvcHRpb25zLnR4dAkvKidub3Zpc3VhbGJlbGwnKgorJ25vd2EnCW9wdGlvbnMudHh0CS8qJ25vd2EnKgorJ25vd2FybicJb3B0aW9ucy50eHQJLyonbm93YXJuJyoKKydub3diJwlvcHRpb25zLnR4dAkvKidub3diJyoKKydub3dlaXJkaW52ZXJ0JwlvcHRpb25zLnR4dAkvKidub3dlaXJkaW52ZXJ0JyoKKydub3dmaCcJb3B0aW9ucy50eHQJLyonbm93ZmgnKgorJ25vd2lsZG1lbnUnCW9wdGlvbnMudHh0CS8qJ25vd2lsZG1lbnUnKgorJ25vd2luZml4aGVpZ2h0JwlvcHRpb25zLnR4dAkvKidub3dpbmZpeGhlaWdodCcqCisnbm93aXYnCW9wdGlvbnMudHh0CS8qJ25vd2l2JyoKKydub3dtbnUnCW9wdGlvbnMudHh0CS8qJ25vd21udScqCisnbm93cmFwJwlvcHRpb25zLnR4dAkvKidub3dyYXAnKgorJ25vd3JhcHNjYW4nCW9wdGlvbnMudHh0CS8qJ25vd3JhcHNjYW4nKgorJ25vd3JpdGUnCW9wdGlvbnMudHh0CS8qJ25vd3JpdGUnKgorJ25vd3JpdGVhbnknCW9wdGlvbnMudHh0CS8qJ25vd3JpdGVhbnknKgorJ25vd3JpdGViYWNrdXAnCW9wdGlvbnMudHh0CS8qJ25vd3JpdGViYWNrdXAnKgorJ25vd3MnCW9wdGlvbnMudHh0CS8qJ25vd3MnKgorJ25yZm9ybWF0cycJb3B0aW9ucy50eHQJLyonbnJmb3JtYXRzJyoKKydudScJb3B0aW9ucy50eHQJLyonbnUnKgorJ251bWJlcicJb3B0aW9ucy50eHQJLyonbnVtYmVyJyoKKydvZnQnCW9wdGlvbnMudHh0CS8qJ29mdCcqCisnb3AnCXZpX2RpZmYudHh0CS8qJ29wJyoKKydvcGVuJwl2aV9kaWZmLnR4dAkvKidvcGVuJyoKKydvcHRpbWl6ZScJdmlfZGlmZi50eHQJLyonb3B0aW1pemUnKgorJ29wdGlvbicJaW50cm8udHh0CS8qJ29wdGlvbicqCisnb3NmaWxldHlwZScJb3B0aW9ucy50eHQJLyonb3NmaWxldHlwZScqCisncGEnCW9wdGlvbnMudHh0CS8qJ3BhJyoKKydwYXJhJwlvcHRpb25zLnR4dAkvKidwYXJhJyoKKydwYXJhZ3JhcGhzJwlvcHRpb25zLnR4dAkvKidwYXJhZ3JhcGhzJyoKKydwYXN0ZScJb3B0aW9ucy50eHQJLyoncGFzdGUnKgorJ3Bhc3RldG9nZ2xlJwlvcHRpb25zLnR4dAkvKidwYXN0ZXRvZ2dsZScqCisncGF0Y2hleHByJwlvcHRpb25zLnR4dAkvKidwYXRjaGV4cHInKgorJ3BhdGNobW9kZScJb3B0aW9ucy50eHQJLyoncGF0Y2htb2RlJyoKKydwYXRoJwlvcHRpb25zLnR4dAkvKidwYXRoJyoKKydwZGV2JwlvcHRpb25zLnR4dAkvKidwZGV2JyoKKydwZW5jJwlvcHRpb25zLnR4dAkvKidwZW5jJyoKKydwZXgnCW9wdGlvbnMudHh0CS8qJ3BleCcqCisncGV4cHInCW9wdGlvbnMudHh0CS8qJ3BleHByJyoKKydwZm4nCW9wdGlvbnMudHh0CS8qJ3BmbicqCisncGhlYWRlcicJb3B0aW9ucy50eHQJLyoncGhlYWRlcicqCisncGknCW9wdGlvbnMudHh0CS8qJ3BpJyoKKydwbScJb3B0aW9ucy50eHQJLyoncG0nKgorJ3BvcHQnCW9wdGlvbnMudHh0CS8qJ3BvcHQnKgorJ3ByZXNlcnZlaW5kZW50JwlvcHRpb25zLnR4dAkvKidwcmVzZXJ2ZWluZGVudCcqCisncHJldmlld2hlaWdodCcJb3B0aW9ucy50eHQJLyoncHJldmlld2hlaWdodCcqCisncHJldmlld3dpbmRvdycJb3B0aW9ucy50eHQJLyoncHJldmlld3dpbmRvdycqCisncHJpbnRkZXZpY2UnCW9wdGlvbnMudHh0CS8qJ3ByaW50ZGV2aWNlJyoKKydwcmludGVuY29kaW5nJwlvcHRpb25zLnR4dAkvKidwcmludGVuY29kaW5nJyoKKydwcmludGV4cHInCW9wdGlvbnMudHh0CS8qJ3ByaW50ZXhwcicqCisncHJpbnRmb250JwlvcHRpb25zLnR4dAkvKidwcmludGZvbnQnKgorJ3ByaW50aGVhZGVyJwlvcHRpb25zLnR4dAkvKidwcmludGhlYWRlcicqCisncHJpbnRvcHRpb25zJwlvcHRpb25zLnR4dAkvKidwcmludG9wdGlvbnMnKgorJ3Byb21wdCcJdmlfZGlmZi50eHQJLyoncHJvbXB0JyoKKydwdCcJb3B0aW9ucy50eHQJLyoncHQnKgorJ3B2aCcJb3B0aW9ucy50eHQJLyoncHZoJyoKKydwdncnCW9wdGlvbnMudHh0CS8qJ3B2dycqCisncXVvdGUJbW90aW9uLnR4dAkvKidxdW90ZSoKKydyZWFkb25seScJb3B0aW9ucy50eHQJLyoncmVhZG9ubHknKgorJ3JlZHJhdycJdmlfZGlmZi50eHQJLyoncmVkcmF3JyoKKydyZW1hcCcJb3B0aW9ucy50eHQJLyoncmVtYXAnKgorJ3JlcG9ydCcJb3B0aW9ucy50eHQJLyoncmVwb3J0JyoKKydyZXN0b3Jlc2NyZWVuJwlvcHRpb25zLnR4dAkvKidyZXN0b3Jlc2NyZWVuJyoKKydyZXZpbnMnCW9wdGlvbnMudHh0CS8qJ3JldmlucycqCisncmknCW9wdGlvbnMudHh0CS8qJ3JpJyoKKydyaWdodGxlZnQnCW9wdGlvbnMudHh0CS8qJ3JpZ2h0bGVmdCcqCisncmlnaHRsZWZ0Y21kJwlvcHRpb25zLnR4dAkvKidyaWdodGxlZnRjbWQnKgorJ3JsJwlvcHRpb25zLnR4dAkvKidybCcqCisncmxjJwlvcHRpb25zLnR4dAkvKidybGMnKgorJ3JvJwlvcHRpb25zLnR4dAkvKidybycqCisncnMnCW9wdGlvbnMudHh0CS8qJ3JzJyoKKydydHAnCW9wdGlvbnMudHh0CS8qJ3J0cCcqCisncnUnCW9wdGlvbnMudHh0CS8qJ3J1JyoKKydydWYnCW9wdGlvbnMudHh0CS8qJ3J1ZicqCisncnVsZXInCW9wdGlvbnMudHh0CS8qJ3J1bGVyJyoKKydydWxlcmZvcm1hdCcJb3B0aW9ucy50eHQJLyoncnVsZXJmb3JtYXQnKgorJ3J1bnRpbWVwYXRoJwlvcHRpb25zLnR4dAkvKidydW50aW1lcGF0aCcqCisnc2InCW9wdGlvbnMudHh0CS8qJ3NiJyoKKydzYm8nCW9wdGlvbnMudHh0CS8qJ3NibycqCisnc2JyJwlvcHRpb25zLnR4dAkvKidzYnInKgorJ3NjJwlvcHRpb25zLnR4dAkvKidzYycqCisnc2NiJwlvcHRpb25zLnR4dAkvKidzY2InKgorJ3NjcicJb3B0aW9ucy50eHQJLyonc2NyJyoKKydzY3JvbGwnCW9wdGlvbnMudHh0CS8qJ3Njcm9sbCcqCisnc2Nyb2xsYmluZCcJb3B0aW9ucy50eHQJLyonc2Nyb2xsYmluZCcqCisnc2Nyb2xsanVtcCcJb3B0aW9ucy50eHQJLyonc2Nyb2xsanVtcCcqCisnc2Nyb2xsb2ZmJwlvcHRpb25zLnR4dAkvKidzY3JvbGxvZmYnKgorJ3Njcm9sbG9wdCcJb3B0aW9ucy50eHQJLyonc2Nyb2xsb3B0JyoKKydzY3MnCW9wdGlvbnMudHh0CS8qJ3NjcycqCisnc2VjdCcJb3B0aW9ucy50eHQJLyonc2VjdCcqCisnc2VjdGlvbnMnCW9wdGlvbnMudHh0CS8qJ3NlY3Rpb25zJyoKKydzZWN1cmUnCW9wdGlvbnMudHh0CS8qJ3NlY3VyZScqCisnc2VsJwlvcHRpb25zLnR4dAkvKidzZWwnKgorJ3NlbGVjdGlvbicJb3B0aW9ucy50eHQJLyonc2VsZWN0aW9uJyoKKydzZWxlY3Rtb2RlJwlvcHRpb25zLnR4dAkvKidzZWxlY3Rtb2RlJyoKKydzZXNzaW9ub3B0aW9ucycJb3B0aW9ucy50eHQJLyonc2Vzc2lvbm9wdGlvbnMnKgorJ3NmdCcJb3B0aW9ucy50eHQJLyonc2Z0JyoKKydzaCcJb3B0aW9ucy50eHQJLyonc2gnKgorJ3NoY2YnCW9wdGlvbnMudHh0CS8qJ3NoY2YnKgorJ3NoZWxsJwlvcHRpb25zLnR4dAkvKidzaGVsbCcqCisnc2hlbGxjbWRmbGFnJwlvcHRpb25zLnR4dAkvKidzaGVsbGNtZGZsYWcnKgorJ3NoZWxscGlwZScJb3B0aW9ucy50eHQJLyonc2hlbGxwaXBlJyoKKydzaGVsbHF1b3RlJwlvcHRpb25zLnR4dAkvKidzaGVsbHF1b3RlJyoKKydzaGVsbHJlZGlyJwlvcHRpb25zLnR4dAkvKidzaGVsbHJlZGlyJyoKKydzaGVsbHNsYXNoJwlvcHRpb25zLnR4dAkvKidzaGVsbHNsYXNoJyoKKydzaGVsbHR5cGUnCW9wdGlvbnMudHh0CS8qJ3NoZWxsdHlwZScqCisnc2hlbGx4cXVvdGUnCW9wdGlvbnMudHh0CS8qJ3NoZWxseHF1b3RlJyoKKydzaGlmdHJvdW5kJwlvcHRpb25zLnR4dAkvKidzaGlmdHJvdW5kJyoKKydzaGlmdHdpZHRoJwlvcHRpb25zLnR4dAkvKidzaGlmdHdpZHRoJyoKKydzaG0nCW9wdGlvbnMudHh0CS8qJ3NobScqCisnc2hvcnRtZXNzJwlvcHRpb25zLnR4dAkvKidzaG9ydG1lc3MnKgorJ3Nob3J0bmFtZScJb3B0aW9ucy50eHQJLyonc2hvcnRuYW1lJyoKKydzaG93YnJlYWsnCW9wdGlvbnMudHh0CS8qJ3Nob3dicmVhaycqCisnc2hvd2NtZCcJb3B0aW9ucy50eHQJLyonc2hvd2NtZCcqCisnc2hvd2Z1bGx0YWcnCW9wdGlvbnMudHh0CS8qJ3Nob3dmdWxsdGFnJyoKKydzaG93bWF0Y2gnCW9wdGlvbnMudHh0CS8qJ3Nob3dtYXRjaCcqCisnc2hvd21vZGUnCW9wdGlvbnMudHh0CS8qJ3Nob3dtb2RlJyoKKydzaHEnCW9wdGlvbnMudHh0CS8qJ3NocScqCisnc2knCW9wdGlvbnMudHh0CS8qJ3NpJyoKKydzaWRlc2Nyb2xsJwlvcHRpb25zLnR4dAkvKidzaWRlc2Nyb2xsJyoKKydzaWRlc2Nyb2xsb2ZmJwlvcHRpb25zLnR4dAkvKidzaWRlc2Nyb2xsb2ZmJyoKKydzaXNvJwlvcHRpb25zLnR4dAkvKidzaXNvJyoKKydzaicJb3B0aW9ucy50eHQJLyonc2onKgorJ3NsbScJb3B0aW9ucy50eHQJLyonc2xtJyoKKydzbG93Jwl2aV9kaWZmLnR4dAkvKidzbG93JyoKKydzbG93b3BlbicJdmlfZGlmZi50eHQJLyonc2xvd29wZW4nKgorJ3NtJwlvcHRpb25zLnR4dAkvKidzbScqCisnc21hcnRjYXNlJwlvcHRpb25zLnR4dAkvKidzbWFydGNhc2UnKgorJ3NtYXJ0aW5kZW50JwlvcHRpb25zLnR4dAkvKidzbWFydGluZGVudCcqCisnc21hcnR0YWInCW9wdGlvbnMudHh0CS8qJ3NtYXJ0dGFiJyoKKydzbWQnCW9wdGlvbnMudHh0CS8qJ3NtZCcqCisnc24nCW9wdGlvbnMudHh0CS8qJ3NuJyoKKydzbycJb3B0aW9ucy50eHQJLyonc28nKgorJ3NvZnR0YWJzdG9wJwlvcHRpb25zLnR4dAkvKidzb2Z0dGFic3RvcCcqCisnc29sJwlvcHRpb25zLnR4dAkvKidzb2wnKgorJ3NvdXJjZWFueScJdmlfZGlmZi50eHQJLyonc291cmNlYW55JyoKKydzcCcJb3B0aW9ucy50eHQJLyonc3AnKgorJ3NwbGl0YmVsb3cnCW9wdGlvbnMudHh0CS8qJ3NwbGl0YmVsb3cnKgorJ3NwbGl0cmlnaHQnCW9wdGlvbnMudHh0CS8qJ3NwbGl0cmlnaHQnKgorJ3NwcicJb3B0aW9ucy50eHQJLyonc3ByJyoKKydzcicJb3B0aW9ucy50eHQJLyonc3InKgorJ3NycicJb3B0aW9ucy50eHQJLyonc3JyJyoKKydzcycJb3B0aW9ucy50eHQJLyonc3MnKgorJ3NzbCcJb3B0aW9ucy50eHQJLyonc3NsJyoKKydzc29wJwlvcHRpb25zLnR4dAkvKidzc29wJyoKKydzdCcJb3B0aW9ucy50eHQJLyonc3QnKgorJ3N0YScJb3B0aW9ucy50eHQJLyonc3RhJyoKKydzdGFydG9mbGluZScJb3B0aW9ucy50eHQJLyonc3RhcnRvZmxpbmUnKgorJ3N0YXR1c2xpbmUnCW9wdGlvbnMudHh0CS8qJ3N0YXR1c2xpbmUnKgorJ3N0bCcJb3B0aW9ucy50eHQJLyonc3RsJyoKKydzdHMnCW9wdGlvbnMudHh0CS8qJ3N0cycqCisnc3UnCW9wdGlvbnMudHh0CS8qJ3N1JyoKKydzdWEnCW9wdGlvbnMudHh0CS8qJ3N1YScqCisnc3VmZml4ZXMnCW9wdGlvbnMudHh0CS8qJ3N1ZmZpeGVzJyoKKydzdWZmaXhlc2FkZCcJb3B0aW9ucy50eHQJLyonc3VmZml4ZXNhZGQnKgorJ3N3JwlvcHRpb25zLnR4dAkvKidzdycqCisnc3dhcGZpbGUnCW9wdGlvbnMudHh0CS8qJ3N3YXBmaWxlJyoKKydzd2Fwc3luYycJb3B0aW9ucy50eHQJLyonc3dhcHN5bmMnKgorJ3N3YicJb3B0aW9ucy50eHQJLyonc3diJyoKKydzd2YnCW9wdGlvbnMudHh0CS8qJ3N3ZicqCisnc3dpdGNoYnVmJwlvcHRpb25zLnR4dAkvKidzd2l0Y2hidWYnKgorJ3N3cycJb3B0aW9ucy50eHQJLyonc3dzJyoKKydzeHEnCW9wdGlvbnMudHh0CS8qJ3N4cScqCisnc3luJwlvcHRpb25zLnR4dAkvKidzeW4nKgorJ3N5bnRheCcJb3B0aW9ucy50eHQJLyonc3ludGF4JyoKKyd0XyMyJwl0ZXJtLnR4dAkvKid0XyMyJyoKKyd0XyM0Jwl0ZXJtLnR4dAkvKid0XyM0JyoKKyd0XyUxJwl0ZXJtLnR4dAkvKid0XyUxJyoKKyd0XyVpJwl0ZXJtLnR4dAkvKid0XyVpJyoKKyd0XyY4Jwl0ZXJtLnR4dAkvKid0XyY4JyoKKyd0X0A3Jwl0ZXJtLnR4dAkvKid0X0A3JyoKKyd0X0FCJwl0ZXJtLnR4dAkvKid0X0FCJyoKKyd0X0FGJwl0ZXJtLnR4dAkvKid0X0FGJyoKKyd0X0FMJwl0ZXJtLnR4dAkvKid0X0FMJyoKKyd0X0NTJwl0ZXJtLnR4dAkvKid0X0NTJyoKKyd0X0NWJwl0ZXJtLnR4dAkvKid0X0NWJyoKKyd0X0NvJwl0ZXJtLnR4dAkvKid0X0NvJyoKKyd0X0RMJwl0ZXJtLnR4dAkvKid0X0RMJyoKKyd0X0YxJwl0ZXJtLnR4dAkvKid0X0YxJyoKKyd0X0YyJwl0ZXJtLnR4dAkvKid0X0YyJyoKKyd0X0YzJwl0ZXJtLnR4dAkvKid0X0YzJyoKKyd0X0Y0Jwl0ZXJtLnR4dAkvKid0X0Y0JyoKKyd0X0Y1Jwl0ZXJtLnR4dAkvKid0X0Y1JyoKKyd0X0Y2Jwl0ZXJtLnR4dAkvKid0X0Y2JyoKKyd0X0Y3Jwl0ZXJtLnR4dAkvKid0X0Y3JyoKKyd0X0Y4Jwl0ZXJtLnR4dAkvKid0X0Y4JyoKKyd0X0Y5Jwl0ZXJtLnR4dAkvKid0X0Y5JyoKKyd0X0lFJwl0ZXJtLnR4dAkvKid0X0lFJyoKKyd0X0lTJwl0ZXJtLnR4dAkvKid0X0lTJyoKKyd0X0sxJwl0ZXJtLnR4dAkvKid0X0sxJyoKKyd0X0szJwl0ZXJtLnR4dAkvKid0X0szJyoKKyd0X0s0Jwl0ZXJtLnR4dAkvKid0X0s0JyoKKyd0X0s1Jwl0ZXJtLnR4dAkvKid0X0s1JyoKKyd0X0s2Jwl0ZXJtLnR4dAkvKid0X0s2JyoKKyd0X0s3Jwl0ZXJtLnR4dAkvKid0X0s3JyoKKyd0X0s4Jwl0ZXJtLnR4dAkvKid0X0s4JyoKKyd0X0s5Jwl0ZXJtLnR4dAkvKid0X0s5JyoKKyd0X0tBJwl0ZXJtLnR4dAkvKid0X0tBJyoKKyd0X0tCJwl0ZXJtLnR4dAkvKid0X0tCJyoKKyd0X0tDJwl0ZXJtLnR4dAkvKid0X0tDJyoKKyd0X0tEJwl0ZXJtLnR4dAkvKid0X0tEJyoKKyd0X0tFJwl0ZXJtLnR4dAkvKid0X0tFJyoKKyd0X0tGJwl0ZXJtLnR4dAkvKid0X0tGJyoKKyd0X0tHJwl0ZXJtLnR4dAkvKid0X0tHJyoKKyd0X0tIJwl0ZXJtLnR4dAkvKid0X0tIJyoKKyd0X0tJJwl0ZXJtLnR4dAkvKid0X0tJJyoKKyd0X0tKJwl0ZXJtLnR4dAkvKid0X0tKJyoKKyd0X0tLJwl0ZXJtLnR4dAkvKid0X0tLJyoKKyd0X0tMJwl0ZXJtLnR4dAkvKid0X0tMJyoKKyd0X1JJJwl0ZXJtLnR4dAkvKid0X1JJJyoKKyd0X1JWJwl0ZXJtLnR4dAkvKid0X1JWJyoKKyd0X1NiJwl0ZXJtLnR4dAkvKid0X1NiJyoKKyd0X1NmJwl0ZXJtLnR4dAkvKid0X1NmJyoKKyd0X1dQJwl0ZXJtLnR4dAkvKid0X1dQJyoKKyd0X1dTJwl0ZXJtLnR4dAkvKid0X1dTJyoKKyd0X1pIJwl0ZXJtLnR4dAkvKid0X1pIJyoKKyd0X1pSJwl0ZXJtLnR4dAkvKid0X1pSJyoKKyd0X2FsJwl0ZXJtLnR4dAkvKid0X2FsJyoKKyd0X2JjJwl0ZXJtLnR4dAkvKid0X2JjJyoKKyd0X2NkJwl0ZXJtLnR4dAkvKid0X2NkJyoKKyd0X2NlJwl0ZXJtLnR4dAkvKid0X2NlJyoKKyd0X2NsJwl0ZXJtLnR4dAkvKid0X2NsJyoKKyd0X2NtJwl0ZXJtLnR4dAkvKid0X2NtJyoKKyd0X2NzJwl0ZXJtLnR4dAkvKid0X2NzJyoKKyd0X2RhJwl0ZXJtLnR4dAkvKid0X2RhJyoKKyd0X2RiJwl0ZXJtLnR4dAkvKid0X2RiJyoKKyd0X2RsJwl0ZXJtLnR4dAkvKid0X2RsJyoKKyd0X2ZzJwl0ZXJtLnR4dAkvKid0X2ZzJyoKKyd0X2sxJwl0ZXJtLnR4dAkvKid0X2sxJyoKKyd0X2syJwl0ZXJtLnR4dAkvKid0X2syJyoKKyd0X2szJwl0ZXJtLnR4dAkvKid0X2szJyoKKyd0X2s0Jwl0ZXJtLnR4dAkvKid0X2s0JyoKKyd0X2s1Jwl0ZXJtLnR4dAkvKid0X2s1JyoKKyd0X2s2Jwl0ZXJtLnR4dAkvKid0X2s2JyoKKyd0X2s3Jwl0ZXJtLnR4dAkvKid0X2s3JyoKKyd0X2s4Jwl0ZXJtLnR4dAkvKid0X2s4JyoKKyd0X2s5Jwl0ZXJtLnR4dAkvKid0X2s5JyoKKyd0X2s7Jwl0ZXJtLnR4dAkvKid0X2s7JyoKKyd0X2tCJwl0ZXJtLnR4dAkvKid0X2tCJyoKKyd0X2tEJwl0ZXJtLnR4dAkvKid0X2tEJyoKKyd0X2tJJwl0ZXJtLnR4dAkvKid0X2tJJyoKKyd0X2tOJwl0ZXJtLnR4dAkvKid0X2tOJyoKKyd0X2tQJwl0ZXJtLnR4dAkvKid0X2tQJyoKKyd0X2tiJwl0ZXJtLnR4dAkvKid0X2tiJyoKKyd0X2tkJwl0ZXJtLnR4dAkvKid0X2tkJyoKKyd0X2tlJwl0ZXJtLnR4dAkvKid0X2tlJyoKKyd0X2toJwl0ZXJtLnR4dAkvKid0X2toJyoKKyd0X2tsJwl0ZXJtLnR4dAkvKid0X2tsJyoKKyd0X2tyJwl0ZXJtLnR4dAkvKid0X2tyJyoKKyd0X2tzJwl0ZXJtLnR4dAkvKid0X2tzJyoKKyd0X2t1Jwl0ZXJtLnR4dAkvKid0X2t1JyoKKyd0X2xlJwl0ZXJtLnR4dAkvKid0X2xlJyoKKyd0X21iJwl0ZXJtLnR4dAkvKid0X21iJyoKKyd0X21kJwl0ZXJtLnR4dAkvKid0X21kJyoKKyd0X21lJwl0ZXJtLnR4dAkvKid0X21lJyoKKyd0X21yJwl0ZXJtLnR4dAkvKid0X21yJyoKKyd0X21zJwl0ZXJtLnR4dAkvKid0X21zJyoKKyd0X25kJwl0ZXJtLnR4dAkvKid0X25kJyoKKyd0X29wJwl0ZXJtLnR4dAkvKid0X29wJyoKKyd0X3NlJwl0ZXJtLnR4dAkvKid0X3NlJyoKKyd0X3NvJwl0ZXJtLnR4dAkvKid0X3NvJyoKKyd0X3NyJwl0ZXJtLnR4dAkvKid0X3NyJyoKKyd0X3N0YXI3Jwl0ZXJtLnR4dAkvKid0X3N0YXI3JyoKKyd0X3RlJwl0ZXJtLnR4dAkvKid0X3RlJyoKKyd0X3RpJwl0ZXJtLnR4dAkvKid0X3RpJyoKKyd0X3RzJwl0ZXJtLnR4dAkvKid0X3RzJyoKKyd0X3VlJwl0ZXJtLnR4dAkvKid0X3VlJyoKKyd0X3VzJwl0ZXJtLnR4dAkvKid0X3VzJyoKKyd0X3V0Jwl0ZXJtLnR4dAkvKid0X3V0JyoKKyd0X3ZiJwl0ZXJtLnR4dAkvKid0X3ZiJyoKKyd0X3ZlJwl0ZXJtLnR4dAkvKid0X3ZlJyoKKyd0X3ZpJwl0ZXJtLnR4dAkvKid0X3ZpJyoKKyd0X3ZzJwl0ZXJtLnR4dAkvKid0X3ZzJyoKKyd0X3hzJwl0ZXJtLnR4dAkvKid0X3hzJyoKKyd0YScJb3B0aW9ucy50eHQJLyondGEnKgorJ3RhYnN0b3AnCW9wdGlvbnMudHh0CS8qJ3RhYnN0b3AnKgorJ3RhZycJb3B0aW9ucy50eHQJLyondGFnJyoKKyd0YWdic2VhcmNoJwlvcHRpb25zLnR4dAkvKid0YWdic2VhcmNoJyoKKyd0YWdsZW5ndGgnCW9wdGlvbnMudHh0CS8qJ3RhZ2xlbmd0aCcqCisndGFncmVsYXRpdmUnCW9wdGlvbnMudHh0CS8qJ3RhZ3JlbGF0aXZlJyoKKyd0YWdzJwlvcHRpb25zLnR4dAkvKid0YWdzJyoKKyd0YWdzdGFjaycJb3B0aW9ucy50eHQJLyondGFnc3RhY2snKgorJ3RiJwlvcHRpb25zLnR4dAkvKid0YicqCisndGJpJwlvcHRpb25zLnR4dAkvKid0YmknKgorJ3RiaWRpJwlvcHRpb25zLnR4dAkvKid0YmlkaScqCisndGJpcycJb3B0aW9ucy50eHQJLyondGJpcycqCisndGJzJwlvcHRpb25zLnR4dAkvKid0YnMnKgorJ3RlbmMnCW9wdGlvbnMudHh0CS8qJ3RlbmMnKgorJ3Rlcm0nCW9wdGlvbnMudHh0CS8qJ3Rlcm0nKgorJ3Rlcm1iaWRpJwlvcHRpb25zLnR4dAkvKid0ZXJtYmlkaScqCisndGVybWVuY29kaW5nJwlvcHRpb25zLnR4dAkvKid0ZXJtZW5jb2RpbmcnKgorJ3RlcnNlJwlvcHRpb25zLnR4dAkvKid0ZXJzZScqCisndGV4dGF1dG8nCW9wdGlvbnMudHh0CS8qJ3RleHRhdXRvJyoKKyd0ZXh0bW9kZScJb3B0aW9ucy50eHQJLyondGV4dG1vZGUnKgorJ3RleHR3aWR0aCcJb3B0aW9ucy50eHQJLyondGV4dHdpZHRoJyoKKyd0ZicJb3B0aW9ucy50eHQJLyondGYnKgorJ3Rnc3QnCW9wdGlvbnMudHh0CS8qJ3Rnc3QnKgorJ3RoZXNhdXJ1cycJb3B0aW9ucy50eHQJLyondGhlc2F1cnVzJyoKKyd0aWxkZW9wJwlvcHRpb25zLnR4dAkvKid0aWxkZW9wJyoKKyd0aW1lb3V0JwlvcHRpb25zLnR4dAkvKid0aW1lb3V0JyoKKyd0aW1lb3V0bGVuJwlvcHRpb25zLnR4dAkvKid0aW1lb3V0bGVuJyoKKyd0aXRsZScJb3B0aW9ucy50eHQJLyondGl0bGUnKgorJ3RpdGxlbGVuJwlvcHRpb25zLnR4dAkvKid0aXRsZWxlbicqCisndGl0bGVvbGQnCW9wdGlvbnMudHh0CS8qJ3RpdGxlb2xkJyoKKyd0aXRsZXN0cmluZycJb3B0aW9ucy50eHQJLyondGl0bGVzdHJpbmcnKgorJ3RsJwlvcHRpb25zLnR4dAkvKid0bCcqCisndG0nCW9wdGlvbnMudHh0CS8qJ3RtJyoKKyd0bycJb3B0aW9ucy50eHQJLyondG8nKgorJ3Rvb2xiYXInCW9wdGlvbnMudHh0CS8qJ3Rvb2xiYXInKgorJ3Rvb2xiYXJpY29uc2l6ZScJb3B0aW9ucy50eHQJLyondG9vbGJhcmljb25zaXplJyoKKyd0b3AnCW9wdGlvbnMudHh0CS8qJ3RvcCcqCisndHInCW9wdGlvbnMudHh0CS8qJ3RyJyoKKyd0cycJb3B0aW9ucy50eHQJLyondHMnKgorJ3RzbCcJb3B0aW9ucy50eHQJLyondHNsJyoKKyd0c3InCW9wdGlvbnMudHh0CS8qJ3RzcicqCisndHRpbWVvdXQnCW9wdGlvbnMudHh0CS8qJ3R0aW1lb3V0JyoKKyd0dGltZW91dGxlbicJb3B0aW9ucy50eHQJLyondHRpbWVvdXRsZW4nKgorJ3R0bScJb3B0aW9ucy50eHQJLyondHRtJyoKKyd0dHknCW9wdGlvbnMudHh0CS8qJ3R0eScqCisndHR5YnVpbHRpbicJb3B0aW9ucy50eHQJLyondHR5YnVpbHRpbicqCisndHR5ZmFzdCcJb3B0aW9ucy50eHQJLyondHR5ZmFzdCcqCisndHR5bScJb3B0aW9ucy50eHQJLyondHR5bScqCisndHR5bW91c2UnCW9wdGlvbnMudHh0CS8qJ3R0eW1vdXNlJyoKKyd0dHlzY3JvbGwnCW9wdGlvbnMudHh0CS8qJ3R0eXNjcm9sbCcqCisndHR5dHlwZScJb3B0aW9ucy50eHQJLyondHR5dHlwZScqCisndHcnCW9wdGlvbnMudHh0CS8qJ3R3JyoKKyd0eCcJb3B0aW9ucy50eHQJLyondHgnKgorJ3VjJwlvcHRpb25zLnR4dAkvKid1YycqCisndWwnCW9wdGlvbnMudHh0CS8qJ3VsJyoKKyd1bmRvbGV2ZWxzJwlvcHRpb25zLnR4dAkvKid1bmRvbGV2ZWxzJyoKKyd1cGRhdGVjb3VudCcJb3B0aW9ucy50eHQJLyondXBkYXRlY291bnQnKgorJ3VwZGF0ZXRpbWUnCW9wdGlvbnMudHh0CS8qJ3VwZGF0ZXRpbWUnKgorJ3V0JwlvcHRpb25zLnR4dAkvKid1dCcqCisndmInCW9wdGlvbnMudHh0CS8qJ3ZiJyoKKyd2YnMnCW9wdGlvbnMudHh0CS8qJ3ZicycqCisndmRpcicJb3B0aW9ucy50eHQJLyondmRpcicqCisndmUnCW9wdGlvbnMudHh0CS8qJ3ZlJyoKKyd2ZXJib3NlJwlvcHRpb25zLnR4dAkvKid2ZXJib3NlJyoKKyd2aScJb3B0aW9ucy50eHQJLyondmknKgorJ3ZpZXdkaXInCW9wdGlvbnMudHh0CS8qJ3ZpZXdkaXInKgorJ3ZpZXdvcHRpb25zJwlvcHRpb25zLnR4dAkvKid2aWV3b3B0aW9ucycqCisndmltaW5mbycJb3B0aW9ucy50eHQJLyondmltaW5mbycqCisndmlydHVhbGVkaXQnCW9wdGlvbnMudHh0CS8qJ3ZpcnR1YWxlZGl0JyoKKyd2aXN1YWxiZWxsJwlvcHRpb25zLnR4dAkvKid2aXN1YWxiZWxsJyoKKyd2b3AnCW9wdGlvbnMudHh0CS8qJ3ZvcCcqCisndzEyMDAnCXZpX2RpZmYudHh0CS8qJ3cxMjAwJyoKKyd3MzAwJwl2aV9kaWZmLnR4dAkvKid3MzAwJyoKKyd3OTYwMCcJdmlfZGlmZi50eHQJLyondzk2MDAnKgorJ3dhJwlvcHRpb25zLnR4dAkvKid3YScqCisnd2FrJwlvcHRpb25zLnR4dAkvKid3YWsnKgorJ3dhcm4nCW9wdGlvbnMudHh0CS8qJ3dhcm4nKgorJ3diJwlvcHRpb25zLnR4dAkvKid3YicqCisnd2MnCW9wdGlvbnMudHh0CS8qJ3djJyoKKyd3Y20nCW9wdGlvbnMudHh0CS8qJ3djbScqCisnd2QnCW9wdGlvbnMudHh0CS8qJ3dkJyoKKyd3ZWlyZGludmVydCcJb3B0aW9ucy50eHQJLyond2VpcmRpbnZlcnQnKgorJ3dmaCcJb3B0aW9ucy50eHQJLyond2ZoJyoKKyd3aCcJb3B0aW9ucy50eHQJLyond2gnKgorJ3doaWNod3JhcCcJb3B0aW9ucy50eHQJLyond2hpY2h3cmFwJyoKKyd3aScJdmlfZGlmZi50eHQJLyond2knKgorJ3dpZycJb3B0aW9ucy50eHQJLyond2lnJyoKKyd3aWxkY2hhcicJb3B0aW9ucy50eHQJLyond2lsZGNoYXInKgorJ3dpbGRjaGFybScJb3B0aW9ucy50eHQJLyond2lsZGNoYXJtJyoKKyd3aWxkaWdub3JlJwlvcHRpb25zLnR4dAkvKid3aWxkaWdub3JlJyoKKyd3aWxkbWVudScJb3B0aW9ucy50eHQJLyond2lsZG1lbnUnKgorJ3dpbGRtb2RlJwlvcHRpb25zLnR4dAkvKid3aWxkbW9kZScqCisnd2ltJwlvcHRpb25zLnR4dAkvKid3aW0nKgorJ3dpbmFsdGtleXMnCW9wdGlvbnMudHh0CS8qJ3dpbmFsdGtleXMnKgorJ3dpbmRvdycJdmlfZGlmZi50eHQJLyond2luZG93JyoKKyd3aW5maXhoZWlnaHQnCW9wdGlvbnMudHh0CS8qJ3dpbmZpeGhlaWdodCcqCisnd2luaGVpZ2h0JwlvcHRpb25zLnR4dAkvKid3aW5oZWlnaHQnKgorJ3dpbm1pbmhlaWdodCcJb3B0aW9ucy50eHQJLyond2lubWluaGVpZ2h0JyoKKyd3aW5taW53aWR0aCcJb3B0aW9ucy50eHQJLyond2lubWlud2lkdGgnKgorJ3dpbndpZHRoJwlvcHRpb25zLnR4dAkvKid3aW53aWR0aCcqCisnd2l2JwlvcHRpb25zLnR4dAkvKid3aXYnKgorJ3dpdycJb3B0aW9ucy50eHQJLyond2l3JyoKKyd3bScJb3B0aW9ucy50eHQJLyond20nKgorJ3dtaCcJb3B0aW9ucy50eHQJLyond21oJyoKKyd3bW51JwlvcHRpb25zLnR4dAkvKid3bW51JyoKKyd3bXcnCW9wdGlvbnMudHh0CS8qJ3dtdycqCisnd3JhcCcJb3B0aW9ucy50eHQJLyond3JhcCcqCisnd3JhcG1hcmdpbicJb3B0aW9ucy50eHQJLyond3JhcG1hcmdpbicqCisnd3JhcHNjYW4nCW9wdGlvbnMudHh0CS8qJ3dyYXBzY2FuJyoKKyd3cml0ZScJb3B0aW9ucy50eHQJLyond3JpdGUnKgorJ3dyaXRlYW55JwlvcHRpb25zLnR4dAkvKid3cml0ZWFueScqCisnd3JpdGViYWNrdXAnCW9wdGlvbnMudHh0CS8qJ3dyaXRlYmFja3VwJyoKKyd3cml0ZWRlbGF5JwlvcHRpb25zLnR4dAkvKid3cml0ZWRlbGF5JyoKKyd3cycJb3B0aW9ucy50eHQJLyond3MnKgorJ3d3JwlvcHRpb25zLnR4dAkvKid3dycqCisnewltb3Rpb24udHh0CS8qJ3sqCisnfQltb3Rpb24udHh0CS8qJ30qCisoCW1vdGlvbi50eHQJLyooKgorKQltb3Rpb24udHh0CS8qKSoKKysJbW90aW9uLnR4dAkvKisqCisrK2JpbgllZGl0aW5nLnR4dAkvKisrYmluKgorKytidWlsdGluX3Rlcm1zCXZhcmlvdXMudHh0CS8qKytidWlsdGluX3Rlcm1zKgorKytlbmMJZWRpdGluZy50eHQJLyorK2VuYyoKKysrZmYJZWRpdGluZy50eHQJLyorK2ZmKgorKytub2JpbgllZGl0aW5nLnR4dAkvKisrbm9iaW4qCisrK29wdAllZGl0aW5nLnR4dAkvKisrb3B0KgorK0FSUAl2YXJpb3VzLnR4dAkvKitBUlAqCisrR1VJX0F0aGVuYQl2YXJpb3VzLnR4dAkvKitHVUlfQXRoZW5hKgorK0dVSV9CZU9TCXZhcmlvdXMudHh0CS8qK0dVSV9CZU9TKgorK0dVSV9HVEsJdmFyaW91cy50eHQJLyorR1VJX0dUSyoKKytHVUlfTW90aWYJdmFyaW91cy50eHQJLyorR1VJX01vdGlmKgorK0dVSV9QaG90b24JdmFyaW91cy50eHQJLyorR1VJX1Bob3RvbioKKytHVUlfbmVYdGF3CXZhcmlvdXMudHh0CS8qK0dVSV9uZVh0YXcqCisrWDExCXZhcmlvdXMudHh0CS8qK1gxMSoKKythcmFiaWMJdmFyaW91cy50eHQJLyorYXJhYmljKgorK2F1dG9jbWQJdmFyaW91cy50eHQJLyorYXV0b2NtZCoKKytiYWxsb29uX2V2YWwJdmFyaW91cy50eHQJLyorYmFsbG9vbl9ldmFsKgorK2Jyb3dzZQl2YXJpb3VzLnR4dAkvKiticm93c2UqCisrYnVpbHRpbl90ZXJtcwl2YXJpb3VzLnR4dAkvKitidWlsdGluX3Rlcm1zKgorK2J5dGVfb2Zmc2V0CXZhcmlvdXMudHh0CS8qK2J5dGVfb2Zmc2V0KgorK2NpbmRlbnQJdmFyaW91cy50eHQJLyorY2luZGVudCoKKytjbGllbnRzZXJ2ZXIJdmFyaW91cy50eHQJLyorY2xpZW50c2VydmVyKgorK2NsaXBib2FyZAl2YXJpb3VzLnR4dAkvKitjbGlwYm9hcmQqCisrY21kCWVkaXRpbmcudHh0CS8qK2NtZCoKKytjbWRsaW5lX2NvbXBsCXZhcmlvdXMudHh0CS8qK2NtZGxpbmVfY29tcGwqCisrY21kbGluZV9oaXN0CXZhcmlvdXMudHh0CS8qK2NtZGxpbmVfaGlzdCoKKytjbWRsaW5lX2luZm8JdmFyaW91cy50eHQJLyorY21kbGluZV9pbmZvKgorK2NvbW1lbnRzCXZhcmlvdXMudHh0CS8qK2NvbW1lbnRzKgorK2NyeXB0dgl2YXJpb3VzLnR4dAkvKitjcnlwdHYqCisrY3Njb3BlCXZhcmlvdXMudHh0CS8qK2NzY29wZSoKKytkaWFsb2dfY29uCXZhcmlvdXMudHh0CS8qK2RpYWxvZ19jb24qCisrZGlhbG9nX2Nvbl9ndWkJdmFyaW91cy50eHQJLyorZGlhbG9nX2Nvbl9ndWkqCisrZGlhbG9nX2d1aQl2YXJpb3VzLnR4dAkvKitkaWFsb2dfZ3VpKgorK2RpZmYJdmFyaW91cy50eHQJLyorZGlmZioKKytkaWdyYXBocwl2YXJpb3VzLnR4dAkvKitkaWdyYXBocyoKKytkbmQJdmFyaW91cy50eHQJLyorZG5kKgorK2VtYWNzX3RhZ3MJdmFyaW91cy50eHQJLyorZW1hY3NfdGFncyoKKytldmFsCXZhcmlvdXMudHh0CS8qK2V2YWwqCisrZXhfZXh0cmEJdmFyaW91cy50eHQJLyorZXhfZXh0cmEqCisrZXh0cmFfc2VhcmNoCXZhcmlvdXMudHh0CS8qK2V4dHJhX3NlYXJjaCoKKytmYXJzaQl2YXJpb3VzLnR4dAkvKitmYXJzaSoKKytmZWF0dXJlLWxpc3QJdmFyaW91cy50eHQJLyorZmVhdHVyZS1saXN0KgorK2ZpbGVfaW5fcGF0aAl2YXJpb3VzLnR4dAkvKitmaWxlX2luX3BhdGgqCisrZmluZF9pbl9wYXRoCXZhcmlvdXMudHh0CS8qK2ZpbmRfaW5fcGF0aCoKKytmb2xkaW5nCXZhcmlvdXMudHh0CS8qK2ZvbGRpbmcqCisrZm9vdGVyCXZhcmlvdXMudHh0CS8qK2Zvb3RlcioKKytmb3JrCXZhcmlvdXMudHh0CS8qK2ZvcmsqCisrZ2V0dGV4dAl2YXJpb3VzLnR4dAkvKitnZXR0ZXh0KgorK2hhbmd1bF9pbnB1dAl2YXJpb3VzLnR4dAkvKitoYW5ndWxfaW5wdXQqCisraWNvbnYJdmFyaW91cy50eHQJLyoraWNvbnYqCisraW5zZXJ0X2V4cGFuZAl2YXJpb3VzLnR4dAkvKitpbnNlcnRfZXhwYW5kKgorK2p1bXBsaXN0CXZhcmlvdXMudHh0CS8qK2p1bXBsaXN0KgorK2tleW1hcAl2YXJpb3VzLnR4dAkvKitrZXltYXAqCisrbGFuZ21hcAl2YXJpb3VzLnR4dAkvKitsYW5nbWFwKgorK2xpYmNhbGwJdmFyaW91cy50eHQJLyorbGliY2FsbCoKKytsaW5lYnJlYWsJdmFyaW91cy50eHQJLyorbGluZWJyZWFrKgorK2xpc3BpbmRlbnQJdmFyaW91cy50eHQJLyorbGlzcGluZGVudCoKKytsaXN0Y21kcwl2YXJpb3VzLnR4dAkvKitsaXN0Y21kcyoKKytsb2NhbG1hcAl2YXJpb3VzLnR4dAkvKitsb2NhbG1hcCoKKyttZW51CXZhcmlvdXMudHh0CS8qK21lbnUqCisrbWtzZXNzaW9uCXZhcmlvdXMudHh0CS8qK21rc2Vzc2lvbioKKyttb2RpZnlfZm5hbWUJdmFyaW91cy50eHQJLyorbW9kaWZ5X2ZuYW1lKgorK21vdXNlCXZhcmlvdXMudHh0CS8qK21vdXNlKgorK21vdXNlX2RlYwl2YXJpb3VzLnR4dAkvKittb3VzZV9kZWMqCisrbW91c2VfZ3BtCXZhcmlvdXMudHh0CS8qK21vdXNlX2dwbSoKKyttb3VzZV9uZXR0ZXJtCXZhcmlvdXMudHh0CS8qK21vdXNlX25ldHRlcm0qCisrbW91c2VfcHRlcm0JdmFyaW91cy50eHQJLyorbW91c2VfcHRlcm0qCisrbW91c2VfeHRlcm0JdmFyaW91cy50eHQJLyorbW91c2VfeHRlcm0qCisrbW91c2VzaGFwZQl2YXJpb3VzLnR4dAkvKittb3VzZXNoYXBlKgorK211bHRpX2J5dGUJdmFyaW91cy50eHQJLyorbXVsdGlfYnl0ZSoKKyttdWx0aV9ieXRlX2ltZQl2YXJpb3VzLnR4dAkvKittdWx0aV9ieXRlX2ltZSoKKyttdWx0aV9sYW5nCXZhcmlvdXMudHh0CS8qK211bHRpX2xhbmcqCisrbmV0YmVhbnNfaW50Zwl2YXJpb3VzLnR4dAkvKituZXRiZWFuc19pbnRnKgorK29sZQl2YXJpb3VzLnR4dAkvKitvbGUqCisrb3NmaWxldHlwZQl2YXJpb3VzLnR4dAkvKitvc2ZpbGV0eXBlKgorK3BhdGhfZXh0cmEJdmFyaW91cy50eHQJLyorcGF0aF9leHRyYSoKKytwZXJsCXZhcmlvdXMudHh0CS8qK3BlcmwqCisrcG9zdHNjcmlwdAl2YXJpb3VzLnR4dAkvKitwb3N0c2NyaXB0KgorK3ByaW50ZXIJdmFyaW91cy50eHQJLyorcHJpbnRlcioKKytweXRob24JdmFyaW91cy50eHQJLyorcHl0aG9uKgorK3F1aWNrZml4CXZhcmlvdXMudHh0CS8qK3F1aWNrZml4KgorK3JpZ2h0bGVmdAl2YXJpb3VzLnR4dAkvKityaWdodGxlZnQqCisrcnVieQl2YXJpb3VzLnR4dAkvKitydWJ5KgorK3Njcm9sbGJpbmQJdmFyaW91cy50eHQJLyorc2Nyb2xsYmluZCoKKytzaWducwl2YXJpb3VzLnR4dAkvKitzaWducyoKKytzbWFydGluZGVudAl2YXJpb3VzLnR4dAkvKitzbWFydGluZGVudCoKKytzbmlmZgl2YXJpb3VzLnR4dAkvKitzbmlmZioKKytzdGF0dXNsaW5lCXZhcmlvdXMudHh0CS8qK3N0YXR1c2xpbmUqCisrc3VuX3dvcmtzaG9wCXZhcmlvdXMudHh0CS8qK3N1bl93b3Jrc2hvcCoKKytzeW50YXgJdmFyaW91cy50eHQJLyorc3ludGF4KgorK3N5c3RlbSgpCXZhcmlvdXMudHh0CS8qK3N5c3RlbSgpKgorK3RhZ19hbnlfd2hpdGUJdmFyaW91cy50eHQJLyordGFnX2FueV93aGl0ZSoKKyt0YWdfYmluYXJ5CXZhcmlvdXMudHh0CS8qK3RhZ19iaW5hcnkqCisrdGFnX29sZF9zdGF0aWMJdmFyaW91cy50eHQJLyordGFnX29sZF9zdGF0aWMqCisrdGNsCXZhcmlvdXMudHh0CS8qK3RjbCoKKyt0ZXJtaW5mbwl2YXJpb3VzLnR4dAkvKit0ZXJtaW5mbyoKKyt0ZXJtcmVzcG9uc2UJdmFyaW91cy50eHQJLyordGVybXJlc3BvbnNlKgorK3RleHRvYmplY3RzCXZhcmlvdXMudHh0CS8qK3RleHRvYmplY3RzKgorK3RnZXRlbnQJdmFyaW91cy50eHQJLyordGdldGVudCoKKyt0aXRsZQl2YXJpb3VzLnR4dAkvKit0aXRsZSoKKyt0b29sYmFyCXZhcmlvdXMudHh0CS8qK3Rvb2xiYXIqCisrdXNlcl9jb21tYW5kcwl2YXJpb3VzLnR4dAkvKit1c2VyX2NvbW1hbmRzKgorK3ZlcnRzcGxpdAl2YXJpb3VzLnR4dAkvKit2ZXJ0c3BsaXQqCisrdmltaW5mbwl2YXJpb3VzLnR4dAkvKit2aW1pbmZvKgorK3ZpcnR1YWxlZGl0CXZhcmlvdXMudHh0CS8qK3ZpcnR1YWxlZGl0KgorK3Zpc3VhbAl2YXJpb3VzLnR4dAkvKit2aXN1YWwqCisrdmlzdWFsZXh0cmEJdmFyaW91cy50eHQJLyordmlzdWFsZXh0cmEqCisrdnJlcGxhY2UJdmFyaW91cy50eHQJLyordnJlcGxhY2UqCisrd2lsZGlnbm9yZQl2YXJpb3VzLnR4dAkvKit3aWxkaWdub3JlKgorK3dpbGRtZW51CXZhcmlvdXMudHh0CS8qK3dpbGRtZW51KgorK3dpbmRvd3MJdmFyaW91cy50eHQJLyord2luZG93cyoKKyt3cml0ZWJhY2t1cAl2YXJpb3VzLnR4dAkvKit3cml0ZWJhY2t1cCoKKyt4Zm9udHNldAl2YXJpb3VzLnR4dAkvKit4Zm9udHNldCoKKyt4aW0JdmFyaW91cy50eHQJLyoreGltKgorK3hzbXAJdmFyaW91cy50eHQJLyoreHNtcCoKKyt4c21wX2ludGVyYWN0CXZhcmlvdXMudHh0CS8qK3hzbXBfaW50ZXJhY3QqCisreHRlcm1fY2xpcGJvYXJkCXZhcmlvdXMudHh0CS8qK3h0ZXJtX2NsaXBib2FyZCoKKyt4dGVybV9zYXZlCXZhcmlvdXMudHh0CS8qK3h0ZXJtX3NhdmUqCissCW1vdGlvbi50eHQJLyosKgorLQltb3Rpb24udHh0CS8qLSoKKy0rCXN0YXJ0aW5nLnR4dAkvKi0rKgorLSsvCXN0YXJ0aW5nLnR4dAkvKi0rXC8qCistK2MJc3RhcnRpbmcudHh0CS8qLStjKgorLStyZXZlcnNlCWd1aV94MTEudHh0CS8qLStyZXZlcnNlKgorLStydglndWlfeDExLnR4dAkvKi0rcnYqCistLQlzdGFydGluZy50eHQJLyotLSoKKy0tLQlzdGFydGluZy50eHQJLyotLS0qCistLWNtZAlzdGFydGluZy50eHQJLyotLWNtZCoKKy0tZWNoby13aWQJc3RhcnRpbmcudHh0CS8qLS1lY2hvLXdpZCoKKy0taGVscAlzdGFydGluZy50eHQJLyotLWhlbHAqCistLWxpdGVyYWwJc3RhcnRpbmcudHh0CS8qLS1saXRlcmFsKgorLS1ub2ZvcmsJc3RhcnRpbmcudHh0CS8qLS1ub2ZvcmsqCistLW5vcGx1Z2luCXN0YXJ0aW5nLnR4dAkvKi0tbm9wbHVnaW4qCistLXJlbW90ZQlyZW1vdGUudHh0CS8qLS1yZW1vdGUqCistLXJlbW90ZS1leHByCXJlbW90ZS50eHQJLyotLXJlbW90ZS1leHByKgorLS1yZW1vdGUtc2VuZAlyZW1vdGUudHh0CS8qLS1yZW1vdGUtc2VuZCoKKy0tcmVtb3RlLXNpbGVudAlyZW1vdGUudHh0CS8qLS1yZW1vdGUtc2lsZW50KgorLS1yZW1vdGUtd2FpdAlyZW1vdGUudHh0CS8qLS1yZW1vdGUtd2FpdCoKKy0tcmVtb3RlLXdhaXQtc2lsZW50CXJlbW90ZS50eHQJLyotLXJlbW90ZS13YWl0LXNpbGVudCoKKy0tcm9sZQlzdGFydGluZy50eHQJLyotLXJvbGUqCistLXNlcnZlcmxpc3QJcmVtb3RlLnR4dAkvKi0tc2VydmVybGlzdCoKKy0tc2VydmVybmFtZQlyZW1vdGUudHh0CS8qLS1zZXJ2ZXJuYW1lKgorLS1zb2NrZXRpZAlzdGFydGluZy50eHQJLyotLXNvY2tldGlkKgorLS12ZXJzaW9uCXN0YXJ0aW5nLnR4dAkvKi0tdmVyc2lvbioKKy1BCXN0YXJ0aW5nLnR4dAkvKi1BKgorLUMJc3RhcnRpbmcudHh0CS8qLUMqCistRAlzdGFydGluZy50eHQJLyotRCoKKy1FCXN0YXJ0aW5nLnR4dAkvKi1FKgorLUYJc3RhcnRpbmcudHh0CS8qLUYqCistSAlzdGFydGluZy50eHQJLyotSCoKKy1MCXN0YXJ0aW5nLnR4dAkvKi1MKgorLU0Jc3RhcnRpbmcudHh0CS8qLU0qCistTglzdGFydGluZy50eHQJLyotTioKKy1PCXN0YXJ0aW5nLnR4dAkvKi1PKgorLVAJc3RhcnRpbmcudHh0CS8qLVAqCistUglzdGFydGluZy50eHQJLyotUioKKy1TCXN0YXJ0aW5nLnR4dAkvKi1TKgorLVQJc3RhcnRpbmcudHh0CS8qLVQqCistVQlzdGFydGluZy50eHQJLyotVSoKKy1WCXN0YXJ0aW5nLnR4dAkvKi1WKgorLVcJc3RhcnRpbmcudHh0CS8qLVcqCistWAlzdGFydGluZy50eHQJLyotWCoKKy1aCXN0YXJ0aW5nLnR4dAkvKi1aKgorLWIJc3RhcnRpbmcudHh0CS8qLWIqCistYmFja2dyb3VuZAlndWlfeDExLnR4dAkvKi1iYWNrZ3JvdW5kKgorLWJnCWd1aV94MTEudHh0CS8qLWJnKgorLWJvbGRmb250CWd1aV94MTEudHh0CS8qLWJvbGRmb250KgorLWJvcmRlcndpZHRoCWd1aV94MTEudHh0CS8qLWJvcmRlcndpZHRoKgorLWJ3CWd1aV94MTEudHh0CS8qLWJ3KgorLWMJc3RhcnRpbmcudHh0CS8qLWMqCistZAlzdGFydGluZy50eHQJLyotZCoKKy1kZXYJc3RhcnRpbmcudHh0CS8qLWRldioKKy1kaXNwbGF5CWd1aV94MTEudHh0CS8qLWRpc3BsYXkqCistZQlzdGFydGluZy50eHQJLyotZSoKKy1mCXN0YXJ0aW5nLnR4dAkvKi1mKgorLWZnCWd1aV94MTEudHh0CS8qLWZnKgorLWZpbGUJc3RhcnRpbmcudHh0CS8qLWZpbGUqCistZm4JZ3VpX3gxMS50eHQJLyotZm4qCistZm9udAlndWlfeDExLnR4dAkvKi1mb250KgorLWZvcmVncm91bmQJZ3VpX3gxMS50eHQJLyotZm9yZWdyb3VuZCoKKy1nCXN0YXJ0aW5nLnR4dAkvKi1nKgorLWdlb20JZ3VpX3gxMS50eHQJLyotZ2VvbSoKKy1nZW9tZXRyeQlndWlfeDExLnR4dAkvKi1nZW9tZXRyeSoKKy1nZW9tZXRyeS1leGFtcGxlCWd1aV94MTEudHh0CS8qLWdlb21ldHJ5LWV4YW1wbGUqCistZ3VpCWd1aV94MTEudHh0CS8qLWd1aSoKKy1oCXN0YXJ0aW5nLnR4dAkvKi1oKgorLWkJc3RhcnRpbmcudHh0CS8qLWkqCistaWNvbmljCWd1aV94MTEudHh0CS8qLWljb25pYyoKKy1pdGFsaWNmb250CWd1aV94MTEudHh0CS8qLWl0YWxpY2ZvbnQqCistbAlzdGFydGluZy50eHQJLyotbCoKKy1tCXN0YXJ0aW5nLnR4dAkvKi1tKgorLW1lbnVmb250CWd1aV94MTEudHh0CS8qLW1lbnVmb250KgorLW1lbnVmb250c2V0CWd1aV94MTEudHh0CS8qLW1lbnVmb250c2V0KgorLW1lbnVoZWlnaHQJZ3VpX3gxMS50eHQJLyotbWVudWhlaWdodCoKKy1tZglndWlfeDExLnR4dAkvKi1tZioKKy1taAlndWlfeDExLnR4dAkvKi1taCoKKy1uCXN0YXJ0aW5nLnR4dAkvKi1uKgorLW5iCXN0YXJ0aW5nLnR4dAkvKi1uYioKKy1vCXN0YXJ0aW5nLnR4dAkvKi1vKgorLXEJc3RhcnRpbmcudHh0CS8qLXEqCistcWYJc3RhcnRpbmcudHh0CS8qLXFmKgorLXIJc3RhcnRpbmcudHh0CS8qLXIqCistcmVnaXN0ZXIJaWZfb2xlLnR4dAkvKi1yZWdpc3RlcioKKy1yZXZlcnNlCWd1aV94MTEudHh0CS8qLXJldmVyc2UqCistcnYJZ3VpX3gxMS50eHQJLyotcnYqCistcwlzdGFydGluZy50eHQJLyotcyoKKy1zLWV4CXN0YXJ0aW5nLnR4dAkvKi1zLWV4KgorLXNjcm9sbGJhcndpZHRoCWd1aV94MTEudHh0CS8qLXNjcm9sbGJhcndpZHRoKgorLXNpbGVudAlpZl9vbGUudHh0CS8qLXNpbGVudCoKKy1zdwlndWlfeDExLnR4dAkvKi1zdyoKKy10CXN0YXJ0aW5nLnR4dAkvKi10KgorLXRhZwlzdGFydGluZy50eHQJLyotdGFnKgorLXUJc3RhcnRpbmcudHh0CS8qLXUqCistdWwJZ3VpX3gxMS50eHQJLyotdWwqCistdW5yZWdpc3RlcglpZl9vbGUudHh0CS8qLXVucmVnaXN0ZXIqCistdglzdGFydGluZy50eHQJLyotdioKKy12aW0Jc3RhcnRpbmcudHh0CS8qLXZpbSoKKy13CXN0YXJ0aW5nLnR4dAkvKi13KgorLXdfbnIJc3RhcnRpbmcudHh0CS8qLXdfbnIqCisteAlzdGFydGluZy50eHQJLyoteCoKKy14cm0JZ3VpX3gxMS50eHQJLyoteHJtKgorLXkJc3RhcnRpbmcudHh0CS8qLXkqCisuCXJlcGVhdC50eHQJLyouKgorLlhkZWZhdWx0cwlndWlfeDExLnR4dAkvKi5YZGVmYXVsdHMqCisuZXhyYwlzdGFydGluZy50eHQJLyouZXhyYyoKKy5ndmltcmMJZ3VpLnR4dAkvKi5ndmltcmMqCisudmltcmMJc3RhcnRpbmcudHh0CS8qLnZpbXJjKgorLwlwYXR0ZXJuLnR4dAkvKlwvKgorLyQJcGF0dGVybi50eHQJLypcLyQqCisvLglwYXR0ZXJuLnR4dAkvKlwvLioKKy8vOwlwYXR0ZXJuLnR4dAkvKlwvXC87KgorLzxDUj4JcGF0dGVybi50eHQJLypcLzxDUj4qCisvW10JcGF0dGVybi50eHQJLypcL1tdKgorL1wJcGF0dGVybi50eHQJLypcL1xcKgorL1wkCXBhdHRlcm4udHh0CS8qXC9cXCQqCisvXCUjCXBhdHRlcm4udHh0CS8qXC9cXCUjKgorL1wlJAlwYXR0ZXJuLnR4dAkvKlwvXFwlJCoKKy9cJSgJcGF0dGVybi50eHQJLypcL1xcJSgqCisvXCUoXCkJcGF0dGVybi50eHQJLypcL1xcJShcXCkqCisvXCU8YwlwYXR0ZXJuLnR4dAkvKlwvXFwlPGMqCisvXCU8bAlwYXR0ZXJuLnR4dAkvKlwvXFwlPGwqCisvXCU8dglwYXR0ZXJuLnR4dAkvKlwvXFwlPHYqCisvXCU+YwlwYXR0ZXJuLnR4dAkvKlwvXFwlPmMqCisvXCU+bAlwYXR0ZXJuLnR4dAkvKlwvXFwlPmwqCisvXCU+dglwYXR0ZXJuLnR4dAkvKlwvXFwlPnYqCisvXCVbXQlwYXR0ZXJuLnR4dAkvKlwvXFwlW10qCisvXCVeCXBhdHRlcm4udHh0CS8qXC9cXCVeKgorL1wlYwlwYXR0ZXJuLnR4dAkvKlwvXFwlYyoKKy9cJWwJcGF0dGVybi50eHQJLypcL1xcJWwqCisvXCV2CXBhdHRlcm4udHh0CS8qXC9cXCV2KgorL1wmCXBhdHRlcm4udHh0CS8qXC9cXCYqCisvXCgJcGF0dGVybi50eHQJLypcL1xcKCoKKy9cKFwpCXBhdHRlcm4udHh0CS8qXC9cXChcXCkqCisvXCkJcGF0dGVybi50eHQJLypcL1xcKSoKKy9cKwlwYXR0ZXJuLnR4dAkvKlwvXFwrKgorL1wuCXBhdHRlcm4udHh0CS8qXC9cXC4qCisvXDEJcGF0dGVybi50eHQJLypcL1xcMSoKKy9cMglwYXR0ZXJuLnR4dAkvKlwvXFwyKgorL1wzCXBhdHRlcm4udHh0CS8qXC9cXDMqCisvXDkJcGF0dGVybi50eHQJLypcL1xcOSoKKy9cPAlwYXR0ZXJuLnR4dAkvKlwvXFw8KgorL1w9CXBhdHRlcm4udHh0CS8qXC9cXD0qCisvXD4JcGF0dGVybi50eHQJLypcL1xcPioKKy9cPwlwYXR0ZXJuLnR4dAkvKlwvXFw/KgorL1xAIQlwYXR0ZXJuLnR4dAkvKlwvXFxAISoKKy9cQDwhCXBhdHRlcm4udHh0CS8qXC9cXEA8ISoKKy9cQDw9CXBhdHRlcm4udHh0CS8qXC9cXEA8PSoKKy9cQD0JcGF0dGVybi50eHQJLypcL1xcQD0qCisvXEA+CXBhdHRlcm4udHh0CS8qXC9cXEA+KgorL1xBCXBhdHRlcm4udHh0CS8qXC9cXEEqCisvXEMJcGF0dGVybi50eHQJLypcL1xcQyoKKy9cRAlwYXR0ZXJuLnR4dAkvKlwvXFxEKgorL1xGCXBhdHRlcm4udHh0CS8qXC9cXEYqCisvXEgJcGF0dGVybi50eHQJLypcL1xcSCoKKy9cSQlwYXR0ZXJuLnR4dAkvKlwvXFxJKgorL1xLCXBhdHRlcm4udHh0CS8qXC9cXEsqCisvXEwJcGF0dGVybi50eHQJLypcL1xcTCoKKy9cTQlwYXR0ZXJuLnR4dAkvKlwvXFxNKgorL1xPCXBhdHRlcm4udHh0CS8qXC9cXE8qCisvXFAJcGF0dGVybi50eHQJLypcL1xcUCoKKy9cUwlwYXR0ZXJuLnR4dAkvKlwvXFxTKgorL1xVCXBhdHRlcm4udHh0CS8qXC9cXFUqCisvXFYJcGF0dGVybi50eHQJLypcL1xcVioKKy9cVwlwYXR0ZXJuLnR4dAkvKlwvXFxXKgorL1xYCXBhdHRlcm4udHh0CS8qXC9cXFgqCisvXFoJcGF0dGVybi50eHQJLypcL1xcWioKKy9cW10JcGF0dGVybi50eHQJLypcL1xcW10qCisvXFwJcGF0dGVybi50eHQJLypcL1xcXFwqCisvXF0JcGF0dGVybi50eHQJLypcL1xcXSoKKy9cXglwYXR0ZXJuLnR4dAkvKlwvXFxeKgorL1xfCXBhdHRlcm4udHh0CS8qXC9cXF8qCisvXF8kCXBhdHRlcm4udHh0CS8qXC9cXF8kKgorL1xfLglwYXR0ZXJuLnR4dAkvKlwvXFxfLioKKy9cX0EJcGF0dGVybi50eHQJLypcL1xcX0EqCisvXF9ECXBhdHRlcm4udHh0CS8qXC9cXF9EKgorL1xfRglwYXR0ZXJuLnR4dAkvKlwvXFxfRioKKy9cX0gJcGF0dGVybi50eHQJLypcL1xcX0gqCisvXF9JCXBhdHRlcm4udHh0CS8qXC9cXF9JKgorL1xfSwlwYXR0ZXJuLnR4dAkvKlwvXFxfSyoKKy9cX0wJcGF0dGVybi50eHQJLypcL1xcX0wqCisvXF9PCXBhdHRlcm4udHh0CS8qXC9cXF9PKgorL1xfUAlwYXR0ZXJuLnR4dAkvKlwvXFxfUCoKKy9cX1MJcGF0dGVybi50eHQJLypcL1xcX1MqCisvXF9VCXBhdHRlcm4udHh0CS8qXC9cXF9VKgorL1xfVwlwYXR0ZXJuLnR4dAkvKlwvXFxfVyoKKy9cX1gJcGF0dGVybi50eHQJLypcL1xcX1gqCisvXF9bXQlwYXR0ZXJuLnR4dAkvKlwvXFxfW10qCisvXF9eCXBhdHRlcm4udHh0CS8qXC9cXF9eKgorL1xfYQlwYXR0ZXJuLnR4dAkvKlwvXFxfYSoKKy9cX2QJcGF0dGVybi50eHQJLypcL1xcX2QqCisvXF9mCXBhdHRlcm4udHh0CS8qXC9cXF9mKgorL1xfaAlwYXR0ZXJuLnR4dAkvKlwvXFxfaCoKKy9cX2kJcGF0dGVybi50eHQJLypcL1xcX2kqCisvXF9rCXBhdHRlcm4udHh0CS8qXC9cXF9rKgorL1xfbAlwYXR0ZXJuLnR4dAkvKlwvXFxfbCoKKy9cX28JcGF0dGVybi50eHQJLypcL1xcX28qCisvXF9wCXBhdHRlcm4udHh0CS8qXC9cXF9wKgorL1xfcwlwYXR0ZXJuLnR4dAkvKlwvXFxfcyoKKy9cX3UJcGF0dGVybi50eHQJLypcL1xcX3UqCisvXF93CXBhdHRlcm4udHh0CS8qXC9cXF93KgorL1xfeAlwYXR0ZXJuLnR4dAkvKlwvXFxfeCoKKy9cYQlwYXR0ZXJuLnR4dAkvKlwvXFxhKgorL1xiCXBhdHRlcm4udHh0CS8qXC9cXGIqCisvXGJhcglwYXR0ZXJuLnR4dAkvKlwvXFxiYXIqCisvXGMJcGF0dGVybi50eHQJLypcL1xcYyoKKy9cZAlwYXR0ZXJuLnR4dAkvKlwvXFxkKgorL1xlCXBhdHRlcm4udHh0CS8qXC9cXGUqCisvXGYJcGF0dGVybi50eHQJLypcL1xcZioKKy9caAlwYXR0ZXJuLnR4dAkvKlwvXFxoKgorL1xpCXBhdHRlcm4udHh0CS8qXC9cXGkqCisvXGsJcGF0dGVybi50eHQJLypcL1xcayoKKy9cbAlwYXR0ZXJuLnR4dAkvKlwvXFxsKgorL1xtCXBhdHRlcm4udHh0CS8qXC9cXG0qCisvXG4JcGF0dGVybi50eHQJLypcL1xcbioKKy9cbwlwYXR0ZXJuLnR4dAkvKlwvXFxvKgorL1xwCXBhdHRlcm4udHh0CS8qXC9cXHAqCisvXHIJcGF0dGVybi50eHQJLypcL1xccioKKy9ccwlwYXR0ZXJuLnR4dAkvKlwvXFxzKgorL1xzdGFyCXBhdHRlcm4udHh0CS8qXC9cXHN0YXIqCisvXHQJcGF0dGVybi50eHQJLypcL1xcdCoKKy9cdQlwYXR0ZXJuLnR4dAkvKlwvXFx1KgorL1x2CXBhdHRlcm4udHh0CS8qXC9cXHYqCisvXHcJcGF0dGVybi50eHQJLypcL1xcdyoKKy9ceAlwYXR0ZXJuLnR4dAkvKlwvXFx4KgorL1x6KAlzeW50YXgudHh0CS8qXC9cXHooKgorL1x6KFwpCXN5bnRheC50eHQJLypcL1xceihcXCkqCisvXHoxCXN5bnRheC50eHQJLypcL1xcejEqCisvXHoyCXN5bnRheC50eHQJLypcL1xcejIqCisvXHozCXN5bnRheC50eHQJLypcL1xcejMqCisvXHo0CXN5bnRheC50eHQJLypcL1xcejQqCisvXHo1CXN5bnRheC50eHQJLypcL1xcejUqCisvXHo2CXN5bnRheC50eHQJLypcL1xcejYqCisvXHo3CXN5bnRheC50eHQJLypcL1xcejcqCisvXHo4CXN5bnRheC50eHQJLypcL1xcejgqCisvXHo5CXN5bnRheC50eHQJLypcL1xcejkqCisvXHplCXBhdHRlcm4udHh0CS8qXC9cXHplKgorL1x6cwlwYXR0ZXJuLnR4dAkvKlwvXFx6cyoKKy9cewlwYXR0ZXJuLnR4dAkvKlwvXFx7KgorL1x7LQlwYXR0ZXJuLnR4dAkvKlwvXFx7LSoKKy9cfglwYXR0ZXJuLnR4dAkvKlwvXFx+KgorL14JcGF0dGVybi50eHQJLypcL14qCisvYXRvbQlwYXR0ZXJuLnR4dAkvKlwvYXRvbSoKKy9iYXIJcGF0dGVybi50eHQJLypcL2JhcioKKy9icmFuY2gJcGF0dGVybi50eHQJLypcL2JyYW5jaCoKKy9jb2xsZWN0aW9uCXBhdHRlcm4udHh0CS8qXC9jb2xsZWN0aW9uKgorL2NvbmNhdAlwYXR0ZXJuLnR4dAkvKlwvY29uY2F0KgorL2R5bgl2YXJpb3VzLnR4dAkvKlwvZHluKgorL2lnbm9yZWNhc2UJcGF0dGVybi50eHQJLypcL2lnbm9yZWNhc2UqCisvbWFnaWMJcGF0dGVybi50eHQJLypcL21hZ2ljKgorL211bHRpCXBhdHRlcm4udHh0CS8qXC9tdWx0aSoKKy9vcmRpbmFyeS1hdG9tCXBhdHRlcm4udHh0CS8qXC9vcmRpbmFyeS1hdG9tKgorL3BhdHRlcm4JcGF0dGVybi50eHQJLypcL3BhdHRlcm4qCisvcGllY2UJcGF0dGVybi50eHQJLypcL3BpZWNlKgorL3N0YXIJcGF0dGVybi50eHQJLypcL3N0YXIqCisvemVyby13aWR0aAlwYXR0ZXJuLnR4dAkvKlwvemVyby13aWR0aCoKKy9+CXBhdHRlcm4udHh0CS8qXC9+KgorMAltb3Rpb24udHh0CS8qMCoKKzAxLjEJdXNyXzAxLnR4dAkvKjAxLjEqCiswMS4yCXVzcl8wMS50eHQJLyowMS4yKgorMDEuMwl1c3JfMDEudHh0CS8qMDEuMyoKKzAxLjQJdXNyXzAxLnR4dAkvKjAxLjQqCiswMi4xCXVzcl8wMi50eHQJLyowMi4xKgorMDIuMgl1c3JfMDIudHh0CS8qMDIuMioKKzAyLjMJdXNyXzAyLnR4dAkvKjAyLjMqCiswMi40CXVzcl8wMi50eHQJLyowMi40KgorMDIuNQl1c3JfMDIudHh0CS8qMDIuNSoKKzAyLjYJdXNyXzAyLnR4dAkvKjAyLjYqCiswMi43CXVzcl8wMi50eHQJLyowMi43KgorMDIuOAl1c3JfMDIudHh0CS8qMDIuOCoKKzAzLjEJdXNyXzAzLnR4dAkvKjAzLjEqCiswMy4xMAl1c3JfMDMudHh0CS8qMDMuMTAqCiswMy4yCXVzcl8wMy50eHQJLyowMy4yKgorMDMuMwl1c3JfMDMudHh0CS8qMDMuMyoKKzAzLjQJdXNyXzAzLnR4dAkvKjAzLjQqCiswMy41CXVzcl8wMy50eHQJLyowMy41KgorMDMuNgl1c3JfMDMudHh0CS8qMDMuNioKKzAzLjcJdXNyXzAzLnR4dAkvKjAzLjcqCiswMy44CXVzcl8wMy50eHQJLyowMy44KgorMDMuOQl1c3JfMDMudHh0CS8qMDMuOSoKKzA0LjEJdXNyXzA0LnR4dAkvKjA0LjEqCiswNC4xMAl1c3JfMDQudHh0CS8qMDQuMTAqCiswNC4yCXVzcl8wNC50eHQJLyowNC4yKgorMDQuMwl1c3JfMDQudHh0CS8qMDQuMyoKKzA0LjQJdXNyXzA0LnR4dAkvKjA0LjQqCiswNC41CXVzcl8wNC50eHQJLyowNC41KgorMDQuNgl1c3JfMDQudHh0CS8qMDQuNioKKzA0LjcJdXNyXzA0LnR4dAkvKjA0LjcqCiswNC44CXVzcl8wNC50eHQJLyowNC44KgorMDQuOQl1c3JfMDQudHh0CS8qMDQuOSoKKzA1LjEJdXNyXzA1LnR4dAkvKjA1LjEqCiswNS4yCXVzcl8wNS50eHQJLyowNS4yKgorMDUuMwl1c3JfMDUudHh0CS8qMDUuMyoKKzA1LjQJdXNyXzA1LnR4dAkvKjA1LjQqCiswNS41CXVzcl8wNS50eHQJLyowNS41KgorMDUuNgl1c3JfMDUudHh0CS8qMDUuNioKKzA1LjcJdXNyXzA1LnR4dAkvKjA1LjcqCiswNi4xCXVzcl8wNi50eHQJLyowNi4xKgorMDYuMgl1c3JfMDYudHh0CS8qMDYuMioKKzA2LjMJdXNyXzA2LnR4dAkvKjA2LjMqCiswNi40CXVzcl8wNi50eHQJLyowNi40KgorMDYuNQl1c3JfMDYudHh0CS8qMDYuNSoKKzA2LjYJdXNyXzA2LnR4dAkvKjA2LjYqCiswNy4xCXVzcl8wNy50eHQJLyowNy4xKgorMDcuMgl1c3JfMDcudHh0CS8qMDcuMioKKzA3LjMJdXNyXzA3LnR4dAkvKjA3LjMqCiswNy40CXVzcl8wNy50eHQJLyowNy40KgorMDcuNQl1c3JfMDcudHh0CS8qMDcuNSoKKzA3LjYJdXNyXzA3LnR4dAkvKjA3LjYqCiswNy43CXVzcl8wNy50eHQJLyowNy43KgorMDguMQl1c3JfMDgudHh0CS8qMDguMSoKKzA4LjIJdXNyXzA4LnR4dAkvKjA4LjIqCiswOC4zCXVzcl8wOC50eHQJLyowOC4zKgorMDguNAl1c3JfMDgudHh0CS8qMDguNCoKKzA4LjUJdXNyXzA4LnR4dAkvKjA4LjUqCiswOC42CXVzcl8wOC50eHQJLyowOC42KgorMDguNwl1c3JfMDgudHh0CS8qMDguNyoKKzA4LjgJdXNyXzA4LnR4dAkvKjA4LjgqCiswOS4xCXVzcl8wOS50eHQJLyowOS4xKgorMDkuMgl1c3JfMDkudHh0CS8qMDkuMioKKzA5LjMJdXNyXzA5LnR4dAkvKjA5LjMqCiswOS40CXVzcl8wOS50eHQJLyowOS40KgorMTAuMQl1c3JfMTAudHh0CS8qMTAuMSoKKzEwLjIJdXNyXzEwLnR4dAkvKjEwLjIqCisxMC4zCXVzcl8xMC50eHQJLyoxMC4zKgorMTAuNAl1c3JfMTAudHh0CS8qMTAuNCoKKzEwLjUJdXNyXzEwLnR4dAkvKjEwLjUqCisxMC42CXVzcl8xMC50eHQJLyoxMC42KgorMTAuNwl1c3JfMTAudHh0CS8qMTAuNyoKKzEwLjgJdXNyXzEwLnR4dAkvKjEwLjgqCisxMC45CXVzcl8xMC50eHQJLyoxMC45KgorMTEuMQl1c3JfMTEudHh0CS8qMTEuMSoKKzExLjIJdXNyXzExLnR4dAkvKjExLjIqCisxMS4zCXVzcl8xMS50eHQJLyoxMS4zKgorMTEuNAl1c3JfMTEudHh0CS8qMTEuNCoKKzEyLjEJdXNyXzEyLnR4dAkvKjEyLjEqCisxMi4yCXVzcl8xMi50eHQJLyoxMi4yKgorMTIuMwl1c3JfMTIudHh0CS8qMTIuMyoKKzEyLjQJdXNyXzEyLnR4dAkvKjEyLjQqCisxMi41CXVzcl8xMi50eHQJLyoxMi41KgorMTIuNgl1c3JfMTIudHh0CS8qMTIuNioKKzEyLjcJdXNyXzEyLnR4dAkvKjEyLjcqCisxMi44CXVzcl8xMi50eHQJLyoxMi44KgorMjAuMQl1c3JfMjAudHh0CS8qMjAuMSoKKzIwLjIJdXNyXzIwLnR4dAkvKjIwLjIqCisyMC4zCXVzcl8yMC50eHQJLyoyMC4zKgorMjAuNAl1c3JfMjAudHh0CS8qMjAuNCoKKzIwLjUJdXNyXzIwLnR4dAkvKjIwLjUqCisyMS4xCXVzcl8yMS50eHQJLyoyMS4xKgorMjEuMgl1c3JfMjEudHh0CS8qMjEuMioKKzIxLjMJdXNyXzIxLnR4dAkvKjIxLjMqCisyMS40CXVzcl8yMS50eHQJLyoyMS40KgorMjEuNQl1c3JfMjEudHh0CS8qMjEuNSoKKzIxLjYJdXNyXzIxLnR4dAkvKjIxLjYqCisyMi4xCXVzcl8yMi50eHQJLyoyMi4xKgorMjIuMgl1c3JfMjIudHh0CS8qMjIuMioKKzIyLjMJdXNyXzIyLnR4dAkvKjIyLjMqCisyMi40CXVzcl8yMi50eHQJLyoyMi40KgorMjMuMQl1c3JfMjMudHh0CS8qMjMuMSoKKzIzLjIJdXNyXzIzLnR4dAkvKjIzLjIqCisyMy4zCXVzcl8yMy50eHQJLyoyMy4zKgorMjMuNAl1c3JfMjMudHh0CS8qMjMuNCoKKzIzLjUJdXNyXzIzLnR4dAkvKjIzLjUqCisyNC4xCXVzcl8yNC50eHQJLyoyNC4xKgorMjQuMTAJdXNyXzI0LnR4dAkvKjI0LjEwKgorMjQuMgl1c3JfMjQudHh0CS8qMjQuMioKKzI0LjMJdXNyXzI0LnR4dAkvKjI0LjMqCisyNC40CXVzcl8yNC50eHQJLyoyNC40KgorMjQuNQl1c3JfMjQudHh0CS8qMjQuNSoKKzI0LjYJdXNyXzI0LnR4dAkvKjI0LjYqCisyNC43CXVzcl8yNC50eHQJLyoyNC43KgorMjQuOAl1c3JfMjQudHh0CS8qMjQuOCoKKzI0LjkJdXNyXzI0LnR4dAkvKjI0LjkqCisyNS4xCXVzcl8yNS50eHQJLyoyNS4xKgorMjUuMgl1c3JfMjUudHh0CS8qMjUuMioKKzI1LjMJdXNyXzI1LnR4dAkvKjI1LjMqCisyNS40CXVzcl8yNS50eHQJLyoyNS40KgorMjUuNQl1c3JfMjUudHh0CS8qMjUuNSoKKzI2LjEJdXNyXzI2LnR4dAkvKjI2LjEqCisyNi4yCXVzcl8yNi50eHQJLyoyNi4yKgorMjYuMwl1c3JfMjYudHh0CS8qMjYuMyoKKzI2LjQJdXNyXzI2LnR4dAkvKjI2LjQqCisyNy4xCXVzcl8yNy50eHQJLyoyNy4xKgorMjcuMgl1c3JfMjcudHh0CS8qMjcuMioKKzI3LjMJdXNyXzI3LnR4dAkvKjI3LjMqCisyNy40CXVzcl8yNy50eHQJLyoyNy40KgorMjcuNQl1c3JfMjcudHh0CS8qMjcuNSoKKzI3LjYJdXNyXzI3LnR4dAkvKjI3LjYqCisyNy43CXVzcl8yNy50eHQJLyoyNy43KgorMjcuOAl1c3JfMjcudHh0CS8qMjcuOCoKKzI3LjkJdXNyXzI3LnR4dAkvKjI3LjkqCisyOC4xCXVzcl8yOC50eHQJLyoyOC4xKgorMjguMTAJdXNyXzI4LnR4dAkvKjI4LjEwKgorMjguMgl1c3JfMjgudHh0CS8qMjguMioKKzI4LjMJdXNyXzI4LnR4dAkvKjI4LjMqCisyOC40CXVzcl8yOC50eHQJLyoyOC40KgorMjguNQl1c3JfMjgudHh0CS8qMjguNSoKKzI4LjYJdXNyXzI4LnR4dAkvKjI4LjYqCisyOC43CXVzcl8yOC50eHQJLyoyOC43KgorMjguOAl1c3JfMjgudHh0CS8qMjguOCoKKzI4LjkJdXNyXzI4LnR4dAkvKjI4LjkqCisyOS4xCXVzcl8yOS50eHQJLyoyOS4xKgorMjkuMgl1c3JfMjkudHh0CS8qMjkuMioKKzI5LjMJdXNyXzI5LnR4dAkvKjI5LjMqCisyOS40CXVzcl8yOS50eHQJLyoyOS40KgorMjkuNQl1c3JfMjkudHh0CS8qMjkuNSoKKzJodG1sLnZpbQlzeW50YXgudHh0CS8qMmh0bWwudmltKgorMzAuMQl1c3JfMzAudHh0CS8qMzAuMSoKKzMwLjIJdXNyXzMwLnR4dAkvKjMwLjIqCiszMC4zCXVzcl8zMC50eHQJLyozMC4zKgorMzAuNAl1c3JfMzAudHh0CS8qMzAuNCoKKzMwLjUJdXNyXzMwLnR4dAkvKjMwLjUqCiszMC42CXVzcl8zMC50eHQJLyozMC42KgorMzEuMQl1c3JfMzEudHh0CS8qMzEuMSoKKzMxLjIJdXNyXzMxLnR4dAkvKjMxLjIqCiszMS4zCXVzcl8zMS50eHQJLyozMS4zKgorMzEuNAl1c3JfMzEudHh0CS8qMzEuNCoKKzMxLjUJdXNyXzMxLnR4dAkvKjMxLjUqCis0MC4xCXVzcl80MC50eHQJLyo0MC4xKgorNDAuMgl1c3JfNDAudHh0CS8qNDAuMioKKzQwLjMJdXNyXzQwLnR4dAkvKjQwLjMqCis0MS4xCXVzcl80MS50eHQJLyo0MS4xKgorNDEuMTAJdXNyXzQxLnR4dAkvKjQxLjEwKgorNDEuMTEJdXNyXzQxLnR4dAkvKjQxLjExKgorNDEuMTIJdXNyXzQxLnR4dAkvKjQxLjEyKgorNDEuMgl1c3JfNDEudHh0CS8qNDEuMioKKzQxLjMJdXNyXzQxLnR4dAkvKjQxLjMqCis0MS40CXVzcl80MS50eHQJLyo0MS40KgorNDEuNQl1c3JfNDEudHh0CS8qNDEuNSoKKzQxLjYJdXNyXzQxLnR4dAkvKjQxLjYqCis0MS43CXVzcl80MS50eHQJLyo0MS43KgorNDEuOAl1c3JfNDEudHh0CS8qNDEuOCoKKzQxLjkJdXNyXzQxLnR4dAkvKjQxLjkqCis0Mgl1c3JfNDIudHh0CS8qNDIqCis0Mi4xCXVzcl80Mi50eHQJLyo0Mi4xKgorNDIuMgl1c3JfNDIudHh0CS8qNDIuMioKKzQyLjMJdXNyXzQyLnR4dAkvKjQyLjMqCis0Mi40CXVzcl80Mi50eHQJLyo0Mi40KgorNDMuMQl1c3JfNDMudHh0CS8qNDMuMSoKKzQzLjIJdXNyXzQzLnR4dAkvKjQzLjIqCis0NC4xCXVzcl80NC50eHQJLyo0NC4xKgorNDQuMTAJdXNyXzQ0LnR4dAkvKjQ0LjEwKgorNDQuMTEJdXNyXzQ0LnR4dAkvKjQ0LjExKgorNDQuMTIJdXNyXzQ0LnR4dAkvKjQ0LjEyKgorNDQuMgl1c3JfNDQudHh0CS8qNDQuMioKKzQ0LjMJdXNyXzQ0LnR4dAkvKjQ0LjMqCis0NC40CXVzcl80NC50eHQJLyo0NC40KgorNDQuNQl1c3JfNDQudHh0CS8qNDQuNSoKKzQ0LjYJdXNyXzQ0LnR4dAkvKjQ0LjYqCis0NC43CXVzcl80NC50eHQJLyo0NC43KgorNDQuOAl1c3JfNDQudHh0CS8qNDQuOCoKKzQ0LjkJdXNyXzQ0LnR4dAkvKjQ0LjkqCis0NS4xCXVzcl80NS50eHQJLyo0NS4xKgorNDUuMgl1c3JfNDUudHh0CS8qNDUuMioKKzQ1LjMJdXNyXzQ1LnR4dAkvKjQ1LjMqCis0NS40CXVzcl80NS50eHQJLyo0NS40KgorNDUuNQl1c3JfNDUudHh0CS8qNDUuNSoKKzkwLjEJdXNyXzkwLnR4dAkvKjkwLjEqCis5MC4yCXVzcl85MC50eHQJLyo5MC4yKgorOTAuMwl1c3JfOTAudHh0CS8qOTAuMyoKKzkwLjQJdXNyXzkwLnR4dAkvKjkwLjQqCis5MC41CXVzcl85MC50eHQJLyo5MC41KgorOgljbWRsaW5lLnR4dAkvKjoqCis6IQl2YXJpb3VzLnR4dAkvKjohKgorOiEhCXZhcmlvdXMudHh0CS8qOiEhKgorOiFjbWQJdmFyaW91cy50eHQJLyo6IWNtZCoKKzohc3RhcnQJb3Nfd2luMzIudHh0CS8qOiFzdGFydCoKKzojCXZhcmlvdXMudHh0CS8qOiMqCis6JAljbWRsaW5lLnR4dAkvKjokKgorOiUJY21kbGluZS50eHQJLyo6JSoKKzomCWNoYW5nZS50eHQJLyo6JioKKzonCWNtZGxpbmUudHh0CS8qOicqCis6LAljbWRsaW5lLnR4dAkvKjosKgorOi4JY21kbGluZS50eHQJLyo6LioKKzovCWNtZGxpbmUudHh0CS8qOlwvKgorOjouCWNtZGxpbmUudHh0CS8qOjouKgorOjo4CWNtZGxpbmUudHh0CS8qOjo4KgorOjplCWNtZGxpbmUudHh0CS8qOjplKgorOjpncwljbWRsaW5lLnR4dAkvKjo6Z3MqCis6OmgJY21kbGluZS50eHQJLyo6OmgqCis6OnAJY21kbGluZS50eHQJLyo6OnAqCis6OnIJY21kbGluZS50eHQJLyo6OnIqCis6OnMJY21kbGluZS50eHQJLyo6OnMqCis6OnQJY21kbGluZS50eHQJLyo6OnQqCis6On4JY21kbGluZS50eHQJLyo6On4qCis6OwljbWRsaW5lLnR4dAkvKjo7KgorOjwJY2hhbmdlLnR4dAkvKjo8KgorOjxhYnVmPgljbWRsaW5lLnR4dAkvKjo8YWJ1Zj4qCis6PGFmaWxlPgljbWRsaW5lLnR4dAkvKjo8YWZpbGU+KgorOjxhbWF0Y2g+CWNtZGxpbmUudHh0CS8qOjxhbWF0Y2g+KgorOjxjV09SRD4JY21kbGluZS50eHQJLyo6PGNXT1JEPioKKzo8Y2ZpbGU+CWNtZGxpbmUudHh0CS8qOjxjZmlsZT4qCis6PGN3b3JkPgljbWRsaW5lLnR4dAkvKjo8Y3dvcmQ+KgorOjxzZmlsZT4JY21kbGluZS50eHQJLyo6PHNmaWxlPioKKzo9CXZhcmlvdXMudHh0CS8qOj0qCis6PgljaGFuZ2UudHh0CS8qOj4qCis6PwljbWRsaW5lLnR4dAkvKjo/KgorOkAJcmVwZWF0LnR4dAkvKjpAKgorOkA6CXJlcGVhdC50eHQJLyo6QDoqCis6QEAJcmVwZWF0LnR4dAkvKjpAQCoKKzpFeHBsb3JlCXBpX2V4cGwudHh0CS8qOkV4cGxvcmUqCis6TWFuCWZpbGV0eXBlLnR4dAkvKjpNYW4qCis6TgllZGl0aW5nLnR4dAkvKjpOKgorOk5leHQJZWRpdGluZy50eHQJLyo6TmV4dCoKKzpQCXZhcmlvdXMudHh0CS8qOlAqCis6UHJpbnQJdmFyaW91cy50eHQJLyo6UHJpbnQqCis6U2V4cGxvcmUJcGlfZXhwbC50eHQJLyo6U2V4cGxvcmUqCis6VE9odG1sCXN5bnRheC50eHQJLyo6VE9odG1sKgorOlgJZWRpdGluZy50eHQJLyo6WCoKKzpcYmFyCWNtZGxpbmUudHh0CS8qOlxcYmFyKgorOl8hCWNtZGxpbmUudHh0CS8qOl8hKgorOl8jCWNtZGxpbmUudHh0CS8qOl8jKgorOl8jIwljbWRsaW5lLnR4dAkvKjpfIyMqCis6XyUJY21kbGluZS50eHQJLyo6XyUqCis6XyU6CWNtZGxpbmUudHh0CS8qOl8lOioKKzpfJTwJY21kbGluZS50eHQJLyo6XyU8KgorOmEJaW5zZXJ0LnR4dAkvKjphKgorOmFiCW1hcC50eHQJLyo6YWIqCis6YWJicmV2aWF0ZQltYXAudHh0CS8qOmFiYnJldmlhdGUqCis6YWJicmV2aWF0ZS08YnVmZmVyPgltYXAudHh0CS8qOmFiYnJldmlhdGUtPGJ1ZmZlcj4qCis6YWJicmV2aWF0ZS1sb2NhbAltYXAudHh0CS8qOmFiYnJldmlhdGUtbG9jYWwqCis6YWJjCW1hcC50eHQJLyo6YWJjKgorOmFiY2xlYXIJbWFwLnR4dAkvKjphYmNsZWFyKgorOmFibwl3aW5kb3dzLnR4dAkvKjphYm8qCis6YWJvdmVsZWZ0CXdpbmRvd3MudHh0CS8qOmFib3ZlbGVmdCoKKzphbAl3aW5kb3dzLnR4dAkvKjphbCoKKzphbGwJd2luZG93cy50eHQJLyo6YWxsKgorOmFtCWd1aS50eHQJLyo6YW0qCis6YW1lbnUJZ3VpLnR4dAkvKjphbWVudSoKKzphbglndWkudHh0CS8qOmFuKgorOmFub3JlbWVudQlndWkudHh0CS8qOmFub3JlbWVudSoKKzphcHBlbmQJaW5zZXJ0LnR4dAkvKjphcHBlbmQqCis6YXIJZWRpdGluZy50eHQJLyo6YXIqCis6YXJnYQllZGl0aW5nLnR4dAkvKjphcmdhKgorOmFyZ2FkZAllZGl0aW5nLnR4dAkvKjphcmdhZGQqCis6YXJnZAllZGl0aW5nLnR4dAkvKjphcmdkKgorOmFyZ2RlbGV0ZQllZGl0aW5nLnR4dAkvKjphcmdkZWxldGUqCis6YXJnZG8JZWRpdGluZy50eHQJLyo6YXJnZG8qCis6YXJnZQllZGl0aW5nLnR4dAkvKjphcmdlKgorOmFyZ2VkaXQJZWRpdGluZy50eHQJLyo6YXJnZWRpdCoKKzphcmdnbG9iYWwJZWRpdGluZy50eHQJLyo6YXJnZ2xvYmFsKgorOmFyZ2xvY2FsCWVkaXRpbmcudHh0CS8qOmFyZ2xvY2FsKgorOmFyZ3MJZWRpdGluZy50eHQJLyo6YXJncyoKKzphcmdzX2YJZWRpdGluZy50eHQJLyo6YXJnc19mKgorOmFyZ3NfZiEJZWRpdGluZy50eHQJLyo6YXJnc19mISoKKzphcmd1CWVkaXRpbmcudHh0CS8qOmFyZ3UqCis6YXJndW1lbnQJZWRpdGluZy50eHQJLyo6YXJndW1lbnQqCis6YXMJdmFyaW91cy50eHQJLyo6YXMqCis6YXNjaWkJdmFyaW91cy50eHQJLyo6YXNjaWkqCis6YXUJYXV0b2NtZC50eHQJLyo6YXUqCis6YXVnCWF1dG9jbWQudHh0CS8qOmF1ZyoKKzphdWdyb3VwCWF1dG9jbWQudHh0CS8qOmF1Z3JvdXAqCis6YXVncm91cC1kZWxldGUJYXV0b2NtZC50eHQJLyo6YXVncm91cC1kZWxldGUqCis6YXVuCWd1aS50eHQJLyo6YXVuKgorOmF1bm1lbnUJZ3VpLnR4dAkvKjphdW5tZW51KgorOmF1dG9jbWQJYXV0b2NtZC50eHQJLyo6YXV0b2NtZCoKKzpiCXdpbmRvd3MudHh0CS8qOmIqCis6Yk4Jd2luZG93cy50eHQJLyo6Yk4qCis6Yk5leHQJd2luZG93cy50eHQJLyo6Yk5leHQqCis6YmEJd2luZG93cy50eHQJLyo6YmEqCis6YmFkCXdpbmRvd3MudHh0CS8qOmJhZCoKKzpiYWRkCXdpbmRvd3MudHh0CS8qOmJhZGQqCis6YmFsbAl3aW5kb3dzLnR4dAkvKjpiYWxsKgorOmJhcgljbWRsaW5lLnR4dAkvKjpiYXIqCis6YmQJd2luZG93cy50eHQJLyo6YmQqCis6YmRlbAl3aW5kb3dzLnR4dAkvKjpiZGVsKgorOmJkZWxldGUJd2luZG93cy50eHQJLyo6YmRlbGV0ZSoKKzpiZQlndWkudHh0CS8qOmJlKgorOmJlaGF2ZQlndWkudHh0CS8qOmJlaGF2ZSoKKzpiZWwJd2luZG93cy50eHQJLyo6YmVsKgorOmJlbG93cmlnaHQJd2luZG93cy50eHQJLyo6YmVsb3dyaWdodCoKKzpiZgl3aW5kb3dzLnR4dAkvKjpiZioKKzpiZmlyc3QJd2luZG93cy50eHQJLyo6YmZpcnN0KgorOmJsCXdpbmRvd3MudHh0CS8qOmJsKgorOmJsYXN0CXdpbmRvd3MudHh0CS8qOmJsYXN0KgorOmJtCXdpbmRvd3MudHh0CS8qOmJtKgorOmJtb2RpZmllZAl3aW5kb3dzLnR4dAkvKjpibW9kaWZpZWQqCis6Ym4Jd2luZG93cy50eHQJLyo6Ym4qCis6Ym5leHQJd2luZG93cy50eHQJLyo6Ym5leHQqCis6Ym90cmlnaHQJd2luZG93cy50eHQJLyo6Ym90cmlnaHQqCis6YnAJd2luZG93cy50eHQJLyo6YnAqCis6YnByZXZpb3VzCXdpbmRvd3MudHh0CS8qOmJwcmV2aW91cyoKKzpicgl3aW5kb3dzLnR4dAkvKjpicioKKzpicmVhCWV2YWwudHh0CS8qOmJyZWEqCis6YnJlYWsJZXZhbC50eHQJLyo6YnJlYWsqCis6YnJlYWthCXJlcGVhdC50eHQJLyo6YnJlYWthKgorOmJyZWFrYWRkCXJlcGVhdC50eHQJLyo6YnJlYWthZGQqCis6YnJlYWtkCXJlcGVhdC50eHQJLyo6YnJlYWtkKgorOmJyZWFrZGVsCXJlcGVhdC50eHQJLyo6YnJlYWtkZWwqCis6YnJlYWtsCXJlcGVhdC50eHQJLyo6YnJlYWtsKgorOmJyZWFrbGlzdAlyZXBlYXQudHh0CS8qOmJyZWFrbGlzdCoKKzpicmV3aW5kCXdpbmRvd3MudHh0CS8qOmJyZXdpbmQqCis6YnJvCWVkaXRpbmcudHh0CS8qOmJybyoKKzpicm93c2UJZWRpdGluZy50eHQJLyo6YnJvd3NlKgorOmJyb3dzZS1zZXQJb3B0aW9ucy50eHQJLyo6YnJvd3NlLXNldCoKKzpidQl3aW5kb3dzLnR4dAkvKjpidSoKKzpidWYJd2luZG93cy50eHQJLyo6YnVmKgorOmJ1ZmRvCXdpbmRvd3MudHh0CS8qOmJ1ZmRvKgorOmJ1ZmZlcgl3aW5kb3dzLnR4dAkvKjpidWZmZXIqCis6YnVmZmVyLSEJd2luZG93cy50eHQJLyo6YnVmZmVyLSEqCis6YnVmZmVycwl3aW5kb3dzLnR4dAkvKjpidWZmZXJzKgorOmJ1bgl3aW5kb3dzLnR4dAkvKjpidW4qCis6YnVubG9hZAl3aW5kb3dzLnR4dAkvKjpidW5sb2FkKgorOmJ3CXdpbmRvd3MudHh0CS8qOmJ3KgorOmJ3aXBlCXdpbmRvd3MudHh0CS8qOmJ3aXBlKgorOmJ3aXBlb3V0CXdpbmRvd3MudHh0CS8qOmJ3aXBlb3V0KgorOmMJY2hhbmdlLnR4dAkvKjpjKgorOmNOCXF1aWNrZml4LnR4dAkvKjpjTioKKzpjTmV4dAlxdWlja2ZpeC50eHQJLyo6Y05leHQqCis6Y05mCXF1aWNrZml4LnR4dAkvKjpjTmYqCis6Y05maWxlCXF1aWNrZml4LnR4dAkvKjpjTmZpbGUqCis6Y2EJbWFwLnR4dAkvKjpjYSoKKzpjYWJicmV2CW1hcC50eHQJLyo6Y2FiYnJldioKKzpjYWJjCW1hcC50eHQJLyo6Y2FiYyoKKzpjYWJjbGVhcgltYXAudHh0CS8qOmNhYmNsZWFyKgorOmNhbAlldmFsLnR4dAkvKjpjYWwqCis6Y2FsbAlldmFsLnR4dAkvKjpjYWxsKgorOmNhdAlldmFsLnR4dAkvKjpjYXQqCis6Y2F0Y2gJZXZhbC50eHQJLyo6Y2F0Y2gqCis6Y2MJcXVpY2tmaXgudHh0CS8qOmNjKgorOmNjbAlxdWlja2ZpeC50eHQJLyo6Y2NsKgorOmNjbG9zZQlxdWlja2ZpeC50eHQJLyo6Y2Nsb3NlKgorOmNkCWVkaXRpbmcudHh0CS8qOmNkKgorOmNkLQllZGl0aW5nLnR4dAkvKjpjZC0qCis6Y2UJY2hhbmdlLnR4dAkvKjpjZSoKKzpjZW50ZXIJY2hhbmdlLnR4dAkvKjpjZW50ZXIqCis6Y2YJcXVpY2tmaXgudHh0CS8qOmNmKgorOmNmaWxlCXF1aWNrZml4LnR4dAkvKjpjZmlsZSoKKzpjZmlyCXF1aWNrZml4LnR4dAkvKjpjZmlyKgorOmNmaXJzdAlxdWlja2ZpeC50eHQJLyo6Y2ZpcnN0KgorOmNnCXF1aWNrZml4LnR4dAkvKjpjZyoKKzpjZ2V0ZmlsZQlxdWlja2ZpeC50eHQJLyo6Y2dldGZpbGUqCis6Y2gJY2hhbmdlLnR4dAkvKjpjaCoKKzpjaGFuZ2UJY2hhbmdlLnR4dAkvKjpjaGFuZ2UqCis6Y2hhbmdlcwltb3Rpb24udHh0CS8qOmNoYW5nZXMqCis6Y2hkCWVkaXRpbmcudHh0CS8qOmNoZCoKKzpjaGRpcgllZGl0aW5nLnR4dAkvKjpjaGRpcioKKzpjaGUJdGFnc3JjaC50eHQJLyo6Y2hlKgorOmNoZWNrcGF0aAl0YWdzcmNoLnR4dAkvKjpjaGVja3BhdGgqCis6Y2hlY2t0CWVkaXRpbmcudHh0CS8qOmNoZWNrdCoKKzpjaGVja3RpbWUJZWRpdGluZy50eHQJLyo6Y2hlY2t0aW1lKgorOmNsCXF1aWNrZml4LnR4dAkvKjpjbCoKKzpjbGEJcXVpY2tmaXgudHh0CS8qOmNsYSoKKzpjbGFzdAlxdWlja2ZpeC50eHQJLyo6Y2xhc3QqCis6Y2xpc3QJcXVpY2tmaXgudHh0CS8qOmNsaXN0KgorOmNsbwl3aW5kb3dzLnR4dAkvKjpjbG8qCis6Y2xvc2UJd2luZG93cy50eHQJLyo6Y2xvc2UqCis6Y20JbWFwLnR4dAkvKjpjbSoKKzpjbWFwCW1hcC50eHQJLyo6Y21hcCoKKzpjbWFwX2wJbWFwLnR4dAkvKjpjbWFwX2wqCis6Y21hcGMJbWFwLnR4dAkvKjpjbWFwYyoKKzpjbWFwY2xlYXIJbWFwLnR4dAkvKjpjbWFwY2xlYXIqCis6Y21lCWd1aS50eHQJLyo6Y21lKgorOmNtZW51CWd1aS50eHQJLyo6Y21lbnUqCis6Y24JcXVpY2tmaXgudHh0CS8qOmNuKgorOmNuZXcJcXVpY2tmaXgudHh0CS8qOmNuZXcqCis6Y25ld2VyCXF1aWNrZml4LnR4dAkvKjpjbmV3ZXIqCis6Y25leHQJcXVpY2tmaXgudHh0CS8qOmNuZXh0KgorOmNuZglxdWlja2ZpeC50eHQJLyo6Y25mKgorOmNuZmlsZQlxdWlja2ZpeC50eHQJLyo6Y25maWxlKgorOmNubwltYXAudHh0CS8qOmNubyoKKzpjbm9yZWEJbWFwLnR4dAkvKjpjbm9yZWEqCis6Y25vcmVhYmJyZXYJbWFwLnR4dAkvKjpjbm9yZWFiYnJldioKKzpjbm9yZW1hcAltYXAudHh0CS8qOmNub3JlbWFwKgorOmNub3JlbWUJZ3VpLnR4dAkvKjpjbm9yZW1lKgorOmNub3JlbWVudQlndWkudHh0CS8qOmNub3JlbWVudSoKKzpjbwljaGFuZ2UudHh0CS8qOmNvKgorOmNvbAlxdWlja2ZpeC50eHQJLyo6Y29sKgorOmNvbGRlcglxdWlja2ZpeC50eHQJLyo6Y29sZGVyKgorOmNvbG8Jc3ludGF4LnR4dAkvKjpjb2xvKgorOmNvbG9yc2NoZW1lCXN5bnRheC50eHQJLyo6Y29sb3JzY2hlbWUqCis6Y29tCW1hcC50eHQJLyo6Y29tKgorOmNvbWMJbWFwLnR4dAkvKjpjb21jKgorOmNvbWNsZWFyCW1hcC50eHQJLyo6Y29tY2xlYXIqCis6Y29tbWFuZAltYXAudHh0CS8qOmNvbW1hbmQqCis6Y29tbWFuZC1jb21wbGV0aW9uCW1hcC50eHQJLyo6Y29tbWFuZC1jb21wbGV0aW9uKgorOmNvbW1hbmQtY29tcGxldGlvbi1jdXN0b20JbWFwLnR4dAkvKjpjb21tYW5kLWNvbXBsZXRpb24tY3VzdG9tKgorOmNvbW1lbnQJZXZhbC50eHQJLyo6Y29tbWVudCoKKzpjb21wCXF1aWNrZml4LnR4dAkvKjpjb21wKgorOmNvbXBpbGVyCXF1aWNrZml4LnR4dAkvKjpjb21waWxlcioKKzpjb24JZXZhbC50eHQJLyo6Y29uKgorOmNvbmYJZWRpdGluZy50eHQJLyo6Y29uZioKKzpjb25maXJtCWVkaXRpbmcudHh0CS8qOmNvbmZpcm0qCis6Y29udGludWUJZXZhbC50eHQJLyo6Y29udGludWUqCis6Y29wZQlxdWlja2ZpeC50eHQJLyo6Y29wZSoKKzpjb3BlbglxdWlja2ZpeC50eHQJLyo6Y29wZW4qCis6Y29weQljaGFuZ2UudHh0CS8qOmNvcHkqCis6Y3AJcXVpY2tmaXgudHh0CS8qOmNwKgorOmNwZglxdWlja2ZpeC50eHQJLyo6Y3BmKgorOmNwZmlsZQlxdWlja2ZpeC50eHQJLyo6Y3BmaWxlKgorOmNwcmV2aW91cwlxdWlja2ZpeC50eHQJLyo6Y3ByZXZpb3VzKgorOmNxCXF1aWNrZml4LnR4dAkvKjpjcSoKKzpjcXVpdAlxdWlja2ZpeC50eHQJLyo6Y3F1aXQqCis6Y3IJcXVpY2tmaXgudHh0CS8qOmNyKgorOmNyZXdpbmQJcXVpY2tmaXgudHh0CS8qOmNyZXdpbmQqCis6Y3MJaWZfY3Njb3AudHh0CS8qOmNzKgorOmNzY29wZQlpZl9jc2NvcC50eHQJLyo6Y3Njb3BlKgorOmNzdGFnCWlmX2NzY29wLnR4dAkvKjpjc3RhZyoKKzpjdQltYXAudHh0CS8qOmN1KgorOmN1bmEJbWFwLnR4dAkvKjpjdW5hKgorOmN1bmFiYnJldgltYXAudHh0CS8qOmN1bmFiYnJldioKKzpjdW5tYXAJbWFwLnR4dAkvKjpjdW5tYXAqCis6Y3VubWUJZ3VpLnR4dAkvKjpjdW5tZSoKKzpjdW5tZW51CWd1aS50eHQJLyo6Y3VubWVudSoKKzpjdwlxdWlja2ZpeC50eHQJLyo6Y3cqCis6Y3dpbmRvdwlxdWlja2ZpeC50eHQJLyo6Y3dpbmRvdyoKKzpkCWNoYW5nZS50eHQJLyo6ZCoKKzpkZQljaGFuZ2UudHh0CS8qOmRlKgorOmRlYnVnCXJlcGVhdC50eHQJLyo6ZGVidWcqCis6ZGVidWdnCXJlcGVhdC50eHQJLyo6ZGVidWdnKgorOmRlYnVnZ3JlZWR5CXJlcGVhdC50eHQJLyo6ZGVidWdncmVlZHkqCis6ZGVsCWNoYW5nZS50eHQJLyo6ZGVsKgorOmRlbGMJbWFwLnR4dAkvKjpkZWxjKgorOmRlbGNvbW1hbmQJbWFwLnR4dAkvKjpkZWxjb21tYW5kKgorOmRlbGNyCXRvZG8udHh0CS8qOmRlbGNyKgorOmRlbGV0ZQljaGFuZ2UudHh0CS8qOmRlbGV0ZSoKKzpkZWxmCWV2YWwudHh0CS8qOmRlbGYqCis6ZGVsZnVuY3Rpb24JZXZhbC50eHQJLyo6ZGVsZnVuY3Rpb24qCis6ZGkJY2hhbmdlLnR4dAkvKjpkaSoKKzpkaWZmZwlkaWZmLnR4dAkvKjpkaWZmZyoKKzpkaWZmZ2V0CWRpZmYudHh0CS8qOmRpZmZnZXQqCis6ZGlmZnAJZGlmZi50eHQJLyo6ZGlmZnAqCis6ZGlmZnBhdGNoCWRpZmYudHh0CS8qOmRpZmZwYXRjaCoKKzpkaWZmcHUJZGlmZi50eHQJLyo6ZGlmZnB1KgorOmRpZmZwdXQJZGlmZi50eHQJLyo6ZGlmZnB1dCoKKzpkaWZmcwlkaWZmLnR4dAkvKjpkaWZmcyoKKzpkaWZmc3BsaXQJZGlmZi50eHQJLyo6ZGlmZnNwbGl0KgorOmRpZmZ0CWRpZmYudHh0CS8qOmRpZmZ0KgorOmRpZmZ0aGlzCWRpZmYudHh0CS8qOmRpZmZ0aGlzKgorOmRpZmZ1CWRpZmYudHh0CS8qOmRpZmZ1KgorOmRpZmZ1cGRhdGUJZGlmZi50eHQJLyo6ZGlmZnVwZGF0ZSoKKzpkaWcJZGlncmFwaC50eHQJLyo6ZGlnKgorOmRpZ3JhcGhzCWRpZ3JhcGgudHh0CS8qOmRpZ3JhcGhzKgorOmRpc3BsYXkJY2hhbmdlLnR4dAkvKjpkaXNwbGF5KgorOmRqCXRhZ3NyY2gudHh0CS8qOmRqKgorOmRqdW1wCXRhZ3NyY2gudHh0CS8qOmRqdW1wKgorOmRsCXRhZ3NyY2gudHh0CS8qOmRsKgorOmRsaXN0CXRhZ3NyY2gudHh0CS8qOmRsaXN0KgorOmRvCWF1dG9jbWQudHh0CS8qOmRvKgorOmRvYXUJYXV0b2NtZC50eHQJLyo6ZG9hdSoKKzpkb2F1dG9hCWF1dG9jbWQudHh0CS8qOmRvYXV0b2EqCis6ZG9hdXRvYWxsCWF1dG9jbWQudHh0CS8qOmRvYXV0b2FsbCoKKzpkb2F1dG9jbWQJYXV0b2NtZC50eHQJLyo6ZG9hdXRvY21kKgorOmRyCXdpbmRvd3MudHh0CS8qOmRyKgorOmRyb3AJd2luZG93cy50eHQJLyo6ZHJvcCoKKzpkcwl0YWdzcmNoLnR4dAkvKjpkcyoKKzpkc2VhcmNoCXRhZ3NyY2gudHh0CS8qOmRzZWFyY2gqCis6ZHNwCXRhZ3NyY2gudHh0CS8qOmRzcCoKKzpkc3BsaXQJdGFnc3JjaC50eHQJLyo6ZHNwbGl0KgorOmUJZWRpdGluZy50eHQJLyo6ZSoKKzplYwlldmFsLnR4dAkvKjplYyoKKzplY2hvCWV2YWwudHh0CS8qOmVjaG8qCis6ZWNob2UJZXZhbC50eHQJLyo6ZWNob2UqCis6ZWNob2VycglldmFsLnR4dAkvKjplY2hvZXJyKgorOmVjaG9oCWV2YWwudHh0CS8qOmVjaG9oKgorOmVjaG9obAlldmFsLnR4dAkvKjplY2hvaGwqCis6ZWNob20JZXZhbC50eHQJLyo6ZWNob20qCis6ZWNob21zZwlldmFsLnR4dAkvKjplY2hvbXNnKgorOmVjaG9uCWV2YWwudHh0CS8qOmVjaG9uKgorOmVkaXQJZWRpdGluZy50eHQJLyo6ZWRpdCoKKzplZGl0IQllZGl0aW5nLnR4dAkvKjplZGl0ISoKKzplZGl0IV9mCWVkaXRpbmcudHh0CS8qOmVkaXQhX2YqCis6ZWRpdF9mCWVkaXRpbmcudHh0CS8qOmVkaXRfZioKKzplbAlldmFsLnR4dAkvKjplbCoKKzplbHNlCWV2YWwudHh0CS8qOmVsc2UqCis6ZWxzZWkJZXZhbC50eHQJLyo6ZWxzZWkqCis6ZWxzZWlmCWV2YWwudHh0CS8qOmVsc2VpZioKKzplbQlndWkudHh0CS8qOmVtKgorOmVtZW51CWd1aS50eHQJLyo6ZW1lbnUqCis6ZW4JZXZhbC50eHQJLyo6ZW4qCis6ZW5kZglldmFsLnR4dAkvKjplbmRmKgorOmVuZGZ1bmN0aW9uCWV2YWwudHh0CS8qOmVuZGZ1bmN0aW9uKgorOmVuZGlmCWV2YWwudHh0CS8qOmVuZGlmKgorOmVuZHQJZXZhbC50eHQJLyo6ZW5kdCoKKzplbmR0cnkJZXZhbC50eHQJLyo6ZW5kdHJ5KgorOmVuZHcJZXZhbC50eHQJLyo6ZW5kdyoKKzplbmR3aGlsZQlldmFsLnR4dAkvKjplbmR3aGlsZSoKKzplbmUJZWRpdGluZy50eHQJLyo6ZW5lKgorOmVuZSEJZWRpdGluZy50eHQJLyo6ZW5lISoKKzplbmV3CWVkaXRpbmcudHh0CS8qOmVuZXcqCis6ZW5ldyEJZWRpdGluZy50eHQJLyo6ZW5ldyEqCis6ZXgJZWRpdGluZy50eHQJLyo6ZXgqCis6ZXhlCWV2YWwudHh0CS8qOmV4ZSoKKzpleGVjdXRlCWV2YWwudHh0CS8qOmV4ZWN1dGUqCis6ZXhpCWVkaXRpbmcudHh0CS8qOmV4aSoKKzpleGl0CWVkaXRpbmcudHh0CS8qOmV4aXQqCis6ZgllZGl0aW5nLnR4dAkvKjpmKgorOmZpCWVkaXRpbmcudHh0CS8qOmZpKgorOmZpbGUJZWRpdGluZy50eHQJLyo6ZmlsZSoKKzpmaWxlX2YJZWRpdGluZy50eHQJLyo6ZmlsZV9mKgorOmZpbGVuYW1lCWVkaXRpbmcudHh0CS8qOmZpbGVuYW1lKgorOmZpbGVzCXdpbmRvd3MudHh0CS8qOmZpbGVzKgorOmZpbGV0CWZpbGV0eXBlLnR4dAkvKjpmaWxldCoKKzpmaWxldHlwZQlmaWxldHlwZS50eHQJLyo6ZmlsZXR5cGUqCis6ZmlsZXR5cGUtaW5kZW50LW9mZglmaWxldHlwZS50eHQJLyo6ZmlsZXR5cGUtaW5kZW50LW9mZioKKzpmaWxldHlwZS1pbmRlbnQtb24JZmlsZXR5cGUudHh0CS8qOmZpbGV0eXBlLWluZGVudC1vbioKKzpmaWxldHlwZS1vZmYJZmlsZXR5cGUudHh0CS8qOmZpbGV0eXBlLW9mZioKKzpmaWxldHlwZS1vdmVydmlldwlmaWxldHlwZS50eHQJLyo6ZmlsZXR5cGUtb3ZlcnZpZXcqCis6ZmlsZXR5cGUtcGx1Z2luLW9mZglmaWxldHlwZS50eHQJLyo6ZmlsZXR5cGUtcGx1Z2luLW9mZioKKzpmaWxldHlwZS1wbHVnaW4tb24JZmlsZXR5cGUudHh0CS8qOmZpbGV0eXBlLXBsdWdpbi1vbioKKzpmaW4JZWRpdGluZy50eHQJLyo6ZmluKgorOmZpbmEJZXZhbC50eHQJLyo6ZmluYSoKKzpmaW5hbGx5CWV2YWwudHh0CS8qOmZpbmFsbHkqCis6ZmluZAllZGl0aW5nLnR4dAkvKjpmaW5kKgorOmZpbmkJcmVwZWF0LnR4dAkvKjpmaW5pKgorOmZpbmlzaAlyZXBlYXQudHh0CS8qOmZpbmlzaCoKKzpmaXIJZWRpdGluZy50eHQJLyo6ZmlyKgorOmZpcnN0CWVkaXRpbmcudHh0CS8qOmZpcnN0KgorOmZpeAlvcHRpb25zLnR4dAkvKjpmaXgqCis6Zml4ZGVsCW9wdGlvbnMudHh0CS8qOmZpeGRlbCoKKzpmbwlmb2xkLnR4dAkvKjpmbyoKKzpmb2xkCWZvbGQudHh0CS8qOmZvbGQqCis6Zm9sZGMJZm9sZC50eHQJLyo6Zm9sZGMqCis6Zm9sZGNsb3NlCWZvbGQudHh0CS8qOmZvbGRjbG9zZSoKKzpmb2xkZAlmb2xkLnR4dAkvKjpmb2xkZCoKKzpmb2xkZG9jCWZvbGQudHh0CS8qOmZvbGRkb2MqCis6Zm9sZGRvY2xvc2VkCWZvbGQudHh0CS8qOmZvbGRkb2Nsb3NlZCoKKzpmb2xkZG9vcGVuCWZvbGQudHh0CS8qOmZvbGRkb29wZW4qCis6Zm9sZG8JZm9sZC50eHQJLyo6Zm9sZG8qCis6Zm9sZG9wZW4JZm9sZC50eHQJLyo6Zm9sZG9wZW4qCis6ZnUJZXZhbC50eHQJLyo6ZnUqCis6ZnVuY3Rpb24JZXZhbC50eHQJLyo6ZnVuY3Rpb24qCis6ZwlyZXBlYXQudHh0CS8qOmcqCis6Z2xvYmFsCXJlcGVhdC50eHQJLyo6Z2xvYmFsKgorOmdvCW1vdGlvbi50eHQJLyo6Z28qCis6Z290bwltb3Rpb24udHh0CS8qOmdvdG8qCis6Z3IJcXVpY2tmaXgudHh0CS8qOmdyKgorOmdyZXAJcXVpY2tmaXgudHh0CS8qOmdyZXAqCis6Z3JlcGEJcXVpY2tmaXgudHh0CS8qOmdyZXBhKgorOmdyZXBhZGQJcXVpY2tmaXgudHh0CS8qOmdyZXBhZGQqCis6Z3UJZ3VpX3gxMS50eHQJLyo6Z3UqCis6Z3VpCWd1aV94MTEudHh0CS8qOmd1aSoKKzpndglndWlfeDExLnR4dAkvKjpndioKKzpndmltCWd1aV94MTEudHh0CS8qOmd2aW0qCis6aAl2YXJpb3VzLnR4dAkvKjpoKgorOmhhCXZhcmlvdXMudHh0CS8qOmhhKgorOmhhcmRjb3B5CXZhcmlvdXMudHh0CS8qOmhhcmRjb3B5KgorOmhlbHAJdmFyaW91cy50eHQJLyo6aGVscCoKKzpoZWxwZgl2YXJpb3VzLnR4dAkvKjpoZWxwZioKKzpoZWxwZmluZAl2YXJpb3VzLnR4dAkvKjpoZWxwZmluZCoKKzpoZWxwZwl2YXJpb3VzLnR4dAkvKjpoZWxwZyoKKzpoZWxwZ3JlcAl2YXJpb3VzLnR4dAkvKjpoZWxwZ3JlcCoKKzpoZWxwdAl2YXJpb3VzLnR4dAkvKjpoZWxwdCoKKzpoZWxwdGFncwl2YXJpb3VzLnR4dAkvKjpoZWxwdGFncyoKKzpoaQlzeW50YXgudHh0CS8qOmhpKgorOmhpLWRlZmF1bHQJc3ludGF4LnR4dAkvKjpoaS1kZWZhdWx0KgorOmhpLWxpbmsJc3ludGF4LnR4dAkvKjpoaS1saW5rKgorOmhpLW5vcm1hbAlzeW50YXgudHh0CS8qOmhpLW5vcm1hbCoKKzpoaS1ub3JtYWwtY3Rlcm0Jc3ludGF4LnR4dAkvKjpoaS1ub3JtYWwtY3Rlcm0qCis6aGlkZQl3aW5kb3dzLnR4dAkvKjpoaWRlKgorOmhpZ2hsaWdodAlzeW50YXgudHh0CS8qOmhpZ2hsaWdodCoKKzpoaWdobGlnaHQtZGVmYXVsdAlzeW50YXgudHh0CS8qOmhpZ2hsaWdodC1kZWZhdWx0KgorOmhpZ2hsaWdodC1saW5rCXN5bnRheC50eHQJLyo6aGlnaGxpZ2h0LWxpbmsqCis6aGlnaGxpZ2h0LW5vcm1hbAlzeW50YXgudHh0CS8qOmhpZ2hsaWdodC1ub3JtYWwqCis6aGlzdG9yeQljbWRsaW5lLnR4dAkvKjpoaXN0b3J5KgorOmhpc3RvcnktaW5kZXhpbmcJY21kbGluZS50eHQJLyo6aGlzdG9yeS1pbmRleGluZyoKKzppCWluc2VydC50eHQJLyo6aSoKKzppYQltYXAudHh0CS8qOmlhKgorOmlhYmJyZXYJbWFwLnR4dAkvKjppYWJicmV2KgorOmlhYmMJbWFwLnR4dAkvKjppYWJjKgorOmlhYmNsZWFyCW1hcC50eHQJLyo6aWFiY2xlYXIqCis6aWYJZXZhbC50eHQJLyo6aWYqCis6aWoJdGFnc3JjaC50eHQJLyo6aWoqCis6aWp1bXAJdGFnc3JjaC50eHQJLyo6aWp1bXAqCis6aWwJdGFnc3JjaC50eHQJLyo6aWwqCis6aWxpc3QJdGFnc3JjaC50eHQJLyo6aWxpc3QqCis6aW0JbWFwLnR4dAkvKjppbSoKKzppbWFwCW1hcC50eHQJLyo6aW1hcCoKKzppbWFwX2wJbWFwLnR4dAkvKjppbWFwX2wqCis6aW1hcGMJbWFwLnR4dAkvKjppbWFwYyoKKzppbWFwY2xlYXIJbWFwLnR4dAkvKjppbWFwY2xlYXIqCis6aW1lCWd1aS50eHQJLyo6aW1lKgorOmltZW51CWd1aS50eHQJLyo6aW1lbnUqCis6aW4JaW5zZXJ0LnR4dAkvKjppbioKKzppbmRleAlpbmRleC50eHQJLyo6aW5kZXgqCis6aW5vCW1hcC50eHQJLyo6aW5vKgorOmlub3JlYQltYXAudHh0CS8qOmlub3JlYSoKKzppbm9yZWFiYnJldgltYXAudHh0CS8qOmlub3JlYWJicmV2KgorOmlub3JlbWFwCW1hcC50eHQJLyo6aW5vcmVtYXAqCis6aW5vcmVtZQlndWkudHh0CS8qOmlub3JlbWUqCis6aW5vcmVtZW51CWd1aS50eHQJLyo6aW5vcmVtZW51KgorOmluc2VydAlpbnNlcnQudHh0CS8qOmluc2VydCoKKzppbnRybwlzdGFydGluZy50eHQJLyo6aW50cm8qCis6aXMJdGFnc3JjaC50eHQJLyo6aXMqCis6aXNlYXJjaAl0YWdzcmNoLnR4dAkvKjppc2VhcmNoKgorOmlzcAl0YWdzcmNoLnR4dAkvKjppc3AqCis6aXNwbGl0CXRhZ3NyY2gudHh0CS8qOmlzcGxpdCoKKzppdQltYXAudHh0CS8qOml1KgorOml1bmEJbWFwLnR4dAkvKjppdW5hKgorOml1bmFiYnJldgltYXAudHh0CS8qOml1bmFiYnJldioKKzppdW5tYXAJbWFwLnR4dAkvKjppdW5tYXAqCis6aXVubWUJZ3VpLnR4dAkvKjppdW5tZSoKKzppdW5tZW51CWd1aS50eHQJLyo6aXVubWVudSoKKzpqCWNoYW5nZS50eHQJLyo6aioKKzpqb2luCWNoYW5nZS50eHQJLyo6am9pbioKKzpqdQltb3Rpb24udHh0CS8qOmp1KgorOmp1bXBzCW1vdGlvbi50eHQJLyo6anVtcHMqCis6awltb3Rpb24udHh0CS8qOmsqCis6a2VlCW1vdGlvbi50eHQJLyo6a2VlKgorOmtlZXBqCW1vdGlvbi50eHQJLyo6a2VlcGoqCis6a2VlcGp1bXBzCW1vdGlvbi50eHQJLyo6a2VlcGp1bXBzKgorOmtlZXBtYXJrcwltb3Rpb24udHh0CS8qOmtlZXBtYXJrcyoKKzpsCXZhcmlvdXMudHh0CS8qOmwqCis6bGEJZWRpdGluZy50eHQJLyo6bGEqCis6bGFuCW1sYW5nLnR4dAkvKjpsYW4qCis6bGFuZwltbGFuZy50eHQJLyo6bGFuZyoKKzpsYW5ndWFnZQltbGFuZy50eHQJLyo6bGFuZ3VhZ2UqCis6bGFzdAllZGl0aW5nLnR4dAkvKjpsYXN0KgorOmxjCWVkaXRpbmcudHh0CS8qOmxjKgorOmxjZAllZGl0aW5nLnR4dAkvKjpsY2QqCis6bGNoCWVkaXRpbmcudHh0CS8qOmxjaCoKKzpsY2hkaXIJZWRpdGluZy50eHQJLyo6bGNoZGlyKgorOmxlCWNoYW5nZS50eHQJLyo6bGUqCis6bGVmdAljaGFuZ2UudHh0CS8qOmxlZnQqCis6bGVmdGEJd2luZG93cy50eHQJLyo6bGVmdGEqCis6bGVmdGFib3ZlCXdpbmRvd3MudHh0CS8qOmxlZnRhYm92ZSoKKzpsZXQJZXZhbC50eHQJLyo6bGV0KgorOmxldC0kCWV2YWwudHh0CS8qOmxldC0kKgorOmxldC1ACWV2YWwudHh0CS8qOmxldC1AKgorOmxldC1lbnZpcm9ubWVudAlldmFsLnR4dAkvKjpsZXQtZW52aXJvbm1lbnQqCis6bGV0LW9wdGlvbglldmFsLnR4dAkvKjpsZXQtb3B0aW9uKgorOmxldC1yZWdpc3RlcglldmFsLnR4dAkvKjpsZXQtcmVnaXN0ZXIqCis6bGV0LXN0YXIJZXZhbC50eHQJLyo6bGV0LXN0YXIqCis6bGlzdAl2YXJpb3VzLnR4dAkvKjpsaXN0KgorOmxtCW1hcC50eHQJLyo6bG0qCis6bG1hcAltYXAudHh0CS8qOmxtYXAqCis6bG1hcF9sCW1hcC50eHQJLyo6bG1hcF9sKgorOmxtYXBjCW1hcC50eHQJLyo6bG1hcGMqCis6bG1hcGNsZWFyCW1hcC50eHQJLyo6bG1hcGNsZWFyKgorOmxuCW1hcC50eHQJLyo6bG4qCis6bG5vcmVtYXAJbWFwLnR4dAkvKjpsbm9yZW1hcCoKKzpsbwlzdGFydGluZy50eHQJLyo6bG8qCis6bG9hZGsJbWJ5dGUudHh0CS8qOmxvYWRrKgorOmxvYWRrZXltYXAJbWJ5dGUudHh0CS8qOmxvYWRrZXltYXAqCis6bG9hZHZpZXcJc3RhcnRpbmcudHh0CS8qOmxvYWR2aWV3KgorOmxvYwltb3Rpb24udHh0CS8qOmxvYyoKKzpsb2NrbWFya3MJbW90aW9uLnR4dAkvKjpsb2NrbWFya3MqCis6bHMJd2luZG93cy50eHQJLyo6bHMqCis6bHUJbWFwLnR4dAkvKjpsdSoKKzpsdW5tYXAJbWFwLnR4dAkvKjpsdW5tYXAqCis6bQljaGFuZ2UudHh0CS8qOm0qCis6bWEJbW90aW9uLnR4dAkvKjptYSoKKzptYWsJcXVpY2tmaXgudHh0CS8qOm1hayoKKzptYWtlCXF1aWNrZml4LnR4dAkvKjptYWtlKgorOm1ha2VfbWFrZXByZwlxdWlja2ZpeC50eHQJLyo6bWFrZV9tYWtlcHJnKgorOm1hcAltYXAudHh0CS8qOm1hcCoKKzptYXAhCW1hcC50eHQJLyo6bWFwISoKKzptYXAtPGJ1ZmZlcj4JbWFwLnR4dAkvKjptYXAtPGJ1ZmZlcj4qCis6bWFwLTxzY3JpcHQ+CW1hcC50eHQJLyo6bWFwLTxzY3JpcHQ+KgorOm1hcC08c2lsZW50PgltYXAudHh0CS8qOm1hcC08c2lsZW50PioKKzptYXAtPHVuaXF1ZT4JbWFwLnR4dAkvKjptYXAtPHVuaXF1ZT4qCis6bWFwLWxvY2FsCW1hcC50eHQJLyo6bWFwLWxvY2FsKgorOm1hcC1zY3JpcHQJbWFwLnR4dAkvKjptYXAtc2NyaXB0KgorOm1hcC1zaWxlbnQJbWFwLnR4dAkvKjptYXAtc2lsZW50KgorOm1hcC1zcGVjaWFsLWtleXMJbWFwLnR4dAkvKjptYXAtc3BlY2lhbC1rZXlzKgorOm1hcC11bmRvCW1hcC50eHQJLyo6bWFwLXVuZG8qCis6bWFwX2wJbWFwLnR4dAkvKjptYXBfbCoKKzptYXBfbCEJbWFwLnR4dAkvKjptYXBfbCEqCis6bWFwYwltYXAudHh0CS8qOm1hcGMqCis6bWFwYyEJbWFwLnR4dAkvKjptYXBjISoKKzptYXBjbGVhcgltYXAudHh0CS8qOm1hcGNsZWFyKgorOm1hcGNsZWFyIQltYXAudHh0CS8qOm1hcGNsZWFyISoKKzptYXJrCW1vdGlvbi50eHQJLyo6bWFyayoKKzptYXJrcwltb3Rpb24udHh0CS8qOm1hcmtzKgorOm1hdAlwYXR0ZXJuLnR4dAkvKjptYXQqCis6bWF0Y2gJcGF0dGVybi50eHQJLyo6bWF0Y2gqCis6bWUJZ3VpLnR4dAkvKjptZSoKKzptZW51CWd1aS50eHQJLyo6bWVudSoKKzptZW51LTxzY3JpcHQ+CWd1aS50eHQJLyo6bWVudS08c2NyaXB0PioKKzptZW51LTxzaWxlbnQ+CWd1aS50eHQJLyo6bWVudS08c2lsZW50PioKKzptZW51LWRpc2FibGUJZ3VpLnR4dAkvKjptZW51LWRpc2FibGUqCis6bWVudS1lbmFibGUJZ3VpLnR4dAkvKjptZW51LWVuYWJsZSoKKzptZW51LXNjcmlwdAlndWkudHh0CS8qOm1lbnUtc2NyaXB0KgorOm1lbnUtc2lsZW50CWd1aS50eHQJLyo6bWVudS1zaWxlbnQqCis6bWVudXQJbWxhbmcudHh0CS8qOm1lbnV0KgorOm1lbnV0cmFucwltbGFuZy50eHQJLyo6bWVudXRyYW5zKgorOm1lbnV0cmFuc2xhdGUJbWxhbmcudHh0CS8qOm1lbnV0cmFuc2xhdGUqCis6bWVzCW1lc3NhZ2UudHh0CS8qOm1lcyoKKzptZXNzYWdlcwltZXNzYWdlLnR4dAkvKjptZXNzYWdlcyoKKzptawlzdGFydGluZy50eHQJLyo6bWsqCis6bWtleHJjCXN0YXJ0aW5nLnR4dAkvKjpta2V4cmMqCis6bWtzCXN0YXJ0aW5nLnR4dAkvKjpta3MqCis6bWtzZXNzaW9uCXN0YXJ0aW5nLnR4dAkvKjpta3Nlc3Npb24qCis6bWt2CXN0YXJ0aW5nLnR4dAkvKjpta3YqCis6bWt2aWUJc3RhcnRpbmcudHh0CS8qOm1rdmllKgorOm1rdmlldwlzdGFydGluZy50eHQJLyo6bWt2aWV3KgorOm1rdmltcmMJc3RhcnRpbmcudHh0CS8qOm1rdmltcmMqCis6bW8JY2hhbmdlLnR4dAkvKjptbyoKKzptb2QJdGVybS50eHQJLyo6bW9kKgorOm1vZGUJdGVybS50eHQJLyo6bW9kZSoKKzptb3ZlCWNoYW5nZS50eHQJLyo6bW92ZSoKKzpuCWVkaXRpbmcudHh0CS8qOm4qCis6bmUJZWRpdGluZy50eHQJLyo6bmUqCis6bmV3CXdpbmRvd3MudHh0CS8qOm5ldyoKKzpuZXh0CWVkaXRpbmcudHh0CS8qOm5leHQqCis6bmV4dF9mCWVkaXRpbmcudHh0CS8qOm5leHRfZioKKzpubQltYXAudHh0CS8qOm5tKgorOm5tYXAJbWFwLnR4dAkvKjpubWFwKgorOm5tYXBfbAltYXAudHh0CS8qOm5tYXBfbCoKKzpubWFwYwltYXAudHh0CS8qOm5tYXBjKgorOm5tYXBjbGVhcgltYXAudHh0CS8qOm5tYXBjbGVhcioKKzpubWUJZ3VpLnR4dAkvKjpubWUqCis6bm1lbnUJZ3VpLnR4dAkvKjpubWVudSoKKzpubgltYXAudHh0CS8qOm5uKgorOm5ub3JlbWFwCW1hcC50eHQJLyo6bm5vcmVtYXAqCis6bm5vcmVtZQlndWkudHh0CS8qOm5ub3JlbWUqCis6bm5vcmVtZW51CWd1aS50eHQJLyo6bm5vcmVtZW51KgorOm5vCW1hcC50eHQJLyo6bm8qCis6bm8hCW1hcC50eHQJLyo6bm8hKgorOm5vaAlwYXR0ZXJuLnR4dAkvKjpub2gqCis6bm9obHNlYXJjaAlwYXR0ZXJuLnR4dAkvKjpub2hsc2VhcmNoKgorOm5vcmVhCW1hcC50eHQJLyo6bm9yZWEqCis6bm9yZWFiYnJldgltYXAudHh0CS8qOm5vcmVhYmJyZXYqCis6bm9yZW1hcAltYXAudHh0CS8qOm5vcmVtYXAqCis6bm9yZW1hcCEJbWFwLnR4dAkvKjpub3JlbWFwISoKKzpub3JlbWUJZ3VpLnR4dAkvKjpub3JlbWUqCis6bm9yZW1lbnUJZ3VpLnR4dAkvKjpub3JlbWVudSoKKzpub3JtCXZhcmlvdXMudHh0CS8qOm5vcm0qCis6bm9ybWFsCXZhcmlvdXMudHh0CS8qOm5vcm1hbCoKKzpub3JtYWwtcmFuZ2UJdmFyaW91cy50eHQJLyo6bm9ybWFsLXJhbmdlKgorOm51CXZhcmlvdXMudHh0CS8qOm51KgorOm51bWJlcgl2YXJpb3VzLnR4dAkvKjpudW1iZXIqCis6bnVuCW1hcC50eHQJLyo6bnVuKgorOm51bm1hcAltYXAudHh0CS8qOm51bm1hcCoKKzpudW5tZQlndWkudHh0CS8qOm51bm1lKgorOm51bm1lbnUJZ3VpLnR4dAkvKjpudW5tZW51KgorOm8JdmlfZGlmZi50eHQJLyo6byoKKzpvbQltYXAudHh0CS8qOm9tKgorOm9tYXAJbWFwLnR4dAkvKjpvbWFwKgorOm9tYXBfbAltYXAudHh0CS8qOm9tYXBfbCoKKzpvbWFwYwltYXAudHh0CS8qOm9tYXBjKgorOm9tYXBjbGVhcgltYXAudHh0CS8qOm9tYXBjbGVhcioKKzpvbWUJZ3VpLnR4dAkvKjpvbWUqCis6b21lbnUJZ3VpLnR4dAkvKjpvbWVudSoKKzpvbgl3aW5kb3dzLnR4dAkvKjpvbioKKzpvbmx5CXdpbmRvd3MudHh0CS8qOm9ubHkqCis6b25vCW1hcC50eHQJLyo6b25vKgorOm9ub3JlbWFwCW1hcC50eHQJLyo6b25vcmVtYXAqCis6b25vcmVtZQlndWkudHh0CS8qOm9ub3JlbWUqCis6b25vcmVtZW51CWd1aS50eHQJLyo6b25vcmVtZW51KgorOm9wCXZpX2RpZmYudHh0CS8qOm9wKgorOm9wZW4JdmlfZGlmZi50eHQJLyo6b3BlbioKKzpvcHQJb3B0aW9ucy50eHQJLyo6b3B0KgorOm9wdGlvbnMJb3B0aW9ucy50eHQJLyo6b3B0aW9ucyoKKzpvdQltYXAudHh0CS8qOm91KgorOm91bm1hcAltYXAudHh0CS8qOm91bm1hcCoKKzpvdW5tZQlndWkudHh0CS8qOm91bm1lKgorOm91bm1lbnUJZ3VpLnR4dAkvKjpvdW5tZW51KgorOnAJdmFyaW91cy50eHQJLyo6cCoKKzpwYwl3aW5kb3dzLnR4dAkvKjpwYyoKKzpwY2xvc2UJd2luZG93cy50eHQJLyo6cGNsb3NlKgorOnBlCWlmX3BlcmwudHh0CS8qOnBlKgorOnBlZAl3aW5kb3dzLnR4dAkvKjpwZWQqCis6cGVkaXQJd2luZG93cy50eHQJLyo6cGVkaXQqCis6cGVybAlpZl9wZXJsLnR4dAkvKjpwZXJsKgorOnBlcmxkCWlmX3BlcmwudHh0CS8qOnBlcmxkKgorOnBlcmxkbwlpZl9wZXJsLnR4dAkvKjpwZXJsZG8qCis6cG8JdGFnc3JjaC50eHQJLyo6cG8qCis6cG9wCXRhZ3NyY2gudHh0CS8qOnBvcCoKKzpwb3B1CWd1aS50eHQJLyo6cG9wdSoKKzpwb3B1cAlndWkudHh0CS8qOnBvcHVwKgorOnBwCXdpbmRvd3MudHh0CS8qOnBwKgorOnBwb3AJd2luZG93cy50eHQJLyo6cHBvcCoKKzpwcgl2YXJpb3VzLnR4dAkvKjpwcioKKzpwcmUJcmVjb3Zlci50eHQJLyo6cHJlKgorOnByZXNlcnZlCXJlY292ZXIudHh0CS8qOnByZXNlcnZlKgorOnByZXYJZWRpdGluZy50eHQJLyo6cHJldioKKzpwcmV2aW91cwllZGl0aW5nLnR4dAkvKjpwcmV2aW91cyoKKzpwcmludAl2YXJpb3VzLnR4dAkvKjpwcmludCoKKzpwcm8JY2hhbmdlLnR4dAkvKjpwcm8qCis6cHJvbXB0ZmluZAljaGFuZ2UudHh0CS8qOnByb21wdGZpbmQqCis6cHJvbXB0cgljaGFuZ2UudHh0CS8qOnByb21wdHIqCis6cHJvbXB0cmVwbAljaGFuZ2UudHh0CS8qOnByb21wdHJlcGwqCis6cHMJd2luZG93cy50eHQJLyo6cHMqCis6cHNlYXJjaAl3aW5kb3dzLnR4dAkvKjpwc2VhcmNoKgorOnB0Tgl0YWdzcmNoLnR4dAkvKjpwdE4qCis6cHROZXh0CXRhZ3NyY2gudHh0CS8qOnB0TmV4dCoKKzpwdGEJd2luZG93cy50eHQJLyo6cHRhKgorOnB0YWcJd2luZG93cy50eHQJLyo6cHRhZyoKKzpwdGYJdGFnc3JjaC50eHQJLyo6cHRmKgorOnB0Zmlyc3QJdGFnc3JjaC50eHQJLyo6cHRmaXJzdCoKKzpwdGoJdGFnc3JjaC50eHQJLyo6cHRqKgorOnB0anVtcAl0YWdzcmNoLnR4dAkvKjpwdGp1bXAqCis6cHRsCXRhZ3NyY2gudHh0CS8qOnB0bCoKKzpwdGxhc3QJdGFnc3JjaC50eHQJLyo6cHRsYXN0KgorOnB0bgl0YWdzcmNoLnR4dAkvKjpwdG4qCis6cHRuZXh0CXRhZ3NyY2gudHh0CS8qOnB0bmV4dCoKKzpwdHAJdGFnc3JjaC50eHQJLyo6cHRwKgorOnB0cHJldmlvdXMJdGFnc3JjaC50eHQJLyo6cHRwcmV2aW91cyoKKzpwdHIJdGFnc3JjaC50eHQJLyo6cHRyKgorOnB0cmV3aW5kCXRhZ3NyY2gudHh0CS8qOnB0cmV3aW5kKgorOnB0cwl0YWdzcmNoLnR4dAkvKjpwdHMqCis6cHRzZWxlY3QJdGFnc3JjaC50eHQJLyo6cHRzZWxlY3QqCis6cHUJY2hhbmdlLnR4dAkvKjpwdSoKKzpwdXQJY2hhbmdlLnR4dAkvKjpwdXQqCis6cHcJZWRpdGluZy50eHQJLyo6cHcqCis6cHdkCWVkaXRpbmcudHh0CS8qOnB3ZCoKKzpweQlpZl9weXRoLnR4dAkvKjpweSoKKzpweWYJaWZfcHl0aC50eHQJLyo6cHlmKgorOnB5ZmlsZQlpZl9weXRoLnR4dAkvKjpweWZpbGUqCis6cHl0aG9uCWlmX3B5dGgudHh0CS8qOnB5dGhvbioKKzpxCWVkaXRpbmcudHh0CS8qOnEqCis6cWEJZWRpdGluZy50eHQJLyo6cWEqCis6cWFsbAllZGl0aW5nLnR4dAkvKjpxYWxsKgorOnF1aXQJZWRpdGluZy50eHQJLyo6cXVpdCoKKzpxdWl0YQllZGl0aW5nLnR4dAkvKjpxdWl0YSoKKzpxdWl0YWxsCWVkaXRpbmcudHh0CS8qOnF1aXRhbGwqCis6cXVvdGUJY21kbGluZS50eHQJLyo6cXVvdGUqCis6cglpbnNlcnQudHh0CS8qOnIqCis6ciEJaW5zZXJ0LnR4dAkvKjpyISoKKzpyYW5nZQljbWRsaW5lLnR4dAkvKjpyYW5nZSoKKzpyYW5nZSEJY2hhbmdlLnR4dAkvKjpyYW5nZSEqCis6cmUJaW5zZXJ0LnR4dAkvKjpyZSoKKzpyZWFkCWluc2VydC50eHQJLyo6cmVhZCoKKzpyZWFkIQlpbnNlcnQudHh0CS8qOnJlYWQhKgorOnJlYwlyZWNvdmVyLnR4dAkvKjpyZWMqCis6cmVjb3ZlcglyZWNvdmVyLnR4dAkvKjpyZWNvdmVyKgorOnJlZAl1bmRvLnR4dAkvKjpyZWQqCis6cmVkaQl2YXJpb3VzLnR4dAkvKjpyZWRpKgorOnJlZGlyCXZhcmlvdXMudHh0CS8qOnJlZGlyKgorOnJlZG8JdW5kby50eHQJLyo6cmVkbyoKKzpyZWRyCXZhcmlvdXMudHh0CS8qOnJlZHIqCis6cmVkcmF3CXZhcmlvdXMudHh0CS8qOnJlZHJhdyoKKzpyZWRyYXdzCXZhcmlvdXMudHh0CS8qOnJlZHJhd3MqCis6cmVkcmF3c3RhdHVzCXZhcmlvdXMudHh0CS8qOnJlZHJhd3N0YXR1cyoKKzpyZWcJY2hhbmdlLnR4dAkvKjpyZWcqCis6cmVnaXN0ZXJzCWNoYW5nZS50eHQJLyo6cmVnaXN0ZXJzKgorOnJlcwl3aW5kb3dzLnR4dAkvKjpyZXMqCis6cmVzaXplCXdpbmRvd3MudHh0CS8qOnJlc2l6ZSoKKzpyZXQJY2hhbmdlLnR4dAkvKjpyZXQqCis6cmV0YWIJY2hhbmdlLnR4dAkvKjpyZXRhYioKKzpyZXR1CWV2YWwudHh0CS8qOnJldHUqCis6cmV0dXJuCWV2YWwudHh0CS8qOnJldHVybioKKzpyZXcJZWRpdGluZy50eHQJLyo6cmV3KgorOnJld2luZAllZGl0aW5nLnR4dAkvKjpyZXdpbmQqCis6cmkJY2hhbmdlLnR4dAkvKjpyaSoKKzpyaWdodAljaGFuZ2UudHh0CS8qOnJpZ2h0KgorOnJpZ2h0Ygl3aW5kb3dzLnR4dAkvKjpyaWdodGIqCis6cmlnaHRiZWxvdwl3aW5kb3dzLnR4dAkvKjpyaWdodGJlbG93KgorOnJ1CXJlcGVhdC50eHQJLyo6cnUqCis6cnViCWlmX3J1YnkudHh0CS8qOnJ1YioKKzpydWJ5CWlmX3J1YnkudHh0CS8qOnJ1YnkqCis6cnVieWQJaWZfcnVieS50eHQJLyo6cnVieWQqCis6cnVieWRvCWlmX3J1YnkudHh0CS8qOnJ1YnlkbyoKKzpydWJ5ZglpZl9ydWJ5LnR4dAkvKjpydWJ5ZioKKzpydWJ5ZmlsZQlpZl9ydWJ5LnR4dAkvKjpydWJ5ZmlsZSoKKzpydW50aW1lCXJlcGVhdC50eHQJLyo6cnVudGltZSoKKzpydglzdGFydGluZy50eHQJLyo6cnYqCis6cnZpbWluZm8Jc3RhcnRpbmcudHh0CS8qOnJ2aW1pbmZvKgorOnMJY2hhbmdlLnR4dAkvKjpzKgorOnNOCXdpbmRvd3MudHh0CS8qOnNOKgorOnNOZXh0CXdpbmRvd3MudHh0CS8qOnNOZXh0KgorOnNcPQljaGFuZ2UudHh0CS8qOnNcXD0qCis6c19jCWNoYW5nZS50eHQJLyo6c19jKgorOnNfZmxhZ3MJY2hhbmdlLnR4dAkvKjpzX2ZsYWdzKgorOnNhCXdpbmRvd3MudHh0CS8qOnNhKgorOnNhbAl3aW5kb3dzLnR4dAkvKjpzYWwqCis6c2FsbAl3aW5kb3dzLnR4dAkvKjpzYWxsKgorOnNhcmd1bWVudAl3aW5kb3dzLnR4dAkvKjpzYXJndW1lbnQqCis6c2F2CWVkaXRpbmcudHh0CS8qOnNhdioKKzpzYXZlYXMJZWRpdGluZy50eHQJLyo6c2F2ZWFzKgorOnNiCXdpbmRvd3MudHh0CS8qOnNiKgorOnNiTgl3aW5kb3dzLnR4dAkvKjpzYk4qCis6c2JOZXh0CXdpbmRvd3MudHh0CS8qOnNiTmV4dCoKKzpzYmEJd2luZG93cy50eHQJLyo6c2JhKgorOnNiYWxsCXdpbmRvd3MudHh0CS8qOnNiYWxsKgorOnNiZgl3aW5kb3dzLnR4dAkvKjpzYmYqCis6c2JmaXJzdAl3aW5kb3dzLnR4dAkvKjpzYmZpcnN0KgorOnNibAl3aW5kb3dzLnR4dAkvKjpzYmwqCis6c2JsYXN0CXdpbmRvd3MudHh0CS8qOnNibGFzdCoKKzpzYm0Jd2luZG93cy50eHQJLyo6c2JtKgorOnNibW9kaWZpZWQJd2luZG93cy50eHQJLyo6c2Jtb2RpZmllZCoKKzpzYm4Jd2luZG93cy50eHQJLyo6c2JuKgorOnNibmV4dAl3aW5kb3dzLnR4dAkvKjpzYm5leHQqCis6c2JwCXdpbmRvd3MudHh0CS8qOnNicCoKKzpzYnByZXZpb3VzCXdpbmRvd3MudHh0CS8qOnNicHJldmlvdXMqCis6c2JyCXdpbmRvd3MudHh0CS8qOnNicioKKzpzYnJld2luZAl3aW5kb3dzLnR4dAkvKjpzYnJld2luZCoKKzpzYnVmZmVyCXdpbmRvd3MudHh0CS8qOnNidWZmZXIqCis6c2NyaXAJcmVwZWF0LnR4dAkvKjpzY3JpcCoKKzpzY3JpcHRlCXJlcGVhdC50eHQJLyo6c2NyaXB0ZSoKKzpzY3JpcHRlbmNvZGluZwlyZXBlYXQudHh0CS8qOnNjcmlwdGVuY29kaW5nKgorOnNjcmlwdG5hbWVzCXJlcGVhdC50eHQJLyo6c2NyaXB0bmFtZXMqCis6c2NzCWlmX2NzY29wLnR4dAkvKjpzY3MqCis6c2NzY29wZQlpZl9jc2NvcC50eHQJLyo6c2NzY29wZSoKKzpzZQlvcHRpb25zLnR4dAkvKjpzZSoKKzpzZWFyY2gtYXJncwl0YWdzcmNoLnR4dAkvKjpzZWFyY2gtYXJncyoKKzpzZXQJb3B0aW9ucy50eHQJLyo6c2V0KgorOnNldCs9CW9wdGlvbnMudHh0CS8qOnNldCs9KgorOnNldC0mCW9wdGlvbnMudHh0CS8qOnNldC0mKgorOnNldC0mdmkJb3B0aW9ucy50eHQJLyo6c2V0LSZ2aSoKKzpzZXQtJnZpbQlvcHRpb25zLnR4dAkvKjpzZXQtJnZpbSoKKzpzZXQtPQlvcHRpb25zLnR4dAkvKjpzZXQtPSoKKzpzZXQtYXJncwlvcHRpb25zLnR4dAkvKjpzZXQtYXJncyoKKzpzZXQtYnJvd3NlCW9wdGlvbnMudHh0CS8qOnNldC1icm93c2UqCis6c2V0LWRlZmF1bHQJb3B0aW9ucy50eHQJLyo6c2V0LWRlZmF1bHQqCis6c2V0LXRlcm1jYXAJb3B0aW9ucy50eHQJLyo6c2V0LXRlcm1jYXAqCis6c2V0LXZlcmJvc2UJb3B0aW9ucy50eHQJLyo6c2V0LXZlcmJvc2UqCis6c2V0Xj0Jb3B0aW9ucy50eHQJLyo6c2V0Xj0qCis6c2V0X2VudglvcHRpb25zLnR4dAkvKjpzZXRfZW52KgorOnNldGYJb3B0aW9ucy50eHQJLyo6c2V0ZioKKzpzZXRmaWxldHlwZQlvcHRpb25zLnR4dAkvKjpzZXRmaWxldHlwZSoKKzpzZXRnCW9wdGlvbnMudHh0CS8qOnNldGcqCis6c2V0Z2xvYmFsCW9wdGlvbnMudHh0CS8qOnNldGdsb2JhbCoKKzpzZXRsCW9wdGlvbnMudHh0CS8qOnNldGwqCis6c2V0bG9jYWwJb3B0aW9ucy50eHQJLyo6c2V0bG9jYWwqCis6c2YJd2luZG93cy50eHQJLyo6c2YqCis6c2ZpbmQJd2luZG93cy50eHQJLyo6c2ZpbmQqCis6c2Zpcgl3aW5kb3dzLnR4dAkvKjpzZmlyKgorOnNmaXJzdAl3aW5kb3dzLnR4dAkvKjpzZmlyc3QqCis6c2gJdmFyaW91cy50eHQJLyo6c2gqCis6c2hlbGwJdmFyaW91cy50eHQJLyo6c2hlbGwqCis6c2kJZ3VpX3czMi50eHQJLyo6c2kqCis6c2lnCXNpZ24udHh0CS8qOnNpZyoKKzpzaWduCXNpZ24udHh0CS8qOnNpZ24qCis6c2lnbi1kZWZpbmUJc2lnbi50eHQJLyo6c2lnbi1kZWZpbmUqCis6c2lnbi1mbmFtZQlzaWduLnR4dAkvKjpzaWduLWZuYW1lKgorOnNpZ24tanVtcAlzaWduLnR4dAkvKjpzaWduLWp1bXAqCis6c2lnbi1saXN0CXNpZ24udHh0CS8qOnNpZ24tbGlzdCoKKzpzaWduLXBsYWNlCXNpZ24udHh0CS8qOnNpZ24tcGxhY2UqCis6c2lnbi11bmRlZmluZQlzaWduLnR4dAkvKjpzaWduLXVuZGVmaW5lKgorOnNpZ24tdW5wbGFjZQlzaWduLnR4dAkvKjpzaWduLXVucGxhY2UqCis6c2lsCXZhcmlvdXMudHh0CS8qOnNpbCoKKzpzaWxlbnQJdmFyaW91cy50eHQJLyo6c2lsZW50KgorOnNpbWFsdAlndWlfdzMyLnR4dAkvKjpzaW1hbHQqCis6c2wJdmFyaW91cy50eHQJLyo6c2wqCis6c2xhCXdpbmRvd3MudHh0CS8qOnNsYSoKKzpzbGFzdAl3aW5kb3dzLnR4dAkvKjpzbGFzdCoKKzpzbGVlcAl2YXJpb3VzLnR4dAkvKjpzbGVlcCoKKzpzbQljaGFuZ2UudHh0CS8qOnNtKgorOnNtYWdpYwljaGFuZ2UudHh0CS8qOnNtYWdpYyoKKzpzbgl3aW5kb3dzLnR4dAkvKjpzbioKKzpzbmV4dAl3aW5kb3dzLnR4dAkvKjpzbmV4dCoKKzpzbmkJaWZfc25pZmYudHh0CS8qOnNuaSoKKzpzbmlmZglpZl9zbmlmZi50eHQJLyo6c25pZmYqCis6c25vCWNoYW5nZS50eHQJLyo6c25vKgorOnNub21hZ2ljCWNoYW5nZS50eHQJLyo6c25vbWFnaWMqCis6c28JcmVwZWF0LnR4dAkvKjpzbyoKKzpzb3VyY2UJcmVwZWF0LnR4dAkvKjpzb3VyY2UqCis6c291cmNlX2NybmwJcmVwZWF0LnR4dAkvKjpzb3VyY2VfY3JubCoKKzpzcAl3aW5kb3dzLnR4dAkvKjpzcCoKKzpzcGxpdAl3aW5kb3dzLnR4dAkvKjpzcGxpdCoKKzpzcGxpdF9mCXdpbmRvd3MudHh0CS8qOnNwbGl0X2YqCis6c3ByCXdpbmRvd3MudHh0CS8qOnNwcioKKzpzcHJldmlvdXMJd2luZG93cy50eHQJLyo6c3ByZXZpb3VzKgorOnNyZQl3aW5kb3dzLnR4dAkvKjpzcmUqCis6c3Jld2luZAl3aW5kb3dzLnR4dAkvKjpzcmV3aW5kKgorOnN0CXN0YXJ0aW5nLnR4dAkvKjpzdCoKKzpzdGEJd2luZG93cy50eHQJLyo6c3RhKgorOnN0YWcJd2luZG93cy50eHQJLyo6c3RhZyoKKzpzdGFyCXJlcGVhdC50eHQJLyo6c3RhcioKKzpzdGFydAlpbnNlcnQudHh0CS8qOnN0YXJ0KgorOnN0YXJ0aW5zZXJ0CWluc2VydC50eHQJLyo6c3RhcnRpbnNlcnQqCis6c3RqCXRhZ3NyY2gudHh0CS8qOnN0aioKKzpzdGp1bXAJdGFnc3JjaC50eHQJLyo6c3RqdW1wKgorOnN0b3AJc3RhcnRpbmcudHh0CS8qOnN0b3AqCis6c3RvcGkJaW5zZXJ0LnR4dAkvKjpzdG9waSoKKzpzdG9waW5zZXJ0CWluc2VydC50eHQJLyo6c3RvcGluc2VydCoKKzpzdHMJdGFnc3JjaC50eHQJLyo6c3RzKgorOnN0c2VsZWN0CXRhZ3NyY2gudHh0CS8qOnN0c2VsZWN0KgorOnN1CWNoYW5nZS50eHQJLyo6c3UqCis6c3Vic3RpdHV0ZQljaGFuZ2UudHh0CS8qOnN1YnN0aXR1dGUqCis6c3VuCXdpbmRvd3MudHh0CS8qOnN1bioKKzpzdW5oaWRlCXdpbmRvd3MudHh0CS8qOnN1bmhpZGUqCis6c3VzCXN0YXJ0aW5nLnR4dAkvKjpzdXMqCis6c3VzcGVuZAlzdGFydGluZy50eHQJLyo6c3VzcGVuZCoKKzpzdgl3aW5kb3dzLnR4dAkvKjpzdioKKzpzdmlldwl3aW5kb3dzLnR4dAkvKjpzdmlldyoKKzpzdwlyZWNvdmVyLnR4dAkvKjpzdyoKKzpzd2FwbmFtZQlyZWNvdmVyLnR4dAkvKjpzd2FwbmFtZSoKKzpzeQlzeW50YXgudHh0CS8qOnN5KgorOnN5bglzeW50YXgudHh0CS8qOnN5bioKKzpzeW4tYXJndW1lbnRzCXN5bnRheC50eHQJLyo6c3luLWFyZ3VtZW50cyoKKzpzeW4tY2FzZQlzeW50YXgudHh0CS8qOnN5bi1jYXNlKgorOnN5bi1jbGVhcglzeW50YXgudHh0CS8qOnN5bi1jbGVhcioKKzpzeW4tY2x1c3RlcglzeW50YXgudHh0CS8qOnN5bi1jbHVzdGVyKgorOnN5bi1jb250YWluZWQJc3ludGF4LnR4dAkvKjpzeW4tY29udGFpbmVkKgorOnN5bi1jb250YWluZWRpbglzeW50YXgudHh0CS8qOnN5bi1jb250YWluZWRpbioKKzpzeW4tY29udGFpbnMJc3ludGF4LnR4dAkvKjpzeW4tY29udGFpbnMqCis6c3luLWNvbnRleHQJc3ludGF4LnR4dAkvKjpzeW4tY29udGV4dCoKKzpzeW4tZGVmYXVsdC1vdmVycmlkZQl1c3JfMDYudHh0CS8qOnN5bi1kZWZhdWx0LW92ZXJyaWRlKgorOnN5bi1kZWZpbmUJc3ludGF4LnR4dAkvKjpzeW4tZGVmaW5lKgorOnN5bi1kaXNwbGF5CXN5bnRheC50eHQJLyo6c3luLWRpc3BsYXkqCis6c3luLWVuYWJsZQlzeW50YXgudHh0CS8qOnN5bi1lbmFibGUqCis6c3luLWVuZAlzeW50YXgudHh0CS8qOnN5bi1lbmQqCis6c3luLWV4Y2x1ZGVubAlzeW50YXgudHh0CS8qOnN5bi1leGNsdWRlbmwqCis6c3luLWV4dC1tYXRjaAlzeW50YXgudHh0CS8qOnN5bi1leHQtbWF0Y2gqCis6c3luLWV4dGVuZAlzeW50YXgudHh0CS8qOnN5bi1leHRlbmQqCis6c3luLWZpbGUtcmVtYXJrcwlzeW50YXgudHh0CS8qOnN5bi1maWxlLXJlbWFya3MqCis6c3luLWZpbGVzCXN5bnRheC50eHQJLyo6c3luLWZpbGVzKgorOnN5bi1mb2xkCXN5bnRheC50eHQJLyo6c3luLWZvbGQqCis6c3luLWluY2x1ZGUJc3ludGF4LnR4dAkvKjpzeW4taW5jbHVkZSoKKzpzeW4ta2VlcGVuZAlzeW50YXgudHh0CS8qOnN5bi1rZWVwZW5kKgorOnN5bi1rZXl3b3JkCXN5bnRheC50eHQJLyo6c3luLWtleXdvcmQqCis6c3luLWxjCXN5bnRheC50eHQJLyo6c3luLWxjKgorOnN5bi1sZWFkaW5nCXN5bnRheC50eHQJLyo6c3luLWxlYWRpbmcqCis6c3luLWxpc3QJc3ludGF4LnR4dAkvKjpzeW4tbGlzdCoKKzpzeW4tbWFudWFsCXVzcl8wNi50eHQJLyo6c3luLW1hbnVhbCoKKzpzeW4tbWF0Y2gJc3ludGF4LnR4dAkvKjpzeW4tbWF0Y2gqCis6c3luLW1hdGNoZ3JvdXAJc3ludGF4LnR4dAkvKjpzeW4tbWF0Y2hncm91cCoKKzpzeW4tbXVsdGktbGluZQlzeW50YXgudHh0CS8qOnN5bi1tdWx0aS1saW5lKgorOnN5bi1uZXh0Z3JvdXAJc3ludGF4LnR4dAkvKjpzeW4tbmV4dGdyb3VwKgorOnN5bi1vZmYJdXNyXzA2LnR4dAkvKjpzeW4tb2ZmKgorOnN5bi1vbglzeW50YXgudHh0CS8qOnN5bi1vbioKKzpzeW4tb25lbGluZQlzeW50YXgudHh0CS8qOnN5bi1vbmVsaW5lKgorOnN5bi1wYXR0ZXJuCXN5bnRheC50eHQJLyo6c3luLXBhdHRlcm4qCis6c3luLXBhdHRlcm4tb2Zmc2V0CXN5bnRheC50eHQJLyo6c3luLXBhdHRlcm4tb2Zmc2V0KgorOnN5bi1wcmlvcml0eQlzeW50YXgudHh0CS8qOnN5bi1wcmlvcml0eSoKKzpzeW4tcXN0YXJ0CXN5bnRheC50eHQJLyo6c3luLXFzdGFydCoKKzpzeW4tcmVnaW9uCXN5bnRheC50eHQJLyo6c3luLXJlZ2lvbioKKzpzeW4tcmVzZXQJc3ludGF4LnR4dAkvKjpzeW4tcmVzZXQqCis6c3luLXNraXAJc3ludGF4LnR4dAkvKjpzeW4tc2tpcCoKKzpzeW4tc2tpcGVtcHR5CXN5bnRheC50eHQJLyo6c3luLXNraXBlbXB0eSoKKzpzeW4tc2tpcG5sCXN5bnRheC50eHQJLyo6c3luLXNraXBubCoKKzpzeW4tc2tpcHdoaXRlCXN5bnRheC50eHQJLyo6c3luLXNraXB3aGl0ZSoKKzpzeW4tc3RhcnQJc3ludGF4LnR4dAkvKjpzeW4tc3RhcnQqCis6c3luLXN5bmMJc3ludGF4LnR4dAkvKjpzeW4tc3luYyoKKzpzeW4tc3luYy1jY29tbWVudAlzeW50YXgudHh0CS8qOnN5bi1zeW5jLWNjb21tZW50KgorOnN5bi1zeW5jLWZpcnN0CXN5bnRheC50eHQJLyo6c3luLXN5bmMtZmlyc3QqCis6c3luLXN5bmMtZm91cnRoCXN5bnRheC50eHQJLyo6c3luLXN5bmMtZm91cnRoKgorOnN5bi1zeW5jLWxpbmVicmVha3MJc3ludGF4LnR4dAkvKjpzeW4tc3luYy1saW5lYnJlYWtzKgorOnN5bi1zeW5jLW1heGxpbmVzCXN5bnRheC50eHQJLyo6c3luLXN5bmMtbWF4bGluZXMqCis6c3luLXN5bmMtbWlubGluZXMJc3ludGF4LnR4dAkvKjpzeW4tc3luYy1taW5saW5lcyoKKzpzeW4tc3luYy1zZWNvbmQJc3ludGF4LnR4dAkvKjpzeW4tc3luYy1zZWNvbmQqCis6c3luLXN5bmMtdGhpcmQJc3ludGF4LnR4dAkvKjpzeW4tc3luYy10aGlyZCoKKzpzeW4tdHJhbnNwYXJlbnQJc3ludGF4LnR4dAkvKjpzeW4tdHJhbnNwYXJlbnQqCis6c3luY2JpbmQJc2Nyb2xsLnR4dAkvKjpzeW5jYmluZCoKKzpzeW50YXgJc3ludGF4LnR4dAkvKjpzeW50YXgqCis6c3ludGF4LWVuYWJsZQlzeW50YXgudHh0CS8qOnN5bnRheC1lbmFibGUqCis6c3ludGF4LW9uCXN5bnRheC50eHQJLyo6c3ludGF4LW9uKgorOnN5bnRheC1yZXNldAlzeW50YXgudHh0CS8qOnN5bnRheC1yZXNldCoKKzp0CWNoYW5nZS50eHQJLyo6dCoKKzp0Tgl0YWdzcmNoLnR4dAkvKjp0TioKKzp0TmV4dAl0YWdzcmNoLnR4dAkvKjp0TmV4dCoKKzp0YQl0YWdzcmNoLnR4dAkvKjp0YSoKKzp0YWcJdGFnc3JjaC50eHQJLyo6dGFnKgorOnRhZ3MJdGFnc3JjaC50eHQJLyo6dGFncyoKKzp0YwlpZl90Y2wudHh0CS8qOnRjKgorOnRjbAlpZl90Y2wudHh0CS8qOnRjbCoKKzp0Y2xkCWlmX3RjbC50eHQJLyo6dGNsZCoKKzp0Y2xkbwlpZl90Y2wudHh0CS8qOnRjbGRvKgorOnRjbGYJaWZfdGNsLnR4dAkvKjp0Y2xmKgorOnRjbGZpbGUJaWZfdGNsLnR4dAkvKjp0Y2xmaWxlKgorOnRlCWd1aV93MzIudHh0CS8qOnRlKgorOnRlYXJvZmYJZ3VpX3czMi50eHQJLyo6dGVhcm9mZioKKzp0Zgl0YWdzcmNoLnR4dAkvKjp0ZioKKzp0Zmlyc3QJdGFnc3JjaC50eHQJLyo6dGZpcnN0KgorOnRoCWV2YWwudHh0CS8qOnRoKgorOnRocm93CWV2YWwudHh0CS8qOnRocm93KgorOnRqCXRhZ3NyY2gudHh0CS8qOnRqKgorOnRqdW1wCXRhZ3NyY2gudHh0CS8qOnRqdW1wKgorOnRsCXRhZ3NyY2gudHh0CS8qOnRsKgorOnRsYXN0CXRhZ3NyY2gudHh0CS8qOnRsYXN0KgorOnRtCWd1aS50eHQJLyo6dG0qCis6dG1lbnUJZ3VpLnR4dAkvKjp0bWVudSoKKzp0bgl0YWdzcmNoLnR4dAkvKjp0bioKKzp0bmV4dAl0YWdzcmNoLnR4dAkvKjp0bmV4dCoKKzp0b3BsZWZ0CXdpbmRvd3MudHh0CS8qOnRvcGxlZnQqCis6dHAJdGFnc3JjaC50eHQJLyo6dHAqCis6dHByZXZpb3VzCXRhZ3NyY2gudHh0CS8qOnRwcmV2aW91cyoKKzp0cgl0YWdzcmNoLnR4dAkvKjp0cioKKzp0cmV3aW5kCXRhZ3NyY2gudHh0CS8qOnRyZXdpbmQqCis6dHJ5CWV2YWwudHh0CS8qOnRyeSoKKzp0cwl0YWdzcmNoLnR4dAkvKjp0cyoKKzp0c2VsZWN0CXRhZ3NyY2gudHh0CS8qOnRzZWxlY3QqCis6dHUJZ3VpLnR4dAkvKjp0dSoKKzp0dW5tZW51CWd1aS50eHQJLyo6dHVubWVudSoKKzp1CXVuZG8udHh0CS8qOnUqCis6dW4JdW5kby50eHQJLyo6dW4qCis6dW5hCW1hcC50eHQJLyo6dW5hKgorOnVuYWJicmV2aWF0ZQltYXAudHh0CS8qOnVuYWJicmV2aWF0ZSoKKzp1bmRvCXVuZG8udHh0CS8qOnVuZG8qCis6dW5oCXdpbmRvd3MudHh0CS8qOnVuaCoKKzp1bmhpZGUJd2luZG93cy50eHQJLyo6dW5oaWRlKgorOnVubAlldmFsLnR4dAkvKjp1bmwqCis6dW5sZXQJZXZhbC50eHQJLyo6dW5sZXQqCis6dW5tCW1hcC50eHQJLyo6dW5tKgorOnVubSEJbWFwLnR4dAkvKjp1bm0hKgorOnVubWFwCW1hcC50eHQJLyo6dW5tYXAqCis6dW5tYXAhCW1hcC50eHQJLyo6dW5tYXAhKgorOnVubWUJZ3VpLnR4dAkvKjp1bm1lKgorOnVubWVudQlndWkudHh0CS8qOnVubWVudSoKKzp1bm1lbnUtYWxsCWd1aS50eHQJLyo6dW5tZW51LWFsbCoKKzp1cAllZGl0aW5nLnR4dAkvKjp1cCoKKzp1cGRhdGUJZWRpdGluZy50eHQJLyo6dXBkYXRlKgorOnYJcmVwZWF0LnR4dAkvKjp2KgorOnZlCXZhcmlvdXMudHh0CS8qOnZlKgorOnZlcmIJdmFyaW91cy50eHQJLyo6dmVyYioKKzp2ZXJib3NlCXZhcmlvdXMudHh0CS8qOnZlcmJvc2UqCis6dmVyc2lvbgl2YXJpb3VzLnR4dAkvKjp2ZXJzaW9uKgorOnZlcnQJd2luZG93cy50eHQJLyo6dmVydCoKKzp2ZXJ0aWNhbAl3aW5kb3dzLnR4dAkvKjp2ZXJ0aWNhbCoKKzp2ZXJ0aWNhbC1yZXNpemUJd2luZG93cy50eHQJLyo6dmVydGljYWwtcmVzaXplKgorOnZnbG9iYWwJcmVwZWF0LnR4dAkvKjp2Z2xvYmFsKgorOnZpCWVkaXRpbmcudHh0CS8qOnZpKgorOnZpZQllZGl0aW5nLnR4dAkvKjp2aWUqCis6dmlldwllZGl0aW5nLnR4dAkvKjp2aWV3KgorOnZpc3VhbAllZGl0aW5nLnR4dAkvKjp2aXN1YWwqCis6dmlzdWFsX2V4YW1wbGUJdmlzdWFsLnR4dAkvKjp2aXN1YWxfZXhhbXBsZSoKKzp2bQltYXAudHh0CS8qOnZtKgorOnZtYXAJbWFwLnR4dAkvKjp2bWFwKgorOnZtYXBfbAltYXAudHh0CS8qOnZtYXBfbCoKKzp2bWFwYwltYXAudHh0CS8qOnZtYXBjKgorOnZtYXBjbGVhcgltYXAudHh0CS8qOnZtYXBjbGVhcioKKzp2bWUJZ3VpLnR4dAkvKjp2bWUqCis6dm1lbnUJZ3VpLnR4dAkvKjp2bWVudSoKKzp2bgltYXAudHh0CS8qOnZuKgorOnZuZQl3aW5kb3dzLnR4dAkvKjp2bmUqCis6dm5ldwl3aW5kb3dzLnR4dAkvKjp2bmV3KgorOnZub3JlbWFwCW1hcC50eHQJLyo6dm5vcmVtYXAqCis6dm5vcmVtZQlndWkudHh0CS8qOnZub3JlbWUqCis6dm5vcmVtZW51CWd1aS50eHQJLyo6dm5vcmVtZW51KgorOnZzCXdpbmRvd3MudHh0CS8qOnZzKgorOnZzcGxpdAl3aW5kb3dzLnR4dAkvKjp2c3BsaXQqCis6dnUJbWFwLnR4dAkvKjp2dSoKKzp2dW5tYXAJbWFwLnR4dAkvKjp2dW5tYXAqCis6dnVubWUJZ3VpLnR4dAkvKjp2dW5tZSoKKzp2dW5tZW51CWd1aS50eHQJLyo6dnVubWVudSoKKzp3CWVkaXRpbmcudHh0CS8qOncqCis6dyEJZWRpdGluZy50eHQJLyo6dyEqCis6d04JZWRpdGluZy50eHQJLyo6d04qCis6d05leHQJZWRpdGluZy50eHQJLyo6d05leHQqCis6d19hCWVkaXRpbmcudHh0CS8qOndfYSoKKzp3X2MJZWRpdGluZy50eHQJLyo6d19jKgorOndfZgllZGl0aW5nLnR4dAkvKjp3X2YqCis6d2EJZWRpdGluZy50eHQJLyo6d2EqCis6d2FsbAllZGl0aW5nLnR4dAkvKjp3YWxsKgorOndoCWV2YWwudHh0CS8qOndoKgorOndoaWxlCWV2YWwudHh0CS8qOndoaWxlKgorOndpbglndWkudHh0CS8qOndpbioKKzp3aW5jCXdpbmRvd3MudHh0CS8qOndpbmMqCis6d2luY21kCXdpbmRvd3MudHh0CS8qOndpbmNtZCoKKzp3aW5kbwl3aW5kb3dzLnR4dAkvKjp3aW5kbyoKKzp3aW5wCWd1aS50eHQJLyo6d2lucCoKKzp3aW5wb3MJZ3VpLnR4dAkvKjp3aW5wb3MqCis6d2luc2l6ZQlndWkudHh0CS8qOndpbnNpemUqCis6d24JZWRpdGluZy50eHQJLyo6d24qCis6d25leHQJZWRpdGluZy50eHQJLyo6d25leHQqCis6d3AJZWRpdGluZy50eHQJLyo6d3AqCis6d3ByZXZpb3VzCWVkaXRpbmcudHh0CS8qOndwcmV2aW91cyoKKzp3cQllZGl0aW5nLnR4dAkvKjp3cSoKKzp3cWEJZWRpdGluZy50eHQJLyo6d3FhKgorOndxYWxsCWVkaXRpbmcudHh0CS8qOndxYWxsKgorOndyaXRlCWVkaXRpbmcudHh0CS8qOndyaXRlKgorOndyaXRlX2EJZWRpdGluZy50eHQJLyo6d3JpdGVfYSoKKzp3cml0ZV9jCWVkaXRpbmcudHh0CS8qOndyaXRlX2MqCis6d3JpdGVfZgllZGl0aW5nLnR4dAkvKjp3cml0ZV9mKgorOndzCXdvcmtzaG9wLnR4dAkvKjp3cyoKKzp3c3ZlcmIJd29ya3Nob3AudHh0CS8qOndzdmVyYioKKzp3dglzdGFydGluZy50eHQJLyo6d3YqCis6d3ZpbWluZm8Jc3RhcnRpbmcudHh0CS8qOnd2aW1pbmZvKgorOngJZWRpdGluZy50eHQJLyo6eCoKKzp4YQllZGl0aW5nLnR4dAkvKjp4YSoKKzp4YWxsCWVkaXRpbmcudHh0CS8qOnhhbGwqCis6eGl0CWVkaXRpbmcudHh0CS8qOnhpdCoKKzp5CWNoYW5nZS50eHQJLyo6eSoKKzp5YW5rCWNoYW5nZS50eHQJLyo6eWFuayoKKzp6CXZhcmlvdXMudHh0CS8qOnoqCis6eiMJdmFyaW91cy50eHQJLyo6eiMqCis6fgljaGFuZ2UudHh0CS8qOn4qCis7CW1vdGlvbi50eHQJLyo7KgorPAljaGFuZ2UudHh0CS8qPCoKKzwyLUxlZnRNb3VzZT4JdGVybS50eHQJLyo8Mi1MZWZ0TW91c2U+KgorPDMtTGVmdE1vdXNlPgl0ZXJtLnR4dAkvKjwzLUxlZnRNb3VzZT4qCis8NC1MZWZ0TW91c2U+CXRlcm0udHh0CS8qPDQtTGVmdE1vdXNlPioKKzw8CWNoYW5nZS50eHQJLyo8PCoKKzw+CWludHJvLnR4dAkvKjw+KgorPEEtCWludHJvLnR4dAkvKjxBLSoKKzxCUz4JbW90aW9uLnR4dAkvKjxCUz4qCis8QmFyPglpbnRyby50eHQJLyo8QmFyPioKKzxCc2xhc2g+CWludHJvLnR4dAkvKjxCc2xhc2g+KgorPEMtCWludHJvLnR4dAkvKjxDLSoKKzxDLURlbD4Jb3NfZG9zLnR4dAkvKjxDLURlbD4qCis8Qy1FbmQ+CW1vdGlvbi50eHQJLyo8Qy1FbmQ+KgorPEMtSG9tZT4JbW90aW9uLnR4dAkvKjxDLUhvbWU+KgorPEMtSW5zZXJ0Pglvc19kb3MudHh0CS8qPEMtSW5zZXJ0PioKKzxDLUxlZnQ+CW1vdGlvbi50eHQJLyo8Qy1MZWZ0PioKKzxDLUxlZnRNb3VzZT4JdGFnc3JjaC50eHQJLyo8Qy1MZWZ0TW91c2U+KgorPEMtTW91c2VEb3duPglzY3JvbGwudHh0CS8qPEMtTW91c2VEb3duPioKKzxDLU1vdXNlVXA+CXNjcm9sbC50eHQJLyo8Qy1Nb3VzZVVwPioKKzxDLVBhZ2VEb3duPglvc19kb3MudHh0CS8qPEMtUGFnZURvd24+KgorPEMtUGFnZVVwPglvc19kb3MudHh0CS8qPEMtUGFnZVVwPioKKzxDLVJpZ2h0Pgltb3Rpb24udHh0CS8qPEMtUmlnaHQ+KgorPEMtUmlnaHRNb3VzZT4JdGFnc3JjaC50eHQJLyo8Qy1SaWdodE1vdXNlPioKKzxDUj4JbW90aW9uLnR4dAkvKjxDUj4qCis8Q1NJPglpbnRyby50eHQJLyo8Q1NJPioKKzxDaGFyLT4JbWFwLnR4dAkvKjxDaGFyLT4qCis8Q2hhcj4JbWFwLnR4dAkvKjxDaGFyPioKKzxELQlpbnRyby50eHQJLyo8RC0qCis8RGVsPgljaGFuZ2UudHh0CS8qPERlbD4qCis8RG93bj4JbW90aW9uLnR4dAkvKjxEb3duPioKKzxEcm9wPgljaGFuZ2UudHh0CS8qPERyb3A+KgorPEVPTD4JaW50cm8udHh0CS8qPEVPTD4qCis8RW5kPgltb3Rpb24udHh0CS8qPEVuZD4qCis8RW50ZXI+CWludHJvLnR4dAkvKjxFbnRlcj4qCis8RXNjPglpbnRyby50eHQJLyo8RXNjPioKKzxGMTA+CXRlcm0udHh0CS8qPEYxMD4qCis8RjExPgl0ZXJtLnR4dAkvKjxGMTE+KgorPEYxMj4JdGVybS50eHQJLyo8RjEyPioKKzxGMTM+CXRlcm0udHh0CS8qPEYxMz4qCis8RjE0Pgl0ZXJtLnR4dAkvKjxGMTQ+KgorPEYxNT4JdGVybS50eHQJLyo8RjE1PioKKzxGMTY+CXRlcm0udHh0CS8qPEYxNj4qCis8RjE3Pgl0ZXJtLnR4dAkvKjxGMTc+KgorPEYxOD4JdGVybS50eHQJLyo8RjE4PioKKzxGMTk+CXRlcm0udHh0CS8qPEYxOT4qCis8RjE+CXZhcmlvdXMudHh0CS8qPEYxPioKKzxGMj4JdGVybS50eHQJLyo8RjI+KgorPEYzPgl0ZXJtLnR4dAkvKjxGMz4qCis8RjQ+CXRlcm0udHh0CS8qPEY0PioKKzxGNT4JdGVybS50eHQJLyo8RjU+KgorPEY2Pgl0ZXJtLnR4dAkvKjxGNj4qCis8Rjc+CXRlcm0udHh0CS8qPEY3PioKKzxGOD4JdGVybS50eHQJLyo8Rjg+KgorPEY5Pgl0ZXJtLnR4dAkvKjxGOT4qCis8SGVscD4JdmFyaW91cy50eHQJLyo8SGVscD4qCis8SG9tZT4JbW90aW9uLnR4dAkvKjxIb21lPioKKzxJbnNlcnQ+CWluc2VydC50eHQJLyo8SW5zZXJ0PioKKzxMZWFkZXI+CW1hcC50eHQJLyo8TGVhZGVyPioKKzxMZWZ0Pgltb3Rpb24udHh0CS8qPExlZnQ+KgorPExlZnREcmFnPgl0ZXJtLnR4dAkvKjxMZWZ0RHJhZz4qCis8TGVmdE1vdXNlPgl2aXN1YWwudHh0CS8qPExlZnRNb3VzZT4qCis8TGVmdFJlbGVhc2U+CXZpc3VhbC50eHQJLyo8TGVmdFJlbGVhc2U+KgorPExvY2FsTGVhZGVyPgltYXAudHh0CS8qPExvY2FsTGVhZGVyPioKKzxNLQlpbnRyby50eHQJLyo8TS0qCis8TWlkZGxlRHJhZz4JdGVybS50eHQJLyo8TWlkZGxlRHJhZz4qCis8TWlkZGxlTW91c2U+CWNoYW5nZS50eHQJLyo8TWlkZGxlTW91c2U+KgorPE1pZGRsZVJlbGVhc2U+CXRlcm0udHh0CS8qPE1pZGRsZVJlbGVhc2U+KgorPE1vdXNlPgl0ZXJtLnR4dAkvKjxNb3VzZT4qCis8TW91c2VEb3duPglzY3JvbGwudHh0CS8qPE1vdXNlRG93bj4qCis8TW91c2VVcD4Jc2Nyb2xsLnR4dAkvKjxNb3VzZVVwPioKKzxOTD4JbW90aW9uLnR4dAkvKjxOTD4qCis8Tm9wPgltYXAudHh0CS8qPE5vcD4qCis8TnVsPglpbnRyby50eHQJLyo8TnVsPioKKzxQYWdlRG93bj4Jc2Nyb2xsLnR4dAkvKjxQYWdlRG93bj4qCis8UGFnZVVwPglzY3JvbGwudHh0CS8qPFBhZ2VVcD4qCis8UGx1Zz4JbWFwLnR4dAkvKjxQbHVnPioKKzxSZXR1cm4+CWludHJvLnR4dAkvKjxSZXR1cm4+KgorPFJpZ2h0Pgltb3Rpb24udHh0CS8qPFJpZ2h0PioKKzxSaWdodERyYWc+CXRlcm0udHh0CS8qPFJpZ2h0RHJhZz4qCis8UmlnaHRNb3VzZT4JdmlzdWFsLnR4dAkvKjxSaWdodE1vdXNlPioKKzxSaWdodFJlbGVhc2U+CXRlcm0udHh0CS8qPFJpZ2h0UmVsZWFzZT4qCis8Uy0JaW50cm8udHh0CS8qPFMtKgorPFMtRGVsPglvc19kb3MudHh0CS8qPFMtRGVsPioKKzxTLURvd24+CXNjcm9sbC50eHQJLyo8Uy1Eb3duPioKKzxTLUVuZD4JdGVybS50eHQJLyo8Uy1FbmQ+KgorPFMtRjEwPgl0ZXJtLnR4dAkvKjxTLUYxMD4qCis8Uy1GMTE+CXRlcm0udHh0CS8qPFMtRjExPioKKzxTLUYxMj4JdGVybS50eHQJLyo8Uy1GMTI+KgorPFMtRjE+CWludHJvLnR4dAkvKjxTLUYxPioKKzxTLUYyPgl0ZXJtLnR4dAkvKjxTLUYyPioKKzxTLUYzPgl0ZXJtLnR4dAkvKjxTLUYzPioKKzxTLUY0Pgl0ZXJtLnR4dAkvKjxTLUY0PioKKzxTLUY1Pgl0ZXJtLnR4dAkvKjxTLUY1PioKKzxTLUY2Pgl0ZXJtLnR4dAkvKjxTLUY2PioKKzxTLUY3Pgl0ZXJtLnR4dAkvKjxTLUY3PioKKzxTLUY4Pgl0ZXJtLnR4dAkvKjxTLUY4PioKKzxTLUY5Pgl0ZXJtLnR4dAkvKjxTLUY5PioKKzxTLUhvbWU+CXRlcm0udHh0CS8qPFMtSG9tZT4qCis8Uy1JbnNlcnQ+CW9zX2Rvcy50eHQJLyo8Uy1JbnNlcnQ+KgorPFMtTGVmdD4JbW90aW9uLnR4dAkvKjxTLUxlZnQ+KgorPFMtTGVmdE1vdXNlPgl0ZXJtLnR4dAkvKjxTLUxlZnRNb3VzZT4qCis8Uy1Nb3VzZURvd24+CXNjcm9sbC50eHQJLyo8Uy1Nb3VzZURvd24+KgorPFMtTW91c2VVcD4Jc2Nyb2xsLnR4dAkvKjxTLU1vdXNlVXA+KgorPFMtUmlnaHQ+CW1vdGlvbi50eHQJLyo8Uy1SaWdodD4qCis8Uy1SaWdodE1vdXNlPgl0ZXJtLnR4dAkvKjxTLVJpZ2h0TW91c2U+KgorPFMtVGFiPgl0ZXJtLnR4dAkvKjxTLVRhYj4qCis8Uy1VcD4Jc2Nyb2xsLnR4dAkvKjxTLVVwPioKKzxTLXhGMT4JdGVybS50eHQJLyo8Uy14RjE+KgorPFMteEYyPgl0ZXJtLnR4dAkvKjxTLXhGMj4qCis8Uy14RjM+CXRlcm0udHh0CS8qPFMteEYzPioKKzxTLXhGND4JdGVybS50eHQJLyo8Uy14RjQ+KgorPFNJRD4JbWFwLnR4dAkvKjxTSUQ+KgorPFNOUj4JbWFwLnR4dAkvKjxTTlI+KgorPFNwYWNlPgltb3Rpb24udHh0CS8qPFNwYWNlPioKKzxUYWI+CW1vdGlvbi50eHQJLyo8VGFiPioKKzxVbmRvPgl1bmRvLnR4dAkvKjxVbmRvPioKKzxVcD4JbW90aW9uLnR4dAkvKjxVcD4qCis8YWJ1Zj4JY21kbGluZS50eHQJLyo8YWJ1Zj4qCis8YWZpbGU+CWNtZGxpbmUudHh0CS8qPGFmaWxlPioKKzxhbWF0Y2g+CWNtZGxpbmUudHh0CS8qPGFtYXRjaD4qCis8YXJncz4JbWFwLnR4dAkvKjxhcmdzPioKKzxiYW5nPgltYXAudHh0CS8qPGJhbmc+KgorPGNmaWxlPgljbWRsaW5lLnR4dAkvKjxjZmlsZT4qCis8Y2hhcmFjdGVyPglpbnRyby50eHQJLyo8Y2hhcmFjdGVyPioKKzxjb3VudD4JbWFwLnR4dAkvKjxjb3VudD4qCis8azA+CXRlcm0udHh0CS8qPGswPioKKzxrMT4JdGVybS50eHQJLyo8azE+KgorPGsyPgl0ZXJtLnR4dAkvKjxrMj4qCis8azM+CXRlcm0udHh0CS8qPGszPioKKzxrND4JdGVybS50eHQJLyo8azQ+KgorPGs1Pgl0ZXJtLnR4dAkvKjxrNT4qCis8azY+CXRlcm0udHh0CS8qPGs2PioKKzxrNz4JdGVybS50eHQJLyo8azc+KgorPGs4Pgl0ZXJtLnR4dAkvKjxrOD4qCis8azk+CXRlcm0udHh0CS8qPGs5PioKKzxrRGl2aWRlPgl0ZXJtLnR4dAkvKjxrRGl2aWRlPioKKzxrRW5kPgltb3Rpb24udHh0CS8qPGtFbmQ+KgorPGtFbnRlcj4JdGVybS50eHQJLyo8a0VudGVyPioKKzxrSG9tZT4JbW90aW9uLnR4dAkvKjxrSG9tZT4qCis8a01pbnVzPgl0ZXJtLnR4dAkvKjxrTWludXM+KgorPGtNdWx0aXBseT4JdGVybS50eHQJLyo8a011bHRpcGx5PioKKzxrUGFnZURvd24+CXNjcm9sbC50eHQJLyo8a1BhZ2VEb3duPioKKzxrUGFnZVVwPglzY3JvbGwudHh0CS8qPGtQYWdlVXA+KgorPGtQbHVzPgl0ZXJtLnR4dAkvKjxrUGx1cz4qCis8a1BvaW50Pgl0ZXJtLnR4dAkvKjxrUG9pbnQ+KgorPGxpbmUxPgltYXAudHh0CS8qPGxpbmUxPioKKzxsaW5lMj4JbWFwLnR4dAkvKjxsaW5lMj4qCis8bHQ+CWludHJvLnR4dAkvKjxsdD4qCis8cS1hcmdzPgltYXAudHh0CS8qPHEtYXJncz4qCis8cmVnPgltYXAudHh0CS8qPHJlZz4qCis8cmVnaXN0ZXI+CW1hcC50eHQJLyo8cmVnaXN0ZXI+KgorPHNmaWxlPgljbWRsaW5lLnR4dAkvKjxzZmlsZT4qCis8eENTST4JaW50cm8udHh0CS8qPHhDU0k+KgorPHhFbmQ+CXRlcm0udHh0CS8qPHhFbmQ+KgorPHhFbmQ+LXh0ZXJtCXRlcm0udHh0CS8qPHhFbmQ+LXh0ZXJtKgorPHhGMT4JdGVybS50eHQJLyo8eEYxPioKKzx4RjE+LXh0ZXJtCXRlcm0udHh0CS8qPHhGMT4teHRlcm0qCis8eEYyPgl0ZXJtLnR4dAkvKjx4RjI+KgorPHhGMj4teHRlcm0JdGVybS50eHQJLyo8eEYyPi14dGVybSoKKzx4RjM+CXRlcm0udHh0CS8qPHhGMz4qCis8eEYzPi14dGVybQl0ZXJtLnR4dAkvKjx4RjM+LXh0ZXJtKgorPHhGND4JdGVybS50eHQJLyo8eEY0PioKKzx4RjQ+LXh0ZXJtCXRlcm0udHh0CS8qPHhGND4teHRlcm0qCis8eEhvbWU+CXRlcm0udHh0CS8qPHhIb21lPioKKzx4SG9tZT4teHRlcm0JdGVybS50eHQJLyo8eEhvbWU+LXh0ZXJtKgorPQljaGFuZ2UudHh0CS8qPSoKKz09CWNoYW5nZS50eHQJLyo9PSoKKz4JY2hhbmdlLnR4dAkvKj4qCis+PgljaGFuZ2UudHh0CS8qPj4qCis+Y29udAlyZXBlYXQudHh0CS8qPmNvbnQqCis+ZmluaXNoCXJlcGVhdC50eHQJLyo+ZmluaXNoKgorPmludGVycnVwdAlyZXBlYXQudHh0CS8qPmludGVycnVwdCoKKz5uZXh0CXJlcGVhdC50eHQJLyo+bmV4dCoKKz5xdWl0CXJlcGVhdC50eHQJLyo+cXVpdCoKKz5zdGVwCXJlcGVhdC50eHQJLyo+c3RlcCoKKz8JcGF0dGVybi50eHQJLyo/KgorPzxDUj4JcGF0dGVybi50eHQJLyo/PENSPioKK0AJcmVwZWF0LnR4dAkvKkAqCitALwljaGFuZ2UudHh0CS8qQFwvKgorQDoJcmVwZWF0LnR4dAkvKkA6KgorQEAJcmVwZWF0LnR4dAkvKkBAKgorQQlpbnNlcnQudHh0CS8qQSoKK0FDTAllZGl0aW5nLnR4dAkvKkFDTCoKK0FUVEVOVElPTgl1c3JfMTEudHh0CS8qQVRURU5USU9OKgorQWJicmV2aWF0aW9ucwltYXAudHh0CS8qQWJicmV2aWF0aW9ucyoKK0FsZXBoCW9wdGlvbnMudHh0CS8qQWxlcGgqCitBbWlnYQlvc19hbWlnYS50eHQJLypBbWlnYSoKK0FyYWJpYwlhcmFiaWMudHh0CS8qQXJhYmljKgorQXRhcmkJb3NfbWludC50eHQJLypBdGFyaSoKK0F0aGVuYQlndWlfeDExLnR4dAkvKkF0aGVuYSoKK0IJbW90aW9uLnR4dAkvKkIqCitCZUJveAlvc19iZW9zLnR4dAkvKkJlQm94KgorQmVPUwlvc19iZW9zLnR4dAkvKkJlT1MqCitCdWZBZGQJYXV0b2NtZC50eHQJLypCdWZBZGQqCitCdWZDcmVhdGUJYXV0b2NtZC50eHQJLypCdWZDcmVhdGUqCitCdWZEZWxldGUJYXV0b2NtZC50eHQJLypCdWZEZWxldGUqCitCdWZFbnRlcglhdXRvY21kLnR4dAkvKkJ1ZkVudGVyKgorQnVmRmlsZVBvc3QJYXV0b2NtZC50eHQJLypCdWZGaWxlUG9zdCoKK0J1ZkZpbGVQcmUJYXV0b2NtZC50eHQJLypCdWZGaWxlUHJlKgorQnVmSGlkZGVuCWF1dG9jbWQudHh0CS8qQnVmSGlkZGVuKgorQnVmTGVhdmUJYXV0b2NtZC50eHQJLypCdWZMZWF2ZSoKK0J1Zk5ldwlhdXRvY21kLnR4dAkvKkJ1Zk5ldyoKK0J1Zk5ld0ZpbGUJYXV0b2NtZC50eHQJLypCdWZOZXdGaWxlKgorQnVmUmVhZAlhdXRvY21kLnR4dAkvKkJ1ZlJlYWQqCitCdWZSZWFkQ21kCWF1dG9jbWQudHh0CS8qQnVmUmVhZENtZCoKK0J1ZlJlYWRQb3N0CWF1dG9jbWQudHh0CS8qQnVmUmVhZFBvc3QqCitCdWZSZWFkUHJlCWF1dG9jbWQudHh0CS8qQnVmUmVhZFByZSoKK0J1ZlVubG9hZAlhdXRvY21kLnR4dAkvKkJ1ZlVubG9hZCoKK0J1ZldpbkVudGVyCWF1dG9jbWQudHh0CS8qQnVmV2luRW50ZXIqCitCdWZXaW5MZWF2ZQlhdXRvY21kLnR4dAkvKkJ1ZldpbkxlYXZlKgorQnVmV2lwZW91dAlhdXRvY21kLnR4dAkvKkJ1ZldpcGVvdXQqCitCdWZXcml0ZQlhdXRvY21kLnR4dAkvKkJ1ZldyaXRlKgorQnVmV3JpdGVDbWQJYXV0b2NtZC50eHQJLypCdWZXcml0ZUNtZCoKK0J1ZldyaXRlUG9zdAlhdXRvY21kLnR4dAkvKkJ1ZldyaXRlUG9zdCoKK0J1ZldyaXRlUHJlCWF1dG9jbWQudHh0CS8qQnVmV3JpdGVQcmUqCitDCWNoYW5nZS50eHQJLypDKgorQy1lZGl0aW5nCXRpcHMudHh0CS8qQy1lZGl0aW5nKgorQy1pbmRlbnRpbmcJaW5kZW50LnR4dAkvKkMtaW5kZW50aW5nKgorQ09NU1BFQwlzdGFydGluZy50eHQJLypDT01TUEVDKgorQ1ItdXNlZC1mb3ItTkwJcGF0dGVybi50eHQJLypDUi11c2VkLWZvci1OTCoKK0NUUkwtNgllZGl0aW5nLnR4dAkvKkNUUkwtNioKK0NUUkwtQQljaGFuZ2UudHh0CS8qQ1RSTC1BKgorQ1RSTC1CCXNjcm9sbC50eHQJLypDVFJMLUIqCitDVFJMLUMJcGF0dGVybi50eHQJLypDVFJMLUMqCitDVFJMLUQJc2Nyb2xsLnR4dAkvKkNUUkwtRCoKK0NUUkwtRQlzY3JvbGwudHh0CS8qQ1RSTC1FKgorQ1RSTC1GCXNjcm9sbC50eHQJLypDVFJMLUYqCitDVFJMLUcJZWRpdGluZy50eHQJLypDVFJMLUcqCitDVFJMLUgJbW90aW9uLnR4dAkvKkNUUkwtSCoKK0NUUkwtSQltb3Rpb24udHh0CS8qQ1RSTC1JKgorQ1RSTC1KCW1vdGlvbi50eHQJLypDVFJMLUoqCitDVFJMLUwJdmFyaW91cy50eHQJLypDVFJMLUwqCitDVFJMLU0JbW90aW9uLnR4dAkvKkNUUkwtTSoKK0NUUkwtTgltb3Rpb24udHh0CS8qQ1RSTC1OKgorQ1RSTC1PCW1vdGlvbi50eHQJLypDVFJMLU8qCitDVFJMLVAJbW90aW9uLnR4dAkvKkNUUkwtUCoKK0NUUkwtUgl1bmRvLnR4dAkvKkNUUkwtUioKK0NUUkwtVAl0YWdzcmNoLnR4dAkvKkNUUkwtVCoKK0NUUkwtVQlzY3JvbGwudHh0CS8qQ1RSTC1VKgorQ1RSTC1VLWNoYW5nZWQJdmVyc2lvbjYudHh0CS8qQ1RSTC1VLWNoYW5nZWQqCitDVFJMLVYJdmlzdWFsLnR4dAkvKkNUUkwtVioKK0NUUkwtVi1hbHRlcm5hdGl2ZQlndWlfdzMyLnR4dAkvKkNUUkwtVi1hbHRlcm5hdGl2ZSoKK0NUUkwtVwlpbmRleC50eHQJLypDVFJMLVcqCitDVFJMLVdfKwl3aW5kb3dzLnR4dAkvKkNUUkwtV18rKgorQ1RSTC1XXy0Jd2luZG93cy50eHQJLypDVFJMLVdfLSoKK0NUUkwtV188CXdpbmRvd3MudHh0CS8qQ1RSTC1XXzwqCitDVFJMLVdfPEJTPgl3aW5kb3dzLnR4dAkvKkNUUkwtV188QlM+KgorQ1RSTC1XXzxEb3duPgl3aW5kb3dzLnR4dAkvKkNUUkwtV188RG93bj4qCitDVFJMLVdfPExlZnQ+CXdpbmRvd3MudHh0CS8qQ1RSTC1XXzxMZWZ0PioKK0NUUkwtV188UmlnaHQ+CXdpbmRvd3MudHh0CS8qQ1RSTC1XXzxSaWdodD4qCitDVFJMLVdfPFVwPgl3aW5kb3dzLnR4dAkvKkNUUkwtV188VXA+KgorQ1RSTC1XXz0Jd2luZG93cy50eHQJLypDVFJMLVdfPSoKK0NUUkwtV18+CXdpbmRvd3MudHh0CS8qQ1RSTC1XXz4qCitDVFJMLVdfQ1RSTC1CCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtQioKK0NUUkwtV19DVFJMLUMJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1DKgorQ1RSTC1XX0NUUkwtRAl0YWdzcmNoLnR4dAkvKkNUUkwtV19DVFJMLUQqCitDVFJMLVdfQ1RSTC1GCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtRioKK0NUUkwtV19DVFJMLUgJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1IKgorQ1RSTC1XX0NUUkwtSQl0YWdzcmNoLnR4dAkvKkNUUkwtV19DVFJMLUkqCitDVFJMLVdfQ1RSTC1KCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtSioKK0NUUkwtV19DVFJMLUsJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1LKgorQ1RSTC1XX0NUUkwtTAl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLUwqCitDVFJMLVdfQ1RSTC1OCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtTioKK0NUUkwtV19DVFJMLU8Jd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1PKgorQ1RSTC1XX0NUUkwtUAl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLVAqCitDVFJMLVdfQ1RSTC1RCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtUSoKK0NUUkwtV19DVFJMLVIJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1SKgorQ1RSTC1XX0NUUkwtUwl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLVMqCitDVFJMLVdfQ1RSTC1UCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtVCoKK0NUUkwtV19DVFJMLVYJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1WKgorQ1RSTC1XX0NUUkwtVwl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLVcqCitDVFJMLVdfQ1RSTC1YCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtWCoKK0NUUkwtV19DVFJMLVoJd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1aKgorQ1RSTC1XX0NUUkwtXQl3aW5kb3dzLnR4dAkvKkNUUkwtV19DVFJMLV0qCitDVFJMLVdfQ1RSTC1eCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0NUUkwtXioKK0NUUkwtV19DVFJMLV8Jd2luZG93cy50eHQJLypDVFJMLVdfQ1RSTC1fKgorQ1RSTC1XX0gJd2luZG93cy50eHQJLypDVFJMLVdfSCoKK0NUUkwtV19KCXdpbmRvd3MudHh0CS8qQ1RSTC1XX0oqCitDVFJMLVdfSwl3aW5kb3dzLnR4dAkvKkNUUkwtV19LKgorQ1RSTC1XX0wJd2luZG93cy50eHQJLypDVFJMLVdfTCoKK0NUUkwtV19QCXdpbmRvd3MudHh0CS8qQ1RSTC1XX1AqCitDVFJMLVdfUgl3aW5kb3dzLnR4dAkvKkNUUkwtV19SKgorQ1RSTC1XX1MJd2luZG93cy50eHQJLypDVFJMLVdfUyoKK0NUUkwtV19XCXdpbmRvd3MudHh0CS8qQ1RSTC1XX1cqCitDVFJMLVdfXQl3aW5kb3dzLnR4dAkvKkNUUkwtV19dKgorQ1RSTC1XX14Jd2luZG93cy50eHQJLypDVFJMLVdfXioKK0NUUkwtV19fCXdpbmRvd3MudHh0CS8qQ1RSTC1XX18qCitDVFJMLVdfYgl3aW5kb3dzLnR4dAkvKkNUUkwtV19iKgorQ1RSTC1XX2Jhcgl3aW5kb3dzLnR4dAkvKkNUUkwtV19iYXIqCitDVFJMLVdfYwl3aW5kb3dzLnR4dAkvKkNUUkwtV19jKgorQ1RSTC1XX2QJdGFnc3JjaC50eHQJLypDVFJMLVdfZCoKK0NUUkwtV19mCXdpbmRvd3MudHh0CS8qQ1RSTC1XX2YqCitDVFJMLVdfZ10Jd2luZG93cy50eHQJLypDVFJMLVdfZ10qCitDVFJMLVdfZ19DVFJMLV0Jd2luZG93cy50eHQJLypDVFJMLVdfZ19DVFJMLV0qCitDVFJMLVdfZ30Jd2luZG93cy50eHQJLypDVFJMLVdfZ30qCitDVFJMLVdfaAl3aW5kb3dzLnR4dAkvKkNUUkwtV19oKgorQ1RSTC1XX2kJdGFnc3JjaC50eHQJLypDVFJMLVdfaSoKK0NUUkwtV19qCXdpbmRvd3MudHh0CS8qQ1RSTC1XX2oqCitDVFJMLVdfawl3aW5kb3dzLnR4dAkvKkNUUkwtV19rKgorQ1RSTC1XX2wJd2luZG93cy50eHQJLypDVFJMLVdfbCoKK0NUUkwtV19uCXdpbmRvd3MudHh0CS8qQ1RSTC1XX24qCitDVFJMLVdfbwl3aW5kb3dzLnR4dAkvKkNUUkwtV19vKgorQ1RSTC1XX3AJd2luZG93cy50eHQJLypDVFJMLVdfcCoKK0NUUkwtV19xCXdpbmRvd3MudHh0CS8qQ1RSTC1XX3EqCitDVFJMLVdfcgl3aW5kb3dzLnR4dAkvKkNUUkwtV19yKgorQ1RSTC1XX3MJd2luZG93cy50eHQJLypDVFJMLVdfcyoKK0NUUkwtV190CXdpbmRvd3MudHh0CS8qQ1RSTC1XX3QqCitDVFJMLVdfdgl3aW5kb3dzLnR4dAkvKkNUUkwtV192KgorQ1RSTC1XX3cJd2luZG93cy50eHQJLypDVFJMLVdfdyoKK0NUUkwtV194CXdpbmRvd3MudHh0CS8qQ1RSTC1XX3gqCitDVFJMLVdfegl3aW5kb3dzLnR4dAkvKkNUUkwtV196KgorQ1RSTC1XX30Jd2luZG93cy50eHQJLypDVFJMLVdffSoKK0NUUkwtWAljaGFuZ2UudHh0CS8qQ1RSTC1YKgorQ1RSTC1ZCXNjcm9sbC50eHQJLypDVFJMLVkqCitDVFJMLVoJc3RhcnRpbmcudHh0CS8qQ1RSTC1aKgorQ1RSTC1cX0NUUkwtRwlpbnRyby50eHQJLypDVFJMLVxcX0NUUkwtRyoKK0NUUkwtXF9DVFJMLU4JaW50cm8udHh0CS8qQ1RSTC1cXF9DVFJMLU4qCitDVFJMLV0JdGFnc3JjaC50eHQJLypDVFJMLV0qCitDVFJMLV4JZWRpdGluZy50eHQJLypDVFJMLV4qCitDVFJMLXtjaGFyfQlpbnRyby50eHQJLypDVFJMLXtjaGFyfSoKK0NoaW5lc2UJbWJ5dGUudHh0CS8qQ2hpbmVzZSoKK0NtZC1ldmVudAlhdXRvY21kLnR4dAkvKkNtZC1ldmVudCoKK0NtZGxpbmUJY21kbGluZS50eHQJLypDbWRsaW5lKgorQ21kbGluZS1tb2RlCWNtZGxpbmUudHh0CS8qQ21kbGluZS1tb2RlKgorQ21kd2luRW50ZXIJYXV0b2NtZC50eHQJLypDbWR3aW5FbnRlcioKK0NtZHdpbkxlYXZlCWF1dG9jbWQudHh0CS8qQ21kd2luTGVhdmUqCitDb21tYW5kLWxpbmUJY21kbGluZS50eHQJLypDb21tYW5kLWxpbmUqCitDb21tYW5kLWxpbmUtbW9kZQljbWRsaW5lLnR4dAkvKkNvbW1hbmQtbGluZS1tb2RlKgorQ29udGVudHMJcXVpY2tyZWYudHh0CS8qQ29udGVudHMqCitDc2NvcGUJaWZfY3Njb3AudHh0CS8qQ3Njb3BlKgorQ3Vyc29ySG9sZAlhdXRvY21kLnR4dAkvKkN1cnNvckhvbGQqCitDdXJzb3JIb2xkLWV4YW1wbGUJd2luZG93cy50eHQJLypDdXJzb3JIb2xkLWV4YW1wbGUqCitDdXJzb3JJTQltYnl0ZS50eHQJLypDdXJzb3JJTSoKK0QJY2hhbmdlLnR4dAkvKkQqCitET1MJb3NfZG9zLnR4dAkvKkRPUyoKK0RPUy1mb3JtYXQJZWRpdGluZy50eHQJLypET1MtZm9ybWF0KgorRE9TLWZvcm1hdC13cml0ZQllZGl0aW5nLnR4dAkvKkRPUy1mb3JtYXQtd3JpdGUqCitEUE1JCW9zX21zZG9zLnR4dAkvKkRQTUkqCitEaWdyYXBocwlkaWdyYXBoLnR4dAkvKkRpZ3JhcGhzKgorRQltb3Rpb24udHh0CS8qRSoKK0UxMAltZXNzYWdlLnR4dAkvKkUxMCoKK0UxMDAJZGlmZi50eHQJLypFMTAwKgorRTEwMQlkaWZmLnR4dAkvKkUxMDEqCitFMTAyCWRpZmYudHh0CS8qRTEwMioKK0UxMDMJZGlmZi50eHQJLypFMTAzKgorRTEwNAlkaWdyYXBoLnR4dAkvKkUxMDQqCitFMTA1CW1ieXRlLnR4dAkvKkUxMDUqCitFMTA2CWV2YWwudHh0CS8qRTEwNioKK0UxMDcJZXZhbC50eHQJLypFMTA3KgorRTEwOAlldmFsLnR4dAkvKkUxMDgqCitFMTA5CWV2YWwudHh0CS8qRTEwOSoKK0UxMQljbWRsaW5lLnR4dAkvKkUxMSoKK0UxMTAJZXZhbC50eHQJLypFMTEwKgorRTExMQlldmFsLnR4dAkvKkUxMTEqCitFMTEyCWV2YWwudHh0CS8qRTExMioKK0UxMTMJZXZhbC50eHQJLypFMTEzKgorRTExNAlldmFsLnR4dAkvKkUxMTQqCitFMTE1CWV2YWwudHh0CS8qRTExNSoKK0UxMTYJZXZhbC50eHQJLypFMTE2KgorRTExNwlldmFsLnR4dAkvKkUxMTcqCitFMTE4CWV2YWwudHh0CS8qRTExOCoKK0UxMTkJZXZhbC50eHQJLypFMTE5KgorRTEyCW1lc3NhZ2UudHh0CS8qRTEyKgorRTEyMAlldmFsLnR4dAkvKkUxMjAqCitFMTIxCWV2YWwudHh0CS8qRTEyMSoKK0UxMjIJZXZhbC50eHQJLypFMTIyKgorRTEyMwlldmFsLnR4dAkvKkUxMjMqCitFMTI0CWV2YWwudHh0CS8qRTEyNCoKK0UxMjUJZXZhbC50eHQJLypFMTI1KgorRTEyNglldmFsLnR4dAkvKkUxMjYqCitFMTI3CWV2YWwudHh0CS8qRTEyNyoKK0UxMjgJZXZhbC50eHQJLypFMTI4KgorRTEyOQlldmFsLnR4dAkvKkUxMjkqCitFMTMJbWVzc2FnZS50eHQJLypFMTMqCitFMTMwCWV2YWwudHh0CS8qRTEzMCoKK0UxMzEJZXZhbC50eHQJLypFMTMxKgorRTEzMglldmFsLnR4dAkvKkUxMzIqCitFMTMzCWV2YWwudHh0CS8qRTEzMyoKK0UxMzQJY2hhbmdlLnR4dAkvKkUxMzQqCitFMTM1CWF1dG9jbWQudHh0CS8qRTEzNSoKK0UxMzYJc3RhcnRpbmcudHh0CS8qRTEzNioKK0UxMzcJc3RhcnRpbmcudHh0CS8qRTEzNyoKK0UxMzgJc3RhcnRpbmcudHh0CS8qRTEzOCoKK0UxMzkJbWVzc2FnZS50eHQJLypFMTM5KgorRTE0CWNtZGxpbmUudHh0CS8qRTE0KgorRTE0MAltZXNzYWdlLnR4dAkvKkUxNDAqCitFMTQxCW1lc3NhZ2UudHh0CS8qRTE0MSoKK0UxNDIJbWVzc2FnZS50eHQJLypFMTQyKgorRTE0MwlhdXRvY21kLnR4dAkvKkUxNDMqCitFMTQ0CXZhcmlvdXMudHh0CS8qRTE0NCoKK0UxNDUJc3RhcnRpbmcudHh0CS8qRTE0NSoKK0UxNDYJY2hhbmdlLnR4dAkvKkUxNDYqCitFMTQ3CXJlcGVhdC50eHQJLypFMTQ3KgorRTE0OAlyZXBlYXQudHh0CS8qRTE0OCoKK0UxNDkJdmFyaW91cy50eHQJLypFMTQ5KgorRTE1CWV2YWwudHh0CS8qRTE1KgorRTE1MAl2YXJpb3VzLnR4dAkvKkUxNTAqCitFMTUxCXZhcmlvdXMudHh0CS8qRTE1MSoKK0UxNTIJdmFyaW91cy50eHQJLypFMTUyKgorRTE1Mwl2YXJpb3VzLnR4dAkvKkUxNTMqCitFMTU0CXZhcmlvdXMudHh0CS8qRTE1NCoKK0UxNTUJc2lnbi50eHQJLypFMTU1KgorRTE1NglzaWduLnR4dAkvKkUxNTYqCitFMTU3CXNpZ24udHh0CS8qRTE1NyoKK0UxNTgJc2lnbi50eHQJLypFMTU4KgorRTE1OQlzaWduLnR4dAkvKkUxNTkqCitFMTYJY21kbGluZS50eHQJLypFMTYqCitFMTYwCXNpZ24udHh0CS8qRTE2MCoKK0UxNjEJcmVwZWF0LnR4dAkvKkUxNjEqCitFMTYyCW1lc3NhZ2UudHh0CS8qRTE2MioKK0UxNjMJZWRpdGluZy50eHQJLypFMTYzKgorRTE2NAllZGl0aW5nLnR4dAkvKkUxNjQqCitFMTY1CWVkaXRpbmcudHh0CS8qRTE2NSoKK0UxNjYJbWVzc2FnZS50eHQJLypFMTY2KgorRTE2NwlyZXBlYXQudHh0CS8qRTE2NyoKK0UxNjgJcmVwZWF0LnR4dAkvKkUxNjgqCitFMTY5CW1lc3NhZ2UudHh0CS8qRTE2OSoKK0UxNwltZXNzYWdlLnR4dAkvKkUxNyoKK0UxNzAJZXZhbC50eHQJLypFMTcwKgorRTE3MQlldmFsLnR4dAkvKkUxNzEqCitFMTcyCW1lc3NhZ2UudHh0CS8qRTE3MioKK0UxNzMJbWVzc2FnZS50eHQJLypFMTczKgorRTE3NAltYXAudHh0CS8qRTE3NCoKK0UxNzUJbWFwLnR4dAkvKkUxNzUqCitFMTc2CW1hcC50eHQJLypFMTc2KgorRTE3NwltYXAudHh0CS8qRTE3NyoKK0UxNzgJbWFwLnR4dAkvKkUxNzgqCitFMTc5CW1hcC50eHQJLypFMTc5KgorRTE4CWV2YWwudHh0CS8qRTE4KgorRTE4MAltYXAudHh0CS8qRTE4MCoKK0UxODEJbWFwLnR4dAkvKkUxODEqCitFMTgyCW1hcC50eHQJLypFMTgyKgorRTE4MwltYXAudHh0CS8qRTE4MyoKK0UxODQJbWFwLnR4dAkvKkUxODQqCitFMTg1CXN5bnRheC50eHQJLypFMTg1KgorRTE4NgllZGl0aW5nLnR4dAkvKkUxODYqCitFMTg3CWVkaXRpbmcudHh0CS8qRTE4NyoKK0UxODgJZ3VpLnR4dAkvKkUxODgqCitFMTg5CW1lc3NhZ2UudHh0CS8qRTE4OSoKK0UxOQltZXNzYWdlLnR4dAkvKkUxOSoKK0UxOTAJbWVzc2FnZS50eHQJLypFMTkwKgorRTE5MQltb3Rpb24udHh0CS8qRTE5MSoKK0UxOTIJbWVzc2FnZS50eHQJLypFMTkyKgorRTE5MwlldmFsLnR4dAkvKkUxOTMqCitFMTk0CW1lc3NhZ2UudHh0CS8qRTE5NCoKK0UxOTUJc3RhcnRpbmcudHh0CS8qRTE5NSoKK0UxOTYJdmFyaW91cy50eHQJLypFMTk2KgorRTE5NwltbGFuZy50eHQJLypFMTk3KgorRTE5OAlvcHRpb25zLnR4dAkvKkUxOTgqCitFMTk5CWNtZGxpbmUudHh0CS8qRTE5OSoKK0UyMAltb3Rpb24udHh0CS8qRTIwKgorRTIwMAlhdXRvY21kLnR4dAkvKkUyMDAqCitFMjAxCWF1dG9jbWQudHh0CS8qRTIwMSoKK0UyMDIJb3B0aW9ucy50eHQJLypFMjAyKgorRTIwMwlhdXRvY21kLnR4dAkvKkUyMDMqCitFMjA0CWF1dG9jbWQudHh0CS8qRTIwNCoKK0UyMDUJaWZfcHl0aC50eHQJLypFMjA1KgorRTIwNglvcHRpb25zLnR4dAkvKkUyMDYqCitFMjA3CWVkaXRpbmcudHh0CS8qRTIwNyoKK0UyMDgJbWVzc2FnZS50eHQJLypFMjA4KgorRTIwOQltZXNzYWdlLnR4dAkvKkUyMDkqCitFMjEJb3B0aW9ucy50eHQJLypFMjEqCitFMjEwCW1lc3NhZ2UudHh0CS8qRTIxMCoKK0UyMTEJbWVzc2FnZS50eHQJLypFMjExKgorRTIxMgltZXNzYWdlLnR4dAkvKkUyMTIqCitFMjEzCW9wdGlvbnMudHh0CS8qRTIxMyoKK0UyMTQJb3B0aW9ucy50eHQJLypFMjE0KgorRTIxNQlhdXRvY21kLnR4dAkvKkUyMTUqCitFMjE2CWF1dG9jbWQudHh0CS8qRTIxNioKK0UyMTcJYXV0b2NtZC50eHQJLypFMjE3KgorRTIxOAlhdXRvY21kLnR4dAkvKkUyMTgqCitFMjE5CW1lc3NhZ2UudHh0CS8qRTIxOSoKK0UyMgltZXNzYWdlLnR4dAkvKkUyMioKK0UyMjAJbWVzc2FnZS50eHQJLypFMjIwKgorRTIyMgltZXNzYWdlLnR4dAkvKkUyMjIqCitFMjIzCW9wdGlvbnMudHh0CS8qRTIyMyoKK0UyMjQJbWFwLnR4dAkvKkUyMjQqCitFMjI1CW1hcC50eHQJLypFMjI1KgorRTIyNgltYXAudHh0CS8qRTIyNioKK0UyMjcJbWFwLnR4dAkvKkUyMjcqCitFMjI4CW1lc3NhZ2UudHh0CS8qRTIyOCoKK0UyMjkJZ3VpLnR4dAkvKkUyMjkqCitFMjMJbWVzc2FnZS50eHQJLypFMjMqCitFMjMwCXN0YXJ0aW5nLnR4dAkvKkUyMzAqCitFMjMxCW9wdGlvbnMudHh0CS8qRTIzMSoKK0UyMzIJbWVzc2FnZS50eHQJLypFMjMyKgorRTIzMwlndWkudHh0CS8qRTIzMyoKK0UyMzQJb3B0aW9ucy50eHQJLypFMjM0KgorRTIzNQlvcHRpb25zLnR4dAkvKkUyMzUqCitFMjM2CW9wdGlvbnMudHh0CS8qRTIzNioKK0UyMzcJdmFyaW91cy50eHQJLypFMjM3KgorRTIzOAl2YXJpb3VzLnR4dAkvKkUyMzgqCitFMjM5CXNpZ24udHh0CS8qRTIzOSoKK0UyNAltZXNzYWdlLnR4dAkvKkUyNCoKK0UyNDAJcmVtb3RlLnR4dAkvKkUyNDAqCitFMjQxCWV2YWwudHh0CS8qRTI0MSoKK0UyNDMJaWZfb2xlLnR4dAkvKkUyNDMqCitFMjQ0CW9wdGlvbnMudHh0CS8qRTI0NCoKK0UyNDUJb3B0aW9ucy50eHQJLypFMjQ1KgorRTI0NglhdXRvY21kLnR4dAkvKkUyNDYqCitFMjQ3CXJlbW90ZS50eHQJLypFMjQ3KgorRTI0OAlyZW1vdGUudHh0CS8qRTI0OCoKK0UyNQltZXNzYWdlLnR4dAkvKkUyNSoKK0UyNTAJb3B0aW9ucy50eHQJLypFMjUwKgorRTI1MQlyZW1vdGUudHh0CS8qRTI1MSoKK0UyNTIJb3B0aW9ucy50eHQJLypFMjUyKgorRTI1MwltYnl0ZS50eHQJLypFMjUzKgorRTI1NAltZXNzYWdlLnR4dAkvKkUyNTQqCitFMjU1CXNpZ24udHh0CS8qRTI1NSoKK0UyNTYJbWVzc2FnZS50eHQJLypFMjU2KgorRTI1NwlpZl9jc2NvcC50eHQJLypFMjU3KgorRTI1OAlyZW1vdGUudHh0CS8qRTI1OCoKK0UyNTkJaWZfY3Njb3AudHh0CS8qRTI1OSoKK0UyNglyaWxlZnQudHh0CS8qRTI2KgorRTI2MAlpZl9jc2NvcC50eHQJLypFMjYwKgorRTI2MQlpZl9jc2NvcC50eHQJLypFMjYxKgorRTI2MglpZl9jc2NvcC50eHQJLypFMjYyKgorRTI2MwlpZl9weXRoLnR4dAkvKkUyNjMqCitFMjY0CWlmX3B5dGgudHh0CS8qRTI2NCoKK0UyNjUJaWZfcnVieS50eHQJLypFMjY1KgorRTI2NglpZl9ydWJ5LnR4dAkvKkUyNjYqCitFMjY3CWlmX3J1YnkudHh0CS8qRTI2NyoKK0UyNjgJaWZfcnVieS50eHQJLypFMjY4KgorRTI2OQlpZl9ydWJ5LnR4dAkvKkUyNjkqCitFMjcJZmFyc2kudHh0CS8qRTI3KgorRTI3MAlpZl9ydWJ5LnR4dAkvKkUyNzAqCitFMjcxCWlmX3J1YnkudHh0CS8qRTI3MSoKK0UyNzIJaWZfcnVieS50eHQJLypFMjcyKgorRTI3MwlpZl9ydWJ5LnR4dAkvKkUyNzMqCitFMjc0CWlmX3NuaWZmLnR4dAkvKkUyNzQqCitFMjc1CWlmX3NuaWZmLnR4dAkvKkUyNzUqCitFMjc2CWlmX3NuaWZmLnR4dAkvKkUyNzYqCitFMjc3CXJlbW90ZS50eHQJLypFMjc3KgorRTI3OAlpZl9zbmlmZi50eHQJLypFMjc4KgorRTI3OQlpZl9zbmlmZi50eHQJLypFMjc5KgorRTI4CXN5bnRheC50eHQJLypFMjgqCitFMjgwCWlmX3RjbC50eHQJLypFMjgwKgorRTI4MQlpZl90Y2wudHh0CS8qRTI4MSoKK0UyODIJc3RhcnRpbmcudHh0CS8qRTI4MioKK0UyODMJbW90aW9uLnR4dAkvKkUyODMqCitFMjg0CW1ieXRlLnR4dAkvKkUyODQqCitFMjg1CW1ieXRlLnR4dAkvKkUyODUqCitFMjg2CW1ieXRlLnR4dAkvKkUyODYqCitFMjg3CW1ieXRlLnR4dAkvKkUyODcqCitFMjg4CW1ieXRlLnR4dAkvKkUyODgqCitFMjg5CW1ieXRlLnR4dAkvKkUyODkqCitFMjkJY2hhbmdlLnR4dAkvKkUyOSoKK0UyOTAJbWJ5dGUudHh0CS8qRTI5MCoKK0UyOTEJbWJ5dGUudHh0CS8qRTI5MSoKK0UyOTIJbWJ5dGUudHh0CS8qRTI5MioKK0UyOTMJbWVzc2FnZS50eHQJLypFMjkzKgorRTI5NAltZXNzYWdlLnR4dAkvKkUyOTQqCitFMjk1CW1lc3NhZ2UudHh0CS8qRTI5NSoKK0UyOTYJbWVzc2FnZS50eHQJLypFMjk2KgorRTI5NwltZXNzYWdlLnR4dAkvKkUyOTcqCitFMjk4CW1lc3NhZ2UudHh0CS8qRTI5OCoKK0UyOTkJaWZfcGVybC50eHQJLypFMjk5KgorRTMwCWNoYW5nZS50eHQJLypFMzAqCitFMzAwCW1lc3NhZ2UudHh0CS8qRTMwMCoKK0UzMDEJbWVzc2FnZS50eHQJLypFMzAxKgorRTMwMgltZXNzYWdlLnR4dAkvKkUzMDIqCitFMzAzCW1lc3NhZ2UudHh0CS8qRTMwMyoKK0UzMDQJbWVzc2FnZS50eHQJLypFMzA0KgorRTMwNQlyZWNvdmVyLnR4dAkvKkUzMDUqCitFMzA2CXJlY292ZXIudHh0CS8qRTMwNioKK0UzMDcJcmVjb3Zlci50eHQJLypFMzA3KgorRTMwOAlyZWNvdmVyLnR4dAkvKkUzMDgqCitFMzA5CXJlY292ZXIudHh0CS8qRTMwOSoKK0UzMQltZXNzYWdlLnR4dAkvKkUzMSoKK0UzMTAJcmVjb3Zlci50eHQJLypFMzEwKgorRTMxMQlyZWNvdmVyLnR4dAkvKkUzMTEqCitFMzEyCXJlY292ZXIudHh0CS8qRTMxMioKK0UzMTMJcmVjb3Zlci50eHQJLypFMzEzKgorRTMxNAlyZWNvdmVyLnR4dAkvKkUzMTQqCitFMzE1CW1lc3NhZ2UudHh0CS8qRTMxNSoKK0UzMTYJbWVzc2FnZS50eHQJLypFMzE2KgorRTMxNwltZXNzYWdlLnR4dAkvKkUzMTcqCitFMzE4CW1lc3NhZ2UudHh0CS8qRTMxOCoKK0UzMTkJbWVzc2FnZS50eHQJLypFMzE5KgorRTMyCW1lc3NhZ2UudHh0CS8qRTMyKgorRTMyMAltZXNzYWdlLnR4dAkvKkUzMjAqCitFMzIxCWVkaXRpbmcudHh0CS8qRTMyMSoKK0UzMjIJbWVzc2FnZS50eHQJLypFMzIyKgorRTMyMwltZXNzYWdlLnR4dAkvKkUzMjMqCitFMzI0CXZhcmlvdXMudHh0CS8qRTMyNCoKK0UzMjUJdXNyXzExLnR4dAkvKkUzMjUqCitFMzI2CXJlY292ZXIudHh0CS8qRTMyNioKK0UzMjcJZ3VpLnR4dAkvKkUzMjcqCitFMzI4CWd1aS50eHQJLypFMzI4KgorRTMyOQlndWkudHh0CS8qRTMyOSoKK0UzMwltZXNzYWdlLnR4dAkvKkUzMyoKK0UzMzAJZ3VpLnR4dAkvKkUzMzAqCitFMzMxCWd1aS50eHQJLypFMzMxKgorRTMzMglndWkudHh0CS8qRTMzMioKK0UzMzMJZ3VpLnR4dAkvKkUzMzMqCitFMzM0CWd1aS50eHQJLypFMzM0KgorRTMzNQlndWkudHh0CS8qRTMzNSoKK0UzMzYJZ3VpLnR4dAkvKkUzMzYqCitFMzM3CWd1aS50eHQJLypFMzM3KgorRTMzOAllZGl0aW5nLnR4dAkvKkUzMzgqCitFMzM5CW1lc3NhZ2UudHh0CS8qRTMzOSoKK0UzNAl2YXJpb3VzLnR4dAkvKkUzNCoKK0UzNDAJdmlfZGlmZi50eHQJLypFMzQwKgorRTM0MQltZXNzYWdlLnR4dAkvKkUzNDEqCitFMzQyCW1lc3NhZ2UudHh0CS8qRTM0MioKK0UzNDMJb3B0aW9ucy50eHQJLypFMzQzKgorRTM0NAlvcHRpb25zLnR4dAkvKkUzNDQqCitFMzQ1CW9wdGlvbnMudHh0CS8qRTM0NSoKK0UzNDYJb3B0aW9ucy50eHQJLypFMzQ2KgorRTM0NwlvcHRpb25zLnR4dAkvKkUzNDcqCitFMzQ4CXBhdHRlcm4udHh0CS8qRTM0OCoKK0UzNDkJcGF0dGVybi50eHQJLypFMzQ5KgorRTM1CW1lc3NhZ2UudHh0CS8qRTM1KgorRTM1MAlmb2xkLnR4dAkvKkUzNTAqCitFMzUxCWZvbGQudHh0CS8qRTM1MSoKK0UzNTIJZm9sZC50eHQJLypFMzUyKgorRTM1MwljaGFuZ2UudHh0CS8qRTM1MyoKK0UzNTQJY2hhbmdlLnR4dAkvKkUzNTQqCitFMzU1CW9wdGlvbnMudHh0CS8qRTM1NSoKK0UzNTYJbWVzc2FnZS50eHQJLypFMzU2KgorRTM1NwlvcHRpb25zLnR4dAkvKkUzNTcqCitFMzU4CW9wdGlvbnMudHh0CS8qRTM1OCoKK0UzNTkJdGVybS50eHQJLypFMzU5KgorRTM2CXdpbmRvd3MudHh0CS8qRTM2KgorRTM2MAl2YXJpb3VzLnR4dAkvKkUzNjAqCitFMzYxCXBhdHRlcm4udHh0CS8qRTM2MSoKK0UzNjIJdGVybS50eHQJLypFMzYyKgorRTM2MwlwYXR0ZXJuLnR4dAkvKkUzNjMqCitFMzY0CWV2YWwudHh0CS8qRTM2NCoKK0UzNjUJb3B0aW9ucy50eHQJLypFMzY1KgorRTM2NglvcHRpb25zLnR4dAkvKkUzNjYqCitFMzY3CWF1dG9jbWQudHh0CS8qRTM2NyoKK0UzNjgJZXZhbC50eHQJLypFMzY4KgorRTM2OQlwYXR0ZXJuLnR4dAkvKkUzNjkqCitFMzcJbWVzc2FnZS50eHQJLypFMzcqCitFMzcwCXZhcmlvdXMudHh0CS8qRTM3MCoKK0UzNzEJdmFyaW91cy50eHQJLypFMzcxKgorRTM3MglxdWlja2ZpeC50eHQJLypFMzcyKgorRTM3MwlxdWlja2ZpeC50eHQJLypFMzczKgorRTM3NAlxdWlja2ZpeC50eHQJLypFMzc0KgorRTM3NQlxdWlja2ZpeC50eHQJLypFMzc1KgorRTM3NglxdWlja2ZpeC50eHQJLypFMzc2KgorRTM3NwlxdWlja2ZpeC50eHQJLypFMzc3KgorRTM3OAlxdWlja2ZpeC50eHQJLypFMzc4KgorRTM3OQlxdWlja2ZpeC50eHQJLypFMzc5KgorRTM4CW1lc3NhZ2UudHh0CS8qRTM4KgorRTM4MAlxdWlja2ZpeC50eHQJLypFMzgwKgorRTM4MQlxdWlja2ZpeC50eHQJLypFMzgxKgorRTM4MglvcHRpb25zLnR4dAkvKkUzODIqCitFMzgzCXBhdHRlcm4udHh0CS8qRTM4MyoKK0UzODQJb3B0aW9ucy50eHQJLypFMzg0KgorRTM4NQlvcHRpb25zLnR4dAkvKkUzODUqCitFMzg2CXBhdHRlcm4udHh0CS8qRTM4NioKK0UzODcJdGFnc3JjaC50eHQJLypFMzg3KgorRTM4OAl0YWdzcmNoLnR4dAkvKkUzODgqCitFMzg5CXRhZ3NyY2gudHh0CS8qRTM4OSoKK0UzOQlkaWdyYXBoLnR4dAkvKkUzOSoKK0UzOTAJc3ludGF4LnR4dAkvKkUzOTAqCitFMzkxCXN5bnRheC50eHQJLypFMzkxKgorRTM5MglzeW50YXgudHh0CS8qRTM5MioKK0UzOTMJc3ludGF4LnR4dAkvKkUzOTMqCitFMzk0CXN5bnRheC50eHQJLypFMzk0KgorRTM5NQlzeW50YXgudHh0CS8qRTM5NSoKK0UzOTYJc3ludGF4LnR4dAkvKkUzOTYqCitFMzk3CXN5bnRheC50eHQJLypFMzk3KgorRTM5OAlzeW50YXgudHh0CS8qRTM5OCoKK0UzOTkJc3ludGF4LnR4dAkvKkUzOTkqCitFNDAJbWVzc2FnZS50eHQJLypFNDAqCitFNDAwCXN5bnRheC50eHQJLypFNDAwKgorRTQwMQlzeW50YXgudHh0CS8qRTQwMSoKK0U0MDIJc3ludGF4LnR4dAkvKkU0MDIqCitFNDAzCXN5bnRheC50eHQJLypFNDAzKgorRTQwNAlzeW50YXgudHh0CS8qRTQwNCoKK0U0MDUJc3ludGF4LnR4dAkvKkU0MDUqCitFNDA2CXN5bnRheC50eHQJLypFNDA2KgorRTQwNwlzeW50YXgudHh0CS8qRTQwNyoKK0U0MDgJc3ludGF4LnR4dAkvKkU0MDgqCitFNDA5CXN5bnRheC50eHQJLypFNDA5KgorRTQxCW1lc3NhZ2UudHh0CS8qRTQxKgorRTQxMAlzeW50YXgudHh0CS8qRTQxMCoKK0U0MTEJc3ludGF4LnR4dAkvKkU0MTEqCitFNDEyCXN5bnRheC50eHQJLypFNDEyKgorRTQxMwlzeW50YXgudHh0CS8qRTQxMyoKK0U0MTQJc3ludGF4LnR4dAkvKkU0MTQqCitFNDE1CXN5bnRheC50eHQJLypFNDE1KgorRTQxNglzeW50YXgudHh0CS8qRTQxNioKK0U0MTcJc3ludGF4LnR4dAkvKkU0MTcqCitFNDE4CXN5bnRheC50eHQJLypFNDE4KgorRTQxOQlzeW50YXgudHh0CS8qRTQxOSoKK0U0MglxdWlja2ZpeC50eHQJLypFNDIqCitFNDIwCXN5bnRheC50eHQJLypFNDIwKgorRTQyMQlzeW50YXgudHh0CS8qRTQyMSoKK0U0MjIJc3ludGF4LnR4dAkvKkU0MjIqCitFNDIzCXN5bnRheC50eHQJLypFNDIzKgorRTQyNAltZXNzYWdlLnR4dAkvKkU0MjQqCitFNDI1CXRhZ3NyY2gudHh0CS8qRTQyNSoKK0U0MjYJdGFnc3JjaC50eHQJLypFNDI2KgorRTQyNwl0YWdzcmNoLnR4dAkvKkU0MjcqCitFNDI4CXRhZ3NyY2gudHh0CS8qRTQyOCoKK0U0MjkJdGFnc3JjaC50eHQJLypFNDI5KgorRTQzCW1lc3NhZ2UudHh0CS8qRTQzKgorRTQzMAl0YWdzcmNoLnR4dAkvKkU0MzAqCitFNDMxCXRhZ3NyY2gudHh0CS8qRTQzMSoKK0U0MzIJbWVzc2FnZS50eHQJLypFNDMyKgorRTQzMwlvcHRpb25zLnR4dAkvKkU0MzMqCitFNDM0CXRhZ3NyY2gudHh0CS8qRTQzNCoKK0U0MzUJdGFnc3JjaC50eHQJLypFNDM1KgorRTQzNgl0ZXJtLnR4dAkvKkU0MzYqCitFNDM3CXRlcm0udHh0CS8qRTQzNyoKK0U0MzgJbWVzc2FnZS50eHQJLypFNDM4KgorRTQzOQltZXNzYWdlLnR4dAkvKkU0MzkqCitFNDQJbWVzc2FnZS50eHQJLypFNDQqCitFNDQwCW1lc3NhZ2UudHh0CS8qRTQ0MCoKK0U0NDEJd2luZG93cy50eHQJLypFNDQxKgorRTQ0Mgl3aW5kb3dzLnR4dAkvKkU0NDIqCitFNDQzCXdpbmRvd3MudHh0CS8qRTQ0MyoKK0U0NDQJd2luZG93cy50eHQJLypFNDQ0KgorRTQ0NQl3aW5kb3dzLnR4dAkvKkU0NDUqCitFNDQ2CWVkaXRpbmcudHh0CS8qRTQ0NioKK0U0NDcJZWRpdGluZy50eHQJLypFNDQ3KgorRTQ0OAl2YXJpb3VzLnR4dAkvKkU0NDgqCitFNDQ5CWV2YWwudHh0CS8qRTQ0OSoKK0U0NQltZXNzYWdlLnR4dAkvKkU0NSoKK0U0NTAJb3NfbXNkb3MudHh0CS8qRTQ1MCoKK0U0NTEJb3NfbXNkb3MudHh0CS8qRTQ1MSoKK0U0NTIJb3NfbXNkb3MudHh0CS8qRTQ1MioKK0U0NTMJb3NfbXNkb3MudHh0CS8qRTQ1MyoKK0U0NTQJb3NfbXNkb3MudHh0CS8qRTQ1NCoKK0U0NTUJdmFyaW91cy50eHQJLypFNDU1KgorRTQ1Ngl2YXJpb3VzLnR4dAkvKkU0NTYqCitFNDU3CXZhcmlvdXMudHh0CS8qRTQ1NyoKK0U0NTgJbWVzc2FnZS50eHQJLypFNDU4KgorRTQ1OQltZXNzYWdlLnR4dAkvKkU0NTkqCitFNDYJbWVzc2FnZS50eHQJLypFNDYqCitFNDYwCW1lc3NhZ2UudHh0CS8qRTQ2MCoKK0U0NjEJZXZhbC50eHQJLypFNDYxKgorRTQ2MgllZGl0aW5nLnR4dAkvKkU0NjIqCitFNDYzCW5ldGJlYW5zLnR4dAkvKkU0NjMqCitFNDY0CW1lc3NhZ2UudHh0CS8qRTQ2NCoKK0U0NjUJZ3VpLnR4dAkvKkU0NjUqCitFNDY2CWd1aS50eHQJLypFNDY2KgorRTQ2NwltYXAudHh0CS8qRTQ2NyoKK0U0NjgJbWFwLnR4dAkvKkU0NjgqCitFNDY5CWlmX2NzY29wLnR4dAkvKkU0NjkqCitFNDcJbWVzc2FnZS50eHQJLypFNDcqCitFNDcwCWNoYW5nZS50eHQJLypFNDcwKgorRTQ3MQltZXNzYWdlLnR4dAkvKkU0NzEqCitFNDcyCWVkaXRpbmcudHh0CS8qRTQ3MioKK0U0NzMJbWVzc2FnZS50eHQJLypFNDczKgorRTQ3NAltZXNzYWdlLnR4dAkvKkU0NzQqCitFNDc1CW1lc3NhZ2UudHh0CS8qRTQ3NSoKK0U0NzYJcGF0dGVybi50eHQJLypFNDc2KgorRTQ3NwltZXNzYWdlLnR4dAkvKkU0NzcqCitFNDc4CW1lc3NhZ2UudHh0CS8qRTQ3OCoKK0U0NzkJZWRpdGluZy50eHQJLypFNDc5KgorRTQ4CWV2YWwudHh0CS8qRTQ4KgorRTQ4MAllZGl0aW5nLnR4dAkvKkU0ODAqCitFNDgxCW1lc3NhZ2UudHh0CS8qRTQ4MSoKK0U0ODIJbWVzc2FnZS50eHQJLypFNDgyKgorRTQ4MwltZXNzYWdlLnR4dAkvKkU0ODMqCitFNDg0CW1lc3NhZ2UudHh0CS8qRTQ4NCoKK0U0ODUJbWVzc2FnZS50eHQJLypFNDg1KgorRTQ4NglwYXR0ZXJuLnR4dAkvKkU0ODYqCitFNDg3CW9wdGlvbnMudHh0CS8qRTQ4NyoKK0U0ODgJbWVzc2FnZS50eHQJLypFNDg4KgorRTQ4OQlpbnRyby50eHQJLypFNDg5KgorRTQ5CW1lc3NhZ2UudHh0CS8qRTQ5KgorRTQ5MAlmb2xkLnR4dAkvKkU0OTAqCitFNDkyCW1lc3NhZ2UudHh0CS8qRTQ5MioKK0U0OTMJY21kbGluZS50eHQJLypFNDkzKgorRTQ5NAllZGl0aW5nLnR4dAkvKkU0OTQqCitFNDk1CWNtZGxpbmUudHh0CS8qRTQ5NSoKK0U0OTYJY21kbGluZS50eHQJLypFNDk2KgorRTQ5NwljbWRsaW5lLnR4dAkvKkU0OTcqCitFNDk4CWNtZGxpbmUudHh0CS8qRTQ5OCoKK0U0OTkJY21kbGluZS50eHQJLypFNDk5KgorRTUwCXN5bnRheC50eHQJLypFNTAqCitFNTAwCWNtZGxpbmUudHh0CS8qRTUwMCoKK0U1MDEJaW50cm8udHh0CS8qRTUwMSoKK0U1MDIJZWRpdGluZy50eHQJLypFNTAyKgorRTUwMwllZGl0aW5nLnR4dAkvKkU1MDMqCitFNTA0CWVkaXRpbmcudHh0CS8qRTUwNCoKK0U1MDUJZWRpdGluZy50eHQJLypFNTA1KgorRTUwNgllZGl0aW5nLnR4dAkvKkU1MDYqCitFNTA3CWVkaXRpbmcudHh0CS8qRTUwNyoKK0U1MDgJZWRpdGluZy50eHQJLypFNTA4KgorRTUwOQllZGl0aW5nLnR4dAkvKkU1MDkqCitFNTEJcGF0dGVybi50eHQJLypFNTEqCitFNTEwCWVkaXRpbmcudHh0CS8qRTUxMCoKK0U1MTIJZWRpdGluZy50eHQJLypFNTEyKgorRTUxMwlvcHRpb25zLnR4dAkvKkU1MTMqCitFNTE0CWVkaXRpbmcudHh0CS8qRTUxNCoKK0U1MTUJd2luZG93cy50eHQJLypFNTE1KgorRTUxNgl3aW5kb3dzLnR4dAkvKkU1MTYqCitFNTE3CXdpbmRvd3MudHh0CS8qRTUxNyoKK0U1MTgJb3B0aW9ucy50eHQJLypFNTE4KgorRTUxOQlvcHRpb25zLnR4dAkvKkU1MTkqCitFNTIJc3ludGF4LnR4dAkvKkU1MioKK0U1MjAJb3B0aW9ucy50eHQJLypFNTIwKgorRTUyMQlvcHRpb25zLnR4dAkvKkU1MjEqCitFNTIyCW9wdGlvbnMudHh0CS8qRTUyMioKK0U1MjMJb3B0aW9ucy50eHQJLypFNTIzKgorRTUyNAlvcHRpb25zLnR4dAkvKkU1MjQqCitFNTI1CW9wdGlvbnMudHh0CS8qRTUyNSoKK0U1MjYJb3B0aW9ucy50eHQJLypFNTI2KgorRTUyNwlvcHRpb25zLnR4dAkvKkU1MjcqCitFNTI4CW9wdGlvbnMudHh0CS8qRTUyOCoKK0U1MjkJb3B0aW9ucy50eHQJLypFNTI5KgorRTUzCXBhdHRlcm4udHh0CS8qRTUzKgorRTUzMAlvcHRpb25zLnR4dAkvKkU1MzAqCitFNTMxCW9wdGlvbnMudHh0CS8qRTUzMSoKK0U1MzMJb3B0aW9ucy50eHQJLypFNTMzKgorRTUzNAlvcHRpb25zLnR4dAkvKkU1MzQqCitFNTM1CW9wdGlvbnMudHh0CS8qRTUzNSoKK0U1MzYJb3B0aW9ucy50eHQJLypFNTM2KgorRTUzNwlvcHRpb25zLnR4dAkvKkU1MzcqCitFNTM4CW9wdGlvbnMudHh0CS8qRTUzOCoKK0U1MzkJb3B0aW9ucy50eHQJLypFNTM5KgorRTU0CXBhdHRlcm4udHh0CS8qRTU0KgorRTU0MAlvcHRpb25zLnR4dAkvKkU1NDAqCitFNTQxCW9wdGlvbnMudHh0CS8qRTU0MSoKK0U1NDIJb3B0aW9ucy50eHQJLypFNTQyKgorRTU0MwlvcHRpb25zLnR4dAkvKkU1NDMqCitFNTQ0CW9wdGlvbnMudHh0CS8qRTU0NCoKK0U1NDUJb3B0aW9ucy50eHQJLypFNTQ1KgorRTU0NglvcHRpb25zLnR4dAkvKkU1NDYqCitFNTQ3CW9wdGlvbnMudHh0CS8qRTU0NyoKK0U1NDgJb3B0aW9ucy50eHQJLypFNTQ4KgorRTU0OQlvcHRpb25zLnR4dAkvKkU1NDkqCitFNTUJcGF0dGVybi50eHQJLypFNTUqCitFNTUwCW9wdGlvbnMudHh0CS8qRTU1MCoKK0U1NTEJb3B0aW9ucy50eHQJLypFNTUxKgorRTU1MglvcHRpb25zLnR4dAkvKkU1NTIqCitFNTUzCXF1aWNrZml4LnR4dAkvKkU1NTMqCitFNTU0CXBhdHRlcm4udHh0CS8qRTU1NCoKK0U1NTUJdGFnc3JjaC50eHQJLypFNTU1KgorRTU1Ngl0YWdzcmNoLnR4dAkvKkU1NTYqCitFNTU3CXRlcm0udHh0CS8qRTU1NyoKK0U1NTgJdGVybS50eHQJLypFNTU4KgorRTU1OQl0ZXJtLnR4dAkvKkU1NTkqCitFNTYJcGF0dGVybi50eHQJLypFNTYqCitFNTYwCWlmX2NzY29wLnR4dAkvKkU1NjAqCitFNTYxCWlmX2NzY29wLnR4dAkvKkU1NjEqCitFNTYyCWlmX2NzY29wLnR4dAkvKkU1NjIqCitFNTYzCWlmX2NzY29wLnR4dAkvKkU1NjMqCitFNTY0CWlmX2NzY29wLnR4dAkvKkU1NjQqCitFNTY1CWlmX2NzY29wLnR4dAkvKkU1NjUqCitFNTY2CWlmX2NzY29wLnR4dAkvKkU1NjYqCitFNTY3CWlmX2NzY29wLnR4dAkvKkU1NjcqCitFNTY4CWlmX2NzY29wLnR4dAkvKkU1NjgqCitFNTY5CWlmX2NzY29wLnR4dAkvKkU1NjkqCitFNTcJcGF0dGVybi50eHQJLypFNTcqCitFNTcwCW1lc3NhZ2UudHh0CS8qRTU3MCoKK0U1NzEJaWZfdGNsLnR4dAkvKkU1NzEqCitFNTcyCWlmX3RjbC50eHQJLypFNTcyKgorRTU3MwlyZW1vdGUudHh0CS8qRTU3MyoKK0U1NzQJc3RhcnRpbmcudHh0CS8qRTU3NCoKK0U1NzUJc3RhcnRpbmcudHh0CS8qRTU3NSoKK0U1NzYJc3RhcnRpbmcudHh0CS8qRTU3NioKK0U1NzcJc3RhcnRpbmcudHh0CS8qRTU3NyoKK0U1NzgJZWRpdGluZy50eHQJLypFNTc4KgorRTU3OQlldmFsLnR4dAkvKkU1NzkqCitFNTgJcGF0dGVybi50eHQJLypFNTgqCitFNTgwCWV2YWwudHh0CS8qRTU4MCoKK0U1ODEJZXZhbC50eHQJLypFNTgxKgorRTU4MglldmFsLnR4dAkvKkU1ODIqCitFNTgzCWV2YWwudHh0CS8qRTU4MyoKK0U1ODQJZXZhbC50eHQJLypFNTg0KgorRTU4NQlldmFsLnR4dAkvKkU1ODUqCitFNTg2CWV2YWwudHh0CS8qRTU4NioKK0U1ODcJZXZhbC50eHQJLypFNTg3KgorRTU4OAlldmFsLnR4dAkvKkU1ODgqCitFNTg5CW9wdGlvbnMudHh0CS8qRTU4OSoKK0U1OQlwYXR0ZXJuLnR4dAkvKkU1OSoKK0U1OTAJb3B0aW9ucy50eHQJLypFNTkwKgorRTU5MQlvcHRpb25zLnR4dAkvKkU1OTEqCitFNTkyCW9wdGlvbnMudHh0CS8qRTU5MioKK0U1OTMJb3B0aW9ucy50eHQJLypFNTkzKgorRTU5NAlvcHRpb25zLnR4dAkvKkU1OTQqCitFNTk1CW9wdGlvbnMudHh0CS8qRTU5NSoKK0U1OTYJb3B0aW9ucy50eHQJLypFNTk2KgorRTU5NwlvcHRpb25zLnR4dAkvKkU1OTcqCitFNTk4CW9wdGlvbnMudHh0CS8qRTU5OCoKK0U2MAlwYXR0ZXJuLnR4dAkvKkU2MCoKK0U2MDAJZXZhbC50eHQJLypFNjAwKgorRTYwMQlldmFsLnR4dAkvKkU2MDEqCitFNjAyCWV2YWwudHh0CS8qRTYwMioKK0U2MDMJZXZhbC50eHQJLypFNjAzKgorRTYwNAlldmFsLnR4dAkvKkU2MDQqCitFNjA1CWV2YWwudHh0CS8qRTYwNSoKK0U2MDYJZXZhbC50eHQJLypFNjA2KgorRTYwNwlldmFsLnR4dAkvKkU2MDcqCitFNjA4CWV2YWwudHh0CS8qRTYwOCoKK0U2MDkJaWZfY3Njb3AudHh0CS8qRTYwOSoKK0U2MQlwYXR0ZXJuLnR4dAkvKkU2MSoKK0U2MTAJb3B0aW9ucy50eHQJLypFNjEwKgorRTYxMQlvcHRpb25zLnR4dAkvKkU2MTEqCitFNjEyCXNpZ24udHh0CS8qRTYxMioKK0U2MTMJb3B0aW9ucy50eHQJLypFNjEzKgorRTYxNAllZGl0aW5nLnR4dAkvKkU2MTQqCitFNjE1CWVkaXRpbmcudHh0CS8qRTYxNSoKK0U2MTYJZWRpdGluZy50eHQJLypFNjE2KgorRTYxNwlvcHRpb25zLnR4dAkvKkU2MTcqCitFNjE4CXZhcmlvdXMudHh0CS8qRTYxOCoKK0U2MTkJdmFyaW91cy50eHQJLypFNjE5KgorRTYyCXBhdHRlcm4udHh0CS8qRTYyKgorRTYyMAlvcHRpb25zLnR4dAkvKkU2MjAqCitFNjIxCXZhcmlvdXMudHh0CS8qRTYyMSoKK0U2MjIJaWZfY3Njb3AudHh0CS8qRTYyMioKK0U2MjMJaWZfY3Njb3AudHh0CS8qRTYyMyoKK0U2MjQJdmFyaW91cy50eHQJLypFNjI0KgorRTYyNQlpZl9jc2NvcC50eHQJLypFNjI1KgorRTYyNglpZl9jc2NvcC50eHQJLypFNjI2KgorRTYyNwluZXRiZWFucy50eHQJLypFNjI3KgorRTYyOAluZXRiZWFucy50eHQJLypFNjI4KgorRTYyOQluZXRiZWFucy50eHQJLypFNjI5KgorRTYzCXBhdHRlcm4udHh0CS8qRTYzKgorRTYzMAluZXRiZWFucy50eHQJLypFNjMwKgorRTYzMQluZXRiZWFucy50eHQJLypFNjMxKgorRTYzMgluZXRiZWFucy50eHQJLypFNjMyKgorRTYzMwluZXRiZWFucy50eHQJLypFNjMzKgorRTYzNAluZXRiZWFucy50eHQJLypFNjM0KgorRTYzNQluZXRiZWFucy50eHQJLypFNjM1KgorRTYzNgluZXRiZWFucy50eHQJLypFNjM2KgorRTYzNwluZXRiZWFucy50eHQJLypFNjM3KgorRTYzOAluZXRiZWFucy50eHQJLypFNjM4KgorRTYzOQluZXRiZWFucy50eHQJLypFNjM5KgorRTY0CXBhdHRlcm4udHh0CS8qRTY0KgorRTY0MAluZXRiZWFucy50eHQJLypFNjQwKgorRTY0MQluZXRiZWFucy50eHQJLypFNjQxKgorRTY0MgluZXRiZWFucy50eHQJLypFNjQyKgorRTY0MwluZXRiZWFucy50eHQJLypFNjQzKgorRTY0NAluZXRiZWFucy50eHQJLypFNjQ0KgorRTY0NQluZXRiZWFucy50eHQJLypFNjQ1KgorRTY0NgluZXRiZWFucy50eHQJLypFNjQ2KgorRTY0NwluZXRiZWFucy50eHQJLypFNjQ3KgorRTY0OAluZXRiZWFucy50eHQJLypFNjQ4KgorRTY0OQluZXRiZWFucy50eHQJLypFNjQ5KgorRTY1CXBhdHRlcm4udHh0CS8qRTY1KgorRTY1MAluZXRiZWFucy50eHQJLypFNjUwKgorRTY1MQluZXRiZWFucy50eHQJLypFNjUxKgorRTY1MgluZXRiZWFucy50eHQJLypFNjUyKgorRTY1MwluZXRiZWFucy50eHQJLypFNjUzKgorRTY1NAluZXRiZWFucy50eHQJLypFNjU0KgorRTY1NQlldmFsLnR4dAkvKkU2NTUqCitFNjU2CW5ldGJlYW5zLnR4dAkvKkU2NTYqCitFNjU3CW5ldGJlYW5zLnR4dAkvKkU2NTcqCitFNjU4CW5ldGJlYW5zLnR4dAkvKkU2NTgqCitFNjU5CWlmX3B5dGgudHh0CS8qRTY1OSoKK0U2NglzeW50YXgudHh0CS8qRTY2KgorRTY2MAluZXRiZWFucy50eHQJLypFNjYwKgorRTY2MQl2YXJpb3VzLnR4dAkvKkU2NjEqCitFNjYyCW1vdGlvbi50eHQJLypFNjYyKgorRTY2Mwltb3Rpb24udHh0CS8qRTY2MyoKK0U2NjQJbW90aW9uLnR4dAkvKkU2NjQqCitFNjY1CWd1aV94MTEudHh0CS8qRTY2NSoKK0U2NjYJcXVpY2tmaXgudHh0CS8qRTY2NioKK0U2NjcJZWRpdGluZy50eHQJLypFNjY3KgorRTY2OAluZXRiZWFucy50eHQJLypFNjY4KgorRTY2OQlzeW50YXgudHh0CS8qRTY2OSoKK0U2NwlzeW50YXgudHh0CS8qRTY3KgorRTY3MAl2YXJpb3VzLnR4dAkvKkU2NzAqCitFNjcxCXN0YXJ0aW5nLnR4dAkvKkU2NzEqCitFNjcyCXN0YXJ0aW5nLnR4dAkvKkU2NzIqCitFNjgJcGF0dGVybi50eHQJLypFNjgqCitFNjkJcGF0dGVybi50eHQJLypFNjkqCitFNzAJcGF0dGVybi50eHQJLypFNzAqCitFNzEJcGF0dGVybi50eHQJLypFNzEqCitFNzIJbWVzc2FnZS50eHQJLypFNzIqCitFNzMJdGFnc3JjaC50eHQJLypFNzMqCitFNzQJbWVzc2FnZS50eHQJLypFNzQqCitFNzUJdmlfZGlmZi50eHQJLypFNzUqCitFNzYJcGF0dGVybi50eHQJLypFNzYqCitFNzcJbWVzc2FnZS50eHQJLypFNzcqCitFNzgJbW90aW9uLnR4dAkvKkU3OCoKK0U3OQltZXNzYWdlLnR4dAkvKkU3OSoKK0U4MAltZXNzYWdlLnR4dAkvKkU4MCoKK0U4MDAJYXJhYmljLnR4dAkvKkU4MDAqCitFODEJbWFwLnR4dAkvKkU4MSoKK0U4MgltZXNzYWdlLnR4dAkvKkU4MioKK0U4MwltZXNzYWdlLnR4dAkvKkU4MyoKK0U4NAl3aW5kb3dzLnR4dAkvKkU4NCoKK0U4NQlvcHRpb25zLnR4dAkvKkU4NSoKK0U4Ngl3aW5kb3dzLnR4dAkvKkU4NioKK0U4Nwl3aW5kb3dzLnR4dAkvKkU4NyoKK0U4OAl3aW5kb3dzLnR4dAkvKkU4OCoKK0U4OQltZXNzYWdlLnR4dAkvKkU4OSoKK0U5MAltZXNzYWdlLnR4dAkvKkU5MCoKK0U5MQlvcHRpb25zLnR4dAkvKkU5MSoKK0U5MgltZXNzYWdlLnR4dAkvKkU5MioKK0U5Mwl3aW5kb3dzLnR4dAkvKkU5MyoKK0U5NAl3aW5kb3dzLnR4dAkvKkU5NCoKK0U5NQltZXNzYWdlLnR4dAkvKkU5NSoKK0U5NglkaWZmLnR4dAkvKkU5NioKK0U5NwlkaWZmLnR4dAkvKkU5NyoKK0U5OAlkaWZmLnR4dAkvKkU5OCoKK0U5OQlkaWZmLnR4dAkvKkU5OSoKK0VYCWludHJvLnR4dAkvKkVYKgorRVhJTklUCXN0YXJ0aW5nLnR4dAkvKkVYSU5JVCoKK0VsdmlzCWludHJvLnR4dAkvKkVsdmlzKgorRW5jb2RpbmdDaGFuZ2VkCWF1dG9jbWQudHh0CS8qRW5jb2RpbmdDaGFuZ2VkKgorRXRlcm0Jc3ludGF4LnR4dAkvKkV0ZXJtKgorRXgJaW50cm8udHh0CS8qRXgqCitFeC1tb2RlCWludHJvLnR4dAkvKkV4LW1vZGUqCitGCW1vdGlvbi50eHQJLypGKgorRkFRCWludHJvLnR4dAkvKkZBUSoKK0ZhcnNpCWZhcnNpLnR4dAkvKkZhcnNpKgorRmlsZUFwcGVuZENtZAlhdXRvY21kLnR4dAkvKkZpbGVBcHBlbmRDbWQqCitGaWxlQXBwZW5kUG9zdAlhdXRvY21kLnR4dAkvKkZpbGVBcHBlbmRQb3N0KgorRmlsZUFwcGVuZFByZQlhdXRvY21kLnR4dAkvKkZpbGVBcHBlbmRQcmUqCitGaWxlQ2hhbmdlZFJPCWF1dG9jbWQudHh0CS8qRmlsZUNoYW5nZWRSTyoKK0ZpbGVDaGFuZ2VkU2hlbGwJYXV0b2NtZC50eHQJLypGaWxlQ2hhbmdlZFNoZWxsKgorRmlsZUVuY29kaW5nCWF1dG9jbWQudHh0CS8qRmlsZUVuY29kaW5nKgorRmlsZVJlYWRDbWQJYXV0b2NtZC50eHQJLypGaWxlUmVhZENtZCoKK0ZpbGVSZWFkUG9zdAlhdXRvY21kLnR4dAkvKkZpbGVSZWFkUG9zdCoKK0ZpbGVSZWFkUHJlCWF1dG9jbWQudHh0CS8qRmlsZVJlYWRQcmUqCitGaWxlVHlwZQlhdXRvY21kLnR4dAkvKkZpbGVUeXBlKgorRmlsZVdyaXRlQ21kCWF1dG9jbWQudHh0CS8qRmlsZVdyaXRlQ21kKgorRmlsZVdyaXRlUG9zdAlhdXRvY21kLnR4dAkvKkZpbGVXcml0ZVBvc3QqCitGaWxlV3JpdGVQcmUJYXV0b2NtZC50eHQJLypGaWxlV3JpdGVQcmUqCitGaWx0ZXJSZWFkUG9zdAlhdXRvY21kLnR4dAkvKkZpbHRlclJlYWRQb3N0KgorRmlsdGVyUmVhZFByZQlhdXRvY21kLnR4dAkvKkZpbHRlclJlYWRQcmUqCitGaWx0ZXJXcml0ZVBvc3QJYXV0b2NtZC50eHQJLypGaWx0ZXJXcml0ZVBvc3QqCitGaWx0ZXJXcml0ZVByZQlhdXRvY21kLnR4dAkvKkZpbHRlcldyaXRlUHJlKgorRm9jdXNHYWluZWQJYXV0b2NtZC50eHQJLypGb2N1c0dhaW5lZCoKK0ZvY3VzTG9zdAlhdXRvY21kLnR4dAkvKkZvY3VzTG9zdCoKK0ZvbGRpbmcJZm9sZC50eHQJLypGb2xkaW5nKgorRnVuY1VuZGVmaW5lZAlhdXRvY21kLnR4dAkvKkZ1bmNVbmRlZmluZWQqCitHCW1vdGlvbi50eHQJLypHKgorR05PTUUJZ3VpX3gxMS50eHQJLypHTk9NRSoKK0dUSwlndWlfeDExLnR4dAkvKkdUSyoKK0dUSysJZ3VpX3gxMS50eHQJLypHVEsrKgorR1VJCWd1aS50eHQJLypHVUkqCitHVUktWDExCWd1aV94MTEudHh0CS8qR1VJLVgxMSoKK0dVSUVudGVyCWF1dG9jbWQudHh0CS8qR1VJRW50ZXIqCitHbm9tZQlndWlfeDExLnR4dAkvKkdub21lKgorSAltb3Rpb24udHh0CS8qSCoKK0kJaW5zZXJ0LnR4dAkvKkkqCitJQ0NGCXVnYW5kYS50eHQJLypJQ0NGKgorSU0tc2VydmVyCW1ieXRlLnR4dAkvKklNLXNlcnZlcioKK0lNRQltYnl0ZS50eHQJLypJTUUqCitJbnNlcnQJaW5zZXJ0LnR4dAkvKkluc2VydCoKK0luc2VydC1tb2RlCWluc2VydC50eHQJLypJbnNlcnQtbW9kZSoKK0oJY2hhbmdlLnR4dAkvKkoqCitKYXBhbmVzZQltYnl0ZS50eHQJLypKYXBhbmVzZSoKK0sJdmFyaW91cy50eHQJLypLKgorS29yZWFuCW1ieXRlLnR4dAkvKktvcmVhbioKK0wJbW90aW9uLnR4dAkvKkwqCitMaW51eC1iYWNrc3BhY2UJb3B0aW9ucy50eHQJLypMaW51eC1iYWNrc3BhY2UqCitNCW1vdGlvbi50eHQJLypNKgorTURJCXN0YXJ0aW5nLnR4dAkvKk1ESSoKK01TLURPUwlvc19tc2Rvcy50eHQJLypNUy1ET1MqCitNUy1XaW5kb3dzCW9zX3dpbjMyLnR4dAkvKk1TLVdpbmRvd3MqCitNU0RPUwlvc19tc2Rvcy50eHQJLypNU0RPUyoKK01TVmlzdWFsU3R1ZGlvCWlmX29sZS50eHQJLypNU1Zpc3VhbFN0dWRpbyoKK01WUwlvc18zOTAudHh0CS8qTVZTKgorTWFjCW9zX21hYy50eHQJLypNYWMqCitNYWMtZm9ybWF0CWVkaXRpbmcudHh0CS8qTWFjLWZvcm1hdCoKK01hYy1mb3JtYXQtd3JpdGUJZWRpdGluZy50eHQJLypNYWMtZm9ybWF0LXdyaXRlKgorTWFjaW50b3NoCW9zX21hYy50eHQJLypNYWNpbnRvc2gqCitNYXJrCW1vdGlvbi50eHQJLypNYXJrKgorTWlOVAlvc19taW50LnR4dAkvKk1pTlQqCitNb3JwaE9TCW9zX2FtaWdhLnR4dAkvKk1vcnBoT1MqCitNb3RpZglndWlfeDExLnR4dAkvKk1vdGlmKgorTglwYXR0ZXJuLnR4dAkvKk4qCitOJQltb3Rpb24udHh0CS8qTiUqCitOOgljbWRsaW5lLnR4dAkvKk46KgorTjxEZWw+CXZhcmlvdXMudHh0CS8qTjxEZWw+KgorTkwtdXNlZC1mb3ItTnVsCXBhdHRlcm4udHh0CS8qTkwtdXNlZC1mb3ItTnVsKgorTmV0QlNELWJhY2tzcGFjZQlvcHRpb25zLnR4dAkvKk5ldEJTRC1iYWNrc3BhY2UqCitOb3JtYWwJaW50cm8udHh0CS8qTm9ybWFsKgorTm9ybWFsLW1vZGUJaW50cm8udHh0CS8qTm9ybWFsLW1vZGUqCitOcmVhZAlwaV9uZXRydy50eHQJLypOcmVhZCoKK052aQlpbnRyby50eHQJLypOdmkqCitOd3JpdGUJcGlfbmV0cncudHh0CS8qTndyaXRlKgorTwlpbnNlcnQudHh0CS8qTyoKK09TLzIJb3Nfb3MyLnR4dAkvKk9TXC8yKgorT1MyCW9zX29zMi50eHQJLypPUzIqCitPUzM5MAlvc18zOTAudHh0CS8qT1MzOTAqCitPUzM5MC1Nb3RpZglvc18zOTAudHh0CS8qT1MzOTAtTW90aWYqCitPUzM5MC1idWdzCW9zXzM5MC50eHQJLypPUzM5MC1idWdzKgorT1MzOTAtYnVpbGRpbmcJb3NfMzkwLnR4dAkvKk9TMzkwLWJ1aWxkaW5nKgorT1MzOTAtY2hhbmdlcwlvc18zOTAudHh0CS8qT1MzOTAtY2hhbmdlcyoKK09TMzkwLWZlZWRiYWNrCW9zXzM5MC50eHQJLypPUzM5MC1mZWVkYmFjayoKK09TMzkwLWhhcy1lYmNkaWMJb3NfMzkwLnR4dAkvKk9TMzkwLWhhcy1lYmNkaWMqCitPUzM5MC1vcGVuLXNvdXJjZQlvc18zOTAudHh0CS8qT1MzOTAtb3Blbi1zb3VyY2UqCitPUzM5MC13ZWFrbmVzc2VzCW9zXzM5MC50eHQJLypPUzM5MC13ZWFrbmVzc2VzKgorT1MzOTAteHRlcm0Jb3NfMzkwLnR4dAkvKk9TMzkwLXh0ZXJtKgorT2ZmVGhlU3BvdAltYnl0ZS50eHQJLypPZmZUaGVTcG90KgorT25UaGVTcG90CW1ieXRlLnR4dAkvKk9uVGhlU3BvdCoKK09wZXJhdG9yLXBlbmRpbmcJaW50cm8udHh0CS8qT3BlcmF0b3ItcGVuZGluZyoKK09wZXJhdG9yLXBlbmRpbmctbW9kZQlpbnRyby50eHQJLypPcGVyYXRvci1wZW5kaW5nLW1vZGUqCitPdmVyVGhlU3BvdAltYnl0ZS50eHQJLypPdmVyVGhlU3BvdCoKK1AJY2hhbmdlLnR4dAkvKlAqCitQYXR0ZXJuCXBhdHRlcm4udHh0CS8qUGF0dGVybioKK1BlcmwJaWZfcGVybC50eHQJLypQZXJsKgorUG9zaXgJaW50cm8udHh0CS8qUG9zaXgqCitQeXRob24JaWZfcHl0aC50eHQJLypQeXRob24qCitRCWludHJvLnR4dAkvKlEqCitRLWNvbW1hbmQtY2hhbmdlZAl2ZXJzaW9uNS50eHQJLypRLWNvbW1hbmQtY2hhbmdlZCoKK1FOWAlvc19xbngudHh0CS8qUU5YKgorUV9hYglxdWlja3JlZi50eHQJLypRX2FiKgorUV9hYwlxdWlja3JlZi50eHQJLypRX2FjKgorUV9haQlxdWlja3JlZi50eHQJLypRX2FpKgorUV9idQlxdWlja3JlZi50eHQJLypRX2J1KgorUV9jZQlxdWlja3JlZi50eHQJLypRX2NlKgorUV9jaAlxdWlja3JlZi50eHQJLypRX2NoKgorUV9jbQlxdWlja3JlZi50eHQJLypRX2NtKgorUV9jbwlxdWlja3JlZi50eHQJLypRX2NvKgorUV9jdAloZWxwLnR4dAkvKlFfY3QqCitRX2RlCXF1aWNrcmVmLnR4dAkvKlFfZGUqCitRX2RpCXF1aWNrcmVmLnR4dAkvKlFfZGkqCitRX2VkCXF1aWNrcmVmLnR4dAkvKlFfZWQqCitRX2V0CXF1aWNrcmVmLnR4dAkvKlFfZXQqCitRX2V4CXF1aWNrcmVmLnR4dAkvKlFfZXgqCitRX2ZsCXF1aWNrcmVmLnR4dAkvKlFfZmwqCitRX2ZvCXF1aWNrcmVmLnR4dAkvKlFfZm8qCitRX2d1CXF1aWNrcmVmLnR4dAkvKlFfZ3UqCitRX2luCXF1aWNrcmVmLnR4dAkvKlFfaW4qCitRX2ttCXF1aWNrcmVmLnR4dAkvKlFfa20qCitRX2xyCXF1aWNrcmVmLnR4dAkvKlFfbHIqCitRX21hCXF1aWNrcmVmLnR4dAkvKlFfbWEqCitRX29wCXF1aWNrcmVmLnR4dAkvKlFfb3AqCitRX3BhCXF1aWNrcmVmLnR4dAkvKlFfcGEqCitRX3FmCXF1aWNrcmVmLnR4dAkvKlFfcWYqCitRX3JhCXF1aWNrcmVmLnR4dAkvKlFfcmEqCitRX3JlCXF1aWNrcmVmLnR4dAkvKlFfcmUqCitRX3NjCXF1aWNrcmVmLnR4dAkvKlFfc2MqCitRX3NpCXF1aWNrcmVmLnR4dAkvKlFfc2kqCitRX3NzCXF1aWNrcmVmLnR4dAkvKlFfc3MqCitRX3N0CXF1aWNrcmVmLnR4dAkvKlFfc3QqCitRX3N5CXF1aWNrcmVmLnR4dAkvKlFfc3kqCitRX3RhCXF1aWNrcmVmLnR4dAkvKlFfdGEqCitRX3RtCXF1aWNrcmVmLnR4dAkvKlFfdG0qCitRX3RvCXF1aWNrcmVmLnR4dAkvKlFfdG8qCitRX3VkCXF1aWNrcmVmLnR4dAkvKlFfdWQqCitRX3VyCXF1aWNrcmVmLnR4dAkvKlFfdXIqCitRX3ZjCXF1aWNrcmVmLnR4dAkvKlFfdmMqCitRX3ZpCXF1aWNrcmVmLnR4dAkvKlFfdmkqCitRX3ZtCXF1aWNrcmVmLnR4dAkvKlFfdm0qCitRX3dpCXF1aWNrcmVmLnR4dAkvKlFfd2kqCitRX3dxCXF1aWNrcmVmLnR4dAkvKlFfd3EqCitRdWlja2ZpeAlxdWlja2ZpeC50eHQJLypRdWlja2ZpeCoKK1IJY2hhbmdlLnR4dAkvKlIqCitSSVNDLU9TCW9zX3Jpc2MudHh0CS8qUklTQy1PUyoKK1JJU0NPUwlvc19yaXNjLnR4dAkvKlJJU0NPUyoKK1JlbW90ZVJlcGx5CWF1dG9jbWQudHh0CS8qUmVtb3RlUmVwbHkqCitSZXBsYWNlCWluc2VydC50eHQJLypSZXBsYWNlKgorUmVwbGFjZS1tb2RlCWluc2VydC50eHQJLypSZXBsYWNlLW1vZGUqCitSb290CW1ieXRlLnR4dAkvKlJvb3QqCitSdWJ5CWlmX3J1YnkudHh0CS8qUnVieSoKK1J1c3NpYW4JcnVzc2lhbi50eHQJLypSdXNzaWFuKgorUwljaGFuZ2UudHh0CS8qUyoKK1NIRUxMCXN0YXJ0aW5nLnR4dAkvKlNIRUxMKgorU2VsZWN0CXZpc3VhbC50eHQJLypTZWxlY3QqCitTZWxlY3QtbW9kZQl2aXN1YWwudHh0CS8qU2VsZWN0LW1vZGUqCitTZWxlY3QtbW9kZS1tYXBwaW5nCXZpc3VhbC50eHQJLypTZWxlY3QtbW9kZS1tYXBwaW5nKgorU2Vzc2lvbglzdGFydGluZy50eHQJLypTZXNzaW9uKgorU3RkaW5SZWFkUG9zdAlhdXRvY21kLnR4dAkvKlN0ZGluUmVhZFBvc3QqCitTdGRpblJlYWRQcmUJYXV0b2NtZC50eHQJLypTdGRpblJlYWRQcmUqCitTeW50YXgJYXV0b2NtZC50eHQJLypTeW50YXgqCitUCW1vdGlvbi50eHQJLypUKgorVENMCWlmX3RjbC50eHQJLypUQ0wqCitURVJNCXN0YXJ0aW5nLnR4dAkvKlRFUk0qCitUVHByby10ZWxuZXQJc3ludGF4LnR4dAkvKlRUcHJvLXRlbG5ldCoKK1RhYglpbnRyby50eHQJLypUYWIqCitUY2wJaWZfdGNsLnR4dAkvKlRjbCoKK1Rlcm1DaGFuZ2VkCWF1dG9jbWQudHh0CS8qVGVybUNoYW5nZWQqCitUZXJtUmVzcG9uc2UJYXV0b2NtZC50eHQJLypUZXJtUmVzcG9uc2UqCitVCXVuZG8udHh0CS8qVSoKK1VURi04CW1ieXRlLnR4dAkvKlVURi04KgorVVRGOC14dGVybQltYnl0ZS50eHQJLypVVEY4LXh0ZXJtKgorVWdhbmRhCXVnYW5kYS50eHQJLypVZ2FuZGEqCitVbmljb2RlCW1ieXRlLnR4dAkvKlVuaWNvZGUqCitVbml4CW9zX3VuaXgudHh0CS8qVW5peCoKK1VuaXgtZm9ybWF0CWVkaXRpbmcudHh0CS8qVW5peC1mb3JtYXQqCitVbml4LWZvcm1hdC13cml0ZQllZGl0aW5nLnR4dAkvKlVuaXgtZm9ybWF0LXdyaXRlKgorVXNlcglhdXRvY21kLnR4dAkvKlVzZXIqCitVc2VyR2V0dGluZ0JvcmVkCWF1dG9jbWQudHh0CS8qVXNlckdldHRpbmdCb3JlZCoKK1YJdmlzdWFsLnR4dAkvKlYqCitWSU1JTklUCXN0YXJ0aW5nLnR4dAkvKlZJTUlOSVQqCitWTVMJb3Nfdm1zLnR4dAkvKlZNUyoKK1ZpCWludHJvLnR4dAkvKlZpKgorVmlldwlzdGFydGluZy50eHQJLypWaWV3KgorVmltRW50ZXIJYXV0b2NtZC50eHQJLypWaW1FbnRlcioKK1ZpbUxlYXZlCWF1dG9jbWQudHh0CS8qVmltTGVhdmUqCitWaW1MZWF2ZVByZQlhdXRvY21kLnR4dAkvKlZpbUxlYXZlUHJlKgorVmlydHVhbC1SZXBsYWNlLW1vZGUJaW5zZXJ0LnR4dAkvKlZpcnR1YWwtUmVwbGFjZS1tb2RlKgorVmlzVmltCWlmX29sZS50eHQJLypWaXNWaW0qCitWaXN1YWwJdmlzdWFsLnR4dAkvKlZpc3VhbCoKK1Zpc3VhbC1tb2RlCXZpc3VhbC50eHQJLypWaXN1YWwtbW9kZSoKK1cJbW90aW9uLnR4dAkvKlcqCitXMTAJbWVzc2FnZS50eHQJLypXMTAqCitXMTEJbWVzc2FnZS50eHQJLypXMTEqCitXMTIJbWVzc2FnZS50eHQJLypXMTIqCitXMTMJbWVzc2FnZS50eHQJLypXMTMqCitXMTQJbWVzc2FnZS50eHQJLypXMTQqCitXMTUJcmVwZWF0LnR4dAkvKlcxNSoKK1cxNgltZXNzYWdlLnR4dAkvKlcxNioKK1cxNwlhcmFiaWMudHh0CS8qVzE3KgorVzE4CXN5bnRheC50eHQJLypXMTgqCitXT1JECW1vdGlvbi50eHQJLypXT1JEKgorV2luMzIJb3Nfd2luMzIudHh0CS8qV2luMzIqCitXaW5FbnRlcglhdXRvY21kLnR4dAkvKldpbkVudGVyKgorV2luTGVhdmUJYXV0b2NtZC50eHQJLypXaW5MZWF2ZSoKK1gJY2hhbmdlLnR4dAkvKlgqCitYMTEJb3B0aW9ucy50eHQJLypYMTEqCitYMTEtaWNvbglndWlfeDExLnR4dAkvKlgxMS1pY29uKgorWDExX21vdXNlX3NoYXBlcwlndWlfeDExLnR4dAkvKlgxMV9tb3VzZV9zaGFwZXMqCitYMURyYWcJdGVybS50eHQJLypYMURyYWcqCitYMU1vdXNlCXRlcm0udHh0CS8qWDFNb3VzZSoKK1gxUmVsZWFzZQl0ZXJtLnR4dAkvKlgxUmVsZWFzZSoKK1gyRHJhZwl0ZXJtLnR4dAkvKlgyRHJhZyoKK1gyTW91c2UJdGVybS50eHQJLypYMk1vdXNlKgorWDJSZWxlYXNlCXRlcm0udHh0CS8qWDJSZWxlYXNlKgorWElNCW1ieXRlLnR4dAkvKlhJTSoKK1hMRkQJbWJ5dGUudHh0CS8qWExGRCoKK1kJY2hhbmdlLnR4dAkvKlkqCitZMksJaW50cm8udHh0CS8qWTJLKgorWlEJZWRpdGluZy50eHQJLypaUSoKK1paCWVkaXRpbmcudHh0CS8qWloqCitbCWluZGV4LnR4dAkvKlsqCitbIwltb3Rpb24udHh0CS8qWyMqCitbJwltb3Rpb24udHh0CS8qWycqCitbKAltb3Rpb24udHh0CS8qWygqCitbKytvcHRdCWVkaXRpbmcudHh0CS8qWysrb3B0XSoKK1srY21kXQllZGl0aW5nLnR4dAkvKlsrY21kXSoKK1svCW1vdGlvbi50eHQJLypbXC8qCitbOmFsbnVtOl0JcGF0dGVybi50eHQJLypbOmFsbnVtOl0qCitbOmFscGhhOl0JcGF0dGVybi50eHQJLypbOmFscGhhOl0qCitbOmJhY2tzcGFjZTpdCXBhdHRlcm4udHh0CS8qWzpiYWNrc3BhY2U6XSoKK1s6Ymxhbms6XQlwYXR0ZXJuLnR4dAkvKls6Ymxhbms6XSoKK1s6Y250cmw6XQlwYXR0ZXJuLnR4dAkvKls6Y250cmw6XSoKK1s6ZGlnaXQ6XQlwYXR0ZXJuLnR4dAkvKls6ZGlnaXQ6XSoKK1s6ZXNjYXBlOl0JcGF0dGVybi50eHQJLypbOmVzY2FwZTpdKgorWzpncmFwaDpdCXBhdHRlcm4udHh0CS8qWzpncmFwaDpdKgorWzpsb3dlcjpdCXBhdHRlcm4udHh0CS8qWzpsb3dlcjpdKgorWzpwcmludDpdCXBhdHRlcm4udHh0CS8qWzpwcmludDpdKgorWzpwdW5jdDpdCXBhdHRlcm4udHh0CS8qWzpwdW5jdDpdKgorWzpyZXR1cm46XQlwYXR0ZXJuLnR4dAkvKls6cmV0dXJuOl0qCitbOnNwYWNlOl0JcGF0dGVybi50eHQJLypbOnNwYWNlOl0qCitbOnRhYjpdCXBhdHRlcm4udHh0CS8qWzp0YWI6XSoKK1s6dXBwZXI6XQlwYXR0ZXJuLnR4dAkvKls6dXBwZXI6XSoKK1s6eGRpZ2l0Ol0JcGF0dGVybi50eHQJLypbOnhkaWdpdDpdKgorWzxNaWRkbGVNb3VzZT4JY2hhbmdlLnR4dAkvKls8TWlkZGxlTW91c2U+KgorW0QJdGFnc3JjaC50eHQJLypbRCoKK1tJCXRhZ3NyY2gudHh0CS8qW0kqCitbTQltb3Rpb24udHh0CS8qW00qCitbUAljaGFuZ2UudHh0CS8qW1AqCitbWwltb3Rpb24udHh0CS8qW1sqCitbXQltb3Rpb24udHh0CS8qW10qCitbX0NUUkwtRAl0YWdzcmNoLnR4dAkvKltfQ1RSTC1EKgorW19DVFJMLUkJdGFnc3JjaC50eHQJLypbX0NUUkwtSSoKK1tgCW1vdGlvbi50eHQJLypbYCoKK1tjCWRpZmYudHh0CS8qW2MqCitbY291bnRdCWludHJvLnR4dAkvKltjb3VudF0qCitbZAl0YWdzcmNoLnR4dAkvKltkKgorW2YJZWRpdGluZy50eHQJLypbZioKK1tpCXRhZ3NyY2gudHh0CS8qW2kqCitbbQltb3Rpb24udHh0CS8qW20qCitbcAljaGFuZ2UudHh0CS8qW3AqCitbcGF0dGVybl0JcGF0dGVybi50eHQJLypbcGF0dGVybl0qCitbcXVvdGV4XQlpbnRyby50eHQJLypbcXVvdGV4XSoKK1tyYW5nZV0JY21kbGluZS50eHQJLypbcmFuZ2VdKgorW3N0YXIJbW90aW9uLnR4dAkvKltzdGFyKgorW3oJZm9sZC50eHQJLypbeioKK1t7CW1vdGlvbi50eHQJLypbeyoKK1wwCWNoYW5nZS50eHQJLypcXDAqCitdCWluZGV4LnR4dAkvKl0qCitdIwltb3Rpb24udHh0CS8qXSMqCitdJwltb3Rpb24udHh0CS8qXScqCitdKQltb3Rpb24udHh0CS8qXSkqCitdLwltb3Rpb24udHh0CS8qXVwvKgorXTxNaWRkbGVNb3VzZT4JY2hhbmdlLnR4dAkvKl08TWlkZGxlTW91c2U+KgorXUQJdGFnc3JjaC50eHQJLypdRCoKK11JCXRhZ3NyY2gudHh0CS8qXUkqCitdTQltb3Rpb24udHh0CS8qXU0qCitdUAljaGFuZ2UudHh0CS8qXVAqCitdWwltb3Rpb24udHh0CS8qXVsqCitdXQltb3Rpb24udHh0CS8qXV0qCitdX0NUUkwtRAl0YWdzcmNoLnR4dAkvKl1fQ1RSTC1EKgorXV9DVFJMLUkJdGFnc3JjaC50eHQJLypdX0NUUkwtSSoKK11gCW1vdGlvbi50eHQJLypdYCoKK11jCWRpZmYudHh0CS8qXWMqCitdZAl0YWdzcmNoLnR4dAkvKl1kKgorXWYJZWRpdGluZy50eHQJLypdZioKK11pCXRhZ3NyY2gudHh0CS8qXWkqCitdbQltb3Rpb24udHh0CS8qXW0qCitdcAljaGFuZ2UudHh0CS8qXXAqCitdc3Rhcgltb3Rpb24udHh0CS8qXXN0YXIqCitdeglmb2xkLnR4dAkvKl16KgorXX0JbW90aW9uLnR4dAkvKl19KgorXgltb3Rpb24udHh0CS8qXioKK18JbW90aW9uLnR4dAkvKl8qCitfZXhyYwlzdGFydGluZy50eHQJLypfZXhyYyoKK19ndmltcmMJZ3VpLnR4dAkvKl9ndmltcmMqCitfdmltcmMJc3RhcnRpbmcudHh0CS8qX3ZpbXJjKgorYAltb3Rpb24udHh0CS8qYCoKK2AoCW1vdGlvbi50eHQJLypgKCoKK2ApCW1vdGlvbi50eHQJLypgKSoKK2AtZXhwYW5zaW9uCWVkaXRpbmcudHh0CS8qYC1leHBhbnNpb24qCitgLgltb3Rpb24udHh0CS8qYC4qCitgMAltb3Rpb24udHh0CS8qYDAqCitgPAltb3Rpb24udHh0CS8qYDwqCitgPgltb3Rpb24udHh0CS8qYD4qCitgQQltb3Rpb24udHh0CS8qYEEqCitgWwltb3Rpb24udHh0CS8qYFsqCitgXQltb3Rpb24udHh0CS8qYF0qCitgXgltb3Rpb24udHh0CS8qYF4qCitgYAltb3Rpb24udHh0CS8qYGAqCitgYQltb3Rpb24udHh0CS8qYGEqCitgcXVvdGUJbW90aW9uLnR4dAkvKmBxdW90ZSoKK2B7CW1vdGlvbi50eHQJLypgeyoKK2B9CW1vdGlvbi50eHQJLypgfSoKK2EJaW5zZXJ0LnR4dAkvKmEqCithKAltb3Rpb24udHh0CS8qYSgqCithKQltb3Rpb24udHh0CS8qYSkqCithNAlvcHRpb25zLnR4dAkvKmE0KgorYTpmaXJzdGxpbmUJZXZhbC50eHQJLyphOmZpcnN0bGluZSoKK2E6bGFzdGxpbmUJZXZhbC50eHQJLyphOmxhc3RsaW5lKgorYTp2YXIJZXZhbC50eHQJLyphOnZhcioKK2E8CW1vdGlvbi50eHQJLyphPCoKK2E+CW1vdGlvbi50eHQJLyphPioKK2FCCW1vdGlvbi50eHQJLyphQioKK2FXCW1vdGlvbi50eHQJLyphVyoKK2FbCW1vdGlvbi50eHQJLyphWyoKK2FdCW1vdGlvbi50eHQJLyphXSoKK2FiCW1vdGlvbi50eHQJLyphYioKK2FiYW5kb24JZWRpdGluZy50eHQJLyphYmFuZG9uKgorYWJicmV2aWF0aW9ucwltYXAudHh0CS8qYWJicmV2aWF0aW9ucyoKK2FiZWwtc3ludGF4CXN5bnRheC50eHQJLyphYmVsLXN5bnRheCoKK2FiZWwudmltCXN5bnRheC50eHQJLyphYmVsLnZpbSoKK2FjdGl2ZS1idWZmZXIJd2luZG93cy50eHQJLyphY3RpdmUtYnVmZmVyKgorYWRhLXN5bnRheAlzeW50YXgudHh0CS8qYWRhLXN5bnRheCoKK2FkYS52aW0Jc3ludGF4LnR4dAkvKmFkYS52aW0qCithZGQtZmlsZXR5cGUtcGx1Z2luCXVzcl8wNS50eHQJLyphZGQtZmlsZXR5cGUtcGx1Z2luKgorYWRkLWdsb2JhbC1wbHVnaW4JdXNyXzA1LnR4dAkvKmFkZC1nbG9iYWwtcGx1Z2luKgorYWRkLWxvY2FsLWhlbHAJdXNyXzA1LnR4dAkvKmFkZC1sb2NhbC1oZWxwKgorYWRkLW9wdGlvbi1mbGFncwlvcHRpb25zLnR4dAkvKmFkZC1vcHRpb24tZmxhZ3MqCithZGQtcGx1Z2luCXVzcl8wNS50eHQJLyphZGQtcGx1Z2luKgorYWRkZWQtNS4xCXZlcnNpb241LnR4dAkvKmFkZGVkLTUuMSoKK2FkZGVkLTUuMgl2ZXJzaW9uNS50eHQJLyphZGRlZC01LjIqCithZGRlZC01LjMJdmVyc2lvbjUudHh0CS8qYWRkZWQtNS4zKgorYWRkZWQtNS40CXZlcnNpb241LnR4dAkvKmFkZGVkLTUuNCoKK2FkZGVkLTUuNQl2ZXJzaW9uNS50eHQJLyphZGRlZC01LjUqCithZGRlZC01LjYJdmVyc2lvbjUudHh0CS8qYWRkZWQtNS42KgorYWRkZWQtNS43CXZlcnNpb241LnR4dAkvKmFkZGVkLTUuNyoKK2FkZGVkLTUuOAl2ZXJzaW9uNS50eHQJLyphZGRlZC01LjgqCithZGRlZC02LjEJdmVyc2lvbjYudHh0CS8qYWRkZWQtNi4xKgorYWRkZWQtNi4yCXZlcnNpb242LnR4dAkvKmFkZGVkLTYuMioKK2FkZGVkLTYuMwl2ZXJzaW9uNi50eHQJLyphZGRlZC02LjMqCithZGRlZC1CZU9TCXZlcnNpb241LnR4dAkvKmFkZGVkLUJlT1MqCithZGRlZC1NYWMJdmVyc2lvbjUudHh0CS8qYWRkZWQtTWFjKgorYWRkZWQtVk1TCXZlcnNpb241LnR4dAkvKmFkZGVkLVZNUyoKK2FkZGVkLWNtZGxpbmUtYXJncwl2ZXJzaW9uNS50eHQJLyphZGRlZC1jbWRsaW5lLWFyZ3MqCithZGRlZC1vcHRpb25zCXZlcnNpb241LnR4dAkvKmFkZGVkLW9wdGlvbnMqCithZGRlZC1yZWdleHAJdmVyc2lvbjUudHh0CS8qYWRkZWQtcmVnZXhwKgorYWRkZWQtdmFyaW91cwl2ZXJzaW9uNS50eHQJLyphZGRlZC12YXJpb3VzKgorYWRkZWQtd2luMzItR1VJCXZlcnNpb241LnR4dAkvKmFkZGVkLXdpbjMyLUdVSSoKK2FmdGVyLWRpcmVjdG9yeQlvcHRpb25zLnR4dAkvKmFmdGVyLWRpcmVjdG9yeSoKK2FsZXBoCW9wdGlvbnMudHh0CS8qYWxlcGgqCithbHQJaW50cm8udHh0CS8qYWx0KgorYWx0LWlucHV0CWRlYnVnZ2VyLnR4dAkvKmFsdC1pbnB1dCoKK2FsdGVybmF0ZS1maWxlCWVkaXRpbmcudHh0CS8qYWx0ZXJuYXRlLWZpbGUqCithbWlnYS13aW5kb3cJc3RhcnRpbmcudHh0CS8qYW1pZ2Etd2luZG93KgorYW50LXN5bnRheAlzeW50YXgudHh0CS8qYW50LXN5bnRheCoKK2FudC52aW0Jc3ludGF4LnR4dAkvKmFudC52aW0qCithcAltb3Rpb24udHh0CS8qYXAqCithcGFjaGUtc3ludGF4CXN5bnRheC50eHQJLyphcGFjaGUtc3ludGF4KgorYXBhY2hlLnZpbQlzeW50YXgudHh0CS8qYXBhY2hlLnZpbSoKK2FwcGVuZCgpCWV2YWwudHh0CS8qYXBwZW5kKCkqCithcmFiaWMudHh0CWFyYWJpYy50eHQJLyphcmFiaWMudHh0KgorYXJhYmljZm9udHMJYXJhYmljLnR4dAkvKmFyYWJpY2ZvbnRzKgorYXJhYmlja2V5bWFwCWFyYWJpYy50eHQJLyphcmFiaWNrZXltYXAqCithcmdjKCkJZXZhbC50eHQJLyphcmdjKCkqCithcmdpZHgoKQlldmFsLnR4dAkvKmFyZ2lkeCgpKgorYXJnbGlzdAllZGl0aW5nLnR4dAkvKmFyZ2xpc3QqCithcmdsaXN0LXBvc2l0aW9uCWVkaXRpbmcudHh0CS8qYXJnbGlzdC1wb3NpdGlvbioKK2FyZ2xpc3QtcXVpdAl1c3JfMDcudHh0CS8qYXJnbGlzdC1xdWl0KgorYXJndW1lbnQtbGlzdAllZGl0aW5nLnR4dAkvKmFyZ3VtZW50LWxpc3QqCithcmd2KCkJZXZhbC50eHQJLyphcmd2KCkqCithcwltb3Rpb24udHh0CS8qYXMqCithc20tc3ludGF4CXN5bnRheC50eHQJLyphc20tc3ludGF4KgorYXNtLnZpbQlzeW50YXgudHh0CS8qYXNtLnZpbSoKK2FzbTY4awlzeW50YXgudHh0CS8qYXNtNjhrKgorYXNtNjhrLXN5bnRheAlzeW50YXgudHh0CS8qYXNtNjhrLXN5bnRheCoKK2FzbWg4MzAwLXN5bnRheAlzeW50YXgudHh0CS8qYXNtaDgzMDAtc3ludGF4KgorYXNtaDgzMDAudmltCXN5bnRheC50eHQJLyphc21oODMwMC52aW0qCithc3BwZXJsLXN5bnRheAlzeW50YXgudHh0CS8qYXNwcGVybC1zeW50YXgqCithc3B2YnMtc3ludGF4CXN5bnRheC50eHQJLyphc3B2YnMtc3ludGF4KgorYXRoZW5hLWludGVsbGltb3VzZQlndWkudHh0CS8qYXRoZW5hLWludGVsbGltb3VzZSoKK2F0dHItbGlzdAlzeW50YXgudHh0CS8qYXR0ci1saXN0KgorYXV0aG9yCWludHJvLnR4dAkvKmF1dGhvcioKK2F1dG8tZm9ybWF0CWNoYW5nZS50eHQJLyphdXRvLWZvcm1hdCoKK2F1dG8tc2V0dGluZwlvcHRpb25zLnR4dAkvKmF1dG8tc2V0dGluZyoKK2F1dG8tc2hvcnRuYW1lCWVkaXRpbmcudHh0CS8qYXV0by1zaG9ydG5hbWUqCithdXRvY21kLTw+CXRpcHMudHh0CS8qYXV0b2NtZC08PioKK2F1dG9jbWQtZGVmaW5lCWF1dG9jbWQudHh0CS8qYXV0b2NtZC1kZWZpbmUqCithdXRvY21kLWV2ZW50cwlhdXRvY21kLnR4dAkvKmF1dG9jbWQtZXZlbnRzKgorYXV0b2NtZC1leGVjdXRlCWF1dG9jbWQudHh0CS8qYXV0b2NtZC1leGVjdXRlKgorYXV0b2NtZC1ncm91cHMJYXV0b2NtZC50eHQJLyphdXRvY21kLWdyb3VwcyoKK2F1dG9jbWQtaW50cm8JYXV0b2NtZC50eHQJLyphdXRvY21kLWludHJvKgorYXV0b2NtZC1saXN0CWF1dG9jbWQudHh0CS8qYXV0b2NtZC1saXN0KgorYXV0b2NtZC1uZXN0ZWQJYXV0b2NtZC50eHQJLyphdXRvY21kLW5lc3RlZCoKK2F1dG9jbWQtb3NmaWxldHlwZXMJZmlsZXR5cGUudHh0CS8qYXV0b2NtZC1vc2ZpbGV0eXBlcyoKK2F1dG9jbWQtcGF0dGVybnMJYXV0b2NtZC50eHQJLyphdXRvY21kLXBhdHRlcm5zKgorYXV0b2NtZC1yZW1vdmUJYXV0b2NtZC50eHQJLyphdXRvY21kLXJlbW92ZSoKK2F1dG9jbWQtc2VhcmNocGF0CWF1dG9jbWQudHh0CS8qYXV0b2NtZC1zZWFyY2hwYXQqCithdXRvY21kLXVzZQlhdXRvY21kLnR4dAkvKmF1dG9jbWQtdXNlKgorYXV0b2NtZC50eHQJYXV0b2NtZC50eHQJLyphdXRvY21kLnR4dCoKK2F1dG9jbWRzLWtlcHQJdmVyc2lvbjUudHh0CS8qYXV0b2NtZHMta2VwdCoKK2F1dG9jb21tYW5kCWF1dG9jbWQudHh0CS8qYXV0b2NvbW1hbmQqCithdXRvY29tbWFuZC1ldmVudHMJYXV0b2NtZC50eHQJLyphdXRvY29tbWFuZC1ldmVudHMqCithdXRvY29tbWFuZC1wYXR0ZXJuCWF1dG9jbWQudHh0CS8qYXV0b2NvbW1hbmQtcGF0dGVybioKK2F1dG9sb2FkLWZ1bmN0aW9ucwlldmFsLnR4dAkvKmF1dG9sb2FkLWZ1bmN0aW9ucyoKK2F2b2lkLWhpdC1lbnRlcgl2ZXJzaW9uNS50eHQJLyphdm9pZC1oaXQtZW50ZXIqCithdwltb3Rpb24udHh0CS8qYXcqCithewltb3Rpb24udHh0CS8qYXsqCithfQltb3Rpb24udHh0CS8qYX0qCitiCW1vdGlvbi50eHQJLypiKgorYjpjaGFuZ2VkdGljay12YXJpYWJsZQlldmFsLnR4dAkvKmI6Y2hhbmdlZHRpY2stdmFyaWFibGUqCitiOmN1cnJlbnRfc3ludGF4LXZhcmlhYmxlCXN5bnRheC50eHQJLypiOmN1cnJlbnRfc3ludGF4LXZhcmlhYmxlKgorYjp2YXIJZXZhbC50eHQJLypiOnZhcioKK2JhY2tzbGFzaAlpbnRyby50eHQJLypiYWNrc2xhc2gqCitiYWNrc3BhY2UJaW50cm8udHh0CS8qYmFja3NwYWNlKgorYmFja3NwYWNlLWRlbGV0ZQl2ZXJzaW9uNC50eHQJLypiYWNrc3BhY2UtZGVsZXRlKgorYmFja3RpY2stZXhwYW5zaW9uCWVkaXRpbmcudHh0CS8qYmFja3RpY2stZXhwYW5zaW9uKgorYmFja3VwCWVkaXRpbmcudHh0CS8qYmFja3VwKgorYmFja3VwLWNoYW5nZWQJdmVyc2lvbjQudHh0CS8qYmFja3VwLWNoYW5nZWQqCitiYWNrdXAtZXh0ZW5zaW9uCXZlcnNpb240LnR4dAkvKmJhY2t1cC1leHRlbnNpb24qCitiYWNrdXAtdGFibGUJZWRpdGluZy50eHQJLypiYWNrdXAtdGFibGUqCitiYWxsb29uLWV2YWwJZGVidWdnZXIudHh0CS8qYmFsbG9vbi1ldmFsKgorYmFyCW1vdGlvbi50eHQJLypiYXIqCitiYXJzCWhlbHAudHh0CS8qYmFycyoKK2Jhc2VfZm9udF9uYW1lX2xpc3QJbWJ5dGUudHh0CS8qYmFzZV9mb250X25hbWVfbGlzdCoKK2Jhc2ljLXN5bnRheAlzeW50YXgudHh0CS8qYmFzaWMtc3ludGF4KgorYmFzaWMudmltCXN5bnRheC50eHQJLypiYXNpYy52aW0qCitiZWVwCW9wdGlvbnMudHh0CS8qYmVlcCoKK2Jlb3MtY29sb3JzCW9zX2Jlb3MudHh0CS8qYmVvcy1jb2xvcnMqCitiZW9zLWNvbXBpbGluZwlvc19iZW9zLnR4dAkvKmJlb3MtY29tcGlsaW5nKgorYmVvcy1kcmFnbmRyb3AJb3NfYmVvcy50eHQJLypiZW9zLWRyYWduZHJvcCoKK2Jlb3MtZm9udHMJb3NfYmVvcy50eHQJLypiZW9zLWZvbnRzKgorYmVvcy1nZW5lcmFsCW9zX2Jlb3MudHh0CS8qYmVvcy1nZW5lcmFsKgorYmVvcy1ndWkJb3NfYmVvcy50eHQJLypiZW9zLWd1aSoKK2Jlb3MtbGF1bmNoCW9zX2Jlb3MudHh0CS8qYmVvcy1sYXVuY2gqCitiZW9zLW1ldGEJb3NfYmVvcy50eHQJLypiZW9zLW1ldGEqCitiZW9zLW1vdXNlCW9zX2Jlb3MudHh0CS8qYmVvcy1tb3VzZSoKK2Jlb3MtcGVybAlvc19iZW9zLnR4dAkvKmJlb3MtcGVybCoKK2Jlb3MtdGltZW91dAlvc19iZW9zLnR4dAkvKmJlb3MtdGltZW91dCoKK2Jlb3MtdW5pY29kZQlvc19iZW9zLnR4dAkvKmJlb3MtdW5pY29kZSoKK2Jlb3MtdXRmOAlvc19iZW9zLnR4dAkvKmJlb3MtdXRmOCoKK2Jlb3MtdmltZGlyCW9zX2Jlb3MudHh0CS8qYmVvcy12aW1kaXIqCitibG9ja3dpc2UtZXhhbXBsZXMJdmlzdWFsLnR4dAkvKmJsb2Nrd2lzZS1leGFtcGxlcyoKK2Jsb2Nrd2lzZS1vcGVyYXRvcnMJdmlzdWFsLnR4dAkvKmJsb2Nrd2lzZS1vcGVyYXRvcnMqCitibG9ja3dpc2UtcmVnaXN0ZXIJY2hhbmdlLnR4dAkvKmJsb2Nrd2lzZS1yZWdpc3RlcioKK2Jsb2Nrd2lzZS12aXN1YWwJdmlzdWFsLnR4dAkvKmJsb2Nrd2lzZS12aXN1YWwqCitib29rCWludHJvLnR4dAkvKmJvb2sqCitib29sZWFuCW9wdGlvbnMudHh0CS8qYm9vbGVhbioKK2JyZWFrLWZpbmFsbHkJZXZhbC50eHQJLypicmVhay1maW5hbGx5KgorYnJvd3NlKCkJZXZhbC50eHQJLypicm93c2UoKSoKK2Jyb3dzZWZpbHRlcgllZGl0aW5nLnR4dAkvKmJyb3dzZWZpbHRlcioKK2J1ZmV4aXN0cygpCWV2YWwudHh0CS8qYnVmZXhpc3RzKCkqCitidWZmZXItaGlkZGVuCXdpbmRvd3MudHh0CS8qYnVmZmVyLWhpZGRlbioKK2J1ZmZlci1saXN0CXdpbmRvd3MudHh0CS8qYnVmZmVyLWxpc3QqCitidWZmZXItdmFyaWFibGUJZXZhbC50eHQJLypidWZmZXItdmFyaWFibGUqCitidWZmZXItd3JpdGUJZWRpdGluZy50eHQJLypidWZmZXItd3JpdGUqCitidWZmZXJfZXhpc3RzKCkJZXZhbC50eHQJLypidWZmZXJfZXhpc3RzKCkqCitidWZmZXJfbmFtZSgpCWV2YWwudHh0CS8qYnVmZmVyX25hbWUoKSoKK2J1ZmZlcl9udW1iZXIoKQlldmFsLnR4dAkvKmJ1ZmZlcl9udW1iZXIoKSoKK2J1ZmZlcnMJd2luZG93cy50eHQJLypidWZmZXJzKgorYnVmZmVycy1tZW51CWd1aS50eHQJLypidWZmZXJzLW1lbnUqCitidWZsaXN0ZWQoKQlldmFsLnR4dAkvKmJ1Zmxpc3RlZCgpKgorYnVmbG9hZGVkKCkJZXZhbC50eHQJLypidWZsb2FkZWQoKSoKK2J1Zm5hbWUoKQlldmFsLnR4dAkvKmJ1Zm5hbWUoKSoKK2J1Zm5yKCkJZXZhbC50eHQJLypidWZucigpKgorYnVmd2lubnIoKQlldmFsLnR4dAkvKmJ1Zndpbm5yKCkqCitidWctZml4ZXMtNQl2ZXJzaW9uNS50eHQJLypidWctZml4ZXMtNSoKK2J1Zy1maXhlcy02CXZlcnNpb242LnR4dAkvKmJ1Zy1maXhlcy02KgorYnVnLXJlcG9ydHMJaW50cm8udHh0CS8qYnVnLXJlcG9ydHMqCitidWdyZXBvcnQudmltCWludHJvLnR4dAkvKmJ1Z3JlcG9ydC52aW0qCitidWdzCWludHJvLnR4dAkvKmJ1Z3MqCitidWlsdGluLXRlcm1zCXRlcm0udHh0CS8qYnVpbHRpbi10ZXJtcyoKK2J1aWx0aW4tdG9vbHMJZ3VpLnR4dAkvKmJ1aWx0aW4tdG9vbHMqCitidWlsdGluX3Rlcm1zCXRlcm0udHh0CS8qYnVpbHRpbl90ZXJtcyoKK2J5dGUtY291bnQJZWRpdGluZy50eHQJLypieXRlLWNvdW50KgorYnl0ZTJsaW5lKCkJZXZhbC50eHQJLypieXRlMmxpbmUoKSoKK2J6aXAyCXBpX2d6aXAudHh0CS8qYnppcDIqCitjCWNoYW5nZS50eHQJLypjKgorYy1zeW50YXgJc3ludGF4LnR4dAkvKmMtc3ludGF4KgorYy52aW0Jc3ludGF4LnR4dAkvKmMudmltKgorY1cJY2hhbmdlLnR4dAkvKmNXKgorY188QlM+CWNtZGxpbmUudHh0CS8qY188QlM+KgorY188Qy1MZWZ0PgljbWRsaW5lLnR4dAkvKmNfPEMtTGVmdD4qCitjXzxDLVI+CWNtZGxpbmUudHh0CS8qY188Qy1SPioKK2NfPEMtUj5fPEMtQT4JY21kbGluZS50eHQJLypjXzxDLVI+XzxDLUE+KgorY188Qy1SPl88Qy1GPgljbWRsaW5lLnR4dAkvKmNfPEMtUj5fPEMtRj4qCitjXzxDLVI+XzxDLU8+CWNtZGxpbmUudHh0CS8qY188Qy1SPl88Qy1PPioKK2NfPEMtUj5fPEMtUD4JY21kbGluZS50eHQJLypjXzxDLVI+XzxDLVA+KgorY188Qy1SPl88Qy1SPgljbWRsaW5lLnR4dAkvKmNfPEMtUj5fPEMtUj4qCitjXzxDLVI+XzxDLVc+CWNtZGxpbmUudHh0CS8qY188Qy1SPl88Qy1XPioKK2NfPEMtUmlnaHQ+CWNtZGxpbmUudHh0CS8qY188Qy1SaWdodD4qCitjXzxDUj4JY21kbGluZS50eHQJLypjXzxDUj4qCitjXzxEZWw+CWNtZGxpbmUudHh0CS8qY188RGVsPioKK2NfPERvd24+CWNtZGxpbmUudHh0CS8qY188RG93bj4qCitjXzxFbmQ+CWNtZGxpbmUudHh0CS8qY188RW5kPioKK2NfPEVzYz4JY21kbGluZS50eHQJLypjXzxFc2M+KgorY188SG9tZT4JY21kbGluZS50eHQJLypjXzxIb21lPioKK2NfPEluc2VydD4JY21kbGluZS50eHQJLypjXzxJbnNlcnQ+KgorY188TGVmdD4JY21kbGluZS50eHQJLypjXzxMZWZ0PioKK2NfPExlZnRNb3VzZT4JY21kbGluZS50eHQJLypjXzxMZWZ0TW91c2U+KgorY188Tkw+CWNtZGxpbmUudHh0CS8qY188Tkw+KgorY188UGFnZURvd24+CWNtZGxpbmUudHh0CS8qY188UGFnZURvd24+KgorY188UGFnZVVwPgljbWRsaW5lLnR4dAkvKmNfPFBhZ2VVcD4qCitjXzxSaWdodD4JY21kbGluZS50eHQJLypjXzxSaWdodD4qCitjXzxTLURvd24+CWNtZGxpbmUudHh0CS8qY188Uy1Eb3duPioKK2NfPFMtTGVmdD4JY21kbGluZS50eHQJLypjXzxTLUxlZnQ+KgorY188Uy1SaWdodD4JY21kbGluZS50eHQJLypjXzxTLVJpZ2h0PioKK2NfPFMtVGFiPgljbWRsaW5lLnR4dAkvKmNfPFMtVGFiPioKK2NfPFMtVXA+CWNtZGxpbmUudHh0CS8qY188Uy1VcD4qCitjXzxUYWI+CWNtZGxpbmUudHh0CS8qY188VGFiPioKK2NfPFVwPgljbWRsaW5lLnR4dAkvKmNfPFVwPioKK2NfQ1RSTC1BCWNtZGxpbmUudHh0CS8qY19DVFJMLUEqCitjX0NUUkwtQgljbWRsaW5lLnR4dAkvKmNfQ1RSTC1CKgorY19DVFJMLUMJY21kbGluZS50eHQJLypjX0NUUkwtQyoKK2NfQ1RSTC1ECWNtZGxpbmUudHh0CS8qY19DVFJMLUQqCitjX0NUUkwtRQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1FKgorY19DVFJMLUgJY21kbGluZS50eHQJLypjX0NUUkwtSCoKK2NfQ1RSTC1JCWNtZGxpbmUudHh0CS8qY19DVFJMLUkqCitjX0NUUkwtSgljbWRsaW5lLnR4dAkvKmNfQ1RSTC1KKgorY19DVFJMLUsJY21kbGluZS50eHQJLypjX0NUUkwtSyoKK2NfQ1RSTC1MCWNtZGxpbmUudHh0CS8qY19DVFJMLUwqCitjX0NUUkwtTgljbWRsaW5lLnR4dAkvKmNfQ1RSTC1OKgorY19DVFJMLVAJY21kbGluZS50eHQJLypjX0NUUkwtUCoKK2NfQ1RSTC1RCWNtZGxpbmUudHh0CS8qY19DVFJMLVEqCitjX0NUUkwtUgljbWRsaW5lLnR4dAkvKmNfQ1RSTC1SKgorY19DVFJMLVJfPQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1SXz0qCitjX0NUUkwtUl9DVFJMLUEJY21kbGluZS50eHQJLypjX0NUUkwtUl9DVFJMLUEqCitjX0NUUkwtUl9DVFJMLUYJY21kbGluZS50eHQJLypjX0NUUkwtUl9DVFJMLUYqCitjX0NUUkwtUl9DVFJMLU8JY21kbGluZS50eHQJLypjX0NUUkwtUl9DVFJMLU8qCitjX0NUUkwtUl9DVFJMLVAJY21kbGluZS50eHQJLypjX0NUUkwtUl9DVFJMLVAqCitjX0NUUkwtUl9DVFJMLVIJY21kbGluZS50eHQJLypjX0NUUkwtUl9DVFJMLVIqCitjX0NUUkwtUl9DVFJMLVcJY21kbGluZS50eHQJLypjX0NUUkwtUl9DVFJMLVcqCitjX0NUUkwtVQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1VKgorY19DVFJMLVYJY21kbGluZS50eHQJLypjX0NUUkwtVioKK2NfQ1RSTC1XCWNtZGxpbmUudHh0CS8qY19DVFJMLVcqCitjX0NUUkwtWQljbWRsaW5lLnR4dAkvKmNfQ1RSTC1ZKgorY19DVFJMLVxfQ1RSTC1HCWludHJvLnR4dAkvKmNfQ1RSTC1cXF9DVFJMLUcqCitjX0NUUkwtXF9DVFJMLU4JaW50cm8udHh0CS8qY19DVFJMLVxcX0NUUkwtTioKK2NfQ1RSTC1cX2UJY21kbGluZS50eHQJLypjX0NUUkwtXFxfZSoKK2NfQ1RSTC1eCWNtZGxpbmUudHh0CS8qY19DVFJMLV4qCitjX0NUUkwtXwljbWRsaW5lLnR4dAkvKmNfQ1RSTC1fKgorY19kaWdyYXBoCWNtZGxpbmUudHh0CS8qY19kaWdyYXBoKgorY193aWxkY2hhcgljbWRsaW5lLnR4dAkvKmNfd2lsZGNoYXIqCitjYXJyaWFnZS1yZXR1cm4JaW50cm8udHh0CS8qY2FycmlhZ2UtcmV0dXJuKgorY2FzZQljaGFuZ2UudHh0CS8qY2FzZSoKK2NhdGNoLWFsbAlldmFsLnR4dAkvKmNhdGNoLWFsbCoKK2NhdGNoLWVycm9ycwlldmFsLnR4dAkvKmNhdGNoLWVycm9ycyoKK2NhdGNoLWludGVycnVwdAlldmFsLnR4dAkvKmNhdGNoLWludGVycnVwdCoKK2NhdGNoLW9yZGVyCWV2YWwudHh0CS8qY2F0Y2gtb3JkZXIqCitjYXRjaC10ZXh0CWV2YWwudHh0CS8qY2F0Y2gtdGV4dCoKK2NjCWNoYW5nZS50eHQJLypjYyoKK2NoYW5nZS1saXN0LWp1bXBzCW1vdGlvbi50eHQJLypjaGFuZ2UtbGlzdC1qdW1wcyoKK2NoYW5nZS50eHQJY2hhbmdlLnR4dAkvKmNoYW5nZS50eHQqCitjaGFuZ2VkLTUuMQl2ZXJzaW9uNS50eHQJLypjaGFuZ2VkLTUuMSoKK2NoYW5nZWQtNS4yCXZlcnNpb241LnR4dAkvKmNoYW5nZWQtNS4yKgorY2hhbmdlZC01LjMJdmVyc2lvbjUudHh0CS8qY2hhbmdlZC01LjMqCitjaGFuZ2VkLTUuNAl2ZXJzaW9uNS50eHQJLypjaGFuZ2VkLTUuNCoKK2NoYW5nZWQtNS41CXZlcnNpb241LnR4dAkvKmNoYW5nZWQtNS41KgorY2hhbmdlZC01LjYJdmVyc2lvbjUudHh0CS8qY2hhbmdlZC01LjYqCitjaGFuZ2VkLTUuNwl2ZXJzaW9uNS50eHQJLypjaGFuZ2VkLTUuNyoKK2NoYW5nZWQtNS44CXZlcnNpb241LnR4dAkvKmNoYW5nZWQtNS44KgorY2hhbmdlZC02LjEJdmVyc2lvbjYudHh0CS8qY2hhbmdlZC02LjEqCitjaGFuZ2VkLTYuMgl2ZXJzaW9uNi50eHQJLypjaGFuZ2VkLTYuMioKK2NoYW5nZWQtNi4zCXZlcnNpb242LnR4dAkvKmNoYW5nZWQtNi4zKgorY2hhbmdlbGlzdAltb3Rpb24udHh0CS8qY2hhbmdlbGlzdCoKK2NoYW5nZWxvZy1wbHVnaW4JZmlsZXR5cGUudHh0CS8qY2hhbmdlbG9nLXBsdWdpbioKK2NoYW5nZWxvZy1zeW50YXgJc3ludGF4LnR4dAkvKmNoYW5nZWxvZy1zeW50YXgqCitjaGFuZ2Vsb2cudmltCXN5bnRheC50eHQJLypjaGFuZ2Vsb2cudmltKgorY2hhbmdldGljawlldmFsLnR4dAkvKmNoYW5nZXRpY2sqCitjaGFuZ2luZwljaGFuZ2UudHh0CS8qY2hhbmdpbmcqCitjaGFyMm5yKCkJZXZhbC50eHQJLypjaGFyMm5yKCkqCitjaGFyYWN0ZXJ3aXNlCW1vdGlvbi50eHQJLypjaGFyYWN0ZXJ3aXNlKgorY2hhcmFjdGVyd2lzZS1yZWdpc3RlcgljaGFuZ2UudHh0CS8qY2hhcmFjdGVyd2lzZS1yZWdpc3RlcioKK2NoYXJhY3Rlcndpc2UtdmlzdWFsCXZpc3VhbC50eHQJLypjaGFyYWN0ZXJ3aXNlLXZpc3VhbCoKK2NoYXJjb252ZXJ0X2Zyb20tdmFyaWFibGUJZXZhbC50eHQJLypjaGFyY29udmVydF9mcm9tLXZhcmlhYmxlKgorY2hhcmNvbnZlcnRfdG8tdmFyaWFibGUJZXZhbC50eHQJLypjaGFyY29udmVydF90by12YXJpYWJsZSoKK2NoYXJzZXQJbWJ5dGUudHh0CS8qY2hhcnNldCoKK2NoYXJzZXQtY29udmVyc2lvbgltYnl0ZS50eHQJLypjaGFyc2V0LWNvbnZlcnNpb24qCitjaGlsbC1zeW50YXgJc3ludGF4LnR4dAkvKmNoaWxsLXN5bnRheCoKK2NoaWxsLnZpbQlzeW50YXgudHh0CS8qY2hpbGwudmltKgorY2luZGVudCgpCWV2YWwudHh0CS8qY2luZGVudCgpKgorY2lua2V5cy1mb3JtYXQJaW5kZW50LnR4dAkvKmNpbmtleXMtZm9ybWF0KgorY2lub3B0aW9ucy12YWx1ZXMJaW5kZW50LnR4dAkvKmNpbm9wdGlvbnMtdmFsdWVzKgorY2xpZW50LXNlcnZlcglyZW1vdGUudHh0CS8qY2xpZW50LXNlcnZlcioKK2NsaWVudHNlcnZlcglyZW1vdGUudHh0CS8qY2xpZW50c2VydmVyKgorY2xpcGJvYXJkCWd1aS50eHQJLypjbGlwYm9hcmQqCitjbWRhcmctdmFyaWFibGUJZXZhbC50eHQJLypjbWRhcmctdmFyaWFibGUqCitjbWRiYW5nLXZhcmlhYmxlCWV2YWwudHh0CS8qY21kYmFuZy12YXJpYWJsZSoKK2NtZGxpbmUtYXJndW1lbnRzCXZpX2RpZmYudHh0CS8qY21kbGluZS1hcmd1bWVudHMqCitjbWRsaW5lLWNoYW5nZWQJdmVyc2lvbjUudHh0CS8qY21kbGluZS1jaGFuZ2VkKgorY21kbGluZS1jb21wbGV0aW9uCWNtZGxpbmUudHh0CS8qY21kbGluZS1jb21wbGV0aW9uKgorY21kbGluZS1lZGl0aW5nCWNtZGxpbmUudHh0CS8qY21kbGluZS1lZGl0aW5nKgorY21kbGluZS1oaXN0b3J5CWNtZGxpbmUudHh0CS8qY21kbGluZS1oaXN0b3J5KgorY21kbGluZS1saW5lcwljbWRsaW5lLnR4dAkvKmNtZGxpbmUtbGluZXMqCitjbWRsaW5lLXJhbmdlcwljbWRsaW5lLnR4dAkvKmNtZGxpbmUtcmFuZ2VzKgorY21kbGluZS1zcGVjaWFsCWNtZGxpbmUudHh0CS8qY21kbGluZS1zcGVjaWFsKgorY21kbGluZS10b28tbG9uZwljbWRsaW5lLnR4dAkvKmNtZGxpbmUtdG9vLWxvbmcqCitjbWRsaW5lLXdpbmRvdwljbWRsaW5lLnR4dAkvKmNtZGxpbmUtd2luZG93KgorY21kbGluZS50eHQJY21kbGluZS50eHQJLypjbWRsaW5lLnR4dCoKK2NtZHdpbgljbWRsaW5lLnR4dAkvKmNtZHdpbioKK2NtZHdpbi1jaGFyCWNtZGxpbmUudHh0CS8qY21kd2luLWNoYXIqCitjb2JvbC1zeW50YXgJc3ludGF4LnR4dAkvKmNvYm9sLXN5bnRheCoKK2NvYm9sLnZpbQlzeW50YXgudHh0CS8qY29ib2wudmltKgorY29kZXNldAltYnl0ZS50eHQJLypjb2Rlc2V0KgorY29kaW5nLXN0eWxlCWRldmVsb3AudHh0CS8qY29kaW5nLXN0eWxlKgorY29sKCkJZXZhbC50eHQJLypjb2woKSoKK2NvbGRmdXNpb24tc3ludGF4CXN5bnRheC50eHQJLypjb2xkZnVzaW9uLXN5bnRheCoKK2NvbGRmdXNpb24udmltCXN5bnRheC50eHQJLypjb2xkZnVzaW9uLnZpbSoKK2NvbGxhcHNlCXRpcHMudHh0CS8qY29sbGFwc2UqCitjb2xvci14dGVybQlzeW50YXgudHh0CS8qY29sb3IteHRlcm0qCitjb2xvcmluZwlzeW50YXgudHh0CS8qY29sb3JpbmcqCitjb2xvcnRlc3QudmltCXN5bnRheC50eHQJLypjb2xvcnRlc3QudmltKgorY29tbWFuZC1tb2RlCWludHJvLnR4dAkvKmNvbW1hbmQtbW9kZSoKK2NvbXBhdGlibGUtZGVmYXVsdAlzdGFydGluZy50eHQJLypjb21wYXRpYmxlLWRlZmF1bHQqCitjb21waWxlLWNoYW5nZXMtNQl2ZXJzaW9uNS50eHQJLypjb21waWxlLWNoYW5nZXMtNSoKK2NvbXBpbGUtY2hhbmdlcy02CXZlcnNpb242LnR4dAkvKmNvbXBpbGUtY2hhbmdlcy02KgorY29tcGlsZXItbWFueAlxdWlja2ZpeC50eHQJLypjb21waWxlci1tYW54KgorY29tcGlsZXItcHl1bml0CXF1aWNrZml4LnR4dAkvKmNvbXBpbGVyLXB5dW5pdCoKK2NvbXBpbGVyLXNlbGVjdAlxdWlja2ZpeC50eHQJLypjb21waWxlci1zZWxlY3QqCitjb21waWxlci10ZXgJcXVpY2tmaXgudHh0CS8qY29tcGlsZXItdGV4KgorY29tcGwtY3VycmVudAlpbnNlcnQudHh0CS8qY29tcGwtY3VycmVudCoKK2NvbXBsLWRlZmluZQlpbnNlcnQudHh0CS8qY29tcGwtZGVmaW5lKgorY29tcGwtZGljdGlvbmFyeQlpbnNlcnQudHh0CS8qY29tcGwtZGljdGlvbmFyeSoKK2NvbXBsLWZpbGVuYW1lCWluc2VydC50eHQJLypjb21wbC1maWxlbmFtZSoKK2NvbXBsLWdlbmVyaWMJaW5zZXJ0LnR4dAkvKmNvbXBsLWdlbmVyaWMqCitjb21wbC1rZXl3b3JkCWluc2VydC50eHQJLypjb21wbC1rZXl3b3JkKgorY29tcGwtdGFnCWluc2VydC50eHQJLypjb21wbC10YWcqCitjb21wbC12aW0JaW5zZXJ0LnR4dAkvKmNvbXBsLXZpbSoKK2NvbXBsLXdob2xlLWxpbmUJaW5zZXJ0LnR4dAkvKmNvbXBsLXdob2xlLWxpbmUqCitjb21wbGV4LWNoYW5nZQljaGFuZ2UudHh0CS8qY29tcGxleC1jaGFuZ2UqCitjb21wbGV4LXJlcGVhdAlyZXBlYXQudHh0CS8qY29tcGxleC1yZXBlYXQqCitjb21wcmVzcwlwaV9nemlwLnR4dAkvKmNvbXByZXNzKgorY29uZmlybSgpCWV2YWwudHh0CS8qY29uZmlybSgpKgorY29ubmVjdGlvbi1yZWZ1c2VkCW1lc3NhZ2UudHh0CS8qY29ubmVjdGlvbi1yZWZ1c2VkKgorY29uc29sZS1tZW51cwlndWkudHh0CS8qY29uc29sZS1tZW51cyoKK2NvbnRyb2wJaW50cm8udHh0CS8qY29udHJvbCoKK2NvbnZlcnNpb24tc2VydmVyCW1ieXRlLnR4dAkvKmNvbnZlcnNpb24tc2VydmVyKgorY29udmVydC10by1IVE1MCXN5bnRheC50eHQJLypjb252ZXJ0LXRvLUhUTUwqCitjb252ZXJ0LXRvLVhIVE1MCXN5bnRheC50eHQJLypjb252ZXJ0LXRvLVhIVE1MKgorY29udmVydC10by1YTUwJc3ludGF4LnR4dAkvKmNvbnZlcnQtdG8tWE1MKgorY29weS1kaWZmcwlkaWZmLnR4dAkvKmNvcHktZGlmZnMqCitjb3B5LW1vdmUJY2hhbmdlLnR4dAkvKmNvcHktbW92ZSoKK2NvcHlpbmcJdWdhbmRhLnR4dAkvKmNvcHlpbmcqCitjb3B5cmlnaHQJdWdhbmRhLnR4dAkvKmNvcHlyaWdodCoKK2NvdW50CWludHJvLnR4dAkvKmNvdW50KgorY291bnQtYnl0ZXMJdGlwcy50eHQJLypjb3VudC1ieXRlcyoKK2NvdW50LWl0ZW1zCXRpcHMudHh0CS8qY291bnQtaXRlbXMqCitjb3VudC12YXJpYWJsZQlldmFsLnR4dAkvKmNvdW50LXZhcmlhYmxlKgorY291bnQxLXZhcmlhYmxlCWV2YWwudHh0CS8qY291bnQxLXZhcmlhYmxlKgorY3AtZGVmYXVsdAl2ZXJzaW9uNS50eHQJLypjcC1kZWZhdWx0KgorY3BvLSEJb3B0aW9ucy50eHQJLypjcG8tISoKK2Nwby0kCW9wdGlvbnMudHh0CS8qY3BvLSQqCitjcG8tJQlvcHRpb25zLnR4dAkvKmNwby0lKgorY3BvLTwJb3B0aW9ucy50eHQJLypjcG8tPCoKK2Nwby1BCW9wdGlvbnMudHh0CS8qY3BvLUEqCitjcG8tQglvcHRpb25zLnR4dAkvKmNwby1CKgorY3BvLUMJb3B0aW9ucy50eHQJLypjcG8tQyoKK2Nwby1ECW9wdGlvbnMudHh0CS8qY3BvLUQqCitjcG8tRQlvcHRpb25zLnR4dAkvKmNwby1FKgorY3BvLUYJb3B0aW9ucy50eHQJLypjcG8tRioKK2Nwby1KCW9wdGlvbnMudHh0CS8qY3BvLUoqCitjcG8tSwlvcHRpb25zLnR4dAkvKmNwby1LKgorY3BvLUwJb3B0aW9ucy50eHQJLypjcG8tTCoKK2Nwby1NCW9wdGlvbnMudHh0CS8qY3BvLU0qCitjcG8tTwlvcHRpb25zLnR4dAkvKmNwby1PKgorY3BvLVIJb3B0aW9ucy50eHQJLypjcG8tUioKK2Nwby1TCW9wdGlvbnMudHh0CS8qY3BvLVMqCitjcG8tVwlvcHRpb25zLnR4dAkvKmNwby1XKgorY3BvLWEJb3B0aW9ucy50eHQJLypjcG8tYSoKK2Nwby1iCW9wdGlvbnMudHh0CS8qY3BvLWIqCitjcG8tYwlvcHRpb25zLnR4dAkvKmNwby1jKgorY3BvLWQJb3B0aW9ucy50eHQJLypjcG8tZCoKK2Nwby1lCW9wdGlvbnMudHh0CS8qY3BvLWUqCitjcG8tZglvcHRpb25zLnR4dAkvKmNwby1mKgorY3BvLWcJb3B0aW9ucy50eHQJLypjcG8tZyoKK2Nwby1pCW9wdGlvbnMudHh0CS8qY3BvLWkqCitjcG8taglvcHRpb25zLnR4dAkvKmNwby1qKgorY3BvLWsJb3B0aW9ucy50eHQJLypjcG8tayoKK2Nwby1sCW9wdGlvbnMudHh0CS8qY3BvLWwqCitjcG8tbQlvcHRpb25zLnR4dAkvKmNwby1tKgorY3BvLW4Jb3B0aW9ucy50eHQJLypjcG8tbioKK2Nwby1vCW9wdGlvbnMudHh0CS8qY3BvLW8qCitjcG8tcAlvcHRpb25zLnR4dAkvKmNwby1wKgorY3BvLXIJb3B0aW9ucy50eHQJLypjcG8tcioKK2Nwby1zCW9wdGlvbnMudHh0CS8qY3BvLXMqCitjcG8tc3RhcglvcHRpb25zLnR4dAkvKmNwby1zdGFyKgorY3BvLXQJb3B0aW9ucy50eHQJLypjcG8tdCoKK2Nwby11CW9wdGlvbnMudHh0CS8qY3BvLXUqCitjcG8tdglvcHRpb25zLnR4dAkvKmNwby12KgorY3BvLXcJb3B0aW9ucy50eHQJLypjcG8tdyoKK2Nwby14CW9wdGlvbnMudHh0CS8qY3BvLXgqCitjcG8teQlvcHRpb25zLnR4dAkvKmNwby15KgorY3Jhc2gtcmVjb3ZlcnkJcmVjb3Zlci50eHQJLypjcmFzaC1yZWNvdmVyeSoKK2NyZWF0aW5nLW1lbnVzCWd1aS50eHQJLypjcmVhdGluZy1tZW51cyoKK2NyZWRpdHMJaW50cm8udHh0CS8qY3JlZGl0cyoKK2Nyb250YWIJb3B0aW9ucy50eHQJLypjcm9udGFiKgorY3MtZmluZAlpZl9jc2NvcC50eHQJLypjcy1maW5kKgorY3M3LXByb2JsZW0JdGVybS50eHQJLypjczctcHJvYmxlbSoKK2NzY29wZQlpZl9jc2NvcC50eHQJLypjc2NvcGUqCitjc2NvcGUtY29tbWFuZHMJaWZfY3Njb3AudHh0CS8qY3Njb3BlLWNvbW1hbmRzKgorY3Njb3BlLWZpbmQJaWZfY3Njb3AudHh0CS8qY3Njb3BlLWZpbmQqCitjc2NvcGUtaG93dG91c2UJaWZfY3Njb3AudHh0CS8qY3Njb3BlLWhvd3RvdXNlKgorY3Njb3BlLWluZm8JaWZfY3Njb3AudHh0CS8qY3Njb3BlLWluZm8qCitjc2NvcGUtaW50cm8JaWZfY3Njb3AudHh0CS8qY3Njb3BlLWludHJvKgorY3Njb3BlLWxpbWl0YXRpb25zCWlmX2NzY29wLnR4dAkvKmNzY29wZS1saW1pdGF0aW9ucyoKK2NzY29wZS1vcHRpb25zCWlmX2NzY29wLnR4dAkvKmNzY29wZS1vcHRpb25zKgorY3Njb3BlLXN1Z2dlc3Rpb25zCWlmX2NzY29wLnR4dAkvKmNzY29wZS1zdWdnZXN0aW9ucyoKK2NzY29wZS13aW4zMglpZl9jc2NvcC50eHQJLypjc2NvcGUtd2luMzIqCitjc2NvcGVfY29ubmVjdGlvbigpCWV2YWwudHh0CS8qY3Njb3BlX2Nvbm5lY3Rpb24oKSoKK2NzY29wZXBhdGhjb21wCWlmX2NzY29wLnR4dAkvKmNzY29wZXBhdGhjb21wKgorY3Njb3BlcHJnCWlmX2NzY29wLnR4dAkvKmNzY29wZXByZyoKK2NzY29wZXF1aWNrZml4CWlmX2NzY29wLnR4dAkvKmNzY29wZXF1aWNrZml4KgorY3Njb3BldGFnCWlmX2NzY29wLnR4dAkvKmNzY29wZXRhZyoKK2NzY29wZXRhZ29yZGVyCWlmX2NzY29wLnR4dAkvKmNzY29wZXRhZ29yZGVyKgorY3Njb3BldmVyYm9zZQlpZl9jc2NvcC50eHQJLypjc2NvcGV2ZXJib3NlKgorY3NoLXN5bnRheAlzeW50YXgudHh0CS8qY3NoLXN5bnRheCoKK2NzaC52aW0Jc3ludGF4LnR4dAkvKmNzaC52aW0qCitjc3BjCWlmX2NzY29wLnR4dAkvKmNzcGMqCitjc3ByZwlpZl9jc2NvcC50eHQJLypjc3ByZyoKK2NzcWYJaWZfY3Njb3AudHh0CS8qY3NxZioKK2NzdAlpZl9jc2NvcC50eHQJLypjc3QqCitjc3RvCWlmX2NzY29wLnR4dAkvKmNzdG8qCitjc3ZlcmIJaWZfY3Njb3AudHh0CS8qY3N2ZXJiKgorY3RhZ3MJdGFnc3JjaC50eHQJLypjdGFncyoKK2N0YWdzLWdvbmUJdmVyc2lvbjYudHh0CS8qY3RhZ3MtZ29uZSoKK2N0ZXJtLWNvbG9ycwlzeW50YXgudHh0CS8qY3Rlcm0tY29sb3JzKgorY3RybAlpbnRyby50eHQJLypjdHJsKgorY3R5cGUtdmFyaWFibGUJZXZhbC50eHQJLypjdHlwZS12YXJpYWJsZSoKK2N1cmx5LWJyYWNlcy1mdW5jdGlvbi1uYW1lcwlldmFsLnR4dAkvKmN1cmx5LWJyYWNlcy1mdW5jdGlvbi1uYW1lcyoKK2N1cmx5LWJyYWNlcy1uYW1lcwlldmFsLnR4dAkvKmN1cmx5LWJyYWNlcy1uYW1lcyoKK2N1cnBvcy12aXN1YWwJdmVyc2lvbjYudHh0CS8qY3VycG9zLXZpc3VhbCoKK2N1cnJlbnQtZGlyZWN0b3J5CWVkaXRpbmcudHh0CS8qY3VycmVudC1kaXJlY3RvcnkqCitjdXJyZW50LWZpbGUJZWRpdGluZy50eHQJLypjdXJyZW50LWZpbGUqCitjdXJyZW50X2NvbXBpbGVyCXF1aWNrZml4LnR4dAkvKmN1cnJlbnRfY29tcGlsZXIqCitjdXJzb3IoKQlldmFsLnR4dAkvKmN1cnNvcigpKgorY3Vyc29yLWJsaW5raW5nCW9wdGlvbnMudHh0CS8qY3Vyc29yLWJsaW5raW5nKgorY3Vyc29yLWRvd24JaW50cm8udHh0CS8qY3Vyc29yLWRvd24qCitjdXJzb3ItbGVmdAlpbnRyby50eHQJLypjdXJzb3ItbGVmdCoKK2N1cnNvci1tb3Rpb25zCW1vdGlvbi50eHQJLypjdXJzb3ItbW90aW9ucyoKK2N1cnNvci1wb3NpdGlvbglwYXR0ZXJuLnR4dAkvKmN1cnNvci1wb3NpdGlvbioKK2N1cnNvci1yaWdodAlpbnRyby50eHQJLypjdXJzb3ItcmlnaHQqCitjdXJzb3ItdXAJaW50cm8udHh0CS8qY3Vyc29yLXVwKgorY3Vyc29yX2Rvd24JaW50cm8udHh0CS8qY3Vyc29yX2Rvd24qCitjdXJzb3JfbGVmdAlpbnRyby50eHQJLypjdXJzb3JfbGVmdCoKK2N1cnNvcl9yaWdodAlpbnRyby50eHQJLypjdXJzb3JfcmlnaHQqCitjdXJzb3JfdXAJaW50cm8udHh0CS8qY3Vyc29yX3VwKgorY3cJY2hhbmdlLnR4dAkvKmN3KgorY3dlYi1zeW50YXgJc3ludGF4LnR4dAkvKmN3ZWItc3ludGF4KgorY3dlYi52aW0Jc3ludGF4LnR4dAkvKmN3ZWIudmltKgorY3lubGliLXN5bnRheAlzeW50YXgudHh0CS8qY3lubGliLXN5bnRheCoKK2N5bmxpYi52aW0Jc3ludGF4LnR4dAkvKmN5bmxpYi52aW0qCitkCWNoYW5nZS50eHQJLypkKgorZGFCCW1vdGlvbi50eHQJLypkYUIqCitkYVcJbW90aW9uLnR4dAkvKmRhVyoKK2RhYgltb3Rpb24udHh0CS8qZGFiKgorZGFwCW1vdGlvbi50eHQJLypkYXAqCitkYXMJbW90aW9uLnR4dAkvKmRhcyoKK2RhdglwaV9uZXRydy50eHQJLypkYXYqCitkYXcJbW90aW9uLnR4dAkvKmRhdyoKK2RkCWNoYW5nZS50eHQJLypkZCoKK2RlYnVnLWhpZ2hsaWdodAlkZWJ1Z2dlci50eHQJLypkZWJ1Zy1oaWdobGlnaHQqCitkZWJ1Zy1tb2RlCXJlcGVhdC50eHQJLypkZWJ1Zy1tb2RlKgorZGVidWctc2NyaXB0cwlyZXBlYXQudHh0CS8qZGVidWctc2NyaXB0cyoKK2RlYnVnLXNpZ25zCWRlYnVnZ2VyLnR4dAkvKmRlYnVnLXNpZ25zKgorZGVidWctdmltCWludHJvLnR4dAkvKmRlYnVnLXZpbSoKK2RlYnVnZ2VyLWNvbXBpbGF0aW9uCWRlYnVnZ2VyLnR4dAkvKmRlYnVnZ2VyLWNvbXBpbGF0aW9uKgorZGVidWdnZXItZmVhdHVyZXMJZGVidWdnZXIudHh0CS8qZGVidWdnZXItZmVhdHVyZXMqCitkZWJ1Z2dlci1pbnRlZ3JhdGlvbglkZWJ1Z2dlci50eHQJLypkZWJ1Z2dlci1pbnRlZ3JhdGlvbioKK2RlYnVnZ2VyLXN1cHBvcnQJZGVidWdnZXIudHh0CS8qZGVidWdnZXItc3VwcG9ydCoKK2RlYnVnZ2VyLnR4dAlkZWJ1Z2dlci50eHQJLypkZWJ1Z2dlci50eHQqCitkZWMtbW91c2UJb3B0aW9ucy50eHQJLypkZWMtbW91c2UqCitkZWZpbml0aW9uLXNlYXJjaAl0YWdzcmNoLnR4dAkvKmRlZmluaXRpb24tc2VhcmNoKgorZGVmaW5pdGlvbnMJaW50cm8udHh0CS8qZGVmaW5pdGlvbnMqCitkZWxldGUoKQlldmFsLnR4dAkvKmRlbGV0ZSgpKgorZGVsZXRlLWluc2VydAljaGFuZ2UudHh0CS8qZGVsZXRlLWluc2VydCoKK2RlbGV0ZS1tZW51cwlndWkudHh0CS8qZGVsZXRlLW1lbnVzKgorZGVsZXRpbmcJY2hhbmdlLnR4dAkvKmRlbGV0aW5nKgorZGVzaWduLWFzc3VtcHRpb25zCWRldmVsb3AudHh0CS8qZGVzaWduLWFzc3VtcHRpb25zKgorZGVzaWduLWNvbXBhdGlibGUJZGV2ZWxvcC50eHQJLypkZXNpZ24tY29tcGF0aWJsZSoKK2Rlc2lnbi1kZWNpc2lvbnMJZGV2ZWxvcC50eHQJLypkZXNpZ24tZGVjaXNpb25zKgorZGVzaWduLWRvY3VtZW50ZWQJZGV2ZWxvcC50eHQJLypkZXNpZ24tZG9jdW1lbnRlZCoKK2Rlc2lnbi1mbGV4aWJsZQlkZXZlbG9wLnR4dAkvKmRlc2lnbi1mbGV4aWJsZSoKK2Rlc2lnbi1nb2FscwlkZXZlbG9wLnR4dAkvKmRlc2lnbi1nb2FscyoKK2Rlc2lnbi1pbXByb3ZlZAlkZXZlbG9wLnR4dAkvKmRlc2lnbi1pbXByb3ZlZCoKK2Rlc2lnbi1tYWludGFpbglkZXZlbG9wLnR4dAkvKmRlc2lnbi1tYWludGFpbioKK2Rlc2lnbi1tdWx0aS1wbGF0Zm9ybQlkZXZlbG9wLnR4dAkvKmRlc2lnbi1tdWx0aS1wbGF0Zm9ybSoKK2Rlc2lnbi1ub3QJZGV2ZWxvcC50eHQJLypkZXNpZ24tbm90KgorZGVzaWduLXNwZWVkLXNpemUJZGV2ZWxvcC50eHQJLypkZXNpZ24tc3BlZWQtc2l6ZSoKK2Rlc2t0b3Atc3ludGF4CXN5bnRheC50eHQJLypkZXNrdG9wLXN5bnRheCoKK2Rlc2t0b3AudmltCXN5bnRheC50eHQJLypkZXNrdG9wLnZpbSoKK2RldmVsb3AudHh0CWRldmVsb3AudHh0CS8qZGV2ZWxvcC50eHQqCitkZXZlbG9wbWVudAlkZXZlbG9wLnR4dAkvKmRldmVsb3BtZW50KgorZGgJY2hhbmdlLnR4dAkvKmRoKgorZGlCCW1vdGlvbi50eHQJLypkaUIqCitkaVcJbW90aW9uLnR4dAkvKmRpVyoKK2RpYWxvZwlndWlfdzMyLnR4dAkvKmRpYWxvZyoKK2RpYWxvZ3MtYWRkZWQJdmVyc2lvbjUudHh0CS8qZGlhbG9ncy1hZGRlZCoKK2RpYgltb3Rpb24udHh0CS8qZGliKgorZGlkX2ZpbGV0eXBlKCkJZXZhbC50eHQJLypkaWRfZmlsZXR5cGUoKSoKK2RpZmYJZGlmZi50eHQJLypkaWZmKgorZGlmZi1kaWZmZXhwcglkaWZmLnR4dAkvKmRpZmYtZGlmZmV4cHIqCitkaWZmLW1vZGUJZGlmZi50eHQJLypkaWZmLW1vZGUqCitkaWZmLW9wdGlvbnMJZGlmZi50eHQJLypkaWZmLW9wdGlvbnMqCitkaWZmLXBhdGNoZXhwcglkaWZmLnR4dAkvKmRpZmYtcGF0Y2hleHByKgorZGlmZi50eHQJZGlmZi50eHQJLypkaWZmLnR4dCoKK2RpZ3JhcGgtYXJnCWNoYW5nZS50eHQJLypkaWdyYXBoLWFyZyoKK2RpZ3JhcGgtdGFibGUJZGlncmFwaC50eHQJLypkaWdyYXBoLXRhYmxlKgorZGlncmFwaC50eHQJZGlncmFwaC50eHQJLypkaWdyYXBoLnR4dCoKK2RpZ3JhcGhzCWRpZ3JhcGgudHh0CS8qZGlncmFwaHMqCitkaWdyYXBocy1jaGFuZ2VkCXZlcnNpb242LnR4dAkvKmRpZ3JhcGhzLWNoYW5nZWQqCitkaWdyYXBocy1kZWZhdWx0CWRpZ3JhcGgudHh0CS8qZGlncmFwaHMtZGVmYXVsdCoKK2RpZ3JhcGhzLWRlZmluZQlkaWdyYXBoLnR4dAkvKmRpZ3JhcGhzLWRlZmluZSoKK2RpZ3JhcGhzLXVzZQlkaWdyYXBoLnR4dAkvKmRpZ3JhcGhzLXVzZSoKK2RpcAltb3Rpb24udHh0CS8qZGlwKgorZGlyY29sb3JzLXN5bnRheAlzeW50YXgudHh0CS8qZGlyY29sb3JzLXN5bnRheCoKK2RpcmNvbG9ycy52aW0Jc3ludGF4LnR4dAkvKmRpcmNvbG9ycy52aW0qCitkaXMJbW90aW9uLnR4dAkvKmRpcyoKK2Rpc2FibGUtbWVudXMJZ3VpLnR4dAkvKmRpc2FibGUtbWVudXMqCitkaXN0cmlidXRpb24JaW50cm8udHh0CS8qZGlzdHJpYnV0aW9uKgorZGl3CW1vdGlvbi50eHQJLypkaXcqCitkbAljaGFuZ2UudHh0CS8qZGwqCitkbwlkaWZmLnR4dAkvKmRvKgorZG9jLWZpbGUtbGlzdAloZWxwLnR4dAkvKmRvYy1maWxlLWxpc3QqCitkb2Niay1zeW50YXgJc3ludGF4LnR4dAkvKmRvY2JrLXN5bnRheCoKK2RvY2JrLnZpbQlzeW50YXgudHh0CS8qZG9jYmsudmltKgorZG9jYmtzZ21sLXN5bnRheAlzeW50YXgudHh0CS8qZG9jYmtzZ21sLXN5bnRheCoKK2RvY2Jrc2dtbC52aW0Jc3ludGF4LnR4dAkvKmRvY2Jrc2dtbC52aW0qCitkb2Nia3htbC1zeW50YXgJc3ludGF4LnR4dAkvKmRvY2JreG1sLXN5bnRheCoKK2RvY2JreG1sLnZpbQlzeW50YXgudHh0CS8qZG9jYmt4bWwudmltKgorZG9jYm9vawlzeW50YXgudHh0CS8qZG9jYm9vayoKK2RvY3VtZW50YXRpb24tNgl2ZXJzaW9uNi50eHQJLypkb2N1bWVudGF0aW9uLTYqCitkb3MJb3NfZG9zLnR4dAkvKmRvcyoKK2Rvcy06Y2QJb3NfZG9zLnR4dAkvKmRvcy06Y2QqCitkb3MtQ1RSTC1CcmVhawlvc19kb3MudHh0CS8qZG9zLUNUUkwtQnJlYWsqCitkb3MtYmFja3NsYXNoCW9zX2Rvcy50eHQJLypkb3MtYmFja3NsYXNoKgorZG9zLWNvbG9ycwlvc19kb3MudHh0CS8qZG9zLWNvbG9ycyoKK2Rvcy1maWxlLWZvcm1hdHMJb3NfZG9zLnR4dAkvKmRvcy1maWxlLWZvcm1hdHMqCitkb3MtbG9jYXRpb25zCW9zX2Rvcy50eHQJLypkb3MtbG9jYXRpb25zKgorZG9zLXNoZWxsCW9zX2Rvcy50eHQJLypkb3Mtc2hlbGwqCitkb3Mtc3RhbmRhcmQtbWFwcGluZ3MJb3NfZG9zLnR4dAkvKmRvcy1zdGFuZGFyZC1tYXBwaW5ncyoKK2Rvcy10ZW1wLWZpbGVzCW9zX2Rvcy50eHQJLypkb3MtdGVtcC1maWxlcyoKK2RvczE2CW9zX21zZG9zLnR4dAkvKmRvczE2KgorZG9zMzIJb3NfbXNkb3MudHh0CS8qZG9zMzIqCitkb3NiYXRjaC1zeW50YXgJc3ludGF4LnR4dAkvKmRvc2JhdGNoLXN5bnRheCoKK2Rvc2JhdGNoLnZpbQlzeW50YXgudHh0CS8qZG9zYmF0Y2gudmltKgorZG91YmxlLWNsaWNrCXRlcm0udHh0CS8qZG91YmxlLWNsaWNrKgorZG93bmxvYWQJaW50cm8udHh0CS8qZG93bmxvYWQqCitkcAlkaWZmLnR4dAkvKmRwKgorZHJhZy1uLWRyb3AJZ3VpLnR4dAkvKmRyYWctbi1kcm9wKgorZHJhZy1uLWRyb3Atd2luMzIJZ3VpX3czMi50eHQJLypkcmFnLW4tZHJvcC13aW4zMioKK2RyYWctc3RhdHVzLWxpbmUJdGVybS50eHQJLypkcmFnLXN0YXR1cy1saW5lKgorZHRkLXN5bnRheAlzeW50YXgudHh0CS8qZHRkLXN5bnRheCoKK2R0ZC52aW0Jc3ludGF4LnR4dAkvKmR0ZC52aW0qCitkeWluZy12YXJpYWJsZQlldmFsLnR4dAkvKmR5aW5nLXZhcmlhYmxlKgorZQltb3Rpb24udHh0CS8qZSoKK2Vhc3kJc3RhcnRpbmcudHh0CS8qZWFzeSoKK2VkaXQtYS1maWxlCWVkaXRpbmcudHh0CS8qZWRpdC1hLWZpbGUqCitlZGl0LWJpbmFyeQllZGl0aW5nLnR4dAkvKmVkaXQtYmluYXJ5KgorZWRpdC1kaWFsb2dzCWVkaXRpbmcudHh0CS8qZWRpdC1kaWFsb2dzKgorZWRpdC1maWxlcwllZGl0aW5nLnR4dAkvKmVkaXQtZmlsZXMqCitlZGl0LWludHJvCWVkaXRpbmcudHh0CS8qZWRpdC1pbnRybyoKK2VkaXQtbm8tYnJlYWsJdXNyXzI1LnR4dAkvKmVkaXQtbm8tYnJlYWsqCitlZGl0aW5nLnR4dAllZGl0aW5nLnR4dAkvKmVkaXRpbmcudHh0KgorZWZtLWVudHJpZXMJcXVpY2tmaXgudHh0CS8qZWZtLWVudHJpZXMqCitlZm0taWdub3JlCXF1aWNrZml4LnR4dAkvKmVmbS1pZ25vcmUqCitlaWZmZWwtc3ludGF4CXN5bnRheC50eHQJLyplaWZmZWwtc3ludGF4KgorZWlmZmVsLnZpbQlzeW50YXgudHh0CS8qZWlmZmVsLnZpbSoKK2VtYWNzLWtleXMJdGlwcy50eHQJLyplbWFjcy1rZXlzKgorZW1hY3MtdGFncwl0YWdzcmNoLnR4dAkvKmVtYWNzLXRhZ3MqCitlbWFjc190YWdzCXRhZ3NyY2gudHh0CS8qZW1hY3NfdGFncyoKK2VuY29kaW5nLW5hbWVzCW1ieXRlLnR4dAkvKmVuY29kaW5nLW5hbWVzKgorZW5jb2RpbmctdGFibGUJbWJ5dGUudHh0CS8qZW5jb2RpbmctdGFibGUqCitlbmNvZGluZy12YWx1ZXMJbWJ5dGUudHh0CS8qZW5jb2RpbmctdmFsdWVzKgorZW5jcnlwdGlvbgllZGl0aW5nLnR4dAkvKmVuY3J5cHRpb24qCitlbmQJaW50cm8udHh0CS8qZW5kKgorZW5kLW9mLWZpbGUJcGF0dGVybi50eHQJLyplbmQtb2YtZmlsZSoKK2VubGlnaHRlbmVkLXRlcm1pbmFsCXN5bnRheC50eHQJLyplbmxpZ2h0ZW5lZC10ZXJtaW5hbCoKK2VybGFuZy1zeW50YXgJc3ludGF4LnR4dAkvKmVybGFuZy1zeW50YXgqCitlcmxhbmcudmltCXN5bnRheC50eHQJLyplcmxhbmcudmltKgorZXJybXNnLXZhcmlhYmxlCWV2YWwudHh0CS8qZXJybXNnLXZhcmlhYmxlKgorZXJyb3ItZmlsZS1mb3JtYXQJcXVpY2tmaXgudHh0CS8qZXJyb3ItZmlsZS1mb3JtYXQqCitlcnJvci1tZXNzYWdlcwltZXNzYWdlLnR4dAkvKmVycm9yLW1lc3NhZ2VzKgorZXJyb3Jmb3JtYXQJcXVpY2tmaXgudHh0CS8qZXJyb3Jmb3JtYXQqCitlcnJvcmZvcm1hdC1KaWtlcwlxdWlja2ZpeC50eHQJLyplcnJvcmZvcm1hdC1KaWtlcyoKK2Vycm9yZm9ybWF0LUxhVGVYCXF1aWNrZml4LnR4dAkvKmVycm9yZm9ybWF0LUxhVGVYKgorZXJyb3Jmb3JtYXQtUGVybAlxdWlja2ZpeC50eHQJLyplcnJvcmZvcm1hdC1QZXJsKgorZXJyb3Jmb3JtYXQtYW50CXF1aWNrZml4LnR4dAkvKmVycm9yZm9ybWF0LWFudCoKK2Vycm9yZm9ybWF0LWNoYW5nZWQJdmVyc2lvbjQudHh0CS8qZXJyb3Jmb3JtYXQtY2hhbmdlZCoKK2Vycm9yZm9ybWF0LWphZGUJcXVpY2tmaXgudHh0CS8qZXJyb3Jmb3JtYXQtamFkZSoKK2Vycm9yZm9ybWF0LWphdmFjCXF1aWNrZml4LnR4dAkvKmVycm9yZm9ybWF0LWphdmFjKgorZXJyb3Jmb3JtYXQtbXVsdGktbGluZQlxdWlja2ZpeC50eHQJLyplcnJvcmZvcm1hdC1tdWx0aS1saW5lKgorZXJyb3Jmb3JtYXQtc2VwYXJhdGUtZmlsZW5hbWUJcXVpY2tmaXgudHh0CS8qZXJyb3Jmb3JtYXQtc2VwYXJhdGUtZmlsZW5hbWUqCitlcnJvcmZvcm1hdHMJcXVpY2tmaXgudHh0CS8qZXJyb3Jmb3JtYXRzKgorZXNjYXBlCWludHJvLnR4dAkvKmVzY2FwZSoKK2VzY2FwZSgpCWV2YWwudHh0CS8qZXNjYXBlKCkqCitlc2NhcGUtYmFyCXZlcnNpb240LnR4dAkvKmVzY2FwZS1iYXIqCitldmFsCWV2YWwudHh0CS8qZXZhbCoKK2V2YWwtZXhhbXBsZXMJZXZhbC50eHQJLypldmFsLWV4YW1wbGVzKgorZXZhbC1zYW5kYm94CWV2YWwudHh0CS8qZXZhbC1zYW5kYm94KgorZXZhbC50eHQJZXZhbC50eHQJLypldmFsLnR4dCoKK2V2ZW50aGFuZGxlcigpCWV2YWwudHh0CS8qZXZlbnRoYW5kbGVyKCkqCitldmlldwlzdGFydGluZy50eHQJLypldmlldyoKK2V2aW0Jc3RhcnRpbmcudHh0CS8qZXZpbSoKK2V2aW0ta2V5cwlzdGFydGluZy50eHQJLypldmltLWtleXMqCitldmltLnZpbQlzdGFydGluZy50eHQJLypldmltLnZpbSoKK2V4CXN0YXJ0aW5nLnR4dAkvKmV4KgorZXgtY21kLWluZGV4CWluZGV4LnR4dAkvKmV4LWNtZC1pbmRleCoKK2V4LWVkaXQtaW5kZXgJaW5kZXgudHh0CS8qZXgtZWRpdC1pbmRleCoKK2V4OglvcHRpb25zLnR4dAkvKmV4OioKK2V4Y2VwdC1hdXRvY21kCWV2YWwudHh0CS8qZXhjZXB0LWF1dG9jbWQqCitleGNlcHQtYXV0b2NtZC1DbWQJZXZhbC50eHQJLypleGNlcHQtYXV0b2NtZC1DbWQqCitleGNlcHQtYXV0b2NtZC1Qb3N0CWV2YWwudHh0CS8qZXhjZXB0LWF1dG9jbWQtUG9zdCoKK2V4Y2VwdC1hdXRvY21kLVByZQlldmFsLnR4dAkvKmV4Y2VwdC1hdXRvY21kLVByZSoKK2V4Y2VwdC1hdXRvY21kLWlsbAlldmFsLnR4dAkvKmV4Y2VwdC1hdXRvY21kLWlsbCoKK2V4Y2VwdC1jb21wYXQJZXZhbC50eHQJLypleGNlcHQtY29tcGF0KgorZXhjZXB0LWV4YW1pbmUJZXZhbC50eHQJLypleGNlcHQtZXhhbWluZSoKK2V4Y2VwdC1mcm9tLWZpbmFsbHkJZXZhbC50eHQJLypleGNlcHQtZnJvbS1maW5hbGx5KgorZXhjZXB0LWhpZXItcGFyYW0JZXZhbC50eHQJLypleGNlcHQtaGllci1wYXJhbSoKK2V4Y2VwdC1zZXZlcmFsLWVycm9ycwlldmFsLnR4dAkvKmV4Y2VwdC1zZXZlcmFsLWVycm9ycyoKK2V4Y2VwdC1zaW5nbGUtbGluZQlldmFsLnR4dAkvKmV4Y2VwdC1zaW5nbGUtbGluZSoKK2V4Y2VwdC1zeW50YXgtZXJyCWV2YWwudHh0CS8qZXhjZXB0LXN5bnRheC1lcnIqCitleGNlcHQtc3ludGF4LWVycm9yCWV2YWwudHh0CS8qZXhjZXB0LXN5bnRheC1lcnJvcioKK2V4Y2VwdGlvbi1oYW5kbGluZwlldmFsLnR4dAkvKmV4Y2VwdGlvbi1oYW5kbGluZyoKK2V4Y2VwdGlvbi12YXJpYWJsZQlldmFsLnR4dAkvKmV4Y2VwdGlvbi12YXJpYWJsZSoKK2V4Y2x1c2l2ZQltb3Rpb24udHh0CS8qZXhjbHVzaXZlKgorZXhlY3V0YWJsZSgpCWV2YWwudHh0CS8qZXhlY3V0YWJsZSgpKgorZXhlY3V0ZS1tZW51cwlndWkudHh0CS8qZXhlY3V0ZS1tZW51cyoKK2V4aW0Jc3RhcnRpbmcudHh0CS8qZXhpbSoKK2V4aXN0cygpCWV2YWwudHh0CS8qZXhpc3RzKCkqCitleHBhbmQoKQlldmFsLnR4dAkvKmV4cGFuZCgpKgorZXhwYW5kLWVudglvcHRpb25zLnR4dAkvKmV4cGFuZC1lbnYqCitleHBhbmQtZW52aXJvbm1lbnQtdmFyCW9wdGlvbnMudHh0CS8qZXhwYW5kLWVudmlyb25tZW50LXZhcioKK2V4cGwtc3RhcnRpbmcJcGlfZXhwbC50eHQJLypleHBsLXN0YXJ0aW5nKgorZXhwbG9yZXItZGVsZXRlCXBpX2V4cGwudHh0CS8qZXhwbG9yZXItZGVsZXRlKgorZXhwbG9yZXItcmVuYW1lCXBpX2V4cGwudHh0CS8qZXhwbG9yZXItcmVuYW1lKgorZXhwcglldmFsLnR4dAkvKmV4cHIqCitleHByLSEJZXZhbC50eHQJLypleHByLSEqCitleHByLSE9CWV2YWwudHh0CS8qZXhwci0hPSoKK2V4cHItIT0jCWV2YWwudHh0CS8qZXhwci0hPSMqCitleHByLSE9PwlldmFsLnR4dAkvKmV4cHItIT0/KgorZXhwci0hfglldmFsLnR4dAkvKmV4cHItIX4qCitleHByLSF+IwlldmFsLnR4dAkvKmV4cHItIX4jKgorZXhwci0hfj8JZXZhbC50eHQJLypleHByLSF+PyoKK2V4cHItJQlldmFsLnR4dAkvKmV4cHItJSoKK2V4cHItJiYJZXZhbC50eHQJLypleHByLSYmKgorZXhwci0nCWV2YWwudHh0CS8qZXhwci0nKgorZXhwci0rCWV2YWwudHh0CS8qZXhwci0rKgorZXhwci0tCWV2YWwudHh0CS8qZXhwci0tKgorZXhwci0uCWV2YWwudHh0CS8qZXhwci0uKgorZXhwci0vCWV2YWwudHh0CS8qZXhwci1cLyoKK2V4cHItPAlldmFsLnR4dAkvKmV4cHItPCoKK2V4cHItPCMJZXZhbC50eHQJLypleHByLTwjKgorZXhwci08PQlldmFsLnR4dAkvKmV4cHItPD0qCitleHByLTw9IwlldmFsLnR4dAkvKmV4cHItPD0jKgorZXhwci08PT8JZXZhbC50eHQJLypleHByLTw9PyoKK2V4cHItPD8JZXZhbC50eHQJLypleHByLTw/KgorZXhwci09PQlldmFsLnR4dAkvKmV4cHItPT0qCitleHByLT09IwlldmFsLnR4dAkvKmV4cHItPT0jKgorZXhwci09PT8JZXZhbC50eHQJLypleHByLT09PyoKK2V4cHItPX4JZXZhbC50eHQJLypleHByLT1+KgorZXhwci09fiMJZXZhbC50eHQJLypleHByLT1+IyoKK2V4cHItPX4/CWV2YWwudHh0CS8qZXhwci09fj8qCitleHByLT4JZXZhbC50eHQJLypleHByLT4qCitleHByLT4jCWV2YWwudHh0CS8qZXhwci0+IyoKK2V4cHItPj0JZXZhbC50eHQJLypleHByLT49KgorZXhwci0+PSMJZXZhbC50eHQJLypleHByLT49IyoKK2V4cHItPj0/CWV2YWwudHh0CS8qZXhwci0+PT8qCitleHByLT4/CWV2YWwudHh0CS8qZXhwci0+PyoKK2V4cHItW10JZXZhbC50eHQJLypleHByLVtdKgorZXhwci1iYXJiYXIJZXZhbC50eHQJLypleHByLWJhcmJhcioKK2V4cHItZW52CWV2YWwudHh0CS8qZXhwci1lbnYqCitleHByLWVudi1leHBhbmQJZXZhbC50eHQJLypleHByLWVudi1leHBhbmQqCitleHByLWZ1bmN0aW9uCWV2YWwudHh0CS8qZXhwci1mdW5jdGlvbioKK2V4cHItbmVzdGluZwlldmFsLnR4dAkvKmV4cHItbmVzdGluZyoKK2V4cHItbnVtYmVyCWV2YWwudHh0CS8qZXhwci1udW1iZXIqCitleHByLW9wdGlvbglldmFsLnR4dAkvKmV4cHItb3B0aW9uKgorZXhwci1xdW90ZQlldmFsLnR4dAkvKmV4cHItcXVvdGUqCitleHByLXJlZ2lzdGVyCWV2YWwudHh0CS8qZXhwci1yZWdpc3RlcioKK2V4cHItc3RhcglldmFsLnR4dAkvKmV4cHItc3RhcioKK2V4cHItc3RyaW5nCWV2YWwudHh0CS8qZXhwci1zdHJpbmcqCitleHByLXVuYXJ5LSsJZXZhbC50eHQJLypleHByLXVuYXJ5LSsqCitleHByLXVuYXJ5LS0JZXZhbC50eHQJLypleHByLXVuYXJ5LS0qCitleHByLXZhcmlhYmxlCWV2YWwudHh0CS8qZXhwci12YXJpYWJsZSoKK2V4cHIxCWV2YWwudHh0CS8qZXhwcjEqCitleHByMglldmFsLnR4dAkvKmV4cHIyKgorZXhwcjMJZXZhbC50eHQJLypleHByMyoKK2V4cHI0CWV2YWwudHh0CS8qZXhwcjQqCitleHByNQlldmFsLnR4dAkvKmV4cHI1KgorZXhwcjYJZXZhbC50eHQJLypleHByNioKK2V4cHI3CWV2YWwudHh0CS8qZXhwcjcqCitleHByOAlldmFsLnR4dAkvKmV4cHI4KgorZXhwcjkJZXZhbC50eHQJLypleHByOSoKK2V4cHJlc3Npb24JZXZhbC50eHQJLypleHByZXNzaW9uKgorZXhwcmVzc2lvbi1jb21tYW5kcwlldmFsLnR4dAkvKmV4cHJlc3Npb24tY29tbWFuZHMqCitleHByZXNzaW9uLXN5bnRheAlldmFsLnR4dAkvKmV4cHJlc3Npb24tc3ludGF4KgorZXhyYwlzdGFydGluZy50eHQJLypleHJjKgorZXh0ZW5zaW9uLXJlbW92YWwJY21kbGluZS50eHQJLypleHRlbnNpb24tcmVtb3ZhbCoKK2V4dGVuc2lvbnMtaW1wcm92ZW1lbnRzCXRvZG8udHh0CS8qZXh0ZW5zaW9ucy1pbXByb3ZlbWVudHMqCitmCW1vdGlvbi50eHQJLypmKgorZmFxCWludHJvLnR4dAkvKmZhcSoKK2ZhcnNpCWZhcnNpLnR4dAkvKmZhcnNpKgorZmFyc2kudHh0CWZhcnNpLnR4dAkvKmZhcnNpLnR4dCoKK2Zhc20udmltCXN5bnRheC50eHQJLypmYXNtLnZpbSoKK2ZlYXR1cmUtbGlzdAlldmFsLnR4dAkvKmZlYXR1cmUtbGlzdCoKK2ZldGNoCXBpX25ldHJ3LnR4dAkvKmZldGNoKgorZmlsZS1icm93c2VyCXBpX2V4cGwudHh0CS8qZmlsZS1icm93c2VyKgorZmlsZS1icm93c2VyLTUuMgl2ZXJzaW9uNS50eHQJLypmaWxlLWJyb3dzZXItNS4yKgorZmlsZS1leHBsb3JlcglwaV9leHBsLnR4dAkvKmZpbGUtZXhwbG9yZXIqCitmaWxlLWZvcm1hdHMJZWRpdGluZy50eHQJLypmaWxlLWZvcm1hdHMqCitmaWxlLXBhdHRlcm4JYXV0b2NtZC50eHQJLypmaWxlLXBhdHRlcm4qCitmaWxlLXJlYWQJaW5zZXJ0LnR4dAkvKmZpbGUtcmVhZCoKK2ZpbGUtc2VhcmNoaW5nCWVkaXRpbmcudHh0CS8qZmlsZS1zZWFyY2hpbmcqCitmaWxlLXR5cGUJZmlsZXR5cGUudHh0CS8qZmlsZS10eXBlKgorZmlsZS10eXBlcwlmaWxldHlwZS50eHQJLypmaWxlLXR5cGVzKgorZmlsZV9yZWFkYWJsZSgpCWV2YWwudHh0CS8qZmlsZV9yZWFkYWJsZSgpKgorZmlsZWVuY29kaW5nLWNoYW5nZWQJdmVyc2lvbjYudHh0CS8qZmlsZWVuY29kaW5nLWNoYW5nZWQqCitmaWxlbmFtZS1iYWNrc2xhc2gJY21kbGluZS50eHQJLypmaWxlbmFtZS1iYWNrc2xhc2gqCitmaWxlbmFtZS1tb2RpZmllcnMJY21kbGluZS50eHQJLypmaWxlbmFtZS1tb2RpZmllcnMqCitmaWxlcmVhZGFibGUoKQlldmFsLnR4dAkvKmZpbGVyZWFkYWJsZSgpKgorZmlsZXR5cGUJZmlsZXR5cGUudHh0CS8qZmlsZXR5cGUqCitmaWxldHlwZS1kZXRlY3QJZmlsZXR5cGUudHh0CS8qZmlsZXR5cGUtZGV0ZWN0KgorZmlsZXR5cGUtaWdub3JlCWZpbGV0eXBlLnR4dAkvKmZpbGV0eXBlLWlnbm9yZSoKK2ZpbGV0eXBlLW92ZXJydWxlCWZpbGV0eXBlLnR4dAkvKmZpbGV0eXBlLW92ZXJydWxlKgorZmlsZXR5cGUtcGx1Z2luCXVzcl80My50eHQJLypmaWxldHlwZS1wbHVnaW4qCitmaWxldHlwZS1wbHVnaW5zCWZpbGV0eXBlLnR4dAkvKmZpbGV0eXBlLXBsdWdpbnMqCitmaWxldHlwZS50eHQJZmlsZXR5cGUudHh0CS8qZmlsZXR5cGUudHh0KgorZmlsZXR5cGVkZXRlY3QtY2hhbmdlZAl2ZXJzaW9uNi50eHQJLypmaWxldHlwZWRldGVjdC1jaGFuZ2VkKgorZmlsZXR5cGVzCWZpbGV0eXBlLnR4dAkvKmZpbGV0eXBlcyoKK2ZpbGV3cml0YWJsZSgpCWV2YWwudHh0CS8qZmlsZXdyaXRhYmxlKCkqCitmaWx0ZXIJY2hhbmdlLnR4dAkvKmZpbHRlcioKK2ZpbmQtbWFucGFnZQl1c3JfMTIudHh0CS8qZmluZC1tYW5wYWdlKgorZmluZC1yZXBsYWNlCXVzcl8xMC50eHQJLypmaW5kLXJlcGxhY2UqCitmaXhlZC01LjEJdmVyc2lvbjUudHh0CS8qZml4ZWQtNS4xKgorZml4ZWQtNS4yCXZlcnNpb241LnR4dAkvKmZpeGVkLTUuMioKK2ZpeGVkLTUuMwl2ZXJzaW9uNS50eHQJLypmaXhlZC01LjMqCitmaXhlZC01LjQJdmVyc2lvbjUudHh0CS8qZml4ZWQtNS40KgorZml4ZWQtNS41CXZlcnNpb241LnR4dAkvKmZpeGVkLTUuNSoKK2ZpeGVkLTUuNgl2ZXJzaW9uNS50eHQJLypmaXhlZC01LjYqCitmaXhlZC01LjcJdmVyc2lvbjUudHh0CS8qZml4ZWQtNS43KgorZml4ZWQtNS44CXZlcnNpb241LnR4dAkvKmZpeGVkLTUuOCoKK2ZpeGVkLTYuMQl2ZXJzaW9uNi50eHQJLypmaXhlZC02LjEqCitmaXhlZC02LjIJdmVyc2lvbjYudHh0CS8qZml4ZWQtNi4yKgorZml4ZWQtNi4zCXZlcnNpb242LnR4dAkvKmZpeGVkLTYuMyoKK2ZuYW1lX2RpZmYtdmFyaWFibGUJZXZhbC50eHQJLypmbmFtZV9kaWZmLXZhcmlhYmxlKgorZm5hbWVfaW4tdmFyaWFibGUJZXZhbC50eHQJLypmbmFtZV9pbi12YXJpYWJsZSoKK2ZuYW1lX25ldy12YXJpYWJsZQlldmFsLnR4dAkvKmZuYW1lX25ldy12YXJpYWJsZSoKK2ZuYW1lX291dC12YXJpYWJsZQlldmFsLnR4dAkvKmZuYW1lX291dC12YXJpYWJsZSoKK2ZuYW1lbW9kaWZ5KCkJZXZhbC50eHQJLypmbmFtZW1vZGlmeSgpKgorZm8tdGFibGUJY2hhbmdlLnR4dAkvKmZvLXRhYmxlKgorZm9sZC1iZWhhdmlvcglmb2xkLnR4dAkvKmZvbGQtYmVoYXZpb3IqCitmb2xkLWNvbG9ycwlmb2xkLnR4dAkvKmZvbGQtY29sb3JzKgorZm9sZC1jb21tYW5kcwlmb2xkLnR4dAkvKmZvbGQtY29tbWFuZHMqCitmb2xkLWNyZWF0ZS1tYXJrZXIJZm9sZC50eHQJLypmb2xkLWNyZWF0ZS1tYXJrZXIqCitmb2xkLWRlbGV0ZS1tYXJrZXIJZm9sZC50eHQJLypmb2xkLWRlbGV0ZS1tYXJrZXIqCitmb2xkLWRpZmYJZm9sZC50eHQJLypmb2xkLWRpZmYqCitmb2xkLWV4cHIJZm9sZC50eHQJLypmb2xkLWV4cHIqCitmb2xkLWZvbGRjb2x1bW4JZm9sZC50eHQJLypmb2xkLWZvbGRjb2x1bW4qCitmb2xkLWZvbGRsZXZlbAlmb2xkLnR4dAkvKmZvbGQtZm9sZGxldmVsKgorZm9sZC1mb2xkdGV4dAlmb2xkLnR4dAkvKmZvbGQtZm9sZHRleHQqCitmb2xkLWluZGVudAlmb2xkLnR4dAkvKmZvbGQtaW5kZW50KgorZm9sZC1tYW51YWwJZm9sZC50eHQJLypmb2xkLW1hbnVhbCoKK2ZvbGQtbWFya2VyCWZvbGQudHh0CS8qZm9sZC1tYXJrZXIqCitmb2xkLW1ldGhvZHMJZm9sZC50eHQJLypmb2xkLW1ldGhvZHMqCitmb2xkLW9wdGlvbnMJZm9sZC50eHQJLypmb2xkLW9wdGlvbnMqCitmb2xkLXN5bnRheAlmb2xkLnR4dAkvKmZvbGQtc3ludGF4KgorZm9sZC50eHQJZm9sZC50eHQJLypmb2xkLnR4dCoKK2ZvbGRjbG9zZWQoKQlldmFsLnR4dAkvKmZvbGRjbG9zZWQoKSoKK2ZvbGRjbG9zZWRlbmQoKQlldmFsLnR4dAkvKmZvbGRjbG9zZWRlbmQoKSoKK2ZvbGRkYXNoZXMtdmFyaWFibGUJZXZhbC50eHQJLypmb2xkZGFzaGVzLXZhcmlhYmxlKgorZm9sZGVuZC12YXJpYWJsZQlldmFsLnR4dAkvKmZvbGRlbmQtdmFyaWFibGUqCitmb2xkaW5nCWZvbGQudHh0CS8qZm9sZGluZyoKK2ZvbGRsZXZlbCgpCWV2YWwudHh0CS8qZm9sZGxldmVsKCkqCitmb2xkbGV2ZWwtdmFyaWFibGUJZXZhbC50eHQJLypmb2xkbGV2ZWwtdmFyaWFibGUqCitmb2xkc3RhcnQtdmFyaWFibGUJZXZhbC50eHQJLypmb2xkc3RhcnQtdmFyaWFibGUqCitmb2xkdGV4dCgpCWV2YWwudHh0CS8qZm9sZHRleHQoKSoKK2ZvbnQtc2l6ZXMJZ3VpX3gxMS50eHQJLypmb250LXNpemVzKgorZm9udHNldAltYnl0ZS50eHQJLypmb250c2V0KgorZm9yZWdyb3VuZCgpCWV2YWwudHh0CS8qZm9yZWdyb3VuZCgpKgorZm9yawlvc191bml4LnR4dAkvKmZvcmsqCitmb3JtLXN5bnRheAlzeW50YXgudHh0CS8qZm9ybS1zeW50YXgqCitmb3JtLnZpbQlzeW50YXgudHh0CS8qZm9ybS52aW0qCitmb3JtYXQtYnVsbGV0LWxpc3QJdGlwcy50eHQJLypmb3JtYXQtYnVsbGV0LWxpc3QqCitmb3JtYXQtY29tbWVudHMJY2hhbmdlLnR4dAkvKmZvcm1hdC1jb21tZW50cyoKK2Zvcm1hdHRpbmcJY2hhbmdlLnR4dAkvKmZvcm1hdHRpbmcqCitmb3JtZmVlZAlpbnRyby50eHQJLypmb3JtZmVlZCoKK2ZvcnRyYW4taW5kZW50CWluZGVudC50eHQJLypmb3J0cmFuLWluZGVudCoKK2ZvcnRyYW4tcGx1Z2luCWZpbGV0eXBlLnR4dAkvKmZvcnRyYW4tcGx1Z2luKgorZm9ydHJhbi1zeW50YXgJc3ludGF4LnR4dAkvKmZvcnRyYW4tc3ludGF4KgorZm9ydHJhbi52aW0Jc3ludGF4LnR4dAkvKmZvcnRyYW4udmltKgorZnJlbmNoLW1haWxsaXN0CWludHJvLnR4dAkvKmZyZW5jaC1tYWlsbGlzdCoKK2Zyb21ib29rCXVzcl8wMS50eHQJLypmcm9tYm9vayoKK2Z0cAlwaV9uZXRydy50eHQJLypmdHAqCitmdHBsdWdpbgl1c3JfNDEudHh0CS8qZnRwbHVnaW4qCitmdHBsdWdpbi1kb2NzCWZpbGV0eXBlLnR4dAkvKmZ0cGx1Z2luLWRvY3MqCitmdHBsdWdpbi1uYW1lCXVzcl8wNS50eHQJLypmdHBsdWdpbi1uYW1lKgorZnRwbHVnaW4tb3ZlcnJ1bGUJZmlsZXR5cGUudHh0CS8qZnRwbHVnaW4tb3ZlcnJ1bGUqCitmdHBsdWdpbi1zcGVjaWFsCXVzcl80MS50eHQJLypmdHBsdWdpbi1zcGVjaWFsKgorZnRwbHVnaW5zCXVzcl8wNS50eHQJLypmdHBsdWdpbnMqCitmdW5jdGlvbi1hcmd1bWVudAlldmFsLnR4dAkvKmZ1bmN0aW9uLWFyZ3VtZW50KgorZnVuY3Rpb24ta2V5CWludHJvLnR4dAkvKmZ1bmN0aW9uLWtleSoKK2Z1bmN0aW9uLWxpc3QJdXNyXzQxLnR4dAkvKmZ1bmN0aW9uLWxpc3QqCitmdW5jdGlvbi1yYW5nZS1leGFtcGxlCWV2YWwudHh0CS8qZnVuY3Rpb24tcmFuZ2UtZXhhbXBsZSoKK2Z1bmN0aW9uX2tleQlpbnRyby50eHQJLypmdW5jdGlvbl9rZXkqCitmdW5jdGlvbnMJZXZhbC50eHQJLypmdW5jdGlvbnMqCitmdndtLXN5bnRheAlzeW50YXgudHh0CS8qZnZ3bS1zeW50YXgqCitmdndtLnZpbQlzeW50YXgudHh0CS8qZnZ3bS52aW0qCitmdndtMnJjCXN5bnRheC50eHQJLypmdndtMnJjKgorZnZ3bXJjCXN5bnRheC50eHQJLypmdndtcmMqCitnCWluZGV4LnR4dAkvKmcqCitnIwlwYXR0ZXJuLnR4dAkvKmcjKgorZyQJbW90aW9uLnR4dAkvKmckKgorZyYJY2hhbmdlLnR4dAkvKmcmKgorZycJbW90aW9uLnR4dAkvKmcnKgorZydhCW1vdGlvbi50eHQJLypnJ2EqCitnLAltb3Rpb24udHh0CS8qZywqCitnMAltb3Rpb24udHh0CS8qZzAqCitnOAl2YXJpb3VzLnR4dAkvKmc4KgorZzpleHBsRGF0ZUZvcm1hdAlwaV9leHBsLnR4dAkvKmc6ZXhwbERhdGVGb3JtYXQqCitnOmV4cGxEZXRhaWxlZEhlbHAJcGlfZXhwbC50eHQJLypnOmV4cGxEZXRhaWxlZEhlbHAqCitnOmV4cGxEZXRhaWxlZExpc3QJcGlfZXhwbC50eHQJLypnOmV4cGxEZXRhaWxlZExpc3QqCitnOmV4cGxEaXJzRmlyc3QJcGlfZXhwbC50eHQJLypnOmV4cGxEaXJzRmlyc3QqCitnOmV4cGxGaWxlSGFuZGxlcglwaV9leHBsLnR4dAkvKmc6ZXhwbEZpbGVIYW5kbGVyKgorZzpleHBsSGlkZUZpbGVzCXBpX2V4cGwudHh0CS8qZzpleHBsSGlkZUZpbGVzKgorZzpleHBsU29ydEJ5CXBpX2V4cGwudHh0CS8qZzpleHBsU29ydEJ5KgorZzpleHBsU3BsaXRCZWxvdwlwaV9leHBsLnR4dAkvKmc6ZXhwbFNwbGl0QmVsb3cqCitnOmV4cGxTcGxpdFJpZ2h0CXBpX2V4cGwudHh0CS8qZzpleHBsU3BsaXRSaWdodCoKK2c6ZXhwbFN0YXJ0QmVsb3cJcGlfZXhwbC50eHQJLypnOmV4cGxTdGFydEJlbG93KgorZzpleHBsU3RhcnRSaWdodAlwaV9leHBsLnR4dAkvKmc6ZXhwbFN0YXJ0UmlnaHQqCitnOmV4cGxTdWZmaXhlc0xhc3QJcGlfZXhwbC50eHQJLypnOmV4cGxTdWZmaXhlc0xhc3QqCitnOmV4cGxVc2VTZXBhcmF0b3JzCXBpX2V4cGwudHh0CS8qZzpleHBsVXNlU2VwYXJhdG9ycyoKK2c6ZXhwbFZlcnRpY2FsCXBpX2V4cGwudHh0CS8qZzpleHBsVmVydGljYWwqCitnOmV4cGxXaW5TaXplCXBpX2V4cGwudHh0CS8qZzpleHBsV2luU2l6ZSoKK2c6dmFyCWV2YWwudHh0CS8qZzp2YXIqCitnOwltb3Rpb24udHh0CS8qZzsqCitnPERvd24+CW1vdGlvbi50eHQJLypnPERvd24+KgorZzxFbmQ+CW1vdGlvbi50eHQJLypnPEVuZD4qCitnPEhvbWU+CW1vdGlvbi50eHQJLypnPEhvbWU+KgorZzxMZWZ0TW91c2U+CXRhZ3NyY2gudHh0CS8qZzxMZWZ0TW91c2U+KgorZzxSaWdodE1vdXNlPgl0YWdzcmNoLnR4dAkvKmc8UmlnaHRNb3VzZT4qCitnPFVwPgltb3Rpb24udHh0CS8qZzxVcD4qCitnPwljaGFuZ2UudHh0CS8qZz8qCitnPz8JY2hhbmdlLnR4dAkvKmc/PyoKK2c/Zz8JY2hhbmdlLnR4dAkvKmc/Zz8qCitnRAlwYXR0ZXJuLnR4dAkvKmdEKgorZ0UJbW90aW9uLnR4dAkvKmdFKgorZ0gJdmlzdWFsLnR4dAkvKmdIKgorZ0kJaW5zZXJ0LnR4dAkvKmdJKgorZ0oJY2hhbmdlLnR4dAkvKmdKKgorZ1AJY2hhbmdlLnR4dAkvKmdQKgorZ1EJaW50cm8udHh0CS8qZ1EqCitnUgljaGFuZ2UudHh0CS8qZ1IqCitnVQljaGFuZ2UudHh0CS8qZ1UqCitnVVUJY2hhbmdlLnR4dAkvKmdVVSoKK2dVZ1UJY2hhbmdlLnR4dAkvKmdVZ1UqCitnVgl2aXN1YWwudHh0CS8qZ1YqCitnXQl0YWdzcmNoLnR4dAkvKmddKgorZ14JbW90aW9uLnR4dAkvKmdeKgorZ18JbW90aW9uLnR4dAkvKmdfKgorZ19DVFJMLUEJdmFyaW91cy50eHQJLypnX0NUUkwtQSoKK2dfQ1RSTC1HCWVkaXRpbmcudHh0CS8qZ19DVFJMLUcqCitnX0NUUkwtSAl2aXN1YWwudHh0CS8qZ19DVFJMLUgqCitnX0NUUkwtXQl0YWdzcmNoLnR4dAkvKmdfQ1RSTC1dKgorZ2AJbW90aW9uLnR4dAkvKmdgKgorZ2BhCW1vdGlvbi50eHQJLypnYGEqCitnYQl2YXJpb3VzLnR4dAkvKmdhKgorZ2QJcGF0dGVybi50eHQJLypnZCoKK2dlCW1vdGlvbi50eHQJLypnZSoKK2dldGJ1ZnZhcigpCWV2YWwudHh0CS8qZ2V0YnVmdmFyKCkqCitnZXRjaGFyKCkJZXZhbC50eHQJLypnZXRjaGFyKCkqCitnZXRjaGFybW9kKCkJZXZhbC50eHQJLypnZXRjaGFybW9kKCkqCitnZXRjbWRsaW5lKCkJZXZhbC50eHQJLypnZXRjbWRsaW5lKCkqCitnZXRjbWRwb3MoKQlldmFsLnR4dAkvKmdldGNtZHBvcygpKgorZ2V0Y3dkKCkJZXZhbC50eHQJLypnZXRjd2QoKSoKK2dldGZzaXplKCkJZXZhbC50eHQJLypnZXRmc2l6ZSgpKgorZ2V0ZnRpbWUoKQlldmFsLnR4dAkvKmdldGZ0aW1lKCkqCitnZXRsaW5lKCkJZXZhbC50eHQJLypnZXRsaW5lKCkqCitnZXRyZWcoKQlldmFsLnR4dAkvKmdldHJlZygpKgorZ2V0cmVndHlwZSgpCWV2YWwudHh0CS8qZ2V0cmVndHlwZSgpKgorZ2V0d2lucG9zeCgpCWV2YWwudHh0CS8qZ2V0d2lucG9zeCgpKgorZ2V0d2lucG9zeSgpCWV2YWwudHh0CS8qZ2V0d2lucG9zeSgpKgorZ2V0d2ludmFyKCkJZXZhbC50eHQJLypnZXR3aW52YXIoKSoKK2dleAlzdGFydGluZy50eHQJLypnZXgqCitnZgllZGl0aW5nLnR4dAkvKmdmKgorZ2cJbW90aW9uLnR4dAkvKmdnKgorZ2gJdmlzdWFsLnR4dAkvKmdoKgorZ2kJaW5zZXJ0LnR4dAkvKmdpKgorZ2oJbW90aW9uLnR4dAkvKmdqKgorZ2sJbW90aW9uLnR4dAkvKmdrKgorZ2xvYigpCWV2YWwudHh0CS8qZ2xvYigpKgorZ2xvYmFsLWltZQltYnl0ZS50eHQJLypnbG9iYWwtaW1lKgorZ2xvYmFsLWxvY2FsCW9wdGlvbnMudHh0CS8qZ2xvYmFsLWxvY2FsKgorZ2xvYmFsLXZhcmlhYmxlCWV2YWwudHh0CS8qZ2xvYmFsLXZhcmlhYmxlKgorZ2xvYnBhdGgoKQlldmFsLnR4dAkvKmdsb2JwYXRoKCkqCitnbQltb3Rpb24udHh0CS8qZ20qCitnbm9tZS1zZXNzaW9uCWd1aV94MTEudHh0CS8qZ25vbWUtc2Vzc2lvbioKK2dvCW1vdGlvbi50eHQJLypnbyoKK2dwCWNoYW5nZS50eHQJLypncCoKK2dwbS1tb3VzZQl0ZXJtLnR4dAkvKmdwbS1tb3VzZSoKK2dxCWNoYW5nZS50eHQJLypncSoKK2dxYXAJY2hhbmdlLnR4dAkvKmdxYXAqCitncWdxCWNoYW5nZS50eHQJLypncWdxKgorZ3FxCWNoYW5nZS50eHQJLypncXEqCitncgljaGFuZ2UudHh0CS8qZ3IqCitncmFwaGljLW9wdGlvbi1nb25lCXZlcnNpb240LnR4dAkvKmdyYXBoaWMtb3B0aW9uLWdvbmUqCitncmVlawlvcHRpb25zLnR4dAkvKmdyZWVrKgorZ3JlcAlxdWlja2ZpeC50eHQJLypncmVwKgorZ3JvZmYtc3ludGF4CXN5bnRheC50eHQJLypncm9mZi1zeW50YXgqCitncm9mZi52aW0Jc3ludGF4LnR4dAkvKmdyb2ZmLnZpbSoKK2dyb3VwLW5hbWUJc3ludGF4LnR4dAkvKmdyb3VwLW5hbWUqCitncwl2YXJpb3VzLnR4dAkvKmdzKgorZ3NwLnZpbQlzeW50YXgudHh0CS8qZ3NwLnZpbSoKK2dzdGFyCXBhdHRlcm4udHh0CS8qZ3N0YXIqCitndGstdG9vbHRpcC1jb2xvcnMJZ3VpX3gxMS50eHQJLypndGstdG9vbHRpcC1jb2xvcnMqCitndQljaGFuZ2UudHh0CS8qZ3UqCitndWd1CWNoYW5nZS50eHQJLypndWd1KgorZ3VpCWd1aS50eHQJLypndWkqCitndWktY2xpcGJvYXJkCWd1aV93MzIudHh0CS8qZ3VpLWNsaXBib2FyZCoKK2d1aS1jb2xvcnMJc3ludGF4LnR4dAkvKmd1aS1jb2xvcnMqCitndWktZXh0cmFzCWd1aS50eHQJLypndWktZXh0cmFzKgorZ3VpLWZvb3RlcglkZWJ1Z2dlci50eHQJLypndWktZm9vdGVyKgorZ3VpLWZvcmsJZ3VpX3gxMS50eHQJLypndWktZm9yayoKK2d1aS1nbm9tZQlndWlfeDExLnR4dAkvKmd1aS1nbm9tZSoKK2d1aS1nbm9tZS1zZXNzaW9uCWd1aV94MTEudHh0CS8qZ3VpLWdub21lLXNlc3Npb24qCitndWktZ3RrCWd1aV94MTEudHh0CS8qZ3VpLWd0ayoKK2d1aS1ndGstc29ja2V0aWQJZ3VpX3gxMS50eHQJLypndWktZ3RrLXNvY2tldGlkKgorZ3VpLWhvcml6LXNjcm9sbAlndWkudHh0CS8qZ3VpLWhvcml6LXNjcm9sbCoKK2d1aS1pbml0CWd1aS50eHQJLypndWktaW5pdCoKK2d1aS1tb3VzZQlndWkudHh0CS8qZ3VpLW1vdXNlKgorZ3VpLW1vdXNlLWZvY3VzCWd1aS50eHQJLypndWktbW91c2UtZm9jdXMqCitndWktbW91c2UtbWFwcGluZwlndWkudHh0CS8qZ3VpLW1vdXNlLW1hcHBpbmcqCitndWktbW91c2UtbW9kZWxlc3MJZ3VpLnR4dAkvKmd1aS1tb3VzZS1tb2RlbGVzcyoKK2d1aS1tb3VzZS1tb3ZlCWd1aS50eHQJLypndWktbW91c2UtbW92ZSoKK2d1aS1tb3VzZS1zZWxlY3QJZ3VpLnR4dAkvKmd1aS1tb3VzZS1zZWxlY3QqCitndWktbW91c2Utc3RhdHVzCWd1aS50eHQJLypndWktbW91c2Utc3RhdHVzKgorZ3VpLW1vdXNlLXZhcmlvdXMJZ3VpLnR4dAkvKmd1aS1tb3VzZS12YXJpb3VzKgorZ3VpLXB0eQlndWlfeDExLnR4dAkvKmd1aS1wdHkqCitndWktcHR5LWVyYXNlCWd1aV94MTEudHh0CS8qZ3VpLXB0eS1lcmFzZSoKK2d1aS1yZXNvdXJjZXMJZ3VpX3gxMS50eHQJLypndWktcmVzb3VyY2VzKgorZ3VpLXNjcm9sbGJhcnMJZ3VpLnR4dAkvKmd1aS1zY3JvbGxiYXJzKgorZ3VpLXNlbGVjdGlvbnMJZ3VpLnR4dAkvKmd1aS1zZWxlY3Rpb25zKgorZ3VpLXNoZWxsCWd1aS50eHQJLypndWktc2hlbGwqCitndWktc2hlbGwtd2luMzIJZ3VpX3czMi50eHQJLypndWktc2hlbGwtd2luMzIqCitndWktc3RhcnQJZ3VpLnR4dAkvKmd1aS1zdGFydCoKK2d1aS10b29sYmFyCWd1aS50eHQJLypndWktdG9vbGJhcioKK2d1aS12ZXJ0LXNjcm9sbAlndWkudHh0CS8qZ3VpLXZlcnQtc2Nyb2xsKgorZ3VpLXcxNglndWlfdzE2LnR4dAkvKmd1aS13MTYqCitndWktdzMyCWd1aV93MzIudHh0CS8qZ3VpLXczMioKK2d1aS13MzItY21kYXJncwlndWlfdzMyLnR4dAkvKmd1aS13MzItY21kYXJncyoKK2d1aS13MzItZGlhbG9ncwlndWlfdzMyLnR4dAkvKmd1aS13MzItZGlhbG9ncyoKK2d1aS13MzItcHJpbnRpbmcJZ3VpX3czMi50eHQJLypndWktdzMyLXByaW50aW5nKgorZ3VpLXczMi1zdGFydAlndWlfdzMyLnR4dAkvKmd1aS13MzItc3RhcnQqCitndWktdzMyLXZhcmlvdXMJZ3VpX3czMi50eHQJLypndWktdzMyLXZhcmlvdXMqCitndWktdzMycwlndWlfdzMyLnR4dAkvKmd1aS13MzJzKgorZ3VpLXdpbjMyLW1heGltaXplZAlndWlfdzMyLnR4dAkvKmd1aS13aW4zMi1tYXhpbWl6ZWQqCitndWkteDExCWd1aV94MTEudHh0CS8qZ3VpLXgxMSoKK2d1aS14MTEtYXRoZW5hCWd1aV94MTEudHh0CS8qZ3VpLXgxMS1hdGhlbmEqCitndWkteDExLWNvbXBpbGluZwlndWlfeDExLnR4dAkvKmd1aS14MTEtY29tcGlsaW5nKgorZ3VpLXgxMS1ndGsJZ3VpX3gxMS50eHQJLypndWkteDExLWd0ayoKK2d1aS14MTEtbWlzYwlndWlfeDExLnR4dAkvKmd1aS14MTEtbWlzYyoKK2d1aS14MTEtbW90aWYJZ3VpX3gxMS50eHQJLypndWkteDExLW1vdGlmKgorZ3VpLXgxMS1uZVh0YXcJZ3VpX3gxMS50eHQJLypndWkteDExLW5lWHRhdyoKK2d1aS14MTEtcHJpbnRpbmcJZ3VpX3gxMS50eHQJLypndWkteDExLXByaW50aW5nKgorZ3VpLXgxMS1zdGFydAlndWlfeDExLnR4dAkvKmd1aS14MTEtc3RhcnQqCitndWkteDExLXZhcmlvdXMJZ3VpX3gxMS50eHQJLypndWkteDExLXZhcmlvdXMqCitndWkudHh0CWd1aS50eHQJLypndWkudHh0KgorZ3VpX3cxNi50eHQJZ3VpX3cxNi50eHQJLypndWlfdzE2LnR4dCoKK2d1aV93MzIudHh0CWd1aV93MzIudHh0CS8qZ3VpX3czMi50eHQqCitndWlfeDExLnR4dAlndWlfeDExLnR4dAkvKmd1aV94MTEudHh0KgorZ3VpZm9udHdpZGVfZ3RrMglvcHRpb25zLnR4dAkvKmd1aWZvbnR3aWRlX2d0azIqCitndWlvcHRpb25zX2EJb3B0aW9ucy50eHQJLypndWlvcHRpb25zX2EqCitndXUJY2hhbmdlLnR4dAkvKmd1dSoKK2d2CXZpc3VhbC50eHQJLypndioKK2d2aWV3CXN0YXJ0aW5nLnR4dAkvKmd2aWV3KgorZ3ZpbQlzdGFydGluZy50eHQJLypndmltKgorZ3ZpbWRpZmYJZGlmZi50eHQJLypndmltZGlmZioKK2d2aW1yYwlndWkudHh0CS8qZ3ZpbXJjKgorZ3cJY2hhbmdlLnR4dAkvKmd3KgorZ3ppcAlwaV9nemlwLnR4dAkvKmd6aXAqCitnemlwLWF1dG9jbWQJcGlfZ3ppcC50eHQJLypnemlwLWF1dG9jbWQqCitnemlwLWV4YW1wbGUJYXV0b2NtZC50eHQJLypnemlwLWV4YW1wbGUqCitnemlwLWhlbHBmaWxlCXRpcHMudHh0CS8qZ3ppcC1oZWxwZmlsZSoKK2d+CWNoYW5nZS50eHQJLypnfioKK2d+Z34JY2hhbmdlLnR4dAkvKmd+Z34qCitnfn4JY2hhbmdlLnR4dAkvKmd+fioKK2gJbW90aW9uLnR4dAkvKmgqCitoYW5ndWwJaGFuZ3VsaW4udHh0CS8qaGFuZ3VsKgoraGFuZ3VsaW4udHh0CWhhbmd1bGluLnR4dAkvKmhhbmd1bGluLnR4dCoKK2hhcygpCWV2YWwudHh0CS8qaGFzKCkqCitoYXMtcGF0Y2gJZXZhbC50eHQJLypoYXMtcGF0Y2gqCitoYXNrZWxsLXN5bnRheAlzeW50YXgudHh0CS8qaGFza2VsbC1zeW50YXgqCitoYXNrZWxsLnZpbQlzeW50YXgudHh0CS8qaGFza2VsbC52aW0qCitoYXNtYXB0bygpCWV2YWwudHh0CS8qaGFzbWFwdG8oKSoKK2hlYnJldwloZWJyZXcudHh0CS8qaGVicmV3KgoraGVicmV3LnR4dAloZWJyZXcudHh0CS8qaGVicmV3LnR4dCoKK2hlbHAJdmFyaW91cy50eHQJLypoZWxwKgoraGVscC1jb250ZXh0CWhlbHAudHh0CS8qaGVscC1jb250ZXh0KgoraGVscC10YWdzCXRhZ3MJMQoraGVscC10cmFuc2xhdGVkCXZhcmlvdXMudHh0CS8qaGVscC10cmFuc2xhdGVkKgoraGVscC14dGVybS13aW5kb3cJdmFyaW91cy50eHQJLypoZWxwLXh0ZXJtLXdpbmRvdyoKK2hlbHAudHh0CWhlbHAudHh0CS8qaGVscC50eHQqCitoZXgtZWRpdGluZwl0aXBzLnR4dAkvKmhleC1lZGl0aW5nKgoraGlkZGVuLWJ1ZmZlcgl3aW5kb3dzLnR4dAkvKmhpZGRlbi1idWZmZXIqCitoaWRkZW4tY2hhbmdlZAl2ZXJzaW9uNS50eHQJLypoaWRkZW4tY2hhbmdlZCoKK2hpZGRlbi1tZW51cwlndWkudHh0CS8qaGlkZGVuLW1lbnVzKgoraGlkZGVuLXF1aXQJd2luZG93cy50eHQJLypoaWRkZW4tcXVpdCoKK2hpZ2hsaWdodC1hcmdzCXN5bnRheC50eHQJLypoaWdobGlnaHQtYXJncyoKK2hpZ2hsaWdodC1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKmhpZ2hsaWdodC1jaGFuZ2VkKgoraGlnaGxpZ2h0LWN0ZXJtCXN5bnRheC50eHQJLypoaWdobGlnaHQtY3Rlcm0qCitoaWdobGlnaHQtY3Rlcm1iZwlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWN0ZXJtYmcqCitoaWdobGlnaHQtY3Rlcm1mZwlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWN0ZXJtZmcqCitoaWdobGlnaHQtZGVmYXVsdAlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWRlZmF1bHQqCitoaWdobGlnaHQtZm9udAlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWZvbnQqCitoaWdobGlnaHQtZ3JvdXBzCXN5bnRheC50eHQJLypoaWdobGlnaHQtZ3JvdXBzKgoraGlnaGxpZ2h0LWd1aQlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWd1aSoKK2hpZ2hsaWdodC1ndWliZwlzeW50YXgudHh0CS8qaGlnaGxpZ2h0LWd1aWJnKgoraGlnaGxpZ2h0LWd1aWZnCXN5bnRheC50eHQJLypoaWdobGlnaHQtZ3VpZmcqCitoaWdobGlnaHQtc3RhcnQJc3ludGF4LnR4dAkvKmhpZ2hsaWdodC1zdGFydCoKK2hpZ2hsaWdodC1zdG9wCXN5bnRheC50eHQJLypoaWdobGlnaHQtc3RvcCoKK2hpZ2hsaWdodC10ZXJtCXN5bnRheC50eHQJLypoaWdobGlnaHQtdGVybSoKK2hpZ2hsaWdodElEKCkJZXZhbC50eHQJLypoaWdobGlnaHRJRCgpKgoraGlnaGxpZ2h0X2V4aXN0cygpCWV2YWwudHh0CS8qaGlnaGxpZ2h0X2V4aXN0cygpKgoraGlzCWNtZGxpbmUudHh0CS8qaGlzKgoraGlzdC1uYW1lcwlldmFsLnR4dAkvKmhpc3QtbmFtZXMqCitoaXN0YWRkKCkJZXZhbC50eHQJLypoaXN0YWRkKCkqCitoaXN0ZGVsKCkJZXZhbC50eHQJLypoaXN0ZGVsKCkqCitoaXN0Z2V0KCkJZXZhbC50eHQJLypoaXN0Z2V0KCkqCitoaXN0bnIoKQlldmFsLnR4dAkvKmhpc3RucigpKgoraGlzdG9yeQljbWRsaW5lLnR4dAkvKmhpc3RvcnkqCitoaXQtZW50ZXIJbWVzc2FnZS50eHQJLypoaXQtZW50ZXIqCitoaXQtcmV0dXJuCW1lc3NhZ2UudHh0CS8qaGl0LXJldHVybioKK2hpdGVzdC52aW0Jc3ludGF4LnR4dAkvKmhpdGVzdC52aW0qCitoamtsCXVzcl8wMi50eHQJLypoamtsKgoraGwtQ3Vyc29yCXN5bnRheC50eHQJLypobC1DdXJzb3IqCitobC1DdXJzb3JJTQlzeW50YXgudHh0CS8qaGwtQ3Vyc29ySU0qCitobC1EaWZmQWRkCXN5bnRheC50eHQJLypobC1EaWZmQWRkKgoraGwtRGlmZkNoYW5nZQlzeW50YXgudHh0CS8qaGwtRGlmZkNoYW5nZSoKK2hsLURpZmZEZWxldGUJc3ludGF4LnR4dAkvKmhsLURpZmZEZWxldGUqCitobC1EaWZmVGV4dAlzeW50YXgudHh0CS8qaGwtRGlmZlRleHQqCitobC1EaXJlY3RvcnkJc3ludGF4LnR4dAkvKmhsLURpcmVjdG9yeSoKK2hsLUVycm9yTXNnCXN5bnRheC50eHQJLypobC1FcnJvck1zZyoKK2hsLUZvbGRDb2x1bW4Jc3ludGF4LnR4dAkvKmhsLUZvbGRDb2x1bW4qCitobC1Gb2xkZWQJc3ludGF4LnR4dAkvKmhsLUZvbGRlZCoKK2hsLUluY1NlYXJjaAlzeW50YXgudHh0CS8qaGwtSW5jU2VhcmNoKgoraGwtTGluZU5yCXN5bnRheC50eHQJLypobC1MaW5lTnIqCitobC1NZW51CXN5bnRheC50eHQJLypobC1NZW51KgoraGwtTW9kZU1zZwlzeW50YXgudHh0CS8qaGwtTW9kZU1zZyoKK2hsLU1vcmVNc2cJc3ludGF4LnR4dAkvKmhsLU1vcmVNc2cqCitobC1Ob25UZXh0CXN5bnRheC50eHQJLypobC1Ob25UZXh0KgoraGwtTm9ybWFsCXN5bnRheC50eHQJLypobC1Ob3JtYWwqCitobC1RdWVzdGlvbglzeW50YXgudHh0CS8qaGwtUXVlc3Rpb24qCitobC1TY3JvbGxiYXIJc3ludGF4LnR4dAkvKmhsLVNjcm9sbGJhcioKK2hsLVNlYXJjaAlzeW50YXgudHh0CS8qaGwtU2VhcmNoKgoraGwtU2lnbkNvbHVtbglzeW50YXgudHh0CS8qaGwtU2lnbkNvbHVtbioKK2hsLVNwZWNpYWxLZXkJc3ludGF4LnR4dAkvKmhsLVNwZWNpYWxLZXkqCitobC1TdGF0dXNMaW5lCXN5bnRheC50eHQJLypobC1TdGF0dXNMaW5lKgoraGwtU3RhdHVzTGluZU5DCXN5bnRheC50eHQJLypobC1TdGF0dXNMaW5lTkMqCitobC1UaXRsZQlzeW50YXgudHh0CS8qaGwtVGl0bGUqCitobC1Ub29sdGlwCXN5bnRheC50eHQJLypobC1Ub29sdGlwKgoraGwtVXNlcjEJc3ludGF4LnR4dAkvKmhsLVVzZXIxKgoraGwtVXNlcjEuLjkJc3ludGF4LnR4dAkvKmhsLVVzZXIxLi45KgoraGwtVmVydFNwbGl0CXN5bnRheC50eHQJLypobC1WZXJ0U3BsaXQqCitobC1WaXN1YWwJc3ludGF4LnR4dAkvKmhsLVZpc3VhbCoKK2hsLVZpc3VhbE5PUwlzeW50YXgudHh0CS8qaGwtVmlzdWFsTk9TKgoraGwtV2FybmluZ01zZwlzeW50YXgudHh0CS8qaGwtV2FybmluZ01zZyoKK2hsLVdpbGRNZW51CXN5bnRheC50eHQJLypobC1XaWxkTWVudSoKK2hsSUQoKQlldmFsLnR4dAkvKmhsSUQoKSoKK2hsZXhpc3RzKCkJZXZhbC50eHQJLypobGV4aXN0cygpKgoraG9seS1ncmFpbAlpbmRleC50eHQJLypob2x5LWdyYWlsKgoraG9tZQlpbnRyby50eHQJLypob21lKgoraG9tZS1yZXBsYWNlCWVkaXRpbmcudHh0CS8qaG9tZS1yZXBsYWNlKgoraG9zdG5hbWUoKQlldmFsLnR4dAkvKmhvc3RuYW1lKCkqCitob3ctZG8taQlob3d0by50eHQJLypob3ctZG8taSoKK2hvdy10bwlob3d0by50eHQJLypob3ctdG8qCitob3dkb2kJaG93dG8udHh0CS8qaG93ZG9pKgoraG93dG8JaG93dG8udHh0CS8qaG93dG8qCitob3d0by50eHQJaG93dG8udHh0CS8qaG93dG8udHh0KgoraHB0ZXJtCXRlcm0udHh0CS8qaHB0ZXJtKgoraHB0ZXJtLWNvbG9yCXN5bnRheC50eHQJLypocHRlcm0tY29sb3IqCitodG1sLXN5bnRheAlzeW50YXgudHh0CS8qaHRtbC1zeW50YXgqCitodG1sLnZpbQlzeW50YXgudHh0CS8qaHRtbC52aW0qCitodG1sb3Mtc3ludGF4CXN5bnRheC50eHQJLypodG1sb3Mtc3ludGF4KgoraHRtbG9zLnZpbQlzeW50YXgudHh0CS8qaHRtbG9zLnZpbSoKK2h0dHAJcGlfbmV0cncudHh0CS8qaHR0cCoKK2kJaW5zZXJ0LnR4dAkvKmkqCitpKAltb3Rpb24udHh0CS8qaSgqCitpKQltb3Rpb24udHh0CS8qaSkqCitpPAltb3Rpb24udHh0CS8qaTwqCitpPgltb3Rpb24udHh0CS8qaT4qCitpQgltb3Rpb24udHh0CS8qaUIqCitpVwltb3Rpb24udHh0CS8qaVcqCitpWwltb3Rpb24udHh0CS8qaVsqCitpXQltb3Rpb24udHh0CS8qaV0qCitpXzBfQ1RSTC1ECWluc2VydC50eHQJLyppXzBfQ1RSTC1EKgoraV88QlM+CWluc2VydC50eHQJLyppXzxCUz4qCitpXzxDLUVuZD4JaW5zZXJ0LnR4dAkvKmlfPEMtRW5kPioKK2lfPEMtSG9tZT4JaW5zZXJ0LnR4dAkvKmlfPEMtSG9tZT4qCitpXzxDLUxlZnQ+CWluc2VydC50eHQJLyppXzxDLUxlZnQ+KgoraV88Qy1SaWdodD4JaW5zZXJ0LnR4dAkvKmlfPEMtUmlnaHQ+KgoraV88Q1I+CWluc2VydC50eHQJLyppXzxDUj4qCitpXzxEZWw+CWluc2VydC50eHQJLyppXzxEZWw+KgoraV88RG93bj4JaW5zZXJ0LnR4dAkvKmlfPERvd24+KgoraV88RW5kPglpbnNlcnQudHh0CS8qaV88RW5kPioKK2lfPEVzYz4JaW5zZXJ0LnR4dAkvKmlfPEVzYz4qCitpXzxGMT4JdmFyaW91cy50eHQJLyppXzxGMT4qCitpXzxIZWxwPgl2YXJpb3VzLnR4dAkvKmlfPEhlbHA+KgoraV88SG9tZT4JaW5zZXJ0LnR4dAkvKmlfPEhvbWU+KgoraV88SW5zZXJ0PglpbnNlcnQudHh0CS8qaV88SW5zZXJ0PioKK2lfPExlZnQ+CWluc2VydC50eHQJLyppXzxMZWZ0PioKK2lfPExlZnRNb3VzZT4JaW5zZXJ0LnR4dAkvKmlfPExlZnRNb3VzZT4qCitpXzxNb3VzZURvd24+CWluc2VydC50eHQJLyppXzxNb3VzZURvd24+KgoraV88TW91c2VVcD4JaW5zZXJ0LnR4dAkvKmlfPE1vdXNlVXA+KgoraV88Tkw+CWluc2VydC50eHQJLyppXzxOTD4qCitpXzxQYWdlRG93bj4JaW5zZXJ0LnR4dAkvKmlfPFBhZ2VEb3duPioKK2lfPFBhZ2VVcD4JaW5zZXJ0LnR4dAkvKmlfPFBhZ2VVcD4qCitpXzxSaWdodD4JaW5zZXJ0LnR4dAkvKmlfPFJpZ2h0PioKK2lfPFMtRG93bj4JaW5zZXJ0LnR4dAkvKmlfPFMtRG93bj4qCitpXzxTLUxlZnQ+CWluc2VydC50eHQJLyppXzxTLUxlZnQ+KgoraV88Uy1Nb3VzZURvd24+CWluc2VydC50eHQJLyppXzxTLU1vdXNlRG93bj4qCitpXzxTLU1vdXNlVXA+CWluc2VydC50eHQJLyppXzxTLU1vdXNlVXA+KgoraV88Uy1SaWdodD4JaW5zZXJ0LnR4dAkvKmlfPFMtUmlnaHQ+KgoraV88Uy1VcD4JaW5zZXJ0LnR4dAkvKmlfPFMtVXA+KgoraV88VGFiPglpbnNlcnQudHh0CS8qaV88VGFiPioKK2lfPFVwPglpbnNlcnQudHh0CS8qaV88VXA+KgoraV9CUwlpbnNlcnQudHh0CS8qaV9CUyoKK2lfQ1RSTC1ACWluc2VydC50eHQJLyppX0NUUkwtQCoKK2lfQ1RSTC1BCWluc2VydC50eHQJLyppX0NUUkwtQSoKK2lfQ1RSTC1CLWdvbmUJdmVyc2lvbjUudHh0CS8qaV9DVFJMLUItZ29uZSoKK2lfQ1RSTC1DCWluc2VydC50eHQJLyppX0NUUkwtQyoKK2lfQ1RSTC1ECWluc2VydC50eHQJLyppX0NUUkwtRCoKK2lfQ1RSTC1FCWluc2VydC50eHQJLyppX0NUUkwtRSoKK2lfQ1RSTC1HXzxEb3duPglpbnNlcnQudHh0CS8qaV9DVFJMLUdfPERvd24+KgoraV9DVFJMLUdfPFVwPglpbnNlcnQudHh0CS8qaV9DVFJMLUdfPFVwPioKK2lfQ1RSTC1HX0NUUkwtSglpbnNlcnQudHh0CS8qaV9DVFJMLUdfQ1RSTC1KKgoraV9DVFJMLUdfQ1RSTC1LCWluc2VydC50eHQJLyppX0NUUkwtR19DVFJMLUsqCitpX0NUUkwtR19qCWluc2VydC50eHQJLyppX0NUUkwtR19qKgoraV9DVFJMLUdfawlpbnNlcnQudHh0CS8qaV9DVFJMLUdfayoKK2lfQ1RSTC1HX3UJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1HX3UqCitpX0NUUkwtSAlpbnNlcnQudHh0CS8qaV9DVFJMLUgqCitpX0NUUkwtSQlpbnNlcnQudHh0CS8qaV9DVFJMLUkqCitpX0NUUkwtSglpbnNlcnQudHh0CS8qaV9DVFJMLUoqCitpX0NUUkwtSwlpbnNlcnQudHh0CS8qaV9DVFJMLUsqCitpX0NUUkwtTAlvcHRpb25zLnR4dAkvKmlfQ1RSTC1MKgoraV9DVFJMLU0JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1NKgoraV9DVFJMLU4JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1OKgoraV9DVFJMLU8JaW5zZXJ0LnR4dAkvKmlfQ1RSTC1PKgoraV9DVFJMLVAJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1QKgoraV9DVFJMLVEJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1RKgoraV9DVFJMLVIJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1SKgoraV9DVFJMLVJfQ1RSTC1PCWluc2VydC50eHQJLyppX0NUUkwtUl9DVFJMLU8qCitpX0NUUkwtUl9DVFJMLVAJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1SX0NUUkwtUCoKK2lfQ1RSTC1SX0NUUkwtUglpbnNlcnQudHh0CS8qaV9DVFJMLVJfQ1RSTC1SKgoraV9DVFJMLVQJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1UKgoraV9DVFJMLVUJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1VKgoraV9DVFJMLVYJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1WKgoraV9DVFJMLVZfZGlnaXQJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1WX2RpZ2l0KgoraV9DVFJMLVcJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1XKgoraV9DVFJMLVgJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YKgoraV9DVFJMLVhfQ1RSTC1ECWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLUQqCitpX0NUUkwtWF9DVFJMLUUJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtRSoKK2lfQ1RSTC1YX0NUUkwtRglpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1GKgoraV9DVFJMLVhfQ1RSTC1JCWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLUkqCitpX0NUUkwtWF9DVFJMLUsJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtSyoKK2lfQ1RSTC1YX0NUUkwtTAlpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1MKgoraV9DVFJMLVhfQ1RSTC1OCWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLU4qCitpX0NUUkwtWF9DVFJMLVAJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtUCoKK2lfQ1RSTC1YX0NUUkwtVAlpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1UKgoraV9DVFJMLVhfQ1RSTC1WCWluc2VydC50eHQJLyppX0NUUkwtWF9DVFJMLVYqCitpX0NUUkwtWF9DVFJMLVkJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1YX0NUUkwtWSoKK2lfQ1RSTC1YX0NUUkwtXQlpbnNlcnQudHh0CS8qaV9DVFJMLVhfQ1RSTC1dKgoraV9DVFJMLVkJaW5zZXJ0LnR4dAkvKmlfQ1RSTC1ZKgoraV9DVFJMLVoJb3B0aW9ucy50eHQJLyppX0NUUkwtWioKK2lfQ1RSTC1bCWluc2VydC50eHQJLyppX0NUUkwtWyoKK2lfQ1RSTC1cX0NUUkwtRwlpbnRyby50eHQJLyppX0NUUkwtXFxfQ1RSTC1HKgoraV9DVFJMLVxfQ1RSTC1OCWludHJvLnR4dAkvKmlfQ1RSTC1cXF9DVFJMLU4qCitpX0NUUkwtXQlpbnNlcnQudHh0CS8qaV9DVFJMLV0qCitpX0NUUkwtXglpbnNlcnQudHh0CS8qaV9DVFJMLV4qCitpX0NUUkwtXwlpbnNlcnQudHh0CS8qaV9DVFJMLV8qCitpX0RFTAlpbnNlcnQudHh0CS8qaV9ERUwqCitpX1RhYglpbnNlcnQudHh0CS8qaV9UYWIqCitpX15fQ1RSTC1ECWluc2VydC50eHQJLyppX15fQ1RSTC1EKgoraV9iYWNrc3BhY2luZwlpbnNlcnQudHh0CS8qaV9iYWNrc3BhY2luZyoKK2lfZGlncmFwaAlkaWdyYXBoLnR4dAkvKmlfZGlncmFwaCoKK2lfZXNjCWludHJvLnR4dAkvKmlfZXNjKgoraWE2NC1zeW50YXgJc3ludGF4LnR4dAkvKmlhNjQtc3ludGF4KgoraWE2NC52aW0Jc3ludGF4LnR4dAkvKmlhNjQudmltKgoraWIJbW90aW9uLnR4dAkvKmliKgoraWNjZgl1Z2FuZGEudHh0CS8qaWNjZioKK2ljb24tY2hhbmdlZAl2ZXJzaW9uNC50eHQJLyppY29uLWNoYW5nZWQqCitpY29uaXNlCXN0YXJ0aW5nLnR4dAkvKmljb25pc2UqCitpY29uaXplCXN0YXJ0aW5nLnR4dAkvKmljb25pemUqCitpY29udigpCWV2YWwudHh0CS8qaWNvbnYoKSoKK2lkZW50LXNlYXJjaAl0aXBzLnR4dAkvKmlkZW50LXNlYXJjaCoKK2lmX2NzY29wLnR4dAlpZl9jc2NvcC50eHQJLyppZl9jc2NvcC50eHQqCitpZl9vbGUudHh0CWlmX29sZS50eHQJLyppZl9vbGUudHh0KgoraWZfcGVybC50eHQJaWZfcGVybC50eHQJLyppZl9wZXJsLnR4dCoKK2lmX3B5dGgudHh0CWlmX3B5dGgudHh0CS8qaWZfcHl0aC50eHQqCitpZl9ydWJ5LnR4dAlpZl9ydWJ5LnR4dAkvKmlmX3J1YnkudHh0KgoraWZfc25pZmYudHh0CWlmX3NuaWZmLnR4dAkvKmlmX3NuaWZmLnR4dCoKK2lmX3RjbC50eHQJaWZfdGNsLnR4dAkvKmlmX3RjbC50eHQqCitpZ25vcmUtZXJyb3JzCWV2YWwudHh0CS8qaWdub3JlLWVycm9ycyoKK2ltcHJvdmVkLWF1dG9jbWRzLTUuNAl2ZXJzaW9uNS50eHQJLyppbXByb3ZlZC1hdXRvY21kcy01LjQqCitpbXByb3ZlZC1xdWlja2ZpeAl2ZXJzaW9uNS50eHQJLyppbXByb3ZlZC1xdWlja2ZpeCoKK2ltcHJvdmVkLXNlc3Npb25zCXZlcnNpb241LnR4dAkvKmltcHJvdmVkLXNlc3Npb25zKgoraW1wcm92ZWQtdmltaW5mbwl2ZXJzaW9uNS50eHQJLyppbXByb3ZlZC12aW1pbmZvKgoraW1wcm92ZW1lbnRzLTUJdmVyc2lvbjUudHh0CS8qaW1wcm92ZW1lbnRzLTUqCitpbXByb3ZlbWVudHMtNgl2ZXJzaW9uNi50eHQJLyppbXByb3ZlbWVudHMtNioKK2luYWN0aXZlLWJ1ZmZlcgl3aW5kb3dzLnR4dAkvKmluYWN0aXZlLWJ1ZmZlcioKK2luY2x1ZGUtc2VhcmNoCXRhZ3NyY2gudHh0CS8qaW5jbHVkZS1zZWFyY2gqCitpbmNsdXNpdmUJbW90aW9uLnR4dAkvKmluY2x1c2l2ZSoKK2luY29tcC1zbWFsbC02CXZlcnNpb242LnR4dAkvKmluY29tcC1zbWFsbC02KgoraW5jb21wYXRpYmxlLTUJdmVyc2lvbjUudHh0CS8qaW5jb21wYXRpYmxlLTUqCitpbmNvbXBhdGlibGUtNgl2ZXJzaW9uNi50eHQJLyppbmNvbXBhdGlibGUtNioKK2luZGVudCgpCWV2YWwudHh0CS8qaW5kZW50KCkqCitpbmRlbnQtZXhwcmVzc2lvbglpbmRlbnQudHh0CS8qaW5kZW50LWV4cHJlc3Npb24qCitpbmRlbnQudHh0CWluZGVudC50eHQJLyppbmRlbnQudHh0KgoraW5kZW50a2V5cy1mb3JtYXQJaW5kZW50LnR4dAkvKmluZGVudGtleXMtZm9ybWF0KgoraW5kZXgJaW5kZXgudHh0CS8qaW5kZXgqCitpbmRleC50eHQJaW5kZXgudHh0CS8qaW5kZXgudHh0KgoraW5mby1tZXNzYWdlCXN0YXJ0aW5nLnR4dAkvKmluZm8tbWVzc2FnZSoKK2luZm9ybS1zeW50YXgJc3ludGF4LnR4dAkvKmluZm9ybS1zeW50YXgqCitpbmZvcm0udmltCXN5bnRheC50eHQJLyppbmZvcm0udmltKgoraW5pdGlhbGl6YXRpb24Jc3RhcnRpbmcudHh0CS8qaW5pdGlhbGl6YXRpb24qCitpbnB1dCgpCWV2YWwudHh0CS8qaW5wdXQoKSoKK2lucHV0ZGlhbG9nKCkJZXZhbC50eHQJLyppbnB1dGRpYWxvZygpKgoraW5wdXRyZXN0b3JlKCkJZXZhbC50eHQJLyppbnB1dHJlc3RvcmUoKSoKK2lucHV0c2F2ZSgpCWV2YWwudHh0CS8qaW5wdXRzYXZlKCkqCitpbnB1dHNlY3JldCgpCWV2YWwudHh0CS8qaW5wdXRzZWNyZXQoKSoKK2lucy1jb21wbGV0aW9uCWluc2VydC50eHQJLyppbnMtY29tcGxldGlvbioKK2lucy1leHBhbmR0YWIJaW5zZXJ0LnR4dAkvKmlucy1leHBhbmR0YWIqCitpbnMtcmV2ZXJzZQlyaWxlZnQudHh0CS8qaW5zLXJldmVyc2UqCitpbnMtc21hcnR0YWIJaW5zZXJ0LnR4dAkvKmlucy1zbWFydHRhYioKK2lucy1zb2Z0dGFic3RvcAlpbnNlcnQudHh0CS8qaW5zLXNvZnR0YWJzdG9wKgoraW5zLXNwZWNpYWwta2V5cwlpbnNlcnQudHh0CS8qaW5zLXNwZWNpYWwta2V5cyoKK2lucy1zcGVjaWFsLXNwZWNpYWwJaW5zZXJ0LnR4dAkvKmlucy1zcGVjaWFsLXNwZWNpYWwqCitpbnMtdGV4dHdpZHRoCWluc2VydC50eHQJLyppbnMtdGV4dHdpZHRoKgoraW5zZXJ0CWluc2VydC50eHQJLyppbnNlcnQqCitpbnNlcnQtaW5kZXgJaW5kZXgudHh0CS8qaW5zZXJ0LWluZGV4KgoraW5zZXJ0LnR4dAlpbnNlcnQudHh0CS8qaW5zZXJ0LnR4dCoKK2luc2VydF9leHBhbmQJaW5zZXJ0LnR4dAkvKmluc2VydF9leHBhbmQqCitpbnNlcnRpbmcJaW5zZXJ0LnR4dAkvKmluc2VydGluZyoKK2luc2VydGluZy1leAlpbnNlcnQudHh0CS8qaW5zZXJ0aW5nLWV4KgoraW5zZXJ0aW5nLWZpbGUJaW5zZXJ0LnR4dAkvKmluc2VydGluZy1maWxlKgoraW5zdGFsbAl1c3JfOTAudHh0CS8qaW5zdGFsbCoKK2luc3RhbGwtaG9tZQl1c3JfOTAudHh0CS8qaW5zdGFsbC1ob21lKgoraW5zdGFsbC1yZWdpc3RyeQlndWlfdzMyLnR4dAkvKmluc3RhbGwtcmVnaXN0cnkqCitpbnRlbC1pdGFuaXVtCXN5bnRheC50eHQJLyppbnRlbC1pdGFuaXVtKgoraW50ZWxsaW1vdXNlLXdoZWVsLXByb2JsZW1zCWd1aV93MzIudHh0CS8qaW50ZWxsaW1vdXNlLXdoZWVsLXByb2JsZW1zKgoraW50ZXJmYWNlcy01LjIJdmVyc2lvbjUudHh0CS8qaW50ZXJmYWNlcy01LjIqCitpbnRlcm5hbC12YXJpYWJsZXMJZXZhbC50eHQJLyppbnRlcm5hbC12YXJpYWJsZXMqCitpbnRlcm5ldAlpbnRyby50eHQJLyppbnRlcm5ldCoKK2ludHJvCWludHJvLnR4dAkvKmludHJvKgoraW50cm8udHh0CWludHJvLnR4dAkvKmludHJvLnR4dCoKK2lwCW1vdGlvbi50eHQJLyppcCoKK2lzCW1vdGlvbi50eHQJLyppcyoKK2lzZGlyZWN0b3J5KCkJZXZhbC50eHQJLyppc2RpcmVjdG9yeSgpKgoraXcJbW90aW9uLnR4dAkvKml3KgoraXsJbW90aW9uLnR4dAkvKml7KgoraX0JbW90aW9uLnR4dAkvKml9Kgoragltb3Rpb24udHh0CS8qaioKK2phdmEtY2lub3B0aW9ucwlpbmRlbnQudHh0CS8qamF2YS1jaW5vcHRpb25zKgoramF2YS1pbmRlbnRpbmcJaW5kZW50LnR4dAkvKmphdmEtaW5kZW50aW5nKgoramF2YS1zeW50YXgJc3ludGF4LnR4dAkvKmphdmEtc3ludGF4KgoramF2YS52aW0Jc3ludGF4LnR4dAkvKmphdmEudmltKgoranNidGVybS1tb3VzZQlvcHRpb25zLnR4dAkvKmpzYnRlcm0tbW91c2UqCitqdGFncwl0YWdzcmNoLnR4dAkvKmp0YWdzKgoranVtcC1tb3Rpb25zCW1vdGlvbi50eHQJLypqdW1wLW1vdGlvbnMqCitqdW1wbGlzdAltb3Rpb24udHh0CS8qanVtcGxpc3QqCitqdW1wdG8tZGlmZnMJZGlmZi50eHQJLypqdW1wdG8tZGlmZnMqCitrCW1vdGlvbi50eHQJLyprKgora2NjCXVnYW5kYS50eHQJLyprY2MqCitrZXktY29kZXMJaW50cm8udHh0CS8qa2V5LWNvZGVzKgora2V5LWNvZGVzLWNoYW5nZWQJdmVyc2lvbjQudHh0CS8qa2V5LWNvZGVzLWNoYW5nZWQqCitrZXktbWFwcGluZwltYXAudHh0CS8qa2V5LW1hcHBpbmcqCitrZXktbm90YXRpb24JaW50cm8udHh0CS8qa2V5LW5vdGF0aW9uKgora2V5Y29kZXMJaW50cm8udHh0CS8qa2V5Y29kZXMqCitrZXltYXAtZmlsZS1mb3JtYXQJbWJ5dGUudHh0CS8qa2V5bWFwLWZpbGUtZm9ybWF0Kgora2V5bWFwLWhlYnJldwltYnl0ZS50eHQJLyprZXltYXAtaGVicmV3Kgora2V5cGFkLTAJaW50cm8udHh0CS8qa2V5cGFkLTAqCitrZXlwYWQtOQlpbnRyby50eHQJLyprZXlwYWQtOSoKK2tleXBhZC1kaXZpZGUJaW50cm8udHh0CS8qa2V5cGFkLWRpdmlkZSoKK2tleXBhZC1lbmQJaW50cm8udHh0CS8qa2V5cGFkLWVuZCoKK2tleXBhZC1lbnRlcglpbnRyby50eHQJLyprZXlwYWQtZW50ZXIqCitrZXlwYWQtaG9tZQlpbnRyby50eHQJLyprZXlwYWQtaG9tZSoKK2tleXBhZC1taW51cwlpbnRyby50eHQJLyprZXlwYWQtbWludXMqCitrZXlwYWQtbXVsdGlwbHkJaW50cm8udHh0CS8qa2V5cGFkLW11bHRpcGx5Kgora2V5cGFkLXBhZ2UtZG93bglpbnRyby50eHQJLyprZXlwYWQtcGFnZS1kb3duKgora2V5cGFkLXBhZ2UtdXAJaW50cm8udHh0CS8qa2V5cGFkLXBhZ2UtdXAqCitrZXlwYWQtcGx1cwlpbnRyby50eHQJLyprZXlwYWQtcGx1cyoKK2tleXBhZC1wb2ludAlpbnRyby50eHQJLyprZXlwYWQtcG9pbnQqCitrbm93bi1idWdzCXRvZG8udHh0CS8qa25vd24tYnVncyoKK2wJbW90aW9uLnR4dAkvKmwqCitsOnZhcglldmFsLnR4dAkvKmw6dmFyKgorbGFjZS1zeW50YXgJc3ludGF4LnR4dAkvKmxhY2Utc3ludGF4KgorbGFjZS52aW0Jc3ludGF4LnR4dAkvKmxhY2UudmltKgorbGFuZy12YXJpYWJsZQlldmFsLnR4dAkvKmxhbmctdmFyaWFibGUqCitsYW5ndWFnZS1tYXBwaW5nCW1hcC50eHQJLypsYW5ndWFnZS1tYXBwaW5nKgorbGFzdC1wYXR0ZXJuCXBhdHRlcm4udHh0CS8qbGFzdC1wYXR0ZXJuKgorbGFzdC1wb3NpdGlvbi1qdW1wCWV2YWwudHh0CS8qbGFzdC1wb3NpdGlvbi1qdW1wKgorbGFzdF9idWZmZXJfbnIoKQlldmFsLnR4dAkvKmxhc3RfYnVmZmVyX25yKCkqCitsY190aW1lLXZhcmlhYmxlCWV2YWwudHh0CS8qbGNfdGltZS12YXJpYWJsZSoKK2xlZnQtcmlnaHQtbW90aW9ucwltb3Rpb24udHh0CS8qbGVmdC1yaWdodC1tb3Rpb25zKgorbGVzcwl2YXJpb3VzLnR4dAkvKmxlc3MqCitsZXR0ZXIJb3B0aW9ucy50eHQJLypsZXR0ZXIqCitsZXgtc3ludGF4CXN5bnRheC50eHQJLypsZXgtc3ludGF4KgorbGV4LnZpbQlzeW50YXgudHh0CS8qbGV4LnZpbSoKK2xoYXNrZWxsLnZpbQlzeW50YXgudHh0CS8qbGhhc2tlbGwudmltKgorbGliY2FsbCgpCWV2YWwudHh0CS8qbGliY2FsbCgpKgorbGliY2FsbG5yKCkJZXZhbC50eHQJLypsaWJjYWxsbnIoKSoKK2xpY2Vuc2UJdWdhbmRhLnR4dAkvKmxpY2Vuc2UqCitsaWQJcXVpY2tmaXgudHh0CS8qbGlkKgorbGltaXRzCXZpX2RpZmYudHh0CS8qbGltaXRzKgorbGluZSgpCWV2YWwudHh0CS8qbGluZSgpKgorbGluZS1jb250aW51YXRpb24JcmVwZWF0LnR4dAkvKmxpbmUtY29udGludWF0aW9uKgorbGluZTJieXRlKCkJZXZhbC50eHQJLypsaW5lMmJ5dGUoKSoKK2xpbmVmZWVkCWludHJvLnR4dAkvKmxpbmVmZWVkKgorbGluZXdpc2UJbW90aW9uLnR4dAkvKmxpbmV3aXNlKgorbGluZXdpc2UtcmVnaXN0ZXIJY2hhbmdlLnR4dAkvKmxpbmV3aXNlLXJlZ2lzdGVyKgorbGluZXdpc2UtdmlzdWFsCXZpc3VhbC50eHQJLypsaW5ld2lzZS12aXN1YWwqCitsaXNwaW5kZW50KCkJZXZhbC50eHQJLypsaXNwaW5kZW50KCkqCitsaXN0LXJlcGVhdAl3aW5kb3dzLnR4dAkvKmxpc3QtcmVwZWF0KgorbGl0ZS1zeW50YXgJc3ludGF4LnR4dAkvKmxpdGUtc3ludGF4KgorbGl0ZS52aW0Jc3ludGF4LnR4dAkvKmxpdGUudmltKgorbGl0ZXJhbC1zdHJpbmcJZXZhbC50eHQJLypsaXRlcmFsLXN0cmluZyoKK2xudW0tdmFyaWFibGUJZXZhbC50eHQJLypsbnVtLXZhcmlhYmxlKgorbG9hZC1wbHVnaW5zCXN0YXJ0aW5nLnR4dAkvKmxvYWQtcGx1Z2lucyoKK2xvYWQtdmltLXNjcmlwdAlyZXBlYXQudHh0CS8qbG9hZC12aW0tc2NyaXB0KgorbG9jYWwtYWRkaXRpb25zCWhlbHAudHh0CS8qbG9jYWwtYWRkaXRpb25zKgorbG9jYWwtZnVuY3Rpb24JZXZhbC50eHQJLypsb2NhbC1mdW5jdGlvbioKK2xvY2FsLW9wdGlvbnMJb3B0aW9ucy50eHQJLypsb2NhbC1vcHRpb25zKgorbG9jYWwtdmFyaWFibGUJZXZhbC50eHQJLypsb2NhbC12YXJpYWJsZSoKK2xvY2FsZQltYnl0ZS50eHQJLypsb2NhbGUqCitsb2NhbGUtbmFtZQltYnl0ZS50eHQJLypsb2NhbGUtbmFtZSoKK2xvY2FsdGltZSgpCWV2YWwudHh0CS8qbG9jYWx0aW1lKCkqCitsb25nLWxpbmVzCXZlcnNpb241LnR4dAkvKmxvbmctbGluZXMqCitsb3dlcmNhc2UJY2hhbmdlLnR4dAkvKmxvd2VyY2FzZSoKK2xwYy1zeW50YXgJc3ludGF4LnR4dAkvKmxwYy1zeW50YXgqCitscGMudmltCXN5bnRheC50eHQJLypscGMudmltKgorbHVhLXN5bnRheAlzeW50YXgudHh0CS8qbHVhLXN5bnRheCoKK2x1YS52aW0Jc3ludGF4LnR4dAkvKmx1YS52aW0qCittCW1vdGlvbi50eHQJLyptKgorbScJbW90aW9uLnR4dAkvKm0nKgorbVsJbW90aW9uLnR4dAkvKm1bKgorbV0JbW90aW9uLnR4dAkvKm1dKgorbWAJbW90aW9uLnR4dAkvKm1gKgorbWFjCW9zX21hYy50eHQJLyptYWMqCittYWMtYnVnCW9zX21hYy50eHQJLyptYWMtYnVnKgorbWFjLWNvbXBpbGUJb3NfbWFjLnR4dAkvKm1hYy1jb21waWxlKgorbWFjLWZhcQlvc19tYWMudHh0CS8qbWFjLWZhcSoKK21hYy1maWxlbmFtZQlvc19tYWMudHh0CS8qbWFjLWZpbGVuYW1lKgorbWFjLWxhY2sJb3NfbWFjLnR4dAkvKm1hYy1sYWNrKgorbWFjLXZpbWZpbGUJb3NfbWFjLnR4dAkvKm1hYy12aW1maWxlKgorbWFjaW50b3NoCW9zX21hYy50eHQJLyptYWNpbnRvc2gqCittYWNybwltYXAudHh0CS8qbWFjcm8qCittYWlsLWxpc3QJaW50cm8udHh0CS8qbWFpbC1saXN0KgorbWFpbC1wbHVnaW4JZmlsZXR5cGUudHh0CS8qbWFpbC1wbHVnaW4qCittYWlsLnZpbQlzeW50YXgudHh0CS8qbWFpbC52aW0qCittYWlsbGlzdAlpbnRyby50eHQJLyptYWlsbGlzdCoKK21haWxsaXN0LWFyY2hpdmUJaW50cm8udHh0CS8qbWFpbGxpc3QtYXJjaGl2ZSoKK21ha2Utc3ludGF4CXN5bnRheC50eHQJLyptYWtlLXN5bnRheCoKK21ha2UudmltCXN5bnRheC50eHQJLyptYWtlLnZpbSoKK21hbi1wbHVnaW4JZmlsZXR5cGUudHh0CS8qbWFuLXBsdWdpbioKK21hbnVhbC1jb3B5cmlnaHQJdXNyXzAxLnR4dAkvKm1hbnVhbC1jb3B5cmlnaHQqCittYXAtPFNJRD4JbWFwLnR4dAkvKm1hcC08U0lEPioKK21hcC1hbWJpZ3VvdXMJbWFwLnR4dAkvKm1hcC1hbWJpZ3VvdXMqCittYXAtYmFja3RpY2sJdGlwcy50eHQJLyptYXAtYmFja3RpY2sqCittYXAtY29tbWVudHMJbWFwLnR4dAkvKm1hcC1jb21tZW50cyoKK21hcC1leGFtcGxlcwltYXAudHh0CS8qbWFwLWV4YW1wbGVzKgorbWFwLWtleXMtZmFpbHMJbWFwLnR4dAkvKm1hcC1rZXlzLWZhaWxzKgorbWFwLWxpc3RpbmcJbWFwLnR4dAkvKm1hcC1saXN0aW5nKgorbWFwLW1vZGVzCW1hcC50eHQJLyptYXAtbW9kZXMqCittYXAtbXVsdGlieXRlCW1hcC50eHQJLyptYXAtbXVsdGlieXRlKgorbWFwLW92ZXJ2aWV3CW1hcC50eHQJLyptYXAtb3ZlcnZpZXcqCittYXAtc2VsZi1kZXN0cm95CXRpcHMudHh0CS8qbWFwLXNlbGYtZGVzdHJveSoKK21hcC10eXBpbmcJbWFwLnR4dAkvKm1hcC10eXBpbmcqCittYXAtd2hpY2gta2V5cwltYXAudHh0CS8qbWFwLXdoaWNoLWtleXMqCittYXAudHh0CW1hcC50eHQJLyptYXAudHh0KgorbWFwX0NUUkxfQwltYXAudHh0CS8qbWFwX0NUUkxfQyoKK21hcF9iYWNrc2xhc2gJbWFwLnR4dAkvKm1hcF9iYWNrc2xhc2gqCittYXBfYmFyCW1hcC50eHQJLyptYXBfYmFyKgorbWFwX2VtcHR5X3JocwltYXAudHh0CS8qbWFwX2VtcHR5X3JocyoKK21hcF9yZXR1cm4JbWFwLnR4dAkvKm1hcF9yZXR1cm4qCittYXBfc3BhY2VfaW5fbGhzCW1hcC50eHQJLyptYXBfc3BhY2VfaW5fbGhzKgorbWFwX3NwYWNlX2luX3JocwltYXAudHh0CS8qbWFwX3NwYWNlX2luX3JocyoKK21hcGFyZygpCWV2YWwudHh0CS8qbWFwYXJnKCkqCittYXBjaGVjaygpCWV2YWwudHh0CS8qbWFwY2hlY2soKSoKK21hcGxlLXN5bnRheAlzeW50YXgudHh0CS8qbWFwbGUtc3ludGF4KgorbWFwbGUudmltCXN5bnRheC50eHQJLyptYXBsZS52aW0qCittYXBsZWFkZXIJbWFwLnR4dAkvKm1hcGxlYWRlcioKK21hcGxvY2FsbGVhZGVyCW1hcC50eHQJLyptYXBsb2NhbGxlYWRlcioKK21hcHBpbmcJbWFwLnR4dAkvKm1hcHBpbmcqCittYXJrCW1vdGlvbi50eHQJLyptYXJrKgorbWFyay1tb3Rpb25zCW1vdGlvbi50eHQJLyptYXJrLW1vdGlvbnMqCittYXNtLXN5bnRheAlzeW50YXgudHh0CS8qbWFzbS1zeW50YXgqCittYXNtLnZpbQlzeW50YXgudHh0CS8qbWFzbS52aW0qCittYXRjaCgpCWV2YWwudHh0CS8qbWF0Y2goKSoKK21hdGNoLWhpZ2hsaWdodAlwYXR0ZXJuLnR4dAkvKm1hdGNoLWhpZ2hsaWdodCoKK21hdGNoZW5kKCkJZXZhbC50eHQJLyptYXRjaGVuZCgpKgorbWF0Y2hpdC1pbnN0YWxsCXVzcl8wNS50eHQJLyptYXRjaGl0LWluc3RhbGwqCittYXRjaHN0cigpCWV2YWwudHh0CS8qbWF0Y2hzdHIoKSoKK21ieXRlLUlNRQltYnl0ZS50eHQJLyptYnl0ZS1JTUUqCittYnl0ZS1YSU0JbWJ5dGUudHh0CS8qbWJ5dGUtWElNKgorbWJ5dGUtY29udmVyc2lvbgltYnl0ZS50eHQJLyptYnl0ZS1jb252ZXJzaW9uKgorbWJ5dGUtZW5jb2RpbmcJbWJ5dGUudHh0CS8qbWJ5dGUtZW5jb2RpbmcqCittYnl0ZS1maXJzdAltYnl0ZS50eHQJLyptYnl0ZS1maXJzdCoKK21ieXRlLWZvbnRzLU1Td2luCW1ieXRlLnR4dAkvKm1ieXRlLWZvbnRzLU1Td2luKgorbWJ5dGUtZm9udHMtWDExCW1ieXRlLnR4dAkvKm1ieXRlLWZvbnRzLVgxMSoKK21ieXRlLWtleW1hcAltYnl0ZS50eHQJLyptYnl0ZS1rZXltYXAqCittYnl0ZS1sb2NhbGUJbWJ5dGUudHh0CS8qbWJ5dGUtbG9jYWxlKgorbWJ5dGUtb3B0aW9ucwltYnl0ZS50eHQJLyptYnl0ZS1vcHRpb25zKgorbWJ5dGUtdGVybWluYWwJbWJ5dGUudHh0CS8qbWJ5dGUtdGVybWluYWwqCittYnl0ZS11dGY4CW1ieXRlLnR4dAkvKm1ieXRlLXV0ZjgqCittYnl0ZS50eHQJbWJ5dGUudHh0CS8qbWJ5dGUudHh0KgorbWVudS1jaGFuZ2VzLTUuNAl2ZXJzaW9uNS50eHQJLyptZW51LWNoYW5nZXMtNS40KgorbWVudS1leGFtcGxlcwlndWkudHh0CS8qbWVudS1leGFtcGxlcyoKK21lbnUtcHJpb3JpdHkJZ3VpLnR4dAkvKm1lbnUtcHJpb3JpdHkqCittZW51LXNlcGFyYXRvcglndWkudHh0CS8qbWVudS1zZXBhcmF0b3IqCittZW51LnZpbQlndWkudHh0CS8qbWVudS52aW0qCittZW51cwlndWkudHh0CS8qbWVudXMqCittZXNzYWdlLWhpc3RvcnkJbWVzc2FnZS50eHQJLyptZXNzYWdlLWhpc3RvcnkqCittZXNzYWdlLnR4dAltZXNzYWdlLnR4dAkvKm1lc3NhZ2UudHh0KgorbWVzc2FnZXMJbWVzc2FnZS50eHQJLyptZXNzYWdlcyoKK21ldGEJaW50cm8udHh0CS8qbWV0YSoKK21pbmltYWwtZmVhdHVyZXMJb3NfbXNkb3MudHh0CS8qbWluaW1hbC1mZWF0dXJlcyoKK21pc3NpbmctY29tbWFuZHMJdmlfZGlmZi50eHQJLyptaXNzaW5nLWNvbW1hbmRzKgorbWlzc2luZy1vcHRpb25zCXZpX2RpZmYudHh0CS8qbWlzc2luZy1vcHRpb25zKgorbWxhbmcudHh0CW1sYW5nLnR4dAkvKm1sYW5nLnR4dCoKK21vZGUoKQlldmFsLnR4dAkvKm1vZGUoKSoKK21vZGUtRXgJaW50cm8udHh0CS8qbW9kZS1FeCoKK21vZGUtY21kbGluZQljbWRsaW5lLnR4dAkvKm1vZGUtY21kbGluZSoKK21vZGUtaW5zLXJlcGwJaW5zZXJ0LnR4dAkvKm1vZGUtaW5zLXJlcGwqCittb2RlLXJlcGxhY2UJaW5zZXJ0LnR4dAkvKm1vZGUtcmVwbGFjZSoKK21vZGUtc3dpdGNoaW5nCWludHJvLnR4dAkvKm1vZGUtc3dpdGNoaW5nKgorbW9kZWxlc3MtYW5kLWNsaXBib2FyZAl2ZXJzaW9uNi50eHQJLyptb2RlbGVzcy1hbmQtY2xpcGJvYXJkKgorbW9kZWxlc3Mtc2VsZWN0aW9uCWd1aS50eHQJLyptb2RlbGVzcy1zZWxlY3Rpb24qCittb2RlbGluZQlvcHRpb25zLnR4dAkvKm1vZGVsaW5lKgorbW9kZWxpbmUtbG9jYWwJb3B0aW9ucy50eHQJLyptb2RlbGluZS1sb2NhbCoKK21vZGVsaW5lLXZlcnNpb24Jb3B0aW9ucy50eHQJLyptb2RlbGluZS12ZXJzaW9uKgorbW9vLXN5bnRheAlzeW50YXgudHh0CS8qbW9vLXN5bnRheCoKK21vby52aW0Jc3ludGF4LnR4dAkvKm1vby52aW0qCittb3JlLWNvbXBhdGlibGUJdmVyc2lvbjUudHh0CS8qbW9yZS1jb21wYXRpYmxlKgorbW9yZS1wcm9tcHQJbWVzc2FnZS50eHQJLyptb3JlLXByb21wdCoKK21vdGlvbi50eHQJbW90aW9uLnR4dAkvKm1vdGlvbi50eHQqCittb3VzZS1tb2RlLXRhYmxlCXRlcm0udHh0CS8qbW91c2UtbW9kZS10YWJsZSoKK21vdXNlLW92ZXJ2aWV3CXRlcm0udHh0CS8qbW91c2Utb3ZlcnZpZXcqCittb3VzZS1zd2FwLWJ1dHRvbnMJdGVybS50eHQJLyptb3VzZS1zd2FwLWJ1dHRvbnMqCittb3VzZS11c2luZwl0ZXJtLnR4dAkvKm1vdXNlLXVzaW5nKgorbXMtZG9zCW9zX21zZG9zLnR4dAkvKm1zLWRvcyoKK21zZG9zCW9zX21zZG9zLnR4dAkvKm1zZG9zKgorbXNkb3MtYXJyb3dzCW9zX21zZG9zLnR4dAkvKm1zZG9zLWFycm93cyoKK21zZG9zLWNsaXBib2FyZC1saW1pdHMJb3NfbXNkb3MudHh0CS8qbXNkb3MtY2xpcGJvYXJkLWxpbWl0cyoKK21zZG9zLWNvbXBpbGluZwlvc19tc2Rvcy50eHQJLyptc2Rvcy1jb21waWxpbmcqCittc2Rvcy1jb3B5LXBhc3RlCW9zX21zZG9zLnR4dAkvKm1zZG9zLWNvcHktcGFzdGUqCittc2Rvcy1mbmFtZS1leHRlbnNpb25zCW9zX21zZG9zLnR4dAkvKm1zZG9zLWZuYW1lLWV4dGVuc2lvbnMqCittc2Rvcy1saW1pdGF0aW9ucwlvc19tc2Rvcy50eHQJLyptc2Rvcy1saW1pdGF0aW9ucyoKK21zZG9zLWxpbmtlZC1maWxlcwlvc19tc2Rvcy50eHQJLyptc2Rvcy1saW5rZWQtZmlsZXMqCittc2Rvcy1sb25nZm5hbWUJb3NfbXNkb3MudHh0CS8qbXNkb3MtbG9uZ2ZuYW1lKgorbXNkb3MtbW9kZQlndWlfdzMyLnR4dAkvKm1zZG9zLW1vZGUqCittc2Rvcy1wcm9ibGVtcwlvc19tc2Rvcy50eHQJLyptc2Rvcy1wcm9ibGVtcyoKK21zZG9zLXRlcm1jYXAJb3NfbXNkb3MudHh0CS8qbXNkb3MtdGVybWNhcCoKK21zZG9zLXZlcnNpb25zCW9zX21zZG9zLnR4dAkvKm1zZG9zLXZlcnNpb25zKgorbXNxbC1zeW50YXgJc3ludGF4LnR4dAkvKm1zcWwtc3ludGF4KgorbXNxbC52aW0Jc3ludGF4LnR4dAkvKm1zcWwudmltKgorbXN3aW4udmltCWd1aV93MzIudHh0CS8qbXN3aW4udmltKgorbXVsdGktYnl0ZQltYnl0ZS50eHQJLyptdWx0aS1ieXRlKgorbXVsdGktbGFuZwltbGFuZy50eHQJLyptdWx0aS1sYW5nKgorbXVsdGktcmVwZWF0CXJlcGVhdC50eHQJLyptdWx0aS1yZXBlYXQqCittdWx0aWJ5dGUJbWJ5dGUudHh0CS8qbXVsdGlieXRlKgorbXVsdGlieXRlLWltZQltYnl0ZS50eHQJLyptdWx0aWJ5dGUtaW1lKgorbXVsdGlieXRlLWlucHV0CW1ieXRlLnR4dAkvKm11bHRpYnl0ZS1pbnB1dCoKK211bHRpbGFuZwltbGFuZy50eHQJLyptdWx0aWxhbmcqCittdWx0aWxhbmctbWVudXMJbWxhbmcudHh0CS8qbXVsdGlsYW5nLW1lbnVzKgorbXVsdGlsYW5nLW1lc3NhZ2VzCW1sYW5nLnR4dAkvKm11bHRpbGFuZy1tZXNzYWdlcyoKK211bHRpbGFuZy1zY3JpcHRzCW1sYW5nLnR4dAkvKm11bHRpbGFuZy1zY3JpcHRzKgorbXlmaWxldHlwZWZpbGUJc3ludGF4LnR4dAkvKm15ZmlsZXR5cGVmaWxlKgorbXlzY3JpcHRzZmlsZQlzeW50YXgudHh0CS8qbXlzY3JpcHRzZmlsZSoKK215c3ludGF4ZmlsZQlzeW50YXgudHh0CS8qbXlzeW50YXhmaWxlKgorbXlzeW50YXhmaWxlLWFkZAlzeW50YXgudHh0CS8qbXlzeW50YXhmaWxlLWFkZCoKK215c3ludGF4ZmlsZS1yZXBsYWNlCXN5bnRheC50eHQJLypteXN5bnRheGZpbGUtcmVwbGFjZSoKK24JcGF0dGVybi50eHQJLypuKgorbmFzbS1zeW50YXgJc3ludGF4LnR4dAkvKm5hc20tc3ludGF4KgorbmFzbS52aW0Jc3ludGF4LnR4dAkvKm5hc20udmltKgorbmF2aWdhdGlvbgltb3Rpb24udHh0CS8qbmF2aWdhdGlvbioKK25iLWNvbW1hbmRzCW5ldGJlYW5zLnR4dAkvKm5iLWNvbW1hbmRzKgorbmItZXZlbnRzCW5ldGJlYW5zLnR4dAkvKm5iLWV2ZW50cyoKK25iLWZ1bmN0aW9ucwluZXRiZWFucy50eHQJLypuYi1mdW5jdGlvbnMqCituYi1tZXNzYWdlcwluZXRiZWFucy50eHQJLypuYi1tZXNzYWdlcyoKK25iLXNwZWNpYWwJbmV0YmVhbnMudHh0CS8qbmItc3BlY2lhbCoKK25iLXRlcm1zCW5ldGJlYW5zLnR4dAkvKm5iLXRlcm1zKgorbmNmLXN5bnRheAlzeW50YXgudHh0CS8qbmNmLXN5bnRheCoKK25jZi52aW0Jc3ludGF4LnR4dAkvKm5jZi52aW0qCituZXRiZWFucwluZXRiZWFucy50eHQJLypuZXRiZWFucyoKK25ldGJlYW5zLWNvbmZpZ3VyZQluZXRiZWFucy50eHQJLypuZXRiZWFucy1jb25maWd1cmUqCituZXRiZWFucy1kb3dubG9hZAluZXRiZWFucy50eHQJLypuZXRiZWFucy1kb3dubG9hZCoKK25ldGJlYW5zLWludHJvCW5ldGJlYW5zLnR4dAkvKm5ldGJlYW5zLWludHJvKgorbmV0YmVhbnMta2V5YmluZGluZ3MJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMta2V5YmluZGluZ3MqCituZXRiZWFucy1tZXNzYWdlcwluZXRiZWFucy50eHQJLypuZXRiZWFucy1tZXNzYWdlcyoKK25ldGJlYW5zLXByZXBhcmF0aW9uCW5ldGJlYW5zLnR4dAkvKm5ldGJlYW5zLXByZXBhcmF0aW9uKgorbmV0YmVhbnMtcHJvYmxlbXMJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtcHJvYmxlbXMqCituZXRiZWFucy1wcm90b2NvbAluZXRiZWFucy50eHQJLypuZXRiZWFucy1wcm90b2NvbCoKK25ldGJlYW5zLXJ1bgluZXRiZWFucy50eHQJLypuZXRiZWFucy1ydW4qCituZXRiZWFucy1zZXR1cAluZXRiZWFucy50eHQJLypuZXRiZWFucy1zZXR1cCoKK25ldGJlYW5zLXN1cHBvcnQJbmV0YmVhbnMudHh0CS8qbmV0YmVhbnMtc3VwcG9ydCoKK25ldGJlYW5zLnR4dAluZXRiZWFucy50eHQJLypuZXRiZWFucy50eHQqCituZXRydwlwaV9uZXRydy50eHQJLypuZXRydyoKK25ldHJ3LWFjdGl2YXRlCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWFjdGl2YXRlKgorbmV0cnctY29udGVudHMJcGlfbmV0cncudHh0CS8qbmV0cnctY29udGVudHMqCituZXRydy1jcmVkaXRzCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWNyZWRpdHMqCituZXRydy1kZWJ1ZwlwaV9uZXRydy50eHQJLypuZXRydy1kZWJ1ZyoKK25ldHJ3LWV4CXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWV4KgorbmV0cnctZmlsZQlwaV9uZXRydy50eHQJLypuZXRydy1maWxlKgorbmV0cnctZml4dXAJcGlfbmV0cncudHh0CS8qbmV0cnctZml4dXAqCituZXRydy1uZXRyYwlwaV9uZXRydy50eHQJLypuZXRydy1uZXRyYyoKK25ldHJ3LW5ldwlwaV9uZXRydy50eHQJLypuZXRydy1uZXcqCituZXRydy1uZXdzdHVmZglwaV9uZXRydy50eHQJLypuZXRydy1uZXdzdHVmZioKK25ldHJ3LW9wdGlvbnMJcGlfbmV0cncudHh0CS8qbmV0cnctb3B0aW9ucyoKK25ldHJ3LXBhc3N3ZAlwaV9uZXRydy50eHQJLypuZXRydy1wYXNzd2QqCituZXRydy1wcm90b2NvbAlwaV9uZXRydy50eHQJLypuZXRydy1wcm90b2NvbCoKK25ldHJ3LXJlZglwaV9uZXRydy50eHQJLypuZXRydy1yZWYqCituZXRydy10cmFuc3BhcmVudAlwaV9uZXRydy50eHQJLypuZXRydy10cmFuc3BhcmVudCoKK25ldHJ3LXVpZHBhc3MJcGlfbmV0cncudHh0CS8qbmV0cnctdWlkcGFzcyoKK25ldHJ3LXVybHMJcGlfbmV0cncudHh0CS8qbmV0cnctdXJscyoKK25ldHJ3LXZhcglwaV9uZXRydy50eHQJLypuZXRydy12YXIqCituZXRydy14ZmVyCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LXhmZXIqCituZXRydy52aW0JcGlfbmV0cncudHh0CS8qbmV0cncudmltKgorbmV0dGVybS1tb3VzZQlvcHRpb25zLnR4dAkvKm5ldHRlcm0tbW91c2UqCituZXR3b3JrCXBpX25ldHJ3LnR4dAkvKm5ldHdvcmsqCituZXctNQl2ZXJzaW9uNS50eHQJLypuZXctNSoKK25ldy02CXZlcnNpb242LnR4dAkvKm5ldy02KgorbmV3LUdUSy1HVUkJdmVyc2lvbjUudHh0CS8qbmV3LUdUSy1HVUkqCituZXctU2VsZWN0LW1vZGUJdmVyc2lvbjUudHh0CS8qbmV3LVNlbGVjdC1tb2RlKgorbmV3LVZpZXcJdmVyc2lvbjYudHh0CS8qbmV3LVZpZXcqCituZXctYXJndW1lbnQtbGlzdAl2ZXJzaW9uNi50eHQJLypuZXctYXJndW1lbnQtbGlzdCoKK25ldy1idWZ0eXBlCXZlcnNpb242LnR4dAkvKm5ldy1idWZ0eXBlKgorbmV3LWNtZHdpbgl2ZXJzaW9uNi50eHQJLypuZXctY21kd2luKgorbmV3LWNvbG9yLXNjaGVtZXMJdmVyc2lvbjYudHh0CS8qbmV3LWNvbG9yLXNjaGVtZXMqCituZXctY29tbWFuZHMJdmVyc2lvbjUudHh0CS8qbmV3LWNvbW1hbmRzKgorbmV3LWNvbW1hbmRzLTUuNAl2ZXJzaW9uNS50eHQJLypuZXctY29tbWFuZHMtNS40KgorbmV3LWRlYnVnLWl0Zgl2ZXJzaW9uNi50eHQJLypuZXctZGVidWctaXRmKgorbmV3LWRlYnVnLW1vZGUJdmVyc2lvbjYudHh0CS8qbmV3LWRlYnVnLW1vZGUqCituZXctZGlmZi1tb2RlCXZlcnNpb242LnR4dAkvKm5ldy1kaWZmLW1vZGUqCituZXctZW5jcnlwdGlvbgl2ZXJzaW9uNS50eHQJLypuZXctZW5jcnlwdGlvbioKK25ldy1ldmltCXZlcnNpb242LnR4dAkvKm5ldy1ldmltKgorbmV3LWV4LWNvbW1hbmRzLTUuMgl2ZXJzaW9uNS50eHQJLypuZXctZXgtY29tbWFuZHMtNS4yKgorbmV3LWZpbGUtYnJvd3Nlcgl2ZXJzaW9uNi50eHQJLypuZXctZmlsZS1icm93c2VyKgorbmV3LWZpbGUtd3JpdGluZwl2ZXJzaW9uNi50eHQJLypuZXctZmlsZS13cml0aW5nKgorbmV3LWZpbGV0eXBlCWZpbGV0eXBlLnR4dAkvKm5ldy1maWxldHlwZSoKK25ldy1maWxldHlwZS01LjQJdmVyc2lvbjUudHh0CS8qbmV3LWZpbGV0eXBlLTUuNCoKK25ldy1maWxldHlwZS1wbHVnaW5zCXZlcnNpb242LnR4dAkvKm5ldy1maWxldHlwZS1wbHVnaW5zKgorbmV3LWZpbGV0eXBlLXNjcmlwdHMJZmlsZXR5cGUudHh0CS8qbmV3LWZpbGV0eXBlLXNjcmlwdHMqCituZXctZm9sZGluZwl2ZXJzaW9uNi50eHQJLypuZXctZm9sZGluZyoKK25ldy1mdW5jdGlvbnMtNS4yCXZlcnNpb241LnR4dAkvKm5ldy1mdW5jdGlvbnMtNS4yKgorbmV3LWdsb2JhbC12YWx1ZXMJdmVyc2lvbjYudHh0CS8qbmV3LWdsb2JhbC12YWx1ZXMqCituZXctaGlnaGxpZ2h0aW5nCXZlcnNpb241LnR4dAkvKm5ldy1oaWdobGlnaHRpbmcqCituZXctaW5kZW50LWZsZXgJdmVyc2lvbjYudHh0CS8qbmV3LWluZGVudC1mbGV4KgorbmV3LWl0ZW1zLTYJdmVyc2lvbjYudHh0CS8qbmV3LWl0ZW1zLTYqCituZXctbGluZS1jb250aW51YXRpb24JdmVyc2lvbjUudHh0CS8qbmV3LWxpbmUtY29udGludWF0aW9uKgorbmV3LW11bHRpLWJ5dGUJdmVyc2lvbjUudHh0CS8qbmV3LW11bHRpLWJ5dGUqCituZXctbXVsdGktbGFuZwl2ZXJzaW9uNi50eHQJLypuZXctbXVsdGktbGFuZyoKK25ldy1uZXR3b3JrLWZpbGVzCXZlcnNpb242LnR4dAkvKm5ldy1uZXR3b3JrLWZpbGVzKgorbmV3LW9wZXJhdG9yLW1vZAl2ZXJzaW9uNi50eHQJLypuZXctb3BlcmF0b3ItbW9kKgorbmV3LW9wdGlvbnMtNS4yCXZlcnNpb241LnR4dAkvKm5ldy1vcHRpb25zLTUuMioKK25ldy1vcHRpb25zLTUuNAl2ZXJzaW9uNS50eHQJLypuZXctb3B0aW9ucy01LjQqCituZXctcGVybC1weXRob24JdmVyc2lvbjUudHh0CS8qbmV3LXBlcmwtcHl0aG9uKgorbmV3LXBsdWdpbnMJdmVyc2lvbjYudHh0CS8qbmV3LXBsdWdpbnMqCituZXctcHJpbnRpbmcJdmVyc2lvbjYudHh0CS8qbmV3LXByaW50aW5nKgorbmV3LXJ1bnRpbWUtZGlyCXZlcnNpb241LnR4dAkvKm5ldy1ydW50aW1lLWRpcioKK25ldy1zY3JpcHQJdmVyc2lvbjUudHh0CS8qbmV3LXNjcmlwdCoKK25ldy1zY3JpcHQtNS40CXZlcnNpb241LnR4dAkvKm5ldy1zY3JpcHQtNS40KgorbmV3LXNlYXJjaC1wYXRoCXZlcnNpb242LnR4dAkvKm5ldy1zZWFyY2gtcGF0aCoKK25ldy1zZWFyY2hwYXQJdmVyc2lvbjYudHh0CS8qbmV3LXNlYXJjaHBhdCoKK25ldy1zZXNzaW9uLWZpbGVzCXZlcnNpb241LnR4dAkvKm5ldy1zZXNzaW9uLWZpbGVzKgorbmV3LXVubGlzdGVkLWJ1ZmZlcnMJdmVyc2lvbjYudHh0CS8qbmV3LXVubGlzdGVkLWJ1ZmZlcnMqCituZXctdXNlci1kZWZpbmVkCXZlcnNpb241LnR4dAkvKm5ldy11c2VyLWRlZmluZWQqCituZXctdXNlci1tYW51YWwJdmVyc2lvbjYudHh0CS8qbmV3LXVzZXItbWFudWFsKgorbmV3LXV0Zi04CXZlcnNpb242LnR4dAkvKm5ldy11dGYtOCoKK25ldy12ZXJ0c3BsaXQJdmVyc2lvbjYudHh0CS8qbmV3LXZlcnRzcGxpdCoKK25ldy12aW0tc2VydmVyCXZlcnNpb242LnR4dAkvKm5ldy12aW0tc2VydmVyKgorbmV3LXZpcnRlZGl0CXZlcnNpb242LnR4dAkvKm5ldy12aXJ0ZWRpdCoKK25ld3MJaW50cm8udHh0CS8qbmV3cyoKK25leHRub25ibGFuaygpCWV2YWwudHh0CS8qbmV4dG5vbmJsYW5rKCkqCituby1ldmFsLWZlYXR1cmUJZXZhbC50eHQJLypuby1ldmFsLWZlYXR1cmUqCitub19idWZmZXJzX21lbnUJZ3VpLnR4dAkvKm5vX2J1ZmZlcnNfbWVudSoKK25vcm1hbC1pbmRleAlpbmRleC50eHQJLypub3JtYWwtaW5kZXgqCitub3QtY29tcGF0aWJsZQl1c3JfMDEudHh0CS8qbm90LWNvbXBhdGlibGUqCitub3QtZWRpdGVkCWVkaXRpbmcudHh0CS8qbm90LWVkaXRlZCoKK25vdGF0aW9uCWludHJvLnR4dAkvKm5vdGF0aW9uKgorbm90ZXBhZAlndWlfdzMyLnR4dAkvKm5vdGVwYWQqCitucjJjaGFyKCkJZXZhbC50eHQJLypucjJjaGFyKCkqCitucm9mZi1zeW50YXgJc3ludGF4LnR4dAkvKm5yb2ZmLXN5bnRheCoKK25yb2ZmLnZpbQlzeW50YXgudHh0CS8qbnJvZmYudmltKgorbwlpbnNlcnQudHh0CS8qbyoKK29fQ1RSTC1WCW1vdGlvbi50eHQJLypvX0NUUkwtVioKK29fVgltb3Rpb24udHh0CS8qb19WKgorb192CW1vdGlvbi50eHQJLypvX3YqCitvYmplY3QtbW90aW9ucwltb3Rpb24udHh0CS8qb2JqZWN0LW1vdGlvbnMqCitvYmplY3Qtc2VsZWN0CW1vdGlvbi50eHQJLypvYmplY3Qtc2VsZWN0Kgorb2JqZWN0cwlpbmRleC50eHQJLypvYmplY3RzKgorb2J0YWluaW5nLWV4dGVkCW5ldGJlYW5zLnR4dAkvKm9idGFpbmluZy1leHRlZCoKK29jYW1sLXN5bnRheAlzeW50YXgudHh0CS8qb2NhbWwtc3ludGF4Kgorb2NhbWwudmltCXN5bnRheC50eHQJLypvY2FtbC52aW0qCitvbGUtYWN0aXZhdGlvbglpZl9vbGUudHh0CS8qb2xlLWFjdGl2YXRpb24qCitvbGUtZXZhbAlpZl9vbGUudHh0CS8qb2xlLWV2YWwqCitvbGUtZ2V0aHduZAlpZl9vbGUudHh0CS8qb2xlLWdldGh3bmQqCitvbGUtaW50ZXJmYWNlCWlmX29sZS50eHQJLypvbGUtaW50ZXJmYWNlKgorb2xlLW1ldGhvZHMJaWZfb2xlLnR4dAkvKm9sZS1tZXRob2RzKgorb2xlLW5vcm1hbAlpZl9vbGUudHh0CS8qb2xlLW5vcm1hbCoKK29sZS1yZWdpc3RyYXRpb24JaWZfb2xlLnR4dAkvKm9sZS1yZWdpc3RyYXRpb24qCitvbGUtc2VuZGtleXMJaWZfb2xlLnR4dAkvKm9sZS1zZW5ka2V5cyoKK29sZS1zZXRmb3JlZ3JvdW5kCWlmX29sZS50eHQJLypvbGUtc2V0Zm9yZWdyb3VuZCoKK29ubGluZS1oZWxwCXZhcmlvdXMudHh0CS8qb25saW5lLWhlbHAqCitvcGVuaW5nLXdpbmRvdwl3aW5kb3dzLnR4dAkvKm9wZW5pbmctd2luZG93Kgorb3BlcmF0b3IJbW90aW9uLnR4dAkvKm9wZXJhdG9yKgorb3B0aW9uLWJhY2tzbGFzaAlvcHRpb25zLnR4dAkvKm9wdGlvbi1iYWNrc2xhc2gqCitvcHRpb24tbGlzdAlxdWlja3JlZi50eHQJLypvcHRpb24tbGlzdCoKK29wdGlvbi1zdW1tYXJ5CW9wdGlvbnMudHh0CS8qb3B0aW9uLXN1bW1hcnkqCitvcHRpb25zCW9wdGlvbnMudHh0CS8qb3B0aW9ucyoKK29wdGlvbnMtY2hhbmdlZAl2ZXJzaW9uNS50eHQJLypvcHRpb25zLWNoYW5nZWQqCitvcHRpb25zLnR4dAlvcHRpb25zLnR4dAkvKm9wdGlvbnMudHh0Kgorb3MyCW9zX29zMi50eHQJLypvczIqCitvczJhbnNpCW9zX29zMi50eHQJLypvczJhbnNpKgorb3MzOTAJb3NfMzkwLnR4dAkvKm9zMzkwKgorb3NfMzkwLnR4dAlvc18zOTAudHh0CS8qb3NfMzkwLnR4dCoKK29zX2FtaWdhLnR4dAlvc19hbWlnYS50eHQJLypvc19hbWlnYS50eHQqCitvc19iZW9zLnR4dAlvc19iZW9zLnR4dAkvKm9zX2Jlb3MudHh0Kgorb3NfZG9zLnR4dAlvc19kb3MudHh0CS8qb3NfZG9zLnR4dCoKK29zX21hYy50eHQJb3NfbWFjLnR4dAkvKm9zX21hYy50eHQqCitvc19taW50LnR4dAlvc19taW50LnR4dAkvKm9zX21pbnQudHh0Kgorb3NfbXNkb3MudHh0CW9zX21zZG9zLnR4dAkvKm9zX21zZG9zLnR4dCoKK29zX29zMi50eHQJb3Nfb3MyLnR4dAkvKm9zX29zMi50eHQqCitvc19xbngudHh0CW9zX3FueC50eHQJLypvc19xbngudHh0Kgorb3NfcmlzYy50eHQJb3NfcmlzYy50eHQJLypvc19yaXNjLnR4dCoKK29zX3VuaXgudHh0CW9zX3VuaXgudHh0CS8qb3NfdW5peC50eHQqCitvc192bXMudHh0CW9zX3Ztcy50eHQJLypvc192bXMudHh0Kgorb3Nfd2luMzIudHh0CW9zX3dpbjMyLnR4dAkvKm9zX3dpbjMyLnR4dCoKK290aGVyLWZlYXR1cmVzCXZpX2RpZmYudHh0CS8qb3RoZXItZmVhdHVyZXMqCitwCWNoYW5nZS50eHQJLypwKgorcGFnZS1kb3duCWludHJvLnR4dAkvKnBhZ2UtZG93bioKK3BhZ2UtdXAJaW50cm8udHh0CS8qcGFnZS11cCoKK3BhZ2VfZG93bglpbnRyby50eHQJLypwYWdlX2Rvd24qCitwYWdlX3VwCWludHJvLnR4dAkvKnBhZ2VfdXAqCitwYWdlcgltZXNzYWdlLnR4dAkvKnBhZ2VyKgorcGFwcC1zeW50YXgJc3ludGF4LnR4dAkvKnBhcHAtc3ludGF4KgorcGFwcC52aW0Jc3ludGF4LnR4dAkvKnBhcHAudmltKgorcGFyYWdyYXBoCW1vdGlvbi50eHQJLypwYXJhZ3JhcGgqCitwYXNjYWwtc3ludGF4CXN5bnRheC50eHQJLypwYXNjYWwtc3ludGF4KgorcGFzY2FsLnZpbQlzeW50YXgudHh0CS8qcGFzY2FsLnZpbSoKK3BhdHRlcm4JcGF0dGVybi50eHQJLypwYXR0ZXJuKgorcGF0dGVybi1hdG9tcwlwYXR0ZXJuLnR4dAkvKnBhdHRlcm4tYXRvbXMqCitwYXR0ZXJuLW11bHRpLWJ5dGUJcGF0dGVybi50eHQJLypwYXR0ZXJuLW11bHRpLWJ5dGUqCitwYXR0ZXJuLW11bHRpLWl0ZW1zCXBhdHRlcm4udHh0CS8qcGF0dGVybi1tdWx0aS1pdGVtcyoKK3BhdHRlcm4tb3ZlcnZpZXcJcGF0dGVybi50eHQJLypwYXR0ZXJuLW92ZXJ2aWV3KgorcGF0dGVybi1zZWFyY2hlcwlwYXR0ZXJuLnR4dAkvKnBhdHRlcm4tc2VhcmNoZXMqCitwYXR0ZXJuLnR4dAlwYXR0ZXJuLnR4dAkvKnBhdHRlcm4udHh0KgorcGVybAlpZl9wZXJsLnR4dAkvKnBlcmwqCitwZXJsLUFwcGVuZAlpZl9wZXJsLnR4dAkvKnBlcmwtQXBwZW5kKgorcGVybC1CdWZmZXIJaWZfcGVybC50eHQJLypwZXJsLUJ1ZmZlcioKK3BlcmwtQnVmZmVycwlpZl9wZXJsLnR4dAkvKnBlcmwtQnVmZmVycyoKK3BlcmwtQ291bnQJaWZfcGVybC50eHQJLypwZXJsLUNvdW50KgorcGVybC1EZWxldGUJaWZfcGVybC50eHQJLypwZXJsLURlbGV0ZSoKK3BlcmwtRG9Db21tYW5kCWlmX3BlcmwudHh0CS8qcGVybC1Eb0NvbW1hbmQqCitwZXJsLUV2YWwJaWZfcGVybC50eHQJLypwZXJsLUV2YWwqCitwZXJsLUdldAlpZl9wZXJsLnR4dAkvKnBlcmwtR2V0KgorcGVybC1HZXRDdXJzb3IJaWZfcGVybC50eHQJLypwZXJsLUdldEN1cnNvcioKK3BlcmwtTXNnCWlmX3BlcmwudHh0CS8qcGVybC1Nc2cqCitwZXJsLU5hbWUJaWZfcGVybC50eHQJLypwZXJsLU5hbWUqCitwZXJsLU51bWJlcglpZl9wZXJsLnR4dAkvKnBlcmwtTnVtYmVyKgorcGVybC1TZXQJaWZfcGVybC50eHQJLypwZXJsLVNldCoKK3BlcmwtU2V0SGVpZ2h0CWlmX3BlcmwudHh0CS8qcGVybC1TZXRIZWlnaHQqCitwZXJsLVNldE9wdGlvbglpZl9wZXJsLnR4dAkvKnBlcmwtU2V0T3B0aW9uKgorcGVybC1XaW5kb3dzCWlmX3BlcmwudHh0CS8qcGVybC1XaW5kb3dzKgorcGVybC1jb21waWxpbmcJaWZfcGVybC50eHQJLypwZXJsLWNvbXBpbGluZyoKK3BlcmwtZWRpdGluZwlpZl9wZXJsLnR4dAkvKnBlcmwtZWRpdGluZyoKK3Blcmwtb3ZlcnZpZXcJaWZfcGVybC50eHQJLypwZXJsLW92ZXJ2aWV3KgorcGVybC1wYXR0ZXJucwlwYXR0ZXJuLnR4dAkvKnBlcmwtcGF0dGVybnMqCitwZXJsLXN5bnRheAlzeW50YXgudHh0CS8qcGVybC1zeW50YXgqCitwZXJsLXVzaW5nCWlmX3BlcmwudHh0CS8qcGVybC11c2luZyoKK3BlcmwudmltCXN5bnRheC50eHQJLypwZXJsLnZpbSoKK3Bob3Rvbi1mb250cwlvc19xbngudHh0CS8qcGhvdG9uLWZvbnRzKgorcGhvdG9uLWd1aQlvc19xbngudHh0CS8qcGhvdG9uLWd1aSoKK3BocC1zeW50YXgJc3ludGF4LnR4dAkvKnBocC1zeW50YXgqCitwaHAudmltCXN5bnRheC50eHQJLypwaHAudmltKgorcGhwMy1zeW50YXgJc3ludGF4LnR4dAkvKnBocDMtc3ludGF4KgorcGhwMy52aW0Jc3ludGF4LnR4dAkvKnBocDMudmltKgorcGh0bWwtc3ludGF4CXN5bnRheC50eHQJLypwaHRtbC1zeW50YXgqCitwaHRtbC52aW0Jc3ludGF4LnR4dAkvKnBodG1sLnZpbSoKK3BpX2V4cGwudHh0CXBpX2V4cGwudHh0CS8qcGlfZXhwbC50eHQqCitwaV9nemlwLnR4dAlwaV9nemlwLnR4dAkvKnBpX2d6aXAudHh0KgorcGlfbmV0cncudHh0CXBpX25ldHJ3LnR4dAkvKnBpX25ldHJ3LnR4dCoKK3BpX3NwZWMudHh0CXBpX3NwZWMudHh0CS8qcGlfc3BlYy50eHQqCitwbHVnaW4JdXNyXzA1LnR4dAkvKnBsdWdpbioKK3BsdWdpbi1kZXRhaWxzCWZpbGV0eXBlLnR4dAkvKnBsdWdpbi1kZXRhaWxzKgorcGx1Z2luLWZpbGV0eXBlCXVzcl80MS50eHQJLypwbHVnaW4tZmlsZXR5cGUqCitwbHVnaW4tc3BlY2lhbAl1c3JfNDEudHh0CS8qcGx1Z2luLXNwZWNpYWwqCitwb3B1cC1tZW51CWd1aS50eHQJLypwb3B1cC1tZW51KgorcG9wdXAtbWVudS1hZGRlZAl2ZXJzaW9uNS50eHQJLypwb3B1cC1tZW51LWFkZGVkKgorcG9ydHMtNS4yCXZlcnNpb241LnR4dAkvKnBvcnRzLTUuMioKK3BvcnRzLTYJdmVyc2lvbjYudHh0CS8qcG9ydHMtNioKK3Bvc3RzY3Itc3ludGF4CXN5bnRheC50eHQJLypwb3N0c2NyLXN5bnRheCoKK3Bvc3RzY3IudmltCXN5bnRheC50eHQJLypwb3N0c2NyLnZpbSoKK3Bvc3RzY3JpcHQtcHJpbnQtZW5jb2RpbmcJdmFyaW91cy50eHQJLypwb3N0c2NyaXB0LXByaW50LWVuY29kaW5nKgorcG9zdHNjcmlwdC1wcmludC10cm91YmxlCXZhcmlvdXMudHh0CS8qcG9zdHNjcmlwdC1wcmludC10cm91YmxlKgorcG9zdHNjcmlwdC1wcmludC11dGlsCXZhcmlvdXMudHh0CS8qcG9zdHNjcmlwdC1wcmludC11dGlsKgorcG9zdHNjcmlwdC1wcmludGluZwl2YXJpb3VzLnR4dAkvKnBvc3RzY3JpcHQtcHJpbnRpbmcqCitwcHdpei1zeW50YXgJc3ludGF4LnR4dAkvKnBwd2l6LXN5bnRheCoKK3Bwd2l6LnZpbQlzeW50YXgudHh0CS8qcHB3aXoudmltKgorcHJlc3MtZW50ZXIJbWVzc2FnZS50eHQJLypwcmVzcy1lbnRlcioKK3ByZXNzLXJldHVybgltZXNzYWdlLnR4dAkvKnByZXNzLXJldHVybioKK3ByZXZjb3VudC12YXJpYWJsZQlldmFsLnR4dAkvKnByZXZjb3VudC12YXJpYWJsZSoKK3ByZXZpZXctd2luZG93CXdpbmRvd3MudHh0CS8qcHJldmlldy13aW5kb3cqCitwcmV2bm9uYmxhbmsoKQlldmFsLnR4dAkvKnByZXZub25ibGFuaygpKgorcHJpbnRjYXAtc3ludGF4CXN5bnRheC50eHQJLypwcmludGNhcC1zeW50YXgqCitwcmludGluZwl2YXJpb3VzLnR4dAkvKnByaW50aW5nKgorcHJpbnRpbmctZm9ybWZlZWQJdmFyaW91cy50eHQJLypwcmludGluZy1mb3JtZmVlZCoKK3Byb2duYW1lLXZhcmlhYmxlCWV2YWwudHh0CS8qcHJvZ25hbWUtdmFyaWFibGUqCitwcm9ncmVzcy1zeW50YXgJc3ludGF4LnR4dAkvKnByb2dyZXNzLXN5bnRheCoKK3Byb2dyZXNzLnZpbQlzeW50YXgudHh0CS8qcHJvZ3Jlc3MudmltKgorcHRjYXAtc3ludGF4CXN5bnRheC50eHQJLypwdGNhcC1zeW50YXgqCitwdGNhcC52aW0Jc3ludGF4LnR4dAkvKnB0Y2FwLnZpbSoKK3B0ZXJtLW1vdXNlCW9wdGlvbnMudHh0CS8qcHRlcm0tbW91c2UqCitwdXQJY2hhbmdlLnR4dAkvKnB1dCoKK3B1dC1WaXN1YWwtbW9kZQljaGFuZ2UudHh0CS8qcHV0LVZpc3VhbC1tb2RlKgorcHl0aG9uCWlmX3B5dGgudHh0CS8qcHl0aG9uKgorcHl0aG9uLWJ1ZmZlcglpZl9weXRoLnR4dAkvKnB5dGhvbi1idWZmZXIqCitweXRob24tYnVmZmVycwlpZl9weXRoLnR4dAkvKnB5dGhvbi1idWZmZXJzKgorcHl0aG9uLWNvbW1hbmQJaWZfcHl0aC50eHQJLypweXRob24tY29tbWFuZCoKK3B5dGhvbi1jb21tYW5kcwlpZl9weXRoLnR4dAkvKnB5dGhvbi1jb21tYW5kcyoKK3B5dGhvbi1jdXJyZW50CWlmX3B5dGgudHh0CS8qcHl0aG9uLWN1cnJlbnQqCitweXRob24tZXJyb3IJaWZfcHl0aC50eHQJLypweXRob24tZXJyb3IqCitweXRob24tZXZhbAlpZl9weXRoLnR4dAkvKnB5dGhvbi1ldmFsKgorcHl0aG9uLWV4YW1wbGVzCWlmX3B5dGgudHh0CS8qcHl0aG9uLWV4YW1wbGVzKgorcHl0aG9uLWlucHV0CWlmX3B5dGgudHh0CS8qcHl0aG9uLWlucHV0KgorcHl0aG9uLW91dHB1dAlpZl9weXRoLnR4dAkvKnB5dGhvbi1vdXRwdXQqCitweXRob24tcmFuZ2UJaWZfcHl0aC50eHQJLypweXRob24tcmFuZ2UqCitweXRob24tc3ludGF4CXN5bnRheC50eHQJLypweXRob24tc3ludGF4KgorcHl0aG9uLXZpbQlpZl9weXRoLnR4dAkvKnB5dGhvbi12aW0qCitweXRob24td2luZG93CWlmX3B5dGgudHh0CS8qcHl0aG9uLXdpbmRvdyoKK3B5dGhvbi13aW5kb3dzCWlmX3B5dGgudHh0CS8qcHl0aG9uLXdpbmRvd3MqCitweXRob24udmltCXN5bnRheC50eHQJLypweXRob24udmltKgorcQlyZXBlYXQudHh0CS8qcSoKK3EvCWNtZGxpbmUudHh0CS8qcVwvKgorcToJY21kbGluZS50eHQJLypxOioKK3E/CWNtZGxpbmUudHh0CS8qcT8qCitxbngJb3NfcW54LnR4dAkvKnFueCoKK3FueC1jb21waWxpbmcJb3NfcW54LnR4dAkvKnFueC1jb21waWxpbmcqCitxbngtZ2VuZXJhbAlvc19xbngudHh0CS8qcW54LWdlbmVyYWwqCitxbngtdGVybWluYWwJb3NfcW54LnR4dAkvKnFueC10ZXJtaW5hbCoKK3F1YWtlLXN5bnRheAlzeW50YXgudHh0CS8qcXVha2Utc3ludGF4KgorcXVha2UudmltCXN5bnRheC50eHQJLypxdWFrZS52aW0qCitxdWlja2ZpeAlxdWlja2ZpeC50eHQJLypxdWlja2ZpeCoKK3F1aWNrZml4LTYJdmVyc2lvbjYudHh0CS8qcXVpY2tmaXgtNioKK3F1aWNrZml4LWRpcmVjdG9yeS1zdGFjawlxdWlja2ZpeC50eHQJLypxdWlja2ZpeC1kaXJlY3Rvcnktc3RhY2sqCitxdWlja2ZpeC1lcnJvci1saXN0cwlxdWlja2ZpeC50eHQJLypxdWlja2ZpeC1lcnJvci1saXN0cyoKK3F1aWNrZml4LW1hbngJcXVpY2tmaXgudHh0CS8qcXVpY2tmaXgtbWFueCoKK3F1aWNrZml4LXZhbGlkCXF1aWNrZml4LnR4dAkvKnF1aWNrZml4LXZhbGlkKgorcXVpY2tmaXgtd2luZG93CXF1aWNrZml4LnR4dAkvKnF1aWNrZml4LXdpbmRvdyoKK3F1aWNrZml4LnR4dAlxdWlja2ZpeC50eHQJLypxdWlja2ZpeC50eHQqCitxdWlja3JlZglxdWlja3JlZi50eHQJLypxdWlja3JlZioKK3F1aWNrcmVmLnR4dAlxdWlja3JlZi50eHQJLypxdWlja3JlZi50eHQqCitxdW90ZQljaGFuZ2UudHh0CS8qcXVvdGUqCitxdW90ZSMJY2hhbmdlLnR4dAkvKnF1b3RlIyoKK3F1b3RlJQljaGFuZ2UudHh0CS8qcXVvdGUlKgorcXVvdGUrCWd1aV94MTEudHh0CS8qcXVvdGUrKgorcXVvdGUtCWNoYW5nZS50eHQJLypxdW90ZS0qCitxdW90ZS4JY2hhbmdlLnR4dAkvKnF1b3RlLioKK3F1b3RlLwljaGFuZ2UudHh0CS8qcXVvdGVcLyoKK3F1b3RlMAljaGFuZ2UudHh0CS8qcXVvdGUwKgorcXVvdGUxCWNoYW5nZS50eHQJLypxdW90ZTEqCitxdW90ZTIJY2hhbmdlLnR4dAkvKnF1b3RlMioKK3F1b3RlMwljaGFuZ2UudHh0CS8qcXVvdGUzKgorcXVvdGU0CWNoYW5nZS50eHQJLypxdW90ZTQqCitxdW90ZTkJY2hhbmdlLnR4dAkvKnF1b3RlOSoKK3F1b3RlOgljaGFuZ2UudHh0CS8qcXVvdGU6KgorcXVvdGU9CWNoYW5nZS50eHQJLypxdW90ZT0qCitxdW90ZV8JY2hhbmdlLnR4dAkvKnF1b3RlXyoKK3F1b3RlXyMJY2hhbmdlLnR4dAkvKnF1b3RlXyMqCitxdW90ZV8lCWNoYW5nZS50eHQJLypxdW90ZV8lKgorcXVvdGVfLQljaGFuZ2UudHh0CS8qcXVvdGVfLSoKK3F1b3RlXy4JY2hhbmdlLnR4dAkvKnF1b3RlXy4qCitxdW90ZV8vCWNoYW5nZS50eHQJLypxdW90ZV9cLyoKK3F1b3RlXzoJY2hhbmdlLnR4dAkvKnF1b3RlXzoqCitxdW90ZV89CWNoYW5nZS50eHQJLypxdW90ZV89KgorcXVvdGVfYWxwaGEJY2hhbmdlLnR4dAkvKnF1b3RlX2FscGhhKgorcXVvdGVfbnVtYmVyCWNoYW5nZS50eHQJLypxdW90ZV9udW1iZXIqCitxdW90ZV9xdW90ZQljaGFuZ2UudHh0CS8qcXVvdGVfcXVvdGUqCitxdW90ZV9+CWNoYW5nZS50eHQJLypxdW90ZV9+KgorcXVvdGVhCWNoYW5nZS50eHQJLypxdW90ZWEqCitxdW90ZWNvbW1hbmRxdW90ZQlpbnRyby50eHQJLypxdW90ZWNvbW1hbmRxdW90ZSoKK3F1b3RlcGx1cwlndWlfeDExLnR4dAkvKnF1b3RlcGx1cyoKK3F1b3RlcXVvdGUJY2hhbmdlLnR4dAkvKnF1b3RlcXVvdGUqCitxdW90ZXMJcXVvdGVzLnR4dAkvKnF1b3RlcyoKK3F1b3Rlcy50eHQJcXVvdGVzLnR4dAkvKnF1b3Rlcy50eHQqCitxdW90ZXN0YXIJZ3VpLnR4dAkvKnF1b3Rlc3RhcioKK3F1b3RlfgljaGFuZ2UudHh0CS8qcXVvdGV+KgorcgljaGFuZ2UudHh0CS8qcioKK3Jhdy10ZXJtaW5hbC1tb2RlCXRlcm0udHh0CS8qcmF3LXRlcm1pbmFsLW1vZGUqCityY3AJcGlfbmV0cncudHh0CS8qcmNwKgorcmVhZC1tZXNzYWdlcwlpbnNlcnQudHh0CS8qcmVhZC1tZXNzYWdlcyoKK3JlYWQtb25seS1zaGFyZQllZGl0aW5nLnR4dAkvKnJlYWQtb25seS1zaGFyZSoKK3JlYWQtc3RkaW4JdmVyc2lvbjUudHh0CS8qcmVhZC1zdGRpbioKK3JlYWRsaW5lLXN5bnRheAlzeW50YXgudHh0CS8qcmVhZGxpbmUtc3ludGF4KgorcmVhZGxpbmUudmltCXN5bnRheC50eHQJLypyZWFkbGluZS52aW0qCityZWNvcmRpbmcJcmVwZWF0LnR4dAkvKnJlY29yZGluZyoKK3JlY292ZXIudHh0CXJlY292ZXIudHh0CS8qcmVjb3Zlci50eHQqCityZWNvdmVyeQlyZWNvdmVyLnR4dAkvKnJlY292ZXJ5KgorcmVjdXJzaXZlX21hcHBpbmcJbWFwLnR4dAkvKnJlY3Vyc2l2ZV9tYXBwaW5nKgorcmVkbwl1bmRvLnR4dAkvKnJlZG8qCityZWRvLXJlZ2lzdGVyCXVuZG8udHh0CS8qcmVkby1yZWdpc3RlcioKK3JlZglpbnRyby50eHQJLypyZWYqCityZWZlcmVuY2UJaW50cm8udHh0CS8qcmVmZXJlbmNlKgorcmVnZXhwCXBhdHRlcm4udHh0CS8qcmVnZXhwKgorcmVnZXhwLWNoYW5nZXMtNS40CXZlcnNpb241LnR4dAkvKnJlZ2V4cC1jaGFuZ2VzLTUuNCoKK3JlZ2lzdGVyCXNwb25zb3IudHh0CS8qcmVnaXN0ZXIqCityZWdpc3Rlci1mYXEJc3BvbnNvci50eHQJLypyZWdpc3Rlci1mYXEqCityZWdpc3Rlci12YXJpYWJsZQlldmFsLnR4dAkvKnJlZ2lzdGVyLXZhcmlhYmxlKgorcmVnaXN0ZXJzCWNoYW5nZS50eHQJLypyZWdpc3RlcnMqCityZWd1bGFyLWV4cHJlc3Npb24JcGF0dGVybi50eHQJLypyZWd1bGFyLWV4cHJlc3Npb24qCityZW1vdGUudHh0CXJlbW90ZS50eHQJLypyZW1vdGUudHh0KgorcmVtb3RlX2V4cHIoKQlldmFsLnR4dAkvKnJlbW90ZV9leHByKCkqCityZW1vdGVfZm9yZWdyb3VuZCgpCWV2YWwudHh0CS8qcmVtb3RlX2ZvcmVncm91bmQoKSoKK3JlbW90ZV9wZWVrKCkJZXZhbC50eHQJLypyZW1vdGVfcGVlaygpKgorcmVtb3RlX3JlYWQoKQlldmFsLnR4dAkvKnJlbW90ZV9yZWFkKCkqCityZW1vdGVfc2VuZCgpCWV2YWwudHh0CS8qcmVtb3RlX3NlbmQoKSoKK3JlbW92ZS1maWxldHlwZQlmaWxldHlwZS50eHQJLypyZW1vdmUtZmlsZXR5cGUqCityZW1vdmUtb3B0aW9uLWZsYWdzCW9wdGlvbnMudHh0CS8qcmVtb3ZlLW9wdGlvbi1mbGFncyoKK3JlbmFtZSgpCWV2YWwudHh0CS8qcmVuYW1lKCkqCityZW5hbWUtZmlsZXMJdGlwcy50eHQJLypyZW5hbWUtZmlsZXMqCityZXBlYXQudHh0CXJlcGVhdC50eHQJLypyZXBlYXQudHh0KgorcmVwZWF0aW5nCXJlcGVhdC50eHQJLypyZXBlYXRpbmcqCityZXBsYWNpbmcJY2hhbmdlLnR4dAkvKnJlcGxhY2luZyoKK3Jlc29sdmUoKQlldmFsLnR4dAkvKnJlc29sdmUoKSoKK3Jlc3RvcmUtcG9zaXRpb24JdGlwcy50eHQJLypyZXN0b3JlLXBvc2l0aW9uKgorcmVzdHJpY3RlZC1tb2RlCXN0YXJ0aW5nLnR4dAkvKnJlc3RyaWN0ZWQtbW9kZSoKK3JldGFiLWV4YW1wbGUJY2hhbmdlLnR4dAkvKnJldGFiLWV4YW1wbGUqCityZXRocm93CWV2YWwudHh0CS8qcmV0aHJvdyoKK3JleHgtc3ludGF4CXN5bnRheC50eHQJLypyZXh4LXN5bnRheCoKK3JleHgudmltCXN5bnRheC50eHQJLypyZXh4LnZpbSoKK3JnYi50eHQJZ3VpX3czMi50eHQJLypyZ2IudHh0Kgorcmd2aWV3CXN0YXJ0aW5nLnR4dAkvKnJndmlldyoKK3JndmltCXN0YXJ0aW5nLnR4dAkvKnJndmltKgorcmlnaHQtanVzdGlmeQljaGFuZ2UudHh0CS8qcmlnaHQtanVzdGlmeSoKK3JpbGVmdAlyaWxlZnQudHh0CS8qcmlsZWZ0KgorcmlsZWZ0LnR4dAlyaWxlZnQudHh0CS8qcmlsZWZ0LnR4dCoKK3Jpc2Nvcwlvc19yaXNjLnR4dAkvKnJpc2NvcyoKK3Jpc2Nvcy1jb21tYW5kbGluZQlvc19yaXNjLnR4dAkvKnJpc2Nvcy1jb21tYW5kbGluZSoKK3Jpc2Nvcy1maWxldHlwZXMJb3NfcmlzYy50eHQJLypyaXNjb3MtZmlsZXR5cGVzKgorcmlzY29zLWd1aQlvc19yaXNjLnR4dAkvKnJpc2Nvcy1ndWkqCityaXNjb3MtaW50ZXJydXB0CW9zX3Jpc2MudHh0CS8qcmlzY29zLWludGVycnVwdCoKK3Jpc2Nvcy1sb2NhdGlvbnMJb3NfcmlzYy50eHQJLypyaXNjb3MtbG9jYXRpb25zKgorcmlzY29zLW1lbW9yeQlvc19yaXNjLnR4dAkvKnJpc2Nvcy1tZW1vcnkqCityaXNjb3MtbXVuZ2luZwlvc19yaXNjLnR4dAkvKnJpc2Nvcy1tdW5naW5nKgorcmlzY29zLXBvcnRpbmcJb3NfcmlzYy50eHQJLypyaXNjb3MtcG9ydGluZyoKK3Jpc2Nvcy1yZW1vdGUJb3NfcmlzYy50eHQJLypyaXNjb3MtcmVtb3RlKgorcmlzY29zLXNoZWxsCW9zX3Jpc2MudHh0CS8qcmlzY29zLXNoZWxsKgorcmlzY29zLXRlbXAtZmlsZXMJb3NfcmlzYy50eHQJLypyaXNjb3MtdGVtcC1maWxlcyoKK3JvdDEzCWNoYW5nZS50eHQJLypyb3QxMyoKK3JzeW5jCXBpX25ldHJ3LnR4dAkvKnJzeW5jKgorcnVieQlpZl9ydWJ5LnR4dAkvKnJ1YnkqCitydWJ5LWJ1ZmZlcglpZl9ydWJ5LnR4dAkvKnJ1YnktYnVmZmVyKgorcnVieS1jb21tYW5kCWlmX3J1YnkudHh0CS8qcnVieS1jb21tYW5kKgorcnVieS1jb21tYW5kcwlpZl9ydWJ5LnR4dAkvKnJ1YnktY29tbWFuZHMqCitydWJ5LWV2YWx1YXRlCWlmX3J1YnkudHh0CS8qcnVieS1ldmFsdWF0ZSoKK3J1YnktZ2xvYmFscwlpZl9ydWJ5LnR4dAkvKnJ1YnktZ2xvYmFscyoKK3J1YnktbWVzc2FnZQlpZl9ydWJ5LnR4dAkvKnJ1YnktbWVzc2FnZSoKK3J1Ynktc2V0X29wdGlvbglpZl9ydWJ5LnR4dAkvKnJ1Ynktc2V0X29wdGlvbioKK3J1Ynktc3ludGF4CXN5bnRheC50eHQJLypydWJ5LXN5bnRheCoKK3J1YnktdmltCWlmX3J1YnkudHh0CS8qcnVieS12aW0qCitydWJ5LXdpbmRvdwlpZl9ydWJ5LnR4dAkvKnJ1Ynktd2luZG93KgorcnVieS52aW0Jc3ludGF4LnR4dAkvKnJ1YnkudmltKgorcnVzc2lhbglydXNzaWFuLnR4dAkvKnJ1c3NpYW4qCitydXNzaWFuLWludHJvCXJ1c3NpYW4udHh0CS8qcnVzc2lhbi1pbnRybyoKK3J1c3NpYW4taXNzdWVzCXJ1c3NpYW4udHh0CS8qcnVzc2lhbi1pc3N1ZXMqCitydXNzaWFuLWtleW1hcAlydXNzaWFuLnR4dAkvKnJ1c3NpYW4ta2V5bWFwKgorcnVzc2lhbi1sMThuCXJ1c3NpYW4udHh0CS8qcnVzc2lhbi1sMThuKgorcnVzc2lhbi50eHQJcnVzc2lhbi50eHQJLypydXNzaWFuLnR4dCoKK3J2aWV3CXN0YXJ0aW5nLnR4dAkvKnJ2aWV3KgorcnZpbQlzdGFydGluZy50eHQJLypydmltKgorcnh2dAlzeW50YXgudHh0CS8qcnh2dCoKK3MJY2hhbmdlLnR4dAkvKnMqCitzL1wmCWNoYW5nZS50eHQJLypzXC9cXCYqCitzL1wwCWNoYW5nZS50eHQJLypzXC9cXDAqCitzL1wxCWNoYW5nZS50eHQJLypzXC9cXDEqCitzL1wyCWNoYW5nZS50eHQJLypzXC9cXDIqCitzL1wzCWNoYW5nZS50eHQJLypzXC9cXDMqCitzL1w5CWNoYW5nZS50eHQJLypzXC9cXDkqCitzL1w8Q1I+CWNoYW5nZS50eHQJLypzXC9cXDxDUj4qCitzL1xFCWNoYW5nZS50eHQJLypzXC9cXEUqCitzL1xMCWNoYW5nZS50eHQJLypzXC9cXEwqCitzL1xVCWNoYW5nZS50eHQJLypzXC9cXFUqCitzL1xcCWNoYW5nZS50eHQJLypzXC9cXFxcKgorcy9cYgljaGFuZ2UudHh0CS8qc1wvXFxiKgorcy9cZQljaGFuZ2UudHh0CS8qc1wvXFxlKgorcy9cbAljaGFuZ2UudHh0CS8qc1wvXFxsKgorcy9cbgljaGFuZ2UudHh0CS8qc1wvXFxuKgorcy9ccgljaGFuZ2UudHh0CS8qc1wvXFxyKgorcy9cdAljaGFuZ2UudHh0CS8qc1wvXFx0Kgorcy9cdQljaGFuZ2UudHh0CS8qc1wvXFx1Kgorcy9cfgljaGFuZ2UudHh0CS8qc1wvXFx+Kgorczp2YXIJZXZhbC50eHQJLypzOnZhcioKK3M8Q1I+CWNoYW5nZS50eHQJLypzPENSPioKK3NhbmRib3gJZXZhbC50eHQJLypzYW5kYm94Kgorc2F2ZS1maWxlCWVkaXRpbmcudHh0CS8qc2F2ZS1maWxlKgorc2F2ZS1zZXR0aW5ncwlzdGFydGluZy50eHQJLypzYXZlLXNldHRpbmdzKgorc2NwCXBpX25ldHJ3LnR4dAkvKnNjcCoKK3NjcmlwdC1oZXJlCWlmX3BlcmwudHh0CS8qc2NyaXB0LWhlcmUqCitzY3JpcHQtbG9jYWwJbWFwLnR4dAkvKnNjcmlwdC1sb2NhbCoKK3NjcmlwdC12YXJpYWJsZQlldmFsLnR4dAkvKnNjcmlwdC12YXJpYWJsZSoKK3NjcmlwdG91dC1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKnNjcmlwdG91dC1jaGFuZ2VkKgorc2Nyb2xsLWJpbmRpbmcJc2Nyb2xsLnR4dAkvKnNjcm9sbC1iaW5kaW5nKgorc2Nyb2xsLWN1cnNvcglzY3JvbGwudHh0CS8qc2Nyb2xsLWN1cnNvcioKK3Njcm9sbC1kb3duCXNjcm9sbC50eHQJLypzY3JvbGwtZG93bioKK3Njcm9sbC1ob3Jpem9udGFsCXNjcm9sbC50eHQJLypzY3JvbGwtaG9yaXpvbnRhbCoKK3Njcm9sbC1pbnNlcnQJdGlwcy50eHQJLypzY3JvbGwtaW5zZXJ0Kgorc2Nyb2xsLW1vdXNlLXdoZWVsCXNjcm9sbC50eHQJLypzY3JvbGwtbW91c2Utd2hlZWwqCitzY3JvbGwtcmVnaW9uCXRlcm0udHh0CS8qc2Nyb2xsLXJlZ2lvbioKK3Njcm9sbC1zbW9vdGgJdGlwcy50eHQJLypzY3JvbGwtc21vb3RoKgorc2Nyb2xsLXVwCXNjcm9sbC50eHQJLypzY3JvbGwtdXAqCitzY3JvbGwudHh0CXNjcm9sbC50eHQJLypzY3JvbGwudHh0Kgorc2Nyb2xsYmluZC1xdWlja2FkaglzY3JvbGwudHh0CS8qc2Nyb2xsYmluZC1xdWlja2FkaioKK3Njcm9sbGJpbmQtcmVsYXRpdmUJc2Nyb2xsLnR4dAkvKnNjcm9sbGJpbmQtcmVsYXRpdmUqCitzY3JvbGxpbmcJc2Nyb2xsLnR4dAkvKnNjcm9sbGluZyoKK3NkbC1zeW50YXgJc3ludGF4LnR4dAkvKnNkbC1zeW50YXgqCitzZGwudmltCXN5bnRheC50eHQJLypzZGwudmltKgorc2VhcmNoKCkJZXZhbC50eHQJLypzZWFyY2goKSoKK3NlYXJjaC1jb21tYW5kcwlwYXR0ZXJuLnR4dAkvKnNlYXJjaC1jb21tYW5kcyoKK3NlYXJjaC1vZmZzZXQJcGF0dGVybi50eHQJLypzZWFyY2gtb2Zmc2V0Kgorc2VhcmNoLXBhdHRlcm4JcGF0dGVybi50eHQJLypzZWFyY2gtcGF0dGVybioKK3NlYXJjaC1yYW5nZQlwYXR0ZXJuLnR4dAkvKnNlYXJjaC1yYW5nZSoKK3NlYXJjaHBhaXIoKQlldmFsLnR4dAkvKnNlYXJjaHBhaXIoKSoKK3NlY3Rpb24JbW90aW9uLnR4dAkvKnNlY3Rpb24qCitzZWQtc3ludGF4CXN5bnRheC50eHQJLypzZWQtc3ludGF4Kgorc2VkLnZpbQlzeW50YXgudHh0CS8qc2VkLnZpbSoKK3NlbmQtbW9uZXkJc3BvbnNvci50eHQJLypzZW5kLW1vbmV5Kgorc2VuZC10by1tZW51CWd1aV93MzIudHh0CS8qc2VuZC10by1tZW51Kgorc2VuZHRvCWd1aV93MzIudHh0CS8qc2VuZHRvKgorc2VudGVuY2UJbW90aW9uLnR4dAkvKnNlbnRlbmNlKgorc2VydmVyMmNsaWVudCgpCWV2YWwudHh0CS8qc2VydmVyMmNsaWVudCgpKgorc2VydmVybGlzdCgpCWV2YWwudHh0CS8qc2VydmVybGlzdCgpKgorc2VydmVybmFtZS12YXJpYWJsZQlldmFsLnR4dAkvKnNlcnZlcm5hbWUtdmFyaWFibGUqCitzZXNzaW9uLWZpbGUJc3RhcnRpbmcudHh0CS8qc2Vzc2lvbi1maWxlKgorc2V0LW9wdGlvbglvcHRpb25zLnR4dAkvKnNldC1vcHRpb24qCitzZXRidWZ2YXIoKQlldmFsLnR4dAkvKnNldGJ1ZnZhcigpKgorc2V0Y21kcG9zKCkJZXZhbC50eHQJLypzZXRjbWRwb3MoKSoKK3NldGxpbmUoKQlldmFsLnR4dAkvKnNldGxpbmUoKSoKK3NldHJlZygpCWV2YWwudHh0CS8qc2V0cmVnKCkqCitzZXR3aW52YXIoKQlldmFsLnR4dAkvKnNldHdpbnZhcigpKgorc2Z0cAlwaV9uZXRydy50eHQJLypzZnRwKgorc2dtbC1zeW50YXgJc3ludGF4LnR4dAkvKnNnbWwtc3ludGF4Kgorc2dtbC52aW0Jc3ludGF4LnR4dAkvKnNnbWwudmltKgorc2gtc3ludGF4CXN5bnRheC50eHQJLypzaC1zeW50YXgqCitzaC52aW0Jc3ludGF4LnR4dAkvKnNoLnZpbSoKK3NoZWxsLXdpbmRvdwl0aXBzLnR4dAkvKnNoZWxsLXdpbmRvdyoKK3NoZWxsX2Vycm9yLXZhcmlhYmxlCWV2YWwudHh0CS8qc2hlbGxfZXJyb3ItdmFyaWFibGUqCitzaGlmdAlpbnRyby50eHQJLypzaGlmdCoKK3NoaWZ0LWxlZnQtcmlnaHQJY2hhbmdlLnR4dAkvKnNoaWZ0LWxlZnQtcmlnaHQqCitzaG9ydC1uYW1lLWNoYW5nZWQJdmVyc2lvbjQudHh0CS8qc2hvcnQtbmFtZS1jaGFuZ2VkKgorc2hvd2luZy1tZW51cwlndWkudHh0CS8qc2hvd2luZy1tZW51cyoKK3NpZ24tY29tbWFuZHMJc2lnbi50eHQJLypzaWduLWNvbW1hbmRzKgorc2lnbi1pbnRybwlzaWduLnR4dAkvKnNpZ24taW50cm8qCitzaWduLXN1cHBvcnQJc2lnbi50eHQJLypzaWduLXN1cHBvcnQqCitzaWduLnR4dAlzaWduLnR4dAkvKnNpZ24udHh0Kgorc2lnbnMJc2lnbi50eHQJLypzaWducyoKK3NpbXBsZS1jaGFuZ2UJY2hhbmdlLnR4dAkvKnNpbXBsZS1jaGFuZ2UqCitzaW1wbGlmeSgpCWV2YWwudHh0CS8qc2ltcGxpZnkoKSoKK3NpbmdsZS1yZXBlYXQJcmVwZWF0LnR4dAkvKnNpbmdsZS1yZXBlYXQqCitza2VsZXRvbglhdXRvY21kLnR4dAkvKnNrZWxldG9uKgorc2xvdy1mYXN0LXRlcm1pbmFsCXRlcm0udHh0CS8qc2xvdy1mYXN0LXRlcm1pbmFsKgorc2xvdy1zdGFydAlzdGFydGluZy50eHQJLypzbG93LXN0YXJ0Kgorc2xvdy10ZXJtaW5hbAl0ZXJtLnR4dAkvKnNsb3ctdGVybWluYWwqCitzbmlmZglpZl9zbmlmZi50eHQJLypzbmlmZioKK3NuaWZmLWNvbW1hbmRzCWlmX3NuaWZmLnR4dAkvKnNuaWZmLWNvbW1hbmRzKgorc25pZmYtY29tcGlsaW5nCWlmX3NuaWZmLnR4dAkvKnNuaWZmLWNvbXBpbGluZyoKK3NuaWZmLWludHJvCWlmX3NuaWZmLnR4dAkvKnNuaWZmLWludHJvKgorc3BhY2UJaW50cm8udHh0CS8qc3BhY2UqCitzcGVjLWN1c3RvbWl6aW5nCXBpX3NwZWMudHh0CS8qc3BlYy1jdXN0b21pemluZyoKK3NwZWMtaG93LXRvLXVzZS1pdAlwaV9zcGVjLnR4dAkvKnNwZWMtaG93LXRvLXVzZS1pdCoKK3NwZWMtcGx1Z2luCWZpbGV0eXBlLnR4dAkvKnNwZWMtcGx1Z2luKgorc3BlYy1zZXR0aW5nLWEtbWFwCXBpX3NwZWMudHh0CS8qc3BlYy1zZXR0aW5nLWEtbWFwKgorc3BlY19jaGdsb2dfZm9ybWF0CXBpX3NwZWMudHh0CS8qc3BlY19jaGdsb2dfZm9ybWF0Kgorc3BlY19jaGdsb2dfcHJlcGVuZAlwaV9zcGVjLnR4dAkvKnNwZWNfY2hnbG9nX3ByZXBlbmQqCitzcGVjX2NoZ2xvZ19yZWxlYXNlX2luZm8JcGlfc3BlYy50eHQJLypzcGVjX2NoZ2xvZ19yZWxlYXNlX2luZm8qCitzcGVjaWFsLWJ1ZmZlcnMJd2luZG93cy50eHQJLypzcGVjaWFsLWJ1ZmZlcnMqCitzcGVlZC11cAl0aXBzLnR4dAkvKnNwZWVkLXVwKgorc3BsaXRmaW5kCXdpbmRvd3MudHh0CS8qc3BsaXRmaW5kKgorc3BsaXR2aWV3CXdpbmRvd3MudHh0CS8qc3BsaXR2aWV3Kgorc3BvbnNvcglzcG9uc29yLnR4dAkvKnNwb25zb3IqCitzcG9uc29yLWZhcQlzcG9uc29yLnR4dAkvKnNwb25zb3ItZmFxKgorc3BvbnNvci50eHQJc3BvbnNvci50eHQJLypzcG9uc29yLnR4dCoKK3Nwb29uCW9zX3VuaXgudHh0CS8qc3Bvb24qCitzcHVwLXN5bnRheAlzeW50YXgudHh0CS8qc3B1cC1zeW50YXgqCitzcHVwLnZpbQlzeW50YXgudHh0CS8qc3B1cC52aW0qCitzc2NhbmYJZXZhbC50eHQJLypzc2NhbmYqCitzdGFuZGFyZC1wbHVnaW4JdXNyXzA1LnR4dAkvKnN0YW5kYXJkLXBsdWdpbioKK3N0YW5kYXJkLXBsdWdpbi1saXN0CWhlbHAudHh0CS8qc3RhbmRhcmQtcGx1Z2luLWxpc3QqCitzdGFyCXBhdHRlcm4udHh0CS8qc3RhcioKK3N0YXJ0LW9mLWZpbGUJcGF0dGVybi50eHQJLypzdGFydC1vZi1maWxlKgorc3RhcnRpbmcJc3RhcnRpbmcudHh0CS8qc3RhcnRpbmcqCitzdGFydGluZy1hbWlnYQlzdGFydGluZy50eHQJLypzdGFydGluZy1hbWlnYSoKK3N0YXJ0aW5nLnR4dAlzdGFydGluZy50eHQJLypzdGFydGluZy50eHQqCitzdGFydHVwCXN0YXJ0aW5nLnR4dAkvKnN0YXJ0dXAqCitzdGFydHVwLW9wdGlvbnMJc3RhcnRpbmcudHh0CS8qc3RhcnR1cC1vcHRpb25zKgorc3RhcnR1cC10ZXJtaW5hbAl0ZXJtLnR4dAkvKnN0YXJ0dXAtdGVybWluYWwqCitzdGF0aWMtdGFnCXRhZ3NyY2gudHh0CS8qc3RhdGljLXRhZyoKK3N0YXR1cy1saW5lCXdpbmRvd3MudHh0CS8qc3RhdHVzLWxpbmUqCitzdGF0dXNtc2ctdmFyaWFibGUJZXZhbC50eHQJLypzdGF0dXNtc2ctdmFyaWFibGUqCitzdHJmdGltZSgpCWV2YWwudHh0CS8qc3RyZnRpbWUoKSoKK3N0cmlkeCgpCWV2YWwudHh0CS8qc3RyaWR4KCkqCitzdHJpbmctbWF0Y2gJZXZhbC50eHQJLypzdHJpbmctbWF0Y2gqCitzdHJsZW4oKQlldmFsLnR4dAkvKnN0cmxlbigpKgorc3RycGFydCgpCWV2YWwudHh0CS8qc3RycGFydCgpKgorc3RycmlkeCgpCWV2YWwudHh0CS8qc3RycmlkeCgpKgorc3RydHJhbnMoKQlldmFsLnR4dAkvKnN0cnRyYW5zKCkqCitzdHlsZS1jaGFuZ2VzCWRldmVsb3AudHh0CS8qc3R5bGUtY2hhbmdlcyoKK3N0eWxlLWV4YW1wbGVzCWRldmVsb3AudHh0CS8qc3R5bGUtZXhhbXBsZXMqCitzdHlsZS1mdW5jdGlvbnMJZGV2ZWxvcC50eHQJLypzdHlsZS1mdW5jdGlvbnMqCitzdHlsZS1uYW1lcwlkZXZlbG9wLnR4dAkvKnN0eWxlLW5hbWVzKgorc3R5bGUtc3BhY2VzCWRldmVsb3AudHh0CS8qc3R5bGUtc3BhY2VzKgorc3R5bGUtdmFyaW91cwlkZXZlbG9wLnR4dAkvKnN0eWxlLXZhcmlvdXMqCitzdWItbWVudS1wcmlvcml0eQlndWkudHh0CS8qc3ViLW1lbnUtcHJpb3JpdHkqCitzdWItcmVwbGFjZS1leHByZXNzaW9uCWNoYW5nZS50eHQJLypzdWItcmVwbGFjZS1leHByZXNzaW9uKgorc3ViLXJlcGxhY2Utc3BlY2lhbAljaGFuZ2UudHh0CS8qc3ViLXJlcGxhY2Utc3BlY2lhbCoKK3N1Ym1hdGNoKCkJZXZhbC50eHQJLypzdWJtYXRjaCgpKgorc3Vic2NyaWJlLW1haWxsaXN0CWludHJvLnR4dAkvKnN1YnNjcmliZS1tYWlsbGlzdCoKK3N1YnN0aXR1dGUoKQlldmFsLnR4dAkvKnN1YnN0aXR1dGUoKSoKK3N1YnN0aXR1dGUtQ1IJdmVyc2lvbjYudHh0CS8qc3Vic3RpdHV0ZS1DUioKK3N1ZmZpeGVzCWNtZGxpbmUudHh0CS8qc3VmZml4ZXMqCitzdXNwZW5kCXN0YXJ0aW5nLnR4dAkvKnN1c3BlbmQqCitzd2FwLWZpbGUJcmVjb3Zlci50eHQJLypzd2FwLWZpbGUqCitzd2FwZmlsZS1jaGFuZ2VkCXZlcnNpb240LnR4dAkvKnN3YXBmaWxlLWNoYW5nZWQqCitzeW4tc3luYy1ncm91cGhlcmUJc3ludGF4LnR4dAkvKnN5bi1zeW5jLWdyb3VwaGVyZSoKK3N5bi1zeW5jLWdyb3VwdGhlcmUJc3ludGF4LnR4dAkvKnN5bi1zeW5jLWdyb3VwdGhlcmUqCitzeW5JRCgpCWV2YWwudHh0CS8qc3luSUQoKSoKK3N5bklEYXR0cigpCWV2YWwudHh0CS8qc3luSURhdHRyKCkqCitzeW5JRHRyYW5zKCkJZXZhbC50eHQJLypzeW5JRHRyYW5zKCkqCitzeW5jYmluZAlzY3JvbGwudHh0CS8qc3luY2JpbmQqCitzeW5jb2xvcglzeW50YXgudHh0CS8qc3luY29sb3IqCitzeW5sb2FkLTEJc3ludGF4LnR4dAkvKnN5bmxvYWQtMSoKK3N5bmxvYWQtMglzeW50YXgudHh0CS8qc3lubG9hZC0yKgorc3lubG9hZC0zCXN5bnRheC50eHQJLypzeW5sb2FkLTMqCitzeW5sb2FkLTQJc3ludGF4LnR4dAkvKnN5bmxvYWQtNCoKK3N5bmxvYWQtNQlzeW50YXgudHh0CS8qc3lubG9hZC01Kgorc3lubG9hZC02CXN5bnRheC50eHQJLypzeW5sb2FkLTYqCitzeW50YXgJc3ludGF4LnR4dAkvKnN5bnRheCoKK3N5bnRheC1oaWdobGlnaHRpbmcJc3ludGF4LnR4dAkvKnN5bnRheC1oaWdobGlnaHRpbmcqCitzeW50YXgtbG9hZGluZwlzeW50YXgudHh0CS8qc3ludGF4LWxvYWRpbmcqCitzeW50YXgtcHJpbnRpbmcJdXNyXzA2LnR4dAkvKnN5bnRheC1wcmludGluZyoKK3N5bnRheC50eHQJc3ludGF4LnR4dAkvKnN5bnRheC50eHQqCitzeW50YXhfY21kCXN5bnRheC50eHQJLypzeW50YXhfY21kKgorc3lzLWZpbGUtbGlzdAloZWxwLnR4dAkvKnN5cy1maWxlLWxpc3QqCitzeXN0ZW0oKQlldmFsLnR4dAkvKnN5c3RlbSgpKgorc3lzdGVtLXZpbXJjCXN0YXJ0aW5nLnR4dAkvKnN5c3RlbS12aW1yYyoKK3N+CWNoYW5nZS50eHQJLypzfioKK3QJbW90aW9uLnR4dAkvKnQqCit0XyMyCXRlcm0udHh0CS8qdF8jMioKK3RfIzQJdGVybS50eHQJLyp0XyM0KgordF8lMQl0ZXJtLnR4dAkvKnRfJTEqCit0XyVpCXRlcm0udHh0CS8qdF8laSoKK3RfJjgJdGVybS50eHQJLyp0XyY4KgordF9ANwl0ZXJtLnR4dAkvKnRfQDcqCit0X0FCCXRlcm0udHh0CS8qdF9BQioKK3RfQUYJdGVybS50eHQJLyp0X0FGKgordF9BTAl0ZXJtLnR4dAkvKnRfQUwqCit0X0NTCXRlcm0udHh0CS8qdF9DUyoKK3RfQ1YJdGVybS50eHQJLyp0X0NWKgordF9Dbwl0ZXJtLnR4dAkvKnRfQ28qCit0X0RMCXRlcm0udHh0CS8qdF9ETCoKK3RfRjEJdGVybS50eHQJLyp0X0YxKgordF9GMgl0ZXJtLnR4dAkvKnRfRjIqCit0X0YzCXRlcm0udHh0CS8qdF9GMyoKK3RfRjQJdGVybS50eHQJLyp0X0Y0KgordF9GNQl0ZXJtLnR4dAkvKnRfRjUqCit0X0Y2CXRlcm0udHh0CS8qdF9GNioKK3RfRjcJdGVybS50eHQJLyp0X0Y3KgordF9GOAl0ZXJtLnR4dAkvKnRfRjgqCit0X0Y5CXRlcm0udHh0CS8qdF9GOSoKK3RfSUUJdGVybS50eHQJLyp0X0lFKgordF9JUwl0ZXJtLnR4dAkvKnRfSVMqCit0X0sxCXRlcm0udHh0CS8qdF9LMSoKK3RfSzMJdGVybS50eHQJLyp0X0szKgordF9LNAl0ZXJtLnR4dAkvKnRfSzQqCit0X0s1CXRlcm0udHh0CS8qdF9LNSoKK3RfSzYJdGVybS50eHQJLyp0X0s2KgordF9LNwl0ZXJtLnR4dAkvKnRfSzcqCit0X0s4CXRlcm0udHh0CS8qdF9LOCoKK3RfSzkJdGVybS50eHQJLyp0X0s5KgordF9LQQl0ZXJtLnR4dAkvKnRfS0EqCit0X0tCCXRlcm0udHh0CS8qdF9LQioKK3RfS0MJdGVybS50eHQJLyp0X0tDKgordF9LRAl0ZXJtLnR4dAkvKnRfS0QqCit0X0tFCXRlcm0udHh0CS8qdF9LRSoKK3RfS0YJdGVybS50eHQJLyp0X0tGKgordF9LRwl0ZXJtLnR4dAkvKnRfS0cqCit0X0tICXRlcm0udHh0CS8qdF9LSCoKK3RfS0kJdGVybS50eHQJLyp0X0tJKgordF9LSgl0ZXJtLnR4dAkvKnRfS0oqCit0X0tLCXRlcm0udHh0CS8qdF9LSyoKK3RfS0wJdGVybS50eHQJLyp0X0tMKgordF9SSQl0ZXJtLnR4dAkvKnRfUkkqCit0X1JWCXRlcm0udHh0CS8qdF9SVioKK3RfU2IJdGVybS50eHQJLyp0X1NiKgordF9TZgl0ZXJtLnR4dAkvKnRfU2YqCit0X1dQCXRlcm0udHh0CS8qdF9XUCoKK3RfV1MJdGVybS50eHQJLyp0X1dTKgordF9aSAl0ZXJtLnR4dAkvKnRfWkgqCit0X1pSCXRlcm0udHh0CS8qdF9aUioKK3RfYWwJdGVybS50eHQJLyp0X2FsKgordF9iYwl0ZXJtLnR4dAkvKnRfYmMqCit0X2NkCXRlcm0udHh0CS8qdF9jZCoKK3RfY2RsCXZlcnNpb240LnR4dAkvKnRfY2RsKgordF9jZQl0ZXJtLnR4dAkvKnRfY2UqCit0X2NpCXZlcnNpb240LnR4dAkvKnRfY2kqCit0X2NpbAl2ZXJzaW9uNC50eHQJLyp0X2NpbCoKK3RfY2wJdGVybS50eHQJLyp0X2NsKgordF9jbQl0ZXJtLnR4dAkvKnRfY20qCit0X2NyaQl2ZXJzaW9uNC50eHQJLyp0X2NyaSoKK3RfY3MJdGVybS50eHQJLyp0X2NzKgordF9jc2MJdmVyc2lvbjQudHh0CS8qdF9jc2MqCit0X2N2CXZlcnNpb240LnR4dAkvKnRfY3YqCit0X2N2dgl2ZXJzaW9uNC50eHQJLyp0X2N2dioKK3RfZGEJdGVybS50eHQJLyp0X2RhKgordF9kYgl0ZXJtLnR4dAkvKnRfZGIqCit0X2RsCXRlcm0udHh0CS8qdF9kbCoKK3RfZWQJdmVyc2lvbjQudHh0CS8qdF9lZCoKK3RfZWwJdmVyc2lvbjQudHh0CS8qdF9lbCoKK3RfZjEJdmVyc2lvbjQudHh0CS8qdF9mMSoKK3RfZjEwCXZlcnNpb240LnR4dAkvKnRfZjEwKgordF9mMgl2ZXJzaW9uNC50eHQJLyp0X2YyKgordF9mMwl2ZXJzaW9uNC50eHQJLyp0X2YzKgordF9mNAl2ZXJzaW9uNC50eHQJLyp0X2Y0KgordF9mNQl2ZXJzaW9uNC50eHQJLyp0X2Y1KgordF9mNgl2ZXJzaW9uNC50eHQJLyp0X2Y2KgordF9mNwl2ZXJzaW9uNC50eHQJLyp0X2Y3KgordF9mOAl2ZXJzaW9uNC50eHQJLyp0X2Y4KgordF9mOQl2ZXJzaW9uNC50eHQJLyp0X2Y5KgordF9mcwl0ZXJtLnR4dAkvKnRfZnMqCit0X2hlbHAJdmVyc2lvbjQudHh0CS8qdF9oZWxwKgordF9pbAl2ZXJzaW9uNC50eHQJLyp0X2lsKgordF9rMQl0ZXJtLnR4dAkvKnRfazEqCit0X2syCXRlcm0udHh0CS8qdF9rMioKK3RfazMJdGVybS50eHQJLyp0X2szKgordF9rNAl0ZXJtLnR4dAkvKnRfazQqCit0X2s1CXRlcm0udHh0CS8qdF9rNSoKK3RfazYJdGVybS50eHQJLyp0X2s2KgordF9rNwl0ZXJtLnR4dAkvKnRfazcqCit0X2s4CXRlcm0udHh0CS8qdF9rOCoKK3RfazkJdGVybS50eHQJLyp0X2s5KgordF9rOwl0ZXJtLnR4dAkvKnRfazsqCit0X2tCCXRlcm0udHh0CS8qdF9rQioKK3Rfa0QJdGVybS50eHQJLyp0X2tEKgordF9rSQl0ZXJtLnR4dAkvKnRfa0kqCit0X2tOCXRlcm0udHh0CS8qdF9rTioKK3Rfa1AJdGVybS50eHQJLyp0X2tQKgordF9rYgl0ZXJtLnR4dAkvKnRfa2IqCit0X2tkCXRlcm0udHh0CS8qdF9rZCoKK3Rfa2UJdGVybS50eHQJLyp0X2tlKgordF9raAl0ZXJtLnR4dAkvKnRfa2gqCit0X2tsCXRlcm0udHh0CS8qdF9rbCoKK3Rfa3IJdGVybS50eHQJLyp0X2tyKgordF9rcwl0ZXJtLnR4dAkvKnRfa3MqCit0X2t1CXRlcm0udHh0CS8qdF9rdSoKK3RfbGUJdGVybS50eHQJLyp0X2xlKgordF9tYgl0ZXJtLnR4dAkvKnRfbWIqCit0X21kCXRlcm0udHh0CS8qdF9tZCoKK3RfbWUJdGVybS50eHQJLyp0X21lKgordF9tcgl0ZXJtLnR4dAkvKnRfbXIqCit0X21zCXRlcm0udHh0CS8qdF9tcyoKK3RfbmQJdGVybS50eHQJLyp0X25kKgordF9vcAl0ZXJtLnR4dAkvKnRfb3AqCit0X3NlCXRlcm0udHh0CS8qdF9zZSoKK3Rfc2YxCXZlcnNpb240LnR4dAkvKnRfc2YxKgordF9zZjEwCXZlcnNpb240LnR4dAkvKnRfc2YxMCoKK3Rfc2YyCXZlcnNpb240LnR4dAkvKnRfc2YyKgordF9zZjMJdmVyc2lvbjQudHh0CS8qdF9zZjMqCit0X3NmNAl2ZXJzaW9uNC50eHQJLyp0X3NmNCoKK3Rfc2Y1CXZlcnNpb240LnR4dAkvKnRfc2Y1KgordF9zZjYJdmVyc2lvbjQudHh0CS8qdF9zZjYqCit0X3NmNwl2ZXJzaW9uNC50eHQJLyp0X3NmNyoKK3Rfc2Y4CXZlcnNpb240LnR4dAkvKnRfc2Y4KgordF9zZjkJdmVyc2lvbjQudHh0CS8qdF9zZjkqCit0X3NrZAl2ZXJzaW9uNC50eHQJLyp0X3NrZCoKK3Rfc2tsCXZlcnNpb240LnR4dAkvKnRfc2tsKgordF9za3IJdmVyc2lvbjQudHh0CS8qdF9za3IqCit0X3NrdQl2ZXJzaW9uNC50eHQJLyp0X3NrdSoKK3Rfc28JdGVybS50eHQJLyp0X3NvKgordF9zcgl0ZXJtLnR4dAkvKnRfc3IqCit0X3N0YXI3CXRlcm0udHh0CS8qdF9zdGFyNyoKK3RfdGIJdmVyc2lvbjQudHh0CS8qdF90YioKK3RfdGUJdGVybS50eHQJLyp0X3RlKgordF90aQl0ZXJtLnR4dAkvKnRfdGkqCit0X3RwCXZlcnNpb240LnR4dAkvKnRfdHAqCit0X3RzCXRlcm0udHh0CS8qdF90cyoKK3RfdHNfb2xkCXZlcnNpb240LnR4dAkvKnRfdHNfb2xkKgordF91ZQl0ZXJtLnR4dAkvKnRfdWUqCit0X3VuZG8JdmVyc2lvbjQudHh0CS8qdF91bmRvKgordF91cwl0ZXJtLnR4dAkvKnRfdXMqCit0X3V0CXRlcm0udHh0CS8qdF91dCoKK3RfdmIJdGVybS50eHQJLyp0X3ZiKgordF92ZQl0ZXJtLnR4dAkvKnRfdmUqCit0X3ZpCXRlcm0udHh0CS8qdF92aSoKK3RfdnMJdGVybS50eHQJLyp0X3ZzKgordF94cwl0ZXJtLnR4dAkvKnRfeHMqCit0YWIJaW50cm8udHh0CS8qdGFiKgordGFnCXRhZ3NyY2gudHh0CS8qdGFnKgordGFnLSEJdGFnc3JjaC50eHQJLyp0YWctISoKK3RhZy1hbnktd2hpdGUJdGFnc3JjaC50eHQJLyp0YWctYW55LXdoaXRlKgordGFnLWJpbmFyeS1zZWFyY2gJdGFnc3JjaC50eHQJLyp0YWctYmluYXJ5LXNlYXJjaCoKK3RhZy1jb21tYW5kcwl0YWdzcmNoLnR4dAkvKnRhZy1jb21tYW5kcyoKK3RhZy1kZXRhaWxzCXRhZ3NyY2gudHh0CS8qdGFnLWRldGFpbHMqCit0YWctaGlnaGxpZ2h0CXN5bnRheC50eHQJLyp0YWctaGlnaGxpZ2h0KgordGFnLW1hdGNobGlzdAl0YWdzcmNoLnR4dAkvKnRhZy1tYXRjaGxpc3QqCit0YWctb2xkLXN0YXRpYwl0YWdzcmNoLnR4dAkvKnRhZy1vbGQtc3RhdGljKgordGFnLW92ZXJsb2FkZWQJdmVyc2lvbjUudHh0CS8qdGFnLW92ZXJsb2FkZWQqCit0YWctcHJpb3JpdHkJdGFnc3JjaC50eHQJLyp0YWctcHJpb3JpdHkqCit0YWctcmVnZXhwCXRhZ3NyY2gudHh0CS8qdGFnLXJlZ2V4cCoKK3RhZy1zZWFyY2gJdGFnc3JjaC50eHQJLyp0YWctc2VhcmNoKgordGFnLXNlY3VyaXR5CXRhZ3NyY2gudHh0CS8qdGFnLXNlY3VyaXR5KgordGFnLXNraXAtZmlsZQl0YWdzcmNoLnR4dAkvKnRhZy1za2lwLWZpbGUqCit0YWctc3RhY2sJdGFnc3JjaC50eHQJLyp0YWctc3RhY2sqCit0YWdzCXRhZ3NyY2gudHh0CS8qdGFncyoKK3RhZ3MtYW5kLXNlYXJjaGVzCXRhZ3NyY2gudHh0CS8qdGFncy1hbmQtc2VhcmNoZXMqCit0YWdzLWZpbGUtY2hhbmdlZAl2ZXJzaW9uNS50eHQJLyp0YWdzLWZpbGUtY2hhbmdlZCoKK3RhZ3MtZmlsZS1mb3JtYXQJdGFnc3JjaC50eHQJLyp0YWdzLWZpbGUtZm9ybWF0KgordGFncy1vcHRpb24JdGFnc3JjaC50eHQJLyp0YWdzLW9wdGlvbioKK3RhZ3NyY2gudHh0CXRhZ3NyY2gudHh0CS8qdGFnc3JjaC50eHQqCit0YWdzdGFjawl0YWdzcmNoLnR4dAkvKnRhZ3N0YWNrKgordGNsCWlmX3RjbC50eHQJLyp0Y2wqCit0Y2wtYmVlcAlpZl90Y2wudHh0CS8qdGNsLWJlZXAqCit0Y2wtYnVmZmVyCWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyKgordGNsLWJ1ZmZlci1hcHBlbmQJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItYXBwZW5kKgordGNsLWJ1ZmZlci1jbWRzCWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLWNtZHMqCit0Y2wtYnVmZmVyLWNvbW1hbmQJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItY29tbWFuZCoKK3RjbC1idWZmZXItY291bnQJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItY291bnQqCit0Y2wtYnVmZmVyLWRlbGNtZAlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1kZWxjbWQqCit0Y2wtYnVmZmVyLWRlbGV0ZQlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1kZWxldGUqCit0Y2wtYnVmZmVyLWV4cHIJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItZXhwcioKK3RjbC1idWZmZXItZ2V0CWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLWdldCoKK3RjbC1idWZmZXItaW5zZXJ0CWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLWluc2VydCoKK3RjbC1idWZmZXItbGFzdAlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1sYXN0KgordGNsLWJ1ZmZlci1tYXJrCWlmX3RjbC50eHQJLyp0Y2wtYnVmZmVyLW1hcmsqCit0Y2wtYnVmZmVyLW9wdGlvbglpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1vcHRpb24qCit0Y2wtYnVmZmVyLXNldAlpZl90Y2wudHh0CS8qdGNsLWJ1ZmZlci1zZXQqCit0Y2wtYnVmZmVyLXdpbmRvd3MJaWZfdGNsLnR4dAkvKnRjbC1idWZmZXItd2luZG93cyoKK3RjbC1idWdzCWlmX3RjbC50eHQJLyp0Y2wtYnVncyoKK3RjbC1jb21tYW5kCWlmX3RjbC50eHQJLyp0Y2wtY29tbWFuZCoKK3RjbC1jb21tYW5kcwlpZl90Y2wudHh0CS8qdGNsLWNvbW1hbmRzKgordGNsLWV4LWNvbW1hbmRzCWlmX3RjbC50eHQJLyp0Y2wtZXgtY29tbWFuZHMqCit0Y2wtZXhhbXBsZXMJaWZfdGNsLnR4dAkvKnRjbC1leGFtcGxlcyoKK3RjbC1leHByCWlmX3RjbC50eHQJLyp0Y2wtZXhwcioKK3RjbC1saW5lbnVtYmVycwlpZl90Y2wudHh0CS8qdGNsLWxpbmVudW1iZXJzKgordGNsLW1pc2MJaWZfdGNsLnR4dAkvKnRjbC1taXNjKgordGNsLW9wdGlvbglpZl90Y2wudHh0CS8qdGNsLW9wdGlvbioKK3RjbC1vdXRwdXQJaWZfdGNsLnR4dAkvKnRjbC1vdXRwdXQqCit0Y2wtdmFyLWN1cnJlbnQJaWZfdGNsLnR4dAkvKnRjbC12YXItY3VycmVudCoKK3RjbC12YXItbGJhc2UJaWZfdGNsLnR4dAkvKnRjbC12YXItbGJhc2UqCit0Y2wtdmFyLWxpbmUJaWZfdGNsLnR4dAkvKnRjbC12YXItbGluZSoKK3RjbC12YXItbG51bQlpZl90Y2wudHh0CS8qdGNsLXZhci1sbnVtKgordGNsLXZhci1yYW5nZQlpZl90Y2wudHh0CS8qdGNsLXZhci1yYW5nZSoKK3RjbC12YXJpYWJsZXMJaWZfdGNsLnR4dAkvKnRjbC12YXJpYWJsZXMqCit0Y2wtd2luZG93CWlmX3RjbC50eHQJLyp0Y2wtd2luZG93KgordGNsLXdpbmRvdy1idWZmZXIJaWZfdGNsLnR4dAkvKnRjbC13aW5kb3ctYnVmZmVyKgordGNsLXdpbmRvdy1jbWRzCWlmX3RjbC50eHQJLyp0Y2wtd2luZG93LWNtZHMqCit0Y2wtd2luZG93LWNvbW1hbmQJaWZfdGNsLnR4dAkvKnRjbC13aW5kb3ctY29tbWFuZCoKK3RjbC13aW5kb3ctY3Vyc29yCWlmX3RjbC50eHQJLyp0Y2wtd2luZG93LWN1cnNvcioKK3RjbC13aW5kb3ctZGVsY21kCWlmX3RjbC50eHQJLyp0Y2wtd2luZG93LWRlbGNtZCoKK3RjbC13aW5kb3ctZXhwcglpZl90Y2wudHh0CS8qdGNsLXdpbmRvdy1leHByKgordGNsLXdpbmRvdy1oZWlnaHQJaWZfdGNsLnR4dAkvKnRjbC13aW5kb3ctaGVpZ2h0KgordGNsLXdpbmRvdy1vcHRpb24JaWZfdGNsLnR4dAkvKnRjbC13aW5kb3ctb3B0aW9uKgordGNzaC1zdHlsZQljbWRsaW5lLnR4dAkvKnRjc2gtc3R5bGUqCit0Y3NoLXN5bnRheAlzeW50YXgudHh0CS8qdGNzaC1zeW50YXgqCit0Y3NoLnZpbQlzeW50YXgudHh0CS8qdGNzaC52aW0qCit0ZWFyLW9mZi1tZW51cwlndWkudHh0CS8qdGVhci1vZmYtbWVudXMqCit0ZWxuZXQtQ1RSTC1dCXRhZ3NyY2gudHh0CS8qdGVsbmV0LUNUUkwtXSoKK3RlbXAtZmlsZS1uYW1lCWV2YWwudHh0CS8qdGVtcC1maWxlLW5hbWUqCit0ZW1wbGF0ZQlhdXRvY21kLnR4dAkvKnRlbXBsYXRlKgordGVtcG5hbWUoKQlldmFsLnR4dAkvKnRlbXBuYW1lKCkqCit0ZXJtLWRlcGVuZGVudC1zZXR0aW5ncwl0ZXJtLnR4dAkvKnRlcm0tZGVwZW5kZW50LXNldHRpbmdzKgordGVybS1saXN0CXN5bnRheC50eHQJLyp0ZXJtLWxpc3QqCit0ZXJtLnR4dAl0ZXJtLnR4dAkvKnRlcm0udHh0KgordGVybWNhcAl0ZXJtLnR4dAkvKnRlcm1jYXAqCit0ZXJtY2FwLWNoYW5nZWQJdmVyc2lvbjQudHh0CS8qdGVybWNhcC1jaGFuZ2VkKgordGVybWNhcC1jb2xvcnMJdGVybS50eHQJLyp0ZXJtY2FwLWNvbG9ycyoKK3Rlcm1jYXAtc3ludGF4CXN5bnRheC50eHQJLyp0ZXJtY2FwLXN5bnRheCoKK3Rlcm1jYXAtdGl0bGUJdGVybS50eHQJLyp0ZXJtY2FwLXRpdGxlKgordGVybWluYWwtY29sb3JzCW9zX3VuaXgudHh0CS8qdGVybWluYWwtY29sb3JzKgordGVybWluYWwtaW5mbwl0ZXJtLnR4dAkvKnRlcm1pbmFsLWluZm8qCit0ZXJtaW5hbC1vcHRpb25zCXRlcm0udHh0CS8qdGVybWluYWwtb3B0aW9ucyoKK3Rlcm1pbmZvCXRlcm0udHh0CS8qdGVybWluZm8qCit0ZXJtcmVzcG9uc2UtdmFyaWFibGUJZXZhbC50eHQJLyp0ZXJtcmVzcG9uc2UtdmFyaWFibGUqCit0ZXgtc3ludGF4CXN5bnRheC50eHQJLyp0ZXgtc3ludGF4KgordGV4LnZpbQlzeW50YXgudHh0CS8qdGV4LnZpbSoKK3RleHQtb2JqZWN0cwltb3Rpb24udHh0CS8qdGV4dC1vYmplY3RzKgordGV4dC1vYmplY3RzLWNoYW5nZWQJdmVyc2lvbjUudHh0CS8qdGV4dC1vYmplY3RzLWNoYW5nZWQqCit0Zi1zeW50YXgJc3ludGF4LnR4dAkvKnRmLXN5bnRheCoKK3RmLnZpbQlzeW50YXgudHh0CS8qdGYudmltKgordGhpc19zZXNzaW9uLXZhcmlhYmxlCWV2YWwudHh0CS8qdGhpc19zZXNzaW9uLXZhcmlhYmxlKgordGhyb3ctY2F0Y2gJZXZhbC50eHQJLyp0aHJvdy1jYXRjaCoKK3Rocm93LWV4cHJlc3Npb24JZXZhbC50eHQJLyp0aHJvdy1leHByZXNzaW9uKgordGhyb3ctZnJvbS1jYXRjaAlldmFsLnR4dAkvKnRocm93LWZyb20tY2F0Y2gqCit0aHJvdy12YXJpYWJsZXMJZXZhbC50eHQJLyp0aHJvdy12YXJpYWJsZXMqCit0aHJvd3BvaW50LXZhcmlhYmxlCWV2YWwudHh0CS8qdGhyb3dwb2ludC12YXJpYWJsZSoKK3RpbWVzdGFtcAllZGl0aW5nLnR4dAkvKnRpbWVzdGFtcCoKK3RpbWVzdGFtcHMJZWRpdGluZy50eHQJLyp0aW1lc3RhbXBzKgordGlwcwl0aXBzLnR4dAkvKnRpcHMqCit0aXBzLnR4dAl0aXBzLnR4dAkvKnRpcHMudHh0KgordG9kbwl0b2RvLnR4dAkvKnRvZG8qCit0b2RvLnR4dAl0b2RvLnR4dAkvKnRvZG8udHh0KgordG9nZ2xlCW9wdGlvbnMudHh0CS8qdG9nZ2xlKgordG9nZ2xlLXJldmlucwl2ZXJzaW9uNC50eHQJLyp0b2dnbGUtcmV2aW5zKgordG9sb3dlcigpCWV2YWwudHh0CS8qdG9sb3dlcigpKgordG9vbGJhci1pY29uCWd1aS50eHQJLyp0b29sYmFyLWljb24qCit0b3VwcGVyKCkJZXZhbC50eHQJLyp0b3VwcGVyKCkqCit0cm9qYW4taG9yc2UJc3RhcnRpbmcudHh0CS8qdHJvamFuLWhvcnNlKgordHJ5LWNvbmRpdGlvbmFscwlldmFsLnR4dAkvKnRyeS1jb25kaXRpb25hbHMqCit0cnktZWNob2VycglldmFsLnR4dAkvKnRyeS1lY2hvZXJyKgordHJ5LWZpbmFsbHkJZXZhbC50eHQJLyp0cnktZmluYWxseSoKK3RyeS1uZXN0ZWQJZXZhbC50eHQJLyp0cnktbmVzdGVkKgordHJ5LW5lc3RpbmcJZXZhbC50eHQJLyp0cnktbmVzdGluZyoKK3R1dG9yCXVzcl8wMS50eHQJLyp0dXRvcioKK3R3aWNlCWlmX2NzY29wLnR4dAkvKnR3aWNlKgordHlwZSgpCWV2YWwudHh0CS8qdHlwZSgpKgordHlwZS1taXN0YWtlcwl0aXBzLnR4dAkvKnR5cGUtbWlzdGFrZXMqCit0eXBlY29yci1zZXR0aW5ncwl1c3JfNDEudHh0CS8qdHlwZWNvcnItc2V0dGluZ3MqCit0eXBlY29yci50eHQJdXNyXzQxLnR4dAkvKnR5cGVjb3JyLnR4dCoKK3UJdW5kby50eHQJLyp1KgordWdhbmRhCXVnYW5kYS50eHQJLyp1Z2FuZGEqCit1Z2FuZGEudHh0CXVnYW5kYS50eHQJLyp1Z2FuZGEudHh0KgordW5kbwl1bmRvLnR4dAkvKnVuZG8qCit1bmRvLWNvbW1hbmRzCXVuZG8udHh0CS8qdW5kby1jb21tYW5kcyoKK3VuZG8tcmVkbwl1bmRvLnR4dAkvKnVuZG8tcmVkbyoKK3VuZG8tcmVtYXJrcwl1bmRvLnR4dAkvKnVuZG8tcmVtYXJrcyoKK3VuZG8tdHdvLXdheXMJdW5kby50eHQJLyp1bmRvLXR3by13YXlzKgordW5kby50eHQJdW5kby50eHQJLyp1bmRvLnR4dCoKK3VuZG9fZnRwbHVnaW4JdXNyXzQxLnR4dAkvKnVuZG9fZnRwbHVnaW4qCit1bmljb2RlCW1ieXRlLnR4dAkvKnVuaWNvZGUqCit1bml4CW9zX3VuaXgudHh0CS8qdW5peCoKK3VubGlzdGVkLWJ1ZmZlcgl3aW5kb3dzLnR4dAkvKnVubGlzdGVkLWJ1ZmZlcioKK3VwLWRvd24tbW90aW9ucwltb3Rpb24udHh0CS8qdXAtZG93bi1tb3Rpb25zKgordXBwZXJjYXNlCWNoYW5nZS50eHQJLyp1cHBlcmNhc2UqCit1c2UtY3BvLXNhdmUJdXNyXzQxLnR4dAkvKnVzZS1jcG8tc2F2ZSoKK3VzZS12aXN1YWwtY21kcwl2ZXJzaW9uNC50eHQJLyp1c2UtdmlzdWFsLWNtZHMqCit1c2VmdWwtbWFwcGluZ3MJdGlwcy50eHQJLyp1c2VmdWwtbWFwcGluZ3MqCit1c2VuZXQJaW50cm8udHh0CS8qdXNlbmV0KgordXNlci1jbWQtYW1iaWd1b3VzCW1hcC50eHQJLyp1c2VyLWNtZC1hbWJpZ3VvdXMqCit1c2VyLWNvbW1hbmRzCW1hcC50eHQJLyp1c2VyLWNvbW1hbmRzKgordXNlci1mdW5jdGlvbnMJZXZhbC50eHQJLyp1c2VyLWZ1bmN0aW9ucyoKK3VzZXItbWFudWFsCXVzcl90b2MudHh0CS8qdXNlci1tYW51YWwqCit1c2luZy08UGx1Zz4JdXNyXzQxLnR4dAkvKnVzaW5nLTxQbHVnPioKK3VzaW5nLW1lbnVzCWd1aS50eHQJLyp1c2luZy1tZW51cyoKK3VzaW5nLXNjcmlwdHMJcmVwZWF0LnR4dAkvKnVzaW5nLXNjcmlwdHMqCit1c2luZy14eGQJdGlwcy50eHQJLyp1c2luZy14eGQqCit1c2luZ19DVFJMLVYJbWFwLnR4dAkvKnVzaW5nX0NUUkwtVioKK3Vzcl8wMS50eHQJdXNyXzAxLnR4dAkvKnVzcl8wMS50eHQqCit1c3JfMDIudHh0CXVzcl8wMi50eHQJLyp1c3JfMDIudHh0KgordXNyXzAzLnR4dAl1c3JfMDMudHh0CS8qdXNyXzAzLnR4dCoKK3Vzcl8wNC50eHQJdXNyXzA0LnR4dAkvKnVzcl8wNC50eHQqCit1c3JfMDUudHh0CXVzcl8wNS50eHQJLyp1c3JfMDUudHh0KgordXNyXzA2LnR4dAl1c3JfMDYudHh0CS8qdXNyXzA2LnR4dCoKK3Vzcl8wNy50eHQJdXNyXzA3LnR4dAkvKnVzcl8wNy50eHQqCit1c3JfMDgudHh0CXVzcl8wOC50eHQJLyp1c3JfMDgudHh0KgordXNyXzA5LnR4dAl1c3JfMDkudHh0CS8qdXNyXzA5LnR4dCoKK3Vzcl8xMC50eHQJdXNyXzEwLnR4dAkvKnVzcl8xMC50eHQqCit1c3JfMTEudHh0CXVzcl8xMS50eHQJLyp1c3JfMTEudHh0KgordXNyXzEyLnR4dAl1c3JfMTIudHh0CS8qdXNyXzEyLnR4dCoKK3Vzcl8yMC50eHQJdXNyXzIwLnR4dAkvKnVzcl8yMC50eHQqCit1c3JfMjEudHh0CXVzcl8yMS50eHQJLyp1c3JfMjEudHh0KgordXNyXzIyLnR4dAl1c3JfMjIudHh0CS8qdXNyXzIyLnR4dCoKK3Vzcl8yMy50eHQJdXNyXzIzLnR4dAkvKnVzcl8yMy50eHQqCit1c3JfMjQudHh0CXVzcl8yNC50eHQJLyp1c3JfMjQudHh0KgordXNyXzI1LnR4dAl1c3JfMjUudHh0CS8qdXNyXzI1LnR4dCoKK3Vzcl8yNi50eHQJdXNyXzI2LnR4dAkvKnVzcl8yNi50eHQqCit1c3JfMjcudHh0CXVzcl8yNy50eHQJLyp1c3JfMjcudHh0KgordXNyXzI4LnR4dAl1c3JfMjgudHh0CS8qdXNyXzI4LnR4dCoKK3Vzcl8yOS50eHQJdXNyXzI5LnR4dAkvKnVzcl8yOS50eHQqCit1c3JfMzAudHh0CXVzcl8zMC50eHQJLyp1c3JfMzAudHh0KgordXNyXzMxLnR4dAl1c3JfMzEudHh0CS8qdXNyXzMxLnR4dCoKK3Vzcl80MC50eHQJdXNyXzQwLnR4dAkvKnVzcl80MC50eHQqCit1c3JfNDEudHh0CXVzcl80MS50eHQJLyp1c3JfNDEudHh0KgordXNyXzQyLnR4dAl1c3JfNDIudHh0CS8qdXNyXzQyLnR4dCoKK3Vzcl80My50eHQJdXNyXzQzLnR4dAkvKnVzcl80My50eHQqCit1c3JfNDQudHh0CXVzcl80NC50eHQJLyp1c3JfNDQudHh0KgordXNyXzQ1LnR4dAl1c3JfNDUudHh0CS8qdXNyXzQ1LnR4dCoKK3Vzcl85MC50eHQJdXNyXzkwLnR4dAkvKnVzcl85MC50eHQqCit1c3JfdG9jLnR4dAl1c3JfdG9jLnR4dAkvKnVzcl90b2MudHh0KgordXRmLTgJbWJ5dGUudHh0CS8qdXRmLTgqCit1dGYtOC1jaGFyLWFyZwltYnl0ZS50eHQJLyp1dGYtOC1jaGFyLWFyZyoKK3V0Zi04LWluLXh3aW5kb3dzCW1ieXRlLnR4dAkvKnV0Zi04LWluLXh3aW5kb3dzKgordXRmLTgtdHlwaW5nCW1ieXRlLnR4dAkvKnV0Zi04LXR5cGluZyoKK3V0ZjgJbWJ5dGUudHh0CS8qdXRmOCoKK3YJdmlzdWFsLnR4dAkvKnYqCit2OmNoYXJjb252ZXJ0X2Zyb20JZXZhbC50eHQJLyp2OmNoYXJjb252ZXJ0X2Zyb20qCit2OmNoYXJjb252ZXJ0X3RvCWV2YWwudHh0CS8qdjpjaGFyY29udmVydF90byoKK3Y6Y21kYXJnCWV2YWwudHh0CS8qdjpjbWRhcmcqCit2OmNtZGJhbmcJZXZhbC50eHQJLyp2OmNtZGJhbmcqCit2OmNvdW50CWV2YWwudHh0CS8qdjpjb3VudCoKK3Y6Y291bnQxCWV2YWwudHh0CS8qdjpjb3VudDEqCit2OmN0eXBlCWV2YWwudHh0CS8qdjpjdHlwZSoKK3Y6ZHlpbmcJZXZhbC50eHQJLyp2OmR5aW5nKgordjplcnJtc2cJZXZhbC50eHQJLyp2OmVycm1zZyoKK3Y6ZXhjZXB0aW9uCWV2YWwudHh0CS8qdjpleGNlcHRpb24qCit2OmZuYW1lX2RpZmYJZXZhbC50eHQJLyp2OmZuYW1lX2RpZmYqCit2OmZuYW1lX2luCWV2YWwudHh0CS8qdjpmbmFtZV9pbioKK3Y6Zm5hbWVfbmV3CWV2YWwudHh0CS8qdjpmbmFtZV9uZXcqCit2OmZuYW1lX291dAlldmFsLnR4dAkvKnY6Zm5hbWVfb3V0Kgordjpmb2xkZGFzaGVzCWV2YWwudHh0CS8qdjpmb2xkZGFzaGVzKgordjpmb2xkZW5kCWV2YWwudHh0CS8qdjpmb2xkZW5kKgordjpmb2xkbGV2ZWwJZXZhbC50eHQJLyp2OmZvbGRsZXZlbCoKK3Y6Zm9sZHN0YXJ0CWV2YWwudHh0CS8qdjpmb2xkc3RhcnQqCit2OmxhbmcJZXZhbC50eHQJLyp2OmxhbmcqCit2OmxjX3RpbWUJZXZhbC50eHQJLyp2OmxjX3RpbWUqCit2OmxudW0JZXZhbC50eHQJLyp2OmxudW0qCit2OnByZXZjb3VudAlldmFsLnR4dAkvKnY6cHJldmNvdW50Kgordjpwcm9nbmFtZQlldmFsLnR4dAkvKnY6cHJvZ25hbWUqCit2OnJlZ2lzdGVyCWV2YWwudHh0CS8qdjpyZWdpc3RlcioKK3Y6c2VydmVybmFtZQlldmFsLnR4dAkvKnY6c2VydmVybmFtZSoKK3Y6c2hlbGxfZXJyb3IJZXZhbC50eHQJLyp2OnNoZWxsX2Vycm9yKgordjpzdGF0dXNtc2cJZXZhbC50eHQJLyp2OnN0YXR1c21zZyoKK3Y6dGVybXJlc3BvbnNlCWV2YWwudHh0CS8qdjp0ZXJtcmVzcG9uc2UqCit2OnRoaXNfc2Vzc2lvbglldmFsLnR4dAkvKnY6dGhpc19zZXNzaW9uKgordjp0aHJvd3BvaW50CWV2YWwudHh0CS8qdjp0aHJvd3BvaW50Kgordjp2YXIJZXZhbC50eHQJLyp2OnZhcioKK3Y6dmVyc2lvbglldmFsLnR4dAkvKnY6dmVyc2lvbioKK3Y6d2FybmluZ21zZwlldmFsLnR4dAkvKnY6d2FybmluZ21zZyoKK3ZfIQljaGFuZ2UudHh0CS8qdl8hKgordl8kCXZpc3VhbC50eHQJLyp2XyQqCit2XzoJY21kbGluZS50eHQJLyp2XzoqCit2XzwJY2hhbmdlLnR4dAkvKnZfPCoKK3ZfPEJTPgljaGFuZ2UudHh0CS8qdl88QlM+Kgordl88RGVsPgljaGFuZ2UudHh0CS8qdl88RGVsPioKK3ZfPQljaGFuZ2UudHh0CS8qdl89Kgordl8+CWNoYW5nZS50eHQJLyp2Xz4qCit2X0MJY2hhbmdlLnR4dAkvKnZfQyoKK3ZfQ1RSTC1DCXZpc3VhbC50eHQJLyp2X0NUUkwtQyoKK3ZfQ1RSTC1HCXZpc3VhbC50eHQJLyp2X0NUUkwtRyoKK3ZfQ1RSTC1ICWNoYW5nZS50eHQJLyp2X0NUUkwtSCoKK3ZfQ1RSTC1PCXZpc3VhbC50eHQJLyp2X0NUUkwtTyoKK3ZfQ1RSTC1WCXZpc3VhbC50eHQJLyp2X0NUUkwtVioKK3ZfQ1RSTC1aCXN0YXJ0aW5nLnR4dAkvKnZfQ1RSTC1aKgordl9DVFJMLVxfQ1RSTC1HCWludHJvLnR4dAkvKnZfQ1RSTC1cXF9DVFJMLUcqCit2X0NUUkwtXF9DVFJMLU4JaW50cm8udHh0CS8qdl9DVFJMLVxcX0NUUkwtTioKK3ZfQ1RSTC1dCXRhZ3NyY2gudHh0CS8qdl9DVFJMLV0qCit2X0QJY2hhbmdlLnR4dAkvKnZfRCoKK3ZfSgljaGFuZ2UudHh0CS8qdl9KKgordl9LCXZhcmlvdXMudHh0CS8qdl9LKgordl9PCXZpc3VhbC50eHQJLyp2X08qCit2X1AJY2hhbmdlLnR4dAkvKnZfUCoKK3ZfUgljaGFuZ2UudHh0CS8qdl9SKgordl9TCWNoYW5nZS50eHQJLyp2X1MqCit2X1UJY2hhbmdlLnR4dAkvKnZfVSoKK3ZfVgl2aXN1YWwudHh0CS8qdl9WKgordl9YCWNoYW5nZS50eHQJLyp2X1gqCit2X1kJY2hhbmdlLnR4dAkvKnZfWSoKK3ZfYQltb3Rpb24udHh0CS8qdl9hKgordl9hKAltb3Rpb24udHh0CS8qdl9hKCoKK3ZfYSkJbW90aW9uLnR4dAkvKnZfYSkqCit2X2E8CW1vdGlvbi50eHQJLyp2X2E8Kgordl9hPgltb3Rpb24udHh0CS8qdl9hPioKK3ZfYUIJbW90aW9uLnR4dAkvKnZfYUIqCit2X2FXCW1vdGlvbi50eHQJLyp2X2FXKgordl9hWwltb3Rpb24udHh0CS8qdl9hWyoKK3ZfYV0JbW90aW9uLnR4dAkvKnZfYV0qCit2X2FiCW1vdGlvbi50eHQJLyp2X2FiKgordl9hcAltb3Rpb24udHh0CS8qdl9hcCoKK3ZfYXMJbW90aW9uLnR4dAkvKnZfYXMqCit2X2F3CW1vdGlvbi50eHQJLyp2X2F3Kgordl9hewltb3Rpb24udHh0CS8qdl9heyoKK3ZfYX0JbW90aW9uLnR4dAkvKnZfYX0qCit2X2JfPAl2aXN1YWwudHh0CS8qdl9iXzwqCit2X2JfPF9leGFtcGxlCXZpc3VhbC50eHQJLyp2X2JfPF9leGFtcGxlKgordl9iXz4JdmlzdWFsLnR4dAkvKnZfYl8+Kgordl9iXz5fZXhhbXBsZQl2aXN1YWwudHh0CS8qdl9iXz5fZXhhbXBsZSoKK3ZfYl9BCXZpc3VhbC50eHQJLyp2X2JfQSoKK3ZfYl9BX2V4YW1wbGUJdmlzdWFsLnR4dAkvKnZfYl9BX2V4YW1wbGUqCit2X2JfQwl2aXN1YWwudHh0CS8qdl9iX0MqCit2X2JfRAljaGFuZ2UudHh0CS8qdl9iX0QqCit2X2JfSQl2aXN1YWwudHh0CS8qdl9iX0kqCit2X2JfSV9leGFtcGxlCXZpc3VhbC50eHQJLyp2X2JfSV9leGFtcGxlKgordl9iX2MJdmlzdWFsLnR4dAkvKnZfYl9jKgordl9iX3IJdmlzdWFsLnR4dAkvKnZfYl9yKgordl9iX3JfZXhhbXBsZQl2aXN1YWwudHh0CS8qdl9iX3JfZXhhbXBsZSoKK3ZfYwljaGFuZ2UudHh0CS8qdl9jKgordl9kCWNoYW5nZS50eHQJLyp2X2QqCit2X2c/CWNoYW5nZS50eHQJLyp2X2c/Kgordl9nSgljaGFuZ2UudHh0CS8qdl9nSioKK3ZfZ1YJdmlzdWFsLnR4dAkvKnZfZ1YqCit2X2ddCXRhZ3NyY2gudHh0CS8qdl9nXSoKK3ZfZ19DVFJMLUcJZWRpdGluZy50eHQJLyp2X2dfQ1RSTC1HKgordl9nX0NUUkwtXQl0YWdzcmNoLnR4dAkvKnZfZ19DVFJMLV0qCit2X2dmCWVkaXRpbmcudHh0CS8qdl9nZioKK3ZfZ3EJY2hhbmdlLnR4dAkvKnZfZ3EqCit2X2d2CXZpc3VhbC50eHQJLyp2X2d2Kgordl9pCW1vdGlvbi50eHQJLyp2X2kqCit2X2koCW1vdGlvbi50eHQJLyp2X2koKgordl9pKQltb3Rpb24udHh0CS8qdl9pKSoKK3ZfaTwJbW90aW9uLnR4dAkvKnZfaTwqCit2X2k+CW1vdGlvbi50eHQJLyp2X2k+Kgordl9pQgltb3Rpb24udHh0CS8qdl9pQioKK3ZfaVcJbW90aW9uLnR4dAkvKnZfaVcqCit2X2lbCW1vdGlvbi50eHQJLyp2X2lbKgordl9pXQltb3Rpb24udHh0CS8qdl9pXSoKK3ZfaWIJbW90aW9uLnR4dAkvKnZfaWIqCit2X2lwCW1vdGlvbi50eHQJLyp2X2lwKgordl9pcwltb3Rpb24udHh0CS8qdl9pcyoKK3ZfaXcJbW90aW9uLnR4dAkvKnZfaXcqCit2X2l7CW1vdGlvbi50eHQJLyp2X2l7Kgordl9pfQltb3Rpb24udHh0CS8qdl9pfSoKK3Zfbwl2aXN1YWwudHh0CS8qdl9vKgordl9wCWNoYW5nZS50eHQJLyp2X3AqCit2X3IJY2hhbmdlLnR4dAkvKnZfcioKK3ZfcwljaGFuZ2UudHh0CS8qdl9zKgordl91CWNoYW5nZS50eHQJLyp2X3UqCit2X3YJdmlzdWFsLnR4dAkvKnZfdioKK3ZfeAljaGFuZ2UudHh0CS8qdl94Kgordl95CWNoYW5nZS50eHQJLyp2X3kqCit2X34JY2hhbmdlLnR4dAkvKnZffioKK3ZhcmlhYmxlcwlldmFsLnR4dAkvKnZhcmlhYmxlcyoKK3ZhcmlvdXMJdmFyaW91cy50eHQJLyp2YXJpb3VzKgordmFyaW91cy1jbWRzCXZhcmlvdXMudHh0CS8qdmFyaW91cy1jbWRzKgordmFyaW91cy1tb3Rpb25zCW1vdGlvbi50eHQJLyp2YXJpb3VzLW1vdGlvbnMqCit2YXJpb3VzLnR4dAl2YXJpb3VzLnR4dAkvKnZhcmlvdXMudHh0KgordmItc3ludGF4CXN5bnRheC50eHQJLyp2Yi1zeW50YXgqCit2Yi52aW0Jc3ludGF4LnR4dAkvKnZiLnZpbSoKK3ZlcmJvc2UJc3RhcnRpbmcudHh0CS8qdmVyYm9zZSoKK3Zlcmlsb2ctaW5kZW50CWluZGVudC50eHQJLyp2ZXJpbG9nLWluZGVudCoKK3ZlcnNpb24tNS4xCXZlcnNpb241LnR4dAkvKnZlcnNpb24tNS4xKgordmVyc2lvbi01LjIJdmVyc2lvbjUudHh0CS8qdmVyc2lvbi01LjIqCit2ZXJzaW9uLTUuMwl2ZXJzaW9uNS50eHQJLyp2ZXJzaW9uLTUuMyoKK3ZlcnNpb24tNS40CXZlcnNpb241LnR4dAkvKnZlcnNpb24tNS40KgordmVyc2lvbi01LjUJdmVyc2lvbjUudHh0CS8qdmVyc2lvbi01LjUqCit2ZXJzaW9uLTUuNgl2ZXJzaW9uNS50eHQJLyp2ZXJzaW9uLTUuNioKK3ZlcnNpb24tNS43CXZlcnNpb241LnR4dAkvKnZlcnNpb24tNS43KgordmVyc2lvbi01LjgJdmVyc2lvbjUudHh0CS8qdmVyc2lvbi01LjgqCit2ZXJzaW9uLTYuMQl2ZXJzaW9uNi50eHQJLyp2ZXJzaW9uLTYuMSoKK3ZlcnNpb24tNi4yCXZlcnNpb242LnR4dAkvKnZlcnNpb24tNi4yKgordmVyc2lvbi02LjMJdmVyc2lvbjYudHh0CS8qdmVyc2lvbi02LjMqCit2ZXJzaW9uLXZhcmlhYmxlCWV2YWwudHh0CS8qdmVyc2lvbi12YXJpYWJsZSoKK3ZlcnNpb240LnR4dAl2ZXJzaW9uNC50eHQJLyp2ZXJzaW9uNC50eHQqCit2ZXJzaW9uNS50eHQJdmVyc2lvbjUudHh0CS8qdmVyc2lvbjUudHh0KgordmVyc2lvbjYudHh0CXZlcnNpb242LnR4dAkvKnZlcnNpb242LnR4dCoKK3ZpLWRpZmZlcmVuY2VzCXZpX2RpZmYudHh0CS8qdmktZGlmZmVyZW5jZXMqCit2aToJb3B0aW9ucy50eHQJLyp2aToqCit2aV9kaWZmLnR4dAl2aV9kaWZmLnR4dAkvKnZpX2RpZmYudHh0KgordmlldwlzdGFydGluZy50eHQJLyp2aWV3Kgordmlldy1kaWZmcwlkaWZmLnR4dAkvKnZpZXctZGlmZnMqCit2aWV3LWZpbGUJc3RhcnRpbmcudHh0CS8qdmlldy1maWxlKgordmlld3Mtc2Vzc2lvbnMJc3RhcnRpbmcudHh0CS8qdmlld3Mtc2Vzc2lvbnMqCit2aW0tYWRkaXRpb25zCXZpX2RpZmYudHh0CS8qdmltLWFkZGl0aW9ucyoKK3ZpbS1hbm5vdW5jZQlpbnRyby50eHQJLyp2aW0tYW5ub3VuY2UqCit2aW0tYXJndW1lbnRzCXN0YXJ0aW5nLnR4dAkvKnZpbS1hcmd1bWVudHMqCit2aW0tZGVmYXVsdC1lZGl0b3IJZ3VpX3czMi50eHQJLyp2aW0tZGVmYXVsdC1lZGl0b3IqCit2aW0tZGV2CWludHJvLnR4dAkvKnZpbS1kZXYqCit2aW0tbWFjCWludHJvLnR4dAkvKnZpbS1tYWMqCit2aW0tbW9kZXMJaW50cm8udHh0CS8qdmltLW1vZGVzKgordmltLW1vZGVzLWludHJvCWludHJvLnR4dAkvKnZpbS1tb2Rlcy1pbnRybyoKK3ZpbS1tdWx0aWJ5dGUJaW50cm8udHh0CS8qdmltLW11bHRpYnl0ZSoKK3ZpbS1zY3JpcHQtaW50cm8JdXNyXzQxLnR4dAkvKnZpbS1zY3JpcHQtaW50cm8qCit2aW0tc3ludGF4CXN5bnRheC50eHQJLyp2aW0tc3ludGF4KgordmltLXZhcmlhYmxlCWV2YWwudHh0CS8qdmltLXZhcmlhYmxlKgordmltLnZpbQlzeW50YXgudHh0CS8qdmltLnZpbSoKK3ZpbToJb3B0aW9ucy50eHQJLyp2aW06KgordmltZGV2CWludHJvLnR4dAkvKnZpbWRldioKK3ZpbWRpZmYJZGlmZi50eHQJLyp2aW1kaWZmKgordmltZmlsZXMJb3B0aW9ucy50eHQJLyp2aW1maWxlcyoKK3ZpbWluZm8Jc3RhcnRpbmcudHh0CS8qdmltaW5mbyoKK3ZpbWluZm8tZW5jb2RpbmcJc3RhcnRpbmcudHh0CS8qdmltaW5mby1lbmNvZGluZyoKK3ZpbWluZm8tZXJyb3JzCXN0YXJ0aW5nLnR4dAkvKnZpbWluZm8tZXJyb3JzKgordmltaW5mby1maWxlCXN0YXJ0aW5nLnR4dAkvKnZpbWluZm8tZmlsZSoKK3ZpbWluZm8tZmlsZS1tYXJrcwlzdGFydGluZy50eHQJLyp2aW1pbmZvLWZpbGUtbWFya3MqCit2aW1pbmZvLWZpbGUtbmFtZQlzdGFydGluZy50eHQJLyp2aW1pbmZvLWZpbGUtbmFtZSoKK3ZpbWluZm8tcmVhZAlzdGFydGluZy50eHQJLyp2aW1pbmZvLXJlYWQqCit2aW1pbmZvLXdyaXRlCXN0YXJ0aW5nLnR4dAkvKnZpbWluZm8td3JpdGUqCit2aW1yYwlzdGFydGluZy50eHQJLyp2aW1yYyoKK3ZpbXJjLWZpbGV0eXBlCXVzcl8wNS50eHQJLyp2aW1yYy1maWxldHlwZSoKK3ZpbXJjLWludHJvCXVzcl8wNS50eHQJLyp2aW1yYy1pbnRybyoKK3ZpbXJjX2V4YW1wbGUudmltCXVzcl8wNS50eHQJLyp2aW1yY19leGFtcGxlLnZpbSoKK3ZpbXR1dG9yCXVzcl8wMS50eHQJLyp2aW10dXRvcioKK3ZpcnRjb2woKQlldmFsLnR4dAkvKnZpcnRjb2woKSoKK3Zpc3VhbC1ibG9jawl2aXN1YWwudHh0CS8qdmlzdWFsLWJsb2NrKgordmlzdWFsLWNoYW5nZQl2aXN1YWwudHh0CS8qdmlzdWFsLWNoYW5nZSoKK3Zpc3VhbC1leGFtcGxlcwl2aXN1YWwudHh0CS8qdmlzdWFsLWV4YW1wbGVzKgordmlzdWFsLWluZGV4CWluZGV4LnR4dAkvKnZpc3VhbC1pbmRleCoKK3Zpc3VhbC1tb2RlCXZpc3VhbC50eHQJLyp2aXN1YWwtbW9kZSoKK3Zpc3VhbC1vcGVyYXRvcnMJdmlzdWFsLnR4dAkvKnZpc3VhbC1vcGVyYXRvcnMqCit2aXN1YWwtcmVwZWF0CXZpc3VhbC50eHQJLyp2aXN1YWwtcmVwZWF0KgordmlzdWFsLXNlYXJjaAl2aXN1YWwudHh0CS8qdmlzdWFsLXNlYXJjaCoKK3Zpc3VhbC1zdGFydAl2aXN1YWwudHh0CS8qdmlzdWFsLXN0YXJ0KgordmlzdWFsLXVzZQl2aXN1YWwudHh0CS8qdmlzdWFsLXVzZSoKK3Zpc3VhbC50eHQJdmlzdWFsLnR4dAkvKnZpc3VhbC50eHQqCit2aXN1YWxtb2RlKCkJZXZhbC50eHQJLyp2aXN1YWxtb2RlKCkqCit2bXMJb3Nfdm1zLnR4dAkvKnZtcyoKK3Ztcy1hdXRob3JzCW9zX3Ztcy50eHQJLyp2bXMtYXV0aG9ycyoKK3Ztcy1jaGFuZ2VzCW9zX3Ztcy50eHQJLyp2bXMtY2hhbmdlcyoKK3Ztcy1jb21waWxpbmcJb3Nfdm1zLnR4dAkvKnZtcy1jb21waWxpbmcqCit2bXMtZGVwbG95CW9zX3Ztcy50eHQJLyp2bXMtZGVwbG95Kgordm1zLWRvd25sb2FkCW9zX3Ztcy50eHQJLyp2bXMtZG93bmxvYWQqCit2bXMtZ3VpCW9zX3Ztcy50eHQJLyp2bXMtZ3VpKgordm1zLW5vdGVzCW9zX3Ztcy50eHQJLyp2bXMtbm90ZXMqCit2bXMtcHJvYmxlbXMJb3Nfdm1zLnR4dAkvKnZtcy1wcm9ibGVtcyoKK3Ztcy1zdGFydGVkCW9zX3Ztcy50eHQJLyp2bXMtc3RhcnRlZCoKK3Ztcy11c2FnZQlvc192bXMudHh0CS8qdm1zLXVzYWdlKgordm90ZS1mb3ItZmVhdHVyZXMJc3BvbnNvci50eHQJLyp2b3RlLWZvci1mZWF0dXJlcyoKK3ZvdGVzLWNvdW50ZWQJc3BvbnNvci50eHQJLyp2b3Rlcy1jb3VudGVkKgordm90ZXMtZm9yLWNoYW5nZXMJdG9kby50eHQJLyp2b3Rlcy1mb3ItY2hhbmdlcyoKK3ZyZXBsYWNlLW1vZGUJaW5zZXJ0LnR4dAkvKnZyZXBsYWNlLW1vZGUqCit2dDEwMC1jdXJzb3Ita2V5cwl0ZXJtLnR4dAkvKnZ0MTAwLWN1cnNvci1rZXlzKgordnQxMDAtZnVuY3Rpb24ta2V5cwl0ZXJtLnR4dAkvKnZ0MTAwLWZ1bmN0aW9uLWtleXMqCit3CW1vdGlvbi50eHQJLyp3KgordzMyLWNsaWVudHNlcnZlcglyZW1vdGUudHh0CS8qdzMyLWNsaWVudHNlcnZlcioKK3c6dmFyCWV2YWwudHh0CS8qdzp2YXIqCit3YXJuaW5nbXNnLXZhcmlhYmxlCWV2YWwudHh0CS8qd2FybmluZ21zZy12YXJpYWJsZSoKK3doaXRlLXNwYWNlCXBhdHRlcm4udHh0CS8qd2hpdGUtc3BhY2UqCit3aGl0ZXNwYWNlCXBhdHRlcm4udHh0CS8qd2hpdGVzcGFjZSoKK3dpbjE2LSFzdGFydAlndWlfdzE2LnR4dAkvKndpbjE2LSFzdGFydCoKK3dpbjE2LWNsaXBib2FyZAlndWlfdzE2LnR4dAkvKndpbjE2LWNsaXBib2FyZCoKK3dpbjE2LWNvbG9ycwlndWlfdzE2LnR4dAkvKndpbjE2LWNvbG9ycyoKK3dpbjE2LWRlZmF1bHQtZWRpdG9yCWd1aV93MTYudHh0CS8qd2luMTYtZGVmYXVsdC1lZGl0b3IqCit3aW4xNi1kaWFsb2dzCWd1aV93MTYudHh0CS8qd2luMTYtZGlhbG9ncyoKK3dpbjE2LWRyYWctbi1kcm9wCWd1aV93MTYudHh0CS8qd2luMTYtZHJhZy1uLWRyb3AqCit3aW4xNi1ndWkJZ3VpX3cxNi50eHQJLyp3aW4xNi1ndWkqCit3aW4xNi1tYXhpbWl6ZWQJZ3VpX3cxNi50eHQJLyp3aW4xNi1tYXhpbWl6ZWQqCit3aW4xNi1wcmludGluZwlndWlfdzE2LnR4dAkvKndpbjE2LXByaW50aW5nKgord2luMTYtc2hlbGwJZ3VpX3cxNi50eHQJLyp3aW4xNi1zaGVsbCoKK3dpbjE2LXN0YXJ0CWd1aV93MTYudHh0CS8qd2luMTYtc3RhcnQqCit3aW4xNi10cnVldHlwZQlndWlfdzE2LnR4dAkvKndpbjE2LXRydWV0eXBlKgord2luMTYtdmFyaW91cwlndWlfdzE2LnR4dAkvKndpbjE2LXZhcmlvdXMqCit3aW4zMglvc193aW4zMi50eHQJLyp3aW4zMioKK3dpbjMyLSFzdGFydAlndWlfdzMyLnR4dAkvKndpbjMyLSFzdGFydCoKK3dpbjMyLWNvbG9ycwlndWlfdzMyLnR4dAkvKndpbjMyLWNvbG9ycyoKK3dpbjMyLWNvbXBpbGluZwlvc193aW4zMi50eHQJLyp3aW4zMi1jb21waWxpbmcqCit3aW4zMi1jdXJkaXIJb3Nfd2luMzIudHh0CS8qd2luMzItY3VyZGlyKgord2luMzItZmFxCW9zX3dpbjMyLnR4dAkvKndpbjMyLWZhcSoKK3dpbjMyLWdldHRleHQJbWxhbmcudHh0CS8qd2luMzItZ2V0dGV4dCoKK3dpbjMyLWd1aQlndWlfdzMyLnR4dAkvKndpbjMyLWd1aSoKK3dpbjMyLWhpZGRlbi1tZW51cwlndWkudHh0CS8qd2luMzItaGlkZGVuLW1lbnVzKgord2luMzItbW91c2UJb3Nfd2luMzIudHh0CS8qd2luMzItbW91c2UqCit3aW4zMi1vcGVuLXdpdGgtbWVudQlndWlfdzMyLnR4dAkvKndpbjMyLW9wZW4td2l0aC1tZW51Kgord2luMzItcG9wdXAtbWVudQlndWlfdzMyLnR4dAkvKndpbjMyLXBvcHVwLW1lbnUqCit3aW4zMi1wcm9ibGVtcwlvc193aW4zMi50eHQJLyp3aW4zMi1wcm9ibGVtcyoKK3dpbjMyLXJlc3RvcmUJb3Nfd2luMzIudHh0CS8qd2luMzItcmVzdG9yZSoKK3dpbjMyLXN0YXJ0dXAJb3Nfd2luMzIudHh0CS8qd2luMzItc3RhcnR1cCoKK3dpbjMyLXRlcm0Jb3Nfd2luMzIudHh0CS8qd2luMzItdGVybSoKK3dpbjMyLXZpbXJ1bglndWlfdzMyLnR4dAkvKndpbjMyLXZpbXJ1bioKK3dpbjMyLXdpbjMuMQlvc193aW4zMi50eHQJLyp3aW4zMi13aW4zLjEqCit3aW4zMnMJb3Nfd2luMzIudHh0CS8qd2luMzJzKgord2luYnVmbnIoKQlldmFsLnR4dAkvKndpbmJ1Zm5yKCkqCit3aW5jb2woKQlldmFsLnR4dAkvKndpbmNvbCgpKgord2luZG93LWNvbnRlbnRzCWludHJvLnR4dAkvKndpbmRvdy1jb250ZW50cyoKK3dpbmRvdy1leGl0CWVkaXRpbmcudHh0CS8qd2luZG93LWV4aXQqCit3aW5kb3ctbW92ZS1jdXJzb3IJd2luZG93cy50eHQJLyp3aW5kb3ctbW92ZS1jdXJzb3IqCit3aW5kb3ctbW92aW5nCXdpbmRvd3MudHh0CS8qd2luZG93LW1vdmluZyoKK3dpbmRvdy1yZXNpemUJd2luZG93cy50eHQJLyp3aW5kb3ctcmVzaXplKgord2luZG93LXNpemUJdGVybS50eHQJLyp3aW5kb3ctc2l6ZSoKK3dpbmRvdy10YWcJd2luZG93cy50eHQJLyp3aW5kb3ctdGFnKgord2luZG93LXZhcmlhYmxlCWV2YWwudHh0CS8qd2luZG93LXZhcmlhYmxlKgord2luZG93cwl3aW5kb3dzLnR4dAkvKndpbmRvd3MqCit3aW5kb3dzLTMuMQlvc193aW4zMi50eHQJLyp3aW5kb3dzLTMuMSoKK3dpbmRvd3MtaW50cm8Jd2luZG93cy50eHQJLyp3aW5kb3dzLWludHJvKgord2luZG93cy1zdGFydGluZwl3aW5kb3dzLnR4dAkvKndpbmRvd3Mtc3RhcnRpbmcqCit3aW5kb3dzLnR4dAl3aW5kb3dzLnR4dAkvKndpbmRvd3MudHh0Kgord2luZG93czk1CW9zX3dpbjMyLnR4dAkvKndpbmRvd3M5NSoKK3dpbmhlaWdodCgpCWV2YWwudHh0CS8qd2luaGVpZ2h0KCkqCit3aW5saW5lKCkJZXZhbC50eHQJLyp3aW5saW5lKCkqCit3aW5ucigpCWV2YWwudHh0CS8qd2lubnIoKSoKK3dpbnJlc3RjbWQoKQlldmFsLnR4dAkvKndpbnJlc3RjbWQoKSoKK3dpbndpZHRoKCkJZXZhbC50eHQJLyp3aW53aWR0aCgpKgord29yZAltb3Rpb24udHh0CS8qd29yZCoKK3dvcmQtY291bnQJZWRpdGluZy50eHQJLyp3b3JkLWNvdW50Kgord29yZC1tb3Rpb25zCW1vdGlvbi50eHQJLyp3b3JkLW1vdGlvbnMqCit3b3JrYmVuY2gJc3RhcnRpbmcudHh0CS8qd29ya2JlbmNoKgord29ya3Nob3AJd29ya3Nob3AudHh0CS8qd29ya3Nob3AqCit3b3Jrc2hvcC1jb21tYW5kcwl3b3Jrc2hvcC50eHQJLyp3b3Jrc2hvcC1jb21tYW5kcyoKK3dvcmtzaG9wLWNvbXBpbGluZwl3b3Jrc2hvcC50eHQJLyp3b3Jrc2hvcC1jb21waWxpbmcqCit3b3Jrc2hvcC1jb25maWd1cmUJd29ya3Nob3AudHh0CS8qd29ya3Nob3AtY29uZmlndXJlKgord29ya3Nob3AtaW50cm8Jd29ya3Nob3AudHh0CS8qd29ya3Nob3AtaW50cm8qCit3b3Jrc2hvcC1zdXBwb3J0CXdvcmtzaG9wLnR4dAkvKndvcmtzaG9wLXN1cHBvcnQqCit3b3Jrc2hvcC14cG0Jd29ya3Nob3AudHh0CS8qd29ya3Nob3AteHBtKgord29ya3Nob3AudHh0CXdvcmtzaG9wLnR4dAkvKndvcmtzaG9wLnR4dCoKK3dyYXAtb2ZmCWludHJvLnR4dAkvKndyYXAtb2ZmKgord3JpdGUtY29tcGlsZXItcGx1Z2luCXVzcl80MS50eHQJLyp3cml0ZS1jb21waWxlci1wbHVnaW4qCit3cml0ZS1kZXZpY2UJZWRpdGluZy50eHQJLyp3cml0ZS1kZXZpY2UqCit3cml0ZS1mYWlsCWVkaXRpbmcudHh0CS8qd3JpdGUtZmFpbCoKK3dyaXRlLWZpbGV0eXBlLXBsdWdpbgl1c3JfNDEudHh0CS8qd3JpdGUtZmlsZXR5cGUtcGx1Z2luKgord3JpdGUtbG9jYWwtaGVscAl1c3JfNDEudHh0CS8qd3JpdGUtbG9jYWwtaGVscCoKK3dyaXRlLXBsdWdpbgl1c3JfNDEudHh0CS8qd3JpdGUtcGx1Z2luKgord3JpdGUtcXVpdAllZGl0aW5nLnR4dAkvKndyaXRlLXF1aXQqCit3cml0ZS1yZWFkb25seQllZGl0aW5nLnR4dAkvKndyaXRlLXJlYWRvbmx5Kgord3JpdGluZwllZGl0aW5nLnR4dAkvKndyaXRpbmcqCit3d3cJaW50cm8udHh0CS8qd3d3KgoreAljaGFuZ2UudHh0CS8qeCoKK3gtaW5wdXQtbWV0aG9kCW1ieXRlLnR4dAkvKngtaW5wdXQtbWV0aG9kKgoreC1yZXNvdXJjZXMJdmVyc2lvbjUudHh0CS8qeC1yZXNvdXJjZXMqCit4MTEtY2xpZW50c2VydmVyCXJlbW90ZS50eHQJLyp4MTEtY2xpZW50c2VydmVyKgoreDExLWN1dC1idWZmZXIJZ3VpX3gxMS50eHQJLyp4MTEtY3V0LWJ1ZmZlcioKK3gxMS1zZWxlY3Rpb24JZ3VpX3gxMS50eHQJLyp4MTEtc2VsZWN0aW9uKgoreGY4NmNvbmYtc3ludGF4CXN5bnRheC50eHQJLyp4Zjg2Y29uZi1zeW50YXgqCit4Zjg2Y29uZi52aW0Jc3ludGF4LnR4dAkvKnhmODZjb25mLnZpbSoKK3hmb250c2V0CW1ieXRlLnR4dAkvKnhmb250c2V0KgoreGZyZWUteHRlcm0Jc3ludGF4LnR4dAkvKnhmcmVlLXh0ZXJtKgoreGltCW1ieXRlLnR4dAkvKnhpbSoKK3hpbS1pbnB1dC1zdHlsZQltYnl0ZS50eHQJLyp4aW0taW5wdXQtc3R5bGUqCit4aXRlcm0Jc3ludGF4LnR4dAkvKnhpdGVybSoKK3htbC1mb2xkaW5nCXN5bnRheC50eHQJLyp4bWwtZm9sZGluZyoKK3htbC1zeW50YXgJc3ludGF4LnR4dAkvKnhtbC1zeW50YXgqCit4bWwudmltCXN5bnRheC50eHQJLyp4bWwudmltKgoreHBtLXN5bnRheAlzeW50YXgudHh0CS8qeHBtLXN5bnRheCoKK3hwbS52aW0Jc3ludGF4LnR4dAkvKnhwbS52aW0qCit4dGVybS04LWJpdAl0ZXJtLnR4dAkvKnh0ZXJtLTgtYml0KgoreHRlcm0tOGJpdAl0ZXJtLnR4dAkvKnh0ZXJtLThiaXQqCit4dGVybS1ibGluawlzeW50YXgudHh0CS8qeHRlcm0tYmxpbmsqCit4dGVybS1ibGlua2luZy1jdXJzb3IJc3ludGF4LnR4dAkvKnh0ZXJtLWJsaW5raW5nLWN1cnNvcioKK3h0ZXJtLWNsaXBib2FyZAl0ZXJtLnR4dAkvKnh0ZXJtLWNsaXBib2FyZCoKK3h0ZXJtLWNvZGVzCXRlcm0udHh0CS8qeHRlcm0tY29kZXMqCit4dGVybS1jb2xvcglzeW50YXgudHh0CS8qeHRlcm0tY29sb3IqCit4dGVybS1jb21tYW5kLXNlcnZlcgl0ZXJtLnR4dAkvKnh0ZXJtLWNvbW1hbmQtc2VydmVyKgoreHRlcm0tY29weS1wYXN0ZQl0ZXJtLnR4dAkvKnh0ZXJtLWNvcHktcGFzdGUqCit4dGVybS1jdXJzb3Ita2V5cwl0ZXJtLnR4dAkvKnh0ZXJtLWN1cnNvci1rZXlzKgoreHRlcm0tZW5kLWhvbWUta2V5cwl0ZXJtLnR4dAkvKnh0ZXJtLWVuZC1ob21lLWtleXMqCit4dGVybS1mdW5jdGlvbi1rZXlzCXRlcm0udHh0CS8qeHRlcm0tZnVuY3Rpb24ta2V5cyoKK3h0ZXJtLW1vdXNlCW9wdGlvbnMudHh0CS8qeHRlcm0tbW91c2UqCit4dGVybS1tb3VzZS13aGVlbAlzY3JvbGwudHh0CS8qeHRlcm0tbW91c2Utd2hlZWwqCit4dGVybS1zYXZlLXNjcmVlbgl0aXBzLnR4dAkvKnh0ZXJtLXNhdmUtc2NyZWVuKgoreHRlcm0tc2NyZWVucwl0aXBzLnR4dAkvKnh0ZXJtLXNjcmVlbnMqCit4dGVybS1zY3JvbGwtcmVnaW9uCXRlcm0udHh0CS8qeHRlcm0tc2Nyb2xsLXJlZ2lvbioKK3h0ZXJtLXNoaWZ0ZWQta2V5cwl0ZXJtLnR4dAkvKnh0ZXJtLXNoaWZ0ZWQta2V5cyoKK3kJY2hhbmdlLnR4dAkvKnkqCit5YW5rCWNoYW5nZS50eHQJLyp5YW5rKgoreWUtb3B0aW9uLWdvbmUJdmVyc2lvbjQudHh0CS8qeWUtb3B0aW9uLWdvbmUqCit5ZWFyLTIwMDAJaW50cm8udHh0CS8qeWVhci0yMDAwKgoreW91ci1ydW50aW1lLWRpcgl1c3JfNDMudHh0CS8qeW91ci1ydW50aW1lLWRpcioKK3l5CWNoYW5nZS50eHQJLyp5eSoKK3oJaW5kZXgudHh0CS8qeioKK3orCXNjcm9sbC50eHQJLyp6KyoKK3otCXNjcm9sbC50eHQJLyp6LSoKK3ouCXNjcm9sbC50eHQJLyp6LioKK3ovT1MJb3NfMzkwLnR4dAkvKnpcL09TKgorejxDUj4Jc2Nyb2xsLnR4dAkvKno8Q1I+KgorejxMZWZ0PglzY3JvbGwudHh0CS8qejxMZWZ0PioKK3o8UmlnaHQ+CXNjcm9sbC50eHQJLyp6PFJpZ2h0PioKK3pBCWZvbGQudHh0CS8qekEqCit6Qwlmb2xkLnR4dAkvKnpDKgorekQJZm9sZC50eHQJLyp6RCoKK3pFCWZvbGQudHh0CS8qekUqCit6Rglmb2xkLnR4dAkvKnpGKgorekgJc2Nyb2xsLnR4dAkvKnpIKgorekwJc2Nyb2xsLnR4dAkvKnpMKgorek0JZm9sZC50eHQJLyp6TSoKK3pOCWZvbGQudHh0CS8qek4qCit6TjxDUj4Jc2Nyb2xsLnR4dAkvKnpOPENSPioKK3pPCWZvbGQudHh0CS8qek8qCit6T1MJb3NfMzkwLnR4dAkvKnpPUyoKK3pPUy1CdWdzCW9zXzM5MC50eHQJLyp6T1MtQnVncyoKK3pPUy1Nb3RpZglvc18zOTAudHh0CS8qek9TLU1vdGlmKgorek9TLWJ1aWxkaW5nCW9zXzM5MC50eHQJLyp6T1MtYnVpbGRpbmcqCit6T1MtY2hhbmdlcwlvc18zOTAudHh0CS8qek9TLWNoYW5nZXMqCit6T1MtZmVlZGJhY2sJb3NfMzkwLnR4dAkvKnpPUy1mZWVkYmFjayoKK3pPUy1oYXMtZWJjZGljCW9zXzM5MC50eHQJLyp6T1MtaGFzLWViY2RpYyoKK3pPUy1vcGVuLXNvdXJjZQlvc18zOTAudHh0CS8qek9TLW9wZW4tc291cmNlKgorek9TLXdlYWtuZXNzZXMJb3NfMzkwLnR4dAkvKnpPUy13ZWFrbmVzc2VzKgorek9TLXh0ZXJtCW9zXzM5MC50eHQJLyp6T1MteHRlcm0qCit6Uglmb2xkLnR4dAkvKnpSKgorelgJZm9sZC50eHQJLyp6WCoKK3peCXNjcm9sbC50eHQJLyp6XioKK3phCWZvbGQudHh0CS8qemEqCit6YglzY3JvbGwudHh0CS8qemIqCit6Ywlmb2xkLnR4dAkvKnpjKgoremQJZm9sZC50eHQJLyp6ZCoKK3plCXNjcm9sbC50eHQJLyp6ZSoKK3pmCWZvbGQudHh0CS8qemYqCit6aAlzY3JvbGwudHh0CS8qemgqCit6aQlmb2xkLnR4dAkvKnppKgoremoJZm9sZC50eHQJLyp6aioKK3prCWZvbGQudHh0CS8qemsqCit6bAlzY3JvbGwudHh0CS8qemwqCit6bQlmb2xkLnR4dAkvKnptKgorem4JZm9sZC50eHQJLyp6bioKK3pvCWZvbGQudHh0CS8qem8qCit6cglmb2xkLnR4dAkvKnpyKgorenMJc2Nyb2xsLnR4dAkvKnpzKgorenQJc2Nyb2xsLnR4dAkvKnp0KgorenYJZm9sZC50eHQJLyp6dioKK3p4CWZvbGQudHh0CS8qengqCit6eglzY3JvbGwudHh0CS8qenoqCit7CW1vdGlvbi50eHQJLyp7Kgore1Zpc3VhbH0JaW50cm8udHh0CS8qe1Zpc3VhbH0qCit7YWRkcmVzc30JY21kbGluZS50eHQJLyp7YWRkcmVzc30qCit7Y2hhcjEtY2hhcjJ9CWludHJvLnR4dAkvKntjaGFyMS1jaGFyMn0qCit7ZXZlbnR9CWF1dG9jbWQudHh0CS8qe2V2ZW50fSoKK3tmaWxlfQllZGl0aW5nLnR4dAkvKntmaWxlfSoKK3tncm91cC1uYW1lfQlzeW50YXgudHh0CS8qe2dyb3VwLW5hbWV9Kgore2xoc30JbWFwLnR4dAkvKntsaHN9Kgore21vdGlvbn0JaW50cm8udHh0CS8qe21vdGlvbn0qCit7bW92ZS1hcm91bmR9CXZpc3VhbC50eHQJLyp7bW92ZS1hcm91bmR9Kgore29mZnNldH0JcGF0dGVybi50eHQJLyp7b2Zmc2V0fSoKK3twYXR9CWF1dG9jbWQudHh0CS8qe3BhdH0qCit7cmhzfQltYXAudHh0CS8qe3Joc30qCit7c3ViamVjdH0JdmFyaW91cy50eHQJLyp7c3ViamVjdH0qCit7fQlpbnRyby50eHQJLyp7fSoKK30JbW90aW9uLnR4dAkvKn0qCit+CWNoYW5nZS50eHQJLyp+KgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdGFnc3JjaC50eHQgYi9ydW50aW1lL2RvYy90YWdzcmNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzg3ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdGFnc3JjaC50eHQKQEAgLTAsMCArMSw4MDkgQEAKKyp0YWdzcmNoLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitUYWdzIGFuZCBzcGVjaWFsIHNlYXJjaGVzCQkJCSp0YWdzLWFuZC1zZWFyY2hlcyoKKworU2VlIHNlY3Rpb24gfDI5LjF8IG9mIHRoZSB1c2VyIG1hbnVhbCBmb3IgYW4gaW50cm9kdWN0aW9uLgorCisxLiBKdW1wIHRvIGEgdGFnCQl8dGFnLWNvbW1hbmRzfAorMi4gVGFnIHN0YWNrCQkJfHRhZy1zdGFja3wKKzMuIFRhZyBtYXRjaCBsaXN0CQl8dGFnLW1hdGNobGlzdHwKKzQuIFRhZ3MgZGV0YWlscwkJCXx0YWctZGV0YWlsc3wKKzUuIFRhZ3MgZmlsZSBmb3JtYXQJCXx0YWdzLWZpbGUtZm9ybWF0fAorNi4gSW5jbHVkZSBmaWxlIHNlYXJjaGVzCXxpbmNsdWRlLXNlYXJjaHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBKdW1wIHRvIGEgdGFnCQkJCQkqdGFnLWNvbW1hbmRzKgorCisJCQkJCQkJKnRhZyogKnRhZ3MqCitBIHRhZyBpcyBhbiBpZGVudGlmaWVyIHRoYXQgYXBwZWFycyBpbiBhICJ0YWdzIiBmaWxlLiAgSXQgaXMgYSBzb3J0IG9mIGxhYmVsCit0aGF0IGNhbiBiZSBqdW1wZWQgdG8uICBGb3IgZXhhbXBsZTogSW4gQyBwcm9ncmFtcyBlYWNoIGZ1bmN0aW9uIG5hbWUgY2FuIGJlCit1c2VkIGFzIGEgdGFnLiAgVGhlICJ0YWdzIiBmaWxlIGhhcyB0byBiZSBnZW5lcmF0ZWQgYnkgYSBwcm9ncmFtIGxpa2UgY3RhZ3MsCitiZWZvcmUgdGhlIHRhZyBjb21tYW5kcyBjYW4gYmUgdXNlZC4KKworV2l0aCB0aGUgIjp0YWciIGNvbW1hbmQgdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgb24gdGhlIHRhZy4gIFdpdGggdGhlCitDVFJMLV0gY29tbWFuZCwgdGhlIGtleXdvcmQgb24gd2hpY2ggdGhlIGN1cnNvciBpcyBzdGFuZGluZyBpcyB1c2VkIGFzIHRoZQordGFnLiAgSWYgdGhlIGN1cnNvciBpcyBub3Qgb24gYSBrZXl3b3JkLCB0aGUgZmlyc3Qga2V5d29yZCB0byB0aGUgcmlnaHQgb2YgdGhlCitjdXJzb3IgaXMgdXNlZC4KKworVGhlICI6dGFnIiBjb21tYW5kIHdvcmtzIHZlcnkgd2VsbCBmb3IgQyBwcm9ncmFtcy4gIElmIHlvdSBzZWUgYSBjYWxsIHRvIGEKK2Z1bmN0aW9uIGFuZCB3b25kZXIgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMsIHBvc2l0aW9uIHRoZSBjdXJzb3IgaW5zaWRlIG9mIHRoZQorZnVuY3Rpb24gbmFtZSBhbmQgaGl0IENUUkwtXS4gIFRoaXMgd2lsbCBicmluZyB5b3UgdG8gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uCitBbiBlYXN5IHdheSBiYWNrIGlzIHdpdGggdGhlIENUUkwtVCBjb21tYW5kLiAgQWxzbyByZWFkIGFib3V0IHRoZSB0YWcgc3RhY2sKK2JlbG93LgorCisJCQkJCQkqOnRhKiAqOnRhZyogKkU0MjYqICpFNDI5KgorOnRhW2ddWyFdIHtpZGVudH0JSnVtcCB0byB0aGUgZGVmaW5pdGlvbiBvZiB7aWRlbnR9LCB1c2luZyB0aGUKKwkJCWluZm9ybWF0aW9uIGluIHRoZSB0YWdzIGZpbGUocykuICBQdXQge2lkZW50fSBpbiB0aGUKKwkJCXRhZyBzdGFjay4gIFNlZSB8dGFnLSF8IGZvciBbIV0uCisJCQl7aWRlbnR9IGNhbiBiZSBhIHJlZ2V4cCBwYXR0ZXJuLCBzZWUgfHRhZy1yZWdleHB8LgorCQkJV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGluZyB0YWdzIGZvciB7aWRlbnR9LCB0aGUKKwkJCWZpcnN0IG9uZSBpcyBqdW1wZWQgdG8uIHw6dG5leHR8LgorCitnPExlZnRNb3VzZT4JCQkJCQkqZzxMZWZ0TW91c2U+KgorPEMtTGVmdE1vdXNlPgkJCQkJKjxDLUxlZnRNb3VzZT4qICpDVFJMLV0qCitDVFJMLV0JCQlKdW1wIHRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBrZXl3b3JkIHVuZGVyIHRoZQorCQkJY3Vyc29yLiAgU2FtZSBhcyAiOnRhZyB7aWRlbnR9Iiwgd2hlcmUge2lkZW50fSBpcyB0aGUKKwkJCWtleXdvcmQgdW5kZXIgb3IgYWZ0ZXIgY3Vyc29yLiAge1ZpOiBpZGVudGlmaWVyIGFmdGVyCisJCQl0aGUgY3Vyc29yfQorCisJCQkJCQkJKnZfQ1RSTC1dKgore1Zpc3VhbH1DVFJMLV0JCVNhbWUgYXMgIjp0YWcge2lkZW50fSIsIHdoZXJlIHtpZGVudH0gaXMgdGhlIHRleHQgdGhhdAorCQkJaXMgaGlnaGxpZ2h0ZWQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKnRlbG5ldC1DVFJMLV0qCitDVFJMLV0gaXMgdGhlIGRlZmF1bHQgdGVsbmV0IGVzY2FwZSBrZXkuICBXaGVuIHlvdSB0eXBlIENUUkwtXSB0byBqdW1wIHRvIGEKK3RhZywgeW91IHdpbGwgZ2V0IHRoZSB0ZWxuZXQgcHJvbXB0IGluc3RlYWQuICBNb3N0IHZlcnNpb25zIG9mIHRlbG5ldCBhbGxvdworY2hhbmdpbmcgb3IgZGlzYWJsaW5nIHRoZSBkZWZhdWx0IGVzY2FwZSBrZXkuICBTZWUgdGhlIHRlbG5ldCBtYW4gcGFnZS4gIFlvdQorY2FuICd0ZWxuZXQgLUUge0hvc3RuYW1lfScgdG8gZGlzYWJsZSB0aGUgZXNjYXBlIGNoYXJhY3Rlciwgb3IgJ3RlbG5ldCAtZQore0VzY2FwZUNoYXJhY3Rlcn0ge0hvc3RuYW1lfScgdG8gc3BlY2lmeSBhbm90aGVyIGVzY2FwZSBjaGFyYWN0ZXIuICBJZgorcG9zc2libGUsIHRyeSB0byB1c2UgInJzaCIgaW5zdGVhZCBvZiAidGVsbmV0IiB0byBhdm9pZCB0aGlzIHByb2JsZW0uCisKKwkJCQkJCQkqdGFnLXByaW9yaXR5KgorV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgbWF0Y2hlcyBmb3IgYSB0YWcsIHRoaXMgcHJpb3JpdHkgaXMgdXNlZDoKKzEuICJGU0MiICBBIGZ1bGwgbWF0Y2hpbmcgc3RhdGljIHRhZyBmb3IgdGhlIGN1cnJlbnQgZmlsZS4KKzIuICJGIEMiICBBIGZ1bGwgbWF0Y2hpbmcgZ2xvYmFsIHRhZyBmb3IgdGhlIGN1cnJlbnQgZmlsZS4KKzMuICJGICAiICBBIGZ1bGwgbWF0Y2hpbmcgZ2xvYmFsIHRhZyBmb3IgYW5vdGhlciBmaWxlLgorNC4gIkZTICIgIEEgZnVsbCBtYXRjaGluZyBzdGF0aWMgdGFnIGZvciBhbm90aGVyIGZpbGUuCis1LiAiIFNDIiAgQW4gaWdub3JlLWNhc2UgbWF0Y2hpbmcgc3RhdGljIHRhZyBmb3IgdGhlIGN1cnJlbnQgZmlsZS4KKzYuICIgIEMiICBBbiBpZ25vcmUtY2FzZSBtYXRjaGluZyBnbG9iYWwgdGFnIGZvciB0aGUgY3VycmVudCBmaWxlLgorNy4gIiAgICIgIEFuIGlnbm9yZS1jYXNlIG1hdGNoaW5nIGdsb2JhbCB0YWcgZm9yIGFub3RoZXIgZmlsZS4KKzguICIgUyAiICBBbiBpZ25vcmUtY2FzZSBtYXRjaGluZyBzdGF0aWMgdGFnIGZvciBhbm90aGVyIGZpbGUuCisKK05vdGUgdGhhdCB3aGVuIHRoZSBjdXJyZW50IGZpbGUgY2hhbmdlcywgdGhlIHByaW9yaXR5IGxpc3QgaXMgbW9zdGx5IG5vdAorY2hhbmdlZCwgdG8gYXZvaWQgY29uZnVzaW9uIHdoZW4gdXNpbmcgIjp0bmV4dCIuICBJdCBpcyBjaGFuZ2VkIHdoZW4gdXNpbmcKKyI6dGFnIHtpZGVudH0iLgorCitUaGUgaWdub3JlLWNhc2UgbWF0Y2hlcyBhcmUgbm90IGZvdW5kIGZvciBhICI6dGFnIiBjb21tYW5kIHdoZW4gdGhlCisnaWdub3JlY2FzZScgb3B0aW9uIGlzIG9mZi4gIFRoZXkgYXJlIGZvdW5kIHdoZW4gYSBwYXR0ZXJuIGlzIHVzZWQgKHN0YXJ0aW5nCit3aXRoIGEgIi8iKSBhbmQgZm9yICI6dHNlbGVjdCIsIGFsc28gd2hlbiAnaWdub3JlY2FzZScgaXMgb2ZmLiAgTm90ZSB0aGF0Cit1c2luZyBpZ25vcmUtY2FzZSB0YWcgc2VhcmNoaW5nIGRpc2FibGVzIGJpbmFyeSBzZWFyY2hpbmcgaW4gdGhlIHRhZ3MgZmlsZSwKK3doaWNoIGNhdXNlcyBhIHNsb3dkb3duLiAgVGhpcyBjYW4gYmUgYXZvaWRlZCBieSBmb2xkLWNhc2Ugc29ydGluZyB0aGUgdGFnCitmaWxlLiAgU2VlIHRoZSAndGFnYnNlYXJjaCcgb3B0aW9uIGZvciBhbiBleHBsYW5hdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBUYWcgc3RhY2sJCQkJKnRhZy1zdGFjayogKnRhZ3N0YWNrKiAqRTQyNSoKKworT24gdGhlIHRhZyBzdGFjayBpcyByZW1lbWJlcmVkIHdoaWNoIHRhZ3MgeW91IGp1bXBlZCB0bywgYW5kIGZyb20gd2hlcmUuCitUYWdzIGFyZSBvbmx5IHB1c2hlZCBvbnRvIHRoZSBzdGFjayB3aGVuIHRoZSAndGFnc3RhY2snIG9wdGlvbiBpcyBzZXQuCisKK2c8UmlnaHRNb3VzZT4JCQkJCQkqZzxSaWdodE1vdXNlPioKKzxDLVJpZ2h0TW91c2U+CQkJCQkqPEMtUmlnaHRNb3VzZT4qICpDVFJMLVQqCitDVFJMLVQJCQlKdW1wIHRvIFtjb3VudF0gb2xkZXIgZW50cnkgaW4gdGhlIHRhZyBzdGFjaworCQkJKGRlZmF1bHQgMSkuICB7bm90IGluIFZpfQorCisJCQkJCQkqOnBvKiAqOnBvcCogKkU1NTUqICpFNTU2KgorOltjb3VudF1wb1twXVshXQlKdW1wIHRvIFtjb3VudF0gb2xkZXIgZW50cnkgaW4gdGFnIHN0YWNrIChkZWZhdWx0IDEpLgorCQkJU2VlIHx0YWctIXwgZm9yIFshXS4gIHtub3QgaW4gVml9CisKKzpbY291bnRddGFbZ11bIV0JSnVtcCB0byBbY291bnRdIG5ld2VyIGVudHJ5IGluIHRhZyBzdGFjayAoZGVmYXVsdCAxKS4KKwkJCVNlZSB8dGFnLSF8IGZvciBbIV0uICB7bm90IGluIFZpfQorCisJCQkJCQkJKjp0YWdzKgorOnRhZ3MJCQlTaG93IHRoZSBjb250ZW50cyBvZiB0aGUgdGFnIHN0YWNrLiAgVGhlIGFjdGl2ZQorCQkJZW50cnkgaXMgbWFya2VkIHdpdGggYSAnPicuICB7bm90IGluIFZpfQorCitUaGUgb3V0cHV0IG9mICI6dGFncyIgbG9va3MgbGlrZSB0aGlzOgorCisgICAjIFRPIHRhZyAgICAgIEZST00gbGluZSBpbiBmaWxlL2xpbmUKKyAgIDEgIDEgbWFpbgkJIDEgIGhhcmRkaXNrMjp0ZXh0L3ZpbS90ZXN0CisgPiAyICAyIEZ1bmNBCQk1OCAgaSA9IEZ1bmNBKDEwKTsKKyAgIDMgIDEgRnVuY0MJICAgICAgIDM1NyAgaGFyZGRpc2syOnRleHQvdmltL3NyYy9hbWlnYS5jCisKK1RoaXMgbGlzdCBzaG93cyB0aGUgdGFncyB0aGF0IHlvdSBqdW1wZWQgdG8gYW5kIHRoZSBjdXJzb3IgcG9zaXRpb24gYmVmb3JlCit0aGF0IGp1bXAuICBUaGUgb2xkZXIgdGFncyBhcmUgYXQgdGhlIHRvcCwgdGhlIG5ld2VyIGF0IHRoZSBib3R0b20uCisKK1RoZSAnPicgcG9pbnRzIHRvIHRoZSBhY3RpdmUgZW50cnkuICBUaGlzIGlzIHRoZSB0YWcgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlCituZXh0ICI6dGFnIiBjb21tYW5kLiAgVGhlIENUUkwtVCBhbmQgIjpwb3AiIGNvbW1hbmQgd2lsbCB1c2UgdGhlIHBvc2l0aW9uCithYm92ZSB0aGUgYWN0aXZlIGVudHJ5LgorCitCZWxvdyB0aGUgIlRPIiBpcyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IG1hdGNoIGluIHRoZSBtYXRjaCBsaXN0LiAgTm90ZQordGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHdoZW4gdXNpbmcgIjpwb3AiIG9yICI6dGFnIi4KKworVGhlIGxpbmUgbnVtYmVyIGFuZCBmaWxlIG5hbWUgYXJlIHJlbWVtYmVyZWQgdG8gYmUgYWJsZSB0byBnZXQgYmFjayB0byB3aGVyZQoreW91IHdlcmUgYmVmb3JlIHRoZSB0YWcgY29tbWFuZC4gIFRoZSBsaW5lIG51bWJlciB3aWxsIGJlIGNvcnJlY3QsIGFsc28gd2hlbgorZGVsZXRpbmcvaW5zZXJ0aW5nIGxpbmVzLCB1bmxlc3MgdGhpcyB3YXMgZG9uZSBieSBhbm90aGVyIHByb2dyYW0gKGUuZy4KK2Fub3RoZXIgaW5zdGFuY2Ugb2YgVmltKS4KKworRm9yIHRoZSBjdXJyZW50IGZpbGUsIHRoZSAiZmlsZS9saW5lIiBjb2x1bW4gc2hvd3MgdGhlIHRleHQgYXQgdGhlIHBvc2l0aW9uLgorQW4gaW5kZW50IGlzIHJlbW92ZWQgYW5kIGEgbG9uZyBsaW5lIGlzIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIHdpbmRvdy4KKworWW91IGNhbiBqdW1wIHRvIHByZXZpb3VzbHkgdXNlZCB0YWdzIHdpdGggc2V2ZXJhbCBjb21tYW5kcy4gIFNvbWUgZXhhbXBsZXM6CisKKwkiOnBvcCIgb3IgQ1RSTC1UCXRvIHBvc2l0aW9uIGJlZm9yZSBwcmV2aW91cyB0YWcKKwl7Y291bnR9Q1RSTC1UCQl0byBwb3NpdGlvbiBiZWZvcmUge2NvdW50fSBvbGRlciB0YWcKKwkiOnRhZyIJCQl0byBuZXdlciB0YWcKKwkiOjB0YWciCQkJdG8gbGFzdCB1c2VkIHRhZworCitUaGUgbW9zdCBvYnZpb3VzIHdheSB0byB1c2UgdGhpcyBpcyB3aGlsZSBicm93c2luZyB0aHJvdWdoIHRoZSBjYWxsIGdyYXBoIG9mCithIHByb2dyYW0uICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhbGwgZ3JhcGg6CisKKwltYWluICAtLS0+ICBGdW5jQSAgLS0tPiAgRnVuY0MKKwkgICAgICAtLS0+ICBGdW5jQgorCisoRXhwbGFuYXRpb246IG1haW4gY2FsbHMgRnVuY0EgYW5kIEZ1bmNCOyBGdW5jQSBjYWxscyBGdW5jQykuCitZb3UgY2FuIGdldCBmcm9tIG1haW4gdG8gRnVuY0EgYnkgdXNpbmcgQ1RSTC1dIG9uIHRoZSBjYWxsIHRvIEZ1bmNBLiAgVGhlbgoreW91IGNhbiBDVFJMLV0gdG8gZ2V0IHRvIEZ1bmNDLiAgSWYgeW91IG5vdyB3YW50IHRvIGdvIGJhY2sgdG8gbWFpbiB5b3UgY2FuCit1c2UgQ1RSTC1UIHR3aWNlLiAgVGhlbiB5b3UgY2FuIENUUkwtXSB0byBGdW5jQi4KKworSWYgeW91IGlzc3VlIGEgIjp0YSB7aWRlbnR9IiBvciBDVFJMLV0gY29tbWFuZCwgdGhpcyB0YWcgaXMgaW5zZXJ0ZWQgYXQgdGhlCitjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdGFjay4gIElmIHRoZSBzdGFjayB3YXMgZnVsbCAoaXQgY2FuIGhvbGQgdXAgdG8gMjAKK2VudHJpZXMpLCB0aGUgb2xkZXN0IGVudHJ5IGlzIGRlbGV0ZWQgYW5kIHRoZSBvbGRlciBlbnRyaWVzIHNoaWZ0IG9uZQorcG9zaXRpb24gdXAgKHRoZWlyIGluZGV4IG51bWJlciBpcyBkZWNyZW1lbnRlZCBieSBvbmUpLiAgSWYgdGhlIGxhc3QgdXNlZAorZW50cnkgd2FzIG5vdCBhdCB0aGUgYm90dG9tLCB0aGUgZW50cmllcyBiZWxvdyB0aGUgbGFzdCB1c2VkIG9uZSBhcmUKK2RlbGV0ZWQuICBUaGlzIG1lYW5zIHRoYXQgYW4gb2xkIGJyYW5jaCBpbiB0aGUgY2FsbCBncmFwaCBpcyBsb3N0LiAgQWZ0ZXIgdGhlCitjb21tYW5kcyBleHBsYWluZWQgYWJvdmUgdGhlIHRhZyBzdGFjayB3aWxsIGxvb2sgbGlrZSB0aGlzOgorCisgICAjIFRPIHRhZwlGUk9NIGxpbmUgaW4gZmlsZQorICAgMSBtYWluCSAgICAgICAxICBoYXJkZGlzazI6dGV4dC92aW0vdGVzdAorICAgMiBGdW5jQgkgICAgICA1OSAgaGFyZGRpc2syOnRleHQvdmltL3NyYy9tYWluLmMKKworCQkJCQkJCSpFNzMqCitXaGVuIHlvdSB0cnkgdG8gdXNlIHRoZSB0YWcgc3RhY2sgd2hpbGUgaXQgZG9lc24ndCBjb250YWluIGFueXRoaW5nIHlvdSB3aWxsCitnZXQgYW4gZXJyb3IgbWVzc2FnZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBUYWcgbWF0Y2ggbGlzdAkJCQkqdGFnLW1hdGNobGlzdCogKkU0MjcqICpFNDI4KgorCitXaGVuIHRoZXJlIGFyZSBzZXZlcmFsIG1hdGNoaW5nIHRhZ3MsIHRoZXNlIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGp1bXAKK2JldHdlZW4gdGhlbS4gIE5vdGUgdGhhdCB0aGVzZSBjb21tYW5kIGRvbid0IGNoYW5nZSB0aGUgdGFnIHN0YWNrLCB0aGV5IGtlZXAKK3RoZSBzYW1lIGVudHJ5LgorCisJCQkJCQkJKjp0cyogKjp0c2VsZWN0KgorOnRzW2VsZWN0XVshXSBbaWRlbnRdCUxpc3QgdGhlIHRhZ3MgdGhhdCBtYXRjaCBbaWRlbnRdLCB1c2luZyB0aGUKKwkJCWluZm9ybWF0aW9uIGluIHRoZSB0YWdzIGZpbGUocykuCisJCQlXaGVuIFtpZGVudF0gaXMgbm90IGdpdmVuLCB0aGUgbGFzdCB0YWcgbmFtZSBmcm9tIHRoZQorCQkJdGFnIHN0YWNrIGlzIHVzZWQuCisJCQlXaXRoIGEgJz4nIGluIHRoZSBmaXJzdCBjb2x1bW4gaXMgaW5kaWNhdGVkIHdoaWNoIGlzCisJCQl0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdCAoaWYgdGhlcmUgaXMgb25lKS4KKwkJCVtpZGVudF0gY2FuIGJlIGEgcmVnZXhwIHBhdHRlcm4sIHNlZSB8dGFnLXJlZ2V4cHwuCisJCQlTZWUgfHRhZy1wcmlvcml0eXwgZm9yIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gdGhlCisJCQlsaXN0aW5nLiAge25vdCBpbiBWaX0KKwkJCUV4YW1wbGUgb3V0cHV0OgorCis+CisJIG5yIHByaSBraW5kIHRhZwkJZmlsZQorCSAgMSBGCWYgICAgbWNoX2RlbGF5CQlvc19hbWlnYS5jCisJCQltY2hfZGVsYXkobXNlYywgaWdub3JlaW5wdXQpCisJPiAyIEYJZiAgICBtY2hfZGVsYXkJCW9zX21zZG9zLmMKKwkJCW1jaF9kZWxheShtc2VjLCBpZ25vcmVpbnB1dCkKKwkgIDMgRglmICAgIG1jaF9kZWxheQkJb3NfdW5peC5jCisJCQltY2hfZGVsYXkobXNlYywgaWdub3JlaW5wdXQpCisJRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KToKKzwKKwkJCVNlZSB8dGFnLXByaW9yaXR5fCBmb3IgdGhlICJwcmkiIGNvbHVtbi4gIE5vdGUgdGhhdAorCQkJdGhpcyBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGZpbGUsIHRodXMgdXNpbmcKKwkJCSI6dHNlbGVjdCB4eHgiIGNhbiBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHRzLgorCQkJVGhlICJraW5kIiBjb2x1bW4gZ2l2ZXMgdGhlIGtpbmQgb2YgdGFnLCBpZiB0aGlzIHdhcworCQkJaW5jbHVkZWQgaW4gdGhlIHRhZ3MgZmlsZS4KKwkJCVRoZSAiaW5mbyIgY29sdW1uIHNob3dzIGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUKKwkJCWZvdW5kIGluIHRoZSB0YWdzIGZpbGUuICBJdCBkZXBlbmRzIG9uIHRoZSBwcm9ncmFtCisJCQl0aGF0IHByb2R1Y2VkIHRoZSB0YWdzIGZpbGUuCisJCQlXaGVuIHRoZSBsaXN0IGlzIGxvbmcsIHlvdSBtYXkgZ2V0IHRoZSB8bW9yZS1wcm9tcHR8LgorCQkJSWYgeW91IGFscmVhZHkgc2VlIHRoZSB0YWcgeW91IHdhbnQgdG8gdXNlLCB5b3UgY2FuCisJCQl0eXBlICdxJyBhbmQgZW50ZXIgdGhlIG51bWJlci4KKworCQkJCQkJCSo6c3RzKiAqOnN0c2VsZWN0KgorOnN0c1tlbGVjdF1bIV0gW2lkZW50XQlEb2VzICI6dHNlbGVjdFshXSBbaWRlbnRdIiBhbmQgc3BsaXRzIHRoZSB3aW5kb3cgZm9yCisJCQl0aGUgc2VsZWN0ZWQgdGFnLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnXSoKK2ddCQkJTGlrZSBDVFJMLV0sIGJ1dCB1c2UgIjp0c2VsZWN0IiBpbnN0ZWFkIG9mICI6dGFnIi4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqdl9nXSoKK3tWaXN1YWx9Z10JCVNhbWUgYXMgImddIiwgYnV0IHVzZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBhcyB0aGUKKwkJCWlkZW50aWZpZXIuICB7bm90IGluIFZpfQorCisJCQkJCQkJKjp0aiogKjp0anVtcCoKKzp0alt1bXBdWyFdIFtpZGVudF0JTGlrZSAiOnRzZWxlY3QiLCBidXQganVtcCB0byB0aGUgdGFnIGRpcmVjdGx5IHdoZW4KKwkJCXRoZXJlIGlzIG9ubHkgb25lIG1hdGNoLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6c3RqKiAqOnN0anVtcCoKKzpzdGpbdW1wXVshXSBbaWRlbnRdCURvZXMgIjp0anVtcFshXSBbaWRlbnRdIiBhbmQgc3BsaXRzIHRoZSB3aW5kb3cgZm9yIHRoZQorCQkJc2VsZWN0ZWQgdGFnLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpnX0NUUkwtXSoKK2cgQ1RSTC1dCQlMaWtlIENUUkwtXSwgYnV0IHVzZSAiOnRqdW1wIiBpbnN0ZWFkIG9mICI6dGFnIi4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqdl9nX0NUUkwtXSoKK3tWaXN1YWx9ZyBDVFJMLV0JU2FtZSBhcyAiZyBDVFJMLV0iLCBidXQgdXNlIHRoZSBoaWdobGlnaHRlZCB0ZXh0IGFzCisJCQl0aGUgaWRlbnRpZmllci4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnRuKiAqOnRuZXh0KgorOltjb3VudF10bltleHRdWyFdCUp1bXAgdG8gW2NvdW50XSBuZXh0IG1hdGNoaW5nIHRhZyAoZGVmYXVsdCAxKS4gIFNlZQorCQkJfHRhZy0hfCBmb3IgWyFdLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6dHAqICo6dHByZXZpb3VzKgorOltjb3VudF10cFtyZXZpb3VzXVshXQlKdW1wIHRvIFtjb3VudF0gcHJldmlvdXMgbWF0Y2hpbmcgdGFnIChkZWZhdWx0IDEpLgorCQkJU2VlIHx0YWctIXwgZm9yIFshXS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnROKiAqOnROZXh0KgorOltjb3VudF10TltleHRdWyFdCVNhbWUgYXMgIjp0cHJldmlvdXMiLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6dHIqICo6dHJld2luZCoKKzpbY291bnRddHJbZXdpbmRdWyFdCUp1bXAgdG8gZmlyc3QgbWF0Y2hpbmcgdGFnLiAgSWYgW2NvdW50XSBpcyBnaXZlbiwganVtcAorCQkJdG8gW2NvdW50XXRoIG1hdGNoaW5nIHRhZy4gIFNlZSB8dGFnLSF8IGZvciBbIV0uICB7bm90CisJCQlpbiBWaX0KKworCQkJCQkJCSo6dGYqICo6dGZpcnN0KgorOltjb3VudF10ZltpcnN0XVshXQlTYW1lIGFzICI6dHJld2luZCIuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnRsKiAqOnRsYXN0KgorOnRsW2FzdF1bIV0JCUp1bXAgdG8gbGFzdCBtYXRjaGluZyB0YWcuICBTZWUgfHRhZy0hfCBmb3IgWyFdLiAge25vdAorCQkJaW4gVml9CisKKworV2hlbiB0aGVyZSBpcyBubyBvdGhlciBtZXNzYWdlLCBWaW0gc2hvd3Mgd2hpY2ggbWF0Y2hpbmcgdGFnIGhhcyBiZWVuIGp1bXBlZAordG8sIGFuZCB0aGUgbnVtYmVyIG9mIG1hdGNoaW5nIHRhZ3M6ID4KKwl0YWcgMSBvZiAzIG9yIG1vcmUKK1RoZSAiIG9yIG1vcmUiIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBWaW0gZGlkbid0IHRyeSBhbGwgdGhlIHRhZ3MgZmlsZXMgeWV0LgorV2hlbiB1c2luZyAiOnRuZXh0IiBhIGZldyB0aW1lcywgb3Igd2l0aCAiOnRsYXN0IiwgbW9yZSBtYXRjaGVzIG1heSBiZSBmb3VuZC4KKworV2hlbiB5b3UgZGlkbid0IHNlZSB0aGlzIG1lc3NhZ2UgYmVjYXVzZSBvZiBzb21lIG90aGVyIG1lc3NhZ2UsIG9yIHlvdSBqdXN0Cit3YW50IHRvIGtub3cgd2hlcmUgeW91IGFyZSwgdGhpcyBjb21tYW5kIHdpbGwgc2hvdyBpdCBhZ2FpbiAoYW5kIGp1bXAgdG8gdGhlCitzYW1lIHRhZyBhcyBsYXN0IHRpbWUpOiA+CisJOjB0bgorPAorCQkJCQkJCSp0YWctc2tpcC1maWxlKgorV2hlbiBhIG1hdGNoaW5nIHRhZyBpcyBmb3VuZCBmb3Igd2hpY2ggdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgdGhpcyBtYXRjaCBpcworc2tpcHBlZCBhbmQgdGhlIG5leHQgbWF0Y2hpbmcgdGFnIGlzIHVzZWQuICBWaW0gcmVwb3J0cyB0aGlzLCB0byBub3RpZnkgeW91IG9mCittaXNzaW5nIGZpbGVzLiAgV2hlbiB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIG1hdGNoZXMgaGFzIGJlZW4gcmVhY2hlZCwgYW4gZXJyb3IKK21lc3NhZ2UgaXMgZ2l2ZW4uCisKK1RoZSB0YWcgbWF0Y2ggbGlzdCBjYW4gYWxzbyBiZSB1c2VkIGluIHRoZSBwcmV2aWV3IHdpbmRvdy4gIFRoZSBjb21tYW5kcyBhcmUKK3RoZSBzYW1lIGFzIGFib3ZlLCB3aXRoIGEgInAiIHByZXBlbmRlZC4KK3tub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwgZmVhdHVyZX0KKworCQkJCQkJCSo6cHRzKiAqOnB0c2VsZWN0KgorOnB0c1tlbGVjdF1bIV0gW2lkZW50XQlEb2VzICI6dHNlbGVjdFshXSBbaWRlbnRdIiBhbmQgc2hvd3MgdGhlIG5ldyB0YWcgaW4gYQorCQkJIlByZXZpZXciIHdpbmRvdy4gU2VlIHw6cHRhZ3wgZm9yIG1vcmUgaW5mby4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqOnB0aiogKjpwdGp1bXAqCis6cHRqW3VtcF1bIV0gW2lkZW50XQlEb2VzICI6dGp1bXBbIV0gW2lkZW50XSIgYW5kIHNob3dzIHRoZSBuZXcgdGFnIGluIGEKKwkJCSJQcmV2aWV3IiB3aW5kb3cuIFNlZSB8OnB0YWd8IGZvciBtb3JlIGluZm8uCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdG4qICo6cHRuZXh0KgorOltjb3VudF1wdG5bZXh0XVshXQkiOnRuZXh0IiBpbiB0aGUgcHJldmlldyB3aW5kb3cuICBTZWUgfDpwdGFnfC4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqOnB0cCogKjpwdHByZXZpb3VzKgorOltjb3VudF1wdHBbcmV2aW91c11bIV0JIjp0cHJldmlvdXMiIGluIHRoZSBwcmV2aWV3IHdpbmRvdy4gIFNlZSB8OnB0YWd8LgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJCSo6cHROKiAqOnB0TmV4dCoKKzpbY291bnRdcHROW2V4dF1bIV0JU2FtZSBhcyAiOnB0cHJldmlvdXMiLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6cHRyKiAqOnB0cmV3aW5kKgorOltjb3VudF1wdHJbZXdpbmRdWyFdCSI6dHJld2luZCIgaW4gdGhlIHByZXZpZXcgd2luZG93LiAgU2VlIHw6cHRhZ3wuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpwdGYqICo6cHRmaXJzdCoKKzpbY291bnRdcHRmW2lyc3RdWyFdCVNhbWUgYXMgIjpwdHJld2luZCIuIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOnB0bCogKjpwdGxhc3QqCis6cHRsW2FzdF1bIV0JCSI6dGxhc3QiIGluIHRoZSBwcmV2aWV3IHdpbmRvdy4gIFNlZSB8OnB0YWd8LgorCQkJe25vdCBpbiBWaX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBUYWdzIGRldGFpbHMJCQkJCQkqdGFnLWRldGFpbHMqCisKKwkJCQkJCQkqc3RhdGljLXRhZyoKK0Egc3RhdGljIHRhZyBpcyBhIHRhZyB0aGF0IGlzIGRlZmluZWQgZm9yIGEgc3BlY2lmaWMgZmlsZS4gIEluIGEgQyBwcm9ncmFtCit0aGlzIGNvdWxkIGJlIGEgc3RhdGljIGZ1bmN0aW9uLgorCitJbiBWaSBqdW1waW5nIHRvIGEgdGFnIHNldHMgdGhlIGN1cnJlbnQgc2VhcmNoIHBhdHRlcm4uICBUaGlzIG1lYW5zIHRoYXQKK3RoZSAibiIgY29tbWFuZCBhZnRlciBqdW1waW5nIHRvIGEgdGFnIGRvZXMgbm90IHNlYXJjaCBmb3IgdGhlIHNhbWUgcGF0dGVybgordGhhdCBpdCBkaWQgYmVmb3JlIGp1bXBpbmcgdG8gdGhlIHRhZy4gIFZpbSBkb2VzIG5vdCBkbyB0aGlzIGFzIHdlIGNvbnNpZGVyIGl0Cit0byBiZSBhIGJ1Zy4gIFlvdSBjYW4gc3RpbGwgZmluZCB0aGUgdGFnIHNlYXJjaCBwYXR0ZXJuIGluIHRoZSBzZWFyY2ggaGlzdG9yeS4KK0lmIHlvdSByZWFsbHkgd2FudCB0aGUgb2xkIFZpIGJlaGF2aW9yLCBzZXQgdGhlICd0JyBmbGFnIGluICdjcG9wdGlvbnMnLgorCisJCQkJCQkJKnRhZy1iaW5hcnktc2VhcmNoKgorVmltIHVzZXMgYmluYXJ5IHNlYXJjaGluZyBpbiB0aGUgdGFncyBmaWxlIHRvIGZpbmQgdGhlIGRlc2lyZWQgdGFnIHF1aWNrbHkKKyh3aGVuIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIHwrdGFnX2JpbmFyeXwpLiAgQnV0IHRoaXMgb25seSB3b3JrcyBpZiB0aGUKK3RhZ3MgZmlsZSB3YXMgc29ydGVkIG9uIEFTQ0lJIGJ5dGUgdmFsdWUuICBUaGVyZWZvcmUsIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwKK2Fub3RoZXIgdHJ5IGlzIGRvbmUgd2l0aCBhIGxpbmVhciBzZWFyY2guICBJZiB5b3Ugb25seSB3YW50IHRoZSBsaW5lYXIgc2VhcmNoLAorcmVzZXQgdGhlICd0YWdic2VhcmNoJyBvcHRpb24uICBPciBiZXR0ZXI6IFNvcnQgdGhlIHRhZ3MgZmlsZSEKKworTm90ZSB0aGF0IHRoZSBiaW5hcnkgc2VhcmNoaW5nIGlzIGRpc2FibGVkIHdoZW4gbm90IGxvb2tpbmcgZm9yIGEgdGFnIHdpdGggYQorc3BlY2lmaWMgbmFtZS4gIFRoaXMgaGFwcGVucyB3aGVuIGlnbm9yaW5nIGNhc2UgYW5kIHdoZW4gYSByZWd1bGFyIGV4cHJlc3Npb24KK2lzIHVzZWQgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBmaXhlZCBzdHJpbmcuICBUYWcgc2VhcmNoaW5nIGNhbiBiZSBhIGxvdAorc2xvd2VyIHRoZW4uICBUaGUgZm9ybWVyIGNhbiBiZSBhdm9pZGVkIGJ5IGNhc2UtZm9sZCBzb3J0aW5nIHRoZSB0YWdzIGZpbGUuCitTZWUgJ3RhZ2JzZWFyY2gnIGZvciBkZXRhaWxzLgorCisJCQkJCQkJKnRhZy1yZWdleHAqCitUaGUgIjp0YWciIGFuZCAidHNlbGVjdCIgY29tbWFuZHMgYWNjZXB0IGEgcmVndWxhciBleHByZXNzaW9uIGFyZ3VtZW50LiAgU2VlCit8cGF0dGVybnwgZm9yIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZC4KK1doZW4gdGhlIGFyZ3VtZW50IHN0YXJ0cyB3aXRoICcvJywgaXQgaXMgdXNlZCBhcyBhIHBhdHRlcm4uICBJZiB0aGUgYXJndW1lbnQKK2RvZXMgbm90IHN0YXJ0IHdpdGggJy8nLCBpdCBpcyB0YWtlbiBsaXRlcmFsbHksIGFzIGEgZnVsbCB0YWcgbmFtZS4KK0V4YW1wbGVzOiA+CisgICAgOnRhZyBtYWluCis8CWp1bXBzIHRvIHRoZSB0YWcgIm1haW4iIHRoYXQgaGFzIHRoZSBoaWdoZXN0IHByaW9yaXR5LiA+CisgICAgOnRhZyAvXmdldAorPAlqdW1wcyB0byB0aGUgdGFnIHRoYXQgc3RhcnRzIHdpdGggImdldCIgYW5kIGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4gPgorICAgIDp0YWcgL25vcm0KKzwJbGlzdHMgYWxsIHRoZSB0YWdzIHRoYXQgY29udGFpbiAibm9ybSIsIGluY2x1ZGluZyAiaWRfbm9ybSIuCitXaGVuIHRoZSBhcmd1bWVudCBib3RoIGV4aXN0cyBsaXRlcmFsbHksIGFuZCBtYXRjaCB3aGVuIHVzZWQgYXMgYSByZWdleHAsIGEKK2xpdGVyYWwgbWF0Y2ggaGFzIGEgaGlnaGVyIHByaW9yaXR5LiAgRm9yIGV4YW1wbGUsICI6dGFnIC9vcGVuIiBtYXRjaGVzICJvcGVuIgorYmVmb3JlICJvcGVuX2ZpbGUiIGFuZCAiZmlsZV9vcGVuIi4KKworCQkJCQkJCSp0YWctISoKK0lmIHRoZSB0YWcgaXMgaW4gdGhlIGN1cnJlbnQgZmlsZSB0aGlzIHdpbGwgYWx3YXlzIHdvcmsuICBPdGhlcndpc2UgdGhlCitwZXJmb3JtZWQgYWN0aW9ucyBkZXBlbmQgb24gd2hldGhlciB0aGUgY3VycmVudCBmaWxlIHdhcyBjaGFuZ2VkLCB3aGV0aGVyIGEgIQoraXMgYWRkZWQgdG8gdGhlIGNvbW1hbmQgYW5kIG9uIHRoZSAnYXV0b3dyaXRlJyBvcHRpb246CisKKyAgdGFnIGluICAgICAgIGZpbGUJICAgYXV0b3dyaXRlCQkJfgorY3VycmVudCBmaWxlICBjaGFuZ2VkCSEgICBvcHRpb24JICBhY3Rpb24JfgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB5ZXMJCSB4CXggICAgIHgJICBnb3RvIHRhZworICAgIG5vCQkgbm8JeCAgICAgeAkgIHJlYWQgb3RoZXIgZmlsZSwgZ290byB0YWcKKyAgICBubwkJeWVzICAgIHllcyAgICB4ICAgYWJhbmRvbiBjdXJyZW50IGZpbGUsIHJlYWQgb3RoZXIgZmlsZSwgZ290bworCQkJCSAgdGFnCisgICAgbm8JCXllcwlubyAgICBvbiAgd3JpdGUgY3VycmVudCBmaWxlLCByZWFkIG90aGVyIGZpbGUsIGdvdG8KKwkJCQkgIHRhZworICAgIG5vCQl5ZXMJbm8gICBvZmYgIGZhaWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSWYgdGhlIHRhZyBpcyBpbiB0aGUgY3VycmVudCBmaWxlLCB0aGUgY29tbWFuZCB3aWxsIGFsd2F5cyB3b3JrLgorLSBJZiB0aGUgdGFnIGlzIGluIGFub3RoZXIgZmlsZSBhbmQgdGhlIGN1cnJlbnQgZmlsZSB3YXMgbm90IGNoYW5nZWQsIHRoZQorICBvdGhlciBmaWxlIHdpbGwgYmUgbWFkZSB0aGUgY3VycmVudCBmaWxlIGFuZCByZWFkIGludG8gdGhlIGJ1ZmZlci4KKy0gSWYgdGhlIHRhZyBpcyBpbiBhbm90aGVyIGZpbGUsIHRoZSBjdXJyZW50IGZpbGUgd2FzIGNoYW5nZWQgYW5kIGEgISBpcworICBhZGRlZCB0byB0aGUgY29tbWFuZCwgdGhlIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgZmlsZSBhcmUgbG9zdCwgdGhlIG90aGVyCisgIGZpbGUgd2lsbCBiZSBtYWRlIHRoZSBjdXJyZW50IGZpbGUgYW5kIHJlYWQgaW50byB0aGUgYnVmZmVyLgorLSBJZiB0aGUgdGFnIGlzIGluIGFub3RoZXIgZmlsZSwgdGhlIGN1cnJlbnQgZmlsZSB3YXMgY2hhbmdlZCBhbmQgdGhlCisgICdhdXRvd3JpdGUnIG9wdGlvbiBpcyBvbiwgdGhlIGN1cnJlbnQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4sIHRoZSBvdGhlcgorICBmaWxlIHdpbGwgYmUgbWFkZSB0aGUgY3VycmVudCBmaWxlIGFuZCByZWFkIGludG8gdGhlIGJ1ZmZlci4KKy0gSWYgdGhlIHRhZyBpcyBpbiBhbm90aGVyIGZpbGUsIHRoZSBjdXJyZW50IGZpbGUgd2FzIGNoYW5nZWQgYW5kIHRoZQorICAnYXV0b3dyaXRlJyBvcHRpb24gaXMgb2ZmLCB0aGUgY29tbWFuZCB3aWxsIGZhaWwuICBJZiB5b3Ugd2FudCB0byBzYXZlCisgIHRoZSBjaGFuZ2VzLCB1c2UgdGhlICI6dyIgY29tbWFuZCBhbmQgdGhlbiB1c2UgIjp0YWciIHdpdGhvdXQgYW4gYXJndW1lbnQuCisgIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgdGFnIGlzIHB1dCBvbiB0aGUgc3RhY2sgYW55d2F5LiAgSWYgeW91IHdhbnQgdG8gbG9zZQorICB0aGUgY2hhbmdlcyB5b3UgY2FuIHVzZSB0aGUgIjp0YWchIiBjb21tYW5kLgorCisJCQkJCQkJKnRhZy1zZWN1cml0eSoKK05vdGUgdGhhdCBWaW0gZm9yYmlkcyBzb21lIGNvbW1hbmRzLCBmb3Igc2VjdXJpdHkgcmVhc29ucy4gIFRoaXMgd29ya3MgbGlrZQordXNpbmcgdGhlICdzZWN1cmUnIG9wdGlvbiBmb3IgZXhyYy92aW1yYyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBTZWUKK3x0cm9qYW4taG9yc2V8IGFuZCB8c2FuZGJveHwuCitXaGVuIHRoZSB7dGFnYWRkcmVzc30gY2hhbmdlcyBhIGJ1ZmZlciwgeW91IHdpbGwgZ2V0IGEgd2FybmluZyBtZXNzYWdlOgorCSJXQVJOSU5HOiB0YWcgY29tbWFuZCBjaGFuZ2VkIGEgYnVmZmVyISEhIgorSW4gYSBmdXR1cmUgdmVyc2lvbiBjaGFuZ2luZyB0aGUgYnVmZmVyIHdpbGwgYmUgaW1wb3NzaWJsZS4gIEFsbCB0aGlzIGZvcgorc2VjdXJpdHkgcmVhc29uczogU29tZWJvZHkgbWlnaHQgaGlkZSBhIG5hc3R5IGNvbW1hbmQgaW4gdGhlIHRhZ3MgZmlsZSwgd2hpY2gKK3dvdWxkIG90aGVyd2lzZSBnbyB1bm5vdGljZWQuICBFeGFtcGxlOiA+CisJOiRkfC90YWctZnVuY3Rpb24tbmFtZS8KK3t0aGlzIHNlY3VyaXR5IHByZXZlbnRpb24gaXMgbm90IHByZXNlbnQgaW4gVml9LgorCitJbiBWaSB0aGUgIjp0YWciIGNvbW1hbmQgc2V0cyB0aGUgbGFzdCBzZWFyY2ggcGF0dGVybiB3aGVuIHRoZSB0YWcgaXMgc2VhcmNoZWQKK2Zvci4gIEluIFZpbSB0aGlzIGlzIG5vdCBkb25lLCB0aGUgcHJldmlvdXMgc2VhcmNoIHBhdHRlcm4gaXMgc3RpbGwgcmVtZW1iZXJlZCwKK3VubGVzcyB0aGUgJ3QnIGZsYWcgaXMgcHJlc2VudCBpbiAnY3BvcHRpb25zJy4gIFRoZSBzZWFyY2ggcGF0dGVybiBpcyBhbHdheXMKK3B1dCBpbiB0aGUgc2VhcmNoIGhpc3RvcnksIHNvIHlvdSBjYW4gbW9kaWZ5IGl0IGlmIHNlYXJjaGluZyBmYWlscy4KKworCQkJCQkqZW1hY3MtdGFncyogKmVtYWNzX3RhZ3MqICpFNDMwKgorRW1hY3Mgc3R5bGUgdGFnIGZpbGVzIGFyZSBvbmx5IHN1cHBvcnRlZCBpZiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlCit8K2VtYWNzX3RhZ3N8IGZlYXR1cmUgZW5hYmxlZC4gIFNvcnJ5LCB0aGVyZSBpcyBubyBleHBsYW5hdGlvbiBhYm91dCBFbWFjcyB0YWcKK2ZpbGVzIGhlcmUsIGl0IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSA6LSkuCisKKwkJCQkJCQkqdGFncy1vcHRpb24qCitUaGUgJ3RhZ3MnIG9wdGlvbiBpcyBhIGxpc3Qgb2YgZmlsZSBuYW1lcy4gIEVhY2ggb2YgdGhlc2UgZmlsZXMgaXMgc2VhcmNoZWQKK2ZvciB0aGUgdGFnLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB1c2UgYSBkaWZmZXJlbnQgdGFncyBmaWxlIHRoYW4gdGhlIGRlZmF1bHQKK2ZpbGUgInRhZ3MiLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBhY2Nlc3MgYSBjb21tb24gdGFncyBmaWxlLgorCitUaGUgbmV4dCBmaWxlIGluIHRoZSBsaXN0IGlzIG5vdCB1c2VkIHdoZW46CistIEEgbWF0Y2hpbmcgc3RhdGljIHRhZyBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIGhhcyBiZWVuIGZvdW5kLgorLSBBIG1hdGNoaW5nIGdsb2JhbCB0YWcgaGFzIGJlZW4gZm91bmQuCitUaGlzIGFsc28gZGVwZW5kcyBvbiB0aGUgJ2lnbm9yZWNhc2UnIG9wdGlvbi4gIElmIGl0IGlzIG9mZiwgYW5kIHRoZSB0YWdzIGZpbGUKK29ubHkgaGFzIGEgbWF0Y2ggd2l0aG91dCBtYXRjaGluZyBjYXNlLCB0aGUgbmV4dCB0YWdzIGZpbGUgaXMgc2VhcmNoZWQgZm9yIGEKK21hdGNoIHdpdGggbWF0Y2hpbmcgY2FzZS4gIElmIG5vIHRhZyB3aXRoIG1hdGNoaW5nIGNhc2UgaXMgZm91bmQsIHRoZSBmaXJzdAorbWF0Y2ggd2l0aG91dCBtYXRjaGluZyBjYXNlIGlzIHVzZWQuICBJZiAnaWdub3JlY2FzZScgaXMgb24sIGFuZCBhIG1hdGNoaW5nCitnbG9iYWwgdGFnIHdpdGggb3Igd2l0aG91dCBtYXRjaGluZyBjYXNlIGlzIGZvdW5kLCB0aGlzIG9uZSBpcyB1c2VkLCBubworZnVydGhlciB0YWdzIGZpbGVzIGFyZSBzZWFyY2hlZC4KKworV2hlbiBhIHRhZyBmaWxlIG5hbWUgc3RhcnRzIHdpdGggIi4vIiwgdGhlICcuJyBpcyByZXBsYWNlZCB3aXRoIHRoZSBwYXRoIG9mCit0aGUgY3VycmVudCBmaWxlLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgYSB0YWdzIGZpbGUgaW4gdGhlIGRpcmVjdG9yeQord2hlcmUgdGhlIGN1cnJlbnQgZmlsZSBpcyAobm8gbWF0dGVyIHdoYXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzKS4gIFRoZSBpZGVhCitvZiB1c2luZyAiLi8iIGlzIHRoYXQgeW91IGNhbiBkZWZpbmUgd2hpY2ggdGFnIGZpbGUgaXMgc2VhcmNoZWQgZmlyc3Q6IEluIHRoZQorY3VycmVudCBkaXJlY3RvcnkgKCJ0YWdzLC4vdGFncyIpIG9yIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZQorKCIuL3RhZ3MsdGFncyIpLgorCitGb3IgZXhhbXBsZTogPgorCTpzZXQgdGFncz0uL3RhZ3MsdGFncywvaG9tZS91c2VyL2NvbW1vbnRhZ3MKKworSW4gdGhpcyBleGFtcGxlIHRoZSB0YWcgd2lsbCBmaXJzdCBiZSBzZWFyY2hlZCBmb3IgaW4gdGhlIGZpbGUgInRhZ3MiIGluIHRoZQorZGlyZWN0b3J5IHdoZXJlIHRoZSBjdXJyZW50IGZpbGUgaXMuICBOZXh0IHRoZSAidGFncyIgZmlsZSBpbiB0aGUgY3VycmVudAorZGlyZWN0b3J5LiAgSWYgaXQgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGVuIHRoZSBmaWxlICIvaG9tZS91c2VyL2NvbW1vbnRhZ3MiCit3aWxsIGJlIHNlYXJjaGVkIGZvciB0aGUgdGFnLgorCitUaGlzIGNhbiBiZSBzd2l0Y2hlZCBvZmYgYnkgaW5jbHVkaW5nIHRoZSAnZCcgZmxhZyBpbiAnY3BvcHRpb25zJywgdG8gbWFrZQoraXQgVmkgY29tcGF0aWJsZS4gICIuL3RhZ3MiIHdpbGwgdGhhbiBiZSB0aGUgdGFncyBmaWxlIGluIHRoZSBjdXJyZW50CitkaXJlY3RvcnksIGluc3RlYWQgb2YgdGhlIHRhZ3MgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBjdXJyZW50IGZpbGUKK2lzLgorCitJbnN0ZWFkIG9mIHRoZSBjb21tYSBhIHNwYWNlIG1heSBiZSB1c2VkLiAgVGhlbiBhIGJhY2tzbGFzaCBpcyByZXF1aXJlZCBmb3IKK3RoZSBzcGFjZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc3RyaW5nIG9wdGlvbjogPgorCTpzZXQgdGFncz10YWdzXCAvaG9tZS91c2VyL2NvbW1vbnRhZ3MKKworVG8gaW5jbHVkZSBhIHNwYWNlIGluIGEgZmlsZSBuYW1lIHVzZSB0aHJlZSBiYWNrc2xhc2hlcy4gIFRvIGluY2x1ZGUgYSBjb21tYQoraW4gYSBmaWxlIG5hbWUgdXNlIHR3byBiYWNrc2xhc2hlcy4gIEZvciBleGFtcGxlLCB1c2U6ID4KKwk6c2V0IHRhZ3M9dGFnXFxcIGZpbGUsL2hvbWUvdXNlci9jb21tb25cXCx0YWdzCisKK2ZvciB0aGUgZmlsZXMgInRhZyBmaWxlIiBhbmQgIi9ob21lL3VzZXIvY29tbW9uLHRhZ3MiLiAgVGhlICd0YWdzJyBvcHRpb24gd2lsbAoraGF2ZSB0aGUgdmFsdWUgInRhZ1wgZmlsZSwvaG9tZS91c2VyL2NvbW1vblwsdGFncyIuCisKK0lmIHRoZSAndGFncmVsYXRpdmUnIG9wdGlvbiBpcyBvbiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpIGFuZCB1c2luZyBhIHRhZyBmaWxlCitpbiBhbm90aGVyIGRpcmVjdG9yeSwgZmlsZSBuYW1lcyBpbiB0aGF0IHRhZyBmaWxlIGFyZSByZWxhdGl2ZSB0byB0aGUKK2RpcmVjdG9yeSB3aGVyZSB0aGUgdGFnIGZpbGUgaXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gVGFncyBmaWxlIGZvcm1hdAkJCQkqdGFncy1maWxlLWZvcm1hdCogKkU0MzEqCisKKwkJCQkJCSpjdGFncyogKmp0YWdzKgorQSB0YWdzIGZpbGUgY2FuIGJlIGNyZWF0ZWQgd2l0aCBhbiBleHRlcm5hbCBjb21tYW5kLCBmb3IgZXhhbXBsZSAiY3RhZ3MiLiAgSXQKK3dpbGwgY29udGFpbiBhIHRhZyBmb3IgZWFjaCBmdW5jdGlvbi4gIFNvbWUgdmVyc2lvbnMgb2YgImN0YWdzIiB3aWxsIGFsc28gbWFrZQorYSB0YWcgZm9yIGVhY2ggIiNkZWZpbmVkIiBtYWNybywgdHlwZWRlZnMsIGVudW1zLCBldGMuCisKK1NvbWUgcHJvZ3JhbXMgdGhhdCBnZW5lcmF0ZSB0YWdzIGZpbGVzOgorY3RhZ3MJCQlBcyBmb3VuZCBvbiBtb3N0IFVuaXggc3lzdGVtcy4gIE9ubHkgc3VwcG9ydHMgQy4gIE9ubHkKKwkJCWRvZXMgdGhlIGJhc2ljIHdvcmsuCitleHViZXJhbnQgY3RhZ3MJCVRoaXMgYSB2ZXJ5IGdvb2Qgb25lLiAgSXQgd29ya3MgZm9yIEMsIEMrKywgSmF2YSwKKwkJCUZvcnRyYW4sIEVpZmZlbCBhbmQgb3RoZXJzLiAgSXQgY2FuIGdlbmVyYXRlIHRhZ3MgZm9yCisJCQltYW55IGl0ZW1zLiAgU2VlIGh0dHA6Ly9jdGFncy5zb3VyY2Vmb3JnZS5uZXQuCitldGFncwkJCUNvbm5lY3RlZCB0byBFbWFjcy4gIFN1cHBvcnRzIG1hbnkgbGFuZ3VhZ2VzLgorSlRhZ3MJCQlGb3IgSmF2YSwgaW4gSmF2YS4gIEl0IGNhbiBiZSBmb3VuZCBhdAorCQkJaHR0cDovL3d3dy5mbGVpbmVyLmNvbS9qdGFncy8uCitwdGFncy5weQkJRm9yIFB5dGhvbiwgaW4gUHl0aG9uLiAgRm91bmQgaW4geW91ciBQeXRob24gc291cmNlCisJCQlkaXJlY3RvcnkgYXQgVG9vbHMvc2NyaXB0cy9wdGFncy5weS4KK3B0YWdzCQkJRm9yIFBlcmwsIGluIFBlcmwuICBJdCBjYW4gYmUgZm91bmQgYXQKKwkJCWh0dHA6Ly93d3cuZWxldmVzLmVucy5mcjo4MDgwL2hvbWUvbnRoaWVyeS9UYWdzLy4KK2duYXR4cmVmCQlGb3IgQWRhLiAgU2VlIGh0dHA6Ly93d3cuZ251YWRhLm9yZy8uICBnbmF0eHJlZiBpcworCQkJcGFydCBvZiB0aGUgZ25hdCBwYWNrYWdlLgorCisKK1RoZSBsaW5lcyBpbiB0aGUgdGFncyBmaWxlIG11c3QgaGF2ZSBvbmUgb2YgdGhlc2UgdGhyZWUgZm9ybWF0czoKKworMS4gIHt0YWduYW1lfQkJe1RBQn0ge3RhZ2ZpbGV9IHtUQUJ9IHt0YWdhZGRyZXNzfQorMi4gIHt0YWdmaWxlfTp7dGFnbmFtZX0ge1RBQn0ge3RhZ2ZpbGV9IHtUQUJ9IHt0YWdhZGRyZXNzfQorMy4gIHt0YWduYW1lfQkJe1RBQn0ge3RhZ2ZpbGV9IHtUQUJ9IHt0YWdhZGRyZXNzfSB7dGVybX0ge2ZpZWxkfSAuLgorCitUaGUgZmlyc3QgaXMgYSBub3JtYWwgdGFnLCB3aGljaCBpcyBjb21wbGV0ZWx5IGNvbXBhdGlibGUgd2l0aCBWaS4gIEl0IGlzIHRoZQorb25seSBmb3JtYXQgcHJvZHVjZWQgYnkgdHJhZGl0aW9uYWwgY3RhZ3MgaW1wbGVtZW50YXRpb25zLiAgVGhpcyBpcyBvZnRlbiB1c2VkCitmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGdsb2JhbCwgYWxzbyByZWZlcmVuY2VkIGluIG90aGVyIGZpbGVzLgorCitUaGUgbGluZXMgaW4gdGhlIHRhZ3MgZmlsZSBjYW4gZW5kIGluIDxMRj4gb3IgPENSPjxMRj4uICBPbiB0aGUgTWFjaW50b3NoIDxDUj4KK2Fsc28gd29ya3MuICBUaGUgPENSPiBhbmQgPE5MPiBjaGFyYWN0ZXJzIGNhbiBuZXZlciBhcHBlYXIgaW5zaWRlIGEgbGluZS4KKworCQkJCQkJCSp0YWctb2xkLXN0YXRpYyoKK1RoZSBzZWNvbmQgZm9ybWF0IGlzIGZvciBhIHN0YXRpYyB0YWcgb25seS4gIEl0IGlzIG9ic29sZXRlIG5vdywgcmVwbGFjZWQgYnkKK3RoZSB0aGlyZCBmb3JtYXQuICBJdCBpcyBvbmx5IHN1cHBvcnRlZCBieSBFbHZpcyAxLnggYW5kIFZpbSBhbmQgYSBmZXcKK3ZlcnNpb25zIG9mIGN0YWdzLiAgQSBzdGF0aWMgdGFnIGlzIG9mdGVuIHVzZWQgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBsb2NhbCwKK29ubHkgcmVmZXJlbmNlZCBpbiB0aGUgZmlsZSB7dGFnZmlsZX0uICBOb3RlIHRoYXQgZm9yIHRoZSBzdGF0aWMgdGFnLCB0aGUgdHdvCitvY2N1cnJlbmNlcyBvZiB7dGFnZmlsZX0gbXVzdCBiZSBleGFjdGx5IHRoZSBzYW1lLiAgQWxzbyBzZWUgfHRhZ3Mtb3B0aW9ufAorYmVsb3csIGZvciBob3cgc3RhdGljIHRhZ3MgYXJlIHVzZWQuCisKK1RoZSB0aGlyZCBmb3JtYXQgaXMgbmV3LiAgSXQgaW5jbHVkZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiBvcHRpb25hbAorZmllbGRzIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLiAgSXQgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBWaS4gIEl0IGlzCitvbmx5IHN1cHBvcnRlZCBieSBuZXcgdmVyc2lvbnMgb2YgY3RhZ3MgKHN1Y2ggYXMgRXh1YmVyYW50IGN0YWdzKS4KKwore3RhZ25hbWV9CVRoZSBpZGVudGlmaWVyLiAgTm9ybWFsbHkgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiwgYnV0IGl0IGNhbgorCQliZSBhbnkgaWRlbnRpZmllci4gIEl0IGNhbm5vdCBjb250YWluIGEgPFRhYj4uCit7VEFCfQkJT25lIDxUYWI+IGNoYXJhY3Rlci4gIE5vdGU6IHByZXZpb3VzIHZlcnNpb25zIGFsbG93ZWQgYW55CisJCXdoaXRlIHNwYWNlIGhlcmUuICBUaGlzIGhhcyBiZWVuIGFiYW5kb25lZCB0byBhbGxvdyBzcGFjZXMgaW4KKwkJe3RhZ2ZpbGV9LiAgSXQgY2FuIGJlIHJlLWVuYWJsZWQgYnkgaW5jbHVkaW5nIHRoZQorCQl8K3RhZ19hbnlfd2hpdGV8IGZlYXR1cmUgYXQgY29tcGlsZSB0aW1lLiAqdGFnLWFueS13aGl0ZSoKK3t0YWdmaWxlfQlUaGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9mIHt0YWduYW1lfS4gIEl0IGNhbgorCQloYXZlIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGguICBJdCBtYXkgY29udGFpbiBlbnZpcm9ubWVudAorCQl2YXJpYWJsZXMgYW5kIHdpbGRjYXJkcyAoYWx0aG91Z2ggdGhlIHVzZSBvZiB3aWxkY2FyZHMgaXMKKwkJZG91YnRmdWwpLiAgSXQgY2Fubm90IGNvbnRhaW4gYSA8VGFiPi4KK3t0YWdhZGRyZXNzfQlUaGUgRXggY29tbWFuZCB0aGF0IHBvc2l0aW9ucyB0aGUgY3Vyc29yIG9uIHRoZSB0YWcuICBJdCBjYW4KKwkJYmUgYW55IEV4IGNvbW1hbmQsIGFsdGhvdWdoIHJlc3RyaWN0aW9ucyBhcHBseSAoc2VlCisJCXx0YWctc2VjdXJpdHl8KS4gIFBvc2l4IG9ubHkgYWxsb3dzIGxpbmUgbnVtYmVycyBhbmQgc2VhcmNoCisJCWNvbW1hbmRzLCB3aGljaCBhcmUgbW9zdGx5IHVzZWQuCit7dGVybX0JCTsiIFRoZSB0d28gY2hhcmFjdGVycyBzZW1pY29sb24gYW5kIGRvdWJsZSBxdW90ZS4gIFRoaXMgaXMKKwkJaW50ZXJwcmV0ZWQgYnkgVmkgYXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudCwgd2hpY2ggbWFrZXMgdGhlCisJCWZvbGxvd2luZyBiZSBpZ25vcmVkLiAgVGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKwkJd2l0aCBWaSwgaXQgaWdub3JlcyB0aGUgZm9sbG93aW5nIGZpZWxkcy4KK3tmaWVsZH0gLi4JQSBsaXN0IG9mIG9wdGlvbmFsIGZpZWxkcy4gIEVhY2ggZmllbGQgaGFzIHRoZSBmb3JtOgorCisJCQk8VGFiPntmaWVsZG5hbWV9Ont2YWx1ZX0KKworCQlUaGUge2ZpZWxkbmFtZX0gaWRlbnRpZmllcyB0aGUgZmllbGQsIGFuZCBjYW4gb25seSBjb250YWluCisJCWFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIFthLXpBLVpdLgorCQlUaGUge3ZhbHVlfSBpcyBhbnkgc3RyaW5nLCBidXQgY2Fubm90IGNvbnRhaW4gYSA8VGFiPi4KKwkJVGhlc2UgY2hhcmFjdGVycyBhcmUgc3BlY2lhbDoKKwkJCSJcdCIgc3RhbmRzIGZvciBhIDxUYWI+CisJCQkiXHIiIHN0YW5kcyBmb3IgYSA8Q1I+CisJCQkiXG4iIHN0YW5kcyBmb3IgYSA8Tkw+CisJCQkiXFwiIHN0YW5kcyBmb3IgYSBzaW5nbGUgJ1wnIGNoYXJhY3RlcgorCisJCVRoZXJlIGlzIG9uZSBmaWVsZCB0aGF0IGRvZXNuJ3QgaGF2ZSBhICc6Jy4gIFRoaXMgaXMgdGhlIGtpbmQKKwkJb2YgdGhlIHRhZy4gIEl0IGlzIGhhbmRsZWQgbGlrZSBpdCB3YXMgcHJlY2VkZWQgd2l0aCAia2luZDoiLgorCQlTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgY3RhZ3MgZm9yIHRoZSBraW5kcyBpdCBwcm9kdWNlcy4KKworCQlUaGUgb25seSBvdGhlciBmaWVsZCBjdXJyZW50bHkgcmVjb2duaXplZCBieSBWaW0gaXMgImZpbGU6IgorCQkod2l0aCBhbiBlbXB0eSB2YWx1ZSkuICBJdCBpcyB1c2VkIGZvciBhIHN0YXRpYyB0YWcuCisKK1RoZSBmaXJzdCBsaW5lcyBpbiB0aGUgdGFncyBmaWxlIGNhbiBjb250YWluIGxpbmVzIHRoYXQgc3RhcnQgd2l0aAorCSFfVEFHXworVGhlc2UgYXJlIHNvcnRlZCB0byB0aGUgZmlyc3QgbGluZXMsIG9ubHkgcmFyZSB0YWdzIHRoYXQgc3RhcnQgd2l0aCAiISIgY2FuCitzb3J0IHRvIGJlZm9yZSB0aGVtLiAgVmltIHJlY29nbml6ZXMgdHdvIGl0ZW1zLiAgVGhlIGZpcnN0IG9uZSBpcyB0aGUgbGluZQordGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGZpbGUgd2FzIHNvcnRlZC4gIFdoZW4gdGhpcyBsaW5lIGlzIGZvdW5kLCBWaW0gdXNlcworYmluYXJ5IHNlYXJjaGluZyBmb3IgdGhlIHRhZ3MgZmlsZToKKwkhX1RBR19GSUxFX1NPUlRFRDxUYWI+MTxUYWI+e2FueXRoaW5nfSB+CisKK0EgdGFnIGZpbGUgbWF5IGJlIGNhc2UtZm9sZCBzb3J0ZWQgdG8gYXZvaWQgYSBsaW5lYXIgc2VhcmNoIHdoZW4gJ2lnbm9yZWNhc2UnCitpcyBvbi4gIFNlZSAndGFnYnNlYXJjaCcgZm9yIGRldGFpbHMuICBUaGUgdmFsdWUgJzInIHNob3VsZCBiZSB1c2VkIHRoZW46CisJIV9UQUdfRklMRV9TT1JURUQ8VGFiPjI8VGFiPnthbnl0aGluZ30gfgorCitUaGUgb3RoZXIgdGFnIHRoYXQgVmltIHJlY29nbml6ZXMsIGJ1dCBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCB0aGUKK3wrbXVsdGlfYnl0ZXwgZmVhdHVyZSwgaXMgdGhlIGVuY29kaW5nIG9mIHRoZSB0YWdzIGZpbGU6CisJIV9UQUdfRklMRV9FTkNPRElORzxUYWI+dXRmLTg8VGFiPnthbnl0aGluZ30gfgorSGVyZSAidXRmLTgiIGlzIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgdGFncy4gIFZpbSB3aWxsIHRoZW4gY29udmVydCB0aGUgdGFnCitiZWluZyBzZWFyY2hlZCBmb3IgZnJvbSAnZW5jb2RpbmcnIHRvIHRoZSBlbmNvZGluZyBvZiB0aGUgdGFncyBmaWxlLiAgQW5kIHdoZW4KK2xpc3RpbmcgdGFncyB0aGUgcmV2ZXJzZSBoYXBwZW5zLiAgV2hlbiB0aGUgY29udmVyc2lvbiBmYWlscyB0aGUgdW5jb252ZXJ0ZWQKK3RhZyBpcyB1c2VkLgorCisJCQkJCQkJKnRhZy1zZWFyY2gqCitUaGUgY29tbWFuZCBjYW4gYmUgYW55IEV4IGNvbW1hbmQsIGJ1dCBvZnRlbiBpdCBpcyBhIHNlYXJjaCBjb21tYW5kLgorRXhhbXBsZXM6CisJdGFnMQlmaWxlMQkvXm1haW4oYXJnYywgYXJndikvIH4KKwl0YWcyCWZpbGUyCTEwOCB+CisKK1RoZSBjb21tYW5kIGlzIGFsd2F5cyBleGVjdXRlZCB3aXRoICdtYWdpYycgbm90IHNldC4gIFRoZSBvbmx5IHNwZWNpYWwKK2NoYXJhY3RlcnMgaW4gYSBzZWFyY2ggcGF0dGVybiBhcmUgIl4iIChiZWdpbi1vZi1saW5lKSBhbmQgIiQiICg8RU9MPikuCitTZWUgfHBhdHRlcm58LiAgTm90ZSB0aGF0IHlvdSBtdXN0IHB1dCBhIGJhY2tzbGFzaCBiZWZvcmUgZWFjaCBiYWNrc2xhc2ggaW4KK3RoZSBzZWFyY2ggdGV4dC4gIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggVmkuCisKKwkJCQkJCQkqRTQzNCogKkU0MzUqCitJZiB0aGUgY29tbWFuZCBpcyBhIG5vcm1hbCBzZWFyY2ggY29tbWFuZCAoaXQgc3RhcnRzIGFuZCBlbmRzIHdpdGggIi8iIG9yCisiPyIpLCBzb21lIHNwZWNpYWwgaGFuZGxpbmcgaXMgZG9uZToKKy0gU2VhcmNoaW5nIHN0YXJ0cyBvbiBsaW5lIDEgb2YgdGhlIGZpbGUuCisgIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNlYXJjaCBpcyBmb3J3YXJkIGZvciAiLyIsIGJhY2t3YXJkIGZvciAiPyIuCisgIE5vdGUgdGhhdCAnd3JhcHNjYW4nIGRvZXMgbm90IG1hdHRlciwgdGhlIHdob2xlIGZpbGUgaXMgYWx3YXlzIHNlYXJjaGVkLiB7VmkKKyAgZG9lcyB1c2UgJ3dyYXBzY2FuJywgd2hpY2ggY2F1c2VkIHRhZ3Mgc29tZXRpbWVzIG5vdCBiZSBmb3VuZCkuICB7Vmkgc3RhcnRzCisgIHNlYXJjaGluZyBpbiBsaW5lIDIgb2YgYW5vdGhlciBmaWxlLiAgSXQgZG9lcyBub3QgZmluZCBhIHRhZyBpbiBsaW5lIDEgb2YKKyAgYW5vdGhlciBmaWxlIHdoZW4gJ3dyYXBzY2FuJyBpcyBub3Qgc2V0fQorLSBJZiB0aGUgc2VhcmNoIGZhaWxzLCBhbm90aGVyIHRyeSBpcyBkb25lIGlnbm9yaW5nIGNhc2UuICBJZiB0aGF0IGZhaWxzIHRvbywKKyAgYSBzZWFyY2ggaXMgZG9uZSBmb3I6CisJIl50YWduYW1lWyBcdF0qKCIKKyAgKHRoZSB0YWcgd2l0aCAnXicgcHJlcGVuZGVkIGFuZCAiWyBcdF0qKCIgYXBwZW5kZWQpLiAgV2hlbiB1c2luZyBmdW5jdGlvbgorICBuYW1lcywgdGhpcyB3aWxsIGZpbmQgdGhlIGZ1bmN0aW9uIG5hbWUgd2hlbiBpdCBpcyBpbiBjb2x1bW4gMC4gIFRoaXMgd2lsbAorICBoZWxwIHdoZW4gdGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24gaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB0YWdzIGZpbGUgd2FzCisgIG1hZGUuICBJZiB0aGlzIHNlYXJjaCBhbHNvIGZhaWxzIGFub3RoZXIgc2VhcmNoIGlzIGRvbmUgd2l0aDoKKwkiXlsjYS16QS1aX10uKlw8dGFnbmFtZVsgXHRdKigiCisgIFRoaXMgbWVhbnM6IEEgbGluZSBzdGFydGluZyB3aXRoICcjJyBvciBhbiBpZGVudGlmaWVyIGFuZCBjb250YWluaW5nIHRoZSB0YWcKKyAgZm9sbG93ZWQgYnkgd2hpdGUgc3BhY2UgYW5kIGEgJygnLiAgVGhpcyB3aWxsIGZpbmQgbWFjcm8gbmFtZXMgYW5kIGZ1bmN0aW9uCisgIG5hbWVzIHdpdGggYSB0eXBlIHByZXBlbmRlZC4gIHt0aGUgZXh0cmEgc2VhcmNoZXMgYXJlIG5vdCBpbiBWaX0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNi4gSW5jbHVkZSBmaWxlIHNlYXJjaGVzCQkqaW5jbHVkZS1zZWFyY2gqICpkZWZpbml0aW9uLXNlYXJjaCoKKwkJCQkJCQkqRTM4NyogKkUzODgqICpFMzg5KgorCitUaGVzZSBjb21tYW5kcyBsb29rIGZvciBhIHN0cmluZyBpbiB0aGUgY3VycmVudCBmaWxlIGFuZCBpbiBhbGwgZW5jb3VudGVyZWQKK2luY2x1ZGVkIGZpbGVzIChyZWN1cnNpdmVseSkuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYQordmFyaWFibGUsIGZ1bmN0aW9uIG9yIG1hY3JvLiAgSWYgeW91IG9ubHkgd2FudCB0byBzZWFyY2ggaW4gdGhlIGN1cnJlbnQKK2J1ZmZlciwgdXNlIHRoZSBjb21tYW5kcyBsaXN0ZWQgYXQgfHBhdHRlcm4tc2VhcmNoZXN8LgorCitUaGVzZSBjb21tYW5kcyBhcmUgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K2ZpbmRfaW5fcGF0aHwgZmVhdHVyZSB3YXMgZGlzYWJsZWQKK2F0IGNvbXBpbGUgdGltZS4KKworV2hlbiBhIGxpbmUgaXMgZW5jb3VudGVyZWQgdGhhdCBpbmNsdWRlcyBhbm90aGVyIGZpbGUsIHRoYXQgZmlsZSBpcyBzZWFyY2hlZAorYmVmb3JlIGNvbnRpbnVpbmcgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAgRmlsZXMgaW5jbHVkZWQgYnkgaW5jbHVkZWQgZmlsZXMgYXJlCithbHNvIHNlYXJjaGVkLiAgV2hlbiBhbiBpbmNsdWRlIGZpbGUgY291bGQgbm90IGJlIGZvdW5kIGl0IGlzIHNpbGVudGx5CitpZ25vcmVkLiAgVXNlIHRoZSB8OmNoZWNrcGF0aHwgY29tbWFuZCB0byBkaXNjb3ZlciB3aGljaCBmaWxlcyBjb3VsZCBub3QgYmUKK2ZvdW5kLCBwb3NzaWJseSB5b3VyICdwYXRoJyBvcHRpb24gaXMgbm90IHNldCB1cCBjb3JyZWN0bHkuICBOb3RlOiB0aGUKK2luY2x1ZGVkIGZpbGUgaXMgc2VhcmNoZWQsIG5vdCBhIGJ1ZmZlciB0aGF0IG1heSBiZSBlZGl0aW5nIHRoYXQgZmlsZS4gIE9ubHkKK2ZvciB0aGUgY3VycmVudCBmaWxlIHRoZSBsaW5lcyBpbiB0aGUgYnVmZmVyIGFyZSB1c2VkLgorCitUaGUgc3RyaW5nIGNhbiBiZSBhbnkga2V5d29yZCBvciBhIGRlZmluZWQgbWFjcm8uICBGb3IgdGhlIGtleXdvcmQgYW55IG1hdGNoCit3aWxsIGJlIGZvdW5kLiAgRm9yIGRlZmluZWQgbWFjcm9zIG9ubHkgbGluZXMgdGhhdCBtYXRjaCB3aXRoIHRoZSAnZGVmaW5lJworb3B0aW9uIHdpbGwgYmUgZm91bmQuICBUaGUgZGVmYXVsdCBpcyAiXiNccypkZWZpbmUiLCB3aGljaCBpcyBmb3IgQyBwcm9ncmFtcy4KK0ZvciBvdGhlciBsYW5ndWFnZXMgeW91IHByb2JhYmx5IHdhbnQgdG8gY2hhbmdlIHRoaXMuICBTZWUgJ2RlZmluZScgZm9yIGFuCitleGFtcGxlIGZvciBDKysuICBUaGUgc3RyaW5nIGNhbm5vdCBjb250YWluIGFuIGVuZC1vZi1saW5lLCBvbmx5IG1hdGNoZXMKK3dpdGhpbiBhIGxpbmUgYXJlIGZvdW5kLgorCitXaGVuIGEgbWF0Y2ggaXMgZm91bmQgZm9yIGEgZGVmaW5lZCBtYWNybywgdGhlIGRpc3BsYXlpbmcgb2YgbGluZXMgY29udGludWVzCit3aXRoIHRoZSBuZXh0IGxpbmUgd2hlbiBhIGxpbmUgZW5kcyBpbiBhIGJhY2tzbGFzaC4KKworVGhlIGNvbW1hbmRzIHRoYXQgc3RhcnQgd2l0aCAiWyIgc3RhcnQgc2VhcmNoaW5nIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50CitmaWxlLiAgVGhlIGNvbW1hbmRzIHRoYXQgc3RhcnQgd2l0aCAiXSIgc3RhcnQgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorCitUaGUgJ2luY2x1ZGUnIG9wdGlvbiBpcyB1c2VkIHRvIGRlZmluZSBhIGxpbmUgdGhhdCBpbmNsdWRlcyBhbm90aGVyIGZpbGUuICBUaGUKK2RlZmF1bHQgaXMgIlxeI1xzKmluY2x1ZGUiLCB3aGljaCBpcyBmb3IgQyBwcm9ncmFtcy4gIE5vdGU6IFZpbSBkb2VzIG5vdAorcmVjb2duaXplIEMgc3ludGF4LCBpZiB0aGUgJ2luY2x1ZGUnIG9wdGlvbiBtYXRjaGVzIGEgbGluZSBpbnNpZGUKKyIjaWZkZWYvI2VuZGlmIiBvciBpbnNpZGUgYSBjb21tZW50LCBpdCBpcyBzZWFyY2hlZCBhbnl3YXkuICBUaGUgJ2lzZm5hbWUnCitvcHRpb24gaXMgdXNlZCB0byByZWNvZ25pemUgdGhlIGZpbGUgbmFtZSB0aGF0IGNvbWVzIGFmdGVyIHRoZSBtYXRjaGVkCitwYXR0ZXJuLgorCitUaGUgJ3BhdGgnIG9wdGlvbiBpcyB1c2VkIHRvIGZpbmQgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIGluY2x1ZGUgZmlsZXMgdGhhdAorZG8gbm90IGhhdmUgYW4gYWJzb2x1dGUgcGF0aC4KKworVGhlICdjb21tZW50cycgb3B0aW9uIGlzIHVzZWQgZm9yIHRoZSBjb21tYW5kcyB0aGF0IGRpc3BsYXkgYSBzaW5nbGUgbGluZSBvcgoranVtcCB0byBhIGxpbmUuICBJdCBkZWZpbmVzIHBhdHRlcm5zIHRoYXQgbWF5IHN0YXJ0IGEgY29tbWVudC4gIFRob3NlIGxpbmVzCithcmUgaWdub3JlZCBmb3IgdGhlIHNlYXJjaCwgdW5sZXNzIFshXSBpcyB1c2VkLiAgT25lIGV4Y2VwdGlvbjogV2hlbiB0aGUgbGluZQorbWF0Y2hlcyB0aGUgcGF0dGVybiAiXiMgKmRlZmluZSIgaXQgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgYSBjb21tZW50LgorCitJZiB5b3Ugd2FudCB0byBsaXN0IG1hdGNoZXMsIGFuZCB0aGVuIHNlbGVjdCBvbmUgdG8ganVtcCB0bywgeW91IGNvdWxkIHVzZSBhCittYXBwaW5nIHRvIGRvIHRoYXQgZm9yIHlvdS4gIEhlcmUgaXMgYW4gZXhhbXBsZTogPgorCisgIDptYXAgPEY0PiBbSTpsZXQgbnIgPSBpbnB1dCgiV2hpY2ggb25lOiAiKTxCYXI+ZXhlICJub3JtYWwgIiAuIG5yIC4iW1x0IjxDUj4KKzwKKwkJCQkJCQkqW2kqCitbaQkJCURpc3BsYXkgdGhlIGZpcnN0IGxpbmUgdGhhdCBjb250YWlucyB0aGUga2V5d29yZAorCQkJdW5kZXIgdGhlIGN1cnNvci4gIFRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcKKwkJCW9mIHRoZSBmaWxlLiAgTGluZXMgdGhhdCBsb29rIGxpa2UgYSBjb21tZW50IGFyZQorCQkJaWdub3JlZCAoc2VlICdjb21tZW50cycgb3B0aW9uKS4gIElmIGEgY291bnQgaXMgZ2l2ZW4sCisJCQl0aGUgY291bnQndGggbWF0Y2hpbmcgbGluZSBpcyBkaXNwbGF5ZWQsIGFuZCBjb21tZW50CisJCQlsaW5lcyBhcmUgbm90IGlnbm9yZWQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKl1pKgorXWkJCQlsaWtlICJbaSIsIGJ1dCBzdGFydCBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjppcyogKjppc2VhcmNoKgorOltyYW5nZV1pc1tlYXJjaF1bIV0gW2NvdW50XSBbL11wYXR0ZXJuWy9dCisJCQlMaWtlICJbaSIgIGFuZCAiXWkiLCBidXQgc2VhcmNoIGluIFtyYW5nZV0gbGluZXMKKwkJCShkZWZhdWx0OiB3aG9sZSBmaWxlKS4KKwkJCVNlZSB8OnNlYXJjaC1hcmdzfCBmb3IgWy9dIGFuZCBbIV0uICB7bm90IGluIFZpfQorCisJCQkJCQkJKltJKgorW0kJCQlEaXNwbGF5IGFsbCBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGtleXdvcmQgdW5kZXIgdGhlCisJCQljdXJzb3IuICBGaWxlbmFtZXMgYW5kIGxpbmUgbnVtYmVycyBhcmUgZGlzcGxheWVkCisJCQlmb3IgdGhlIGZvdW5kIGxpbmVzLiAgVGhlIHNlYXJjaCBzdGFydHMgYXQgdGhlCisJCQliZWdpbm5pbmcgb2YgdGhlIGZpbGUuICB7bm90IGluIFZpfQorCisJCQkJCQkJKl1JKgorXUkJCQlsaWtlICJbSSIsIGJ1dCBzdGFydCBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjppbCogKjppbGlzdCoKKzpbcmFuZ2VdaWxbaXN0XVshXSBbL11wYXR0ZXJuWy9dCisJCQlMaWtlICJbSSIgYW5kICJdSSIsIGJ1dCBzZWFyY2ggaW4gW3JhbmdlXSBsaW5lcworCQkJKGRlZmF1bHQ6IHdob2xlIGZpbGUpLgorCQkJU2VlIHw6c2VhcmNoLWFyZ3N8IGZvciBbL10gYW5kIFshXS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqW19DVFJMLUkqCitbIENUUkwtSQkJSnVtcCB0byB0aGUgZmlyc3QgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBrZXl3b3JkCisJCQl1bmRlciB0aGUgY3Vyc29yLiAgVGhlIHNlYXJjaCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZworCQkJb2YgdGhlIGZpbGUuICBMaW5lcyB0aGF0IGxvb2sgbGlrZSBhIGNvbW1lbnQgYXJlCisJCQlpZ25vcmVkIChzZWUgJ2NvbW1lbnRzJyBvcHRpb24pLiAgSWYgYSBjb3VudCBpcyBnaXZlbiwKKwkJCXRoZSBjb3VudCd0aCBtYXRjaGluZyBsaW5lIGlzIGp1bXBlZCB0bywgYW5kIGNvbW1lbnQKKwkJCWxpbmVzIGFyZSBub3QgaWdub3JlZC4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqXV9DVFJMLUkqCitdIENUUkwtSQkJbGlrZSAiWyBDVFJMLUkiLCBidXQgc3RhcnQgYXQgdGhlIGN1cnJlbnQgY3Vyc29yCisJCQlwb3NpdGlvbi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmlqKiAqOmlqdW1wKgorOltyYW5nZV1palt1bXBdWyFdIFtjb3VudF0gWy9dcGF0dGVyblsvXQorCQkJTGlrZSAiWyBDVFJMLUkiICBhbmQgIl0gQ1RSTC1JIiwgYnV0IHNlYXJjaCBpbgorCQkJW3JhbmdlXSBsaW5lcyAoZGVmYXVsdDogd2hvbGUgZmlsZSkuCisJCQlTZWUgfDpzZWFyY2gtYXJnc3wgZm9yIFsvXSBhbmQgWyFdLiAge25vdCBpbiBWaX0KKworQ1RSTC1XIENUUkwtSQkJCQkJKkNUUkwtV19DVFJMLUkqICpDVFJMLVdfaSoKK0NUUkwtVyBpCQlPcGVuIGEgbmV3IHdpbmRvdywgd2l0aCB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBsaW5lCisJCQl0aGF0IGNvbnRhaW5zIHRoZSBrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3IuICBUaGUKKwkJCXNlYXJjaCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIExpbmVzCisJCQl0aGF0IGxvb2sgbGlrZSBhIGNvbW1lbnQgbGluZSBhcmUgaWdub3JlZCAoc2VlCisJCQknY29tbWVudHMnIG9wdGlvbikuICBJZiBhIGNvdW50IGlzIGdpdmVuLCB0aGUgY291bnQndGgKKwkJCW1hdGNoaW5nIGxpbmUgaXMganVtcGVkIHRvLCBhbmQgY29tbWVudCBsaW5lcyBhcmUgbm90CisJCQlpZ25vcmVkLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6aXNwKiAqOmlzcGxpdCoKKzpbcmFuZ2VdaXNwW2xpdF1bIV0gW2NvdW50XSBbL11wYXR0ZXJuWy9dCisJCQlMaWtlICJDVFJMLVcgaSIgIGFuZCAiQ1RSTC1XIGkiLCBidXQgc2VhcmNoIGluCisJCQlbcmFuZ2VdIGxpbmVzIChkZWZhdWx0OiB3aG9sZSBmaWxlKS4KKwkJCVNlZSB8OnNlYXJjaC1hcmdzfCBmb3IgWy9dIGFuZCBbIV0uICB7bm90IGluIFZpfQorCisJCQkJCQkJKltkKgorW2QJCQlEaXNwbGF5IHRoZSBmaXJzdCBtYWNybyBkZWZpbml0aW9uIHRoYXQgY29udGFpbnMgdGhlCisJCQltYWNybyB1bmRlciB0aGUgY3Vyc29yLiAgVGhlIHNlYXJjaCBzdGFydHMgZnJvbSB0aGUKKwkJCWJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIElmIGEgY291bnQgaXMgZ2l2ZW4sIHRoZQorCQkJY291bnQndGggbWF0Y2hpbmcgbGluZSBpcyBkaXNwbGF5ZWQuICB7bm90IGluIFZpfQorCisJCQkJCQkJKl1kKgorXWQJCQlsaWtlICJbZCIsIGJ1dCBzdGFydCBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpkcyogKjpkc2VhcmNoKgorOltyYW5nZV1kc1tlYXJjaF1bIV0gW2NvdW50XSBbL11zdHJpbmdbL10KKwkJCUxpa2UgIltkIiAgYW5kICJdZCIsIGJ1dCBzZWFyY2ggaW4gW3JhbmdlXSBsaW5lcworCQkJKGRlZmF1bHQ6IHdob2xlIGZpbGUpLgorCQkJU2VlIHw6c2VhcmNoLWFyZ3N8IGZvciBbL10gYW5kIFshXS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqW0QqCitbRAkJCURpc3BsYXkgYWxsIG1hY3JvIGRlZmluaXRpb25zIHRoYXQgY29udGFpbiB0aGUgbWFjcm8KKwkJCXVuZGVyIHRoZSBjdXJzb3IuICBGaWxlbmFtZXMgYW5kIGxpbmUgbnVtYmVycyBhcmUKKwkJCWRpc3BsYXllZCBmb3IgdGhlIGZvdW5kIGxpbmVzLiAgVGhlIHNlYXJjaCBzdGFydHMKKwkJCWZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqXUQqCitdRAkJCWxpa2UgIltEIiwgYnV0IHN0YXJ0IGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqOmRsKiAqOmRsaXN0KgorOltyYW5nZV1kbFtpc3RdWyFdIFsvXXN0cmluZ1svXQorCQkJTGlrZSAiW0QiICBhbmQgIl1EIiwgYnV0IHNlYXJjaCBpbiBbcmFuZ2VdIGxpbmVzCisJCQkoZGVmYXVsdDogd2hvbGUgZmlsZSkuCisJCQlTZWUgfDpzZWFyY2gtYXJnc3wgZm9yIFsvXSBhbmQgWyFdLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSpbX0NUUkwtRCoKK1sgQ1RSTC1ECQlKdW1wIHRvIHRoZSBmaXJzdCBtYWNybyBkZWZpbml0aW9uIHRoYXQgY29udGFpbnMgdGhlCisJCQlrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3IuICBUaGUgc2VhcmNoIHN0YXJ0cyBmcm9tCisJCQl0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgSWYgYSBjb3VudCBpcyBnaXZlbiwgdGhlCisJCQljb3VudCd0aCBtYXRjaGluZyBsaW5lIGlzIGp1bXBlZCB0by4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqXV9DVFJMLUQqCitdIENUUkwtRAkJbGlrZSAiWyBDVFJMLUQiLCBidXQgc3RhcnQgYXQgdGhlIGN1cnJlbnQgY3Vyc29yCisJCQlwb3NpdGlvbi4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmRqKiAqOmRqdW1wKgorOltyYW5nZV1kalt1bXBdWyFdIFtjb3VudF0gWy9dc3RyaW5nWy9dCisJCQlMaWtlICJbIENUUkwtRCIgIGFuZCAiXSBDVFJMLUQiLCBidXQgc2VhcmNoICBpbgorCQkJW3JhbmdlXSBsaW5lcyAoZGVmYXVsdDogd2hvbGUgZmlsZSkuCisJCQlTZWUgfDpzZWFyY2gtYXJnc3wgZm9yIFsvXSBhbmQgWyFdLiAge25vdCBpbiBWaX0KKworQ1RSTC1XIENUUkwtRAkJCQkJKkNUUkwtV19DVFJMLUQqICpDVFJMLVdfZCoKK0NUUkwtVyBkCQlPcGVuIGEgbmV3IHdpbmRvdywgd2l0aCB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdAorCQkJbWFjcm8gZGVmaW5pdGlvbiBsaW5lIHRoYXQgY29udGFpbnMgdGhlIGtleXdvcmQKKwkJCXVuZGVyIHRoZSBjdXJzb3IuICBUaGUgc2VhcmNoIHN0YXJ0cyBmcm9tIHRoZQorCQkJYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgSWYgYSBjb3VudCBpcyBnaXZlbiwgdGhlCisJCQljb3VudCd0aCBtYXRjaGluZyBsaW5lIGlzIGp1bXBlZCB0by4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmRzcCogKjpkc3BsaXQqCis6W3JhbmdlXWRzcFtsaXRdWyFdIFtjb3VudF0gWy9dc3RyaW5nWy9dCisJCQlMaWtlICJDVFJMLVcgZCIsIGJ1dCBzZWFyY2ggaW4gW3JhbmdlXSBsaW5lcworCQkJKGRlZmF1bHQ6IHdob2xlIGZpbGUpLgorCQkJU2VlIHw6c2VhcmNoLWFyZ3N8IGZvciBbL10gYW5kIFshXS4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkqOmNoZSogKjpjaGVja3BhdGgqCis6Y2hlW2NrcGF0aF0JCUxpc3QgYWxsIHRoZSBpbmNsdWRlZCBmaWxlcyB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZC4KKwkJCXtub3QgaW4gVml9CisKKzpjaGVbY2twYXRoXSEJCUxpc3QgYWxsIHRoZSBpbmNsdWRlZCBmaWxlcy4gIHtub3QgaW4gVml9CisKKwkJCQkJCQkJKjpzZWFyY2gtYXJncyoKK0NvbW1vbiBhcmd1bWVudHMgZm9yIHRoZSBjb21tYW5kcyBhYm92ZToKK1shXSAgIFdoZW4gaW5jbHVkZWQsIGZpbmQgbWF0Y2hlcyBpbiBsaW5lcyB0aGF0IGFyZSByZWNvZ25pemVkIGFzIGNvbW1lbnRzLgorICAgICAgV2hlbiBleGNsdWRlZCwgYSBtYXRjaCBpcyBpZ25vcmVkIHdoZW4gdGhlIGxpbmUgaXMgcmVjb2duaXplZCBhcyBhCisgICAgICBjb21tZW50IChhY2NvcmRpbmcgdG8gJ2NvbW1lbnRzJyksIG9yIHRoZSBtYXRjaCBpcyBpbiBhIEMgY29tbWVudCAoYWZ0ZXIKKyAgICAgICIvLyIgb3IgaW5zaWRlIC8qICovKS4gIE5vdGUgdGhhdCBhIG1hdGNoIG1heSBiZSBtaXNzZWQgaWYgYSBsaW5lIGlzCisgICAgICByZWNvZ25pemVkIGFzIGEgY29tbWVudCwgYnV0IHRoZSBjb21tZW50IGVuZHMgaGFsZndheSB0aGUgbGluZS4KKyAgICAgIEFuZCAgaWYgdGhlIGxpbmUgaXMgYSBjb21tZW50LCBidXQgaXQgaXMgbm90IHJlY29nbml6ZWQgKGFjY29yZGluZyB0bworICAgICAgJ2NvbW1lbnRzJykgYSBtYXRjaCBtYXkgYmUgZm91bmQgaW4gaXQgYW55d2F5LiAgRXhhbXBsZTogPgorCQkvKiBjb21tZW50CisJCSAgIGZvb2JhciAqLworPCAgICAgQSBtYXRjaCBmb3IgImZvb2JhciIgaXMgZm91bmQsIGJlY2F1c2UgdGhpcyBsaW5lIGlzIG5vdCByZWNvZ25pemVkIGFzIGEKKyAgICAgIGNvbW1lbnQgKGV2ZW4gdGhvdWdoIHN5bnRheCBoaWdobGlnaHRpbmcgZG9lcyByZWNvZ25pemUgaXQpLgorICAgICAgTm90ZTogU2luY2UgYSBtYWNybyBkZWZpbml0aW9uIG1vc3RseSBkb2Vzbid0IGxvb2sgbGlrZSBhIGNvbW1lbnQsIHRoZQorICAgICAgWyFdIG1ha2VzIG5vIGRpZmZlcmVuY2UgZm9yICI6ZGxpc3QiLCAiOmRzZWFyY2giIGFuZCAiOmRqdW1wIi4KK1svXSAgIEEgcGF0dGVybiBjYW4gYmUgc3Vycm91bmRlZCBieSAnLycuICBXaXRob3V0ICcvJyBvbmx5IHdob2xlIHdvcmRzIGFyZQorICAgICAgbWF0Y2hlZCwgdXNpbmcgdGhlIHBhdHRlcm4gIlw8cGF0dGVyblw+Ii4gIE9ubHkgYWZ0ZXIgdGhlIHNlY29uZCAnLycgYQorICAgICAgbmV4dCBjb21tYW5kIGNhbiBiZSBhcHBlbmRlZCB3aXRoICd8Jy4gIEV4YW1wbGU6ID4KKwk6aXNlYXJjaCAvc3RyaW5nLyB8IGVjaG8gInRoZSBsYXN0IG9uZSIKKzwgICAgIEZvciBhICI6ZGp1bXAiLCAiOmRzcGxpdCIsICI6ZGxpc3QiIGFuZCAiOmRzZWFyY2giIGNvbW1hbmQgdGhlIHBhdHRlcm4KKyAgICAgIGlzIHVzZWQgYXMgYSBsaXRlcmFsIHN0cmluZywgbm90IGFzIGEgc2VhcmNoIHBhdHRlcm4uCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90ZXJtLnR4dCBiL3J1bnRpbWUvZG9jL3Rlcm0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGQ2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy90ZXJtLnR4dApAQCAtMCwwICsxLDgwOCBAQAorKnRlcm0udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEphbiAwOQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1Rlcm1pbmFsIGluZm9ybWF0aW9uCQkJCQkqdGVybWluYWwtaW5mbyoKKworVmltIHVzZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlcm1pbmFsIHlvdSBhcmUgdXNpbmcgdG8gZmlsbCB0aGUgc2NyZWVuIGFuZAorcmVjb2duaXplIHdoYXQga2V5cyB5b3UgaGl0LiAgSWYgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgY29ycmVjdCwgdGhlIHNjcmVlbgorbWF5IGJlIG1lc3NlZCB1cCBvciBrZXlzIG1heSBub3QgYmUgcmVjb2duaXplZC4gIFRoZSBhY3Rpb25zIHdoaWNoIGhhdmUgdG8gYmUKK3BlcmZvcm1lZCBvbiB0aGUgc2NyZWVuIGFyZSBhY2NvbXBsaXNoZWQgYnkgb3V0cHV0dGluZyBhIHN0cmluZyBvZgorY2hhcmFjdGVycy4gIFNwZWNpYWwga2V5cyBwcm9kdWNlIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMuICBUaGVzZSBzdHJpbmdzIGFyZQorc3RvcmVkIGluIHRoZSB0ZXJtaW5hbCBvcHRpb25zLCBzZWUgfHRlcm1pbmFsLW9wdGlvbnN8LgorCitOT1RFOiBNb3N0IG9mIHRoaXMgaXMgbm90IHVzZWQgd2hlbiBydW5uaW5nIHRoZSB8R1VJfC4KKworMS4gU3RhcnR1cAkJCXxzdGFydHVwLXRlcm1pbmFsfAorMi4gVGVybWluYWwgb3B0aW9ucwkJfHRlcm1pbmFsLW9wdGlvbnN8CiszLiBXaW5kb3cgc2l6ZQkJCXx3aW5kb3ctc2l6ZXwKKzQuIFNsb3cgYW5kIGZhc3QgdGVybWluYWxzCXxzbG93LWZhc3QtdGVybWluYWx8Cis1LiBVc2luZyB0aGUgbW91c2UJCXxtb3VzZS11c2luZ3wKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBTdGFydHVwCQkJCQkJKnN0YXJ0dXAtdGVybWluYWwqCisKK1doZW4gVmltIGlzIHN0YXJ0ZWQgYSBkZWZhdWx0IHRlcm1pbmFsIHR5cGUgaXMgYXNzdW1lZC4gIEZvciB0aGUgQW1pZ2EgdGhpcyBpcworYSBzdGFuZGFyZCBDTEkgd2luZG93LCBmb3IgTVMtRE9TIHRoZSBwYyB0ZXJtaW5hbCwgZm9yIFVuaXggYW4gYW5zaSB0ZXJtaW5hbC4KK0EgZmV3IG90aGVyIHRlcm1pbmFsIHR5cGVzIGFyZSBhbHdheXMgYXZhaWxhYmxlLCBzZWUgYmVsb3cgfGJ1aWx0aW4tdGVybXN8LgorCitZb3UgY2FuIGdpdmUgdGhlIHRlcm1pbmFsIG5hbWUgd2l0aCB0aGUgJy1UJyBWaW0gYXJndW1lbnQuICBJZiBpdCBpcyBub3QgZ2l2ZW4KK1ZpbSB3aWxsIHRyeSB0byBnZXQgdGhlIG5hbWUgZnJvbSB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworCQkJCSp0ZXJtY2FwKiAqdGVybWluZm8qICpFNTU3KiAqRTU1OCogKkU1NTkqCitPbiBVbml4IHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBvciB0ZXJtY2FwIGZpbGUgaXMgdXNlZC4gIFRoaXMgaXMgcmVmZXJyZWQgdG8gYXMKKyJ0ZXJtY2FwIiBpbiBhbGwgdGhlIGRvY3VtZW50YXRpb24uICBBdCBjb21waWxlIHRpbWUsIHdoZW4gcnVubmluZyBjb25maWd1cmUsCit0aGUgY2hvaWNlIHdoZXRoZXIgdG8gdXNlIHRlcm1pbmZvIG9yIHRlcm1jYXAgaXMgZG9uZSBhdXRvbWF0aWNhbGx5LiAgV2hlbgorcnVubmluZyBWaW0gdGhlIG91dHB1dCBvZiAiOnZlcnNpb24iIHdpbGwgc2hvdyB8K3Rlcm1pbmZvfCBpZiB0ZXJtaW5mbyBpcwordXNlZC4gIEFsc28gc2VlIHx4dGVybS1zY3JlZW5zfC4KKworT24gbm9uLVVuaXggc3lzdGVtcyBhIHRlcm1jYXAgaXMgb25seSBhdmFpbGFibGUgaWYgVmltIHdhcyBjb21waWxlZCB3aXRoCitURVJNQ0FQIGRlZmluZWQuCisKKwkJCQkJKmJ1aWx0aW4tdGVybXMqICpidWlsdGluX3Rlcm1zKgorV2hpY2ggYnVpbHRpbiB0ZXJtaW5hbHMgYXJlIGF2YWlsYWJsZSBkZXBlbmRzIG9uIGEgZmV3IGRlZmluZXMgaW4gZmVhdHVyZS5oLAord2hpY2ggbmVlZCB0byBiZSBzZXQgYXQgY29tcGlsZSB0aW1lOgorICAgIGRlZmluZQkJb3V0cHV0IG9mICI6dmVyc2lvbiIJdGVybWluYWxzIGJ1aWx0aW4JfgorTk9fQlVJTFRJTl9UQ0FQUwktYnVpbHRpbl90ZXJtcwkJbm9uZQorU09NRV9CVUlMVElOX1RDQVBTCStidWlsdGluX3Rlcm1zCQltb3N0IGNvbW1vbiBvbmVzIChkZWZhdWx0KQorQUxMX0JVSUxUSU5fVENBUFMJKytidWlsdGluX3Rlcm1zCQlhbGwgYXZhaWxhYmxlCisKK1lvdSBjYW4gc2VlIGEgbGlzdCBvZiBhdmFpbGFibGUgYnVpbHRpbiB0ZXJtaW5hbHMgd2l0aCAiOnNldCB0ZXJtPXh4eCIgKHdoZW4KK25vdCBydW5uaW5nIHRoZSBHVUkpLiAgQWxzbyBzZWUgfCtidWlsdGluX3Rlcm1zfC4KKworSWYgdGhlIHRlcm1jYXAgY29kZSBpcyBpbmNsdWRlZCBWaW0gd2lsbCB0cnkgdG8gZ2V0IHRoZSBzdHJpbmdzIGZvciB0aGUKK3Rlcm1pbmFsIHlvdSBhcmUgdXNpbmcgZnJvbSB0aGUgdGVybWNhcCBmaWxlIGFuZCB0aGUgYnVpbHRpbiB0ZXJtY2Fwcy4gIEJvdGgKK2FyZSBhbHdheXMgdXNlZCwgaWYgYW4gZW50cnkgZm9yIHRoZSB0ZXJtaW5hbCB5b3UgYXJlIHVzaW5nIGlzIHByZXNlbnQuICBXaGljaAorb25lIGlzIHVzZWQgZmlyc3QgZGVwZW5kcyBvbiB0aGUgJ3R0eWJ1aWx0aW4nIG9wdGlvbjoKKworJ3R0eWJ1aWx0aW4nIG9uCQkxOiBidWlsdGluIHRlcm1jYXAJMjogZXh0ZXJuYWwgdGVybWNhcAorJ3R0eWJ1aWx0aW4nIG9mZgkxOiBleHRlcm5hbCB0ZXJtY2FwCTI6IGJ1aWx0aW4gdGVybWNhcAorCitJZiBhbiBvcHRpb24gaXMgbWlzc2luZyBpbiBvbmUgb2YgdGhlbSwgaXQgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBvdGhlcgorb25lLiAgSWYgYW4gb3B0aW9uIGlzIHByZXNlbnQgaW4gYm90aCwgdGhlIG9uZSBmaXJzdCBlbmNvdW50ZXJlZCBpcyB1c2VkLgorCitXaGljaCBleHRlcm5hbCB0ZXJtY2FwIGZpbGUgaXMgdXNlZCB2YXJpZXMgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtIGFuZCBtYXkKK2RlcGVuZCBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICJURVJNQ0FQIiBhbmQgIlRFUk1QQVRIIi4gIFNlZSAibWFuCit0Z2V0ZW50Ii4KKworU2V0dGluZ3MgZGVwZW5kaW5nIG9uIHRlcm1pbmFsCQkJKnRlcm0tZGVwZW5kZW50LXNldHRpbmdzKgorCitJZiB5b3Ugd2FudCB0byBzZXQgb3B0aW9ucyBvciBtYXBwaW5ncywgZGVwZW5kaW5nIG9uIHRoZSB0ZXJtaW5hbCBuYW1lLCB5b3UKK2NhbiBkbyB0aGlzIGJlc3QgaW4geW91ciAudmltcmMuICBFeGFtcGxlOiA+CisKKyAgIGlmICZ0ZXJtID09ICJ4dGVybSIKKyAgICAgLi4uIHh0ZXJtIG1hcHMgYW5kIHNldHRpbmdzIC4uLgorICAgZWxzZWlmICZ0ZXJtID1+ICJ2dDEwLiIKKyAgICAgLi4uIHZ0MTAwLCB2dDEwMiBtYXBzIGFuZCBzZXR0aW5ncyAuLi4KKyAgIGVuZGlmCis8CisJCQkJCQkqcmF3LXRlcm1pbmFsLW1vZGUqCitGb3Igbm9ybWFsIGVkaXRpbmcgdGhlIHRlcm1pbmFsIHdpbGwgYmUgcHV0IGludG8gInJhdyIgbW9kZS4gIFRoZSBzdHJpbmdzCitkZWZpbmVkIHdpdGggJ3RfdGknIGFuZCAndF9rcycgd2lsbCBiZSBzZW50IHRvIHRoZSB0ZXJtaW5hbC4gIE5vcm1hbGx5IHRoaXMKK3B1dHMgdGhlIHRlcm1pbmFsIGluIGEgc3RhdGUgd2hlcmUgdGhlIHRlcm1jYXAgY29kZXMgYXJlIHZhbGlkIGFuZCBhY3RpdmF0ZXMKK3RoZSBjdXJzb3IgYW5kIGZ1bmN0aW9uIGtleXMuICBXaGVuIFZpbSBleGl0cyB0aGUgdGVybWluYWwgd2lsbCBiZSBwdXQgYmFjaworaW50byB0aGUgbW9kZSBpdCB3YXMgYmVmb3JlIFZpbSBzdGFydGVkLiAgVGhlIHN0cmluZ3MgZGVmaW5lZCB3aXRoICd0X3RlJyBhbmQKKyd0X2tlJyB3aWxsIGJlIHNlbnQgdG8gdGhlIHRlcm1pbmFsLiAgT24gdGhlIEFtaWdhLCB3aXRoIGNvbW1hbmRzIHRoYXQgZXhlY3V0ZQorYW4gZXh0ZXJuYWwgY29tbWFuZCAoZS5nLiwgIiEhIiksIHRoZSB0ZXJtaW5hbCB3aWxsIGJlIHB1dCBpbnRvIE5vcm1hbCBtb2RlCitmb3IgYSBtb21lbnQuICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzdG9wIHRoZSBvdXRwdXQgdG8gdGhlIHNjcmVlbiBieQoraGl0dGluZyBhIHByaW50aW5nIGtleS4gIE91dHB1dCByZXN1bWVzIHdoZW4geW91IGhpdCA8QlM+LgorCisJCQkJCQkJKmNzNy1wcm9ibGVtKgorTm90ZTogSWYgdGhlIHRlcm1pbmFsIHNldHRpbmdzIGFyZSBjaGFuZ2VkIGFmdGVyIHJ1bm5pbmcgVmltLCB5b3UgbWlnaHQgaGF2ZQorYW4gaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBzZXR0aW5ncy4gIFRoaXMgaGFzIGJlZW4gcmVwb3J0ZWQgb24gU29sYXJpcyAyLjUKK3dpdGggInN0dHkgY3M4IHBhcmVuYiIsIHdoaWNoIGlzIHJlc3RvcmVkIGFzICJzdHR5IGNzNyBwYXJlbmIiLiAgVXNlCisic3R0eSBjczggLXBhcmVuYiAtaXN0cmlwIiBpbnN0ZWFkLCB0aGlzIGlzIHJlc3RvcmVkIGNvcnJlY3RseS4KKworU29tZSB0ZXJtY2FwIGVudHJpZXMgYXJlIHdyb25nIGluIHRoZSBzZW5zZSB0aGF0IGFmdGVyIHNlbmRpbmcgJ3Rfa3MnIHRoZQorY3Vyc29yIGtleXMgc2VuZCBjb2RlcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29kZXMgZGVmaW5lZCBpbiB0aGUgdGVybWNhcC4gIFRvCithdm9pZCB0aGlzIHlvdSBjYW4gc2V0ICd0X2tzJyAoYW5kICd0X2tlJykgdG8gZW1wdHkgc3RyaW5ncy4gIFRoaXMgbXVzdCBiZQorZG9uZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKHNlZSB8aW5pdGlhbGl6YXRpb258KSwgb3RoZXJ3aXNlIGl0J3MgdG9vIGxhdGUuCisKK1NvbWUgdGVybWNhcCBlbnRyaWVzIGFzc3VtZSB0aGF0IHRoZSBoaWdoZXN0IGJpdCBpcyBhbHdheXMgcmVzZXQuICBGb3IKK2V4YW1wbGU6IFRoZSBjdXJzb3ItdXAgZW50cnkgZm9yIHRoZSBBbWlnYSBjb3VsZCBiZSAiOmt1PVxFW0E6Ii4gIEJ1dCB0aGUKK0FtaWdhIHJlYWxseSBzZW5kcyAiXDIzM0EiLiAgVGhpcyB3b3JrcyBmaW5lIGlmIHRoZSBoaWdoZXN0IGJpdCBpcyByZXNldCwKK2UuZy4sIHdoZW4gdXNpbmcgYW4gQW1pZ2Egb3ZlciBhIHNlcmlhbCBsaW5lLiAgSWYgdGhlIGN1cnNvciBrZXlzIGRvbid0IHdvcmssCit0cnkgdGhlIGVudHJ5ICI6a3U9XDIzM0E6Ii4KKworU29tZSB0ZXJtY2FwIGVudHJpZXMgaGF2ZSB0aGUgZW50cnkgIjprdT1cRVtBOiIuICBCdXQgdGhlIEFtaWdhIHJlYWxseSBzZW5kcworIlwyMzNBIi4gIE9uIG91dHB1dCAiXEVbIiBhbmQgIlwyMzMiIGFyZSBvZnRlbiBlcXVpdmFsZW50LCBvbiBpbnB1dCB0aGV5CithcmVuJ3QuICBZb3Ugd2lsbCBoYXZlIHRvIGNoYW5nZSB0aGUgdGVybWNhcCBlbnRyeSwgb3IgY2hhbmdlIHRoZSBrZXkgY29kZSB3aXRoCit0aGUgOnNldCBjb21tYW5kIHRvIGZpeCB0aGlzLgorCitNYW55IGN1cnNvciBrZXkgY29kZXMgc3RhcnQgd2l0aCBhbiA8RXNjPi4gIFZpbSBtdXN0IGZpbmQgb3V0IGlmIHRoaXMgaXMgYQorc2luZ2xlIGhpdCBvZiB0aGUgPEVzYz4ga2V5IG9yIHRoZSBzdGFydCBvZiBhIGN1cnNvciBrZXkgc2VxdWVuY2UuICBJdCB3YWl0cworZm9yIGEgbmV4dCBjaGFyYWN0ZXIgdG8gYXJyaXZlLiAgSWYgaXQgZG9lcyBub3QgYXJyaXZlIHdpdGhpbiBvbmUgc2Vjb25kIGEKK3NpbmdsZSA8RXNjPiBpcyBhc3N1bWVkLiAgT24gdmVyeSBzbG93IHN5c3RlbXMgdGhpcyBtYXkgZmFpbCwgY2F1c2luZyBjdXJzb3IKK2tleXMgbm90IHRvIHdvcmsgc29tZXRpbWVzLiAgSWYgeW91IGRpc2NvdmVyIHRoaXMgcHJvYmxlbSByZXNldCB0aGUgJ3RpbWVvdXQnCitvcHRpb24uICBWaW0gd2lsbCB3YWl0IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYXJyaXZlIGFmdGVyIGFuIDxFc2M+LiAgSWYKK3lvdSB3YW50IHRvIGVudGVyIGEgc2luZ2xlIDxFc2M+IHlvdSBtdXN0IHR5cGUgaXQgdHdpY2UuICBSZXNldHRpbmcgdGhlCisnZXNja2V5cycgb3B0aW9uIGF2b2lkcyB0aGlzIHByb2JsZW0gaW4gSW5zZXJ0IG1vZGUsIGJ1dCB5b3UgbG9zZSB0aGUKK3Bvc3NpYmlsaXR5IHRvIHVzZSBjdXJzb3IgYW5kIGZ1bmN0aW9uIGtleXMgaW4gSW5zZXJ0IG1vZGUuCisKK09uIHRoZSBBbWlnYSB0aGUgcmVjb2duaXRpb24gb2Ygd2luZG93IHJlc2l6aW5nIGlzIGFjdGl2YXRlZCBvbmx5IHdoZW4gdGhlCit0ZXJtaW5hbCBuYW1lIGlzICJhbWlnYSIgb3IgImJ1aWx0aW5fYW1pZ2EiLgorCitTb21lIHRlcm1pbmFscyBoYXZlIGNvbmZ1c2luZyBjb2RlcyBmb3IgdGhlIGN1cnNvciBrZXlzLiAgVGhlIHRlbGV2aWRlbyA5MjUgaXMKK3N1Y2ggYSB0ZXJtaW5hbC4gIEl0IHNlbmRzIGEgQ1RSTC1IIGZvciBjdXJzb3ItbGVmdC4gIFRoaXMgd291bGQgbWFrZSBpdAoraW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBhIGJhY2tzcGFjZSBhbmQgY3Vyc29yLWxlZnQuICBUbyBhdm9pZCB0aGlzIHByb2JsZW0KK0NUUkwtSCBpcyBuZXZlciByZWNvZ25pemVkIGFzIGN1cnNvci1sZWZ0LgorCisJCQkJCSp2dDEwMC1jdXJzb3Ita2V5cyogKnh0ZXJtLWN1cnNvci1rZXlzKgorT3RoZXIgdGVybWluYWxzIChlLmcuLCB2dDEwMCBhbmQgeHRlcm0pIGhhdmUgY3Vyc29yIGtleXMgdGhhdCBzZW5kIDxFc2M+T0EsCis8RXNjPk9CLCBldGMuICBVbmZvcnR1bmF0ZWx5IHRoZXNlIGFyZSB2YWxpZCBjb21tYW5kcyBpbiBpbnNlcnQgbW9kZTogU3RvcAoraW5zZXJ0LCBPcGVuIGEgbmV3IGxpbmUgYWJvdmUgdGhlIG5ldyBvbmUsIHN0YXJ0IGluc2VydGluZyAnQScsICdCJywgZXRjLgorSW5zdGVhZCBvZiBwZXJmb3JtaW5nIHRoZXNlIGNvbW1hbmRzIFZpbSB3aWxsIGVycm9uZW91c2x5IHJlY29nbml6ZSB0aGlzIHR5cGVkCitrZXkgc2VxdWVuY2UgYXMgYSBjdXJzb3Iga2V5IG1vdmVtZW50LiAgVG8gYXZvaWQgdGhpcyBhbmQgbWFrZSBWaW0gZG8gd2hhdCB5b3UKK3dhbnQgaW4gZWl0aGVyIGNhc2UgeW91IGNvdWxkIHVzZSB0aGVzZSBzZXR0aW5nczogPgorCTpzZXQgbm90aW1lb3V0CQkiIGRvbid0IHRpbWVvdXQgb24gbWFwcGluZ3MKKwk6c2V0IHR0aW1lb3V0CQkiIGRvIHRpbWVvdXQgb24gdGVybWluYWwga2V5IGNvZGVzCisJOnNldCB0aW1lb3V0bGVuPTEwMAkiIHRpbWVvdXQgYWZ0ZXIgMTAwIG1zZWMKK1RoaXMgcmVxdWlyZXMgdGhlIGtleS1jb2RlcyB0byBiZSBzZW50IHdpdGhpbiAxMDBtc2VjIGluIG9yZGVyIHRvIHJlY29nbml6ZQordGhlbSBhcyBhIGN1cnNvciBrZXkuICBXaGVuIHlvdSB0eXBlIHlvdSBub3JtYWxseSBhcmUgbm90IHRoYXQgZmFzdCwgc28gdGhleQorYXJlIHJlY29nbml6ZWQgYXMgaW5kaXZpZHVhbCB0eXBlZCBjb21tYW5kcywgZXZlbiB0aG91Z2ggVmltIHJlY2VpdmVzIHRoZSBzYW1lCitzZXF1ZW5jZSBvZiBieXRlcy4KKworCQkJCSp2dDEwMC1mdW5jdGlvbi1rZXlzKiAqeHRlcm0tZnVuY3Rpb24ta2V5cyoKK0FuIHh0ZXJtIGNhbiBzZW5kIGZ1bmN0aW9uIGtleXMgRjEgdG8gRjQgaW4gdHdvIG1vZGVzOiB2dDEwMCBjb21wYXRpYmxlIG9yCitub3QuICBCZWNhdXNlIFZpbSBjYW5ub3Qga25vdyB3aGF0IHRoZSB4dGVybSBpcyBzZW5kaW5nLCBib3RoIHR5cGVzIG9mIGtleXMKK2FyZSByZWNvZ25pemVkLiAgVGhlIHNhbWUgaGFwcGVucyBmb3IgdGhlIDxIb21lPiBhbmQgPEVuZD4ga2V5cy4KKwkJCW5vcm1hbAkJCXZ0MTAwIH4KKwk8RjE+CXRfazEJPEVzYz5bMTF+CTx4RjE+CTxFc2M+T1AJICAgICo8eEYxPi14dGVybSoKKwk8RjI+CXRfazIJPEVzYz5bMTJ+CTx4RjI+CTxFc2M+T1EJICAgICo8eEYyPi14dGVybSoKKwk8RjM+CXRfazMJPEVzYz5bMTN+CTx4RjM+CTxFc2M+T1IJICAgICo8eEYzPi14dGVybSoKKwk8RjQ+CXRfazQJPEVzYz5bMTR+CTx4RjQ+CTxFc2M+T1MJICAgICo8eEY0Pi14dGVybSoKKwk8SG9tZT4JdF9raAk8RXNjPls3fgk8eEhvbWU+CTxFc2M+T0gJICAgICo8eEhvbWU+LXh0ZXJtKgorCTxFbmQ+CXRfQDcJPEVzYz5bNH4JPHhFbmQ+CTxFc2M+T0YJICAgICo8eEVuZD4teHRlcm0qCisKK1doZW4gVmltIHN0YXJ0cywgPHhGMT4gaXMgbWFwcGVkIHRvIDxGMT4sIDx4RjI+IHRvIDxGMj4gZXRjLiAgVGhpcyBtZWFucyB0aGF0CitieSBkZWZhdWx0IGJvdGggY29kZXMgZG8gdGhlIHNhbWUgdGhpbmcuICBJZiB5b3UgbWFrZSBhIG1hcHBpbmcgZm9yIDx4RjI+LAorYmVjYXVzZSB5b3VyIHRlcm1pbmFsIGRvZXMgaGF2ZSB0d28ga2V5cywgdGhlIGRlZmF1bHQgbWFwcGluZyBpcyBvdmVyd3JpdHRlbiwKK3RodXMgeW91IGNhbiB1c2UgdGhlIDxGMj4gYW5kIDx4RjI+IGtleXMgZm9yIHNvbWV0aGluZyBkaWZmZXJlbnQuCisKKwkJCQkJCQkqeHRlcm0tc2hpZnRlZC1rZXlzKgorTmV3ZXIgdmVyc2lvbnMgb2YgeHRlcm0gc3VwcG9ydCBzaGlmdGVkIGZ1bmN0aW9uIGtleXMgYW5kIHNwZWNpYWwga2V5cy4gIFZpbQorcmVjb2duaXplcyBtb3N0IG9mIHRoZW0uICBVc2UgIjpzZXQgdGVybWNhcCIgdG8gY2hlY2sgd2hpY2ggYXJlIHN1cHBvcnRlZCBhbmQKK3doYXQgdGhlIGNvZGVzIGFyZS4gIE1vc3RseSB0aGVzZSBhcmUgbm90IGluIGEgdGVybWNhcCwgdGhleSBhcmUgb25seQorc3VwcG9ydGVkIGJ5IHRoZSBidWlsdGluX3h0ZXJtIHRlcm1jYXAuCisKKwkJCQkJCQkqeHRlcm0tc2Nyb2xsLXJlZ2lvbioKK1RoZSBkZWZhdWx0IHRlcm1jYXAgZW50cnkgZm9yIHh0ZXJtIG9uIFN1biBhbmQgb3RoZXIgcGxhdGZvcm1zIGRvZXMgbm90Citjb250YWluIHRoZSBlbnRyeSBmb3Igc2Nyb2xsIHJlZ2lvbnMuICBBZGQgIjpjcz1cRVslaSVkOyVkcjoiIHRvIHRoZSB4dGVybQorZW50cnkgaW4gL2V0Yy90ZXJtY2FwIGFuZCBldmVyeXRoaW5nIHNob3VsZCB3b3JrLgorCisJCQkJCQkJKnh0ZXJtLWVuZC1ob21lLWtleXMqCitPbiBzb21lIHN5c3RlbXMgKGF0IGxlYXN0IG9uIEZyZWVCU0Qgd2l0aCBYRnJlZTg2IDMuMS4yKSB0aGUgY29kZXMgdGhhdCB0aGUKKzxFbmQ+IGFuZCA8SG9tZT4ga2V5cyBzZW5kIGNvbnRhaW4gYSA8TnVsPiBjaGFyYWN0ZXIuICBUbyBtYWtlIHRoZXNlIGtleXMgc2VuZAordGhlIHByb3BlciBrZXkgY29kZSwgYWRkIHRoZXNlIGxpbmVzIHRvIHlvdXIgfi8uWGRlZmF1bHRzIGZpbGU6CisKKypWVDEwMC5UcmFuc2xhdGlvbnM6CQkjb3ZlcnJpZGUgXG5cCisJCTxLZXk+SG9tZTogc3RyaW5nKCIweDFiIikgc3RyaW5nKCJbN34iKSBcblwKKwkJPEtleT5FbmQ6IHN0cmluZygiMHgxYiIpIHN0cmluZygiWzh+IikKKworCQkJCQkJKnh0ZXJtLThiaXQqICp4dGVybS04LWJpdCoKK1h0ZXJtIGNhbiBiZSBydW4gaW4gYSBtb2RlIHdoZXJlIGl0IHVzZXMgOC1iaXQgZXNjYXBlIHNlcXVlbmNlcy4gIFRoZSBDU0kgY29kZQoraXMgdXNlZCBpbnN0ZWFkIG9mIDxFc2M+Wy4gIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCBhbiA8RXNjPiBjYW4gcXVpY2tseSBiZQorcmVjb2duaXplZCBpbiBJbnNlcnQgbW9kZSwgYmVjYXVzZSBpdCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoIHRoZSBzdGFydCBvZiBhCitzcGVjaWFsIGtleS4KK0ZvciB0aGUgYnVpbHRpbiB0ZXJtY2FwIGVudHJpZXMsIFZpbSBjaGVja3MgaWYgdGhlICd0ZXJtJyBvcHRpb24gY29udGFpbnMKKyI4Yml0IiBhbnl3aGVyZS4gIEl0IHRoZW4gdXNlcyA4LWJpdCBjaGFyYWN0ZXJzIGZvciB0aGUgdGVybWNhcCBlbnRyaWVzLCB0aGUKK21vdXNlIGFuZCBhIGZldyBvdGhlciB0aGluZ3MuICBZb3Ugd291bGQgbm9ybWFsbHkgc2V0ICRURVJNIGluIHlvdXIgc2hlbGwgdG8KKyJ4dGVybS04Yml0IiBhbmQgVmltIHBpY2tzIHRoaXMgdXAgYW5kIGFkanVzdHMgdG8gdGhlIDgtYml0IHNldHRpbmcKK2F1dG9tYXRpY2FsbHkuCitXaGVuIFZpbSByZWNlaXZlcyBhIHJlc3BvbnNlIHRvIHRoZSB8dF9SVnwgKHJlcXVlc3QgdmVyc2lvbikgc2VxdWVuY2UgYW5kIGl0CitzdGFydHMgd2l0aCBDU0ksIGl0IGFzc3VtZXMgdGhhdCB0aGUgdGVybWluYWwgaXMgaW4gOC1iaXQgbW9kZSBhbmQgd2lsbAorY29udmVydCBhbGwga2V5IHNlcXVlbmNlcyB0byB0aGVpciA4LWJpdCB2YXJpYW50cy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBUZXJtaW5hbCBvcHRpb25zCQkJCSp0ZXJtaW5hbC1vcHRpb25zKiAqRTQzNioKKworVGhlIHRlcm1pbmFsIG9wdGlvbnMgY2FuIGJlIHNldCBqdXN0IGxpa2Ugbm9ybWFsIG9wdGlvbnMuICBCdXQgdGhleSBhcmUgbm90CitzaG93biB3aXRoIHRoZSAiOnNldCBhbGwiIGNvbW1hbmQuICBJbnN0ZWFkIHVzZSAiOnNldCB0ZXJtY2FwIi4KKworSXQgaXMgYWx3YXlzIHBvc3NpYmxlIHRvIGNoYW5nZSBpbmRpdmlkdWFsIHN0cmluZ3MgYnkgc2V0dGluZyB0aGUKK2FwcHJvcHJpYXRlIG9wdGlvbi4gIEZvciBleGFtcGxlOiA+CisJOnNldCB0X2NlPV5WXltbSwkoQ1RSTC1WLCA8RXNjPiwgWywgSykKKwore1ZpOiBubyB0ZXJtaW5hbCBvcHRpb25zLiAgWW91IGhhdmUgdG8gZXhpdCBWaSwgZWRpdCB0aGUgdGVybWNhcCBlbnRyeSBhbmQKK3RyeSBhZ2Fpbn0KKworVGhlIG9wdGlvbnMgYXJlIGxpc3RlZCBiZWxvdy4gIFRoZSBhc3NvY2lhdGVkIHRlcm1jYXAgY29kZSBpcyBhbHdheXMgZXF1YWwgdG8KK3RoZSBsYXN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcHRpb24gbmFtZS4gIE9ubHkgb25lIHRlcm1jYXAgY29kZSBpcworcmVxdWlyZWQ6IEN1cnNvciBtb3Rpb24sICd0X2NtJy4KKworVGhlIG9wdGlvbnMgJ3RfZGEnLCAndF9kYicsICd0X21zJywgJ3RfeHMnIHJlcHJlc2VudCBmbGFncyBpbiB0aGUgdGVybWNhcC4KK1doZW4gdGhlIHRlcm1jYXAgZmxhZyBpcyBwcmVzZW50LCB0aGUgb3B0aW9uIHdpbGwgYmUgc2V0IHRvICJ5Ii4gIEJ1dCBhbnkKK25vbi1lbXB0eSBzdHJpbmcgbWVhbnMgdGhhdCB0aGUgZmxhZyBpcyBzZXQuICBBbiBlbXB0eSBzdHJpbmcgbWVhbnMgdGhhdCB0aGUKK2ZsYWcgaXMgbm90IHNldC4gICd0X0NTJyB3b3JrcyBsaWtlIHRoaXMgdG9vLCBidXQgaXQgaXNuJ3QgYSB0ZXJtY2FwIGZsYWcuCisKK09VVFBVVCBDT0RFUworCW9wdGlvbgltZWFuaW5nCX4KKworCXRfQUIJc2V0IGJhY2tncm91bmQgY29sb3IgKEFOU0kpCQkJKnRfQUIqICondF9BQicqCisJdF9BRglzZXQgZm9yZWdyb3VuZCBjb2xvciAoQU5TSSkJCQkqdF9BRiogKid0X0FGJyoKKwl0X0FMCWFkZCBudW1iZXIgb2YgYmxhbmsgbGluZXMJCQkqdF9BTCogKid0X0FMJyoKKwl0X2FsCWFkZCBuZXcgYmxhbmsgbGluZQkJCQkqdF9hbCogKid0X2FsJyoKKwl0X2JjCWJhY2tzcGFjZSBjaGFyYWN0ZXIJCQkJKnRfYmMqICondF9iYycqCisJdF9jZAljbGVhciB0byBlbmQgb2Ygc2NyZWVuCQkJCSp0X2NkKiAqJ3RfY2QnKgorCXRfY2UJY2xlYXIgdG8gZW5kIG9mIGxpbmUJCQkJKnRfY2UqICondF9jZScqCisJdF9jbAljbGVhciBzY3JlZW4JCQkJCSp0X2NsKiAqJ3RfY2wnKgorCXRfY20JY3Vyc29yIG1vdGlvbiAocmVxdWlyZWQhKQkJICAqRTQzNyogKnRfY20qICondF9jbScqCisJdF9DbwludW1iZXIgb2YgY29sb3JzCQkJCSp0X0NvKiAqJ3RfQ28nKgorCXRfQ1MJaWYgbm9uLWVtcHR5LCBjdXJzb3IgcmVsYXRpdmUgdG8gc2Nyb2xsIHJlZ2lvbgkqdF9DUyogKid0X0NTJyoKKwl0X2NzCWRlZmluZSBzY3JvbGxpbmcgcmVnaW9uCQkJCSp0X2NzKiAqJ3RfY3MnKgorCXRfQ1YJZGVmaW5lIHZlcnRpY2FsIHNjcm9sbGluZyByZWdpb24JCSp0X0NWKiAqJ3RfQ1YnKgorCXRfZGEJaWYgbm9uLWVtcHR5LCBsaW5lcyBmcm9tIGFib3ZlIHNjcm9sbCBkb3duCSp0X2RhKiAqJ3RfZGEnKgorCXRfZGIJaWYgbm9uLWVtcHR5LCBsaW5lcyBmcm9tIGJlbG93IHNjcm9sbCB1cAkqdF9kYiogKid0X2RiJyoKKwl0X0RMCWRlbGV0ZSBudW1iZXIgb2YgbGluZXMJCQkJKnRfREwqICondF9ETCcqCisJdF9kbAlkZWxldGUgbGluZQkJCQkJKnRfZGwqICondF9kbCcqCisJdF9mcwlzZXQgd2luZG93IHRpdGxlIGVuZCAoZnJvbSBzdGF0dXMgbGluZSkJCSp0X2ZzKiAqJ3RfZnMnKgorCXRfa2UJZXhpdCAia2V5cGFkIHRyYW5zbWl0IiBtb2RlCQkJKnRfa2UqICondF9rZScqCisJdF9rcwlzdGFydCAia2V5cGFkIHRyYW5zbWl0IiBtb2RlCQkJKnRfa3MqICondF9rcycqCisJdF9sZQltb3ZlIGN1cnNvciBvbmUgY2hhciBsZWZ0CQkJKnRfbGUqICondF9sZScqCisJdF9tYglibGlua2luZyBtb2RlCQkJCQkqdF9tYiogKid0X21iJyoKKwl0X21kCWJvbGQgbW9kZQkJCQkJKnRfbWQqICondF9tZCcqCisJdF9tZQlOb3JtYWwgbW9kZSAodW5kb2VzIHRfbXIsIHRfbWIsIHRfbWQgYW5kIGNvbG9yKQkqdF9tZSogKid0X21lJyoKKwl0X21yCXJldmVyc2UgKGludmVydCkgbW9kZQkJCQkqdF9tciogKid0X21yJyoKKwkJCQkJCQkJKnRfbXMqICondF9tcycqCisJdF9tcwlpZiBub24tZW1wdHksIGN1cnNvciBjYW4gYmUgbW92ZWQgaW4gc3RhbmRvdXQvaW52ZXJzZSBtb2RlCisJdF9uZAlub24gZGVzdHJ1Y3RpdmUgc3BhY2UgY2hhcmFjdGVyCQkJKnRfbmQqICondF9uZCcqCisJdF9vcAlyZXNldCB0byBvcmlnaW5hbCBjb2xvciBwYWlyCQkJKnRfb3AqICondF9vcCcqCisJdF9SSQljdXJzb3IgbnVtYmVyIG9mIGNoYXJzIHJpZ2h0CQkJKnRfUkkqICondF9SSScqCisJdF9TYglzZXQgYmFja2dyb3VuZCBjb2xvcgkJCQkqdF9TYiogKid0X1NiJyoKKwl0X1NmCXNldCBmb3JlZ3JvdW5kIGNvbG9yCQkJCSp0X1NmKiAqJ3RfU2YnKgorCXRfc2UJc3RhbmRvdXQgZW5kCQkJCQkqdF9zZSogKid0X3NlJyoKKwl0X3NvCXN0YW5kb3V0IG1vZGUJCQkJCSp0X3NvKiAqJ3Rfc28nKgorCXRfc3IJc2Nyb2xsIHJldmVyc2UgKGJhY2t3YXJkKQkJCSp0X3NyKiAqJ3Rfc3InKgorCXRfdGUJb3V0IG9mICJ0ZXJtY2FwIiBtb2RlCQkJCSp0X3RlKiAqJ3RfdGUnKgorCXRfdGkJcHV0IHRlcm1pbmFsIGluICJ0ZXJtY2FwIiBtb2RlCQkJKnRfdGkqICondF90aScqCisJdF90cwlzZXQgd2luZG93IHRpdGxlIHN0YXJ0ICh0byBzdGF0dXMgbGluZSkJCSp0X3RzKiAqJ3RfdHMnKgorCXRfdWUJdW5kZXJsaW5lIGVuZAkJCQkJKnRfdWUqICondF91ZScqCisJdF91cwl1bmRlcmxpbmUgbW9kZQkJCQkJKnRfdXMqICondF91cycqCisJdF91dAljbGVhcmluZyB1c2VzIHRoZSBjdXJyZW50IGJhY2tncm91bmQgY29sb3IJKnRfdXQqICondF91dCcqCisJdF92Ygl2aXN1YWwgYmVsbAkJCQkJKnRfdmIqICondF92YicqCisJdF92ZQljdXJzb3IgdmlzaWJsZQkJCQkJKnRfdmUqICondF92ZScqCisJdF92aQljdXJzb3IgaW52aXNpYmxlCQkJCSp0X3ZpKiAqJ3RfdmknKgorCXRfdnMJY3Vyc29yIHZlcnkgdmlzaWJsZQkJCQkqdF92cyogKid0X3ZzJyoKKwkJCQkJCQkJKnRfeHMqICondF94cycqCisJdF94cwlpZiBub24tZW1wdHksIHN0YW5kb3V0IG5vdCBlcmFzZWQgYnkgb3ZlcndyaXRpbmcgKGhwdGVybSkKKwl0X1pICWl0YWxpY3MgbW9kZQkJCQkJKnRfWkgqICondF9aSCcqCisJdF9aUglpdGFsaWNzIGVuZAkJCQkJKnRfWlIqICondF9aUicqCisKK0FkZGVkIGJ5IFZpbSAodGhlcmUgYXJlIG5vIHN0YW5kYXJkIGNvZGVzIGZvciB0aGVzZSk6CisJdF9JUwlzZXQgaWNvbiB0ZXh0IHN0YXJ0CQkJCSp0X0lTKiAqJ3RfSVMnKgorCXRfSUUJc2V0IGljb24gdGV4dCBlbmQJCQkJKnRfSUUqICondF9JRScqCisJdF9XUAlzZXQgd2luZG93IHBvc2l0aW9uIChZLCBYKSBpbiBwaXhlbHMJCSp0X1dQKiAqJ3RfV1AnKgorCXRfV1MJc2V0IHdpbmRvdyBzaXplIChoZWlnaHQsIHdpZHRoKSBpbiBjaGFyYWN0ZXJzCSp0X1dTKiAqJ3RfV1MnKgorCXRfUlYJcmVxdWVzdCB0ZXJtaW5hbCB2ZXJzaW9uIHN0cmluZyAoZm9yIHh0ZXJtKQkqdF9SViogKid0X1JWJyoKKwkJfHh0ZXJtLThiaXR8IHx2OnRlcm1yZXNwb25zZXwgfCd0dHltb3VzZSd8IHx4dGVybS1jb2Rlc3wKKworS0VZIENPREVTCitOb3RlOiBVc2UgdGhlIDw+IGZvcm0gaWYgcG9zc2libGUKKworCW9wdGlvbgluYW1lCQltZWFuaW5nCX4KKworCXRfa3UJPFVwPgkJYXJyb3cgdXAJCQkqdF9rdSogKid0X2t1JyoKKwl0X2tkCTxEb3duPgkJYXJyb3cgZG93bgkJCSp0X2tkKiAqJ3Rfa2QnKgorCXRfa3IJPFJpZ2h0PgkJYXJyb3cgcmlnaHQJCQkqdF9rciogKid0X2tyJyoKKwl0X2tsCTxMZWZ0PgkJYXJyb3cgbGVmdAkJCSp0X2tsKiAqJ3Rfa2wnKgorCQk8Uy1VcD4JCXNoaWZ0IGFycm93IHVwCisJCTxTLURvd24+CXNoaWZ0IGFycm93IGRvd24KKwl0XyVpCTxTLVJpZ2h0PglzaGlmdCBhcnJvdyByaWdodAkJKnRfJWkqICondF8laScqCisJdF8jNAk8Uy1MZWZ0PglzaGlmdCBhcnJvdyBsZWZ0CQkqdF8jNCogKid0XyM0JyoKKwl0X2sxCTxGMT4JCWZ1bmN0aW9uIGtleSAxCQkJKnRfazEqICondF9rMScqCisJCTx4RjE+CQlhbHRlcm5hdGUgRjEJCQkqPHhGMT4qCisJdF9rMgk8RjI+CQlmdW5jdGlvbiBrZXkgMgkJKjxGMj4qCSp0X2syKiAqJ3RfazInKgorCQk8eEYyPgkJYWx0ZXJuYXRlIEYyCQkJKjx4RjI+KgorCXRfazMJPEYzPgkJZnVuY3Rpb24ga2V5IDMJCSo8RjM+KgkqdF9rMyogKid0X2szJyoKKwkJPHhGMz4JCWFsdGVybmF0ZSBGMwkJCSo8eEYzPioKKwl0X2s0CTxGND4JCWZ1bmN0aW9uIGtleSA0CQkqPEY0PioJKnRfazQqICondF9rNCcqCisJCTx4RjQ+CQlhbHRlcm5hdGUgRjQJCQkqPHhGND4qCisJdF9rNQk8RjU+CQlmdW5jdGlvbiBrZXkgNQkJKjxGNT4qCSp0X2s1KiAqJ3RfazUnKgorCXRfazYJPEY2PgkJZnVuY3Rpb24ga2V5IDYJCSo8RjY+KgkqdF9rNiogKid0X2s2JyoKKwl0X2s3CTxGNz4JCWZ1bmN0aW9uIGtleSA3CQkqPEY3PioJKnRfazcqICondF9rNycqCisJdF9rOAk8Rjg+CQlmdW5jdGlvbiBrZXkgOAkJKjxGOD4qCSp0X2s4KiAqJ3RfazgnKgorCXRfazkJPEY5PgkJZnVuY3Rpb24ga2V5IDkJCSo8Rjk+KgkqdF9rOSogKid0X2s5JyoKKwl0X2s7CTxGMTA+CQlmdW5jdGlvbiBrZXkgMTAJCSo8RjEwPioJKnRfazsqICondF9rOycqCisJdF9GMQk8RjExPgkJZnVuY3Rpb24ga2V5IDExCQkqPEYxMT4qICp0X0YxKiAqJ3RfRjEnKgorCXRfRjIJPEYxMj4JCWZ1bmN0aW9uIGtleSAxMgkJKjxGMTI+KgkqdF9GMiogKid0X0YyJyoKKwl0X0YzCTxGMTM+CQlmdW5jdGlvbiBrZXkgMTMJCSo8RjEzPioJKnRfRjMqICondF9GMycqCisJdF9GNAk8RjE0PgkJZnVuY3Rpb24ga2V5IDE0CQkqPEYxND4qCSp0X0Y0KiAqJ3RfRjQnKgorCXRfRjUJPEYxNT4JCWZ1bmN0aW9uIGtleSAxNQkJKjxGMTU+KgkqdF9GNSogKid0X0Y1JyoKKwl0X0Y2CTxGMTY+CQlmdW5jdGlvbiBrZXkgMTYJCSo8RjE2PioJKnRfRjYqICondF9GNicqCisJdF9GNwk8RjE3PgkJZnVuY3Rpb24ga2V5IDE3CQkqPEYxNz4qCSp0X0Y3KiAqJ3RfRjcnKgorCXRfRjgJPEYxOD4JCWZ1bmN0aW9uIGtleSAxOAkJKjxGMTg+KgkqdF9GOCogKid0X0Y4JyoKKwl0X0Y5CTxGMTk+CQlmdW5jdGlvbiBrZXkgMTkJCSo8RjE5PioJKnRfRjkqICondF9GOScqCisJCTxTLUYxPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMQorCQk8Uy14RjE+CQlhbHRlcm5hdGUgPFMtRjE+CQkqPFMteEYxPioKKwkJPFMtRjI+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAyCQkqPFMtRjI+KgorCQk8Uy14RjI+CQlhbHRlcm5hdGUgPFMtRjI+CQkqPFMteEYyPioKKwkJPFMtRjM+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAzCQkqPFMtRjM+KgorCQk8Uy14RjM+CQlhbHRlcm5hdGUgPFMtRjM+CQkqPFMteEYzPioKKwkJPFMtRjQ+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA0CQkqPFMtRjQ+KgorCQk8Uy14RjQ+CQlhbHRlcm5hdGUgPFMtRjQ+CQkqPFMteEY0PioKKwkJPFMtRjU+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA1CQkqPFMtRjU+KgorCQk8Uy1GNj4JCXNoaWZ0ZWQgZnVuY3Rpb24ga2V5IDYJCSo8Uy1GNj4qCisJCTxTLUY3PgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgNwkJKjxTLUY3PioKKwkJPFMtRjg+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA4CQkqPFMtRjg+KgorCQk8Uy1GOT4JCXNoaWZ0ZWQgZnVuY3Rpb24ga2V5IDkJCSo8Uy1GOT4qCisJCTxTLUYxMD4JCXNoaWZ0ZWQgZnVuY3Rpb24ga2V5IDEwCQkqPFMtRjEwPioKKwkJPFMtRjExPgkJc2hpZnRlZCBmdW5jdGlvbiBrZXkgMTEJCSo8Uy1GMTE+KgorCQk8Uy1GMTI+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAxMgkJKjxTLUYxMj4qCisJdF8lMQk8SGVscD4JCWhlbHAga2V5CQkJKnRfJTEqICondF8lMScqCisJdF8mOAk8VW5kbz4JCXVuZG8ga2V5CQkJKnRfJjgqICondF8mOCcqCisJdF9rSQk8SW5zZXJ0PglpbnNlcnQga2V5CQkJKnRfa0kqICondF9rSScqCisJdF9rRAk8RGVsPgkJZGVsZXRlIGtleQkJCSp0X2tEKiAqJ3Rfa0QnKgorCXRfa2IJPEJTPgkJYmFja3NwYWNlIGtleQkJCSp0X2tiKiAqJ3Rfa2InKgorCXRfa0IJPFMtVGFiPgkJYmFjay10YWIgKHNoaWZ0LXRhYikgICo8Uy1UYWI+KiAqdF9rQiogKid0X2tCJyoKKwl0X2toCTxIb21lPgkJaG9tZSBrZXkJCQkqdF9raCogKid0X2toJyoKKwl0XyMyCTxTLUhvbWU+CXNoaWZ0ZWQgaG9tZSBrZXkgICAgICo8Uy1Ib21lPiogKnRfIzIqICondF8jMicqCisJCTx4SG9tZT4JCWFsdGVybmF0ZSBob21lIGtleQkJKjx4SG9tZT4qCisJdF9ANwk8RW5kPgkJZW5kIGtleQkJCQkqdF9ANyogKid0X0A3JyoKKwl0Xyo3CTxTLUVuZD4JCXNoaWZ0ZWQgZW5kIGtleQkqPFMtRW5kPiogKnRfc3RhcjcqICondF9zdGFyNycqCisJCTx4RW5kPgkJYWx0ZXJuYXRlIGVuZCBrZXkJCSo8eEVuZD4qCisJdF9rUAk8UGFnZVVwPglwYWdlLXVwIGtleQkJCSp0X2tQKiAqJ3Rfa1AnKgorCXRfa04JPFBhZ2VEb3duPglwYWdlLWRvd24ga2V5CQkJKnRfa04qICondF9rTicqCisJdF9LMQk8a0hvbWU+CQlrZXlwYWQgaG9tZSBrZXkJCQkqdF9LMSogKid0X0sxJyoKKwl0X0s0CTxrRW5kPgkJa2V5cGFkIGVuZCBrZXkJCQkqdF9LNCogKid0X0s0JyoKKwl0X0szCTxrUGFnZVVwPglrZXlwYWQgcGFnZS11cCBrZXkJCSp0X0szKiAqJ3RfSzMnKgorCXRfSzUJPGtQYWdlRG93bj4Ja2V5cGFkIHBhZ2UtZG93biBrZXkJCSp0X0s1KiAqJ3RfSzUnKgorCXRfSzYJPGtQbHVzPgkJa2V5cGFkIHBsdXMga2V5CSAgICAgICo8a1BsdXM+KgkqdF9LNiogKid0X0s2JyoKKwl0X0s3CTxrTWludXM+CWtleXBhZCBtaW51cyBrZXkgICAgICo8a01pbnVzPioJKnRfSzcqICondF9LNycqCisJdF9LOAk8a0RpdmlkZT4Ja2V5cGFkIGRpdmlkZQkgICAgKjxrRGl2aWRlPiogKnRfSzgqICondF9LOCcqCisJdF9LOQk8a011bHRpcGx5PglrZXlwYWQgbXVsdGlwbHkgICAqPGtNdWx0aXBseT4qICp0X0s5KiAqJ3RfSzknKgorCXRfS0EJPGtFbnRlcj4Ja2V5cGFkIGVudGVyIGtleSAgICAgKjxrRW50ZXI+KgkqdF9LQSogKid0X0tBJyoKKwl0X0tCCTxrUG9pbnQ+CWtleXBhZCBkZWNpbWFsIHBvaW50ICo8a1BvaW50PioJKnRfS0IqICondF9LQicqCisJdF9LQwk8azA+CQlrZXlwYWQgMAkJICo8azA+KgkqdF9LQyogKid0X0tDJyoKKwl0X0tECTxrMT4JCWtleXBhZCAxCQkgKjxrMT4qCSp0X0tEKiAqJ3RfS0QnKgorCXRfS0UJPGsyPgkJa2V5cGFkIDIJCSAqPGsyPioJKnRfS0UqICondF9LRScqCisJdF9LRgk8azM+CQlrZXlwYWQgMwkJICo8azM+KgkqdF9LRiogKid0X0tGJyoKKwl0X0tHCTxrND4JCWtleXBhZCA0CQkgKjxrND4qCSp0X0tHKiAqJ3RfS0cnKgorCXRfS0gJPGs1PgkJa2V5cGFkIDUJCSAqPGs1PioJKnRfS0gqICondF9LSCcqCisJdF9LSQk8azY+CQlrZXlwYWQgNgkJICo8azY+KgkqdF9LSSogKid0X0tJJyoKKwl0X0tKCTxrNz4JCWtleXBhZCA3CQkgKjxrNz4qCSp0X0tKKiAqJ3RfS0onKgorCXRfS0sJPGs4PgkJa2V5cGFkIDgJCSAqPGs4PioJKnRfS0sqICondF9LSycqCisJdF9LTAk8azk+CQlrZXlwYWQgOQkJICo8azk+KgkqdF9LTCogKid0X0tMJyoKKwkJPE1vdXNlPgkJbGVhZGVyIG9mIG1vdXNlIGNvZGUJCSo8TW91c2U+KgorCitOb3RlIGFib3V0IHRfc28gYW5kIHRfbXI6IFdoZW4gdGhlIHRlcm1jYXAgZW50cnkgInNvIiBpcyBub3QgcHJlc2VudCB0aGUKK2VudHJ5IGZvciAibXIiIGlzIHVzZWQuICBBbmQgdmljZSB2ZXJzYS4gIFRoZSBzYW1lIGlzIGRvbmUgZm9yICJzZSIgYW5kICJtZSIuCitJZiB5b3VyIHRlcm1pbmFsIHN1cHBvcnRzIGJvdGggaW52ZXJzaW9uIGFuZCBzdGFuZG91dCBtb2RlLCB5b3UgY2FuIHNlZSB0d28KK2RpZmZlcmVudCBtb2Rlcy4gIElmIHlvdXIgdGVybWluYWwgc3VwcG9ydHMgb25seSBvbmUgb2YgdGhlIG1vZGVzLCBib3RoIHdpbGwKK2xvb2sgdGhlIHNhbWUuCisKK1RoZSBrZXlwYWQga2V5cywgd2hlbiB0aGV5IGFyZSBub3QgbWFwcGVkLCBiZWhhdmUgbGlrZSB0aGUgZXF1aXZhbGVudCBub3JtYWwKK2tleS4KKwkJCQkJCQkqeHRlcm0tY29kZXMqCitUaGVyZSBpcyBhIHNwZWNpYWwgdHJpY2sgdG8gb2J0YWluIHRoZSBrZXkgY29kZXMgd2hpY2ggY3VycmVudGx5IG9ubHkgd29ya3MKK2ZvciB4dGVybS4gIFdoZW4gfHRfUlZ8IGlzIGRlZmluZWQgYW5kIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgd2hpY2ggaW5kaWNhdGVzCithbiB4dGVybSB3aXRoIHBhdGNobGV2ZWwgMTQxIG9yIGhpZ2hlciwgVmltIHVzZXMgc3BlY2lhbCBlc2NhcGUgc2VxdWVuY2VzIHRvCityZXF1ZXN0IHRoZSBrZXkgY29kZXMgZGlyZWN0bHkgZnJvbSB0aGUgeHRlcm0uICBUaGUgcmVzcG9uc2VzIGFyZSB1c2VkIHRvCithZGp1c3QgdGhlIHZhcmlvdXMgdF8gY29kZXMuICBUaGlzIGF2b2lkcyB0aGUgcHJvYmxlbSB0aGF0IHRoZSB4dGVybSBjYW4KK3Byb2R1Y2UgZGlmZmVyZW50IGNvZGVzLCBkZXBlbmRpbmcgb24gdGhlIG1vZGUgaXQgaXMgaW4gKDgtYml0LCBWVDEwMiwKK1ZUMjIwLCBldGMuKS4gIFRoZSByZXN1bHQgaXMgdGhhdCBjb2RlcyBsaWtlIDx4RjE+IGFyZSBubyBsb25nZXIgbmVlZGVkLgorTm90ZTogVGhpcyBpcyBvbmx5IGRvbmUgb24gc3RhcnR1cC4gIElmIHRoZSB4dGVybSBvcHRpb25zIGFyZSBjaGFuZ2VkIGFmdGVyCitWaW0gaGFzIHN0YXJ0ZWQsIHRoZSBlc2NhcGUgc2VxdWVuY2VzIG1heSBub3QgYmUgcmVjb2duaXplZCBhbnkgbW9yZS4KKworCQkJCQkJCSp0ZXJtY2FwLWNvbG9ycyoKK05vdGUgYWJvdXQgY29sb3JzOiBUaGUgJ3RfQ28nIG9wdGlvbiB0ZWxscyBWaW0gdGhlIG51bWJlciBvZiBjb2xvcnMgYXZhaWxhYmxlLgorV2hlbiBpdCBpcyBub24temVybywgdGhlICd0X0FCJyBhbmQgJ3RfQUYnIG9wdGlvbnMgYXJlIHVzZWQgdG8gc2V0IHRoZSBjb2xvci4KK0lmIG9uZSBvZiB0aGVzZSBpcyBub3QgYXZhaWxhYmxlLCAndF9TYicgYW5kICd0X1NmJyBhcmUgdXNlZC4gICd0X21lJyBpcyB1c2VkCit0byByZXNldCB0byB0aGUgZGVmYXVsdCBjb2xvcnMuCisKKwkJCQkJCQkqdGVybWNhcC10aXRsZSoKK1RoZSAndF90cycgYW5kICd0X2ZzJyBvcHRpb25zIGFyZSB1c2VkIHRvIHNldCB0aGUgd2luZG93IHRpdGxlIGlmIHRoZSB0ZXJtaW5hbAorYWxsb3dzIHRpdGxlIHNldHRpbmcgdmlhIHNlbmRpbmcgc3RyaW5ncy4gIFRoZXkgYXJlIHNlbnQgYmVmb3JlIGFuZCBhZnRlciB0aGUKK3RpdGxlIHN0cmluZywgcmVzcGVjdGl2ZWx5LiAgU2ltaWxhciAndF9JUycgYW5kICd0X0lFJyAgYXJlIHVzZWQgdG8gc2V0IHRoZQoraWNvbiB0ZXh0LiAgVGhlc2UgYXJlIFZpbS1pbnRlcm5hbCBleHRlbnNpb25zIG9mIHRoZSBVbml4IHRlcm1jYXAsIHNvIHRoZXkKK2Nhbm5vdCBiZSBvYnRhaW5lZCBmcm9tIGFuIGV4dGVybmFsIHRlcm1jYXAuICBIb3dldmVyLCB0aGUgYnVpbHRpbiB0ZXJtY2FwCitjb250YWlucyBzdWl0YWJsZSBlbnRyaWVzIGZvciB4dGVybSBhbmQgaXJpcy1hbnNpLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBzZXQKK3RoZW0gaGVyZS4KKwkJCQkJCQkqaHB0ZXJtKgorSWYgaW52ZXJzaW9uIG9yIG90aGVyIGhpZ2hsaWdodGluZyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSwgdHJ5IHNldHRpbmcgdGhlCisndF94cycgb3B0aW9uIHRvIGEgbm9uLWVtcHR5IHN0cmluZy4gIFRoaXMgbWFrZXMgdGhlICd0X2NlJyBjb2RlIGJlIHVzZWQgdG8KK3JlbW92ZSBoaWdobGlnaHRpbmcgZnJvbSBhIGxpbmUuICBUaGlzIGlzIHJlcXVpcmVkIGZvciAiaHB0ZXJtIi4gIFNldHRpbmcgdGhlCisnd2VpcmRpbnZlcnQnIG9wdGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIG1ha2luZyAndF94cycgbm9uLWVtcHR5LCBhbmQgdmljZQordmVyc2EuCisKKwkJCQkJCQkqc2Nyb2xsLXJlZ2lvbioKK1NvbWUgdGVybWNhcHMgZG8gbm90IGluY2x1ZGUgYW4gZW50cnkgZm9yICdjcycgKHNjcm9sbCByZWdpb24pLCBhbHRob3VnaCB0aGUKK3Rlcm1pbmFsIGRvZXMgc3VwcG9ydCBpdC4gIEZvciBleGFtcGxlOiB4dGVybSBvbiBhIFN1bi4gIFlvdSBjYW4gdXNlIHRoZQorYnVpbHRpbl94dGVybSBvciBkZWZpbmUgdF9jcyB5b3Vyc2VsZi4gIEZvciBleGFtcGxlOiA+CisJOnNldCB0X2NzPV5WXltbJWklZDslZHIKK1doZXJlIF5WIGlzIENUUkwtViBhbmQgXlsgaXMgPEVzYz4uCisKK1RoZSB2ZXJ0aWNhbCBzY3JvbGwgcmVnaW9uIHRfQ1YgaXMgbm90IGEgc3RhbmRhcmQgdGVybWNhcCBjb2RlLiAgVmltIHVzZXMgaXQKK2ludGVybmFsbHkgaW4gdGhlIEdVSS4gIEJ1dCBpdCBjYW4gYWxzbyBiZSBkZWZpbmVkIGZvciBhIHRlcm1pbmFsLCBpZiB5b3UgY2FuCitmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIGl0LiAgVGhlIHR3byBhcmd1bWVudHMgYXJlIHRoZSBsZWZ0IGFuZCByaWdodCBjb2x1bW4gb2YKK3RoZSByZWdpb24gd2hpY2ggdG8gcmVzdHJpY3QgdGhlIHNjcm9sbGluZyB0by4gIEp1c3QgbGlrZSB0X2NzIGRlZmluZXMgdGhlIHRvcAorYW5kIGJvdHRvbSBsaW5lcy4gIERlZmluaW5nIHRfQ1Ygd2lsbCBtYWtlIHNjcm9sbGluZyBpbiB2ZXJ0aWNhbGx5IHNwbGl0Cit3aW5kb3dzIGEgbG90IGZhc3Rlci4gIERvbid0IHNldCB0X0NWIHdoZW4gdF9kYSBvciB0X2RiIGlzIHNldCAodGV4dCBpc24ndAorY2xlYXJlZCB3aGVuIHNjcm9sbGluZykuCisKK1VuZm9ydHVuYXRlbHkgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlZHVjZSBmcm9tIHRoZSB0ZXJtY2FwIGhvdyBjdXJzb3IKK3Bvc2l0aW9uaW5nIHNob3VsZCBiZSBkb25lIHdoZW4gdXNpbmcgYSBzY3JvbGxpbmcgcmVnaW9uOiBSZWxhdGl2ZSB0byB0aGUKK2JlZ2lubmluZyBvZiB0aGUgc2NyZWVuIG9yIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjcm9sbGluZyByZWdpb24uCitNb3N0IHRlcm1pbmFscyB1c2UgdGhlIGZpcnN0IG1ldGhvZC4gIEEga25vd24gZXhjZXB0aW9uIGlzIHRoZSBNUy1ET1MgY29uc29sZQorKHBjdGVybSkuICBUaGUgJ3RfQ1MnIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvIGFueSBzdHJpbmcgd2hlbiBjdXJzb3IKK3Bvc2l0aW9uaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2Nyb2xsaW5nIHJlZ2lvbi4gIEl0IHNob3VsZCBiZQorc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuICBJdCBkZWZhdWx0cyB0byAieWVzIiB3aGVuICd0ZXJtJyBpcworInBjdGVybSIuCisKK05vdGUgZm9yIHh0ZXJtIHVzZXJzOiBUaGUgc2hpZnRlZCBjdXJzb3Iga2V5cyBub3JtYWxseSBkb24ndCB3b3JrLiAgWW91IGNhbgorCW1ha2UgdGhlbSB3b3JrIHdpdGggdGhlIHhtb2RtYXAgY29tbWFuZCBhbmQgc29tZSBtYXBwaW5ncyBpbiBWaW0uCisKKwlHaXZlIHRoZXNlIGNvbW1hbmRzIGluIHRoZSB4dGVybToKKwkJeG1vZG1hcCAtZSAia2V5c3ltIFVwID0gVXAgRjEzIgorCQl4bW9kbWFwIC1lICJrZXlzeW0gRG93biA9IERvd24gRjE2IgorCQl4bW9kbWFwIC1lICJrZXlzeW0gTGVmdCA9IExlZnQgRjE4IgorCQl4bW9kbWFwIC1lICJrZXlzeW0gUmlnaHQgPSBSaWdodCBGMTkiCisKKwlBbmQgdXNlIHRoZXNlIG1hcHBpbmdzIGluIFZpbToKKwkJOm1hcCA8dF9GMz4gPFMtVXA+CisJCTptYXAhIDx0X0YzPiA8Uy1VcD4KKwkJOm1hcCA8dF9GNj4gPFMtRG93bj4KKwkJOm1hcCEgPHRfRjY+IDxTLURvd24+CisJCTptYXAgPHRfRjg+IDxTLUxlZnQ+CisJCTptYXAhIDx0X0Y4PiA8Uy1MZWZ0PgorCQk6bWFwIDx0X0Y5PiA8Uy1SaWdodD4KKwkJOm1hcCEgPHRfRjk+IDxTLVJpZ2h0PgorCitJbnN0ZWFkIG9mLCBzYXksIDxTLVVwPiB5b3UgY2FuIHVzZSBhbnkgb3RoZXIgY29tbWFuZCB0aGF0IHlvdSB3YW50IHRvIHVzZSB0aGUKK3NoaWZ0LWN1cnNvci11cCBrZXkgZm9yLiAgKE5vdGU6IFRvIGhlbHAgcGVvcGxlIHRoYXQgaGF2ZSBhIFN1biBrZXlib2FyZCB3aXRoCitsZWZ0IHNpZGUga2V5cyBGMTQgaXMgbm90IHVzZWQgYmVjYXVzZSBpdCBpcyBjb25mdXNlZCB3aXRoIHRoZSB1bmRvIGtleTsgRjE1CitpcyBub3QgdXNlZCwgYmVjYXVzZSBpdCBkb2VzIGEgd2luZG93LXRvLWZyb250OyBGMTcgaXMgbm90IHVzZWQsIGJlY2F1c2UgaXQKK2Nsb3NlcyB0aGUgd2luZG93LiAgT24gb3RoZXIgc3lzdGVtcyB5b3UgY2FuIHByb2JhYmx5IHVzZSB0aGVtLikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBXaW5kb3cgc2l6ZQkJCQkJCSp3aW5kb3ctc2l6ZSoKKworW1RoaXMgaXMgYWJvdXQgdGhlIHNpemUgb2YgdGhlIHdob2xlIHdpbmRvdyBWaW0gaXMgdXNpbmcsIG5vdCBhIHdpbmRvdyB0aGF0IGlzCitjcmVhdGVkIHdpdGggdGhlICI6c3BsaXQiIGNvbW1hbmQuXQorCitJZiB5b3UgYXJlIHJ1bm5pbmcgVmltIG9uIGFuIEFtaWdhIGFuZCB0aGUgdGVybWluYWwgbmFtZSBpcyAiYW1pZ2EiIG9yCisiYnVpbHRpbl9hbWlnYSIsIHRoZSBhbWlnYS1zcGVjaWZpYyB3aW5kb3cgcmVzaXppbmcgd2lsbCBiZSBlbmFibGVkLiAgT24gVW5peAorc3lzdGVtcyB0aHJlZSBtZXRob2RzIGFyZSB0cmllZCB0byBnZXQgdGhlIHdpbmRvdyBzaXplOgorCistIGFuIGlvY3RsIGNhbGwgKFRJT0NHU0laRSBvciBUSU9DR1dJTlNaLCBkZXBlbmRzIG9uIHlvdXIgc3lzdGVtKQorLSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICJMSU5FUyIgYW5kICJDT0xVTU5TIgorLSBmcm9tIHRoZSB0ZXJtY2FwIGVudHJpZXMgImxpIiBhbmQgImNvIgorCitJZiBldmVyeXRoaW5nIGZhaWxzIGEgZGVmYXVsdCBzaXplIG9mIDI0IGxpbmVzIGFuZCA4MCBjb2x1bW5zIGlzIGFzc3VtZWQuICBJZgorYSB3aW5kb3ctcmVzaXplIHNpZ25hbCBpcyByZWNlaXZlZCB0aGUgc2l6ZSB3aWxsIGJlIHNldCBhZ2Fpbi4gIElmIHRoZSB3aW5kb3cKK3NpemUgaXMgd3JvbmcgeW91IGNhbiB1c2UgdGhlICdsaW5lcycgYW5kICdjb2x1bW5zJyBvcHRpb25zIHRvIHNldCB0aGUKK2NvcnJlY3QgdmFsdWVzLgorCitPbmUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNjcmVlbiBzaXplOgorCisJCQkJCQkqOm1vZCogKjptb2RlKiAqRTM1OSogKkUzNjIqCis6bW9kW2VdIFttb2RlXQorCitXaXRob3V0IGFyZ3VtZW50IHRoaXMgb25seSBkZXRlY3RzIHRoZSBzY3JlZW4gc2l6ZSBhbmQgcmVkcmF3cyB0aGUgc2NyZWVuLgorV2l0aCBNUy1ET1MgaXQgaXMgcG9zc2libGUgdG8gc3dpdGNoIHNjcmVlbiBtb2RlLiAgW21vZGVdIGNhbiBiZSBvbmUgb2YgdGhlc2UKK3ZhbHVlczoKKwkiYnc0MCIJCTQwIGNvbHVtbnMgYmxhY2smd2hpdGUKKwkiYzQwIgkJNDAgY29sdW1ucyBjb2xvcgorCSJidzgwIgkJODAgY29sdW1ucyBibGFjayZ3aGl0ZQorCSJjODAiCQk4MCBjb2x1bW5zIGNvbG9yIChtb3N0IHBlb3BsZSB1c2UgdGhpcykKKwkibW9ubyIJCTgwIGNvbHVtbnMgbW9ub2Nocm9tZQorCSJjNDM1MCIJCTQzIG9yIDUwIGxpbmVzIEVHQS9WR0EgbW9kZQorCW51bWJlcgkJbW9kZSBudW1iZXIgdG8gdXNlLCBkZXBlbmRzIG9uIHlvdXIgdmlkZW8gY2FyZAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFNsb3cgYW5kIGZhc3QgdGVybWluYWxzCQkJKnNsb3ctZmFzdC10ZXJtaW5hbCoKKwkJCQkJCSpzbG93LXRlcm1pbmFsKgorCitJZiB5b3UgaGF2ZSBhIGZhc3QgdGVybWluYWwgeW91IG1heSBsaWtlIHRvIHNldCB0aGUgJ3J1bGVyJyBvcHRpb24uICBUaGUKK2N1cnNvciBwb3NpdGlvbiBpcyBzaG93biBpbiB0aGUgc3RhdHVzIGxpbmUuICBJZiB5b3UgYXJlIHVzaW5nIGhvcml6b250YWwKK3Njcm9sbGluZyAoJ3dyYXAnIG9wdGlvbiBvZmYpIGNvbnNpZGVyIHNldHRpbmcgJ3NpZGVzY3JvbGwnIHRvIGEgc21hbGwKK251bWJlci4KKworSWYgeW91IGhhdmUgYSBzbG93IHRlcm1pbmFsIHlvdSBtYXkgd2FudCB0byByZXNldCB0aGUgJ3Nob3djbWQnIG9wdGlvbi4KK1RoZSBjb21tYW5kIGNoYXJhY3RlcnMgd2lsbCBub3QgYmUgc2hvd24gaW4gdGhlIHN0YXR1cyBsaW5lLiAgSWYgdGhlIHRlcm1pbmFsCitzY3JvbGxzIHZlcnkgc2xvd2x5LCBzZXQgdGhlICdzY3JvbGxqdW1wJyB0byA1IG9yIHNvLiAgSWYgdGhlIGN1cnNvciBpcyBtb3ZlZAorb2ZmIHRoZSBzY3JlZW4gKGUuZy4sIHdpdGggImoiKSBWaW0gd2lsbCBzY3JvbGwgNSBsaW5lcyBhdCBhIHRpbWUuICBBbm90aGVyCitwb3NzaWJpbGl0eSBpcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IFZpbSB1c2VzIHdpdGggdGhlIGNvbW1hbmQKKyJ6e2hlaWdodH08Q1I+Ii4KKworSWYgdGhlIGNoYXJhY3RlcnMgZnJvbSB0aGUgdGVybWluYWwgYXJlIGFycml2aW5nIHdpdGggbW9yZSB0aGFuIDEgc2Vjb25kCitiZXR3ZWVuIHRoZW0geW91IG1pZ2h0IHdhbnQgdG8gc2V0IHRoZSAndGltZW91dCcgYW5kL29yICd0dGltZW91dCcgb3B0aW9uLgorU2VlIHRoZSAiT3B0aW9ucyIgY2hhcHRlciB8b3B0aW9uc3wuCisKK0lmIHlvdXIgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBhIHNjcm9sbGluZyByZWdpb24sIGJ1dCBpdCBkb2VzIHN1cHBvcnQKK2luc2VydC9kZWxldGUgbGluZSBjb21tYW5kcywgc2Nyb2xsaW5nIHdpdGggbXVsdGlwbGUgd2luZG93cyBtYXkgbWFrZSB0aGUKK2xpbmVzIGp1bXAgdXAgYW5kIGRvd24uICBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIHNldCB0aGUgJ3R0eWZhc3QnIG9wdGlvbi4KK1RoaXMgd2lsbCByZWRyYXcgdGhlIHdpbmRvdyBpbnN0ZWFkIG9mIHNjcm9sbCBpdC4KKworSWYgeW91ciB0ZXJtaW5hbCBzY3JvbGxzIHZlcnkgc2xvd2x5LCBidXQgcmVkcmF3aW5nIGlzIG5vdCBzbG93LCBzZXQgdGhlCisndHR5c2Nyb2xsJyBvcHRpb24gdG8gYSBzbWFsbCBudW1iZXIsIGUuZy4sIDMuICBUaGlzIHdpbGwgbWFrZSBWaW0gcmVkcmF3IHRoZQorc2NyZWVuIGluc3RlYWQgb2Ygc2Nyb2xsaW5nLCB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gMyBsaW5lcyB0byBiZSBzY3JvbGxlZC4KKworSWYgeW91IGFyZSB1c2luZyBhIGNvbG9yIHRlcm1pbmFsIHRoYXQgaXMgc2xvdywgdXNlIHRoaXMgY29tbWFuZDogPgorCWhpIE5vblRleHQgY3Rlcm09Tk9ORSBjdGVybWZnPU5PTkUKK1RoaXMgYXZvaWRzIHRoYXQgc3BhY2VzIGFyZSBzZW50IHdoZW4gdGhleSBoYXZlIGRpZmZlcmVudCBhdHRyaWJ1dGVzLiAgT24gbW9zdAordGVybWluYWxzIHlvdSBjYW4ndCBzZWUgdGhpcyBhbnl3YXkuCisKK0lmIHlvdSBhcmUgdXNpbmcgVmltIG92ZXIgYSBzbG93IHNlcmlhbCBsaW5lLCB5b3UgbWlnaHQgd2FudCB0byB0cnkgcnVubmluZworVmltIGluc2lkZSB0aGUgInNjcmVlbiIgcHJvZ3JhbS4gIFNjcmVlbiB3aWxsIG9wdGltaXplIHRoZSB0ZXJtaW5hbCBJL08gcXVpdGUKK2EgYml0LgorCitJZiB5b3UgYXJlIHRlc3RpbmcgdGVybWNhcCBvcHRpb25zLCBidXQgeW91IGNhbm5vdCBzZWUgd2hhdCBpcyBoYXBwZW5pbmcsCit5b3UgbWlnaHQgd2FudCB0byBzZXQgdGhlICd3cml0ZWRlbGF5JyBvcHRpb24uICBXaGVuIG5vbi16ZXJvLCBvbmUgY2hhcmFjdGVyCitpcyBzZW50IHRvIHRoZSB0ZXJtaW5hbCBhdCBhIHRpbWUgKGRvZXMgbm90IHdvcmsgZm9yIE1TLURPUykuICBUaGlzIG1ha2VzIHRoZQorc2NyZWVuIHVwZGF0aW5nIGEgbG90IHNsb3dlciwgbWFraW5nIGl0IHBvc3NpYmxlIHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBVc2luZyB0aGUgbW91c2UJCQkJCSptb3VzZS11c2luZyoKKworVGhpcyBzZWN0aW9uIGlzIGFib3V0IHVzaW5nIHRoZSBtb3VzZSBvbiBhIHRlcm1pbmFsIG9yIGEgdGVybWluYWwgd2luZG93LiAgSG93Cit0byB1c2UgdGhlIG1vdXNlIGluIGEgR1VJIHdpbmRvdyBpcyBleHBsYWluZWQgaW4gfGd1aS1tb3VzZXwuICBGb3Igc2Nyb2xsaW5nCit3aXRoIGEgbW91c2Ugd2hlZWwgc2VlIHxzY3JvbGwtbW91c2Utd2hlZWx8LgorCitEb24ndCBmb3JnZXQgdG8gZW5hYmxlIHRoZSBtb3VzZSB3aXRoIHRoaXMgY29tbWFuZHM6ID4KKwk6c2V0IG1vdXNlPWEKK090aGVyd2lzZSBWaW0gd29uJ3QgcmVjb2duaXplIHRoZSBtb3VzZSBpbiBhbGwgbW9kZXMgKFNlZSAnbW91c2UnKS4KKworQ3VycmVudGx5IHRoZSBtb3VzZSBpcyBzdXBwb3J0ZWQgZm9yIFVuaXggaW4gYW4geHRlcm0gd2luZG93LCBpbiBhIExpbnV4Citjb25zb2xlICh3aXRoIEdQTSB8Z3BtLW1vdXNlfCksIGZvciBNUy1ET1MgYW5kIGluIGEgV2luZG93cyBjb25zb2xlLgorTW91c2UgY2xpY2tzIGNhbiBiZSB1c2VkIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IsIHNlbGVjdCBhbiBhcmVhIGFuZCBwYXN0ZS4KKworVGhlc2UgY2hhcmFjdGVycyBpbiB0aGUgJ21vdXNlJyBvcHRpb24gdGVsbCBpbiB3aGljaCBzaXR1YXRpb25zIHRoZSBtb3VzZSB3aWxsCitiZSB1c2VkIGJ5IFZpbToKKwkJbglOb3JtYWwgbW9kZQorCQl2CVZpc3VhbCBtb2RlCisJCWkJSW5zZXJ0IG1vZGUKKwkJYwlDb21tYW5kLWxpbmUgbW9kZQorCQloCWFsbCBwcmV2aW91cyBtb2RlcyB3aGVuIGluIGEgaGVscCBmaWxlCisJCWEJYWxsIHByZXZpb3VzIG1vZGVzCisJCXIJZm9yIHxoaXQtZW50ZXJ8IHByb21wdAorCQlBCWF1dG8tc2VsZWN0IGluIFZpc3VhbCBtb2RlCisKK1RoZSBkZWZhdWx0IGZvciAnbW91c2UnIGlzIGVtcHR5LCB0aGUgbW91c2UgaXMgbm90IHVzZWQuICBOb3JtYWxseSB5b3Ugd291bGQKK2RvOiA+CisJOnNldCBtb3VzZT1hCit0byBzdGFydCB1c2luZyB0aGUgbW91c2UgKHRoaXMgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nICdtb3VzZScgdG8gIm52aWNoIikuCitJZiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGUgbW91c2UgaW4gYSBmZXcgbW9kZXMgb3IgYWxzbyB3YW50IHRvIHVzZSBpdCBmb3IKK3RoZSB0d28gcXVlc3Rpb25zIHlvdSB3aWxsIGhhdmUgdG8gY29uY2F0ZW5hdGUgdGhlIGxldHRlcnMgZm9yIHRob3NlIG1vZGVzLgorRm9yIGV4YW1wbGU6ID4KKwk6c2V0IG1vdXNlPW52CitXaWxsIG1ha2UgdGhlIG1vdXNlIHdvcmsgaW4gTm9ybWFsIG1vZGUgYW5kIFZpc3VhbCBtb2RlLiA+CisJOnNldCBtb3VzZT1oCitXaWxsIG1ha2UgdGhlIG1vdXNlIHdvcmsgaW4gaGVscCBmaWxlcyBvbmx5IChzbyB5b3UgY2FuIHVzZSAiZzxMZWZ0TW91c2U+IiB0bworanVtcCB0byB0YWdzKS4KKworV2hldGhlciB0aGUgc2VsZWN0aW9uIHRoYXQgaXMgc3RhcnRlZCB3aXRoIHRoZSBtb3VzZSBpcyBpbiBWaXN1YWwgbW9kZSBvcgorU2VsZWN0IG1vZGUgZGVwZW5kcyBvbiB3aGV0aGVyICJtb3VzZSIgaXMgaW5jbHVkZWQgaW4gdGhlICdzZWxlY3Rtb2RlJworb3B0aW9uLgorCitJbiBhbiB4dGVybSwgd2l0aCB0aGUgY3VycmVudGx5IGFjdGl2ZSBtb2RlIGluY2x1ZGVkIGluIHRoZSAnbW91c2UnIG9wdGlvbiwKK25vcm1hbCBtb3VzZSBjbGlja3MgYXJlIHVzZWQgYnkgVmltLCBtb3VzZSBjbGlja3Mgd2l0aCB0aGUgc2hpZnQgb3IgY3RybCBrZXkKK3ByZXNzZWQgZ28gdG8gdGhlIHh0ZXJtLiAgV2l0aCB0aGUgY3VycmVudGx5IGFjdGl2ZSBtb2RlIG5vdCBpbmNsdWRlZCBpbgorJ21vdXNlJyBhbGwgbW91c2UgY2xpY2tzIGdvIHRvIHRoZSB4dGVybS4KKworCQkJCQkJCSp4dGVybS1jbGlwYm9hcmQqCitJbiB0aGUgQXRoZW5hIGFuZCBNb3RpZiBHVUkgdmVyc2lvbnMsIHdoZW4gcnVubmluZyBpbiBhIHRlcm1pbmFsIGFuZCB0aGVyZSBpcworYWNjZXNzIHRvIHRoZSBYLXNlcnZlciAoRElTUExBWSBpcyBzZXQpLCB0aGUgY29weSBhbmQgcGFzdGUgd2lsbCBiZWhhdmUgbGlrZQoraW4gdGhlIEdVSS4gIElmIG5vdCwgdGhlIG1pZGRsZSBtb3VzZSBidXR0b24gd2lsbCBpbnNlcnQgdGhlIHVubmFtZWQgcmVnaXN0ZXIuCitJbiB0aGF0IGNhc2UsIGhlcmUgaXMgaG93IHlvdSBjb3B5IGFuZCBwYXN0ZSBhIHBpZWNlIG9mIHRleHQ6CisKK0NvcHkvcGFzdGUgd2l0aCB0aGUgbW91c2UgYW5kIFZpc3VhbCBtb2RlICgnbW91c2UnIG9wdGlvbiBtdXN0IGJlIHNldCwgc2VlCithYm92ZSk6CisxLiBQcmVzcyBsZWZ0IG1vdXNlIGJ1dHRvbiBvbiBmaXJzdCBsZXR0ZXIgb2YgdGV4dCwgbW92ZSBtb3VzZSBwb2ludGVyIHRvIGxhc3QKKyAgIGxldHRlciBvZiB0aGUgdGV4dCBhbmQgcmVsZWFzZSB0aGUgYnV0dG9uLiAgVGhpcyB3aWxsIHN0YXJ0IFZpc3VhbCBtb2RlIGFuZAorICAgaGlnaGxpZ2h0IHRoZSBzZWxlY3RlZCBhcmVhLgorMi4gUHJlc3MgInkiIHRvIHlhbmsgdGhlIFZpc3VhbCB0ZXh0IGluIHRoZSB1bm5hbWVkIHJlZ2lzdGVyLgorMy4gQ2xpY2sgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGF0IHRoZSBpbnNlcnQgcG9zaXRpb24uCis0LiBDbGljayB0aGUgbWlkZGxlIG1vdXNlIGJ1dHRvbi4KKworU2hvcnRjdXQ6IElmIHRoZSBpbnNlcnQgcG9zaXRpb24gaXMgb24gdGhlIHNjcmVlbiBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZQorVmlzdWFsIHRleHQsIHlvdSBjYW4gZG8gMiwgMyBhbmQgNCBhbGwgaW4gb25lOiBDbGljayB0aGUgbWlkZGxlIG1vdXNlIGJ1dHRvbgorYXQgdGhlIGluc2VydCBwb3NpdGlvbi4KKworTm90ZTogV2hlbiB0aGUgfC1YfCBjb21tYW5kIGxpbmUgYXJndW1lbnQgaXMgdXNlZCwgVmltIHdpbGwgbm90IGNvbm5lY3QgdG8gdGhlCitYIHNlcnZlciBhbmQgY29weS9wYXN0ZSB0byB0aGUgWCBjbGlwYm9hcmQgKHNlbGVjdGlvbikgd2lsbCBub3Qgd29yay4gIFVzZSB0aGUKK3NoaWZ0IGtleSB3aXRoIHRoZSBtb3VzZSBidXR0b25zIHRvIGxldCB0aGUgeHRlcm0gZG8gdGhlIHNlbGVjdGlvbi4KKworCQkJCQkJCSp4dGVybS1jb21tYW5kLXNlcnZlcioKK1doZW4gdGhlIFgtc2VydmVyIGNsaXBib2FyZCBpcyBhdmFpbGFibGUsIHRoZSBjb21tYW5kIHNlcnZlciBkZXNjcmliZWQgaW4KK3x4MTEtY2xpZW50c2VydmVyfCBjYW4gYmUgZW5hYmxlZCB3aXRoIHRoZSAtLXNlcnZlcm5hbWUgY29tbWFuZCBsaW5lIGFyZ3VtZW50LgorCisJCQkJCQkJKnh0ZXJtLWNvcHktcGFzdGUqCitOT1RFOiBJbiBzb21lIChvbGRlcikgeHRlcm1zLCBpdCdzIG5vdCBwb3NzaWJsZSB0byBtb3ZlIHRoZSBjdXJzb3IgcGFzdCBjb2x1bW4KKzk1LiAgVGhpcyBpcyBhbiB4dGVybSBwcm9ibGVtLCBub3QgVmltJ3MuICBHZXQgYSBuZXdlciB4dGVybSB8Y29sb3IteHRlcm18LgorCitDb3B5L3Bhc3RlIGluIHh0ZXJtIHdpdGggKGN1cnJlbnQgbW9kZSBOT1QgaW5jbHVkZWQgaW4gJ21vdXNlJyk6CisxLiBQcmVzcyBsZWZ0IG1vdXNlIGJ1dHRvbiBvbiBmaXJzdCBsZXR0ZXIgb2YgdGV4dCwgbW92ZSBtb3VzZSBwb2ludGVyIHRvIGxhc3QKKyAgIGxldHRlciBvZiB0aGUgdGV4dCBhbmQgcmVsZWFzZSB0aGUgYnV0dG9uLgorMi4gVXNlIG5vcm1hbCBWaW0gY29tbWFuZHMgdG8gcHV0IHRoZSBjdXJzb3IgYXQgdGhlIGluc2VydCBwb3NpdGlvbi4KKzMuIFByZXNzICJhIiB0byBzdGFydCBJbnNlcnQgbW9kZS4KKzQuIENsaWNrIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uLgorNS4gUHJlc3MgRVNDIHRvIGVuZCBJbnNlcnQgbW9kZS4KKyhUaGUgc2FtZSBjYW4gYmUgZG9uZSB3aXRoIGFueXRoaW5nIGluICdtb3VzZScgaWYgeW91IGtlZXAgdGhlIHNoaWZ0IGtleQorcHJlc3NlZCB3aGlsZSB1c2luZyB0aGUgbW91c2UuKQorCitOb3RlOiBpZiB5b3UgbG9zZSB0aGUgOHRoIGJpdCB3aGVuIHBhc3RpbmcgKHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgdHJhbnNsYXRlZAoraW50byBvdGhlciBjaGFyYWN0ZXJzKSwgeW91IG1heSBoYXZlIHRvIGRvICJzdHR5IGNzOCAtaXN0cmlwIC1wYXJlbmIiIGluIHlvdXIKK3NoZWxsIGJlZm9yZSBzdGFydGluZyBWaW0uCisKK1RodXMgaW4gYW4geHRlcm0gdGhlIHNoaWZ0IGFuZCBjdHJsIGtleXMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgbW91c2UuICBNb3VzZQorY29tbWFuZHMgcmVxdWlyaW5nIHRoZSBDVFJMIG1vZGlmaWVyIGNhbiBiZSBzaW11bGF0ZWQgYnkgdHlwaW5nIHRoZSAiZyIga2V5CitiZWZvcmUgdXNpbmcgdGhlIG1vdXNlOgorCSJnPExlZnRNb3VzZT4iCWlzICI8Qy1MZWZ0TW91c2U+CShqdW1wIHRvIHRhZyB1bmRlciBtb3VzZSBjbGljaykKKwkiZzxSaWdodE1vdXNlPiIgaXMgIjxDLVJpZ2h0TW91c2U+CSgiQ1RSTC1UIikKKworCQkJCQkqbW91c2UtbW9kZS10YWJsZSogKm1vdXNlLW92ZXJ2aWV3KgorQSBzaG9ydCBvdmVydmlldyBvZiB3aGF0IHRoZSBtb3VzZSBidXR0b25zIGRvLCB3aGVuICdtb3VzZW1vZGVsJyBpcyAiZXh0ZW5kIjoKKworTm9ybWFsIE1vZGU6CitldmVudAkgICAgICBwb3NpdGlvbgkgICBzZWxlY3Rpb24JICBjaGFuZ2UgIGFjdGlvbgl+CisJICAgICAgIGN1cnNvcgkJCSAgd2luZG93CQl+Cis8TGVmdE1vdXNlPiAgICAgeWVzCSAgICAgZW5kCSAgICB5ZXMKKzxDLUxlZnRNb3VzZT4gICB5ZXMJICAgICBlbmQJICAgIHllcwkgICAiQ1RSTC1dIiAoMikKKzxTLUxlZnRNb3VzZT4gICB5ZXMJICBubyBjaGFuZ2UJICAgIHllcwkgICAiKiIgKDIpICAgICo8Uy1MZWZ0TW91c2U+KgorPExlZnREcmFnPiAgICAgIHllcwlzdGFydCBvciBleHRlbmQgKDEpIG5vCQkgICAgICAqPExlZnREcmFnPioKKzxMZWZ0UmVsZWFzZT4gICB5ZXMJc3RhcnQgb3IgZXh0ZW5kICgxKSBubworPE1pZGRsZU1vdXNlPiAgIHllcwkgIGlmIG5vdCBhY3RpdmUgICAgIG5vCSAgIHB1dAorPE1pZGRsZU1vdXNlPiAgIHllcwkgIGlmIGFjdGl2ZQkgICAgbm8JICAgeWFuayBhbmQgcHV0Cis8UmlnaHRNb3VzZT4gICAgeWVzCXN0YXJ0IG9yIGV4dGVuZCAgICAgeWVzCis8Uy1SaWdodE1vdXNlPiAgeWVzCSAgIG5vIGNoYW5nZQkgICAgeWVzCSAgICIjIiAoMikgICAgKjxTLVJpZ2h0TW91c2U+KgorPEMtUmlnaHRNb3VzZT4gIG5vCSAgIG5vIGNoYW5nZQkgICAgbm8JICAgIkNUUkwtVCIKKzxSaWdodERyYWc+ICAgICB5ZXMJICAgIGV4dGVuZAkgICAgbm8JCSAgICAgICo8UmlnaHREcmFnPioKKzxSaWdodFJlbGVhc2U+ICB5ZXMJICAgIGV4dGVuZAkgICAgbm8JCSAgICAgICo8UmlnaHRSZWxlYXNlPioKKworSW5zZXJ0IG9yIFJlcGxhY2UgTW9kZToKK2V2ZW50CSAgICAgIHBvc2l0aW9uCSAgIHNlbGVjdGlvbgkgIGNoYW5nZSAgYWN0aW9uCX4KKwkgICAgICAgY3Vyc29yCQkJICB3aW5kb3cJCX4KKzxMZWZ0TW91c2U+ICAgICB5ZXMgICAgIChjYW5ub3QgYmUgYWN0aXZlKSAgeWVzCis8Qy1MZWZ0TW91c2U+ICAgeWVzICAgICAoY2Fubm90IGJlIGFjdGl2ZSkgIHllcwkgICAiQ1RSTC1PXl0iICgyKQorPFMtTGVmdE1vdXNlPiAgIHllcyAgICAgKGNhbm5vdCBiZSBhY3RpdmUpICB5ZXMJICAgIkNUUkwtTyoiICgyKQorPExlZnREcmFnPiAgICAgIHllcyAgICAgc3RhcnQgb3IgZXh0ZW5kICgxKSBubwkgICBsaWtlIENUUkwtTyAoMSkKKzxMZWZ0UmVsZWFzZT4gICB5ZXMgICAgIHN0YXJ0IG9yIGV4dGVuZCAoMSkgbm8JICAgbGlrZSBDVFJMLU8gKDEpCis8TWlkZGxlTW91c2U+ICAgbm8gICAgICAoY2Fubm90IGJlIGFjdGl2ZSkgIG5vCSAgIHB1dCByZWdpc3RlcgorPFJpZ2h0TW91c2U+ICAgIHllcyAgICAgc3RhcnQgb3IgZXh0ZW5kCSAgICB5ZXMJICAgbGlrZSBDVFJMLU8KKzxTLVJpZ2h0TW91c2U+ICB5ZXMgICAgIChjYW5ub3QgYmUgYWN0aXZlKSAgeWVzCSAgICJDVFJMLU8jIiAoMikKKzxDLVJpZ2h0TW91c2U+ICBubwkoY2Fubm90IGJlIGFjdGl2ZSkgIG5vCSAgICJDVFJMLU8gQ1RSTC1UIgorCitJbiBhIGhlbHAgd2luZG93OgorZXZlbnQJICAgICAgcG9zaXRpb24JICAgc2VsZWN0aW9uCSAgY2hhbmdlICBhY3Rpb24JfgorCSAgICAgICBjdXJzb3IJCQkgIHdpbmRvdwkJfgorPDItTGVmdE1vdXNlPiAgIHllcyAgICAgKGNhbm5vdCBiZSBhY3RpdmUpICBubwkgICAiXl0iIChqdW1wIHRvIGhlbHAgdGFnKQorCitXaGVuICdtb3VzZW1vZGVsJyBpcyAicG9wdXAiLCB0aGVzZSBhcmUgZGlmZmVyZW50OgorCitOb3JtYWwgTW9kZToKK2V2ZW50CSAgICAgIHBvc2l0aW9uCSAgIHNlbGVjdGlvbgkgIGNoYW5nZSAgYWN0aW9uCX4KKwkgICAgICAgY3Vyc29yCQkJICB3aW5kb3cJCX4KKzxTLUxlZnRNb3VzZT4JeWVzCXN0YXJ0IG9yIGV4dGVuZCAoMSkgbm8KKzxSaWdodE1vdXNlPglubwlwb3B1cCBtZW51CSAgICBubworCitJbnNlcnQgb3IgUmVwbGFjZSBNb2RlOgorZXZlbnQJICAgICAgcG9zaXRpb24JICAgc2VsZWN0aW9uCSAgY2hhbmdlICBhY3Rpb24JfgorCSAgICAgICBjdXJzb3IJCQkgIHdpbmRvdwkJfgorPFMtTGVmdE1vdXNlPiAgIHllcyAgICAgc3RhcnQgb3IgZXh0ZW5kICgxKSBubwkgICBsaWtlIENUUkwtTyAoMSkKKzxSaWdodE1vdXNlPiAgICBubwlwb3B1cCBtZW51CSAgICBubworCisoMSkgb25seSBpZiBtb3VzZSBwb2ludGVyIG1vdmVkIHNpbmNlIHByZXNzCisoMikgb25seSBpZiBjbGljayBpcyBpbiBzYW1lIGJ1ZmZlcgorCitDbGlja2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gY2F1c2VzIHRoZSBjdXJzb3IgdG8gYmUgcG9zaXRpb25lZC4gIElmIHRoZQorY2xpY2sgaXMgaW4gYW5vdGhlciB3aW5kb3cgdGhhdCB3aW5kb3cgaXMgbWFkZSB0aGUgYWN0aXZlIHdpbmRvdy4gIFdoZW4KK2VkaXRpbmcgdGhlIGNvbW1hbmQtbGluZSB0aGUgY3Vyc29yIGNhbiBvbmx5IGJlIHBvc2l0aW9uZWQgb24gdGhlCitjb21tYW5kLWxpbmUuICBXaGVuIGluIEluc2VydCBtb2RlIFZpbSByZW1haW5zIGluIEluc2VydCBtb2RlLiAgSWYgJ3Njcm9sbG9mZicKK2lzIHNldCwgYW5kIHRoZSBjdXJzb3IgaXMgcG9zaXRpb25lZCB3aXRoaW4gJ3Njcm9sbG9mZicgbGluZXMgZnJvbSB0aGUgd2luZG93Citib3JkZXIsIHRoZSB0ZXh0IGlzIHNjcm9sbGVkLgorCitBIHNlbGVjdGlvbiBjYW4gYmUgc3RhcnRlZCBieSBwcmVzc2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gb24gdGhlIGZpcnN0CitjaGFyYWN0ZXIsIG1vdmluZyB0aGUgbW91c2UgdG8gdGhlIGxhc3QgY2hhcmFjdGVyLCB0aGVuIHJlbGVhc2luZyB0aGUgbW91c2UKK2J1dHRvbi4gIFlvdSB3aWxsIG5vdCBhbHdheXMgc2VlIHRoZSBzZWxlY3Rpb24gdW50aWwgeW91IHJlbGVhc2UgdGhlIGJ1dHRvbiwKK29ubHkgaW4gc29tZSB2ZXJzaW9ucyAoR1VJLCBNUy1ET1MsIFdJTjMyKSB3aWxsIHRoZSBkcmFnZ2luZyBiZSBzaG93bgoraW1tZWRpYXRlbHkuICBOb3RlIHRoYXQgeW91IGNhbiBtYWtlIHRoZSB0ZXh0IHNjcm9sbCBieSBtb3ZpbmcgdGhlIG1vdXNlIGF0CitsZWFzdCBvbmUgY2hhcmFjdGVyIGluIHRoZSBmaXJzdC9sYXN0IGxpbmUgaW4gdGhlIHdpbmRvdyB3aGVuICdzY3JvbGxvZmYnIGlzCitub24temVyby4KKworSW4gTm9ybWFsLCBWaXN1YWwgYW5kIFNlbGVjdCBtb2RlIGNsaWNraW5nIHRoZSByaWdodCBtb3VzZSBidXR0b24gY2F1c2VzIHRoZQorVmlzdWFsIGFyZWEgdG8gYmUgZXh0ZW5kZWQuICBXaGVuICdtb3VzZW1vZGVsJyBpcyAicG9wdXAiLCB0aGUgbGVmdCBidXR0b24gaGFzCit0byBiZSB1c2VkIHdoaWxlIGtlZXBpbmcgdGhlIHNoaWZ0IGtleSBwcmVzc2VkLiAgV2hlbiBjbGlja2luZyBpbiBhIHdpbmRvdword2hpY2ggaXMgZWRpdGluZyBhbm90aGVyIGJ1ZmZlciwgdGhlIFZpc3VhbCBvciBTZWxlY3QgbW9kZSBpcyBzdG9wcGVkLgorCisJCQkJCQkJKmRvdWJsZS1jbGljayoKK0RvdWJsZSwgdHJpcGxlIGFuZCBxdWFkcnVwbGUgY2xpY2tzIGFyZSBzdXBwb3J0ZWQgd2hlbiB0aGUgR1VJIGlzIGFjdGl2ZSwKK2ZvciBNUy1ET1MgYW5kIFdpbjMyLCBhbmQgZm9yIGFuIHh0ZXJtIChpZiB0aGUgZ2V0dGltZW9mZGF5KCkgZnVuY3Rpb24gaXMKK2F2YWlsYWJsZSkuICBGb3Igc2VsZWN0aW5nIHRleHQsIGV4dHJhIGNsaWNrcyBleHRlbmQgdGhlIHNlbGVjdGlvbjoKKwljbGljawkJc2VsZWN0IH4KKwlkb3VibGUJCXdvcmQgb3IgJSBtYXRjaAkJKjwyLUxlZnRNb3VzZT4qCisJdHJpcGxlCQlsaW5lCQkJKjwzLUxlZnRNb3VzZT4qCisJcXVhZHJ1cGxlCXJlY3Rhbmd1bGFyIGJsb2NrCSo8NC1MZWZ0TW91c2U+KgorRXhjZXB0aW9uOiBJbiBhIEhlbHAgd2luZG93IGEgZG91YmxlIGNsaWNrIGp1bXBzIHRvIGhlbHAgZm9yIHRoZSB3b3JkIHRoYXQgaXMKK2NsaWNrZWQgb24uCitBIGRvdWJsZSBjbGljayBvbiBhIHdvcmQgc2VsZWN0cyB0aGF0IHdvcmQuICAnaXNrZXl3b3JkJyBpcyB1c2VkIHRvIHNwZWNpZnkKK3doaWNoIGNoYXJhY3RlcnMgYXJlIGluY2x1ZGVkIGluIGEgd29yZC4gIEEgZG91YmxlIGNsaWNrIG9uIGEgY2hhcmFjdGVyCit0aGF0IGhhcyBhIG1hdGNoIHNlbGVjdHMgdW50aWwgdGhhdCBtYXRjaCAobGlrZSB1c2luZyAidiUiKS4gIElmIHRoZSBtYXRjaCBpcworYW4gI2lmLyNlbHNlLyNlbmRpZiBibG9jaywgdGhlIHNlbGVjdGlvbiBiZWNvbWVzIGxpbmV3aXNlLgorRm9yIE1TLURPUyBhbmQgeHRlcm0gdGhlIHRpbWUgZm9yIGRvdWJsZSBjbGlja2luZyBjYW4gYmUgc2V0IHdpdGggdGhlCisnbW91c2V0aW1lJyBvcHRpb24uICBGb3IgdGhlIG90aGVyIHN5c3RlbXMgdGhpcyB0aW1lIGlzIGRlZmluZWQgb3V0c2lkZSBvZgorVmltLgorQW4gZXhhbXBsZSwgZm9yIHVzaW5nIGEgZG91YmxlIGNsaWNrIHRvIGp1bXAgdG8gdGhlIHRhZyB1bmRlciB0aGUgY3Vyc29yOiA+CisJOm1hcCA8Mi1MZWZ0TW91c2U+IDpleGUgInRhZyAiLiBleHBhbmQoIjxjd29yZD4iKTxDUj4KKworRHJhZ2dpbmcgdGhlIG1vdXNlIHdpdGggYSBkb3VibGUgY2xpY2sgKGJ1dHRvbi1kb3duLCBidXR0b24tdXAsIGJ1dHRvbi1kb3duCithbmQgdGhlbiBkcmFnKSB3aWxsIHJlc3VsdCBpbiB3aG9sZSB3b3JkcyB0byBiZSBzZWxlY3RlZC4gIFRoaXMgY29udGludWVzCit1bnRpbCB0aGUgYnV0dG9uIGlzIHJlbGVhc2VkLCBhdCB3aGljaCBwb2ludCB0aGUgc2VsZWN0aW9uIGlzIHBlciBjaGFyYWN0ZXIKK2FnYWluLgorCisJCQkJCQkJKmdwbS1tb3VzZSoKK1RoZSBHUE0gbW91c2UgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB0aGUgfCttb3VzZV9ncG18IGZlYXR1cmUgd2FzIGVuYWJsZWQgYXQKK2NvbXBpbGUgdGltZS4gIFRoZSBHUE0gbW91c2UgZHJpdmVyIChMaW51eCBjb25zb2xlKSBkb2VzIG5vdCBzdXBwb3J0IHF1YWRydXBsZQorY2xpY2tzLgorCitJbiBJbnNlcnQgbW9kZSwgd2hlbiBhIHNlbGVjdGlvbiBpcyBzdGFydGVkLCBWaW0gZ29lcyBpbnRvIE5vcm1hbCBtb2RlCit0ZW1wb3JhcmlseS4gIFdoZW4gVmlzdWFsIG9yIFNlbGVjdCBtb2RlIGVuZHMsIGl0IHJldHVybnMgdG8gSW5zZXJ0IG1vZGUuCitUaGlzIGlzIGxpa2UgdXNpbmcgQ1RSTC1PIGluIEluc2VydCBtb2RlLiAgU2VsZWN0IG1vZGUgaXMgdXNlZCB3aGVuIHRoZQorJ3NlbGVjdG1vZGUnIG9wdGlvbiBjb250YWlucyAibW91c2UiLgorCisJCQkJCQkJKmRyYWctc3RhdHVzLWxpbmUqCitXaGVuIHdvcmtpbmcgd2l0aCBzZXZlcmFsIHdpbmRvd3MsIHRoZSBzaXplIG9mIHRoZSB3aW5kb3dzIGNhbiBiZSBjaGFuZ2VkIGJ5CitkcmFnZ2luZyB0aGUgc3RhdHVzIGxpbmUgd2l0aCB0aGUgbW91c2UuICBQb2ludCB0aGUgbW91c2UgYXQgYSBzdGF0dXMgbGluZSwKK3ByZXNzIHRoZSBsZWZ0IGJ1dHRvbiwgbW92ZSB0aGUgbW91c2UgdG8gdGhlIG5ldyBwb3NpdGlvbiBvZiB0aGUgc3RhdHVzIGxpbmUsCityZWxlYXNlIHRoZSBidXR0b24uICBKdXN0IGNsaWNraW5nIHRoZSBtb3VzZSBpbiBhIHN0YXR1cyBsaW5lIG1ha2VzIHRoYXQgd2luZG93Cit0aGUgY3VycmVudCB3aW5kb3csIHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3IuICBJZiBieSBzZWxlY3RpbmcgYSB3aW5kb3cgaXQKK3dpbGwgY2hhbmdlIHBvc2l0aW9uIG9yIHNpemUsIHRoZSBkcmFnZ2luZyBvZiB0aGUgc3RhdHVzIGxpbmUgd2lsbCBsb29rCitjb25mdXNpbmcsIGJ1dCBpdCB3aWxsIHdvcmsgKGp1c3QgdHJ5IGl0KS4KKworCQkJCQkqPE1pZGRsZVJlbGVhc2U+KiAqPE1pZGRsZURyYWc+KgorTW91c2UgY2xpY2tzIGNhbiBiZSBtYXBwZWQuICBUaGUgY29kZXMgZm9yIG1vdXNlIGNsaWNrcyBhcmU6CisgICAgIGNvZGUJICAgIG1vdXNlIGJ1dHRvbgkgICAgICBub3JtYWwgYWN0aW9uCX4KKyA8TGVmdE1vdXNlPgkgbGVmdCBwcmVzc2VkCQkgICAgc2V0IGN1cnNvciBwb3NpdGlvbgorIDxMZWZ0RHJhZz4JIGxlZnQgbW92ZWQgd2hpbGUgcHJlc3NlZCAgIGV4dGVuZCBzZWxlY3Rpb24KKyA8TGVmdFJlbGVhc2U+CSBsZWZ0IHJlbGVhc2VkCQkgICAgc2V0IHNlbGVjdGlvbiBlbmQKKyA8TWlkZGxlTW91c2U+CSBtaWRkbGUgcHJlc3NlZAkJICAgIHBhc3RlIHRleHQgYXQgY3Vyc29yIHBvc2l0aW9uCisgPE1pZGRsZURyYWc+CSBtaWRkbGUgbW92ZWQgd2hpbGUgcHJlc3NlZCAtCisgPE1pZGRsZVJlbGVhc2U+IG1pZGRsZSByZWxlYXNlZAkgICAgLQorIDxSaWdodE1vdXNlPgkgcmlnaHQgcHJlc3NlZAkJICAgIGV4dGVuZCBzZWxlY3Rpb24KKyA8UmlnaHREcmFnPgkgcmlnaHQgbW92ZWQgd2hpbGUgcHJlc3NlZCAgZXh0ZW5kIHNlbGVjdGlvbgorIDxSaWdodFJlbGVhc2U+ICByaWdodCByZWxlYXNlZAkJICAgIHNldCBzZWxlY3Rpb24gZW5kCisgPFgxTW91c2U+CSBYMSBidXR0b24gcHJlc3NlZAkgICAgLQkJCSpYMU1vdXNlKgorIDxYMURyYWc+CSBYMSBtb3ZlZCB3aGlsZSBwcmVzc2VkCSAgICAtCQkJKlgxRHJhZyoKKyA8WDFSZWxlYXNlPgkgWDEgYnV0dG9uIHJlbGVhc2UJICAgIC0JCQkqWDFSZWxlYXNlKgorIDxYMk1vdXNlPgkgWDIgYnV0dG9uIHByZXNzZWQJICAgIC0JCQkqWDJNb3VzZSoKKyA8WDJEcmFnPgkgWDIgbW92ZWQgd2hpbGUgcHJlc3NlZCAgICAgLQkJCSpYMkRyYWcqCisgPFgyUmVsZWFzZT4JIFgyIGJ1dHRvbiByZWxlYXNlCSAgICAtCQkJKlgyUmVsZWFzZSoKKworVGhlIFgxIGFuZCBYMiBidXR0b25zIHJlZmVyIHRvIHRoZSBleHRyYSBidXR0b25zIGZvdW5kIG9uIHNvbWUgbWljZS4gIFRoZQorJ01pY3Jvc29mdCBFeHBsb3JlcicgbW91c2UgaGFzIHRoZXNlIGJ1dHRvbnMgYXZhaWxhYmxlIHRvIHRoZSByaWdodCB0aHVtYi4KK0N1cnJlbnRseSBYMSBhbmQgWDIgb25seSB3b3JrIG9uIFdpbjMyIGVudmlyb25tZW50cy4KKworRXhhbXBsZXM6ID4KKwk6bm9yZW1hcCA8TWlkZGxlTW91c2U+IDxMZWZ0TW91c2U+PE1pZGRsZU1vdXNlPgorUGFzdGUgYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIGNsaWNrIChvdGhlcndpc2UgdGhlIHBhc3RlCit3b3VsZCBiZSBkb25lIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24pLiA+CisKKwk6bm9yZW1hcCA8TGVmdFJlbGVhc2U+IDxMZWZ0UmVsZWFzZT55CitJbW1lZGlhdGVseSB5YW5rIHRoZSBzZWxlY3Rpb24sIHdoZW4gdXNpbmcgVmlzdWFsIG1vZGUuCisKK05vdGUgdGhlIHVzZSBvZiAiOm5vcmVtYXAiIGluc3RlYWQgb2YgIm1hcCIgdG8gYXZvaWQgYSByZWN1cnNpdmUgbWFwcGluZy4KKz4KKwk6bWFwIDxYMU1vdXNlPiA8Qy1PPgorCTptYXAgPFgyTW91c2U+IDxDLUk+CitNYXAgdGhlIFgxIGFuZCBYMiBidXR0b25zIHRvIGdvIGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgaW4gdGhlIGp1bXAgbGlzdCwgc2VlCit8Q1RSTC1PfCBhbmQgfENUUkwtSXwuCisKKwkJCQkJCSptb3VzZS1zd2FwLWJ1dHRvbnMqCitUbyBzd2FwIHRoZSBtZWFuaW5nIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBtb3VzZSBidXR0b25zOiA+CisJOm5vcmVtYXAJPExlZnRNb3VzZT4JPFJpZ2h0TW91c2U+CisJOm5vcmVtYXAJPExlZnREcmFnPgk8UmlnaHREcmFnPgorCTpub3JlbWFwCTxMZWZ0UmVsZWFzZT4JPFJpZ2h0UmVsZWFzZT4KKwk6bm9yZW1hcAk8UmlnaHRNb3VzZT4JPExlZnRNb3VzZT4KKwk6bm9yZW1hcAk8UmlnaHREcmFnPgk8TGVmdERyYWc+CisJOm5vcmVtYXAJPFJpZ2h0UmVsZWFzZT4JPExlZnRSZWxlYXNlPgorCTpub3JlbWFwCWc8TGVmdE1vdXNlPgk8Qy1SaWdodE1vdXNlPgorCTpub3JlbWFwCWc8UmlnaHRNb3VzZT4JPEMtTGVmdE1vdXNlPgorCTpub3JlbWFwIQk8TGVmdE1vdXNlPgk8UmlnaHRNb3VzZT4KKwk6bm9yZW1hcCEJPExlZnREcmFnPgk8UmlnaHREcmFnPgorCTpub3JlbWFwIQk8TGVmdFJlbGVhc2U+CTxSaWdodFJlbGVhc2U+CisJOm5vcmVtYXAhCTxSaWdodE1vdXNlPgk8TGVmdE1vdXNlPgorCTpub3JlbWFwIQk8UmlnaHREcmFnPgk8TGVmdERyYWc+CisJOm5vcmVtYXAhCTxSaWdodFJlbGVhc2U+CTxMZWZ0UmVsZWFzZT4KKzwKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90aXBzLnR4dCBiL3J1bnRpbWUvZG9jL3RpcHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzQ3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy90aXBzLnR4dApAQCAtMCwwICsxLDQ0NSBAQAorKnRpcHMudHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEZlYiAxNworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1RpcHMgYW5kIGlkZWFzIGZvciB1c2luZyBWaW0JCQkJKnRpcHMqCisKK0Rvbid0IGZvcmdldCB0byBicm93c2UgdGhlIHVzZXIgbWFudWFsLCBpdCBhbHNvIGNvbnRhaW5zIGxvdHMgb2YgdXNlZnVsIHRpcHMKK3x1c3JfdG9jLnR4dHwuCisKK0VkaXRpbmcgQyBwcm9ncmFtcwkJCQl8Qy1lZGl0aW5nfAorRmluZGluZyB3aGVyZSBpZGVudGlmaWVycyBhcmUgdXNlZAkJfGlkZW50LXNlYXJjaHwKK1N3aXRjaGluZyBzY3JlZW5zIGluIGFuIHh0ZXJtCQkJfHh0ZXJtLXNjcmVlbnN8CitTY3JvbGxpbmcgaW4gSW5zZXJ0IG1vZGUJCQl8c2Nyb2xsLWluc2VydHwKK1Ntb290aCBzY3JvbGxpbmcJCQkJfHNjcm9sbC1zbW9vdGh8CitDb3JyZWN0aW5nIGNvbW1vbiB0eXBpbmcgbWlzdGFrZXMJCXx0eXBlLW1pc3Rha2VzfAorQ291bnRpbmcgd29yZHMsIGxpbmVzLCBldGMuCQkJfGNvdW50LWl0ZW1zfAorUmVzdG9yaW5nIHRoZSBjdXJzb3IgcG9zaXRpb24JCQl8cmVzdG9yZS1wb3NpdGlvbnwKK1JlbmFtaW5nIGZpbGVzCQkJCQl8cmVuYW1lLWZpbGVzfAorU3BlZWRpbmcgdXAgZXh0ZXJuYWwgY29tbWFuZHMJCQl8c3BlZWQtdXB8CitVc2VmdWwgbWFwcGluZ3MJCQkJCXx1c2VmdWwtbWFwcGluZ3N8CitDb21wcmVzc2luZyB0aGUgaGVscCBmaWxlcwkJCXxnemlwLWhlbHBmaWxlfAorSGV4IGVkaXRpbmcJCQkJCXxoZXgtZWRpdGluZ3wKK0V4ZWN1dGluZyBzaGVsbCBjb21tYW5kcyBpbiBhIHdpbmRvdwkJfHNoZWxsLXdpbmRvd3wKK1VzaW5nIDw+IG5vdGF0aW9uIGluIGF1dG9jb21tYW5kcwkJfGF1dG9jbWQtPD58CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRWRpdGluZyBDIHByb2dyYW1zCQkJCQkqQy1lZGl0aW5nKgorCitUaGVyZSBhcmUgcXVpdGUgYSBmZXcgZmVhdHVyZXMgaW4gVmltIHRvIGhlbHAgeW91IGVkaXQgQyBwcm9ncmFtIGZpbGVzLiAgSGVyZQoraXMgYW4gb3ZlcnZpZXcgd2l0aCB0YWdzIHRvIGp1bXAgdG86CisKK3x1c3JfMjkudHh0fAkJTW92aW5nIHRocm91Z2ggcHJvZ3JhbXMgY2hhcHRlciBpbiB0aGUgdXNlciBtYW51YWwuCit8dXNyXzMwLnR4dHwJCUVkaXRpbmcgcHJvZ3JhbXMgY2hhcHRlciBpbiB0aGUgdXNlciBtYW51YWwuCit8Qy1pbmRlbnRpbmd8CQlBdXRvbWF0aWNhbGx5IHNldCB0aGUgaW5kZW50IG9mIGEgbGluZSB3aGlsZSB0eXBpbmcKKwkJCXRleHQuCit8PXwJCQlSZS1pbmRlbnQgYSBmZXcgbGluZXMuCit8Zm9ybWF0LWNvbW1lbnRzfAlGb3JtYXQgY29tbWVudHMuCisKK3w6Y2hlY2twYXRofAkJU2hvdyBhbGwgcmVjdXJzaXZlbHkgaW5jbHVkZWQgZmlsZXMuCit8W2l8CQkJU2VhcmNoIGZvciBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciBpbiBjdXJyZW50IGFuZAorCQkJaW5jbHVkZWQgZmlsZXMuCit8W19DVFJMLUl8CQlKdW1wIHRvIG1hdGNoIGZvciAiW2kiCit8W0l8CQkJTGlzdCBhbGwgbGluZXMgaW4gY3VycmVudCBhbmQgaW5jbHVkZWQgZmlsZXMgd2hlcmUKKwkJCWlkZW50aWZpZXIgdW5kZXIgdGhlIGN1cnNvciBtYXRjaGVzLgorfFtkfAkJCVNlYXJjaCBmb3IgZGVmaW5lIHVuZGVyIGN1cnNvciBpbiBjdXJyZW50IGFuZCBpbmNsdWRlZAorCQkJZmlsZXMuCisKK3xDVFJMLV18CQlKdW1wIHRvIHRhZyB1bmRlciBjdXJzb3IgKGUuZy4sIGRlZmluaXRpb24gb2YgYQorCQkJZnVuY3Rpb24pLgorfENUUkwtVHwJCUp1bXAgYmFjayB0byBiZWZvcmUgYSBDVFJMLV0gY29tbWFuZC4KK3w6dHNlbGVjdHwJCVNlbGVjdCBvbmUgdGFnIG91dCBvZiBhIGxpc3Qgb2YgbWF0Y2hpbmcgdGFncy4KKworfGdkfAkJCUdvIHRvIERlY2xhcmF0aW9uIG9mIGxvY2FsIHZhcmlhYmxlIHVuZGVyIGN1cnNvci4KK3xnRHwJCQlHbyB0byBEZWNsYXJhdGlvbiBvZiBnbG9iYWwgdmFyaWFibGUgdW5kZXIgY3Vyc29yLgorCit8Z2Z8CQkJR28gdG8gZmlsZSBuYW1lIHVuZGVyIHRoZSBjdXJzb3IuCisKK3wlfAkJCUdvIHRvIG1hdGNoaW5nICgpLCB7fSwgW10sIC8qICovLCAjaWYsICNlbHNlLCAjZW5kaWYuCit8Wy98CQkJR28gdG8gcHJldmlvdXMgc3RhcnQgb2YgY29tbWVudC4KK3xdL3wJCQlHbyB0byBuZXh0IGVuZCBvZiBjb21tZW50LgorfFsjfAkJCUdvIGJhY2sgdG8gdW5jbG9zZWQgI2lmLCAjaWZkZWYsIG9yICNlbHNlLgorfF0jfAkJCUdvIGZvcndhcmQgdG8gdW5jbG9zZWQgI2Vsc2Ugb3IgI2VuZGlmLgorfFsofAkJCUdvIGJhY2sgdG8gdW5jbG9zZWQgJygnCit8XSl8CQkJR28gZm9yd2FyZCB0byB1bmNsb3NlZCAnKScKK3xbe3wJCQlHbyBiYWNrIHRvIHVuY2xvc2VkICd7JworfF19fAkJCUdvIGZvcndhcmQgdG8gdW5jbG9zZWQgJ30nCisKK3x2X2FifAkJCVNlbGVjdCAiYSBibG9jayIgZnJvbSAiWygiIHRvICJdKSIsIGluY2x1ZGluZyBicmFjZXMKK3x2X2lifAkJCVNlbGVjdCAiaW5uZXIgYmxvY2siIGZyb20gIlsoIiB0byAiXSkiCit8dl9hQnwJCQlTZWxlY3QgImEgYmxvY2siIGZyb20gIlt7IiB0byAiXX0iLCBpbmNsdWRpbmcgYnJhY2tldHMKK3x2X2lCfAkJCVNlbGVjdCAiaW5uZXIgYmxvY2siIGZyb20gIlt7IiB0byAiXX0iCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRmluZGluZyB3aGVyZSBpZGVudGlmaWVycyBhcmUgdXNlZAkJCSppZGVudC1zZWFyY2gqCisKK1lvdSBwcm9iYWJseSBhbHJlYWR5IGtub3cgdGhhdCB8dGFnc3wgY2FuIGJlIHVzZWQgdG8ganVtcCB0byB0aGUgcGxhY2Ugd2hlcmUgYQorZnVuY3Rpb24gb3IgdmFyaWFibGUgaXMgZGVmaW5lZC4gIEJ1dCBzb21ldGltZXMgeW91IHdpc2ggeW91IGNvdWxkIGp1bXAgdG8gYWxsCit0aGUgcGxhY2VzIHdoZXJlIGEgZnVuY3Rpb24gb3IgdmFyaWFibGUgaXMgYmVpbmcgdXNlZC4gIFRoaXMgaXMgcG9zc2libGUgaW4KK3R3byB3YXlzOgorMS4gVXNpbmcgdGhlIHw6Z3JlcHwgY29tbWFuZC4gIFRoaXMgc2hvdWxkIHdvcmsgb24gbW9zdCBVbml4IHN5c3RlbXMsCisgICBidXQgY2FuIGJlIHNsb3cgKGl0IHJlYWRzIGFsbCBmaWxlcykgYW5kIG9ubHkgc2VhcmNoZXMgaW4gb25lIGRpcmVjdG9yeS4KKzIuIFVzaW5nIElEIHV0aWxzLiAgVGhpcyBpcyBmYXN0IGFuZCB3b3JrcyBpbiBtdWx0aXBsZSBkaXJlY3Rvcmllcy4gIEl0IHVzZXMgYQorICAgZGF0YWJhc2UgdG8gc3RvcmUgbG9jYXRpb25zLiAgWW91IHdpbGwgbmVlZCBzb21lIGFkZGl0aW9uYWwgcHJvZ3JhbXMgZm9yCisgICB0aGlzIHRvIHdvcmsuICBBbmQgeW91IG5lZWQgdG8ga2VlcCB0aGUgZGF0YWJhc2UgdXAgdG8gZGF0ZS4KKworVXNpbmcgdGhlIEdOVSBpZC10b29sczoKKworV2hhdCB5b3UgbmVlZDoKKy0gVGhlIEdOVSBpZC10b29scyBpbnN0YWxsZWQgKG1raWQgaXMgbmVlZGVkIHRvIGNyZWF0ZSBJRCBhbmQgbGlkIGlzIG5lZWRlZCB0bworICB1c2UgdGhlIG1hY3JvcykuCistIEFuIGlkZW50aWZpZXIgZGF0YWJhc2UgZmlsZSBjYWxsZWQgIklEIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBZb3UgY2FuCisgIGNyZWF0ZSBpdCB3aXRoIHRoZSBzaGVsbCBjb21tYW5kICJta2lkIGZpbGUxIGZpbGUyIC4uIi4KKworUHV0IHRoaXMgaW4geW91ciAudmltcmM6ID4KKwltYXAgX3UgOmNhbGwgSURfc2VhcmNoKCk8QmFyPmV4ZWN1dGUgIi9cXDwiIC4gZzp3b3JkIC4gIlxcPiI8Q1I+CisJbWFwIF9uIDpuPEJhcj5leGVjdXRlICIvXFw8IiAuIGc6d29yZCAuICJcXD4iPENSPgorCisJZnVuY3Rpb24hIElEX3NlYXJjaCgpCisJICBsZXQgZzp3b3JkID0gZXhwYW5kKCI8Y3dvcmQ+IikKKwkgIGxldCB4ID0gc3lzdGVtKCJsaWQgLS1rZXk9bm9uZSAiLiBnOndvcmQpCisJICBsZXQgeCA9IHN1YnN0aXR1dGUoeCwgIlxuIiwgIiAiLCAiZyIpCisJICBleGVjdXRlICJuZXh0ICIgLiB4CisJZW5kZnVuCisKK1RvIHVzZSBpdCwgcGxhY2UgdGhlIGN1cnNvciBvbiBhIHdvcmQsIHR5cGUgIl91IiBhbmQgdmltIHdpbGwgbG9hZCB0aGUgZmlsZQordGhhdCBjb250YWlucyB0aGUgd29yZC4gIFNlYXJjaCBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgd29yZCBpbiB0aGUKK3NhbWUgZmlsZSB3aXRoICJuIi4gIEdvIHRvIHRoZSBuZXh0IGZpbGUgd2l0aCAiX24iLgorCitUaGlzIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGlkLXV0aWxzLTMuMiAod2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIGlkLXRvb2xzCithcmNoaXZlIGZpbGUgb24geW91ciBjbG9zZXN0IGdudS1mdHAtbWlycm9yKS4KKworW3RoZSBpZGVhIGZvciB0aGlzIGNvbWVzIGZyb20gQW5kcmVhcyBLdXRzY2hlcmFdCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU3dpdGNoaW5nIHNjcmVlbnMgaW4gYW4geHRlcm0JCSp4dGVybS1zY3JlZW5zKiAqeHRlcm0tc2F2ZS1zY3JlZW4qCisKKyhGcm9tIGNvbXAuZWRpdG9ycywgYnkgSnVlcmdlbiBXZWlnZXJ0LCBpbiByZXBseSB0byBhIHF1ZXN0aW9uKQorCis6PiBBbm90aGVyIHF1ZXN0aW9uIGlzIHRoYXQgYWZ0ZXIgZXhpdGluZyB2aW0sIHRoZSBzY3JlZW4gaXMgbGVmdCBhcyBpdAorOj4gd2FzLCBpLmUuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBJIHdhcyB2aWV3aW5nIChlZGl0aW5nKSB3YXMgbGVmdCBvbgorOj4gdGhlIHNjcmVlbi4gVGhlIG91dHB1dCBmcm9tIG15IHByZXZpb3VzIGxpa2UgImxzIiB3ZXJlIGxvc3QsCis6PiBpZS4gbm8gbG9uZ2VyIGluIHRoZSBzY3JvbGxpbmcgYnVmZmVyLiBJIGtub3cgdGhhdCB0aGVyZSBpcyBhIHdheSB0bworOj4gcmVzdG9yZSB0aGUgc2NyZWVuIGFmdGVyIGV4aXRpbmcgdmltIG9yIG90aGVyIHZpIGxpa2UgZWRpdG9ycywKKzo+IEkganVzdCBkb24ndCBrbm93IGhvdy4gSGVscHMgYXJlIGFwcHJlY2lhdGVkLiBUaGFua3MuCis6Cis6SSBpbWFnaW5lIHNvbWVvbmUgZWxzZSBjYW4gYW5zd2VyIHRoaXMuICBJIGFzc3VtZSB0aG91Z2ggdGhhdCB2aW0gYW5kIHZpIGRvCis6dGhlIHNhbWUgdGhpbmcgYXMgZWFjaCBvdGhlciBmb3IgYSBnaXZlbiB4dGVybSBzZXR1cC4KKworVGhleSBub3QgbmVjZXNzYXJpbHkgZG8gdGhlIHNhbWUgdGhpbmcsIGFzIHRoaXMgbWF5IGJlIGEgdGVybWNhcCB2cy4KK3Rlcm1pbmZvIHByb2JsZW0uIFlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCB0aGVyZSBhcmUgdHdvIGRhdGFiYXNlcyBmb3IKK2Rlc2NyaWJpbmcgYXR0cmlidXRlcyBvZiBhIHBhcnRpY3VsYXIgdHlwZSBvZiB0ZXJtaW5hbDogdGVybWNhcCBhbmQKK3Rlcm1pbmZvLiBUaGlzIGNhbiBjYXVzZSBkaWZmZXJlbmNlcyB3aGVuIHRoZSBlbnRyaWVzIGRpZmZlciBBTkQgd2hlbiBvZgordGhlIHByb2dyYW1zIGluIHF1ZXN0aW9uIG9uZSB1c2VzIHRlcm1pbmZvIGFuZCB0aGUgb3RoZXIgdXNlcyB0ZXJtY2FwCisoYWxzbyBzZWUgfCt0ZXJtaW5mb3wpLgorCitJbiB5b3VyIHBhcnRpY3VsYXIgcHJvYmxlbSwgeW91IGFyZSBsb29raW5nIGZvciB0aGUgY29udHJvbCBzZXF1ZW5jZXMKK15bWz80N2ggYW5kIF5bWz80N2wuIFRoZXNlIHN3aXRjaCBiZXR3ZWVuIHh0ZXJtcyBhbHRlcm5hdGUgYW5kIG1haW4gc2NyZWVuCitidWZmZXIuIEFzIGEgcXVpY2sgd29ya2Fyb3VuZCBhIGNvbW1hbmQgc2VxdWVuY2UgbGlrZSA+CisJZWNobyAtbiAiXltbPzQ3aCI7IHZpbSAuLi4gOyBlY2hvIC1uICJeW1s/NDdsIgorbWF5IGRvIHdoYXQgeW91IHdhbnQuIChNeSBub3RhdGlvbiBeWyBtZWFucyB0aGUgRVNDIGNoYXJhY3RlciwgZnVydGhlciBkb3duCit5b3UnbGwgc2VlIHRoYXQgdGhlIGRhdGFiYXNlcyB1c2UgXEUgaW5zdGVhZCkuCisKK09uIHN0YXJ0dXAsIHZpbSBlY2hvZXMgdGhlIHZhbHVlIG9mIHRoZSB0ZXJtY2FwIHZhcmlhYmxlIHRpICh0ZXJtaW5mbzoKK3NtY3VwKSB0byB0aGUgdGVybWluYWwuIFdoZW4gZXhpdGluZywgaXQgZWNob2VzIHRlICh0ZXJtaW5mbzogcm1jdXApLiBUaHVzCit0aGVzZSB0d28gdmFyaWFibGVzIGFyZSB0aGUgY29ycmVjdCBwbGFjZSB3aGVyZSB0aGUgYWJvdmUgbWVudGlvbmVkIGNvbnRyb2wKK3NlcXVlbmNlcyBzaG91bGQgZ28uCisKK0NvbXBhcmUgeW91ciB4dGVybSB0ZXJtY2FwIGVudHJ5IChmb3VuZCBpbiAvZXRjL3Rlcm1jYXApIHdpdGggeW91ciB4dGVybQordGVybWluZm8gZW50cnkgKHJldHJpZXZlZCB3aXRoIC91c3IvNWJpbi9pbmZvY21wIC1DIHh0ZXJtKS4gQm90aCBzaG91bGQKK2NvbnRhaW4gZW50cmllcyBzaW1pbGFyIHRvOiA+CisJOnRlPVxFWzJKXEVbPzQ3bFxFODp0aT1cRTdcRVs/NDdoOgorCitQUzogSWYgeW91IGZpbmQgYW55IGRpZmZlcmVuY2UsIHNvbWVvbmUgKHlvdXIgc3lzYWRtaW4/KSBzaG91bGQgYmV0dGVyIGNoZWNrCisgICAgdGhlIGNvbXBsZXRlIHRlcm1jYXAgYW5kIHRlcm1pbmZvIGRhdGFiYXNlIGZvciBjb25zaXN0ZW5jeS4KKworTk9URSAxOiBJZiB5b3UgcmVjb21waWxlIFZpbSB3aXRoIEZFQVRfWFRFUk1fU0FWRSBkZWZpbmVkIGluIGZlYXR1cmUuaCwgdGhlCitidWlsdGluIHh0ZXJtIHdpbGwgaW5jbHVkZSB0aGUgbWVudGlvbmVkICJ0ZSIgYW5kICJ0aSIgZW50cmllcy4KKworTk9URSAyOiBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoZSBzY3JlZW4gc3dpdGNoaW5nLCBhbmQgeW91IGRvbid0IHdhbnQgdG8KK2NoYW5nZSB5b3VyIHRlcm1jYXAsIHlvdSBjYW4gYWRkIHRoZXNlIGxpbmVzIHRvIHlvdXIgLnZpbXJjOiA+CisJOnNldCB0X3RpPSB0X3RlPQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1Njcm9sbGluZyBpbiBJbnNlcnQgbW9kZQkJCQkqc2Nyb2xsLWluc2VydCoKKworSWYgeW91IGFyZSBpbiBpbnNlcnQgbW9kZSBhbmQgeW91IHdhbnQgdG8gc2VlIHNvbWV0aGluZyB0aGF0IGlzIGp1c3Qgb2ZmIHRoZQorc2NyZWVuLCB5b3UgY2FuIHVzZSBDVFJMLVggQ1RSTC1FIGFuZCBDVFJMLVggQ1RSTC1ZIHRvIHNjcm9sbCB0aGUgc2NyZWVuLgorCQkJCQkJfGlfQ1RSTC1YX0NUUkwtRXwKKworVG8gbWFrZSB0aGlzIGVhc2llciwgeW91IGNvdWxkIHVzZSB0aGVzZSBtYXBwaW5nczogPgorCTppbm9yZW1hcCA8Qy1FPiA8Qy1YPjxDLUU+CisJOmlub3JlbWFwIDxDLVk+IDxDLVg+PEMtWT4KKyhUeXBlIHRoaXMgbGl0ZXJhbGx5LCBtYWtlIHN1cmUgdGhlICc8JyBmbGFnIGlzIG5vdCBpbiAnY3BvcHRpb25zJykuCitZb3UgdGhlbiBsb3NlIHRoZSBhYmlsaXR5IHRvIGNvcHkgdGV4dCBmcm9tIHRoZSBsaW5lIGFib3ZlL2JlbG93IHRoZSBjdXJzb3IKK3xpX0NUUkwtRXwuCisKK0Fsc28gY29uc2lkZXIgc2V0dGluZyAnc2Nyb2xsb2ZmJyB0byBhIGxhcmdlciB2YWx1ZSwgc28gdGhhdCB5b3UgY2FuIGFsd2F5cyBzZWUKK3NvbWUgY29udGV4dCBhcm91bmQgdGhlIGN1cnNvci4gIElmICdzY3JvbGxvZmYnIGlzIGJpZ2dlciB0aGFuIGhhbGYgdGhlIHdpbmRvdworaGVpZ2h0LCB0aGUgY3Vyc29yIHdpbGwgYWx3YXlzIGJlIGluIHRoZSBtaWRkbGUgYW5kIHRoZSB0ZXh0IGlzIHNjcm9sbGVkIHdoZW4KK3RoZSBjdXJzb3IgaXMgbW92ZWQgdXAvZG93bi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTbW9vdGggc2Nyb2xsaW5nCQkJCQkqc2Nyb2xsLXNtb290aCoKKworSWYgeW91IGxpa2UgdGhlIHNjcm9sbGluZyB0byBnbyBhIGJpdCBzbW9vdGhlciwgeW91IGNhbiB1c2UgdGhlc2UgbWFwcGluZ3M6ID4KKwk6bWFwIDxDLVU+IDxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+PEMtWT48Qy1ZPjxDLVk+CisJOm1hcCA8Qy1EPiA8Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPjxDLUU+PEMtRT48Qy1FPgorCisoVHlwZSB0aGlzIGxpdGVyYWxseSwgbWFrZSBzdXJlIHRoZSAnPCcgZmxhZyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcnJlY3RpbmcgY29tbW9uIHR5cGluZyBtaXN0YWtlcwkJCSp0eXBlLW1pc3Rha2VzKgorCitXaGVuIHRoZXJlIGFyZSBhIGZldyB3b3JkcyB0aGF0IHlvdSBrZWVwIG9uIHR5cGluZyBpbiB0aGUgd3Jvbmcgd2F5LCBtYWtlCithYmJyZXZpYXRpb25zIHRoYXQgY29ycmVjdCB0aGVtLiAgRm9yIGV4YW1wbGU6ID4KKwk6YWIgdGVoIHRoZQorCTphYiBmcm8gZm9yCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ291bnRpbmcgd29yZHMsIGxpbmVzLCBldGMuCQkJCSpjb3VudC1pdGVtcyoKKworVG8gY291bnQgaG93IG9mdGVuIGFueSBwYXR0ZXJuIG9jY3VycyBpbiBhIGJ1ZmZlciwgc2V0ICdyZXBvcnQnIHRvIDAsIGFuZCB1c2UKK3RoZSBzdWJzdGl0dXRlIGNvbW1hbmQgdG8gcmVwbGFjZSB0aGUgcGF0dGVybiB3aXRoIGl0c2VsZi4gIFRoZSByZXBvcnRlZAorbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgaXMgdGhlIG51bWJlciBvZiBpdGVtcy4gIEV4YW1wbGVzOiA+CisKKwk6c2V0IHJlcG9ydD0wCisJOiVzLy4vJi9nCQljaGFyYWN0ZXJzCisJOiVzL1xpXCsvJi9nCQl3b3JkcworCTolcy9eCQkJbGluZXMKKwk6JXMvdGhlLyYvZwkJInRoZSIgYW55d2hlcmUKKwk6JXMvXDx0aGVcPi8mL2cJCSJ0aGUiIGFzIGEgd29yZAorCitZb3UgbWlnaHQgd2FudCB0byByZXNldCAnaGxzZWFyY2gnIG9yIGRvICI6bm9obHNlYXJjaCIuCisKK1RoaXMgZG9lcyBub3Qgd29yayBpZiB0aGUgJ21vZGlmaWFibGUnIG9wdGlvbiBpcyBvZmYuICBBbiBhbHRlcm5hdGl2ZSBpcyB1c2luZworfHZfZ19DVFJMLUd8IGluIFZpc3VhbCBtb2RlLgorCisJCQkJCQkJKmNvdW50LWJ5dGVzKgorSWYgeW91IHdhbnQgdG8gY291bnQgYnl0ZXMsIHlvdSBjYW4gdXNlIHRoaXM6CisKKwlWaXN1YWxseSBzZWxlY3QgdGhlIGNoYXJhY3RlcnMgKGJsb2NrIGlzIGFsc28gcG9zc2libGUpCisJVXNlICJ5IiB0byB5YW5rIHRoZSBjaGFyYWN0ZXJzCisJVXNlIHRoZSBzdHJsZW4oKSBmdW5jdGlvbjogPgorCQk6ZWNobyBzdHJsZW4oQCIpCitBIGxpbmUgYnJlYWsgaXMgY291bnRlZCBmb3Igb25lIGJ5dGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVzdG9yaW5nIHRoZSBjdXJzb3IgcG9zaXRpb24JCQkJKnJlc3RvcmUtcG9zaXRpb24qCisKK1NvbWV0aW1lcyB5b3Ugd2FudCB0byB3cml0ZSBhIG1hcHBpbmcgdGhhdCBtYWtlcyBhIGNoYW5nZSBzb21ld2hlcmUgaW4gdGhlCitmaWxlIGFuZCByZXN0b3JlcyB0aGUgY3Vyc29yIHBvc2l0aW9uLCB3aXRob3V0IHNjcm9sbGluZyB0aGUgdGV4dC4gIEZvcgorZXhhbXBsZSwgdG8gY2hhbmdlIHRoZSBkYXRlIG1hcmsgaW4gYSBmaWxlOiA+CisgICA6bWFwIDxGMj4gbXNIbXRnZy9MYXN0IFtjQ11oYW5nZTpccyovZSsxPENSPiJfRCI9c3RyZnRpbWUoIiVZICViICVkIik8Q1I+cCd0enRgcworCitCcmVha2luZyB1cCBzYXZpbmcgdGhlIHBvc2l0aW9uOgorCW1zCXN0b3JlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgJ3MnIG1hcmsKKwlICWdvIHRvIHRoZSBmaXJzdCBsaW5lIGluIHRoZSB3aW5kb3cKKwltdAlzdG9yZSB0aGlzIHBvc2l0aW9uIGluIHRoZSAndCcgbWFyaworCitCcmVha2luZyB1cCByZXN0b3JpbmcgdGhlIHBvc2l0aW9uOgorCSd0CWdvIHRvIHRoZSBsaW5lIHByZXZpb3VzbHkgYXQgdGhlIHRvcCBvZiB0aGUgd2luZG93CisJenQJc2Nyb2xsIHRvIG1vdmUgdGhpcyBsaW5lIHRvIHRoZSB0b3Agb2YgdGhlIHdpbmRvdworCWBzCWp1bXAgdG8gdGhlIG9yaWdpbmFsIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW5hbWluZyBmaWxlcwkJCQkJCSpyZW5hbWUtZmlsZXMqCisKK1NheSBJIGhhdmUgYSBkaXJlY3Rvcnkgd2l0aCB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHRoZW0gKGRpcmVjdG9yeSBwaWNrZWQgYXQKK3JhbmRvbSA6LSk6CisKK2J1ZmZlci5jCitjaGFyc2V0LmMKK2RpZ3JhcGguYworLi4uCisKK2FuZCBJIHdhbnQgdG8gcmVuYW1lICouYyAqLmJsYS4gIEknZCBkbyBpdCBsaWtlIHRoaXM6ID4KKworCSQgdmltCisJOnIhIGxzICouYworCTolcy9cKC4qXCkuYy9tdiAmIFwxLmJsYQorCTp3ICFzaAorCTpxIQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NwZWVkaW5nIHVwIGV4dGVybmFsIGNvbW1hbmRzCQkJCSpzcGVlZC11cCoKKworSW4gc29tZSBzaXR1YXRpb25zLCBleGVjdXRpb24gb2YgYW4gZXh0ZXJuYWwgY29tbWFuZCBjYW4gYmUgdmVyeSBzbG93LiAgVGhpcworY2FuIGFsc28gc2xvdyBkb3duIHdpbGRjYXJkIGV4cGFuc2lvbiBvbiBVbml4LiAgSGVyZSBhcmUgYSBmZXcgc3VnZ2VzdGlvbnMgdG8KK2luY3JlYXNlIHRoZSBzcGVlZC4KKworSWYgeW91ciAuY3NocmMgKG9yIG90aGVyIGZpbGUsIGRlcGVuZGluZyBvbiB0aGUgc2hlbGwgdXNlZCkgaXMgdmVyeSBsb25nLCB5b3UKK3Nob3VsZCBzZXBhcmF0ZSBpdCBpbnRvIGEgc2VjdGlvbiBmb3IgaW50ZXJhY3RpdmUgdXNlIGFuZCBhIHNlY3Rpb24gZm9yCitub24taW50ZXJhY3RpdmUgdXNlIChvZnRlbiBjYWxsZWQgc2Vjb25kYXJ5IHNoZWxscykuICBXaGVuIHlvdSBleGVjdXRlIGEKK2NvbW1hbmQgZnJvbSBWaW0gbGlrZSAiOiFscyIsIHlvdSBkbyBub3QgbmVlZCB0aGUgaW50ZXJhY3RpdmUgdGhpbmdzIChmb3IKK2V4YW1wbGUsIHNldHRpbmcgdGhlIHByb21wdCkuICBQdXQgdGhlIHN0dWZmIHRoYXQgaXMgbm90IG5lZWRlZCBhZnRlciB0aGVzZQorbGluZXM6ID4KKworCWlmICgkP3Byb21wdCA9PSAwKSB0aGVuCisJCWV4aXQgMAorCWVuZGlmCisKK0Fub3RoZXIgd2F5IGlzIHRvIGluY2x1ZGUgdGhlICItZiIgZmxhZyBpbiB0aGUgJ3NoZWxsJyBvcHRpb24sIGUuZy46ID4KKworCTpzZXQgc2hlbGw9Y3NoXCAtZgorCisodGhlIGJhY2tzbGFzaCBpcyBuZWVkZWQgdG8gaW5jbHVkZSB0aGUgc3BhY2UgaW4gdGhlIG9wdGlvbikuCitUaGlzIHdpbGwgbWFrZSBjc2ggY29tcGxldGVseSBza2lwIHRoZSB1c2Ugb2YgdGhlIC5jc2hyYyBmaWxlLiAgVGhpcyBtYXkgY2F1c2UKK3NvbWUgdGhpbmdzIHRvIHN0b3Agd29ya2luZyB0aG91Z2guCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVXNlZnVsIG1hcHBpbmdzCQkJCQkJKnVzZWZ1bC1tYXBwaW5ncyoKKworSGVyZSBhcmUgYSBmZXcgbWFwcGluZ3MgdGhhdCBzb21lIHBlb3BsZSBsaWtlIHRvIHVzZS4KKworCQkJCQkJCSptYXAtYmFja3RpY2sqICA+CisJOm1hcCAnIGAKK01ha2UgdGhlIHNpbmdsZSBxdW90ZSB3b3JrIGxpa2UgYSBiYWNrdGljay4gIFB1dHMgdGhlIGN1cnNvciBvbiB0aGUgY29sdW1uIG9mCithIG1hcmssIGluc3RlYWQgb2YgZ29pbmcgdG8gdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUuCisKKwkJCQkJCQkqZW1hY3Mta2V5cyoKK0ZvciBFbWFjcy1zdHlsZSBlZGl0aW5nIG9uIHRoZSBjb21tYW5kLWxpbmU6ID4KKwkiIHN0YXJ0IG9mIGxpbmUKKwk6Y25vcmVtYXAgPEMtQT4JCTxIb21lPgorCSIgYmFjayBvbmUgY2hhcmFjdGVyCisJOmNub3JlbWFwIDxDLUI+CQk8TGVmdD4KKwkiIGRlbGV0ZSBjaGFyYWN0ZXIgdW5kZXIgY3Vyc29yCisJOmNub3JlbWFwIDxDLUQ+CQk8RGVsPgorCSIgZW5kIG9mIGxpbmUKKwk6Y25vcmVtYXAgPEMtRT4JCTxFbmQ+CisJIiBmb3J3YXJkIG9uZSBjaGFyYWN0ZXIKKwk6Y25vcmVtYXAgPEMtRj4JCTxSaWdodD4KKwkiIHJlY2FsbCBuZXdlciBjb21tYW5kLWxpbmUKKwk6Y25vcmVtYXAgPEMtTj4JCTxEb3duPgorCSIgcmVjYWxsIHByZXZpb3VzIChvbGRlcikgY29tbWFuZC1saW5lCisJOmNub3JlbWFwIDxDLVA+CQk8VXA+CisJIiBiYWNrIG9uZSB3b3JkCisJOmNub3JlbWFwIDxFc2M+PEMtQj4JPFMtTGVmdD4KKwkiIGZvcndhcmQgb25lIHdvcmQKKwk6Y25vcmVtYXAgPEVzYz48Qy1GPgk8Uy1SaWdodD4KKworTk9URTogVGhpcyByZXF1aXJlcyB0aGF0IHRoZSAnPCcgZmxhZyBpcyBleGNsdWRlZCBmcm9tICdjcG9wdGlvbnMnLiB8PD58CisKKwkJCQkJCQkqZm9ybWF0LWJ1bGxldC1saXN0KgorVGhpcyBtYXBwaW5nIHdpbGwgZm9ybWF0IGFueSBidWxsZXQgbGlzdC4gIEl0IHJlcXVpcmVzIHRoYXQgdGhlcmUgaXMgYW4gZW1wdHkKK2xpbmUgYWJvdmUgYW5kIGJlbG93IGVhY2ggbGlzdCBlbnRyeS4gIFRoZSBleHByZXNzaW9uIGNvbW1hbmRzIGFyZSB1c2VkIHRvCitiZSBhYmxlIHRvIGdpdmUgY29tbWVudHMgdG8gdGhlIHBhcnRzIG9mIHRoZSBtYXBwaW5nLiA+CisKKwk6bGV0IG0gPSAgICAgIjptYXAgX2YgIDpzZXQgYWk8Q1I+IiAgICAiIG5lZWQgJ2F1dG9pbmRlbnQnIHNldAorCTpsZXQgbSA9IG0gLiAie088RXNjPiIJCSAgICAgICIgYWRkIGVtcHR5IGxpbmUgYWJvdmUgaXRlbQorCTpsZXQgbSA9IG0gLiAifXspXlciCQkgICAgICAiIG1vdmUgdG8gdGV4dCBhZnRlciBidWxsZXQKKwk6bGV0IG0gPSBtIC4gImkgICAgIDxDUj4gICAgIDxFc2M+IiAgICAiIGFkZCBzcGFjZSBmb3IgaW5kZW50CisJOmxldCBtID0gbSAuICJncX0iCQkgICAgICAiIGZvcm1hdCB0ZXh0IGFmdGVyIHRoZSBidWxsZXQKKwk6bGV0IG0gPSBtIC4gIntkZCIJCSAgICAgICIgcmVtb3ZlIHRoZSBlbXB0eSBsaW5lCisJOmxldCBtID0gbSAuICI1bERKIgkJICAgICAgIiBwdXQgdGV4dCBhZnRlciBidWxsZXQKKwk6ZXhlY3V0ZSBtCQkJICAgICAgfCIgZGVmaW5lIHRoZSBtYXBwaW5nCisKKyg8PiBub3RhdGlvbiB8PD58LiAgTm90ZSB0aGF0IHRoaXMgaXMgYWxsIHR5cGVkIGxpdGVyYWxseS4gIF5XIGlzICJeIiAiVyIsIG5vdAorQ1RSTC1XLiAgWW91IGNhbiBjb3B5L3Bhc3RlIHRoaXMgaW50byBWaW0gaWYgJzwnIGlzIG5vdCBpbmNsdWRlZCBpbgorJ2Nwb3B0aW9ucycpCisKK05vdGUgdGhhdCB0aGUgbGFzdCBjb21tZW50IHN0YXJ0cyB3aXRoIHwiLCBiZWNhdXNlIHRoZSAiOmV4ZWN1dGUiIGNvbW1hbmQKK2RvZXNuJ3QgYWNjZXB0IGEgY29tbWVudCBkaXJlY3RseS4KKworWW91IGFsc28gbmVlZCB0byBzZXQgJ3RleHR3aWR0aCcgdG8gYSBub24temVybyB2YWx1ZSwgZS5nLiwgPgorCTpzZXQgdHc9NzAKKworQSBtYXBwaW5nIHRoYXQgZG9lcyBhYm91dCB0aGUgc2FtZSwgYnV0IHRha2VzIHRoZSBpbmRlbnQgZm9yIHRoZSBsaXN0IGZyb20gdGhlCitmaXJzdCBsaW5lIChOb3RlOiB0aGlzIG1hcHBpbmcgaXMgYSBzaW5nbGUgbG9uZyBsaW5lIHdpdGggYSBsb3Qgb2Ygc3BhY2VzKTogPgorCTptYXAgX2YgOnNldCBhaTxDUj59e2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVzYz5XV21ta0RgbWk8Q1I+PEVzYz5ra2RkcEpncX0nbUpPPEVzYz5qCis8CisJCQkJCQkJKmNvbGxhcHNlKgorVGhlc2UgdHdvIG1hcHBpbmdzIHJlZHVjZSBhIHNlcXVlbmNlIG9mIGVtcHR5ICg7Yikgb3IgYmxhbmsgKDtuKSBsaW5lcyBpbnRvIGEKK3NpbmdsZSBsaW5lID4KKyAgICA6bWFwIDtiICAgR29aPEVzYz46Zy9eJC8uLC8uLy1qPENSPkdkZAorICAgIDptYXAgO24gICBHb1o8RXNjPjpnL15bIDxUYWI+XSokLy4sL1teIDxUYWI+XS8tajxDUj5HZGQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb21wcmVzc2luZyB0aGUgaGVscCBmaWxlcwkJCQkqZ3ppcC1oZWxwZmlsZSoKKworRm9yIHRob3NlIG9mIHlvdSB3aG8gYXJlIHJlYWxseSBzaG9ydCBvbiBkaXNrIHNwYWNlLCB5b3UgY2FuIGNvbXByZXNzIHRoZSBoZWxwCitmaWxlcyBhbmQgc3RpbGwgYmUgYWJsZSB0byB2aWV3IHRoZW0gd2l0aCBWaW0uICBUaGlzIG1ha2VzIGFjY2Vzc2luZyB0aGUgaGVscAorZmlsZXMgYSBiaXQgc2xvd2VyIGFuZCByZXF1aXJlcyB0aGUgImd6aXAiIHByb2dyYW0uCisKKygxKSBDb21wcmVzcyBhbGwgdGhlIGhlbHAgZmlsZXM6ICJnemlwIGRvYy8qLnR4dCIuCisKKygyKSBFZGl0ICJkb2MvdGFncyIgYW5kIGNoYW5nZSB0aGUgIi50eHQiIHRvICIudHh0Lmd6IjogPgorCTolcz1cKFx0LipcLnR4dFwpXHQ9XDEuZ3pcdD0KKworKDMpIEFkZCB0aGlzIGxpbmUgdG8geW91ciB2aW1yYzogPgorCXNldCBoZWxwZmlsZT17ZGlybmFtZX0vaGVscC50eHQuZ3oKKworV2hlcmUge2Rpcm5hbWV9IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGhlbHAgZmlsZXMgYXJlLiAgVGhlIHxnemlwfCBwbHVnaW4KK3dpbGwgdGFrZSBjYXJlIG9mIGRlY29tcHJlc3NpbmcgdGhlIGZpbGVzLgorWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgJFZJTVJVTlRJTUUgaXMgc2V0IHRvIHdoZXJlIHRoZSBvdGhlciBWaW0gZmlsZXMgYXJlLAord2hlbiB0aGV5IGFyZSBub3QgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgdGhlIGNvbXByZXNzZWQgImRvYyIgZGlyZWN0b3J5LiAgU2VlCit8JFZJTVJVTlRJTUV8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0V4ZWN1dGluZyBzaGVsbCBjb21tYW5kcyBpbiBhIHdpbmRvdwkJCSpzaGVsbC13aW5kb3cqCisKK1RoZXJlIGhhdmUgYmVlbiBxdWVzdGlvbnMgZm9yIHRoZSBwb3NzaWJpbGl0eSB0byBleGVjdXRlIGEgc2hlbGwgaW4gYSB3aW5kb3cKK2luc2lkZSBWaW0uICBUaGUgYW5zd2VyOiB5b3UgY2FuJ3QhICBJbmNsdWRpbmcgdGhpcyB3b3VsZCBhZGQgYSBsb3Qgb2YgY29kZSB0bworVmltLCB3aGljaCBpcyBhIGdvb2QgcmVhc29uIG5vdCB0byBkbyB0aGlzLiAgQWZ0ZXIgYWxsLCBWaW0gaXMgYW4gZWRpdG9yLCBpdAoraXMgbm90IHN1cHBvc2VkIHRvIGRvIG5vbi1lZGl0aW5nIHRhc2tzLiAgSG93ZXZlciwgdG8gZ2V0IHNvbWV0aGluZyBsaWtlIHRoaXMsCit5b3UgbWlnaHQgdHJ5IHNwbGl0dGluZyB5b3VyIHRlcm1pbmFsIHNjcmVlbiBvciBkaXNwbGF5IHdpbmRvdyB3aXRoIHRoZQorInNwbGl0dnQiIHByb2dyYW0uICBZb3UgY2FuIHByb2JhYmx5IGZpbmQgaXQgb24gc29tZSBmdHAgc2VydmVyLiAgVGhlIHBlcnNvbgordGhhdCBrbm93cyBtb3JlIGFib3V0IHRoaXMgaXMgU2FtIExhbnRpbmdhIDxzbG91a2VuQGNzLnVjZGF2aXMuZWR1Pi4KK0FuIGFsdGVybmF0aXZlIGlzIHRoZSAid2luZG93IiBjb21tYW5kLCBmb3VuZCBvbiBCU0QgVW5peCBzeXN0ZW1zLCB3aGljaAorc3VwcG9ydHMgbXVsdGlwbGUgb3ZlcmxhcHBlZCB3aW5kb3dzLiAgT3IgdGhlICJzY3JlZW4iIHByb2dyYW0sIGZvdW5kIGF0Cit3d3cudW5pLWVybGFuZ2VuLmRlLCB3aGljaCBzdXBwb3J0cyBhIHN0YWNrIG9mIHdpbmRvd3MuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSGV4IGVkaXRpbmcJCQkJCSpoZXgtZWRpdGluZyogKnVzaW5nLXh4ZCoKKworU2VlIHNlY3Rpb24gfDIzLjR8IG9mIHRoZSB1c2VyIG1hbnVhbC4KKworSWYgb25lIGhhcyBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uIHRoYXQgb25lIHVzZXMgZm9yIGJpbmFyeSBmaWxlcyAoc3VjaCBhcyBleGUsCitiaW4sIGV0YyksIHlvdSBtYXkgZmluZCBpdCBoZWxwZnVsIHRvIGF1dG9tYXRlIHRoZSBwcm9jZXNzIHdpdGggdGhlIGZvbGxvd2luZworYml0IG9mIGF1dG9jbWRzIGZvciB5b3VyIDwudmltcmM+LiAgQ2hhbmdlIHRoYXQgIiouYmluIiB0byB3aGF0ZXZlcgorY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXh0ZW5zaW9uKHMpIHlvdSBmaW5kIHlvdXJzZWxmIHdhbnRpbmcgdG8gZWRpdDogPgorCisJIiB2aW0gLWIgOiBlZGl0IGJpbmFyeSB1c2luZyB4eGQtZm9ybWF0IQorCWF1Z3JvdXAgQmluYXJ5CisJICBhdSEKKwkgIGF1IEJ1ZlJlYWRQcmUgICouYmluIGxldCAmYmluPTEKKwkgIGF1IEJ1ZlJlYWRQb3N0ICouYmluIGlmICZiaW4gfCAlIXh4ZAorCSAgYXUgQnVmUmVhZFBvc3QgKi5iaW4gc2V0IGZ0PXh4ZCB8IGVuZGlmCisJICBhdSBCdWZXcml0ZVByZSAqLmJpbiBpZiAmYmluIHwgJSF4eGQgLXIKKwkgIGF1IEJ1ZldyaXRlUHJlICouYmluIGVuZGlmCisJICBhdSBCdWZXcml0ZVBvc3QgKi5iaW4gaWYgJmJpbiB8ICUheHhkCisJICBhdSBCdWZXcml0ZVBvc3QgKi5iaW4gc2V0IG5vbW9kIHwgZW5kaWYKKwlhdWdyb3VwIEVORAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VzaW5nIDw+IG5vdGF0aW9uIGluIGF1dG9jb21tYW5kcwkJCSphdXRvY21kLTw+KgorCitUaGUgPD4gbm90YXRpb24gaXMgbm90IHJlY29nbml6ZWQgaW4gdGhlIGFyZ3VtZW50IG9mIGFuIDphdXRvY21kLiAgVG8gYXZvaWQKK2hhdmluZyB0byB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzLCB5b3UgY291bGQgdXNlIGEgc2VsZi1kZXN0cm95aW5nIG1hcHBpbmcgdG8KK2dldCB0aGUgPD4gbm90YXRpb24gYW5kIHRoZW4gY2FsbCB0aGUgbWFwcGluZyBmcm9tIHRoZSBhdXRvY21kLiAgRXhhbXBsZToKKworCQkJCQkJKm1hcC1zZWxmLWRlc3Ryb3kqICA+CisgIiBUaGlzIGlzIGZvciBhdXRvbWF0aWNhbGx5IGFkZGluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB0aGUgbWVudSBsaXN0LgorICIgSXQgdXNlcyBhIHNlbGYtZGVzdHJveWluZyBtYXBwaW5nIQorICIgMS4gdXNlIGEgbGluZSBpbiB0aGUgYnVmZmVyIHRvIGNvbnZlcnQgdGhlICdkb3RzJyBpbiB0aGUgZmlsZSBuYW1lIHRvIFwuCisgIiAyLiBzdG9yZSB0aGF0IGluIHJlZ2lzdGVyICciJworICIgMy4gYWRkIHRoYXQgbmFtZSB0byB0aGUgQnVmZmVycyBtZW51IGxpc3QKKyAiIFdBUk5JTkc6IHRoaXMgZG9lcyBoYXZlIHNvbWUgc2lkZSBlZmZlY3RzLCBsaWtlIG92ZXJ3cml0aW5nIHRoZQorICIgY3VycmVudCByZWdpc3RlciBjb250ZW50cyBhbmQgcmVtb3ZpbmcgYW55IG1hcHBpbmcgZm9yIHRoZSAiaSIgY29tbWFuZC4KKyAiCisgYXV0b2NtZCBCdWZOZXdGaWxlLEJ1ZlJlYWRQcmUgKiBubWFwIGkgOm51bm1hcCBpPENSPk88Qy1SPiU8RXNjPjouZy9cLi9zL1wuL1xcLi9nPENSPjAiOXkkdTptZW51IEJ1ZmZlcnMuPEMtUj45IDpidWZmZXIgPEMtUj4lPEMtVj48Q1I+PENSPgorIGF1dG9jbWQgQnVmTmV3RmlsZSxCdWZSZWFkUHJlICogbm9ybWFsIGkKKworQW5vdGhlciBtZXRob2QsIHBlcmhhcHMgYmV0dGVyLCBpcyB0byB1c2UgdGhlICI6ZXhlY3V0ZSIgY29tbWFuZC4gIEluIHRoZQorc3RyaW5nIHlvdSBjYW4gdXNlIHRoZSA8PiBub3RhdGlvbiBieSBwcmVjZWRpbmcgaXQgd2l0aCBhIGJhY2tzbGFzaC4gIERvbid0Citmb3JnZXQgdG8gZG91YmxlIHRoZSBudW1iZXIgb2YgZXhpc3RpbmcgYmFja3NsYXNoZXMgYW5kIHB1dCBhIGJhY2tzbGFzaCBiZWZvcmUKKyciJy4KKz4KKyAgYXV0b2NtZCBCdWZOZXdGaWxlLEJ1ZlJlYWRQcmUgKiBleGUgIm5vcm1hbCBPXDxDLVI+JVw8RXNjPjouZy9cXC4vcy9cXC4vXFxcXC4vZ1w8Q1I+MFwiOXkkdTptZW51IEJ1ZmZlcnMuXDxDLVI+OSA6YnVmZmVyIFw8Qy1SPiVcPEMtVj5cPENSPlw8Q1I+IgorCitGb3IgYSByZWFsIGJ1ZmZlciBtZW51LCB1c2VyIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCAoc2VlIHw6ZnVuY3Rpb258KSwgYnV0Cit0aGVuIHRoZSA8PiBub3RhdGlvbiBpc24ndCB1c2VkLCB3aGljaCBkZWZlYXRzIHVzaW5nIGl0IGFzIGFuIGV4YW1wbGUgaGVyZS4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3RvZG8udHh0IGIvcnVudGltZS9kb2MvdG9kby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiOTU3NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3RvZG8udHh0CkBAIC0wLDAgKzEsMzQ0MSBAQAorKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEp1biAxMworCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCQkJICAgICAgVE9ETyBsaXN0IGZvciBWaW0JCSp0b2RvKgorCitUaGlzIGlzIGEgdmVlZWVyeSBsb25nIGxpc3Qgb2Yga25vd24gYnVncywgY3VycmVudCB3b3JrIGFuZCBkZXNpcmVkCitpbXByb3ZlbWVudHMuICBUbyBtYWtlIGl0IGEgbGl0dGxlIGJpdCBhY2Nlc3NpYmxlLCB0aGUgaXRlbXMgYXJlIGdyb3VwZWQgYnkKK3N1YmplY3QuICBJbiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBsaW5lIGEgY2xhc3NpZmljYXRpb24gaXMgdXNlZCB0byBiZSBhYmxlCit0byBsb29rIGZvciAidGhlIG5leHQgdGhpbmcgdG8gZG8iOgorCitQcmlvcml0eSBjbGFzc2lmaWNhdGlvbjoKKzkgICBuZXh0IHBvaW50IHJlbGVhc2UKKzggICBuZXh0IHJlbGVhc2UKKzcgICBhcyBzb29uIGFzIHBvc3NpYmxlCis2ICAgc29vbgorNSAgIHNob3VsZCBiZSBpbmNsdWRlZAorNCAgIG5pY2UgdG8gaGF2ZQorMyAgIGNvbnNpZGVyIGluY2x1ZGluZworMiAgIG1heWJlIG5vdAorMSAgIHByb2JhYmx5IG5vdAorLSAgIHVuY2xhc3NpZmllZAorCisJCQkJCQkgICAgKnZvdGVzLWZvci1jaGFuZ2VzKgorU2VlIHxkZXZlbG9wLnR4dHwgZm9yIGRldmVsb3BtZW50IHBsYW5zLiAgWW91IGNhbiB2b3RlIGZvciB3aGljaCBpdGVtcyBzaG91bGQKK2JlIHdvcmtlZCBvbiwgYnV0IG9ubHkgaWYgeW91IHNwb25zb3IgVmltIGRldmVsb3BtZW50LiAgU2VlIHxzcG9uc29yfC4KKworCQkJCQkJCSprbm93bi1idWdzKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0gS25vd24gYnVncyBhbmQgY3VycmVudCB3b3JrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dUSzI6IGZvbnQgZGlhbG9nIHVzZXMgZm9udCBzaXplIHplcm8gd2hlbiAnZ3VpZm9udCcgaXMgIkNvdXJpZXIiLiAgUGF0Y2ggZnJvbQorWWFzdWhpcm8gTWF0c3Vtb3RvLCAyMDA0IEp1bmUgOC4KKworUHl0aG9uIGluZGVudDogIyBhc2VyOiBzdGlsbCBhZGRzIGV4dHJhIGluZGVudC4KKworCitGb3IgdmVyc2lvbiA3LjA6CistICAgSW5jbHVkZSBtYW55IFBBVENIRVM6CisgICAgLSAgIEluY2x1ZGUgdGhlIGt2aW0gcGF0Y2guIGh0dHA6Ly9mcmVlbnV4Lm9yZy92aW0vIChNaWNrYWVsIE1hcmNoYW5kKQorCURvIG5vdCBhZGQgUXRvcGlhIHlldCwgaXQgZG9lc24ndCB3b3JrIHZlcnkgd2VsbC4KKy0gICBuZXcgREFUQSBUWVBFUzogbGlzdHMsIGRpY3Rpb25hcmllcyBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcy4KKyAgICBBZGQgdHlwZSBjaGVja2luZz8gIFNlZSB+L3ZpbS9pZGVhcy50eHQuCistICAgQWRkIFNQRUxMQ0hFQ0tFUiwgd2l0aCBlYXN5IHRvIGFkZCBzdXBwb3J0IGZvciBtYW55IGxhbmd1YWdlcy4KKy0gICBSRUZBQ1RPUklORzogVGhlIG1haW4oKSBmdW5jdGlvbiBpcyB2ZXJ5IGxvbmcuICBNb3ZlIHBhcnRzIHRvIHNlcGFyYXRlCisgICAgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGxvb3BzLiAgSWRlYXMgZnJvbSBXYWx0ZXIgQnJpc2NvZSAoMjAwMyBBcHIgMywgMjAwNAorICAgIEZlYiA5KS4KKy0gICBTdG9yZSBtZXNzYWdlcyB0byBhbGxvdyBTQ1JPTExJTkcgQkFDSyBmb3IgYWxsIGNvbW1hbmRzLiAgQW5kIG90aGVyICJsZXNzIgorICAgIGxpa2UgY29tbWFuZHMuCistICAgIklOVEVMTElTRU5TRSIuICBGaXJzdCBjbGVhbnVwIHRoZSBJbnNlcnQtbW9kZSBjb21wbGV0aW9uLgorCWh0dHA6Ly93d3cudmltLm9yZy9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTc0NworCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvaW5zZW52aW0KKy0gICBQRVJTSVNURU5UIFVORE86IHN0b3JlIHVuZG8gaW4gYSBmaWxlLgorICAgIFN1cHBvcnQgbXVsdGlwbGUgdGhyZWFkcy4gIFNob3cgdGhlIGxpc3Qgb2YgY2hhbmdlcyBpbiBhIHdpbmRvdyB0byBiZSBhYmxlCisgICAgdG8gc2VsZWN0IGEgdmVyc2lvbi4KKzcgICBTV0FQIEZJTEUgQ0hBTkdFOiBXaGVuIGEgZG9zIGZvcm1hdCBmaWxlIHdhcyBlZGl0ZWQgd2l0aCAiOmUgKytmZj11bml4IiwKKyAgICBWaW0gaXMga2lsbGVkIGFuZCB0cnlpbmcgdG8gcmVjb3ZlciB0aGUgZmlsZSwgJ2ZmJyB3aWxsIGJlIGRvcy4gIFNhbWUgZm9yCisgICAgbm9uLWRlZmF1bHQgZmlsZWVuY29kaW5nLiAgKE1pcm9zbGF3IERvYnJ6YW5za2ktTmV1bWFubiwgSnVsIDE3KQorICAgIFNob3VsZCBzdG9yZSB0aGUgdmFsdWVzIGluIGJsb2NrIDAgb2YgdGhlIHN3YXAgZmlsZSwgYnV0IHRoYXQgaXMgYW4KKyAgICBpbmNvbXBhdGlibGUgY2hhbmdlLgorNyAgIFN1cHBvcnQgV0lORE9XIFRBQlMuICBXb3JrcyBsaWtlIHNldmVyYWwgcGFnZXMsIGVhY2ggd2l0aCB0aGVpciBvd24KKyAgICBzcGxpdCB3aW5kb3dzLiAgUGF0Y2ggZm9yIEdUSyAxLjIgZnJvbSBDaHJpc3RpYW4gTWljaG9uLCAyMDA0IEphbiA2LgorICAgIEFsc28gZm9yIHRoZSBjb25zb2xlIQorLSAgIEVNQkVERElORzogTWFrZSBpdCBwb3NzaWJsZSB0byBydW4gVmltIGluc2lkZSBhIHdpbmRvdyBvZiBhbm90aGVyIHByb2dyYW0uCisgICAgRm9yIFh3aW5kb3dzIHRoaXMgY2FuIGJlIGRvbmUgd2l0aCBYUmVwYXJlbnRXaW5kb3coKS4KKyAgICBGb3IgR1RLIE5laWwgQmlyZCBoYXMgYSBwYXRjaCB0byB1c2UgVmltIGxpa2UgYSB3aWRnZXQuCistICAgQWRkIENPTFVNTiBOVU1CRVJTIHRvICI6IiBjb21tYW5kcyAiOmxpbmUxLGxpbmUyW2NvbDEsY29sMl1jbWQiLiAgQmxvY2sKKyAgICBjYW4gYmUgc2VsZWN0ZWQgd2l0aCBDVFJMLVYuICBBbGxvdyAnJCcgKGVuZCBvZiBsaW5lKSBmb3IgY29sMi4KKy0gICBBZGQgREVCVUdHRVIgSU5URVJGQUNFLiAgSW1wbGVtZW50YXRpb24gZm9yIGdkYiBieSBYYXZpZXIgZGUgR2F5ZSwKKyAgICBhc3Npc3RlZCBieSBNaWtvbGFqIE1hY2hvd3NraS4gIFNob3VsZCB3b3JrIGxpa2UgYW4gSURFLiAgVHJ5IHRvIGtlZXAgaXQKKyAgICBnZW5lcmljLiAgQWxzbyBmb3VuZCBoZXJlOiBodHRwOi8vc2thd2luYS5ldS5vcmcvbWlrb2xhai92aW1nZGIKKyAgICBUbyBiZSBhYmxlIHRvIHN0YXJ0IHRoZSBkZWJ1Z2dlciBmcm9tIGluc2lkZSBWaW06IEZvciBHVUkgcnVuIGEgcHJvZ3JhbQorICAgIHdpdGggYSBuZXRiZWFucyBjb25uZWN0aW9uOyBmb3IgY29uc29sZTogc3RhcnQgYSBwcm9ncmFtIHRoYXQgc3BsaXRzIHRoZQorICAgIHRlcm1pbmFsLCBydW5zIHRoZSBkZWJ1Z2dlciBpbiBvbmUgd2luZG93IGFuZCByZWNvbm5lY3QgVmltIEkvTyB0byB0aGUKKyAgICBvdGhlciB3aW5kb3cuCisgICAgV2lzaGVzIGZvciBOZXRCZWFucyBjb21tYW5kczoKKyAgICAtIG1ha2UgaXQgcG9zc2libGUgdG8gaGF2ZSAnZGVmaW5lQW5ub1R5cGUnIGFsc28gaGFuZGxlIHRlcm1pbmFsIGNvbG9ycy4KKyAgICAtIHNlbmQgJ2JhbGxvb25UZXh0JyBldmVudHMgZm9yIHRoZSBjdXJzb3IgcG9zaXRpb24gKHVzaW5nIEN1cnNvckhvbGQgPykKKyAgICAgIGluIHRlcm1pbmFsIG1vZGUuCistICAgU1RJQ0tZIENVUlNPUjogQWRkIGEgd2F5IG9mIHNjcm9sbGluZyB0aGF0IGxlYXZlcyB0aGUgY3Vyc29yIHdoZXJlIGl0IGlzLgorICAgIEVzcGVjaWFsbHkgd2hlbiB1c2luZyB0aGUgc2Nyb2xsYmFyLiAgVHlwaW5nIGEgY3Vyc29yLW1vdmVtZW50IGNvbW1hbmQKKyAgICBzY3JvbGxzIGJhY2sgdG8gd2hlcmUgdGhlIGN1cnNvciBpcy4KKworCitWaSBpbmNvbXBhdGliaWxpdHk6Cis4ICAgV2l0aCB1bmRvL3JlZG8gb25seSBtYXJrcyBpbiB0aGUgY2hhbmdlZCBsaW5lcyBzaG91bGQgYmUgY2hhbmdlZC4gIE90aGVyCisgICAgbWFya3Mgc2hvdWxkIGJlIGtlcHQuICBWaSBrZWVwcyBlYWNoIG1hcmsgYXQgdGhlIHNhbWUgdGV4dCwgZXZlbiB3aGVuIGl0CisgICAgaXMgZGVsZXRlZCBvciByZXN0b3JlZC4gKFdlYmIpCisgICAgQWxzbzogQSBtYXJrIGlzIGxvc3QgYWZ0ZXI6IG1ha2UgY2hhbmdlLCB1bmRvLCByZWRvIGFuZCB1bmRvLgorICAgIEV4YW1wbGU6ICJ7ZCcnIiB0aGVuICJ1IiB0aGVuICJkJyciOiBkZWxldGVzIGFuIGV4dHJhIGxpbmUsIGJlY2F1c2UgdGhlICcnCisgICAgcG9zaXRpb24gaXMgb25lIGxpbmUgZG93bi4gKFZlc2VsaW5vdmljKQorOCAgICI6Y2hhbmdlIiBpbiBhIHNpbmdsZS1saW5lIGZpbGUgYWRkcyBhbiBlbXB0eSBsaW5lLiBXaGVuIHRoZSBmaWxlIHVzZWQgdG8KKyAgICBiZSBsb25nZXIgYSAifiIgbGluZSBpcyBkaXNwbGF5ZWQsIGJ1dCB0aGVyZSByZWFsbHkgaXMgYW4gZW1wdHkgbGluZS4KKyAgICAoSGFha29uIFJpaXNlciwgMjAwMyBEZWMgMyBhbmQgRGVjIDE2KQorOCAgICI6YXBwZW5kIiBhbmQgIjppbnNlcnQiIGluIGFuIGVtcHR5IGZpbGUgYWRkIGFuIGV4dHJhIGVtcHR5IGxpbmUuIChIYWFrb24KKyAgICBSaWlzZXIsIDIwMDMgRGVjIDMpICBUZXN0IGZvciBNTF9FTVBUWS4KKzggICBXaGVuIHN0ZGluIGlzIG5vdCBhIHR0eSwgYW5kIFZpbSByZWFkcyBjb21tYW5kcyBmcm9tIGl0LCBhbiBlcnJvciBzaG91bGQKKyAgICBtYWtlIFZpbSBleGl0LgorNyAgIFVuaXggVmltIChub3QgZ3ZpbSk6IFR5cGluZyBDVFJMLUMgaW4gRXggbW9kZSBzaG91bGQgZmluaXNoIHRoZSBsaW5lCisgICAgKGN1cnJlbnRseSB5b3UgY2FuIGNvbnRpbnVlIHR5cGluZywgYnV0IGl0J3MgdHJ1bmNhdGVkIGxhdGVyIGFueXdheSkuCisgICAgUmVxdWlyZXMgYSB3YXkgdG8gbWFrZSBDVFJMLUMgaW50ZXJydXB0IHNlbGVjdCgpIHdoZW4gaW4gY29va2VkIGlucHV0LgorOCAgIFdoZW4gbG9hZGluZyBhIGZpbGUgaW4gdGhlIC5leHJjLCBWaSBsb2FkcyB0aGUgYXJndW1lbnQgYW55d2F5LiAgVmltIHNraXBzCisgICAgbG9hZGluZyB0aGUgYXJndW1lbnQgaWYgdGhlcmUgaXMgYSBmaWxlIGFscmVhZHkuICBXaGVuIG5vIGZpbGUgYXJndW1lbnQKKyAgICBnaXZlbiwgVmkgc3RhcnRzIHdpdGggYW4gZW1wdHkgYnVmZmVyLCBWaW0ga2VlcHMgdGhlIGxvYWRlZCBmaWxlLiAoQmVhcmRlZCkKKzYgICBJbiBJbnNlcnQgbW9kZSwgd2hlbiB1c2luZyA8QlM+IG9yIDxEZWw+LCBkb24ndCB3aXBlIG91dCB0aGUgdGV4dCwgYnV0CisgICAgb25seSBtb3ZlIGJhY2sgdGhlIGN1cnNvci4JQmVoYXZlcyBsaWtlICckJyBpbiAnY3BvcHRpb25zJy4gIFVzZSBhIGZsYWcKKyAgICBpbiAnY3BvcHRpb25zJyB0byBzd2l0Y2ggdGhpcyBvbi9vZmYuCis4ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSB3aGljaCBpcyBhIHN5bWJvbGljIGxpbmssIGFuZCB0aGVuIG9wZW5pbmcgYW5vdGhlcgorICAgIHN5bWJvbGljIGxpbmsgb24gdGhlIHNhbWUgZmlsZSwgVmltIHVzZXMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IG9uZS4KKyAgICBBZGp1c3QgdGhlIGZpbGUgbmFtZSBpbiB0aGUgYnVmZmVyIHRvIHRoZSBsYXN0IG9uZSB1c2VkPyAgVXNlIHNldmVyYWwgZmlsZQorICAgIG5hbWVzIGluIG9uZSBidWZmZXI/Pz8KKyAgICBBbHNvOiBXaGVuIGZpcnN0IGVkaXRpbmcgZmlsZSAidGVzdCIsIHdoaWNoIGlzIHN5bWxpbmsgdG8gInRlc3QyIiwgYW5kCisgICAgdGhlbiBlZGl0aW5nICJ0ZXN0MiIsIHlvdSBlbmQgdXAgZWRpdGluZyBidWZmZXIgInRlc3QiIGFnYWluLiAgSXQncyBub3QKKyAgICBsb2dpY2FsIHRoYXQgdGhlIG5hbWUgdGhhdCB3YXMgZmlyc3QgdXNlZCBzdGlja3Mgd2l0aCB0aGUgYnVmZmVyLgorNyAgIFRoZSAiOnVuZG8iIGNvbW1hbmQgd29ya3MgZGlmZmVyZW50bHkgaW4gRXggbW9kZS4gIEVkaXQgYSBmaWxlLCBtYWtlIHNvbWUKKyAgICBjaGFuZ2VzLCAiUSIsICJ1bmRvIiBhbmQgX2FsbF8gY2hhbmdlcyBhcmUgdW5kb25lLCBsaWtlIHRoZSAiOnZpc3VhbCIKKyAgICBjb21tYW5kIHdhcyBvbmUgY29tbWFuZC4KKzcgICBUaGUgIjptYXAiIGNvbW1hbmQgb3V0cHV0IG92ZXJ3cml0ZXMgdGhlIGNvbW1hbmQuICBQZXJoYXBzIGl0IHNob3VsZCBrZWVwCisgICAgdGhlICI6bWFwIiB3aGVuIGl0J3MgdXNlZCB3aXRob3V0IGFyZ3VtZW50cz8KKzcgICBDVFJMLUwgaXMgbm90IHRoZSBlbmQgb2YgYSBzZWN0aW9uPyAgSXQgaXMgZm9yIFBvc2l4ISAgTWFrZSBpdCBhbiBvcHRpb24uCis3ICAgSW1wbGVtZW50ICdwcm9tcHQnIG9wdGlvbi4JSW5pdCB0byBvZmYgd2hlbiBzdGRpbiBpcyBub3QgYSB0dHkuCis3ICAgQ1RSTC1UIGluIEluc2VydCBtb2RlIGluc2VydHMgJ3NoaWZ0d2lkdGgnIG9mIHNwYWNlcyBhdCB0aGUgY3Vyc29yLiAgQWRkIGEKKyAgICBmbGFnIGluICdjcG9wdGlvbnMnIGZvciB0aGlzLgorNyAgIEFkZCBhIHdheSB0byBzZW5kIGFuIGVtYWlsIGZvciBhIGNyYXNoZWQgZWRpdCBzZXNzaW9uLiAgQ3JlYXRlIGEgZmlsZSB3aGVuCisgICAgbWFraW5nIGNoYW5nZXMgKGNvbnRhaW5pbmcgbmFtZSBvZiB0aGUgc3dhcCBmaWxlKSwgZGVsZXRlIGl0IHdoZW4gd3JpdGluZworICAgIHRoZSBmaWxlLiAgU3VwcGx5IGEgcHJvZ3JhbSB0aGF0IGNhbiBjaGVjayBmb3IgY3Jhc2hlZCBzZXNzaW9ucyAoZWl0aGVyCisgICAgYWxsLCBmb3IgYSBzeXN0ZW0gc3RhcnR1cCwgb3IgZm9yIG9uZSB1c2VyLCBmb3IgaW4gYSAubG9naW4gZmlsZSkuCis3ICAgVmkgZG9lc24ndCBkbyBhdXRvaW5kZW50aW5nIHdoZW4gaW5wdXQgaXMgbm90IGZyb20gYSB0dHkgKGluIEV4IG1vZGUpLgorNyAgICJ6MzxDUj4iIHNob3VsZCBzdGlsbCB1c2UgdGhlIHdob2xlIHdpbmRvdywgYnV0IG9ubHkgcmVkaXNwbGF5IDMgbGluZXMuCis3ICAgIjp0YWcgeHgiIHNob3VsZCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IG5vbi1ibGFuay4gIE9yIHNob3VsZCBpdCBnbworICAgIHRvIHRoZSBtYXRjaCB3aXRoIHRoZSB0YWc/CU9wdGlvbj8KKzcgICBJbXBsZW1lbnQgJ2F1dG9wcmludCcvJ2FwJyBvcHRpb24uCis3ICAgQWRkIGZsYWcgaW4gJ2Nwb3B0aW9ucycgdGhhdCBtYWtlcyA8QlM+IGFmdGVyIGEgY291bnQgd29yayBsaWtlIDxEZWw+CisgICAgKFNheXJlKS4KKzcgICBBZGQgZmxhZyBpbiAnY3BvcHRpb25zJyB0aGF0IG1ha2VzIG9wZXJhdG9yICh5YW5rLCBmaWx0ZXIpIG5vdCBtb3ZlIHRoZQorICAgIGN1cnNvciwgYXQgbGVhc3Qgd2hlbiBjYW5jZWxsZWQuIChkZWZhdWx0IFZpIGNvbXBhdGlibGUpLgorNyAgIE1ha2UgIjVkZCIgb24gbGFzdC1idXQtb25lLWxpbmUgbm90IGRlbGV0ZSBhbnl0aGluZyAoVmkgY29tcGF0aWJsZSkuCisgICAgQWRkIGZsYWcgaW4gJ2Nwb3B0aW9ucycgZm9yIHRoaXMuICBXaGVuIG5vdCBwcmVzZW50LCAiMmRkIiBpbiB0aGUgbGFzdAorICAgIGxpbmUgc2hvdWxkIGRlbGV0ZSB0aGUgbGFzdCBsaW5lLiAgUGF0Y2ggZnJvbSBncmVlbnggMjAwMiBBcHIgMTEuCis3ICAgVGhpcyBWaS10cmljayBkb2Vzbid0IHdvcms6ICJRIiB0byBnbyB0byBFeCBtb2RlLCB0aGVuICJnL3BhdHRlcm4vdmlzdWFsIi4KKyAgICBJbiBWaSB5b3UgY2FuIGVkaXQgaW4gdmlzdWFsIG1vZGUsIGFuZCB3aGVuIGRvaW5nICJRIiB5b3UganVtcCB0byB0aGUgbmV4dAorICAgIG1hdGNoLiAgTnZpIGNhbiBkbyBpdCB0b28uCis3ICAgU3VwcG9ydCAnXCcgZm9yIGxpbmUgY29udGludWF0aW9uIGluIEV4IG1vZGUgZm9yIHRoZXNlIGNvbW1hbmRzOiAoTHVlYmtpbmcpCisJZy8uL2FcCQkgICAgZy9wYXR0ZXJuMS8gcy9wYXR0ZXJuMi9yZXAxXFwKKwlsaW5lIDFcCQkgICAgbGluZSAyXFwKKwlsaW5lIDJcCQkgICAgbGluZSAzXFwKKwkuCQkgICAgbGluZTQvCis2ICAgIjplIC90bXAvJHR0eSIgZG9lc24ndCB3b3JrLiAgIjplICR1aWQiIGRvZXMuICBJcyAkdHR5IG5vdCBzZXQgYmVjYXVzZSBvZgorICAgIHRoZSB3YXkgdGhlIHNoZWxsIGlzIHN0YXJ0ZWQ/Cis2ICAgVmkgY29tcGF0aWJpbGl0eSAob3B0aW9uYWwpOiBtYWtlICJpYTxDUj48RVNDPjEwLiIgZG8gdGhlIHNhbWUgc3RyYW5nZQorICAgIHRoaW5nLiAgKG9ubHkgcmVwZWF0IGluc2VydCBmb3IgdGhlIGZpcnN0IGxpbmUpLgorCisKK0dUSysgMSAoT0sgaW4gR1RLIDIpOgorOCAgIFdoZW4gbWVudXMgYXJlIGRpc2FibGVkLCAnbScgcmVtb3ZlZCBmcm9tICdndWlvcHRpb25zJywgQWx0LUYgc3RpbGwgcG9wcworICAgIHVwIHRoZSBGaWxlIG1lbnUuICBDYW5ub3QgcmVwcm9kdWNlIHRoaXM6IGdpdmVzIGEgd2FybmluZyBmb3IgYSBOVUxMCisgICAgcG9pbnRlciBpZiB0aGUgbWVudSB3YXMgbmV2ZXIgZGlzcGxheWVkLgorOCAgIFdoZW4gdXNpbmcgImd2aW0gLWdlb20gNDB4MzAiIG9yIHNldHRpbmcgJ2NvbHVtbnMnIGluIC5ndmltcmMgb3Igd2l0aCBhCisgICAgR1VJRW50ZXIgYXV0b2NvbW1hbmQsIHRoZSB3aWR0aCBpcyBzdGlsbCBzZXQgdG8gZml0IHRoZSB0b29sYmFyLiAgQWxzbworICAgIGhhcHBlbnMgd2hlbiBjaGFuZ2luZyB0aGUgZm9udC4gIEhvdyB0byBhdm9pZCB0aGF0IHRoZSB0b29sYmFyIHNwZWNpZmllcworICAgIHRoZSBtaW5pbWFsIHdpbmRvdyB3aWR0aD8KKzggICBXaGVuIHVzaW5nIGEgdGhlbWUgd2l0aCBkaWZmZXJlbnQgc2Nyb2xsYmFycyAoZ3Rrc3RlcCksIHRoZSBzY3JvbGxiYXJzIGNhbgorICAgIGJlIHRvbyBuYXJyb3cuIChEcmF6ZW4gS2FjYXIpCis4ICAgRm9udCAiN3gxNCIgaGFzIGEgYm9sZCB2ZXJzaW9uICI3eDE0Ym9sZCIuICBUcnkgdG8gZmluZCB0aGUgYm9sZCBmb250IGJ5CisgICAgYXBwZW5kaW5nICJib2xkIiB3aGVuIHRoZXJlIGFyZSBub3QgMTQgZGFzaGVzLgorCitHVEsrIEdVSSBrbm93biBidWdzOgorOCAgIEdUSyAyOiBDb21iaW5pbmcgVVRGLTggY2hhcmFjdGVycyBub3QgZGlzcGxheWVkIHByb3Blcmx5IGluIG1lbnVzIChNaWtvbGFqCisgICAgTWFjaG93c2tpKSAgVGhleSBhcmUgZGlzcGxheWVkIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMuICBQcm9ibGVtIGluCisgICAgY3JlYXRpbmcgYSBsYWJlbD8KKzkgICBDYW4ndCBwYXN0ZSBhIFZpc3VhbCBzZWxlY3Rpb24gZnJvbSBHVEstZ3ZpbSB0byB2aW0gaW4geHRlcm0gb3IgTW90aWYgZ3ZpbQorICAgIHdoZW4gaXQgaXMgbG9uZ2VyIHRoYW4gNDAwMCBjaGFyYWN0ZXJzLiAgV29ya3MgT0sgZnJvbSBndmltIHRvIGd2aW0gYW5kCisgICAgdmltIHRvIHZpbS4gIFBhc3RpbmcgdGhyb3VnaCB4dGVybSAodXNpbmcgdGhlIHNoaWZ0IGtleSkgYWxzbyB3b3Jrcy4KKyAgICBJdCBzdGFydHMgd29ya2luZyBhZnRlciBHVEsgZ3ZpbSBsb3NlcyB0aGUgc2VsZWN0aW9uIGFuZCBnYWlucyBpdCBhZ2Fpbi4KKzcgICBETkQgZG9lc24ndCB3b3JrIHdpdGggS0RFIChhbHNvIHdpdGggR1RLIDEpLgorCisKK1dpbjMyIEdVSSBrbm93biBidWdzOgorOCAgIE9uIFdpbmRvd3MgOTggdGhlIHVuaWNvd3MgbGlicmFyeSBpcyBuZWVkZWQgdG8gc3VwcG9ydCBmdW5jdGlvbnMgd2l0aCBVQ1MyCisgICAgZmlsZSBuYW1lcy4gIENhbiB3ZSBsb2FkIHVuaWNvd3MuZGxsIGR5bmFtaWNhbGx5PworOCAgIFRoZSAtUCBhcmd1bWVudCBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggbWFueSBNREkgYXBwbGljYXRpb25zLgorICAgIFRoZSBsYXN0IGFyZ3VtZW50IG9mIENyZWF0ZVdpbmRvd0V4KCkgc2hvdWxkIGJlIHVzZWQsIHNlZSBNU0ROIGRvY3MuCisgICAgVHV0b3JpYWw6IGh0dHA6Ly93aW4zMmFzc2VtYmx5Lm9ubGluZS5mci90dXQzMi5odG1sCis4ICAgSW4gZXZhbC5jLCBpby5oIGlzIGluY2x1ZGVkIHdoZW4gTVNXSU4zMiBpcyBkZWZpbmVkLiAgU2hvdWxkbid0IHRoaXMgYmUKKyAgICBXSU4zMj8gIE9yIGNhbiBpbmNsdWRpbmcgaW8uaCBiZSBtb3ZlZCB0byB2aW0uaD8gKERhbiBTaGFycCkKKzcgICBXaW5kb3dzIFhQOiBXaGVuIHVzaW5nICJDbGVhclR5cGUiIGZvciB0ZXh0IHNtb290aGluZywgYSBjb2x1bW4gb2YgeWVsbG93CisgICAgcGl4ZWxzIHJlbWFpbnMgd2hlbiB0eXBpbmcgc3BhY2VzIGluIGZyb250IG9mIGEgIkQiICgnZ3VpZm9udCcgc2V0IHRvCisgICAgImx1Y2lkYV9jb25zb2xlOmg4IikuCis2ICAgV2luMzIgR1VJOiBXaXRoICItdSBOT05FIC1VIE5PTkUiIGFuZCBkb2luZyAiQ1RSTC1XIHYiICJDVFJMLVcgbyIsIHRoZSAiOiIKKyAgICBvZiAiOm9ubHkiIGlzIGhpZ2hsaWdodGVkIGxpa2UgdGhlIGN1cnNvci4gIChMaXBlbGlzKQorNyAgIFdoZW4gZm9udCBzbW9vdGhpbmcgaXMgZW5hYmxlZCwgcmVkcmF3aW5nIGNhbiBiZWNvbWUgdmVyeSBzbG93LiAgVGhlIHJlYXNvbgorICAgIGFwcGVhcnMgdG8gYmUgZHJhd2luZyB3aXRoIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4gIFdvdWxkIGl0IGJlIHBvc3NpYmxlCisgICAgdG8gdXNlIGFuIG9wYXF1ZSBiYWNrZ3JvdW5kIGluIG1vc3QgcGxhY2VzPworOCAgIFVzZSBhbm90aGVyIGRlZmF1bHQgZm9yICd0ZXJtZW5jb2RpbmcnOiB0aGUgYWN0aXZlIGNvZGVwYWdlLiAgTWVhbnMgdGhhdAorICAgIHdoZW4gJ2VuY29kaW5nJyBpcyBjaGFuZ2VkIHR5cGluZyBjaGFyYWN0ZXJzIHN0aWxsIHdvcmtzIHByb3Blcmx5LgorICAgIEFsdGVybmF0aXZlOiB1c2UgdGhlIFVuaWNvZGUgZnVuY3Rpb25zIHRvIG9idGFpbiB0eXBlZCBjaGFyYWN0ZXJzLgorOCAgIFdpbjMyOiBNdWx0aS1ieXRlIGNoYXJhY3RlcnMgYXJlIG5vdCBkaXNwbGF5ZWQsIGV2ZW4gdGhvdWdoIHRoZSBzYW1lIGZvbnQKKyAgICBpbiBOb3RlcGFkIGNhbiBkaXNwbGF5IHRoZW0uIChTcmluYXRoIEF2YWRoYW51bGEpICBUcnkgd2l0aCB0aGUKKyAgICBVVEYtOC1kZW1vLnR4dCBwYWdlIHdpdGggQW5kYWxlIE1vbm8uCis3ICAgVGhlIGN1cnNvciBjb2xvciBpbmRpY2F0aW5nIElNRSBtb2RlIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4gKFNoaXpodSBQYW4sCisgICAgMjAwNCBNYXkgOSkKKzggICBXaW4zMjogV2hlbiBjbGlja2luZyBvbiB0aGUgZ3ZpbSB0aXRsZSBiYXIsIHdoaWNoIGdpdmVzIGl0IGZvY3VzLCBwcm9kdWNlcworICAgIGEgZmlsZS1jaGFuZ2VkIGRpYWxvZywgYWZ0ZXIgY2xpY2tpbmcgb24gYSBidXR0b24gaW4gdGhhdCBkaWFsb2cgdGhlIGd2aW0KKyAgICB3aW5kb3cgZm9sbG93cyB0aGUgbW91c2UuICBUaGUgYnV0dG9uLXVwIGV2ZW50IGlzIGxvc3QuICBPbmx5IHdpdGgKKyAgICBNUy1XaW5kb3dzIDk4PworICAgIFRyeSB0aGlzOiAiOnNldCBzdyB0cyIsIGdldCBlbnRlci1wcm9tcHQsIHRoZW4gY2hhbmdlIHRoZSBmaWxlIGluIGEKKyAgICBjb25zb2xlLCBnbyBiYWNrIHRvIFZpbSBhbmQgY2xpY2sgInJlbG9hZCIgaW4gdGhlIGRpYWxvZyBmb3IgdGhlIGNoYW5nZWQKKyAgICBmaWxlOiBXaW5kb3cgbW92ZXMgd2l0aCB0aGUgY3Vyc29yIQorICAgIFB1dCBmb2N1cyBldmVudCBpbiBpbnB1dCBidWZmZXIgYW5kIGxldCBnZW5lcmljIFZpbSBjb2RlIGhhbmRsZSBpdD8KKzggICBXaGVuIGFjdGl2YXRpbmcgdGhlIFZpbSB3aW5kb3cgd2l0aCBtb3VzZSBjbGljaywgZG9uJ3QgbW92ZSBjdXJzb3IgdG8KKyAgICBtb3VzZSBwb3NpdGlvbi4gIENhdGNoIFdNX01PVVNFQUNUSVZBVEUuIChMdWV2ZWxzbWV5ZXIpCis5ICAgVGhlIHByaW50IGRpYWxvZyB1c2VzIGEgZm9udCB3aGljaCBkb2Vzbid0IGRpc3BsYXkgbXVsdGktYnl0ZSBtZXNzYWdlcy4KKyAgICBJbmNsdWRlIHBhdGNoIGZyb20gVmlwaW4gQXJhdmluZD8gIFVwZGF0ZSBmcm9tIFlhc3VoaXJvIE1hdHN1bW90by4KKzggICBXaW4zMjogV2hlbiBtb3VzZSBpcyBoaWRkZW4gYW5kIGluIHRoZSB0b29sYmFyLCBtb3ZpbmcgaXQgd29uJ3QgbWFrZSBpdAorICAgIGFwcGVhci4gKFNhbWkgU2Fsb25lbikKKzggICBXaW5kb3dzIE5UOiB3cml0aW5nIHRvIGF1eC4qIG1ha2VzIFZpbSBoYW5nLiAoQWNldmVkbykKKzggICBXaW4zMiBHVUk6IFdpdGggbWF4aW1pemVkIHdpbmRvdywgIjpzZXQgZ28tPXIiIGRvZXNuJ3QgdXNlIHRoZSBzcGFjZSB0aGF0CisgICAgY29tZXMgYXZhaWxhYmxlLiAoUG91Y2V0KSAgSXQgd29ya3MgT0sgb24gV2luIDk4IGJ1dCBkb2Vzbid0IHdvcmsgb24gV2luCisgICAgTlQgNC4wLiAgTGVhdmVzIGEgZ3JleSBhcmVhIHdoZXJlIHRoZSBzY3JvbGxiYXIgd2FzLiAgIjpzZXQgZ28rPXIiIGFsc28KKyAgICBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCis4ICAgV2hlbiBWaW0gaXMgbWluaW1pemVkIGFuZCB3aGVuIG1heGltaXppbmcgaXQgYSBmaWxlLWNoYW5nZWQgZGlhbG9nIHBvcHMKKyAgICB1cCwgVmltIGlzbid0IG1heGltaXplZC4gIEl0IHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgZGlhbG9nLCBzbyB0aGF0IGl0CisgICAgYXBwZWFycyBpbiB0aGUgcmlnaHQgcG9zaXRpb24uIChXZWJiKQorOSAgIFdoZW4gc2VsZWN0aW5nIGF0IHRoZSBtb3JlLXByb21wdCBvciBoaXQtZW50ZXItcHJvbXB0LCB0aGUgcmlnaHQgbW91c2UKKyAgICBidXR0b24gZG9lc24ndCBnaXZlIHBvcHVwIG1lbnUuCisgICAgQXQgdGhlIGhpdC1lbnRlciBwcm9tcHQgQ1RSTC1ZIGRvZXNuJ3Qgd29yayB0byBjb3B5IHRoZSBtb2RlbGVzcworICAgIHNlbGVjdGlvbi4KKyAgICBPbiB0aGUgY29tbWFuZCBsaW5lLCBkb24ndCBnZXQgYSBwb3B1cCBtZW51IGZvciB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLgorICAgIExldCB0aGUgbWlkZGxlIGJ1dHRvbiBwYXN0ZSBzZWxlY3RlZCB0ZXh0IChub3QgdGhlIGNsaXBib2FyZCBidXQgdGhlCisgICAgbm9uLVZpc3VhbCBzZWxlY3Rpb24pPyAgT3RoZXJ3aXNlIENUUkwtWSBoYXMgdG8gYmUgdXNlZCB0byBjb3B5IHRoZSB0ZXh0LgorOCAgIFdoZW4gJ2dyZXBwcmcnIGRvZXNuJ3QgZXhlY3V0ZSwgdGhlIGVycm9yIG9ubHkgZmxhc2hlcyBieSwgdGhlCisgICAgdXNlciBjYW4gaGFyZGx5IHNlZSB3aGF0IGlzIHdyb25nLiAoTW9vcmUpCisgICAgQ291bGQgdXNlIHZpbXJ1biB3aXRoIGFuICItbm93YWl0IiBhcmd1bWVudCB0byBvbmx5IHdhaXQgd2hlbiBhbiBlcnJvcgorICAgIG9jY3VycywgYnV0ICJjb21tYW5kLmNvbSIgZG9lc24ndCByZXR1cm4gYW4gZXJyb3IgY29kZS4KKzggICBXaGVuIHRoZSAnc2hlbGwnIGNhbm5vdCBiZSBleGVjdXRlZCwgc2hvdWxkIGdpdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbXNnLgorICAgIEVzcC4gZm9yIGEgZmlsdGVyIGNvbW1hbmQsIGN1cnJlbnRseSBpdCBvbmx5IGNvbXBsYWlucyB0aGUgZmlsZSBjb3VsZCBub3QKKyAgICBiZSByZWFkLgorOCAgIE1lc3NhZ2VCb3ggdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMgY2FuIGJlIHRvbyBiaWcuCVRoZXJlIGlzIG5vIHdheSB0bworICAgIHNjcm9sbCBpdCwgb3IgZXZlbiBoaXQgdGhlIE9LIGJ1dHRvbiAoYnV0IHlvdSBjYW4gaGl0IHJldHVybikuCisgICAgVXNlIGEgc2Nyb2xsYWJsZSB3aW5kb3cuCis3ICAgQWRkIGFuIG9wdGlvbiB0byBhZGQgb25lIHBpeGVsIGNvbHVtbiB0byB0aGUgY2hhcmFjdGVyIHdpZHRoPyAgTHVjaWRhCisgICAgQ29uc29sZSBpdGFsaWMgaXMgd2lkZXIgdGhhbiB0aGUgbm9ybWFsIGZvbnQgKCJkIiBvdmVybGFwcyB3aXRoIG5leHQgY2hhcikuCisgICAgT3Bwb3NpdGUgb2YgJ2xpbmVzcGFjZSc6ICdjb2x1bW5zcGFjZScuCis3ICAgQXQgdGhlIGhpdC1lbnRlciBwcm9tcHQgc2Nyb2xsaW5nIG5vdyBubyBsb25nZXIgd29ya3MuICBOZWVkIHRvIHVzZSB0aGUKKyAgICBrZXlib2FyZCB0byBnZXQgYXJvdW5kIHRoaXMuICBQcmV0ZW5kIDxDUj4gd2FzIGhpdCB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvCisgICAgc2Nyb2xsPyAgTmVlZCB0byBiZSBhYmxlIHRvIGdldCBvdXQgb2YgaGl0LWVudGVyIHByb21wdCB3aXRoIHRoZSBtb3VzZQorICAgIGFueXdheS4KKzcgICBTY3JvbGxiYXIgd2lkdGggZG9lc24ndCBjaGFuZ2Ugd2hlbiBzZWxlY3Rpbmcgb3RoZXIgd2luZG93cyBhcHBlYXJhbmNlLgorICAgIEFsc28gYmFja2dyb3VuZCBjb2xvciBvZiBUb29sYmFyIGFuZCByZWN0YW5nbGUgYmVsb3cgdmVydC4gc2Nyb2xsYmFyLgorNyAgICIhc3RhcnQgL21pbiBjbWQiIHNob3VsZCBydW4gaW4gYSBtaW5pbWl6ZWQgd2luZG93LCBpbnN0ZWFkIG9mIHVzaW5nCisgICAgIi9taW4iIGFzIHRoZSBjb21tYW5kIG5hbWUuIChSb2dhbGwpCis2ICAgRHJhd2luZyB0ZXh0IHRyYW5zcGFyZW50bHkgZG9lc24ndCBzZWVtIHRvIHdvcmsgKHdoZW4gZHJhd2luZyBwYXJ0IGN1cnNvcikuCis4ICAgQ1RSTCBrZXkgZG9lc24ndCBhbHdheXMgd29yayBpbiBjb21iaW5hdGlvbiB3aXRoIEFMVCBrZXkuICBJdCBkb2VzIHdvcmsKKyAgICBmb3IgZnVuY3Rpb24ga2V5cywgbm90IGZvciBhbHBoYWJldGljIGNoYXJhY3RlcnMuICBQZXJoYXBzIHRoaXMgaXMgYmVjYXVzZQorICAgIENUUkwtQUxUIGlzIHVzZWQgYnkgV2luZG93cyBhcyBBbHRHcj8KKzggICBDVFJMLS0gZG9lc24ndCB3b3JrIGZvciBBWkVSVFksIGJlY2F1c2UgaXQncyBDVFJMLVsgZm9yIFFXRVJUWS4gIEhvdyBkbyB3ZQorICAgIGtub3cgd2hpY2gga2V5Ym9hcmQgaXMgYmVpbmcgdXNlZD8KKzcgICBXaGVuIHNjcm9sbGluZywgYW5kIGEgYmFja2dyb3VuZCBjb2xvciBpcyBkaXRoZXJlZCwgdGhlIGRpdGhlciBwYXR0ZXJuCisgICAgZG9lc24ndCBhbHdheXMgam9pbiBjb3JyZWN0bHkgYmV0d2VlbiB0aGUgc2Nyb2xsZWQgYXJlYSBhbmQgdGhlIG5ldyBkcmF3bgorICAgIGFyZWEgKEtvbG9zZWlrZSkuCis4ICAgV2hlbiBndWlfaW5pdF9mb250KCkgaXMgY2FsbGVkIHdpdGggIioiLCBwX2d1aWZvbnQgaXMgZnJlZWQgd2hpbGUgaXQgbWlnaHQKKyAgICBzdGlsbCBiZSB1c2VkIHNvbWV3aGVyZS4gIFRoaXMgaXMgdG9vIHRyaWNreSwgZG8gdGhlIGZvbnQgc2VsZWN0aW9uIGZpcnN0LAorICAgIHRoZW4gc2V0IHRoZSBuZXcgZm9udCBieSBuYW1lIChyZXF1aXJlcyBwdXR0aW5nIGFsbCBsb2dmb250IHBhcmFtZXRlcnMgaW4KKyAgICB0aGUgZm9udCBuYW1lKS4KKworCitBdGhlbmEgYW5kIE1vdGlmOgorOSAgIENhbiBjb25maWd1cmUgYmUgY2hhbmdlZCB0byBkaXNhYmxlIG5ldGJlYW5zIGlmIHRoZSBYcG0gbGlicmFyeSBpcworICAgIHJlcXVpcmVkIGFuZCBpdCdzIG1pc3Npbmc/Cis4ICAgV2hlbiB1c2luZyB0aGUgcmVzb3VyY2UgIlZpbSpib3JkZXJ3aWR0aCAyIiB0aGUgd2lkZ2V0cyBhcmUgcG9zaXRpb25lZAorICAgIHdyb25nLgorOSAgIFhJTSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBTR0kvSVJJWC4gIEZpeCBYSU0gc28gdGhhdCAnaW1kaXNhYmxlJyBjYW4KKyAgICBiZSBvZmYgYnkgZGVmYXVsdC4KKzkgICBYSU0gZG9lc24ndCB3b3JrIHByb3Blcmx5IGZvciBBdGhlbmEvTW90aWYuIChZYXN1aGlybyBNYXRzdW1vdG8pIEZvciBub3csCisgICAga2VlcCBYSU0gYWN0aXZlIGF0IGFsbCB0aW1lcyB3aGVuIHRoZSBpbnB1dCBtZXRob2QgaGFzIHRoZSBwcmVlZGl0aW5nCisgICAgZmxhZy4KKzggICBYMTE6IEEgbWVudSB0aGF0IGNvbnRhaW5zIGFuIHVtbGF1dCBpcyB0cnVuY2F0ZWQgYXQgdGhhdCBjaGFyYWN0ZXIuCisgICAgSGFwcGVucyB3aGVuIHRoZSBsb2NhbGUgaXMgIkMiLCB3aGljaCB1c2VzIEFTQ0lJIGluc3RlYWQgb2YgSVMwLTg4NTktMS4KKyAgICBJcyB0aGVyZSBhIHdheSB0byB1c2UgbGF0aW4xIGJ5IGRlZmF1bHQ/ICBHbm9tZV9pbml0KCkgc2VlbXMgdG8gZG8gdGhpcy4KKzggICBQZXJoYXBzIHVzZSBmb250c2V0cyBmb3IgZXZlcnl0aGluZz8KKzYgICBXaGVuIHN0YXJ0aW5nIGluIEVuZ2xpc2ggYW5kIHN3aXRjaGluZyB0aGUgbGFuZ3VhZ2UgdG8gSmFwYW5lc2UsIHNldHRpbmcKKyAgICB0aGUgbG9jYWxlIHdpdGggIjpsYW5nIiwgJ2d1aWZvbnRzZXQnIGFuZCAiaGkgbWVudSBmb250PSIsIGRlbGV0aW5nIGFsbAorICAgIG1lbnVzIGFuZCBzZXR0aW5nIHRoZW0gYWdhaW4sIHRoZSBtZW51cyBkb24ndCB1c2UgdGhlIG5ldyBmb250LiAgTW9zdCBvZgorICAgIHRoZSB0b29sdGlwcyB3b3JrIHRob3VnaC4uLgorNyAgIE1vdGlmOiB3aGVuIHVzaW5nIGEgZmlsZSBzZWxlY3Rpb24gZGlhbG9nLCB0aGUgc3BlY2lmaWVkIGZpbGUgbmFtZSBpcyBub3QKKyAgICBhbHdheXMgdXNlZCAod2hlbiBzcGVjaWZ5aW5nIGEgZmlsdGVyIG9yIGFub3RoZXIgZGlyZWN0b3J5KS4KKzggICBXaGVuICdlbmNvZGluZycgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgbG9jYWxlIChlLmcuLCB1dGYtOCkgdGhlCisgICAgbWVudSBzdHJpbmdzIGRvbid0IHdvcmsuICBSZXF1aXJlcyBjb252ZXJzaW9uIGZyb20gJ2VuY29kaW5nJyB0byB0aGUKKyAgICBjdXJyZW50IGxvY2FsZS4gIFdvcmthcm91bmQ6IHNldCAnbGFuZ21lbnUnLgorCisKK0F0aGVuYSBHVUk6Cis5ICAgV2hlbiBkcmFnZ2luZyB0aGUgc2Nyb2xsYmFyIHRodW1iIHZlcnkgZmFzdCwgZm9jdXMgaXMgb25seSBvYnRhaW5lZCBpbgorICAgIHRoZSBzY3JvbGxiYXIgaXRzZWxmLiAgQW5kIHRoZSB0aHVtYiBpcyBubyBsb25nZXIgdXBkYXRlZCB3aGVuIG1vdmluZworICAgIHRocm91Z2ggZmlsZXMuCis3ICAgVGhlIGZpbGUgc2VsZWN0b3IgaXMgbm90IHJlc2l6YWJsZS4gIFdpdGggYSBiaWcgZm9udCBpdCBpcyBkaWZmaWN1bHQgdG8KKyAgICByZWFkIGxvbmcgZmlsZSBuYW1lcy4gKFNjaHJvZWRlcikKKzQgICBSZS13cml0ZSB0aGUgd2lkZ2V0IGF0dGFjaG1lbnRzIGFuZCBjb2RlIHNvIHRoYXQgd2Ugd2lsbCBub3QgaGF2ZSB0byBnbworICAgIHRocm91Z2ggYW5kIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgZXZlcnkgd2lkZ2V0IGV2ZXJ5IHRpbWUgdGhlCisgICAgd2luZG93IGlzIHJlZnJlc2hlZC9jaGFuZ2VzIHNpemUuICBUaGlzIHdpbGwgaGVscCB0aGUgImZsYXNoaW5nLXdpZGdldHMiCisgICAgcHJvYmxlbSBkdXJpbmcgYSByZWZyZXNoLgorNSAgIFdoZW4gc3RhcnRpbmcgZ3ZpbSB3aXRoIGFsbCB0aGUgZGVmYXVsdCBjb2xvcnMgYW5kIHRoZW4gdHlwaW5nCisgICAgIjpoaSBNZW51IGd1aWJnPWN5YW4iLCB0aGUgbWVudXMgY2hhbmdlIGNvbG9yIGJ1dCB0aGUgYmFja2dyb3VuZCBvZiB0aGUKKyAgICBwdWxscmlnaHQgcGl4bWFwIGRvZXNuJ3QgY2hhbmdlIGNvbG9ycy4KKyAgICBJZiB5b3UgdHlwZSAiOmhpIE1lbnUgZ3VpYmc9Y3lhbiBmb250PWFueWZvbnQiLCB0aGVuIHRoZSBwaXhtYXAgY2hhbmdlcworICAgIGNvbG9ycyBhcyBpdCBzaG91bGQuCisgICAgQWxsb2NhdGluZyBhIG5ldyBwaXhtYXAgYW5kIHNldHRpbmcgdGhlIHJlc291cmNlIGRvZXNuJ3QgY2hhbmdlIHRoZQorICAgIHB1bGxyaWdodCBwaXhtYXAncyBjb2xvcnMuICBXaHk/ICBQb3NzaWJsZSBBdGhlbmEgYnVnPworCisKK01vdGlmIEdVSToKKzggICBQb3B1cCBtZW51IG9yZGVyaW5nIGlzIHdyb25nLgorOCAgIEFjY2VsZXJhdG9ycyBkb24ndCB3b3JrIGluIGEgZGlhbG9nLiAgSW5jbHVkZSBwYXRjaCBmcm9tIE1hcnRpbiBEYWxlY2tpCisgICAgKEphbiAzLCB0ZXN0ZWQgYnkgRGF2aWQgSGFycmlzb24pLiAgU2hvdWxkIHdvcmsgd2l0aCBBbHQtbyB0aGVuLgorNyAgIFVzZSBhY2NlbGVyYXRvcnMgZm9yIHRoZSBNb3RpZiBmaWxlIHNlbGVjdGlvbiBkaWFsb2cuICBQYXRjaCBmcm9tIE1hcnRpbgorICAgIERhbGVja2kgMjAwMiBKYW4gMTEuCis3ICAgVXNlIFhtU3RyaW5nQ3JlYXRlTG9jYWxpemVkKCkgaW5zdGVhZCBvZiBYbVN0cmluZ0NyZWF0ZVNpbXBsZSgpPworICAgIERhdmlkIEhhcnJpc29uIHNheXMgaXQncyBPSyAoaXQgZXhpc3RzIGluIE1vdGlmIDEuMikuCis4ICAgVGhlIHRleHRzIGluIHRoZSBmaW5kL3JlcGxhY2UgZGlhbG9nIGRvbid0IHVzZSB0aGUgcmlnaHQgZm9udC4KKzggICBMZXNzdGlmOiBXaGVuIGRlbGV0aW5nIGEgbWVudSB0aGF0J3MgdG9ybiBvZmYsIHRoZSB0b3JuIG9mZiBtZW51IGJlY29tZXMKKyAgICB2ZXJ5IHNtYWxsIGluc3RlYWQgb2YgZGlzYXBwZWFyaW5nLiAgV2hlbiBjbG9zaW5nIGl0LCBWaW0gY3Jhc2hlcy4KKyAgICAoUGhpbGxpcHBzKQorCisKK0dVSToKKzkgICBPbiBTb2xhcmlzLCBjcmVhdGluZyB0aGUgcG9wdXAgbWVudSBjYXVzZXMgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBubworICAgIGxvbmdlciB0byB3b3JrIGZvciBleHRlbmRpbmcgdGhlIHNlbGVjdGlvbi4gKEhhbGV2eSkKKzkgICBXaGVuIHJ1bm5pbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSwgaXQgY2FuJ3QgYWx3YXlzIGJlIGtpbGxlZCB3aXRoIENUUkwtQy4KKyAgICBlLmcuIG9uIFNvbGFyaXMgNS41LCB3aGVuIHVzaW5nICJLIiAoS2VlY2gpLiAgT3RoZXIgJ2d1aXB0eScgcHJvYmxlbXMgb24KKyAgICBTb2xhcmlzIDIuNi4gKE1hcmxleSkKKzkgICBPbiBTb2xhcmlzOiBVc2luZyBhICItZ2VvbWV0cnkiIGFyZ3VtZW50LCBiaWdnZXIgdGhhbiB0aGUgd2luZG93IHdoZXJlIFZpbQorICAgIGlzIHN0YXJ0ZWQgZnJvbSwgY2F1c2VzIGVtcHR5IGxpbmVzIGJlbG93IHRoZSBjbWRsaW5lLiAocmFmKQorOCAgIFgxMSBHVUk6IFdoZW4gbWVudSBpcyBkaXNhYmxlZCBieSBleGNsdWRpbmcgJ20nIGZyb20gJ2d1aW9wdGlvbnMnLCBBTFQga2V5CisgICAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIHRyaWdnZXIgYSBtZW51IChsaWtlIHRoZSBXaW4zMiB2ZXJzaW9uKS4KKzggICBXaGVuIHNldHRpbmcgJ2xhbmdtZW51JywgaXQgc2hvdWxkIGJlIGVmZmVjdGl2ZSBpbW1lZGlhdGVseS4gIFN0b3JlIGJvdGgKKyAgICB0aGUgRW5nbGlzaCBhbmQgdGhlIHRyYW5zbGF0ZWQgdGV4dCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUuICBSZS1nZW5lcmF0ZQorICAgIHRoZSB0cmFuc2xhdGlvbiB3aGVuICdsYW5nbWVudScgaGFzIGNoYW5nZWQuCis4ICAgQmFzaWMgZmxhdyBpbiB0aGUgR1VJIGNvZGU6IE5leHRTY3JlZW4gaXMgdXBkYXRlZCBiZWZvcmUgY2FsbGluZworICAgIGd1aV93cml0ZSgpLCBidXQgdGhlIEdVSSBjb2RlIHJlbGllcyBvbiBOZXh0U2NyZWVuIHRvIHJlcHJlc2VudCB0aGUgc3RhdGUKKyAgICBvZiB3aGVyZSBpdCBpcyBwcm9jZXNzaW5nIHRoZSBvdXRwdXQuCisgICAgTmVlZCBiZXR0ZXIgc2VwYXJhdGlvbiBvZiBWaW0gY29yZSBhbmQgR1VJIGNvZGUuCis4ICAgV2hlbiBmb250c2V0IHN1cHBvcnQgaXMgZW5hYmxlZCwgc2V0dGluZyAnZ3VpZm9udCcgdG8gYSBzaW5nbGUgZm9udAorICAgIGRvZXNuJ3Qgd29yay4KKzggICBNZW51IHByaW9yaXR5IGZvciBzdWItbWVudXMgZm9yOiBBbWlnYSwgQmVPUy4KKzggICBBZGQgbWVudSBzZXBhcmF0b3JzIGZvciBBbWlnYSwgUklTQ09TLgorOCAgIEFkZCBhIGZldyBtb3JlIGNvbW1hbmQgbmFtZXMuICBQYXRjaCBmcm9tIEppcmkgQnJlemluYSAoMjggZmViIDIwMDIpLgorOCAgIEFkZCB3YXkgdG8gc3BlY2lmeSB0aGUgZmlsZSBmaWx0ZXIgZm9yIHRoZSBicm93c2UgZGlhbG9nLiAgQXQgbGVhc3QgZm9yCisgICAgYnJvd3NlKCkuCis4ICAgQWRkIGRpYWxvZyBmb3Igc2VhcmNoL3JlcGxhY2UgdG8gb3RoZXIgR1VJcz8gIFRrIGhhcyBzb21ldGhpbmcgZm9yIHRoaXMsCisgICAgdXNlIHRoYXQgY29kZT8gIE9yIHVzZSBjb25zb2xlIGRpYWxvZy4KKzggICBXaGVuIHNlbGVjdGluZyBhIGZvbnQgd2l0aCB0aGUgZm9udCBkaWFsb2cgYW5kIHRoZSBmb250IGlzIGludmFsaWQsIHRoZQorICAgIGVycm9yIG1lc3NhZ2UgZGlzYXBwZWFycyB0b28gcXVpY2suCis4ICAgZ3VpX2NoZWNrX2NvbG9ycygpIGlzIG5vdCBjYWxsZWQgYXQgdGhlIHJpZ2h0IG1vbWVudC4gIERvIGl0IG11Y2ggbGF0ZXIsCisgICAgdG8gYXZvaWQgcHJvYmxlbXMuCis4ICAgZ3VpX3VwZGF0ZV9jdXJzb3IoKSBpcyBjYWxsZWQgZm9yIGEgY3Vyc29yIHNoYXBlIGNoYW5nZSwgZXZlbiB3aGVuIHRoZXJlCisgICAgYXJlIG1hcHBpbmdzIHRvIGJlIHByb2Nlc3NlZC4gIE9ubHkgZG8gc29tZXRoaW5nIHdoZW4gZ29pbmcgdG8gd2FpdCBmb3IKKyAgICBpbnB1dC4gIE9yIG1heWJlIGV2ZXJ5IDEwMCBtcz8KKzggICBYMTE6IFdoZW4gdGhlIHdpbmRvdyBzaXplIGlzIHJlZHVjZWQgdG8gZml0IG9uIHNjcmVlbiwgdGhlcmUgYXJlIGJsYW5rCisgICAgbGluZXMgYmVsb3cgdGhlIHRleHQgYW5kIGJvdHRvbSBzY3JvbGxiYXIuICAiZ3ZpbSAtZ2VvbWV0cnkgODB4NzgrMCswIi4KKyAgICBXaGVuIHRoZSAiKzArMCIgaXMgb21pdHRlZCBpdCB3b3Jrcy4KKzggICBXaGVuIHN0YXJ0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQsIGFuZCAnZ3VpcHR5JyBzZXQsIEJTIGFuZCBERUwgYXJlIG1peGVkCisgICAgdXAuICBTZXQgZXJhc2UgY2hhcmFjdGVyIHNvbWVob3c/Cis4ICAgQSBkZWFkIGNpcmN1bWZsZXggZm9sbG93ZWQgYnkgYSBzcGFjZSBzaG91bGQgZ2l2ZSB0aGUgJ14nIGNoYXJhY3RlcgorICAgIChSb21tZWwpLiAgTG9vayBob3cgeHRlcm0gZG9lcyB0aGlzLgorICAgIEFsc286IEJlZG5hciBoYXMgc29tZSBjb2RlIGZvciBkZWFkIGtleSBoYW5kbGluZy4KKyAgICBBbHNvOiBOZWRpdCA1LjAuMiB3aXRoIFVTRV9YTUlNIGRvZXMgaXQgcmlnaHQuIChHYXlhKQorOCAgIFRoZSBjb21wb3NlIGtleSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgKENlcGFzKS4gIEJvdGggZm9yIFdpbjMyIGFuZCBYMTEuCis3ICAgVGhlIGN1cnNvciBpbiBhbiBpbmFjdGl2ZSB3aW5kb3cgc2hvdWxkIGJlIGhvbGxvdy4gIEN1cnJlbnRseSBpdCdzIG5vdAorICAgIHZpc2libGUuCis3ICAgR1VJIG9uIFNvbGFyaXMgMi41LjEsIHVzaW5nIC91c3IvZHQvLi46IFdoZW4gZ3ZpbSBzdGFydHMsIGN1cnNvciBpcworICAgIGhvbGxvdywgYWZ0ZXIgd2luZG93IGxvd2VyZWQvcmFpc2VkIGl0J3MgT0suIChHb2RmcmV5KQorNyAgIFdoZW4gc3RhcnRpbmcgR1VJIHdpdGggIjpndWkiLCBhbmQgd2luZG93IGlzIG1hZGUgc21hbGxlciBiZWNhdXNlIGl0CisgICAgZG9lc24ndCBmaXQgb24gdGhlIHNjcmVlbiwgdGhlcmUgaXMgYW4gZXh0cmEgcmVkcmF3LgorOCAgIFdoZW4gc2V0dGluZyBmb250IHdpdGggLlhkZWZhdWx0cywgdGhlcmUgaXMgYW4gZXh0cmEgZW1wdHkgbGluZSBhdCB0aGUKKyAgICBib3R0b20sIHdoaWNoIGRpc2FwcGVhcnMgd2hlbiB1c2luZyAiOnNldCBndWlmb250PTxUYWI+Ii4gKENoYWR6ZWxlaykKKzggICBXaGVuIGZvbnQgc2hhcGUgY2hhbmdlcywgYnV0IG5vdCB0aGUgc2l6ZSwgZG9pbmcgIjpzZXQgZm9udD0iIGRvZXMgbm90CisgICAgcmVkcmF3IHRoZSBzY3JlZW4gd2l0aCB0aGUgbmV3IGZvbnQuICBBbHNvIGZvciBXaW4zMi4KKyAgICBXaGVuIHRoZSBzaXplIGNoYW5nZXMsIG9uIFNvbGFyaXMgMi41IHRoZXJlIGlzbid0IGEgcmVkcmF3IGZvciB0aGUKKyAgICByZW1haW5pbmcgcGFydCBvZiB0aGUgd2luZG93IChQaGlsbGlwcHMpLgorLSAgIEZsYXNoZXMgcmVhbGx5IGJhZGx5IGluIGNlcnRhaW4gY2FzZXMgd2hlbiBydW5uaW5nIHJlbW90ZWx5IGZyb20gYSBTdW4uCis0ICAgUmUtd3JpdGUgdGhlIGNvZGUgc28gdGhhdCB0aGUgaGlnaGxpZ2h0aW5nIGlzbid0IGNoYW5nZWQgbXVsdGlwbGUgdGltZXMKKyAgICB3aGVuIGRvaW5nIGEgIjpoaSBjbGVhciIuICBUaGUgY29sb3IgY2hhbmdlcyBoYXBwZW4gdGhyZWUgb3IgbW9yZSB0aW1lcworICAgIGN1cnJlbnRseS4gIFRoaXMgaXMgdmVyeSBvYnZpb3VzIG9uIGEgNjZNaHogNDg2LgorCisKK01TRE9TL0RKR1BQOgorOSAgIFByZXNzaW5nIENUUkwtQyBvZnRlbiBjcmFzaGVzIHRoZSBjb25zb2xlIFZpbSBydW5zIGluLiAoS2VuIExpYW8pCisgICAgV2hlbiAnYmlvc2tleScgaXNuJ3Qgc2V0IGl0IGRvZXNuJ3QgaGFwcGVuLiAgQ291bGQgYmUgYSBwcm9ibGVtIHdpdGggdGhlCisgICAgQklPUyBlbXVsYXRpb24gb2YgdGhlIGNvbnNvbGUuICBWZXJzaW9uIDUuNiBhbHJlYWR5IGhhZCB0aGlzIHByb2JsZW0uCis4ICAgREpHUFA6ICJjZCBjOiIgY2FuIHRha2UgdXMgdG8gYSBkaXJlY3RvcnkgdGhhdCBubyBsb25nZXIgZXhpc3RzLgorICAgIGNoYW5nZV9kcml2ZSgpIGRvZXNuJ3QgY2hlY2sgdGhpcy4gIEhvdyB0byBjaGVjayBmb3IgdGhpcyBlcnJvcj8KKzkgICBUaGUgMTYgYml0IHZlcnNpb24gcnVucyBvdXQgb2YgbWVtb3J5IHZlcnkgcXVpY2tseS4gIFNob3VsZCBmaW5kIHVudXNlZAorICAgIGNvZGUgYW5kIHJlZHVjZSBzdGF0aWMgZGF0YS4KKzkgICBDcmFzaCB3aGVuIHJ1bm5pbmcgb24gV2luZG93cyA5OCBpbiBhIGNvbnNvbGUgd2luZG93IGFuZCBwcmVzc2luZyBDVFJMLUMuCisgICAgSGFwcGVucyBub3cgYW5kIHRoZW4uICBXaGVuIGRlYnVnZ2luZyBWaW0gaW4gZ2RiIHRoaXMgYWxzbyBoYXBwZW5zLiAgU2luY2UKKyAgICB0aGUgY29uc29sZSBjcmFzaGVzLCBtaWdodCBiZSBhIGJ1ZyBpbiB0aGUgRE9TIGNvbnNvbGUuICBSZXNldHRpbmcKKyAgICAnYmlvc2tleScgYXZvaWRzIGl0LCBidXQgdGhlbiBDVFJMLUMgZG9lc24ndCB3b3JrLgorOSAgIERPUzogTWFrZSBDVFJMLUZ4IGFuZCBBTFQtRnggd29yay4KKyAgICBDVFJMLUYxID0gQ0UtNUUsIENUUkwtRjIgPSBDRS01RiwgLi4sIENUUkwtRjEwID0gQ0UtNjcKKyAgICBBTFQtRjEgPSBDRS02OCwgQUxULUYyID0gQ0UtNjksIC4uLCBBTFQtRjEwID0gQ0UtNzEKKyAgICBTaGlmdGVkIGN1cnNvciBrZXlzIHByb2R1Y2Ugc2FtZSBjb2RlcyBhcyB1bnNoaWZ0ZWQga2V5cy4gIFVzZSBiaW9za2V5KDIpCisgICAgdG8gZ2V0IG1vZGlmaWVyIG1hc2sgZm9yIDxTLUMtTS1GeD4uCisgICAgVXNlIEtfU1BFQ0lBTC9LU19NT0RJRklFUiBjb2RlcyB0byBpbnNlcnQgbW9kaWZpZXIgbWFzayBpbiBpbnB1dCBzdHJlYW0/CisgICAgTWFrZSB0aGlzIHdvcmsgbGlrZSBpbiBXaW4zMiBjb25zb2xlLgorICAgIE1hcHBpbmcgdGhpbmdzIGxpa2UgPE0tQT4gZG9lc24ndCB3b3JrLCBiZWNhdXNlIGl0IGdlbmVyYXRlcyBhbiBleHRlbmRlZAorICAgIGtleSBjb2RlLiAgVXNlIGEgdHJhbnNsYXRpb24gdGFibGU/Cis5ICAgQ2FuJ3QgcmVhZCBhbiBvcGVuZWQgc3dhcCBmaWxlIHdoZW4gdGhlICJzaGFyZSIgY29tbWFuZCBoYXMgbm90IGJlZW4gdXNlZC4KKyAgICBBdCBsZWFzdCBpZ25vcmUgdGhlIHN3YXAgZmlsZXMgdGhhdCBWaW0gaGFzIG9wZW5lZCBpdHNlbGYuCis4ICAgVXNlIERKR1BQIDIuMDMuCis4ICAgVGhlIERvczMyIHZlcnNpb24gKERKR1BQKSBjYW4ndCB1c2UgbG9uZyBmaWxlIG5hbWVzIG9uIFdpbmRvd3MgTlQuCisgICAgQ2hlY2sgaWYgbmV3IHBhY2thZ2UgY2FuIGJlIHVzZWQgKHYybWlzYy9udGxmbjA4W2JzXS56aXApLgorOCAgIHNldGxvY2FsZSgpIGlzIGJvZ3VzLgorOCAgIFZpbSBidXN5IHdhaXRzIGZvciBuZXcgY2hhcmFjdGVycyBvciBtb3VzZSBjbGlja3MuCVNob3VsZCBwdXQgaW4gc29tZQorICAgIHNvcnQgb2Ygc2xlZXAsIHRvIGF2b2lkIGVhdGluZyA1MCUgb2YgdGhlIENQVSB0aW1lLiAgVGVzdCBvbiBhbiB1bnBhdGNoZWQKKyAgICBXaW5kb3dzIDk1IHN5c3RlbSEKKzggICBESkdQUDogd2hlbiBzaGVsbCBpcyBiYXNoLCBtYWtlIGZhaWxzLiAoRG9uYWhvZSkKKzcgICBIaXR0aW5nIENUUkwtUCB0d2ljZSBxdWlja2x5IChlLmcuIGluIGtleXdvcmQgY29tcGxldGlvbikgb24gYSA4MDg4CisgICAgbWFjaGluZSwgc3RhcnRzIHByaW50ZXIgZWNobyEgKEpvaG4gTXVsbGluKS4KKzcgICBNU0RPUyAxNiBiaXQgdmVyc2lvbiBjYW4ndCB3b3JrIHdpdGggQ09NU1BFQyB0aGF0IGhhcyBhbiBhcmd1bWVudCwgZS5nLjoKKyAgICBDT01TUEVDPUM6XFdJTkRPV1NcQ09NTUFORC5DT00gL0U6NDA5NiAgICAoQnJhZGxleSkKKyAgICBDYXVzZWQgYnkgQkNDIHN5c3RlbSgpIGZ1bmN0aW9uIChCb3JsYW5kICJtYWtlIiBoYXMgdGhlIHNhbWUgcHJvYmxlbSkuCis4ICAgTW91c2U6IGhhbmRsZSBsZWZ0JnJpZ2h0IGJ1dHRvbiBwcmVzc2VkIGFzIG1pZGRsZSBidXR0b24gcHJlc3NlZC4gIEFkZAorICAgIG1vZGlmaWVyIGtleXMgc2hpZnQsIGN0cmwgYW5kIGFsdC4KKzcgICBXaGVuIHRvbyBtYW55IGZpbGVzIGFyZSBvcGVuIChkZXBlbmRzIG9uIEZJTEVTKSwgc3RyYW5nZSB0aGluZ3MgaGFwcGVuLgorICAgIFRoZSBEb3MxNiB2ZXJzaW9uIHJ1bnMgb3V0IG9mIG1lbW9yeSwgaW4gdGhlIERvczMyIHZlcnNpb24gIiFscyIgY2F1c2VzIGEKKyAgICBjcmFzaC4gIEFub3RoZXIgc3ltcHRvbTogLnN3cCBmaWxlcyBhcmUgbm90IGRlbGV0ZWQsIGV4aXN0aW5nIGZpbGVzIGFyZQorICAgICJbTmV3IGZpbGVdIi4KKzcgICBESkdQUCB2ZXJzaW9uIGRvZXNuJ3Qgd29yayB3aXRoIGdyYXBoaWNzIGRpc3BsYXkgbW9kZS4gIFN3aXRjaCB0byBhIG1vZGUKKyAgICB0aGF0IGlzIHN1cHBvcnRlZD8KKzggICBESkdQUDogIjptb2RlIiBkb2Vzbid0IHdvcmsgZm9yIG1hbnkgbW9kZXMuICBEaXNhYmxlIHRoZW0uCis4ICAgREpHUFA6IFdoZW4gc3RhcnRpbmcgaW4gRXggbW9kZSwgc2hvdWxkbid0IGNsZWFyIHRoZSBzY3JlZW4uIChXYWx0ZXIKKyAgICBCcmlzY29lKQorCisKK01TRE9TLCBPUy8yIGFuZCBXaW4zMjoKKzggICBPUy8yOiBBZGQgYmFja3RpY2sgZXhwYW5zaW9uLiAgVW5kZWZpbmUgTk9fRVhQQU5EUEFUSCBhbmQgdXNlCisgICAgZ2VuX2V4cGFuZF93aWxkY2FyZHMoKS4KKzggICBPUy8yOiBBZGQgY2xpcGJvYXJkIHN1cHBvcnQ/ICBTZWUgZXhhbXBsZSBjbGlwYnJkLmV4ZSBmcm9tIEFsZXhhbmRlcgorICAgIFdhZ25lci4KKzggICBPUy8yOiBBZGQgRXh0ZW5kZWQgQXR0cmlidXRlcyBzdXBwb3J0IGFuZCBkZWZpbmUgSEFWRV9BQ0wuCis4ICAgT1MvMjogV2hlbiBlZGl0aW5nIGEgZmlsZSBuYW1lICJmb28udHh0IiB0aGF0IGlzIGFjdHVhbGx5IGNhbGxlZCBGT08udHh0LAorICAgIHdyaXRpbmcgdXNlcyAiZm9vLnR4dCIuICBTaG91bGQgb2J0YWluIHRoZSByZWFsIGZpbGUgbmFtZS4KKzggICBTaG91bGQgJFVTRVJQUk9GSUxFIGJlIHVzZWQgaW5zdGVhZCBvZiAkSE9NRURSSVZFLyRIT01FUEFUSD8KKzggICBXaW4zMiBjb25zb2xlOiA8TS1VcD4gYW5kIDxNLURvd24+IGRvbid0IHdvcmsuIChHZWRkZXMpICBXZSBkb24ndCBoYXZlCisgICAgc3BlY2lhbCBrZXlzIGZvciB0aGVzZS4gIFNob3VsZCB1c2UgbW9kaWZpZXIgKyBrZXkuCis4ICAgV2luMzIgY29uc29sZTogY2Fwcy1sb2NrIG1ha2VzIG5vbi1hbHBoYSBrZXlzIHdvcmsgbGlrZSB3aXRoIHNoaWZ0LgorICAgIFNob3VsZCB3b3JrIGxpa2UgaW4gdGhlIEdVSSB2ZXJzaW9uLgorOCAgIEVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBET1MgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4gIE1ha2UgYSBkZWZpbmUgZm9yCisgICAgU1RSQ01QX0VOVigpLCBhbmQgdXNlIGl0IHdoZW4gY29tcGFyaW5nIGVudmlyb25tZW50IHZhciBuYW1lcy4KKzggICBTZXR0aW5nICdzaGVsbHNsYXNoJyBoYXMgbm8gaW1tZWRpYXRlIGVmZmVjdC4gIENoYW5nZSBhbGwgZmlsZSBuYW1lcyB3aGVuCisgICAgaXQgaXMgc2V0L3Jlc2V0PyAgT3Igb25seSB1c2UgaXQgd2hlbiBhY3R1YWxseSBleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kPworOCAgIFdoZW4gZWRpdGluZyBhIGZpbGUgb24gYSBTYW1iYSBzZXJ2ZXIsIGNhc2UgbWlnaHQgbWF0dGVyLiAgIjplIGZpbGUiCisgICAgZm9sbG93ZWQgYnkgIjplIEZJTEUiIHdpbGwgZWRpdCAiZmlsZSIgYWdhaW4sIGV2ZW4gdGhvdWdoICJGSUxFIiBtaWdodCBiZQorICAgIGFub3RoZXIgb25lLiAgU2V0IGxhc3QgdXNlZCBuYW1lIGluIGJ1Zmxpc3RfbmV3KCk/ICBGaXggZG9fZWNtZCgpLCBldGMuCis4ICAgIjpta3Nlc3Npb24iIGdlbmVyYXRlcyBhICJjZCIgY29tbWFuZCB3aGVyZSAiYWFcI2JiIiBtZWFucyBkaXJlY3RvcnkgIiNiYiIKKyAgICBpbiAiYWEiLCBidXQgaXQncyB1c2VkIGFzICJhYSNiYiIuIChSb25hbGQgSG9lbGx3YXJ0aCkKKzggICBXaGVuIGEgYnVmZmVyIGlzIGVkaXRpbmcgYSBmaWxlIGxpa2UgImZ0cDovL21hY2gvZmlsZSIsIHdoaWNoIGlzIG5vdCBnb2luZworICAgIHRvIGJlIHVzZWQgbGlrZSBhIG5vcm1hbCBmaWxlIG5hbWUsIGRvbid0IGNoYW5nZSB0aGUgc2xhc2hlcyB0bworICAgIGJhY2tzbGFzaGVzLiAoUm9uYWxkIEhvZWxsd2FydGgpCisKKworV2luZG93cyA5NToKKzggICBFZGl0aW5nIGEgZmlsZSBieSBpdCdzIHNob3J0IGZpbGUgbmFtZSBhbmQgd3JpdGluZyBpdCwgbWFrZXMgdGhlIGxvbmcgZmlsZQorICAgIG5hbWUgZGlzYXBwZWFyLiAgU2V0dGluZyAnYmFja3VwY29weScgaGVscHMuCisgICAgVXNlIEZpbmRGaXJzdEZpbGUoKS0+Y0FsdGVybmF0ZUZpbGVOYW1lIGluIGZuYW1lX2Nhc2UoKSAoR2VvcmdlIFJlaWxseSkuCis4ICAgRG9pbmcgd2lsZGNhcmQgZXhwYW5zaW9uLCB3aWxsIG1hdGNoIHRoZSBzaG9ydCBmaWxlbmFtZSwgYnV0IHJlc3VsdCBpbiB0aGUKKyAgICBsb25nIGZpbGVuYW1lIChib3RoIERKR1BQIGFuZCBXaW4zMikuCisKKworV2luMzIgY29uc29sZToKKzkgICBXaGVuIGVkaXRpbmcgYSBmaWxlIGJ5IGl0cyBzaG9ydCBmaWxlIG5hbWUsIGl0IHNob3VsZCBiZSBleHBhbmRlZCBpbnRvIGl0cworICAgIGxvbmcgZmlsZSBuYW1lLCB0byBhdm9pZCBwcm9ibGVtcyBsaWtlIHRoZXNlOiAoTWNjb2xsaXN0ZXIpCisgICAgIDEpIENyZWF0ZSBhIGZpbGUgY2FsbGVkICIuYmFzaHJjIiB1c2luZyBzb21lIG90aGVyIGVkaXRvci4KKyAgICAgMikgRHJhZyB0aGF0IGZpbGUgb250byBhIHNob3J0Y3V0IG9yIHRoZSBhY3R1YWwgZXhlY3V0YWJsZS4KKyAgICAgMykgTm90ZSB0aGF0IHRoZSBmaWxlIG5hbWUgaXMgc29tZXRoaW5nIGxpa2UgQkFTSFJDfjEKKyAgICAgNCkgR28gdG8gRmlsZS0+U2F2ZSBBcyBtZW51IGl0ZW0gYW5kIHR5cGUgIi5iYXNocmMiIGFzIHRoZSBmaWxlIG5hbWUuCisgICAgIDUpIFByZXNzICJZZXMiIHRvIGluZGljYXRlIHRoYXQgSSB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgZmlsZS4KKyAgICAgNikgTm90ZSB0aGF0IHRoZSBtZXNzYWdlICJGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIiBpcyBkaXNwbGF5ZWQKKwlhbmQgdGhlIGZpbGUgaXMgbm90IHNhdmVkLgorICAgIFVzZSBGaW5kRmlyc3RGaWxlKCkgdG8gZXhwYW5kIGEgZmlsZSBuYW1lIGFuZCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggdG8gaXRzCisgICAgbG9uZyBuYW1lLgorOCAgIEFsc28gaW1wbGVtZW50ICdjb25za2V5JyBvcHRpb24gZm9yIHRoZSBXaW4zMiBjb25zb2xlIHZlcnNpb24/ICBMb29rIGF0CisgICAgaG93IFh2aSBkb2VzIGNvbnNvbGUgSS9PIHVuZGVyIFdpbmRvd3MgTlQuCis3ICAgUmUtaW5zdGFsbCB0aGUgdXNlIG9mICRURVJNIGFuZCBzdXBwb3J0IHRoZSB1c2Ugb2YgZGlmZmVyZW50IHRlcm1pbmFscywKKyAgICBiZXNpZGVzIHRoZSBjb25zb2xlLgorOCAgIFVzZSBvZiA8YWx0Z3I+IG1vZGlmaWVyIGRvZXNuJ3Qgd29yaz8gIDUuMyB3YXMgT0suIChHYXJjaWEtU3VhcmV6L0d1Y2tlcykKKzkgICBNYXBwaW5nIDxDLVMtVGFiPiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5LiAgSG93IHRvIHNlZSB0aGUgZGlmZmVyZW5jZSB3aXRoCisgICAgPEMtUy1pPj8KKzkgICB0bXBuYW0oKSB1c2VzIGZpbGUgaW4gcm9vdCBvZiBmaWxlIHN5c3RlbTogIlxhc2RmIi4gIFRoYXQgZG9lc24ndCB3b3JrIG9uCisgICAgYSBOZXR3YXJlIG5ldHdvcmsgZHJpdmUuICBVc2Ugc2FtZSBmdW5jdGlvbiBhcyBmb3IgV2luMzIgR1VJPworOCAgIEluIG9zX3dpbjMyLmgsIEhBVkVfU1RSSUNNUCBhbmQgSEFWRV9TVFJOSUNNUCBhcmUgZGVmaW5lZCBvbmx5IGlmIF9fR05VQ19fCisgICAgaXMgbm90IGRlZmluZWQuICBTaG91bGRuJ3QgdGhhdCBiZSB0aGUgb3RoZXIgd2F5IGFyb3VuZD8KKzggICAiOndpbnBvcyIgZG9lc24ndCB3b3JrLiAgUGF0Y2ggZnJvbSBWaXBpbiBBcmF2aW5kLgorNyAgIFVzZSBTZXRDb25zb2xlQ1AoKSBhbmQgU2V0Q29uc29sZU91dHB1dENQKCkgdG8gaW1wbGVtZW50ICd0ZXJtZW5jb2RpbmcnPworICAgIEF2b2lkcyB0aGF0IGlucHV0IGFuZCBvdXRwdXQgd29yayBkaWZmZXJlbnRseS4gIE5lZWQgdG8gYmUgcmVzdG9yZWQgd2hlbgorICAgIGV4aXRpbmcuCisKKworQW1pZ2E6Cis4ICAgSW4gbWNoX2luY2hhcigpIHNob3VsZCB1c2UgY29udmVydF9pbnB1dF9zYWZlKCkgdG8gaGFuZGxlIGluY29tcGxldGUgYnl0ZQorICAgIHNlcXVlbmNlcy4KKzkgICBJbiBtY2hfZXhwYW5kcGF0aCgpIGEgIioiIGlzIHRvIGJlIGV4cGFuZGVkLCBidXQgIlwqIiBpc24ndC4gIFJlbW92ZQorICAgIGJhY2tzbGFzaGVzIGluIHJlc3VsdC4KKzggICBFeGVjdXRpbmcgYSBzaGVsbCwgb25seSBvbmUgb3B0aW9uIGZvciAnc2hlbGwnIGlzIHNlcGFyYXRlZC4gIFNob3VsZCBkbworICAgIGFsbCBvcHRpb25zLCB1c2luZyB3aGl0ZSBzcGFjZSBzZXBhcmF0aW9uLgorCisKK01hY2ludG9zaDoKKzkgICBNYWM6IFRoZSBtb3Rpb24gdHlwZSBpcyBub3Qgc3RvcmVkIG9uIHRoZSBjbGlwYm9hcmQuICBVc2luZyAiOnNldAorICAgIGNsaXBib2FyZD11bm5hbWVkIiBtYWtlcyAieXlwIiB3b3JrIGNoYXJhY3Rlcndpc2UuIChNaWNoYWVsIERlTW9uZXkpCis3ICAgTG9hZGluZyB0aGUgUGVybCBsaWJyYXJ5IG9ubHkgd29ya3Mgb24gT1MvWCAxMC4yIG9yIDEwLjMsIG5ldmVyIG9uIGJvdGguCisgICAgTG9hZCB0aGUgUGVybCBsaWJyYXJ5IGR5bmFtaWNhbGx5IHNlZSBQeXRob24gc291cmNlcyBmaWxlIGR5bmxvYWRfbWFjCisgICAgKEphY2spCisgICAgZHluYW1pYyBsaW5raW5nOiBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvdG4yMDAyL3RuMjA2NC5odG1sCis4ICAgSW5wdXR0aW5nIFVuaWNvZGUgY2hhcmFjdGVycyBkb2VzIG5vdCB3b3JrIGluIHRoZSB0ZXJtaW5hbC4gIFRoZXkgYXBwZWFyCisgICAgdG8gYXJyaXZlIGFzIHVwcGVyIGFuZCBsb3dlciBieXRlcy4gKERhdmlkIEJyb3duLCAyMDA0IEFwcmlsIDE3KQorOCAgIFR5cGluZyBVbmljb2RlIGNoYXJhY3RlcnMgZG9lc24ndCB3b3JrIGF0IGFsbCBpbiB0aGUgR1VJLgorOCAgIFBhdGNoIHRvIGFkZCAndHJhbnNwYXJlbmN5JyBvcHRpb24uICBEaXNhZHZhbnRhZ2U6IGl0J3Mgc2xvdy4gKEVja2VoYXJkCisgICAgQmVybnMsIDIwMDQgTWF5IDkpIGh0dHA6Ly9lY2tpLnRvL3ZpbS1pY25zL1RyYW5zQmFjay5kaWZmCis4ICAgUGF0Y2hlcyBmcm9tICJSYWluIERvZyIgQ3Vja2E6CisgICAgLSBndWlmb250IHNlbGVjdG9yICgyMDAyIERlYyAxNSkKKyAgICAtIHNjcm9sbGJhciAoMjAwMiBEZWMgOCkKKyAgICAtIFF1YXJ0eiBmb250cyAoMjAwMiBEZWMgOCkKKzkgICBQcm9ibGVtcyBpbiBDYXJib24gdmVyc2lvbiBmb3IgT1MgWDogKEJlbmppIEZpc2hlcikKKyAgICAtIGtleWJvYXJkIHNob3J0Y3V0cyBpbiB0aGUgbWVudXMgZ2V0IGxvc3QuCis4ICAgVGhlIFZpbS9BYm91dCBtZW51IGRvZXNuJ3Qgd29yay4KKzggICAiOmd1aSIgZG9lc24ndCBmb3JrLiAgRW5hYmxpbmcgdGhlIGNvZGUgaW4gZ3VpLmMgdG8gZm9yayBjYXVzZXMgYSBTRUdWLgorOCAgIERlZmluZSB2aW1fbWtkaXIoKSBmb3IgTWFjaW50b3NoLgorOCAgIERlZmluZSBtY2hfd3JpdGFibGUoKSBmb3IgTWFjaW50b3NoLgorOSAgIFdoZW4gRGlza0xvY2sgaXMgcnVubmluZywgdXNpbmcgYSBzd2FwIGZpbGUgY2F1c2VzIGEgY3Jhc2guICBBcHBlYXJzIHRvIGJlCisgICAgYSBwcm9ibGVtIHdpdGggd3JpdGluZyBhIGZpbGUgdGhhdCBzdGFydHMgd2l0aCBhIGRvdC4gKEdpYWNhbG9uZSkKKzkgICBPbiBHMyBNYWMsIE9TIHZlcnNpb24gOCwgY29udHJvbCBzdHJpcCBjYXVzZXMgY2hhcmFjdGVycyBtZXNzZWQgdXAgd2hlbgorICAgIHNjcm9sbGluZyAoQ1RSTC1MIGNsZWFucyBpdCB1cCkuIChCZW5qaSBGaXNoZXIpCis5ICAgT24gRzMgTWFjLCBPUyB2ZXJzaW9uIDgsIHZhcmlhYmxlLXNwZWVkIHNjcm9sbGluZyBkb2Vzbid0IHdvcmssIGFmdGVyIHR3bworICAgIHNlY29uZHMgb2Ygc2Nyb2xsaW5nIHRoZSBzY3JlZW4gZnJlZXplcy4gKEJlbmppIEZpc2hlcikKKzkgICBJbiBtYWNfZXhwYW5kcGF0aCgpIGNoZWNrIHRoYXQgaGFuZGxpbmcgb2YgYmFja3NsYXNoZXMgaXMgZG9uZSBwcm9wZXJseS4KKzggICBTdGFuZGFyZCBNYWMgc2hvcnRjdXRzIGFyZSBtaXNzaW5nLiAgKEFtZXJpZ2UpCis4ICAgSGFuZGxpbmcgb2Ygbm9uLWZpeGVkIHdpZHRoIGZvbnRzIGlzIHdyb25nLiAoQW1lcmlnZSkKKworCisiU21hbGwiIHByb2JsZW1zOgorOCAgIFdoZW4gYW4gIjplZGl0IiBpcyBpbnNpZGUgYSB0cnkgY29tbWFuZCBhbmQgdGhlIEFUVEVOVElPTiBwcm9tcHQgaXMgdXNlZCwKKyAgICB0aGUgOmNhdGNoIGNvbW1hbmRzIGFyZSBhbHdheXMgZXhlY3V0ZWQsIGFsc28gd2hlbiB0aGUgZmlsZSBpcyBlZGl0ZWQKKyAgICBub3JtYWxseS4gIFNob3VsZCByZXNldCBkaWRfZW1zZyBhbmQgdW5kbyBzaWRlIGVmZmVjdHMuICBBbHNvIG1ha2Ugc3VyZQorICAgIHRoZSBBVFRFTlRJT04gbWVzc2FnZSBzaG93cyB1cC4KKzkgICBXaGVuIHVzaW5nICI6ZSArK2VuYz1mb28gZmlsZSIgYW5kIHRoZSBmaWxlIGlzIGFscmVhZHkgbG9hZGVkIHdpdGgKKyAgICAnZmlsZWVuY29kaW5nJyBzZXQgdG8gImJhciIsIHRoZW4gZG9fZWNtZCgpIHVzZXMgdGhhdCBidWZmZXIsIGV2ZW4gdGhvdWdoCisgICAgdGhlIGZpbGVlbmNvZGluZyBkaWZmZXJzLiAgUmVsb2FkIHRoZSBidWZmZXIgaW4gdGhpcyBzaXR1YXRpb24/ICBOZWVkIHRvCisgICAgY2hlY2sgZm9yIHRoZSBidWZmZXIgdG8gYmUgdW5tb2RpZmllZC4KKzggICAiOmcvLyIgZ2l2ZXMgIlBhdHRlcm4gbm90IGZvdW5kIGVycm9yIiB3aXRoIEU0ODYuICBTaG91bGQgbm90IHVzZSB0aGUKKyAgICBlcnJvciBudW1iZXIsIGl0J3Mgbm90IGEgcmVndWxhciBlcnJvciBtZXNzYWdlLgorNyAgIFZpbXR1dG9yIGxlYXZlcyBlc2NhcGUgc2VxdWVuY2UgaW4gdGVybWluYWwuIFRoaXMgaXMgdGhlIHh0ZXJtIHJlc3BvbnNlIHRvCisgICAgcmVxdWVzdGluZyB0aGUgdmVyc2lvbiBudW1iZXIuICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorOCAgIFdoZW4gcmVkaXJlY3RpbmcgYW5kIHVzaW5nICI6c2lsZW50IiB0aGUgY3VycmVudCBjb2x1bW4gZm9yIGRpc3BsYXlpbmcgYW5kCisgICAgcmVkaXJlY3Rpb24gY2FuIGJlIGRpZmZlcmVudC4gIFVzZSBhIHNlcGFyYXRlIHZhcmlhYmxlIHRvIGhvbGQgdGhlIGNvbHVtbgorICAgIGZvciByZWRpcmVjdGlvbi4KKzcgICBUaGVyZSBpcyBubyB3YXkgdG8gY2hhbmdlIGRpcmVjdG9yeSBhbmQgZ28gYmFjayB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2NhbAorICAgIGFuZC9vciBnbG9iYWwgZGlyZWN0b3J5LiAgQWRkIGEgd2F5IHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IHdpbmRvdyB1c2VzCisgICAgYSBsb2NhbCBkaXJlY3RvcnkuICBBZGQgY2RjbWQoKSB0aGF0IHJldHVybnMgIjpjZCIgb3IgIjpsY2QiPworNyAgIEFmdGVyIHJ1bm5pbmcgIm1ha2UgdGVzdCIgdGhlIHdpbmRvdyB0aXRsZSBpcyBzb21ldGltZXMgbm90IHJlc3RvcmVkLgorICAgIE1vc3RseSBzdGlja3MgYXQgInRlc3QzLmluIiwgYnV0IG5vdCBhbHdheXMuICBBcHBlYXJzIHRvIGhhcHBlbiBtb3JlIG9mdGVuCisgICAgd2hlbiBjb21waWxlZCB3aXRoIFB5dGhvbiAodGhyZWFkaW5nKS4KKzcgICBUaGUgbWVzc2FnZXMgZm9yICJ2aW0gLS1oZWxwIiBhbmQgInZpbSAtLXZlcnNpb24iIGRvbid0IHVzZQorICAgICd0ZXJtZW5jb2RpbmcnLgorNyAgIEFUVEVOVElPTiBkaWFsb2cgY2hvaWNlcyBhcmUgbW9yZSBsb2dpY2FsIHdoZW4gIkRlbGV0ZSBpdCcgYXBwZWFycyBiZWZvcmUKKyAgICAiUXVpdCIuICBQYXRjaCBieSBSb2JlcnQgV2ViYiwgMjAwNCBNYXkgMy4KKzggICBXaGVuICdzY3JvbGxiaW5kJyBpcyBzZXQsIGEgd2luZG93IHdvbid0IHNjcm9sbCBob3Jpem9udGFsbHkgaWYgdGhlIGN1cnNvcgorICAgIGxpbmUgaXMgdG9vIHNob3J0LiAgQWRkIGEgd29yZCBpbiAnc2Nyb2xsb3B0JyB0byBhbGxvdyBtb3ZpbmcgdGhlIGN1cnNvcgorICAgIHRvIGxvbmdlciBsaW5lIHRoYXQgaXMgdmlzaWJsZS4gIEEgc2ltaWxhciB0aGluZyBpcyBkb25lIGZvciB0aGUgR1VJIHdoZW4KKyAgICB1c2luZyB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIuCis3ICAgVmlzVmltIGNhbiBvbmx5IG9wZW4gb25lIGZpbGUuICBIYXJkIHRvIHNvbHZlOiBlYWNoIG9wZW5lZCBmaWxlIGlzIHBhc3NlZAorICAgIHdpdGggYSBzZXBhcmF0ZSBpbnZvY2F0aW9uLCB3b3VsZCBuZWVkIHRvIHVzZSB0aW1lc3RhbXBzIHRvIGtub3cgdGhlCisgICAgaW52b2NhdGlvbnMgYmVsb25nIHRvZ2V0aGVyLgorOCAgIFdoZW4gZ2l2aW5nIGEgIjpid2lwZW91dCIgY29tbWFuZCBhIGZpbGUtY2hhbmdlZCBkaWFsb2cgbWF5IHBvcHVwIGZvciB0aGlzCisgICAgYnVmZmVyLCB3aGljaCBpcyBwb2ludGxlc3MuICAoTWlrZSBXaWxsaWFtcykKKzggICBPbiBNUy1XaW5kb3dzICI6bWFrZSIgZG9lc24ndCBzaG93IG91dHB1dCB3aGlsZSBpdCBpcyB3b3JraW5nLiAgVXNlIHRoZQorICAgIHRlZS5leGUgZnJvbSAgaHR0cDovL3VueHV0aWxzLnNvdXJjZWZvcmdlLm5ldC8gPyAgQWJvdXQgMTYgS2J5dGUgaW4gdGhlCisgICAgVW54VXRpbHMuemlwIGFyY2hpdmUuCisgICAgQWx0ZXJuYXRlIG9uZTogaHR0cDovL3d3dy5wcmFtb2R4LjIwbS5jb20vdGVlX2Zvcl93aW4zMi5odG0sIGJ1dCBXYWx0ZXIKKyAgICBCcmlzY29lIHNheXMgaXQncyBub3QgYXMgZ29vZC4KKzggICAnZmlsbGNoYXJzJyBkb2Vzbid0IHdvcmsgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKzkgICBFZGl0aW5nIGEgWE1MIGZpbGUgd2l0aCBhIGxvbmcgbGluZSBpcyBleHRyZW1lbHkgc2xvdy4gIEV4YW1wbGUgZmlsZSBmcm9tCisgICAgUmFuZHkgUGFya2VyIChEZWMgMTMpLiAgRWRpdGluZyB0aGUgZGljdGlvbmFyaWVzIGZvciBlbmdzcGNoayBwbHVnaW4gd2l0aAorICAgIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgYWxzbyB2ZXJ5IHNsb3cuCisgICAgTGltaXQgdGhlIHNlYXJjaGluZyBmb3IgaXRlbXMgdG8gYSBmZXcgaHVuZHJlZCBjaGFyYWN0ZXJzPworOCAgIENvbW1hbmQgbGluZSBjb21wbGV0aW9uOiBidWZmZXJzICJmb28udHh0IiBhbmQgIi4uL2IvZm9vLnR4dCIsIGNvbXBsZXRpbmcKKyAgICAiOmJ1ZiBmb288VGFiPiIgZG9lc24ndCBmaW5kIHRoZSBzZWNvbmQgb25lLiAoR2VvcmdlIFYuIFJlaWxseSkKKzcgICBPdXRwdXQgZm9yICI6c2NyaXB0bmFtZXMiIGFuZCAiOmJyZWFrbGlzdCIgc2hvdWxkIHNob3J0ZW4gdGhlIGZpbGUgbmFtZXM6CisgICAgdXNlICJ+LyIgd2hlbiBwb3NzaWJsZS4KKzggICBBZnRlciB1c2luZyBkaWZmIG1vZGUsICI6c2V0IG5vZGlmZiIgZG9lc24ndCByZXN0b3JlIHRoZSBvbGQgZm9sZG1ldGhvZC4KKyAgICAoVGhvbWFzIFMuIFVyYmFuKQorNyAgIG1iX29mZjJjZWxscygpIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgb24gdGhlIHRhaWwgYnl0ZSBvZiBhIGRvdWJsZS1ieXRlCisgICAgY2hhcmFjdGVyLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKSAgSXQgc2hvdWxkIHJldHVybiAxIHdoZW4gdXNlZCBvbiBhIHRhaWwKKyAgICBieXRlLCBsaWtlIGZvciB1dGYtOC4gIFN0b3JlIHNlY29uZCBieXRlIG9mIGRvdWJsZS1ieXRlIGluIFNjcmVlbkxpbmVzMltdCisgICAgKGxpa2UgZm9yIERCQ1NfSlBOVSkgYW5kIHB1dCBhIHplcm8gaW4gdGhlIHNlY29uZCBieXRlIChsaWtlIGZvciBVVEYtOCkuCis4ICAgJ2JhY2t1cGRpcicgYW5kICdkaXJlY3RvcnknIHNob3VsZCB1c2UgJFRNUERJUiwgJFRNUCBhbmQvb3IgJFRFTVAgd2hlbgorICAgIGRlZmluZWQuCis3ICAgSW5zaWRlIGEgZnVuY3Rpb24gd2l0aCAicGVybCA8PEVPRiIgYSBsaW5lIHdpdGggIiRpKysiIGlzIHJlY29nbml6ZWQgYXMgYW4KKyAgICAiOmluc2VydCIgY29tbWFuZCwgY2F1c2luZyB0aGUgZm9sbG93aW5nICJlbmRmdW5jdGlvbiIgbm90IHRvIGJlIGZvdW5kLgorICAgIEFkZCBza2lwcGluZyB0aGlzIHBlcmwgY29uc3RydWN0aW9uIGluc2lkZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKzcgICBXaGVuICd0dGltZW91dGxlbicgaXMgMTAgYW5kICd0aW1lb3V0bGVuJyBpcyAxMDAwLCB0aGVyZSBpcyBhIGtleWNvZGUKKyAgICAiPEVzYz5hIiBhbmQgYSBtYXBwaW5nIDxFc2M+eCIsIHdoZW4gdHlwaW5nICI8RXNjPmEiIHdpdGggaGFsZiBhIHNlY29uZAorICAgIGRlbGF5IHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgYSBrZXljb2RlLiAoSGFucyBHaW56ZWwpCis3ICAgIjpib3RyaWdodCAxIG5ldyIgdHdpY2UgY2F1c2VzIGFsbCB3aW5kb3cgaGVpZ2h0cyB0byBiZSBjaGFuZ2VkLiAgTWFrZSB0aGUKKyAgICBib3R0b20gd2luZG93IG9ubHkgYmlnZ2VyIGFzIG11Y2ggYXMgbmVlZGVkLgorNyAgICJbcCIgZG9lc24ndCB3b3JrIGluIFZpc3VhbCBtb2RlLiAoRGF2aWQgQnJvd24pCis3ICAgVGhlIEN5Z3dpbiBhbmQgTWluZ1cgbWFrZWZpbGVzIGRlZmluZSAiUEMiLCBidXQgaXQncyBub3QgdXNlZCBhbnl3aGVyZS4KKyAgICBSZW1vdmU/IChEYW4gU2hhcnApCis5ICAgVGhlIGFyZ3VtZW50IDxmLWFyZ3M+IG9mIGEgdXNlciBjb21tYW5kIGRvZXNuJ3QgaGFuZGxlIGJhY2tzbGFzaGVzCisgICAgcHJvcGVybHkuICJDbWQgXCBlIiBpcyBvbmUgYXJndW1lbnQsICJDbWQgXFwgZSIgc3RpbGwgaXMgb25lIGFyZ3VtZW50LgorICAgICJDbWQgXCAgZSIgaXMgdHdvIGFyZ3VtZW50cywgZmlyc3Qgb25lIGVuZGluZyBpbiBzcGFjZS4gKEtvbnRyYSBHZXJnZWx5KQorOSAgIFVzZXIgY29tbWFuZHMgdXNlIHRoZSBjb250ZXh0IG9mIHRoZSBzY3JpcHQgdGhleSB3ZXJlIGRlZmluZWQgaW4uICBUaGlzCisgICAgY2F1c2VzIGEgInM6dmFyIiBhcmd1bWVudCB0byB1bmV4cGVjdGVkbHkgdXNlIGEgdmFyaWFibGUgaW4gdGhlIGRlZmluaW5nCisgICAgc2NyaXB0LCBub3QgdGhlIGNhbGxpbmcgc2NyaXB0LiAgQWRkIGFuIGFyZ3VtZW50IHRvICI6Y29tbWFuZCI6CisgICAgIi1rZWVwY29udGV4dCIuICBEbyByZXBsYWNlIDxTSUQ+LCBzbyB0aGF0IGEgZnVuY3Rpb24gaW4gdGhlIGRlZmluaW5nCisgICAgc2NyaXB0IGNhbiBiZSBjYWxsZWQuCis4ICAgVGhlIEphcGFuZXNlIG1lc3NhZ2UgdHJhbnNsYXRpb25zIGZvciBNUy1XaW5kb3dzIGFyZSBjYWxsZWQgamEuc2ppcy5wbywKKyAgICBidXQgdGhleSB1c2UgZW5jb2RpbmcgY3A5MzIuICBSZW5hbWUgdGhlIGZpbGUgYW5kIGNoZWNrIHRoYXQgaXQgc3RpbGwKKyAgICB3b3Jrcy4KKzkgICBXaGVuIGEgc3ludGF4IHJlZ2lvbiBkb2VzIG5vdCB1c2UgImtlZXBlbmQiIGFuZCBhIGNvbnRhaW5lZCBpdGVtIGRvZXMgdXNlCisgICAgImV4dGVuZCIsIHRoaXMgbWFrZXMgdGhlIG91dGVyIHJlZ2lvbiBzdG9wIGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRhaW5lZAorICAgIHJlZ2lvbi4gKEx1dHogRXltZXJzKSAgQW5vdGhlciBleGFtcGxlIE5vdiAxNCAyMDAyLgorOCAgIEEgdmVyeSBsb25nIG1lc3NhZ2UgaW4gY29uZmlybSgpIGNhbid0IGJlIHF1aXQuICBNYWtlIHRoaXMgcG9zc2libGUgd2l0aAorICAgIENUUkwtQy4KKzcgICBjbGlwX3gxMV9vd25fc2VsZWN0aW9uKCkgdXNlcyBDdXJyZW50VGltZSwgdGhhdCBpcyBub3QgYWxsb3dlZC4gIFZOQyBYCisgICAgc2VydmVyIGhhcyBhIHByb2JsZW0gd2l0aCB0aGlzLiAgKE1hcmsgV2FnZ29uZXIpIFJlbWVtYmVyaW5nIHRoZSB0aW1lc3RhbXAKKyAgICBvZiBldmVudHMgaXNuJ3QgYWx3YXlzIHBvc3NpYmxlLiAgV2UgZG9uJ3QgZ2V0IHRoZW0gaW4gYW4geHRlcm0uICBHVEsKKyAgICBkb2Vzbid0IG9idGFpbiB0aGUgc2VsZWN0aW9uIGFnYWluIHdoZW4gdGhlIHRpbWVzdGFtcCBkaWZmZXJzLCB0aHVzIGl0CisgICAgd29uJ3Qgd29yayBmb3IgR1RLIGFueXdheS4KKzggICBXaGVuIHRoZSBjbGlwYm9hcmQgaXNuJ3Qgc3VwcG9ydGVkOiAiOnlhbmsqIiBnaXZlcyBhIGNvbmZ1c2luZyBlcnJvcgorICAgIG1lc3NhZ2UuICBTcGVjaWZpY2FsbHkgbWVudGlvbiB0aGF0IHRoZSByZWdpc3RlciBuYW1lIGlzIGludmFsaWQuCis4ICAgImdmIiBhbHdheXMgZXhjbHVkZXMgdHJhaWxpbmcgcHVuY3R1YXRpb24gY2hhcmFjdGVycy4gZmlsZV9uYW1lX2luX2xpbmUoKQorICAgIGlzIGN1cnJlbnRseSBmaXhlZCB0byB1c2UgIi4sOjshIi4gIEFkZCBhbiBvcHRpb24gdG8gbWFrZSB0aGlzCisgICAgY29uZmlndXJhYmxlPworOCAgICdoa21hcCcgc2hvdWxkIHByb2JhYmx5IGJlIGdsb2JhbC1sb2NhbC4KKzkgICBXaGVuICIkIiBpcyBpbiAnY3BvcHRpb25zJyBhbmQgZm9sZGluZyBpcyBhY3RpdmUsIGEgIkMiIGNvbW1hbmQgY2hhbmdlcworICAgIHRoZSBmb2xkcyBhbmQgcmVzZXRzIHdfbGluZXNfdmFsaWQuICBUaGUgZGlzcGxheSB1cGRhdGluZyBkb2Vzbid0IHdvcmsKKyAgICB0aGVuLiAoUHJpdGVzaCBNaXN0cnkpCis4ICAgIjpzIWZyb20hdG8hIiB3b3JrcywgYnV0ICI6c21hZ2ljIWZyb20hdG8hIiBkb2Vzbid0LiAgSXQgc2VlcyB0aGUgIiEiIGFzIGEKKyAgICBmbGFnIHRvIHRvIHRoZSBjb21tYW5kLiAgU2FtZSBmb3IgIjpzbm9tYWdpYyIuIChKb2hhbiBTcGV0eikKKzggICBVc2luZyAiOnMiIGluIGEgZnVuY3Rpb24gY2hhbmdlcyB0aGUgcHJldmlvdXMgcmVwbGFjZW1lbnQgc3RyaW5nLiAgU2F2ZQorICAgICJvbGRfc3ViIiBpbiBzYXZlX3NlYXJjaF9wYXR0ZXJucygpPworOCAgIFdoZW4gYXBwZW5kaW5nIHRvIGEgZmlsZSBhbmQgJ3BhdGNobW9kZScgaXNuJ3QgZW1wdHksIGEgYmFja3VwIGZpbGUgaXMKKyAgICBhbHdheXMgd3JpdHRlbiwgZXZlbiB3aGVuIHRoZSBvcmlnaW5hbCBmaWxlIGFscmVhZHkgZXhpc3RzLgorNyAgIFdoZW4gdXNpbmcgImRhdyIgb24gdGhlIGxhc3Qgd29yZCBpbiBhIGZpbGUgYW5kIHRoaXMgaXMgYSBzaW5nbGUgbGV0dGVyLAorICAgIG5vdGhpbmcgaXMgZGVsZXRlZC4gIFNob3VsZCBkZWxldGUgdGhlIGxldHRlciBhbmQgcHJlY2VkaW5nIHdoaXRlIHNwYWNlLgorOSAgIFdoZW4gZ2V0dGluZyBmb2N1cyB3aGlsZSB3cml0aW5nIGEgbGFyZ2UgZmlsZSwgY291bGQgd2FybiBmb3IgdGhpcyBmaWxlCisgICAgYmVpbmcgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbS4gIEF2b2lkIGNoZWNraW5nIHRoaXMgd2hpbGUgdGhlIGZpbGUgaXMgYmVpbmcKKyAgICB3cml0dGVuLgorOSAgIFRoZSAiRXJyb3IgZGV0ZWN0ZWQgd2hpbGUgcHJvY2Vzc2luZyBtb2RlbGluZXMiIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYW4KKyAgICBlcnJvciBudW1iZXIuCis3ICAgVGhlIG1lc3NhZ2UgaW4gYnRfZG9udHdyaXRlX21zZygpIGNvdWxkIGJlIGNsZWFyZXIuCis4ICAgVW5peDogV2hlbiBsaWJjYWxsKCkgZmFpbHMgdGhlcmUgaXMgbm8gY2xlYXIgZXJyb3IgbWVzc2FnZS4gIEpvaGFubmVzCisgICAgWmVsbG5lciBoYXMgYSBwYXRjaCBmb3IgdGhpcy4KKzggICBUaGUgc2NyaXB0IElEIHRoYXQgaXMgc3RvcmVkIHdpdGggYW4gb3B0aW9uIGFuZCBkaXNwbGF5ZWQgd2l0aCAiOnZlcmJvc2UKKyAgICBzZXQiIGlzbid0IHJlc2V0IHdoZW4gdGhlIG9wdGlvbiBpcyBzZXQgaW50ZXJuYWxseS4gIEZvciBleGFtcGxlIHdoZW4KKyAgICAnZm9sZGxldmVsJyBpcyBzZXQgZnJvbSAnZm9sZGxldmVsc3RhcnQnLgorOCAgIEluIHRoZSBmaWxlZm9ybWF0IGRpYWxvZywgIkNhbmNlbCIgaXNuJ3QgdHJhbnNsYXRlZC4gIEFkZCBhIGdsb2JhbAorICAgIHZhcmlhYmxlIGZvciB0aGlzLiAoRWR1YXJkbyBGZXJuYW5kZXopCis5ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSB3aXRoICdyZWFkb25seScgc2V0LCB0aGVyZSBpcyBubyBjaGVjayBmb3IgYW4gZXhpc3RpbmcKKyAgICBzd2FwIGZpbGUuICBUaGVuIHVzaW5nICI6d3JpdGUiICh3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcykgZG9lc24ndCBnaXZlCisgICAgYSB3YXJuaW5nIGVpdGhlci4gIFNob3VsZCBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3dhcCBmaWxlIHdpdGhvdXQgY3JlYXRpbmcKKyAgICBvbmUuCis3ICAgT24gTVMtRE9TIG9yIE1TLVdpbmRvd3MsIHdoZW4gZWRpdGluZyB0aGUgc2FtZSBmaWxlIG92ZXIgYSBuZXR3b3JrLCB0aGUKKyAgICBkcml2ZSBsZXR0ZXIgaXMgZGlmZmVyZW50LCB0aHVzIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSBkb2Vzbid0IGdlbmVyYXRlIGEKKyAgICB3YXJuaW5nLiAgVXNlIHNvbWUgZmxhZyB0byBpbmRpY2F0ZSB0aGUgc3dhcCBmaWxlIGlzIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgIGFzIHRoZSBvcmlnaW5hbCBmaWxlPyAgQ291bGQgbWFrZSBiMF9mbmFtZVtdIHN0YXJ0IHdpdGggYSBzcGVjaWFsCisgICAgY2hhcmFjdGVyIGxpa2UgIj4iLgorNyAgIFdoZW4gJ3Nob3dicmVhaycgaXMgc2V0LCB0aGUgYW1vdW50IG9mIHNwYWNlIGEgVGFiIG9jY3VwaWVzIGNoYW5nZXMuCisgICAgU2hvdWxkIHdvcmsgbGlrZSAnc2hvd2JyZWFrJyBpcyBpbnNlcnRlZCB3aXRob3V0IGNoYW5naW5nIHRoZSBUYWJzLgorNyAgIFdoZW4gdGhlcmUgaXMgYSAiaGVscC50eHQiIHdpbmRvdyBpbiBhIHNlc3Npb24gZmlsZSwgcmVzdG9yaW5nIHRoYXQKKyAgICBzZXNzaW9uIHdpbGwgbm90IGdldCB0aGUgIkxPQ0FMIEFERElUSU9OUyIgYmFjay4KKzcgICBXaGVuICdtb3VzZWZvY3VzJyBpcyBzZXQgYW5kIHN3aXRjaGluZyB0byBhbm90aGVyIHdpbmRvdyB3aXRoIGEgdHlwZWQKKyAgICBjb21tYW5kLCB0aGUgbW91c2UgcG9pbnRlciBtYXkgYmUgbW92ZWQgdG8gYSBwYXJ0IG9mIHRoZSB3aW5kb3cgdGhhdCdzCisgICAgY292ZXJlZCBieSBhbm90aGVyIHdpbmRvdyBhbmQgd2UgbG9zZSBmb2N1cy4gIE9ubHkgbW92ZSBpbiB0aGUgeQorICAgIGRpcmVjdGlvbiwgbm90IGhvcml6b250YWxseT8KKzggICBXaGVuIHVzaW5nIENUUkwtRCBhZnRlciAiOmhlbHAiLCByZXN0cmljdCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgdG8gYQorICAgIHRob3VzYW5kLCBvdGhlcndpc2UgdXNpbmcgQ1RSTC1EIHdpdGhvdXQgYW4gYXJndW1lbnQgdGFrZXMgdG9vIGxvbmcuCis4ICAgIjpoYXJkY29weSI6CisgICAgLSBQYXRjaCB0byBhcHBlbmQgQ1RSTC1EIHRvIFBvc3RTY3JpcHQgb3V0cHV0IChNaWtlIFdpbGxpYW1zLCAyMDA0IEp1biAxMSkKKyAgICAtIFVzaW5nIHRoZSBjdGVybV9jb2xvcltdIHRhYmxlIGlzIHdyb25nIHdoZW4gdF9jb2xvcnMgaXMgPiAxNi4KKyAgICAtIE5lZWQgdG8gaGFuZGxlIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMuCisgICAgLSBXaW4zMjogT24gYSBCJlcgcHJpbnRlciBzeW50YXggaGlnaGxpZ2h0aW5nIGlzbid0IHZpc2libGUuICBQZXJmb3JtCisgICAgICBkaXRoZXJpbmcgdG8gbWFrZSBncmV5IHRleHQ/CisgICAgLSBzdXBwb3J0IHByaW50aW5nIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gIFBhdGNoIGZyb20gTW90b25vYnUgSWNoaW11cmEuCisgICAgICBOZXcgKGJldHRlcikgcGF0Y2ggZnJvbSBNaWtlIFdpbGxpYW1zICgyMDA0IEphbiAyMCkKKyAgICAtIEFkZCBhIGZsYWcgaW4gJ3ByaW50b3B0aW9ucycgdG8gYWRkIGFuIGVtcHR5IHBhZ2UgdG8gbWFrZSB0aGUgdG90YWwKKyAgICAgIG51bWJlciBldmVuLiAgImFkZGVtcHR5Ij8gKE1pa2UgV2lsbGlhbXMpCisgICAgLSBTaG91bGQgaW50ZXJwcmV0ZWQgQ1RSTC1MIGFzIGEgcGFnZSBicmVhay4KKyAgICAtIEdyZXkgbGluZSBudW1iZXJzIGFyZSBub3QgYWx3YXlzIHJlYWRhYmxlLiAgQWRkIGZpZWxkIGluICdwcmludG9wdGlvbnMnLgorICAgICAgRGVmYXVsdCB0byBibGFjayB3aGVuIG5vIHN5bnRheCBoaWdobGlnaHRpbmcuCisgICAgLSBCZSBhYmxlIHRvIHByaW50IGEgd2luZG93IGluIGRpZmYgbW9kZS4KKyAgICAtIEJlIGFibGUgdG8gc3BlY2lmeSBhIGNvbG9yc2NoZW1lIHRvIHVzZSBmb3IgcHJpbnRpbmcuICBBbmQgYSBzZXBhcmF0ZQorICAgICAgb25lIGZvciBCJlcgcHJpbnRpbmcgKGlmIHRoYXQgY2FuIGJlIGRldGVjdGVkKS4KKzggICBJbiBWaXN1YWwgYmxvY2sgbW9kZSB3aXRoICdsYnInIHNldCwgYSBjaGFuZ2UgY29tbWFuZCBkb2Vzbid0IGluc2VydCB0aGUKKyAgICB0ZXh0IGluIGZvbGxvd2luZyBsaW5lcyB3aGVyZSB0aGUgbGluZWJyZWFrIGNoYW5nZXMuCis5ICAgZG9zaW5zdC5jOiBUaGUgREpHUFAgdmVyc2lvbiBjYW4ndCB1bmluc3RhbGwgdGhlIFVuaW5zdGFsbCByZWdpc3RyeSBrZXkgb24KKyAgICBXaW5kb3dzIE5ULiAgSG93IHRvIGluc3RhbGwgYSAuaW5mIGZpbGUgb24gV2luZG93cyBOVCBhbmQgaG93IHRvIGRldGVjdAorICAgIHRoYXQgV2luZG93cyBOVCBpcyBiZWluZyB1c2VkPworOCAgIFdoZW4gb3BlbmluZyB0aGUgc2FtZSBmaWxlIG9uIFVuaXggYW5kIG9uIE1TLVdpbmRvd3MsIHRoZXJlIGlzIG5vCisgICAgQVRURU5USU9OIG1lc3NhZ2UsIGJlY2F1c2UgdGhlIHBhdGggaW4gdGhlIHN3YXAgZmlsZSBpcyBkaWZmZXJlbnQuICBVc2luZworICAgIGEgcmVsYXRpdmUgcGF0aCBuYW1lIHdpbGwgY2F1c2Ugbm8gQVRURU5USU9OIGZvciBWaW0gNS44LgorICAgIFNvbWVob3cgYWRkIGEgZmxhZyB0aGF0IHRoZSBzd2FwIGZpbGUgaXMgaW4gdGhlIHNhbWUgZGlyIGFzIHRoZSBmaWxlPworOCAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyAiYmxvY2ssaW5zZXJ0IiBhbmQgZW5jb2RpbmcgaXMgInV0Zi04Iiwgc2VsZWN0aW5nIGEKKyAgICBibG9jayBvZiBvbmUgZG91YmxlLXdpZGUgY2hhcmFjdGVyLCB0aGVuICJkIiBkZWxldGVzIG9ubHkgaGFsZiBvZiBpdC4KKzggICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0LCBzaG91bGQgIkkiIGluIGJsb2Nrd2lzZSB2aXN1YWwgbW9kZSBhbHNvIGluc2VydAorICAgIGluIGxpbmVzIHRoYXQgZG9uJ3QgZXh0ZW5kIGludG8gdGhlIGJsb2NrPworOCAgIFdpdGggJ3ZpcnR1YWxlZGl0JyBzZXQsIGluIEluc2VydCBtb2RlIGp1c3QgYWZ0ZXIgdGhlIGVuZCBvZiBsaW5lLCBDVFJMLU8KKyAgICB5aCBkb2VzIG5vdCB5YW5rIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGluZS4gKFBhdmVsIFBhcHVzaGV2KQorICAgIERvaW5nICJobCIgZmlyc3QgYXBwZWFycyB0byBtYWtlIGl0IHdvcmsuCis4ICAgV2l0aCAndmlydHVhbGVkaXQnIHNldCBpdCdzIHBvc3NpYmxlIHRvIG1vdmUgaW50byB0aGUgYmxhbmsgYXJlYSBmcm9tCisgICAgJ2xpbmVicmVhaycuCis4ICAgV2l0aCAndmlydHVhbGVkaXQnIHNldCBhbmQgJ3NlbGVjdGlvbicgImV4Y2x1c2l2ZSIsIGEgVmlzdWFsIHNlbGVjdGlvbgorICAgIHRoYXQgZW5kcyBpbiBvciBhZnRlciBhIHRhYiwgImQiIGRvZXNuJ3QgZGVsZXRlIChwYXJ0IG9mKSB0aGUgdGFiLgorICAgIChIZWxtdXQgU3RpZWdsZXIpCis4ICAgV2l0aCAndmlydHVhbGVkaXQnIHNldCwgYSBibG9ja3dpc2UgVmlzdWFsIHNlbGVjdGlvbiB0aGF0IHN0YXJ0cyBhbmQgZW5kcworICAgIGluIGEgdGFiLCAiPCIgc2hpZnRzIHRvbyBtdWNoLiAoSGVsbXV0IFN0aWVnbGVyKQorOSAgIFdoZW4ganVtcGluZyB0byBhIHRhZywgdGhlIHNlYXJjaCBwYXR0ZXJuIGlzIHB1dCBpbiB0aGUgaGlzdG9yeS4gIFdoZW4KKyAgICAnbWFnaWMnIGlzIG9uLCB0aGUgcGF0dGVybiBtYXkgbm90IHdvcmsuICBUcmFuc2xhdGUgdGhlIHBhdHRlcm4gZGVwZW5kaW5nCisgICAgb24gcF9tYWdpYyB3aGVuIHB1dHRpbmcgaXQgaW4gdGhlIGhpc3Rvcnk/ICBBbHRlcm5hdGl2ZTogU3RvcmUgdmFsdWUgb2YKKyAgICAnbWFnaWMnIGluIGhpc3RvcnkuICAoTWFyZ28pCis5ICAgb3B0d2luLnZpbTogUmVzdG9yaW5nIGEgbWFwcGluZyBmb3IgPFNwYWNlPiBvciA8Q1I+IGlzIG5vdCBjb3JyZWN0IGZvcgorICAgICI6bm9yZW1hcCIuICBBZGQgIm1hcGNtZCh7c3RyaW5nfSwge21vZGV9KT8gIFVzZSBjb2RlIGZyb20gIjpta2V4cmMiLgorOSAgIGluY3NlYXJjaCBpcyBpbmNvcnJlY3QgZm9yICIvdGhhdC88UmV0dXJuPi90aGlzLzsvLyIgKGxhc3Qgc2VhcmNoIHBhdHRlcm4KKyAgICBpc24ndCB1cGRhdGVkKS4KKzkgICB0ZXJtX2NvbnNvbGUgaXMgdXNlZCBiZWZvcmUgaXQgaXMgc2V0IChtc2RvcywgQW1pZ2EpLgorOSAgIEdldCBvdXQtb2YtbWVtb3J5IGZvciAiOmcvXi8sJHMvL0AvIiBvbiAxMDAwIGxpbmVzLCB0aGlzIGlzIG5vdCBoYW5kbGVkCisgICAgY29ycmVjdGx5LiAgR2V0IG1hbnkgZXJyb3IgbWVzc2FnZXMgd2hpbGUgcmVkcmF3aW5nIHRoZSBzY3JlZW4sIHdoaWNoCisgICAgY2F1c2UgYW5vdGhlciByZWRyYXcsIGV0Yy4KKzggICBbPEMtST4gZG9lc24ndCB3b3JrIHdoZW4gJyonIGlzIGluICdpc2tleXdvcmQnLiAgZmluZF9wYXR0ZXJuX2luX3BhdGgoKQorICAgIG11c3QgZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4KKzggICBWaW0gY2FuIG92ZXJ3cml0ZSBhIHJlYWQtb25seSBmaWxlIHdpdGggIjp3ISIuICAiOnciIGNhbid0IG92ZXJ3cml0ZSBhbgorICAgIGV4aXN0aW5nIGZpbGUsICJ3ISIgY2FuLCBidXQgcGVyaGFwcyBub3QgYSByZWFkLW9ubHkgZmlsZT8gIFRoZW4gdXNlCisgICAgIjp3ISEiIGZvciB0aGF0LgorICAgIE9yIGFzayBmb3IgcGVybWlzc2lvbiB0byBvdmVyd3JpdGUgaXQgKGlmIGZpbGUgY2FuIGJlIG1hZGUgd3JpdGFibGUpIGFuZAorICAgIHJlc3RvcmUgZmlsZSB0byByZWFkb25seSBhZnRlcndhcmRzLgorNyAgIFdoZW4gY29tcGlsZWQgd2l0aCAieHRlcm1fY2xpcGJvYXJkIiwgc3RhcnR1cCBjYW4gYmUgc2xvd2VyIGFuZCBtaWdodCBnZXQKKyAgICBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkICRESVNQTEFZLiAgVHJ5IGNvbm5lY3RpbmcgdG8gdGhlIFggc2VydmVyIGluIHRoZQorICAgIGJhY2tncm91bmQgKGZvcmtlZCksIHNvIHRoYXQgVmltIHN0YXJ0cyB1cCBxdWlja2VyPyAgQ29ubmVjdCBhcyBzb29uIGFzCisgICAgdGhlIGNsaXBib2FyZCBpcyB0byBiZSB1c2VkIChWaXN1YWwgc2VsZWN0IG1vZGUgc3RhcnRzLCBwYXN0ZSBmcm9tCisgICAgY2xpcGJvYXJkKQorNyAgIFgxMTogU29tZSBwZW9wbGUgcHJlZmVyIHRvIHVzZSBDTElQQk9BUkQgaW5zdGVhZCBvZiBQUklNQVJZIGZvciB0aGUgbm9ybWFsCisgICAgc2VsZWN0aW9uLiAgQWRkIGFuICJ4Y2xpcGJvYXJkIiBhcmd1bWVudCB0byB0aGUgJ2NsaXBib2FyZCcgb3B0aW9uPyAoTWFyaworICAgIFdhZ2dvbmVyKQorOCAgIEZvciB4dGVybSBuZWVkIHRvIG9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSBYIHNlcnZlciB0byBnZXQgdGhlIHdpbmRvdworICAgIHRpdGxlLCB3aGljaCBjYW4gYmUgc2xvdy4gIENhbiBhbHNvIGdldCB0aGUgdGl0bGUgd2l0aCAiPEVzYz5bMjF0Iiwgbm8KKyAgICBuZWVkIHRvIHVzZSBYMTEgY2FsbHMuICBUaGlzIHJldHVybnMgIjxFc2M+XWx7dGl0bGV9PEVzYz5cIi4KKzggICBXaGVuIHRoZSBidWlsdGluIHh0ZXJtIHRlcm1jYXAgY29udGFpbnMgY29kZXMgdGhhdCBhcmUgbm90IHdhbnRlZCwgbmVlZCBhCisgICAgd2F5IHRvIGF2b2lkIHVzaW5nIHRoZSBidWlsdGluIHRlcm1jYXAuCis4ICAgWHRlcm0gc2VuZHMgXltbSCBmb3IgPEhvbWU+IGFuZCBeW1tGIGZvciA8RW5kPiBpbiBzb21lIG1vZGUuICBBbHNvCisgICAgcmVjb2duaXplIHRoZXNlIGtleXM/ICBNb3N0bHkgdXNlZnVsIGZvciB4dGVybSBzaW11bGF0b3JzLCBsaWtlIGdub21ldGVybS4KKyAgICBTZWUgaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0ZXJtLmZhcS5odG1sI3h0ZXJtX3BjX3N0eWxlLgorOCAgICdbIGFuZCAnXSBzaG91bGQgYmUgc2V0IHRvIHN0YXJ0L2VuZCBvZiBsaW5lIHdoZW4gdXNpbmcgYSBsaW5ld2lzZSBvcGVyYXRvcgorICAgIChlLmcuLCAiOnciKS4KKzggICBDVFJMLUEgY2FuJ3QgaGFuZGxlIGJpZyAibG9uZyIgbnVtYmVycywgdGhleSBiZWNvbWUgbmVnYXRpdmUuICBDaGVjayBmb3IKKyAgICAiLSIgY2hhcmFjdGVyLCBpZiBub3QgcHJlc2VudCwgdXNlIHVuc2lnbmVkIGxvbmcuCis4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgIiMiIGluIHRoZSBmaXJzdCBjb2x1bW4KKyAgICBmb3IgIj4+Ii4KKzggICBBZGQgc3VzcGVuZGluZyB3aXRoIENUUkwtWiBhdCB0aGUgIm1vcmUiIHByb21wdCwgYW5kIHdoZW4gZXhlY3V0aW5nIGEgbG9uZworICAgIHNjcmlwdCBpbiBkb19jbWRsaW5lKCkuCis4ICAgV2hlbiB1c2luZyAnaGlkZGVuJywgbWFueSBzd2FwIGZpbGVzIHdpbGwgYmUgb3Blbi4gIFdoZW4gVmltIHJ1bnMgaW50byB0aGUKKyAgICBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGVzLCBlcnJvciBtZXNzYWdlcyB3aWxsIGFwcGVhci4gIERldGVjdCB0aGF0CisgICAgdGhpcyBwcm9ibGVtIGlzIHByZXNlbnQsIGFuZCBjbG9zZSBhbnkgaGlkZGVuIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZQorICAgIGNoYW5nZXMuCis4ICAgV2l0aCAndmltaW5mbycgc2V0IHN1Y2ggdGhhdCB0aGUgIi52aW1pbmZvIiBmaWxlIGlzIHdyaXR0ZW4gb24gYSBGQVQKKyAgICBmaWxlc3lzdGVtLCBhbiBpbGxlZ2FsIGZpbGUgbmFtZSBtYXkgYmUgY3JlYXRlZDogIi52aW0iLgorOCAgIEZvciBlYWNoIGJ1ZmZlciB0aGF0IGlzIG9wZW5lZCwgdGhlIHZpbWluZm8gZmlsZSBpcyBvcGVuZWQgYW5kIHJlYWQgdG8KKyAgICBjaGVjayBmb3IgZmlsZSBtYXJrcy4gIFRoaXMgY2FuIGJlIHNsb3cuCis3ICAgSW4geHRlcm0sIHJlY29nbml6ZSBib3RoIHZ0MTAwIGFuZCB2dDIyMCBjdXJzb3Iga2V5cy4gIENoYW5nZQorICAgIGFkZF90ZXJtY29kZSgpIHRvIG5vdCByZW1vdmUgYW4gZXhpc3RpbmcgZW50cnkgZm9yIGEgbmFtZSwgd2hlbiBpdCdzCisgICAgbmVlZGVkLgorICAgIE5lZWQgYSBnZW5lcmljIHNvbHV0aW9uIHRvIHJlY29nbml6ZSBkaWZmZXJlbnQgY29kZXMgZm9yIHRoZSBzYW1lIGtleS4KKzggICBDb3JlIGR1bXAgd2l0aGluIHNpZ25hbCBmdW5jdGlvbjogZ2RiIGRvZXNuJ3Qgc2hvdyBzdGFjayBiYWNrdHJhY2UhICBPcHRpb24KKyAgICB0byBza2lwIGNhdGNoX3NpZ25hbHMoKT8KKzkgICBSZXBlYXRpbmcgYSAiY3ciIHdpdGggIi4iIGRvZXNuJ3Qgd29yayBpZiB0aGUgdGV4dCB3YXMgcGFzdGVkIGZyb20gdGhlCisgICAgY2xpcGJvYXJkLiAoVGhvbWFzIEpvbmVzKSAgSXQncyBiZWNhdXNlIHRoZSBtZW51L3Rvb2xiYXIgaXRlbSBleGl0cyBJbnNlcnQKKyAgICBtb2RlIGFuZCB1c2VzICJnUCIuICBIb3cgdG8gZml4IHRoaXMgd2l0aG91dCBicmVha2luZyBpbnNlcnRpbmcgYSBibG9jayBvZgorICAgIHRleHQ/Cis4ICAgSW4gUmVwbGFjZSBtb2RlIHBhc3RpbmcgZnJvbSB0aGUgY2xpcGJvYXJkICh1c2luZyBtZW51IG9yIHRvb2xiYXIpIGluc2VydHMKKyAgICBhbGwgdGhlIHRleHQuICBBZGQgIjpybWVudSI/Cis4ICAgUGFzdGluZyB3aXRoIHRoZSBtb3VzZSBpbiBSZXBsYWNlIG1vZGUgaW5zZXJ0cyB0aGUgdGV4dCwgaW5zdGVhZCBvZgorICAgIG92ZXJ3cml0aW5nLCB3aGVuIGl0IGlzIG1vcmUgdGhhbiBvbmUgbGluZS4gIFNhbWUgZm9yIHVzaW5nIDxDLVI+LgorOSAgIENUUkwtRSBhbmQgQ1RSTC1ZIGRvbid0IHdvcmsgaW4gc21hbGwgd2luZG93IHdoZW4gJ3NvJyBpcyA0IGFuZCBsaW5lcyBhcmUKKyAgICB3cmFwcGluZyAoQWNldmVkby9pbi4yMjYpLiAgRS5nLiwgd2hlbiB1c2luZyBDVFJMLUUsIHdpbmRvdyBoZWlnaHQgNywKKyAgICB3aW5kb3cgbWlnaHQgYWN0dWFsbHkgc2Nyb2xsIGRvd24gd2hlbiBsYXN0IGxpbmUgb2YgYnVmZmVyIGlzIGRpc3BsYXllZC4KKyAgICAtLT4gUmVtZW1iZXIgaWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgd2FzICJjdXJzb3IgZm9sbG93cyBzY3JlZW4iIG9yCisgICAgInNjcmVlbiBmb2xsb3cgY3Vyc29yIiBhbmQgdXNlIHRoaXMgaW4gY3Vyc3VwZGF0ZSgpLgorNyAgIHRpbGRlX3JlcGxhY2UoKSBjYW4gb25seSBoYW5kbGUgIn4vIiwgc2hvdWxkIGFsc28gZG8gIn51c2VyLyIuCisgICAgR2V0IHRoZSBsaXN0IG9mIGhvbWUgZGlyZWN0b3JpZXMgKGZyb20gL2V0Yy9wYXNzd2Q/ICBVc2UgZ2V0cHdlbnQoKSkgYW5kCisgICAgdXNlIHNvbWUgY2xldmVyIGFsZ29yaXRobSB0byBtYXRjaCBhIHBhdGggd2l0aCB0aGF0LiAgRmluZCBjb21tb24gc3RyaW5ncworICAgIGluIHRoZSBsaXN0PworOCAgIFdoZW4gZHJhZ2dpbmcgc3RhdHVzIGxpbmUgd2l0aCBtb3VzZSwgc29tZXRpbWVzIGEganVtcCB3aGVuIGZpcnN0IGNsaWNraW5nCisgICAgb24gdGhlIHN0YXR1cyBsaW5lIChjYXVzZWQgYnkgJ3dpbmhlaWdodCcpLiAgU2VsZWN0IHdpbmRvdyBvbiBidXR0b24gdXAsCisgICAgaW5zdGVhZCBvZiBvbiBidXR0b24gZG93bi4KKzggICBEcmFnZ2luZyB0aGUgc3RhdHVzIGxpbmUgZG9lc24ndCBzY3JvbGwgYnV0IHJlZHJhdy4KKzkgICBFdmFsdWF0aW5nICdzdGF0dXNsaW5lJyBpbiBidWlsZF9zdGxfc3RyX2hsKCkgZG9lcyBub3QgcHJvcGVybHkgY2hlY2sgZm9yCisgICAgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgYXZhaWxhYmxlIGJ1ZmZlci4KKzggICBXaGVuIHBlcmZvcm1pbmcgaW5jcmVtZW50YWwgc2VhcmNoLCBzaG91bGQgYWJvcnQgc2VhcmNoaW5nIGFzIHNvb24gYXMgYQorICAgIGNoYXJhY3RlciBpcyB0eXBlZC4KKzggICBXaGVuIHRoZSB2YWx1ZSBvZiAkTUFLRSBjb250YWlucyBhIHBhdGgsIGNvbmZpZ3VyZSBjYW4ndCBoYW5kbGUgdGhpcy4KKyAgICBJdCdzIGFuIGF1dG9jb25mIGJ1Zy4gIFJlbW92ZSB0aGUgcGF0aCBmcm9tICRNQUtFIHRvIHdvcmsgYXJvdW5kIGl0LgorOCAgIEhvdyB0byBzZXQgVklNUkNfRklMRSB0byBcInNvbWV0aGluZ1wiIGZvciBjb25maWd1cmU/ICBXaHkgZG9lcyB0aGlzIG5vdAorICAgIHdvcms6IENGTEFHUz0nLURWSU1SQ19GSUxFPVwiL215ZGlyL215ZmlsZVwiJyAuL2NvbmZpZ3VyZQorOCAgIFRoZSB0ZW1wb3JhcnkgZmlsZSBpcyBzb21ldGltZXMgbm90IHdyaXRhYmxlLiAgQ2hlY2sgZm9yIHRoaXMsIGFuZCB1c2UgYW4KKyAgICBhbHRlcm5hdGUgbmFtZSB3aGVuIGl0IGlzbid0LiAgT3IgYWRkIHRoZSAndGVtcHRlbXBsYXRlJyBvcHRpb246IHRlbXBsYXRlCisgICAgZm9yIHRoZSB0ZW1wIGZpbGUgbmFtZSAiOnNldCB0ZW1wdGVtcGxhdGU9L3Vzci90bXAvPz8/Pz8udG1wIi4KKyAgICBBbHNvOiBXaW4zMiB2ZXJzaW9uIHVzZXMgV2luZG93cyB0ZW1wIGRpcmVjdG9yeSwgd2hpY2ggbWlnaHQgbm90IHdvcmsgZm9yCisgICAgY3lnd2luIGJhc2guCis3ICAgR2V0IGVycm9yICIqLCBcKyBvciBcKCBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IiBmb3IgcGF0dGVybiAiXCguXClcMVx7M30iLgorICAgIFJlbWVtYmVyIGZsYWdzIGZvciBiYWNrcmVmZXJlbmNlcy4KKzcgICBXaGVuIHN3aXRjaGluZyB0byBEYXlsaWdodCBTYXZpbmcgVGltZSwgVmltIGNvbXBsYWlucyB0aGF0IGEgZmlsZSBoYXMgYmVlbgorICAgIGNoYW5nZWQgc2luY2UgbGFzdCByZWFkLiAgQ2FuIHdlIHVzZSBhIGZ1bmN0aW9uIHRoYXQgdXNlcyBHTVQ/Cis3ICAgV2hlbiBjb21wbGV0aW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFmdGVyIGEgJyQnLCBjaGVjayBmb3IgZmlsZSBuYW1lcworICAgIHRoYXQgY29udGFpbiBhICckJyBhZnRlciBhbGwgaGF2ZSBiZWVuIGZvdW5kLgorOCAgIFdoZW4gImNtIiB0ZXJtY2FwIGVudHJ5IGlzIG1pc3NpbmcsIHN0YXJ0aW5nIGd2aW0gc2hvdWxkbid0IGNvbXBsYWluIGFib3V0CisgICAgaXQuIChMb2huZXIpICBUcnkgb3V0IHdpdGggInZ0MTAwIiBlbnRyeSwgY20gcmVwbGFjZWQgd2l0aCBjWC4KKzcgICBXaGVuIGFuIGluY2x1ZGUgZmlsZSBzdGFydHMgd2l0aCAiLi4vIiwgdGhlIGNoZWNrIGZvciBhbHJlYWR5IHZpc2l0aW5nCisgICAgdGhpcyBmaWxlIGRvZXNuJ3Qgd29yay4gIE5lZWQgdG8gc2ltcGxpZnkgdGhlIGZpbGUgbmFtZS4KKzggICBPbiBTaW5peCBTWVNfTk1MTiBpc24ndCBkZWZpbmVkLiAgSW5jbHVkZSBwYXRjaCBmcm9tIENyaXN0aWFubyBEZSBNaWNoZWxlLgorNyAgIFRoZSBuYW1lcyBhbmQgY29tbWVudHMgZm9yIHRoZSBhcmd1bWVudHMgb2YgZG9fYnJvd3NlKCkgYXJlIGNvbmZ1c2luZy4KKyAgICAiZGZsdCIgaXNuJ3QgdGhlIGRlZmF1bHQgZmlsZSBuYW1lIHdoZW4gImluaXRkaXIiIGlzIG5vdCBOVUxMIGFuZAorICAgICJpbml0ZGlyIiBpcyB0aGUgZGVmYXVsdCBwYXRoIHRvIGJlIHVzZWQuCis3ICAgV2hlbiAnc2Nyb2xsb2ZmJyBpcyBleGFjdGx5IGhhbGYgdGhlIHdpbmRvdyBoZWlnaHQsICJqIiBjYXVzZXMgYSBzY3JvbGwgb2YKKyAgICB0d28gbGluZXMgYXQgYSB0aW1lLiAgImsiIGRvZXNuJ3QgZG8gdGhpcy4gKENvcnkgVC4gRWNob2xzKQorOCAgIFdoZW4gd3JpdGVfdmltaW5mbygpIGlzIHVzZWQgd2hpbGUgdGhlcmUgYXJlIG1hbnkgb3JwaGFuZWQgdmltaW5mbworICAgIHRlbXBmaWxlcyB3cml0aW5nIHRoZSB2aW1pbmZvIGZpbGUgZmFpbHMuICBHaXZlIGEgY2xlYXIgZXJyb3IgbWVzc2FnZSBzbworICAgIHRoYXQgdGhlIHVzZXIga25vd3MgaGUgaGFzIHRvIGRlbGV0ZSB0aGUgZmlsZXMuCis3ICAgSXQncyBwb3NzaWJsZSB0byByZWRlZmluZSBhIHNjcmlwdC1sb2NhbCBmdW5jdGlvbiB3aXRoICI6ZnVuYworICAgIDxTTlI+MTIzX1Rlc3QoKSIuIChLcmlzaG5hKSAgRGlzYWxsb3cgdGhpcy4KKzcgICBBZnRlciAiOiVkIiBhbiB1bmRvIHJlcG9ydHMgdGhlIG51bWJlciBvZiBsaW5lcyBhZGRlZCBhcyBpZiB0aGVyZSBzdGlsbAorICAgIHdhcyBvbmUgbGluZS4KKworCitJIGNhbid0IHJlcHJvZHVjZSB0aGVzZSAoaWYgeW91IGNhbiwgbGV0IG1lIGtub3cgaG93ISk6Cis5ICAgTlQgNC4wIG9uIE5URlMgZmlsZSBzeXN0ZW06IEVkaXRpbmcgIi5iYXNocmMiIChkcmFnIGFuZCBkcm9wKSwgZmlsZQorICAgIGRpc2FwcGVhcnMuICBFZGl0aW5nICIueHl6IiBpcyBPSy4gIEFsc28sIGRyYWcmZHJvcCBvbmx5IHdvcmtzIGZvciB0aHJlZQorICAgIGZpbGVzLiAoTWNDb2xsaXN0ZXIpCis4ICAgTW90aWY6IFRlYXItb2ZmIG1lbnUgaXRlbSBjcmFzaGVzIFZpbSBvbiBzb21lIG1hY2hpbmVzLiAgKE5ldGhlcnRvbikgIEl0CisgICAgd29ya3MgZmluZSBmb3IgbWUsIG1heWJlIGl0J3MgYSBNb3RpZiBwcm9ibGVtLgorCisKK1Byb2JsZW1zIHRoYXQgd2lsbCAocHJvYmFibHkpIG5vdCBiZSBzb2x2ZWQ6CistICAgSW4gYSB0ZXJtaW5hbCB3aXRoICdtb3VzZScgc2V0IHN1Y2ggdGhhdCB0aGUgbW91c2UgaXMgYWN0aXZlIHdoZW4gZW50ZXJpbmcKKyAgICBhIGNvbW1hbmQgbGluZSwgYWZ0ZXIgZXhlY3V0aW5nIGEgc2hlbGwgY29tbWFuZCB0aGF0IHNjcm9sbHMgdXAgdGhlCisgICAgZGlzcGxheSBhbmQgdGhlbiBwcmVzc2luZyAiOiI6IFNlbGVjdGluZyB0ZXh0IHdpdGggdGhlIG1vdXNlIHdvcmtzIGxpa2UKKyAgICB0aGUgZGlzcGxheSB3YXNuJ3Qgc2Nyb2xsZWQuICBWaW0gZG9lc24ndCBrbm93IGhvdyBtdWNoIHRoZSBleHRlcm5hbAorICAgIGNvbW1hbmQgc2Nyb2xsZWQgdXAgdGhlIGRpc3BsYXkuICBVc2UgU2hpZnQgdG8gc2VsZWN0IHRleHQuCistICAgWCB3aW5kb3dzOiBXaGVuICRESVNQTEFZIHBvaW50cyB0byBhIFggc2VydmVyIHdoZXJlIHRoZXJlIGlzIG5vIGFjY2VzcworICAgIHBlcm1pc3Npb24sIHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBYIHNlcnZlciBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZS4KKyAgICBYdE9wZW5EaXNwbGF5KCkgcHJpbnRzIHRoaXMgZGlyZWN0bHksIHRoZXJlIGlzIG5vIHdheSB0byBhdm9pZCBpdC4KKy0gICBYIHdpbmRvd3M6IFNldHRpbmcgJ2d1aWZvbnRzZXQnIHRvIGFuIGlsbGVnYWwgdmFsdWUgc29tZXRpbWVzIGNyYXNoZXMgVmltLgorICAgIFRoaXMgaXMgY2F1c2VkIGJ5IGEgZmF1bHQgaW4gYSBYIGxpYnJhcnkgZnVuY3Rpb24sIGNhbid0IGJlIHNvbHZlZCBpbiBWaW0uCistICAgTW90aWY6IFdoZW4gYWRkaW5nIGEgbWVudSBpdGVtICJGaW5kIHRoaXMgJlN5bWJvbCIsIHRoZSAicyIgaW4gInRoaXMiIHdpbGwKKyAgICBiZSB1bmRlcmxpbmVkLCBpbnN0ZWFkIG9mIGluICJTeW1ib2wiLiAgTW90aWYgZG9lc24ndCBsZXQgdXMgc3BlY2lmeSB3aGljaAorICAgIGNoYXJhY3RlciBnZXRzIHRoZSBoaWdobGlnaHRpbmcuCistICAgTW92aW5nIHRoZSBjdXJzb3IgcmVtb3ZlcyBjb2xvciBpbiBjb2xvci14dGVybS4gIFRoaXMgaXMgYSBjb2xvci14dGVybQorICAgIHByb2JsZW0hICBjb2xvci14dGVybSB2ZXIuIDYuMSBiZXRhIDMgYW5kIGxhdGVyIHdvcmsgcHJvcGVybHkuCistICAgSW4genNoLCAiZ3ZpbSYiIGNoYW5nZXMgdGhlIHRlcm1pbmFsIHNldHRpbmdzLiAgVGhpcyBpcyBhIHpzaCBwcm9ibGVtLgorICAgIChKZW5uaW5ncykKKy0gICBQcm9ibGVtIHdpdGggSFB0ZXJtIHVuZGVyIFg6IG9sZCBjb250ZW50cyBvZiB3aW5kb3cgaXMgbG9zdCAoQ29zZW50aW5vKS4KKy0gICBBbWlnYTogV2hlbiB1c2luZyBxdWlja2ZpeCB3aXRoIHRoZSBNYW54IGNvbXBpbGVyIHdlIG9ubHkgZ2V0IHRoZSBmaXJzdCAyNQorICAgIGVycm9ycy4gIEhvdyBkbyB3ZSBnZXQgdGhlIHJlc3Q/CistICAgQW1pZ2E6IFRoZSAiOmNxIiBjb21tYW5kIGRvZXMgbm90IGFsd2F5cyBhYm9ydCB0aGUgTWFueCBjb21waWxlci4gIFdoeT8KKy0gICBMaW51eDogQSBmaWxlIHdpdGggcHJvdGVjdGlvbiByLS1ydy1ydy0gaXMgc2VlbiByZWFkb25seSBmb3Igb3RoZXJzLiBUaGUKKyAgICBhY2Nlc3MoKSBmdW5jdGlvbiBpbiBHTlUgbGliYyBpcyBwcm9iYWJseSB3cm9uZy4KKy0gICBNU0RPUzogV2hlbiB1c2luZyBzbWFydGRyaXZlIHdpdGggd3JpdGUtYmFjayBidWZmZXJpbmcsIHdyaXRpbmcgdG8gYQorICAgIHJlYWRvbmx5IGZsb3BweSB3aWxsIGNhdXNlIHByb2JsZW1zLiAgSG93IHRvIHRlc3QgZm9yIGEgd3JpdGFibGUgZmxvcHB5CisgICAgZmlyc3Q/CistICAgTVNET1M6IEJvdGggMTYgYW5kIDMyIGJpdCB2ZXJzaW9uczogRmlsZSBuYW1lIGV4cGFuc2lvbiBkb2Vzbid0IHdvcmsgZm9yCisgICAgbmFtZXMgdGhhdCBzdGFydCB3aXRoIGEgZG90LiAgVGhlc2UgdXNlZCB0byBiZSBpbGxlZ2FsIGZpbGUgbmFtZXMuCistICAgV2hlbiBkb2luZyBhIENUUkwtWiBhbmQgdHlwaW5nIGEgY29tbWFuZCBmb3IgdGhlIHNoZWxsLCB3aGlsZSBWaW0gaXMgYnVzeQorICAgIChlLmcuIHdyaXRpbmcgYSBmaWxlKSwgdGhlIGNvbW1hbmQgZm9yIHRoZSBzaGVsbCBpcyBzb21ldGltZXMgZWF0ZW4gYnkgVmltLAorICAgIGJlY2F1c2UgdGhlIHRlcm1pbmFsIG1vZGUgaXMgY2hhbmdlZCBmcm9tIFJBVyB0byBDQlJFQUsuCistICAgQW4gb2xkIHZlcnNpb24gb2YgR05VIHRnb3RvIGNhbid0IGhhbmRsZSB0aGUgdGVybWluZm8gY29kZSBmb3IgIkFGIi4gIFRoZQorICAgICIlcDEiIGlzIGludGVycHJldGVkIGFzICIlcCIgYW5kICIxIiwgY2F1c2luZyBjb2xvciBub3QgdG8gYmUgd29ya2luZy4KKyAgICBGaXg6IENoYW5nZSB0aGUgIiVwMSIgaW4gdGhlICJBRiIgYW5kICJBQiIgdGVybWluZm8gZW50cmllcyB0byAiJXAiLgorICAgIChCZW56aW5nZXIpLgorLSAgIFdoZW4gcnVubmluZyBhbiBleHRlcm5hbCBjb21tYW5kIGZyb20gdGhlIEdVSSwgdHlwZWFoZWFkIGlzIGdvaW5nIHRvIHRoYXQKKyAgICBwcm9ncmFtLCBub3QgdG8gVmltLiAgSXQgbG9va3MgbGlrZSB0aGUgc2hlbGwgZWF0cyB0aGUgY2hhcmFjdGVycywgVmltCisgICAgY2FuJ3QgZ2V0IGJhY2sgd2hhdCB0aGUgZXh0ZXJuYWwgY29tbWFuZCBkaWRuJ3QgdXNlLgorLSAgIFdpbjMyIEdVSTogRXJyb3IgY29kZSBmcm9tIGV4dGVybmFsIGNvbW1hbmQgbm90IHJldHVybmVkIGluIHNoZWxsX2Vycm9yLgorICAgIEl0IGFwcGVhcnMgdGhhdCBjbWQuZXhlIGFuZCBjb21tYW5kLmNvbSBkb24ndCByZXR1cm4gYW4gZXJyb3IgY29kZS4KKy0gICBXaW4zMiBHVUk6IFRoZSBUb29sYmFyIGlzIGEgYml0IHRvbyBoaWdoIHdoZW4gdGhlIGZsYXQgc3R5bGUgaXMgYmVpbmcKKyAgICB1c2VkLiAgV2UgZG9uJ3QgaGF2ZSBjb250cm9sIG92ZXIgdGhlIGhlaWdodCBvZiB0aGUgVG9vbGJhci4KKy0gICBXaW4zMjogQWxsIGZpbGVzIGNyZWF0ZWQgb24gdGhlIGRheSBvZiBzd2l0Y2hpbmcgZnJvbSB3aW50ZXIgdG8gc3VtbWVyCisgICAgdGltZSBjYXVzZSAiY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiIG1lc3NhZ2VzLiAgSXQgZ29lcyBhd2F5IHdoZW4KKyAgICB0aGUgZmlsZSBpcyB3cml0dGVuIGFnYWluIHRoZSBuZXh0IGRheSwgb3IgdGhlIHRpbWV6b25lIGlzIGFkanVzdGVkLgorICAgIERKR1BQIHZlcnNpb24gaXMgT0suIChaYWltaSkgIExvb2tzIGxpa2UgYSBwcm9ibGVtIHdpdGggdGhlIFdpbjMyIGxpYnJhcnkuCisgICAgUmVib290aW5nIGRvZXNuJ3QgaGVscC4gIFRpbWUgc3RhbXBzIGxvb2sgT0sgaW4gZGlyZWN0b3J5LiAoUGVubikKKyAgICBJcyB0aGlzIG9uIEZBVCAoc3RvcmVzIHdhbGwgY2xvY2sgdGltZSkgb3IgTlRGUyAoc3RvcmVzIFVUUyk/CistICAgV2luMzIsIE1TLVdpbmRvd3MgWFA6ICRIT01FIHVzZXMgdGhlIHdyb25nIGRyaXZlIHdoZW4gdGhlIHVzZXIgcHJvZmlsZXMKKyAgICBhcmUgbm90IG9uIHRoZSBib290IGRpc2suICBUaGlzIGlzIGNhdXNlZCBieSBhIHdyb25nIHZhbHVlIG9mICRIT01FRFJJVkUuCisgICAgVGhpcyBpcyBhIGJ1ZyBpbiBYUCwgc2VlIE1TS0IgYXJ0aWNsZSA4MTgxMzQuCistICAgU3VuT1MgNS41LjEgd2l0aCBNb3RpZjogVGhlIGZpbGUgb3BlbiBkaWFsb2cgZG9lcyBub3QgaGF2ZSBhIGhvcml6b250YWwKKyAgICBzY3JvbGwgYmFyIGZvciB0aGUgImZpbGVzIiBzZWxlY3Rpb24uICBUaGlzIGlzIGEgcHJvYmxlbSBpbiB0aGUgTW90aWYKKyAgICBsaWJyYXJpZXMsIGdldCBhIHBhdGNoIGZyb20gU3VuLgorLSAgIFNvbGFyaXMgMi42IHdpdGggR1RLIGFuZCBQZXJsOiBndmltIGNyYXNoZXMgd2hlbiBzdGFydGVkLiAgUHJvYmxlbSB3aXRoIFgKKyAgICBpbnB1dCBtZXRob2QgY2FsbGVkIGZyb20gR0RLIGNvZGUuICBXaXRob3V0IFBlcmwgaXQgZG9lc24ndCBjcmFzaC4KKy0gICBWTVM6IFZpbWRpZmYgZG9lc24ndCB3b3JrIHdpdGggdGhlIFZNUyBkaWZmLCBiZWNhdXNlIHRoZSBvdXRwdXQgbG9va3MKKyAgICBkaWZmZXJlbnQuICBUaGlzIG1ha2VzIHRlc3QgNDcgZmFpbC4gIEluc3RhbGwgYSBVbml4LWNvbXBhdGlibGUgZGlmZi4KKy0gICBWTVMgdjcuMSBhbmQgb2xkZXI6IFRlc3RzIDIxIGFuZCAzMiBmYWlsLiAgRnJvbSBWTVMgdjcuMS0yIGFuZCBuZXdlciBWaW0KKyAgICBkb2VzIG5vdCBoYXZlIHRoaXMgYmVoYXZpb3IuIChab2x0YW4gQXJwYWRmZnkpCistICAgV2luMzIgR1VJOiBtb3VzZSB3aGVlbCBhbHdheXMgc2Nyb2xscyByaWdodG1vc3Qgd2luZG93LiAgVGhlIGV2ZW50cyBhcnJpdmUKKyAgICBpbiBWaW0gYXMgaWYgdGhlIHJpZ2h0bW9zdCBzY3JvbGxiYXIgd2FzIHVzZWQuCistICAgR1RLIHdpdGggR25vbWU6IFByb2R1Y2VzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBzdGFydGluZyB1cDoKKwlHZGstV0FSTklORyAqKjogbG9jYWxlIG5vdCBzdXBwb3J0ZWQgYnkgQyBsaWJyYXJ5CisgICAgVGhpcyBpcyBjYXVzZWQgYnkgdGhlIGdub21lIGxpYnJhcnkgZ25vbWVfaW5pdCgpIHNldHRpbmcgJExDX0NUWVBFIHRvCisgICAgImVuX1VTIi4gIE5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IHRoaXMgbG9jYWxlIG5hbWUsIHRodXMgY2F1c2luZyB0aGUKKyAgICBlcnJvci4gIEhvcGVmdWxseSBhIG5ld2VyIHZlcnNpb24gb2YgR1RLL0dub21lIGZpeGVzIHRoaXMgcHJvYmxlbS4KKy0gICBHVEsgMjogV2l0aCB0aGlzIG1hcHBpbmcgdGhlIGhpdC1lbnRlciBwcm9tcHQgaXMgX3NvbWV0aW1lc18gYmVsb3cgdGhlCisgICAgc2NyZWVuLCBhdCBvdGhlciB0aW1lcyB0aGVyZSBpcyBhIGdyZXkgYXJlYSBiZWxvdyB0aGUgY29tbWFuZCBsaW5lOgorCTpubWFwIDxGMTE+IDppZiAmZ3Vpb3B0aW9ucz1+J20nIFx8IHNldCBndWlvcHRpb25zLT1tIFx8IGVsc2UgXHwgc2V0IGd1aW9wdGlvbnMrPW0gXHwgZW5kaWY8Y3I+CistICAgR1RLOiBXaGVuIHBhc3RpbmcgYSBzZWxlY3Rpb24gZnJvbSBWaW0gdG8geGNsaXBib2FyZCBndmltIGNyYXNoZXMgd2l0aCBhCisgICAgQUJSVCBzaWduYWwuICBQcm9iYWJseSBhbiBlcnJvciBpbiB0aGUgZmlsZSBnZGtzZWxlY3Rpb24uYywgdGhlIGFzc2VydAorICAgIGFsd2F5cyBmYWlscyB3aGVuIFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoKSBmYWlscy4gKFRvbSBBbGxhcmQpCistICAgV2hlbiB1c2luZyBhbiB4dGVybSB0aGF0IHN1cHBvcnRzIHRoZSB0ZXJtcmVzcG9uc2UgZmVhdHVyZSwgYW5kIHRoZSAndF9DbycKKyAgICB0ZXJtY2FwIG9wdGlvbiB3YXMgd3Jvbmcgd2hlbiBWaW0gc3RhcnRlZCwgaXQgd2lsbCBiZSBjb3JyZWN0ZWQgd2hlbiB0aGUKKyAgICB0ZXJtcmVzcG9uc2UgaXMgcmVjZWl2ZWQuICBTaW5jZSB0aGUgbnVtYmVyIG9mIGNvbG9ycyBjaGFuZ2VzLCB0aGUKKyAgICBoaWdobGlnaHRpbmcgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYWdhaW4uICBUaGlzIG1heSBjYXVzZSBjb2xvcnMgZGVmaW5lZAorICAgIGluIHRoZSB2aW1yYyBmaWxlIHRvIGJlIGxvc3QuCistICAgT24gV2luZG93cyBOVCA0LjAgdGhlIG51bWJlciBvZiBmaWxlcyBwYXNzZWQgdG8gVmltIHdpdGggZHJhZyZkcm9wIGFuZAorICAgICJFZGl0IHdpdGggVmltIiBpcyBsaW1pdGVkLiAgVGhlIG1heGltdW0gY29tbWFuZCBsaW5lIGxlbmd0aCBpcyAyNTUgY2hhcnMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgZXh0ZW5zaW9ucyBhbmQgaW1wcm92ZW1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQkJCSAgICAqZXh0ZW5zaW9ucy1pbXByb3ZlbWVudHMqCisKK0RvY3VtZW50YXRpb246Cis4ICAgRXh0ZW5kIHVzcl8yNy50eHQgYSBiaXQuIChBZGFtIFNleWZhcnRoKQorOSAgIE1lcmdlIGluIGlkZWFzIGZyb20gfi92aW0vcGF0Y2hlcy90dXRvci50eHQgKEdhYnJpZWwgWmFjaG1hbm4pCis3ICAgQWRkIGEgc2VjdGlvbiBvbiBkZWJ1Z2dpbmcgc2NyaXB0cyBpbiB0aGUgdXNlciBtYW51YWwuCis5ICAgTWFrZSB0aGUgUmVmZXJlbmNlIE1hbnVhbCBtb3JlIHByZWNpc2UuICBGb3IgZWFjaCBjb21tYW5kIG1lbnRpb246CisgICAgLSBjaGFuZ2UgdG8gY3Vyc29yIHBvc2l0aW9uIGFuZCBjdXJzd2FudAorICAgIC0gaWYgaXQgY2FuIGJlIHVuZG9uZSAodS9DVFJMLVIpIGFuZCByZWRvbmUgKC4pCisgICAgLSBob3cgaXQgd29ya3MgZm9yIGZvbGRlZCBsaW5lcworICAgIC0gaG93IGl0IHdvcmtzIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzCis5ICAgSW4gY2hhbmdlLnR4dCwgcmVtYXJrIGFib3V0IEphdmFkb2MgaXNuJ3QgcmlnaHQuICBSaWdodCBhbGlnbm1lbnQgd291bGQKKyAgICB3b3JrIHRvby4KKzggICBTcHJlYWQgdGhlIHdpbmRvd3MgY29tbWFuZHMgb3ZlciB0aGUgb3RoZXIgZmlsZXMuICBGb3IgZXhhbXBsZSwgIjpzdGFnIgorICAgIHNob3VsZCBiZSB3aXRoICI6dGFnIi4gIENyb3NzLWxpbmsgd2l0aCB0YWdzIHRvIGF2b2lkIHRvbyBtdWNoIGRvdWJsZQorICAgIHRleHQuCis4ICAgQWRkIHRhZ3MgZm9yIGFsbCBmZWF0dXJlcywgZS5nLiAiZ3VpX3J1bm5pbmciLgorNyAgIE1TLVdpbmRvd3M6IFdoZW4gYSB3cm9uZyBjb21tYW5kIGlzIHR5cGVkIHdpdGggYW4gQUxUIGtleSwgZ2l2ZSBhIGhpbnQgdG8KKyAgICBsb29rIGF0IHRoZSBoZWxwIGZvciAnd2luYWx0a2V5cycuCis3ICAgQWRkIGEgaGVscC52aW0gcGx1Z2luIHRoYXQgbWFwcyA8VGFiPiB0byBqdW1wIHRvIHRoZSBuZXh0IHRhZyBpbiB8fCBhbmQKKyAgICA8Qy1UYWI+IChhbmQgPFMtVGFiPikgdG8gdGhlIHByZXZpb3VzIHRhZy4KKy0gICBDaGVjayB0ZXh0IGVkaXRvciBjb21wZW5kaXVtIGZvciB2aSBhbmQgVmltIHJlbWFya3MuCisKKworSGVscDoKKy0gICBGaXJzdCB0cnkgdXNpbmcgdGhlICI6aGVscCIgYXJndW1lbnQgbGl0ZXJhbGx5LCBiZWZvcmUgdXNpbmcgaXQgYXMgYQorICAgIHBhdHRlcm4uICBBbmQgdGhlbiBtYXRjaCBpdCBhcyBwYXJ0IG9mIGEgdGFnLgorLSAgIFdoZW4gYSBoZWxwIGl0ZW0gaGFzIG11bHRpcGxlIG1hdGNoZXMgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgIjp0biIgdG8gZ28KKyAgICB0byB0aGUgb3RoZXIgbWF0Y2hlcy4KKy0gICBTdXBwb3J0IGEgd2F5IHRvIHZpZXcgKGFuZCBlZGl0KSAuaW5mbyBmaWxlcy4KKy0gICBEZWZhdWx0IG1hcHBpbmcgZm9yIGhlbHAgZmlsZXM6IDxUYWI+IHRvIHBvc2l0aW9uIGN1cnNvciBvbiBuZXh0IHw6dGFnfC4KKy0gICBJbXBsZW1lbnQgYSAic3RpY2t5IiBoZWxwIHdpbmRvdywgc29tZSBoZWxwIHRleHQgbGluZXMgdGhhdCBhcmUgYWx3YXlzCisgICAgZGlzcGxheWVkIGluIGEgd2luZG93IHdpdGggZml4ZWQgaGVpZ2h0LiAoR3Vja2VzKSAgVXNlICJ+Ly52aW1oZWxwIiBmaWxlLAorICAgIHVzZXIgY2FuIGVkaXQgaXQgdG8gaW5zZXJ0IGhpcyBmYXZvcml0ZSBjb21tYW5kcywgbmV3IGFjY291bnQgY2FuIGNvbnRhaW4gYQorICAgIGRlZmF1bHQgY29udGVudHMuCistICAgTWFrZSAnd2lubWluaGVpZ2h0JyBhIGxvY2FsIG9wdGlvbiwgc28gdGhhdCB0aGUgdXNlciBjYW4gc2V0IGEgbWluaW1hbAorICAgIGhlaWdodCBmb3IgdGhlIGhlbHAgd2luZG93IChhbmQgb3RoZXIgd2luZG93cykuCistICAgIjpoZWxwIDpzXkkiIHNob3VsZCBleHBhbmQgdG8gIjpoZWxwIDpzdWJzdGl0dXRlIi4KKy0gICBNYWtlIHRoZSBoZWxwIGtleSAoPEYxPikgY29udGV4dCBzZW5zaXRpdmU/CistICAgTGVhcm4gbW9kZTogc2hvdyBzaG9ydCBoZWxwIHdoaWxlIHR5cGluZyBjb21tYW5kcy4KKworCitVc2VyIEZyaWVuZGxpZXI6Cis4ICAgV2luZG93cyBpbnN0YWxsIHdpdGggaW5zdGFsbC5leGU6IFVzZSAuZXhlIGluc3RlYWQgb2YgLmJhdCBmaWxlcyBmb3IKKyAgICBsaW5rcywgc28gdGhhdCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdW5tb2RpZmllZD8gKFdhbHRlcgorICAgIEJyaXNjb2UpCis4ICAgV2luZG93cyBpbnN0YWxsOiBCZSBhYmxlIHRvIGFzc29jaWF0ZSBWaW0gd2l0aCBhIHNlbGVjdGlvbiBvZiBmaWxlIHR5cGVzPworOCAgIFdpbmRvd3MgdW5pbnN0YWxsOiBIYXZlIHVuaW5zdGFsLmMgZGVsZXRlIHRoZSB2aW1maWxlcyBkaXJlY3RvcmllcyB0aGF0CisgICAgZG9zaW5zdC5jIGNyZWF0ZXMuICBMaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IChyZWN1cnNpdmVseSkgaWYKKyAgICB0aGUgdXNlciBhc2tzIGZvciBpdC4gIFJlcXVpcmVzIGFuIGltcGxlbWVudGF0aW9uIG9mICJybSAtcmYiLgorOCAgIFJlbWVtYmVyIHRoZSBuYW1lIG9mIHRoZSB2aW1yYyBmaWxlIHRoYXQgd2FzIHVzZWQgKH4vLnZpbXJjLCAkVklNL192aW1yYywKKyAgICAkSE9NRS9fdmltcmMsIGV0Yy4pIGFuZCBhZGQgImVkaXQgdmltcmMiIHRvIHRoZSBGaWxlIG1lbnUuCistICAgQWRkIGEgd2F5IHRvIHNhdmUgbG9jYWwgc2V0dGluZ3MgYW5kIG1hcHBpbmdzIGludG8gYSBuZXcgcGx1Z2luIGZpbGUuCisgICAgIjpta3BsdWdpbiA8ZmlsZT4iPworOCAgIEFkZCAiOnBsdWdpbmluc3RhbGwiIGNvbW1hbmQuICBDYW4gYmUgdXNlZCB0byBpbnN0YWxsIGEgcGx1Z2luIGZpbGUgdGhhdAorICAgIGluY2x1ZGVzIGRvY3VtZW50YXRpb24uICBMZXQgdGhlIHVzZXIgc2VsZWN0IGEgZGlyZWN0b3J5IGZyb20KKyAgICAncnVudGltZXBhdGgnLgorCSIgVmltIHBsdWdpbgorCTxtYWluIHBsdWdpbiBjb2RlPgorCSIgPj4+IHBsdWdpbiBoZWxwIHN0YXJ0IDw8PAorCTxwbHVnaW4gZG9jcz4KKy0gICBBZGQgbWFwcGluZ3MgbG9jYWwgdG8gYSB3aW5kb3c6ICI6bWFwIDx3aW5kb3c+IC4uLiI/Cis5ICAgQWRkIGJ1ZmZlci1sb2NhbCBtZW51LiAgU2hvdWxkIG9mZmVyIGEgY2hvaWNlIGJldHdlZW4gcmVtb3ZpbmcgdGhlIG1lbnUgb3IKKyAgICBkaXNhYmxpbmcgaXQuICBCZSBjYXJlZnVsIHRoYXQgdGVhci1vZmZzIGRvbid0IGRpc2FwcGVhciAoa2VlcCBvbmUgZW1wdHkKKyAgICBpdGVtPykuCisgICAgQWx0ZXJuYXRpdmU6IHVzZSBCdWZFbnRlciBhbmQgQnVmTGVhdmUgYXV0b2NvbW1hbmRzLgorOCAgIEFkZCBmaWxlIGxvY2tpbmcuICBMb2NrIGEgZmlsZSB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgaXQgd2l0aCBmbG9jaygpIG9yCisgICAgZmNudGwoKS4gIFRoaXMgcGF0Y2ggaGFzIGFkdmlzb3J5IGZpbGUgbG9ja2luZyB3aGlsZSByZWFkaW5nL3dyaXRpbmcgdGhlCisgICAgZmlsZTogfi92aW0vcGF0Y2hlcy9rYWhuX2ZpbGVfbG9ja2luZyAuCis4ICAgbWFrZSBhIHZpbXR1dG9yIHNjcmlwdCBmb3IgQW1pZ2EgYW5kIG90aGVyIHN5c3RlbXMuCis3ICAgQWRkIHRoZSBhcmd1bWVudHMgZm9yIGNvbmZpZ3VyZSB0byB0aGUgIjp2ZXJzaW9uIiBvdXRwdXQ/CisKKworRGlmZiBtb2RlOgorOCAgIEFkZCBhIGNvbW1hbmQgdG8gc3RvcCBkaWZmIG1vZGU6ICI6c2V0IG5vZGlmZiBmZGMgPSAwIG5vc2Nyb2xsYmluZCIKKzggICBVc2UgZGlmZiBtb2RlIHRvIHNob3cgdGhlIGNoYW5nZXMgbWFkZSBpbiBhIGJ1ZmZlciAoY29tcGFyZWQgdG8gdGhlIGZpbGUpLgorICAgIFVzZSBhbiB1bm5hbWVkIGJ1ZmZlciwgbGlrZSBkb2luZzoKKwluZXcgfCBzZXQgYnQ9bm9maWxlIHwgciAjIHwgMGRfIHwgZGlmZnRoaXMgfCB3aW5jbWQgcCB8IGRpZmZ0aGlzCis3ICAgQWRkIGN1cnNvci1iaW5kaW5nOiB3aGVuIG1vdmluZyB0aGUgY3Vyc29yIGluIG9uZSBkaWZmJ2VkIGJ1ZmZlciwgYWxzbworICAgIG1vdmUgaXQgaW4gb3RoZXIgZGlmZidlZCBidWZmZXJzLCBzbyB0aGF0IENUUkwtVyBjb21tYW5kcyBnbyB0byB0aGUgc2FtZQorICAgIGxvY2F0aW9uLgorCisKK0ZvbGRpbmc6CisgICAgKGNvbW1hbmRzIHN0aWxsIGF2YWlsYWJsZTogemcgekcgekkgekogeksgenAgelAgenEgelEgelYgencgelcgenkgelk7CisgICAgc2Vjb25kYXJ5OiB6QiB6UyB6VCB6WikKKzggICBBZGQgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBmb3IgYSBmb2xkIGxpbmUgZGVwZW5kaW5nIG9uIHRoZSBmb2xkIGxldmVsLgorICAgIChOb2VsIEhlbnNvbikKKzggICBXaGVuIGEgY2xvc2VkIGZvbGQgaXMgZGlzcGxheWVkIG9wZW4gYmVjYXVzZSBvZiAnZm9sZG1pbmxpbmVzJywgdGhlCisgICAgYmVoYXZpb3Igb2YgY29tbWFuZHMgaXMgc3RpbGwgbGlrZSB0aGUgZm9sZCBpcyBjbG9zZWQuICBIb3cgdG8gbWFrZSB0aGUKKyAgICB1c2VyIGF3YXJlIG9mIHRoaXM/Cis4ICAgQWRkIGFuIG9wdGlvbiAnZm9sZHNraXAnIHdpdGggdmFsdWVzIGxpa2UgJ2ZvbGRvcGVuJyB0aGF0IHNwZWNpZmllcyB3aGljaAorICAgIGNvbW1hbmRzIHNraXAgb3ZlciBhIGNsb3NlZCBmb2xkLgorOCAgICJIIiBhbmQgIkwiIGNvdW50IGJ1ZmZlciBsaW5lcyBpbnN0ZWFkIG9mIHdpbmRvdyBsaW5lcy4gKFNlcnZhdGl1cyBCcmFuZHQpCis4ICAgQWRkIGEgd2F5IHRvIGFkZCBmb2xkLXBsdWdpbnMuICBKb2hhbm5lcyBaZWxsbmVyIGhhcyBvbmUgZm9yIFZCLgorNyAgIFdoZW4gdXNpbmcgMmh0bWwudmltLCBhbHNvIHJlcHJvZHVjZSBmb2xkcyBhcyB5b3UgY2FuIHNlZSB0aGVtLiAgV2hlbgorICAgIHNvbWVvbmUgZG9lc24ndCB3YW50IHRoZSBmb2xkcyBoZSBjYW4gZGlzYWJsZSB0aGVtIGJlZm9yZSBjb252ZXJ0aW5nLgorICAgIEZpcnN0IGF0dGVtcHQgYnkgQ2FybCBPc3Rlcndpc2NoLCAyMDA0IE1heSAxMC4KKzcgICBXaGVuIHVzaW5nIG1hbnVhbCBmb2xkaW5nLCB0aGUgdW5kbyBjb21tYW5kIHNob3VsZCBhbHNvIHJlc3RvcmUgZm9sZHMuCistICAgQWxsb3cgY29tcGxldGVseSBoaWRpbmcgYSBjbG9zZWQgZm9sZC4gIFJlcXVpcmUgc2hvd2luZyBhIGNoYXJhY3RlciBpbgorICAgICdmb2xkY29sdW1uJyB0byBhdm9pZCB0aGUgbWlzc2luZyBsaW5lIGdvZXMgdW5ub3RpY2VkLgorLSAgIFdoZW4gcHJlc3NpbmcgdGhlIGRvd24gYXJyb3cgb2YgYSBzY3JvbGxiYXIsIGEgY2xvc2VkIGZvbGQgZG9lc24ndCBzY3JvbGwKKyAgICB1bnRpbCBhZnRlciBhIGxvbmcgdGltZS4gIEhvdyB0byBtYWtlIHNjcm9sbGluZyB3aXRoIGNsb3NlZCBmb2xkcworICAgIHNtb290aGVyPworLSAgIFdoZW4gY3JlYXRpbmcgYSBzZXNzaW9uLCBhbHNvIHN0b3JlIGZvbGRzIGZvciBidWZmZXJzIGluIHRoZSBidWZmZXIgbGlzdCwKKyAgICB1c2luZyB0aGUgd2luaW5mbyBpbiB3aV9mb2xkcy4KKy0gICAnZm9sZG1ldGhvZCcgInRleHRvYmplY3QiOiBmb2xkIG9uIHNlY3Rpb25zIGFuZCBwYXJhZ3JhcGggdGV4dCBvYmplY3RzLgorLSAgIEFkZCAnaGlkZWNvbW1lbnQnIG9wdGlvbjogZG9uJ3QgZGlzcGxheSBjb21tZW50cyBpbiAvKiAqLyBhbmQgYWZ0ZXIgLy8uCistICAgInp1IjogdW5kbyBjaGFuZ2UgaW4gbWFudWFsIGZvbGQuICJ6VSIgcmVkbyBjaGFuZ2UgaW4gbWFudWFsIGZvbGQuICBIb3cgdG8KKyAgICBpbXBsZW1lbnQgdGhpcz8KKy0gICAiekoiIGNvbW1hbmQ6IGFkZCB0aGUgbGluZSBvciBmb2xkIGJlbG93IHRoZSBmb2xkIGluIHRoZSBmb2xkIHVuZGVyIHRoZQorICAgIGN1cnNvci4KKy0gICAnZm9sZG1ldGhvZCcgInN5bnRheCI6ICJmb2xkPTMiOiBzZXQgZm9sZCBsZXZlbCBmb3IgYSByZWdpb24uCistICAgQ2FuIHNldCAnZm9sZHRleHQnIHRvIGVtcHR5IHN0cmluZzogZG9uJ3QgZGlzcGxheSBhbnkgbGluZS4gIEhvdyB0bworICAgIGltcGxlbWVudCB0aGlzPworLSAgIEFwcGx5IGEgbmV3IGZvbGRsZXZlbCB0byBhIHJhbmdlIG9mIGxpbmVzLiAoU3RldmUgTGl0dCkKKy0gICBIYXZlIHNvbWUgd2F5IHRvIHJlc3RyaWN0IGNvbW1hbmRzIHRvIG5vdCBmb2xkZWQgdGV4dC4gIEFsc28gY29tbWFuZHMgbGlrZQorICAgIHNlYXJjaGVzLgorCisKK011bHRpLWJ5dGUgY2hhcmFjdGVyczoKKzkgICBXaGVuIHRoZSB0YWlsIGJ5dGUgb2YgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgaXMgaWxsZWdhbCAoZS5nLiwgYSBDUiksIHRoZQorICAgIGRpc3BsYXkgaXMgbWVzc2VkIHVwIChZYXN1aGlybyBNYXRzdW1vdG8pLiAgU2hvdWxkIGNoZWNrIGZvciBpbGxlZ2FsCisgICAgZG91YmxlLWJ5dGUgY2hhcmFjdGVycyBhbmQgZGlzcGxheSB0aGVtIGRpZmZlcmVudGx5IChkaXNwbGF5IGVhY2ggc2luZ2xlCisgICAgYnl0ZSkuCis4ICAgQWRkIGFuIGl0ZW0gaW4gJ2ZpbGVlbmNvZGluZ3MnIHRvIGNoZWNrIHRoZSBmaXJzdCBsaW5lcyBvZiBhIGZpbGUgZm9yCisgICAgdGhlIGVuY29kaW5nLiAgU2VlIFB5dGhvbiBQRVA6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wZXBzL3BlcC0wMjYzLmh0bWwuCisgICAgVG8gYXZvaWQgZ2V0dGluZyBhIHdyb25nIGVuY29kaW5nIG9ubHkgYWNjZXB0IHNvbWV0aGluZyBFbWFjcy1saWtlOgorICAgICItKi0gY29kaW5nOiBlbmMtbmFfbWUuZm9vIC0qLSIgYW5kICItKi0gY29kaW5nPSBlbmMtbmFfbWUuZm9vIC0qLSIKKyAgICBNYXRjaCB3aXRoICItXCotXHMqY29kaW5nWzo9XVxzKlwoWzo6d29yZDo6LV8uXVwrXClccyotXCotIiBhbmQgdXNlIGZpcnN0CisgICAgaXRlbS4KKzggICBBZGQgYW4gaXRlbSBpbiAnZmlsZWVuY29kaW5ncycgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgb2YgYW4gWE1MIGZpbGUgZm9yCisgICAgdGhlIGVuY29kaW5nLiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PiAgT3IgImNoYXJzZXQ9VVRGLTgiPworOCAgIFRoZSBxdWlja2ZpeCBmaWxlIGlzIHJlYWQgd2l0aG91dCBjb252ZXJzaW9uLCB0aHVzIGluICdlbmNvZGluZycuICBBZGQgYW4KKyAgICBvcHRpb24gdG8gc3BlY2lmeSB0aGUgZW5jb2Rpbmcgb2YgdGhlIGVycm9yZmlsZSBhbmQgY29udmVydCBpdC4gIEFsc28gZm9yCisgICAgIjpncmVwIi4KKzggICBXaGVuIGEgZmlsZSB3YXMgY29udmVydGVkIGZyb20gJ2ZpbGVlbmNvZGluZycgdG8gJ2VuY29kaW5nJywgYSB0YWcgc2VhcmNoCisgICAgc2hvdWxkIGFsc28gZG8gdGhpcyBvbiB0aGUgc2VhcmNoIHBhdHRlcm4uIChBbmRyemVqIE0uIE9zdHJ1c3prYSkKKzcgICBXaGVuIGNvbnZlcnRpbmcgYSBmaWxlIGZhaWxzLCBtZW50aW9uIHdoaWNoIGJ5dGUgY291bGQgbm90IGJlIGNvbnZlcnRlZCwKKyAgICBzbyB0aGF0IHRoZSB1c2VyIGNhbiBmaXggdGhlIHByb2JsZW0uCis4ICAgQWRkIGNvbmZpZ3VyZSBvcHRpb24gdG8gYmUgYWJsZSB0byBkaXNhYmxlIHVzaW5nIHRoZSBpY29udiBsaWJyYXJ5LiAoVWRvCisgICAgU2Nod2VpZ2VydCkKKzggICBBZGQgcGF0Y2ggZnJvbSBNdXJhb2thIFRhcm8gKE1hciAxNikgdG8gc3VwcG9ydCBpbnB1dCBtZXRob2Qgb24gTWFjPworOSAgICdhbGVwaCcgc2hvdWxkIGJlIHNldCB0byAxNDg4IGZvciBVbmljb2RlLiAoWnZpIEhhcidFbCkKKzggICBTaG91bGQgYWRkIHRlc3QgZm9yIHVzaW5nIHZhcmlvdXMgY29tbWFuZHMgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCistICAgSW5jbHVkZSBmbGlwY2FzZSBwYXRjaDogfi92aW0vcGF0Y2hlcy93YWxsLmZsaXBjYXNlMiA/ICBNYWtlIGl0IHdvcmsgZm9yCisgICAgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorOCAgICdpbmZlcmNhc2UnIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKzggICB0b3VwcGVyKCkgZnVuY3Rpb24gZG9lc24ndCBoYW5kbGUgYnl0ZSBjb3VudCBjaGFuZ2VzLgorOCAgIFN1cHBvcnQgZm91ciBjb21wb3NpbmcgY2hhcmFjdGVycywgbmVlZGVkIGZvciBIZWJyZXcuIChSb24gQWFyb24pCis4ICAgImdhIiBzaG91bGQgc2hvdyBhbGwgY29tcG9zaW5nIGNoYXJhY3RlcnMsIGFsc28gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiAyLgorNyAgIFdoZW4gc2VhcmNoaW5nLCBzaG91bGQgb3JkZXIgb2YgY29tcG9zaW5nIGNoYXJhY3RlcnMgYmUgaWdub3JlZD8KKzggICBTaG91bGQgaW1wbGVtZW50ICdkZWxjb21iaW5lJyBmb3IgY29tbWFuZCBsaW5lIGVkaXRpbmcuCis4ICAgRGV0ZWN0IG92ZXJsb25nIFVURi04IHNlcXVlbmNlcyBhbmQgaGFuZGxlIHRoZW0gbGlrZSBpbGxlZ2FsIGJ5dGVzLgorOCAgICI6cy94L1x1XDEvIiBkb2Vzbid0IHdvcmssIG1ha2luZyB1cHBlcmNhc2UgaXNuJ3QgZG9uZSBmb3IgbXVsdGktYnl0ZQorICAgIGNoYXJhY3RlcnMuCis4ICAgVVRGLTg6ICJyIiBpbiBWaXN1YWwgbW9kZSBkb2Vzbid0IHRha2UgY29tcG9zaW5nIGNoYXJhY3RlcnMuCis4ICAgVVRGLTg6IFdoZW4gdGhlcmUgaXMgYSBwcmVjb21wb3NlZCBjaGFyYWN0ZXIgaW4gdGhlIGZvbnQsIHVzZSBpdCBpbnN0ZWFkCisgICAgb2YgYSBjaGFyYWN0ZXIgYW5kIGEgY29tcG9zaW5nIGNoYXJhY3Rlci4gIFNlZSB4dGVybSBmb3IgYW4gZXhhbXBsZS4KKzcgICBXaGVuIGEgY2hhcmFjdGVyIGNhbid0IGJlIGRpc3BsYXllZCwgZGlzcGxheSBpdHMgZGlncmFwaCBpbnN0ZWFkLgorICAgICdkaXNwbGF5JyBvcHRpb24gdG8gc3BlY2lmeSB0aGlzLgorNyAgIFVzZSBpZGVhcyBmb3IgbmxfbGFuZ2luZm8oKSBmcm9tIE1hcmt1cyBLdWhuIGluIGVuY19kZWZhdWx0KCk6CisgICAgKHd3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9sYW5naW5mby5jKQorLSAgIEdUSyBhbmQgV2luMzI6IEFsbG93IHNlbGVjdGluZyBmb250cyBmb3IgJ2d1aWZvbnRzZXQnIHdpdGggdGhlCisgICAgZm9udHNlbGVjdG9yIHNvbWVob3cuCistICAgR1RLIGFuZCBXaW4zMjogbWFrZSBpdCBwb3NzaWJsZSB0byBzZXQgdGhlIGZvbnQgZm9yIHRoZSBtZW51IHRvIG1ha2UgaXQKKyAgICBwb3NzaWJsZSB0byBoYXZlICdlbmNvZGluZycgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgbG9jYWxlLgorLSAgIGRiY3NfY2xhc3MoKSBvbmx5IHdvcmtzIGZvciBKYXBhbmVzZSBhbmQgS29yZWFuLiAgSW1wbGVtZW50IHRoaXMgZm9yCisgICAgb3RoZXIgZW5jb2RpbmdzLiAgVGhlICJldWMtanAiIGFuZCAiZXVjLWtyIiBjaG9pY2VzIG1pZ2h0IGJlIHdyb25nLgorLSAgIEZpbmQgc29tZSB3YXkgdG8gYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIHJpZ2h0IEdVSSBmb250IG9yIGZvbnRzZXQsCisgICAgZGVwZW5kaW5nIG9uIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdlbmNvZGluZycuCisgICAgSXJyZWxldmFudCBpbiB0aGUgR1RLKyAyIEdVSSBzbyBsb25nIGFzIFVURi04IGlzIHVzZWQuCisgICAgRm9yIFdpbmRvd3MsIHRoZSBjaGFyc2V0X3BhaXJzW10gdGFibGUgY291bGQgYmUgdXNlZC4gIEJ1dCBob3cgZG8gd2Uga25vdworICAgIGlmIGEgZm9udCBleGlzdHM/CistICAgRG8ga2V5Ym9hcmQgY29udmVyc2lvbiBmcm9tICd0ZXJtZW5jb2RpbmcnIHRvICdlbmNvZGluZycgd2l0aAorICAgIGNvbnZlcnRfaW5wdXQoKSBmb3IgTWFjIEdVSSwgUmlzY09TIEdVSSwgQmVPUyBHVUkuCistICAgQWRkIG1uZW1vbmljcyBmcm9tIFJGQzEzNDUgbG9uZ2VyIHRoYW4gdHdvIGNoYXJhY3RlcnMuCisgICAgU3VwcG9ydCBDVFJMLUsgX3ttbmVtb25pY31fCis3ICAgSW4gIi0tIElOU0VSVCAobGFuZykgLS0iIHNob3cgdGhlIG5hbWUgb2YgdGhlIGtleW1hcCB1c2VkIGluc3RlYWQgb2YKKyAgICAibGFuZyIuIChJbHlhIERvZ29sYXpreSkKKy0gICBNYWtlICdsYW5nbWFwJyBhY2NlcHQgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorLSAgIERvIHdlIG5lZWQgdGhlIHJldmVyc2Ugb2YgJ2tleW1hcCcsIGxpa2UgJ2xhbmdtYXAnIGJ1dCB3aXRoIGZpbGVzIGFuZAorICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycz8gIEUuZy4sIHdoZW4gdXNpbmcgYSBSdXNzaWFuIGtleWJvYXJkLgorLSAgIEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gZW50ZXIgbWFwcGluZ3Mgd2hpY2ggYXJlIHVzZWQgd2hlbmV2ZXIgbm9ybWFsIHRleHQKKyAgICBjb3VsZCBiZSBlbnRlcmVkLiAgRS5nLiwgZm9yICJmIiBjb21tYW5kLiAgQnV0IG5vdCBpbiBOb3JtYWwgbW9kZS4gIFNvcnQKKyAgICBvZiBvcHBvc2l0ZSBvZiAnbGFuZ21hcCcuICBVc2UgIjp0bWFwIiBjb21tYW5kPworLSAgIFdoZW4gYnJlYWtpbmcgYSBsaW5lLCB0YWtlIHByb3BlcnRpZXMgb2YgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGludG8KKyAgICBhY2NvdW50LiAgVGhlICJsaW5lYnJlYWsiIHByb2dyYW0gZnJvbSBCcnVubyBIYWlibGUgY2FuIGRvIGl0OgorICAgIGZ0cDovL2Z0cC5pbG9nLmZyL3B1Yi9Vc2Vycy9oYWlibGUvZ251L2xpbmVicmVhay0wLjEudGFyLmd6CisgICAgQnV0IGl0J3MgdmVyeSBjb21wbGljYXRlZC4uLgorCisKK1ByaW50aW5nOgorLSAgIEFkZCAicGFnZSB3aWR0aCIgdG8gd3JhcCBsb25nIGxpbmVzLgorLSAgIFdpbjMyOiB1c2UgYSBmb250IGRpYWxvZyBmb3Igc2V0dGluZyAncHJpbnRmb250Jy4gIENhbiByZXVzZSB0aGUgY29kZSBmb3IKKyAgICB0aGUgJ2d1aWZvbnQnIGRpYWxvZywgcHV0IHRoZSBjb21tb24gY29kZSBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uLgorLSAgIFdpbjMyOiB3aGVuICdwcmludGZvbnQnIGlzIGVtcHR5IHVzZSAnZ3VpZm9udCcuCistICAgVW5peDogVXNlIHNvbWUgZGlhbG9nIGJveCB0byBkbyB0aGUgb2J2aW91cyBzZXR0aW5ncyAocGFwZXIgc2l6ZSwgcHJpbnRlcgorICAgIG5hbWUsIHBvcnRyYWl0L2xhbmRzY2FwZSwgZXRjKS4KKy0gICBXaW4zMjogYWRkIG9wdGlvbnMgdG8gcHJpbnQgZGlhbG9nLiAgUGF0Y2ggZnJvbSBWaXBpbiBBcmF2aW5kLgorLSAgIFBvc3RTY3JpcHQ6IG9ubHkgd29ya3MgZm9yIDctYml0IEFTQ0lJIGFuZCBFQkNESUMuICBTaG91bGQgc3VwcG9ydAorICAgIGRpZmZlcmVudCAnZW5jb2RpbmcnIHZhbHVlcyBzb21laG93LgorLSAgIEFsbG93IHNwZWNpZnlpbmcgdGhlIHBhcGVyIHNpemUsIGluc3RlYWQgb2YgdXNpbmcgYSBzdGFuZGFyZCBzaXplLiAgU2FtZQorICAgIHVuaXRzIGFzIGZvciB0aGUgbWFyZ2lucy4KKy0gICBTdXBwb3J0IHJpZ2h0LXRvLWxlZnQgdGV4dD8KKzggICBNYWtlIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGRhcmtlbmluZyBmdW5jdGlvbiBwcmVzZXJ2ZSB0aGUgaHVlIG9mIHRoZQorICAgIGNvbG9yLgorCisKK1N5bnRheCBoaWdobGlnaHRpbmc6CistICAgUGF0Y2ggdG8gYWRkIGhpZ2hsaWdodGluZyBmb3Igd2hpdGVzcGFjZS4gKFRvbSBTY2h1bW0sIDIwMDMgSnVsIDUpCisgICAgdXNlIHRoZSBwYXRjaCB0aGF0IGtlZXBzIHVzaW5nIEhMRl84IGlmIEhMRl9XUyBoYXMgbm90CisgICAgYmVlbiBnaXZlbiB2YWx1ZXMuCisgICAgQWRkIHNlY3Rpb24gaW4gaGVscCBmaWxlcyBmb3IgdGhlc2UgaGlnaGxpZ2h0IGdyb3Vwcz8KKzggICBNYWtlICI6c3luIG9mZiIgdXNlICdydW50aW1lcGF0aCcgaW5zdGVhZCBvZiAkVklNUlVOVElNRS4gKEdhcnkgSm9obnNvbikKKyAgICBTaG91bGQgZG8gdGhlIHNhbWUgZm9yICI6c3luIG9uIiBhbmQgIjpzeW4gbWFudWFsIi4KKzggICBTdXBwb3J0ICJjb250YWluZWRpbiIgYXJndW1lbnQgZm9yICI6c3luIGluY2x1ZGUiLCBzbyB0aGF0IHRoZSBkZWZpbmVkCisgICAgY2x1c3RlciBjYW4gYmUgYWRkZWQgdG8gZXhpc3Rpbmcgc3ludGF4IGl0ZW1zLgorOCAgIEMgc3ludGF4OiBEb24ndCBoaWdobGlnaHQge30gYXMgZXJyb3JzIGluc2lkZSAoKSB3aGVuIHVzZWQgbGlrZSB0aGlzOgorICAgICIoeyBzb21ldGhpbmcgfSkiLCBvZnRlbiB1c2VkIGluIEdDQyBjb2RlLgorOCAgIFdoZW4gZWRpdGluZyBhIG5ldyBmaWxlIHdpdGhvdXQgYSBuYW1lIGFuZCBnaXZpbmcgaXQgYSBuYW1lIChieSB3cml0aW5nCisgICAgaXQpIGFuZCAnZmlsZXR5cGUnIGlzIG5vdCBzZXQsIGRldGVjdCB0aGUgZmlsZXR5cGUuICBBdm9pZCBkb2luZyBpdCBmb3IKKyAgICAiOndxIGZpbGUiLgorOCAgIE1ha2UgY29udmVyc2lvbiB0byBIVE1MIGZhc3RlciAoV3JpdGUgaXQgaW4gQyBvciBwcmUtY29tcGlsZSB0aGUgc2NyaXB0KS4KKzkgICBUaGVyZSBpcyBzdGlsbCBhIHJlZHJhdyBidWcgc29tZXdoZXJlLiAgUHJvYmFibHkgYmVjYXVzZSBhIGNhY2hlZCBzdGF0ZSBpcworICAgIHVzZWQgaW4gYSB3cm9uZyB3YXkuICBJIGNhbid0IHJlcHJvZHVjZSBpdC4uLgorNyAgIE1ha2Ugc3ludGF4IGtleXdvcmQgdGFibGUgY29uZmlndXJhYmxlLiAgU2V0IG51bWJlciBvZiBiaXRzIHVzZWQgd2l0aAorICAgICI6c3luIGNsZWFyIFtoYXNoYml0c10iLCBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gcmVhbGxvY2F0ZSB0aGUgdGFibGUuCisgICAgbWluaW1hbCA0IGJpdHMsIG1heGltYWwgMTYuIChDYW1wYmVsbCkKKzcgICBCZSBhYmxlIHRvIGNoYW5nZSBvbmx5IHRoZSBiYWNrZ3JvdW5kIGhpZ2hsaWdodGluZy4gIFVzZWZ1bCBmb3IgRGlmZiogYW5kCisgICAgU2VhcmNoIGhpZ2hsaWdodGluZy4KKzggICBBbGxvdyB0aGUgdXNlciB0byBhZGQgaXRlbXMgdG8gdGhlIFN5bnRheCBtZW51IHNvcnRlZCwgd2l0aG91dCBoYXZpbmcgdG8KKyAgICBjaGFuZ2UgdGhpcyBmb3IgZWFjaCByZWxlYXNlLgorOCAgIEFkZCBhICJtYXRjaGNvbnRhaW5zIiBmb3IgcmVnaW9uczogaXRlbXMgY29udGFpbmVkIGluIHRoZSBzdGFydCBvciBlbmQKKyAgICBwYXR0ZXJuLCBidXQgbm90IGluIHRoZSBib2R5LgorOCAgIEFkZCBhICJrZWVwZW5kLWNvbnRhaW5lZCIgYXJndW1lbnQ6IERvbid0IGNoYW5nZSB0aGUgZW5kIG9mIGFuIGl0ZW0gdGhpcworICAgIG9uZSBpcyBjb250YWluZWQgaW4uICBMaWtlICJrZWVwZW5kIiBidXQgc3BlY2lmaWVkIG9uIHRoZSBjb250YWluZWQgaXRlbSwKKyAgICBpbnN0ZWFkIG9mIHRoZSBjb250YWluaW5nIGl0ZW0uCis4ICAgRm9yIGtleXdvcmRzLCBhbGxvdyB0byBkZWZpbmUgdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUgd2l0aCAiOnN5bgorICAgIGNsZWFyIi4gIENoYW5nZSBLSEFTSF8gZGVmaW5lcyBpbnRvIHZhcmlhYmxlcyBzdG9yZWQgaW4gYnVmZmVyIHN0cnVjdC4KKyAgICBVc2Ugc29tZXRoaW5nIGVsc2UgdGhhbiBsaW5lYXIgbGlua2VkIGxpc3QgZnJvbSB0aGUgaGFzaCB0YWJsZS4gKENhbXBiZWxsKQorOCAgIGNwcC52aW06IEluIEMrKyBpdCdzIGFsbG93ZWQgdG8gdXNlIHt9IGluc2lkZSAoKS4KKzggICBTb21lIHN5bnRheCBmaWxlcyBzZXQgJ2lza2V5d29yZCcuICBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIGZpbGV0eXBlCisgICAgdGhpcyBpc24ndCByZXNldC4gIEFkZCBhIHNwZWNpYWwga2V5d29yZCBkZWZpbml0aW9uIGZvciB0aGUgc3ludGF4IHJ1bGVzPworICAgIFdoZW4gdGhpcyBpcyBkb25lLCB1c2UgdmltLnZpbSBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBoZWxwIGZpbGUgZXhhbXBsZXMsCisgICAgYnV0IHdpdGhvdXQgIjoiIGluICdpc2tleXdvcmQnIGZvciBzeW50YXguCis4ICAgQWRkIHNwZWNpZmljIHN5bnRheCBpdGVtIHRvIG1hdGNoIHdpdGggcGFyZW5zL2JyYWNlcyB0aGF0IGRvbid0IGhhdmUgYQorICAgICIlIiBtYXRjaC4gIDpzeW50YXggbm9tYXRjaCBjTWF0Y2hFcnJvciAoLHssWywpLH0sXSBbY29udGFpbmVkXQorOCAgIEhpZ2hsaWdodCB0aGUgdGV4dCBiZXR3ZWVuIHR3byBtYXRjaGluZyBwYXJlbnMgKGUuZy4sIHdpdGggYSBncmV5CisgICAgYmFja2dyb3VuZCkgd2hlbiBvbiBvbmUgb2YgdGhlIHBhcmVucyBvciBpbiBiZXR3ZWVuIHRoZW0uCisgICAgT3IgaGlnaGxpZ2h0IHRoZSBtYXRjaGluZyBwYXJlbiB3aGVuIHRoZSBjdXJzb3IgaXMgb24gb25lLgorOCAgIEFkZCBhIGNvbW1hbmQgdG8ganVtcCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgaGlnaGxpZ2h0ZWQgd2l0aCAiRXJyb3IiLgorOCAgIFdoZW4gdXNpbmcgYSBjdGVybSwgYW5kIG5vIGN0ZXJtZmcgb3IgY3Rlcm1iZyBhcmUgZGVmaW5lZCwgdXNlIHN0YXJ0L3N0b3AKKyAgICBzZXF1ZW5jZXMuCUFkZCByZW1hcmsgaW4gZG9jcyB0aGF0IDppZiAndGVybScgPT0gInRlcm0tbmFtZSIgc2hvdWxkIGJlCisgICAgdXNlZC4KKzggICBBZGQgQHNwZWxsIGNsdXN0ZXIgdG8gU3RyaW5nIGFuZCBDb21tZW50IGdyb3VwcyBmb3IgbWFueSBsYW5ndWFnZXMuICBXaWxsCisgICAgYWxsb3cgc3BlbGwgY2hlY2tpbmcuIChGbGVpbmVyKQorOCAgIFdoZW4gbGlzdGluZyBzeW50YXggaXRlbXMsIHRyeSB0byBzb3J0IHRoZSBrZXl3b3JkcyBhbHBoYWJldGljYWxseS4gIEFuZAorICAgIHJlLWluc2VydCB0aGUgW10gaWYgcG9zc2libGUuCis4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgY29sb3Igb2YgdGV4dCBmb3IgVmlzdWFsIGhpZ2hsaWdodCBncm91cCAobGlrZSBmb3IKKyAgICB0aGUgQ3Vyc29yKS4KKzggICAiZmciIGFuZCAiYmciIGRvbid0IHdvcmsgaW4gYW4geHRlcm0uICBHZXQgZGVmYXVsdCBjb2xvcnMgZnJvbSB4dGVybSB3aXRoCisgICAgYW4gRVNDIHNlcXVlbmNlLiAgSWRlYXMgaW46IH4vdmltL3BhdGNoZXMvdmlrYXMueHRlcm1jb2xvcnMgLgorOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gb25seSBoaWdobGlnaHQgYSBzdWItZXhwcmVzc2lvbiBvZiBhIG1hdGNoLiAgTGlrZQorICAgIHVzaW5nICJcMSIgaW4gYSAiOnMiIGNvbW1hbmQuCis4ICAgU3VwcG9ydCBmb3IgZGVsZXRpbmcgc3ludGF4IGl0ZW1zOgorICAgIDpzeW4ga2V5d29yZCBjVG9kbyByZW1vdmUgdGhpcworICAgIDpzeW4gbWF0Y2ggY1RvZG8gcmVtb3ZlICJwYXR0ZXJuIgorICAgIDpzeW4gcmVnaW9uIGNTdHJpbmcgcmVtb3ZlIHN0YXJ0PSJ0aGlzIiBlbmQ9InRoYXQiCis4ICAgQWRkIHBvc3NpYmlsaXR5IHRvIHN5bmMgb24gc29tZXRoaW5nIGVsc2UsIHdoZW4gdGhlIHN5bmNpbmcgaW4gb25lIHdheQorICAgIGRvZXNuJ3QgZmluZCBtYXRjaC4gIEZvciBIVE1MOiBXaGVuIG5vIHtzY3JpcHR9IGlzIGZvdW5kLCB0cnkgbG9va2luZyBmb3IKKyAgICBhICc8Jy4gIChGbGVpbmVyKQorNyAgIFJlcGxhY2UgdGhlIHN5bmNocm9uaXppbmcgbWV0aG9kIHdpdGggYSBzdGF0ZSBtYWNoaW5lIHNwZWNpZmljYXRpb24/CisgICAgU2hvdWxkIGJlIGFibGUgdG8gc3RhcnQgYXQgYW55IGxpbmUgaW4gdGhlIGZpbGUsIHNlYXJjaCBmb3J3YXJkcyBvcgorICAgIGJhY2t3YXJkcywgYW5kIHVzZSB0aGUgcmVzdWx0IG9mIG1hdGNoaW5nIGEgcGF0dGVybi4KKzcgICBVc2UgcGFyc2luZyBsaWtlIGF3aywgc28gdGhhdCBlLmcuLCBhICggd2l0aG91dCBhIG1hdGNoaW5nICkgY2FuIGJlCisgICAgZGV0ZWN0ZWQuCis4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgImludmVydGVkIiBoaWdobGlnaHRpbmcsIGludmVydCB0aGUgb3JpZ2luYWwKKyAgICBjaGFyYWN0ZXIuICBGb3IgVmlzdWFsIG1vZGUuICh4dGVybS1zZWxlY3Rpb24gYWxyZWFkeSBkb2VzIHRoaXMpLgorOCAgIEhpZ2hsaWdodCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgd2l0aCAiU3BlY2lhbENoYXIiLCBsaW5rZWQgdG8KKyAgICAiU3BlY2lhbCIuICBEaXNwbGF5IHRoZW0gd2l0aCB0aGUgZGlncmFwaCBjaGFyYWN0ZXJzLCBpZiBwb3NzaWJsZS4KKzcgICBBZGQgIkRlZmF1bHRGRyIgYW5kICJEZWZhdWx0QkciIGZvciB0aGUgY29sb3JzIG9mIHRoZSBtZW51LiAoTWFydGluCisgICAgRGFsZWNraSBoYXMgYSBwYXRjaCBmb3IgTW90aWYpCis4ICAgSGlnaGxpZ2h0IHRoZSBjbGlwYm9hcmQtc2VsZWN0aW9uIHdpdGggYSBoaWdobGlnaHQgZ3JvdXAuCis4ICAgQmUgYWJsZSB0byByZXNldCBoaWdobGlnaHRpbmcgdG8gaXRzIG9yaWdpbmFsIChkZWZhdWx0KSB2YWx1ZXMuCis3ICAgQmUgYWJsZSB0byB3cml0ZSBjdXJyZW50IGhpZ2hsaWdodGluZyB0byBhIGZpbGUgYXMgY29tbWFuZHMsIHNpbWlsYXIgdG8KKyAgICAiOm1rdmltcmMiLgorOCAgIEltcHJvdmUgYy52aW06CisgICAgLSBBZGQgY2hlY2sgZm9yIHVudGVybWluYXRlZCBzdHJpbmdzLCB3aXRoIGEgdmFyaWFibGUgdG8gc3dpdGNoIGl0IG9uOgorICAgICAgImNfc3RyaWN0X2Fuc2kiLgorICAgIC0gRGV0ZWN0IHVuYmFsYW5jZWQgIiNlbmRpZiIuICBSZXF1aXJlcyBsb29raW5nIGJhY2sgYSBsb25nIHdheS4uLgorOCAgIEFkZCBhbiBvcHRpb24gdG8gcmVzdHJpY3QgdGhlIHVwZGF0aW5nIG9mIHN5bnRheCBoaWdobGlnaHRpbmcgdG8gdGhlCisgICAgY3VycmVudCBsaW5lIHdoaWxlIGluIEluc2VydCBtb2RlLgorOCAgIFdoZW4gZ3Vlc3NpbmcgdmFsdWUgb2YgJ2JhY2tncm91bmQnLCB0aGUgc3ludGF4IGZpbGUgaGFzIGFscmVhZHkgYmVlbgorICAgIGxvYWRlZCAoZnJvbSB0aGUgLmd2aW1yYykuCUFmdGVyIGNoYW5naW5nICdiYWNrZ3JvdW5kJywgbG9hZCBpdCBhZ2Fpbj8KKzggICBBZGQgIjpzeW4gcmVzeW5jIiBjb21tYW5kLCB0byByZS1wYXJzZSB0aGUgd2hvbGUgZmlsZSB1bnRpbCB0aGUgY3VycmVudAorICAgIGRpc3BsYXkgcG9zaXRpb24uCis4ICAgU2hvdWxkIHN1cHBvcnQgIm1lIiBvZmZzZXQgZm9yIGEgcmVnaW9uIHN0YXJ0IHBhdHRlcm4uICBUbyBiZSB1c2VkIHRvCisgICAgYWxsb3cgc2VhcmNoaW5nIGZvciB0aGUgZW5kIHBhdHRlcm4gaW5zaWRlIHRoZSBtYXRjaCBvZiB0aGUgZW5kIHBhdHRlcm4uCisgICAgRXhhbXBsZTogc3luIHJlZ2lvbiBwaWtlWFggc3RhcnQ9IihbXntdIiBlbmQ9IikiIHNob3VsZCB3b3JrIG9uICIoKSIuCis4ICAgV2hlbiB1c2luZyBhIHJlZ2V4cCBmb3IgImNvbnRhaW5zPSIsIHNob3VsZCBkZWxheSBtYXRjaGluZyB3aXRoIGl0IHVudGlsCisgICAgcmVkcmF3aW5nIGhhcHBlbnMuICBTZXQgYSBmbGFnIHdoZW4gYSBncm91cCBpcyBhZGRlZCwgY2hlY2sgdGhpcyBmbGFnIHdoZW4KKyAgICBoaWdobGlnaHRpbmcgc3RhcnRzLgorNyAgIEFkZCAic2VtaXRyYW5zIjogQWRkIGhpZ2hsaWdodGluZy4gIEUuZy4sIG1ha2UgdGhlIHRleHQgYm9sZCwgYnV0IGtlZXAgdGhlCisgICAgY29sb3JzLiAgQW5kIGFkZCBjb2xvcnMsIHNvIHRoYXQgR3JlZW4rUmVkIGJlY29tZXMgWWVsbG93LgorICAgIEUuZy4gZm9yIHRoaXMgaHRtbDoKKwk8Qj4gYm9sZCB0ZXh0IDxJPiBpdGFsaWMrYm9sZCB0ZXh0IDwvQj4gaXRhbGljIHRleHQgPC9JPgorNyAgIFdpbGQgaWRlYTogTm90IG9ubHkgc2V0IGhpZ2hsaWdodGluZywgYnV0IGFsc28gY2hhbmdlIHdoYXQgaXMgZGlzcGxheWVkCisgICAgKGUuZy4sIHJlbW92ZSBjaGFyYWN0ZXJzLCBzbyB0aGF0ICI8Qj5ib2xkPC9CPiIgY2FuIGJlIHNob3duIGFzICJib2xkIik6CisJOnN5biByZWdpb24gYm9sZHN0dWZmIHN0YXJ0PSI8Qj4iIGRpc3BsYXk9IiIgZW5kPSI8L0I+IiBkaXNwbGF5PSIiCis3ICAgQ1RSTC1dIGNoZWNrcyB0aGUgaGlnaGxpZ2h0IGdyb3VwIGZvciBmaW5kaW5nIG91dCB3aGF0IHRoZSB0YWcgaXMuCis3ICAgQWRkIGFuIGV4cGxhbmF0aW9uIGhvdyBhIGxpc3Qgb2Ygd29yZHMgY2FuIGJlIHVzZWQgdG8gaGlnaGxpZ2h0IG1pc3NwZWxsZWQKKyAgICB3b3Jkcy4KKzggICBBZGQgc3BlbGwgY2hlY2tpbmcuICBVc2UgImlzcGVsbCAtYSIgc29tZWhvdy4KKyAgICB+L3ZpbS9wYXRjaGVzL3dtX3ZpbS01XzRkLnppcCAgY2FuIGJlIHVzZWQgYXMgYW4gZXhhbXBsZSAoaW5jbHVkZXMgaXNwZWxsCisgICAgaW5zaWRlIFZpbSkuICBHYXV0YW0gSXllciBoYXMgYW4gZXhhbXBsZSB3aXRoICJhc3BlbGwiLiAgImVuZ3NwY2hrIiBmcm9tCisgICAgQ2hhcmxlcyBDYW1wYmVsbCBpcyBhIGdvb2Qgd2F5LiAgU3VwcG9ydCBmb3IgYXBwcm94aW1hdGUtcmVnZXhwcyB3aWxsIGhlbHAKKyAgICAoYWdyZXAgaHR0cDovL3d3dy50Z3JpZXMuZGUvYWdyZXAvKS4KKzcgICBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgIjpmaW5kIiBzaG91bGQgc2VhcmNoIGluICdwYXRoJy4KKzggICBBZGQgbW9yZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgOnN5bnRheC4KKzggICBBZGQgbW9yZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgOmhpZ2hsaWdodC4KKzggICBBZGQgbW9yZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgOnNpZ24uCis3ICAgU2hvdWxkIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHBhcnNlIHRoZSA6c3ludGF4IGFuZCA6aGlnaGxpZ2h0IGNvbW1hbmRzLgorICAgIFVzZSB0YWJsZXMgb3IgbGlzdHMgdGhhdCBjYW4gYmUgc2hhcmVkIGJ5IHBhcnNpbmcgZm9yIGV4ZWN1dGlvbiBhbmQKKyAgICBjb21wbGV0aW9uPworOCAgIEFkZCBDb2xvclNjaGVtZVBvc3QgYXV0b2NvbW1hbmQgZXZlbnQsIHNvIHRoYXQgc2NyaXB0cyBjYW4gc2V0IHVwIHRoZWlyCisgICAgaGlnaGxpZ2h0aW5nLiAoU2FsbWFuIEhhbGltKQorNyAgIEFkZCBhIGZldyBzZXRzIG9mIGNvbG9ycyAoZS5nLiBCb3JsYW5kIFR1cmJvIEMgb25lKS4gIFdpdGggYSBtZW51IHRvCisgICAgc2VsZWN0IG9uZSBvZiB0aGUgc2V0cy4KKzggICBBZGQgb2Zmc2V0cyB0byBzdWItbWF0Y2hlczogIlwoYSpcKSAqImhlPWUxLTEKKyAgICAnZScgaXMgZW5kIG9mIG1hdGNoICdlMScgaXMgZW5kIG9mIHN1Yi1tYXRjaCAxLCAnczInIGlzIHN0YXJ0IG9mIHN1Ym1hdGNoCisgICAgMiwgZXRjLgorOCAgIEluIEluc2VydCBtb2RlLCB3aGVuIHRoZXJlIGFyZSB0eXBlYWhlYWQgY2hhcmFjdGVycywgcG9zdHBvbmUgdGhlCisgICAgaGlnaGxpZ2h0aW5nIChmb3IgIi4iIGNvbW1hbmQpLgorOCAgIFN5bmNpbmcgb24gY29tbWVudHMgaXNuJ3QgMTAwJSBjb3JyZWN0IHdoZW4gLyAvIGxpbmVzIG1peCB3aXRoIC8gKiBhbmQgKiAvLgorICAgIEZvciBleGFtcGxlOiBXaGF0IGFib3V0IGEgbGluZSB0aGF0IHN0YXJ0cyB3aXRoIC8gLyBhbmQgY29udGFpbnMgKiAvPworOCAgIElnbm9yZSAvICogYW5kICAqIC8gaW5zaWRlIHN0cmluZ3MsIHdoZW4gc3luY2luZy4KKzcgICBCdWlsZCBhIGZldyBtb3JlIHN5bnRheCBmaWxlcyBmcm9tIHRoZSBmaWxlICIvdXNyL3NoYXJlL21pc2MvdmdyaW5kZWZzIjoKKyAgICBJU1AsIExETCwgSWNvbiwgcmF0Zm9yLiAgQW5kIGNoZWNrICJuZWRpdC9zb3VyY2UvaGlnaGxpZ2h0LmMiLgorNiAgIEFkZCBwb3NzaWJpbGl0eSB0byBoYXZlIGJhY2tncm91bmQgY29sb3IgY29udGludWUgdW50aWwgdGhlIHJpZ2h0IGVkZ2Ugb2YKKyAgICB0aGUgd2luZG93LiAgVXNlZnVsIGZvciBjb21tZW50IGJsb2NrcyBhbmQgZnVuY3Rpb24gaGVhZGluZ3MuIChSb2dhbGwpCistICAgTWFrZSBpdCBwb3NzaWJsZSB0byBhZGQgImNvbnRhaW5zIiBpdGVtcyBmb3IgYWxsIGl0ZW1zIGluIGEgZ3JvdXAuCVVzZWZ1bAorICAgIHdoZW4gZXh0ZW5kaW5nIGFuIGFscmVhZHkgZXhpc3Rpbmcgc3ludGF4IGZpbGUuCistICAgQWRkIGxpbmUtY29udGludWF0aW9uIHBhdHRlcm4gZm9yIG5vbi1zeW5jaW5nIGl0ZW1zIHRvbz8KKy0gICBBZGQgcG9zc2liaWxpdHkgdG8gaGlnaGxpZ2h0IHNwZWNpZmljIGNvbHVtbnMgKGZvciBGb3J0cmFuKS4gIE9yIHB1dCBhCisgICAgbGluZSBpbiBiZXR3ZWVuIGNvbHVtbnMgKGUuZy4gZm9yICd0ZXh0d2lkdGgnKS4KKyAgICBQYXRjaCB0byBhZGQgJ2hsY29sdW1uJyBmcm9tIFZpdCBTdHJhZGFsLCAyMDA0IE1heSAyMC4KKy0gICBBZGQgcG9zc2liaWxpdHkgdG8gaGlnaGxpZ2h0IHRoZSB3aG9sZSBsaW5lLCBpbmNsdWRpbmcgdGhlIHJpZ2h0IG1hcmdpbgorICAgIChmb3IgY29tbWVudCBibG9ja3MpLgorLSAgIEFkZCAnaGxtYXRjaCcgb3B0aW9uOiBMaXN0IG9mIGZsYWdzOgorICAgICdjJzogaGlnaGxpZ2h0IG1hdGNoIGZvciBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KKyAgICAnYic6IGhpZ2hsaWdodCB0aGUgcHJldmlvdXMgKCwgYW5kIGl0cyBtYXRjaC4KKyAgICAnYSc6IGhpZ2hsaWdodCBhbGwgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyAoIHVudGlsIGl0cyBtYXRjaC4KKwkgQWxzbyBmb3Ige30sIDw+LCBldGMuPworICAgICdlJzogaGlnaGxpZ2h0IGFsbCBicmFjZXMgd2l0aG91dCBhIG1hdGNoIChzbG93PykKKyAgICBPUjogYWRkIGFuIGFyZ3VtZW50ICJjdXJzb3IiIHRvIHRoZSBzeW50YXggY29tbWFuZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUKKyAgICByZWdpb24vbWF0Y2gva2V5d29yZCBpcyBvbmx5IGhpZ2hsaWdodGVkIHdoZW4gdGhlIGN1cnNvciBpcyBvbiBpdC4KKyAgICAoQ2FtcGJlbGwpCisgICAgT3IgZG8gaXQgbGlrZSBFbHZpczogZGVmaW5lIHRleHQgb2JqZWN0cyBhbmQgaG93IHRvIGhpZ2hsaWdodCB0aGVtIGFyb3VuZAorICAgIHRoZSBjdXJzb3IuIChJYWluIFRydXNrZXR0KQorNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGFsbCB3b3JkcyBpbiB0aGUgdGFncyBmaWxlcyBhcyBLZXl3b3JkLgorICAgIENhbiBhbHNvIGJlIGRvbmUgd2l0aCBhIHNjcmlwdCAoYnV0IGl0J3Mgc2xvdykuCis3ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBjYWxsIGEgIjoiIGNvbW1hbmQgd2hlbiBhIG1hdGNoIGlzIGZvdW5kLiAgU2hvdWxkCisgICAgYWxsb3cgZm9yIGFkZGluZyBrZXl3b3JkcyBmcm9tIHRoZSB0ZXh0IChlLmcuIHZhcmlhYmxlcyB0aGF0IGFyZSBzZXQpLgorICAgIEFuZCBhbGxvd3MgZm9yIHNlY3Rpb25zIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZy4KKzcgICBBZGQgaGlnaGxpZ2h0IGdyb3VwIGZvciBjb21tYW5kbGluZTogIkNvbW1hbmRsaW5lIi4gIE1ha2Ugc3VyZSBpdAorICAgIGhpZ2hsaWdodHMgdGhlIGNvbW1hbmQgbGluZSB3aGlsZSB0eXBpbmcgYSBjb21tYW5kLCBhbmQgYW55IG91dHB1dCBmcm9tCisgICAgbWVzc2FnZXMuICBBbmQgZXh0ZXJuYWwgY29tbWFuZHM/Cis4ICAgTWFrZSBhIHZlcnNpb24gdGhhdCB3b3JrcyBsaWtlIGxlc3MsIGJ1dCB3aXRoIGhpZ2hsaWdodGluZzogcmVhZCBzdGRpbiBmb3IKKyAgICB0ZXh0LCBleGl0IGF0IGVuZCBvZiBmaWxlLCBkb24ndCBhbGxvdyBlZGl0aW5nLCBldGMuICBtb3JlaW0/ICBsZXNzaW0/Cis3ICAgU3BlY2lhbEtleSBoaWdobGlnaHRpbmcgb3ZlcnJ1bGVzIHN5bnRheCBoaWdobGlnaHRpbmcuICBDYW4ndCBnaXZlIGFuCisgICAgdW5wcmludGFibGUgY2hhciBhbm90aGVyIGNvbG9yLiAgV291bGQgYmUgdXNlZnVsIGZvciBeTSBhdCBlbmQgb2YgbGluZS4KKworCitCdWlsdC1pbiBzY3JpcHQgbGFuZ3VhZ2U6Cis4ICAgQWRkIHJlZmVycmluZyB0byBrZXkgb3B0aW9ucyB3aXRoICImdF94eCIuICBCb3RoIGZvciAiZWNobyAmdF94eCIgYW5kCisgICAgIjpsZXQgJnRfeHggPSIuICBVc2VmdWwgZm9yIG1ha2luZyBwb3J0YWJsZSBtYXBwaW5ncy4KKzggICBBbGxvdyByYW5nZSBmb3IgIjpleGVjIi4gIFBhc3MgaXQgb24gdG8gdGhlIGV4ZWN1dGVkIGNvbW1hbmQuIChXZWJiKQorOCAgIGV4aXN0cygiJiZvcHRpb24iKSB0ZXN0cyBpZiAnb3B0aW9uJyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gIFVzZWZ1bCBmb3IKKyAgICAnc2hlbGxzbGFzaCcsIGZvciBleGFtcGxlLgorNyAgIEJlIGFibGUgdG8gY2FsbCBhIGZ1bmN0aW9uIHdoaWxlIHBhc3Npbmcgb24gYSB2YXJpYWJsZSBudW1iZXIgb2YKKyAgICBhcmd1bWVudHM6CisJOmZ1bmN0aW9uIEZvbyhhYmMsIC4uLikKKwk6ICBjYWxsIEJhcihhOmFiYywgYToqKQorICAgIENoYXJsZXMgQ2FtcGJlbGwgaGFzIGEgcGF0Y2ggZm9yIHRoaXMKKzggICBIYXZlIGEgbG9vayBhdCBWU0VMLiAgV291bGQgaXQgYmUgdXNlZnVsIHRvIGluY2x1ZGU/IChCaWdoYW0pCis4ICAgQWRkICI6ZnVuZ3JvdXAiIGNvbW1hbmQsIHRvIGdyb3VwIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRvZ2V0aGVyLiAgV2hlbgorICAgIGVuY291bnRlcmVkLCBhbGwgZnVuY3Rpb25zIGluIHRoZSBncm91cCBhcmUgcmVtb3ZlZC4gIFN1Z2dlc3QgdXNpbmcgYW4KKyAgICBvYnNjdXJlIG5hbWUgdG8gYXZvaWQgbmFtZSBjbGFzaGVzLiAgUmVxdWlyZSBhICI6ZnVuZ3JvdXAgRU5EIiBpbiB0aGUgc2FtZQorICAgIHNvdXJjZWQgZmlsZT8gIEFzc3VtZSB0aGUgZ3JvdXAgZW5kcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgSGFuZGxlCisgICAgbmVzdGVkIHBhY2thZ2VzPworICAgIEFsdGVybmF0aXZlOiBTdXBwb3J0IHBhY2thZ2VzLiAge3BhY2thZ2UtbmFtZX06e2Z1bmN0aW9uLW5hbWV9KCkuCisgICAgUGFja2FnZXMgYXJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gZmlyc3QgdXNlZCwgZnJvbQorICAgICRWSU1SVU5USU1FL3BhY2thZ2VzIChvciB1c2UgYSBzZWFyY2ggcGF0aCkuCis3ICAgTWFrZSBnbG9icGF0aCgpIGFsc28gd29yayB3aXRoICIqKiIgYW5kIHVwd2FyZHMgc2VhcmNoLiAoQnJpYW4gTWVkbGV5KQorNyAgIFByZS1wYXJzZSBvciBjb21waWxlIFZpbSBzY3JpcHRzIGludG8gYSBieXRlY29kZS4KKyAgICAxLiBQdXQgdGhlIGJ5dGVjb2RlIHdpdGggdGhlIG9yaWdpbmFsIHNjcmlwdCwgd2l0aCBhbiAiOmlmCisgICAgICAgaGFzKCdieXRlY29kZScpIiBhcm91bmQgaXQsIHNvIHRoYXQgaXQncyBvbmx5IHVzZWQgd2l0aCBhIFZpbSB0aGF0CisgICAgICAgc3VwcG9ydHMgaXQuICBVcGRhdGUgdGhlIGNvZGUgd2l0aCBhIGNvbW1hbmQsIGNhbiBiZSB1c2VkIGluIGFuCisgICAgICAgYXV0b2NvbW1hbmQuCisgICAgMi4gVXNlIGEgIi52aWMiIGZpbGUgKGxpa2UgUHl0aG9uIHVzZSAucHljKS4gIENyZWF0ZSBpdCB3aGVuIHdyaXRpbmcgYQorICAgICAgIC52aW0gZmlsZS4gIFByb2JsZW06IGRpc3RyaWJ1dGlvbi4KKyAgICAzLiBVc2UgYSBjYWNoZSBkaXJlY3RvcnkgZm9yIGVhY2ggdXNlci4gIEhvdyB0byByZWNvZ25pemUgd2hpY2ggY2FjaGVkCisgICAgICAgZmlsZSBiZWxvbmdzIHRvIGEgc291cmNlZCBzY3JpcHQ/Cis3ICAgQWRkICJuIiBmbGFnIHRvIHNlYXJjaCgpIGZ1bmN0aW9uLCBqdXN0IGxpa2Ugc2VhcmNocGFpcigpLiAoQWxleGV5CisgICAgTWFyaW5pY2hldikKKzggICBBZGQgIjpuIiB0byBmbmFtZW1vZGlmeSgpOiBub3JtYWxpemUgcGF0aCwgcmVtb3ZlICIuLi8iIHdoZW4gcG9zc2libGUuCisgICAgQXJpYyBCbHVtZXIgaGFzIGEgcGF0Y2ggZm9yIHRoaXMuCis3ICAgQWRkIGFyZ3VtZW50IHRvIHdpbndpZHRoKCkgdG8gc3VidHJhY3QgdGhlIHNwYWNlIHRha2VuIGJ5ICdmb2xkY29sdW1uJywKKyAgICBzaWducyBhbmQvb3IgJ251bWJlcicuCis4ICAgQWRkIGZ1bmN0aW9uczoKKwltdWx0aWJ5dGVpZHgoc3RyaW5nLCBpZHgpIEJ5dGUgaW5kZXggaW4gbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCisJCQkJUGF0Y2ggYnkgSWx5YSBTaGVyLCAyMDA0IEZlYiAyNQorCW1lbnVwcm9wKHtuYW1lfSwge2lkeH0sIHt3aGF0fSkKKwkJCQlHZXQgbWVudSBwcm9wZXJ0eSBvZiBtZW51IHtuYW1lfSBpdGVtIHtpZHh9LgorCQkJCW1lbnVwcm9wKCIiLCAxLCAibmFtZSIpIHJldHVybnMgIkZpbGUiLgorCQkJCW1lbnVwcm9wKCJGaWxlIiwgMSwgIm4iKSByZXR1cm5zICJubWVudQorCQkJCUZpbGUuT3Blbi4uLiIgYXJndW1lbnQuCisJCQkJUGF0Y2ggYnkgSWx5YSBTaGVyLCAyMDA0IEFwciAyMgorCW1hcG5hbWUoe2lkeH0sIG1vZGUpCXJldHVybiB0aGUgbmFtZSBvZiB0aGUgaWR4J3RoIG1hcHBpbmcuCisJCQkJUGF0Y2ggYnkgSWx5YSBTaGVyLCAyMDA0IE1hciA0LgorCW1hdGNoKHtwYXR9LCB7c3RyaW5nfSBbLHN0YXJ0XSBbLGNvdW50XSkgZ2V0IGluZGV4IG9mIGNvdW50J3RoIG1hdGNoCisJCQkJUGF0Y2ggYnkgSWx5YSBTaGVyLCAyMDA0IE1hciAzMQorCXNwcmludGYoZm9ybWF0LCBhcmcsIC4uKSBIb3cgdG8gcHJldmVudCBhIGNyYXNoPz8/CisJbW91c2V4KCkgbW91c2V5KCkJZ2V0IHBvc2l0aW9uIG9mIG1vdXNlIHBvaW50ZXIgKHBhdGNoIGJ5IFJvc3MKKwkJCQlQcmVzc2VyKQorCWF0dHJpYnV0ZXMoKQkJcmV0dXJuIGZpbGUgcHJvdGVjdGlvbiBmbGFncyAiZHJ3eHJ3eHJ3eCIKKwlta2RpcihkaXIpCQlDcmVhdGUgZGlyZWN0b3J5CisJY29weShmcm9tLCB0bykJCUNvcHkgYSBmaWxlCisJcGVybChjbWQpCQljYWxsIFBlcmwgYW5kIHJldHVybiBzdHJpbmcKKwlzaG9ydGVuKGZuYW1lKQkJc2hvcnRlbiBhIGZpbGUgbmFtZSwgbGlrZSBob21lX3JlcGxhY2UoKQorCWlucHV0KHByb21wdCwgY29tcGxldGUpCWxpa2UgaW5wdXQoKSBidXQgZG8gc3BlY2lmaWVkIGNvbXBsZXRpb24KKwlpbnB1dHJsKCkJCWxpa2UgaW5wdXQoKSBidXQgcmlnaHQtdG8tbGVmdAorCXZpcnR1YWxtb2RlKCkJCWFkZCBhcmd1bWVudCB0byBvYnRhaW4gd2hldGhlciAiJCIgd2FzIHVzZWQgaW4KKwkJCQlWaXN1YWwgYmxvY2sgbW9kZS4KKwl0YWd0eXBlKHRhZykJCWdldCB0eXBlIG9mIHRhZyAoYWxzbyBjaGVja3MgaWYgaXQgZXhpc3RzKQorCWdldGFjcCgpCQlXaW4zMjogZ2V0IGNvZGVwYWdlIChHbGVubiBNYXluYXJkKQorCXRyKGV4cHIsIGZyb20sIHRvKQl0cmFuc2xhdGUgY2hhcnMgKFBhdGNoIGZyb20gUm9uIEFhcm9uLCBBcHIgOAorCQkJCTIwMDQpCisJZmluZCgpCQkJZmluZCBmaWxlIGluICdwYXRoJyAocGF0Y2ggZnJvbSBKb2hhbm5lcworCQkJCVplbGxuZXIgMjAwMSBEZWMgMjApCisJcmVhbG5hbWUoKQkJR2V0IHVzZXIgbmFtZSAoZmlyc3QsIGxhc3QsIGZ1bGwpCisJCQkJdXNlcl9mdWxsbmFtZSgpIHBhdGNoIGJ5IE5pa29sYWkgV2VpYnVsbCwgTm92CisJCQkJMyAyMDAyKQorCWdldGZwZXJtKCkJCWZpbGUgcGVybWlzc2lvbnMsIGluIGZvcm0gInJ3eHJ3eHJ3eCIKKwkJCQkocGF0Y2ggZnJvbSBOaWtvbGFpIFdlaWJ1bGwgMjAwMyBKYW4gMTMpCisJZ2V0ZnR5cGUoKQkJImZpbGUiLCAiZGlyIiwgImxpbmsiLCAib3RoZXIiPworCQkJCShwYXRjaCBmcm9tIE5pa29sYWkgV2VpYnVsbCAyMDAzIEphbiAxMykKKwlzZXRidWZsaW5lKCkJCXNldCBsaW5lIGluIGFueSBidWZmZXIgKHBhdGNoIGZyb20gWWVnYXBwYW4KKwkJCQlMYWtzaG1hbmFuLCAyMDAzIEphbiAyMSkKKwlnZXRidWZsaW5lKCkJCWdldCBsaW5lIGZyb20gYW55IGJ1ZmZlcgorCWRlbGV0ZWJ1ZmxpbmUoKQkJZGVsZXRlIGxpbmUgaW4gYW55IGJ1ZmZlcgorCWFwcGVuZGJ1ZmxpbmUoKQkJYXBwZW5kIGxpbmUgaW4gYW55IGJ1ZmZlcgorCXdpbm5yKCIkIikJCUdldCBudW1iZXIgb2Ygd2luZG93cy4gIChwYXRjaCBmcm9tIE5pa29sYWkKKwkJCQlXZWlidWxsIDIwMDMgSmFuIDEzKSAoYW5vdGhlciBwYXRjaCBmcm9tCisJCQkJWWVnYXBwYW4gTGFrc2htYW5hbiwgMjAwMyBBdWcgMzEpCisJc2VhcmNoKCkJCUFkZCBvcHRpb25hbCBvZmZzZXQgYXJndW1lbnQuCisJCQkJQWRkICduJyBmbGFnLiAgKHBhdGNoIGZyb20gTmlrb2xhaSBXZWlidWxsCisJCQkJMjAwMyBKYW4gMTMpCisJc29ydCgpCQkJU29ydCBhIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZy4gIEFsc286CisJCQkJIjpzb3J0Ii4KKwlsaWJjYWxsKCkJCUFsbG93IG1vcmUgdGhhbiBvbmUgYXJndW1lbnQuCisJbGliY2FsbGV4dCgpCQlMaWtlIGxpYmNhbGwoKSwgYnV0IHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24KKwkJCQl0byBhbGxvdyB0aGUgbGlicmFyeSB0byBleGVjdXRlIGEgY29tbWFuZCBvcgorCQkJCWV2YWx1YXRlIGFuIGV4cHJlc3Npb24uCisJY29uZmlybSgpCQlhZGQgImZsYWdzIiBhcmd1bWVudCwgd2l0aCAndicgZm9yIHZlcnRpY2FsCisJCQkJbGF5b3V0IGFuZCAnYycgZm9yIGNvbnNvbGUgZGlhbG9nLiAoSGFlZ2cpCisJCQkJRmxlbW1pbmcgTWFkc2VuIGhhcyBhIHBhdGNoIGZvciB0aGUgJ2MnIGZsYWcKKwkJCQkoMjAwMyBNYXkgMTMpCisJc3lzdGVtKHtjbWR9LCB7ZXhwcn0pCUZpbHRlciB7ZXhwcn0gdGhyb3VnaCB0aGUgc2hlbGwgY29tbWFuZAorCQkJCXtjbWR9IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KKwkJCQkoUGF0Y2ggZnJvbSBZZWdhcHBhbiBMYWtzaG1hbmFuKQorCXJhaXNld2luKCkJCXJhaXNlIGd2aW0gd2luZG93IChzZWUgSGllckFzc2lzdCBwYXRjaCBmb3IKKwkJCQlUY2wgaW1wbGVtZW50YXRpb24gfi92aW0vSGllckFzc2lzdC8gKQorCWdldHRleHQoKQkJVHJhbnNsYXRlIGEgbWVzc2FnZS4gIChQYXRjaCBmcm9tIFlhc3VoaXJvCisJCQkJTWF0c3Vtb3RvKSBIb3cgdG8gZ2V0IHRoZSBtZXNzYWdlcyBpbnRvIHRoZQorCQkJCS5wbyBmaWxlcz8KKwlzdHJyZXAoKQkJUmVwZWF0IGEgc3RyaW5nIChwYXRjaCBmcm9tIENocmlzdG9waGUgUG91Y2V0LAorCQkJCTIwMDMgU2VwIDEyLCBhbHNvIGNvbnRhaW5zIFhYKQorCWNoYXIyaGV4KCkJCWNvbnZlcnQgY2hhciBzdHJpbmcgdG8gaGV4IHN0cmluZy4gIFhYCisJaGV4MmNoYXIoKQkJY29udmVydCBoZXggc3RyaW5nIHRvIGNoYXIgc3RyaW5nLiBYWAorNyAgIE1ha2UgYnVmbmFtZSgiJzAiKSByZXR1cm4gdGhlIGJ1ZmZlciBuYW1lIGZyb20gbWFyayAnMC4gIEhvdyB0byBnZXQgdGhlCisgICAgY29sdW1uIGFuZCBsaW5lIG51bWJlcj8gIGNvbCgiJzAiKSBjdXJyZW50bHkgcmV0dXJucyB6ZXJvLgorOCAgIGFyZ2MoKSByZXR1cm5zIDAgd2hlbiB1c2luZyAidmltIC10IHRhZyIuICBIb3cgdG8gZGV0ZWN0IHRoYXQgbm8gZmlsZSB3YXMKKyAgICBzcGVjaWZpZWQgaW4gYW55IHdheT8gIFRvIGJlIGFibGUgdG8ganVtcCB0byB0aGUgbGFzdCBlZGl0ZWQgZmlsZS4KKzggICBQYXNzIHRoZSBleGVjdXRhYmxlIG5hbWUgdG8gdGhlIFZpbSBzY3JpcHRzIGluIHNvbWUgd2F5LiAgQXMgdjphcmd2MD8KKzggICBBZGQgY29tbWFuZCBhcmd1bWVudHMgd2l0aCB0aHJlZSBkYXNoZXMsIHBhc3NlZCBvbiB0byBWaW0gc2NyaXB0cy4KKzggICBXaGVuIHN0YXJ0aW5nIHRvIHNvdXJjZSBhIHZpbSBzY3JpcHQsIGRlbGV0ZSBhbGwgZnVuY3Rpb25zIHRoYXQgaXQgaGFzCisgICAgcHJldmlvdXNseSBkZWZpbmVkPyAgQXZvaWRzIHVzaW5nICI6ZnVuISIgYWxsIHRoZSB0aW1lLgorNyAgIEFkZCBvcHRpb25hbCBhcmd1bWVudHMgdG8gdXNlciBmdW5jdGlvbnM6CisJOmZ1bmMgbXlGdW5jKGFyZzEsIGFyZzIsIGFyZzMgPSAiYmxhaCIsIGFyZzQgPSAxNykKKzYgICBVc2VyIGZ1bmN0aW9uczogRnVuY3Rpb25zIGxvY2FsIHRvIGJ1ZmZlciAiYjpmdW5jKCkiPworOCAgIEFkZCAiOmxldCB2YXJbe2V4cHJ9XSA9IHtleHByfSIuICBXaGVuIHBhc3QgdGhlIGVuZCBvZiAidmFyIiBqdXN0IGlnbm9yZS4KKzggICBUaGUgIj0gcmVnaXN0ZXIgc2hvdWxkIGJlIHdyaXRhYmxlLCBpZiBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlLAorICAgIG9wdGlvbiBvciBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKzggICAiOmxldCAmb3B0aW9uIiBzaG91bGQgbGlzdCB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbi4KKzcgICBBZGQgc3luSURsaXN0KCksIG1ha2luZyB0aGUgd2hvbGUgbGlzdCBvZiBzeW50YXggaXRlbXMgb24gdGhlCisgICAgc3RhY2sgYXZhaWxhYmxlIChzZXBhcmF0ZWQgd2l0aCAnXG4nKS4KKzggICBBZGQgYXV0b2NvbW1hbmQtZXZlbnQgZm9yIHdoZW4gYSB2YXJpYWJsZSBpcyBjaGFuZ2VkOgorCTphdSBWYXJDaGFuZ2VkIHt2YXJuYW1lfSB7Y29tbWFuZHN9Cis4ICAgQWRkICJoYXMoImd1aV9jYXBhYmxlIikiLCB0byBjaGVjayBpZiB0aGUgR1VJIGNhbiBiZSBzdGFydGVkLgorOCAgIEFkZCBwb3NzaWJpbGl0eSB0byB1c2UgdmFyaWFibGVzIGxpa2UgcmVnaXN0ZXJzOiBjaGFyYWN0ZXJ3aXNlIChkZWZhdWx0KSwKKyAgICBsaW5ld2lzZSAod2hlbiBlbmRpbmcgaW4gJ1xuJyksIGJsb2Nrd2lzZSAod2hlbiBlbmRpbmcgaW4gJ1wwMDEnKS4JcmVnMCwKKyAgICByZWdhLCByZWclLCBldGMuICBBZGQgZnVuY3Rpb25zIGxpbmV3aXNlKHtleHByfSksIGJsb2Nrd2lzZSh7ZXhwcn0pIGFuZAorICAgIGNoYXJ3aXNlKHtleHByfSkuCis3ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBkbyBhbnkgY29tbWFuZCBvbiBhIHN0cmluZyB2YXJpYWJsZSAobWFrZSBhIGJ1ZmZlcgorICAgIHdpdGggb25lIGxpbmUsIGNvbnRhaW5pbmcgdGhlIHN0cmluZykuICBNYXliZSBhZGQgYW4gKGludmlzaWJsZSkgc2NyYXRjaAorICAgIGJ1ZmZlciBmb3IgdGhpcz8KKwlyZXN1bHQgPSBzY3JhdGNoKHN0cmluZywgY29tbWFuZCkKKwlyZXN1bHQgPSBhcHBseShzdHJpbmcsIGNvbW1hbmQpCisJcmVzdWx0ID0gZXhlY3V0ZShzdHJpbmcsIGNvbW1hbmQpCisgICAgImNvbW1hbmQiIHdvdWxkIHVzZSA8PiBub3RhdGlvbi4KKyAgICBEb2VzIHNjcmF0Y2ggYnVmZmVyIGhhdmUgYSBudW1iZXI/ICBPciByZS11c2Ugc2FtZSBudW1iZXI/Cis3ICAgQWRkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHVuaXF1ZSBudW1iZXIgKGRhdGUgaW4gbWlsbGlzZWNvbmRzKS4KKzcgICBBdXRvbWF0aWNhbGx5IGxvYWQgYSBmdW5jdGlvbiBmcm9tIGEgZmlsZSB3aGVuIGl0IGlzIGNhbGxlZC4gIE5lZWQgYW4KKyAgICBvcHRpb24gZm9yIHRoZSBzZWFyY2ggcGF0aC4gKFNla2VyYSkKKzcgICBQZXJzaXN0ZW50IHZhcmlhYmxlczogInA6dmFyIjsgc3RvcmVkIGluIHZpbWluZm8gZmlsZSBhbmQgc2Vzc2lvbnMgZmlsZXMuCis3ICAgSW5jbHVkZSBzdXBwb3J0IGZvciBhcnJheXM/ICBQYXRjaCBmcm9tIFJvYmVydCBXZWJiLgorICAgIFRoaXMgaXMgcmVzdHJpY3RlZCB0byBmaXhlZC1zaXplIGFycmF5cyBpbmRleGVkIGJ5IG51bWJlci4gIEJldHRlcjogVXNlCisgICAgYXNzb2NpYXRpdmUgYXJyYXlzOiBhWzVdID0gMywgYVsic29tZSJdID0gJ3gnLiBJbXBsZW1lbnQgYnkgdHJhbnNsYXRpbmcKKyAgICBpbnRvIG9yZGluYXJ5IHZhcmlhYmxlczogYVs1XSBpcyAiLWEtNSIsIGFbInNvbWUiXSBpcyAiYS1zb21lIiwgYVs1XVs2XSBpcworICAgICJhLTUtNiIuICBCdXQgaG93IHRvIGRvIGFycmF5IGFzc2lnbm1lbnQgYW5kIGNvbmNhdGVuYXRpb24/CisgICAgQWx0ZXJuYXRpdmU6IHVzZSBkaWN0aW9uYXJpZXMsIGxpa2UgUHl0aG9uLgorCisKK1JvYnVzdG5lc3M6Cis4ICAgVGhpcyBwYXR0ZXJuIGluIHN5bnRheC9qYXZhLnZpbSBjYXVzZXMgYSByZWN1cnNpdmUgY2FsbCBvZiByZWdtYXRjaCgpOgorCXN5biBtYXRjaCAgIGphdmFTdHJpbmdFcnJvciAgICAgICsiXChbXiJcXF1cfFxcLlwpKiQrCisgICAgQSBsb25nIGxpbmUgd2l0aCBhICIgaW4gaXQgY2FuIGNhdXNlIGEgY3Jhc2ggd2hlbiBpdCBydW5zIG91dCBvZiBzdGFjaworICAgIHNwYWNlIChvbiBzeXN0ZW1zIHdoZXJlIHRoaXMgaXNuJ3QgY2F1Z2h0KS4gIEhvdyBjYW4gd2UgY2F0Y2ggdGhpcyBmb3IKKyAgICBtb3JlIHN5c3RlbXM/CisKKworUGVyZm9ybWFuY2U6Cis4ICAgTG9hZGluZyBwbHVnaW5zIHRha2VzIHN0YXJ0dXAgdGltZS4gIE9ubHkgbG9hZCB0aGUgcGFydCB0aGF0IGlzIHVzZWQgdG8KKyAgICB0cmlnZ2VyIHRoZSByZXN0LCBhbmQgbG9hZCB0aGUgcmVzdCB3aGVuIGl0J3MgbmVlZGVkPworOCAgIFR1cm4gYl9zeW5faWMgYW5kIGJfc3luX2NvbnRhaW5lZGluIGludG8gYl9zeW5fZmxhZ3MuCis5ICAgTG9hZGluZyBtZW51LnZpbSBzdGlsbCB0YWtlcyBxdWl0ZSBhIGJpdCBvZiB0aW1lLiAgSG93IHRvIG1ha2UgaXQgZmFzdGVyPworOCAgIGluX2lkX2xpc3QoKSB0YWtlcyBtdWNoIHRpbWUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcuICBDYWNoZSB0aGUgcmVzdWx0PworNyAgIHNldHBjbWFyaygpIHNoaWZ0cyB0aGUganVtcGxpc3QsIHRoaXMgdGFrZXMgcXVpdGUgYSBiaXQgb2YgdGltZSB3aGVuCisgICAganVtcGluZyBhcm91bmQuICBJbnN0ZWFkIHVzZSBhbiBpbmRleCBmb3IgdGhlIHN0YXJ0PworOCAgIFdoZW4gZGlzcGxheWluZyBhIHNwYWNlIHdpdGggb25seSBmb3JlZ3JvdW5kIGhpZ2hsaWdodGluZywgaXQncyB0aGUgc2FtZQorICAgIGFzIGEgc3BhY2Ugd2l0aG91dCBhdHRyaWJ1dGVzLiAgQXZvaWQgZGlzcGxheWluZyBzcGFjZXMgZm9yIHRoZSAifiIgbGluZXMKKyAgICB3aGVuIHN0YXJ0aW5nIHVwIGluIGEgY29sb3IgdGVybWluYWwuCis4ICAgQXZvaWQgYWxsb2MoKSBmb3Igc2NyYXRjaCBidWZmZXIgdXNlLCBlc3AuIGluIHN5bnRheC5jLiAgSXQncyB2ZXJ5IHNsb3cgb24KKyAgICBXaW4xNi4KKzkgICBTZXR0aW5nIEdVSSBvcHRpb25zIGluIHRoZSBjb25zb2xlIChlLmcuLCAnZ3VpZm9udCcpIHNob3VsZCBub3QgY2F1c2UgYQorICAgIHJlZHJhdy4KKzggICBQcm9maWxpbmcgc2hvd3MgdGhhdCBpbl9pZF9saXN0KCkgaXMgdXNlZCB2ZXJ5IG9mdGVuIGZvciBDIGNvZGUuICBDYW4gdGhpcworICAgIGZ1bmN0aW9uIGJlIGltcHJvdmVkPworOCAgIEZvciBhbiBleGlzdGluZyBmaWxlLCB0aGUgcGFnZSBzaXplIG9mIHRoZSBzd2FwIGZpbGUgaXMgYWx3YXlzIHRoZQorICAgIGRlZmF1bHQsIGluc3RlYWQgb2YgdXNpbmcgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGRldmljZSwgYmVjYXVzZSB0aGUgc3dhcAorICAgIGZpbGUgaXMgY3JlYXRlZCBvbmx5IGFmdGVyIHNldHRpbmcgdGhlIGJsb2NrIHNpemUgaW4gbWZfb3BlbigpLiAgSG93IGNhbgorICAgIHRoaXMgYmUgaW1wcm92ZWQ/Cis4ICAgU2V0IGRlZmF1bHQgZm9yICd0dHlzY3JvbGwnIHRvIGhhbGYgYSBzY3JlZW4gaGVpZ2h0PyAgU2hvdWxkIHNwZWVkIHVwCisgICAgTVMtRE9TIHZlcnNpb24uIChOZWdyaSkKKzcgICBDIHN5bnRheCBoaWdobGlnaHRpbmcgZ2V0cyBhIGxvdCBzbG93ZXIgd2hlbiBhZGRpbmcgYSByZWdpb24gZm9yIGZvbGRpbmcKKyAgICBmcm9tIHsgdG8gfS4gKENoYXJsZXMgQ2FtcGJlbGwpICBJbnNlcnRpbmcgYSAieyIgaXMgdmVyeSBzbG93LiAoZG1hbikKKzcgICBIVE1MIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgc2xvdyBmb3IgbG9uZyBsaW5lcy4gIFRyeSBkaXNwbGF5aW5nCisgICAgaHR0cDovL3d3dy50aGVyZWdpc3Rlci5jby51ay9jb250ZW50LzQvMjI5MDguaHRtbC4gKEFuZHJlIFBhbmcpCis3ICAgQ2hlY2sgaG93IHBlcmZvcm1hbmNlIG9mIGxvYWRpbmcgdGhlIHdvcmRsaXN0IGNhbiBiZSBpbXByb3ZlZCAoYWRkaW5nIGEKKyAgICBsb3Qgb2YgYWJicmV2aWF0aW9ucykuCis3ICAgRE9TIGNvbnNvbGU6IEFkZCB0X0RMIHN1cHBvcnQsIHRvIG1ha2Ugc2Nyb2xsaW5nIGZhc3Rlci4KKzcgICBDb21waWxlIEV4IGNvbW1hbmRzIHRvIGJ5dGUgY29kZXMuICBTdG9yZSBieXRlIGNvZGVzIGluIGEgdmltIHNjcmlwdCBmaWxlCisgICAgYXQgdGhlIGVuZCwgYWZ0ZXIgImNvbXBpbGVkOi4gIE1ha2UgaXQgbG9vayBsaWtlIGEgc2luZ2xlIGNvbW1lbnQgbGluZQorICAgIGZvciBvbGQgVmltIHZlcnNpb25zLiAgSW5zZXJ0IGZpcnN0IGxpbmUgIlZpbSBzY3JpcHQgY29tcGlsZWQgPHRpbWVzdGFtcD4uCisgICAgT25seSB1c2VkIGNvbXBpbGVkIGNvZGUgd2hlbiB0aW1lc3RhbXAgbWF0Y2hlcyB0aGUgZmlsZSBzdGF0LgorICAgIEFkZCBjb21tYW5kIHRvIGNvbXBpbGUgYSB2aW0gc2NyaXB0IGFuZCBhZGQgaXQgdG8gdGhlIGZpbGUgaW4tcGxhY2UuCisgICAgU3BsaXQgRXggY29tbWFuZCBleGVjdXRpbmcgaW50byBhIHBhcnNpbmcgYW5kIGV4ZWN1dGluZyBwaGFzZS4KKyAgICBVc2UgY29tcGlsZWQgY29kZSBmb3IgZnVuY3Rpb25zLCB3aGlsZSBsb29wcywgZXRjLgorOCAgIFdoZW4gZWRpdGluZyBhIGZpbGUgd2l0aCBleHRyZW1lbHkgbG9uZyBsaW5lcyAoZS5nLiwgYW4gZXhlY3V0YWJsZSksIHRoZQorICAgICJsaW5lcmVzdCIgaW4gcmVhZGZpbGUoKSBpcyBhbGxvY2F0ZWQgdHdpY2UgdG8gYmUgYWJsZSB0byBjb3B5IHdoYXQgd2FzCisgICAgcmVhZCBzbyBmYXIuICBVc2UgcmVhbGxvYygpIGluc3RlYWQ/ICBPciBzcGxpdCB0aGUgbGluZSB3aGVuIGFsbG9jYXRpbmcKKyAgICBtZW1vcnkgZmFpbHMgYW5kICJsaW5lcmVzdCIgaXMgYmlnICg+IDEwMDAwMCk/Cis4ICAgV2hlbiBkZWZpbmluZyBhdXRvY29tbWFuZHMgKGUuZy4sIGZyb20gJFZJTVJVTlRJTUUvZmlsZXR5cGUudmltKSwgbmVlZCB0bworICAgIGNvbXBhcmUgZWFjaCBwYXR0ZXJuIHdpdGggYWxsIGV4aXN0aW5nIHBhdHRlcm5zLiAgVXNlIGEgaGFzaCBjb2RlIHRvIGF2b2lkCisgICAgdXNpbmcgc3RyY21wKCkgdG9vIG9mdGVuPworNyAgIEluY2x1ZGUgdHVyYm9fbG9hZGVyIHBhdGNoZXMsIHNwZWVkaW5nIHVwIHJlYWRpbmcgYSBmaWxlPworICAgIFNwZWVkIHVwIHJlYWRpbmcgYSBmaWxlIGJ5IHJlYWRpbmcgaXQgaW50byBhIGZpeGVkLXNpemUgYnVmZmVyLCBjcmVhdGluZworICAgIHRoZSBsaXN0IG9mIGluZGV4ZXMgaW4gYW5vdGhlciBidWZmZXIsIGFuZCB0aGVuIGNvcHlpbmcgdGhlIHJlc3VsdCBpbnRvIGEKKyAgICBtZW1maWxlIGJsb2NrIHdpdGggdHdvIGNvcGllcy4gIFRoZW4gcmVhZCB0aGUgbmV4dCBibG9jayBpbnRvIGFub3RoZXIKKyAgICBmaXhlZC1zaXplIGJ1ZmZlciwgY3JlYXRlIHRoZSBzZWNvbmQgbGlzdCBvZiBpbmRleGVzIGFuZCBjb3B5IHRleHQgZnJvbQorICAgIHRoZSB0d28gYmxvY2tzIHRvIHRoZSBtZW1maWxlIGJsb2NrLgorNyAgIGRvX2NtZGxpbmUoKTogQXZvaWQgdGhhdCB0aGUgY29tbWFuZCBsaW5lIGlzIGNvcGllZCB0byBhbGxvY2F0ZWQgbWVtb3J5CisgICAgYW5kIGZyZWVkIGFnYWluIGxhdGVyIGFsbCB0aGUgdGltZS4gIEZvciB3aGlsZSBsb29wcywgYW5kIGZvciB3aGVuIGNhbGxlZAorICAgIHdpdGggYW4gYXJndW1lbnQgdGhhdCBjYW4gYmUgbWVzc2VkIHdpdGguCisgICAgR2VuZXJpYyBzb2x1dGlvbjogTWFrZSBhIHN0cnVjdCB0aGF0IGNvbnRhaW5zIGEgcG9pbnRlciBhbmQgYSBmbGFnIHRoYXQKKyAgICBpbmRpY2F0ZXMgaWYgdGhlIHBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIHdoZW4gcmVwbGFjZWQuCis3ICAgQ2hlY2sgdGhhdCB0aGUgZmlsZSBzaXplIGlzIG5vdCBtb3JlIHRoYW4gInNpemVvZihsb25nKSIuCistICAgRnVydGhlciBpbXByb3ZlIGZpbmRpbmcgbWFwcGluZ3MgaW4gbWFwaGFzaFtdIGluIHZnZXRvcnBlZWsoKQorOCAgIFN5bnRheCBoaWdobGlnaHRpbmcgaXMgc2xvdyB3aGVuIGRlbGV0aW5nIGxpbmVzLiAgVHJ5IGluCisgICAgJFZJTVJVTlRJTUUvZmlsZXR5cGUudmltLgorLSAgICJvdXQgb2YgbWVtb3J5IiBhZnRlciBkZWxldGluZyAoMSwkZCkgYW5kIGNoYW5naW5nICg6JXMvXi8+IC8pIGEgbG90IG9mCisgICAgbGluZXMgKDI3MDAwKSBhIGZldyB0aW1lcy4gIE1lbW9yeSBmcmFnbWVudGF0aW9uPworLSAgIEhhdmUgYSBsb29rIGF0IGhvdyBwZGtzaCBkb2VzIG1lbW9yeSBhbGxvY2F0aW9uIChhbGxvYy5jKS4gKERhbGVja2kpCistICAgRG8gcHJvZmlsaW5nIG9uOgorICAgIC0gOmcvcGF0L25vcm1hbCBjbWQKKyAgICAtIDEwMDBpaTxFc2M+CisgICAgLSBkZWxldGluZyAxME1ieXRlIHdvcnRoIG9mIGxpbmVzIChuZXRzY2FwZSBiaW5hcnkpCisgICAgLSAiW2kiIGFuZCAiW2QiIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorICAgIC0gIjpnL14vbTAiIG9uIGEgNDUwS2J5dGUgZmlsZS4gIEFuZCB0aGUgInUiLgorICAgIC0gaGlnaGxpZ2h0aW5nICJ+L3ZpbS90ZXN0L2xvbmdsaW5lLnRleCIsICJ+L3ZpbS90ZXN0L3Njd29vcC50Y2wiIGFuZAorICAgICAgIn4vdmltL3Rlc3QvbG9ja3VwLnBsIi4KKyAgICAtIGxvYWRpbmcgYSBzeW50YXggZmlsZSB0byBoaWdobGlnaHQgYWxsIHdvcmRzIG5vdCBmcm9tIGEgZGljdGlvbmFyeS4KKyAgICAtIGVkaXRpbmcgYSB2aW0gc2NyaXB0IHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBvbiAobG9hZGluZyB2aW0udmltKS4KKzcgICBTY3JlZW4gdXBkYXRpbmcgY2FuIGJlIGZ1cnRoZXIgaW1wcm92ZWQgYnkgb25seSByZWRyYXdpbmcgbGluZXMgdGhhdCB3ZXJlCisgICAgY2hhbmdlZCAoYW5kIGxpbmVzIGFmdGVyIHRoZW0sIHdoZW4gc3ludGF4IGhpZ2hsaWdodGluZyB3YXMgdXNlZCwgYW5kIGl0CisgICAgY2hhbmdlZCkuCisgICAgLSBPbiBlYWNoIGNoYW5nZSwgcmVtZW1iZXIgc3RhcnQgYW5kIGVuZCBvZiB0aGUgY2hhbmdlLgorICAgIC0gV2hlbiBpbnNlcnRpbmcvZGVsZXRpbmcgbGluZXMsIHJlbWVtYmVyIGJlZ2luLCBlbmQsIGFuZCBsaW5lIGNvdW50LgorLSAgIFVzZSBtYWNyb3MvZHVhcnRlL2NhcGljdWEgZm9yIHByb2ZpbGluZy4gIE52aSAxLjcxIGlzIHRoZSBmYXN0ZXN0IQorLSAgIFdoZW4gdXNpbmcgYSBmaWxlIHdpdGggb25lIGxvbmcgbGluZSAoMU1ieXRlKSwgdGhlbiBkbyAiJGhoaGgiLCBpcyBzdGlsbAorICAgIHZlcnkgc2xvdy4gIEF2b2lkIGNhbGxpbmcgZ2V0dmNvbCgpIGZvciBlYWNoICJoIj8KKy0gICBFeGVjdXRpbmcgYSByZWdpc3RlciwgZS5nLiAiMTAwMDBAQCIgaXMgc2xvdywgYmVjYXVzZSBpbnNfdHlwZWJ1ZiBoYXMgdG8KKyAgICBtb3ZlIHRoZSBwcmV2aW91cyBjb21tYW5kcyBmb3J3YXJkIGVhY2ggdGltZS4gIFBhc3MgY291bnQgZnJvbQorICAgIG5vcm1hbF9jbWQoKSBkb3duIHRvIGRvX2V4ZWNyZWcoKS4KKy0gICBSZXBlYXRpbmcgaW5zZXJ0ICIxMDAwaS08RXNjPiIgZGlzcGxheXMgLS1JTlNFUlQtLSBhbGwgdGhlIHRpbWUsIGJlY2F1c2Ugb2YKKyAgICB0aGUgPEVzYz4gYXQgdGhlIGVuZC4gIE1ha2UgdGhpcyB3b3JrIGZhc3RlciAoZGlzYWJsZSByZWRyYXdpbmcpLgorLSAgIEF2b2lkIGNhbGxzIHRvIHBsaW5lcygpIGZvciBjdXJzb3IgbGluZSwgdXNlIHdfY2xpbmVfaGVpZ2h0LgorLSAgIEFmdGVyICI6c2V0IG5vd3JhcCIgcmVtb3ZlIHN1cGVyZmx1b3VzIHJlZHJhdyB3aXRoIHdyb25nIGhvci4gb2Zmc2V0IGlmCisgICAgY3Vyc29yIGlzIHJpZ2h0IG9mIHRoZSBzY3JlZW4uCis4ICAgTWFrZSBDVFJMLUMgb24gVW5peCBnZW5lcmF0ZSBhIHNpZ25hbCwgYXZvaWQgdXNpbmcgc2VsZWN0KCkgdG8gY2hlY2sgZm9yIGEKKyAgICBDVFJMLUMgKGl0J3Mgc2xvdykuCisKKworQ29kZSBzaXplOgorOCAgIEdVSTogV2hlbiBOT19DT05TT0xFIGlzIGRlZmluZWQsIG1vcmUgY29kZSBjYW4gYmUgZXhjbHVkZWQuCistICAgUHV0IGdldGxpbmUoKSBhbmQgY29va2llIGluIGEgc3RydWN0LCBzbyBvbmx5IG9uZSBhcmd1bWVudCBoYXMgdG8gYmUKKyAgICBwYXNzZWQgdG8gZG9fY21kbGluZSgpIGFuZCBvdGhlciBmdW5jdGlvbnMuCis4ICAgTWFrZSBhIEdVSS1vbmx5IHZlcnNpb24gZm9yIFVuaXg/Cis4ICAgSW4gYnVmX3dyaXRlIF8oKSBpc24ndCBuZWVkZWQgd2hlbiBzZXR0aW5nIGVycm1zZywgZG8gaXQgb25jZSB3aGVuIHVzaW5nCisgICAgaXQuCis3ICAgV2hlbiBjb21waWxpbmcgd2l0aCBhIEdVSS1vbmx5IHZlcnNpb24sIHRoZSBjb2RlIGZvciBjdGVybSBjb2xvcnMgY2FuIGJlCisgICAgbGVmdCBvdXQuCis4ICAgV2hlbiBjb21waWxlZCB3aXRoIGEgR1VJLW9ubHkgdmVyc2lvbiwgdGhlIHRlcm1jYXAgZW50cmllcyBmb3IgdGVybWluYWxzCisgICAgY2FuIGJlIHJlbW92ZWQuCis4ICAgQ2FuIHRoZSBjaGVjayBmb3IgbGliZWxmIGluIGNvbmZpZ3VyZS5pbiBiZSByZW1vdmVkPworCisKK01lc3NhZ2VzOgorOCAgIFdoZW4gdXNpbmcgIjpxIiBpbiBhIGNoYW5nZWQgZmlsZSwgdGhlIGVycm9yIHNheXMgdG8gImFkZCAhIi4gIEFkZCB0aGUKKyAgICBjb21tYW5kIHNvIHRoYXQgYmVnaW5uZXJzIHVuZGVyc3RhbmQgaXQ6ICJ1c2UgOnEhIi4KKzggICBGb3IgJ3ZlcmJvc2UnIGxldmVsIDEyIHByaW50cyBjb21tYW5kcyBmcm9tIHNvdXJjZSdlZCBmaWxlcy4gIEhvdyB0byBza2lwCisgICAgbGluZXMgdGhhdCBhcmVuJ3QgZXhlY3V0ZWQ/ICBQZXJoYXBzIG1vdmUgdGhlIGVjaG9pbmcgdG8gZG9fY21kbGluZSgpPworOCAgIFVzZSAncmVwb3J0JyBmb3IgIjpiZGVsIj8gIChLcmlzaG5hKSAgVG8gYXZvaWQgdGhlc2UgbWVzc2FnZXMgd2hlbiB1c2luZyBhCisgICAgc2NyaXB0LgorOCAgICJ2aW0gLS12ZXJzaW9uIiBvdXRwdXQgZ29lcyB0byBzdGRlcnIsIHNob3VsZCBiZSBzdGRvdXQuICBDYW4gYWxsIG91dHB1dAorICAgIGZyb20gbWVzc2FnZXMgdXNpbmcgcHJpbnRmKCkgZ28gdG8gc3Rkb3V0PworLSAgIERlbGV0ZSBtZXNzYWdlIGFmdGVyIG5ldyBjb21tYW5kIGhhcyBiZWVuIGVudGVyZWQgYW5kIGhhdmUgd2FpdGVkIGZvciBrZXkuCisgICAgUGVyaGFwcyBhZnRlciB0ZW4gc2Vjb25kcz8KKy0gICBNYWtlIG1lc3NhZ2UgaGlzdG9yeSBhdmFpbGFibGUgaW4gIm1zZyIgdmFyaWFibGVzOiBtc2cxLCBtc2cyLCAuLiBtc2c5LgorOSAgIENoZWNrIGhhbmRsaW5nIG9mIG92ZXJ3cml0aW5nIG9mIG1lc3NhZ2VzIGFuZCBkZWxheXM6CisgICAgVmVyeSB3cm9uZzogZXJyb3JzIHdoaWxlIHJlZHJhd2luZyBjYXVzZSBlbmRsZXNzIGxvb3AuCisgICAgV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciBmaWxlIGFuZCBzY3JlZW4gc2Nyb2xscyBiZWNhdXNlIG9mIHRoZSBsb25nCisgICAgbWVzc2FnZSBhbmQgcmV0dXJuIG11c3QgYmUgdHlwZWQsIGRvbid0IHNjcm9sbCB0aGUgc2NyZWVuIGJhY2sgYmVmb3JlCisgICAgcmVkcmF3aW5nLgorNyAgIEFkZCBhbiBvcHRpb24sIHdoaWNoIGlzIGEgcmVnZXhwLCB0aGF0IGRpc2FibGVzIHdhcm5pbmcgbWVzc2FnZXMgd2hpY2gKKyAgICBtYXRjaCB0aGF0IHJlZ2V4cCAoVHNpcmtpbikuCis4ICAgV2hlbiBhZGRyZXNzIHJhbmdlIGlzIHdyb25nIHlvdSBvbmx5IGdldCAiSW52YWxpZCByYW5nZSIuICBCZSBhIGJpdCBtb3JlCisgICAgc3BlY2lmaWM6IE5lZ2F0aXZlLCBiZXlvbmQgbGFzdCBsaW5lLCByZXZlcnNlIHJhbmdlPyAgSW5jbHVkZSB0aGUgdGV4dC4KKzggICBNYWtlIGl0IHBvc3NpYmxlIHRvIGlnbm9yZSBlcnJvcnMgZm9yIGEgbW9tZW50ICgnZXJyb3JpZ25vcmUnPykuICBBbm90aGVyCisgICAgb3B0aW9uIHRvIHN3aXRjaCBvZmYgZ2l2aW5nIGVycm9yIG1lc3NhZ2VzICgnZXJyb3JxdWlldCc/KS4gIEFsc28gYW4gb3B0aW9uCisgICAgbm90IHRvIGdpdmUgYW55IG1lc3NhZ2VzICgncXVpZXQnKT8gIE9yICI6cXVpZXQgb24iLCAiOnF1aWV0IG9mZiIuCisgICAgQ2FyZWZ1bDogRm9yIGEgc2V2ZXJlIGVycm9yIChvdXQgb2YgbWVtb3J5KSwgYW5kIHdoZW4gdGhlIHVzZXIgc3RhcnRzCisgICAgdHlwaW5nLCBlcnJvciBtZXNzYWdlcyBtdXN0IGJlIHN3aXRjaGVkIGJhY2sgb24uCisgICAgQWxzbyBhIGZsYWcgdG8gaWdub3JlIGVycm9yIG1lc3NhZ2VzIGZvciBzaGVsbCBjb21tYW5kcyAoZm9yIG1hcHBpbmdzKS4KKy0gICBPcHRpb24gdG8gc2V0IHRpbWUgZm9yIGVtc2coKSBzbGVlcC4gSW50ZXJydXB0IHNsZWVwIHdoZW4ga2V5IGlzIHR5cGVkPworICAgIHNsZWVwIGJlZm9yZSBzZWNvbmQgbWVzc2FnZT8KKzggICBJbiBFeCBzaWxlbnQgbW9kZSBvciB3aGVuIHJlYWRpbmcgY29tbWFuZHMgZnJvbSBhIGZpbGUsIHdoYXQgZXhhY3RseSBpcworICAgIG5vdCBwcmludGVkIGFuZCB3aGF0IGlzPyAgQ2hlY2sgIjpwcmludCIsICI6c2V0IGFsbCIsICI6YXJncyIsICI6dmVycyIsCisgICAgZXRjLiAgQXQgbGVhc3QgdGhlcmUgc2hvdWxkIGJlIG5vIHByb21wdC4gKFNtdWxkZXJzKSAgQW5kIGRvbid0IGNsZWFyIHRoZQorICAgIHNjcmVlbiB3aGVuIHJlYWRpbmcgY29tbWFuZHMgZnJvbSBzdGRpbi4gKEtlbmRhbGwpCisgICAgLS0+IE1ha2UgYSBkaWZmZXJlbmNlIGJldHdlZW4gaW5mb3JtYXRpdmUgbWVzc2FnZXMsIHByb21wdHMsIGV0Yy4gYW5kCisJZXJyb3IgbWVzc2FnZXMsIHByaW50aW5nIHRleHQsIGV0Yy4KKzggICBXaW5kb3cgc2hvdWxkIGJlIHJlZHJhd24gd2hlbiByZXNpemluZyBhdCB0aGUgaGl0LWVudGVyIHByb21wdC4KKyAgICBBbHNvIGF0IHRoZSAiOnRzZWxlY3QiIHByb21wdC4gIEZpbmQgYSBnZW5lcmljIHNvbHV0aW9uIGZvciByZWRyYXdpbmcgd2hlbgorICAgIGEgcHJvbXB0IGlzIHByZXNlbnQgKHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbj8pLgorCisKK1NjcmVlbiB1cGRhdGluZzoKKzcgICBBZGQgYSBzdHJpbmcgdG8gdGhlICdkaXNwbGF5JyBvcHRpb24gdG8gbWFrZSBDVFJMLUUgYW5kIENUUkwtWSBzY3JvbGwgb25lCisgICAgc2NyZWVuIGxpbmUsIGFsc28gaWYgdGhpcyBtZWFucyB0aGUgZmlyc3QgbGluZSBkb2Vzbid0IHN0YXJ0IHdpdGggdGhlCisgICAgZmlyc3QgY2hhcmFjdGVyIChsaWtlIHdoYXQgaGFwcGVucyB3aXRoIGEgc2luZ2xlIGxpbmUgdGhhdCBkb2Vzbid0IGZpdCkuCistICAgc2NyZWVuX2xpbmUoKToKKyAgICAtIGluc2VydC9kZWxldGUgY2hhcmFjdGVyIHN0dWZmLgorICAgIC0gaW1wcm92ZSBkZWxldGUgcmVzdCBvZiBsaW5lIChzcGFjZXMgYXQgZW5kIG9mIGxpbmUpLgorLSAgIFdoZW4gbW92aW5nIG9yIHJlc2l6aW5nIHdpbmRvdywgdHJ5IHRvIGF2b2lkIGEgY29tcGxldGUgcmVkcmF3IChlc3AuIHdoZW4KKyAgICBkcmFnZ2luZyB0aGUgc3RhdHVzIGxpbmUgd2l0aCB0aGUgbW91c2UpLgorLSAgIFdoZW4gJ2xhenlyZWRyYXcnIHNldCwgZG9uJ3QgZWNobyA6ZXggY29tbWFuZHM/ICBOZWVkIGEgZmxhZyB0byByZWRyYXcgd2hlbgorICAgIHdhaXRpbmcgZm9yIGEgY2hhcmFjdGVyLgorOCAgIEFkZCBhICI6cmVmcmVzaCBbd2lubnJdIiBjb21tYW5kLCB0byBmb3JjZSB1cGRhdGluZyBhIHdpbmRvdy4gIFVzZWZ1bCBmcm9tCisgICAgYW4gZXZlbnQgaGFuZGxlciB3aGVyZSAiOm5vcm1hbCIgY2FuJ3QgYmUgdXNlZC4gIEFsc28gdXNlZnVsIHdoZW4KKyAgICAnbGF6eXJlZHJhdycgaXMgc2V0IGluIGEgbWFwcGluZy4KKzcgICBNYWtlICdsaXN0JyBhbmQgJ2xpbmVicmVhaycgd29yayB0b2dldGhlci4KKzcgICBBZGQgIm5ic3AiIGluICdsaXN0Y2hhcnMnPyAgUGF0Y2ggZnJvbSBEYXZpZCBCbGFuY2hldCwgMjAwMyBKdWwgMjguCisKKworU2Nyb2xsaW5nOgorOCAgIEFkZCAiem0iIGNvbW1hbmQ6IHNjcm9sbCBob3Jpem9udGFsbHkgdG8gcHV0IHRoZSBjdXJzb3IgaW4gdGhlIG1pZGRsZS4KKzYgICBBZGQgb3B0aW9uIHRvIHNldCB0aGUgb3ZlcmxhcCBmb3IgQ1RSTC1GIGFuZCBDVFJMLUIuIChHYXJoaSkKKy0gICBleHRlbmQgJ3Njcm9sbGJpbmQnIG9wdGlvbjogJ3Njcm9sbG9wdCcgd29yZHMgInNlYXJjaCIsICJyZWxhdGl2ZSIsIGV0Yy4uCisgICAgQWxzbyAnZSd4ZWN1dGUgc29tZSBjb21tYW5kcyAoc2VhcmNoLCB2ZXJ0aWNhbCBtb3ZlbWVudHMpIGluIGFsbCBib3VuZAorICAgIHdpbmRvd3MuCis3ICAgQWRkICdzY3JvbGxiaW5kJyBmZWF0dXJlIHRvIG1ha2UgdGhlIG9mZnNldCBvZiBvbmUgd2luZG93IHdpdGggdGhlIG5leHQKKyAgICBvbmUgZXF1YWwgdG8gdGhlIHdpbmRvdyBoZWlnaHQuICBXaGVuIGVkaXRpbmcgb25lIGZpbGUgaW4gYm90aCB3aW5kb3dzIGl0CisgICAgbG9va3MgbGlrZSBlYWNoIHdpbmRvdyBkaXNwbGF5cyBhIHBhZ2Ugb2YgdGhlIGJ1ZmZlci4KKy0gICBBbGxvdyBzY3JvbGxpbmcgYnkgZHJhZ2dpbmcgd2l0aCB0aGUgbW91c2UgKGdyYWIgYSBjaGFyYWN0ZXIgYW5kIG1vdmUgaXQKKyAgICB1cC9kb3duKS4gIExpa2UgdGhlICJoYW5kIiBpbiBBY3JvYmF0IHJlYWRlci4gIFVzZSBBbHQtTGVmdE1vdXNlIGZvciB0aGlzPworICAgIChHb2xkZmFyYikKKy0gICBBZGQgY29tbWFuZCB0byBleGVjdXRlIHNvbWUgY29tbWFuZHMgKHNlYXJjaCwgdmVydGljYWwgbW92ZW1lbnRzKSBpbiBhbGwKKyAgICBib3VuZCB3aW5kb3dzLgorLSAgIEFkZCAnc2VhcmNoJyBvcHRpb24gdG8gJ3Njcm9sbG9wdCcgdG8gYWxsb3cgJ3Njcm9sbGJpbmQnIHdpbmRvd3MgdG8KKyAgICBiZSBib3VuZCBieSByZWdleHAgc2VhcmNoZXMKKy0gICBBZGQgIno+IiBhbmQgIno8Ijogc2Nyb2xsIHNpZGV3YXlzIG9uZSBzY3JlZW5mdWxsLiAoQ2FtcGJlbGwpCistICAgQWRkIG9wdGlvbiB0byBzZXQgdGhlIG51bWJlciBvZiBsaW5lcyB3aGVuIG5vdCB0byBzY3JvbGwsIGluc3RlYWQgb2YgdGhlCisgICAgZml4ZWQgbnVtYmVyIHVzZWQgbm93IChmb3IgdGVybWluYWxzIHRoYXQgc2Nyb2xsIHNsb3cgd2l0aCBhIGxhcmdlIG51bWJlcgorICAgIG9mIGxpbmVzIGJ1dCBub3Qgd2l0aCBhIHNpbmdsZSBsaW5lKS4KKworCitBdXRvY29uZjoKKzggICBTaG91bGQgdXNlIGFjY29uZmlnLmggdG8gZGVmaW5lIHByb3RvdHlwZXMgdGhhdCBhcmUgdXNlZCBieSBhdXRvaGVhZGVyLgorOCAgIFNvbWUgY29tcGlsZXJzIGRvbid0IGdpdmUgYW4gZXJyb3IgZm9yICItT1BUOk9saW1pdCIgYnV0IGEgd2FybmluZy4gKFdlYmIpCisgICAgQWRkIGEgY2hlY2sgZm9yIHRoZSB3YXJuaW5nLCBzbyB0aGF0ICJPbGltaXQiIGNhbiBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5PworLSAgIEF1dG9jb25mOiBVc2UgQGRhdGFkaXJAIGZvciB0aGUgc3lzdGVtIGluZGVwZW5kZW50IGZpbGVzLiAgTWFrZSBzdXJlIHRoZQorICAgIHN5c3RlbSBkZXBlbmRlbnQgYW5kIHN5c3RlbSBpbmRlcGVuZGVudCBmaWxlcyBhcmUgc2VwYXJhdGVkLiAoTGVpdG5lcikuCistICAgQWRkIGF1dG9jb25mIGNoZWNrIGZvciB3YWl0cGlkKCkvd2FpdDQoKS4KKy0gICBSZW1vdmUgZmNudGwoKSBmcm9tIGF1dG9jb25mLCBhbGwgc3lzdGVtcyBoYXZlIGl0PworLSAgIFNldCBkZWZhdWx0IGZvciAnZGljdGlvbmFyeScsIGFkZCBzZWFyY2ggZm9yIGRpY3Rpb25hcnkgdG8gYXV0b2NvbmYuCisKKworUGVybCBpbnRlcmZhY2U6Cis4ICAgUmVuYW1lIHR5cGVtYXAgZmlsZSB0byBzb21ldGhpbmcgZWxzZT8KKzcgICBBZGQgcGF0Y2ggZnJvbSBCZW5vaXQgQ2VycmluYSB0byBpbnRlZ3JhdGUgVmltIGFuZCBQZXJsIGZ1bmN0aW9ucyBiZXR0ZXIuCisgICAgTm93IGFsc28gd29ya3MgZm9yIFJ1YnkgKDIwMDEgTm92IDEwKQorNyAgIE1ha2UgYnVmZmVycyBhY2Nlc3NlZCBhcyBQZXJsIGFycmF5cy4gKENsYXJrKQorNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIG5vbi1BTlNJIEM/Cis2ICAgVGNsL1RrIGhhcyB0aGUgImxvYWQiIGNvbW1hbmQ6IGxvYWQgYSBzaGFyZWQgbGlicmFyeSAoLnNvIG9yIC5kbGwpLgorCisKK1NoYXJlZCBsaWJyYXJpZXM6Cis2ICAgQWRkIHN1cHBvcnQgZm9yIGxvYWRpbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGNhbGxpbmcgZnVuY3Rpb25zIGluIGl0LgorCTpsaWJsb2FkIGludGVybmFsLW5hbWUgbGlibmFtZQorCTpsaWJ1bmxvYWQgaW50ZXJuYWwtbmFtZQorCTpsaWJsaXN0CisJOmxpYmNhbGwgaW50ZXJuYWwtbmFtZSBmdW5jdGlvbihhcmcxLCBhcmcyLCAuLi4pCisJOmxpYmNhbGwgZnVuY3Rpb24oYXJnMSwgYXJnMiwgLi4uKQorICAgIGxpYmNhbGwoKSBjYW4gaGF2ZSBvbmx5IG9uZSBpbnRlZ2VyIG9yIFN0cmluZyBhcmd1bWVudCBhdCB0aGUgbW9tZW50LgorNiAgIEhhdmUgYSBsb29rIG9uIGhvdyBQZXJsIGhhbmRsZXMgbG9hZGluZyBkeW5hbWljIGxpYnJhcmllcy4KKworCitUYWdzOgorOCAgIEFkZCBhIGNvbW1hbmQgdG8ganVtcCB0byBhIGNlcnRhaW4ga2luZCBvZiB0YWcuICBBbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5CisgICAgdmFsdWVzIGZvciB0aGUgb3B0aW9uYWwgZmllbGRzLiAgRS5nLiwgIjp0YWcgc2l6ZSB0eXBlPW0iLgorOCAgIEFkZCBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbGluZSBpbiB0aGUgdGFncyBmaWxlIGZvciBhIG1hdGNoaW5nIHRhZy4KKyAgICBDYW4gYmUgdXNlZCB0byBleHRyYWN0IG1vcmUgaW5mbyAoY2xhc3MgbmFtZSwgaW5oZXJpdGFuY2UsIGV0Yy4pIChSaWNvCisgICAgSGVuZHJpa3MpCis3ICAgQ291bnQgYmVmb3JlIENUUkwtXToganVtcCB0byBOJ3RoIG1hdGNoCis4ICAgU2NvcGUgYXJndW1lbnRzIGZvciAiOnRhZyIsIGUuZy46ICI6dGFnIGNsYXNzOmNQYWdlIG9wZW4iLCBsaWtlIEVsdmlzLgorOCAgIFdoZW4gb3V0cHV0IG9mICI6dHNlbGVjdCIgaXMgbG9uZywgZ2V0dGluZyB0aGUgbW9yZS1wcm9tcHQsIHNob3VsZCBiZSBhYmxlCisgICAgdG8gdHlwZSB0aGUgdGFnIG51bWJlciBkaXJlY3RseS4KKzcgICBBZGQgYSB0YWctc2VsZWN0IHdpbmRvdy4gIFdvcmtzIGxpa2UgIjpjd2luZG93Ii4gIChNaWNoYWwgTWFsZWNraSkKKzcgICBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSB0aGUgIi10IHt0YWd9IiBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcy4gIE9wZW4gYQorICAgIHdpbmRvdyBmb3IgZWFjaCB0YWcuCis3ICAgTWFrZSBvdXRwdXQgb2YgIjp0c2VsZWN0IiBhIGJpdCBuaWNlci4gIFVzZSBoaWdobGlnaHRpbmc/Cis3ICAgSGlnaGxpZ2h0IHRoZSAidGFnIDEgb2YgPjIiIG1lc3NhZ2UuICBOZXcgaGlnaGxpZ2h0IGdyb3VwLCBvciBzYW1lIGFzICJoaXQKKyAgICBib3R0b20iIHNlYXJjaCBtZXNzYWdlLgorNyAgIFdoZW4gdXNpbmcgIjp0YWciIGF0IHRoZSB0b3Agb2YgdGhlIHRhZyBzdGFjaywgc2hvdWxkIGFkZCBhbm90aGVyIGVudHJ5LAorICAgIHNvIENUUkwtVCBjYW4gYnJpbmcgeW91IGJhY2sgdG8gd2hlcmUgeW91IGFyZSBub3cgQU5EIHRvIHdoZXJlIHlvdSB3ZXJlCisgICAgYmVmb3JlIHRoZSBwcmV2aW91cyAiOnRhZyIgY29tbWFuZC4gKFdlYmIpCis3ICAgV2hlbiB1c2luZyBDVFJMLV0gb24gc29tZUNsYXNzOjpzb21lTWV0aG9kLCBzZXBhcmF0ZSBjbGFzcyBmcm9tIG1ldGhvZCBhbmQKKyAgICB1c2UgIjp0YSBjbGFzczpzb21lQ2xhc3Mgc29tZU1ldGhvZCIuCisgICAgSW5jbHVkZSBDKysgdGFncyBjaGFuZ2VzIChCZXJ0aW4pLglDaGFuZ2UgImNsYXNzOjpmdW5jIiB0YWcgaW50byAiZnVuYyIKKyAgICB3aXRoICJjbGFzcz1jbGFzcyI/ICBEb2NzIGluIG9sZG1haWwvYmVydGluL2luLnh4eC4KKzcgICBBZGQgIjp0YWdhcmdzIiwgdG8gc2V0IHZhbHVlcyBmb3IgZmllbGRzOgorCTp0YWdhcmdzIGNsYXNzOnNvbWVjbGFzcyBmaWxlOnZlcnNpb24uYworCTp0YWdhcmdzIGNsZWFyCisgICAgVGhlc2UgYXJlIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWVzIChjaGFuZ2VzIHRoZSBvcmRlciBvZiBwcmlvcml0eSBpbiB0YWcKKyAgICBtYXRjaGluZykuCis3ICAgU3VwcG9ydCBmb3IgImd0YWdzIiBhbmQgImdsb2JhbCI/ICBXaXRoICI6cnRhZyIgY29tbWFuZD8KKyAgICBUaGVyZSBpcyBhbiBleGFtcGxlIGZvciBob3cgdG8gZG8gdGhpcyBpbiBOdmkuCisgICAgT3IgZG8gaXQgbGlrZSBFbHZpczogJ3RhZ3ByZycgYW5kICd0YWdwcmdvbmNlJyBvcHRpb25zLiAoWWFtYWd1Y2hpKQorICAgIFRoZSBFbHZpcyBtZXRob2QgaXMgZmFyIG1vcmUgZmxleGlibGUsIGRvIGl0IHRoYXQgd2F5LgorNyAgIFN1cHBvcnQgImNvbDo5OSIgZXh0cmEgZmllbGQsIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhhdCBjb2x1bW4uICBXaXRoCisgICAgYSBmbGFnIGluICdjcG9wdGlvbnMnIHRvIHN3aXRjaCBpdCBvZmYgYWdhaW4uCis3ICAgQmV0dGVyIHN1cHBvcnQgZm9yIGp1bXBpbmcgdG8gd2hlcmUgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyB1c2VkLiAgVXNlCisgICAgdGhlIGlkLXV0aWxzLCB3aXRoIGEgY29ubmVjdGlvbiB0byAiZ2lkIiAoRW1hY3MgY2FuIGRvIGl0IHRvbykuICBBZGQKKyAgICAiOmlkc2VsZWN0Iiwgd2hpY2ggdXNlcyBhbiAiSUQiIGRhdGFiYXNlIChtYWRlIGJ5ICJta2lkIikgbGlrZSAidHNlbGVjdCIuCis3ICAgQWRkICd0YWdsaXN0ZmlsZXMnIG9wdGlvbiwgc2hvdyBmaWxlIG5hbWUgYW5kIHR5cGUgd2hlbiBsaXN0aW5nIG1hdGNoaW5nCisgICAgdGFncyBuYW1lIHdpdGggQ1RSTC1EIGNvbXBsZXRpb24uICBQYXRjaCBmcm9tIFllZ2FwcGFuIExha3NobWFuYW4uCisKKworU2VjdXJpdHk6CistICAgbm90aGluZyBhdCB0aGUgbW9tZW50CisKKworV2luMzIgR1VJOgorOCAgIE1ha2UgZGVidWcgbW9kZSB3b3JrIHdoaWxlIHN0YXJ0aW5nIHVwICh2aW0gLUQpLiAgT3BlbiBjb25zb2xlIHdpbmRvdyBmb3IKKyAgICB0aGUgbWVzc2FnZSBhbmQgaW5wdXQ/Cis3ICAgVGhlIFB5dGhvbiBpbnRlcmZhY2Ugb25seSB3b3JrcyB3aXRoIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiwgc2VsZWN0ZWQgYXQKKyAgICBjb21waWxlIHRpbWUuICBDYW4gdGhpcyBiZSBtYWRlIHRvIHdvcmsgd2l0aCB2ZXJzaW9uIDIuMSBhbmQgMi4yCisgICAgZHluYW1pY2FsbHk/Cis3ICAgR3ZpbUV4dDogd2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBleGlzdGluZyBWaW1zLCBtb3ZlIHRoZSBsaXN0IHRvIGEgc3VibWVudS4KKyAgICAoTWlrZSBNY0NvbGxpc3RlcikKKzggICBXaGVuIHVzaW5nICJFZGl0IHdpdGggVmltIiBmb3Igb25lIGZpbGUgaXQgY2hhbmdlcyBkaXJlY3RvcnksIHdoZW4gc2V2ZXJhbAorICAgIGZpbGVzIGFyZSBzZWxlY3RlZCBhbmQgdXNpbmcgIkVkaXQgd2l0aCBzaW5nbGUgVmltIiB0aGUgZGlyZWN0b3J5IGlzbid0CisgICAgY2hhbmdlZC4gIEF0IGxlYXN0IGNoYW5nZSBkaXJlY3Rvcnkgd2hlbiB0aGUgcGF0aCBpcyB0aGUgc2FtZSBmb3IgYWxsCisgICAgZmlsZXMuICBQZXJoYXBzIGp1c3QgdXNlIHRoZSBwYXRoIG9mIHRoZSBmaXJzdCBmaWxlIG9yIHVzZSB0aGUgbG9uZ2VzdAorICAgIGNvbW1vbiBwYXJ0IG9mIHRoZSBwYXRoLgorOCAgIEFkZCBmb250IGFyZ3VtZW50IHRvIHNldCB0aGUgbGZDaGFyU2V0LiAoQm9iY2lrKQorOCAgIFNvbWVob3cgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIHN5c3RlbSBsYW5ndWFnZSBhbmQgc2V0ICRMQU5HLCBzbyB0aGF0CisgICAgZ2V0dGV4dCBhbmQgbWVudXMgd29yay4KKzggICBDb3VsZCBrZWVwIGNvbnNvbGUgb3BlbiB0byBydW4gbXVsdGlwbGUgY29tbWFuZHMsIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGhpdAorICAgIHJldHVybiBpbiBldmVyeSBjb25zb2xlLgorICAgIEFsc286IExvb2sgYXQgaG93IEVtYWNzIGRvZXMgcnVucyBleHRlcm5hbCBjb21tYW5kczoKKwlodHRwOi8vd3d3LmNzLndhc2hpbmd0b24uZWR1L2hvbWVzL3ZvZWxrZXIvbnRlbWFjcy5odG1sLgorOCAgIE5lZWQgYSBzZXBhcmF0ZSBQb3BVcCBtZW51IGZvciBtb2RlbGVzcyBzZWxlY3Rpb24uICBOZWVkIHR3byBuZXcgY29tbWFuZHM6CisgICAgQ29weSBzZWxlY3Rpb24gdG8gY2xpcGJvYXJkLCBQYXN0ZSBzZWxlY3Rpb24gKGFzIHR5cGVkIHRleHQpLgorOCAgIFN1cHBvcnQgY29weS9wYXN0ZSBmb3Igb3RoZXIgZmlsZSBmb3JtYXRzLiAgQXQgbGVhc3QgSFRNTCwgcGVyaGFwcyBSVEYuCisgICAgQWRkICJjb3B5IHNwZWNpYWwiIGFuZCAicGFzdGUgc3BlY2lhbCIgY29tbWFuZHM/Cis3ICAgVXNlIGRpZmZlcmVudCBkZWZhdWx0IGNvbG9ycywgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgV2luZG93cyBjb2xvciBzY2hlbWUuCisgICAgU3lzX1dpbmRvd1RleHQsIFN5c19XaW5kb3csIGV0Yy4gKExpb25lbCBTY2hhZmZoYXVzZXIpCis3ICAgVXNlIDxDLVRhYj4gdG8gY3ljbGUgdGhyb3VnaCBvcGVuIHdpbmRvd3MgKGUuZy4sIHRoZSBmaW5kIGRpYWxvZykuCis3ICAgPEVzYz4gc2hvdWxkIGNsb3NlIGEgZGlhbG9nLgorNyAgIEtlZXAgdGhlIGNvbnNvbGUgZm9yIGV4dGVybmFsIGNvbW1hbmRzIG9wZW4uICBEb24ndCB3YWl0IGZvciBhIGtleSB0byBiZQorICAgIGhpdC4gIFJlLW9wZW4gaXQgd2hlbiB0aGUgdXNlciBoYXMgY2xvc2VkIGl0IGFueXdheS4gIE9yIHVzZSBhIHByZXBlbmRlZAorICAgIGNvbW1hbmQ6ICI6bm93YWl0IHtjbWR9Iiwgb3IgIjpxdWlldCIsIHdoaWNoIGV4ZWN1dGVzIHtjbWR9IHdpdGhvdXQgYW55CisgICAgcHJvbXB0cy4KKzcgICBTaG91bGQgYmUgYWJsZSB0byBzZXQgYW4gb3B0aW9uIHNvIHRoYXQgd2hlbiB5b3UgZG91YmxlIGNsaWNrIGEgZmlsZSB0aGF0CisgICAgaXMgYXNzb2NpYXRlZCB3aXRoIFZpbSwgeW91IGNhbiBlaXRoZXIgZ2V0IGEgbmV3IGluc3RhbmNlIG9mIFZpbSwgb3IgaGF2ZQorICAgIHRoZSBmaWxlIGFkZGVkIGludG8gYW4gYWxyZWFkeSBydW5uaW5nIFZpbS4KKzcgICBUaGUgIi1QIiBhcmd1bWVudCBvbmx5IHdvcmtzIGZvciB0aGUgY3VycmVudCBjb2RlcGFnZS4gIFVzZSB3aWRlCisgICAgZnVuY3Rpb25zIHRvIGZpbmQgdGhlIHdpbmRvdyB0aXRsZS4KKworCitHVUk6Cis4ICAgQWRkIEdUSyAyLjMgZmlsZSBkaWFsb2cgc3VwcG9ydC4gIFBhdGNoIGJ5IEdyYWhhbWUgQm93bGFuZCwgMjAwNCBNYXIgMTUsCisgICAgYnV0IGl0IGRvZXNuJ3QgdXNlICJpbml0ZGlyIiBvciAiZGZsdCIuCis4ICAgTWFrZSBpbnB1dGRpYWxvZygpIHdvcmsgZm9yIFBob3RvbiwgQW1pZ2EsIFJpc2NPUy4KKy0gICA8Qy0tPiBjYW5ub3QgYmUgbWFwcGVkLiAgU2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlY29nbml6ZSB0aGlzIGFzIGEKKyAgICBub3JtYWwgIi0iIHdpdGggdGhlIEN0cmwgbW9kaWZpZXIuCis3ICAgSW1wbGVtZW50ICI6cG9wdXAiIGZvciBvdGhlciBzeXN0ZW1zIHRoYW4gV2luZG93cy4KKzggICBJbXBsZW1lbnQgIjp0ZWFyb2ZmIiBmb3Igb3RoZXIgc3lzdGVtcyB0aGFuIFdpbjMyIEdVSS4KKzYgICBJbXBsZW1lbnQgIjp1bnRlYXJvZmYiOiBoaWRlIGEgdG9ybi1vZmYgbWVudS4KKzggICBXaGVuIHVzaW5nIHRoZSBzY3JvbGxiYXIgdG8gc2Nyb2xsLCBkb24ndCBtb3ZlIHRoZSBjdXJzb3IgcG9zaXRpb24uICBXaGVuCisgICAgbW92aW5nIHRoZSBjdXJzb3I6IHNjcm9sbCB0byB0aGUgY3Vyc29yIHBvc2l0aW9uLgorOSAgIE1ha2UgPFMtSW5zZXJ0PiBwYXN0ZSBmcm9tIHRoZSBjbGlwYm9hcmQgYnkgZGVmYXVsdC4gKEt1bnplKQorNyAgIE1lbnUgbG9jYWwgdG8gYSBidWZmZXIsIGxpa2UgbWFwcGluZ3MuICBPciBsb2NhbCB0byBhIGZpbGV0eXBlPworOCAgIEluIEJ1ZmZlcnMgbWVudSwgYWRkIGEgY2hvaWNlIHdoZXRoZXIgc2VsZWN0aW5nIGEgYnVmZmVyIG9wZW5zIGl0IGluIHRoZQorICAgIGN1cnJlbnQgd2luZG93LCBzcGxpdHMgdGhlIHdpbmRvdyBvciB1c2VzICI6aGlkZSIuCis4ICAgRHJhZ2dpbmcgdGhlIG1vdXNlIHBvaW50ZXIgb3V0c2lkZSBvZiBhIFZpbSBXaW5kb3cgc2hvdWxkIG1ha2UgdGhlIHRleHQKKyAgICBzY3JvbGwuICBSZXR1cm4gYSB2YWx1ZSBmcm9tIGd1aV9zZW5kX21vdXNlX2V2ZW50KCkgdG8gdGhlIG1hY2hpbmUKKyAgICBzcGVjaWZpYyBjb2RlIHRvIGluZGljYXRlIHRoZSB0aW1lIGluIHdoaWNoIHRoZSBldmVudCBzaG91bGQgYmUgcmVwZWF0ZWQuCis4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBpZ25vcmUgYSBtb3VzZSBjbGljayB3aGVuIGl0J3MgdXNlZCB0byBnaXZlIFZpbSAoZ3ZpbSkKKyAgICB3aW5kb3cgZm9jdXMuICBBbHNvIHdoZW4gYSBtb3VzZSBjbGljayBpcyB1c2VkIHRvIGJyaW5nIGEgd2luZG93IHRvIGZyb250LgorOCAgIE1ha2UgdGhlIHNwbGl0IGludG8gc3lzdGVtIGluZGVwZW5kZW50IGNvZGUgYW5kIHN5c3RlbSBzcGVjaWZpYyBjb2RlIG1vcmUKKyAgICBleHBsaWNpdC4gIFRoZXJlIGFyZSB0b28gbWFueSAjaWZkZWZzIGluIGd1aS5jLgorICAgIElmIHBvc3NpYmxlLCBzZXBhcmF0ZSB0aGUgVmltIGNvZGUgY29tcGxldGVseSBmcm9tIHRoZSBHVUkgY29kZSwgdG8gYWxsb3cKKyAgICBydW5uaW5nIHRoZW0gaW4gc2VwYXJhdGUgcHJvY2Vzc2VzLgorOCAgIFN1cHBvcnQgYSBiYWNrZ3JvdW5kIGJpdG1hcC4gIFVzZWZ1bCBmb3IgbWFya2luZyBhIGNvbHVtbi4gIFBhdGNoIGZyb20KKyAgICBIZWF0aGVyIERvd25zIChHVEspIGFuZCBWaW5jZSBOZWdyaSAoV2luMzIpLgorNyAgIFgxMTogU3VwcG9ydCBjdXJzb3JDb2xvciByZXNvdXJjZSBhbmQgIi1jciIgYXJndW1lbnQuCis4ICAgWDExIChhbmQgb3RoZXJzKTogQ1RSTC07IGlzIG5vdCBkaWZmZXJlbnQgZnJvbSAnOycuICBTZXQgdGhlIG1vZGlmaWVyIG1hc2sKKyAgICB0byBpbmNsdWRlIENUUkwgZm9yIGtleXMgd2hlcmUgQ1RSTCBwcm9kdWNlcyB0aGUgc2FtZSBBU0NJSSBjb2RlLgorNyAgIEFkZCBzb21lIGNvZGUgdG8gaGFuZGxlIHByb3BvcnRpb25hbCBmb250cz8gIE5lZWQgdG8gZHJhdyBlYWNoIGNoYXJhY3RlcgorICAgIHNlcGFyYXRlbHkgKGxpa2UgeHRlcm0pLiAgQWxzbyBmb3Igd2hlbiBhIGRvdWJsZS13aWR0aCBmb250IGlzIG5vdCBleGFjdGx5CisgICAgZG91YmxlLXdpZHRoLiAoTWFlZGEpCis4ICAgU2hvdWxkIHRha2UgZm9udCBmcm9tIHh0ZXJtIHdoZXJlIGd2aW0gd2FzIHN0YXJ0ZWQgKGlmIG5vIG90aGVyIGRlZmF1bHQpLgorOCAgIFNlbGVjdGluZyBmb250IG5hbWVzIGluIFgxMSBpcyBkaWZmaWN1bHQsIG1ha2UgYSBzY3JpcHQgb3Igc29tZXRoaW5nIHRvCisgICAgc2VsZWN0IG9uZS4gIE1hcnRpbiBEYWxlY2tpIGhhcyBhIGZvbnQgc2VsZWN0b3IgZm9yIE1vdGlmLCBidXQgaXQgbmVlZHMgYQorICAgIGJpdCBtb3JlIHdvcmsuCis3ICAgTW90aWY6IHVzZSB0aGUgbWVudSBmb250IGNvbnNpc3RlbnRseS4gIFBhdGNoIGZyb20gTWFydGluIERhbGVja2kgMjAwMiBKYW4KKyAgICAxMS4KKzggICBWaXN1YWwgaGlnaGxpZ2h0aW5nIHNob3VsZCBrZWVwIHRoZSBzYW1lIGZvbnQgKGJvbGQsIGl0YWxpYywgZXRjLikuCis4ICAgQWRkIGZsYWcgdG8gJ2d1aW9wdGlvbnMnIHRvIG5vdCBwdXQgYW55dGhpbmcgaW4gdGhlIGNsaXBib2FyZCBhdCBhbGw/Cis4ICAgU2hvdWxkIHN1cHBvcnQgYSB3YXkgdG8gdXNlIGtleXMgdGhhdCB3ZSBkb24ndCByZWNvZ25pemUgeWV0LiAgQWRkIGEKKyAgICBjb21tYW5kIHRoYXQgYWRkcyBlbnRyaWVzIHRvIHNwZWNpYWxfa2V5cyBzb21laG93LglIb3cgZG8gd2UgbWFrZSB0aGlzCisgICAgcG9ydGFibGUgKFgxMSwgV2luMzIsIC4uKT8KKzcgICBBZGQgYSBmbGFnIHRvICdndWlvcHRpb25zJyB0aGF0IHRlbGxzIG5vdCB0byByZW1vdmUgaW5hY3RpdmUgbWVudSBpdGVtcy4KKyAgICBGb3Igc3lzdGVtcyB3aGVyZSBncmV5aW5nLW91dCBvciByZW1vdmluZyBtZW51IGl0ZW1zIGlzIHZlcnkgc2xvdy4gIFRoZQorICAgIG1lbnUgaXRlbXMgd291bGQgcmVtYWluIHZpc2libHkgbm9ybWFsbHksIGJ1dCBub3QgZG8gYW55dGhpbmcuCis3ICAgQWRkICI6bWluaW1pemUiIGFuZCAiOm1heGltaXplIiwgd2hpY2ggaWNvbml6ZSB0aGUgd2luZG93IGFuZCBiYWNrLgorICAgIFVzZWZ1bCB3aGVuIHVzaW5nIGd2aW0gdG8gcnVuIGEgc2NyaXB0IChlLmcuIDJodG1sLnZpbSkuCis3ICAgWDExOiBJcyBpdCBwb3NzaWJsZSB0byBmcmVlIGFsbG9jYXRlZCBjb2xvcnMsIHNvIHRoYXQgb3RoZXIgcHJvZ3JhbXMgY2FuCisgICAgdXNlIHRoZW0gYWdhaW4/ICBPdGhlcndpc2UsIGFsbG93IGRpc2FibGluZyBhbGxvY2F0aW5nIHRoZSBkZWZhdWx0IGNvbG9ycy4KKyAgICBPciBhbGxvY2F0ZSBhbiBvd24gY29sb3JtYXAgKGNoZWNrIFVBRSkuICBXaXRoIGFuIG9wdGlvbiB0byB1c2UgaXQuICBGb3IKKyAgICB0aGUgY29tbWFuZGxpbmUsICItaW5zdGFsbCIgaXMgbW9zdGx5IHVzZWQgZm9yIFgxMSBwcm9ncmFtcy4KKzcgICBBZGQgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGZvciAiZ3ZpbSIgbm90IHRvIHN0YXJ0IHRoZSBHVUkuICBTb3J0IG9mIHRoZQorICAgIGludmVyc2Ugb2YgInZpbSAtZyIuIChWaWthcykKKzcgICBTaG91bGQgc3VwcG9ydCBtdWx0aS1jb2x1bW4gbWVudXMuCistICAgU2hvdWxkIGFkZCBvcHRpb24gZm9yIHdoZXJlIHRvIHB1dCB0aGUgIkhlbHAiIG1lbnU6IGxpa2UgTW90aWYgYXQgdGhlIGZhcgorICAgIHJpZ2h0LCBvciB3aXRoIHRoZSBvdGhlciBtZW51cyAoYnV0IHN0aWxsIGF0IHRoZSByaWdodCkuCistICAgQWRkIG1lbnUgaXRlbSB0byAiS2VlcCBJbnNlcnQgbW9kZSIuCis4ICAgIjpta2d2aW1yYyIgY29tbWFuZCwgdGhhdCBpbmNsdWRlcyBtZW51cy4KKzYgICBCaWcgY2hhbmdlOiBNb3ZlIEdVSSB0byBzZXBhcmF0ZSBwcm9ncmFtICJ2aW1ndWkiLCB0byBtYWtlIHN0YXJ0dXAgb2YgdmltIGEKKyAgICBsb3QgZmFzdGVyLCBidXQgc3RpbGwgYmUgYWJsZSB0byBkbyAidmltIC1nIiBvciAiOmd1aSIuCis3ICAgTW9yZSBleHBsaWNpdCBtb3VzZSBidXR0b24gYmluZGluZyBpbnN0ZWFkIG9mICdtb3VzZW1vZGVsJz8KKzcgICBBZGQgb3B0aW9uIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdyBvbiB0aGUgc2NyZWVuLiAgJ3dpbmRvd3BvcycsCisgICAgd2hpY2ggaGFzIGEgdmFsdWUgb2YgIjEyMyw0NTYiOiA8eD4sPHk+LgorICAgIE9yIGFkZCBhIGNvbW1hbmQsIGxpa2UgIjp3aW5zaXplIj8KKzcgICBBZGQgdG9vbGJhciBmb3IgbW9yZSBHVUlzLgorOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlICJhbWVudSBpY29uPUJ1aWx0SW4jIyIsIHNvIHRoYXQgdGhlIHRvb2xiYXIgaXRlbQorICAgIG5hbWUgY2FuIGJlIGNob3NlbiBmcmVlLgorNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gcHV0IHRoZSB0b29sYmFyIG9uIHRvcCwgbGVmdCwgcmlnaHQgYW5kL29yIGJvdHRvbSBvZgorICAgIHRoZSB3aW5kb3c/ICBBbGxvd3MgZm9yIHNvZnRrZXktbGlrZSB1c2UuCis2ICAgU2VwYXJhdGUgdGhlIHBhcnQgb2YgVmltIHRoYXQgZG9lcyB0aGUgZWRpdGluZyBmcm9tIHRoZSBwYXJ0IHRoYXQgcnVucyB0aGUKKyAgICBHVUkuICBDb21tdW5pY2F0ZSB0aHJvdWdoIGEgcHNldWRvLXR0eS4gIFZpbSBzdGFydHMgdXAsIGNyZWF0ZXMgYQorICAgIHB0eSB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUgdGVybWluYWwuICBXaGVuIHRoZSBHVUkgc3RhcnRzLCB0aGUgcHR5IGlzCisgICAgcmVjb25uZWN0ZWQgdG8gdGhlIEdVSSBwcm9jZXNzLiAgV2hlbiB0aGUgR1VJIHN0b3BzLCBpdCBpcyBjb25uZWN0ZWQgdG8KKyAgICB0aGUgdGVybWluYWwgYWdhaW4uICBBbHNvIHVzZSB0aGUgcHR5IGZvciBleHRlcm5hbCBwcm9jZXNzZXMsIGl0IGxvb2tzCisgICAgbGlrZSBhIHZ0MTAwIHRlcm1pbmFsIHRvIHRoZW0uICBWaW0gdXNlcyBleHRyYSBjb21tYW5kcyB0byBjb21tdW5pY2F0ZSBHVUkKKyAgICB0aGluZ3MuCis3ICAgTW90aWY6IEZvciBhIGNvbmZpcm0oKSBkaWFsb2cgPEVudGVyPiBzaG91bGQgYmUgaWdub3JlZCB3aGVuIG5vIGRlZmF1bHQKKyAgICBidXR0b24gc2VsZWN0ZWQsIDxFc2M+IHNob3VsZCBjbG9zZSB0aGUgZGlhbG9nLgorLSAgIE1vdGlmIHN0ZWFscyA8RjEwPiBmcm9tIHVzLCB0byBwb3AgdXAgbWVudXMgd2l0aCB0aGUga2V5Ym9hcmQuICBIb3cgZG8gd2UKKyAgICBnZXQgaXQgYmFjayBpZiB3ZSB3YW50IGl0PworLSAgIE1vdGlmOiBhZGQgM0Qgc2hhZGluZyBmb3IgdGhlIG1lbnUgZW50cmllcz8gIFBhdGNoIGZyb20gTWFydGluIERhbGVja2kuCistICAgUGFzdGUgaW4gSW5zZXJ0IG1vZGUgc2hvdWxkIG5vdCBkbyBhdXRvd3JhcCBldGMuICBPciBtYXliZSB0aGlzIHNob3VsZCBiZQorICAgIGNoYW5nZWFibGUgd2l0aCBhbiBvcHRpb24/CistICAgUHV0IGEgbmljZSBwaWN0dXJlIGluIHRoZSBpY29uIChidXQgaG93IGRvIHdlIGRvIHRoYXQ/KS4KKzcgICBXaGVuIHVzaW5nIGEgcHNldWRvLXR0eSBWaW0gc2hvdWxkIGJlaGF2ZSBsaWtlIHNvbWUgdGVybWluYWwgKHZ0NTIgbG9va3MKKyAgICBzaW1wbGUgZW5vdWdoKS4gVGVybWluYWwgY29kZXMgdG8vZnJvbSBzaGVsbCBzaG91bGQgYmUgdHJhbnNsYXRlZC4KKy0gICBXb3VsZCBpdCBiZSB1c2VmdWwgdG8gYmUgYWJsZSB0byBxdWl0IHRoZSBHVUkgYW5kIGdvIGJhY2sgdG8gdGhlIHRlcm1pbmFsCisgICAgd2hlcmUgaXQgd2FzIHN0YXJ0ZWQgZnJvbT8KKzcgICBTdXBwb3J0ICItdmlzdWFsIDx0eXBlPiIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LgorCisKK1ZNUzoKKy0gICBJbXByb3ZlbWVudDogcmV3cml0ZSB0ZXJtL1RUWSBoYW5kbGluZy4KKy0gICBJbXByb3ZlbWVudDogY3JlYXRlIFZNUyBHVEsgcnVudGltZSBsaWJyYXJpZXMgb24gT3BlblZNUyA3LjEtMiAodG9kYXkgR1RLCisgICAgd29ya3MganVzdCBvbiA3LjMpLgorCisKK0F1dG9jb21tYW5kczoKKzkgICBNYWtlIHN1cmUgdGhhdCBzaWRlIGVmZmVjdHMgb2YgYXV0b2NvbW1hbmRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gIERvbid0CisgICAgZXhlY3V0ZSBhdXRvY29tbWFuZHMgd2hlbiBhIGJ1ZmZlciBvciB3aW5kb3cgaXMgaGFsZndheSBzb21lIGNoYW5nZXMuCisgICAgTW92ZSBhbGwgYXBwbHlfYXV0b2NtZHMoKSBjYWxscyB0byBhIGhpZ2hlciBsZXZlbCB3aGVyZSBuZWVkZWQuCis4ICAgQWRkIFNjcmlwdFJlYWRDbWQgZXZlbnQ6IHVzZWQgdG8gbG9hZCByZW1vdGUgVmltIHNjcmlwdHMsIGUuZy4KKyAgICAidmltIC11IGh0dHA6Ly9tYWNoL3BhdGgvdmltcmMiLgorOCAgIFVzZSBhbm90aGVyIG9wdGlvbiB0aGFuICd1cGRhdGV0aW1lJyBmb3IgdGhlIEN1cnNvckhvbGQgZXZlbnQuICBUaGUgdHdvCisgICAgdGhpbmdzIGFyZSB1bnJlbGF0ZWQgZm9yIHRoZSB1c2VyIChidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIG1vcmUKKyAgICBkaWZmaWN1bHQpLgorOCAgIEFsc28gdHJpZ2dlciBDdXJzb3JIb2xkIGluIEluc2VydCBtb2RlPworNyAgIEFkZCBhdXRvY29tbWFuZCBldmVudCBmb3Igd2hlbiBhIGJ1ZmZlciBjYW5ub3QgYmUgYWJhbmRvbmVkLiAgU28gdGhhdCB1c2VyCisgICAgY2FuIGRlZmluZSB0aGUgYWN0aW9uIHRha2luZyAoYXV0b3dyaXRlLCBkaWFsb2csIGZhaWwpIGJhc2VkIG9uIHRoZSBraW5kCisgICAgb2YgZmlsZS4gKFlha292IExlcm5lcikgIE9yIGlzIEJ1ZkxlYXZlIHN1ZmZpY2llbnQ/Cis4ICAgQ2FuJ3QgdXNlICI6bm9ybWFsIiBpbiBDdXJzb3JIb2xkIGF1dG9jb21tYW5kcy4gIE1ha2UgdGhlIEN1cnNvckhvbGQgZXZlbnQKKyAgICBpbnNlcnQgYSBzcGVjaWFsIGtleSBjb2RlLCBhbmQgY2FsbCB0aGUgYXV0b2NvbW1hbmQgZnVuY3Rpb25zIGZyb20gYQorICAgIGhpZ2hlciBsZXZlbCwgc28gdGhhdCB2Z2V0YygpIGlzbid0IHVzZWQgcmVjdXJzaXZlbHkuCis4ICAgQXV0b2NvbW1hbmRzIHNob3VsZCBub3QgY2hhbmdlIHJlZ2lzdGVycy4gIEFuZCBtYXJrcz8gIEFuZCB0aGUganVtcGxpc3Q/CisgICAgQW5kIGFueXRoaW5nIGVsc2U/Cis4ICAgQXV0b2NvbW1hbmQgZm9yIHdoZW4gbW9kaWZpZWQgZmlsZXMgaGF2ZSBiZWVuIGZvdW5kLCB3aGVuIGdldHRpbmcgaW5wdXQKKyAgICBmb2N1cyBhZ2FpbiAoZS5nLiwgRmlsZUNoYW5nZWRGb2N1cykuCisgICAgQ2hlY2sgd2hlbjogZ2V0dGluZyBmb2N1cywganVtcGluZyB0byBhbm90aGVyIGJ1ZmZlciwgLi4uCis4ICAgQWRkIGF1dG9jb21tYW5kcywgdXNlciBmdW5jdGlvbnMgYW5kIHVzZXIgY29tbWFuZHMgdG8gIjpta3ZpbXJjIi4KKzggICBBZGQgIlRhZ0p1bXBGaWxlIiBhdXRvY29tbWFuZDogV2hlbiBqdW1waW5nIHRvIGFub3RoZXIgZmlsZSBmb3IgYSB0YWcuCisgICAgQ2FuIGJlIHVzZWQgdG8gb3BlbiAibWFpbi5jLmd6IiB3aGVuICJtYWluLmMiIGlzbid0IGZvdW5kLgorNiAgIEFkZCBLZXltYXBDaGFuZ2VkIGV2ZW50LCBzbyB0aGF0IHRoZSBlZmZlY3RzIG9mIGEgZGlmZmVyZW50IGtleW1hcCBjYW4gYmUKKyAgICBoYW5kbGVkIChlLmcuLCBvdGhlciBmb250KSAoUm9uIEFhcm9uKQorNyAgIEFkZCBhIHdheSB0byBza2lwIGFuIGF1dG9jb21tYW5kIGlmIGdvaW5nIGZyb20gb25lICouYyBmaWxlIHRvIGFub3RoZXIgKi5jCisgICAgZmlsZS4KKzcgICBXaGVuIHRyeWluZyB0byBvcGVuIGEgZGlyZWN0b3J5LCBkb24ndCBsb2FkIHRoZSBmaWxlIGJ1dCB0cmlnZ2VyIGFuCisgICAgYXV0b2NvbW1hbmQgZXZlbnQgT3BlbkRpcmVjdG9yeS4KKzcgICBBZGQgZmlsZSB0eXBlIGluIGZyb250IG9mIGZpbGUgcGF0dGVybjogPGQ+IGZvciBkaXJlY3RvcnksIDxsPiBmb3IgbGluaywKKyAgICA8eD4gZm9yIGV4ZWN1dGFibGUsIGV0Yy4gIDwmeHh4PiBmb3IgUmlzYyBPUy4gIFdpdGggY29tbWFzIHRvIHNlcGFyYXRlCisgICAgYWx0ZXJuYXRpdmVzLiAgVGhlIGF1dG9jb21tYW5kIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBib3RoIHRoZSBmaWxlIHR5cGUKKyAgICBBTkQgdGhlIGZpbGUgcGF0dGVybiBtYXRjaC4gKExlb25hcmQpCis1ICAgQWRkIG9wdGlvbiB0aGF0IHNwZWNpZmllcyBleHRlbnNpb25zIHdoaWNoIGFyZSB0byBiZSBkaXNjYXJkZWQgZnJvbSB0aGUKKyAgICBmaWxlIG5hbWUuICBFLmcuICdhdXN1ZmZpeCcsIHdpdGggIi5neiwub3JpZyIuICBTdWNoIHRoYXQgZmlsZS5jLmd6IHdpbGwKKyAgICB0cmlnZ2VyIHRoZSAiKi5jIiBhdXRvY29tbWFuZHMuICAoQmVsYWJhcykKKzcgICBBZGQgc29tZXRoaW5nIHRvIGJyZWFrIHRoZSBhdXRvY29tbWFuZHMgZm9yIHRoZSBjdXJyZW50IGV2ZW50LCBhbmQgZm9yCisgICAgd2hhdCBmb2xsb3dzLiAgVXNlZnVsIGZvciBhICJCdWZXcml0ZVByZSIgdGhhdCB3YW50cyB0byBhdm9pZCB3cml0aW5nIHRoZQorICAgIGZpbGUuCis4ICAgV2hlbiBlZGl0aW5nICJ0dC5neiIsIHdoaWNoIGlzIGluIERPUyBmb3JtYXQsICdmaWxlZm9ybWF0JyBzdGF5cyBhdAorICAgICJ1bml4IiwgdGh1cyB3cml0aW5nIHRoZSBmaWxlIGNoYW5nZXMgaXQuICBTb21laG93IGRldGVjdCB0aGF0IHRoZSByZWFkCisgICAgY29tbWFuZCB1c2VkIGRvcyBmaWxlZm9ybWF0LiAgU2FtZSBmb3IgJ2ZpbGVlbmNvZGluZycuCis4ICAgQWRkIGJ1ZmZlci1sb2NhbCBhdXRvY29tbWFuZHM/ICBSZWR1Y2VzIG92ZXJoZWFkIGZvciBhdXRvY29tbWFuZHMgdGhhdAorICAgIHRyaWdnZXIgb2Z0ZW4gKGluc2VydGluZyBhIGNoYXJhY3Rlciwgc3dpdGNoaW5nIG1vZGUpLgorCTphdSBFdmVudCA8YnVmZmVyPiBkby1zb21ldGhpbmcKKyAgICBFLmcuOgorCTphdSBCdWZFbnRlciA8YnVmZmVyPiBtZW51IGVuYWJsZSAuLi4KKwk6YXUgQnVmTGVhdmUgPGJ1ZmZlcj4gbWVudSBkaXNhYmxlIC4uLgorICAgIFBhdGNoIGZyb20gWWFrb3YgTGVybmVyLCBpbmNsdWRpbmcgdGVzdCAoMjAwNCBKYW4gNykuCistICAgQWRkIGV2ZW50cyB0byBhdXRvY29tbWFuZHM6CisgICAgRXJyb3IJICAgIC0gV2hlbiBhbiBlcnJvciBoYXBwZW5zCisgICAgTm9ybWFsRW50ZXIJICAgIC0gRW50ZXJpbmcgTm9ybWFsIG1vZGUKKyAgICBJbnNlcnRFbnRlcgkgICAgLSBFbnRlcmluZyBJbnNlcnQgbW9kZQorICAgIFJlcGxhY2VFbnRlciAgICAtIEVudGVyaW5nIFJlcGxhY2UgbW9kZQorICAgIENtZEVudGVyCSAgICAtIEVudGVyaW5nIENtZGxpbmUgbW9kZQorICAgIFZpc3VhbEVudGVyCSAgICAtIEVudGVyaW5nIFZpc3VhbCBtb2RlCisgICAgQ21kVW5kZWZpbmVkICAgIC0gTGlrZSBGdW5jVW5kZWZpbmVkIGJ1dCBmb3IgdXNlciBjb21tYW5kcy4KKyAgICAqTGVhdmUJICAgIC0gTGVhdmluZyB0aGUgbW9kZQorICAgIFNlYXJjaFBvc3QJICAgIC0gQWZ0ZXIgZG9pbmcgYSBzZWFyY2ggY29tbWFuZCAoZS5nLiB0byBkbyAiTSIpCisgICAgUHJlRGlyQ2hhbmdlZC9Qb3N0RGlyQ2hhbmdlZAorCQkgICAgLSBCZWZvcmUvYWZ0ZXIgIjpjZCIgaGFzIGJlZW4gdXNlZCAoZm9yIGNoYW5naW5nIHRoZQorCQkgICAgICB3aW5kb3cgdGl0bGUpCisgICAgQnVmUmVhZEFjdGlvbiAgIC0gcmVwbGFjZXMgcmVhZGluZyBhIGZpbGUKKyAgICBCdWZXcml0ZUFjdGlvbiAgLSByZXBsYWNlcyB3cml0aW5nIGEgZmlsZQorICAgIFNodXREb3duCSAgICAtIHdoZW4gdGhlIHN5c3RlbSBpcyBhYm91dCB0byBzaHV0IGRvd24KKyAgICBJbnNlcnRDaGFyUHJlICAgLSB1c2VyIHR5cGVkIGNoYXJhY3RlciBJbnNlcnQgbW9kZSwgYmVmb3JlIGluc2VydGluZyB0aGUKKwkJICAgICAgY2hhci4gIFBhdHRlcm4gaXMgbWF0Y2hlZCB3aXRoIHRleHQgYmVmb3JlIHRoZSBjdXJzb3IuCisJCSAgICAgIFNldCB2OmNoYXIgdG8gdGhlIGNoYXJhY3RlciwgY2FuIGJlIGNoYW5nZWQuCisJCSAgICAgIChub3QgdHJpZ2dlcmVkIHdoZW4gJ3Bhc3RlJyBpcyBzZXQpLgorICAgIEluc2VydENoYXJQb3N0ICAtIHVzZXIgdHlwZWQgYSBjaGFyYWN0ZXIgaW4gSW5zZXJ0IG1vZGUsIGFmdGVyIGluc2VydGluZworCQkgICAgICB0aGUgY2hhci4KKyAgICBCdWZNb2RpZmllZAkgICAgLSBXaGVuIGEgYnVmZmVyIGJlY29tZXMgbW9kaWZpZWQsIG9yIHVubW9kaWZpZWQgKGZvcgorCQkgICAgICBwdXR0aW5nIGEgWytdIGluIHRoZSB3aW5kb3cgdGl0bGUgb3IgY2hlY2tpbmcgb3V0IHRoZQorCQkgICAgICBmaWxlIGZyb20gQ1ZTKS4KKyAgICBCdWZGaXJzdENoYW5nZSAgLSBXaGVuIG1ha2luZyBhIGNoYW5nZSwgd2hlbiAnbW9kaWZpZWQnIGlzIHNldC4gIENhbiBiZQorCQkgICAgICB1c2VkIHRvIGRvIGEgOnByZXNlcnZlIGZvciByZW1vdGUgZmlsZXMuCisgICAgQnVmQ2hhbmdlCSAgICAtIGFmdGVyIGEgY2hhbmdlIHdhcyBtYWRlLiAgU2V0IHNvbWUgdmFyaWFibGVzIHRvIGluZGljYXRlCisJCSAgICAgIHRoZSBwb3NpdGlvbiBhbmQgbnVtYmVyIG9mIGluc2VydGVkL2RlbGV0ZWQgbGluZXMsIHNvCisJCSAgICAgIHRoYXQgbWFya3MgY2FuIGJlIHVwZGF0ZWQuICBIaWVyQXNzaXN0IGhhcyBwYXRjaCB0byBhZGQKKwkJICAgICAgQnVmQ2hhbmdlUHJlLCBCdWZDaGFuZ2VQb3N0IGFuZCBSZXZlcnRCdWYuIChTaGFoKQorICAgIFdpblJlc2l6ZWQJICAgIC0gV2hlbiBhIHdpbmRvdyBoYXMgYmVlbiByZXNpemVkCisgICAgVmltUmVzaXplZAkgICAgLSBXaGVuIHRoZSBWaW0gd2luZG93IGhhcyBiZWVuIHJlc2l6ZWQgKFNJR1dJTkNIKQorCQkgICAgICBwYXRjaCBmcm9tIFlha292IExlcm5lciwgMjAwMyBKdWx5IDI0LgorLSAgIEFkZCBhdXRvY29tbWFuZCB0byBiZSBleGVjdXRlZCBldmVyeSBzbyBtYW55IHNlY29uZHM/ICBGb3Igd3JpdGluZyB0aGUKKyAgICBmaWxlIG5vdyBhbmQgdGhlbiAoJ2F1dG9zYXZlJykuCisJCQkJICAqJ2F1dG9zYXZlJyogKidhcycqIConbm9hdXRvc2F2ZScqIConbm9hcycqCisgICAgJ2F1dG9zYXZlJyAnYXcnIG51bWJlciAgKGRlZmF1bHQgMCkKKwkgICAgQXV0b21hdGljYWxseSB3cml0ZSB0aGUgY3VycmVudCBidWZmZXIgdG8gZmlsZSBOIHNlY29uZHMgYWZ0ZXIgdGhlCisJICAgIGxhc3QgY2hhbmdlIGhhcyBiZWVuIG1hZGUgYW5kIHdoZW4gfCdtb2RpZmllZCd8IGlzIHN0aWxsIHNldC4KKwkgICAgRGVmYXVsdDogMCA9IGRvIG5vdCBhdXRvc2F2ZSB0aGUgYnVmZmVyLgorICAgIEFsdGVybmF0aXZlOiBoYXZlICdhdXRvc2F2ZScgdXNlICd1cGRhdGV0aW1lJyBhbmQgJ3VwZGF0ZWNvdW50JyBidXQgbWFrZQorICAgIHRoZW0gc2F2ZSB0aGUgZmlsZSBpdHNlbGYgYmVzaWRlcyB0aGUgc3dhcGZpbGUuCisKKworSW5zZXJ0IG1vZGUgY29tcGxldGlvbi9leHBhbnNpb246Cis4ICAgV2hlbiB0aGVyZSBpcyBubyB3b3JkIGJlZm9yZSB0aGUgY3Vyc29yIGJ1dCBzb21ldGhpbmcgbGlrZSAic3lzLiIgY29tcGxldGUKKyAgICB3aXRoICJzeXMuIi4gIFdvcmtzIHdlbGwgZm9yIEMgYW5kIHNpbWlsYXIgbGFuZ3VhZ2VzLgorOSAgIF5YXkwgY29tcGxldGlvbiBkb2Vzbid0IHJlcGVhdCBjb3JyZWN0bHkuICBJdCB1c2VzIHRoZSBmaXJzdCBtYXRjaCB3aXRoCisgICAgdGhlIGxhc3QgYWRkZWQgbGluZSwgaW5zdGVhZCBvZiBjb250aW51aW5nIHdoZXJlIHRoZSBsYXN0IG1hdGNoIGVuZGVkLgorICAgIChXZWJiKQorOCAgIFRoZSBjb2RlIGhhcyBiZWNvbWUgdG9vIGNvbXBsZXguICBSZWRlc2lnbiBpdCwgb3IgYXQgbGVhc3QgYWRkIHByb3BlcgorICAgIGNvbW1lbnRzLgorOCAgIEFkZCBvcHRpb24gdG8gc2V0IGRpZmZlcmVudCBiZWhhdmlvciBmb3IgSW5zZXJ0IG1vZGUgY29tcGxldGlvbjoKKyAgICAtIGlnbm9yZS9tYXRjaCBjYXNlCisgICAgLSBkaWZmZXJlbnQgY2hhcmFjdGVycyB0aGFuICdpc2tleXdvcmQnCis4ICAgQWRkIGV4cHJlc3Npb24tZXhwYW5zaW9uLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBkZWZpbmUgaGlzIG93biBraW5kIG9mCisgICAgY29tcGxldGlvbi4gIFBhdGNoIGZyb20gVGFybyBNdXJhb2thLCAyMDAzIEF1ZyAyNi4KKzggICBBZGQgYSBjb21tYW5kIHRvIHVuZG8gdGhlIGNvbXBsZXRpb24sIGdvIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHRleHQuCis4ICAgVXNlIHRoZSBjbGFzcyBpbmZvcm1hdGlvbiBpbiB0aGUgdGFncyBmaWxlIHRvIGRvIGNvbnRleHQtc2Vuc2l0aXZlCisgICAgY29tcGxldGlvbi4gIEFmdGVyICJmb28uIiBjb21wbGV0ZSBhbGwgbWVtYmVyIGZ1bmN0aW9ucy92YXJpYWJsZXMgb2YKKyAgICAiZm9vIi4gIE5lZWQgdG8gc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIGNsYXNzIGRlZmluaXRpb24gb2YgZm9vLgorICAgIFNob3VsZCB3b3JrIGZvciBDKysgYW5kIEphdmEuCisgICAgRXZlbiBtb3JlIGNvbnRleHQgd291bGQgYmUgbmljZTogImltcG9ydCBqYXZhLl5OIiAtPiAiaW8iLCAibGFuZyIsIGV0Yy4KKzcgICBXaGVuIGV4cGFuZGluZyAkSE9NRS9kaXIgd2l0aCBeWF5GIGtlZXAgdGhlICRIT01FICh3aXRoIGFuIG9wdGlvbj8pLgorNyAgIEFkZCBDVFJMLVggY29tbWFuZCBpbiBJbnNlcnQgbW9kZSBsaWtlIENUUkwtWCBDVFJMLU4sIHRoYXQgY29tcGxldGVzIFdPUkRTCisgICAgaW5zdGVhZCBvZiB3b3Jkcy4KKzggICBBZGQgQ1RSTC1YIENUUkwtUjogY29tcGxldGUgd29yZHMgZnJvbSByZWdpc3RlciBjb250ZW50cy4KKzggICBBZGQgY29tcGxldGlvbiBvZiBwcmV2aW91c2x5IGluc2VydGVkIHRleHRzIChsaWtlIHdoYXQgQ1RSTC1BIGRvZXMpLgorICAgIFJlcXVpcmVzIHJlbWVtYmVyaW5nIGEgbnVtYmVyIG9mIGluc2VydGlvbnMuCis4ICAgQWRkICdmJyBmbGFnIHRvICdjb21wbGV0ZSc6IEV4cGFuZCBmaWxlIG5hbWVzLgorICAgIEFsc28gYXBwbHkgJ2NvbXBsZXRlJyB0byB3aG9sZSBsaW5lIGNvbXBsZXRpb24uCistICAgTWFrZSBpdCBwb3NzaWJsZSB0byBzZWFyY2ggaW5jbHVkZSBmaWxlcyBpbiBzZXZlcmFsIHBsYWNlcy4gIFVzZSB0aGUKKyAgICAncGF0aCcgb3B0aW9uPyAgQ2FuIHRoaXMgYmUgZG9uZSB3aXRoIHRoZSBkaWN0aW9uYXJ5IGNvbXBsZXRpb24gKHVzZQorICAgIHdpbGRjYXJkcyBpbiB0aGUgZmlsZSBuYW1lKT8KKy0gICBNYWtlIENUUkwtWCBDVFJMLUsgZG8gYSBiaW5hcnkgc2VhcmNoIGluIHRoZSBkaWN0aW9uYXJ5IChpZiBpdCdzIHNvcnRlZCkuCistICAgU3BlZWQgdXAgQ1RSTC1YIENUUkwtSyBkaWN0aW9uYXJ5IHNlYXJjaGluZyAoZG9uJ3QgdXNlIGEgcmVnZXhwPykuCistICAgU2V0IGEgbWFyayBhdCB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIG1hdGNoIHdhcyBmb3VuZCAoZmlsZSBtYXJrLCBjb3VsZAorICAgIGJlIGluIGFub3RoZXIgZmlsZSkuCistICAgQWRkIENUUkwtQSBjb21tYW5kIGluIENUUkwtWCBtb2RlOiBzaG93IGFsbCBtYXRjaGVzLgorLSAgIE1ha2UgQ1RSTC1YIENUUkwtTCB1c2UgdGhlICdjb21wbGV0ZScgb3B0aW9uPworLSAgIEFkZCBjb21tYW5kIGluIENUUkwtWCBtb2RlIHRvIGFkZCBmb2xsb3dpbmcgd29yZHMgdG8gdGhlIGNvbXBsZXRlZCBzdHJpbmcKKyAgICAoZS5nLiB0byBjb21wbGV0ZSAiUG9pbnRlci0+ZWxlbWVudCIgd2l0aCBDVFJMLVggQ1RSTC1QIENUUkwtVyBDVFJMLVcpCistICAgQ1RSTC1YIENUUkwtRjogVXNlICdwYXRoJyB0byBmaW5kIGNvbXBsZXRpb25zLgorLSAgIENUUkwtWCBDVFJMLUY6IE9wdGlvbiB0byB1c2UgZm9yd2FyZCBzbGFzaGVzIG9uIE1TLVdpbmRvd3M/CistICAgQ1RSTC1YIENUUkwtRjogRG9uJ3QgcmVwbGFjZSAiJFZJTSIgd2l0aCB0aGUgYWN0dWFsIHZhbHVlLiAoS2VsbHkpCis4ICAgQWRkIG9wdGlvbiAnaXNleHBhbmQnLCBjb250YWluaW5nIGNoYXJhY3RlcnMgd2hlbiBkb2luZyBleHBhbnNpb24gKHNvIHRoYXQKKyAgICAiLiIgYW5kICJcIiBjYW4gYmUgaW5jbHVkZWQsIHdpdGhvdXQgY2hhbmdpbmcgJ2lza2V5d29yZCcpLiAoR29sZGZhcmIpCisgICAgQWxzbzogJ2lzdGFnd29yZCc6IGNoYXJhY3RlcnMgdXNlZCBmb3IgQ1RSTC1dLgorICAgIFdoZW4gJ2lzZXhwYW5kJyBvciAnaXN0YWd3b3JkJyBhcmUgZW1wdHksIHVzZSAnaXNrZXl3b3JkJy4KKy0gICBBbGxvdyBsaXN0aW5nIGFsbCBtYXRjaGVzIGluIHNvbWUgd2F5IChhbmQgcGlja2luZyBvbmUgZnJvbSB0aGUgbGlzdCkuCisKKworQ29tbWFuZCBsaW5lIGVkaXRpbmc6Cis3ICAgQWRkIGNvbW1hbmRzIChrZXlzKSB0byBkZWxldGUgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQKKyAgICBsaW5lLgorOCAgIEN1c3RvbSBjb21wbGV0aW9uIG9mIHVzZXIgY29tbWFuZHMgY2FuJ3QgdXNlIHRoZSBzdGFuZGFyZCBjb21wbGV0aW9uCisgICAgZnVuY3Rpb25zLiAgQWRkIGEgaG9vayB0byBpbnZva2UgYSB1c2VyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHlwZSBvZgorICAgIGNvbXBsZXRpb24gdG8gYmUgZG9uZTogImZpbGUiLCAidGFnIiwgImN1c3RvbSIsIGV0Yy4KKy0gICBBZGQgZmxhZ3MgdG8gJ3doaWNod3JhcCcgZm9yIGNvbW1hbmQgbGluZSBlZGl0aW5nIChjdXJzb3IgcmlnaHQgYXQgZW5kIG9mCisgICAgbGluZXMgd3JhcHMgdG8gc3RhcnQgb2YgbGluZSkuCistICAgTWFrZSBlZGl0aW5nIHRoZSBjb21tYW5kIGxpbmUgd29yayBsaWtlIEluc2VydCBtb2RlIGluIGEgc2luZ2xlLWxpbmUgdmlldworICAgIG9uIGEgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5LiAgQnV0IHRoaXMgaGFzIG1hbnkKKyAgICBkaXNhZHZhbnRhZ2VzLCBvbmx5IGltcGxlbWVudCBpdCB3aGVuIHRoZXNlIGNhbiBiZSBzb2x2ZWQuICBFbHZpcyBoYXMgcnVuCisgICAgaW50byB0aGVzZSwgc2VlIHJlbWFya3MgZnJvbSBTdGV2ZSAofi9NYWlsL29sZG1haWwva2lya2VuZGFsbC9pbi4wMDAxMikuCisgICAgLSBHb2luZyBiYWNrIGluIGhpc3RvcnkgYW5kIGVkaXRpbmcgYSBsaW5lIHRoZXJlIHdvdWxkIGNoYW5nZSB0aGUgaGlzdG9yeS4KKyAgICAgIFdvdWxkIHN0aWxsIG5lZWQgdG8ga2VlcCBhIGNvcHkgb2YgdGhlIGhpc3RvcnkgZWxzZXdoZXJlLiAgTGlrZSB0aGUKKyAgICAgIGNtZHdpbiBkb2VzIG5vdyBhbHJlYWR5LgorICAgIC0gVXNlIENUUkwtTyB0byBleGVjdXRlIG9uZSBOb3JtYWwgbW9kZSBjb21tYW5kLiAgSG93IHRvIHN3aXRjaCB0byBub3JtYWwKKyAgICAgIG1vZGUgZm9yIG1vcmUgY29tbWFuZHM/ICA8RXNjPiBzaG91bGQgY2FuY2VsIHRoZSBjb21tYW5kIGxpbmUuICBDVFJMLVQ/CisgICAgLSBUbyBhbGxvdyAiLyIgYW5kICI9IG5lZWQgdG8gcmVjdXJzaXZlbHkgY2FsbCBnZXRjbWRsaW5lKCksIG92ZXJ3cml0ZSB0aGUKKyAgICAgIGNtZGxpbmUuICBCdXQgdGhlbiB3ZSBhcmUgZWRpdGluZyBhIGNvbW1hbmQtbGluZSBhZ2Fpbi4gIEhvdyB0byBhdm9pZAorICAgICAgdGhhdCB0aGUgdXNlciBnZXRzIGNvbmZ1c2VkIGJ5IHRoZSBzdGFjayBvZiBjb21tYW5kIGxpbmVzPworICAgIC0gVXNlIGVkaXQoKSBmb3Igbm9ybWFsIGNtZGxpbmUgZWRpdGluZz8gIFdvdWxkIGhhdmUgdG8gaW50ZWdyYXRlCisgICAgICBnZXRjbWRsaW5lKCkgaW50byBlZGl0KCkuICBOZWVkIHRvIHNvbHZlIGNvbmZsaWN0cyBiZXR3ZWVuIEluc2VydCBtb2RlCisgICAgICBhbmQgQ29tbWFuZC1saW5lIG1vZGUgY29tbWFuZHMuICBNYWtlIGl0IHdvcmsgbGlrZSBLb3JuIHNoZWxsIGFuZCB0Y3NoLgorICAgICAgUHJvYmxlbXM6CisJLSBJbnNlcnQ6IGNvbXBsZXRpb24gd2l0aCAnd2lsZGNoYXInCisJLSBJbnNlcnQ6IHVzZSBjbWRsaW5lIGFiYnJldmlhdGlvbnMKKwktIEluc2VydDogQ1RSTC1EIGRlbGV0ZXMgaW5kZW50IGluc3RlYWQgb2YgbGlzdGluZyBtYXRjaGVzCisJLSBOb3JtYWw6IG5vIENUUkwtVyBjb21tYW5kcworCS0gTm9ybWFsOiBubyAiOiIgY29tbWFuZHM/CisJLSBOb3JtYWw6IGFsbG93IFZpc3VhbCBtb2RlIG9ubHkgd2l0aGluIG9uZSBsaW5lLgorICAgIC0gd2hlcmUgdG8gc2hvdyBpbnNlcnQvbm9ybWFsIG1vZGUgbWVzc2FnZT8gIENoYW5nZSBoaWdobGlnaHRpbmcgb2YKKyAgICAgIGNoYXJhY3RlciBpbiBmaXJzdCBjb2x1bW4/CisgICAgLSBJbXBsZW1lbnRhdGlvbiBpZGVhczoKKyAgICAgIC0gU2V0ICJjdXJ3aW4iIGFuZCAiY3VyYnVmIiB0byB0aGUgY29tbWFuZCBsaW5lIHdpbmRvdyBhbmQgYnVmZmVyLgorICAgICAgLSBjdXJ3aW4tPndfdG9wbGluZSBpcyBhbHdheXMgZXF1YWwgdG8gY3Vyd2luLT53X2N1cnNvci5sbnVtLgorICAgICAgLSBuZXZlciBzZXQgJ251bWJlcicsIG5vIGZvbGRpbmcsIGV0Yy4gIE5vIHN0YXR1cyBsaW5lLgorICAgICAgLSBzeW5jIHVuZG8gYWZ0ZXIgZW50ZXJpbmcgYSBjb21tYW5kIGxpbmU/CisgICAgICAtIHVzZSBOVl9OT0NMIGZsYWcgZm9yIGNvbW1hbmRzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGluIENvbW1hbmQtbGluZQorCU1vZGUuCisKKworQ29tbWFuZCBsaW5lIGNvbXBsZXRpb246Cis4ICAgQ2hhbmdlIGV4cGFuZF9pbnRlcmFjdGl2ZWx5IGludG8gYSBmbGFnIHRoYXQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgorOCAgIFdpdGggY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gYWZ0ZXIgJyUnIGFuZCAnIycsIGV4cGFuZCBjdXJyZW50L2FsdGVybmF0ZQorICAgIGZpbGUgbmFtZSwgc28gaXQgY2FuIGJlIGVkaXRlZC4gIEFsc28gd2l0aCBtb2RpZmllcnMsIHN1Y2ggYXMgIiU6aCIuCis4ICAgV2hlbiBjb21wbGV0aW5nIGNvbW1hbmQgbmFtZXMsIGVpdGhlciBzb3J0IHRoZW0gb24gdGhlIGxvbmcgbmFtZSwgb3IgbGlzdAorICAgIHRoZW0gd2l0aCB0aGUgb3B0aW9uYWwgcGFydCBpbnNpZGUgW10uCis3ICAgQ29tcGxldGlvbiBvZiBuZXR3b3JrIHNoYXJlcywgcGF0Y2ggYnkgWWFzdWhpcm8gTWF0c3Vtb3RvLgorNyAgIENvbXBsZXRpb24gb2YgIjptYXAgeCAiOiBmaWxsIGluIHRoZSBjdXJyZW50IG1hcHBpbmcsIHNvIHRoYXQgaXQgY2FuIGJlCisgICAgZWRpdGVkLiAoU3ZlbiBHdWNrZXMpCis3ICAgQWRkIGNvbXBsZXRpb24gZm9yIHdoZW4gZW50ZXJpbmcgYW4gZXhwcmVzc2lvbiBhZnRlciBDVFJMLVI9IGFuZCAiPS4KKyAgICAoU2VydmF0aXVzIEJyYW5kdCkKKy0gICBGb3IgJ3dpbGRtZW51JzogU2ltcGxpZnkgIi4uL2JhciIgd2hlbiBwb3NzaWJsZS4KKy0gICBXaGVuIHVzaW5nIDxVcD4gaW4gd2lsZG1lbnUgbW9kZSBmb3IgYSBzdWJtZW51LCBzaG91bGQgZ28gYmFjayB0byB0aGUKKyAgICBjdXJyZW50IG1lbnUsIG5vdCB0aGUgZmlyc3Qgb25lLiAgRS5nLiwgIjplbWVudSBGaWxlLlNhdmU8VXA+Ii4KKzggICBGb3IgIjpmaW5kIiBhbmQgIjpzZmluZCIgZXhwYW5kIGZpbGVzIGZvdW5kIGluICdwYXRoJy4KKzggICBBZGQgY21kbGluZSBjb21wbGV0aW9uIGZvciB0aGUgIjpkZWJ1ZyIgY29tbWFuZC4KKzggICBXaGVuIHVzaW5nIGJhY2t0aWNrIGV4cGFuc2lvbiwgdGhlIGV4dGVybmFsIGNvbW1hbmQgbWF5IHdyaXRlIGEgZ3JlZXRpbmcKKyAgICBtZXNzYWdlLiAgQWRkIGFuIG9wdGlvbiBvciBjb21tYW5kcyB0byByZW1vdmUgbGluZXMgdGhhdCBtYXRjaCBhIHJlZ2V4cD8KKzcgICBXaGVuIGxpc3RpbmcgbWF0Y2hlcyBvZiBmaWxlcywgZGlzcGxheSB0aGUgY29tbW9uIHBhdGggc2VwYXJhdGVseSBmcm9tIHRoZQorICAgIGZpbGUgbmFtZXMsIGlmIHRoaXMgbWFrZXMgdGhlIGxpc3Rpbmcgc2hvcnRlci4gKFdlYmIpCistICAgQWRkIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciAiOmlsaXN0IiBhbmQgZnJpZW5kcywgc2hvdyBtYXRjaGluZworICAgIGlkZW50aWZpZXJzIChXZWJiKS4KKzggICBBZGQgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yICJvbGQgdmFsdWUiIG9mIGEgY29tbWFuZC4gICI6YXJncyA8a2V5PiIKKyAgICB3b3VsZCByZXN1bHQgaW4gdGhlIGN1cnJlbnQgbGlzdCBvZiBhcmd1bWVudHMsIHdoaWNoIHlvdSBjYW4gdGhlbiBlZGl0LgorNyAgIEFkZCBjb21tYW5kIGxpbmUgY29tcGxldGlvbiB3aXRoIENUUkwtWCwganVzdCBsaWtlIEluc2VydCBtb2RlIGNvbXBsZXRpb24uCisgICAgVXNlZnVsIGZvciAiOnMvd29yZC94eC8iLgorLSAgIEFkZCBjb21tYW5kIHRvIGdvIGJhY2sgdG8gdGhlIHRleHQgYXMgaXQgd2FzIGJlZm9yZSBjb21wbGV0aW9uIHN0YXJ0ZWQuCisgICAgQWxzbyB0byBiZSB1c2VkIGZvciA8VXA+IGluIHRoZSBjb21tYW5kIGxpbmUuCistICAgQWRkICd3aWxkbG9uZ2VzdCcgb3B0aW9uOiBLZXkgdG8gdXNlIHRvIGZpbmQgbG9uZ2VzdCBjb21tb24gbWF0Y2ggZm9yCisgICAgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGRlZmF1bHQgQ1RSTC1MKSwgbGlrZSAnd2lsZGNoYXInLiAoQ3JlZ3V0KQorICAgIEFsc286IHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgbWF0Y2hlcywgc2hvdyB0aGVtIGxpbmUgYSBDVFJMLUQuCistICAgQWRkIGNvbXBsZXRpb24gZm9yIEVudmlyb25tZW50IHZhcmlhYmxlczogIjplY2hvICRTSDxUYWI+IiAtPiAiJFNIRUxMIi4KKworCitDb21tYW5kIGxpbmUgaGlzdG9yeToKKy0gICBBZGQgIktleVdhc1R5cGVkIiBmbGFnOiBJdCdzIHJlc2V0IGJlZm9yZSBlYWNoIGNvbW1hbmQgYW5kIHNldCB3aGVuIGEKKyAgICBjaGFyYWN0ZXIgZnJvbSB0aGUga2V5Ym9hcmQgaXMgY29uc3VtZWQuIFZhbHVlIGlzIHVzZWQgdG8gZGVjaWRlIHRvIHB1dCBhCisgICAgY29tbWFuZCBsaW5lIGluIGhpc3Rvcnkgb3Igbm90LiBQdXQgbGluZSBpbiBoaXN0b3J5IGlmIGl0IGRpZG4ndAorICAgIGNvbXBsZXRlbHkgcmVzdWx0ZWQgZnJvbSBvbmUgbWFwcGluZy4KKy0gICBXaGVuIHVzaW5nICI6YnJvd3NlIiwgYWxzbyBwdXQgdGhlIHJlc3VsdGluZyBlZGl0IGNvbW1hbmQgaW4gdGhlIGhpc3RvcnksCisgICAgc28gdGhhdCBpdCBjYW4gYmUgcmVwZWF0ZWQuIChEZW1pcmVsKQorCisKK0luc2VydCBtb2RlOgorOSAgIFdoZW4gJ2F1dG9pbmRlbnQnIGlzIHNldCwgaGl0dGluZyA8Q1I+IHR3aWNlLCB3aGlsZSB0aGVyZSBpcyB0ZXh0IGFmdGVyCisgICAgdGhlIGN1cnNvciwgZG9lc24ndCBkZWxldGUgdGhlIGF1dG9pbmRlbnQgaW4gdGhlIHJlc3VsdGluZyBibGFuayBsaW5lLgorICAgIChSaWNoIFdhbGVzKSBUaGlzIGlzIFZpIGNvbXBhdGlibGUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgYnVnLiAgUmljaCBoYXMgYQorICAgIHN1Z2dlc3Rpb24gZm9yIGEgcGF0Y2ggdG8gZml4IHRoaXMuCis4ICAgV2hlbiB1c2luZyBDVFJMLU8gaW4gSW5zZXJ0IG1vZGUsIHRoZW4gZXhlY3V0aW5nIGFuIGluc2VydCBjb21tYW5kCisgICAgImEiIG9yICJpIiwgc2hvdWxkIHdlIHJldHVybiB0byBJbnNlcnQgbW9kZSBhZnRlciA8RXNjPj8gKEVnZ2luaykKKyAgICBQZXJoYXBzIGl0IGNhbiBiZSBhbGxvd2VkIGEgc2luZ2xlIHRpbWUsIHRvIGJlIGFibGUgdG8gZG8KKyAgICAiPEMtTz4xMGF4eXo8RXNjPiIuICBOZXN0aW5nIHRoaXMgZnVydGhlciBpcyBjb25mdXNpbmcuCisgICAgIjptYXAgPEYyPiA1YWFiYzxFc2M+IiB3b3JrcyBvbmx5IG9uY2UgZnJvbSBJbnNlcnQgbW9kZS4KKzcgICBVc2UgQ1RSTC1HIDxjb3VudD4gdG8gcmVwZWF0IHdoYXQgZm9sbG93cy4gIFVzZWZ1bCBmb3IgaW5zZXJ0aW5nIGEKKyAgICBjaGFyYWN0ZXIgbXVsdGlwbGUgdGltZXMgb3IgcmVwZWF0aW5nIENUUkwtWS4KKzcgICBNYWtlICI6c3RhcnRpbnNlcnQiIGNvbW1hbmQgd29yayBkaXJlY3RseSBmb3IgZnVuY3Rpb25zIGFuZCBzY3JpcHRzPworICAgIEFsc28gbWFrZSBpdCBwb3NzaWJsZSB0byBhcHBlbmQgKGl0J3MgZGlmZmljdWx0IGF0IGVuZCBvZiBsaW5lKS4KKyAgICBBbmQgYWRkICI6c3RhcnRyZXBsYWNlIiAocGF0Y2ggYnkgQ2hhcmxlcyBDYW1wYmVsbCwgMjAwNCBKYW4gOSwKKyAgICBodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjUGF0Y2gpCis3ICAgVXNlICdtYXRjaHBhaXJzJyBmb3IgJ3Nob3dtYXRjaCc6IFdoZW4gaW5zZXJ0aW5nIGEgY2hhcmFjdGVyIGNoZWNrIGlmIGl0CisgICAgYXBwZWFycyBpbiB0aGUgcmhzIG9mICdtYXRjaHBhaXJzJy4KKy0gICBJbiBJbnNlcnQgbW9kZSAoYW5kIGNvbW1hbmQgbGluZSBlZGl0aW5nPyk6IEFsbG93IHVuZG8gb2YgdGhlIGxhc3QgdHlwZWQKKyAgICBjaGFyYWN0ZXIuCVRoaXMgaXMgdXNlZnVsIGZvciBDVFJMLVUsIENUUkwtVywgZGVsZXRlIGFuZCBiYWNrc3BhY2UsIGFuZAorICAgIGFsc28gZm9yIGNoYXJhY3RlcnMgdGhhdCB3cmFwIHRvIHRoZSBuZXh0IGxpbmUuCisgICAgQWxzbzogYmUgYWJsZSB0byB1bmRvIENUUkwtUiAoaW5zZXJ0IHJlZ2lzdGVyKS4KKyAgICBQb3NzaWJseSB1c2UgJ2JhY2tzcGFjZSc9Indob2xlIiBmb3IgYSBtb2RlIHdoZXJlIGF0IGxlYXN0IGEgPENSPiB0aGF0CisgICAgaW5zZXJ0cyBhdXRvaW5kZW50IGlzIHVuZG9uZSBieSBhIHNpbmdsZSA8QlM+LgorLSAgIFVzZSBDVFJMLUcgaW4gSW5zZXJ0IG1vZGUgZm9yIGFuIGV4dHJhIHJhbmdlIG9mIGNvbW1hbmRzLCBsaWtlICJnIiBpbgorICAgIE5vcm1hbCBtb2RlLgorLSAgIE1ha2UgJ3Bhc3RlJyB3b3JrIHdpdGhvdXQgcmVzZXR0aW5nIG90aGVyIG9wdGlvbnMsIGJ1dCBvdmVycmlkZSB0aGVpcgorICAgIHZhbHVlLiAgQXZvaWRzIHByb2JsZW1zIHdoZW4gY2hhbmdpbmcgZmlsZXMgYW5kIG1vZGVsaW5lcyBvciBhdXRvY29tbWFuZHMKKyAgICBhcmUgdXNlZC4KKy0gICBXaGVuIHR5cGluZyBDVFJMLVYgYW5kIGEgZGlnaXQgaGlnaGVyIHRoYW4gMiwgb25seSBleHBlY3QgdHdvIGRpZ2l0cy4KKy0gICBJbnNlcnQgYmluYXJ5IG51bWJlcnMgd2l0aCBDVFJMLVYgYi4KKy0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVuZG8gPEJTPiwgPEMtVz4gYW5kIDxDLVU+LiAgQmFzaCB1c2VzIENUUkwtWS4KKworCisnY2luZGVudCcsICdzbWFydGluZGVudCc6Cis4ICAgV3JvbmcgaW5kZW50IGZvciAiOiIgYWZ0ZXIgYSBtZXRob2Qgd2l0aCBsaW5lIGJyZWFrIGluIGFyZ3VtZW50czoKKwlGb286OkZvbyAoaW50IG9uZSwKKwkJICAgIGludCB0d28pCisJOiBzb21ldGhpbmcoNCkKKwl7fQorOCAgIFdyb25nIGluZGVudCBmb3IgIjoiIGFmdGVyIGEgbWV0aG9kIHdpdGggbXVsdGlwbGUgbGluZXM6CisJRm9vOjpGb28gKGludCBvbmUsIGludCB0d28pCisJCTogc29tZXRoaW5nKDQpLAorCXNvbWV0aGluZ2Vsc2UoMykKKwl7fQorOSAgIFRvbyBtdWNoIGluZGVudCBmb3IgImx1bHUiOiAoVXdlIFplaXNiZXJnZXIpCisgICAgICAgaW50IG1haW4gKCkKKyAgICAgICB7CisJIGlmIChsYWxhKQorCSAgIGRvCisJICAgICArKygqbG9sbyk7CisJICAgd2hpbGUgKGxpbGkKKwkJICAmJiBsZWxlKTsKKwkgICBsdWx1OworICAgICAgIH0KKzkgICBGdW5jdGlvbiBnZXRzIGV4dHJhIGluZGVudDogKEphbWF4KQorCXZvaWQgZnVuY3Rpb24oaW50IHBhcmFtKSB7CisJICAgICBpZiAoZmFsc2UpCisJCSByZXR1cm47CisJfQorOSAgIGJyYWNlIG5vdCBpbmRlbnRlZCBjb3JyZWN0bHk6CisJY2FzZSAnYyc6ICAgaWYgKGNvbmQpCisJCQl7CisgICAgU2hvdWxkIGFsaWduIHdpdGggImlmIiBpbiBjYXNlIHN0YXRlbWVudC4KKzcgICBBbGxvdyBhbGlnbmluZyBhIGNsb3NpbmcgIikiIHdpdGggdGhlIGxpbmUgYWJvdmUsIGluc3RlYWQgb2YgdGhlIG1hdGNoaW5nCisgICAgIigiOiAoUmllaG0pIGlmIChhc2RmYXNkZiAmJgorCQkJYXNkZgorCQkJKQorOCAgIEphdmE6IEluc2lkZSBhbiBhbm9ueW1vdXMgY2xhc3MsIGFmdGVyIGFuICJlbHNlIiBvciAidHJ5IiB0aGUgaW5kZW50IGlzCisgICAgdG9vIHNtYWxsLiAoVmluY2VudCBCZXJnYmF1ZXIpCis4ICAgSW4gQysrIGl0J3MgcG9zc2libGUgdG8gaGF2ZSB7fSBpbnNpZGUgKCk6IChLaXJzaG5hKQorCQlmdW5jKAorCQkJbmV3IFN0cmluZ1tdIHsKKwkJCSAgICAiYXNkZiIsCisJCQkgICAgImFzZGYiCisJCQl9CisJCSAgICApOworNyAgIFNlcGFyYXRlICIoMCIgb3B0aW9uIGludG8gaW5zaWRlL291dHNpZGUgYSBmdW5jdGlvbiAoWmVsbG5lcik6CisJZnVuYygKKwkgICBpbnQgeCkJLy8gaW5kZW50IGxpa2UgIig0IgorCXsKKwkgICBpZiAoYQorCSAgICAgICAmJiBiKQkvLyBpbmRlbnQgbGlrZSAiKDAiCis4ICAgU3RyYW5nZSBwcm9ibGVtIHdpdGggdGhpcyBjb2RlLCAiaGVsbG8iIGlzIGluZGVudGVkIHdyb25nOiAoR2FyeSBIb2xsb3dheSkKKyAgICBtYWluKCkgeyBjaGFyCWZvb1tdID0gIi8qIjsKKwkgLyogVGhpcyBpcyBhIGNvbW1lbnQ7IHRoZSBpbmRlbnRhdGlvbiBvZiBDCisJICAqIHNvdXJjZSBiZWxvdyB0aGlzIGNvbW1lbnQgZ2V0cyBtZXNzZWQgdXAgZHVlIHRvIHRoZSBzdHJpbmcgYWJvdmUuCisJICAqLworCSAgaGVsbG8KKzkgICBVc2luZyAieyIgaW4gYSBjb21tZW50OiAoSGVsbXV0IFN0aWVnbGVyKQorICAgIGlmIChhKQorICAgIHsKKwkgICAgaWYgKGIpCisJICAgIHsKKwkJICAgIC8vIHsKKwkgICAgfQorCSAgICB9IDwtLSB0aGlzIGlzIGluZGVudGVkIGluY29ycmVjdAorOSAgIFdyb25nIGluZGVudCBmb3IgY2lubz0oNCwgcmVtb3ZpbmcgdGhlICh2b2lkKSBmaXhlcyBpdDogKFplbGxuZXIpCisJKHZvaWQpIE15RmFuY3lGdW5jdGlvbigKKwkJCSAgICAgICBhcmd1bWVudCk7CistICAgTWFrZSBzbWFydGluZGVudGluZyBjb25maWd1cmFibGUuIEFkZCAnc2lvcHRpb25zJywgZS5nLiAnIycgc2V0dGluZyB0aGUKKyAgICBpbmRlbnQgdG8gMCBzaG91bGQgYmUgc3dpdGNoZWQgb24vb2ZmLgorNyAgIFN1cHBvcnQgQU5TSSBzdHlsZSBmdW5jdGlvbiBoZWFkZXIsIHdpdGggZWFjaCBhcmd1bWVudCBvbiBpdHMgb3duIGxpbmUuCistICAgIltwIiBhbmQgIl1wIiBzaG91bGQgdXNlICdjaW5kZW50JyBjb2RlIGlmIGl0J3Mgb24gKG9ubHkgZm9yIHRoZSBmaXJzdAorICAgIGxpbmUpLgorLSAgIEFkZCBvcHRpb24gdG8gJ2NpbmRlbnQnIHRvIHNldCBpbmRlbnQgZm9yIGNvbW1lbnRzIG91dHNpZGUgb2Yge30/CistICAgTWFrZSBhIGNvbW1hbmQgdG8gbGluZSB1cCBhIGNvbW1lbnQgYWZ0ZXIgYSBjb2RlIGxpbmUgd2l0aCBhIHByZXZpb3VzCisgICAgY29tbWVudCBhZnRlciBhIGNvZGUgbGluZS4JQ2FuICdjaW5kZW50JyBkbyB0aGlzIGF1dG9tYXRpY2FsbHk/Cis3ICAgQWRkICdqJyBmbGFnIHRvICdmb3JtYXRvcHRpb25zJzogUmVtb3ZlIGNvbW1lbnQgbGVhZGVyIHdoZW4gam9pbmluZyBsaW5lcy4KKy0gICBXaGVuICdjaW5kZW50J2luZyBhICd9Jywgc2hvd21hdGNoIGlzIGRvbmUgYmVmb3JlIGZpeGluZyB0aGUgaW5kZW50LiAgSXQKKyAgICBsb29rcyBiZXR0ZXIgd2hlbiB0aGUgaW5kZW50IGlzIGZpeGVkIGJlZm9yZSB0aGUgc2hvd21hdGNoLiAoV2ViYikKKy0gICBBZGQgb3B0aW9uIHRvIG1ha2UgaW5kZW50aW5nIHdvcmsgaW4gY29tbWVudHMgdG9vIChmb3IgY29tbWVudGVkLW91dAorICAgIGNvZGUpLCB1bmxlc3MgdGhlIGxpbmUgc3RhcnRzIHdpdGggIioiLgorLSAgIERvbid0IHVzZSAnY2luZGVudCcgd2hlbiBkb2luZyBmb3JtYXR0aW5nIHdpdGggImdxIj8KKy0gICBXaGVuIGZvcm1hdHRpbmcgYSBjb21tZW50IGFmdGVyIHNvbWUgdGV4dCwgaW5zZXJ0IHRoZSAnKicgZm9yIHRoZSBuZXcgbGluZQorICAgIChpbmRlbnQgaXMgY29ycmVjdCBpZiAnY2luZGVudCcgaXMgc2V0LCBidXQgJyonIGRvZXNuJ3QgZ2V0IGluc2VydGVkKS4KKzggICBXaGVuICdjb21tZW50cycgaGFzIGJvdGggInMxOi8qLG1iOiosZXg6Ki8iIGFuZCAiczE6KCosbWI6KixleDoqKSIsIHRoZQorICAgICd4JyBmbGFnIGFsd2F5cyB1c2VzIHRoZSBmaXJzdCBtYXRjaC4gIE5lZWQgdG8gY29udGludWUgbG9va2luZyBmb3IgbW9yZQorICAgIG1hdGNoZXMgb2YgIioiIGFuZCByZW1lbWJlciBhbGwgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGVuZCB0aGUgY29tbWVudC4KKy0gICBGb3Igc21hcnRpbmRlbnQ6IFdoZW4gdHlwaW5nICdlbHNlJyBsaW5lIGl0IHVwIHdpdGggbWF0Y2hpbmcgJ2lmJy4KKy0gICAnc21hcnRpbmRlbnQnOiBhbGxvdyBwYXR0ZXJucyBpbiAnY2lud29yZHMnLCBmb3IgZS5nLiBUZVggZmlsZXMsIHdoZXJlCisgICAgbGluZXMgc3RhcnQgd2l0aCAiXGl0ZW0iLgorLSAgIFN1cHBvcnQgdGhpcyBzdHlsZSBvZiBjb21tZW50cyAod2l0aCBhbiBvcHRpb24pOiAoQnJvd24pCisJLyogaGVyZSBpcyBhIGNvbW1lbnQgdGhhdAorCWlzIGp1c3QgYXV0b2luZGVudGVkLCBhbmQKKwlub3RoaW5nIGVsc2UgKi8KKy0gICBBZGQgd29yZHMgdG8gJ2NpbndvcmRzJyB0byByZWR1Y2UgdGhlIGluZGVudCwgZS5nLiwgImVuZCIgb3IgImZpIi4KKzcgICBVc2UgVGFicyBmb3IgdGhlIGluZGVudCBvZiBzdGFydGluZyBsaW5lcywgcGFkIHdpdGggc3BhY2VzIGZvcgorICAgIGNvbnRpbnVhdGlvbiBsaW5lcy4gIEFsbG93cyBjaGFuZ2luZyAndGFic3RvcCcgd2l0aG91dCBtZXNzaW5nIHVwIHRoZQorICAgIGluZGVudHMuCisgICAgQW5kL29yOiBBZGQgb3B0aW9uIHRvIGNvcHkgaW5kZW50IGFzLWlzLCB3aXRob3V0IGNoYW5naW5nIHNwYWNlcyB0byB0YWJzLgorICAgIGFsc28gZm9yICdhdXRvaW5kZW50Jy4gICdrZWVwdGFicyc6IHdoZW4gc2V0IGRvbid0IGNoYW5nZSB0aGUgdGFicyBhbmQKKyAgICBzcGFjZXMgdXNlZCBmb3IgaW5kZW50LCB3aGVuIHRoZSBpbmRlbnQgcmVtYWlucyB0aGUgc2FtZSBvciBpbmNyZWFzZXMuCisKKworSmF2YToKKzggICBDYW4gaGF2ZSB7fSBjb25zdHJ1Y3RzIGluc2lkZSBwYXJlbnMuICBJbmNsdWRlIGNoYW5nZXMgZnJvbSBTdGV2ZQorICAgIE9kZW5kYWhsPworOCAgIFJlY29nbml6ZSAiaW1wb3J0IGphdmEudXRpbC5WZWN0b3IiIGFuZCB1c2UgJENMQVNTUEFUSCB0byBmaW5kIGZpbGVzIGZvcgorICAgICJbaSIgY29tbWFuZHMgYW5kIGZyaWVuZHMuCistICAgRm9yIGZpbGVzIGZvdW5kIHdpdGggJ2luY2x1ZGUnOiBoYW5kbGUgIioiIGluIGluY2x1ZGVkIG5hbWUsIGZvciBKYXZhLgorICAgIChKYXNvbikKKy0gICBIb3cgdG8gbWFrZSBhICJwYWNrYWdlIGphdmEudXRpbCIgY2F1c2UgYWxsIGNsYXNzZXMgaW4gdGhlIHBhY2thZ2UgdG8gYmUKKyAgICBzZWFyY2hlZD8gIEFsc28gZm9yICJpbXBvcnQgamF2YS51dGlsLioiLiAoTWFyayBCcm9waHkpCisKKworJ2NvbW1lbnRzJzoKKzggICBXaGVuIGZvcm1hdHRpbmcgQyBjb21tZW50cyB0aGF0IGFyZSBhZnRlciBjb2RlLCB0aGUgIioiIGlzbid0IHJlcGVhdGVkCisgICAgbGlrZSBpdCdzIGRvbmUgd2hlbiB0aGVyZSBpcyBubyBjb2RlLiAgQW5kIHRoZXJlIGlzIG5vIGF1dG9tYXRpYyB3cmFwcGluZy4KKyAgICBSZWNvZ25pemUgY29tbWVudHMgdGhhdCBjb21lIGFmdGVyIGNvZGUuICBTaG91bGQgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlcgorICAgIHdoZW4gaXQncyAiIyIgb3IgIi8vIi4KKzcgICBXaGVuIHVzaW5nICJjb21tZW50cz1mZzotLSIsIFZpbSBpbnNlcnRzIHRocmVlIHNwYWNlcyBmb3IgYSBuZXcgbGluZS4KKyAgICBXaGVuIGhpdHRpbmcgYSBUQUIsIHRoZXNlIHNwYWNlcyBjb3VsZCBiZSByZW1vdmVkLgorNyAgIFRoZSAnbidlc3RpbmcgZmxhZyBkb2Vzbid0IGRvIHRoZSBpbmRlbnRpbmcgb2YgdGhlIGxhc3QgKHJpZ2h0bW9zdCkgaXRlbS4KKzYgICBNYWtlIHN0cmluZ3MgaW4gJ2NvbW1lbnRzJyBvcHRpb24gYSBSRSwgdG8gYmUgYWJsZSB0byBtYXRjaCBtb3JlCisgICAgY29tcGxpY2F0ZWQgdGhpbmdzLiAoUGhpbGxpcHBzKSAgVXNlIGEgc3BlY2lhbCBmbGFnIHRvIGluZGljYXRlIHRoYXQgYQorICAgIHJlZ2V4cCBpcyB1c2VkLgorOCAgIE1ha2UgdGhlICdjb21tZW50cycgb3B0aW9uIHdpdGggIi8qICogKi8iIGxpbmVzIG9ubHkgcmVwZWF0IHRoZSAiKiIgbGluZQorICAgIHdoZW4gdGhlcmUgaXMgYSAiLyoiIGJlZm9yZSBpdD8gIE9yIGluY2x1ZGUgdGhpcyBpbiAnY2luZGVudCc/CisKKworVmlydHVhbCBlZGl0OgorOCAgIE1ha2UgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIHdvcmsgdG8gbW92ZSB0aGUgdGV4dCBmdXJ0aGVyIGxlZnQuCis3ICAgQWRkIGEgbW9kZSB3aGVyZSB0aGUgY3Vyc29yIGlzIG9ubHkgYWxsb3dlZCB0byBnbyBvbmUgY2hhcmFjdGVyIGFmdGVyIHRoZQorICAgIGVuZCBvZiB0aGUgbGluZT8KKzcgICBBbGxvdyBzcGVjaWZ5aW5nIGl0IHNlcGFyYXRlbHkgZm9yIFRhYnMgYW5kIGJleW9uZCBlbmQtb2YtbGluZT8KKworCitUZXh0IG9iamVjdHM6Cis4ICAgQWRkIHRlc3Qgc2NyaXB0IGZvciB0ZXh0IG9iamVjdCBjb21tYW5kcyAiYXciLCAiaVciLCBldGMuCis3ICAgQWRkIHRleHQgb2JqZWN0IGZvciBjdXJyZW50IHNlYXJjaCBwYXR0ZXJuOiAiYS8iIGFuZCAiaS8iLiAgTWFrZXMgaXQKKyAgICBwb3NzaWJsZSB0byB0dXJuIHRleHQgaGlnaGxpZ2h0ZWQgZm9yICdobHNlYXJjaCcgaW50byBhIFZpc3VhbCBhcmVhLgorOCAgIEFkZCAiZ3AiIGFuZCAiZ1AiIGNvbW1hbmRzOiBpbnNlcnQgdGV4dCBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzIGEgc2luZ2xlCisgICAgc3BhY2UgYmVmb3JlIGl0LCB1bmxlc3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCBhbmQgYWZ0ZXIgaXQsIHVubGVzcyBhdAorICAgIHRoZSBlbmQgb2YgdGhlIGxpbmUgb3IgYmVmb3JlIGEgIi4iLgorNyAgIEFkZCBvYmplY3RzIHdpdGggYmFja3dhcmRzIGV4dGVuc2lvbj8gIFVzZSAiSSIgYW5kICJBIi4gIFRodXMgIjJkQXMiCisgICAgZGVsZXRlcyB0aGUgY3VycmVudCBhbmQgcHJldmlvdXMgc2VudGVuY2UuIChKZW5zIFBhdWx1cykKKzcgICBBZGQgImd7IiBhbmQgImd9IiB0byBtb3ZlIHRvIHRoZSBmaXJzdC9sYXN0IGNoYXJhY3RlciBvZiBhIHBhcmFncmFwaAorICAgIChpbnN0ZWFkIG9mIHRoZSBsaW5lIGp1c3QgYmVmb3JlL2FmdGVyIGEgcGFyYWdyYXBoIGFzIHdpdGggInsiIGFuZCAifSIpLgorOCAgIEFkZCAiYSciIGFuZCAnYSInOiBhIHNpbmdsZSBvciBkb3VibGUgcXVvdGVkIHN0cmluZy4gKFRpbSBDaGFzZSkKKyAgICBQYXRjaCBmcm9tIFRhcm8gTXVyYW9rYSAoMjAwMyBEZWMgMTYpLgorNiAgIElnbm9yZSBjb21tZW50IGxlYWRlcnMgZm9yIG9iamVjdHMuICBNYWtlICJkYXMiIHdvcmsgaW4gcmVwbHktZW1haWwuCis1ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1c2Ugc3ludGF4IGdyb3VwIG1hdGNoZXMgYXMgYSB0ZXh0IG9iamVjdC4gIEZvcgorICAgIGV4YW1wbGUsIGRlZmluZSBhICJjY0l0ZW0iIGdyb3VwLCB0aGVuIGRvICJkYTxjY0l0ZW0+IiB0byBkZWxldGUgb25lLgorICAgIE9yLCBtYXliZSBqdXN0IGRlZmluZSAiZGFpIiwgZGVsZXRlLWFuLWl0ZW0sIHRvIGRlbGV0ZSB0aGUgc3ludGF4IGl0ZW0gdGhlCisgICAgY3Vyc29yIGlzIG9uLgorCisKK1NlbGVjdCBtb2RlOgorOCAgIEluIGJsb2Nrd2lzZSBtb2RlLCB0eXBlZCBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgYmxvY2ssCisgICAgYmFja3NwYWNlIGRlbGV0ZXMgYSBjb2x1bW4gYmVmb3JlIHRoZSBibG9jay4gKFN0ZXZlIEhhbGwpCis3ICAgQWx0LWxlZnRtb3VzZSBzdGFydHMgYmxvY2sgbW9kZSBzZWxlY3Rpb24gaW4gTVMgV29yZC4KKyAgICBTZWUgaHR0cDovL3d3dy52aW0ub3JnL3RpcHMvdGlwLnBocD90aXBfaWQ9NzQzCis3ICAgQWRkIENtZGxpbmUtc2VsZWN0IG1vZGUuICBMaWtlIFNlbGVjdCBtb2RlLCBidXQgdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorICAgIC0gQ2hhbmdlIGd1aV9zZW5kX21vdXNlX2V2ZW50KCkgdG8gcGFzcyBvbiBtb3VzZSBldmVudHMgd2hlbiAnbW91c2UnCisgICAgICBjb250YWlucyAnQycgb3IgJ0EnLgorICAgIC0gQ2F0Y2ggbW91c2UgZXZlbnRzIGluIGV4X2dldGxuLmMuICBBbHNvIHNoaWZ0LWN1cnNvciwgZXRjLiwgbGlrZSBpbgorICAgICAgbm9ybWFsX2NtZCgpLgorICAgIC0gcmVtZW1iZXIgc3RhcnQgYW5kIGVuZCBvZiBzZWxlY3Rpb24gaW4gY21kbGluZV9pbmZvLgorICAgIC0gVHlwaW5nIHRleHQgcmVwbGFjZXMgdGhlIHNlbGVjdGlvbi4KKworCitWaXN1YWwgbW9kZToKKy0gICBXaGVuIGRyYWdnaW5nIHRoZSBWaXN1YWwgc2VsZWN0aW9uIHdpdGggdGhlIG1vdXNlIGFuZCAnc2Nyb2xsb2ZmJyBpcyB6ZXJvLAorICAgIGJlaGF2ZSBsaWtlICdzY3JvbGxvZmYnIGlzIG9uZSwgc28gdGhhdCB0aGUgdGV4dCBzY3JvbGxzIHdoZW4gdGhlIHBvaW50ZXIKKyAgICBpcyBpbiB0aGUgdG9wIGxpbmUuCis4ICAgV2hlbiB1c2luZyAiSSIgb3IgIkEiIGluIFZpc3VhbCBibG9jayBtb2RlLCBzaG9ydCBsaW5lcyBkbyBub3QgZ2V0IHRoZSBuZXcKKyAgICB0ZXh0LiAgbWFrZSBpdCBwb3NzaWJsZSB0byBhZGQgdGhlIHRleHQgdG8gc2hvcnQgbGluZXMgdG9vLCB3aXRoIHBhZGRpbmcKKyAgICB3aGVyZSBuZWVkZWQuCis3ICAgV2l0aCBhIFZpc3VhbCBibG9jayBzZWxlY3RlZCwgIjJ4IiBkZWxldGVzIGEgYmxvY2sgb2YgZG91YmxlIHRoZSB3aWR0aCwKKyAgICAiM3kiIHlhbmtzIGEgYmxvY2sgb2YgdHJpcGxlIHdpZHRoLCBldGMuCis3ICAgV2hlbiBzZWxlY3RpbmcgbGluZXdpc2UsIHVzaW5nICJpdGV4dCIgc2hvdWxkIGluc2VydCAidGV4dCIgYXQgdGhlIHN0YXJ0CisgICAgb2YgZWFjaCBzZWxlY3RlZCBsaW5lLgorOCAgIFdoYXQgaXMgIlIiIHN1cHBvc2VkIHRvIGRvIGluIFZpc3VhbCBtb2RlPworOCAgIE1ha2UgVmlzdWFsIG1vZGUgbG9jYWwgdG8gdGhlIGJ1ZmZlci4gIEFsbG93IGNoYW5naW5nIHRvIGFub3RoZXIgYnVmZmVyLgorICAgIFdoZW4gc3RhcnRpbmcgYSBuZXcgVmlzdWFsIHNlbGVjdGlvbiwgcmVtb3ZlIHRoZSBWaXN1YWwgc2VsZWN0aW9uIGluIGFueQorICAgIG90aGVyIGJ1ZmZlci4gKFJvbiBBYXJvbikKKzggICBTdXBwb3J0IGRyYWdnaW5nIHRoZSBWaXN1YWwgYXJlYSB0byBkcm9wIGl0IHNvbWV3aGVyZSBlbHNlLiAoUm9uIEFhcm9uLAorICAgIEJlbiBHb2RmcmV5KQorNyAgIFN1cHBvcnQgZHJhZ2dpbmcgdGhlIFZpc3VhbCBhcmVhIHRvIGRyb3AgaXQgaW4gYW5vdGhlciBwcm9ncmFtLCBhbmQKKyAgICByZWNlaXZlIGRyb3BwZWQgdGV4dCBmcm9tIGFub3RoZXIgcHJvZ3JhbS4gKEJlbiBHb2RmcmV5KQorNyAgIFdpdGggYmxvY2t3aXNlIFZpc3VhbCBtb2RlIGFuZCAiYyIsICJDIiwgIkkiLCAiQSIsIGV0Yy4sIGFsbG93IHRoZSB1c2Ugb2YKKyAgICBhIDxDUj4uICBUaGUgZW50ZXJlZCBsaW5lcyBhcmUgcmVwZWF0ZWQgb3ZlciB0aGUgVmlzdWFsIGFyZWEuCis3ICAgQ1RSTC1WIDpzIHNob3VsZCBzdWJzdGl0dXRlIG9ubHkgaW4gdGhlIGJsb2NrLCBub3QgdG8gd2hvbGUgbGluZXMuIChEYXZpZAorICAgIFlvdW5nIGlzIHdvcmtpbmcgb24gdGhpcykKKzcgICBGaWx0ZXJpbmcgYSBibG9jayBzaG91bGQgb25seSBhcHBseSB0byB0aGUgYmxvY2ssIG5vdCB0byB0aGUgd2hvbGUgbGluZXMuCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGlzIGluY3JlYXNlZCwgYWRkIGxpbmVzLiBXaGVuIGRlY3JlYXNlZCwgcGFkZCB3aXRoCisgICAgc3BhY2VzIG9yIGRlbGV0ZT8gVXNlICI6YDwsYD4iIG9uIHRoZSBjb21tYW5kIGxpbmUuCis4ICAgQWZ0ZXIgZmlsdGVyaW5nIHRoZSBWaXN1YWwgYXJlYSwgbWFrZSAiZ3YiIHNlbGVjdCB0aGUgZmlsdGVyZWQgdGV4dD8KKyAgICBDdXJyZW50bHkgImd2IiBvbmx5IHNlbGVjdHMgYSBzaW5nbGUgbGluZSwgbm90IHVzZWZ1bC4KKzcgICBEb24ndCBtb3ZlIHRoZSBjdXJzb3Igd2hlbiBzY3JvbGxpbmc/ICBOZWVkZWQgd2hlbiB0aGUgc2VsZWN0aW9uIHNob3VsZAorICAgIHN0YXkgdGhlIHNhbWUuICBTY3JvbGwgdG8gdGhlIGN1cnNvciBhdCBhbnkgbW92ZW1lbnQgY29tbWFuZC4gIFdpdGggYW4KKyAgICBvcHRpb24hCis3ICAgSW4gVmlzdWFsIGJsb2NrIG1vZGUsIG5lZWQgdG8gYmUgYWJsZSB0byBkZWZpbmUgYSBjb3JuZXIgb24gYSBwb3NpdGlvbgorICAgIHRoYXQgZG9lc24ndCBoYXZlIHRleHQ/ICBBbHNvOiB3aGVuIHVzaW5nIHRoZSBtb3VzZSwgYmUgYWJsZSB0byBzZWxlY3QKKyAgICBwYXJ0IG9mIGEgVEFCLiAgRXZlbiBtb3JlOiBBZGQgYSBtb2RlIHdoZXJlIHRoZSBjdXJzb3IgY2FuIGJlIG9uIGEgc2NyZWVuCisgICAgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgbm8gdGV4dC4gIFdoZW4gdHlwaW5nLCBhZGQgc3BhY2VzIHRvIGZpbGwgdGhlIGdhcC4KKyAgICBPdGhlciBzb2x1dGlvbjogQWx3YXlzIHVzZSBjdXJzd2FudCwgc28gdGhhdCB5b3UgY2FuIG1vdmUgdGhlIGN1cnNvciB0bworICAgIHRoZSByaWdodCBjb2x1bW4sIGFuZCB0aGVuIHVzZSB1cC9kb3duIG1vdmVtZW50cyB0byBzZWxlY3QgdGhlIGxpbmUsCisgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgY29sdW1uLgorNiAgICI6bGVmdCIgYW5kICI6cmlnaHQiIHNob3VsZCB3b3JrIGluIFZpc3VhbCBibG9jayBtb2RlLgorNyAgIEZvciBWaXN1YWwgbW9kZTogQ29tbWFuZCB0byBkbyBhIHNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgbWFya2VkIGFyZWEuCisgICAgT25seSB3aGVuIGZld2VyIHRoYW4gdHdvIGxpbmVzLiBVc2UgImcvIiBhbmQgImdiIi4gIFBhdGNoIGZyb20gWWVnYXBwYW4KKyAgICBMYWtzaG1hbmFuLgorNyAgIENUUkwtSSBhbmQgQ1RSTC1PIHNob3VsZCB3b3JrIGluIFZpc3VhbCBtb2RlLCBidXQgb25seSBqdW1wIHRvIG1hcmtzIGluIHRoZQorICAgIGN1cnJlbnQgYnVmZmVyLgorNyAgIENUUkwtQSBhbmQgQ1RSTC1YIHNob3VsZCBpbmNyZWFzZS9kZWNyZWFzZSBhbGwgbnVtYmVycyBpbiB0aGUgVmlzdWFsIGFyZWEuCis2ICAgSW4gbm9uLUJsb2NrIG1vZGUsICJJIiBzaG91bGQgaW5zZXJ0IHRoZSBzYW1lIHRleHQgaW4gZnJvbnQgb2YgZWFjaCBsaW5lLAorICAgIGJlZm9yZSB0aGUgZmlyc3Qgbm9uLWJsYW5rLCAiZ0kiIGluIGNvbHVtbiAxLgorNiAgIEluIG5vbi1CbG9jayBtb2RlLCAiQSIgc2hvdWxkIGFwcGVuZCB0aGUgc2FtZSB0ZXh0IGFmdGVyIGVhY2ggbGluZS4KKzYgICAiOic8LCc+c291cmNlIiBzaG91bGQgcmVhZCB0aGUgc2VsZWN0ZWQgbGluZXMgYW5kICI6c291cmNlIiB0aGVtLgorNiAgIFdoZW4gaW4gYmxvY2t3aXNlIHZpc3VhbCBzZWxlY3Rpb24gKENUUkwtViksIGFsbG93IGN1cnNvciB0byBiZSBwbGFjZWQKKyAgICByaWdodCBvZiB0aGUgbGluZS4gQ291bGQgYWxzbyBhbGxvdyBjdXJzb3IgdG8gYmUgcGxhY2VkIGFueXdoZXJlIG9uIGEgVEFCCisgICAgb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXIuCis2ICAgQWRkIGNvbW1hbmRzIHRvIG1vdmUgc2VsZWN0ZWQgdGV4dCwgd2l0aG91dCBkZXNlbGVjdGluZy4KKworCitNb3JlIGFkdmFuY2VkIHJlcGVhdGluZyBjb21tYW5kczoKKy0gICBBZGQgIi4iIGNvbW1hbmQgZm9yIHZpc3VhbCBtb2RlOiByZWRvIGxhc3QgdmlzdWFsIGNvbW1hbmQgKGUuZy4gIjpmbXQiKS4KKzcgICBSZXBlYXRpbmcgImQ6e2NtZH0iIHdpdGggIi4iIGRvZXNuJ3Qgd29yay4gKEJlbmppIEZpc2hlcikgU29tZWhvdyByZW1lbWJlcgorICAgIHRoZSBjb21tYW5kIGxpbmUgc28gdGhhdCBpdCBjYW4gYmUgcmVwZWF0ZWQ/CistICAgQWRkICIuIiBjb21tYW5kIGFmdGVyIG9wZXJhdG9yOiByZXBlYXQgbGFzdCBjb21tYW5kIG9mIHNhbWUgb3BlcmF0b3IuIEUuZy4KKyAgICAiYy4iIHdpbGwgcmVwZWF0IGxhc3QgY2hhbmdlLCBhbHNvIHdoZW4gIngiIHVzZWQgc2luY2UgdGhlbiAoV2ViYikuCisgICAgInkuIiB3aWxsIHJlcGVhdCBsYXN0IHlhbmsuCisgICAgImMyLiIgd2lsbCByZXBlYXQgdGhlIGxhc3QgYnV0IG9uZSBjaGFuZ2U/CisgICAgQWxzbzoga2VlcCBoaXN0b3J5IG9mIE5vcm1hbCBtb2RlIGNvbW1hbmRzLCBhZGQgY29tbWFuZCB0byBsaXN0IHRoZSBoaXN0b3J5CisgICAgYW5kL29yIHBpY2sgYW4gb2xkZXIgY29tbWFuZC4KKy0gICBIaXN0b3J5IHN0YWNrIGZvciAuIGNvbW1hbmQ/ICBVc2UgImcuIiBjb21tYW5kLgorCisKK01hcHBpbmdzIGFuZCBBYmJyZXZpYXRpb25zOgorOCAgIExldCAiOnZlcmJvc2UgbWFwIHh4IiByZXBvcnQgd2hlcmUgdGhlIG1hcHBpbmcgd2FzIHNldCwganVzdCBsaWtlIHdpdGgKKyAgICAiOnZlcmJvc2Ugc2V0Ii4KKzggICBXaGVuICIwIiBpcyBtYXBwZWQgKGl0IGlzIGEgbW92ZW1lbnQgY29tbWFuZCkgdGhpcyBtYXBwaW5nIHNob3VsZCBub3QgYmUKKyAgICB1c2VkIGFmdGVyIHR5cGluZyBhbm90aGVyIG51bWJlciwgZS5nLiAiMjBsIi4gKENoYXJsZXMgQ2FtcGJlbGwpCisgICAgSXMgdGhpcyBwb3NzaWJsZSB3aXRob3V0IGRpc2FibGluZyB0aGUgbWFwcGluZyBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmQ/Cis4ICAgU2hvdWxkIG1hcHBpbmcgPEMtQT4gYW5kIDxDLVMtQT4gYm90aCB3b3JrPworNyAgICI6YWJiciBiIGJ5dGUiLCBhcHBlbmQgImIgIiB0byBhbiBleGlzdGluZyB3b3JkIHN0aWxsIGV4cGFuZHMgdG8gImJ5dGUiLgorICAgIFRoaXMgaXMgVmkgY29tcGF0aWJsZSwgYnV0IGNhbiB3ZSBhdm9pZCBpdCBhbnl3YXk/Cis4ICAgIjp2ZXJib3NlIG1hcCIgY291bGQgc2hvdyB0aGUgc2NyaXB0IHdoZXJlIHRoZSBtYXBwaW5nIHdhcyBkZWZpbmVkLgorICAgIG1fc2NyaXB0X0lEIGNhbiBiZSB1c2VkLgorOCAgIFRvIG1ha2UgYSBtYXBwaW5nIHdvcmsgd2l0aCBhIHByZXBlbmRlZCAieCB0byBzZWxlY3QgYSByZWdpc3Rlciwgc3RvcmUgdGhlCisgICAgbGFzdCBfdHlwZWRfIHJlZ2lzdGVyIG5hbWUgYW5kIGFjY2VzcyBpdCB3aXRoICImLgorOCAgIEFkZCAiOmFtYXAiLCBsaWtlICI6YW1lbnUiLgorOCAgIEFkZCAiOmNhYiEiLCBhYmJyZXZpYXRpb25zIHRoYXQgb25seSBhcHBseSB0byBDb21tYW5kLWxpbmUgbW9kZSBhbmQgbm90IHRvCisgICAgZW50ZXJpbmcgc2VhcmNoIHN0cmluZ3MuCis4ICAgQWRkIGEgZmxhZyB0byAiOmFiYnJldiIgdG8gZWF0IHRoZSBjaGFyYWN0ZXIgdGhhdCB0cmlnZ2VycyB0aGUKKyAgICBhYmJyZXZpYXRpb24uICBUaHVzICJhYmIgYWIgeHh4IiBhbmQgdHlwaW5nICJhYjxTcGFjZT4iIGluc2VydHMgInh4eCIgYW5kCisgICAgbm90IHRoZSA8U3BhY2U+LgorOCAgIEFsbG93IG1hcHBpbmcgb2YgQ1RSTC1AIChhbnl3aGVyZSBpbiB0aGUgTEhTKS4KKzggICBHaXZlIGEgd2FybmluZyB3aGVuIHVzaW5nIENUUkwtQyBpbiB0aGUgbGhzIG9mIGEgbWFwcGluZy4gIEl0IHdpbGwgbmV2ZXIKKyAgICAoPykgd29yay4KKzcgICAiOnZlcmJvc2UgbWFwIiBzaG91bGQgZGlzcGxheSB3aGVyZSBhIG1hcHBpbmcgd2FzIGRlZmluZWQsIGxpa2UgIjp2ZXJib3NlCisgICAgc2V0Ii4KKzggICBBZGQgYSB3YXkgdG8gc2F2ZSBhIGN1cnJlbnQgbWFwcGluZyBhbmQgcmVzdG9yZSBpdCBsYXRlci4gIFVzZSBhIGZ1bmN0aW9uCisgICAgdGhhdCByZXR1cm5zIHRoZSBtYXBwaW5nIGNvbW1hbmQgdG8gcmVzdG9yZSBpdDogbWFwY21kKCk/ICBtYXBjaGVjaygpIGlzCisgICAgbm90IGZvb2wgcHJvb2YuICBIb3cgdG8gaGFuZGxlIGFtYmlndW91cyBtYXBwaW5ncz8KKzcgICBBZGQgPDB4OGY+IChoZXgpLCA8MDMzPiAob2N0YWwpIGFuZCA8MTIzPiAoZGVjaW1hbCkgdG8gPD4gbm90YXRpb24/Cis3ICAgQWxsb3cgbWFwcGluZyAiUSIgYW5kICJRfSIgYXQgdGhlIHNhbWUgdGltZS4gIE5lZWQgdG8gcHV0IGEgZmxhZyB3aXRoICJRIiwKKyAgICB0aGF0IGl0IG5lZWRzIGFuIGV4dHJhIGNoYXJhY3RlciBiZWZvcmUgaXQgY2FuIG1hdGNoLiBTZWUgVmlsZSAnbWFwbG9uZ2VyJworICAgIG9wdGlvbi4KKzcgICBXaGVuIHNvbWVvbmUgdHJpZXMgdG8gdW5tYXAgd2l0aCBhIHRyYWlsaW5nIHNwYWNlLCBhbmQgaXQgZmFpbHMsIHRyeQorICAgIHVubWFwcGluZyB3aXRob3V0IHRoZSB0cmFpbGluZyBzcGFjZS4gIEhlbHBzIGZvciAiOnVubWFwIHh4IHwgdW5tYXAgeXkiLgorNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gbWFwICd3aWxkY2hhcicsIGJ1dCBvbmx5IHdoZW4gaXQncyBhIHNwZWNpYWwgY2hhcmFjdGVyCisgICAgKGxpa2UgQ1RSTC1FKS4gIEN1cnJlbnRseSBpdCdzIG9ubHkgcmVjb2duaXplZCB3aGVuIHR5cGVkLiAgVXNlZnVsIGZvcgorICAgIG1hcHBpbmcgYSBrZXkgdG8gZG8gc29tZXRoaW5nIGFuZCB0aGVuIGNvbXBsZXRpb24uCis3ICAgQWRkIGEgbWFwcGluZyB0aGF0IHdvcmtzIGFsd2F5cywgZm9yIHJlbWFwcGluZyB0aGUga2V5Ym9hcmQuCis2ICAgQ29udGV4dC1zZW5zaXRpdmUgYWJicmV2aWF0aW9uczogU3BlY2lmeSBzeW50YXggZ3JvdXAocykgaW4gd2hpY2ggdGhlCisgICAgYWJicmV2aWF0aW9ucyBhcmUgdG8gYmUgdXNlZC4KKy0gICBBZGQgbWFwcGluZ3MgdGhhdCB0YWtlIGFyZ3VtZW50cy4gIENvdWxkIHdvcmsgbGlrZSB0aGUgIjpzIiBjb21tYW5kLiAgRm9yCisgICAgZXhhbXBsZSwgZm9yIGEgbW91c2UgZXNjYXBlIHNlcXVlbmNlOgorCTptYXBleHAgIDxFc2M+e1woWzAtOV0qXCksXChbMC05XSpcKTsJSFwxalwybAorLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gaW5jbHVkZSBhIDxOdWw+IGluIHRoZSBsaHMgYW5kIHJocyBvZiBhIG1hcHBpbmcuCistICAgQWRkIGNvbW1hbmQgdG8gcmVwZWF0IGEgd2hvbGUgbWFwcGluZyAoIi4iIG9ubHkgcmVwZWF0cyB0aGUgbGFzdCBjaGFuZ2UgaW4KKyAgICBhIG1hcHBpbmcpLiAgQWxzbzogUmVwZWF0IGEgd2hvbGUgaW5zZXJ0IGNvbW1hbmQsIGluY2x1ZGluZyBhbnkgbWFwcGluZ3MKKyAgICB0aGF0IGl0IGluY2x1ZGVkLiAgU29ydC1vZiBhdXRvbWF0aWMgcmVjb3JkaW5nPworLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gdW5kbyBhbGwgdGhlIGNvbW1hbmRzIGZyb20gYSBtYXBwaW5nLCBpbmNsdWRpbmcgYQorICAgIHRyYWlsaW5nIHVuZmluaXNoZWQgY29tbWFuZCwgZS5nLiBmb3IgIjptYXAgSyBpWF5bciIuCistICAgQWRkIGFuIG9wdGlvbiB0byAiOm1hcCIgdGhhdCBtYWtlcyBpdCBkaXNwbGF5IHRoZSBzcGVjaWFsIGtleXMgaW4KKyAgICA8PiBub3RhdGlvbiAoZS5nLiA8Q1I+IGluc3RlYWQgb2YgXk0pLiAgT3IganVzdCBhbHdheXMgZG8gdGhpcz8KKy0gICBJbmNsdWRlIGFuIG9wdGlvbiAob3IgZmxhZyB0byAnY3BvcHRpb25zJykgdGhhdCBtYWtlcyBlcnJvcnMgaW4gbWFwcGluZ3MKKyAgICBub3QgZmx1c2ggdGhlIHJlc3Qgb2YgdGhlIG1hcHBpbmcgKGxpa2UgbnZpIGRvZXMpLgorLSAgIFVzZSBjb250ZXh0IHNlbnNpdGl2ZW5lc3Mgb2YgY29tcGxldGlvbiB0byBzd2l0Y2ggYWJicmV2aWF0aW9ucyBhbmQKKyAgICBtYXBwaW5ncyBvZmYgZm9yIDp1bmFiIGFuZCA6dW5tYXAuCis2ICAgV2hlbiB1c2luZyBtYXBwaW5ncyBpbiBJbnNlcnQgbW9kZSwgaW5zZXJ0IGNoYXJhY3RlcnMgZm9yIGluY29tcGxldGUKKyAgICBtYXBwaW5ncyBmaXJzdCwgdGhlbiByZW1vdmUgdGhlbSBhZ2FpbiB3aGVuIGEgbWFwcGluZyBtYXRjaGVzLiAgQXZvaWRzCisgICAgdGhhdCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHRoZSBzdGFydCBvZiBzb21lIG1hcHBpbmcgYXJlIG5vdCBzaG93biB1bnRpbCB5b3UKKyAgICBoaXQgYW5vdGhlciBjaGFyYWN0ZXIuCistICAgQWRkIG9wdGlvbmFsIDxOdW1iZXI+IGFyZ3VtZW50IGZvciBtYXBwaW5nczoKKyAgICA6bWFwIDxOdW1iZXI+cQkgICAgIF5XXlc8TnVtYmVyPkcKKyAgICA6bWFwIDxOdW1iZXI+cTxOdW1iZXI+dCAgXldeVzxOdW1iZXIxLTE+RzxOdW1iZXIyPmwKKyAgICA6bWFwIHE8Q2hhcj4JICAgIDpzLzxDaGFyPi9cdVwwL2cKKyAgICBPciBpbXBsaWNpdDoKKyAgICA6bWFwIHEJCQk8UmVnaXN0ZXI+ZDxOdW1iZXI+JAorLSAgIEFkZCBtYXBwaW5ncyBmb3IgcmVwbGFjZSBtb2RlOiAiOnJtYXAiLiAgSG93IGRvIHdlIHRoZW4gZW50ZXIgbWFwcGluZ3MgZm9yCisgICAgbm9uLXJlcGxhY2UgSW5zZXJ0IG1vZGU/CistICAgQWRkIHNlcGFyYXRlIG1hcHBpbmdzIGZvciBWaXN1YWwtY2hhcmFjdGVyL2Jsb2NrL2xpbmUgbW9kZT8KKzYgICBBbGlhcyBmb3IgTm9ybWFsIG1vZGUgY29tbWFuZHMsIHdvcmtzIGxpa2UgOnN1YnN0aXR1dGU/ICBXb3VsZCBhbGxvdworICAgIG1hcHBpbmdzIHdpdGggYXJndW1lbnRzLgorLSAgIEFkZCAnbWFwc3RvcCcgY29tbWFuZCwgdG8gc3RvcCByZWN1cnNpdmUgbWFwcGluZ3MuCistICAgTGlzdCBtYXBwaW5ncyB0aGF0IGhhdmUgYSByYXcgZXNjYXBlIHNlcXVlbmNlIGJvdGggd2l0aCB0aGUgbmFtZSBvZiB0aGUga2V5CisgICAgZm9yIHRoYXQgZXNjYXBlIHNlcXVlbmNlIChpZiB0aGVyZSBpcyBvbmUpIGFuZCB0aGUgc2VxdWVuY2UgaXRzZWxmLgorLSAgIExpc3QgbWFwcGluZ3M6IE9uY2Ugd2l0aCBzcGVjaWFsIGtleXMgbGlzdGVkIGFzIDw+LCBvbmNlIHdpdGggbWV0YSBjaGFycyBhcworICAgIDxNLWE+LCBvbmNlIHdpdGggdGhlIGJ5dGUgdmFsdWVzIChvY3RhbD8pLiBTb3J0IG9mICJzcGVsbCBtYXBwaW5nIiBjb21tYW5kPworLSAgIFdoZW4gZW50ZXJpbmcgbWFwcGluZ3M6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gZW50ZXIgbWV0YSBrZXlzIGxpa2UgdGhleQorICAgIGFyZSBkaXNwbGF5ZWQsIHdpdGhpbiA8PjogPE0tYT4sIDx+QD4gb3IgPHxhPi4KKy0gICBBbGxvdyBtdWx0aXBsZSBhcmd1bWVudHMgdG8gOnVubWFwLgorLSAgIENvbW1hbmQgdG8gc2hvdyBrZXlzIHRoYXQgYXJlIG5vdCB1c2VkIGFuZCBhdmFpbGFibGUgZm9yIG1hcHBpbmcKKyAgICAiOmZyZWVrZXlzIi4KKy0gICBBbGxvdyBhbnkgY2hhcmFjdGVyIGV4Y2VwdCB3aGl0ZSBzcGFjZSBpbiBhYmJyZXZpYXRpb25zIGxocyAoUmllaG0pLgorCisKK0luY3NlYXJjaDoKKy0gICBBZGQgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIHNlYXJjaGVkIGZvciAnaW5jc2VhcmNoJz8KKy0gICBXaGVuIG5vIG1hdGNoIGlzIGZvdW5kIGFuZCB0aGUgdXNlciB0eXBlcyBtb3JlLCB0aGUgc2NyZWVuIGlzIHJlZHJhd24KKyAgICBhbnl3YXkuICBDb3VsZCBza2lwIHRoYXQuICBFc3AuIGlmIHRoZSBsaW5lIHdyYXBzIGFuZCB0aGUgdGV4dCBpcyBzY3JvbGxlZAorICAgIHVwIGV2ZXJ5IHRpbWUuCistICAgVGVtcG9yYXJpbHkgb3BlbiBmb2xkcyB0byBzaG93IHdoZXJlIHRoZSBzZWFyY2ggZW5kcyB1cC4gIFJlc3RvcmUgdGhlCisgICAgZm9sZHMgd2hlbiBnb2luZyB0byBhbm90aGVyIGxpbmUuCistICAgV2hlbiBpbmNzZWFyY2ggdXNlZCBhbmQgaGl0dGluZyByZXR1cm4sIG5vIG5lZWQgdG8gc2VhcmNoIGFnYWluIGluIG1hbnkKKyAgICBjYXNlcywgc2F2ZXMgYSBsb3Qgb2YgdGltZSBpbiBiaWcgZmlsZXMuIChTbG9vdG1hbiB3YW50cyB0byB3b3JrIG9uIHRoaXM/KQorICAgIFdoZW4gbm90IHVzaW5nIHNwZWNpYWwgY2hhcmFjdGVycywgY2FuIGNvbnRpbnVlIHNlYXJjaCBmcm9tIHRoZSBsYXN0IG1hdGNoCisgICAgKG9yIG5vdCBhdCBhbGwsIHdoZW4gdGhlcmUgd2FzIG5vIG1hdGNoKS4gIFNlZSBvbGRtYWlsL3dlYmIvaW4uODcyLgorLSAgIFdpdGggaW5jc2VhcmNoLCB1c2UgQ1RSTC1OL0NUUkwtUCB0byBnbyB0byBuZXh0L3ByZXZpb3VzIG1hdGNoLCBzb21lIG90aGVyCisgICAga2V5IHRvIGNvcHkgbWF0Y2hlZCB3b3JkIHRvIHNlYXJjaCBwYXR0ZXJuIChBbGV4YW5kZXIgU2NobWlkKS4KKworCitTZWFyY2hpbmc6Cis4ICAgQWRkIGEgbWVjaGFuaXNtIGZvciByZWN1cnNpdmVuZXNzOiAiXCgoW14oKV0qXEBAW14oKV0qKVwpXEByIi4gIFxAQCBzdGFuZHMKKyAgICBmb3IgImdvIHJlY3Vyc2l2ZSBoZXJlIiBhbmQgXEByIG1hcmtzIHRoZSByZWN1cnNpdmUgYXRvbS4KK2l0ZW0gc3RhY2sgdG8gYWxsb3cgbWF0Y2hpbmcgKCkuICBPbmUgc2lkZSBpcyAicHVzaCBYIG9uCisgICAgdGhlIHN0YWNrIGlmIHByZXZpb3VzIGF0b20gbWF0Y2hlZCIuICBPdGhlciBzaWRlIGlzICJtYXRjaCB3aXRoIHRvcCBvZgorICAgIHN0YWNrLCBwb3AgaXQgd2hlbiBpdCBtYXRjaGVzIi4gIFVzZSAiXEBwWCIgYW5kICJcQG0iPworCUV4YW1wbGU6IFwoKFxAcCkuXHstfVxAbVwpKgorNyAgIEFkZCBhbiBvcHRpb24gdG8gYWNjZXB0IGEgbWF0Y2ggYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4gIEFsc28gZm9yCisgICAgc2VhcmNoKCkuIChCcmV0dCkKKzcgICBBZGQgcGF0dGVybiBpdGVtIHRvIHVzZSBwcm9wZXJ0aWVzIG9mIFVuaWNvZGUgY2hhcmFjdGVycy4gIEluIFBlcmwgaXQncworICAgICJccHtMfSIgZm9yIGEgbGV0dGVyLiAgU2VlIFJlZ3VsYXIgRXhwcmVzc2lvbiBQb2NrZXQgUmVmZXJlbmNlLgorNyAgIFdoZW4gJ3JpZ2h0bGVmdCcgaXMgc2V0LCB0aGUgc2VhcmNoIHBhdHRlcm4gc2hvdWxkIGJlIGRpc3BsYXllZCByaWdodCB0bworICAgIGxlZnQgYXMgd2VsbD8gIFNlZSBwYXRjaCBvZiBEZWMgMjYuIChOYWRpbSBTaGFpa2xpKQorOCAgIFdvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGFsbG93ICI6MjMsNDUvcGF0L2ZsYWdzIiB0byBzZWFyY2ggZm9yICJwYXQiIGluCisgICAgbGluZXMgMjMgdG8gNDU/ICBPciBkb2VzIHRoaXMgY29uZmxpY3Qgd2l0aCBFeCByYW5nZSBzeW50YXg/Cis4ICAgQWxsb3cgaWRlbnRpY2FsIHBhaXJzIGluICdtYXRjaHBhaXJzJy4gIFJlc3RyaWN0IHRoZSBzZWFyY2ggdG8gdGhlIGN1cnJlbnQKKyAgICBsaW5lLgorNyAgIEFsbG93IGxvbmdlciBwYWlycyBpbiAnbWF0Y2hwYWlycycuICBVc2Ugfi92aW0vbWFjcm9zL21hdGNoaXQudmltIGFzIGFuCisgICAgZXhhbXBsZS4KKzggICBNYWtlIGl0IHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgY2hhcmFjdGVyIHRoYXQgIiUiIGNoZWNrcyBmb3IgaW4KKyAgICAjaWYvI2VuZGlmLiAgRm9yIG5tYWtlIGl0J3MgIWlmLyFlbmRpZi4KKy0gICBGb3IgIiUiIGNvbW1hbmQ6IHNldCBoaWVyYXJjaHkgZm9yIHdoaWNoIHRoaW5ncyBpbmNsdWRlIG90aGVyIHRoaW5ncyB0aGF0CisgICAgc2hvdWxkIGJlIGlnbm9yZWQgKGxpa2UgIiovIiBvciAiI2VuZGlmIiBpbnNpZGUgLyogKi8pLgorICAgIEFsc286IHVzZSAiJSIgdG8ganVtcCBmcm9tIHN0YXJ0IHRvIGVuZCBvZiBzeW50YXggcmVnaW9uIGFuZCBiYWNrLgorICAgIEFsdGVybmF0aXZlOiB1c2UgbWF0Y2hpdC52aW0KKzggICAiLzovZSsxIiBnZXRzIHN0dWNrIG9uIGEgbWF0Y2ggYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gIERvIHdlIGNhcmU/Cis4ICAgQSBwYXR0ZXJuIGxpa2UgIlwoW15hXVwrXClcKyIgdGFrZXMgYW4gYXdmdWwgbG9uZyB0aW1lLiAgUmVjb2duaXplIHRoYXQKKyAgICB0aGUgcmVjdXJzaXZlICJcKyIgaXMgbWVhbmluZ2xlc3MgYW5kIG9wdGltaXplIGZvciBpdC4KKyAgICBUaGlzIG9uZSBpcyBhbHNvIHZlcnkgc2xvdyBvbiAiLyogc29tZSBjb21tZW50ICovIjogIl5cL1wqXCguKlteL11cKSokIi4KKzcgICBSZWNvZ25pemUgIlthLXpdIiwgIlswLTldIiwgZXRjLiBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIGZhc3RlciAiXGwiIGFuZAorICAgICJcZCIuCis3ICAgQWRkIGEgd2F5IHRvIHNwZWNpZnkgY2hhcmFjdGVycyBhcyBoZXgsIG9jdGFsIG9yIDxDLU0+IGZvcm0uICBDb3VsZCBiZQorICAgIFwlMWF4LCBcJTIwMG8gYW5kIFwlPEMtTT4uICBBbHNvIFwlMTIzNHUgZm9yIG11bHRpLWJ5dGUgY2hhcnMuCis4ICAgRmxhZ3MgdGhhdCBhcHBseSB0byB0aGUgd2hvbGUgcGF0dGVybi4KKyAgICBUaGlzIHdvcmtzIGZvciBhbGwgcGxhY2VzIHdoZXJlIGEgcmVnZXhwIGlzIHVzZWQuCisgICAgQWRkICJccSIgdG8gbm90IHN0b3JlIHRoaXMgcGF0dGVybiBhcyB0aGUgbGFzdCBzZWFyY2ggcGF0dGVybj8KKzggICBBZGQgYW4gYXJndW1lbnQgYWZ0ZXIgIjpzL3BhdC9zdHIvIiBmb3IgYSByYW5nZSBvZiBtYXRjaGVzLiAgRm9yIGV4YW1wbGUsCisgICAgIjpzL3BhdC9zdHIvIzMtNCIgdG8gcmVwbGFjZSBvbmx5IHRoZSB0aGlyZCBhbmQgZm91cnRoICJwYXQiIGluIGEgbGluZS4KKzggICBBZGQgYW4gb3B0aW9uIG5vdCB0byB1c2UgJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgZm9yICI6cyIgYW5kICI6ZyIKKyAgICBjb21tYW5kcy4gKEthaG4pICBJdCB3b3VsZCB3b3JrIGxpa2UgIjpub2giIGlzIHVzZWQgYWZ0ZXIgdGhhdCBjb21tYW5kLgorICAgIEFsc286IEFuIGV4dHJhIGZsYWcgdG8gZG8gdGhpcyBvbmNlLCBhbmQgYSBmbGFnIHRvIGtlZXAgdGhlIGV4aXN0aW5nCisgICAgc2VhcmNoIHBhdHRlcm4uCistICAgQWRkIFwlaHtncm91cC1uYW1lfTsgdG8gc2VhcmNoIGZvciBhIHNwZWNpZmljIGhpZ2hsaWdodCBncm91cC4KKyAgICBBZGQgXCVze3N5bnRheC1ncm91cH07IHRvIHNlYXJjaCBmb3IgYSBzcGVjaWZpYyBzeW50YXggZ3JvdXAuCistICAgU3VwcG9ydCBQZXJsIHJlZ2V4cC4gIFVzZSBQQ1JFIChQZXJsIENvbXBhdGlibGUgUkUpIHBhY2thZ2UuIChTaGFkZSkKKyAgICBPciB0cmFuc2xhdGUgdGhlIHBhdHRlcm4gdG8gYSBWaW0gb25lLgorICAgIERvbid0IHN3aXRjaCBvbiB3aXRoIGFuIG9wdGlvbiBmb3IgdHlwZWQgY29tbWFuZHMvbWFwcGluZ3MvZnVuY3Rpb25zLCBpdCdzCisgICAgdG9vIGNvbmZ1c2luZy4gIFVzZSAiXEBAIiBpbiB0aGUgcGF0dGVybiwgdG8gYXZvaWQgaW5jb21wYXRpYmlsaXRpZXMuCis3ICAgQWRkIFBPU0lYIHJlZ2V4cCwgbGlrZSBOdmksIHdpdGggJ2V4dGVuZGVkJyBvcHRpb24/ICBJdCdzIGxpa2UgdmVyeS1tYWdpYy4KKy0gICBSZW1lbWJlciBmbGFncyBmb3IgYmFja3JlZmVyZW5jZWQgaXRlbXMsIHNvIHRoYXQgIioiIGNhbiBiZSB1c2VkIGFmdGVyIGl0LgorICAgIENoZWNrIHdpdGggIlwoXFNcKVwxXHszfSIuIChIZW1tZXJsaW5nKQorLSAgIEFkZCBmbGFncyB0byBzZWFyY2ggY29tbWFuZCAoYWxzbyBmb3IgIjpzIj8pOgorICAgIGkJaWdub3JlIGNhc2UKKyAgICBJCXVzZSBjYXNlCisgICAgcAl1c2UgUGVybCByZWdleHAgc3ludGF4IChvciBQT1NJWD8pCisgICAgdgl1c2UgVmkgcmVnZXhwIHN5bnRheAorICAgIGYJZm9yZ2V0IHBhdHRlcm4sIGRvbid0IGtlZXAgaXQgZm9yICJuIiBjb21tYW5kCisgICAgRiAgIHJlbWVtYmVyIHBhdHRlcm4sIGtlZXAgaXQgZm9yICJuIiBjb21tYW5kCisgICAgUGVybCB1c2VzIHRoZXNlIHRvbzoKKyAgICBlCWV2YWx1YXRlIHRoZSByaWdodCBzaWRlIGFzIGFuIGV4cHJlc3Npb24gKFBlcmwgb25seSkKKyAgICBtCW11bHRpcGxlIGxpbmUgZXhwcmVzc2lvbiAod2UgZG9uJ3QgbmVlZCBpdCkKKyAgICBvCWNvbXBpbGUgb25seSBvbmNlIChQZXJsIG9ubHkpCisgICAgcwlzaW5nbGUgbGluZSBleHByZXNzaW9uICh3ZSBkb24ndCBuZWVkIGl0KQorICAgIHgJZXh0ZW5kZWQgcmVnZXhwICh3ZSBkb24ndCBuZWVkIGl0KQorICAgIFdoZW4gdXNlZCBhZnRlciAiOmciIGNvbW1hbmQsIGJhY2tzbGFzaCBuZWVkZWQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlCisgICAgZm9sbG93aW5nIGNvbW1hbmQuCisgICAgQWRkICdzZWFyY2hmbGFncycgZm9yIGRlZmF1bHQgZmxhZ3MgKHJlcGxhY2VzICdnZGVmYXVsdCcpLgorLSAgIEFkZCBjb21tYW5kIHRvIGRpc3BsYXkgdGhlIGxhc3QgdXNlZCBzdWJzdGl0dXRlIHBhdHRlcm4gYW5kIGxhc3QgdXNlZAorICAgIHBhdHRlcm4uIChNYXJnbykgIE1heWJlIG1ha2UgaXQgYWNjZXNzaWJsZSB0aHJvdWdoIGEgcmVnaXN0ZXIgKGxpa2UgIi8KKyAgICBmb3Igc2VhcmNoIHN0cmluZyk/Cis3ICAgVXNlIFQtc2VhcmNoIGFsZ29yaXRobSwgdG8gc3BlZWQgdXAgc2VhcmNoaW5nIGZvciBzdHJpbmdzIHdpdGhvdXQgc3BlY2lhbAorICAgIGNoYXJhY3RlcnMuICBTZWUgQyd0IGFydGljbGUsIEF1Z3VzdCAxOTk3LgorLSAgIEFkZCAnZnV6enljYXNlJyBvcHRpb24sIHNvIHRoYXQgY2FzZSBkb2Vzbid0IG1hdHRlciwgYW5kICctJyBhbmQgJ18nIGFyZQorICAgIGVxdWl2YWxlbnQgKGZvciBVbml4IGZpbGVuYW1lcykuCistICAgQWRkICd2JyBmbGFnIHRvIHNlYXJjaCBjb21tYW5kOiBlbnRlciBWaXN1YWwgbW9kZSwgd2l0aCB0aGUgbWF0Y2hpbmcgdGV4dAorICAgIGFzIFZpc3VhbCBhcmVhLiAodmFyaWF0aW9uIG9uIGlkZWEgZnJvbSBCZXJ0aW4pCistICAgU2VhcmNoaW5nOiAiL3RoaXMvL3RoYXQvIiBzaG91bGQgZmluZCAidGhhdCIgYWZ0ZXIgInRoaXMiLgorLSAgIEFkZCBnbG9iYWwgc2VhcmNoIGNvbW1hbmRzOiBJbnN0ZWFkIG9mIHdyYXBwaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwKKyAgICB0aGV5IGNvbnRpbnVlIGluIGFub3RoZXIgYnVmZmVyLiBVc2UgZmxhZyBhZnRlciBzZWFyY2ggcGF0dGVybjoKKyAgICBhCWZvciB0aGUgbmV4dCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0CisgICAgZglmb3IgZmlsZSBpbiB0aGUgYnVmZmVyIGxpc3QKKyAgICB3CWZvciBmaWxlIGVkaXRlZCBpbiBhIHdpbmRvdy4KKyAgICBlLmcuICIvcGF0L2YiLiBUaGVuICJuIiBhbmQgIk4iIHdvcmsgdGhyb3VnaCBmaWxlcyB0b28uICJmIiBmbGFnIGFsc28gZm9yCisgICAgIjpzL3BhdC9mb28vZiI/Pz8gVGhlbiB3aGVuICdhdXRvd3JpdGUnIGFuZCAnaGlkZGVuJyBhcmUgYm90aCBub3Qgc2V0LCBhc2sKKyAgICBiZWZvcmUgc2F2aW5nIGZpbGVzOiAiU2F2ZSBtb2RpZmllZCBidWZmZXIgIi9wYXRoL2ZpbGUiPyAoWWVzL0hpZGUvTm8KKyAgICBTYXZlLWFsbC9oaWRlLUFsbC9RdWl0KSAiLgorLSAgICI6cy9wYXQvZm9vLzMiOiBmaW5kIDNyZCBtYXRjaCBvZiAicGF0IiwgbGlrZSBzZWQuIChUaG9tYXMgS29laGxlcikKKy0gICBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gcGF0dGVybnM6CisgICAgSW5zaWRlIFtdOgorICAgIFwwMTIgIG9jdGFsIGNoYXJhY3RlcgorICAgIFwweDFhIGhleCBjaGFyYWN0ZXIKKyAgICBcMDxCUz4gXDA8RXNjPjogc3BlY2lhbCBjaGFyYWN0ZXIKKzcgICBXaGVuIHNlYXJjaGluZyB3aXRoICduJyBnaXZlIG1lc3NhZ2Ugd2hlbiBnZXR0aW5nIGJhY2sgd2hlcmUgdGhlIHNlYXJjaAorICAgIGZpcnN0IHN0YXJ0ZWQuIFJlbWVtYmVyIHN0YXJ0IG9mIHNlYXJjaCBpbiAnLyBtYXJrLgorNyAgIEFkZCBvcHRpb24gdGhhdCBzY3JvbGxzIHNjcmVlbiB0byBwdXQgY3Vyc29yIGluIG1pZGRsZSBvZiBzY3JlZW4gYWZ0ZXIKKyAgICBzZWFyY2ggYWx3YXlzL3doZW4gb2ZmLXNjcmVlbi9uZXZlci4gIEFuZCBhZnRlciBhICI6dGFnIiBjb21tYW5kLiAgTWF5YmUKKyAgICBzcGVjaWZ5IGhvdyBtYW55IGxpbmVzIGJlbG93IHRoZSBzY3JlZW4gY2F1c2VzIGEgcmVkcmF3IHdpdGggdGhlIGN1cnNvciBpbgorICAgIHRoZSBtaWRkbGUgKGRlZmF1bHQgd291bGQgYmUgaGFsZiBhIHNjcmVlbiwgemVybyBtZWFucyBhbHdheXMpLgorNiAgIFN1cHBvcnQgbXVsdGlwbGUgc2VhcmNoIGJ1ZmZlcnMsIHNvIG1hY3JvcyBjYW4gYmUgbWFkZSB3aXRob3V0IHNpZGUKKyAgICBlZmZlY3RzLgorNyAgIEZyb20geHZpbTogQWxsb3cgYSBuZXdsaW5lIGluIHNlYXJjaCBwYXR0ZXJucyAoYWxzbyBmb3IgOnMsIGNhbiBkZWxldGUKKyAgICBuZXdsaW5lKS4gIEFkZCBCT1csIEVPVywgTkVXTCwgTkxPUkFOWSwgTkxCVVRBTlksIG1hZ2ljICduJyBhbmQgJ3InLCBldGMuCisgICAgW25vdCBpbiB4dmltOl0gQWRkIG9wdGlvbiB0byBzd2l0Y2ggb24gbWF0Y2hlcyBjcm9zc2luZyBPTkUgbGluZSBib3VuZGFyeS4KKzcgICBBZGQgIjppc2VsZWN0IiwgYSBjb21iaW5hdGlvbiBvZiAiOmlsaXN0IiBhbmQgIjp0c2VsZWN0Ii4gKEFhcm9uKQorICAgIEFsc28gIjpkc2VsZWN0Ii4KKworCitVbmRvOgorLSAgIFdoZW4gYWNjaWRlbnRhbGx5IGhpdHRpbmcgIlIiIGluc3RlYWQgb2YgQ3RybC1SLCBmdXJ0aGVyIEN0cmwtUiBpcyBub3QKKyAgICBwb3NzaWJsZSwgZXZlbiB3aGVuIHR5cGluZyA8RXNjPiBpbW1lZGlhdGVseS4gKEdyYWhuKSAgQWxzbyBmb3IgImkiLCAiYSIsCisgICAgZXRjLiAgUG9zdHBvbmUgc2F2aW5nIGZvciB1bmRvIHVudGlsIHNvbWV0aGluZyBpcyByZWFsbHkgaW5zZXJ0ZWQ/Cis4ICAgV2hlbiBJbnNlcnRpbmcgYSBsb3Qgb2YgdGV4dCwgaXQgY2FuIG9ubHkgYmUgdW5kb25lIGFzIGEgd2hvbGUuICBNYWtlIHVuZG8KKyAgICBzeW5jIHBvaW50cyBhdCBldmVyeSBsaW5lIG9yIHdvcmQuICBDb3VsZCByZWNvZ25pemUgdGhlIHN0YXJ0IG9mIGEgbmV3CisgICAgd29yZCAod2hpdGUgc3BhY2UgYW5kIHRoZW4gbm9uLXdoaXRlIHNwYWNlKSBhbmQgYmFja3NwYWNpbmcuCisgICAgQ2FuIGFscmVhZHkgdXNlIENUUkwtRyB1LCBidXQgdGhhdCByZXF1aXJlcyByZW1hcHBpbmcgYSBsb3Qgb2YgdGhpbmdzLgorOCAgIE1ha2UgdW5kbyBtb3JlIG1lbW9yeS1lZmZpY2llbnQ6IENvbXBhcmUgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIGNoYW5nZSwKKyAgICBvbmx5IHJlbWVtYmVyIHRoZSBsaW5lcyB0aGF0IHJlYWxseSBjaGFuZ2VkLgorNyAgIEFkZCB1bmRvIGZvciBhIHJhbmdlIG9mIGxpbmVzLiAgQ2FuIGNoYW5nZSB0aGVzZSBiYWNrIHRvIGEgcHJldmlvdXMKKyAgICB2ZXJzaW9uIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUuICBTdG9wIGRvaW5nIHRoaXMgd2hlbiBhCisgICAgY2hhbmdlIGluY2x1ZGVzIG9ubHkgc29tZSBvZiB0aGVzZSBsaW5lcyBhbmQgY2hhbmdlcyB0aGUgbGluZSBjb3VudC4gIE5lZWQKKyAgICB0byBzdG9yZSB0aGVzZSB1bmRvIGFjdGlvbnMgYXMgYSBzZXBhcmF0ZSBjaGFuZ2UgdGhhdCBjYW4gYmUgdW5kb25lLgorNyAgIEFkZCBhbiB1bmRvIHRyZWU6IFdoZW4gbWFraW5nIGEgY2hhbmdlLCBpbnN0ZWFkIG9mIGNsZWFyaW5nIGFueSBmdXR1cmUKKyAgICB1bmRvICh0aHVzIHJlZG8pIGluZm8sIG1ha2UgYSBuZXcgYnJhbmNoLiAgSG93IHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlCisgICAgdW5kbyB0cmVlPworLSAgIEZvciB1X3NhdmUoKSBpbmNsdWRlIHRoZSBjb2x1bW4gbnVtYmVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCAnWyBhbmQgJ10uCisgICAgQW5kIGluIHRoZSBmdXR1cmUgdGhlIHVuZG8gY2FuIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgKFdlYmIpLgorLSAgIEluIG91dC1vZi1tZW1vcnkgc2l0dWF0aW9uczogRnJlZSBhbGxvY2F0ZWQgc3BhY2UgaW4gdW5kbywgYW5kIHJlZHVjZSB0aGUKKyAgICBudW1iZXIgb2YgdW5kbyBsZXZlbHMgKHdpdGggY29uZmlybWF0aW9uKS4KKy0gICBJbnN0ZWFkIG9mIFsrXSwgZ2l2ZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgc2luY2UgdGhlIGxhc3Qgd3JpdGU6IFsrMTIzXS4KKyAgICBXaGVuIHVuZG9pbmcgdG8gYmVmb3JlIHRoZSBsYXN0IHdyaXRlLCBjaGFuZ2UgdGhpcyB0byBhIG5lZ2F0aXZlIG51bWJlcjoKKyAgICBbLTk5XS4KKy0gICBXaXRoIHVuZG8gd2l0aCBzaW1wbGUgbGluZSBkZWxldGUvaW5zZXJ0OiBvcHRpbWl6ZSBzY3JlZW4gdXBkYXRpbmcuCistICAgV2hlbiBleGVjdXRpbmcgbWFjcm8nczogU2F2ZSBlYWNoIGxpbmUgZm9yIHVuZG8gb25seSBvbmNlLgorLSAgIFN0b3JlIHVuZG8gaW5mbyBpbiBhIGZpbGUgdGhhdCBzdXJ2aXZlcyB1bnRpbCB0aGUgbmV4dCBlZGl0LiAgVGhlbiBpdCdzCisgICAgcG9zc2libGUgdG8gdW5kbyB0byBiZWZvcmUgdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uLiAgQ29tYmluZWQgd2l0aAorICAgIHZpbWluZm8/CistICAgV2hlbiBkb2luZyBhIGdsb2JhbCBzdWJzdGl0dXRlLCBjYXVzaW5nIGFsbW9zdCBhbGwgbGluZXMgdG8gYmUgY2hhbmdlZCwKKyAgICB1bmRvIGluZm8gYmVjb21lcyB2ZXJ5IGJpZy4gIFB1dCB1bmRvIGluZm8gaW4gc3dhcCBmaWxlPz8KKworCitCdWZmZXIgbGlzdDoKKzggICBBZGQgcGF0Y2ggZnJvbSBDaGFybGVzIENhbXBiZWxsIHRvIGhhdmUgIjowZmlsZSEiIHJlbW92ZSB0aGUgbmFtZSBvZiB0aGUKKyAgICBjdXJyZW50IGJ1ZmZlci4gKDIwMDMgSnVuZSAxNykKKzcgICBDb21tYW5kIHRvIGV4ZWN1dGUgYSBjb21tYW5kIGluIGFub3RoZXIgYnVmZmVyOiAiOmluYnVmIHtidWZuYW1lfSB7Y21kfSIuCisgICAgQWxzbyBmb3Igb3RoZXIgd2luZG93czogIjppbndpbiB7d2lubnJ9IHtjbWR9Ii4gIEhvdyB0byBtYWtlIHN1cmUgdGhhdAorICAgIHRoaXMgd29ya3MgcHJvcGVybHkgZm9yIGFsbCBjb21tYW5kcywgYW5kIHN0aWxsIGJlIGFibGUgdG8gcmV0dXJuIHRvIHRoZQorICAgIGN1cnJlbnQgYnVmZmVyL3dpbmRvdz8gIEUuZy46ICI6aW5idWYgeHh4IG9ubHkiLgorOCAgIEFkZCBGaWxlLntyZWNlbnRfZmlsZXN9IG1lbnUgZW50cmllczogUmVjZW50bHkgZWRpdGVkIGZpbGVzLgorICAgIFJvbiBBYXJvbiBoYXMgYSBwbHVnaW4gZm9yIHRoaXM6IG1ydS52aW0uCis4ICAgVW5peDogQ2hlY2sgYWxsIHVzZXMgb2YgZm5hbWVjbXAoKSBhbmQgZm5hbWVuY21wKCkgaWYgdGhleSBzaG91bGQgY2hlY2sKKyAgICBpbm9kZSB0b28uCis3ICAgQWRkIGFub3RoZXIgbnVtYmVyIGZvciBhIGJ1ZmZlciwgd2hpY2ggaXMgdmlzaWJsZSBmb3IgdGhlIHVzZXIuICBXaGVuCisgICAgY3JlYXRpbmcgYSBuZXcgYnVmZmVyLCB1c2UgdGhlIGxvd2VzdCBudW1iZXIgbm90IGluIHVzZS4gKG9yIHRoZSBoaWdoZXN0CisgICAgbnVtYmVyIGluIHVzZSBwbHVzIG9uZT8pCis3ICAgT2ZmZXIgc29tZSBidWZmZXIgc2VsZWN0aW9uIGZyb20gdGhlIGNvbW1hbmQgbGluZT8gIExpa2UgdXNpbmcgIjpscyIgYW5kCisgICAgYXNraW5nIGZvciBhIGJ1ZmZlciBudW1iZXIuIChaYWNobWFubikKKy0gICBXaGVuIHN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyIGxpc3QsIHVzZSB0aGUKKyAgICBmaWxlIG5hbWUgYXJndW1lbnQgZm9yIHRoZSBuZXcgc2hvcnQgZmlsZSBuYW1lLiAoV2ViYikKKy0gICBBZGQgYW4gb3B0aW9uIHRvIG1ha2UgIjpibmV4dCIgYW5kICI6YnByZXYiIHdyYXAgYXJvdW5kIHRoZSBlbmQgb2YgdGhlCisgICAgYnVmZmVyIGxpc3QuICBBbHNvIGZvciAiOm5leHQiIGFuZCAiOnByZXYiPworNyAgIEFkZCBhcmd1bWVudCB0byAiOmxzIiB3aGljaCBpcyBhIHBhdHRlcm4gZm9yIGJ1ZmZlcnMgdG8gbGlzdC4KKyAgICBFLmcuICI6bHMgKi5jIi4gKFRob21wc29uKQorNyAgIEFkZCBleHBhbnNpb24gb2YgYnVmZmVyIG5hbWVzLCBzbyB0aGF0ICIqLmMiIGlzIGV4cGFuZGVkIHRvIGFsbCBidWZmZXIKKyAgICBuYW1lcy4gIE5lZWRlZCBmb3IgIjpiZGVsICouYyIsICI6YnVubG9hZCAqLmMiLCBldGMuCis4ICAgU3VwcG9ydCBmb3IgPGFmaWxlPiB3aGVyZSBhIGJ1ZmZlciBuYW1lIGlzIGV4cGVjdGVkLgorOCAgIFNvbWUgY29tbWFuZHMgZG9uJ3QgdXNlIGxpbmUgbnVtYmVycywgYnV0IGJ1ZmZlciBudW1iZXJzLiAnJCcKKyAgICBzaG91bGQgdGhlbiBtZWFuIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgYnVmZmVyLiAgRS5nLjogIjQsJGJkZWwiLgorNyAgIEFkZCBhbiBvcHRpb24gdG8gbW9zdGx5IHVzZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMuICBTZXBhcmF0ZWx5IGZvcgorICAgIGludGVybmFsIHVzZSBhbmQgZm9yIHdoZW4gZXhlY3V0aW5nIGFuIGV4dGVybmFsIHByb2dyYW0/CisKKworU3dhcCAoLnN3cCkgZmlsZXM6Cis4ICAgSWYgd3JpdGluZyB0byB0aGUgc3dhcCBmaWxlIGZhaWxzLCBzaG91bGQgdHJ5IHRvIG9wZW4gb25lIGluIGFub3RoZXIKKyAgICBkaXJlY3RvcnkgZnJvbSAnZGlyJy4gIFVzZWZ1bCBpbiBjYXNlIHRoZSBmaWxlIHN5c3RlbSBpcyBmdWxsIGFuZCB3aGVuCisgICAgdGhlcmUgYXJlIHNob3J0IGZpbGUgbmFtZSBwcm9ibGVtcy4KKzggICBBbHNvIHVzZSB0aGUgY29kZSB0byB0cnkgdXNpbmcgYSBzaG9ydCBmaWxlIG5hbWUgZm9yIHRoZSBiYWNrdXAgYW5kIHN3YXAKKyAgICBmaWxlIGZvciB0aGUgV2luMzIgYW5kIERvcyAzMiBiaXQgdmVyc2lvbnMuCis4ICAgV2hlbiBhIGZpbGUgaXMgZWRpdGVkIGJ5IHJvb3QsIGFkZCAkTE9HTkFNRSB0byBrbm93IHdobyBkaWQgc3UuCis4ICAgV2hlbiB0aGUgZWRpdGVkIGZpbGUgaXMgYSBzeW1saW5rLCB0cnkgdG8gcHV0IHRoZSBzd2FwIGZpbGUgaW4gdGhlIHNhbWUKKyAgICBkaXIgYXMgdGhlIGFjdHVhbCBmaWxlLiBBZGp1c3QgRnVsbE5hbWUoKS4JQXZvaWRzIGVkaXRpbmcgdGhlIHNhbWUgZmlsZQorICAgIHR3aWNlIChlLmcuIHdoZW4gdXNpbmcgcXVpY2tmaXgpLiAgQWxzbyB0cnkgdG8gbWFrZSB0aGUgbmFtZSBvZiB0aGUgYmFja3VwCisgICAgZmlsZSB0aGUgc2FtZSBhcyB0aGUgYWN0dWFsIGZpbGU/CisgICAgVXNlIHRoZSBjb2RlIGZvciByZXNvbHZlKCk/Cis3ICAgU3RvcmUgdGhlIG9wdGlvbnMgJ2ZpbGVlbmNvZGluZycsICdmaWxlZm9ybWF0JywgZXRjLiBpbiB0aGUgc3dhcGZpbGUsCisgICAgYmVjYXVzZSB0aGV5IGNoYW5nZSB3aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgZmlsZS4gIFJlcXVpcmVzIGFkZGluZworICAgIGFub3RoZXIgYmxvY2sgdG8gdGhlIHN3YXBmaWxlLgorNyAgIFdoZW4gdXNpbmcgNjQgYml0IGlub2RlIG51bWJlcnMsIGFsc28gc3RvcmUgdGhlIHRvcCAzMiBiaXRzLiAgQWRkIGFub3RoZXIKKyAgICBmaWVsZCBmb3IgdGhpcywgdXNpbmcgcGFydCBvZiBib19mbmFtZVtdLCB0byBrZWVwIGl0IGNvbXBhdGlibGUuCis3ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSBvbiByZW1vdmFibGUgbWVkaWEsIHNob3VsZCBwdXQgc3dhcCBmaWxlIHNvbWV3aGVyZQorICAgIGVsc2UuICBVc2Ugc29tZXRoaW5nIGxpa2UgJ3InIGZsYWcgaW4gJ3ZpbWluZm8nLiAnZGlyYXZvaWQnPworICAgIEFsc286IEJlIGFibGUgdG8gc3BlY2lmeSBtaW5pbXVtIGRpc2sgc3BhY2UsIHNraXAgZGlyZWN0b3J5IHdoZW4gbm90CisgICAgZW5vdWdoIHJvb20uCis3ICAgQWRkIGEgY29uZmlndXJlIGNoZWNrIGZvciB3aGljaCBkaXJlY3Rvcnkgc2hvdWxkIGJlIHVzZWQ6IC90bXAsIC92YXIvdG1wCisgICAgb3IgL3Zhci9wcmVzZXJ2ZS4KKy0gICBBZGQgYW4gb3B0aW9uIHRvIGNyZWF0ZSBhIHN3YXAgZmlsZSBvbmx5IHdoZW4gbWFraW5nIHRoZSBmaXJzdCBjaGFuZ2UgdG8KKyAgICB0aGUgYnVmZmVyLiAgKExpYW5nKSAgT3Igb25seSB3aGVuIHRoZSBidWZmZXIgaXMgbm90IHJlYWQtb25seS4KKy0gICBBZGQgb3B0aW9uIHRvIHNldCAidW1hc2siIGZvciBiYWNrdXAgZmlsZXMgYW5kIHN3YXAgZmlsZXMgKEFudHdlcnBlbikuCisgICAgJ2JhY2t1cHVtYXNrJyBhbmQgJ3N3YXB1bWFzayc/ICBPciAndW1hc2tiYWNrJyBhbmQgJ3VtYXNrc3dhcCc/CistICAgV2hlbiBlZGl0aW5nIGEgcmVhZG9ubHkgZmlsZSwgZG9uJ3QgdXNlIGEgc3dhcCBmaWxlIGJ1dCByZWFkIHBhcnRzIGZyb20gdGhlCisgICAgb3JpZ2luYWwgZmlsZS4gIEFsc28gZG8gdGhpcyB3aGVuIHRoZSBmaWxlIGlzIGh1Z2UgKD4nbWF4bWVtJykuICBXZSBkbworICAgIG5lZWQgdG8gbG9hZCB0aGUgZmlsZSBvbmNlIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgbGluZXM/ICBQZXJoYXBzIGtlZXAgYQorICAgIGNhY2hlZCBsaXN0IG9mIHdoaWNoIGxpbmUgaXMgd2hlcmUuCisKKworVmltaW5mbzoKKzcgICBDYW4gcHJvYmFibHkgcmVtb3ZlIHRoZSBjb2RlIHRoYXQgY2hlY2tzIGZvciBhIHdyaXRhYmxlIHZpbWluZm8gZmlsZSwKKyAgICBiZWNhdXNlIHdlIG5vdyBkbyB0aGUgY2hvd24oKSBmb3Igcm9vdCwgYW5kIG90aGVycyBjYW4ndCBvdmVyd3JpdGUgc29tZW9uZQorICAgIGVsc2UncyB2aW1pbmZvIGZpbGUuCis4ICAgQWRkIGFyZ3VtZW50IHRvIGtlZXAgdGhlIGxpc3Qgb2YgYnVmZmVycyB3aGVuIFZpbSBpcyBzdGFydGVkIHdpdGggYSBmaWxlCisgICAgbmFtZS4gKFNjaGlsZCkKKzggICBLZWVwIHRoZSBsYXN0IHVzZWQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIGJyb3dzZXIgKEZpbGUvT3BlbiBtZW51KS4KKzggICBSZW1lbWJlciB0aGUgbGFzdCB1c2VkIHJlZ2lzdGVyIGZvciAiQEAiLgorOCAgIFJlbWVtYmVyIGEgbGlzdCBvZiBsYXN0IGFjY2Vzc2VkIGZpbGVzLiAgVG8gYmUgdXNlZCBpbiB0aGUKKyAgICAiRmlsZS5PcGVuIFJlY2VudCIgbWVudS4gIERlZmF1bHQgaXMgdG8gcmVtZW1iZXIgMTAgZmlsZXMgb3Igc28uCisgICAgQWxzbyByZW1lbWJlciB3aGljaCBmaWxlcyBoYXZlIGJlZW4gcmVhZCBhbmQgd3JpdHRlbi4gIEhvdyB0byBkaXNwbGF5CisgICAgdGhpcz8KKzcgICBBbHNvIHN0b3JlIHRoZSAiLiByZWdpc3RlciAobGFzdCBpbnNlcnRlZCB0ZXh0KS4KKzcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHN0b3JlIGJ1ZmZlciBuYW1lcyBpbiB2aW1pbmZvIGZpbGUgcmVsYXRpdmUgdG8gc29tZQorICAgIGRpcmVjdG9yeSwgdG8gbWFrZSB0aGVtIHBvcnRhYmxlIG92ZXIgYSBuZXR3b3JrLiAoQWFyb24pCis2ICAgU3RvcmUgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCB3aW5kb3dzLiAgU28gdGhhdCB3aGVuIHF1aXR0aW5nCisgICAgVmltLCBhbmQgdGhlbiBzdGFydGluZyBhZ2FpbiAod2l0aG91dCBhIGZpbGUgbmFtZSBhcmd1bWVudCksIHlvdSBzZWUgdGhlCisgICAgc2FtZSBmaWxlcyBpbiB0aGUgd2luZG93cy4gIFVzZSAiOm1rc2Vzc2lvbiIgY29kZT8KKy0gICBNYWtlIG1hcmtzIHByZXNlbnQgaW4gLnZpbWluZm8gdXNhYmxlIGFzIGZpbGUgbWFya3M6IERpc3BsYXkgYSBsaXN0IG9mCisgICAgImxhc3QgdmlzaXRlZCBmaWxlcyIgYW5kIHNlbGVjdCBvbmUgdG8ganVtcCB0by4KKworCitNb2RlbGluZXM6Cis4ICAgQmVmb3JlIHRyeWluZyB0byBleGVjdXRlIGEgbW9kZWxpbmUsIGNoZWNrIHRoYXQgaXQgbG9va3MgbGlrZSBvbmUgKHZhbGlkCisgICAgb3B0aW9uIG5hbWVzKS4gIElmIGl0J3MgdmVyeSB3cm9uZywgc2lsZW50bHkgaWdub3JlIGl0LgorICAgIElnbm9yZSBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiU3ViamVjdDogIi4KKy0gICBXaGVuIGFuIG9wdGlvbiB2YWx1ZSBpcyBjb21pbmcgZnJvbSBhIG1vZGVsaW5lLCBkbyBub3QgY2FycnkgaXQgb3ZlciB0bworICAgIGFub3RoZXIgZWRpdGVkIGZpbGU/ICBXb3VsZCBuZWVkIHRvIHJlbWVtYmVyIHRoZSB2YWx1ZSBmcm9tIGJlZm9yZSB0aGUKKyAgICBtb2RlbGluZSBzZXR0aW5nLgorLSAgIEFsbG93IHNldHRpbmcgYSB2YXJpYWJsZSBmcm9tIGEgbW9kZWxpbmU/ICBPbmx5IGFsbG93IHVzaW5nIGZpeGVkIHN0cmluZ3MsCisgICAgbm8gZnVuY3Rpb24gY2FsbHMsIHRvIGF2b2lkIGEgc2VjdXJpdHkgcHJvYmxlbS4KKy0gICBBbGxvdyAiOmRvYXV0byBCdWZSZWFkIHguY3BwIiBpbiBtb2RlbGluZXMsIHRvIGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvcgorICAgIC5jcHAgZmlsZXMuCistICAgU3VwcG9ydCB0aGUgImFiYnJldmlhdGUiIGNvbW1hbmQgaW4gbW9kZWxpbmVzIChLZWFybnMpLiAgQ2FyZWZ1bCBmb3IKKyAgICBjaGFyYWN0ZXJzIGFmdGVyIDxFc2M+LCB0aGF0IGlzIGEgc2VjdXJpdHkgbGVhay4KKy0gICBBZGQgb3B0aW9uIHNldHRpbmcgdG8gYXNrIHVzZXIgaWYgaGUgd2FudHMgdG8gaGF2ZSB0aGUgbW9kZWxpbmVzIGV4ZWN1dGVkCisgICAgb3Igbm90LiAgU2FtZSBmb3IgLmV4cmMgaW4gbG9jYWwgZGlyLgorCisKK09wdGlvbnM6Cis4ICAgTWFrZSAiOm1rc2Vzc2lvbiIgc3RvcmUgYnVmZmVyLXNwZWNpZmljIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpYyBidWZmZXIuCis4ICAgV2l0aCAiOm1rc2Vzc2lvbiIgYWx3YXlzIHN0b3JlIHRoZSAnc2Vzc2lvbm9wdGlvbnMnIG9wdGlvbiwgZXZlbiB3aGVuCisgICAgIm9wdGlvbnMiIGlzbid0IGluIGl0LiAoU3QtQW1hbnQpCis3ICAgU2V0dGluZyBhbiBvcHRpb24gYWx3YXlzIHNldHMgIndfc2V0X2N1cnN3YW50Iiwgd2hpbGUgdGhpcyBpcyBvbmx5CisgICAgcmVxdWlyZWQgZm9yIGEgZmV3IG9wdGlvbnMuICBPbmx5IGRvIGl0IGZvciB0aG9zZSBvcHRpb25zIHRvIGF2b2lkIHRoZQorICAgIHNpZGUgZWZmZWN0LgorOCAgIFdoZW4gdXNpbmcgIjpta3Nlc3Npb24iLCBhbHNvIHN0b3JlIGEgY29tbWFuZCB0byByZXNldCBhbGwgb3B0aW9ucyB0bworICAgIHRoZWlyIGRlZmF1bHQgdmFsdWUsIGJlZm9yZSBzZXR0aW5nIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBhdCB0aGVpcgorICAgIGRlZmF1bHQgdmFsdWUuCis4ICAgU2hvdWxkICI6bWtzZXNzaW9uIiByZXN0b3JlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGVuIHdyaXRpbmcgdGhlCisgICAgc2Vzc2lvbiwgb3IgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2Vzc2lvbiBmaWxlIGlzPyAgUHJvYmFibHkgbmVlZCBhIHdvcmQKKyAgICBpbiAnc2Vzc2lvbm9wdGlvbnMnIHRvIG1ha2UgYSBjaG9pY2U6CisgICAgImN1cmRpciIgKGNkIHRvIGN1cnJlbnQgZGlyZWN0b3J5IHdoZW4gc2Vzc2lvbiBmaWxlIHdhcyBnZW5lcmF0ZWQpCisgICAgInNlc3Npb25kaXIiIChjZCB0byBkaXJlY3Rvcnkgb2Ygc2Vzc2lvbiBmaWxlKQorICAgICJub2RpciIgKGRvbid0IGNkIGF0IGFsbCkKKzggICBNYWtlICJvbGQiIG51bWJlciBvcHRpb25zIHRoYXQgcmVhbGx5IGdpdmUgYSBudW1iZXIgb2YgZWZmZWN0cyBpbnRvIHN0cmluZworICAgIG9wdGlvbnMgdGhhdCBhcmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4gIFRoZSBvbGQgbnVtYmVyIHZhbHVlcyBzaG91bGQKKyAgICBhbHNvIGJlIHN1cHBvcnRlZC4KKzggICBBZGQgY29tbWFuZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSBhbiBvcHRpb24sIHdoaWNoIGFsc28gcHJlc2VydmVzIHRoZSBmbGFnCisgICAgdGhhdCBtYXJrcyBpZiB0aGUgb3B0aW9uIHdhcyBzZXQuICBVc2VmdWwgdG8ga2VlcCB0aGUgZWZmZWN0IG9mIHNldHRpbmcKKyAgICAnY29tcGF0aWJsZScgYWZ0ZXIgIjpzeW50YXggb24iIGhhcyBiZWVuIHVzZWQuCis3ICAgVGhlcmUgaXMgJ3RpdGxlb2xkJywgd2h5IGlzIHRoZXJlIG5vICdpY29ub2xkJz8gKENoYXplbGFzKQorNyAgIE1ha2UgJ3Njcm9sbG9mZicgYSBnbG9iYWwtbG9jYWwgb3B0aW9uLCBzbyB0aGF0IGl0IGNhbiBiZSBkaWZmZXJlbnQgaW4gdGhlCisgICAgcXVpY2tmaXggd2luZG93LCBmb3IgZXhhbXBsZS4gKEdhcnkgSG9sbG93YXkpCis3ICAgQWRkIHBsdWdpbnMgZm9yIGZvcm1hdHRpbmcuICBTaG91bGQgYmUgYWJsZSB0byBtYWtlIGEgY2hvaWNlIGRlcGVuZGluZyBvbgorICAgIHRoZSBsYW5ndWFnZSBvZiBhIGZpbGUgKEVuZ2xpc2gvS29yZWFuL0phcGFuZXNlL2V0Yy4pLgorCisKK0V4dGVybmFsIGNvbW1hbmRzOgorOCAgIFdoZW4gZmlsdGVyaW5nIHRleHQsIHJlZGlyZWN0IHN0ZGVyciBzbyB0aGF0IGl0IGNhbid0IG1lc3MgdXAgdGhlIHNjcmVlbgorICAgIGFuZCBWaW0gZG9lc24ndCBuZWVkIHRvIHJlZHJhdyBpdC4gIEFsc28gZm9yICI6ciAhY21kIi4KKzQgICBTZXQgc2VwYXJhdGUgc2hlbGwgZm9yICI6c2giLCBwaXBpbmcgInJhbmdlIWZpbHRlciIsIHJlYWRpbmcgdGV4dCAiciAhbHMiCisgICAgYW5kIHdyaXRpbmcgdGV4dCAidyAhd2MiLiAoRGV1dHNjaGUpICBBbGxvdyBhcmd1bWVudHMgZm9yIGZhc3Qgc3RhcnQgKGUuZy4KKyAgICAtZikuCis0ICAgQWxsb3cgZGlyZWN0IGV4ZWN1dGlvbiwgd2l0aG91dCB1c2luZyBhIHNoZWxsLgorNCAgIFJ1biBhbiBleHRlcm5hbCBjb21tYW5kIGluIHRoZSBiYWNrZ3JvdW5kLiAgQnV0IGhvdyBhYm91dCBJL08gaW4gdGhlIEdVST8KKyAgICBDYXJlZnVsOiBkb24ndCB0dXJuIFZpbSBpbnRvIGEgc2hlbGwhCis0ICAgQWRkIGZlYXR1cmUgdG8gZGlzYWJsZSB1c2luZyBhIHNoZWxsIG9yIGV4dGVybmFsIGNvbW1hbmRzLgorCisKK011bHRpcGxlIFdpbmRvd3M6Cis3ICAgInZpbSAtb08gZmlsZSAuLi4iIHVzZSBib3RoIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNwbGl0cy4KKzggICBBZGQgQ1RSTC1XIFQ6IGdvIHRvIHRoZSB0b3Agd2luZG93IGluIHRoZSBjb2x1bW4gb2YgdGhlIGN1cnJlbnQgd2luZG93LgorICAgIEFuZCBDVFJMLVcgQjogZ28gdG8gYm90dG9tIHdpbmRvdy4KKzcgICBVc2UgQ1RSTC1XIDxUYWI+LCBsaWtlIGFsdC10YWIsIHRvIHN3aXRjaCBiZXR3ZWVuIGJ1ZmZlcnMuICBSZXBlYXQgPFRhYj4KKyAgICB0byBzZWxlY3QgYW5vdGhlciBidWZmZXIgKG9ubHkgbG9hZGVkIG9uZXM/KSwgPEJTPiB0byBnbyBiYWNrLCA8RW50ZXI+IHRvCisgICAgc2VsZWN0IGJ1ZmZlciwgPEVzYz4gdG8gZ28gYmFjayB0byBvcmlnaW5hbCBidWZmZXIuCis3ICAgQWRkIGEgJ3dpbmZpeHdpZHRoJyBvcHRpb24sIHNpbWlsYXIgdG8gJ3dpbmZpeGhlaWdodCcuCis2ICAgQWRkIGFuIG9wdGlvbiB0byByZXNpemUgdGhlIHNoZWxsIHdoZW4gc3BsaXR0aW5nIGFuZC9vciBjbG9zaW5nIGEgd2luZG93LgorICAgICI6dnNwIiB3b3VsZCBtYWtlIHRoZSBzaGVsbCB3aWRlciBieSBhcyBtYW55IGNvbHVtbnMgYXMgbmVlZGVkIGZvciB0aGUgbmV3CisgICAgd2luZG93LiAgU3BlY2lmeSBhIG1heGltdW0gc2l6ZSAob3IgdXNlIHRoZSBzY3JlZW4gc2l6ZSkuICI6Y2xvc2UiIHdvdWxkCisgICAgc2hyaW5rIHRoZSBzaGVsbCBieSBhcyBtYW55IGNvbHVtbnMgYXMgY29tZSBhdmFpbGFibGUuIChEZW1pcmVsKQorNyAgIFdoZW4gc3RhcnRpbmcgVmltIHNldmVyYWwgdGltZXMsIGluc3RhbnRpYXRlIGEgVmltIHNlcnZlciwgdGhhdCBhbGxvd3MKKyAgICBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBWaW1zLiAgRmVlbHMgbGlrZSBvbmUgVmltIHJ1bm5pbmcgd2l0aAorICAgIG11bHRpcGxlIHRvcC1sZXZlbCB3aW5kb3dzLiAgRXNwLiB1c2VmdWwgd2hlbiBWaW0gaXMgc3RhcnRlZCBmcm9tIGFuIElERQorICAgIHRvby4gIFJlcXVpcmVzIHNvbWUgZm9ybSBvZiBpbnRlciBwcm9jZXNzIGNvbW11bmljYXRpb24uCistICAgU3VwcG9ydCBhIGNvbm5lY3Rpb24gdG8gYW4gZXh0ZXJuYWwgdmlld2VyLiAgQ291bGQgY2FsbCB0aGUgdmlld2VyCisgICAgYXV0b21hdGljYWxseSBhZnRlciBzb21lIHNlY29uZHMgb2Ygbm9uLWFjdGl2aXR5LCBvciB3aXRoIGEgY29tbWFuZC4KKyAgICBBbGxvdyBzb21lIHdheSBvZiByZXBvcnRpbmcgc2Nyb2xsaW5nIGFuZCBjdXJzb3IgcG9zaXRpb25pbmcgaW4gdGhlIHZpZXdlcgorICAgIHRvIFZpbSwgc28gdGhhdCB0aGUgbGluayBiZXR3ZWVuIHRoZSB2aWV3ZWQgYW5kIGVkaXRlZCB0ZXh0IGNhbiBiZSBtYWRlLgorCisKK01hcmtzOgorOCAgIFdoZW4gY3Vyc29yIGlzIGZpcnN0IG1vdmVkIGJlY2F1c2Ugb2Ygc2Nyb2xsaW5nLCBzZXQgYSBtYXJrIGF0IHRoaXMKKyAgICBwb3NpdGlvbi4gIChSaW1vbiBCYXJyKSAgVXNlICctLgorOCAgIEFkZCBhIGNvbW1hbmQgdG8ganVtcCB0byBhIG1hcmsgYW5kIG1ha2UgdGhlIG1vdGlvbiBpbmNsdXNpdmUuIGcnbSBhbmQgZ2BtPworOCAgIFRoZSAnIiBtYXJrIGlzIHNldCB0byB0aGUgZmlyc3QgbGluZSwgZXZlbiB3aGVuIGRvaW5nICI6bmV4dCIgYSBmZXcgdGltZXMuCisgICAgT25seSBzZXQgdGhlICciIG1hcmsgd2hlbiB0aGUgY3Vyc29yIHdhcyByZWFsbHkgbW92ZWQgaW4gYSBmaWxlLgorOCAgIE1ha2UgYGAgYW5kICcnLCB3aGljaCB3b3VsZCBwb3NpdGlvbiB0aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgbWlkZGxlCisgICAgb2YgdGhlIHdpbmRvdywgcmVzdG9yZSB0aGUgb2xkIHRvcGxpbmUgKG9yIHJlbGF0aXZlIHBvc2l0aW9uKSBmcm9tIHdoZW4KKyAgICB0aGUgbWFyayB3YXMgc2V0LgorNyAgIE1ha2UgYSBsaXN0IG9mIGZpbGUgbWFya3MgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuICBGb3IgbGlzdGluZyBhbGwgYnVmZmVycywKKyAgICBtYXRjaGluZyB0YWdzLCBlcnJvcnMsIGV0Yy4gIE5vcm1hbCBjb21tYW5kcyB0byBtb3ZlIGFyb3VuZC4gIEFkZCBjb21tYW5kcworICAgIHRvIGp1bXAgdG8gdGhlIG1hcmsgKGluIGN1cnJlbnQgd2luZG93IG9yIG5ldyB3aW5kb3cpLiAgU3RhcnQgaXQgd2l0aAorICAgICI6YnJvd3NlIG1hcmtzIj8KKzYgICBBZGQgYSBtZW51IHRoYXQgbGlzdHMgdGhlIE1hcmtzIGxpa2UgIjptYXJrcyIuIChBbWVyaWdlKQorOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gZGVsZXRlIG1hcmtzLiAgQ2hhcmxlcyBDYW1wYmVsbCBoYXMgYSBwYXRjaCB0aGF0IGRvZXMKKyAgICB0aGlzIHdpdGggdGhlIG1hcmtjbGVhcigpIGZ1bmN0aW9uICgyMDA0IEphbiA5KS4gIEFuZCB0aGUgIjpkZWxtYXJrIgorICAgIGNvbW1hbmQgKDIwMDQgRmViIDkpCis3ICAgRm9yICI6anVtcHMiLCAiOnRhZ3MiIGFuZCAiOm1hcmtzIiwgZm9yIG5vdCBsb2FkZWQgYnVmZmVycywgcmVtZW1iZXIgdGhlCisgICAgdGV4dCBhdCB0aGUgbWFyay4gIEhpZ2hsaWdodCB0aGUgY29sdW1uIHdpdGggdGhlIG1hcmsuCis3ICAgSGlnaGxpZ2h0IGVhY2ggbWFyayBpbiBzb21lIHdheSAoV2l0aCAiTWFyayIgaGlnaGxpZ2h0IGdyb3VwKS4KKyAgICBPciBkaXNwbGF5IG1hcmtzIGluIGEgc2VwYXJhdGUgY29sdW1uLCBsaWtlICdudW1iZXInIGRvZXMuCis3ICAgVXNlIGQibSB0byBkZWxldGUgcmVjdGFuZ3VsYXIgYXJlYSBmcm9tIGN1cnNvciB0byBtYXJrIG0gKGxpa2UgVmlsZSdzIFxtCisgICAgY29tbWFuZCkuCis3ICAgVHJ5IHRvIGtlZXAgbWFya3MgaW4gdGhlIHNhbWUgcG9zaXRpb24gd2hlbjoKKyAgICAtIHJlcGxhY2luZyB3aXRoIGEgbGluZSBicmVhaywgbGlrZSBpbiAiOnMvcGF0L15NLyIsIG1vdmUgbWFya3MgYWZ0ZXIgdGhlCisgICAgICBsaW5lIGJyZWFrIGNvbHVtbiB0byB0aGUgbmV4dCBsaW5lLiAoQWNldmVkbykKKyAgICAtIGluc2VydGluZy9kZWxldGluZyBjaGFyYWN0ZXJzIGluIGEgbGluZS4KKzUgICBJbmNsdWRlIG1hcmtzIGZvciBzdGFydC9lbmQgb2YgdGhlIGN1cnJlbnQgd29yZCBhbmQgc2VjdGlvbi4gIFVzZWZ1bCBpbgorICAgIG1hcHBpbmdzLgorNiAgIEFkZCAidW5uYW1lZCBtYXJrIiBmZWF0dXJlOiBMaWtlIG1hcmtzIGZvciB0aGUgIjpnIiBjb21tYW5kLCBidXQgcGxhY2UgYW5kCisgICAgdW5wbGFjZSB0aGVtIHdpdGggY29tbWFuZHMgYmVmb3JlIGRvaW5nIHNvbWV0aGluZyB3aXRoIHRoZSBsaW5lcy4KKyAgICBIaWdobGlnaHQgdGhlIG1hcmtlZCBsaW5lcyBzb21laG93LgorCisKK0RpZ3JhcGhzOgorNyAgIE1ha2UgImdhIiBzaG93IHRoZSBkaWdyYXBoIGZvciBhIGNoYXJhY3RlciwgaWYgaXQgZXhpc3RzLgorICAgIEFsc28gdGhlIGtleW1hcD8KKy0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIGVudGVyICJyPEMtRT4iIGFuZCAicjxDLVk+IiAoZ2V0IGNoYXJhY3RlciBmcm9tIGxpbmUKKyAgICBiZWxvdy9hYm92ZSkuCistICAgVXNlIGRpZ3JhcGggdGFibGUgdG8gdGVsbCBWaW0gYWJvdXQgdGhlIGNvbGxhdGluZyBzZXF1ZW5jZSBvZiBzcGVjaWFsCisgICAgY2hhcmFjdGVycz8KKzggICBBZGQgY29tbWFuZCB0byByZW1vdmUgKGFsbCkgZGlncmFwaHMuIChCcm93bikKKzcgICBTdXBwb3J0IGRpZmZlcmVudCBzZXRzIG9mIGRpZ3JhcGhzIChkZXBlbmRpbmcgb24gdGhlIGNoYXJhY3RlciBzZXQ/KS4gIEF0CisgICAgbGVhc3QgTGF0aW4xL1VuaWNvZGUsIExhdGluLTIsIE1TLURPUyAoZXNwLiBmb3IgV2luMzIpLgorCisKK1dyaXRpbmcgZmlsZXM6CistICAgSW4gdmltX3JlbmFtZSgpLCBzaG91bGQgbG9jayAiZnJvbSIgZmlsZSB3aGVuIGRlbGV0aW5nICJ0byIgZmlsZSBmb3IKKyAgICBzeXN0ZW1zIG90aGVyIHRoYW4gQW1pZ2EuICBBdm9pZHMgcHJvYmxlbXMgd2l0aCB1bmV4cGVjdGVkIGxvbmduYW1lIHRvCisgICAgc2hvcnRuYW1lIGNvbnZlcnNpb24uCis4ICAgd3JpdGUgbWNoX2lzZGV2aWNlKCkgZm9yIEFtaWdhLCBNYWMsIFZNUywgZXRjLgorOCAgIFdoZW4gYXBwZW5kaW5nIHRvIGEgZmlsZSwgVmltIHNob3VsZCBhbHNvIG1ha2UgYSBiYWNrdXAgYW5kIGEgJ3BhdGNobW9kZScKKyAgICBmaWxlLgorOCAgICdiYWNrdXBza2lwJyBkb2Vzbid0IHdyaXRlIGEgYmFja3VwIGZpbGUgYXQgYWxsLCBhIGJpdCBkYW5nZXJvdXMgZm9yIHNvbWUKKyAgICBhcHBsaWNhdGlvbnMuICBBZGQgJ2JhY2t1cGVsc2V3aGVyZScgdG8gd3JpdGUgYSBiYWNrdXAgZmlsZSBpbiBhbm90aGVyCisgICAgZGlyZWN0b3J5PyAgT3IgYWRkIGEgZmxhZyB0byAnYmFja3VwZGlyJz8KKzcgICBUaGUgJ2RpcmVjdG9yeScgb3B0aW9uIHN1cHBvcnRzIGNoYW5naW5nIHBhdGggc2VwYXJhdG9ycyB0byAiJSIgdG8gbWFrZQorICAgIGZpbGUgbmFtZXMgdW5pcXVlLCBhbHNvIHN1cHBvcnQgdGhpcyBmb3IgJ2JhY2t1cGRpcicuIChNaWtvbGFqIE1hY2hvd3NraSkKKzYgICBBZGQgYW4gb3B0aW9uIHRvIHdyaXRlIGEgbmV3LCBudW1iZXJlZCwgYmFja3VwIGZpbGUgZWFjaCB0aW1lLiAgTGlrZQorICAgICdwYXRjaG1vZGUnLCBlLmcuLCAnYmFja3VwbW9kZScuCis2ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB3cml0ZSAncGF0Y2htb2RlJyBmaWxlcyB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgRS5nLiwgIjpzZXQgcGF0Y2htb2RlPX4vYmFja3Vwcy8qLm9yaWciLiAoVGhvbWFzKQorNiAgIEFkZCBhbiBvcHRpb24gdG8gcHJlcGVuZCBzb21ldGhpbmcgdG8gdGhlIGJhY2t1cCBmaWxlIG5hbWUuICBFLmcuLCAiIyIuCisgICAgT3IgbWF5YmUgYWxsb3cgYSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIGJhY2t1cCBmaWxlIG5hbWU/Cis4ICAgT25seSBtYWtlIGEgYmFja3VwIHdoZW4gb3ZlcndyaXRpbmcgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZS4gQXZvaWRzCisgICAgbG9zaW5nIHRoZSBvcmlnaW5hbCB3aGVuIHdyaXRpbmcgdHdpY2UuIChTbG9vdG1hbikKKzcgICBPbiBub24tVW5peCBtYWNoaW5lcywgYWxzbyBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGZpbGUgaW4gc29tZSBzaXR1YXRpb25zCisgICAgKGZpbGUgc3lzdGVtIGZ1bGwsIGl0J3MgYSBsaW5rIG9uIGFuIE5GUyBwYXJ0aXRpb24pLgorNyAgIFdoZW4gZWRpdGluZyBhIGZpbGUsIGNoZWNrIHRoYXQgaXQgaGFzIGJlZW4gY2hhbmdlIG91dHNpZGUgb2YgVmltIG1vcmUKKyAgICBvZnRlbiwgbm90IG9ubHkgd2hlbiB3cml0aW5nIG92ZXIgaXQuICBFLmcuLCBhdCB0aGUgdGltZSB0aGUgc3dhcCBmaWxlIGlzCisgICAgZmx1c2hlZC4gIE9yIGV2ZXJ5IHRlbiBzZWNvbmRzIG9yIHNvICh1c2UgdGhlIHRpbWUgb2YgZGF5LCBjaGVjayBpdCBiZWZvcmUKKyAgICB3YWl0aW5nIGZvciBhIGNoYXJhY3RlciB0byBiZSB0eXBlZCkuCis4ICAgV2hlbiBhIGZpbGUgd2FzIGNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkLCBzaG93IHRoaXMgaW4gdGhlIHN0YXR1cworICAgIGxpbmUgb2YgdGhlIHdpbmRvdywgbGlrZSAiW3RpbWVdIi4KKyAgICBNYWtlIGl0IGVhc2llciB0byByZWxvYWQgYWxsIG91dGRhdGVkIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBjaGFuZ2VzLgorICAgIEF1dG9tYXRpYyBhbmQvb3Igd2l0aCBhIGNvbW1hbmQuCisKKworU3Vic3RpdHV0ZToKKzggICBNYWtlIGl0IGVhc2llciB0byByZXBsYWNlIGluIGFsbCBmaWxlcyBpbiB0aGUgYXJndW1lbnQgbGlzdC4gRS5nLjoKKyAgICAiOmFyZ3N1Yi9vbGR3b3JkL25ld3dvcmQvIi4gIFdvcmtzIGxpa2UgIjphcmdkbyAlcy9vbGR3b3JkL25ld3dvcmQvZ3x3Ii4KKy0gICA6cy8vL3AgcHJpbnRzIHRoZSBsaW5lIGFmdGVyIGEgc3Vic3RpdHV0aW9uLgorLSAgIFdpdGggOnMvLy9jIHJlcGxhY2UgXCYsIH4sIGV0Yy4gd2hlbiBzaG93aW5nIHRoZSByZXBsYWNlbWVudCBwYXR0ZXJuLgorOCAgIFdpdGggOnMvLy9jIGFsbG93IHNjcm9sbGluZyBob3Jpem9udGFsbHkgd2hlbiAnbm93cmFwJyBpcyBlZmZlY3RpdmUuCisgICAgQWxzbyBhbGxvdyBhIGNvdW50IGJlZm9yZSB0aGUgc2Nyb2xsaW5nIGtleXMuCistICAgQWRkIG51bWJlciBvcHRpb24gdG8gIjpzLy8yIjogcmVwbGFjZSBzZWNvbmQgb2NjdXJyZW5jZSBvZiBzdHJpbmc/IE9yOgorICAgIDpzLy8vTiBzdWJzdGl0dXRlcyBOIHRpbWVzLgorLSAgIEFkZCBhbnN3ZXJzIHRvICI6c3Vic3RpdHV0ZSIgd2l0aCAnYycgZmxhZywgdXNlZCBpbiBhICI6Z2xvYmFsIiwgZS5nLjoKKyAgICAiOmcvcGF0MS9zL3BhdDIvcGF0My9jZyI6ICdBJyBkbyBhbGwgcmVtYWluaW5nIHJlcGxhY2VtZW50cywgJ1EnIGRvbid0IGRvCisgICAgYW55IHJlcGxhY2VtZW50cywgJ3UnIHVuZG8gbGFzdCBzdWJzdGl0dXRpb24uCis3ICAgU3Vic3RpdHV0ZSBpbiBhIGJsb2NrIG9mIHRleHQuICBVc2Uge2xpbmV9Lntjb2x1bW59IG5vdGF0aW9uIGluIGFuIEV4CisgICAgcmFuZ2UsIGUuZy46ICI6MS4zLCQuNXMiIG1lYW5zIHRvIHN1YnN0aXR1dGUgZnJvbSBsaW5lIDEgY29sdW1uIDMgdG8gdGhlCisgICAgbGFzdCBsaW5lIGNvbHVtbiA1LgorNSAgIEFkZCBjb21tYW5kcyB0byBib29rbWFyayBsaW5lcywgZGlzcGxheSBib29rbWFya3MsIHJlbW92ZSBib29rbWFya3MsCisgICAgb3BlcmF0ZSBvbiBsaW5lcyB3aXRoIGJvb2ttYXJrcywgZXRjLiAgTGlrZSAiOmdsb2JhbCIgYnV0IHdpdGggdGhlCisgICAgcG9zc2liaWxpdHkgdG8ga2VlcCB0aGUgYm9va21hcmtzIGFuZCB1c2UgdGhlbSB3aXRoIHNldmVyYWwgY29tbWFuZHMuCisgICAgKFN0YW5pc2xhdiBTaXRhcikKKworCitNb3VzZSBzdXBwb3J0OgorNyAgIFdpbjMyOiBBZGQgcGF0Y2ggZm9yIDUtYnV0dG9uIG1vdXNlLiAoTWljaGFlbCBHZWRkZXMgMjAwMSBOb3YgMjYpCis4ICAgQWRkICdvJyBmbGFnIHRvICdtb3VzZSc/Cis3ICAgQmUgYWJsZSB0byBzZXQgYSAnbW91c2VzaGFwZScgZm9yIHRoZSBwb3B1cCBtZW51LgorOCAgIEFkZCAnbW91c2UnIGZsYWcsIHdoaWNoIHNldHMgYSBiZWhhdmlvciBsaWtlIFZpc3VhbCBtb2RlLCBidXQgYXV0b21hdGljCisgICAgeWFua2luZyBhdCB0aGUgYnV0dG9uLXVwIGV2ZW50LiAgT3IgbGlrZSBTZWxlY3QgbW9kZSwgYnV0IHR5cGluZyBnZXRzIHlvdQorICAgIG91dCBvZiBTZWxlY3QgbW9kZSwgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlIHRleHQuIChCaGFza2FyKQorNyAgIENoZWNrb3V0IHN5c21vdXNlKCkgZm9yIEZyZWVCU0QgY29uc29sZSBtb3VzZSBzdXBwb3J0LgorLSAgIEltcGxlbWVudCBtb3VzZSBzdXBwb3J0IGZvciB0aGUgQW1pZ2EgY29uc29sZS4KKy0gICBVc2luZyByaWdodCBtb3VzZSBidXR0b24gdG8gZXh0ZW5kIGEgYmxvY2t3aXNlIHNlbGVjdGlvbiBzaG91bGQgYXR0YWNoIHRvCisgICAgdGhlIG5lYXJlc3QgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUgKGZvdXIgcG9zc2libGUgY29ybmVycykuCistICAgUHJlY2VkZSBtb3VzZSBjbGljayBieSBhIG51bWJlciB0byBzaW11bGF0ZSBkb3VibGUgY2xpY2tzPyE/CistICAgV2hlbiBtb3VzZSBjbGljayBhZnRlciAncicgY29tbWFuZCwgZ2V0IGNoYXJhY3RlciB0aGF0IHdhcyBwb2ludGVkIHRvLgorCisKK0NyeXB0IGFuZCBzZWN1cml0eToKKzggICBBbHNvIGNyeXB0IHRoZSBzd2FwZmlsZSwgZWFjaCBibG9jayBzZXBhcmF0ZWx5LiAgQ2hhbmdlIG1mX3dyaXRlKCkgYW5kCisgICAgbWZfcmVhZCgpLiAgSG93IHRvIGdldCBiX3Bfa2V5IHRvIHRoZXNlIGZ1bmN0aW9ucz8KKzcgICBTdXBwb3J0IGEgc3Ryb25nZXIgZW5jcnlwdGlvbi4gIEphc29uIEhvbHQgaW1wbGVtZW50ZWQgQUVTIChNYXkgNiAyMDAzKS4KKzggICBMb2NrIGFsbCB1c2VkIG1lbW9yeSBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHN3YXBwZWQgdG8gZGlzayAodW5jcnlwdGVkKS4KKyAgICBQYXRjaCBieSBKYXNvbiBIb2x0LCAyMDAzIE1heSAyMy4KKworCitBcmd1bWVudCBsaXN0OgorNiAgIEFkZCBjb21tYW5kIHRvIHB1dCBhbGwgZmlsZW5hbWVzIGZyb20gdGhlIHRhZyBmaWxlcyBpbiB0aGUgYXJndW1lbnQgbGlzdC4KKyAgICBXaGVuIGdpdmVuIGFuIGFyZ3VtZW50LCBvbmx5IHVzZSB0aGUgZmlsZXMgd2hlcmUgdGhhdCBhcmd1bWVudCBtYXRjaGVzCisgICAgKGxpa2UgYGdyZXAgLWwgaWRlbnRgKSBhbmQganVtcCB0byB0aGUgZmlyc3QgbWF0Y2guCis2ICAgQWRkIGNvbW1hbmQgdG8gZm9ybSBhbiBhcmdzIGxpc3QgZnJvbSBhbGwgdGhlIGJ1ZmZlcnM/CisKKworUmVnaXN0ZXJzOgorOCAgIERvbid0IGRpc3BsYXkgZW1wdHkgcmVnaXN0ZXJzIHdpdGggIjpkaXNwbGF5Ii4gKEV0aWVubmUpCis4ICAgTWFrZSB0aGUgIyByZWdpc3RlciB3cml0YWJsZSwgc28gdGhhdCBpdCBjYW4gYmUgcmVzdG9yZWQgYWZ0ZXIganVtcGluZworICAgIGFyb3VuZCBpbiB3aW5kb3dzLgorOCAgIEFkZCBwdXQgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXMgZXhpc3RpbmcgdGV4dC4gIFNob3VsZCBhbHNvIHdvcmsgZm9yCisgICAgYmxvY2tzLiAgVXNlZnVsIHRvIG1vdmUgdGV4dCBhcm91bmQgaW4gYSB0YWJsZS4gIFdvcmtzIGxpa2UgdXNpbmcgIlIgXlIgciIKKyAgICBmb3IgZXZlcnkgbGluZS4KKzYgICBXaGVuIHlhbmtpbmcgaW50byB0aGUgdW5uYW1lZCByZWdpc3RlcnMgc2V2ZXJhbCB0aW1lcywgc29tZWhvdyBtYWtlIHRoZQorICAgIHByZXZpb3VzIGNvbnRlbnRzIGFsc28gYXZhaWxhYmxlIChsaWtlIGl0J3MgZG9uZSBmb3IgZGVsZXRpbmcpLiAgV2hhdAorICAgIHJlZ2lzdGVyIG5hbWVzIHRvIHVzZT8gIGciMSwgZyIyLCBldGMuPworLSAgIFdoZW4gYXBwZW5kaW5nIHRvIGEgcmVnaXN0ZXIsIGFsc28gcmVwb3J0IHRoZSB0b3RhbCByZXN1bHRpbmcgbnVtYmVyIG9mCisgICAgbGluZXMuICBPciBqdXN0IHNheSAiOTkgbW9yZSBsaW5lcyB5YW5rZWQiLCBhZGQgdGhlICJtb3JlIi4KKy0gICBXaGVuIGluc2VydGluZyBhIHJlZ2lzdGVyIGluIEluc2VydCBtb2RlIHdpdGggQ1RSTC1SLCBkb24ndCBpbnNlcnQgY29tbWVudAorICAgIGxlYWRlciB3aGVuIGxpbmUgd3JhcHM/CistICAgVGhlICI6QHIiIGNvbW1hbmRzIHNob3VsZCB0YWtlIGEgcmFuZ2UgYW5kIGV4ZWN1dGUgdGhlIHJlZ2lzdGVyIGZvciBlYWNoCisgICAgbGluZSBpbiB0aGUgcmFuZ2UuCistICAgQWRkICJQIiBjb21tYW5kIHRvIGluc2VydCBjb250ZW50cyBvZiB1bm5hbWVkIHJlZ2lzdGVyLCBtb3ZlIHNlbGVjdGVkIHRleHQKKwl0byBwb3NpdGlvbiBvZiBwcmV2aW91cyBkZWxldGVkICh0byBzd2FwIGZvbyBhbmQgYmFyIGluICIgKyBmb28iKQorOCAgIFNob3VsZCBiZSBhYmxlIHRvIHlhbmsgYW5kIGRlbGV0ZSBpbnRvIHRoZSAiLyByZWdpc3Rlci4KKyAgICBIb3cgdG8gdGFrZSBjYXJlIG9mIHRoZSBmbGFncyAob2Zmc2V0LCBtYWdpYyk/Cis3ICAgQWRkICEgcmVnaXN0ZXIsIGZvciBzaGVsbCBjb21tYW5kcy4gKHBhdGNoIGZyb20gR3JlbmllKQorCitEZWJ1ZyBtb2RlOgorNyAgIEFkZCBzb21ldGhpbmcgdG8gZW5hYmxlIGRlYnVnZ2luZyB3aGVuIGEgcmVtb3RlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCis4ICAgQWRkIGJyZWFrcG9pbnRzIGZvciBzZXR0aW5nIGFuIG9wdGlvbgorOCAgIEFkZCBicmVha3BvaXRzIGZvciBhc3NpZ25pbmcgdG8gYSB2YXJpYWJsZS4KKzcgICBBZGQgYSB3YXRjaHBvaW50IGluIHRoZSBkZWJ1ZyBtb2RlOiBBbiBleHByZXNzaW9uIHRoYXQgYnJlYWtzIGV4ZWN1dGlvbgorICAgIHdoZW4gZXZhbHVhdGluZyB0byBub24temVyby4KKzcgICBTdG9yZSB0aGUgaGlzdG9yeSBmcm9tIGRlYnVnIG1vZGUgaW4gdmltaW5mby4KKzcgICBNYWtlIHRoZSBkZWJ1ZyBtb2RlIGhpc3RvcnkgYXZhaWxhYmxlIHdpdGggaGlzdGdldCgpIGV0IGFsLgorCisKK1ZhcmlvdXMgaW1wcm92ZW1lbnRzOgorOCAgIEFkZCAiOnJlbmFtZSIgY29tbWFuZDogcmVuYW1lIHRoZSBmaWxlIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgcmVuYW1lCisgICAgdGhlIGJ1ZmZlci4gIEJ1ZmZlciBtYXkgYmUgbW9kaWZpZWQuCis3ICAgQWRkIHRoZSBNelNjaGVtZSBpbnRlcmZhY2UuICBQYXRjaCBvbiBodHRwOi8vaWFtcGhldC5ubS5ydS9zY2hlbWUvCisgICAgKFNlcmdleSBLaG9yZXYpCis2ICAgSW4gdGhlIHF1aWNrZml4IHdpbmRvdyBzdGF0dXNsaW5lIGFkZCB0aGUgY29tbWFuZCB1c2VkIHRvIGdldCB0aGUgbGlzdCBvZgorICAgIGVycm9ycywgZS5nLiAiOm1ha2UgZm9vIiwgIjpncmVwIHNvbWV0aGluZyAqLmMiLgorNiAgIFB5dGhvbiBpbnRlcmZhY2U6IGFkZCB2aW0ubWVzc2FnZSgpIGZ1bmN0aW9uLiAoTWljaGFsIFZpdGVjZWssIDIwMDIgTm92IDUpCis3ICAgU3VwcG9ydCB1c2luZyAiOnZlcnQiIHdpdGggVXNlciBjb21tYW5kcy4gIEFkZCBleHBhbmRhYmxlIGl0ZW1zIDx2ZXJ0Pi4KKyAgICBEbyB0aGUgc2FtZSBmb3IgIjpicm93c2UiIGFuZCAiOmNvbmZpcm0iPworICAgIEZvciAiOnNpbGVudCIgYW5kICI6ZGVidWciIGFwcGx5IHRvIHRoZSB3aG9sZSB1c2VyIGNvbW1hbmQuCis3ICAgQWxsb3cgYSB3aW5kb3cgbm90IHRvIGhhdmUgYSBzdGF0dXNsaW5lLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGEKKyAgICB3aW5kb3cgYXMgYSBidWZmZXItdGFiIHNlbGVjdGlvbi4KKzcgICBBZGQgYW4gaW52aXNpYmxlIGJ1ZmZlciB3aGljaCBjYW4gYmUgZWRpdGVkLiAgRm9yIHVzZSBpbiBzY3JpcHRzIHRoYXQgd2FudAorICAgIHRvIG1hbmlwdWxhdGUgdGV4dCB3aXRob3V0IGNoYW5naW5nIHRoZSB3aW5kb3cgbGF5b3V0LgorOCAgIEFkZCBhIGNvbW1hbmQgdG8gcmV2ZXJ0IHRvIHRoZSBzYXZlZCB2ZXJzaW9uIG9mIGZpbGU7IHVuZG8gb3IgcmVkbyB1bnRpbAorICAgIGFsbCBjaGFuZ2VzIGFyZSBnb25lLgorOCAgIE1ha2UgJ3N0YXR1c2xpbmUnIGxvY2FsLCBzbyB0aGF0IGVhY2ggd2luZG93IGNhbiBoYXZlIGEgZGlmZmVyZW50IHZhbHVlLgorICAgIEJ1dCBzaG91bGQgaXQgYWxzbyBiZSBsb2NhbCB0byBhIGJ1ZmZlcj8gKFllZ2FwcGFuIExha3NobWFuYW4gaGFzIGEgcGF0Y2gsCisgICAgMjAwMiBmZWIgMTUpCis3ICAgQWRkIGEgIjpjcGZpbGUiLCBnbyBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uIGFzICI6Y25maWxlIi4KKzYgICAidmltIC1xIC0iIHNob3VsZCByZWFkIHRoZSBsaXN0IG9mIGVycm9ycyBmcm9tIHN0ZGluLiAoR2F1dGFtIE11ZHVudXJpKQorOCAgIEluIHRoZSBnemlwIHBsdWdpbiwgYWxzbyByZWNvZ25pemUgKi5nei5vcmlnLCAqLmd6LmJhaywgZXRjLiAgTGlrZSBpdCdzCisgICAgZG9uZSBmb3IgZmlsZXR5cGUgZGV0ZWN0aW9uLiAgUGF0Y2ggZnJvbSBXYWx0ZXIgQnJpc2NvZSwgMjAwMyBKdWwgMS4KKzggICBBZGQgIi0tcmVtb3RlLWZhaWwiOiBXaGVuIGNvbnRhY3RpbmcgdGhlIHNlcnZlciBmYWlscywgZXhpdCBWaW0uCisgICAgQWRkICItLXJlbW90ZS1zZWxmIjogV2hlbiBjb250YWN0aW5nIHRoZSBzZXJ2ZXIgZmFpbHMsIGRvIGl0IGluIHRoaXMgVmltLgorICAgIE92ZXJydWxlcyB0aGUgZGVmYXVsdCBvZiAiLS1yZW1vdGUtc2VuZCIgdG8gZmFpbCBhbmQgIi0tcmVtb3RlIiB0byBkbyBpdAorICAgIGluIHRoaXMgVmltLgorOCAgIFdoZW4gVmltIHdhcyBzdGFydGVkIHdpdGhvdXQgYSBzZXJ2ZXIsIG1ha2UgaXQgcG9zc2libGUgdG8gc3RhcnQgb25lLCBhcworICAgIGlmIHRoZSAiLS1zZXJ2ZXJuYW1lIiBhcmd1bWVudCB3YXMgZ2l2ZW4uICI6c3RhcnRzZXJ2ZXIgPG5hbWU+Ij8KKzggICBObyBhZGRyZXNzIHJhbmdlIGNhbiBiZSB1c2VkIGJlZm9yZSB0aGUgY29tbWFuZCBtb2RpZmllcnMuICBUaGlzIG1ha2VzCisgICAgdGhlbSBkaWZmaWN1bHQgdG8gdXNlIGluIGEgbWVudSBmb3IgVmlzdWFsIG1vZGUuICBBY2NlcHQgdGhlIHJhbmdlIGFuZAorICAgIGhhdmUgaXQgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBjb21tYW5kLgorOCAgIEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gc2V0ICdmaWxlZm9ybWF0cycgdG8gZm9yY2UgYSBmb3JtYXQgYW5kIHN0cmlwIG90aGVyCisgICAgQ1IgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCBmb3IgImRvcyIgZmlsZXMgcmVtb3ZlIENSIGNoYXJhY3RlcnMgYXQgdGhlCisgICAgZW5kIG9mIHRoZSBsaW5lLCBzbyB0aGF0IGEgZmlsZSB3aXRoIG1peGVkIGxpbmUgZW5kaW5ncyBpcyBjbGVhbmVkIHVwLgorICAgIFRvIGp1c3Qgbm90IGRpc3BsYXkgdGhlIENSIGNoYXJhY3RlcnM6IEFkZCBhIGZsYWcgdG8gJ2Rpc3BsYXknPworNyAgIEFkZCBhICItQCBmaWxlbGlzdCIgYXJndW1lbnQ6IHJlYWQgZmlsZSBuYW1lcyBmcm9tIGEgZmlsZS4gKERhdmlkIEtvdGNoYW4KKyAgICBoYXMgYSBwYXRjaCBmb3IgaXQpCis3ICAgU29tZSBjb21waWxlcnMgZ2l2ZSBlcnJvciBtZXNzYWdlcyBpbiB3aGljaCB0aGUgZmlsZSBuYW1lIGRvZXMgbm90IGhhdmUgYQorICAgIHBhdGguICBCZSBhYmxlIHRvIHNwZWNpZnkgdGhhdCAncGF0aCcgaXMgdXNlZCBmb3IgdGhlc2UgZmlsZXMuCis4ICAgQWRkIHRlcm0gZW50cmllcyBmb3IgZnVuY3Rpb24ga2V5cyBvbiB4dGVybSB3aXRoIGFsdCBhbmQgY3RybCAobmV3IGluIHBsCisgICAgOTQpLiAgRS5nLiwgQ29udHJvbCBhZGRzICI7NSIgaW4gIjxFc2M+WzIwOzV+Ii4gIEZpbmQgYSBnZW5lcmljIHdheSB0bworICAgIHByZXBlbmQgYSBtb2RpZmllciBpbiBjb25zb2xlIG1vZGUsIHRvIGF2b2lkIGhhdmluZyB0byBzcGVjaWZ5IGVhY2gKKyAgICBpbmRpdmlkdWFsIG1vZGlmaWVkIGtleS4KKyAgICBTdGV2ZSBXYWxsIGhhcyBhIHBhdGNoICgyMDAyIE1hciAxMikgZm9yIGFkZGluZyBmdW5jdGlvbiBrZXlzIHVwIHRvIDM3LAorICAgIHdpdGggbW9kaWZpZXJzLgorNyAgIFh0ZXJtIHNlbmRzIDxFc2M+TzNGIGZvciA8TS1FbmQ+LiAgU2ltaWxhcmx5IGZvciBvdGhlciA8TS1Ib21lPiwgPE0tTGVmdD4sCisgICAgZXRjLiAgQ29tYmluYXRpb25zIG9mIEFsdCwgQ3RybCBhbmQgU2hpZnQgYXJlIGFsc28gcG9zc2libGUuICBSZWNvZ25pemUKKyAgICB0aGVzZSB0byBhdm9pZCBpbnNlcnRpbmcgdGhlIHJhdyBieXRlIHNlcXVlbmNlLCBoYW5kbGUgbGlrZSB0aGUga2V5CisgICAgd2l0aG91dCBtb2RpZmllciAodW5sZXNzIG1hcHBlZCkuCis4ICAgQWRkICI6YnJlYWtkZWwgKiI6IGRlbGV0ZSBhbGwgYnJlYWtwb2ludHMuCis3ICAgU3VwcG9ydCAiOmJyb3dzZSBlZGl0IiBpbiBjb25zb2xlLCB1c2luZyBleHBsb3Jlci52aW0/Cis2ICAgQWRkICJnRyI6IGxpa2Ugd2hhdCAiZ2oiIGlzIHRvICJqIjogZ28gdG8gdGhlIE4ndGggd2luZG93IGxpbmUuCis4ICAgQWRkIGNvbW1hbmQgbGlrZSAiOm5vcm1hbCIgdGhhdCBhY2NlcHRzIDxLZXk+IG5vdGF0aW9uIGxpa2UgIjptYXAiLgorOSAgIFN1cHBvcnQgQUNMcyBvbiBtb3JlIHN5c3RlbXMuCis3ICAgQWRkIE1vZGVNc2dWaXN1YWwsIE1vZGVNc2dJbnNlcnQsIGV0Yy4gc28gdGhhdCBlYWNoIG1vZGUgbWVzc2FnZSBjYW4gYmUKKyAgICBoaWdobGlnaHRlZCBkaWZmZXJlbnRseS4KKzggICBBbGxvdyB1c2luZyAiKioiIGFzIGEgd2lsZGNhcmQgaW4gY29tbWFuZHMgbGlrZSAiOm5leHQiIGFuZCAiOmFyZ3MiLgorOCAgIFByb3ZpZGUgYSB3YXkgdG8gYXZvaWQgd2lsZGNhcmQgZXhwYW5zaW9uLiAgVXNlIGRvdWJsZSBxdW90ZXMsIGxpa2UgaW4gdGhlCisgICAgc2hlbGw/ICA6ZWRpdCAibXlbZmlsZV0udHh0IiAgKGN1cnJlbnRseSB3b3JrcyBpZiB0aGVyZSBpcyBubyAibXlmLnR4dCIpCis3ICAgQWRkIGEgbWVzc2FnZSBhcmVhIGZvciB0aGUgdXNlci4gIFNldCBzb21lIG9wdGlvbiB0byByZXNlcnZlIHNwYWNlIChhYm92ZQorICAgIHRoZSBjb21tYW5kIGxpbmU/KS4gIFVzZSBhbiAiOmVjaG91c2VyIiBjb21tYW5kIHRvIGRpc3BsYXkgdGhlIG1lc3NhZ2UKKyAgICAodHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgc3BhY2UpLgorNyAgIEFkZCAlcyB0byAna2V5d29yZHByZyc6IHJlcGxhY2Ugd2l0aCB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuIChaZWxsbmVyKQorOCAgIFN1cHBvcnQgcHJpbnRpbmcgb24gVW5peC4gIENhbiB1c2UgImxwYW5zaS5jIiBhcyBhbiBleGFtcGxlLiAoQm9va291dCkKKzggICBBZGQgcHV0IGNvbW1hbmQgdGhhdCByZXBsYWNlcyB0aGUgdGV4dCB1bmRlciBpdC4gIEVzcC4gZm9yIGJsb2Nrd2lzZQorICAgIFZpc3VhbCBtb2RlLgorNyAgIEVuaGFuY2UgdGVybXJlcG9uc2Ugc3R1ZmY6IEFkZCB0X0NWKD8pOiBwYXR0ZXJuIG9mIHRlcm0gcmVzcG9uc2UsIHVzZQorICAgIHJlZ2V4cDogIlxlXFtbPj9dWzAtOTtdKmMiLCBidXQgb25seSBjaGVjayBqdXN0IGFmdGVyIHNlbmRpbmcgdF9SVi4KKzcgICBBZGQgImd8IiBjb21tYW5kOiBtb3ZlIHRvIE4ndGggY29sdW1uIGZyb20gdGhlIGxlZnQgbWFyZ2luIChhZnRlciB3cmFwcGluZworICAgIGFuZCBhcHBseWluZyAnbGVmdGNvbCcpLiAgV29ya3MgYXMgInwiIGxpa2Ugd2hhdCAiZzAiIGlzIHRvICIwIi4KKzcgICBBZGQgcGF0Y2ggZnJvbSBXYWxsIGZvciB0aGlzIG9uZSAoIH4vTWFpbC9vbGRtYWlsL3dhbGwvaW4uMDAwMTkgKToKKyAgICAnZmxpcGNhc2UnIHZhcmlhYmxlOiB1cHBlci9sb3dlcmNhc2UgcGFpcnMuCisgICAgSW5zZXJ0IGNvbW1hJ3MgYmV0d2VlbiBwYWlycyBhbmQgYWxsb3cgYSByYW5nZSwgbWFrZSBpdCBsb29rIGxpa2UKKyAgICAnaXNmbmFtZScuICBFLmcuICI6c2V0IGZsaXBjYXNlPWEtekEtWix4WCwyMy0zMzoxNDMtMTUzIi4gIFRoZSBjb2xvbiB0bworICAgIHNlcGFyYXRlIHRoZSBmcm9tIGFuZCB0byBwYXJ0IGlzIG9wdGlvbmFsLgorNyAgIFN1cHBvcnQgc2V0dGluZyAnZXF1YWxwcmcnIHRvIGEgdXNlciBmdW5jdGlvbiBuYW1lLgorOSAgIEFkZCBjdXJzb3ItY29sdW1uIGhpZ2hsaWdodGluZy4gIEVuYWJsZSBpdCB3aXRoICdjdXJzb3Jjb2x1bW4nIG9wdGlvbiwgc2V0CisgICAgaGlnaGxpZ2h0aW5nIHdpdGggIkN1cnNvckNvbHVtbiIgZ3JvdXAuICBVc2VmdWwgZm9yIGFsaWduaW5nIHRleHQuCisgICAgQWxzbyBjdXJzb3Itcm93IGhpZ2hsaWdodGluZy4KKyAgICBQYXRjaCBmcm9tIFlhc3VoaXJvIE1hdHN1bW90byBmb3IgdW5kZXJsaW5pbmcgdGhlIGN1cnNvciBsaW5lLCAyMDA0IE1hciAyNC4KKyAgICBBbHRlcm5hdGllOiB3aGVuICdudW1iZXInIGlzIHNldCBoaWdobGlnaHQgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBsaW5lLgorNyAgIEhpZ2hsaWdodCB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kLW9mLWxpbmUgZGlmZmVyZW50bHkuCis3ICAgV2hlbiAnd2hpY2h3cmFwJyBjb250YWlucyAibCIsICIkZGwiIHNob3VsZCBqb2luIGxpbmVzPworOCAgIEluY2x1ZGUgYSBjb25uZWN0aW9uIHRvIGFuIGV4dGVybmFsIHByb2dyYW0gdGhyb3VnaCBhIHBpcGU/ICBTZWUgcGF0Y2hlcworICAgIGZyb20gRmVsYmluZ2VyIGZvciBhIG1hdGhlbWF0aWNhIGludGVyZmFjZS4KKyAgICBPciB1c2UgZW1hY3Mgc2VydmVyIGtpbmQgb2YgdGhpbmc/Cis4ICAgQWRkIGFuIGFyZ3VtZW50IHRvIGNvbmZpZ3VyZSB0byB1c2UgJENGTEFHUyBhbmQgbm90IG1vZGlmeSBpdD8gKE1vb25leSkKKzggICBFbmFibGluZyBmZWF0dXJlcyBpcyBhIG1peCBvZiBjb25maWd1cmUgYXJndW1lbnRzIGFuZCBkZWZpbmVzIGluCisgICAgZmVhdHVyZS5oLiAgSG93IHRvIG1ha2UgdGhpcyBjb25zaXN0ZW50PyAgRmVhdHVyZS5oIGlzIHJlcXVpcmVkIGZvcgorICAgIG5vbi11bml4IHN5c3RlbXMuICBQZXJoYXBzIGxldCBjb25maWd1cmUgZGVmaW5lIENPTkZfWFhYLCBhbmQgdXNlICNpZmRlZgorICAgIENPTkZfWFhYIGluIGZlYXR1cmUuaD8gIFRoZW4gd2hhdCBzaG91bGQgbWluLWZlYXR1cmVzIGFuZCBtYXgtZmVhdHVyZXMgZG8/Cis4ICAgQWRkICJnXkUiIGFuZCAiZ15ZIiwgdG8gc2Nyb2xsIGEgc2NyZWVuLWZ1bGwgbGluZSB1cCBhbmQgZG93bi4KKzYgICBBZGQgIjp0aW1lciIgY29tbWFuZCwgdG8gc2V0IGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCBhdCBhIGNlcnRhaW4KKyAgICBpbnRlcnZhbCwgb3Igb25jZSBhZnRlciBzb21lIHRpbWUgaGFzIGVsYXBzZWQuIChBYXJvbikKKzggICBBZGQgIjpjb25maXJtIiBoYW5kbGluZyBpbiBvcGVuX2V4ZmlsZSgpLCBmb3Igd2hlbiBmaWxlIGFscmVhZHkgZXhpc3RzLgorOCAgIFVzZSBjb25maXJtL2RpYWxvZyBzdHVmZiB0byBhc2sgdGhlIHVzZXIsIHdoZW4gYSBmaWxlIGhhcyBjaGFuZ2VkIG91dHNpZGUKKyAgICBvZiBWaW0sIGlmIGhlIHdhbnRzIHRvIHJlbG9hZCBpdC4gIFRyaWdnZXJlZCB3aGVuIGZvY3VzIGdhaW5lZCwgYWZ0ZXIKKyAgICBzaGVsbCBjb21tYW5kLCB3aGVuIGVudGVyaW5nIGFub3RoZXIgYnVmZmVyLCBldGMuLgorICAgIEFsc28gZG8gdGhpcyB3aGVuIGVkaXRpbmcgYSBuZXcgZmlsZSwgYW5kIGFub3RoZXIgYXBwbGljYXRpb24gY3JlYXRlcworICAgIHRoZSBmaWxlIGJlZm9yZSBkb2luZyAiOnciIGluIFZpbS4KKyAgICBBbHNvIGNoZWNrIGlmIHRoZSBmaWxlIHByb3RlY3Rpb24gaGFzIGNoYW5nZWQuICBXaGVuIGNoZWNraW5nIGEgZmlsZSBpbnRvCisgICAgUkNTIGl0IGlzIG1hZGUgcmVhZC1vbmx5LCB3aGVuIGNoZWNraW5nIG91dCBpdCBpcyBtYWRlIHJlYWQtd3JpdGUuCis4ICAgV2hlbiBxdWl0dGluZyB3aXRoIGNoYW5nZWQgZmlsZXMsIG1ha2UgdGhlIGRpYWxvZyBsaXN0IHRoZSBjaGFuZ2VkIGZpbGUKKyAgICBhbmQgYWxsb3cgIndyaXRlIGFsbCIsICJkaXNjYXJkIGFsbCIsICJ3cml0ZSBzb21lIi4gIFRoZSBsYXN0IG9uZSB3b3VsZAorICAgIHRoZW4gYXNrICJ3cml0ZSIgb3IgImRpc2NhcmQiIGZvciBlYWNoIGNoYW5nZWQgZmlsZS4gIFBhdGNoIGluIEhpZXJBc3Npc3QKKyAgICBkb2VzIHNvbWV0aGluZyBsaWtlIHRoaXMuIChTaGFoKQorNyAgIFVzZSBncm93YXJyYXkgZm9yIHJlcGxhY2Ugc3RhY2suCis3ICAgSGF2ZSBhIGxvb2sgYXQgdmlIIChIZWxsZW5pYyBvciBHcmVlayB2ZXJzaW9uIG9mIFZpbSkuICBCdXQgYSBzb2x1dGlvbgorICAgIG91dHNpZGUgb2YgVmltIG1pZ2h0IGJlIHNhdGlzZmFjdG9yeSAoSGFyaXRzaXMpLgorMyAgIE1ha2UgIjJkJSIgd29yayBsaWtlICJkJWQlIiBpbnN0ZWFkIG9mICJkMiUiPworOCAgIE1ha2UgIm1vcmUiIHByb21wdCBhY2NlcHQgY29tbWFuZCBjaGFyYWN0ZXJzLCBsaWtlICJoaXQtZW50ZXIiIHByb21wdD8KKyAgICBPciBleHRlbmQgaXQgd2l0aCBtb3JlIGNvbW1hbmRzLCBsaWtlICJsZXNzIjogJ2InIGZvciBiYWNrLCAnaicgZm9yIG9uZQorICAgIGxpbmUgZG93biwgZXRjLgorOCAgIEZvciB0aGUgIi0tbW9yZS0tIiBwcm9tcHQsIHN1cHBvcnQgdGhlICdiJ2FjayBjb21tYW5kIGZvciBtb3JlIGNvbW1hbmRzLgorICAgIFBvc3NpYmxlIGltcGxlbWVudGF0aW9uOiBEbyBpdCBhdCBhIHZlcnkgbG93IGxldmVsLCBjYWNoaW5nIHRoZSBsaW5lcyB0aGF0CisgICAgYXJlIG9uIHRoZSBzY3JlZW4gKHdpdGggaGlnaGxpZ2h0IGF0dHJpYnV0ZXMpLiAgQXZvaWRzIHRoYXQgY2hhbmdlcyBoYXZlCisgICAgdG8gYmUgbWFkZSBmb3IgYWxsIGZ1bmN0aW9ucyB0aGF0IGxpc3Qgc29tZXRoaW5nLgorNyAgICJnIENUUkwtTyIganVtcHMgYmFjayB0byBsYXN0IHVzZWQgYnVmZmVyLglTa2lwIENUUkwtTyBqdW1wcyBpbiB0aGUgc2FtZQorICAgIGJ1ZmZlci4gIE1ha2UganVtcGxpc3QgcmVtZW1iZXIgdGhlIGxhc3QgdGVuIGFjY2Vzc2VkIGJ1ZmZlcnM/CistICAgS2VlcCBhIGxpc3Qgb2YgbW9zdCByZWNlbnRseSB1c2VkIGZpbGVzIGZvciBlYWNoIHdpbmRvdywgdXNlICJbbyIgdG8gZ28KKyAgICBiYWNrIChvbGRlciBmaWxlKSBhbmQgIl1uIiB0byBnbyBmb3J3YXJkIChuZXdlciBmaWxlKSAobGlrZSBeTyBhbmQgXkkgZm9yCisgICAganVtcHMpIChXZWJiKS4gVXNlICI6ZmlsZXMiIGFuZCAiOmxzIiB0byBsaXN0IHRoZSBmaWxlcyBpbiBoaXN0b3J5IG9yZGVyLgorNyAgIEFkZCBhIGhpc3Rvcnkgb2YgcmVjZW50bHkgYWNjZXNzZWQgYnVmZmVyLglNYXliZSBtYWtlICIyIENUUkwtXiIganVtcCB0bworICAgIHRoZSAybmQgcHJldmlvdXNseSB2aXNpdGVkIGJ1ZmZlciwgIjMgQ1RSTC1eIiB0byB0aGUgdGhpcmQsIGV0Yy4gIE9yIHVzZQorICAgICIzIGcgQ1RSTC1eIiBmb3IgdGhpcz8KKzcgICBBZGQgYW4gb3B0aW9uIHRvIHNldCB0aGUgd2lkdGggb2YgdGhlICdudW1iZXInIGNvbHVtbi4gIEVpZ2h0IHBvc2l0aW9ucyBpcworICAgIG9mdGVuIG1vcmUgdGhhbiBuZWVkZWQuICBPciBhZGp1c3QgdGhlIHdpZHRoIHRvIHRoZSBsZW5ndGggb2YgdGhlIGZpbGU/CisgICAgQWRkIHBhdGNoIHRoYXQgYWRkcyAnbnVtYmVybGVuJyBvcHRpb24uIChKYW1lcyBIYXJ2ZXkpCisgICAgT3RoZXIgcGF0Y2ggd2l0aCBtaW4gYW5kIG1heCBmcm9tIEVtbWFudWVsIFJlbmllcmlzICgyMDAyIEp1bCAyNCkKKyAgICBPdGhlciBwYXRjaCB3aXRob3V0IGFuIG9wdGlvbiBieSBHaWxsZXMgUm95ICgyMDAyIEp1bCAyNSkKKy0gICBBZGQgY29kZSB0byBkaXNhYmxlIHRoZSBDQVBTIGtleSB3aGVuIGdvaW5nIGZyb20gSW5zZXJ0IHRvIE5vcm1hbCBtb2RlLgorLSAgIFNldCBkYXRlL3Byb3RlY3Rpb24vZXRjLiBvZiB0aGUgcGF0Y2hmaWxlIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBmaWxlLgorLSAgIFVzZSBncm93YXJyYXkgZm9yIHRlcm1jb2Rlc1tdIGluIHRlcm0uYworLSAgIEFkZCA8d2luZG93LTk5PiwgbGlrZSA8Y3dvcmQ+IGJ1dCB1c2UgZmlsZW5hbWUgb2YgOTkndGggd2luZG93LgorNyAgIEFkZCBhIHdheSB0byBjaGFuZ2UgYW4gb3BlcmF0b3IgdG8gYWx3YXlzIHdvcmsgY2hhcmFjdGVyd2lzZS1pbmNsdXNpdmUKKyAgICAobGlrZSAidiIgbWFrZXMgdGhlIG9wZXJhdG9yIGNoYXJhY3Rlcndpc2UtZXhjbHVzaXZlKS4gICJ4IiBjb3VsZCBiZSB1c2VkLgorLSAgIE1ha2UgYSBzZXQgb2Ygb3BlcmF0aW9ucyBvbiBsaXN0IG9mIG5hbWVzOiBleHBhbmQgd2lsZGNhcmRzLCByZXBsYWNlIGhvbWUKKyAgICBkaXIsIGFwcGVuZCBhIHN0cmluZywgZGVsZXRlIGEgc3RyaW5nLCBldGMuCistICAgUmVtb3ZlIG1rdGVtcCgpIGFuZCB1c2UgdG1wbmFtZSgpIG9ubHk/ICBDdGFncyBkb2VzIHRoaXMuCistICAgV2hlbiByZXBsYWNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgdGhlcmUgaXMgb25lIHRoYXQgaXMgbm90IHNldCwKKyAgICB0dXJuIGl0IGludG8gYW4gZW1wdHkgc3RyaW5nPyAgT25seSB3aGVuIGV4cGFuZGluZyBvcHRpb25zPyAoSGllYmVydCkKKy0gICBPcHRpb24gdG8gc2V0IGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgaW5zdGVhZCBvZiBwcm9kdWNpbmcgYSBiZWVwIChlLmcuIHRvCisgICAgY2FsbCAicGxheSBuZXdiZWVwLmF1IikuCistICAgQWRkIG9wdGlvbiB0byBzaG93IHRoZSBjdXJyZW50IGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN0YXR1cyBsaW5lLiAgTW9yZSBvcgorICAgIGxlc3Mgd2hhdCB5b3UgZmluZCB3aXRoICJbW2siLCBsaWtlIGhvdyAnY2luZGVudCcgcmVjb2duaXplcyBhIGZ1bmN0aW9uLgorICAgIChCaGF0dCkuCistICAgIltyIiBhbmQgIl1yIjogbGlrZSAicCIgYW5kICJQIiwgYnV0IHJlcGxhY2UgaW5zdGVhZCBvZiBpbnNlcnQgKGVzcC4gZm9yCisgICAgYmxvY2t3aXNlIHJlZ2lzdGVycykuCistICAgQWRkICd0aW1lY2hlY2snIG9wdGlvbiwgb24gYnkgZGVmYXVsdC4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHN3aXRjaCBvZmYgdGhlCisgICAgdGltZXN0YW1wIHdhcm5pbmcgYW5kIHF1ZXN0aW9uLiAoRG9kdCkuCistICAgQWRkIGFuIG9wdGlvbiB0byBzZXQgdGhlIHRpbWUgYWZ0ZXIgd2hpY2ggVmltIHNob3VsZCBjaGVjayB0aGUgdGltZXN0YW1wcworICAgIG9mIHRoZSBmaWxlcy4gIE9ubHkgY2hlY2sgd2hlbiBhbiBldmVudCBvY2N1cnMgKGUuZy4sIGNoYXJhY3RlciB0eXBlZCwKKyAgICBtb3VzZSBtb3ZlZCkuICBVc2VmdWwgZm9yIG5vbi1HVUkgdmVyc2lvbnMgd2hlcmUga2V5Ym9hcmQgZm9jdXMgaXNuJ3QKKyAgICBub3RpY2VhYmxlLgorOSAgIFdoZW4gdXNpbmcgIjp3IDxmbmFtZT4iIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGZpbGUgaXMgbG9hZGVkIGluIGFub3RoZXIKKyAgICBidWZmZXIuICBHaXZlIGEgd2FybmluZyByaWdodCBhd2F5LCBkb24ndCB3YWl0IGZvciBhIHNoZWxsIGNvbW1hbmQuCistICAgTWFrZSAnc21hcnRjYXNlJyB3b3JrIGV2ZW4gdGhvdWdoICdpYycgaXNuJ3Qgc2V0IChXZWJiKS4KKzcgICBBZGQgIjpqdXN0aWZ5IiBjb21tYW5kLiAgUGF0Y2ggZnJvbSBWaXQgU3RyYWRhbCAyMDAyIE5vdiAyNS4KKzcgICBXaGVuIGZvcm1hdHRpbmcgdGV4dCwgYWxsb3cgdG8gYnJlYWsgdGhlIGxpbmUgYXQgYSBudW1iZXIgb2YgY2hhcmFjdGVycy4KKyAgICBVc2UgYW4gb3B0aW9uIGZvciB0aGlzOiAnYnJlYWtjaGFycyc/ICBVc2VmdWwgZm9yIGZvcm1hdHRpbmcgRm9ydHJhbiBjb2RlLgorLSAgIEFkZCBmbGFnIHRvICdmb3JtYXRvcHRpb25zJyB0byBiZSBhYmxlIHRvIGZvcm1hdCBib29rLXN0eWxlIHBhcmFncmFwaHMKKyAgICAoZmlyc3QgbGluZSBvZiBwYXJhZ3JhcGggaGFzIGxhcmdlciBpbmRlbnQsIG5vIGVtcHR5IGxpbmVzIGJldHdlZW4KKyAgICBwYXJhZ3JhcGhzKS4gIENvbXBsZW1lbnRzIHRoZSAnMicgZmxhZy4gIFVzZSAnPicgZmxhZyB3aGVuIGxhcmdlciBpbmRlbnQKKyAgICBzdGFydHMgYSBuZXcgcGFyYWdyYXBoLCB1c2UgJzwnIGZsYWcgd2hlbiBzbWFsbGVyIGluZGVudCBzdGFydHMgYSBuZXcKKyAgICBwYXJhZ3JhcGguCUJvdGggc3RhcnQgYSBuZXcgcGFyYWdyYXBoIG9uIGFueSBpbmRlbnQgY2hhbmdlLgorOCAgIEFkZCAnZm9ybWF0ZXhwcicgb3B0aW9uOiBVc2VkIGZvciBmb3JtYXR0aW5nIG9wZXJhdG9yICJncSIgaW5zdGVhZCBvZiB0aGUKKyAgICBidWlsdGluIGZvcm1hdHRpbmcgb3IgJ2Zvcm1hdHByZycuCis4ICAgQWxsb3cgdXNpbmcgYSB0cmFpbGluZyBzcGFjZSB0byBzaWduYWwgYSBwYXJhZ3JhcGggdGhhdCBjb250aW51ZXMgb24gdGhlCisgICAgbmV4dCBsaW5lIChNSU1FIHRleHQvcGxhaW47IGZvcm1hdD1mbG93ZWQsIFJGQyAyNjQ2KS4gIENhbiBiZSB1c2VkIGZvcgorICAgIGNvbnRpbnVvdXMgZm9ybWF0dGluZy4gIENvdWxkIHVzZSAnYXV0b2Zvcm1hdCcgb3B0aW9uLCB3aGljaCBzcGVjaWZpZXMgYQorICAgIHJlZ2V4cCB3aGljaCB0cmlnZ2VycyBhdXRvLWZvcm1hdHRpbmcgKGZvciBvbmUgbGluZSkuCisgICAgIjpzZXQgYXV0b2Zvcm1hdD1cXHMkIi4KKy0gICBCZSBhYmxlIHRvIHJlZGVmaW5lIHdoZXJlIGEgc2VudGVuY2Ugc3RvcHMuICBVc2UgYSByZWdleHAgcGF0dGVybj8KKzcgICBBZGQgY29tbWFuZCAiZykiIHRvIGdvIHRvIHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwgImcoIiB0byBnbyBiYWNrIHRvIHRoZQorICAgIGVuZCBvZiBhIHNlbnRlbmNlLiAoU2VydmF0aXVzIEJyYW5kdCkKKy0gICBCZSBhYmxlIHRvIHJlZGVmaW5lIHdoZXJlIGEgcGFyYWdyYXBoIHN0YXJ0cy4gIEZvciAiW1siIHdoZXJlIHRoZSAneycgaXMKKyAgICBub3QgaW4gY29sdW1uIDEuCis2ICAgQWRkICI6Y2RwcmV2IjogZ28gYmFjayB0byB0aGUgcHJldmlvdXMgZGlyZWN0b3J5LiAgTmVlZCB0byByZW1lbWJlciBhCisgICAgc3RhY2sgb2YgcHJldmlvdXMgZGlyZWN0b3JpZXMuICBXZSBhbHNvIG5lZWQgIjpjZG5leHQiLgorNyAgIFNob3VsZCAiOmNkIiBmb3IgTVMtRE9TIGdvIHRvICRIT01FLCB3aGVuIGl0J3MgZGVmaW5lZD8KKy0gICBNYWtlICJncTxDUj4iIHdvcmsgb24gdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZS4gIE1heWJlIGZvciBldmVyeSBvcGVyYXRvcj8KKzggICBmaW5kbWF0Y2hsaW1pdCgpIHNob3VsZCBiZSBhYmxlIHRvIHNraXAgY29tbWVudHMuICBTb2x2ZXMgcHJvYmxlbSBvZgorICAgIG1hdGNoaW5nIHRoZSAneycgaW4gLyogaWYgKGZvbykgeyAqLyAoRml2ZWFzaCkKKy0gICBmaW5kbWF0Y2goKSBzaG91bGQgYmUgYWRqdXN0ZWQgZm9yIExpc3AuICBTZWUgcmVtYXJrIGF0IGdldF9saXNwX2luZGVudCgpLgorICAgIEVzcC4gXCggYW5kIFwpIHNob3VsZCBiZSBza2lwcGVkLiAoRG9yYWkgU2l0YXJhbSwgaW5jb21wbGV0ZSBwYXRjaCBNYXIgMTgpCistICAgQWRkIG1vcmUgcmVkaXJlY3Rpbmcgb2YgRXggY29tbWFuZHM6CisJOnJlZGlyIEA+IHJlZ2lzdGVyICAoYXBwZW5kKQorCTpyZWRpciAjICBidWZuYW1lCisJOnJlZGlyICM+IGJ1Zm5hbWUgICAoYXBwZW5kKQorCTpyZWRpciA9ICB2YXJpYWJsZQorCTpyZWRpciA9PiB2YXJpYWJsZSAgKGFwcGVuZCkKKy0gICBTZXR0aW5nIG9mIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb3IgYSBidWZmZXIgb3Igd2luZG93LCB3aXRoCisgICAgIjpzZXQgd2luZG93Lm9wdGlvbiIgb3IgIjpzZXQgYnVmZmVyLm9wdGlvbj12YWwiLiAgT3IgdXNlICI6YnVmZmVyLnNldCIuCisgICAgQWxzbzogImJ1ZmZlci5tYXAgPEYxPiBxdWl0Ii4KKzYgICBXb3VsZCBpdCBiZSBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIGNvbG9yIG9mIHRoZSBjdXJzb3IgaW4gdGhlIFdpbjMyCisgICAgY29uc29sZT8gIChLbGF1cyBIYXN0KQorLSAgIEFkZCA6ZGVsY3IgY29tbWFuZDoKKwkJCSAgICAqOmRlbGNyKgorICAgICA6W3JhbmdlXWRlbGNyWyFdCUNoZWNrIFtyYW5nZV0gbGluZXMgKGRlZmF1bHQ6IHdob2xlIGJ1ZmZlcikgZm9yIGxpbmVzCisJCQllbmRpbmcgaW4gPENSPi4gIElmIGFsbCBsaW5lcyBlbmQgaW4gPENSPiwgb3IgWyFdIGlzCisJCQl1c2VkLCByZW1vdmUgdGhlIDxDUj4gYXQgdGhlIGVuZCBvZiBsaW5lcyBpbiBbcmFuZ2VdLgorCQkJQSBDVFJMLVogYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZW1vdmVkLiAgSWYKKwkJCVtyYW5nZV0gaXMgb21pdHRlZCwgb3IgaXQgaXMgdGhlIHdob2xlIGZpbGUsIGFuZCBhbGwKKwkJCWxpbmVzIGVuZCBpbiA8Q1I+ICd0ZXh0bW9kZScgaXMgc2V0LiAge25vdCBpbiBWaX0KKy0gICBTaG91bGQgaW50ZWdyYXRlIGFkZHN0YXIoKSBhbmQgZmlsZV9wYXRfdG9fcmVnX3BhdCgpLgorLSAgIFdoZW4gd29ya2luZyBvdmVyIGEgc2VyaWFsIGxpbmUgd2l0aCA3IGJpdCBjaGFyYWN0ZXJzLCByZW1vdmUgbWV0YQorICAgIGNoYXJhY3RlcnMgZnJvbSAnaXNwcmludCcuCistICAgVXNlIGZjaGRpcigpIGluIGluaXRfaG9tZWRpcigpLCBsaWtlIGluIEZ1bGxOYW1lKCkuCistICAgSW4gd2luX3VwZGF0ZSgpLCB3aGVuIHRoZSBHVUkgaXMgYWN0aXZlLCBhbHdheXMgdXNlIHRoZSBzY3JvbGxpbmcgYXJlYS4KKyAgICBBdm9pZCB0aGF0IHRoZSBsYXN0IHN0YXR1cyBsaW5lIGlzIGRlbGV0ZWQgYW5kIG5lZWRzIHRvIGJlIHJlZHJhd24uCistICAgVGhhdCAiY1R4IiBmYWlscyB3aGVuIHRoZSBjdXJzb3IgaXMganVzdCBhZnRlciAneCcgaXMgVmkgY29tcGF0aWJsZSwgYnV0CisgICAgbWF5IG5vdCBiZSB3aGF0IHlvdSBleHBlY3QuICBBZGQgYSBmbGFnIGluICdjcG9wdGlvbnMnIGZvciB0aGlzPyAgTW9yZQorICAgIGdlbmVyYWw6IEFkZCBhbiBvcHRpb24gdG8gYWxsb3cgImMiIHRvIHdvcmsgd2l0aCBhIG51bGwgbW90aW9uLgorLSAgIEdpdmUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGJ5IHVzaW5nIGVycm5vIChzdHJlcnJvcigpKS4KKy0gICBHaXZlICJVc2FnZToiIGVycm9yIG1lc3NhZ2Ugd2hlbiBjb21tYW5kIHVzZWQgd2l0aCB3cm9uZyBhcmd1bWVudHMgKGxpa2UKKyAgICBOdmkpLgorLSAgIE1ha2UgJ3Jlc3RvcmVzY3JlZW4nIG9wdGlvbiBhbHNvIHdvcmsgZm9yIHh0ZXJtIChhbmQgb3RoZXJzKSwgcmVwbGFjZXMgdGhlCisgICAgU0FWRV9YVEVSTV9TQ1JFRU4gZGVmaW5lLgorNyAgIFN1cHBvcnQgZm9yICI6d2lucG9zIiBJbiB4dGVybTogcmVwb3J0IHRoZSBjdXJyZW50IHdpbmRvdyBwb3NpdGlvbi4KKy0gICBHaXZlIHdhcm5pbmcgbWVzc2FnZSB3aGVuIHVzaW5nICI6c2V0IHRfeHg9YXNkZiIgZm9yIGEgdGVybWNhcCBjb2RlIHRoYXQKKyAgICBWaW0gZG9lc24ndCBrbm93IGFib3V0LiAgQWRkIGZsYWcgaW4gJ3Nob3J0bWVzcyc/Cis2ICAgQWRkICI6Y2hlIDxmaWxlPiIsIGxpc3QgYWxsIHRoZSBpbmNsdWRlIHBhdGhzIHdoaWNoIGxlYWQgdG8gdGhpcyBmaWxlLgorLSAgIEZvciBhIGNvbW1hbmRsaW5lIHRoYXQgaGFzIHNldmVyYWwgY29tbWFuZHMgKDpzLCA6ZCwgZXRjLikgc3VtbWFyaXplIHRoZQorICAgIGNoYW5nZXMgYWxsIHRvZ2V0aGVyIGluc3RlYWQgb2YgZm9yIGVhY2ggY29tbWFuZCAoZS5nLiBmb3IgdGhlIHJvdDEzCisgICAgbWFjcm8pLgorLSAgIEFkZCBjb21tYW5kIGxpa2UgIltJIiB0aGF0IGFsc28gc2hvd3MgdGhlIHRyZWUgb2YgaW5jbHVkZWQgZmlsZXMuCistICAgQWRkIGNvbW1hbmQgbGlrZSAiOnRzIiB0aGF0IHNob3dzIHRoZSBvdXRwdXQgb2YgIltJIiBhbmQgYXNrcyBmb3IgYSBtYXRjaAorICAgIHRvIGp1bXAgdG8uIChaZWxsbmVyKQorLSAgICI6c2V0IHNtXkwiIHJlc3VsdHMgaW4gIjpzZXQgcyIsIGJlY2F1c2Ugc2hvcnQgbmFtZXMgb2Ygb3B0aW9ucyBhcmUgYWxzbworICAgIGV4cGFuZGVkLiAgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM/CistICAgQWRkICI6QCEiIGNvbW1hbmQsIHRvICI6QCIgbGlrZSB3aGF0ICI6c291cmNlISIgaXMgdG8gIjpzb3VyY2UiLgorOCAgIEFkZCAiOkA6ISI6IHJlcGVhdCBsYXN0IGNvbW1hbmQgd2l0aCBmb3JjZWl0IHNldC4KKy0gICBTaG91bGQgYmUgcG9zc2libGUgdG8gd3JpdGUgdG8gYSBkZXZpY2UsIGUuZy4gIjp3ISAvZGV2L251bGwiLgorLSAgIEFkZCAndF9ub3JtYWwnOiBVc2VkIHdoZW5ldmVyIHRfbWUsIHRfc2UsIHRfdWUgb3IgdF9aciBpcyBlbXB0eS4KKy0gICAiOmNhYiBtYXAgdGVzdCBeVnwgamUiLCAiOmN1bmFiIG1hcCIgZG9lc24ndCB3b3JrLglUaGlzIGlzIHZpIGNvbXBhdGlibGUhCistICAgQ1RSTC1XIENUUkwtRSBhbmQgQ1RSTC1XIENUUkwtWSBzaG91bGQgbW92ZSB0aGUgY3VycmVudCB3aW5kb3cgdXAgb3IgZG93bgorICAgIGlmIGl0IGlzIG5vdCB0aGUgZmlyc3Qgb3IgbGFzdCB3aW5kb3cuCistICAgSW5jbHVkZS1maWxlLXNlYXJjaCBjb21tYW5kcyBzaG91bGQgbG9vayBpbiB0aGUgbG9hZGVkIGJ1ZmZlciBvZiBhIGZpbGUgKGlmCisgICAgdGhlcmUgaXMgb25lKSBpbnN0ZWFkIG9mIHRoZSBmaWxlIGl0c2VsZi4KKzcgICBDaGFuZ2UgJ25yZm9ybWF0cycgdG8gaW5jbHVkZSB0aGUgbGVhZGVyIGZvciBlYWNoIGZvcm1hdC4gIEV4YW1wbGU6CisJbnJmb3JtYXRzPWhleDokLGJpbmFyeTpiLG9jdGFsOjAKKyAgICBBZGQgc2V0dGluZyBvZiAnbnJmb3JtYXRzJyB0byBzeW50YXggZmlsZXMuCistICAgJ3BhdGgnIGNhbiBiZWNvbWUgdmVyeSBsb25nLCBkb24ndCB1c2UgTmFtZUJ1ZmYgZm9yIGV4cGFuc2lvbi4KKy0gICBXaGVuIHVuaGlkaW5nIGEgaGlkZGVuIGJ1ZmZlciwgcHV0IHRoZSBzYW1lIGxpbmUgYXQgdG9wIG9mIHRoZSB3aW5kb3cgYXMKKyAgICB0aGUgb25lIGJlZm9yZSBoaWRpbmcgaXQuIE9yOiBrZWVwIHRoZSBzYW1lIHJlbGF0aXZlIGN1cnNvciBwb3NpdGlvbiAoc28KKyAgICBtYW55IHBlcmNlbnQgZG93biB0aGUgd2luZG93cykuCistICAgTWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlICdzaG93YnJlYWsnIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZQorICAgIGxpbmUuICBVc2UgYSBjb21tYSB0byBzZXBhcmF0ZSB0aGUgcGFydCBhdCB0aGUgZW5kIGFuZCB0aGUgc3RhcnQgb2YgdGhlCisgICAgbGluZT8gIEhpZ2hsaWdodCB0aGUgbGluZWJyZWFrIGNoYXJhY3RlcnMsIGFkZCBmbGFnIGluICdoaWdobGlnaHQnLgorLSAgIFNvbWUgc3RyaW5nIG9wdGlvbnMgc2hvdWxkIGJlIGV4cGFuZGVkIGlmIHRoZXkgaGF2ZSB3aWxkY2FyZHMsIGUuZy4KKyAgICAnZGljdGlvbmFyeScgd2hlbiBpdCBpcyAiKi5oIi4KKy0gICBVc2UgYSBzcGVjaWZpYyB0eXBlIGZvciBudW1iZXIgYW5kIGJvb2xlYW4gb3B0aW9ucywgbWFraW5nIGl0IHBvc3NpYmxlIHRvCisgICAgY2hhbmdlIGl0IGZvciBzcGVjaWZpYyBtYWNoaW5lcyAoZS5nLiB3aGVuIGEgbG9uZyBpcyA2NCBiaXQpLgorLSAgIEFkZCBvcHRpb24gZm9yIDxJbnNlcnQ+IGluIHJlcGxhY2UgbW9kZSBnb2luZyB0byBub3JtYWwgbW9kZS4gKE51Z2VudCkKKy0gICBBZGQgYSBuZXh0L3ByZXZpb3VzIHBvc3NpYmlsaXR5IHRvICJbXkkiIGFuZCBmcmllbmRzLgorLSAgIEFkZCBwb3NzaWJpbGl0eSB0byBjaGFuZ2UgdGhlIEhPTUUgZGlyZWN0b3J5LiAgVXNlIHRoZSBkaXJlY3RvcnkgZnJvbSB0aGUKKyAgICBwYXNzd2QgZmlsZT8gKEFudHdlcnBlbikKKy0gICBXaGVuIGRvaW5nICJbXkkiIG9yICJbXkQiIGFkZCBwb3NpdGlvbiB0byB0YWcgc3RhY2suCistICAgQWRkIGNvbW1hbmQgdG8gcHV0IGN1cnJlbnQgcG9zaXRpb24gdG8gdGFnIHN0YWNrOiAiOnRwdXNoIi4KKzggICBBZGQgY29tbWFuZHMgdG8gcHVzaCBhbmQgcG9wIGFsbCBvciBpbmRpdmlkdWFsIG9wdGlvbnMuICI6c2V0cHVzaCB0dyIsCisgICAgIjpzZXRwb3AgdHciLCAiOnNldHB1c2ggYWxsIi4gIE1heWJlIHB1c2hpbmcvcG9wcGluZyBhbGwgb3B0aW9ucyBpcworICAgIHN1ZmZpY2llbnQuICAiOnNldGZsdXNoIiByZXNldHMgdGhlIG9wdGlvbiBzdGFjaz8KKyAgICBIb3cgdG8gaGFuZGxlIGFuIGFib3J0ZWQgbWFwcGluZz8gIFJlbWVtYmVyIHBvc2l0aW9uIGluIHRhZyBzdGFjayB3aGVuCisgICAgbWFwcGluZyBzdGFydHMsIHJlc3RvcmUgaXQgd2hlbiBhbiBlcnJvciBhYm9ydHMgdGhlIG1hcHBpbmc/CistICAgVXNlIGEgYnVpbHRpbiBncmVwIGNvbW1hbmQgZm9yICI6Z3JlcCI/ICBNYWtlcyBpdCBwb3NzaWJsZSB0byBhZGQgdGhlCisgICAgY29sdW1uIG51bWJlci4gIENhbiB1c2UgdGhlIGNvZGUgb2YgIjpoZWxwZ3JlcCIuCisgICAgQWxzbyBzdXBwb3J0IHVzaW5nICIqKiIgaW4gZmlsZW5hbWUsIHNvIHRoYXQgYSBkaXJlY3RvcnkgdHJlZSBjYW4gYmUKKyAgICBzZWFyY2hlZC4KKy0gICBDaGFuZ2UgIjpmaXhkZWwiIGludG8gb3B0aW9uICdmaXhkZWwnLCB0X2RlbCB3aWxsIGJlIGFkanVzdGVkIGVhY2ggdGltZQorICAgIHRfYnMgaXMgc2V0PyAoV2ViYikKKy0gICAiZ2MiOiBnb3RvIGNoYXJhY3RlciwgbW92ZSBhYnNvbHV0ZSBjaGFyYWN0ZXIgcG9zaXRpb25zIGZvcndhcmQsIGFsc28KKyAgICBjb3VudGluZyBuZXdsaW5lcy4gImdDIiBnb2VzIGJhY2t3YXJkcyAoV2VpZ2VydCkuCistICAgV2hlbiBkb2luZyBDVFJMLV4sIHJlZHJhdyBidWZmZXIgd2l0aCB0aGUgc2FtZSB0b3BsaW5lIChEZW1pcmVsKS4gU3RvcmUKKyAgICBjdXJzb3Igcm93IGFuZCB3aW5kb3cgaGVpZ2h0IHRvIHJlZHJhdyBjdXJzb3IgYXQgc2FtZSBwZXJjZW50YWdlIG9mIHdpbmRvdworICAgIChXZWJiKS4KKy0gICBCZXNpZGVzIHJlbWVtYmVyaW5nIHRoZSBsYXN0IHVzZWQgbGluZSBudW1iZXIgb2YgYSBmaWxlLCBhbHNvIHJlbWVtYmVyIHRoZQorICAgIGNvbHVtbi4gVXNlIGl0IHdpdGggQ1RSTC1eIGV0LiBhbC4KKy0gICBDaGVjayBmb3Igbm9uLWRpZ2l0cyB3aGVuIHNldHRpbmcgYSBudW1iZXIgb3B0aW9uIChjYXJlZnVsIHdoZW4gZW50ZXJpbmcKKyAgICBoZXggY29kZXMgbGlrZSAweGZmKS4KKy0gICBBZGQgb3B0aW9uIHRvIG1ha2UgIi4iIHJlZG8gdGhlICJAciIgY29tbWFuZCwgaW5zdGVhZCBvZiB0aGUgbGFzdCBjb21tYW5kCisgICAgZXhlY3V0ZWQgYnkgaXQuICBBbHNvIHRvIG1ha2UgIi4iIHJlZG8gdGhlIHdob2xlIG1hcHBpbmcuICBCYXNpY2FsbHk6IHJlZG8KKyAgICB0aGUgbGFzdCBUWVBFRCBjb21tYW5kLgorLSAgIFN1cHBvcnQgVVJMIGxpbmtzIGZvciBeWF5GIGluIEluc2VydCBtb2RlLCBsaWtlIGZvciAiZ2YiLgorLSAgIFN1cHBvcnQgJW5hbWUlIGV4cGFuc2lvbiBmb3IgImdmIiBvbiBXaW5kb3dzLgorLSAgIE1ha2UgImdmIiB3b3JrIG9uICJmaWxlOi8vYzovcGF0aC9uYW1lIi4gICJmaWxlOi9jOi8iIGFuZCAiZmlsZTovLy9jOi8iCisgICAgc2hvdWxkIGFsc28gd29yaz8KKy0gICBBZGQgJ3VybHBhdGgnLCB1c2VkIGxpa2UgJ3BhdGgnIGZvciB3aGVuICJnZiIgdXNlZCBvbiBhbiBVUkw/Cis4ICAgV2hlbiB1c2luZyAiZ2YiIG9uIGFuIGFic29sdXRlIGZpbGUgbmFtZSwgd2hpbGUgZWRpdGluZyBhIHJlbW90ZSBmaWxlCisgICAgKHN0YXJ0cyB3aXRoIHNjcDovLyBvciBodHRwOi8vKSBzaG91bGQgcHJlcGVuZCB0aGUgbWV0aG9kIGFuZCBtYWNoaW5lCisgICAgbmFtZS4KKy0gICBXaGVuIGZpbmRpbmcgYW4gVVJMIG9yIGZpbGUgbmFtZSwgYW5kIGl0IGRvZXNuJ3QgZXhpc3QsIHRyeSByZW1vdmluZyBhCisgICAgdHJhaWxpbmcgJy4nLgorLSAgIEFkZCAiOnBhdGgiIGNvbW1hbmQgbW9kaWZpZXIuICBTaG91bGQgd29yayBmb3IgZXZlcnkgY29tbWFuZCB0aGF0IHRha2VzIGEKKyAgICBmaWxlIG5hbWUgYXJndW1lbnQsIHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUgbmFtZSBpbiAncGF0aCcuCVVzZQorICAgIGZpbmRfZmlsZV9pbl9wYXRoKCkuCistICAgSGlnaGxpZ2h0IGNvbnRyb2wgY2hhcmFjdGVycyBvbiB0aGUgc2NyZWVuOiBTaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICAgQ1RSTC1YIGFuZCAiXiIgZm9sbG93ZWQgYnkgIlgiIChDb2xvbikuCistICAgSW50ZWdyYXRlIHBhcnNpbmcgb2YgY21kbGluZSBjb21tYW5kIGFuZCBwYXJzaW5nIGZvciBleHBhbnNpb24uCistICAgQ3JlYXRlIGEgcHJvZ3JhbSB0aGF0IGNhbiB0cmFuc2xhdGUgYSAuc3dwIGZpbGUgZnJvbSBhbnkgbWFjaGluZSBpbnRvIGEKKyAgICBmb3JtIHVzYWJsZSBieSBWaW0gb24gdGhlIGN1cnJlbnQgbWFjaGluZS4KKy0gICBBZGQgIjpub3JvIiBjb21tYW5kOiBSZXNldCAncm8nIGZsYWcgZm9yIGFsbCBidWZmZXJzLCBleGNlcHQgb25lcyB0aGF0IGhhdmUKKyAgICBhIHJlYWRvbmx5IGZpbGUuICI6bm9ybyEiIHdpbGwgcmVzZXQgYWxsICdybycgZmxhZ3MuCistICAgQWRkIGEgdmFyaWFudCBvZiBDVFJMLVYgdGhhdCBzdG9wcyBpbnRlcnByZXRhdGlvbiBvZiBtb3JlIHRoYW4gb25lCisgICAgY2hhcmFjdGVyLglGb3IgZW50ZXJpbmcgbWFwcGluZ3Mgb24gdGhlIGNvbW1hbmQgbGluZSB3aGVyZSBhIGtleSBjb250YWlucworICAgIHNldmVyYWwgc3BlY2lhbCBjaGFyYWN0ZXJzLCBlLmcuIGEgdHJhaWxpbmcgbmV3bGluZS4KKy0gICBBZGQgcmVnZXggZm9yICdwYXJhZ3JhcGhzJyBhbmQgJ3NlY3Rpb25zJzogJ3BhcmFyZScgYW5kICdzZWN0cmUnLiBDb21iaW5lCisgICAgdGhlIHR3byBpbnRvIGEgcmVnZXggZm9yIHNlYXJjaGluZy4gKE5lZCBLb256KQorLSAgIE1ha2UgJzInIG9wdGlvbiBpbiAnZm9ybWF0b3B0aW9ucycgYWxzbyB3b3JrIGluc2lkZSBjb21tZW50cy4KKy0gICBBZGQgJ3MnIGZsYWcgdG8gJ2Zvcm1hdG9wdGlvbnMnOiBEbyBub3QgYnJlYWsgd2hlbiBpbnNpZGUgYSBzdHJpbmcuIChEb2R0KQorLSAgIFdoZW4gd2luZG93IHNpemUgY2hhbmdlZCAod2l0aCB0aGUgbW91c2UpIGFuZCBtYWRlIHRvbyBzbWFsbCwgc2V0IGl0IGJhY2sKKyAgICB0byB0aGUgbWluaW1hbCBzaXplLgorLSAgIEFkZCAiXT4iIGFuZCAiWzwiLCBzaGlmdCBjb21tZW50IGF0IGVuZCBvZiBsaW5lIChjb21tYW5kOyAgLyogY29tbWVudCAqLykuCistICAgU2hvdWxkIG5vdCBjYWxsIGN1cnNvcmNtZCgpIGZvciBlYWNoIHZnZXRjKCkgaW4gZ2V0Y21kbGluZSgpLgorLSAgICI6c3BsaXQgZmlsZTEgZmlsZTIiIGFkZHMgdHdvIG1vcmUgd2luZG93cyAoV2ViYikuCistICAgRG9uJ3QgZ2l2ZSBtZXNzYWdlICJJbmNvbXBsZXRlIGxhc3QgbGluZSIgd2hlbiBlZGl0aW5nIGJpbmFyeSBmaWxlLgorLSAgIEFkZCAiOmEiLCAiOmkiIGZvciBwcmVsb2FkaW5nIG9mIG5hbWVkIGJ1ZmZlcnMuCistICAgQWxsb3cgYXV0b3dyaXRlIHdoZW4gZG9pbmcgIjplIGZpbGUiICh3aXRoIGFuIG9wdGlvbiAnZWF3JykuCistICAgQWxsb3cgYSAiK2NvbW1hbmQiIGFyZ3VtZW50IGJlZm9yZSBlYWNoIGZpbGUgbmFtZSBpbiB0aGUgVmltIGNvbW1hbmQgbGluZToKKyAgICAidmltICsxMjMgZmlsZTEgKzIzNCBmaWxlMiArMzQ1IGZpbGUzIi4gPz8/CistICAgV2hlbiBlbnRlcmluZyB0ZXh0LCBrZWVwIG90aGVyIHdpbmRvd3Mgb24gc2FtZSBidWZmZXIgdXBkYXRlZCAod2hlbiBhIGxpbmUKKyAgICBlbnRlcmVkKT8KKy0gICBDaGVjayBvdXQgaG93IHNjcmVlbiBkb2VzIG91dHB1dCBvcHRpbWl6aW5nLiAgQXBwYXJlbnRseSB0aGlzIGlzIHBvc3NpYmxlCisgICAgYXMgYW4gb3V0cHV0IGZpbHRlci4KKy0gICBJbiBkb3N1YigpIHJlZ2V4ZWMgaXMgY2FsbGVkIHR3aWNlIGZvciB0aGUgc2FtZSBsaW5lLiBUcnkgdG8gYXZvaWQgdGhpcy4KKy0gICBXaW5kb3cgdXBkYXRpbmcgZnJvbSBtZW1saW5lLmM6IGluc2VydC9kZWxldGUvcmVwbGFjZSBsaW5lLgorLSAgIE9wdGltaXplIG1sX2FwcGVuZCgpIGZvciBzcGVlZCwgZXNwLiBmb3IgcmVhZGluZyBhIGZpbGUuCistICAgVi4uYyBzaG91bGQga2VlcCBpbmRlbnQgd2hlbiAnYWknIGlzIHNldCwganVzdCBsaWtlIFtjb3VudF1jYy4KKy0gICBVcGRhdGVzY3JpcHQoKSBjYW4gYmUgZG9uZSBmYXN0ZXIgd2l0aCBhIHN0cmluZyBpbnN0ZWFkIG9mIGEgY2hhci4KKy0gICBTY3JlZW4gdXBkYXRpbmcgaXMgaW5lZmZpY2llbnQgd2l0aCBDVFJMLUYgYW5kIENUUkwtQiB3aGVuIHRoZXJlIGFyZSBsb25nCisgICAgbGluZXMuCistICAgVXBwZXJjYXNlIGNoYXJhY3RlcnMgaW4gZXggY29tbWFuZHMgY2FuIGJlIG1hZGUgbG93ZXJjYXNlPworOCAgIEFkZCBvcHRpb24gdG8gc2hvdyBjaGFyYWN0ZXJzIGluIHRleHQgbm90IGFzICJ8QSIgYnV0IGFzIGRlY2ltYWwgKCJeMTI5IiksCisgICAgaGV4ICgiXHg4MSIpIG9yIG9jdGFsICgiXDIwMSIpIG9yIG1ldGEgKE0teCkuICBOdmkgaGFzIHRoZSAnb2N0YWwnIG9wdGlvbgorICAgIHRvIHN3aXRjaCBmcm9tIGhleCB0byBvY3RhbC4gIFZpbGUgY2FuIHNob3cgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBoZXgKKyAgICBvciBpbiBvY3RhbC4KKzcgICBUaWdodGVyIGludGVncmF0aW9uIHdpdGggeHhkIHRvIGVkaXQgYmluYXJ5IGZpbGVzLiAgTWFrZSBpdCBtb3JlCisgICAgZWFzeS9vYnZpb3VzIHRvIHVzZS4gIENvbW1hbmQgbGluZSBhcmd1bWVudD8KKy0gICBIb3cgZG9lcyB2aSBkZXRlY3Qgd2hldGhlciBhIGZpbHRlciBoYXMgbWVzc2VkIHVwIHRoZSBzY3JlZW4/IENoZWNrIHNvdXJjZS4KKyAgICBBZnRlciAiOncgIWNvbW1hbmQiIGEgd2FpdF9yZXR1cm4/CistICAgSW1wcm92ZSBzY3JlZW4gdXBkYXRpbmcgY29kZSBmb3IgZG9wdXQoKSAodXNlIHNfaW5zKCkpLgorLSAgIFdpdGggJ3AnIGNvbW1hbmQgb24gbGFzdCBsaW5lOiBzY3JvbGwgc2NyZWVuIHVwIChhbHNvIGZvciB0ZXJtaW5hbHMgd2l0aG91dAorICAgIGluc2VydCBsaW5lIGNvbW1hbmQpLgorLSAgIFVzZSBpbnNlcnQvZGVsZXRlIGNoYXIgd2hlbiB0ZXJtaW5hbCBzdXBwb3J0cyBpdC4KKy0gICBPcHRpbWl6ZSBzY3JlZW4gcmVkcmF3IGZvciBzbG93IHRlcm1pbmFscy4KKy0gICBPcHRpbWl6ZSAiZHciIGZvciBsb25nIHJvdyBvZiBzcGFjZXMgKHNheSwgMzAwMDApLgorLSAgIEFkZCAiLWQgbnVsbCIgZm9yIGVkaXRpbmcgZnJvbSBhIHNjcmlwdCBmaWxlIHdpdGhvdXQgZGlzcGxheWluZy4KKy0gICBJbiBJbnNlcnQgbW9kZTogUmVtZW1iZXIgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIHJlbW92ZWQgd2l0aCBiYWNrc3BhY2UKKyAgICBhbmQgcmUtaW5zZXJ0IHRoZW0gb25lIGF0IGEgdGltZSB3aXRoIDxrZXkxPiwgYWxsIHRvZ2V0aGVyIHdpdGggPGtleTI+LgorLSAgIEFtaWdhOiBBZGQgcG9zc2liaWxpdHkgdG8gc2V0IGEga2V5bWFwLiBUaGUgY29kZSBpbiBhbWlnYS5jIGRvZXMgbm90IHdvcmsKKyAgICB5ZXQuCistICAgSW1wbGVtZW50ICdyZWRyYXcnIG9wdGlvbi4KKy0gICBBZGQgc3BlY2lhbCBjb2RlIHRvICdzZWN0aW9ucycgb3B0aW9uIHRvIGRlZmluZSBzb21ldGhpbmcgZWxzZSBidXQgJ3snIG9yCisgICAgJ30nIGFzIHRoZSBzdGFydCBvZiBhIHNlY3Rpb24gKGUuZy4gb25lIHNoaWZ0d2lkdGggdG8gdGhlIHJpZ2h0KS4KKy0gICBBZGQgJ2luZGVudCcgb3B0aW9uOiBBbHdheXMgdXNlIHRoaXMgYW1vdW50IG9mIGluZGVudCB3aGVuIHN0YXJ0aW5nIGEgbmV3CisgICAgbGluZSBhbmQgd2hlbiBmb3JtYXR0aW5nIHRleHQuCistICAgVXNlIHBpcGVzIGZvciBmaWx0ZXJpbmcgb24gVW5peC4gIFJlcXVpcmVzIHVzaW5nIGZvcmsoKSB0byBiZSBhYmxlIHRvIHJlYWQKKyAgICBhbmQgd3JpdGUgYXQgdGhlIHNhbWUgdGltZSwgb3Igc29tZSBzZWxlY3QoKSBtZWNoYW5pc20uCis3ICAgQWxsb3cgdXNpbmcgVmltIGluIGEgcGlwZTogImxzIHwgdmltIC11IHh4eC52aW0gLSB8IHl5eSIuICBPbmx5IG5lZWRzCisgICAgaW1wbGVtZW50aW5nICI6dyIgdG8gc3Rkb3V0IGluIHRoZSBidWZmZXIgdGhhdCB3YXMgcmVhZCBmcm9tIHN0ZGluLgorOCAgIEFsbG93IG9wZW5pbmcgYW4gdW5uYW1lZCBidWZmZXIgd2l0aCAiOmUgIWNtZCIgYW5kICI6c3AgIWNtZCIuICBWaWxlIGNhbgorICAgIGRvIGl0LgorLSAgIEFkZCBjb21tYW5kcyBsaWtlIF1dIGFuZCBbWyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoZSBsaW5lIGp1bXBlZCB0by4KKy0gICBXaGVuIDp1bmFiIHdpdGhvdXQgbWF0Y2hpbmcgImZyb20iIHBhcnQgYW5kIHNldmVyYWwgbWF0Y2hpbmcgInRvIiBwYXJ0cywKKyAgICBkZWxldGUgdGhlIGVudHJ5IHRoYXQgd2FzIHVzZWQgbGFzdCwgaW5zdGVhZCBvZiB0aGUgZmlyc3QgaW4gdGhlIGxpc3QuCistICAgQWRkIHRleHQganVzdGlmaWNhdGlvbiBvcHRpb24uCistICAgU2V0IGJvb2xlYW4gb3B0aW9ucyBvbi9vZmYgd2l0aCAiOnNldCBwYXN0ZT1vZmYiLCAiOnNldCBwYXN0ZT1vbiIuCistICAgQWZ0ZXIgImludiJpbmcgYW4gb3B0aW9uIHNob3cgdGhlIHZhbHVlOiAiOnNldCBpbnZwYXN0ZSIgZ2l2ZXMgInBhc3RlIGlzCisgICAgb2ZmIi4KKy0gICBDaGVjayBoYW5kbGluZyBvZiBDVFJMLVYgYW5kICdcJyBmb3IgIjoiIGNvbW1hbmRzIHRoYXQgZG8gbm90IGhhdmUgVFJMQkFSLgorLSAgIFdoZW4gYSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQgYnV0IGRvZXMgZXhpc3QsIGdpdmUgZXJyb3IgbWVzc2FnZS4KKy0gICBBbWlnYTogV2hlbiAncicgcHJvdGVjdGlvbiBiaXQgaXMgbm90IHNldCwgZmlsZSBjYW4gc3RpbGwgYmUgb3BlbmVkIGJ1dAorICAgIGdpdmVzIHJlYWQgZXJyb3JzLiBDaGVjayBwcm90ZWN0aW9uIGJlZm9yZSBvcGVuaW5nLgorLSAgIFdoZW4gd3JpdGluZyBjaGVjayBmb3IgZmlsZSBleGlzdHMgYnV0IG5vIHBlcm1pc3Npb24sICJQZXJtaXNzaW9uIGRlbmllZCIuCistICAgSWYgZmlsZSBkb2VzIG5vdCBleGlzdHMsIGNoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMuCistICAgTVNET1M6IGFsdGhvdWdoIHRfY3YgYW5kIHRfY2kgYXJlIG5vdCBzZXQsIGRvIGludmVydCBjaGFyIHVuZGVyIGN1cnNvci4KKy0gICBTZXR0aW5ncyBlZGl0IG1vZGU6IG1ha2UgZmlsZSB3aXRoICI6c2V0IG9wdD14eCIsIGVkaXQgaXQsIHBhcnNlIGl0IGFzIGV4CisgICAgY29tbWFuZHMuCistICAgIjpzZXQgLXcgYWxsIjogbGlzdCBvbmUgb3B0aW9uIHBlciBsaW5lLgorLSAgIEFtaWdhOiB0ZXN0IGZvciAndycgZmxhZyB3aGVuIHJlYWRpbmcgYSBmaWxlLgorLSAgIDp0YWJsZSBjb21tYW5kIChXZWJiKQorLSAgIEFkZCBuZXcgb3BlcmF0b3I6IGNsZWFyLCBtYWtlIGFyZWEgd2hpdGUgKHJlcGxhY2Ugd2l0aCBzcGFjZXMpOiAiZyAiLgorLSAgIE1ha2UgaXQgcG9zc2libGUgZm9yIGEgdXNlciB0byBkZWZpbmUgYSBuZXcgb3BlcmF0b3IuICBJbXBsZW1lbnRhdGlvbiB3aXRoCisgICAgaW50ZXJuYWwgc2NyaXB0aW5nIGxhbmd1YWdlIG9yIFBlcmw/CistICAgQWRkIGNvbW1hbmQgdG8gIjpyZWFkIiBhIGZpbGUgYXQgYSBjZXJ0YWluIGNvbHVtbiAoYmxvY2t3aXNlIHJlYWQ/KS4KKy0gICBBZGQgc29ydCBvZiByZXBsYWNlIG1vZGUgd2hlcmUgY2FzZSBpcyB0YWtlbiBmcm9tIHRoZSBvbGQgdGV4dCAoR29sZGZhcmIpLgorLSAgIEFsbG93IG11bHRpcGxlIGFyZ3VtZW50cyBmb3IgIjpyZWFkIiwgcmVhZCBhbGwgdGhlIGZpbGVzLgorLSAgIFN1cHBvcnQgZm9yIHRhYnMgaW4gc3BlY2lmaWMgY29sdW1uczogIjpzZXQgdGFiY29sPTgsMjAsMzQsNTYiIChEZW1pcmVsKS4KKy0gICBBZGQgJ3NlYXJjaGRpcicgb3B0aW9uOiBEaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGZpbGUgbmFtZSBiZWluZyBlZGl0ZWQKKyAgICAoRGVtaXJlbCkuCistICAgTW9kaWZpZXIgZm9yIHRoZSBwdXQgY29tbWFuZDogQ2hhbmdlIHRvIGxpbmV3aXNlLCBjaGFyd2lzZSwgYmxvY2t3aXNlLCBldGMuCistICAgQWRkIGNvbW1hbmRzIGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBvcHRpb25zICI6c2V0IHNhdmUiICJzZXQgcmVzdG9yZSIsCisgICAgZm9yIHVzZSBpbiBtYWNybydzIGFuZCB0aGUgbGlrZS4KKy0gICBLZWVwIG91dHB1dCBmcm9tIGxpc3RpbmdzIGluIGEgd2luZG93LCBzbyB5b3UgY2FuIGhhdmUgYSBsb29rIGF0IGl0IHdoaWxlCisgICAgd29ya2luZyBpbiBhbm90aGVyIHdpbmRvdy4gUHV0IGNtZGxpbmUgaW4gYSBzZXBhcmF0ZSB3aW5kb3c/CistICAgQWRkIHBvc3NpYmlsaXR5IHRvIHB1dCBvdXRwdXQgb2YgZXggY29tbWFuZHMgaW4gYSBidWZmZXIgb3IgZmlsZSwgZS5nLiBmb3IKKyAgICAiOnNldCBhbGwiLiAgIjpyIDpzZXQgYWxsIj8KKy0gICAnZWRpdCcgb3B0aW9uOiBXaGVuIG9mZiBjaGFuZ2luZyB0aGUgYnVmZmVyIGlzIG5vdCBwb3NzaWJsZSAoUmVhbGx5CisgICAgcmVhZC1vbmx5IG1vZGUpLgorLSAgIFdoZW4gdGhlICdlcXVhbGFsd2F5cycgb3B0aW9uIGlzIHNldCwgY3JlYXRpbmcgYSBuZXcgd2luZG93IHNob3VsZCBub3QKKyAgICByZXN1bHQgaW4gd2luZG93cyB0byBiZWNvbWUgYmlnZ2VyLiBEZWxldGluZyBhIHdpbmRvdyBzaG91bGQgbm90IHJlc3VsdCBpbgorICAgIGEgd2luZG93IHRvIGJlY29tZSBzbWFsbGVyIChXZWJiKS4KKy0gICBXaGVuIHJlc2l6aW5nIHRoZSB3aG9sZSBWaW0gd2luZG93LCB0aGUgd2luZG93cyBpbnNpZGUgc2hvdWxkIGJlIHJlc2l6ZWQKKyAgICBwcm9wb3J0aW9uYWxseSAoV2ViYikuCistICAgSW5jbHVkZSBvcHRpb25zIGRpcmVjdGx5IGluIG9wdGlvbiB0YWJsZSwgbm8gaW5kaXJlY3QgcG9pbnRlcnMuIFVzZQorICAgIG1rb3B0dGFiIHRvIG1ha2Ugb3B0aW9uIHRhYmxlPworLSAgIFdoZW4gZG9pbmcgIjp3IGRpciIsIHdoZXJlICJkaXIiIGlzIGEgZGlyZWN0b3J5IG5hbWUsIHdyaXRlIHRoZSBjdXJyZW50CisgICAgZmlsZSBpbnRvIHRoYXQgZGlyZWN0b3J5LCB3aXRoIHRoZSBjdXJyZW50IGZpbGUgbmFtZSAod2l0aG91dCB0aGUgcGF0aCk/CistICAgU3VwcG9ydCBmb3IgJ2RpY3Rpb25hcnkncyB0aGF0IGFyZSBzb3J0ZWQsIG1ha2VzIGFjY2VzcyBhIGxvdCBmYXN0ZXIKKyAgICAoSGFyaXRzaXMpLgorLSAgIEFkZCAiXlZyeCIgb24gdGhlIGNvbW1hbmQgbGluZSwgcmVwbGFjZSB3aXRoIGNvbnRlbnRzIG9mIHJlZ2lzdGVyIHguIFVzZWQKKyAgICBpbnN0ZWFkIG9mIENUUkwtUiB0byBtYWtlIHJlcGVhdGluZyBwb3NzaWJsZS4gKE1hcmluaWNoZXYpCistICAgQWRkICJeVmIiIG9uIHRoZSBjb21tYW5kIGxpbmUsIHJlcGxhY2Ugd2l0aCB3b3JkIGJlZm9yZSBvciB1bmRlciB0aGUKKyAgICBjdXJzb3I/CistICAgT3B0aW9uIHRvIG1ha2UgYSAuc3dwIGZpbGUgb25seSB3aGVuIGEgY2hhbmdlIGlzIG1hZGUgKFRlbXBsZXRvbikuCistICAgU3VwcG9ydCBtYXBwaW5nIGZvciByZXBsYWNlIG1vZGUgYW5kICJyIiBjb21tYW5kIChWaSBkb2Vzbid0IGRvIHRoaXMpPworNSAgIEFkZCAnaWdub3JlZmlsZWNhc2UnIG9wdGlvbjogSWdub3JlIGNhc2Ugd2hlbiBleHBhbmRpbmcgZmlsZSBuYW1lcy4KKyAgICAiOmUgbWE8VGFiPiIgd291bGQgYWxzbyBmaW5kICJNYWtlZmlsZSIgb24gVW5peC4KKzggICBTb3J0aW5nIG9mIGZpbGVuYW1lcyBmb3IgY29tcGxldGlvbiBpcyB3cm9uZyBvbiBzeXN0ZW1zIHRoYXQgaWdub3JlIGNhc2UKKyAgICBvZiBmaWxlbmFtZXMuICBBZGQgJ2lnbm9yZWZuY2FzZScgb3B0aW9uLiAgV2hlbiBzZXQsIGNhc2UgaW4gZmlsZW5hbWVzIGlzCisgICAgaWdub3JlZCBmb3Igc29ydGluZyB0aGVtLiBQYXRjaCBieSBNaWtlIFdpbGxpYW1zOgorICAgIH4vdmltL3BhdGNoZXMvaWdub3JlZm5jYXNlLiAgQWxzbyBjaGFuZ2Ugd2hhdCBtYXRjaGVzPyAgT3IgdXNlIGFub3RoZXIKKyAgICBvcHRpb24gbmFtZS4KKzggICBTaG91bGQgYmUgYWJsZSB0byBjb21waWxlIFZpbSBpbiBhbm90aGVyIGRpcmVjdG9yeSwgd2l0aCAkKHNyY2Rpcikgc2V0IHRvCisgICAgd2hlcmUgdGhlIHNvdXJjZXMgYXJlLiBBZGQgJChzcmNkaXIpIGluIHRoZSBNYWtlZmlsZSBpbiBhIGxvdCBvZiBwbGFjZXMuCisgICAgKE5ldGhlcnRvbikKKzYgICBNYWtlIGl0IGNvbmZpZ3VyYWJsZSB3aGVuICJKIiBpbnNlcnRzIGEgc3BhY2Ugb3Igbm90LiAgU2hvdWxkIG5vdCBhZGQgYQorICAgIHNwYWNlIGFmdGVyICIoIiwgZm9yIGV4YW1wbGUuCis1ICAgV2hlbiBpbnNlcnRpbmcgc3BhY2VzIGFmdGVyIHRoZSBlbmQtb2YtbGluZSBmb3IgJ3ZpcnR1YWxlZGl0JywgdXNlIHRhYnMKKyAgICB3aGVuIHRoZSB1c2VyIHdhbnRzIHRoaXMgKGUuZy4sIGFkZCBhICJ0YWIiIGZpZWxkIHRvICd2aXJ0dWFsZWRpdCcpLgorICAgIChTZXJ2YXRpdXMgQnJhbmR0KQorCisKK0Zyb20gRWx2aXM6CistICAgVXNlICJpbnN0bWFuLnNoIiB0byBpbnN0YWxsIG1hbnBhZ2VzPworLSAgIEFkZCAiOmFsaWFzIiBjb21tYW5kLgorLSAgIGZvbnRjaGFuZ2VzIHJlY29nbml6ZWQgIlxcZkIiIGV0Yy4KKy0gICBTZWFyY2ggcGF0dGVybnM6CisgICAgICBcQAltYXRjaCB3b3JkIHVuZGVyIGN1cnNvci4KKyAgICBidXQgZG86CisgICAgICBcQHcJbWF0Y2ggdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvcj8KKyAgICAgIFxAVwltYXRjaCB0aGUgV09SRCB1bmRlciB0aGUgY3Vyc29yPworOCAgICI6d2luZG93IiBjb21tYW5kOgorICAgIDp3aW4gKwluZXh0IHdpbmRvdyAodXApCisgICAgOndpbiArKwlpZGVtLCB3cmFwcGluZworICAgIDp3aW4gLQlwcmV2aW91cyB3aW5kb3cgKGRvd24pCisgICAgOndpbiAtLQlpZGVtLCB3cmFwcGluZworICAgIDp3aW4gbnIJdG8gd2luZG93IG51bWJlciAibnIiCisgICAgOndpbiBuYW1lCXRvIHdpbmRvdyBlZGl0aW5nIGJ1ZmZlciAibmFtZSIKKzcgICAiOmNjIiBjb21waWxlcyBhIHNpbmdsZSBmaWxlIChkZWZhdWx0OiBjdXJyZW50IG9uZSkuICAnY2NwcmcnICAgb3B0aW9uIGlzCisgICAgcHJvZ3JhbSB0byB1c2Ugd2l0aCAiOmNjIi4gIFVzZSAiOmNvbXBpbGUiIGluc3RlYWQgb2YgIjpjYyI/CisKKworRnJvbSBOdmk6CistICAgJ3NlYXJjaGluY3InIG9wdGlvbiwgYWxpYXMgZm9yICdpbmNzZWFyY2gnPworLSAgICdsZWZ0cmlnaHQnIG9wdGlvbiwgYWxpYXMgZm9yICdub3dyYXAnPworLSAgIEhhdmUgYSBsb29rIGF0ICJ2aS9kb2MvdmkuY2hhcnQiLCBmb3IgTnZpIHNwZWNpYWx0aWVzLgorOCAgIEFkZCAna2V5dGltZScsIHRpbWUgaW4gMS8xMCBzZWMgZm9yIG1hcHBpbmcgdGltZW91dD8KKy0gICBBZGQgJ2ZpbGVjJyBvcHRpb24gYXMgYW4gYWx0ZXJuYXRpdmUgZm9yICd3aWxkY2hhcicuCis2ICAgU3VwcG9ydCBOdmkgY29tbWFuZCBuYW1lcyBhcyBhbiBhbGlhczoKKyAgICA6YmcJCSAgICA6aGlkZQorICAgIDpmZwlmbmFtZQkgICAgOmJ1ZiBmbmFtZSAod2l0aCAnaGlkZGVuJyBzZXQ/KQorICAgIDpkaXMgYgkgICAgOmxzCisgICAgOkVkaXQgZm5hbWUJICAgIDpzcGxpdCBmbmFtZQorICAgIDpGZyBmbmFtZQkgICAgOnNidWYgZm5hbWUgKHdpdGggJ2hpZGRlbicgc2V0PykKKyAgICA6TmV4dAkgICAgOnNuZXh0IChjYW4ndCBkbyB0aGlzLCBhbHJlYWR5IHVzZSA6TmV4dCkKKyAgICA6UHJldmlvdXMJICAgIDpzcHJldmlvdXMKKyAgICA6VGFnCSAgICA6c3RhZworCisKK0Zyb20geHZpOgorLSAgIENUUkwtXyA6IHN3YXAgOHRoIGJpdCBvZiBjaGFyYWN0ZXIuCistICAgQWRkIGVncmVwLWxpa2UgcmVnZXggdHlwZSwgbGlrZSB4dmkgKE5lZCBLb256KSBvciBQZXJsIChFbW1hbnVlbCBNb2dlbmV0KQorCisKK0Zyb20gdmlsZToKKy0gICBXaGVuIGhvcml6b250YWwgc2Nyb2xsaW5nLCB1c2UgJz4nIGZvciBsaW5lcyBjb250aW51aW5nIHJpZ2h0IG9mIGEgd2luZG93LgorLSAgIFN1cHBvcnQgcHV0dGluZyAuc3dwIGZpbGVzIGluIC90bXA6IENvbW1hbmQgaW4gcmMubG9jYWwgdG8gbW92ZSAuc3dwIGZpbGVzCisgICAgZnJvbSAvdG1wIHRvIHNvbWUgZGlyZWN0b3J5IGJlZm9yZSBkZWxldGluZyBmaWxlcy4KKworCitGYXIgZnV0dXJlIGFuZCAiYmlnIiBleHRlbnNpb25zOgorLSAgIE1ha2UgaXQgZWFzeSB0byBzZXR1cCBWaW0gZm9yIGdyb3VwcyBvZiB1c2Vyczogbm92aWNlIHZpIHVzZXJzLCBub3ZpY2UKKyAgICBWaW0gdXNlcnMsIEMgcHJvZ3JhbW1lcnMsIHh0ZXJtIHVzZXJzLCBHVUkgdXNlcnMsLi4uCistICAgQ2hhbmdlIGxheW91dCBvZiBibG9ja3MgaW4gc3dhcCBmaWxlOiBUZXh0IGF0IHRoZSBzdGFydCwgd2l0aCAnXG4nIGluCisgICAgYmV0d2VlbiBsaW5lcyAoanVzdCBsb2FkIHRoZSBmaWxlIHdpdGhvdXQgY2hhbmdlcywgZXhjZXB0IGZvciBNYWMpLgorICAgIEluZGV4ZXMgZm9yIGxpbmVzIGFyZSBmcm9tIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGJhY2t3YXJkcy4gIEl0J3MgdGhlCisgICAgY3VycmVudCBsYXlvdXQgbWlycm9yZWQuCistICAgTWFrZSBpdCBwb3NzaWJsZSB0byBlZGl0IGEgcmVnaXN0ZXIsIGluIGEgd2luZG93LCBsaWtlIGEgYnVmZmVyLgorLSAgIEFkZCBzdHVmZiB0byBzeW50YXggaGlnaGxpZ2h0aW5nIHRvIGNoYW5nZSB0aGUgdGV4dCAodXBwZXItY2FzZSBrZXl3b3JkcywKKyAgICBzZXQgaW5kZW50LCBkZWZpbmUgb3RoZXIgaGlnaGxpZ2h0aW5nLCBldGMuKS4KKy0gICBNb2RlIHRvIGtlZXAgQy1jb2RlIGZvcm1hdHRlZCBhbGwgdGhlIHRpbWUgKHNvcnQgb2Ygb24tbGluZSBpbmRlbnQpLgorLSAgIFNldmVyYWwgdG9wLWxldmVsIHdpbmRvd3MgaW4gb25lIFZpbSBzZXNzaW9uLiAgQmUgYWJsZSB0byB1c2UgYSBkaWZmZXJlbnQKKyAgICBmb250IGluIGVhY2ggdG9wLWxldmVsIHdpbmRvdy4KKy0gICBBbGxvdyBlZGl0aW5nIGFib3ZlIHN0YXJ0IGFuZCBiZWxvdyBlbmQgb2YgYnVmZmVyIChmbGFnIGluICd2aXJ0dWFsZWRpdCcpLgorLSAgIFNtYXJ0IGN1dC9wYXN0ZTogcmVjb2duaXplIHdvcmRzIGFuZCBhZGp1c3Qgc3BhY2VzIGJlZm9yZS9hZnRlciB0aGVtLgorLSAgIEFkZCBvcGVuIG1vZGUsIHVzZSBpdCB3aGVuIHRlcm1pbmFsIGhhcyBubyBjdXJzb3IgcG9zaXRpb25pbmcuCistICAgU3BlY2lhbCAiZHJhd2luZyBtb2RlIjogYSBsaW5lIGlzIGRyYXduIHdoZXJlIHRoZSBjdXJzb3IgaXMgbW92ZWQgdG8uCisgICAgQmFja3NwYWNlIGRlbGV0ZXMgYWxvbmcgdGhlIGxpbmUgKGZyb20ganZpbSkuCistICAgSW1wbGVtZW50ICI6QnNldCIsIHNldCBvcHRpb24gaW4gYWxsIGJ1ZmZlcnMuICBBbHNvICI6V3NldCIsIHNldCBpbiBhbGwKKyAgICB3aW5kb3dzLCAiOkFzZXQsIHNldCBpbiBhbGwgYXJndW1lbnRzIGFuZCAiOlRzZXQiLCBzZXQgaW4gYWxsIGZpbGVzCisgICAgbWVudGlvbmVkIGluIHRoZSB0YWdzIGZpbGUuCisgICAgQWRkIGJ1ZmZlci9hcmcgcmFuZ2UsIGxpa2UgaW4gIjoyLDVCJXMvLi4uIiAoZG8gd2UgcmVhbGx5IG5lZWQgdGhpcz8/PykKKyAgICBBZGQgc2VhcmNoIHN0cmluZzogIkIvKi5jLyVzLy4uIj8gIE9yICI6Ri8qLmMvJXMvLi4iPworLSAgIFN1cHBvcnQgZm9yIHVuZGVybGluaW5nICh1bmRlcnNjb3JlLUJTLWNoYXIpLCBib2xkIChjaGFyLUJTLWNoYXIpIGFuZCBvdGhlcgorICAgIHN0YW5kb3V0IG1vZGVzIHN3aXRjaGVkIG9uL29mZiB3aXRoICwgJ292ZXJzdHJpa2UnIG9wdGlvbiAoUmVpdGVyKS4KKy0gICBBZGQgdmVydGljYWwgbW9kZSAoUGF1bCBKdXJ5LCBEZW1pcmVsKTogIjV2ZHciIGRlbGV0ZXMgYSB3b3JkIGluIGZpdmUKKyAgICBsaW5lcywgIjN2aXRleHRFU0MiIHdpbGwgaW5zZXJ0ICJ0ZXh0IiBpbiB0aHJlZSBsaW5lcywgZXRjLi4KKzQgICBSZWNvZ25pemUgbCwgIywgcCBhcyAnZmxhZ3MnIHRvIEVYIGNvbW1hbmRzOgorICAgIDpnL1JFLyNsIHNoYWxsIHByaW50IGxpbmVzIHdpdGggbGluZSBudW1iZXJzIGFuZCBpbiBsaXN0IGZvcm1hdC4KKyAgICA6Zy9SRS9kcCBzaGFsbCBwcmludCBsaW5lcyB0aGF0IGFyZSBkZWxldGVkLgorICAgIFBPU0lYOiBDb21tYW5kcyB3aGVyZSBmbGFncyBzaGFsbCBhcHBseSB0byBhbGwgbGluZXMgd3JpdHRlbjogbGlzdCwKKyAgICBudW1iZXIsIG9wZW4sIHByaW50LCBzdWJzdGl0dXRlLCB2aXN1YWwsICYsIHouIEZvciBvdGhlciBjb21tYW5kcywgZmxhZ3MKKyAgICBzaGFsbCBhcHBseSB0byB0aGUgY3VycmVudCBsaW5lIGFmdGVyIHRoZSBjb21tYW5kIGNvbXBsZXRlcy4gIEV4YW1wbGVzOgorICAgIDo3LDEwaiAjbCBKb2luIHRoZSBsaW5lcyA3LTEwIGFuZCBwcmludCB0aGUgcmVzdWx0IGluIGxpc3QKKy0gICBBbGxvdyB0d28gb3IgbW9yZSB1c2VycyB0byBlZGl0IHRoZSBzYW1lIGZpbGUgYXQgdGhlIHNhbWUgdGltZS4gIENoYW5nZXMKKyAgICBhcmUgcmVmbGVjdGVkIGluIGVhY2ggVmltIGltbWVkaWF0ZWx5LiAgQ291bGQgd29yayB3aXRoIGxvY2FsIGZpbGVzIGJ1dAorICAgIGFsc28gb3ZlciB0aGUgaW50ZXJuZXQuICBTZWUgaHR0cDovL3d3dy5jb2Rpbmdtb25rZXlzLmRlL3N1YmV0aGFlZGl0Ly4KKworCit2aW06dHc9Nzg6c3c9NDpzdHM9NDp0cz04OmZ0PWhlbHA6bm9ybDoKK3ZpbTogc2V0IGZvKz1uIDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3VnYW5kYS50eHQgYi9ydW50aW1lL2RvYy91Z2FuZGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGY3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91Z2FuZGEudHh0CkBAIC0wLDAgKzEsMjc3IEBACisqdWdhbmRhLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDEyCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworCQkJKnVnYW5kYSogKlVnYW5kYSogKmNvcHlpbmcqICpjb3B5cmlnaHQqICpsaWNlbnNlKgorU1VNTUFSWQorCQkJCQkJCQkqaWNjZiogKklDQ0YqCitWaW0gaXMgQ2hhcml0eXdhcmUuICBZb3UgY2FuIHVzZSBhbmQgY29weSBpdCBhcyBtdWNoIGFzIHlvdSBsaWtlLCBidXQgeW91IGFyZQorZW5jb3VyYWdlZCB0byBtYWtlIGEgZG9uYXRpb24gZm9yIG5lZWR5IGNoaWxkcmVuIGluIFVnYW5kYS4gIFBsZWFzZSBzZWUgfGtjY3wKK2JlbG93IG9yIHZpc2l0IHRoZSBJQ0NGIHdlYiBzaXRlLCBhdmFpbGFibGUgYXQgdGhlc2UgVVJMczoKKworCWh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnLworCWh0dHA6Ly93d3cudmltLm9yZy9pY2NmLworCitZb3UgY2FuIGFsc28gc3BvbnNvciB0aGUgZGV2ZWxvcG1lbnQgb2YgVmltLiAgVmltIHNwb25zb3JzIGNhbiB2b3RlIGZvcgorZmVhdHVyZXMuICBTZWUgfHNwb25zb3J8LgorCitUaGUgT3BlbiBQdWJsaWNhdGlvbiBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIFZpbSBkb2N1bWVudGF0aW9uLCBzZWUKK3xtYW51YWwtY29weXJpZ2h0fC4KKworPT09IGJlZ2luIG9mIGxpY2Vuc2UgPT09CisKK1ZJTSBMSUNFTlNFCisKK0kpICBUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9uIGRpc3RyaWJ1dGluZyB1bm1vZGlmaWVkIGNvcGllcyBvZiBWaW0gZXhjZXB0CisgICAgdGhhdCB0aGV5IG11c3QgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgdGV4dC4gIFlvdSBjYW4gYWxzbyBkaXN0cmlidXRlCisgICAgdW5tb2RpZmllZCBwYXJ0cyBvZiBWaW0sIGxpa2V3aXNlIHVucmVzdHJpY3RlZCBleGNlcHQgdGhhdCB0aGV5IG11c3QKKyAgICBpbmNsdWRlIHRoaXMgbGljZW5zZSB0ZXh0LiAgWW91IGFyZSBhbHNvIGFsbG93ZWQgdG8gaW5jbHVkZSBleGVjdXRhYmxlcworICAgIHRoYXQgeW91IG1hZGUgZnJvbSB0aGUgdW5tb2RpZmllZCBWaW0gc291cmNlcywgcGx1cyB5b3VyIG93biB1c2FnZQorICAgIGV4YW1wbGVzIGFuZCBWaW0gc2NyaXB0cy4KKworSUkpIEl0IGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIChvciBleHRlbmRlZCkgdmVyc2lvbiBvZiBWaW0sCisgICAgaW5jbHVkaW5nIGV4ZWN1dGFibGVzIGFuZC9vciBzb3VyY2UgY29kZSwgd2hlbiB0aGUgZm9sbG93aW5nIGZvdXIKKyAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgMSkgVGhpcyBsaWNlbnNlIHRleHQgbXVzdCBiZSBpbmNsdWRlZCB1bm1vZGlmaWVkLgorICAgIDIpIFRoZSBtb2RpZmllZCBWaW0gbXVzdCBiZSBkaXN0cmlidXRlZCBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaXZlIHdheXM6CisgICAgICAgYSkgSWYgeW91IG1ha2UgY2hhbmdlcyB0byBWaW0geW91cnNlbGYsIHlvdSBtdXN0IGNsZWFybHkgZGVzY3JpYmUgaW4KKwkgIHRoZSBkaXN0cmlidXRpb24gaG93IHRvIGNvbnRhY3QgeW91LiAgV2hlbiB0aGUgbWFpbnRhaW5lciBhc2tzIHlvdQorCSAgKGluIGFueSB3YXkpIGZvciBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIFZpbSB5b3UgZGlzdHJpYnV0ZWQsIHlvdQorCSAgbXVzdCBtYWtlIHlvdXIgY2hhbmdlcywgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBhdmFpbGFibGUgdG8gdGhlCisJICBtYWludGFpbmVyIHdpdGhvdXQgZmVlLiAgVGhlIG1haW50YWluZXIgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCisJICBpbmNsdWRlIHlvdXIgY2hhbmdlcyBpbiB0aGUgb2ZmaWNpYWwgdmVyc2lvbiBvZiBWaW0uICBXaGF0IHRoZQorCSAgbWFpbnRhaW5lciB3aWxsIGRvIHdpdGggeW91ciBjaGFuZ2VzIGFuZCB1bmRlciB3aGF0IGxpY2Vuc2UgdGhleQorCSAgd2lsbCBiZSBkaXN0cmlidXRlZCBpcyBuZWdvdGlhYmxlLiAgSWYgdGhlcmUgaGFzIGJlZW4gbm8gbmVnb3RpYXRpb24KKwkgIHRoZW4gdGhpcyBsaWNlbnNlLCBvciBhIGxhdGVyIHZlcnNpb24sIGFsc28gYXBwbGllcyB0byB5b3VyIGNoYW5nZXMuCisJICBUaGUgY3VycmVudCBtYWludGFpbmVyIGlzIEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+LiAgSWYgdGhpcworCSAgY2hhbmdlcyBpdCB3aWxsIGJlIGFubm91bmNlZCBpbiBhcHByb3ByaWF0ZSBwbGFjZXMgKG1vc3QgbGlrZWx5CisJICB2aW0uc2YubmV0LCB3d3cudmltLm9yZyBhbmQvb3IgY29tcC5lZGl0b3JzKS4gIFdoZW4gaXQgaXMgY29tcGxldGVseQorCSAgaW1wb3NzaWJsZSB0byBjb250YWN0IHRoZSBtYWludGFpbmVyLCB0aGUgb2JsaWdhdGlvbiB0byBzZW5kIGhpbQorCSAgeW91ciBjaGFuZ2VzIGNlYXNlcy4gIE9uY2UgdGhlIG1haW50YWluZXIgaGFzIGNvbmZpcm1lZCB0aGF0IGhlIGhhcworCSAgcmVjZWl2ZWQgeW91ciBjaGFuZ2VzIHRoZXkgd2lsbCBub3QgaGF2ZSB0byBiZSBzZW50IGFnYWluLgorICAgICAgIGIpIElmIHlvdSBoYXZlIHJlY2VpdmVkIGEgbW9kaWZpZWQgVmltIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIGFzCisJICBtZW50aW9uZWQgdW5kZXIgYSkgeW91IGFyZSBhbGxvd2VkIHRvIGZ1cnRoZXIgZGlzdHJpYnV0ZSBpdAorCSAgdW5tb2RpZmllZCwgYXMgbWVudGlvbmVkIGF0IEkpLiAgSWYgeW91IG1ha2UgYWRkaXRpb25hbCBjaGFuZ2VzIHRoZQorCSAgdGV4dCB1bmRlciBhKSBhcHBsaWVzIHRvIHRob3NlIGNoYW5nZXMuCisgICAgICAgYykgUHJvdmlkZSBhbGwgdGhlIGNoYW5nZXMsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgd2l0aCBldmVyeSBjb3B5IG9mCisJICB0aGUgbW9kaWZpZWQgVmltIHlvdSBkaXN0cmlidXRlLiAgVGhpcyBtYXkgYmUgZG9uZSBpbiB0aGUgZm9ybSBvZiBhCisJICBjb250ZXh0IGRpZmYuICBZb3UgY2FuIGNob29zZSB3aGF0IGxpY2Vuc2UgdG8gdXNlIGZvciBuZXcgY29kZSB5b3UKKwkgIGFkZC4gIFRoZSBjaGFuZ2VzIGFuZCB0aGVpciBsaWNlbnNlIG11c3Qgbm90IHJlc3RyaWN0IG90aGVycyBmcm9tCisJICBtYWtpbmcgdGhlaXIgb3duIGNoYW5nZXMgdG8gdGhlIG9mZmljaWFsIHZlcnNpb24gb2YgVmltLgorICAgICAgIGQpIFdoZW4geW91IGhhdmUgYSBtb2RpZmllZCBWaW0gd2hpY2ggaW5jbHVkZXMgY2hhbmdlcyBhcyBtZW50aW9uZWQKKwkgIHVuZGVyIGMpLCB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgd2l0aG91dCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZQorCSAgY2hhbmdlcyBpZiB0aGUgZm9sbG93aW5nIHRocmVlIGNvbmRpdGlvbnMgYXJlIG1ldDoKKwkgIC0gVGhlIGxpY2Vuc2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBjaGFuZ2VzIHBlcm1pdHMgeW91IHRvIGRpc3RyaWJ1dGUKKwkgICAgdGhlIGNoYW5nZXMgdG8gdGhlIFZpbSBtYWludGFpbmVyIHdpdGhvdXQgZmVlIG9yIHJlc3RyaWN0aW9uLCBhbmQKKwkgICAgcGVybWl0cyB0aGUgVmltIG1haW50YWluZXIgdG8gaW5jbHVkZSB0aGUgY2hhbmdlcyBpbiB0aGUgb2ZmaWNpYWwKKwkgICAgdmVyc2lvbiBvZiBWaW0gd2l0aG91dCBmZWUgb3IgcmVzdHJpY3Rpb24uCisJICAtIFlvdSBrZWVwIHRoZSBjaGFuZ2VzIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhZnRlciBsYXN0CisJICAgIGRpc3RyaWJ1dGluZyB0aGUgY29ycmVzcG9uZGluZyBtb2RpZmllZCBWaW0uICBXaGVuIHRoZSBtYWludGFpbmVyCisJICAgIG9yIHNvbWVvbmUgd2hvIHlvdSBkaXN0cmlidXRlZCB0aGUgbW9kaWZpZWQgVmltIHRvIGFza3MgeW91IChpbgorCSAgICBhbnkgd2F5KSBmb3IgdGhlIGNoYW5nZXMgd2l0aGluIHRoaXMgcGVyaW9kLCB5b3UgbXVzdCBtYWtlIHRoZW0KKwkgICAgYXZhaWxhYmxlIHRvIGhpbS4KKwkgIC0gWW91IGNsZWFybHkgZGVzY3JpYmUgaW4gdGhlIGRpc3RyaWJ1dGlvbiBob3cgdG8gY29udGFjdCB5b3UuICBUaGlzCisJICAgIGNvbnRhY3QgaW5mb3JtYXRpb24gbXVzdCByZW1haW4gdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzCisJICAgIGFmdGVyIGxhc3QgZGlzdHJpYnV0aW5nIHRoZSBjb3JyZXNwb25kaW5nIG1vZGlmaWVkIFZpbSwgb3IgYXMgbG9uZworCSAgICBhcyBwb3NzaWJsZS4KKyAgICAgICBlKSBXaGVuIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBhcHBsaWVzIHRvIHRoZSBjaGFuZ2VzLAorCSAgeW91IGNhbiBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBWaW0gdW5kZXIgdGhlIEdOVSBHUEwgdmVyc2lvbiAyIG9yCisJICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgICAzKSBBIG1lc3NhZ2UgbXVzdCBiZSBhZGRlZCwgYXQgbGVhc3QgaW4gdGhlIG91dHB1dCBvZiB0aGUgIjp2ZXJzaW9uIgorICAgICAgIGNvbW1hbmQgYW5kIGluIHRoZSBpbnRybyBzY3JlZW4sIHN1Y2ggdGhhdCB0aGUgdXNlciBvZiB0aGUgbW9kaWZpZWQgVmltCisgICAgICAgaXMgYWJsZSB0byBzZWUgdGhhdCBpdCB3YXMgbW9kaWZpZWQuICBXaGVuIGRpc3RyaWJ1dGluZyBhcyBtZW50aW9uZWQKKyAgICAgICB1bmRlciAyKWUpIGFkZGluZyB0aGUgbWVzc2FnZSBpcyBvbmx5IHJlcXVpcmVkIGZvciBhcyBmYXIgYXMgdGhpcyBkb2VzCisgICAgICAgbm90IGNvbmZsaWN0IHdpdGggdGhlIGxpY2Vuc2UgdXNlZCBmb3IgdGhlIGNoYW5nZXMuCisgICAgNCkgVGhlIGNvbnRhY3QgaW5mb3JtYXRpb24gYXMgcmVxdWlyZWQgdW5kZXIgMilhKSBhbmQgMilkKSBtdXN0IG5vdCBiZQorICAgICAgIHJlbW92ZWQgb3IgY2hhbmdlZCwgZXhjZXB0IHRoYXQgdGhlIHBlcnNvbiBoaW1zZWxmIGNhbiBtYWtlCisgICAgICAgY29ycmVjdGlvbnMuCisKK0lJSSkgSWYgeW91IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFZpbSwgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHVzZQorICAgICB0aGUgVmltIGxpY2Vuc2UgZm9yIHlvdXIgY2hhbmdlcyBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSB0byB0aGUKKyAgICAgbWFpbnRhaW5lciwgaW5jbHVkaW5nIHRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMKKyAgICAgYnkgZS1tYWlsIG9yIGJ5IHVwbG9hZGluZyB0aGUgZmlsZXMgdG8gYSBzZXJ2ZXIgYW5kIGUtbWFpbGluZyB0aGUgVVJMLgorICAgICBJZiB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgaXMgc21hbGwgKGUuZy4sIGEgbW9kaWZpZWQgTWFrZWZpbGUpIGUtbWFpbGluZyBhCisgICAgIGNvbnRleHQgZGlmZiB3aWxsIGRvLiAgVGhlIGUtbWFpbCBhZGRyZXNzIHRvIGJlIHVzZWQgaXMKKyAgICAgPG1haW50YWluZXJAdmltLm9yZz4KKworSVYpICBJdCBpcyBub3QgYWxsb3dlZCB0byByZW1vdmUgdGhpcyBsaWNlbnNlIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgVmltCisgICAgIHNvdXJjZXMsIHBhcnRzIG9mIGl0IG9yIGZyb20gYSBtb2RpZmllZCB2ZXJzaW9uLiAgWW91IG1heSB1c2UgdGhpcworICAgICBsaWNlbnNlIGZvciBwcmV2aW91cyBWaW0gcmVsZWFzZXMgaW5zdGVhZCBvZiB0aGUgbGljZW5zZSB0aGF0IHRoZXkgY2FtZQorICAgICB3aXRoLCBhdCB5b3VyIG9wdGlvbi4KKworPT09IGVuZCBvZiBsaWNlbnNlID09PQorCitOb3RlOgorCistIElmIHlvdSBhcmUgaGFwcHkgd2l0aCBWaW0sIHBsZWFzZSBleHByZXNzIHRoYXQgYnkgcmVhZGluZyB0aGUgcmVzdCBvZiB0aGlzCisgIGZpbGUgYW5kIGNvbnNpZGVyIGhlbHBpbmcgbmVlZHkgY2hpbGRyZW4gaW4gVWdhbmRhLgorCistIElmIHlvdSB3YW50IHRvIHN1cHBvcnQgZnVydGhlciBWaW0gZGV2ZWxvcG1lbnQgY29uc2lkZXIgYmVjb21pbmcgYQorICB8c3BvbnNvcnwuCisKKy0gQWNjb3JkaW5nIHRvIFJpY2hhcmQgU3RhbGxtYW4gdGhlIFZpbSBsaWNlbnNlIGlzIEdOVSBHUEwgY29tcGF0aWJsZS4KKyAgQSBmZXcgbWlub3IgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBzaW5jZSBoZSBjaGVja2VkIGl0LCBidXQgdGhhdCBzaG91bGQgbm90CisgIG1ha2UgYSBkaWZmZXJlbmNlLgorCistIElmIHlvdSBsaW5rIFZpbSB3aXRoIGEgbGlicmFyeSB0aGF0IGdvZXMgdW5kZXIgdGhlIEdOVSBHUEwsIHRoaXMgbGltaXRzCisgIGZ1cnRoZXIgZGlzdHJpYnV0aW9uIHRvIHRoZSBHTlUgR1BMLiAgQWxzbyB3aGVuIHlvdSBkaWRuJ3QgYWN0dWFsbHkgY2hhbmdlCisgIGFueXRoaW5nIGluIFZpbS4KKworLSBPbmNlIGEgY2hhbmdlIGlzIGluY2x1ZGVkIHRoYXQgZ29lcyB1bmRlciB0aGUgR05VIEdQTCwgdGhpcyBmb3JjZXMgYWxsCisgIGZ1cnRoZXIgY2hhbmdlcyB0byBhbHNvIGJlIG1hZGUgdW5kZXIgdGhlIEdOVSBHUEwgb3IgYSBjb21wYXRpYmxlIGxpY2Vuc2UuCisKKy0gSWYgeW91IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFZpbSwgeW91IGNhbiBpbmNsdWRlIHlvdXIgbmFtZSBhbmQKKyAgY29udGFjdCBpbmZvcm1hdGlvbiB3aXRoIHRoZSAiLS13aXRoLW1vZGlmaWVkLWJ5IiBjb25maWd1cmUgYXJndW1lbnQgb3IgdGhlCisgIE1PRElGSUVEX0JZIGRlZmluZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitLaWJhYWxlIENoaWxkcmVuJ3MgQ2VudHJlCQkJCQkJKmtjYyoKKworS2liYWFsZSBDaGlsZHJlbidzIENlbnRyZSAoS0NDKSBpcyBsb2NhdGVkIGluIEtpYmFhbGUsIGEgc21hbGwgdG93biBpbiB0aGUKK3NvdXRoIG9mIFVnYW5kYSwgbmVhciBUYW56YW5pYSwgaW4gRWFzdCBBZnJpY2EuICBUaGUgYXJlYSBpcyBrbm93biBhcyBSYWthaQorRGlzdHJpY3QuICBUaGUgcG9wdWxhdGlvbiBpcyBtb3N0bHkgZmFybWVycy4gIEFsdGhvdWdoIHBlb3BsZSBhcmUgcG9vciwgdGhlcmUKK2lzIGVub3VnaCBmb29kLiAgQnV0IHRoaXMgZGlzdHJpY3QgaXMgc3VmZmVyaW5nIGZyb20gQUlEUyBtb3JlIHRoYW4gYW55IG90aGVyCitwYXJ0IG9mIHRoZSB3b3JsZC4gIFNvbWUgc2F5IHRoYXQgaXQgc3RhcnRlZCB0aGVyZS4gIEVzdGltYXRpb25zIGFyZSB0aGF0IDEwCit0byAzMCUgb2YgdGhlIFVnYW5kYW5zIGFyZSBpbmZlY3RlZCB3aXRoIEhJVi4gIEJlY2F1c2UgcGFyZW50cyBkaWUsIHRoZXJlIGFyZQorbWFueSBvcnBoYW5zLiAgSW4gdGhpcyBkaXN0cmljdCBhYm91dCA2MCwwMDAgY2hpbGRyZW4gaGF2ZSBsb3N0IG9uZSBvciBib3RoCitwYXJlbnRzLCBvdXQgb2YgYSBwb3B1bGF0aW9uIG9mIDM1MCwwMDAuICBBbmQgdGhpcyBpcyBzdGlsbCBjb250aW51aW5nLgorCitUaGUgY2hpbGRyZW4gbmVlZCBhIGxvdCBvZiBoZWxwLiAgVGhlIEtDQyBpcyB3b3JraW5nIGhhcmQgdG8gcHJvdmlkZSB0aGUgbmVlZHkKK3dpdGggZm9vZCwgbWVkaWNhbCBjYXJlIGFuZCBlZHVjYXRpb24uICBGb29kIGFuZCBtZWRpY2FsIGNhcmUgdG8ga2VlcCB0aGVtCitoZWFsdGh5IG5vdywgYW5kIGVkdWNhdGlvbiBzbyB0aGF0IHRoZXkgY2FuIHRha2UgY2FyZSBvZiB0aGVtc2VsdmVzIGluIHRoZQorZnV0dXJlLiAgS0NDIHdvcmtzIG9uIGEgQ2hyaXN0aWFuIGJhc2UsIGJ1dCBoZWxwIGlzIGdpdmVuIHRvIGNoaWxkcmVuIG9mIGFueQorcmVsaWdpb24uCisKK1RoZSBrZXkgdG8gc29sdmluZyB0aGUgcHJvYmxlbXMgaW4gdGhpcyBhcmVhIGlzIGVkdWNhdGlvbi4gIFRoaXMgaGFzIGJlZW4KK25lZ2xlY3RlZCBpbiB0aGUgcGFzdCB5ZWFycyB3aXRoIHByZXNpZGVudCBJZGkgQW1pbiBhbmQgdGhlIGZvbGxvd2luZyBjaXZpbAord2Fycy4gIE5vdyB0aGF0IHRoZSBnb3Zlcm5tZW50IGlzIHN0YWJsZSBhZ2FpbiwgdGhlIGNoaWxkcmVuIGFuZCBwYXJlbnRzIGhhdmUKK3RvIGxlYXJuIGhvdyB0byB0YWtlIGNhcmUgb2YgdGhlbXNlbHZlcyBhbmQgaG93IHRvIGF2b2lkIGluZmVjdGlvbnMuICBUaGVyZSBpcworYWxzbyBoZWxwIGZvciBwZW9wbGUgd2hvIGFyZSBpbGwgYW5kIGh1bmdyeSwgYnV0IHRoZSBwcmltYXJ5IGdvYWwgaXMgdG8KK3ByZXZlbnQgcGVvcGxlIGZyb20gZ2V0dGluZyBpbGwgYW5kIHRvIHRlYWNoIHRoZW0gaG93IHRvIGdyb3cgaGVhbHRoeSBmb29kLgorCitNb3N0IG9mIHRoZSBvcnBoYW5zIGFyZSBsaXZpbmcgaW4gYW4gZXh0ZW5kZWQgZmFtaWx5LiAgQW4gdW5jbGUgb3Igb2xkZXIKK3Npc3RlciBpcyB0YWtpbmcgY2FyZSBvZiB0aGVtLiAgQmVjYXVzZSB0aGVzZSBmYW1pbGllcyBhcmUgYmlnIGFuZCB0aGUgaW5jb21lCisoaWYgYW55KSBpcyBsb3csIGEgY2hpbGQgaXMgbHVja3kgaWYgaXQgZ2V0cyBoZWFsdGh5IGZvb2QuICBDbG90aGVzLCBtZWRpY2FsCitjYXJlIGFuZCBzY2hvb2xpbmcgaXMgYmV5b25kIGl0cyByZWFjaC4gIFRvIGhlbHAgdGhlc2UgbmVlZHkgY2hpbGRyZW4sIGEKK3Nwb25zb3JzaGlwIHByb2dyYW0gd2FzIHB1dCBpbnRvIHBsYWNlLiAgQSBjaGlsZCBjYW4gYmUgZmluYW5jaWFsbHkgYWRvcHRlZC4KK0ZvciBhIGZldyBkb2xsYXJzIGEgbW9udGggS0NDIHNlZXMgdG8gaXQgdGhhdCB0aGUgY2hpbGQgZ2V0cyBpbmRpc3BlbnNhYmxlCitpdGVtcywgaXMgaGVhbHRoeSwgZ29lcyB0byBzY2hvb2wgYW5kIEtDQyB0YWtlcyBjYXJlIG9mIGFueXRoaW5nIGVsc2UgdGhhdAorbmVlZHMgdG8gYmUgZG9uZSBmb3IgdGhlIGNoaWxkIGFuZCB0aGUgZmFtaWx5IHRoYXQgc3VwcG9ydHMgaXQuCisKK0Jlc2lkZXMgaGVscGluZyB0aGUgY2hpbGQgZGlyZWN0bHksIHRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgY2hpbGQgZ3Jvd3MgdXAKK25lZWRzIHRvIGJlIGltcHJvdmVkLiAgS0NDIGhlbHBzIHNjaG9vbHMgdG8gaW1wcm92ZSB0aGVpciB0ZWFjaGluZyBtZXRob2RzLgorVGhlcmUgaXMgYSBkZW1vbnN0cmF0aW9uIHNjaG9vbCBhdCB0aGUgY2VudHJlIGFuZCB0ZWFjaGVyIHRyYWluaW5ncyBhcmUgZ2l2ZW4uCitIZWFsdGggd29ya2VycyBhcmUgYmVpbmcgdHJhaW5lZCwgaHlnaWVuZSBlZHVjYXRpb24gaXMgY2FycmllZCBvdXQgYW5kCitob3VzZWhvbGRzIGFyZSBzdGltdWxhdGVkIHRvIGJ1aWxkIGEgcHJvcGVyIGxhdHJpbmUuICBJIGhlbHBlZCBzZXR0aW5nIHVwIGEKK3Byb2R1Y3Rpb24gc2l0ZSBmb3IgY2VtZW50IHNsYWJzLiAgVGhlc2UgYXJlIHVzZWQgdG8gYnVpbGQgYSBnb29kIGxhdHJpbmUuCitUaGV5IGFyZSBzb2xkIGJlbG93IGNvc3QgcHJpY2UuCisKK1RoZXJlIGlzIGEgc21hbGwgY2xpbmljIGF0IHRoZSBwcm9qZWN0LCB3aGljaCBwcm92aWRlcyBjaGlsZHJlbiBhbmQgdGhlaXIKK2ZhbWlseSB3aXRoIG1lZGljYWwgaGVscC4gIFdoZW4gbmVlZGVkLCB0cmFuc3BvcnQgdG8gYSBob3NwaXRhbCBpcyBvZmZlcmVkLgorSW1tdW5pemF0aW9uIHByb2dyYW1zIGFyZSBjYXJyaWVkIG91dCBhbmQgaGVscCBpcyBwcm92aWRlZCB3aGVuIGFuIGVwaWRlbWljIGlzCiticmVha2luZyBvdXQgKG1lYXNsZXMgYW5kIGNob2xlcmEgaGF2ZSBiZWVuIGEgcHJvYmxlbSkuCisKK1N1bW1lciAxOTk0IHRvIHN1bW1lciAxOTk1IEkgc3BlbnQgYSB3aG9sZSB5ZWFyIGF0IHRoZSBjZW50cmUsIHdvcmtpbmcgYXMgYQordm9sdW50ZWVyLiAgSSBoYXZlIGhlbHBlZCB0byBleHBhbmQgdGhlIGNlbnRyZSBhbmQgd29ya2VkIGluIHRoZSBhcmVhIG9mIHdhdGVyCithbmQgc2FuaXRhdGlvbi4gIEkgbGVhcm5lZCB0aGF0IHRoZSBoZWxwIHRoYXQgdGhlIEtDQyBwcm92aWRlcyByZWFsbHkgaGVscHMuCitOb3cgdGhhdCBJJ20gYmFjayBpbiBIb2xsYW5kLCBJIHdvdWxkIGxpa2UgdG8gY29udGludWUgc3VwcG9ydGluZyBLQ0MuICBUbyBkbwordGhpcyBJJ20gcmFpc2luZyBmdW5kcyBhbmQgb3JnYW5pemluZyB0aGUgc3BvbnNvcnNoaXAgcHJvZ3JhbS4gIFBsZWFzZQorY29uc2lkZXIgb25lIG9mIHRoZXNlIHBvc3NpYmlsaXRpZXM6CisKKzEuICBTcG9uc29yIGEgY2hpbGQgaW4gcHJpbWFyeSBzY2hvb2w6IDE3IGV1cm8gYSBtb250aCAob3IgbW9yZSkuCisyLiAgU3BvbnNvciBhIGNoaWxkIGluIHNlY29uZGFyeSBzY2hvb2w6IDI1IGV1cm8gYSBtb250aCAob3IgbW9yZSkuCiszLiAgU3BvbnNvciB0aGUgY2xpbmljOiBBbnkgYW1vdW50IGEgbW9udGggb3IgcXVhcnRlcgorNC4gIEEgb25lLXRpbWUgZG9uYXRpb24KKworQ29tcGFyZWQgd2l0aCBvdGhlciBvcmdhbml6YXRpb25zIHRoYXQgZG8gY2hpbGQgc3BvbnNvcnNoaXAgdGhlIGFtb3VudHMgYXJlCit2ZXJ5IGxvdy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbW9uZXkgZ29lcyBkaXJlY3RseSB0byB0aGUgY2VudHJlLiAgTGVzcyB0aGFuCis1JSBpcyB1c2VkIGZvciBhZG1pbmlzdHJhdGlvbi4gIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGlzIGlzIGEgc21hbGwKK29yZ2FuaXphdGlvbiB0aGF0IHdvcmtzIHdpdGggdm9sdW50ZWVycy4gIElmIHlvdSB3b3VsZCBsaWtlIHRvIHNwb25zb3IgYQorY2hpbGQsIHlvdSBzaG91bGQgaGF2ZSB0aGUgaW50ZW50aW9uIHRvIGRvIHRoaXMgZm9yIGF0IGxlYXN0IG9uZSB5ZWFyLgorCitIb3cgZG8geW91IGtub3cgdGhhdCB0aGUgbW9uZXkgd2lsbCBiZSBzcGVudCByaWdodD8gIEZpcnN0IG9mIGFsbCB5b3UgaGF2ZSBteQorcGVyc29uYWwgZ3VhcmFudGVlIGFzIHRoZSBhdXRob3Igb2YgVmltLiAgSSB0cnVzdCB0aGUgcGVvcGxlIHRoYXQgYXJlIHdvcmtpbmcKK2F0IHRoZSBjZW50cmUsIEkga25vdyB0aGVtIHBlcnNvbmFsbHkuICBGdXJ0aGVyIG1vcmUsIHRoZSBjZW50cmUgaXMKK2NvLXNwb25zb3JlZCBhbmQgaW5zcGVjdGVkIGJ5IFdvcmxkIFZpc2lvbiwgU2F2ZSB0aGUgQ2hpbGRyZW4gRnVuZCBhbmQKK0ludGVybmF0aW9uYWwgQ2hpbGQgQ2FyZSBGdW5kLiAgVGhlIGNlbnRyZSBpcyB2aXNpdGVkIGFib3V0IG9uY2UgYSB5ZWFyIHRvCitjaGVjayB0aGUgcHJvZ3Jlc3MgKGF0IG91ciBvd24gY29zdCkuICBJIGhhdmUgdmlzaXRlZCB0aGUgY2VudHJlIG15c2VsZiBpbgorMTk5NiwgMTk5OCwgMjAwMCwgMjAwMSBhbmQgMjAwMy4gIFRoZSB2aXNpdCByZXBvcnRzIGFyZSBvbiB0aGUgSUNDRiB3ZWIgc2l0ZS4KKworSWYgeW91IGhhdmUgYW55IGZ1cnRoZXIgcXVlc3Rpb25zLCBzZW5kIG1lIGUtbWFpbDogPEJyYW1AdmltLm9yZz4uCisKK1RoZSBhZGRyZXNzIG9mIHRoZSBjZW50cmUgaXM6CisJCQlLaWJhYWxlIENoaWxkcmVuJ3MgQ2VudHJlCisJCQlwLm8uIGJveCAxNjU4CisJCQlNYXNha2EsIFVnYW5kYSwgRWFzdCBBZnJpY2EKKworU2VuZGluZyBtb25leToKKworQ2hlY2sgdGhlIElDQ0Ygd2ViIHNpdGUgZm9yIHRoZSBsYXRlc3QgaW5mb3JtYXRpb24hICBTZWUgfGljY2Z8IGZvciB0aGUgVVJMLgorCisKK1VTQSBhbmQgQ2FuYWRhOiBDb250YWN0IEtpYmFhbGUgQ2hpbGRyZW4ncyBGdW5kIChLQ0YpIGluIFN1cnJleSwgQ2FuYWRhLiAgVGhleQorCQl0YWtlIGNhcmUgb2YgdGhlIENhbmFkaWFuIHNwb25zb3JzIGZvciB0aGUgY2hpbGRyZW4gaW4KKwkJS2liYWFsZS4gIFlvdSBjYW4gc2VuZCB0aGVtIGEgb25lIHRpbWUgZG9uYXRpb24gZGlyZWN0bHkuCisJCVBsZWFzZSBzZW5kIG1lIGEgbm90ZSBzbyB0aGF0IGtub3cgd2hhdCBoYXMgYmVlbiBkb25hdGVkCisJCWJlY2F1c2Ugb2YgVmltLiAgQXNrIEtDRiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgc3BvbnNvcnNoaXAuCisJCQlLaWJhYWxlIENoaWxkcmVuJ3MgRnVuZCBjL28gUGFjaWZpYyBBY2FkZW15CisJCQkxMDIzOC0xNjggU3RyZWV0CisJCQlTdXJyZXksIEIuQy4gVjROIDFaNAorCQkJQ2FuYWRhCisJCQlQaG9uZTogNjA0LTU4MS01MzUzCisJCUlmIHlvdSBtYWtlIGEgZG9uYXRpb24gdG8gS2liYWFsZSBDaGlsZHJlbidzIEZ1bmQgKEtDRikgeW91CisJCXdpbGwgcmVjZWl2ZSBhIHRheCByZWNlaXB0IHdoaWNoIGNhbiBiZSBzdWJtaXR0ZWQgd2l0aCB5b3VyCisJCXRheCByZXR1cm4gKHVuZGVyIHRoZSBGcmVlIFRyYWRlIEFncmVlbWVudCB0YXggcmVjZWlwdHMgaXNzdWVkCisJCWJ5IGFuIG9yZ2FuaXphdGlvbiByZWdpc3RlcmVkIGluIENhbmFkYSBhcmUgZnVsbHkgYWNjZXB0ZWQgYnkKKwkJdGhlIElSUyBpbiB0aGUgVVNBLCB3aXRoIGEgZmV3IGNvbmRpdGlvbnMpLgorCitIb2xsYW5kOglUcmFuc2ZlciB0byB0aGUgYWNjb3VudCBvZiAiU3RpY2h0aW5nIElDQ0YgSG9sbGFuZCIgaW4gVmVubG8uCisJCVRoaXMgd2lsbCBhbGxvdyBmb3IgdGF4IGRlZHVjdGlvbiAoaWYgeW91IGxpdmUgaW4gSG9sbGFuZCkhCisJCQlQb3N0YmFuaywgbnIuIDQ1NDg3NzQKKworR2VybWFueToJSXQgaXMgcG9zc2libGUgdG8gbWFrZSBkb25hdGlvbnMgdGhhdCBhbGxvdyBmb3IgYSB0YXggcmV0dXJuLgorCQlDaGVjayB0aGUgSUNDRiB3ZWIgc2l0ZSBmb3IgdGhlIGxhdGVzdCBpbmZvcm1hdGlvbjoKKwkJCWh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2dlcm1hbnkuaHRtbAorCitXb3JsZDoJCVVzZSBhIHBvc3RhbCBtb25leSBvcmRlci4gIFRoYXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZyb20gYW55CisJCWNvdW50cnksIG1vc3RseSBmcm9tIHRoZSBwb3N0IG9mZmljZS4gIFVzZSB0aGlzIG5hbWUgKHdoaWNoIGlzCisJCWluIG15IHBhc3Nwb3J0KTogIkFicmFoYW0gTW9vbGVuYWFyIi4gIFVzZSBFdXJvIGZvciB0aGUKKwkJY3VycmVuY3kgaWYgcG9zc2libGUuCisKK0V1cm9wZToJCVVzZSBhIGJhbmsgdHJhbnNmZXIgaWYgcG9zc2libGUuICBZb3VyIGJhbmsgc2hvdWxkIGhhdmUgYSBmb3JtCisJCXRoYXQgeW91IGNhbiB1c2UgZm9yIHRoaXMuICBTZWUgIk90aGVycyIgYmVsb3cgZm9yIHRoZSBzd2lmdAorCQljb2RlIGFuZCBJQkFOIG51bWJlci4KKwkJQW55IG90aGVyIG1ldGhvZCBzaG91bGQgd29yay4gIEFzayBmb3IgaW5mb3JtYXRpb24gYWJvdXQKKwkJc3BvbnNvcnNoaXAuCisKK0NyZWRpdCBDYXJkOglZb3UgY2FuIHVzZSBQYXlQYWwgdG8gc2VuZCBtb25leSB3aXRoIGEgQ3JlZGl0IGNhcmQuICBUaGlzIGlzCisJCXRoZSBtb3N0IHdpZGVseSB1c2VkIEludGVybmV0IGJhc2VkIHBheW1lbnQgc3lzdGVtLiAgSXQncworCQlyZWFsbHkgc2ltcGxlIHRvIHVzZS4gIFVzZSB0aGlzIGxpbmsgdG8gZmluZCBtb3JlIGluZm86CisJCQlodHRwczovL3d3dy5wYXlwYWwuY29tL2FmZmlsL3BhbD1CcmFtJTQwbW9vbGVuYWFyLm5ldAorCQlUaGUgZS1tYWlsIGFkZHJlc3MgZm9yIHNlbmRpbmcgdGhlIG1vbmV5IHRvIGlzOgorCQkJQnJhbUBpY2NmLWhvbGxhbmQub3JnCisJCUZvciBhbW91bnRzIGFib3ZlICQxNTAgc2VuZGluZyBhIGNoZXF1ZSBpcyBwcmVmZXJyZWQuCisKK090aGVyczoJCVRyYW5zZmVyIHRvIG9uZSBvZiB0aGVzZSBhY2NvdW50cyBpZiBwb3NzaWJsZToKKwkJICAgIFBvc3RiYW5rLCBhY2NvdW50IDQ1NDg3NzQKKwkJCQlTd2lmdCBjb2RlOiBJTkdCIE5MIDJBCisJCQkJSUJBTjogTkw0NyBQU1RCIDAwMDQgNTQ4NyA3NAorCQkJdW5kZXIgdGhlIG5hbWUgInN0aWNodGluZyBJQ0NGIEhvbGxhbmQiLCBWZW5sbworCQkgICAgSWYgdGhhdCBkb2Vzbid0IHdvcms6CisJCSAgICBSYWJvYmFuayBWZW5sbywgYWNjb3VudCAzNzY1LjA1LjExNworCQkJCVN3aWZ0IGNvZGU6IFJBQk8gTkwgMlUKKwkJCXVuZGVyIHRoZSBuYW1lICJCcmFtIE1vb2xlbmFhciIsIFZlbmxvCisJCU90aGVyd2lzZSwgc2VuZCBhIGNoZXF1ZSBpbiBldXJvIG9yIFVTIGRvbGxhcnMgdG8gdGhlIGFkZHJlc3MKKwkJYmVsb3cuICBNaW5pbWFsIGFtb3VudDogJDcwIChteSBiYW5rIGRvZXMgbm90IGFjY2VwdCBzbWFsbGVyCisJCWFtb3VudHMgZm9yIGZvcmVpZ24gY2hlcXVlcywgc29ycnkpCisKK0FkZHJlc3MgdG8gc2VuZCBjaGVxdWVzIHRvOgorCQkJc3RpY2h0aW5nIElDQ0YgSG9sbGFuZAorCQkJQnJhbSBNb29sZW5hYXIKKwkJCUNsZW1hdGlzc3RyYWF0IDMwCisJCQk1OTI1IEJFICBWZW5sbworCQkJVGhlIE5ldGhlcmxhbmRzCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91bmRvLnR4dCBiL3J1bnRpbWUvZG9jL3VuZG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzM2ZjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91bmRvLnR4dApAQCAtMCwwICsxLDExNyBAQAorKnVuZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIE9jdCAyMQorCisKKwkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgorCisKK1VuZG8gYW5kIHJlZG8JCQkJCQkqdW5kby1yZWRvKgorCitUaGUgYmFzaWNzIGFyZSBleHBsYWluZWQgaW4gc2VjdGlvbiB8MDIuNXwgb2YgdGhlIHVzZXIgbWFudWFsLgorCisxLiBVbmRvIGFuZCByZWRvIGNvbW1hbmRzCXx1bmRvLWNvbW1hbmRzfAorMi4gVHdvIHdheXMgb2YgdW5kbwkJfHVuZG8tdHdvLXdheXN8CiszLiBSZW1hcmtzIGFib3V0IHVuZG8JCXx1bmRvLXJlbWFya3N8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gVW5kbyBhbmQgcmVkbyBjb21tYW5kcwkJCQkqdW5kby1jb21tYW5kcyoKKworPFVuZG8+CQlvcgkJCQkJKnVuZG8qICo8VW5kbz4qICp1KgordQkJCVVuZG8gW2NvdW50XSBjaGFuZ2VzLiAge1ZpOiBvbmx5IG9uZSBsZXZlbH0KKworCQkJCQkJCSo6dSogKjp1biogKjp1bmRvKgorOnVbbmRvXQkJCVVuZG8gb25lIGNoYW5nZS4gIHtWaTogb25seSBvbmUgbGV2ZWx9CisKKwkJCQkJCQkqQ1RSTC1SKgorQ1RSTC1SCQkJUmVkbyBbY291bnRdIGNoYW5nZXMgd2hpY2ggd2VyZSB1bmRvbmUuICB7Vmk6IHJlZHJhdworCQkJc2NyZWVufQorCisJCQkJCQkJKjpyZWQqICo6cmVkbyogKnJlZG8qCis6cmVkW29dCQkJUmVkbyBvbmUgY2hhbmdlIHdoaWNoIHdhcyB1bmRvbmUuICB7Vmk6IG5vIHJlZG99CisKKwkJCQkJCQkqVSoKK1UJCQlVbmRvIGFsbCBsYXRlc3QgY2hhbmdlcyBvbiBvbmUgbGluZS4gIHtWaTogd2hpbGUgbm90CisJCQltb3ZlZCBvZmYgb2YgaXR9CisKK1RoZSBsYXN0IGNoYW5nZXMgYXJlIHJlbWVtYmVyZWQuICBZb3UgY2FuIHVzZSB0aGUgdW5kbyBhbmQgcmVkbyBjb21tYW5kcyBhYm92ZQordG8gcmV2ZXJ0IHRoZSB0ZXh0IHRvIGhvdyBpdCB3YXMgYmVmb3JlIGVhY2ggY2hhbmdlLiAgWW91IGNhbiBhbHNvIGFwcGx5IHRoZQorY2hhbmdlcyBhZ2FpbiwgZ2V0dGluZyBiYWNrIHRoZSB0ZXh0IGJlZm9yZSB0aGUgdW5kby4KKworVGhlICJVIiBjb21tYW5kIGlzIHRyZWF0ZWQgYnkgdW5kby9yZWRvIGp1c3QgbGlrZSBhbnkgb3RoZXIgY29tbWFuZC4gIFRodXMgYQorInUiIGNvbW1hbmQgdW5kb2VzIGEgIlUiIGNvbW1hbmQgYW5kIGEgJ0NUUkwtUicgY29tbWFuZCByZWRvZXMgaXQgYWdhaW4uICBXaGVuCittaXhpbmcgIlUiLCAidSIgYW5kICdDVFJMLVInIHlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZSAiVSIgY29tbWFuZCB3aWxsCityZXN0b3JlIHRoZSBzaXR1YXRpb24gb2YgYSBsaW5lIHRvIGJlZm9yZSB0aGUgcHJldmlvdXMgIlUiIGNvbW1hbmQuICBUaGlzIG1heQorYmUgY29uZnVzaW5nLiAgVHJ5IGl0IG91dCB0byBnZXQgdXNlZCB0byBpdC4KK1RoZSAiVSIgY29tbWFuZCB3aWxsIGFsd2F5cyBtYXJrIHRoZSBidWZmZXIgYXMgY2hhbmdlZC4gIFdoZW4gIlUiIGNoYW5nZXMgdGhlCitidWZmZXIgYmFjayB0byBob3cgaXQgd2FzIHdpdGhvdXQgY2hhbmdlcywgaXQgaXMgc3RpbGwgY29uc2lkZXJlZCBjaGFuZ2VkLgorVXNlICJ1IiB0byB1bmRvIGNoYW5nZXMgdW50aWwgdGhlIGJ1ZmZlciBiZWNvbWVzIHVuY2hhbmdlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBUd28gd2F5cyBvZiB1bmRvCQkJCQkqdW5kby10d28td2F5cyoKKworSG93IHVuZG8gYW5kIHJlZG8gY29tbWFuZHMgd29yayBkZXBlbmRzIG9uIHRoZSAndScgZmxhZyBpbiAnY3BvcHRpb25zJy4KK1RoZXJlIGlzIHRoZSBWaW0gd2F5ICgndScgZXhjbHVkZWQpIGFuZCB0aGUgdmktY29tcGF0aWJsZSB3YXkgKCd1JyBpbmNsdWRlZCkuCitJbiB0aGUgVmltIHdheSwgInV1IiB1bmRvZXMgdHdvIGNoYW5nZXMuICBJbiB0aGUgVmktY29tcGF0aWJsZSB3YXksICJ1dSIgZG9lcworbm90aGluZyAodW5kb2VzIGFuIHVuZG8pLgorCisndScgZXhjbHVkZWQsIHRoZSBWaW0gd2F5OgorWW91IGNhbiBnbyBiYWNrIGluIHRpbWUgd2l0aCB0aGUgdW5kbyBjb21tYW5kLiAgWW91IGNhbiB0aGVuIGdvIGZvcndhcmQgYWdhaW4KK3dpdGggdGhlIHJlZG8gY29tbWFuZC4gIElmIHlvdSBtYWtlIGEgbmV3IGNoYW5nZSBhZnRlciB0aGUgdW5kbyBjb21tYW5kLAordGhlIHJlZG8gd2lsbCBub3QgYmUgcG9zc2libGUgYW55bW9yZS4KKworJ3UnIGluY2x1ZGVkLCB0aGUgVmktY29tcGF0aWJsZSB3YXk6CitUaGUgdW5kbyBjb21tYW5kIHVuZG9lcyB0aGUgcHJldmlvdXMgY2hhbmdlLCBhbmQgYWxzbyB0aGUgcHJldmlvdXMgdW5kbyBjb21tYW5kLgorVGhlIHJlZG8gY29tbWFuZCByZXBlYXRzIHRoZSBwcmV2aW91cyB1bmRvIGNvbW1hbmQuICBJdCBkb2VzIE5PVCByZXBlYXQgYQorY2hhbmdlIGNvbW1hbmQsIHVzZSAiLiIgZm9yIHRoYXQuCisKK0V4YW1wbGVzCVZpbSB3YXkJCQlWaS1jb21wYXRpYmxlIHdheQl+CisidXUiCQl0d28gdGltZXMgdW5kbwkJbm8tb3AKKyJ1IENUUkwtUiIJbm8tb3AJCQl0d28gdGltZXMgdW5kbworCitSYXRpb25hbGU6ICBOdmkgdXNlcyB0aGUgIi4iIGNvbW1hbmQgaW5zdGVhZCBvZiBDVFJMLVIuICBVbmZvcnR1bmF0ZWx5LCB0aGlzCisJICAgIGlzIG5vdCBWaSBjb21wYXRpYmxlLiAgRm9yIGV4YW1wbGUgImR3ZHd1LiIgaW4gVmkgZGVsZXRlcyB0d28KKwkgICAgd29yZHMsIGluIE52aSBpdCBkb2VzIG5vdGhpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gUmVtYXJrcyBhYm91dCB1bmRvCQkJCQkqdW5kby1yZW1hcmtzKgorCitUaGUgbnVtYmVyIG9mIGNoYW5nZXMgdGhhdCBhcmUgcmVtZW1iZXJlZCBpcyBzZXQgd2l0aCB0aGUgJ3VuZG9sZXZlbHMnIG9wdGlvbi4KK0lmIGl0IGlzIHplcm8sIHRoZSBWaS1jb21wYXRpYmxlIHdheSBpcyBhbHdheXMgdXNlZC4gIElmIGl0IGlzIG5lZ2F0aXZlIG5vCit1bmRvIGlzIHBvc3NpYmxlLiAgVXNlIHRoaXMgaWYgeW91IGFyZSBydW5uaW5nIG91dCBvZiBtZW1vcnkuCisKK01hcmtzIGZvciB0aGUgYnVmZmVyICgnYSB0byAneikgYXJlIGFsc28gc2F2ZWQgYW5kIHJlc3RvcmVkLCB0b2dldGhlciB3aXRoIHRoZQordGV4dC4gIHtWaSBkb2VzIHRoaXMgYSBsaXR0bGUgYml0IGRpZmZlcmVudH0KKworV2hlbiBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gdW5kb25lLCB0aGUgYnVmZmVyIGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIGNoYW5nZWQuCitJdCBpcyB0aGVuIHBvc3NpYmxlIHRvIGV4aXQgVmltIHdpdGggIjpxIiBpbnN0ZWFkIG9mICI6cSEiIHtub3QgaW4gVml9LiAgTm90ZQordGhhdCB0aGlzIGlzIHJlbGF0aXZlIHRvIHRoZSBsYXN0IHdyaXRlIG9mIHRoZSBmaWxlLiAgVHlwaW5nICJ1IiBhZnRlciAiOnciCithY3R1YWxseSBjaGFuZ2VzIHRoZSBidWZmZXIsIGNvbXBhcmVkIHRvIHdoYXQgd2FzIHdyaXR0ZW4sIHNvIHRoZSBidWZmZXIgaXMKK2NvbnNpZGVyZWQgY2hhbmdlZCB0aGVuLgorCitXaGVuIG1hbnVhbCB8Zm9sZGluZ3wgaXMgYmVpbmcgdXNlZCwgdGhlIGZvbGRzIGFyZSBub3Qgc2F2ZWQgYW5kIHJlc3RvcmVkLgorT25seSBjaGFuZ2VzIGNvbXBsZXRlbHkgd2l0aGluIGEgZm9sZCB3aWxsIGtlZXAgdGhlIGZvbGQgYXMgaXQgd2FzLCBiZWNhdXNlCit0aGUgZmlyc3QgYW5kIGxhc3QgbGluZSBvZiB0aGUgZm9sZCBkb24ndCBjaGFuZ2UuCisKK1RoZSBudW1iZXJlZCByZWdpc3RlcnMgY2FuIGFsc28gYmUgdXNlZCBmb3IgdW5kb2luZyBkZWxldGVzLiAgRWFjaCB0aW1lIHlvdQorZGVsZXRlIHRleHQsIGl0IGlzIHB1dCBpbnRvIHJlZ2lzdGVyICIxLiAgVGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyICIxIGFyZQorc2hpZnRlZCB0byAiMiwgZXRjLiAgVGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyICI5IGFyZSBsb3N0LiAgWW91IGNhbiBub3cgZ2V0CitiYWNrIHRoZSBtb3N0IHJlY2VudCBkZWxldGVkIHRleHQgd2l0aCB0aGUgcHV0IGNvbW1hbmQ6ICciMVAnLiAgKGFsc28sIGlmIHRoZQorZGVsZXRlZCB0ZXh0IHdhcyB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGRlbGV0ZSBvciBjb3B5IG9wZXJhdGlvbiwgJ1AnIG9yICdwJworYWxzbyB3b3JrcyBhcyB0aGlzIHB1dHMgdGhlIGNvbnRlbnRzIG9mIHRoZSB1bm5hbWVkIHJlZ2lzdGVyKS4gIFlvdSBjYW4gZ2V0CitiYWNrIHRoZSB0ZXh0IG9mIHRocmVlIGRlbGV0ZXMgYWdvIHdpdGggJyIzUCcuCisKKwkJCQkJCSpyZWRvLXJlZ2lzdGVyKgorSWYgeW91IHdhbnQgdG8gZ2V0IGJhY2sgbW9yZSB0aGFuIG9uZSBwYXJ0IG9mIGRlbGV0ZWQgdGV4dCwgeW91IGNhbiB1c2UgYQorc3BlY2lhbCBmZWF0dXJlIG9mIHRoZSByZXBlYXQgY29tbWFuZCAiLiIuICBJdCB3aWxsIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhlCityZWdpc3RlciB1c2VkLiAgU28gaWYgeW91IGZpcnN0IGRvICIiMVAiLCB0aGUgZm9sbG93aW5nICIuIiB3aWxsIHJlc3VsdCBpbiBhCisnIjJQJy4gIFJlcGVhdGluZyB0aGlzIHdpbGwgcmVzdWx0IGluIGFsbCBudW1iZXJlZCByZWdpc3RlcnMgYmVpbmcgaW5zZXJ0ZWQuCisKK0V4YW1wbGU6CUlmIHlvdSBkZWxldGVkIHRleHQgd2l0aCAnZGQuLi4uJyBpdCBjYW4gYmUgcmVzdG9yZWQgd2l0aAorCQknIjFQLi4uLicuCisKK0lmIHlvdSBkb24ndCBrbm93IGluIHdoaWNoIHJlZ2lzdGVyIHRoZSBkZWxldGVkIHRleHQgaXMsIHlvdSBjYW4gdXNlIHRoZQorOmRpc3BsYXkgY29tbWFuZC4gIEFuIGFsdGVybmF0aXZlIGlzIHRvIHRyeSB0aGUgZmlyc3QgcmVnaXN0ZXIgd2l0aCAnIjFQJywgYW5kCitpZiBpdCBpcyBub3Qgd2hhdCB5b3Ugd2FudCBkbyAndS4nLiAgVGhpcyB3aWxsIHJlbW92ZSB0aGUgY29udGVudHMgb2YgdGhlCitmaXJzdCBwdXQsIGFuZCByZXBlYXQgdGhlIHB1dCBjb21tYW5kIGZvciB0aGUgc2Vjb25kIHJlZ2lzdGVyLiAgUmVwZWF0IHRoZQorJ3UuJyB1bnRpbCB5b3UgZ290IHdoYXQgeW91IHdhbnQuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMDEudHh0IGIvcnVudGltZS9kb2MvdXNyXzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE2MDNhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzAxLnR4dApAQCAtMCwwICsxLDE4MCBAQAorKnVzcl8wMS50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwMQorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICAgQWJvdXQgdGhlIG1hbnVhbHMKKworCitUaGlzIGNoYXB0ZXIgaW50cm9kdWNlcyB0aGUgbWFudWFscyBhdmFpbGFibGUgd2l0aCBWaW0uICBSZWFkIHRoaXMgdG8ga25vdyB0aGUKK2NvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIGNvbW1hbmRzIGFyZSBleHBsYWluZWQuCisKK3wwMS4xfAlUd28gbWFudWFscworfDAxLjJ8CVZpbSBpbnN0YWxsZWQKK3wwMS4zfAlVc2luZyB0aGUgVmltIHR1dG9yCit8MDEuNHwJQ29weXJpZ2h0CisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzAyLnR4dHwgIFRoZSBmaXJzdCBzdGVwcyBpbiBWaW0KK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAxLjEqCVR3byBtYW51YWxzCisKK1RoZSBWaW0gZG9jdW1lbnRhdGlvbiBjb25zaXN0cyBvZiB0d28gcGFydHM6CisKKzEuIFRoZSBVc2VyIG1hbnVhbAorICAgVGFzayBvcmllbnRlZCBleHBsYW5hdGlvbnMsIGZyb20gc2ltcGxlIHRvIGNvbXBsZXguICBSZWFkcyBmcm9tIHN0YXJ0IHRvCisgICBlbmQgbGlrZSBhIGJvb2suCisKKzIuIFRoZSBSZWZlcmVuY2UgbWFudWFsCisgICBQcmVjaXNlIGRlc2NyaXB0aW9uIG9mIGhvdyBldmVyeXRoaW5nIGluIFZpbSB3b3Jrcy4KKworVGhlIG5vdGF0aW9uIHVzZWQgaW4gdGhlc2UgbWFudWFscyBpcyBleHBsYWluZWQgaGVyZTogfG5vdGF0aW9ufAorCisKK0pVTVBJTkcgQVJPVU5ECisKK1RoZSB0ZXh0IGNvbnRhaW5zIGh5cGVybGlua3MgYmV0d2VlbiB0aGUgdHdvIHBhcnRzLCBhbGxvd2luZyB5b3UgdG8gcXVpY2tseQoranVtcCBiZXR3ZWVuIHRoZSBkZXNjcmlwdGlvbiBvZiBhbiBlZGl0aW5nIHRhc2sgYW5kIGEgcHJlY2lzZSBleHBsYW5hdGlvbiBvZgordGhlIGNvbW1hbmRzIGFuZCBvcHRpb25zIHVzZWQgZm9yIGl0LiAgVXNlIHRoZXNlIHR3byBjb21tYW5kczoKKworCVByZXNzICBDVFJMLV0gIHRvIGp1bXAgdG8gYSBzdWJqZWN0IHVuZGVyIHRoZSBjdXJzb3IuCisJUHJlc3MgIENUUkwtTyAgdG8ganVtcCBiYWNrIChyZXBlYXQgdG8gZ28gZnVydGhlciBiYWNrKS4KKworTWFueSBsaW5rcyBhcmUgaW4gdmVydGljYWwgYmFycywgbGlrZSB0aGlzOiB8YmFyc3wuICBBbiBvcHRpb24gbmFtZSwgbGlrZQorJ251bWJlcicsIGEgY29tbWFuZCBpbiBkb3VibGUgcXVvdGVzIGxpa2UgIjp3cml0ZSIgYW5kIGFueSBvdGhlciB3b3JkIGNhbiBhbHNvCitiZSB1c2VkIGFzIGEgbGluay4gIFRyeSBpdCBvdXQ6IE1vdmUgdGhlIGN1cnNvciB0byAgQ1RSTC1dICBhbmQgcHJlc3MgQ1RSTC1dCitvbiBpdC4KKworT3RoZXIgc3ViamVjdHMgY2FuIGJlIGZvdW5kIHdpdGggdGhlICI6aGVscCIgY29tbWFuZCwgc2VlIHxoZWxwLnR4dHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAxLjIqCVZpbSBpbnN0YWxsZWQKKworTW9zdCBvZiB0aGUgbWFudWFscyBhc3N1bWUgdGhhdCBWaW0gaGFzIGJlZW4gcHJvcGVybHkgaW5zdGFsbGVkLiAgSWYgeW91CitkaWRuJ3QgZG8gdGhhdCB5ZXQsIG9yIGlmIFZpbSBkb2Vzbid0IHJ1biBwcm9wZXJseSAoZS5nLiwgZmlsZXMgY2FuJ3QgYmUgZm91bmQKK29yIGluIHRoZSBHVUkgdGhlIG1lbnVzIGRvIG5vdCBzaG93IHVwKSBmaXJzdCByZWFkIHRoZSBjaGFwdGVyIG9uCitpbnN0YWxsYXRpb246IHx1c3JfOTAudHh0fC4KKwkJCQkJCQkqbm90LWNvbXBhdGlibGUqCitUaGUgbWFudWFscyBvZnRlbiBhc3N1bWUgeW91IGFyZSB1c2luZyBWaW0gd2l0aCBWaS1jb21wYXRpYmlsaXR5IHN3aXRjaGVkCitvZmYuICBGb3IgbW9zdCBjb21tYW5kcyB0aGlzIGRvZXNuJ3QgbWF0dGVyLCBidXQgc29tZXRpbWVzIGl0IGlzIGltcG9ydGFudCwKK2UuZy4sIGZvciBtdWx0aS1sZXZlbCB1bmRvLiAgQW4gZWFzeSB3YXkgdG8gbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIHJpZ2h0CitzZXR1cCwgY29weSB0aGUgZXhhbXBsZSB2aW1yYyBmaWxlLiAgQnkgZG9pbmcgdGhpcyBpbnNpZGUgVmltIHlvdSBkb24ndCBoYXZlCit0byBjaGVjayBvdXQgd2hlcmUgaXQgaXMgbG9jYXRlZC4gIEhvdyB0byBkbyB0aGlzIGRlcGVuZHMgb24gdGhlIHN5c3RlbSB5b3UKK2FyZSB1c2luZzoKKworVW5peDogPgorCTohY3AgLWkgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0gfi8udmltcmMKK01TLURPUywgTVMtV2luZG93cywgT1MvMjogPgorCTohY29weSAkVklNUlVOVElNRS92aW1yY19leGFtcGxlLnZpbSAkVklNL192aW1yYworQW1pZ2E6ID4KKwk6IWNvcHkgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0gJFZJTS8udmltcmMKKworSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgeW91IHByb2JhYmx5IHdhbnQgdG8ga2VlcCBpdC4KKworSWYgeW91IHN0YXJ0IFZpbSBub3csIHRoZSAnY29tcGF0aWJsZScgb3B0aW9uIHNob3VsZCBiZSBvZmYuICBZb3UgY2FuIGNoZWNrIGl0Cit3aXRoIHRoaXMgY29tbWFuZDogPgorCisJOnNldCBjb21wYXRpYmxlPworCitJZiBpdCByZXNwb25kcyB3aXRoICJub2NvbXBhdGlibGUiIHlvdSBhcmUgZG9pbmcgd2VsbC4gIElmIHRoZSByZXNwb25zZSBpcworImNvbXBhdGlibGUiIHlvdSBhcmUgaW4gdHJvdWJsZS4gIFlvdSB3aWxsIGhhdmUgdG8gZmluZCBvdXQgd2h5IHRoZSBvcHRpb24gaXMKK3N0aWxsIHNldC4gIFBlcmhhcHMgdGhlIGZpbGUgeW91IHdyb3RlIGFib3ZlIGlzIG5vdCBmb3VuZC4gIFVzZSB0aGlzIGNvbW1hbmQKK3RvIGZpbmQgb3V0OiA+CisKKwk6c2NyaXB0bmFtZXMKKworSWYgeW91ciBmaWxlIGlzIG5vdCBpbiB0aGUgbGlzdCwgY2hlY2sgaXRzIGxvY2F0aW9uIGFuZCBuYW1lLiAgSWYgaXQgaXMgaW4gdGhlCitsaXN0LCB0aGVyZSBtdXN0IGJlIHNvbWUgb3RoZXIgcGxhY2Ugd2hlcmUgdGhlICdjb21wYXRpYmxlJyBvcHRpb24gaXMgc3dpdGNoZWQKK2JhY2sgb24uCisKK0ZvciBtb3JlIGluZm8gc2VlIHx2aW1yY3wgYW5kIHxjb21wYXRpYmxlLWRlZmF1bHR8LgorCisJTm90ZToKKwlUaGlzIG1hbnVhbCBpcyBhYm91dCB1c2luZyBWaW0gaW4gdGhlIG5vcm1hbCB3YXkuICBUaGVyZSBpcyBhbgorCWFsdGVybmF0aXZlIGNhbGxlZCAiZXZpbSIgKGVhc3kgVmltKS4gIFRoaXMgaXMgc3RpbGwgVmltLCBidXQgdXNlZCBpbgorCWEgd2F5IHRoYXQgcmVzZW1ibGVzIGEgY2xpY2stYW5kLXR5cGUgZWRpdG9yIGxpa2UgTm90ZXBhZC4gIEl0IGFsd2F5cworCXN0YXlzIGluIEluc2VydCBtb2RlLCB0aHVzIGl0IGZlZWxzIHZlcnkgZGlmZmVyZW50LiAgSXQgaXMgbm90CisJZXhwbGFpbmVkIGluIHRoZSB1c2VyIG1hbnVhbCwgc2luY2UgaXQgc2hvdWxkIGJlIG1vc3RseSBzZWxmCisJZXhwbGFuYXRvcnkuICBTZWUgfGV2aW0ta2V5c3wgZm9yIGRldGFpbHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAxLjMqCVVzaW5nIHRoZSBWaW0gdHV0b3IJCQkJKnR1dG9yKiAqdmltdHV0b3IqCisKK0luc3RlYWQgb2YgcmVhZGluZyB0aGUgdGV4dCAoYm9yaW5nISkgeW91IGNhbiB1c2UgdGhlIHZpbXR1dG9yIHRvIGxlYXJuIHlvdXIKK2ZpcnN0IFZpbSBjb21tYW5kcy4gIFRoaXMgaXMgYSAzMCBtaW51dGUgdHV0b3JpYWwgdGhhdCB0ZWFjaGVzIHRoZSBtb3N0IGJhc2ljCitWaW0gZnVuY3Rpb25hbGl0eSBoYW5kcy1vbi4KKworT24gVW5peCBhbmQgTVMtV2luZG93cywgaWYgVmltIGhhcyBiZWVuIHByb3Blcmx5IGluc3RhbGxlZCwgeW91IGNhbiBzdGFydCBpdAorZnJvbSB0aGUgc2hlbGw6Cis+CisJdmltdHV0b3IKKworVGhpcyB3aWxsIG1ha2UgYSBjb3B5IG9mIHRoZSB0dXRvciBmaWxlLCBzbyB0aGF0IHlvdSBjYW4gZWRpdCBpdCB3aXRob3V0Cit0aGUgcmlzayBvZiBkYW1hZ2luZyB0aGUgb3JpZ2luYWwuCisgICBUaGVyZSBhcmUgYSBmZXcgdHJhbnNsYXRlZCB2ZXJzaW9ucyBvZiB0aGUgdHV0b3IuICBUbyBmaW5kIG91dCBpZiB5b3VycyBpcworYXZhaWxhYmxlLCB1c2UgdGhlIHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZS4gIEZvciBGcmVuY2g6ID4KKworCXZpbXR1dG9yIGZyCisKK0ZvciBPcGVuVk1TLCBpZiBWaW0gaGFzIGJlZW4gcHJvcGVybHkgaW5zdGFsbGVkLCB5b3UgY2FuIHN0YXJ0IHZpbXR1dG9yIGZyb20gYQorVk1TIHByb21wdCB3aXRoOiA+CisKKwlAVklNOnZpbXR1dG9yCisKK09wdGlvbmFsbHkgYWRkIHRoZSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUgYXMgYWJvdmUuCisKKworT24gb3RoZXIgc3lzdGVtcywgeW91IGhhdmUgdG8gZG8gYSBsaXR0bGUgd29yazoKKworMS4gQ29weSB0aGUgdHV0b3IgZmlsZS4gIFlvdSBjYW4gZG8gdGhpcyB3aXRoIFZpbSAoaXQga25vd3Mgd2hlcmUgdG8gZmluZCBpdCk6Cis+CisJdmltIC11IE5PTkUgLWMgJ2UgJFZJTVJVTlRJTUUvdHV0b3IvdHV0b3InIC1jICd3ISBUVVRPUkNPUFknIC1jICdxJworPAorICAgVGhpcyB3aWxsIHdyaXRlIHRoZSBmaWxlICJUVVRPUkNPUFkiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRvIHVzZSBhCit0cmFuc2xhdGVkIHZlcnNpb24gb2YgdGhlIHR1dG9yLCBhcHBlbmQgdGhlIHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZSB0byB0aGUKK2ZpbGVuYW1lLiAgRm9yIEZyZW5jaDoKKz4KKwl2aW0gLXUgTk9ORSAtYyAnZSAkVklNUlVOVElNRS90dXRvci90dXRvci5mcicgLWMgJ3chIFRVVE9SQ09QWScgLWMgJ3EnCis8CisyLiBFZGl0IHRoZSBjb3BpZWQgZmlsZSB3aXRoIFZpbToKKz4KKwl2aW0gLXUgTk9ORSAtYyAic2V0IG5vY3AiIFRVVE9SQ09QWQorPAorICAgVGhlIGV4dHJhIGFyZ3VtZW50cyBtYWtlIHN1cmUgVmltIGlzIHN0YXJ0ZWQgaW4gYSBnb29kIG1vb2QuCisKKzMuIERlbGV0ZSB0aGUgY29waWVkIGZpbGUgd2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggaXQ6Cis+CisJZGVsIFRVVE9SQ09QWQorPAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDEuNCoJQ29weXJpZ2h0CQkJCQkqbWFudWFsLWNvcHlyaWdodCoKKworVGhlIFZpbSB1c2VyIG1hbnVhbCBhbmQgcmVmZXJlbmNlIG1hbnVhbCBhcmUgQ29weXJpZ2h0IChjKSAxOTg4LTIwMDMgYnkgQnJhbQorTW9vbGVuYWFyLiBUaGlzIG1hdGVyaWFsIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gdGhlIE9wZW4gUHVibGljYXRpb24gTGljZW5zZSwgdjEuMCBvciBsYXRlci4gIFRoZQorbGF0ZXN0IHZlcnNpb24gaXMgcHJlc2VudGx5IGF2YWlsYWJsZSBhdDoKKwkgICAgIGh0dHA6Ly93d3cub3BlbmNvbnRlbnQub3JnL29wbC5zaHRtbAorCitQZW9wbGUgd2hvIGNvbnRyaWJ1dGUgdG8gdGhlIG1hbnVhbHMgbXVzdCBhZ3JlZSB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZS4KKwkJCQkJCQkqZnJvbWJvb2sqCitQYXJ0cyBvZiB0aGUgdXNlciBtYW51YWwgY29tZSBmcm9tIHRoZSBib29rICJWaSBJTXByb3ZlZCAtIFZpbSIgYnkgU3RldmUKK091YWxsaW5lIChwdWJsaXNoZWQgYnkgTmV3IFJpZGVycyBQdWJsaXNoaW5nLCBJU0JOOiAwNzM1NzEwMDE1KS4gIFRoZSBPcGVuCitQdWJsaWNhdGlvbiBMaWNlbnNlIGFwcGxpZXMgdG8gdGhpcyBib29rLiAgT25seSBzZWxlY3RlZCBwYXJ0cyBhcmUgaW5jbHVkZWQKK2FuZCB0aGVzZSBoYXZlIGJlZW4gbW9kaWZpZWQgKGUuZy4sIGJ5IHJlbW92aW5nIHRoZSBwaWN0dXJlcywgdXBkYXRpbmcgdGhlCit0ZXh0IGZvciBWaW0gNi4wIGFuZCBmaXhpbmcgbWlzdGFrZXMpLiAgVGhlIG9taXNzaW9uIG9mIHRoZSB8ZnJvbWJvb2t8IHRhZworZG9lcyBub3QgbWVhbiB0aGF0IHRoZSB0ZXh0IGRvZXMgbm90IGNvbWUgZnJvbSB0aGUgYm9vay4KKworTWFueSB0aGFua3MgdG8gU3RldmUgT3VhbGxpbmUgYW5kIE5ldyBSaWRlcnMgZm9yIGNyZWF0aW5nIHRoaXMgYm9vayBhbmQKK3B1Ymxpc2hpbmcgaXQgdW5kZXIgdGhlIE9QTCEgIEl0IGhhcyBiZWVuIGEgZ3JlYXQgaGVscCB3aGlsZSB3cml0aW5nIHRoZSB1c2VyCittYW51YWwuICBOb3Qgb25seSBieSBwcm92aWRpbmcgbGl0ZXJhbCB0ZXh0LCBidXQgYWxzbyBieSBzZXR0aW5nIHRoZSB0b25lIGFuZAorc3R5bGUuCisKK0lmIHlvdSBtYWtlIG1vbmV5IHRocm91Z2ggc2VsbGluZyB0aGUgbWFudWFscywgeW91IGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvCitkb25hdGUgcGFydCBvZiB0aGUgcHJvZml0IHRvIGhlbHAgQUlEUyB2aWN0aW1zIGluIFVnYW5kYS4gIFNlZSB8aWNjZnwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMDIudHh0fCAgVGhlIGZpcnN0IHN0ZXBzIGluIFZpbQorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8wMi50eHQgYi9ydW50aW1lL2RvYy91c3JfMDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzIwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMDIudHh0CkBAIC0wLDAgKzEsNTA0IEBACisqdXNyXzAyLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA4CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgVGhlIGZpcnN0IHN0ZXBzIGluIFZpbQorCisKK1RoaXMgY2hhcHRlciBwcm92aWRlcyBqdXN0IGVub3VnaCBpbmZvcm1hdGlvbiB0byBlZGl0IGEgZmlsZSB3aXRoIFZpbS4gIE5vdAord2VsbCBvciBmYXN0LCBidXQgeW91IGNhbiBlZGl0LiAgVGFrZSBzb21lIHRpbWUgdG8gcHJhY3RpY2Ugd2l0aCB0aGVzZQorY29tbWFuZHMsIHRoZXkgZm9ybSB0aGUgYmFzZSBmb3Igd2hhdCBmb2xsb3dzLgorCit8MDIuMXwJUnVubmluZyBWaW0gZm9yIHRoZSBGaXJzdCBUaW1lCit8MDIuMnwJSW5zZXJ0aW5nIHRleHQKK3wwMi4zfAlNb3ZpbmcgYXJvdW5kCit8MDIuNHwJRGVsZXRpbmcgY2hhcmFjdGVycworfDAyLjV8CVVuZG8gYW5kIFJlZG8KK3wwMi42fAlPdGhlciBlZGl0aW5nIGNvbW1hbmRzCit8MDIuN3wJR2V0dGluZyBvdXQKK3wwMi44fAlGaW5kaW5nIGhlbHAKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMDMudHh0fCAgTW92aW5nIGFyb3VuZAorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMDEudHh0fCAgQWJvdXQgdGhlIG1hbnVhbHMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAyLjEqCVJ1bm5pbmcgVmltIGZvciB0aGUgRmlyc3QgVGltZQorCitUbyBzdGFydCBWaW0sIGVudGVyIHRoaXMgY29tbWFuZDogPgorCisJZ3ZpbSBmaWxlLnR4dAorCitJbiBVTklYIHlvdSBjYW4gdHlwZSB0aGlzIGF0IGFueSBjb21tYW5kIHByb21wdC4gIElmIHlvdSBhcmUgcnVubmluZyBNaWNyb3NvZnQKK1dpbmRvd3MsIG9wZW4gYW4gTVMtRE9TIHByb21wdCB3aW5kb3cgYW5kIGVudGVyIHRoZSBjb21tYW5kLgorICAgSW4gZWl0aGVyIGNhc2UsIFZpbSBzdGFydHMgZWRpdGluZyBhIGZpbGUgY2FsbGVkIGZpbGUudHh0LiAgQmVjYXVzZSB0aGlzCitpcyBhIG5ldyBmaWxlLCB5b3UgZ2V0IGEgYmxhbmsgd2luZG93LiBUaGlzIGlzIHdoYXQgeW91ciBzY3JlZW4gd2lsbCBsb29rCitsaWtlOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8IwkJCQkJfAorCXx+CQkJCQl8CisJfH4JCQkJCXwKKwl8fgkJCQkJfAorCXx+CQkJCQl8CisJfCJmaWxlLnR4dCIgW05ldyBmaWxlXQkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkoJyMiIGlzIHRoZSBjdXJzb3IgcG9zaXRpb24uKQorCitUaGUgdGlsZGUgKH4pIGxpbmVzIGluZGljYXRlIGxpbmVzIG5vdCBpbiB0aGUgZmlsZS4gIEluIG90aGVyIHdvcmRzLCB3aGVuIFZpbQorcnVucyBvdXQgb2YgZmlsZSB0byBkaXNwbGF5LCBpdCBkaXNwbGF5cyB0aWxkZSBsaW5lcy4gIEF0IHRoZSBib3R0b20gb2YgdGhlCitzY3JlZW4sIGEgbWVzc2FnZSBsaW5lIGluZGljYXRlcyB0aGUgZmlsZSBpcyBuYW1lZCBmaWxlLnR4dCBhbmQgc2hvd3MgdGhhdCB5b3UKK2FyZSBjcmVhdGluZyBhIG5ldyBmaWxlLiAgVGhlIG1lc3NhZ2UgaW5mb3JtYXRpb24gaXMgdGVtcG9yYXJ5IGFuZCBvdGhlcgoraW5mb3JtYXRpb24gb3ZlcndyaXRlcyBpdC4KKworCitUSEUgVklNIENPTU1BTkQKKworVGhlIGd2aW0gY29tbWFuZCBjYXVzZXMgdGhlIGVkaXRvciB0byBjcmVhdGUgYSBuZXcgd2luZG93IGZvciBlZGl0aW5nLiAgSWYgeW91Cit1c2UgdGhpcyBjb21tYW5kOiA+CisKKwl2aW0gZmlsZS50eHQKKwordGhlIGVkaXRpbmcgb2NjdXJzIGluc2lkZSB5b3VyIGNvbW1hbmQgd2luZG93LiAgSW4gb3RoZXIgd29yZHMsIGlmIHlvdSBhcmUKK3J1bm5pbmcgaW5zaWRlIGFuIHh0ZXJtLCB0aGUgZWRpdG9yIHVzZXMgeW91ciB4dGVybSB3aW5kb3cuICBJZiB5b3UgYXJlIHVzaW5nCithbiBNUy1ET1MgY29tbWFuZCBwcm9tcHQgd2luZG93IHVuZGVyIE1pY3Jvc29mdCBXaW5kb3dzLCB0aGUgZWRpdGluZyBvY2N1cnMKK2luc2lkZSB0aGlzIHdpbmRvdy4gIFRoZSB0ZXh0IGluIHRoZSB3aW5kb3cgd2lsbCBsb29rIHRoZSBzYW1lIGZvciBib3RoCit2ZXJzaW9ucywgYnV0IHdpdGggZ3ZpbSB5b3UgaGF2ZSBleHRyYSBmZWF0dXJlcywgbGlrZSBhIG1lbnUgYmFyLiAgTW9yZSBhYm91dAordGhhdCBsYXRlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDIuMioJSW5zZXJ0aW5nIHRleHQKKworVGhlIFZpbSBlZGl0b3IgaXMgYSBtb2RhbCBlZGl0b3IuICBUaGF0IG1lYW5zIHRoYXQgdGhlIGVkaXRvciBiZWhhdmVzCitkaWZmZXJlbnRseSwgZGVwZW5kaW5nIG9uIHdoaWNoIG1vZGUgeW91IGFyZSBpbi4gIFRoZSB0d28gYmFzaWMgbW9kZXMgYXJlCitjYWxsZWQgTm9ybWFsIG1vZGUgYW5kIEluc2VydCBtb2RlLiAgSW4gTm9ybWFsIG1vZGUgdGhlIGNoYXJhY3RlcnMgeW91IHR5cGUKK2FyZSBjb21tYW5kcy4gIEluIEluc2VydCBtb2RlIHRoZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBhcyB0ZXh0LgorICAgU2luY2UgeW91IGhhdmUganVzdCBzdGFydGVkIFZpbSBpdCB3aWxsIGJlIGluIE5vcm1hbCBtb2RlLiAgVG8gc3RhcnQgSW5zZXJ0Cittb2RlIHlvdSB0eXBlIHRoZSAiaSIgY29tbWFuZCAoaSBmb3IgSW5zZXJ0KS4gIFRoZW4geW91IGNhbiBlbnRlcgordGhlIHRleHQuICBJdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGZpbGUuICBEbyBub3Qgd29ycnkgaWYgeW91IG1ha2UKK21pc3Rha2VzOyB5b3UgY2FuIGNvcnJlY3QgdGhlbSBsYXRlci4gIFRvIGVudGVyIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbW1lcidzCitsaW1lcmljaywgdGhpcyBpcyB3aGF0IHlvdSB0eXBlOiA+CisKKwlpQSB2ZXJ5IGludGVsbGlnZW50IHR1cnRsZQorCUZvdW5kIHByb2dyYW1taW5nIFVOSVggYSBodXJkbGUKKworQWZ0ZXIgdHlwaW5nICJ0dXJ0bGUiIHlvdSBwcmVzcyB0aGUgPEVudGVyPiBrZXkgdG8gc3RhcnQgYSBuZXcgbGluZS4gIEZpbmFsbHkKK3lvdSBwcmVzcyB0aGUgPEVzYz4ga2V5IHRvIHN0b3AgSW5zZXJ0IG1vZGUgYW5kIGdvIGJhY2sgdG8gTm9ybWFsIG1vZGUuICBZb3UKK25vdyBoYXZlIHR3byBsaW5lcyBvZiB0ZXh0IGluIHlvdXIgVmltIHdpbmRvdzoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfEEgdmVyeSBpbnRlbGxpZ2VudCB0dXJ0bGUJCXwKKwl8Rm91bmQgcHJvZ3JhbW1pbmcgVU5JWCBhIGh1cmRsZQl8CisJfH4JCQkJCXwKKwl8fgkJCQkJfAorCXwJCQkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK1dIQVQgSVMgVEhFIE1PREU/CisKK1RvIGJlIGFibGUgdG8gc2VlIHdoYXQgbW9kZSB5b3UgYXJlIGluLCB0eXBlIHRoaXMgY29tbWFuZDogPgorCisJOnNldCBzaG93bW9kZQorCitZb3Ugd2lsbCBub3RpY2UgdGhhdCB3aGVuIHR5cGluZyB0aGUgY29sb24gVmltIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGxhc3QKK2xpbmUgb2YgdGhlIHdpbmRvdy4gIFRoYXQncyB3aGVyZSB5b3UgdHlwZSBjb2xvbiBjb21tYW5kcyAoY29tbWFuZHMgdGhhdCBzdGFydAord2l0aCBhIGNvbG9uKS4gIEZpbmlzaCB0aGlzIGNvbW1hbmQgYnkgcHJlc3NpbmcgdGhlIDxFbnRlcj4ga2V5IChhbGwgY29tbWFuZHMKK3RoYXQgc3RhcnQgd2l0aCBhIGNvbG9uIGFyZSBmaW5pc2hlZCB0aGlzIHdheSkuCisgICBOb3csIGlmIHlvdSB0eXBlIHRoZSAiaSIgY29tbWFuZCBWaW0gd2lsbCBkaXNwbGF5IC0tSU5TRVJULS0gYXQgdGhlIGJvdHRvbQorb2YgdGhlIHdpbmRvdy4gIFRoaXMgaW5kaWNhdGVzIHlvdSBhcmUgaW4gSW5zZXJ0IG1vZGUuCisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxBIHZlcnkgaW50ZWxsaWdlbnQgdHVydGxlCQl8CisJfEZvdW5kIHByb2dyYW1taW5nIFVOSVggYSBodXJkbGUJfAorCXx+CQkJCQl8CisJfH4JCQkJCXwKKwl8LS0gSU5TRVJUIC0tCQkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitJZiB5b3UgcHJlc3MgPEVzYz4gdG8gZ28gYmFjayB0byBOb3JtYWwgbW9kZSB0aGUgbGFzdCBsaW5lIHdpbGwgYmUgbWFkZSBibGFuay4KKworCitHRVRUSU5HIE9VVCBPRiBUUk9VQkxFCisKK09uZSBvZiB0aGUgcHJvYmxlbXMgZm9yIFZpbSBub3ZpY2VzIGlzIG1vZGUgY29uZnVzaW9uLCB3aGljaCBpcyBjYXVzZWQgYnkKK2ZvcmdldHRpbmcgd2hpY2ggbW9kZSB5b3UgYXJlIGluIG9yIGJ5IGFjY2lkZW50YWxseSB0eXBpbmcgYSBjb21tYW5kIHRoYXQKK3N3aXRjaGVzIG1vZGVzLiAgVG8gZ2V0IGJhY2sgdG8gTm9ybWFsIG1vZGUsIG5vIG1hdHRlciB3aGF0IG1vZGUgeW91IGFyZSBpbiwKK3ByZXNzIHRoZSA8RXNjPiBrZXkuICBTb21ldGltZXMgeW91IGhhdmUgdG8gcHJlc3MgaXQgdHdpY2UuICBJZiBWaW0gYmVlcHMgYmFjaworYXQgeW91LCB5b3UgYWxyZWFkeSBhcmUgaW4gTm9ybWFsIG1vZGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAyLjMqCU1vdmluZyBhcm91bmQKKworQWZ0ZXIgeW91IHJldHVybiB0byBOb3JtYWwgbW9kZSwgeW91IGNhbiBtb3ZlIGFyb3VuZCBieSB1c2luZyB0aGVzZSBrZXlzOgorCisJaCAgIGxlZnQJCQkJCQkqaGprbCoKKwlqICAgZG93bgorCWsgICB1cAorCWwgICByaWdodAorCitBdCBmaXJzdCwgaXQgbWF5IGFwcGVhciB0aGF0IHRoZXNlIGNvbW1hbmRzIHdlcmUgY2hvc2VuIGF0IHJhbmRvbS4gIEFmdGVyIGFsbCwKK3dobyBldmVyIGhlYXJkIG9mIHVzaW5nIGwgZm9yIHJpZ2h0PyAgQnV0IGFjdHVhbGx5LCB0aGVyZSBpcyBhIHZlcnkgZ29vZAorcmVhc29uIGZvciB0aGVzZSBjaG9pY2VzOiBNb3ZpbmcgdGhlIGN1cnNvciBpcyB0aGUgbW9zdCBjb21tb24gdGhpbmcgeW91IGRvIGluCithbiBlZGl0b3IsIGFuZCB0aGVzZSBrZXlzIGFyZSBvbiB0aGUgaG9tZSByb3cgb2YgeW91ciByaWdodCBoYW5kLiAgSW4gb3RoZXIKK3dvcmRzLCB0aGVzZSBjb21tYW5kcyBhcmUgcGxhY2VkIHdoZXJlIHlvdSBjYW4gdHlwZSB0aGVtIHRoZSBmYXN0ZXN0CisoZXNwZWNpYWxseSB3aGVuIHlvdSB0eXBlIHdpdGggdGVuIGZpbmdlcnMpLgorCisJTm90ZToKKwlZb3UgY2FuIGFsc28gbW92ZSB0aGUgY3Vyc29yIGJ5IHVzaW5nIHRoZSBhcnJvdyBrZXlzLiAgSWYgeW91IGRvLAorCWhvd2V2ZXIsIHlvdSBncmVhdGx5IHNsb3cgZG93biB5b3VyIGVkaXRpbmcgYmVjYXVzZSB0byBwcmVzcyB0aGUgYXJyb3cKKwlrZXlzLCB5b3UgbXVzdCBtb3ZlIHlvdXIgaGFuZCBmcm9tIHRoZSB0ZXh0IGtleXMgdG8gdGhlIGFycm93IGtleXMuCisJQ29uc2lkZXJpbmcgdGhhdCB5b3UgbWlnaHQgYmUgZG9pbmcgaXQgaHVuZHJlZHMgb2YgdGltZXMgYW4gaG91ciwgdGhpcworCWNhbiB0YWtlIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUuCisJICAgQWxzbywgdGhlcmUgYXJlIGtleWJvYXJkcyB3aGljaCBkbyBub3QgaGF2ZSBhcnJvdyBrZXlzLCBvciB3aGljaAorCWxvY2F0ZSB0aGVtIGluIHVudXN1YWwgcGxhY2VzOyB0aGVyZWZvcmUsIGtub3dpbmcgdGhlIHVzZSBvZiB0aGUgaGprbAorCWtleXMgaGVscHMgaW4gdGhvc2Ugc2l0dWF0aW9ucy4KKworT25lIHdheSB0byByZW1lbWJlciB0aGVzZSBjb21tYW5kcyBpcyB0aGF0IGggaXMgb24gdGhlIGxlZnQsIGwgaXMgb24gdGhlCityaWdodCBhbmQgaiBwb2ludHMgZG93bi4gIEluIGEgcGljdHVyZTogPgorCisJCSAgICAgICBrCisJCSAgIGggICAgIGwKKwkJICAgICBqCisKK1RoZSBiZXN0IHdheSB0byBsZWFybiB0aGVzZSBjb21tYW5kcyBpcyBieSB1c2luZyB0aGVtLiAgVXNlIHRoZSAiaSIgY29tbWFuZCB0bworaW5zZXJ0IHNvbWUgbW9yZSBsaW5lcyBvZiB0ZXh0LiAgVGhlbiB1c2UgdGhlIGhqa2wga2V5cyB0byBtb3ZlIGFyb3VuZCBhbmQKK2luc2VydCBhIHdvcmQgc29tZXdoZXJlLiAgRG9uJ3QgZm9yZ2V0IHRvIHByZXNzIDxFc2M+IHRvIGdvIGJhY2sgdG8gTm9ybWFsCittb2RlLiAgVGhlIHx2aW10dXRvcnwgaXMgYWxzbyBhIG5pY2Ugd2F5IHRvIGxlYXJuIGJ5IGRvaW5nLgorCitGb3IgSmFwYW5lc2UgdXNlcnMsIEhpcm9zaGkgSXdhdGFuaSBzdWdnZXN0ZWQgdXNpbmcgdGhpczoKKworCQkJS29tc29tb2xzaworCQkJICAgIF4KKwkJCSAgICB8CisJICAgSHVhbiBIbwk8LS0tIC0tLT4gIExvcyBBbmdlbGVzCisJKFllbGxvdyByaXZlcikJICAgIHwKKwkJCSAgICB2CisJCQkgIEphdmEgKHRoZSBpc2xhbmQsIG5vdCB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAyLjQqCURlbGV0aW5nIGNoYXJhY3RlcnMKKworVG8gZGVsZXRlIGEgY2hhcmFjdGVyLCBtb3ZlIHRoZSBjdXJzb3Igb3ZlciBpdCBhbmQgdHlwZSAieCIuICAoVGhpcyBpcyBhCit0aHJvd2JhY2sgdG8gdGhlIG9sZCBkYXlzIG9mIHRoZSB0eXBld3JpdGVyLCB3aGVuIHlvdSBkZWxldGVkIHRoaW5ncyBieSB0eXBpbmcKK3h4eHggb3ZlciB0aGVtLikgIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBsaW5lLCBmb3IKK2V4YW1wbGUsIGFuZCB0eXBlIHh4eHh4eHggKHNldmVuIHgncykgdG8gZGVsZXRlICJBIHZlcnkgIi4gIFRoZSByZXN1bHQgc2hvdWxkCitsb29rIGxpa2UgdGhpczoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfGludGVsbGlnZW50IHR1cnRsZQkJCXwKKwl8Rm91bmQgcHJvZ3JhbW1pbmcgVU5JWCBhIGh1cmRsZQl8CisJfH4JCQkJCXwKKwl8fgkJCQkJfAorCXwJCQkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitOb3cgeW91IGNhbiBpbnNlcnQgbmV3IHRleHQsIGZvciBleGFtcGxlIGJ5IHR5cGluZzogPgorCisJaUEgeW91bmcgPEVzYz4KKworVGhpcyBiZWdpbnMgYW4gaW5zZXJ0ICh0aGUgaSksIGluc2VydHMgdGhlIHdvcmRzICJBIHlvdW5nIiwgYW5kIHRoZW4gZXhpdHMKK2luc2VydCBtb2RlICh0aGUgZmluYWwgPEVzYz4pLglUaGUgcmVzdWx0OgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8QSB5b3VuZyBpbnRlbGxpZ2VudCB0dXJ0bGUJCXwKKwl8Rm91bmQgcHJvZ3JhbW1pbmcgVU5JWCBhIGh1cmRsZQl8CisJfH4JCQkJCXwKKwl8fgkJCQkJfAorCXwJCQkJCXwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK0RFTEVUSU5HIEEgTElORQorCitUbyBkZWxldGUgYSB3aG9sZSBsaW5lIHVzZSB0aGUgImRkIiBjb21tYW5kLiAgVGhlIGZvbGxvd2luZyBsaW5lIHdpbGwKK3RoZW4gbW92ZSB1cCB0byBmaWxsIHRoZSBnYXA6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxGb3VuZCBwcm9ncmFtbWluZyBVTklYIGEgaHVyZGxlCXwKKwl8fgkJCQkJfAorCXx+CQkJCQl8CisJfH4JCQkJCXwKKwl8CQkJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitERUxFVElORyBBIExJTkUgQlJFQUsKKworSW4gVmltIHlvdSBjYW4gam9pbiB0d28gbGluZXMgdG9nZXRoZXIsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxpbmUgYnJlYWsKK2JldHdlZW4gdGhlbSBpcyBkZWxldGVkLiAgVGhlICJKIiBjb21tYW5kIGRvZXMgdGhpcy4KKyAgIFRha2UgdGhlc2UgdHdvIGxpbmVzOgorCisJQSB5b3VuZyBpbnRlbGxpZ2VudCB+CisJdHVydGxlIH4KKworTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBsaW5lIGFuZCBwcmVzcyAiSiI6CisKKwlBIHlvdW5nIGludGVsbGlnZW50IHR1cnRsZSB+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAyLjUqCVVuZG8gYW5kIFJlZG8KKworU3VwcG9zZSB5b3UgZGVsZXRlIHRvbyBtdWNoLiAgV2VsbCwgeW91IGNhbiB0eXBlIGl0IGluIGFnYWluLCBidXQgYW4gZWFzaWVyCit3YXkgZXhpc3RzLiAgVGhlICJ1IiBjb21tYW5kIHVuZG9lcyB0aGUgbGFzdCBlZGl0LiAgVGFrZSBhIGxvb2sgYXQgdGhpcyBpbgorYWN0aW9uOiBBZnRlciB1c2luZyAiZGQiIHRvIGRlbGV0ZSB0aGUgZmlyc3QgbGluZSwgInUiIGJyaW5ncyBpdCBiYWNrLgorICAgQW5vdGhlciBvbmU6IE1vdmUgdGhlIGN1cnNvciB0byB0aGUgQSBpbiB0aGUgZmlyc3QgbGluZToKKworCUEgeW91bmcgaW50ZWxsaWdlbnQgdHVydGxlIH4KKworTm93IHR5cGUgeHh4eHh4eCB0byBkZWxldGUgIkEgeW91bmciLiAgVGhlIHJlc3VsdCBpcyBhcyBmb2xsb3dzOgorCisJIGludGVsbGlnZW50IHR1cnRsZSB+CisKK1R5cGUgInUiIHRvIHVuZG8gdGhlIGxhc3QgZGVsZXRlLiAgVGhhdCBkZWxldGUgcmVtb3ZlZCB0aGUgZywgc28gdGhlIHVuZG8KK3Jlc3RvcmVzIHRoZSBjaGFyYWN0ZXIuCisKKwlnIGludGVsbGlnZW50IHR1cnRsZSB+CisKK1RoZSBuZXh0IHUgY29tbWFuZCByZXN0b3JlcyB0aGUgbmV4dC10by1sYXN0IGNoYXJhY3RlciBkZWxldGVkOgorCisJbmcgaW50ZWxsaWdlbnQgdHVydGxlIH4KKworVGhlIG5leHQgdSBjb21tYW5kIGdpdmVzIHlvdSB0aGUgdSwgYW5kIHNvIG9uOgorCisJdW5nIGludGVsbGlnZW50IHR1cnRsZSB+CisJb3VuZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCXlvdW5nIGludGVsbGlnZW50IHR1cnRsZSB+CisJIHlvdW5nIGludGVsbGlnZW50IHR1cnRsZSB+CisJQSB5b3VuZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCisJTm90ZToKKwlJZiB5b3UgdHlwZSAidSIgdHdpY2UsIGFuZCB0aGUgcmVzdWx0IGlzIHRoYXQgeW91IGdldCB0aGUgc2FtZSB0ZXh0CisJYmFjaywgeW91IGhhdmUgVmltIGNvbmZpZ3VyZWQgdG8gd29yayBWaSBjb21wYXRpYmxlLiAgTG9vayBoZXJlIHRvIGZpeAorCXRoaXM6IHxub3QtY29tcGF0aWJsZXwuCisJICAgVGhpcyB0ZXh0IGFzc3VtZXMgeW91IHdvcmsgIlRoZSBWaW0gV2F5Ii4gIFlvdSBtaWdodCBwcmVmZXIgdG8gdXNlCisJdGhlIGdvb2Qgb2xkIFZpIHdheSwgYnV0IHlvdSB3aWxsIGhhdmUgdG8gd2F0Y2ggb3V0IGZvciBzbWFsbAorCWRpZmZlcmVuY2VzIGluIHRoZSB0ZXh0IHRoZW4uCisKKworUkVETworCitJZiB5b3UgdW5kbyB0b28gbWFueSB0aW1lcywgeW91IGNhbiBwcmVzcyBDVFJMLVIgKHJlZG8pIHRvIHJldmVyc2UgdGhlCitwcmVjZWRpbmcgY29tbWFuZC4gIEluIG90aGVyIHdvcmRzLCBpdCB1bmRvZXMgdGhlIHVuZG8uICBUbyBzZWUgdGhpcyBpbgorYWN0aW9uLCBwcmVzcyBDVFJMLVIgdHdpY2UuICBUaGUgY2hhcmFjdGVyIEEgYW5kIHRoZSBzcGFjZSBhZnRlciBpdCBkaXNhcHBlYXI6CisKKwl5b3VuZyBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCitUaGVyZSdzIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIHRoZSB1bmRvIGNvbW1hbmQsIHRoZSAiVSIgKHVuZG8gbGluZSkgY29tbWFuZC4KK1RoZSB1bmRvIGxpbmUgY29tbWFuZCB1bmRvZXMgYWxsIHRoZSBjaGFuZ2VzIG1hZGUgb24gdGhlIGxhc3QgbGluZSB0aGF0IHdhcworZWRpdGVkLiAgVHlwaW5nIHRoaXMgY29tbWFuZCB0d2ljZSBjYW5jZWxzIHRoZSBwcmVjZWRpbmcgIlUiLgorCisJQSB2ZXJ5IGludGVsbGlnZW50IHR1cnRsZSB+CisJICB4eHh4CQkJCURlbGV0ZSB2ZXJ5CisKKwlBIGludGVsbGlnZW50IHR1cnRsZSB+CisJCSAgICAgIHh4eHh4eAkJRGVsZXRlIHR1cnRsZQorCisJQSBpbnRlbGxpZ2VudCB+CisJCQkJCVJlc3RvcmUgbGluZSB3aXRoICJVIgorCUEgdmVyeSBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCQkJCQlVbmRvICJVIiB3aXRoICJ1IgorCUEgaW50ZWxsaWdlbnQgfgorCitUaGUgIlUiIGNvbW1hbmQgaXMgYSBjaGFuZ2UgYnkgaXRzZWxmLCB3aGljaCB0aGUgInUiIGNvbW1hbmQgdW5kb2VzIGFuZCBDVFJMLVIKK3JlZG9lcy4gIFRoaXMgbWlnaHQgYmUgYSBiaXQgY29uZnVzaW5nLiAgRG9uJ3Qgd29ycnksIHdpdGggInUiIGFuZCBDVFJMLVIgeW91CitjYW4gZ28gdG8gYW55IG9mIHRoZSBzaXR1YXRpb25zIHlvdSBoYWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAyLjYqCU90aGVyIGVkaXRpbmcgY29tbWFuZHMKKworVmltIGhhcyBhIGxhcmdlIG51bWJlciBvZiBjb21tYW5kcyB0byBjaGFuZ2UgdGhlIHRleHQuICBTZWUgfFFfaW58IGFuZCBiZWxvdy4KK0hlcmUgYXJlIGEgZmV3IG9mdGVuIHVzZWQgb25lcy4KKworCitBUFBFTkRJTkcKKworVGhlICJpIiBjb21tYW5kIGluc2VydHMgYSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KK1RoYXQgd29ya3MgZmluZTsgYnV0IHdoYXQgaGFwcGVucyBpZiB5b3Ugd2FudCB0byBhZGQgc3R1ZmYgdG8gdGhlIGVuZCBvZiB0aGUKK2xpbmU/ICBGb3IgdGhhdCB5b3UgbmVlZCB0byBpbnNlcnQgdGV4dCBhZnRlciB0aGUgY3Vyc29yLiAgVGhpcyBpcyBkb25lIHdpdGgKK3RoZSAiYSIgKGFwcGVuZCkgY29tbWFuZC4KKyAgIEZvciBleGFtcGxlLCB0byBjaGFuZ2UgdGhlIGxpbmUKKworCWFuZCB0aGF0J3Mgbm90IHNheWluZyBtdWNoIGZvciB0aGUgdHVydGxlLiB+Cit0bworCWFuZCB0aGF0J3Mgbm90IHNheWluZyBtdWNoIGZvciB0aGUgdHVydGxlISEhIH4KKworbW92ZSB0aGUgY3Vyc29yIG92ZXIgdG8gdGhlIGRvdCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiBUaGVuIHR5cGUgIngiIHRvCitkZWxldGUgdGhlIHBlcmlvZC4gIFRoZSBjdXJzb3IgaXMgbm93IHBvc2l0aW9uZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBvbiB0aGUKK2UgaW4gdHVydGxlLiAgTm93IHR5cGUgPgorCisJYSEhITxFc2M+CisKK3RvIGFwcGVuZCB0aHJlZSBleGNsYW1hdGlvbiBwb2ludHMgYWZ0ZXIgdGhlIGUgaW4gdHVydGxlOgorCisJYW5kIHRoYXQncyBub3Qgc2F5aW5nIG11Y2ggZm9yIHRoZSB0dXJ0bGUhISEgfgorCisKK09QRU5JTkcgVVAgQSBORVcgTElORQorCitUaGUgIm8iIGNvbW1hbmQgY3JlYXRlcyBhIG5ldywgZW1wdHkgbGluZSBiZWxvdyB0aGUgY3Vyc29yIGFuZCBwdXRzIFZpbSBpbgorSW5zZXJ0IG1vZGUuICBUaGVuIHlvdSBjYW4gdHlwZSB0aGUgdGV4dCBmb3IgdGhlIG5ldyBsaW5lLgorICAgU3VwcG9zZSB0aGUgY3Vyc29yIGlzIHNvbWV3aGVyZSBpbiB0aGUgZmlyc3Qgb2YgdGhlc2UgdHdvIGxpbmVzOgorCisJQSB2ZXJ5IGludGVsbGlnZW50IHR1cnRsZSB+CisJRm91bmQgcHJvZ3JhbW1pbmcgVU5JWCBhIGh1cmRsZSB+CisKK0lmIHlvdSBub3cgdXNlIHRoZSAibyIgY29tbWFuZCBhbmQgdHlwZSBuZXcgdGV4dDogPgorCisJb1RoYXQgbGlrZWQgdXNpbmcgVmltPEVzYz4KKworVGhlIHJlc3VsdCBpczoKKworCUEgdmVyeSBpbnRlbGxpZ2VudCB0dXJ0bGUgfgorCVRoYXQgbGlrZWQgdXNpbmcgVmltIH4KKwlGb3VuZCBwcm9ncmFtbWluZyBVTklYIGEgaHVyZGxlIH4KKworVGhlICJPIiBjb21tYW5kICh1cHBlcmNhc2UpIG9wZW5zIGEgbGluZSBhYm92ZSB0aGUgY3Vyc29yLgorCisKK1VTSU5HIEEgQ09VTlQKKworU3VwcG9zZSB5b3Ugd2FudCB0byBtb3ZlIHVwIG5pbmUgbGluZXMuICBZb3UgY2FuIHR5cGUgImtra2tra2trayIgb3IgeW91IGNhbgorZW50ZXIgdGhlIGNvbW1hbmQgIjlrIi4gIEluIGZhY3QsIHlvdSBjYW4gcHJlY2VkZSBtYW55IGNvbW1hbmRzIHdpdGggYSBudW1iZXIuCitFYXJsaWVyIGluIHRoaXMgY2hhcHRlciwgZm9yIGluc3RhbmNlLCB5b3UgYWRkZWQgdGhyZWUgZXhjbGFtYXRpb24gcG9pbnRzIHRvCit0aGUgZW5kIG9mIGEgbGluZSBieSB0eXBpbmcgImEhISE8RXNjPiIuICBBbm90aGVyIHdheSB0byBkbyB0aGlzIGlzIHRvIHVzZSB0aGUKK2NvbW1hbmQgIjNhITxFc2M+Ii4gIFRoZSBjb3VudCBvZiAzIHRlbGxzIHRoZSBjb21tYW5kIHRoYXQgZm9sbG93cyB0byB0cmlwbGUKK2l0cyBlZmZlY3QuICBTaW1pbGFybHksIHRvIGRlbGV0ZSB0aHJlZSBjaGFyYWN0ZXJzLCB1c2UgdGhlIGNvbW1hbmQgIjN4Ii4gIFRoZQorY291bnQgYWx3YXlzIGNvbWVzIGJlZm9yZSB0aGUgY29tbWFuZCBpdCBhcHBsaWVzIHRvLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMi43KglHZXR0aW5nIG91dAorCitUbyBleGl0LCB1c2UgdGhlICJaWiIgY29tbWFuZC4gIFRoaXMgY29tbWFuZCB3cml0ZXMgdGhlIGZpbGUgYW5kIGV4aXRzLgorCisJTm90ZToKKwlVbmxpa2UgbWFueSBvdGhlciBlZGl0b3JzLCBWaW0gZG9lcyBub3QgYXV0b21hdGljYWxseSBtYWtlIGEgYmFja3VwCisJZmlsZS4gIElmIHlvdSB0eXBlICJaWiIsIHlvdXIgY2hhbmdlcyBhcmUgY29tbWl0dGVkIGFuZCB0aGVyZSdzIG5vCisJdHVybmluZyBiYWNrLiAgWW91IGNhbiBjb25maWd1cmUgdGhlIFZpbSBlZGl0b3IgdG8gcHJvZHVjZSBiYWNrdXAKKwlmaWxlcywgc2VlIHwwNy40fC4KKworCitESVNDQVJESU5HIENIQU5HRVMKKworU29tZXRpbWVzIHlvdSB3aWxsIG1ha2UgYSBzZXF1ZW5jZSBvZiBjaGFuZ2VzIGFuZCBzdWRkZW5seSByZWFsaXplIHlvdSB3ZXJlCitiZXR0ZXIgb2ZmIGJlZm9yZSB5b3Ugc3RhcnRlZC4gIE5vdCB0byB3b3JyeTsgVmltIGhhcyBhCitxdWl0LWFuZC10aHJvdy10aGluZ3MtYXdheSBjb21tYW5kLiAgSXQgaXM6ID4KKworCTpxIQorCitEb24ndCBmb3JnZXQgdG8gcHJlc3MgPEVudGVyPiB0byBmaW5pc2ggdGhlIGNvbW1hbmQuCisKK0ZvciB0aG9zZSBvZiB5b3UgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlscywgdGhlIHRocmVlIHBhcnRzIG9mIHRoaXMgY29tbWFuZAorYXJlIHRoZSBjb2xvbiAoOiksIHdoaWNoIGVudGVycyBDb21tYW5kLWxpbmUgbW9kZTsgdGhlIHEgY29tbWFuZCwgd2hpY2ggdGVsbHMKK3RoZSBlZGl0b3IgdG8gcXVpdDsgYW5kIHRoZSBvdmVycmlkZSBjb21tYW5kIG1vZGlmaWVyICghKS4KKyAgIFRoZSBvdmVycmlkZSBjb21tYW5kIG1vZGlmaWVyIGlzIG5lZWRlZCBiZWNhdXNlIFZpbSBpcyByZWx1Y3RhbnQgdG8gdGhyb3cKK2F3YXkgY2hhbmdlcy4gIElmIHlvdSB3ZXJlIHRvIGp1c3QgdHlwZSAiOnEiLCBWaW0gd291bGQgZGlzcGxheSBhbiBlcnJvcgorbWVzc2FnZSBhbmQgcmVmdXNlIHRvIGV4aXQ6CisKKwlFMzc6IE5vIHdyaXRlIHNpbmNlIGxhc3QgY2hhbmdlICh1c2UgISB0byBvdmVycmlkZSkgfgorCitCeSBzcGVjaWZ5aW5nIHRoZSBvdmVycmlkZSwgeW91IGFyZSBpbiBlZmZlY3QgdGVsbGluZyBWaW0sICJJIGtub3cgdGhhdCB3aGF0CitJJ20gZG9pbmcgbG9va3Mgc3R1cGlkLCBidXQgSSdtIGEgYmlnIGJveSBhbmQgcmVhbGx5IHdhbnQgdG8gZG8gdGhpcy4iCisKK0lmIHlvdSB3YW50IHRvIGNvbnRpbnVlIGVkaXRpbmcgd2l0aCBWaW06IFRoZSAiOmUhIiBjb21tYW5kIHJlbG9hZHMgdGhlCitvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMi44KglGaW5kaW5nIGhlbHAKKworRXZlcnl0aGluZyB5b3UgYWx3YXlzIHdhbnRlZCB0byBrbm93IGNhbiBiZSBmb3VuZCBpbiB0aGUgVmltIGhlbHAgZmlsZXMuCitEb24ndCBiZSBhZnJhaWQgdG8gYXNrIQorICAgVG8gZ2V0IGdlbmVyaWMgaGVscCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6aGVscAorCitZb3UgY291bGQgYWxzbyB1c2UgdGhlIGZpcnN0IGZ1bmN0aW9uIGtleSA8RjE+LiAgSWYgeW91ciBrZXlib2FyZCBoYXMgYSA8SGVscD4KK2tleSBpdCBtaWdodCB3b3JrIGFzIHdlbGwuCisgICBJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgc3ViamVjdCwgIjpoZWxwIiBkaXNwbGF5cyB0aGUgZ2VuZXJhbCBoZWxwIHdpbmRvdy4KK1RoZSBjcmVhdG9ycyBvZiBWaW0gZGlkIHNvbWV0aGluZyB2ZXJ5IGNsZXZlciAob3IgdmVyeSBsYXp5KSB3aXRoIHRoZSBoZWxwCitzeXN0ZW06IFRoZXkgbWFkZSB0aGUgaGVscCB3aW5kb3cgYSBub3JtYWwgZWRpdGluZyB3aW5kb3cuICBZb3UgY2FuIHVzZSBhbGwKK3RoZSBub3JtYWwgVmltIGNvbW1hbmRzIHRvIG1vdmUgdGhyb3VnaCB0aGUgaGVscCBpbmZvcm1hdGlvbi4gIFRoZXJlZm9yZSBoLCBqLAoraywgYW5kIGwgbW92ZSBsZWZ0LCBkb3duLCB1cCBhbmQgcmlnaHQuCisgICBUbyBnZXQgb3V0IG9mIHRoZSBoZWxwIHdpbmRvdywgdXNlIHRoZSBzYW1lIGNvbW1hbmQgeW91IHVzZSB0byBnZXQgb3V0IG9mCit0aGUgZWRpdG9yOiAiWloiLiAgVGhpcyB3aWxsIG9ubHkgY2xvc2UgdGhlIGhlbHAgd2luZG93LCBub3QgZXhpdCBWaW0uCisKK0FzIHlvdSByZWFkIHRoZSBoZWxwIHRleHQsIHlvdSB3aWxsIG5vdGljZSBzb21lIHRleHQgZW5jbG9zZWQgaW4gdmVydGljYWwgYmFycworKGZvciBleGFtcGxlLCB8aGVscHwpLiAgVGhpcyBpbmRpY2F0ZXMgYSBoeXBlcmxpbmsuICBJZiB5b3UgcG9zaXRpb24gdGhlCitjdXJzb3IgYW55d2hlcmUgYmV0d2VlbiB0aGUgYmFycyBhbmQgcHJlc3MgQ1RSTC1dIChqdW1wIHRvIHRhZyksIHRoZSBoZWxwCitzeXN0ZW0gdGFrZXMgeW91IHRvIHRoZSBpbmRpY2F0ZWQgc3ViamVjdC4gKEZvciByZWFzb25zIG5vdCBkaXNjdXNzZWQgaGVyZSwKK3RoZSBWaW0gdGVybWlub2xvZ3kgZm9yIGEgaHlwZXJsaW5rIGlzIHRhZy4gIFNvIENUUkwtXSBqdW1wcyB0byB0aGUgbG9jYXRpb24KK29mIHRoZSB0YWcgZ2l2ZW4gYnkgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4pCisgICBBZnRlciBhIGZldyBqdW1wcywgeW91IG1pZ2h0IHdhbnQgdG8gZ28gYmFjay4gIENUUkwtVCAocG9wIHRhZykgdGFrZXMgeW91CitiYWNrIHRvIHRoZSBwcmVjZWRpbmcgcG9zaXRpb24uICBDVFJMLU8gKGp1bXAgdG8gb2xkZXIgcG9zaXRpb24pIGFsc28gd29ya3MKK25pY2VseSBoZXJlLgorICAgQXQgdGhlIHRvcCBvZiB0aGUgaGVscCBzY3JlZW4sIHRoZXJlIGlzIHRoZSBub3RhdGlvbiAqaGVscC50eHQqLiAgVGhpcyBuYW1lCitiZXR3ZWVuICIqIiBjaGFyYWN0ZXJzIGlzIHVzZWQgYnkgdGhlIGhlbHAgc3lzdGVtIHRvIGRlZmluZSBhIHRhZyAoaHlwZXJsaW5rCitkZXN0aW5hdGlvbikuCisgICBTZWUgfDI5LjF8IGZvciBkZXRhaWxzIGFib3V0IHVzaW5nIHRhZ3MuCisKK1RvIGdldCBoZWxwIG9uIGEgZ2l2ZW4gc3ViamVjdCwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmhlbHAge3N1YmplY3R9CisKK1RvIGdldCBoZWxwIG9uIHRoZSAieCIgY29tbWFuZCwgZm9yIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmc6ID4KKworCTpoZWxwIHgKKworVG8gZmluZCBvdXQgaG93IHRvIGRlbGV0ZSB0ZXh0LCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6aGVscCBkZWxldGluZworCitUbyBnZXQgYSBjb21wbGV0ZSBpbmRleCBvZiBhbGwgVmltIGNvbW1hbmRzLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6aGVscCBpbmRleAorCitXaGVuIHlvdSBuZWVkIHRvIGdldCBoZWxwIGZvciBhIGNvbnRyb2wgY2hhcmFjdGVyIGNvbW1hbmQgKGZvciBleGFtcGxlLAorQ1RSTC1BKSwgeW91IG5lZWQgdG8gc3BlbGwgaXQgd2l0aCB0aGUgcHJlZml4ICJDVFJMLSIuID4KKworCTpoZWxwIENUUkwtQQorCitUaGUgVmltIGVkaXRvciBoYXMgbWFueSBkaWZmZXJlbnQgbW9kZXMuICBCeSBkZWZhdWx0LCB0aGUgaGVscCBzeXN0ZW0gZGlzcGxheXMKK3RoZSBub3JtYWwtbW9kZSBjb21tYW5kcy4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZGlzcGxheXMgaGVscAorZm9yIHRoZSBub3JtYWwtbW9kZSBDVFJMLUggY29tbWFuZDogPgorCisJOmhlbHAgQ1RSTC1ICisKK1RvIGlkZW50aWZ5IG90aGVyIG1vZGVzLCB1c2UgYSBtb2RlIHByZWZpeC4gIElmIHlvdSB3YW50IHRoZSBoZWxwIGZvciB0aGUKK2luc2VydC1tb2RlIHZlcnNpb24gb2YgYSBjb21tYW5kLCB1c2UgImlfIi4gIEZvciBDVFJMLUggdGhpcyBnaXZlcyB5b3UgdGhlCitmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmhlbHAgaV9DVFJMLUgKKworV2hlbiB5b3Ugc3RhcnQgdGhlIFZpbSBlZGl0b3IsIHlvdSBjYW4gdXNlIHNldmVyYWwgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KK1RoZXNlIGFsbCBiZWdpbiB3aXRoIGEgZGFzaCAoLSkuICBUbyBmaW5kIHdoYXQgdGhlIC10IGFyZ3VtZW50IGRvZXMsIGZvcgorZXhhbXBsZSwgdXNlIHRoZSBjb21tYW5kOiA+CisKKwk6aGVscCAtdAorCitUaGUgVmltIGVkaXRvciBoYXMgYSBudW1iZXIgb2Ygb3B0aW9ucyB0aGF0IGVuYWJsZSB5b3UgdG8gY29uZmlndXJlIGFuZAorY3VzdG9taXplIHRoZSBlZGl0b3IuICBJZiB5b3Ugd2FudCBoZWxwIGZvciBhbiBvcHRpb24sIHlvdSBuZWVkIHRvIGVuY2xvc2UgaXQKK2luIHNpbmdsZSBxdW90YXRpb24gbWFya3MuICBUbyBmaW5kIG91dCB3aGF0IHRoZSAnbnVtYmVyJyBvcHRpb24gZG9lcywgZm9yCitleGFtcGxlLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6aGVscCAnbnVtYmVyJworCitUaGUgdGFibGUgd2l0aCBhbGwgbW9kZSBwcmVmaXhlcyBjYW4gYmUgZm91bmQgaGVyZTogfGhlbHAtY29udGV4dHwuCisKK1NwZWNpYWwga2V5cyBhcmUgZW5jbG9zZWQgaW4gYW5nbGUgYnJhY2tldHMuIFRvIGZpbmQgaGVscCBvbiB0aGUgdXAtYXJyb3cga2V5CitpbiBJbnNlcnQgbW9kZSwgZm9yIGluc3RhbmNlLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6aGVscCBpXzxVcD4KKworSWYgeW91IHNlZSBhbiBlcnJvciBtZXNzYWdlIHRoYXQgeW91IGRvbid0IHVuZGVyc3RhbmQsIGZvciBleGFtcGxlOgorCisJRTM3OiBObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5nZSAodXNlICEgdG8gb3ZlcnJpZGUpIH4KKworWW91IGNhbiB1c2UgdGhlIGVycm9yIElEIGF0IHRoZSBzdGFydCB0byBmaW5kIGhlbHAgYWJvdXQgaXQ6ID4KKworCTpoZWxwIEUzNworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzAzLnR4dHwgIE1vdmluZyBhcm91bmQKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMDMudHh0IGIvcnVudGltZS9kb2MvdXNyXzAzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmVmMmFmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzAzLnR4dApAQCAtMCwwICsxLDY1NCBAQAorKnVzcl8wMy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IEphbiAxNworCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICBNb3ZpbmcgYXJvdW5kCisKKworQmVmb3JlIHlvdSBjYW4gaW5zZXJ0IG9yIGRlbGV0ZSB0ZXh0IHRoZSBjdXJzb3IgaGFzIHRvIGJlIG1vdmVkIHRvIHRoZSByaWdodAorcGxhY2UuICBWaW0gaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbW1hbmRzIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IuICBUaGlzCitjaGFwdGVyIHNob3dzIHlvdSBob3cgdG8gdXNlIHRoZSBtb3N0IGltcG9ydGFudCBvbmVzLiAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZgordGhlc2UgY29tbWFuZHMgYmVsb3cgfFFfbHJ8LgorCit8MDMuMXwJV29yZCBtb3ZlbWVudAorfDAzLjJ8CU1vdmluZyB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgbGluZQorfDAzLjN8CU1vdmluZyB0byBhIGNoYXJhY3RlcgorfDAzLjR8CU1hdGNoaW5nIGEgcGFyZW4KK3wwMy41fAlNb3ZpbmcgdG8gYSBzcGVjaWZpYyBsaW5lCit8MDMuNnwJVGVsbGluZyB3aGVyZSB5b3UgYXJlCit8MDMuN3wJU2Nyb2xsaW5nIGFyb3VuZAorfDAzLjh8CVNpbXBsZSBzZWFyY2hlcworfDAzLjl8CVNpbXBsZSBzZWFyY2ggcGF0dGVybnMKK3wwMy4xMHwJVXNpbmcgbWFya3MKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMDQudHh0fCAgTWFraW5nIHNtYWxsIGNoYW5nZXMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzAyLnR4dHwgIFRoZSBmaXJzdCBzdGVwcyBpbiBWaW0KK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjEqCVdvcmQgbW92ZW1lbnQKKworVG8gbW92ZSB0aGUgY3Vyc29yIGZvcndhcmQgb25lIHdvcmQsIHVzZSB0aGUgInciIGNvbW1hbmQuICBMaWtlIG1vc3QgVmltCitjb21tYW5kcywgeW91IGNhbiB1c2UgYSBudW1lcmljIHByZWZpeCB0byBtb3ZlIHBhc3QgbXVsdGlwbGUgd29yZHMuICBGb3IKK2V4YW1wbGUsICIzdyIgbW92ZXMgdGhyZWUgd29yZHMuICBUaGlzIGZpZ3VyZSBzaG93cyBob3cgaXQgd29ya3M6CisKKwlUaGlzIGlzIGEgbGluZSB3aXRoIGV4YW1wbGUgdGV4dCB+CisJICAtLS0+LS0+LT4tLS0tLS0tLS0tLS0tLS0tLT4KKwkgICB3ICB3ICB3ICAgIDN3CisKK05vdGljZSB0aGF0ICJ3IiBtb3ZlcyB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgd29yZCBpZiBpdCBhbHJlYWR5IGlzIGF0IHRoZQorc3RhcnQgb2YgYSB3b3JkLgorICAgVGhlICJiIiBjb21tYW5kIG1vdmVzIGJhY2t3YXJkIHRvIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgd29yZDoKKworCVRoaXMgaXMgYSBsaW5lIHdpdGggZXhhbXBsZSB0ZXh0IH4KKwk8LS0tLTwtLTwtPC0tLS0tLS0tLTwtLS0KKwkgICBiICAgYiBiICAgIDJiICAgICAgYgorCitUaGVyZSBpcyBhbHNvIHRoZSAiZSIgY29tbWFuZCB0aGF0IG1vdmVzIHRvIHRoZSBuZXh0IGVuZCBvZiBhIHdvcmQgYW5kICJnZSIsCit3aGljaCBtb3ZlcyB0byB0aGUgcHJldmlvdXMgZW5kIG9mIGEgd29yZDoKKworCVRoaXMgaXMgYSBsaW5lIHdpdGggZXhhbXBsZSB0ZXh0IH4KKwkgICA8LSAgIDwtLS0gLS0tLS0+ICAgLS0tLT4KKwkgICBnZSAgICBnZSAgICAgZSAgICAgICBlCisKK0lmIHlvdSBhcmUgYXQgdGhlIGxhc3Qgd29yZCBvZiBhIGxpbmUsIHRoZSAidyIgY29tbWFuZCB3aWxsIHRha2UgeW91IHRvIHRoZQorZmlyc3Qgd29yZCBpbiB0aGUgbmV4dCBsaW5lLiAgVGh1cyB5b3UgY2FuIHVzZSB0aGlzIHRvIG1vdmUgdGhyb3VnaCBhCitwYXJhZ3JhcGgsIG11Y2ggZmFzdGVyIHRoYW4gdXNpbmcgImwiLiAgImIiIGRvZXMgdGhlIHNhbWUgaW4gdGhlIG90aGVyCitkaXJlY3Rpb24uCisKK0Egd29yZCBlbmRzIGF0IGEgbm9uLXdvcmQgY2hhcmFjdGVyLCBzdWNoIGFzIGEgIi4iLCAiLSIgb3IgIikiLiAgVG8gY2hhbmdlCit3aGF0IFZpbSBjb25zaWRlcnMgdG8gYmUgYSB3b3JkLCBzZWUgdGhlICdpc2tleXdvcmQnIG9wdGlvbi4KKyAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gbW92ZSBieSB3aGl0ZS1zcGFjZSBzZXBhcmF0ZWQgV09SRHMuICBUaGlzIGlzIG5vdCBhCit3b3JkIGluIHRoZSBub3JtYWwgc2Vuc2UsIHRoYXQncyB3aHkgdGhlIHVwcGVyY2FzZSBpcyB1c2VkLiAgVGhlIGNvbW1hbmRzIGZvcgorbW92aW5nIGJ5IFdPUkRzIGFyZSBhbHNvIHVwcGVyY2FzZSwgYXMgdGhpcyBmaWd1cmUgc2hvd3M6CisKKwkgICAgICAgZ2UgICAgICBiCSAgdwkJCQllCisJICAgICAgIDwtICAgICA8LQkgLS0tPgkJCSAgICAgICAtLS0+CisJVGhpcyBpcy1hIGxpbmUsIHdpdGggc3BlY2lhbC9zZXBhcmF0ZWQvd29yZHMgKGFuZCBzb21lIG1vcmUpLiB+CisJICAgPC0tLS0tIDwtLS0tLQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0+CSAgICAgICAtLS0tLT4KKwkgICAgIGdFICAgICAgQgkJCSBXCQkJIEUKKworV2l0aCB0aGlzIG1peCBvZiBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSBjb21tYW5kcywgeW91IGNhbiBxdWlja2x5IG1vdmUKK2ZvcndhcmQgYW5kIGJhY2t3YXJkIHRocm91Z2ggYSBwYXJhZ3JhcGguCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjAzLjIqCU1vdmluZyB0byB0aGUgc3RhcnQgb3IgZW5kIG9mIGEgbGluZQorCitUaGUgIiQiIGNvbW1hbmQgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIGEgbGluZS4gIElmIHlvdXIga2V5Ym9hcmQgaGFzCithbiA8RW5kPiBrZXkgaXQgd2lsbCBkbyB0aGUgc2FtZSB0aGluZy4KKworVGhlICJeIiBjb21tYW5kIG1vdmVzIHRvIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyIG9mIHRoZSBsaW5lLiAgVGhlICIwIgorY29tbWFuZCAoemVybykgbW92ZXMgdG8gdGhlIHZlcnkgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lLiAgVGhlIDxIb21lPiBrZXkKK2RvZXMgdGhlIHNhbWUgdGhpbmcuICBJbiBhIHBpY3R1cmU6CisKKwkJICBeCisJICAgICA8LS0tLS0tLS0tLS0tCisJLi4uLi5UaGlzIGlzIGEgbGluZSB3aXRoIGV4YW1wbGUgdGV4dCB+CisJPC0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tPgorCQkwCQkgICAkCisKKyh0aGUgIi4uLi4uIiBpbmRpY2F0ZXMgYmxhbmtzIGhlcmUpCisKKyAgIFRoZSAiJCIgY29tbWFuZCB0YWtlcyBhIGNvdW50LCBsaWtlIG1vc3QgbW92ZW1lbnQgY29tbWFuZHMuICBCdXQgbW92aW5nIHRvCit0aGUgZW5kIG9mIHRoZSBsaW5lIHNldmVyYWwgdGltZXMgZG9lc24ndCBtYWtlIHNlbnNlLiAgVGhlcmVmb3JlIGl0IGNhdXNlcyB0aGUKK2VkaXRvciB0byBtb3ZlIHRvIHRoZSBlbmQgb2YgYW5vdGhlciBsaW5lLiAgRm9yIGV4YW1wbGUsICIxJCIgbW92ZXMgeW91IHRvCit0aGUgZW5kIG9mIHRoZSBmaXJzdCBsaW5lICh0aGUgb25lIHlvdSdyZSBvbiksICIyJCIgdG8gdGhlIGVuZCBvZiB0aGUgbmV4dAorbGluZSwgYW5kIHNvIG9uLgorICAgVGhlICIwIiBjb21tYW5kIGRvZXNuJ3QgdGFrZSBhIGNvdW50IGFyZ3VtZW50LCBiZWNhdXNlIHRoZSAiMCIgd291bGQgYmUKK3BhcnQgb2YgdGhlIGNvdW50LiAgVW5leHBlY3RlZGx5LCB1c2luZyBhIGNvdW50IHdpdGggIl4iIGRvZXNuJ3QgaGF2ZSBhbnkKK2VmZmVjdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuMyoJTW92aW5nIHRvIGEgY2hhcmFjdGVyCisKK09uZSBvZiB0aGUgbW9zdCB1c2VmdWwgbW92ZW1lbnQgY29tbWFuZHMgaXMgdGhlIHNpbmdsZS1jaGFyYWN0ZXIgc2VhcmNoCitjb21tYW5kLiAgVGhlIGNvbW1hbmQgImZ4IiBzZWFyY2hlcyBmb3J3YXJkIGluIHRoZSBsaW5lIGZvciB0aGUgc2luZ2xlCitjaGFyYWN0ZXIgeC4gIEhpbnQ6ICJmIiBzdGFuZHMgZm9yICJGaW5kIi4KKyAgIEZvciBleGFtcGxlLCB5b3UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZvbGxvd2luZyBsaW5lLiAgU3VwcG9zZSB5b3UKK3dhbnQgdG8gZ28gdG8gdGhlIGggb2YgaHVtYW4uICBKdXN0IGV4ZWN1dGUgdGhlIGNvbW1hbmQgImZoIiBhbmQgdGhlIGN1cnNvcgord2lsbCBiZSBwb3NpdGlvbmVkIG92ZXIgdGhlIGg6CisKKwlUbyBlcnIgaXMgaHVtYW4uICBUbyByZWFsbHkgZm91bCB1cCB5b3UgbmVlZCBhIGNvbXB1dGVyLiB+CisJLS0tLS0tLS0tLT4tLS0tLS0tLS0tLS0tLS0+CisJICAgIGZoCQkgZnkKKworVGhpcyBhbHNvIHNob3dzIHRoYXQgdGhlIGNvbW1hbmQgImZ5IiBtb3ZlcyB0byB0aGUgZW5kIG9mIHRoZSB3b3JkIHJlYWxseS4KKyAgIFlvdSBjYW4gc3BlY2lmeSBhIGNvdW50OyB0aGVyZWZvcmUsIHlvdSBjYW4gZ28gdG8gdGhlICJsIiBvZiAiZm91bCIgd2l0aAorIjNmbCI6CisKKwlUbyBlcnIgaXMgaHVtYW4uICBUbyByZWFsbHkgZm91bCB1cCB5b3UgbmVlZCBhIGNvbXB1dGVyLiB+CisJCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgorCQkJICAgM2ZsCisKK1RoZSAiRiIgY29tbWFuZCBzZWFyY2hlcyB0byB0aGUgbGVmdDoKKworCVRvIGVyciBpcyBodW1hbi4gIFRvIHJlYWxseSBmb3VsIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuIH4KKwkJICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkgICAgRmgKKworVGhlICJ0eCIgY29tbWFuZCB3b3JrcyBsaWtlIHRoZSAiZngiIGNvbW1hbmQsIGV4Y2VwdCBpdCBzdG9wcyBvbmUgY2hhcmFjdGVyCitiZWZvcmUgdGhlIHNlYXJjaGVkIGNoYXJhY3Rlci4gIEhpbnQ6ICJ0IiBzdGFuZHMgZm9yICJUbyIuICBUaGUgYmFja3dhcmQKK3ZlcnNpb24gb2YgdGhpcyBjb21tYW5kIGlzICJUeCIuCisKKwlUbyBlcnIgaXMgaHVtYW4uICBUbyByZWFsbHkgZm91bCB1cCB5b3UgbmVlZCBhIGNvbXB1dGVyLiB+CisJCSAgIDwtLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0+CisJCQlUaAkJdG4KKworVGhlc2UgZm91ciBjb21tYW5kcyBjYW4gYmUgcmVwZWF0ZWQgd2l0aCAiOyIuICAiLCIgcmVwZWF0cyBpbiB0aGUgb3RoZXIKK2RpcmVjdGlvbi4gIFRoZSBjdXJzb3IgaXMgbmV2ZXIgbW92ZWQgdG8gYW5vdGhlciBsaW5lLiAgTm90IGV2ZW4gd2hlbiB0aGUKK3NlbnRlbmNlIGNvbnRpbnVlcy4KKworU29tZXRpbWVzIHlvdSB3aWxsIHN0YXJ0IGEgc2VhcmNoLCBvbmx5IHRvIHJlYWxpemUgdGhhdCB5b3UgaGF2ZSB0eXBlZCB0aGUKK3dyb25nIGNvbW1hbmQuICBZb3UgdHlwZSAiZiIgdG8gc2VhcmNoIGJhY2t3YXJkLCBmb3IgZXhhbXBsZSwgb25seSB0byByZWFsaXplCit0aGF0IHlvdSByZWFsbHkgbWVhbnQgIkYiLiAgVG8gYWJvcnQgYSBzZWFyY2gsIHByZXNzIDxFc2M+LiAgU28gImY8RXNjPiIgaXMgYW4KK2Fib3J0ZWQgZm9yd2FyZCBzZWFyY2ggYW5kIGRvZXNuJ3QgZG8gYW55dGhpbmcuICBOb3RlOiA8RXNjPiBjYW5jZWxzIG1vc3QKK29wZXJhdGlvbnMsIG5vdCBqdXN0IHNlYXJjaGVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMy40KglNYXRjaGluZyBhIHBhcmVuCisKK1doZW4gd3JpdGluZyBhIHByb2dyYW0geW91IG9mdGVuIGVuZCB1cCB3aXRoIG5lc3RlZCAoKSBjb25zdHJ1Y3RzLiAgVGhlbiB0aGUKKyIlIiBjb21tYW5kIGlzIHZlcnkgaGFuZHk6IEl0IG1vdmVzIHRvIHRoZSBtYXRjaGluZyBwYXJlbi4gIElmIHRoZSBjdXJzb3IgaXMKK29uIGEgIigiIGl0IHdpbGwgbW92ZSB0byB0aGUgbWF0Y2hpbmcgIikiLiAgSWYgaXQncyBvbiBhICIpIiBpdCB3aWxsIG1vdmUgdG8KK3RoZSBtYXRjaGluZyAiKCIuCisKKwkJCSAgICAlCisJCQkgPC0tLS0tPgorCQlpZiAoYSA9PSAoYiAqIGMpIC8gZCkgfgorCQkgICA8LS0tLS0tLS0tLS0tLS0tLT4KKwkJCSAgICAlCisKK1RoaXMgYWxzbyB3b3JrcyBmb3IgW10gYW5kIHt9IHBhaXJzLiAgKFRoaXMgY2FuIGJlIGRlZmluZWQgd2l0aCB0aGUKKydtYXRjaHBhaXJzJyBvcHRpb24uKQorCitXaGVuIHRoZSBjdXJzb3IgaXMgbm90IG9uIGEgdXNlZnVsIGNoYXJhY3RlciwgIiUiIHdpbGwgc2VhcmNoIGZvcndhcmQgdG8gZmluZAorb25lLiAgVGh1cyBpZiB0aGUgY3Vyc29yIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBvZiB0aGUgcHJldmlvdXMgZXhhbXBsZSwKKyIlIiB3aWxsIHNlYXJjaCBmb3J3YXJkIGFuZCBmaW5kIHRoZSBmaXJzdCAiKCIuICBUaGVuIGl0IG1vdmVzIHRvIGl0cyBtYXRjaDoKKworCQlpZiAoYSA9PSAoYiAqIGMpIC8gZCkgfgorCQktLS0rLS0tLS0tLS0tLS0tLS0tLT4KKwkJCSAgICUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuNSoJTW92aW5nIHRvIGEgc3BlY2lmaWMgbGluZQorCitJZiB5b3UgYXJlIGEgQyBvciBDKysgcHJvZ3JhbW1lciwgeW91IGFyZSBmYW1pbGlhciB3aXRoIGVycm9yIG1lc3NhZ2VzIHN1Y2ggYXMKK3RoZSBmb2xsb3dpbmc6CisKKwlwcm9nLmM6MzM6IGogICB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikgfgorCitUaGlzIHRlbGxzIHlvdSB0aGF0IHlvdSBtaWdodCB3YW50IHRvIGZpeCBzb21ldGhpbmcgb24gbGluZSAzMy4gIFNvIGhvdyBkbyB5b3UKK2ZpbmQgbGluZSAzMz8gIE9uZSB3YXkgaXMgdG8gZG8gIjk5OTlrIiB0byBnbyB0byB0aGUgdG9wIG9mIHRoZSBmaWxlIGFuZCAiMzJqIgordG8gZ28gZG93biB0aGlydHkgdHdvIGxpbmVzLiAgSXQgaXMgbm90IGEgZ29vZCB3YXksIGJ1dCBpdCB3b3Jrcy4gIEEgbXVjaAorYmV0dGVyIHdheSBvZiBkb2luZyB0aGluZ3MgaXMgdG8gdXNlIHRoZSAiRyIgY29tbWFuZC4gIFdpdGggYSBjb3VudCwgdGhpcworY29tbWFuZCBwb3NpdGlvbnMgeW91IGF0IHRoZSBnaXZlbiBsaW5lIG51bWJlci4gIEZvciBleGFtcGxlLCAiMzNHIiBwdXRzIHlvdQorb24gbGluZSAzMy4gIChGb3IgYSBiZXR0ZXIgd2F5IG9mIGdvaW5nIHRocm91Z2ggYSBjb21waWxlcidzIGVycm9yIGxpc3QsIHNlZQorfHVzcl8zMC50eHR8LCBmb3IgaW5mb3JtYXRpb24gb24gdGhlIDptYWtlIGNvbW1hbmQuKQorICAgV2l0aCBubyBhcmd1bWVudCwgIkciIHBvc2l0aW9ucyB5b3UgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gIEEgcXVpY2sgd2F5IHRvCitnbyB0byB0aGUgc3RhcnQgb2YgYSBmaWxlIHVzZSAiZ2ciLiAgIjFHIiB3aWxsIGRvIHRoZSBzYW1lLCBidXQgaXMgYSB0aW55IGJpdAorbW9yZSB0eXBpbmcuCisKKwkgICAgfAlmaXJzdCBsaW5lIG9mIGEgZmlsZSAgIF4KKwkgICAgfAl0ZXh0IHRleHQgdGV4dCB0ZXh0ICAgIHwKKwkgICAgfAl0ZXh0IHRleHQgdGV4dCB0ZXh0ICAgIHwgIGdnCisJN0cgIHwJdGV4dCB0ZXh0IHRleHQgdGV4dCAgICB8CisJICAgIHwJdGV4dCB0ZXh0IHRleHQgdGV4dAorCSAgICB8CXRleHQgdGV4dCB0ZXh0IHRleHQKKwkgICAgVgl0ZXh0IHRleHQgdGV4dCB0ZXh0ICAgIHwKKwkJdGV4dCB0ZXh0IHRleHQgdGV4dCAgICB8ICBHCisJCXRleHQgdGV4dCB0ZXh0IHRleHQgICAgfAorCQlsYXN0IGxpbmUgb2YgYSBmaWxlICAgIFYKKworQW5vdGhlciB3YXkgdG8gbW92ZSB0byBhIGxpbmUgaXMgdXNpbmcgdGhlICIlIiBjb21tYW5kIHdpdGggYSBjb3VudC4gIEZvcgorZXhhbXBsZSAiNTAlIiBtb3ZlcyB5b3UgdG8gaGFsZndheSB0aGUgZmlsZS4gICI5MCUiIGdvZXMgdG8gbmVhciB0aGUgZW5kLgorCitUaGUgcHJldmlvdXMgYXNzdW1lcyB0aGF0IHlvdSB3YW50IHRvIG1vdmUgdG8gYSBsaW5lIGluIHRoZSBmaWxlLCBubyBtYXR0ZXIgaWYKK2l0J3MgY3VycmVudGx5IHZpc2libGUgb3Igbm90LiAgV2hhdCBpZiB5b3Ugd2FudCB0byBtb3ZlIHRvIG9uZSBvZiB0aGUgbGluZXMKK3lvdSBjYW4gc2VlPyAgVGhpcyBmaWd1cmUgc2hvd3MgdGhlIHRocmVlIGNvbW1hbmRzIHlvdSBjYW4gdXNlOgorCisJCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQlIIC0tPgl8IHRleHQgc2FtcGxlIHRleHQJICAgIHwKKwkJCXwgc2FtcGxlIHRleHQJCSAgICB8CisJCQl8IHRleHQgc2FtcGxlIHRleHQJICAgIHwKKwkJCXwgc2FtcGxlIHRleHQJCSAgICB8CisJCU0gLS0+CXwgdGV4dCBzYW1wbGUgdGV4dAkgICAgfAorCQkJfCBzYW1wbGUgdGV4dAkJICAgIHwKKwkJCXwgdGV4dCBzYW1wbGUgdGV4dAkgICAgfAorCQkJfCBzYW1wbGUgdGV4dAkJICAgIHwKKwkJTCAtLT4JfCB0ZXh0IHNhbXBsZSB0ZXh0CSAgICB8CisJCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitIaW50czogIkgiIHN0YW5kcyBmb3IgSG9tZSwgIk0iIGZvciBNaWRkbGUgYW5kICJMIiBmb3IgTGFzdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuNioJVGVsbGluZyB3aGVyZSB5b3UgYXJlCisKK1RvIHNlZSB3aGVyZSB5b3UgYXJlIGluIGEgZmlsZSwgdGhlcmUgYXJlIHRocmVlIHdheXM6CisKKzEuICBVc2UgdGhlIENUUkwtRyBjb21tYW5kLiAgWW91IGdldCBhIG1lc3NhZ2UgbGlrZSB0aGlzIChhc3N1bWluZyB0aGUgJ3J1bGVyJworICAgIG9wdGlvbiBpcyBvZmYpOgorCisJInVzcl8wMy50eHQiIGxpbmUgMjMzIG9mIDY1MCAtLTM1JS0tIGNvbCA0NS01MiB+CisKKyAgICBUaGlzIHNob3dzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHlvdSBhcmUgZWRpdGluZywgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZQorICAgIGN1cnNvciBpcywgdGhlIHRvdGFsIG51bWJlciBvZiBsaW5lcywgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHdheSB0aHJvdWdoCisgICAgdGhlIGZpbGUgYW5kIHRoZSBjb2x1bW4gb2YgdGhlIGN1cnNvci4KKyAgICAgICBTb21ldGltZXMgeW91IHdpbGwgc2VlIGEgc3BsaXQgY29sdW1uIG51bWJlci4gIEZvciBleGFtcGxlLCAiY29sIDItOSIuCisgICAgVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgb24gdGhlIHNlY29uZCBjaGFyYWN0ZXIsIGJ1dAorICAgIGJlY2F1c2UgY2hhcmFjdGVyIG9uZSBpcyBhIHRhYiwgb2NjdXB5aW5nIGVpZ2h0IHNwYWNlcyB3b3J0aCBvZiBjb2x1bW5zLAorICAgIHRoZSBzY3JlZW4gY29sdW1uIGlzIDkuCisKKzIuICBTZXQgdGhlICdudW1iZXInIG9wdGlvbi4gIFRoaXMgd2lsbCBkaXNwbGF5IGEgbGluZSBudW1iZXIgaW4gZnJvbnQgb2YKKyAgICBldmVyeSBsaW5lOiA+CisKKwk6c2V0IG51bWJlcgorPAorICAgIFRvIHN3aXRjaCB0aGlzIG9mZiBhZ2FpbjogPgorCisJOnNldCBub251bWJlcgorPAorICAgIFNpbmNlICdudW1iZXInIGlzIGEgYm9vbGVhbiBvcHRpb24sIHByZXBlbmRpbmcgIm5vIiB0byBpdHMgbmFtZSBoYXMgdGhlCisgICAgZWZmZWN0IG9mIHN3aXRjaGluZyBpdCBvZmYuICBBIGJvb2xlYW4gb3B0aW9uIGhhcyBvbmx5IHRoZXNlIHR3byB2YWx1ZXMsCisgICAgaXQgaXMgZWl0aGVyIG9uIG9yIG9mZi4KKyAgICAgICBWaW0gaGFzIG1hbnkgb3B0aW9ucy4gIEJlc2lkZXMgdGhlIGJvb2xlYW4gb25lcyB0aGVyZSBhcmUgb3B0aW9ucyB3aXRoCisgICAgYSBudW1lcmljYWwgdmFsdWUgYW5kIHN0cmluZyBvcHRpb25zLiAgWW91IHdpbGwgc2VlIGV4YW1wbGVzIG9mIHRoaXMgd2hlcmUKKyAgICB0aGV5IGFyZSB1c2VkLgorCiszLiAgU2V0IHRoZSAncnVsZXInIG9wdGlvbi4gIFRoaXMgd2lsbCBkaXNwbGF5IHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlCisgICAgbG93ZXIgcmlnaHQgY29ybmVyIG9mIHRoZSBWaW0gd2luZG93OiA+CisKKwk6c2V0IHJ1bGVyCisKK1VzaW5nIHRoZSAncnVsZXInIG9wdGlvbiBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IGl0IGRvZXNuJ3QgdGFrZSBtdWNoIHJvb20sCit0aHVzIHRoZXJlIGlzIG1vcmUgc3BhY2UgZm9yIHlvdXIgdGV4dC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuNyoJU2Nyb2xsaW5nIGFyb3VuZAorCitUaGUgQ1RSTC1VIGNvbW1hbmQgc2Nyb2xscyBkb3duIGhhbGYgYSBzY3JlZW4gb2YgdGV4dC4gIFRoaW5rIG9mIGxvb2tpbmcKK3Rocm91Z2ggYSB2aWV3aW5nIHdpbmRvdyBhdCB0aGUgdGV4dCBhbmQgbW92aW5nIHRoaXMgd2luZG93IHVwIGJ5IGhhbGYgdGhlCitoZWlnaHQgb2YgdGhlIHdpbmRvdy4gIFRodXMgdGhlIHdpbmRvdyBtb3ZlcyB1cCBvdmVyIHRoZSB0ZXh0LCB3aGljaCBpcworYmFja3dhcmQgaW4gdGhlIGZpbGUuICBEb24ndCB3b3JyeSBpZiB5b3UgaGF2ZSBhIGxpdHRsZSB0cm91YmxlIHJlbWVtYmVyaW5nCit3aGljaCBlbmQgaXMgdXAuICBNb3N0IHVzZXJzIGhhdmUgdGhlIHNhbWUgcHJvYmxlbS4KKyAgIFRoZSBDVFJMLUQgY29tbWFuZCBtb3ZlcyB0aGUgdmlld2luZyB3aW5kb3cgZG93biBoYWxmIGEgc2NyZWVuIGluIHRoZSBmaWxlLAordGh1cyBzY3JvbGxzIHRoZSB0ZXh0IHVwIGhhbGYgYSBzY3JlZW4uCisKKwkJCQkgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rCisJCQkJICAgICAgIHwgc29tZSB0ZXh0CXwKKwkJCQkgICAgICAgfCBzb21lIHRleHQJfAorCQkJCSAgICAgICB8IHNvbWUgdGV4dAl8CisJKy0tLS0tLS0tLS0tLS0tLSsJICAgICAgIHwgc29tZSB0ZXh0CXwKKwl8IHNvbWUgdGV4dAl8ICBDVFJMLVUgIC0tPiB8CQl8CisJfAkJfAkgICAgICAgfCAxMjM0NTYJCXwKKwl8IDEyMzQ1Ngl8CSAgICAgICArLS0tLS0tLS0tLS0tLS0tLSsKKwl8IDc4OTAJCXwKKwl8CQl8CSAgICAgICArLS0tLS0tLS0tLS0tLS0tLSsKKwl8IGV4YW1wbGUJfCAgQ1RSTC1EIC0tPiAgfCA3ODkwCQl8CisJKy0tLS0tLS0tLS0tLS0tLSsJICAgICAgIHwJCXwKKwkJCQkgICAgICAgfCBleGFtcGxlCXwKKwkJCQkgICAgICAgfCBleGFtcGxlCXwKKwkJCQkgICAgICAgfCBleGFtcGxlCXwKKwkJCQkgICAgICAgfCBleGFtcGxlCXwKKwkJCQkgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rCisKK1RvIHNjcm9sbCBvbmUgbGluZSBhdCBhIHRpbWUgdXNlIENUUkwtRSAoc2Nyb2xsIHVwKSBhbmQgQ1RSTC1ZIChzY3JvbGwgZG93bikuCitUaGluayBvZiBDVFJMLUUgdG8gZ2l2ZSB5b3Ugb25lIGxpbmUgRXh0cmEuICAoSWYgeW91IHVzZSBNUy1XaW5kb3dzIGNvbXBhdGlibGUKK2tleSBtYXBwaW5ncyBDVFJMLVkgd2lsbCByZWRvIGEgY2hhbmdlIGluc3RlYWQgb2Ygc2Nyb2xsLikKKworVG8gc2Nyb2xsIGZvcndhcmQgYnkgYSB3aG9sZSBzY3JlZW4gKGV4Y2VwdCBmb3IgdHdvIGxpbmVzKSB1c2UgQ1RSTC1GLiAgVGhlCitvdGhlciB3YXkgaXMgYmFja3dhcmQsIENUUkwtQiBpcyB0aGUgY29tbWFuZCB0byB1c2UuICBGb3J0dW5hdGVseSBDVFJMLUYgaXMKK0ZvcndhcmQgYW5kIENUUkwtQiBpcyBCYWNrd2FyZCwgdGhhdCdzIGVhc3kgdG8gcmVtZW1iZXIuCisKK0EgY29tbW9uIGlzc3VlIGlzIHRoYXQgYWZ0ZXIgbW92aW5nIGRvd24gbWFueSBsaW5lcyB3aXRoICJqIiB5b3VyIGN1cnNvciBpcyBhdAordGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLiAgWW91IHdvdWxkIGxpa2UgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoZSBsaW5lIHdpdGgKK3RoZSBjdXJzb3IuICBUaGF0J3MgZG9uZSB3aXRoIHRoZSAienoiIGNvbW1hbmQuCisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tKwkJICstLS0tLS0tLS0tLS0tLS0tLS0rCisJfCBzb21lIHRleHQJICAgfAkJIHwgc29tZSB0ZXh0CSAgICB8CisJfCBzb21lIHRleHQJICAgfAkJIHwgc29tZSB0ZXh0CSAgICB8CisJfCBzb21lIHRleHQJICAgfAkJIHwgc29tZSB0ZXh0CSAgICB8CisJfCBzb21lIHRleHQJICAgfCAgIHp6ICAtLT4JIHwgbGluZSB3aXRoIGN1cnNvciB8CisJfCBzb21lIHRleHQJICAgfAkJIHwgc29tZSB0ZXh0CSAgICB8CisJfCBzb21lIHRleHQJICAgfAkJIHwgc29tZSB0ZXh0CSAgICB8CisJfCBsaW5lIHdpdGggY3Vyc29yIHwJCSB8IHNvbWUgdGV4dAkgICAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0rCQkgKy0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlICJ6dCIgY29tbWFuZCBwdXRzIHRoZSBjdXJzb3IgbGluZSBhdCB0aGUgdG9wLCAiemIiIGF0IHRoZSBib3R0b20uICBUaGVyZQorYXJlIGEgZmV3IG1vcmUgc2Nyb2xsaW5nIGNvbW1hbmRzLCBzZWUgfFFfc2N8LiAgVG8gYWx3YXlzIGtlZXAgYSBmZXcgbGluZXMgb2YKK2NvbnRleHQgYXJvdW5kIHRoZSBjdXJzb3IsIHVzZSB0aGUgJ3Njcm9sbG9mZicgb3B0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowMy44KglTaW1wbGUgc2VhcmNoZXMKKworVG8gc2VhcmNoIGZvciBhIHN0cmluZywgdXNlIHRoZSAiL3N0cmluZyIgY29tbWFuZC4gIFRvIGZpbmQgdGhlIHdvcmQgaW5jbHVkZSwKK2ZvciBleGFtcGxlLCB1c2UgdGhlIGNvbW1hbmQ6ID4KKworCS9pbmNsdWRlCisKK1lvdSB3aWxsIG5vdGljZSB0aGF0IHdoZW4geW91IHR5cGUgdGhlICIvIiB0aGUgY3Vyc29yIGp1bXBzIHRvIHRoZSBsYXN0IGxpbmUKK29mIHRoZSBWaW0gd2luZG93LCBsaWtlIHdpdGggY29sb24gY29tbWFuZHMuICBUaGF0IGlzIHdoZXJlIHlvdSB0eXBlIHRoZSB3b3JkLgorWW91IGNhbiBwcmVzcyB0aGUgYmFja3NwYWNlIGtleSAoYmFja2Fycm93IG9yIDxCUz4pIHRvIG1ha2UgY29ycmVjdGlvbnMuICBVc2UKK3RoZSA8TGVmdD4gYW5kIDxSaWdodD4gY3Vyc29yIGtleXMgd2hlbiBuZWNlc3NhcnkuCisgICBQcmVzc2luZyA8RW50ZXI+IGV4ZWN1dGVzIHRoZSBjb21tYW5kLgorCisJTm90ZToKKwlUaGUgY2hhcmFjdGVycyAuKltdXiUvXD9+JCBoYXZlIHNwZWNpYWwgbWVhbmluZy4gSWYgeW91IHdhbnQgdG8gdXNlCisJdGhlbSBpbiBhIHNlYXJjaCB5b3UgbXVzdCBwdXQgYSBcIGluIGZyb250IG9mIHRoZW0uICBTZWUgYmVsb3cuCisKK1RvIGZpbmQgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgc2FtZSBzdHJpbmcgdXNlIHRoZSAibiIgY29tbWFuZC4gIFVzZSB0aGlzCit0byBmaW5kIHRoZSBmaXJzdCAjaW5jbHVkZSBhZnRlciB0aGUgY3Vyc29yOiA+CisKKwkvI2luY2x1ZGUKKworQW5kIHRoZW4gdHlwZSAibiIgc2V2ZXJhbCB0aW1lcy4gIFlvdSB3aWxsIG1vdmUgdG8gZWFjaCAjaW5jbHVkZSBpbiB0aGUgdGV4dC4KK1lvdSBjYW4gYWxzbyB1c2UgYSBjb3VudCBpZiB5b3Uga25vdyB3aGljaCBtYXRjaCB5b3Ugd2FudC4gIFRodXMgIjNuIiBmaW5kcwordGhlIHRoaXJkIG1hdGNoLiAgVXNpbmcgYSBjb3VudCB3aXRoICIvIiBkb2Vzbid0IHdvcmsuCisKK1RoZSAiPyIgY29tbWFuZCB3b3JrcyBsaWtlICIvIiBidXQgc2VhcmNoZXMgYmFja3dhcmRzOiA+CisKKwk/d29yZAorCitUaGUgIk4iIGNvbW1hbmQgcmVwZWF0cyB0aGUgbGFzdCBzZWFyY2ggdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gIFRodXMgdXNpbmcKKyJOIiBhZnRlciBhICIvIiBjb21tYW5kIHNlYXJjaCBiYWNrd2FyZHMsIHVzaW5nICJOIiBhZnRlciAiPyIgc2VhcmNoZXMKK2ZvcndhcmQuCisKKworSUdOT1JJTkcgQ0FTRQorCitOb3JtYWxseSB5b3UgaGF2ZSB0byB0eXBlIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCB0byBmaW5kLiAgSWYgeW91IGRvbid0IGNhcmUKK2Fib3V0IHVwcGVyIG9yIGxvd2VyY2FzZSBpbiBhIHdvcmQsIHNldCB0aGUgJ2lnbm9yZWNhc2UnIG9wdGlvbjogPgorCisJOnNldCBpZ25vcmVjYXNlCisKK0lmIHlvdSBub3cgc2VhcmNoIGZvciAid29yZCIsIGl0IHdpbGwgYWxzbyBtYXRjaCAiV29yZCIgYW5kICJXT1JEIi4gIFRvIG1hdGNoCitjYXNlIGFnYWluOiA+CisKKwk6c2V0IG5vaWdub3JlY2FzZQorCisKK0hJU1RPUlkKKworU3VwcG9zZSB5b3UgZG8gdGhyZWUgc2VhcmNoZXM6ID4KKworCS9vbmUKKwkvdHdvCisJL3RocmVlCisKK05vdyBsZXQncyBzdGFydCBzZWFyY2hpbmcgYnkgdHlwaW5nIGEgc2ltcGxlICIvIiB3aXRob3V0IHByZXNzaW5nIDxFbnRlcj4uICBJZgoreW91IHByZXNzIDxVcD4gKHRoZSBjdXJzb3Iga2V5KSwgVmltIHB1dHMgIi90aHJlZSIgb24gdGhlIGNvbW1hbmQgbGluZS4KK1ByZXNzaW5nIDxFbnRlcj4gYXQgdGhpcyBwb2ludCBzZWFyY2hlcyBmb3IgdGhyZWUuICBJZiB5b3UgZG8gbm90IHByZXNzCis8RW50ZXI+LCBidXQgcHJlc3MgPFVwPiBpbnN0ZWFkLCBWaW0gY2hhbmdlcyB0aGUgcHJvbXB0IHRvICIvdHdvIi4gIEFub3RoZXIKK3ByZXNzIG9mIDxVcD4gbW92ZXMgeW91IHRvICIvb25lIi4KKyAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxEb3duPiBjdXJzb3Iga2V5IHRvIG1vdmUgdGhyb3VnaCB0aGUgaGlzdG9yeSBvZgorc2VhcmNoIGNvbW1hbmRzIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uCisKK0lmIHlvdSBrbm93IHdoYXQgYSBwcmV2aW91c2x5IHVzZWQgcGF0dGVybiBzdGFydHMgd2l0aCwgYW5kIHlvdSB3YW50IHRvIHVzZSBpdAorYWdhaW4sIHR5cGUgdGhhdCBjaGFyYWN0ZXIgYmVmb3JlIHByZXNzaW5nIDxVcD4uICBXaXRoIHRoZSBwcmV2aW91cyBleGFtcGxlLAoreW91IGNhbiB0eXBlICIvbzxVcD4iIGFuZCBWaW0gd2lsbCBwdXQgIi9vbmUiIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK1RoZSBjb21tYW5kcyBzdGFydGluZyB3aXRoICI6IiBhbHNvIGhhdmUgYSBoaXN0b3J5LiAgVGhhdCBhbGxvd3MgeW91IHRvIHJlY2FsbAorYSBwcmV2aW91cyBjb21tYW5kIGFuZCBleGVjdXRlIGl0IGFnYWluLiAgVGhlc2UgdHdvIGhpc3RvcmllcyBhcmUgc2VwYXJhdGUuCisKKworU0VBUkNISU5HIEZPUiBBIFdPUkQgSU4gVEhFIFRFWFQKKworU3VwcG9zZSB5b3Ugc2VlIHRoZSB3b3JkICJUaGVMb25nRnVuY3Rpb25OYW1lIiBpbiB0aGUgdGV4dCBhbmQgeW91IHdhbnQgdG8KK2ZpbmQgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiBpdC4gIFlvdSBjb3VsZCB0eXBlICIvVGhlTG9uZ0Z1bmN0aW9uTmFtZSIsIGJ1dAordGhhdCdzIGEgbG90IG9mIHR5cGluZy4gIEFuZCB3aGVuIHlvdSBtYWtlIGEgbWlzdGFrZSBWaW0gd29uJ3QgZmluZCBpdC4KKyAgIFRoZXJlIGlzIGFuIGVhc2llciB3YXk6IFBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIHdvcmQgYW5kIHVzZSB0aGUgIioiCitjb21tYW5kLiAgVmltIHdpbGwgZ3JhYiB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yIGFuZCB1c2UgaXQgYXMgdGhlIHNlYXJjaAorc3RyaW5nLgorICAgVGhlICIjIiBjb21tYW5kIGRvZXMgdGhlIHNhbWUgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4gIFlvdSBjYW4gcHJlcGVuZCBhCitjb3VudDogIjMqIiBzZWFyY2hlcyBmb3IgdGhlIHRoaXJkIG9jY3VycmVuY2Ugb2YgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKworCitTRUFSQ0hJTkcgRk9SIFdIT0xFIFdPUkRTCisKK0lmIHlvdSB0eXBlICIvdGhlIiBpdCB3aWxsIGFsc28gbWF0Y2ggInRoZXJlIi4gIFRvIG9ubHkgZmluZCB3b3JkcyB0aGF0IGVuZAoraW4gInRoZSIgdXNlOiA+CisKKwkvdGhlXD4KKworVGhlICJcPiIgaXRlbSBpcyBhIHNwZWNpYWwgbWFya2VyIHRoYXQgb25seSBtYXRjaGVzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorU2ltaWxhcmx5ICJcPCIgb25seSBtYXRjaGVzIGF0IHRoZSBiZWdpbiBvZiBhIHdvcmQuICBUaHVzIHRvIHNlYXJjaCBmb3IgdGhlCit3b3JkICJ0aGUiIG9ubHk6ID4KKworCS9cPHRoZVw+CisKK1RoaXMgZG9lcyBub3QgbWF0Y2ggInRoZXJlIiBvciAic29vdGhlIi4gIE5vdGljZSB0aGF0IHRoZSAiKiIgYW5kICIjIiBjb21tYW5kcwordXNlIHRoZXNlIHN0YXJ0LW9mLXdvcmQgYW5kIGVuZC1vZi13b3JkIG1hcmtlcnMgdG8gb25seSBmaW5kIHdob2xlIHdvcmRzICh5b3UKK2NhbiB1c2UgImcqIiBhbmQgImcjIiB0byBtYXRjaCBwYXJ0aWFsIHdvcmRzKS4KKworCitISUdITElHSFRJTkcgTUFUQ0hFUworCitXaGlsZSBlZGl0aW5nIGEgcHJvZ3JhbSB5b3Ugc2VlIGEgdmFyaWFibGUgY2FsbGVkICJuciIuICBZb3Ugd2FudCB0byBjaGVjaword2hlcmUgaXQncyB1c2VkLiAgWW91IGNvdWxkIG1vdmUgdGhlIGN1cnNvciB0byAibnIiIGFuZCB1c2UgdGhlICIqIiBjb21tYW5kCithbmQgcHJlc3MgIm4iIHRvIGdvIGFsb25nIGFsbCB0aGUgbWF0Y2hlcy4KKyAgIFRoZXJlIGlzIGFub3RoZXIgd2F5LiAgVHlwZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpzZXQgaGxzZWFyY2gKKworSWYgeW91IG5vdyBzZWFyY2ggZm9yICJuciIsIFZpbSB3aWxsIGhpZ2hsaWdodCBhbGwgbWF0Y2hlcy4gIFRoYXQgaXMgYSB2ZXJ5Citnb29kIHdheSB0byBzZWUgd2hlcmUgdGhlIHZhcmlhYmxlIGlzIHVzZWQsIHdpdGhvdXQgdGhlIG5lZWQgdG8gdHlwZSBjb21tYW5kcy4KKyAgIFRvIHN3aXRjaCB0aGlzIG9mZjogPgorCisJOnNldCBub2hsc2VhcmNoCisKK1RoZW4geW91IG5lZWQgdG8gc3dpdGNoIGl0IG9uIGFnYWluIGlmIHlvdSB3YW50IHRvIHVzZSBpdCBmb3IgdGhlIG5leHQgc2VhcmNoCitjb21tYW5kLiAgSWYgeW91IG9ubHkgd2FudCB0byByZW1vdmUgdGhlIGhpZ2hsaWdodGluZywgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOm5vaGxzZWFyY2gKKworVGhpcyBkb2Vzbid0IHJlc2V0IHRoZSBvcHRpb24uICBJbnN0ZWFkLCBpdCBkaXNhYmxlcyB0aGUgaGlnaGxpZ2h0aW5nLiAgQXMKK3Nvb24gYXMgeW91IGV4ZWN1dGUgYSBzZWFyY2ggY29tbWFuZCwgdGhlIGhpZ2hsaWdodGluZyB3aWxsIGJlIHVzZWQgYWdhaW4uCitBbHNvIGZvciB0aGUgIm4iIGFuZCAiTiIgY29tbWFuZHMuCisKKworVFVOSU5HIFNFQVJDSEVTCisKK1RoZXJlIGFyZSBhIGZldyBvcHRpb25zIHRoYXQgY2hhbmdlIGhvdyBzZWFyY2hpbmcgd29ya3MuICBUaGVzZSBhcmUgdGhlCitlc3NlbnRpYWwgb25lczoKKz4KKwk6c2V0IGluY3NlYXJjaAorCitUaGlzIG1ha2VzIFZpbSBkaXNwbGF5IHRoZSBtYXRjaCBmb3IgdGhlIHN0cmluZyB3aGlsZSB5b3UgYXJlIHN0aWxsIHR5cGluZyBpdC4KK1VzZSB0aGlzIHRvIGNoZWNrIGlmIHRoZSByaWdodCBtYXRjaCB3aWxsIGJlIGZvdW5kLiAgVGhlbiBwcmVzcyA8RW50ZXI+IHRvCityZWFsbHkganVtcCB0byB0aGF0IGxvY2F0aW9uLiAgT3IgdHlwZSBtb3JlIHRvIGNoYW5nZSB0aGUgc2VhcmNoIHN0cmluZy4KKz4KKwk6c2V0IG5vd3JhcHNjYW4KKworVGhpcyBzdG9wcyB0aGUgc2VhcmNoIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuICBPciwgd2hlbiB5b3UgYXJlIHNlYXJjaGluZworYmFja3dhcmRzLCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuICBUaGUgJ3dyYXBzY2FuJyBvcHRpb24gaXMgb24gYnkgZGVmYXVsdCwKK3RodXMgc2VhcmNoaW5nIHdyYXBzIGFyb3VuZCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCisKK0lOVEVSTUVaWk8KKworSWYgeW91IGxpa2Ugb25lIG9mIHRoZSBvcHRpb25zIG1lbnRpb25lZCBiZWZvcmUsIGFuZCBzZXQgaXQgZWFjaCB0aW1lIHlvdSB1c2UKK1ZpbSwgeW91IGNhbiBwdXQgdGhlIGNvbW1hbmQgaW4geW91ciBWaW0gc3RhcnR1cCBmaWxlLgorICAgRWRpdCB0aGUgZmlsZSwgYXMgbWVudGlvbmVkIGF0IHxub3QtY29tcGF0aWJsZXwuICBPciB1c2UgdGhpcyBjb21tYW5kIHRvCitmaW5kIG91dCB3aGVyZSBpdCBpczogPgorCisJOnNjcmlwdG5hbWVzCisKK0VkaXQgdGhlIGZpbGUsIGZvciBleGFtcGxlIHdpdGg6ID4KKworCTplZGl0IH4vLnZpbXJjCisKK1RoZW4gYWRkIGEgbGluZSB3aXRoIHRoZSBjb21tYW5kIHRvIHNldCB0aGUgb3B0aW9uLCBqdXN0IGxpa2UgeW91IHR5cGVkIGl0IGluCitWaW0uICBFeGFtcGxlOiA+CisKKwlHbzpzZXQgaGxzZWFyY2g8RXNjPgorCisiRyIgbW92ZXMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gICJvIiBzdGFydHMgYSBuZXcgbGluZSwgd2hlcmUgeW91IHR5cGUgdGhlCisiOnNldCIgY29tbWFuZC4gIFlvdSBlbmQgaW5zZXJ0IG1vZGUgd2l0aCA8RXNjPi4gIFRoZW4gd3JpdGUgdGhlIGZpbGU6ID4KKworCVpaCisKK0lmIHlvdSBub3cgc3RhcnQgVmltIGFnYWluLCB0aGUgJ2hsc2VhcmNoJyBvcHRpb24gd2lsbCBhbHJlYWR5IGJlIHNldC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuOSoJU2ltcGxlIHNlYXJjaCBwYXR0ZXJucworCitUaGUgVmltIGVkaXRvciB1c2VzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gc3BlY2lmeSB3aGF0IHRvIHNlYXJjaCBmb3IuCitSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBhbiBleHRyZW1lbHkgcG93ZXJmdWwgYW5kIGNvbXBhY3Qgd2F5IHRvIHNwZWNpZnkgYQorc2VhcmNoIHBhdHRlcm4uICBVbmZvcnR1bmF0ZWx5LCB0aGlzIHBvd2VyIGNvbWVzIGF0IGEgcHJpY2UsIGJlY2F1c2UgcmVndWxhcgorZXhwcmVzc2lvbnMgYXJlIGEgYml0IHRyaWNreSB0byBzcGVjaWZ5LgorICAgSW4gdGhpcyBzZWN0aW9uIHdlIG1lbnRpb24gb25seSBhIGZldyBlc3NlbnRpYWwgb25lcy4gIE1vcmUgYWJvdXQgc2VhcmNoCitwYXR0ZXJucyBhbmQgY29tbWFuZHMgaW4gY2hhcHRlciAyNyB8dXNyXzI3LnR4dHwuICBZb3UgY2FuIGZpbmQgdGhlIGZ1bGwKK2V4cGxhbmF0aW9uIGhlcmU6IHxwYXR0ZXJufC4KKworCitCRUdJTk5JTkcgQU5EIEVORCBPRiBBIExJTkUKKworVGhlIF4gY2hhcmFjdGVyIG1hdGNoZXMgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuICBPbiBhbiBFbmdsaXNoLVVTIGtleWJvYXJkCit5b3UgZmluZCBpdCBhYm92ZSB0aGUgNi4gIFRoZSBwYXR0ZXJuICJpbmNsdWRlIiBtYXRjaGVzIHRoZSB3b3JkIGluY2x1ZGUKK2FueXdoZXJlIG9uIHRoZSBsaW5lLiAgQnV0IHRoZSBwYXR0ZXJuICJeaW5jbHVkZSIgbWF0Y2hlcyB0aGUgd29yZCBpbmNsdWRlCitvbmx5IGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorICAgVGhlICQgY2hhcmFjdGVyIG1hdGNoZXMgdGhlIGVuZCBvZiBhIGxpbmUuICBUaGVyZWZvcmUsICJ3YXMkIiBtYXRjaGVzIHRoZQord29yZCB3YXMgb25seSBpZiBpdCBpcyBhdCB0aGUgZW5kIG9mIGEgbGluZS4KKworTGV0J3MgbWFyayB0aGUgcGxhY2VzIHdoZXJlICJ0aGUiIG1hdGNoZXMgaW4gdGhpcyBleGFtcGxlIGxpbmUgd2l0aCAieCJzOgorCisJdGhlIHNvbGRlciBob2xkaW5nIG9uZSBvZiB0aGUgY2hpcHMgbWVsdGVkIGFuZCB0aGUgfgorCXh4eAkJCSAgeHh4CQkgICAgICAgeHh4CisKK1VzaW5nICIvdGhlJCIgd2UgZmluZCB0aGlzIG1hdGNoOgorCisJdGhlIHNvbGRlciBob2xkaW5nIG9uZSBvZiB0aGUgY2hpcHMgbWVsdGVkIGFuZCB0aGUgfgorCQkJCQkJICAgICAgIHh4eAorCitBbmQgd2l0aCAiL150aGUiIHdlIGZpbmQgdGhpcyBvbmU6CisJdGhlIHNvbGRlciBob2xkaW5nIG9uZSBvZiB0aGUgY2hpcHMgbWVsdGVkIGFuZCB0aGUgfgorCXh4eAorCitZb3UgY2FuIHRyeSBzZWFyY2hpbmcgd2l0aCAiL150aGUkIiwgaXQgd2lsbCBvbmx5IG1hdGNoIGEgc2luZ2xlIGxpbmUKK2NvbnNpc3Rpbmcgb2YgInRoZSIuICBXaGl0ZSBzcGFjZSBkb2VzIG1hdHRlciBoZXJlLCB0aHVzIGlmIGEgbGluZSBjb250YWlucyBhCitzcGFjZSBhZnRlciB0aGUgd29yZCwgbGlrZSAidGhlICIsIHRoZSBwYXR0ZXJuIHdpbGwgbm90IG1hdGNoLgorCisKK01BVENISU5HIEFOWSBTSU5HTEUgQ0hBUkFDVEVSCisKK1RoZSAuIChkb3QpIGNoYXJhY3RlciBtYXRjaGVzIGFueSBleGlzdGluZyBjaGFyYWN0ZXIuICBGb3IgZXhhbXBsZSwgdGhlCitwYXR0ZXJuICJjLm0iIG1hdGNoZXMgYSBzdHJpbmcgd2hvc2UgZmlyc3QgY2hhcmFjdGVyIGlzIGEgYywgd2hvc2Ugc2Vjb25kCitjaGFyYWN0ZXIgaXMgYW55dGhpbmcsIGFuZCB3aG9zZSB0aGUgdGhpcmQgY2hhcmFjdGVyIGlzIG0uICBFeGFtcGxlOgorCisJV2UgdXNlIGEgY29tcHV0ZXIgdGhhdCBiZWNhbWUgdGhlIGN1bW1pbiB3aW50ZXIuIH4KKwkJIHh4eAkJIHh4eAkgIHh4eAorCisKK01BVENISU5HIFNQRUNJQUwgQ0hBUkFDVEVSUworCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gbWF0Y2ggYSBkb3QsIHlvdSBtdXN0IGF2b2lkIGl0cyBzcGVjaWFsIG1lYW5pbmcgYnkKK3B1dHRpbmcgYSBiYWNrc2xhc2ggYmVmb3JlIGl0LgorICAgSWYgeW91IHNlYXJjaCBmb3IgInRlci4iLCB5b3Ugd2lsbCBmaW5kIHRoZXNlIG1hdGNoZXM6CisKKwlXZSB1c2UgYSBjb21wdXRlciB0aGF0IGJlY2FtZSB0aGUgY3VtbWluIHdpbnRlci4gfgorCQkgICAgICB4eHh4CQkJICAgIHh4eHgKKworU2VhcmNoaW5nIGZvciAidGVyXC4iIG9ubHkgZmluZHMgdGhlIHNlY29uZCBtYXRjaC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDMuMTAqCVVzaW5nIG1hcmtzCisKK1doZW4geW91IG1ha2UgYSBqdW1wIHRvIGEgcG9zaXRpb24gd2l0aCB0aGUgIkciIGNvbW1hbmQsIFZpbSByZW1lbWJlcnMgdGhlCitwb3NpdGlvbiBmcm9tIGJlZm9yZSB0aGlzIGp1bXAuICBUaGlzIHBvc2l0aW9uIGlzIGNhbGxlZCBhIG1hcmsuICBUbyBnbyBiYWNrCit3aGVyZSB5b3UgY2FtZSBmcm9tLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwlgYAorCitUaGlzIGAgaXMgYSBiYWNrdGljayBvciBvcGVuIHNpbmdsZS1xdW90ZSBjaGFyYWN0ZXIuCisgICBJZiB5b3UgdXNlIHRoZSBzYW1lIGNvbW1hbmQgYSBzZWNvbmQgdGltZSB5b3Ugd2lsbCBqdW1wIGJhY2sgYWdhaW4uICBUaGF0J3MKK2JlY2F1c2UgdGhlIGAgY29tbWFuZCBpcyBhIGp1bXAgaXRzZWxmLCBhbmQgdGhlIHBvc2l0aW9uIGZyb20gYmVmb3JlIHRoaXMganVtcAoraXMgcmVtZW1iZXJlZC4KKworR2VuZXJhbGx5LCBldmVyeSB0aW1lIHlvdSBkbyBhIGNvbW1hbmQgdGhhdCBjYW4gbW92ZSB0aGUgY3Vyc29yIGZ1cnRoZXIgdGhhbgord2l0aGluIHRoZSBzYW1lIGxpbmUsIHRoaXMgaXMgY2FsbGVkIGEganVtcC4gIFRoaXMgaW5jbHVkZXMgdGhlIHNlYXJjaAorY29tbWFuZHMgIi8iIGFuZCAibiIgKGl0IGRvZXNuJ3QgbWF0dGVyIGhvdyBmYXIgYXdheSB0aGUgbWF0Y2ggaXMpLiAgQnV0IG5vdAordGhlIGNoYXJhY3RlciBzZWFyY2hlcyB3aXRoICJmeCIgYW5kICJ0eCIgb3IgdGhlIHdvcmQgbW92ZW1lbnRzICJ3IiBhbmQgImUiLgorICAgQWxzbywgImoiIGFuZCAiayIgYXJlIG5vdCBjb25zaWRlcmVkIHRvIGJlIGEganVtcC4gIEV2ZW4gd2hlbiB5b3UgdXNlIGEKK2NvdW50IHRvIG1ha2UgdGhlbSBtb3ZlIHRoZSBjdXJzb3IgcXVpdGUgYSBsb25nIHdheSBhd2F5LgorCitUaGUgYGAgY29tbWFuZCBqdW1wcyBiYWNrIGFuZCBmb3J0aCwgYmV0d2VlbiB0d28gcG9pbnRzLiAgVGhlIENUUkwtTyBjb21tYW5kCitqdW1wcyB0byBvbGRlciBwb3NpdGlvbnMgKEhpbnQ6IE8gZm9yIG9sZGVyKS4gIENUUkwtSSB0aGVuIGp1bXBzIGJhY2sgdG8gbmV3ZXIKK3Bvc2l0aW9ucyAoSGludDogSSBpcyBqdXN0IG5leHQgdG8gTyBvbiB0aGUga2V5Ym9hcmQpLiAgQ29uc2lkZXIgdGhpcyBzZXF1ZW5jZQorb2YgY29tbWFuZHM6ID4KKworCTMzRworCS9eVGhlCisJQ1RSTC1PCisKK1lvdSBmaXJzdCBqdW1wIHRvIGxpbmUgMzMsIHRoZW4gc2VhcmNoIGZvciBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiVGhlIi4KK1RoZW4gd2l0aCBDVFJMLU8geW91IGp1bXAgYmFjayB0byBsaW5lIDMzLiAgQW5vdGhlciBDVFJMLU8gdGFrZXMgeW91IGJhY2sgdG8KK3doZXJlIHlvdSBzdGFydGVkLiAgSWYgeW91IG5vdyB1c2UgQ1RSTC1JIHlvdSBqdW1wIHRvIGxpbmUgMzMgYWdhaW4uICBBbmQKK3RvIHRoZSBtYXRjaCBmb3IgIlRoZSIgd2l0aCBhbm90aGVyIENUUkwtSS4KKworCisJICAgICB8CWV4YW1wbGUgdGV4dCAgIF4JICAgICB8CisJMzNHICB8CWV4YW1wbGUgdGV4dCAgIHwgIENUUkwtTyAgICAgfCBDVFJMLUkKKwkgICAgIHwJZXhhbXBsZSB0ZXh0ICAgfAkgICAgIHwKKwkgICAgIFYJbGluZSAzMyB0ZXh0ICAgXgkgICAgIFYKKwkgICAgIHwJZXhhbXBsZSB0ZXh0ICAgfAkgICAgIHwKKyAgICAgICAvXlRoZSB8CWV4YW1wbGUgdGV4dCAgIHwgIENUUkwtTyAgICAgfCBDVFJMLUkKKwkgICAgIFYJVGhlcmUgeW91IGFyZSAgfAkgICAgIFYKKwkJZXhhbXBsZSB0ZXh0CisKKwlOb3RlOgorCUNUUkwtSSBpcyB0aGUgc2FtZSBhcyA8VGFiPi4KKworVGhlICI6anVtcHMiIGNvbW1hbmQgZ2l2ZXMgYSBsaXN0IG9mIHBvc2l0aW9ucyB5b3UganVtcGVkIHRvLiAgVGhlIGVudHJ5IHdoaWNoCit5b3UgdXNlZCBsYXN0IGlzIG1hcmtlZCB3aXRoIGEgIj4iLgorCisKK05BTUVEIE1BUktTCisKK1ZpbSBlbmFibGVzIHlvdSB0byBwbGFjZSB5b3VyIG93biBtYXJrcyBpbiB0aGUgdGV4dC4gIFRoZSBjb21tYW5kICJtYSIgbWFya3MKK3RoZSBwbGFjZSB1bmRlciB0aGUgY3Vyc29yIGFzIG1hcmsgYS4gIFlvdSBjYW4gcGxhY2UgMjYgbWFya3MgKGEgdGhyb3VnaCB6KSBpbgoreW91ciB0ZXh0LiAgWW91IGNhbid0IHNlZSB0aGVtLCBpdCdzIGp1c3QgYSBwb3NpdGlvbiB0aGF0IFZpbSByZW1lbWJlcnMuCisgICBUbyBnbyB0byBhIG1hcmssIHVzZSB0aGUgY29tbWFuZCBge21hcmt9LCB3aGVyZSAie21hcmt9IGlzIHRoZSBtYXJrIGxldHRlci4KK1RodXMgdG8gbW92ZSB0byB0aGUgYSBtYXJrOgorPgorCWBhCisKK1RoZSBjb21tYW5kICdtYXJrIChzaW5nbGUgcXVvdGF0aW9uIG1hcmssIG9yIGFwb3N0cm9waGUpIG1vdmVzIHlvdSB0byB0aGUKK2JlZ2lubmluZyBvZiB0aGUgbGluZSBjb250YWluaW5nIHRoZSBtYXJrLiAgVGhpcyBkaWZmZXJzIGZyb20gdGhlIGBtYXJrCitjb21tYW5kLCB3aGljaCBtb3ZlcyB5b3UgdG8gbWFya2VkIGNvbHVtbi4KKworVGhlIG1hcmtzIGNhbiBiZSB2ZXJ5IHVzZWZ1bCB3aGVuIHdvcmtpbmcgb24gdHdvIHJlbGF0ZWQgcGFydHMgaW4gYSBmaWxlLgorU3VwcG9zZSB5b3UgaGF2ZSBzb21lIHRleHQgbmVhciB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgeW91IG5lZWQgdG8gbG9vayBhdCwKK3doaWxlIHdvcmtpbmcgb24gc29tZSB0ZXh0IG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyAgIE1vdmUgdG8gdGhlIHRleHQgYXQgdGhlIHN0YXJ0IGFuZCBwbGFjZSB0aGUgcyAoc3RhcnQpIG1hcmsgdGhlcmU6ID4KKworCW1zCisKK1RoZSBtb3ZlIHRvIHRoZSB0ZXh0IHlvdSB3YW50IHRvIHdvcmsgb24gYW5kIHB1dCB0aGUgZSAoZW5kKSBtYXJrIHRoZXJlOiA+CisKKwltZQorCitOb3cgeW91IGNhbiBtb3ZlIGFyb3VuZCwgYW5kIHdoZW4geW91IHdhbnQgdG8gbG9vayBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsCit5b3UgdXNlIHRoaXMgdG8ganVtcCB0aGVyZTogPgorCisJJ3MKKworVGhlbiB5b3UgY2FuIHVzZSAnJyB0byBqdW1wIGJhY2sgdG8gd2hlcmUgeW91IHdlcmUsIG9yICdlIHRvIGp1bXAgdG8gdGhlIHRleHQKK3lvdSB3ZXJlIHdvcmtpbmcgb24gYXQgdGhlIGVuZC4KKyAgIFRoZXJlIGlzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB1c2luZyBzIGZvciBzdGFydCBhbmQgZSBmb3IgZW5kLCB0aGV5IGFyZQoranVzdCBlYXN5IHRvIHJlbWVtYmVyLgorCitZb3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQgdG8gZ2V0IGEgbGlzdCBvZiBtYXJrczogPgorCisJOm1hcmtzCisKK1lvdSB3aWxsIG5vdGljZSBhIGZldyBzcGVjaWFsIG1hcmtzLiAgVGhlc2UgaW5jbHVkZToKKworCScJVGhlIGN1cnNvciBwb3NpdGlvbiBiZWZvcmUgZG9pbmcgYSBqdW1wCisJIglUaGUgY3Vyc29yIHBvc2l0aW9uIHdoZW4gbGFzdCBlZGl0aW5nIHRoZSBmaWxlCisJWwlTdGFydCBvZiB0aGUgbGFzdCBjaGFuZ2UKKwldCUVuZCBvZiB0aGUgbGFzdCBjaGFuZ2UKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8wNC50eHR8ICBNYWtpbmcgc21hbGwgY2hhbmdlcworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8wNC50eHQgYi9ydW50aW1lL2RvYy91c3JfMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOWUyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMDQudHh0CkBAIC0wLDAgKzEsNTE0IEBACisqdXNyXzA0LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA4CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgIE1ha2luZyBzbWFsbCBjaGFuZ2VzCisKKworVGhpcyBjaGFwdGVyIHNob3dzIHlvdSBzZXZlcmFsIHdheXMgb2YgbWFraW5nIGNvcnJlY3Rpb25zIGFuZCBtb3ZpbmcgdGV4dAorYXJvdW5kLiAgSXQgdGVhY2hlcyB5b3UgdGhlIHRocmVlIGJhc2ljIHdheXMgdG8gY2hhbmdlIHRleHQ6IG9wZXJhdG9yLW1vdGlvbiwKK1Zpc3VhbCBtb2RlIGFuZCB0ZXh0IG9iamVjdHMuCisKK3wwNC4xfAlPcGVyYXRvcnMgYW5kIG1vdGlvbnMKK3wwNC4yfAlDaGFuZ2luZyB0ZXh0Cit8MDQuM3wJUmVwZWF0aW5nIGEgY2hhbmdlCit8MDQuNHwJVmlzdWFsIG1vZGUKK3wwNC41fAlNb3ZpbmcgdGV4dAorfDA0LjZ8CUNvcHlpbmcgdGV4dAorfDA0Ljd8CVVzaW5nIHRoZSBjbGlwYm9hcmQKK3wwNC44fAlUZXh0IG9iamVjdHMKK3wwNC45fAlSZXBsYWNlIG1vZGUKK3wwNC4xMHwJQ29uY2x1c2lvbgorCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8wNS50eHR8ICBTZXQgeW91ciBzZXR0aW5ncworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMDMudHh0fCAgTW92aW5nIGFyb3VuZAorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuMSoJT3BlcmF0b3JzIGFuZCBtb3Rpb25zCisKK0luIGNoYXB0ZXIgMiB5b3UgbGVhcm5lZCB0aGUgIngiIGNvbW1hbmQgdG8gZGVsZXRlIGEgc2luZ2xlIGNoYXJhY3Rlci4gIEFuZAordXNpbmcgYSBjb3VudDogIjR4IiBkZWxldGVzIGZvdXIgY2hhcmFjdGVycy4KKyAgIFRoZSAiZHciIGNvbW1hbmQgZGVsZXRlcyBhIHdvcmQuICBZb3UgbWF5IHJlY29nbml6ZSB0aGUgInciIGNvbW1hbmQgYXMgdGhlCittb3ZlIHdvcmQgY29tbWFuZC4gIEluIGZhY3QsIHRoZSAiZCIgY29tbWFuZCBtYXkgYmUgZm9sbG93ZWQgYnkgYW55IG1vdGlvbgorY29tbWFuZCwgYW5kIGl0IGRlbGV0ZXMgZnJvbSB0aGUgY3VycmVudCBsb2NhdGlvbiB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlCitjdXJzb3Igd2luZHMgdXAuCisgICBUaGUgIjR3IiBjb21tYW5kLCBmb3IgZXhhbXBsZSwgbW92ZXMgdGhlIGN1cnNvciBvdmVyIGZvdXIgd29yZHMuICBUaGUgZDR3Citjb21tYW5kIGRlbGV0ZXMgZm91ciB3b3Jkcy4KKworCVRvIGVyciBpcyBodW1hbi4gVG8gcmVhbGx5IGZvdWwgdXAgeW91IG5lZWQgYSBjb21wdXRlci4gfgorCQkJIC0tLS0tLS0tLS0tLS0tLS0tLT4KKwkJCQkgZDR3CisKKwlUbyBlcnIgaXMgaHVtYW4uIHlvdSBuZWVkIGEgY29tcHV0ZXIuIH4KKworVmltIG9ubHkgZGVsZXRlcyB1cCB0byB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIG1vdGlvbiB0YWtlcyB0aGUgY3Vyc29yLiAgVGhhdCdzCitiZWNhdXNlIFZpbSBrbm93cyB0aGF0IHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGRlbGV0ZSB0aGUgZmlyc3QgY2hhcmFjdGVyCitvZiBhIHdvcmQuICBJZiB5b3UgdXNlIHRoZSAiZSIgY29tbWFuZCB0byBtb3ZlIHRvIHRoZSBlbmQgb2YgYSB3b3JkLCBWaW0KK2d1ZXNzZXMgdGhhdCB5b3UgZG8gd2FudCB0byBpbmNsdWRlIHRoYXQgbGFzdCBjaGFyYWN0ZXI6CisKKwlUbyBlcnIgaXMgaHVtYW4uIHlvdSBuZWVkIGEgY29tcHV0ZXIuIH4KKwkJCS0tLS0tLS0tPgorCQkJICAgZDJlCisKKwlUbyBlcnIgaXMgaHVtYW4uIGEgY29tcHV0ZXIuIH4KKworV2hldGhlciB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgaXMgaW5jbHVkZWQgZGVwZW5kcyBvbiB0aGUgY29tbWFuZCB5b3UKK3VzZWQgdG8gbW92ZSB0byB0aGF0IGNoYXJhY3Rlci4gIFRoZSByZWZlcmVuY2UgbWFudWFsIGNhbGxzIHRoaXMgImV4Y2x1c2l2ZSIKK3doZW4gdGhlIGNoYXJhY3RlciBpc24ndCBpbmNsdWRlZCBhbmQgImluY2x1c2l2ZSIgd2hlbiBpdCBpcy4KKworVGhlICIkIiBjb21tYW5kIG1vdmVzIHRvIHRoZSBlbmQgb2YgYSBsaW5lLiAgVGhlICJkJCIgY29tbWFuZCBkZWxldGVzIGZyb20gdGhlCitjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gIFRoaXMgaXMgYW4gaW5jbHVzaXZlIG1vdGlvbiwgdGh1cyB0aGUgbGFzdAorY2hhcmFjdGVyIG9mIHRoZSBsaW5lIGlzIGluY2x1ZGVkIGluIHRoZSBkZWxldGUgb3BlcmF0aW9uOgorCisJVG8gZXJyIGlzIGh1bWFuLiBhIGNvbXB1dGVyLiB+CisJCSAgICAgICAtLS0tLS0tLS0tLS0+CisJCQkgICAgZCQKKworCVRvIGVyciBpcyBodW1hbiB+CisKK1RoZXJlIGlzIGEgcGF0dGVybiBoZXJlOiBvcGVyYXRvci1tb3Rpb24uICBZb3UgZmlyc3QgdHlwZSBhbiBvcGVyYXRvciBjb21tYW5kLgorRm9yIGV4YW1wbGUsICJkIiBpcyB0aGUgZGVsZXRlIG9wZXJhdG9yLiAgVGhlbiB5b3UgdHlwZSBhIG1vdGlvbiBjb21tYW5kIGxpa2UKKyI0bCIgb3IgInciLiAgVGhpcyB3YXkgeW91IGNhbiBvcGVyYXRlIG9uIGFueSB0ZXh0IHlvdSBjYW4gbW92ZSBvdmVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNC4yKglDaGFuZ2luZyB0ZXh0CisKK0Fub3RoZXIgb3BlcmF0b3IgaXMgImMiLCBjaGFuZ2UuICBJdCBhY3RzIGp1c3QgbGlrZSB0aGUgImQiIG9wZXJhdG9yLCBleGNlcHQKK2l0IGxlYXZlcyB5b3UgaW4gSW5zZXJ0IG1vZGUuICBGb3IgZXhhbXBsZSwgImN3IiBjaGFuZ2VzIGEgd29yZC4gIE9yIG1vcmUKK3NwZWNpZmljYWxseSwgaXQgZGVsZXRlcyBhIHdvcmQgYW5kIHRoZW4gcHV0cyB5b3UgaW4gSW5zZXJ0IG1vZGUuCisKKwlUbyBlcnIgaXMgaHVtYW4gfgorCSAgIC0tLS0tLS0+CisJICAgICBjMndiZTxFc2M+CisKKwlUbyBiZSBodW1hbiB+CisKK1RoaXMgImMyd2JlPEVzYz4iIGNvbnRhaW5zIHRoZXNlIGJpdHM6CisKKwljCXRoZSBjaGFuZ2Ugb3BlcmF0b3IKKwkydwltb3ZlIHR3byB3b3JkcyAodGhleSBhcmUgZGVsZXRlZCBhbmQgSW5zZXJ0IG1vZGUgc3RhcnRlZCkKKwliZQlpbnNlcnQgdGhpcyB0ZXh0CisJPEVzYz4JYmFjayB0byBOb3JtYWwgbW9kZQorCitJZiB5b3UgaGF2ZSBwYWlkIGF0dGVudGlvbiwgeW91IHdpbGwgaGF2ZSBub3RpY2VkIHNvbWV0aGluZyBzdHJhbmdlOiBUaGUgc3BhY2UKK2JlZm9yZSAiaHVtYW4iIGlzbid0IGRlbGV0ZWQuICBUaGVyZSBpcyBhIHNheWluZyB0aGF0IGZvciBldmVyeSBwcm9ibGVtIHRoZXJlCitpcyBhbiBhbnN3ZXIgdGhhdCBpcyBzaW1wbGUsIGNsZWFyLCBhbmQgd3JvbmcuICBUaGF0IGlzIHRoZSBjYXNlIHdpdGggdGhlCitleGFtcGxlIHVzZWQgaGVyZSBmb3IgdGhlICJjdyIgY29tbWFuZC4gIFRoZSBjIG9wZXJhdG9yIHdvcmtzIGp1c3QgbGlrZSB0aGUKK2Qgb3BlcmF0b3IsIHdpdGggb25lIGV4Y2VwdGlvbjogImN3Ii4gIEl0IGFjdHVhbGx5IHdvcmtzIGxpa2UgImNlIiwgY2hhbmdlIHRvCitlbmQgb2Ygd29yZC4gIFRodXMgdGhlIHNwYWNlIGFmdGVyIHRoZSB3b3JkIGlzbid0IGluY2x1ZGVkLiAgVGhpcyBpcyBhbgorZXhjZXB0aW9uIHRoYXQgZGF0ZXMgYmFjayB0byB0aGUgb2xkIFZpLiAgU2luY2UgbWFueSBwZW9wbGUgYXJlIHVzZWQgdG8gaXQKK25vdywgdGhlIGluY29uc2lzdGVuY3kgaGFzIHJlbWFpbmVkIGluIFZpbS4KKworCitNT1JFIENIQU5HRVMKKworTGlrZSAiZGQiIGRlbGV0ZXMgYSB3aG9sZSBsaW5lLCAiY2MiIGNoYW5nZXMgYSB3aG9sZSBsaW5lLiAgSXQga2VlcHMgdGhlCitleGlzdGluZyBpbmRlbnQgKGxlYWRpbmcgd2hpdGUgc3BhY2UpIHRob3VnaC4KKworSnVzdCBsaWtlICJkJCIgZGVsZXRlcyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lLCAiYyQiIGNoYW5nZXMgdW50aWwgdGhlIGVuZAorb2YgdGhlIGxpbmUuICBJdCdzIGxpa2UgZG9pbmcgImQkIiB0byBkZWxldGUgdGhlIHRleHQgYW5kIHRoZW4gImEiIHRvIHN0YXJ0CitJbnNlcnQgbW9kZSBhbmQgYXBwZW5kIG5ldyB0ZXh0LgorCisKK1NIT1JUQ1VUUworCitTb21lIG9wZXJhdG9yLW1vdGlvbiBjb21tYW5kcyBhcmUgdXNlZCBzbyBvZnRlbiB0aGF0IHRoZXkgaGF2ZSBiZWVuIGdpdmVuIGEKK3NpbmdsZSBsZXR0ZXIgY29tbWFuZDoKKworCXggIHN0YW5kcyBmb3IgIGRsICAoZGVsZXRlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yKQorCVggIHN0YW5kcyBmb3IgIGRoICAoZGVsZXRlIGNoYXJhY3RlciBsZWZ0IG9mIHRoZSBjdXJzb3IpCisJRCAgc3RhbmRzIGZvciAgZCQgIChkZWxldGUgdG8gZW5kIG9mIHRoZSBsaW5lKQorCUMgIHN0YW5kcyBmb3IgIGMkICAoY2hhbmdlIHRvIGVuZCBvZiB0aGUgbGluZSkKKwlzICBzdGFuZHMgZm9yICBjbCAgKGNoYW5nZSBvbmUgY2hhcmFjdGVyKQorCVMgIHN0YW5kcyBmb3IgIGNjICAoY2hhbmdlIGEgd2hvbGUgbGluZSkKKworCitXSEVSRSBUTyBQVVQgVEhFIENPVU5UCisKK1RoZSBjb21tYW5kcyAiM2R3IiBhbmQgImQzdyIgZGVsZXRlIHRocmVlIHdvcmRzLiAgSWYgeW91IHdhbnQgdG8gZ2V0IHJlYWxseQorcGlja3kgYWJvdXQgdGhpbmdzLCB0aGUgZmlyc3QgY29tbWFuZCwgIjNkdyIsIGRlbGV0ZXMgb25lIHdvcmQgdGhyZWUgdGltZXM7Cit0aGUgY29tbWFuZCAiZDN3IiBkZWxldGVzIHRocmVlIHdvcmRzIG9uY2UuICBUaGlzIGlzIGEgZGlmZmVyZW5jZSB3aXRob3V0IGEKK2Rpc3RpbmN0aW9uLiAgWW91IGNhbiBhY3R1YWxseSBwdXQgaW4gdHdvIGNvdW50cywgaG93ZXZlci4gIEZvciBleGFtcGxlLAorIjNkMnciIGRlbGV0ZXMgdHdvIHdvcmRzLCByZXBlYXRlZCB0aHJlZSB0aW1lcywgZm9yIGEgdG90YWwgb2Ygc2l4IHdvcmRzLgorCisKK1JFUExBQ0lORyBXSVRIIE9ORSBDSEFSQUNURVIKKworVGhlICJyIiBjb21tYW5kIGlzIG5vdCBhbiBvcGVyYXRvci4gIEl0IHdhaXRzIGZvciB5b3UgdG8gdHlwZSBhIGNoYXJhY3RlciwgYW5kCit3aWxsIHJlcGxhY2UgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIHdpdGggaXQuICBZb3UgY291bGQgZG8gdGhlIHNhbWUKK3dpdGggImNsIiBvciB3aXRoIHRoZSAicyIgY29tbWFuZCwgYnV0IHdpdGggInIiIHlvdSBkb24ndCBoYXZlIHRvIHByZXNzIDxFc2M+CisKKwl0aGVyZSBpcyBzb21lcmhpbmcgZ3JvbmcgaGVyZSB+CisJclQJICAgICBydCAgICBydworCisJVGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIGhlcmUgfgorCitVc2luZyBhIGNvdW50IHdpdGggInIiIGNhdXNlcyB0aGF0IG1hbnkgY2hhcmFjdGVycyB0byBiZSByZXBsYWNlZCB3aXRoIHRoZQorc2FtZSBjaGFyYWN0ZXIuICBFeGFtcGxlOgorCisJVGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIGhlcmUgfgorCQkJICAgNXJ4CisKKwlUaGVyZSBpcyBzb21ldGhpbmcgeHh4eHggaGVyZSB+CisKK1RvIHJlcGxhY2UgYSBjaGFyYWN0ZXIgd2l0aCBhIGxpbmUgYnJlYWsgdXNlICJyPEVudGVyPiIuICBUaGlzIGRlbGV0ZXMgb25lCitjaGFyYWN0ZXIgYW5kIGluc2VydHMgYSBsaW5lIGJyZWFrLiAgVXNpbmcgYSBjb3VudCBoZXJlIG9ubHkgYXBwbGllcyB0byB0aGUKK251bWJlciBvZiBjaGFyYWN0ZXJzIGRlbGV0ZWQ6ICI0cjxFbnRlcj4iIHJlcGxhY2VzIGZvdXIgY2hhcmFjdGVycyB3aXRoIG9uZQorbGluZSBicmVhay4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuMyoJUmVwZWF0aW5nIGEgY2hhbmdlCisKK1RoZSAiLiIgY29tbWFuZCBpcyBvbmUgb2YgdGhlIG1vc3Qgc2ltcGxlIHlldCBwb3dlcmZ1bCBjb21tYW5kcyBpbiBWaW0uICBJdAorcmVwZWF0cyB0aGUgbGFzdCBjaGFuZ2UuICBGb3IgaW5zdGFuY2UsIHN1cHBvc2UgeW91IGFyZSBlZGl0aW5nIGFuIEhUTUwgZmlsZQorYW5kIHdhbnQgdG8gZGVsZXRlIGFsbCB0aGUgPEI+IHRhZ3MuICBZb3UgcG9zaXRpb24gdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgPAorYW5kIGRlbGV0ZSB0aGUgPEI+IHdpdGggdGhlIGNvbW1hbmQgImRmPiIuICBZb3UgdGhlbiBnbyB0byB0aGUgPCBvZiB0aGUgbmV4dAorPC9CPiBhbmQga2lsbCBpdCB1c2luZyB0aGUgIi4iIGNvbW1hbmQuICBUaGUgIi4iIGNvbW1hbmQgZXhlY3V0ZXMgdGhlIGxhc3QKK2NoYW5nZSBjb21tYW5kIChpbiB0aGlzIGNhc2UsICJkZj4iKS4gIFRvIGRlbGV0ZSBhbm90aGVyIHRhZywgcG9zaXRpb24gdGhlCitjdXJzb3Igb24gdGhlIDwgYW5kIHVzZSB0aGUgIi4iIGNvbW1hbmQuCisKKwkJCSAgICAgIFRvIDxCPmdlbmVyYXRlPC9CPiBhIHRhYmxlIG9mIDxCPmNvbnRlbnRzIH4KKwlmPCAgIGZpbmQgZmlyc3QgPCAgICAgLS0tPgorCWRmPiAgZGVsZXRlIHRvID4JIC0tPgorCWY8ICAgZmluZCBuZXh0IDwJICAgLS0tLS0tLS0tPgorCS4gICAgcmVwZWF0IGRmPgkJCSAgICAtLS0+CisJZjwgICBmaW5kIG5leHQgPAkJICAgICAgIC0tLS0tLS0tLS0tLS0+CisJLiAgICByZXBlYXQgZGY+CQkJCQkgICAgLS0+CisKK1RoZSAiLiIgY29tbWFuZCB3b3JrcyBmb3IgYWxsIGNoYW5nZXMgeW91IG1ha2UsIGV4Y2VwdCBmb3IgdGhlICJ1IiAodW5kbyksCitDVFJMLVIgKHJlZG8pIGFuZCBjb21tYW5kcyB0aGF0IHN0YXJ0IHdpdGggYSBjb2xvbiAoOikuCisKK0Fub3RoZXIgZXhhbXBsZTogWW91IHdhbnQgdG8gY2hhbmdlIHRoZSB3b3JkICJmb3VyIiB0byAiZml2ZSIuICBJdCBhcHBlYXJzCitzZXZlcmFsIHRpbWVzIGluIHlvdXIgdGV4dC4gIFlvdSBjYW4gZG8gdGhpcyBxdWlja2x5IHdpdGggdGhpcyBzZXF1ZW5jZSBvZgorY29tbWFuZHM6CisKKwkvZm91cjxFbnRlcj4JZmluZCB0aGUgZmlyc3Qgc3RyaW5nICJmb3VyIgorCWN3Zml2ZTxFc2M+CWNoYW5nZSB0aGUgd29yZCB0byAiZml2ZSIKKwluCQlmaW5kIHRoZSBuZXh0ICJmb3VyIgorCS4JCXJlcGVhdCB0aGUgY2hhbmdlIHRvICJmaXZlJworCW4JCWZpbmQgdGhlIG5leHQgImZvdXIiCisJLgkJcmVwZWF0IHRoZSBjaGFuZ2UKKwkJCWV0Yy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuNCoJVmlzdWFsIG1vZGUKKworVG8gZGVsZXRlIHNpbXBsZSBpdGVtcyB0aGUgb3BlcmF0b3ItbW90aW9uIGNoYW5nZXMgd29yayBxdWl0ZSB3ZWxsLiAgQnV0IG9mdGVuCitpdCdzIG5vdCBzbyBlYXN5IHRvIGRlY2lkZSB3aGljaCBjb21tYW5kIHdpbGwgbW92ZSBvdmVyIHRoZSB0ZXh0IHlvdSB3YW50IHRvCitjaGFuZ2UuICBUaGVuIHlvdSBjYW4gdXNlIFZpc3VhbCBtb2RlLgorCitZb3Ugc3RhcnQgVmlzdWFsIG1vZGUgYnkgcHJlc3NpbmcgInYiLiAgWW91IG1vdmUgdGhlIGN1cnNvciBvdmVyIHRoZSB0ZXh0IHlvdQord2FudCB0byB3b3JrIG9uLiAgV2hpbGUgeW91IGRvIHRoaXMsIHRoZSB0ZXh0IGlzIGhpZ2hsaWdodGVkLiAgRmluYWxseSB0eXBlCit0aGUgb3BlcmF0b3IgY29tbWFuZC4KKyAgIEZvciBleGFtcGxlLCB0byBkZWxldGUgZnJvbSBoYWxmd2F5IG9uZSB3b3JkIHRvIGhhbGZ3YXkgYW5vdGhlciB3b3JkOgorCisJCVRoaXMgaXMgYW4gZXhhbWluYXRpb24gc2FtcGxlIG9mIHZpc3VhbCBtb2RlIH4KKwkJCSAgICAgICAtLS0tLS0tLS0tPgorCQkJCSB2ZWxsbGxkCisKKwkJVGhpcyBpcyBhbiBleGFtcGxlIG9mIHZpc3VhbCBtb2RlIH4KKworV2hlbiBkb2luZyB0aGlzIHlvdSBkb24ndCByZWFsbHkgaGF2ZSB0byBjb3VudCBob3cgbWFueSB0aW1lcyB5b3UgaGF2ZSB0bworcHJlc3MgImwiIHRvIGVuZCB1cCBpbiB0aGUgcmlnaHQgcG9zaXRpb24uICBZb3UgY2FuIGltbWVkaWF0ZWx5IHNlZSB3aGF0IHRleHQKK3dpbGwgYmUgZGVsZXRlZCB3aGVuIHlvdSBwcmVzcyAiZCIuCisKK0lmIGF0IGFueSB0aW1lIHlvdSBkZWNpZGUgeW91IGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgaGlnaGxpZ2h0ZWQKK3RleHQsIGp1c3QgcHJlc3MgPEVzYz4gYW5kIFZpc3VhbCBtb2RlIHdpbGwgc3RvcCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLgorCisKK1NFTEVDVElORyBMSU5FUworCitJZiB5b3Ugd2FudCB0byB3b3JrIG9uIHdob2xlIGxpbmVzLCB1c2UgIlYiIHRvIHN0YXJ0IFZpc3VhbCBtb2RlLiAgWW91IHdpbGwKK3NlZSByaWdodCBhd2F5IHRoYXQgdGhlIHdob2xlIGxpbmUgaXMgaGlnaGxpZ2h0ZWQsIHdpdGhvdXQgbW92aW5nIGFyb3VuZC4KK1doZW4geW91IG1vdmUgbGVmdCBvciByaWdodCBub3RoaW5nIGNoYW5nZXMuICBXaGVuIHlvdSBtb3ZlIHVwIG9yIGRvd24gdGhlCitzZWxlY3Rpb24gaXMgZXh0ZW5kZWQgd2hvbGUgbGluZXMgYXQgYSB0aW1lLgorICAgRm9yIGV4YW1wbGUsIHNlbGVjdCB0aHJlZSBsaW5lcyB3aXRoICJWamoiOgorCisJCQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCQkgIHwgdGV4dCBtb3JlIHRleHQJICAgfAorCQkgICAgICAgPj4gfCBtb3JlIHRleHQgbW9yZSB0ZXh0ICAgIHwgfAorCXNlbGVjdGVkIGxpbmVzID4+IHwgdGV4dCB0ZXh0IHRleHQJICAgfCB8IFZqagorCQkgICAgICAgPj4gfCB0ZXh0IG1vcmUJCSAgIHwgVgorCQkJICB8IG1vcmUgdGV4dCBtb3JlCSAgIHwKKwkJCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitTRUxFQ1RJTkcgQkxPQ0tTCisKK0lmIHlvdSB3YW50IHRvIHdvcmsgb24gYSByZWN0YW5ndWxhciBibG9jayBvZiBjaGFyYWN0ZXJzLCB1c2UgQ1RSTC1WIHRvIHN0YXJ0CitWaXN1YWwgbW9kZS4gIFRoaXMgaXMgdmVyeSB1c2VmdWwgd2hlbiB3b3JraW5nIG9uIHRhYmxlcy4KKworCQluYW1lCQlRMQlRMglRMworCQlwaWVycmUJCTEyMwk0NTUJMjM0CisJCWpvaG4JCTAJOTAJMzkKKwkJc3RldmUJCTM5Mgk2MwkzMzQKKworVG8gZGVsZXRlIHRoZSBtaWRkbGUgIlEyIiBjb2x1bW4sIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgIlEiIG9mICJRMiIuICBQcmVzcworQ1RSTC1WIHRvIHN0YXJ0IGJsb2Nrd2lzZSBWaXN1YWwgbW9kZS4gIE5vdyBtb3ZlIHRoZSBjdXJzb3IgdGhyZWUgbGluZXMgZG93bgord2l0aCAiM2oiIGFuZCB0byB0aGUgbmV4dCB3b3JkIHdpdGggInciLiAgWW91IGNhbiBzZWUgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgordGhlIGxhc3QgY29sdW1uIGlzIGluY2x1ZGVkLiAgVG8gZXhjbHVkZSBpdCwgdXNlICJoIi4gIE5vdyBwcmVzcyAiZCIgYW5kIHRoZQorbWlkZGxlIGNvbHVtbiBpcyBnb25lLgorCisKK0dPSU5HIFRPIFRIRSBPVEhFUiBTSURFCisKK0lmIHlvdSBoYXZlIHNlbGVjdGVkIHNvbWUgdGV4dCBpbiBWaXN1YWwgbW9kZSwgYW5kIGRpc2NvdmVyIHRoYXQgeW91IG5lZWQgdG8KK2NoYW5nZSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHVzZSB0aGUgIm8iIGNvbW1hbmQgKEhpbnQ6IG8gZm9yIG90aGVyCitlbmQpLiAgVGhlIGN1cnNvciB3aWxsIGdvIHRvIHRoZSBvdGhlciBlbmQsIGFuZCB5b3UgY2FuIG1vdmUgdGhlIGN1cnNvciB0bworY2hhbmdlIHdoZXJlIHRoZSBzZWxlY3Rpb24gc3RhcnRzLiAgUHJlc3NpbmcgIm8iIGFnYWluIGJyaW5ncyB5b3UgYmFjayB0byB0aGUKK290aGVyIGVuZC4KKworV2hlbiB1c2luZyBibG9ja3dpc2Ugc2VsZWN0aW9uLCB5b3UgaGF2ZSBmb3VyIGNvcm5lcnMuICAibyIgb25seSB0YWtlcyB5b3UgdG8KK29uZSBvZiB0aGUgb3RoZXIgY29ybmVycywgZGlhZ29uYWxseS4gIFVzZSAiTyIgdG8gbW92ZSB0byB0aGUgb3RoZXIgY29ybmVyIGluCit0aGUgc2FtZSBsaW5lLgorCitOb3RlIHRoYXQgIm8iIGFuZCAiTyIgaW4gVmlzdWFsIG1vZGUgd29yayB2ZXJ5IGRpZmZlcmVudCBmcm9tIE5vcm1hbCBtb2RlLAord2hlcmUgdGhleSBvcGVuIGEgbmV3IGxpbmUgYmVsb3cgb3IgYWJvdmUgdGhlIGN1cnNvci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuNSoJTW92aW5nIHRleHQKKworV2hlbiB5b3UgZGVsZXRlIHNvbWV0aGluZyB3aXRoIHRoZSAiZCIsICJ4Iiwgb3IgYW5vdGhlciBjb21tYW5kLCB0aGUgdGV4dCBpcworc2F2ZWQuICBZb3UgY2FuIHBhc3RlIGl0IGJhY2sgYnkgdXNpbmcgdGhlIHAgY29tbWFuZC4gKFRoZSBWaW0gbmFtZSBmb3IKK3RoaXMgaXMgcHV0KS4KKyAgIFRha2UgYSBsb29rIGF0IGhvdyB0aGlzIHdvcmtzLiAgRmlyc3QgeW91IHdpbGwgZGVsZXRlIGFuIGVudGlyZSBsaW5lLCBieQorcHV0dGluZyB0aGUgY3Vyc29yIG9uIHRoZSBsaW5lIHlvdSB3YW50IHRvIGRlbGV0ZSBhbmQgdHlwaW5nICJkZCIuICBOb3cgeW91Cittb3ZlIHRoZSBjdXJzb3IgdG8gd2hlcmUgeW91IHdhbnQgdG8gcHV0IHRoZSBsaW5lIGFuZCB1c2UgdGhlICJwIiAocHV0KQorY29tbWFuZC4gIFRoZSBsaW5lIGlzIGluc2VydGVkIG9uIHRoZSBsaW5lIGJlbG93IHRoZSBjdXJzb3IuCisKKwlhIGxpbmUJCWEgbGluZQkgICAgICBhIGxpbmUKKwlsaW5lIDIJICBkZAlsaW5lIDMJICBwICAgbGluZSAzCisJbGluZSAzCQkJICAgICAgbGluZSAyCisKK0JlY2F1c2UgeW91IGRlbGV0ZWQgYW4gZW50aXJlIGxpbmUsIHRoZSAicCIgY29tbWFuZCBwbGFjZWQgdGhlIHRleHQgbGluZSBiZWxvdwordGhlIGN1cnNvci4gIElmIHlvdSBkZWxldGUgcGFydCBvZiBhIGxpbmUgKGEgd29yZCwgZm9yIGluc3RhbmNlKSwgdGhlICJwIgorY29tbWFuZCBwdXRzIGl0IGp1c3QgYWZ0ZXIgdGhlIGN1cnNvci4KKworCVNvbWUgbW9yZSBib3JpbmcgdHJ5IHRleHQgdG8gb3V0IGNvbW1hbmRzLiB+CisJCQkgLS0tLT4KKwkJCSAgZHcKKworCVNvbWUgbW9yZSBib3JpbmcgdGV4dCB0byBvdXQgY29tbWFuZHMuIH4KKwkJCSAtLS0tLS0tPgorCQkJICAgIHdlbHAKKworCVNvbWUgbW9yZSBib3JpbmcgdGV4dCB0byB0cnkgb3V0IGNvbW1hbmRzLiB+CisKKworTU9SRSBPTiBQVVRUSU5HCisKK1RoZSAiUCIgY29tbWFuZCBwdXRzIHRleHQgbGlrZSAicCIsIGJ1dCBiZWZvcmUgdGhlIGN1cnNvci4gIFdoZW4geW91IGRlbGV0ZWQgYQord2hvbGUgbGluZSB3aXRoICJkZCIsICJQIiB3aWxsIHB1dCBpdCBiYWNrIGFib3ZlIHRoZSBjdXJzb3IuICBXaGVuIHlvdSBkZWxldGVkCithIHdvcmQgd2l0aCAiZHciLCAiUCIgd2lsbCBwdXQgaXQgYmFjayBqdXN0IGJlZm9yZSB0aGUgY3Vyc29yLgorCitZb3UgY2FuIHJlcGVhdCBwdXR0aW5nIGFzIG1hbnkgdGltZXMgYXMgeW91IGxpa2UuICBUaGUgc2FtZSB0ZXh0IHdpbGwgYmUgdXNlZC4KKworWW91IGNhbiB1c2UgYSBjb3VudCB3aXRoICJwIiBhbmQgIlAiLiAgVGhlIHRleHQgd2lsbCBiZSByZXBlYXRlZCBhcyBtYW55IHRpbWVzCithcyBzcGVjaWZpZWQgd2l0aCB0aGUgY291bnQuICBUaHVzICJkZCIgYW5kIHRoZW4gIjNwIiBwdXRzIHRocmVlIGNvcGllcyBvZiB0aGUKK3NhbWUgZGVsZXRlZCBsaW5lLgorCisKK1NXQVBQSU5HIFRXTyBDSEFSQUNURVJTCisKK0ZyZXF1ZW50bHkgd2hlbiB5b3UgYXJlIHR5cGluZywgeW91ciBmaW5nZXJzIGdldCBhaGVhZCBvZiB5b3VyIGJyYWluIChvciB0aGUKK290aGVyIHdheSBhcm91bmQ/KS4gIFRoZSByZXN1bHQgaXMgYSB0eXBvIHN1Y2ggYXMgInRlaCIgZm9yICJ0aGUiLiAgVmltCittYWtlcyBpdCBlYXN5IHRvIGNvcnJlY3Qgc3VjaCBwcm9ibGVtcy4gIEp1c3QgcHV0IHRoZSBjdXJzb3Igb24gdGhlIGUgb2YgInRlaCIKK2FuZCBleGVjdXRlIHRoZSBjb21tYW5kICJ4cCIuICBUaGlzIHdvcmtzIGFzIGZvbGxvd3M6ICJ4IiBkZWxldGVzIHRoZQorY2hhcmFjdGVyIGUgYW5kIHBsYWNlcyBpdCBpbiBhIHJlZ2lzdGVyLiAgInAiIHB1dHMgdGhlIHRleHQgYWZ0ZXIgdGhlIGN1cnNvciwKK3doaWNoIGlzIGFmdGVyIHRoZSBoLgorCisJdGVoICAgICB0aCAgICAgdGhlIH4KKwkgeCAgICAgICBwCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA0LjYqCUNvcHlpbmcgdGV4dAorCitUbyBjb3B5IHRleHQgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlciwgeW91IGNvdWxkIGRlbGV0ZSBpdCwgdXNlICJ1IiB0byB1bmRvCit0aGUgZGVsZXRpb24gYW5kIHRoZW4gInAiIHRvIHB1dCBpdCBzb21ld2hlcmUgZWxzZS4gIFRoZXJlIGlzIGFuIGVhc2llciB3YXk6Cit5YW5raW5nLiAgVGhlICJ5IiBvcGVyYXRvciBjb3BpZXMgdGV4dCBpbnRvIGEgcmVnaXN0ZXIuICBUaGVuIGEgInAiIGNvbW1hbmQKK2NhbiBiZSB1c2VkIHRvIHB1dCBpdC4KKyAgIFlhbmtpbmcgaXMganVzdCBhIFZpbSBuYW1lIGZvciBjb3B5aW5nLiAgVGhlICJjIiBsZXR0ZXIgd2FzIGFscmVhZHkgdXNlZAorZm9yIHRoZSBjaGFuZ2Ugb3BlcmF0b3IsIGFuZCAieSIgd2FzIHN0aWxsIGF2YWlsYWJsZS4gIENhbGxpbmcgdGhpcworb3BlcmF0b3IgInlhbmsiIG1hZGUgaXQgZWFzaWVyIHRvIHJlbWVtYmVyIHRvIHVzZSB0aGUgInkiIGtleS4KKworU2luY2UgInkiIGlzIGFuIG9wZXJhdG9yLCB5b3UgdXNlICJ5dyIgdG8geWFuayBhIHdvcmQuICBBIGNvdW50IGlzIHBvc3NpYmxlIGFzCit1c3VhbC4gIFRvIHlhbmsgdHdvIHdvcmRzIHVzZSAieTJ3Ii4gIEV4YW1wbGU6CisKKwlsZXQgc3FyID0gTG9uZ1ZhcmlhYmxlICogfgorCQkgLS0tLS0tLS0tLS0tLS0+CisJCSAgICAgICB5MncKKworCWxldCBzcXIgPSBMb25nVmFyaWFibGUgKiB+CisJCQkgICAgICAgcAorCisJbGV0IHNxciA9IExvbmdWYXJpYWJsZSAqIExvbmdWYXJpYWJsZSB+CisKK05vdGljZSB0aGF0ICJ5dyIgaW5jbHVkZXMgdGhlIHdoaXRlIHNwYWNlIGFmdGVyIGEgd29yZC4gIElmIHlvdSBkb24ndCB3YW50Cit0aGlzLCB1c2UgInllIi4KKworVGhlICJ5eSIgY29tbWFuZCB5YW5rcyBhIHdob2xlIGxpbmUsIGp1c3QgbGlrZSAiZGQiIGRlbGV0ZXMgYSB3aG9sZSBsaW5lLgorVW5leHBlY3RlZGx5LCB3aGlsZSAiRCIgZGVsZXRlcyBmcm9tIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSwgIlkiCit3b3JrcyBsaWtlICJ5eSIsIGl0IHlhbmtzIHRoZSB3aG9sZSBsaW5lLiAgV2F0Y2ggb3V0IGZvciB0aGlzIGluY29uc2lzdGVuY3khCitVc2UgInkkIiB0byB5YW5rIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKKwlhIHRleHQgbGluZSAgIHl5CWEgdGV4dCBsaW5lCSAgICAgICBhIHRleHQgbGluZQorCWxpbmUgMgkJCWxpbmUgMgkJcCAgICAgIGxpbmUgMgorCWxhc3QgbGluZQkJbGFzdCBsaW5lCSAgICAgICBhIHRleHQgbGluZQorCQkJCQkJICAgICAgIGxhc3QgbGluZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNC43KglVc2luZyB0aGUgY2xpcGJvYXJkCisKK0lmIHlvdSBhcmUgdXNpbmcgdGhlIEdVSSB2ZXJzaW9uIG9mIFZpbSAoZ3ZpbSksIHlvdSBjYW4gZmluZCB0aGUgIkNvcHkiIGl0ZW0KK2luIHRoZSAiRWRpdCIgbWVudS4gIEZpcnN0IHNlbGVjdCBzb21lIHRleHQgd2l0aCBWaXN1YWwgbW9kZSwgdGhlbiB1c2UgdGhlCitFZGl0L0NvcHkgbWVudS4gIFRoZSBzZWxlY3RlZCB0ZXh0IGlzIG5vdyBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZC4gIFlvdSBjYW4KK3Bhc3RlIHRoZSB0ZXh0IGluIG90aGVyIHByb2dyYW1zLiAgSW4gVmltIGl0c2VsZiB0b28uCisKK0lmIHlvdSBoYXZlIGNvcGllZCB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQgaW4gYW5vdGhlciBhcHBsaWNhdGlvbiwgeW91IGNhbiBwYXN0ZQoraXQgaW4gVmltIHdpdGggdGhlIEVkaXQvUGFzdGUgbWVudS4gIFRoaXMgd29ya3MgaW4gTm9ybWFsIG1vZGUgYW5kIEluc2VydAorbW9kZS4gIEluIFZpc3VhbCBtb2RlIHRoZSBzZWxlY3RlZCB0ZXh0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHBhc3RlZCB0ZXh0LgorCitUaGUgIkN1dCIgbWVudSBpdGVtIGRlbGV0ZXMgdGhlIHRleHQgYmVmb3JlIGl0J3MgcHV0IG9uIHRoZSBjbGlwYm9hcmQuICBUaGUKKyJDb3B5IiwgIkN1dCIgYW5kICJQYXN0ZSIgaXRlbXMgYXJlIGFsc28gYXZhaWxhYmxlIGluIHRoZSBwb3B1cCBtZW51IChvbmx5Cit3aGVuIHRoZXJlIGlzIGEgcG9wdXAgbWVudSwgb2YgY291cnNlKS4gIElmIHlvdXIgVmltIGhhcyBhIHRvb2xiYXIsIHlvdSBjYW4KK2Fsc28gZmluZCB0aGVzZSBpdGVtcyB0aGVyZS4KKworSWYgeW91IGFyZSBub3QgdXNpbmcgdGhlIEdVSSwgb3IgaWYgeW91IGRvbid0IGxpa2UgdXNpbmcgYSBtZW51LCB5b3UgaGF2ZSB0bwordXNlIGFub3RoZXIgd2F5LiAgWW91IHVzZSB0aGUgbm9ybWFsICJ5IiAoeWFuaykgYW5kICJwIiAocHV0KSBjb21tYW5kcywgYnV0CitwcmVwZW5kICIqIChkb3VibGUtcXVvdGUgc3RhcikgYmVmb3JlIGl0LiAgVG8gY29weSBhIGxpbmUgdG8gdGhlIGNsaXBib2FyZDogPgorCisJIip5eQorCitUbyBwdXQgdGV4dCBmcm9tIHRoZSBjbGlwYm9hcmQgYmFjayBpbnRvIHRoZSB0ZXh0OiA+CisKKwkiKnAKKworVGhpcyBvbmx5IHdvcmtzIG9uIHZlcnNpb25zIG9mIFZpbSB0aGF0IGluY2x1ZGUgY2xpcGJvYXJkIHN1cHBvcnQuICBNb3JlIGFib3V0Cit0aGUgY2xpcGJvYXJkIGluIHNlY3Rpb24gfDA5LjN8IGFuZCBoZXJlOiB8Y2xpcGJvYXJkfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDQuOCoJVGV4dCBvYmplY3RzCisKK0lmIHRoZSBjdXJzb3IgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgYW5kIHdhbnQgdG8gZGVsZXRlIHRoYXQgd29yZCwgeW91CituZWVkIHRvIG1vdmUgYmFjayB0byBpdHMgc3RhcnQgYmVmb3JlIHlvdSBjYW4gZG8gImR3Ii4gIFRoZXJlIGlzIGEgc2ltcGxlciB3YXkKK3RvIGRvIHRoaXM6ICJkYXciLgorCisJdGhpcyBpcyBzb21lIGV4YW1wbGUgdGV4dC4gfgorCQkgICAgICAgZGF3CisKKwl0aGlzIGlzIHNvbWUgdGV4dC4gfgorCitUaGUgImQiIG9mICJkYXciIGlzIHRoZSBkZWxldGUgb3BlcmF0b3IuICAiYXciIGlzIGEgdGV4dCBvYmplY3QuICBIaW50OiAiYXciCitzdGFuZHMgZm9yICJBIFdvcmQiLiAgVGh1cyAiZGF3IiBpcyAiRGVsZXRlIEEgV29yZCIuICBUbyBiZSBwcmVjaXNlLCB0aGUgd2hpdGUKK3NwYWNlIGFmdGVyIHRoZSB3b3JkIGlzIGFsc28gZGVsZXRlZCAodGhlIHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgd29yZCBhdCB0aGUKK2VuZCBvZiB0aGUgbGluZSkuCisKK1VzaW5nIHRleHQgb2JqZWN0cyBpcyB0aGUgdGhpcmQgd2F5IHRvIG1ha2UgY2hhbmdlcyBpbiBWaW0uICBXZSBhbHJlYWR5IGhhZAorb3BlcmF0b3ItbW90aW9uIGFuZCBWaXN1YWwgbW9kZS4gIE5vdyB3ZSBhZGQgb3BlcmF0b3ItdGV4dCBvYmplY3QuCisgICBJdCBpcyB2ZXJ5IHNpbWlsYXIgdG8gb3BlcmF0b3ItbW90aW9uLCBidXQgaW5zdGVhZCBvZiBvcGVyYXRpbmcgb24gdGhlIHRleHQKK2JldHdlZW4gdGhlIGN1cnNvciBwb3NpdGlvbiBiZWZvcmUgYW5kIGFmdGVyIGEgbW92ZW1lbnQgY29tbWFuZCwgdGhlIHRleHQKK29iamVjdCBpcyB1c2VkIGFzIGEgd2hvbGUuICBJdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBpbiB0aGUgb2JqZWN0IHRoZSBjdXJzb3IKK3dhcy4KKworVG8gY2hhbmdlIGEgd2hvbGUgc2VudGVuY2UgdXNlICJjaXMiLiAgVGFrZSB0aGlzIHRleHQ6CisKKwlIZWxsbyB0aGVyZS4gIFRoaXMgfgorCWlzIGFuIGV4YW1wbGUuICBKdXN0IH4KKwlzb21lIHRleHQuIH4KKworTW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY29uZCBsaW5lLCBvbiAiaXMgYW4iLiAgTm93IHVzZSAiY2lzIjoKKworCUhlbGxvIHRoZXJlLiAgICBKdXN0IH4KKwlzb21lIHRleHQuIH4KKworVGhlIGN1cnNvciBpcyBpbiBiZXR3ZWVuIHRoZSBibGFua3MgaW4gdGhlIGZpcnN0IGxpbmUuICBOb3cgeW91IHR5cGUgdGhlIG5ldworc2VudGVuY2UgIkFub3RoZXIgbGluZS4iOgorCisJSGVsbG8gdGhlcmUuICBBbm90aGVyIGxpbmUuICBKdXN0IH4KKwlzb21lIHRleHQuIH4KKworImNpcyIgY29uc2lzdHMgb2YgdGhlICJjIiAoY2hhbmdlKSBvcGVyYXRvciBhbmQgdGhlICJpcyIgdGV4dCBvYmplY3QuICBUaGlzCitzdGFuZHMgZm9yICJJbm5lciBTZW50ZW5jZSIuICBUaGVyZSBpcyBhbHNvIHRoZSAiYXMiIChhIHNlbnRlbmNlKSBvYmplY3QuICBUaGUKK2RpZmZlcmVuY2UgaXMgdGhhdCAiYXMiIGluY2x1ZGVzIHRoZSB3aGl0ZSBzcGFjZSBhZnRlciB0aGUgc2VudGVuY2UgYW5kICJpcyIKK2RvZXNuJ3QuICBJZiB5b3Ugd291bGQgZGVsZXRlIGEgc2VudGVuY2UsIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgd2hpdGUgc3BhY2UKK2F0IHRoZSBzYW1lIHRpbWUsIHRodXMgdXNlICJkYXMiLiAgSWYgeW91IHdhbnQgdG8gdHlwZSBuZXcgdGV4dCB0aGUgd2hpdGUKK3NwYWNlIGNhbiByZW1haW4sIHRodXMgeW91IHVzZSAiY2lzIi4KKworWW91IGNhbiBhbHNvIHVzZSB0ZXh0IG9iamVjdHMgaW4gVmlzdWFsIG1vZGUuICBJdCB3aWxsIGluY2x1ZGUgdGhlIHRleHQgb2JqZWN0CitpbiB0aGUgVmlzdWFsIHNlbGVjdGlvbi4gIFZpc3VhbCBtb2RlIGNvbnRpbnVlcywgdGh1cyB5b3UgY2FuIGRvIHRoaXMgc2V2ZXJhbAordGltZXMuICBGb3IgZXhhbXBsZSwgc3RhcnQgVmlzdWFsIG1vZGUgd2l0aCAidiIgYW5kIHNlbGVjdCBhIHNlbnRlbmNlIHdpdGgKKyJhcyIuICBOb3cgeW91IGNhbiByZXBlYXQgImFzIiB0byBpbmNsdWRlIG1vcmUgc2VudGVuY2VzLiAgRmluYWxseSB5b3UgdXNlIGFuCitvcGVyYXRvciB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgc2VsZWN0ZWQgc2VudGVuY2VzLgorCitZb3UgY2FuIGZpbmQgYSBsb25nIGxpc3Qgb2YgdGV4dCBvYmplY3RzIGhlcmU6IHx0ZXh0LW9iamVjdHN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNC45KglSZXBsYWNlIG1vZGUKKworVGhlICJSIiBjb21tYW5kIGNhdXNlcyBWaW0gdG8gZW50ZXIgcmVwbGFjZSBtb2RlLiAgSW4gdGhpcyBtb2RlLCBlYWNoCitjaGFyYWN0ZXIgeW91IHR5cGUgcmVwbGFjZXMgdGhlIG9uZSB1bmRlciB0aGUgY3Vyc29yLiAgVGhpcyBjb250aW51ZXMgdW50aWwKK3lvdSB0eXBlIDxFc2M+LgorICAgSW4gdGhpcyBleGFtcGxlIHlvdSBzdGFydCBSZXBsYWNlIG1vZGUgb24gdGhlIGZpcnN0ICJ0IiBvZiAidGV4dCI6CisKKwlUaGlzIGlzIHRleHQuIH4KKwkJUmludGVyZXN0aW5nLjxFc2M+CisKKwlUaGlzIGlzIGludGVyZXN0aW5nLiB+CisKK1lvdSBtYXkgaGF2ZSBub3RpY2VkIHRoYXQgdGhpcyBjb21tYW5kIHJlcGxhY2VkIDUgY2hhcmFjdGVycyBpbiB0aGUgbGluZSB3aXRoCit0d2VsdmUgb3RoZXJzLiBUaGUgIlIiIGNvbW1hbmQgYXV0b21hdGljYWxseSBleHRlbmRzIHRoZSBsaW5lIGlmIGl0IHJ1bnMgb3V0CitvZiBjaGFyYWN0ZXJzIHRvIHJlcGxhY2UuICBJdCB3aWxsIG5vdCBjb250aW51ZSBvbiB0aGUgbmV4dCBsaW5lLgorCitZb3UgY2FuIHN3aXRjaCBiZXR3ZWVuIEluc2VydCBtb2RlIGFuZCBSZXBsYWNlIG1vZGUgd2l0aCB0aGUgPEluc2VydD4ga2V5LgorCitXaGVuIHlvdSB1c2UgPEJTPiAoYmFja3NwYWNlKSB0byBtYWtlIGNvcnJlY3Rpb24sIHlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZQorb2xkIHRleHQgaXMgcHV0IGJhY2suICBUaHVzIGl0IHdvcmtzIGxpa2UgYW4gdW5kbyBjb21tYW5kIGZvciB0aGUgbGFzdCB0eXBlZAorY2hhcmFjdGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNC4xMCoJQ29uY2x1c2lvbgorCitUaGUgb3BlcmF0b3JzLCBtb3ZlbWVudCBjb21tYW5kcyBhbmQgdGV4dCBvYmplY3RzIGdpdmUgeW91IHRoZSBwb3NzaWJpbGl0eSB0bworbWFrZSBsb3RzIG9mIGNvbWJpbmF0aW9ucy4gIE5vdyB0aGF0IHlvdSBrbm93IGhvdyBpdCB3b3JrcywgeW91IGNhbiB1c2UgTgorb3BlcmF0b3JzIHdpdGggTSBtb3ZlbWVudCBjb21tYW5kcyB0byBtYWtlIE4gKiBNIGNvbW1hbmRzIQorCitZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIG9wZXJhdG9ycyBoZXJlOiB8b3BlcmF0b3J8CisKK0ZvciBleGFtcGxlLCB0aGVyZSBhcmUgbWFueSBvdGhlciB3YXlzIHRvIGRlbGV0ZSBwaWVjZXMgb2YgdGV4dC4gIEhlcmUgYXJlIGEKK2ZldyBvZnRlbiB1c2VkIG9uZXM6CisKK3gJZGVsZXRlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yIChzaG9ydCBmb3IgImRsIikKK1gJZGVsZXRlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvciAoc2hvcnQgZm9yICJkaCIpCitECWRlbGV0ZSBmcm9tIGN1cnNvciB0byBlbmQgb2YgbGluZSAoc2hvcnQgZm9yICJkJCIpCitkdwlkZWxldGUgZnJvbSBjdXJzb3IgdG8gbmV4dCBzdGFydCBvZiB3b3JkCitkYglkZWxldGUgZnJvbSBjdXJzb3IgdG8gcHJldmlvdXMgc3RhcnQgb2Ygd29yZAorZGl3CWRlbGV0ZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IgKGV4Y2x1ZGluZyB3aGl0ZSBzcGFjZSkKK2RhdwlkZWxldGUgd29yZCB1bmRlciB0aGUgY3Vyc29yIChpbmNsdWRpbmcgd2hpdGUgc3BhY2UpCitkRwlkZWxldGUgdW50aWwgdGhlIGVuZCBvZiB0aGUgZmlsZQorZGdnCWRlbGV0ZSB1bnRpbCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKKworSWYgeW91IHVzZSAiYyIgaW5zdGVhZCBvZiAiZCIgdGhleSBiZWNvbWUgY2hhbmdlIGNvbW1hbmRzLiAgQW5kIHdpdGggInkiIHlvdQoreWFuayB0aGUgdGV4dC4gIEFuZCBzbyBmb3J0aC4KKworCitUaGVyZSBhcmUgYSBmZXcgb2Z0ZW4gdXNlZCBjb21tYW5kcyB0byBtYWtlIGNoYW5nZXMgdGhhdCBkaWRuJ3QgZml0IHNvbWV3aGVyZQorZWxzZToKKworCX4JY2hhbmdlIGNhc2Ugb2YgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLCBhbmQgbW92ZSB0aGUKKwkJY3Vyc29yIHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4gIFRoaXMgaXMgbm90IGFuIG9wZXJhdG9yICh1bmxlc3MKKwkJJ3RpbGRlb3AnIGlzIHNldCksIHRodXMgeW91IGNhbid0IHVzZSBpdCB3aXRoIGEgbW90aW9uCisJCWNvbW1hbmQuICBJdCBkb2VzIHdvcmtzIGluIFZpc3VhbCBtb2RlIGFuZCBjaGFuZ2VzIGNhc2UgZm9yCisJCWFsbCB0aGUgc2VsZWN0ZWQgdGV4dCB0aGVuLgorCisJSQlTdGFydCBJbnNlcnQgbW9kZSBhZnRlciBtb3ZpbmcgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QKKwkJbm9uLWJsYW5rIGluIHRoZSBsaW5lLgorCisJQQlTdGFydCBJbnNlcnQgbW9kZSBhZnRlciBtb3ZpbmcgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZQorCQlsaW5lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzA1LnR4dHwgIFNldCB5b3VyIHNldHRpbmdzCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzA1LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5ZWJhNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8wNS50eHQKQEAgLTAsMCArMSw2MTYgQEAKKyp1c3JfMDUudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXIgMTIKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgIFNldCB5b3VyIHNldHRpbmdzCisKKworVmltIGNhbiBiZSB0dW5lZCB0byB3b3JrIGxpa2UgeW91IHdhbnQgaXQgdG8uICBUaGlzIGNoYXB0ZXIgc2hvd3MgeW91IGhvdyB0bworbWFrZSBWaW0gc3RhcnQgd2l0aCBvcHRpb25zIHNldCB0byBkaWZmZXJlbnQgdmFsdWVzLiAgQWRkIHBsdWdpbnMgdG8gZXh0ZW5kCitWaW1zIGNhcGFiaWxpdGllcy4gIE9yIGRlZmluZSB5b3VyIG93biBtYWNyb3MuCisKK3wwNS4xfAlUaGUgdmltcmMgZmlsZQorfDA1LjJ8CVRoZSBleGFtcGxlIHZpbXJjIGZpbGUgZXhwbGFpbmVkCit8MDUuM3wJU2ltcGxlIG1hcHBpbmdzCit8MDUuNHwJQWRkaW5nIGEgcGx1Z2luCit8MDUuNXwJQWRkaW5nIGEgaGVscCBmaWxlCit8MDUuNnwJVGhlIG9wdGlvbiB3aW5kb3cKK3wwNS43fAlPZnRlbiB1c2VkIG9wdGlvbnMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMDYudHh0fCAgVXNpbmcgc3ludGF4IGhpZ2hsaWdodGluZworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMDQudHh0fCAgTWFraW5nIHNtYWxsIGNoYW5nZXMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA1LjEqCVRoZSB2aW1yYyBmaWxlCQkJCQkqdmltcmMtaW50cm8qCisKK1lvdSBwcm9iYWJseSBnb3QgdGlyZWQgb2YgdHlwaW5nIGNvbW1hbmRzIHRoYXQgeW91IHVzZSB2ZXJ5IG9mdGVuLiAgVG8gc3RhcnQKK3dpdGggYWxsIHlvdXIgZmF2b3JpdGUgb3B0aW9uIHNldHRpbmdzIGFuZCBtYXBwaW5ncywgeW91IHdyaXRlIHRoZW0gaW4gd2hhdCBpcworY2FsbGVkIHRoZSB2aW1yYyBmaWxlLiAgVmltIHJlYWRzIHRoaXMgZmlsZSB3aGVuIGl0IHN0YXJ0cyB1cC4KKworSWYgeW91IGhhdmUgdHJvdWJsZSBmaW5kaW5nIHlvdXIgdmltcmMgZmlsZSwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOnNjcmlwdG5hbWVzCisKK09uZSBvZiB0aGUgZmlyc3QgZmlsZXMgaW4gdGhlIGxpc3Qgc2hvdWxkIGJlIGNhbGxlZCAiLnZpbXJjIiBvciAiX3ZpbXJjIiBhbmQKK2lzIGxvY2F0ZWQgaW4geW91ciBob21lIGRpcmVjdG9yeS4KKyAgIElmIHlvdSBkb24ndCBoYXZlIGEgdmltcmMgZmlsZSB5ZXQsIHNlZSB8dmltcmN8IHRvIGZpbmQgb3V0IHdoZXJlIHlvdSBjYW4KK2NyZWF0ZSBhIHZpbXJjIGZpbGUuICBBbHNvLCB0aGUgIjp2ZXJzaW9uIiBjb21tYW5kIG1lbnRpb25zIHRoZSBuYW1lIG9mIHRoZQorInVzZXIgdmltcmMgZmlsZSIgVmltIGxvb2tzIGZvci4KKworRm9yIFVuaXggdGhpcyBmaWxlIGlzIGFsd2F5cyB1c2VkOiA+CisKKwl+Ly52aW1yYworCitGb3IgTVMtRE9TIGFuZCBNUy1XaW5kb3dzIGl0IGlzIG1vc3RseSBvbmUgb2YgdGhlc2U6ID4KKworCSRIT01FL192aW1yYworCSRWSU0vX3ZpbXJjCisKK1RoZSB2aW1yYyBmaWxlIGNhbiBjb250YWluIGFsbCB0aGUgY29tbWFuZHMgdGhhdCB5b3UgdHlwZSBhZnRlciBhIGNvbG9uLiAgVGhlCittb3N0IHNpbXBsZSBvbmVzIGFyZSBmb3Igc2V0dGluZyBvcHRpb25zLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IFZpbSB0bworYWx3YXlzIHN0YXJ0IHdpdGggdGhlICdpbmNzZWFyY2gnIG9wdGlvbiBvbiwgYWRkIHRoaXMgbGluZSB5b3UgeW91ciB2aW1yYworZmlsZTogPgorCisJc2V0IGluY3NlYXJjaAorCitGb3IgdGhpcyBuZXcgbGluZSB0byB0YWtlIGVmZmVjdCB5b3UgbmVlZCB0byBleGl0IFZpbSBhbmQgc3RhcnQgaXQgYWdhaW4uCitMYXRlciB5b3Ugd2lsbCBsZWFybiBob3cgdG8gZG8gdGhpcyB3aXRob3V0IGV4aXRpbmcgVmltLgorCitUaGlzIGNoYXB0ZXIgb25seSBleHBsYWlucyB0aGUgbW9zdCBiYXNpYyBpdGVtcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdwordG8gd3JpdGUgYSBWaW0gc2NyaXB0IGZpbGU6IHx1c3JfNDEudHh0fC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDUuMioJVGhlIGV4YW1wbGUgdmltcmMgZmlsZSBleHBsYWluZWQJCSp2aW1yY19leGFtcGxlLnZpbSoKKworSW4gdGhlIGZpcnN0IGNoYXB0ZXIgd2FzIGV4cGxhaW5lZCBob3cgdGhlIGV4YW1wbGUgdmltcmMgKGluY2x1ZGVkIGluIHRoZQorVmltIGRpc3RyaWJ1dGlvbikgZmlsZSBjYW4gYmUgdXNlZCB0byBtYWtlIFZpbSBzdGFydHVwIGluIG5vdC1jb21wYXRpYmxlIG1vZGUKKyhzZWUgfG5vdC1jb21wYXRpYmxlfCkuICBUaGUgZmlsZSBjYW4gYmUgZm91bmQgaGVyZToKKworCSRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltIH4KKworSW4gdGhpcyBzZWN0aW9uIHdlIHdpbGwgZXhwbGFpbiB0aGUgdmFyaW91cyBjb21tYW5kcyB1c2VkIGluIHRoaXMgZmlsZS4gIFRoaXMKK3dpbGwgZ2l2ZSB5b3UgaGludHMgYWJvdXQgaG93IHRvIHNldCB1cCB5b3VyIG93biBwcmVmZXJlbmNlcy4gIE5vdCBldmVyeXRoaW5nCit3aWxsIGJlIGV4cGxhaW5lZCB0aG91Z2guICBVc2UgdGhlICI6aGVscCIgY29tbWFuZCB0byBmaW5kIG91dCBtb3JlLgorCis+CisJc2V0IG5vY29tcGF0aWJsZQorCitBcyBtZW50aW9uZWQgaW4gdGhlIGZpcnN0IGNoYXB0ZXIsIHRoZXNlIG1hbnVhbHMgZXhwbGFpbiBWaW0gd29ya2luZyBpbiBhbgoraW1wcm92ZWQgd2F5LCB0aHVzIG5vdCBjb21wbGV0ZWx5IFZpIGNvbXBhdGlibGUuICBTZXR0aW5nIHRoZSAnY29tcGF0aWJsZScKK29wdGlvbiBvZmYsIHRodXMgJ25vY29tcGF0aWJsZScgdGFrZXMgY2FyZSBvZiB0aGlzLgorCis+CisJc2V0IGJhY2tzcGFjZT1pbmRlbnQsZW9sLHN0YXJ0CisKK1RoaXMgc3BlY2lmaWVzIHdoZXJlIGluIEluc2VydCBtb2RlIHRoZSA8QlM+IGlzIGFsbG93ZWQgdG8gZGVsZXRlIHRoZQorY2hhcmFjdGVyIGluIGZyb250IG9mIHRoZSBjdXJzb3IuICBUaGUgdGhyZWUgaXRlbXMsIHNlcGFyYXRlZCBieSBjb21tYXMsIHRlbGwKK1ZpbSB0byBkZWxldGUgdGhlIHdoaXRlIHNwYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSwgYSBsaW5lIGJyZWFrIGFuZCB0aGUKK2NoYXJhY3RlciBiZWZvcmUgd2hlcmUgSW5zZXJ0IG1vZGUgc3RhcnRlZC4KKz4KKworCXNldCBhdXRvaW5kZW50CisKK1RoaXMgbWFrZXMgVmltIHVzZSB0aGUgaW5kZW50IG9mIHRoZSBwcmV2aW91cyBsaW5lIGZvciBhIG5ld2x5IGNyZWF0ZWQgbGluZS4KK1RodXMgdGhlcmUgaXMgdGhlIHNhbWUgYW1vdW50IG9mIHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgbmV3IGxpbmUuICBGb3IgZXhhbXBsZQord2hlbiBwcmVzc2luZyA8RW50ZXI+IGluIEluc2VydCBtb2RlLCBhbmQgd2hlbiB1c2luZyB0aGUgIm8iIGNvbW1hbmQgdG8gb3BlbiBhCituZXcgbGluZS4KKz4KKworCWlmIGhhcygidm1zIikKKwkgIHNldCBub2JhY2t1cAorCWVsc2UKKwkgIHNldCBiYWNrdXAKKwllbmRpZgorCitUaGlzIHRlbGxzIFZpbSB0byBrZWVwIGEgYmFja3VwIGNvcHkgb2YgYSBmaWxlIHdoZW4gb3ZlcndyaXRpbmcgaXQuICBCdXQgbm90CitvbiB0aGUgVk1TIHN5c3RlbSwgc2luY2UgaXQga2VlcHMgb2xkIHZlcnNpb25zIG9mIGZpbGVzIGFscmVhZHkuICBUaGUgYmFja3VwCitmaWxlIHdpbGwgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvcmlnaW5hbCBmaWxlIHdpdGggIn4iIGFkZGVkLiAgU2VlIHwwNy40fAorPgorCisJc2V0IGhpc3Rvcnk9NTAKKworS2VlcCA1MCBjb21tYW5kcyBhbmQgNTAgc2VhcmNoIHBhdHRlcm5zIGluIHRoZSBoaXN0b3J5LiAgVXNlIGFub3RoZXIgbnVtYmVyIGlmCit5b3Ugd2FudCB0byByZW1lbWJlciBmZXdlciBvciBtb3JlIGxpbmVzLgorPgorCisJc2V0IHJ1bGVyCisKK0Fsd2F5cyBkaXNwbGF5IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgbG93ZXIgcmlnaHQgY29ybmVyIG9mIHRoZQorVmltIHdpbmRvdy4KKworPgorCXNldCBzaG93Y21kCisKK0Rpc3BsYXkgYW4gaW5jb21wbGV0ZSBjb21tYW5kIGluIHRoZSBsb3dlciByaWdodCBjb3JuZXIgb2YgdGhlIFZpbSB3aW5kb3csCitsZWZ0IG9mIHRoZSBydWxlci4gIEZvciBleGFtcGxlLCB3aGVuIHlvdSB0eXBlICIyZiIsIFZpbSBpcyB3YWl0aW5nIGZvciB5b3UgdG8KK3R5cGUgdGhlIGNoYXJhY3RlciB0byBmaW5kIGFuZCAiMmYiIGlzIGRpc3BsYXllZC4gIFdoZW4geW91IHByZXNzICJ3IiBuZXh0LAordGhlICIyZnciIGNvbW1hbmQgaXMgZXhlY3V0ZWQgYW5kIHRoZSBkaXNwbGF5ZWQgIjJmIiBpcyByZW1vdmVkLgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfHRleHQgaW4gdGhlIFZpbSB3aW5kb3cJCQkJICB8CisJfH4JCQkJCQkgIHwKKwl8fgkJCQkJCSAgfAorCXwtLSBWSVNVQUwgLS0JCQkyZiAgICAgNDMsOCAgIDE3JSB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJIF5eXl5eXl5eXl5eCQkgICAgICBeXl5eXl5eXiBeXl5eXl5eXl5eCisJICAnc2hvd21vZGUnCQkgICAgICdzaG93Y21kJwkncnVsZXInCisKKz4KKwlzZXQgaW5jc2VhcmNoCisKK0Rpc3BsYXkgdGhlIG1hdGNoIGZvciBhIHNlYXJjaCBwYXR0ZXJuIHdoZW4gaGFsZndheSB0eXBpbmcgaXQuCisKKz4KKwltYXAgUSBncQorCitUaGlzIGRlZmluZXMgYSBrZXkgbWFwcGluZy4gIE1vcmUgYWJvdXQgdGhhdCBpbiB0aGUgbmV4dCBzZWN0aW9uLiAgVGhpcworZGVmaW5lcyB0aGUgIlEiIGNvbW1hbmQgdG8gZG8gZm9ybWF0dGluZyB3aXRoIHRoZSAiZ3EiIG9wZXJhdG9yLiAgVGhpcyBpcyBob3cKK2l0IHdvcmtlZCBiZWZvcmUgVmltIDUuMC4gIE90aGVyd2lzZSB0aGUgIlEiIGNvbW1hbmQgc3RhcnRzIEV4IG1vZGUsIGJ1dCB5b3UKK3dpbGwgbm90IG5lZWQgaXQuCisKKz4KKwl2bm9yZW1hcCBwIDxFc2M+OmxldCBjdXJyZW50X3JlZyA9IEAiPENSPmd2czxDLVI+PWN1cnJlbnRfcmVnPENSPjxFc2M+CisKK1RoaXMgaXMgYSBjb21wbGljYXRlZCBtYXBwaW5nLiAgSXQgd2lsbCBub3QgYmUgZXhwbGFpbmVkIGhvdyBpdCB3b3JrcyBoZXJlLgorV2hhdCBpdCBkb2VzIGlzIHRvIG1ha2UgInAiIGluIFZpc3VhbCBtb2RlIG92ZXJ3cml0ZSB0aGUgc2VsZWN0ZWQgdGV4dCB3aXRoCit0aGUgcHJldmlvdXNseSB5YW5rZWQgdGV4dC4gIFlvdSBjYW4gc2VlIHRoYXQgbWFwcGluZ3MgY2FuIGJlIHVzZWQgdG8gZG8gcXVpdGUKK2NvbXBsaWNhdGVkIHRoaW5ncy4gIFN0aWxsLCBpdCBpcyBqdXN0IGEgc2VxdWVuY2Ugb2YgY29tbWFuZHMgdGhhdCBhcmUKK2V4ZWN1dGVkIGxpa2UgeW91IHR5cGVkIHRoZW0uCisKKz4KKwlpZiAmdF9DbyA+IDIgfHwgaGFzKCJndWlfcnVubmluZyIpCisJICBzeW50YXggb24KKwkgIHNldCBobHNlYXJjaAorCWVuZGlmCisKK1RoaXMgc3dpdGNoZXMgb24gc3ludGF4IGhpZ2hsaWdodGluZywgYnV0IG9ubHkgaWYgY29sb3JzIGFyZSBhdmFpbGFibGUuICBBbmQKK3RoZSAnaGxzZWFyY2gnIG9wdGlvbiB0ZWxscyBWaW0gdG8gaGlnaGxpZ2h0IG1hdGNoZXMgd2l0aCB0aGUgbGFzdCB1c2VkIHNlYXJjaAorcGF0dGVybi4gIFRoZSAiaWYiIGNvbW1hbmQgaXMgdmVyeSB1c2VmdWwgdG8gc2V0IG9wdGlvbnMgb25seSB3aGVuIHNvbWUKK2NvbmRpdGlvbiBpcyBtZXQuICBNb3JlIGFib3V0IHRoYXQgaW4gfHVzcl80MS50eHR8LgorCisJCQkJCQkJKnZpbXJjLWZpbGV0eXBlKiAgPgorCWZpbGV0eXBlIHBsdWdpbiBpbmRlbnQgb24KKworVGhpcyBzd2l0Y2hlcyBvbiB0aHJlZSB2ZXJ5IGNsZXZlciBtZWNoYW5pc21zOgorMS4gRmlsZXR5cGUgZGV0ZWN0aW9uLgorICAgV2hlbmV2ZXIgeW91IHN0YXJ0IGVkaXRpbmcgYSBmaWxlLCBWaW0gd2lsbCB0cnkgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YKKyAgIGZpbGUgdGhpcyBpcy4gIFdoZW4geW91IGVkaXQgIm1haW4uYyIsIFZpbSB3aWxsIHNlZSB0aGUgIi5jIiBleHRlbnNpb24gYW5kCisgICByZWNvZ25pemUgdGhpcyBhcyBhICJjIiBmaWxldHlwZS4gIFdoZW4geW91IGVkaXQgYSBmaWxlIHRoYXQgc3RhcnRzIHdpdGgKKyAgICIjIS9iaW4vc2giLCBWaW0gd2lsbCByZWNvZ25pemUgaXQgYXMgYSAic2giIGZpbGV0eXBlLgorICAgVGhlIGZpbGV0eXBlIGRldGVjdGlvbiBpcyB1c2VkIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIGFuZCB0aGUgb3RoZXIgdHdvCisgICBpdGVtcyBiZWxvdy4KKyAgIFNlZSB8ZmlsZXR5cGVzfC4KKworMi4gVXNpbmcgZmlsZXR5cGUgcGx1Z2luIGZpbGVzCisgICBNYW55IGRpZmZlcmVudCBmaWxldHlwZXMgYXJlIGVkaXRlZCB3aXRoIGRpZmZlcmVudCBvcHRpb25zLiAgRm9yIGV4YW1wbGUsCisgICB3aGVuIHlvdSBlZGl0IGEgImMiIGZpbGUsIGl0J3MgdmVyeSB1c2VmdWwgdG8gc2V0IHRoZSAnY2luZGVudCcgb3B0aW9uIHRvCisgICBhdXRvbWF0aWNhbGx5IGluZGVudCB0aGUgbGluZXMuICBUaGVzZSBjb21tb25seSB1c2VmdWwgb3B0aW9uIHNldHRpbmdzIGFyZQorICAgaW5jbHVkZWQgd2l0aCBWaW0gaW4gZmlsZXR5cGUgcGx1Z2lucy4gIFlvdSBjYW4gYWxzbyBhZGQgeW91ciBvd24sIHNlZQorICAgfHdyaXRlLWZpbGV0eXBlLXBsdWdpbnwuCisKKzMuIFVzaW5nIGluZGVudCBmaWxlcworICAgV2hlbiBlZGl0aW5nIHByb2dyYW1zLCB0aGUgaW5kZW50IG9mIGEgbGluZSBjYW4gb2Z0ZW4gYmUgY29tcHV0ZWQKKyAgIGF1dG9tYXRpY2FsbHkuICBWaW0gY29tZXMgd2l0aCB0aGVzZSBpbmRlbnQgcnVsZXMgZm9yIGEgbnVtYmVyIG9mCisgICBmaWxldHlwZXMuICBTZWUgfDpmaWxldHlwZS1pbmRlbnQtb258IGFuZCAnaW5kZW50ZXhwcicuCisKKz4KKwlhdXRvY21kIEZpbGVUeXBlIHRleHQgc2V0bG9jYWwgdGV4dHdpZHRoPTc4CisKK1RoaXMgbWFrZXMgVmltIGJyZWFrIHRleHQgdG8gYXZvaWQgbGluZXMgZ2V0dGluZyBsb25nZXIgdGhhbiA3OCBjaGFyYWN0ZXJzLgorQnV0IG9ubHkgZm9yIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGRldGVjdGVkIHRvIGJlIHBsYWluIHRleHQuICBUaGVyZSBhcmUKK2FjdHVhbGx5IHR3byBwYXJ0cyBoZXJlLiAgImF1dG9jbWQgRmlsZVR5cGUgdGV4dCIgaXMgYW4gYXV0b2NvbW1hbmQuICBUaGlzCitkZWZpbmVzIHRoYXQgd2hlbiB0aGUgZmlsZSB0eXBlIGlzIHNldCB0byAidGV4dCIgdGhlIGZvbGxvd2luZyBjb21tYW5kIGlzCithdXRvbWF0aWNhbGx5IGV4ZWN1dGVkLiAgInNldGxvY2FsIHRleHR3aWR0aD03OCIgc2V0cyB0aGUgJ3RleHR3aWR0aCcgb3B0aW9uCit0byA3OCwgYnV0IG9ubHkgbG9jYWxseSBpbiBvbmUgZmlsZS4KKz4KKworCWF1dG9jbWQgQnVmUmVhZFBvc3QgKgorCSAgICBcIGlmIGxpbmUoIidcIiIpID4gMCAmJiBsaW5lKCInXCIiKSA8PSBsaW5lKCIkIikgfAorCSAgICBcICAgZXhlICJub3JtYWwgZ2BcIiIgfAorCSAgICBcIGVuZGlmCisKK0Fub3RoZXIgYXV0b2NvbW1hbmQuICBUaGlzIHRpbWUgaXQgaXMgdXNlZCBhZnRlciByZWFkaW5nIGFueSBmaWxlLiAgVGhlCitjb21wbGljYXRlZCBzdHVmZiBhZnRlciBpdCBjaGVja3MgaWYgdGhlICciIG1hcmsgaXMgZGVmaW5lZCwgYW5kIGp1bXBzIHRvIGl0CitpZiBzby4gIFRoZSBiYWNrc2xhc2ggYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBpcyB1c2VkIHRvIGNvbnRpbnVlIHRoZSBjb21tYW5kCitmcm9tIHRoZSBwcmV2aW91cyBsaW5lLiAgVGhhdCBhdm9pZHMgYSBsaW5lIGdldHRpbmcgdmVyeSBsb25nLgorU2VlIHxsaW5lLWNvbnRpbnVhdGlvbnwuICBUaGlzIG9ubHkgd29ya3MgaW4gYSBWaW0gc2NyaXB0IGZpbGUsIG5vdCB3aGVuCit0eXBpbmcgY29tbWFuZHMgYXQgdGhlIGNvbW1hbmQtbGluZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDUuMyoJU2ltcGxlIG1hcHBpbmdzCisKK0EgbWFwcGluZyBlbmFibGVzIHlvdSB0byBiaW5kIGEgc2V0IG9mIFZpbSBjb21tYW5kcyB0byBhIHNpbmdsZSBrZXkuICBTdXBwb3NlLAorZm9yIGV4YW1wbGUsIHRoYXQgeW91IG5lZWQgdG8gc3Vycm91bmQgY2VydGFpbiB3b3JkcyB3aXRoIGN1cmx5IGJyYWNlcy4gIEluCitvdGhlciB3b3JkcywgeW91IG5lZWQgdG8gY2hhbmdlIGEgd29yZCBzdWNoIGFzICJhbW91bnQiIGludG8gInthbW91bnR9Ii4gIFdpdGgKK3RoZSA6bWFwIGNvbW1hbmQsIHlvdSBjYW4gdGVsbCBWaW0gdGhhdCB0aGUgRjUga2V5IGRvZXMgdGhpcyBqb2IuICBUaGUgY29tbWFuZAoraXMgYXMgZm9sbG93czogPgorCisJOm1hcCA8RjU+IGl7PEVzYz5lYX08RXNjPgorPAorCU5vdGU6CisJV2hlbiBlbnRlcmluZyB0aGlzIGNvbW1hbmQsIHlvdSBtdXN0IGVudGVyIDxGNT4gYnkgdHlwaW5nIGZvdXIKKwljaGFyYWN0ZXJzLiAgU2ltaWxhcmx5LCA8RXNjPiBpcyBub3QgZW50ZXJlZCBieSBwcmVzc2luZyB0aGUgPEVzYz4KKwlrZXksIGJ1dCBieSB0eXBpbmcgZml2ZSBjaGFyYWN0ZXJzLiAgV2F0Y2ggb3V0IGZvciB0aGlzIGRpZmZlcmVuY2UKKwl3aGVuIHJlYWRpbmcgdGhlIG1hbnVhbCEKKworTGV0J3MgYnJlYWsgdGhpcyBkb3duOgorICAgIDxGNT4JVGhlIEY1IGZ1bmN0aW9uIGtleS4gIFRoaXMgaXMgdGhlIHRyaWdnZXIga2V5IHRoYXQgY2F1c2VzIHRoZQorCQljb21tYW5kIHRvIGJlIGV4ZWN1dGVkIGFzIHRoZSBrZXkgaXMgcHJlc3NlZC4KKworICAgIGl7PEVzYz4JSW5zZXJ0IHRoZSB7IGNoYXJhY3Rlci4gIFRoZSA8RXNjPiBrZXkgZW5kcyBJbnNlcnQgbW9kZS4KKworICAgIGUJCU1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgd29yZC4KKworICAgIGF9PEVzYz4JQXBwZW5kIHRoZSB9IHRvIHRoZSB3b3JkLgorCitBZnRlciB5b3UgZXhlY3V0ZSB0aGUgIjptYXAiIGNvbW1hbmQsIGFsbCB5b3UgaGF2ZSB0byBkbyB0byBwdXQge30gYXJvdW5kIGEKK3dvcmQgaXMgdG8gcHV0IHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgcHJlc3MgRjUuCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIHRyaWdnZXIgaXMgYSBzaW5nbGUga2V5OyBpdCBjYW4gYmUgYW55IHN0cmluZy4gIEJ1dCB3aGVuCit5b3UgdXNlIGFuIGV4aXN0aW5nIFZpbSBjb21tYW5kLCB0aGF0IGNvbW1hbmQgd2lsbCBubyBsb25nZXIgYmUgYXZhaWxhYmxlLgorWW91IGJldHRlciBhdm9pZCB0aGF0LgorICAgT25lIGtleSB0aGF0IGNhbiBiZSB1c2VkIHdpdGggbWFwcGluZ3MgaXMgdGhlIGJhY2tzbGFzaC4gIFNpbmNlIHlvdQorcHJvYmFibHkgd2FudCB0byBkZWZpbmUgbW9yZSB0aGFuIG9uZSBtYXBwaW5nLCBhZGQgYW5vdGhlciBjaGFyYWN0ZXIuICBZb3UKK2NvdWxkIG1hcCAiXHAiIHRvIGFkZCBwYXJlbnMgYXJvdW5kIGEgd29yZCwgYW5kICJcYyIgdG8gYWRkIGN1cmx5IGJyYWNlcywgZm9yCitleGFtcGxlOiA+CisKKwk6bWFwIFxwIGkoPEVzYz5lYSk8RXNjPgorCTptYXAgXGMgaXs8RXNjPmVhfTxFc2M+CisKK1lvdSBuZWVkIHRvIHR5cGUgdGhlIFwgYW5kIHRoZSBwIHF1aWNrbHkgYWZ0ZXIgYW5vdGhlciwgc28gdGhhdCBWaW0ga25vd3MgdGhleQorYmVsb25nIHRvZ2V0aGVyLgorCitUaGUgIjptYXAiIGNvbW1hbmQgKHdpdGggbm8gYXJndW1lbnRzKSBsaXN0cyB5b3VyIGN1cnJlbnQgbWFwcGluZ3MuICBBdAorbGVhc3QgdGhlIG9uZXMgZm9yIE5vcm1hbCBtb2RlLiAgTW9yZSBhYm91dCBtYXBwaW5ncyBpbiBzZWN0aW9uIHw0MC4xfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDUuNCoJQWRkaW5nIGEgcGx1Z2luCQkJCQkqYWRkLXBsdWdpbiogKnBsdWdpbioKKworVmltJ3MgZnVuY3Rpb25hbGl0eSBjYW4gYmUgZXh0ZW5kZWQgYnkgYWRkaW5nIHBsdWdpbnMuICBBIHBsdWdpbiBpcyBub3RoaW5nCittb3JlIHRoYW4gYSBWaW0gc2NyaXB0IGZpbGUgdGhhdCBpcyBsb2FkZWQgYXV0b21hdGljYWxseSB3aGVuIFZpbSBzdGFydHMuICBZb3UKK2NhbiBhZGQgYSBwbHVnaW4gdmVyeSBlYXNpbHkgYnkgZHJvcHBpbmcgaXQgaW4geW91ciBwbHVnaW4gZGlyZWN0b3J5Lgore25vdCBhdmFpbGFibGUgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZXZhbHwgZmVhdHVyZX0KKworVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBwbHVnaW5zOgorCisgICAgZ2xvYmFsIHBsdWdpbjogVXNlZCBmb3IgYWxsIGtpbmRzIG9mIGZpbGVzCisgIGZpbGV0eXBlIHBsdWdpbjogT25seSB1c2VkIGZvciBhIHNwZWNpZmljIHR5cGUgb2YgZmlsZQorCitUaGUgZ2xvYmFsIHBsdWdpbnMgd2lsbCBiZSBkaXNjdXNzZWQgZmlyc3QsIHRoZW4gdGhlIGZpbGV0eXBlIG9uZXMKK3xhZGQtZmlsZXR5cGUtcGx1Z2lufC4KKworCitHTE9CQUwgUExVR0lOUwkJCQkJCSpzdGFuZGFyZC1wbHVnaW4qCisKK1doZW4geW91IHN0YXJ0IFZpbSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGxvYWQgYSBudW1iZXIgb2YgZ2xvYmFsIHBsdWdpbnMuCitZb3UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBmb3IgdGhpcy4gIFRoZXkgYWRkIGZ1bmN0aW9uYWxpdHkgdGhhdCBtb3N0CitwZW9wbGUgd2lsbCB3YW50IHRvIHVzZSwgYnV0IHdoaWNoIHdhcyBpbXBsZW1lbnRlZCBhcyBhIFZpbSBzY3JpcHQgaW5zdGVhZCBvZgorYmVpbmcgY29tcGlsZWQgaW50byBWaW0uICBZb3UgY2FuIGZpbmQgdGhlbSBsaXN0ZWQgaW4gdGhlIGhlbHAgaW5kZXgKK3xzdGFuZGFyZC1wbHVnaW4tbGlzdHwuICBBbHNvIHNlZSB8bG9hZC1wbHVnaW5zfC4KKworCQkJCQkJCSphZGQtZ2xvYmFsLXBsdWdpbioKK1lvdSBjYW4gYWRkIGEgZ2xvYmFsIHBsdWdpbiB0byBhZGQgZnVuY3Rpb25hbGl0eSB0aGF0IHdpbGwgYWx3YXlzIGJlIHByZXNlbnQKK3doZW4geW91IHVzZSBWaW0uICBUaGVyZSBhcmUgb25seSB0d28gc3RlcHMgZm9yIGFkZGluZyBhIGdsb2JhbCBwbHVnaW46CisxLiBHZXQgYSBjb3B5IG9mIHRoZSBwbHVnaW4uCisyLiBEcm9wIGl0IGluIHRoZSByaWdodCBkaXJlY3RvcnkuCisKKworR0VUVElORyBBIEdMT0JBTCBQTFVHSU4KKworV2hlcmUgY2FuIHlvdSBmaW5kIHBsdWdpbnM/CistIFNvbWUgY29tZSB3aXRoIFZpbS4gIFlvdSBjYW4gZmluZCB0aGVtIGluIHRoZSBkaXJlY3RvcnkgJFZJTVJVTlRJTUUvbWFjcm9zCisgIGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzLgorLSBEb3dubG9hZCBmcm9tIHRoZSBuZXQsIGNoZWNrIG91dCBodHRwOi8vdmltLnNmLm5ldC4KKy0gVGhleSBhcmUgc29tZXRpbWVzIHBvc3RlZCBpbiBhIFZpbSB8bWFpbGxpc3R8LgorLSBZb3UgY291bGQgd3JpdGUgb25lIHlvdXJzZWxmLCBzZWUgfHdyaXRlLXBsdWdpbnwuCisKKworVVNJTkcgQSBHTE9CQUwgUExVR0lOCisKK0ZpcnN0IHJlYWQgdGhlIHRleHQgaW4gdGhlIHBsdWdpbiBpdHNlbGYgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWFsIGNvbmRpdGlvbnMuCitUaGVuIGNvcHkgdGhlIGZpbGUgdG8geW91ciBwbHVnaW4gZGlyZWN0b3J5OgorCisJc3lzdGVtCQlwbHVnaW4gZGlyZWN0b3J5IH4KKwlVbml4CQl+Ly52aW0vcGx1Z2luLworCVBDIGFuZCBPUy8yCSRIT01FL3ZpbWZpbGVzL3BsdWdpbiBvciAkVklNL3ZpbWZpbGVzL3BsdWdpbgorCUFtaWdhCQlzOnZpbWZpbGVzL3BsdWdpbgorCU1hY2ludG9zaAkkVklNOnZpbWZpbGVzOnBsdWdpbgorCU1hYyBPUyBYCX4vLnZpbS9wbHVnaW4vCisJUklTQy1PUwkJQ2hvaWNlczp2aW1maWxlcy5wbHVnaW4KKworRXhhbXBsZSBmb3IgVW5peCAoYXNzdW1pbmcgeW91IGRpZG4ndCBoYXZlIGEgcGx1Z2luIGRpcmVjdG9yeSB5ZXQpOiA+CisKKwlta2RpciB+Ly52aW0KKwlta2RpciB+Ly52aW0vcGx1Z2luCisJY3AgL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNjAvbWFjcm9zL2p1c3RpZnkudmltIH4vLnZpbS9wbHVnaW4KKworVGhhdCdzIGFsbCEgIE5vdyB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZHMgZGVmaW5lZCBpbiB0aGlzIHBsdWdpbiB0byBqdXN0aWZ5Cit0ZXh0LgorCisKK0ZJTEVUWVBFIFBMVUdJTlMJCQkqYWRkLWZpbGV0eXBlLXBsdWdpbiogKmZ0cGx1Z2lucyoKKworVGhlIFZpbSBkaXN0cmlidXRpb24gY29tZXMgd2l0aCBhIHNldCBvZiBwbHVnaW5zIGZvciBkaWZmZXJlbnQgZmlsZXR5cGVzIHRoYXQKK3lvdSBjYW4gc3RhcnQgdXNpbmcgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKworCTpmaWxldHlwZSBwbHVnaW4gb24KKworVGhhdCdzIGFsbCEgIFNlZSB8dmltcmMtZmlsZXR5cGV8LgorCitJZiB5b3UgYXJlIG1pc3NpbmcgYSBwbHVnaW4gZm9yIGEgZmlsZXR5cGUgeW91IGFyZSB1c2luZywgb3IgeW91IGZvdW5kIGEKK2JldHRlciBvbmUsIHlvdSBjYW4gYWRkIGl0LiAgVGhlcmUgYXJlIHR3byBzdGVwcyBmb3IgYWRkaW5nIGEgZmlsZXR5cGUgcGx1Z2luOgorMS4gR2V0IGEgY29weSBvZiB0aGUgcGx1Z2luLgorMi4gRHJvcCBpdCBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LgorCisKK0dFVFRJTkcgQSBGSUxFVFlQRSBQTFVHSU4KKworWW91IGNhbiBmaW5kIHRoZW0gaW4gdGhlIHNhbWUgcGxhY2VzIGFzIHRoZSBnbG9iYWwgcGx1Z2lucy4gIFdhdGNoIG91dCBpZiB0aGUKK3R5cGUgb2YgZmlsZSBpcyBtZW50aW9uZWQsIHRoZW4geW91IGtub3cgaWYgdGhlIHBsdWdpbiBpcyBhIGdsb2JhbCBvciBhCitmaWxldHlwZSBvbmUuICBUaGUgc2NyaXB0cyBpbiAkVklNUlVOVElNRS9tYWNyb3MgYXJlIGdsb2JhbCBvbmVzLCB0aGUgZmlsZXR5cGUKK3BsdWdpbnMgYXJlIGluICRWSU1SVU5USU1FL2Z0cGx1Z2luLgorCisKK1VTSU5HIEEgRklMRVRZUEUgUExVR0lOCQkJCQkqZnRwbHVnaW4tbmFtZSoKKworWW91IGNhbiBhZGQgYSBmaWxldHlwZSBwbHVnaW4gYnkgZHJvcHBpbmcgaXQgaW4gdGhlIHJpZ2h0IGRpcmVjdG9yeS4gIFRoZQorbmFtZSBvZiB0aGlzIGRpcmVjdG9yeSBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgbWVudGlvbmVkIGFib3ZlIGZvciBnbG9iYWwKK3BsdWdpbnMsIGJ1dCB0aGUgbGFzdCBwYXJ0IGlzICJmdHBsdWdpbiIuICBTdXBwb3NlIHlvdSBoYXZlIGZvdW5kIGEgcGx1Z2luIGZvcgordGhlICJzdHVmZiIgZmlsZXR5cGUsIGFuZCB5b3UgYXJlIG9uIFVuaXguICBUaGVuIHlvdSBjYW4gbW92ZSB0aGlzIGZpbGUgdG8gdGhlCitmdHBsdWdpbiBkaXJlY3Rvcnk6ID4KKworCW12IHRoZWZpbGUgfi8udmltL2Z0cGx1Z2luL3N0dWZmLnZpbQorCitJZiB0aGF0IGZpbGUgYWxyZWFkeSBleGlzdHMgeW91IGFscmVhZHkgaGF2ZSBhIHBsdWdpbiBmb3IgInN0dWZmIi4gIFlvdSBtaWdodAord2FudCB0byBjaGVjayBpZiB0aGUgZXhpc3RpbmcgcGx1Z2luIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCB0aGUgb25lIHlvdSBhcmUKK2FkZGluZy4gIElmIGl0J3MgT0ssIHlvdSBjYW4gZ2l2ZSB0aGUgbmV3IG9uZSBhbm90aGVyIG5hbWU6ID4KKworCW12IHRoZWZpbGUgfi8udmltL2Z0cGx1Z2luL3N0dWZmX3Rvby52aW0KKworVGhlIHVuZGVyc2NvcmUgaXMgdXNlZCB0byBzZXBhcmF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZXR5cGUgZnJvbSB0aGUgcmVzdCwKK3doaWNoIGNhbiBiZSBhbnl0aGluZy4gIElmIHlvdSB3b3VsZCB1c2UgIm90aGVyc3R1ZmYudmltIiBpdCB3b3VsZG4ndCB3b3JrLCBpdAord291bGQgYmUgbG9hZGVkIGZvciB0aGUgIm90aGVyc3R1ZmYiIGZpbGV0eXBlLgorCitPbiBNUy1ET1MgeW91IGNhbm5vdCB1c2UgbG9uZyBmaWxlbmFtZXMuICBZb3Ugd291bGQgcnVuIGludG8gdHJvdWJsZSBpZiB5b3UKK2FkZCBhIHNlY29uZCBwbHVnaW4gYW5kIHRoZSBmaWxldHlwZSBoYXMgbW9yZSB0aGFuIHNpeCBjaGFyYWN0ZXJzLiAgWW91IGNhbgordXNlIGFuIGV4dHJhIGRpcmVjdG9yeSB0byBnZXQgYXJvdW5kIHRoaXM6ID4KKworCW1rZGlyICRWSU0vdmltZmlsZXMvZnRwbHVnaW4vZm9ydHJhbgorCWNvcHkgdGhlZmlsZSAkVklNL3ZpbWZpbGVzL2Z0cGx1Z2luL2ZvcnRyYW4vdG9vLnZpbQorCitUaGUgZ2VuZXJpYyBuYW1lcyBmb3IgdGhlIGZpbGV0eXBlIHBsdWdpbnMgYXJlOiA+CisKKwlmdHBsdWdpbi88ZmlsZXR5cGU+LnZpbQorCWZ0cGx1Z2luLzxmaWxldHlwZT5fPG5hbWU+LnZpbQorCWZ0cGx1Z2luLzxmaWxldHlwZT4vPG5hbWU+LnZpbQorCitIZXJlICI8bmFtZT4iIGNhbiBiZSBhbnkgbmFtZSB0aGF0IHlvdSBwcmVmZXIuCitFeGFtcGxlcyBmb3IgdGhlICJzdHVmZiIgZmlsZXR5cGUgb24gVW5peDogPgorCisJfi8udmltL2Z0cGx1Z2luL3N0dWZmLnZpbQorCX4vLnZpbS9mdHBsdWdpbi9zdHVmZl9kZWYudmltCisJfi8udmltL2Z0cGx1Z2luL3N0dWZmL2hlYWRlci52aW0KKworVGhlIDxmaWxldHlwZT4gcGFydCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZXR5cGUgdGhlIHBsdWdpbiBpcyB0byBiZSB1c2VkIGZvci4KK09ubHkgZmlsZXMgb2YgdGhpcyBmaWxldHlwZSB3aWxsIHVzZSB0aGUgc2V0dGluZ3MgZnJvbSB0aGUgcGx1Z2luLiAgVGhlIDxuYW1lPgorcGFydCBvZiB0aGUgcGx1Z2luIGZpbGUgZG9lc24ndCBtYXR0ZXIsIHlvdSBjYW4gdXNlIGl0IHRvIGhhdmUgc2V2ZXJhbCBwbHVnaW5zCitmb3IgdGhlIHNhbWUgZmlsZXR5cGUuICBOb3RlIHRoYXQgaXQgbXVzdCBlbmQgaW4gIi52aW0iLgorCisKK0Z1cnRoZXIgcmVhZGluZzoKK3xmaWxldHlwZS1wbHVnaW5zfAlEb2N1bWVudGF0aW9uIGZvciB0aGUgZmlsZXR5cGUgcGx1Z2lucyBhbmQgaW5mb3JtYXRpb24KKwkJCWFib3V0IGhvdyB0byBhdm9pZCB0aGF0IG1hcHBpbmdzIGNhdXNlIHByb2JsZW1zLgorfGxvYWQtcGx1Z2luc3wJCVdoZW4gdGhlIGdsb2JhbCBwbHVnaW5zIGFyZSBsb2FkZWQgZHVyaW5nIHN0YXJ0dXAuCit8ZnRwbHVnaW4tb3ZlcnJ1bGV8CU92ZXJydWxpbmcgdGhlIHNldHRpbmdzIGZyb20gYSBnbG9iYWwgcGx1Z2luLgorfHdyaXRlLXBsdWdpbnwJCUhvdyB0byB3cml0ZSBhIHBsdWdpbiBzY3JpcHQuCit8cGx1Z2luLWRldGFpbHN8CUZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHBsdWdpbnMgb3Igd2hlbiB5b3VyCisJCQlwbHVnaW4gZG9lc24ndCB3b3JrLgorfG5ldy1maWxldHlwZXwJCUhvdyB0byBkZXRlY3QgYSBuZXcgZmlsZSB0eXBlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNS41KglBZGRpbmcgYSBoZWxwIGZpbGUJCSphZGQtbG9jYWwtaGVscCogKm1hdGNoaXQtaW5zdGFsbCoKKworSWYgeW91IGFyZSBsdWNreSwgdGhlIHBsdWdpbiB5b3UgaW5zdGFsbGVkIGFsc28gY29tZXMgd2l0aCBhIGhlbHAgZmlsZS4gIFdlCit3aWxsIGV4cGxhaW4gaG93IHRvIGluc3RhbGwgdGhlIGhlbHAgZmlsZSwgc28gdGhhdCB5b3UgY2FuIGVhc2lseSBmaW5kIGhlbHAKK2ZvciB5b3VyIG5ldyBwbHVnaW4uCisgICBMZXQgdXMgdXNlIHRoZSAibWF0Y2hpdC52aW0iIHBsdWdpbiBhcyBhbiBleGFtcGxlIChpdCBpcyBpbmNsdWRlZCB3aXRoCitWaW0pLiAgVGhpcyBwbHVnaW4gbWFrZXMgdGhlICIlIiBjb21tYW5kIGp1bXAgdG8gbWF0Y2hpbmcgSFRNTCB0YWdzLAoraWYvZWxzZS9lbmRpZiBpbiBWaW0gc2NyaXB0cywgZXRjLiAgVmVyeSB1c2VmdWwsIGFsdGhvdWdoIGl0J3Mgbm90IGJhY2t3YXJkcworY29tcGF0aWJsZSAodGhhdCdzIHdoeSBpdCBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0KS4KKyAgIFRoaXMgcGx1Z2luIGNvbWVzIHdpdGggZG9jdW1lbnRhdGlvbjogIm1hdGNoaXQudHh0Ii4gIExldCdzIGZpcnN0IGNvcHkgdGhlCitwbHVnaW4gdG8gdGhlIHJpZ2h0IGRpcmVjdG9yeS4gIFRoaXMgdGltZSB3ZSB3aWxsIGRvIGl0IGZyb20gaW5zaWRlIFZpbSwgc28KK3RoYXQgd2UgY2FuIHVzZSAkVklNUlVOVElNRS4gIChZb3UgbWF5IHNraXAgc29tZSBvZiB0aGUgIm1rZGlyIiBjb21tYW5kcyBpZgoreW91IGFscmVhZHkgaGF2ZSB0aGUgZGlyZWN0b3J5LikgPgorCisJOiFta2RpciB+Ly52aW0KKwk6IW1rZGlyIH4vLnZpbS9wbHVnaW4KKwk6IWNwICRWSU1SVU5USU1FL21hY3Jvcy9tYXRjaGl0LnZpbSB+Ly52aW0vcGx1Z2luCisKK05vdyBjcmVhdGUgYSAiZG9jIiBkaXJlY3RvcnkgaW4gb25lIG9mIHRoZSBkaXJlY3RvcmllcyBpbiAncnVudGltZXBhdGgnLiA+CisKKwk6IW1rZGlyIH4vLnZpbS9kb2MKKworQ29weSB0aGUgaGVscCBmaWxlIHRvIHRoZSAiZG9jIiBkaXJlY3RvcnkuID4KKworCTohY3AgJFZJTVJVTlRJTUUvbWFjcm9zL21hdGNoaXQudHh0IH4vLnZpbS9kb2MKKworTm93IGNvbWVzIHRoZSB0cmljaywgd2hpY2ggYWxsb3dzIHlvdSB0byBqdW1wIHRvIHRoZSBzdWJqZWN0cyBpbiB0aGUgbmV3IGhlbHAKK2ZpbGU6IEdlbmVyYXRlIHRoZSBsb2NhbCB0YWdzIGZpbGUgd2l0aCB0aGUgfDpoZWxwdGFnc3wgY29tbWFuZC4gPgorCisJOmhlbHB0YWdzIH4vLnZpbS9kb2MKKworTm93IHlvdSBjYW4gdXNlIHRoZSA+CisKKwk6aGVscCBnJQorCitjb21tYW5kIHRvIGZpbmQgaGVscCBmb3IgImclIiBpbiB0aGUgaGVscCBmaWxlIHlvdSBqdXN0IGFkZGVkLiAgWW91IGNhbiBzZWUgYW4KK2VudHJ5IGZvciB0aGUgbG9jYWwgaGVscCBmaWxlIHdoZW4geW91IGRvOiA+CisKKwk6aGVscCBsb2NhbC1hZGRpdGlvbnMKKworVGhlIHRpdGxlIGxpbmVzIGZyb20gdGhlIGxvY2FsIGhlbHAgZmlsZXMgYXJlIGF1dG9tYWdpY2FsbHkgYWRkZWQgdG8gdGhpcworc2VjdGlvbi4gIFRoZXJlIHlvdSBjYW4gc2VlIHdoaWNoIGxvY2FsIGhlbHAgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIGFuZCBqdW1wIHRvCit0aGVtIHRocm91Z2ggdGhlIHRhZy4KKworRm9yIHdyaXRpbmcgYSBsb2NhbCBoZWxwIGZpbGUsIHNlZSB8d3JpdGUtbG9jYWwtaGVscHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA1LjYqCVRoZSBvcHRpb24gd2luZG93CisKK0lmIHlvdSBhcmUgbG9va2luZyBmb3IgYW4gb3B0aW9uIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50LCB5b3UgY2FuIHNlYXJjaCBpbgordGhlIGhlbHAgZmlsZXMgaGVyZTogfG9wdGlvbnN8LiAgQW5vdGhlciB3YXkgaXMgYnkgdXNpbmcgdGhpcyBjb21tYW5kOiA+CisKKwk6b3B0aW9ucworCitUaGlzIG9wZW5zIGEgbmV3IHdpbmRvdywgd2l0aCBhIGxpc3Qgb2Ygb3B0aW9ucyB3aXRoIGEgb25lLWxpbmUgZXhwbGFuYXRpb24uCitUaGUgb3B0aW9ucyBhcmUgZ3JvdXBlZCBieSBzdWJqZWN0LiAgTW92ZSB0aGUgY3Vyc29yIHRvIGEgc3ViamVjdCBhbmQgcHJlc3MKKzxFbnRlcj4gdG8ganVtcCB0aGVyZS4gIFByZXNzIDxFbnRlcj4gYWdhaW4gdG8ganVtcCBiYWNrLiAgT3IgdXNlIENUUkwtTy4KKworWW91IGNhbiBjaGFuZ2UgdGhlIHZhbHVlIG9mIGFuIG9wdGlvbi4gIEZvciBleGFtcGxlLCBtb3ZlIHRvIHRoZSAiZGlzcGxheWluZwordGV4dCIgc3ViamVjdC4gIFRoZW4gbW92ZSB0aGUgY3Vyc29yIGRvd24gdG8gdGhpcyBsaW5lOgorCisJc2V0IHdyYXAJbm93cmFwIH4KKworV2hlbiB5b3UgaGl0IDxFbnRlcj4sIHRoZSBsaW5lIHdpbGwgY2hhbmdlIHRvOgorCisJc2V0IG5vd3JhcAl3cmFwIH4KKworVGhlIG9wdGlvbiBoYXMgbm93IGJlZW4gc3dpdGNoZWQgb2ZmLgorCitKdXN0IGFib3ZlIHRoaXMgbGluZSBpcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSAnd3JhcCcgb3B0aW9uLiAgTW92ZSB0aGUKK2N1cnNvciBvbmUgbGluZSB1cCB0byBwbGFjZSBpdCBpbiB0aGlzIGxpbmUuICBOb3cgaGl0IDxFbnRlcj4gYW5kIHlvdSBqdW1wIHRvCit0aGUgZnVsbCBoZWxwIG9uIHRoZSAnd3JhcCcgb3B0aW9uLgorCitGb3Igb3B0aW9ucyB0aGF0IHRha2UgYSBudW1iZXIgb3Igc3RyaW5nIGFyZ3VtZW50IHlvdSBjYW4gZWRpdCB0aGUgdmFsdWUuCitUaGVuIHByZXNzIDxFbnRlcj4gdG8gYXBwbHkgdGhlIG5ldyB2YWx1ZS4gIEZvciBleGFtcGxlLCBtb3ZlIHRoZSBjdXJzb3IgYSBmZXcKK2xpbmVzIHVwIHRvIHRoaXMgbGluZToKKworCXNldCBzbz0wIH4KKworUG9zaXRpb24gdGhlIGN1cnNvciBvbiB0aGUgemVybyB3aXRoICIkIi4gIENoYW5nZSBpdCBpbnRvIGEgZml2ZSB3aXRoICJyNSIuCitUaGVuIHByZXNzIDxFbnRlcj4gdG8gYXBwbHkgdGhlIG5ldyB2YWx1ZS4gIFdoZW4geW91IG5vdyBtb3ZlIHRoZSBjdXJzb3IKK2Fyb3VuZCB5b3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUgdGV4dCBzdGFydHMgc2Nyb2xsaW5nIGJlZm9yZSB5b3UgcmVhY2ggdGhlCitib3JkZXIuICBUaGlzIGlzIHdoYXQgdGhlICdzY3JvbGxvZmYnIG9wdGlvbiBkb2VzLCBpdCBzcGVjaWZpZXMgYW4gb2Zmc2V0Citmcm9tIHRoZSB3aW5kb3cgYm9yZGVyIHdoZXJlIHNjcm9sbGluZyBzdGFydHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA1LjcqCU9mdGVuIHVzZWQgb3B0aW9ucworCitUaGVyZSBhcmUgYW4gYXdmdWwgbG90IG9mIG9wdGlvbnMuICBNb3N0IG9mIHRoZW0geW91IHdpbGwgaGFyZGx5IGV2ZXIgdXNlLgorU29tZSBvZiB0aGUgbW9yZSB1c2VmdWwgb25lcyB3aWxsIGJlIG1lbnRpb25lZCBoZXJlLiAgRG9uJ3QgZm9yZ2V0IHlvdSBjYW4KK2ZpbmQgbW9yZSBoZWxwIG9uIHRoZXNlIG9wdGlvbnMgd2l0aCB0aGUgIjpoZWxwIiBjb21tYW5kLCB3aXRoIHNpbmdsZSBxdW90ZXMKK2JlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9wdGlvbiBuYW1lLiAgRm9yIGV4YW1wbGU6ID4KKworCTpoZWxwICd3cmFwJworCitJbiBjYXNlIHlvdSBoYXZlIG1lc3NlZCB1cCBhbiBvcHRpb24gdmFsdWUsIHlvdSBjYW4gc2V0IGl0IGJhY2sgdG8gdGhlCitkZWZhdWx0IGJ5IHB1dHRpbmcgYSBhbXBlcnNhbmQgKCYpIGFmdGVyIHRoZSBvcHRpb24gbmFtZS4gIEV4YW1wbGU6ID4KKworCTpzZXQgaXNrZXl3b3JkJgorCisKK05PVCBXUkFQUElORyBMSU5FUworCitWaW0gbm9ybWFsbHkgd3JhcHMgbG9uZyBsaW5lcywgc28gdGhhdCB5b3UgY2FuIHNlZSBhbGwgb2YgdGhlIHRleHQuICBTb21ldGltZXMKK2l0J3MgYmV0dGVyIHRvIGxldCB0aGUgdGV4dCBjb250aW51ZSByaWdodCBvZiB0aGUgd2luZG93LiAgVGhlbiB5b3UgbmVlZCB0bworc2Nyb2xsIHRoZSB0ZXh0IGxlZnQtcmlnaHQgdG8gc2VlIGFsbCBvZiBhIGxvbmcgbGluZS4gIFN3aXRjaCB3cmFwcGluZyBvZiB3aXRoCit0aGlzIGNvbW1hbmQ6ID4KKworCTpzZXQgbm93cmFwCisKK1ZpbSB3aWxsIGF1dG9tYXRpY2FsbHkgc2Nyb2xsIHRoZSB0ZXh0IHdoZW4geW91IG1vdmUgdG8gdGV4dCB0aGF0IGlzIG5vdAorZGlzcGxheWVkLiAgVG8gc2VlIGEgY29udGV4dCBvZiB0ZW4gY2hhcmFjdGVycywgZG8gdGhpczogPgorCisJOnNldCBzaWRlc2Nyb2xsPTEwCisKK1RoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIHRleHQgaW4gdGhlIGZpbGUsIG9ubHkgdGhlIHdheSBpdCBpcyBkaXNwbGF5ZWQuCisKKworV1JBUFBJTkcgTU9WRU1FTlQgQ09NTUFORFMKKworTW9zdCBjb21tYW5kcyBmb3IgbW92aW5nIGFyb3VuZCB3aWxsIHN0b3AgbW92aW5nIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGEKK2xpbmUuICBZb3UgY2FuIGNoYW5nZSB0aGF0IHdpdGggdGhlICd3aGljaHdyYXAnIG9wdGlvbi4gIFRoaXMgc2V0cyBpdCB0byB0aGUKK2RlZmF1bHQgdmFsdWU6ID4KKworCTpzZXQgd2hpY2h3cmFwPWIscworCitUaGlzIGFsbG93cyB0aGUgPEJTPiBrZXksIHdoZW4gdXNlZCBpbiB0aGUgZmlyc3QgcG9zaXRpb24gb2YgYSBsaW5lLCB0byBtb3ZlCit0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUuICBBbmQgdGhlIDxTcGFjZT4ga2V5IG1vdmVzIGZyb20KK3RoZSBlbmQgb2YgYSBsaW5lIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBvbmUuCisKK1RvIGFsbG93IHRoZSBjdXJzb3Iga2V5cyA8TGVmdD4gYW5kIDxSaWdodD4gdG8gYWxzbyB3cmFwLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6c2V0IHdoaWNod3JhcD1iLHMsPCw+CisKK1RoaXMgaXMgc3RpbGwgb25seSBmb3IgTm9ybWFsIG1vZGUuICBUbyBsZXQgPExlZnQ+IGFuZCA8UmlnaHQ+IGRvIHRoaXMgaW4KK0luc2VydCBtb2RlIGFzIHdlbGw6ID4KKworCTpzZXQgd2hpY2h3cmFwPWIscyw8LD4sWyxdCisKK1RoZXJlIGFyZSBhIGZldyBvdGhlciBmbGFncyB0aGF0IGNhbiBiZSBhZGRlZCwgc2VlICd3aGljaHdyYXAnLgorCisKK1ZJRVdJTkcgVEFCUworCitXaGVuIHRoZXJlIGFyZSB0YWJzIGluIGEgZmlsZSwgeW91IGNhbm5vdCBzZWUgd2hlcmUgdGhleSBhcmUuICBUbyBtYWtlIHRoZW0KK3Zpc2libGU6ID4KKworCTpzZXQgbGlzdAorCitOb3cgZXZlcnkgVGFiIGlzIGRpc3BsYXllZCBhcyBeSS4gIEFuZCBhICQgaXMgZGlzcGxheWVkIGF0IHRoZSBlbmQgb2YgZWFjaAorbGluZSwgc28gdGhhdCB5b3UgY2FuIHNwb3QgdHJhaWxpbmcgc3BhY2VzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGdvIHVubm90aWNlZC4KKyAgIEEgZGlzYWR2YW50YWdlIGlzIHRoYXQgdGhpcyBsb29rcyB1Z2x5IHdoZW4gdGhlcmUgYXJlIG1hbnkgVGFicyBpbiBhIGZpbGUuCitJZiB5b3UgaGF2ZSBhIGNvbG9yIHRlcm1pbmFsLCBvciBhcmUgdXNpbmcgdGhlIEdVSSwgVmltIGNhbiBzaG93IHRoZSBzcGFjZXMKK2FuZCB0YWJzIGFzIGhpZ2hsaWdodGVkIGNoYXJhY3RlcnMuICBVc2UgdGhlICdsaXN0Y2hhcnMnIG9wdGlvbjogPgorCisJOnNldCBsaXN0Y2hhcnM9dGFiOj4tLHRyYWlsOi0KKworTm93IGV2ZXJ5IHRhYiB3aWxsIGJlIGRpc3BsYXllZCBhcyAiPi0tLSIgKHdpdGggbW9yZSBvciBsZXNzICItIikgYW5kIHRyYWlsaW5nCit3aGl0ZSBzcGFjZSBhcyAiLSIuICBMb29rcyBhIGxvdCBiZXR0ZXIsIGRvZXNuJ3QgaXQ/CisKKworS0VZV09SRFMKKworVGhlICdpc2tleXdvcmQnIG9wdGlvbiBzcGVjaWZpZXMgd2hpY2ggY2hhcmFjdGVycyBjYW4gYXBwZWFyIGluIGEgd29yZDogPgorCisJOnNldCBpc2tleXdvcmQKKzwJICBpc2tleXdvcmQ9QCw0OC01NyxfLDE5Mi0yNTUgfgorCitUaGUgIkAiIHN0YW5kcyBmb3IgYWxsIGFscGhhYmV0aWMgbGV0dGVycy4gICI0OC01NyIgc3RhbmRzIGZvciBBU0NJSQorY2hhcmFjdGVycyA0OCB0byA1Nywgd2hpY2ggYXJlIHRoZSBudW1iZXJzIDAgdG8gOS4gICIxOTItMjU1IiBhcmUgdGhlCitwcmludGFibGUgbGF0aW4gY2hhcmFjdGVycy4KKyAgIFNvbWV0aW1lcyB5b3Ugd2lsbCB3YW50IHRvIGluY2x1ZGUgYSBkYXNoIGluIGtleXdvcmRzLCBzbyB0aGF0IGNvbW1hbmRzCitsaWtlICJ3IiBjb25zaWRlciAidXBwZXItY2FzZSIgdG8gYmUgb25lIHdvcmQuICBZb3UgY2FuIGRvIGl0IGxpa2UgdGhpczogPgorCisJOnNldCBpc2tleXdvcmQrPS0KKwk6c2V0IGlza2V5d29yZAorPAkgIGlza2V5d29yZD1ALDQ4LTU3LF8sMTkyLTI1NSwtIH4KKworSWYgeW91IGxvb2sgYXQgdGhlIG5ldyB2YWx1ZSwgeW91IHdpbGwgc2VlIHRoYXQgVmltIGhhcyBhZGRlZCBhIGNvbW1hIGZvciB5b3UuCisgICBUbyByZW1vdmUgYSBjaGFyYWN0ZXIgdXNlICItPSIuICBGb3IgZXhhbXBsZSwgdG8gcmVtb3ZlIHRoZSB1bmRlcnNjb3JlOiA+CisKKwk6c2V0IGlza2V5d29yZC09XworCTpzZXQgaXNrZXl3b3JkCis8CSAgaXNrZXl3b3JkPUAsNDgtNTcsMTkyLTI1NSwtIH4KKworVGhpcyB0aW1lIGEgY29tbWEgaXMgYXV0b21hdGljYWxseSBkZWxldGVkLgorCisKK1JPT00gRk9SIE1FU1NBR0VTCisKK1doZW4gVmltIHN0YXJ0cyB0aGVyZSBpcyBvbmUgbGluZSBhdCB0aGUgYm90dG9tIHRoYXQgaXMgdXNlZCBmb3IgbWVzc2FnZXMuCitXaGVuIGEgbWVzc2FnZSBpcyBsb25nLCBpdCBpcyBlaXRoZXIgdHJ1bmNhdGVkLCB0aHVzIHlvdSBjYW4gb25seSBzZWUgcGFydCBvZgoraXQsIG9yIHRoZSB0ZXh0IHNjcm9sbHMgYW5kIHlvdSBoYXZlIHRvIHByZXNzIDxFbnRlcj4gdG8gY29udGludWUuCisgICBZb3UgY2FuIHNldCB0aGUgJ2NtZGhlaWdodCcgb3B0aW9uIHRvIHRoZSBudW1iZXIgb2YgbGluZXMgdXNlZCBmb3IKK21lc3NhZ2VzLiAgRXhhbXBsZTogPgorCisJOnNldCBjbWRoZWlnaHQ9MworCitUaGlzIGRvZXMgbWVhbiB0aGVyZSBpcyBsZXNzIHJvb20gdG8gZWRpdCB0ZXh0LCB0aHVzIGl0J3MgYSBjb21wcm9taXNlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzA2LnR4dHwgIFVzaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMDYudHh0IGIvcnVudGltZS9kb2MvdXNyXzA2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMxNzYyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzA2LnR4dApAQCAtMCwwICsxLDI3NyBAQAorKnVzcl8wNi50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIEp1bCAxNAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICBVc2luZyBzeW50YXggaGlnaGxpZ2h0aW5nCisKKworQmxhY2sgYW5kIHdoaXRlIHRleHQgaXMgYm9yaW5nLiAgV2l0aCBjb2xvcnMgeW91ciBmaWxlIGNvbWVzIHRvIGxpZmUuICBUaGlzCitub3Qgb25seSBsb29rcyBuaWNlLCBpdCBhbHNvIHNwZWVkcyB1cCB5b3VyIHdvcmsuICBDaGFuZ2UgdGhlIGNvbG9ycyB1c2VkIGZvcgordGhlIGRpZmZlcmVudCBzb3J0cyBvZiB0ZXh0LiAgUHJpbnQgeW91ciB0ZXh0LCB3aXRoIHRoZSBjb2xvcnMgeW91IHNlZSBvbiB0aGUKK3NjcmVlbi4KKworfDA2LjF8CVN3aXRjaGluZyBpdCBvbgorfDA2LjJ8CU5vIG9yIHdyb25nIGNvbG9ycz8KK3wwNi4zfAlEaWZmZXJlbnQgY29sb3JzCit8MDYuNHwJV2l0aCBjb2xvcnMgb3Igd2l0aG91dCBjb2xvcnMKK3wwNi41fAlQcmludGluZyB3aXRoIGNvbG9ycworfDA2LjZ8CUZ1cnRoZXIgcmVhZGluZworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8wNy50eHR8ICBFZGl0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZQorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMDUudHh0fCAgU2V0IHlvdXIgc2V0dGluZ3MKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA2LjEqCVN3aXRjaGluZyBpdCBvbgorCitJdCBhbGwgc3RhcnRzIHdpdGggb25lIHNpbXBsZSBjb21tYW5kOiA+CisKKwk6c3ludGF4IGVuYWJsZQorCitUaGF0IHNob3VsZCB3b3JrIGluIG1vc3Qgc2l0dWF0aW9ucyB0byBnZXQgY29sb3IgaW4geW91ciBmaWxlcy4gIFZpbSB3aWxsCithdXRvbWFnaWNhbGx5IGRldGVjdCB0aGUgdHlwZSBvZiBmaWxlIGFuZCBsb2FkIHRoZSByaWdodCBzeW50YXggaGlnaGxpZ2h0aW5nLgorU3VkZGVubHkgY29tbWVudHMgYXJlIGJsdWUsIGtleXdvcmRzIGJyb3duIGFuZCBzdHJpbmdzIHJlZC4gIFRoaXMgbWFrZXMgaXQKK2Vhc3kgdG8gb3ZlcnZpZXcgdGhlIGZpbGUuICBBZnRlciBhIHdoaWxlIHlvdSB3aWxsIGZpbmQgdGhhdCBibGFjayZ3aGl0ZSB0ZXh0CitzbG93cyB5b3UgZG93biEKKworSWYgeW91IGFsd2F5cyB3YW50IHRvIHVzZSBzeW50YXggaGlnaGxpZ2h0aW5nLCBwdXQgdGhlICI6c3ludGF4IGVuYWJsZSIKK2NvbW1hbmQgaW4geW91ciB8dmltcmN8IGZpbGUuCisKK0lmIHlvdSB3YW50IHN5bnRheCBoaWdobGlnaHRpbmcgb25seSB3aGVuIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBjb2xvcnMsIHlvdQorY2FuIHB1dCB0aGlzIGluIHlvdXIgfHZpbXJjfCBmaWxlOiA+CisKKwlpZiAmdF9DbyA+IDEKKwkgICBzeW50YXggZW5hYmxlCisJZW5kaWYKKworSWYgeW91IHdhbnQgc3ludGF4IGhpZ2hsaWdodGluZyBvbmx5IGluIHRoZSBHVUkgdmVyc2lvbiwgcHV0IHRoZSAiOnN5bnRheAorZW5hYmxlIiBjb21tYW5kIGluIHlvdXIgfGd2aW1yY3wgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDYuMioJTm8gb3Igd3JvbmcgY29sb3JzPworCitUaGVyZSBjYW4gYmUgYSBudW1iZXIgb2YgcmVhc29ucyB3aHkgeW91IGRvbid0IHNlZSBjb2xvcnM6CisKKy0gWW91ciB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IGNvbG9ycy4KKwlWaW0gd2lsbCB1c2UgYm9sZCwgaXRhbGljIGFuZCB1bmRlcmxpbmVkIHRleHQsIGJ1dCB0aGlzIGRvZXNuJ3QgbG9vaworCXZlcnkgbmljZS4gIFlvdSBwcm9iYWJseSB3aWxsIHdhbnQgdG8gdHJ5IHRvIGdldCBhIHRlcm1pbmFsIHdpdGgKKwljb2xvcnMuICBGb3IgVW5peCwgSSByZWNvbW1lbmQgdGhlIHh0ZXJtIGZyb20gdGhlIFhGcmVlODYgcHJvamVjdDoKKwl8eGZyZWUteHRlcm18LgorCistIFlvdXIgdGVybWluYWwgZG9lcyBzdXBwb3J0IGNvbG9ycywgYnV0IFZpbSBkb2Vzbid0IGtub3cgdGhpcy4KKwlNYWtlIHN1cmUgeW91ciAkVEVSTSBzZXR0aW5nIGlzIGNvcnJlY3QuICBGb3IgZXhhbXBsZSwgd2hlbiB1c2luZyBhbgorCXh0ZXJtIHRoYXQgc3VwcG9ydHMgY29sb3JzOiA+CisKKwkJc2V0ZW52IFRFUk0geHRlcm0tY29sb3IKKzwKKwlvciAoZGVwZW5kaW5nIG9uIHlvdXIgc2hlbGwpOiA+CisKKwkJVEVSTT14dGVybS1jb2xvcjsgZXhwb3J0IFRFUk0KKworPAlUaGUgdGVybWluYWwgbmFtZSBtdXN0IG1hdGNoIHRoZSB0ZXJtaW5hbCB5b3UgYXJlIHVzaW5nLiAgSWYgaXQKKwlzdGlsbCBkb2Vzbid0IHdvcmssIGhhdmUgYSBsb29rIGF0IHx4dGVybS1jb2xvcnwsIHdoaWNoIHNob3dzIGEgZmV3CisJd2F5cyB0byBtYWtlIFZpbSBkaXNwbGF5IGNvbG9ycyAobm90IG9ubHkgZm9yIGFuIHh0ZXJtKS4KKworLSBUaGUgZmlsZSB0eXBlIGlzIG5vdCByZWNvZ25pemVkLgorCVZpbSBkb2Vzbid0IGtub3cgYWxsIGZpbGUgdHlwZXMsIGFuZCBzb21ldGltZXMgaXQncyBuZWFyIHRvIGltcG9zc2libGUKKwl0byB0ZWxsIHdoYXQgbGFuZ3VhZ2UgYSBmaWxlIHVzZXMuICBUcnkgdGhpcyBjb21tYW5kOiA+CisKKwkJOnNldCBmaWxldHlwZQorPAorCUlmIHRoZSByZXN1bHQgaXMgImZpbGV0eXBlPSIgdGhlbiB0aGUgcHJvYmxlbSBpcyBpbmRlZWQgdGhhdCBWaW0KKwlkb2Vzbid0IGtub3cgd2hhdCB0eXBlIG9mIGZpbGUgdGhpcyBpcy4gIFlvdSBjYW4gc2V0IHRoZSB0eXBlCisJbWFudWFsbHk6ID4KKworCQk6c2V0IGZpbGV0eXBlPWZvcnRyYW4KKworPAlUbyBzZWUgd2hpY2ggdHlwZXMgYXJlIGF2YWlsYWJsZSwgbG9vayBpbiB0aGUgZGlyZWN0b3J5CisJJFZJTVJVTlRJTUUvc3ludGF4LiAgRm9yIHRoZSBHVUkgeW91IGNhbiB1c2UgdGhlIFN5bnRheCBtZW51LgorCVNldHRpbmcgdGhlIGZpbGV0eXBlIGNhbiBhbHNvIGJlIGRvbmUgd2l0aCBhIHxtb2RlbGluZXwsIHNvIHRoYXQgdGhlCisJZmlsZSB3aWxsIGJlIGhpZ2hsaWdodGVkIGVhY2ggdGltZSB5b3UgZWRpdCBpdC4gIEZvciBleGFtcGxlLCB0aGlzCisJbGluZSBjYW4gYmUgdXNlZCBpbiBhIE1ha2VmaWxlIChwdXQgaXQgbmVhciB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZQorCWZpbGUpOiA+CisKKwkJIyB2aW06IHN5bnRheD1tYWtlCisKKzwJWW91IG1pZ2h0IGtub3cgaG93IHRvIGRldGVjdCB0aGUgZmlsZSB0eXBlIHlvdXJzZWxmLiAgT2Z0ZW4gdGhlIGZpbGUKKwluYW1lIGV4dGVuc2lvbiAoYWZ0ZXIgdGhlIGRvdCkgY2FuIGJlIHVzZWQuCisJU2VlIHxuZXctZmlsZXR5cGV8IGZvciBob3cgdG8gdGVsbCBWaW0gdG8gZGV0ZWN0IHRoYXQgZmlsZSB0eXBlLgorCistIFRoZXJlIGlzIG5vIGhpZ2hsaWdodGluZyBmb3IgeW91ciBmaWxlIHR5cGUuCisJWW91IGNvdWxkIHRyeSB1c2luZyBhIHNpbWlsYXIgZmlsZSB0eXBlIGJ5IG1hbnVhbGx5IHNldHRpbmcgaXQgYXMKKwltZW50aW9uZWQgYWJvdmUuICBJZiB0aGF0IGlzbid0IGdvb2QgZW5vdWdoLCB5b3UgY2FuIHdyaXRlIHlvdXIgb3duCisJc3ludGF4IGZpbGUsIHNlZSB8bXlzeW50YXhmaWxlfC4KKworCitPciB0aGUgY29sb3JzIGNvdWxkIGJlIHdyb25nOgorCistIFRoZSBjb2xvcmVkIHRleHQgaXMgdmVyeSBoYXJkIHRvIHJlYWQuCisJVmltIGd1ZXNzZXMgdGhlIGJhY2tncm91bmQgY29sb3IgdGhhdCB5b3UgYXJlIHVzaW5nLiAgSWYgaXQgaXMgYmxhY2sKKwkob3IgYW5vdGhlciBkYXJrIGNvbG9yKSBpdCB3aWxsIHVzZSBsaWdodCBjb2xvcnMgZm9yIHRleHQuICBJZiBpdCBpcworCXdoaXRlIChvciBhbm90aGVyIGxpZ2h0IGNvbG9yKSBpdCB3aWxsIHVzZSBkYXJrIGNvbG9ycyBmb3IgdGV4dC4gIElmCisJVmltIGd1ZXNzZWQgd3JvbmcgdGhlIHRleHQgd2lsbCBiZSBoYXJkIHRvIHJlYWQuICBUbyBzb2x2ZSB0aGlzLCBzZXQKKwl0aGUgJ2JhY2tncm91bmQnIG9wdGlvbi4gIEZvciBhIGRhcmsgYmFja2dyb3VuZDogPgorCisJCTpzZXQgYmFja2dyb3VuZD1kYXJrCisKKzwJQW5kIGZvciBhIGxpZ2h0IGJhY2tncm91bmQ6ID4KKworCQk6c2V0IGJhY2tncm91bmQ9bGlnaHQKKworPAlNYWtlIHN1cmUgeW91IHB1dCB0aGlzIF9iZWZvcmVfIHRoZSAiOnN5bnRheCBlbmFibGUiIGNvbW1hbmQsCisJb3RoZXJ3aXNlIHRoZSBjb2xvcnMgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQuICBZb3UgY291bGQgZG8KKwkiOnN5bnRheCByZXNldCIgYWZ0ZXIgc2V0dGluZyAnYmFja2dyb3VuZCcgdG8gbWFrZSBWaW0gc2V0IHRoZSBkZWZhdWx0CisJY29sb3JzIGFnYWluLgorCistIFRoZSBjb2xvcnMgYXJlIHdyb25nIHdoZW4gc2Nyb2xsaW5nIGJvdHRvbSB0byB0b3AuCisJVmltIGRvZXNuJ3QgcmVhZCB0aGUgd2hvbGUgZmlsZSB0byBwYXJzZSB0aGUgdGV4dC4gIEl0IHN0YXJ0cyBwYXJzaW5nCisJd2hlcmV2ZXIgeW91IGFyZSB2aWV3aW5nIHRoZSBmaWxlLiAgVGhhdCBzYXZlcyBhIGxvdCBvZiB0aW1lLCBidXQKKwlzb21ldGltZXMgdGhlIGNvbG9ycyBhcmUgd3JvbmcuICBBIHNpbXBsZSBmaXggaXMgaGl0dGluZyBDVFJMLUwuICBPcgorCXNjcm9sbCBiYWNrIGEgYml0IGFuZCB0aGVuIGZvcndhcmQgYWdhaW4uCisJRm9yIGEgcmVhbCBmaXgsIHNlZSB8OnN5bi1zeW5jfC4gIFNvbWUgc3ludGF4IGZpbGVzIGhhdmUgYSB3YXkgdG8gbWFrZQorCWl0IGxvb2sgZnVydGhlciBiYWNrLCBzZWUgdGhlIGhlbHAgZm9yIHRoZSBzcGVjaWZpYyBzeW50YXggZmlsZS4gIEZvcgorCWV4YW1wbGUsIHx0ZXgudmltfCBmb3IgdGhlIFRlWCBzeW50YXguCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA2LjMqCURpZmZlcmVudCBjb2xvcnMJCQkJKjpzeW4tZGVmYXVsdC1vdmVycmlkZSoKKworSWYgeW91IGRvbid0IGxpa2UgdGhlIGRlZmF1bHQgY29sb3JzLCB5b3UgY2FuIHNlbGVjdCBhbm90aGVyIGNvbG9yIHNjaGVtZS4gIEluCit0aGUgR1VJIHVzZSB0aGUgRWRpdC9Db2xvciBTY2hlbWUgbWVudS4gIFlvdSBjYW4gYWxzbyB0eXBlIHRoZSBjb21tYW5kOiA+CisKKwk6Y29sb3JzY2hlbWUgZXZlbmluZworCisiZXZlbmluZyIgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbG9yIHNjaGVtZS4gIFRoZXJlIGFyZSBzZXZlcmFsIG90aGVycyB5b3UgbWlnaHQKK3dhbnQgdG8gdHJ5IG91dC4gIExvb2sgaW4gdGhlIGRpcmVjdG9yeSAkVklNUlVOVElNRS9jb2xvcnMuCisKK1doZW4geW91IGZvdW5kIHRoZSBjb2xvciBzY2hlbWUgdGhhdCB5b3UgbGlrZSwgYWRkIHRoZSAiOmNvbG9yc2NoZW1lIiBjb21tYW5kCit0byB5b3VyIHx2aW1yY3wgZmlsZS4KKworWW91IGNvdWxkIGFsc28gd3JpdGUgeW91ciBvd24gY29sb3Igc2NoZW1lLiAgVGhpcyBpcyBob3cgeW91IGRvIGl0OgorCisxLiBTZWxlY3QgYSBjb2xvciBzY2hlbWUgdGhhdCBjb21lcyBjbG9zZS4gIENvcHkgdGhpcyBmaWxlIHRvIHlvdXIgb3duIFZpbQorICAgZGlyZWN0b3J5LiAgRm9yIFVuaXgsIHRoaXMgc2hvdWxkIHdvcms6ID4KKworCSFta2RpciB+Ly52aW0vY29sb3JzCisJIWNwICRWSU1SVU5USU1FL2NvbG9ycy9tb3JuaW5nLnZpbSB+Ly52aW0vY29sb3JzL21pbmUudmltCis8CisgICBUaGlzIGlzIGRvbmUgZnJvbSBWaW0sIGJlY2F1c2UgaXQga25vd3MgdGhlIHZhbHVlIG9mICRWSU1SVU5USU1FLgorCisyLiBFZGl0IHRoZSBjb2xvciBzY2hlbWUgZmlsZS4gIFRoZXNlIGVudHJpZXMgYXJlIHVzZWZ1bDoKKworCXRlcm0JCWF0dHJpYnV0ZXMgaW4gYSBCJlcgdGVybWluYWwKKwljdGVybQkJYXR0cmlidXRlcyBpbiBhIGNvbG9yIHRlcm1pbmFsCisJY3Rlcm1mZwkJZm9yZWdyb3VuZCBjb2xvciBpbiBhIGNvbG9yIHRlcm1pbmFsCisJY3Rlcm1iZwkJYmFja2dyb3VuZCBjb2xvciBpbiBhIGNvbG9yIHRlcm1pbmFsCisJZ3VpCQlhdHRyaWJ1dGVzIGluIHRoZSBHVUkKKwlndWlmZwkJZm9yZWdyb3VuZCBjb2xvciBpbiB0aGUgR1VJCisJZ3VpYmcJCWJhY2tncm91bmQgY29sb3IgaW4gdGhlIEdVSQorCisgICBGb3IgZXhhbXBsZSwgdG8gbWFrZSBjb21tZW50cyBncmVlbjogPgorCisJOmhpZ2hsaWdodCBDb21tZW50IGN0ZXJtZmc9Z3JlZW4gZ3VpZmc9Z3JlZW4KKzwKKyAgIEF0dHJpYnV0ZXMgeW91IGNhbiB1c2UgZm9yICJjdGVybSIgYW5kICJndWkiIGFyZSAiYm9sZCIgYW5kICJ1bmRlcmxpbmUiLgorICAgSWYgeW91IHdhbnQgYm90aCwgdXNlICJib2xkLHVuZGVybGluZSIuICBGb3IgZGV0YWlscyBzZWUgdGhlIHw6aGlnaGxpZ2h0fAorICAgY29tbWFuZC4KKworMy4gVGVsbCBWaW0gdG8gYWx3YXlzIHVzZSB5b3VyIGNvbG9yIHNjaGVtZS4gIFB1dCB0aGlzIGxpbmUgaW4geW91ciB8dmltcmN8OiA+CisKKwljb2xvcnNjaGVtZSBtaW5lCisKK0lmIHlvdSB3YW50IHRvIHNlZSB3aGF0IHRoZSBtb3N0IG9mdGVuIHVzZWQgY29sb3IgY29tYmluYXRpb25zIGxvb2sgbGlrZSwgdXNlCit0aGVzZSBjb21tYW5kczogPgorCisJOmVkaXQgJFZJTVJVTlRJTUUvc3ludGF4L2NvbG9ydGVzdC52aW0KKwk6c291cmNlICUKKworWW91IHdpbGwgc2VlIHRleHQgaW4gdmFyaW91cyBjb2xvciBjb21iaW5hdGlvbnMuICBZb3UgY2FuIGNoZWNrIHdoaWNoIG9uZXMgYXJlCityZWFkYWJsZSBhbmQgbG9vayBuaWNlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNi40KglXaXRoIGNvbG9ycyBvciB3aXRob3V0IGNvbG9ycworCitEaXNwbGF5aW5nIHRleHQgaW4gY29sb3IgdGFrZXMgYSBsb3Qgb2YgZWZmb3J0LiAgSWYgeW91IGZpbmQgdGhlIGRpc3BsYXlpbmcKK3RvbyBzbG93LCB5b3UgbWlnaHQgd2FudCB0byBkaXNhYmxlIHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGEgbW9tZW50OiA+CisKKwk6c3ludGF4IGNsZWFyCisKK1doZW4gZWRpdGluZyBhbm90aGVyIGZpbGUgKG9yIHRoZSBzYW1lIG9uZSkgdGhlIGNvbG9ycyB3aWxsIGNvbWUgYmFjay4KKworCQkJCQkJCSo6c3luLW9mZioKK0lmIHlvdSB3YW50IHRvIHN0b3AgaGlnaGxpZ2h0aW5nIGNvbXBsZXRlbHkgdXNlOiA+CisKKwk6c3ludGF4IG9mZgorCitUaGlzIHdpbGwgY29tcGxldGVseSBkaXNhYmxlIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIHJlbW92ZSBpdCBpbW1lZGlhdGVseSBmb3IKK2FsbCBidWZmZXJzLgorCisJCQkJCQkJKjpzeW4tbWFudWFsKgorSWYgeW91IHdhbnQgc3ludGF4IGhpZ2hsaWdodGluZyBvbmx5IGZvciBzcGVjaWZpYyBmaWxlcywgdXNlIHRoaXM6ID4KKworCTpzeW50YXggbWFudWFsCisKK1RoaXMgd2lsbCBlbmFibGUgdGhlIHN5bnRheCBoaWdobGlnaHRpbmcsIGJ1dCBub3Qgc3dpdGNoIGl0IG9uIGF1dG9tYXRpY2FsbHkKK3doZW4gc3RhcnRpbmcgdG8gZWRpdCBhIGJ1ZmZlci4gIFRvIHN3aXRjaCBoaWdobGlnaHRpbmcgb24gZm9yIHRoZSBjdXJyZW50CitidWZmZXIsIHNldCB0aGUgJ3N5bnRheCcgb3B0aW9uOiA+CisKKwk6c2V0IHN5bnRheD1PTgorPAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDYuNSoJUHJpbnRpbmcgd2l0aCBjb2xvcnMJCQkJKnN5bnRheC1wcmludGluZyoKKworSW4gdGhlIE1TLVdpbmRvd3MgdmVyc2lvbiB5b3UgY2FuIHByaW50IHRoZSBjdXJyZW50IGZpbGUgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKworCTpoYXJkY29weQorCitZb3Ugd2lsbCBnZXQgdGhlIHVzdWFsIHByaW50ZXIgZGlhbG9nLCB3aGVyZSB5b3UgY2FuIHNlbGVjdCB0aGUgcHJpbnRlciBhbmQgYQorZmV3IHNldHRpbmdzLiAgSWYgeW91IGhhdmUgYSBjb2xvciBwcmludGVyLCB0aGUgcGFwZXIgb3V0cHV0IHNob3VsZCBsb29rIHRoZQorc2FtZSBhcyB3aGF0IHlvdSBzZWUgaW5zaWRlIFZpbS4gIEJ1dCB3aGVuIHlvdSB1c2UgYSBkYXJrIGJhY2tncm91bmQgdGhlCitjb2xvcnMgd2lsbCBiZSBhZGp1c3RlZCB0byBsb29rIGdvb2Qgb24gd2hpdGUgcGFwZXIuCisKK1RoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHdheSBWaW0gcHJpbnRzOgorCSdwcmludGRldmljZScKKwkncHJpbnRoZWFkZXInCisJJ3ByaW50Zm9udCcKKwkncHJpbnRvcHRpb25zJworCitUbyBwcmludCBvbmx5IGEgcmFuZ2Ugb2YgbGluZXMsICB1c2UgVmlzdWFsIG1vZGUgdG8gc2VsZWN0IHRoZSBsaW5lcyBhbmQgdGhlbgordHlwZSB0aGUgY29tbWFuZDogPgorCisJdjEwMGo6aGFyZGNvcHkKKworInYiIHN0YXJ0cyBWaXN1YWwgbW9kZS4gICIxMDBqIiBtb3ZlcyBhIGh1bmRyZWQgbGluZXMgZG93biwgdGhleSB3aWxsIGJlCitoaWdobGlnaHRlZC4gIFRoZW4gIjpoYXJkY29weSIgd2lsbCBwcmludCB0aG9zZSBsaW5lcy4gIFlvdSBjYW4gdXNlIG90aGVyCitjb21tYW5kcyB0byBtb3ZlIGluIFZpc3VhbCBtb2RlLCBvZiBjb3Vyc2UuCisKK1RoaXMgYWxzbyB3b3JrcyBvbiBVbml4LCBpZiB5b3UgaGF2ZSBhIFBvc3RTY3JpcHQgcHJpbnRlci4gIE90aGVyd2lzZSwgeW91Cit3aWxsIGhhdmUgdG8gZG8gYSBiaXQgbW9yZSB3b3JrLiAgWW91IG5lZWQgdG8gY29udmVydCB0aGUgdGV4dCB0byBIVE1MIGZpcnN0LAorYW5kIHRoZW4gcHJpbnQgaXQgZnJvbSBhIHdlYiBicm93c2VyIHN1Y2ggYXMgTmV0c2NhcGUuCisKK0NvbnZlcnQgdGhlIGN1cnJlbnQgZmlsZSB0byBIVE1MIHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6c291cmNlICRWSU1SVU5USU1FL3N5bnRheC8yaHRtbC52aW0KKworWW91IHdpbGwgc2VlIGl0IGNydW5jaGluZyBhd2F5LCB0aGlzIGNhbiB0YWtlIHF1aXRlIGEgd2hpbGUgZm9yIGEgbGFyZ2UgZmlsZS4KK1NvbWUgdGltZSBsYXRlciBhbm90aGVyIHdpbmRvdyBzaG93cyB0aGUgSFRNTCBjb2RlLiAgTm93IHdyaXRlIHRoaXMgc29tZXdoZXJlCisoZG9lc24ndCBtYXR0ZXIgd2hlcmUsIHlvdSB0aHJvdyBpdCBhd2F5IGxhdGVyKToKKz4KKwk6d3JpdGUgbWFpbi5jLmh0bWwKKworT3BlbiB0aGlzIGZpbGUgaW4geW91ciBmYXZvcml0ZSBicm93c2VyIGFuZCBwcmludCBpdCBmcm9tIHRoZXJlLiAgSWYgYWxsIGdvZXMKK3dlbGwsIHRoZSBvdXRwdXQgc2hvdWxkIGxvb2sgZXhhY3RseSBhcyBpdCBkb2VzIGluIFZpbS4gIFNlZSB8Mmh0bWwudmltfCBmb3IKK2RldGFpbHMuICBEb24ndCBmb3JnZXQgdG8gZGVsZXRlIHRoZSBIVE1MIGZpbGUgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBpdC4KKworSW5zdGVhZCBvZiBwcmludGluZywgeW91IGNvdWxkIGFsc28gcHV0IHRoZSBIVE1MIGZpbGUgb24gYSB3ZWIgc2VydmVyLCBhbmQgbGV0CitvdGhlcnMgbG9vayBhdCB0aGUgY29sb3JlZCB0ZXh0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNi42KglGdXJ0aGVyIHJlYWRpbmcKKworfHVzcl80NC50eHR8ICBZb3VyIG93biBzeW50YXggaGlnaGxpZ2h0ZWQuCit8c3ludGF4fCAgICAgIEFsbCB0aGUgZGV0YWlscy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8wNy50eHR8ICBFZGl0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZQorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8wNy50eHQgYi9ydW50aW1lL2RvYy91c3JfMDcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTk3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMDcudHh0CkBAIC0wLDAgKzEsNDc5IEBACisqdXNyXzA3LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWFyIDEyCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgIEVkaXRpbmcgbW9yZSB0aGFuIG9uZSBmaWxlCisKKworTm8gbWF0dGVyIGhvdyBtYW55IGZpbGVzIHlvdSBoYXZlLCB5b3UgY2FuIGVkaXQgdGhlbSB3aXRob3V0IGxlYXZpbmcgVmltLgorRGVmaW5lIGEgbGlzdCBvZiBmaWxlcyB0byB3b3JrIG9uIGFuZCBqdW1wIGZyb20gb25lIHRvIHRoZSBvdGhlci4gIENvcHkgdGV4dAorZnJvbSBvbmUgZmlsZSBhbmQgcHV0IGl0IGluIGFub3RoZXIgb25lLgorCit8MDcuMXwJRWRpdCBhbm90aGVyIGZpbGUKK3wwNy4yfAlBIGxpc3Qgb2YgZmlsZXMKK3wwNy4zfAlKdW1waW5nIGZyb20gZmlsZSB0byBmaWxlCit8MDcuNHwJQmFja3VwIGZpbGVzCit8MDcuNXwJQ29weSB0ZXh0IGJldHdlZW4gZmlsZXMKK3wwNy42fAlWaWV3aW5nIGEgZmlsZQorfDA3Ljd8CUNoYW5naW5nIHRoZSBmaWxlIG5hbWUKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMDgudHh0fCAgU3BsaXR0aW5nIHdpbmRvd3MKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzA2LnR4dHwgIFVzaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA3LjEqCUVkaXQgYW5vdGhlciBmaWxlCisKK1NvIGZhciB5b3UgaGFkIHRvIHN0YXJ0IFZpbSBmb3IgZXZlcnkgZmlsZSB5b3Ugd2FudGVkIHRvIGVkaXQuICBUaGVyZSBpcyBhCitzaW1wbGVyIHdheS4gIFRvIHN0YXJ0IGVkaXRpbmcgYW5vdGhlciBmaWxlLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6ZWRpdCBmb28udHh0CisKK1lvdSBjYW4gdXNlIGFueSBmaWxlIG5hbWUgaW5zdGVhZCBvZiAiZm9vLnR4dCIuICBWaW0gd2lsbCBjbG9zZSB0aGUgY3VycmVudAorZmlsZSBhbmQgb3BlbiB0aGUgbmV3IG9uZS4gIElmIHRoZSBjdXJyZW50IGZpbGUgaGFzIHVuc2F2ZWQgY2hhbmdlcywgaG93ZXZlciwKK1ZpbSBkaXNwbGF5cyBhbiBlcnJvciBtZXNzYWdlIGFuZCBkb2VzIG5vdCBvcGVuIHRoZSBuZXcgZmlsZToKKworCUUzNzogTm8gd3JpdGUgc2luY2UgbGFzdCBjaGFuZ2UgKHVzZSAhIHRvIG92ZXJyaWRlKSB+CisKKwlOb3RlOgorCVZpbSBwdXRzIGFuIGVycm9yIElEIGF0IHRoZSBzdGFydCBvZiBlYWNoIGVycm9yIG1lc3NhZ2UuICBJZiB5b3UgZG8KKwlub3QgdW5kZXJzdGFuZCB0aGUgbWVzc2FnZSBvciB3aGF0IGNhdXNlZCBpdCwgbG9vayBpbiB0aGUgaGVscCBzeXN0ZW0KKwlmb3IgdGhpcyBJRC4gIEluIHRoaXMgY2FzZTogPgorCisJCTpoZWxwIEUzNworCitBdCB0aGlzIHBvaW50LCB5b3UgaGF2ZSBhIG51bWJlciBvZiBhbHRlcm5hdGl2ZXMuICBZb3UgY2FuIHdyaXRlIHRoZSBmaWxlCit1c2luZyB0aGlzIGNvbW1hbmQ6ID4KKworCTp3cml0ZQorCitPciB5b3UgY2FuIGZvcmNlIFZpbSB0byBkaXNjYXJkIHlvdXIgY2hhbmdlcyBhbmQgZWRpdCB0aGUgbmV3IGZpbGUsIHVzaW5nIHRoZQorZm9yY2UgKCEpIGNoYXJhY3RlcjogPgorCisJOmVkaXQhIGZvby50eHQKKworSWYgeW91IHdhbnQgdG8gZWRpdCBhbm90aGVyIGZpbGUsIGJ1dCBub3Qgd3JpdGUgdGhlIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQKK2ZpbGUgeWV0LCB5b3UgY2FuIG1ha2UgaXQgaGlkZGVuOiA+CisKKwk6aGlkZSBlZGl0IGZvby50eHQKKworVGhlIHRleHQgd2l0aCBjaGFuZ2VzIGlzIHN0aWxsIHRoZXJlLCBidXQgeW91IGNhbid0IHNlZSBpdC4gIFRoaXMgaXMgZnVydGhlcgorZXhwbGFpbmVkIGluIHNlY3Rpb24gfDIyLjR8OiBUaGUgYnVmZmVyIGxpc3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA3LjIqCUEgbGlzdCBvZiBmaWxlcworCitZb3UgY2FuIHN0YXJ0IFZpbSB0byBlZGl0IGEgc2VxdWVuY2Ugb2YgZmlsZXMuICBGb3IgZXhhbXBsZTogPgorCisJdmltIG9uZS5jIHR3by5jIHRocmVlLmMKKworVGhpcyBjb21tYW5kIHN0YXJ0cyBWaW0gYW5kIHRlbGxzIGl0IHRoYXQgeW91IHdpbGwgYmUgZWRpdGluZyB0aHJlZSBmaWxlcy4KK1ZpbSBkaXNwbGF5cyBqdXN0IHRoZSBmaXJzdCBmaWxlLiAgQWZ0ZXIgeW91IGhhdmUgZG9uZSB5b3VyIHRoaW5nIGluIHRoaXMKK2ZpbGUsIHRvIGVkaXQgdGhlIG5leHQgZmlsZSB5b3UgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOm5leHQKKworSWYgeW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZSBjdXJyZW50IGZpbGUsIHlvdSB3aWxsIGdldCBhbiBlcnJvcgorbWVzc2FnZSBhbmQgdGhlICI6bmV4dCIgd2lsbCBub3Qgd29yay4gIFRoaXMgaXMgdGhlIHNhbWUgcHJvYmxlbSBhcyB3aXRoCisiOmVkaXQiIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4gIFRvIGFiYW5kb24gdGhlIGNoYW5nZXM6ID4KKworCTpuZXh0IQorCitCdXQgbW9zdGx5IHlvdSB3YW50IHRvIHNhdmUgdGhlIGNoYW5nZXMgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgZmlsZS4gIFRoZXJlCitpcyBhIHNwZWNpYWwgY29tbWFuZCBmb3IgdGhpczogPgorCisJOnduZXh0CisKK1RoaXMgZG9lcyB0aGUgc2FtZSBhcyB1c2luZyB0d28gc2VwYXJhdGUgY29tbWFuZHM6ID4KKworCTp3cml0ZQorCTpuZXh0CisKKworV0hFUkUgQU0gST8KKworVG8gc2VlIHdoaWNoIGZpbGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QgeW91IGFyZSBlZGl0aW5nLCBsb29rIGluIHRoZSB3aW5kb3cKK3RpdGxlLiAgSXQgc2hvdWxkIHNob3cgc29tZXRoaW5nIGxpa2UgIigyIG9mIDMpIi4gIFRoaXMgbWVhbnMgeW91IGFyZSBlZGl0aW5nCit0aGUgc2Vjb25kIGZpbGUgb3V0IG9mIHRocmVlIGZpbGVzLgorICAgSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBsaXN0IG9mIGZpbGVzLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6YXJncworCitUaGlzIGlzIHNob3J0IGZvciAiYXJndW1lbnRzIi4gIFRoZSBvdXRwdXQgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisKKwlvbmUuYyBbdHdvLmNdIHRocmVlLmMgfgorCitUaGVzZSBhcmUgdGhlIGZpbGVzIHlvdSBzdGFydGVkIFZpbSB3aXRoLiAgVGhlIG9uZSB5b3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nLAorInR3by5jIiwgaXMgaW4gc3F1YXJlIGJyYWNrZXRzLgorCisKK01PVklORyBUTyBPVEhFUiBBUkdVTUVOVFMKKworVG8gZ28gYmFjayBvbmUgZmlsZTogPgorCisJOnByZXZpb3VzCisKK1RoaXMgaXMganVzdCBsaWtlIHRoZSAiOm5leHQiIGNvbW1hbmQsIGV4Y2VwdCB0aGF0IGl0IG1vdmVzIGluIHRoZSBvdGhlcgorZGlyZWN0aW9uLiAgQWdhaW4sIHRoZXJlIGlzIGEgc2hvcnRjdXQgY29tbWFuZCBmb3Igd2hlbiB5b3Ugd2FudCB0byB3cml0ZSB0aGUKK2ZpbGUgZmlyc3Q6ID4KKworCTp3cHJldmlvdXMKKworVG8gbW92ZSB0byB0aGUgdmVyeSBsYXN0IGZpbGUgaW4gdGhlIGxpc3Q6ID4KKworCTpsYXN0CisKK0FuZCB0byBtb3ZlIGJhY2sgdG8gdGhlIGZpcnN0IG9uZSBhZ2FpbjogPgorCisJOmZpcnN0CisKK1RoZXJlIGlzIG5vICI6d2xhc3QiIG9yICI6d2ZpcnN0IiBjb21tYW5kIHRob3VnaCEKKworWW91IGNhbiB1c2UgYSBjb3VudCBmb3IgIjpuZXh0IiBhbmQgIjpwcmV2aW91cyIuICBUbyBza2lwIHR3byBmaWxlcyBmb3J3YXJkOiA+CisKKwk6Mm5leHQKKworCitBVVRPTUFUSUMgV1JJVElORworCitXaGVuIG1vdmluZyBhcm91bmQgdGhlIGZpbGVzIGFuZCBtYWtpbmcgY2hhbmdlcywgeW91IGhhdmUgdG8gcmVtZW1iZXIgdG8gdXNlCisiOndyaXRlIi4gIE90aGVyd2lzZSB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIElmIHlvdSBhcmUgc3VyZSB5b3UKK2Fsd2F5cyB3YW50IHRvIHdyaXRlIG1vZGlmaWVkIGZpbGVzLCB5b3UgY2FuIHRlbGwgVmltIHRvIGF1dG9tYXRpY2FsbHkgd3JpdGUKK3RoZW06ID4KKworCTpzZXQgYXV0b3dyaXRlCisKK1doZW4geW91IGFyZSBlZGl0aW5nIGEgZmlsZSB3aGljaCB5b3UgbWF5IG5vdCB3YW50IHRvIHdyaXRlLCBzd2l0Y2ggaXQgb2ZmCithZ2FpbjogPgorCisJOnNldCBub2F1dG93cml0ZQorCisKK0VESVRJTkcgQU5PVEhFUiBMSVNUIE9GIEZJTEVTCisKK1lvdSBjYW4gcmVkZWZpbmUgdGhlIGxpc3Qgb2YgZmlsZXMgd2l0aG91dCB0aGUgbmVlZCB0byBleGl0IFZpbSBhbmQgc3RhcnQgaXQKK2FnYWluLiAgVXNlIHRoaXMgY29tbWFuZCB0byBlZGl0IHRocmVlIG90aGVyIGZpbGVzOiA+CisKKwk6YXJncyBmaXZlLmMgc2l4LmMgc2V2ZW4uaAorCitPciB1c2UgYSB3aWxkY2FyZCwgbGlrZSBpdCdzIHVzZWQgaW4gdGhlIHNoZWxsOiA+CisKKwk6YXJncyAqLnR4dAorCitWaW0gd2lsbCB0YWtlIHlvdSB0byB0aGUgZmlyc3QgZmlsZSBpbiB0aGUgbGlzdC4gIEFnYWluLCBpZiB0aGUgY3VycmVudCBmaWxlCitoYXMgY2hhbmdlcywgeW91IGNhbiBlaXRoZXIgd3JpdGUgdGhlIGZpbGUgZmlyc3QsIG9yIHVzZSAiOmFyZ3MhIiAod2l0aCAhCithZGRlZCkgdG8gYWJhbmRvbiB0aGUgY2hhbmdlcy4KKworCitESUQgWU9VIEVESVQgVEhFIExBU1QgRklMRT8KKwkJCQkJCQkqYXJnbGlzdC1xdWl0KgorV2hlbiB5b3UgdXNlIGEgbGlzdCBvZiBmaWxlcywgVmltIGFzc3VtZXMgeW91IHdhbnQgdG8gZWRpdCB0aGVtIGFsbC4gIFRvCitwcm90ZWN0IHlvdSBmcm9tIGV4aXRpbmcgdG9vIGVhcmx5LCB5b3Ugd2lsbCBnZXQgdGhpcyBlcnJvciB3aGVuIHlvdSBkaWRuJ3QKK2VkaXQgdGhlIGxhc3QgZmlsZSBpbiB0aGUgbGlzdCB5ZXQ6CisKKwlFMTczOiA0NiBtb3JlIGZpbGVzIHRvIGVkaXQgfgorCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZXhpdCwganVzdCBkbyBpdCBhZ2Fpbi4gIFRoZW4gaXQgd2lsbCB3b3JrIChidXQgbm90IHdoZW4KK3lvdSBkaWQgb3RoZXIgY29tbWFuZHMgaW4gYmV0d2VlbikuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA3LjMqCUp1bXBpbmcgZnJvbSBmaWxlIHRvIGZpbGUKKworVG8gcXVpY2tseSBqdW1wIGJldHdlZW4gdHdvIGZpbGVzLCBwcmVzcyBDVFJMLV4gKG9uIEVuZ2xpc2gtVVMga2V5Ym9hcmRzIHRoZSBeCitpcyBhYm92ZSB0aGUgNiBrZXkpLiAgRXhhbXBsZTogPgorCisJOmFyZ3Mgb25lLmMgdHdvLmMgdGhyZWUuYworCitZb3UgYXJlIG5vdyBpbiBvbmUuYy4gPgorCisJOm5leHQKKworTm93IHlvdSBhcmUgaW4gdHdvLmMuICBOb3cgdXNlIENUUkwtXiB0byBnbyBiYWNrIHRvIG9uZS5jLiAgQW5vdGhlciBDVFJMLV4gYW5kCit5b3UgYXJlIGJhY2sgaW4gdHdvLmMuICBBbm90aGVyIENUUkwtXiBhbmQgeW91IGFyZSBpbiBvbmUuYyBhZ2Fpbi4gIElmIHlvdSBub3cKK2RvOiA+CisKKwk6bmV4dAorCitZb3UgYXJlIGluIHRocmVlLmMuICBOb3RpY2UgdGhhdCB0aGUgQ1RSTC1eIGNvbW1hbmQgZG9lcyBub3QgY2hhbmdlIHRoZSBpZGVhCitvZiB3aGVyZSB5b3UgYXJlIGluIHRoZSBsaXN0IG9mIGZpbGVzLiAgT25seSBjb21tYW5kcyBsaWtlICI6bmV4dCIgYW5kCisiOnByZXZpb3VzIiBkbyB0aGF0LgorCitUaGUgZmlsZSB5b3Ugd2VyZSBwcmV2aW91c2x5IGVkaXRpbmcgaXMgY2FsbGVkIHRoZSAiYWx0ZXJuYXRlIiBmaWxlLiAgV2hlbiB5b3UKK2p1c3Qgc3RhcnRlZCBWaW0gQ1RSTC1eIHdpbGwgbm90IHdvcmssIHNpbmNlIHRoZXJlIGlzbid0IGEgcHJldmlvdXMgZmlsZS4KKworCitQUkVERUZJTkVEIE1BUktTCisKK0FmdGVyIGp1bXBpbmcgdG8gYW5vdGhlciBmaWxlLCB5b3UgY2FuIHVzZSB0d28gcHJlZGVmaW5lZCBtYXJrcyB3aGljaCBhcmUgdmVyeQordXNlZnVsOiA+CisKKwlgIgorCitUaGlzIHRha2VzIHlvdSB0byB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIGN1cnNvciB3YXMgd2hlbiB5b3UgbGVmdCB0aGUgZmlsZS4KK0Fub3RoZXIgbWFyayB0aGF0IGlzIHJlbWVtYmVyZWQgaXMgdGhlIHBvc2l0aW9uIHdoZXJlIHlvdSBtYWRlIHRoZSBsYXN0CitjaGFuZ2U6ID4KKworCWAuCisKK1N1cHBvc2UgeW91IGFyZSBlZGl0aW5nIHRoZSBmaWxlICJvbmUudHh0Ii4gIFNvbWV3aGVyZSBoYWxmd2F5IHRoZSBmaWxlIHlvdQordXNlICJ4IiB0byBkZWxldGUgYSBjaGFyYWN0ZXIuICBUaGVuIHlvdSBnbyB0byB0aGUgbGFzdCBsaW5lIHdpdGggIkciIGFuZAord3JpdGUgdGhlIGZpbGUgd2l0aCAiOnciLiAgWW91IGVkaXQgc2V2ZXJhbCBvdGhlciBmaWxlcywgYW5kIHRoZW4gdXNlICI6ZWRpdAorb25lLnR4dCIgdG8gY29tZSBiYWNrIHRvICJvbmUudHh0Ii4gIElmIHlvdSBub3cgdXNlIGAiIFZpbSBqdW1wcyB0byB0aGUgbGFzdAorbGluZSBvZiB0aGUgZmlsZS4gIFVzaW5nIGAuIHRha2VzIHlvdSB0byB0aGUgcG9zaXRpb24gd2hlcmUgeW91IGRlbGV0ZWQgdGhlCitjaGFyYWN0ZXIuICBFdmVuIHdoZW4geW91IG1vdmUgYXJvdW5kIGluIHRoZSBmaWxlIGAiIGFuZCBgLiB3aWxsIHRha2UgeW91IHRvCit0aGUgcmVtZW1iZXJlZCBwb3NpdGlvbi4gIEF0IGxlYXN0IHVudGlsIHlvdSBtYWtlIGFub3RoZXIgY2hhbmdlIG9yIGxlYXZlIHRoZQorZmlsZS4KKworCitGSUxFIE1BUktTCisKK0luIGNoYXB0ZXIgNCB3YXMgZXhwbGFpbmVkIGhvdyB5b3UgY2FuIHBsYWNlIGEgbWFyayBpbiBhIGZpbGUgd2l0aCAibXgiIGFuZAoranVtcCB0byB0aGF0IHBvc2l0aW9uIHdpdGggImB4Ii4gIFRoYXQgd29ya3Mgd2l0aGluIG9uZSBmaWxlLiAgSWYgeW91IGVkaXQKK2Fub3RoZXIgZmlsZSBhbmQgcGxhY2UgbWFya3MgdGhlcmUsIHRoZXNlIGFyZSBzcGVjaWZpYyBmb3IgdGhhdCBmaWxlLiAgVGh1cworZWFjaCBmaWxlIGhhcyBpdHMgb3duIHNldCBvZiBtYXJrcywgdGhleSBhcmUgbG9jYWwgdG8gdGhlIGZpbGUuCisgICBTbyBmYXIgd2Ugd2VyZSB1c2luZyBtYXJrcyB3aXRoIGEgbG93ZXJjYXNlIGxldHRlci4gIFRoZXJlIGFyZSBhbHNvIG1hcmtzCit3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuICBUaGVzZSBhcmUgZ2xvYmFsLCB0aGV5IGNhbiBiZSB1c2VkIGZyb20gYW55IGZpbGUuCitGb3IgZXhhbXBsZSBzdXBwb3NlIHRoYXQgd2UgYXJlIGVkaXRpbmcgdGhlIGZpbGUgImZvby50eHQiLiAgR28gdG8gaGFsZndheSB0aGUKK2ZpbGUgKCI1MCUiKSBhbmQgcGxhY2UgdGhlIEYgbWFyayB0aGVyZSAoRiBmb3IgZm9vKTogPgorCisJNTAlbUYKKworTm93IGVkaXQgdGhlIGZpbGUgImJhci50eHQiIGFuZCBwbGFjZSB0aGUgQiBtYXJrIChCIGZvciBiYXIpIGF0IGl0cyBsYXN0IGxpbmU6Cis+CisJR21CCisKK05vdyB5b3UgY2FuIHVzZSB0aGUgIidGIiBjb21tYW5kIHRvIGp1bXAgYmFjayB0byBoYWxmd2F5IGZvby50eHQuICBPciBlZGl0IHlldAorYW5vdGhlciBmaWxlLCB0eXBlICInQiIgYW5kIHlvdSBhcmUgYXQgdGhlIGVuZCBvZiBiYXIudHh0IGFnYWluLgorCitUaGUgZmlsZSBtYXJrcyBhcmUgcmVtZW1iZXJlZCB1bnRpbCB0aGV5IGFyZSBwbGFjZWQgc29tZXdoZXJlIGVsc2UuICBUaHVzIHlvdQorY2FuIHBsYWNlIHRoZSBtYXJrLCBkbyBob3VycyBvZiBlZGl0aW5nIGFuZCBzdGlsbCBiZSBhYmxlIHRvIGp1bXAgYmFjayB0byB0aGF0CittYXJrLgorICAgSXQncyBvZnRlbiB1c2VmdWwgdG8gdGhpbmsgb2YgYSBzaW1wbGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBtYXJrIGxldHRlcgorYW5kIHdoZXJlIGl0IGlzIHBsYWNlZC4gIEZvciBleGFtcGxlLCB1c2UgdGhlIEggbWFyayBpbiBhIGhlYWRlciBmaWxlLCBNIGluCithIE1ha2VmaWxlIGFuZCBDIGluIGEgQyBjb2RlIGZpbGUuCisKK1RvIHNlZSB3aGVyZSBhIHNwZWNpZmljIG1hcmsgaXMsIGdpdmUgYW4gYXJndW1lbnQgdG8gdGhlICI6bWFya3MiIGNvbW1hbmQ6ID4KKworCTptYXJrcyBNCisKK1lvdSBjYW4gYWxzbyBnaXZlIHNldmVyYWwgYXJndW1lbnRzOiA+CisKKwk6bWFya3MgTUNQCisKK0Rvbid0IGZvcmdldCB0aGF0IHlvdSBjYW4gdXNlIENUUkwtTyBhbmQgQ1RSTC1JIHRvIGp1bXAgdG8gb2xkZXIgYW5kIG5ld2VyCitwb3NpdGlvbnMgd2l0aG91dCBwbGFjaW5nIG1hcmtzIHRoZXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowNy40KglCYWNrdXAgZmlsZXMKKworVXN1YWxseSBWaW0gZG9lcyBub3QgcHJvZHVjZSBhIGJhY2t1cCBmaWxlLiBJZiB5b3Ugd2FudCB0byBoYXZlIG9uZSwgYWxsIHlvdQorbmVlZCB0byBkbyBpcyBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOnNldCBiYWNrdXAKKworVGhlIG5hbWUgb2YgdGhlIGJhY2t1cCBmaWxlIGlzIHRoZSBvcmlnaW5hbCBmaWxlIHdpdGggYSAgfiAgYWRkZWQgdG8gdGhlIGVuZC4KK0lmIHlvdXIgZmlsZSBpcyBuYW1lZCBkYXRhLnR4dCwgZm9yIGV4YW1wbGUsIHRoZSBiYWNrdXAgZmlsZSBuYW1lIGlzCitkYXRhLnR4dH4uCisgICBJZiB5b3UgZG8gbm90IGxpa2UgdGhlIGZhY3QgdGhhdCB0aGUgYmFja3VwIGZpbGVzIGVuZCB3aXRoIH4sIHlvdSBjYW4KK2NoYW5nZSB0aGUgZXh0ZW5zaW9uOiA+CisKKwk6c2V0IGJhY2t1cGV4dD0uYmFrCisKK1RoaXMgd2lsbCB1c2UgZGF0YS50eHQuYmFrIGluc3RlYWQgb2YgZGF0YS50eHR+LgorICAgQW5vdGhlciBvcHRpb24gdGhhdCBtYXR0ZXJzIGhlcmUgaXMgJ2JhY2t1cGRpcicuICBJdCBzcGVjaWZpZXMgd2hlcmUgdGhlCitiYWNrdXAgZmlsZSBpcyB3cml0dGVuLiAgVGhlIGRlZmF1bHQsIHRvIHdyaXRlIHRoZSBiYWNrdXAgaW4gdGhlIHNhbWUKK2RpcmVjdG9yeSBhcyB0aGUgb3JpZ2luYWwgZmlsZSwgd2lsbCBtb3N0bHkgYmUgdGhlIHJpZ2h0IHRoaW5nLgorCisJTm90ZToKKwlXaGVuIHRoZSAnYmFja3VwJyBvcHRpb24gaXNuJ3Qgc2V0IGJ1dCB0aGUgJ3dyaXRlYmFja3VwJyBpcywgVmltIHdpbGwKKwlzdGlsbCBjcmVhdGUgYSBiYWNrdXAgZmlsZS4gIEhvd2V2ZXIsIGl0IGlzIGRlbGV0ZWQgYXMgc29vbiBhcyB3cml0aW5nCisJdGhlIGZpbGUgd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICBUaGlzIGZ1bmN0aW9ucyBhcyBhIHNhZmV0eQorCWFnYWluc3QgbG9zaW5nIHlvdXIgb3JpZ2luYWwgZmlsZSB3aGVuIHdyaXRpbmcgZmFpbHMgaW4gc29tZSB3YXkgKGRpc2sKKwlmdWxsIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXVzZTsgYmVpbmcgaGl0IGJ5IGxpZ2h0bmluZyBtaWdodCBiZQorCWFub3RoZXIsIGFsdGhvdWdoIGxlc3MgY29tbW9uKS4KKworCitLRUVQSU5HIFRIRSBPUklHSU5BTCBGSUxFCisKK0lmIHlvdSBhcmUgZWRpdGluZyBzb3VyY2UgZmlsZXMsIHlvdSBtaWdodCB3YW50IHRvIGtlZXAgdGhlIGZpbGUgYmVmb3JlIHlvdQorbWFrZSBhbnkgY2hhbmdlcy4gIEJ1dCB0aGUgYmFja3VwIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbiBlYWNoIHRpbWUgeW91IHdyaXRlCit0aGUgZmlsZS4gIFRodXMgaXQgb25seSBjb250YWlucyB0aGUgcHJldmlvdXMgdmVyc2lvbiwgbm90IHRoZSBmaXJzdCBvbmUuCisgICBUbyBtYWtlIFZpbSBrZWVwIHRoZSBvcmlnaW5hbCBmaWxlLCBzZXQgdGhlICdwYXRjaG1vZGUnIG9wdGlvbi4gIFRoaXMKK3NwZWNpZmllcyB0aGUgZXh0ZW5zaW9uIHVzZWQgZm9yIHRoZSBmaXJzdCBiYWNrdXAgb2YgYSBjaGFuZ2VkIGZpbGUuICBVc3VhbGx5Cit5b3Ugd291bGQgZG8gdGhpczogPgorCisJOnNldCBwYXRjaG1vZGU9Lm9yaWcKKworV2hlbiB5b3Ugbm93IGVkaXQgdGhlIGZpbGUgZGF0YS50eHQgZm9yIHRoZSBmaXJzdCB0aW1lLCBtYWtlIGNoYW5nZXMgYW5kIHdyaXRlCit0aGUgZmlsZSwgVmltIHdpbGwga2VlcCBhIGNvcHkgb2YgdGhlIHVuY2hhbmdlZCBmaWxlIHVuZGVyIHRoZSBuYW1lCisiZGF0YS50eHQub3JpZyIuCisgICBJZiB5b3UgbWFrZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlIGZpbGUsIFZpbSB3aWxsIG5vdGljZSB0aGF0CisiZGF0YS50eHQub3JpZyIgYWxyZWFkeSBleGlzdHMgYW5kIGxlYXZlIGl0IGFsb25lLiAgRnVydGhlciBiYWNrdXAgZmlsZXMgd2lsbAordGhlbiBiZSBjYWxsZWQgImRhdGEudHh0fiIgKG9yIHdoYXRldmVyIHlvdSBzcGVjaWZpZWQgd2l0aCAnYmFja3VwZXh0JykuCisgICBJZiB5b3UgbGVhdmUgJ3BhdGNobW9kZScgZW1wdHkgKHRoYXQgaXMgdGhlIGRlZmF1bHQpLCB0aGUgb3JpZ2luYWwgZmlsZQord2lsbCBub3QgYmUga2VwdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDcuNSoJQ29weSB0ZXh0IGJldHdlZW4gZmlsZXMKKworVGhpcyBleHBsYWlucyBob3cgdG8gY29weSB0ZXh0IGZyb20gb25lIGZpbGUgdG8gYW5vdGhlci4gIExldCdzIHN0YXJ0IHdpdGggYQorc2ltcGxlIGV4YW1wbGUuICBFZGl0IHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHRleHQgeW91IHdhbnQgdG8gY29weS4gIE1vdmUKK3RoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGFuZCBwcmVzcyAidiIuICBUaGlzIHN0YXJ0cyBWaXN1YWwgbW9kZS4KK05vdyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dCBhbmQgcHJlc3MgInkiLiAgVGhpcyB5YW5rcyAoY29waWVzKQordGhlIHNlbGVjdGVkIHRleHQuCisgICBUbyBjb3B5IHRoZSBhYm92ZSBwYXJhZ3JhcGgsIHlvdSB3b3VsZCBkbzogPgorCisJOmVkaXQgdGhpc2ZpbGUKKwkvVGhpcworCXZqampqJHkKKworTm93IGVkaXQgdGhlIGZpbGUgeW91IHdhbnQgdG8gcHV0IHRoZSB0ZXh0IGluLiAgTW92ZSB0aGUgY3Vyc29yIHRvIHRoZQorY2hhcmFjdGVyIHdoZXJlIHlvdSB3YW50IHRoZSB0ZXh0IHRvIGFwcGVhciBhZnRlci4gIFVzZSAicCIgdG8gcHV0IHRoZSB0ZXh0Cit0aGVyZS4gPgorCTplZGl0IG90aGVyZmlsZQorCS9UaGVyZQorCXAKKworT2YgY291cnNlIHlvdSBjYW4gdXNlIG1hbnkgb3RoZXIgY29tbWFuZHMgdG8geWFuayB0aGUgdGV4dC4gIEZvciBleGFtcGxlLCB0bworc2VsZWN0IHdob2xlIGxpbmVzIHN0YXJ0IFZpc3VhbCBtb2RlIHdpdGggIlYiLiAgT3IgdXNlIENUUkwtViB0byBzZWxlY3QgYQorcmVjdGFuZ3VsYXIgYmxvY2suICBPciB1c2UgIlkiIHRvIHlhbmsgYSBzaW5nbGUgbGluZSwgInlhdyIgdG8geWFuay1hLXdvcmQsCitldGMuCisgICBUaGUgInAiIGNvbW1hbmQgcHV0cyB0aGUgdGV4dCBhZnRlciB0aGUgY3Vyc29yLiAgVXNlICJQIiB0byBwdXQgdGhlIHRleHQKK2JlZm9yZSB0aGUgY3Vyc29yLiAgTm90aWNlIHRoYXQgVmltIHJlbWVtYmVycyBpZiB5b3UgeWFua2VkIGEgd2hvbGUgbGluZSBvciBhCitibG9jaywgYW5kIHB1dHMgaXQgYmFjayB0aGF0IHdheS4KKworCitVU0lORyBSRUdJU1RFUlMKKworV2hlbiB5b3Ugd2FudCB0byBjb3B5IHNldmVyYWwgcGllY2VzIG9mIHRleHQgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyLCBoYXZpbmcKK3RvIHN3aXRjaCBiZXR3ZWVuIHRoZSBmaWxlcyBhbmQgd3JpdGluZyB0aGUgdGFyZ2V0IGZpbGUgdGFrZXMgYSBsb3Qgb2YgdGltZS4KK1RvIGF2b2lkIHRoaXMsIGNvcHkgZWFjaCBwaWVjZSBvZiB0ZXh0IHRvIGl0cyBvd24gcmVnaXN0ZXIuCisgICBBIHJlZ2lzdGVyIGlzIGEgcGxhY2Ugd2hlcmUgVmltIHN0b3JlcyB0ZXh0LiAgSGVyZSB3ZSB3aWxsIHVzZSB0aGUKK3JlZ2lzdGVycyBuYW1lZCBhIHRvIHogKGxhdGVyIHlvdSB3aWxsIGZpbmQgb3V0IHRoZXJlIGFyZSBvdGhlcnMpLiAgTGV0J3MgY29weQorYSBzZW50ZW5jZSB0byB0aGUgZiByZWdpc3RlciAoZiBmb3IgRmlyc3QpOiA+CisKKwkiZnlhcworCitUaGUgInlhcyIgY29tbWFuZCB5YW5rcyBhIHNlbnRlbmNlIGxpa2UgYmVmb3JlLiAgSXQncyB0aGUgImYgdGhhdCB0ZWxscyBWaW0KK3RoZSB0ZXh0IHNob3VsZCBiZSBwbGFjZSBpbiB0aGUgZiByZWdpc3Rlci4gIFRoaXMgbXVzdCBjb21lIGp1c3QgYmVmb3JlIHRoZQoreWFuayBjb21tYW5kLgorICAgTm93IHlhbmsgdGhyZWUgd2hvbGUgbGluZXMgdG8gdGhlIGwgcmVnaXN0ZXIgKGwgZm9yIGxpbmUpOiA+CisKKwkibDNZCisKK1RoZSBjb3VudCBjb3VsZCBiZSBiZWZvcmUgdGhlICJsIGp1c3QgYXMgd2VsbC4gIFRvIHlhbmsgYSBibG9jayBvZiB0ZXh0IHRvIHRoZQorYiAoZm9yIGJsb2NrKSByZWdpc3RlcjogPgorCisJQ1RSTC1Wamp3dyJieQorCitOb3RpY2UgdGhhdCB0aGUgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbiAiYiBpcyBqdXN0IGJlZm9yZSB0aGUgInkiIGNvbW1hbmQuCitUaGlzIGlzIHJlcXVpcmVkLiAgSWYgeW91IHdvdWxkIGhhdmUgcHV0IGl0IGJlZm9yZSB0aGUgInciIGNvbW1hbmQsIGl0IHdvdWxkCitub3QgaGF2ZSB3b3JrZWQuCisgICBOb3cgeW91IGhhdmUgdGhyZWUgcGllY2VzIG9mIHRleHQgaW4gdGhlIGYsIGwgYW5kIGIgcmVnaXN0ZXJzLiAgRWRpdAorYW5vdGhlciBmaWxlLCBtb3ZlIGFyb3VuZCBhbmQgcGxhY2UgdGhlIHRleHQgd2hlcmUgeW91IHdhbnQgaXQ6ID4KKworCSJmcAorCitBZ2FpbiwgdGhlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gImYgY29tZXMgYmVmb3JlIHRoZSAicCIgY29tbWFuZC4KKyAgIFlvdSBjYW4gcHV0IHRoZSByZWdpc3RlcnMgaW4gYW55IG9yZGVyLiAgQW5kIHRoZSB0ZXh0IHN0YXlzIGluIHRoZSByZWdpc3RlcgordW50aWwgeW91IHlhbmsgc29tZXRoaW5nIGVsc2UgaW50byBpdC4gIFRodXMgeW91IGNhbiBwdXQgaXQgYXMgbWFueSB0aW1lcyBhcworeW91IGxpa2UuCisKK1doZW4geW91IGRlbGV0ZSB0ZXh0LCB5b3UgY2FuIGFsc28gc3BlY2lmeSBhIHJlZ2lzdGVyLiAgVXNlIHRoaXMgdG8gbW92ZQorc2V2ZXJhbCBwaWVjZXMgb2YgdGV4dCBhcm91bmQuICBGb3IgZXhhbXBsZSwgdG8gZGVsZXRlLWEtd29yZCBhbmQgd3JpdGUgaXQgaW4KK3RoZSB3IHJlZ2lzdGVyOiA+CisKKwkid2RhdworCitBZ2FpbiwgdGhlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gY29tZXMgYmVmb3JlIHRoZSBkZWxldGUgY29tbWFuZCAiZCIuCisKKworQVBQRU5ESU5HIFRPIEEgRklMRQorCitXaGVuIGNvbGxlY3RpbmcgbGluZXMgb2YgdGV4dCBpbnRvIG9uZSBmaWxlLCB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTp3cml0ZSA+PiBsb2dmaWxlCisKK1RoaXMgd2lsbCB3cml0ZSB0aGUgdGV4dCBvZiB0aGUgY3VycmVudCBmaWxlIHRvIHRoZSBlbmQgb2YgImxvZ2ZpbGUiLiAgVGh1cyBpdAoraXMgYXBwZW5kZWQuICBUaGlzIGF2b2lkcyB0aGF0IHlvdSBoYXZlIHRvIGNvcHkgdGhlIGxpbmVzLCBlZGl0IHRoZSBsb2cgZmlsZQorYW5kIHB1dCB0aGVtIHRoZXJlLiAgVGh1cyB5b3Ugc2F2ZSB0d28gc3RlcHMuICBCdXQgeW91IGNhbiBvbmx5IGFwcGVuZCB0byB0aGUKK2VuZCBvZiBhIGZpbGUuCisgICBUbyBhcHBlbmQgb25seSBhIGZldyBsaW5lcywgc2VsZWN0IHRoZW0gaW4gVmlzdWFsIG1vZGUgYmVmb3JlIHR5cGluZworIjp3cml0ZSIuICBJbiBjaGFwdGVyIDEwIHlvdSB3aWxsIGxlYXJuIG90aGVyIHdheXMgdG8gc2VsZWN0IGEgcmFuZ2Ugb2YgbGluZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA3LjYqCVZpZXdpbmcgYSBmaWxlCisKK1NvbWV0aW1lcyB5b3Ugb25seSB3YW50IHRvIHNlZSB3aGF0IGEgZmlsZSBjb250YWlucywgd2l0aG91dCB0aGUgaW50ZW50aW9uIHRvCitldmVyIHdyaXRlIGl0IGJhY2suICBUaGVyZSBpcyB0aGUgcmlzayB0aGF0IHlvdSB0eXBlICI6dyIgd2l0aG91dCB0aGlua2luZyBhbmQKK292ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgZmlsZSBhbnl3YXkuICBUbyBhdm9pZCB0aGlzLCBlZGl0IHRoZSBmaWxlIHJlYWQtb25seS4KKyAgIFRvIHN0YXJ0IFZpbSBpbiByZWFkb25seSBtb2RlLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwl2aW0gLVIgZmlsZQorCitPbiBVbml4IHRoaXMgY29tbWFuZCBzaG91bGQgZG8gdGhlIHNhbWUgdGhpbmc6ID4KKworCXZpZXcgZmlsZQorCitZb3UgYXJlIG5vdyBlZGl0aW5nICJmaWxlIiBpbiByZWFkLW9ubHkgbW9kZS4gIFdoZW4geW91IHRyeSB1c2luZyAiOnciIHlvdQord2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgdGhlIGZpbGUgd29uJ3QgYmUgd3JpdHRlbi4KKyAgIFdoZW4geW91IHRyeSB0byBtYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlIFZpbSB3aWxsIGdpdmUgeW91IGEgd2FybmluZzoKKworCVcxMDogV2FybmluZzogQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIH4KKworVGhlIGNoYW5nZSB3aWxsIGJlIGRvbmUgdGhvdWdoLiAgVGhpcyBhbGxvd3MgZm9yIGZvcm1hdHRpbmcgdGhlIGZpbGUsIGZvcgorZXhhbXBsZSwgdG8gYmUgYWJsZSB0byByZWFkIGl0IGVhc2lseS4KKyAgIElmIHlvdSBtYWtlIGNoYW5nZXMgdG8gYSBmaWxlIGFuZCBmb3Jnb3QgdGhhdCBpdCB3YXMgcmVhZC1vbmx5LCB5b3UgY2FuCitzdGlsbCB3cml0ZSBpdC4gIEFkZCB0aGUgISB0byB0aGUgd3JpdGUgY29tbWFuZCB0byBmb3JjZSB3cml0aW5nLgorCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZm9yYmlkIG1ha2luZyBjaGFuZ2VzIGluIGEgZmlsZSwgZG8gdGhpczogPgorCisJdmltIC1NIGZpbGUKKworTm93IGV2ZXJ5IGF0dGVtcHQgdG8gY2hhbmdlIHRoZSB0ZXh0IHdpbGwgZmFpbC4gIFRoZSBoZWxwIGZpbGVzIGFyZSBsaWtlIHRoaXMsCitmb3IgZXhhbXBsZS4gIElmIHlvdSB0cnkgdG8gbWFrZSBhIGNoYW5nZSB5b3UgZ2V0IHRoaXMgZXJyb3IgbWVzc2FnZToKKworCUUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiB+CisKK1lvdSBjb3VsZCB1c2UgdGhlIC1NIGFyZ3VtZW50IHRvIHNldHVwIFZpbSB0byB3b3JrIGluIGEgdmlld2VyIG1vZGUuICBUaGlzIGlzCitvbmx5IHZvbHVudGFyeSB0aG91Z2gsIHNpbmNlIHRoZXNlIGNvbW1hbmRzIHdpbGwgcmVtb3ZlIHRoZSBwcm90ZWN0aW9uOiA+CisKKwk6c2V0IG1vZGlmaWFibGUKKwk6c2V0IHdyaXRlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA3LjcqCUNoYW5naW5nIHRoZSBmaWxlIG5hbWUKKworQSBjbGV2ZXIgd2F5IHRvIHN0YXJ0IGVkaXRpbmcgYSBuZXcgZmlsZSBpcyBieSB1c2luZyBhbiBleGlzdGluZyBmaWxlIHRoYXQKK2NvbnRhaW5zIG1vc3Qgb2Ygd2hhdCB5b3UgbmVlZC4gIEZvciBleGFtcGxlLCB5b3Ugc3RhcnQgd3JpdGluZyBhIG5ldyBwcm9ncmFtCit0byBtb3ZlIGEgZmlsZS4gIFlvdSBrbm93IHRoYXQgeW91IGFscmVhZHkgaGF2ZSBhIHByb2dyYW0gdGhhdCBjb3BpZXMgYSBmaWxlLAordGh1cyB5b3Ugc3RhcnQgd2l0aDogPgorCisJOmVkaXQgY29weS5jCisKK1lvdSBjYW4gZGVsZXRlIHRoZSBzdHVmZiB5b3UgZG9uJ3QgbmVlZC4gIE5vdyB5b3UgbmVlZCB0byBzYXZlIHRoZSBmaWxlIHVuZGVyCithIG5ldyBuYW1lLiAgVGhlICI6c2F2ZWFzIiBjb21tYW5kIGNhbiBiZSB1c2VkIGZvciB0aGlzOiA+CisKKwk6c2F2ZWFzIG1vdmUuYworCitWaW0gd2lsbCB3cml0ZSB0aGUgZmlsZSB1bmRlciB0aGUgZ2l2ZW4gbmFtZSwgYW5kIGVkaXQgdGhhdCBmaWxlLiAgVGh1cyB0aGUKK25leHQgdGltZSB5b3UgZG8gIjp3cml0ZSIsIGl0IHdpbGwgd3JpdGUgIm1vdmUuYyIuICAiY29weS5jIiByZW1haW5zCit1bm1vZGlmaWVkLgorICAgV2hlbiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIGZpbGUgeW91IGFyZSBlZGl0aW5nLCBidXQgZG9uJ3QKK3dhbnQgdG8gd3JpdGUgdGhlIGZpbGUsIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmZpbGUgbW92ZS5jCisKK1ZpbSB3aWxsIG1hcmsgdGhlIGZpbGUgYXMgIm5vdCBlZGl0ZWQiLiAgVGhpcyBtZWFucyB0aGF0IFZpbSBrbm93cyB0aGlzIGlzIG5vdAordGhlIGZpbGUgeW91IHN0YXJ0ZWQgZWRpdGluZy4gIFdoZW4geW91IHRyeSB0byB3cml0ZSB0aGUgZmlsZSwgeW91IG1pZ2h0IGdldAordGhpcyBtZXNzYWdlOgorCisJRTEzOiBGaWxlIGV4aXN0cyAodXNlICEgdG8gb3ZlcnJpZGUpIH4KKworVGhpcyBwcm90ZWN0cyB5b3UgZnJvbSBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgYW5vdGhlciBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzA4LnR4dHwgIFNwbGl0dGluZyB3aW5kb3dzCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzA4LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmODM5OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8wOC50eHQKQEAgLTAsMCArMSw1MTEgQEAKKyp1c3JfMDgudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDQKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgIFNwbGl0dGluZyB3aW5kb3dzCisKKworRGlzcGxheSB0d28gZGlmZmVyZW50IGZpbGVzIGFib3ZlIGVhY2ggb3RoZXIuICBPciB2aWV3IHR3byBsb2NhdGlvbnMgaW4gdGhlCitmaWxlIGF0IHRoZSBzYW1lIHRpbWUuICBTZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZmlsZXMgYnkgcHV0dGluZyB0aGVtCitzaWRlIGJ5IHNpZGUuICBBbGwgdGhpcyBpcyBwb3NzaWJsZSB3aXRoIHNwbGl0IHdpbmRvd3MuCisKK3wwOC4xfAlTcGxpdCBhIHdpbmRvdworfDA4LjJ8CVNwbGl0IGEgd2luZG93IG9uIGFub3RoZXIgZmlsZQorfDA4LjN8CVdpbmRvdyBzaXplCit8MDguNHwJVmVydGljYWwgc3BsaXRzCit8MDguNXwJTW92aW5nIHdpbmRvd3MKK3wwOC42fAlDb21tYW5kcyBmb3IgYWxsIHdpbmRvd3MKK3wwOC43fAlWaWV3aW5nIGRpZmZlcmVuY2VzIHdpdGggdmltZGlmZgorfDA4Ljh8CVZhcmlvdXMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMDkudHh0fCAgVXNpbmcgdGhlIEdVSQorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMDcudHh0fCAgRWRpdGluZyBtb3JlIHRoYW4gb25lIGZpbGUKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA4LjEqCVNwbGl0IGEgd2luZG93CisKK1RoZSBlYXNpZXN0IHdheSB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyB0byB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6c3BsaXQKKworVGhpcyBjb21tYW5kIHNwbGl0cyB0aGUgc2NyZWVuIGludG8gdHdvIHdpbmRvd3MgYW5kIGxlYXZlcyB0aGUgY3Vyc29yIGluIHRoZQordG9wIG9uZToKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwvKiBmaWxlIG9uZS5jICovCQkgICB8CisJfH4JCQkJICAgfAorCXx+CQkJCSAgIHwKKwl8b25lLmM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8LyogZmlsZSBvbmUuYyAqLwkJICAgfAorCXx+CQkJCSAgIHwKKwl8b25lLmM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8CQkJCSAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworV2hhdCB5b3Ugc2VlIGhlcmUgaXMgdHdvIHdpbmRvd3Mgb24gdGhlIHNhbWUgZmlsZS4gIFRoZSBsaW5lIHdpdGggIj09PT0iIGlzCit0aGF0IHN0YXR1cyBsaW5lLiAgSXQgZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdpbmRvdyBhYm92ZSBpdC4gIChJbgorcHJhY3RpY2UgdGhlIHN0YXR1cyBsaW5lIHdpbGwgYmUgaW4gcmV2ZXJzZSB2aWRlby4pCisgICBUaGUgdHdvIHdpbmRvd3MgYWxsb3cgeW91IHRvIHZpZXcgdHdvIHBhcnRzIG9mIHRoZSBzYW1lIGZpbGUuICBGb3IgZXhhbXBsZSwKK3lvdSBjb3VsZCBtYWtlIHRoZSB0b3Agd2luZG93IHNob3cgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBvZiBhIHByb2dyYW0sIGFuZAordGhlIGJvdHRvbSBvbmUgdGhlIGNvZGUgdGhhdCB1c2VzIHRoZXNlIHZhcmlhYmxlcy4KKworVGhlIENUUkwtVyB3IGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8ganVtcCBiZXR3ZWVuIHRoZSB3aW5kb3dzLiAgSWYgeW91IGFyZSBpbgordGhlIHRvcCB3aW5kb3csIENUUkwtVyB3IGp1bXBzIHRvIHRoZSB3aW5kb3cgYmVsb3cgaXQuICBJZiB5b3UgYXJlIGluIHRoZQorYm90dG9tIHdpbmRvdyBpdCB3aWxsIGp1bXAgdG8gdGhlIGZpcnN0IHdpbmRvdy4gKENUUkwtVyBDVFJMLVcgZG9lcyB0aGUgc2FtZQordGhpbmcsIGluIGNhc2UgeW91IGxldCBnbyBvZiB0aGUgQ1RSTCBrZXkgYSBiaXQgbGF0ZXIuKQorCisKK0NMT1NFIFRIRSBXSU5ET1cKKworVG8gY2xvc2UgYSB3aW5kb3csIHVzZSB0aGUgY29tbWFuZDogPgorCisJOmNsb3NlCisKK0FjdHVhbGx5LCBhbnkgY29tbWFuZCB0aGF0IHF1aXRzIGVkaXRpbmcgYSBmaWxlIHdvcmtzLCBsaWtlICI6cXVpdCIgYW5kICJaWiIuCitCdXQgIjpjbG9zZSIgcHJldmVudHMgeW91IGZyb20gYWNjaWRlbnRhbGx5IGV4aXRpbmcgVmltIHdoZW4geW91IGNsb3NlIHRoZQorbGFzdCB3aW5kb3cuCisKKworQ0xPU0lORyBBTEwgT1RIRVIgV0lORE9XUworCitJZiB5b3UgaGF2ZSBvcGVuZWQgYSB3aG9sZSBidW5jaCBvZiB3aW5kb3dzLCBidXQgbm93IHdhbnQgdG8gY29uY2VudHJhdGUgb24KK29uZSBvZiB0aGVtLCB0aGlzIGNvbW1hbmQgd2lsbCBiZSB1c2VmdWw6ID4KKworCTpvbmx5CisKK1RoaXMgY2xvc2VzIGFsbCB3aW5kb3dzLCBleGNlcHQgZm9yIHRoZSBjdXJyZW50IG9uZS4gIElmIGFueSBvZiB0aGUgb3RoZXIKK3dpbmRvd3MgaGFzIGNoYW5nZXMsIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlIGFuZCB0aGF0IHdpbmRvdyB3b24ndCBiZQorY2xvc2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOC4yKglTcGxpdCBhIHdpbmRvdyBvbiBhbm90aGVyIGZpbGUKKworVGhlIGZvbGxvd2luZyBjb21tYW5kIG9wZW5zIGEgc2Vjb25kIHdpbmRvdyBhbmQgc3RhcnRzIGVkaXRpbmcgdGhlIGdpdmVuIGZpbGU6Cis+CisJOnNwbGl0IHR3by5jCisKK0lmIHlvdSB3ZXJlIGVkaXRpbmcgb25lLmMsIHRoZW4gdGhlIHJlc3VsdCBsb29rcyBsaWtlIHRoaXM6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8LyogZmlsZSB0d28uYyAqLwkJICAgfAorCXx+CQkJCSAgIHwKKwl8fgkJCQkgICB8CisJfHR3by5jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT18CisJfC8qIGZpbGUgb25lLmMgKi8JCSAgIHwKKwl8fgkJCQkgICB8CisJfG9uZS5jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT18CisJfAkJCQkgICB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RvIG9wZW4gYSB3aW5kb3cgb24gYSBuZXcsIGVtcHR5IGZpbGUsIHVzZSB0aGlzOiA+CisKKwk6bmV3CisKK1lvdSBjYW4gcmVwZWF0IHRoZSAiOnNwbGl0IiBhbmQgIjpuZXciIGNvbW1hbmRzIHRvIGNyZWF0ZSBhcyBtYW55IHdpbmRvd3MgYXMKK3lvdSBsaWtlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOC4zKglXaW5kb3cgc2l6ZQorCitUaGUgIjpzcGxpdCIgY29tbWFuZCBjYW4gdGFrZSBhIG51bWJlciBhcmd1bWVudC4gIElmIHNwZWNpZmllZCwgdGhpcyB3aWxsIGJlCit0aGUgaGVpZ2h0IG9mIHRoZSBuZXcgd2luZG93LiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgb3BlbnMgYSBuZXcgd2luZG93Cit0aHJlZSBsaW5lcyBoaWdoIGFuZCBzdGFydHMgZWRpdGluZyB0aGUgZmlsZSBhbHBoYS5jOiA+CisKKwk6M3NwbGl0IGFscGhhLmMKKworRm9yIGV4aXN0aW5nIHdpbmRvd3MgeW91IGNhbiBjaGFuZ2UgdGhlIHNpemUgaW4gc2V2ZXJhbCB3YXlzLiAgV2hlbiB5b3UgaGF2ZSBhCit3b3JraW5nIG1vdXNlLCBpdCBpcyBlYXN5OiBNb3ZlIHRoZSBtb3VzZSBwb2ludGVyIHRvIHRoZSBzdGF0dXMgbGluZSB0aGF0CitzZXBhcmF0ZXMgdHdvIHdpbmRvd3MsIGFuZCBkcmFnIGl0IHVwIG9yIGRvd24uCisKK1RvIGluY3JlYXNlIHRoZSBzaXplIG9mIGEgd2luZG93OiA+CisKKwlDVFJMLVcgKworCitUbyBkZWNyZWFzZSBpdDogPgorCisJQ1RSTC1XIC0KKworQm90aCBvZiB0aGVzZSBjb21tYW5kcyB0YWtlIGEgY291bnQgYW5kIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSB3aW5kb3cgc2l6ZQorYnkgdGhhdCBtYW55IGxpbmVzLiAgVGh1cyAiNCBDVFJMLVcgKyIgbWFrZSB0aGUgd2luZG93IGZvdXIgbGluZXMgaGlnaGVyLgorCitUbyBzZXQgdGhlIHdpbmRvdyBoZWlnaHQgdG8gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbmVzOiA+CisKKwl7aGVpZ2h0fUNUUkwtVyBfCisKK1RoYXQnczogYSBudW1iZXIge2hlaWdodH0sIENUUkwtVyBhbmQgdGhlbiBhbiB1bmRlcnNjb3JlICh0aGUgLSBrZXkgd2l0aCBTaGlmdAorb24gRW5nbGlzaC1VUyBrZXlib2FyZHMpLgorICAgVG8gbWFrZSBhIHdpbmRvdyBhcyBoaWdoIGFzIGl0IGNhbiBiZSwgdXNlIHRoZSBDVFJMLVcgXyBjb21tYW5kIHdpdGhvdXQgYQorY291bnQuCisKKworVVNJTkcgVEhFIE1PVVNFCisKK0luIFZpbSB5b3UgY2FuIGRvIG1hbnkgdGhpbmdzIHZlcnkgcXVpY2tseSBmcm9tIHRoZSBrZXlib2FyZC4gIFVuZm9ydHVuYXRlbHksCit0aGUgd2luZG93IHJlc2l6aW5nIGNvbW1hbmRzIHJlcXVpcmUgcXVpdGUgYSBiaXQgb2YgdHlwaW5nLiAgSW4gdGhpcyBjYXNlLAordXNpbmcgdGhlIG1vdXNlIGlzIGZhc3Rlci4gIFBvc2l0aW9uIHRoZSBtb3VzZSBwb2ludGVyIG9uIGEgc3RhdHVzIGxpbmUuICBOb3cKK3ByZXNzIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBhbmQgZHJhZy4gIFRoZSBzdGF0dXMgbGluZSB3aWxsIG1vdmUsIHRodXMgbWFraW5nCit0aGUgd2luZG93IG9uIG9uZSBzaWRlIGhpZ2hlciBhbmQgdGhlIG90aGVyIHNtYWxsZXIuCisKKworT1BUSU9OUworCitUaGUgJ3dpbmhlaWdodCcgb3B0aW9uIGNhbiBiZSBzZXQgdG8gYSBtaW5pbWFsIGRlc2lyZWQgaGVpZ2h0IG9mIGEgd2luZG93IGFuZAorJ3dpbm1pbmhlaWdodCcgdG8gYSBoYXJkIG1pbmltdW0gaGVpZ2h0LgorICAgTGlrZXdpc2UsIHRoZXJlIGlzICd3aW53aWR0aCcgZm9yIHRoZSBtaW5pbWFsIGRlc2lyZWQgd2lkdGggYW5kCisnd2lubWlud2lkdGgnIGZvciB0aGUgaGFyZCBtaW5pbXVtIHdpZHRoLgorICAgVGhlICdlcXVhbGFsd2F5cycgb3B0aW9uLCB3aGVuIHNldCwgbWFrZXMgVmltIGVxdWFsaXplIHRoZSB3aW5kb3dzIHNpemVzCit3aGVuIGEgd2luZG93IGlzIGNsb3NlZCBvciBvcGVuZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA4LjQqCVZlcnRpY2FsIHNwbGl0cworCitUaGUgIjpzcGxpdCIgY29tbWFuZCBjcmVhdGVzIHRoZSBuZXcgd2luZG93IGFib3ZlIHRoZSBjdXJyZW50IG9uZS4gIFRvIG1ha2UKK3RoZSB3aW5kb3cgYXBwZWFyIGF0IHRoZSBsZWZ0IHNpZGUsIHVzZTogPgorCisJOnZzcGxpdAorCitvcjogPgorCTp2c3BsaXQgdHdvLmMKKworVGhlIHJlc3VsdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwvKiBmaWxlIHR3by5jICovICAgfC8qIGZpbGUgb25lLmMgKi8gIHwKKwl8fgkJICAgIHx+CQkgICAgICAgfAorCXx+CQkgICAgfH4JCSAgICAgICB8CisJfH4JCSAgICB8fgkJICAgICAgIHwKKwl8dHdvLmM9PT09PT09PT09PT09PT1vbmUuYz09PT09PT09PT09PT18CisJfAkJCQkgICAgICAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworQWN0dWFsbHksIHRoZSB8IGxpbmVzIGluIHRoZSBtaWRkbGUgd2lsbCBiZSBpbiByZXZlcnNlIHZpZGVvLiAgVGhpcyBpcyBjYWxsZWQKK3RoZSB2ZXJ0aWNhbCBzZXBhcmF0b3IuICBJdCBzZXBhcmF0ZXMgdGhlIHR3byB3aW5kb3dzIGxlZnQgYW5kIHJpZ2h0IG9mIGl0LgorCitUaGVyZSBpcyBhbHNvIHRoZSAiOnZuZXciIGNvbW1hbmQsIHRvIG9wZW4gYSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdyBvbiBhIG5ldywKK2VtcHR5IGZpbGUuICBBbm90aGVyIHdheSB0byBkbyB0aGlzOiA+CisKKwk6dmVydGljYWwgbmV3CisKK1RoZSAiOnZlcnRpY2FsIiBjb21tYW5kIGNhbiBiZSBpbnNlcnRlZCBiZWZvcmUgYW5vdGhlciBjb21tYW5kIHRoYXQgc3BsaXRzIGEKK3dpbmRvdy4gIFRoaXMgd2lsbCBjYXVzZSB0aGF0IGNvbW1hbmQgdG8gc3BsaXQgdGhlIHdpbmRvdyB2ZXJ0aWNhbGx5IGluc3RlYWQKK29mIGhvcml6b250YWxseS4gIChJZiB0aGUgY29tbWFuZCBkb2Vzbid0IHNwbGl0IGEgd2luZG93LCBpdCB3b3JrcwordW5tb2RpZmllZC4pCisKKworTU9WSU5HIEJFVFdFRU4gV0lORE9XUworCitTaW5jZSB5b3UgY2FuIHNwbGl0IHdpbmRvd3MgaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IGFzIG11Y2ggYXMgeW91IGxpa2UsCit5b3UgY2FuIGNyZWF0ZSBhbnkgbGF5b3V0IG9mIHdpbmRvd3MuICBUaGVuIHlvdSBjYW4gdXNlIHRoZXNlIGNvbW1hbmRzIHRvIG1vdmUKK2JldHdlZW4gdGhlbToKKworCUNUUkwtVyBoCW1vdmUgdG8gdGhlIHdpbmRvdyBvbiB0aGUgbGVmdAorCUNUUkwtVyBqCW1vdmUgdG8gdGhlIHdpbmRvdyBiZWxvdworCUNUUkwtVyBrCW1vdmUgdG8gdGhlIHdpbmRvdyBhYm92ZQorCUNUUkwtVyBsCW1vdmUgdG8gdGhlIHdpbmRvdyBvbiB0aGUgcmlnaHQKKworCUNUUkwtVyB0CW1vdmUgdG8gdGhlIFRPUCB3aW5kb3cKKwlDVFJMLVcgYgltb3ZlIHRvIHRoZSBCT1RUT00gd2luZG93CisKK1lvdSB3aWxsIG5vdGljZSB0aGUgc2FtZSBsZXR0ZXJzIGFzIHVzZWQgZm9yIG1vdmluZyB0aGUgY3Vyc29yLiAgQW5kIHRoZQorY3Vyc29yIGtleXMgY2FuIGFsc28gYmUgdXNlZCwgaWYgeW91IGxpa2UuCisgICBNb3JlIGNvbW1hbmRzIHRvIG1vdmUgdG8gb3RoZXIgd2luZG93czogfFFfd2l8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOC41KglNb3Zpbmcgd2luZG93cworCitZb3UgaGF2ZSBzcGxpdCBhIGZldyB3aW5kb3dzLCBidXQgbm93IHRoZXkgYXJlIGluIHRoZSB3cm9uZyBwbGFjZS4gIFRoZW4geW91CituZWVkIGEgY29tbWFuZCB0byBtb3ZlIHRoZSB3aW5kb3cgc29tZXdoZXJlIGVsc2UuICBGb3IgZXhhbXBsZSwgeW91IGhhdmUgdGhyZWUKK3dpbmRvd3MgbGlrZSB0aGlzOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfC8qIGZpbGUgdHdvLmMgKi8JCSAgIHwKKwl8fgkJCQkgICB8CisJfH4JCQkJICAgfAorCXx0d28uYz09PT09PT09PT09PT09PT09PT09PT09PT09PT09fAorCXwvKiBmaWxlIHRocmVlLmMgKi8JCSAgIHwKKwl8fgkJCQkgICB8CisJfH4JCQkJICAgfAorCXx0aHJlZS5jPT09PT09PT09PT09PT09PT09PT09PT09PT09fAorCXwvKiBmaWxlIG9uZS5jICovCQkgICB8CisJfH4JCQkJICAgfAorCXxvbmUuYz09PT09PT09PT09PT09PT09PT09PT09PT09PT09fAorCXwJCQkJICAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitDbGVhcmx5IHRoZSBsYXN0IG9uZSBzaG91bGQgYmUgYXQgdGhlIHRvcC4gIEdvIHRvIHRoYXQgd2luZG93ICh1c2luZyBDVFJMLVcgdykKK2FuZCB0aGUgdHlwZSB0aGlzIGNvbW1hbmQ6ID4KKworCUNUUkwtVyBLCisKK1RoaXMgdXNlcyB0aGUgdXBwZXJjYXNlIGxldHRlciBLLiAgV2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIHdpbmRvdyBpcyBtb3ZlZCB0bwordGhlIHZlcnkgdG9wLiAgWW91IHdpbGwgbm90aWNlIHRoYXQgSyBpcyBhZ2FpbiB1c2VkIGZvciBtb3ZpbmcgdXB3YXJkcy4KKyAgIFdoZW4geW91IGhhdmUgdmVydGljYWwgc3BsaXRzLCBDVFJMLVcgSyB3aWxsIG1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIHRoZQordG9wIGFuZCBtYWtlIGl0IG9jY3VweSB0aGUgZnVsbCB3aXRoIG9mIHRoZSBWaW0gd2luZG93LiAgSWYgdGhpcyBpcyB5b3VyCitsYXlvdXQ6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8LyogdHdvLmMgKi8gIHwvKiB0aHJlZS5jICovICB8Lyogb25lLmMgKi8gIHwKKwl8fgkgICAgICB8fgkgICAgICB8fgkgICAgfAorCXx+CSAgICAgIHx+CSAgICAgIHx+CSAgICB8CisJfH4JICAgICAgfH4JICAgICAgfH4JICAgIHwKKwl8fgkgICAgICB8fgkgICAgICB8fgkgICAgfAorCXx+CSAgICAgIHx+CSAgICAgIHx+CSAgICB8CisJfHR3by5jPT09PT09PT09dGhyZWUuYz09PT09PT09PW9uZS5jPT09PT09PT18CisJfAkJCQkJICAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlbiB1c2luZyBDVFJMLVcgSyBpbiB0aGUgbWlkZGxlIHdpbmRvdyAodGhyZWUuYykgd2lsbCByZXN1bHQgaW46CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8LyogdGhyZWUuYyAqLwkJCQkgICAgfAorCXx+CQkJCQkgICAgfAorCXx+CQkJCQkgICAgfAorCXx0aHJlZS5jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fAorCXwvKiB0d28uYyAqLwkgICAgICAgfC8qIG9uZS5jICovCSAgICB8CisJfH4JCSAgICAgICB8fgkJICAgIHwKKwl8dHdvLmM9PT09PT09PT09PT09PT09PT1vbmUuYz09PT09PT09PT09PT09PXwKKwl8CQkJCQkgICAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgb3RoZXIgdGhyZWUgc2ltaWxhciBjb21tYW5kcyAoeW91IGNhbiBwcm9iYWJseSBndWVzcyB0aGVzZSBub3cpOgorCisJQ1RSTC1XIEgJbW92ZSB3aW5kb3cgdG8gdGhlIGZhciBsZWZ0CisJQ1RSTC1XIEoJbW92ZSB3aW5kb3cgdG8gdGhlIGJvdHRvbQorCUNUUkwtVyBMCW1vdmUgd2luZG93IHRvIHRoZSBmYXIgcmlnaHQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDguNioJQ29tbWFuZHMgZm9yIGFsbCB3aW5kb3dzCisKK1doZW4geW91IGhhdmUgc2V2ZXJhbCB3aW5kb3dzIG9wZW4gYW5kIHlvdSB3YW50IHRvIHF1aXQgVmltLCB5b3UgY2FuIGNsb3NlCitlYWNoIHdpbmRvdyBzZXBhcmF0ZWx5LiAgQSBxdWlja2VyIHdheSBpcyB1c2luZyB0aGlzIGNvbW1hbmQ6ID4KKworCTpxYWxsCisKK1RoaXMgc3RhbmRzIGZvciAicXVpdCBhbGwiLiAgSWYgYW55IG9mIHRoZSB3aW5kb3dzIGNvbnRhaW4gY2hhbmdlcywgVmltIHdpbGwKK25vdCBleGl0LiAgVGhlIGN1cnNvciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcG9zaXRpb25lZCBpbiBhIHdpbmRvdyB3aXRoCitjaGFuZ2VzLiAgWW91IGNhbiB0aGVuIGVpdGhlciB1c2UgIjp3cml0ZSIgdG8gc2F2ZSB0aGUgY2hhbmdlcywgb3IgIjpxdWl0ISIgdG8KK3Rocm93IHRoZW0gYXdheS4KKworSWYgeW91IGtub3cgdGhlcmUgYXJlIHdpbmRvd3Mgd2l0aCBjaGFuZ2VzLCBhbmQgeW91IHdhbnQgdG8gc2F2ZSBhbGwgdGhlc2UKK2NoYW5nZXMsIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTp3YWxsCisKK1RoaXMgc3RhbmRzIGZvciAid3JpdGUgYWxsIi4gIEJ1dCBhY3R1YWxseSwgaXQgb25seSB3cml0ZXMgZmlsZXMgd2l0aAorY2hhbmdlcy4gIFZpbSBrbm93cyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gd3JpdGUgZmlsZXMgdGhhdCB3ZXJlIG5vdAorY2hhbmdlZC4KKyAgIEFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjb21iaW5hdGlvbiBvZiAiOnFhbGwiIGFuZCAiOndhbGwiOiB0aGUgIndyaXRlIGFuZAorcXVpdCBhbGwiIGNvbW1hbmQ6ID4KKworCTp3cWFsbAorCitUaGlzIHdyaXRlcyBhbGwgbW9kaWZpZWQgZmlsZXMgYW5kIHF1aXRzIFZpbS4KKyAgIEZpbmFsbHksIHRoZXJlIGlzIGEgY29tbWFuZCB0aGF0IHF1aXRzIFZpbSBhbmQgdGhyb3dzIGF3YXkgYWxsIGNoYW5nZXM6ID4KKworCTpxYWxsIQorCitCZSBjYXJlZnVsLCB0aGVyZSBpcyBubyB3YXkgdG8gdW5kbyB0aGlzIGNvbW1hbmQhCisKKworT1BFTklORyBBIFdJTkRPVyBGT1IgQUxMIEFSR1VNRU5UUworCitUbyBtYWtlIFZpbSBvcGVuIGEgd2luZG93IGZvciBlYWNoIGZpbGUsIHN0YXJ0IGl0IHdpdGggdGhlICItbyIgYXJndW1lbnQ6ID4KKworCXZpbSAtbyBvbmUudHh0IHR3by50eHQgdGhyZWUudHh0CisKK1RoaXMgcmVzdWx0cyBpbjoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxmaWxlIG9uZS50eHQJCQl8CisJfH4JCQkJfAorCXxvbmUudHh0PT09PT09PT09PT09PT09PT09PT09PT09fAorCXxmaWxlIHR3by50eHQJCQl8CisJfH4JCQkJfAorCXx0d28udHh0PT09PT09PT09PT09PT09PT09PT09PT09fAorCXxmaWxlIHRocmVlLnR4dAkJCXwKKwl8fgkJCQl8CisJfHRocmVlLnR4dD09PT09PT09PT09PT09PT09PT09PT18CisJfAkJCQl8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSAiLU8iIGFyZ3VtZW50IGlzIHVzZWQgdG8gZ2V0IHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cy4KKyAgIFdoZW4gVmltIGlzIGFscmVhZHkgcnVubmluZywgdGhlICI6YWxsIiBjb21tYW5kIG9wZW5zIGEgd2luZG93IGZvciBlYWNoCitmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0LiAgIjp2ZXJ0aWNhbCBhbGwiIGRvZXMgaXQgd2l0aCB2ZXJ0aWNhbCBzcGxpdHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA4LjcqCVZpZXdpbmcgZGlmZmVyZW5jZXMgd2l0aCB2aW1kaWZmCisKK1RoZXJlIGlzIGEgc3BlY2lhbCB3YXkgdG8gc3RhcnQgVmltLCB3aGljaCBzaG93cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28KK2ZpbGVzLiAgTGV0J3MgdGFrZSBhIGZpbGUgIm1haW4uYyIgYW5kIGluc2VydCBhIGZldyBjaGFyYWN0ZXJzIGluIG9uZSBsaW5lLgorV3JpdGUgdGhpcyBmaWxlIHdpdGggdGhlICdiYWNrdXAnIG9wdGlvbiBzZXQsIHNvIHRoYXQgdGhlIGJhY2t1cCBmaWxlCisibWFpbi5jfiIgd2lsbCBjb250YWluIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBmaWxlLgorICAgVHlwZSB0aGlzIGNvbW1hbmQgaW4gYSBzaGVsbCAobm90IGluIFZpbSk6ID4KKworCXZpbWRpZmYgbWFpbi5jfiBtYWluLmMKKworVmltIHdpbGwgc3RhcnQsIHdpdGggdHdvIHdpbmRvd3Mgc2lkZSBieSBzaWRlLiAgWW91IHdpbGwgb25seSBzZWUgdGhlIGxpbmUKK2luIHdoaWNoIHlvdSBhZGRlZCBjaGFyYWN0ZXJzLCBhbmQgYSBmZXcgbGluZXMgYWJvdmUgYW5kIGJlbG93IGl0LgorCisJIFZWCQkgICAgICBWVgorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8KyArLS0xMjMgbGluZXM6IC8qIGF8KyArLS0xMjMgbGluZXM6IC8qIGF8ICA8LSBmb2xkCisJfCAgdGV4dAkJICAgICB8CXRleHQJCSAgfAorCXwgIHRleHQJCSAgICAgfAl0ZXh0CQkgIHwKKwl8ICB0ZXh0CQkgICAgIHwJdGV4dAkJICB8CisJfCAgdGV4dAkJICAgICB8CWNoYW5nZWQgdGV4dAkgIHwgIDwtIGNoYW5nZWQgbGluZQorCXwgIHRleHQJCSAgICAgfAl0ZXh0CQkgIHwKKwl8ICB0ZXh0CQkgICAgIHwJLS0tLS0tLS0tLS0tLS0tLS0tfCAgPC0gZGVsZXRlZCBsaW5lCisJfCAgdGV4dAkJICAgICB8CXRleHQJCSAgfAorCXwgIHRleHQJCSAgICAgfAl0ZXh0CQkgIHwKKwl8ICB0ZXh0CQkgICAgIHwJdGV4dAkJICB8CisJfCsgKy0tNDMyIGxpbmVzOiB0ZXh0fCsgKy0tNDMyIGxpbmVzOiB0ZXh0fCAgPC0gZm9sZAorCXwgIH4JCSAgICAgfAl+CQkgIHwKKwl8ICB+CQkgICAgIHwJfgkJICB8CisJfG1haW4uY349PT09PT09PT09PT09PW1haW4uYz09PT09PT09PT09PT09fAorCXwJCQkJCSAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworKFRoaXMgcGljdHVyZSBkb2Vzbid0IHNob3cgdGhlIGhpZ2hsaWdodGluZywgdXNlIHRoZSB2aW1kaWZmIGNvbW1hbmQgZm9yIGEKK2JldHRlciBsb29rLikKKworVGhlIGxpbmVzIHRoYXQgd2VyZSBub3QgbW9kaWZpZWQgaGF2ZSBiZWVuIGNvbGxhcHNlZCBpbnRvIG9uZSBsaW5lLiAgVGhpcyBpcworY2FsbGVkIGEgY2xvc2VkIGZvbGQuICBUaGV5IGFyZSBpbmRpY2F0ZWQgaW4gdGhlIHBpY3R1cmUgd2l0aCAiPC0gZm9sZCIuICBUaHVzCit0aGUgc2luZ2xlIGZvbGQgbGluZSBhdCB0aGUgdG9wIHN0YW5kcyBmb3IgMTIzIHRleHQgbGluZXMuICBUaGVzZSBsaW5lcyBhcmUKK2VxdWFsIGluIGJvdGggZmlsZXMuCisgICBUaGUgbGluZSBtYXJrZWQgd2l0aCAiPC0gY2hhbmdlZCBsaW5lIiBpcyBoaWdobGlnaHRlZCwgYW5kIHRoZSBpbnNlcnRlZAordGV4dCBpcyBkaXNwbGF5ZWQgd2l0aCBhbm90aGVyIGNvbG9yLiAgVGhpcyBjbGVhcmx5IHNob3dzIHdoYXQgdGhlIGRpZmZlcmVuY2UKK2lzIGJldHdlZW4gdGhlIHR3byBmaWxlcy4KKyAgIFRoZSBsaW5lIHRoYXQgd2FzIGRlbGV0ZWQgaXMgZGlzcGxheWVkIHdpdGggIi0tLSIgaW4gdGhlIG1haW4uYyB3aW5kb3cuCitTZWUgdGhlICI8LSBkZWxldGVkIGxpbmUiIG1hcmtlciBpbiB0aGUgcGljdHVyZS4gIFRoZXNlIGNoYXJhY3RlcnMgYXJlIG5vdAorcmVhbGx5IHRoZXJlLiAgVGhleSBqdXN0IGZpbGwgdXAgbWFpbi5jLCBzbyB0aGF0IGl0IGRpc3BsYXlzIHRoZSBzYW1lIG51bWJlcgorb2YgbGluZXMgYXMgdGhlIG90aGVyIHdpbmRvdy4KKworCitUSEUgRk9MRCBDT0xVTU4KKworRWFjaCB3aW5kb3cgaGFzIGEgY29sdW1uIG9uIHRoZSBsZWZ0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgYmFja2dyb3VuZC4gIEluCit0aGUgcGljdHVyZSBhYm92ZSB0aGVzZSBhcmUgaW5kaWNhdGVkIHdpdGggIlZWIi4gIFlvdSBub3RpY2UgdGhlcmUgaXMgYSBwbHVzCitjaGFyYWN0ZXIgdGhlcmUsIGluIGZyb250IG9mIGVhY2ggY2xvc2VkIGZvbGQuICBNb3ZlIHRoZSBtb3VzZSBwb2ludGVyIHRvIHRoYXQKK3BsdXMgYW5kIGNsaWNrIHRoZSBsZWZ0IGJ1dHRvbi4gIFRoZSBmb2xkIHdpbGwgb3BlbiwgYW5kIHlvdSBjYW4gc2VlIHRoZSB0ZXh0Cit0aGF0IGl0IGNvbnRhaW5zLgorICAgVGhlIGZvbGQgY29sdW1uIGNvbnRhaW5zIGEgbWludXMgc2lnbiBmb3IgYW4gb3BlbiBmb2xkLiAgSWYgeW91IGNsaWNrIG9uCit0aGlzIC0sIHRoZSBmb2xkIHdpbGwgY2xvc2UuCisgICBPYnZpb3VzbHksIHRoaXMgb25seSB3b3JrcyB3aGVuIHlvdSBoYXZlIGEgd29ya2luZyBtb3VzZS4gIFlvdSBjYW4gYWxzbyB1c2UKKyJ6byIgdG8gb3BlbiBhIGZvbGQgYW5kICJ6YyIgdG8gY2xvc2UgaXQuCisKKworRElGRklORyBJTiBWSU0KKworQW5vdGhlciB3YXkgdG8gc3RhcnQgaW4gZGlmZiBtb2RlIGNhbiBiZSBkb25lIGZyb20gaW5zaWRlIFZpbS4gIEVkaXQgdGhlCisibWFpbi5jIiBmaWxlLCB0aGVuIG1ha2UgYSBzcGxpdCBhbmQgc2hvdyB0aGUgZGlmZmVyZW5jZXM6ID4KKworCTplZGl0IG1haW4uYworCTp2ZXJ0aWNhbCBkaWZmc3BsaXQgbWFpbi5jfiAKKworVGhlICI6dmVydGljYWwiIGNvbW1hbmQgaXMgdXNlZCB0byBtYWtlIHRoZSB3aW5kb3cgc3BsaXQgdmVydGljYWxseS4gIElmIHlvdQorb21pdCB0aGlzLCB5b3Ugd2lsbCBnZXQgYSBob3Jpem9udGFsIHNwbGl0LgorCitJZiB5b3UgaGF2ZSBhIHBhdGNoIG9yIGRpZmYgZmlsZSwgeW91IGNhbiB1c2UgdGhlIHRoaXJkIHdheSB0byBzdGFydCBkaWZmCittb2RlLiAgRmlyc3QgZWRpdCB0aGUgZmlsZSB0byB3aGljaCB0aGUgcGF0Y2ggYXBwbGllcy4gIFRoZW4gdGVsbCBWaW0gdGhlIG5hbWUKK29mIHRoZSBwYXRjaCBmaWxlOiA+CisKKwk6ZWRpdCBtYWluLmMKKwk6dmVydGljYWwgZGlmZnBhdGNoIG1haW4uYy5kaWZmCisKK1dBUk5JTkc6IFRoZSBwYXRjaCBmaWxlIG11c3QgY29udGFpbiBvbmx5IG9uZSBwYXRjaCwgZm9yIHRoZSBmaWxlIHlvdSBhcmUKK2VkaXRpbmcuICBPdGhlcndpc2UgeW91IHdpbGwgZ2V0IGEgbG90IG9mIGVycm9yIG1lc3NhZ2VzLCBhbmQgc29tZSBmaWxlcyBtaWdodAorYmUgcGF0Y2hlZCB1bmV4cGVjdGVkbHkuCisgICBUaGUgcGF0Y2hpbmcgd2lsbCBvbmx5IGJlIGRvbmUgdG8gdGhlIGNvcHkgb2YgdGhlIGZpbGUgaW4gVmltLiAgVGhlIGZpbGUgb24KK3lvdXIgaGFyZGRpc2sgd2lsbCByZW1haW4gdW5tb2RpZmllZCAodW50aWwgeW91IGRlY2lkZSB0byB3cml0ZSB0aGUgZmlsZSkuCisKKworU0NST0xMIEJJTkRJTkcKKworV2hlbiB0aGUgZmlsZXMgaGF2ZSBtb3JlIGNoYW5nZXMsIHlvdSBjYW4gc2Nyb2xsIGluIHRoZSB1c3VhbCB3YXkuICBWaW0gd2lsbAordHJ5IHRvIGtlZXAgYm90aCB0aGUgd2luZG93cyBzdGFydCBhdCB0aGUgc2FtZSBwb3NpdGlvbiwgc28geW91IGNhbiBlYXNpbHkgc2VlCit0aGUgZGlmZmVyZW5jZXMgc2lkZSBieSBzaWRlLgorICAgV2hlbiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGZvciBhIG1vbWVudCwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOnNldCBub3Njcm9sbGJpbmQKKworCitKVU1QSU5HIFRPIENIQU5HRVMKKworV2hlbiB5b3UgaGF2ZSBkaXNhYmxlZCBmb2xkaW5nIGluIHNvbWUgd2F5LCBpdCBtYXkgYmUgZGlmZmljdWx0IHRvIGZpbmQgdGhlCitjaGFuZ2VzLiAgVXNlIHRoaXMgY29tbWFuZCB0byBqdW1wIGZvcndhcmQgdG8gdGhlIG5leHQgY2hhbmdlOiA+CisKKwldYworCitUbyBnbyB0aGUgb3RoZXIgd2F5IHVzZTogPgorCisJW2MKKworUHJlcGVuZGVkIGEgY291bnQgdG8ganVtcCBmdXJ0aGVyIGF3YXkuCisKKworUkVNT1ZJTkcgQ0hBTkdFUworCitZb3UgY2FuIG1vdmUgdGV4dCBmcm9tIG9uZSB3aW5kb3cgdG8gdGhlIG90aGVyLiAgVGhpcyBlaXRoZXIgcmVtb3ZlcworZGlmZmVyZW5jZXMgb3IgYWRkcyBuZXcgb25lcy4gIFZpbSBkb2Vzbid0IGtlZXAgdGhlIGhpZ2hsaWdodGluZyB1cGRhdGVkIGluCithbGwgc2l0dWF0aW9ucy4gIFRvIHVwZGF0ZSBpdCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6ZGlmZnVwZGF0ZQorCitUbyByZW1vdmUgYSBkaWZmZXJlbmNlLCB5b3UgY2FuIG1vdmUgdGhlIHRleHQgaW4gYSBoaWdobGlnaHRlZCBibG9jayBmcm9tIG9uZQord2luZG93IHRvIGFub3RoZXIuICBUYWtlIHRoZSAibWFpbi5jIiBhbmQgIm1haW4uY34iIGV4YW1wbGUgYWJvdmUuICBNb3ZlIHRoZQorY3Vyc29yIHRvIHRoZSBsZWZ0IHdpbmRvdywgb24gdGhlIGxpbmUgdGhhdCB3YXMgZGVsZXRlZCBpbiB0aGUgb3RoZXIgd2luZG93LgorTm93IHR5cGUgdGhpcyBjb21tYW5kOiA+CisKKwlkcAorCitUaGUgY2hhbmdlIHdpbGwgYmUgcmVtb3ZlZCBieSBwdXR0aW5nIHRoZSB0ZXh0IG9mIHRoZSBjdXJyZW50IHdpbmRvdyBpbiB0aGUKK290aGVyIHdpbmRvdy4gICJkcCIgc3RhbmRzIGZvciAiZGlmZiBwdXQiLgorICAgWW91IGNhbiBhbHNvIGRvIGl0IHRoZSBvdGhlciB3YXkgYXJvdW5kLiAgTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByaWdodAord2luZG93LCB0byB0aGUgbGluZSB3aGVyZSAiY2hhbmdlZCIgd2FzIGluc2VydGVkLiAgTm93IHR5cGUgdGhpcyBjb21tYW5kOiA+CisKKwlkbworCitUaGUgY2hhbmdlIHdpbGwgbm93IGJlIHJlbW92ZWQgYnkgZ2V0dGluZyB0aGUgdGV4dCBmcm9tIHRoZSBvdGhlciB3aW5kb3cuCitTaW5jZSB0aGVyZSBhcmUgbm8gY2hhbmdlcyBsZWZ0IG5vdywgVmltIHB1dHMgYWxsIHRleHQgaW4gYSBjbG9zZWQgZm9sZC4KKyJkbyIgc3RhbmRzIGZvciAiZGlmZiBvYnRhaW4iLiAgImRnIiB3b3VsZCBoYXZlIGJlZW4gYmV0dGVyLCBidXQgdGhhdCBhbHJlYWR5CitoYXMgYSBkaWZmZXJlbnQgbWVhbmluZyAoImRnZyIgZGVsZXRlcyBmcm9tIHRoZSBjdXJzb3IgdW50aWwgdGhlIGZpcnN0IGxpbmUpLgorCitGb3IgZGV0YWlscyBhYm91dCBkaWZmIG1vZGUsIHNlZSB8dmltZGlmZnwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA4LjgqCVZhcmlvdXMKKworVGhlICdsYXN0c3RhdHVzJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGVuIHRoZSBsYXN0IHdpbmRvdyBoYXMgYQorc3RhdHVzbGluZToKKworCTAJbmV2ZXIKKwkxCW9ubHkgd2hlbiB0aGVyZSBhcmUgc3BsaXQgd2luZG93cyAodGhlIGRlZmF1bHQpCisJMglhbHdheXMKKworTWFueSBjb21tYW5kcyB0aGF0IGVkaXQgYW5vdGhlciBmaWxlIGhhdmUgYSB2YXJpYW50IHRoYXQgc3BsaXRzIHRoZSB3aW5kb3cuCitGb3IgQ29tbWFuZC1saW5lIGNvbW1hbmRzIHRoaXMgaXMgZG9uZSBieSBwcmVwZW5kaW5nIGFuICJzIi4gIEZvciBleGFtcGxlOgorIjp0YWciIGp1bXBzIHRvIGEgdGFnLCAiOnN0YWciIHNwbGl0cyB0aGUgd2luZG93IGFuZCBqdW1wcyB0byBhCit0YWcuCisgICBGb3IgTm9ybWFsIG1vZGUgY29tbWFuZHMgYSBDVFJMLVcgaXMgcHJlcGVuZGVkLiAgQ1RSTC1eIGp1bXBzIHRvIHRoZQorYWx0ZXJuYXRlIGZpbGUsIENUUkwtVyBDVFJMLV4gc3BsaXRzIHRoZSB3aW5kb3cgYW5kIGVkaXRzIHRoZSBhbHRlcm5hdGUgZmlsZS4KKworVGhlICdzcGxpdGJlbG93JyBvcHRpb24gY2FuIGJlIHNldCB0byBtYWtlIGEgbmV3IHdpbmRvdyBhcHBlYXIgYmVsb3cgdGhlCitjdXJyZW50IHdpbmRvdy4gIFRoZSAnc3BsaXRyaWdodCcgb3B0aW9uIGNhbiBiZSBzZXQgdG8gbWFrZSBhIHZlcnRpY2FsbHkgc3BsaXQKK3dpbmRvdyBhcHBlYXIgcmlnaHQgb2YgdGhlIGN1cnJlbnQgd2luZG93LgorCitXaGVuIHNwbGl0dGluZyBhIHdpbmRvdyB5b3UgY2FuIHByZXBlbmQgYSBtb2RpZmllciBjb21tYW5kIHRvIHRlbGwgd2hlcmUgdGhlCit3aW5kb3cgaXMgdG8gYXBwZWFyOgorCisJOmxlZnRhYm92ZSB7Y21kfQlsZWZ0IG9yIGFib3ZlIHRoZSBjdXJyZW50IHdpbmRvdworCTphYm92ZWxlZnQge2NtZH0JaWRlbQorCTpyaWdodGJlbG93IHtjbWR9CXJpZ2h0IG9yIGJlbG93IHRoZSBjdXJyZW50IHdpbmRvdworCTpiZWxvd3JpZ2h0IHtjbWR9CWlkZW0KKwk6dG9wbGVmdCB7Y21kfQkJYXQgdGhlIHRvcCBvciBsZWZ0IG9mIHRoZSBWaW0gd2luZG93CisJOmJvdHJpZ2h0IHtjbWR9CQlhdCB0aGUgYm90dG9tIG9yIHJpZ2h0IG9mIHRoZSBWaW0gd2luZG93CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMDkudHh0fCAgVXNpbmcgdGhlIEdVSQorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8wOS50eHQgYi9ydW50aW1lL2RvYy91c3JfMDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOTdiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMDkudHh0CkBAIC0wLDAgKzEsMjg5IEBACisqdXNyXzA5LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDEgU2VwIDAzCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkJVXNpbmcgdGhlIEdVSQorCisKK1ZpbSB3b3JrcyBpbiBhbiBvcmRpbmFyeSB0ZXJtaW5hbC4gIEdWaW0gY2FuIGRvIHRoZSBzYW1lIHRoaW5ncyBhbmQgYSBmZXcKK21vcmUuICBUaGUgR1VJIG9mZmVycyBtZW51cywgYSB0b29sYmFyLCBzY3JvbGxiYXJzIGFuZCBvdGhlciBpdGVtcy4gIFRoaXMKK2NoYXB0ZXIgaXMgYWJvdXQgdGhlc2UgZXh0cmEgdGhpbmdzIHRoYXQgdGhlIEdVSSBvZmZlcnMuCisKK3wwOS4xfAlQYXJ0cyBvZiB0aGUgR1VJCit8MDkuMnwJVXNpbmcgdGhlIG1vdXNlCit8MDkuM3wJVGhlIGNsaXBib2FyZAorfDA5LjR8CVNlbGVjdCBtb2RlCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzEwLnR4dHwgIE1ha2luZyBiaWcgY2hhbmdlcworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMDgudHh0fCAgU3BsaXR0aW5nIHdpbmRvd3MKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA5LjEqCVBhcnRzIG9mIHRoZSBHVUkKKworWW91IG1pZ2h0IGhhdmUgYW4gaWNvbiBvbiB5b3VyIGRlc2t0b3AgdGhhdCBzdGFydHMgZ1ZpbS4gIE90aGVyd2lzZSwgb25lIG9mCit0aGVzZSBjb21tYW5kcyBzaG91bGQgZG8gaXQ6ID4KKworCWd2aW0gZmlsZS50eHQKKwl2aW0gLWcgZmlsZS50eHQKKworSWYgdGhpcyBkb2Vzbid0IHdvcmsgeW91IGRvbid0IGhhdmUgYSB2ZXJzaW9uIG9mIFZpbSB3aXRoIEdVSSBzdXBwb3J0LiAgWW91Cit3aWxsIGhhdmUgdG8gaW5zdGFsbCBvbmUgZmlyc3QuCisgICBWaW0gd2lsbCBvcGVuIGEgd2luZG93IGFuZCBkaXNwbGF5ICJmaWxlLnR4dCIgaW4gaXQuICBXaGF0IHRoZSB3aW5kb3cgbG9va3MKK2xpa2UgZGVwZW5kcyBvbiB0aGUgdmVyc2lvbiBvZiBWaW0uICBJdCBzaG91bGQgcmVzZW1ibGUgdGhlIGZvbGxvd2luZyBwaWN0dXJlCisoZm9yIGFzIGZhciBhcyB0aGlzIGNhbiBiZSBzaG93biBpbiBBU0NJSSEpLgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCBmaWxlLnR4dCArICh+L2RpcikgLSBWSU0JCQkgICBYIHwJPC0gd2luZG93IHRpdGxlCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCBGaWxlCUVkaXQgIFRvb2xzICBTeW50YXggIEJ1ZmZlcnMgIFdpbmRvdyAgSGVscCAgIHwJPC0gbWVudWJhcgorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgYWFhICBiYmIgIGNjYyAgZGRkICBlZWUgIGZmZglnZ2cgIGhoaCAgaWlpICBqamogICB8CTwtIHRvb2xiYXIKKwl8IGFhYSAgYmJiICBjY2MgIGRkZCAgZWVlICBmZmYJZ2dnICBoaGggIGlpaSAgampqICAgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgZmlsZSB0ZXh0CQkJCQkgfCBeIHwKKwl8IH4JCQkJCQkgfCAjIHwKKwl8IH4JCQkJCQkgfCAjIHwJPC0gc2Nyb2xsYmFyCisJfCB+CQkJCQkJIHwgIyB8CisJfCB+CQkJCQkJIHwgIyB8CisJfCB+CQkJCQkJIHwgIyB8CisJfAkJCQkJCSB8IFYgfAorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgbGFyZ2VzdCBzcGFjZSBpcyBvY2N1cGllZCBieSB0aGUgZmlsZSB0ZXh0LiAgVGhpcyBzaG93cyB0aGUgZmlsZSBpbiB0aGUKK3NhbWUgd2F5IGFzIGluIGEgdGVybWluYWwuICBXaXRoIHNvbWUgZGlmZmVyZW50IGNvbG9ycyBhbmQgYW5vdGhlciBmb250CitwZXJoYXBzLgorCisKK1RIRSBXSU5ET1cgVElUTEUKKworQXQgdGhlIHZlcnkgdG9wIGlzIHRoZSB3aW5kb3cgdGl0bGUuICBUaGlzIGlzIGRyYXduIGJ5IHlvdXIgd2luZG93IHN5c3RlbS4KK1ZpbSB3aWxsIHNldCB0aGUgdGl0bGUgdG8gc2hvdyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmaWxlLiAgRmlyc3QgY29tZXMgdGhlCituYW1lIG9mIHRoZSBmaWxlLiAgVGhlbiBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgdGhlIGRpcmVjdG9yeSBvZiB0aGUgZmlsZQoraW4gcGFyZW5zLiAgVGhlc2Ugc3BlY2lhbCBjaGFyYWN0ZXIgY2FuIGJlIHByZXNlbnQ6CisKKwktCVRoZSBmaWxlIGNhbm5vdCBiZSBtb2RpZmllZCAoZS5nLiwgYSBoZWxwIGZpbGUpCisJKwlUaGUgZmlsZSBjb250YWlucyBjaGFuZ2VzCisJPQlUaGUgZmlsZSBpcyByZWFkLW9ubHkKKwk9KwlUaGUgZmlsZSBpcyByZWFkLW9ubHksIGNvbnRhaW5zIGNoYW5nZXMgYW55d2F5CisKK0lmIG5vdGhpbmcgaXMgc2hvd24geW91IGhhdmUgYW4gb3JkaW5hcnksIHVuY2hhbmdlZCBmaWxlLgorCisKK1RIRSBNRU5VQkFSCisKK1lvdSBrbm93IGhvdyBtZW51cyB3b3JrLCByaWdodD8gIFZpbSBoYXMgdGhlIHVzdWFsIGl0ZW1zLCBwbHVzIGEgZmV3IG1vcmUuCitCcm93c2UgdGhlbSB0byBnZXQgYW4gaWRlYSBvZiB3aGF0IHlvdSBjYW4gdXNlIHRoZW0gZm9yLiAgQSByZWxldmFudCBzdWJtZW51CitpcyBFZGl0L0dsb2JhbCBTZXR0aW5ncy4gIFlvdSB3aWxsIGZpbmQgdGhlc2UgZW50cmllczoKKworCVRvZ2dsZSBUb29sYmFyCQltYWtlIHRoZSB0b29sYmFyIGFwcGVhci9kaXNhcHBlYXIKKwlUb2dnbGUgQm90dG9tIFNjcm9sbGJhcgltYWtlIGEgc2Nyb2xsYmFyIGFwcGVhci9kaXNhcHBlYXIgYXQgdGhlIGJvdHRvbQorCVRvZ2dsZSBMZWZ0IFNjcm9sbGJhcgltYWtlIGEgc2Nyb2xsYmFyIGFwcGVhci9kaXNhcHBlYXIgYXQgdGhlIGxlZnQKKwlUb2dnbGUgUmlnaHQgU2Nyb2xsYmFyCW1ha2UgYSBzY3JvbGxiYXIgYXBwZWFyL2Rpc2FwcGVhciBhdCB0aGUgcmlnaHQKKworT24gbW9zdCBzeXN0ZW1zIHlvdSBjYW4gdGVhci1vZmYgdGhlIG1lbnVzLiAgU2VsZWN0IHRoZSB0b3AgaXRlbSBvZiB0aGUgbWVudSwKK3RoZSBvbmUgdGhhdCBsb29rcyBsaWtlIGEgZGFzaGVkIGxpbmUuICBZb3Ugd2lsbCBnZXQgYSBzZXBhcmF0ZSB3aW5kb3cgd2l0aAordGhlIGl0ZW1zIG9mIHRoZSBtZW51LiAgSXQgd2lsbCBoYW5nIGFyb3VuZCB1bnRpbCB5b3UgY2xvc2UgdGhlIHdpbmRvdy4KKworCitUSEUgVE9PTEJBUgorCitUaGlzIGNvbnRhaW5zIGljb25zIGZvciB0aGUgbW9zdCBvZnRlbiB1c2VkIGFjdGlvbnMuICBIb3BlZnVsbHkgdGhlIGljb25zIGFyZQorc2VsZi1leHBsYW5hdG9yeS4gIFRoZXJlIGFyZSB0b29sdGlwcyB0byBnZXQgYW4gZXh0cmEgaGludCAobW92ZSB0aGUgbW91c2UKK3BvaW50ZXIgdG8gdGhlIGljb24gd2l0aG91dCBjbGlja2luZyBhbmQgZG9uJ3QgbW92ZSBpdCBmb3IgYSBzZWNvbmQpLgorCitUaGUgIkVkaXQvR2xvYmFsIFNldHRpbmdzL1RvZ2dsZSBUb29sYmFyIiBtZW51IGl0ZW0gY2FuIGJlIHVzZWQgdG8gbWFrZSB0aGUKK3Rvb2xiYXIgZGlzYXBwZWFyLiAgSWYgeW91IG5ldmVyIHdhbnQgYSB0b29sYmFyLCB1c2UgdGhpcyBjb21tYW5kIGluIHlvdXIKK3ZpbXJjIGZpbGU6ID4KKworCTpzZXQgZ3Vpb3B0aW9ucy09VAorCitUaGlzIHJlbW92ZXMgdGhlICdUJyBmbGFnIGZyb20gdGhlICdndWlvcHRpb25zJyBvcHRpb24uICBPdGhlciBwYXJ0cyBvZiB0aGUKK0dVSSBjYW4gYWxzbyBiZSBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGggdGhpcyBvcHRpb24uICBTZWUgdGhlIGhlbHAgZm9yIGl0LgorCisKK1RIRSBTQ1JPTExCQVJTCisKK0J5IGRlZmF1bHQgdGhlcmUgaXMgb25lIHNjcm9sbGJhciBvbiB0aGUgcmlnaHQuICBJdCBkb2VzIHRoZSBvYnZpb3VzIHRoaW5nLgorV2hlbiB5b3Ugc3BsaXQgdGhlIHdpbmRvdywgZWFjaCB3aW5kb3cgd2lsbCBnZXQgaXRzIG93biBzY3JvbGxiYXIuCisgICBZb3UgY2FuIG1ha2UgYSBob3Jpem9udGFsIHNjcm9sbGJhciBhcHBlYXIgd2l0aCB0aGUgbWVudSBpdGVtCitFZGl0L0dsb2JhbCBTZXR0aW5ncy9Ub2dnbGUgQm90dG9tIFNjcm9sbGJhci4gIFRoaXMgaXMgdXNlZnVsIGluIGRpZmYgbW9kZSwgb3IKK3doZW4gdGhlICd3cmFwJyBvcHRpb24gaGFzIGJlZW4gcmVzZXQgKG1vcmUgYWJvdXQgdGhhdCBsYXRlcikuCisKK1doZW4gdGhlcmUgYXJlIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cywgb25seSB0aGUgd2luZG93cyBvbiB0aGUgcmlnaHQgc2lkZQord2lsbCBoYXZlIGEgc2Nyb2xsYmFyLiAgSG93ZXZlciwgd2hlbiB5b3UgbW92ZSB0aGUgY3Vyc29yIHRvIGEgd2luZG93IG9uIHRoZQorbGVmdCwgaXQgd2lsbCBiZSB0aGlzIG9uZSB0aGUgdGhhdCBzY3JvbGxiYXIgY29udHJvbHMuICBUaGlzIHRha2VzIGEgYml0IG9mCit0aW1lIHRvIGdldCB1c2VkIHRvLgorICAgV2hlbiB5b3Ugd29yayB3aXRoIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cywgY29uc2lkZXIgYWRkaW5nIGEgc2Nyb2xsYmFyIG9uCit0aGUgbGVmdC4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhIG1lbnUgaXRlbSwgb3Igd2l0aCB0aGUgJ2d1aW9wdGlvbnMnIG9wdGlvbjoKKz4KKwk6c2V0IGd1aW9wdGlvbnMrPWwKKworVGhpcyBhZGRzIHRoZSAnbCcgZmxhZyB0byAnZ3Vpb3B0aW9ucycuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjA5LjIqCVVzaW5nIHRoZSBtb3VzZQorCitTdGFuZGFyZHMgYXJlIHdvbmRlcmZ1bC4gIEluIE1pY3Jvc29mdCBXaW5kb3dzLCB5b3UgY2FuIHVzZSB0aGUgbW91c2UgdG8KK3NlbGVjdCB0ZXh0IGluIGEgc3RhbmRhcmQgbWFubmVyLiAgVGhlIFggV2luZG93IHN5c3RlbSBhbHNvIGhhcyBhIHN0YW5kYXJkCitzeXN0ZW0gZm9yIHVzaW5nIHRoZSBtb3VzZS4gIFVuZm9ydHVuYXRlbHksIHRoZXNlIHR3byBzdGFuZGFyZHMgYXJlIG5vdCB0aGUKK3NhbWUuCisgICBGb3J0dW5hdGVseSwgeW91IGNhbiBjdXN0b21pemUgVmltLiAgWW91IGNhbiBtYWtlIHRoZSBiZWhhdmlvciBvZiB0aGUgbW91c2UKK3dvcmsgbGlrZSBhbiBYIFdpbmRvdyBzeXN0ZW0gbW91c2Ugb3IgYSBNaWNyb3NvZnQgV2luZG93cyBtb3VzZS4gVGhlIGZvbGxvd2luZworY29tbWFuZCBtYWtlcyB0aGUgbW91c2UgYmVoYXZlIGxpa2UgYW4gWCBXaW5kb3cgbW91c2U6ID4KKworCTpiZWhhdmUgeHRlcm0KKworVGhlIGZvbGxvd2luZyBjb21tYW5kIG1ha2VzIHRoZSBtb3VzZSB3b3JrIGxpa2UgYSBNaWNyb3NvZnQgV2luZG93cyBtb3VzZTogPgorCisJOmJlaGF2ZSBtc3dpbgorCitUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgbW91c2Ugb24gVU5JWCBzeXN0ZW1zIGlzIHh0ZXJtLiAgVGhlIGRlZmF1bHQKK2JlaGF2aW9yIG9uIGEgTWljcm9zb2Z0IFdpbmRvd3Mgc3lzdGVtIGlzIHNlbGVjdGVkIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uCitwcm9jZXNzLiAgRm9yIGRldGFpbHMgYWJvdXQgd2hhdCB0aGUgdHdvIGJlaGF2aW9ycyBhcmUsIHNlZSB8OmJlaGF2ZXwuICBIZXJlCitmb2xsb3dzIGEgc3VtbWFyeS4KKworCitYVEVSTSBNT1VTRSBCRUhBVklPUgorCitMZWZ0IG1vdXNlIGNsaWNrCQlwb3NpdGlvbiB0aGUgY3Vyc29yCitMZWZ0IG1vdXNlIGRyYWcJCQlzZWxlY3QgdGV4dCBpbiBWaXN1YWwgbW9kZQorTWlkZGxlIG1vdXNlIGNsaWNrCQlwYXN0ZSB0ZXh0IGZyb20gdGhlIGNsaXBib2FyZAorUmlnaHQgbW91c2UgY2xpY2sJCWV4dGVuZCB0aGUgc2VsZWN0ZWQgdGV4dCB1bnRpbCB0aGUgbW91c2UKKwkJCQlwb2ludGVyCisKKworTVNXSU4gTU9VU0UgQkVIQVZJT1IKKworTGVmdCBtb3VzZSBjbGljawkJcG9zaXRpb24gdGhlIGN1cnNvcgorTGVmdCBtb3VzZSBkcmFnCQkJc2VsZWN0IHRleHQgaW4gU2VsZWN0IG1vZGUgKHNlZSB8MDkuNHwpCitMZWZ0IG1vdXNlIGNsaWNrLCB3aXRoIFNoaWZ0CWV4dGVuZCB0aGUgc2VsZWN0ZWQgdGV4dCB1bnRpbCB0aGUgbW91c2UKKwkJCQlwb2ludGVyCitNaWRkbGUgbW91c2UgY2xpY2sJCXBhc3RlIHRleHQgZnJvbSB0aGUgY2xpcGJvYXJkCitSaWdodCBtb3VzZSBjbGljawkJZGlzcGxheSBhIHBvcC11cCBtZW51CisKKworVGhlIG1vdXNlIGNhbiBiZSBmdXJ0aGVyIHR1bmVkLiAgQ2hlY2sgb3V0IHRoZXNlIG9wdGlvbnMgaWYgeW91IHdhbnQgdG8gY2hhbmdlCit0aGUgd2F5IGhvdyB0aGUgbW91c2Ugd29ya3M6CisKKwknbW91c2UnCQkJaW4gd2hpY2ggbW9kZSB0aGUgbW91c2UgaXMgdXNlZCBieSBWaW0KKwknbW91c2Vtb2RlbCcJCXdoYXQgZWZmZWN0IGEgbW91c2UgY2xpY2sgaGFzCisJJ21vdXNldGltZScJCXRpbWUgYmV0d2VlbiBjbGlja3MgZm9yIGEgZG91YmxlLWNsaWNrCisJJ21vdXNlaGlkZScJCWhpZGUgdGhlIG1vdXNlIHdoaWxlIHR5cGluZworCSdzZWxlY3Rtb2RlJwkJd2hldGhlciB0aGUgbW91c2Ugc3RhcnRzIFZpc3VhbCBvciBTZWxlY3QgbW9kZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyowOS4zKglUaGUgY2xpcGJvYXJkCisKK0luIHNlY3Rpb24gfDA0Ljd8IHRoZSBiYXNpYyB1c2Ugb2YgdGhlIGNsaXBib2FyZCB3YXMgZXhwbGFpbmVkLiAgVGhlcmUgaXMgb25lCitlc3NlbnRpYWwgdGhpbmcgdG8gZXhwbGFpbiBhYm91dCBYLXdpbmRvd3M6IFRoZXJlIGFyZSBhY3R1YWxseSB0d28gcGxhY2VzIHRvCitleGNoYW5nZSB0ZXh0IGJldHdlZW4gcHJvZ3JhbXMuICBNUy1XaW5kb3dzIGRvZXNuJ3QgaGF2ZSB0aGlzLgorCitJbiBYLVdpbmRvd3MgdGhlcmUgaXMgdGhlICJjdXJyZW50IHNlbGVjdGlvbiIuICBUaGlzIGlzIHRoZSB0ZXh0IHRoYXQgaXMKK2N1cnJlbnRseSBoaWdobGlnaHRlZC4gIEluIFZpbSB0aGlzIGlzIHRoZSBWaXN1YWwgYXJlYSAodGhpcyBhc3N1bWVzIHlvdSBhcmUKK3VzaW5nIHRoZSBkZWZhdWx0IG9wdGlvbiBzZXR0aW5ncykuICBZb3UgY2FuIHBhc3RlIHRoaXMgc2VsZWN0aW9uIGluIGFub3RoZXIKK2FwcGxpY2F0aW9uIHdpdGhvdXQgYW55IGZ1cnRoZXIgYWN0aW9uLgorICAgRm9yIGV4YW1wbGUsIGluIHRoaXMgdGV4dCBzZWxlY3QgYSBmZXcgd29yZHMgd2l0aCB0aGUgbW91c2UuICBWaW0gd2lsbAorc3dpdGNoIHRvIFZpc3VhbCBtb2RlIGFuZCBoaWdobGlnaHQgdGhlIHRleHQuICBOb3cgc3RhcnQgYW5vdGhlciBnVmltLCB3aXRob3V0CithIGZpbGUgbmFtZSBhcmd1bWVudCwgc28gdGhhdCBpdCBkaXNwbGF5cyBhbiBlbXB0eSB3aW5kb3cuICBDbGljayB0aGUgbWlkZGxlCittb3VzZSBidXR0b24uICBUaGUgc2VsZWN0ZWQgdGV4dCB3aWxsIGJlIGluc2VydGVkLgorCitUaGUgImN1cnJlbnQgc2VsZWN0aW9uIiB3aWxsIG9ubHkgcmVtYWluIHZhbGlkIHVudGlsIHNvbWUgb3RoZXIgdGV4dCBpcworc2VsZWN0ZWQuICBBZnRlciBkb2luZyB0aGUgcGFzdGUgaW4gdGhlIG90aGVyIGdWaW0sIG5vdyBzZWxlY3Qgc29tZSBjaGFyYWN0ZXJzCitpbiB0aGF0IHdpbmRvdy4gIFlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZSB3b3JkcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzZWxlY3RlZAoraW4gdGhlIG90aGVyIGdWaW0gd2luZG93IGFyZSBkaXNwbGF5ZWQgZGlmZmVyZW50bHkuICBUaGlzIG1lYW5zIHRoYXQgaXQgbm8KK2xvbmdlciBpcyB0aGUgY3VycmVudCBzZWxlY3Rpb24uCisKK1lvdSBkb24ndCBuZWVkIHRvIHNlbGVjdCB0ZXh0IHdpdGggdGhlIG1vdXNlLCB1c2luZyB0aGUga2V5Ym9hcmQgY29tbWFuZHMgZm9yCitWaXN1YWwgbW9kZSB3b3JrcyBqdXN0IGFzIHdlbGwuCisKKworVEhFIFJFQUwgQ0xJUEJPQVJECisKK05vdyBmb3IgdGhlIG90aGVyIHBsYWNlIHdpdGggd2hpY2ggdGV4dCBjYW4gYmUgZXhjaGFuZ2VkLiAgV2UgY2FsbCB0aGlzIHRoZQorInJlYWwgY2xpcGJvYXJkIiwgdG8gYXZvaWQgY29uZnVzaW9uLiAgT2Z0ZW4gYm90aCB0aGUgImN1cnJlbnQgc2VsZWN0aW9uIiBhbmQKK3RoZSAicmVhbCBjbGlwYm9hcmQiIGFyZSBjYWxsZWQgY2xpcGJvYXJkLCB5b3UnbGwgaGF2ZSB0byBnZXQgdXNlZCB0byB0aGF0LgorICAgVG8gcHV0IHRleHQgb24gdGhlIHJlYWwgY2xpcGJvYXJkLCBzZWxlY3QgYSBmZXcgZGlmZmVyZW50IHdvcmRzIGluIG9uZSBvZgordGhlIGdWaW1zIHlvdSBoYXZlIHJ1bm5pbmcuICBUaGVuIHVzZSB0aGUgRWRpdC9Db3B5IG1lbnUgZW50cnkuICBOb3cgdGhlIHRleHQKK2hhcyBiZWVuIGNvcGllZCB0byB0aGUgcmVhbCBjbGlwYm9hcmQuICBZb3UgY2FuJ3Qgc2VlIHRoaXMsIHVubGVzcyB5b3UgaGF2ZQorc29tZSBhcHBsaWNhdGlvbiB0aGF0IHNob3dzIHRoZSBjbGlwYm9hcmQgY29udGVudHMgKGUuZy4sIEtERSdzIGtsaXBwZXIpLgorICAgTm93IHNlbGVjdCB0aGUgb3RoZXIgZ1ZpbSwgcG9zaXRpb24gdGhlIGN1cnNvciBzb21ld2hlcmUgYW5kIHVzZSB0aGUKK0VkaXQvUGFzdGUgbWVudS4gIFlvdSB3aWxsIHNlZSB0aGUgdGV4dCBmcm9tIHRoZSByZWFsIGNsaXBib2FyZCBpcyBpbnNlcnRlZC4KKworCitVU0lORyBCT1RICisKK1RoaXMgdXNlIG9mIGJvdGggdGhlICJjdXJyZW50IHNlbGVjdGlvbiIgYW5kIHRoZSAicmVhbCBjbGlwYm9hcmQiIG1pZ2h0IHNvdW5kCithIGJpdCBjb25mdXNpbmcuICBCdXQgaXQgaXMgdmVyeSB1c2VmdWwuICBMZXQncyBzaG93IHRoaXMgd2l0aCBhbiBleGFtcGxlLgorVXNlIG9uZSBnVmltIHdpdGggYSB0ZXh0IGZpbGUgYW5kIHBlcmZvcm0gdGhlc2UgYWN0aW9uczoKKworLSAgU2VsZWN0IHR3byB3b3JkcyBpbiBWaXN1YWwgbW9kZS4KKy0gIFVzZSB0aGUgRWRpdC9Db3B5IG1lbnUgdG8gZ2V0IHRoZXNlIHdvcmRzIG9udG8gdGhlIGNsaXBib2FyZC4KKy0gIFNlbGVjdCBvbmUgb3RoZXIgd29yZCBpbiBWaXN1YWwgbW9kZS4KKy0gIFVzZSB0aGUgRWRpdC9QYXN0ZSBtZW51IGl0ZW0uICBXaGF0IHdpbGwgaGFwcGVuIGlzIHRoYXQgdGhlIHNpbmdsZSBzZWxlY3RlZAorICAgd29yZCBpcyByZXBsYWNlZCB3aXRoIHRoZSB0d28gd29yZHMgZnJvbSB0aGUgY2xpcGJvYXJkLgorLSAgTW92ZSB0aGUgbW91c2UgcG9pbnRlciBzb21ld2hlcmUgZWxzZSBhbmQgY2xpY2sgdGhlIG1pZGRsZSBidXR0b24uICBZb3UKKyAgIHdpbGwgc2VlIHRoYXQgdGhlIHdvcmQgeW91IGp1c3Qgb3Zlcndyb3RlIHdpdGggdGhlIGNsaXBib2FyZCBpcyBpbnNlcnRlZAorICAgaGVyZS4KKworSWYgeW91IHVzZSB0aGUgImN1cnJlbnQgc2VsZWN0aW9uIiBhbmQgdGhlICJyZWFsIGNsaXBib2FyZCIgd2l0aCBjYXJlLCB5b3UgY2FuCitkbyBhIGxvdCBvZiB1c2VmdWwgZWRpdGluZyB3aXRoIHRoZW0uCisKKworVVNJTkcgVEhFIEtFWUJPQVJECisKK0lmIHlvdSBkb24ndCBsaWtlIHVzaW5nIHRoZSBtb3VzZSwgeW91IGNhbiBhY2Nlc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFuZAordGhlIHJlYWwgY2xpcGJvYXJkIHdpdGggdHdvIHJlZ2lzdGVycy4gIFRoZSAiKiByZWdpc3RlciBpcyBmb3IgdGhlIGN1cnJlbnQKK3NlbGVjdGlvbi4KKyAgIFRvIG1ha2UgdGV4dCBiZWNvbWUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCB1c2UgVmlzdWFsIG1vZGUuICBGb3IgZXhhbXBsZSwKK3RvIHNlbGVjdCBhIHdob2xlIGxpbmUganVzdCBwcmVzcyAiViIuCisgICBUbyBpbnNlcnQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJlZm9yZSB0aGUgY3Vyc29yOiA+CisKKwkiKlAKKworTm90aWNlIHRoZSB1cHBlcmNhc2UgIlAiLiAgVGhlIGxvd2VyY2FzZSAicCIgcHV0cyB0aGUgdGV4dCBhZnRlciB0aGUgY3Vyc29yLgorCitUaGUgIisgcmVnaXN0ZXIgaXMgdXNlZCBmb3IgdGhlIHJlYWwgY2xpcGJvYXJkLiAgRm9yIGV4YW1wbGUsIHRvIGNvcHkgdGhlIHRleHQKK2Zyb20gdGhlIGN1cnNvciBwb3NpdGlvbiB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRvIHRoZSBjbGlwYm9hcmQ6ID4KKworCSIreSQKKworUmVtZW1iZXIsICJ5IiBpcyB5YW5rLCB3aGljaCBpcyBWaW0ncyBjb3B5IGNvbW1hbmQuCisgICBUbyBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWFsIGNsaXBib2FyZCBiZWZvcmUgdGhlIGN1cnNvcjogPgorCisJIitQCisKK0l0J3MgdGhlIHNhbWUgYXMgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYnV0IHVzZXMgdGhlIHBsdXMgKCspIHJlZ2lzdGVyCitpbnN0ZWFkIG9mIHRoZSBzdGFyICgqKSByZWdpc3Rlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMDkuNCoJU2VsZWN0IG1vZGUKKworQW5kIG5vdyBzb21ldGhpbmcgdGhhdCBpcyB1c2VkIG1vcmUgb2Z0ZW4gb24gTVMtV2luZG93cyB0aGFuIG9uIFgtV2luZG93cy4KK0J1dCBib3RoIGNhbiBkbyBpdC4gIFlvdSBhbHJlYWR5IGtub3cgYWJvdXQgVmlzdWFsIG1vZGUuICBTZWxlY3QgbW9kZSBpcyBsaWtlCitWaXN1YWwgbW9kZSwgYmVjYXVzZSBpdCBpcyBhbHNvIHVzZWQgdG8gc2VsZWN0IHRleHQuICBCdXQgdGhlcmUgaXMgYW4gb2J2aW91cworZGlmZmVyZW5jZTogV2hlbiB0eXBpbmcgdGV4dCwgdGhlIHNlbGVjdGVkIHRleHQgaXMgZGVsZXRlZCBhbmQgdGhlIHR5cGVkIHRleHQKK3JlcGxhY2VzIGl0LgorCitUbyBzdGFydCB3b3JraW5nIHdpdGggU2VsZWN0IG1vZGUsIHlvdSBtdXN0IGZpcnN0IGVuYWJsZSBpdCAoZm9yIE1TLVdpbmRvd3MKK2l0IGlzIHByb2JhYmx5IGFscmVhZHkgZW5hYmxlZCwgYnV0IHlvdSBjYW4gZG8gdGhpcyBhbnl3YXkpOiA+CisKKwk6c2V0IHNlbGVjdG1vZGUrPW1vdXNlCisKK05vdyB1c2UgdGhlIG1vdXNlIHRvIHNlbGVjdCBzb21lIHRleHQuICBJdCBpcyBoaWdobGlnaHRlZCBsaWtlIGluIFZpc3VhbCBtb2RlLgorTm93IHByZXNzIGEgbGV0dGVyLiAgVGhlIHNlbGVjdGVkIHRleHQgaXMgZGVsZXRlZCwgYW5kIHRoZSBzaW5nbGUgbGV0dGVyCityZXBsYWNlcyBpdC4gIFlvdSBhcmUgaW4gSW5zZXJ0IG1vZGUgbm93LCB0aHVzIHlvdSBjYW4gY29udGludWUgdHlwaW5nLgorCitTaW5jZSB0eXBpbmcgbm9ybWFsIHRleHQgY2F1c2VzIHRoZSBzZWxlY3RlZCB0ZXh0IHRvIGJlIGRlbGV0ZWQsIHlvdSBjYW4gbm90Cit1c2UgdGhlIG5vcm1hbCBtb3ZlbWVudCBjb21tYW5kcyAiaGprbCIsICJ3IiwgZXRjLiAgSW5zdGVhZCwgdXNlIHRoZSBzaGlmdGVkCitmdW5jdGlvbiBrZXlzLiAgPFMtTGVmdD4gKHNoaWZ0ZWQgY3Vyc29yIGxlZnQga2V5KSBtb3ZlcyB0aGUgY3Vyc29yIGxlZnQuICBUaGUKK3NlbGVjdGVkIHRleHQgaXMgY2hhbmdlZCBsaWtlIGluIFZpc3VhbCBtb2RlLiAgVGhlIG90aGVyIHNoaWZ0ZWQgY3Vyc29yIGtleXMKK2RvIHdoYXQgeW91IGV4cGVjdC4gIDxTLUVuZD4gYW5kIDxTLUhvbWU+IGFsc28gd29yay4KKworWW91IGNhbiB0dW5lIHRoZSB3YXkgU2VsZWN0IG1vZGUgd29ya3Mgd2l0aCB0aGUgJ3NlbGVjdG1vZGUnIG9wdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8xMC50eHR8ICBNYWtpbmcgYmlnIGNoYW5nZXMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMTAudHh0IGIvcnVudGltZS9kb2MvdXNyXzEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDdkMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzEwLnR4dApAQCAtMCwwICsxLDgyMiBAQAorKnVzcl8xMC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1hciAxMgorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICBNYWtpbmcgYmlnIGNoYW5nZXMKKworCitJbiBjaGFwdGVyIDQgc2V2ZXJhbCB3YXlzIHRvIG1ha2Ugc21hbGwgY2hhbmdlcyB3ZXJlIGV4cGxhaW5lZC4gIFRoaXMgY2hhcHRlcgorZ29lcyBpbnRvIG1ha2luZyBjaGFuZ2VzIHRoYXQgYXJlIHJlcGVhdGVkIG9yIGNhbiBhZmZlY3QgYSBsYXJnZSBhbW91bnQgb2YKK3RleHQuICBUaGUgVmlzdWFsIG1vZGUgYWxsb3dzIGRvaW5nIHZhcmlvdXMgdGhpbmdzIHdpdGggYmxvY2tzIG9mIHRleHQuICBVc2UKK2FuIGV4dGVybmFsIHByb2dyYW0gdG8gZG8gcmVhbGx5IGNvbXBsaWNhdGVkIHRoaW5ncy4KKworfDEwLjF8CVJlY29yZCBhbmQgcGxheWJhY2sgY29tbWFuZHMKK3wxMC4yfAlTdWJzdGl0dXRpb24KK3wxMC4zfAlDb21tYW5kIHJhbmdlcworfDEwLjR8CVRoZSBnbG9iYWwgY29tbWFuZAorfDEwLjV8CVZpc3VhbCBibG9jayBtb2RlCit8MTAuNnwJUmVhZGluZyBhbmQgd3JpdGluZyBwYXJ0IG9mIGEgZmlsZQorfDEwLjd8CUZvcm1hdHRpbmcgdGV4dAorfDEwLjh8CUNoYW5naW5nIGNhc2UKK3wxMC45fAlVc2luZyBhbiBleHRlcm5hbCBwcm9ncmFtCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzExLnR4dHwgIFJlY292ZXJpbmcgZnJvbSBhIGNyYXNoCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8wOS50eHR8ICBVc2luZyB0aGUgR1VJCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMC4xKglSZWNvcmQgYW5kIHBsYXliYWNrIGNvbW1hbmRzCisKK1RoZSAiLiIgY29tbWFuZCByZXBlYXRzIHRoZSBwcmVjZWRpbmcgY2hhbmdlLiAgQnV0IHdoYXQgaWYgeW91IHdhbnQgdG8gZG8KK3NvbWV0aGluZyBtb3JlIGNvbXBsZXggdGhhbiBhIHNpbmdsZSBjaGFuZ2U/ICBUaGF0J3Mgd2hlcmUgY29tbWFuZCByZWNvcmRpbmcKK2NvbWVzIGluLiAgVGhlcmUgYXJlIHRocmVlIHN0ZXBzOgorCisxLiBUaGUgInF7cmVnaXN0ZXJ9IiBjb21tYW5kIHN0YXJ0cyByZWNvcmRpbmcga2V5c3Ryb2tlcyBpbnRvIHRoZSByZWdpc3RlcgorICAgbmFtZWQge3JlZ2lzdGVyfS4gIFRoZSByZWdpc3RlciBuYW1lIG11c3QgYmUgYmV0d2VlbiBhIGFuZCB6LgorMi4gVHlwZSB5b3VyIGNvbW1hbmRzLgorMy4gVG8gZmluaXNoIHJlY29yZGluZywgcHJlc3MgcSAod2l0aG91dCBhbnkgZXh0cmEgY2hhcmFjdGVyKS4KKworWW91IGNhbiBub3cgZXhlY3V0ZSB0aGUgbWFjcm8gYnkgdHlwaW5nIHRoZSBjb21tYW5kICJAe3JlZ2lzdGVyfSIuCisKK1Rha2UgYSBsb29rIGF0IGhvdyB0byB1c2UgdGhlc2UgY29tbWFuZHMgaW4gcHJhY3RpY2UuICBZb3UgaGF2ZSBhIGxpc3Qgb2YKK2ZpbGVuYW1lcyB0aGF0IGxvb2sgbGlrZSB0aGlzOgorCisJc3RkaW8uaCB+CisJZmNudGwuaCB+CisJdW5pc3RkLmggfgorCXN0ZGxpYi5oIH4KKworQW5kIHdoYXQgeW91IHdhbnQgaXMgdGhlIGZvbGxvd2luZzoKKworCSNpbmNsdWRlICJzdGRpby5oIiB+CisJI2luY2x1ZGUgImZjbnRsLmgiIH4KKwkjaW5jbHVkZSAidW5pc3RkLmgiIH4KKwkjaW5jbHVkZSAic3RkbGliLmgiIH4KKworWW91IHN0YXJ0IGJ5IG1vdmluZyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBsaW5lLiAgTmV4dCB5b3UKK2V4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworCXFhCQkJU3RhcnQgcmVjb3JkaW5nIGEgbWFjcm8gaW4gcmVnaXN0ZXIgYS4KKwleCQkJTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLgorCWkjaW5jbHVkZSAiPEVzYz4JSW5zZXJ0IHRoZSBzdHJpbmcgI2luY2x1ZGUgIiBhdCB0aGUgYmVnaW5uaW5nCisJCQkJb2YgdGhlIGxpbmUuCisJJAkJCU1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKwlhIjxFc2M+CQkJQXBwZW5kIHRoZSBjaGFyYWN0ZXIgZG91YmxlIHF1b3RhdGlvbiBtYXJrICgiKQorCQkJCXRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisJagkJCUdvIHRvIHRoZSBuZXh0IGxpbmUuCisJcQkJCVN0b3AgcmVjb3JkaW5nIHRoZSBtYWNyby4KKworTm93IHRoYXQgeW91IGhhdmUgZG9uZSB0aGUgd29yayBvbmNlLCB5b3UgY2FuIHJlcGVhdCB0aGUgY2hhbmdlIGJ5IHR5cGluZyB0aGUKK2NvbW1hbmQgIkBhIiB0aHJlZSB0aW1lcy4KKyAgIFRoZSAiQGEiIGNvbW1hbmQgY2FuIGJlIHByZWNlZGVkIGJ5IGEgY291bnQsIHdoaWNoIHdpbGwgY2F1c2UgdGhlIG1hY3JvIHRvCitiZSBleGVjdXRlZCB0aGF0IG51bWJlciBvZiB0aW1lcy4gIEluIHRoaXMgY2FzZSB5b3Ugd291bGQgdHlwZTogPgorCisJM0BhCisKKworTU9WRSBBTkQgRVhFQ1VURQorCitZb3UgbWlnaHQgaGF2ZSB0aGUgbGluZXMgeW91IHdhbnQgdG8gY2hhbmdlIGluIHZhcmlvdXMgcGxhY2VzLiAgSnVzdCBtb3ZlIHRoZQorY3Vyc29yIHRvIGVhY2ggbG9jYXRpb24gYW5kIHVzZSB0aGUgIkBhIiBjb21tYW5kLiAgSWYgeW91IGhhdmUgZG9uZSB0aGF0IG9uY2UsCit5b3UgY2FuIGRvIGl0IGFnYWluIHdpdGggIkBAIi4gIFRoYXQncyBhIGJpdCBlYXNpZXIgdG8gdHlwZS4gIElmIHlvdSBub3cKK2V4ZWN1dGUgcmVnaXN0ZXIgYiB3aXRoICJAYiIsIHRoZSBuZXh0ICJAQCIgd2lsbCB1c2UgcmVnaXN0ZXIgYi4KKyAgIElmIHlvdSBjb21wYXJlIHRoZSBwbGF5YmFjayBtZXRob2Qgd2l0aCB1c2luZyAiLiIsIHRoZXJlIGFyZSBzZXZlcmFsCitkaWZmZXJlbmNlcy4gIEZpcnN0IG9mIGFsbCwgIi4iIGNhbiBvbmx5IHJlcGVhdCBvbmUgY2hhbmdlLiAgQXMgc2VlbiBpbiB0aGUKK2V4YW1wbGUgYWJvdmUsICJAYSIgY2FuIGRvIHNldmVyYWwgY2hhbmdlcywgYW5kIG1vdmUgYXJvdW5kIGFzIHdlbGwuCitTZWNvbmRseSwgIi4iIGNhbiBvbmx5IHJlbWVtYmVyIHRoZSBsYXN0IGNoYW5nZS4gIEV4ZWN1dGluZyBhIHJlZ2lzdGVyIGFsbG93cworeW91IHRvIG1ha2UgYW55IGNoYW5nZXMgYW5kIHRoZW4gc3RpbGwgdXNlICJAYSIgdG8gcmVwbGF5IHRoZSByZWNvcmRlZAorY29tbWFuZHMuICBGaW5hbGx5LCB5b3UgY2FuIHVzZSAyNiBkaWZmZXJlbnQgcmVnaXN0ZXJzLiAgVGh1cyB5b3UgY2FuIHJlbWVtYmVyCisyNiBkaWZmZXJlbnQgY29tbWFuZCBzZXF1ZW5jZXMgdG8gZXhlY3V0ZS4KKworCitVU0lORyBSRUdJU1RFUlMKKworVGhlIHJlZ2lzdGVycyB1c2VkIGZvciByZWNvcmRpbmcgYXJlIHRoZSBzYW1lIG9uZXMgeW91IHVzZWQgZm9yIHlhbmsgYW5kCitkZWxldGUgY29tbWFuZHMuICBUaGlzIGFsbG93cyB5b3UgdG8gbWl4IHJlY29yZGluZyB3aXRoIG90aGVyIGNvbW1hbmRzIHRvCittYW5pcHVsYXRlIHRoZSByZWdpc3RlcnMuCisgICBTdXBwb3NlIHlvdSBoYXZlIHJlY29yZGVkIGEgZmV3IGNvbW1hbmRzIGluIHJlZ2lzdGVyIG4uICBXaGVuIHlvdSBleGVjdXRlCit0aGlzIHdpdGggIkBuIiB5b3Ugbm90aWNlIHlvdSBkaWQgc29tZXRoaW5nIHdyb25nLiAgWW91IGNvdWxkIHRyeSByZWNvcmRpbmcKK2FnYWluLCBidXQgcGVyaGFwcyB5b3Ugd2lsbCBtYWtlIGFub3RoZXIgbWlzdGFrZS4gIEluc3RlYWQsIHVzZSB0aGlzIHRyaWNrOgorCisJRwkJCUdvIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisJbzxFc2M+CQkJQ3JlYXRlIGFuIGVtcHR5IGxpbmUuCisJIm5wCQkJUHV0IHRoZSB0ZXh0IGZyb20gdGhlIG4gcmVnaXN0ZXIuICBZb3Ugbm93IHNlZQorCQkJCXRoZSBjb21tYW5kcyB5b3UgdHlwZWQgYXMgdGV4dCBpbiB0aGUgZmlsZS4KKwl7ZWRpdHN9CQkJQ2hhbmdlIHRoZSBjb21tYW5kcyB0aGF0IHdlcmUgd3JvbmcuICBUaGlzIGlzCisJCQkJanVzdCBsaWtlIGVkaXRpbmcgdGV4dC4KKwkwCQkJR28gdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLgorCSJueSQJCQlZYW5rIHRoZSBjb3JyZWN0ZWQgY29tbWFuZHMgaW50byB0aGUgbgorCQkJCXJlZ2lzdGVyLgorCWRkCQkJRGVsZXRlIHRoZSBzY3JhdGNoIGxpbmUuCisKK05vdyB5b3UgY2FuIGV4ZWN1dGUgdGhlIGNvcnJlY3RlZCBjb21tYW5kcyB3aXRoICJAbiIuICAoSWYgeW91ciByZWNvcmRlZAorY29tbWFuZHMgaW5jbHVkZSBsaW5lIGJyZWFrcywgYWRqdXN0IHRoZSBsYXN0IHR3byBpdGVtcyBpbiB0aGUgZXhhbXBsZSB0bworaW5jbHVkZSBhbGwgdGhlIGxpbmVzLikKKworCitBUFBFTkRJTkcgVE8gQSBSRUdJU1RFUgorCitTbyBmYXIgd2UgaGF2ZSB1c2VkIGEgbG93ZXJjYXNlIGxldHRlciBmb3IgdGhlIHJlZ2lzdGVyIG5hbWUuICBUbyBhcHBlbmQgdG8gYQorcmVnaXN0ZXIsIHVzZSBhbiB1cHBlcmNhc2UgbGV0dGVyLgorICAgU3VwcG9zZSB5b3UgaGF2ZSByZWNvcmRlZCBhIGNvbW1hbmQgdG8gY2hhbmdlIGEgd29yZCB0byByZWdpc3RlciBjLiAgSXQKK3dvcmtzIHByb3Blcmx5LCBidXQgeW91IHdvdWxkIGxpa2UgdG8gYWRkIGEgc2VhcmNoIGZvciB0aGUgbmV4dCB3b3JkIHRvCitjaGFuZ2UuICBUaGlzIGNhbiBiZSBkb25lIHdpdGg6ID4KKworCXFDL3dvcmQ8RW50ZXI+cQorCitZb3Ugc3RhcnQgd2l0aCAicUMiLCB3aGljaCByZWNvcmRzIHRvIHRoZSBjIHJlZ2lzdGVyIGFuZCBhcHBlbmRzLiAgVGh1cword3JpdGluZyB0byBhbiB1cHBlcmNhc2UgcmVnaXN0ZXIgbmFtZSBtZWFucyB0byBhcHBlbmQgdG8gdGhlIHJlZ2lzdGVyIHdpdGgKK3RoZSBzYW1lIGxldHRlciwgYnV0IGxvd2VyY2FzZS4KKworVGhpcyB3b3JrcyBib3RoIHdpdGggcmVjb3JkaW5nIGFuZCB3aXRoIHlhbmsgYW5kIGRlbGV0ZSBjb21tYW5kcy4gIEZvcgorZXhhbXBsZSwgeW91IHdhbnQgdG8gY29sbGVjdCBhIHNlcXVlbmNlIG9mIGxpbmVzIGludG8gdGhlIGEgcmVnaXN0ZXIuICBZYW5rCit0aGUgZmlyc3QgbGluZSB3aXRoOiA+CisKKwkiYVkKKworTm93IG1vdmUgdG8gdGhlIHNlY29uZCBsaW5lLCBhbmQgdHlwZTogPgorCisJIkFZCisKK1JlcGVhdCB0aGlzIGNvbW1hbmQgZm9yIGFsbCBsaW5lcy4gIFRoZSBhIHJlZ2lzdGVyIG5vdyBjb250YWlucyBhbGwgdGhvc2UKK2xpbmVzLCBpbiB0aGUgb3JkZXIgeW91IHlhbmtlZCB0aGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMC4yKglTdWJzdGl0dXRpb24JCQkJCQkqZmluZC1yZXBsYWNlKgorCitUaGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kIGVuYWJsZXMgeW91IHRvIHBlcmZvcm0gc3RyaW5nIHJlcGxhY2VtZW50cyBvbiBhCit3aG9sZSByYW5nZSBvZiBsaW5lcy4gIFRoZSBnZW5lcmFsIGZvcm0gb2YgdGhpcyBjb21tYW5kIGlzIGFzIGZvbGxvd3M6ID4KKworCTpbcmFuZ2Vdc3Vic3RpdHV0ZS9mcm9tL3RvL1tmbGFnc10KKworVGhpcyBjb21tYW5kIGNoYW5nZXMgdGhlICJmcm9tIiBzdHJpbmcgdG8gdGhlICJ0byIgc3RyaW5nIGluIHRoZSBsaW5lcworc3BlY2lmaWVkIHdpdGggW3JhbmdlXS4gIEZvciBleGFtcGxlLCB5b3UgY2FuIGNoYW5nZSAiUHJvZmVzc29yIiB0byAiVGVhY2hlciIKK2luIGFsbCBsaW5lcyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOiVzdWJzdGl0dXRlL1Byb2Zlc3Nvci9UZWFjaGVyLworPAorCU5vdGU6CisJVGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCBpcyBhbG1vc3QgbmV2ZXIgc3BlbGxlZCBvdXQgY29tcGxldGVseS4KKwlNb3N0IG9mIHRoZSB0aW1lLCBwZW9wbGUgdXNlIHRoZSBhYmJyZXZpYXRlZCB2ZXJzaW9uICI6cyIuICBGcm9tIGhlcmUKKwlvbiB0aGUgYWJicmV2aWF0aW9uIHdpbGwgYmUgdXNlZC4KKworVGhlICIlIiBiZWZvcmUgdGhlIGNvbW1hbmQgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHdvcmtzIG9uIGFsbCBsaW5lcy4gIFdpdGhvdXQKK2EgcmFuZ2UsICI6cyIgb25seSB3b3JrcyBvbiB0aGUgY3VycmVudCBsaW5lLiAgTW9yZSBhYm91dCByYW5nZXMgaW4gdGhlIG5leHQKK3NlY3Rpb24gfDEwLjN8LgorCitCeSBkZWZhdWx0LCB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kIGNoYW5nZXMgb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvbgorZWFjaCBsaW5lLiAgRm9yIGV4YW1wbGUsIHRoZSBwcmVjZWRpbmcgY29tbWFuZCBjaGFuZ2VzIHRoZSBsaW5lOgorCisJUHJvZmVzc29yIFNtaXRoIGNyaXRpY2l6ZWQgUHJvZmVzc29yIEpvaG5zb24gdG9kYXkuIH4KKwordG86CisKKwlUZWFjaGVyIFNtaXRoIGNyaXRpY2l6ZWQgUHJvZmVzc29yIEpvaG5zb24gdG9kYXkuIH4KKworVG8gY2hhbmdlIGV2ZXJ5IG9jY3VycmVuY2Ugb24gdGhlIGxpbmUsIHlvdSBuZWVkIHRvIGFkZCB0aGUgZyAoZ2xvYmFsKSBmbGFnLgorVGhlIGNvbW1hbmQ6ID4KKworCTolcy9Qcm9mZXNzb3IvVGVhY2hlci9nCisKK3Jlc3VsdHMgaW4gKHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIGxpbmUpOgorCisJVGVhY2hlciBTbWl0aCBjcml0aWNpemVkIFRlYWNoZXIgSm9obnNvbiB0b2RheS4gfgorCitPdGhlciBmbGFncyBpbmNsdWRlIHAgKHByaW50KSwgd2hpY2ggY2F1c2VzIHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgdG8gcHJpbnQKK291dCBlYWNoIGxpbmUgaXQgY2hhbmdlcy4gIFRoZSBjIChjb25maXJtKSBmbGFnIHRlbGxzICI6c3Vic3RpdHV0ZSIgdG8gYXNrIHlvdQorZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgaXQgcGVyZm9ybXMgZWFjaCBzdWJzdGl0dXRpb24uICBFbnRlciB0aGUgZm9sbG93aW5nOiA+CisKKwk6JXMvUHJvZmVzc29yL1RlYWNoZXIvYworCitWaW0gZmluZHMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgIlByb2Zlc3NvciIgYW5kIGRpc3BsYXlzIHRoZSB0ZXh0IGl0IGlzCithYm91dCB0byBjaGFuZ2UuICBZb3UgZ2V0IHRoZSBmb2xsb3dpbmcgcHJvbXB0OiA+CisKKwlyZXBsYWNlIHdpdGggVGVhY2hlciAoeS9uL2EvcS9sL15FL15ZKT8KKworQXQgdGhpcyBwb2ludCwgeW91IG11c3QgZW50ZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgYW5zd2VyczoKKworCXkJCVllczsgbWFrZSB0aGlzIGNoYW5nZS4KKwluCQlObzsgc2tpcCB0aGlzIG1hdGNoLgorCWEJCUFsbDsgbWFrZSB0aGlzIGNoYW5nZSBhbmQgYWxsIHJlbWFpbmluZyBvbmVzIHdpdGhvdXQKKwkJCWZ1cnRoZXIgY29uZmlybWF0aW9uLgorCXEJCVF1aXQ7IGRvbid0IG1ha2UgYW55IG1vcmUgY2hhbmdlcy4KKwlsCQlMYXN0OyBtYWtlIHRoaXMgY2hhbmdlIGFuZCB0aGVuIHF1aXQuCisJQ1RSTC1FCQlTY3JvbGwgdGhlIHRleHQgb25lIGxpbmUgdXAuCisJQ1RSTC1ZCQlTY3JvbGwgdGhlIHRleHQgb25lIGxpbmUgZG93bi4KKworCitUaGUgImZyb20iIHBhcnQgb2YgdGhlIHN1YnN0aXR1dGUgY29tbWFuZCBpcyBhY3R1YWxseSBhIHBhdHRlcm4uICBUaGUgc2FtZQora2luZCBhcyB1c2VkIGZvciB0aGUgc2VhcmNoIGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgdGhpcyBjb21tYW5kIG9ubHkKK3N1YnN0aXR1dGVzICJ0aGUiIHdoZW4gaXQgYXBwZWFycyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lOiA+CisKKwk6cy9edGhlL3RoZXNlLworCitJZiB5b3UgYXJlIHN1YnN0aXR1dGluZyB3aXRoIGEgImZyb20iIG9yICJ0byIgcGFydCB0aGF0IGluY2x1ZGVzIGEgc2xhc2gsIHlvdQorbmVlZCB0byBwdXQgYSBiYWNrc2xhc2ggYmVmb3JlIGl0LiAgQSBzaW1wbGVyIHdheSBpcyB0byB1c2UgYW5vdGhlciBjaGFyYWN0ZXIKK2luc3RlYWQgb2YgdGhlIHNsYXNoLiAgQSBwbHVzLCBmb3IgZXhhbXBsZTogPgorCisJOnMrb25lL3R3bytvbmUgb3IgdHdvKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMC4zKglDb21tYW5kIHJhbmdlcworCitUaGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kLCBhbmQgbWFueSBvdGhlciA6IGNvbW1hbmRzLCBjYW4gYmUgYXBwbGllZCB0byBhCitzZWxlY3Rpb24gb2YgbGluZXMuICBUaGlzIGlzIGNhbGxlZCBhIHJhbmdlLgorICAgVGhlIHNpbXBsZSBmb3JtIG9mIGEgcmFuZ2UgaXMge251bWJlcn0se251bWJlcn0uICBGb3IgZXhhbXBsZTogPgorCisJOjEsNXMvdGhpcy90aGF0L2cKKworRXhlY3V0ZXMgdGhlIHN1YnN0aXR1dGUgY29tbWFuZCBvbiB0aGUgbGluZXMgMSB0byA1LiAgTGluZSA1IGlzIGluY2x1ZGVkLgorVGhlIHJhbmdlIGlzIGFsd2F5cyBwbGFjZWQgYmVmb3JlIHRoZSBjb21tYW5kLgorCitBIHNpbmdsZSBudW1iZXIgY2FuIGJlIHVzZWQgdG8gYWRkcmVzcyBvbmUgc3BlY2lmaWMgbGluZTogPgorCisJOjU0cy9QcmVzaWRlbnQvRm9vbC8KKworU29tZSBjb21tYW5kcyB3b3JrIG9uIHRoZSB3aG9sZSBmaWxlIHdoZW4geW91IGRvIG5vdCBzcGVjaWZ5IGEgcmFuZ2UuICBUbyBtYWtlCit0aGVtIHdvcmsgb24gdGhlIGN1cnJlbnQgbGluZSB0aGUgIi4iIGFkZHJlc3MgaXMgdXNlZC4gIFRoZSAiOndyaXRlIiBjb21tYW5kCit3b3JrcyBsaWtlIHRoYXQuICBXaXRob3V0IGEgcmFuZ2UsIGl0IHdyaXRlcyB0aGUgd2hvbGUgZmlsZS4gIFRvIG1ha2UgaXQgd3JpdGUKK29ubHkgdGhlIGN1cnJlbnQgbGluZSBpbnRvIGEgZmlsZTogPgorCisJOi53cml0ZSBvdGhlcmZpbGUKKworVGhlIGZpcnN0IGxpbmUgYWx3YXlzIGhhcyBudW1iZXIgb25lLiAgSG93IGFib3V0IHRoZSBsYXN0IGxpbmU/ICBUaGUgIiQiCitjaGFyYWN0ZXIgaXMgdXNlZCBmb3IgdGhpcy4gIEZvciBleGFtcGxlLCB0byBzdWJzdGl0dXRlIGluIHRoZSBsaW5lcyBmcm9tIHRoZQorY3Vyc29yIHRvIHRoZSBlbmQ6ID4KKworCTouLCRzL3llcy9uby8KKworVGhlICIlIiByYW5nZSB0aGF0IHdlIHVzZWQgYmVmb3JlLCBpcyBhY3R1YWxseSBhIHNob3J0IHdheSB0byBzYXkgIjEsJCIsIGZyb20KK3RoZSBmaXJzdCB0byB0aGUgbGFzdCBsaW5lLgorCisKK1VTSU5HIEEgUEFUVEVSTiBJTiBBIFJBTkdFCisKK1N1cHBvc2UgeW91IGFyZSBlZGl0aW5nIGEgY2hhcHRlciBpbiBhIGJvb2ssIGFuZCB3YW50IHRvIHJlcGxhY2UgYWxsCitvY2N1cnJlbmNlcyBvZiAiZ3JleSIgd2l0aCAiZ3JheSIuICBCdXQgb25seSBpbiB0aGlzIGNoYXB0ZXIsIG5vdCBpbiB0aGUgbmV4dAorb25lLiAgWW91IGtub3cgdGhhdCBvbmx5IGNoYXB0ZXIgYm91bmRhcmllcyBoYXZlIHRoZSB3b3JkICJDaGFwdGVyIiBpbiB0aGUKK2ZpcnN0IGNvbHVtbi4gIFRoaXMgY29tbWFuZCB3aWxsIHdvcmsgdGhlbjogPgorCisJOj9eQ2hhcHRlcj8sL15DaGFwdGVyL3M9Z3JleT1ncmF5PWcKKworWW91IGNhbiBzZWUgYSBzZWFyY2ggcGF0dGVybiBpcyB1c2VkIHR3aWNlLiAgVGhlIGZpcnN0ICI/XkNoYXB0ZXI/IiBmaW5kcyB0aGUKK2xpbmUgYWJvdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gdGhhdCBtYXRjaGVzIHRoaXMgcGF0dGVybi4gIFRodXMgdGhlID9wYXR0ZXJuPworcmFuZ2UgaXMgdXNlZCB0byBzZWFyY2ggYmFja3dhcmRzLiAgU2ltaWxhcmx5LCAiL15DaGFwdGVyLyIgaXMgdXNlZCB0byBzZWFyY2gKK2ZvcndhcmQgZm9yIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjaGFwdGVyLgorICAgVG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlIHNsYXNoZXMsIHRoZSAiPSIgY2hhcmFjdGVyIHdhcyB1c2VkIGluIHRoZQorc3Vic3RpdHV0ZSBjb21tYW5kIGhlcmUuICBBIHNsYXNoIG9yIGFub3RoZXIgY2hhcmFjdGVyIHdvdWxkIGhhdmUgd29ya2VkIGFzCit3ZWxsLgorCisKK0FERCBBTkQgU1VCVFJBQ1QKKworVGhlcmUgaXMgYSBzbGlnaHQgZXJyb3IgaW4gdGhlIGFib3ZlIGNvbW1hbmQ6IElmIHRoZSB0aXRsZSBvZiB0aGUgbmV4dCBjaGFwdGVyCitoYWQgaW5jbHVkZWQgImdyZXkiIGl0IHdvdWxkIGJlIHJlcGxhY2VkIGFzIHdlbGwuICBNYXliZSB0aGF0J3Mgd2hhdCB5b3UKK3dhbnRlZCwgYnV0IHdoYXQgaWYgeW91IGRpZG4ndD8gIFRoZW4geW91IGNhbiBzcGVjaWZ5IGFuIG9mZnNldC4KKyAgIFRvIHNlYXJjaCBmb3IgYSBwYXR0ZXJuIGFuZCB0aGVuIHVzZSB0aGUgbGluZSBhYm92ZSBpdDogPgorCisJL0NoYXB0ZXIvLTEKKworWW91IGNhbiB1c2UgYW55IG51bWJlciBpbnN0ZWFkIG9mIHRoZSAxLiAgVG8gYWRkcmVzcyB0aGUgc2Vjb25kIGxpbmUgYmVsb3cgdGhlCittYXRjaDogPgorCisJL0NoYXB0ZXIvKzIKKworVGhlIG9mZnNldHMgY2FuIGFsc28gYmUgdXNlZCB3aXRoIHRoZSBvdGhlciBpdGVtcyBpbiBhIHJhbmdlLiAgTG9vayBhdCB0aGlzCitvbmU6ID4KKworCTouKzMsJC01CisKK1RoaXMgc3BlY2lmaWVzIHRoZSByYW5nZSB0aGF0IHN0YXJ0cyB0aHJlZSBsaW5lcyBiZWxvdyB0aGUgY3Vyc29yIGFuZCBlbmRzCitmaXZlIGxpbmVzIGJlZm9yZSB0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlLgorCisKK1VTSU5HIE1BUktTCisKK0luc3RlYWQgb2YgZmlndXJpbmcgb3V0IHRoZSBsaW5lIG51bWJlcnMgb2YgY2VydGFpbiBwb3NpdGlvbnMsIHJlbWVtYmVyaW5nIHRoZW0KK2FuZCB0eXBpbmcgdGhlbSBpbiBhIHJhbmdlLCB5b3UgY2FuIHVzZSBtYXJrcy4KKyAgIFBsYWNlIHRoZSBtYXJrcyBhcyBtZW50aW9uZWQgaW4gY2hhcHRlciAzLiAgRm9yIGV4YW1wbGUsIHVzZSAibXQiIHRvIG1hcmsKK3RoZSB0b3Agb2YgYW4gYXJlYSBhbmQgIm1iIiB0byBtYXJrIHRoZSBib3R0b20uICBUaGVuIHlvdSBjYW4gdXNlIHRoaXMgcmFuZ2UKK3RvIHNwZWNpZnkgdGhlIGxpbmVzIGJldHdlZW4gdGhlIG1hcmtzIChpbmNsdWRpbmcgdGhlIGxpbmVzIHdpdGggdGhlIG1hcmtzKTogPgorCisJOid0LCdiCisKKworVklTVUFMIE1PREUgQU5EIFJBTkdFUworCitZb3UgY2FuIHNlbGVjdCB0ZXh0IHdpdGggVmlzdWFsIG1vZGUuICBJZiB5b3UgdGhlbiBwcmVzcyAiOiIgdG8gc3RhcnQgYSBjb2xvbgorY29tbWFuZCwgeW91IHdpbGwgc2VlIHRoaXM6ID4KKworCTonPCwnPgorCitOb3cgeW91IGNhbiB0eXBlIHRoZSBjb21tYW5kIGFuZCBpdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJhbmdlIG9mIGxpbmVzIHRoYXQKK3dhcyB2aXN1YWxseSBzZWxlY3RlZC4KKworCU5vdGU6CisJV2hlbiB1c2luZyBWaXN1YWwgbW9kZSB0byBzZWxlY3QgcGFydCBvZiBhIGxpbmUsIG9yIHVzaW5nIENUUkwtViB0bworCXNlbGVjdCBhIGJsb2NrIG9mIHRleHQsIHRoZSBjb2xvbiBjb21tYW5kcyB3aWxsIHN0aWxsIGFwcGx5IHRvIHdob2xlCisJbGluZXMuICBUaGlzIG1pZ2h0IGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFZpbS4KKworVGhlICc8IGFuZCAnPiBhcmUgYWN0dWFsbHkgbWFya3MsIHBsYWNlZCBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgVmlzdWFsCitzZWxlY3Rpb24uICBUaGUgbWFya3MgcmVtYWluIGF0IHRoZWlyIHBvc2l0aW9uIHVudGlsIGFub3RoZXIgVmlzdWFsIHNlbGVjdGlvbgoraXMgbWFkZS4gIFRodXMgeW91IGNhbiB1c2UgdGhlICInPCIgY29tbWFuZCB0byBqdW1wIHRvIHBvc2l0aW9uIHdoZXJlIHRoZQorVmlzdWFsIGFyZWEgc3RhcnRlZC4gIEFuZCB5b3UgY2FuIG1peCB0aGUgbWFya3Mgd2l0aCBvdGhlciBpdGVtczogPgorCisJOic+LCQKKworVGhpcyBhZGRyZXNzZXMgdGhlIGxpbmVzIGZyb20gdGhlIGVuZCBvZiB0aGUgVmlzdWFsIGFyZWEgdG8gdGhlIGVuZCBvZiB0aGUKK2ZpbGUuCisKKworQSBOVU1CRVIgT0YgTElORVMKKworV2hlbiB5b3Uga25vdyBob3cgbWFueSBsaW5lcyB5b3Ugd2FudCB0byBjaGFuZ2UsIHlvdSBjYW4gdHlwZSB0aGUgbnVtYmVyIGFuZAordGhlbiAiOiIuICBGb3IgZXhhbXBsZSwgd2hlbiB5b3UgdHlwZSAiNToiLCB5b3Ugd2lsbCBnZXQ6ID4KKworCTouLC4rNAorCitOb3cgeW91IGNhbiB0eXBlIHRoZSBjb21tYW5kIHlvdSB3YW50IHRvIHVzZS4gIEl0IHdpbGwgdXNlIHRoZSByYW5nZSAiLiIKKyhjdXJyZW50IGxpbmUpIHVudGlsICIuKzQiIChmb3VyIGxpbmVzIGRvd24pLiAgVGh1cyBpdCBzcGFucyBmaXZlIGxpbmVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMC40KglUaGUgZ2xvYmFsIGNvbW1hbmQKKworVGhlICI6Z2xvYmFsIiBjb21tYW5kIGlzIG9uZSBvZiB0aGUgbW9yZSBwb3dlcmZ1bCBmZWF0dXJlcyBvZiBWaW0uICBJdCBhbGxvd3MKK3lvdSB0byBmaW5kIGEgbWF0Y2ggZm9yIGEgcGF0dGVybiBhbmQgZXhlY3V0ZSBhIGNvbW1hbmQgdGhlcmUuICBUaGUgZ2VuZXJhbAorZm9ybSBpczogPgorCisJOltyYW5nZV1nbG9iYWwve3BhdHRlcm59L3tjb21tYW5kfQorCitUaGlzIGlzIHNpbWlsYXIgdG8gdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZC4gIEJ1dCwgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlCittYXRjaGVkIHRleHQgd2l0aCBvdGhlciB0ZXh0LCB0aGUgY29tbWFuZCB7Y29tbWFuZH0gaXMgZXhlY3V0ZWQuCisKKwlOb3RlOgorCVRoZSBjb21tYW5kIGV4ZWN1dGVkIGZvciAiOmdsb2JhbCIgbXVzdCBiZSBvbmUgdGhhdCBzdGFydHMgd2l0aCBhCisJY29sb24uICBOb3JtYWwgbW9kZSBjb21tYW5kcyBjYW4gbm90IGJlIHVzZWQgZGlyZWN0bHkuICBUaGUgfDpub3JtYWx8CisJY29tbWFuZCBjYW4gZG8gdGhpcyBmb3IgeW91LgorCitTdXBwb3NlIHlvdSB3YW50IHRvIGNoYW5nZSAiZm9vYmFyIiB0byAiYmFyZm9vIiwgYnV0IG9ubHkgaW4gQysrIHN0eWxlCitjb21tZW50cy4gIFRoZXNlIGNvbW1lbnRzIHN0YXJ0IHdpdGggIi8vIi4gIFVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpnKy8vK3MvZm9vYmFyL2JhcmZvby9nCisKK1RoaXMgc3RhcnRzIHdpdGggIjpnIi4gIFRoYXQgaXMgc2hvcnQgZm9yICI6Z2xvYmFsIiwganVzdCBsaWtlICI6cyIgaXMgc2hvcnQKK2ZvciAiOnN1YnN0aXR1dGUiLiAgVGhlbiB0aGUgcGF0dGVybiwgZW5jbG9zZWQgaW4gcGx1cyBjaGFyYWN0ZXJzLiAgU2luY2UgdGhlCitwYXR0ZXJuIHdlIGFyZSBsb29raW5nIGZvciBjb250YWlucyBhIHNsYXNoLCB0aGlzIHVzZXMgdGhlIHBsdXMgY2hhcmFjdGVyIHRvCitzZXBhcmF0ZSB0aGUgcGF0dGVybi4gIE5leHQgY29tZXMgdGhlIHN1YnN0aXR1dGUgY29tbWFuZCB0aGF0IGNoYW5nZXMgImZvb2JhciIKK2ludG8gImJhcmZvbyIuCisgICBUaGUgZGVmYXVsdCByYW5nZSBmb3IgdGhlIGdsb2JhbCBjb21tYW5kIGlzIHRoZSB3aG9sZSBmaWxlLiAgVGh1cyBubyByYW5nZQord2FzIHNwZWNpZmllZCBpbiB0aGlzIGV4YW1wbGUuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tICI6c3Vic3RpdHV0ZSIsIHdoaWNoCit3b3JrcyBvbiBvbmUgbGluZSB3aXRob3V0IGEgcmFuZ2UuCisgICBUaGUgY29tbWFuZCBpc24ndCBwZXJmZWN0LCBzaW5jZSBpdCBhbHNvIG1hdGNoZXMgbGluZXMgd2hlcmUgIi8vIiBhcHBlYXJzCitoYWxmd2F5IGEgbGluZSwgYW5kIHRoZSBzdWJzdGl0dXRpb24gd2lsbCBhbHNvIHRha2UgcGxhY2UgYmVmb3JlIHRoZSAiLy8iLgorCitKdXN0IGxpa2Ugd2l0aCAiOnN1YnN0aXR1dGUiLCBhbnkgcGF0dGVybiBjYW4gYmUgdXNlZC4gIFdoZW4geW91IGxlYXJuIG1vcmUKK2NvbXBsaWNhdGVkIHBhdHRlcm5zIGxhdGVyLCB5b3UgY2FuIHVzZSB0aGVtIGhlcmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEwLjUqCVZpc3VhbCBibG9jayBtb2RlCisKK1dpdGggQ1RSTC1WIHlvdSBjYW4gc3RhcnQgc2VsZWN0aW9uIG9mIGEgcmVjdGFuZ3VsYXIgYXJlYSBvZiB0ZXh0LiAgVGhlcmUgYXJlCithIGZldyBjb21tYW5kcyB0aGF0IGRvIHNvbWV0aGluZyBzcGVjaWFsIHdpdGggdGhlIHRleHQgYmxvY2suCisKK1RoZXJlIGlzIHNvbWV0aGluZyBzcGVjaWFsIGFib3V0IHVzaW5nIHRoZSAiJCIgY29tbWFuZCBpbiBWaXN1YWwgYmxvY2sgbW9kZS4KK1doZW4gdGhlIGxhc3QgbW90aW9uIGNvbW1hbmQgdXNlZCB3YXMgIiQiLCBhbGwgbGluZXMgaW4gdGhlIFZpc3VhbCBzZWxlY3Rpb24KK3dpbGwgZXh0ZW5kIHVudGlsIHRoZSBlbmQgb2YgdGhlIGxpbmUsIGFsc28gd2hlbiB0aGUgbGluZSB3aXRoIHRoZSBjdXJzb3IgaXMKK3Nob3J0ZXIuICBUaGlzIHJlbWFpbnMgZWZmZWN0aXZlIHVudGlsIHlvdSB1c2UgYSBtb3Rpb24gY29tbWFuZCB0aGF0IG1vdmVzIHRoZQorY3Vyc29yIGhvcml6b250YWxseS4gIFRodXMgdXNpbmcgImoiIGtlZXBzIGl0LCAiaCIgc3RvcHMgaXQuCisKKworSU5TRVJUSU5HIFRFWFQKKworVGhlIGNvbW1hbmQgICJJe3N0cmluZ308RXNjPiIgaW5zZXJ0cyB0aGUgdGV4dCB7c3RyaW5nfSBpbiBlYWNoIGxpbmUsIGp1c3QKK2xlZnQgb2YgdGhlIHZpc3VhbCBibG9jay4gIFlvdSBzdGFydCBieSBwcmVzc2luZyBDVFJMLVYgdG8gZW50ZXIgdmlzdWFsIGJsb2NrCittb2RlLiAgTm93IHlvdSBtb3ZlIHRoZSBjdXJzb3IgdG8gZGVmaW5lIHlvdXIgYmxvY2suICBOZXh0IHlvdSB0eXBlIEkgdG8gZW50ZXIKK0luc2VydCBtb2RlLCBmb2xsb3dlZCBieSB0aGUgdGV4dCB0byBpbnNlcnQuICBBcyB5b3UgdHlwZSwgdGhlIHRleHQgYXBwZWFycyBvbgordGhlIGZpcnN0IGxpbmUgb25seS4KKyAgIEFmdGVyIHlvdSBwcmVzcyA8RXNjPiB0byBlbmQgdGhlIGluc2VydCwgdGhlIHRleHQgd2lsbCBtYWdpY2FsbHkgYmUKK2luc2VydGVkIGluIHRoZSByZXN0IG9mIHRoZSBsaW5lcyBjb250YWluZWQgaW4gdGhlIHZpc3VhbCBzZWxlY3Rpb24uICBFeGFtcGxlOgorCisJaW5jbHVkZSBvbmUgfgorCWluY2x1ZGUgdHdvIH4KKwlpbmNsdWRlIHRocmVlIH4KKwlpbmNsdWRlIGZvdXIgfgorCitNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlICJvIiBvZiAib25lIiBhbmQgcHJlc3MgQ1RSTC1WLiAgTW92ZSBpdCBkb3duIHdpdGggIjNqIgordG8gImZvdXIiLiAgWW91IG5vdyBoYXZlIGEgYmxvY2sgc2VsZWN0aW9uIHRoYXQgc3BhbnMgZm91ciBsaW5lcy4gIE5vdyB0eXBlOiA+CisKKwlJbWFpbi48RXNjPgorCitUaGUgcmVzdWx0OgorCisJaW5jbHVkZSBtYWluLm9uZSB+CisJaW5jbHVkZSBtYWluLnR3byB+CisJaW5jbHVkZSBtYWluLnRocmVlIH4KKwlpbmNsdWRlIG1haW4uZm91ciB+CisKK0lmIHRoZSBibG9jayBzcGFucyBzaG9ydCBsaW5lcyB0aGF0IGRvIG5vdCBleHRlbmQgaW50byB0aGUgYmxvY2ssIHRoZSB0ZXh0IGlzCitub3QgaW5zZXJ0ZWQgaW4gdGhhdCBsaW5lLiAgRm9yIGV4YW1wbGUsIG1ha2UgYSBWaXN1YWwgYmxvY2sgc2VsZWN0aW9uIHRoYXQKK2luY2x1ZGVzIHRoZSB3b3JkICJsb25nIiBpbiB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZSBvZiB0aGlzIHRleHQsIGFuZCB0aHVzIGhhcworbm8gdGV4dCBzZWxlY3RlZCBpbiB0aGUgc2Vjb25kIGxpbmU6CisKKwlUaGlzIGlzIGEgbG9uZyBsaW5lIH4KKwlzaG9ydCB+CisJQW55IG90aGVyIGxvbmcgbGluZSB+CisKKwkJICBeXl5eIHNlbGVjdGVkIGJsb2NrCisKK05vdyB1c2UgdGhlIGNvbW1hbmQgIkl2ZXJ5IDxFc2M+Ii4gIFRoZSByZXN1bHQgaXM6CisKKwlUaGlzIGlzIGEgdmVyeSBsb25nIGxpbmUgfgorCXNob3J0IH4KKwlBbnkgb3RoZXIgdmVyeSBsb25nIGxpbmUgfgorCitJbiB0aGUgc2hvcnQgbGluZSBubyB0ZXh0IHdhcyBpbnNlcnRlZC4KKworSWYgdGhlIHN0cmluZyB5b3UgaW5zZXJ0IGNvbnRhaW5zIGEgbmV3bGluZSwgdGhlICJJIiBhY3RzIGp1c3QgbGlrZSBhIE5vcm1hbAoraW5zZXJ0IGNvbW1hbmQgYW5kIGFmZmVjdHMgb25seSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgYmxvY2suCisKK1RoZSAiQSIgY29tbWFuZCB3b3JrcyB0aGUgc2FtZSB3YXksIGV4Y2VwdCB0aGF0IGl0IGFwcGVuZHMgYWZ0ZXIgdGhlIHJpZ2h0CitzaWRlIG9mIHRoZSBibG9jay4KKyAgIFRoZXJlIGlzIG9uZSBzcGVjaWFsIGNhc2UgZm9yICJBIjogU2VsZWN0IGEgVmlzdWFsIGJsb2NrIGFuZCB0aGVuIHVzZSAiJCIKK3RvIG1ha2UgdGhlIGJsb2NrIGV4dGVuZCB0byB0aGUgZW5kIG9mIGVhY2ggbGluZS4gIFVzaW5nICJBIiBub3cgd2lsbCBhcHBlbmQKK3RoZSB0ZXh0IHRvIHRoZSBlbmQgb2YgZWFjaCBsaW5lLgorICAgVXNpbmcgdGhlIHNhbWUgZXhhbXBsZSBmcm9tIGFib3ZlLCBhbmQgdGhlbiB0eXBpbmcgIiRBIFhYWDxFc2M+LCB5b3UgZ2V0Cit0aGlzIHJlc3VsdDoKKworCVRoaXMgaXMgYSBsb25nIGxpbmUgWFhYIH4KKwlzaG9ydCBYWFggfgorCUFueSBvdGhlciBsb25nIGxpbmUgWFhYIH4KKworVGhpcyByZWFsbHkgcmVxdWlyZXMgdXNpbmcgdGhlICIkIiBjb21tYW5kLiAgVmltIHJlbWVtYmVycyB0aGF0IGl0IHdhcyB1c2VkLgorTWFraW5nIHRoZSBzYW1lIHNlbGVjdGlvbiBieSBtb3ZpbmcgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBsb25nZXN0IGxpbmUKK3dpdGggb3RoZXIgbW92ZW1lbnQgY29tbWFuZHMgd2lsbCBub3QgaGF2ZSB0aGUgc2FtZSByZXN1bHQuCisKKworQ0hBTkdJTkcgVEVYVAorCitUaGUgVmlzdWFsIGJsb2NrICJjIiBjb21tYW5kIGRlbGV0ZXMgdGhlIGJsb2NrIGFuZCB0aGVuIHRocm93cyB5b3UgaW50byBJbnNlcnQKK21vZGUgdG8gZW5hYmxlIHlvdSB0byB0eXBlIGluIGEgc3RyaW5nLiAgVGhlIHN0cmluZyB3aWxsIGJlIGluc2VydGVkIGluIGVhY2gKK2xpbmUgaW4gdGhlIGJsb2NrLgorICAgU3RhcnRpbmcgd2l0aCB0aGUgc2FtZSBzZWxlY3Rpb24gb2YgdGhlICJsb25nIiB3b3JkcyBhcyBhYm92ZSwgdGhlbiB0eXBpbmcKKyJjX0xPTkdfPEVzYz4iLCB5b3UgZ2V0IHRoaXM6CisKKwlUaGlzIGlzIGEgX0xPTkdfIGxpbmUgfgorCXNob3J0IH4KKwlBbnkgb3RoZXIgX0xPTkdfIGxpbmUgfgorCitKdXN0IGxpa2Ugd2l0aCAiSSIgdGhlIHNob3J0IGxpbmUgaXMgbm90IGNoYW5nZWQuICBBbHNvLCB5b3UgY2FuJ3QgZW50ZXIgYQorbmV3bGluZSBpbiB0aGUgbmV3IHRleHQuCisKK1RoZSAiQyIgY29tbWFuZCBkZWxldGVzIHRleHQgZnJvbSB0aGUgbGVmdCBlZGdlIG9mIHRoZSBibG9jayB0byB0aGUgZW5kIG9mCitsaW5lLiAgSXQgdGhlbiBwdXRzIHlvdSBpbiBJbnNlcnQgbW9kZSBzbyB0aGF0IHlvdSBjYW4gdHlwZSBpbiBhIHN0cmluZywKK3doaWNoIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgZWFjaCBsaW5lLgorICAgU3RhcnRpbmcgd2l0aCB0aGUgc2FtZSB0ZXh0IGFnYWluLCBhbmQgdHlwaW5nICJDbmV3IHRleHQ8RXNjPiIgeW91IGdldDoKKworCVRoaXMgaXMgYSBuZXcgdGV4dCB+CisJc2hvcnQgfgorCUFueSBvdGhlciBuZXcgdGV4dCB+CisKK05vdGljZSB0aGF0LCBldmVuIHRob3VnaCBvbmx5IHRoZSAibG9uZyIgd29yZCB3YXMgc2VsZWN0ZWQsIHRoZSB0ZXh0IGFmdGVyIGl0CitpcyBkZWxldGVkIGFzIHdlbGwuICBUaHVzIG9ubHkgdGhlIGxvY2F0aW9uIG9mIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHZpc3VhbAorYmxvY2sgcmVhbGx5IG1hdHRlcnMuCisgICBBZ2Fpbiwgc2hvcnQgbGluZXMgdGhhdCBkbyBub3QgcmVhY2ggaW50byB0aGUgYmxvY2sgYXJlIGV4Y2x1ZGVkLgorCitPdGhlciBjb21tYW5kcyB0aGF0IGNoYW5nZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgYmxvY2s6CisKKwl+CXN3YXAgY2FzZQkoYSAtPiBBIGFuZCBBIC0+IGEpCisJVQltYWtlIHVwcGVyY2FzZSAgKGEgLT4gQSBhbmQgQSAtPiBBKQorCXUJbWFrZSBsb3dlcmNhc2UgIChhIC0+IGEgYW5kIEEgLT4gYSkKKworCitGSUxMSU5HIFdJVEggQSBDSEFSQUNURVIKKworVG8gZmlsbCB0aGUgd2hvbGUgYmxvY2sgd2l0aCBvbmUgY2hhcmFjdGVyLCB1c2UgdGhlICJyIiBjb21tYW5kLiAgQWdhaW4sCitzdGFydGluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUgdGV4dCBmcm9tIGFib3ZlLCBhbmQgdGhlbiB0eXBpbmcgInJ4IjoKKworCVRoaXMgaXMgYSB4eHh4IGxpbmUgfgorCXNob3J0IH4KKwlBbnkgb3RoZXIgeHh4eCBsaW5lIH4KKworCisJTm90ZToKKwlJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGNoYXJhY3RlcnMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUgaW4gdGhlCisJYmxvY2ssIGNoZWNrIG91dCB0aGUgJ3ZpcnR1YWxlZGl0JyBmZWF0dXJlIGluIGNoYXB0ZXIgMjUuCisKKworU0hJRlRJTkcKKworVGhlIGNvbW1hbmQgIj4iIHNoaWZ0cyB0aGUgc2VsZWN0ZWQgdGV4dCB0byB0aGUgcmlnaHQgb25lIHNoaWZ0IGFtb3VudCwKK2luc2VydGluZyB3aGl0ZXNwYWNlLiAgVGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIHNoaWZ0IGlzIHRoZSBsZWZ0IGVkZ2Ugb2YKK3RoZSB2aXN1YWwgYmxvY2suCisgICBXaXRoIHRoZSBzYW1lIGV4YW1wbGUgYWdhaW4sICI+IiBnaXZlcyB0aGlzIHJlc3VsdDoKKworCVRoaXMgaXMgYQkgIGxvbmcgbGluZSB+CisJc2hvcnQgfgorCUFueSBvdGhlcgkgIGxvbmcgbGluZSB+CisKK1RoZSBzaGlmdCBhbW91bnQgaXMgc3BlY2lmaWVkIHdpdGggdGhlICdzaGlmdHdpZHRoJyBvcHRpb24uICBUbyBjaGFuZ2UgaXQgdG8KK3VzZSA0IHNwYWNlczogPgorCisJOnNldCBzaGlmdHdpZHRoPTQKKworVGhlICI8IiBjb21tYW5kIHJlbW92ZXMgb25lIHNoaWZ0IGFtb3VudCBvZiB3aGl0ZXNwYWNlIGF0IHRoZSBsZWZ0CitlZGdlIG9mIHRoZSBibG9jay4gIFRoaXMgY29tbWFuZCBpcyBsaW1pdGVkIGJ5IHRoZSBhbW91bnQgb2YgdGV4dCB0aGF0IGlzCit0aGVyZTsgc28gaWYgdGhlcmUgaXMgbGVzcyB0aGFuIGEgc2hpZnQgYW1vdW50IG9mIHdoaXRlc3BhY2UgYXZhaWxhYmxlLCBpdAorcmVtb3ZlcyB3aGF0IGl0IGNhbi4KKworCitKT0lOSU5HIExJTkVTCisKK1RoZSAiSiIgY29tbWFuZCBqb2lucyBhbGwgc2VsZWN0ZWQgbGluZXMgdG9nZXRoZXIgaW50byBvbmUgbGluZS4gIFRodXMgaXQKK3JlbW92ZXMgdGhlIGxpbmUgYnJlYWtzLiAgQWN0dWFsbHksIHRoZSBsaW5lIGJyZWFrLCBsZWFkaW5nIHdoaXRlIHNwYWNlIGFuZAordHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgcmVwbGFjZWQgYnkgb25lIHNwYWNlLiAgVHdvIHNwYWNlcyBhcmUgdXNlZCBhZnRlciBhCitsaW5lIGVuZGluZyAodGhhdCBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSAnam9pbnNwYWNlcycgb3B0aW9uKS4KKyAgIExldCdzIHVzZSB0aGUgZXhhbXBsZSB0aGF0IHdlIGdvdCBzbyBmYW1pbGlhciB3aXRoIG5vdy4gIFRoZSByZXN1bHQgb2YKK3VzaW5nIHRoZSAiSiIgY29tbWFuZDoKKworCVRoaXMgaXMgYSBsb25nIGxpbmUgc2hvcnQgQW55IG90aGVyIGxvbmcgbGluZSB+CisKK1RoZSAiSiIgY29tbWFuZCBkb2Vzbid0IHJlcXVpcmUgYSBibG9ja3dpc2Ugc2VsZWN0aW9uLiAgSXQgd29ya3Mgd2l0aCAidiIgYW5kCisiViIgc2VsZWN0aW9uIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5LgorCitJZiB5b3UgZG9uJ3Qgd2FudCB0aGUgd2hpdGUgc3BhY2UgdG8gYmUgY2hhbmdlZCwgdXNlIHRoZSAiZ0oiIGNvbW1hbmQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEwLjYqCVJlYWRpbmcgYW5kIHdyaXRpbmcgcGFydCBvZiBhIGZpbGUKKworV2hlbiB5b3UgYXJlIHdyaXRpbmcgYW4gZS1tYWlsIG1lc3NhZ2UsIHlvdSBtYXkgd2FudCB0byBpbmNsdWRlIGFub3RoZXIgZmlsZS4KK1RoaXMgY2FuIGJlIGRvbmUgd2l0aCB0aGUgIjpyZWFkIHtmaWxlbmFtZX0iIGNvbW1hbmQuICBUaGUgdGV4dCBvZiB0aGUgZmlsZSBpcworcHV0IGJlbG93IHRoZSBjdXJzb3IgbGluZS4KKyAgIFN0YXJ0aW5nIHdpdGggdGhpcyB0ZXh0OgorCisJSGkgSm9obiwgfgorCUhlcmUgaXMgdGhlIGRpZmYgdGhhdCBmaXhlcyB0aGUgYnVnOiB+CisJQnllLCBQaWVycmUuIH4KKworTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBzZWNvbmQgbGluZSBhbmQgdHlwZTogPgorCisJOnJlYWQgcGF0Y2gKKworVGhlIGZpbGUgbmFtZWQgInBhdGNoIiB3aWxsIGJlIGluc2VydGVkLCB3aXRoIHRoaXMgcmVzdWx0OgorCisJSGkgSm9obiwgfgorCUhlcmUgaXMgdGhlIGRpZmYgdGhhdCBmaXhlcyB0aGUgYnVnOiB+CisJMmMyIH4KKwk8CWZvciAoaSA9IDA7IGkgPD0gbGVuZ3RoOyArK2kpIH4KKwktLS0gfgorCT4JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB+CisJQnllLCBQaWVycmUuIH4KKworVGhlICI6cmVhZCIgY29tbWFuZCBhY2NlcHRzIGEgcmFuZ2UuICBUaGUgZmlsZSB3aWxsIGJlIHB1dCBiZWxvdyB0aGUgbGFzdCBsaW5lCitudW1iZXIgb2YgdGhpcyByYW5nZS4gIFRodXMgIjokciBwYXRjaCIgYXBwZW5kcyB0aGUgZmlsZSAicGF0Y2giIGF0IHRoZSBlbmQgb2YKK3RoZSBmaWxlLgorICAgV2hhdCBpZiB5b3Ugd2FudCB0byByZWFkIHRoZSBmaWxlIGFib3ZlIHRoZSBmaXJzdCBsaW5lPyAgVGhpcyBjYW4gYmUgZG9uZQord2l0aCB0aGUgbGluZSBudW1iZXIgemVyby4gIFRoaXMgbGluZSBkb2Vzbid0IHJlYWxseSBleGlzdCwgeW91IHdpbGwgZ2V0IGFuCitlcnJvciBtZXNzYWdlIHdoZW4gdXNpbmcgaXQgd2l0aCBtb3N0IGNvbW1hbmRzLiAgQnV0IHRoaXMgY29tbWFuZCBpcyBhbGxvd2VkOgorPgorCTowcmVhZCBwYXRjaAorCitUaGUgZmlsZSAicGF0Y2giIHdpbGwgYmUgcHV0IGFib3ZlIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlLgorCisKK1dSSVRJTkcgQSBSQU5HRSBPRiBMSU5FUworCitUbyB3cml0ZSBhIHJhbmdlIG9mIGxpbmVzIHRvIGEgZmlsZSwgdGhlICI6d3JpdGUiIGNvbW1hbmQgY2FuIGJlIHVzZWQuCitXaXRob3V0IGEgcmFuZ2UgaXQgd3JpdGVzIHRoZSB3aG9sZSBmaWxlLiAgV2l0aCBhIHJhbmdlIG9ubHkgdGhlIHNwZWNpZmllZAorbGluZXMgYXJlIHdyaXR0ZW46ID4KKworCTouLCR3cml0ZSB0ZW1wbworCitUaGlzIHdyaXRlcyB0aGUgbGluZXMgZnJvbSB0aGUgY3Vyc29yIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZpbGUgaW50byB0aGUgZmlsZQorInRlbXBvIi4gIElmIHRoaXMgZmlsZSBhbHJlYWR5IGV4aXN0cyB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIFZpbQorcHJvdGVjdHMgeW91IGZyb20gYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGZpbGUuICBJZiB5b3Uga25vdyB3aGF0Cit5b3UgYXJlIGRvaW5nIGFuZCB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgZmlsZSwgYXBwZW5kICE6ID4KKworCTouLCR3cml0ZSEgdGVtcG8KKworQ0FSRUZVTDogVGhlICEgbXVzdCBmb2xsb3cgdGhlICI6d3JpdGUiIGNvbW1hbmQgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2hpdGUKK3NwYWNlLiAgT3RoZXJ3aXNlIGl0IGJlY29tZXMgYSBmaWx0ZXIgY29tbWFuZCwgd2hpY2ggaXMgZXhwbGFpbmVkIGxhdGVyIGluCit0aGlzIGNoYXB0ZXIuCisKKworQVBQRU5ESU5HIFRPIEEgRklMRQorCitJbiB0aGUgZmlyc3Qgc2VjdGlvbiBvZiB0aGlzIGNoYXB0ZXIgd2FzIGV4cGxhaW5lZCBob3cgdG8gY29sbGVjdCBhIG51bWJlciBvZgorbGluZXMgaW50byBhIHJlZ2lzdGVyLiAgVGhlIHNhbWUgY2FuIGJlIGRvbmUgdG8gY29sbGVjdCBsaW5lcyBpbiBhIGZpbGUuCitXcml0ZSB0aGUgZmlyc3QgbGluZSB3aXRoIHRoaXMgY29tbWFuZDogPgorCisJOi53cml0ZSBjb2xsZWN0aW9uCisKK05vdyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHNlY29uZCBsaW5lIHlvdSB3YW50IHRvIGNvbGxlY3QsIGFuZCB0eXBlIHRoaXM6ID4KKworCToud3JpdGUgPj5jb2xsZWN0aW9uCisKK1RoZSAiPj4iIHRlbGxzIFZpbSB0aGUgImNvbGxlY3Rpb24iIGZpbGUgaXMgbm90IHRvIGJlIHdyaXR0ZW4gYXMgYSBuZXcgZmlsZSwKK2J1dCB0aGUgbGluZSBtdXN0IGJlIGFwcGVuZGVkIGF0IHRoZSBlbmQuICAgWW91IGNhbiByZXBlYXQgdGhpcyBhcyBtYW55IHRpbWVzCithcyB5b3UgbGlrZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTAuNyoJRm9ybWF0dGluZyB0ZXh0CisKK1doZW4geW91IGFyZSB0eXBpbmcgcGxhaW4gdGV4dCwgaXQncyBuaWNlIGlmIHRoZSBsZW5ndGggb2YgZWFjaCBsaW5lIGlzCithdXRvbWF0aWNhbGx5IHRyaW1tZWQgdG8gZml0IGluIHRoZSB3aW5kb3cuICBUbyBtYWtlIHRoaXMgaGFwcGVuIHdoaWxlCitpbnNlcnRpbmcgdGV4dCwgc2V0IHRoZSAndGV4dHdpZHRoJyBvcHRpb246ID4KKworCTpzZXQgdGV4dHdpZHRoPTcyCisKK1lvdSBtaWdodCByZW1lbWJlciB0aGF0IGluIHRoZSBleGFtcGxlIHZpbXJjIGZpbGUgdGhpcyBjb21tYW5kIHdhcyB1c2VkIGZvcgorZXZlcnkgdGV4dCBmaWxlLiAgVGh1cyBpZiB5b3UgYXJlIHVzaW5nIHRoYXQgdmltcmMgZmlsZSwgeW91IHdlcmUgYWxyZWFkeQordXNpbmcgaXQuICBUbyBjaGVjayB0aGUgY3VycmVudCB2YWx1ZSBvZiAndGV4dHdpZHRoJzogPgorCisJOnNldCB0ZXh0d2lkdGgKKworTm93IGxpbmVzIHdpbGwgYmUgYnJva2VuIHRvIHRha2Ugb25seSB1cCB0byA3MiBjaGFyYWN0ZXJzLiAgQnV0IHdoZW4geW91CitpbnNlcnQgdGV4dCBoYWxmd2F5IGEgbGluZSwgb3Igd2hlbiB5b3UgZGVsZXRlIGEgZmV3IHdvcmRzLCB0aGUgbGluZXMgd2lsbCBnZXQKK3RvbyBsb25nIG9yIHRvbyBzaG9ydC4gIFZpbSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgcmVmb3JtYXQgdGhlIHRleHQuCisgICBUbyB0ZWxsIFZpbSB0byBmb3JtYXQgdGhlIGN1cnJlbnQgcGFyYWdyYXBoOiA+CisKKwlncWFwCisKK1RoaXMgc3RhcnRzIHdpdGggdGhlICJncSIgY29tbWFuZCwgd2hpY2ggaXMgYW4gb3BlcmF0b3IuICBGb2xsb3dpbmcgaXMgImFwIiwKK3RoZSB0ZXh0IG9iamVjdCB0aGF0IHN0YW5kcyBmb3IgImEgcGFyYWdyYXBoIi4gIEEgcGFyYWdyYXBoIGlzIHNlcGFyYXRlZCBmcm9tCit0aGUgbmV4dCBwYXJhZ3JhcGggYnkgYW4gZW1wdHkgbGluZS4KKworCU5vdGU6CisJQSBibGFuayBsaW5lLCB3aGljaCBjb250YWlucyB3aGl0ZSBzcGFjZSwgZG9lcyBOT1Qgc2VwYXJhdGUKKwlwYXJhZ3JhcGhzLiAgVGhpcyBpcyBoYXJkIHRvIG5vdGljZSEKKworSW5zdGVhZCBvZiAiYXAiIHlvdSBjb3VsZCB1c2UgYW55IG1vdGlvbiBvciB0ZXh0IG9iamVjdC4gIElmIHlvdXIgcGFyYWdyYXBocworYXJlIHByb3Blcmx5IHNlcGFyYXRlZCwgeW91IGNhbiB1c2UgdGhpcyBjb21tYW5kIHRvIGZvcm1hdCB0aGUgd2hvbGUgZmlsZTogPgorCisJZ2dncUcKKworImdnIiB0YWtlcyB5b3UgdG8gdGhlIGZpcnN0IGxpbmUsICJncSIgaXMgdGhlIGZvcm1hdCBvcGVyYXRvciBhbmQgIkciIHRoZQorbW90aW9uIHRoYXQganVtcHMgdG8gdGhlIGxhc3QgbGluZS4KKworSW4gY2FzZSB5b3VyIHBhcmFncmFwaHMgYXJlbid0IGNsZWFybHkgZGVmaW5lZCwgeW91IGNhbiBmb3JtYXQganVzdCB0aGUgbGluZXMKK3lvdSBtYW51YWxseSBzZWxlY3QuICBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGxpbmUgeW91IHdhbnQgdG8gZm9ybWF0LgorU3RhcnQgd2l0aCB0aGUgY29tbWFuZCAiZ3FqIi4gIFRoaXMgZm9ybWF0cyB0aGUgY3VycmVudCBsaW5lIGFuZCB0aGUgb25lIGJlbG93CitpdC4gIElmIHRoZSBmaXJzdCBsaW5lIHdhcyBzaG9ydCwgd29yZHMgZnJvbSB0aGUgbmV4dCBsaW5lIHdpbGwgYmUgYXBwZW5kZWQuCitJZiBpdCB3YXMgdG9vIGxvbmcsIHdvcmRzIHdpbGwgYmUgbW92ZWQgdG8gdGhlIG5leHQgbGluZS4gIFRoZSBjdXJzb3IgbW92ZXMgdG8KK3RoZSBzZWNvbmQgbGluZS4gIE5vdyB5b3UgY2FuIHVzZSAiLiIgdG8gcmVwZWF0IHRoZSBjb21tYW5kLiAgS2VlcCBkb2luZyB0aGlzCit1bnRpbCB5b3UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHRleHQgeW91IHdhbnQgdG8gZm9ybWF0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMC44KglDaGFuZ2luZyBjYXNlCisKK1lvdSBoYXZlIHRleHQgd2l0aCBzZWN0aW9uIGhlYWRlcnMgaW4gbG93ZXJjYXNlLiAgWW91IHdhbnQgdG8gbWFrZSB0aGUgd29yZAorInNlY3Rpb24iIGFsbCB1cHBlcmNhc2UuICBEbyB0aGlzIHdpdGggdGhlICJnVSIgb3BlcmF0b3IuICBTdGFydCB3aXRoIHRoZQorY3Vyc29yIGluIHRoZSBmaXJzdCBjb2x1bW46ID4KKworCQkJICAgICBnVXcKKzwJc2VjdGlvbiBoZWFkZXIJICAgIC0tLS0+ICAgICAgU0VDVElPTiBoZWFkZXIKKworVGhlICJndSIgb3BlcmF0b3IgZG9lcyBleGFjdGx5IHRoZSBvcHBvc2l0ZTogPgorCisJCQkgICAgIGd1dworPAlTRUNUSU9OIGhlYWRlcgkgICAgLS0tLT4gICAgICBzZWN0aW9uIGhlYWRlcgorCitZb3UgY2FuIGFsc28gdXNlICJnfiIgdG8gc3dhcCBjYXNlLiAgQWxsIHRoZXNlIGFyZSBvcGVyYXRvcnMsIHRodXMgdGhleSB3b3JrCit3aXRoIGFueSBtb3Rpb24gY29tbWFuZCwgd2l0aCB0ZXh0IG9iamVjdHMgYW5kIGluIFZpc3VhbCBtb2RlLgorICAgVG8gbWFrZSBhbiBvcGVyYXRvciB3b3JrIG9uIGxpbmVzIHlvdSBkb3VibGUgaXQuICBUaGUgZGVsZXRlIG9wZXJhdG9yIGlzCisiZCIsIHRodXMgdG8gZGVsZXRlIGEgbGluZSB5b3UgdXNlICJkZCIuICBTaW1pbGFybHksICJndWd1IiBtYWtlcyBhIHdob2xlIGxpbmUKK2xvd2VyY2FzZS4gIFRoaXMgY2FuIGJlIHNob3J0ZW5lZCB0byAiZ3V1Ii4gICJnVWdVIiBpcyBzaG9ydGVuZWQgdG8gImdVVSIgYW5kCisiZ35nfiIgdG8gImd+fiIuICBFeGFtcGxlOiA+CisKKwkJCQlnfn4gCis8CVNvbWUgR0lSTFMgaGF2ZSBGdW4gICAgLS0tLT4gICBzT01FIGdpcmxzIEhBVkUgZlVOIH4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTAuOSoJVXNpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbQorCitWaW0gaGFzIGEgdmVyeSBwb3dlcmZ1bCBzZXQgb2YgY29tbWFuZHMsIGl0IGNhbiBkbyBhbnl0aGluZy4gIEJ1dCB0aGVyZSBtYXkKK3N0aWxsIGJlIHNvbWV0aGluZyB0aGF0IGFuIGV4dGVybmFsIGNvbW1hbmQgY2FuIGRvIGJldHRlciBvciBmYXN0ZXIuCisgICBUaGUgY29tbWFuZCAiIXttb3Rpb259e3Byb2dyYW19IiB0YWtlcyBhIGJsb2NrIG9mIHRleHQgYW5kIGZpbHRlcnMgaXQKK3Rocm91Z2ggYW4gZXh0ZXJuYWwgcHJvZ3JhbS4gIEluIG90aGVyIHdvcmRzLCBpdCBydW5zIHRoZSBzeXN0ZW0gY29tbWFuZAorcmVwcmVzZW50ZWQgYnkge3Byb2dyYW19LCBnaXZpbmcgaXQgdGhlIGJsb2NrIG9mIHRleHQgcmVwcmVzZW50ZWQgYnkge21vdGlvbn0KK2FzIGlucHV0LiAgVGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQgdGhlbiByZXBsYWNlcyB0aGUgc2VsZWN0ZWQgYmxvY2suCisgICBCZWNhdXNlIHRoaXMgc3VtbWFyaXplcyBiYWRseSBpZiB5b3UgYXJlIHVuZmFtaWxpYXIgd2l0aCBVTklYIGZpbHRlcnMsIHRha2UKK2EgbG9vayBhdCBhbiBleGFtcGxlLiAgVGhlIHNvcnQgY29tbWFuZCBzb3J0cyBhIGZpbGUuICBJZiB5b3UgZXhlY3V0ZSB0aGUKK2ZvbGxvd2luZyBjb21tYW5kLCB0aGUgdW5zb3J0ZWQgZmlsZSBpbnB1dC50eHQgd2lsbCBiZSBzb3J0ZWQgYW5kIHdyaXR0ZW4gdG8KK291dHB1dC50eHQuIChUaGlzIHdvcmtzIG9uIGJvdGggVU5JWCBhbmQgTWljcm9zb2Z0IFdpbmRvd3MuKSA+CisKKwlzb3J0IDxpbnB1dC50eHQgPm91dHB1dC50eHQKKworTm93IGRvIHRoZSBzYW1lIHRoaW5nIGluIFZpbS4gIFlvdSB3YW50IHRvIHNvcnQgbGluZXMgMSB0aHJvdWdoIDUgb2YgYSBmaWxlLgorWW91IHN0YXJ0IGJ5IHB1dHRpbmcgdGhlIGN1cnNvciBvbiBsaW5lIDEuICBOZXh0IHlvdSBleGVjdXRlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6ID4KKworCSE1RworCitUaGUgIiEiIHRlbGxzIFZpbSB0aGF0IHlvdSBhcmUgcGVyZm9ybWluZyBhIGZpbHRlciBvcGVyYXRpb24uICBUaGUgVmltIGVkaXRvcgorZXhwZWN0cyBhIG1vdGlvbiBjb21tYW5kIHRvIGZvbGxvdywgaW5kaWNhdGluZyB3aGljaCBwYXJ0IG9mIHRoZSBmaWxlIHRvCitmaWx0ZXIuICBUaGUgIjVHIiBjb21tYW5kIHRlbGxzIFZpbSB0byBnbyB0byBsaW5lIDUsIHNvIGl0IG5vdyBrbm93cyB0aGF0IGl0CitpcyB0byBmaWx0ZXIgbGluZXMgMSAodGhlIGN1cnJlbnQgbGluZSkgdGhyb3VnaCA1LgorICAgSW4gYW50aWNpcGF0aW9uIG9mIHRoZSBmaWx0ZXJpbmcsIHRoZSBjdXJzb3IgZHJvcHMgdG8gdGhlIGJvdHRvbSBvZiB0aGUKK3NjcmVlbiBhbmQgYSAhIHByb21wdCBkaXNwbGF5cy4gIFlvdSBjYW4gbm93IHR5cGUgaW4gdGhlIG5hbWUgb2YgdGhlIGZpbHRlcgorcHJvZ3JhbSwgaW4gdGhpcyBjYXNlICJzb3J0Ii4gIFRoZXJlZm9yZSwgeW91ciBmdWxsIGNvbW1hbmQgaXMgYXMgZm9sbG93czogPgorCisJITVHc29ydDxFbnRlcj4KKworVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBzb3J0IHByb2dyYW0gaXMgcnVuIG9uIHRoZSBmaXJzdCA1IGxpbmVzLiAgVGhlIG91dHB1dAorb2YgdGhlIHByb2dyYW0gcmVwbGFjZXMgdGhlc2UgbGluZXMuCisKKwlsaW5lIDU1CQkJICAgICAgbGluZSAxMQorCWxpbmUgMzMJCQkgICAgICBsaW5lIDIyCisJbGluZSAxMQkJLS0+CSAgICAgIGxpbmUgMzMKKwlsaW5lIDIyCQkJICAgICAgbGluZSA0NAorCWxpbmUgNDQJCQkgICAgICBsaW5lIDU1CisJbGFzdCBsaW5lCQkgICAgICBsYXN0IGxpbmUKKworVGhlICIhISIgY29tbWFuZCBmaWx0ZXJzIHRoZSBjdXJyZW50IGxpbmUgdGhyb3VnaCBhIGZpbHRlci4gIEluIFVuaXggdGhlICJkYXRlIgorY29tbWFuZCBwcmludHMgdGhlIGN1cnJlbnQgdGltZSBhbmQgZGF0ZS4gICIhIWRhdGU8RW50ZXI+IiByZXBsYWNlcyB0aGUgY3VycmVudAorbGluZSB3aXRoIHRoZSBvdXRwdXQgb2YgImRhdGUiLiAgVGhpcyBpcyB1c2VmdWwgdG8gYWRkIGEgdGltZXN0YW1wIHRvIGEgZmlsZS4KKworCitXSEVOIElUIERPRVNOJ1QgV09SSworCitTdGFydGluZyBhIHNoZWxsLCBzZW5kaW5nIGl0IHRleHQgYW5kIGNhcHR1cmluZyB0aGUgb3V0cHV0IHJlcXVpcmVzIHRoYXQgVmltCitrbm93cyBob3cgdGhlIHNoZWxsIHdvcmtzIGV4YWN0bHkuICBXaGVuIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggZmlsdGVyaW5nLAorY2hlY2sgdGhlIHZhbHVlcyBvZiB0aGVzZSBvcHRpb25zOgorCisJJ3NoZWxsJwkJc3BlY2lmaWVzIHRoZSBwcm9ncmFtIHRoYXQgVmltIHVzZXMgdG8gZXhlY3V0ZQorCQkJZXh0ZXJuYWwgcHJvZ3JhbXMuCisJJ3NoZWxsY21kZmxhZycJYXJndW1lbnQgdG8gcGFzcyBhIGNvbW1hbmQgdG8gdGhlIHNoZWxsCisJJ3NoZWxscXVvdGUnCXF1b3RlIHRvIGJlIHVzZWQgYXJvdW5kIHRoZSBjb21tYW5kCisJJ3NoZWxseHF1b3RlJwlxdW90ZSB0byBiZSB1c2VkIGFyb3VuZCB0aGUgY29tbWFuZCBhbmQgcmVkaXJlY3Rpb24KKwknc2hlbGx0eXBlJwlraW5kIG9mIHNoZWxsIChvbmx5IGZvciB0aGUgQW1pZ2EpCisJJ3NoZWxsc2xhc2gnCXVzZSBmb3J3YXJkIHNsYXNoZXMgaW4gdGhlIGNvbW1hbmQgKG9ubHkgZm9yCisJCQlNUy1XaW5kb3dzIGFuZCBhbGlrZXMpCisJJ3NoZWxscmVkaXInCXN0cmluZyB1c2VkIHRvIHdyaXRlIHRoZSBjb21tYW5kIG91dHB1dCBpbnRvIGEgZmlsZQorCitPbiBVbml4IHRoaXMgaXMgaGFyZGx5IGV2ZXIgYSBwcm9ibGVtLCBiZWNhdXNlIHRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc2hlbGxzOgorInNoIiBsaWtlIGFuZCAiY3NoIiBsaWtlLiAgVmltIGNoZWNrcyB0aGUgJ3NoZWxsJyBvcHRpb24gYW5kIHNldHMgcmVsYXRlZAorb3B0aW9ucyBhdXRvbWF0aWNhbGx5LCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBzZWVzICJjc2giIHNvbWV3aGVyZSBpbgorJ3NoZWxsJy4KKyAgIE9uIE1TLVdpbmRvd3MsIGhvd2V2ZXIsIHRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBzaGVsbHMgYW5kIHlvdSBtaWdodCBoYXZlCit0byB0dW5lIHRoZSBvcHRpb25zIHRvIG1ha2UgZmlsdGVyaW5nIHdvcmsuICBDaGVjayB0aGUgaGVscCBmb3IgdGhlIG9wdGlvbnMKK2ZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1JFQURJTkcgQ09NTUFORCBPVVRQVVQKKworVG8gcmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGludG8gdGhlIGZpbGUsIHVzZSB0aGlzOgorCitvbiBVbml4OiA+CisJOnJlYWQgIWxzCitvbiBNUy1XaW5kb3dzOiA+CisJOnJlYWQgIWRpcgorCitUaGUgb3V0cHV0IG9mIHRoZSAibHMiIG9yICJkaXIiIGNvbW1hbmQgaXMgY2FwdHVyZWQgYW5kIGluc2VydGVkIGluIHRoZSB0ZXh0LAorYmVsb3cgdGhlIGN1cnNvci4gIFRoaXMgaXMgc2ltaWxhciB0byByZWFkaW5nIGEgZmlsZSwgZXhjZXB0IHRoYXQgdGhlICIhIiBpcwordXNlZCB0byB0ZWxsIFZpbSB0aGF0IGEgY29tbWFuZCBmb2xsb3dzLgorICAgVGhlIGNvbW1hbmQgbWF5IGhhdmUgYXJndW1lbnRzLiAgQW5kIGEgcmFuZ2UgY2FuIGJlIHVzZWQgdG8gdGVsbCB3aGVyZSBWaW0KK3Nob3VsZCBwdXQgdGhlIGxpbmVzOiA+CisKKwk6MHJlYWQgIWRhdGUgLXUKKworVGhpcyBpbnNlcnRzIHRoZSBjdXJyZW50IHRpbWUgYW5kIGRhdGUgaW4gVVRDIGZvcm1hdCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLgorKFdlbGwsIGlmIHlvdSBoYXZlIGEgZGF0ZSBjb21tYW5kIHRoYXQgYWNjZXB0cyB0aGUgIi11IiBhcmd1bWVudC4pICBOb3RlIHRoZQorZGlmZmVyZW5jZSB3aXRoIHVzaW5nICIhIWRhdGUiOiB0aGF0IHJlcGxhY2VkIGEgbGluZSwgd2hpbGUgIjpyZWFkICFkYXRlIiB3aWxsCitpbnNlcnQgYSBsaW5lLgorCisKK1dSSVRJTkcgVEVYVCBUTyBBIENPTU1BTkQKKworVGhlIFVuaXggY29tbWFuZCAid2MiIGNvdW50cyB3b3Jkcy4gIFRvIGNvdW50IHRoZSB3b3JkcyBpbiB0aGUgY3VycmVudCBmaWxlOiA+CisKKwk6d3JpdGUgIXdjCisKK1RoaXMgaXMgdGhlIHNhbWUgd3JpdGUgY29tbWFuZCBhcyBiZWZvcmUsIGJ1dCBpbnN0ZWFkIG9mIGEgZmlsZSBuYW1lIHRoZSAiISIKK2NoYXJhY3RlciBpcyB1c2VkIGFuZCB0aGUgbmFtZSBvZiBhbiBleHRlcm5hbCBjb21tYW5kLiAgVGhlIHdyaXR0ZW4gdGV4dCB3aWxsCitiZSBwYXNzZWQgdG8gdGhlIHNwZWNpZmllZCBjb21tYW5kIGFzIGl0cyBzdGFuZGFyZCBpbnB1dC4gIFRoZSBvdXRwdXQgY291bGQKK2xvb2sgbGlrZSB0aGlzOgorCisgICAgICAgNCAgICAgIDQ3ICAgICAyNDkgfgorCitUaGUgIndjIiBjb21tYW5kIGlzbid0IHZlcmJvc2UuICBUaGlzIG1lYW5zIHlvdSBoYXZlIDQgbGluZXMsIDQ3IHdvcmRzIGFuZCAyNDkKK2NoYXJhY3RlcnMuCisKK1dhdGNoIG91dCBmb3IgdGhpcyBtaXN0YWtlOiA+CisKKwk6d3JpdGUhIHdjCisKK1RoaXMgd2lsbCB3cml0ZSB0aGUgZmlsZSAid2MiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2l0aCBmb3JjZS4gIFdoaXRlCitzcGFjZSBpcyBpbXBvcnRhbnQgaGVyZSEKKworCitSRURSQVdJTkcgVEhFIFNDUkVFTgorCitJZiB0aGUgZXh0ZXJuYWwgY29tbWFuZCBwcm9kdWNlZCBhbiBlcnJvciBtZXNzYWdlLCB0aGUgZGlzcGxheSBtYXkgaGF2ZSBiZWVuCittZXNzZWQgdXAuICBWaW0gaXMgdmVyeSBlZmZpY2llbnQgYW5kIG9ubHkgcmVkcmF3cyB0aG9zZSBwYXJ0cyBvZiB0aGUgc2NyZWVuCit0aGF0IGl0IGtub3dzIG5lZWQgcmVkcmF3aW5nLiAgQnV0IGl0IGNhbid0IGtub3cgYWJvdXQgd2hhdCBhbm90aGVyIHByb2dyYW0KK2hhcyB3cml0dGVuLiAgVG8gdGVsbCBWaW0gdG8gcmVkcmF3IHRoZSBzY3JlZW46ID4KKworCUNUUkwtTAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzExLnR4dHwgIFJlY292ZXJpbmcgZnJvbSBhIGNyYXNoCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzExLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmZjM4NAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8xMS50eHQKQEAgLTAsMCArMSwyODcgQEAKKyp1c3JfMTEudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjMKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgIFJlY292ZXJpbmcgZnJvbSBhIGNyYXNoCisKKworRGlkIHlvdXIgY29tcHV0ZXIgY3Jhc2g/ICBBbmQgeW91IGp1c3Qgc3BlbnQgaG91cnMgZWRpdGluZz8gIERvbid0IHBhbmljISAgVmltCitrZWVwcyBlbm91Z2ggaW5mb3JtYXRpb24gb24gaGFyZGRpc2sgdG8gYmUgYWJsZSB0byByZXN0b3JlIG1vc3Qgb2YgeW91ciB3b3JrLgorVGhpcyBjaGFwdGVyIHNob3dzIHlvdSBob3cgdG8gZ2V0IHlvdXIgd29yayBiYWNrIGFuZCBleHBsYWlucyBob3cgdGhlIHN3YXAKK2ZpbGUgaXMgdXNlZC4KKworfDExLjF8CUJhc2ljIHJlY292ZXJ5Cit8MTEuMnwJV2hlcmUgaXMgdGhlIHN3YXAgZmlsZT8KK3wxMS4zfAlDcmFzaGVkIG9yIG5vdD8KK3wxMS40fAlGdXJ0aGVyIHJlYWRpbmcKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMTIudHh0fCAgQ2xldmVyIHRyaWNrcworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMTAudHh0fCAgTWFraW5nIGJpZyBjaGFuZ2VzCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMS4xKglCYXNpYyByZWNvdmVyeQorCitJbiBtb3N0IGNhc2VzIHJlY292ZXJpbmcgYSBmaWxlIGlzIHF1aXRlIHNpbXBsZSwgYXNzdW1pbmcgeW91IGtub3cgd2hpY2ggZmlsZQoreW91IHdlcmUgZWRpdGluZyAoYW5kIHRoZSBoYXJkZGlzayBpcyBzdGlsbCB3b3JraW5nKS4gIFN0YXJ0IFZpbSBvbiB0aGUgZmlsZSwKK3dpdGggdGhlICItciIgYXJndW1lbnQgYWRkZWQ6ID4KKworCXZpbSAtciBoZWxwLnR4dAorCitWaW0gd2lsbCByZWFkIHRoZSBzd2FwIGZpbGUgKHVzZWQgdG8gc3RvcmUgdGV4dCB5b3Ugd2VyZSBlZGl0aW5nKSBhbmQgbWF5IHJlYWQKK2JpdHMgYW5kIHBpZWNlcyBvZiB0aGUgb3JpZ2luYWwgZmlsZS4gIElmIGFsbCBpcyB3ZWxsLCB5b3Ugd2lsbCBzZWUgdGhlc2UKK21lc3NhZ2VzICh3aXRoIGRpZmZlcmVudCBmaWxlIG5hbWVzLCBvZiBjb3Vyc2UpOgorCisJVXNpbmcgc3dhcCBmaWxlICIuaGVscC50eHQuc3dwIiB+CisJT3JpZ2luYWwgZmlsZSAifi92aW0vcnVudGltZS9kb2MvaGVscC50eHQiIH4KKwlSZWNvdmVyeSBjb21wbGV0ZWQuIFlvdSBzaG91bGQgY2hlY2sgaWYgZXZlcnl0aGluZyBpcyBPSy4gfgorCShZb3UgbWlnaHQgd2FudCB0byB3cml0ZSBvdXQgdGhpcyBmaWxlIHVuZGVyIGFub3RoZXIgbmFtZSB+CisJYW5kIHJ1biBkaWZmIHdpdGggdGhlIG9yaWdpbmFsIGZpbGUgdG8gY2hlY2sgZm9yIGNoYW5nZXMpIH4KKwlEZWxldGUgdGhlIC5zd3AgZmlsZSBhZnRlcndhcmRzLiB+CisKK1RvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIHdyaXRlIHRoaXMgZmlsZSB1bmRlciBhbm90aGVyIG5hbWU6ID4KKworCTp3cml0ZSBoZWxwLnR4dC5yZWNvdmVyZWQKKworQ29tcGFyZSB0aGUgZmlsZSB3aXRoIHRoZSBvcmlnaW5hbCBmaWxlIHRvIGNoZWNrIGlmIHlvdSBlbmRlZCB1cCB3aXRoIHdoYXQgeW91CitleHBlY3RlZC4gIFZpbWRpZmYgaXMgdmVyeSB1c2VmdWwgZm9yIHRoaXMgfDA4Ljd8LiAgV2F0Y2ggb3V0IGZvciB0aGUgb3JpZ2luYWwKK2ZpbGUgdG8gY29udGFpbiBhIG1vcmUgcmVjZW50IHZlcnNpb24gKHlvdSBzYXZlZCB0aGUgZmlsZSBqdXN0IGJlZm9yZSB0aGUKK2NvbXB1dGVyIGNyYXNoZWQpLiAgQW5kIGNoZWNrIHRoYXQgbm8gbGluZXMgYXJlIG1pc3NpbmcgKHNvbWV0aGluZyB3ZW50IHdyb25nCit0aGF0IFZpbSBjb3VsZCBub3QgcmVjb3ZlcikuCisgICBJZiBWaW0gcHJvZHVjZXMgd2FybmluZyBtZXNzYWdlcyB3aGVuIHJlY292ZXJpbmcsIHJlYWQgdGhlbSBjYXJlZnVsbHkuCitUaGlzIGlzIHJhcmUgdGhvdWdoLgorCitJdCdzIG5vcm1hbCB0aGF0IHRoZSBsYXN0IGZldyBjaGFuZ2VzIGNhbiBub3QgYmUgcmVjb3ZlcmVkLiAgVmltIGZsdXNoZXMgdGhlCitjaGFuZ2VzIHRvIGRpc2sgd2hlbiB5b3UgZG9uJ3QgdHlwZSBmb3IgYWJvdXQgZm91ciBzZWNvbmRzLCBvciBhZnRlciB0eXBpbmcKK2Fib3V0IHR3byBodW5kcmVkIGNoYXJhY3RlcnMuICBUaGlzIGlzIHNldCB3aXRoIHRoZSAndXBkYXRldGltZScgYW5kCisndXBkYXRlY291bnQnIG9wdGlvbnMuICBUaHVzIHdoZW4gVmltIGRpZG4ndCBnZXQgYSBjaGFuY2UgdG8gc2F2ZSBpdHNlbGYgd2hlbgordGhlIHN5c3RlbSB3ZW50IGRvd24sIHRoZSBjaGFuZ2VzIGFmdGVyIHRoZSBsYXN0IGZsdXNoIHdpbGwgYmUgbG9zdC4KKworSWYgeW91IHdlcmUgZWRpdGluZyB3aXRob3V0IGEgZmlsZSBuYW1lLCBnaXZlIGFuIGVtcHR5IHN0cmluZyBhcyBhcmd1bWVudDogPgorCisJdmltIC1yICIiCisKK1lvdSBtdXN0IGJlIGluIHRoZSByaWdodCBkaXJlY3RvcnksIG90aGVyd2lzZSBWaW0gY2FuJ3QgZmluZCB0aGUgc3dhcCBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMS4yKglXaGVyZSBpcyB0aGUgc3dhcCBmaWxlPworCitWaW0gY2FuIHN0b3JlIHRoZSBzd2FwIGZpbGUgaW4gc2V2ZXJhbCBwbGFjZXMuICBOb3JtYWxseSBpdCBpcyBpbiB0aGUgc2FtZQorZGlyZWN0b3J5IGFzIHRoZSBvcmlnaW5hbCBmaWxlLiAgVG8gZmluZCBpdCwgY2hhbmdlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlCitmaWxlLCBhbmQgdXNlOiA+CisKKwl2aW0gLXIKKworVmltIHdpbGwgbGlzdCB0aGUgc3dhcCBmaWxlcyB0aGF0IGl0IGNhbiBmaW5kLiAgSXQgd2lsbCBhbHNvIGxvb2sgaW4gb3RoZXIKK2RpcmVjdG9yaWVzIHdoZXJlIHRoZSBzd2FwIGZpbGUgZm9yIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBtYXkgYmUKK2xvY2F0ZWQuICBJdCB3aWxsIG5vdCBmaW5kIHN3YXAgZmlsZXMgaW4gYW55IG90aGVyIGRpcmVjdG9yaWVzIHRob3VnaCwgaXQKK2RvZXNuJ3Qgc2VhcmNoIHRoZSBkaXJlY3RvcnkgdHJlZS4KKyAgIFRoZSBvdXRwdXQgY291bGQgbG9vayBsaWtlIHRoaXM6CisKKwlTd2FwIGZpbGVzIGZvdW5kOiB+CisJICAgSW4gY3VycmVudCBkaXJlY3Rvcnk6IH4KKwkxLiAgICAubWFpbi5jLnN3cCB+CisJCSAgb3duZWQgYnk6IG1vb2wgICBkYXRlZDogVHVlIE1heSAyOSAyMTowMDoyNSAyMDAxIH4KKwkJIGZpbGUgbmFtZTogfm1vb2wvdmltL3ZpbTYvc3JjL21haW4uYyB+CisJCSAgbW9kaWZpZWQ6IFlFUyB+CisJCSB1c2VyIG5hbWU6IG1vb2wgICBob3N0IG5hbWU6IG1hc2FrYS5tb29sZW5hYXIubmV0IH4KKwkJcHJvY2VzcyBJRDogMTI1MjUgfgorCSAgIEluIGRpcmVjdG9yeSB+L3RtcDogfgorCSAgICAgIC0tIG5vbmUgLS0gfgorCSAgIEluIGRpcmVjdG9yeSAvdmFyL3RtcDogfgorCSAgICAgIC0tIG5vbmUgLS0gfgorCSAgIEluIGRpcmVjdG9yeSAvdG1wOiB+CisJICAgICAgLS0gbm9uZSAtLSB+CisKK0lmIHRoZXJlIGFyZSBzZXZlcmFsIHN3YXAgZmlsZXMgdGhhdCBsb29rIGxpa2UgdGhleSBtYXkgYmUgdGhlIG9uZSB5b3Ugd2FudCB0bwordXNlLCBhIGxpc3QgaXMgZ2l2ZW4gb2YgdGhlc2Ugc3dhcCBmaWxlcyBhbmQgeW91IGFyZSByZXF1ZXN0ZWQgdG8gZW50ZXIgdGhlCitudW1iZXIgb2YgdGhlIG9uZSB5b3Ugd2FudCB0byB1c2UuICBDYXJlZnVsbHkgbG9vayBhdCB0aGUgZGF0ZXMgdG8gZGVjaWRlCit3aGljaCBvbmUgeW91IHdhbnQgdG8gdXNlLgorICAgSW4gY2FzZSB5b3UgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gdXNlLCBqdXN0IHRyeSB0aGVtIG9uZSBieSBvbmUgYW5kIGNoZWNrCit0aGUgcmVzdWx0aW5nIGZpbGVzIGlmIHRoZXkgYXJlIHdoYXQgeW91IGV4cGVjdGVkLgorCisKK1VTSU5HIEEgU1BFQ0lGSUMgU1dBUCBGSUxFCisKK0lmIHlvdSBrbm93IHdoaWNoIHN3YXAgZmlsZSBuZWVkcyB0byBiZSB1c2VkLCB5b3UgY2FuIHJlY292ZXIgYnkgZ2l2aW5nIHRoZQorc3dhcCBmaWxlIG5hbWUuICBWaW0gd2lsbCB0aGVuIGZpbmRzIG91dCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSBmcm9tCit0aGUgc3dhcCBmaWxlLgorCitFeGFtcGxlOiA+CisJdmltIC1yIC5oZWxwLnR4dC5zd28KKworVGhpcyBpcyBhbHNvIGhhbmR5IHdoZW4gdGhlIHN3YXAgZmlsZSBpcyBpbiBhbm90aGVyIGRpcmVjdG9yeSB0aGFuIGV4cGVjdGVkLgorSWYgdGhpcyBzdGlsbCBkb2VzIG5vdCB3b3JrLCBzZWUgd2hhdCBmaWxlIG5hbWVzIFZpbSByZXBvcnRzIGFuZCByZW5hbWUgdGhlCitmaWxlcyBhY2NvcmRpbmdseS4gIENoZWNrIHRoZSAnZGlyZWN0b3J5JyBvcHRpb24gdG8gc2VlIHdoZXJlIFZpbSBtYXkgaGF2ZQorcHV0IHRoZSBzd2FwIGZpbGUuCisKKwlOb3RlOgorCVZpbSB0cmllcyB0byBmaW5kIHRoZSBzd2FwIGZpbGUgYnkgc2VhcmNoaW5nIHRoZSBkaXJlY3RvcmllcyBpbiB0aGUKKwknZGlyJyBvcHRpb24sIGxvb2tpbmcgZm9yIGZpbGVzIHRoYXQgbWF0Y2ggImZpbGVuYW1lLnN3PyIuICBJZgorCXdpbGRjYXJkIGV4cGFuc2lvbiBkb2Vzbid0IHdvcmsgKGUuZy4sIHdoZW4gdGhlICdzaGVsbCcgb3B0aW9uIGlzCisJaW52YWxpZCksIFZpbSBkb2VzIGEgZGVzcGVyYXRlIHRyeSB0byBmaW5kIHRoZSBmaWxlICJmaWxlbmFtZS5zd3AiLgorCUlmIHRoYXQgZmFpbHMgdG9vLCB5b3Ugd2lsbCBoYXZlIHRvIGdpdmUgdGhlIG5hbWUgb2YgdGhlIHN3YXBmaWxlCisJaXRzZWxmIHRvIGJlIGFibGUgdG8gcmVjb3ZlciB0aGUgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTEuMyoJQ3Jhc2hlZCBvciBub3Q/CQkJCQkqQVRURU5USU9OKiAqRTMyNSoKKworVmltIHRyaWVzIHRvIHByb3RlY3QgeW91IGZyb20gZG9pbmcgc3R1cGlkIHRoaW5ncy4gIFN1cHBvc2UgeW91IGlubm9jZW50bHkKK3N0YXJ0IGVkaXRpbmcgYSBmaWxlLCBleHBlY3RpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHRvIHNob3cgdXAuICBJbnN0ZWFkLAorVmltIHByb2R1Y2VzIGEgdmVyeSBsb25nIG1lc3NhZ2U6CisKKwkJRTMyNTogQVRURU5USU9OIH4KKwlGb3VuZCBhIHN3YXAgZmlsZSBieSB0aGUgbmFtZSAiLm1haW4uYy5zd3AiIH4KKwkJICBvd25lZCBieTogbW9vbCAgIGRhdGVkOiBUdWUgTWF5IDI5IDIxOjA5OjI4IDIwMDEgfgorCQkgZmlsZSBuYW1lOiB+bW9vbC92aW0vdmltNi9zcmMvbWFpbi5jIH4KKwkJICBtb2RpZmllZDogbm8gfgorCQkgdXNlciBuYW1lOiBtb29sICAgaG9zdCBuYW1lOiBtYXNha2EubW9vbGVuYWFyLm5ldCB+CisJCXByb2Nlc3MgSUQ6IDEyNTU5IChzdGlsbCBydW5uaW5nKSB+CisJV2hpbGUgb3BlbmluZyBmaWxlICJtYWluLmMiIH4KKwkJICAgICBkYXRlZDogVHVlIE1heSAyOSAxOTo0NjoxMiAyMDAxIH4KKyB+CisJKDEpIEFub3RoZXIgcHJvZ3JhbSBtYXkgYmUgZWRpdGluZyB0aGUgc2FtZSBmaWxlLiB+CisJICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGJlIGNhcmVmdWwgbm90IHRvIGVuZCB1cCB3aXRoIHR3byB+CisJICAgIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZmlsZSB3aGVuIG1ha2luZyBjaGFuZ2VzLiB+CisJICAgIFF1aXQsIG9yIGNvbnRpbnVlIHdpdGggY2F1dGlvbi4gfgorIH4KKwkoMikgQW4gZWRpdCBzZXNzaW9uIGZvciB0aGlzIGZpbGUgY3Jhc2hlZC4gfgorCSAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgIjpyZWNvdmVyIiBvciAidmltIC1yIG1haW4uYyIgfgorCSAgICB0byByZWNvdmVyIHRoZSBjaGFuZ2VzIChzZWUgIjpoZWxwIHJlY292ZXJ5IikuIH4KKwkgICAgSWYgeW91IGRpZCB0aGlzIGFscmVhZHksIGRlbGV0ZSB0aGUgc3dhcCBmaWxlICIubWFpbi5jLnN3cCIgfgorCSAgICB0byBhdm9pZCB0aGlzIG1lc3NhZ2UuIH4KKworWW91IGdldCB0aGlzIG1lc3NhZ2UsIGJlY2F1c2UsIHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIGZpbGUsIFZpbSBjaGVja3MgaWYgYQorc3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzIGZvciB0aGF0IGZpbGUuICBJZiB0aGVyZSBpcyBvbmUsIHRoZXJlIG11c3QgYmUKK3NvbWV0aGluZyB3cm9uZy4gIEl0IG1heSBiZSBvbmUgb2YgdGhlc2UgdHdvIHNpdHVhdGlvbnMuCisKKzEuIEFub3RoZXIgZWRpdCBzZXNzaW9uIGlzIGFjdGl2ZSBvbiB0aGlzIGZpbGUuICBMb29rIGluIHRoZSBtZXNzYWdlIGZvciB0aGUKKyAgIGxpbmUgd2l0aCAicHJvY2VzcyBJRCIuICBJdCBtaWdodCBsb29rIGxpa2UgdGhpczoKKworCQlwcm9jZXNzIElEOiAxMjU1OSAoc3RpbGwgcnVubmluZykgfgorCisgICBUaGUgdGV4dCAiKHN0aWxsIHJ1bm5pbmcpIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2VzcyBlZGl0aW5nIHRoaXMgZmlsZQorICAgcnVucyBvbiB0aGUgc2FtZSBjb21wdXRlci4gIFdoZW4gd29ya2luZyBvbiBhIG5vbi1Vbml4IHN5c3RlbSB5b3Ugd2lsbCBub3QKKyAgIGdldCB0aGlzIGV4dHJhIGhpbnQuICBXaGVuIGVkaXRpbmcgYSBmaWxlIG92ZXIgYSBuZXR3b3JrLCB5b3UgbWF5IG5vdCBzZWUKKyAgIHRoZSBoaW50LCBiZWNhdXNlIHRoZSBwcm9jZXNzIG1pZ2h0IGJlIHJ1bm5pbmcgb24gYW5vdGhlciBjb21wdXRlci4gIEluCisgICB0aG9zZSB0d28gY2FzZXMgeW91IG11c3QgZmluZCBvdXQgd2hhdCB0aGUgc2l0dWF0aW9uIGlzIHlvdXJzZWxmLgorICAgICAgSWYgdGhlcmUgaXMgYW5vdGhlciBWaW0gZWRpdGluZyB0aGUgc2FtZSBmaWxlLCBjb250aW51aW5nIHRvIGVkaXQgd2lsbAorICAgcmVzdWx0IGluIHR3byB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmaWxlLiAgVGhlIG9uZSB0aGF0IGlzIHdyaXR0ZW4gbGFzdCB3aWxsCisgICBvdmVyd3JpdGUgdGhlIG90aGVyIG9uZSwgcmVzdWx0aW5nIGluIGxvc3Mgb2YgY2hhbmdlcy4gIFlvdSBiZXR0ZXIgcXVpdAorICAgdGhpcyBWaW0uCisKKzIuIFRoZSBzd2FwIGZpbGUgbWlnaHQgYmUgdGhlIHJlc3VsdCBmcm9tIGEgcHJldmlvdXMgY3Jhc2ggb2YgVmltIG9yIHRoZQorICAgY29tcHV0ZXIuICBDaGVjayB0aGUgZGF0ZXMgbWVudGlvbmVkIGluIHRoZSBtZXNzYWdlLiAgSWYgdGhlIGRhdGUgb2YgdGhlCisgICBzd2FwIGZpbGUgaXMgbmV3ZXIgdGhhbiB0aGUgZmlsZSB5b3Ugd2VyZSBlZGl0aW5nLCBhbmQgdGhpcyBsaW5lIGFwcGVhcnM6CisKKwkJbW9kaWZpZWQ6IFlFUyB+CisKKyAgIFRoZW4geW91IHZlcnkgbGlrZWx5IGhhdmUgYSBjcmFzaGVkIGVkaXQgc2Vzc2lvbiB0aGF0IGlzIHdvcnRoIHJlY292ZXJpbmcuCisgICAgICBJZiB0aGUgZGF0ZSBvZiB0aGUgZmlsZSBpcyBuZXdlciB0aGFuIHRoZSBkYXRlIG9mIHRoZSBzd2FwIGZpbGUsIHRoZW4KKyAgIGVpdGhlciBpdCB3YXMgY2hhbmdlZCBhZnRlciB0aGUgY3Jhc2ggKHBlcmhhcHMgeW91IHJlY292ZXJlZCBpdCBlYXJsaWVyLAorICAgYnV0IGRpZG4ndCBkZWxldGUgdGhlIHN3YXAgZmlsZT8pLCBvciBlbHNlIHRoZSBmaWxlIHdhcyBzYXZlZCBiZWZvcmUgdGhlCisgICBjcmFzaCBidXQgYWZ0ZXIgdGhlIGxhc3Qgd3JpdGUgb2YgdGhlIHN3YXAgZmlsZSAodGhlbiB5b3UncmUgbHVja3k6IHlvdQorICAgZG9uJ3QgZXZlbiBuZWVkIHRoYXQgb2xkIHN3YXAgZmlsZSkuIFZpbSB3aWxsIHdhcm4geW91IGZvciB0aGlzIHdpdGggdGhpcworICAgZXh0cmEgbGluZToKKworICAgICAgTkVXRVIgdGhhbiBzd2FwIGZpbGUhIH4KKworCitVTlJFQURBQkxFIFNXQVAgRklMRQorCitTb21ldGltZXMgdGhlIGxpbmUKKworCVtjYW5ub3QgYmUgcmVhZF0gfgorCit3aWxsIGFwcGVhciB1bmRlciB0aGUgbmFtZSBvZiB0aGUgc3dhcCBmaWxlLiBUaGlzIGNhbiBiZSBnb29kIG9yIGJhZCwKK2RlcGVuZGluZyBvbiBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBnb29kIGlmIGEgcHJldmlvdXMgZWRpdGluZyBzZXNzaW9uIGNyYXNoZWQgd2l0aG91dCBoYXZpbmcgbWFkZSBhbnkKK2NoYW5nZXMgdG8gdGhlIGZpbGUuIFRoZW4gYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB0aGUgc3dhcCBmaWxlIHdpbGwgc2hvdwordGhhdCBpdCBoYXMgemVybyBieXRlcy4gWW91IG1heSBkZWxldGUgaXQgYW5kIHByb2NlZWQuCisKK0l0IGlzIHNsaWdodGx5IGJhZCBpZiB5b3UgZG9uJ3QgaGF2ZSByZWFkIHBlcm1pc3Npb24gZm9yIHRoZSBzd2FwIGZpbGUuIFlvdQorbWF5IHdhbnQgdG8gdmlldyB0aGUgZmlsZSByZWFkLW9ubHksIG9yIHF1aXQuIE9uIG11bHRpLXVzZXIgc3lzdGVtcywgaWYgeW91Cit5b3Vyc2VsZiBkaWQgdGhlIGxhc3QgY2hhbmdlcyB1bmRlciBhIGRpZmZlcmVudCBsb2dpbiBuYW1lLCBhIGxvZ291dAorZm9sbG93ZWQgYnkgYSBsb2dpbiB1bmRlciB0aGF0IG90aGVyIG5hbWUgbWlnaHQgY3VyZSB0aGUgInJlYWQgZXJyb3IiLiBPcgorZWxzZSB5b3UgbWlnaHQgd2FudCB0byBmaW5kIG91dCB3aG8gbGFzdCBlZGl0ZWQgKG9yIGlzIGVkaXRpbmcpIHRoZSBmaWxlIGFuZAoraGF2ZSBhIHRhbGsgd2l0aCB0aGVtLgorCitJdCBpcyB2ZXJ5IGJhZCBpZiBpdCBtZWFucyB0aGVyZSBpcyBhIHBoeXNpY2FsIHJlYWQgZXJyb3Igb24gdGhlIGRpc2sKK2NvbnRhaW5pbmcgdGhlIHN3YXAgZmlsZS4gIEZvcnR1bmF0ZWx5LCB0aGlzIGFsbW9zdCBuZXZlciBoYXBwZW5zLgorWW91IG1heSB3YW50IHRvIHZpZXcgdGhlIGZpbGUgcmVhZC1vbmx5IGF0IGZpcnN0IChpZiB5b3UgY2FuKSwgdG8gc2VlIHRoZQorZXh0ZW50IG9mIHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSAiZm9yZ290dGVuIi4gIElmIHlvdSBhcmUgdGhlIG9uZSBpbiBjaGFyZ2Ugb2YKK3RoYXQgZmlsZSwgYmUgcHJlcGFyZWQgdG8gcmVkbyB5b3VyIGxhc3QgY2hhbmdlcy4KKworCitXSEFUIFRPIERPPworCitJZiBkaWFsb2dzIGFyZSBzdXBwb3J0ZWQgeW91IHdpbGwgYmUgYXNrZWQgdG8gc2VsZWN0IG9uZSBvZiBmaXZlIGNob2ljZXM6CisKKyAgU3dhcCBmaWxlICIubWFpbi5jLnN3cCIgYWxyZWFkeSBleGlzdHMhIH4KKyAgW09dcGVuIFJlYWQtT25seSwgKEUpZGl0IGFueXdheSwgKFIpZWNvdmVyLCAoUSl1aXQsIChBKWJvcnQsIChEKWVsZXRlIGl0OiB+CisKK08gIE9wZW4gdGhlIGZpbGUgcmVhZG9ubHkuICBVc2UgdGhpcyB3aGVuIHlvdSBqdXN0IHdhbnQgdG8gdmlldyB0aGUgZmlsZSBhbmQKKyAgIGRvbid0IG5lZWQgdG8gcmVjb3ZlciBpdC4gIFlvdSBtaWdodCB3YW50IHRvIHVzZSB0aGlzIHdoZW4geW91IGtub3cgc29tZW9uZQorICAgZWxzZSBpcyBlZGl0aW5nIHRoZSBmaWxlLCBidXQgeW91IGp1c3Qgd2FudCB0byBsb29rIGluIGl0IGFuZCBub3QgbWFrZQorICAgY2hhbmdlcy4KKworRSAgRWRpdCB0aGUgZmlsZSBhbnl3YXkuICBVc2UgdGhpcyB3aXRoIGNhdXRpb24hICBJZiB0aGUgZmlsZSBpcyBiZWluZyBlZGl0ZWQKKyAgIGluIGFub3RoZXIgVmltLCB5b3UgbWlnaHQgZW5kIHVwIHdpdGggdHdvIHZlcnNpb25zIG9mIHRoZSBmaWxlLiAgVmltIHdpbGwKKyAgIHRyeSB0byB3YXJuIHlvdSB3aGVuIHRoaXMgaGFwcGVucywgYnV0IGJldHRlciBiZSBzYWZlIHRoZW4gc29ycnkuCisKK1IgIFJlY292ZXIgdGhlIGZpbGUgZnJvbSB0aGUgc3dhcCBmaWxlLiAgVXNlIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgc3dhcAorICAgZmlsZSBjb250YWlucyBjaGFuZ2VzIHRoYXQgeW91IHdhbnQgdG8gcmVjb3Zlci4KKworUSAgUXVpdC4gIFRoaXMgYXZvaWRzIHN0YXJ0aW5nIHRvIGVkaXQgdGhlIGZpbGUuICBVc2UgdGhpcyBpZiB0aGVyZSBpcyBhbm90aGVyCisgICBWaW0gZWRpdGluZyB0aGUgc2FtZSBmaWxlLgorICAgICAgV2hlbiB5b3UganVzdCBzdGFydGVkIFZpbSwgdGhpcyB3aWxsIGV4aXQgVmltLiAgV2hlbiBzdGFydGluZyBWaW0gd2l0aAorICAgZmlsZXMgaW4gc2V2ZXJhbCB3aW5kb3dzLCBWaW0gcXVpdHMgb25seSBpZiB0aGVyZSBpcyBhIHN3YXAgZmlsZSBmb3IgdGhlCisgICBmaXJzdCBvbmUuICBXaGVuIHVzaW5nIGFuIGVkaXQgY29tbWFuZCwgdGhlIGZpbGUgd2lsbCBub3QgYmUgbG9hZGVkIGFuZCB5b3UKKyAgIGFyZSB0YWtlbiBiYWNrIHRvIHRoZSBwcmV2aW91c2x5IGVkaXRlZCBmaWxlLgorCitBICBBYm9ydC4gIExpa2UgUXVpdCwgYnV0IGFsc28gYWJvcnQgZnVydGhlciBjb21tYW5kcy4gIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgIGxvYWRpbmcgYSBzY3JpcHQgdGhhdCBlZGl0cyBzZXZlcmFsIGZpbGVzLCBzdWNoIGFzIGEgc2Vzc2lvbiB3aXRoIG11bHRpcGxlCisgICB3aW5kb3dzLgorCitEICBEZWxldGUgdGhlIHN3YXAgZmlsZS4gIFVzZSB0aGlzIHdoZW4geW91IGFyZSBzdXJlIHlvdSBubyBsb25nZXIgbmVlZCBpdC4KKyAgIEZvciBleGFtcGxlLCB3aGVuIGl0IGRvZXNuJ3QgY29udGFpbiBjaGFuZ2VzLCBvciB3aGVuIHRoZSBmaWxlIGl0c2VsZiBpcworICAgbmV3ZXIgdGhhbiB0aGUgc3dhcCBmaWxlLgorICAgICAgT24gVW5peCB0aGlzIGNob2ljZSBpcyBvbmx5IG9mZmVyZWQgd2hlbiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlCisgICBzd2FwIGZpbGUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHJ1bm5pbmcuCisKK0lmIHlvdSBkbyBub3QgZ2V0IHRoZSBkaWFsb2cgKHlvdSBhcmUgcnVubmluZyBhIHZlcnNpb24gb2YgVmltIHRoYXQgZG9lcyBub3QKK3N1cHBvcnQgaXQpLCB5b3Ugd2lsbCBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LiAgVG8gcmVjb3ZlciB0aGUgZmlsZSwgdXNlIHRoaXMKK2NvbW1hbmQ6ID4KKworCTpyZWNvdmVyCisKKworVmltIGNhbm5vdCBhbHdheXMgZGV0ZWN0IHRoYXQgYSBzd2FwIGZpbGUgYWxyZWFkeSBleGlzdHMgZm9yIGEgZmlsZS4gIFRoaXMgaXMKK3RoZSBjYXNlIHdoZW4gdGhlIG90aGVyIGVkaXQgc2Vzc2lvbiBwdXRzIHRoZSBzd2FwIGZpbGVzIGluIGFub3RoZXIgZGlyZWN0b3J5CitvciB3aGVuIHRoZSBwYXRoIG5hbWUgZm9yIHRoZSBmaWxlIGlzIGRpZmZlcmVudCB3aGVuIGVkaXRpbmcgaXQgb24gZGlmZmVyZW50CittYWNoaW5lcy4gIFRoZXJlZm9yZSwgZG9uJ3QgcmVseSBvbiBWaW0gYWx3YXlzIHdhcm5pbmcgeW91LgorCitJZiB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gc2VlIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBhZGQgdGhlICdBJyBmbGFnIHRvIHRoZQorJ3Nob3J0bWVzcycgb3B0aW9uLiAgQnV0IGl0J3MgdmVyeSB1bnVzdWFsIHRoYXQgeW91IG5lZWQgdGhpcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTEuNCoJRnVydGhlciByZWFkaW5nCisKK3xzd2FwLWZpbGV8CUFuIGV4cGxhbmF0aW9uIGFib3V0IHdoZXJlIHRoZSBzd2FwIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGFuZAorCQl3aGF0IGl0cyBuYW1lIGlzLgorfDpwcmVzZXJ2ZXwJTWFudWFsbHkgZmx1c2hpbmcgdGhlIHN3YXAgZmlsZSB0byBkaXNrLgorfDpzd2FwbmFtZXwJU2VlIHRoZSBuYW1lIG9mIHRoZSBzd2FwIGZpbGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuCisndXBkYXRlY291bnQnCU51bWJlciBvZiBrZXkgc3Ryb2tlcyBhZnRlciB3aGljaCB0aGUgc3dhcCBmaWxlIGlzIGZsdXNoZWQgdG8KKwkJZGlzay4KKyd1cGRhdGV0aW1lJwlUaW1lb3V0IGFmdGVyIHdoaWNoIHRoZSBzd2FwIGZpbGUgaXMgZmx1c2hlZCB0byBkaXNrLgorJ3N3YXBzeW5jJwlXaGV0aGVyIHRoZSBkaXNrIGlzIHN5bmNlZCB3aGVuIHRoZSBzd2FwIGZpbGUgaXMgZmx1c2hlZC4KKydkaXJlY3RvcnknCUxpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzIHdoZXJlIHRvIHN0b3JlIHRoZSBzd2FwIGZpbGUuCisnbWF4bWVtJwlMaW1pdCBmb3IgbWVtb3J5IHVzYWdlIGJlZm9yZSB3cml0aW5nIHRleHQgdG8gdGhlIHN3YXAgZmlsZS4KKydtYXhtZW10b3QnCVNhbWUsIGJ1dCBmb3IgYWxsIGZpbGVzIGluIHRvdGFsLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzEyLnR4dHwgIENsZXZlciB0cmlja3MKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMTIudHh0IGIvcnVudGltZS9kb2MvdXNyXzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWJmMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzEyLnR4dApAQCAtMCwwICsxLDM1OCBAQAorKnVzcl8xMi50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwMQorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJCUNsZXZlciB0cmlja3MKKworCitCeSBjb21iaW5pbmcgc2V2ZXJhbCBjb21tYW5kcyB5b3UgY2FuIG1ha2UgVmltIGRvIG5lYXJseSBldmVyeXRoaW5nLiAgSW4gdGhpcworY2hhcHRlciBhIG51bWJlciBvZiB1c2VmdWwgY29tYmluYXRpb25zIHdpbGwgYmUgcHJlc2VudGVkLiAgVGhpcyB1c2VzIHRoZQorY29tbWFuZHMgaW50cm9kdWNlZCBpbiB0aGUgcHJldmlvdXMgY2hhcHRlcnMgYW5kIGEgZmV3IG1vcmUuCisKK3wxMi4xfAlSZXBsYWNlIGEgd29yZAorfDEyLjJ8CUNoYW5nZSAiTGFzdCwgRmlyc3QiIHRvICJGaXJzdCBMYXN0IgorfDEyLjN8CVNvcnQgYSBsaXN0Cit8MTIuNHwJUmV2ZXJzZSBsaW5lIG9yZGVyCit8MTIuNXwJQ291bnQgd29yZHMKK3wxMi42fAlGaW5kIGEgbWFuIHBhZ2UKK3wxMi43fAlUcmltIGJsYW5rcworfDEyLjh8CUZpbmQgd2hlcmUgYSB3b3JkIGlzIHVzZWQKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjAudHh0fCAgVHlwaW5nIGNvbW1hbmQtbGluZSBjb21tYW5kcyBxdWlja2x5CisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8xMS50eHR8ICBSZWNvdmVyaW5nIGZyb20gYSBjcmFzaAorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTIuMSoJUmVwbGFjZSBhIHdvcmQKKworVGhlIHN1YnN0aXR1dGUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHdvcmQgd2l0aAorYW5vdGhlciB3b3JkOiA+CisKKwk6JXMvZm91ci80L2cKKworVGhlICIlIiByYW5nZSBtZWFucyB0byByZXBsYWNlIGluIGFsbCBsaW5lcy4gIFRoZSAiZyIgZmxhZyBhdCB0aGUgZW5kIGNhdXNlcworYWxsIHdvcmRzIGluIGEgbGluZSB0byBiZSByZXBsYWNlZC4KKyAgIFRoaXMgd2lsbCBub3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGlmIHlvdXIgZmlsZSBhbHNvIGNvbnRhaW5zICJ0aGlydHlmb3VyIi4KK0l0IHdvdWxkIGJlIHJlcGxhY2VkIHdpdGggInRoaXJ0eTQiLiAgVG8gYXZvaWQgdGhpcywgdXNlIHRoZSAiXDwiIGl0ZW0gdG8KK21hdGNoIHRoZSBzdGFydCBvZiBhIHdvcmQ6ID4KKworCTolcy9cPGZvdXIvNC9nCisKK09idmlvdXNseSwgdGhpcyBzdGlsbCBnb2VzIHdyb25nIG9uICJmb3VydHkiLiAgVXNlICJcPiIgdG8gbWF0Y2ggdGhlIGVuZCBvZiBhCit3b3JkOiA+CisKKwk6JXMvXDxmb3VyXD4vNC9nCisKK0lmIHlvdSBhcmUgcHJvZ3JhbW1pbmcsIHlvdSBtaWdodCB3YW50IHRvIHJlcGxhY2UgImZvdXIiIGluIGNvbW1lbnRzLCBidXQgbm90CitpbiB0aGUgY29kZS4gIFNpbmNlIHRoaXMgaXMgZGlmZmljdWx0IHRvIHNwZWNpZnksIGFkZCB0aGUgImMiIGZsYWcgdG8gaGF2ZSB0aGUKK3N1YnN0aXR1dGUgY29tbWFuZCBwcm9tcHQgeW91IGZvciBlYWNoIHJlcGxhY2VtZW50OiA+CisKKworCTolcy9cPGZvdXJcPi80L2djCisKKworUkVQTEFDSU5HIElOIFNFVkVSQUwgRklMRVMKKworU3VwcG9zZSB5b3Ugd2FudCB0byByZXBsYWNlIGEgd29yZCBpbiBtb3JlIHRoYW4gb25lIGZpbGUuICBZb3UgY291bGQgZWRpdCBlYWNoCitmaWxlIGFuZCB0eXBlIHRoZSBjb21tYW5kIG1hbnVhbGx5LiAgSXQncyBhIGxvdCBmYXN0ZXIgdG8gdXNlIHJlY29yZCBhbmQKK3BsYXliYWNrLgorICAgTGV0J3MgYXNzdW1lIHlvdSBoYXZlIGEgZGlyZWN0b3J5IHdpdGggQysrIGZpbGVzLCBhbGwgZW5kaW5nIGluICIuY3BwIi4KK1RoZXJlIGlzIGEgZnVuY3Rpb24gY2FsbGVkICJHZXRSZXNwIiB0aGF0IHlvdSB3YW50IHRvIHJlbmFtZSB0byAiR2V0QW5zd2VyIi4KKworCXZpbSAqLmNwcAkJU3RhcnQgVmltLCBkZWZpbmluZyB0aGUgYXJndW1lbnQgbGlzdCB0bworCQkJCWNvbnRhaW4gYWxsIHRoZSBDKysgZmlsZXMuICBZb3UgYXJlIG5vdyBpbiB0aGUKKwkJCQlmaXJzdCBmaWxlLgorCXFxCQkJU3RhcnQgcmVjb3JkaW5nIGludG8gdGhlIHEgcmVnaXN0ZXIKKwk6JXMvXDxHZXRSZXNwXD4vR2V0QW5zd2VyL2cKKwkJCQlEbyB0aGUgcmVwbGFjZW1lbnRzIGluIHRoZSBmaXJzdCBmaWxlLgorCTp3bmV4dAkJCVdyaXRlIHRoaXMgZmlsZSBhbmQgbW92ZSB0byB0aGUgbmV4dCBvbmUuCisJcQkJCVN0b3AgcmVjb3JkaW5nLgorCUBxCQkJRXhlY3V0ZSB0aGUgcSByZWdpc3Rlci4gIFRoaXMgd2lsbCByZXBsYXkgdGhlCisJCQkJc3Vic3RpdHV0aW9uIGFuZCAiOnduZXh0Ii4gIFlvdSBjYW4gdmVyaWZ5CisJCQkJdGhhdCB0aGlzIGRvZXNuJ3QgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlLgorCTk5OUBxCQkJRXhlY3V0ZSB0aGUgcSByZWdpc3RlciBvbiB0aGUgcmVtYWluaW5nIGZpbGVzLgorCitBdCB0aGUgbGFzdCBmaWxlIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLCBiZWNhdXNlICI6d25leHQiIGNhbm5vdCBtb3ZlCit0byB0aGUgbmV4dCBmaWxlLiAgVGhpcyBzdG9wcyB0aGUgZXhlY3V0aW9uLCBhbmQgZXZlcnl0aGluZyBpcyBkb25lLgorCisJTm90ZToKKwlXaGVuIHBsYXlpbmcgYmFjayBhIHJlY29yZGVkIHNlcXVlbmNlLCBhbiBlcnJvciBzdG9wcyB0aGUgZXhlY3V0aW9uLgorCVRoZXJlZm9yZSwgbWFrZSBzdXJlIHlvdSBkb24ndCBnZXQgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHJlY29yZGluZy4KKworVGhlcmUgaXMgb25lIGNhdGNoOiBJZiBvbmUgb2YgdGhlIC5jcHAgZmlsZXMgZG9lcyBub3QgY29udGFpbiB0aGUgd29yZAorIkdldFJlc3AiLCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgYW5kIHJlcGxhY2luZyB3aWxsIHN0b3AuICBUbyBhdm9pZCB0aGlzLCBhZGQKK3RoZSAiZSIgZmxhZyB0byB0aGUgc3Vic3RpdHV0ZSBjb21tYW5kOiA+CisKKwk6JXMvXDxHZXRSZXNwXD4vR2V0QW5zd2VyL2dlCisKK1RoZSAiZSIgZmxhZyB0ZWxscyAiOnN1YnN0aXR1dGUiIHRoYXQgbm90IGZpbmRpbmcgYSBtYXRjaCBpcyBub3QgYW4gZXJyb3IuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEyLjIqCUNoYW5nZSAiTGFzdCwgRmlyc3QiIHRvICJGaXJzdCBMYXN0IgorCitZb3UgaGF2ZSBhIGxpc3Qgb2YgbmFtZXMgaW4gdGhpcyBmb3JtOgorCisJRG9lLCBKb2huIH4KKwlTbWl0aCwgUGV0ZXIgfgorCitZb3Ugd2FudCB0byBjaGFuZ2UgdGhhdCB0bzoKKworCUpvaG4gRG9lIH4KKwlQZXRlciBTbWl0aCB+CisKK1RoaXMgY2FuIGJlIGRvbmUgd2l0aCBqdXN0IG9uZSBjb21tYW5kOiA+CisKKwk6JXMvXChbXixdKlwpLCBcKC4qXCkvXDIgXDEvCisKK0xldCdzIGJyZWFrIHRoaXMgZG93biBpbiBwYXJ0cy4gIE9idmlvdXNseSBpdCBzdGFydHMgd2l0aCBhIHN1YnN0aXR1dGUKK2NvbW1hbmQuICBUaGUgIiUiIGlzIHRoZSBsaW5lIHJhbmdlLCB3aGljaCBzdGFuZHMgZm9yIHRoZSB3aG9sZSBmaWxlLiAgVGh1cwordGhlIHN1YnN0aXR1dGlvbiBpcyBkb25lIGluIGV2ZXJ5IGxpbmUgaW4gdGhlIGZpbGUuCisgICBUaGUgYXJndW1lbnRzIGZvciB0aGUgc3Vic3RpdHV0ZSBjb21tYW5kIGFyZSAiL2Zyb20vdG8vIi4gIFRoZSBzbGFzaGVzCitzZXBhcmF0ZSB0aGUgImZyb20iIHBhdHRlcm4gYW5kIHRoZSAidG8iIHN0cmluZy4gIFRoaXMgaXMgd2hhdCB0aGUgImZyb20iCitwYXR0ZXJuIGNvbnRhaW5zOgorCQkJCQkJCVwoW14sXSpcKSwgXCguKlwpIH4KKworCVRoZSBmaXJzdCBwYXJ0IGJldHdlZW4gXCggXCkgbWF0Y2hlcyAiTGFzdCIJXCggICAgIFwpCisJICAgIG1hdGNoIGFueXRoaW5nIGJ1dCBhIGNvbW1hCQkJICBbXixdCisJICAgIGFueSBudW1iZXIgb2YgdGltZXMJCQkJICAgICAgKgorCW1hdGNoZXMgIiwgIiBsaXRlcmFsbHkJCQkJCSAsCisJVGhlIHNlY29uZCBwYXJ0IGJldHdlZW4gXCggXCkgbWF0Y2hlcyAiRmlyc3QiCQkgICBcKCAgXCkKKwkgICAgYW55IGNoYXJhY3RlcgkJCQkJICAgICAuCisJICAgIGFueSBudW1iZXIgb2YgdGltZXMJCQkJCSAgICAgICoKKworSW4gdGhlICJ0byIgcGFydCB3ZSBoYXZlICJcMiIgYW5kICJcMSIuICBUaGVzZSBhcmUgY2FsbGVkIGJhY2tyZWZlcmVuY2VzLgorVGhleSByZWZlciB0byB0aGUgdGV4dCBtYXRjaGVkIGJ5IHRoZSAiXCggXCkiIHBhcnRzIGluIHRoZSBwYXR0ZXJuLiAgIlwyIgorcmVmZXJzIHRvIHRoZSB0ZXh0IG1hdGNoZWQgYnkgdGhlIHNlY29uZCAiXCggXCkiLCB3aGljaCBpcyB0aGUgIkZpcnN0IiBuYW1lLgorIlwxIiByZWZlcnMgdG8gdGhlIGZpcnN0ICJcKCBcKSIsIHdoaWNoIGlzIHRoZSAiTGFzdCIgbmFtZS4KKyAgIFlvdSBjYW4gdXNlIHVwIHRvIG5pbmUgYmFja3JlZmVyZW5jZXMgaW4gdGhlICJ0byIgcGFydCBvZiBhIHN1YnN0aXR1dGUKK2NvbW1hbmQuICAiXDAiIHN0YW5kcyBmb3IgdGhlIHdob2xlIG1hdGNoZWQgcGF0dGVybi4gIFRoZXJlIGFyZSBhIGZldyBtb3JlCitzcGVjaWFsIGl0ZW1zIGluIGEgc3Vic3RpdHV0ZSBjb21tYW5kLCBzZWUgfHN1Yi1yZXBsYWNlLXNwZWNpYWx8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMi4zKglTb3J0IGEgbGlzdAorCitJbiBhIE1ha2VmaWxlIHlvdSBvZnRlbiBoYXZlIGEgbGlzdCBvZiBmaWxlcy4gIEZvciBleGFtcGxlOgorCisJT0JKUyA9IFwgfgorCQl2ZXJzaW9uLm8gXCB+CisJCXBjaC5vIFwgfgorCQlnZXRvcHQubyBcIH4KKwkJdXRpbC5vIFwgfgorCQlnZXRvcHQxLm8gXCB+CisJCWlucC5vIFwgfgorCQlwYXRjaC5vIFwgfgorCQliYWNrdXAubyB+CisKK1RvIHNvcnQgdGhpcyBsaXN0LCBmaWx0ZXIgdGhlIHRleHQgdGhyb3VnaCB0aGUgZXh0ZXJuYWwgc29ydCBjb21tYW5kOiA+CisKKwkvXk9CSlMKKwlqCisJOi4sL14kLy0xIXNvcnQKKworVGhpcyBnb2VzIHRvIHRoZSBmaXJzdCBsaW5lLCB3aGVyZSAiT0JKUyIgaXMgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBsaW5lLgorVGhlbiBpdCBnb2VzIG9uZSBsaW5lIGRvd24gYW5kIGZpbHRlcnMgdGhlIGxpbmVzIHVudGlsIHRoZSBuZXh0IGVtcHR5IGxpbmUuCitZb3UgY291bGQgYWxzbyBzZWxlY3QgdGhlIGxpbmVzIGluIFZpc3VhbCBtb2RlIGFuZCB0aGVuIHVzZSAiIXNvcnQiLiAgVGhhdCdzCitlYXNpZXIgdG8gdHlwZSwgYnV0IG1vcmUgd29yayB3aGVuIHRoZXJlIGFyZSBtYW55IGxpbmVzLgorICAgVGhlIHJlc3VsdCBpcyB0aGlzOgorCisJT0JKUyA9IFwgfgorCQliYWNrdXAubyB+CisJCWdldG9wdC5vIFwgfgorCQlnZXRvcHQxLm8gXCB+CisJCWlucC5vIFwgfgorCQlwYXRjaC5vIFwgfgorCQlwY2gubyBcIH4KKwkJdXRpbC5vIFwgfgorCQl2ZXJzaW9uLm8gXCB+CisKKworTm90aWNlIHRoYXQgYSBiYWNrc2xhc2ggYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbGluZQorY29udGludWVzLiAgQWZ0ZXIgc29ydGluZywgdGhpcyBpcyB3cm9uZyEgIFRoZSAiYmFja3VwLm8iIGxpbmUgdGhhdCB3YXMgYXQKK3RoZSBlbmQgZGlkbid0IGhhdmUgYSBiYWNrc2xhc2guICBOb3cgdGhhdCBpdCBzb3J0cyB0byBhbm90aGVyIHBsYWNlLCBpdAorbXVzdCBoYXZlIGEgYmFja3NsYXNoLgorICAgVGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGFkZCB0aGUgYmFja3NsYXNoIHdpdGggIkEgXDxFc2M+Ii4gIFlvdSBjYW4KK2tlZXAgdGhlIGJhY2tzbGFzaCBpbiB0aGUgbGFzdCBsaW5lLCBpZiB5b3UgbWFrZSBzdXJlIGFuIGVtcHR5IGxpbmUgY29tZXMKK2FmdGVyIGl0LiAgVGhhdCB3YXkgeW91IGRvbid0IGhhdmUgdGhpcyBwcm9ibGVtIGFnYWluLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoxMi40KglSZXZlcnNlIGxpbmUgb3JkZXIKKworVGhlIHw6Z2xvYmFsfCBjb21tYW5kIGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZSB8Om1vdmV8IGNvbW1hbmQgdG8gbW92ZSBhbGwgdGhlCitsaW5lcyBiZWZvcmUgdGhlIGZpcnN0IGxpbmUsIHJlc3VsdGluZyBpbiBhIHJldmVyc2VkIGZpbGUuICBUaGUgY29tbWFuZCBpczogPgorCisJOmdsb2JhbC9eL20gMAorCitBYmJyZXZpYXRlZDogPgorCisJOmcvXi9tIDAKKworVGhlICJeIiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIChldmVuIGlmIHRoZSBsaW5lCitpcyBibGFuaykuICBUaGUgfDptb3ZlfCBjb21tYW5kIG1vdmVzIHRoZSBtYXRjaGluZyBsaW5lIHRvIGFmdGVyIHRoZSBteXRoaWNhbAoremVyb3RoIGxpbmUsIHNvIHRoZSBjdXJyZW50IG1hdGNoaW5nIGxpbmUgYmVjb21lcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZS4KK0FzIHRoZSB8Omdsb2JhbHwgY29tbWFuZCBpcyBub3QgY29uZnVzZWQgYnkgdGhlIGNoYW5naW5nIGxpbmUgbnVtYmVyaW5nLAorfDpnbG9iYWx8IHByb2NlZWRzIHRvIG1hdGNoIGFsbCByZW1haW5pbmcgbGluZXMgb2YgdGhlIGZpbGUgYW5kIHB1dHMgZWFjaCBhcwordGhlIGZpcnN0LgorCitUaGlzIGFsc28gd29ya3Mgb24gYSByYW5nZSBvZiBsaW5lcy4gIEZpcnN0IG1vdmUgdG8gYWJvdmUgdGhlIGZpcnN0IGxpbmUgYW5kCittYXJrIGl0IHdpdGggIm10Ii4gIFRoZW4gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsYXN0IGxpbmUgaW4gdGhlIHJhbmdlIGFuZAordHlwZTogPgorCisJOid0KzEsLmcvXi9tICd0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEyLjUqCUNvdW50IHdvcmRzCisKK1NvbWV0aW1lcyB5b3UgaGF2ZSB0byB3cml0ZSBhIHRleHQgd2l0aCBhIG1heGltdW0gbnVtYmVyIG9mIHdvcmRzLiAgVmltIGNhbgorY291bnQgdGhlIHdvcmRzIGZvciB5b3UuCisgICBXaGVuIHRoZSB3aG9sZSBmaWxlIGlzIHdoYXQgeW91IHdhbnQgdG8gY291bnQgdGhlIHdvcmRzIGluLCB1c2UgdGhpcworY29tbWFuZDogPgorCisJZyBDVFJMLUcKKworRG8gbm90IHR5cGUgYSBzcGFjZSBhZnRlciB0aGUgZywgdGhpcyBpcyBqdXN0IHVzZWQgaGVyZSB0byBtYWtlIHRoZSBjb21tYW5kCitlYXN5IHRvIHJlYWQuCisgICBUaGUgb3V0cHV0IGxvb2tzIGxpa2UgdGhpczoKKworCUNvbCAxIG9mIDA7IExpbmUgMTQxIG9mIDE1NzsgV29yZCA3NDggb2YgNzc0OyBCeXRlIDQ0ODkgb2YgNDk3NiB+CisKK1lvdSBjYW4gc2VlIG9uIHdoaWNoIHdvcmQgeW91IGFyZSAoNzQ4KSwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2Ygd29yZHMgaW4gdGhlCitmaWxlICg3NzQpLgorCitXaGVuIHRoZSB0ZXh0IGlzIG9ubHkgcGFydCBvZiBhIGZpbGUsIHlvdSBjb3VsZCBtb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUgdGV4dCwKK3R5cGUgImcgQ1RSTC1HIiwgbW92ZSB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0LCB0eXBlICJnIENUUkwtRyIgYWdhaW4sIGFuZCB0aGVuCit1c2UgeW91ciBicmFpbiB0byBjb21wdXRlIHRoZSBkaWZmZXJlbmNlIGluIHRoZSB3b3JkIHBvc2l0aW9uLiAgVGhhdCdzIGEgZ29vZAorZXhlcmNpc2UsIGJ1dCB0aGVyZSBpcyBhbiBlYXNpZXIgd2F5LiAgV2l0aCBWaXN1YWwgbW9kZSwgc2VsZWN0IHRoZSB0ZXh0IHlvdQord2FudCB0byBjb3VudCB3b3JkcyBpbi4gIFRoZW4gdHlwZSBnIENUUkwtRy4gIFRoZSByZXN1bHQ6CisKKwlTZWxlY3RlZCA1IG9mIDI5MyBMaW5lczsgNzAgb2YgMTg4NCBXb3JkczsgMzU5IG9mIDEwOTI4IEJ5dGVzIH4KKworRm9yIG90aGVyIHdheXMgdG8gY291bnQgd29yZHMsIGxpbmVzIGFuZCBvdGhlciBpdGVtcywgc2VlIHxjb3VudC1pdGVtc3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEyLjYqCUZpbmQgYSBtYW4gcGFnZQkJCQkJKmZpbmQtbWFucGFnZSoKKworV2hpbGUgZWRpdGluZyBhIHNoZWxsIHNjcmlwdCBvciBDIHByb2dyYW0sIHlvdSBhcmUgdXNpbmcgYSBjb21tYW5kIG9yIGZ1bmN0aW9uCit0aGF0IHlvdSB3YW50IHRvIGZpbmQgdGhlIG1hbiBwYWdlIGZvciAodGhpcyBpcyBvbiBVbml4KS4gIExldCdzIGZpcnN0IHVzZSBhCitzaW1wbGUgd2F5OiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHdvcmQgeW91IHdhbnQgdG8gZmluZCBoZWxwIG9uIGFuZCBwcmVzcyA+CisKKwlLCisKK1ZpbSB3aWxsIHJ1biB0aGUgZXh0ZXJuYWwgIm1hbiIgcHJvZ3JhbSBvbiB0aGUgd29yZC4gIElmIHRoZSBtYW4gcGFnZSBpcworZm91bmQsIGl0IGlzIGRpc3BsYXllZC4gIFRoaXMgdXNlcyB0aGUgbm9ybWFsIHBhZ2VyIHRvIHNjcm9sbCB0aHJvdWdoIHRoZSB0ZXh0CisobW9zdGx5IHRoZSAibW9yZSIgcHJvZ3JhbSkuICBXaGVuIHlvdSBnZXQgdG8gdGhlIGVuZCBwcmVzc2luZyA8RW50ZXI+IHdpbGwKK2dldCB5b3UgYmFjayBpbnRvIFZpbS4KKworQSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgY2FuJ3Qgc2VlIHRoZSBtYW4gcGFnZSBhbmQgdGhlIHRleHQgeW91IGFyZSB3b3JraW5nCitvbiBhdCB0aGUgc2FtZSB0aW1lLiAgVGhlcmUgaXMgYSB0cmljayB0byBtYWtlIHRoZSBtYW4gcGFnZSBhcHBlYXIgaW4gYSBWaW0KK3dpbmRvdy4gIEZpcnN0LCBsb2FkIHRoZSBtYW4gZmlsZXR5cGUgcGx1Z2luOiA+CisKKwk6cnVudGltZSEgZnRwbHVnaW4vbWFuLnZpbQorCitQdXQgdGhpcyBjb21tYW5kIGluIHlvdXIgdmltcmMgZmlsZSBpZiB5b3UgaW50ZW5kIHRvIGRvIHRoaXMgb2Z0ZW4uICBOb3cgeW91CitjYW4gdXNlIHRoZSAiOk1hbiIgY29tbWFuZCB0byBvcGVuIGEgd2luZG93IG9uIGEgbWFuIHBhZ2U6ID4KKworCTpNYW4gY3NoCisKK1lvdSBjYW4gc2Nyb2xsIGFyb3VuZCBhbmQgdGhlIHRleHQgaXMgaGlnaGxpZ2h0ZWQuICBUaGlzIGFsbG93cyB5b3UgdG8gZmluZAordGhlIGhlbHAgeW91IHdlcmUgbG9va2luZyBmb3IuICBVc2UgQ1RSTC1XIHcgdG8ganVtcCB0byB0aGUgd2luZG93IHdpdGggdGhlCit0ZXh0IHlvdSB3ZXJlIHdvcmtpbmcgb24uCisgICBUbyBmaW5kIGEgbWFuIHBhZ2UgaW4gYSBzcGVjaWZpYyBzZWN0aW9uLCBwdXQgdGhlIHNlY3Rpb24gbnVtYmVyIGZpcnN0LgorRm9yIGV4YW1wbGUsIHRvIGxvb2sgaW4gc2VjdGlvbiAzIGZvciAiZWNobyI6ID4KKworCTpNYW4gMyBlY2hvCisKK1RvIGp1bXAgdG8gYW5vdGhlciBtYW4gcGFnZSwgd2hpY2ggaXMgaW4gdGhlIHRleHQgd2l0aCB0aGUgdHlwaWNhbCBmb3JtCisid29yZCgxKSIsIHByZXNzIENUUkwtXSBvbiBpdC4gIEZ1cnRoZXIgIjpNYW4iIGNvbW1hbmRzIHdpbGwgdXNlIHRoZSBzYW1lCit3aW5kb3cuCisKK1RvIGRpc3BsYXkgYSBtYW4gcGFnZSBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciwgdXNlIHRoaXM6ID4KKworCVxLCisKKyhJZiB5b3UgcmVkZWZpbmVkIHRoZSA8TGVhZGVyPiwgdXNlIGl0IGluc3RlYWQgb2YgdGhlIGJhY2tzbGFzaCkuCitGb3IgZXhhbXBsZSwgeW91IHdhbnQgdG8ga25vdyB0aGUgcmV0dXJuIHZhbHVlIG9mICJzdHJzdHIoKSIgd2hpbGUgZWRpdGluZwordGhpcyBsaW5lOgorCisJaWYgKHN0cnN0cihpbnB1dCwgImFhcCIpID09ICkgfgorCitNb3ZlIHRoZSBjdXJzb3IgdG8gc29tZXdoZXJlIG9uICJzdHJzdHIiIGFuZCB0eXBlICJcSyIuICBBIHdpbmRvdyB3aWxsIG9wZW4KK3RvIGRpc3BsYXkgdGhlIG1hbiBwYWdlIGZvciBzdHJzdHIoKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMTIuNyoJVHJpbSBibGFua3MKKworU29tZSBwZW9wbGUgZmluZCBzcGFjZXMgYW5kIHRhYnMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgdXNlbGVzcywgd2FzdGVmdWwsIGFuZAordWdseS4gIFRvIHJlbW92ZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgZXZlcnkgbGluZSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kOiA+CisKKwk6JXMvXHNcKyQvLworCitUaGUgbGluZSByYW5nZSAiJSIgaXMgdXNlZCwgdGh1cyB0aGlzIHdvcmtzIG9uIHRoZSB3aG9sZSBmaWxlLiAgVGhlIHBhdHRlcm4KK3RoYXQgdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCBtYXRjaGVzIHdpdGggaXMgIlxzXCskIi4gIFRoaXMgZmluZHMgd2hpdGUKK3NwYWNlIGNoYXJhY3RlcnMgKFxzKSwgMSBvciBtb3JlIG9mIHRoZW0gKFwrKSwgYmVmb3JlIHRoZSBlbmQtb2YtbGluZSAoJCkuCitMYXRlciB3aWxsIGJlIGV4cGxhaW5lZCBob3cgeW91IHdyaXRlIHBhdHRlcm5zIGxpa2UgdGhpcyB8dXNyXzI3LnR4dHwuCisgICBUaGUgInRvIiBwYXJ0IG9mIHRoZSBzdWJzdGl0dXRlIGNvbW1hbmQgaXMgZW1wdHk6ICIvLyIuICBUaHVzIGl0IHJlcGxhY2VzCit3aXRoIG5vdGhpbmcsIGVmZmVjdGl2ZWx5IGRlbGV0aW5nIHRoZSBtYXRjaGVkIHdoaXRlIHNwYWNlLgorCitBbm90aGVyIHdhc3RlZnVsIHVzZSBvZiBzcGFjZXMgaXMgcGxhY2luZyB0aGVtIGJlZm9yZSBhIFRhYi4gIE9mdGVuIHRoZXNlIGNhbgorYmUgZGVsZXRlZCB3aXRob3V0IGNoYW5naW5nIHRoZSBhbW91bnQgb2Ygd2hpdGUgc3BhY2UuICBCdXQgbm90IGFsd2F5cyEKK1RoZXJlZm9yZSwgeW91IGNhbiBiZXN0IGRvIHRoaXMgbWFudWFsbHkuICBVc2UgdGhpcyBzZWFyY2ggY29tbWFuZDogPgorCisJLyAJCisKK1lvdSBjYW5ub3Qgc2VlIGl0LCBidXQgdGhlcmUgaXMgYSBzcGFjZSBiZWZvcmUgYSB0YWIgaW4gdGhpcyBjb21tYW5kLiAgVGh1cworaXQncyAiLzxTcGFjZT48VGFiPiIuICAgTm93IHVzZSAieCIgdG8gZGVsZXRlIHRoZSBzcGFjZSBhbmQgY2hlY2sgdGhhdCB0aGUKK2Ftb3VudCBvZiB3aGl0ZSBzcGFjZSBkb2Vzbid0IGNoYW5nZS4gIFlvdSBtaWdodCBoYXZlIHRvIGluc2VydCBhIFRhYiBpZiBpdAorZG9lcyBjaGFuZ2UuICBUeXBlICJuIiB0byBmaW5kIHRoZSBuZXh0IG1hdGNoLiAgUmVwZWF0IHRoaXMgdW50aWwgbm8gbW9yZQorbWF0Y2hlcyBjYW4gYmUgZm91bmQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjEyLjgqCUZpbmQgd2hlcmUgYSB3b3JkIGlzIHVzZWQKKworSWYgeW91IGFyZSBhIFVOSVggdXNlciwgeW91IGNhbiB1c2UgYSBjb21iaW5hdGlvbiBvZiBWaW0gYW5kIHRoZSBncmVwIGNvbW1hbmQKK3RvIGVkaXQgYWxsIHRoZSBmaWxlcyB0aGF0IGNvbnRhaW4gYSBnaXZlbiB3b3JkLiAgVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmCit5b3UgYXJlIHdvcmtpbmcgb24gYSBwcm9ncmFtIGFuZCB3YW50IHRvIHZpZXcgb3IgZWRpdCBhbGwgdGhlIGZpbGVzIHRoYXQKK2NvbnRhaW4gYSBzcGVjaWZpYyB2YXJpYWJsZS4KKyAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSB3YW50IHRvIGVkaXQgYWxsIHRoZSBDIHByb2dyYW0gZmlsZXMgdGhhdCBjb250YWluCit0aGUgd29yZCAiZnJhbWVfY291bnRlciIuICBUbyBkbyB0aGlzIHlvdSB1c2UgdGhlIGNvbW1hbmQ6ID4KKworCXZpbSBgZ3JlcCAtbCBmcmFtZV9jb3VudGVyICouY2AKKworTGV0J3MgbG9vayBhdCB0aGlzIGNvbW1hbmQgaW4gZGV0YWlsLiAgVGhlIGdyZXAgY29tbWFuZCBzZWFyY2hlcyB0aHJvdWdoIGEgc2V0CitvZiBmaWxlcyBmb3IgYSBnaXZlbiB3b3JkLiAgQmVjYXVzZSB0aGUgLWwgYXJndW1lbnQgaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZAord2lsbCBvbmx5IGxpc3QgdGhlIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHdvcmQgYW5kIG5vdCBwcmludCB0aGUgbWF0Y2hpbmcgbGluZXMuCitUaGUgd29yZCBpdCBpcyBzZWFyY2hpbmcgZm9yIGlzICJmcmFtZV9jb3VudGVyIi4gIEFjdHVhbGx5LCB0aGlzIGNhbiBiZSBhbnkKK3JlZ3VsYXIgZXhwcmVzc2lvbi4gIChOb3RlOiBXaGF0IGdyZXAgdXNlcyBmb3IgcmVndWxhciBleHByZXNzaW9ucyBpcyBub3QKK2V4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBWaW0gdXNlcy4pCisgICBUaGUgZW50aXJlIGNvbW1hbmQgaXMgZW5jbG9zZWQgaW4gYmFja3RpY2tzIChgKS4gIFRoaXMgdGVsbHMgdGhlIFVOSVggc2hlbGwKK3RvIHJ1biB0aGlzIGNvbW1hbmQgYW5kIHByZXRlbmQgdGhhdCB0aGUgcmVzdWx0cyB3ZXJlIHR5cGVkIG9uIHRoZSBjb21tYW5kCitsaW5lLiAgU28gd2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIGdyZXAgY29tbWFuZCBpcyBydW4gYW5kIHByb2R1Y2VzIGEgbGlzdCBvZgorZmlsZXMsIHRoZXNlIGZpbGVzIGFyZSBwdXQgb24gdGhlIFZpbSBjb21tYW5kIGxpbmUuICBUaGlzIHJlc3VsdHMgaW4gVmltCitlZGl0aW5nIHRoZSBmaWxlIGxpc3QgdGhhdCBpcyB0aGUgb3V0cHV0IG9mIGdyZXAuICBZb3UgY2FuIHRoZW4gdXNlIGNvbW1hbmRzCitsaWtlICI6bmV4dCIgYW5kICI6Zmlyc3QiIHRvIGJyb3dzZSB0aHJvdWdoIHRoZSBmaWxlcy4KKworCitGSU5ESU5HIEVBQ0ggTElORQorCitUaGUgYWJvdmUgY29tbWFuZCBvbmx5IGZpbmRzIHRoZSBmaWxlcyBpbiB3aGljaCB0aGUgd29yZCBpcyBmb3VuZC4gIFlvdSBzdGlsbAoraGF2ZSB0byBmaW5kIHRoZSB3b3JkIHdpdGhpbiB0aGUgZmlsZXMuCisgICBWaW0gaGFzIGEgYnVpbHQtaW4gY29tbWFuZCB0aGF0IHlvdSBjYW4gdXNlIHRvIHNlYXJjaCBhIHNldCBvZiBmaWxlcyBmb3IgYQorZ2l2ZW4gc3RyaW5nLiAgSWYgeW91IHdhbnQgdG8gZmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgImVycm9yX3N0cmluZyIgaW4gYWxsIEMKK3Byb2dyYW0gZmlsZXMsIGZvciBleGFtcGxlLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpncmVwIGVycm9yX3N0cmluZyAqLmMKKworVGhpcyBjYXVzZXMgVmltIHRvIHNlYXJjaCBmb3IgdGhlIHN0cmluZyAiZXJyb3Jfc3RyaW5nIiBpbiBhbGwgdGhlIHNwZWNpZmllZAorZmlsZXMgKCouYykuICBUaGUgZWRpdG9yIHdpbGwgbm93IG9wZW4gdGhlIGZpcnN0IGZpbGUgd2hlcmUgYSBtYXRjaCBpcyBmb3VuZAorYW5kIHBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIGZpcnN0IG1hdGNoaW5nIGxpbmUuICBUbyBnbyB0byB0aGUgbmV4dAorbWF0Y2hpbmcgbGluZSAobm8gbWF0dGVyIGluIHdoYXQgaXQgaXMgZmlsZSksIHVzZSB0aGUgIjpjbmV4dCIgY29tbWFuZC4gIFRvIGdvCit0byB0aGUgcHJldmlvdXMgbWF0Y2gsIHVzZSB0aGUgIjpjcHJldiIgY29tbWFuZC4gIFVzZSAiOmNsaXN0IiB0byBzZWUgYWxsIHRoZQorbWF0Y2hlcyBhbmQgd2hlcmUgdGhleSBhcmUuCisgICBUaGUgIjpncmVwIiBjb21tYW5kIHVzZXMgdGhlIGV4dGVybmFsIGNvbW1hbmRzIGdyZXAgKG9uIFVuaXgpIG9yIGZpbmRzdHIKKyhvbiBXaW5kb3dzKS4gIFlvdSBjYW4gY2hhbmdlIHRoaXMgYnkgc2V0dGluZyB0aGUgb3B0aW9uICdncmVwcHJnJy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8yMC50eHR8ICBUeXBpbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzIHF1aWNrbHkKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMjAudHh0IGIvcnVudGltZS9kb2MvdXNyXzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg5YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzIwLnR4dApAQCAtMCwwICsxLDM4NCBAQAorKnVzcl8yMC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIEFwciAzMAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkgICAgIFR5cGluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMgcXVpY2tseQorCisKK1ZpbSBoYXMgYSBmZXcgZ2VuZXJpYyBmZWF0dXJlcyB0aGF0IG1ha2VzIGl0IGVhc2llciB0byBlbnRlciBjb21tYW5kcy4gIENvbG9uCitjb21tYW5kcyBjYW4gYmUgYWJicmV2aWF0ZWQsIGVkaXRlZCBhbmQgcmVwZWF0ZWQuICBDb21wbGV0aW9uIGlzIGF2YWlsYWJsZSBmb3IKK25lYXJseSBldmVyeXRoaW5nLgorCit8MjAuMXwJQ29tbWFuZCBsaW5lIGVkaXRpbmcKK3wyMC4yfAlDb21tYW5kIGxpbmUgYWJicmV2aWF0aW9ucworfDIwLjN8CUNvbW1hbmQgbGluZSBjb21wbGV0aW9uCit8MjAuNHwJQ29tbWFuZCBsaW5lIGhpc3RvcnkKK3wyMC41fAlDb21tYW5kIGxpbmUgd2luZG93CisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzIxLnR4dHwgIEdvIGF3YXkgYW5kIGNvbWUgYmFjaworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMTIudHh0fCAgQ2xldmVyIHRyaWNrcworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjAuMSoJQ29tbWFuZCBsaW5lIGVkaXRpbmcKKworV2hlbiB5b3UgdXNlIGEgY29sb24gKDopIGNvbW1hbmQgb3Igc2VhcmNoIGZvciBhIHN0cmluZyB3aXRoIC8gb3IgPywgVmltIHB1dHMKK3RoZSBjdXJzb3Igb24gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLiAgVGhlcmUgeW91IHR5cGUgdGhlIGNvbW1hbmQgb3Igc2VhcmNoCitwYXR0ZXJuLiAgVGhpcyBpcyBjYWxsZWQgdGhlIENvbW1hbmQgbGluZS4gIEFsc28gd2hlbiBpdCdzIHVzZWQgZm9yIGVudGVyaW5nIGEKK3NlYXJjaCBjb21tYW5kLgorCitUaGUgbW9zdCBvYnZpb3VzIHdheSB0byBlZGl0IHRoZSBjb21tYW5kIHlvdSB0eXBlIGlzIGJ5IHByZXNzaW5nIHRoZSA8QlM+IGtleS4KK1RoaXMgZXJhc2VzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3IuICBUbyBlcmFzZSBhbm90aGVyIGNoYXJhY3RlciwKK3R5cGVkIGVhcmxpZXIsIGZpcnN0IG1vdmUgdGhlIGN1cnNvciB3aXRoIHRoZSBjdXJzb3Iga2V5cy4KKyAgIEZvciBleGFtcGxlLCB5b3UgaGF2ZSB0eXBlZCB0aGlzOiA+CisKKwk6cy9jb2wvcGlnLworCitCZWZvcmUgeW91IGhpdCA8RW50ZXI+LCB5b3Ugbm90aWNlIHRoYXQgImNvbCIgc2hvdWxkIGJlICJjb3ciLiAgVG8gY29ycmVjdAordGhpcywgeW91IHR5cGUgPExlZnQ+IGZpdmUgdGltZXMuICBUaGUgY3Vyc29yIGlzIG5vdyBqdXN0IGFmdGVyICJjb2wiLiAgVHlwZQorPEJTPiBhbmQgInciIHRvIGNvcnJlY3Q6ID4KKworCTpzL2Nvdy9waWcvCisKK05vdyB5b3UgY2FuIHByZXNzIDxFbnRlcj4gZGlyZWN0bHkuICBZb3UgZG9uJ3QgaGF2ZSB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlCitlbmQgb2YgdGhlIGxpbmUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgY29tbWFuZC4KKworVGhlIG1vc3Qgb2Z0ZW4gdXNlZCBrZXlzIHRvIG1vdmUgYXJvdW5kIGluIHRoZSBjb21tYW5kIGxpbmU6CisKKwk8TGVmdD4JCQlvbmUgY2hhcmFjdGVyIGxlZnQKKwk8UmlnaHQ+CQkJb25lIGNoYXJhY3RlciByaWdodAorCTxTLUxlZnQ+IG9yIDxDLUxlZnQ+CW9uZSB3b3JkIGxlZnQKKwk8Uy1SaWdodD4gb3IgPEMtUmlnaHQ+CW9uZSB3b3JkIHJpZ2h0CisJQ1RSTC1CIG9yIDxIb21lPgl0byBiZWdpbiBvZiBjb21tYW5kIGxpbmUKKwlDVFJMLUUgb3IgPEVuZD4JCXRvIGVuZCBvZiBjb21tYW5kIGxpbmUKKworCU5vdGU6CisJPFMtTGVmdD4gKGN1cnNvciBsZWZ0IGtleSB3aXRoIFNoaWZ0IGtleSBwcmVzc2VkKSBhbmQgPEMtTGVmdD4gKGN1cnNvcgorCWxlZnQga2V5IHdpdGggQ29udHJvbCBwcmVzc2VkKSB3aWxsIG5vdCB3b3JrIG9uIGFsbCBrZXlib2FyZHMuICBTYW1lCisJZm9yIHRoZSBvdGhlciBTaGlmdCBhbmQgQ29udHJvbCBjb21iaW5hdGlvbnMuCisKK1lvdSBjYW4gYWxzbyB1c2UgdGhlIG1vdXNlIHRvIG1vdmUgdGhlIGN1cnNvci4KKworCitERUxFVElORworCitBcyBtZW50aW9uZWQsIDxCUz4gZGVsZXRlcyB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yLiAgVG8gZGVsZXRlIGEgd2hvbGUKK3dvcmQgdXNlIENUUkwtVy4KKworCS90aGUgZmluZSBwaWcgfgorCisJCSAgICAgQ1RSTC1XCisKKwkvdGhlIGZpbmUgfgorCitDVFJMLVUgcmVtb3ZlcyBhbGwgdGV4dCwgdGh1cyBhbGxvd3MgeW91IHRvIHN0YXJ0IGFsbCBvdmVyIGFnYWluLgorCisKK09WRVJTVFJJS0UKKworVGhlIDxJbnNlcnQ+IGtleSB0b2dnbGVzIGJldHdlZW4gaW5zZXJ0aW5nIGNoYXJhY3RlcnMgYW5kIHJlcGxhY2luZyB0aGUKK2V4aXN0aW5nIG9uZXMuICBTdGFydCB3aXRoIHRoaXMgdGV4dDoKKworCS90aGUgZmluZSBwaWcgfgorCitNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mICJmaW5lIiB3aXRoIDxTLUxlZnQ+IHR3aWNlIChvciA8TGVmdD4gZWlnaHQKK3RpbWVzLCBpZiA8Uy1MZWZ0PiBkb2Vzbid0IHdvcmspLiAgTm93IHByZXNzIDxJbnNlcnQ+IHRvIHN3aXRjaCB0byBvdmVyc3RyaWtlCithbmQgdHlwZSAiZ3JlYXQiOgorCisJL3RoZSBncmVhdHBpZyB+CisKK09vcHMsIHdlIGxvc3QgdGhlIHNwYWNlLiAgTm93LCBkb24ndCB1c2UgPEJTPiwgYmVjYXVzZSBpdCB3b3VsZCBkZWxldGUgdGhlCisidCIgKHRoaXMgaXMgZGlmZmVyZW50IGZyb20gUmVwbGFjZSBtb2RlKS4gIEluc3RlYWQsIHByZXNzIDxJbnNlcnQ+IHRvIHN3aXRjaAorZnJvbSBvdmVyc3RyaWtlIHRvIGluc2VydGluZywgYW5kIHR5cGUgdGhlIHNwYWNlOgorCisJL3RoZSBncmVhdCBwaWcgfgorCisKK0NBTkNFTExJTkcKKworWW91IHRob3VnaHQgb2YgZXhlY3V0aW5nIGEgOiBvciAvIGNvbW1hbmQsIGJ1dCBjaGFuZ2VkIHlvdXIgbWluZC4gIFRvIGdldCByaWQKK29mIHdoYXQgeW91IGFscmVhZHkgdHlwZWQsIHdpdGhvdXQgZXhlY3V0aW5nIGl0LCBwcmVzcyBDVFJMLUMgb3IgPEVzYz4uCisKKwlOb3RlOgorCTxFc2M+IGlzIHRoZSB1bml2ZXJzYWwgImdldCBvdXQiIGtleS4gIFVuZm9ydHVuYXRlbHksIGluIHRoZSBnb29kIG9sZAorCVZpIHByZXNzaW5nIDxFc2M+IGluIGEgY29tbWFuZCBsaW5lIGV4ZWN1dGVkIHRoZSBjb21tYW5kISAgU2luY2UgdGhhdAorCW1pZ2h0IGJlIGNvbnNpZGVyZWQgdG8gYmUgYSBidWcsIFZpbSB1c2VzIDxFc2M+IHRvIGNhbmNlbCB0aGUgY29tbWFuZC4KKwlCdXQgd2l0aCB0aGUgJ2Nwb3B0aW9ucycgb3B0aW9uIGl0IGNhbiBiZSBtYWRlIFZpIGNvbXBhdGlibGUuICBBbmQKKwl3aGVuIHVzaW5nIGEgbWFwcGluZyAod2hpY2ggbWlnaHQgYmUgd3JpdHRlbiBmb3IgVmkpIDxFc2M+IGFsc28gd29ya3MKKwlWaSBjb21wYXRpYmxlLiAgVGhlcmVmb3JlLCB1c2luZyBDVFJMLUMgaXMgYSBtZXRob2QgdGhhdCBhbHdheXMgd29ya3MuCisKK0lmIHlvdSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb21tYW5kIGxpbmUsIHByZXNzaW5nIDxCUz4gd2lsbCBjYW5jZWwgdGhlCitjb21tYW5kLiAgSXQncyBsaWtlIGRlbGV0aW5nIHRoZSAiOiIgb3IgIi8iIHRoYXQgdGhlIGxpbmUgc3RhcnRzIHdpdGguCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIwLjIqCUNvbW1hbmQgbGluZSBhYmJyZXZpYXRpb25zCisKK1NvbWUgb2YgdGhlICI6IiBjb21tYW5kcyBhcmUgcmVhbGx5IGxvbmcuICBXZSBhbHJlYWR5IG1lbnRpb25lZCB0aGF0CisiOnN1YnN0aXR1dGUiIGNhbiBiZSBhYmJyZXZpYXRlZCB0byAiOnMiLiAgVGhpcyBpcyBhIGdlbmVyaWMgbWVjaGFuaXNtLCBhbGwKKyI6IiBjb21tYW5kcyBjYW4gYmUgYWJicmV2aWF0ZWQuCisKK0hvdyBzaG9ydCBjYW4gYSBjb21tYW5kIGdldD8gIFRoZXJlIGFyZSAyNiBsZXR0ZXJzLCBhbmQgbWFueSBtb3JlIGNvbW1hbmRzLgorRm9yIGV4YW1wbGUsICI6c2V0IiBhbHNvIHN0YXJ0cyB3aXRoICI6cyIsIGJ1dCAiOnMiIGRvZXNuJ3Qgc3RhcnQgYSAiOnNldCIKK2NvbW1hbmQuICBJbnN0ZWFkICI6c2V0IiBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gIjpzZSIuCisgICBXaGVuIHRoZSBzaG9ydGVyIGZvcm0gb2YgYSBjb21tYW5kIGNvdWxkIGJlIHVzZWQgZm9yIHR3byBjb21tYW5kcywgaXQKK3N0YW5kcyBmb3Igb25seSBvbmUgb2YgdGhlbS4gIFRoZXJlIGlzIG5vIGxvZ2ljIGJlaGluZCB3aGljaCBvbmUsIHlvdSBoYXZlIHRvCitsZWFybiB0aGVtLiAgSW4gdGhlIGhlbHAgZmlsZXMgdGhlIHNob3J0ZXN0IGZvcm0gdGhhdCB3b3JrcyBpcyBtZW50aW9uZWQuICBGb3IKK2V4YW1wbGU6ID4KKworCTpzW3Vic3RpdHV0ZV0KKworVGhpcyBtZWFucyB0aGF0IHRoZSBzaG9ydGVzdCBmb3JtIG9mICI6c3Vic3RpdHV0ZSIgaXMgIjpzIi4gIFRoZSBmb2xsb3dpbmcKK2NoYXJhY3RlcnMgYXJlIG9wdGlvbmFsLiAgVGh1cyAiOnN1IiBhbmQgIjpzdWIiIGFsc28gd29yay4KKworSW4gdGhlIHVzZXIgbWFudWFsIHdlIHdpbGwgZWl0aGVyIHVzZSB0aGUgZnVsbCBuYW1lIG9mIGNvbW1hbmQsIG9yIGEgc2hvcnQKK3ZlcnNpb24gdGhhdCBpcyBzdGlsbCByZWFkYWJsZS4gIEZvciBleGFtcGxlLCAiOmZ1bmN0aW9uIiBjYW4gYmUgYWJicmV2aWF0ZWQKK3RvICI6ZnUiLiAgQnV0IHNpbmNlIG1vc3QgcGVvcGxlIGRvbid0IHVuZGVyc3RhbmQgd2hhdCB0aGF0IHN0YW5kcyBmb3IsIHdlCit3aWxsIHVzZSAiOmZ1biIuICAoVmltIGRvZXNuJ3QgaGF2ZSBhICI6ZnVubnkiIGNvbW1hbmQsIG90aGVyd2lzZSAiOmZ1biIgd291bGQKK2JlIGNvbmZ1c2luZyB0b28uKQorCitJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGluIFZpbSBzY3JpcHRzIHlvdSB3cml0ZSB0aGUgZnVsbCBjb21tYW5kIG5hbWUuICBUaGF0CittYWtlcyBpdCBlYXNpZXIgdG8gcmVhZCBiYWNrIHdoZW4geW91IG1ha2UgbGF0ZXIgY2hhbmdlcy4gIEV4Y2VwdCBmb3Igc29tZQorb2Z0ZW4gdXNlZCBjb21tYW5kcyBsaWtlICI6dyIgKCI6d3JpdGUiKSBhbmQgIjpyIiAoIjpyZWFkIikuCisgICBBIHBhcnRpY3VsYXJseSBjb25mdXNpbmcgb25lIGlzICI6ZW5kIiwgd2hpY2ggY291bGQgc3RhbmQgZm9yICI6ZW5kaWYiLAorIjplbmR3aGlsZSIgb3IgIjplbmRmdW5jdGlvbiIuICBUaGVyZWZvcmUsIGFsd2F5cyB1c2UgdGhlIGZ1bGwgbmFtZS4KKworCitTSE9SVCBPUFRJT04gTkFNRVMKKworSW4gdGhlIHVzZXIgbWFudWFsIHRoZSBsb25nIHZlcnNpb24gb2YgdGhlIG9wdGlvbiBuYW1lcyBpcyB1c2VkLiAgTWFueSBvcHRpb25zCithbHNvIGhhdmUgYSBzaG9ydCBuYW1lLiAgVW5saWtlICI6IiBjb21tYW5kcywgdGhlcmUgaXMgb25seSBvbmUgc2hvcnQgbmFtZQordGhhdCB3b3Jrcy4gIEZvciBleGFtcGxlLCB0aGUgc2hvcnQgbmFtZSBvZiAnYXV0b2luZGVudCcgaXMgJ2FpJy4gIFRodXMgdGhlc2UKK3R3byBjb21tYW5kcyBkbyB0aGUgc2FtZSB0aGluZzogPgorCisJOnNldCBhdXRvaW5kZW50CisJOnNldCBhaQorCitZb3UgY2FuIGZpbmQgdGhlIGZ1bGwgbGlzdCBvZiBsb25nIGFuZCBzaG9ydCBuYW1lcyBoZXJlOiB8b3B0aW9uLWxpc3R8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMC4zKglDb21tYW5kIGxpbmUgY29tcGxldGlvbgorCitUaGlzIGlzIG9uZSBvZiB0aG9zZSBWaW0gZmVhdHVyZXMgdGhhdCwgYnkgaXRzZWxmLCBpcyBhIHJlYXNvbiB0byBzd2l0Y2ggZnJvbQorVmkgdG8gVmltLiAgT25jZSB5b3UgaGF2ZSB1c2VkIHRoaXMsIHlvdSBjYW4ndCBkbyB3aXRob3V0LgorCitTdXBwb3NlIHlvdSBoYXZlIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlc2UgZmlsZXM6CisKKwlpbmZvLnR4dAorCWludHJvLnR4dAorCWJvZHlvZnRoZXBhcGVyLnR4dAorCitUbyBlZGl0IHRoZSBsYXN0IG9uZSwgeW91IHVzZSB0aGUgY29tbWFuZDogPgorCisJOmVkaXQgYm9keW9mdGhlcGFwZXIudHh0CisKK0l0J3MgZWFzeSB0byB0eXBlIHRoaXMgd3JvbmcuICBBIG11Y2ggcXVpY2tlciB3YXkgaXM6ID4KKworCTplZGl0IGI8VGFiPgorCitXaGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgc2FtZSBjb21tYW5kLiAgV2hhdCBoYXBwZW5lZD8gIFRoZSA8VGFiPiBrZXkgZG9lcworY29tcGxldGlvbiBvZiB0aGUgd29yZCBiZWZvcmUgdGhlIGN1cnNvci4gIEluIHRoaXMgY2FzZSAiYiIuICBWaW0gbG9va3MgaW4gdGhlCitkaXJlY3RvcnkgYW5kIGZpbmRzIG9ubHkgb25lIGZpbGUgdGhhdCBzdGFydHMgd2l0aCBhICJiIi4gIFRoYXQgbXVzdCBiZSB0aGUKK29uZSB5b3UgYXJlIGxvb2tpbmcgZm9yLCB0aHVzIFZpbSBjb21wbGV0ZXMgdGhlIGZpbGUgbmFtZSBmb3IgeW91LgorCitOb3cgdHlwZTogPgorCisJOmVkaXQgaTxUYWI+CisKK1ZpbSB3aWxsIGJlZXAsIGFuZCBnaXZlIHlvdTogPgorCisJOmVkaXQgaW5mby50eHQKKworVGhlIGJlZXAgbWVhbnMgdGhhdCBWaW0gaGFzIGZvdW5kIG1vcmUgdGhhbiBvbmUgbWF0Y2guICBJdCB0aGVuIHVzZXMgdGhlIGZpcnN0CittYXRjaCBpdCBmb3VuZCAoYWxwaGFiZXRpY2FsbHkpLiAgSWYgeW91IHByZXNzIDxUYWI+IGFnYWluLCB5b3UgZ2V0OiA+CisKKwk6ZWRpdCBpbnRyby50eHQKKworVGh1cywgaWYgdGhlIGZpcnN0IDxUYWI+IGRvZXNuJ3QgZ2l2ZSB5b3UgdGhlIGZpbGUgeW91IHdlcmUgbG9va2luZyBmb3IsIHByZXNzCitpdCBhZ2Fpbi4gIElmIHRoZXJlIGFyZSBtb3JlIG1hdGNoZXMsIHlvdSB3aWxsIHNlZSB0aGVtIGFsbCwgb25lIGF0IGEgdGltZS4KKyAgIElmIHlvdSBwcmVzcyA8VGFiPiBvbiB0aGUgbGFzdCBtYXRjaGluZyBlbnRyeSwgeW91IHdpbGwgZ28gYmFjayB0byB3aGF0IHlvdQorZmlyc3QgdHlwZWQ6ID4KKworCTplZGl0IGkKKworVGhlbiBpdCBzdGFydHMgYWxsIG92ZXIgYWdhaW4uICBUaHVzIFZpbSBjeWNsZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBtYXRjaGVzLgorVXNlIENUUkwtUCB0byBnbyB0aHJvdWdoIHRoZSBsaXN0IGluIHRoZSBvdGhlciBkaXJlY3Rpb246CisKKwkgICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tLSA8VGFiPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkJCQkJCQkgIHwKKwkJICA8VGFiPiAtLT4JCSAgICAgICA8VGFiPiAtLT4KKwk6ZWRpdCBpCQkgICAgICA6ZWRpdCBpbmZvLnR4dAkJICAgOmVkaXQgaW50cm8udHh0CisJCSAgPC0tIENUUkwtUAkJICAgICAgIDwtLSBDVFJMLVAKKwkgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1RSTC1QIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKworCitDT05URVhUCisKK1doZW4geW91IHR5cGUgIjpzZXQgaSIgaW5zdGVhZCBvZiAiOmVkaXQgaSIgYW5kIHByZXNzIDxUYWI+IHlvdSBnZXQ6ID4KKworCTpzZXQgaWNvbgorCitIZXksIHdoeSBkaWRuJ3QgeW91IGdldCAiOnNldCBpbmZvLnR4dCI/ICBUaGF0J3MgYmVjYXVzZSBWaW0gaGFzIGNvbnRleHQKK3NlbnNpdGl2ZSBjb21wbGV0aW9uLiAgVGhlIGtpbmQgb2Ygd29yZHMgVmltIHdpbGwgbG9vayBmb3IgZGVwZW5kcyBvbiB0aGUKK2NvbW1hbmQgYmVmb3JlIGl0LiAgVmltIGtub3dzIHRoYXQgeW91IGNhbm5vdCB1c2UgYSBmaWxlIG5hbWUganVzdCBhZnRlciBhCisiOnNldCIgY29tbWFuZCwgYnV0IHlvdSBjYW4gdXNlIGFuIG9wdGlvbiBuYW1lLgorICAgQWdhaW4sIGlmIHlvdSByZXBlYXQgdHlwaW5nIHRoZSA8VGFiPiwgVmltIHdpbGwgY3ljbGUgdGhyb3VnaCBhbGwgbWF0Y2hlcy4KK1RoZXJlIGFyZSBxdWl0ZSBhIGZldywgaXQncyBiZXR0ZXIgdG8gdHlwZSBtb3JlIGNoYXJhY3RlcnMgZmlyc3Q6ID4KKworCTpzZXQgaXNrPFRhYj4KKworR2l2ZXM6ID4KKworCTpzZXQgaXNrZXl3b3JkCisKK05vdyB0eXBlICI9IiBhbmQgcHJlc3MgPFRhYj46ID4KKworCTpzZXQgaXNrZXl3b3JkPUAsNDgtNTcsXywxOTItMjU1CisKK1doYXQgaGFwcGVucyBoZXJlIGlzIHRoYXQgVmltIGluc2VydHMgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgb3B0aW9uLiAgTm93IHlvdQorY2FuIGVkaXQgaXQuCisgICBXaGF0IGlzIGNvbXBsZXRlZCB3aXRoIDxUYWI+IGlzIHdoYXQgVmltIGV4cGVjdHMgaW4gdGhhdCBwbGFjZS4gIEp1c3QgdHJ5CitpdCBvdXQgdG8gc2VlIGhvdyBpdCB3b3Jrcy4gIEluIHNvbWUgc2l0dWF0aW9ucyB5b3Ugd2lsbCBub3QgZ2V0IHdoYXQgeW91Cit3YW50LiAgVGhhdCdzIGVpdGhlciBiZWNhdXNlIFZpbSBkb2Vzbid0IGtub3cgd2hhdCB5b3Ugd2FudCwgb3IgYmVjYXVzZQorY29tcGxldGlvbiB3YXMgbm90IGltcGxlbWVudGVkIGZvciB0aGF0IHNpdHVhdGlvbi4gIEluIHRoYXQgY2FzZSB5b3Ugd2lsbCBnZXQKK2EgPFRhYj4gaW5zZXJ0ZWQgKGRpc3BsYXllZCBhcyBeSSkuCisKKworTElTVCBNQVRDSEVTCisKK1doZW4gdGhlcmUgYXJlIG1hbnkgbWF0Y2hlcywgeW91IHdvdWxkIGxpa2UgdG8gc2VlIGFuIG92ZXJ2aWV3LiAgRG8gdGhpcyBieQorcHJlc3NpbmcgQ1RSTC1ELiAgRm9yIGV4YW1wbGUsIHByZXNzaW5nIENUUkwtRCBhZnRlcjogPgorCisJOnNldCBpcworCityZXN1bHRzIGluOiA+CisKKwk6c2V0IGlzCisJaW5jc2VhcmNoICBpc2ZuYW1lICAgIGlzaWRlbnQgICAgaXNrZXl3b3JkICBpc3ByaW50CisJOnNldCBpcworCitWaW0gbGlzdHMgdGhlIG1hdGNoZXMgYW5kIHRoZW4gY29tZXMgYmFjayB3aXRoIHRoZSB0ZXh0IHlvdSB0eXBlZC4gIFlvdSBjYW4KK25vdyBjaGVjayB0aGUgbGlzdCBmb3IgdGhlIGl0ZW0geW91IHdhbnRlZC4gIElmIGl0IGlzbid0IHRoZXJlLCB5b3UgY2FuIHVzZQorPEJTPiB0byBjb3JyZWN0IHRoZSB3b3JkLiAgSWYgdGhlcmUgYXJlIG1hbnkgbWF0Y2hlcywgdHlwZSBhIGZldyBtb3JlCitjaGFyYWN0ZXJzIGJlZm9yZSBwcmVzc2luZyA8VGFiPiB0byBjb21wbGV0ZSB0aGUgcmVzdC4KKyAgIElmIHlvdSBoYXZlIHdhdGNoZWQgY2FyZWZ1bGx5LCB5b3Ugd2lsbCBoYXZlIG5vdGljZWQgdGhhdCAiaW5jc2VhcmNoIgorZG9lc24ndCBzdGFydCB3aXRoICJpcyIuICBJbiB0aGlzIGNhc2UgImlzIiBzdGFuZHMgZm9yIHRoZSBzaG9ydCBuYW1lIG9mCisiaW5jc2VhcmNoIi4gKE1hbnkgb3B0aW9ucyBoYXZlIGEgc2hvcnQgYW5kIGEgbG9uZyBuYW1lLikgIFZpbSBpcyBjbGV2ZXIKK2Vub3VnaCB0byBrbm93IHRoYXQgeW91IG1pZ2h0IGhhdmUgd2FudGVkIHRvIGV4cGFuZCB0aGUgc2hvcnQgbmFtZSBvZiB0aGUKK29wdGlvbiBpbnRvIHRoZSBsb25nIG5hbWUuCisKKworVEhFUkUgSVMgTU9SRQorCitUaGUgQ1RSTC1MIGNvbW1hbmQgY29tcGxldGVzIHRoZSB3b3JkIHRvIHRoZSBsb25nZXN0IHVuYW1iaWd1b3VzIHN0cmluZy4gIElmCit5b3UgdHlwZSAiOmVkaXQgaSIgYW5kIHRoZXJlIGFyZSBmaWxlcyAiaW5mby50eHQiIGFuZCAiaW5mb19iYWNrdXAudHh0IiB5b3UKK3dpbGwgZ2V0ICI6ZWRpdCBpbmZvIi4KKworVGhlICd3aWxkbW9kZScgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgd2F5IGNvbXBsZXRpb24gd29ya3MuCitUaGUgJ3dpbGRtZW51JyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gZ2V0IGEgbWVudS1saWtlIGxpc3Qgb2YgbWF0Y2hlcy4KK1VzZSB0aGUgJ3N1ZmZpeGVzJyBvcHRpb24gdG8gc3BlY2lmeSBmaWxlcyB0aGF0IGFyZSBsZXNzIGltcG9ydGFudCBhbmQgYXBwZWFyCithdCB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIGZpbGVzLgorVGhlICd3aWxkaWdub3JlJyBvcHRpb24gc3BlY2lmaWVzIGZpbGVzIHRoYXQgYXJlIG5vdCBsaXN0ZWQgYXQgYWxsLgorCitNb3JlIGFib3V0IGFsbCBvZiB0aGlzIGhlcmU6IHxjbWRsaW5lLWNvbXBsZXRpb258CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIwLjQqCUNvbW1hbmQgbGluZSBoaXN0b3J5CisKK0luIGNoYXB0ZXIgMyB3ZSBicmllZmx5IG1lbnRpb25lZCB0aGUgaGlzdG9yeS4gIFRoZSBiYXNpY3MgYXJlIHRoYXQgeW91IGNhbgordXNlIHRoZSA8VXA+IGtleSB0byByZWNhbGwgYW4gb2xkZXIgY29tbWFuZCBsaW5lLiAgPERvd24+IHRoZW4gdGFrZXMgeW91IGJhY2sKK3RvIG5ld2VyIGNvbW1hbmRzLgorCitUaGVyZSBhcmUgYWN0dWFsbHkgZm91ciBoaXN0b3JpZXMuICBUaGUgb25lcyB3ZSB3aWxsIG1lbnRpb24gaGVyZSBhcmUgZm9yICI6IgorY29tbWFuZHMgYW5kIGZvciAiLyIgYW5kICI/IiBzZWFyY2ggY29tbWFuZHMuICBUaGUgIi8iIGFuZCAiPyIgY29tbWFuZHMgc2hhcmUKK3RoZSBzYW1lIGhpc3RvcnksIGJlY2F1c2UgdGhleSBhcmUgYm90aCBzZWFyY2ggY29tbWFuZHMuICBUaGUgdHdvIG90aGVyCitoaXN0b3JpZXMgYXJlIGZvciBleHByZXNzaW9ucyBhbmQgaW5wdXQgbGluZXMgZm9yIHRoZSBpbnB1dCgpIGZ1bmN0aW9uLgorfGNtZGxpbmUtaGlzdG9yeXwKKworU3VwcG9zZSB5b3UgaGF2ZSBkb25lIGEgIjpzZXQiIGNvbW1hbmQsIHR5cGVkIHRlbiBtb3JlIGNvbG9uIGNvbW1hbmRzIGFuZCB0aGVuCit3YW50IHRvIHJlcGVhdCB0aGF0ICI6c2V0IiBjb21tYW5kIGFnYWluLiAgWW91IGNvdWxkIHByZXNzICI6IiBhbmQgdGhlbiB0ZW4KK3RpbWVzIDxVcD4uICBUaGVyZSBpcyBhIHF1aWNrZXIgd2F5OiA+CisKKwk6c2U8VXA+CisKK1ZpbSB3aWxsIG5vdyBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBjb21tYW5kIHRoYXQgc3RhcnRlZCB3aXRoICJzZSIuICBZb3UgaGF2ZQorYSBnb29kIGNoYW5jZSB0aGF0IHRoaXMgaXMgdGhlICI6c2V0IiBjb21tYW5kIHlvdSB3ZXJlIGxvb2tpbmcgZm9yLiAgQXQgbGVhc3QKK3lvdSBzaG91bGQgbm90IGhhdmUgdG8gcHJlc3MgPFVwPiB2ZXJ5IG9mdGVuICh1bmxlc3MgIjpzZXQiIGNvbW1hbmRzIGlzIGFsbAoreW91IGhhdmUgZG9uZSkuCisKK1RoZSA8VXA+IGtleSB3aWxsIHVzZSB0aGUgdGV4dCB0eXBlZCBzbyBmYXIgYW5kIGNvbXBhcmUgaXQgd2l0aCB0aGUgbGluZXMgaW4KK3RoZSBoaXN0b3J5LiAgT25seSBtYXRjaGluZyBsaW5lcyB3aWxsIGJlIHVzZWQuCisgICBJZiB5b3UgZG8gbm90IGZpbmQgdGhlIGxpbmUgeW91IHdlcmUgbG9va2luZyBmb3IsIHVzZSA8RG93bj4gdG8gZ28gYmFjayB0bword2hhdCB5b3UgdHlwZWQgYW5kIGNvcnJlY3QgdGhhdC4gIE9yIHVzZSBDVFJMLVUgdG8gc3RhcnQgYWxsIG92ZXIgYWdhaW4uCisKK1RvIHNlZSBhbGwgdGhlIGxpbmVzIGluIHRoZSBoaXN0b3J5OiA+CisKKwk6aGlzdG9yeQorCitUaGF0J3MgdGhlIGhpc3Rvcnkgb2YgIjoiIGNvbW1hbmRzLiAgVGhlIHNlYXJjaCBoaXN0b3J5IGlzIGRpc3BsYXllZCB3aXRoIHRoaXMKK2NvbW1hbmQ6ID4KKworCTpoaXN0b3J5IC8KKworQ1RSTC1QIHdpbGwgd29yayBsaWtlIDxVcD4sIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgeW91IGFscmVhZHkKK3R5cGVkLiAgU2ltaWxhcmx5IGZvciBDVFJMLU4gYW5kIDxEb3duPi4gIENUUkwtUCBzdGFuZHMgZm9yIHByZXZpb3VzLCBDVFJMLU4KK2ZvciBuZXh0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMC41KglDb21tYW5kIGxpbmUgd2luZG93CisKK1R5cGluZyB0aGUgdGV4dCBpbiB0aGUgY29tbWFuZCBsaW5lIHdvcmtzIGRpZmZlcmVudCBmcm9tIHR5cGluZyB0ZXh0IGluIEluc2VydAorbW9kZS4gIEl0IGRvZXNuJ3QgYWxsb3cgbWFueSBjb21tYW5kcyB0byBjaGFuZ2UgdGhlIHRleHQuICBGb3IgbW9zdCBjb21tYW5kcwordGhhdCdzIE9LLCBidXQgc29tZXRpbWVzIHlvdSBoYXZlIHRvIHR5cGUgYSBjb21wbGljYXRlZCBjb21tYW5kLiAgVGhhdCdzIHdoZXJlCit0aGUgY29tbWFuZCBsaW5lIHdpbmRvdyBpcyB1c2VmdWwuCisKK09wZW4gdGhlIGNvbW1hbmQgbGluZSB3aW5kb3cgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKworCXE6CisKK1ZpbSBub3cgb3BlbnMgYSAoc21hbGwpIHdpbmRvdyBhdCB0aGUgYm90dG9tLiAgSXQgY29udGFpbnMgdGhlIGNvbW1hbmQgbGluZQoraGlzdG9yeSwgYW5kIGFuIGVtcHR5IGxpbmUgYXQgdGhlIGVuZDoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxvdGhlciB3aW5kb3cJCQkgICAgICB8CisJfH4JCQkJICAgICAgfAorCXxmaWxlLnR4dD09PT09PT09PT09PT09PT09PT09PT09PT09PT09fAorCXw6ZSBjCQkJCSAgICAgIHwKKwl8OmUgY29uZmlnLmguaW4JCQkgICAgICB8CisJfDpzZXQgcGF0aD0uLC91c3IvaW5jbHVkZSwsCSAgICAgIHwKKwl8OnNldCBpc2tleXdvcmQ9QCw0OC01NyxfLDE5Mi0yNTUgICAgIHwKKwl8OnNldCBpcwkJCSAgICAgIHwKKwl8OnEJCQkJICAgICAgfAorCXw6CQkJCSAgICAgIHwKKwl8Y29tbWFuZC1saW5lPT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8CQkJCSAgICAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworWW91IGFyZSBub3cgaW4gTm9ybWFsIG1vZGUuICBZb3UgY2FuIHVzZSB0aGUgImhqa2wiIGtleXMgdG8gbW92ZSBhcm91bmQuICBGb3IKK2V4YW1wbGUsIG1vdmUgdXAgd2l0aCAiNWsiIHRvIHRoZSAiOmUgY29uZmlnLmguaW4iIGxpbmUuICBUeXBlICIkaCIgdG8gZ28gdG8KK3RoZSAiaSIgb2YgImluIiBhbmQgdHlwZSAiY3dvdXQiLiAgTm93IHlvdSBoYXZlIGNoYW5nZWQgdGhlIGxpbmUgdG86CisKKwk6ZSBjb25maWcuaC5vdXQgfgorCitOb3cgcHJlc3MgPEVudGVyPiBhbmQgdGhpcyBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQuICBUaGUgY29tbWFuZCBsaW5lIHdpbmRvdword2lsbCBjbG9zZS4KKyAgIFRoZSA8RW50ZXI+IGNvbW1hbmQgd2lsbCBleGVjdXRlIHRoZSBsaW5lIHVuZGVyIHRoZSBjdXJzb3IuICBJdCBkb2Vzbid0CittYXR0ZXIgd2hldGhlciBWaW0gaXMgaW4gSW5zZXJ0IG1vZGUgb3IgaW4gTm9ybWFsIG1vZGUuCisgICBDaGFuZ2VzIGluIHRoZSBjb21tYW5kIGxpbmUgd2luZG93IGFyZSBsb3N0LiAgVGhleSBkbyBub3QgcmVzdWx0IGluIHRoZQoraGlzdG9yeSB0byBiZSBjaGFuZ2VkLiAgRXhjZXB0IHRoYXQgdGhlIGNvbW1hbmQgeW91IGV4ZWN1dGUgd2lsbCBiZSBhZGRlZCB0bwordGhlIGVuZCBvZiB0aGUgaGlzdG9yeSwgbGlrZSB3aXRoIGFsbCBleGVjdXRlZCBjb21tYW5kcy4KKworVGhlIGNvbW1hbmQgbGluZSB3aW5kb3cgaXMgdmVyeSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBoYXZlIG92ZXJ2aWV3IG9mIHRoZQoraGlzdG9yeSwgbG9va3VwIGEgc2ltaWxhciBjb21tYW5kLCBjaGFuZ2UgaXQgYSBiaXQgYW5kIGV4ZWN1dGUgaXQuICBBIHNlYXJjaAorY29tbWFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHNvbWV0aGluZy4KKyAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlIHRoZSAiP2NvbmZpZyIgc2VhcmNoIGNvbW1hbmQgY291bGQgaGF2ZSBiZWVuIHVzZWQKK3RvIGZpbmQgdGhlIHByZXZpb3VzIGNvbW1hbmQgdGhhdCBjb250YWlucyAiY29uZmlnIi4gIEl0J3MgYSBiaXQgc3RyYW5nZSwKK2JlY2F1c2UgeW91IGFyZSB1c2luZyBhIGNvbW1hbmQgbGluZSB0byBzZWFyY2ggaW4gdGhlIGNvbW1hbmQgbGluZSB3aW5kb3cuCitXaGlsZSB0eXBpbmcgdGhhdCBzZWFyY2ggY29tbWFuZCB5b3UgY2FuJ3Qgb3BlbiBhbm90aGVyIGNvbW1hbmQgbGluZSB3aW5kb3csCit0aGVyZSBjYW4gYmUgb25seSBvbmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjEudHh0fCAgR28gYXdheSBhbmQgY29tZSBiYWNrCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzIxLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3N2IxMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yMS50eHQKQEAgLTAsMCArMSw0NTYgQEAKKyp1c3JfMjEudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXIgMjkKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgIEdvIGF3YXkgYW5kIGNvbWUgYmFjaworCisKK1RoaXMgY2hhcHRlciBnb2VzIGludG8gbWl4aW5nIHRoZSB1c2Ugb2Ygb3RoZXIgcHJvZ3JhbXMgd2l0aCBWaW0uICBFaXRoZXIgYnkKK2V4ZWN1dGluZyBwcm9ncmFtIGZyb20gaW5zaWRlIFZpbSBvciBieSBsZWF2aW5nIFZpbSBhbmQgY29taW5nIGJhY2sgbGF0ZXIuCitGdXJ0aGVybW9yZSwgdGhpcyBpcyBhYm91dCB0aGUgd2F5cyB0byByZW1lbWJlciB0aGUgc3RhdGUgb2YgVmltIGFuZCByZXN0b3JlCitpdCBsYXRlci4KKworfDIxLjF8CVN1c3BlbmQgYW5kIHJlc3VtZQorfDIxLjJ8CUV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcworfDIxLjN8CVJlbWVtYmVyaW5nIGluZm9ybWF0aW9uOyB2aW1pbmZvCit8MjEuNHwJU2Vzc2lvbnMKK3wyMS41fAlWaWV3cworfDIxLjZ8CU1vZGVsaW5lcworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8yMi50eHR8ICBGaW5kaW5nIHRoZSBmaWxlIHRvIGVkaXQKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzIwLnR4dHwgIFR5cGluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMgcXVpY2tseQorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjEuMSoJU3VzcGVuZCBhbmQgcmVzdW1lCisKK0xpa2UgbW9zdCBVbml4IHByb2dyYW1zIFZpbSBjYW4gYmUgc3VzcGVuZGVkIGJ5IHByZXNzaW5nIENUUkwtWi4gIFRoaXMgc3RvcHMKK1ZpbSBhbmQgdGFrZXMgeW91IGJhY2sgdG8gdGhlIHNoZWxsIGl0IHdhcyBzdGFydGVkIGluLiAgWW91IGNhbiB0aGVuIGRvIGFueQorb3RoZXIgY29tbWFuZHMgdW50aWwgeW91IGFyZSBib3JlZCB3aXRoIHRoZW0uICBUaGVuIGJyaW5nIGJhY2sgVmltIHdpdGggdGhlCisiZmciIGNvbW1hbmQuID4KKworCUNUUkwtWgorCXthbnkgc2VxdWVuY2Ugb2Ygc2hlbGwgY29tbWFuZHN9CisJZmcKKworWW91IGFyZSByaWdodCBiYWNrIHdoZXJlIHlvdSBsZWZ0IFZpbSwgbm90aGluZyBoYXMgY2hhbmdlZC4KKyAgIEluIGNhc2UgcHJlc3NpbmcgQ1RSTC1aIGRvZXNuJ3Qgd29yaywgeW91IGNhbiBhbHNvIHVzZSAiOnN1c3BlbmQiLgorRG9uJ3QgZm9yZ2V0IHRvIGJyaW5nIFZpbSBiYWNrIHRvIHRoZSBmb3JlZ3JvdW5kLCB5b3Ugd291bGQgbG9zZSBhbnkgY2hhbmdlcwordGhhdCB5b3UgbWFkZSEKKworT25seSBVbml4IGhhcyBzdXBwb3J0IGZvciB0aGlzLiAgT24gb3RoZXIgc3lzdGVtcyBWaW0gd2lsbCBzdGFydCBhIHNoZWxsIGZvcgoreW91LiAgVGhpcyBhbHNvIGhhcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBiZWluZyBhYmxlIHRvIGV4ZWN1dGUgc2hlbGwgY29tbWFuZHMuCitCdXQgaXQncyBhIG5ldyBzaGVsbCwgbm90IHRoZSBvbmUgdGhhdCB5b3Ugc3RhcnRlZCBWaW0gZnJvbS4KKyAgIFdoZW4geW91IGFyZSBydW5uaW5nIHRoZSBHVUkgeW91IGNhbid0IGdvIGJhY2sgdG8gdGhlIHNoZWxsIHdoZXJlIFZpbSB3YXMKK3N0YXJ0ZWQuICBDVFJMLVogd2lsbCBtaW5pbWl6ZSB0aGUgVmltIHdpbmRvdyBpbnN0ZWFkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMS4yKglFeGVjdXRpbmcgc2hlbGwgY29tbWFuZHMKKworVG8gZXhlY3V0ZSBhIHNpbmdsZSBzaGVsbCBjb21tYW5kIGZyb20gVmltIHVzZSAiOiF7Y29tbWFuZH0iLiAgRm9yIGV4YW1wbGUsIHRvCitzZWUgYSBkaXJlY3RvcnkgbGlzdGluZzogPgorCisJOiFscworCTohZGlyCisKK1RoZSBmaXJzdCBvbmUgaXMgZm9yIFVuaXgsIHRoZSBzZWNvbmQgb25lIGZvciBNUy1XaW5kb3dzLgorICAgVmltIHdpbGwgZXhlY3V0ZSB0aGUgcHJvZ3JhbS4gIFdoZW4gaXQgZW5kcyB5b3Ugd2lsbCBnZXQgYSBwcm9tcHQgdG8gaGl0Cis8RW50ZXI+LiAgVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgYSBsb29rIGF0IHRoZSBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZCBiZWZvcmUKK3JldHVybmluZyB0byB0aGUgdGV4dCB5b3Ugd2VyZSBlZGl0aW5nLgorICAgVGhlICIhIiBpcyBhbHNvIHVzZWQgaW4gb3RoZXIgcGxhY2VzIHdoZXJlIGEgcHJvZ3JhbSBpcyBydW4uICBMZXQncyB0YWtlCithIGxvb2sgYXQgYW4gb3ZlcnZpZXc6CisKKwk6IXtwcm9ncmFtfQkJZXhlY3V0ZSB7cHJvZ3JhbX0KKwk6ciAhe3Byb2dyYW19CQlleGVjdXRlIHtwcm9ncmFtfSBhbmQgcmVhZCBpdHMgb3V0cHV0CisJOncgIXtwcm9ncmFtfQkJZXhlY3V0ZSB7cHJvZ3JhbX0gYW5kIHNlbmQgdGV4dCB0byBpdHMgaW5wdXQKKwk6W3JhbmdlXSF7cHJvZ3JhbX0JZmlsdGVyIHRleHQgdGhyb3VnaCB7cHJvZ3JhbX0KKworTm90aWNlIHRoYXQgdGhlIHByZWNlbnNlIG9mIGEgcmFuZ2UgYmVmb3JlICIhe3Byb2dyYW19IiBtYWtlcyBhIGJpZworZGlmZmVyZW5jZS4gIFdpdGhvdXQgaXQgZXhlY3V0ZXMgdGhlIHByb2dyYW0gbm9ybWFsbHksIHdpdGggdGhlIHJhbmdlIGEgbnVtYmVyCitvZiB0ZXh0IGxpbmVzIGlzIGZpbHRlcmVkIHRocm91Z2ggdGhlIHByb2dyYW0uCisKK0V4ZWN1dGluZyBhIHdob2xlIHJvdyBvZiBwcm9ncmFtcyB0aGlzIHdheSBpcyBwb3NzaWJsZS4gIEJ1dCBhIHNoZWxsIGlzIG11Y2gKK2JldHRlciBhdCBpdC4gIFlvdSBjYW4gc3RhcnQgYSBuZXcgc2hlbGwgdGhpcyB3YXk6ID4KKworCTpzaGVsbAorCitUaGlzIGlzIHNpbWlsYXIgdG8gdXNpbmcgQ1RSTC1aIHRvIHN1c3BlbmQgVmltLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBhIG5ldworc2hlbGwgaXMgc3RhcnRlZC4KKworV2hlbiB1c2luZyB0aGUgR1VJIHRoZSBzaGVsbCB3aWxsIGJlIHVzaW5nIHRoZSBWaW0gd2luZG93IGZvciBpdHMgaW5wdXQgYW5kCitvdXRwdXQuICBTaW5jZSBWaW0gaXMgbm90IGEgdGVybWluYWwgZW11bGF0b3IsIHRoaXMgd2lsbCBub3Qgd29yayBwZXJmZWN0bHkuCitJZiB5b3UgaGF2ZSB0cm91YmxlLCB0cnkgdG9nZ2xpbmcgdGhlICdndWlwdHknIG9wdGlvbi4gIElmIHRoaXMgc3RpbGwgZG9lc24ndAord29yayB3ZWxsIGVub3VnaCwgc3RhcnQgYSBuZXcgdGVybWluYWwgdG8gcnVuIHRoZSBzaGVsbCBpbi4gIEZvciBleGFtcGxlIHdpdGg6Cis+CisJOiF4dGVybSYKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjEuMyoJUmVtZW1iZXJpbmcgaW5mb3JtYXRpb247IHZpbWluZm8KKworQWZ0ZXIgZWRpdGluZyBmb3IgYSB3aGlsZSB5b3Ugd2lsbCBoYXZlIHRleHQgaW4gcmVnaXN0ZXJzLCBtYXJrcyBpbiB2YXJpb3VzCitmaWxlcywgYSBjb21tYW5kIGxpbmUgaGlzdG9yeSBmaWxsZWQgd2l0aCBjYXJlZnVsbHkgY3JhZnRlZCBjb21tYW5kcy4gIFdoZW4KK3lvdSBleGl0IFZpbSBhbGwgb2YgdGhpcyBpcyBsb3N0LiAgQnV0IHlvdSBjYW4gZ2V0IGl0IGJhY2shCisKK1RoZSB2aW1pbmZvIGZpbGUgaXMgZGVzaWduZWQgdG8gc3RvcmUgc3RhdHVzIGluZm9ybWF0aW9uOgorCisJQ29tbWFuZC1saW5lIGFuZCBTZWFyY2ggcGF0dGVybiBoaXN0b3J5CisJVGV4dCBpbiByZWdpc3RlcnMKKwlNYXJrcyBmb3IgdmFyaW91cyBmaWxlcworCVRoZSBidWZmZXIgbGlzdAorCUdsb2JhbCB2YXJpYWJsZXMKKworRWFjaCB0aW1lIHlvdSBleGl0IFZpbSBpdCB3aWxsIHN0b3JlIHRoaXMgaW5mb3JtYXRpb24gaW4gYSBmaWxlLCB0aGUgdmltaW5mbworZmlsZS4gIFdoZW4gVmltIHN0YXJ0cyBhZ2FpbiwgdGhlIHZpbWluZm8gZmlsZSBpcyByZWFkIGFuZCB0aGUgaW5mb3JtYXRpb24KK3Jlc3RvcmVkLgorCitUaGUgJ3ZpbWluZm8nIG9wdGlvbiBpcyBzZXQgYnkgZGVmYXVsdCB0byByZXN0b3JlIGEgbGltaXRlZCBudW1iZXIgb2YgaXRlbXMuCitZb3UgbWlnaHQgd2FudCB0byBzZXQgaXQgdG8gcmVtZW1iZXIgbW9yZSBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgZG9uZSB0aHJvdWdoCit0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzZXQgdmltaW5mbz1zdHJpbmcKKworVGhlIHN0cmluZyBzcGVjaWZpZXMgd2hhdCB0byBzYXZlLiAgVGhlIHN5bnRheCBvZiB0aGlzIHN0cmluZyBpcyBhbiBvcHRpb24KK2NoYXJhY3RlciBmb2xsb3dlZCBieSBhbiBhcmd1bWVudC4gIFRoZSBvcHRpb24vYXJndW1lbnQgcGFpcnMgYXJlIHNlcGFyYXRlZCBieQorY29tbWFzLgorICAgVGFrZSBhIGxvb2sgYXQgaG93IHlvdSBjYW4gYnVpbGQgdXAgeW91ciBvd24gdmltaW5mbyBzdHJpbmcuICBGaXJzdCwgdGhlICcKK29wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgaG93IG1hbnkgZmlsZXMgZm9yIHdoaWNoIHlvdSBzYXZlIG1hcmtzIChhLXopLiAgUGljaworYSBuaWNlIGV2ZW4gbnVtYmVyIGZvciB0aGlzIG9wdGlvbiAoMTAwMCwgZm9yIGluc3RhbmNlKS4gIFlvdXIgY29tbWFuZCBub3cKK2xvb2tzIGxpa2UgdGhpczogPgorCisJOnNldCB2aW1pbmZvPScxMDAwCisKK1RoZSBmIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIGdsb2JhbCBtYXJrcyAoQS1aIGFuZCAwLTkpIGFyZSBzdG9yZWQuICBJZiB0aGlzCitvcHRpb24gaXMgMCwgbm9uZSBhcmUgc3RvcmVkLiBJZiBpdCBpcyAxIG9yIHlvdSBkbyBub3Qgc3BlY2lmeSBhbiBmIG9wdGlvbiwKK3RoZSBtYXJrcyBhcmUgc3RvcmVkLiAgWW91IHdhbnQgdGhpcyBmZWF0dXJlLCBzbyBub3cgeW91IGhhdmUgdGhpczogPgorCisJOnNldCB2aW1pbmZvPScxMDAwLGYxCisKK1RoZSA8IG9wdGlvbiBjb250cm9scyBob3cgbWFueSBsaW5lcyBhcmUgc2F2ZWQgZm9yIGVhY2ggb2YgdGhlIHJlZ2lzdGVycy4gIEJ5CitkZWZhdWx0LCBhbGwgdGhlIGxpbmVzIGFyZSBzYXZlZC4gIElmIDAsIG5vdGhpbmcgaXMgc2F2ZWQuICBUbyBhdm9pZCBhZGRpbmcKK3Rob3VzYW5kcyBvZiBsaW5lcyB0byB5b3VyIHZpbWluZm8gZmlsZSAod2hpY2ggbWlnaHQgbmV2ZXIgZ2V0IHVzZWQgYW5kIG1ha2VzCitzdGFydGluZyBWaW0gc2xvd2VyKSB5b3UgdXNlIGEgbWF4aW11bSBvZiA1MDAgbGluZXM6ID4KKworCTpzZXQgdmltaW5mbz0nMTAwMCxmMSw8NTAwCis8CitPdGhlciBvcHRpb25zIHlvdSBtaWdodCB3YW50IHRvIHVzZToKKwk6CW51bWJlciBvZiBsaW5lcyB0byBzYXZlIGZyb20gdGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5CisJQAludW1iZXIgb2YgbGluZXMgdG8gc2F2ZSBmcm9tIHRoZSBpbnB1dCBsaW5lIGhpc3RvcnkKKwkvCW51bWJlciBvZiBsaW5lcyB0byBzYXZlIGZyb20gdGhlIHNlYXJjaCBoaXN0b3J5CisJcglyZW1vdmFibGUgbWVkaWEsIGZvciB3aGljaCBubyBtYXJrcyB3aWxsIGJlIHN0b3JlZCAoY2FuIGJlCisJCXVzZWQgc2V2ZXJhbCB0aW1lcykKKwkhCWdsb2JhbCB2YXJpYWJsZXMgdGhhdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIgYW5kCisJCWRvbid0IGNvbnRhaW4gbG93ZXJjYXNlIGxldHRlcnMKKwloCWRpc2FibGUgJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgd2hlbiBzdGFydGluZworCSUJdGhlIGJ1ZmZlciBsaXN0IChvbmx5IHJlc3RvcmVkIHdoZW4gc3RhcnRpbmcgVmltIHdpdGhvdXQgZmlsZQorCQlhcmd1bWVudHMpCisJYwljb252ZXJ0IHRoZSB0ZXh0IHVzaW5nICdlbmNvZGluZycKKwluCW5hbWUgdXNlZCBmb3IgdGhlIHZpbWluZm8gZmlsZSAobXVzdCBiZSB0aGUgbGFzdCBvcHRpb24pCisKK1NlZSB0aGUgJ3ZpbWluZm8nIG9wdGlvbiBhbmQgfHZpbWluZm8tZmlsZXwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1doZW4geW91IHJ1biBWaW0gbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9uZSBleGl0aW5nIHdpbGwgc3RvcmUgaXRzCitpbmZvcm1hdGlvbi4gIFRoaXMgbWF5IGNhdXNlIGluZm9ybWF0aW9uIHRoYXQgcHJldmlvdXNseSBleGl0aW5nIFZpbXMgc3RvcmVkCit0byBiZSBsb3N0LiAgRWFjaCBpdGVtIGNhbiBiZSByZW1lbWJlcmVkIG9ubHkgb25jZS4KKworCitHRVRUSU5HIEJBQ0sgVE8gV0hFUkUgWU9VIFdFUkUKKworWW91IGFyZSBoYWxmd2F5IGVkaXRpbmcgYSBmaWxlIGFuZCBpdCdzIHRpbWUgdG8gbGVhdmUgZm9yIGhvbGlkYXlzLiAgWW91IGV4aXQKK1ZpbSBhbmQgZ28gZW5qb3kgeW91cnNlbHZlcywgZm9yZ2V0dGluZyBhbGwgYWJvdXQgeW91ciB3b3JrLiAgQWZ0ZXIgYSBjb3VwbGUKK29mIHdlZWtzIHlvdSBzdGFydCBWaW0sIGFuZCB0eXBlOgorPgorCScwCisKK0FuZCB5b3UgYXJlIHJpZ2h0IGJhY2sgd2hlcmUgeW91IGxlZnQgVmltLiAgU28geW91IGNhbiBnZXQgb24gd2l0aCB5b3VyIHdvcmsuCisgICBWaW0gY3JlYXRlcyBhIG1hcmsgZWFjaCB0aW1lIHlvdSBleGl0IFZpbS4gIFRoZSBsYXN0IG9uZSBpcyAnMC4gIFRoZQorcG9zaXRpb24gdGhhdCAnMCBwb2ludGVkIHRvIGlzIG1hZGUgJzEuICBBbmQgJzEgaXMgbWFkZSB0byAnMiwgYW5kIHNvIGZvcnRoLgorTWFyayAnOSBpcyBsb3N0LgorICAgVGhlICI6bWFya3MiIGNvbW1hbmQgaXMgdXNlZnVsIHRvIGZpbmQgb3V0IHdoZXJlICcwIHRvICc5IHdpbGwgdGFrZSB5b3UuCisKKworTU9WRSBJTkZPIEZST00gT05FIFZJTSBUTyBBTk9USEVSCisKK1lvdSBjYW4gdXNlIHRoZSAiOnd2aW1pbmZvIiBhbmQgIjpydmltaW5mbyIgY29tbWFuZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKK2luZm9ybWF0aW9uIHdoaWxlIHN0aWxsIHJ1bm5pbmcgVmltLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGV4Y2hhbmdpbmcgcmVnaXN0ZXIKK2NvbnRlbnRzIGJldHdlZW4gdHdvIGluc3RhbmNlcyBvZiBWaW0sIGZvciBleGFtcGxlLiAgSW4gdGhlIGZpcnN0IFZpbSBkbzogPgorCisJOnd2aW1pbmZvISB+L3RtcC92aW1pbmZvCisKK0FuZCBpbiB0aGUgc2Vjb25kIFZpbSBkbzogPgorCisJOnJ2aW1pbmZvISB+L3RtcC92aW1pbmZvCisKK09idmlvdXNseSwgdGhlICJ3IiBzdGFuZHMgZm9yICJ3cml0ZSIgYW5kIHRoZSAiciIgZm9yICJyZWFkIi4KKyAgIFRoZSAhIGNoYXJhY3RlciBpcyB1c2VkIGJ5ICI6d3ZpbWluZm8iIHRvIGZvcmNlZnVsbHkgb3ZlcndyaXRlIGFuIGV4aXN0aW5nCitmaWxlLiAgV2hlbiBpdCBpcyBvbWl0dGVkLCBhbmQgdGhlIGZpbGUgZXhpc3RzLCB0aGUgaW5mb3JtYXRpb24gaXMgbWVyZ2VkIGludG8KK3RoZSBmaWxlLgorICAgVGhlICEgY2hhcmFjdGVyIHVzZWQgZm9yICI6cnZpbWluZm8iIG1lYW5zIHRoYXQgYWxsIHRoZSBpbmZvcm1hdGlvbiBpcwordXNlZCwgdGhpcyBtYXkgb3ZlcndyaXRlIGV4aXN0aW5nIGluZm9ybWF0aW9uLiAgV2l0aG91dCB0aGUgISBvbmx5IGluZm9ybWF0aW9uCit0aGF0IHdhc24ndCBzZXQgaXMgdXNlZC4KKyAgIFRoZXNlIGNvbW1hbmRzIGNhbiBhbHNvIGJlIHVzZWQgdG8gc3RvcmUgaW5mbyBhbmQgdXNlIGl0IGFnYWluIGxhdGVyLiAgWW91Citjb3VsZCBtYWtlIGEgZGlyZWN0b3J5IGZ1bGwgb2YgdmltaW5mbyBmaWxlcywgZWFjaCBjb250YWluaW5nIGluZm8gZm9yIGEKK2RpZmZlcmVudCBwdXJwb3NlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMS40KglTZXNzaW9ucworCitTdXBwb3NlIHlvdSBhcmUgZWRpdGluZyBhbG9uZywgYW5kIGl0IGlzIHRoZSBlbmQgb2YgdGhlIGRheS4gIFlvdSB3YW50IHRvIHF1aXQKK3dvcmsgYW5kIHBpY2sgdXAgd2hlcmUgeW91IGxlZnQgb2ZmIHRoZSBuZXh0IGRheS4gIFlvdSBjYW4gZG8gdGhpcyBieSBzYXZpbmcKK3lvdXIgZWRpdGluZyBzZXNzaW9uIGFuZCByZXN0b3JpbmcgaXQgdGhlIG5leHQgZGF5LgorICAgQSBWaW0gc2Vzc2lvbiBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgeW91IGFyZSBlZGl0aW5nLgorVGhpcyBpbmNsdWRlcyB0aGluZ3Mgc3VjaCBhcyB0aGUgZmlsZSBsaXN0LCB3aW5kb3cgbGF5b3V0LCBnbG9iYWwgdmFyaWFibGVzLAorb3B0aW9ucyBhbmQgb3RoZXIgaW5mb3JtYXRpb24uIChFeGFjdGx5IHdoYXQgaXMgcmVtZW1iZXJlZCBpcyBjb250cm9sbGVkIGJ5Cit0aGUgJ3Nlc3Npb25vcHRpb25zJyBvcHRpb24sIGRlc2NyaWJlZCBiZWxvdy4pCisgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgY3JlYXRlcyBhIHNlc3Npb24gZmlsZTogPgorCisJOm1rc2Vzc2lvbiB2aW1ib29rLnZpbQorCitMYXRlciBpZiB5b3Ugd2FudCB0byByZXN0b3JlIHRoaXMgc2Vzc2lvbiwgeW91IGNhbiB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6c291cmNlIHZpbWJvb2sudmltCisKK0lmIHlvdSB3YW50IHRvIHN0YXJ0IFZpbSBhbmQgcmVzdG9yZSBhIHNwZWNpZmljIHNlc3Npb24sIHlvdSBjYW4gdXNlIHRoZQorZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCXZpbSAtUyB2aW1ib29rLnZpbQorCitUaGlzIHRlbGxzIFZpbSB0byByZWFkIGEgc3BlY2lmaWMgZmlsZSBvbiBzdGFydHVwLiAgVGhlICdTJyBzdGFuZHMgZm9yCitzZXNzaW9uIChhY3R1YWxseSwgeW91IGNhbiBzb3VyY2UgYW55IFZpbSBzY3JpcHQgd2l0aCAtUywgdGh1cyBpdCBtaWdodCBhcword2VsbCBzdGFuZCBmb3IgInNvdXJjZSIpLgorCitUaGUgd2luZG93cyB0aGF0IHdlcmUgb3BlbiBhcmUgcmVzdG9yZWQsIHdpdGggdGhlIHNhbWUgcG9zaXRpb24gYW5kIHNpemUgYXMKK2JlZm9yZS4gIE1hcHBpbmdzIGFuZCBvcHRpb24gdmFsdWVzIGFyZSBsaWtlIGJlZm9yZS4KKyAgIFdoYXQgZXhhY3RseSBpcyByZXN0b3JlZCBkZXBlbmRzIG9uIHRoZSAnc2Vzc2lvbm9wdGlvbnMnIG9wdGlvbi4gIFRoZQorZGVmYXVsdCB2YWx1ZSBpcyAiYmxhbmssYnVmZmVycyxjdXJkaXIsZm9sZHMsaGVscCxvcHRpb25zLHdpbnNpemUiLgorCisJYmxhbmsJCWtlZXAgZW1wdHkgd2luZG93cworCWJ1ZmZlcnMJCWFsbCBidWZmZXJzLCBub3Qgb25seSB0aGUgb25lcyBpbiBhIHdpbmRvdworCWN1cmRpcgkJdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJZm9sZHMJCWZvbGRzLCBhbHNvIG1hbnVhbGx5IGNyZWF0ZWQgb25lcworCWhlbHAJCXRoZSBoZWxwIHdpbmRvdworCW9wdGlvbnMJCWFsbCBvcHRpb25zIGFuZCBtYXBwaW5ncworCXdpbnNpemUJCXdpbmRvdyBzaXplcworCitDaGFuZ2UgdGhpcyB0byB5b3VyIGxpa2luZy4gIFRvIGFsc28gcmVzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgVmltIHdpbmRvdywgZm9yCitleGFtcGxlLCB1c2U6ID4KKworCTpzZXQgc2Vzc2lvbm9wdGlvbnMrPXJlc2l6ZQorCisKK1NFU1NJT04gSEVSRSwgU0VTU0lPTiBUSEVSRQorCitUaGUgb2J2aW91cyB3YXkgdG8gdXNlIHNlc3Npb25zIGlzIHdoZW4gd29ya2luZyBvbiBkaWZmZXJlbnQgcHJvamVjdHMuCitTdXBwb3NlIHlvdSBzdG9yZSB5b3Ugc2Vzc2lvbiBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5ICJ+Ly52aW0iLiAgWW91IGFyZQorY3VycmVudGx5IHdvcmtpbmcgb24gdGhlICJzZWNyZXQiIHByb2plY3QgYW5kIGhhdmUgdG8gc3dpdGNoIHRvIHRoZSAiYm9yaW5nIgorcHJvamVjdDogPgorCisJOndhbGwKKwk6bWtzZXNzaW9uISB+Ly52aW0vc2VjcmV0LnZpbQorCTpzb3VyY2Ugfi8udmltL2JvcmluZy52aW0KKworVGhpcyBmaXJzdCB1c2VzICI6d2FsbCIgdG8gd3JpdGUgYWxsIG1vZGlmaWVkIGZpbGVzLiAgVGhlbiB0aGUgY3VycmVudCBzZXNzaW9uCitpcyBzYXZlZCwgdXNpbmcgIjpta3Nlc3Npb24hIi4gIFRoaXMgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgc2Vzc2lvbi4gIFRoZQorbmV4dCB0aW1lIHlvdSBsb2FkIHRoZSBzZWNyZXQgc2Vzc2lvbiB5b3UgY2FuIGNvbnRpbnVlIHdoZXJlIHlvdSB3ZXJlIGF0IHRoaXMKK3BvaW50LiAgQW5kIGZpbmFsbHkgeW91IGxvYWQgdGhlIG5ldyAiYm9yaW5nIiBzZXNzaW9uLgorCitJZiB5b3Ugb3BlbiBoZWxwIHdpbmRvd3MsIHNwbGl0IGFuZCBjbG9zZSB2YXJpb3VzIHdpbmRvdywgYW5kIGdlbmVyYWxseSBtZXNzCit1cCB0aGUgd2luZG93IGxheW91dCwgeW91IGNhbiBnbyBiYWNrIHRvIHRoZSBsYXN0IHNhdmVkIHNlc3Npb246ID4KKworCTpzb3VyY2Ugfi8udmltL2JvcmluZy52aW0KKworVGh1cyB5b3UgaGF2ZSBjb21wbGV0ZSBjb250cm9sIG92ZXIgd2hldGhlciB5b3Ugd2FudCB0byBjb250aW51ZSBuZXh0IHRpbWUKK3doZXJlIHlvdSBhcmUgbm93LCBieSBzYXZpbmcgdGhlIGN1cnJlbnQgc2V0dXAgaW4gYSBzZXNzaW9uLCBvciBrZWVwIHRoZQorc2Vzc2lvbiBmaWxlIGFzIGEgc3RhcnRpbmcgcG9pbnQuCisgICBBbm90aGVyIHdheSBvZiB1c2luZyBzZXNzaW9ucyBpcyB0byBjcmVhdGUgYSB3aW5kb3cgbGF5b3V0IHRoYXQgeW91IGxpa2UgdG8KK3VzZSwgYW5kIHNhdmUgdGhpcyBpbiBhIHNlc3Npb24uICBUaGVuIHlvdSBjYW4gZ28gYmFjayB0byB0aGlzIGxheW91dCB3aGVuZXZlcgoreW91IHdhbnQuCisgICBGb3IgZXhhbXBsZSwgdGhpcyBpcyBhIG5pY2UgbGF5b3V0IHRvIHVzZToKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwJCSAgIFZJTSAtIG1haW4gaGVscCBmaWxlICB8CisJfAkJCQkJIHwKKwl8TW92ZSBhcm91bmQ6ICBVc2UgdGhlIGN1cnNvciBrZXlzLCBvciAiaHwKKwl8aGVscC50eHQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXwKKwl8ZXhwbG9yZXIgICB8CQkJCSB8CisJfGRpcgkgICAgfH4JCQkJIHwKKwl8ZGlyCSAgICB8fgkJCQkgfAorCXxmaWxlCSAgICB8fgkJCQkgfAorCXxmaWxlCSAgICB8fgkJCQkgfAorCXxmaWxlCSAgICB8fgkJCQkgfAorCXxmaWxlCSAgICB8fgkJCQkgfAorCXx+Lz09PT09PT09PXxbTm8gRmlsZV09PT09PT09PT09PT09PT09PT09fAorCXwJCQkJCSB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoaXMgaGFzIGEgaGVscCB3aW5kb3cgYXQgdGhlIHRvcCwgc28gdGhhdCB5b3UgY2FuIHJlYWQgdGhpcyB0ZXh0LiAgVGhlIG5hcnJvdwordmVydGljYWwgd2luZG93IG9uIHRoZSBsZWZ0IGNvbnRhaW5zIGEgZmlsZSBleHBsb3Jlci4gIFRoaXMgaXMgYSBWaW0gcGx1Z2luCit0aGF0IGxpc3RzIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeS4gIFlvdSBjYW4gc2VsZWN0IGZpbGVzIHRvIGVkaXQgdGhlcmUuCitNb3JlIGFib3V0IHRoaXMgaW4gdGhlIG5leHQgY2hhcHRlci4KKyAgIENyZWF0ZSB0aGlzIGZyb20gYSBqdXN0IHN0YXJ0ZWQgVmltIHdpdGg6ID4KKworCTpoZWxwCisJQ1RSTC1XIHcKKwk6dmVydGljYWwgc3BsaXQgfi8KKworWW91IGNhbiByZXNpemUgdGhlIHdpbmRvd3MgYSBiaXQgdG8geW91ciBsaWtpbmcuICBUaGVuIHNhdmUgdGhlIHNlc3Npb24gd2l0aDoKKz4KKwk6bWtzZXNzaW9uIH4vLnZpbS9taW5lLnZpbQorCitOb3cgeW91IGNhbiBzdGFydCBWaW0gd2l0aCB0aGlzIGxheW91dDogPgorCisJdmltIC1TIH4vLnZpbS9taW5lLnZpbQorCitIaW50OiBUbyBvcGVuIGEgZmlsZSB5b3Ugc2VlIGxpc3RlZCBpbiB0aGUgZXhwbG9yZXIgd2luZG93IGluIHRoZSBlbXB0eQord2luZG93LCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpbGVuYW1lIGFuZCBwcmVzcyAiTyIuICBEb3VibGUgY2xpY2tpbmcgd2l0aAordGhlIG1vdXNlIHdpbGwgYWxzbyBkbyB0aGlzLgorCisKK1VOSVggQU5EIE1TLVdJTkRPV1MKKworU29tZSBwZW9wbGUgaGF2ZSB0byBkbyB3b3JrIG9uIE1TLVdpbmRvd3Mgc3lzdGVtcyBvbmUgZGF5IGFuZCBvbiBVbml4IGFub3RoZXIKK2RheS4gIElmIHlvdSBhcmUgb25lIG9mIHRoZW0sIGNvbnNpZGVyIGFkZGluZyAic2xhc2giIGFuZCAidW5peCIgdG8KKydzZXNzaW9ub3B0aW9ucycuICBUaGUgc2Vzc2lvbiBmaWxlcyB3aWxsIHRoZW4gYmUgd3JpdHRlbiBpbiBhIGZvcm1hdCB0aGF0IGNhbgorYmUgdXNlZCBvbiBib3RoIHN5c3RlbXMuICBUaGlzIGlzIHRoZSBjb21tYW5kIHRvIHB1dCBpbiB5b3VyIHZpbXJjIGZpbGU6ID4KKworCTpzZXQgc2Vzc2lvbm9wdGlvbnMrPXVuaXgsc2xhc2gKKworVmltIHdpbGwgdXNlIHRoZSBVbml4IGZvcm1hdCB0aGVuLCBiZWNhdXNlIHRoZSBNUy1XaW5kb3dzIFZpbSBjYW4gcmVhZCBhbmQKK3dyaXRlIFVuaXggZmlsZXMsIGJ1dCBVbml4IFZpbSBjYW4ndCByZWFkIE1TLVdpbmRvd3MgZm9ybWF0IHNlc3Npb24gZmlsZXMuCitTaW1pbGFybHksIE1TLVdpbmRvd3MgVmltIHVuZGVyc3RhbmRzIGZpbGUgbmFtZXMgd2l0aCAvIHRvIHNlcGFyYXRlIG5hbWVzLCBidXQKK1VuaXggVmltIGRvZXNuJ3QgdW5kZXJzdGFuZCBcLgorCisKK1NFU1NJT05TIEFORCBWSU1JTkZPCisKK1Nlc3Npb25zIHN0b3JlIG1hbnkgdGhpbmdzLCBidXQgbm90IHRoZSBwb3NpdGlvbiBvZiBtYXJrcywgY29udGVudHMgb2YKK3JlZ2lzdGVycyBhbmQgdGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5LiAgWW91IG5lZWQgdG8gdXNlIHRoZSB2aW1pbmZvIGZlYXR1cmUKK2ZvciB0aGVzZSB0aGluZ3MuCisgICBJbiBtb3N0IHNpdHVhdGlvbnMgeW91IHdpbGwgd2FudCB0byB1c2Ugc2Vzc2lvbnMgc2VwYXJhdGVseSBmcm9tIHZpbWluZm8uCitUaGlzIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB0byBhbm90aGVyIHNlc3Npb24sIGJ1dCBrZWVwIHRoZSBjb21tYW5kIGxpbmUKK2hpc3RvcnkuICBBbmQgeWFuayB0ZXh0IGludG8gcmVnaXN0ZXJzIGluIG9uZSBzZXNzaW9uLCBhbmQgcGFzdGUgaXQgYmFjayBpbgorYW5vdGhlciBzZXNzaW9uLgorICAgWW91IG1pZ2h0IHByZWZlciB0byBrZWVwIHRoZSBpbmZvIHdpdGggdGhlIHNlc3Npb24uICBZb3Ugd2lsbCBoYXZlIHRvIGRvCit0aGlzIHlvdXJzZWxmIHRoZW4uICBFeGFtcGxlOiA+CisKKwk6bWtzZXNzaW9uISB+Ly52aW0vc2VjcmV0LnZpbQorCTp3dmltaW5mbyEgfi8udmltL3NlY3JldC52aW1pbmZvCisKK0FuZCB0byByZXN0b3JlIHRoaXMgYWdhaW46ID4KKworCTpzb3VyY2Ugfi8udmltL3NlY3JldC52aW0KKwk6cnZpbWluZm8hIH4vLnZpbS9zZWNyZXQudmltaW5mbworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMS41KglWaWV3cworCitBIHNlc3Npb24gc3RvcmVzIHRoZSBsb29rcyBvZiB0aGUgd2hvbGUgb2YgVmltLiAgV2hlbiB5b3Ugd2FudCB0byBzdG9yZSB0aGUKK3Byb3BlcnRpZXMgZm9yIG9uZSB3aW5kb3cgb25seSwgdXNlIGEgdmlldy4KKyAgIFRoZSB1c2Ugb2YgYSB2aWV3IGlzIGZvciB3aGVuIHlvdSB3YW50IHRvIGVkaXQgYSBmaWxlIGluIGEgc3BlY2lmaWMgd2F5LgorRm9yIGV4YW1wbGUsIHlvdSBoYXZlIGxpbmUgbnVtYmVycyBlbmFibGVkIHdpdGggdGhlICdudW1iZXInIG9wdGlvbiBhbmQKK2RlZmluZWQgYSBmZXcgZm9sZHMuICBKdXN0IGxpa2Ugd2l0aCBzZXNzaW9ucywgeW91IGNhbiByZW1lbWJlciB0aGlzIHZpZXcgb24KK3RoZSBmaWxlIGFuZCByZXN0b3JlIGl0IGxhdGVyLiAgQWN0dWFsbHksIHdoZW4geW91IHN0b3JlIGEgc2Vzc2lvbiwgaXQgc3RvcmVzCit0aGUgdmlldyBvZiBlYWNoIHdpbmRvdy4KKyAgIFRoZXJlIGFyZSB0d28gYmFzaWMgd2F5cyB0byB1c2Ugdmlld3MuICBUaGUgZmlyc3QgaXMgdG8gbGV0IFZpbSBwaWNrIGEgbmFtZQorZm9yIHRoZSB2aWV3IGZpbGUuICBZb3UgY2FuIHJlc3RvcmUgdGhlIHZpZXcgd2hlbiB5b3UgbGF0ZXIgZWRpdCB0aGUgc2FtZQorZmlsZS4gIFRvIHN0b3JlIHRoZSB2aWV3IGZvciB0aGUgY3VycmVudCB3aW5kb3c6ID4KKworCTpta3ZpZXcKKworVmltIHdpbGwgZGVjaWRlIHdoZXJlIHRvIHN0b3JlIHRoZSB2aWV3LiAgV2hlbiB5b3UgbGF0ZXIgZWRpdCB0aGUgc2FtZSBmaWxlCit5b3UgZ2V0IHRoZSB2aWV3IGJhY2sgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKworCTpsb2FkdmlldworCitUaGF0J3MgZWFzeSwgaXNuJ3QgaXQ/CisgICBOb3cgeW91IHdhbnQgdG8gdmlldyB0aGUgZmlsZSB3aXRob3V0IHRoZSAnbnVtYmVyJyBvcHRpb24gb24sIG9yIHdpdGggYWxsCitmb2xkcyBvcGVuLCB5b3UgY2FuIHNldCB0aGUgb3B0aW9ucyB0byBtYWtlIHRoZSB3aW5kb3cgbG9vayB0aGF0IHdheS4gIFRoZW4KK3N0b3JlIHRoaXMgdmlldyB3aXRoOiA+CisKKwk6bWt2aWV3IDEKKworT2J2aW91c2x5LCB5b3UgY2FuIGdldCB0aGlzIGJhY2sgd2l0aDogPgorCisJOmxvYWR2aWV3IDEKKworTm93IHlvdSBjYW4gc3dpdGNoIGJldHdlZW4gdGhlIHR3byB2aWV3cyBvbiB0aGUgZmlsZSBieSB1c2luZyAiOmxvYWR2aWV3IiB3aXRoCithbmQgd2l0aG91dCB0aGUgIjEiIGFyZ3VtZW50LgorICAgWW91IGNhbiBzdG9yZSB1cCB0byB0ZW4gdmlld3MgZm9yIHRoZSBzYW1lIGZpbGUgdGhpcyB3YXksIG9uZSB1bm51bWJlcmVkCithbmQgbmluZSBudW1iZXJlZCAxIHRvIDkuCisKKworQSBWSUVXIFdJVEggQSBOQU1FCisKK1RoZSBzZWNvbmQgYmFzaWMgd2F5IHRvIHVzZSB2aWV3cyBpcyBieSBzdG9yaW5nIHRoZSB2aWV3IGluIGEgZmlsZSB3aXRoIGEgbmFtZQoreW91IGNob3NlLiAgVGhpcyB2aWV3IGNhbiBiZSBsb2FkZWQgd2hpbGUgZWRpdGluZyBhbm90aGVyIGZpbGUuICBWaW0gd2lsbCB0aGVuCitzd2l0Y2ggdG8gZWRpdGluZyB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlIHZpZXcuICBUaHVzIHlvdSBjYW4gdXNlIHRoaXMgdG8KK3F1aWNrbHkgc3dpdGNoIHRvIGVkaXRpbmcgYW5vdGhlciBmaWxlLCB3aXRoIGFsbCBpdHMgb3B0aW9ucyBzZXQgYXMgeW91IHNhdmVkCit0aGVtLgorICAgRm9yIGV4YW1wbGUsIHRvIHNhdmUgdGhlIHZpZXcgb2YgdGhlIGN1cnJlbnQgZmlsZTogPgorCisJOm1rdmlldyB+Ly52aW0vbWFpbi52aW0KKworWW91IGNhbiByZXN0b3JlIGl0IHdpdGg6ID4KKworCTpzb3VyY2Ugfi8udmltL21haW4udmltCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIxLjYqCU1vZGVsaW5lcworCitXaGVuIGVkaXRpbmcgYSBzcGVjaWZpYyBmaWxlLCB5b3UgbWlnaHQgc2V0IG9wdGlvbnMgc3BlY2lmaWNhbGx5IGZvciB0aGF0CitmaWxlLiAgVHlwaW5nIHRoZXNlIGNvbW1hbmRzIGVhY2ggdGltZSBpcyBib3JpbmcuICBVc2luZyBhIHNlc3Npb24gb3IgdmlldyBmb3IKK2VkaXRpbmcgYSBmaWxlIGRvZXNuJ3Qgd29yayB3aGVuIHNoYXJpbmcgdGhlIGZpbGUgYmV0d2VlbiBzZXZlcmFsIHBlb3BsZS4KKyAgIFRoZSBzb2x1dGlvbiBmb3IgdGhpcyBzaXR1YXRpb24gaXMgYWRkaW5nIGEgbW9kZWxpbmUgdG8gdGhlIGZpbGUuICBUaGlzIGlzCithIGxpbmUgb2YgdGV4dCB0aGF0IHRlbGxzIFZpbSB0aGUgdmFsdWVzIG9mIG9wdGlvbnMsIHRvIGJlIHVzZWQgaW4gdGhpcyBmaWxlCitvbmx5LgorICAgQSB0eXBpY2FsIGV4YW1wbGUgaXMgYSBDIHByb2dyYW0gd2hlcmUgeW91IG1ha2UgaW5kZW50cyBieSBhIG11bHRpcGxlIG9mIDQKK3NwYWNlcy4gIFRoaXMgcmVxdWlyZXMgc2V0dGluZyB0aGUgJ3NoaWZ0d2lkdGgnIG9wdGlvbiB0byA0LiAgVGhpcyBtb2RlbGluZQord2lsbCBkbyB0aGF0OgorCisJLyogdmltOnNldCBzaGlmdHdpZHRoPTQ6ICovIH4KKworUHV0IHRoaXMgbGluZSBhcyBvbmUgb2YgdGhlIGZpcnN0IG9yIGxhc3QgZml2ZSBsaW5lcyBpbiB0aGUgZmlsZS4gIFdoZW4KK2VkaXRpbmcgdGhlIGZpbGUsIHlvdSB3aWxsIG5vdGljZSB0aGF0ICdzaGlmdHdpZHRoJyB3aWxsIGhhdmUgYmVlbiBzZXQgdG8KK2ZvdXIuICBXaGVuIGVkaXRpbmcgYW5vdGhlciBmaWxlLCBpdCdzIHNldCBiYWNrIHRvIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGVpZ2h0LgorICAgRm9yIHNvbWUgZmlsZXMgdGhlIG1vZGVsaW5lIGZpdHMgd2VsbCBpbiB0aGUgaGVhZGVyLCB0aHVzIGl0IGNhbiBiZSBwdXQgYXQKK3RoZSB0b3Agb2YgdGhlIGZpbGUuICBGb3IgdGV4dCBmaWxlcyBhbmQgb3RoZXIgZmlsZXMgd2hlcmUgdGhlIG1vZGVsaW5lIGdldHMKK2luIHRoZSB3YXkgb2YgdGhlIG5vcm1hbCBjb250ZW50cywgcHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisKK1RoZSAnbW9kZWxpbmVzJyBvcHRpb24gc3BlY2lmaWVzIGhvdyBtYW55IGxpbmVzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZQorZmlsZSBhcmUgaW5zcGVjdGVkIGZvciBjb250YWluaW5nIGEgbW9kZWxpbmUuICBUbyBpbnNwZWN0IHRlbiBsaW5lczogPgorCisJOnNldCBtb2RlbGluZXM9MTAKKworVGhlICdtb2RlbGluZScgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB0aGlzIG9mZi4gIERvIHRoaXMgd2hlbiB5b3UgYXJlCit3b3JraW5nIGFzIHJvb3Qgb3IgZG9uJ3QgdHJ1c3QgdGhlIGZpbGVzIHlvdSBhcmUgZWRpdGluZzogPgorCisJOnNldCBub21vZGVsaW5lCisKK1VzZSB0aGlzIGZvcm1hdCBmb3IgdGhlIG1vZGVsaW5lOgorCisJYW55LXRleHQgdmltOnNldCB7b3B0aW9ufT17dmFsdWV9IC4uLiA6IGFueS10ZXh0IH4KKworVGhlICJhbnktdGV4dCIgaW5kaWNhdGVzIHRoYXQgeW91IGNhbiBwdXQgYW55IHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcGFydAordGhhdCBWaW0gd2lsbCB1c2UuICBUaGlzIGFsbG93cyBtYWtpbmcgaXQgbG9vayBsaWtlIGEgY29tbWVudCwgbGlrZSB3aGF0IHdhcworZG9uZSBhYm92ZSB3aXRoIC8qIGFuZCAqLy4KKyAgIFRoZSAiIHZpbToiIHBhcnQgaXMgd2hhdCBtYWtlcyBWaW0gcmVjb2duaXplIHRoaXMgbGluZS4gIFRoZSBtdXN0IGJlIHdoaXRlCitzcGFjZSBiZWZvcmUgInZpbSIsIG9yICJ2aW0iIG11c3QgYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiAgVGh1cyB1c2luZworc29tZXRoaW5nIGxpa2UgImd2aW06IiB3aWxsIG5vdCB3b3JrLgorICAgVGhlIHBhcnQgYmV0d2VlbiB0aGUgY29sb25zIGlzIGEgIjpzZXQiIGNvbW1hbmQuICBJdCB3b3JrcyB0aGUgc2FtZSB3YXkgYXMKK3R5cGluZyB0aGUgIjpzZXQiIGNvbW1hbmQsIGV4Y2VwdCB0aGF0IHlvdSBuZWVkIHRvIGluc2VydCBhIGJhY2tzbGFzaCBiZWZvcmUgYQorY29sb24gKG90aGVyd2lzZSBpdCB3b3VsZCBiZSBzZWVuIGFzIHRoZSBlbmQgb2YgdGhlIG1vZGVsaW5lKS4KKworQW5vdGhlciBleGFtcGxlOgorCisJLy8gdmltOnNldCB0ZXh0d2lkdGg9NzIgZGlyPWNcOlx0bXA6ICB1c2UgYzpcdG1wIGhlcmUgfgorCitUaGVyZSBpcyBhbiBleHRyYSBiYWNrc2xhc2ggYmVmb3JlIHRoZSBmaXJzdCBjb2xvbiwgc28gdGhhdCBpdCdzIGluY2x1ZGVkIGluCit0aGUgIjpzZXQiIGNvbW1hbmQuICBUaGUgdGV4dCBhZnRlciB0aGUgc2Vjb25kIGNvbG9uIGlzIGlnbm9yZWQsIHRodXMgYSByZW1hcmsKK2NhbiBiZSBwbGFjZWQgdGhlcmUuCisKK0ZvciBtb3JlIGRldGFpbHMgc2VlIHxtb2RlbGluZXwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjIudHh0fCAgRmluZGluZyB0aGUgZmlsZSB0byBlZGl0CisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzIyLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1NWNiMwotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yMi50eHQKQEAgLTAsMCArMSwzNjQgQEAKKyp1c3JfMjIudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBNYXIgMTcKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgIEZpbmRpbmcgdGhlIGZpbGUgdG8gZWRpdAorCisKK0ZpbGVzIGNhbiBiZSBmb3VuZCBldmVyeXdoZXJlLiAgU28gaG93IGRvIHlvdSBmaW5kIHRoZW0/ICBWaW0gb2ZmZXJzIHZhcmlvdXMKK3dheXMgdG8gYnJvd3NlIHRoZSBkaXJlY3RvcnkgdHJlZS4gIFRoZXJlIGFyZSBjb21tYW5kcyB0byBqdW1wIHRvIGEgZmlsZSB0aGF0CitpcyBtZW50aW9uZWQgaW4gYW5vdGhlci4gIEFuZCBWaW0gcmVtZW1iZXJzIHdoaWNoIGZpbGVzIGhhdmUgYmVlbiBlZGl0ZWQKK2JlZm9yZS4KKworfDIyLjF8CVRoZSBmaWxlIGV4cGxvcmVyCit8MjIuMnwJVGhlIGN1cnJlbnQgZGlyZWN0b3J5Cit8MjIuM3wJRmluZGluZyBhIGZpbGUKK3wyMi40fAlUaGUgYnVmZmVyIGxpc3QKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjMudHh0fCAgRWRpdGluZyBvdGhlciBmaWxlcworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMjEudHh0fCAgR28gYXdheSBhbmQgY29tZSBiYWNrCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMi4xKglUaGUgZmlsZSBleHBsb3JlcgorCitWaW0gaGFzIGEgcGx1Z2luIHRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gZWRpdCBhIGRpcmVjdG9yeS4gIFRyeSB0aGlzOiA+CisKKwk6ZWRpdCAuCisKK1Rocm91Z2ggdGhlIG1hZ2ljIG9mIGF1dG9jb21tYW5kcyBhbmQgVmltIHNjcmlwdHMsIHRoZSB3aW5kb3cgd2lsbCBiZSBmaWxsZWQKK3dpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RvcnkuICBJdCBsb29rcyBsaWtlIHRoaXM6CisKKwkiIFByZXNzID8gZm9yIGtleWJvYXJkIHNob3J0Y3V0cyB+CisJIiBTb3J0ZWQgYnkgbmFtZSAoLmJhayx+LC5vLC5oLC5pbmZvLC5zd3AsLm9iaiwub3JpZywucmVqIGF0IGVuZCBvZiBsaXN0KSB+CisJIj0gL2hvbWUvbW9vbC92aW0vdmltNi9ydW50aW1lL2RvYy8gfgorCS4uLyB+CisJY2hlY2svIH4KKwlNYWtlZmlsZSB+CisJYXV0b2NtZC50eHQgfgorCWNoYW5nZS50eHQgfgorCWV2YWwudHh0fiB+CisJZmlsZXR5cGUudHh0fiB+CisJaGVscC50eHQuaW5mbyB+CisKK1lvdSBjYW4gc2VlIHRoZXNlIGl0ZW1zOgorMS4gIEEgY29tbWVudCBhYm91dCB1c2luZyA/IHRvIGdldCBoZWxwIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZmlsZQorICAgIGV4cGxvcmVyLgorMi4gIFRoZSBzZWNvbmQgbGluZSBtZW50aW9ucyBob3cgdGhlIGl0ZW1zIGluIHRoZSBkaXJlY3RvcnkgYXJlIGxpc3RlZC4gIFRoZXkKKyAgICBjYW4gYmUgc29ydGVkIGluIHNldmVyYWwgd2F5cy4KKzMuICBUaGUgdGhpcmQgbGluZSBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCis0LiAgVGhlICIuLi8iIGRpcmVjdG9yeSBpdGVtLiAgVGhpcyBpcyB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKzUuICBUaGUgZGlyZWN0b3J5IG5hbWVzLgorNi4gIFRoZSBvcmRpbmFyeSBmaWxlIG5hbWVzLiAgQXMgbWVudGlvbmVkIGluIHRoZSBzZWNvbmQgbGluZSwgc29tZSBhcmUgbm90CisgICAgaGVyZSBidXQgImF0IHRoZSBlbmQgb2YgdGhlIGxpc3QiLgorNy4gIFRoZSBsZXNzIG9yZGluYXJ5IGZpbGUgbmFtZXMuICBZb3UgYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGVzZSBsZXNzIG9mdGVuLAorICAgIHRoZXJlZm9yZSB0aGV5IGhhdmUgYmVlbiBtb3ZlZCB0byB0aGUgZW5kLgorCitJZiB5b3UgaGF2ZSBzeW50YXggaGlnaGxpZ2h0aW5nIGVuYWJsZWQsIHRoZSBkaWZmZXJlbnQgcGFydHMgYXJlIGhpZ2hsaWdodGVkCit0byBtYWtlIGl0IGVhc2llciB0byBzcG90IHRoZW0uCisKK1lvdSBjYW4gdXNlIE5vcm1hbCBtb2RlIFZpbSBjb21tYW5kcyB0byBtb3ZlIGFyb3VuZCBpbiB0aGUgdGV4dC4gIEZvciBleGFtcGxlLAorbW92ZSB0byBhIGZpbGUgYW5kIHByZXNzIDxFbnRlcj4uICBOb3cgeW91IGFyZSBlZGl0aW5nIHRoYXQgZmlsZS4gIFRvIGdvIGJhY2sKK3RvIHRoZSBleHBsb3JlciB1c2UgIjplZGl0IC4iIGFnYWluLiAgQ1RSTC1PIGFsc28gd29ya3MuCisgICBUcnkgdXNpbmcgPEVudGVyPiB3aGlsZSB0aGUgY3Vyc29yIGlzIG9uIGEgZGlyZWN0b3J5IG5hbWUuICBUaGUgcmVzdWx0IGlzCit0aGF0IHRoZSBleHBsb3JlciBtb3ZlcyBpbnRvIHRoYXQgZGlyZWN0b3J5IGFuZCBkaXNwbGF5cyB0aGUgaXRlbXMgZm91bmQKK3RoZXJlLiAgUHJlc3NpbmcgPEVudGVyPiBvbiB0aGUgZmlyc3QgZGlyZWN0b3J5ICIuLi8iIG1vdmVzIHlvdSBvbmUgbGV2ZWwKK2hpZ2hlci4gIFByZXNzaW5nICItIiBkb2VzIHRoZSBzYW1lIHRoaW5nLCB3aXRob3V0IHRoZSBuZWVkIHRvIG1vdmUgdG8gdGhlCisiLi4vIiBpdGVtIGZpcnN0LgorCitZb3UgY2FuIHByZXNzID8gdG8gZ2V0IHNob3J0IGhlbHAgb24gdGhlIHRoaW5ncyB5b3UgY2FuIGRvIGluIHRoZSBleHBsb3Jlci4KK1RoaXMgaXMgd2hhdCB5b3UgZ2V0OgorCisJIiA8ZW50ZXI+IDogb3BlbiBmaWxlIG9yIGRpcmVjdG9yeSB+CisJIiBvIDogb3BlbiBuZXcgd2luZG93IGZvciBmaWxlL2RpcmVjdG9yeSB+CisJIiBPIDogb3BlbiBmaWxlIGluIHByZXZpb3VzbHkgdmlzaXRlZCB3aW5kb3cgfgorCSIgcCA6IHByZXZpZXcgdGhlIGZpbGUgfgorCSIgaSA6IHRvZ2dsZSBzaXplL2RhdGUgbGlzdGluZyB+CisJIiBzIDogc2VsZWN0IHNvcnQgZmllbGQgICAgciA6IHJldmVyc2Ugc29ydCB+CisJIiAtIDogZ28gdXAgb25lIGxldmVsICAgICAgYyA6IGNkIHRvIHRoaXMgZGlyIH4KKwkiIFIgOiByZW5hbWUgZmlsZQkgICBEIDogZGVsZXRlIGZpbGUgfgorCSIgOmhlbHAgZmlsZS1leHBsb3JlciBmb3IgZGV0YWlsZWQgaGVscCB+CisKK1RoZSBmaXJzdCBmZXcgY29tbWFuZHMgYXJlIGZvciBzZWxlY3RpbmcgYSBmaWxlIHRvIGRpc3BsYXkuICBEZXBlbmRpbmcgb24gd2hhdAorY29tbWFuZCB5b3UgdXNlLCB0aGUgZmlsZSBhcHBlYXJzIHNvbWV3aGVyZToKKworCTxFbnRlcj4JCVVzZXMgdGhlIGN1cnJlbnQgd2luZG93LgorCW8JCU9wZW5zIGEgbmV3IHdpbmRvdy4KKwlPCQlVc2VzIHRoZSBwcmV2aW91c2x5IHZpc2l0ZWQgd2luZG93LgorCXAJCVVzZXMgdGhlIHByZXZpZXcgd2luZG93LCBhbmQgbW92ZXMgdGhlIGN1cnNvciBiYWNrCisJCQlpbnRvIHRoZSBleHBsb3JlciB3aW5kb3cuIHxwcmV2aWV3LXdpbmRvd3wKKworVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgdXNlZCB0byBkaXNwbGF5IG90aGVyIGluZm9ybWF0aW9uOgorCisJaQkJRGlzcGxheSB0aGUgc2l6ZSBhbmQgZGF0ZSBmb3IgdGhlIGZpbGUuICBVc2luZyBpIGFnYWluCisJCQl3aWxsIGhpZGUgdGhlIGluZm9ybWF0aW9uLgorCXMJCVVzZSB0aGUgZmllbGQgdGhlIGN1cnNvciBpcyBpbiB0byBzb3J0IG9uLiAgRmlyc3QKKwkJCWRpc3BsYXkgdGhlIHNpemUgYW5kIGRhdGUgd2l0aCBpLiAgVGhlbiBNb3ZlIHRoZQorCQkJY3Vyc29yIHRvIHRoZSBzaXplIG9mIGFueSBmaWxlIGFuZCBwcmVzcyBzLiAgVGhlIGZpbGVzCisJCQl3aWxsIG5vdyBiZSBzb3J0ZWQgb24gc2l6ZS4gIFByZXNzIHMgd2lsZSB0aGUgY3Vyc29yCisJCQlpcyBvbiBhIGRhdGUgYW5kIHRoZSBpdGVtcyB3aWxsIGJlIHNvcnRlZCBvbiBkYXRlLgorCXIJCXJldmVyc2UgdGhlIHNvcnRpbmcgb3JkZXIgKGVpdGhlciBzaXplIG9yIGRhdGUpCisKK1RoZXJlIGFyZSBhIGZldyBleHRyYSBjb21tYW5kczoKKworCWMJCUNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gdGhlIGRpc3BsYXllZAorCQkJZGlyZWN0b3J5LiAgWW91IGNhbiB0aGVuIHR5cGUgYW4gIjplZGl0IiBjb21tYW5kIGZvcgorCQkJb25lIG9mIHRoZSBmaWxlcyB3aXRob3V0IHByZXBlbmRpbmcgdGhlIHBhdGguCisJUgkJUmVuYW1lIHRoZSBmaWxlIHVuZGVyIHRoZSBjdXJzb3IuICBZb3Ugd2lsbCBiZQorCQkJcHJvbXB0ZWQgZm9yIHRoZSBuZXcgbmFtZS4KKwlECQlEZWxldGUgdGhlIGZpbGUgdW5kZXIgdGhlIGN1cnNvci4gIFlvdSB3aWxsIGdldCBhCisJCQlwcm9tcHQgdG8gY29uZmlybSB0aGlzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMi4yKglUaGUgY3VycmVudCBkaXJlY3RvcnkKKworSnVzdCBsaWtlIHRoZSBzaGVsbCwgVmltIGhhcyB0aGUgY29uY2VwdCBvZiBhIGN1cnJlbnQgZGlyZWN0b3J5LiAgU3VwcG9zZSB5b3UKK2FyZSBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IGFuZCB3YW50IHRvIGVkaXQgc2V2ZXJhbCBmaWxlcyBpbiBhIGRpcmVjdG9yeQorIlZlcnlMb25nRmlsZU5hbWUiLiAgWW91IGNvdWxkIGRvOiA+CisKKwk6ZWRpdCBWZXJ5TG9uZ0ZpbGVOYW1lL2ZpbGUxLnR4dAorCTplZGl0IFZlcnlMb25nRmlsZU5hbWUvZmlsZTIudHh0CisJOmVkaXQgVmVyeUxvbmdGaWxlTmFtZS9maWxlMy50eHQKKworVG8gYXZvaWQgbXVjaCBvZiB0aGUgdHlwaW5nLCBkbyB0aGlzOiA+CisKKwk6Y2QgVmVyeUxvbmdGaWxlTmFtZQorCTplZGl0IGZpbGUxLnR4dAorCTplZGl0IGZpbGUyLnR4dAorCTplZGl0IGZpbGUzLnR4dAorCitUaGUgIjpjZCIgY29tbWFuZCBjaGFuZ2VzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFlvdSBjYW4gc2VlIHdoYXQgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSBpcyB3aXRoIHRoZSAiOnB3ZCIgY29tbWFuZDogPgorCisJOnB3ZAorCS9ob21lL0JyYW0vVmVyeUxvbmdGaWxlTmFtZQorCitWaW0gcmVtZW1iZXJzIHRoZSBsYXN0IGRpcmVjdG9yeSB0aGF0IHlvdSB1c2VkLiAgVXNlICJjZCAtIiB0byBnbyBiYWNrIHRvIGl0LgorRXhhbXBsZTogPgorCisJOnB3ZAorCS9ob21lL0JyYW0vVmVyeUxvbmdGaWxlTmFtZQorCTpjZCAvZXRjCisJOnB3ZAorCS9ldGMKKwk6Y2QgLQorCTpwd2QKKwkvaG9tZS9CcmFtL1ZlcnlMb25nRmlsZU5hbWUKKwk6Y2QgLQorCTpwd2QKKwkvZXRjCisKKworV0lORE9XIExPQ0FMIERJUkVDVE9SWQorCitXaGVuIHlvdSBzcGxpdCBhIHdpbmRvdywgYm90aCB3aW5kb3dzIHVzZSB0aGUgc2FtZSBjdXJyZW50IGRpcmVjdG9yeS4gIFdoZW4KK3lvdSB3YW50IHRvIGVkaXQgYSBudW1iZXIgb2YgZmlsZXMgc29tZXdoZXJlIGVsc2UgaW4gdGhlIG5ldyB3aW5kb3csIHlvdSBjYW4KK21ha2UgaXQgdXNlIGEgZGlmZmVyZW50IGRpcmVjdG9yeSwgd2l0aG91dCBjaGFuZ2luZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgaW4KK3RoZSBvdGhlciB3aW5kb3cuICBUaGlzIGlzIGNhbGxlZCBhIGxvY2FsIGRpcmVjdG9yeS4gPgorCisJOnB3ZAorCS9ob21lL0JyYW0vVmVyeUxvbmdGaWxlTmFtZQorCTpzcGxpdAorCTpsY2QgL2V0YworCTpwd2QKKwkvZXRjCisJQ1RSTC1XIHcKKwk6cHdkCisJL2hvbWUvQnJhbS9WZXJ5TG9uZ0ZpbGVOYW1lCisKK1NvIGxvbmcgYXMgbm8gIjpsY2QiIGNvbW1hbmQgaGFzIGJlZW4gdXNlZCwgYWxsIHdpbmRvd3Mgc2hhcmUgdGhlIHNhbWUgY3VycmVudAorZGlyZWN0b3J5LiAgRG9pbmcgYSAiOmNkIiBjb21tYW5kIGluIG9uZSB3aW5kb3cgd2lsbCBhbHNvIGNoYW5nZSB0aGUgY3VycmVudAorZGlyZWN0b3J5IG9mIHRoZSBvdGhlciB3aW5kb3cuCisgICBGb3IgYSB3aW5kb3cgd2hlcmUgIjpsY2QiIGhhcyBiZWVuIHVzZWQgYSBkaWZmZXJlbnQgY3VycmVudCBkaXJlY3RvcnkgaXMKK3JlbWVtYmVyZWQuICBVc2luZyAiOmNkIiBvciAiOmxjZCIgaW4gb3RoZXIgd2luZG93cyB3aWxsIG5vdCBjaGFuZ2UgaXQuCisgICBXaGVuIHVzaW5nIGEgIjpjZCIgY29tbWFuZCBpbiBhIHdpbmRvdyB0aGF0IHVzZXMgYSBkaWZmZXJlbnQgY3VycmVudAorZGlyZWN0b3J5LCBpdCB3aWxsIGdvIGJhY2sgdG8gdXNpbmcgdGhlIHNoYXJlZCBkaXJlY3RvcnkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIyLjMqCUZpbmRpbmcgYSBmaWxlCisKK1lvdSBhcmUgZWRpdGluZyBhIEMgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIHRoaXMgbGluZToKKworCSNpbmNsdWRlICJpbml0cy5oIiB+CisKK1lvdSB3YW50IHRvIHNlZSB3aGF0IGlzIGluIHRoYXQgImluaXRzLmgiIGZpbGUuICBNb3ZlIHRoZSBjdXJzb3Igb24gdGhlIG5hbWUKK29mIHRoZSBmaWxlIGFuZCB0eXBlOiA+CisKKwlnZgorCitWaW0gd2lsbCBmaW5kIHRoZSBmaWxlIGFuZCBlZGl0IGl0LgorICAgV2hhdCBpZiB0aGUgZmlsZSBpcyBub3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5PyAgVmltIHdpbGwgdXNlIHRoZSAncGF0aCcKK29wdGlvbiB0byBmaW5kIHRoZSBmaWxlLiAgVGhpcyBvcHRpb24gaXMgYSBsaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyB3aGVyZSB0bworbG9vayBmb3IgeW91ciBmaWxlLgorICAgU3VwcG9zZSB5b3UgaGF2ZSB5b3VyIGluY2x1ZGUgZmlsZXMgbG9jYXRlZCBpbiAiYzovcHJvZy9pbmNsdWRlIi4gIFRoaXMKK2NvbW1hbmQgd2lsbCBhZGQgaXQgdG8gdGhlICdwYXRoJyBvcHRpb246ID4KKworCTpzZXQgcGF0aCs9YzovcHJvZy9pbmNsdWRlCisKK1RoaXMgZGlyZWN0b3J5IGlzIGFuIGFic29sdXRlIHBhdGguICBObyBtYXR0ZXIgd2hlcmUgeW91IGFyZSwgaXQgd2lsbCBiZSB0aGUKK3NhbWUgcGxhY2UuICBXaGF0IGlmIHlvdSBoYXZlIGxvY2F0ZWQgZmlsZXMgaW4gYSBzdWJkaXJlY3RvcnksIGJlbG93IHdoZXJlIHRoZQorZmlsZSBpcz8gIFRoZW4geW91IGNhbiBzcGVjaWZ5IGEgcmVsYXRpdmUgcGF0aCBuYW1lLiAgVGhpcyBzdGFydHMgd2l0aCBhIGRvdDoKKz4KKwk6c2V0IHBhdGgrPS4vcHJvdG8KKworVGhpcyB0ZWxscyBWaW0gdG8gbG9vayBpbiB0aGUgZGlyZWN0b3J5ICJwcm90byIsIGJlbG93IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlCitmaWxlIGluIHdoaWNoIHlvdSB1c2UgImdmIiBpcy4gIFRodXMgdXNpbmcgImdmIiBvbiAiaW5pdHMuaCIgd2lsbCBtYWtlIFZpbQorbG9vayBmb3IgInByb3RvL2luaXRzLmgiLCBzdGFydGluZyBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBmaWxlLgorICAgV2l0aG91dCB0aGUgIi4vIiwgdGh1cyAicHJvdG8iLCBWaW0gd291bGQgbG9vayBpbiB0aGUgInByb3RvIiBkaXJlY3RvcnkKK2JlbG93IHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEFuZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgbWlnaHQgbm90IGJlIHdoZXJlIHRoZQorZmlsZSB0aGF0IHlvdSBhcmUgZWRpdGluZyBpcyBsb2NhdGVkLgorCitUaGUgJ3BhdGgnIG9wdGlvbiBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgdG8gc2VhcmNoIGZvciBmaWxlcworaW4gbWFueSBtb3JlIHdheXMuICBTZWUgdGhlIGhlbHAgb24gdGhlICdwYXRoJyBvcHRpb24uCisgICBUaGUgJ2lzZm5hbWUnIG9wdGlvbiBpcyB1c2VkIHRvIGRlY2lkZSB3aGljaCBjaGFyYWN0ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUKK2ZpbGUgbmFtZSwgYW5kIHdoaWNoIG9uZXMgYXJlIG5vdCAoZS5nLiwgdGhlICIgY2hhcmFjdGVyIGluIHRoZSBleGFtcGxlCithYm92ZSkuCisKK1doZW4geW91IGtub3cgdGhlIGZpbGUgbmFtZSwgYnV0IGl0J3Mgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBmaWxlLCB5b3UgY2FuCit0eXBlIGl0OiA+CisKKwk6ZmluZCBpbml0cy5oCisKK1ZpbSB3aWxsIHRoZW4gdXNlIHRoZSAncGF0aCcgb3B0aW9uIHRvIHRyeSBhbmQgbG9jYXRlIHRoZSBmaWxlLiAgVGhpcyBpcyB0aGUKK3NhbWUgYXMgdGhlICI6ZWRpdCIgY29tbWFuZCwgZXhjZXB0IGZvciB0aGUgdXNlIG9mICdwYXRoJy4KKworVG8gb3BlbiB0aGUgZm91bmQgZmlsZSBpbiBhIG5ldyB3aW5kb3cgdXNlIENUUkwtVyBmIGluc3RlYWQgb2YgImdmIiwgb3IgdXNlCisiOnNmaW5kIiBpbnN0ZWFkIG9mICI6ZmluZCIuCisKKworQSBuaWNlIHdheSB0byBkaXJlY3RseSBzdGFydCBWaW0gdG8gZWRpdCBhIGZpbGUgc29tZXdoZXJlIGluIHRoZSAncGF0aCc6ID4KKworCXZpbSAiK2ZpbmQgc3RkaW8uaCIKKworVGhpcyBmaW5kcyB0aGUgZmlsZSAic3RkaW8uaCIgaW4geW91ciB2YWx1ZSBvZiAncGF0aCcuICBUaGUgcXVvdGVzIGFyZQorbmVjZXNzYXJ5IHRvIGhhdmUgb25lIGFyZ3VtZW50IHwtK2N8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMi40KglUaGUgYnVmZmVyIGxpc3QKKworVGhlIFZpbSBlZGl0b3IgdXNlcyB0aGUgdGVybSBidWZmZXIgdG8gZGVzY3JpYmUgYSBmaWxlIGJlaW5nIGVkaXRlZC4KK0FjdHVhbGx5LCBhIGJ1ZmZlciBpcyBhIGNvcHkgb2YgdGhlIGZpbGUgdGhhdCB5b3UgZWRpdC4gIFdoZW4geW91IGZpbmlzaAorY2hhbmdpbmcgdGhlIGJ1ZmZlciwgeW91IHdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHRvIHRoZSBmaWxlLgorQnVmZmVycyBub3Qgb25seSBjb250YWluIGZpbGUgY29udGVudHMsIGJ1dCBhbHNvIGFsbCB0aGUgbWFya3MsIHNldHRpbmdzLCBhbmQKK290aGVyIHN0dWZmIHRoYXQgZ29lcyB3aXRoIGl0LgorCisKK0hJRERFTiBCVUZGRVJTCisKK1N1cHBvc2UgeW91IGFyZSBlZGl0aW5nIHRoZSBmaWxlIG9uZS50eHQgYW5kIG5lZWQgdG8gZWRpdCB0aGUgZmlsZSB0d28udHh0LgorWW91IGNvdWxkIHNpbXBseSB1c2UgIjplZGl0IHR3by50eHQiLCBidXQgc2luY2UgeW91IG1hZGUgY2hhbmdlcyB0byBvbmUudHh0Cit0aGF0IHdvbid0IHdvcmsuICBZb3UgYWxzbyBkb24ndCB3YW50IHRvIHdyaXRlIG9uZS50eHQgeWV0LiAgVmltIGhhcyBhCitzb2x1dGlvbiBmb3IgeW91OiA+CisKKwk6aGlkZSBlZGl0IHR3by50eHQKKworVGhlIGJ1ZmZlciAib25lLnR4dCIgZGlzYXBwZWFycyBmcm9tIHRoZSBzY3JlZW4sIGJ1dCBWaW0gc3RpbGwga25vd3MgdGhhdCB5b3UKK2FyZSBlZGl0aW5nIHRoaXMgYnVmZmVyLCBzbyBpdCBrZWVwcyB0aGUgbW9kaWZpZWQgdGV4dC4gIFRoaXMgaXMgY2FsbGVkIGEKK2hpZGRlbiBidWZmZXI6IFRoZSBidWZmZXIgY29udGFpbnMgdGV4dCwgYnV0IHlvdSBjYW4ndCBzZWUgaXQuCisgICBUaGUgIjpoaWRlIiBjb21tYW5kIGFyZ3VtZW50IGlzIGFub3RoZXIgY29tbWFuZC4gIEl0IG1ha2VzIHRoYXQgY29tbWFuZAorYmVoYXZlIGxpa2UgdGhlICdoaWRkZW4nIG9wdGlvbiB3YXMgc2V0LiAgWW91IGNvdWxkIGFsc28gc2V0IHRoaXMgb3B0aW9uCit5b3Vyc2VsZi4gIFRoZSBlZmZlY3QgaXMgdGhhdCB3aGVuIGFueSBidWZmZXIgaXMgYWJhbmRvbmVkLCBpdCBiZWNvbWVzIGhpZGRlbi4KKyAgIEJlIGNhcmVmdWwhICBXaGVuIHlvdSBoYXZlIGhpZGRlbiBidWZmZXJzIHdpdGggY2hhbmdlcywgZG9uJ3QgZXhpdCBWaW0KK3dpdGhvdXQgbWFraW5nIHN1cmUgeW91IGhhdmUgc2F2ZWQgYWxsIHRoZSBidWZmZXJzLgorCisKK0lOQUNUSVZFIEJVRkZFUlMKKworICAgV2hlbiBhIGJ1ZmZlciBoYXMgYmVlbiB1c2VkIG9uY2UsIFZpbSByZW1lbWJlcnMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBpdC4KK1doZW4gaXQgaXMgbm90IGRpc3BsYXllZCBpbiBhIHdpbmRvdyBhbmQgaXQgaXMgbm90IGhpZGRlbiwgaXQgaXMgc3RpbGwgaW4gdGhlCitidWZmZXIgbGlzdC4gIFRoaXMgaXMgY2FsbGVkIGFuIGluYWN0aXZlIGJ1ZmZlci4gIE92ZXJ2aWV3OgorCisgICBBY3RpdmUJCUFwcGVhcnMgaW4gYSB3aW5kb3csIHRleHQgbG9hZGVkLgorICAgSGlkZGVuCQlOb3QgaW4gYSB3aW5kb3csIHRleHQgbG9hZGVkLgorICAgSW5hY3RpdmUJCU5vdCBpbiBhIHdpbmRvdywgbm8gdGV4dCBsb2FkZWQuCisKK1RoZSBpbmFjdGl2ZSBidWZmZXJzIGFyZSByZW1lbWJlcmVkLCBiZWNhdXNlIFZpbSBrZWVwcyBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLAorbGlrZSBtYXJrcy4gIEFuZCByZW1lbWJlcmluZyB0aGUgZmlsZSBuYW1lIGlzIHVzZWZ1bCB0b28sIHNvIHRoYXQgeW91IGNhbiBzZWUKK3doaWNoIGZpbGVzIHlvdSBoYXZlIGVkaXRlZC4gIEFuZCBlZGl0IHRoZW0gYWdhaW4uCisKKworTElTVElORyBCVUZGRVJTCisKK1ZpZXcgdGhlIGJ1ZmZlciBsaXN0IHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6YnVmZmVycworCitBIGNvbW1hbmQgd2hpY2ggZG9lcyB0aGUgc2FtZSwgaXMgbm90IHNvIG9idmlvdXMgdG8gbGlzdCBidWZmZXJzLCBidXQgaXMgbXVjaAorc2hvcnRlciB0byB0eXBlOiA+CisKKwk6bHMKKworVGhlIG91dHB1dCBjb3VsZCBsb29rIGxpa2UgdGhpczoKKworICAxICNoCSJoZWxwLnR4dCIJCQlsaW5lIDYyIH4KKyAgMiAlbCsJInVzcl8yMS50eHQiCQkJbGluZSAxIH4KKyAgMwkidXNyX3RvYy50eHQiCQkJbGluZSAxIH4KKworVGhlIGZpcnN0IGNvbHVtbiBjb250YWlucyB0aGUgYnVmZmVyIG51bWJlci4gIFlvdSBjYW4gdXNlIHRoaXMgdG8gZWRpdCB0aGUKK2J1ZmZlciB3aXRob3V0IGhhdmluZyB0byB0eXBlIHRoZSBuYW1lLCBzZWUgYmVsb3cuCisgICBBZnRlciB0aGUgYnVmZmVyIG51bWJlciBjb21lIHRoZSBmbGFncy4gIFRoZW4gdGhlIG5hbWUgb2YgdGhlIGZpbGUKK2FuZCB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIGN1cnNvciB3YXMgdGhlIGxhc3QgdGltZS4KKyAgIFRoZSBmbGFncyB0aGF0IGNhbiBhcHBlYXIgYXJlIHRoZXNlIChmcm9tIGxlZnQgdG8gcmlnaHQpOgorCisJdQlCdWZmZXIgaXMgdW5saXN0ZWQgfHVubGlzdGVkLWJ1ZmZlcnwuCisJICUJQ3VycmVudCBidWZmZXIuCisJICMJQWx0ZXJuYXRlIGJ1ZmZlci4KKwkgIGwJQnVmZmVyIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVkLgorCSAgaAlCdWZmZXIgaXMgbG9hZGVkIGJ1dCBoaWRkZW4uCisJICAgPQlCdWZmZXIgaXMgcmVhZC1vbmx5LgorCSAgIC0JQnVmZmVyIGlzIG5vdCBtb2RpZmlhYmxlLCB0aGUgJ21vZGlmaWFibGUnIG9wdGlvbiBpcyBvZmYuCisJICAgICsJQnVmZmVyIGhhcyBiZWVuIG1vZGlmaWVkLgorCisKK0VESVRJTkcgQSBCVUZGRVIKKworWW91IGNhbiBlZGl0IGEgYnVmZmVyIGJ5IGl0cyBudW1iZXIuICBUaGF0IGF2b2lkcyBoYXZpbmcgdG8gdHlwZSB0aGUgZmlsZQorbmFtZTogPgorCisJOmJ1ZmZlciAyCisKK0J1dCB0aGUgb25seSB3YXkgdG8ga25vdyB0aGUgbnVtYmVyIGlzIGJ5IGxvb2tpbmcgaW4gdGhlIGJ1ZmZlciBsaXN0LiAgWW91IGNhbgordXNlIHRoZSBuYW1lLCBvciBwYXJ0IG9mIGl0LCBpbnN0ZWFkOiA+CisKKwk6YnVmZmVyIGhlbHAKKworVmltIHdpbGwgZmluZCBhIGJlc3QgbWF0Y2ggZm9yIHRoZSBuYW1lIHlvdSB0eXBlLiAgSWYgdGhlcmUgaXMgb25seSBvbmUKK2J1ZmZlciB0aGF0IG1hdGNoZXMgdGhlIG5hbWUsIGl0IHdpbGwgYmUgdXNlZC4gIEluIHRoaXMgY2FzZSAiaGVscC50eHQiLgorICAgVG8gb3BlbiBhIGJ1ZmZlciBpbiBhIG5ldyB3aW5kb3c6ID4KKworCTpzYnVmZmVyIDMKKworVGhpcyB3b3JrcyB3aXRoIGEgbmFtZSBhcyB3ZWxsLgorCisKK1VTSU5HIFRIRSBCVUZGRVIgTElTVAorCitZb3UgY2FuIG1vdmUgYXJvdW5kIGluIHRoZSBidWZmZXIgbGlzdCB3aXRoIHRoZXNlIGNvbW1hbmRzOgorCisJOmJuZXh0CQlnbyB0byBuZXh0IGJ1ZmZlcgorCTpicHJldmlvdXMJZ28gdG8gcHJldmlvdXMgYnVmZmVyCisJOmJmaXJzdAkJZ28gdG8gdGhlIGZpcnN0IGJ1ZmZlcgorCTpibGFzdAkJZ28gdG8gdGhlIGxhc3QgYnVmZmVyCisKK1RvIHJlbW92ZSBhIGJ1ZmZlciBmcm9tIHRoZSBsaXN0LCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwk6YmRlbGV0ZSAzCisKK0FnYWluLCB0aGlzIGFsc28gd29ya3Mgd2l0aCBhIG5hbWUuCisgICBJZiB5b3UgZGVsZXRlIGEgYnVmZmVyIHRoYXQgd2FzIGFjdGl2ZSAodmlzaWJsZSBpbiBhIHdpbmRvdyksIHRoYXQgd2luZG93Cit3aWxsIGJlIGNsb3NlZC4gIElmIHlvdSBkZWxldGUgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGUgY3VycmVudCB3aW5kb3cgd2lsbCBiZQorY2xvc2VkLiAgSWYgaXQgd2FzIHRoZSBsYXN0IHdpbmRvdywgVmltIHdpbGwgZmluZCBhbm90aGVyIGJ1ZmZlciB0byBlZGl0LiAgWW91CitjYW4ndCBiZSBlZGl0aW5nIG5vdGhpbmchCisKKwlOb3RlOgorCUV2ZW4gYWZ0ZXIgcmVtb3ZpbmcgdGhlIGJ1ZmZlciB3aXRoICI6YmRlbGV0ZSIgVmltIHN0aWxsIHJlbWVtYmVycyBpdC4KKwlJdCdzIGFjdHVhbGx5IG1hZGUgInVubGlzdGVkIiwgaXQgbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIGxpc3QgZnJvbQorCSI6YnVmZmVycyIuICBUaGUgIjpidWZmZXJzISIgY29tbWFuZCB3aWxsIGxpc3QgdW5saXN0ZWQgYnVmZmVycyAoeWVzLAorCVZpbSBjYW4gZG8gdGhlIGltcG9zc2libGUpLiAgVG8gcmVhbGx5IG1ha2UgVmltIGZvcmdldCBhYm91dCBhIGJ1ZmZlciwKKwl1c2UgIjpid2lwZSIuICBBbHNvIHNlZSB0aGUgJ2J1Zmxpc3RlZCcgb3B0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzIzLnR4dHwgIEVkaXRpbmcgb3RoZXIgZmlsZXMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMjMudHh0IGIvcnVudGltZS9kb2MvdXNyXzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU5OTgwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzIzLnR4dApAQCAtMCwwICsxLDM0MyBAQAorKnVzcl8yMy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAxIFNlcCAwMworCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICBFZGl0aW5nIG90aGVyIGZpbGVzCisKKworVGhpcyBjaGFwdGVyIGlzIGFib3V0IGVkaXRpbmcgZmlsZXMgdGhhdCBhcmUgbm90IG9yZGluYXJ5IGZpbGVzLiAgV2l0aCBWaW0geW91CitjYW4gZWRpdCBmaWxlcyB0aGF0IGFyZSBjb21wcmVzc2VkIG9yIGVuY3J5cHRlZC4gIFNvbWUgZmlsZXMgbmVlZCB0byBiZQorYWNjZXNzZWQgb3ZlciB0aGUgaW50ZXJuZXQuICBXaXRoIHNvbWUgcmVzdHJpY3Rpb25zLCBiaW5hcnkgZmlsZXMgY2FuIGJlCitlZGl0ZWQgYXMgd2VsbC4KKworfDIzLjF8CURPUywgTWFjIGFuZCBVbml4IGZpbGVzCit8MjMuMnwJRmlsZXMgb24gdGhlIGludGVybmV0Cit8MjMuM3wJRW5jcnlwdGlvbgorfDIzLjR8CUJpbmFyeSBmaWxlcworfDIzLjV8CUNvbXByZXNzZWQgZmlsZXMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjQudHh0fCAgSW5zZXJ0aW5nIHF1aWNrbHkKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzIyLnR4dHwgIEZpbmRpbmcgdGhlIGZpbGUgdG8gZWRpdAorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjMuMSoJRE9TLCBNYWMgYW5kIFVuaXggZmlsZXMKKworQmFjayBpbiB0aGUgZWFybHkgZGF5cywgdGhlIG9sZCBUZWxldHlwZSBtYWNoaW5lcyB1c2VkIHR3byBjaGFyYWN0ZXJzIHRvCitzdGFydCBhIG5ldyBsaW5lLiAgT25lIHRvIG1vdmUgdGhlIGNhcnJpYWdlIGJhY2sgdG8gdGhlIGZpcnN0IHBvc2l0aW9uCisoY2FycmlhZ2UgcmV0dXJuLCA8Q1I+KSwgYW5vdGhlciB0byBtb3ZlIHRoZSBwYXBlciB1cCAobGluZSBmZWVkLCA8TEY+KS4KKyAgIFdoZW4gY29tcHV0ZXJzIGNhbWUgb3V0LCBzdG9yYWdlIHdhcyBleHBlbnNpdmUuICBTb21lIHBlb3BsZSBkZWNpZGVkIHRoYXQKK3RoZXkgZGlkIG5vdCBuZWVkIHR3byBjaGFyYWN0ZXJzIGZvciBlbmQtb2YtbGluZS4gIFRoZSBVTklYIHBlb3BsZSBkZWNpZGVkCit0aGV5IGNvdWxkIHVzZSA8TGluZSBGZWVkPiBvbmx5IGZvciBlbmQtb2YtbGluZS4gIFRoZSBBcHBsZSBwZW9wbGUKK3N0YW5kYXJkaXplZCBvbiA8Q1I+LiAgVGhlIE1TLURPUyAoYW5kIE1pY3Jvc29mdCBXaW5kb3dzKSBmb2xrcyBkZWNpZGVkIHRvCitrZWVwIHRoZSBvbGQgPENSPjxMRj4uCisgICBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHRyeSB0byBtb3ZlIGEgZmlsZSBmcm9tIG9uZSBzeXN0ZW0gdG8gYW5vdGhlciwgeW91CitoYXZlIGxpbmUtYnJlYWsgcHJvYmxlbXMuICBUaGUgVmltIGVkaXRvciBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZXMgdGhlCitkaWZmZXJlbnQgZmlsZSBmb3JtYXRzIGFuZCBoYW5kbGVzIHRoaW5ncyBwcm9wZXJseSBiZWhpbmQgeW91ciBiYWNrLgorICAgVGhlIG9wdGlvbiAnZmlsZWZvcm1hdHMnIGNvbnRhaW5zIHRoZSB2YXJpb3VzIGZvcm1hdHMgdGhhdCB3aWxsIGJlIHRyaWVkCit3aGVuIGEgbmV3IGZpbGUgaXMgZWRpdGVkLiAgVGhlIGZvbGxvd2luZyBjb21tYW5kLCBmb3IgZXhhbXBsZSwgdGVsbHMgVmltIHRvCit0cnkgVU5JWCBmb3JtYXQgZmlyc3QgYW5kIE1TLURPUyBmb3JtYXQgc2Vjb25kOiA+CisKKwk6c2V0IGZpbGVmb3JtYXRzPXVuaXgsZG9zCisKK1lvdSB3aWxsIG5vdGljZSB0aGUgZm9ybWF0IGluIHRoZSBtZXNzYWdlIHlvdSBnZXQgd2hlbiBlZGl0aW5nIGEgZmlsZS4gIFlvdQorZG9uJ3Qgc2VlIGFueXRoaW5nIGlmIHlvdSBlZGl0IGEgbmF0aXZlIGZpbGUgZm9ybWF0LiAgVGh1cyBlZGl0aW5nIGEgVW5peCBmaWxlCitvbiBVbml4IHdvbid0IHJlc3VsdCBpbiBhIHJlbWFyay4gIEJ1dCB3aGVuIHlvdSBlZGl0IGEgZG9zIGZpbGUsIFZpbSB3aWxsCitub3RpZnkgeW91IG9mIHRoaXM6CisKKwkiL3RtcC90ZXN0IiBbZG9zXSAzTCwgNzFDIH4KKworRm9yIGEgTWFjIGZpbGUgeW91IHdvdWxkIHNlZSAiW21hY10iLgorICAgVGhlIGRldGVjdGVkIGZpbGUgZm9ybWF0IGlzIHN0b3JlZCBpbiB0aGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbi4gIFRvIHNlZQord2hpY2ggZm9ybWF0IHlvdSBoYXZlLCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOnNldCBmaWxlZm9ybWF0PworCitUaGUgdGhyZWUgbmFtZXMgdGhhdCBWaW0gdXNlcyBhcmU6CisKKwl1bml4CQk8TEY+CisJZG9zCQk8Q1I+PExGPgorCW1hYwkJPENSPgorCisKK1VTSU5HIFRIRSBNQUMgRk9STUFUCisKK09uIFVuaXgsIDxMRj4gaXMgdXNlZCB0byBicmVhayBhIGxpbmUuICBJdCdzIG5vdCB1bnVzdWFsIHRvIGhhdmUgYSA8Q1I+CitjaGFyYWN0ZXIgaGFsZndheSBhIGxpbmUuICBJbmNpZGVudGFsbHksIHRoaXMgaGFwcGVucyBxdWl0ZSBvZnRlbiBpbiBWaSAoYW5kCitWaW0pIHNjcmlwdHMuCisgICBPbiB0aGUgTWFjaW50b3NoLCB3aGVyZSA8Q1I+IGlzIHRoZSBsaW5lIGJyZWFrIGNoYXJhY3RlciwgaXQncyBwb3NzaWJsZSB0bworaGF2ZSBhIDxMRj4gY2hhcmFjdGVyIGhhbGZ3YXkgYSBsaW5lLgorICAgVGhlIHJlc3VsdCBpcyB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGJlIDEwMCUgc3VyZSB3aGV0aGVyIGEgZmlsZQorY29udGFpbmluZyBib3RoIDxDUj4gYW5kIDxMRj4gY2hhcmFjdGVycyBpcyBhIE1hYyBvciBhIFVuaXggZmlsZS4gIFRoZXJlZm9yZSwKK1ZpbSBhc3N1bWVzIHRoYXQgb24gVW5peCB5b3UgcHJvYmFibHkgd29uJ3QgZWRpdCBhIE1hYyBmaWxlLCBhbmQgZG9lc24ndCBjaGVjaworZm9yIHRoaXMgdHlwZSBvZiBmaWxlLiAgVG8gY2hlY2sgZm9yIHRoaXMgZm9ybWF0IGFueXdheSwgYWRkICJtYWMiIHRvCisnZmlsZWZvcm1hdHMnOiA+CisKKwk6c2V0IGZpbGVmb3JtYXRzKz1tYWMKKworVGhlbiBWaW0gd2lsbCB0YWtlIGEgZ3Vlc3MgYXQgdGhlIGZpbGUgZm9ybWF0LiAgV2F0Y2ggb3V0IGZvciBzaXR1YXRpb25zIHdoZXJlCitWaW0gZ3Vlc3NlcyB3cm9uZy4KKworCitPVkVSUlVMSU5HIFRIRSBGT1JNQVQKKworSWYgeW91IHVzZSB0aGUgZ29vZCBvbGQgVmkgYW5kIHRyeSB0byBlZGl0IGFuIE1TLURPUyBmb3JtYXQgZmlsZSwgeW91IHdpbGwKK2ZpbmQgdGhhdCBlYWNoIGxpbmUgZW5kcyB3aXRoIGEgXk0gY2hhcmFjdGVyLiAoXk0gaXMgPENSPikuICBUaGUgYXV0b21hdGljCitkZXRlY3Rpb24gYXZvaWRzIHRoaXMuICBTdXBwb3NlIHlvdSBkbyB3YW50IHRvIGVkaXQgdGhlIGZpbGUgdGhhdCB3YXk/ICBUaGVuCit5b3UgbmVlZCB0byBvdmVycnVsZSB0aGUgZm9ybWF0OiA+CisKKwk6ZWRpdCArK2ZmPXVuaXggZmlsZS50eHQKKworVGhlICIrKyIgc3RyaW5nIGlzIGFuIGl0ZW0gdGhhdCB0ZWxscyBWaW0gdGhhdCBhbiBvcHRpb24gbmFtZSBmb2xsb3dzLCB3aGljaAorb3ZlcnJ1bGVzIHRoZSBkZWZhdWx0IGZvciB0aGlzIHNpbmdsZSBjb21tYW5kLiAgIisrZmYiIGlzIHVzZWQgZm9yCisnZmlsZWZvcm1hdCcuICBZb3UgY291bGQgYWxzbyB1c2UgIisrZmY9bWFjIiBvciAiKytmZj1kb3MiLgorICAgVGhpcyBkb2Vzbid0IHdvcmsgZm9yIGFueSBvcHRpb24sIG9ubHkgIisrZmYiIGFuZCAiKytlbmMiIGFyZSBjdXJyZW50bHkKK2ltcGxlbWVudGVkLiAgVGhlIGZ1bGwgbmFtZXMgIisrZmlsZWZvcm1hdCIgYW5kICIrK2VuY29kaW5nIiBhbHNvIHdvcmsuCisKKworQ09OVkVSU0lPTgorCitZb3UgY2FuIHVzZSB0aGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbiB0byBjb252ZXJ0IGZyb20gb25lIGZpbGUgZm9ybWF0IHRvCithbm90aGVyLiAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGhhdmUgYW4gTVMtRE9TIGZpbGUgbmFtZWQgUkVBRE1FLlRYVAordGhhdCB5b3Ugd2FudCB0byBjb252ZXJ0IHRvIFVOSVggZm9ybWF0LiAgU3RhcnQgYnkgZWRpdGluZyB0aGUgTVMtRE9TIGZvcm1hdAorZmlsZTogPgorCXZpbSBSRUFETUUuVFhUCisKK1ZpbSB3aWxsIHJlY29nbml6ZSB0aGlzIGFzIGEgZG9zIGZvcm1hdCBmaWxlLiAgTm93IGNoYW5nZSB0aGUgZmlsZSBmb3JtYXQgdG8KK1VOSVg6ID4KKworCTpzZXQgZmlsZWZvcm1hdD11bml4CisJOndyaXRlCisKK1RoZSBmaWxlIGlzIHdyaXR0ZW4gaW4gVW5peCBmb3JtYXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIzLjIqCUZpbGVzIG9uIHRoZSBpbnRlcm5ldAorCitTb21lb25lIHNlbmRzIHlvdSBhbiBlLW1haWwgbWVzc2FnZSwgd2hpY2ggcmVmZXJzIHRvIGEgZmlsZSBieSBpdHMgVVJMLiAgRm9yCitleGFtcGxlOgorCisJWW91IGNhbiBmaW5kIHRoZSBpbmZvcm1hdGlvbiBoZXJlOiB+CisJCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vUkVBRE1FIH4KKworWW91IGNvdWxkIHN0YXJ0IGEgcHJvZ3JhbSB0byBkb3dubG9hZCB0aGUgZmlsZSwgc2F2ZSBpdCBvbiB5b3VyIGxvY2FsIGRpc2sgYW5kCit0aGVuIHN0YXJ0IFZpbSB0byBlZGl0IGl0LgorICAgVGhlcmUgaXMgYSBtdWNoIHNpbXBsZXIgd2F5LiAgTW92ZSB0aGUgY3Vyc29yIHRvIGFueSBjaGFyYWN0ZXIgb2YgdGhlIFVSTC4KK1RoZW4gdXNlIHRoaXMgY29tbWFuZDogPgorCisJZ2YKKworV2l0aCBhIGJpdCBvZiBsdWNrLCBWaW0gd2lsbCBmaWd1cmUgb3V0IHdoaWNoIHByb2dyYW0gdG8gdXNlIGZvciBkb3dubG9hZGluZwordGhlIGZpbGUsIGRvd25sb2FkIGl0IGFuZCBlZGl0IHRoZSBjb3B5LiAgVG8gb3BlbiB0aGUgZmlsZSBpbiBhIG5ldyB3aW5kb3cgdXNlCitDVFJMLVcgZi4KKyAgIElmIHNvbWV0aGluZyBnb2VzIHdyb25nIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLiAgSXQncyBwb3NzaWJsZSB0aGF0Cit0aGUgVVJMIGlzIHdyb25nLCB5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHJlYWQgaXQsIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24KK2lzIGRvd24sIGV0Yy4gIFVuZm9ydHVuYXRlbHksIGl0J3MgaGFyZCB0byB0ZWxsIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuICBZb3UKK21pZ2h0IHdhbnQgdG8gdHJ5IHRoZSBtYW51YWwgd2F5IG9mIGRvd25sb2FkaW5nIHRoZSBmaWxlLgorCitBY2Nlc3NpbmcgZmlsZXMgb3ZlciB0aGUgaW50ZXJuZXQgd29ya3Mgd2l0aCB0aGUgbmV0cncgcGx1Z2luLiAgQ3VycmVudGx5IFVSTHMKK3dpdGggdGhlc2UgZm9ybWF0cyBhcmUgcmVjb2duaXplZDoKKworCWZ0cDovLwkJdXNlcyBmdHAKKwlyY3A6Ly8JCXVzZXMgcmNwCisJc2NwOi8vCQl1c2VzIHNjcAorCWh0dHA6Ly8JCXVzZXMgd2dldCAocmVhZGluZyBvbmx5KQorCitWaW0gZG9lc24ndCBkbyB0aGUgY29tbXVuaWNhdGlvbiBpdHNlbGYsIGl0IHJlbGllcyBvbiB0aGUgbWVudGlvbmVkIHByb2dyYW1zCit0byBiZSBhdmFpbGFibGUgb24geW91ciBjb21wdXRlci4gIE9uIG1vc3QgVW5peCBzeXN0ZW1zICJmdHAiIGFuZCAicmNwIiB3aWxsCitiZSBwcmVzZW50LiAgInNjcCIgYW5kICJ3Z2V0IiBtaWdodCBuZWVkIHRvIGJlIGluc3RhbGxlZC4KKworVmltIGRldGVjdHMgdGhlc2UgVVJMcyBmb3IgZWFjaCBjb21tYW5kIHRoYXQgc3RhcnRzIGVkaXRpbmcgYSBuZXcgZmlsZSwgYWxzbword2l0aCAiOmVkaXQiIGFuZCAiOnNwbGl0IiwgZm9yIGV4YW1wbGUuICBXcml0ZSBjb21tYW5kcyBhbHNvIHdvcmssIGV4Y2VwdCBmb3IKK2h0dHA6Ly8uCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBhbHNvIGFib3V0IHBhc3N3b3Jkcywgc2VlIHxuZXRyd3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIzLjMqCUVuY3J5cHRpb24KKworU29tZSBpbmZvcm1hdGlvbiB5b3UgcHJlZmVyIHRvIGtlZXAgdG8geW91cnNlbGYuICBGb3IgZXhhbXBsZSwgd2hlbiB3cml0aW5nCithIHRlc3Qgb24gYSBjb21wdXRlciB0aGF0IHN0dWRlbnRzIGFsc28gdXNlLiAgWW91IGRvbid0IHdhbnQgY2xldmVyIHN0dWRlbnRzCit0byBmaWd1cmUgb3V0IGEgd2F5IHRvIHJlYWQgdGhlIHF1ZXN0aW9ucyBiZWZvcmUgdGhlIGV4YW0gc3RhcnRzLiAgVmltIGNhbgorZW5jcnlwdCB0aGUgZmlsZSBmb3IgeW91LCB3aGljaCBnaXZlcyB5b3Ugc29tZSBwcm90ZWN0aW9uLgorICAgVG8gc3RhcnQgZWRpdGluZyBhIG5ldyBmaWxlIHdpdGggZW5jcnlwdGlvbiwgdXNlIHRoZSAiLXgiIGFyZ3VtZW50IHRvIHN0YXJ0CitWaW0uICBFeGFtcGxlOiA+CisKKwl2aW0gLXggZXhhbS50eHQKKworVmltIHByb21wdHMgeW91IGZvciBhIGtleSB1c2VkIGZvciBlbmNyeXB0aW5nIGFuZCBkZWNyeXB0aW5nIHRoZSBmaWxlOgorCisJRW50ZXIgZW5jcnlwdGlvbiBrZXk6IH4KKworQ2FyZWZ1bGx5IHR5cGUgdGhlIHNlY3JldCBrZXkgbm93LiAgWW91IGNhbm5vdCBzZWUgdGhlIGNoYXJhY3RlcnMgeW91IHR5cGUsCit0aGV5IHdpbGwgYmUgcmVwbGFjZWQgYnkgc3RhcnMuICBUbyBhdm9pZCB0aGUgc2l0dWF0aW9uIHRoYXQgYSB0eXBpbmcgbWlzdGFrZQord2lsbCBjYXVzZSB0cm91YmxlLCBWaW0gYXNrcyB5b3UgdG8gZW50ZXIgdGhlIGtleSBhZ2FpbjoKKworCUVudGVyIHNhbWUga2V5IGFnYWluOiB+CisKK1lvdSBjYW4gbm93IGVkaXQgdGhpcyBmaWxlIG5vcm1hbGx5IGFuZCBwdXQgaW4gYWxsIHlvdXIgc2VjcmV0cy4gIFdoZW4geW91CitmaW5pc2ggZWRpdGluZyB0aGUgZmlsZSBhbmQgdGVsbCBWaW0gdG8gZXhpdCwgdGhlIGZpbGUgaXMgZW5jcnlwdGVkIGFuZAord3JpdHRlbi4KKyAgIFdoZW4geW91IGVkaXQgdGhlIGZpbGUgd2l0aCBWaW0sIGl0IHdpbGwgYXNrIHlvdSB0byBlbnRlciB0aGUgc2FtZSBrZXkKK2FnYWluLiAgWW91IGRvbid0IG5lZWQgdG8gdXNlIHRoZSAiLXgiIGFyZ3VtZW50LiAgWW91IGNhbiBhbHNvIHVzZSB0aGUgbm9ybWFsCisiOmVkaXQiIGNvbW1hbmQuICBWaW0gYWRkcyBhIG1hZ2ljIHN0cmluZyB0byB0aGUgZmlsZSBieSB3aGljaCBpdCByZWNvZ25pemVzCit0aGF0IHRoZSBmaWxlIHdhcyBlbmNyeXB0ZWQuCisgICBJZiB5b3UgdHJ5IHRvIHZpZXcgdGhpcyBmaWxlIHVzaW5nIGFub3RoZXIgcHJvZ3JhbSwgYWxsIHlvdSBnZXQgaXMgZ2FyYmFnZS4KK0Fsc28sIGlmIHlvdSBlZGl0IHRoZSBmaWxlIHdpdGggVmltIGFuZCBlbnRlciB0aGUgd3Jvbmcga2V5LCB5b3UgZ2V0IGdhcmJhZ2UuCitWaW0gZG9lcyBub3QgaGF2ZSBhIG1lY2hhbmlzbSB0byBjaGVjayBpZiB0aGUga2V5IGlzIHRoZSByaWdodCBvbmUgKHRoaXMgbWFrZXMKK2l0IG11Y2ggaGFyZGVyIHRvIGJyZWFrIHRoZSBrZXkpLgorCisKK1NXSVRDSElORyBFTkNSWVBUSU9OIE9OIEFORCBPRkYKKworVG8gZGlzYWJsZSB0aGUgZW5jcnlwdGlvbiBvZiBhIGZpbGUsIHNldCB0aGUgJ2tleScgb3B0aW9uIHRvIGFuIGVtcHR5IHN0cmluZzoKKz4KKwk6c2V0IGtleT0KKworVGhlIG5leHQgdGltZSB5b3Ugd3JpdGUgdGhlIGZpbGUgdGhpcyB3aWxsIGJlIGRvbmUgd2l0aG91dCBlbmNyeXB0aW9uLgorICAgU2V0dGluZyB0aGUgJ2tleScgb3B0aW9uIHRvIGVuYWJsZSBlbmNyeXB0aW9uIGlzIG5vdCBhIGdvb2QgaWRlYSwgYmVjYXVzZQordGhlIHBhc3N3b3JkIGFwcGVhcnMgaW4gdGhlIGNsZWFyLiAgQW55b25lIHNob3VsZGVyLXN1cmZpbmcgY2FuIHJlYWQgeW91cgorcGFzc3dvcmQuCisgICBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHRoZSAiOlgiIGNvbW1hbmQgd2FzIGNyZWF0ZWQuICBJdCBhc2tzIHlvdSBmb3IgYW4KK2VuY3J5cHRpb24ga2V5LCBqdXN0IGxpa2UgdGhlICIteCIgYXJndW1lbnQgZGlkOiA+CisKKwk6WAorCUVudGVyIGVuY3J5cHRpb24ga2V5OiAqKioqKioKKwlFbnRlciBzYW1lIGtleSBhZ2FpbjogKioqKioqCisKKworTElNSVRTIE9OIEVOQ1JZUFRJT04KKworVGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtIHVzZWQgYnkgVmltIGlzIHdlYWsuICBJdCBpcyBnb29kIGVub3VnaCB0byBrZWVwIG91dAordGhlIGNhc3VhbCBwcm93bGVyLCBidXQgbm90IGdvb2QgZW5vdWdoIHRvIGtlZXAgb3V0IGEgY3J5cHRvbG9neSBleHBlcnQgd2l0aAorbG90cyBvZiB0aW1lIG9uIGhpcyBoYW5kcy4gIEFsc28geW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IHRoZSBzd2FwIGZpbGUgaXMgbm90CitlbmNyeXB0ZWQ7IHNvIHdoaWxlIHlvdSBhcmUgZWRpdGluZywgcGVvcGxlIHdpdGggc3VwZXJ1c2VyIHByaXZpbGVnZXMgY2FuIHJlYWQKK3RoZSB1bmVuY3J5cHRlZCB0ZXh0IGZyb20gdGhpcyBmaWxlLgorICAgT25lIHdheSB0byBhdm9pZCBsZXR0aW5nIHBlb3BsZSByZWFkIHlvdXIgc3dhcCBmaWxlIGlzIHRvIGF2b2lkIHVzaW5nIG9uZS4KK0lmIHRoZSAtbiBhcmd1bWVudCBpcyBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBubyBzd2FwIGZpbGUgaXMgdXNlZAorKGluc3RlYWQsIFZpbSBwdXRzIGV2ZXJ5dGhpbmcgaW4gbWVtb3J5KS4gIEZvciBleGFtcGxlLCB0byBlZGl0IHRoZSBlbmNyeXB0ZWQKK2ZpbGUgImZpbGUudHh0IiB3aXRob3V0IGEgc3dhcCBmaWxlIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCXZpbSAteCAtbiBmaWxlLnR4dAorCitXaGVuIGFscmVhZHkgZWRpdGluZyBhIGZpbGUsIHRoZSBzd2FwZmlsZSBjYW4gYmUgZGlzYWJsZWQgd2l0aDogPgorCisJOnNldGxvY2FsIG5vc3dhcGZpbGUKKworU2luY2UgdGhlcmUgaXMgbm8gc3dhcGZpbGUsIHJlY292ZXJ5IHdpbGwgYmUgaW1wb3NzaWJsZS4gIFNhdmUgdGhlIGZpbGUgYSBiaXQKK21vcmUgb2Z0ZW4gdG8gYXZvaWQgdGhlIHJpc2sgb2YgbG9zaW5nIHlvdXIgY2hhbmdlcy4KKworV2hpbGUgdGhlIGZpbGUgaXMgaW4gbWVtb3J5LCBpdCBpcyBpbiBwbGFpbiB0ZXh0LiAgQW55b25lIHdpdGggcHJpdmlsZWdlIGNhbgorbG9vayBpbiB0aGUgZWRpdG9yJ3MgbWVtb3J5IGFuZCBkaXNjb3ZlciB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisgICBJZiB5b3UgdXNlIGEgdmltaW5mbyBmaWxlLCBiZSBhd2FyZSB0aGF0IHRoZSBjb250ZW50cyBvZiB0ZXh0IHJlZ2lzdGVycyBhcmUKK3dyaXR0ZW4gb3V0IGluIHRoZSBjbGVhciBhcyB3ZWxsLgorICAgSWYgeW91IHJlYWxseSB3YW50IHRvIHNlY3VyZSB0aGUgY29udGVudHMgb2YgYSBmaWxlLCBlZGl0IGl0IG9ubHkgb24gYQorcG9ydGFibGUgY29tcHV0ZXIgbm90IGNvbm5lY3RlZCB0byBhIG5ldHdvcmssIHVzZSBnb29kIGVuY3J5cHRpb24gdG9vbHMsIGFuZAora2VlcCB0aGUgY29tcHV0ZXIgbG9ja2VkIHVwIGluIGEgYmlnIHNhZmUgd2hlbiBub3QgaW4gdXNlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyMy40KglCaW5hcnkgZmlsZXMKKworWW91IGNhbiBlZGl0IGJpbmFyeSBmaWxlcyB3aXRoIFZpbS4gIFZpbSB3YXNuJ3QgcmVhbGx5IG1hZGUgZm9yIHRoaXMsIHRodXMKK3RoZXJlIGFyZSBhIGZldyByZXN0cmljdGlvbnMuICBCdXQgeW91IGNhbiByZWFkIGEgZmlsZSwgY2hhbmdlIGEgY2hhcmFjdGVyIGFuZAord3JpdGUgaXQgYmFjaywgd2l0aCB0aGUgcmVzdWx0IHRoYXQgb25seSB0aGF0IG9uZSBjaGFyYWN0ZXIgd2FzIGNoYW5nZWQgYW5kCit0aGUgZmlsZSBpcyBpZGVudGljYWwgb3RoZXJ3aXNlLgorICAgVG8gbWFrZSBzdXJlIHRoYXQgVmltIGRvZXMgbm90IHVzZSBpdHMgY2xldmVyIHRyaWNrcyBpbiB0aGUgd3Jvbmcgd2F5LCBhZGQKK3RoZSAiLWIiIGFyZ3VtZW50IHdoZW4gc3RhcnRpbmcgVmltOiA+CisKKwl2aW0gLWIgZGF0YWZpbGUKKworVGhpcyBzZXRzIHRoZSAnYmluYXJ5JyBvcHRpb24uICBUaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCB1bmV4cGVjdGVkIHNpZGUKK2VmZmVjdHMgYXJlIHR1cm5lZCBvZmYuICBGb3IgZXhhbXBsZSwgJ3RleHR3aWR0aCcgaXMgc2V0IHRvIHplcm8sIHRvIGF2b2lkCithdXRvbWF0aWMgZm9ybWF0dGluZyBvZiBsaW5lcy4gIEFuZCBmaWxlcyBhcmUgYWx3YXlzIHJlYWQgaW4gVW5peCBmaWxlIGZvcm1hdC4KKworQmluYXJ5IG1vZGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIGEgbWVzc2FnZSBpbiBhIHByb2dyYW0uICBCZSBjYXJlZnVsIG5vdCB0bworaW5zZXJ0IG9yIGRlbGV0ZSBhbnkgY2hhcmFjdGVycywgaXQgd291bGQgc3RvcCB0aGUgcHJvZ3JhbSBmcm9tIHdvcmtpbmcuICBVc2UKKyJSIiB0byBlbnRlciByZXBsYWNlIG1vZGUuCisKK01hbnkgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSB3aWxsIGJlIHVucHJpbnRhYmxlLiAgVG8gc2VlIHRoZW0gaW4gSGV4IGZvcm1hdDogPgorCisJOnNldCBkaXNwbGF5PXVoZXgKKworT3RoZXJ3aXNlLCB0aGUgImdhIiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlIGNoYXJhY3RlcgordW5kZXIgdGhlIGN1cnNvci4gIFRoZSBvdXRwdXQsIHdoZW4gdGhlIGN1cnNvciBpcyBvbiBhbiA8RXNjPiwgbG9va3MgbGlrZQordGhpczoKKworCTxeWz4gIDI3LCAgSGV4IDFiLCAgT2N0YWwgMDMzIH4KKworVGhlcmUgbWlnaHQgbm90IGJlIG1hbnkgbGluZSBicmVha3MgaW4gdGhlIGZpbGUuICBUbyBnZXQgc29tZSBvdmVydmlldyBzd2l0Y2gKK3RoZSAnd3JhcCcgb3B0aW9uIG9mZjogPgorCisJOnNldCBub3dyYXAKKworCitCWVRFIFBPU0lUSU9OCisKK1RvIHNlZSBvbiB3aGljaCBieXRlIHlvdSBhcmUgaW4gdGhlIGZpbGUgdXNlIHRoaXMgY29tbWFuZDogPgorCisJZyBDVFJMLUcKKworVGhlIG91dHB1dCBpcyB2ZXJib3NlOgorCisgICAgQ29sIDktMTYgb2YgOS0xNjsgTGluZSAyNzcgb2YgMzMwOyBXb3JkIDE4MDYgb2YgMjA1ODsgQnl0ZSAxMDU4MCBvZiAxMjIwNiB+CisKK1RoZSBsYXN0IHR3byBudW1iZXJzIGFyZSB0aGUgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgZmlsZSBhbmQgdGhlIHRvdGFsIG51bWJlciBvZgorYnl0ZXMuICBUaGlzIHRha2VzIGludG8gYWNjb3VudCBob3cgJ2ZpbGVmb3JtYXQnIGNoYW5nZXMgdGhlIG51bWJlciBvZiBieXRlcwordGhhdCBhIGxpbmUgYnJlYWsgdXNlcy4KKyAgICBUbyBtb3ZlIHRvIGEgc3BlY2lmaWMgYnl0ZSBpbiB0aGUgZmlsZSwgdXNlIHRoZSAiZ28iIGNvbW1hbmQuICBGb3IKK2V4YW1wbGUsIHRvIG1vdmUgdG8gYnl0ZSAyMzQ1OiA+CisKKwkyMzQ1Z28KKworCitVU0lORyBYWEQKKworQSByZWFsIGJpbmFyeSBlZGl0b3Igc2hvd3MgdGhlIHRleHQgaW4gdHdvIHdheXM6IGFzIGl0IGlzIGFuZCBpbiBoZXggZm9ybWF0LgorWW91IGNhbiBkbyB0aGlzIGluIFZpbSBieSBmaXJzdCBjb252ZXJ0aW5nIHRoZSBmaWxlIHdpdGggdGhlICJ4eGQiIHByb2dyYW0uCitUaGlzIGNvbWVzIHdpdGggVmltLgorICAgRmlyc3QgZWRpdCB0aGUgZmlsZSBpbiBiaW5hcnkgbW9kZTogPgorCisJdmltIC1iIGRhdGFmaWxlCisKK05vdyBjb252ZXJ0IHRoZSBmaWxlIHRvIGEgaGV4IGR1bXAgd2l0aCB4eGQ6ID4KKworCTolIXh4ZAorCitUaGUgdGV4dCB3aWxsIGxvb2sgbGlrZSB0aGlzOgorCisJMDAwMDAwMDogMWY4YiAwODA4IDM5ZDcgMTczYiAwMjAzIDc0NzQgMDAyYiA0ZTQ5ICAuLi4uOS4uOy4udHQuK05JIH4KKwkwMDAwMDEwOiA0YjJjIDg2NjAgZWI5YyBlY2FjIGM0NjIgZWI5NCAzNDVlIDJlMzAgIEssLmAuLi4uLmIuLjReLjAgfgorCTAwMDAwMjA6IDM3M2IgMjczMSAwYjIyIDBjYTYgYzFhMiBkNjY5IDEwMzUgMzlkOSAgNzsnMS4iLi4uLi5pLjU5LiB+CisKK1lvdSBjYW4gbm93IHZpZXcgYW5kIGVkaXQgdGhlIHRleHQgYXMgeW91IGxpa2UuICBWaW0gdHJlYXRzIHRoZSBpbmZvcm1hdGlvbiBhcworb3JkaW5hcnkgdGV4dC4gIENoYW5naW5nIHRoZSBoZXggZG9lcyBub3QgY2F1c2UgdGhlIHByaW50YWJsZSBjaGFyYWN0ZXIgdG8gYmUKK2NoYW5nZWQsIG9yIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorICAgRmluYWxseSBjb252ZXJ0IGl0IGJhY2sgd2l0aDoKKz4KKwk6JSF4eGQgLXIKKworT25seSBjaGFuZ2VzIGluIHRoZSBoZXggcGFydCBhcmUgdXNlZC4gIENoYW5nZXMgaW4gdGhlIHByaW50YWJsZSB0ZXh0IHBhcnQgb24KK3RoZSByaWdodCBhcmUgaWdub3JlZC4KKworU2VlIHRoZSBtYW51YWwgcGFnZSBvZiB4eGQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjIzLjUqCUNvbXByZXNzZWQgZmlsZXMKKworVGhpcyBpcyBlYXN5OiBZb3UgY2FuIGVkaXQgYSBjb21wcmVzc2VkIGZpbGUganVzdCBsaWtlIGFueSBvdGhlciBmaWxlLiAgVGhlCisiZ3ppcCIgcGx1Z2luIHRha2VzIGNhcmUgb2YgZGVjb21wcmVzc2luZyB0aGUgZmlsZSB3aGVuIHlvdSBlZGl0IGl0LiAgQW5kCitjb21wcmVzc2luZyBpdCBhZ2FpbiB3aGVuIHlvdSB3cml0ZSBpdC4KKyAgIFRoZXNlIGNvbXByZXNzaW9uIG1ldGhvZHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6CisKKwkuWgljb21wcmVzcworCS5neglnemlwCisJLmJ6MgliemlwMgorCitWaW0gdXNlcyB0aGUgbWVudGlvbmVkIHByb2dyYW1zIHRvIGRvIHRoZSBhY3R1YWwgY29tcHJlc3Npb24gYW5kCitkZWNvbXByZXNzaW9uLiAgWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCB0aGUgcHJvZ3JhbXMgZmlyc3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMjQudHh0fCAgSW5zZXJ0aW5nIHF1aWNrbHkKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMjQudHh0IGIvcnVudGltZS9kb2MvdXNyXzI0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjI3NGQxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzI0LnR4dApAQCAtMCwwICsxLDU3MyBAQAorKnVzcl8yNC50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIEF1ZyAxOAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICBJbnNlcnRpbmcgcXVpY2tseQorCisKK1doZW4gZW50ZXJpbmcgdGV4dCwgVmltIG9mZmVycyB2YXJpb3VzIHdheXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Yga2V5c3Ryb2tlcworYW5kIGF2b2lkIHR5cGluZyBtaXN0YWtlcy4gIFVzZSBJbnNlcnQgbW9kZSBjb21wbGV0aW9uIHRvIHJlcGVhdCBwcmV2aW91c2x5Cit0eXBlZCB3b3Jkcy4gIEFiYnJldmlhdGUgbG9uZyB3b3JkcyB0byBzaG9ydCBvbmVzLiAgVHlwZSBjaGFyYWN0ZXJzIHRoYXQKK2FyZW4ndCBvbiB5b3VyIGtleWJvYXJkLgorCit8MjQuMXwJTWFraW5nIGNvcnJlY3Rpb25zCit8MjQuMnwJU2hvd2luZyBtYXRjaGVzCit8MjQuM3wJQ29tcGxldGlvbgorfDI0LjR8CVJlcGVhdGluZyBhbiBpbnNlcnQKK3wyNC41fAlDb3B5aW5nIGZyb20gYW5vdGhlciBsaW5lCit8MjQuNnwJSW5zZXJ0aW5nIGEgcmVnaXN0ZXIKK3wyNC43fAlBYmJyZXZpYXRpb25zCit8MjQuOHwJRW50ZXJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCit8MjQuOXwJRGlncmFwaHMKK3wyNC4xMHwJTm9ybWFsIG1vZGUgY29tbWFuZHMKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjUudHh0fCAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMjMudHh0fCAgRWRpdGluZyBvdGhlciBmaWxlcworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuMSoJTWFraW5nIGNvcnJlY3Rpb25zCisKK1RoZSA8QlM+IGtleSB3YXMgYWxyZWFkeSBtZW50aW9uZWQuICBJdCBkZWxldGVzIHRoZSBjaGFyYWN0ZXIganVzdCBiZWZvcmUgdGhlCitjdXJzb3IuICBUaGUgPERlbD4ga2V5IGRvZXMgdGhlIHNhbWUgZm9yIHRoZSBjaGFyYWN0ZXIgdW5kZXIgKGFmdGVyKSB0aGUKK2N1cnNvci4KKyAgIFdoZW4geW91IHR5cGVkIGEgd2hvbGUgd29yZCB3cm9uZywgdXNlIENUUkwtVzoKKworCVRoZSBob3JzZSBoYWQgZmFsbGVuIHRvIHRoZSBza3kgfgorCQkJCSAgICAgICBDVFJMLVcKKwlUaGUgaG9yc2UgaGFkIGZhbGxlbiB0byB0aGUgfgorCitJZiB5b3UgcmVhbGx5IG1lc3NlZCB1cCBhIGxpbmUgYW5kIHdhbnQgdG8gc3RhcnQgb3ZlciwgdXNlIENUUkwtVSB0byBkZWxldGUKK2l0LiAgVGhpcyBrZWVwcyB0aGUgdGV4dCBhZnRlciB0aGUgY3Vyc29yIGFuZCB0aGUgaW5kZW50LiAgT25seSB0aGUgdGV4dCBmcm9tCit0aGUgZmlyc3Qgbm9uLWJsYW5rIHRvIHRoZSBjdXJzb3IgaXMgZGVsZXRlZC4gIFdpdGggdGhlIGN1cnNvciBvbiB0aGUgImYiIG9mCisiZmFsbGVuIiBpbiB0aGUgbmV4dCBsaW5lIHByZXNzaW5nIENUUkwtVSBkb2VzIHRoaXM6CisKKwlUaGUgaG9yc2UgaGFkIGZhbGxlbiB0byB0aGUgfgorCQkgICAgICBDVFJMLVUKKwlmYWxsZW4gdG8gdGhlIH4KKworV2hlbiB5b3Ugc3BvdCBhIG1pc3Rha2UgYSBmZXcgd29yZHMgYmFjaywgeW91IG5lZWQgdG8gbW92ZSB0aGUgY3Vyc29yIHRoZXJlIHRvCitjb3JyZWN0IGl0LiAgRm9yIGV4YW1wbGUsIHlvdSB0eXBlZCB0aGlzOgorCisJVGhlIGhvcnNlIGhhZCBmb2xsZW4gdG8gdGhlIGdyb3VuZCB+CisKK1lvdSBuZWVkIHRvIGNoYW5nZSAiZm9sbGVuIiB0byAiZmFsbGVuIi4gIFdpdGggdGhlIGN1cnNvciBhdCB0aGUgZW5kLCB5b3UKK3dvdWxkIHR5cGUgdGhpcyB0byBjb3JyZWN0IGl0OiA+CisKKwkJCQkJPEVzYz40YmxyYUEKKworPAlnZXQgb3V0IG9mIEluc2VydCBtb2RlCQk8RXNjPgorCWZvdXIgd29yZHMgYmFjawkJCSAgICAgNGIKKwltb3ZlIG9uIHRvcCBvZiB0aGUgIm8iCQkgICAgICAgbAorCXJlcGxhY2Ugd2l0aCAiYSIJCQlyYQorCXJlc3RhcnQgSW5zZXJ0IG1vZGUJCQkgIEEKKworQW5vdGhlciB3YXkgdG8gZG8gdGhpczogPgorCisJCTxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PjxDLUxlZnQ+PFJpZ2h0PjxEZWw+YTxFbmQ+CisKKzwJZm91ciB3b3JkcyBiYWNrCQkgICAgIDxDLUxlZnQ+PEMtTGVmdD48Qy1MZWZ0PjxDLUxlZnQ+CisJbW92ZSBvbiB0b3Agb2YgdGhlICJvIgkJCTxSaWdodD4KKwlkZWxldGUgdGhlICJvIgkJCQkgICAgICAgPERlbD4KKwlpbnNlcnQgYW4gImEiCQkJCQkgICAgYQorCWdvIHRvIGVuZCBvZiB0aGUgbGluZQkJCQkgICAgIDxFbmQ+CisKK1RoaXMgdXNlcyBzcGVjaWFsIGtleXMgdG8gbW92ZSBhcm91bmQsIHdoaWxlIHJlbWFpbmluZyBpbiBJbnNlcnQgbW9kZS4gIFRoaXMKK3Jlc2VtYmxlcyB3aGF0IHlvdSB3b3VsZCBkbyBpbiBhIG1vZGVsZXNzIGVkaXRvci4gIEl0J3MgZWFzaWVyIHRvIHJlbWVtYmVyLAorYnV0IHRha2VzIG1vcmUgdGltZSAoeW91IGhhdmUgdG8gbW92ZSB5b3VyIGhhbmQgZnJvbSB0aGUgbGV0dGVycyB0byB0aGUgY3Vyc29yCitrZXlzLCBhbmQgdGhlIDxFbmQ+IGtleSBpcyBoYXJkIHRvIHByZXNzIHdpdGhvdXQgbG9va2luZyBhdCB0aGUga2V5Ym9hcmQpLgorICAgVGhlc2Ugc3BlY2lhbCBrZXlzIGFyZSBtb3N0IHVzZWZ1bCB3aGVuIHdyaXRpbmcgYSBtYXBwaW5nIHRoYXQgZG9lc24ndAorbGVhdmUgSW5zZXJ0IG1vZGUuICBUaGUgZXh0cmEgdHlwaW5nIGRvZXNuJ3QgbWF0dGVyIHRoZW4uCisgICBBbiBvdmVydmlldyBvZiB0aGUga2V5cyB5b3UgY2FuIHVzZSBpbiBJbnNlcnQgbW9kZToKKworCTxDLUhvbWU+CXRvIHN0YXJ0IG9mIHRoZSBmaWxlCisJPFBhZ2VVcD4JYSB3aG9sZSBzY3JlZW5mdWwgdXAKKwk8SG9tZT4JCXRvIHN0YXJ0IG9mIGxpbmUKKwk8Uy1MZWZ0PglvbmUgd29yZCBsZWZ0CisJPEMtTGVmdD4Jb25lIHdvcmQgbGVmdAorCTxTLVJpZ2h0PglvbmUgd29yZCByaWdodAorCTxDLVJpZ2h0PglvbmUgd29yZCByaWdodAorCTxFbmQ+CQl0byBlbmQgb2YgdGhlIGxpbmUKKwk8UGFnZURvd24+CWEgd2hvbGUgc2NyZWVuZnVsIGRvd24KKwk8Qy1FbmQ+CQl0byBlbmQgb2YgdGhlIGZpbGUKKworVGhlcmUgYXJlIGEgZmV3IG1vcmUsIHNlZSB8aW5zLXNwZWNpYWwtc3BlY2lhbHwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI0LjIqCVNob3dpbmcgbWF0Y2hlcworCitXaGVuIHlvdSB0eXBlIGEgKSBpdCB3b3VsZCBiZSBuaWNlIHRvIHNlZSB3aXRoIHdoaWNoICggaXQgbWF0Y2hlcy4gIFRvIG1ha2UKK1ZpbSBkbyB0aGF0IHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpzZXQgc2hvd21hdGNoCisKK1doZW4geW91IG5vdyB0eXBlIGEgdGV4dCBsaWtlICIoZXhhbXBsZSkiLCBhcyBzb29uIGFzIHlvdSB0eXBlIHRoZSApIFZpbSB3aWxsCiticmllZmx5IG1vdmUgdGhlIGN1cnNvciB0byB0aGUgbWF0Y2hpbmcgKCwga2VlcCBpdCB0aGVyZSBmb3IgaGFsZiBhIHNlY29uZCwKK2FuZCBtb3ZlIGJhY2sgdG8gd2hlcmUgeW91IHdlcmUgdHlwaW5nLgorICAgSW4gY2FzZSB0aGVyZSBpcyBub3QgbWF0Y2hpbmcgKCwgVmltIHdpbGwgYmVlcC4gIFRoZW4geW91IGtub3cgdGhhdCB5b3UKK21pZ2h0IGhhdmUgZm9yZ290dGVuIHRoZSAoIHNvbWV3aGVyZSwgb3IgdHlwZWQgYSApIHRvbyBtYW55LgorICAgVGhlIG1hdGNoIHdpbGwgYWxzbyBiZSBzaG93biBmb3IgW10gYW5kIHt9IHBhaXJzLiAgWW91IGRvbid0IGhhdmUgdG8gd2FpdAord2l0aCB0eXBpbmcgdGhlIG5leHQgY2hhcmFjdGVyLCBhcyBzb29uIGFzIFZpbSBzZWVzIGl0IHRoZSBjdXJzb3Igd2lsbCBtb3ZlCitiYWNrIGFuZCBpbnNlcnRpbmcgY29udGludWVzIGFzIGJlZm9yZS4KKyAgIFlvdSBjYW4gY2hhbmdlIHRoZSB0aW1lIFZpbSB3YWl0cyB3aXRoIHRoZSAnbWF0Y2h0aW1lJyBvcHRpb24uICBGb3IKK2V4YW1wbGUsIHRvIG1ha2UgVmltIHdhaXQgb25lIGFuZCBhIGhhbGYgc2Vjb25kOiA+CisKKwk6c2V0IG1hdGNodGltZT0xNQorCitUaGUgdGltZSBpcyBzcGVjaWZpZWQgaW4gdGVudGhzIG9mIGEgc2Vjb25kLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNC4zKglDb21wbGV0aW9uCisKK1ZpbSBjYW4gYXV0b21hdGljYWxseSBjb21wbGV0ZSB3b3JkcyBvbiBpbnNlcnRpb24uICBZb3UgdHlwZSB0aGUgZmlyc3QgcGFydCBvZgorYSB3b3JkLCBwcmVzcyBDVFJMLVAsIGFuZCBWaW0gZ3Vlc3NlcyB0aGUgcmVzdC4KKyAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB0aGF0IHlvdSBhcmUgY3JlYXRpbmcgYSBDIHByb2dyYW0gYW5kIHdhbnQgdG8gdHlwZSBpbgordGhlIGZvbGxvd2luZzoKKworCXRvdGFsID0gY2hfYXJyYXlbMF0gKyBjaF9hcnJheVsxXSArIGNoX2FycmF5WzJdOyB+CisKK1lvdSBzdGFydCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgorCisJdG90YWwgPSBjaF9hcnJheVswXSArIGNoXyB+CisKK0F0IHRoaXMgcG9pbnQsIHlvdSB0ZWxsIFZpbSB0byBjb21wbGV0ZSB0aGUgd29yZCB1c2luZyB0aGUgY29tbWFuZCBDVFJMLVAuCitWaW0gc2VhcmNoZXMgZm9yIGEgd29yZCB0aGF0IHN0YXJ0cyB3aXRoIHdoYXQncyBpbiBmcm9udCBvZiB0aGUgY3Vyc29yLiAgSW4KK3RoaXMgY2FzZSwgaXQgaXMgImNoXyIsIHdoaWNoIG1hdGNoZXMgd2l0aCB0aGUgd29yZCBjaF9hcnJheS4gIFNvIHR5cGluZworQ1RSTC1QIGdpdmVzIHlvdSB0aGUgZm9sbG93aW5nOgorCisJdG90YWwgPSBjaF9hcnJheVswXSArIGNoX2FycmF5IH4KKworQWZ0ZXIgYSBsaXR0bGUgbW9yZSB0eXBpbmcsIHlvdSBnZXQgdGhpcyAoZW5kaW5nIGluIGEgc3BhY2UpOgorCisJdG90YWwgPSBjaF9hcnJheVswXSArIGNoX2FycmF5WzFdICsgIH4KKworSWYgeW91IG5vdyB0eXBlIENUUkwtUCBWaW0gd2lsbCBzZWFyY2ggYWdhaW4gZm9yIGEgd29yZCB0aGF0IGNvbXBsZXRlcyB0aGUKK3dvcmQgYmVmb3JlIHRoZSBjdXJzb3IuICBTaW5jZSB0aGVyZSBpcyBub3RoaW5nIGluIGZyb250IG9mIHRoZSBjdXJzb3IsIGl0CitmaW5kcyB0aGUgZmlyc3Qgd29yZCBiYWNrd2FyZHMsIHdoaWNoIGlzICJjaF9hcnJheSIuICBUeXBpbmcgQ1RSTC1QIGFnYWluCitnaXZlcyB5b3UgdGhlIG5leHQgd29yZCB0aGF0IG1hdGNoZXMsIGluIHRoaXMgY2FzZSAidG90YWwiLiAgQSB0aGlyZCBDVFJMLVAKK3NlYXJjaGVzIGZ1cnRoZXIgYmFjay4gIElmIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSwgaXQgY2F1c2VzIHRoZSBlZGl0b3IgdG8gcnVuCitvdXQgb2Ygd29yZHMsIHNvIGl0IHJldHVybnMgdG8gdGhlIG9yaWdpbmFsIHRleHQsIHdoaWNoIGlzIG5vdGhpbmcuICBBIGZvdXJ0aAorQ1RSTC1QIGNhdXNlcyB0aGUgZWRpdG9yIHRvIHN0YXJ0IG92ZXIgYWdhaW4gd2l0aCAiY2hfYXJyYXkiLgorCitUbyBzZWFyY2ggZm9yd2FyZCwgdXNlIENUUkwtTi4gIFNpbmNlIHRoZSBzZWFyY2ggd3JhcHMgYXJvdW5kIHRoZSBlbmQgb2YgdGhlCitmaWxlLCBDVFJMLU4gYW5kIENUUkwtUCB3aWxsIGZpbmQgdGhlIHNhbWUgbWF0Y2hlcywgYnV0IGluIGEgZGlmZmVyZW50CitzZXF1ZW5jZS4gIEhpbnQ6IENUUkwtTiBpcyBOZXh0LW1hdGNoIGFuZCBDVFJMLVAgaXMgUHJldmlvdXMtbWF0Y2guCisKK1RoZSBWaW0gZWRpdG9yIGdvZXMgdGhyb3VnaCBhIGxvdCBvZiBlZmZvcnQgdG8gZmluZCB3b3JkcyB0byBjb21wbGV0ZS4gIEJ5CitkZWZhdWx0LCBpdCBzZWFyY2hlcyB0aGUgZm9sbG93aW5nIHBsYWNlczoKKworCTEuIEN1cnJlbnQgZmlsZQorCTIuIEZpbGVzIGluIG90aGVyIHdpbmRvd3MKKwkzLiBPdGhlciBsb2FkZWQgZmlsZXMgKGhpZGRlbiBidWZmZXJzKQorCTQuIEZpbGVzIHdoaWNoIGFyZSBub3QgbG9hZGVkIChpbmFjdGl2ZSBidWZmZXJzKQorCTUuIFRhZyBmaWxlcworCTYuIEFsbCBmaWxlcyAjaW5jbHVkZWQgYnkgdGhlIGN1cnJlbnQgZmlsZQorCisKK09QVElPTlMKKworWW91IGNhbiBjdXN0b21pemUgdGhlIHNlYXJjaCBvcmRlciB3aXRoIHRoZSAnY29tcGxldGUnIG9wdGlvbi4KKworVGhlICdpZ25vcmVjYXNlJyBvcHRpb24gaXMgdXNlZC4gIFdoZW4gaXQgaXMgc2V0LCBjYXNlIGRpZmZlcmVuY2VzIGFyZSBpZ25vcmVkCit3aGVuIHNlYXJjaGluZyBmb3IgbWF0Y2hlcy4KKworQSBzcGVjaWFsIG9wdGlvbiBmb3IgY29tcGxldGlvbiBpcyAnaW5mZXJjYXNlJy4gIFRoaXMgaXMgdXNlZnVsIHRvIGZpbmQKK21hdGNoZXMgd2hpbGUgaWdub3JpbmcgY2FzZSAoJ2lnbm9yZWNhc2UnIG11c3QgYmUgc2V0KSBidXQgc3RpbGwgdXNpbmcgdGhlCitjYXNlIG9mIHRoZSB3b3JkIHR5cGVkIHNvIGZhci4gIFRodXMgaWYgeW91IHR5cGUgIkZvciIgYW5kIFZpbSBmaW5kcyBhIG1hdGNoCisiZm9ydHVuYXRlbHkiLCBpdCB3aWxsIHJlc3VsdCBpbiAiRm9ydHVuYXRlbHkiLgorCisKK0NPTVBMRVRJTkcgU1BFQ0lGSUMgSVRFTVMKKworSWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGxvb2tpbmcgZm9yLCB5b3UgY2FuIHVzZSB0aGVzZSBjb21tYW5kcyB0byBjb21wbGV0ZQord2l0aCBhIGNlcnRhaW4gdHlwZSBvZiBpdGVtOgorCisJQ1RSTC1YIENUUkwtRgkJZmlsZSBuYW1lcworCUNUUkwtWCBDVFJMLUwJCXdob2xlIGxpbmVzCisJQ1RSTC1YIENUUkwtRAkJbWFjcm8gZGVmaW5pdGlvbnMgKGFsc28gaW4gaW5jbHVkZWQgZmlsZXMpCisJQ1RSTC1YIENUUkwtSQkJY3VycmVudCBhbmQgaW5jbHVkZWQgZmlsZXMKKwlDVFJMLVggQ1RSTC1LCQl3b3JkcyBmcm9tIGEgZGljdGlvbmFyeQorCUNUUkwtWCBDVFJMLVQJCXdvcmRzIGZyb20gYSB0aGVzYXVydXMKKwlDVFJMLVggQ1RSTC1dCQl0YWdzCisJQ1RSTC1YIENUUkwtVgkJVmltIGNvbW1hbmQgbGluZQorCitBZnRlciBlYWNoIG9mIHRoZW0gQ1RSTC1OIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIG5leHQgbWF0Y2gsIENUUkwtUCB0byBmaW5kCit0aGUgcHJldmlvdXMgbWF0Y2guCisgICBNb3JlIGluZm9ybWF0aW9uIGZvciBlYWNoIG9mIHRoZXNlIGNvbW1hbmRzIGhlcmU6IHxpbnMtY29tcGxldGlvbnwuCisKKworQ09NUExFVElORyBGSUxFIE5BTUVTCisKK0xldCdzIHRha2UgQ1RSTC1YIENUUkwtRiBhcyBhbiBleGFtcGxlLiAgVGhpcyB3aWxsIGZpbmQgZmlsZSBuYW1lcy4gIEl0IHNjYW5zCit0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIGZpbGVzIGFuZCBkaXNwbGF5cyBlYWNoIG9uZSB0aGF0IG1hdGNoZXMgdGhlIHdvcmQgaW4KK2Zyb250IG9mIHRoZSBjdXJzb3IuCisgICBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHRoZSBjdXJyZW50CitkaXJlY3Rvcnk6CisKKwltYWluLmMgIHN1Yl9jb3VudC5jICBzdWJfZG9uZS5jICBzdWJfZXhpdC5jCisKK05vdyBlbnRlciBJbnNlcnQgbW9kZSBhbmQgc3RhcnQgdHlwaW5nOgorCisJVGhlIGV4aXQgY29kZSBpcyBpbiB0aGUgZmlsZSBzdWIgfgorCitBdCB0aGlzIHBvaW50LCB5b3UgZW50ZXIgdGhlIGNvbW1hbmQgQ1RSTC1YIENUUkwtRi4gIFZpbSBub3cgY29tcGxldGVzIHRoZQorY3VycmVudCB3b3JkICJzdWIiIGJ5IGxvb2tpbmcgYXQgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoZQorZmlyc3QgbWF0Y2ggaXMgc3ViX2NvdW50LmMuICBUaGlzIGlzIG5vdCB0aGUgb25lIHlvdSB3YW50LCBzbyB5b3UgbWF0Y2ggdGhlCituZXh0IGZpbGUgYnkgdHlwaW5nIENUUkwtTi4gIFRoaXMgbWF0Y2ggaXMgc3ViX2RvbmUuYy4gIFR5cGluZyBDVFJMLU4gYWdhaW4KK3Rha2VzIHlvdSB0byBzdWJfZXhpdC5jLiAgVGhlIHJlc3VsdHM6CisKKwlUaGUgZXhpdCBjb2RlIGlzIGluIHRoZSBmaWxlIHN1Yl9leGl0LmMgfgorCitJZiB0aGUgZmlsZSBuYW1lIHN0YXJ0cyB3aXRoIC8gKFVuaXgpIG9yIEM6XCAoTVMtV2luZG93cykgeW91IGNhbiBmaW5kIGFsbAorZmlsZXMgaW4gdGhlIGZpbGUgc3lzdGVtLiAgRm9yIGV4YW1wbGUsIHR5cGUgIi91IiBhbmQgQ1RSTC1YIENUUkwtRi4gIFRoaXMKK3dpbGwgbWF0Y2ggIi91c3IiICh0aGlzIGlzIG9uIFVuaXgpOgorCisJdGhlIGZpbGUgaXMgZm91bmQgaW4gL3Vzci8gfgorCitJZiB5b3Ugbm93IHByZXNzIENUUkwtTiB5b3UgZ28gYmFjayB0byAiL3UiLiAgSW5zdGVhZCwgdG8gYWNjZXB0IHRoZSAiL3Vzci8iCithbmQgZ28gb25lIGRpcmVjdG9yeSBsZXZlbCBkZWVwZXIsIHVzZSBDVFJMLVggQ1RSTC1GIGFnYWluOgorCisJdGhlIGZpbGUgaXMgZm91bmQgaW4gL3Vzci9YMTFSNi8gfgorCitUaGUgcmVzdWx0cyBkZXBlbmQgb24gd2hhdCBpcyBmb3VuZCBpbiB5b3VyIGZpbGUgc3lzdGVtLCBvZiBjb3Vyc2UuICBUaGUKK21hdGNoZXMgYXJlIHNvcnRlZCBhbHBoYWJldGljYWxseS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuNCoJUmVwZWF0aW5nIGFuIGluc2VydAorCitJZiB5b3UgcHJlc3MgQ1RSTC1BLCB0aGUgZWRpdG9yIGluc2VydHMgdGhlIHRleHQgeW91IHR5cGVkIHRoZSBsYXN0IHRpbWUgeW91Cit3ZXJlIGluIEluc2VydCBtb2RlLgorICAgQXNzdW1lLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3UgaGF2ZSBhIGZpbGUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgZm9sbG93aW5nOgorCisJImZpbGUuaCIgfgorCS8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgorCitZb3UgZWRpdCB0aGlzIGZpbGUgYnkgaW5zZXJ0aW5nICIjaW5jbHVkZSAiIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0CitsaW5lOgorCisJI2luY2x1ZGUgImZpbGUuaCIgfgorCS8qIE1haW4gcHJvZ3JhbSBiZWdpbnMgKi8gfgorCitZb3UgZ28gZG93biB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgdXNpbmcgdGhlIGNvbW1hbmRzICJqXiIuICBZb3UKK25vdyBzdGFydCB0byBpbnNlcnQgYSBuZXcgIiNpbmNsdWRlIiBsaW5lLiAgU28geW91IHR5cGU6ID4KKworCWkgQ1RSTC1BCisKK1RoZSByZXN1bHQgaXMgYXMgZm9sbG93czoKKworCSNpbmNsdWRlICJmaWxlLmgiIH4KKwkjaW5jbHVkZSAvKiBNYWluIHByb2dyYW0gYmVnaW5zICovIH4KKworVGhlICIjaW5jbHVkZSAiIHdhcyBpbnNlcnRlZCBiZWNhdXNlIENUUkwtQSBpbnNlcnRzIHRoZSB0ZXh0IG9mIHRoZSBwcmV2aW91cworaW5zZXJ0LiAgTm93IHlvdSB0eXBlICAibWFpbi5oIjxFbnRlcj4gIHRvIGZpbmlzaCB0aGUgbGluZToKKworCisJI2luY2x1ZGUgImZpbGUuaCIgfgorCSNpbmNsdWRlICJtYWluLmgiIH4KKwkvKiBNYWluIHByb2dyYW0gYmVnaW5zICovIH4KKworVGhlIENUUkwtQCBjb21tYW5kIGRvZXMgYSBDVFJMLUEgYW5kIHRoZW4gZXhpdHMgSW5zZXJ0IG1vZGUuICBUaGF0J3MgYSBxdWljaword2F5IG9mIGRvaW5nIGV4YWN0bHkgdGhlIHNhbWUgaW5zZXJ0aW9uIGFnYWluLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNC41KglDb3B5aW5nIGZyb20gYW5vdGhlciBsaW5lCisKK1RoZSBDVFJMLVkgY29tbWFuZCBpbnNlcnRzIHRoZSBjaGFyYWN0ZXIgYWJvdmUgdGhlIGN1cnNvci4gIFRoaXMgaXMgdXNlZnVsCit3aGVuIHlvdSBhcmUgZHVwbGljYXRpbmcgYSBwcmV2aW91cyBsaW5lLiAgRm9yIGV4YW1wbGUsIHlvdSBoYXZlIHRoaXMgbGluZSBvZgorQyBjb2RlOgorCisJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CisKK05vdyB5b3UgbmVlZCB0byB0eXBlIHRoZSBzYW1lIGxpbmUsIGJ1dCB3aXRoICJzX3ByZXYiIGluc3RlYWQgb2YgInNfbmV4dCIuCitTdGFydCB0aGUgbmV3IGxpbmUsIGFuZCBwcmVzcyBDVFJMLVkgMTQgdGltZXMsIHVudGlsIHlvdSBhcmUgYXQgdGhlICJuIiBvZgorIm5leHQiOgorCisJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CisJYl9hcnJheVtpXS0+c18gfgorCitOb3cgeW91IHR5cGUgInByZXYiOgorCisJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CisJYl9hcnJheVtpXS0+c19wcmV2IH4KKworQ29udGludWUgcHJlc3NpbmcgQ1RSTC1ZIHVudGlsIHRoZSBmb2xsb3dpbmcgIm5leHQiOgorCisJYl9hcnJheVtpXS0+c19uZXh0ID0gYV9hcnJheVtpXS0+c19uZXh0OyB+CisJYl9hcnJheVtpXS0+c19wcmV2ID0gYV9hcnJheVtpXS0+c18gfgorCitOb3cgdHlwZSAicHJldjsiIHRvIGZpbmlzaCBpdCBvZmYuCisKK1RoZSBDVFJMLUUgY29tbWFuZCBhY3RzIGxpa2UgQ1RSTC1ZIGV4Y2VwdCBpdCBpbnNlcnRzIHRoZSBjaGFyYWN0ZXIgYmVsb3cgdGhlCitjdXJzb3IuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI0LjYqCUluc2VydGluZyBhIHJlZ2lzdGVyCisKK1RoZSBjb21tYW5kIENUUkwtUiB7cmVnaXN0ZXJ9IGluc2VydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3Rlci4gIFRoaXMgaXMKK3VzZWZ1bCB0byBhdm9pZCBoYXZpbmcgdG8gdHlwZSBhIGxvbmcgd29yZC4gIEZvciBleGFtcGxlLCB5b3UgbmVlZCB0byB0eXBlCit0aGlzOgorCisJciA9IFZlcnlMb25nRnVuY3Rpb24oYSkgKyBWZXJ5TG9uZ0Z1bmN0aW9uKGIpICsgVmVyeUxvbmdGdW5jdGlvbihjKSB+CisKK1RoZSBmdW5jdGlvbiBuYW1lIGlzIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgZmlsZS4gIEVkaXQgdGhhdCBmaWxlIGFuZCBtb3ZlIHRoZQorY3Vyc29yIG9uIHRvcCBvZiB0aGUgZnVuY3Rpb24gbmFtZSB0aGVyZSwgYW5kIHlhbmsgaXQgaW50byByZWdpc3RlciB2OiA+CisKKwkidnlpdworCisidiBpcyB0aGUgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbiwgInlpdyIgaXMgeWFuay1pbm5lci13b3JkLiAgTm93IGVkaXQgdGhlIGZpbGUKK3doZXJlIHRoZSBuZXcgbGluZSBpcyB0byBiZSBpbnNlcnRlZCwgYW5kIHR5cGUgdGhlIGZpcnN0IGxldHRlcnM6CisKKwlyID0gfgorCitOb3cgdXNlIENUUkwtUiB2IHRvIGluc2VydCB0aGUgZnVuY3Rpb24gbmFtZToKKworCXIgPSBWZXJ5TG9uZ0Z1bmN0aW9uIH4KKworWW91IGNvbnRpbnVlIHRvIHR5cGUgdGhlIGNoYXJhY3RlcnMgaW4gYmV0d2VlbiB0aGUgZnVuY3Rpb24gbmFtZSwgYW5kIHVzZQorQ1RSTC1SIHYgdHdvIHRpbWVzIG1vcmUuCisgICBZb3UgY291bGQgaGF2ZSBkb25lIHRoZSBzYW1lIHdpdGggY29tcGxldGlvbi4gIFVzaW5nIGEgcmVnaXN0ZXIgaXMgdXNlZnVsCit3aGVuIHRoZXJlIGFyZSBtYW55IHdvcmRzIHRoYXQgc3RhcnQgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXJzLgorCitJZiB0aGUgcmVnaXN0ZXIgY29udGFpbnMgY2hhcmFjdGVycyBzdWNoIGFzIDxCUz4gb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLAordGhleSBhcmUgaW50ZXJwcmV0ZWQgYXMgaWYgdGhleSBoYWQgYmVlbiB0eXBlZCBmcm9tIHRoZSBrZXlib2FyZC4gIElmIHlvdSBkbworbm90IHdhbnQgdGhpcyB0byBoYXBwZW4gKHlvdSByZWFsbHkgd2FudCB0aGUgPEJTPiB0byBiZSBpbnNlcnRlZCBpbiB0aGUgdGV4dCksCit1c2UgdGhlIGNvbW1hbmQgQ1RSTC1SIENUUkwtUiB7cmVnaXN0ZXJ9LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNC43KglBYmJyZXZpYXRpb25zCisKK0FuIGFiYnJldmlhdGlvbiBpcyBhIHNob3J0IHdvcmQgdGhhdCB0YWtlcyB0aGUgcGxhY2Ugb2YgYSBsb25nIG9uZS4gIEZvcgorZXhhbXBsZSwgImFkIiBzdGFuZHMgZm9yICJhZHZlcnRpc2VtZW50Ii4gIFZpbSBlbmFibGVzIHlvdSB0byB0eXBlIGFuCithYmJyZXZpYXRpb24gYW5kIHRoZW4gd2lsbCBhdXRvbWF0aWNhbGx5IGV4cGFuZCBpdCBmb3IgeW91LgorICAgVG8gdGVsbCBWaW0gdG8gZXhwYW5kICJhZCIgaW50byAiYWR2ZXJ0aXNlbWVudCIgZXZlcnkgdGltZSB5b3UgaW5zZXJ0IGl0LAordXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOmlhYmJyZXYgYWQgYWR2ZXJ0aXNlbWVudAorCitOb3csIHdoZW4geW91IHR5cGUgImFkIiwgdGhlIHdob2xlIHdvcmQgImFkdmVydGlzZW1lbnQiIHdpbGwgYmUgaW5zZXJ0ZWQgaW50bwordGhlIHRleHQuICBUaGlzIGlzIHRyaWdnZXJlZCBieSB0eXBpbmcgYSBjaGFyYWN0ZXIgdGhhdCBjYW4ndCBiZSBwYXJ0IG9mIGEKK3dvcmQsIGZvciBleGFtcGxlIGEgc3BhY2U6CisKKwlXaGF0IElzIEVudGVyZWQJCVdoYXQgWW91IFNlZQorCUkgc2F3IHRoZSBhCQlJIHNhdyB0aGUgYSB+CisJSSBzYXcgdGhlIGFkCQlJIHNhdyB0aGUgYWQgfgorCUkgc2F3IHRoZSBhZDxTcGFjZT4JSSBzYXcgdGhlIGFkdmVydGlzZW1lbnQ8U3BhY2U+IH4KKworVGhlIGV4cGFuc2lvbiBkb2Vzbid0IGhhcHBlbiB3aGVuIHR5cGluZyBqdXN0ICJhZCIuICBUaGF0IGFsbG93cyB5b3UgdG8gdHlwZSBhCit3b3JkIGxpa2UgImFkZCIsIHdoaWNoIHdpbGwgbm90IGdldCBleHBhbmRlZC4gIE9ubHkgd2hvbGUgd29yZHMgYXJlIGNoZWNrZWQKK2ZvciBhYmJyZXZpYXRpb25zLgorCisKK0FCQlJFVklBVElORyBTRVZFUkFMIFdPUkRTCisKK0l0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSBhbiBhYmJyZXZpYXRpb24gdGhhdCByZXN1bHRzIGluIG11bHRpcGxlIHdvcmRzLiAgRm9yCitleGFtcGxlLCB0byBkZWZpbmUgIkpCIiBhcyAiSmFjayBCZW5ueSIsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTppYWJicmV2IEpCIEphY2sgQmVubnkKKworQXMgYSBwcm9ncmFtbWVyLCBJIHVzZSB0d28gcmF0aGVyIHVudXN1YWwgYWJicmV2aWF0aW9uczogPgorCisJOmlhYmJyZXYgI2IgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwk6aWFiYnJldiAjZSA8U3BhY2U+KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworVGhlc2UgYXJlIHVzZWQgZm9yIGNyZWF0aW5nIGJveGVkIGNvbW1lbnRzLiAgVGhlIGNvbW1lbnQgc3RhcnRzIHdpdGggI2IsIHdoaWNoCitkcmF3cyB0aGUgdG9wIGxpbmUuICBJIHRoZW4gdHlwZSB0aGUgY29tbWVudCB0ZXh0IGFuZCB1c2UgI2UgdG8gZHJhdyB0aGUKK2JvdHRvbSBsaW5lLgorICAgTm90aWNlIHRoYXQgdGhlICNlIGFiYnJldmlhdGlvbiBiZWdpbnMgd2l0aCBhIHNwYWNlLiAgSW4gb3RoZXIgd29yZHMsIHRoZQorZmlyc3QgdHdvIGNoYXJhY3RlcnMgYXJlIHNwYWNlLXN0YXIuICBVc3VhbGx5IFZpbSBpZ25vcmVzIHNwYWNlcyBiZXR3ZWVuIHRoZQorYWJicmV2aWF0aW9uIGFuZCB0aGUgZXhwYW5zaW9uLiAgVG8gYXZvaWQgdGhhdCBwcm9ibGVtLCBJIHNwZWxsIHNwYWNlIGFzIHNldmVuCitjaGFyYWN0ZXJzOiA8LCBTLCBwLCBhLCBjLCBlLCA+LgorCisJTm90ZToKKwkiOmlhYmJyZXYiIGlzIGEgbG9uZyB3b3JkIHRvIHR5cGUuICAiOmlhYiIgd29ya3MganVzdCBhcyB3ZWxsLgorCVRoYXQncyBhYmJyZXZpYXRpbmcgdGhlIGFiYnJldmlhdGUgY29tbWFuZCEKKworCitGSVhJTkcgVFlQSU5HIE1JU1RBS0VTCisKK0l0J3MgdmVyeSBjb21tb24gdG8gbWFrZSB0aGUgc2FtZSB0eXBpbmcgbWlzdGFrZSBldmVyeSB0aW1lLiAgRm9yIGV4YW1wbGUsCit0eXBpbmcgInRlaCIgaW5zdGVhZCBvZiAidGhlIi4gIFlvdSBjYW4gZml4IHRoaXMgd2l0aCBhbiBhYmJyZXZpYXRpb246ID4KKworCTphYmJyZXZpYXRlIHRlaCB0aGUKKworWW91IGNhbiBhZGQgYSB3aG9sZSBsaXN0IG9mIHRoZXNlLiAgQWRkIG9uZSBlYWNoIHRpbWUgeW91IGRpc2NvdmVyIGEgY29tbW9uCittaXN0YWtlLgorCisKK0xJU1RJTkcgQUJCUkVWSUFUSU9OUworCitUaGUgIjphYmJyZXZpYXRlIiBjb21tYW5kIGxpc3RzIHRoZSBhYmJyZXZpYXRpb25zOgorCisJOmFiYnJldmlhdGUKKwlpICAjZQkJICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWkgICNiCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlpICBKQgkJIEphY2sgQmVubnkKKwlpICBhZAkJIGFkdmVydGlzZW1lbnQKKwkhICB0ZWgJCSB0aGUKKworVGhlICJpIiBpbiB0aGUgZmlyc3QgY29sdW1uIGluZGljYXRlcyBJbnNlcnQgbW9kZS4gIFRoZXNlIGFiYnJldmlhdGlvbnMgYXJlCitvbmx5IGFjdGl2ZSBpbiBJbnNlcnQgbW9kZS4gIE90aGVyIHBvc3NpYmxlIGNoYXJhY3RlcnMgYXJlOgorCisJYwlDb21tYW5kLWxpbmUgbW9kZQkJCTpjYWJicmV2CisJIQlib3RoIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUJOmFiYnJldmlhdGUKKworU2luY2UgYWJicmV2aWF0aW9ucyBhcmUgbm90IG9mdGVuIHVzZWZ1bCBpbiBDb21tYW5kLWxpbmUgbW9kZSwgeW91IHdpbGwgbW9zdGx5Cit1c2UgdGhlICI6aWFiYnJldiIgY29tbWFuZC4gIFRoYXQgYXZvaWRzLCBmb3IgZXhhbXBsZSwgdGhhdCAiYWQiIGdldHMgZXhwYW5kZWQKK3doZW4gdHlwaW5nIGEgY29tbWFuZCBsaWtlOiA+CisKKwk6ZWRpdCBhZAorCisKK0RFTEVUSU5HIEFCQlJFVklBVElPTlMKKworVG8gZ2V0IHJpZCBvZiBhbiBhYmJyZXZpYXRpb24sIHVzZSB0aGUgIjp1bmFiYnJldmlhdGUiIGNvbW1hbmQuICBTdXBwb3NlIHlvdQoraGF2ZSB0aGUgZm9sbG93aW5nIGFiYnJldmlhdGlvbjogPgorCisJOmFiYnJldmlhdGUgQGYgZnJlc2gKKworWW91IGNhbiByZW1vdmUgaXQgd2l0aCB0aGlzIGNvbW1hbmQ6ID4KKworCTp1bmFiYnJldmlhdGUgQGYKKworV2hpbGUgeW91IHR5cGUgdGhpcywgeW91IHdpbGwgbm90aWNlIHRoYXQgQGYgaXMgZXhwYW5kZWQgdG8gImZyZXNoIi4gIERvbid0Cit3b3JyeSBhYm91dCB0aGlzLCBWaW0gdW5kZXJzdGFuZHMgaXQgYW55d2F5IChleGNlcHQgd2hlbiB5b3UgaGF2ZSBhbgorYWJicmV2aWF0aW9uIGZvciAiZnJlc2giLCBidXQgdGhhdCdzIHZlcnkgdW5saWtlbHkpLgorICAgVG8gcmVtb3ZlIGFsbCB0aGUgYWJicmV2aWF0aW9uczogPgorCisJOmFiY2xlYXIKKworIjp1bmFiYnJldmlhdGUiIGFuZCAiOmFiY2xlYXIiIGFsc28gY29tZSBpbiB0aGUgdmFyaWFudHMgZm9yIEluc2VydCBtb2RlCisoIjppdW5hYmJyZXZpYXRlIGFuZCAiOmlhYmNsZWFyIikgYW5kIENvbW1hbmQtbGluZSBtb2RlICgiOmN1bmFiYnJldmlhdGUiIGFuZAorIjpjYWJjbGVhciIpLgorCisKK1JFTUFQUElORyBBQkJSRVZJQVRJT05TCisKK1RoZXJlIGlzIG9uZSB0aGluZyB0byB3YXRjaCBvdXQgZm9yIHdoZW4gZGVmaW5pbmcgYW4gYWJicmV2aWF0aW9uOiBUaGUKK3Jlc3VsdGluZyBzdHJpbmcgc2hvdWxkIG5vdCBiZSBtYXBwZWQuICBGb3IgZXhhbXBsZTogPgorCisJOmFiYnJldmlhdGUgQGEgYWRkZXIKKwk6aW1hcCBkZCBkaXNrLWRvb3IKKworV2hlbiB5b3Ugbm93IHR5cGUgQGEsIHlvdSB3aWxsIGdldCAiYWRpc2stZG9vcmVyIi4gIFRoYXQncyBub3Qgd2hhdCB5b3Ugd2FudC4KK1RvIGF2b2lkIHRoaXMsIHVzZSB0aGUgIjpub3JlYWJicmV2IiBjb21tYW5kLiAgSXQgZG9lcyB0aGUgc2FtZSBhcworIjphYmJyZXZpYXRlIiwgYnV0IGF2b2lkcyB0aGF0IHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIHVzZWQgZm9yIG1hcHBpbmdzOiA+CisKKwk6bm9yZWFiYnJldiBAYSBhZGRlcgorCitGb3J0dW5hdGVseSwgaXQncyB1bmxpa2VseSB0aGF0IHRoZSByZXN1bHQgb2YgYW4gYWJicmV2aWF0aW9uIGlzIG1hcHBlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuOCoJRW50ZXJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCisKK1RoZSBDVFJMLVYgY29tbWFuZCBpcyB1c2VkIHRvIGluc2VydCB0aGUgbmV4dCBjaGFyYWN0ZXIgbGl0ZXJhbGx5LiAgSW4gb3RoZXIKK3dvcmRzLCBhbnkgc3BlY2lhbCBtZWFuaW5nIHRoZSBjaGFyYWN0ZXIgaGFzLCBpdCB3aWxsIGJlIGlnbm9yZWQuICBGb3IKK2V4YW1wbGU6ID4KKworCUNUUkwtViA8RXNjPgorCitJbnNlcnRzIGFuIGVzY2FwZSBjaGFyYWN0ZXIuICBUaHVzIHlvdSBkb24ndCBsZWF2ZSBJbnNlcnQgbW9kZS4gIChEb24ndCB0eXBlCit0aGUgc3BhY2UgYWZ0ZXIgQ1RSTC1WLCBpdCdzIG9ubHkgdG8gbWFrZSB0aGlzIGVhc2llciB0byByZWFkKS4KKworCU5vdGU6CisJT24gTVMtV2luZG93cyBDVFJMLVYgaXMgdXNlZCB0byBwYXN0ZSB0ZXh0LiAgVXNlIENUUkwtUSBpbnN0ZWFkIG9mCisJQ1RSTC1WLiAgT24gVW5peCwgb24gdGhlIG90aGVyIGhhbmQsIENUUkwtUSBkb2VzIG5vdCB3b3JrIG9uIHNvbWUKKwl0ZXJtaW5hbHMsIGJlY2F1c2UgaXQgaGFzIGEgc3BlY2lhbCBtZWFuaW5nLgorCitZb3UgY2FuIGFsc28gdXNlIHRoZSBjb21tYW5kIENUUkwtViB7ZGlnaXRzfSB0byBpbnNlcnQgYSBjaGFyYWN0ZXIgd2l0aCB0aGUKK2RlY2ltYWwgbnVtYmVyIHtkaWdpdHN9LiAgRm9yIGV4YW1wbGUsIHRoZSBjaGFyYWN0ZXIgbnVtYmVyIDEyNyBpcyB0aGUgPERlbD4KK2NoYXJhY3RlciAoYnV0IG5vdCBuZWNlc3NhcmlseSB0aGUgPERlbD4ga2V5ISkuICBUbyBpbnNlcnQgPERlbD4gdHlwZTogPgorCisJQ1RSTC1WIDEyNworCitZb3UgY2FuIGVudGVyIGNoYXJhY3RlcnMgdXAgdG8gMjU1IHRoaXMgd2F5LiAgV2hlbiB5b3UgdHlwZSBmZXdlciB0aGFuIHR3bworZGlnaXRzLCBhIG5vbi1kaWdpdCB3aWxsIHRlcm1pbmF0ZSB0aGUgY29tbWFuZC4gIFRvIGF2b2lkIHRoZSBuZWVkIG9mIHR5cGluZyBhCitub24tZGlnaXQsIHByZXBlbmQgb25lIG9yIHR3byB6ZXJvcyB0byBtYWtlIHRocmVlIGRpZ2l0cy4KKyAgIEFsbCB0aGUgbmV4dCBjb21tYW5kcyBpbnNlcnQgYSA8VGFiPiBhbmQgdGhlbiBhIGRvdDoKKworCUNUUkwtViA5LgorCUNUUkwtViAwOS4KKwlDVFJMLVYgMDA5LgorCitUbyBlbnRlciBhIGNoYXJhY3RlciBpbiBoZXhhZGVjaW1hbCwgdXNlIGFuICJ4IiBhZnRlciB0aGUgQ1RSTC1WOiA+CisKKwlDVFJMLVYgeDdmCisKK1RoaXMgYWxzbyBnb2VzIHVwIHRvIGNoYXJhY3RlciAyNTUgKENUUkwtViB4ZmYpLiAgWW91IGNhbiB1c2UgIm8iIHRvIHR5cGUgYQorY2hhcmFjdGVyIGFzIGFuIG9jdGFsIG51bWJlciBhbmQgdHdvIG1vcmUgbWV0aG9kcyBhbGxvdyB5b3UgdG8gdHlwZSB1cCB0bworYSAxNiBiaXQgYW5kIGEgMzIgYml0IG51bWJlciAoZS5nLiwgZm9yIGEgVW5pY29kZSBjaGFyYWN0ZXIpOiA+CisKKwlDVFJMLVYgbzEyMworCUNUUkwtViB1MTIzNAorCUNUUkwtViBVMTIzNDU2NzgKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuOSoJRGlncmFwaHMKKworU29tZSBjaGFyYWN0ZXJzIGFyZSBub3Qgb24gdGhlIGtleWJvYXJkLiAgRm9yIGV4YW1wbGUsIHRoZSBjb3B5cmlnaHQgY2hhcmFjdGVyCisoqSkuICBUbyB0eXBlIHRoZXNlIGNoYXJhY3RlcnMgaW4gVmltLCB5b3UgdXNlIGRpZ3JhcGhzLCB3aGVyZSB0d28gY2hhcmFjdGVycworcmVwcmVzZW50IG9uZS4gIFRvIGVudGVyIGEgqSwgZm9yIGV4YW1wbGUsIHlvdSBwcmVzcyB0aHJlZSBrZXlzOiA+CisKKwlDVFJMLUsgQ28KKworVG8gZmluZCBvdXQgd2hhdCBkaWdyYXBocyBhcmUgYXZhaWxhYmxlLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6ZGlncmFwaHMKKworVmltIHdpbGwgZGlzcGxheSB0aGUgZGlncmFwaCB0YWJsZS4gIEhlcmUgYXJlIHRocmVlIGxpbmVzIG9mIGl0OgorCisgIEFDIH5fIDE1OSAgTlMgfCAgMTYwICAhSSChICAxNjEgIEN0IKIgIDE2MiAgUGQgoyAgMTYzICBDdSCkICAxNjQgIFllIKUgIDE2NSB+CisgIEJCIKYgIDE2NiAgU0UgpyAgMTY3ICAnOiCoICAxNjggIENvIKkgIDE2OSAgLWEgqiAgMTcwICA8PCCrICAxNzEgIE5PIKwgIDE3MiB+CisgIC0tIK0gIDE3MyAgUmcgriAgMTc0ICAnbSCvICAxNzUgIERHILAgIDE3NiAgKy0gsSAgMTc3ICAyUyCyICAxNzggIDNTILMgIDE3OSB+CisKK1RoaXMgc2hvd3MsIGZvciBleGFtcGxlLCB0aGF0IHRoZSBkaWdyYXBoIHlvdSBnZXQgYnkgdHlwaW5nIENUUkwtSyBQZCBpcyB0aGUKK2NoYXJhY3RlciAooykuICBUaGlzIGlzIGNoYXJhY3RlciBudW1iZXIgMTYzIChkZWNpbWFsKS4KKyAgIFBkIGlzIHNob3J0IGZvciBQb3VuZC4gIE1vc3QgZGlncmFwaHMgYXJlIHNlbGVjdGVkIHRvIGdpdmUgeW91IGEgaGludCBhYm91dAordGhlIGNoYXJhY3RlciB0aGV5IHdpbGwgcHJvZHVjZS4gIElmIHlvdSBsb29rIHRocm91Z2ggdGhlIGxpc3QgeW91IHdpbGwKK3VuZGVyc3RhbmQgdGhlIGxvZ2ljLgorICAgWW91IGNhbiBleGNoYW5nZSB0aGUgZmlyc3QgYW5kIHNlY29uZCBjaGFyYWN0ZXIsIGlmIHRoZXJlIGlzIG5vIGRpZ3JhcGggZm9yCit0aGF0IGNvbWJpbmF0aW9uLiAgVGh1cyBDVFJMLUsgZFAgYWxzbyB3b3Jrcy4gIFNpbmNlIHRoZXJlIGlzIG5vIGRpZ3JhcGggZm9yCisiZFAiIFZpbSB3aWxsIGFsc28gc2VhcmNoIGZvciBhICJQZCIgZGlncmFwaC4KKworCU5vdGU6CisJVGhlIGRpZ3JhcGhzIGRlcGVuZCBvbiB0aGUgY2hhcmFjdGVyIHNldCB0aGF0IFZpbSBhc3N1bWVzIHlvdSBhcmUKKwl1c2luZy4gIE9uIE1TLURPUyB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBNUy1XaW5kb3dzLiAgQWx3YXlzIHVzZQorCSI6ZGlncmFwaHMiIHRvIGZpbmQgb3V0IHdoaWNoIGRpZ3JhcGhzIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlLgorCitZb3UgY2FuIGRlZmluZSB5b3VyIG93biBkaWdyYXBocy4gIEV4YW1wbGU6ID4KKworCTpkaWdyYXBoIGEiIOQKKworVGhpcyBkZWZpbmVzIHRoYXQgQ1RSTC1LIGEiIGluc2VydHMgYW4g5CBjaGFyYWN0ZXIuICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUKK2NoYXJhY3RlciB3aXRoIGEgZGVjaW1hbCBudW1iZXIuICBUaGlzIGRlZmluZXMgdGhlIHNhbWUgZGlncmFwaDogPgorCisJOmRpZ3JhcGggYSIgMjI4CisKK01vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGlncmFwaHMgaGVyZTogfGRpZ3JhcGhzfAorICAgQW5vdGhlciB3YXkgdG8gaW5zZXJ0IHNwZWNpYWwgY2hhcmFjdGVycyBpcyB3aXRoIGEga2V5bWFwLiAgTW9yZSBhYm91dCB0aGF0CitoZXJlOiB8NDUuNXwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjQuMTAqCU5vcm1hbCBtb2RlIGNvbW1hbmRzCisKK0luc2VydCBtb2RlIG9mZmVycyBhIGxpbWl0ZWQgbnVtYmVyIG9mIGNvbW1hbmRzLiAgSW4gTm9ybWFsIG1vZGUgeW91IGhhdmUgbWFueQorbW9yZS4gIFdoZW4geW91IHdhbnQgdG8gdXNlIG9uZSwgeW91IHVzdWFsbHkgbGVhdmUgSW5zZXJ0IG1vZGUgd2l0aCA8RXNjPiwKK2V4ZWN1dGUgdGhlIE5vcm1hbCBtb2RlIGNvbW1hbmQsIGFuZCByZS1lbnRlciBJbnNlcnQgbW9kZSB3aXRoICJpIiBvciAiYSIuCisgICBUaGVyZSBpcyBhIHF1aWNrZXIgd2F5LiAgV2l0aCBDVFJMLU8ge2NvbW1hbmR9IHlvdSBjYW4gZXhlY3V0ZSBhbnkgTm9ybWFsCittb2RlIGNvbW1hbmQgZnJvbSBJbnNlcnQgbW9kZS4gIEZvciBleGFtcGxlLCB0byBkZWxldGUgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZQorZW5kIG9mIHRoZSBsaW5lOiA+CisKKwlDVFJMLU8gRAorCitZb3UgY2FuIGV4ZWN1dGUgb25seSBvbmUgTm9ybWFsIG1vZGUgY29tbWFuZCB0aGlzIHdheS4gIEJ1dCB5b3UgY2FuIHNwZWNpZnkgYQorcmVnaXN0ZXIgb3IgYSBjb3VudC4gIEEgbW9yZSBjb21wbGljYXRlZCBleGFtcGxlOiA+CisKKwlDVFJMLU8gImczZHcKKworVGhpcyBkZWxldGVzIHVwIHRvIHRoZSB0aGlyZCB3b3JkIGludG8gcmVnaXN0ZXIgZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8yNS50eHR8ICBFZGl0aW5nIGZvcm1hdHRlZCB0ZXh0CisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzI1LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlNzJmYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yNS50eHQKQEAgLTAsMCArMSw1NzggQEAKKyp1c3JfMjUudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBKdW4gMjEKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAorCisKK1RleHQgaGFyZGx5IGV2ZXIgY29tZXMgaW4gb25lIHNlbnRlbmNlIHBlciBsaW5lLiAgVGhpcyBjaGFwdGVyIGlzIGFib3V0CiticmVha2luZyBzZW50ZW5jZXMgdG8gbWFrZSB0aGVtIGZpdCBvbiBhIHBhZ2UgYW5kIG90aGVyIGZvcm1hdHRpbmcuCitWaW0gYWxzbyBoYXMgdXNlZnVsIGZlYXR1cmVzIGZvciBlZGl0aW5nIHNpbmdsZS1saW5lIHBhcmFncmFwaHMgYW5kIHRhYmxlcy4KKworfDI1LjF8CUJyZWFraW5nIGxpbmVzCit8MjUuMnwJQWxpZ25pbmcgdGV4dAorfDI1LjN8CUluZGVudHMgYW5kIHRhYnMKK3wyNS40fAlEZWFsaW5nIHdpdGggbG9uZyBsaW5lcworfDI1LjV8CUVkaXRpbmcgdGFibGVzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzI2LnR4dHwgIFJlcGVhdGluZworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMjQudHh0fCAgSW5zZXJ0aW5nIHF1aWNrbHkKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI1LjEqCUJyZWFraW5nIGxpbmVzCisKK1ZpbSBoYXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIHRoYXQgbWFrZSBkZWFsaW5nIHdpdGggdGV4dCBlYXNpZXIuICBCeSBkZWZhdWx0LAordGhlIGVkaXRvciBkb2VzIG5vdCBwZXJmb3JtIGF1dG9tYXRpYyBsaW5lIGJyZWFrcy4gIEluIG90aGVyIHdvcmRzLCB5b3UgaGF2ZQordG8gcHJlc3MgPEVudGVyPiB5b3Vyc2VsZi4gIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSB3cml0aW5nIHByb2dyYW1zIHdoZXJlCit5b3Ugd2FudCB0byBkZWNpZGUgd2hlcmUgdGhlIGxpbmUgZW5kcy4gIEl0IGlzIG5vdCBzbyBnb29kIHdoZW4geW91IGFyZQorY3JlYXRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgd2FudCB0aGUgdGV4dCB0byBiZSBhdCBtb3N0IDcwIGNoYXJhY3RlciB3aWRlLgorICAgSWYgeW91IHNldCB0aGUgJ3RleHR3aWR0aCcgb3B0aW9uLCBWaW0gYXV0b21hdGljYWxseSBpbnNlcnRzIGxpbmUgYnJlYWtzLgorU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IHdhbnQgYSB2ZXJ5IG5hcnJvdyBjb2x1bW4gb2Ygb25seSAzMAorY2hhcmFjdGVycy4gIFlvdSBuZWVkIHRvIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6c2V0IHRleHR3aWR0aD0zMAorCitOb3cgeW91IHN0YXJ0IHR5cGluZyAocnVsZXIgYWRkZWQpOgorCisJCSAxCSAgIDIJICAgICAzCisJMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKKwlJIHRhdWdodCBwcm9ncmFtbWluZyBmb3IgYSB3aGkgfgorCitJZiB5b3UgdHlwZSAibCIgbmV4dCwgdGhpcyBtYWtlcyB0aGUgbGluZSBsb25nZXIgdGhhbiB0aGUgMzAtY2hhcmFjdGVyIGxpbWl0LgorV2hlbiBWaW0gc2VlcyB0aGlzLCBpdCBpbnNlcnRzIGEgbGluZSBicmVhayBhbmQgeW91IGdldCB0aGUgZm9sbG93aW5nOgorCisJCSAxCSAgIDIJICAgICAzCisJMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKKwlJIHRhdWdodCBwcm9ncmFtbWluZyBmb3IgYSB+CisJd2hpbCB+CisKK0NvbnRpbnVpbmcgb24sIHlvdSBjYW4gdHlwZSBpbiB0aGUgcmVzdCBvZiB0aGUgcGFyYWdyYXBoOgorCisJCSAxCSAgIDIJICAgICAzCisJMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKKwlJIHRhdWdodCBwcm9ncmFtbWluZyBmb3IgYSB+CisJd2hpbGUuIE9uZSB0aW1lLCBJIHdhcyBzdG9wcGVkIH4KKwlieSB0aGUgRm9ydCBXb3J0aCBwb2xpY2UsIH4KKwliZWNhdXNlIG15IGhvbWV3b3JrIHdhcyB0b28gfgorCWhhcmQuIFRydWUgc3RvcnkuIH4KKworWW91IGRvIG5vdCBoYXZlIHRvIHR5cGUgbmV3bGluZXM7IFZpbSBwdXRzIHRoZW0gaW4gYXV0b21hdGljYWxseS4KKworCU5vdGU6CisJVGhlICd3cmFwJyBvcHRpb24gbWFrZXMgVmltIGRpc3BsYXkgbGluZXMgd2l0aCBhIGxpbmUgYnJlYWssIGJ1dCB0aGlzCisJZG9lc24ndCBpbnNlcnQgYSBsaW5lIGJyZWFrIGluIHRoZSBmaWxlLgorCisKK1JFRk9STUFUVElORworCitUaGUgVmltIGVkaXRvciBpcyBub3QgYSB3b3JkIHByb2Nlc3Nvci4gIEluIGEgd29yZCBwcm9jZXNzb3IsIGlmIHlvdSBkZWxldGUKK3NvbWV0aGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhZ3JhcGgsIHRoZSBsaW5lIGJyZWFrcyBhcmUgcmV3b3JrZWQuICBJbgorVmltIHRoZXkgYXJlIG5vdDsgc28gaWYgeW91IGRlbGV0ZSB0aGUgd29yZCAicHJvZ3JhbW1pbmciIGZyb20gdGhlIGZpcnN0IGxpbmUsCithbGwgeW91IGdldCBpcyBhIHNob3J0IGxpbmU6CisKKwkJIDEJICAgMgkgICAgIDMKKwkxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQorCUkgdGF1Z2h0IGZvciBhIH4KKwl3aGlsZS4gT25lIHRpbWUsIEkgd2FzIHN0b3BwZWQgfgorCWJ5IHRoZSBGb3J0IFdvcnRoIHBvbGljZSwgfgorCWJlY2F1c2UgbXkgaG9tZXdvcmsgd2FzIHRvbyB+CisJaGFyZC4gVHJ1ZSBzdG9yeS4gfgorCitUaGlzIGRvZXMgbm90IGxvb2sgZ29vZC4gIFRvIGdldCB0aGUgcGFyYWdyYXBoIGludG8gc2hhcGUgeW91IHVzZSB0aGUgImdxIgorb3BlcmF0b3IuCisgICBMZXQncyBmaXJzdCB1c2UgdGhpcyB3aXRoIGEgVmlzdWFsIHNlbGVjdGlvbi4gIFN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0CitsaW5lLCB0eXBlOiA+CisKKwl2NGpncQorCisidiIgdG8gc3RhcnQgVmlzdWFsIG1vZGUsICI0aicgdG8gbW92ZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGggYW5kIHRoZW4KK3RoZSAiZ3EiIG9wZXJhdG9yLiAgVGhlIHJlc3VsdCBpczoKKworCQkgMQkgICAyCSAgICAgMworCTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CisJSSB0YXVnaHQgZm9yIGEgd2hpbGUuIE9uZSB+CisJdGltZSwgSSB3YXMgc3RvcHBlZCBieSB0aGUgfgorCUZvcnQgV29ydGggcG9saWNlLCBiZWNhdXNlIG15IH4KKwlob21ld29yayB3YXMgdG9vIGhhcmQuIFRydWUgfgorCXN0b3J5LiB+CisKK05vdGU6IHRoZXJlIGlzIGEgd2F5IHRvIGRvIGF1dG9tYXRpYyBmb3JtYXR0aW5nIGZvciBzcGVjaWZpYyB0eXBlcyBvZiB0ZXh0CitsYXlvdXRzLCBzZWUgfGF1dG8tZm9ybWF0fC4KKworU2luY2UgImdxIiBpcyBhbiBvcGVyYXRvciwgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSB0aHJlZSB3YXlzIHRvIHNlbGVjdCB0aGUKK3RleHQgaXQgd29ya3Mgb246IFdpdGggVmlzdWFsIG1vZGUsIHdpdGggYSBtb3ZlbWVudCBhbmQgd2l0aCBhIHRleHQgb2JqZWN0LgorICAgVGhlIGV4YW1wbGUgYWJvdmUgY291bGQgYWxzbyBiZSBkb25lIHdpdGggImdxNGoiLiAgVGhhdCdzIGxlc3MgdHlwaW5nLCBidXQKK3lvdSBoYXZlIHRvIGtub3cgdGhlIGxpbmUgY291bnQuICBBIG1vcmUgdXNlZnVsIG1vdGlvbiBjb21tYW5kIGlzICJ9Ii4gIFRoaXMKK21vdmVzIHRvIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBUaHVzICJncX0iIGZvcm1hdHMgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZQorZW5kIG9mIHRoZSBjdXJyZW50IHBhcmFncmFwaC4KKyAgIEEgdmVyeSB1c2VmdWwgdGV4dCBvYmplY3QgdG8gdXNlIHdpdGggImdxIiBpcyB0aGUgcGFyYWdyYXBoLiAgVHJ5IHRoaXM6ID4KKworCWdxYXAKKworImFwIiBzdGFuZHMgZm9yICJhLXBhcmFncmFwaCIuICBUaGlzIGZvcm1hdHMgdGhlIHRleHQgb2Ygb25lIHBhcmFncmFwaAorKHNlcGFyYXRlZCBieSBlbXB0eSBsaW5lcykuICBBbHNvIHRoZSBwYXJ0IGJlZm9yZSB0aGUgY3Vyc29yLgorICAgSWYgeW91IGhhdmUgeW91ciBwYXJhZ3JhcGhzIHNlcGFyYXRlZCBieSBlbXB0eSBsaW5lcywgeW91IGNhbiBmb3JtYXQgdGhlCit3aG9sZSBmaWxlIGJ5IHR5cGluZyB0aGlzOiA+CisKKwlnZ2dxRworCisiZ2ciIHRvIG1vdmUgdG8gdGhlIGZpcnN0IGxpbmUsICJncUciIHRvIGZvcm1hdCB1bnRpbCB0aGUgbGFzdCBsaW5lLgorICAgV2FybmluZzogSWYgeW91ciBwYXJhZ3JhcGhzIGFyZSBub3QgcHJvcGVybHkgc2VwYXJhdGVkLCB0aGV5IHdpbGwgYmUgam9pbmVkCit0b2dldGhlci4gIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gaGF2ZSBhIGxpbmUgd2l0aCBhIHNwYWNlIG9yIFRhYi4gIFRoYXQncyBhCitibGFuayBsaW5lLCBidXQgbm90IGFuIGVtcHR5IGxpbmUuCisKK1ZpbSBpcyBhYmxlIGZvcm1hdCBtb3JlIHRoYW4ganVzdCBwbGFpbiB0ZXh0LiAgU2VlIHxmby10YWJsZXwgZm9yIGhvdyB0bworY2hhbmdlIHRoaXMuICBTZWUgdGhlICdqb2luc3BhY2VzJyBvcHRpb24gdG8gY2hhbmdlIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHVzZWQKK2FmdGVyIGEgZnVsbCBzdG9wLgorICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGFuIGV4dGVybmFsIHByb2dyYW0gZm9yIGZvcm1hdHRpbmcuICBUaGlzIGlzIHVzZWZ1bAoraWYgeW91ciB0ZXh0IGNhbid0IGJlIHByb3Blcmx5IGZvcm1hdHRlZCB3aXRoIFZpbSdzIGJ1aWx0aW4gY29tbWFuZC4gIFNlZSB0aGUKKydmb3JtYXRwcmcnIG9wdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjUuMioJQWxpZ25pbmcgdGV4dAorCitUbyBjZW50ZXIgYSByYW5nZSBvZiBsaW5lcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOntyYW5nZX1jZW50ZXIgW3dpZHRoXQorCit7cmFuZ2V9IGlzIHRoZSB1c3VhbCBjb21tYW5kLWxpbmUgcmFuZ2UuICBbd2lkdGhdIGlzIGFuIG9wdGlvbmFsIGxpbmUgd2lkdGggdG8KK3VzZSBmb3IgY2VudGVyaW5nLiAgSWYgW3dpZHRoXSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YKKyd0ZXh0d2lkdGgnLiAgKElmICd0ZXh0d2lkdGgnIGlzIDAsIHRoZSBkZWZhdWx0IGlzIDgwLikKKyAgIEZvciBleGFtcGxlOiA+CisKKwk6MSw1Y2VudGVyIDQwCisKK3Jlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzoKKworICAgICAgIEkgdGF1Z2h0IGZvciBhIHdoaWxlLiBPbmUgfgorICAgICAgIHRpbWUsIEkgd2FzIHN0b3BwZWQgYnkgdGhlIH4KKyAgICAgRm9ydCBXb3J0aCBwb2xpY2UsIGJlY2F1c2UgbXkgfgorICAgICAgaG9tZXdvcmsgd2FzIHRvbyBoYXJkLiBUcnVlIH4KKwkJIHN0b3J5LiB+CisKKworUklHSFQgQUxJR05NRU5UCisKK1NpbWlsYXJseSwgdGhlICI6cmlnaHQiIGNvbW1hbmQgcmlnaHQtanVzdGlmaWVzIHRoZSB0ZXh0OiA+CisKKwk6MSw1cmlnaHQgMzcKKworZ2l2ZXMgdGhpcyByZXN1bHQ6CisKKwkgICAgSSB0YXVnaHQgZm9yIGEgd2hpbGUuIE9uZSB+CisJICAgdGltZSwgSSB3YXMgc3RvcHBlZCBieSB0aGUgfgorCUZvcnQgV29ydGggcG9saWNlLCBiZWNhdXNlIG15IH4KKwkgIGhvbWV3b3JrIHdhcyB0b28gaGFyZC4gVHJ1ZSB+CisJCQkgICAgICAgc3RvcnkuIH4KKworTEVGVCBBTElHTk1FTlQKKworRmluYWxseSB0aGVyZSBpcyB0aGlzIGNvbW1hbmQ6ID4KKworCTp7cmFuZ2V9bGVmdCBbbWFyZ2luXQorCitVbmxpa2UgIjpjZW50ZXIiIGFuZCAiOnJpZ2h0IiwgaG93ZXZlciwgdGhlIGFyZ3VtZW50IHRvICI6bGVmdCIgaXMgbm90IHRoZQorbGVuZ3RoIG9mIHRoZSBsaW5lLiAgSW5zdGVhZCBpdCBpcyB0aGUgbGVmdCBtYXJnaW4uICBJZiBpdCBpcyBvbWl0dGVkLCB0aGUKK3RleHQgd2lsbCBiZSBwdXQgYWdhaW5zdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBzY3JlZW4gKHVzaW5nIGEgemVybyBtYXJnaW4KK3dvdWxkIGRvIHRoZSBzYW1lKS4gIElmIGl0IGlzIDUsIHRoZSB0ZXh0IHdpbGwgYmUgaW5kZW50ZWQgNSBzcGFjZXMuICBGb3IKK2V4YW1wbGUsIHVzZSB0aGVzZSBjb21tYW5kczogPgorCisJOjFsZWZ0IDUKKwk6Miw1bGVmdAorCitUaGlzIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzoKKworCSAgICAgSSB0YXVnaHQgZm9yIGEgd2hpbGUuIE9uZSB+CisJdGltZSwgSSB3YXMgc3RvcHBlZCBieSB0aGUgfgorCUZvcnQgV29ydGggcG9saWNlLCBiZWNhdXNlIG15IH4KKwlob21ld29yayB3YXMgdG9vIGhhcmQuIFRydWUgfgorCXN0b3J5LiB+CisKKworSlVTVElGWUlORyBURVhUCisKK1ZpbSBoYXMgbm8gYnVpbHQtaW4gd2F5IG9mIGp1c3RpZnlpbmcgdGV4dC4gIEhvd2V2ZXIsIHRoZXJlIGlzIGEgbmVhdCBtYWNybworcGFja2FnZSB0aGF0IGRvZXMgdGhlIGpvYi4gIFRvIHVzZSB0aGlzIHBhY2thZ2UsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworY29tbWFuZDogPgorCisJOnJ1bnRpbWUgbWFjcm9zL2p1c3RpZnkudmltCisKK1RoaXMgVmltIHNjcmlwdCBmaWxlIGRlZmluZXMgYSBuZXcgdmlzdWFsIGNvbW1hbmQgIl9qIi4gVG8ganVzdGlmeSBhIGJsb2NrIG9mCit0ZXh0LCBoaWdobGlnaHQgdGhlIHRleHQgaW4gVmlzdWFsIG1vZGUgYW5kIHRoZW4gZXhlY3V0ZSAiX2oiLgorICAgTG9vayBpbiB0aGUgZmlsZSBmb3IgbW9yZSBleHBsYW5hdGlvbnMuICBUbyBnbyB0aGVyZSwgZG8gImdmIiBvbiB0aGlzIG5hbWU6CiskVklNUlVOVElNRS9tYWNyb3MvanVzdGlmeS52aW0uCisKK0FuIGFsdGVybmF0aXZlIGlzIHRvIGZpbHRlciB0aGUgdGV4dCB0aHJvdWdoIGFuIGV4dGVybmFsIHByb2dyYW0uICBFeGFtcGxlOiA+CisKKwk6JSFmbXQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjUuMyoJSW5kZW50cyBhbmQgdGFicworCitJbmRlbnRzIGNhbiBiZSB1c2VkIHRvIG1ha2UgdGV4dCBzdGFuZCBvdXQgZnJvbSB0aGUgcmVzdC4gIFRoZSBleGFtcGxlIHRleHRzCitpbiB0aGlzIG1hbnVhbCwgZm9yIGV4YW1wbGUsIGFyZSBpbmRlbnRlZCBieSBlaWdodCBzcGFjZXMgb3IgYSB0YWIuICBZb3Ugd291bGQKK25vcm1hbGx5IGVudGVyIHRoaXMgYnkgdHlwaW5nIGEgdGFiIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmUuICBUYWtlIHRoaXMKK3RleHQ6CisJdGhlIGZpcnN0IGxpbmUgfgorCXRoZSBzZWNvbmQgbGluZSB+CisKK1RoaXMgaXMgZW50ZXJlZCBieSB0eXBpbmcgYSB0YWIsIHNvbWUgdGV4dCwgPEVudGVyPiwgdGFiIGFuZCBtb3JlIHRleHQuCisgICBUaGUgJ2F1dG9pbmRlbnQnIG9wdGlvbiBpbnNlcnRzIGluZGVudHMgYXV0b21hdGljYWxseTogPgorCisJOnNldCBhdXRvaW5kZW50CisKK1doZW4gYSBuZXcgbGluZSBpcyBzdGFydGVkIGl0IGdldHMgdGhlIHNhbWUgaW5kZW50IGFzIHRoZSBwcmV2aW91cyBsaW5lLiAgSW4KK3RoZSBhYm92ZSBleGFtcGxlLCB0aGUgdGFiIGFmdGVyIHRoZSA8RW50ZXI+IGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KKworCitJTkNSRUFTSU5HIElOREVOVAorCitUbyBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIGluZGVudCBpbiBhIGxpbmUsIHVzZSB0aGUgIj4iIG9wZXJhdG9yLiAgT2Z0ZW4gdGhpcworaXMgdXNlZCBhcyAiPj4iLCB3aGljaCBhZGRzIGluZGVudCB0byB0aGUgY3VycmVudCBsaW5lLgorICAgVGhlIGFtb3VudCBvZiBpbmRlbnQgYWRkZWQgaXMgc3BlY2lmaWVkIHdpdGggdGhlICdzaGlmdHdpZHRoJyBvcHRpb24uICBUaGUKK2RlZmF1bHQgdmFsdWUgaXMgOC4gIFRvIG1ha2UgIj4+IiBpbnNlcnQgZm91ciBzcGFjZXMgd29ydGggb2YgaW5kZW50LCBmb3IKK2V4YW1wbGUsIHR5cGUgdGhpczogPgorCisJOnNldCBzaGlmdHdpZHRoPTQKKworV2hlbiB1c2VkIG9uIHRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZXhhbXBsZSB0ZXh0LCB0aGlzIGlzIHdoYXQgeW91IGdldDoKKworCXRoZSBmaXJzdCBsaW5lIH4KKwkgICAgdGhlIHNlY29uZCBsaW5lIH4KKworIjQ+PiIgd2lsbCBpbmNyZWFzZSB0aGUgaW5kZW50IG9mIGZvdXIgbGluZXMuCisKKworVEFCU1RPUAorCitJZiB5b3Ugd2FudCB0byBtYWtlIGluZGVudHMgYSBtdWx0aXBsZSBvZiA0LCB5b3Ugc2V0ICdzaGlmdHdpZHRoJyB0byA0LiAgQnV0Cit3aGVuIHByZXNzaW5nIGEgVGFiIHlvdSBzdGlsbCBnZXQgOCBzcGFjZXMgd29ydGggb2YgaW5kZW50LiAgVG8gY2hhbmdlIHRoaXMsCitzZXQgdGhlICdzb2Z0dGFic3RvcCcgb3B0aW9uOiA+CisKKwk6c2V0IHNvZnR0YWJzdG9wPTQKKworVGhpcyB3aWxsIG1ha2UgdGhlIDxUYWI+IGtleSBpbnNlcnQgNCBzcGFjZXMgd29ydGggb2YgaW5kZW50LiAgSWYgdGhlcmUgYXJlCithbHJlYWR5IGZvdXIgc3BhY2VzLCBhIDxUYWI+IGNoYXJhY3RlciBpcyB1c2VkIChzYXZpbmcgc2V2ZW4gY2hhcmFjdGVycyBpbiB0aGUKK2ZpbGUpLiAgKElmIHlvdSBhbHdheXMgd2FudCBzcGFjZXMgYW5kIG5vIHRhYiBjaGFyYWN0ZXJzLCBzZXQgdGhlICdleHBhbmR0YWInCitvcHRpb24uKQorCisJTm90ZToKKwlZb3UgY291bGQgc2V0IHRoZSAndGFic3RvcCcgb3B0aW9uIHRvIDQuICBIb3dldmVyLCBpZiB5b3UgZWRpdCB0aGUKKwlmaWxlIGFub3RoZXIgdGltZSwgd2l0aCAndGFic3RvcCcgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDgsIGl0CisJd2lsbCBsb29rIHdyb25nLiAgSW4gb3RoZXIgcHJvZ3JhbXMgYW5kIHdoZW4gcHJpbnRpbmcgdGhlIGluZGVudCB3aWxsCisJYWxzbyBiZSB3cm9uZy4gIFRoZXJlZm9yZSBpdCBpcyByZWNvbW1lbmRlZCB0byBrZWVwICd0YWJzdG9wJyBhdCBlaWdodAorCWFsbCB0aGUgdGltZS4gIFRoYXQncyB0aGUgc3RhbmRhcmQgdmFsdWUgZXZlcnl3aGVyZS4KKworCitDSEFOR0lORyBUQUJTCisKK1lvdSBlZGl0IGEgZmlsZSB3aGljaCB3YXMgd3JpdHRlbiB3aXRoIGEgdGFic3RvcCBvZiAzLiAgSW4gVmltIGl0IGxvb2tzIHVnbHksCitiZWNhdXNlIGl0IHVzZXMgdGhlIG5vcm1hbCB0YWJzdG9wIHZhbHVlIG9mIDguICBZb3UgY2FuIGZpeCB0aGlzIGJ5IHNldHRpbmcKKyd0YWJzdG9wJyB0byAzLiAgQnV0IHlvdSBoYXZlIHRvIGRvIHRoaXMgZXZlcnkgdGltZSB5b3UgZWRpdCB0aGlzIGZpbGUuCisgICBWaW0gY2FuIGNoYW5nZSB0aGUgdXNlIG9mIHRhYnN0b3BzIGluIHlvdXIgZmlsZS4gIEZpcnN0LCBzZXQgJ3RhYnN0b3AnIHRvCittYWtlIHRoZSBpbmRlbnRzIGxvb2sgZ29vZCwgdGhlbiB1c2UgdGhlICI6cmV0YWIiIGNvbW1hbmQ6ID4KKworCTpzZXQgdGFic3RvcD0zCisJOnJldGFiIDgKKworVGhlICI6cmV0YWIiIGNvbW1hbmQgd2lsbCBjaGFuZ2UgJ3RhYnN0b3AnIHRvIDgsIHdoaWxlIGNoYW5naW5nIHRoZSB0ZXh0IHN1Y2gKK3RoYXQgaXQgbG9va3MgdGhlIHNhbWUuICBJdCBjaGFuZ2VzIHNwYW5zIG9mIHdoaXRlIHNwYWNlIGludG8gdGFicyBhbmQgc3BhY2VzCitmb3IgdGhpcy4gIFlvdSBjYW4gbm93IHdyaXRlIHRoZSBmaWxlLiAgTmV4dCB0aW1lIHlvdSBlZGl0IGl0IHRoZSBpbmRlbnRzIHdpbGwKK2JlIHJpZ2h0IHdpdGhvdXQgc2V0dGluZyBhbiBvcHRpb24uCisgICBXYXJuaW5nOiBXaGVuIHVzaW5nICI6cmV0YWIiIG9uIGEgcHJvZ3JhbSwgaXQgbWF5IGNoYW5nZSB3aGl0ZSBzcGFjZSBpbnNpZGUKK2Egc3RyaW5nIGNvbnN0YW50LiAgVGhlcmVmb3JlIGl0J3MgYSBnb29kIGhhYml0IHRvIHVzZSAiXHQiIGluc3RlYWQgb2YgYQorcmVhbCB0YWIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI1LjQqCURlYWxpbmcgd2l0aCBsb25nIGxpbmVzCisKK1NvbWV0aW1lcyB5b3Ugd2lsbCBiZSBlZGl0aW5nIGEgZmlsZSB0aGF0IGlzIHdpZGVyIHRoYW4gdGhlIG51bWJlciBvZiBjb2x1bW5zCitpbiB0aGUgd2luZG93LiAgV2hlbiB0aGF0IG9jY3VycywgVmltIHdyYXBzIHRoZSBsaW5lcyBzbyB0aGF0IGV2ZXJ5dGhpbmcgZml0cworb24gdGhlIHNjcmVlbi4KKyAgIElmIHlvdSBzd2l0Y2ggdGhlICd3cmFwJyBvcHRpb24gb2ZmLCBlYWNoIGxpbmUgaW4gdGhlIGZpbGUgc2hvd3MgdXAgYXMgb25lCitsaW5lIG9uIHRoZSBzY3JlZW4uICBUaGVuIHRoZSBlbmRzIG9mIHRoZSBsb25nIGxpbmVzIGRpc2FwcGVhciBvZmYgdGhlIHNjcmVlbgordG8gdGhlIHJpZ2h0LgorICAgV2hlbiB5b3UgbW92ZSB0aGUgY3Vyc29yIHRvIGEgY2hhcmFjdGVyIHRoYXQgY2FuJ3QgYmUgc2VlbiwgVmltIHdpbGwgc2Nyb2xsCit0aGUgdGV4dCB0byBzaG93IGl0LiAgVGhpcyBpcyBsaWtlIG1vdmluZyBhIHZpZXdwb3J0IG92ZXIgdGhlIHRleHQgaW4gdGhlCitob3Jpem9udGFsIGRpcmVjdGlvbi4KKyAgIEJ5IGRlZmF1bHQsIFZpbSBkb2VzIG5vdCBkaXNwbGF5IGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW4gdGhlIEdVSS4gIElmIHlvdQord2FudCB0byBlbmFibGUgb25lLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6c2V0IGd1aW9wdGlvbnMrPWIKKworT25lIGhvcml6b250YWwgc2Nyb2xsYmFyIHdpbGwgYXBwZWFyIGF0IHRoZSBib3R0b20gb2YgdGhlIFZpbSB3aW5kb3cuCisKK0lmIHlvdSBkb24ndCBoYXZlIGEgc2Nyb2xsYmFyIG9yIGRvbid0IHdhbnQgdG8gdXNlIGl0LCB1c2UgdGhlc2UgY29tbWFuZHMgdG8KK3Njcm9sbCB0aGUgdGV4dC4gIFRoZSBjdXJzb3Igd2lsbCBzdGF5IGluIHRoZSBzYW1lIHBsYWNlLCBidXQgaXQncyBtb3ZlIGJhY2sKK2ludG8gdGhlIHZpc2libGUgdGV4dCBpZiBuZWNlc3NhcnkuCisKKwl6aAkJc2Nyb2xsIHJpZ2h0CisJNHpoCQlzY3JvbGwgZm91ciBjaGFyYWN0ZXJzIHJpZ2h0CisJekgJCXNjcm9sbCBoYWxmIGEgd2luZG93IHdpZHRoIHJpZ2h0CisJemUJCXNjcm9sbCByaWdodCB0byBwdXQgdGhlIGN1cnNvciBhdCB0aGUgZW5kCisJemwJCXNjcm9sbCBsZWZ0CisJNHpsCQlzY3JvbGwgZm91ciBjaGFyYWN0ZXJzIGxlZnQKKwl6TAkJc2Nyb2xsIGhhbGYgYSB3aW5kb3cgd2lkdGggbGVmdAorCXpzCQlzY3JvbGwgbGVmdCB0byBwdXQgdGhlIGN1cnNvciBhdCB0aGUgc3RhcnQKKworTGV0J3MgYXR0ZW1wdCB0byBzaG93IHRoaXMgd2l0aCBvbmUgbGluZSBvZiB0ZXh0LiAgVGhlIGN1cnNvciBpcyBvbiB0aGUgInciIG9mCisid2hpY2giLiAgVGhlICJjdXJyZW50IHdpbmRvdyIgYWJvdmUgdGhlIGxpbmUgaW5kaWNhdGVzIHRoZSB0ZXh0IHRoYXQgaXMKK2N1cnJlbnRseSB2aXNpYmxlLiAgVGhlICJ3aW5kb3cicyBiZWxvdyB0aGUgdGV4dCBpbmRpY2F0ZSB0aGUgdGV4dCB0aGF0IGlzCit2aXNpYmxlIGFmdGVyIHRoZSBjb21tYW5kIGxlZnQgb2YgaXQuCisKKwkJCSAgICAgIHw8LS0gY3VycmVudCB3aW5kb3cgLS0+fAorCQlzb21lIGxvbmcgdGV4dCwgcGFydCBvZiB3aGljaCBpcyB2aXNpYmxlIGluIHRoZSB3aW5kb3cgfgorCXplCSAgfDwtLQkgICB3aW5kb3cgICAgIC0tPnwKKwl6SAkgICB8PC0tICAgICB3aW5kb3cgICAgIC0tPnwKKwk0emgJCSAgfDwtLQkgICB3aW5kb3cgICAgIC0tPnwKKwl6aAkJICAgICB8PC0tICAgICB3aW5kb3cJIC0tPnwKKwl6bAkJICAgICAgIHw8LS0Jd2luZG93CSAgIC0tPnwKKwk0emwJCQkgIHw8LS0JICAgd2luZG93ICAgICAtLT58CisJekwJCQkJfDwtLQkgd2luZG93ICAgICAtLT58CisJenMJCQkgICAgICAgfDwtLQl3aW5kb3cJICAgLS0+fAorCisKK01PVklORyBXSVRIIFdSQVAgT0ZGCisKK1doZW4gJ3dyYXAnIGlzIG9mZiBhbmQgdGhlIHRleHQgaGFzIHNjcm9sbGVkIGhvcml6b250YWxseSwgeW91IGNhbiB1c2UgdGhlCitmb2xsb3dpbmcgY29tbWFuZHMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGEgY2hhcmFjdGVyIHlvdSBjYW4gc2VlLiAgVGh1cyB0ZXh0CitsZWZ0IGFuZCByaWdodCBvZiB0aGUgd2luZG93IGlzIGlnbm9yZWQuICBUaGVzZSBuZXZlciBjYXVzZSB0aGUgdGV4dCB0bworc2Nyb2xsOgorCisJZzAJCXRvIGZpcnN0IHZpc2libGUgY2hhcmFjdGVyIGluIHRoaXMgbGluZQorCWdeCQl0byBmaXJzdCBub24tYmxhbmsgdmlzaWJsZSBjaGFyYWN0ZXIgaW4gdGhpcyBsaW5lCisJZ20JCXRvIG1pZGRsZSBvZiB0aGlzIGxpbmUKKwlnJAkJdG8gbGFzdCB2aXNpYmxlIGNoYXJhY3RlciBpbiB0aGlzIGxpbmUKKworCQl8PC0tCSB3aW5kb3cgICAgLS0+fAorCXNvbWUgbG9uZyAgICB0ZXh0LCBwYXJ0IG9mIHdoaWNoIGlzIHZpc2libGUgfgorCQkgZzAgIGdeICAgIGdtCSAgICAgZyQKKworCitCUkVBS0lORyBBVCBXT1JEUwkJCQkqZWRpdC1uby1icmVhayoKKworV2hlbiBwcmVwYXJpbmcgdGV4dCBmb3IgdXNlIGJ5IGFub3RoZXIgcHJvZ3JhbSwgeW91IG1pZ2h0IGhhdmUgdG8gbWFrZQorcGFyYWdyYXBocyB3aXRob3V0IGEgbGluZSBicmVhay4gIEEgZGlzYWR2YW50YWdlIG9mIHVzaW5nICdub3dyYXAnIGlzIHRoYXQgeW91CitjYW4ndCBzZWUgdGhlIHdob2xlIHNlbnRlbmNlIHlvdSBhcmUgd29ya2luZyBvbi4gIFdoZW4gJ3dyYXAnIGlzIG9uLCB3b3JkcyBhcmUKK2Jyb2tlbiBoYWxmd2F5LCB3aGljaCBtYWtlcyB0aGVtIGhhcmQgdG8gcmVhZC4KKyAgIEEgZ29vZCBzb2x1dGlvbiBmb3IgZWRpdGluZyB0aGlzIGtpbmQgb2YgcGFyYWdyYXBoIGlzIHNldHRpbmcgdGhlCisnbGluZWJyZWFrJyBvcHRpb24uICBWaW0gdGhlbiBicmVha3MgbGluZXMgYXQgYW4gYXBwcm9wcmlhdGUgcGxhY2Ugd2hlbgorZGlzcGxheWluZyB0aGUgbGluZS4gIFRoZSB0ZXh0IGluIHRoZSBmaWxlIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgV2l0aG91dCAnbGluZWJyZWFrJyB0ZXh0IG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8bGV0dGVyIGdlbmVyYXRpb24gcHJvZ3JhbSBmb3IgYSBifAorCXxhbmsuICBUaGV5IHdhbnRlZCB0byBzZW5kIG91dCBhIHN8CisJfHBlY2lhbCwgcGVyc29uYWxpemVkIGxldHRlciB0byB0aHwKKwl8ZWlyIHJpY2hlc3QgMTAwMCBjdXN0b21lcnMuICBVbmZvfAorCXxydHVuYXRlbHkgZm9yIHRoZSBwcm9ncmFtbWVyLCBoZSB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK0FmdGVyOiA+CisKKwk6c2V0IGxpbmVicmVhaworCitpdCBsb29rcyBsaWtlIHRoaXM6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxsZXR0ZXIgZ2VuZXJhdGlvbiBwcm9ncmFtIGZvciBhICB8CisJfGJhbmsuICBUaGV5IHdhbnRlZCB0byBzZW5kIG91dCBhIHwKKwl8c3BlY2lhbCwgcGVyc29uYWxpemVkIGxldHRlciB0byAgfAorCXx0aGVpciByaWNoZXN0IDEwMDAgY3VzdG9tZXJzLiAgICB8CisJfFVuZm9ydHVuYXRlbHkgZm9yIHRoZSBwcm9ncmFtbWVyLHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitSZWxhdGVkIG9wdGlvbnM6CisnYnJlYWthdCcgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHdoZXJlIGEgYnJlYWsgY2FuIGJlIGluc2VydGVkLgorJ3Nob3dicmVhaycgc3BlY2lmaWVzIGEgc3RyaW5nIHRvIHNob3cgYXQgdGhlIHN0YXJ0IG9mIGJyb2tlbiBsaW5lLgorU2V0ICd0ZXh0d2lkdGgnIHRvIHplcm8gdG8gYXZvaWQgYSBwYXJhZ3JhcGggdG8gYmUgc3BsaXQuCisKKworTU9WSU5HIEJZIFZJU0lCTEUgTElORVMKKworVGhlICJqIiBhbmQgImsiIGNvbW1hbmRzIG1vdmUgdG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIGxpbmVzLiAgV2hlbiB1c2VkIG9uCithIGxvbmcgbGluZSwgdGhpcyBtZWFucyBtb3ZpbmcgYSBsb3Qgb2Ygc2NyZWVuIGxpbmVzIGF0IG9uY2UuCisgICBUbyBtb3ZlIG9ubHkgb25lIHNjcmVlbiBsaW5lLCB1c2UgdGhlICJnaiIgYW5kICJnayIgY29tbWFuZHMuICBXaGVuIGEgbGluZQorZG9lc24ndCB3cmFwIHRoZXkgZG8gdGhlIHNhbWUgYXMgImoiIGFuZCAiayIuICBXaGVuIHRoZSBsaW5lIGRvZXMgd3JhcCwgdGhleQorbW92ZSB0byBhIGNoYXJhY3RlciBkaXNwbGF5ZWQgb25lIGxpbmUgYmVsb3cgb3IgYWJvdmUuCisgICBZb3UgbWlnaHQgbGlrZSB0byB1c2UgdGhlc2UgbWFwcGluZ3MsIHdoaWNoIGJpbmQgdGhlc2UgbW92ZW1lbnQgY29tbWFuZHMgdG8KK3RoZSBjdXJzb3Iga2V5czogPgorCisJOm1hcCA8VXA+IGdrCisJOm1hcCA8RG93bj4gZ2oKKworCitUVVJOSU5HIEEgUEFSQUdSQVBIIElOVE8gT05FIExJTkUKKworSWYgeW91IHdhbnQgdG8gaW1wb3J0IHRleHQgaW50byBhIHByb2dyYW0gbGlrZSBNUy1Xb3JkLCBlYWNoIHBhcmFncmFwaCBzaG91bGQKK2JlIGEgc2luZ2xlIGxpbmUuICBJZiB5b3VyIHBhcmFncmFwaHMgYXJlIGN1cnJlbnRseSBzZXBhcmF0ZWQgd2l0aCBlbXB0eQorbGluZXMsIHRoaXMgaXMgaG93IHlvdSB0dXJuIGVhY2ggcGFyYWdyYXBoIGludG8gYSBzaW5nbGUgbGluZTogPgorCisJOmcvLi8sL14kL2pvaW4KKworVGhhdCBsb29rcyBjb21wbGljYXRlZC4gIExldCdzIGJyZWFrIGl0IHVwIGluIHBpZWNlczoKKworCTpnLy4vCQlBICI6Z2xvYmFsIiBjb21tYW5kIHRoYXQgZmluZHMgYWxsIGxpbmVzIHRoYXQgY29udGFpbgorCQkJYXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4KKwkgICAgICwvXiQvCUEgcmFuZ2UsIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgbGluZSAodGhlIG5vbi1lbXB0eQorCQkJbGluZSkgdW50aWwgYW4gZW1wdHkgbGluZS4KKwkJICBqb2luCVRoZSAiOmpvaW4iIGNvbW1hbmQgam9pbnMgdGhlIHJhbmdlIG9mIGxpbmVzIHRvZ2V0aGVyCisJCQlpbnRvIG9uZSBsaW5lLgorCitTdGFydGluZyB3aXRoIHRoaXMgdGV4dCwgY29udGFpbmluZyBlaWdodCBsaW5lcyBicm9rZW4gYXQgY29sdW1uIDMwOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfEEgbGV0dGVyIGdlbmVyYXRpb24gcHJvZ3JhbQkgICB8CisJfGZvciBhIGJhbmsuICBUaGV5IHdhbnRlZCB0bwkgICB8CisJfHNlbmQgb3V0IGEgc3BlY2lhbCwJCSAgIHwKKwl8cGVyc29uYWxpemVkIGxldHRlci4JCSAgIHwKKwl8CQkJCSAgIHwKKwl8VG8gdGhlaXIgcmljaGVzdCAxMDAwCQkgICB8CisJfGN1c3RvbWVycy4gIFVuZm9ydHVuYXRlbHkgZm9yCSAgIHwKKwl8dGhlIHByb2dyYW1tZXIsCQkgICB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1lvdSBlbmQgdXAgd2l0aCB0d28gbGluZXM6CisKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8QSBsZXR0ZXIgZ2VuZXJhdGlvbiBwcm9ncmFtIGZvciBhIHwKKwl8YmFuay4JVGhleSB3YW50ZWQgdG8gc2VuZCBvdXQgYSBzfAorCXxwZWNpYWwsIHBlcnNvbmFsaXplZCBsZXR0ZXIuCSAgIHwKKwl8VG8gdGhlaXIgcmljaGVzdCAxMDAwIGN1c3RvbWVycy4gIHwKKwl8VW5mb3J0dW5hdGVseSBmb3IgdGhlIHByb2dyYW1tZXIsIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIHdoZW4gdGhlIHNlcGFyYXRpbmcgbGluZSBpcyBibGFuayBidXQgbm90IGVtcHR5Oword2hlbiBpdCBjb250YWlucyBzcGFjZXMgYW5kL29yIHRhYnMuICBUaGlzIGNvbW1hbmQgZG9lcyB3b3JrIHdpdGggYmxhbmsgbGluZXM6Cis+CisJOmcvXFMvLC9eXHMqJC9qb2luCisKK1RoaXMgc3RpbGwgcmVxdWlyZXMgYSBibGFuayBvciBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgZm9yIHRoZSBsYXN0CitwYXJhZ3JhcGggdG8gYmUgam9pbmVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNS41KglFZGl0aW5nIHRhYmxlcworCitTdXBwb3NlIHlvdSBhcmUgZWRpdGluZyBhIHRhYmxlIHdpdGggZm91ciBjb2x1bW5zOgorCisJbmljZSB0YWJsZQkgIHRlc3QgMQl0ZXN0IDIJICAgIHRlc3QgMyB+CisJaW5wdXQgQQkJICAwLjUzNCB+CisJaW5wdXQgQgkJICAwLjkxMyB+CisKK1lvdSBuZWVkIHRvIGVudGVyIG51bWJlcnMgaW4gdGhlIHRoaXJkIGNvbHVtbi4gIFlvdSBjb3VsZCBtb3ZlIHRvIHRoZSBzZWNvbmQKK2xpbmUsIHVzZSAiQSIsIGVudGVyIGEgbG90IG9mIHNwYWNlcyBhbmQgdHlwZSB0aGUgdGV4dC4KKyAgIEZvciB0aGlzIGtpbmQgb2YgZWRpdGluZyB0aGVyZSBpcyBhIHNwZWNpYWwgb3B0aW9uOiA+CisKKwlzZXQgdmlydHVhbGVkaXQ9YWxsCisKK05vdyB5b3UgY2FuIG1vdmUgdGhlIGN1cnNvciB0byBwb3NpdGlvbnMgd2hlcmUgdGhlcmUgaXNuJ3QgYW55IHRleHQuICBUaGlzIGlzCitjYWxsZWQgInZpcnR1YWwgc3BhY2UiLiAgRWRpdGluZyBhIHRhYmxlIGlzIGEgbG90IGVhc2llciB0aGlzIHdheS4KKyAgIE1vdmUgdGhlIGN1cnNvciBieSBzZWFyY2hpbmcgZm9yIHRoZSBoZWFkZXIgb2YgdGhlIGxhc3QgY29sdW1uOiA+CisKKwkvdGVzdCAzCisKK05vdyBwcmVzcyAiaiIgYW5kIHlvdSBhcmUgcmlnaHQgd2hlcmUgeW91IGNhbiBlbnRlciB0aGUgdmFsdWUgZm9yICJpbnB1dCBBIi4KK1R5cGluZyAiMC42OTMiIHJlc3VsdHMgaW46CisKKwluaWNlIHRhYmxlCSAgdGVzdCAxICAgICB0ZXN0IDIJIHRlc3QgMyB+CisJaW5wdXQgQQkJICAwLjUzNAkJCSAwLjY5MyB+CisJaW5wdXQgQgkJICAwLjkxMyB+CisKK1ZpbSBoYXMgYXV0b21hdGljYWxseSBmaWxsZWQgdGhlIGdhcCBpbiBmcm9udCBvZiB0aGUgbmV3IHRleHQgZm9yIHlvdS4gIE5vdywKK3RvIGVudGVyIHRoZSBuZXh0IGZpZWxkIGluIHRoaXMgY29sdW1uIHVzZSAiQmoiLiAgIkIiIG1vdmVzIGJhY2sgdG8gdGhlIHN0YXJ0CitvZiBhIHdoaXRlIHNwYWNlIHNlcGFyYXRlZCB3b3JkLiAgVGhlbiAiaiIgbW92ZXMgdG8gdGhlIHBsYWNlIHdoZXJlIHRoZSBuZXh0CitmaWVsZCBjYW4gYmUgZW50ZXJlZC4KKworCU5vdGU6CisJWW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgYW55d2hlcmUgaW4gdGhlIGRpc3BsYXksIGFsc28gYmV5b25kIHRoZSBlbmQKKwlvZiBhIGxpbmUuICBCdXQgVmltIHdpbGwgbm90IGluc2VydCBzcGFjZXMgdGhlcmUsIHVudGlsIHlvdSBpbnNlcnQgYQorCWNoYXJhY3RlciBpbiB0aGF0IHBvc2l0aW9uLgorCisKK0NPUFlJTkcgQSBDT0xVTU4KKworWW91IHdhbnQgdG8gYWRkIGEgY29sdW1uLCB3aGljaCBzaG91bGQgYmUgYSBjb3B5IG9mIHRoZSB0aGlyZCBjb2x1bW4gYW5kCitwbGFjZWQgYmVmb3JlIHRoZSAidGVzdCAxIiBjb2x1bW4uICBEbyB0aGlzIGluIHNldmVuIHN0ZXBzOgorMS4gIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbGVmdCB1cHBlciBjb3JuZXIgb2YgdGhpcyBjb2x1bW4sIGUuZy4sIHdpdGgKKyAgICAiL3Rlc3QgMyIuCisyLiAgUHJlc3MgQ1RSTC1WIHRvIHN0YXJ0IGJsb2Nrd2lzZSBWaXN1YWwgbW9kZS4KKzMuICBNb3ZlIHRoZSBjdXJzb3IgZG93biB0d28gbGluZXMgd2l0aCAiMmoiLiAgWW91IGFyZSBub3cgaW4gInZpcnR1YWwgc3BhY2UiOgorICAgIHRoZSAiaW5wdXQgQiIgbGluZSBvZiB0aGUgInRlc3QgMyIgY29sdW1uLgorNC4gIE1vdmUgdGhlIGN1cnNvciByaWdodCwgdG8gaW5jbHVkZSB0aGUgd2hvbGUgY29sdW1uIGluIHRoZSBzZWxlY3Rpb24sIHBsdXMKKyAgICB0aGUgc3BhY2UgdGhhdCB5b3Ugd2FudCBiZXR3ZWVuIHRoZSBjb2x1bW5zLiAgIjlsIiBzaG91bGQgZG8gaXQuCis1LiAgWWFuayB0aGUgc2VsZWN0ZWQgcmVjdGFuZ2xlIHdpdGggInkiLgorNi4gIE1vdmUgdGhlIGN1cnNvciB0byAidGVzdCAxIiwgd2hlcmUgdGhlIG5ldyBjb2x1bW4gbXVzdCBiZSBwbGFjZWQuCis3LiAgUHJlc3MgIlAiLgorCitUaGUgcmVzdWx0IHNob3VsZCBiZToKKworCW5pY2UgdGFibGUJICB0ZXN0IDMgICAgdGVzdCAxICAgICB0ZXN0IDIJICAgdGVzdCAzIH4KKwlpbnB1dCBBCQkgIDAuNjkzICAgICAwLjUzNAkJICAgMC42OTMgfgorCWlucHV0IEIJCQkgICAgMC45MTMgfgorCitOb3RpY2UgdGhhdCB0aGUgd2hvbGUgInRlc3QgMSIgY29sdW1uIHdhcyBzaGlmdGVkIHJpZ2h0LCBhbHNvIHRoZSBsaW5lIHdoZXJlCit0aGUgInRlc3QgMyIgY29sdW1uIGRpZG4ndCBoYXZlIHRleHQuCisKK0dvIGJhY2sgdG8gbm9uLXZpcnR1YWwgY3Vyc29yIG1vdmVtZW50cyB3aXRoOiA+CisKKwk6c2V0IHZpcnR1YWxlZGl0PQorCisKK1ZJUlRVQUwgUkVQTEFDRSBNT0RFCisKK1RoZSBkaXNhZHZhbnRhZ2Ugb2YgdXNpbmcgJ3ZpcnR1YWxlZGl0JyBpcyB0aGF0IGl0ICJmZWVscyIgZGlmZmVyZW50LiAgWW91CitjYW4ndCByZWNvZ25pemUgdGFicyBvciBzcGFjZXMgYmV5b25kIHRoZSBlbmQgb2YgbGluZSB3aGVuIG1vdmluZyB0aGUgY3Vyc29yCithcm91bmQuICBBbm90aGVyIG1ldGhvZCBjYW4gYmUgdXNlZDogVmlydHVhbCBSZXBsYWNlIG1vZGUuCisgICBTdXBwb3NlIHlvdSBoYXZlIGEgbGluZSBpbiBhIHRhYmxlIHRoYXQgY29udGFpbnMgYm90aCB0YWJzIGFuZCBvdGhlcgorY2hhcmFjdGVycy4gIFVzZSAicngiIG9uIHRoZSBmaXJzdCB0YWI6CisKKwlpbnAJMC42OTMgICAwLjUzNAkwLjY5MyB+CisKKwkgICAgICAgfAorCSAgIHJ4ICB8CisJICAgICAgIFYKKworCWlucHgwLjY5MyAgIDAuNTM0CTAuNjkzIH4KKworVGhlIGxheW91dCBpcyBtZXNzZWQgdXAuICBUbyBhdm9pZCB0aGF0LCB1c2UgdGhlICJnciIgY29tbWFuZDoKKworCWlucAkwLjY5MyAgIDAuNTM0CTAuNjkzIH4KKworCSAgICAgICB8CisJICBncnggIHwKKwkgICAgICAgVgorCisJaW5weAkwLjY5MyAgIDAuNTM0CTAuNjkzIH4KKworV2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlICJnciIgY29tbWFuZCBtYWtlcyBzdXJlIHRoZSBuZXcgY2hhcmFjdGVyIHRha2VzIHRoZQorcmlnaHQgYW1vdW50IG9mIHNjcmVlbiBzcGFjZS4gIEV4dHJhIHNwYWNlcyBvciB0YWJzIGFyZSBpbnNlcnRlZCB0byBmaWxsIHRoZQorZ2FwLiAgVGh1cyB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgaXMgdGhhdCBhIHRhYiBpcyByZXBsYWNlZCBieSAieCIgYW5kIHRoZW4KK2JsYW5rcyBhZGRlZCB0byBtYWtlIHRoZSB0ZXh0IGFmdGVyIGl0IGtlZXAgaXQncyBwbGFjZS4gIEluIHRoaXMgY2FzZSBhCit0YWIgaXMgaW5zZXJ0ZWQuCisgICBXaGVuIHlvdSBuZWVkIHRvIHJlcGxhY2UgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIsIHlvdSB1c2UgdGhlICJSIiBjb21tYW5kCit0byBnbyB0byBSZXBsYWNlIG1vZGUgKHNlZSB8MDQuOXwpLiAgVGhpcyBtZXNzZXMgdXAgdGhlIGxheW91dCBhbmQgcmVwbGFjZXMKK3RoZSB3cm9uZyBjaGFyYWN0ZXJzOgorCisJaW5wCTAJMC41MzQJMC42OTMgfgorCisJCXwKKwkgUjAuNzg2IHwKKwkJVgorCisJaW5wCTAuNzg2MzQJMC42OTMgfgorCitUaGUgImdSIiBjb21tYW5kIHVzZXMgVmlydHVhbCBSZXBsYWNlIG1vZGUuICBUaGlzIHByZXNlcnZlcyB0aGUgbGF5b3V0OgorCisJaW5wCTAJMC41MzQJMC42OTMgfgorCisJCXwKKwlnUjAuNzg2IHwKKwkJVgorCisJaW5wCTAuNzg2CTAuNTM0CTAuNjkzIH4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8yNi50eHR8ICBSZXBlYXRpbmcKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMjYudHh0IGIvcnVudGltZS9kb2MvdXNyXzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg3NjNmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzI2LnR4dApAQCAtMCwwICsxLDIyMSBAQAorKnVzcl8yNi50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAyIE9jdCAyOQorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJCSAgUmVwZWF0aW5nCisKKworQW4gZWRpdGluZyB0YXNrIGlzIGhhcmRseSBldmVyIHVuc3RydWN0dXJlZC4gIEEgY2hhbmdlIG9mdGVuIG5lZWRzIHRvIGJlIG1hZGUKK3NldmVyYWwgdGltZXMuICBJbiB0aGlzIGNoYXB0ZXIgYSBudW1iZXIgb2YgdXNlZnVsIHdheXMgdG8gcmVwZWF0IGEgY2hhbmdlCit3aWxsIGJlIGV4cGxhaW5lZC4KKworfDI2LjF8CVJlcGVhdGluZyB3aXRoIFZpc3VhbCBtb2RlCit8MjYuMnwJQWRkIGFuZCBzdWJ0cmFjdAorfDI2LjN8CU1ha2luZyBhIGNoYW5nZSBpbiBtYW55IGZpbGVzCit8MjYuNHwJVXNpbmcgVmltIGZyb20gYSBzaGVsbCBzY3JpcHQKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjcudHh0fCAgU2VhcmNoIGNvbW1hbmRzIGFuZCBwYXR0ZXJucworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMjUudHh0fCAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjYuMSoJUmVwZWF0aW5nIHdpdGggVmlzdWFsIG1vZGUKKworVmlzdWFsIG1vZGUgaXMgdmVyeSBoYW5keSBmb3IgbWFraW5nIGEgY2hhbmdlIGluIGFueSBzZXF1ZW5jZSBvZiBsaW5lcy4gIFlvdQorY2FuIHNlZSB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCwgdGh1cyB5b3UgY2FuIGNoZWNrIGlmIHRoZSBjb3JyZWN0IGxpbmVzIGFyZQorY2hhbmdlZC4gIEJ1dCBtYWtpbmcgdGhlIHNlbGVjdGlvbiB0YWtlcyBzb21lIHR5cGluZy4gIFRoZSAiZ3YiIGNvbW1hbmQKK3NlbGVjdHMgdGhlIHNhbWUgYXJlYSBhZ2Fpbi4gIFRoaXMgYWxsb3dzIHlvdSB0byBkbyBhbm90aGVyIG9wZXJhdGlvbiBvbiB0aGUKK3NhbWUgdGV4dC4KKyAgIFN1cHBvc2UgeW91IGhhdmUgc29tZSBsaW5lcyB3aGVyZSB5b3Ugd2FudCB0byBjaGFuZ2UgIjIwMDEiIHRvICIyMDAyIiBhbmQKKyIyMDAwIiB0byAiMjAwMSI6CisKKwlUaGUgZmluYW5jaWFsIHJlc3VsdHMgZm9yIDIwMDEgYXJlIGJldHRlciB+CisJdGhhbiBmb3IgMjAwMC4gIFRoZSBpbmNvbWUgaW5jcmVhc2VkIGJ5IDUwJSwgfgorCWV2ZW4gdGhvdWdoIDIwMDEgaGFkIG1vcmUgcmFpbiB0aGFuIDIwMDAuIH4KKwkJCTIwMDAJCTIwMDEgfgorCWluY29tZQkJNDUsNDAzCQk2NiwyMzQgfgorCitGaXJzdCBjaGFuZ2UgIjIwMDEiIHRvICIyMDAyIi4gIFNlbGVjdCB0aGUgbGluZXMgaW4gVmlzdWFsIG1vZGUsIGFuZCB1c2U6ID4KKworCTpzLzIwMDEvMjAwMi9nCisKK05vdyB1c2UgImd2IiB0byByZXNlbGVjdCB0aGUgc2FtZSB0ZXh0LiAgSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgdGhlIGN1cnNvcgoraXMuICBUaGVuIHVzZSAiOnMvMjAwMC8yMDAxL2ciIHRvIG1ha2UgdGhlIHNlY29uZCBjaGFuZ2UuCisgICBPYnZpb3VzbHksIHlvdSBjYW4gcmVwZWF0IHRoZXNlIGNoYW5nZXMgc2V2ZXJhbCB0aW1lcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjYuMioJQWRkIGFuZCBzdWJ0cmFjdAorCitXaGVuIHJlcGVhdGluZyB0aGUgY2hhbmdlIG9mIG9uZSBudW1iZXIgaW50byBhbm90aGVyLCB5b3Ugb2Z0ZW4gaGF2ZSBhIGZpeGVkCitvZmZzZXQuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSwgb25lIHdhcyBhZGRlZCB0byBlYWNoIHllYXIuICBJbnN0ZWFkIG9mIHR5cGluZworYSBzdWJzdGl0dXRlIGNvbW1hbmQgZm9yIGVhY2ggeWVhciB0aGF0IGFwcGVhcnMsIHRoZSBDVFJMLUEgY29tbWFuZCBjYW4gYmUKK3VzZWQuCisgICBVc2luZyB0aGUgc2FtZSB0ZXh0IGFzIGFib3ZlLCBzZWFyY2ggZm9yIGEgeWVhcjogPgorCisJLzE5WzAtOV1bMC05XVx8MjBbMC05XVswLTldCisKK05vdyBwcmVzcyBDVFJMLUEuICBUaGUgeWVhciB3aWxsIGJlIGluY3JlYXNlZCBieSBvbmU6CisKKwlUaGUgZmluYW5jaWFsIHJlc3VsdHMgZm9yIDIwMDIgYXJlIGJldHRlciB+CisJdGhhbiBmb3IgMjAwMC4gIFRoZSBpbmNvbWUgaW5jcmVhc2VkIGJ5IDUwJSwgfgorCWV2ZW4gdGhvdWdoIDIwMDEgaGFkIG1vcmUgcmFpbiB0aGFuIDIwMDAuIH4KKwkJCTIwMDAJCTIwMDEgfgorCWluY29tZQkJNDUsNDAzCQk2NiwyMzQgfgorCitVc2UgIm4iIHRvIGZpbmQgdGhlIG5leHQgeWVhciwgYW5kIHByZXNzICIuIiB0byByZXBlYXQgdGhlIENUUkwtQSAoIi4iIGlzIGEKK2JpdCBxdWlja2VyIHRvIHR5cGUpLiAgUmVwZWF0ICJuIiBhbmQgIi4iIGZvciBhbGwgeWVhcnMgdGhhdCBhcHBlYXIuCisgICBIaW50OiBzZXQgdGhlICdobHNlYXJjaCcgb3B0aW9uIHRvIHNlZSB0aGUgbWF0Y2hlcyB5b3UgYXJlIGdvaW5nIHRvIGNoYW5nZSwKK3RoZW4geW91IGNhbiBsb29rIGFoZWFkIGFuZCBkbyBpdCBmYXN0ZXIuCisKK0FkZGluZyBtb3JlIHRoYW4gb25lIGNhbiBiZSBkb25lIGJ5IHByZXBlbmRpbmcgdGhlIG51bWJlciB0byBDVFJMLUEuICBTdXBwb3NlCit5b3UgaGF2ZSB0aGlzIGxpc3Q6CisKKwkxLiAgaXRlbSBmb3VyIH4KKwkyLiAgaXRlbSBmaXZlIH4KKwkzLiAgaXRlbSBzaXggfgorCitNb3ZlIHRoZSBjdXJzb3IgdG8gIjEuIiBhbmQgdHlwZTogPgorCisJMyBDVFJMLUEKKworVGhlICIxLiIgd2lsbCBjaGFuZ2UgdG8gIjQuIi4gIEFnYWluLCB5b3UgY2FuIHVzZSAiLiIgdG8gcmVwZWF0IHRoaXMgb24gdGhlCitvdGhlciBudW1iZXJzLgorCitBbm90aGVyIGV4YW1wbGU6CisKKwkwMDYJZm9vIGJhciB+CisJMDA3CWZvbyBiYXIgfgorCitVc2luZyBDVFJMLUEgb24gdGhlc2UgbnVtYmVycyByZXN1bHRzIGluOgorCisJMDA3CWZvbyBiYXIgfgorCTAxMAlmb28gYmFyIH4KKworNyBwbHVzIG9uZSBpcyAxMD8gIFdoYXQgaGFwcGVuZWQgaGVyZSBpcyB0aGF0IFZpbSByZWNvZ25pemVkICIwMDciIGFzIGFuIG9jdGFsCitudW1iZXIsIGJlY2F1c2UgdGhlcmUgaXMgYSBsZWFkaW5nIHplcm8uICBUaGlzIG5vdGF0aW9uIGlzIG9mdGVuIHVzZWQgaW4gQworcHJvZ3JhbXMuICBJZiB5b3UgZG8gbm90IHdhbnQgYSBudW1iZXIgd2l0aCBsZWFkaW5nIHplcm9zIHRvIGJlIGhhbmRsZWQgYXMKK29jdGFsLCB1c2UgdGhpczogPgorCisJOnNldCBucmZvcm1hdHMtPW9jdGFsCisKK1RoZSBDVFJMLVggY29tbWFuZCBkb2VzIHN1YnRyYWN0aW9uIGluIGEgc2ltaWxhciB3YXkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI2LjMqCU1ha2luZyBhIGNoYW5nZSBpbiBtYW55IGZpbGVzCisKK1N1cHBvc2UgeW91IGhhdmUgYSB2YXJpYWJsZSBjYWxsZWQgInhfY250IiBhbmQgeW91IHdhbnQgdG8gY2hhbmdlIGl0IHRvCisieF9jb3VudGVyIi4gIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiBzZXZlcmFsIG9mIHlvdXIgQyBmaWxlcy4gIFlvdSBuZWVkIHRvCitjaGFuZ2UgaXQgaW4gYWxsIGZpbGVzLiAgVGhpcyBpcyBob3cgeW91IGRvIGl0LgorICAgUHV0IGFsbCB0aGUgcmVsZXZhbnQgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3Q6ID4KKworCTphcmdzICouYworPAorVGhpcyBmaW5kcyBhbGwgQyBmaWxlcyBhbmQgZWRpdHMgdGhlIGZpcnN0IG9uZS4gIE5vdyB5b3UgY2FuIHBlcmZvcm0gYQorc3Vic3RpdHV0aW9uIGNvbW1hbmQgb24gYWxsIHRoZXNlIGZpbGVzOiA+CisKKwk6YXJnZG8gJXMvXDx4X2NudFw+L3hfY291bnRlci9nZSB8IHVwZGF0ZQorCitUaGUgIjphcmdkbyIgY29tbWFuZCB0YWtlcyBhbiBhcmd1bWVudCB0aGF0IGlzIGFub3RoZXIgY29tbWFuZC4gIFRoYXQgY29tbWFuZAord2lsbCBiZSBleGVjdXRlZCBvbiBhbGwgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisgICBUaGUgIiVzIiBzdWJzdGl0dXRlIGNvbW1hbmQgdGhhdCBmb2xsb3dzIHdvcmtzIG9uIGFsbCBsaW5lcy4gIEl0IGZpbmRzIHRoZQord29yZCAieF9jbnQiIHdpdGggIlw8eF9jbnRcPiIuICBUaGUgIlw8IiBhbmQgIlw+IiBhcmUgdXNlZCB0byBtYXRjaCB0aGUgd2hvbGUKK3dvcmQgb25seSwgYW5kIG5vdCAicHhfY250IiBvciAieF9jbnQyIi4KKyAgIFRoZSBmbGFncyBmb3IgdGhlIHN1YnN0aXR1dGUgY29tbWFuZCBpbmNsdWRlICJnIiB0byByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcworb2YgInhfY250IiBpbiB0aGUgc2FtZSBsaW5lLiAgVGhlICJlIiBmbGFnIGlzIHVzZWQgdG8gYXZvaWQgYW4gZXJyb3IgbWVzc2FnZQord2hlbiAieF9jbnQiIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgZmlsZS4gIE90aGVyd2lzZSAiOmFyZ2RvIiB3b3VsZCBhYm9ydCBvbgordGhlIGZpcnN0IGZpbGUgd2hlcmUgInhfY250IiB3YXMgbm90IGZvdW5kLgorICAgVGhlICJ8IiBzZXBhcmF0ZXMgdHdvIGNvbW1hbmRzLiAgVGhlIGZvbGxvd2luZyAidXBkYXRlIiBjb21tYW5kIHdyaXRlcyB0aGUKK2ZpbGUgb25seSBpZiBpdCB3YXMgY2hhbmdlZC4gIElmIG5vICJ4X2NudCIgd2FzIGNoYW5nZWQgdG8gInhfY291bnRlciIgbm90aGluZworaGFwcGVucy4KKworVGhlcmUgaXMgYWxzbyB0aGUgIjp3aW5kbyIgY29tbWFuZCwgd2hpY2ggZXhlY3V0ZXMgaXRzIGFyZ3VtZW50IGluIGFsbAord2luZG93cy4gIEFuZCAiOmJ1ZmRvIiBleGVjdXRlcyBpdHMgYXJndW1lbnQgb24gYWxsIGJ1ZmZlcnMuICBCZSBjYXJlZnVsIHdpdGgKK3RoaXMsIGJlY2F1c2UgeW91IG1pZ2h0IGhhdmUgbW9yZSBmaWxlcyBpbiB0aGUgYnVmZmVyIGxpc3QgdGhhbiB5b3UgdGhpbmsuCitDaGVjayB0aGlzIHdpdGggdGhlICI6YnVmZmVycyIgY29tbWFuZCAob3IgIjpscyIpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNi40KglVc2luZyBWaW0gZnJvbSBhIHNoZWxsIHNjcmlwdAorCitTdXBwb3NlIHlvdSBoYXZlIGEgbG90IG9mIGZpbGVzIGluIHdoaWNoIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgc3RyaW5nCisiLXBlcnNvbi0iIHRvICJKb25lcyIgYW5kIHRoZW4gcHJpbnQgaXQuICBIb3cgZG8geW91IGRvIHRoYXQ/ICBPbmUgd2F5IGlzIHRvCitkbyBhIGxvdCBvZiB0eXBpbmcuICBUaGUgb3RoZXIgaXMgdG8gd3JpdGUgYSBzaGVsbCBzY3JpcHQgdG8gZG8gdGhlIHdvcmsuCisgICBUaGUgVmltIGVkaXRvciBkb2VzIGEgc3VwZXJiIGpvYiBhcyBhIHNjcmVlbi1vcmllbnRlZCBlZGl0b3Igd2hlbiB1c2luZworTm9ybWFsIG1vZGUgY29tbWFuZHMuICBGb3IgYmF0Y2ggcHJvY2Vzc2luZywgaG93ZXZlciwgTm9ybWFsIG1vZGUgY29tbWFuZHMgZG8KK25vdCByZXN1bHQgaW4gY2xlYXIsIGNvbW1lbnRlZCBjb21tYW5kIGZpbGVzOyBzbyBoZXJlIHlvdSB3aWxsIHVzZSBFeCBtb2RlCitpbnN0ZWFkLiAgVGhpcyBtb2RlIGdpdmVzIHlvdSBhIG5pY2UgY29tbWFuZC1saW5lIGludGVyZmFjZSB0aGF0IG1ha2VzIGl0IGVhc3kKK3RvIHB1dCBpbnRvIGEgYmF0Y2ggZmlsZS4gICgiRXggY29tbWFuZCIgaXMganVzdCBhbm90aGVyIG5hbWUgZm9yIGEKK2NvbW1hbmQtbGluZSAoOikgY29tbWFuZC4pCisgICBUaGUgRXggbW9kZSBjb21tYW5kcyB5b3UgbmVlZCBhcmUgYXMgZm9sbG93czogPgorCisJJXMvLXBlcnNvbi0vSm9uZXMvZworCXdyaXRlIHRlbXBmaWxlCisJcXVpdAorCitZb3UgcHV0IHRoZXNlIGNvbW1hbmRzIGluIHRoZSBmaWxlICJjaGFuZ2UudmltIi4gIE5vdyB0byBydW4gdGhlIGVkaXRvciBpbgorYmF0Y2ggbW9kZSwgdXNlIHRoaXMgc2hlbGwgc2NyaXB0OiA+CisKKwlmb3IgZmlsZSBpbiAqLnR4dDsgZG8KKwkgIHZpbSAtZSAtcyAkZmlsZSA8IGNoYW5nZS52aW0KKwkgIGxwciAtciB0ZW1wZmlsZQorCWRvbmUKKworVGhlIGZvci1kb25lIGxvb3AgaXMgYSBzaGVsbCBjb25zdHJ1Y3QgdG8gcmVwZWF0IHRoZSB0d28gbGluZXMgaW4gYmV0d2VlbiwKK3doaWxlIHRoZSAkZmlsZSB2YXJpYWJsZSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgZmlsZSBuYW1lIGVhY2ggdGltZS4KKyAgIFRoZSBzZWNvbmQgbGluZSBydW5zIHRoZSBWaW0gZWRpdG9yIGluIEV4IG1vZGUgKC1lIGFyZ3VtZW50KSBvbiB0aGUgZmlsZQorJGZpbGUgYW5kIHJlYWRzIGNvbW1hbmRzIGZyb20gdGhlIGZpbGUgImNoYW5nZS52aW0iLiAgVGhlIC1zIGFyZ3VtZW50IHRlbGxzCitWaW0gdG8gb3BlcmF0ZSBpbiBzaWxlbnQgbW9kZS4gIEluIG90aGVyIHdvcmRzLCBkbyBub3Qga2VlcCBvdXRwdXR0aW5nIHRoZQorOnByb21wdCwgb3IgYW55IG90aGVyIHByb21wdCBmb3IgdGhhdCBtYXR0ZXIuCisgICBUaGUgImxwciAtciB0ZW1wZmlsZSIgY29tbWFuZCBwcmludHMgdGhlIHJlc3VsdGluZyAidGVtcGZpbGUiIGFuZCBkZWxldGVzCitpdCAodGhhdCdzIHdoYXQgdGhlIC1yIGFyZ3VtZW50IGRvZXMpLgorCisKK1JFQURJTkcgRlJPTSBTVERJTgorCitWaW0gY2FuIHJlYWQgdGV4dCBvbiBzdGFuZGFyZCBpbnB1dC4gIFNpbmNlIHRoZSBub3JtYWwgd2F5IGlzIHRvIHJlYWQgY29tbWFuZHMKK3RoZXJlLCB5b3UgbXVzdCB0ZWxsIFZpbSB0byByZWFkIHRleHQgaW5zdGVhZC4gIFRoaXMgaXMgZG9uZSBieSBwYXNzaW5nIHRoZQorIi0iIGFyZ3VtZW50IGluIHBsYWNlIG9mIGEgZmlsZS4gIEV4YW1wbGU6ID4KKworCWxzIHwgdmltIC0KKworVGhpcyBhbGxvd3MgeW91IHRvIGVkaXQgdGhlIG91dHB1dCBvZiB0aGUgImxzIiBjb21tYW5kLCB3aXRob3V0IGZpcnN0IHNhdmluZwordGhlIHRleHQgaW4gYSBmaWxlLgorICAgSWYgeW91IHVzZSB0aGUgc3RhbmRhcmQgaW5wdXQgdG8gcmVhZCB0ZXh0IGZyb20sIHlvdSBjYW4gdXNlIHRoZSAiLVMiCithcmd1bWVudCB0byByZWFkIGEgc2NyaXB0OiA+CisKKwlwcm9kdWNlciB8IHZpbSAtUyBjaGFuZ2UudmltIC0KKworCitOT1JNQUwgTU9ERSBTQ1JJUFRTCisKK0lmIHlvdSByZWFsbHkgd2FudCB0byB1c2UgTm9ybWFsIG1vZGUgY29tbWFuZHMgaW4gYSBzY3JpcHQsIHlvdSBjYW4gdXNlIGl0CitsaWtlIHRoaXM6ID4KKworCXZpbSAtcyBzY3JpcHQgZmlsZS50eHQgLi4uCis8CisJTm90ZToKKwkiLXMiIGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nIHdoZW4gaXQgaXMgdXNlZCB3aXRob3V0ICItZSIuICBIZXJlIGl0CisJbWVhbnMgdG8gc291cmNlIHRoZSAic2NyaXB0IiBhcyBOb3JtYWwgbW9kZSBjb21tYW5kcy4gIFdoZW4gdXNlZCB3aXRoCisJIi1lIiBpdCBtZWFucyB0byBiZSBzaWxlbnQsIGFuZCBkb2Vzbid0IHVzZSB0aGUgbmV4dCBhcmd1bWVudCBhcyBhCisJZmlsZSBuYW1lLgorCitUaGUgY29tbWFuZHMgaW4gInNjcmlwdCIgYXJlIGV4ZWN1dGVkIGxpa2UgeW91IHR5cGVkIHRoZW0uICBEb24ndCBmb3JnZXQgdGhhdAorYSBsaW5lIGJyZWFrIGlzIGludGVycHJldGVkIGFzIHByZXNzaW5nIDxFbnRlcj4uICBJbiBOb3JtYWwgbW9kZSB0aGF0IG1vdmVzCit0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IGxpbmUuCisgICBUbyBjcmVhdGUgdGhlIHNjcmlwdCB5b3UgY2FuIGVkaXQgdGhlIHNjcmlwdCBmaWxlIGFuZCB0eXBlIHRoZSBjb21tYW5kcy4KK1lvdSBuZWVkIHRvIGltYWdpbmUgd2hhdCB0aGUgcmVzdWx0IHdvdWxkIGJlLCB3aGljaCBjYW4gYmUgYSBiaXQgZGlmZmljdWx0LgorQW5vdGhlciB3YXkgaXMgdG8gcmVjb3JkIHRoZSBjb21tYW5kcyB3aGlsZSB5b3UgcGVyZm9ybSB0aGVtIG1hbnVhbGx5LiAgVGhpcworaXMgaG93IHlvdSBkbyB0aGF0OiA+CisKKwl2aW0gLXcgc2NyaXB0IGZpbGUudHh0IC4uLgorCitBbGwgdHlwZWQga2V5cyB3aWxsIGJlIHdyaXR0ZW4gdG8gInNjcmlwdCIuICBJZiB5b3UgbWFrZSBhIHNtYWxsIG1pc3Rha2UgeW91CitjYW4ganVzdCBjb250aW51ZSBhbmQgcmVtZW1iZXIgdG8gZWRpdCB0aGUgc2NyaXB0IGxhdGVyLgorICAgVGhlICItdyIgYXJndW1lbnQgYXBwZW5kcyB0byBhbiBleGlzdGluZyBzY3JpcHQuICBUaGF0IGlzIGdvb2Qgd2hlbiB5b3UKK3dhbnQgdG8gcmVjb3JkIHRoZSBzY3JpcHQgYml0IGJ5IGJpdC4gIElmIHlvdSB3YW50IHRvIHN0YXJ0IGZyb20gc2NyYXRjaCBhbmQKK3N0YXJ0IGFsbCBvdmVyLCB1c2UgdGhlICItVyIgYXJndW1lbnQuICBJdCBvdmVyd3JpdGVzIGFueSBleGlzdGluZyBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzI3LnR4dHwgIFNlYXJjaCBjb21tYW5kcyBhbmQgcGF0dGVybnMKKworQ29weXJpZ2h0OiBzZWUgfG1hbnVhbC1jb3B5cmlnaHR8ICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy91c3JfMjcudHh0IGIvcnVudGltZS9kb2MvdXNyXzI3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmZiMTkwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdXNyXzI3LnR4dApAQCAtMCwwICsxLDU2MyBAQAorKnVzcl8yNy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIE9jdCAyOAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJIFNlYXJjaCBjb21tYW5kcyBhbmQgcGF0dGVybnMKKworCitJbiBjaGFwdGVyIDMgYSBmZXcgc2ltcGxlIHNlYXJjaCBwYXR0ZXJucyB3ZXJlIG1lbnRpb25lZCB8MDMuOXwuICBWaW0gY2FuIGRvCittdWNoIG1vcmUgY29tcGxleCBzZWFyY2hlcy4gIFRoaXMgY2hhcHRlciBleHBsYWlucyB0aGUgbW9zdCBvZnRlbiB1c2VkIG9uZXMuCitBIGRldGFpbGVkIHNwZWNpZmljYXRpb24gY2FuIGJlIGZvdW5kIGhlcmU6IHxwYXR0ZXJufAorCit8MjcuMXwJSWdub3JpbmcgY2FzZQorfDI3LjJ8CVdyYXBwaW5nIGFyb3VuZCB0aGUgZmlsZSBlbmQKK3wyNy4zfAlPZmZzZXRzCit8MjcuNHwJTWF0Y2hpbmcgbXVsdGlwbGUgdGltZXMKK3wyNy41fAlBbHRlcm5hdGl2ZXMKK3wyNy42fAlDaGFyYWN0ZXIgcmFuZ2VzCit8MjcuN3wJQ2hhcmFjdGVyIGNsYXNzZXMKK3wyNy44fAlNYXRjaGluZyBhIGxpbmUgYnJlYWsKK3wyNy45fAlFeGFtcGxlcworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl8yOC50eHR8ICBGb2xkaW5nCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl8yNi50eHR8ICBSZXBlYXRpbmcKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI3LjEqCUlnbm9yaW5nIGNhc2UKKworQnkgZGVmYXVsdCwgVmltJ3Mgc2VhcmNoZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiAgVGhlcmVmb3JlLCAiaW5jbHVkZSIsCisiSU5DTFVERSIsIGFuZCAiSW5jbHVkZSIgYXJlIHRocmVlIGRpZmZlcmVudCB3b3JkcyBhbmQgYSBzZWFyY2ggd2lsbCBtYXRjaAorb25seSBvbmUgb2YgdGhlbS4KKyAgIE5vdyBzd2l0Y2ggb24gdGhlICdpZ25vcmVjYXNlJyBvcHRpb246ID4KKworCTpzZXQgaWdub3JlY2FzZQorCitTZWFyY2ggZm9yICJpbmNsdWRlIiBhZ2FpbiwgYW5kIG5vdyBpdCB3aWxsIG1hdGNoICJJbmNsdWRlIiwgIklOQ0xVREUiIGFuZAorIkluQ2xVRGUiLiAgKFNldCB0aGUgJ2hsc2VhcmNoJyBvcHRpb24gdG8gcXVpY2tseSBzZWUgd2hlcmUgYSBwYXR0ZXJuCittYXRjaGVzLikKKyAgIFlvdSBjYW4gc3dpdGNoIHRoaXMgb2ZmIGFnYWluIHdpdGg6ID4KKworCTpzZXQgbm9pZ25vcmVjYXNlCisKK0J1dCBsZXRzIGtlZXAgaXQgc2V0LCBhbmQgc2VhcmNoIGZvciAiSU5DTFVERSIuICBJdCB3aWxsIG1hdGNoIGV4YWN0bHkgdGhlCitzYW1lIHRleHQgYXMgImluY2x1ZGUiIGRpZC4gIE5vdyBzZXQgdGhlICdzbWFydGNhc2UnIG9wdGlvbjogPgorCisJOnNldCBpZ25vcmVjYXNlIHNtYXJ0Y2FzZQorCitJZiB5b3UgaGF2ZSBhIHBhdHRlcm4gd2l0aCBhdCBsZWFzdCBvbmUgdXBwZXJjYXNlIGNoYXJhY3RlciwgdGhlIHNlYXJjaAorYmVjb21lcyBjYXNlIHNlbnNpdGl2ZS4gIFRoZSBpZGVhIGlzIHRoYXQgeW91IGRpZG4ndCBoYXZlIHRvIHR5cGUgdGhhdAordXBwZXJjYXNlIGNoYXJhY3Rlciwgc28geW91IG11c3QgaGF2ZSBkb25lIGl0IGJlY2F1c2UgeW91IHdhbnRlZCBjYXNlIHRvCittYXRjaC4gIFRoYXQncyBzbWFydCEKKyAgICBXaXRoIHRoZXNlIHR3byBvcHRpb25zIHNldCB5b3UgZmluZCB0aGUgZm9sbG93aW5nIG1hdGNoZXM6CisKKwlwYXR0ZXJuCQkJbWF0Y2hlcwl+CisJd29yZAkJCXdvcmQsIFdvcmQsIFdPUkQsIFdvUmQsIGV0Yy4KKwlXb3JkCQkJV29yZAorCVdPUkQJCQlXT1JECisJV29SZAkJCVdvUmQKKworCitDQVNFIElOIE9ORSBQQVRURVJOCisKK0lmIHlvdSB3YW50IHRvIGlnbm9yZSBjYXNlIGZvciBvbmUgc3BlY2lmaWMgcGF0dGVybiwgeW91IGNhbiBkbyB0aGlzIGJ5CitwcmVwZW5kaW5nIHRoZSAiXGMiIHN0cmluZy4gIFVzaW5nICJcQyIgd2lsbCBtYWtlIHRoZSBwYXR0ZXJuIHRvIG1hdGNoIGNhc2UuCitUaGlzIG92ZXJydWxlcyB0aGUgJ2lnbm9yZWNhc2UnIGFuZCAnc21hcnRjYXNlJyBvcHRpb25zLCB3aGVuICJcYyIgb3IgIlxDIiBpcwordXNlZCB0aGVpciB2YWx1ZSBkb2Vzbid0IG1hdHRlci4KKworCXBhdHRlcm4JCQltYXRjaGVzCX4KKwlcQ3dvcmQJCQl3b3JkCisJXENXb3JkCQkJV29yZAorCVxjd29yZAkJCXdvcmQsIFdvcmQsIFdPUkQsIFdvUmQsIGV0Yy4KKwlcY1dvcmQJCQl3b3JkLCBXb3JkLCBXT1JELCBXb1JkLCBldGMuCisKK0EgYmlnIGFkdmFudGFnZSBvZiB1c2luZyAiXGMiIGFuZCAiXEMiIGlzIHRoYXQgaXQgc3RpY2tzIHdpdGggdGhlIHBhdHRlcm4uCitUaHVzIGlmIHlvdSByZXBlYXQgYSBwYXR0ZXJuIGZyb20gdGhlIHNlYXJjaCBoaXN0b3J5LCB0aGUgc2FtZSB3aWxsIGhhcHBlbiwgbm8KK21hdHRlciBpZiAnaWdub3JlY2FzZScgb3IgJ3NtYXJ0Y2FzZScgd2FzIGNoYW5nZWQuCisKKwlOb3RlOgorCVRoZSB1c2Ugb2YgIlwiIGl0ZW1zIGluIHNlYXJjaCBwYXR0ZXJucyBkZXBlbmRzIG9uIHRoZSAnbWFnaWMnIG9wdGlvbi4KKwlJbiB0aGlzIGNoYXB0ZXJzIHdlIHdpbGwgYXNzdW1lICdtYWdpYycgaXMgb24sIGJlY2F1c2UgdGhhdCBpcyB0aGUKKwlzdGFuZGFyZCBhbmQgcmVjb21tZW5kZWQgc2V0dGluZy4gIElmIHlvdSB3b3VsZCBjaGFuZ2UgJ21hZ2ljJywgbWFueQorCXNlYXJjaCBwYXR0ZXJucyB3b3VsZCBzdWRkZW5seSBiZWNvbWUgaW52YWxpZC4KKworCU5vdGU6CisJSWYgeW91ciBzZWFyY2ggdGFrZXMgbXVjaCBsb25nZXIgdGhhbiB5b3UgZXhwZWN0ZWQsIHlvdSBjYW4gaW50ZXJydXB0CisJaXQgd2l0aCBDVFJMLUMgb24gVW5peCBhbmQgIENUUkwtQnJlYWsgb24gTVMtRE9TIGFuZCBNUy1XaW5kb3dzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNy4yKglXcmFwcGluZyBhcm91bmQgdGhlIGZpbGUgZW5kCisKK0J5IGRlZmF1bHQsIGEgZm9yd2FyZCBzZWFyY2ggc3RhcnRzIHNlYXJjaGluZyBmb3IgdGhlIGdpdmVuIHN0cmluZyBhdCB0aGUKK2N1cnJlbnQgY3Vyc29yIGxvY2F0aW9uLiAgSXQgdGhlbiBwcm9jZWVkcyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgSWYgaXQgaGFzCitub3QgZm91bmQgdGhlIHN0cmluZyBieSB0aGF0IHRpbWUsIGl0IHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIHNlYXJjaGVzCitmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZSB0byB0aGUgY3Vyc29yIGxvY2F0aW9uLgorICAgS2VlcCBpbiBtaW5kIHRoYXQgd2hlbiByZXBlYXRpbmcgdGhlICJuIiBjb21tYW5kIHRvIHNlYXJjaCBmb3IgdGhlIG5leHQKK21hdGNoLCB5b3UgZXZlbnR1YWxseSBnZXQgYmFjayB0byB0aGUgZmlyc3QgbWF0Y2guICBJZiB5b3UgZG9uJ3Qgbm90aWNlIHRoaXMKK3lvdSBrZWVwIHNlYXJjaGluZyBmb3JldmVyISAgVG8gZ2l2ZSB5b3UgYSBoaW50LCBWaW0gZGlzcGxheXMgdGhpcyBtZXNzYWdlOgorCisJc2VhcmNoIGhpdCBCT1RUT00sIGNvbnRpbnVpbmcgYXQgVE9QIH4KKworSWYgeW91IHVzZSB0aGUgIj8iIGNvbW1hbmQsIHRvIHNlYXJjaCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLCB5b3UgZ2V0IHRoaXMKK21lc3NhZ2U6CisKKwlzZWFyY2ggaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00gfgorCitTdGlsbCwgeW91IGRvbid0IGtub3cgd2hlbiB5b3UgYXJlIGJhY2sgYXQgdGhlIGZpcnN0IG1hdGNoLiAgT25lIHdheSB0byBzZWUKK3RoaXMgaXMgYnkgc3dpdGNoaW5nIG9uIHRoZSAncnVsZXInIG9wdGlvbjogPgorCisJOnNldCBydWxlcgorCitWaW0gd2lsbCBkaXNwbGF5IHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGxvd2VyIHJpZ2h0aGFuZCBjb3JuZXIgb2YgdGhlCit3aW5kb3cgKGluIHRoZSBzdGF0dXMgbGluZSBpZiB0aGVyZSBpcyBvbmUpLiAgSXQgbG9va3MgbGlrZSB0aGlzOgorCisJMTAxLDI5ICAgICAgIDg0JSB+CisKK1RoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBjdXJzb3IuICBSZW1lbWJlciB0aGUgbGluZSBudW1iZXIKK3doZXJlIHlvdSBzdGFydGVkLCBzbyB0aGF0IHlvdSBjYW4gY2hlY2sgaWYgeW91IHBhc3NlZCB0aGlzIHBvc2l0aW9uIGFnYWluLgorCisKK05PVCBXUkFQUElORworCitUbyB0dXJuIG9mZiBzZWFyY2ggd3JhcHBpbmcsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzZXQgbm93cmFwc2NhbgorCitOb3cgd2hlbiB0aGUgc2VhcmNoIGhpdHMgdGhlIGVuZCBvZiB0aGUgZmlsZSwgYW4gZXJyb3IgbWVzc2FnZSBkaXNwbGF5czoKKworCUUzODU6IHNlYXJjaCBoaXQgQk9UVE9NIHdpdGhvdXQgbWF0Y2ggZm9yOiBmb3JldmVyIH4KKworVGh1cyB5b3UgY2FuIGZpbmQgYWxsIG1hdGNoZXMgYnkgZ29pbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHdpdGggImdnIiBhbmQKK2tlZXAgc2VhcmNoaW5nIHVudGlsIHlvdSBzZWUgdGhpcyBtZXNzYWdlLgorICAgSWYgeW91IHNlYXJjaCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLCB1c2luZyAiPyIsIHlvdSBnZXQ6CisKKwlFMzg0OiBzZWFyY2ggaGl0IFRPUCB3aXRob3V0IG1hdGNoIGZvcjogZm9yZXZlciB+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI3LjMqCU9mZnNldHMKKworQnkgZGVmYXVsdCwgdGhlIHNlYXJjaCBjb21tYW5kIGxlYXZlcyB0aGUgY3Vyc29yIHBvc2l0aW9uZWQgb24gdGhlIGJlZ2lubmluZworb2YgdGhlIHBhdHRlcm4uICBZb3UgY2FuIHRlbGwgVmltIHRvIGxlYXZlIGl0IHNvbWUgb3RoZXIgcGxhY2UgYnkgc3BlY2lmeWluZworYW4gb2Zmc2V0LiAgRm9yIHRoZSBmb3J3YXJkIHNlYXJjaCBjb21tYW5kICIvIiwgdGhlIG9mZnNldCBpcyBzcGVjaWZpZWQgYnkKK2FwcGVuZGluZyBhIHNsYXNoICgvKSBhbmQgdGhlIG9mZnNldDogPgorCisJL2RlZmF1bHQvMgorCitUaGlzIGNvbW1hbmQgc2VhcmNoZXMgZm9yIHRoZSBwYXR0ZXJuICJkZWZhdWx0IiBhbmQgdGhlbiBtb3ZlcyB0byB0aGUKK2JlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGxpbmUgcGFzdCB0aGUgcGF0dGVybi4gIFVzaW5nIHRoaXMgY29tbWFuZCBvbiB0aGUKK3BhcmFncmFwaCBhYm92ZSwgVmltIGZpbmRzIHRoZSB3b3JkICJkZWZhdWx0IiBpbiB0aGUgZmlyc3QgbGluZS4gIFRoZW4gdGhlCitjdXJzb3IgaXMgbW92ZWQgdHdvIGxpbmVzIGRvd24gYW5kIGxhbmRzIG9uICJhbiBvZmZzZXQiLgorCitJZiB0aGUgb2Zmc2V0IGlzIGEgc2ltcGxlIG51bWJlciwgdGhlIGN1cnNvciB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nCitvZiB0aGUgbGluZSB0aGF0IG1hbnkgbGluZXMgZnJvbSB0aGUgbWF0Y2guICBUaGUgb2Zmc2V0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUKK29yIG5lZ2F0aXZlLiAgSWYgaXQgaXMgcG9zaXRpdmUsIHRoZSBjdXJzb3IgbW92ZXMgZG93biB0aGF0IG1hbnkgbGluZXM7IGlmCituZWdhdGl2ZSwgaXQgbW92ZXMgdXAuCisKKworQ0hBUkFDVEVSIE9GRlNFVFMKKworVGhlICJlIiBvZmZzZXQgaW5kaWNhdGVzIGFuIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG1hdGNoLiAgSXQgbW92ZXMgdGhlCitjdXJzb3Igb250byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIG1hdGNoLiAgVGhlIGNvbW1hbmQ6ID4KKworCS9jb25zdC9lCisKK3B1dHMgdGhlIGN1cnNvciBvbiB0aGUgInQiIG9mICJjb25zdCIuCisgICBGcm9tIHRoYXQgcG9zaXRpb24sIGFkZGluZyBhIG51bWJlciBtb3ZlcyBmb3J3YXJkIHRoYXQgbWFueSBjaGFyYWN0ZXJzLgorVGhpcyBjb21tYW5kIG1vdmVzIHRvIHRoZSBjaGFyYWN0ZXIganVzdCBhZnRlciB0aGUgbWF0Y2g6ID4KKworCS9jb25zdC9lKzEKKworQSBwb3NpdGl2ZSBudW1iZXIgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgcmlnaHQsIGEgbmVnYXRpdmUgbnVtYmVyIG1vdmVzIGl0IHRvCit0aGUgbGVmdC4gIEZvciBleGFtcGxlOiA+CisKKwkvY29uc3QvZS0xCisKK21vdmVzIHRoZSBjdXJzb3IgdG8gdGhlICJzIiBvZiAiY29uc3QiLgorCitJZiB0aGUgb2Zmc2V0IGJlZ2lucyB3aXRoICJiIiwgdGhlIGN1cnNvciBtb3ZlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQorcGF0dGVybi4gIFRoYXQncyBub3QgdmVyeSB1c2VmdWwsIHNpbmNlIGxlYXZpbmcgb3V0IHRoZSAiYiIgZG9lcyB0aGUgc2FtZQordGhpbmcuICBJdCBkb2VzIGdldCB1c2VmdWwgd2hlbiBhIG51bWJlciBpcyBhZGRlZCBvciBzdWJ0cmFjdGVkLiAgVGhlIGN1cnNvcgordGhlbiBnb2VzIGZvcndhcmQgb3IgYmFja3dhcmQgdGhhdCBtYW55IGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZTogPgorCisJL2NvbnN0L2IrMgorCitNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1hdGNoIGFuZCB0aGVuIHR3byBjaGFyYWN0ZXJzIHRvIHRoZQorcmlnaHQuICBUaHVzIGl0IGxhbmRzIG9uIHRoZSAibiIuCisKKworUkVQRUFUSU5HCisKK1RvIHJlcGVhdCBzZWFyY2hpbmcgZm9yIHRoZSBwcmV2aW91c2x5IHVzZWQgc2VhcmNoIHBhdHRlcm4sIGJ1dCB3aXRoIGEKK2RpZmZlcmVudCBvZmZzZXQsIGxlYXZlIG91dCB0aGUgcGF0dGVybjogPgorCisJL3RoYXQKKwkvL2UKKworSXMgZXF1YWwgdG86ID4KKworCS90aGF0L2UKKworVG8gcmVwZWF0IHdpdGggdGhlIHNhbWUgb2Zmc2V0OiA+CisKKwkvCisKKyJuIiBkb2VzIHRoZSBzYW1lIHRoaW5nLiAgVG8gcmVwZWF0IHdoaWxlIHJlbW92aW5nIGEgcHJldmlvdXNseSB1c2VkIG9mZnNldDogPgorCisJLy8KKworCitTRUFSQ0hJTkcgQkFDS1dBUkRTCisKK1RoZSAiPyIgY29tbWFuZCB1c2VzIG9mZnNldHMgaW4gdGhlIHNhbWUgd2F5LCBidXQgeW91IG11c3QgdXNlICI/IiB0byBzZXBhcmF0ZQordGhlIG9mZnNldCBmcm9tIHRoZSBwYXR0ZXJuLCBpbnN0ZWFkIG9mICIvIjogPgorCisJP2NvbnN0P2UtMgorCitUaGUgImIiIGFuZCAiZSIga2VlcCB0aGVpciBtZWFuaW5nLCB0aGV5IGRvbid0IGNoYW5nZSBkaXJlY3Rpb24gd2l0aCB0aGUgdXNlCitvZiAiPyIuCisKKworU1RBUlQgUE9TSVRJT04KKworV2hlbiBzdGFydGluZyBhIHNlYXJjaCwgaXQgbm9ybWFsbHkgc3RhcnRzIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24uICBXaGVuIHlvdQorc3BlY2lmeSBhIGxpbmUgb2Zmc2V0LCB0aGlzIGNhbiBjYXVzZSB0cm91YmxlLiAgRm9yIGV4YW1wbGU6ID4KKworCS9jb25zdC8tMgorCitUaGlzIGZpbmRzIHRoZSBuZXh0IHdvcmQgImNvbnN0IiBhbmQgdGhlbiBtb3ZlcyB0d28gbGluZXMgdXAuICBJZiB5b3UKK3VzZSAibiIgdG8gc2VhcmNoIGFnYWluLCBWaW0gY291bGQgc3RhcnQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIGZpbmQgdGhlIHNhbWUKKyJjb25zdCIgbWF0Y2guICBUaGVuIHVzaW5nIHRoZSBvZmZzZXQgYWdhaW4sIHlvdSB3b3VsZCBiZSBiYWNrIHdoZXJlIHlvdSBzdGFydGVkLgorWW91IHdvdWxkIGJlIHN0dWNrIQorICAgSXQgY291bGQgYmUgd29yc2U6IFN1cHBvc2UgdGhlcmUgaXMgYW5vdGhlciBtYXRjaCB3aXRoICJjb25zdCIgaW4gdGhlIG5leHQKK2xpbmUuICBUaGVuIHJlcGVhdGluZyB0aGUgZm9yd2FyZCBzZWFyY2ggd291bGQgZmluZCB0aGlzIG1hdGNoIGFuZCBtb3ZlIHR3bworbGluZXMgdXAuICBUaHVzIHlvdSB3b3VsZCBhY3R1YWxseSBtb3ZlIHRoZSBjdXJzb3IgYmFjayEKKworV2hlbiB5b3Ugc3BlY2lmeSBhIGNoYXJhY3RlciBvZmZzZXQsIFZpbSB3aWxsIGNvbXBlbnNhdGUgZm9yIHRoaXMuICBUaHVzIHRoZQorc2VhcmNoIHN0YXJ0cyBhIGZldyBjaGFyYWN0ZXJzIGZvcndhcmQgb3IgYmFja3dhcmQsIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2gKK2lzbid0IGZvdW5kIGFnYWluLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNy40KglNYXRjaGluZyBtdWx0aXBsZSB0aW1lcworCitUaGUgIioiIGl0ZW0gc3BlY2lmaWVzIHRoYXQgdGhlIGl0ZW0gYmVmb3JlIGl0IGNhbiBtYXRjaCBhbnkgbnVtYmVyIG9mIHRpbWVzLgorVGh1czogPgorCisJL2EqCisKK21hdGNoZXMgImEiLCAiYWEiLCAiYWFhIiwgZXRjLiAgQnV0IGFsc28gIiIgKHRoZSBlbXB0eSBzdHJpbmcpLCBiZWNhdXNlIHplcm8KK3RpbWVzIGlzIGluY2x1ZGVkLgorICAgVGhlICIqIiBvbmx5IGFwcGxpZXMgdG8gdGhlIGl0ZW0gZGlyZWN0bHkgYmVmb3JlIGl0LiAgVGh1cyAiYWIqIiBtYXRjaGVzCisiYSIsICJhYiIsICJhYmIiLCAiYWJiYiIsIGV0Yy4gIFRvIG1hdGNoIGEgd2hvbGUgc3RyaW5nIG11bHRpcGxlIHRpbWVzLCBpdAorbXVzdCBiZSBncm91cGVkIGludG8gb25lIGl0ZW0uICBUaGlzIGlzIGRvbmUgYnkgcHV0dGluZyAiXCgiIGJlZm9yZSBpdCBhbmQKKyJcKSIgYWZ0ZXIgaXQuICBUaHVzIHRoaXMgY29tbWFuZDogPgorCisJL1woYWJcKSoKKworTWF0Y2hlczogImFiIiwgImFiYWIiLCAiYWJhYmFiIiwgZXRjLiAgQW5kIGFsc28gIiIuCisKK1RvIGF2b2lkIG1hdGNoaW5nIHRoZSBlbXB0eSBzdHJpbmcsIHVzZSAiXCsiLiAgVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgaXRlbQorbWF0Y2ggb25lIG9yIG1vcmUgdGltZXMuID4KKworCS9hYlwrCisKK01hdGNoZXMgImFiIiwgImFiYiIsICJhYmJiIiwgZXRjLiAgSXQgZG9lcyBub3QgbWF0Y2ggImEiIHdoZW4gbm8gImIiIGZvbGxvd3MuCisKK1RvIG1hdGNoIGFuIG9wdGlvbmFsIGl0ZW0sIHVzZSAiXD0iLiAgRXhhbXBsZTogPgorCisJL2ZvbGRlcnNcPQorCitNYXRjaGVzICJmb2xkZXIiIGFuZCAiZm9sZGVycyIuCisKKworU1BFQ0lGSUMgQ09VTlRTCisKK1RvIG1hdGNoIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGl0ZW1zIHVzZSB0aGUgZm9ybSAiXHtuLG19Ii4gICJuIiBhbmQgIm0iIGFyZQorbnVtYmVycy4gIFRoZSBpdGVtIGJlZm9yZSBpdCB3aWxsIGJlIG1hdGNoZWQgIm4iIHRvICJtIiB0aW1lcyB8aW5jbHVzaXZlfC4KK0V4YW1wbGU6ID4KKworCS9hYlx7Myw1fQorCittYXRjaGVzICJhYmJiIiwgImFiYmJiIiBhbmQgImFiYmJiYiIuCisgIFdoZW4gIm4iIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHplcm8uICBXaGVuICJtIiBpcyBvbWl0dGVkIGl0IGRlZmF1bHRzCit0byBpbmZpbml0eS4gIFdoZW4gIixtIiBpcyBvbWl0dGVkLCBpdCBtYXRjaGVzIGV4YWN0bHkgIm4iIHRpbWVzLgorRXhhbXBsZXM6CisKKwlwYXR0ZXJuCQltYXRjaCBjb3VudCB+CisJXHssNH0JCTAsIDEsIDIsIDMgb3IgNAorCVx7Myx9CQkzLCA0LCA1LCBldGMuCisJXHswLDF9CQkwIG9yIDEsIHNhbWUgYXMgXD0KKwlcezAsfQkJMCBvciBtb3JlLCBzYW1lIGFzICoKKwlcezEsfQkJMSBvciBtb3JlLCBzYW1lIGFzIFwrCisJXHszfQkJMworCisKK01BVENISU5HIEFTIExJVFRMRSBBUyBQT1NTSUJMRQorCitUaGUgaXRlbXMgc28gZmFyIG1hdGNoIGFzIG1hbnkgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiBmaW5kLiAgVG8gbWF0Y2ggYXMgZmV3CithcyBwb3NzaWJsZSwgdXNlICJcey1uLG19Ii4gIEl0IHdvcmtzIHRoZSBzYW1lIGFzICJce24sbX0iLCBleGNlcHQgdGhhdCB0aGUKK21pbmltYWwgYW1vdW50IHBvc3NpYmxlIGlzIHVzZWQuCisgICBGb3IgZXhhbXBsZSwgdXNlOiA+CisKKwkvYWJcey0xLDN9CisKK1dpbGwgbWF0Y2ggImFiIiBpbiAiYWJiYiIuICBBY3R1YWxseSwgaXQgd2lsbCBuZXZlciBtYXRjaCBtb3JlIHRoYW4gb25lIGIsCitiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBtYXRjaCBtb3JlLiAgSXQgcmVxdWlyZXMgc29tZXRoaW5nIGVsc2UgdG8gZm9yY2UKK2l0IHRvIG1hdGNoIG1vcmUgdGhhbiB0aGUgbG93ZXIgbGltaXQuCisgICBUaGUgc2FtZSBydWxlcyBhcHBseSB0byByZW1vdmluZyAibiIgYW5kICJtIi4gIEl0J3MgZXZlbiBwb3NzaWJsZSB0byByZW1vdmUKK2JvdGggb2YgdGhlLCByZXN1bHRpbmcgaW4gIlx7LX0iLiAgVGhpcyBtYXRjaGVzIHRoZSBpdGVtIGJlZm9yZSBpdCB6ZXJvIG9yCittb3JlIHRpbWVzLCBhcyBmZXcgYXMgcG9zc2libGUuICBUaGUgaXRlbSBieSBpdHNlbGYgYWx3YXlzIG1hdGNoIHplcm8gdGltZXMuCitJdCBpcyB1c2VmdWwgd2hlbiBjb21iaW5lZCB3aXRoIHNvbWV0aGluZyBlbHNlLiAgRXhhbXBsZTogPgorCisJL2EuXHstfWIKKworVGhpcyBtYXRjaGVzICJheGIiIGluICJheGJ4YiIuICBJZiB0aGlzIHBhdHRlcm4gd291bGQgYmUgdXNlZDogPgorCisJL2EuKmIKKworSXQgd291bGQgdHJ5IHRvIG1hdGNoIGFzIG1hbnkgY2hhcmFjdGVycyBhcyBwb3NzaWJsZSB3aXRoICIuKiIsIHRodXMgaXQKK21hdGNoZXMgImF4YnhiIiBhcyBhIHdob2xlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNy41KglBbHRlcm5hdGl2ZXMKKworVGhlICJvciIgb3BlcmF0b3IgaW4gYSBwYXR0ZXJuIGlzICJcfCIuICBFeGFtcGxlOiA+CisKKwkvZm9vXHxiYXIKKworVGhpcyBtYXRjaGVzICJmb28iIG9yICJiYXIiLiAgTW9yZSBhbHRlcm5hdGl2ZXMgY2FuIGJlIGNvbmNhdGVuYXRlZDogPgorCisJL29uZVx8dHdvXHx0aHJlZQorCitNYXRjaGVzICJvbmUiLCAidHdvIiBhbmQgInRocmVlIi4KKyAgIFRvIG1hdGNoIG11bHRpcGxlIHRpbWVzLCB0aGUgd2hvbGUgdGhpbmcgbXVzdCBiZSBwbGFjZWQgaW4gIlwoIiBhbmQgIlwpIjogPgorCisJL1woZm9vXHxiYXJcKVwrCisKK1RoaXMgbWF0Y2hlcyAiZm9vIiwgImZvb2JhciIsICJmb29mb28iLCAiYmFyZm9vYmFyIiwgZXRjLgorICAgQW5vdGhlciBleGFtcGxlOiA+CisKKwkvZW5kXChpZlx8d2hpbGVcfGZvclwpCisKK1RoaXMgbWF0Y2hlcyAiZW5kaWYiLCAiZW5kd2hpbGUiIGFuZCAiZW5kZm9yIi4KKworQSByZWxhdGVkIGl0ZW0gaXMgIlwmIi4gIFRoaXMgcmVxdWlyZXMgdGhhdCBib3RoIGFsdGVybmF0aXZlcyBtYXRjaCBpbiB0aGUKK3NhbWUgcGxhY2UuICBUaGUgcmVzdWx0aW5nIG1hdGNoIHVzZXMgdGhlIGxhc3QgYWx0ZXJuYXRpdmUuICBFeGFtcGxlOiA+CisKKwkvZm9yZXZlclwmLi4uCisKK1RoaXMgbWF0Y2hlcyAiZm9yIiBpbiAiZm9yZXZlciIuICBJdCB3aWxsIG5vdCBtYXRjaCAiZm9ydHVpbiIsIGZvciBleGFtcGxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNy42KglDaGFyYWN0ZXIgcmFuZ2VzCisKK1RvIG1hdGNoICJhIiwgImIiIG9yICJjIiB5b3UgY291bGQgdXNlICIvYVx8Ylx8YyIuICBXaGVuIHlvdSB3YW50IHRvIG1hdGNoIGFsbAorbGV0dGVycyBmcm9tICJhIiB0byAieiIgdGhpcyBnZXRzIHZlcnkgbG9uZy4gIFRoZXJlIGlzIGEgc2hvcnRlciBtZXRob2Q6ID4KKworCS9bYS16XQorCitUaGUgW10gY29uc3RydWN0IG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyLiAgSW5zaWRlIHlvdSBzcGVjaWZ5IHdoaWNoCitjaGFyYWN0ZXJzIHRvIG1hdGNoLiAgWW91IGNhbiBpbmNsdWRlIGEgbGlzdCBvZiBjaGFyYWN0ZXJzLCBsaWtlIHRoaXM6ID4KKworCS9bMDEyMzQ1Njc4OWFiY2RlZl0KKworVGhpcyB3aWxsIG1hdGNoIGFueSBvZiB0aGUgY2hhcmFjdGVycyBpbmNsdWRlZC4gIEZvciBjb25zZWN1dGl2ZSBjaGFyYWN0ZXJzCit5b3UgY2FuIHNwZWNpZnkgdGhlIHJhbmdlLiAgIjAtMyIgc3RhbmRzIGZvciAiMDEyMyIuICAidy16IiBzdGFuZHMgZm9yICJ3eHl6Ii4KK1RodXMgdGhlIHNhbWUgY29tbWFuZCBhcyBhYm92ZSBjYW4gYmUgc2hvcnRlbmVkIHRvOiA+CisKKwkvWzAtOWEtZl0KKworVG8gbWF0Y2ggdGhlICItIiBjaGFyYWN0ZXIgaXRzZWxmIG1ha2UgaXQgdGhlIGZpcnN0IG9yIGxhc3Qgb25lIGluIHRoZSByYW5nZS4KK1RoZXNlIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgYWNjZXB0ZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRoZW0gaW5zaWRlIGEKK1tdIHJhbmdlICh0aGV5IGNhbiBhY3R1YWxseSBiZSB1c2VkIGFueXdoZXJlIGluIHRoZSBzZWFyY2ggcGF0dGVybik6CisKKwlcZQk8RXNjPgorCVx0CTxUYWI+CisJXHIJPENSPgorCVxiCTxCUz4KKworVGhlcmUgYXJlIGEgZmV3IG1vcmUgc3BlY2lhbCBjYXNlcyBmb3IgW10gcmFuZ2VzLCBzZWUgfC9bXXwgZm9yIHRoZSB3aG9sZQorc3RvcnkuCisKKworQ09NUExFTUVOVEVEIFJBTkdFCisKK1RvIGF2b2lkIG1hdGNoaW5nIGEgc3BlY2lmaWMgY2hhcmFjdGVyLCB1c2UgIl4iIGF0IHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuCitUaGUgW10gaXRlbSB0aGVuIG1hdGNoZXMgZXZlcnl0aGluZyBidXQgdGhlIGNoYXJhY3RlcnMgaW5jbHVkZWQuICBFeGFtcGxlOiA+CisKKwkvIlteIl0qIgorPAorCSAiCSAgYSBkb3VibGUgcXVvdGUKKwkgIFteIl0JICBhbnkgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgZG91YmxlIHF1b3RlCisJICAgICAgKgkgIGFzIG1hbnkgYXMgcG9zc2libGUKKwkgICAgICAgIiAgYSBkb3VibGUgcXVvdGUgYWdhaW4KKworVGhpcyBtYXRjaGVzICJmb28iIGFuZCAiMyF4IiwgaW5jbHVkaW5nIHRoZSBkb3VibGUgcXVvdGVzLgorCisKK1BSRURFRklORUQgUkFOR0VTCisKK0EgbnVtYmVyIG9mIHJhbmdlcyBhcmUgdXNlZCB2ZXJ5IG9mdGVuLiAgVmltIHByb3ZpZGVzIGEgc2hvcnRjdXQgZm9yIHRoZXNlLgorRm9yIGV4YW1wbGU6ID4KKworCS9cYQorCitGaW5kcyBhbHBoYWJldGljIGNoYXJhY3RlcnMuICBUaGlzIGlzIGVxdWFsIHRvIHVzaW5nICIvW2EtekEtWl0iLiAgSGVyZSBhcmUgYQorZmV3IG1vcmUgb2YgdGhlc2U6CisKKwlpdGVtCW1hdGNoZXMJCQllcXVpdmFsZW50IH4KKwlcZAlkaWdpdAkJCVswLTldCisJXEQJbm9uLWRpZ2l0CQlbXjAtOV0KKwlceAloZXggZGlnaXQJCVswLTlhLWZBLUZdCisJXFgJbm9uLWhleCBkaWdpdAkJW14wLTlhLWZBLUZdCisJXHMJd2hpdGUgc3BhY2UJCVsgCV0gICAgICg8VGFiPiBhbmQgPFNwYWNlPikKKwlcUwlub24td2hpdGUgY2hhcmFjdGVycwlbXiAJXSAgICAgKG5vdCA8VGFiPiBhbmQgPFNwYWNlPikKKwlcbAlsb3dlcmNhc2UgYWxwaGEJCVthLXpdCisJXEwJbm9uLWxvd2VyY2FzZSBhbHBoYQlbXmEtel0KKwlcdQl1cHBlcmNhc2UgYWxwaGEJCVtBLVpdCisJXFUJbm9uLXVwcGVyY2FzZSBhbHBoYQlbXkEtWl0KKworCU5vdGU6CisJVXNpbmcgdGhlc2UgcHJlZGVmaW5lZCByYW5nZXMgd29ya3MgYSBsb3QgZmFzdGVyIHRoYW4gdGhlIGNoYXJhY3RlcgorCXJhbmdlIGl0IHN0YW5kcyBmb3IuCisJVGhlc2UgaXRlbXMgY2FuIG5vdCBiZSB1c2VkIGluc2lkZSBbXS4gIFRodXMgIltcZFxsXSIgZG9lcyBOT1Qgd29yayB0bworCW1hdGNoIGEgZGlnaXQgb3IgbG93ZXJjYXNlIGFscGhhLiAgVXNlICJcKFxkXHxcbFwpIiBpbnN0ZWFkLgorCitTZWUgfC9cc3wgZm9yIHRoZSB3aG9sZSBsaXN0IG9mIHRoZXNlIHJhbmdlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjcuNyoJQ2hhcmFjdGVyIGNsYXNzZXMKKworVGhlIGNoYXJhY3RlciByYW5nZSBtYXRjaGVzIGEgZml4ZWQgc2V0IG9mIGNoYXJhY3RlcnMuICBBIGNoYXJhY3RlciBjbGFzcyBpcworc2ltaWxhciwgYnV0IHdpdGggYW4gZXNzZW50aWFsIGRpZmZlcmVuY2U6IFRoZSBzZXQgb2YgY2hhcmFjdGVycyBjYW4gYmUKK3JlZGVmaW5lZCB3aXRob3V0IGNoYW5naW5nIHRoZSBzZWFyY2ggcGF0dGVybi4KKyAgIEZvciBleGFtcGxlLCBzZWFyY2ggZm9yIHRoaXMgcGF0dGVybjogPgorCisJL1xmXCsKKworVGhlICJcZiIgaXRlbXMgc3RhbmRzIGZvciBmaWxlIG5hbWUgY2hhcmFjdGVycy4gIFRodXMgdGhpcyBtYXRjaGVzIGEgc2VxdWVuY2UKK29mIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgYSBmaWxlIG5hbWUuCisgICBXaGljaCBjaGFyYWN0ZXJzIGNhbiBiZSBwYXJ0IG9mIGEgZmlsZSBuYW1lIGRlcGVuZHMgb24gdGhlIHN5c3RlbSB5b3UgYXJlCit1c2luZy4gIE9uIE1TLVdpbmRvd3MsIHRoZSBiYWNrc2xhc2ggaXMgaW5jbHVkZWQsIG9uIFVuaXggaXQgaXMgbm90LiAgVGhpcyBpcworc3BlY2lmaWVkIHdpdGggdGhlICdpc2ZuYW1lJyBvcHRpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgVW5peCBpczogPgorCisJOnNldCBpc2ZuYW1lCisJaXNmbmFtZT1ALDQ4LTU3LC8sLiwtLF8sKywsLCMsJCwlLH4sPQorCitGb3Igb3RoZXIgc3lzdGVtcyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBkaWZmZXJlbnQuICBUaHVzIHlvdSBjYW4gbWFrZSBhIHNlYXJjaAorcGF0dGVybiB3aXRoICJcZiIgdG8gbWF0Y2ggYSBmaWxlIG5hbWUsIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRvCit0aGUgc3lzdGVtIHlvdSBhcmUgdXNpbmcgaXQgb24uCisKKwlOb3RlOgorCUFjdHVhbGx5LCBVbml4IGFsbG93cyB1c2luZyBqdXN0IGFib3V0IGFueSBjaGFyYWN0ZXIgaW4gYSBmaWxlIG5hbWUsCisJaW5jbHVkaW5nIHdoaXRlIHNwYWNlLiAgSW5jbHVkaW5nIHRoZXNlIGNoYXJhY3RlcnMgaW4gJ2lzZm5hbWUnIHdvdWxkCisJYmUgdGhlb3JldGljYWxseSBjb3JyZWN0LiAgQnV0IGl0IHdvdWxkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byBmaW5kIHRoZQorCWVuZCBvZiBhIGZpbGUgbmFtZSBpbiB0ZXh0LiAgVGh1cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAnaXNmbmFtZScgaXMgYQorCWNvbXByb21pc2UuCisKK1RoZSBjaGFyYWN0ZXIgY2xhc3NlcyBhcmU6CisKKwlpdGVtCW1hdGNoZXMJCQkJb3B0aW9uIH4KKwlcaQlpZGVudGlmaWVyIGNoYXJhY3RlcnMJCSdpc2lkZW50JworCVxJCWxpa2UgXGksIGV4Y2x1ZGluZyBkaWdpdHMKKwlcawlrZXl3b3JkIGNoYXJhY3RlcnMJCSdpc2tleXdvcmQnCisJXEsJbGlrZSBcaywgZXhjbHVkaW5nIGRpZ2l0cworCVxwCXByaW50YWJsZSBjaGFyYWN0ZXJzCQknaXNwcmludCcKKwlcUAlsaWtlIFxwLCBleGNsdWRpbmcgZGlnaXRzCisJXGYJZmlsZSBuYW1lIGNoYXJhY3RlcnMJCSdpc2ZuYW1lJworCVxGCWxpa2UgXGYsIGV4Y2x1ZGluZyBkaWdpdHMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjcuOCoJTWF0Y2hpbmcgYSBsaW5lIGJyZWFrCisKK1ZpbSBjYW4gZmluZCBhIHBhdHRlcm4gdGhhdCBpbmNsdWRlcyBhIGxpbmUgYnJlYWsuICBZb3UgbmVlZCB0byBzcGVjaWZ5IHdoZXJlCit0aGUgbGluZSBicmVhayBoYXBwZW5zLCBiZWNhdXNlIGFsbCBpdGVtcyBtZW50aW9uZWQgc28gZmFyIGRvbid0IG1hdGNoIGEgbGluZQorYnJlYWsuCisgICBUbyBjaGVjayBmb3IgYSBsaW5lIGJyZWFrIGluIGEgc3BlY2lmaWMgcGxhY2UsIHVzZSB0aGUgIlxuIiBpdGVtOiA+CisKKwkvdGhlXG53b3JkCisKK1RoaXMgd2lsbCBtYXRjaCBhdCBhIGxpbmUgdGhhdCBlbmRzIGluICJ0aGUiIGFuZCB0aGUgbmV4dCBsaW5lIHN0YXJ0cyB3aXRoCisid29yZCIuICBUbyBtYXRjaCAidGhlIHdvcmQiIGFzIHdlbGwsIHlvdSBuZWVkIHRvIG1hdGNoIGEgc3BhY2Ugb3IgYSBsaW5lCiticmVhay4gIFRoZSBpdGVtIHRvIHVzZSBmb3IgaXQgaXMgIlxfcyI6ID4KKworCS90aGVcX3N3b3JkCisKK1RvIGFsbG93IGFueSBhbW91bnQgb2Ygd2hpdGUgc3BhY2U6ID4KKworCS90aGVcX3NcK3dvcmQKKworVGhpcyBhbHNvIG1hdGNoZXMgd2hlbiAidGhlICAiIGlzIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGFuZCAiICAgd29yZCIgYXQgdGhlCitzdGFydCBvZiB0aGUgbmV4dCBvbmUuCisKKyJccyIgbWF0Y2hlcyB3aGl0ZSBzcGFjZSwgIlxfcyIgbWF0Y2hlcyB3aGl0ZSBzcGFjZSBvciBhIGxpbmUgYnJlYWsuCitTaW1pbGFybHksICJcYSIgbWF0Y2hlcyBhbiBhbHBoYWJldGljIGNoYXJhY3RlciwgYW5kICJcX2EiIG1hdGNoZXMgYW4KK2FscGhhYmV0aWMgY2hhcmFjdGVyIG9yIGEgbGluZSBicmVhay4gIFRoZSBvdGhlciBjaGFyYWN0ZXIgY2xhc3NlcyBhbmQgcmFuZ2VzCitjYW4gYmUgbW9kaWZpZWQgaW4gdGhlIHNhbWUgd2F5IGJ5IGluc2VydGluZyBhICJfIi4KKworTWFueSBvdGhlciBpdGVtcyBjYW4gYmUgbWFkZSB0byBtYXRjaCBhIGxpbmUgYnJlYWsgYnkgcHJlcGVuZGluZyAiXF8iLiAgRm9yCitleGFtcGxlOiAiXF8uIiBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgb3IgYSBsaW5lIGJyZWFrLgorCisJTm90ZToKKwkiXF8uKiIgbWF0Y2hlcyBldmVyeXRoaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIGZpbGUuICBCZSBjYXJlZnVsIHdpdGgKKwl0aGlzLCBpdCBjYW4gbWFrZSBhIHNlYXJjaCBjb21tYW5kIHZlcnkgc2xvdy4KKworQW5vdGhlciBleGFtcGxlIGlzICJcX1tdIiwgYSBjaGFyYWN0ZXIgcmFuZ2UgdGhhdCBpbmNsdWRlcyBhIGxpbmUgYnJlYWs6ID4KKworCS8iXF9bXiJdKiIKKworVGhpcyBmaW5kcyBhIHRleHQgaW4gZG91YmxlIHF1b3RlcyB0aGF0IG1heSBiZSBzcGxpdCB1cCBpbiBzZXZlcmFsIGxpbmVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyNy45KglFeGFtcGxlcworCitIZXJlIGFyZSBhIGZldyBzZWFyY2ggcGF0dGVybnMgeW91IG1pZ2h0IGZpbmQgdXNlZnVsLiAgVGhpcyBzaG93cyBob3cgdGhlCitpdGVtcyBtZW50aW9uZWQgYWJvdmUgY2FuIGJlIGNvbWJpbmVkLgorCisKK0ZJTkRJTkcgQSBDQUxJRk9STklBIExJQ0VOU0UgUExBVEUKKworQSBzYW1wbGUgbGljZW5zZSBwbGFjZSBudW1iZXIgaXMgIjFNR1UxMDMiLiAgSXQgaGFzIG9uZSBkaWdpdCwgdGhyZWUgdXBwZXJjYXNlCitsZXR0ZXJzIGFuZCB0aHJlZSBkaWdpdHMuICBEaXJlY3RseSBwdXR0aW5nIHRoaXMgaW50byBhIHNlYXJjaCBwYXR0ZXJuOiA+CisKKwkvXGRcdVx1XHVcZFxkXGQKKworQW5vdGhlciB3YXkgaXMgdG8gc3BlY2lmeSB0aGF0IHRoZXJlIGFyZSB0aHJlZSBkaWdpdHMgYW5kIGxldHRlcnMgd2l0aCBhCitjb3VudDogPgorCisJL1xkXHVcezN9XGRcezN9CisKK1VzaW5nIFtdIHJhbmdlcyBpbnN0ZWFkOiA+CisKKwkvWzAtOV1bQS1aXVx7M31bMC05XVx7M30KKworV2hpY2ggb25lIG9mIHRoZXNlIHlvdSBzaG91bGQgdXNlPyAgV2hpY2hldmVyIG9uZSB5b3UgY2FuIHJlbWVtYmVyLiAgVGhlCitzaW1wbGUgd2F5IHlvdSBjYW4gcmVtZW1iZXIgaXMgbXVjaCBmYXN0ZXIgdGhhbiB0aGUgZmFuY3kgd2F5IHRoYXQgeW91IGNhbid0LgorSWYgeW91IGNhbiByZW1lbWJlciB0aGVtIGFsbCwgdGhlbiBhdm9pZCB0aGUgbGFzdCBvbmUsIGJlY2F1c2UgaXQncyBib3RoIG1vcmUKK3R5cGluZyBhbmQgc2xvd2VyIHRvIGV4ZWN1dGUuCisKKworRklORElORyBBTiBJREVOVElGSUVSCisKK0luIEMgcHJvZ3JhbXMgKGFuZCBtYW55IG90aGVyIGNvbXB1dGVyIGxhbmd1YWdlcykgYW4gaWRlbnRpZmllciBzdGFydHMgd2l0aCBhCitsZXR0ZXIgYW5kIGZ1cnRoZXIgY29uc2lzdHMgb2YgbGV0dGVycyBhbmQgZGlnaXRzLiAgVW5kZXJzY29yZXMgY2FuIGJlIHVzZWQKK3Rvby4gIFRoaXMgY2FuIGJlIGZvdW5kIHdpdGg6ID4KKworCS9cPFxoXHcqXD4KKworIlw8IiBhbmQgIlw+IiBhcmUgdXNlZCB0byBmaW5kIG9ubHkgd2hvbGUgd29yZHMuICAiXGgiIHN0YW5kcyBmb3IgIltBLVphLXpfXSIKK2FuZCAiXHciIGZvciAiWzAtOUEtWmEtel9dIi4KKworCU5vdGU6CisJIlw8IiBhbmQgIlw+IiBkZXBlbmQgb24gdGhlICdpc2tleXdvcmQnIG9wdGlvbi4gIElmIGl0IGluY2x1ZGVzICItIiwKKwlmb3IgZXhhbXBsZSwgdGhlbiAiaWRlbnQtIiBpcyBub3QgbWF0Y2hlZC4gIEluIHRoaXMgc2l0dWF0aW9uIHVzZTogPgorCisJCS9cd1xAPCFcaFx3Klx3XEAhCis8CisJVGhpcyBjaGVja3MgaWYgIlx3IiBkb2VzIG5vdCBtYXRjaCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGlkZW50aWZpZXIuCisJU2VlIHwvXEA8IXwgYW5kIHwvXEAhfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8yOC50eHR8ICBGb2xkaW5nCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzI4LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8yOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyZGMzZgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8yOC50eHQKQEAgLTAsMCArMSw0MjYgQEAKKyp1c3JfMjgudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBEZWMgMjEKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCQkgICBGb2xkaW5nCisKKworU3RydWN0dXJlZCB0ZXh0IGNhbiBiZSBzZXBhcmF0ZWQgaW4gc2VjdGlvbnMuICBBbmQgc2VjdGlvbnMgaW4gc3ViLXNlY3Rpb25zLgorRm9sZGluZyBhbGxvd3MgeW91IHRvIGRpc3BsYXkgYSBzZWN0aW9uIGFzIG9uZSBsaW5lLCBwcm92aWRpbmcgYW4gb3ZlcnZpZXcuCitUaGlzIGNoYXB0ZXIgZXhwbGFpbnMgdGhlIGRpZmZlcmVudCB3YXlzIHRoaXMgY2FuIGJlIGRvbmUuCisKK3wyOC4xfAlXaGF0IGlzIGZvbGRpbmc/Cit8MjguMnwJTWFudWFsIGZvbGRpbmcKK3wyOC4zfAlXb3JraW5nIHdpdGggZm9sZHMKK3wyOC40fAlTYXZpbmcgYW5kIHJlc3RvcmluZyBmb2xkcworfDI4LjV8CUZvbGRpbmcgYnkgaW5kZW50Cit8MjguNnwJRm9sZGluZyB3aXRoIG1hcmtlcnMKK3wyOC43fAlGb2xkaW5nIGJ5IHN5bnRheAorfDI4Ljh8CUZvbGRpbmcgYnkgZXhwcmVzc2lvbgorfDI4Ljl8CUZvbGRpbmcgdW5jaGFuZ2VkIGxpbmVzCit8MjguMTB8IFdoaWNoIGZvbGQgbWV0aG9kIHRvIHVzZT8KKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfMjkudHh0fCAgTW92aW5nIHRocm91Z2ggcHJvZ3JhbXMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzI3LnR4dHwgIFNlYXJjaCBjb21tYW5kcyBhbmQgcGF0dGVybnMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI4LjEqCVdoYXQgaXMgZm9sZGluZz8KKworRm9sZGluZyBpcyB1c2VkIHRvIHNob3cgYSByYW5nZSBvZiBsaW5lcyBpbiB0aGUgYnVmZmVyIGFzIGEgc2luZ2xlIGxpbmUgb24gdGhlCitzY3JlZW4uICBMaWtlIGEgcGllY2Ugb2YgcGFwZXIgd2hpY2ggaXMgZm9sZGVkIHRvIG1ha2UgaXQgc2hvcnRlcjoKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCBsaW5lIDEJCSB8CisJfCBsaW5lIDIJCSB8CisJfCBsaW5lIDMJCSB8CisJfF9fX19fX19fX19fX19fX19fX19fX19fIHwKKwlcCQkJIFwKKwkgXF9fX19fX19fX19fX19fX19fX19fX19fX1wKKwkgLyBmb2xkZWQgbGluZXMJCSAgLworCS9fX19fX19fX19fX19fX19fX19fX19fX18vCisJfCBsaW5lIDEyCQkgfAorCXwgbGluZSAxMwkJIHwKKwl8IGxpbmUgMTQJCSB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIHRleHQgaXMgc3RpbGwgaW4gdGhlIGJ1ZmZlciwgdW5jaGFuZ2VkLiAgT25seSB0aGUgd2F5IGxpbmVzIGFyZSBkaXNwbGF5ZWQKK2lzIGFmZmVjdGVkIGJ5IGZvbGRpbmcuCisKK1RoZSBhZHZhbnRhZ2Ugb2YgZm9sZGluZyBpcyB0aGF0IHlvdSBjYW4gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZQorc3RydWN0dXJlIG9mIHRleHQsIGJ5IGZvbGRpbmcgbGluZXMgb2YgYSBzZWN0aW9uIGFuZCByZXBsYWNpbmcgaXQgd2l0aCBhIGxpbmUKK3RoYXQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBzZWN0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOC4yKglNYW51YWwgZm9sZGluZworCitUcnkgaXQgb3V0OiBQb3NpdGlvbiB0aGUgY3Vyc29yIGluIGEgcGFyYWdyYXBoIGFuZCB0eXBlOiA+CisKKwl6ZmFwCisKK1lvdSB3aWxsIHNlZSB0aGF0IHRoZSBwYXJhZ3JhcGggaXMgcmVwbGFjZWQgYnkgYSBoaWdobGlnaHRlZCBsaW5lLiAgWW91IGhhdmUKK2NyZWF0ZWQgYSBmb2xkLiAgfHpmfCBpcyBhbiBvcGVyYXRvciBhbmQgfGFwfCBhIHRleHQgb2JqZWN0IHNlbGVjdGlvbi4gIFlvdQorY2FuIHVzZSB0aGUgfHpmfCBvcGVyYXRvciB3aXRoIGFueSBtb3ZlbWVudCBjb21tYW5kIHRvIGNyZWF0ZSBhIGZvbGQgZm9yIHRoZQordGV4dCB0aGF0IGl0IG1vdmVkIG92ZXIuICB8emZ8IGFsc28gd29ya3MgaW4gVmlzdWFsIG1vZGUuCisKK1RvIHZpZXcgdGhlIHRleHQgYWdhaW4sIG9wZW4gdGhlIGZvbGQgYnkgdHlwaW5nOiA+CisKKwl6bworCitBbmQgeW91IGNhbiBjbG9zZSB0aGUgZm9sZCBhZ2FpbiB3aXRoOiA+CisKKwl6YworCitBbGwgdGhlIGZvbGRpbmcgY29tbWFuZHMgc3RhcnQgd2l0aCAieiIuICBXaXRoIHNvbWUgZmFudGFzeSwgdGhpcyBsb29rcyBsaWtlIGEKK2ZvbGRlZCBwaWVjZSBvZiBwYXBlciwgc2VlbiBmcm9tIHRoZSBzaWRlLiAgVGhlIGxldHRlciBhZnRlciB0aGUgInoiIGhhcyBhCittbmVtb25pYyBtZWFuaW5nIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlbWVtYmVyIHRoZSBjb21tYW5kczoKKworCXpmCUYtb2xkIGNyZWF0aW9uCisJem8JTy1wZW4gYSBmb2xkCisJemMJQy1sb3NlIGEgZm9sZAorCitGb2xkcyBjYW4gYmUgbmVzdGVkOiBBIHJlZ2lvbiBvZiB0ZXh0IHRoYXQgY29udGFpbnMgZm9sZHMgY2FuIGJlIGZvbGRlZAorYWdhaW4uICBGb3IgZXhhbXBsZSwgeW91IGNhbiBmb2xkIGVhY2ggcGFyYWdyYXBoIGluIHRoaXMgc2VjdGlvbiwgYW5kIHRoZW4KK2ZvbGQgYWxsIHRoZSBzZWN0aW9ucyBpbiB0aGlzIGNoYXB0ZXIuICBUcnkgaXQgb3V0LiAgWW91IHdpbGwgbm90aWNlIHRoYXQKK29wZW5pbmcgdGhlIGZvbGQgZm9yIHRoZSB3aG9sZSBjaGFwdGVyIHdpbGwgcmVzdG9yZSB0aGUgbmVzdGVkIGZvbGRzIGFzIHRoZXkKK3dlcmUsIHNvbWUgbWF5IGJlIG9wZW4gYW5kIHNvbWUgbWF5IGJlIGNsb3NlZC4KKworU3VwcG9zZSB5b3UgaGF2ZSBjcmVhdGVkIHNldmVyYWwgZm9sZHMsIGFuZCBub3cgd2FudCB0byB2aWV3IGFsbCB0aGUgdGV4dC4KK1lvdSBjb3VsZCBnbyB0byBlYWNoIGZvbGQgYW5kIHR5cGUgInpvIi4gIFRvIGRvIHRoaXMgZmFzdGVyLCB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwl6cgorCitUaGlzIHdpbGwgUi1lZHVjZSB0aGUgZm9sZGluZy4gIFRoZSBvcHBvc2l0ZSBpczogPgorCisJem0KKworVGhpcyBmb2xkcyBNLW9yZS4gIFlvdSBjYW4gcmVwZWF0ICJ6ciIgYW5kICJ6bSIgdG8gb3BlbiBhbmQgY2xvc2UgbmVzdGVkIGZvbGRzCitvZiBzZXZlcmFsIGxldmVscy4KKworSWYgeW91IGhhdmUgbmVzdGVkIHNldmVyYWwgbGV2ZWxzIGRlZXAsIHlvdSBjYW4gb3BlbiBhbGwgb2YgdGhlbSB3aXRoOiA+CisKKwl6UgorCitUaGlzIFItZWR1Y2VzIGZvbGRzIHVudGlsIHRoZXJlIGFyZSBub25lIGxlZnQuICBBbmQgeW91IGNhbiBjbG9zZSBhbGwgZm9sZHMKK3dpdGg6ID4KKworCXpNCisKK1RoaXMgZm9sZHMgTS1vcmUgYW5kIE0tb3JlLgorCitZb3UgY2FuIHF1aWNrbHkgZGlzYWJsZSB0aGUgZm9sZGluZyB3aXRoIHRoZSB8em58IGNvbW1hbmQuICBUaGVuIHx6TnwgYnJpbmdzCitiYWNrIHRoZSBmb2xkaW5nIGFzIGl0IHdhcy4gIHx6aXwgdG9nZ2xlcyBiZXR3ZWVuIHRoZSB0d28uICBUaGlzIGlzIGEgdXNlZnVsCit3YXkgb2Ygd29ya2luZzoKKy0gY3JlYXRlIGZvbGRzIHRvIGdldCBvdmVydmlldyBvbiB5b3VyIGZpbGUKKy0gbW92ZSBhcm91bmQgdG8gd2hlcmUgeW91IHdhbnQgdG8gZG8geW91ciB3b3JrCistIGRvIHx6aXwgdG8gbG9vayBhdCB0aGUgdGV4dCBhbmQgZWRpdCBpdAorLSBkbyB8eml8IGFnYWluIHRvIGdvIGJhY2sgdG8gbW92aW5nIGFyb3VuZAorCitNb3JlIGFib3V0IG1hbnVhbCBmb2xkaW5nIGluIHRoZSByZWZlcmVuY2UgbWFudWFsOiB8Zm9sZC1tYW51YWx8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI4LjMqCVdvcmtpbmcgd2l0aCBmb2xkcworCitXaGVuIHNvbWUgZm9sZHMgYXJlIGNsb3NlZCwgbW92ZW1lbnQgY29tbWFuZHMgbGlrZSAiaiIgYW5kICJrIiBtb3ZlIG92ZXIgYQorZm9sZCBsaWtlIGl0IHdhcyBhIHNpbmdsZSwgZW1wdHkgbGluZS4gIFRoaXMgYWxsb3dzIHlvdSB0byBxdWlja2x5IG1vdmUgYXJvdW5kCitvdmVyIGZvbGRlZCB0ZXh0LgorCitZb3UgY2FuIHlhbmssIGRlbGV0ZSBhbmQgcHV0IGZvbGRzIGFzIGlmIGl0IHdhcyBhIHNpbmdsZSBsaW5lLiAgVGhpcyBpcyB2ZXJ5Cit1c2VmdWwgaWYgeW91IHdhbnQgdG8gcmVvcmRlciBmdW5jdGlvbnMgaW4gYSBwcm9ncmFtLiAgRmlyc3QgbWFrZSBzdXJlIHRoYXQKK2VhY2ggZm9sZCBjb250YWlucyBhIHdob2xlIGZ1bmN0aW9uIChvciBhIGJpdCBsZXNzKSBieSBzZWxlY3RpbmcgdGhlIHJpZ2h0CisnZm9sZG1ldGhvZCcuICBUaGVuIGRlbGV0ZSB0aGUgZnVuY3Rpb24gd2l0aCAiZGQiLCBtb3ZlIHRoZSBjdXJzb3IgYW5kIHB1dCBpdAord2l0aCAicCIuICBJZiBzb21lIGxpbmVzIG9mIHRoZSBmdW5jdGlvbiBhcmUgYWJvdmUgb3IgYmVsb3cgdGhlIGZvbGQsIHlvdSBjYW4KK3VzZSBWaXN1YWwgc2VsZWN0aW9uOgorLSBwdXQgdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgbGluZSB0byBiZSBtb3ZlZAorLSBoaXQgIlYiIHRvIHN0YXJ0IFZpc3VhbCBtb2RlCistIHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBsYXN0IGxpbmUgdG8gYmUgbW92ZWQKKy0gaGl0ICJkIiB0byBkZWxldGUgdGhlIHNlbGVjdGVkIGxpbmVzLgorLSBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5ldyBwb3NpdGlvbiBhbmQgInAidXQgdGhlIGxpbmVzIHRoZXJlLgorCitJdCBpcyBzb21ldGltZXMgZGlmZmljdWx0IHRvIHNlZSBvciByZW1lbWJlciB3aGVyZSBhIGZvbGQgaXMgbG9jYXRlZCwgdGh1cword2hlcmUgYSB8em98IGNvbW1hbmQgd291bGQgYWN0dWFsbHkgd29yay4gIFRvIHNlZSB0aGUgZGVmaW5lZCBmb2xkczogPgorCisJOnNldCBmb2xkY29sdW1uPTQKKworVGhpcyB3aWxsIHNob3cgYSBzbWFsbCBjb2x1bW4gb24gdGhlIGxlZnQgb2YgdGhlIHdpbmRvdyB0byBpbmRpY2F0ZSBmb2xkcy4KK0EgIisiIGlzIHNob3duIGZvciBhIGNsb3NlZCBmb2xkLiAgQSAiLSIgaXMgc2hvd24gYXQgdGhlIHN0YXJ0IG9mIGVhY2ggb3BlbgorZm9sZCBhbmQgInwiIGF0IGZvbGxvd2luZyBsaW5lcyBvZiB0aGUgZm9sZC4KKworWW91IGNhbiB1c2UgdGhlIG1vdXNlIHRvIG9wZW4gYSBmb2xkIGJ5IGNsaWNraW5nIG9uIHRoZSAiKyIgaW4gdGhlIGZvbGRjb2x1bW4uCitDbGlja2luZyBvbiB0aGUgIi0iIG9yIGEgInwiIGJlbG93IGl0IHdpbGwgY2xvc2UgYW4gb3BlbiBmb2xkLgorCitUbyBvcGVuIGFsbCBmb2xkcyBhdCB0aGUgY3Vyc29yIGxpbmUgdXNlIHx6T3wuCitUbyBjbG9zZSBhbGwgZm9sZHMgYXQgdGhlIGN1cnNvciBsaW5lIHVzZSB8ekN8LgorVG8gZGVsZXRlIGEgZm9sZCBhdCB0aGUgY3Vyc29yIGxpbmUgdXNlIHx6ZHwuCitUbyBkZWxldGUgYWxsIGZvbGRzIGF0IHRoZSBjdXJzb3IgbGluZSB1c2UgfHpEfC4KKworV2hlbiBpbiBJbnNlcnQgbW9kZSwgdGhlIGZvbGQgYXQgdGhlIGN1cnNvciBsaW5lIGlzIG5ldmVyIGNsb3NlZC4gIFRoYXQgYWxsb3dzCit5b3UgdG8gc2VlIHdoYXQgeW91IHR5cGUhCisKK0ZvbGRzIGFyZSBvcGVuZWQgYXV0b21hdGljYWxseSB3aGVuIGp1bXBpbmcgYXJvdW5kIG9yIG1vdmluZyB0aGUgY3Vyc29yIGxlZnQKK29yIHJpZ2h0LiAgRm9yIGV4YW1wbGUsIHRoZSAiMCIgY29tbWFuZCBvcGVucyB0aGUgZm9sZCB1bmRlciB0aGUgY3Vyc29yCisoaWYgJ2ZvbGRvcGVuJyBjb250YWlucyAiaG9yIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQpLiAgVGhlICdmb2xkb3Blbicgb3B0aW9uCitjYW4gYmUgY2hhbmdlZCB0byBvcGVuIGZvbGRzIGZvciBzcGVjaWZpYyBjb21tYW5kcy4gIElmIHlvdSB3YW50IHRoZSBsaW5lCit1bmRlciB0aGUgY3Vyc29yIGFsd2F5cyB0byBiZSBvcGVuLCBkbyB0aGlzOiA+CisKKwk6c2V0IGZvbGRvcGVuPWFsbAorCitXYXJuaW5nOiBZb3Ugd29uJ3QgYmUgYWJsZSB0byBtb3ZlIG9udG8gYSBjbG9zZWQgZm9sZCB0aGVuLiAgWW91IG1pZ2h0IHdhbnQgdG8KK3VzZSB0aGlzIG9ubHkgdGVtcG9yYXJpbHkgYW5kIHRoZW4gc2V0IGl0IGJhY2sgdG8gdGhlIGRlZmF1bHQ6ID4KKworCTpzZXQgZm9sZG9wZW4mCisKK1lvdSBjYW4gbWFrZSBmb2xkcyBjbG9zZSBhdXRvbWF0aWNhbGx5IHdoZW4geW91IG1vdmUgb3V0IG9mIGl0OiA+CisKKwk6c2V0IGZvbGRjbG9zZT1hbGwKKworVGhpcyB3aWxsIHJlLWFwcGx5ICdmb2xkbGV2ZWwnIHRvIGFsbCBmb2xkcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGN1cnNvci4KK1lvdSBoYXZlIHRvIHRyeSBpdCBvdXQgaWYgeW91IGxpa2UgaG93IHRoaXMgZmVlbHMuICBVc2UgfHptfCB0byBmb2xkIG1vcmUgYW5kCit8enJ8IHRvIGZvbGQgbGVzcyAocmVkdWNlIGZvbGRzKS4KKworVGhlIGZvbGRpbmcgaXMgbG9jYWwgdG8gdGhlIHdpbmRvdy4gIFRoaXMgYWxsb3dzIHlvdSB0byBvcGVuIHR3byB3aW5kb3dzIG9uCit0aGUgc2FtZSBidWZmZXIsIG9uZSB3aXRoIGZvbGRzIGFuZCBvbmUgd2l0aG91dCBmb2xkcy4gIE9yIG9uZSB3aXRoIGFsbCBmb2xkcworY2xvc2VkIGFuZCBvbmUgd2l0aCBhbGwgZm9sZHMgb3Blbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjguNCoJU2F2aW5nIGFuZCByZXN0b3JpbmcgZm9sZHMKKworV2hlbiB5b3UgYWJhbmRvbiBhIGZpbGUgKHN0YXJ0aW5nIHRvIGVkaXQgYW5vdGhlciBvbmUpLCB0aGUgc3RhdGUgb2YgdGhlIGZvbGRzCitpcyBsb3N0LiAgSWYgeW91IGNvbWUgYmFjayB0byB0aGUgc2FtZSBmaWxlIGxhdGVyLCBhbGwgbWFudWFsbHkgb3BlbmVkIGFuZAorY2xvc2VkIGZvbGRzIGFyZSBiYWNrIHRvIHRoZWlyIGRlZmF1bHQuICBXaGVuIGZvbGRzIGhhdmUgYmVlbiBjcmVhdGVkCittYW51YWxseSwgYWxsIGZvbGRzIGFyZSBnb25lISAgVG8gc2F2ZSB0aGUgZm9sZHMgdXNlIHRoZSB8Om1rdmlld3wgY29tbWFuZDogPgorCisJOm1rdmlldworCitUaGlzIHdpbGwgc3RvcmUgdGhlIHNldHRpbmdzIGFuZCBvdGhlciB0aGluZ3MgdGhhdCBpbmZsdWVuY2UgdGhlIHZpZXcgb24gdGhlCitmaWxlLiAgWW91IGNhbiBjaGFuZ2Ugd2hhdCBpcyBzdG9yZWQgd2l0aCB0aGUgJ3ZpZXdvcHRpb25zJyBvcHRpb24uCitXaGVuIHlvdSBjb21lIGJhY2sgdG8gdGhlIHNhbWUgZmlsZSBsYXRlciwgeW91IGNhbiBsb2FkIHRoZSB2aWV3IGFnYWluOiA+CisKKwk6bG9hZHZpZXcKKworWW91IGNhbiBzdG9yZSB1cCB0byB0ZW4gdmlld3Mgb24gb25lIGZpbGUuICBGb3IgZXhhbXBsZSwgdG8gc2F2ZSB0aGUgY3VycmVudAorc2V0dXAgYXMgdGhlIHRoaXJkIHZpZXcgYW5kIGxvYWQgdGhlIHNlY29uZCB2aWV3OiA+CisKKwk6bWt2aWV3IDMKKwk6bG9hZHZpZXcgMgorCitOb3RlIHRoYXQgd2hlbiB5b3UgaW5zZXJ0IG9yIGRlbGV0ZSBsaW5lcyB0aGUgdmlld3MgbWlnaHQgYmVjb21lIGludmFsaWQuCitBbHNvIGNoZWNrIG91dCB0aGUgJ3ZpZXdkaXInIG9wdGlvbiwgd2hpY2ggc3BlY2lmaWVzIHdoZXJlIHRoZSB2aWV3cyBhcmUKK3N0b3JlZC4gIFlvdSBtaWdodCB3YW50IHRvIGRlbGV0ZSBvbGQgdmlld3Mgbm93IGFuZCB0aGVuLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOC41KglGb2xkaW5nIGJ5IGluZGVudAorCitEZWZpbmluZyBmb2xkcyB3aXRoIHx6ZnwgaXMgYSBsb3Qgb2Ygd29yay4gIElmIHlvdXIgdGV4dCBpcyBzdHJ1Y3R1cmVkIGJ5CitnaXZpbmcgbG93ZXIgbGV2ZWwgaXRlbXMgYSBsYXJnZXIgaW5kZW50LCB5b3UgY2FuIHVzZSB0aGUgaW5kZW50IGZvbGRpbmcKK21ldGhvZC4gIFRoaXMgd2lsbCBjcmVhdGUgZm9sZHMgZm9yIGV2ZXJ5IHNlcXVlbmNlIG9mIGxpbmVzIHdpdGggdGhlIHNhbWUKK2luZGVudC4gIExpbmVzIHdpdGggYSBsYXJnZXIgaW5kZW50IHdpbGwgYmVjb21lIG5lc3RlZCBmb2xkcy4gIFRoaXMgd29ya3Mgd2VsbAord2l0aCBtYW55IHByb2dyYW1taW5nIGxhbmd1YWdlcy4KKworVHJ5IHRoaXMgYnkgc2V0dGluZyB0aGUgJ2ZvbGRtZXRob2QnIG9wdGlvbjogPgorCisJOnNldCBmb2xkbWV0aG9kPWluZGVudAorCitUaGVuIHlvdSBjYW4gdXNlIHRoZSB8em18IGFuZCB8enJ8IGNvbW1hbmRzIHRvIGZvbGQgbW9yZSBhbmQgcmVkdWNlIGZvbGRpbmcuCitJdCdzIGVhc3kgdG8gc2VlIG9uIHRoaXMgZXhhbXBsZSB0ZXh0OgorCitUaGlzIGxpbmUgaXMgbm90IGluZGVudGVkCisJVGhpcyBsaW5lIGlzIGluZGVudGVkIG9uY2UKKwkJVGhpcyBsaW5lIGlzIGluZGVudGVkIHR3aWNlCisJCVRoaXMgbGluZSBpcyBpbmRlbnRlZCB0d2ljZQorCVRoaXMgbGluZSBpcyBpbmRlbnRlZCBvbmNlCitUaGlzIGxpbmUgaXMgbm90IGluZGVudGVkCisJVGhpcyBsaW5lIGlzIGluZGVudGVkIG9uY2UKKwlUaGlzIGxpbmUgaXMgaW5kZW50ZWQgb25jZQorCitOb3RlIHRoYXQgdGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIGFtb3VudCBvZiBpbmRlbnQgYW5kIHRoZSBmb2xkIGRlcHRoIGRlcGVuZHMKK29uIHRoZSAnc2hpZnR3aWR0aCcgb3B0aW9uLiAgRWFjaCAnc2hpZnR3aWR0aCcgd29ydGggb2YgaW5kZW50IGFkZHMgb25lIHRvIHRoZQorZGVwdGggb2YgdGhlIGZvbGQuICBUaGlzIGlzIGNhbGxlZCBhIGZvbGQgbGV2ZWwuCisKK1doZW4geW91IHVzZSB0aGUgfHpyfCBhbmQgfHptfCBjb21tYW5kcyB5b3UgYWN0dWFsbHkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlCisnZm9sZGxldmVsJyBvcHRpb24uICBZb3UgY291bGQgYWxzbyBzZXQgaXQgZGlyZWN0bHk6ID4KKworCTpzZXQgZm9sZGxldmVsPTMKKworVGhpcyBtZWFucyB0aGF0IGFsbCBmb2xkcyB3aXRoIHRocmVlIHRpbWVzIGEgJ3NoaWZ0d2lkdGgnIGluZGVudCBvciBtb3JlIHdpbGwKK2JlIGNsb3NlZC4gIFRoZSBsb3dlciB0aGUgZm9sZGxldmVsLCB0aGUgbW9yZSBmb2xkcyB3aWxsIGJlIGNsb3NlZC4gIFdoZW4KKydmb2xkbGV2ZWwnIGlzIHplcm8sIGFsbCBmb2xkcyBhcmUgY2xvc2VkLiAgfHpNfCBkb2VzIHNldCAnZm9sZGxldmVsJyB0byB6ZXJvLgorVGhlIG9wcG9zaXRlIGNvbW1hbmQgfHpSfCBzZXRzICdmb2xkbGV2ZWwnIHRvIHRoZSBkZWVwZXN0IGZvbGQgbGV2ZWwgdGhhdCBpcworcHJlc2VudCBpbiB0aGUgZmlsZS4KKworVGh1cyB0aGVyZSBhcmUgdHdvIHdheXMgdG8gb3BlbiBhbmQgY2xvc2UgdGhlIGZvbGRzOgorKEEpIEJ5IHNldHRpbmcgdGhlIGZvbGQgbGV2ZWwuCisgICAgVGhpcyBnaXZlcyBhIHZlcnkgcXVpY2sgd2F5IG9mICJ6b29taW5nIG91dCIgdG8gdmlldyB0aGUgc3RydWN0dXJlIG9mIHRoZQorICAgIHRleHQsIG1vdmUgdGhlIGN1cnNvciwgYW5kICJ6b29tIGluIiBvbiB0aGUgdGV4dCBhZ2Fpbi4KKworKEIpIEJ5IHVzaW5nIHx6b3wgYW5kIHx6Y3wgY29tbWFuZHMgdG8gb3BlbiBvciBjbG9zZSBzcGVjaWZpYyBmb2xkcy4KKyAgICBUaGlzIGFsbG93cyBvcGVuaW5nIG9ubHkgdGhvc2UgZm9sZHMgdGhhdCB5b3Ugd2FudCB0byBiZSBvcGVuLCB3aGlsZSBvdGhlcgorICAgIGZvbGRzIHJlbWFpbiBjbG9zZWQuCisKK1RoaXMgY2FuIGJlIGNvbWJpbmVkOiBZb3UgY2FuIGZpcnN0IGNsb3NlIG1vc3QgZm9sZHMgYnkgdXNpbmcgfHptfCBhIGZldyB0aW1lcworYW5kIHRoZW4gb3BlbiBhIHNwZWNpZmljIGZvbGQgd2l0aCB8em98LiAgT3Igb3BlbiBhbGwgZm9sZHMgd2l0aCB8elJ8IGFuZAordGhlbiBjbG9zZSBzcGVjaWZpYyBmb2xkcyB3aXRoIHx6Y3wuCisKK0J1dCB5b3UgY2Fubm90IG1hbnVhbGx5IGRlZmluZSBmb2xkcyB3aGVuICdmb2xkbWV0aG9kJyBpcyAiaW5kZW50IiwgYXMgdGhhdAord291bGQgY29uZmxpY3Qgd2l0aCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgaW5kZW50IGFuZCB0aGUgZm9sZCBsZXZlbC4KKworTW9yZSBhYm91dCBmb2xkaW5nIGJ5IGluZGVudCBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbDogfGZvbGQtaW5kZW50fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyoyOC42KglGb2xkaW5nIHdpdGggbWFya2VycworCitNYXJrZXJzIGluIHRoZSB0ZXh0IGFyZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgYSBmb2xkIHJlZ2lvbi4KK1RoaXMgZ2l2ZXMgcHJlY2lzZSBjb250cm9sIG92ZXIgd2hpY2ggbGluZXMgYXJlIGluY2x1ZGVkIGluIGEgZm9sZC4gIFRoZQorZGlzYWR2YW50YWdlIGlzIHRoYXQgdGhlIHRleHQgbmVlZHMgdG8gYmUgbW9kaWZpZWQuCisKK1RyeSBpdDogPgorCisJOnNldCBmb2xkbWV0aG9kPW1hcmtlcgorCitFeGFtcGxlIHRleHQsIGFzIGl0IGNvdWxkIGFwcGVhciBpbiBhIEMgcHJvZ3JhbToKKworCS8qIGZvb2JhciAoKSB7e3sgKi8KKwlpbnQgZm9vYmFyKCkKKwl7CisJCS8qIHJldHVybiBhIHZhbHVlIHt7eyAqLworCQlyZXR1cm4gNDI7CisJCS8qIH19fSAqLworCX0KKwkvKiB9fX0gKi8KKworTm90aWNlIHRoYXQgdGhlIGZvbGRlZCBsaW5lIHdpbGwgZGlzcGxheSB0aGUgdGV4dCBiZWZvcmUgdGhlIG1hcmtlci4gIFRoaXMgaXMKK3ZlcnkgdXNlZnVsIHRvIHRlbGwgd2hhdCB0aGUgZm9sZCBjb250YWlucy4KKworSXQncyBxdWl0ZSBhbm5veWluZyB3aGVuIHRoZSBtYXJrZXJzIGRvbid0IHBhaXIgdXAgY29ycmVjdGx5IGFmdGVyIG1vdmluZyBzb21lCitsaW5lcyBhcm91bmQuICBUaGlzIGNhbiBiZSBhdm9pZGVkIGJ5IHVzaW5nIG51bWJlcmVkIG1hcmtlcnMuICBFeGFtcGxlOgorCisJLyogZ2xvYmFsIHZhcmlhYmxlcyB7e3sxICovCisJaW50IHZhckEsIHZhckI7CisKKwkvKiBmdW5jdGlvbnMge3t7MSAqLworCS8qIGZ1bmNBKCkge3t7MiAqLworCXZvaWQgZnVuY0EoKSB7fQorCisJLyogZnVuY0IoKSB7e3syICovCisJdm9pZCBmdW5jQigpIHt9CisJLyogfX19MSAqLworCitBdCBldmVyeSBudW1iZXJlZCBtYXJrZXIgYSBmb2xkIGF0IHRoZSBzcGVjaWZpZWQgbGV2ZWwgYmVnaW5zLiAgVGhpcyB3aWxsIG1ha2UKK2FueSBmb2xkIGF0IGEgaGlnaGVyIGxldmVsIHN0b3AgaGVyZS4gIFlvdSBjYW4ganVzdCB1c2UgbnVtYmVyZWQgc3RhcnQgbWFya2VycwordG8gZGVmaW5lIGFsbCBmb2xkcy4gIE9ubHkgd2hlbiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IHN0b3AgYSBmb2xkIGJlZm9yZQorYW5vdGhlciBzdGFydHMgeW91IG5lZWQgdG8gYWRkIGFuIGVuZCBtYXJrZXIuCisKK01vcmUgYWJvdXQgZm9sZGluZyB3aXRoIG1hcmtlcnMgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWw6IHxmb2xkLW1hcmtlcnwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjguNyoJRm9sZGluZyBieSBzeW50YXgKKworRm9yIGVhY2ggbGFuZ3VhZ2UgVmltIHVzZXMgYSBkaWZmZXJlbnQgc3ludGF4IGZpbGUuICBUaGlzIGRlZmluZXMgdGhlIGNvbG9ycworZm9yIHZhcmlvdXMgaXRlbXMgaW4gdGhlIGZpbGUuICBJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyBpbiBWaW0sIGluIGEgdGVybWluYWwKK3RoYXQgc3VwcG9ydHMgY29sb3JzLCB0aGUgY29sb3JzIHlvdSBzZWUgYXJlIG1hZGUgd2l0aCB0aGUgImhlbHAiIHN5bnRheCBmaWxlLgorICAgSW4gdGhlIHN5bnRheCBmaWxlcyBpdCBpcyBwb3NzaWJsZSB0byBhZGQgc3ludGF4IGl0ZW1zIHRoYXQgaGF2ZSB0aGUgImZvbGQiCithcmd1bWVudC4gIFRoZXNlIGRlZmluZSBhIGZvbGQgcmVnaW9uLiAgVGhpcyByZXF1aXJlcyB3cml0aW5nIGEgc3ludGF4IGZpbGUKK2FuZCBhZGRpbmcgdGhlc2UgaXRlbXMgaW4gaXQuICBUaGF0J3Mgbm90IHNvIGVhc3kgdG8gZG8uICBCdXQgb25jZSBpdCdzIGRvbmUsCithbGwgZm9sZGluZyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkuCisgICBIZXJlIHdlJ2xsIGFzc3VtZSB5b3UgYXJlIHVzaW5nIGFuIGV4aXN0aW5nIHN5bnRheCBmaWxlLiAgVGhlbiB0aGVyZSBpcworbm90aGluZyBtb3JlIHRvIGV4cGxhaW4uICBZb3UgY2FuIG9wZW4gYW5kIGNsb3NlIGZvbGRzIGFzIGV4cGxhaW5lZCBhYm92ZS4KK1RoZSBmb2xkcyB3aWxsIGJlIGNyZWF0ZWQgYW5kIGRlbGV0ZWQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBlZGl0IHRoZSBmaWxlLgorCitNb3JlIGFib3V0IGZvbGRpbmcgYnkgc3ludGF4IGluIHRoZSByZWZlcmVuY2UgbWFudWFsOiB8Zm9sZC1zeW50YXh8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI4LjgqCUZvbGRpbmcgYnkgZXhwcmVzc2lvbgorCitUaGlzIGlzIHNpbWlsYXIgdG8gZm9sZGluZyBieSBpbmRlbnQsIGJ1dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBpbmRlbnQgb2YgYQorbGluZSBhIHVzZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGNvbXB1dGUgdGhlIGZvbGQgbGV2ZWwgb2YgYSBsaW5lLiAgWW91IGNhbgordXNlIHRoaXMgZm9yIHRleHQgd2hlcmUgc29tZXRoaW5nIGluIHRoZSB0ZXh0IGluZGljYXRlcyB3aGljaCBsaW5lcyBiZWxvbmcKK3RvZ2V0aGVyLiAgQW4gZXhhbXBsZSBpcyBhbiBlLW1haWwgbWVzc2FnZSB3aGVyZSB0aGUgcXVvdGVkIHRleHQgaXMgaW5kaWNhdGVkCitieSBhICI+IiBiZWZvcmUgdGhlIGxpbmUuICBUbyBmb2xkIHRoZXNlIHF1b3RlcyB1c2UgdGhpczogPgorCisJOnNldCBmb2xkbWV0aG9kPWV4cHIKKwk6c2V0IGZvbGRleHByPXN0cmxlbihzdWJzdGl0dXRlKHN1YnN0aXR1dGUoZ2V0bGluZSh2OmxudW0pLCdcXHMnLCcnLFwiZ1wiKSwnW14+XS4qJywnJywnJykpCisKK1lvdSBjYW4gdHJ5IGl0IG91dCBvbiB0aGlzIHRleHQ6CisKKz4gcXVvdGVkIHRleHQgaGUgd3JvdGUKKz4gcXVvdGVkIHRleHQgaGUgd3JvdGUKKz4gPiBkb3VibGUgcXVvdGVkIHRleHQgSSB3cm90ZQorPiA+IGRvdWJsZSBxdW90ZWQgdGV4dCBJIHdyb3RlCisKK0V4cGxhbmF0aW9uIGZvciB0aGUgJ2ZvbGRleHByJyB1c2VkIGluIHRoZSBleGFtcGxlIChpbnNpZGUgb3V0KToKKyAgIGdldGxpbmUodjpsbnVtKQkJCWdldHMgdGhlIGN1cnJlbnQgbGluZQorICAgc3Vic3RpdHV0ZSguLi4sJ1xccycsJycsJ2cnKQkJcmVtb3ZlcyBhbGwgd2hpdGUgc3BhY2UgZnJvbSB0aGUgbGluZQorICAgc3Vic3RpdHV0ZSguLi4sJ1tePl0uKicsJycsJycpKQlyZW1vdmVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgbGVhZGluZyAnPidzCisgICBzdHJsZW4oLi4uKQkJCQljb3VudHMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCB3aGljaAorCQkJCQlpcyB0aGUgbnVtYmVyIG9mICc+J3MgZm91bmQKKworTm90ZSB0aGF0IGEgYmFja3NsYXNoIG11c3QgYmUgaW5zZXJ0ZWQgYmVmb3JlIGV2ZXJ5IHNwYWNlLCBkb3VibGUgcXVvdGUgYW5kCitiYWNrc2xhc2ggZm9yIHRoZSAiOnNldCIgY29tbWFuZC4gIElmIHRoaXMgY29uZnVzZXMgeW91LCBkbyA+CisKKwk6c2V0IGZvbGRleHByCisKK3RvIGNoZWNrIHRoZSBhY3R1YWwgcmVzdWx0aW5nIHZhbHVlLiAgVG8gY29ycmVjdCBhIGNvbXBsaWNhdGVkIGV4cHJlc3Npb24sIHVzZQordGhlIGNvbW1hbmQtbGluZSBjb21wbGV0aW9uOiA+CisKKwk6c2V0IGZvbGRleHByPTxUYWI+CisKK1doZXJlIDxUYWI+IGlzIGEgcmVhbCBUYWIuICBWaW0gd2lsbCBmaWxsIGluIHRoZSBwcmV2aW91cyB2YWx1ZSwgd2hpY2ggeW91IGNhbgordGhlbiBlZGl0LgorCitXaGVuIHRoZSBleHByZXNzaW9uIGdldHMgbW9yZSBjb21wbGljYXRlZCB5b3Ugc2hvdWxkIHB1dCBpdCBpbiBhIGZ1bmN0aW9uIGFuZAorc2V0ICdmb2xkZXhwcicgdG8gY2FsbCB0aGF0IGZ1bmN0aW9uLgorCitNb3JlIGFib3V0IGZvbGRpbmcgYnkgZXhwcmVzc2lvbiBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbDogfGZvbGQtZXhwcnwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjguOSoJRm9sZGluZyB1bmNoYW5nZWQgbGluZXMKKworVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugc2V0IHRoZSAnZGlmZicgb3B0aW9uIGluIHRoZSBzYW1lIHdpbmRvdy4gIFRoZQorfHZpbWRpZmZ8IGNvbW1hbmQgZG9lcyB0aGlzIGZvciB5b3UuICBFeGFtcGxlOiA+CisKKwlzZXRsb2NhbCBkaWZmIGZvbGRtZXRob2Q9ZGlmZiBzY3JvbGxiaW5kIG5vd3JhcCBmb2xkbGV2ZWw9MQorCitEbyB0aGlzIGluIGV2ZXJ5IHdpbmRvdyB0aGF0IHNob3dzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlIHNhbWUgZmlsZS4gIFlvdQord2lsbCBjbGVhcmx5IHNlZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZmlsZXMsIHdoaWxlIHRoZSB0ZXh0IHRoYXQgZGlkbid0CitjaGFuZ2UgaXMgZm9sZGVkLgorCitGb3IgbW9yZSBkZXRhaWxzIHNlZSB8Zm9sZC1kaWZmfC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjguMTAqIFdoaWNoIGZvbGQgbWV0aG9kIHRvIHVzZT8KKworQWxsIHRoZXNlIHBvc3NpYmlsaXRpZXMgbWFrZXMgeW91IHdvbmRlciB3aGljaCBtZXRob2QgeW91IHNob3VsZCBjaG9zZS4KK1VuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vIGdvbGRlbiBydWxlLiAgSGVyZSBhcmUgc29tZSBoaW50cy4KKworSWYgdGhlcmUgaXMgYSBzeW50YXggZmlsZSB3aXRoIGZvbGRpbmcgZm9yIHRoZSBsYW5ndWFnZSB5b3UgYXJlIGVkaXRpbmcsIHRoYXQKK2lzIHByb2JhYmx5IHRoZSBiZXN0IGNob2ljZS4gIElmIHRoZXJlIGlzbid0IG9uZSwgeW91IG1pZ2h0IHRyeSB0byB3cml0ZSBpdC4KK1RoaXMgcmVxdWlyZXMgYSBnb29kIGtub3dsZWRnZSBvZiBzZWFyY2ggcGF0dGVybnMuICBJdCdzIG5vdCBlYXN5LCBidXQgd2hlbgoraXQncyB3b3JraW5nIHlvdSB3aWxsIG5vdCBoYXZlIHRvIGRlZmluZSBmb2xkcyBtYW51YWxseS4KKworVHlwaW5nIGNvbW1hbmRzIHRvIG1hbnVhbGx5IGZvbGQgcmVnaW9ucyBjYW4gYmUgdXNlZCBmb3IgdW5zdHJ1Y3R1cmVkIHRleHQuCitUaGVuIHVzZSB0aGUgfDpta3ZpZXd8IGNvbW1hbmQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB5b3VyIGZvbGRzLgorCitUaGUgbWFya2VyIG1ldGhvZCByZXF1aXJlcyB5b3UgdG8gY2hhbmdlIHRoZSBmaWxlLiAgSWYgeW91IGFyZSBzaGFyaW5nIHRoZQorZmlsZXMgd2l0aCBvdGhlciBwZW9wbGUgb3IgeW91IGhhdmUgdG8gbWVldCBjb21wYW55IHN0YW5kYXJkcywgeW91IG1pZ2h0IG5vdAorYmUgYWxsb3dlZCB0byBhZGQgdGhlbS4KKyAgIFRoZSBtYWluIGFkdmFudGFnZSBvZiBtYXJrZXJzIGlzIHRoYXQgeW91IGNhbiBwdXQgdGhlbSBleGFjdGx5IHdoZXJlIHlvdQord2FudCB0aGVtLiAgVGhhdCBhdm9pZHMgdGhhdCBhIGZldyBsaW5lcyBhcmUgbWlzc2VkIHdoZW4geW91IGN1dCBhbmQgcGFzdGUKK2ZvbGRzLiAgQW5kIHlvdSBjYW4gYWRkIGEgY29tbWVudCBhYm91dCB3aGF0IGlzIGNvbnRhaW5lZCBpbiB0aGUgZm9sZC4KKworRm9sZGluZyBieSBpbmRlbnQgaXMgc29tZXRoaW5nIHRoYXQgd29ya3MgaW4gbWFueSBmaWxlcywgYnV0IG5vdCBhbHdheXMgdmVyeQord2VsbC4gIFVzZSBpdCB3aGVuIHlvdSBjYW4ndCB1c2Ugb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLiAgSG93ZXZlciwgaXQgaXMKK3ZlcnkgdXNlZnVsIGZvciBvdXRsaW5pbmcuICBUaGVuIHlvdSBzcGVjaWZpY2FsbHkgdXNlIG9uZSAnc2hpZnR3aWR0aCcgZm9yCitlYWNoIG5lc3RpbmcgbGV2ZWwuCisKK0ZvbGRpbmcgd2l0aCBleHByZXNzaW9ucyBjYW4gbWFrZSBmb2xkcyBpbiBhbG1vc3QgYW55IHN0cnVjdHVyZWQgdGV4dC4gIEl0IGlzCitxdWl0ZSBzaW1wbGUgdG8gc3BlY2lmeSwgZXNwZWNpYWxseSBpZiB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhIGZvbGQgY2FuIGVhc2lseQorYmUgcmVjb2duaXplZC4KKyAgIElmIHlvdSB1c2UgdGhlICJleHByIiBtZXRob2QgdG8gZGVmaW5lIGZvbGRzLCBidXQgdGhleSBhcmUgbm90IGV4YWN0bHkgaG93Cit5b3Ugd2FudCB0aGVtLCB5b3UgY291bGQgc3dpdGNoIHRvIHRoZSAibWFudWFsIiBtZXRob2QuICBUaGlzIHdpbGwgbm90IHJlbW92ZQordGhlIGRlZmluZWQgZm9sZHMuICBUaGVuIHlvdSBjYW4gZGVsZXRlIG9yIGFkZCBmb2xkcyBtYW51YWxseS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05leHQgY2hhcHRlcjogfHVzcl8yOS50eHR8ICBNb3ZpbmcgdGhyb3VnaCBwcm9ncmFtcworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8yOS50eHQgYi9ydW50aW1lL2RvYy91c3JfMjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDZjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMjkudHh0CkBAIC0wLDAgKzEsNjEzIEBACisqdXNyXzI5LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRmViIDEyCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgTW92aW5nIHRocm91Z2ggcHJvZ3JhbXMKKworCitUaGUgY3JlYXRvciBvZiBWaW0gaXMgYSBjb21wdXRlciBwcm9ncmFtbWVyLiAgSXQncyBubyBzdXJwcmlzZSB0aGF0IFZpbQorY29udGFpbnMgbWFueSBmZWF0dXJlcyB0byBhaWQgaW4gd3JpdGluZyBwcm9ncmFtcy4gIEp1bXAgYXJvdW5kIHRvIGZpbmQgd2hlcmUKK2lkZW50aWZpZXJzIGFyZSBkZWZpbmVkIGFuZCB1c2VkLiAgUHJldmlldyBkZWNsYXJhdGlvbnMgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCitUaGVyZSBpcyBtb3JlIGluIHRoZSBuZXh0IGNoYXB0ZXIuCisKK3wyOS4xfAlVc2luZyB0YWdzCit8MjkuMnwJVGhlIHByZXZpZXcgd2luZG93Cit8MjkuM3wJTW92aW5nIHRocm91Z2ggYSBwcm9ncmFtCit8MjkuNHwJRmluZGluZyBnbG9iYWwgaWRlbnRpZmllcnMKK3wyOS41fAlGaW5kaW5nIGxvY2FsIGlkZW50aWZpZXJzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzMwLnR4dHwgIEVkaXRpbmcgcHJvZ3JhbXMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzI4LnR4dHwgIEZvbGRpbmcKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI5LjEqCVVzaW5nIHRhZ3MKKworV2hhdCBpcyBhIHRhZz8gIEl0IGlzIGEgbG9jYXRpb24gd2hlcmUgYW4gaWRlbnRpZmllciBpcyBkZWZpbmVkLiAgQW4gZXhhbXBsZQoraXMgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGEgQyBvciBDKysgcHJvZ3JhbS4gIEEgbGlzdCBvZiB0YWdzIGlzIGtlcHQgaW4gYQordGFncyBmaWxlLiAgVGhpcyBjYW4gYmUgdXNlZCBieSBWaW0gdG8gZGlyZWN0bHkganVtcCBmcm9tIGFueSBwbGFjZSB0byB0aGUKK3RhZywgdGhlIHBsYWNlIHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgZGVmaW5lZC4KKyAgIFRvIGdlbmVyYXRlIHRoZSB0YWdzIGZpbGUgZm9yIGFsbCBDIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdXNlIHRoZQorZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCWN0YWdzICouYworCisiY3RhZ3MiIGlzIGEgc2VwYXJhdGUgcHJvZ3JhbS4gIE1vc3QgVW5peCBzeXN0ZW1zIGFscmVhZHkgaGF2ZSBpdCBpbnN0YWxsZWQuCitJZiB5b3UgZG8gbm90IGhhdmUgaXQgeWV0LCB5b3UgY2FuIGZpbmQgRXh1YmVyYW50IGN0YWdzIGhlcmU6CisKKwlodHRwOi8vY3RhZ3Muc2YubmV0IH4KKworTm93IHdoZW4geW91IGFyZSBpbiBWaW0gYW5kIHlvdSB3YW50IHRvIGdvIHRvIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgeW91IGNhbgoranVtcCB0byBpdCBieSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTp0YWcgc3RhcnRsaXN0CisKK1RoaXMgY29tbWFuZCB3aWxsIGZpbmQgdGhlIGZ1bmN0aW9uICJzdGFydGxpc3QiIGV2ZW4gaWYgaXQgaXMgaW4gYW5vdGhlciBmaWxlLgorICAgVGhlIENUUkwtXSBjb21tYW5kIGp1bXBzIHRvIHRoZSB0YWcgb2YgdGhlIHdvcmQgdGhhdCBpcyB1bmRlciB0aGUgY3Vyc29yLgorVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGV4cGxvcmUgYSB0YW5nbGUgb2YgQyBjb2RlLiAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQKK3lvdSBhcmUgaW4gdGhlIGZ1bmN0aW9uICJ3cml0ZV9ibG9jayIuICBZb3UgY2FuIHNlZSB0aGF0IGl0IGNhbGxzCisid3JpdGVfbGluZSIuICBCdXQgd2hhdCBkb2VzICJ3cml0ZV9saW5lIiBkbz8gIEJ5IHBsYWNpbmcgdGhlIGN1cnNvciBvbiB0aGUKK2NhbGwgdG8gIndyaXRlX2xpbmUiIGFuZCBwcmVzc2luZyBDVFJMLV0sIHlvdSBqdW1wIHRvIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMKK2Z1bmN0aW9uLgorICAgVGhlICJ3cml0ZV9saW5lIiBmdW5jdGlvbiBjYWxscyAid3JpdGVfY2hhciIuICBZb3UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQKK2l0IGRvZXMuICBTbyB5b3UgcG9zaXRpb24gdGhlIGN1cnNvciBvdmVyIHRoZSBjYWxsIHRvICJ3cml0ZV9jaGFyIiBhbmQgcHJlc3MKK0NUUkwtXS4gIE5vdyB5b3UgYXJlIGF0IHRoZSBkZWZpbml0aW9uIG9mICJ3cml0ZV9jaGFyIi4KKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXx2b2lkIHdyaXRlX2Jsb2NrKGNoYXIgKipzOyBpbnQgY250KSAgfAorCXx7CQkJCSAgICAgIHwKKwl8ICAgaW50IGk7CQkJICAgICAgfAorCXwgICBmb3IgKGkgPSAwOyBpIDwgY250OyArK2kpCSAgICAgIHwKKwl8ICAgICAgd3JpdGVfbGluZShzW2ldKTsJICAgICAgfAorCXx9CSAgICB8CQkJICAgICAgfAorCSstLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkgICAgfAorCSAgICAgQ1RSTC1dIHwKKwkJICAgIHwJICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkgICAgKy0tPiB8dm9pZCB3cml0ZV9saW5lKGNoYXIgKnMpICAgIHwKKwkJCSB8ewkJCSAgICAgIHwKKwkJCSB8ICAgd2hpbGUgKCpzICE9IDApCSAgICAgIHwKKwkJCSB8CXdyaXRlX2NoYXIoKnMrKyk7ICAgICB8CisJCQkgfH0JICB8CQkgICAgICB8CisJCQkgKy0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCQkJICB8CisJCQkgICBDVFJMLV0gfAorCQkJCSAgfCAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkJCSAgKy0tPiB8dm9pZCB3cml0ZV9jaGFyKGNoYXIgYykJCSAgICB8CisJCQkJICAgICAgIHx7CQkJCSAgICB8CisJCQkJICAgICAgIHwgICAgcHV0Y2hhcigoaW50KSh1bnNpZ25lZCBjaGFyKWMpOyB8CisJCQkJICAgICAgIHx9CQkJCSAgICB8CisJCQkJICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSAiOnRhZ3MiIGNvbW1hbmQgc2hvd3MgdGhlIGxpc3Qgb2YgdGFncyB0aGF0IHlvdSB0cmF2ZXJzZWQgdGhyb3VnaDoKKworCTp0YWdzCisJICAjIFRPIHRhZwkgICBGUk9NIGxpbmUgIGluIGZpbGUvdGV4dCB+CisJICAxICAxIHdyaXRlX2xpbmUJICAgOCAgd3JpdGVfYmxvY2suYyB+CisJICAyICAxIHdyaXRlX2NoYXIJICAgNyAgd3JpdGVfbGluZS5jIH4KKwk+IH4KKz4KK05vdyB0byBnbyBiYWNrLiAgVGhlIENUUkwtVCBjb21tYW5kIGdvZXMgdG8gdGhlIHByZWNlZGluZyB0YWcuICBJbiB0aGUgZXhhbXBsZQorYWJvdmUgeW91IGdldCBiYWNrIHRvIHRoZSAid3JpdGVfbGluZSIgZnVuY3Rpb24sIGluIHRoZSBjYWxsIHRvICJ3cml0ZV9jaGFyIi4KKyAgIFRoaXMgY29tbWFuZCB0YWtlcyBhIGNvdW50IGFyZ3VtZW50IHRoYXQgaW5kaWNhdGVzIGhvdyBtYW55IHRhZ3MgdG8ganVtcAorYmFjay4gIFlvdSBoYXZlIGdvbmUgZm9yd2FyZCwgYW5kIG5vdyBiYWNrLiAgTGV0J3MgZ28gZm9yd2FyZCBhZ2Fpbi4gIFRoZQorZm9sbG93aW5nIGNvbW1hbmQgZ29lcyB0byB0aGUgdGFnIG9uIHRvcCBvZiB0aGUgbGlzdDogPgorCisJOnRhZworCitZb3UgY2FuIHByZWZpeCBpdCB3aXRoIGEgY291bnQgYW5kIGp1bXAgZm9yd2FyZCB0aGF0IG1hbnkgdGFncy4gIEZvciBleGFtcGxlOgorIjozdGFnIi4gIENUUkwtVCBhbHNvIGNhbiBiZSBwcmVjZWRlZCB3aXRoIGEgY291bnQuCisgICBUaGVzZSBjb21tYW5kcyB0aHVzIGFsbG93IHlvdSB0byBnbyBkb3duIGEgY2FsbCB0cmVlIHdpdGggQ1RSTC1dIGFuZCBiYWNrCit1cCBhZ2FpbiB3aXRoIENUUkwtVC4gIFVzZSAiOnRhZ3MiIHRvIGZpbmQgb3V0IHdoZXJlIHlvdSBhcmUuCisKKworU1BMSVQgV0lORE9XUworCitUaGUgIjp0YWciIGNvbW1hbmQgcmVwbGFjZXMgdGhlIGZpbGUgaW4gdGhlIGN1cnJlbnQgd2luZG93IHdpdGggdGhlIG9uZQorY29udGFpbmluZyB0aGUgbmV3IGZ1bmN0aW9uLiAgQnV0IHN1cHBvc2UgeW91IHdhbnQgdG8gc2VlIG5vdCBvbmx5IHRoZSBvbGQKK2Z1bmN0aW9uIGJ1dCBhbHNvIHRoZSBuZXcgb25lPyAgWW91IGNhbiBzcGxpdCB0aGUgd2luZG93IHVzaW5nIHRoZSAiOnNwbGl0IgorY29tbWFuZCBmb2xsb3dlZCBieSB0aGUgIjp0YWciIGNvbW1hbmQuICBWaW0gaGFzIGEgc2hvcnRoYW5kIGNvbW1hbmQgdGhhdCBkb2VzCitib3RoOiA+CisJOnN0YWcgdGFnbmFtZQorCitUbyBzcGxpdCB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGp1bXAgdG8gdGhlIHRhZyB1bmRlciB0aGUgY3Vyc29yIHVzZSB0aGlzCitjb21tYW5kOiA+CisKKwlDVFJMLVcgXQorCitJZiBhIGNvdW50IGlzIHNwZWNpZmllZCwgdGhlIG5ldyB3aW5kb3cgd2lsbCBiZSB0aGF0IG1hbnkgbGluZXMgaGlnaC4KKworCitNT1JFIFRBR1MgRklMRVMKKworV2hlbiB5b3UgaGF2ZSBmaWxlcyBpbiBtYW55IGRpcmVjdG9yaWVzLCB5b3UgY2FuIGNyZWF0ZSBhIHRhZ3MgZmlsZSBpbiBlYWNoIG9mCit0aGVtLiAgVmltIHdpbGwgdGhlbiBvbmx5IGJlIGFibGUgdG8ganVtcCB0byB0YWdzIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4KKyAgIFRvIGZpbmQgbW9yZSB0YWdzIGZpbGVzLCBzZXQgdGhlICd0YWdzJyBvcHRpb24gdG8gaW5jbHVkZSBhbGwgdGhlIHJlbGV2YW50Cit0YWdzIGZpbGVzLiAgRXhhbXBsZTogPgorCisJOnNldCB0YWdzPS4vdGFncywuLy4uL3RhZ3MsLi8qL3RhZ3MKKworVGhpcyBmaW5kcyBhIHRhZ3MgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGN1cnJlbnQgZmlsZSwgb25lCitkaXJlY3RvcnkgbGV2ZWwgaGlnaGVyIGFuZCBpbiBhbGwgc3ViZGlyZWN0b3JpZXMuCisgICBUaGlzIGlzIHF1aXRlIGEgbnVtYmVyIG9mIHRhZ3MgZmlsZXMsIGJ1dCBpdCBtYXkgc3RpbGwgbm90IGJlIGVub3VnaC4gIEZvcgorZXhhbXBsZSwgd2hlbiBlZGl0aW5nIGEgZmlsZSBpbiAifi9wcm9qL3NyYyIsIHlvdSB3aWxsIG5vdCBmaW5kIHRoZSB0YWdzIGZpbGUKKyJ+L3Byb2ovc3ViL3RhZ3MiLiAgRm9yIHRoaXMgc2l0dWF0aW9uIFZpbSBvZmZlcnMgdG8gc2VhcmNoIGEgd2hvbGUgZGlyZWN0b3J5Cit0cmVlIGZvciB0YWdzIGZpbGVzLiAgRXhhbXBsZTogPgorCisJOnNldCB0YWdzPX4vcHJvai8qKi90YWdzCisKKworT05FIFRBR1MgRklMRQorCitXaGVuIFZpbSBoYXMgdG8gc2VhcmNoIG1hbnkgcGxhY2VzIGZvciB0YWdzIGZpbGVzLCB5b3UgY2FuIGhlYXIgdGhlIGRpc2sKK3JhdHRsaW5nLiAgSXQgbWF5IGdldCBhIGJpdCBzbG93LiAgSW4gdGhhdCBjYXNlIGl0J3MgYmV0dGVyIHRvIHNwZW5kIHRoaXMKK3RpbWUgd2hpbGUgZ2VuZXJhdGluZyBvbmUgYmlnIHRhZ3MgZmlsZS4gIFlvdSBtaWdodCBkbyB0aGlzIG92ZXJuaWdodC4KKyAgIFRoaXMgcmVxdWlyZXMgdGhlIEV4dWJlcmFudCBjdGFncyBwcm9ncmFtLCBtZW50aW9uZWQgYWJvdmUuICBJdCBvZmZlcnMgYW4KK2FyZ3VtZW50IHRvIHNlYXJjaCBhIHdob2xlIGRpcmVjdG9yeSB0cmVlOiA+CisKKwljZCB+L3Byb2oKKwljdGFncyAtUiAuCisKK1RoZSBuaWNlIHRoaW5nIGFib3V0IHRoaXMgaXMgdGhhdCBFeHViZXJhbnQgY3RhZ3MgcmVjb2duaXplcyB2YXJpb3VzIGZpbGUKK3R5cGVzLiAgVGh1cyB0aGlzIGRvZXNuJ3Qgd29yayBqdXN0IGZvciBDIGFuZCBDKysgcHJvZ3JhbXMsIGFsc28gZm9yIEVpZmZlbAorYW5kIGV2ZW4gVmltIHNjcmlwdHMuICBTZWUgdGhlIGN0YWdzIGRvY3VtZW50YXRpb24gdG8gdHVuZSB0aGlzLgorICAgTm93IHlvdSBvbmx5IG5lZWQgdG8gdGVsbCBWaW0gd2hlcmUgeW91ciBiaWcgdGFncyBmaWxlIGlzOiA+CisKKwk6c2V0IHRhZ3M9fi9wcm9qL3RhZ3MKKworCitNVUxUSVBMRSBNQVRDSEVTCisKK1doZW4gYSBmdW5jdGlvbiBpcyBkZWZpbmVkIG11bHRpcGxlIHRpbWVzIChvciBhIG1ldGhvZCBpbiBzZXZlcmFsIGNsYXNzZXMpLAordGhlICI6dGFnIiBjb21tYW5kIHdpbGwganVtcCB0byB0aGUgZmlyc3Qgb25lLiAgSWYgdGhlcmUgaXMgYSBtYXRjaCBpbiB0aGUKK2N1cnJlbnQgZmlsZSwgdGhhdCBvbmUgaXMgdXNlZCBmaXJzdC4KKyAgIFlvdSBjYW4gbm93IGp1bXAgdG8gb3RoZXIgbWF0Y2hlcyBmb3IgdGhlIHNhbWUgdGFnIHdpdGg6ID4KKworCTp0bmV4dAorCitSZXBlYXQgdGhpcyB0byBmaW5kIGZ1cnRoZXIgbWF0Y2hlcy4gIElmIHRoZXJlIGFyZSBtYW55LCB5b3UgY2FuIHNlbGVjdCB3aGljaAorb25lIHRvIGp1bXAgdG86ID4KKworCTp0c2VsZWN0IHRhZ25hbWUKKworVmltIHdpbGwgcHJlc2VudCB5b3Ugd2l0aCBhIGxpc3Qgb2YgY2hvaWNlczoKKworCSAgIyBwcmkga2luZCB0YWcJICAgICAgIGZpbGUgfgorCSAgMSBGCWYgICAgbWNoX2luaXQJICAgICAgIG9zX2FtaWdhLmMgfgorCQkgICAgICAgbWNoX2luaXQoKSB+CisJICAyIEYJZiAgICBtY2hfaW5pdAkgICAgICAgb3NfbWFjLmMgfgorCQkgICAgICAgbWNoX2luaXQoKSB+CisJICAzIEYJZiAgICBtY2hfaW5pdAkgICAgICAgb3NfbXNkb3MuYyB+CisJCSAgICAgICBtY2hfaW5pdCh2b2lkKSB+CisJICA0IEYJZiAgICBtY2hfaW5pdAkgICAgICAgb3NfcmlzY29zLmMgfgorCQkgICAgICAgbWNoX2luaXQoKSB+CisJRW50ZXIgbnIgb2YgY2hvaWNlICg8Q1I+IHRvIGFib3J0KTogIH4KKworWW91IGNhbiBub3cgZW50ZXIgdGhlIG51bWJlciAoaW4gdGhlIGZpcnN0IGNvbHVtbikgb2YgdGhlIG1hdGNoIHRoYXQgeW91IHdvdWxkCitsaWtlIHRvIGp1bXAgdG8uICBUaGUgaW5mb3JtYXRpb24gaW4gdGhlIG90aGVyIGNvbHVtbnMgZ2l2ZSB5b3UgYSBnb29kIGlkZWEgb2YKK3doZXJlIHRoZSBtYXRjaCBpcyBkZWZpbmVkLgorCitUbyBtb3ZlIGJldHdlZW4gdGhlIG1hdGNoaW5nIHRhZ3MsIHRoZXNlIGNvbW1hbmRzIGNhbiBiZSB1c2VkOgorCisJOnRmaXJzdAkJCWdvIHRvIGZpcnN0IG1hdGNoCisJOltjb3VudF10cHJldmlvdXMJZ28gdG8gW2NvdW50XSBwcmV2aW91cyBtYXRjaAorCTpbY291bnRddG5leHQJCWdvIHRvIFtjb3VudF0gbmV4dCBtYXRjaAorCTp0bGFzdAkJCWdvIHRvIGxhc3QgbWF0Y2gKKworSWYgW2NvdW50XSBpcyBvbWl0dGVkIHRoZW4gb25lIGlzIHVzZWQuCisKKworR1VFU1NJTkcgVEFHIE5BTUVTCisKK0NvbW1hbmQgbGluZSBjb21wbGV0aW9uIGlzIGEgZ29vZCB3YXkgdG8gYXZvaWQgdHlwaW5nIGEgbG9uZyB0YWcgbmFtZS4gIEp1c3QKK3R5cGUgdGhlIGZpcnN0IGJpdCBhbmQgcHJlc3MgPFRhYj46ID4KKworCTp0YWcgd3JpdGVfPFRhYj4KKworWW91IHdpbGwgZ2V0IHRoZSBmaXJzdCBtYXRjaC4gIElmIGl0J3Mgbm90IHRoZSBvbmUgeW91IHdhbnQsIHByZXNzIDxUYWI+IHVudGlsCit5b3UgZmluZCB0aGUgcmlnaHQgb25lLgorICAgU29tZXRpbWVzIHlvdSBvbmx5IGtub3cgcGFydCBvZiB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLiAgT3IgeW91IGhhdmUgbWFueQordGFncyB0aGF0IHN0YXJ0IHdpdGggdGhlIHNhbWUgc3RyaW5nLCBidXQgZW5kIGRpZmZlcmVudGx5LiAgVGhlbiB5b3UgY2FuIHRlbGwKK1ZpbSB0byB1c2UgYSBwYXR0ZXJuIHRvIGZpbmQgdGhlIHRhZy4KKyAgIFN1cHBvc2UgeW91IHdhbnQgdG8ganVtcCB0byBhIHRhZyB0aGF0IGNvbnRhaW5zICJibG9jayIuICBGaXJzdCB0eXBlCit0aGlzOiA+CisKKwk6dGFnIC9ibG9jaworCitOb3cgdXNlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uOiBwcmVzcyA8VGFiPi4gIFZpbSB3aWxsIGZpbmQgYWxsIHRhZ3MgdGhhdAorY29udGFpbiAiYmxvY2siIGFuZCB1c2UgdGhlIGZpcnN0IG1hdGNoLgorICAgVGhlICIvIiBiZWZvcmUgYSB0YWcgbmFtZSB0ZWxscyBWaW0gdGhhdCB3aGF0IGZvbGxvd3MgaXMgbm90IGEgbGl0ZXJhbCB0YWcKK25hbWUsIGJ1dCBhIHBhdHRlcm4uICBZb3UgY2FuIHVzZSBhbGwgdGhlIGl0ZW1zIGZvciBzZWFyY2ggcGF0dGVybnMgaGVyZS4gIEZvcgorZXhhbXBsZSwgc3VwcG9zZSB5b3Ugd2FudCB0byBzZWxlY3QgYSB0YWcgdGhhdCBzdGFydHMgd2l0aCAid3JpdGVfIjogPgorCisJOnRzZWxlY3QgL153cml0ZV8KKworVGhlICJeIiBzcGVjaWZpZXMgdGhhdCB0aGUgdGFnIHN0YXJ0cyB3aXRoICJ3cml0ZV8iLiAgT3RoZXJ3aXNlIGl0IHdvdWxkIGFsc28KK2JlIGZvdW5kIGhhbGZ3YXkgYSB0YWcgbmFtZS4gIFNpbWlsYXJseSAiJCIgYXQgdGhlIGVuZCBtYWtlcyBzdXJlIHRoZSBwYXR0ZXJuCittYXRjaGVzIHVudGlsIHRoZSBlbmQgb2YgYSB0YWcuCisKKworQSBUQUdTIEJST1dTRVIKKworU2luY2UgQ1RSTC1dIHRha2VzIHlvdSB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgaWRlbnRpZmllciB1bmRlciB0aGUgY3Vyc29yLAoreW91IGNhbiB1c2UgYSBsaXN0IG9mIGlkZW50aWZpZXIgbmFtZXMgYXMgYSB0YWJsZSBvZiBjb250ZW50cy4gIEhlcmUgaXMgYW4KK2V4YW1wbGUuCisgICBGaXJzdCBjcmVhdGUgYSBsaXN0IG9mIGlkZW50aWZpZXJzICh0aGlzIHJlcXVpcmVzIEV4dWJlcmFudCBjdGFncyk6ID4KKworCWN0YWdzIC0tYy10eXBlcz1mIC1mIGZ1bmN0aW9ucyAqLmMKKworTm93IHN0YXJ0IFZpbSB3aXRob3V0IGEgZmlsZSwgYW5kIGVkaXQgdGhpcyBmaWxlIGluIFZpbSwgaW4gYSB2ZXJ0aWNhbGx5IHNwbGl0Cit3aW5kb3c6ID4KKworCXZpbQorCTp2c3BsaXQgZnVuY3Rpb25zCisKK1RoZSB3aW5kb3cgY29udGFpbnMgYSBsaXN0IG9mIGFsbCB0aGUgZnVuY3Rpb25zLiAgVGhlcmUgaXMgc29tZSBtb3JlIHN0dWZmLAorYnV0IHlvdSBjYW4gaWdub3JlIHRoYXQuICBEbyAiOnNldGxvY2FsIHRzPTk5IiB0byBjbGVhbiBpdCB1cCBhIGJpdC4KKyAgIEluIHRoaXMgd2luZG93LCBkZWZpbmUgYSBtYXBwaW5nOiA+CisKKwk6bm5vcmVtYXAgPGJ1ZmZlcj4gPENSPiAweWU8Qy1XPnc6dGFnIDxDLVI+IjxDUj4KKworTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsaW5lIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIHlvdSB3YW50IHRvIGdvIHRvLgorTm93IHByZXNzIDxFbnRlcj4uICBWaW0gd2lsbCBnbyB0byB0aGUgb3RoZXIgd2luZG93IGFuZCBqdW1wIHRvIHRoZSBzZWxlY3RlZAorZnVuY3Rpb24uCisKKworUkVMQVRFRCBJVEVNUworCitZb3UgY2FuIHNldCAnaWdub3JlY2FzZScgdG8gbWFrZSBjYXNlIGluIHRhZyBuYW1lcyBiZSBpZ25vcmVkLgorCitUaGUgJ3RhZ2JzZWFyY2gnIG9wdGlvbiB0ZWxscyBpZiB0aGUgdGFncyBmaWxlIGlzIHNvcnRlZCBvciBub3QuICBUaGUgZGVmYXVsdAoraXMgdG8gYXNzdW1lIGEgc29ydGVkIHRhZ3MgZmlsZSwgd2hpY2ggbWFrZXMgYSB0YWdzIHNlYXJjaCBhIGxvdCBmYXN0ZXIsIGJ1dAorZG9lc24ndCB3b3JrIGlmIHRoZSB0YWdzIGZpbGUgaXNuJ3Qgc29ydGVkLgorCitUaGUgJ3RhZ2xlbmd0aCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHRlbGwgVmltIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQKK2NoYXJhY3RlcnMgaW4gYSB0YWcuCisKK1doZW4geW91IHVzZSB0aGUgU05pRkYrIHByb2dyYW0sIHlvdSBjYW4gdXNlIHRoZSBWaW0gaW50ZXJmYWNlIHRvIGl0IHxzbmlmZnwuCitTTmlGRisgaXMgYSBjb21tZXJjaWFsIHByb2dyYW0uCisKK0NzY29wZSBpcyBhIGZyZWUgcHJvZ3JhbS4gIEl0IGRvZXMgbm90IG9ubHkgZmluZCBwbGFjZXMgd2hlcmUgYW4gaWRlbnRpZmllciBpcworZGVjbGFyZWQsIGJ1dCBhbHNvIHdoZXJlIGl0IGlzIHVzZWQuICBTZWUgfGNzY29wZXwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI5LjIqCVRoZSBwcmV2aWV3IHdpbmRvdworCitXaGVuIHlvdSBlZGl0IGNvZGUgdGhhdCBjb250YWlucyBhIGZ1bmN0aW9uIGNhbGwsIHlvdSBuZWVkIHRvIHVzZSB0aGUgY29ycmVjdAorYXJndW1lbnRzLiAgVG8ga25vdyB3aGF0IHZhbHVlcyB0byBwYXNzIHlvdSBjYW4gbG9vayBhdCBob3cgdGhlIGZ1bmN0aW9uIGlzCitkZWZpbmVkLiAgVGhlIHRhZ3MgbWVjaGFuaXNtIHdvcmtzIHZlcnkgd2VsbCBmb3IgdGhpcy4gIFByZWZlcmFibHkgdGhlCitkZWZpbml0aW9uIGlzIGRpc3BsYXllZCBpbiBhbm90aGVyIHdpbmRvdy4gIEZvciB0aGlzIHRoZSBwcmV2aWV3IHdpbmRvdyBjYW4gYmUKK3VzZWQuCisgICBUbyBvcGVuIGEgcHJldmlldyB3aW5kb3cgdG8gZGlzcGxheSB0aGUgZnVuY3Rpb24gIndyaXRlX2NoYXIiOiA+CisKKwk6cHRhZyB3cml0ZV9jaGFyCisKK1ZpbSB3aWxsIG9wZW4gYSB3aW5kb3csIGFuZCBqdW1wcyB0byB0aGUgdGFnICJ3cml0ZV9jaGFyIi4gIFRoZW4gaXQgdGFrZXMgeW91CitiYWNrIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi4gIFRodXMgeW91IGNhbiBjb250aW51ZSB0eXBpbmcgd2l0aG91dCB0aGUgbmVlZAordG8gdXNlIGEgQ1RSTC1XIGNvbW1hbmQuCisgICBJZiB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIGFwcGVhcnMgaW4gdGhlIHRleHQsIHlvdSBjYW4gZ2V0IGl0cyBkZWZpbml0aW9uCitpbiB0aGUgcHJldmlldyB3aW5kb3cgd2l0aDogPgorCisJQ1RSTC1XIH0KKworVGhlcmUgaXMgYSBzY3JpcHQgdGhhdCBhdXRvbWF0aWNhbGx5IGRpc3BsYXlzIHRoZSB0ZXh0IHdoZXJlIHRoZSB3b3JkIHVuZGVyCit0aGUgY3Vyc29yIHdhcyBkZWZpbmVkLiAgU2VlIHxDdXJzb3JIb2xkLWV4YW1wbGV8LgorCitUbyBjbG9zZSB0aGUgcHJldmlldyB3aW5kb3cgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOnBjbG9zZQorCitUbyBlZGl0IGEgc3BlY2lmaWMgZmlsZSBpbiB0aGUgcHJldmlldyB3aW5kb3csIHVzZSAiOnBlZGl0Ii4gIFRoaXMgY2FuIGJlCit1c2VmdWwgdG8gZWRpdCBhIGhlYWRlciBmaWxlLCBmb3IgZXhhbXBsZTogPgorCisJOnBlZGl0IGRlZnMuaAorCitGaW5hbGx5LCAiOnBzZWFyY2giIGNhbiBiZSB1c2VkIHRvIGZpbmQgYSB3b3JkIGluIHRoZSBjdXJyZW50IGZpbGUgYW5kIGFueQoraW5jbHVkZWQgZmlsZXMgYW5kIGRpc3BsYXkgdGhlIG1hdGNoIGluIHRoZSBwcmV2aWV3IHdpbmRvdy4gIFRoaXMgaXMKK2VzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdXNpbmcgbGlicmFyeSBmdW5jdGlvbnMsIGZvciB3aGljaCB5b3UgZG8gbm90IGhhdmUgYQordGFncyBmaWxlLiAgRXhhbXBsZTogPgorCisJOnBzZWFyY2ggcG9wZW4KKworVGhpcyB3aWxsIHNob3cgdGhlICJzdGRpby5oIiBmaWxlIGluIHRoZSBwcmV2aWV3IHdpbmRvdywgd2l0aCB0aGUgZnVuY3Rpb24KK3Byb3RvdHlwZSBmb3IgcG9wZW4oKToKKworCUZJTEUJKnBvcGVuIF9fUCgoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsgfgorCitZb3UgY2FuIHNwZWNpZnkgdGhlIGhlaWdodCBvZiB0aGUgcHJldmlldyB3aW5kb3csIHdoZW4gaXQgaXMgb3BlbmVkLCB3aXRoIHRoZQorJ3ByZXZpZXdoZWlnaHQnIG9wdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMjkuMyoJTW92aW5nIHRocm91Z2ggYSBwcm9ncmFtCisKK1NpbmNlIGEgcHJvZ3JhbSBpcyBzdHJ1Y3R1cmVkLCBWaW0gY2FuIHJlY29nbml6ZSBpdGVtcyBpbiBpdC4gIFNwZWNpZmljCitjb21tYW5kcyBjYW4gYmUgdXNlZCB0byBtb3ZlIGFyb3VuZC4KKyAgIEMgcHJvZ3JhbXMgb2Z0ZW4gY29udGFpbiBjb25zdHJ1Y3RzIGxpa2UgdGhpczoKKworCSNpZmRlZiBVU0VfUE9QRU4gfgorCSAgICBmZCA9IHBvcGVuKCJscyIsICJyIikgfgorCSNlbHNlIH4KKwkgICAgZmQgPSBmb3BlbigidG1wIiwgInciKSB+CisJI2VuZGlmIH4KKworQnV0IHRoZW4gbXVjaCBsb25nZXIsIGFuZCBwb3NzaWJseSBuZXN0ZWQuICBQb3NpdGlvbiB0aGUgY3Vyc29yIG9uIHRoZQorIiNpZmRlZiIgYW5kIHByZXNzICUuICBWaW0gd2lsbCBqdW1wIHRvIHRoZSAiI2Vsc2UiLiAgUHJlc3NpbmcgJSBhZ2FpbiB0YWtlcworeW91IHRvIHRoZSAiI2VuZGlmIi4gIEFub3RoZXIgJSB0YWtlcyB5b3UgdG8gdGhlICIjaWZkZWYiIGFnYWluLgorICAgV2hlbiB0aGUgY29uc3RydWN0IGlzIG5lc3RlZCwgVmltIHdpbGwgZmluZCB0aGUgbWF0Y2hpbmcgaXRlbXMuICBUaGlzIGlzIGEKK2dvb2Qgd2F5IHRvIGNoZWNrIGlmIHlvdSBkaWRuJ3QgZm9yZ2V0IGFuICIjZW5kaWYiLgorICAgV2hlbiB5b3UgYXJlIHNvbWV3aGVyZSBpbnNpZGUgYSAiI2lmIiAtICIjZW5kaWYiLCB5b3UgY2FuIGp1bXAgdG8gdGhlIHN0YXJ0CitvZiBpdCB3aXRoOiA+CisKKwlbIworCitJZiB5b3UgYXJlIG5vdCBhZnRlciBhICIjaWYiIG9yICIjaWZkZWYiIFZpbSB3aWxsIGJlZXAuICBUbyBqdW1wIGZvcndhcmQgdG8KK3RoZSBuZXh0ICIjZWxzZSIgb3IgIiNlbmRpZiIgdXNlOiA+CisKKwldIworCitUaGVzZSB0d28gY29tbWFuZHMgc2tpcCBhbnkgIiNpZiIgLSAiI2VuZGlmIiBibG9ja3MgdGhhdCB0aGV5IGVuY291bnRlci4KK0V4YW1wbGU6CisKKwkjaWYgZGVmaW5lZChIQVNfSU5DX0gpIH4KKwkgICAgYSA9IGEgKyBpbmMoKTsgfgorCSMgaWZkZWYgVVNFX1RIRU1FIH4KKwkgICAgYSArPSAzOyB+CisJIyBlbmRpZiB+CisJICAgIHNldF93aWR0aChhKTsgfgorCitXaXRoIHRoZSBjdXJzb3IgaW4gdGhlIGxhc3QgbGluZSwgIlsjIiBtb3ZlcyB0byB0aGUgZmlyc3QgbGluZS4gIFRoZSAiI2lmZGVmIgorLSAiI2VuZGlmIiBibG9jayBpbiB0aGUgbWlkZGxlIGlzIHNraXBwZWQuCisKKworTU9WSU5HIElOIENPREUgQkxPQ0tTCisKK0luIEMgY29kZSBibG9ja3MgYXJlIGVuY2xvc2VkIGluIHt9LiAgVGhlc2UgY2FuIGdldCBwcmV0dHkgbG9uZy4gIFRvIG1vdmUgdG8KK3RoZSBzdGFydCBvZiB0aGUgb3V0ZXIgYmxvY2sgdXNlIHRoZSAiW1siIGNvbW1hbmQuICBVc2UgIl1bIiB0byBmaW5kIHRoZSBlbmQuCitUaGlzIGFzc3VtZXMgdGhhdCB0aGUgInsiIGFuZCAifSIgYXJlIGluIHRoZSBmaXJzdCBjb2x1bW4uCisgICBUaGUgIlt7IiBjb21tYW5kIG1vdmVzIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBibG9jay4gIEl0IHNraXBzIG92ZXIKK3BhaXJzIG9mIHt9IGF0IHRoZSBzYW1lIGxldmVsLiAgIl19IiBqdW1wcyB0byB0aGUgZW5kLgorICAgQW4gb3ZlcnZpZXc6CisKKwkJCWZ1bmN0aW9uKGludCBhKQorCSAgICstPgkJeworCSAgIHwJCSAgICBpZiAoYSkKKwkgICB8CSAgICstPgkgICAgeworCVtbIHwJICAgfAkJZm9yICg7OykJICAgICAgIC0tKworCSAgIHwJICAgfAkgICstPgl7CQkJIHwKKwkgICB8CVt7IHwJICB8CSAgICBmb28oMzIpOwkJIHwgICAgIC0tKworCSAgIHwJICAgfCAgIFt7IHwJICAgIGlmIChiYXIoYSkpICAtLSsJIHwgXX0JIHwKKwkgICArLS0JICAgfAkgICstLQkJYnJlYWs7CSAgIHwgXX0gIHwJIHwKKwkJICAgfAkJfQkJIDwtKwkgfAkgfCBdWworCQkgICArLS0JCWZvb2JhcihhKQkJIHwJIHwKKwkJCSAgICB9CQkJICAgICAgIDwtKwkgfAorCQkJfQkJCQkgICAgICAgPC0rCisKK1doZW4gd3JpdGluZyBDKysgb3IgSmF2YSwgdGhlIG91dGVyIHt9IGJsb2NrIGlzIGZvciB0aGUgY2xhc3MuICBUaGUgbmV4dCBsZXZlbAorb2Yge30gaXMgZm9yIGEgbWV0aG9kLiAgV2hlbiBzb21ld2hlcmUgaW5zaWRlIGEgY2xhc3MgdXNlICJbbSIgdG8gZmluZCB0aGUKK3ByZXZpb3VzIHN0YXJ0IG9mIGEgbWV0aG9kLiAgIl1tIiBmaW5kcyB0aGUgbmV4dCBlbmQgb2YgYSBtZXRob2QuCisKK0FkZGl0aW9uYWxseSwgIltdIiBtb3ZlcyBiYWNrd2FyZCB0byB0aGUgZW5kIG9mIGEgZnVuY3Rpb24gYW5kICJdXSIgbW92ZXMKK2ZvcndhcmQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZ1bmN0aW9uLiAgVGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGlzIGRlZmluZWQKK2J5IGEgIn0iIGluIHRoZSBmaXJzdCBjb2x1bW4uCisKKwkJCQlpbnQgZnVuYzEodm9pZCkKKwkJCQl7CisJCQkJCXJldHVybiAxOworCQkgICstLS0tLS0tLS0tPiAgfQorCQkgIHwKKwkgICAgICBbXSAgfAkJaW50IGZ1bmMyKHZvaWQpCisJCSAgfAkgICArLT4JeworCQkgIHwgICAgW1sgIHwJCWlmIChmbGFnKQorCXN0YXJ0CSAgKy0tCSAgICstLQkJCXJldHVybiBmbGFnOworCQkgIHwgICAgXVsgIHwJCXJldHVybiAyOworCQkgIHwJICAgKy0+CX0KKwkgICAgICBdXSAgfAorCQkgIHwJCWludCBmdW5jMyh2b2lkKQorCQkgICstLS0tLS0tLS0tPgl7CisJCQkJCXJldHVybiAzOworCQkJCX0KKworRG9uJ3QgZm9yZ2V0IHlvdSBjYW4gYWxzbyB1c2UgIiUiIHRvIG1vdmUgYmV0d2VlbiBtYXRjaGluZyAoKSwge30gYW5kIFtdLgorVGhhdCBhbHNvIHdvcmtzIHdoZW4gdGhleSBhcmUgbWFueSBsaW5lcyBhcGFydC4KKworCitNT1ZJTkcgSU4gQlJBQ0VTCisKK1RoZSAiWygiIGFuZCAiXSkiIGNvbW1hbmRzIHdvcmsgc2ltaWxhciB0byAiW3siIGFuZCAiXX0iLCBleGNlcHQgdGhhdCB0aGV5Cit3b3JrIG9uICgpIHBhaXJzIGluc3RlYWQgb2Yge30gcGFpcnMuCis+CisJCQkJICBbKAorPAkJICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJICAgICAgPC0tLS0tLS0KKwkJaWYgKGEgPT0gYiAmJiAoYyA9PSBkIHx8IChlID4gZikpICYmIHggPiB5KSB+CisJCQkJICAtLS0tLS0tLS0tLS0tLT4KKwkJCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+ID4KKwkJCQkgICAgICAgXSkKKworTU9WSU5HIElOIENPTU1FTlRTCisKK1RvIG1vdmUgYmFjayB0byB0aGUgc3RhcnQgb2YgYSBjb21tZW50IHVzZSAiWy8iLiAgTW92ZSBmb3J3YXJkIHRvIHRoZSBlbmQgb2YgYQorY29tbWVudCB3aXRoICJdLyIuICBUaGlzIG9ubHkgd29ya3MgZm9yIC8qIC0gKi8gY29tbWVudHMuCisKKwkgICstPgkgICstPiAvKgorCSAgfCAgICBbLyB8ICAgICogQSBjb21tZW50IGFib3V0ICAgICAgLS0rCisgICAgICAgWy8gfAkgICstLSAgKiB3b25kZXJmdWwgbGlmZS4JfCBdLworCSAgfAkgICAgICAgKi8JCSAgICAgIDwtKworCSAgfAorCSAgKy0tCSAgICAgICBmb28gPSBiYXIgKiAzOwkgICAgICAtLSsKKwkJCQkJCXwgXS8KKwkJICAgICAgIC8qIGEgc2hvcnQgY29tbWVudCAqLyAgPC0rCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI5LjQqCUZpbmRpbmcgZ2xvYmFsIGlkZW50aWZpZXJzCisKK1lvdSBhcmUgZWRpdGluZyBhIEMgcHJvZ3JhbSBhbmQgd29uZGVyIGlmIGEgdmFyaWFibGUgaXMgZGVjbGFyZWQgYXMgImludCIgb3IKKyJ1bnNpZ25lZCIuICBBIHF1aWNrIHdheSB0byBmaW5kIHRoaXMgaXMgd2l0aCB0aGUgIltJIiBjb21tYW5kLgorICAgU3VwcG9zZSB0aGUgY3Vyc29yIGlzIG9uIHRoZSB3b3JkICJjb2x1bW4iLiAgVHlwZTogPgorCisJW0kKKworVmltIHdpbGwgbGlzdCB0aGUgbWF0Y2hpbmcgbGluZXMgaXQgY2FuIGZpbmQuICBOb3Qgb25seSBpbiB0aGUgY3VycmVudCBmaWxlLAorYnV0IGFsc28gaW4gYWxsIGluY2x1ZGVkIGZpbGVzIChhbmQgZmlsZXMgaW5jbHVkZWQgaW4gdGhlbSwgZXRjLikuICBUaGUgcmVzdWx0Citsb29rcyBsaWtlIHRoaXM6CisKKwlzdHJ1Y3RzLmggfgorCSAxOiAgIDI5ICAgICB1bnNpZ25lZCAgICAgY29sdW1uOyAgICAvKiBjb2x1bW4gbnVtYmVyICovIH4KKworVGhlIGFkdmFudGFnZSBvdmVyIHVzaW5nIHRhZ3Mgb3IgdGhlIHByZXZpZXcgd2luZG93IGlzIHRoYXQgaW5jbHVkZWQgZmlsZXMgYXJlCitzZWFyY2hlZC4gIEluIG1vc3QgY2FzZXMgdGhpcyByZXN1bHRzIGluIHRoZSByaWdodCBkZWNsYXJhdGlvbiB0byBiZSBmb3VuZC4KK0Fsc28gd2hlbiB0aGUgdGFncyBmaWxlIGlzIG91dCBvZiBkYXRlLiAgQWxzbyB3aGVuIHlvdSBkb24ndCBoYXZlIHRhZ3MgZm9yIHRoZQoraW5jbHVkZWQgZmlsZXMuCisgICBIb3dldmVyLCBhIGZldyB0aGluZ3MgbXVzdCBiZSByaWdodCBmb3IgIltJIiB0byBkbyBpdHMgd29yay4gIEZpcnN0IG9mIGFsbCwKK3RoZSAnaW5jbHVkZScgb3B0aW9uIG11c3Qgc3BlY2lmeSBob3cgYSBmaWxlIGlzIGluY2x1ZGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUKK3dvcmtzIGZvciBDIGFuZCBDKysuICBGb3Igb3RoZXIgbGFuZ3VhZ2VzIHlvdSB3aWxsIGhhdmUgdG8gY2hhbmdlIGl0LgorCisKK0xPQ0FUSU5HIElOQ0xVREVEIEZJTEVTCisKKyAgIFZpbSB3aWxsIGZpbmQgaW5jbHVkZWQgZmlsZXMgaW4gdGhlIHBsYWNlcyBzcGVjaWZpZWQgd2l0aCB0aGUgJ3BhdGgnCitvcHRpb24uICBJZiBhIGRpcmVjdG9yeSBpcyBtaXNzaW5nLCBzb21lIGluY2x1ZGUgZmlsZXMgd2lsbCBub3QgYmUgZm91bmQuICBZb3UKK2NhbiBkaXNjb3ZlciB0aGlzIHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6Y2hlY2twYXRoCisKK0l0IHdpbGwgbGlzdCB0aGUgaW5jbHVkZSBmaWxlcyB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZC4gIEFsc28gZmlsZXMgaW5jbHVkZWQKK2J5IHRoZSBmaWxlcyB0aGF0IGNvdWxkIGJlIGZvdW5kLiAgQW4gZXhhbXBsZSBvZiB0aGUgb3V0cHV0OgorCisJLS0tIEluY2x1ZGVkIGZpbGVzIG5vdCBmb3VuZCBpbiBwYXRoIC0tLSB+CisJPGlvLmg+IH4KKwl2aW0uaCAtLT4gfgorCSAgPGZ1bmN0aW9ucy5oPiB+CisJICA8Y2xpYi9leGVjX3Byb3Rvcy5oPiB+CisKK1RoZSAiaW8uaCIgZmlsZSBpcyBpbmNsdWRlZCBieSB0aGUgY3VycmVudCBmaWxlIGFuZCBjYW4ndCBiZSBmb3VuZC4gICJ2aW0uaCIKK2NhbiBiZSBmb3VuZCwgdGh1cyAiOmNoZWNrcGF0aCIgZ29lcyBpbnRvIHRoaXMgZmlsZSBhbmQgY2hlY2tzIHdoYXQgaXQKK2luY2x1ZGVzLiAgVGhlICJmdW5jdGlvbnMuaCIgYW5kICJjbGliL2V4ZWNfcHJvdG9zLmgiIGZpbGVzLCBpbmNsdWRlZCBieQorInZpbS5oIiBhcmUgbm90IGZvdW5kLgorCisJTm90ZToKKwlWaW0gaXMgbm90IGEgY29tcGlsZXIuICBJdCBkb2VzIG5vdCByZWNvZ25pemUgIiNpZmRlZiIgc3RhdGVtZW50cy4KKwlUaGlzIG1lYW5zIGV2ZXJ5ICIjaW5jbHVkZSIgc3RhdGVtZW50IGlzIHVzZWQsIGFsc28gd2hlbiBpdCBjb21lcworCWFmdGVyICIjaWYgTkVWRVIiLgorCitUbyBmaXggdGhlIGZpbGVzIHRoYXQgY291bGQgbm90IGJlIGZvdW5kLCBhZGQgYSBkaXJlY3RvcnkgdG8gdGhlICdwYXRoJworb3B0aW9uLiAgQSBnb29kIHBsYWNlIHRvIGZpbmQgb3V0IGFib3V0IHRoaXMgaXMgdGhlIE1ha2VmaWxlLiAgTG9vayBvdXQgZm9yCitsaW5lcyB0aGF0IGNvbnRhaW4gIi1JIiBpdGVtcywgbGlrZSAiLUkvdXNyL2xvY2FsL1gxMSIuICBUbyBhZGQgdGhpcyBkaXJlY3RvcnkKK3VzZTogPgorCisJOnNldCBwYXRoKz0vdXNyL2xvY2FsL1gxMQorCitXaGVuIHRoZXJlIGFyZSBtYW55IHN1YmRpcmVjdG9yaWVzLCB5b3UgYW4gdXNlIHRoZSAiKiIgd2lsZGNhcmQuICBFeGFtcGxlOiA+CisKKwk6c2V0IHBhdGgrPS91c3IvKi9pbmNsdWRlCisKK1RoaXMgd291bGQgZmluZCBmaWxlcyBpbiAiL3Vzci9sb2NhbC9pbmNsdWRlIiBhcyB3ZWxsIGFzICIvdXNyL1gxMS9pbmNsdWRlIi4KKworV2hlbiB3b3JraW5nIG9uIGEgcHJvamVjdCB3aXRoIGEgd2hvbGUgbmVzdGVkIHRyZWUgb2YgaW5jbHVkZWQgZmlsZXMsIHRoZSAiKioiCitpdGVtcyBpcyB1c2VmdWwuICBUaGlzIHdpbGwgc2VhcmNoIGRvd24gaW4gYWxsIHN1YmRpcmVjdG9yaWVzLiAgRXhhbXBsZTogPgorCisJOnNldCBwYXRoKz0vcHJvamVjdHMvaW52ZW50LyoqL2luY2x1ZGUKKworVGhpcyB3aWxsIGZpbmQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzOgorCisJL3Byb2plY3RzL2ludmVudC9pbmNsdWRlIH4KKwkvcHJvamVjdHMvaW52ZW50L21haW4vaW5jbHVkZSB+CisJL3Byb2plY3RzL2ludmVudC9tYWluL29zL2luY2x1ZGUgfgorCWV0Yy4KKworVGhlcmUgYXJlIGV2ZW4gbW9yZSBwb3NzaWJpbGl0aWVzLiAgQ2hlY2sgb3V0IHRoZSAncGF0aCcgb3B0aW9uIGZvciBpbmZvLgorICAgSWYgeW91IHdhbnQgdG8gc2VlIHdoaWNoIGluY2x1ZGVkIGZpbGVzIGFyZSBhY3R1YWxseSBmb3VuZCwgdXNlIHRoaXMKK2NvbW1hbmQ6ID4KKworCTpjaGVja3BhdGghCisKK1lvdSB3aWxsIGdldCBhICh2ZXJ5IGxvbmcpIGxpc3Qgb2YgaW5jbHVkZWQgZmlsZXMsIHRoZSBmaWxlcyB0aGV5IGluY2x1ZGUsIGFuZAorc28gb24uICBUbyBzaG9ydGVuIHRoZSBsaXN0IGEgYml0LCBWaW0gc2hvd3MgIihBbHJlYWR5IGxpc3RlZCkiIGZvciBmaWxlcyB0aGF0Cit3ZXJlIGZvdW5kIGJlZm9yZSBhbmQgZG9lc24ndCBsaXN0IHRoZSBpbmNsdWRlZCBmaWxlcyBpbiB0aGVyZSBhZ2Fpbi4KKworCitKVU1QSU5HIFRPIEEgTUFUQ0gKKworIltJIiBwcm9kdWNlcyBhIGxpc3Qgd2l0aCBvbmx5IG9uZSBsaW5lIG9mIHRleHQuICBXaGVuIHlvdSB3YW50IHRvIGhhdmUgYQorY2xvc2VyIGxvb2sgYXQgdGhlIGZpcnN0IGl0ZW0sIHlvdSBjYW4ganVtcCB0byB0aGF0IGxpbmUgd2l0aCB0aGUgY29tbWFuZDogPgorCisJWzxUYWI+CisKK1lvdSBjYW4gYWxzbyB1c2UgIlsgQ1RSTC1JIiwgc2luY2UgQ1RSTC1JIGlzIHRoZSBzYW1lIGFzIHByZXNzaW5nIDxUYWI+LgorCitUaGUgbGlzdCB0aGF0ICJbSSIgcHJvZHVjZXMgaGFzIGEgbnVtYmVyIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmUuICBXaGVuIHlvdQord2FudCB0byBqdW1wIHRvIGFub3RoZXIgaXRlbSB0aGFuIHRoZSBmaXJzdCBvbmUsIHR5cGUgdGhlIG51bWJlciBmaXJzdDogPgorCisJM1s8VGFiPgorCitXaWxsIGp1bXAgdG8gdGhlIHRoaXJkIGl0ZW0gaW4gdGhlIGxpc3QuICBSZW1lbWJlciB0aGF0IHlvdSBjYW4gdXNlIENUUkwtTyB0bworanVtcCBiYWNrIHRvIHdoZXJlIHlvdSBzdGFydGVkIGZyb20uCisKKworUkVMQVRFRCBDT01NQU5EUworCisJW2kJCW9ubHkgbGlzdHMgdGhlIGZpcnN0IG1hdGNoCisJXUkJCW9ubHkgbGlzdHMgaXRlbXMgYmVsb3cgdGhlIGN1cnNvcgorCV1pCQlvbmx5IGxpc3RzIHRoZSBmaXJzdCBpdGVtIGJlbG93IHRoZSBjdXJzb3IKKworCitGSU5ESU5HIERFRklORUQgSURFTlRJRklFUlMKKworVGhlICJbSSIgY29tbWFuZCBmaW5kcyBhbnkgaWRlbnRpZmllci4gIFRvIGZpbmQgb25seSBtYWNyb3MsIGRlZmluZWQgd2l0aAorIiNkZWZpbmUiIHVzZTogPgorCisJW0QKKworQWdhaW4sIHRoaXMgc2VhcmNoZXMgaW4gaW5jbHVkZWQgZmlsZXMuICBUaGUgJ2RlZmluZScgb3B0aW9uIHNwZWNpZmllcyB3aGF0IGEKK2xpbmUgbG9va3MgbGlrZSB0aGF0IGRlZmluZXMgdGhlIGl0ZW1zIGZvciAiW0QiLiAgWW91IGNvdWxkIGNoYW5nZSBpdCB0byBtYWtlCitpdCB3b3JrIHdpdGggb3RoZXIgbGFuZ3VhZ2VzIHRoYW4gQyBvciBDKysuCisgICBUaGUgY29tbWFuZHMgcmVsYXRlZCB0byAiW0QiIGFyZToKKworCVtkCQlvbmx5IGxpc3RzIHRoZSBmaXJzdCBtYXRjaAorCV1ECQlvbmx5IGxpc3RzIGl0ZW1zIGJlbG93IHRoZSBjdXJzb3IKKwldZAkJb25seSBsaXN0cyB0aGUgZmlyc3QgaXRlbSBiZWxvdyB0aGUgY3Vyc29yCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjI5LjUqCUZpbmRpbmcgbG9jYWwgaWRlbnRpZmllcnMKKworVGhlICJbSSIgY29tbWFuZCBzZWFyY2hlcyBpbmNsdWRlZCBmaWxlcy4gIFRvIHNlYXJjaCBpbiB0aGUgY3VycmVudCBmaWxlIG9ubHksCithbmQganVtcCB0byB0aGUgZmlyc3QgcGxhY2Ugd2hlcmUgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciBpcyB1c2VkOiA+CisKKwlnRAorCitIaW50OiBHb3RvIERlZmluaXRpb24uICBUaGlzIGNvbW1hbmQgaXMgdmVyeSB1c2VmdWwgdG8gZmluZCBhIHZhcmlhYmxlIG9yCitmdW5jdGlvbiB0aGF0IHdhcyBkZWNsYXJlZCBsb2NhbGx5ICgic3RhdGljIiwgaW4gQyB0ZXJtcykuICBFeGFtcGxlIChjdXJzb3Igb24KKyJjb3VudGVyIik6CisKKwkgICArLT4gICBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOworCSAgIHwKKwkgICB8ICAgICBpbnQgZ2V0X2NvdW50ZXIodm9pZCkKKwlnRCB8ICAgICB7CisJICAgfAkgICAgICsrY291bnRlcjsKKwkgICArLS0JICAgICByZXR1cm4gY291bnRlcjsKKwkJIH0KKworVG8gcmVzdHJpY3QgdGhlIHNlYXJjaCBldmVuIGZ1cnRoZXIsIGFuZCBsb29rIG9ubHkgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24sCit1c2UgdGhpcyBjb21tYW5kOiA+CisKKwlnZAorCitUaGlzIHdpbGwgZ28gYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gYW5kIGZpbmQgdGhlIGZpcnN0CitvY2N1cnJlbmNlIG9mIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuICBBY3R1YWxseSwgaXQgc2VhcmNoZXMgYmFja3dhcmRzIHRvCithbiBlbXB0eSBsaW5lIGFib3ZlIHRoZSBhICJ7IiBpbiB0aGUgZmlyc3QgY29sdW1uLiAgRnJvbSB0aGVyZSBpdCBzZWFyY2hlcworZm9yd2FyZCBmb3IgdGhlIGlkZW50aWZpZXIuICBFeGFtcGxlIChjdXJzb3Igb24gImlkeCIpOgorCisJCWludCBmaW5kX2VudHJ5KGNoYXIgKm5hbWUpCisJCXsKKwkgICArLT4JICAgIGludCBpZHg7CisJICAgfAorCWdkIHwJICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgdGFibGVfbGVuOyArK2lkeCkKKwkgICB8CQlpZiAoc3RyY21wKHRhYmxlW2lkeF0ubmFtZSwgbmFtZSkgPT0gMCkKKwkgICArLS0JCSAgICByZXR1cm4gaWR4OworCQl9CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMzAudHh0fCAgRWRpdGluZyBwcm9ncmFtcworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl8zMC50eHQgYi9ydW50aW1lL2RvYy91c3JfMzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OGYwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfMzAudHh0CkBAIC0wLDAgKzEsNjQzIEBACisqdXNyXzMwLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSmFuIDE3CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgICBFZGl0aW5nIHByb2dyYW1zCisKKworVmltIGhhcyB2YXJpb3VzIGNvbW1hbmRzIHRoYXQgYWlkIGluIHdyaXRpbmcgY29tcHV0ZXIgcHJvZ3JhbXMuICBDb21waWxlIGEKK3Byb2dyYW0gYW5kIGRpcmVjdGx5IGp1bXAgdG8gcmVwb3J0ZWQgZXJyb3JzLiAgQXV0b21hdGljYWxseSBzZXQgdGhlIGluZGVudAorZm9yIG1hbnkgbGFuZ3VhZ2VzIGFuZCBmb3JtYXQgY29tbWVudHMuCisKK3wzMC4xfAlDb21waWxpbmcKK3wzMC4yfAlJbmRlbnRpbmcgQyBmaWxlcworfDMwLjN8CUF1dG9tYXRpYyBpbmRlbnRpbmcKK3wzMC40fAlPdGhlciBpbmRlbnRpbmcKK3wzMC41fAlUYWJzIGFuZCBzcGFjZXMKK3wzMC42fAlGb3JtYXR0aW5nIGNvbW1lbnRzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzMxLnR4dHwgIEV4cGxvaXRpbmcgdGhlIEdVSQorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMjkudHh0fCAgTW92aW5nIHRocm91Z2ggcHJvZ3JhbXMKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMwLjEqCUNvbXBpbGluZworCitWaW0gaGFzIGEgc2V0IG9mIHNvIGNhbGxlZCAicXVpY2tmaXgiIGNvbW1hbmRzLiAgVGhleSBlbmFibGUgeW91IHRvIGNvbXBpbGUgYQorcHJvZ3JhbSBmcm9tIHdpdGhpbiBWaW0gYW5kIHRoZW4gZ28gdGhyb3VnaCB0aGUgZXJyb3JzIGdlbmVyYXRlZCBhbmQgZml4IHRoZW0KKyhob3BlZnVsbHkpLiAgWW91IGNhbiB0aGVuIHJlY29tcGlsZSBhbmQgZml4IGFueSBuZXcgZXJyb3JzIHRoYXQgYXJlIGZvdW5kCit1bnRpbCBmaW5hbGx5IHlvdXIgcHJvZ3JhbSBjb21waWxlcyB3aXRob3V0IGFueSBlcnJvci4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1bnMgdGhlIHByb2dyYW0gIm1ha2UiIChzdXBwbHlpbmcgaXQgd2l0aCBhbnkgYXJndW1lbnQKK3lvdSBnaXZlKSBhbmQgY2FwdHVyZXMgdGhlIHJlc3VsdHM6ID4KKworCTptYWtlIHthcmd1bWVudHN9CisKK0lmIGVycm9ycyB3ZXJlIGdlbmVyYXRlZCwgdGhleSBhcmUgY2FwdHVyZWQgYW5kIHRoZSBlZGl0b3IgcG9zaXRpb25zIHlvdSB3aGVyZQordGhlIGZpcnN0IGVycm9yIG9jY3VycmVkLgorICAgVGFrZSBhIGxvb2sgYXQgYW4gZXhhbXBsZSAiOm1ha2UiIHNlc3Npb24uIChUeXBpY2FsIDptYWtlIHNlc3Npb25zIGdlbmVyYXRlCitmYXIgbW9yZSBlcnJvcnMgYW5kIGZld2VyIHN0dXBpZCBvbmVzLikgIEFmdGVyIHR5cGluZyAiOm1ha2UiIHRoZSBzY3JlZW4gbG9va3MKK2xpa2UgdGhpczoKKworCTohbWFrZSB8ICZ0ZWUgL3RtcC92aW0yMTU5NTMuZXJyIH4KKwlnY2MgLWcgLVdhbGwgLW8gcHJvZyBtYWluLmMgc3ViLmMgfgorCW1haW4uYzogSW4gZnVuY3Rpb24gJ21haW4nOiB+CisJbWFpbi5jOjY6IHRvbyBtYW55IGFyZ3VtZW50cyB0byBmdW5jdGlvbiAnZG9fc3ViJyB+CisJbWFpbi5jOiBBdCB0b3AgbGV2ZWw6IH4KKwltYWluLmM6MTA6IHBhcnNlIGVycm9yIGJlZm9yZSAnfScgfgorCW1ha2U6ICoqKiBbcHJvZ10gRXJyb3IgMSB+CisKKwkyIHJldHVybmVkIH4KKwkibWFpbi5jIiAxMUwsIDExMUMgfgorCSgzIG9mIDYpOiB0b28gbWFueSBhcmd1bWVudHMgdG8gZnVuY3Rpb24gJ2RvX3N1YicgfgorCUhpdCBFTlRFUiBvciB0eXBlIGNvbW1hbmQgdG8gY29udGludWUgfgorCitGcm9tIHRoaXMgeW91IGNhbiBzZWUgdGhhdCB5b3UgaGF2ZSBlcnJvcnMgaW4gdGhlIGZpbGUgIm1haW4uYyIuICBXaGVuIHlvdQorcHJlc3MgPEVudGVyPiwgVmltIGRpc3BsYXlzIHRoZSBmaWxlICJtYWluLmMiLCB3aXRoIHRoZSBjdXJzb3IgcG9zaXRpb25lZCBvbgorbGluZSA2LCB0aGUgZmlyc3QgbGluZSB3aXRoIGFuIGVycm9yLiAgWW91IGRpZCBub3QgbmVlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG9yCit0aGUgbGluZSBudW1iZXIsIFZpbSBrbmV3IHdoZXJlIHRvIGdvIGJ5IGxvb2tpbmcgaW4gdGhlIGVycm9yIG1lc3NhZ2VzLgorCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXxpbnQgbWFpbigpCQkJCQkgICAgfAorCQl8ewkJCQkJCSAgICB8CisJCXwJaW50IGk9MzsJCQkJICAgIHwKKyAgICAgIGN1cnNvciAtPiB8CWRvX3N1YigiZm9vIik7CQkJCSAgICB8CisJCXwJKytpOwkJCQkJICAgIHwKKwkJfAlyZXR1cm4gKDApOwkJCQkgICAgfAorCQl8fQkJCQkJCSAgICB8CisJCXx9CQkJCQkJICAgIHwKKwkJfCB+CQkJCQkJICAgIHwKKwkJfCgzIG9mIDEyKTogdG9vIG1hbnkgYXJndW1lbnRzIHRvIGZ1bmN0aW9uICdkb19zdWInIHwKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGZvbGxvd2luZyBjb21tYW5kIGdvZXMgdG8gd2hlcmUgdGhlIG5leHQgZXJyb3Igb2NjdXJzOiA+CisKKwk6Y25leHQKKworVmltIGp1bXBzIHRvIGxpbmUgMTAsIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUsIHdoZXJlIHRoZXJlIGlzIGFuIGV4dHJhICd9Jy4KKyAgIFdoZW4gdGhlcmUgaXMgbm90IGVub3VnaCByb29tLCBWaW0gd2lsbCBzaG9ydGVuIHRoZSBlcnJvciBtZXNzYWdlLiAgVG8gc2VlCit0aGUgd2hvbGUgbWVzc2FnZSB1c2U6ID4KKworCTpjYworCitZb3UgY2FuIGdldCBhbiBvdmVydmlldyBvZiBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzIHdpdGggdGhlICI6Y2xpc3QiIGNvbW1hbmQuCitUaGUgb3V0cHV0IGxvb2tzIGxpa2UgdGhpczogPgorCisJOmNsaXN0Cis8CTMgbWFpbi5jOiA2OnRvbyBtYW55IGFyZ3VtZW50cyB0byBmdW5jdGlvbiAnZG9fc3ViJyB+CisJNSBtYWluLmM6IDEwOnBhcnNlIGVycm9yIGJlZm9yZSAnfScgfgorCitPbmx5IHRoZSBsaW5lcyB3aGVyZSBWaW0gcmVjb2duaXplZCBhIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgYXJlIGxpc3RlZAoraGVyZS4gIEl0IGFzc3VtZXMgdGhvc2UgYXJlIHRoZSBpbnRlcmVzdGluZyBsaW5lcyBhbmQgdGhlIHJlc3QgaXMganVzdCBib3JpbmcKK21lc3NhZ2VzLiAgSG93ZXZlciwgc29tZXRpbWVzIHVucmVjb2duaXplZCBsaW5lcyBkbyBjb250YWluIHNvbWV0aGluZyB5b3Ugd2FudAordG8gc2VlLiAgT3V0cHV0IGZyb20gdGhlIGxpbmtlciwgZm9yIGV4YW1wbGUsIGFib3V0IGFuIHVuZGVmaW5lZCBmdW5jdGlvbi4KK1RvIHNlZSBhbGwgdGhlIG1lc3NhZ2VzIGFkZCBhICIhIiB0byB0aGUgY29tbWFuZDogPgorCisJOmNsaXN0IQorPAkxIGdjYyAtZyAtV2FsbCAtbyBwcm9nIG1haW4uYyBzdWIuYyB+CisJMiBtYWluLmM6IEluIGZ1bmN0aW9uICdtYWluJzogfgorCTMgbWFpbi5jOjY6IHRvbyBtYW55IGFyZ3VtZW50cyB0byBmdW5jdGlvbiAnZG9fc3ViJyB+CisJNCBtYWluLmM6IEF0IHRvcCBsZXZlbDogfgorCTUgbWFpbi5jOjEwOiBwYXJzZSBlcnJvciBiZWZvcmUgJ30nIH4KKwk2IG1ha2U6ICoqKiBbcHJvZ10gRXJyb3IgMSB+CisKK1ZpbSB3aWxsIGhpZ2hsaWdodCB0aGUgY3VycmVudCBlcnJvci4gIFRvIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIGVycm9yLCB1c2U6Cis+CisJOmNwcmV2aW91cworCitPdGhlciBjb21tYW5kcyB0byBtb3ZlIGFyb3VuZCBpbiB0aGUgZXJyb3IgbGlzdDoKKworCTpjZmlyc3QJCXRvIGZpcnN0IGVycm9yCisJOmNsYXN0CQl0byBsYXN0IGVycm9yCisJOmNjIDMJCXRvIGVycm9yIG5yIDMKKworCitVU0lORyBBTk9USEVSIENPTVBJTEVSCisKK1RoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHJ1biB3aGVuIHRoZSAiOm1ha2UiIGNvbW1hbmQgaXMgZXhlY3V0ZWQgaXMgZGVmaW5lZAorYnkgdGhlICdtYWtlcHJnJyBvcHRpb24uICBVc3VhbGx5IHRoaXMgaXMgc2V0IHRvICJtYWtlIiwgYnV0IFZpc3VhbCBDKysgdXNlcnMKK3Nob3VsZCBzZXQgdGhpcyB0byAibm1ha2UiIGJ5IGV4ZWN1dGluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzZXQgbWFrZXByZz1ubWFrZQorCitZb3UgY2FuIGFsc28gaW5jbHVkZSBhcmd1bWVudHMgaW4gdGhpcyBvcHRpb24uICBTcGVjaWFsIGNoYXJhY3RlcnMgbmVlZCB0bworYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLiAgRXhhbXBsZTogPgorCisJOnNldCBtYWtlcHJnPW5tYWtlXCAtZlwgcHJvamVjdC5tYWsKKworWW91IGNhbiBpbmNsdWRlIHNwZWNpYWwgVmltIGtleXdvcmRzIGluIHRoZSBjb21tYW5kIHNwZWNpZmljYXRpb24uICBUaGUgJQorY2hhcmFjdGVyIGV4cGFuZHMgdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4gIFNvIGlmIHlvdSBleGVjdXRlIHRoZQorY29tbWFuZDogPgorCTpzZXQgbWFrZXByZz1tYWtlXCAlCisKK1doZW4geW91IGFyZSBlZGl0aW5nIG1haW4uYywgdGhlbiAiOm1ha2UiIGV4ZWN1dGVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJbWFrZSBtYWluLmMKKworVGhpcyBpcyBub3QgdG9vIHVzZWZ1bCwgc28geW91IHdpbGwgcmVmaW5lIHRoZSBjb21tYW5kIGEgbGl0dGxlIGFuZCB1c2UgdGhlIDpyCisocm9vdCkgbW9kaWZpZXI6ID4KKworCTpzZXQgbWFrZXByZz1tYWtlXCAlOnIubworCitOb3cgdGhlIGNvbW1hbmQgZXhlY3V0ZWQgaXMgYXMgZm9sbG93czogPgorCisJbWFrZSBtYWluLm8KKworTW9yZSBhYm91dCB0aGVzZSBtb2RpZmllcnMgaGVyZTogfGZpbGVuYW1lLW1vZGlmaWVyc3wuCisKKworT0xEIEVSUk9SIExJU1RTCisKK1N1cHBvc2UgeW91ICI6bWFrZSIgYSBwcm9ncmFtLiAgVGhlcmUgaXMgYW4gd2FybmluZyBtZXNzYWdlIGluIG9uZSBmaWxlIGFuZCBhbgorZXJyb3IgbWVzc2FnZSBpbiBhbm90aGVyLiAgWW91IGZpeCB0aGUgZXJyb3IgYW5kIHVzZSAiOm1ha2UiIGFnYWluIHRvIGNoZWNrIGlmCitpdCB3YXMgcmVhbGx5IGZpeGVkLiAgTm93IHlvdSB3YW50IHRvIGxvb2sgYXQgdGhlIHdhcm5pbmcgbWVzc2FnZS4gIEl0IGRvZXNuJ3QKK3Nob3cgdXAgaW4gdGhlIGxhc3QgZXJyb3IgbGlzdCwgc2luY2UgdGhlIGZpbGUgd2l0aCB0aGUgd2FybmluZyB3YXNuJ3QKK2NvbXBpbGVkIGFnYWluLiAgWW91IGNhbiBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBlcnJvciBsaXN0IHdpdGg6ID4KKworCTpjb2xkZXIKKworVGhlbiB1c2UgIjpjbGlzdCIgYW5kICI6Y2Mge25yfSIgdG8ganVtcCB0byB0aGUgcGxhY2Ugd2l0aCB0aGUgd2FybmluZy4KKyAgIFRvIGdvIGZvcndhcmQgdG8gdGhlIG5leHQgZXJyb3IgbGlzdDogPgorCisJOmNuZXdlcgorCitWaW0gcmVtZW1iZXJzIHRlbiBlcnJvciBsaXN0cy4KKworCitTV0lUQ0hJTkcgQ09NUElMRVJTCisKK1lvdSBoYXZlIHRvIHRlbGwgVmltIHdoYXQgZm9ybWF0IHRoZSBlcnJvciBtZXNzYWdlcyBhcmUgdGhhdCB5b3VyIGNvbXBpbGVyCitwcm9kdWNlcy4gIFRoaXMgaXMgZG9uZSB3aXRoIHRoZSAnZXJyb3Jmb3JtYXQnIG9wdGlvbi4gIFRoZSBzeW50YXggb2YgdGhpcworb3B0aW9uIGlzIHF1aXRlIGNvbXBsaWNhdGVkIGFuZCBpdCBjYW4gYmUgbWFkZSB0byBmaXQgYWxtb3N0IGFueSBjb21waWxlci4KK1lvdSBjYW4gZmluZCB0aGUgZXhwbGFuYXRpb24gaGVyZTogfGVycm9yZm9ybWF0fC4KKworWW91IG1pZ2h0IGJlIHVzaW5nIHZhcmlvdXMgZGlmZmVyZW50IGNvbXBpbGVycy4gIFNldHRpbmcgdGhlICdtYWtlcHJnJyBvcHRpb24sCithbmQgZXNwZWNpYWxseSB0aGUgJ2Vycm9yZm9ybWF0JyBlYWNoIHRpbWUgaXMgbm90IGVhc3kuICBWaW0gb2ZmZXJzIGEgc2ltcGxlCittZXRob2QgZm9yIHRoaXMuICBGb3IgZXhhbXBsZSwgdG8gc3dpdGNoIHRvIHVzaW5nIHRoZSBNaWNyb3NvZnQgVmlzdWFsIEMrKworY29tcGlsZXI6ID4KKworCTpjb21waWxlciBtc3ZjCisKK1RoaXMgd2lsbCBmaW5kIHRoZSBWaW0gc2NyaXB0IGZvciB0aGUgIm1zdmMiIGNvbXBpbGVyIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlCitvcHRpb25zLgorICAgWW91IGNhbiB3cml0ZSB5b3VyIG93biBjb21waWxlciBmaWxlcy4gIFNlZSB8d3JpdGUtY29tcGlsZXItcGx1Z2lufC4KKworCitPVVRQVVQgUkVESVJFQ1RJT04KKworVGhlICI6bWFrZSIgY29tbWFuZCByZWRpcmVjdHMgdGhlIG91dHB1dCBvZiB0aGUgZXhlY3V0ZWQgcHJvZ3JhbSB0byBhbiBlcnJvcgorZmlsZS4gIEhvdyB0aGlzIHdvcmtzIGRlcGVuZHMgb24gdmFyaW91cyB0aGluZ3MsIHN1Y2ggYXMgdGhlICdzaGVsbCcuICBJZiB5b3VyCisiOm1ha2UiIGNvbW1hbmQgZG9lc24ndCBjYXB0dXJlIHRoZSBvdXRwdXQsIGNoZWNrIHRoZSAnbWFrZWVmJyBhbmQKKydzaGVsbHBpcGUnIG9wdGlvbnMuICBUaGUgJ3NoZWxscXVvdGUnIGFuZCAnc2hlbGx4cXVvdGUnIG9wdGlvbnMgbWlnaHQgYWxzbworbWF0dGVyLgorCitJbiBjYXNlIHlvdSBjYW4ndCBnZXQgIjptYWtlIiB0byByZWRpcmVjdCB0aGUgZmlsZSBmb3IgeW91LCBhbiBhbHRlcm5hdGl2ZSBpcwordG8gY29tcGlsZSB0aGUgcHJvZ3JhbSBpbiBhbm90aGVyIHdpbmRvdyBhbmQgcmVkaXJlY3QgdGhlIG91dHB1dCBpbnRvIGEgZmlsZS4KK1RoZW4gaGF2ZSBWaW0gcmVhZCB0aGlzIGZpbGUgd2l0aDogPgorCisJOmNmaWxlIHtmaWxlbmFtZX0KKworSnVtcGluZyB0byBlcnJvcnMgd2lsbCB3b3JrIGxpa2Ugd2l0aCB0aGUgIjptYWtlIiBjb21tYW5kLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyozMC4yKglJbmRlbnRpbmcgQyBmaWxlcworCitBIHByb2dyYW0gaXMgbXVjaCBlYXNpZXIgdG8gdW5kZXJzdGFuZCB3aGVuIHRoZSBsaW5lcyBoYXZlIGJlZW4gcHJvcGVybHkKK2luZGVudGVkLiAgVmltIG9mZmVycyB2YXJpb3VzIHdheXMgdG8gbWFrZSB0aGlzIGxlc3Mgd29yay4KKyAgIEZvciBDIHByb2dyYW1zIHNldCB0aGUgJ2NpbmRlbnQnIG9wdGlvbi4gIFZpbSBrbm93cyBhIGxvdCBhYm91dCBDIHByb2dyYW1zCithbmQgd2lsbCB0cnkgdmVyeSBoYXJkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBpbmRlbnQgZm9yIHlvdS4gIFNldCB0aGUKKydzaGlmdHdpZHRoJyBvcHRpb24gdG8gdGhlIGFtb3VudCBvZiBzcGFjZXMgeW91IHdhbnQgZm9yIGEgZGVlcGVyIGxldmVsLiAgRm91cgorc3BhY2VzIHdpbGwgd29yayBmaW5lLiAgT25lICI6c2V0IiBjb21tYW5kIHdpbGwgZG8gaXQ6ID4KKworCTpzZXQgY2luZGVudCBzaGlmdHdpZHRoPTQKKworV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB3aGVuIHlvdSB0eXBlIHNvbWV0aGluZyBzdWNoIGFzICJpZiAoeCkiLCB0aGUgbmV4dAorbGluZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaW5kZW50ZWQgYW4gYWRkaXRpb25hbCBsZXZlbC4KKworCQkJCSAgICBpZiAoZmxhZykKKwlBdXRvbWF0aWMgaW5kZW50ICAgLS0tPgkJZG9fdGhlX3dvcmsoKTsKKwlBdXRvbWF0aWMgdW5pbmRlbnQgPC0tCSAgICBpZiAob3RoZXJfZmxhZykgeworCUF1dG9tYXRpYyBpbmRlbnQgICAtLS0+CQlkb19maWxlKCk7CisJa2VlcCBpbmRlbnQJCQlkb19zb21lX21vcmUoKTsKKwlBdXRvbWF0aWMgdW5pbmRlbnQgPC0tCSAgICB9CisKK1doZW4geW91IHR5cGUgc29tZXRoaW5nIGluIGN1cmx5IGJyYWNlcyAoe30pLCB0aGUgdGV4dCB3aWxsIGJlIGluZGVudGVkIGF0IHRoZQorc3RhcnQgYW5kIHVuaW5kZW50ZWQgYXQgdGhlIGVuZC4gIFRoZSB1bmluZGVudGluZyB3aWxsIGhhcHBlbiBhZnRlciB0eXBpbmcgdGhlCisnfScsIHNpbmNlIFZpbSBjYW4ndCBndWVzcyB3aGF0IHlvdSBhcmUgZ29pbmcgdG8gdHlwZS4KKworT25lIHNpZGUgZWZmZWN0IG9mIGF1dG9tYXRpYyBpbmRlbnRhdGlvbiBpcyB0aGF0IGl0IGhlbHBzIHlvdSBjYXRjaCBlcnJvcnMgaW4KK3lvdXIgY29kZSBlYXJseS4gIFdoZW4geW91IHR5cGUgYSB9IHRvIGZpbmlzaCBhIGZ1bmN0aW9uLCBvbmx5IHRvIGZpbmQgdGhhdAordGhlIGF1dG9tYXRpYyBpbmRlbnRhdGlvbiBnaXZlcyBpdCBtb3JlIGluZGVudCB0aGFuIHdoYXQgeW91IGV4cGVjdGVkLCB0aGVyZQoraXMgcHJvYmFibHkgYSB9IG1pc3NpbmcuICBVc2UgdGhlICIlIiBjb21tYW5kIHRvIGZpbmQgb3V0IHdoaWNoIHsgbWF0Y2hlcyB0aGUKK30geW91IHR5cGVkLgorICAgQSBtaXNzaW5nICkgYW5kIDsgYWxzbyBjYXVzZSBleHRyYSBpbmRlbnQuICBUaHVzIGlmIHlvdSBnZXQgbW9yZSB3aGl0ZQorc3BhY2UgdGhhbiB5b3Ugd291bGQgZXhwZWN0LCBjaGVjayB0aGUgcHJlY2VkaW5nIGxpbmVzLgorCitXaGVuIHlvdSBoYXZlIGNvZGUgdGhhdCBpcyBiYWRseSBmb3JtYXR0ZWQsIG9yIHlvdSBpbnNlcnRlZCBhbmQgZGVsZXRlZCBsaW5lcywKK3lvdSBuZWVkIHRvIHJlLWluZGVudCB0aGUgbGluZXMuICBUaGUgIj0iIG9wZXJhdG9yIGRvZXMgdGhpcy4gIFRoZSBzaW1wbGVzdAorZm9ybSBpczogPgorCisJPT0KKworVGhpcyBpbmRlbnRzIHRoZSBjdXJyZW50IGxpbmUuICBMaWtlIHdpdGggYWxsIG9wZXJhdG9ycywgdGhlcmUgYXJlIHRocmVlIHdheXMKK3RvIHVzZSBpdC4gIEluIFZpc3VhbCBtb2RlICI9IiBpbmRlbnRzIHRoZSBzZWxlY3RlZCBsaW5lcy4gIEEgdXNlZnVsIHRleHQKK29iamVjdCBpcyAiYXsiLiAgVGhpcyBzZWxlY3RzIHRoZSBjdXJyZW50IHt9IGJsb2NrLiAgVGh1cywgdG8gcmUtaW5kZW50IHRoZQorY29kZSBjb2RlIGJsb2NrIHRoZSBjdXJzb3IgaXMgaW46ID4KKworCT1heworCitJIHlvdSBoYXZlIHJlYWxseSBiYWRseSBpbmRlbnRlZCBjb2RlLCB5b3UgY2FuIHJlLWluZGVudCB0aGUgd2hvbGUgZmlsZSB3aXRoOgorPgorCWdnPUcKKworSG93ZXZlciwgZG9uJ3QgZG8gdGhpcyBpbiBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjYXJlZnVsbHkgaW5kZW50ZWQgbWFudWFsbHkuCitUaGUgYXV0b21hdGljIGluZGVudGluZyBkb2VzIGEgZ29vZCBqb2IsIGJ1dCBpbiBzb21lIHNpdHVhdGlvbnMgeW91IG1pZ2h0IHdhbnQKK3RvIG92ZXJydWxlIGl0LgorCisKK1NFVFRJTkcgSU5ERU5UIFNUWUxFCisKK0RpZmZlcmVudCBwZW9wbGUgaGF2ZSBkaWZmZXJlbnQgc3R5bGVzIG9mIGluZGVudGF0aW9uLiAgQnkgZGVmYXVsdCBWaW0gZG9lcyBhCitwcmV0dHkgZ29vZCBqb2Igb2YgaW5kZW50aW5nIGluIGEgd2F5IHRoYXQgOTAlIG9mIHByb2dyYW1tZXJzIGRvLiAgVGhlcmUgYXJlCitkaWZmZXJlbnQgc3R5bGVzLCBob3dldmVyOyBzbyBpZiB5b3Ugd2FudCB0bywgeW91IGNhbiBjdXN0b21pemUgdGhlCitpbmRlbnRhdGlvbiBzdHlsZSB3aXRoIHRoZSAnY2lub3B0aW9ucycgb3B0aW9uLgorICAgQnkgZGVmYXVsdCAnY2lub3B0aW9ucycgaXMgZW1wdHkgYW5kIFZpbSB1c2VzIHRoZSBkZWZhdWx0IHN0eWxlLiAgWW91IGNhbgorYWRkIHZhcmlvdXMgaXRlbXMgd2hlcmUgeW91IHdhbnQgc29tZXRoaW5nIGRpZmZlcmVudC4gIEZvciBleGFtcGxlLCB0byBtYWtlCitjdXJseSBicmFjZXMgYmUgcGxhY2VkIGxpa2UgdGhpczoKKworCWlmIChmbGFnKSB+CisJICB7IH4KKwkgICAgaSA9IDg7IH4KKwkgICAgaiA9IDA7IH4KKwkgIH0gfgorCitVc2UgdGhpcyBjb21tYW5kOiA+CisKKwk6c2V0IGNpbm9wdGlvbnMrPXsyCisKK1RoZXJlIGFyZSBtYW55IG9mIHRoZXNlIGl0ZW1zLiAgU2VlIHxjaW5vcHRpb25zLXZhbHVlc3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMwLjMqCUF1dG9tYXRpYyBpbmRlbnRpbmcKKworWW91IGRvbid0IHdhbnQgdG8gc3dpdGNoIG9uIHRoZSAnY2luZGVudCcgb3B0aW9uIG1hbnVhbGx5IGV2ZXJ5IHRpbWUgeW91IGVkaXQKK2EgQyBmaWxlLiAgVGhpcyBpcyBob3cgeW91IG1ha2UgaXQgd29yayBhdXRvbWF0aWNhbGx5OiA+CisKKwk6ZmlsZXR5cGUgaW5kZW50IG9uCisKK0FjdHVhbGx5LCB0aGlzIGRvZXMgYSBsb3QgbW9yZSB0aGFuIHN3aXRjaGluZyBvbiAnY2luZGVudCcgZm9yIEMgZmlsZXMuICBGaXJzdAorb2YgYWxsLCBpdCBlbmFibGVzIGRldGVjdGluZyB0aGUgdHlwZSBvZiBhIGZpbGUuICBUaGF0J3MgdGhlIHNhbWUgYXMgd2hhdCBpcwordXNlZCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZy4KKyAgIFdoZW4gdGhlIGZpbGV0eXBlIGlzIGtub3duLCBWaW0gd2lsbCBzZWFyY2ggZm9yIGFuIGluZGVudCBmaWxlIGZvciB0aGlzCit0eXBlIG9mIGZpbGUuICBUaGUgVmltIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIG51bWJlciBvZiB0aGVzZSBmb3IgdmFyaW91cworcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiAgVGhpcyBpbmRlbnQgZmlsZSB3aWxsIHRoZW4gcHJlcGFyZSBmb3IgYXV0b21hdGljCitpbmRlbnRpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGZpbGUuCisKK0lmIHlvdSBkb24ndCBsaWtlIHRoZSBhdXRvbWF0aWMgaW5kZW50aW5nLCB5b3UgY2FuIHN3aXRjaCBpdCBvZmYgYWdhaW46ID4KKworCTpmaWxldHlwZSBpbmRlbnQgb2ZmCisKK0lmIHlvdSBkb24ndCBsaWtlIHRoZSBpbmRlbnRpbmcgZm9yIG9uZSBzcGVjaWZpYyB0eXBlIG9mIGZpbGUsIHRoaXMgaXMgaG93IHlvdQorYXZvaWQgaXQuICBDcmVhdGUgYSBmaWxlIHdpdGgganVzdCB0aGlzIG9uZSBsaW5lOiA+CisKKwk6bGV0IGI6ZGlkX2luZGVudCA9IDEKKworTm93IHlvdSBuZWVkIHRvIHdyaXRlIHRoaXMgaW4gYSBmaWxlIHdpdGggYSBzcGVjaWZpYyBuYW1lOgorCisJe2RpcmVjdG9yeX0vaW5kZW50L3tmaWxldHlwZX0udmltCisKK1RoZSB7ZmlsZXR5cGV9IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHR5cGUsIHN1Y2ggYXMgImNwcCIgb3IgImphdmEiLiAgWW91IGNhbgorc2VlIHRoZSBleGFjdCBuYW1lIHRoYXQgVmltIGRldGVjdGVkIHdpdGggdGhpcyBjb21tYW5kOiA+CisKKwk6c2V0IGZpbGV0eXBlCisKK0luIHRoaXMgZmlsZSB0aGUgb3V0cHV0IGlzOgorCisJZmlsZXR5cGU9aGVscCB+CisKK1RoaXMgeW91IHdvdWxkIHVzZSAiaGVscCIgZm9yIHtmaWxldHlwZX0uCisgICBGb3IgdGhlIHtkaXJlY3Rvcnl9IHBhcnQgeW91IG5lZWQgdG8gdXNlIHlvdXIgcnVudGltZSBkaXJlY3RvcnkuICBMb29rIGF0Cit0aGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZDogPgorCisJc2V0IHJ1bnRpbWVwYXRoCisKK05vdyB1c2UgdGhlIGZpcnN0IGl0ZW0sIHRoZSBuYW1lIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEuICBUaHVzIGlmIHRoZSBvdXRwdXQKK2xvb2tzIGxpa2UgdGhpczoKKworCXJ1bnRpbWVwYXRoPX4vLnZpbSwvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02MC9ydW50aW1lLH4vLnZpbS9hZnRlciB+CisKK1lvdSB1c2UgIn4vLnZpbSIgZm9yIHtkaXJlY3Rvcnl9LiAgVGhlbiB0aGUgcmVzdWx0aW5nIGZpbGUgbmFtZSBpczoKKworCX4vLnZpbS9pbmRlbnQvaGVscC52aW0gfgorCitJbnN0ZWFkIG9mIHN3aXRjaGluZyB0aGUgaW5kZW50aW5nIG9mZiwgeW91IGNvdWxkIHdyaXRlIHlvdXIgb3duIGluZGVudCBmaWxlLgorSG93IHRvIGRvIHRoYXQgaXMgZXhwbGFpbmVkIGhlcmU6IHxpbmRlbnQtZXhwcmVzc2lvbnwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMwLjQqCU90aGVyIGluZGVudGluZworCitUaGUgbW9zdCBzaW1wbGUgZm9ybSBvZiBhdXRvbWF0aWMgaW5kZW50aW5nIGlzIHdpdGggdGhlICdhdXRvaW5kZW50JyBvcHRpb24uCitJdCB1c2VzIHRoZSBpbmRlbnQgZnJvbSB0aGUgcHJldmlvdXMgbGluZS4gIEEgYml0IHNtYXJ0ZXIgaXMgdGhlICdzbWFydGluZGVudCcKK29wdGlvbi4gIFRoaXMgaXMgdXNlZnVsIGZvciBsYW5ndWFnZXMgd2hlcmUgbm8gaW5kZW50IGZpbGUgaXMgYXZhaWxhYmxlLgorJ3NtYXJ0aW5kZW50J2lzIG5vdCBhcyBzbWFydCBhcyAnY2luZGVudCcsIGJ1dCBzbWFydGVyIHRoYW4gJ2F1dG9pbmRlbnQnLgorICAgV2l0aCAnc21hcnRpbmRlbnQnIHNldCwgYW4gZXh0cmEgbGV2ZWwgb2YgaW5kZW50YXRpb24gaXMgYWRkZWQgZm9yIGVhY2ggeworYW5kIHJlbW92ZWQgZm9yIGVhY2ggfS4gIEFuIGV4dHJhIGxldmVsIG9mIGluZGVudGF0aW9uIHdpbGwgYWxzbyBiZSBhZGRlZCBmb3IKK2FueSBvZiB0aGUgd29yZHMgaW4gdGhlICdjaW53b3Jkcycgb3B0aW9uLiAgTGluZXMgdGhhdCBiZWdpbiB3aXRoICMgYXJlCit0cmVhdGVkIHNwZWNpYWxseTogYWxsIGluZGVudGF0aW9uIGlzIHJlbW92ZWQuICBUaGlzIGlzIGRvbmUgc28gdGhhdAorcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2lsbCBhbGwgc3RhcnQgaW4gY29sdW1uIDEuICBUaGUgaW5kZW50YXRpb24gaXMKK3Jlc3RvcmVkIGZvciB0aGUgbmV4dCBsaW5lLgorCisKK0NPUlJFQ1RJTkcgSU5ERU5UUworCitXaGVuIHlvdSBhcmUgdXNpbmcgJ2F1dG9pbmRlbnQnIG9yICdzbWFydGluZGVudCcgdG8gZ2V0IHRoZSBpbmRlbnQgb2YgdGhlCitwcmV2aW91cyBsaW5lLCB0aGVyZSB3aWxsIGJlIG1hbnkgdGltZXMgd2hlbiB5b3UgbmVlZCB0byBhZGQgb3IgcmVtb3ZlIG9uZQorJ3NoaWZ0d2lkdGgnIHdvcnRoIG9mIGluZGVudC4gIEEgcXVpY2sgd2F5IHRvIGRvIHRoaXMgaXMgdXNpbmcgdGhlIENUUkwtRCBhbmQKK0NUUkwtVCBjb21tYW5kcyBpbiBJbnNlcnQgbW9kZS4KKyAgIEZvciBleGFtcGxlLCB5b3UgYXJlIHR5cGluZyBhIHNoZWxsIHNjcmlwdCB0aGF0IGlzIHN1cHBvc2VkIHRvIGxvb2sgbGlrZQordGhpczoKKworCWlmIHRlc3QgLW4gYTsgdGhlbiB+CisJICAgZWNobyBhIH4KKwkgICBlY2hvICItLS0tLS0tIiB+CisJZmkgfgorCitTdGFydCBvZmYgYnkgc2V0dGluZyB0aGVzZSBvcHRpb246ID4KKworCTpzZXQgYXV0b2luZGVudCBzaGlmdHdpZHRoPTMKKworWW91IHN0YXJ0IGJ5IHR5cGluZyB0aGUgZmlyc3QgbGluZSwgPEVudGVyPiBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBzZWNvbmQgbGluZToKKworCWlmIHRlc3QgLW4gYTsgdGhlbiB+CisJZWNobyB+CisKK05vdyB5b3Ugc2VlIHRoYXQgeW91IG5lZWQgYW4gZXh0cmEgaW5kZW50LiAgVHlwZSBDVFJMLVQuICBUaGUgcmVzdWx0OgorCisJaWYgdGVzdCAtbiBhOyB0aGVuIH4KKwkgICBlY2hvIH4KKworVGhlIENUUkwtVCBjb21tYW5kLCBpbiBJbnNlcnQgbW9kZSwgYWRkcyBvbmUgJ3NoaWZ0d2lkdGgnIHRvIHRoZSBpbmRlbnQsIG5vCittYXR0ZXIgd2hlcmUgaW4gdGhlIGxpbmUgeW91IGFyZS4KKyAgIFlvdSBjb250aW51ZSB0eXBpbmcgdGhlIHNlY29uZCBsaW5lLCA8RW50ZXI+IGFuZCB0aGUgdGhpcmQgbGluZS4gIFRoaXMgdGltZQordGhlIGluZGVudCBpcyBPSy4gIFRoZW4gPEVudGVyPiBhbmQgdGhlIGxhc3QgbGluZS4gIE5vdyB5b3UgaGF2ZSB0aGlzOgorCisJaWYgdGVzdCAtbiBhOyB0aGVuIH4KKwkgICBlY2hvIGEgfgorCSAgIGVjaG8gIi0tLS0tLS0iIH4KKwkgICBmaSB+CisKK1RvIHJlbW92ZSB0aGUgc3VwZXJmbHVvdXMgaW5kZW50IGluIHRoZSBsYXN0IGxpbmUgcHJlc3MgQ1RSTC1ELiAgVGhpcyBkZWxldGVzCitvbmUgJ3NoaWZ0d2lkdGgnIHdvcnRoIG9mIGluZGVudCwgbm8gbWF0dGVyIHdoZXJlIHlvdSBhcmUgaW4gdGhlIGxpbmUuCisgICBXaGVuIHlvdSBhcmUgaW4gTm9ybWFsIG1vZGUsIHlvdSBjYW4gdXNlIHRoZSAiPj4iIGFuZCAiPDwiIGNvbW1hbmRzIHRvCitzaGlmdCBsaW5lcy4gICI+IiBhbmQgIjwiIGFyZSBvcGVyYXRvcnMsIHRodXMgeW91IGhhdmUgdGhlIHVzdWFsIHRocmVlIHdheXMgdG8KK3NwZWNpZnkgdGhlIGxpbmVzIHlvdSB3YW50IHRvIGluZGVudC4gIEEgdXNlZnVsIGNvbWJpbmF0aW9uIGlzOiA+CisKKwk+aXsKKworVGhpcyBhZGRzIG9uZSBpbmRlbnQgdG8gdGhlIGN1cnJlbnQgYmxvY2sgb2YgbGluZXMsIGluc2lkZSB7fS4gIFRoZSB7IGFuZCB9CitsaW5lcyB0aGVtc2VsdmVzIGFyZSBsZWZ0IHVubW9kaWZpZWQuICAiPmF7IiBpbmNsdWRlcyB0aGVtLiAgSW4gdGhpcyBleGFtcGxlCit0aGUgY3Vyc29yIGlzIG9uICJwcmludGYiOgorCisJb3JpZ2luYWwgdGV4dAkJYWZ0ZXIgIj5peyIJCWFmdGVyICI+YXsiCisKKwlpZiAoZmxhZykJCWlmIChmbGFnKQkJaWYgKGZsYWcpIH4KKwl7CQkJewkJCSAgICB7IH4KKwlwcmludGYoInllcyIpOwkJICAgIHByaW50ZigieWVzIik7CSAgICBwcmludGYoInllcyIpOyB+CisJZmxhZyA9IDA7CQkgICAgZmxhZyA9IDA7CQkgICAgZmxhZyA9IDA7ICB+CisJfQkJCX0JCQkgICAgfSB+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMwLjUqCVRhYnMgYW5kIHNwYWNlcworCisndGFic3RvcCcgaXMgc2V0IHRvIGVpZ2h0IGJ5IGRlZmF1bHQuICBBbHRob3VnaCB5b3UgY2FuIGNoYW5nZSBpdCwgeW91IHF1aWNrbHkKK3J1biBpbnRvIHRyb3VibGUgbGF0ZXIuICBPdGhlciBwcm9ncmFtcyB3b24ndCBrbm93IHdoYXQgdGFic3RvcCB2YWx1ZSB5b3UKK3VzZWQuICBUaGV5IHByb2JhYmx5IHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBlaWdodCwgYW5kIHlvdXIgdGV4dCBzdWRkZW5seQorbG9va3MgdmVyeSBkaWZmZXJlbnQuICBBbHNvLCBtb3N0IHByaW50ZXJzIHVzZSBhIGZpeGVkIHRhYnN0b3AgdmFsdWUgb2YgZWlnaHQuCitUaHVzIGl0J3MgYmVzdCB0byBrZWVwICd0YWJzdG9wJyBhbG9uZS4gIChJZiB5b3UgZWRpdCBhIGZpbGUgd2hpY2ggd2FzIHdyaXR0ZW4KK3dpdGggYSBkaWZmZXJlbnQgdGFic3RvcCBzZXR0aW5nLCBzZWUgfDI1LjN8IGZvciBob3cgdG8gZml4IHRoYXQuKQorICAgRm9yIGluZGVudGluZyBsaW5lcyBpbiBhIHByb2dyYW0sIHVzaW5nIGEgbXVsdGlwbGUgb2YgZWlnaHQgc3BhY2VzIG1ha2VzCit5b3UgcXVpY2tseSBydW4gaW50byB0aGUgcmlnaHQgYm9yZGVyIG9mIHRoZSB3aW5kb3cuICBVc2luZyBhIHNpbmdsZSBzcGFjZQorZG9lc24ndCBwcm92aWRlIGVub3VnaCB2aXN1YWwgZGlmZmVyZW5jZS4gIE1hbnkgcGVvcGxlIHByZWZlciB0byB1c2UgZm91cgorc3BhY2VzLCBhIGdvb2QgY29tcHJvbWlzZS4KKyAgIFNpbmNlIGEgPFRhYj4gaXMgZWlnaHQgc3BhY2VzIGFuZCB5b3Ugd2FudCB0byB1c2UgYW4gaW5kZW50IG9mIGZvdXIgc3BhY2VzLAoreW91IGNhbid0IHVzZSBhIDxUYWI+IGNoYXJhY3RlciB0byBtYWtlIHlvdXIgaW5kZW50LiAgVGhlcmUgYXJlIHR3byB3YXlzIHRvCitoYW5kbGUgdGhpczoKKworMS4gIFVzZSBhIG1peCBvZiA8VGFiPiBhbmQgc3BhY2UgY2hhcmFjdGVycy4gIFNpbmNlIGEgPFRhYj4gdGFrZXMgdGhlIHBsYWNlIG9mCisgICAgZWlnaHQgc3BhY2VzLCB5b3UgaGF2ZSBmZXdlciBjaGFyYWN0ZXJzIGluIHlvdXIgZmlsZS4gIEluc2VydGluZyBhIDxUYWI+CisgICAgaXMgcXVpY2tlciB0aGFuIGVpZ2h0IHNwYWNlcy4gIEJhY2tzcGFjaW5nIHdvcmtzIGZhc3RlciBhcyB3ZWxsLgorCisyLiAgVXNlIHNwYWNlcyBvbmx5LiAgVGhpcyBhdm9pZHMgdGhlIHRyb3VibGUgd2l0aCBwcm9ncmFtcyB0aGF0IHVzZSBhCisgICAgZGlmZmVyZW50IHRhYnN0b3AgdmFsdWUuCisKK0ZvcnR1bmF0ZWx5LCBWaW0gc3VwcG9ydHMgYm90aCBtZXRob2RzIHF1aXRlIHdlbGwuCisKKworU1BBQ0VTIEFORCBUQUJTCisKK0lmIHlvdSBhcmUgdXNpbmcgYSBjb21iaW5hdGlvbiBvZiB0YWJzIGFuZCBzcGFjZXMsIHlvdSBqdXN0IGVkaXQgbm9ybWFsbHkuCitUaGUgVmltIGRlZmF1bHRzIGRvIGEgZmluZSBqb2Igb2YgaGFuZGxpbmcgdGhpbmdzLgorICAgWW91IGNhbiBtYWtlIGxpZmUgYSBsaXR0bGUgZWFzaWVyIGJ5IHNldHRpbmcgdGhlICdzb2Z0dGFic3RvcCcgb3B0aW9uLgorVGhpcyBvcHRpb24gdGVsbHMgVmltIHRvIG1ha2UgdGhlIDxUYWI+IGtleSBsb29rIGFuZCBmZWVsIGFzIGlmIHRhYnMgd2VyZSBzZXQKK2F0IHRoZSB2YWx1ZSBvZiAnc29mdHRhYnN0b3AnLCBidXQgYWN0dWFsbHkgdXNlIGEgY29tYmluYXRpb24gb2YgdGFicyBhbmQKK3NwYWNlcy4KKyAgIEFmdGVyIHlvdSBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCwgZXZlcnkgdGltZSB5b3UgcHJlc3MgdGhlIDxUYWI+IGtleQordGhlIGN1cnNvciBtb3ZlcyB0byB0aGUgbmV4dCA0LWNvbHVtbiBib3VuZGFyeTogPgorCisJOnNldCBzb2Z0dGFic3RvcD00CisKK1doZW4geW91IHN0YXJ0IGluIHRoZSBmaXJzdCBjb2x1bW4gYW5kIHByZXNzIDxUYWI+LCB5b3UgZ2V0IDQgc3BhY2VzIGluc2VydGVkCitpbiB5b3VyIHRleHQuICBUaGUgc2Vjb25kIHRpbWUsIFZpbSB0YWtlcyBvdXQgdGhlIDQgc3BhY2VzIGFuZCBwdXRzIGluIGEgPFRhYj4KKyh0aHVzIHRha2luZyB5b3UgdG8gY29sdW1uIDgpLiAgVGh1cyBWaW0gdXNlcyBhcyBtYW55IDxUYWI+cyBhcyBwb3NzaWJsZSwgYW5kCit0aGVuIGZpbGxzIHVwIHdpdGggc3BhY2VzLgorICAgV2hlbiBiYWNrc3BhY2luZyBpdCB3b3JrcyB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gIEEgPEJTPiB3aWxsIGFsd2F5cyBkZWxldGUKK3RoZSBhbW91bnQgc3BlY2lmaWVkIHdpdGggJ3NvZnR0YWJzdG9wJy4gIFRoZW4gPFRhYnM+IGFyZSB1c2VkIGFzIG1hbnkgYXMKK3Bvc3NpYmxlIGFuZCBzcGFjZXMgdG8gZmlsbCB0aGUgZ2FwLgorICAgVGhlIGZvbGxvd2luZyBzaG93cyB3aGF0IGhhcHBlbnMgcHJlc3NpbmcgPFRhYj4gYSBmZXcgdGltZXMsIGFuZCB0aGVuIHVzaW5nCis8QlM+LiAgQSAiLiIgc3RhbmRzIGZvciBhIHNwYWNlIGFuZCAiLS0tLS0tLT4iIGZvciBhIDxUYWI+LgorCisJdHlwZQkJCSAgcmVzdWx0IH4KKwk8VGFiPgkJCSAgLi4uLgorCTxUYWI+PFRhYj4JCSAgLS0tLS0tLT4KKwk8VGFiPjxUYWI+PFRhYj4JCSAgLS0tLS0tLT4uLi4uCisJPFRhYj48VGFiPjxUYWI+PEJTPgkgIC0tLS0tLS0+CisJPFRhYj48VGFiPjxUYWI+PEJTPjxCUz4gICAuLi4uCisKK0FuIGFsdGVybmF0aXZlIGlzIHRvIHVzZSB0aGUgJ3NtYXJ0dGFiJyBvcHRpb24uICBXaGVuIGl0J3Mgc2V0LCBWaW0gdXNlcworJ3NoaWZ0d2lkdGgnIGZvciBhIDxUYWI+IHR5cGVkIGluIHRoZSBpbmRlbnQgb2YgYSBsaW5lLCBhbmQgYSByZWFsIDxUYWI+IHdoZW4KK3R5cGVkIGFmdGVyIHRoZSBmaXJzdCBub24tYmxhbmsgY2hhcmFjdGVyLiAgSG93ZXZlciwgPEJTPiBkb2Vzbid0IHdvcmsgbGlrZQord2l0aCAnc29mdHRhYnN0b3AnLgorCisKK0pVU1QgU1BBQ0VTCisKK0lmIHlvdSB3YW50IGFic29sdXRlbHkgbm8gdGFicyBpbiB5b3VyIGZpbGUsIHlvdSBjYW4gc2V0IHRoZSAnZXhwYW5kdGFiJworb3B0aW9uOiA+CisKKwk6c2V0IGV4cGFuZHRhYgorCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIDxUYWI+IGtleSBpbnNlcnRzIGEgc2VyaWVzIG9mIHNwYWNlcy4gIFRodXMgeW91CitnZXQgdGhlIHNhbWUgYW1vdW50IG9mIHdoaXRlIHNwYWNlIGFzIGlmIGEgPFRhYj4gY2hhcmFjdGVyIHdhcyBpbnNlcnRlZCwgYnV0Cit0aGVyZSBpc24ndCBhIHJlYWwgPFRhYj4gY2hhcmFjdGVyIGluIHlvdXIgZmlsZS4KKyAgIFRoZSBiYWNrc3BhY2Uga2V5IHdpbGwgZGVsZXRlIGVhY2ggc3BhY2UgYnkgaXRzZWxmLiAgVGh1cyBhZnRlciB0eXBpbmcgb25lCis8VGFiPiB5b3UgaGF2ZSB0byBwcmVzcyB0aGUgPEJTPiBrZXkgdXAgdG8gZWlnaHQgdGltZXMgdG8gdW5kbyBpdC4gIElmIHlvdSBhcmUKK2luIHRoZSBpbmRlbnQsIHByZXNzaW5nIENUUkwtRCB3aWxsIGJlIGEgbG90IHF1aWNrZXIuCisKKworQ0hBTkdJTkcgVEFCUyBJTiBTUEFDRVMgKEFORCBCQUNLKQorCitTZXR0aW5nICdleHBhbmR0YWInIGRvZXMgbm90IGFmZmVjdCBhbnkgZXhpc3RpbmcgdGFicy4gIEluIG90aGVyIHdvcmRzLCBhbnkKK3RhYnMgaW4gdGhlIGRvY3VtZW50IHJlbWFpbiB0YWJzLiAgSWYgeW91IHdhbnQgdG8gY29udmVydCB0YWJzIHRvIHNwYWNlcywgdXNlCit0aGUgIjpyZXRhYiIgY29tbWFuZC4gIFVzZSB0aGVzZSBjb21tYW5kczogPgorCisJOnNldCBleHBhbmR0YWIKKwk6JXJldGFiCisKK05vdyBWaW0gd2lsbCBoYXZlIGNoYW5nZWQgYWxsIGluZGVudHMgdG8gdXNlIHNwYWNlcyBpbnN0ZWFkIG9mIHRhYnMuICBIb3dldmVyLAorYWxsIHRhYnMgdGhhdCBjb21lIGFmdGVyIGEgbm9uLWJsYW5rIGNoYXJhY3RlciBhcmUga2VwdC4gIElmIHlvdSB3YW50IHRoZXNlIHRvCitiZSBjb252ZXJ0ZWQgYXMgd2VsbCwgYWRkIGEgITogPgorCisJOiVyZXRhYiEKKworVGhpcyBpcyBhIGxpdHRsZSBiaXQgZGFuZ2Vyb3VzLCBiZWNhdXNlIGl0IGNhbiBhbHNvIGNoYW5nZSB0YWJzIGluc2lkZSBhCitzdHJpbmcuICBUbyBjaGVjayBpZiB0aGVzZSBleGlzdCwgeW91IGNvdWxkIHVzZSB0aGlzOiA+CisKKwkvIlteIlx0XSpcdFteIl0qIgorCitJdCdzIHJlY29tbWVuZGVkIG5vdCB0byB1c2UgaGFyZCB0YWJzIGluc2lkZSBhIHN0cmluZy4gIFJlcGxhY2UgdGhlbSB3aXRoCisiXHQiIHRvIGF2b2lkIHRyb3VibGUuCisKK1RoZSBvdGhlciB3YXkgYXJvdW5kIHdvcmtzIGp1c3QgYXMgd2VsbDogPgorCisJOnNldCBub2V4cGFuZHRhYgorCTolcmV0YWIhCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMwLjYqCUZvcm1hdHRpbmcgY29tbWVudHMKKworT25lIG9mIHRoZSBncmVhdCB0aGluZ3MgYWJvdXQgVmltIGlzIHRoYXQgaXQgdW5kZXJzdGFuZHMgY29tbWVudHMuICBZb3UgY2FuCithc2sgVmltIHRvIGZvcm1hdCBhIGNvbW1lbnQgYW5kIGl0IHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLgorICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBjb21tZW50OgorCisJLyogfgorCSAqIFRoaXMgaXMgYSB0ZXN0IH4KKwkgKiBvZiB0aGUgdGV4dCBmb3JtYXR0aW5nLiB+CisJICovIH4KKworWW91IHRoZW4gYXNrIFZpbSB0byBmb3JtYXQgaXQgYnkgcG9zaXRpb25pbmcgdGhlIGN1cnNvciBhdCB0aGUgc3RhcnQgb2YgdGhlCitjb21tZW50IGFuZCB0eXBlOiA+CisKKwlncV0vCisKKyJncSIgaXMgdGhlIG9wZXJhdG9yIHRvIGZvcm1hdCB0ZXh0LiAgIl0vIiBpcyB0aGUgbW90aW9uIHRoYXQgdGFrZXMgeW91IHRvIHRoZQorZW5kIG9mIGEgY29tbWVudC4gIFRoZSByZXN1bHQgaXM6CisKKwkvKiB+CisJICogVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIHRleHQgZm9ybWF0dGluZy4gfgorCSAqLyB+CisKK05vdGljZSB0aGF0IFZpbSBwcm9wZXJseSBoYW5kbGVkIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLgorICBBbiBhbHRlcm5hdGl2ZSBpcyB0byBzZWxlY3QgdGhlIHRleHQgdGhhdCBpcyB0byBiZSBmb3JtYXR0ZWQgaW4gVmlzdWFsIG1vZGUKK2FuZCB0eXBlICJncSIuCisKK1RvIGFkZCBhIG5ldyBsaW5lIHRvIHRoZSBjb21tZW50LCBwb3NpdGlvbiB0aGUgY3Vyc29yIG9uIHRoZSBtaWRkbGUgbGluZSBhbmQKK3ByZXNzICJvIi4gIFRoZSByZXN1bHQgbG9va3MgbGlrZSB0aGlzOgorCisJLyogfgorCSAqIFRoaXMgaXMgYSB0ZXN0IG9mIHRoZSB0ZXh0IGZvcm1hdHRpbmcuIH4KKwkgKiB+CisJICovIH4KKworVmltIGhhcyBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGEgc3RhciBhbmQgYSBzcGFjZSBmb3IgeW91LiAgTm93IHlvdSBjYW4gdHlwZQordGhlIGNvbW1lbnQgdGV4dC4gIFdoZW4gaXQgZ2V0cyBsb25nZXIgdGhhbiAndGV4dHdpZHRoJywgVmltIHdpbGwgYnJlYWsgdGhlCitsaW5lLiAgQWdhaW4sIHRoZSBzdGFyIGlzIGluc2VydGVkIGF1dG9tYXRpY2FsbHk6CisKKwkvKiB+CisJICogVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIHRleHQgZm9ybWF0dGluZy4gfgorCSAqIFR5cGluZyBhIGxvdCBvZiB0ZXh0IGhlcmUgd2lsbCBtYWtlIFZpbSB+CisJICogYnJlYWsgfgorCSAqLyB+CisKK0ZvciB0aGlzIHRvIHdvcmsgc29tZSBmbGFncyBtdXN0IGJlIHByZXNlbnQgaW4gJ2Zvcm1hdG9wdGlvbnMnOgorCisJcglpbnNlcnQgdGhlIHN0YXIgd2hlbiB0eXBpbmcgPEVudGVyPiBpbiBJbnNlcnQgbW9kZQorCW8JaW5zZXJ0IHRoZSBzdGFyIHdoZW4gdXNpbmcgIm8iIG9yICJPIiBpbiBOb3JtYWwgbW9kZQorCWMJYnJlYWsgY29tbWVudCB0ZXh0IGFjY29yZGluZyB0byAndGV4dHdpZHRoJworCitTZWUgfGZvLXRhYmxlfCBmb3IgbW9yZSBmbGFncy4KKworCitERUZJTklORyBBIENPTU1FTlQKKworVGhlICdjb21tZW50cycgb3B0aW9uIGRlZmluZXMgd2hhdCBhIGNvbW1lbnQgbG9va3MgbGlrZS4gIFZpbSBkaXN0aW5ndWlzaGVzCitiZXR3ZWVuIGEgc2luZ2xlLWxpbmUgY29tbWVudCBhbmQgYSBjb21tZW50IHRoYXQgaGFzIGEgZGlmZmVyZW50IHN0YXJ0LCBlbmQKK2FuZCBtaWRkbGUgcGFydC4KKyAgIE1hbnkgc2luZ2xlLWxpbmUgY29tbWVudHMgc3RhcnQgd2l0aCBhIHNwZWNpZmljIGNoYXJhY3Rlci4gIEluIEMrKyAvLyBpcwordXNlZCwgaW4gTWFrZWZpbGVzICMsIGluIFZpbSBzY3JpcHRzICIuICBGb3IgZXhhbXBsZSwgdG8gbWFrZSBWaW0gdW5kZXJzdGFuZAorQysrIGNvbW1lbnRzOiA+CisKKwk6c2V0IGNvbW1lbnRzPTovLworCitUaGUgY29sb24gc2VwYXJhdGVzIHRoZSBmbGFncyBvZiBhbiBpdGVtIGZyb20gdGhlIHRleHQgYnkgd2hpY2ggdGhlIGNvbW1lbnQgaXMKK3JlY29nbml6ZWQuICBUaGUgZ2VuZXJhbCBmb3JtIG9mIGFuIGl0ZW0gaW4gJ2NvbW1lbnRzJyBpczoKKworCXtmbGFnc306e3RleHR9CisKK1RoZSB7ZmxhZ3N9IHBhcnQgY2FuIGJlIGVtcHR5LCBhcyBpbiB0aGlzIGNhc2UuCisgICBTZXZlcmFsIG9mIHRoZXNlIGl0ZW1zIGNhbiBiZSBjb25jYXRlbmF0ZWQsIHNlcGFyYXRlZCBieSBjb21tYXMuICBUaGlzCithbGxvd3MgcmVjb2duaXppbmcgZGlmZmVyZW50IHR5cGVzIG9mIGNvbW1lbnRzIGF0IHRoZSBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZSwKK2xldCdzIGVkaXQgYW4gZS1tYWlsIG1lc3NhZ2UuICBXaGVuIHJlcGx5aW5nLCB0aGUgdGV4dCB0aGF0IG90aGVycyB3cm90ZSBpcworcHJlY2VkZWQgd2l0aCAiPiIgYW5kICIhIiBjaGFyYWN0ZXJzLiAgVGhpcyBjb21tYW5kIHdvdWxkIHdvcms6ID4KKworCTpzZXQgY29tbWVudHM9bjo+LG46IQorCitUaGVyZSBhcmUgdHdvIGl0ZW1zLCBvbmUgZm9yIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggIj4iIGFuZCBvbmUgZm9yIGNvbW1lbnRzCit0aGF0IHN0YXJ0IHdpdGggIiEiLiAgQm90aCB1c2UgdGhlIGZsYWcgIm4iLiAgVGhpcyBtZWFucyB0aGF0IHRoZXNlIGNvbW1lbnRzCituZXN0LiAgVGh1cyBhIGxpbmUgc3RhcnRpbmcgd2l0aCAiPiIgbWF5IGhhdmUgYW5vdGhlciBjb21tZW50IGFmdGVyIHRoZSAiPiIuCitUaGlzIGFsbG93cyBmb3JtYXR0aW5nIGEgbWVzc2FnZSBsaWtlIHRoaXM6CisKKwk+ICEgRGlkIHlvdSBzZWUgdGhhdCBzaXRlPyB+CisJPiAhIEl0IGxvb2tzIHJlYWxseSBncmVhdC4gfgorCT4gSSBkb24ndCBsaWtlIGl0LiAgVGhlIH4KKwk+IGNvbG9ycyBhcmUgdGVycmlibGUuIH4KKwlXaGF0IGlzIHRoZSBVUkwgb2YgdGhhdCB+CisJc2l0ZT8gfgorCitUcnkgc2V0dGluZyAndGV4dHdpZHRoJyB0byBhIGRpZmZlcmVudCB2YWx1ZSwgZS5nLiwgODAsIGFuZCBmb3JtYXQgdGhlIHRleHQgYnkKK1Zpc3VhbGx5IHNlbGVjdGluZyBpdCBhbmQgdHlwaW5nICJncSIuICBUaGUgcmVzdWx0IGlzOgorCisJPiAhIERpZCB5b3Ugc2VlIHRoYXQgc2l0ZT8gSXQgbG9va3MgcmVhbGx5IGdyZWF0LiB+CisJPiBJIGRvbid0IGxpa2UgaXQuICBUaGUgY29sb3JzIGFyZSB0ZXJyaWJsZS4gfgorCVdoYXQgaXMgdGhlIFVSTCBvZiB0aGF0IHNpdGU/IH4KKworWW91IHdpbGwgbm90aWNlIHRoYXQgVmltIGRpZCBub3QgbW92ZSB0ZXh0IGZyb20gb25lIHR5cGUgb2YgY29tbWVudCB0bworYW5vdGhlci4gIFRoZSAiSSIgaW4gdGhlIHNlY29uZCBsaW5lIHdvdWxkIGhhdmUgZml0IGF0IHRoZSBlbmQgb2YgdGhlIGZpcnN0CitsaW5lLCBidXQgc2luY2UgdGhhdCBsaW5lIHN0YXJ0cyB3aXRoICI+ICEiIGFuZCB0aGUgc2Vjb25kIGxpbmUgd2l0aCAiPiIsIFZpbQora25vd3MgdGhhdCB0aGlzIGlzIGEgZGlmZmVyZW50IGtpbmQgb2YgY29tbWVudC4KKworCitBIFRIUkVFIFBBUlQgQ09NTUVOVAorCitBIEMgY29tbWVudCBzdGFydHMgd2l0aCAiLyoiLCBoYXMgIioiIGluIHRoZSBtaWRkbGUgYW5kICIqLyIgYXQgdGhlIGVuZC4gIFRoZQorZW50cnkgaW4gJ2NvbW1lbnRzJyBmb3IgdGhpcyBsb29rcyBsaWtlIHRoaXM6ID4KKworCTpzZXQgY29tbWVudHM9czE6LyosbWI6KixleDoqLworCitUaGUgc3RhcnQgaXMgZGVmaW5lZCB3aXRoICJzMTovKiIuICBUaGUgInMiIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYQordGhyZWUtcGllY2UgY29tbWVudC4gIFRoZSBjb2xvbiBzZXBhcmF0ZXMgdGhlIGZsYWdzIGZyb20gdGhlIHRleHQgYnkgd2hpY2ggdGhlCitjb21tZW50IGlzIHJlY29nbml6ZWQ6ICIvKiIuICBUaGVyZSBpcyBvbmUgZmxhZzogIjEiLiAgVGhpcyB0ZWxscyBWaW0gdGhhdCB0aGUKK21pZGRsZSBwYXJ0IGhhcyBhbiBvZmZzZXQgb2Ygb25lIHNwYWNlLgorICAgVGhlIG1pZGRsZSBwYXJ0ICJtYjoqIiBzdGFydHMgd2l0aCAibSIsIHdoaWNoIGluZGljYXRlcyBpdCBpcyBhIG1pZGRsZQorcGFydC4gIFRoZSAiYiIgZmxhZyBtZWFucyB0aGF0IGEgYmxhbmsgbXVzdCBmb2xsb3cgdGhlIHRleHQuICBPdGhlcndpc2UgVmltCit3b3VsZCBjb25zaWRlciB0ZXh0IGxpa2UgIipwb2ludGVyIiBhbHNvIHRvIGJlIHRoZSBtaWRkbGUgb2YgYSBjb21tZW50LgorICAgVGhlIGVuZCBwYXJ0ICJleDoqLyIgaGFzIHRoZSAiZSIgZm9yIGlkZW50aWZpY2F0aW9uLiAgVGhlICJ4IiBmbGFnIGhhcyBhCitzcGVjaWFsIG1lYW5pbmcuICBJdCBtZWFucyB0aGF0IGFmdGVyIFZpbSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGEgc3RhciwKK3R5cGluZyAvIHdpbGwgcmVtb3ZlIHRoZSBleHRyYSBzcGFjZS4KKworRm9yIG1vcmUgZGV0YWlscyBzZWUgfGZvcm1hdC1jb21tZW50c3wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfMzEudHh0fCAgRXhwbG9pdGluZyB0aGUgR1VJCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzMxLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl8zMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzNmIwNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl8zMS50eHQKQEAgLTAsMCArMSwyNjcgQEAKKyp1c3JfMzEudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwMyBPY3QgMjEKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgIEV4cGxvaXRpbmcgdGhlIEdVSQorCisKK1ZpbSB3b3JrcyB3ZWxsIGluIGEgdGVybWluYWwsIGJ1dCB0aGUgR1VJIGhhcyBhIGZldyBleHRyYSBpdGVtcy4gIEEgZmlsZQorYnJvd3NlciBjYW4gYmUgdXNlZCBmb3IgY29tbWFuZHMgdGhhdCB1c2UgYSBmaWxlLiAgQSBkaWFsb2cgdG8gbWFrZSBhIGNob2ljZQorYmV0d2VlbiBhbHRlcm5hdGl2ZXMuICBVc2Uga2V5Ym9hcmQgc2hvcnRjdXRzIHRvIGFjY2VzcyBtZW51IGl0ZW1zIHF1aWNrbHkuCisKK3wzMS4xfAlUaGUgZmlsZSBicm93c2VyCit8MzEuMnwJQ29uZmlybWF0aW9uCit8MzEuM3wJTWVudSBzaG9ydGN1dHMKK3wzMS40fAlWaW0gd2luZG93IHBvc2l0aW9uIGFuZCBzaXplCit8MzEuNXwJVmFyaW91cworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl80MC50eHR8ICBNYWtlIG5ldyBjb21tYW5kcworIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMzAudHh0fCAgRWRpdGluZyBwcm9ncmFtcworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMzEuMSoJVGhlIGZpbGUgYnJvd3NlcgorCitXaGVuIHVzaW5nIHRoZSBGaWxlL09wZW4uLi4gbWVudSB5b3UgZ2V0IGEgZmlsZSBicm93c2VyLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIKK3RvIGZpbmQgdGhlIGZpbGUgeW91IHdhbnQgdG8gZWRpdC4gIEJ1dCB3aGF0IGlmIHlvdSB3YW50IHRvIHNwbGl0IGEgd2luZG93IHRvCitlZGl0IGFub3RoZXIgZmlsZT8gIFRoZXJlIGlzIG5vIG1lbnUgZW50cnkgZm9yIHRoaXMuICBZb3UgY291bGQgZmlyc3QgdXNlCitXaW5kb3cvU3BsaXQgYW5kIHRoZW4gRmlsZS9PcGVuLi4uLCBidXQgdGhhdCdzIG1vcmUgd29yay4KKyAgIFNpbmNlIHlvdSBhcmUgdHlwaW5nIG1vc3QgY29tbWFuZHMgaW4gVmltLCBvcGVuaW5nIHRoZSBmaWxlIGJyb3dzZXIgd2l0aCBhCit0eXBlZCBjb21tYW5kIGlzIHBvc3NpYmxlIGFzIHdlbGwuICBUbyBtYWtlIHRoZSBzcGxpdCBjb21tYW5kIHVzZSB0aGUgZmlsZQorYnJvd3NlciwgcHJlcGVuZCAiYnJvd3NlIjogPgorCisJOmJyb3dzZSBzcGxpdAorCitTZWxlY3QgYSBmaWxlIGFuZCB0aGVuIHRoZSAiOnNwbGl0IiBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCBpdC4gIElmIHlvdQorY2FuY2VsIHRoZSBmaWxlIGRpYWxvZyBub3RoaW5nIGhhcHBlbnMsIHRoZSB3aW5kb3cgaXNuJ3Qgc3BsaXQuCisgICBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIGZpbGUgbmFtZSBhcmd1bWVudC4gIFRoaXMgaXMgdXNlZCB0byB0ZWxsIHRoZSBmaWxlCiticm93c2VyIHdoZXJlIHRvIHN0YXJ0LiAgRXhhbXBsZTogPgorCisJOmJyb3dzZSBzcGxpdCAvZXRjCisKK1RoZSBmaWxlIGJyb3dzZXIgd2lsbCBwb3AgdXAsIHN0YXJ0aW5nIGluIHRoZSBkaXJlY3RvcnkgIi9ldGMiLgorCitUaGUgIjpicm93c2UiIGNvbW1hbmQgY2FuIGJlIHByZXBlbmRlZCB0byBqdXN0IGFib3V0IGFueSBjb21tYW5kIHRoYXQgb3BlbnMgYQorZmlsZS4KKyAgIElmIG5vIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQsIFZpbSB3aWxsIGRlY2lkZSB3aGVyZSB0byBzdGFydCB0aGUgZmlsZQorYnJvd3Nlci4gIEJ5IGRlZmF1bHQgaXQgdXNlcyB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGxhc3QgdGltZS4gIFRodXMgd2hlbgoreW91IHVzZWQgIjpicm93c2Ugc3BsaXQiIGFuZCBzZWxlY3RlZCBhIGZpbGUgaW4gIi91c3IvbG9jYWwvc2hhcmUiLCB0aGUgbmV4dAordGltZSB5b3UgdXNlIGEgIjpicm93c2UiIGl0IHdpbGwgc3RhcnQgaW4gIi91c3IvbG9jYWwvc2hhcmUiIGFnYWluLgorICAgVGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSAnYnJvd3NlZGlyJyBvcHRpb24uICBJdCBjYW4gaGF2ZSBvbmUgb2YgdGhyZWUKK3ZhbHVlczoKKworCWxhc3QJCVVzZSB0aGUgbGFzdCBkaXJlY3RvcnkgYnJvd3NlZCAoZGVmYXVsdCkKKwlidWZmZXIJCVVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGN1cnJlbnQgYnVmZmVyCisJY3VycmVudAkJdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCitGb3IgZXhhbXBsZSwgd2hlbiB5b3UgYXJlIGluIHRoZSBkaXJlY3RvcnkgIi91c3IiLCBlZGl0aW5nIHRoZSBmaWxlCisiL3Vzci9sb2NhbC9zaGFyZS9yZWFkbWUiLCB0aGVuIHRoZSBjb21tYW5kOiA+CisKKwk6c2V0IGJyb3dzZWRpcj1idWZmZXIKKwk6YnJvd3NlIGVkaXQKKworV2lsbCBzdGFydCB0aGUgYnJvd3NlciBpbiAiL3Vzci9sb2NhbC9zaGFyZSIuICBBbHRlcm5hdGl2ZWx5OiA+CisKKwk6c2V0IGJyb3dzZWRpcj1jdXJyZW50CisJOmJyb3dzZSBlZGl0CisKK1dpbGwgc3RhcnQgdGhlIGJyb3dzZXIgaW4gIi91c3IiLgorCisJTm90ZToKKwlUbyBhdm9pZCB1c2luZyB0aGUgbW91c2UsIG1vc3QgZmlsZSBicm93c2VycyBvZmZlciB1c2luZyBrZXkgcHJlc3NlcworCXRvIG5hdmlnYXRlLiAgU2luY2UgdGhpcyBpcyBkaWZmZXJlbnQgZm9yIGV2ZXJ5IHN5c3RlbSwgaXQgaXMgbm90CisJZXhwbGFpbmVkIGhlcmUuICBWaW0gdXNlcyBhIHN0YW5kYXJkIGJyb3dzZXIgd2hlbiBwb3NzaWJsZSwgeW91cgorCXN5c3RlbSBkb2N1bWVudGF0aW9uIHNob3VsZCBjb250YWluIGFuIGV4cGxhbmF0aW9uIG9uIHRoZSBrZXlib2FyZAorCXNob3J0Y3V0cyBzb21ld2hlcmUuCisKK1doZW4geW91IGFyZSBub3QgdXNpbmcgdGhlIEdVSSB2ZXJzaW9uLCB5b3UgY291bGQgdXNlIHRoZSBmaWxlIGV4cGxvcmVyIHdpbmRvdwordG8gc2VsZWN0IGZpbGVzIGxpa2UgaW4gYSBmaWxlIGJyb3dzZXIuICBIb3dldmVyLCB0aGlzIGRvZXNuJ3Qgd29yayBmb3IgdGhlCisiOmJyb3dzZSIgY29tbWFuZC4gIFNlZSB8ZmlsZS1leHBsb3JlcnwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMxLjIqCUNvbmZpcm1hdGlvbgorCitWaW0gcHJvdGVjdHMgeW91IGZyb20gYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGEgZmlsZSBhbmQgb3RoZXIgd2F5cyB0byBsb3NlCitjaGFuZ2VzLiAgSWYgeW91IGRvIHNvbWV0aGluZyB0aGF0IG1pZ2h0IGJlIGEgYmFkIHRoaW5nIHRvIGRvLCBWaW0gcHJvZHVjZXMgYW4KK2Vycm9yIG1lc3NhZ2UgYW5kIHN1Z2dlc3RzIGFwcGVuZGluZyAhIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyBpdC4KKyAgIFRvIGF2b2lkIHJldHlwaW5nIHRoZSBjb21tYW5kIHdpdGggdGhlICEsIHlvdSBjYW4gbWFrZSBWaW0gZ2l2ZSB5b3UgYQorZGlhbG9nLiAgWW91IGNhbiB0aGVuIHByZXNzICJPSyIgb3IgIkNhbmNlbCIgdG8gdGVsbCBWaW0gd2hhdCB5b3Ugd2FudC4KKyAgIEZvciBleGFtcGxlLCB5b3UgYXJlIGVkaXRpbmcgYSBmaWxlIGFuZCBtYWRlIGNoYW5nZXMgdG8gaXQuICBZb3Ugc3RhcnQKK2VkaXRpbmcgYW5vdGhlciBmaWxlIHdpdGg6ID4KKworCTpjb25maXJtIGVkaXQgZm9vLnR4dAorCitWaW0gd2lsbCBwb3AgdXAgYSBkaWFsb2cgdGhhdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwJCQkJICAgIHwKKwl8ICAgPwlTYXZlIGNoYW5nZXMgdG8gImJhci50eHQiPyAgfAorCXwJCQkJICAgIHwKKwl8ICAgWUVTICAgTk8JCSBDQU5DRUwgICAgIHwKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK05vdyBtYWtlIHlvdXIgY2hvaWNlLiAgSWYgeW91IGRvIHdhbnQgdG8gc2F2ZSB0aGUgY2hhbmdlcywgc2VsZWN0ICJZRVMiLiAgSWYKK3lvdSB3YW50IHRvIGxvc2UgdGhlIGNoYW5nZXMgZm9yIGV2ZXI6ICJOTyIuICBJZiB5b3UgZm9yZ290IHdoYXQgeW91IHdlcmUKK2RvaW5nIGFuZCB3YW50IHRvIGNoZWNrIHdoYXQgcmVhbGx5IGNoYW5nZWQgdXNlICJDQU5DRUwiLiAgWW91IHdpbGwgYmUgYmFjayBpbgordGhlIHNhbWUgZmlsZSwgd2l0aCB0aGUgY2hhbmdlcyBzdGlsbCB0aGVyZS4KKworSnVzdCBsaWtlICI6YnJvd3NlIiwgdGhlICI6Y29uZmlybSIgY29tbWFuZCBjYW4gYmUgcHJlcGVuZGVkIHRvIG1vc3QgY29tbWFuZHMKK3RoYXQgZWRpdCBhbm90aGVyIGZpbGUuICBUaGV5IGNhbiBhbHNvIGJlIGNvbWJpbmVkOiA+CisKKwk6Y29uZmlybSBicm93c2UgZWRpdAorCitUaGlzIHdpbGwgcHJvZHVjZSBhIGRpYWxvZyB3aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciB3YXMgY2hhbmdlZC4gIFRoZW4gaXQgd2lsbAorcG9wIHVwIGEgZmlsZSBicm93c2VyIHRvIHNlbGVjdCB0aGUgZmlsZSB0byBlZGl0LgorCisJTm90ZToKKwlJbiB0aGUgZGlhbG9nIHlvdSBjYW4gdXNlIHRoZSBrZXlib2FyZCB0byBzZWxlY3QgdGhlIGNob2ljZS4KKwlUeXBpY2FsbHkgdGhlIDxUYWI+IGtleSBhbmQgdGhlIGN1cnNvciBrZXlzIGNoYW5nZSB0aGUgY2hvaWNlLgorCVByZXNzaW5nIDxFbnRlcj4gc2VsZWN0cyB0aGUgY2hvaWNlLiAgVGhpcyBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0KKwl0aG91Z2guCisKK1doZW4geW91IGFyZSBub3QgdXNpbmcgdGhlIEdVSSwgdGhlICI6Y29uZmlybSIgY29tbWFuZCB3b3JrcyBhcyB3ZWxsLiAgSW5zdGVhZAorb2YgcG9wcGluZyB1cCBhIGRpYWxvZywgVmltIHdpbGwgcHJpbnQgdGhlIG1lc3NhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgVmltCit3aW5kb3cgYW5kIGFzayB5b3UgdG8gcHJlc3MgYSBrZXkgdG8gbWFrZSBhIGNob2ljZS4gPgorCisJOmNvbmZpcm0gZWRpdCBtYWluLmMKKzwJU2F2ZSBjaGFuZ2VzIHRvICJVbnRpdGxlZCI/IH4KKwlbWV1lcywgKE4pbywgKEMpYW5jZWw6ICB+CisKK1lvdSBjYW4gbm93IHByZXNzIHRoZSBzaW5nbGUga2V5IGZvciB0aGUgY2hvaWNlLiAgWW91IGRvbid0IGhhdmUgdG8gcHJlc3MKKzxFbnRlcj4sIHVubGlrZSBvdGhlciB0eXBpbmcgb24gdGhlIGNvbW1hbmQgbGluZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMzEuMyoJTWVudSBzaG9ydGN1dHMKKworVGhlIGtleWJvYXJkIGlzIHVzZWQgZm9yIGFsbCBWaW0gY29tbWFuZHMuICBUaGUgbWVudXMgcHJvdmlkZSBhIHNpbXBsZSB3YXkgdG8KK3NlbGVjdCBjb21tYW5kcywgd2l0aG91dCBrbm93aW5nIHdoYXQgdGhleSBhcmUgY2FsbGVkLiAgQnV0IHlvdSBoYXZlIHRvIG1vdmUKK3lvdXIgaGFuZCBmcm9tIHRoZSBrZXlib2FyZCBhbmQgZ3JhYiB0aGUgbW91c2UuCisgICBNZW51cyBjYW4gb2Z0ZW4gYmUgc2VsZWN0ZWQgd2l0aCBrZXlzIGFzIHdlbGwuICBUaGlzIGRlcGVuZHMgb24geW91cgorc3lzdGVtLCBidXQgbW9zdCBvZnRlbiBpdCB3b3JrcyB0aGlzIHdheS4gIFVzZSB0aGUgPEFsdD4ga2V5IGluIGNvbWJpbmF0aW9uCit3aXRoIHRoZSB1bmRlcmxpbmVkIGxldHRlciBvZiBhIG1lbnUuICBGb3IgZXhhbXBsZSwgPEEtdz4gKDxBbHQ+IGFuZCB3KSBwb3BzCit1cCB0aGUgV2luZG93IG1lbnUuCisgICBJbiB0aGUgV2luZG93IG1lbnUsIHRoZSAic3BsaXQiIGl0ZW0gaGFzIHRoZSBwIHVuZGVybGluZWQuICBUbyBzZWxlY3QgaXQsCitsZXQgZ28gb2YgdGhlIDxBbHQ+IGtleSBhbmQgcHJlc3MgcC4KKworQWZ0ZXIgdGhlIGZpcnN0IHNlbGVjdGlvbiBvZiBhIG1lbnUgd2l0aCB0aGUgPEFsdD4ga2V5LCB5b3UgY2FuIHVzZSB0aGUgY3Vyc29yCitrZXlzIHRvIG1vdmUgdGhyb3VnaCB0aGUgbWVudXMuICA8UmlnaHQ+IHNlbGVjdHMgYSBzdWJtZW51IGFuZCA8bGVmdD4gY2xvc2VzCitpdC4gIDxFc2M+IGFsc28gY2xvc2VzIGEgbWVudS4gIDxFbnRlcj4gc2VsZWN0cyBhIG1lbnUgaXRlbS4KKworVGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuIHVzaW5nIHRoZSA8QWx0PiBrZXkgdG8gc2VsZWN0IG1lbnUgaXRlbXMsIGFuZAordXNpbmcgPEFsdD4ga2V5IGNvbWJpbmF0aW9ucyBmb3IgbWFwcGluZ3MuICBUaGUgJ3dpbmFsdGtleXMnIG9wdGlvbiB0ZWxscyBWaW0KK3doYXQgaXQgc2hvdWxkIGRvIHdpdGggdGhlIDxBbHQ+IGtleS4KKyAgIFRoZSBkZWZhdWx0IHZhbHVlICJtZW51IiBpcyB0aGUgc21hcnQgY2hvaWNlOiBJZiB0aGUga2V5IGNvbWJpbmF0aW9uIGlzIGEKK21lbnUgc2hvcnRjdXQgaXQgY2FuJ3QgYmUgbWFwcGVkLiAgQWxsIG90aGVyIGtleXMgYXJlIGF2YWlsYWJsZSBmb3IgbWFwcGluZy4KKyAgIFRoZSB2YWx1ZSAibm8iIGRvZXNuJ3QgdXNlIGFueSA8QWx0PiBrZXlzIGZvciB0aGUgbWVudXMuICBUaHVzIHlvdSBtdXN0IHVzZQordGhlIG1vdXNlIGZvciB0aGUgbWVudXMsIGFuZCBhbGwgPEFsdD4ga2V5cyBjYW4gYmUgbWFwcGVkLgorICAgVGhlIHZhbHVlICJ5ZXMiIG1lYW5zIHRoYXQgVmltIHdpbGwgdXNlIGFueSA8QWx0PiBrZXlzIGZvciB0aGUgbWVudXMuICBTb21lCis8QWx0PiBrZXkgY29tYmluYXRpb25zIG1heSBhbHNvIGRvIG90aGVyIHRoaW5ncyB0aGFuIHNlbGVjdGluZyBhIG1lbnUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjMxLjQqCVZpbSB3aW5kb3cgcG9zaXRpb24gYW5kIHNpemUKKworVG8gc2VlIHRoZSBjdXJyZW50IFZpbSB3aW5kb3cgcG9zaXRpb24gb24gdGhlIHNjcmVlbiB1c2U6ID4KKworCTp3aW5wb3MKKworVGhpcyB3aWxsIG9ubHkgd29yayBpbiB0aGUgR1VJLiAgVGhlIG91dHB1dCBtYXkgbG9vayBsaWtlIHRoaXM6CisKKwlXaW5kb3cgcG9zaXRpb246IFggMjcyLCBZIDEwMyB+CisKK1RoZSBwb3NpdGlvbiBpcyBnaXZlbiBpbiBzY3JlZW4gcGl4ZWxzLiAgTm93IHlvdSBjYW4gdXNlIHRoZSBudW1iZXJzIHRvIG1vdmUKK1ZpbSBzb21ld2hlcmUgZWxzZS4gIEZvciBleGFtcGxlLCB0byBtb3ZlIGl0IHRvIHRoZSBsZWZ0IGEgaHVuZHJlZCBwaXhlbHM6ID4KKworCTp3aW5wb3MgMTcyIDEwMworPAorCU5vdGU6CisJVGhlcmUgbWF5IGJlIGEgc21hbGwgb2Zmc2V0IGJldHdlZW4gdGhlIHJlcG9ydGVkIHBvc2l0aW9uIGFuZCB3aGVyZQorCXRoZSB3aW5kb3cgbW92ZXMuICBUaGlzIGlzIGJlY2F1c2Ugb2YgdGhlIGJvcmRlciBhcm91bmQgdGhlIHdpbmRvdy4KKwlUaGlzIGlzIGFkZGVkIGJ5IHRoZSB3aW5kb3cgbWFuYWdlci4KKworWW91IGNhbiB1c2UgdGhpcyBjb21tYW5kIGluIHlvdXIgc3RhcnR1cCBzY3JpcHQgdG8gcG9zaXRpb24gdGhlIHdpbmRvdyBhdCBhCitzcGVjaWZpYyBwb3NpdGlvbi4KKworVGhlIHNpemUgb2YgdGhlIFZpbSB3aW5kb3cgaXMgY29tcHV0ZWQgaW4gY2hhcmFjdGVycy4gIFRodXMgdGhpcyBkZXBlbmRzIG9uCit0aGUgc2l6ZSBvZiB0aGUgZm9udCBiZWluZyB1c2VkLiAgWW91IGNhbiBzZWUgdGhlIGN1cnJlbnQgc2l6ZSB3aXRoIHRoaXMKK2NvbW1hbmQ6ID4KKworCTpzZXQgbGluZXMgY29sdW1ucworCitUbyBjaGFuZ2UgdGhlIHNpemUgc2V0IHRoZSAnbGluZXMnIGFuZC9vciAnY29sdW1ucycgb3B0aW9ucyB0byBhIG5ldyB2YWx1ZTogPgorCisJOnNldCBsaW5lcz01MAorCTpzZXQgY29sdW1ucz04MAorCitPYnRhaW5pbmcgdGhlIHNpemUgd29ya3MgaW4gYSB0ZXJtaW5hbCBqdXN0IGxpa2UgaW4gdGhlIEdVSS4gIFNldHRpbmcgdGhlIHNpemUKK2lzIG5vdCBwb3NzaWJsZSBpbiBtb3N0IHRlcm1pbmFscy4KKworWW91IGNhbiBzdGFydCB0aGUgWC1XaW5kb3dzIHZlcnNpb24gb2YgZ3ZpbSB3aXRoIGFuIGFyZ3VtZW50IHRvIHNwZWNpZnkgdGhlCitzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgd2luZG93OiA+CisKKwlndmltIC1nZW9tZXRyeSB7d2lkdGh9eHtoZWlnaHR9K3t4X29mZnNldH0re3lfb2Zmc2V0fQorCit7d2lkdGh9IGFuZCB7aGVpZ2h0fSBhcmUgaW4gY2hhcmFjdGVycywge3hfb2Zmc2V0fSBhbmQge3lfb2Zmc2V0fSBhcmUgaW4KK3BpeGVscy4gIEV4YW1wbGU6ID4KKworCWd2aW0gLWdlb21ldHJ5IDgweDI1KzEwMCszMDAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqMzEuNSoJVmFyaW91cworCitZb3UgY2FuIHVzZSBndmltIHRvIGVkaXQgYW4gZS1tYWlsIG1lc3NhZ2UuICBJbiB5b3VyIGUtbWFpbCBwcm9ncmFtIHlvdSBtdXN0CitzZWxlY3QgZ3ZpbSB0byBiZSB0aGUgZWRpdG9yIGZvciBtZXNzYWdlcy4gIFdoZW4geW91IHRyeSB0aGF0LCB5b3Ugd2lsbAorc2VlIHRoYXQgaXQgZG9lc24ndCB3b3JrOiBUaGUgbWFpbCBwcm9ncmFtIHRoaW5rcyB0aGF0IGVkaXRpbmcgaXMgZmluaXNoZWQsCit3aGlsZSBndmltIGlzIHN0aWxsIHJ1bm5pbmchCisgICBXaGF0IGhhcHBlbnMgaXMgdGhhdCBndmltIGRpc2Nvbm5lY3RzIGZyb20gdGhlIHNoZWxsIGl0IHdhcyBzdGFydGVkIGluLgorVGhhdCBpcyBmaW5lIHdoZW4geW91IHN0YXJ0IGd2aW0gaW4gYSB0ZXJtaW5hbCwgc28gdGhhdCB5b3UgY2FuIGRvIG90aGVyIHdvcmsKK2luIHRoYXQgdGVybWluYWwuICBCdXQgd2hlbiB5b3UgcmVhbGx5IHdhbnQgdG8gd2FpdCBmb3IgZ3ZpbSB0byBmaW5pc2gsIHlvdQorbXVzdCBwcmV2ZW50IGl0IGZyb20gZGlzY29ubmVjdGluZy4gIFRoZSAiLWYiIGFyZ3VtZW50IGRvZXMgdGhpczogPgorCisJZ3ZpbSAtZiBmaWxlLnR4dAorCitUaGUgIi1mIiBzdGFuZHMgZm9yIGZvcmVncm91bmQuICBOb3cgVmltIHdpbGwgYmxvY2sgdGhlIHNoZWxsIGl0IHdhcyBzdGFydGVkCitpbiB1bnRpbCB5b3UgZmluaXNoIGVkaXRpbmcgYW5kIGV4aXQuCisKKworREVMQVlFRCBTVEFSVCBPRiBUSEUgR1VJCisKK09uIFVuaXggaXQncyBwb3NzaWJsZSB0byBmaXJzdCBzdGFydCBWaW0gaW4gYSB0ZXJtaW5hbC4gIFRoYXQncyB1c2VmdWwgaWYgeW91CitkbyB2YXJpb3VzIHRhc2tzIGluIHRoZSBzYW1lIHNoZWxsLiAgSWYgeW91IGFyZSBlZGl0aW5nIGEgZmlsZSBhbmQgZGVjaWRlIHlvdQord2FudCB0byB1c2UgdGhlIEdVSSBhZnRlciBhbGwsIHlvdSBjYW4gc3RhcnQgaXQgd2l0aDogPgorCisJOmd1aQorCitWaW0gd2lsbCBvcGVuIHRoZSBHVUkgd2luZG93IGFuZCBubyBsb25nZXIgdXNlIHRoZSB0ZXJtaW5hbC4gIFlvdSBjYW4gY29udGludWUKK3VzaW5nIHRoZSB0ZXJtaW5hbCBmb3Igc29tZXRoaW5nIGVsc2UuICBUaGUgIi1mIiBhcmd1bWVudCBpcyB1c2VkIGhlcmUgdG8gcnVuCit0aGUgR1VJIGluIHRoZSBmb3JlZ3JvdW5kLiAgWW91IGNhbiBhbHNvIHVzZSAiOmd1aSAtZiIuCisKKworVEhFIEdWSU0gU1RBUlRVUCBGSUxFCisKK1doZW4gZ3ZpbSBzdGFydHMsIGl0IHJlYWRzIHRoZSBndmltcmMgZmlsZS4gIFRoYXQncyBzaW1pbGFyIHRvIHRoZSB2aW1yYyBmaWxlCit1c2VkIHdoZW4gc3RhcnRpbmcgVmltLiAgVGhlIGd2aW1yYyBmaWxlIGNhbiBiZSB1c2VkIGZvciBzZXR0aW5ncyBhbmQgY29tbWFuZHMKK3RoYXQgYXJlIG9ubHkgdG8gYmUgdXNlZCB3aGVuIHRoZSBHVUkgaXMgZ29pbmcgdG8gYmUgc3RhcnRlZC4gIEZvciBleGFtcGxlLAoreW91IGNhbiBzZXQgdGhlICdsaW5lcycgb3B0aW9uIHRvIHNldCBhIGRpZmZlcmVudCB3aW5kb3cgc2l6ZTogPgorCisJOnNldCBsaW5lcz01NQorCitZb3UgZG9uJ3Qgd2FudCB0byBkbyB0aGlzIGluIGEgdGVybWluYWwsIHNpbmNlIGl0J3Mgc2l6ZSBpcyBmaXhlZCAoZXhjZXB0IGZvcgorYW4geHRlcm0gdGhhdCBzdXBwb3J0cyByZXNpemluZykuCisgICBUaGUgZ3ZpbXJjIGZpbGUgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBzYW1lIGxvY2F0aW9ucyBhcyB0aGUgdmltcmMgZmlsZS4KK05vcm1hbGx5IGl0J3MgbmFtZSBpcyAifi8uZ3ZpbXJjIiBmb3IgVW5peCBhbmQgIiRWSU0vX2d2aW1yYyIgZm9yIE1TLVdpbmRvd3MuCisgICBJZiBmb3Igc29tZSByZWFzb24geW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBub3JtYWwgZ3ZpbXJjIGZpbGUsIHlvdSBjYW4KK3NwZWNpZnkgYW5vdGhlciBvbmUgd2l0aCB0aGUgIi1VIiBhcmd1bWVudDogPgorCisJZ3ZpbSAtVSB0aGlzcmMgLi4uCisKK1RoYXQgYWxsb3dzIHN0YXJ0aW5nIGd2aW0gZm9yIGRpZmZlcmVudCBraW5kcyBvZiBlZGl0aW5nLiAgWW91IGNvdWxkIHNldAorYW5vdGhlciBmb250IHNpemUsIGZvciBleGFtcGxlLgorICAgVG8gY29tcGxldGVseSBza2lwIHJlYWRpbmcgYSBndmltcmMgZmlsZTogPgorCisJZ3ZpbSAtVSBOT05FIC4uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzQwLnR4dHwgIE1ha2UgbmV3IGNvbW1hbmRzCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzQwLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl80MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NjQxNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl80MC50eHQKQEAgLTAsMCArMSw2NTUgQEAKKyp1c3JfNDAudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBGZWIgMTMKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgIE1ha2UgbmV3IGNvbW1hbmRzCisKKworVmltIGlzIGFuIGV4dGVuc2libGUgZWRpdG9yLiAgWW91IGNhbiB0YWtlIGEgc2VxdWVuY2Ugb2YgY29tbWFuZHMgeW91IHVzZQorb2Z0ZW4gYW5kIHR1cm4gaXQgaW50byBhIG5ldyBjb21tYW5kLiAgT3IgcmVkZWZpbmUgYW4gZXhpc3RpbmcgY29tbWFuZC4KK0F1dG9jb21tYW5kcyBtYWtlIGl0IHBvc3NpYmxlIHRvIGV4ZWN1dGUgY29tbWFuZHMgYXV0b21hdGljYWxseS4KKworfDQwLjF8CUtleSBtYXBwaW5nCit8NDAuMnwJRGVmaW5pbmcgY29tbWFuZC1saW5lIGNvbW1hbmRzCit8NDAuM3wJQXV0b2NvbW1hbmRzCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzQxLnR4dHwgIFdyaXRlIGEgVmltIHNjcmlwdAorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfMzEudHh0fCAgRXhwbG9pdGluZyB0aGUgR1VJCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MC4xKglLZXkgbWFwcGluZworCitBIHNpbXBsZSBtYXBwaW5nIHdhcyBleHBsYWluZWQgaW4gc2VjdGlvbiB8MDUuM3wuICBUaGUgcHJpbmNpcGxlIGlzIHRoYXQgb25lCitzZXF1ZW5jZSBvZiBrZXkgc3Ryb2tlcyBpcyB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBzZXF1ZW5jZSBvZiBrZXkgc3Ryb2tlcy4KK1RoaXMgaXMgYSBzaW1wbGUsIHlldCBwb3dlcmZ1bCBtZWNoYW5pc20uCisgICBUaGUgc2ltcGxlc3QgZm9ybSBpcyB0aGF0IG9uZSBrZXkgaXMgbWFwcGVkIHRvIGEgc2VxdWVuY2Ugb2Yga2V5cy4gIFNpbmNlCit0aGUgZnVuY3Rpb24ga2V5cywgZXhjZXB0IDxGMT4sIGhhdmUgbm8gcHJlZGVmaW5lZCBtZWFuaW5nIGluIFZpbSwgdGhlc2UgYXJlIGEKK2dvb2QgY2hvaWNlIHRvIG1hcC4gIEV4YW1wbGU6ID4KKworCTptYXAgPEYyPiBHb0RhdGU6IDxFc2M+OnJlYWQgIWRhdGU8Q1I+a0oKKworVGhpcyBzaG93cyBob3cgdGhyZWUgbW9kZXMgYXJlIHVzZWQuICBBZnRlciBnb2luZyB0byB0aGUgbGFzdCBsaW5lIHdpdGggIkciLAordGhlICJvIiBjb21tYW5kIG9wZW5zIGEgbmV3IGxpbmUgYW5kIHN0YXJ0cyBJbnNlcnQgbW9kZS4gIFRoZSB0ZXh0ICJEYXRlOiAiIGlzCitpbnNlcnRlZCBhbmQgPEVzYz4gdGFrZXMgeW91IG91dCBvZiBpbnNlcnQgbW9kZS4KKyAgIE5vdGljZSB0aGUgdXNlIG9mIHNwZWNpYWwga2V5cyBpbnNpZGUgPD4uICBUaGlzIGlzIGNhbGxlZCBhbmdsZSBicmFja2V0Citub3RhdGlvbi4gIFlvdSB0eXBlIHRoZXNlIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMsIG5vdCBieSBwcmVzc2luZyB0aGUga2V5CitpdHNlbGYuICBUaGlzIG1ha2VzIHRoZSBtYXBwaW5ncyBiZXR0ZXIgcmVhZGFibGUgYW5kIHlvdSBjYW4gY29weSBhbmQgcGFzdGUKK3RoZSB0ZXh0IHdpdGhvdXQgcHJvYmxlbXMuCisgICBUaGUgIjoiIGNoYXJhY3RlciB0YWtlcyBWaW0gdG8gdGhlIGNvbW1hbmQgbGluZS4gIFRoZSAiOnJlYWQgIWRhdGUiIGNvbW1hbmQKK3JlYWRzIHRoZSBvdXRwdXQgZnJvbSB0aGUgImRhdGUiIGNvbW1hbmQgYW5kIGFwcGVuZHMgaXQgYmVsb3cgdGhlIGN1cnJlbnQKK2xpbmUuICBUaGUgPENSPiBpcyByZXF1aXJlZCB0byBleGVjdXRlIHRoZSAiOnJlYWQiIGNvbW1hbmQuCisgICBBdCB0aGlzIHBvaW50IG9mIGV4ZWN1dGlvbiB0aGUgdGV4dCBsb29rcyBsaWtlIHRoaXM6CisKKwlEYXRlOiAgfgorCUZyaSBKdW4gMTUgMTI6NTQ6MzQgQ0VTVCAyMDAxIH4KKworTm93ICJrSiIgbW92ZXMgdGhlIGN1cnNvciB1cCBhbmQgam9pbnMgdGhlIGxpbmVzIHRvZ2V0aGVyLgorICAgVG8gZGVjaWRlIHdoaWNoIGtleSBvciBrZXlzIHlvdSB1c2UgZm9yIG1hcHBpbmcsIHNlZSB8bWFwLXdoaWNoLWtleXN8LgorCisKK01BUFBJTkcgQU5EIE1PREVTCisKK1RoZSAiOm1hcCIgY29tbWFuZCBkZWZpbmVzIHJlbWFwcGluZyBmb3Iga2V5cyBpbiBOb3JtYWwgbW9kZS4gIFlvdSBjYW4gYWxzbworZGVmaW5lIG1hcHBpbmdzIGZvciBvdGhlciBtb2Rlcy4gIEZvciBleGFtcGxlLCAiOmltYXAiIGFwcGxpZXMgdG8gSW5zZXJ0IG1vZGUuCitZb3UgY2FuIHVzZSBpdCB0byBpbnNlcnQgYSBkYXRlIGJlbG93IHRoZSBjdXJzb3I6ID4KKworCTppbWFwIDxGMj4gPENSPkRhdGU6IDxFc2M+OnJlYWQgIWRhdGU8Q1I+a0oKKworSXQgbG9va3MgYSBsb3QgbGlrZSB0aGUgbWFwcGluZyBmb3IgPEYyPiBpbiBOb3JtYWwgbW9kZSwgb25seSB0aGUgc3RhcnQgaXMKK2RpZmZlcmVudC4gIFRoZSA8RjI+IG1hcHBpbmcgZm9yIE5vcm1hbCBtb2RlIGlzIHN0aWxsIHRoZXJlLiAgVGh1cyB5b3UgY2FuIG1hcAordGhlIHNhbWUga2V5IGRpZmZlcmVudGx5IGZvciBlYWNoIG1vZGUuCisgICBOb3RpY2UgdGhhdCwgYWx0aG91Z2ggdGhpcyBtYXBwaW5nIHN0YXJ0cyBpbiBJbnNlcnQgbW9kZSwgaXQgZW5kcyBpbiBOb3JtYWwKK21vZGUuICBJZiB5b3Ugd2FudCBpdCB0byBjb250aW51ZSBpbiBJbnNlcnQgbW9kZSwgYXBwZW5kIGEgImEiIHRvIHRoZSBtYXBwaW5nLgorCitIZXJlIGlzIGFuIG92ZXJ2aWV3IG9mIG1hcCBjb21tYW5kcyBhbmQgaW4gd2hpY2ggbW9kZSB0aGV5IHdvcms6CisKKwk6bWFwCQlOb3JtYWwsIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZworCTp2bWFwCQlWaXN1YWwKKwk6bm1hcAkJTm9ybWFsCisJOm9tYXAJCU9wZXJhdG9yLXBlbmRpbmcKKwk6bWFwIQkJSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUKKwk6aW1hcAkJSW5zZXJ0CisJOmNtYXAJCUNvbW1hbmQtbGluZQorCitPcGVyYXRvci1wZW5kaW5nIG1vZGUgaXMgd2hlbiB5b3UgdHlwZWQgYW4gb3BlcmF0b3IgY2hhcmFjdGVyLCBzdWNoIGFzICJkIiBvcgorInkiLCBhbmQgeW91IGFyZSBleHBlY3RlZCB0byB0eXBlIHRoZSBtb3Rpb24gY29tbWFuZCBvciBhIHRleHQgb2JqZWN0LiAgVGh1cword2hlbiB5b3UgdHlwZSAiZHciLCB0aGUgInciIGlzIGVudGVyZWQgaW4gb3BlcmF0b3ItcGVuZGluZyBtb2RlLgorCitTdXBwb3NlIHRoYXQgeW91IHdhbnQgdG8gZGVmaW5lIDxGNz4gc28gdGhhdCB0aGUgY29tbWFuZCBkPEY3PiBkZWxldGVzIGEgQworcHJvZ3JhbSBibG9jayAodGV4dCBlbmNsb3NlZCBpbiBjdXJseSBicmFjZXMsIHt9KS4gIFNpbWlsYXJseSB5PEY3PiB3b3VsZCB5YW5rCit0aGUgcHJvZ3JhbSBibG9jayBpbnRvIHRoZSB1bm5hbWVkIHJlZ2lzdGVyLiAgVGhlcmVmb3JlLCB3aGF0IHlvdSBuZWVkIHRvIGRvCitpcyB0byBkZWZpbmUgPEY3PiB0byBzZWxlY3QgdGhlIGN1cnJlbnQgcHJvZ3JhbSBibG9jay4gIFlvdSBjYW4gZG8gdGhpcyB3aXRoCit0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpvbWFwIDxGNz4gYXsKKworVGhpcyBjYXVzZXMgPEY3PiB0byBwZXJmb3JtIGEgc2VsZWN0IGJsb2NrICJheyIgaW4gb3BlcmF0b3ItcGVuZGluZyBtb2RlLCBqdXN0CitsaWtlIHlvdSB0eXBlZCBpdC4gIFRoaXMgbWFwcGluZyBpcyB1c2VmdWwgaWYgdHlwaW5nIGEgeyBvbiB5b3VyIGtleWJvYXJkIGlzIGEKK2JpdCBkaWZmaWN1bHQuCisKKworTElTVElORyBNQVBQSU5HUworCitUbyBzZWUgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcHBpbmdzLCB1c2UgIjptYXAiIHdpdGhvdXQgYXJndW1lbnRzLiAgT3Igb25lCitvZiB0aGUgdmFyaWFudHMgdGhhdCBpbmNsdWRlIHRoZSBtb2RlIGluIHdoaWNoIHRoZXkgd29yay4gIFRoZSBvdXRwdXQgY291bGQKK2xvb2sgbGlrZSB0aGlzOgorCisJICAgX2cJCSA6Y2FsbCBNeUdyZXAoMSk8Q1I+IH4KKwl2ICA8RjI+CQkgOnMvXi8+IC88Q1I+Om5vaDxDUj5gYCB+CisJbiAgPEYyPgkJIDouLCRzL14vPiAvPENSPjpub2g8Q1I+YGAgfgorCSAgIDx4SG9tZT4JIDxIb21lPgorCSAgIDx4RW5kPgkgPEVuZD4KKworCitUaGUgZmlyc3QgY29sdW1uIG9mIHRoZSBsaXN0IHNob3dzIGluIHdoaWNoIG1vZGUgdGhlIG1hcHBpbmcgaXMgZWZmZWN0aXZlLgorVGhpcyBpcyAibiIgZm9yIE5vcm1hbCBtb2RlLCAiaSIgZm9yIEluc2VydCBtb2RlLCBldGMuICBBIGJsYW5rIGlzIHVzZWQgZm9yIGEKK21hcHBpbmcgZGVmaW5lZCB3aXRoICI6bWFwIiwgdGh1cyBlZmZlY3RpdmUgaW4gYm90aCBOb3JtYWwgYW5kIFZpc3VhbCBtb2RlLgorICAgT25lIHVzZWZ1bCBwdXJwb3NlIG9mIGxpc3RpbmcgdGhlIG1hcHBpbmcgaXMgdG8gY2hlY2sgaWYgc3BlY2lhbCBrZXlzIGluIDw+Citmb3JtIGhhdmUgYmVlbiByZWNvZ25pemVkICh0aGlzIG9ubHkgd29ya3Mgd2hlbiBjb2xvciBpcyBzdXBwb3J0ZWQpLiAgRm9yCitleGFtcGxlLCB3aGVuIDxFc2M+IGlzIGRpc3BsYXllZCBpbiBjb2xvciwgaXQgc3RhbmRzIGZvciB0aGUgZXNjYXBlIGNoYXJhY3Rlci4KK1doZW4gaXQgaGFzIHRoZSBzYW1lIGNvbG9yIGFzIHRoZSBvdGhlciB0ZXh0LCBpdCBpcyBmaXZlIGNoYXJhY3RlcnMuCisKKworUkVNQVBQSU5HCisKK1RoZSByZXN1bHQgb2YgYSBtYXBwaW5nIGlzIGluc3BlY3RlZCBmb3Igb3RoZXIgbWFwcGluZ3MgaW4gaXQuICBGb3IgZXhhbXBsZSwKK3RoZSBtYXBwaW5ncyBmb3IgPEYyPiBhYm92ZSBjb3VsZCBiZSBzaG9ydGVuZWQgdG86ID4KKworCTptYXAgPEYyPiBHPEYzPgorCTppbWFwIDxGMj4gPEVzYz48RjM+CisJOm1hcCA8RjM+ICBvRGF0ZTogPEVzYz46cmVhZCAhZGF0ZTxDUj5rSgorCitGb3IgTm9ybWFsIG1vZGUgPEYyPiBpcyBtYXBwZWQgdG8gZ28gdG8gdGhlIGxhc3QgbGluZSwgYW5kIHRoZW4gYmVoYXZlIGxpa2UKKzxGMz4gd2FzIHByZXNzZWQuICBJbiBJbnNlcnQgbW9kZSA8RjI+IHN0b3BzIEluc2VydCBtb2RlIHdpdGggPEVzYz4gYW5kIHRoZW4KK2Fsc28gdXNlcyA8RjM+LiAgVGhlbiA8RjM+IGlzIG1hcHBlZCB0byBkbyB0aGUgYWN0dWFsIHdvcmsuCisKK1N1cHBvc2UgeW91IGhhcmRseSBldmVyIHVzZSBFeCBtb2RlLCBhbmQgd2FudCB0byB1c2UgdGhlICJRIiBjb21tYW5kIHRvIGZvcm1hdAordGV4dCAodGhpcyB3YXMgc28gaW4gb2xkIHZlcnNpb25zIG9mIFZpbSkuICBUaGlzIG1hcHBpbmcgd2lsbCBkbyBpdDogPgorCisJOm1hcCBRIGdxCisKK0J1dCwgaW4gcmFyZSBjYXNlcyB5b3UgbmVlZCB0byB1c2UgRXggbW9kZSBhbnl3YXkuICBMZXQncyBtYXAgImdRIiB0byBRLCBzbwordGhhdCB5b3UgY2FuIHN0aWxsIGdvIHRvIEV4IG1vZGU6ID4KKworCTptYXAgZ1EgUQorCitXaGF0IGhhcHBlbnMgbm93IGlzIHRoYXQgd2hlbiB5b3UgdHlwZSAiZ1EiIGl0IGlzIG1hcHBlZCB0byAiUSIuICBTbyBmYXIgc28KK2dvb2QuICBCdXQgdGhlbiAiUSIgaXMgbWFwcGVkIHRvICJncSIsIHRodXMgdHlwaW5nICJnUSIgcmVzdWx0cyBpbiAiZ3EiLCBhbmQKK3lvdSBkb24ndCBnZXQgdG8gRXggbW9kZSBhdCBhbGwuCisgICBUbyBhdm9pZCBrZXlzIHRvIGJlIG1hcHBlZCBhZ2FpbiwgdXNlIHRoZSAiOm5vcmVtYXAiIGNvbW1hbmQ6ID4KKworCTpub3JlbWFwIGdRIFEKKworTm93IFZpbSBrbm93cyB0aGF0IHRoZSAiUSIgaXMgbm90IHRvIGJlIGluc3BlY3RlZCBmb3IgbWFwcGluZ3MgdGhhdCBhcHBseSB0bworaXQuICBUaGVyZSBpcyBhIHNpbWlsYXIgY29tbWFuZCBmb3IgZXZlcnkgbW9kZToKKworCTpub3JlbWFwCU5vcm1hbCwgVmlzdWFsIGFuZCBPcGVyYXRvci1wZW5kaW5nCisJOnZub3JlbWFwCVZpc3VhbAorCTpubm9yZW1hcAlOb3JtYWwKKwk6b25vcmVtYXAJT3BlcmF0b3ItcGVuZGluZworCTpub3JlbWFwIQlJbnNlcnQgYW5kIENvbW1hbmQtbGluZQorCTppbm9yZW1hcAlJbnNlcnQKKwk6Y25vcmVtYXAJQ29tbWFuZC1saW5lCisKKworUkVDVVJTSVZFIE1BUFBJTkcKKworV2hlbiBhIG1hcHBpbmcgdHJpZ2dlcnMgaXRzZWxmLCBpdCB3aWxsIHJ1biBmb3JldmVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0bworcmVwZWF0IGFuIGFjdGlvbiBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIHRpbWVzLgorICAgRm9yIGV4YW1wbGUsIHlvdSBoYXZlIGEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW4gYSB2ZXJzaW9uIG51bWJlciBpbiB0aGUKK2ZpcnN0IGxpbmUuICBZb3UgZWRpdCB0aGVzZSBmaWxlcyB3aXRoICJ2aW0gKi50eHQiLiAgWW91IGFyZSBub3cgZWRpdGluZyB0aGUKK2ZpcnN0IGZpbGUuICBEZWZpbmUgdGhpcyBtYXBwaW5nOiA+CisKKwk6bWFwICwsIDpzLzUuMS81LjIvPENSPjp3bmV4dDxDUj4sLAorCitOb3cgeW91IHR5cGUgIiwsIi4gIFRoaXMgdHJpZ2dlcnMgdGhlIG1hcHBpbmcuICBJdCByZXBsYWNlcyAiNS4xIiB3aXRoICI1LjIiCitpbiB0aGUgZmlyc3QgbGluZS4gIFRoZW4gaXQgZG9lcyBhICI6d25leHQiIHRvIHdyaXRlIHRoZSBmaWxlIGFuZCBlZGl0IHRoZQorbmV4dCBvbmUuICBUaGUgbWFwcGluZyBlbmRzIGluICIsLCIuICBUaGlzIHRyaWdnZXJzIHRoZSBzYW1lIG1hcHBpbmcgYWdhaW4sCit0aHVzIGRvaW5nIHRoZSBzdWJzdGl0dXRpb24sIGV0Yy4KKyAgIFRoaXMgY29udGludWVzIHVudGlsIHRoZXJlIGlzIGFuIGVycm9yLiAgSW4gdGhpcyBjYXNlIGl0IGNvdWxkIGJlIGEgZmlsZQord2hlcmUgdGhlIHN1YnN0aXR1dGUgY29tbWFuZCBkb2Vzbid0IGZpbmQgYSBtYXRjaCBmb3IgIjUuMSIuICBZb3UgY2FuIHRoZW4KK21ha2UgYSBjaGFuZ2UgdG8gaW5zZXJ0ICI1LjEiIGFuZCBjb250aW51ZSBieSB0eXBpbmcgIiwsIiBhZ2Fpbi4gIE9yIHRoZQorIjp3bmV4dCIgZmFpbHMsIGJlY2F1c2UgeW91IGFyZSBpbiB0aGUgbGFzdCBmaWxlIGluIHRoZSBsaXN0LgorICAgV2hlbiBhIG1hcHBpbmcgcnVucyBpbnRvIGFuIGVycm9yIGhhbGZ3YXksIHRoZSByZXN0IG9mIHRoZSBtYXBwaW5nIGlzCitkaXNjYXJkZWQuICBDVFJMLUMgaW50ZXJydXB0cyB0aGUgbWFwcGluZyAoQ1RSTC1CcmVhayBvbiBNUy1XaW5kb3dzKS4KKworCitERUxFVEUgQSBNQVBQSU5HCisKK1RvIHJlbW92ZSBhIG1hcHBpbmcgdXNlIHRoZSAiOnVubWFwIiBjb21tYW5kLiAgQWdhaW4sIHRoZSBtb2RlIHRoZSB1bm1hcHBpbmcKK2FwcGxpZXMgdG8gZGVwZW5kcyBvbiB0aGUgY29tbWFuZCB1c2VkOgorCisJOnVubWFwCQlOb3JtYWwsIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZworCTp2dW5tYXAJCVZpc3VhbAorCTpudW5tYXAJCU5vcm1hbAorCTpvdW5tYXAJCU9wZXJhdG9yLXBlbmRpbmcKKwk6dW5tYXAhCQlJbnNlcnQgYW5kIENvbW1hbmQtbGluZQorCTppdW5tYXAJCUluc2VydAorCTpjdW5tYXAJCUNvbW1hbmQtbGluZQorCitUaGVyZSBpcyBhIHRyaWNrIHRvIGRlZmluZSBhIG1hcHBpbmcgdGhhdCB3b3JrcyBpbiBOb3JtYWwgYW5kIE9wZXJhdG9yLXBlbmRpbmcKK21vZGUsIGJ1dCBub3QgaW4gVmlzdWFsIG1vZGUuICBGaXJzdCBkZWZpbmUgaXQgZm9yIGFsbCB0aHJlZSBtb2RlcywgdGhlbgorZGVsZXRlIGl0IGZvciBWaXN1YWwgbW9kZTogPgorCisJOm1hcCA8Qy1BPiAvLS0tPjxDUj4KKwk6dnVubWFwIDxDLUE+CisKK05vdGljZSB0aGF0IHRoZSBmaXZlIGNoYXJhY3RlcnMgIjxDLUE+IiBzdGFuZCBmb3IgdGhlIHNpbmdsZSBrZXkgQ1RSTC1BLgorCitUbyByZW1vdmUgYWxsIG1hcHBpbmdzIHVzZSB0aGUgfDptYXBjbGVhcnwgY29tbWFuZC4gIFlvdSBjYW4gZ3Vlc3MgdGhlCit2YXJpYXRpb25zIGZvciBkaWZmZXJlbnQgbW9kZXMgYnkgbm93LiAgQmUgY2FyZWZ1bCB3aXRoIHRoaXMgY29tbWFuZCwgaXQgY2FuJ3QKK2JlIHVuZG9uZS4KKworCitTUEVDSUFMIENIQVJBQ1RFUlMKKworVGhlICI6bWFwIiBjb21tYW5kIGNhbiBiZSBmb2xsb3dlZCBieSBhbm90aGVyIGNvbW1hbmQuICBBIHwgY2hhcmFjdGVyCitzZXBhcmF0ZXMgdGhlIHR3byBjb21tYW5kcy4gIFRoaXMgYWxzbyBtZWFucyB0aGF0IGEgfCBjaGFyYWN0ZXIgY2FuJ3QgYmUgdXNlZAoraW5zaWRlIGEgbWFwIGNvbW1hbmQuICBUbyBpbmNsdWRlIG9uZSwgdXNlIDxCYXI+IChmaXZlIGNoYXJhY3RlcnMpLiAgRXhhbXBsZToKKz4KKwk6bWFwIDxGOD4gOndyaXRlIDxCYXI+ICFjaGVja2luICU8Q1I+CisKK1RoZSBzYW1lIHByb2JsZW0gYXBwbGllcyB0byB0aGUgIjp1bm1hcCIgY29tbWFuZCwgd2l0aCB0aGUgYWRkaXRpb24gdGhhdCB5b3UKK2hhdmUgdG8gd2F0Y2ggb3V0IGZvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4gIFRoZXNlIHR3byBjb21tYW5kcyBhcmUgZGlmZmVyZW50OgorPgorCTp1bm1hcCBhIHwgdW5tYXAgYgorCTp1bm1hcCBhfCB1bm1hcCBiCisKK1RoZSBmaXJzdCBjb21tYW5kIHRyaWVzIHRvIHVubWFwICJhICIsIHdpdGggYSB0cmFpbGluZyBzcGFjZS4KKworV2hlbiB1c2luZyBhIHNwYWNlIGluc2lkZSBhIG1hcHBpbmcsIHVzZSA8U3BhY2U+IChzZXZlbiBjaGFyYWN0ZXJzKTogPgorCisJOm1hcCA8U3BhY2U+IFcKKworVGhpcyBtYWtlcyB0aGUgc3BhY2ViYXIgbW92ZSBhIGJsYW5rLXNlcGFyYXRlZCB3b3JkIGZvcndhcmQuCisKK0l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgYSBjb21tZW50IGRpcmVjdGx5IGFmdGVyIGEgbWFwcGluZywgYmVjYXVzZSB0aGUgIgorY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUgbWFwcGluZy4gIFlvdSBjYW4gdXNlIHwiLCB0aGlzCitzdGFydHMgYSBuZXcsIGVtcHR5IGNvbW1hbmQgd2l0aCBhIGNvbW1lbnQuICBFeGFtcGxlOiA+CisKKwk6bWFwIDxTcGFjZT4gV3wgICAgICIgVXNlIHNwYWNlYmFyIHRvIG1vdmUgZm9yd2FyZCBhIHdvcmQKKworCitNQVBQSU5HUyBBTkQgQUJCUkVWSUFUSU9OUworCitBYmJyZXZpYXRpb25zIGFyZSBhIGxvdCBsaWtlIEluc2VydCBtb2RlIG1hcHBpbmdzLiAgVGhlIGFyZ3VtZW50cyBhcmUgaGFuZGxlZAoraW4gdGhlIHNhbWUgd2F5LiAgVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGUgd2F5IHRoZXkgYXJlIHRyaWdnZXJlZC4gIEFuCithYmJyZXZpYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IHR5cGluZyBhIG5vbi13b3JkIGNoYXJhY3RlciBhZnRlciB0aGUgd29yZC4gIEEKK21hcHBpbmcgaXMgdHJpZ2dlcmVkIHdoZW4gdHlwaW5nIHRoZSBsYXN0IGNoYXJhY3Rlci4KKyAgIEFub3RoZXIgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBjaGFyYWN0ZXJzIHlvdSB0eXBlIGZvciBhbiBhYmJyZXZpYXRpb24gYXJlCitpbnNlcnRlZCBpbiB0aGUgdGV4dCB3aGlsZSB5b3UgdHlwZSB0aGVtLiAgV2hlbiB0aGUgYWJicmV2aWF0aW9uIGlzIHRyaWdnZXJlZAordGhlc2UgY2hhcmFjdGVycyBhcmUgZGVsZXRlZCBhbmQgcmVwbGFjZWQgYnkgd2hhdCB0aGUgYWJicmV2aWF0aW9uIHByb2R1Y2VzLgorV2hlbiB0eXBpbmcgdGhlIGNoYXJhY3RlcnMgZm9yIGEgbWFwcGluZywgbm90aGluZyBpcyBpbnNlcnRlZCB1bnRpbCB5b3UgdHlwZQordGhlIGxhc3QgY2hhcmFjdGVyIHRoYXQgdHJpZ2dlcnMgaXQuICBJZiB0aGUgJ3Nob3djbWQnIG9wdGlvbiBpcyBzZXQsIHRoZQordHlwZWQgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIGluIHRoZSBsYXN0IGxpbmUgb2YgdGhlIFZpbSB3aW5kb3cuCisgICBBbiBleGNlcHRpb24gaXMgd2hlbiBhIG1hcHBpbmcgaXMgYW1iaWd1b3VzLiAgU3VwcG9zZSB5b3UgaGF2ZSBkb25lIHR3bworbWFwcGluZ3M6ID4KKworCTppbWFwIGFhIGZvbworCTppbWFwIGFhYSBiYXIKKworTm93LCB3aGVuIHlvdSB0eXBlICJhYSIsIFZpbSBkb2Vzbid0IGtub3cgaWYgaXQgc2hvdWxkIGFwcGx5IHRoZSBmaXJzdCBvciB0aGUKK3NlY29uZCBtYXBwaW5nLiAgSXQgd2FpdHMgZm9yIGFub3RoZXIgY2hhcmFjdGVyIHRvIGJlIHR5cGVkLiAgSWYgaXQgaXMgYW4gImEiLAordGhlIHNlY29uZCBtYXBwaW5nIGlzIGFwcGxpZWQgYW5kIHJlc3VsdHMgaW4gImJhciIuICBJZiBpdCBpcyBhIHNwYWNlLCBmb3IKK2V4YW1wbGUsIHRoZSBmaXJzdCBtYXBwaW5nIGlzIGFwcGxpZWQsIHJlc3VsdGluZyBpbiAiZm9vIiwgYW5kIHRoZW4gdGhlIHNwYWNlCitpcyBpbnNlcnRlZC4KKworCitBRERJVElPTkFMTFkuLi4KKworVGhlIDxzY3JpcHQ+IGtleXdvcmQgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIG1hcHBpbmcgbG9jYWwgdG8gYSBzY3JpcHQuICBTZWUKK3w6bWFwLTxzY3JpcHQ+fC4KKworVGhlIDxidWZmZXI+IGtleXdvcmQgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIG1hcHBpbmcgbG9jYWwgdG8gYSBzcGVjaWZpYyBidWZmZXIuCitTZWUgfDptYXAtPGJ1ZmZlcj58CisKK1RoZSA8dW5pcXVlPiBrZXl3b3JkIGNhbiBiZSB1c2VkIHRvIG1ha2UgZGVmaW5pbmcgYSBuZXcgbWFwcGluZyBmYWlsIHdoZW4gaXQKK2FscmVhZHkgZXhpc3RzLiAgT3RoZXJ3aXNlIGEgbmV3IG1hcHBpbmcgc2ltcGx5IG92ZXJ3cml0ZXMgdGhlIG9sZCBvbmUuICBTZWUKK3w6bWFwLTx1bmlxdWU+fC4KKworVG8gbWFrZSBhIGtleSBkbyBub3RoaW5nLCBtYXAgaXQgdG8gPE5vcD4gKGZpdmUgY2hhcmFjdGVycykuICBUaGlzIHdpbGwgbWFrZQordGhlIDxGNz4ga2V5IGRvIG5vdGhpbmcgYXQgYWxsOiA+CisKKwk6bWFwIDxGNz4gPE5vcD58IG1hcCEgPEY3PiA8Tm9wPgorCitUaGVyZSBtdXN0IGJlIG5vIHNwYWNlIGFmdGVyIDxOb3A+LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MC4yKglEZWZpbmluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMKKworVGhlIFZpbSBlZGl0b3IgZW5hYmxlcyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGNvbW1hbmRzLiAgWW91IGV4ZWN1dGUgdGhlc2UKK2NvbW1hbmRzIGp1c3QgbGlrZSBhbnkgb3RoZXIgQ29tbWFuZC1saW5lIG1vZGUgY29tbWFuZC4KKyAgIFRvIGRlZmluZSBhIGNvbW1hbmQsIHVzZSB0aGUgIjpjb21tYW5kIiBjb21tYW5kLCBhcyBmb2xsb3dzOiA+CisKKwk6Y29tbWFuZCBEZWxldGVGaXJzdCAxZGVsZXRlCisKK05vdyB3aGVuIHlvdSBleGVjdXRlIHRoZSBjb21tYW5kICI6RGVsZXRlRmlyc3QiIFZpbSBleGVjdXRlcyAiOjFkZWxldGUiLCB3aGljaAorZGVsZXRlcyB0aGUgZmlyc3QgbGluZS4KKworCU5vdGU6CisJVXNlci1kZWZpbmVkIGNvbW1hbmRzIG11c3Qgc3RhcnQgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLiAgWW91IGNhbm5vdAorCXVzZSAiOlgiLCAiOk5leHQiIGFuZCAiOlByaW50Ii4gIFRoZSB1bmRlcnNjb3JlIGNhbm5vdCBiZSB1c2VkISAgWW91CisJY2FuIHVzZSBkaWdpdHMsIGJ1dCB0aGlzIGlzIGRpc2NvdXJhZ2VkLgorCitUbyBsaXN0IHRoZSB1c2VyLWRlZmluZWQgY29tbWFuZHMsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6Y29tbWFuZAorCitKdXN0IGxpa2Ugd2l0aCB0aGUgYnVpbHRpbiBjb21tYW5kcywgdGhlIHVzZXIgZGVmaW5lZCBjb21tYW5kcyBjYW4gYmUKK2FiYnJldmlhdGVkLiAgWW91IG5lZWQgdG8gdHlwZSBqdXN0IGVub3VnaCB0byBkaXN0aW5ndWlzaCB0aGUgY29tbWFuZCBmcm9tCithbm90aGVyLiAgQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBmdWxsIG5hbWUuCisKKworTlVNQkVSIE9GIEFSR1VNRU5UUworCitVc2VyLWRlZmluZWQgY29tbWFuZHMgY2FuIHRha2UgYSBzZXJpZXMgb2YgYXJndW1lbnRzLiAgVGhlIG51bWJlciBvZiBhcmd1bWVudHMKK211c3QgYmUgc3BlY2lmaWVkIGJ5IHRoZSAtbmFyZ3Mgb3B0aW9uLiAgRm9yIGluc3RhbmNlLCB0aGUgZXhhbXBsZQorOkRlbGV0ZUZpcnN0IGNvbW1hbmQgdGFrZXMgbm8gYXJndW1lbnRzLCBzbyB5b3UgY291bGQgaGF2ZSBkZWZpbmVkIGl0IGFzCitmb2xsb3dzOiA+CisKKwk6Y29tbWFuZCAtbmFyZ3M9MCBEZWxldGVGaXJzdCAxZGVsZXRlCisKK0hvd2V2ZXIsIGJlY2F1c2UgemVybyBhcmd1bWVudHMgaXMgdGhlIGRlZmF1bHQsIHlvdSBkbyBub3QgbmVlZCB0byBhZGQKKyItbmFyZ3M9MCIuICBUaGUgb3RoZXIgdmFsdWVzIG9mIC1uYXJncyBhcmUgYXMgZm9sbG93czoKKworCS1uYXJncz0wCU5vIGFyZ3VtZW50cworCS1uYXJncz0xCU9uZSBhcmd1bWVudAorCS1uYXJncz0qCUFueSBudW1iZXIgb2YgYXJndW1lbnRzCisJLW5hcmdzPT8JWmVybyBvciBvbmUgYXJndW1lbnQKKwktbmFyZ3M9KwlPbmUgb3IgbW9yZSBhcmd1bWVudHMKKworCitVU0lORyBUSEUgQVJHVU1FTlRTCisKK0luc2lkZSB0aGUgY29tbWFuZCBkZWZpbml0aW9uLCB0aGUgYXJndW1lbnRzIGFyZSByZXByZXNlbnRlZCBieSB0aGUKKzxhcmdzPiBrZXl3b3JkLiAgRm9yIGV4YW1wbGU6ID4KKworCTpjb21tYW5kIC1uYXJncz0rIFNheSA6ZWNobyAiPGFyZ3M+IgorCitOb3cgd2hlbiB5b3UgdHlwZSA+CisKKwk6U2F5IEhlbGxvIFdvcmxkCisKK1ZpbSBlY2hvZXMgIkhlbGxvIFdvcmxkIi4gIEhvd2V2ZXIsIGlmIHlvdSBhZGQgYSBkb3VibGUgcXVvdGUsIGl0IHdvbid0IHdvcmsuCitGb3IgZXhhbXBsZTogPgorCisJOlNheSBoZSBzYWlkICJoZWxsbyIKKworVG8gZ2V0IHNwZWNpYWwgY2hhcmFjdGVycyB0dXJuZWQgaW50byBhIHN0cmluZywgcHJvcGVybHkgZXNjYXBlZCB0byB1c2UgYXMgYW4KK2V4cHJlc3Npb24sIHVzZSAiPHEtYXJncz4iOiA+CisKKwk6Y29tbWFuZCAtbmFyZ3M9KyBTYXkgOmVjaG8gPHEtYXJncz4KKworTm93IHRoZSBhYm92ZSAiOlNheSIgY29tbWFuZCB3aWxsIHJlc3VsdCBpbiB0aGlzIHRvIGJlIGV4ZWN1dGVkOiA+CisKKwk6ZWNobyAiaGUgc2FpZCBcImhlbGxvXCIiCisKK1RoZSA8Zi1hcmdzPiBrZXl3b3JkIGNvbnRhaW5zIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZSA8YXJncz4ga2V5d29yZCwKK2V4Y2VwdCBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgdXNlIGFzIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGU6Cis+CisJOmNvbW1hbmQgLW5hcmdzPSogRG9JdCA6Y2FsbCBBRnVuY3Rpb24oPGYtYXJncz4pCisJOkRvSXQgYSBiIGMKKworRXhlY3V0ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kOiA+CisKKwk6Y2FsbCBBRnVuY3Rpb24oImEiLCAiYiIsICJjIikKKworCitMSU5FIFJBTkdFCisKK1NvbWUgY29tbWFuZHMgdGFrZSBhIHJhbmdlIGFzIHRoZWlyIGFyZ3VtZW50LiAgVG8gdGVsbCBWaW0gdGhhdCB5b3UgYXJlCitkZWZpbmluZyBzdWNoIGEgY29tbWFuZCwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIC1yYW5nZSBvcHRpb24uICBUaGUgdmFsdWVzIGZvcgordGhpcyBvcHRpb24gYXJlIGFzIGZvbGxvd3M6CisKKwktcmFuZ2UJCVJhbmdlIGlzIGFsbG93ZWQ7IGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgbGluZS4KKwktcmFuZ2U9JQlSYW5nZSBpcyBhbGxvd2VkOyBkZWZhdWx0IGlzIHRoZSB3aG9sZSBmaWxlLgorCS1yYW5nZT17Y291bnR9CVJhbmdlIGlzIGFsbG93ZWQ7IHRoZSBsYXN0IG51bWJlciBpbiBpdCBpcyB1c2VkIGFzIGEKKwkJCXNpbmdsZSBudW1iZXIgd2hvc2UgZGVmYXVsdCBpcyB7Y291bnR9LgorCitXaGVuIGEgcmFuZ2UgaXMgc3BlY2lmaWVkLCB0aGUga2V5d29yZHMgPGxpbmUxPiBhbmQgPGxpbmUyPiBnZXQgdGhlIHZhbHVlcyBvZgordGhlIGZpcnN0IGFuZCBsYXN0IGxpbmUgaW4gdGhlIHJhbmdlLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZAorZGVmaW5lcyB0aGUgU2F2ZUl0IGNvbW1hbmQsIHdoaWNoIHdyaXRlcyBvdXQgdGhlIHNwZWNpZmllZCByYW5nZSB0byB0aGUgZmlsZQorInNhdmVfZmlsZSI6ID4KKworCTpjb21tYW5kIC1yYW5nZT0lIFNhdmVJdCA6PGxpbmUxPiw8bGluZTI+d3JpdGUhIHNhdmVfZmlsZQorCisKK09USEVSIE9QVElPTlMKKworU29tZSBvZiB0aGUgb3RoZXIgb3B0aW9ucyBhbmQga2V5d29yZHMgYXJlIGFzIGZvbGxvd3M6CisKKwktY291bnQ9e251bWJlcn0JCVRoZSBjb21tYW5kIGNhbiB0YWtlIGEgY291bnQgd2hvc2UgZGVmYXVsdCBpcworCQkJCXtudW1iZXJ9LiAgVGhlIHJlc3VsdGluZyBjb3VudCBjYW4gYmUgdXNlZAorCQkJCXRocm91Z2ggdGhlIDxjb3VudD4ga2V5d29yZC4KKwktYmFuZwkJCVlvdSBjYW4gdXNlIGEgIS4gSWYgcHJlc2VudCwgdXNpbmcgPGJhbmc+IHdpbGwKKwkJCQlyZXN1bHQgaW4gYSAhLgorCS1yZWdpc3RlcgkJWW91IGNhbiBzcGVjaWZ5IGEgcmVnaXN0ZXIuIChUaGUgZGVmYXVsdCBpcworCQkJCXRoZSB1bm5hbWVkIHJlZ2lzdGVyLikKKwkJCQlUaGUgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgYXMKKwkJCQk8cmVnPiAoYS5rLmEuIDxyZWdpc3Rlcj4pLgorCS1jb21wbGV0ZT17dHlwZX0JVHlwZSBvZiBjb21tYW5kLWxpbmUgY29tcGxldGlvbiB1c2VkLiAgU2VlCisJCQkJfDpjb21tYW5kLWNvbXBsZXRpb258IGZvciB0aGUgbGlzdCBvZiBwb3NzaWJsZQorCQkJCXZhbHVlcy4KKwktYmFyCQkJVGhlIGNvbW1hbmQgY2FuIGJlIGZvbGxvd2VkIGJ5IHwgYW5kIGFub3RoZXIKKwkJCQljb21tYW5kLCBvciAiIGFuZCBhIGNvbW1lbnQuCisJLWJ1ZmZlcgkJCVRoZSBjb21tYW5kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudAorCQkJCWJ1ZmZlci4KKworRmluYWxseSwgeW91IGhhdmUgdGhlIDxsdD4ga2V5d29yZC4gIEl0IHN0YW5kcyBmb3IgdGhlIGNoYXJhY3RlciA8LiAgVXNlIHRoaXMKK3RvIGVzY2FwZSB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIHRoZSA8PiBpdGVtcyBtZW50aW9uZWQuCisKKworUkVERUZJTklORyBBTkQgREVMRVRJTkcKKworVG8gcmVkZWZpbmUgdGhlIHNhbWUgY29tbWFuZCB1c2UgdGhlICEgYXJndW1lbnQ6ID4KKworCTpjb21tYW5kIC1uYXJncz0rIFNheSA6ZWNobyAiPGFyZ3M+IgorCTpjb21tYW5kISAtbmFyZ3M9KyBTYXkgOmVjaG8gPHEtYXJncz4KKworVG8gZGVsZXRlIGEgdXNlciBjb21tYW5kIHVzZSAiOmRlbGNvbW1hbmQiLiAgSXQgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoCitpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC4gIEV4YW1wbGU6ID4KKworCTpkZWxjb21tYW5kIFNhdmVJdAorCitUbyBkZWxldGUgYWxsIHRoZSB1c2VyIGNvbW1hbmRzOiA+CisKKwk6Y29tY2xlYXIKKworQ2FyZWZ1bCwgdGhpcyBjYW4ndCBiZSB1bmRvbmUhCisKK01vcmUgZGV0YWlscyBhYm91dCBhbGwgdGhpcyBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbDogfHVzZXItY29tbWFuZHN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MC4zKglBdXRvY29tbWFuZHMKKworQW4gYXV0b2NvbW1hbmQgaXMgYSBjb21tYW5kIHRoYXQgaXMgZXhlY3V0ZWQgYXV0b21hdGljYWxseSBpbiByZXNwb25zZSB0byBzb21lCitldmVudCwgc3VjaCBhcyBhIGZpbGUgYmVpbmcgcmVhZCBvciB3cml0dGVuIG9yIGEgYnVmZmVyIGNoYW5nZS4gVGhyb3VnaCB0aGUKK3VzZSBvZiBhdXRvY29tbWFuZHMgeW91IGNhbiB0cmFpbiBWaW0gdG8gZWRpdCBjb21wcmVzc2VkIGZpbGVzLCBmb3IgZXhhbXBsZS4KK1RoYXQgaXMgdXNlZCBpbiB0aGUgfGd6aXB8IHBsdWdpbi4KKyAgIEF1dG9jb21tYW5kcyBhcmUgdmVyeSBwb3dlcmZ1bC4gIFVzZSB0aGVtIHdpdGggY2FyZSBhbmQgdGhleSB3aWxsIGhlbHAgeW91Cithdm9pZCB0eXBpbmcgbWFueSBjb21tYW5kcy4gIFVzZSB0aGVtIGNhcmVsZXNzbHkgYW5kIHRoZXkgd2lsbCBjYXVzZSBhIGxvdCBvZgordHJvdWJsZS4KKworU3VwcG9zZSB5b3Ugd2FudCB0byByZXBsYWNlIGEgZGF0ZSBzdGFtcCBvbiB0aGUgZW5kIG9mIGEgZmlsZSBldmVyeSB0aW1lIGl0IGlzCit3cml0dGVuLiAgRmlyc3QgeW91IGRlZmluZSBhIGZ1bmN0aW9uOiA+CisKKwk6ZnVuY3Rpb24gRGF0ZUluc2VydCgpCisJOiAgJGRlbGV0ZQorCTogIHJlYWQgIWRhdGUKKwk6ZW5kZnVuY3Rpb24KKworWW91IHdhbnQgdGhpcyBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZWFjaCB0aW1lLCBqdXN0IGJlZm9yZSBhIGZpbGUgaXMgd3JpdHRlbi4KK1RoaXMgd2lsbCBtYWtlIHRoYXQgaGFwcGVuOiA+CisKKwk6YXV0b2NtZCBGaWxlV3JpdGVQcmUgKiAgY2FsbCBEYXRlSW5zZXJ0KCkKKworIkZpbGVXcml0ZVByZSIgaXMgdGhlIGV2ZW50IGZvciB3aGljaCB0aGlzIGF1dG9jb21tYW5kIGlzIHRyaWdnZXJlZDogSnVzdAorYmVmb3JlIChwcmUpIHdyaXRpbmcgYSBmaWxlLiAgVGhlICIqIiBpcyBhIHBhdHRlcm4gdG8gbWF0Y2ggd2l0aCB0aGUgZmlsZQorbmFtZS4gIEluIHRoaXMgY2FzZSBpdCBtYXRjaGVzIGFsbCBmaWxlcy4KKyAgIFdpdGggdGhpcyBjb21tYW5kIGVuYWJsZWQsIHdoZW4geW91IGRvIGEgIjp3cml0ZSIsIFZpbSBjaGVja3MgZm9yIGFueQorbWF0Y2hpbmcgRmlsZVdyaXRlUHJlIGF1dG9jb21tYW5kcyBhbmQgZXhlY3V0ZXMgdGhlbSwgYW5kIHRoZW4gaXQKK3BlcmZvcm1zIHRoZSAiOndyaXRlIi4KKyAgIFRoZSBnZW5lcmFsIGZvcm0gb2YgdGhlIDphdXRvY21kIGNvbW1hbmQgaXMgYXMgZm9sbG93czogPgorCisJOmF1dG9jbWQgW2dyb3VwXSB7ZXZlbnRzfSB7ZmlsZV9wYXR0ZXJufSBbbmVzdGVkXSB7Y29tbWFuZH0KKworVGhlIFtncm91cF0gbmFtZSBpcyBvcHRpb25hbC4gIEl0IGlzIHVzZWQgaW4gbWFuYWdpbmcgYW5kIGNhbGxpbmcgdGhlIGNvbW1hbmRzCisobW9yZSBvbiB0aGlzIGxhdGVyKS4gIFRoZSB7ZXZlbnRzfSBwYXJhbWV0ZXIgaXMgYSBsaXN0IG9mIGV2ZW50cyAoY29tbWEKK3NlcGFyYXRlZCkgdGhhdCB0cmlnZ2VyIHRoZSBjb21tYW5kLgorICAge2ZpbGVfcGF0dGVybn0gaXMgYSBmaWxlbmFtZSwgdXN1YWxseSB3aXRoIHdpbGRjYXJkcy4gIEZvciBleGFtcGxlLCB1c2luZworIioudHh0IiBtYWtlcyB0aGUgYXV0b2NvbW1hbmQgYmUgdXNlZCBmb3IgYWxsIGZpbGVzIHdob3NlIG5hbWUgZW5kIGluICIudHh0Ii4KK1RoZSBvcHRpb25hbCBbbmVzdGVkXSBmbGFnIGFsbG93cyBmb3IgbmVzdGluZyBvZiBhdXRvY29tbWFuZHMgKHNlZSBiZWxvdyksIGFuZAorZmluYWxseSwge2NvbW1hbmR9IGlzIHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLgorCisKK0VWRU5UUworCitPbmUgb2YgdGhlIG1vc3QgdXNlZnVsIGV2ZW50cyBpcyBCdWZSZWFkUG9zdC4gIEl0IGlzIHRyaWdnZXJlZCBhZnRlciBhIG5ldworZmlsZSBpcyBiZWluZyBlZGl0ZWQuICBJdCBpcyBjb21tb25seSB1c2VkIHRvIHNldCBvcHRpb24gdmFsdWVzLiAgRm9yIGV4YW1wbGUsCit5b3Uga25vdyB0aGF0ICIqLmdzbSIgZmlsZXMgYXJlIEdOVSBhc3NlbWJseSBsYW5ndWFnZS4gIFRvIGdldCB0aGUgc3ludGF4IGZpbGUKK3JpZ2h0LCBkZWZpbmUgdGhpcyBhdXRvY29tbWFuZDogPgorCisJOmF1dG9jbWQgQnVmUmVhZFBvc3QgKi5nc20gIHNldCBmaWxldHlwZT1hc20KKworSWYgVmltIGlzIGFibGUgdG8gZGV0ZWN0IHRoZSB0eXBlIG9mIGZpbGUsIGl0IHdpbGwgc2V0IHRoZSAnZmlsZXR5cGUnIG9wdGlvbgorZm9yIHlvdS4gIFRoaXMgdHJpZ2dlcnMgdGhlIEZpbGV0eXBlIGV2ZW50LiAgVXNlIHRoaXMgdG8gZG8gc29tZXRoaW5nIHdoZW4gYQorY2VydGFpbiB0eXBlIG9mIGZpbGUgaXMgZWRpdGVkLiAgRm9yIGV4YW1wbGUsIHRvIGxvYWQgYSBsaXN0IG9mIGFiYnJldmlhdGlvbnMKK2ZvciB0ZXh0IGZpbGVzOiA+CisKKwk6YXV0b2NtZCBGaWxldHlwZSB0ZXh0ICBzb3VyY2Ugfi8udmltL2FiYnJldnMudmltCisKK1doZW4gc3RhcnRpbmcgdG8gZWRpdCBhIG5ldyBmaWxlLCB5b3UgY291bGQgbWFrZSBWaW0gaW5zZXJ0IGEgc2tlbGV0b246ID4KKworCTphdXRvY21kIEJ1Zk5ld0ZpbGUgKi5bY2hdICAwcmVhZCB+L3NrZWxldG9ucy9za2VsLmMKKworU2VlIHxhdXRvY21kLWV2ZW50c3wgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBldmVudHMuCisKKworUEFUVEVSTlMKKworVGhlIHtmaWxlX3BhdHRlcm59IGFyZ3VtZW50IGNhbiBhY3R1YWxseSBiZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGUKK3BhdHRlcm5zLiAgRm9yIGV4YW1wbGU6ICIqLmMsKi5oIiBtYXRjaGVzIGZpbGVzIGVuZGluZyBpbiAiLmMiIGFuZCAiLmgiLgorICAgVGhlIHVzdWFsIGZpbGUgd2lsZGNhcmRzIGNhbiBiZSB1c2VkLiAgSGVyZSBpcyBhIHN1bW1hcnkgb2YgdGhlIG1vc3Qgb2Z0ZW4KK3VzZWQgb25lczoKKworCSoJCU1hdGNoIGFueSBjaGFyYWN0ZXIgYW55IG51bWJlciBvZiB0aW1lcworCT8JCU1hdGNoIGFueSBjaGFyYWN0ZXIgb25jZQorCVthYmNdCQlNYXRjaCB0aGUgY2hhcmFjdGVyIGEsIGIgb3IgYworCS4JCU1hdGNoZXMgYSBkb3QKKwlhe2IsY30JCU1hdGNoZXMgImFiIiBhbmQgImFjIgorCitXaGVuIHRoZSBwYXR0ZXJuIGluY2x1ZGVzIGEgc2xhc2ggKC8pIFZpbSB3aWxsIGNvbXBhcmUgZGlyZWN0b3J5IG5hbWVzLgorV2l0aG91dCB0aGUgc2xhc2ggb25seSB0aGUgbGFzdCBwYXJ0IG9mIGEgZmlsZSBuYW1lIGlzIHVzZWQuICBGb3IgZXhhbXBsZSwKKyIqLnR4dCIgbWF0Y2hlcyAiL2hvbWUvYmllcC9yZWFkbWUudHh0Ii4gIFRoZSBwYXR0ZXJuICIvaG9tZS9iaWVwLyoiIHdvdWxkCithbHNvIG1hdGNoIGl0LiAgQnV0ICJob21lL2Zvby8qLnR4dCIgd291bGRuJ3QuCisgICBXaGVuIGluY2x1ZGluZyBhIHNsYXNoLCBWaW0gbWF0Y2hlcyB0aGUgcGF0dGVybiBhZ2FpbnN0IGJvdGggdGhlIGZ1bGwgcGF0aAorb2YgdGhlIGZpbGUgKCIvaG9tZS9iaWVwL3JlYWRtZS50eHQiKSBhbmQgdGhlIHJlbGF0aXZlIHBhdGggKGUuZy4sCisiYmllcC9yZWFkbWUudHh0IikuCisKKwlOb3RlOgorCVdoZW4gd29ya2luZyBvbiBhIHN5c3RlbSB0aGF0IHVzZXMgYSBiYWNrc2xhc2ggYXMgZmlsZSBzZXBhcmF0b3IsIHN1Y2gKKwlhcyBNUy1XaW5kb3dzLCB5b3Ugc3RpbGwgdXNlIGZvcndhcmQgc2xhc2hlcyBpbiBhdXRvY29tbWFuZHMuICBUaGlzCisJbWFrZXMgaXQgZWFzaWVyIHRvIHdyaXRlIHRoZSBwYXR0ZXJuLCBzaW5jZSBhIGJhY2tzbGFzaCBoYXMgYSBzcGVjaWFsCisJbWVhbmluZy4gIEl0IGFsc28gbWFrZXMgdGhlIGF1dG9jb21tYW5kcyBwb3J0YWJsZS4KKworCitERUxFVElORworCitUbyBkZWxldGUgYW4gYXV0b2NvbW1hbmQsIHVzZSB0aGUgc2FtZSBjb21tYW5kIGFzIHdoYXQgaXQgd2FzIGRlZmluZWQgd2l0aCwKK2J1dCBsZWF2ZSBvdXQgdGhlIHtjb21tYW5kfSBhdCB0aGUgZW5kIGFuZCB1c2UgYSAhLiAgRXhhbXBsZTogPgorCisJOmF1dG9jbWQhIEZpbGVXcml0ZVByZSAqCisKK1RoaXMgd2lsbCBkZWxldGUgYWxsIGF1dG9jb21tYW5kcyBmb3IgdGhlICJGaWxlV3JpdGVQcmUiIGV2ZW50IHRoYXQgdXNlIHRoZQorIioiIHBhdHRlcm4uCisKKworTElTVElORworCitUbyBsaXN0IGFsbCB0aGUgY3VycmVudGx5IGRlZmluZWQgYXV0b2NvbW1hbmRzLCB1c2UgdGhpczogPgorCisJOmF1dG9jbWQKKworVGhlIGxpc3QgY2FuIGJlIHZlcnkgbG9uZywgZXNwZWNpYWxseSB3aGVuIGZpbGV0eXBlIGRldGVjdGlvbiBpcyB1c2VkLiAgVG8KK2xpc3Qgb25seSBwYXJ0IG9mIHRoZSBjb21tYW5kcywgc3BlY2lmeSB0aGUgZ3JvdXAsIGV2ZW50IGFuZC9vciBwYXR0ZXJuLiAgRm9yCitleGFtcGxlLCB0byBsaXN0IGFsbCBCdWZOZXdGaWxlIGF1dG9jb21tYW5kczogPgorCisJOmF1dG9jbWQgQnVmTmV3RmlsZQorCitUbyBsaXN0IGFsbCBhdXRvY29tbWFuZHMgZm9yIHRoZSBwYXR0ZXJuICIqLmMiOiA+CisKKwk6YXV0b2NtZCAqICouYworCitVc2luZyAiKiIgZm9yIHRoZSBldmVudCB3aWxsIGxpc3QgYWxsIHRoZSBldmVudHMuICBUbyBsaXN0IGFsbCBhdXRvY29tbWFuZHMKK2ZvciB0aGUgY3Byb2dyYW1zIGdyb3VwOiA+CisKKwk6YXV0b2NtZCBjcHJvZ3JhbXMKKworCitHUk9VUFMKKworVGhlIHtncm91cH0gaXRlbSwgdXNlZCB3aGVuIGRlZmluaW5nIGFuIGF1dG9jb21tYW5kLCBncm91cHMgcmVsYXRlZCBhdXRvY29tbWFuZHMKK3RvZ2V0aGVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBkZWxldGUgYWxsIHRoZSBhdXRvY29tbWFuZHMgaW4gYSBjZXJ0YWluIGdyb3VwLAorZm9yIGV4YW1wbGUuCisgICBXaGVuIGRlZmluaW5nIHNldmVyYWwgYXV0b2NvbW1hbmRzIGZvciBhIGNlcnRhaW4gZ3JvdXAsIHVzZSB0aGUgIjphdWdyb3VwIgorY29tbWFuZC4gIEZvciBleGFtcGxlLCBsZXQncyBkZWZpbmUgYXV0b2NvbW1hbmRzIGZvciBDIHByb2dyYW1zOiA+CisKKwk6YXVncm91cCBjcHJvZ3JhbXMKKwk6ICBhdXRvY21kIEJ1ZlJlYWRQb3N0ICouYywqLmggOnNldCBzdz00IHN0cz00CisJOiAgYXV0b2NtZCBCdWZSZWFkUG9zdCAqLmNwcCAgIDpzZXQgc3c9MyBzdHM9MworCTphdWdyb3VwIEVORAorCitUaGlzIHdpbGwgZG8gdGhlIHNhbWUgYXM6ID4KKworCTphdXRvY21kIGNwcm9ncmFtcyBCdWZSZWFkUG9zdCAqLmMsKi5oIDpzZXQgc3c9NCBzdHM9NAorCTphdXRvY21kIGNwcm9ncmFtcyBCdWZSZWFkUG9zdCAqLmNwcCAgIDpzZXQgc3c9MyBzdHM9MworCitUbyBkZWxldGUgYWxsIGF1dG9jb21tYW5kcyBpbiB0aGUgImNwcm9ncmFtcyIgZ3JvdXA6ID4KKworCTphdXRvY21kISBjcHJvZ3JhbXMKKworCitORVNUSU5HCisKK0dlbmVyYWxseSwgY29tbWFuZHMgZXhlY3V0ZWQgYXMgdGhlIHJlc3VsdCBvZiBhbiBhdXRvY29tbWFuZCBldmVudCB3aWxsIG5vdAordHJpZ2dlciBhbnkgbmV3IGV2ZW50cy4gIElmIHlvdSByZWFkIGEgZmlsZSBpbiByZXNwb25zZSB0byBhIEZpbGVDaGFuZ2VkU2hlbGwKK2V2ZW50LCBpdCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSBhdXRvY29tbWFuZHMgdGhhdCB3b3VsZCBzZXQgdGhlIHN5bnRheCwgZm9yCitleGFtcGxlLiAgVG8gbWFrZSB0aGUgZXZlbnRzIHRyaWdnZXJlZCwgYWRkIHRoZSAibmVzdGVkIiBhcmd1bWVudDogPgorCisJOmF1dG9jbWQgRmlsZUNoYW5nZWRTaGVsbCAqIG5lc3RlZCAgZWRpdAorCisKK0VYRUNVVElORyBBVVRPQ09NTUFORFMKKworSXQgaXMgcG9zc2libGUgdG8gdHJpZ2dlciBhbiBhdXRvY29tbWFuZCBieSBwcmV0ZW5kaW5nIGFuIGV2ZW50IGhhcyBvY2N1cnJlZC4KK1RoaXMgaXMgdXNlZnVsIHRvIGhhdmUgb25lIGF1dG9jb21tYW5kIHRyaWdnZXIgYW5vdGhlciBvbmUuICBFeGFtcGxlOiA+CisKKwk6YXV0b2NtZCBCdWZSZWFkUG9zdCAqLm5ldyAgZXhlY3V0ZSAiZG9hdXRvY21kIEJ1ZlJlYWRQb3N0ICIgLiBleHBhbmQoIjxhZmlsZT46ciIpCisKK1RoaXMgZGVmaW5lcyBhbiBhdXRvY29tbWFuZCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV3IGZpbGUgaGFzIGJlZW4gZWRpdGVkLgorVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAiLm5ldyIuICBUaGUgIjpleGVjdXRlIiBjb21tYW5kIHVzZXMgZXhwcmVzc2lvbgorZXZhbHVhdGlvbiB0byBmb3JtIGEgbmV3IGNvbW1hbmQgYW5kIGV4ZWN1dGUgaXQuICBXaGVuIGVkaXRpbmcgdGhlIGZpbGUKKyJ0cnlvdXQuYy5uZXciIHRoZSBleGVjdXRlZCBjb21tYW5kIHdpbGwgYmU6ID4KKworCTpkb2F1dG9jbWQgQnVmUmVhZFBvc3QgdHJ5b3V0LmMKKworVGhlIGV4cGFuZCgpIGZ1bmN0aW9uIHRha2VzIHRoZSAiPGFmaWxlPiIgYXJndW1lbnQsIHdoaWNoIHN0YW5kcyBmb3IgdGhlIGZpbGUKK25hbWUgdGhlIGF1dG9jb21tYW5kIHdhcyBleGVjdXRlZCBmb3IsIGFuZCB0YWtlcyB0aGUgcm9vdCBvZiB0aGUgZmlsZSBuYW1lCit3aXRoICI6ciIuCisKKyI6ZG9hdXRvY21kIiBleGVjdXRlcyBvbiB0aGUgY3VycmVudCBidWZmZXIuICBUaGUgIjpkb2F1dG9hbGwiIGNvbW1hbmQgd29ya3MKK2xpa2UgImRvYXV0b2NtZCIgZXhjZXB0IGl0IGV4ZWN1dGVzIG9uIGFsbCB0aGUgYnVmZmVycy4KKworCitVU0lORyBOT1JNQUwgTU9ERSBDT01NQU5EUworCitUaGUgY29tbWFuZHMgZXhlY3V0ZWQgYnkgYW4gYXV0b2NvbW1hbmQgYXJlIENvbW1hbmQtbGluZSBjb21tYW5kLiAgSWYgeW91IHdhbnQKK3RvIHVzZSBhIE5vcm1hbCBtb2RlIGNvbW1hbmQsIHRoZSAiOm5vcm1hbCIgY29tbWFuZCBjYW4gYmUgdXNlZC4gIEV4YW1wbGU6ID4KKworCTphdXRvY21kIEJ1ZlJlYWRQb3N0ICoubG9nIG5vcm1hbCBHCisKK1RoaXMgd2lsbCBtYWtlIHRoZSBjdXJzb3IganVtcCB0byB0aGUgbGFzdCBsaW5lIG9mICoubG9nIGZpbGVzIHdoZW4geW91IHN0YXJ0Cit0byBlZGl0IGl0LgorICAgVXNpbmcgdGhlICI6bm9ybWFsIiBjb21tYW5kIGlzIGEgYml0IHRyaWNreS4gIEZpcnN0IG9mIGFsbCwgbWFrZSBzdXJlIGl0cworYXJndW1lbnQgaXMgYSBjb21wbGV0ZSBjb21tYW5kLCBpbmNsdWRpbmcgYWxsIHRoZSBhcmd1bWVudHMuICBXaGVuIHlvdSB1c2UgImkiCit0byBnbyB0byBJbnNlcnQgbW9kZSwgdGhlcmUgbXVzdCBhbHNvIGJlIGEgPEVzYz4gdG8gbGVhdmUgSW5zZXJ0IG1vZGUgYWdhaW4uCitJZiB5b3UgdXNlIGEgIi8iIHRvIHN0YXJ0IGEgc2VhcmNoIHBhdHRlcm4sIHRoZXJlIG11c3QgYmUgYSA8Q1I+IHRvIGV4ZWN1dGUKK2l0LgorICAgVGhlICI6bm9ybWFsIiBjb21tYW5kIHVzZXMgYWxsIHRoZSB0ZXh0IGFmdGVyIGl0IGFzIGNvbW1hbmRzLiAgVGh1cyB0aGVyZQorY2FuIGJlIG5vIHwgYW5kIGFub3RoZXIgY29tbWFuZCBmb2xsb3dpbmcuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCBwdXQgdGhlCisiOm5vcm1hbCIgY29tbWFuZCBpbnNpZGUgYW4gIjpleGVjdXRlIiBjb21tYW5kLiAgVGhpcyBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlCit0byBwYXNzIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gYSBjb252ZW5pZW50IHdheS4gIEV4YW1wbGU6ID4KKworCTphdXRvY21kIEJ1ZlJlYWRQb3N0ICouY2hnIGV4ZWN1dGUgIm5vcm1hbCBPTmV3IGVudHJ5Olw8RXNjPiIgfAorCQlcIDFyZWFkICFkYXRlCisKK1RoaXMgYWxzbyBzaG93cyB0aGUgdXNlIG9mIGEgYmFja3NsYXNoIHRvIGJyZWFrIGEgbG9uZyBjb21tYW5kIGludG8gbW9yZQorbGluZXMuICBUaGlzIGNhbiBiZSB1c2VkIGluIFZpbSBzY3JpcHRzIChub3QgYXQgdGhlIGNvbW1hbmQgbGluZSkuCisKK1doZW4geW91IHdhbnQgdGhlIGF1dG9jb21tYW5kIGRvIHNvbWV0aGluZyBjb21wbGljYXRlZCwgd2hpY2ggaW52b2x2ZXMganVtcGluZworYXJvdW5kIGluIHRoZSBmaWxlIGFuZCB0aGVuIHJldHVybmluZyB0byB0aGUgb3JpZ2luYWwgcG9zaXRpb24sIHlvdSBtYXkgd2FudAordG8gcmVzdG9yZSB0aGUgdmlldyBvbiB0aGUgZmlsZS4gIFNlZSB8cmVzdG9yZS1wb3NpdGlvbnwgZm9yIGFuIGV4YW1wbGUuCisKKworSUdOT1JJTkcgRVZFTlRTCisKK0F0IHRpbWVzLCB5b3Ugd2lsbCBub3Qgd2FudCB0byB0cmlnZ2VyIGFuIGF1dG9jb21tYW5kLiAgVGhlICdldmVudGlnbm9yZScKK29wdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgZXZlbnRzIHRoYXQgd2lsbCBiZSB0b3RhbGx5IGlnbm9yZWQuICBGb3IgZXhhbXBsZSwKK3RoZSBmb2xsb3dpbmcgY2F1c2VzIGV2ZW50cyBmb3IgZW50ZXJpbmcgYW5kIGxlYXZpbmcgYSB3aW5kb3cgdG8gYmUgaWdub3JlZDogPgorCisJOnNldCBldmVudGlnbm9yZT1XaW5FbnRlcixXaW5MZWF2ZQorCitUbyBpZ25vcmUgYWxsIGV2ZW50cywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOnNldCBldmVudGlnbm9yZT1hbGwKKworVG8gc2V0IGl0IGJhY2sgdG8gdGhlIG5vcm1hbCBiZWhhdmlvciwgbWFrZSAnZXZlbnRpZ25vcmUnIGVtcHR5OiA+CisKKwk6c2V0IGV2ZW50aWdub3JlPQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzQxLnR4dHwgIFdyaXRlIGEgVmltIHNjcmlwdAorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl80MS50eHQgYi9ydW50aW1lL2RvYy91c3JfNDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZWEwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfNDEudHh0CkBAIC0wLDAgKzEsMTcyNCBAQAorKnVzcl80MS50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA0IE1heSAwNgorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICAgV3JpdGUgYSBWaW0gc2NyaXB0CisKKworVGhlIFZpbSBzY3JpcHQgbGFuZ3VhZ2UgaXMgdXNlZCBmb3IgdGhlIHN0YXJ0dXAgdmltcmMgZmlsZSwgc3ludGF4IGZpbGVzLCBhbmQKK21hbnkgb3RoZXIgdGhpbmdzLiAgVGhpcyBjaGFwdGVyIGV4cGxhaW5zIHRoZSBpdGVtcyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgVmltCitzY3JpcHQuICBUaGVyZSBhcmUgYSBsb3Qgb2YgdGhlbSwgdGh1cyB0aGlzIGlzIGEgbG9uZyBjaGFwdGVyLgorCit8NDEuMXwJSW50cm9kdWN0aW9uCit8NDEuMnwJVmFyaWFibGVzCit8NDEuM3wJRXhwcmVzc2lvbnMKK3w0MS40fAlDb25kaXRpb25hbHMKK3w0MS41fAlFeGVjdXRpbmcgYW4gZXhwcmVzc2lvbgorfDQxLjZ8CVVzaW5nIGZ1bmN0aW9ucworfDQxLjd8CURlZmluaW5nIGEgZnVuY3Rpb24KK3w0MS44fAlFeGNlcHRpb25zCit8NDEuOXwJVmFyaW91cyByZW1hcmtzCit8NDEuMTB8CVdyaXRpbmcgYSBwbHVnaW4KK3w0MS4xMXwJV3JpdGluZyBhIGZpbGV0eXBlIHBsdWdpbgorfDQxLjEyfAlXcml0aW5nIGEgY29tcGlsZXIgcGx1Z2luCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzQyLnR4dHwgIEFkZCBuZXcgbWVudXMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzQwLnR4dHwgIE1ha2UgbmV3IGNvbW1hbmRzCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MS4xKglJbnRyb2R1Y3Rpb24JCQkJCSp2aW0tc2NyaXB0LWludHJvKgorCitZb3VyIGZpcnN0IGV4cGVyaWVuY2Ugd2l0aCBWaW0gc2NyaXB0cyBpcyB0aGUgdmltcmMgZmlsZS4gIFZpbSByZWFkcyBpdCB3aGVuCitpdCBzdGFydHMgdXAgYW5kIGV4ZWN1dGVzIHRoZSBjb21tYW5kcy4gIFlvdSBjYW4gc2V0IG9wdGlvbnMgdG8gdmFsdWVzIHlvdQorcHJlZmVyLiAgQW5kIHlvdSBjYW4gdXNlIGFueSBjb2xvbiBjb21tYW5kIGluIGl0IChjb21tYW5kcyB0aGF0IHN0YXJ0IHdpdGggYQorIjoiOyB0aGVzZSBhcmUgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIEV4IGNvbW1hbmRzIG9yIGNvbW1hbmQtbGluZSBjb21tYW5kcykuCisgICBTeW50YXggZmlsZXMgYXJlIGFsc28gVmltIHNjcmlwdHMuICBBcyBhcmUgZmlsZXMgdGhhdCBzZXQgb3B0aW9ucyBmb3IgYQorc3BlY2lmaWMgZmlsZSB0eXBlLiAgQSBjb21wbGljYXRlZCBtYWNybyBjYW4gYmUgZGVmaW5lZCBieSBhIHNlcGFyYXRlIFZpbQorc2NyaXB0IGZpbGUuICBZb3UgY2FuIHRoaW5rIG9mIG90aGVyIHVzZXMgeW91cnNlbGYuCisKK0xldCdzIHN0YXJ0IHdpdGggYSBzaW1wbGUgZXhhbXBsZTogPgorCisJOmxldCBpID0gMQorCTp3aGlsZSBpIDwgNQorCTogIGVjaG8gImNvdW50IGlzIiBpCisJOiAgbGV0IGkgPSBpICsgMQorCTplbmR3aGlsZQorPAorCU5vdGU6CisJVGhlICI6IiBjaGFyYWN0ZXJzIGFyZSBub3QgcmVhbGx5IG5lZWRlZCBoZXJlLiAgWW91IG9ubHkgbmVlZCB0byB1c2UKKwl0aGVtIHdoZW4geW91IHR5cGUgYSBjb21tYW5kLiAgSW4gYSBWaW0gc2NyaXB0IGZpbGUgdGhleSBjYW4gYmUgbGVmdAorCW91dC4gIFdlIHdpbGwgdXNlIHRoZW0gaGVyZSBhbnl3YXkgdG8gbWFrZSBjbGVhciB0aGVzZSBhcmUgY29sb24KKwljb21tYW5kcyBhbmQgbWFrZSB0aGVtIHN0YW5kIG91dCBmcm9tIE5vcm1hbCBtb2RlIGNvbW1hbmRzLgorCitUaGUgIjpsZXQiIGNvbW1hbmQgYXNzaWducyBhIHZhbHVlIHRvIGEgdmFyaWFibGUuICBUaGUgZ2VuZXJpYyBmb3JtIGlzOiA+CisKKwk6bGV0IHt2YXJpYWJsZX0gPSB7ZXhwcmVzc2lvbn0KKworSW4gdGhpcyBjYXNlIHRoZSB2YXJpYWJsZSBuYW1lIGlzICJpIiBhbmQgdGhlIGV4cHJlc3Npb24gaXMgYSBzaW1wbGUgdmFsdWUsCit0aGUgbnVtYmVyIG9uZS4KKyAgIFRoZSAiOndoaWxlIiBjb21tYW5kIHN0YXJ0cyBhIGxvb3AuICBUaGUgZ2VuZXJpYyBmb3JtIGlzOiA+CisKKwk6d2hpbGUge2NvbmRpdGlvbn0KKwk6ICB7c3RhdGVtZW50c30KKwk6ZW5kd2hpbGUKKworVGhlIHN0YXRlbWVudHMgdW50aWwgdGhlIG1hdGNoaW5nICI6ZW5kd2hpbGUiIGFyZSBleGVjdXRlZCBmb3IgYXMgbG9uZyBhcyB0aGUKK2NvbmRpdGlvbiBpcyB0cnVlLiAgVGhlIGNvbmRpdGlvbiB1c2VkIGhlcmUgaXMgdGhlIGV4cHJlc3Npb24gImkgPCA1Ii4gIFRoaXMKK2lzIHRydWUgd2hlbiB0aGUgdmFyaWFibGUgaSBpcyBzbWFsbGVyIHRoYW4gZml2ZS4KKyAgIFRoZSAiOmVjaG8iIGNvbW1hbmQgcHJpbnRzIGl0cyBhcmd1bWVudHMuICBJbiB0aGlzIGNhc2UgdGhlIHN0cmluZyAiY291bnQKK2lzIiBhbmQgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpLiAgU2luY2UgaSBpcyBvbmUsIHRoaXMgd2lsbCBwcmludDoKKworCWNvdW50IGlzIDEgfgorCitUaGVuIHRoZXJlIGlzIGFub3RoZXIgIjpsZXQgaSA9IiBjb21tYW5kLiAgVGhlIHZhbHVlIHVzZWQgaXMgdGhlIGV4cHJlc3Npb24gImkKKysgMSIuICBUaGlzIGFkZHMgb25lIHRvIHRoZSB2YXJpYWJsZSBpIGFuZCBhc3NpZ25zIHRoZSBuZXcgdmFsdWUgdG8gdGhlIHNhbWUKK3ZhcmlhYmxlLgorICAgVGhlIG91dHB1dCBvZiB0aGUgZXhhbXBsZSBjb2RlIGlzOgorCisJY291bnQgaXMgMSB+CisJY291bnQgaXMgMiB+CisJY291bnQgaXMgMyB+CisJY291bnQgaXMgNCB+CisKKwlOb3RlOgorCUlmIHlvdSBoYXBwZW4gdG8gd3JpdGUgYSB3aGlsZSBsb29wIHRoYXQga2VlcHMgb24gcnVubmluZywgeW91IGNhbgorCWludGVycnVwdCBpdCBieSBwcmVzc2luZyBDVFJMLUMgKENUUkwtQnJlYWsgb24gTVMtV2luZG93cykuCisKKworVEhSRUUgS0lORFMgT0YgTlVNQkVSUworCitOdW1iZXJzIGNhbiBiZSBkZWNpbWFsLCBoZXhhZGVjaW1hbCBvciBvY3RhbC4gIEEgaGV4YWRlY2ltYWwgbnVtYmVyIHN0YXJ0cword2l0aCAiMHgiIG9yICIwWCIuICBGb3IgZXhhbXBsZSAiMHgxZiIgaXMgMzEuICBBbiBvY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggYQoremVyby4gICIwMTciIGlzIDE1LiAgQ2FyZWZ1bDogZG9uJ3QgcHV0IGEgemVybyBiZWZvcmUgYSBkZWNpbWFsIG51bWJlciwgaXQKK3dpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gb2N0YWwgbnVtYmVyIQorICAgVGhlICI6ZWNobyIgY29tbWFuZCBhbHdheXMgcHJpbnRzIGRlY2ltYWwgbnVtYmVycy4gIEV4YW1wbGU6ID4KKworCTplY2hvIDB4N2YgMDM2Cis8CTEyNyAzMCB+CisKK0EgbnVtYmVyIGlzIG1hZGUgbmVnYXRpdmUgd2l0aCBhIG1pbnVzIHNpZ24uICBUaGlzIGFsc28gd29ya3MgZm9yIGhleGFkZWNpbWFsCithbmQgb2N0YWwgbnVtYmVycy4gICBBIG1pbnVzIHNpZ24gaXMgYWxzbyBmb3Igc3VidHJhY3Rpb24uICBDb21wYXJlIHRoaXMgd2l0aAordGhlIHByZXZpb3VzIGV4YW1wbGU6ID4KKworCTplY2hvIDB4N2YgLTAzNgorPAk5NyB+CisKK1doaXRlIHNwYWNlIGluIGFuIGV4cHJlc3Npb24gaXMgaWdub3JlZC4gIEhvd2V2ZXIsIGl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIGl0Citmb3Igc2VwYXJhdGluZyBpdGVtcywgdG8gbWFrZSB0aGUgZXhwcmVzc2lvbiBlYXNpZXIgdG8gcmVhZC4gIEZvciBleGFtcGxlLCB0bworYXZvaWQgdGhlIGNvbmZ1c2lvbiB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyLCBwdXQgYSBzcGFjZSBiZXR3ZWVuIHRoZSBtaW51cyBzaWduCithbmQgdGhlIGZvbGxvd2luZyBudW1iZXI6ID4KKworCTplY2hvIDB4N2YgLSAwMzYKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuMioJVmFyaWFibGVzCisKK0EgdmFyaWFibGUgbmFtZSBjb25zaXN0cyBvZiBBU0NJSSBsZXR0ZXJzLCBkaWdpdHMgYW5kIHRoZSB1bmRlcnNjb3JlLiAgSXQKK2Nhbm5vdCBzdGFydCB3aXRoIGEgZGlnaXQuICBWYWxpZCB2YXJpYWJsZSBuYW1lcyBhcmU6CisKKwljb3VudGVyCisJX2FhcDMKKwl2ZXJ5X2xvbmdfdmFyaWFibGVfbmFtZV93aXRoX3VuZGVyc2NvcmVzCisJRnVuY0xlbmd0aAorCUxFTkdUSAorCitJbnZhbGlkIG5hbWVzIGFyZSAiZm9vK2JhciIgYW5kICI2dmFyIi4KKyAgIFRoZXNlIHZhcmlhYmxlcyBhcmUgZ2xvYmFsLiAgVG8gc2VlIGEgbGlzdCBvZiBjdXJyZW50bHkgZGVmaW5lZCB2YXJpYWJsZXMKK3VzZSB0aGlzIGNvbW1hbmQ6ID4KKworCTpsZXQKKworWW91IGNhbiB1c2UgZ2xvYmFsIHZhcmlhYmxlcyBldmVyeXdoZXJlLiAgVGhpcyBhbHNvIG1lYW5zIHRoYXQgd2hlbiB0aGUKK3ZhcmlhYmxlICJjb3VudCIgaXMgdXNlZCBpbiBvbmUgc2NyaXB0IGZpbGUsIGl0IG1pZ2h0IGFsc28gYmUgdXNlZCBpbiBhbm90aGVyCitmaWxlLiAgVGhpcyBsZWFkcyB0byBjb25mdXNpb24gYXQgbGVhc3QsIGFuZCByZWFsIHByb2JsZW1zIGF0IHdvcnN0LiAgVG8gYXZvaWQKK3RoaXMsIHlvdSBjYW4gdXNlIGEgdmFyaWFibGUgbG9jYWwgdG8gYSBzY3JpcHQgZmlsZSBieSBwcmVwZW5kaW5nICJzOiIuICBGb3IKK2V4YW1wbGUsIG9uZSBzY3JpcHQgY29udGFpbnMgdGhpcyBjb2RlOiA+CisKKwk6bGV0IHM6Y291bnQgPSAxCisJOndoaWxlIHM6Y291bnQgPCA1CisJOiAgc291cmNlIG90aGVyLnZpbQorCTogIGxldCBzOmNvdW50ID0gczpjb3VudCArIDEKKwk6ZW5kd2hpbGUKKworU2luY2UgInM6Y291bnQiIGlzIGxvY2FsIHRvIHRoaXMgc2NyaXB0LCB5b3UgY2FuIGJlIHN1cmUgdGhhdCBzb3VyY2luZyB0aGUKKyJvdGhlci52aW0iIHNjcmlwdCB3aWxsIG5vdCBjaGFuZ2UgdGhpcyB2YXJpYWJsZS4gIElmICJvdGhlci52aW0iIGFsc28gdXNlcyBhbgorInM6Y291bnQiIHZhcmlhYmxlLCBpdCB3aWxsIGJlIGEgZGlmZmVyZW50IGNvcHksIGxvY2FsIHRvIHRoYXQgc2NyaXB0LiAgTW9yZQorYWJvdXQgc2NyaXB0LWxvY2FsIHZhcmlhYmxlcyBoZXJlOiB8c2NyaXB0LXZhcmlhYmxlfC4KKworVGhlcmUgYXJlIG1vcmUga2luZHMgb2YgdmFyaWFibGVzLCBzZWUgfGludGVybmFsLXZhcmlhYmxlc3wuICBUaGUgbW9zdCBvZnRlbgordXNlZCBvbmVzIGFyZToKKworCWI6bmFtZQkJdmFyaWFibGUgbG9jYWwgdG8gYSBidWZmZXIKKwl3Om5hbWUJCXZhcmlhYmxlIGxvY2FsIHRvIGEgd2luZG93CisJZzpuYW1lCQlnbG9iYWwgdmFyaWFibGUgKGFsc28gaW4gYSBmdW5jdGlvbikKKwl2Om5hbWUJCXZhcmlhYmxlIHByZWRlZmluZWQgYnkgVmltCisKKworREVMRVRJTkcgVkFSSUFCTEVTCisKK1ZhcmlhYmxlcyB0YWtlIHVwIG1lbW9yeSBhbmQgc2hvdyB1cCBpbiB0aGUgb3V0cHV0IG9mIHRoZSAiOmxldCIgY29tbWFuZC4gIFRvCitkZWxldGUgYSB2YXJpYWJsZSB1c2UgdGhlICI6dW5sZXQiIGNvbW1hbmQuICBFeGFtcGxlOiA+CisKKwk6dW5sZXQgczpjb3VudAorCitUaGlzIGRlbGV0ZXMgdGhlIHNjcmlwdC1sb2NhbCB2YXJpYWJsZSAiczpjb3VudCIgdG8gZnJlZSB1cCB0aGUgbWVtb3J5IGl0Cit1c2VzLiAgSWYgeW91IGFyZSBub3Qgc3VyZSBpZiB0aGUgdmFyaWFibGUgZXhpc3RzLCBhbmQgZG9uJ3Qgd2FudCBhbiBlcnJvcgorbWVzc2FnZSB3aGVuIGl0IGRvZXNuJ3QsIGFwcGVuZCAhOiA+CisKKwk6dW5sZXQhIHM6Y291bnQKKworV2hlbiBhIHNjcmlwdCBmaW5pc2hlcywgdGhlIGxvY2FsIHZhcmlhYmxlcyB1c2VkIHRoZXJlIHdpbGwgbm90IGJlCithdXRvbWF0aWNhbGx5IGZyZWVkLiAgVGhlIG5leHQgdGltZSB0aGUgc2NyaXB0IGV4ZWN1dGVzLCBpdCBjYW4gc3RpbGwgdXNlIHRoZQorb2xkIHZhbHVlLiAgRXhhbXBsZTogPgorCisJOmlmICFleGlzdHMoInM6Y2FsbF9jb3VudCIpCisJOiAgbGV0IHM6Y2FsbF9jb3VudCA9IDAKKwk6ZW5kaWYKKwk6bGV0IHM6Y2FsbF9jb3VudCA9IHM6Y2FsbF9jb3VudCArIDEKKwk6ZWNobyAiY2FsbGVkIiBzOmNhbGxfY291bnQgInRpbWVzIgorCitUaGUgImV4aXN0cygpIiBmdW5jdGlvbiBjaGVja3MgaWYgYSB2YXJpYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuICBJdHMKK2FyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB5b3Ugd2FudCB0byBjaGVjay4gIE5vdCB0aGUgdmFyaWFibGUKK2l0c2VsZiEgIElmIHlvdSB3b3VsZCBkbyB0aGlzOiA+CisKKwk6aWYgIWV4aXN0cyhzOmNhbGxfY291bnQpCisKK1RoZW4gdGhlIHZhbHVlIG9mIHM6Y2FsbF9jb3VudCB3aWxsIGJlIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRoYXQKK2V4aXN0cygpIGNoZWNrcy4gIFRoYXQncyBub3Qgd2hhdCB5b3Ugd2FudC4KKyAgIFRoZSBleGNsYW1hdGlvbiBtYXJrICEgbmVnYXRlcyBhIHZhbHVlLiAgV2hlbiB0aGUgdmFsdWUgd2FzIHRydWUsIGl0CitiZWNvbWVzIGZhbHNlLiAgV2hlbiBpdCB3YXMgZmFsc2UsIGl0IGJlY29tZXMgdHJ1ZS4gIFlvdSBjYW4gcmVhZCBpdCBhcyAibm90Ii4KK1RodXMgImlmICFleGlzdHMoKSIgY2FuIGJlIHJlYWQgYXMgImlmIG5vdCBleGlzdHMoKSIuCisgICBXaGF0IFZpbSBjYWxscyB0cnVlIGlzIGFueXRoaW5nIHRoYXQgaXMgbm90IHplcm8uICBPbmx5IHplcm8gaXMgZmFsc2UuCisKKworU1RSSU5HIFZBUklBQkxFUyBBTkQgQ09OU1RBTlRTCisKK1NvIGZhciBvbmx5IG51bWJlcnMgd2VyZSB1c2VkIGZvciB0aGUgdmFyaWFibGUgdmFsdWUuICBTdHJpbmdzIGNhbiBiZSB1c2VkIGFzCit3ZWxsLiAgTnVtYmVycyBhbmQgc3RyaW5ncyBhcmUgdGhlIG9ubHkgdHdvIHR5cGVzIG9mIHZhcmlhYmxlcyB0aGF0IFZpbQorc3VwcG9ydHMuICBUaGUgdHlwZSBpcyBkeW5hbWljLCBpdCBpcyBzZXQgZWFjaCB0aW1lIHdoZW4gYXNzaWduaW5nIGEgdmFsdWUgdG8KK3RoZSB2YXJpYWJsZSB3aXRoICI6bGV0Ii4KKyAgIFRvIGFzc2lnbiBhIHN0cmluZyB2YWx1ZSB0byBhIHZhcmlhYmxlLCB5b3UgbmVlZCB0byB1c2UgYSBzdHJpbmcgY29uc3RhbnQuCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIHRoZXNlLiAgRmlyc3QgdGhlIHN0cmluZyBpbiBkb3VibGUgcXVvdGVzOiA+CisKKwk6bGV0IG5hbWUgPSAicGV0ZXIiCisJOmVjaG8gbmFtZQorPAlwZXRlciB+CisKK0lmIHlvdSB3YW50IHRvIGluY2x1ZGUgYSBkb3VibGUgcXVvdGUgaW5zaWRlIHRoZSBzdHJpbmcsIHB1dCBhIGJhY2tzbGFzaCBpbgorZnJvbnQgb2YgaXQ6ID4KKworCTpsZXQgbmFtZSA9ICJcInBldGVyXCIiCisJOmVjaG8gbmFtZQorPAkicGV0ZXIiIH4KKworVG8gYXZvaWQgdGhlIG5lZWQgZm9yIGEgYmFja3NsYXNoLCB5b3UgY2FuIHVzZSBhIHN0cmluZyBpbiBzaW5nbGUgcXVvdGVzOiA+CisKKwk6bGV0IG5hbWUgPSAnInBldGVyIicKKwk6ZWNobyBuYW1lCis8CSJwZXRlciIgfgorCitJbnNpZGUgYSBzaW5nbGUtcXVvdGUgc3RyaW5nIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgdGFrZW4gbGl0ZXJhbGx5LiAgVGhlCitkcmF3YmFjayBpcyB0aGF0IGl0J3MgaW1wb3NzaWJsZSB0byBpbmNsdWRlIGEgc2luZ2xlIHF1b3RlLiAgQSBiYWNrc2xhc2ggaXMKK3Rha2VuIGxpdGVyYWxseSBhcyB3ZWxsLCB0aHVzIHlvdSBjYW4ndCB1c2UgaXQgdG8gY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZQorY2hhcmFjdGVyIGFmdGVyIGl0LgorICAgSW4gZG91YmxlLXF1b3RlIHN0cmluZ3MgaXQgaXMgcG9zc2libGUgdG8gdXNlIHNwZWNpYWwgY2hhcmFjdGVycy4gIEhlcmUgYXJlCithIGZldyB1c2VmdWwgb25lczoKKworCVx0CQk8VGFiPgorCVxuCQk8Tkw+LCBsaW5lIGJyZWFrCisJXHIJCTxDUj4sIDxFbnRlcj4KKwlcZQkJPEVzYz4KKwlcYgkJPEJTPiwgYmFja3NwYWNlCisJXCIJCSIKKwlcXAkJXCwgYmFja3NsYXNoCisJXDxFc2M+CQk8RXNjPgorCVw8Qy1XPgkJQ1RSTC1XCisKK1RoZSBsYXN0IHR3byBhcmUganVzdCBleGFtcGxlcy4gIFRoZSAgIlw8bmFtZT4iIGZvcm0gY2FuIGJlIHVzZWQgdG8gaW5jbHVkZQordGhlIHNwZWNpYWwga2V5ICJuYW1lIi4KKyAgIFNlZSB8ZXhwci1xdW90ZXwgZm9yIHRoZSBmdWxsIGxpc3Qgb2Ygc3BlY2lhbCBpdGVtcyBpbiBhIHN0cmluZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuMyoJRXhwcmVzc2lvbnMKKworVmltIGhhcyBhIHJpY2gsIHlldCBzaW1wbGUgd2F5IHRvIGhhbmRsZSBleHByZXNzaW9ucy4gIFlvdSBjYW4gcmVhZCB0aGUKK2RlZmluaXRpb24gaGVyZTogfGV4cHJlc3Npb24tc3ludGF4fC4gIEhlcmUgd2Ugd2lsbCBzaG93IHRoZSBtb3N0IGNvbW1vbgoraXRlbXMuCisgICBUaGUgbnVtYmVycywgc3RyaW5ncyBhbmQgdmFyaWFibGVzIG1lbnRpb25lZCBhYm92ZSBhcmUgZXhwcmVzc2lvbnMgYnkKK3RoZW1zZWx2ZXMuICBUaHVzIGV2ZXJ5d2hlcmUgYW4gZXhwcmVzc2lvbiBpcyBleHBlY3RlZCwgeW91IGNhbiB1c2UgYSBudW1iZXIsCitzdHJpbmcgb3IgdmFyaWFibGUuICBPdGhlciBiYXNpYyBpdGVtcyBpbiBhbiBleHByZXNzaW9uIGFyZToKKworCSROQU1FCQllbnZpcm9ubWVudCB2YXJpYWJsZQorCSZuYW1lCQlvcHRpb24KKwlAcgkJcmVnaXN0ZXIKKworRXhhbXBsZXM6ID4KKworCTplY2hvICJUaGUgdmFsdWUgb2YgJ3RhYnN0b3AnIGlzIiAmdHMKKwk6ZWNobyAiWW91ciBob21lIGRpcmVjdG9yeSBpcyIgJEhPTUUKKwk6aWYgQGEgPiA1CisKK1RoZSAmbmFtZSBmb3JtIGNhbiBiZSB1c2VkIHRvIHNhdmUgYW4gb3B0aW9uIHZhbHVlLCBzZXQgaXQgdG8gYSBuZXcgdmFsdWUsCitkbyBzb21ldGhpbmcgYW5kIHJlc3RvcmUgdGhlIG9sZCB2YWx1ZS4gIEV4YW1wbGU6ID4KKworCTpsZXQgc2F2ZV9pYyA9ICZpYworCTpzZXQgbm9pYworCTovVGhlIFN0YXJ0LywkZGVsZXRlCisJOmxldCAmaWMgPSBzYXZlX2ljCisKK1RoaXMgbWFrZXMgc3VyZSB0aGUgIlRoZSBTdGFydCIgcGF0dGVybiBpcyB1c2VkIHdpdGggdGhlICdpZ25vcmVjYXNlJyBvcHRpb24KK29mZi4gIFN0aWxsLCBpdCBrZWVwcyB0aGUgdmFsdWUgdGhhdCB0aGUgdXNlciBoYWQgc2V0LgorCisKK01BVEhFTUFUSUNTCisKK0l0IGJlY29tZXMgbW9yZSBpbnRlcmVzdGluZyBpZiB3ZSBjb21iaW5lIHRoZXNlIGJhc2ljIGl0ZW1zLiAgTGV0J3Mgc3RhcnQgd2l0aAorbWF0aGVtYXRpY3Mgb24gbnVtYmVyczoKKworCWEgKyBiCQlhZGQKKwlhIC0gYgkJc3VidHJhY3QKKwlhICogYgkJbXVsdGlwbHkKKwlhIC8gYgkJZGl2aWRlCisJYSAlIGIJCW1vZHVsbworCitUaGUgdXN1YWwgcHJlY2VkZW5jZSBpcyB1c2VkLiAgRXhhbXBsZTogPgorCisJOmVjaG8gMTAgKyA1ICogMgorPAkyMCB+CisKK0dyb3VwaW5nIGlzIGRvbmUgd2l0aCBicmFjZXMuICBObyBzdXJwcmlzZXMgaGVyZS4gIEV4YW1wbGU6ID4KKworCTplY2hvICgxMCArIDUpICogMgorPAkzMCB+CisKK1N0cmluZ3MgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoICIuIi4gIEV4YW1wbGU6ID4KKworCTplY2hvICJmb28iIC4gImJhciIKKzwJZm9vYmFyIH4KKworV2hlbiB0aGUgIjplY2hvIiBjb21tYW5kIGdldHMgbXVsdGlwbGUgYXJndW1lbnRzLCBpdCBzZXBhcmF0ZXMgdGhlbSB3aXRoIGEKK3NwYWNlLiAgSW4gdGhlIGV4YW1wbGUgdGhlIGFyZ3VtZW50IGlzIGEgc2luZ2xlIGV4cHJlc3Npb24sIHRodXMgbm8gc3BhY2UgaXMKK2luc2VydGVkLgorCitCb3Jyb3dlZCBmcm9tIHRoZSBDIGxhbmd1YWdlIGlzIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uOgorCisJYSA/IGIgOiBjCisKK0lmICJhIiBldmFsdWF0ZXMgdG8gdHJ1ZSAiYiIgaXMgdXNlZCwgb3RoZXJ3aXNlICJjIiBpcyB1c2VkLiAgRXhhbXBsZTogPgorCisJOmxldCBpID0gNAorCTplY2hvIGkgPiA1ID8gImkgaXMgYmlnIiA6ICJpIGlzIHNtYWxsIgorPAlpIGlzIHNtYWxsIH4KKworVGhlIHRocmVlIHBhcnRzIG9mIHRoZSBjb25zdHJ1Y3RzIGFyZSBhbHdheXMgZXZhbHVhdGVkIGZpcnN0LCB0aHVzIHlvdSBjb3VsZAorc2VlIGl0IHdvcmsgYXM6CisKKwkoYSkgPyAoYikgOiAoYykKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuNCoJQ29uZGl0aW9uYWxzCisKK1RoZSAiOmlmIiBjb21tYW5kcyBleGVjdXRlcyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudHMsIHVudGlsIHRoZSBtYXRjaGluZworIjplbmRpZiIsIG9ubHkgd2hlbiBhIGNvbmRpdGlvbiBpcyBtZXQuICBUaGUgZ2VuZXJpYyBmb3JtIGlzOgorCisJOmlmIHtjb25kaXRpb259CisJICAge3N0YXRlbWVudHN9CisJOmVuZGlmCisKK09ubHkgd2hlbiB0aGUgZXhwcmVzc2lvbiB7Y29uZGl0aW9ufSBldmFsdWF0ZXMgdG8gdHJ1ZSAobm9uLXplcm8pIHdpbGwgdGhlCit7c3RhdGVtZW50c30gYmUgZXhlY3V0ZWQuICBUaGVzZSBtdXN0IHN0aWxsIGJlIHZhbGlkIGNvbW1hbmRzLiAgSWYgdGhleQorY29udGFpbiBnYXJiYWdlLCBWaW0gd29uJ3QgYmUgYWJsZSB0byBmaW5kIHRoZSAiOmVuZGlmIi4KKyAgIFlvdSBjYW4gYWxzbyB1c2UgIjplbHNlIi4gIFRoZSBnZW5lcmljIGZvcm0gZm9yIHRoaXMgaXM6CisKKwk6aWYge2NvbmRpdGlvbn0KKwkgICB7c3RhdGVtZW50c30KKwk6ZWxzZQorCSAgIHtzdGF0ZW1lbnRzfQorCTplbmRpZgorCitUaGUgc2Vjb25kIHtzdGF0ZW1lbnRzfSBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBmaXJzdCBvbmUgaXNuJ3QuCisgICBGaW5hbGx5LCB0aGVyZSBpcyAiOmVsc2VpZiI6CisKKwk6aWYge2NvbmRpdGlvbn0KKwkgICB7c3RhdGVtZW50c30KKwk6ZWxzZWlmIHtjb25kaXRpb259CisJICAge3N0YXRlbWVudHN9CisJOmVuZGlmCisKK1RoaXMgd29ya3MganVzdCBsaWtlIHVzaW5nICI6ZWxzZSIgYW5kIHRoZW4gImlmIiwgYnV0IHdpdGhvdXQgdGhlIG5lZWQgZm9yIGFuCitleHRyYSAiOmVuZGlmIi4KKyAgIEEgdXNlZnVsIGV4YW1wbGUgZm9yIHlvdXIgdmltcmMgZmlsZSBpcyBjaGVja2luZyB0aGUgJ3Rlcm0nIG9wdGlvbiBhbmQKK2RvaW5nIHNvbWV0aGluZyBkZXBlbmRpbmcgdXBvbiBpdHMgdmFsdWU6ID4KKworCTppZiAmdGVybSA9PSAieHRlcm0iCisJOiAgIiBEbyBzdHVmZiBmb3IgeHRlcm0KKwk6ZWxzZWlmICZ0ZXJtID09ICJ2dDEwMCIKKwk6ICAiIERvIHN0dWZmIGZvciBhIHZ0MTAwIHRlcm1pbmFsCisJOmVsc2UKKwk6ICAiIERvIHNvbWV0aGluZyBmb3Igb3RoZXIgdGVybWluYWxzCisJOmVuZGlmCisKKworTE9HSUMgT1BFUkFUSU9OUworCitXZSBhbHJlYWR5IHVzZWQgc29tZSBvZiB0aGVtIGluIHRoZSBleGFtcGxlcy4gIFRoZXNlIGFyZSB0aGUgbW9zdCBvZnRlbiB1c2VkCitvbmVzOgorCisJYSA9PSBiCQllcXVhbCB0bworCWEgIT0gYgkJbm90IGVxdWFsIHRvCisJYSA+ICBiCQlncmVhdGVyIHRoYW4KKwlhID49IGIJCWdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bworCWEgPCAgYgkJbGVzcyB0aGFuCisJYSA8PSBiCQlsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKworVGhlIHJlc3VsdCBpcyBvbmUgaWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQgYW5kIHplcm8gb3RoZXJ3aXNlLiAgQW4gZXhhbXBsZTogPgorCisJOmlmIHY6dmVyc2lvbiA+PSA2MDAKKwk6ICBlY2hvICJjb25ncmF0dWxhdGlvbnMiCisJOmVsc2UKKwk6ICBlY2hvICJ5b3UgYXJlIHVzaW5nIGFuIG9sZCB2ZXJzaW9uLCB1cGdyYWRlISIKKwk6ZW5kaWYKKworSGVyZSAidjp2ZXJzaW9uIiBpcyBhIHZhcmlhYmxlIGRlZmluZWQgYnkgVmltLCB3aGljaCBoYXMgdGhlIHZhbHVlIG9mIHRoZSBWaW0KK3ZlcnNpb24uICA2MDAgaXMgZm9yIHZlcnNpb24gNi4wLiAgVmVyc2lvbiA2LjEgaGFzIHRoZSB2YWx1ZSA2MDEuICBUaGlzIGlzCit2ZXJ5IHVzZWZ1bCB0byB3cml0ZSBhIHNjcmlwdCB0aGF0IHdvcmtzIHdpdGggbXVsdGlwbGUgdmVyc2lvbnMgb2YgVmltLgorfHY6dmVyc2lvbnwKKworVGhlIGxvZ2ljIG9wZXJhdG9ycyB3b3JrIGJvdGggZm9yIG51bWJlcnMgYW5kIHN0cmluZ3MuICBXaGVuIGNvbXBhcmluZyB0d28KK3N0cmluZ3MsIHRoZSBtYXRoZW1hdGljYWwgZGlmZmVyZW5jZSBpcyB1c2VkLiAgVGhpcyBjb21wYXJlcyBieXRlIHZhbHVlcywKK3doaWNoIG1heSBub3QgYmUgcmlnaHQgZm9yIHNvbWUgbGFuZ3VhZ2VzLgorICAgV2hlbiBjb21wYXJpbmcgYSBzdHJpbmcgd2l0aCBhIG51bWJlciwgdGhlIHN0cmluZyBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYQorbnVtYmVyLiAgVGhpcyBpcyBhIGJpdCB0cmlja3ksIGJlY2F1c2Ugd2hlbiBhIHN0cmluZyBkb2Vzbid0IGxvb2sgbGlrZSBhCitudW1iZXIsIHRoZSBudW1iZXIgemVybyBpcyB1c2VkLiAgRXhhbXBsZTogPgorCisJOmlmIDAgPT0gIm9uZSIKKwk6ICBlY2hvICJ5ZXMiCisJOmVuZGlmCisKK1RoaXMgd2lsbCBlY2hvICJ5ZXMiLCBiZWNhdXNlICJvbmUiIGRvZXNuJ3QgbG9vayBsaWtlIGEgbnVtYmVyLCB0aHVzIGl0IGlzCitjb252ZXJ0ZWQgdG8gdGhlIG51bWJlciB6ZXJvLgorCitGb3Igc3RyaW5ncyB0aGVyZSBhcmUgdHdvIG1vcmUgaXRlbXM6CisKKwlhID1+IGIJCW1hdGNoZXMgd2l0aAorCWEgIX4gYgkJZG9lcyBub3QgbWF0Y2ggd2l0aAorCitUaGUgbGVmdCBpdGVtICJhIiBpcyB1c2VkIGFzIGEgc3RyaW5nLiAgVGhlIHJpZ2h0IGl0ZW0gImIiIGlzIHVzZWQgYXMgYQorcGF0dGVybiwgbGlrZSB3aGF0J3MgdXNlZCBmb3Igc2VhcmNoaW5nLiAgRXhhbXBsZTogPgorCisJOmlmIHN0ciA9fiAiICIKKwk6ICBlY2hvICJzdHIgY29udGFpbnMgYSBzcGFjZSIKKwk6ZW5kaWYKKwk6aWYgc3RyICF+ICdcLiQnCisJOiAgZWNobyAic3RyIGRvZXMgbm90IGVuZCBpbiBhIGZ1bGwgc3RvcCIKKwk6ZW5kaWYKKworTm90aWNlIHRoZSB1c2Ugb2YgYSBzaW5nbGUtcXVvdGUgc3RyaW5nIGZvciB0aGUgcGF0dGVybi4gIFRoaXMgaXMgdXNlZnVsLAorYmVjYXVzZSBiYWNrc2xhc2hlcyBuZWVkIHRvIGJlIGRvdWJsZWQgaW4gYSBkb3VibGUtcXVvdGUgc3RyaW5nIGFuZCBwYXR0ZXJucwordGVuZCB0byBjb250YWluIG1hbnkgYmFja3NsYXNoZXMuCisKK1RoZSAnaWdub3JlY2FzZScgb3B0aW9uIGlzIHVzZWQgd2hlbiBjb21wYXJpbmcgc3RyaW5ncy4gIFdoZW4geW91IGRvbid0IHdhbnQKK3RoYXQsIGFwcGVuZCAiIyIgdG8gbWF0Y2ggY2FzZSBhbmQgIj8iIHRvIGlnbm9yZSBjYXNlLiAgVGh1cyAiPT0/IiBjb21wYXJlcwordHdvIHN0cmluZ3MgdG8gYmUgZXF1YWwgd2hpbGUgaWdub3JpbmcgY2FzZS4gIEFuZCAiIX4jIiBjaGVja3MgaWYgYSBwYXR0ZXJuCitkb2Vzbid0IG1hdGNoLCBhbHNvIGNoZWNraW5nIHRoZSBjYXNlIG9mIGxldHRlcnMuICBGb3IgdGhlIGZ1bGwgdGFibGUgc2VlCit8ZXhwci09PXwuCisKKworTU9SRSBMT09QSU5HCisKK1RoZSAiOndoaWxlIiBjb21tYW5kIHdhcyBhbHJlYWR5IG1lbnRpb25lZC4gIFR3byBtb3JlIHN0YXRlbWVudHMgY2FuIGJlIHVzZWQKK2luIGJldHdlZW4gdGhlICI6d2hpbGUiIGFuZCB0aGUgIjplbmR3aGlsZSI6CisKKwk6Y29udGludWUJCUp1bXAgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHdoaWxlIGxvb3A7IHRoZQorCQkJCWxvb3AgY29udGludWVzLgorCTpicmVhawkJCUp1bXAgZm9yd2FyZCB0byB0aGUgIjplbmR3aGlsZSI7IHRoZSBsb29wIGlzCisJCQkJZGlzY29udGludWVkLgorCitFeGFtcGxlOiA+CisKKwk6d2hpbGUgY291bnRlciA8IDQwCisJOiAgY2FsbCBkb19zb21ldGhpbmcoKQorCTogIGlmIHNraXBfZmxhZworCTogICAgY29udGludWUKKwk6ICBlbmRpZgorCTogIGlmIGZpbmlzaGVkX2ZsYWcKKwk6ICAgIGJyZWFrCisJOiAgZW5kaWYKKwk6ICBzbGVlcCA1MG0KKwk6ZW5kd2hpbGUKKworVGhlICI6c2xlZXAiIGNvbW1hbmQgbWFrZXMgVmltIHRha2UgYSBuYXAuICBUaGUgIjUwbSIgc3BlY2lmaWVzIGZpZnR5CittaWxsaXNlY29uZHMuICBBbm90aGVyIGV4YW1wbGUgaXMgIjpzbGVlcCA0Iiwgd2hpY2ggc2xlZXBzIGZvciBmb3VyIHNlY29uZHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQxLjUqCUV4ZWN1dGluZyBhbiBleHByZXNzaW9uCisKK1NvIGZhciB0aGUgY29tbWFuZHMgaW4gdGhlIHNjcmlwdCB3ZXJlIGV4ZWN1dGVkIGJ5IFZpbSBkaXJlY3RseS4gIFRoZQorIjpleGVjdXRlIiBjb21tYW5kIGFsbG93cyBleGVjdXRpbmcgdGhlIHJlc3VsdCBvZiBhbiBleHByZXNzaW9uLiAgVGhpcyBpcyBhCit2ZXJ5IHBvd2VyZnVsIHdheSB0byBidWlsZCBjb21tYW5kcyBhbmQgZXhlY3V0ZSB0aGVtLgorICAgQW4gZXhhbXBsZSBpcyB0byBqdW1wIHRvIGEgdGFnLCB3aGljaCBpcyBjb250YWluZWQgaW4gYSB2YXJpYWJsZTogPgorCisJOmV4ZWN1dGUgInRhZyAiIC4gdGFnX25hbWUKKworVGhlICIuIiBpcyB1c2VkIHRvIGNvbmNhdGVuYXRlIHRoZSBzdHJpbmcgInRhZyAiIHdpdGggdGhlIHZhbHVlIG9mIHZhcmlhYmxlCisidGFnX25hbWUiLiAgU3VwcG9zZSAidGFnX25hbWUiIGhhcyB0aGUgdmFsdWUgImdldF9jbWQiLCB0aGVuIHRoZSBjb21tYW5kIHRoYXQKK3dpbGwgYmUgZXhlY3V0ZWQgaXM6ID4KKworCTp0YWcgZ2V0X2NtZAorCitUaGUgIjpleGVjdXRlIiBjb21tYW5kIGNhbiBvbmx5IGV4ZWN1dGUgY29sb24gY29tbWFuZHMuICBUaGUgIjpub3JtYWwiIGNvbW1hbmQKK2V4ZWN1dGVzIE5vcm1hbCBtb2RlIGNvbW1hbmRzLiAgSG93ZXZlciwgaXRzIGFyZ3VtZW50IGlzIG5vdCBhbiBleHByZXNzaW9uIGJ1dAordGhlIGxpdGVyYWwgY29tbWFuZCBjaGFyYWN0ZXJzLiAgRXhhbXBsZTogPgorCisJOm5vcm1hbCBnZz1HCisKK1RoaXMganVtcHMgdG8gdGhlIGZpcnN0IGxpbmUgYW5kIGZvcm1hdHMgYWxsIGxpbmVzIHdpdGggdGhlICI9IiBvcGVyYXRvci4KKyAgIFRvIG1ha2UgIjpub3JtYWwiIHdvcmsgd2l0aCBhbiBleHByZXNzaW9uLCBjb21iaW5lICI6ZXhlY3V0ZSIgd2l0aCBpdC4KK0V4YW1wbGU6ID4KKworCTpleGVjdXRlICJub3JtYWwgIiAuIG5vcm1hbF9jb21tYW5kcworCitUaGUgdmFyaWFibGUgIm5vcm1hbF9jb21tYW5kcyIgbXVzdCBjb250YWluIHRoZSBOb3JtYWwgbW9kZSBjb21tYW5kcy4KKyAgIE1ha2Ugc3VyZSB0aGF0IHRoZSBhcmd1bWVudCBmb3IgIjpub3JtYWwiIGlzIGEgY29tcGxldGUgY29tbWFuZC4gIE90aGVyd2lzZQorVmltIHdpbGwgcnVuIGludG8gdGhlIGVuZCBvZiB0aGUgYXJndW1lbnQgYW5kIGFib3J0IHRoZSBjb21tYW5kLiAgRm9yIGV4YW1wbGUsCitpZiB5b3Ugc3RhcnQgSW5zZXJ0IG1vZGUsIHlvdSBtdXN0IGxlYXZlIEluc2VydCBtb2RlIGFzIHdlbGwuICBUaGlzIHdvcmtzOiA+CisKKwk6ZXhlY3V0ZSAibm9ybWFsIEluZXcgdGV4dCBcPEVzYz4iCisKK1RoaXMgaW5zZXJ0cyAibmV3IHRleHQgIiBpbiB0aGUgY3VycmVudCBsaW5lLiAgTm90aWNlIHRoZSB1c2Ugb2YgdGhlIHNwZWNpYWwKK2tleSAiXDxFc2M+Ii4gIFRoaXMgYXZvaWRzIGhhdmluZyB0byBlbnRlciBhIHJlYWwgPEVzYz4gY2hhcmFjdGVyIGluIHlvdXIKK3NjcmlwdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuNioJVXNpbmcgZnVuY3Rpb25zCisKK1ZpbSBkZWZpbmVzIG1hbnkgZnVuY3Rpb25zIGFuZCBwcm92aWRlcyBhIGxhcmdlIGFtb3VudCBvZiBmdW5jdGlvbmFsaXR5IHRoYXQKK3dheS4gIEEgZmV3IGV4YW1wbGVzIHdpbGwgYmUgZ2l2ZW4gaW4gdGhpcyBzZWN0aW9uLiAgWW91IGNhbiBmaW5kIHRoZSB3aG9sZQorbGlzdCBoZXJlOiB8ZnVuY3Rpb25zfC4KKworQSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgIjpjYWxsIiBjb21tYW5kLiAgVGhlIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBpbgorYmV0d2VlbiBicmFjZXMsIHNlcGFyYXRlZCBieSBjb21tYXMuICBFeGFtcGxlOiA+CisKKwk6Y2FsbCBzZWFyY2goIkRhdGU6ICIsICJXIikKKworVGhpcyBjYWxscyB0aGUgc2VhcmNoKCkgZnVuY3Rpb24sIHdpdGggYXJndW1lbnRzICJEYXRlOiAiIGFuZCAiVyIuICBUaGUKK3NlYXJjaCgpIGZ1bmN0aW9uIHVzZXMgaXRzIGZpcnN0IGFyZ3VtZW50IGFzIGEgc2VhcmNoIHBhdHRlcm4gYW5kIHRoZSBzZWNvbmQKK29uZSBhcyBmbGFncy4gIFRoZSAiVyIgZmxhZyBtZWFucyB0aGUgc2VhcmNoIGRvZXNuJ3Qgd3JhcCBhcm91bmQgdGhlIGVuZCBvZgordGhlIGZpbGUuCisKK0EgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBpbiBhbiBleHByZXNzaW9uLiAgRXhhbXBsZTogPgorCisJOmxldCBsaW5lID0gZ2V0bGluZSgiLiIpCisJOmxldCByZXBsID0gc3Vic3RpdHV0ZShsaW5lLCAnXGEnLCAiKiIsICJnIikKKwk6Y2FsbCBzZXRsaW5lKCIuIiwgcmVwbCkKKworVGhlIGdldGxpbmUoKSBmdW5jdGlvbiBvYnRhaW5zIGEgbGluZSBmcm9tIHRoZSBjdXJyZW50IGZpbGUuICBJdHMgYXJndW1lbnQgaXMKK2Egc3BlY2lmaWNhdGlvbiBvZiB0aGUgbGluZSBudW1iZXIuICBJbiB0aGlzIGNhc2UgIi4iIGlzIHVzZWQsIHdoaWNoIG1lYW5zIHRoZQorbGluZSB3aGVyZSB0aGUgY3Vyc29yIGlzLgorICAgVGhlIHN1YnN0aXR1dGUoKSBmdW5jdGlvbiBkb2VzIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSAiOnN1YnN0aXR1dGUiCitjb21tYW5kLiAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBzdHJpbmcgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUKK3N1YnN0aXR1dGlvbi4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhdHRlcm4sIHRoZSB0aGlyZCB0aGUgcmVwbGFjZW1lbnQKK3N0cmluZy4gIEZpbmFsbHksIHRoZSBsYXN0IGFyZ3VtZW50cyBhcmUgdGhlIGZsYWdzLgorICAgVGhlIHNldGxpbmUoKSBmdW5jdGlvbiBzZXRzIHRoZSBsaW5lLCBzcGVjaWZpZWQgYnkgdGhlIGZpcnN0IGFyZ3VtZW50LCB0byBhCituZXcgc3RyaW5nLCB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgSW4gdGhpcyBleGFtcGxlIHRoZSBsaW5lIHVuZGVyIHRoZSBjdXJzb3IgaXMKK3JlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RpdHV0ZSgpLiAgVGh1cyB0aGUgZWZmZWN0IG9mIHRoZSB0aHJlZQorc3RhdGVtZW50cyBpcyBlcXVhbCB0bzogPgorCisJOnN1YnN0aXR1dGUvXGEvKi9nCisKK1VzaW5nIHRoZSBmdW5jdGlvbnMgYmVjb21lcyBtb3JlIGludGVyZXN0aW5nIHdoZW4geW91IGRvIG1vcmUgd29yayBiZWZvcmUgYW5kCithZnRlciB0aGUgc3Vic3RpdHV0ZSgpIGNhbGwuCisKKworRlVOQ1RJT05TCQkJCQkJKmZ1bmN0aW9uLWxpc3QqCisKK1RoZXJlIGFyZSBtYW55IGZ1bmN0aW9ucy4gIFdlIHdpbGwgbWVudGlvbiB0aGVtIGhlcmUsIGdyb3VwZWQgYnkgd2hhdCB0aGV5IGFyZQordXNlZCBmb3IuICBZb3UgY2FuIGZpbmQgYW4gYWxwaGFiZXRpY2FsIGxpc3QgaGVyZTogfGZ1bmN0aW9uc3wuICBVc2UgQ1RSTC1dIG9uCit0aGUgZnVuY3Rpb24gbmFtZSB0byBqdW1wIHRvIGRldGFpbGVkIGhlbHAgb24gaXQuCisKK1N0cmluZyBtYW5pcHVsYXRpb246CisJY2hhcjJucigpCQlnZXQgQVNDSUkgdmFsdWUgb2YgYSBjaGFyYWN0ZXIKKwlucjJjaGFyKCkJCWdldCBhIGNoYXJhY3RlciBieSBpdHMgQVNDSUkgdmFsdWUKKwllc2NhcGUoKQkJZXNjYXBlIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgd2l0aCBhICdcJworCXN0cnRyYW5zKCkJCXRyYW5zbGF0ZSBhIHN0cmluZyB0byBtYWtlIGl0IHByaW50YWJsZQorCXRvbG93ZXIoKQkJdHVybiBhIHN0cmluZyB0byBsb3dlcmNhc2UKKwl0b3VwcGVyKCkJCXR1cm4gYSBzdHJpbmcgdG8gdXBwZXJjYXNlCisJbWF0Y2goKQkJCXBvc2l0aW9uIHdoZXJlIGEgcGF0dGVybiBtYXRjaGVzIGluIGEgc3RyaW5nCisJbWF0Y2hlbmQoKQkJcG9zaXRpb24gd2hlcmUgYSBwYXR0ZXJuIG1hdGNoIGVuZHMgaW4gYSBzdHJpbmcKKwltYXRjaHN0cigpCQltYXRjaCBvZiBhIHBhdHRlcm4gaW4gYSBzdHJpbmcKKwlzdHJpZHgoKQkJZmlyc3QgaW5kZXggb2YgYSBzaG9ydCBzdHJpbmcgaW4gYSBsb25nIHN0cmluZworCXN0cnJpZHgoKQkJbGFzdCBpbmRleCBvZiBhIHNob3J0IHN0cmluZyBpbiBhIGxvbmcgc3RyaW5nCisJc3RybGVuKCkJCWxlbmd0aCBvZiBhIHN0cmluZworCXN1YnN0aXR1dGUoKQkJc3Vic3RpdHV0ZSBhIHBhdHRlcm4gbWF0Y2ggd2l0aCBhIHN0cmluZworCXN1Ym1hdGNoKCkJCWdldCBhIHNwZWNpZmljIG1hdGNoIGluIGEgIjpzdWJzdGl0dXRlIgorCXN0cnBhcnQoKQkJZ2V0IHBhcnQgb2YgYSBzdHJpbmcKKwlleHBhbmQoKQkJZXhwYW5kIHNwZWNpYWwga2V5d29yZHMKKwl0eXBlKCkJCQl0eXBlIG9mIGEgdmFyaWFibGUKKwlpY29udigpCQkJY29udmVydCB0ZXh0IGZyb20gb25lIGVuY29kaW5nIHRvIGFub3RoZXIKKworV29ya2luZyB3aXRoIHRleHQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyOgorCWJ5dGUybGluZSgpCQlnZXQgbGluZSBudW1iZXIgYXQgYSBzcGVjaWZpYyBieXRlIGNvdW50CisJbGluZTJieXRlKCkJCWJ5dGUgY291bnQgYXQgYSBzcGVjaWZpYyBsaW5lCisJY29sKCkJCQljb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJzb3Igb3IgYSBtYXJrCisJdmlydGNvbCgpCQlzY3JlZW4gY29sdW1uIG9mIHRoZSBjdXJzb3Igb3IgYSBtYXJrCisJbGluZSgpCQkJbGluZSBudW1iZXIgb2YgdGhlIGN1cnNvciBvciBtYXJrCisJd2luY29sKCkJCXdpbmRvdyBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJzb3IKKwl3aW5saW5lKCkJCXdpbmRvdyBsaW5lIG51bWJlciBvZiB0aGUgY3Vyc29yCisJY3Vyc29yKCkJCXBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgYSBsaW5lL2NvbHVtbgorCWdldGxpbmUoKQkJZ2V0IGEgbGluZSBmcm9tIHRoZSBidWZmZXIKKwlzZXRsaW5lKCkJCXJlcGxhY2UgYSBsaW5lIGluIHRoZSBidWZmZXIKKwlhcHBlbmQoKQkJYXBwZW5kIHtzdHJpbmd9IGJlbG93IGxpbmUge2xudW19CisJaW5kZW50KCkJCWluZGVudCBvZiBhIHNwZWNpZmljIGxpbmUKKwljaW5kZW50KCkJCWluZGVudCBhY2NvcmRpbmcgdG8gQyBpbmRlbnRpbmcKKwlsaXNwaW5kZW50KCkJCWluZGVudCBhY2NvcmRpbmcgdG8gTGlzcCBpbmRlbnRpbmcKKwluZXh0bm9uYmxhbmsoKQkJZmluZCBuZXh0IG5vbi1ibGFuayBsaW5lCisJcHJldm5vbmJsYW5rKCkJCWZpbmQgcHJldmlvdXMgbm9uLWJsYW5rIGxpbmUKKwlzZWFyY2goKQkJZmluZCBhIG1hdGNoIGZvciBhIHBhdHRlcm4KKwlzZWFyY2hwYWlyKCkJCWZpbmQgdGhlIG90aGVyIGVuZCBvZiBhIHN0YXJ0L3NraXAvZW5kCisKK1N5c3RlbSBmdW5jdGlvbnMgYW5kIG1hbmlwdWxhdGlvbiBvZiBmaWxlczoKKwlicm93c2UoKQkJcHV0IHVwIGEgZmlsZSByZXF1ZXN0ZXIKKwlnbG9iKCkJCQlleHBhbmQgd2lsZGNhcmRzCisJZ2xvYnBhdGgoKQkJZXhwYW5kIHdpbGRjYXJkcyBpbiBhIG51bWJlciBvZiBkaXJlY3RvcmllcworCXJlc29sdmUoKQkJZmluZCBvdXQgd2hlcmUgYSBzaG9ydGN1dCBwb2ludHMgdG8KKwlmbmFtZW1vZGlmeSgpCQltb2RpZnkgYSBmaWxlIG5hbWUKKwlleGVjdXRhYmxlKCkJCWNoZWNrIGlmIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBleGlzdHMKKwlmaWxlcmVhZGFibGUoKQkJY2hlY2sgaWYgYSBmaWxlIGNhbiBiZSByZWFkCisJZmlsZXdyaXRhYmxlKCkJCWNoZWNrIGlmIGEgZmlsZSBjYW4gYmUgd3JpdHRlbiB0bworCWlzZGlyZWN0b3J5KCkJCWNoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0cworCWdldGN3ZCgpCQlnZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKwlnZXRmc2l6ZSgpCQlnZXQgdGhlIHNpemUgb2YgYSBmaWxlCisJZ2V0ZnRpbWUoKQkJZ2V0IGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgYSBmaWxlCisJbG9jYWx0aW1lKCkJCWdldCBjdXJyZW50IHRpbWUKKwlzdHJmdGltZSgpCQljb252ZXJ0IHRpbWUgdG8gYSBzdHJpbmcKKwl0ZW1wbmFtZSgpCQlnZXQgdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkgZmlsZQorCWRlbGV0ZSgpCQlkZWxldGUgYSBmaWxlCisJcmVuYW1lKCkJCXJlbmFtZSBhIGZpbGUKKwlzeXN0ZW0oKQkJZ2V0IHRoZSByZXN1bHQgb2YgYSBzaGVsbCBjb21tYW5kCisJaG9zdG5hbWUoKQkJbmFtZSBvZiB0aGUgc3lzdGVtCisKK0J1ZmZlcnMsIHdpbmRvd3MgYW5kIHRoZSBhcmd1bWVudCBsaXN0OgorCWFyZ2MoKQkJCW51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcmd1bWVudCBsaXN0CisJYXJnaWR4KCkJCWN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGFyZ3VtZW50IGxpc3QKKwlhcmd2KCkJCQlnZXQgb25lIGVudHJ5IGZyb20gdGhlIGFyZ3VtZW50IGxpc3QKKwlidWZleGlzdHMoKQkJY2hlY2sgaWYgYSBidWZmZXIgZXhpc3RzCisJYnVmbGlzdGVkKCkJCWNoZWNrIGlmIGEgYnVmZmVyIGV4aXN0cyBhbmQgaXMgbGlzdGVkCisJYnVmbG9hZGVkKCkJCWNoZWNrIGlmIGEgYnVmZmVyIGV4aXN0cyBhbmQgaXMgbG9hZGVkCisJYnVmbmFtZSgpCQlnZXQgdGhlIG5hbWUgb2YgYSBzcGVjaWZpYyBidWZmZXIKKwlidWZucigpCQkJZ2V0IHRoZSBidWZmZXIgbnVtYmVyIG9mIGEgc3BlY2lmaWMgYnVmZmVyCisJd2lubnIoKQkJCWdldCB0aGUgd2luZG93IG51bWJlciBmb3IgdGhlIGN1cnJlbnQgd2luZG93CisJYnVmd2lubnIoKQkJZ2V0IHRoZSB3aW5kb3cgbnVtYmVyIG9mIGEgc3BlY2lmaWMgYnVmZmVyCisJd2luYnVmbnIoKQkJZ2V0IHRoZSBidWZmZXIgbnVtYmVyIG9mIGEgc3BlY2lmaWMgd2luZG93CisJZ2V0YnVmdmFyKCkJCWdldCBhIHZhcmlhYmxlIHZhbHVlIGZyb20gYSBzcGVjaWZpYyBidWZmZXIKKwlzZXRidWZ2YXIoKQkJc2V0IGEgdmFyaWFibGUgaW4gYSBzcGVjaWZpYyBidWZmZXIKKwlnZXR3aW52YXIoKQkJZ2V0IGEgdmFyaWFibGUgdmFsdWUgZnJvbSBhIHNwZWNpZmljIHdpbmRvdworCXNldHdpbnZhcigpCQlzZXQgYSB2YXJpYWJsZSBpbiBhIHNwZWNpZmljIHdpbmRvdworCitGb2xkaW5nOgorCWZvbGRjbG9zZWQoKQkJY2hlY2sgZm9yIGEgY2xvc2VkIGZvbGQgYXQgYSBzcGVjaWZpYyBsaW5lCisJZm9sZGNsb3NlZGVuZCgpCQlsaWtlIGZvbGRjbG9zZWQoKSBidXQgcmV0dXJuIHRoZSBsYXN0IGxpbmUKKwlmb2xkbGV2ZWwoKQkJY2hlY2sgZm9yIHRoZSBmb2xkIGxldmVsIGF0IGEgc3BlY2lmaWMgbGluZQorCWZvbGR0ZXh0KCkJCWdlbmVyYXRlIHRoZSBsaW5lIGRpc3BsYXllZCBmb3IgYSBjbG9zZWQgZm9sZAorCitTeW50YXggaGlnaGxpZ2h0aW5nOgorCWhsZXhpc3RzKCkJCWNoZWNrIGlmIGEgaGlnaGxpZ2h0IGdyb3VwIGV4aXN0cworCWhsSUQoKQkJCWdldCBJRCBvZiBhIGhpZ2hsaWdodCBncm91cAorCXN5bklEKCkJCQlnZXQgc3ludGF4IElEIGF0IGEgc3BlY2lmaWMgcG9zaXRpb24KKwlzeW5JRGF0dHIoKQkJZ2V0IGEgc3BlY2lmaWMgYXR0cmlidXRlIG9mIGEgc3ludGF4IElECisJc3luSUR0cmFucygpCQlnZXQgdHJhbnNsYXRlZCBzeW50YXggSUQKKworSGlzdG9yeToKKwloaXN0YWRkKCkJCWFkZCBhbiBpdGVtIHRvIGEgaGlzdG9yeQorCWhpc3RkZWwoKQkJZGVsZXRlIGFuIGl0ZW0gZnJvbSBhIGhpc3RvcnkKKwloaXN0Z2V0KCkJCWdldCBhbiBpdGVtIGZyb20gYSBoaXN0b3J5CisJaGlzdG5yKCkJCWdldCBoaWdoZXN0IGluZGV4IG9mIGEgaGlzdG9yeSBsaXN0CisKK0ludGVyYWN0aXZlOgorCWNvbmZpcm0oKQkJbGV0IHRoZSB1c2VyIG1ha2UgYSBjaG9pY2UKKwlnZXRjaGFyKCkJCWdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSB1c2VyCisJZ2V0Y2hhcm1vZCgpCQlnZXQgbW9kaWZpZXJzIGZvciB0aGUgbGFzdCB0eXBlZCBjaGFyYWN0ZXIKKwlpbnB1dCgpCQkJZ2V0IGEgbGluZSBmcm9tIHRoZSB1c2VyCisJaW5wdXRzZWNyZXQoKQkJZ2V0IGEgbGluZSBmcm9tIHRoZSB1c2VyIHdpdGhvdXQgc2hvd2luZyBpdAorCWlucHV0ZGlhbG9nKCkJCWdldCBhIGxpbmUgZnJvbSB0aGUgdXNlciBpbiBhIGRpYWxvZworCWlucHV0cmVzYXZlCQlzYXZlIGFuZCBjbGVhciB0eXBlYWhlYWQKKwlpbnB1dHJlc3RvcmUoKQkJcmVzdG9yZSB0eXBlYWhlYWQKKworVmltIHNlcnZlcjoKKwlzZXJ2ZXJsaXN0KCkJCXJldHVybiB0aGUgbGlzdCBvZiBzZXJ2ZXIgbmFtZXMKKwlyZW1vdGVfc2VuZCgpCQlzZW5kIGNvbW1hbmQgY2hhcmFjdGVycyB0byBhIFZpbSBzZXJ2ZXIKKwlyZW1vdGVfZXhwcigpCQlldmFsdWF0ZSBhbiBleHByZXNzaW9uIGluIGEgVmltIHNlcnZlcgorCXNlcnZlcjJjbGllbnQoKQkJc2VuZCBhIHJlcGx5IHRvIGEgY2xpZW50IG9mIGEgVmltIHNlcnZlcgorCXJlbW90ZV9wZWVrKCkJCWNoZWNrIGlmIHRoZXJlIGlzIGEgcmVwbHkgZnJvbSBhIFZpbSBzZXJ2ZXIKKwlyZW1vdGVfcmVhZCgpCQlyZWFkIGEgcmVwbHkgZnJvbSBhIFZpbSBzZXJ2ZXIKKwlmb3JlZ3JvdW5kKCkJCW1vdmUgdGhlIFZpbSB3aW5kb3cgdG8gdGhlIGZvcmVncm91bmQKKwlyZW1vdGVfZm9yZWdyb3VuZCgpCW1vdmUgdGhlIFZpbSBzZXJ2ZXIgd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kCisKK1ZhcmlvdXM6CisJbW9kZSgpCQkJZ2V0IGN1cnJlbnQgZWRpdGluZyBtb2RlCisJdmlzdWFsbW9kZSgpCQlsYXN0IHZpc3VhbCBtb2RlIHVzZWQKKwloYXNtYXB0bygpCQljaGVjayBpZiBhIG1hcHBpbmcgZXhpc3RzCisJbWFwY2hlY2soKQkJY2hlY2sgaWYgYSBtYXRjaGluZyBtYXBwaW5nIGV4aXN0cworCW1hcGFyZygpCQlnZXQgcmhzIG9mIGEgbWFwcGluZworCWV4aXN0cygpCQljaGVjayBpZiBhIHZhcmlhYmxlLCBmdW5jdGlvbiwgZXRjLiBleGlzdHMKKwloYXMoKQkJCWNoZWNrIGlmIGEgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgaW4gVmltCisJY3Njb3BlX2Nvbm5lY3Rpb24oKQljaGVjayBpZiBhIGNzY29wZSBjb25uZWN0aW9uIGV4aXN0cworCWRpZF9maWxldHlwZSgpCQljaGVjayBpZiBhIEZpbGVUeXBlIGF1dG9jb21tYW5kIHdhcyB1c2VkCisJZXZlbnRoYW5kbGVyKCkJCWNoZWNrIGlmIGludm9rZWQgYnkgYW4gZXZlbnQgaGFuZGxlcgorCWdldHdpbnBvc3goKQkJWCBwb3NpdGlvbiBvZiB0aGUgR1VJIFZpbSB3aW5kb3cKKwlnZXR3aW5wb3N5KCkJCVkgcG9zaXRpb24gb2YgdGhlIEdVSSBWaW0gd2luZG93CisJd2luaGVpZ2h0KCkJCWdldCBoZWlnaHQgb2YgYSBzcGVjaWZpYyB3aW5kb3cKKwl3aW53aWR0aCgpCQlnZXQgd2lkdGggb2YgYSBzcGVjaWZpYyB3aW5kb3cKKwlsaWJjYWxsKCkJCWNhbGwgYSBmdW5jdGlvbiBpbiBhbiBleHRlcm5hbCBsaWJyYXJ5CisJbGliY2FsbG5yKCkJCWlkZW0sIHJldHVybmluZyBhIG51bWJlcgorCWdldHJlZygpCQlnZXQgY29udGVudHMgb2YgYSByZWdpc3RlcgorCWdldHJlZ3R5cGUoKQkJZ2V0IHR5cGUgb2YgYSByZWdpc3RlcgorCXNldHJlZygpCQlzZXQgY29udGVudHMgYW5kIHR5cGUgb2YgYSByZWdpc3RlcgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MS43KglEZWZpbmluZyBhIGZ1bmN0aW9uCisKK1ZpbSBlbmFibGVzIHlvdSB0byBkZWZpbmUgeW91ciBvd24gZnVuY3Rpb25zLiAgVGhlIGJhc2ljIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCitiZWdpbnMgYXMgZm9sbG93czogPgorCisJOmZ1bmN0aW9uIHtuYW1lfSh7dmFyMX0sIHt2YXIyfSwgLi4uKQorCTogIHtib2R5fQorCTplbmRmdW5jdGlvbgorPAorCU5vdGU6CisJRnVuY3Rpb24gbmFtZXMgbXVzdCBiZWdpbiB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuCisKK0xldCdzIGRlZmluZSBhIHNob3J0IGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgc21hbGxlciBvZiB0d28gbnVtYmVycy4gIEl0IHN0YXJ0cword2l0aCB0aGlzIGxpbmU6ID4KKworCTpmdW5jdGlvbiBNaW4obnVtMSwgbnVtMikKKworVGhpcyB0ZWxscyBWaW0gdGhhdCB0aGUgZnVuY3Rpb24gaXMgbmFtZWQgIk1pbiIgYW5kIGl0IHRha2VzIHR3byBhcmd1bWVudHM6CisibnVtMSIgYW5kICJudW0yIi4KKyAgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyB0byBjaGVjayB0byBzZWUgd2hpY2ggbnVtYmVyIGlzIHNtYWxsZXI6CisgICA+CisJOiAgaWYgYTpudW0xIDwgYTpudW0yCisKK1RoZSBzcGVjaWFsIHByZWZpeCAiYToiIHRlbGxzIFZpbSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uIGFyZ3VtZW50LgorTGV0J3MgYXNzaWduIHRoZSB2YXJpYWJsZSAic21hbGxlciIgdGhlIHZhbHVlIG9mIHRoZSBzbWFsbGVzdCBudW1iZXI6ID4KKworCTogIGlmIGE6bnVtMSA8IGE6bnVtMgorCTogICAgbGV0IHNtYWxsZXIgPSBhOm51bTEKKwk6ICBlbHNlCisJOiAgICBsZXQgc21hbGxlciA9IGE6bnVtMgorCTogIGVuZGlmCisKK1RoZSB2YXJpYWJsZSAic21hbGxlciIgaXMgYSBsb2NhbCB2YXJpYWJsZS4gIFZhcmlhYmxlcyB1c2VkIGluc2lkZSBhIGZ1bmN0aW9uCithcmUgbG9jYWwgdW5sZXNzIHByZWZpeGVkIGJ5IHNvbWV0aGluZyBsaWtlICJnOiIsICJhOiIsIG9yICJzOiIuCisKKwlOb3RlOgorCVRvIGFjY2VzcyBhIGdsb2JhbCB2YXJpYWJsZSBmcm9tIGluc2lkZSBhIGZ1bmN0aW9uIHlvdSBtdXN0IHByZXBlbmQKKwkiZzoiIHRvIGl0LiAgVGh1cyAiZzpjb3VudCIgaW5zaWRlIGEgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGdsb2JhbAorCXZhcmlhYmxlICJjb3VudCIsIGFuZCAiY291bnQiIGlzIGFub3RoZXIgdmFyaWFibGUsIGxvY2FsIHRvIHRoZQorCWZ1bmN0aW9uLgorCitZb3Ugbm93IHVzZSB0aGUgIjpyZXR1cm4iIHN0YXRlbWVudCB0byByZXR1cm4gdGhlIHNtYWxsZXN0IG51bWJlciB0byB0aGUgdXNlci4KK0ZpbmFsbHksIHlvdSBlbmQgdGhlIGZ1bmN0aW9uOiA+CisKKwk6ICByZXR1cm4gc21hbGxlcgorCTplbmRmdW5jdGlvbgorCitUaGUgY29tcGxldGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhcyBmb2xsb3dzOiA+CisKKwk6ZnVuY3Rpb24gTWluKG51bTEsIG51bTIpCisJOiAgaWYgYTpudW0xIDwgYTpudW0yCisJOiAgICBsZXQgc21hbGxlciA9IGE6bnVtMQorCTogIGVsc2UKKwk6ICAgIGxldCBzbWFsbGVyID0gYTpudW0yCisJOiAgZW5kaWYKKwk6ICByZXR1cm4gc21hbGxlcgorCTplbmRmdW5jdGlvbgorCitBIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgYSBidWlsdGluCitmdW5jdGlvbi4gIE9ubHkgdGhlIG5hbWUgaXMgZGlmZmVyZW50LiAgVGhlIE1pbiBmdW5jdGlvbiBjYW4gYmUgdXNlZCBsaWtlCit0aGlzOiA+CisKKwk6ZWNobyBNaW4oNSwgOCkKKworT25seSBub3cgd2lsbCB0aGUgZnVuY3Rpb24gYmUgZXhlY3V0ZWQgYW5kIHRoZSBsaW5lcyBiZSBpbnRlcnByZXRlZCBieSBWaW0uCitJZiB0aGVyZSBhcmUgbWlzdGFrZXMsIGxpa2UgdXNpbmcgYW4gdW5kZWZpbmVkIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLCB5b3Ugd2lsbAorbm93IGdldCBhbiBlcnJvciBtZXNzYWdlLiAgV2hlbiBkZWZpbmluZyB0aGUgZnVuY3Rpb24gdGhlc2UgZXJyb3JzIGFyZSBub3QKK2RldGVjdGVkLgorCitXaGVuIGEgZnVuY3Rpb24gcmVhY2hlcyAiOmVuZGZ1bmN0aW9uIiBvciAiOnJldHVybiIgaXMgdXNlZCB3aXRob3V0IGFuCithcmd1bWVudCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgemVyby4KKworVG8gcmVkZWZpbmUgYSBmdW5jdGlvbiB0aGF0IGFscmVhZHkgZXhpc3RzLCB1c2UgdGhlICEgZm9yIHRoZSAiOmZ1bmN0aW9uIgorY29tbWFuZDogPgorCisJOmZ1bmN0aW9uISAgTWluKG51bTEsIG51bTIsIG51bTMpCisKKworVVNJTkcgQSBSQU5HRQorCitUaGUgIjpjYWxsIiBjb21tYW5kIGNhbiBiZSBnaXZlbiBhIGxpbmUgcmFuZ2UuICBUaGlzIGNhbiBoYXZlIG9uZSBvZiB0d28KK21lYW5pbmdzLiAgV2hlbiBhIGZ1bmN0aW9uIGhhcyBiZWVuIGRlZmluZWQgd2l0aCB0aGUgInJhbmdlIiBrZXl3b3JkLCBpdCB3aWxsCit0YWtlIGNhcmUgb2YgdGhlIGxpbmUgcmFuZ2UgaXRzZWxmLgorICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgdGhlIHZhcmlhYmxlcyAiYTpmaXJzdGxpbmUiIGFuZCAiYTpsYXN0bGluZSIuCitUaGVzZSB3aWxsIGhhdmUgdGhlIGxpbmUgbnVtYmVycyBmcm9tIHRoZSByYW5nZSB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoLgorRXhhbXBsZTogPgorCisJOmZ1bmN0aW9uIENvdW50X3dvcmRzKCkgcmFuZ2UKKwk6ICBsZXQgbiA9IGE6Zmlyc3RsaW5lCisJOiAgbGV0IGNvdW50ID0gMAorCTogIHdoaWxlIG4gPD0gYTpsYXN0bGluZQorCTogICAgbGV0IGNvdW50ID0gY291bnQgKyBXb3JkY291bnQoZ2V0bGluZShuKSkKKwk6ICAgIGxldCBuID0gbiArIDEKKwk6ICBlbmR3aGlsZQorCTogIGVjaG8gImZvdW5kICIgLiBjb3VudCAuICIgd29yZHMiCisJOmVuZGZ1bmN0aW9uCisKK1lvdSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGg6ID4KKworCToxMCwzMGNhbGwgQ291bnRfd29yZHMoKQorCitJdCB3aWxsIGJlIGV4ZWN1dGVkIG9uY2UgYW5kIGVjaG8gdGhlIG51bWJlciBvZiB3b3Jkcy4KKyAgIFRoZSBvdGhlciB3YXkgdG8gdXNlIGEgbGluZSByYW5nZSBpcyBieSBkZWZpbmluZyBhIGZ1bmN0aW9uIHdpdGhvdXQgdGhlCisicmFuZ2UiIGtleXdvcmQuICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb25jZSBmb3IgZXZlcnkgbGluZSBpbiB0aGUKK3JhbmdlLCB3aXRoIHRoZSBjdXJzb3IgaW4gdGhhdCBsaW5lLiAgRXhhbXBsZTogPgorCisJOmZ1bmN0aW9uICBOdW1iZXIoKQorCTogIGVjaG8gImxpbmUgIiAuIGxpbmUoIi4iKSAuICIgY29udGFpbnM6ICIgLiBnZXRsaW5lKCIuIikKKwk6ZW5kZnVuY3Rpb24KKworSWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoOiA+CisKKwk6MTAsMTVjYWxsIE51bWJlcigpCisKK1RoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBzaXggdGltZXMuCisKKworVkFSSUFCTEUgTlVNQkVSIE9GIEFSR1VNRU5UUworCitWaW0gZW5hYmxlcyB5b3UgdG8gZGVmaW5lIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorVGhlIGZvbGxvd2luZyBjb21tYW5kLCBmb3IgaW5zdGFuY2UsIGRlZmluZXMgYSBmdW5jdGlvbiB0aGF0IG11c3QgaGF2ZSAxCithcmd1bWVudCAoc3RhcnQpIGFuZCBjYW4gaGF2ZSB1cCB0byAyMCBhZGRpdGlvbmFsIGFyZ3VtZW50czogPgorCisJOmZ1bmN0aW9uIFNob3coc3RhcnQsIC4uLikKKworVGhlIHZhcmlhYmxlICJhOjEiIGNvbnRhaW5zIHRoZSBmaXJzdCBvcHRpb25hbCBhcmd1bWVudCwgImE6MiIgdGhlIHNlY29uZCwgYW5kCitzbyBvbi4gIFRoZSB2YXJpYWJsZSAiYTowIiBjb250YWlucyB0aGUgbnVtYmVyIG9mIGV4dHJhIGFyZ3VtZW50cy4KKyAgIEZvciBleGFtcGxlOiA+CisKKwk6ZnVuY3Rpb24gU2hvdyhzdGFydCwgLi4uKQorCTogIGVjaG9obCBUaXRsZQorCTogIGVjaG8gIlNob3cgaXMgIiAuIGE6c3RhcnQKKwk6ICBlY2hvaGwgTm9uZQorCTogIGxldCBpbmRleCA9IDEKKwk6ICB3aGlsZSBpbmRleCA8PSBhOjAKKwk6ICAgIGVjaG8gIiAgQXJnICIgLiBpbmRleCAuICIgaXMgIiAuIGE6e2luZGV4fQorCTogICAgbGV0IGluZGV4ID0gaW5kZXggKyAxCisJOiAgZW5kd2hpbGUKKwk6ICBlY2hvICIiCisJOmVuZGZ1bmN0aW9uCisKK1RoaXMgdXNlcyB0aGUgIjplY2hvaGwiIGNvbW1hbmQgdG8gc3BlY2lmeSB0aGUgaGlnaGxpZ2h0aW5nIHVzZWQgZm9yIHRoZQorZm9sbG93aW5nICI6ZWNobyIgY29tbWFuZC4gICI6ZWNob2hsIE5vbmUiIHN0b3BzIGl0IGFnYWluLiAgVGhlICI6ZWNob24iCitjb21tYW5kIHdvcmtzIGxpa2UgIjplY2hvIiwgYnV0IGRvZXNuJ3Qgb3V0cHV0IGEgbGluZSBicmVhay4KKworCitMSVNUSU5HIEZVTkNUSU9OUworCitUaGUgIjpmdW5jdGlvbiIgY29tbWFuZCBsaXN0cyB0aGUgbmFtZXMgYW5kIGFyZ3VtZW50cyBvZiBhbGwgdXNlci1kZWZpbmVkCitmdW5jdGlvbnM6ID4KKworCTpmdW5jdGlvbgorPAlmdW5jdGlvbiBTaG93KHN0YXJ0LCAuLi4pIH4KKwlmdW5jdGlvbiBHZXRWaW1JbmRlbnQoKSB+CisJZnVuY3Rpb24gU2V0U3luKG5hbWUpIH4KKworVG8gc2VlIHdoYXQgYSBmdW5jdGlvbiBkb2VzLCB1c2UgaXRzIG5hbWUgYXMgYW4gYXJndW1lbnQgZm9yICI6ZnVuY3Rpb24iOiA+CisKKwk6ZnVuY3Rpb24gU2V0U3luCis8CTEgICAgIGlmICZzeW50YXggPT0gJycgfgorCTIgICAgICAgbGV0ICZzeW50YXggPSBhOm5hbWUgfgorCTMgICAgIGVuZGlmIH4KKwkgICBlbmRmdW5jdGlvbiB+CisKKworREVCVUdHSU5HCisKK1RoZSBsaW5lIG51bWJlciBpcyB1c2VmdWwgZm9yIHdoZW4geW91IGdldCBhbiBlcnJvciBtZXNzYWdlIG9yIHdoZW4gZGVidWdnaW5nLgorU2VlIHxkZWJ1Zy1zY3JpcHRzfCBhYm91dCBkZWJ1Z2dpbmcgbW9kZS4KKyAgIFlvdSBjYW4gYWxzbyBzZXQgdGhlICd2ZXJib3NlJyBvcHRpb24gdG8gMTIgb3IgaGlnaGVyIHRvIHNlZSBhbGwgZnVuY3Rpb24KK2NhbGxzLiAgU2V0IGl0IHRvIDE1IG9yIGhpZ2hlciB0byBzZWUgZXZlcnkgZXhlY3V0ZWQgbGluZS4KKworCitERUxFVElORyBBIEZVTkNUSU9OCisKK1RvIGRlbGV0ZSB0aGUgU2hvdygpIGZ1bmN0aW9uOiA+CisKKwk6ZGVsZnVuY3Rpb24gU2hvdworCitZb3UgZ2V0IGFuIGVycm9yIHdoZW4gdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQxLjgqCUV4Y2VwdGlvbnMKKworTGV0J3Mgc3RhcnQgd2l0aCBhbiBleGFtcGxlOiA+CisKKwk6dHJ5CisJOiAgIHJlYWQgfi90ZW1wbGF0ZXMvcGFzY2FsLnRtcGwKKwk6Y2F0Y2ggL0U0ODQ6LworCTogICBlY2hvICJTb3JyeSwgdGhlIFBhc2NhbCB0ZW1wbGF0ZSBmaWxlIGNhbm5vdCBiZSBmb3VuZC4iCisJOmVuZHRyeQorCitUaGUgIjpyZWFkIiBjb21tYW5kIHdpbGwgZmFpbCBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdC4gIEluc3RlYWQgb2YKK2dlbmVyYXRpbmcgYW4gZXJyb3IgbWVzc2FnZSwgdGhpcyBjb2RlIGNhdGNoZXMgdGhlIGVycm9yIGFuZCBnaXZlcyB0aGUgdXNlciBhCituaWNlIG1lc3NhZ2UgaW5zdGVhZC4KKworRm9yIHRoZSBjb21tYW5kcyBpbiBiZXR3ZWVuICI6dHJ5IiBhbmQgIjplbmR0cnkiIGVycm9ycyBhcmUgdHVybmVkIGludG8KK2V4Y2VwdGlvbnMuICBBbiBleGNlcHRpb24gaXMgYSBzdHJpbmcuICBJbiB0aGUgY2FzZSBvZiBhbiBlcnJvciB0aGUgc3RyaW5nCitjb250YWlucyB0aGUgZXJyb3IgbWVzc2FnZS4gIEFuZCBldmVyeSBlcnJvciBtZXNzYWdlIGhhcyBhIG51bWJlci4gIEluIHRoaXMKK2Nhc2UsIHRoZSBlcnJvciB3ZSBjYXRjaCBjb250YWlucyAiRTQ4NDoiLiAgVGhpcyBudW1iZXIgaXMgZ3VhcmFudGVlZCB0byBzdGF5Cit0aGUgc2FtZSAodGhlIHRleHQgbWF5IGNoYW5nZSwgZS5nLiwgaXQgbWF5IGJlIHRyYW5zbGF0ZWQpLgorCitXaGVuIHRoZSAiOnJlYWQiIGNvbW1hbmQgY2F1c2VzIGFub3RoZXIgZXJyb3IsIHRoZSBwYXR0ZXJuICJFNDg0OiIgd2lsbCBub3QKK21hdGNoIGluIGl0LiAgVGh1cyB0aGlzIGV4Y2VwdGlvbiB3aWxsIG5vdCBiZSBjYXVnaHQgYW5kIHJlc3VsdCBpbiB0aGUgdXN1YWwKK2Vycm9yIG1lc3NhZ2UuCisKK1lvdSBtaWdodCBiZSB0ZW1wdGVkIHRvIGRvIHRoaXM6ID4KKworCTp0cnkKKwk6ICAgcmVhZCB+L3RlbXBsYXRlcy9wYXNjYWwudG1wbAorCTpjYXRjaAorCTogICBlY2hvICJTb3JyeSwgdGhlIFBhc2NhbCB0ZW1wbGF0ZSBmaWxlIGNhbm5vdCBiZSBmb3VuZC4iCisJOmVuZHRyeQorCitUaGlzIG1lYW5zIGFsbCBlcnJvcnMgYXJlIGNhdWdodC4gIEJ1dCB0aGVuIHlvdSB3aWxsIG5vdCBzZWUgZXJyb3JzIHRoYXQgYXJlCit1c2VmdWwsIHN1Y2ggYXMgIkUyMTogQ2Fubm90IG1ha2UgY2hhbmdlcywgJ21vZGlmaWFibGUnIGlzIG9mZiIuCisKK0Fub3RoZXIgdXNlZnVsIG1lY2hhbmlzbSBpcyB0aGUgIjpmaW5hbGx5IiBjb21tYW5kOiA+CisKKwk6bGV0IHRtcCA9IHRlbXBuYW1lKCkKKwk6dHJ5CisJOiAgIGV4ZSAiLiwkd3JpdGUgIiAuIHRtcAorCTogICBleGUgIiFmaWx0ZXIgIiAuIHRtcAorCTogICAuLCRkZWxldGUKKwk6ICAgZXhlICIkcmVhZCAiIC4gdG1wCisJOmZpbmFsbHkKKwk6ICAgY2FsbCBkZWxldGUodG1wKQorCTplbmR0cnkKKworVGhpcyBmaWx0ZXJzIHRoZSBsaW5lcyBmcm9tIHRoZSBjdXJzb3IgdW50aWwgdGhlIGVuZCBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZQorImZpbHRlciIgY29tbWFuZCwgd2hpY2ggdGFrZXMgYSBmaWxlIG5hbWUgYXJndW1lbnQuICBObyBtYXR0ZXIgaWYgdGhlCitmaWx0ZXJpbmcgd29ya3MsIHNvbWV0aGluZyBnb2VzIHdyb25nIGluIGJldHdlZW4gIjp0cnkiIGFuZCAiOmZpbmFsbHkiIG9yIHRoZQordXNlciBjYW5jZWxzIHRoZSBmaWx0ZXJpbmcgYnkgcHJlc3NpbmcgQ1RSTC1DLCB0aGUgImNhbGwgZGVsZXRlKHRtcCkiIGlzCithbHdheXMgZXhlY3V0ZWQuICBUaGlzIG1ha2VzIHN1cmUgeW91IGRvbid0IGxlYXZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBiZWhpbmQuCisKK01vcmUgaW5mb3JtYXRpb24gYWJvdXQgZXhjZXB0aW9uIGhhbmRsaW5nIGNhbiBiZSBmb3VuZCBpbiB0aGUgcmVmZXJlbmNlCittYW51YWw6IHxleGNlcHRpb24taGFuZGxpbmd8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MS45KglWYXJpb3VzIHJlbWFya3MKKworSGVyZSBpcyBhIHN1bW1hcnkgb2YgaXRlbXMgdGhhdCBhcHBseSB0byBWaW0gc2NyaXB0cy4gIFRoZXkgYXJlIGFsc28gbWVudGlvbmVkCitlbHNld2hlcmUsIGJ1dCBmb3JtIGEgbmljZSBjaGVja2xpc3QuCisKK1RoZSBlbmQtb2YtbGluZSBjaGFyYWN0ZXIgZGVwZW5kcyBvbiB0aGUgc3lzdGVtLiAgRm9yIFVuaXggYSBzaW5nbGUgPE5MPgorY2hhcmFjdGVyIGlzIHVzZWQuICBGb3IgTVMtRE9TLCBXaW5kb3dzLCBPUy8yIGFuZCB0aGUgbGlrZSwgPENSPjxMRj4gaXMgdXNlZC4KK1RoaXMgaXMgaW1wb3J0YW50IHdoZW4gdXNpbmcgbWFwcGluZ3MgdGhhdCBlbmQgaW4gYSA8Q1I+LiAgU2VlIHw6c291cmNlX2Nybmx8LgorCisKK1dISVRFIFNQQUNFCisKK0JsYW5rIGxpbmVzIGFyZSBhbGxvd2VkIGFuZCBpZ25vcmVkLgorCitMZWFkaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVycyAoYmxhbmtzIGFuZCBUQUJzKSBhcmUgYWx3YXlzIGlnbm9yZWQuICBUaGUKK3doaXRlc3BhY2VzIGJldHdlZW4gcGFyYW1ldGVycyAoZS5nLiBiZXR3ZWVuIHRoZSAnc2V0JyBhbmQgdGhlICdjcG9wdGlvbnMnIGluCit0aGUgZXhhbXBsZSBiZWxvdykgYXJlIHJlZHVjZWQgdG8gb25lIGJsYW5rIGNoYXJhY3RlciBhbmQgcGxheXMgdGhlIHJvbGUgb2YgYQorc2VwYXJhdG9yLCB0aGUgd2hpdGVzcGFjZXMgYWZ0ZXIgdGhlIGxhc3QgKHZpc2libGUpIGNoYXJhY3RlciBtYXkgb3IgbWF5IG5vdAorYmUgaWdub3JlZCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbiwgc2VlIGJlbG93LgorCitGb3IgYSAiOnNldCIgY29tbWFuZCBpbnZvbHZpbmcgdGhlICI9IiAoZXF1YWwpIHNpZ24sIHN1Y2ggYXMgaW46ID4KKworCTpzZXQgY3BvcHRpb25zICAgID1hQUJjZUZzdAorCit0aGUgd2hpdGVzcGFjZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlICI9IiBzaWduIGlzIGlnbm9yZWQuICBCdXQgdGhlcmUgY2FuIGJlCitubyB3aGl0ZXNwYWNlIGFmdGVyIHRoZSAiPSIgc2lnbiEKKworVG8gaW5jbHVkZSBhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24sIGl0IG11c3QgYmUKK2VzY2FwZWQgYnkgYSAiXCIgKGJhY2tzbGFzaCkgIGFzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTogPgorCisJOnNldCB0YWdzPW15XCBuaWNlXCBmaWxlCisKK1RoZSBzYW1lIGV4YW1wbGUgd3JpdHRlbiBhcyA+CisKKwk6c2V0IHRhZ3M9bXkgbmljZSBmaWxlCisKK3dpbGwgaXNzdWUgYW4gZXJyb3IsIGJlY2F1c2UgaXQgaXMgaW50ZXJwcmV0ZWQgYXM6ID4KKworCTpzZXQgdGFncz1teQorCTpzZXQgbmljZQorCTpzZXQgZmlsZQorCisKK0NPTU1FTlRTCisKK1RoZSBjaGFyYWN0ZXIgIiAodGhlIGRvdWJsZSBxdW90ZSBtYXJrKSBzdGFydHMgYSBjb21tZW50LiAgRXZlcnl0aGluZyBhZnRlcgorYW5kIGluY2x1ZGluZyB0aGlzIGNoYXJhY3RlciB1bnRpbCB0aGUgZW5kLW9mLWxpbmUgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQgYW5kCitpcyBpZ25vcmVkLCBleGNlcHQgZm9yIGNvbW1hbmRzIHRoYXQgZG9uJ3QgY29uc2lkZXIgY29tbWVudHMsIGFzIHNob3duIGluCitleGFtcGxlcyBiZWxvdy4gIEEgY29tbWVudCBjYW4gc3RhcnQgb24gYW55IGNoYXJhY3RlciBwb3NpdGlvbiBvbiB0aGUgbGluZS4KKworVGhlcmUgaXMgYSBsaXR0bGUgImNhdGNoIiB3aXRoIGNvbW1lbnRzIGZvciBzb21lIGNvbW1hbmRzLiAgRXhhbXBsZXM6ID4KKworCTphYmJyZXYgZGV2IGRldmVsb3BtZW50CQkiIHNob3J0aGFuZAorCTptYXAgPEYzPiBvI2luY2x1ZGUJCSIgaW5zZXJ0IGluY2x1ZGUKKwk6ZXhlY3V0ZSBjbWQJCQkiIGRvIGl0CisJOiFscyAqLmMJCQkiIGxpc3QgQyBmaWxlcworCitUaGUgYWJicmV2aWF0aW9uICdkZXYnIHdpbGwgYmUgZXhwYW5kZWQgdG8gJ2RldmVsb3BtZW50ICAgICAiIHNob3J0aGFuZCcuICBUaGUKK21hcHBpbmcgb2YgPEYzPiB3aWxsIGFjdHVhbGx5IGJlIHRoZSB3aG9sZSBsaW5lIGFmdGVyIHRoZSAnbyMgLi4uLicgaW5jbHVkaW5nCit0aGUgJyIgaW5zZXJ0IGluY2x1ZGUnLiAgVGhlICJleGVjdXRlIiBjb21tYW5kIHdpbGwgZ2l2ZSBhbiBlcnJvci4gIFRoZSAiISIKK2NvbW1hbmQgd2lsbCBzZW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQgdG8gdGhlIHNoZWxsLCBjYXVzaW5nIGFuIGVycm9yIGZvciBhbgordW5tYXRjaGVkICciJyBjaGFyYWN0ZXIuCisgICBUaGVyZSBjYW4gYmUgbm8gY29tbWVudCBhZnRlciAiOm1hcCIsICI6YWJicmV2aWF0ZSIsICI6ZXhlY3V0ZSIgYW5kICIhIgorY29tbWFuZHMgKHRoZXJlIGFyZSBhIGZldyBtb3JlIGNvbW1hbmRzIHdpdGggdGhpcyByZXN0cmljdGlvbikuICBGb3IgdGhlCisiOm1hcCIsICI6YWJicmV2aWF0ZSIgYW5kICI6ZXhlY3V0ZSIgY29tbWFuZHMgdGhlcmUgaXMgYSB0cmljazogPgorCisJOmFiYnJldiBkZXYgZGV2ZWxvcG1lbnR8IiBzaG9ydGhhbmQKKwk6bWFwIDxGMz4gbyNpbmNsdWRlfCIgaW5zZXJ0IGluY2x1ZGUKKwk6ZXhlY3V0ZSBjbWQJCQl8IiBkbyBpdAorCitXaXRoIHRoZSAnfCcgY2hhcmFjdGVyIHRoZSBjb21tYW5kIGlzIHNlcGFyYXRlZCBmcm9tIHRoZSBuZXh0IG9uZS4gIEFuZCB0aGF0CituZXh0IGNvbW1hbmQgaXMgb25seSBhIGNvbW1lbnQuCisKK05vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgJ3wnIGluIHRoZSBhYmJyZXZpYXRpb24gYW5kCittYXBwaW5nLiAgRm9yIHRoZXNlIGNvbW1hbmRzLCBhbnkgY2hhcmFjdGVyIHVudGlsIHRoZSBlbmQtb2YtbGluZSBvciAnfCcgaXMKK2luY2x1ZGVkLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIGJlaGF2aW9yLCB5b3UgZG9uJ3QgYWx3YXlzIHNlZSB0aGF0Cit0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGluY2x1ZGVkOiA+CisKKwk6bWFwIDxGND4gbyNpbmNsdWRlICAKKworVG8gYXZvaWQgdGhlc2UgcHJvYmxlbXMsIHlvdSBjYW4gc2V0IHRoZSAnbGlzdCcgb3B0aW9uIHdoZW4gZWRpdGluZyB2aW1yYworZmlsZXMuCisKKworUElURkFMTFMKKworRXZlbiBiaWdnZXIgcHJvYmxlbSBhcmlzZXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOiA+CisKKwk6bWFwICxhYiBvI2luY2x1ZGUKKwk6dW5tYXAgLGFiIAorCitIZXJlIHRoZSB1bm1hcCBjb21tYW5kIHdpbGwgbm90IHdvcmssIGJlY2F1c2UgaXQgdHJpZXMgdG8gdW5tYXAgIixhYiAiLiAgVGhpcworZG9lcyBub3QgZXhpc3QgYXMgYSBtYXBwZWQgc2VxdWVuY2UuICBBbiBlcnJvciB3aWxsIGJlIGlzc3VlZCwgd2hpY2ggaXMgdmVyeQoraGFyZCB0byBpZGVudGlmeSwgYmVjYXVzZSB0aGUgZW5kaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGluICI6dW5tYXAgLGFiICIgaXMKK25vdCB2aXNpYmxlLgorCitBbmQgdGhpcyBpcyB0aGUgc2FtZSBhcyB3aGF0IGhhcHBlbnMgd2hlbiBvbmUgdXNlcyBhIGNvbW1lbnQgYWZ0ZXIgYW4gJ3VubWFwJworY29tbWFuZDogPgorCisJOnVubWFwICxhYiAgICAgIiBjb21tZW50CisKK0hlcmUgdGhlIGNvbW1lbnQgcGFydCB3aWxsIGJlIGlnbm9yZWQuICBIb3dldmVyLCBWaW0gd2lsbCB0cnkgdG8gdW5tYXAKKycsYWIgICAgICcsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiAgUmV3cml0ZSBpdCBhczogPgorCisJOnVubWFwICxhYnwgICAgIiBjb21tZW50CisKKworUkVTVE9SSU5HIFRIRSBWSUVXCisKK1NvbWV0aW1lcyB5b3Ugd2FudCB0byBtYWtlIGEgY2hhbmdlIGFuZCBnbyBiYWNrIHRvIHdoZXJlIGN1cnNvciB3YXMuCitSZXN0b3JpbmcgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIHdvdWxkIGFsc28gYmUgbmljZSwgc28gdGhhdCB0aGUgc2FtZSBsaW5lCithcHBlYXJzIGF0IHRoZSB0b3Agb2YgdGhlIHdpbmRvdy4KKyAgIFRoaXMgZXhhbXBsZSB5YW5rcyB0aGUgY3VycmVudCBsaW5lLCBwdXRzIGl0IGFib3ZlIHRoZSBmaXJzdCBsaW5lIGluIHRoZQorZmlsZSBhbmQgdGhlbiByZXN0b3JlcyB0aGUgdmlldzogPgorCisJbWFwICxwIG1hImFZSG1iZ2ciYVBgYnp0YGEKKworV2hhdCB0aGlzIGRvZXM6ID4KKwltYSJhWUhtYmdnImFQYGJ6dGBhCis8CW1hCQkJc2V0IG1hcmsgYSBhdCBjdXJzb3IgcG9zaXRpb24KKwkgICJhWQkJCXlhbmsgY3VycmVudCBsaW5lIGludG8gcmVnaXN0ZXIgYQorCSAgICAgSG1iCQlnbyB0byB0b3AgbGluZSBpbiB3aW5kb3cgYW5kIHNldCBtYXJrIGIgdGhlcmUKKwkJZ2cJCWdvIHRvIGZpcnN0IGxpbmUgaW4gZmlsZQorCQkgICJhUAkJcHV0IHRoZSB5YW5rZWQgbGluZSBhYm92ZSBpdAorCQkgICAgIGBiCQlnbyBiYWNrIHRvIHRvcCBsaW5lIGluIGRpc3BsYXkKKwkJICAgICAgIHp0CXBvc2l0aW9uIHRoZSB0ZXh0IGluIHRoZSB3aW5kb3cgYXMgYmVmb3JlCisJCQkgYGEJZ28gYmFjayB0byBzYXZlZCBjdXJzb3IgcG9zaXRpb24KKworCitQQUNLQUdJTkcKKworVG8gYXZvaWQgeW91ciBmdW5jdGlvbiBuYW1lcyB0byBpbnRlcmZlcmUgd2l0aCBmdW5jdGlvbnMgdGhhdCB5b3UgZ2V0IGZyb20KK290aGVycywgdXNlIHRoaXMgc2NoZW1lOgorLSBQcmVwZW5kIGEgdW5pcXVlIHN0cmluZyBiZWZvcmUgZWFjaCBmdW5jdGlvbiBuYW1lLiAgSSBvZnRlbiB1c2UgYW4KKyAgYWJicmV2aWF0aW9uLiAgRm9yIGV4YW1wbGUsICJPV18iIGlzIHVzZWQgZm9yIHRoZSBvcHRpb24gd2luZG93IGZ1bmN0aW9ucy4KKy0gUHV0IHRoZSBkZWZpbml0aW9uIG9mIHlvdXIgZnVuY3Rpb25zIHRvZ2V0aGVyIGluIGEgZmlsZS4gIFNldCBhIGdsb2JhbAorICB2YXJpYWJsZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmdW5jdGlvbnMgaGF2ZSBiZWVuIGxvYWRlZC4gIFdoZW4gc291cmNpbmcgdGhlCisgIGZpbGUgYWdhaW4sIGZpcnN0IHVubG9hZCB0aGUgZnVuY3Rpb25zLgorRXhhbXBsZTogPgorCisJIiBUaGlzIGlzIHRoZSBYWFggcGFja2FnZQorCisJaWYgZXhpc3RzKCJYWFhfbG9hZGVkIikKKwkgIGRlbGZ1biBYWFhfb25lCisJICBkZWxmdW4gWFhYX3R3bworCWVuZGlmCisKKwlmdW5jdGlvbiBYWFhfb25lKGEpCisJCS4uLiBib2R5IG9mIGZ1bmN0aW9uIC4uLgorCWVuZGZ1bgorCisJZnVuY3Rpb24gWFhYX3R3byhiKQorCQkuLi4gYm9keSBvZiBmdW5jdGlvbiAuLi4KKwllbmRmdW4KKworCWxldCBYWFhfbG9hZGVkID0gMQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MS4xMCoJV3JpdGluZyBhIHBsdWdpbgkJCQkqd3JpdGUtcGx1Z2luKgorCitZb3UgY2FuIHdyaXRlIGEgVmltIHNjcmlwdCBpbiBzdWNoIGEgd2F5IHRoYXQgbWFueSBwZW9wbGUgY2FuIHVzZSBpdC4gIFRoaXMgaXMKK2NhbGxlZCBhIHBsdWdpbi4gIFZpbSB1c2VycyBjYW4gZHJvcCB5b3VyIHNjcmlwdCBpbiB0aGVpciBwbHVnaW4gZGlyZWN0b3J5IGFuZAordXNlIGl0cyBmZWF0dXJlcyByaWdodCBhd2F5IHxhZGQtcGx1Z2lufC4KKworVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB0eXBlcyBvZiBwbHVnaW5zOgorCisgIGdsb2JhbCBwbHVnaW5zOiBGb3IgYWxsIHR5cGVzIG9mIGZpbGVzLgorZmlsZXR5cGUgcGx1Z2luczogT25seSBmb3IgZmlsZXMgb2YgYSBzcGVjaWZpYyB0eXBlLgorCitJbiB0aGlzIHNlY3Rpb24gdGhlIGZpcnN0IHR5cGUgaXMgZXhwbGFpbmVkLiAgTW9zdCBpdGVtcyBhcmUgYWxzbyByZWxldmFudCBmb3IKK3dyaXRpbmcgZmlsZXR5cGUgcGx1Z2lucy4gIFRoZSBzcGVjaWZpY3MgZm9yIGZpbGV0eXBlIHBsdWdpbnMgYXJlIGluIHRoZSBuZXh0CitzZWN0aW9uIHx3cml0ZS1maWxldHlwZS1wbHVnaW58LgorCisKK05BTUUKKworRmlyc3Qgb2YgYWxsIHlvdSBtdXN0IGNob29zZSBhIG5hbWUgZm9yIHlvdXIgcGx1Z2luLiAgVGhlIGZlYXR1cmVzIHByb3ZpZGVkCitieSB0aGUgcGx1Z2luIHNob3VsZCBiZSBjbGVhciBmcm9tIGl0cyBuYW1lLiAgQW5kIGl0IHNob3VsZCBiZSB1bmxpa2VseSB0aGF0Citzb21lb25lIGVsc2Ugd3JpdGVzIGEgcGx1Z2luIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgd2hpY2ggZG9lcyBzb21ldGhpbmcKK2RpZmZlcmVudC4gIEFuZCBwbGVhc2UgbGltaXQgdGhlIG5hbWUgdG8gOCBjaGFyYWN0ZXJzLCB0byBhdm9pZCBwcm9ibGVtcyBvbgorb2xkIFdpbmRvd3Mgc3lzdGVtcy4KKworQSBzY3JpcHQgdGhhdCBjb3JyZWN0cyB0eXBpbmcgbWlzdGFrZXMgY291bGQgYmUgY2FsbGVkICJ0eXBlY29yci52aW0iLiAgV2UKK3dpbGwgdXNlIGl0IGhlcmUgYXMgYW4gZXhhbXBsZS4KKworRm9yIHRoZSBwbHVnaW4gdG8gd29yayBmb3IgZXZlcnlib2R5LCBpdCBzaG91bGQgZm9sbG93IGEgZmV3IGd1aWRlbGluZXMuICBUaGlzCit3aWxsIGJlIGV4cGxhaW5lZCBzdGVwLWJ5LXN0ZXAuICBUaGUgY29tcGxldGUgZXhhbXBsZSBwbHVnaW4gaXMgYXQgdGhlIGVuZC4KKworCitCT0RZCisKK0xldCdzIHN0YXJ0IHdpdGggdGhlIGJvZHkgb2YgdGhlIHBsdWdpbiwgdGhlIGxpbmVzIHRoYXQgZG8gdGhlIGFjdHVhbCB3b3JrOiA+CisKKyAxNAlpYWJicmV2IHRlaCB0aGUKKyAxNQlpYWJicmV2IG90ZWhyIG90aGVyCisgMTYJaWFiYnJldiB3bmF0IHdhbnQKKyAxNwlpYWJicmV2IHN5bmNocm9uaXNhdGlvbgorIDE4CQlcIHN5bmNocm9uaXphdGlvbgorIDE5CWxldCBzOmNvdW50ID0gNAorCitUaGUgYWN0dWFsIGxpc3Qgc2hvdWxkIGJlIG11Y2ggbG9uZ2VyLCBvZiBjb3Vyc2UuCisKK1RoZSBsaW5lIG51bWJlcnMgaGF2ZSBvbmx5IGJlZW4gYWRkZWQgdG8gZXhwbGFpbiBhIGZldyB0aGluZ3MsIGRvbid0IHB1dCB0aGVtCitpbiB5b3VyIHBsdWdpbiBmaWxlIQorCisKK0hFQURFUgorCitZb3Ugd2lsbCBwcm9iYWJseSBhZGQgbmV3IGNvcnJlY3Rpb25zIHRvIHRoZSBwbHVnaW4gYW5kIHNvb24gaGF2ZSBzZXZlcmFsCit2ZXJzaW9ucyBsYXlpbmcgYXJvdW5kLiAgQW5kIHdoZW4gZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgcGVvcGxlIHdpbGwgd2FudCB0bwora25vdyB3aG8gd3JvdGUgdGhpcyB3b25kZXJmdWwgcGx1Z2luIGFuZCB3aGVyZSB0aGV5IGNhbiBzZW5kIHJlbWFya3MuCitUaGVyZWZvcmUsIHB1dCBhIGhlYWRlciBhdCB0aGUgdG9wIG9mIHlvdXIgcGx1Z2luOiA+CisKKyAgMQkiIFZpbSBnbG9iYWwgcGx1Z2luIGZvciBjb3JyZWN0aW5nIHR5cGluZyBtaXN0YWtlcworICAyCSIgTGFzdCBDaGFuZ2U6CTIwMDAgT2N0IDE1CisgIDMJIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorCitBYm91dCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZzogU2luY2UgcGx1Z2lucyBhcmUgdmVyeSB1c2VmdWwgYW5kIGl0J3MgaGFyZGx5Cit3b3J0aCByZXN0cmljdGluZyB0aGVpciBkaXN0cmlidXRpb24sIHBsZWFzZSBjb25zaWRlciBtYWtpbmcgeW91ciBwbHVnaW4KK2VpdGhlciBwdWJsaWMgZG9tYWluIG9yIHVzZSB0aGUgVmltIHxsaWNlbnNlfC4gIEEgc2hvcnQgbm90ZSBhYm91dCB0aGlzIG5lYXIKK3RoZSB0b3Agb2YgdGhlIHBsdWdpbiBzaG91bGQgYmUgc3VmZmljaWVudC4gIEV4YW1wbGU6ID4KKworICA0CSIgTGljZW5zZToJVGhpcyBmaWxlIGlzIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworCitMSU5FIENPTlRJTlVBVElPTiwgQVZPSURJTkcgU0lERSBFRkZFQ1RTCQkqdXNlLWNwby1zYXZlKgorCitJbiBsaW5lIDE4IGFib3ZlLCB0aGUgbGluZS1jb250aW51YXRpb24gbWVjaGFuaXNtIGlzIHVzZWQgfGxpbmUtY29udGludWF0aW9ufC4KK1VzZXJzIHdpdGggJ2NvbXBhdGlibGUnIHNldCB3aWxsIHJ1biBpbnRvIHRyb3VibGUgaGVyZSwgdGhleSB3aWxsIGdldCBhbiBlcnJvcgorbWVzc2FnZS4gIFdlIGNhbid0IGp1c3QgcmVzZXQgJ2NvbXBhdGlibGUnLCBiZWNhdXNlIHRoYXQgaGFzIGEgbG90IG9mIHNpZGUKK2VmZmVjdHMuICBUbyBhdm9pZCB0aGlzLCB3ZSB3aWxsIHNldCB0aGUgJ2Nwb3B0aW9ucycgb3B0aW9uIHRvIGl0cyBWaW0gZGVmYXVsdAordmFsdWUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuICBUaGF0IHdpbGwgYWxsb3cgdGhlIHVzZSBvZiBsaW5lLWNvbnRpbnVhdGlvbiBhbmQKK21ha2UgdGhlIHNjcmlwdCB3b3JrIGZvciBtb3N0IHBlb3BsZS4gIEl0IGlzIGRvbmUgbGlrZSB0aGlzOiA+CisKKyAxMQlsZXQgczpzYXZlX2NwbyA9ICZjcG8KKyAxMglzZXQgY3BvJnZpbQorIC4uCisgNDIJbGV0ICZjcG8gPSBzOnNhdmVfY3BvCisKK1dlIGZpcnN0IHN0b3JlIHRoZSBvbGQgdmFsdWUgb2YgJ2Nwb3B0aW9ucycgaW4gdGhlIHM6c2F2ZV9jcG8gdmFyaWFibGUuICBBdAordGhlIGVuZCBvZiB0aGUgcGx1Z2luIHRoaXMgdmFsdWUgaXMgcmVzdG9yZWQuCisKK05vdGljZSB0aGF0IGEgc2NyaXB0LWxvY2FsIHZhcmlhYmxlIGlzIHVzZWQgfHM6dmFyfC4gIEEgZ2xvYmFsIHZhcmlhYmxlIGNvdWxkCithbHJlYWR5IGJlIGluIHVzZSBmb3Igc29tZXRoaW5nIGVsc2UuICBBbHdheXMgdXNlIHNjcmlwdC1sb2NhbCB2YXJpYWJsZXMgZm9yCit0aGluZ3MgdGhhdCBhcmUgb25seSB1c2VkIGluIHRoZSBzY3JpcHQuCisKKworTk9UIExPQURJTkcKKworSXQncyBwb3NzaWJsZSB0aGF0IGEgdXNlciBkb2Vzbid0IGFsd2F5cyB3YW50IHRvIGxvYWQgdGhpcyBwbHVnaW4uICBPciB0aGUKK3N5c3RlbSBhZG1pbmlzdHJhdG9yIGhhcyBkcm9wcGVkIGl0IGluIHRoZSBzeXN0ZW0td2lkZSBwbHVnaW4gZGlyZWN0b3J5LCBidXQgYQordXNlciBoYXMgaGlzIG93biBwbHVnaW4gaGUgd2FudHMgdG8gdXNlLiAgVGhlbiB0aGUgdXNlciBtdXN0IGhhdmUgYSBjaGFuY2UgdG8KK2Rpc2FibGUgbG9hZGluZyB0aGlzIHNwZWNpZmljIHBsdWdpbi4gIFRoaXMgd2lsbCBtYWtlIGl0IHBvc3NpYmxlOiA+CisKKyAgNglpZiBleGlzdHMoImxvYWRlZF90eXBlY29yciIpCisgIDcJICBmaW5pc2gKKyAgOAllbmRpZgorICA5CWxldCBsb2FkZWRfdHlwZWNvcnIgPSAxCisKK1RoaXMgYWxzbyBhdm9pZHMgdGhhdCB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVkIHR3aWNlIGl0IHdvdWxkIGNhdXNlIGVycm9yCittZXNzYWdlcyBmb3IgcmVkZWZpbmluZyBmdW5jdGlvbnMgYW5kIGNhdXNlIHRyb3VibGUgZm9yIGF1dG9jb21tYW5kcyB0aGF0IGFyZQorYWRkZWQgdHdpY2UuCisKKworTUFQUElORworCitOb3cgbGV0J3MgbWFrZSB0aGUgcGx1Z2luIG1vcmUgaW50ZXJlc3Rpbmc6IFdlIHdpbGwgYWRkIGEgbWFwcGluZyB0aGF0IGFkZHMgYQorY29ycmVjdGlvbiBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4gIFdlIGNvdWxkIGp1c3QgcGljayBhIGtleSBzZXF1ZW5jZQorZm9yIHRoaXMgbWFwcGluZywgYnV0IHRoZSB1c2VyIG1pZ2h0IGFscmVhZHkgdXNlIGl0IGZvciBzb21ldGhpbmcgZWxzZS4gIFRvCithbGxvdyB0aGUgdXNlciB0byBkZWZpbmUgd2hpY2gga2V5cyBhIG1hcHBpbmcgaW4gYSBwbHVnaW4gdXNlcywgdGhlIDxMZWFkZXI+CitpdGVtIGNhbiBiZSB1c2VkOiA+CisKKyAyMgkgIG1hcCA8dW5pcXVlPiA8TGVhZGVyPmEgIDxQbHVnPlR5cGVjb3JyQWRkCisKK1RoZSAiPFBsdWc+VHlwZWNvcnJBZGQiIHRoaW5nIHdpbGwgZG8gdGhlIHdvcmssIG1vcmUgYWJvdXQgdGhhdCBmdXJ0aGVyIG9uLgorCitUaGUgdXNlciBjYW4gc2V0IHRoZSAibWFwbGVhZGVyIiB2YXJpYWJsZSB0byB0aGUga2V5IHNlcXVlbmNlIHRoYXQgaGUgd2FudHMKK3RoaXMgbWFwcGluZyB0byBzdGFydCB3aXRoLiAgVGh1cyBpZiB0aGUgdXNlciBoYXMgZG9uZTogPgorCisJbGV0IG1hcGxlYWRlciA9ICJfIgorCit0aGUgbWFwcGluZyB3aWxsIGRlZmluZSAiX2EiLiAgSWYgdGhlIHVzZXIgZGlkbid0IGRvIHRoaXMsIHRoZSBkZWZhdWx0IHZhbHVlCit3aWxsIGJlIHVzZWQsIHdoaWNoIGlzIGEgYmFja3NsYXNoLiAgVGhlbiBhIG1hcCBmb3IgIlxhIiB3aWxsIGJlIGRlZmluZWQuCisKK05vdGUgdGhhdCA8dW5pcXVlPiBpcyB1c2VkLCB0aGlzIHdpbGwgY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgbWFwcGluZworYWxyZWFkeSBoYXBwZW5lZCB0byBleGlzdC4gfDptYXAtPHVuaXF1ZT58CisKK0J1dCB3aGF0IGlmIHRoZSB1c2VyIHdhbnRzIHRvIGRlZmluZSBoaXMgb3duIGtleSBzZXF1ZW5jZT8gIFdlIGNhbiBhbGxvdyB0aGF0Cit3aXRoIHRoaXMgbWVjaGFuaXNtOiA+CisKKyAyMQlpZiAhaGFzbWFwdG8oJzxQbHVnPlR5cGVjb3JyQWRkJykKKyAyMgkgIG1hcCA8dW5pcXVlPiA8TGVhZGVyPmEgIDxQbHVnPlR5cGVjb3JyQWRkCisgMjMJZW5kaWYKKworVGhpcyBjaGVja3MgaWYgYSBtYXBwaW5nIHRvICI8UGx1Zz5UeXBlY29yckFkZCIgYWxyZWFkeSBleGlzdHMsIGFuZCBvbmx5CitkZWZpbmVzIHRoZSBtYXBwaW5nIGZyb20gIjxMZWFkZXI+YSIgaWYgaXQgZG9lc24ndC4gIFRoZSB1c2VyIHRoZW4gaGFzIGEKK2NoYW5jZSBvZiBwdXR0aW5nIHRoaXMgaW4gaGlzIHZpbXJjIGZpbGU6ID4KKworCW1hcCAsYyAgPFBsdWc+VHlwZWNvcnJBZGQKKworVGhlbiB0aGUgbWFwcGVkIGtleSBzZXF1ZW5jZSB3aWxsIGJlICIsYyIgaW5zdGVhZCBvZiAiX2EiIG9yICJcYSIuCisKKworUElFQ0VTCisKK0lmIGEgc2NyaXB0IGdldHMgbG9uZ2VyLCB5b3Ugb2Z0ZW4gd2FudCB0byBicmVhayB1cCB0aGUgd29yayBpbiBwaWVjZXMuICBZb3UKK2NhbiB1c2UgZnVuY3Rpb25zIG9yIG1hcHBpbmdzIGZvciB0aGlzLiAgQnV0IHlvdSBkb24ndCB3YW50IHRoZXNlIGZ1bmN0aW9ucworYW5kIG1hcHBpbmdzIHRvIGludGVyZmVyZSB3aXRoIHRoZSBvbmVzIGZyb20gb3RoZXIgc2NyaXB0cy4gIEZvciBleGFtcGxlLCB5b3UKK2NvdWxkIGRlZmluZSBhIGZ1bmN0aW9uIEFkZCgpLCBidXQgYW5vdGhlciBzY3JpcHQgY291bGQgdHJ5IHRvIGRlZmluZSB0aGUgc2FtZQorZnVuY3Rpb24uICBUbyBhdm9pZCB0aGlzLCB3ZSBkZWZpbmUgdGhlIGZ1bmN0aW9uIGxvY2FsIHRvIHRoZSBzY3JpcHQgYnkKK3ByZXBlbmRpbmcgaXQgd2l0aCAiczoiLgorCitXZSB3aWxsIGRlZmluZSBhIGZ1bmN0aW9uIHRoYXQgYWRkcyBhIG5ldyB0eXBpbmcgY29ycmVjdGlvbjogPgorCisgMzAJZnVuY3Rpb24gczpBZGQoZnJvbSwgY29ycmVjdCkKKyAzMQkgIGxldCB0byA9IGlucHV0KCJ0eXBlIHRoZSBjb3JyZWN0aW9uIGZvciAiIC4gYTpmcm9tIC4gIjogIikKKyAzMgkgIGV4ZSAiOmlhYmJyZXYgIiAuIGE6ZnJvbSAuICIgIiAuIHRvCisgLi4KKyAzNgllbmRmdW5jdGlvbgorCitOb3cgd2UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHM6QWRkKCkgZnJvbSB3aXRoaW4gdGhpcyBzY3JpcHQuICBJZiBhbm90aGVyCitzY3JpcHQgYWxzbyBkZWZpbmVzIHM6QWRkKCksIGl0IHdpbGwgYmUgbG9jYWwgdG8gdGhhdCBzY3JpcHQgYW5kIGNhbiBvbmx5CitiZSBjYWxsZWQgZnJvbSB0aGUgc2NyaXB0IGl0IHdhcyBkZWZpbmVkIGluLiAgVGhlcmUgY2FuIGFsc28gYmUgYSBnbG9iYWwgQWRkKCkKK2Z1bmN0aW9uICh3aXRob3V0IHRoZSAiczoiKSwgd2hpY2ggaXMgYWdhaW4gYW5vdGhlciBmdW5jdGlvbi4KKworPFNJRD4gY2FuIGJlIHVzZWQgd2l0aCBtYXBwaW5ncy4gIEl0IGdlbmVyYXRlcyBhIHNjcmlwdCBJRCwgd2hpY2ggaWRlbnRpZmllcwordGhlIGN1cnJlbnQgc2NyaXB0LiAgSW4gb3VyIHR5cGluZyBjb3JyZWN0aW9uIHBsdWdpbiB3ZSB1c2UgaXQgbGlrZSB0aGlzOiA+CisKKyAyNAlub3JlbWFwIDx1bmlxdWU+IDxzY3JpcHQ+IDxQbHVnPlR5cGVjb3JyQWRkICA8U0lEPkFkZAorIC4uCisgMjgJbm9yZW1hcCA8U0lEPkFkZCAgOmNhbGwgPFNJRD5BZGQoZXhwYW5kKCI8Y3dvcmQ+IiksIDEpPENSPgorCitUaHVzIHdoZW4gYSB1c2VyIHR5cGVzICJcYSIsIHRoaXMgc2VxdWVuY2UgaXMgaW52b2tlZDogPgorCisJXGEgIC0+ICA8UGx1Zz5UeXBlY29yckFkZCAgLT4gIDxTSUQ+QWRkICAtPiAgOmNhbGwgPFNJRD5BZGQoKQorCitJZiBhbm90aGVyIHNjcmlwdCB3b3VsZCBhbHNvIG1hcCA8U0lEPkFkZCwgaXQgd291bGQgZ2V0IGFub3RoZXIgc2NyaXB0IElEIGFuZAordGh1cyBkZWZpbmUgYW5vdGhlciBtYXBwaW5nLgorCitOb3RlIHRoYXQgaW5zdGVhZCBvZiBzOkFkZCgpIHdlIHVzZSA8U0lEPkFkZCgpIGhlcmUuICBUaGF0IGlzIGJlY2F1c2UgdGhlCittYXBwaW5nIGlzIHR5cGVkIGJ5IHRoZSB1c2VyLCB0aHVzIG91dHNpZGUgb2YgdGhlIHNjcmlwdC4gIFRoZSA8U0lEPiBpcwordHJhbnNsYXRlZCB0byB0aGUgc2NyaXB0IElELCBzbyB0aGF0IFZpbSBrbm93cyBpbiB3aGljaCBzY3JpcHQgdG8gbG9vayBmb3IKK3RoZSBBZGQoKSBmdW5jdGlvbi4KKworVGhpcyBpcyBhIGJpdCBjb21wbGljYXRlZCwgYnV0IGl0J3MgcmVxdWlyZWQgZm9yIHRoZSBwbHVnaW4gdG8gd29yayB0b2dldGhlcgord2l0aCBvdGhlciBwbHVnaW5zLiAgVGhlIGJhc2ljIHJ1bGUgaXMgdGhhdCB5b3UgdXNlIDxTSUQ+QWRkKCkgaW4gbWFwcGluZ3MgYW5kCitzOkFkZCgpIGluIG90aGVyIHBsYWNlcyAodGhlIHNjcmlwdCBpdHNlbGYsIGF1dG9jb21tYW5kcywgdXNlciBjb21tYW5kcykuCisKK1dlIGNhbiBhbHNvIGFkZCBhIG1lbnUgZW50cnkgdG8gZG8gdGhlIHNhbWUgYXMgdGhlIG1hcHBpbmc6ID4KKworIDI2CW5vcmVtZW51IDxzY3JpcHQ+IFBsdWdpbi5BZGRcIENvcnJlY3Rpb24gICAgICA8U0lEPkFkZAorCitUaGUgIlBsdWdpbiIgbWVudSBpcyByZWNvbW1lbmRlZCBmb3IgYWRkaW5nIG1lbnUgaXRlbXMgZm9yIHBsdWdpbnMuICBJbiB0aGlzCitjYXNlIG9ubHkgb25lIGl0ZW0gaXMgdXNlZC4gIFdoZW4gYWRkaW5nIG1vcmUgaXRlbXMsIGNyZWF0aW5nIGEgc3VibWVudSBpcworcmVjb21tZW5kZWQuICBGb3IgZXhhbXBsZSwgIlBsdWdpbi5DVlMiIGNvdWxkIGJlIHVzZWQgZm9yIGEgcGx1Z2luIHRoYXQgb2ZmZXJzCitDVlMgb3BlcmF0aW9ucyAiUGx1Z2luLkNWUy5jaGVja2luIiwgIlBsdWdpbi5DVlMuY2hlY2tvdXQiLCBldGMuCisKK05vdGUgdGhhdCBpbiBsaW5lIDI4ICI6bm9yZW1hcCIgaXMgdXNlZCB0byBhdm9pZCB0aGF0IGFueSBvdGhlciBtYXBwaW5ncyBjYXVzZQordHJvdWJsZS4gIFNvbWVvbmUgbWF5IGhhdmUgcmVtYXBwZWQgIjpjYWxsIiwgZm9yIGV4YW1wbGUuICBJbiBsaW5lIDI0IHdlIGFsc28KK3VzZSAiOm5vcmVtYXAiLCBidXQgd2UgZG8gd2FudCAiPFNJRD5BZGQiIHRvIGJlIHJlbWFwcGVkLiAgVGhpcyBpcyB3aHkKKyI8c2NyaXB0PiIgaXMgdXNlZCBoZXJlLiAgVGhpcyBvbmx5IGFsbG93cyBtYXBwaW5ncyB3aGljaCBhcmUgbG9jYWwgdG8gdGhlCitzY3JpcHQuIHw6bWFwLTxzY3JpcHQ+fCAgVGhlIHNhbWUgaXMgZG9uZSBpbiBsaW5lIDI2IGZvciAiOm5vcmVtZW51Ii4KK3w6bWVudS08c2NyaXB0PnwKKworCis8U0lEPiBBTkQgPFBsdWc+CQkJCQkqdXNpbmctPFBsdWc+KgorCitCb3RoIDxTSUQ+IGFuZCA8UGx1Zz4gYXJlIHVzZWQgdG8gYXZvaWQgdGhhdCBtYXBwaW5ncyBvZiB0eXBlZCBrZXlzIGludGVyZmVyZQord2l0aCBtYXBwaW5ncyB0aGF0IGFyZSBvbmx5IHRvIGJlIHVzZWQgZnJvbSBvdGhlciBtYXBwaW5ncy4gIE5vdGUgdGhlCitkaWZmZXJlbmNlIGJldHdlZW4gdXNpbmcgPFNJRD4gYW5kIDxQbHVnPjoKKworPFBsdWc+CWlzIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgc2NyaXB0LiAgSXQgaXMgdXNlZCBmb3IgbWFwcGluZ3Mgd2hpY2ggdGhlCisJdXNlciBtaWdodCB3YW50IHRvIG1hcCBhIGtleSBzZXF1ZW5jZSB0by4gIDxQbHVnPiBpcyBhIHNwZWNpYWwgY29kZQorCXRoYXQgYSB0eXBlZCBrZXkgd2lsbCBuZXZlciBwcm9kdWNlLgorCVRvIG1ha2UgaXQgdmVyeSB1bmxpa2VseSB0aGF0IG90aGVyIHBsdWdpbnMgdXNlIHRoZSBzYW1lIHNlcXVlbmNlIG9mCisJY2hhcmFjdGVycywgdXNlIHRoaXMgc3RydWN0dXJlOiA8UGx1Zz4gc2NyaXB0bmFtZSBtYXBuYW1lCisJSW4gb3VyIGV4YW1wbGUgdGhlIHNjcmlwdG5hbWUgaXMgIlR5cGVjb3JyIiBhbmQgdGhlIG1hcG5hbWUgaXMgIkFkZCIuCisJVGhpcyByZXN1bHRzIGluICI8UGx1Zz5UeXBlY29yckFkZCIuICBPbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKKwlzY3JpcHRuYW1lIGFuZCBtYXBuYW1lIGlzIHVwcGVyY2FzZSwgc28gdGhhdCB3ZSBjYW4gc2VlIHdoZXJlIG1hcG5hbWUKKwlzdGFydHMuCisKKzxTSUQ+CWlzIHRoZSBzY3JpcHQgSUQsIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc2NyaXB0LgorCUludGVybmFsbHkgVmltIHRyYW5zbGF0ZXMgPFNJRD4gdG8gIjxTTlI+MTIzXyIsIHdoZXJlICIxMjMiIGNhbiBiZSBhbnkKKwludW1iZXIuICBUaHVzIGEgZnVuY3Rpb24gIjxTSUQ+QWRkKCkiIHdpbGwgaGF2ZSBhIG5hbWUgIjxTTlI+MTFfQWRkKCkiCisJaW4gb25lIHNjcmlwdCwgYW5kICI8U05SPjIyX0FkZCgpIiBpbiBhbm90aGVyLiAgWW91IGNhbiBzZWUgdGhpcyBpZgorCXlvdSB1c2UgdGhlICI6ZnVuY3Rpb24iIGNvbW1hbmQgdG8gZ2V0IGEgbGlzdCBvZiBmdW5jdGlvbnMuICBUaGUKKwl0cmFuc2xhdGlvbiBvZiA8U0lEPiBpbiBtYXBwaW5ncyBpcyBleGFjdGx5IHRoZSBzYW1lLCB0aGF0J3MgaG93IHlvdQorCWNhbiBjYWxsIGEgc2NyaXB0LWxvY2FsIGZ1bmN0aW9uIGZyb20gYSBtYXBwaW5nLgorCisKK1VTRVIgQ09NTUFORAorCitOb3cgbGV0J3MgYWRkIGEgdXNlciBjb21tYW5kIHRvIGFkZCBhIGNvcnJlY3Rpb246ID4KKworIDM4CWlmICFleGlzdHMoIjpDb3JyZWN0IikKKyAzOQkgIGNvbW1hbmQgLW5hcmdzPTEgIENvcnJlY3QgIDpjYWxsIHM6QWRkKDxxLWFyZ3M+LCAwKQorIDQwCWVuZGlmCisKK1RoZSB1c2VyIGNvbW1hbmQgaXMgZGVmaW5lZCBvbmx5IGlmIG5vIGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkKK2V4aXN0cy4gIE90aGVyd2lzZSB3ZSB3b3VsZCBnZXQgYW4gZXJyb3IgaGVyZS4gIE92ZXJyaWRpbmcgdGhlIGV4aXN0aW5nIHVzZXIKK2NvbW1hbmQgd2l0aCAiOmNvbW1hbmQhIiBpcyBub3QgYSBnb29kIGlkZWEsIHRoaXMgd291bGQgcHJvYmFibHkgbWFrZSB0aGUgdXNlcgord29uZGVyIHdoeSB0aGUgY29tbWFuZCBoZSBkZWZpbmVkIGhpbXNlbGYgZG9lc24ndCB3b3JrLiAgfDpjb21tYW5kfAorCisKK1NDUklQVCBWQVJJQUJMRVMKKworV2hlbiBhIHZhcmlhYmxlIHN0YXJ0cyB3aXRoICJzOiIgaXQgaXMgYSBzY3JpcHQgdmFyaWFibGUuICBJdCBjYW4gb25seSBiZSB1c2VkCitpbnNpZGUgYSBzY3JpcHQuICBPdXRzaWRlIHRoZSBzY3JpcHQgaXQncyBub3QgdmlzaWJsZS4gIFRoaXMgYXZvaWRzIHRyb3VibGUKK3dpdGggdXNpbmcgdGhlIHNhbWUgdmFyaWFibGUgbmFtZSBpbiBkaWZmZXJlbnQgc2NyaXB0cy4gIFRoZSB2YXJpYWJsZXMgd2lsbCBiZQora2VwdCBhcyBsb25nIGFzIFZpbSBpcyBydW5uaW5nLiAgQW5kIHRoZSBzYW1lIHZhcmlhYmxlcyBhcmUgdXNlZCB3aGVuIHNvdXJjaW5nCit0aGUgc2FtZSBzY3JpcHQgYWdhaW4uIHxzOnZhcnwKKworVGhlIGZ1biBpcyB0aGF0IHRoZXNlIHZhcmlhYmxlcyBjYW4gYWxzbyBiZSB1c2VkIGluIGZ1bmN0aW9ucywgYXV0b2NvbW1hbmRzCithbmQgdXNlciBjb21tYW5kcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzY3JpcHQuICBJbiBvdXIgZXhhbXBsZSB3ZSBjYW4gYWRkCithIGZldyBsaW5lcyB0byBjb3VudCB0aGUgbnVtYmVyIG9mIGNvcnJlY3Rpb25zOiA+CisKKyAxOQlsZXQgczpjb3VudCA9IDQKKyAuLgorIDMwCWZ1bmN0aW9uIHM6QWRkKGZyb20sIGNvcnJlY3QpCisgLi4KKyAzNAkgIGxldCBzOmNvdW50ID0gczpjb3VudCArIDEKKyAzNQkgIGVjaG8gczpjb3VudCAuICIgY29ycmVjdGlvbnMgbm93IgorIDM2CWVuZGZ1bmN0aW9uCisKK0ZpcnN0IHM6Y291bnQgaXMgaW5pdGlhbGl6ZWQgdG8gNCBpbiB0aGUgc2NyaXB0IGl0c2VsZi4gIFdoZW4gbGF0ZXIgdGhlCitzOkFkZCgpIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgaW5jcmVtZW50cyBzOmNvdW50LiAgSXQgZG9lc24ndCBtYXR0ZXIgZnJvbQord2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQsIHNpbmNlIGl0IGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIHNjcmlwdCwgaXQKK3dpbGwgdXNlIHRoZSBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGlzIHNjcmlwdC4KKworCitUSEUgUkVTVUxUCisKK0hlcmUgaXMgdGhlIHJlc3VsdGluZyBjb21wbGV0ZSBleGFtcGxlOiA+CisKKyAgMQkiIFZpbSBnbG9iYWwgcGx1Z2luIGZvciBjb3JyZWN0aW5nIHR5cGluZyBtaXN0YWtlcworICAyCSIgTGFzdCBDaGFuZ2U6CTIwMDAgT2N0IDE1CisgIDMJIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorICA0CSIgTGljZW5zZToJVGhpcyBmaWxlIGlzIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAgNQorICA2CWlmIGV4aXN0cygibG9hZGVkX3R5cGVjb3JyIikKKyAgNwkgIGZpbmlzaAorICA4CWVuZGlmCisgIDkJbGV0IGxvYWRlZF90eXBlY29yciA9IDEKKyAxMAorIDExCWxldCBzOnNhdmVfY3BvID0gJmNwbworIDEyCXNldCBjcG8mdmltCisgMTMKKyAxNAlpYWJicmV2IHRlaCB0aGUKKyAxNQlpYWJicmV2IG90ZWhyIG90aGVyCisgMTYJaWFiYnJldiB3bmF0IHdhbnQKKyAxNwlpYWJicmV2IHN5bmNocm9uaXNhdGlvbgorIDE4CQlcIHN5bmNocm9uaXphdGlvbgorIDE5CWxldCBzOmNvdW50ID0gNAorIDIwCisgMjEJaWYgIWhhc21hcHRvKCc8UGx1Zz5UeXBlY29yckFkZCcpCisgMjIJICBtYXAgPHVuaXF1ZT4gPExlYWRlcj5hICA8UGx1Zz5UeXBlY29yckFkZAorIDIzCWVuZGlmCisgMjQJbm9yZW1hcCA8dW5pcXVlPiA8c2NyaXB0PiA8UGx1Zz5UeXBlY29yckFkZCAgPFNJRD5BZGQKKyAyNQorIDI2CW5vcmVtZW51IDxzY3JpcHQ+IFBsdWdpbi5BZGRcIENvcnJlY3Rpb24gICAgICA8U0lEPkFkZAorIDI3CisgMjgJbm9yZW1hcCA8U0lEPkFkZCAgOmNhbGwgPFNJRD5BZGQoZXhwYW5kKCI8Y3dvcmQ+IiksIDEpPENSPgorIDI5CisgMzAJZnVuY3Rpb24gczpBZGQoZnJvbSwgY29ycmVjdCkKKyAzMQkgIGxldCB0byA9IGlucHV0KCJ0eXBlIHRoZSBjb3JyZWN0aW9uIGZvciAiIC4gYTpmcm9tIC4gIjogIikKKyAzMgkgIGV4ZSAiOmlhYmJyZXYgIiAuIGE6ZnJvbSAuICIgIiAuIHRvCisgMzMJICBpZiBhOmNvcnJlY3QgfCBleGUgIm5vcm1hbCB2aXdzXDxDLVI+XCIgXGJcZSIgfCBlbmRpZgorIDM0CSAgbGV0IHM6Y291bnQgPSBzOmNvdW50ICsgMQorIDM1CSAgZWNobyBzOmNvdW50IC4gIiBjb3JyZWN0aW9ucyBub3ciCisgMzYJZW5kZnVuY3Rpb24KKyAzNworIDM4CWlmICFleGlzdHMoIjpDb3JyZWN0IikKKyAzOQkgIGNvbW1hbmQgLW5hcmdzPTEgIENvcnJlY3QgIDpjYWxsIHM6QWRkKDxxLWFyZ3M+LCAwKQorIDQwCWVuZGlmCisgNDEKKyA0MglsZXQgJmNwbyA9IHM6c2F2ZV9jcG8KKworTGluZSAzMyB3YXNuJ3QgZXhwbGFpbmVkIHlldC4gIEl0IGFwcGxpZXMgdGhlIG5ldyBjb3JyZWN0aW9uIHRvIHRoZSB3b3JkIHVuZGVyCit0aGUgY3Vyc29yLiAgVGhlIHw6bm9ybWFsfCBjb21tYW5kIGlzIHVzZWQgdG8gdXNlIHRoZSBuZXcgYWJicmV2aWF0aW9uLiAgTm90ZQordGhhdCBtYXBwaW5ncyBhbmQgYWJicmV2aWF0aW9ucyBhcmUgZXhwYW5kZWQgaGVyZSwgZXZlbiB0aG91Z2ggdGhlIGZ1bmN0aW9uCit3YXMgY2FsbGVkIGZyb20gYSBtYXBwaW5nIGRlZmluZWQgd2l0aCAiOm5vcmVtYXAiLgorCitVc2luZyAidW5peCIgZm9yIHRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIGlzIHJlY29tbWVuZGVkLiAgVGhlIFZpbSBzY3JpcHRzIHdpbGwKK3RoZW4gd29yayBldmVyeXdoZXJlLiAgU2NyaXB0cyB3aXRoICdmaWxlZm9ybWF0JyBzZXQgdG8gImRvcyIgZG8gbm90IHdvcmsgb24KK1VuaXguICBBbHNvIHNlZSB8OnNvdXJjZV9jcm5sfC4gIFRvIGJlIHN1cmUgaXQgaXMgc2V0IHJpZ2h0LCBkbyB0aGlzIGJlZm9yZQord3JpdGluZyB0aGUgZmlsZTogPgorCisJOnNldCBmaWxlZm9ybWF0PXVuaXgKKworCitET0NVTUVOVEFUSU9OCQkJCQkJKndyaXRlLWxvY2FsLWhlbHAqCisKK0l0J3MgYSBnb29kIGlkZWEgdG8gYWxzbyB3cml0ZSBzb21lIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgcGx1Z2luLiAgRXNwZWNpYWxseQord2hlbiBpdHMgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIuICBTZWUgfGFkZC1sb2NhbC1oZWxwfCBmb3IgaG93Cit0aGV5IGFyZSBpbnN0YWxsZWQuCisKK0hlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZSBmb3IgYSBwbHVnaW4gaGVscCBmaWxlLCBjYWxsZWQgInR5cGVjb3JyLnR4dCI6ID4KKworICAxCSp0eXBlY29yci50eHQqCVBsdWdpbiBmb3IgY29ycmVjdGluZyB0eXBpbmcgbWlzdGFrZXMKKyAgMgorICAzCUlmIHlvdSBtYWtlIHR5cGluZyBtaXN0YWtlcywgdGhpcyBwbHVnaW4gd2lsbCBoYXZlIHRoZW0gY29ycmVjdGVkCisgIDQJYXV0b21hdGljYWxseS4KKyAgNQorICA2CVRoZXJlIGFyZSBjdXJyZW50bHkgb25seSBhIGZldyBjb3JyZWN0aW9ucy4gIEFkZCB5b3VyIG93biBpZiB5b3UgbGlrZS4KKyAgNworICA4CU1hcHBpbmdzOgorICA5CTxMZWFkZXI+YSAgIG9yICAgPFBsdWc+VHlwZWNvcnJBZGQKKyAxMAkJQWRkIGEgY29ycmVjdGlvbiBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKyAxMQorIDEyCUNvbW1hbmRzOgorIDEzCTpDb3JyZWN0IHt3b3JkfQorIDE0CQlBZGQgYSBjb3JyZWN0aW9uIGZvciB7d29yZH0uCisgMTUKKyAxNgkJCQkJCQkqdHlwZWNvcnItc2V0dGluZ3MqCisgMTcJVGhpcyBwbHVnaW4gZG9lc24ndCBoYXZlIGFueSBzZXR0aW5ncy4KKworVGhlIGZpcnN0IGxpbmUgaXMgYWN0dWFsbHkgdGhlIG9ubHkgb25lIGZvciB3aGljaCB0aGUgZm9ybWF0IG1hdHRlcnMuICBJdCB3aWxsCitiZSBleHRyYWN0ZWQgZnJvbSB0aGUgaGVscCBmaWxlIHRvIGJlIHB1dCBpbiB0aGUgIkxPQ0FMIEFERElUSU9OUzoiIHNlY3Rpb24gb2YKK2hlbHAudHh0IHxsb2NhbC1hZGRpdGlvbnN8LiAgVGhlIGZpcnN0ICIqIiBtdXN0IGJlIGluIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlCitmaXJzdCBsaW5lLiAgQWZ0ZXIgYWRkaW5nIHlvdXIgaGVscCBmaWxlIGRvICI6aGVscCIgYW5kIGNoZWNrIHRoYXQgdGhlIGVudHJpZXMKK2xpbmUgdXAgbmljZWx5LgorCitZb3UgY2FuIGFkZCBtb3JlIHRhZ3MgaW5zaWRlICoqIGluIHlvdXIgaGVscCBmaWxlLiAgQnV0IGJlIGNhcmVmdWwgbm90IHRvIHVzZQorZXhpc3RpbmcgaGVscCB0YWdzLiAgWW91IHdvdWxkIHByb2JhYmx5IHVzZSB0aGUgbmFtZSBvZiB5b3VyIHBsdWdpbiBpbiBtb3N0IG9mCit0aGVtLCBsaWtlICJ0eXBlY29yci1zZXR0aW5ncyIgaW4gdGhlIGV4YW1wbGUuCisKK1VzaW5nIHJlZmVyZW5jZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGhlbHAgaW4gfHwgaXMgcmVjb21tZW5kZWQuICBUaGlzIG1ha2VzCitpdCBlYXN5IGZvciB0aGUgdXNlciB0byBmaW5kIGFzc29jaWF0ZWQgaGVscC4KKworCitGSUxFVFlQRSBERVRFQ1RJT04JCQkJCSpwbHVnaW4tZmlsZXR5cGUqCisKK0lmIHlvdXIgZmlsZXR5cGUgaXMgbm90IGFscmVhZHkgZGV0ZWN0ZWQgYnkgVmltLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhIGZpbGV0eXBlCitkZXRlY3Rpb24gc25pcHBldCBpbiBhIHNlcGFyYXRlIGZpbGUuICBJdCBpcyB1c3VhbGx5IGluIHRoZSBmb3JtIG9mIGFuCithdXRvY29tbWFuZCB0aGF0IHNldHMgdGhlIGZpbGV0eXBlIHdoZW4gdGhlIGZpbGUgbmFtZSBtYXRjaGVzIGEgcGF0dGVybi4KK0V4YW1wbGU6ID4KKworCWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmZvbwkJCXNldCBmaWxldHlwZT1mb29mb28KKworV3JpdGUgdGhpcyBzaW5nbGUtbGluZSBmaWxlIGFzICJmdGRldGVjdC9mb29mb28udmltIiBpbiB0aGUgZmlyc3QgZGlyZWN0b3J5Cit0aGF0IGFwcGVhcnMgaW4gJ3J1bnRpbWVwYXRoJy4gIEZvciBVbml4IHRoYXQgd291bGQgYmUKKyJ+Ly52aW0vZnRkZXRlY3QvZm9vZm9vLnZpbSIuICBUaGUgY29udmVudGlvbiBpcyB0byB1c2UgdGhlIG5hbWUgb2YgdGhlCitmaWxldHlwZSBmb3IgdGhlIHNjcmlwdCBuYW1lLgorCitZb3UgY2FuIG1ha2UgbW9yZSBjb21wbGljYXRlZCBjaGVja3MgaWYgeW91IGxpa2UsIGZvciBleGFtcGxlIHRvIGluc3BlY3QgdGhlCitjb250ZW50cyBvZiB0aGUgZmlsZSB0byByZWNvZ25pemUgdGhlIGxhbmd1YWdlLiAgQWxzbyBzZWUgfG5ldy1maWxldHlwZXwuCisKKworU1VNTUFSWQkJCQkJCQkqcGx1Z2luLXNwZWNpYWwqCisKK1N1bW1hcnkgb2Ygc3BlY2lhbCB0aGluZ3MgdG8gdXNlIGluIGEgcGx1Z2luOgorCitzOm5hbWUJCQlWYXJpYWJsZXMgbG9jYWwgdG8gdGhlIHNjcmlwdC4KKworPFNJRD4JCQlTY3JpcHQtSUQsIHVzZWQgZm9yIG1hcHBpbmdzIGFuZCBmdW5jdGlvbnMgbG9jYWwgdG8KKwkJCXRoZSBzY3JpcHQuCisKK2hhc21hcHRvKCkJCUZ1bmN0aW9uIHRvIHRlc3QgaWYgdGhlIHVzZXIgYWxyZWFkeSBkZWZpbmVkIGEgbWFwcGluZworCQkJZm9yIGZ1bmN0aW9uYWxpdHkgdGhlIHNjcmlwdCBvZmZlcnMuCisKKzxMZWFkZXI+CQlWYWx1ZSBvZiAibWFwbGVhZGVyIiwgd2hpY2ggdGhlIHVzZXIgZGVmaW5lcyBhcyB0aGUKKwkJCWtleXMgdGhhdCBwbHVnaW4gbWFwcGluZ3Mgc3RhcnQgd2l0aC4KKworOm1hcCA8dW5pcXVlPgkJR2l2ZSBhIHdhcm5pbmcgaWYgYSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzLgorCis6bm9yZW1hcCA8c2NyaXB0PglVc2Ugb25seSBtYXBwaW5ncyBsb2NhbCB0byB0aGUgc2NyaXB0LCBub3QgZ2xvYmFsCisJCQltYXBwaW5ncy4KKworZXhpc3RzKCI6Q21kIikJCUNoZWNrIGlmIGEgdXNlciBjb21tYW5kIGFscmVhZHkgZXhpc3RzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0MS4xMSoJV3JpdGluZyBhIGZpbGV0eXBlIHBsdWdpbgkqd3JpdGUtZmlsZXR5cGUtcGx1Z2luKiAqZnRwbHVnaW4qCisKK0EgZmlsZXR5cGUgcGx1Z2luIGlzIGxpa2UgYSBnbG9iYWwgcGx1Z2luLCBleGNlcHQgdGhhdCBpdCBzZXRzIG9wdGlvbnMgYW5kCitkZWZpbmVzIG1hcHBpbmdzIGZvciB0aGUgY3VycmVudCBidWZmZXIgb25seS4gIFNlZSB8YWRkLWZpbGV0eXBlLXBsdWdpbnwgZm9yCitob3cgdGhpcyB0eXBlIG9mIHBsdWdpbiBpcyB1c2VkLgorCitGaXJzdCByZWFkIHRoZSBzZWN0aW9uIG9uIGdsb2JhbCBwbHVnaW5zIGFib3ZlIHw0MS4xMHwuICBBbGwgdGhhdCBpcyBzYWlkIHRoZXJlCithbHNvIGFwcGxpZXMgdG8gZmlsZXR5cGUgcGx1Z2lucy4gIFRoZXJlIGFyZSBhIGZldyBleHRyYXMsIHdoaWNoIGFyZSBleHBsYWluZWQKK2hlcmUuICBUaGUgZXNzZW50aWFsIHRoaW5nIGlzIHRoYXQgYSBmaWxldHlwZSBwbHVnaW4gc2hvdWxkIG9ubHkgaGF2ZSBhbgorZWZmZWN0IG9uIHRoZSBjdXJyZW50IGJ1ZmZlci4KKworCitESVNBQkxJTkcKKworSWYgeW91IGFyZSB3cml0aW5nIGEgZmlsZXR5cGUgcGx1Z2luIHRvIGJlIHVzZWQgYnkgbWFueSBwZW9wbGUsIHRoZXkgbmVlZCBhCitjaGFuY2UgdG8gZGlzYWJsZSBsb2FkaW5nIGl0LiAgUHV0IHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgcGx1Z2luOiA+CisKKwkiIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBkb25lIHlldCBmb3IgdGhpcyBidWZmZXIKKwlpZiBleGlzdHMoImI6ZGlkX2Z0cGx1Z2luIikKKwkgIGZpbmlzaAorCWVuZGlmCisJbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitUaGlzIGFsc28gbmVlZHMgdG8gYmUgdXNlZCB0byBhdm9pZCB0aGF0IHRoZSBzYW1lIHBsdWdpbiBpcyBleGVjdXRlZCB0d2ljZSBmb3IKK3RoZSBzYW1lIGJ1ZmZlciAoaGFwcGVucyB3aGVuIHVzaW5nIGFuICI6ZWRpdCIgY29tbWFuZCB3aXRob3V0IGFyZ3VtZW50cykuCisKK05vdyB1c2VycyBjYW4gZGlzYWJsZSBsb2FkaW5nIHRoZSBkZWZhdWx0IHBsdWdpbiBjb21wbGV0ZWx5IGJ5IG1ha2luZyBhCitmaWxldHlwZSBwbHVnaW4gd2l0aCBvbmx5IHRoaXMgbGluZTogPgorCisJbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCitUaGlzIGRvZXMgcmVxdWlyZSB0aGF0IHRoZSBmaWxldHlwZSBwbHVnaW4gZGlyZWN0b3J5IGNvbWVzIGJlZm9yZSAkVklNUlVOVElNRQoraW4gJ3J1bnRpbWVwYXRoJyEKKworSWYgeW91IGRvIHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHBsdWdpbiwgYnV0IG92ZXJydWxlIG9uZSBvZiB0aGUgc2V0dGluZ3MsCit5b3UgY2FuIHdyaXRlIHRoZSBkaWZmZXJlbnQgc2V0dGluZyBpbiBhIHNjcmlwdDogPgorCisJc2V0bG9jYWwgdGV4dHdpZHRoPTcwCisKK05vdyB3cml0ZSB0aGlzIGluIHRoZSAiYWZ0ZXIiIGRpcmVjdG9yeSwgc28gdGhhdCBpdCBnZXRzIHNvdXJjZWQgYWZ0ZXIgdGhlCitkaXN0cmlidXRlZCAidmltLnZpbSIgZnRwbHVnaW4gfGFmdGVyLWRpcmVjdG9yeXwuICBGb3IgVW5peCB0aGlzIHdvdWxkIGJlCisifi8udmltL2FmdGVyL2Z0cGx1Z2luL3ZpbS52aW0iLiAgTm90ZSB0aGF0IHRoZSBkZWZhdWx0IHBsdWdpbiB3aWxsIGhhdmUgc2V0CisiYjpkaWRfZnRwbHVnaW4iLCBidXQgaXQgaXMgaWdub3JlZCBoZXJlLgorCisKK09QVElPTlMKKworVG8gbWFrZSBzdXJlIHRoZSBmaWxldHlwZSBwbHVnaW4gb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IGJ1ZmZlciB1c2UgdGhlID4KKworCTpzZXRsb2NhbAorCitjb21tYW5kIHRvIHNldCBvcHRpb25zLiAgQW5kIG9ubHkgc2V0IG9wdGlvbnMgd2hpY2ggYXJlIGxvY2FsIHRvIGEgYnVmZmVyIChzZWUKK3RoZSBoZWxwIGZvciB0aGUgb3B0aW9uIHRvIGNoZWNrIHRoYXQpLiAgV2hlbiB1c2luZyB8OnNldGxvY2FsfCBmb3IgZ2xvYmFsCitvcHRpb25zIG9yIG9wdGlvbnMgbG9jYWwgdG8gYSB3aW5kb3csIHRoZSB2YWx1ZSB3aWxsIGNoYW5nZSBmb3IgbWFueSBidWZmZXJzLAorYW5kIHRoYXQgaXMgbm90IHdoYXQgYSBmaWxldHlwZSBwbHVnaW4gc2hvdWxkIGRvLgorCitXaGVuIGFuIG9wdGlvbiBoYXMgYSB2YWx1ZSB0aGF0IGlzIGEgbGlzdCBvZiBmbGFncyBvciBpdGVtcywgY29uc2lkZXIgdXNpbmcKKyIrPSIgYW5kICItPSIgdG8ga2VlcCB0aGUgZXhpc3RpbmcgdmFsdWUuICBCZSBhd2FyZSB0aGF0IHRoZSB1c2VyIG1heSBoYXZlCitjaGFuZ2VkIGFuIG9wdGlvbiB2YWx1ZSBhbHJlYWR5LiAgRmlyc3QgcmVzZXR0aW5nIHRvIHRoZSBkZWZhdWx0IHZhbHVlIGFuZAordGhlbiBjaGFuZ2luZyBpdCBvZnRlbiBhIGdvb2QgaWRlYS4gIEV4YW1wbGU6ID4KKworCTpzZXRsb2NhbCBmb3JtYXRvcHRpb25zJiBmb3JtYXRvcHRpb25zKz1ybworCisKK01BUFBJTkdTCisKK1RvIG1ha2Ugc3VyZSBtYXBwaW5ncyB3aWxsIG9ubHkgd29yayBpbiB0aGUgY3VycmVudCBidWZmZXIgdXNlIHRoZSA+CisKKwk6bWFwIDxidWZmZXI+CisKK2NvbW1hbmQuICBUaGlzIG5lZWRzIHRvIGJlIGNvbWJpbmVkIHdpdGggdGhlIHR3by1zdGVwIG1hcHBpbmcgZXhwbGFpbmVkIGFib3ZlLgorQW4gZXhhbXBsZSBvZiBob3cgdG8gZGVmaW5lIGZ1bmN0aW9uYWxpdHkgaW4gYSBmaWxldHlwZSBwbHVnaW46ID4KKworCWlmICFoYXNtYXB0bygnPFBsdWc+SmF2YUltcG9ydCcpCisJICBtYXAgPGJ1ZmZlcj4gPHVuaXF1ZT4gPExvY2FsTGVhZGVyPmkgPFBsdWc+SmF2YUltcG9ydAorCWVuZGlmCisJbm9yZW1hcCA8YnVmZmVyPiA8dW5pcXVlPiA8UGx1Zz5KYXZhSW1wb3J0IG9pbXBvcnQgIiI8TGVmdD48RXNjPgorCit8aGFzbWFwdG8oKXwgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgdXNlciBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgbWFwIHRvCis8UGx1Zz5KYXZhSW1wb3J0LiAgSWYgbm90LCB0aGVuIHRoZSBmaWxldHlwZSBwbHVnaW4gZGVmaW5lcyB0aGUgZGVmYXVsdAorbWFwcGluZy4gIFRoaXMgc3RhcnRzIHdpdGggfDxMb2NhbExlYWRlcj58LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0Cit0aGUga2V5KHMpIGhlIHdhbnRzIGZpbGV0eXBlIHBsdWdpbiBtYXBwaW5ncyB0byBzdGFydCB3aXRoLiAgVGhlIGRlZmF1bHQgaXMgYQorYmFja3NsYXNoLgorIjx1bmlxdWU+IiBpcyB1c2VkIHRvIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgbWFwcGluZyBhbHJlYWR5IGV4aXN0cyBvcgorb3ZlcmxhcHMgd2l0aCBhbiBleGlzdGluZyBtYXBwaW5nLgorfDpub3JlbWFwfCBpcyB1c2VkIHRvIGF2b2lkIHRoYXQgYW55IG90aGVyIG1hcHBpbmdzIHRoYXQgdGhlIHVzZXIgaGFzIGRlZmluZWQKK2ludGVyZmVyZXMuICBZb3UgbWlnaHQgd2FudCB0byB1c2UgIjpub3JlbWFwIDxzY3JpcHQ+IiB0byBhbGxvdyByZW1hcHBpbmcKK21hcHBpbmdzIGRlZmluZWQgaW4gdGhpcyBzY3JpcHQgdGhhdCBzdGFydCB3aXRoIDxTSUQ+LgorCitUaGUgdXNlciBtdXN0IGhhdmUgYSBjaGFuY2UgdG8gZGlzYWJsZSB0aGUgbWFwcGluZ3MgaW4gYSBmaWxldHlwZSBwbHVnaW4sCit3aXRob3V0IGRpc2FibGluZyBldmVyeXRoaW5nLiAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGhvdyB0aGlzIGlzIGRvbmUgZm9yIGEKK3BsdWdpbiBmb3IgdGhlIG1haWwgZmlsZXR5cGU6ID4KKworCSIgQWRkIG1hcHBpbmdzLCB1bmxlc3MgdGhlIHVzZXIgZGlkbid0IHdhbnQgdGhpcy4KKwlpZiAhZXhpc3RzKCJub19wbHVnaW5fbWFwcyIpICYmICFleGlzdHMoIm5vX21haWxfbWFwcyIpCisJICAiIFF1b3RlIHRleHQgYnkgaW5zZXJ0aW5nICI+ICIKKwkgIGlmICFoYXNtYXB0bygnPFBsdWc+TWFpbFF1b3RlJykKKwkgICAgdm1hcCA8YnVmZmVyPiA8TG9jYWxMZWFkZXI+cSA8UGx1Zz5NYWlsUXVvdGUKKwkgICAgbm1hcCA8YnVmZmVyPiA8TG9jYWxMZWFkZXI+cSA8UGx1Zz5NYWlsUXVvdGUKKwkgIGVuZGlmCisJICB2bm9yZW1hcCA8YnVmZmVyPiA8UGx1Zz5NYWlsUXVvdGUgOnMvXi8+IC88Q1I+CisJICBubm9yZW1hcCA8YnVmZmVyPiA8UGx1Zz5NYWlsUXVvdGUgOi4sJHMvXi8+IC88Q1I+CisJZW5kaWYKKworVHdvIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHVzZWQ6Citub19wbHVnaW5fbWFwcwkJZGlzYWJsZXMgbWFwcGluZ3MgZm9yIGFsbCBmaWxldHlwZSBwbHVnaW5zCitub19tYWlsX21hcHMJCWRpc2FibGVzIG1hcHBpbmdzIGZvciBhIHNwZWNpZmljIGZpbGV0eXBlCisKKworVVNFUiBDT01NQU5EUworCitUbyBhZGQgYSB1c2VyIGNvbW1hbmQgZm9yIGEgc3BlY2lmaWMgZmlsZSB0eXBlLCBzbyB0aGF0IGl0IGNhbiBvbmx5IGJlIHVzZWQgaW4KK29uZSBidWZmZXIsIHVzZSB0aGUgIi1idWZmZXIiIGFyZ3VtZW50IHRvIHw6Y29tbWFuZHwuICBFeGFtcGxlOiA+CisKKwk6Y29tbWFuZCAtYnVmZmVyICBNYWtlICBtYWtlICU6ci5zCisKKworVkFSSUFCTEVTCisKK0EgZmlsZXR5cGUgcGx1Z2luIHdpbGwgYmUgc291cmNlZCBmb3IgZWFjaCBidWZmZXIgb2YgdGhlIHR5cGUgaXQncyBmb3IuICBMb2NhbAorc2NyaXB0IHZhcmlhYmxlcyB8czp2YXJ8IHdpbGwgYmUgc2hhcmVkIGJldHdlZW4gYWxsIGludm9jYXRpb25zLiAgVXNlIGxvY2FsCitidWZmZXIgdmFyaWFibGVzIHxiOnZhcnwgaWYgeW91IHdhbnQgYSB2YXJpYWJsZSBzcGVjaWZpY2FsbHkgZm9yIG9uZSBidWZmZXIuCisKKworRlVOQ1RJT05TCisKK1doZW4gZGVmaW5pbmcgYSBmdW5jdGlvbiwgdGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZS4gIEJ1dCB0aGUgZmlsZXR5cGUKK3BsdWdpbiB3aWxsIGJlIHNvdXJjZWQgZXZlcnkgdGltZSBhIGZpbGUgd2l0aCB0aGlzIGZpbGV0eXBlIHdpbGwgYmUgb3BlbmVkLgorVGhpcyBjb25zdHJ1Y3QgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBvbmx5IGRlZmluZWQgb25jZTogPgorCisJOmlmICFleGlzdHMoIipzOkZ1bmMiKQorCTogIGZ1bmN0aW9uIHM6RnVuYyhhcmcpCisJOiAgICAuLi4KKwk6ICBlbmRmdW5jdGlvbgorCTplbmRpZgorPAorCitVTkRPCQkJCQkJCSp1bmRvX2Z0cGx1Z2luKgorCitXaGVuIHRoZSB1c2VyIGRvZXMgIjpzZXRmaWxldHlwZSB4eXoiIHRoZSBlZmZlY3Qgb2YgdGhlIHByZXZpb3VzIGZpbGV0eXBlCitzaG91bGQgYmUgdW5kb25lLiAgU2V0IHRoZSBiOnVuZG9fZnRwbHVnaW4gdmFyaWFibGUgdG8gdGhlIGNvbW1hbmRzIHRoYXQgd2lsbAordW5kbyB0aGUgc2V0dGluZ3MgaW4geW91ciBmaWxldHlwZSBwbHVnaW4uICBFeGFtcGxlOiA+CisKKwlsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGxvY2FsIGZvPCBjb208IHR3PCBjb21tZW50c3RyaW5nPCIKKwkJXCAuICJ8IHVubGV0IGI6bWF0Y2hfaWdub3JlY2FzZSBiOm1hdGNoX3dvcmRzIGI6bWF0Y2hfc2tpcCIKKworVXNpbmcgIjpzZXRsb2NhbCIgd2l0aCAiPCIgYWZ0ZXIgdGhlIG9wdGlvbiBuYW1lIHJlc2V0cyB0aGUgb3B0aW9uIHRvIGl0cworZ2xvYmFsIHZhbHVlLiAgVGhhdCBpcyBtb3N0bHkgdGhlIGJlc3Qgd2F5IHRvIHJlc2V0IHRoZSBvcHRpb24gdmFsdWUuCisKK1RoaXMgZG9lcyByZXF1aXJlIHJlbW92aW5nIHRoZSAiQyIgZmxhZyBmcm9tICdjcG9wdGlvbnMnIHRvIGFsbG93IGxpbmUKK2NvbnRpbnVhdGlvbiwgYXMgbWVudGlvbmVkIGFib3ZlIHx1c2UtY3BvLXNhdmV8LgorCisKK0ZJTEUgTkFNRQorCitUaGUgZmlsZXR5cGUgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgZmlsZSBuYW1lIHxmdHBsdWdpbi1uYW1lfC4gIFVzZSBvbmUgb2YKK3RoZXNlIHRocmVlIGZvcm1zOgorCisJLi4uL2Z0cGx1Z2luL3N0dWZmLnZpbQorCS4uLi9mdHBsdWdpbi9zdHVmZl9mb28udmltCisJLi4uL2Z0cGx1Z2luL3N0dWZmL2Jhci52aW0KKworInN0dWZmIiBpcyB0aGUgZmlsZXR5cGUsICJmb28iIGFuZCAiYmFyIiBhcmUgYXJiaXRyYXJ5IG5hbWVzLgorCisKK1NVTU1BUlkJCQkJCQkJKmZ0cGx1Z2luLXNwZWNpYWwqCisKK1N1bW1hcnkgb2Ygc3BlY2lhbCB0aGluZ3MgdG8gdXNlIGluIGEgZmlsZXR5cGUgcGx1Z2luOgorCis8TG9jYWxMZWFkZXI+CQlWYWx1ZSBvZiAibWFwbG9jYWxsZWFkZXIiLCB3aGljaCB0aGUgdXNlciBkZWZpbmVzIGFzCisJCQl0aGUga2V5cyB0aGF0IGZpbGV0eXBlIHBsdWdpbiBtYXBwaW5ncyBzdGFydCB3aXRoLgorCis6bWFwIDxidWZmZXI+CQlEZWZpbmUgYSBtYXBwaW5nIGxvY2FsIHRvIHRoZSBidWZmZXIuCisKKzpub3JlbWFwIDxzY3JpcHQ+CU9ubHkgcmVtYXAgbWFwcGluZ3MgZGVmaW5lZCBpbiB0aGlzIHNjcmlwdCB0aGF0IHN0YXJ0CisJCQl3aXRoIDxTSUQ+LgorCis6c2V0bG9jYWwJCVNldCBhbiBvcHRpb24gZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciBvbmx5LgorCis6Y29tbWFuZCAtYnVmZmVyCURlZmluZSBhIHVzZXIgY29tbWFuZCBsb2NhbCB0byB0aGUgYnVmZmVyLgorCitleGlzdHMoIipzOkZ1bmMiKQlDaGVjayBpZiBhIGZ1bmN0aW9uIHdhcyBhbHJlYWR5IGRlZmluZWQuCisKK0Fsc28gc2VlIHxwbHVnaW4tc3BlY2lhbHwsIHRoZSBzcGVjaWFsIHRoaW5ncyB1c2VkIGZvciBhbGwgcGx1Z2lucy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDEuMTIqCVdyaXRpbmcgYSBjb21waWxlciBwbHVnaW4JCSp3cml0ZS1jb21waWxlci1wbHVnaW4qCisKK0EgY29tcGlsZXIgcGx1Z2luIHNldHMgb3B0aW9ucyBmb3IgdXNlIHdpdGggYSBzcGVjaWZpYyBjb21waWxlci4gIFRoZSB1c2VyIGNhbgorbG9hZCBpdCB3aXRoIHRoZSB8OmNvbXBpbGVyfCBjb21tYW5kLiAgVGhlIG1haW4gdXNlIGlzIHRvIHNldCB0aGUKKydlcnJvcmZvcm1hdCcgYW5kICdtYWtlcHJnJyBvcHRpb25zLgorCitFYXNpZXN0IGlzIHRvIGhhdmUgYSBsb29rIGF0IGV4YW1wbGVzLiAgVGhpcyBjb21tYW5kIHdpbGwgZWRpdCBhbGwgdGhlIGRlZmF1bHQKK2NvbXBpbGVyIHBsdWdpbnM6ID4KKworCTpuZXh0ICRWSU1SVU5USU1FL2NvbXBpbGVyLyoudmltCisKK1VzZSB8Om5leHR8IHRvIGdvIHRvIHRoZSBuZXh0IHBsdWdpbiBmaWxlLgorCitUaGVyZSBhcmUgdHdvIHNwZWNpYWwgaXRlbXMgYWJvdXQgdGhlc2UgZmlsZXMuICBGaXJzdCBpcyBhIG1lY2hhbmlzbSB0byBhbGxvdworYSB1c2VyIHRvIG92ZXJydWxlIG9yIGFkZCB0byB0aGUgZGVmYXVsdCBmaWxlLiAgVGhlIGRlZmF1bHQgZmlsZXMgc3RhcnQgd2l0aDogPgorCisJOmlmIGV4aXN0cygiY3VycmVudF9jb21waWxlciIpCisJOiAgZmluaXNoCisJOmVuZGlmCisJOmxldCBjdXJyZW50X2NvbXBpbGVyID0gIm1pbmUiCisKK1doZW4geW91IHdyaXRlIGEgY29tcGlsZXIgZmlsZSBhbmQgcHV0IGl0IGluIHlvdXIgcGVyc29uYWwgcnVudGltZSBkaXJlY3RvcnkKKyhlLmcuLCB+Ly52aW0vY29tcGlsZXIgZm9yIFVuaXgpLCB5b3Ugc2V0IHRoZSAiY3VycmVudF9jb21waWxlciIgdmFyaWFibGUgdG8KK21ha2UgdGhlIGRlZmF1bHQgZmlsZSBza2lwIHRoZSBzZXR0aW5ncy4KKworVGhlIHNlY29uZCBtZWNoYW5pc20gaXMgdG8gdXNlICI6c2V0IiBmb3IgIjpjb21waWxlciEiIGFuZCAiOnNldGxvY2FsIiBmb3IKKyI6Y29tcGlsZXIiLiAgVmltIGRlZmluZXMgdGhlICI6Q29tcGlsZXJTZXQiIHVzZXIgY29tbWFuZCBmb3IgdGhpcy4gIEhvd2V2ZXIsCitvbGRlciBWaW0gdmVyc2lvbnMgZG9uJ3QsIHRodXMgeW91ciBwbHVnaW4gc2hvdWxkIGRlZmluZSBpdCB0aGVuLiAgVGhpcyBpcyBhbgorZXhhbXBsZTogPgorCisgIGlmIGV4aXN0cygiOkNvbXBpbGVyU2V0IikgIT0gMgorICAgIGNvbW1hbmQgLW5hcmdzPSogQ29tcGlsZXJTZXQgc2V0bG9jYWwgPGFyZ3M+CisgIGVuZGlmCisgIENvbXBpbGVyU2V0IGVycm9yZm9ybWF0JgkJIiB1c2UgdGhlIGRlZmF1bHQgJ2Vycm9yZm9ybWF0JworICBDb21waWxlclNldCBtYWtlcHJnPW5tYWtlCisKK1doZW4geW91IHdyaXRlIGEgY29tcGlsZXIgcGx1Z2luIGZvciB0aGUgVmltIGRpc3RyaWJ1dGlvbiBvciBmb3IgYSBzeXN0ZW0td2lkZQorcnVudGltZSBkaXJlY3RvcnksIHVzZSB0aGUgbWVjaGFuaXNtIG1lbnRpb25lZCBhYm92ZS4gIFdoZW4KKyJjdXJyZW50X2NvbXBpbGVyIiB3YXMgYWxyZWFkeSBzZXQgYnkgYSB1c2VyIHBsdWdpbiBub3RoaW5nIHdpbGwgYmUgZG9uZS4KKworV2hlbiB5b3Ugd3JpdGUgYSBjb21waWxlciBwbHVnaW4gdG8gb3ZlcnJ1bGUgc2V0dGluZ3MgZnJvbSBhIGRlZmF1bHQgcGx1Z2luLAorZG9uJ3QgY2hlY2sgImN1cnJlbnRfY29tcGlsZXIiLiAgVGhpcyBwbHVnaW4gaXMgc3VwcG9zZWQgdG8gYmUgbG9hZGVkCitsYXN0LCB0aHVzIGl0IHNob3VsZCBiZSBpbiBhIGRpcmVjdG9yeSBhdCB0aGUgZW5kIG9mICdydW50aW1lcGF0aCcuICBGb3IgVW5peAordGhhdCBjb3VsZCBiZSB+Ly52aW0vYWZ0ZXIvY29tcGlsZXIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXh0IGNoYXB0ZXI6IHx1c3JfNDIudHh0fCAgQWRkIG5ldyBtZW51cworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl80Mi50eHQgYi9ydW50aW1lL2RvYy91c3JfNDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjBkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfNDIudHh0CkBAIC0wLDAgKzEsMzY1IEBACisqdXNyXzQyLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDIgT2N0IDA4CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgICBBZGQgbmV3IG1lbnVzCisKKworQnkgbm93IHlvdSBrbm93IHRoYXQgVmltIGlzIHZlcnkgZmxleGlibGUuICBUaGlzIGluY2x1ZGVzIHRoZSBtZW51cyB1c2VkIGluCit0aGUgR1VJLiAgWW91IGNhbiBkZWZpbmUgeW91ciBvd24gbWVudSBlbnRyaWVzIHRvIG1ha2UgY2VydGFpbiBjb21tYW5kcyBlYXNpbHkKK2FjY2Vzc2libGUuICBUaGlzIGlzIGZvciBtb3VzZS1oYXBweSB1c2VycyBvbmx5LgorCit8NDIuMXwJSW50cm9kdWN0aW9uCit8NDIuMnwJTWVudSBjb21tYW5kcworfDQyLjN8CVZhcmlvdXMKK3w0Mi40fAlUb29sYmFyIGFuZCBwb3B1cCBtZW51cworCisgICAgIE5leHQgY2hhcHRlcjogfHVzcl80My50eHR8ICBVc2luZyBmaWxldHlwZXMKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzQxLnR4dHwgIFdyaXRlIGEgVmltIHNjcmlwdAorVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDIuMSoJSW50cm9kdWN0aW9uCisKK1RoZSBtZW51cyB0aGF0IFZpbSB1c2VzIGFyZSBkZWZpbmVkIGluIHRoZSBmaWxlICIkVklNUlVOVElNRS9tZW51LnZpbSIuICBJZgoreW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24gbWVudXMsIHlvdSBtaWdodCBmaXJzdCB3YW50IHRvIGxvb2sgdGhyb3VnaCB0aGF0CitmaWxlLgorICAgVG8gZGVmaW5lIGEgbWVudSBpdGVtLCB1c2UgdGhlICI6bWVudSIgY29tbWFuZC4gIFRoZSBiYXNpYyBmb3JtIG9mIHRoaXMKK2NvbW1hbmQgaXMgYXMgZm9sbG93czogPgorCisJOm1lbnUge21lbnUtaXRlbX0ge2tleXN9CisKK1RoZSB7bWVudS1pdGVtfSBkZXNjcmliZXMgd2hlcmUgb24gdGhlIG1lbnUgdG8gcHV0IHRoZSBpdGVtLiAgQSB0eXBpY2FsCit7bWVudS1pdGVtfSBpcyAiRmlsZS5TYXZlIiwgd2hpY2ggcmVwcmVzZW50cyB0aGUgaXRlbSAiU2F2ZSIgdW5kZXIgdGhlCisiRmlsZSIgbWVudS4gIEEgZG90IGlzIHVzZWQgdG8gc2VwYXJhdGUgdGhlIG5hbWVzLiAgRXhhbXBsZTogPgorCisJOm1lbnUgRmlsZS5TYXZlICA6dXBkYXRlPENSPgorCitUaGUgIjp1cGRhdGUiIGNvbW1hbmQgd3JpdGVzIHRoZSBmaWxlIHdoZW4gaXQgd2FzIG1vZGlmaWVkLgorICAgWW91IGNhbiBhZGQgYW5vdGhlciBsZXZlbDogIkVkaXQuU2V0dGluZ3MuU2hpZnR3aWR0aCIgZGVmaW5lcyBhIHN1Ym1lbnUKKyJTZXR0aW5ncyIgdW5kZXIgdGhlICJFZGl0IiBtZW51LCB3aXRoIGFuIGl0ZW0gIlNoaWZ0d2lkdGgiLiAgWW91IGNvdWxkIHVzZQorZXZlbiBkZWVwZXIgbGV2ZWxzLiAgRG9uJ3QgdXNlIHRoaXMgdG9vIG11Y2gsIHlvdSBuZWVkIHRvIG1vdmUgdGhlIG1vdXNlIHF1aXRlCithIGJpdCB0byB1c2Ugc3VjaCBhbiBpdGVtLgorICAgVGhlICI6bWVudSIgY29tbWFuZCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlICI6bWFwIiBjb21tYW5kOiB0aGUgbGVmdCBzaWRlCitzcGVjaWZpZXMgaG93IHRoZSBpdGVtIGlzIHRyaWdnZXJlZCBhbmQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBkZWZpbmVzIHRoZQorY2hhcmFjdGVycyB0aGF0IGFyZSBleGVjdXRlZC4gIHtrZXlzfSBhcmUgY2hhcmFjdGVycywgdGhleSBhcmUgdXNlZCBqdXN0IGxpa2UKK3lvdSB3b3VsZCBoYXZlIHR5cGVkIHRoZW0uICBUaHVzIGluIEluc2VydCBtb2RlLCB3aGVuIHtrZXlzfSBpcyBwbGFpbiB0ZXh0LAordGhhdCB0ZXh0IGlzIGluc2VydGVkLgorCisKK0FDQ0VMRVJBVE9SUworCitUaGUgYW1wZXJzYW5kIGNoYXJhY3RlciAoJikgaXMgdXNlZCB0byBpbmRpY2F0ZSBhbiBhY2NlbGVyYXRvci4gIEZvciBpbnN0YW5jZSwKK3lvdSBjYW4gdXNlIEFsdC1GIHRvIHNlbGVjdCAiRmlsZSIgYW5kIFMgdG8gc2VsZWN0ICJTYXZlIi4gIChUaGUgJ3dpbmFsdGtleXMnCitvcHRpb24gbWF5IGRpc2FibGUgdGhpcyB0aG91Z2ghKS4gIFRoZXJlZm9yZSwgdGhlIHttZW51LWl0ZW19IGxvb2tzIGxpa2UKKyImRmlsZS4mU2F2ZSIuICBUaGUgYWNjZWxlcmF0b3IgY2hhcmFjdGVycyB3aWxsIGJlIHVuZGVybGluZWQgaW4gdGhlIG1lbnUuCisgICBZb3UgbXVzdCB0YWtlIGNhcmUgdGhhdCBlYWNoIGtleSBpcyB1c2VkIG9ubHkgb25jZSBpbiBlYWNoIG1lbnUuICBPdGhlcndpc2UKK3lvdSB3aWxsIG5vdCBrbm93IHdoaWNoIG9mIHRoZSB0d28gd2lsbCBhY3R1YWxseSBiZSB1c2VkLiAgVmltIGRvZXNuJ3Qgd2FybgoreW91IGZvciB0aGlzLgorCisKK1BSSU9SSVRJRVMKKworVGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIHRoZSBGaWxlLlNhdmUgbWVudSBpdGVtIGlzIGFzIGZvbGxvd3M6ID4KKworCTptZW51IDEwLjM0MCAmRmlsZS4mU2F2ZTxUYWI+OncgIDpjb25maXJtIHc8Q1I+CisKK1RoZSBudW1iZXIgMTAuMzQwIGlzIGNhbGxlZCB0aGUgcHJpb3JpdHkgbnVtYmVyLiAgSXQgaXMgdXNlZCBieSB0aGUgZWRpdG9yIHRvCitkZWNpZGUgd2hlcmUgaXQgcGxhY2VzIHRoZSBtZW51IGl0ZW0uICBUaGUgZmlyc3QgbnVtYmVyICgxMCkgaW5kaWNhdGVzIHRoZQorcG9zaXRpb24gb24gdGhlIG1lbnUgYmFyLiAgTG93ZXIgbnVtYmVyZWQgbWVudXMgYXJlIHBvc2l0aW9uZWQgdG8gdGhlIGxlZnQsCitoaWdoZXIgbnVtYmVycyB0byB0aGUgcmlnaHQuCisgICBUaGVzZSBhcmUgdGhlIHByaW9yaXRpZXMgdXNlZCBmb3IgdGhlIHN0YW5kYXJkIG1lbnVzOgorCisJICAxMAkyMCAgICAgNDAgICAgIDUwICAgICAgNjAgICAgICAgNzAJCTk5OTkKKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCBGaWxlCUVkaXQgIFRvb2xzICBTeW50YXggIEJ1ZmZlcnMgIFdpbmRvdwkJSGVscCB8CisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworTm90aWNlIHRoYXQgdGhlIEhlbHAgbWVudSBpcyBnaXZlbiBhIHZlcnkgaGlnaCBudW1iZXIsIHRvIG1ha2UgaXQgYXBwZWFyIG9uCit0aGUgZmFyIHJpZ2h0LgorICAgVGhlIHNlY29uZCBudW1iZXIgKDM0MCkgZGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGl0ZW0gd2l0aGluIHRoZQorcHVsbC1kb3duIG1lbnUuICBMb3dlciBudW1iZXJzIGdvIG9uIHRvcCwgaGlnaGVyIG51bWJlciBvbiB0aGUgYm90dG9tLiAgVGhlc2UKK2FyZSB0aGUgcHJpb3JpdGllcyBpbiB0aGUgRmlsZSBtZW51OgorCisJCQkrLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgIDEwLjMxMAl8T3Blbi4uLgkgIHwKKwkgICAgMTAuMzIwCXxTcGxpdC1PcGVuLi4uCSAgfAorCSAgICAxMC4zMjUJfE5ldwkJICB8CisJICAgIDEwLjMzMAl8Q2xvc2UJCSAgfAorCSAgICAxMC4zMzUJfC0tLS0tLS0tLS0tLS0tLS0gfAorCSAgICAxMC4zNDAJfFNhdmUJCSAgfAorCSAgICAxMC4zNTAJfFNhdmUgQXMuLi4JICB8CisJICAgIDEwLjQwMAl8LS0tLS0tLS0tLS0tLS0tLSB8CisJICAgIDEwLjQxMAl8U3BsaXQgRGlmZiB3aXRoICB8CisJICAgIDEwLjQyMAl8U3BsaXQgUGF0Y2hlZCBCeSB8CisJICAgIDEwLjUwMAl8LS0tLS0tLS0tLS0tLS0tLSB8CisJICAgIDEwLjUxMAl8UHJpbnQJCSAgfAorCSAgICAxMC42MDAJfC0tLS0tLS0tLS0tLS0tLS0gfAorCSAgICAxMC42MTAJfFNhdmUtRXhpdAkgIHwKKwkgICAgMTAuNjIwCXxFeGl0CQkgIHwKKwkJCSstLS0tLS0tLS0tLS0tLS0tLSsKKworTm90aWNlIHRoYXQgdGhlcmUgaXMgcm9vbSBpbiBiZXR3ZWVuIHRoZSBudW1iZXJzLiAgVGhpcyBpcyB3aGVyZSB5b3UgY2FuCitpbnNlcnQgeW91ciBvd24gaXRlbXMsIGlmIHlvdSByZWFsbHkgd2FudCB0byAoaXQncyBvZnRlbiBiZXR0ZXIgdG8gbGVhdmUgdGhlCitzdGFuZGFyZCBtZW51cyBhbG9uZSBhbmQgYWRkIGEgbmV3IG1lbnUgZm9yIHlvdXIgb3duIGl0ZW1zKS4KKyAgIFdoZW4geW91IGNyZWF0ZSBhIHN1Ym1lbnUsIHlvdSBjYW4gYWRkIGFub3RoZXIgIi5udW1iZXIiIHRvIHRoZSBwcmlvcml0eS4KK1RodXMgZWFjaCBuYW1lIGluIHttZW51LWl0ZW19IGhhcyBpdHMgcHJpb3JpdHkgbnVtYmVyLgorCisKK1NQRUNJQUwgQ0hBUkFDVEVSUworCitUaGUge21lbnUtaXRlbX0gaW4gdGhpcyBleGFtcGxlIGlzICImRmlsZS4mU2F2ZTxUYWI+OnciLiBUaGlzIGJyaW5ncyB1cCBhbgoraW1wb3J0YW50IHBvaW50OiB7bWVudS1pdGVtfSBtdXN0IGJlIG9uZSB3b3JkLiAgSWYgeW91IHdhbnQgdG8gcHV0IGEgZG90LAorc3BhY2Ugb3IgdGFicyBpbiB0aGUgbmFtZSwgeW91IGVpdGhlciB1c2UgdGhlIDw+IG5vdGF0aW9uICg8U3BhY2U+IGFuZCA8VGFiPiwKK2ZvciBpbnN0YW5jZSkgb3IgdXNlIHRoZSBiYWNrc2xhc2ggKFwpIGVzY2FwZS4gPgorCisJOm1lbnUgMTAuMzA1ICZGaWxlLiZEb1wgSXRcLlwuXC4gOmV4aXQ8Q1I+CisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIG5hbWUgb2YgdGhlIG1lbnUgaXRlbSAiRG8gSXQuLi4iIGNvbnRhaW5zIGEgc3BhY2UgYW5kIHRoZQorY29tbWFuZCBpcyAiOmV4aXQ8Q1I+Ii4KKworVGhlIDxUYWI+IGNoYXJhY3RlciBpbiBhIG1lbnUgbmFtZSBpcyB1c2VkIHRvIHNlcGFyYXRlIHRoZSBwYXJ0IHRoYXQgZGVmaW5lcwordGhlIG1lbnUgbmFtZSBmcm9tIHRoZSBwYXJ0IHRoYXQgZ2l2ZXMgYSBoaW50IHRvIHRoZSB1c2VyLiAgVGhlIHBhcnQgYWZ0ZXIgdGhlCis8VGFiPiBpcyBkaXNwbGF5ZWQgcmlnaHQgYWxpZ25lZCBpbiB0aGUgbWVudS4gIEluIHRoZSBGaWxlLlNhdmUgbWVudSB0aGUgbmFtZQordXNlZCBpcyAiJkZpbGUuJlNhdmU8VGFiPjp3Ii4gIFRodXMgdGhlIG1lbnUgbmFtZSBpcyAiRmlsZS5TYXZlIiBhbmQgdGhlIGhpbnQKK2lzICI6dyIuCisKKworU0VQQVJBVE9SUworCitUaGUgc2VwYXJhdG9yIGxpbmVzLCB1c2VkIHRvIGdyb3VwIHJlbGF0ZWQgbWVudSBpdGVtcyB0b2dldGhlciwgY2FuIGJlIGRlZmluZWQKK2J5IHVzaW5nIGEgbmFtZSB0aGF0IHN0YXJ0cyBhbmQgZW5kcyBpbiBhICctJy4gIEZvciBleGFtcGxlICItc2VwLSIuICBXaGVuCit1c2luZyBzZXZlcmFsIHNlcGFyYXRvcnMgdGhlIG5hbWVzIG11c3QgYmUgZGlmZmVyZW50LiAgT3RoZXJ3aXNlIHRoZSBuYW1lcworZG9uJ3QgbWF0dGVyLgorICAgVGhlIGNvbW1hbmQgZnJvbSBhIHNlcGFyYXRvciB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkLCBidXQgeW91IGhhdmUgdG8gZGVmaW5lCitvbmUgYW55d2F5LiAgQSBzaW5nbGUgY29sb24gd2lsbCBkby4gIEV4YW1wbGU6ID4KKworCTphbWVudSAyMC41MTAgRWRpdC4tc2VwMy0gOgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0Mi4yKglNZW51IGNvbW1hbmRzCisKK1lvdSBjYW4gZGVmaW5lIG1lbnUgaXRlbXMgdGhhdCBleGlzdCBmb3Igb25seSBjZXJ0YWluIG1vZGVzLiAgVGhpcyB3b3JrcyBqdXN0CitsaWtlIHRoZSB2YXJpYXRpb25zIG9uIHRoZSAiOm1hcCIgY29tbWFuZDoKKworCTptZW51CQlOb3JtYWwsIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZyBtb2RlCisJOm5tZW51CQlOb3JtYWwgbW9kZQorCTp2bWVudQkJVmlzdWFsIG1vZGUKKwk6b21lbnUJCU9wZXJhdG9yLXBlbmRpbmcgbW9kZQorCTptZW51IQkJSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZQorCTppbWVudQkJSW5zZXJ0IG1vZGUKKwk6Y21lbnUJCUNvbW1hbmQtbGluZSBtb2RlCisJOmFtZW51CQlBbGwgbW9kZXMKKworVG8gYXZvaWQgdGhhdCB0aGUgY29tbWFuZHMgb2YgYSBtZW51IGl0ZW0gYXJlIGJlaW5nIG1hcHBlZCwgdXNlIHRoZSBjb21tYW5kCisiOm5vcmVtZW51IiwgIjpubm9yZW1lbnUiLCAiOmFub3JlbWVudSIsIGV0Yy4KKworCitVU0lORyA6QU1FTlUKKworVGhlICI6YW1lbnUiIGNvbW1hbmQgaXMgYSBiaXQgZGlmZmVyZW50LiAgSXQgYXNzdW1lcyB0aGF0IHRoZSB7a2V5c30geW91CitnaXZlIGFyZSB0byBiZSBleGVjdXRlZCBpbiBOb3JtYWwgbW9kZS4gIFdoZW4gVmltIGlzIGluIFZpc3VhbCBvciBJbnNlcnQgbW9kZQord2hlbiB0aGUgbWVudSBpcyB1c2VkLCBWaW0gZmlyc3QgaGFzIHRvIGdvIGJhY2sgdG8gTm9ybWFsIG1vZGUuICAiOmFtZW51IgoraW5zZXJ0cyBhIENUUkwtQyBvciBDVFJMLU8gZm9yIHlvdS4gIEZvciBleGFtcGxlLCBpZiB5b3UgdXNlIHRoaXMgY29tbWFuZDoKKz4KKwk6YW1lbnUgIDkwLjEwMCBNaW5lLkZpbmRcIFdvcmQgICoKKworVGhlbiB0aGUgcmVzdWx0aW5nIG1lbnUgY29tbWFuZHMgd2lsbCBiZToKKworCU5vcm1hbCBtb2RlOgkJKgorCVZpc3VhbCBtb2RlOgkJQ1RSTC1DICoKKwlPcGVyYXRvci1wZW5kaW5nIG1vZGU6CUNUUkwtQyAqCisJSW5zZXJ0IG1vZGU6CQlDVFJMLU8gKgorCUNvbW1hbmQtbGluZSBtb2RlOglDVFJMLUMgKgorCitXaGVuIGluIENvbW1hbmQtbGluZSBtb2RlIHRoZSBDVFJMLUMgd2lsbCBhYmFuZG9uIHRoZSBjb21tYW5kIHR5cGVkIHNvIGZhci4KK0luIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZyBtb2RlIENUUkwtQyB3aWxsIHN0b3AgdGhlIG1vZGUuICBUaGUgQ1RSTC1PIGluCitJbnNlcnQgbW9kZSB3aWxsIGV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIHRoZW4gcmV0dXJuIHRvIEluc2VydCBtb2RlLgorICAgQ1RSTC1PIG9ubHkgd29ya3MgZm9yIG9uZSBjb21tYW5kLiAgSWYgeW91IG5lZWQgdG8gdXNlIHR3byBvciBtb3JlCitjb21tYW5kcywgcHV0IHRoZW0gaW4gYSBmdW5jdGlvbiBhbmQgY2FsbCB0aGF0IGZ1bmN0aW9uLiAgRXhhbXBsZTogPgorCisJOmFtZW51ICBNaW5lLk5leHRcIEZpbGUgIDpjYWxsIDxTSUQ+TmV4dEZpbGUoKTxDUj4KKwk6ZnVuY3Rpb24gPFNJRD5OZXh0RmlsZSgpCisJOiAgbmV4dAorCTogIDEvXkNvZGUKKwk6ZW5kZnVuY3Rpb24KKworVGhpcyBtZW51IGVudHJ5IGdvZXMgdG8gdGhlIG5leHQgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdCB3aXRoICI6bmV4dCIuICBUaGVuCitpdCBzZWFyY2hlcyBmb3IgdGhlIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiQ29kZSIuCisgICBUaGUgPFNJRD4gYmVmb3JlIHRoZSBmdW5jdGlvbiBuYW1lIGlzIHRoZSBzY3JpcHQgSUQuICBUaGlzIG1ha2VzIHRoZQorZnVuY3Rpb24gbG9jYWwgdG8gdGhlIGN1cnJlbnQgVmltIHNjcmlwdCBmaWxlLiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhCitmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgZGVmaW5lZCBpbiBhbm90aGVyIHNjcmlwdCBmaWxlLiAgU2VlIHw8U0lEPnwuCisKKworU0lMRU5UIE1FTlVTCisKK1RoZSBtZW51IGV4ZWN1dGVzIHRoZSB7a2V5c30gYXMgaWYgeW91IHR5cGVkIHRoZW0uICBGb3IgYSAiOiIgY29tbWFuZCB0aGlzCittZWFucyB5b3Ugd2lsbCBzZWUgdGhlIGNvbW1hbmQgYmVpbmcgZWNob2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJZiBpdCdzIGEKK2xvbmcgY29tbWFuZCwgdGhlIGhpdC1FbnRlciBwcm9tcHQgd2lsbCBhcHBlYXIuICBUaGF0IGNhbiBiZSB2ZXJ5IGFubm95aW5nIQorICAgVG8gYXZvaWQgdGhpcywgbWFrZSB0aGUgbWVudSBzaWxlbnQuICBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgPHNpbGVudD4KK2FyZ3VtZW50LiAgRm9yIGV4YW1wbGUsIHRha2UgdGhlIGNhbGwgdG8gTmV4dEZpbGUoKSBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZS4KK1doZW4geW91IHVzZSB0aGlzIG1lbnUsIHlvdSB3aWxsIHNlZSB0aGlzIG9uIHRoZSBjb21tYW5kIGxpbmU6CisKKwk6Y2FsbCA8U05SPjM0X05leHRGaWxlKCkgfgorCitUbyBhdm9pZCB0aGlzIHRleHQgb24gdGhlIGNvbW1hbmQgbGluZSwgaW5zZXJ0ICI8c2lsZW50PiIgYXMgdGhlIGZpcnN0Cithcmd1bWVudDogPgorCisJOmFtZW51IDxzaWxlbnQ+IE1pbmUuTmV4dFwgRmlsZSA6Y2FsbCA8U0lEPk5leHRGaWxlKCk8Q1I+CisKK0Rvbid0IHVzZSAiPHNpbGVudD4iIHRvbyBvZnRlbi4gIEl0IGlzIG5vdCBuZWVkZWQgZm9yIHNob3J0IGNvbW1hbmRzLiAgSWYgeW91CittYWtlIGEgbWVudSBmb3Igc29tZW9uZSBlbHNlLCBiZWluZyBhYmxlIHRoZSBzZWUgdGhlIGV4ZWN1dGVkIGNvbW1hbmQgd2lsbAorZ2l2ZSBoaW0gYSBoaW50IGFib3V0IHdoYXQgaGUgY291bGQgaGF2ZSB0eXBlZCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgbW91c2UuCisKKworTElTVElORyBNRU5VUworCitXaGVuIGEgbWVudSBjb21tYW5kIGlzIHVzZWQgd2l0aG91dCBhIHtrZXlzfSBwYXJ0LCBpdCBsaXN0cyB0aGUgYWxyZWFkeQorZGVmaW5lZCBtZW51cy4gIFlvdSBjYW4gc3BlY2lmeSBhIHttZW51LWl0ZW19LCBvciBwYXJ0IG9mIGl0LCB0byBsaXN0IHNwZWNpZmljCittZW51cy4gIEV4YW1wbGU6ID4KKworCTphbWVudQorCitUaGlzIGxpc3RzIGFsbCBtZW51cy4gIFRoYXQncyBhIGxvbmcgbGlzdCEgIEJldHRlciBzcGVjaWZ5IHRoZSBuYW1lIG9mIGEgbWVudQordG8gZ2V0IGEgc2hvcnRlciBsaXN0OiA+CisKKwk6YW1lbnUgRWRpdAorCitUaGlzIGxpc3RzIG9ubHkgdGhlICJFZGl0IiBtZW51IGl0ZW1zIGZvciBhbGwgbW9kZXMuICBUbyBsaXN0IG9ubHkgb25lCitzcGVjaWZpYyBtZW51IGl0ZW0gZm9yIEluc2VydCBtb2RlOiA+CisKKwk6aW1lbnUgRWRpdC5VbmRvCisKK1Rha2UgY2FyZSB0aGF0IHlvdSB0eXBlIGV4YWN0bHkgdGhlIHJpZ2h0IG5hbWUuICBDYXNlIG1hdHRlcnMgaGVyZS4gIEJ1dCB0aGUKKycmJyBmb3IgYWNjZWxlcmF0b3JzIGNhbiBiZSBvbWl0dGVkLiAgVGhlIDxUYWI+IGFuZCB3aGF0IGNvbWVzIGFmdGVyIGl0IGNhbiBiZQorbGVmdCBvdXQgYXMgd2VsbC4KKworCitERUxFVElORyBNRU5VUworCitUbyBkZWxldGUgYSBtZW51LCB0aGUgc2FtZSBjb21tYW5kIGlzIHVzZWQgYXMgZm9yIGxpc3RpbmcsIGJ1dCB3aXRoICJtZW51IgorY2hhbmdlZCB0byAidW5tZW51Ii4gIFRodXMgIjptZW51IiBiZWNvbWVzLCAiOnVubWVudSIsICI6bm1lbnUiIGJlY29tZXMKKyI6bnVubWVudSIsIGV0Yy4gIFRvIGRlbGV0ZSB0aGUgIlRvb2xzLk1ha2UiIGl0ZW0gZm9yIEluc2VydCBtb2RlOiA+CisKKwk6aXVubWVudSBUb29scy5NYWtlCisKK1lvdSBjYW4gZGVsZXRlIGEgd2hvbGUgbWVudSwgd2l0aCBhbGwgaXRzIGl0ZW1zLCBieSB1c2luZyB0aGUgbWVudSBuYW1lLgorRXhhbXBsZTogPgorCisJOmF1bm1lbnUgU3ludGF4CisKK1RoaXMgZGVsZXRlcyB0aGUgU3ludGF4IG1lbnUgYW5kIGFsbCB0aGUgaXRlbXMgaW4gaXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQyLjMqCVZhcmlvdXMKKworWW91IGNhbiBjaGFuZ2UgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIG1lbnVzIHdpdGggZmxhZ3MgaW4gJ2d1aW9wdGlvbnMnLiAgSW4gdGhlCitkZWZhdWx0IHZhbHVlIHRoZXkgYXJlIGFsbCBpbmNsdWRlZC4gIFlvdSBjYW4gcmVtb3ZlIGEgZmxhZyB3aXRoIGEgY29tbWFuZAorbGlrZTogPgorCisJOnNldCBndWlvcHRpb25zLT1tCis8CisJbQkJV2hlbiByZW1vdmVkIHRoZSBtZW51YmFyIGlzIG5vdCBkaXNwbGF5ZWQuCisKKwlNCQlXaGVuIHJlbW92ZWQgdGhlIGRlZmF1bHQgbWVudXMgYXJlIG5vdCBsb2FkZWQuCisKKwlnCQlXaGVuIHJlbW92ZWQgdGhlIGluYWN0aXZlIG1lbnUgaXRlbXMgYXJlIG5vdCBtYWRlIGdyZXkKKwkJCWJ1dCBhcmUgY29tcGxldGVseSByZW1vdmVkLiAgKERvZXMgbm90IHdvcmsgb24gYWxsCisJCQlzeXN0ZW1zLikKKworCXQJCVdoZW4gcmVtb3ZlZCB0aGUgdGVhcm9mZiBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLgorCitUaGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgaXMgbm90IGEgc2VwYXJhdG9yIGxpbmUuICBXaGVuIHlvdSBzZWxlY3QKK3RoaXMgaXRlbSwgdGhlIG1lbnUgaXMgInRlYXJlZC1vZmYiOiBJdCBpcyBkaXNwbGF5ZWQgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCitUaGlzIGlzIGNhbGxlZCBhIHRlYXJvZmYgbWVudS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHVzZSB0aGUgc2FtZSBtZW51CitvZnRlbi4KKworRm9yIHRyYW5zbGF0aW5nIG1lbnUgaXRlbXMsIHNlZSB8Om1lbnV0cmFuc3wuCisKK1NpbmNlIHRoZSBtb3VzZSBoYXMgdG8gYmUgdXNlZCB0byBzZWxlY3QgYSBtZW51IGl0ZW0sIGl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZQordGhlICI6YnJvd3NlIiBjb21tYW5kIGZvciBzZWxlY3RpbmcgYSBmaWxlLiAgQW5kICI6Y29uZmlybSIgdG8gZ2V0IGEgZGlhbG9nCitpbnN0ZWFkIG9mIGFuIGVycm9yIG1lc3NhZ2UsIGUuZy4sIHdoZW4gdGhlIGN1cnJlbnQgYnVmZmVyIGNvbnRhaW5zIGNoYW5nZXMuCitUaGVzZSB0d28gY2FuIGJlIGNvbWJpbmVkOiA+CisKKwk6YW1lbnUgRmlsZS5PcGVuICA6YnJvd3NlIGNvbmZpcm0gZWRpdDxDUj4KKworVGhlICI6YnJvd3NlIiBtYWtlcyBhIGZpbGUgYnJvd3NlciBhcHBlYXIgdG8gc2VsZWN0IHRoZSBmaWxlIHRvIGVkaXQuICBUaGUKKyI6Y29uZmlybSIgd2lsbCBwb3AgdXAgYSBkaWFsb2cgd2hlbiB0aGUgY3VycmVudCBidWZmZXIgaGFzIGNoYW5nZXMuICBZb3UgY2FuCit0aGVuIHNlbGVjdCB0byBzYXZlIHRoZSBjaGFuZ2VzLCB0aHJvdyB0aGVtIGF3YXkgb3IgY2FuY2VsIHRoZSBjb21tYW5kLgorICAgRm9yIG1vcmUgY29tcGxpY2F0ZWQgaXRlbXMsIHRoZSBjb25maXJtKCkgYW5kIGlucHV0ZGlhbG9nKCkgZnVuY3Rpb25zIGNhbgorYmUgdXNlZC4gIFRoZSBkZWZhdWx0IG1lbnVzIGNvbnRhaW4gYSBmZXcgZXhhbXBsZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQyLjQqCVRvb2xiYXIgYW5kIHBvcHVwIG1lbnVzCisKK1RoZXJlIGFyZSB0d28gc3BlY2lhbCBtZW51czogVG9vbEJhciBhbmQgUG9wVXAuICBJdGVtcyB0aGF0IHN0YXJ0IHdpdGggdGhlc2UKK25hbWVzIGRvIG5vdCBhcHBlYXIgaW4gdGhlIG5vcm1hbCBtZW51IGJhci4KKworCitUT09MQkFSCisKK1RoZSB0b29sYmFyIGFwcGVhcnMgb25seSB3aGVuIHRoZSAiVCIgZmxhZyBpcyBpbmNsdWRlZCBpbiB0aGUgJ2d1aW9wdGlvbnMnCitvcHRpb24uCisgICBUaGUgdG9vbGJhciB1c2VzIGljb25zIHJhdGhlciB0aGFuIHRleHQgdG8gcmVwcmVzZW50IHRoZSBjb21tYW5kLiAgRm9yCitleGFtcGxlLCB0aGUge21lbnUtaXRlbX0gbmFtZWQgIlRvb2xCYXIuTmV3IiBjYXVzZXMgdGhlICJOZXciIGljb24gdG8gYXBwZWFyCitvbiB0aGUgdG9vbGJhci4KKyAgIFRoZSBWaW0gZWRpdG9yIGhhcyAyOCBidWlsdC1pbiBpY29ucy4gIFlvdSBjYW4gZmluZCBhIHRhYmxlIGhlcmU6Cit8YnVpbHRpbi10b29sc3wuICBNb3N0IG9mIHRoZW0gYXJlIHVzZWQgaW4gdGhlIGRlZmF1bHQgdG9vbGJhci4gIFlvdSBjYW4KK3JlZGVmaW5lIHdoYXQgdGhlc2UgaXRlbXMgZG8gKGFmdGVyIHRoZSBkZWZhdWx0IG1lbnVzIGFyZSBzZXR1cCkuCisgICBZb3UgY2FuIGFkZCBhbm90aGVyIGJpdG1hcCBmb3IgYSB0b29sYmFyIGl0ZW0uICBPciBkZWZpbmUgYSBuZXcgdG9vbGJhcgoraXRlbSB3aXRoIGEgYml0bWFwLiAgRm9yIGV4YW1wbGUsIGRlZmluZSBhIG5ldyB0b29sYmFyIGl0ZW0gd2l0aDogPgorCisJOnRtZW51IFRvb2xCYXIuQ29tcGlsZSAgQ29tcGlsZSB0aGUgY3VycmVudCBmaWxlCisJOmFtZW51IFRvb2xCYXIuQ29tcGlsZSAgOiFjYyAlIC1vICU6cjxDUj4KKworTm93IHlvdSBuZWVkIHRvIGNyZWF0ZSB0aGUgaWNvbi4gIEZvciBNUy1XaW5kb3dzIGl0IG11c3QgYmUgaW4gYml0bWFwIGZvcm1hdCwKK3dpdGggdGhlIG5hbWUgIkNvbXBpbGUuYm1wIi4gIEZvciBVbml4IFhQTSBmb3JtYXQgaXMgdXNlZCwgdGhlIGZpbGUgbmFtZSBpcworIkNvbXBpbGUueHBtIi4gIFRoZSBzaXplIG11c3QgYmUgMTggYnkgMTggcGl4ZWxzLiAgT24gTVMtV2luZG93cyBvdGhlciBzaXplcworY2FuIGJlIHVzZWQgYXMgd2VsbCwgYnV0IGl0IHdpbGwgbG9vayB1Z2x5LgorICAgUHV0IHRoZSBiaXRtYXAgaW4gdGhlIGRpcmVjdG9yeSAiYml0bWFwcyIgaW4gb25lIG9mIHRoZSBkaXJlY3RvcmllcyBmcm9tCisncnVudGltZXBhdGgnLiAgRS5nLiwgZm9yIFVuaXggIn4vLnZpbS9iaXRtYXBzL0NvbXBpbGUueHBtIi4KKworWW91IGNhbiBkZWZpbmUgdG9vbHRpcHMgZm9yIHRoZSBpdGVtcyBpbiB0aGUgdG9vbGJhci4gIEEgdG9vbHRpcCBpcyBhIHNob3J0Cit0ZXh0IHRoYXQgZXhwbGFpbnMgd2hhdCBhIHRvb2xiYXIgaXRlbSB3aWxsIGRvLiAgRm9yIGV4YW1wbGUgIk9wZW4gZmlsZSIuICBJdAorYXBwZWFycyB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIGlzIG9uIHRoZSBpdGVtLCB3aXRob3V0IG1vdmluZyBmb3IgYSBtb21lbnQuCitUaGlzIGlzIHZlcnkgdXNlZnVsIGlmIHRoZSBtZWFuaW5nIG9mIHRoZSBwaWN0dXJlIGlzbid0IHRoYXQgb2J2aW91cy4KK0V4YW1wbGU6ID4KKworCTp0bWVudSBUb29sQmFyLk1ha2UgIFJ1biBtYWtlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorPAorCU5vdGU6CisJUGF5IGF0dGVudGlvbiB0byB0aGUgY2FzZSB1c2VkLiAgIlRvb2xiYXIiIGFuZCAidG9vbGJhciIgYXJlIGRpZmZlcmVudAorCWZyb20gIlRvb2xCYXIiIQorCitUbyByZW1vdmUgYSB0b29sdGlwLCB1c2UgdGhlIHw6dHVubWVudXwgY29tbWFuZC4KKworVGhlICd0b29sYmFyJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0ZXh0IGluc3RlYWQgb2YgYSBiaXRtYXAsIG9yIGJvdGgKK3RleHQgYW5kIGEgYml0bWFwLiAgTW9zdCBwZW9wbGUgdXNlIGp1c3QgdGhlIGJpdG1hcCwgc2luY2UgdGhlIHRleHQgdGFrZXMKK3F1aXRlIGEgYml0IG9mIHNwYWNlLgorCisKK1BPUFVQIE1FTlUKKworVGhlIHBvcHVwIG1lbnUgcG9wcyB1cCB3aGVyZSB0aGUgbW91c2UgcG9pbnRlciBpcy4gIE9uIE1TLVdpbmRvd3MgeW91IGFjdGl2YXRlCitpdCBieSBjbGlja2luZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLiAgVGhlbiB5b3UgY2FuIHNlbGVjdCBhbiBpdGVtIHdpdGggdGhlCitsZWZ0IG1vdXNlIGJ1dHRvbi4gIE9uIFVuaXggdGhlIHBvcHVwIG1lbnUgaXMgdXNlZCBieSBwcmVzc2luZyBhbmQgaG9sZGluZyB0aGUKK3JpZ2h0IG1vdXNlIGJ1dHRvbi4KKyAgIFRoZSBwb3B1cCBtZW51IG9ubHkgYXBwZWFycyB3aGVuIHRoZSAnbW91c2Vtb2RlbCcgaGFzIGJlZW4gc2V0IHRvICJwb3B1cCIKK29yICJwb3B1cF9zZXRwb3MiLiAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGlzIHRoYXQgInBvcHVwX3NldHBvcyIKK21vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG1vdXNlIHBvaW50ZXIgcG9zaXRpb24uICBXaGVuIGNsaWNraW5nIGluc2lkZSBhCitzZWxlY3Rpb24sIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSB1c2VkIHVubW9kaWZpZWQuICBXaGVuIHRoZXJlIGlzIGEgc2VsZWN0aW9uCitidXQgeW91IGNsaWNrIG91dHNpZGUgb2YgaXQsIHRoZSBzZWxlY3Rpb24gaXMgcmVtb3ZlZC4KKyAgIFRoZXJlIGlzIGEgc2VwYXJhdGUgcG9wdXAgbWVudSBmb3IgZWFjaCBtb2RlLiAgVGh1cyB0aGVyZSBhcmUgbmV2ZXIgZ3JleQoraXRlbXMgbGlrZSBpbiB0aGUgbm9ybWFsIG1lbnVzLgorCitXaGF0IGlzIHRoZSBtZWFuaW5nIG9mIGxpZmUsIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZz8gICo0MioKK0RvdWdsYXMgQWRhbXMsIHRoZSBvbmx5IHBlcnNvbiB3aG8ga25ldyB3aGF0IHRoaXMgcXVlc3Rpb24gcmVhbGx5IHdhcyBhYm91dCBpcworbm93IGRlYWQsIHVuZm9ydHVuYXRlbHkuICBTbyBub3cgeW91IG1pZ2h0IHdvbmRlciB3aGF0IHRoZSBtZWFuaW5nIG9mIGRlYXRoCitpcy4uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzQzLnR4dHwgIFVzaW5nIGZpbGV0eXBlcworCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl80My50eHQgYi9ydW50aW1lL2RvYy91c3JfNDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNGI4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfNDMudHh0CkBAIC0wLDAgKzEsMTcyIEBACisqdXNyXzQzLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDIgSnVsIDE0CisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgICAgICAgVXNpbmcgZmlsZXR5cGVzCisKKworV2hlbiB5b3UgYXJlIGVkaXRpbmcgYSBmaWxlIG9mIGEgY2VydGFpbiB0eXBlLCBmb3IgZXhhbXBsZSBhIEMgcHJvZ3JhbSBvciBhCitzaGVsbCBzY3JpcHQsIHlvdSBvZnRlbiB1c2UgdGhlIHNhbWUgb3B0aW9uIHNldHRpbmdzIGFuZCBtYXBwaW5ncy4gIFlvdQorcXVpY2tseSBnZXQgdGlyZWQgb2YgbWFudWFsbHkgc2V0dGluZyB0aGVzZSBlYWNoIHRpbWUuICBUaGlzIGNoYXB0ZXIgZXhwbGFpbnMKK2hvdyB0byBkbyBpdCBhdXRvbWF0aWNhbGx5LgorCit8NDMuMXwJUGx1Z2lucyBmb3IgYSBmaWxldHlwZQorfDQzLjJ8CUFkZGluZyBhIGZpbGV0eXBlCisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzQ0LnR4dHwgIFlvdXIgb3duIHN5bnRheCBoaWdobGlnaHRlZAorIFByZXZpb3VzIGNoYXB0ZXI6IHx1c3JfNDIudHh0fCAgQWRkIG5ldyBtZW51cworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDMuMSoJUGx1Z2lucyBmb3IgYSBmaWxldHlwZQkJCQkqZmlsZXR5cGUtcGx1Z2luKgorCitIb3cgdG8gc3RhcnQgdXNpbmcgZmlsZXR5cGUgcGx1Z2lucyBoYXMgYWxyZWFkeSBiZWVuIGRpc2N1c3NlZCBoZXJlOgorfGFkZC1maWxldHlwZS1wbHVnaW58LiAgQnV0IHlvdSBwcm9iYWJseSBhcmUgbm90IHNhdGlzZmllZCB3aXRoIHRoZSBkZWZhdWx0CitzZXR0aW5ncywgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbiBrZXB0IG1pbmltYWwuICBTdXBwb3NlIHRoYXQgZm9yIEMgZmlsZXMgeW91Cit3YW50IHRvIHNldCB0aGUgJ3NvZnR0YWJzdG9wJyBvcHRpb24gdG8gNCBhbmQgZGVmaW5lIGEgbWFwcGluZyB0byBpbnNlcnQgYQordGhyZWUtbGluZSBjb21tZW50LiAgWW91IGRvIHRoaXMgd2l0aCBvbmx5IHR3byBzdGVwczoKKworCQkJCQkJCSp5b3VyLXJ1bnRpbWUtZGlyKgorMS4gQ3JlYXRlIHlvdXIgb3duIHJ1bnRpbWUgZGlyZWN0b3J5LiAgT24gVW5peCB0aGlzIHVzdWFsbHkgaXMgIn4vLnZpbSIuICBJbgorICAgdGhpcyBkaXJlY3RvcnkgY3JlYXRlIHRoZSAiZnRwbHVnaW4iIGRpcmVjdG9yeTogPgorCisJbWtkaXIgfi8udmltCisJbWtkaXIgfi8udmltL2Z0cGx1Z2luCis8CisgICBXaGVuIHlvdSBhcmUgbm90IG9uIFVuaXgsIGNoZWNrIHRoZSB2YWx1ZSBvZiB0aGUgJ3J1bnRpbWVwYXRoJyBvcHRpb24gdG8KKyAgIHNlZSB3aGVyZSBWaW0gd2lsbCBsb29rIGZvciB0aGUgImZ0cGx1Z2luIiBkaXJlY3Rvcnk6ID4KKworCXNldCBydW50aW1lcGF0aAorCis8ICBZb3Ugd291bGQgbm9ybWFsbHkgdXNlIHRoZSBmaXJzdCBkaXJlY3RvcnkgbmFtZSAoYmVmb3JlIHRoZSBmaXJzdCBjb21tYSkuCisgICBZb3UgbWlnaHQgd2FudCB0byBwcmVwZW5kIGEgZGlyZWN0b3J5IG5hbWUgdG8gdGhlICdydW50aW1lcGF0aCcgb3B0aW9uIGluCisgICB5b3VyIHx2aW1yY3wgZmlsZSBpZiB5b3UgZG9uJ3QgbGlrZSB0aGUgZGVmYXVsdCB2YWx1ZS4KKworMi4gQ3JlYXRlIHRoZSBmaWxlICJ+Ly52aW0vZnRwbHVnaW4vYy52aW0iLCB3aXRoIHRoZSBjb250ZW50czogPgorCisJc2V0bG9jYWwgc29mdHRhYnN0b3A9NAorCW5vcmVtYXAgPGJ1ZmZlcj4gPExvY2FsTGVhZGVyPmMgby8qKioqKioqKioqKioqKjxDUj48Q1I+LzxFc2M+CisKK1RyeSBlZGl0aW5nIGEgQyBmaWxlLiAgWW91IHNob3VsZCBub3RpY2UgdGhhdCB0aGUgJ3NvZnR0YWJzdG9wJyBvcHRpb24gaXMgc2V0Cit0byA0LiAgQnV0IHdoZW4geW91IGVkaXQgYW5vdGhlciBmaWxlIGl0J3MgcmVzZXQgdG8gdGhlIGRlZmF1bHQgemVyby4gIFRoYXQgaXMKK2JlY2F1c2UgdGhlICI6c2V0bG9jYWwiIGNvbW1hbmQgd2FzIHVzZWQuICBUaGlzIHNldHMgdGhlICdzb2Z0dGFic3RvcCcgb3B0aW9uCitvbmx5IGxvY2FsbHkgdG8gdGhlIGJ1ZmZlci4gIEFzIHNvb24gYXMgeW91IGVkaXQgYW5vdGhlciBidWZmZXIsIGl0IHdpbGwgYmUKK3NldCB0byB0aGUgdmFsdWUgc2V0IGZvciB0aGF0IGJ1ZmZlci4gIEZvciBhIG5ldyBidWZmZXIgaXQgd2lsbCBnZXQgdGhlCitkZWZhdWx0IHZhbHVlIG9yIHRoZSB2YWx1ZSBmcm9tIHRoZSBsYXN0ICI6c2V0IiBjb21tYW5kLgorCitMaWtld2lzZSwgdGhlIG1hcHBpbmcgZm9yICJcYyIgd2lsbCBkaXNhcHBlYXIgd2hlbiBlZGl0aW5nIGFub3RoZXIgYnVmZmVyLgorVGhlICI6bWFwIDxidWZmZXI+IiBjb21tYW5kIGNyZWF0ZXMgYSBtYXBwaW5nIHRoYXQgaXMgbG9jYWwgdG8gdGhlIGN1cnJlbnQKK2J1ZmZlci4gIFRoaXMgd29ya3Mgd2l0aCBhbnkgbWFwcGluZyBjb21tYW5kOiAiOm1hcCEiLCAiOnZtYXAiLCBldGMuICBUaGUKK3w8TG9jYWxMZWFkZXI+fCBpbiB0aGUgbWFwcGluZyBpcyByZXBsYWNlZCB3aXRoIHRoZSB2YWx1ZSBvZiAibWFwbG9jYWxsZWFkZXIiLgorCitZb3UgY2FuIGZpbmQgZXhhbXBsZXMgZm9yIGZpbGV0eXBlIHBsdWdpbnMgaW4gdGhpcyBkaXJlY3Rvcnk6ID4KKworCSRWSU1SVU5USU1FL2Z0cGx1Z2luLworCitNb3JlIGRldGFpbHMgYWJvdXQgd3JpdGluZyBhIGZpbGV0eXBlIHBsdWdpbiBjYW4gYmUgZm91bmQgaGVyZToKK3x3cml0ZS1wbHVnaW58LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0My4yKglBZGRpbmcgYSBmaWxldHlwZQorCitJZiB5b3UgYXJlIHVzaW5nIGEgdHlwZSBvZiBmaWxlIHRoYXQgaXMgbm90IHJlY29nbml6ZWQgYnkgVmltLCB0aGlzIGlzIGhvdyB0bworZ2V0IGl0IHJlY29nbml6ZWQuICBZb3UgbmVlZCBhIHJ1bnRpbWUgZGlyZWN0b3J5IG9mIHlvdXIgb3duLiAgU2VlCit8eW91ci1ydW50aW1lLWRpcnwgYWJvdmUuCisKK0NyZWF0ZSBhIGZpbGUgImZpbGV0eXBlLnZpbSIgd2hpY2ggY29udGFpbnMgYW4gYXV0b2NvbW1hbmQgZm9yIHlvdXIgZmlsZXR5cGUuCisoQXV0b2NvbW1hbmRzIHdlcmUgZXhwbGFpbmVkIGluIHNlY3Rpb24gfDQwLjN8LikgIEV4YW1wbGU6ID4KKworCWF1Z3JvdXAgZmlsZXR5cGVkZXRlY3QKKwlhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi54eXoJc2V0ZiB4eXoKKwlhdWdyb3VwIEVORAorCitUaGlzIHdpbGwgcmVjb2duaXplIGFsbCBmaWxlcyB0aGF0IGVuZCBpbiAiLnh5eiIgYXMgdGhlICJ4eXoiIGZpbGV0eXBlLiAgVGhlCisiOmF1Z3JvdXAiIGNvbW1hbmRzIHB1dCB0aGlzIGF1dG9jb21tYW5kIGluIHRoZSAiZmlsZXR5cGVkZXRlY3QiIGdyb3VwLiAgVGhpcworYWxsb3dzIHJlbW92aW5nIGFsbCBhdXRvY29tbWFuZHMgZm9yIGZpbGV0eXBlIGRldGVjdGlvbiB3aGVuIGRvaW5nICI6ZmlsZXR5cGUKK29mZiIuICBUaGUgInNldGYiIGNvbW1hbmQgd2lsbCBzZXQgdGhlICdmaWxldHlwZScgb3B0aW9uIHRvIGl0cyBhcmd1bWVudCwKK3VubGVzcyBpdCB3YXMgc2V0IGFscmVhZHkuICBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgJ2ZpbGV0eXBlJyBpc24ndCBzZXQKK3R3aWNlLgorCitZb3UgY2FuIHVzZSBtYW55IGRpZmZlcmVudCBwYXR0ZXJucyB0byBtYXRjaCB0aGUgbmFtZSBvZiB5b3VyIGZpbGUuICBEaXJlY3RvcnkKK25hbWVzIGNhbiBhbHNvIGJlIGluY2x1ZGVkLiAgU2VlIHxhdXRvY21kLXBhdHRlcm5zfC4gIEZvciBleGFtcGxlLCB0aGUgZmlsZXMKK3VuZGVyICIvdXNyL3NoYXJlL3NjcmlwdHMvIiBhcmUgYWxsICJydWJ5IiBmaWxlcywgYnV0IGRvbid0IGhhdmUgdGhlIGV4cGVjdGVkCitmaWxlIG5hbWUgZXh0ZW5zaW9uLiAgQWRkaW5nIHRoaXMgdG8gdGhlIGV4YW1wbGUgYWJvdmU6ID4KKworCWF1Z3JvdXAgZmlsZXR5cGVkZXRlY3QKKwlhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi54eXoJCQlzZXRmIHh5egorCWF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvdXNyL3NoYXJlL3NjcmlwdHMvKglzZXRmIHJ1YnkKKwlhdWdyb3VwIEVORAorCitIb3dldmVyLCBpZiB5b3Ugbm93IGVkaXQgYSBmaWxlIC91c3Ivc2hhcmUvc2NyaXB0cy9SRUFETUUudHh0LCB0aGlzIGlzIG5vdCBhCitydWJ5IGZpbGUuICBUaGUgZGFuZ2VyIG9mIGEgcGF0dGVybiBlbmRpbmcgaW4gIioiIGlzIHRoYXQgaXQgcXVpY2tseSBtYXRjaGVzCit0b28gbWFueSBmaWxlcy4gIFRvIGF2b2lkIHRyb3VibGUgd2l0aCB0aGlzLCBwdXQgdGhlIGZpbGV0eXBlLnZpbSBmaWxlIGluCithbm90aGVyIGRpcmVjdG9yeSwgb25lIHRoYXQgaXMgYXQgdGhlIGVuZCBvZiAncnVudGltZXBhdGgnLiAgRm9yIFVuaXggZm9yCitleGFtcGxlLCB5b3UgY291bGQgdXNlICJ+Ly52aW0vYWZ0ZXIvZmlsZXR5cGUudmltIi4KKyAgIFlvdSBub3cgcHV0IHRoZSBkZXRlY3Rpb24gb2YgdGV4dCBmaWxlcyBpbiB+Ly52aW0vZmlsZXR5cGUudmltOiA+CisKKwlhdWdyb3VwIGZpbGV0eXBlZGV0ZWN0CisJYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudHh0CQkJc2V0ZiB0ZXh0CisJYXVncm91cCBFTkQKKworVGhhdCBmaWxlIGlzIGZvdW5kIGluICdydW50aW1lcGF0aCcgZmlyc3QuICBUaGVuIHVzZSB0aGlzIGluCit+Ly52aW0vYWZ0ZXIvZmlsZXR5cGUudmltLCB3aGljaCBpcyBmb3VuZCBsYXN0OiA+CisKKwlhdWdyb3VwIGZpbGV0eXBlZGV0ZWN0CisJYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC91c3Ivc2hhcmUvc2NyaXB0cy8qCXNldGYgcnVieQorCWF1Z3JvdXAgRU5ECisKK1doYXQgd2lsbCBoYXBwZW4gbm93IGlzIHRoYXQgVmltIHNlYXJjaGVzIGZvciAiZmlsZXR5cGUudmltIiBmaWxlcyBpbiBlYWNoCitkaXJlY3RvcnkgaW4gJ3J1bnRpbWVwYXRoJy4gIEZpcnN0IH4vLnZpbS9maWxldHlwZS52aW0gaXMgZm91bmQuICBUaGUKK2F1dG9jb21tYW5kIHRvIGNhdGNoICoudHh0IGZpbGVzIGlzIGRlZmluZWQgdGhlcmUuICBUaGVuIFZpbSBmaW5kcyB0aGUKK2ZpbGV0eXBlLnZpbSBmaWxlIGluICRWSU1SVU5USU1FLCB3aGljaCBpcyBoYWxmd2F5ICdydW50aW1lcGF0aCcuICBGaW5hbGx5Cit+Ly52aW0vYWZ0ZXIvZmlsZXR5cGUudmltIGlzIGZvdW5kIGFuZCB0aGUgYXV0b2NvbW1hbmQgZm9yIGRldGVjdGluZyBydWJ5CitmaWxlcyBpbiAvdXNyL3NoYXJlL3NjcmlwdHMgaXMgYWRkZWQuCisgICBXaGVuIHlvdSBub3cgZWRpdCAvdXNyL3NoYXJlL3NjcmlwdHMvUkVBRE1FLnR4dCwgdGhlIGF1dG9jb21tYW5kcyBhcmUKK2NoZWNrZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBkZWZpbmVkLiAgVGhlICoudHh0IHBhdHRlcm4gbWF0Y2hlcywKK3RodXMgInNldGYgdGV4dCIgaXMgZXhlY3V0ZWQgdG8gc2V0IHRoZSBmaWxldHlwZSB0byAidGV4dCIuICBUaGUgcGF0dGVybiBmb3IKK3J1YnkgbWF0Y2hlcyB0b28sIGFuZCB0aGUgInNldGYgcnVieSIgaXMgZXhlY3V0ZWQuICBCdXQgc2luY2UgJ2ZpbGV0eXBlJyB3YXMKK2FscmVhZHkgc2V0IHRvICJ0ZXh0Iiwgbm90aGluZyBoYXBwZW5zIGhlcmUuCisgICBXaGVuIHlvdSBlZGl0IHRoZSBmaWxlIC91c3Ivc2hhcmUvc2NyaXB0cy9mb29iYXIgdGhlIHNhbWUgYXV0b2NvbW1hbmRzIGFyZQorY2hlY2tlZC4gIE9ubHkgdGhlIG9uZSBmb3IgcnVieSBtYXRjaGVzIGFuZCAic2V0ZiBydWJ5IiBzZXRzICdmaWxldHlwZScgdG8KK3J1YnkuCisKKworUkVDT0dOSVpJTkcgQlkgQ09OVEVOVFMKKworSWYgeW91ciBmaWxlIGNhbm5vdCBiZSByZWNvZ25pemVkIGJ5IGl0cyBmaWxlIG5hbWUsIHlvdSBtaWdodCBiZSBhYmxlIHRvCityZWNvZ25pemUgaXQgYnkgaXRzIGNvbnRlbnRzLiAgRm9yIGV4YW1wbGUsIG1hbnkgc2NyaXB0IGZpbGVzIHN0YXJ0IHdpdGggYQorbGluZSBsaWtlOgorCisJIyEvYmluL3h5eiB+CisKK1RvIHJlY29nbml6ZSB0aGlzIHNjcmlwdCBjcmVhdGUgYSBmaWxlICJzY3JpcHRzLnZpbSIgaW4geW91ciBydW50aW1lIGRpcmVjdG9yeQorKHNhbWUgcGxhY2Ugd2hlcmUgZmlsZXR5cGUudmltIGdvZXMpLiAgSXQgbWlnaHQgbG9vayBsaWtlIHRoaXM6ID4KKworCWlmIGRpZF9maWxldHlwZSgpCisJICBmaW5pc2gKKwllbmRpZgorCWlmIGdldGxpbmUoMSkgPX4gJ14jIS4qWy9cXF14eXpcPicKKwkgIHNldGYgeHl6CisJZW5kaWYKKworVGhlIGZpcnN0IGNoZWNrIHdpdGggZGlkX2ZpbGV0eXBlKCkgaXMgdG8gYXZvaWQgdGhhdCB5b3Ugd2lsbCBjaGVjayB0aGUKK2NvbnRlbnRzIG9mIGZpbGVzIGZvciB3aGljaCB0aGUgZmlsZXR5cGUgd2FzIGFscmVhZHkgZGV0ZWN0ZWQgYnkgdGhlIGZpbGUKK25hbWUuICBUaGF0IGF2b2lkcyB3YXN0aW5nIHRpbWUgb24gY2hlY2tpbmcgdGhlIGZpbGUgd2hlbiB0aGUgInNldGYiIGNvbW1hbmQKK3dvbid0IGRvIGFueXRoaW5nLgorICAgVGhlIHNjcmlwdHMudmltIGZpbGUgaXMgc291cmNlZCBieSBhbiBhdXRvY29tbWFuZCBpbiB0aGUgZGVmYXVsdAorZmlsZXR5cGUudmltIGZpbGUuICBUaGVyZWZvcmUsIHRoZSBvcmRlciBvZiBjaGVja3MgaXM6CisKKwkxLiBmaWxldHlwZS52aW0gZmlsZXMgYmVmb3JlICRWSU1SVU5USU1FIGluICdydW50aW1lcGF0aCcKKwkyLiBmaXJzdCBwYXJ0IG9mICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbQorCTMuIGFsbCBzY3JpcHRzLnZpbSBmaWxlcyBpbiAncnVudGltZXBhdGgnCisJNC4gcmVtYWluZGVyIG9mICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbQorCTUuIGZpbGV0eXBlLnZpbSBmaWxlcyBhZnRlciAkVklNUlVOVElNRSBpbiAncnVudGltZXBhdGgnCisKK0lmIHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgZm9yIHlvdSwgYWRkIGFuIGF1dG9jb21tYW5kIHRoYXQgbWF0Y2hlcyBhbGwgZmlsZXMKK2FuZCBzb3VyY2VzIGEgc2NyaXB0IG9yIGV4ZWN1dGVzIGEgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzQ0LnR4dHwgIFlvdXIgb3duIHN5bnRheCBoaWdobGlnaHRlZAorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl80NC50eHQgYi9ydW50aW1lL2RvYy91c3JfNDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWM0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy91c3JfNDQudHh0CkBAIC0wLDAgKzEsNzE5IEBACisqdXNyXzQ0LnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDIgT2N0IDEwCisKKwkJICAgICBWSU0gVVNFUiBNQU5VQUwgLSBieSBCcmFtIE1vb2xlbmFhcgorCisJCQkgWW91ciBvd24gc3ludGF4IGhpZ2hsaWdodGVkCisKKworVmltIGNvbWVzIHdpdGggaGlnaGxpZ2h0aW5nIGZvciBhIGNvdXBsZSBvZiBodW5kcmVkIGRpZmZlcmVudCBmaWxlIHR5cGVzLiAgSWYKK3RoZSBmaWxlIHlvdSBhcmUgZWRpdGluZyBpc24ndCBpbmNsdWRlZCwgcmVhZCB0aGlzIGNoYXB0ZXIgdG8gZmluZCBvdXQgaG93IHRvCitnZXQgdGhpcyB0eXBlIG9mIGZpbGUgaGlnaGxpZ2h0ZWQuICBBbHNvIHNlZSB8OnN5bi1kZWZpbmV8IGluIHRoZSByZWZlcmVuY2UKK21hbnVhbC4KKworfDQ0LjF8CUJhc2ljIHN5bnRheCBjb21tYW5kcworfDQ0LjJ8CUtleXdvcmRzCit8NDQuM3wJTWF0Y2hlcworfDQ0LjR8CVJlZ2lvbnMKK3w0NC41fAlOZXN0ZWQgaXRlbXMKK3w0NC42fAlGb2xsb3dpbmcgZ3JvdXBzCit8NDQuN3wJT3RoZXIgYXJndW1lbnRzCit8NDQuOHwJQ2x1c3RlcnMKK3w0NC45fAlJbmNsdWRpbmcgYW5vdGhlciBzeW50YXggZmlsZQorfDQ0LjEwfAlTeW5jaHJvbml6aW5nCit8NDQuMTF8CUluc3RhbGxpbmcgYSBzeW50YXggZmlsZQorfDQ0LjEyfAlQb3J0YWJsZSBzeW50YXggZmlsZSBsYXlvdXQKKworICAgICBOZXh0IGNoYXB0ZXI6IHx1c3JfNDUudHh0fCAgU2VsZWN0IHlvdXIgbGFuZ3VhZ2UKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzQzLnR4dHwgIFVzaW5nIGZpbGV0eXBlcworVGFibGUgb2YgY29udGVudHM6IHx1c3JfdG9jLnR4dHwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuMSoJQmFzaWMgc3ludGF4IGNvbW1hbmRzCisKK1VzaW5nIGFuIGV4aXN0aW5nIHN5bnRheCBmaWxlIHRvIHN0YXJ0IHdpdGggd2lsbCBzYXZlIHlvdSBhIGxvdCBvZiB0aW1lLiAgVHJ5CitmaW5kaW5nIGEgc3ludGF4IGZpbGUgaW4gJFZJTVJVTlRJTUUvc3ludGF4IGZvciBhIGxhbmd1YWdlIHRoYXQgaXMgc2ltaWxhci4KK1RoZXNlIGZpbGVzIHdpbGwgYWxzbyBzaG93IHlvdSB0aGUgbm9ybWFsIGxheW91dCBvZiBhIHN5bnRheCBmaWxlLiAgVG8KK3VuZGVyc3RhbmQgaXQsIHlvdSBuZWVkIHRvIHJlYWQgdGhlIGZvbGxvd2luZy4KKworTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWMgYXJndW1lbnRzLiAgQmVmb3JlIHdlIHN0YXJ0IGRlZmluaW5nIGFueSBuZXcKK3N5bnRheCwgd2UgbmVlZCB0byBjbGVhciBvdXQgYW55IG9sZCBkZWZpbml0aW9uczogPgorCisJOnN5bnRheCBjbGVhcgorCitUaGlzIGlzbid0IHJlcXVpcmVkIGluIHRoZSBmaW5hbCBzeW50YXggZmlsZSwgYnV0IHZlcnkgdXNlZnVsIHdoZW4KK2V4cGVyaW1lbnRpbmcuCisKK1RoZXJlIGFyZSBtb3JlIHNpbXBsaWZpY2F0aW9ucyBpbiB0aGlzIGNoYXB0ZXIuICBJZiB5b3UgYXJlIHdyaXRpbmcgYSBzeW50YXgKK2ZpbGUgdG8gYmUgdXNlZCBieSBvdGhlcnMsIHJlYWQgYWxsIHRoZSB3YXkgdGhyb3VnaCB0aGUgZW5kIHRvIGZpbmQgb3V0IHRoZQorZGV0YWlscy4KKworCitMSVNUSU5HIERFRklORUQgSVRFTVMKKworVG8gY2hlY2sgd2hpY2ggc3ludGF4IGl0ZW1zIGFyZSBjdXJyZW50bHkgZGVmaW5lZCwgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOnN5bnRheAorCitZb3UgY2FuIHVzZSB0aGlzIHRvIGNoZWNrIHdoaWNoIGl0ZW1zIGhhdmUgYWN0dWFsbHkgYmVlbiBkZWZpbmVkLiAgUXVpdGUKK3VzZWZ1bCB3aGVuIHlvdSBhcmUgZXhwZXJpbWVudGluZyB3aXRoIGEgbmV3IHN5bnRheCBmaWxlLiAgSXQgYWxzbyBzaG93cyB0aGUKK2NvbG9ycyB1c2VkIGZvciBlYWNoIGl0ZW0sIHdoaWNoIGhlbHBzIHRvIGZpbmQgb3V0IHdoYXQgaXMgd2hhdC4KKyAgIFRvIGxpc3QgdGhlIGl0ZW1zIGluIGEgc3BlY2lmaWMgc3ludGF4IGdyb3VwIHVzZTogPgorCisJOnN5bnRheCBsaXN0IHtncm91cC1uYW1lfQorCitUaGlzIGFsc28gY2FuIGJlIHVzZWQgdG8gbGlzdCBjbHVzdGVycyAoZXhwbGFpbmVkIGluIHw0NC44fCkuICBKdXN0IGluY2x1ZGUKK3RoZSBAIGluIHRoZSBuYW1lLgorCisKK01BVENISU5HIENBU0UKKworU29tZSBsYW5ndWFnZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZSwgc3VjaCBhcyBQYXNjYWwuICBPdGhlcnMsIHN1Y2ggYXMgQywgYXJlCitjYXNlIHNlbnNpdGl2ZS4gIFlvdSBuZWVkIHRvIHRlbGwgd2hpY2ggdHlwZSB5b3UgaGF2ZSB3aXRoIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmRzOiA+CisJOnN5bnRheCBjYXNlIG1hdGNoCisJOnN5bnRheCBjYXNlIGlnbm9yZQorCitUaGUgIm1hdGNoIiBhcmd1bWVudCBtZWFucyB0aGF0IFZpbSB3aWxsIG1hdGNoIHRoZSBjYXNlIG9mIHN5bnRheCBlbGVtZW50cy4KK1RoZXJlZm9yZSwgImludCIgZGlmZmVycyBmcm9tICJJbnQiIGFuZCAiSU5UIi4gIElmIHRoZSAiaWdub3JlIiBhcmd1bWVudCBpcwordXNlZCwgdGhlIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDogIlByb2NlZHVyZSIsICJQUk9DRURVUkUiIGFuZCAicHJvY2VkdXJlIi4KKyAgIFRoZSAiOnN5bnRheCBjYXNlIiBjb21tYW5kcyBjYW4gYXBwZWFyIGFueXdoZXJlIGluIGEgc3ludGF4IGZpbGUgYW5kIGFmZmVjdAordGhlIHN5bnRheCBkZWZpbml0aW9ucyB0aGF0IGZvbGxvdy4gIEluIG1vc3QgY2FzZXMsIHlvdSBoYXZlIG9ubHkgb25lICI6c3ludGF4CitjYXNlIiBjb21tYW5kIGluIHlvdXIgc3ludGF4IGZpbGU7IGlmIHlvdSB3b3JrIHdpdGggYW4gdW51c3VhbCBsYW5ndWFnZSB0aGF0Citjb250YWlucyBib3RoIGNhc2Utc2Vuc2l0aXZlIGFuZCBub24tY2FzZS1zZW5zaXRpdmUgZWxlbWVudHMsIGhvd2V2ZXIsIHlvdSBjYW4KK3NjYXR0ZXIgdGhlICI6c3ludGF4IGNhc2UiIGNvbW1hbmQgdGhyb3VnaG91dCB0aGUgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuMioJS2V5d29yZHMKKworVGhlIG1vc3QgYmFzaWMgc3ludGF4IGVsZW1lbnRzIGFyZSBrZXl3b3Jkcy4gIFRvIGRlZmluZSBhIGtleXdvcmQsIHVzZSB0aGUKK2ZvbGxvd2luZyBmb3JtOiA+CisKKwk6c3ludGF4IGtleXdvcmQge2dyb3VwfSB7a2V5d29yZH0gLi4uCisKK1RoZSB7Z3JvdXB9IGlzIHRoZSBuYW1lIG9mIGEgc3ludGF4IGdyb3VwLiAgV2l0aCB0aGUgIjpoaWdobGlnaHQiIGNvbW1hbmQgeW91CitjYW4gYXNzaWduIGNvbG9ycyB0byBhIHtncm91cH0uICBUaGUge2tleXdvcmR9IGFyZ3VtZW50IGlzIGFuIGFjdHVhbCBrZXl3b3JkLgorSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXM6ID4KKworCTpzeW50YXgga2V5d29yZCB4VHlwZSBpbnQgbG9uZyBjaGFyCisJOnN5bnRheCBrZXl3b3JkIHhTdGF0ZW1lbnQgaWYgdGhlbiBlbHNlIGVuZGlmCisKK1RoaXMgZXhhbXBsZSB1c2VzIHRoZSBncm91cCBuYW1lcyAieFR5cGUiIGFuZCAieFN0YXRlbWVudCIuICBCeSBjb252ZW50aW9uLAorZWFjaCBncm91cCBuYW1lIGlzIHByZWZpeGVkIGJ5IHRoZSBmaWxldHlwZSBmb3IgdGhlIGxhbmd1YWdlIGJlaW5nIGRlZmluZWQuCitUaGlzIGV4YW1wbGUgZGVmaW5lcyBzeW50YXggZm9yIHRoZSB4IGxhbmd1YWdlIChlWGFtcGxlIGxhbmd1YWdlIHdpdGhvdXQgYW4KK2ludGVyZXN0aW5nIG5hbWUpLiAgSW4gYSBzeW50YXggZmlsZSBmb3IgImNzaCIgc2NyaXB0cyB0aGUgbmFtZSAiY3NoVHlwZSIKK3dvdWxkIGJlIHVzZWQuICBUaHVzIHRoZSBwcmVmaXggaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mICdmaWxldHlwZScuCisgICBUaGVzZSBjb21tYW5kcyBjYXVzZSB0aGUgd29yZHMgImludCIsICJsb25nIiBhbmQgImNoYXIiIHRvIGJlIGhpZ2hsaWdodGVkCitvbmUgd2F5IGFuZCB0aGUgd29yZHMgImlmIiwgInRoZW4iLCAiZWxzZSIgYW5kICJlbmRpZiIgdG8gYmUgaGlnaGxpZ2h0ZWQKK2Fub3RoZXIgd2F5LiAgTm93IHlvdSBuZWVkIHRvIGNvbm5lY3QgdGhlIHggZ3JvdXAgbmFtZXMgdG8gc3RhbmRhcmQgVmltCituYW1lcy4gIFlvdSBkbyB0aGlzIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczogPgorCisJOmhpZ2hsaWdodCBsaW5rIHhUeXBlIFR5cGUKKwk6aGlnaGxpZ2h0IGxpbmsgeFN0YXRlbWVudCBTdGF0ZW1lbnQKKworVGhpcyB0ZWxscyBWaW0gdG8gaGlnaGxpZ2h0ICJ4VHlwZSIgbGlrZSAiVHlwZSIgYW5kICJ4U3RhdGVtZW50IiBsaWtlCisiU3RhdGVtZW50Ii4gIFNlZSB8Z3JvdXAtbmFtZXwgZm9yIHRoZSBzdGFuZGFyZCBuYW1lcy4KKworCitVTlVTVUFMIEtFWVdPUkRTCisKK1RoZSBjaGFyYWN0ZXJzIHVzZWQgaW4gYSBrZXl3b3JkIG11c3QgYmUgaW4gdGhlICdpc2tleXdvcmQnIG9wdGlvbi4gIElmIHlvdQordXNlIGFub3RoZXIgY2hhcmFjdGVyLCB0aGUgd29yZCB3aWxsIG5ldmVyIG1hdGNoLiAgVmltIGRvZXNuJ3QgZ2l2ZSBhIHdhcm5pbmcKK21lc3NhZ2UgZm9yIHRoaXMuCisgICBUaGUgeCBsYW5ndWFnZSB1c2VzIHRoZSAnLScgY2hhcmFjdGVyIGluIGtleXdvcmRzLiAgVGhpcyBpcyBob3cgaXQncyBkb25lOgorPgorCTpzZXRsb2NhbCBpc2tleXdvcmQrPS0KKwk6c3ludGF4IGtleXdvcmQgeFN0YXRlbWVudCB3aGVuLW5vdAorCitUaGUgIjpzZXRsb2NhbCIgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSAnaXNrZXl3b3JkJyBvbmx5IGZvciB0aGUgY3VycmVudAorYnVmZmVyLiAgU3RpbGwgaXQgZG9lcyBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGNvbW1hbmRzIGxpa2UgInciIGFuZCAiKiIuICBJZgordGhhdCBpcyBub3Qgd2FudGVkLCBkb24ndCBkZWZpbmUgYSBrZXl3b3JkIGJ1dCB1c2UgYSBtYXRjaCAoZXhwbGFpbmVkIGluIHRoZQorbmV4dCBzZWN0aW9uKS4KKworVGhlIHggbGFuZ3VhZ2UgYWxsb3dzIGZvciBhYmJyZXZpYXRpb25zLiAgRm9yIGV4YW1wbGUsICJuZXh0IiBjYW4gYmUKK2FiYnJldmlhdGVkIHRvICJuIiwgIm5lIiBvciAibmV4Ii4gIFlvdSBjYW4gZGVmaW5lIHRoZW0gYnkgdXNpbmcgdGhpcyBjb21tYW5kOgorPgorCTpzeW50YXgga2V5d29yZCB4U3RhdGVtZW50IG5bZXh0XQorCitUaGlzIGRvZXNuJ3QgbWF0Y2ggIm5leHRvbmUiLCBrZXl3b3JkcyBhbHdheXMgbWF0Y2ggd2hvbGUgd29yZHMgb25seS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuMyoJTWF0Y2hlcworCitDb25zaWRlciBkZWZpbmluZyBzb21ldGhpbmcgYSBiaXQgbW9yZSBjb21wbGV4LiAgWW91IHdhbnQgdG8gbWF0Y2ggb3JkaW5hcnkKK2lkZW50aWZpZXJzLiAgVG8gZG8gdGhpcywgeW91IGRlZmluZSBhIG1hdGNoIHN5bnRheCBpdGVtLiAgVGhpcyBvbmUgbWF0Y2hlcworYW55IHdvcmQgY29uc2lzdGluZyBvZiBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzOiA+CisKKwk6c3ludGF4IG1hdGNoIHhJZGVudGlmaWVyIC9cPFxsXCtcPi8KKzwKKwlOb3RlOgorCUtleXdvcmRzIG92ZXJydWxlIGFueSBvdGhlciBzeW50YXggaXRlbS4gIFRodXMgdGhlIGtleXdvcmRzICJpZiIsCisJInRoZW4iLCBldGMuLCB3aWxsIGJlIGtleXdvcmRzLCBhcyBkZWZpbmVkIHdpdGggdGhlICI6c3ludGF4IGtleXdvcmQiCisJY29tbWFuZHMgYWJvdmUsIGV2ZW4gdGhvdWdoIHRoZXkgYWxzbyBtYXRjaCB0aGUgcGF0dGVybiBmb3IKKwl4SWRlbnRpZmllci4KKworVGhlIHBhcnQgYXQgdGhlIGVuZCBpcyBhIHBhdHRlcm4sIGxpa2UgaXQncyB1c2VkIGZvciBzZWFyY2hpbmcuICBUaGUgLy8gaXMKK3VzZWQgdG8gc3Vycm91bmQgdGhlIHBhdHRlcm4gKGxpa2UgaG93IGl0J3MgZG9uZSBpbiBhICI6c3Vic3RpdHV0ZSIgY29tbWFuZCkuCitZb3UgY2FuIHVzZSBhbnkgb3RoZXIgY2hhcmFjdGVyLCBsaWtlIGEgcGx1cyBvciBhIHF1b3RlLgorCitOb3cgZGVmaW5lIGEgbWF0Y2ggZm9yIGEgY29tbWVudC4gIEluIHRoZSB4IGxhbmd1YWdlIGl0IGlzIGFueXRoaW5nIGZyb20gIyB0bwordGhlIGVuZCBvZiBhIGxpbmU6ID4KKworCTpzeW50YXggbWF0Y2ggeENvbW1lbnQgLyMuKi8KKworU2luY2UgeW91IGNhbiB1c2UgYW55IHNlYXJjaCBwYXR0ZXJuLCB5b3UgY2FuIGhpZ2hsaWdodCB2ZXJ5IGNvbXBsZXggdGhpbmdzCit3aXRoIGEgbWF0Y2ggaXRlbS4gIFNlZSB8cGF0dGVybnwgZm9yIGhlbHAgb24gc2VhcmNoIHBhdHRlcm5zLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC40KglSZWdpb25zCisKK0luIHRoZSBleGFtcGxlIHggbGFuZ3VhZ2UsIHN0cmluZ3MgYXJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90YXRpb24gbWFya3MgKCIpLgorVG8gaGlnaGxpZ2h0IHN0cmluZ3MgeW91IGRlZmluZSBhIHJlZ2lvbi4gIFlvdSBuZWVkIGEgcmVnaW9uIHN0YXJ0IChkb3VibGUKK3F1b3RlKSBhbmQgYSByZWdpb24gZW5kIChkb3VibGUgcXVvdGUpLiAgVGhlIGRlZmluaXRpb24gaXMgYXMgZm9sbG93czogPgorCisJOnN5bnRheCByZWdpb24geFN0cmluZyBzdGFydD0vIi8gZW5kPS8iLworCitUaGUgInN0YXJ0IiBhbmQgImVuZCIgZGlyZWN0aXZlcyBkZWZpbmUgdGhlIHBhdHRlcm5zIHVzZWQgdG8gZmluZCB0aGUgc3RhcnQKK2FuZCBlbmQgb2YgdGhlIHJlZ2lvbi4gIEJ1dCB3aGF0IGFib3V0IHN0cmluZ3MgdGhhdCBsb29rIGxpa2UgdGhpcz8KKworCSJBIHN0cmluZyB3aXRoIGEgZG91YmxlIHF1b3RlIChcIikgaW4gaXQiIH4KKworVGhpcyBjcmVhdGVzIGEgcHJvYmxlbTogVGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3RyaW5nCit3aWxsIGVuZCB0aGUgcmVnaW9uLiAgWW91IG5lZWQgdG8gdGVsbCBWaW0gdG8gc2tpcCBvdmVyIGFueSBlc2NhcGVkIGRvdWJsZQorcXVvdGVzIGluIHRoZSBzdHJpbmcuICBEbyB0aGlzIHdpdGggdGhlIHNraXAga2V5d29yZDogPgorCisJOnN5bnRheCByZWdpb24geFN0cmluZyBzdGFydD0vIi8gc2tpcD0vXFwiLyBlbmQ9LyIvCisKK1RoZSBkb3VibGUgYmFja3NsYXNoIG1hdGNoZXMgYSBzaW5nbGUgYmFja3NsYXNoLCBzaW5jZSB0aGUgYmFja3NsYXNoIGlzIGEKK3NwZWNpYWwgY2hhcmFjdGVyIGluIHNlYXJjaCBwYXR0ZXJucy4KKworV2hlbiB0byB1c2UgYSByZWdpb24gaW5zdGVhZCBvZiBhIG1hdGNoPyAgVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IGEgbWF0Y2gKK2l0ZW0gaXMgYSBzaW5nbGUgcGF0dGVybiwgd2hpY2ggbXVzdCBtYXRjaCBhcyBhIHdob2xlLiAgQSByZWdpb24gc3RhcnRzIGFzCitzb29uIGFzIHRoZSAic3RhcnQiIHBhdHRlcm4gbWF0Y2hlcy4gIFdoZXRoZXIgdGhlICJlbmQiIHBhdHRlcm4gaXMgZm91bmQgb3IKK25vdCBkb2Vzbid0IG1hdHRlci4gIFRodXMgd2hlbiB0aGUgaXRlbSBkZXBlbmRzIG9uIHRoZSAiZW5kIiBwYXR0ZXJuIHRvIG1hdGNoLAoreW91IGNhbm5vdCB1c2UgYSByZWdpb24uICBPdGhlcndpc2UsIHJlZ2lvbnMgYXJlIG9mdGVuIHNpbXBsZXIgdG8gZGVmaW5lLiAgQW5kCitpdCBpcyBlYXNpZXIgdG8gdXNlIG5lc3RlZCBpdGVtcywgYXMgaXMgZXhwbGFpbmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ0LjUqCU5lc3RlZCBpdGVtcworCitUYWtlIGEgbG9vayBhdCB0aGlzIGNvbW1lbnQ6CisKKwklR2V0IGlucHV0ICBUT0RPOiBTa2lwIHdoaXRlIHNwYWNlIH4KKworWW91IHdhbnQgdG8gaGlnaGxpZ2h0IFRPRE8gaW4gYmlnIHllbGxvdyBsZXR0ZXJzLCBldmVuIHRob3VnaCBpdCBpcyBpbiBhCitjb21tZW50IHRoYXQgaXMgaGlnaGxpZ2h0ZWQgYmx1ZS4gIFRvIGxldCBWaW0ga25vdyBhYm91dCB0aGlzLCB5b3UgZGVmaW5lIHRoZQorZm9sbG93aW5nIHN5bnRheCBncm91cHM6ID4KKworCTpzeW50YXgga2V5d29yZCB4VG9kbyBUT0RPIGNvbnRhaW5lZAorCTpzeW50YXggbWF0Y2ggeENvbW1lbnQgLyUuKi8gY29udGFpbnM9eFRvZG8KKworSW4gdGhlIGZpcnN0IGxpbmUsIHRoZSAiY29udGFpbmVkIiBhcmd1bWVudCB0ZWxscyBWaW0gdGhhdCB0aGlzIGtleXdvcmQgY2FuCitleGlzdCBvbmx5IGluc2lkZSBhbm90aGVyIHN5bnRheCBpdGVtLiAgVGhlIG5leHQgbGluZSBoYXMgImNvbnRhaW5zPXhUb2RvIi4KK1RoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHhUb2RvIHN5bnRheCBlbGVtZW50IGlzIGluc2lkZSBpdC4gIFRoZSByZXN1bHQgaXMgdGhhdAordGhlIGNvbW1lbnQgbGluZSBhcyBhIHdob2xlIGlzIG1hdGNoZWQgd2l0aCAieENvbW1lbnQiIGFuZCBtYWRlIGJsdWUuICBUaGUKK3dvcmQgVE9ETyBpbnNpZGUgaXQgaXMgbWF0Y2hlZCBieSB4VG9kbyBhbmQgaGlnaGxpZ2h0ZWQgeWVsbG93IChoaWdobGlnaHRpbmcKK2ZvciB4VG9kbyB3YXMgc2V0dXAgZm9yIHRoaXMpLgorCisKK1JFQ1VSU0lWRSBORVNUSU5HCisKK1RoZSB4IGxhbmd1YWdlIGRlZmluZXMgY29kZSBibG9ja3MgaW4gY3VybHkgYnJhY2VzLiAgQW5kIGEgY29kZSBibG9jayBtYXkKK2NvbnRhaW4gb3RoZXIgY29kZSBibG9ja3MuICBUaGlzIGNhbiBiZSBkZWZpbmVkIHRoaXMgd2F5OiA+CisKKwk6c3ludGF4IHJlZ2lvbiB4QmxvY2sgc3RhcnQ9L3svIGVuZD0vfS8gY29udGFpbnM9eEJsb2NrCisKK1N1cHBvc2UgeW91IGhhdmUgdGhpcyB0ZXh0OgorCisJd2hpbGUgaSA8IGIgeyB+CisJCWlmIGEgeyB+CisJCQliID0gYzsgfgorCQl9IH4KKwl9IH4KKworRmlyc3QgYSB4QmxvY2sgc3RhcnRzIGF0IHRoZSB7IGluIHRoZSBmaXJzdCBsaW5lLiAgSW4gdGhlIHNlY29uZCBsaW5lIGFub3RoZXIKK3sgaXMgZm91bmQuICBTaW5jZSB3ZSBhcmUgaW5zaWRlIGEgeEJsb2NrIGl0ZW0sIGFuZCBpdCBjb250YWlucyBpdHNlbGYsIGEKK25lc3RlZCB4QmxvY2sgaXRlbSB3aWxsIHN0YXJ0IGhlcmUuICBUaHVzIHRoZSAiYiA9IGMiIGxpbmUgaXMgaW5zaWRlIHRoZQorc2Vjb25kIGxldmVsIHhCbG9jayByZWdpb24uICBUaGVuIGEgfSBpcyBmb3VuZCBpbiB0aGUgbmV4dCBsaW5lLCB3aGljaCBtYXRjaGVzCit3aXRoIHRoZSBlbmQgcGF0dGVybiBvZiB0aGUgcmVnaW9uLiAgVGhpcyBlbmRzIHRoZSBuZXN0ZWQgeEJsb2NrLiAgQmVjYXVzZSB0aGUKK30gaXMgaW5jbHVkZWQgaW4gdGhlIG5lc3RlZCByZWdpb24sIGl0IGlzIGhpZGRlbiBmcm9tIHRoZSBmaXJzdCB4QmxvY2sgcmVnaW9uLgorVGhlbiBhdCB0aGUgbGFzdCB9IHRoZSBmaXJzdCB4QmxvY2sgcmVnaW9uIGVuZHMuCisKKworS0VFUElORyBUSEUgRU5ECisKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIHN5bnRheCBpdGVtczogPgorCisJOnN5bnRheCByZWdpb24geENvbW1lbnQgc3RhcnQ9LyUvIGVuZD0vJC8gY29udGFpbmVkCisJOnN5bnRheCByZWdpb24geFByZVByb2Mgc3RhcnQ9LyMvIGVuZD0vJC8gY29udGFpbnM9eENvbW1lbnQKKworWW91IGRlZmluZSBhIGNvbW1lbnQgYXMgYW55dGhpbmcgZnJvbSAlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuICBBCitwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIGFueXRoaW5nIGZyb20gIyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgQmVjYXVzZSB5b3UKK2NhbiBoYXZlIGEgY29tbWVudCBvbiBhIHByZXByb2Nlc3NvciBsaW5lLCB0aGUgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24KK2luY2x1ZGVzIGEgImNvbnRhaW5zPXhDb21tZW50IiBhcmd1bWVudC4gIE5vdyBsb29rIHdoYXQgaGFwcGVucyB3aXRoIHRoaXMKK3RleHQ6CisKKwkjZGVmaW5lIFggPSBZICAlIENvbW1lbnQgdGV4dCB+CisJaW50IGZvbyA9IDE7IH4KKworV2hhdCB5b3Ugc2VlIGlzIHRoYXQgdGhlIHNlY29uZCBsaW5lIGlzIGFsc28gaGlnaGxpZ2h0ZWQgYXMgeFByZVByb2MuICBUaGUKK3ByZXByb2Nlc3NvciBkaXJlY3RpdmUgc2hvdWxkIGVuZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgVGhhdCBpcyB3aHkKK3lvdSBoYXZlIHVzZWQgImVuZD0vJC8iLiAgU28gd2hhdCBpcyBnb2luZyB3cm9uZz8KKyAgIFRoZSBwcm9ibGVtIGlzIHRoZSBjb250YWluZWQgY29tbWVudC4gIFRoZSBjb21tZW50IHN0YXJ0cyB3aXRoICUgYW5kIGVuZHMKK2F0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICBBZnRlciB0aGUgY29tbWVudCBlbmRzLCB0aGUgcHJlcHJvY2Vzc29yIHN5bnRheAorY29udGludWVzLiAgVGhpcyBpcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBsaW5lIGhhcyBiZWVuIHNlZW4sIHNvIHRoZSBuZXh0CitsaW5lIGlzIGluY2x1ZGVkIGFzIHdlbGwuCisgICBUbyBhdm9pZCB0aGlzIHByb2JsZW0gYW5kIHRvIGF2b2lkIGEgY29udGFpbmVkIHN5bnRheCBpdGVtIGVhdGluZyBhIG5lZWRlZAorZW5kIG9mIGxpbmUsIHVzZSB0aGUgImtlZXBlbmQiIGFyZ3VtZW50LiAgVGhpcyB0YWtlcyBjYXJlIG9mCit0aGUgZG91YmxlIGVuZC1vZi1saW5lIG1hdGNoaW5nOiA+CisKKwk6c3ludGF4IHJlZ2lvbiB4Q29tbWVudCBzdGFydD0vJS8gZW5kPS8kLyBjb250YWluZWQKKwk6c3ludGF4IHJlZ2lvbiB4UHJlUHJvYyBzdGFydD0vIy8gZW5kPS8kLyBjb250YWlucz14Q29tbWVudCBrZWVwZW5kCisKKworQ09OVEFJTklORyBNQU5ZIElURU1TCisKK1lvdSBjYW4gdXNlIHRoZSBjb250YWlucyBhcmd1bWVudCB0byBzcGVjaWZ5IHRoYXQgZXZlcnl0aGluZyBjYW4gYmUgY29udGFpbmVkLgorRm9yIGV4YW1wbGU6ID4KKworCTpzeW50YXggcmVnaW9uIHhMaXN0IHN0YXJ0PS9cWy8gZW5kPS9cXS8gY29udGFpbnM9QUxMCisKK0FsbCBzeW50YXggaXRlbXMgd2lsbCBiZSBjb250YWluZWQgaW4gdGhpcyBvbmUuICBJdCBhbHNvIGNvbnRhaW5zIGl0c2VsZiwgYnV0Citub3QgYXQgdGhlIHNhbWUgcG9zaXRpb24gKHRoYXQgd291bGQgY2F1c2UgYW4gZW5kbGVzcyBsb29wKS4KKyAgIFlvdSBjYW4gc3BlY2lmeSB0aGF0IHNvbWUgZ3JvdXBzIGFyZSBub3QgY29udGFpbmVkLiAgVGh1cyBjb250YWluIGFsbAorZ3JvdXBzIGJ1dCB0aGUgb25lcyB0aGF0IGFyZSBsaXN0ZWQ6Cis+CisJOnN5bnRheCByZWdpb24geExpc3Qgc3RhcnQ9L1xbLyBlbmQ9L1xdLyBjb250YWlucz1BTExCVVQseFN0cmluZworCitXaXRoIHRoZSAiVE9QIiBpdGVtIHlvdSBjYW4gaW5jbHVkZSBhbGwgaXRlbXMgdGhhdCBkb24ndCBoYXZlIGEgImNvbnRhaW5lZCIKK2FyZ3VtZW50LiAgIkNPTlRBSU5FRCIgaXMgdXNlZCB0byBvbmx5IGluY2x1ZGUgaXRlbXMgd2l0aCBhICJjb250YWluZWQiCithcmd1bWVudC4gIFNlZSB8OnN5bi1jb250YWluc3wgZm9yIHRoZSBkZXRhaWxzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC42KglGb2xsb3dpbmcgZ3JvdXBzCisKK1RoZSB4IGxhbmd1YWdlIGhhcyBzdGF0ZW1lbnRzIGluIHRoaXMgZm9ybToKKworCWlmIChjb25kaXRpb24pIHRoZW4gfgorCitZb3Ugd2FudCB0byBoaWdobGlnaHQgdGhlIHRocmVlIGl0ZW1zIGRpZmZlcmVudGx5LiAgQnV0ICIoY29uZGl0aW9uKSIgYW5kCisidGhlbiIgbWlnaHQgYWxzbyBhcHBlYXIgaW4gb3RoZXIgcGxhY2VzLCB3aGVyZSB0aGV5IGdldCBkaWZmZXJlbnQKK2hpZ2hsaWdodGluZy4gIFRoaXMgaXMgaG93IHlvdSBjYW4gZG8gdGhpczogPgorCisJOnN5bnRheCBtYXRjaCB4SWYgL2lmLyBuZXh0Z3JvdXA9eElmQ29uZGl0aW9uIHNraXB3aGl0ZQorCTpzeW50YXggbWF0Y2ggeElmQ29uZGl0aW9uIC8oW14pXSopLyBjb250YWluZWQgbmV4dGdyb3VwPXhUaGVuIHNraXB3aGl0ZQorCTpzeW50YXggbWF0Y2ggeFRoZW4gL3RoZW4vIGNvbnRhaW5lZAorCitUaGUgIm5leHRncm91cCIgYXJndW1lbnQgc3BlY2lmaWVzIHdoaWNoIGl0ZW0gY2FuIGNvbWUgbmV4dC4gIFRoaXMgaXMgbm90CityZXF1aXJlZC4gIElmIG5vbmUgb2YgdGhlIGl0ZW1zIHRoYXQgYXJlIHNwZWNpZmllZCBhcmUgZm91bmQsIG5vdGhpbmcgaGFwcGVucy4KK0ZvciBleGFtcGxlLCBpbiB0aGlzIHRleHQ6CisKKwlpZiBub3QgKGNvbmRpdGlvbikgdGhlbiB+CisKK1RoZSAiaWYiIGlzIG1hdGNoZWQgYnkgeElmLiAgIm5vdCIgZG9lc24ndCBtYXRjaCB0aGUgc3BlY2lmaWVkIG5leHRncm91cAoreElmQ29uZGl0aW9uLCB0aHVzIG9ubHkgdGhlICJpZiIgaXMgaGlnaGxpZ2h0ZWQuCisKK1RoZSAic2tpcHdoaXRlIiBhcmd1bWVudCB0ZWxscyBWaW0gdGhhdCB3aGl0ZSBzcGFjZSAoc3BhY2VzIGFuZCB0YWJzKSBtYXkKK2FwcGVhciBpbiBiZXR3ZWVuIHRoZSBpdGVtcy4gIFNpbWlsYXIgYXJndW1lbnRzIGFyZSAic2tpcG5sIiwgd2hpY2ggYWxsb3dzIGEKK2xpbmUgYnJlYWsgaW4gYmV0d2VlbiB0aGUgaXRlbXMsIGFuZCAic2tpcGVtcHR5Iiwgd2hpY2ggYWxsb3dzIGVtcHR5IGxpbmVzLgorTm90aWNlIHRoYXQgInNraXBubCIgZG9lc24ndCBza2lwIGFuIGVtcHR5IGxpbmUsIHNvbWV0aGluZyBtdXN0IG1hdGNoIGFmdGVyCit0aGUgbGluZSBicmVhay4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDQuNyoJT3RoZXIgYXJndW1lbnRzCisKK01BVENIR1JPVVAKKworV2hlbiB5b3UgZGVmaW5lIGEgcmVnaW9uLCB0aGUgZW50aXJlIHJlZ2lvbiBpcyBoaWdobGlnaHRlZCBhY2NvcmRpbmcgdG8gdGhlCitncm91cCBuYW1lIHNwZWNpZmllZC4gIFRvIGhpZ2hsaWdodCB0aGUgdGV4dCBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyAoKSB3aXRoCit0aGUgZ3JvdXAgeEluc2lkZSwgZm9yIGV4YW1wbGUsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpzeW50YXggcmVnaW9uIHhJbnNpZGUgc3RhcnQ9LygvIGVuZD0vKS8KKworU3VwcG9zZSwgdGhhdCB5b3Ugd2FudCB0byBoaWdobGlnaHQgdGhlIHBhcmVudGhlc2VzIGRpZmZlcmVudGx5LiAgWW91IGNhbiBkbwordGhpcyB3aXRoIGEgbG90IG9mIGNvbnZvbHV0ZWQgcmVnaW9uIHN0YXRlbWVudHMsIG9yIHlvdSBjYW4gdXNlIHRoZQorIm1hdGNoZ3JvdXAiIGFyZ3VtZW50LiAgVGhpcyB0ZWxscyBWaW0gdG8gaGlnaGxpZ2h0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGEKK3JlZ2lvbiB3aXRoIGEgZGlmZmVyZW50IGhpZ2hsaWdodCBncm91cCAoaW4gdGhpcyBjYXNlLCB0aGUgeFBhcmVuIGdyb3VwKTogPgorCisJOnN5bnRheCByZWdpb24geEluc2lkZSBtYXRjaGdyb3VwPXhQYXJlbiBzdGFydD0vKC8gZW5kPS8pLworCitUaGUgIm1hdGNoZ3JvdXAiIGFyZ3VtZW50IGFwcGxpZXMgdG8gdGhlIHN0YXJ0IG9yIGVuZCBtYXRjaCB0aGF0IGNvbWVzIGFmdGVyCitpdC4gIEluIHRoZSBwcmV2aW91cyBleGFtcGxlIGJvdGggc3RhcnQgYW5kIGVuZCBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCB4UGFyZW4uCitUbyBoaWdobGlnaHQgdGhlIGVuZCB3aXRoIHhQYXJlbkVuZDogPgorCisJOnN5bnRheCByZWdpb24geEluc2lkZSBtYXRjaGdyb3VwPXhQYXJlbiBzdGFydD0vKC8KKwkJXCBtYXRjaGdyb3VwPXhQYXJlbkVuZCBlbmQ9LykvCisKK0Egc2lkZSBlZmZlY3Qgb2YgdXNpbmcgIm1hdGNoZ3JvdXAiIGlzIHRoYXQgY29udGFpbmVkIGl0ZW1zIHdpbGwgbm90IG1hdGNoIGluCit0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByZWdpb24uICBUaGUgZXhhbXBsZSBmb3IgInRyYW5zcGFyZW50IiB1c2VzIHRoaXMuCisKKworVFJBTlNQQVJFTlQKKworSW4gYSBDIGxhbmd1YWdlIGZpbGUgeW91IHdvdWxkIGxpa2UgdG8gaGlnaGxpZ2h0IHRoZSAoKSB0ZXh0IGFmdGVyIGEgIndoaWxlIgorZGlmZmVyZW50bHkgZnJvbSB0aGUgKCkgdGV4dCBhZnRlciBhICJmb3IiLiAgSW4gYm90aCBvZiB0aGVzZSB0aGVyZSBjYW4gYmUKK25lc3RlZCAoKSBpdGVtcywgd2hpY2ggc2hvdWxkIGJlIGhpZ2hsaWdodGVkIGluIHRoZSBzYW1lIHdheS4gIFlvdSBtdXN0IG1ha2UKK3N1cmUgdGhlICgpIGhpZ2hsaWdodGluZyBzdG9wcyBhdCB0aGUgbWF0Y2hpbmcgKS4gIFRoaXMgaXMgb25lIHdheSB0byBkbyB0aGlzOgorPgorCTpzeW50YXggcmVnaW9uIGNXaGlsZSBtYXRjaGdyb3VwPWNXaGlsZSBzdGFydD0vd2hpbGVccyooLyBlbmQ9LykvCisJCVwgY29udGFpbnM9Y0NvbmROZXN0CisJOnN5bnRheCByZWdpb24gY0ZvciBtYXRjaGdyb3VwPWNGb3Igc3RhcnQ9L2ZvclxzKigvIGVuZD0vKS8KKwkJXCBjb250YWlucz1jQ29uZE5lc3QKKwk6c3ludGF4IHJlZ2lvbiBjQ29uZE5lc3Qgc3RhcnQ9LygvIGVuZD0vKS8gY29udGFpbmVkIHRyYW5zcGFyZW50CisKK05vdyB5b3UgY2FuIGdpdmUgY1doaWxlIGFuZCBjRm9yIGRpZmZlcmVudCBoaWdobGlnaHRpbmcuICBUaGUgY0NvbmROZXN0IGl0ZW0KK2NhbiBhcHBlYXIgaW4gZWl0aGVyIG9mIHRoZW0sIGJ1dCB0YWtlIG92ZXIgdGhlIGhpZ2hsaWdodGluZyBvZiB0aGUgaXRlbSBpdCBpcworY29udGFpbmVkIGluLiAgVGhlICJ0cmFuc3BhcmVudCIgYXJndW1lbnQgY2F1c2VzIHRoaXMuCisgICBOb3RpY2UgdGhhdCB0aGUgIm1hdGNoZ3JvdXAiIGFyZ3VtZW50IGhhcyB0aGUgc2FtZSBncm91cCBhcyB0aGUgaXRlbQoraXRzZWxmLiAgV2h5IGRlZmluZSBpdCB0aGVuPyAgV2VsbCwgdGhlIHNpZGUgZWZmZWN0IG9mIHVzaW5nIGEgbWF0Y2hncm91cCBpcwordGhhdCBjb250YWluZWQgaXRlbXMgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWF0Y2ggd2l0aCB0aGUgc3RhcnQgaXRlbSB0aGVuLgorVGhpcyBhdm9pZHMgdGhhdCB0aGUgY0NvbmROZXN0IGdyb3VwIG1hdGNoZXMgdGhlICgganVzdCBhZnRlciB0aGUgIndoaWxlIiBvcgorImZvciIuICBJZiB0aGlzIHdvdWxkIGhhcHBlbiwgaXQgd291bGQgc3BhbiB0aGUgd2hvbGUgdGV4dCB1bnRpbCB0aGUgbWF0Y2hpbmcKKykgYW5kIHRoZSByZWdpb24gd291bGQgY29udGludWUgYWZ0ZXIgaXQuICBOb3cgY0NvbmROZXN0IG9ubHkgbWF0Y2hlcyBhZnRlcgordGhlIG1hdGNoIHdpdGggdGhlIHN0YXJ0IHBhdHRlcm4sIHRodXMgYWZ0ZXIgdGhlIGZpcnN0ICguCisKKworT0ZGU0VUUworCitTdXBwb3NlIHlvdSB3YW50IHRvIGRlZmluZSBhIHJlZ2lvbiBmb3IgdGhlIHRleHQgYmV0d2VlbiAoIGFuZCApIGFmdGVyIGFuCisiaWYiLiAgQnV0IHlvdSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlICJpZiIgb3IgdGhlICggYW5kICkuICBZb3UgY2FuIGRvIHRoaXMKK2J5IHNwZWNpZnlpbmcgb2Zmc2V0cyBmb3IgdGhlIHBhdHRlcm5zLiAgRXhhbXBsZTogPgorCisJOnN5bnRheCByZWdpb24geENvbmQgc3RhcnQ9L2lmXHMqKC9tcz1lKzEgZW5kPS8pL21lPXMtMQorCitUaGUgb2Zmc2V0IGZvciB0aGUgc3RhcnQgcGF0dGVybiBpcyAibXM9ZSsxIi4gICJtcyIgc3RhbmRzIGZvciBNYXRjaCBTdGFydC4KK1RoaXMgZGVmaW5lcyBhbiBvZmZzZXQgZm9yIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2guICBOb3JtYWxseSB0aGUgbWF0Y2ggc3RhcnRzCit3aGVyZSB0aGUgcGF0dGVybiBtYXRjaGVzLiAgImUrMSIgbWVhbnMgdGhhdCB0aGUgbWF0Y2ggbm93IHN0YXJ0cyBhdCB0aGUgZW5kCitvZiB0aGUgcGF0dGVybiBtYXRjaCwgYW5kIHRoZW4gb25lIGNoYXJhY3RlciBmdXJ0aGVyLgorICAgVGhlIG9mZnNldCBmb3IgdGhlIGVuZCBwYXR0ZXJuIGlzICJtZT1zLTEiLiAgIm1lIiBzdGFuZHMgZm9yIE1hdGNoIEVuZC4KKyJzLTEiIG1lYW5zIHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiBtYXRjaCBhbmQgdGhlbiBvbmUgY2hhcmFjdGVyIGJhY2suICBUaGUKK3Jlc3VsdCBpcyB0aGF0IGluIHRoaXMgdGV4dDoKKworCWlmIChmb28gPT0gYmFyKSB+CisKK09ubHkgdGhlIHRleHQgImZvbyA9PSBiYXIiIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYXMgeENvbmQuCisKK01vcmUgYWJvdXQgb2Zmc2V0cyBoZXJlOiB8OnN5bi1wYXR0ZXJuLW9mZnNldHwuCisKKworT05FTElORQorCitUaGUgIm9uZWxpbmUiIGFyZ3VtZW50IGluZGljYXRlcyB0aGF0IHRoZSByZWdpb24gZG9lcyBub3QgY3Jvc3MgYSBsaW5lCitib3VuZGFyeS4gIEZvciBleGFtcGxlOiA+CisKKwk6c3ludGF4IHJlZ2lvbiB4SWZUaGVuIHN0YXJ0PS9pZi8gZW5kPS90aGVuLyBvbmVsaW5lCisKK1RoaXMgZGVmaW5lcyBhIHJlZ2lvbiB0aGF0IHN0YXJ0cyBhdCAiaWYiIGFuZCBlbmRzIGF0ICJ0aGVuIi4gIEJ1dCBpZiB0aGVyZSBpcworbm8gInRoZW4iIGFmdGVyIHRoZSAiaWYiLCB0aGUgcmVnaW9uIGRvZXNuJ3QgbWF0Y2guCisKKwlOb3RlOgorCVdoZW4gdXNpbmcgIm9uZWxpbmUiIHRoZSByZWdpb24gZG9lc24ndCBzdGFydCBpZiB0aGUgZW5kIHBhdHRlcm4KKwlkb2Vzbid0IG1hdGNoIGluIHRoZSBzYW1lIGxpbmUuICBXaXRob3V0ICJvbmVsaW5lIiBWaW0gZG9lcyBfbm90XworCWNoZWNrIGlmIHRoZXJlIGlzIGEgbWF0Y2ggZm9yIHRoZSBlbmQgcGF0dGVybi4gIFRoZSByZWdpb24gc3RhcnRzIGV2ZW4KKwl3aGVuIHRoZSBlbmQgcGF0dGVybiBkb2Vzbid0IG1hdGNoIGluIHRoZSByZXN0IG9mIHRoZSBmaWxlLgorCisKK0NPTlRJTlVBVElPTiBMSU5FUyBBTkQgQVZPSURJTkcgVEhFTQorCitUaGluZ3Mgbm93IGJlY29tZSBhIGxpdHRsZSBtb3JlIGNvbXBsZXguICBMZXQncyBkZWZpbmUgYSBwcmVwcm9jZXNzb3IgbGluZS4KK1RoaXMgc3RhcnRzIHdpdGggYSAjIGluIHRoZSBmaXJzdCBjb2x1bW4gYW5kIGNvbnRpbnVlcyB1bnRpbCB0aGUgZW5kIG9mIHRoZQorbGluZS4gIEEgbGluZSB0aGF0IGVuZHMgd2l0aCBcIG1ha2VzIHRoZSBuZXh0IGxpbmUgYSBjb250aW51YXRpb24gbGluZS4gIFRoZQord2F5IHlvdSBoYW5kbGUgdGhpcyBpcyB0byBhbGxvdyB0aGUgc3ludGF4IGl0ZW0gdG8gY29udGFpbiBhIGNvbnRpbnVhdGlvbgorcGF0dGVybjogPgorCisJOnN5bnRheCByZWdpb24geFByZVByb2Mgc3RhcnQ9L14jLyBlbmQ9LyQvIGNvbnRhaW5zPXhMaW5lQ29udGludWUKKwk6c3ludGF4IG1hdGNoIHhMaW5lQ29udGludWUgIlxcJCIgY29udGFpbmVkCisKK0luIHRoaXMgY2FzZSwgYWx0aG91Z2ggeFByZVByb2Mgbm9ybWFsbHkgbWF0Y2hlcyBhIHNpbmdsZSBsaW5lLCB0aGUgZ3JvdXAKK2NvbnRhaW5lZCBpbiBpdCAobmFtZWx5IHhMaW5lQ29udGludWUpIGxldHMgaXQgZ28gb24gZm9yIG1vcmUgdGhhbiBvbmUgbGluZS4KK0ZvciBleGFtcGxlLCBpdCB3b3VsZCBtYXRjaCBib3RoIG9mIHRoZXNlIGxpbmVzOgorCisJI2RlZmluZSBTUEFNICBzcGFtIHNwYW0gc3BhbSBcIH4KKwkJCWJhY29uIGFuZCBzcGFtIH4KKworSW4gdGhpcyBjYXNlLCB0aGlzIGlzIHdoYXQgeW91IHdhbnQuICBJZiBpdCBpcyBub3Qgd2hhdCB5b3Ugd2FudCwgeW91IGNhbiBjYWxsCitmb3IgdGhlIHJlZ2lvbiB0byBiZSBvbiBhIHNpbmdsZSBsaW5lIGJ5IGFkZGluZyAiZXhjbHVkZW5sIiB0byB0aGUgY29udGFpbmVkCitwYXR0ZXJuLiAgRm9yIGV4YW1wbGUsIHlvdSB3YW50IHRvIGhpZ2hsaWdodCAiZW5kIiBpbiB4UHJlUHJvYywgYnV0IG9ubHkgYXQKK3RoZSBlbmQgb2YgdGhlIGxpbmUuICBUbyBhdm9pZCBtYWtpbmcgdGhlIHhQcmVQcm9jIGNvbnRpbnVlIG9uIHRoZSBuZXh0IGxpbmUsCitsaWtlIHhMaW5lQ29udGludWUgZG9lcywgdXNlICJleGNsdWRlbmwiIGxpa2UgdGhpczogPgorCisJOnN5bnRheCByZWdpb24geFByZVByb2Mgc3RhcnQ9L14jLyBlbmQ9LyQvCisJCVwgY29udGFpbnM9eExpbmVDb250aW51ZSx4UHJlUHJvY0VuZAorCTpzeW50YXggbWF0Y2ggeFByZVByb2NFbmQgZXhjbHVkZW5sIC9lbmQkLyBjb250YWluZWQKKwk6c3ludGF4IG1hdGNoIHhMaW5lQ29udGludWUgIlxcJCIgY29udGFpbmVkCisKKyJleGNsdWRlbmwiIG11c3QgYmUgcGxhY2VkIGJlZm9yZSB0aGUgcGF0dGVybi4gIFNpbmNlICJ4TGluZUNvbnRpbnVlIiBkb2Vzbid0CitoYXZlICJleGNsdWRlbmwiLCBhIG1hdGNoIHdpdGggaXQgd2lsbCBleHRlbmQgeFByZVByb2MgdG8gdGhlIG5leHQgbGluZSBhcworYmVmb3JlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC44KglDbHVzdGVycworCitPbmUgb2YgdGhlIHRoaW5ncyB5b3Ugd2lsbCBub3RpY2UgYXMgeW91IHN0YXJ0IHRvIHdyaXRlIGEgc3ludGF4IGZpbGUgaXMgdGhhdAoreW91IHdpbmQgdXAgZ2VuZXJhdGluZyBhIGxvdCBvZiBzeW50YXggZ3JvdXBzLiAgVmltIGVuYWJsZXMgeW91IHRvIGRlZmluZSBhCitjb2xsZWN0aW9uIG9mIHN5bnRheCBncm91cHMgY2FsbGVkIGEgY2x1c3Rlci4KKyAgIFN1cHBvc2UgeW91IGhhdmUgYSBsYW5ndWFnZSB0aGF0IGNvbnRhaW5zIGZvciBsb29wcywgaWYgc3RhdGVtZW50cywgd2hpbGUKK2xvb3BzLCBhbmQgZnVuY3Rpb25zLiAgRWFjaCBvZiB0aGVtIGNvbnRhaW5zIHRoZSBzYW1lIHN5bnRheCBlbGVtZW50czogbnVtYmVycworYW5kIGlkZW50aWZpZXJzLiAgWW91IGRlZmluZSB0aGVtIGxpa2UgdGhpczogPgorCisJOnN5bnRheCBtYXRjaCB4Rm9yIC9eZm9yLiovIGNvbnRhaW5zPXhOdW1iZXIseElkZW50CisJOnN5bnRheCBtYXRjaCB4SWYgL15pZi4qLyBjb250YWlucz14TnVtYmVyLHhJZGVudAorCTpzeW50YXggbWF0Y2ggeFdoaWxlIC9ed2hpbGUuKi8gY29udGFpbnM9eE51bWJlcix4SWRlbnQKKworWW91IGhhdmUgdG8gcmVwZWF0IHRoZSBzYW1lICJjb250YWlucz0iIGV2ZXJ5IHRpbWUuICBJZiB5b3Ugd2FudCB0byBhZGQKK2Fub3RoZXIgY29udGFpbmVkIGl0ZW0sIHlvdSBoYXZlIHRvIGFkZCBpdCB0aHJlZSB0aW1lcy4gIFN5bnRheCBjbHVzdGVycworc2ltcGxpZnkgdGhlc2UgZGVmaW5pdGlvbnMgYnkgZW5hYmxpbmcgeW91IHRvIGhhdmUgb25lIGNsdXN0ZXIgc3RhbmQgZm9yCitzZXZlcmFsIHN5bnRheCBncm91cHMuCisgICBUbyBkZWZpbmUgYSBjbHVzdGVyIGZvciB0aGUgdHdvIGl0ZW1zIHRoYXQgdGhlIHRocmVlIGdyb3VwcyBjb250YWluLCB1c2UKK3RoZSBmb2xsb3dpbmcgY29tbWFuZDogPgorCisJOnN5bnRheCBjbHVzdGVyIHhTdGF0ZSBjb250YWlucz14TnVtYmVyLHhJZGVudAorCitDbHVzdGVycyBhcmUgdXNlZCBpbnNpZGUgb3RoZXIgc3ludGF4IGl0ZW1zIGp1c3QgbGlrZSBhbnkgc3ludGF4IGdyb3VwLgorVGhlaXIgbmFtZXMgc3RhcnQgd2l0aCBALiAgVGh1cywgeW91IGNhbiBkZWZpbmUgdGhlIHRocmVlIGdyb3VwcyBsaWtlIHRoaXM6ID4KKworCTpzeW50YXggbWF0Y2ggeEZvciAvXmZvci4qLyBjb250YWlucz1AeFN0YXRlCisJOnN5bnRheCBtYXRjaCB4SWYgL15pZi4qLyBjb250YWlucz1AeFN0YXRlCisJOnN5bnRheCBtYXRjaCB4V2hpbGUgL153aGlsZS4qLyBjb250YWlucz1AeFN0YXRlCisKK1lvdSBjYW4gYWRkIG5ldyBncm91cCBuYW1lcyB0byB0aGlzIGNsdXN0ZXIgd2l0aCB0aGUgImFkZCIgYXJndW1lbnQ6ID4KKworCTpzeW50YXggY2x1c3RlciB4U3RhdGUgYWRkPXhTdHJpbmcKKworWW91IGNhbiByZW1vdmUgc3ludGF4IGdyb3VwcyBmcm9tIHRoaXMgbGlzdCBhcyB3ZWxsOiA+CisKKwk6c3ludGF4IGNsdXN0ZXIgeFN0YXRlIHJlbW92ZT14TnVtYmVyCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ0LjkqCUluY2x1ZGluZyBhbm90aGVyIHN5bnRheCBmaWxlCisKK1RoZSBDKysgbGFuZ3VhZ2Ugc3ludGF4IGlzIGEgc3VwZXJzZXQgb2YgdGhlIEMgbGFuZ3VhZ2UuICBCZWNhdXNlIHlvdSBkbyBub3QKK3dhbnQgdG8gd3JpdGUgdHdvIHN5bnRheCBmaWxlcywgeW91IGNhbiBoYXZlIHRoZSBDKysgc3ludGF4IGZpbGUgcmVhZCBpbiB0aGUKK29uZSBmb3IgQyBieSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ID4KKworCTpydW50aW1lISBzeW50YXgvYy52aW0KKworVGhlICI6cnVudGltZSEiIGNvbW1hbmQgc2VhcmNoZXMgJ3J1bnRpbWVwYXRoJyBmb3IgYWxsICJzeW50YXgvYy52aW0iIGZpbGVzLgorVGhpcyBtYWtlcyB0aGUgQyBzeW50YXggYmUgZGVmaW5lZCBsaWtlIGZvciBDIGZpbGVzLiAgSWYgeW91IGhhdmUgcmVwbGFjZWQgdGhlCitjLnZpbSBzeW50YXggZmlsZSwgb3IgYWRkZWQgaXRlbXMgd2l0aCBhbiBleHRyYSBmaWxlLCB0aGVzZSB3aWxsIGJlIGxvYWRlZCBhcword2VsbC4KKyAgIEFmdGVyIGxvYWRpbmcgdGhlIEMgc3ludGF4IGl0ZW1zIHRoZSBzcGVjaWZpYyBDKysgaXRlbXMgY2FuIGJlIGRlZmluZWQuCitGb3IgZXhhbXBsZSwgYWRkIGtleXdvcmRzIHRoYXQgYXJlIG5vdCB1c2VkIGluIEM6ID4KKworCTpzeW50YXgga2V5d29yZCBjcHBTdGF0ZW1lbnQJbmV3IGRlbGV0ZSB0aGlzIGZyaWVuZCB1c2luZworCitUaGlzIHdvcmtzIGp1c3QgbGlrZSBpbiBhbnkgb3RoZXIgc3ludGF4IGZpbGUuCisKK05vdyBjb25zaWRlciB0aGUgUGVybCBsYW5ndWFnZS4gIEl0IGNvbnNpc3RzIG9mIHR3byBkaXN0aW5jdCBwYXJ0czogYQorZG9jdW1lbnRhdGlvbiBzZWN0aW9uIGluIFBPRCBmb3JtYXQsIGFuZCBhIHByb2dyYW0gd3JpdHRlbiBpbiBQZXJsIGl0c2VsZi4KK1RoZSBQT0Qgc2VjdGlvbiBzdGFydHMgd2l0aCAiPWhlYWQiIGFuZCBlbmRzIHdpdGggIj1jdXQiLgorICAgWW91IHdhbnQgdG8gZGVmaW5lIHRoZSBQT0Qgc3ludGF4IGluIG9uZSBmaWxlLCBhbmQgdXNlIGl0IGZyb20gdGhlIFBlcmwKK3N5bnRheCBmaWxlLiAgVGhlICI6c3ludGF4IGluY2x1ZGUiIGNvbW1hbmQgcmVhZHMgaW4gYSBzeW50YXggZmlsZSBhbmQgc3RvcmVzCit0aGUgZWxlbWVudHMgaXQgZGVmaW5lZCBpbiBhIHN5bnRheCBjbHVzdGVyLiAgRm9yIFBlcmwsIHRoZSBzdGF0ZW1lbnRzIGFyZSBhcworZm9sbG93czogPgorCisJOnN5bnRheCBpbmNsdWRlIEBQb2QgPHNmaWxlPjpwOmgvcG9kLnZpbQorCTpzeW50YXggcmVnaW9uIHBlcmxQT0Qgc3RhcnQ9L149aGVhZC8gZW5kPS9ePWN1dC8gY29udGFpbnM9QFBvZAorCitXaGVuICI9aGVhZCIgaXMgZm91bmQgaW4gYSBQZXJsIGZpbGUsIHRoZSBwZXJsUE9EIHJlZ2lvbiBzdGFydHMuICBJbiB0aGlzCityZWdpb24gdGhlIEBQb2QgY2x1c3RlciBpcyBjb250YWluZWQuICBBbGwgdGhlIGl0ZW1zIGRlZmluZWQgYXMgdG9wLWxldmVsCitpdGVtcyBpbiB0aGUgcG9kLnZpbSBzeW50YXggZmlsZXMgd2lsbCBtYXRjaCBoZXJlLiAgV2hlbiAiPWN1dCIgaXMgZm91bmQsIHRoZQorcmVnaW9uIGVuZHMgYW5kIHdlIGdvIGJhY2sgdG8gdGhlIGl0ZW1zIGRlZmluZWQgaW4gdGhlIFBlcmwgZmlsZS4KKyAgIFRoZSAiOnN5bnRheCBpbmNsdWRlIiBjb21tYW5kIGlzIGNsZXZlciBlbm91Z2ggdG8gaWdub3JlIGEgIjpzeW50YXggY2xlYXIiCitjb21tYW5kIGluIHRoZSBpbmNsdWRlZCBmaWxlLiAgQW5kIGFuIGFyZ3VtZW50IHN1Y2ggYXMgImNvbnRhaW5zPUFMTCIgd2lsbAorb25seSBjb250YWluIGl0ZW1zIGRlZmluZWQgaW4gdGhlIGluY2x1ZGVkIGZpbGUsIG5vdCBpbiB0aGUgZmlsZSB0aGF0IGluY2x1ZGVzCitpdC4KKyAgIFRoZSAiPHNmaWxlPjpwOmgvIiBwYXJ0IHVzZXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZSAoPHNmaWxlPiksCitleHBhbmRzIGl0IHRvIGEgZnVsbCBwYXRoICg6cCkgYW5kIHRoZW4gdGFrZXMgdGhlIGhlYWQgKDpoKS4gIFRoaXMgcmVzdWx0cyBpbgordGhlIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBmaWxlLiAgVGhpcyBjYXVzZXMgdGhlIHBvZC52aW0gZmlsZSBpbiB0aGUgc2FtZQorZGlyZWN0b3J5IHRvIGJlIGluY2x1ZGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC4xMCoJU3luY2hyb25pemluZworCitDb21waWxlcnMgaGF2ZSBpdCBlYXN5LiAgVGhleSBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZSBhbmQgcGFyc2UgaXQKK3N0cmFpZ2h0IHRocm91Z2guICBWaW0gZG9lcyBub3QgaGF2ZSBpdCBzbyBlYXN5LiAgSXQgbXVzdCBzdGFydCBpbiB0aGUgbWlkZGxlLAord2hlcmUgdGhlIGVkaXRpbmcgaXMgYmVpbmcgZG9uZS4gIFNvIGhvdyBkb2VzIGl0IHRlbGwgd2hlcmUgaXQgaXM/CisgICBUaGUgc2VjcmV0IGlzIHRoZSAiOnN5bnRheCBzeW5jIiBjb21tYW5kLiAgVGhpcyB0ZWxscyBWaW0gaG93IHRvIGZpZ3VyZSBvdXQKK3doZXJlIGl0IGlzLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscyBWaW0gdG8gc2NhbiBiYWNrd2FyZAorZm9yIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgQy1zdHlsZSBjb21tZW50IGFuZCBiZWdpbiBzeW50YXggY29sb3JpbmcgZnJvbQordGhlcmU6ID4KKworCTpzeW50YXggc3luYyBjY29tbWVudAorCitZb3UgY2FuIHR1bmUgdGhpcyBwcm9jZXNzaW5nIHdpdGggc29tZSBhcmd1bWVudHMuICBUaGUgIm1pbmxpbmVzIiBhcmd1bWVudAordGVsbHMgVmltIHRoZSBtaW5pbXVtIG51bWJlciBvZiBsaW5lcyB0byBsb29rIGJhY2t3YXJkLCBhbmQgIm1heGxpbmVzIiB0ZWxscwordGhlIGVkaXRvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gc2Nhbi4KKyAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMgVmltIHRvIGxvb2sgYXQgbGVhc3QgMTAgbGluZXMKK2JlZm9yZSB0aGUgdG9wIG9mIHRoZSBzY3JlZW46ID4KKworCTpzeW50YXggc3luYyBjY29tbWVudCBtaW5saW5lcz0xMCBtYXhsaW5lcz01MDAKKworSWYgaXQgY2Fubm90IGZpZ3VyZSBvdXQgd2hlcmUgaXQgaXMgaW4gdGhhdCBzcGFjZSwgaXQgc3RhcnRzIGxvb2tpbmcgZmFydGhlcgorYW5kIGZhcnRoZXIgYmFjayB1bnRpbCBpdCBmaWd1cmVzIG91dCB3aGF0IHRvIGRvLiAgQnV0IGl0IGxvb2tzIG5vIGZhcnRoZXIKK2JhY2sgdGhhbiA1MDAgbGluZXMuIChBIGxhcmdlICJtYXhsaW5lcyIgc2xvd3MgZG93biBwcm9jZXNzaW5nLiAgQSBzbWFsbCBvbmUKK21pZ2h0IGNhdXNlIHN5bmNocm9uaXphdGlvbiB0byBmYWlsLikKKyAgIFRvIG1ha2Ugc3luY2hyb25pemluZyBnbyBhIGJpdCBmYXN0ZXIsIHRlbGwgVmltIHdoaWNoIHN5bnRheCBpdGVtcyBjYW4gYmUKK3NraXBwZWQuICBFdmVyeSBtYXRjaCBhbmQgcmVnaW9uIHRoYXQgb25seSBuZWVkcyB0byBiZSB1c2VkIHdoZW4gYWN0dWFsbHkKK2Rpc3BsYXlpbmcgdGV4dCBjYW4gYmUgZ2l2ZW4gdGhlICJkaXNwbGF5IiBhcmd1bWVudC4KKyAgIEJ5IGRlZmF1bHQsIHRoZSBjb21tZW50IHRvIGJlIGZvdW5kIHdpbGwgYmUgY29sb3JlZCBhcyBwYXJ0IG9mIHRoZSBDb21tZW50CitzeW50YXggZ3JvdXAuICBJZiB5b3Ugd2FudCB0byBjb2xvciB0aGluZ3MgYW5vdGhlciB3YXksIHlvdSBjYW4gc3BlY2lmeSBhCitkaWZmZXJlbnQgc3ludGF4IGdyb3VwOiA+CisKKwk6c3ludGF4IHN5bmMgY2NvbW1lbnQgeEFsdENvbW1lbnQKKworSWYgeW91ciBwcm9ncmFtbWluZyBsYW5ndWFnZSBkb2VzIG5vdCBoYXZlIEMtc3R5bGUgY29tbWVudHMgaW4gaXQsIHlvdSBjYW4gdHJ5Cithbm90aGVyIG1ldGhvZCBvZiBzeW5jaHJvbml6YXRpb24uICBUaGUgc2ltcGxlc3Qgd2F5IGlzIHRvIHRlbGwgVmltIHRvIHNwYWNlCitiYWNrIGEgbnVtYmVyIG9mIGxpbmVzIGFuZCB0cnkgdG8gZmlndXJlIG91dCB0aGluZ3MgZnJvbSB0aGVyZS4gIFRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgdGVsbHMgVmltIHRvIGdvIGJhY2sgMTUwIGxpbmVzIGFuZCBzdGFydCBwYXJzaW5nIGZyb20gdGhlcmU6ID4KKworCTpzeW50YXggc3luYyBtaW5saW5lcz0xNTAKKworQSBsYXJnZSAibWlubGluZXMiIHZhbHVlIGNhbiBtYWtlIFZpbSBzbG93ZXIsIGVzcGVjaWFsbHkgd2hlbiBzY3JvbGxpbmcKK2JhY2t3YXJkcyBpbiB0aGUgZmlsZS4KKyAgIEZpbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBhIHN5bnRheCBncm91cCB0byBsb29rIGZvciBieSB1c2luZyB0aGlzIGNvbW1hbmQ6Cis+CisJOnN5bnRheCBzeW5jIG1hdGNoIHtzeW5jLWdyb3VwLW5hbWV9CisJCVwgZ3JvdXBoZXJlIHtncm91cC1uYW1lfSB7cGF0dGVybn0KKworVGhpcyB0ZWxscyBWaW0gdGhhdCB3aGVuIGl0IHNlZXMge3BhdHRlcm59IHRoZSBzeW50YXggZ3JvdXAgbmFtZWQge2dyb3VwLW5hbWV9CitiZWdpbnMganVzdCBhZnRlciB0aGUgcGF0dGVybiBnaXZlbi4gIFRoZSB7c3luYy1ncm91cC1uYW1lfSBpcyB1c2VkIHRvIGdpdmUgYQorbmFtZSB0byB0aGlzIHN5bmNocm9uaXphdGlvbiBzcGVjaWZpY2F0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBzaCBzY3JpcHRpbmcKK2xhbmd1YWdlIGJlZ2lucyBhbiBpZiBzdGF0ZW1lbnQgd2l0aCAiaWYiIGFuZCBlbmRzIGl0IHdpdGggImZpIjoKKworCWlmIFsgLS1mIGZpbGUudHh0IF0gOyB0aGVuIH4KKwkJZWNobyAiRmlsZSBleGlzdHMiIH4KKwlmaSB+CisKK1RvIGRlZmluZSBhICJncm91cGhlcmUiIGRpcmVjdGl2ZSBmb3IgdGhpcyBzeW50YXgsIHlvdSB1c2UgdGhlIGZvbGxvd2luZworY29tbWFuZDogPgorCisJOnN5bnRheCBzeW5jIG1hdGNoIHNoSWZTeW5jIGdyb3VwaGVyZSBzaElmICJcPGlmXD4iCisKK1RoZSAiZ3JvdXB0aGVyZSIgYXJndW1lbnQgdGVsbHMgVmltIHRoYXQgdGhlIHBhdHRlcm4gZW5kcyBhIGdyb3VwLiAgRm9yCitleGFtcGxlLCB0aGUgZW5kIG9mIHRoZSBpZi9maSBncm91cCBpcyBhcyBmb2xsb3dzOiA+CisKKwk6c3ludGF4IHN5bmMgbWF0Y2ggc2hJZlN5bmMgZ3JvdXB0aGVyZSBOT05FICJcPGZpXD4iCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIE5PTkUgdGVsbHMgVmltIHRoYXQgeW91IGFyZSBub3QgaW4gYW55IHNwZWNpYWwgc3ludGF4CityZWdpb24uICBJbiBwYXJ0aWN1bGFyLCB5b3UgYXJlIG5vdCBpbnNpZGUgYW4gaWYgYmxvY2suCisKK1lvdSBhbHNvIGNhbiBkZWZpbmUgbWF0Y2hlcyBhbmQgcmVnaW9ucyB0aGF0IGFyZSB3aXRoIG5vICJncm91cGhlcmUiIG9yCisiZ3JvdXB0aGVyZSIgYXJndW1lbnRzLiAgVGhlc2UgZ3JvdXBzIGFyZSBmb3Igc3ludGF4IGdyb3VwcyBza2lwcGVkIGR1cmluZworc3luY2hyb25pemF0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2tpcHMgb3ZlciBhbnl0aGluZyBpbnNpZGUge30sCitldmVuIGlmIGl0IHdvdWxkIG5vcm1hbGx5IG1hdGNoIGFub3RoZXIgc3luY2hyb25pemF0aW9uIG1ldGhvZDogPgorCisJOnN5bnRheCBzeW5jIG1hdGNoIHhTcGVjaWFsIC97Lip9LworCitNb3JlIGFib3V0IHN5bmNocm9uaXppbmcgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWw6IHw6c3luLXN5bmN8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NC4xMSoJSW5zdGFsbGluZyBhIHN5bnRheCBmaWxlCisKK1doZW4geW91ciBuZXcgc3ludGF4IGZpbGUgaXMgcmVhZHkgdG8gYmUgdXNlZCwgZHJvcCBpdCBpbiBhICJzeW50YXgiIGRpcmVjdG9yeQoraW4gJ3J1bnRpbWVwYXRoJy4gIEZvciBVbml4IHRoYXQgd291bGQgYmUgIn4vLnZpbS9zeW50YXgiLgorICBUaGUgbmFtZSBvZiB0aGUgc3ludGF4IGZpbGUgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmlsZSB0eXBlLCB3aXRoICIudmltIgorYWRkZWQuICBUaHVzIGZvciB0aGUgeCBsYW5ndWFnZSwgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgZmlsZSB3b3VsZCBiZToKKworCX4vLnZpbS9zeW50YXgveC52aW0gfgorCitZb3UgbXVzdCBhbHNvIG1ha2UgdGhlIGZpbGUgdHlwZSBiZSByZWNvZ25pemVkLiAgU2VlIHw0My4yfC4KKworSWYgeW91ciBmaWxlIHdvcmtzIHdlbGwsIHlvdSBtaWdodCB3YW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIG90aGVyIFZpbQordXNlcnMuICBGaXJzdCByZWFkIHRoZSBuZXh0IHNlY3Rpb24gdG8gbWFrZSBzdXJlIHlvdXIgZmlsZSB3b3JrcyB3ZWxsIGZvcgorb3RoZXJzLiAgVGhlbiBlLW1haWwgaXQgdG8gdGhlIFZpbSBtYWludGFpbmVyOiA8bWFpbnRhaW5lckB2aW0ub3JnPi4gIEFsc28KK2V4cGxhaW4gaG93IHRoZSBmaWxldHlwZSBjYW4gYmUgZGV0ZWN0ZWQuICBXaXRoIGEgYml0IG9mIGx1Y2sgeW91ciBmaWxlIHdpbGwKK2JlIGluY2x1ZGVkIGluIHRoZSBuZXh0IFZpbSB2ZXJzaW9uIQorCisKK0FERElORyBUTyBBTiBFWElTVElORyBTWU5UQVggRklMRQorCitXZSB3ZXJlIGFzc3VtaW5nIHlvdSB3ZXJlIGFkZGluZyBhIGNvbXBsZXRlbHkgbmV3IHN5bnRheCBmaWxlLiAgV2hlbiBhbiBleGlzdGluZworc3ludGF4IGZpbGUgd29ya3MsIGJ1dCBpcyBtaXNzaW5nIHNvbWUgaXRlbXMsIHlvdSBjYW4gYWRkIGl0ZW1zIGluIGEgc2VwYXJhdGUKK2ZpbGUuICBUaGF0IGF2b2lkcyBjaGFuZ2luZyB0aGUgZGlzdHJpYnV0ZWQgc3ludGF4IGZpbGUsIHdoaWNoIHdpbGwgYmUgbG9zdAord2hlbiBpbnN0YWxsaW5nIGEgbmV3IHZlcnNpb24gb2YgVmltLgorICAgV3JpdGUgc3ludGF4IGNvbW1hbmRzIGluIHlvdXIgZmlsZSwgcG9zc2libHkgdXNpbmcgZ3JvdXAgbmFtZXMgZnJvbSB0aGUKK2V4aXN0aW5nIHN5bnRheC4gIEZvciBleGFtcGxlLCB0byBhZGQgbmV3IHZhcmlhYmxlIHR5cGVzIHRvIHRoZSBDIHN5bnRheCBmaWxlOgorPgorCTpzeW50YXgga2V5d29yZCBjVHlwZSBvZmZfdCB1aW50CisKK1dyaXRlIHRoZSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgb3JpZ2luYWwgc3ludGF4IGZpbGUuICBJbiB0aGlzIGNhc2UKKyJjLnZpbSIuICBQbGFjZSBpdCBpbiBhIGRpcmVjdG9yeSBuZWFyIHRoZSBlbmQgb2YgJ3J1bnRpbWVwYXRoJy4gIFRoaXMgbWFrZXMKK2l0IGxvYWRlZCBhZnRlciB0aGUgb3JpZ2luYWwgc3ludGF4IGZpbGUuICBGb3IgVW5peCB0aGlzIHdvdWxkIGJlOgorCisJfi8udmltL2FmdGVyL3N5bnRheC9jLnZpbSB+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ0LjEyKglQb3J0YWJsZSBzeW50YXggZmlsZSBsYXlvdXQKKworV291bGRuJ3QgaXQgYmUgbmljZSBpZiBhbGwgVmltIHVzZXJzIGV4Y2hhbmdlIHN5bnRheCBmaWxlcz8gIFRvIG1ha2UgdGhpcworcG9zc2libGUsIHRoZSBzeW50YXggZmlsZSBtdXN0IGZvbGxvdyBhIGZldyBndWlkZWxpbmVzLgorCitTdGFydCB3aXRoIGEgaGVhZGVyIHRoYXQgZXhwbGFpbnMgd2hhdCB0aGUgc3ludGF4IGZpbGUgaXMgZm9yLCB3aG8gbWFpbnRhaW5zCitpdCBhbmQgd2hlbiBpdCB3YXMgbGFzdCB1cGRhdGVkLiAgRG9uJ3QgaW5jbHVkZSB0b28gbXVjaCBpbmZvcm1hdGlvbiBhYm91dAorY2hhbmdlcyBoaXN0b3J5LCBub3QgbWFueSBwZW9wbGUgd2lsbCByZWFkIGl0LiAgRXhhbXBsZTogPgorCisJIiBWaW0gc3ludGF4IGZpbGUKKwkiIExhbmd1YWdlOglDCisJIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorCSIgTGFzdCBDaGFuZ2U6CTIwMDEgSnVuIDE4CisJIiBSZW1hcms6CUluY2x1ZGVkIGJ5IHRoZSBDKysgc3ludGF4LgorCitVc2UgdGhlIHNhbWUgbGF5b3V0IGFzIHRoZSBvdGhlciBzeW50YXggZmlsZXMuICBVc2luZyBhbiBleGlzdGluZyBzeW50YXggZmlsZQorYXMgYW4gZXhhbXBsZSB3aWxsIHNhdmUgeW91IGEgbG90IG9mIHRpbWUuCisKK0Nob29zZSBhIGdvb2QsIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHlvdXIgc3ludGF4IGZpbGUuICBVc2UgbG93ZXJjYXNlIGxldHRlcnMKK2FuZCBkaWdpdHMuICBEb24ndCBtYWtlIGl0IHRvbyBsb25nLCBpdCBpcyB1c2VkIGluIG1hbnkgcGxhY2VzOiBUaGUgbmFtZSBvZgordGhlIHN5bnRheCBmaWxlICJuYW1lLnZpbSIsICdmaWxldHlwZScsIGI6Y3VycmVudF9zeW50YXggdGhlIHN0YXJ0IG9mIGVhY2gKK3N5bnRheCBncm91cCAobmFtZVR5cGUsIG5hbWVTdGF0ZW1lbnQsIG5hbWVTdHJpbmcsIGV0YykuCisKK1N0YXJ0IHdpdGggYSBjaGVjayBmb3IgImI6Y3VycmVudF9zeW50YXgiLiAgSWYgaXQgaXMgZGVmaW5lZCwgc29tZSBvdGhlcgorc3ludGF4IGZpbGUsIGVhcmxpZXIgaW4gJ3J1bnRpbWVwYXRoJyB3YXMgYWxyZWFkeSBsb2FkZWQuICBUbyBiZSBjb21wYXRpYmxlCit3aXRoIFZpbSA1LjggdXNlOiA+CisKKwlpZiB2ZXJzaW9uIDwgNjAwCisJICBzeW50YXggY2xlYXIKKwllbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKwkgIGZpbmlzaAorCWVuZGlmCisKK1NldCAiYjpjdXJyZW50X3N5bnRheCIgdG8gdGhlIG5hbWUgb2YgdGhlIHN5bnRheCBhdCB0aGUgZW5kLiAgRG9uJ3QgZm9yZ2V0Cit0aGF0IGluY2x1ZGVkIGZpbGVzIGRvIHRoaXMgdG9vLCB5b3UgbWlnaHQgaGF2ZSB0byByZXNldCAiYjpjdXJyZW50X3N5bnRheCIgaWYKK3lvdSBpbmNsdWRlIHR3byBmaWxlcy4KKworSWYgeW91IHdhbnQgeW91ciBzeW50YXggZmlsZSB0byB3b3JrIHdpdGggVmltIDUueCwgYWRkIGEgY2hlY2sgZm9yIHY6dmVyc2lvbi4KK1NlZSB5YWNjLnZpbSBmb3IgYW4gZXhhbXBsZS4KKworRG8gbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBhIHVzZXIgcHJlZmVyZW5jZS4gIERvbid0IHNldCAndGFic3RvcCcsCisnZXhwYW5kdGFiJywgZXRjLiAgVGhlc2UgYmVsb25nIGluIGEgZmlsZXR5cGUgcGx1Z2luLgorCitEbyBub3QgaW5jbHVkZSBtYXBwaW5ncyBvciBhYmJyZXZpYXRpb25zLiAgT25seSBpbmNsdWRlIHNldHRpbmcgJ2lza2V5d29yZCcgaWYKK2l0IGlzIHJlYWxseSBuZWNlc3NhcnkgZm9yIHJlY29nbml6aW5nIGtleXdvcmRzLgorCitBdm9pZCB1c2luZyBzcGVjaWZpYyBjb2xvcnMuICBMaW5rIHRvIHRoZSBzdGFuZGFyZCBoaWdobGlnaHQgZ3JvdXBzIHdoZW5ldmVyCitwb3NzaWJsZS4gIERvbid0IGZvcmdldCB0aGF0IHNvbWUgcGVvcGxlIHVzZSBhIGRpZmZlcmVudCBiYWNrZ3JvdW5kIGNvbG9yLCBvcgoraGF2ZSBvbmx5IGVpZ2h0IGNvbG9ycyBhdmFpbGFibGUuCitGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBWaW0gNS44IHRoaXMgY29uc3RydWN0aW9uIGlzIHVzZWQ6ID4KKworCWlmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9jX3N5bl9pbml0cyIpCisJICBpZiB2ZXJzaW9uIDwgNTA4CisJICAgIGxldCBkaWRfY19zeW5faW5pdHMgPSAxCisJICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisJICBlbHNlCisJICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGRlZiBsaW5rIDxhcmdzPgorCSAgZW5kaWYKKworCSAgSGlMaW5rIG5hbWVTdHJpbmcJU3RyaW5nCisJICBIaUxpbmsgbmFtZU51bWJlcglOdW1iZXIKKwkgIC4uLiBldGMgLi4uCisKKwkgIGRlbGNvbW1hbmQgSGlMaW5rCisJZW5kaWYKKworQWRkIHRoZSAiZGlzcGxheSIgYXJndW1lbnQgdG8gaXRlbXMgdGhhdCBhcmUgbm90IHVzZWQgd2hlbiBzeW5jaW5nLCB0byBzcGVlZAordXAgc2Nyb2xsaW5nIGJhY2t3YXJkcyBhbmQgQ1RSTC1MLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzQ1LnR4dHwgIFNlbGVjdCB5b3VyIGxhbmd1YWdlCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzQ1LnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl80NS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0YjA0MAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl80NS50eHQKQEAgLTAsMCArMSw0MTkgQEAKKyp1c3JfNDUudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDgKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCSAgICAgU2VsZWN0IHlvdXIgbGFuZ3VhZ2UKKworCitUaGUgbWVzc2FnZXMgaW4gVmltIGNhbiBiZSBnaXZlbiBpbiBzZXZlcmFsIGxhbmd1YWdlcy4gIFRoaXMgY2hhcHRlciBleHBsYWlucworaG93IHRvIGNoYW5nZSB3aGljaCBvbmUgaXMgdXNlZC4gIEFsc28sIHRoZSBkaWZmZXJlbnQgd2F5cyB0byB3b3JrIHdpdGggZmlsZXMKK2luIHZhcmlvdXMgbGFuZ3VhZ2VzIGlzIGV4cGxhaW5lZC4KKworfDQ1LjF8CUxhbmd1YWdlIGZvciBNZXNzYWdlcworfDQ1LjJ8CUxhbmd1YWdlIGZvciBNZW51cworfDQ1LjN8CVVzaW5nIGFub3RoZXIgZW5jb2RpbmcKK3w0NS40fAlFZGl0aW5nIGZpbGVzIHdpdGggYSBkaWZmZXJlbnQgZW5jb2RpbmcKK3w0NS41fAlFbnRlcmluZyBsYW5ndWFnZSB0ZXh0CisKKyAgICAgTmV4dCBjaGFwdGVyOiB8dXNyXzkwLnR4dHwgIEluc3RhbGxpbmcgVmltCisgUHJldmlvdXMgY2hhcHRlcjogfHVzcl80NC50eHR8ICBZb3VyIG93biBzeW50YXggaGlnaGxpZ2h0ZWQKK1RhYmxlIG9mIGNvbnRlbnRzOiB8dXNyX3RvYy50eHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjQ1LjEqCUxhbmd1YWdlIGZvciBNZXNzYWdlcworCitXaGVuIHlvdSBzdGFydCBWaW0sIGl0IGNoZWNrcyB0aGUgZW52aXJvbm1lbnQgdG8gZmluZCBvdXQgd2hhdCBsYW5ndWFnZSB5b3UKK2FyZSB1c2luZy4gIE1vc3RseSB0aGlzIHNob3VsZCB3b3JrIGZpbmUsIGFuZCB5b3UgZ2V0IHRoZSBtZXNzYWdlcyBpbiB5b3VyCitsYW5ndWFnZSAoaWYgdGhleSBhcmUgYXZhaWxhYmxlKS4gIFRvIHNlZSB3aGF0IHRoZSBjdXJyZW50IGxhbmd1YWdlIGlzLCB1c2UKK3RoaXMgY29tbWFuZDogPgorCisJOmxhbmd1YWdlCisKK0lmIGl0IHJlcGxpZXMgd2l0aCAiQyIsIHRoaXMgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYmVpbmcgdXNlZCwgd2hpY2ggaXMKK0VuZ2xpc2guCisKKwlOb3RlOgorCVVzaW5nIGRpZmZlcmVudCBsYW5ndWFnZXMgb25seSB3b3JrcyB3aGVuIFZpbSB3YXMgY29tcGlsZWQgdG8gaGFuZGxlCisJaXQuICBUbyBmaW5kIG91dCBpZiBpdCB3b3JrcywgdXNlIHRoZSAiOnZlcnNpb24iIGNvbW1hbmQgYW5kIGNoZWNrIHRoZQorCW91dHB1dCBmb3IgIitnZXR0ZXh0IiBhbmQgIittdWx0aV9sYW5nIi4gIElmIHRoZXkgYXJlIHRoZXJlLCB5b3UgYXJlCisJT0suICBJZiB5b3Ugc2VlICItZ2V0dGV4dCIgb3IgIi1tdWx0aV9sYW5nIiB5b3Ugd2lsbCBoYXZlIHRvIGZpbmQKKwlhbm90aGVyIFZpbS4KKworV2hhdCBpZiB5b3Ugd291bGQgbGlrZSB5b3VyIG1lc3NhZ2VzIGluIGEgZGlmZmVyZW50IGxhbmd1YWdlPyAgVGhlcmUgYXJlCitzZXZlcmFsIHdheXMuICBXaGljaCBvbmUgeW91IHNob3VsZCB1c2UgZGVwZW5kcyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHlvdXIKK3N5c3RlbS4KKyAgIFRoZSBmaXJzdCB3YXkgaXMgdG8gc2V0IHRoZSBlbnZpcm9ubWVudCB0byB0aGUgZGVzaXJlZCBsYW5ndWFnZSBiZWZvcmUKK3N0YXJ0aW5nIFZpbS4gIEV4YW1wbGUgZm9yIFVuaXg6ID4KKworCWVudiBMQU5HPWRlX0RFLklTT184ODU5LTEgIHZpbQorCitUaGlzIG9ubHkgd29ya3MgaWYgdGhlIGxhbmd1YWdlIGlzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbS4gIFRoZSBhZHZhbnRhZ2UgaXMKK3RoYXQgYWxsIHRoZSBHVUkgbWVzc2FnZXMgYW5kIHRoaW5ncyBpbiBsaWJyYXJpZXMgd2lsbCB1c2UgdGhlIHJpZ2h0IGxhbmd1YWdlCithcyB3ZWxsLiAgQSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgbXVzdCBkbyB0aGlzIGJlZm9yZSBzdGFydGluZyBWaW0uICBJZiB5b3UKK3dhbnQgdG8gY2hhbmdlIGxhbmd1YWdlIHdoaWxlIFZpbSBpcyBydW5uaW5nLCB5b3UgY2FuIHVzZSB0aGUgc2Vjb25kIG1ldGhvZDogPgorCisJOmxhbmd1YWdlIGZyX0ZSLklTT184ODU5LTEKKworVGhpcyB3YXkgeW91IGNhbiB0cnkgb3V0IHNldmVyYWwgbmFtZXMgZm9yIHlvdXIgbGFuZ3VhZ2UuICBZb3Ugd2lsbCBnZXQgYW4KK2Vycm9yIG1lc3NhZ2Ugd2hlbiBpdCdzIG5vdCBzdXBwb3J0ZWQgb24geW91ciBzeXN0ZW0uICBZb3UgZG9uJ3QgZ2V0IGFuIGVycm9yCit3aGVuIHRyYW5zbGF0ZWQgbWVzc2FnZXMgYXJlIG5vdCBhdmFpbGFibGUuICBWaW0gd2lsbCBzaWxlbnRseSBmYWxsIGJhY2sgdG8KK3VzaW5nIEVuZ2xpc2guCisgICBUbyBmaW5kIG91dCB3aGljaCBsYW5ndWFnZXMgYXJlIHN1cHBvcnRlZCBvbiB5b3VyIHN5c3RlbSwgZmluZCB0aGUKK2RpcmVjdG9yeSB3aGVyZSB0aGV5IGFyZSBsaXN0ZWQuICBPbiBteSBzeXN0ZW0gaXQgaXMgIi91c3Ivc2hhcmUvbG9jYWxlIi4gIE9uCitzb21lIHN5c3RlbXMgaXQncyBpbiAiL3Vzci9saWIvbG9jYWxlIi4gIFRoZSBtYW51YWwgcGFnZSBmb3IgInNldGxvY2FsZSIKK3Nob3VsZCBnaXZlIHlvdSBhIGhpbnQgd2hlcmUgaXQgaXMgZm91bmQgb24geW91ciBzeXN0ZW0uCisgICBCZSBjYXJlZnVsIHRvIHR5cGUgdGhlIG5hbWUgZXhhY3RseSBhcyBpdCBzaG91bGQgYmUuICBVcHBlciBhbmQgbG93ZXJjYXNlCittYXR0ZXIsIGFuZCB0aGUgJy0nIGFuZCAnXycgY2hhcmFjdGVycyBhcmUgZWFzaWx5IGNvbmZ1c2VkLgorCitZb3UgY2FuIGFsc28gc2V0IHRoZSBsYW5ndWFnZSBzZXBhcmF0ZWx5IGZvciBtZXNzYWdlcywgZWRpdGVkIHRleHQgYW5kIHRoZQordGltZSBmb3JtYXQuICBTZWUgfDpsYW5ndWFnZXwuCisKKworRE8tSVQtWU9VUlNFTEYgTUVTU0FHRSBUUkFOU0xBVElPTgorCitJZiB0cmFuc2xhdGVkIG1lc3NhZ2VzIGFyZSBub3QgYXZhaWxhYmxlIGZvciB5b3VyIGxhbmd1YWdlLCB5b3UgY291bGQgd3JpdGUKK3RoZW0geW91cnNlbGYuICBUbyBkbyB0aGlzLCBnZXQgdGhlIHNvdXJjZSBjb2RlIGZvciBWaW0gYW5kIHRoZSBHTlUgZ2V0dGV4dAorcGFja2FnZS4gIEFmdGVyIHVucGFja2luZyB0aGUgc291cmNlcywgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUKK2RpcmVjdG9yeSBzcmMvcG8vUkVBRE1FLnR4dC4KKyAgIEl0J3Mgbm90IHRvbyBkaWZmaWN1bHQgdG8gZG8gdGhlIHRyYW5zbGF0aW9uLiAgWW91IGRvbid0IG5lZWQgdG8gYmUgYQorcHJvZ3JhbW1lci4gIFlvdSBtdXN0IGtub3cgYm90aCBFbmdsaXNoIGFuZCB0aGUgbGFuZ3VhZ2UgeW91IGFyZSB0cmFuc2xhdGluZwordG8sIG9mIGNvdXJzZS4KKyAgIFdoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgdHJhbnNsYXRpb24sIGNvbnNpZGVyIG1ha2luZyBpdCBhdmFpbGFibGUKK3RvIG90aGVycy4gIFVwbG9hZCBpdCBhdCB2aW0tb25saW5lIChodHRwOi8vdmltLnNmLm5ldCkgb3IgZS1tYWlsIGl0IHRvCit0aGUgVmltIG1haW50YWluZXIgPG1haW50YWluZXJAdmltLm9yZz4uICBPciBib3RoLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo0NS4yKglMYW5ndWFnZSBmb3IgTWVudXMKKworVGhlIGRlZmF1bHQgbWVudXMgYXJlIGluIEVuZ2xpc2guICBUbyBiZSBhYmxlIHRvIHVzZSB5b3VyIGxvY2FsIGxhbmd1YWdlLCB0aGV5CittdXN0IGJlIHRyYW5zbGF0ZWQuICBOb3JtYWxseSB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSBmb3IgeW91IGlmIHRoZQorZW52aXJvbm1lbnQgaXMgc2V0IGZvciB5b3VyIGxhbmd1YWdlLCBqdXN0IGxpa2Ugd2l0aCBtZXNzYWdlcy4gIFlvdSBkb24ndCBuZWVkCit0byBkbyBhbnl0aGluZyBleHRyYSBmb3IgdGhpcy4gIEJ1dCBpdCBvbmx5IHdvcmtzIGlmIHRyYW5zbGF0aW9ucyBmb3IgdGhlCitsYW5ndWFnZSBhcmUgYXZhaWxhYmxlLgorICAgU3VwcG9zZSB5b3UgYXJlIGluIEdlcm1hbnksIHdpdGggdGhlIGxhbmd1YWdlIHNldCB0byBHZXJtYW4sIGJ1dCBwcmVmZXIgdG8KK3VzZSAiRmlsZSIgaW5zdGVhZCBvZiAiRGF0ZWkiLiAgWW91IGNhbiBzd2l0Y2ggYmFjayB0byB1c2luZyB0aGUgRW5nbGlzaCBtZW51cwordGhpcyB3YXk6ID4KKworCTpzZXQgbGFuZ21lbnU9bm9uZQorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBsYW5ndWFnZTogPgorCisJOnNldCBsYW5nbWVudT1ubF9OTC5JU09fODg1OS0xCisKK0xpa2UgYWJvdmUsIGRpZmZlcmVuY2VzIGJldHdlZW4gIi0iIGFuZCAiXyIgbWF0dGVyLiAgSG93ZXZlciwgdXBwZXIvbG93ZXJjYXNlCitkaWZmZXJlbmNlcyBhcmUgaWdub3JlZCBoZXJlLgorICAgVGhlICdsYW5nbWVudScgb3B0aW9uIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgbWVudXMgYXJlIGxvYWRlZC4gIE9uY2UgdGhlCittZW51cyBoYXZlIGJlZW4gZGVmaW5lZCBjaGFuZ2luZyAnbGFuZ21lbnUnIGhhcyBubyBkaXJlY3QgZWZmZWN0LiAgVGhlcmVmb3JlLAorcHV0IHRoZSBjb21tYW5kIHRvIHNldCAnbGFuZ21lbnUnIGluIHlvdXIgdmltcmMgZmlsZS4KKyAgIElmIHlvdSByZWFsbHkgd2FudCB0byBzd2l0Y2ggbWVudSBsYW5ndWFnZSB3aGlsZSBydW5uaW5nIFZpbSwgeW91IGNhbiBkbyBpdAordGhpcyB3YXk6ID4KKworCTpzb3VyY2UgJFZJTVJVTlRJTUUvZGVsbWVudS52aW0KKwk6c2V0IGxhbmdtZW51PWRlX0RFLklTT184ODU5LTEKKwk6c291cmNlICRWSU1SVU5USU1FL21lbnUudmltCisKK1RoZXJlIGlzIG9uZSBkcmF3YmFjazogQWxsIG1lbnVzIHRoYXQgeW91IGRlZmluZWQgeW91cnNlbGYgd2lsbCBiZSBnb25lLiAgWW91Cit3aWxsIG5lZWQgdG8gcmVkZWZpbmUgdGhlbSBhcyB3ZWxsLgorCisKK0RPLUlULVlPVVJTRUxGIE1FTlUgVFJBTlNMQVRJT04KKworVG8gc2VlIHdoaWNoIG1lbnUgdHJhbnNsYXRpb25zIGFyZSBhdmFpbGFibGUsIGxvb2sgaW4gdGhpcyBkaXJlY3Rvcnk6CisKKwkkVklNUlVOVElNRS9sYW5nIH4KKworVGhlIGZpbGVzIGFyZSBjYWxsZWQgbWVudV97bGFuZ3VhZ2V9LnZpbS4gIElmIHlvdSBkb24ndCBzZWUgdGhlIGxhbmd1YWdlIHlvdQord2FudCB0byB1c2UsIHlvdSBjYW4gZG8geW91ciBvd24gdHJhbnNsYXRpb25zLiAgVGhlIHNpbXBsZXN0IHdheSB0byBkbyB0aGlzIGlzCitieSBjb3B5aW5nIG9uZSBvZiB0aGUgZXhpc3RpbmcgbGFuZ3VhZ2UgZmlsZXMsIGFuZCBjaGFuZ2UgaXQuCisgICBGaXJzdCBmaW5kIG91dCB0aGUgbmFtZSBvZiB5b3VyIGxhbmd1YWdlIHdpdGggdGhlICI6bGFuZ3VhZ2UiIGNvbW1hbmQuICBVc2UKK3RoaXMgbmFtZSwgYnV0IHdpdGggYWxsIGxldHRlcnMgbWFkZSBsb3dlcmNhc2UuICBUaGVuIGNvcHkgdGhlIGZpbGUgdG8geW91cgorb3duIHJ1bnRpbWUgZGlyZWN0b3J5LCBhcyBmb3VuZCBlYXJseSBpbiAncnVudGltZXBhdGgnLiAgRm9yIGV4YW1wbGUsIGZvciBVbml4Cit5b3Ugd291bGQgZG86ID4KKworCTohY3AgJFZJTVJVTlRJTUUvbGFuZy9tZW51X2tvX2tyLmV1Y2tyLnZpbSB+Ly52aW0vbGFuZy9tZW51X25sX2JlLmlzb184ODU5LTEudmltCisKK1lvdSB3aWxsIGZpbmQgaGludHMgZm9yIHRoZSB0cmFuc2xhdGlvbiBpbiAiJFZJTVJVTlRJTUUvbGFuZy9SRUFETUUudHh0Ii4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDUuMyoJVXNpbmcgYW5vdGhlciBlbmNvZGluZworCitWaW0gZ3Vlc3NlcyB0aGF0IHRoZSBmaWxlcyB5b3UgYXJlIGdvaW5nIHRvIGVkaXQgYXJlIGVuY29kZWQgZm9yIHlvdXIKK2xhbmd1YWdlLiAgRm9yIG1hbnkgRXVyb3BlYW4gbGFuZ3VhZ2VzIHRoaXMgaXMgImxhdGluMSIuICBUaGVuIGVhY2ggYnl0ZSBpcworb25lIGNoYXJhY3Rlci4gIFRoYXQgbWVhbnMgdGhlcmUgYXJlIDI1NiBkaWZmZXJlbnQgY2hhcmFjdGVycyBwb3NzaWJsZS4gIEZvcgorQXNpYW4gbGFuZ3VhZ2VzIHRoaXMgaXMgbm90IHN1ZmZpY2llbnQuICBUaGVzZSBtb3N0bHkgdXNlIGEgZG91YmxlLWJ5dGUKK2VuY29kaW5nLCBwcm92aWRpbmcgZm9yIG92ZXIgdGVuIHRob3VzYW5kIHBvc3NpYmxlIGNoYXJhY3RlcnMuICBUaGlzIHN0aWxsCitpc24ndCBlbm91Z2ggd2hlbiBhIHRleHQgaXMgdG8gY29udGFpbiBzZXZlcmFsIGRpZmZlcmVudCBsYW5ndWFnZXMuICBUaGlzIGlzCit3aGVyZSBVbmljb2RlIGNvbWVzIGluLiAgSXQgd2FzIGRlc2lnbmVkIHRvIGluY2x1ZGUgYWxsIGNoYXJhY3RlcnMgdXNlZCBpbgorY29tbW9ubHkgdXNlZCBsYW5ndWFnZXMuICBUaGlzIGlzIHRoZSAiU3VwZXIgZW5jb2RpbmcgdGhhdCByZXBsYWNlcyBhbGwKK290aGVycyIuICBCdXQgaXQgaXNuJ3QgdXNlZCB0aGF0IG11Y2ggeWV0LgorICAgRm9ydHVuYXRlbHksIFZpbSBzdXBwb3J0cyB0aGVzZSB0aHJlZSBraW5kcyBvZiBlbmNvZGluZ3MuICBBbmQsIHdpdGggc29tZQorcmVzdHJpY3Rpb25zLCB5b3UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiB5b3VyIGVudmlyb25tZW50IHVzZXMgYW5vdGhlcgorbGFuZ3VhZ2UgdGhhbiB0aGUgdGV4dC4KKyAgIE5ldmVydGhlbGVzcywgd2hlbiB5b3Ugb25seSBlZGl0IGZpbGVzIHRoYXQgYXJlIGluIHRoZSBlbmNvZGluZyBvZiB5b3VyCitsYW5ndWFnZSwgdGhlIGRlZmF1bHQgc2hvdWxkIHdvcmsgZmluZSBhbmQgeW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuICBUaGUKK2ZvbGxvd2luZyBpcyBvbmx5IHJlbGV2YW50IHdoZW4geW91IHdhbnQgdG8gZWRpdCBkaWZmZXJlbnQgbGFuZ3VhZ2VzLgorCisJTm90ZToKKwlVc2luZyBkaWZmZXJlbnQgZW5jb2RpbmdzIG9ubHkgd29ya3Mgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHRvIGhhbmRsZQorCWl0LiAgVG8gZmluZCBvdXQgaWYgaXQgd29ya3MsIHVzZSB0aGUgIjp2ZXJzaW9uIiBjb21tYW5kIGFuZCBjaGVjayB0aGUKKwlvdXRwdXQgZm9yICIrbXVsdGlfYnl0ZSIuICBJZiBpdCdzIHRoZXJlLCB5b3UgYXJlIE9LLiAgSWYgeW91IHNlZQorCSItbXVsdGlfYnl0ZSIgeW91IHdpbGwgaGF2ZSB0byBmaW5kIGFub3RoZXIgVmltLgorCisKK1VTSU5HIFVOSUNPREUgSU4gVEhFIEdVSQorCitUaGUgbmljZSB0aGluZyBhYm91dCBVbmljb2RlIGlzIHRoYXQgb3RoZXIgZW5jb2RpbmdzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gaXQKK2FuZCBiYWNrIHdpdGhvdXQgbG9zaW5nIGluZm9ybWF0aW9uLiAgV2hlbiB5b3UgbWFrZSBWaW0gdXNlIFVuaWNvZGUKK2ludGVybmFsbHksIHlvdSB3aWxsIGJlIGFibGUgdG8gZWRpdCBmaWxlcyBpbiBhbnkgZW5jb2RpbmcuCisgICBVbmZvcnR1bmF0ZWx5LCB0aGUgbnVtYmVyIG9mIHN5c3RlbXMgc3VwcG9ydGluZyBVbmljb2RlIGlzIHN0aWxsIGxpbWl0ZWQuCitUaHVzIGl0J3MgdW5saWtlbHkgdGhhdCB5b3VyIGxhbmd1YWdlIHVzZXMgaXQuICBZb3UgbmVlZCB0byB0ZWxsIFZpbSB5b3Ugd2FudAordG8gdXNlIFVuaWNvZGUsIGFuZCBob3cgdG8gaGFuZGxlIGludGVyZmFjaW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KKyAgIExldCdzIHN0YXJ0IHdpdGggdGhlIEdVSSB2ZXJzaW9uIG9mIFZpbSwgd2hpY2ggaXMgYWJsZSB0byBkaXNwbGF5IFVuaWNvZGUKK2NoYXJhY3RlcnMuICBUaGlzIHNob3VsZCB3b3JrOiA+CisKKwk6c2V0IGVuY29kaW5nPXV0Zi04CisJOnNldCBndWlmb250PS1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc28xMDY0Ni0xCisKK1RoZSAnZW5jb2RpbmcnIG9wdGlvbiB0ZWxscyBWaW0gdGhlIGVuY29kaW5nIG9mIHRoZSBjaGFyYWN0ZXJzIHRoYXQgeW91IHVzZS4KK1RoaXMgYXBwbGllcyB0byB0aGUgdGV4dCBpbiBidWZmZXJzIChmaWxlcyB5b3UgYXJlIGVkaXRpbmcpLCByZWdpc3RlcnMsIFZpbQorc2NyaXB0IGZpbGVzLCBldGMuICBZb3UgY2FuIHJlZ2FyZCAnZW5jb2RpbmcnIGFzIHRoZSBzZXR0aW5nIGZvciB0aGUgaW50ZXJuYWxzCitvZiBWaW0uCisgICBUaGlzIGV4YW1wbGUgYXNzdW1lcyB5b3UgaGF2ZSB0aGlzIGZvbnQgb24geW91ciBzeXN0ZW0uICBUaGUgbmFtZSBpbiB0aGUKK2V4YW1wbGUgaXMgZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0uICBUaGlzIGZvbnQgaXMgaW4gYSBwYWNrYWdlIHRoYXQgaXMgdXNlZCB0bworZW5oYW5jZSB4dGVybSB3aXRoIFVuaWNvZGUgc3VwcG9ydC4gIElmIHlvdSBkb24ndCBoYXZlIHRoaXMgZm9udCwgeW91IG1pZ2h0CitmaW5kIGl0IGhlcmU6CisKKwlodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvZG93bmxvYWQvdWNzLWZvbnRzLnRhci5neiB+CisKK0ZvciBNUy1XaW5kb3dzLCBzb21lIGZvbnRzIGhhdmUgYSBsaW1pdGVkIG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMuICBUcnkKK3VzaW5nIHRoZSAiQ291cmllciBOZXciIGZvbnQuICBZb3UgY2FuIHVzZSB0aGUgRWRpdC9TZWxlY3QgRm9udC4uLiBtZW51IHRvCitzZWxlY3QgYW5kIHRyeSBvdXQgdGhlIGZvbnRzIGF2YWlsYWJsZS4gIE9ubHkgZml4ZWQtd2lkdGggZm9udHMgY2FuIGJlIHVzZWQKK3Rob3VnaC4gIEV4YW1wbGU6ID4KKworCTpzZXQgZ3VpZm9udD1jb3VyaWVyX25ldzpoMTIKKworSWYgaXQgZG9lc24ndCB3b3JrIHdlbGwsIHRyeSBnZXR0aW5nIGEgZm9udHBhY2suICBJZiBNaWNyb3NvZnQgZGlkbid0IG1vdmUgaXQsCit5b3UgY2FuIGZpbmQgaXQgaGVyZToKKworCWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2ZvbnRwYWNrL2RlZmF1bHQuaHRtIH4KKworTm93IHlvdSBoYXZlIHRvbGQgVmltIHRvIHVzZSBVbmljb2RlIGludGVybmFsbHkgYW5kIGRpc3BsYXkgdGV4dCB3aXRoIGEKK1VuaWNvZGUgZm9udC4gIFR5cGVkIGNoYXJhY3RlcnMgc3RpbGwgYXJyaXZlIGluIHRoZSBlbmNvZGluZyBvZiB5b3VyIG9yaWdpbmFsCitsYW5ndWFnZS4gIFRoaXMgcmVxdWlyZXMgY29udmVydGluZyB0aGVtIHRvIFVuaWNvZGUuICBUZWxsIFZpbSB0aGUgbGFuZ3VhZ2UKK2Zyb20gd2hpY2ggdG8gY29udmVydCB3aXRoIHRoZSAndGVybWVuY29kaW5nJyBvcHRpb24uICBZb3UgY2FuIGRvIGl0IGxpa2UKK3RoaXM6ID4KKworCTpsZXQgJnRlcm1lbmNvZGluZyA9ICZlbmNvZGluZworCTpzZXQgZW5jb2Rpbmc9dXRmLTgKKworVGhpcyBhc3NpZ25zIHRoZSBvbGQgdmFsdWUgb2YgJ2VuY29kaW5nJyB0byAndGVybWVuY29kaW5nJyBiZWZvcmUgc2V0dGluZworJ2VuY29kaW5nJyB0byB1dGYtOC4gIFlvdSB3aWxsIGhhdmUgdG8gdHJ5IG91dCBpZiB0aGlzIHJlYWxseSB3b3JrcyBmb3IgeW91cgorc2V0dXAuICBJdCBzaG91bGQgd29yayBlc3BlY2lhbGx5IHdlbGwgd2hlbiB1c2luZyBhbiBpbnB1dCBtZXRob2QgZm9yIGFuIEFzaWFuCitsYW5ndWFnZSwgYW5kIHlvdSB3YW50IHRvIGVkaXQgVW5pY29kZSB0ZXh0LgorCisKK1VTSU5HIFVOSUNPREUgSU4gQSBVTklDT0RFIFRFUk1JTkFMCisKK1RoZXJlIGFyZSB0ZXJtaW5hbHMgdGhhdCBzdXBwb3J0IFVuaWNvZGUgZGlyZWN0bHkuICBUaGUgc3RhbmRhcmQgeHRlcm0gdGhhdAorY29tZXMgd2l0aCBYRnJlZTg2IGlzIG9uZSBvZiB0aGVtLiAgTGV0J3MgdXNlIHRoYXQgYXMgYW4gZXhhbXBsZS4KKyAgIEZpcnN0IG9mIGFsbCwgdGhlIHh0ZXJtIG11c3QgaGF2ZSBiZWVuIGNvbXBpbGVkIHdpdGggVW5pY29kZSBzdXBwb3J0LiAgU2VlCit8VVRGOC14dGVybXwgaG93IHRvIGNoZWNrIHRoYXQgYW5kIGhvdyB0byBjb21waWxlIGl0IHdoZW4gbmVlZGVkLgorICAgU3RhcnQgdGhlIHh0ZXJtIHdpdGggdGhlICItdTgiIGFyZ3VtZW50LiAgWW91IG1pZ2h0IGFsc28gbmVlZCBzbyBzcGVjaWZ5IGEKK2ZvbnQuICBFeGFtcGxlOiA+CisKKyAgIHh0ZXJtIC11OCAtZm4gLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzEwNjQ2LTEKKworTm93IHlvdSBjYW4gcnVuIFZpbSBpbnNpZGUgdGhpcyB0ZXJtaW5hbC4gIFNldCAnZW5jb2RpbmcnIHRvICJ1dGYtOCIgYXMKK2JlZm9yZS4gIFRoYXQncyBhbGwuCisKKworVVNJTkcgVU5JQ09ERSBJTiBBTiBPUkRJTkFSWSBURVJNSU5BTAorCitTdXBwb3NlIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBVbmljb2RlIGZpbGVzLCBidXQgZG9uJ3QgaGF2ZSBhIHRlcm1pbmFsIHdpdGgKK1VuaWNvZGUgc3VwcG9ydC4gIFlvdSBjYW4gZG8gdGhpcyB3aXRoIFZpbSwgYWx0aG91Z2ggY2hhcmFjdGVycyB0aGF0IGFyZSBub3QKK3N1cHBvcnRlZCBieSB0aGUgdGVybWluYWwgd2lsbCBub3QgYmUgZGlzcGxheWVkLiAgVGhlIGxheW91dCBvZiB0aGUgdGV4dAord2lsbCBiZSBwcmVzZXJ2ZWQuICA+CisKKwk6bGV0ICZ0ZXJtZW5jb2RpbmcgPSAmZW5jb2RpbmcKKwk6c2V0IGVuY29kaW5nPXV0Zi04CisKK1RoaXMgaXMgdGhlIHNhbWUgYXMgd2hhdCB3YXMgdXNlZCBmb3IgdGhlIEdVSS4gIEJ1dCBpdCB3b3JrcyBkaWZmZXJlbnRseTogVmltCit3aWxsIGNvbnZlcnQgdGhlIGRpc3BsYXllZCB0ZXh0IGJlZm9yZSBzZW5kaW5nIGl0IHRvIHRoZSB0ZXJtaW5hbC4gIFRoYXQKK2F2b2lkcyB0aGF0IHRoZSBkaXNwbGF5IGlzIG1lc3NlZCB1cCB3aXRoIHN0cmFuZ2UgY2hhcmFjdGVycy4KKyAgIEZvciB0aGlzIHRvIHdvcmsgdGhlIGNvbnZlcnNpb24gYmV0d2VlbiAndGVybWVuY29kaW5nJyBhbmQgJ2VuY29kaW5nJyBtdXN0CitiZSBwb3NzaWJsZS4gIFZpbSB3aWxsIGNvbnZlcnQgZnJvbSBsYXRpbjEgdG8gVW5pY29kZSwgdGh1cyB0aGF0IGFsd2F5cyB3b3Jrcy4KK0ZvciBvdGhlciBjb252ZXJzaW9ucyB0aGUgfCtpY29udnwgZmVhdHVyZSBpcyByZXF1aXJlZC4KKyAgIFRyeSBlZGl0aW5nIGEgZmlsZSB3aXRoIFVuaWNvZGUgY2hhcmFjdGVycyBpbiBpdC4gIFlvdSB3aWxsIG5vdGljZSB0aGF0IFZpbQord2lsbCBwdXQgYSBxdWVzdGlvbiBtYXJrIChvciB1bmRlcnNjb3JlIG9yIHNvbWUgb3RoZXIgY2hhcmFjdGVyKSBpbiBwbGFjZXMKK3doZXJlIGEgY2hhcmFjdGVyIHNob3VsZCBiZSB0aGF0IHRoZSB0ZXJtaW5hbCBjYW4ndCBkaXNwbGF5LiAgTW92ZSB0aGUgY3Vyc29yCit0byBhIHF1ZXN0aW9uIG1hcmsgYW5kIHVzZSB0aGlzIGNvbW1hbmQ6ID4KKworCWdhCisKK1ZpbSB3aWxsIGRpc3BsYXkgYSBsaW5lIHdpdGggdGhlIGNvZGUgb2YgdGhlIGNoYXJhY3Rlci4gIFRoaXMgZ2l2ZXMgeW91IGEgaGludAorYWJvdXQgd2hhdCBjaGFyYWN0ZXIgaXQgaXMuICBZb3UgY2FuIGxvb2sgaXQgdXAgaW4gYSBVbmljb2RlIHRhYmxlLiAgWW91IGNvdWxkCithY3R1YWxseSB2aWV3IGEgZmlsZSB0aGF0IHdheSwgaWYgeW91IGhhdmUgbG90cyBvZiB0aW1lIGF0IGhhbmQuCisKKwlOb3RlOgorCVNpbmNlICdlbmNvZGluZycgaXMgdXNlZCBmb3IgYWxsIHRleHQgaW5zaWRlIFZpbSwgY2hhbmdpbmcgaXQgbWFrZXMKKwlhbGwgbm9uLUFTQ0lJIHRleHQgaW52YWxpZC4gIFlvdSB3aWxsIG5vdGljZSB0aGlzIHdoZW4gdXNpbmcgcmVnaXN0ZXJzCisJYW5kIHRoZSAndmltaW5mbycgZmlsZSAoZS5nLiwgYSByZW1lbWJlcmVkIHNlYXJjaCBwYXR0ZXJuKS4gIEl0J3MKKwlyZWNvbW1lbmRlZCB0byBzZXQgJ2VuY29kaW5nJyBpbiB5b3VyIHZpbXJjIGZpbGUsIGFuZCBsZWF2ZSBpdCBhbG9uZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDUuNCoJRWRpdGluZyBmaWxlcyB3aXRoIGEgZGlmZmVyZW50IGVuY29kaW5nCisKK1N1cHBvc2UgeW91IGhhdmUgc2V0dXAgVmltIHRvIHVzZSBVbmljb2RlLCBhbmQgeW91IHdhbnQgdG8gZWRpdCBhIGZpbGUgdGhhdCBpcworaW4gMTYtYml0IFVuaWNvZGUuICBTb3VuZHMgc2ltcGxlLCByaWdodD8gIFdlbGwsIFZpbSBhY3R1YWxseSB1c2VzIHV0Zi04CitlbmNvZGluZyBpbnRlcm5hbGx5LCB0aHVzIHRoZSAxNi1iaXQgZW5jb2RpbmcgbXVzdCBiZSBjb252ZXJ0ZWQuICBUaHVzIHRoZXJlCitpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY2hhcmFjdGVyIHNldCAoVW5pY29kZSkgYW5kIHRoZSBlbmNvZGluZyAodXRmLTggb3IKKzE2LWJpdCkuCisgICBWaW0gd2lsbCB0cnkgdG8gZGV0ZWN0IHdoYXQga2luZCBvZiBmaWxlIHlvdSBhcmUgZWRpdGluZy4gIEl0IHVzZXMgdGhlCitlbmNvZGluZyBuYW1lcyBpbiB0aGUgJ2ZpbGVlbmNvZGluZ3MnIG9wdGlvbi4gIFdoZW4gdXNpbmcgVW5pY29kZSwgdGhlIGRlZmF1bHQKK3ZhbHVlIGlzOiAidWNzLWJvbSx1dGYtOCxsYXRpbjEiLiAgVGhpcyBtZWFucyB0aGF0IFZpbSBjaGVja3MgdGhlIGZpbGUgdG8gc2VlCitpZiBpdCdzIG9uZSBvZiB0aGVzZSBlbmNvZGluZ3M6CisKKwl1Y3MtYm9tCQlGaWxlIG11c3Qgc3RhcnQgd2l0aCBhIEJ5dGUgT3JkZXIgTWFyayAoQk9NKS4gIFRoaXMKKwkJCWFsbG93cyBkZXRlY3Rpb24gb2YgMTYtYml0LCAzMi1iaXQgYW5kIHV0Zi04IFVuaWNvZGUKKwkJCWVuY29kaW5ncy4KKwl1dGYtOAkJdXRmLTggVW5pY29kZS4gIFRoaXMgaXMgcmVqZWN0ZWQgd2hlbiBhIHNlcXVlbmNlIG9mCisJCQlieXRlcyBpcyBpbGxlZ2FsIGluIHV0Zi04LgorCWxhdGluMQkJVGhlIGdvb2Qgb2xkIDgtYml0IGVuY29kaW5nLiAgQWx3YXlzIHdvcmtzLgorCitXaGVuIHlvdSBzdGFydCBlZGl0aW5nIHRoYXQgMTYtYml0IFVuaWNvZGUgZmlsZSwgYW5kIGl0IGhhcyBhIEJPTSwgVmltIHdpbGwKK2RldGVjdCB0aGlzIGFuZCBjb252ZXJ0IHRoZSBmaWxlIHRvIHV0Zi04IHdoZW4gcmVhZGluZyBpdC4gIFRoZSAnZmlsZWVuY29kaW5nJworb3B0aW9uICh3aXRob3V0IHMgYXQgdGhlIGVuZCkgaXMgc2V0IHRvIHRoZSBkZXRlY3RlZCB2YWx1ZS4gIEluIHRoaXMgY2FzZSBpdAoraXMgInVjcy0ybGUiLiAgVGhhdCBtZWFucyBpdCdzIFVuaWNvZGUsIHR3byBieXRlcyBhbmQgbGl0dGxlLWVuZGlhbi4gIFRoaXMKK2ZpbGUgZm9ybWF0IGlzIGNvbW1vbiBvbiBNUy1XaW5kb3dzIChlLmcuLCBmb3IgcmVnaXN0cnkgZmlsZXMpLgorICAgV2hlbiB3cml0aW5nIHRoZSBmaWxlLCBWaW0gd2lsbCBjb21wYXJlICdmaWxlZW5jb2RpbmcnIHdpdGggJ2VuY29kaW5nJy4gIElmCit0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSB0ZXh0IHdpbGwgYmUgY29udmVydGVkLgorICAgQW4gZW1wdHkgdmFsdWUgZm9yICdmaWxlZW5jb2RpbmcnIG1lYW5zIHRoYXQgbm8gY29udmVyc2lvbiBpcyB0byBiZSBkb25lLgorVGh1cyB0aGUgdGV4dCBpcyBhc3N1bWVkIHRvIGJlIGVuY29kZWQgd2l0aCAnZW5jb2RpbmcnLgorCitJZiB0aGUgZGVmYXVsdCAnZmlsZWVuY29kaW5ncycgdmFsdWUgaXMgbm90IGdvb2QgZm9yIHlvdSwgc2V0IGl0IHRvIHRoZQorZW5jb2RpbmdzIHlvdSB3YW50IFZpbSB0byB0cnkuICBPbmx5IHdoZW4gYSB2YWx1ZSBpcyBmb3VuZCB0byBiZSBpbnZhbGlkIHdpbGwKK3RoZSBuZXh0IG9uZSBiZSB1c2VkLiAgUHV0dGluZyAibGF0aW4xIiBmaXJzdCBkb2Vzbid0IHdvcmssIGJlY2F1c2UgaXQgaXMKK25ldmVyIGlsbGVnYWwuICBBbiBleGFtcGxlLCB0byBmYWxsIGJhY2sgdG8gSmFwYW5lc2Ugd2hlbiB0aGUgZmlsZSBkb2Vzbid0CitoYXZlIGEgQk9NIGFuZCBpc24ndCB1dGYtODogPgorCisJOnNldCBmaWxlZW5jb2RpbmdzPXVjcy1ib20sdXRmLTgsc2ppcworCitTZWUgfGVuY29kaW5nLXZhbHVlc3wgZm9yIHN1Z2dlc3RlZCB2YWx1ZXMuICBPdGhlciB2YWx1ZXMgbWF5IHdvcmsgYXMgd2VsbC4KK1RoaXMgZGVwZW5kcyBvbiB0aGUgY29udmVyc2lvbiBhdmFpbGFibGUuCisKKworRk9SQ0lORyBBTiBFTkNPRElORworCitJZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbiBkb2Vzbid0IHdvcmsgeW91IG11c3QgdGVsbCBWaW0gd2hhdCBlbmNvZGluZyB0aGUKK2ZpbGUgaXMuICBFeGFtcGxlOiA+CisKKwk6ZWRpdCArK2VuYz1rb2k4LXIgcnVzc2lhbi50eHQKKworVGhlICIrK2VuYyIgcGFydCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHRvIGJlIHVzZWQgZm9yIHRoaXMgZmlsZQorb25seS4gIFZpbSB3aWxsIGNvbnZlcnQgdGhlIGZpbGUgZnJvbSB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBSdXNzaWFuIGluIHRoaXMKK2V4YW1wbGUsIHRvICdlbmNvZGluZycuICAnZmlsZWVuY29kaW5nJyB3aWxsIGFsc28gYmUgc2V0IHRvIHRoZSBzcGVjaWZpZWQKK2VuY29kaW5nLCBzbyB0aGF0IHRoZSByZXZlcnNlIGNvbnZlcnNpb24gY2FuIGJlIGRvbmUgd2hlbiB3cml0aW5nIHRoZSBmaWxlLgorICAgVGhlIHNhbWUgYXJndW1lbnQgY2FuIGJlIHVzZWQgd2hlbiB3cml0aW5nIHRoZSBmaWxlLiAgVGhpcyB3YXkgeW91IGNhbgorYWN0dWFsbHkgdXNlIFZpbSB0byBjb252ZXJ0IGEgZmlsZS4gIEV4YW1wbGU6ID4KKworCTp3cml0ZSArK2VuYz11dGYtOCBydXNzaWFuLnR4dAorPAorCU5vdGU6CisJQ29udmVyc2lvbiBtYXkgcmVzdWx0IGluIGxvc3QgY2hhcmFjdGVycy4gIENvbnZlcnNpb24gZnJvbSBhbiBlbmNvZGluZworCXRvIFVuaWNvZGUgYW5kIGJhY2sgaXMgbW9zdGx5IGZyZWUgb2YgdGhpcyBwcm9ibGVtLCB1bmxlc3MgdGhlcmUgYXJlCisJaWxsZWdhbCBjaGFyYWN0ZXJzLiAgQ29udmVyc2lvbiBmcm9tIFVuaWNvZGUgdG8gb3RoZXIgZW5jb2RpbmdzIG9mdGVuCisJbG9zZXMgaW5mb3JtYXRpb24gd2hlbiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSBsYW5ndWFnZSBpbiB0aGUgZmlsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqNDUuNSoJRW50ZXJpbmcgbGFuZ3VhZ2UgdGV4dAorCitDb21wdXRlciBrZXlib2FyZHMgZG9uJ3QgaGF2ZSBtdWNoIG1vcmUgdGhhbiBhIGh1bmRyZWQga2V5cy4gIFNvbWUgbGFuZ3VhZ2VzCitoYXZlIHRob3VzYW5kcyBvZiBjaGFyYWN0ZXJzLCBVbmljb2RlIGhhcyB0ZW4gdGhvdXNhbmRzLiAgU28gaG93IGRvIHlvdSB0eXBlCit0aGVzZSBjaGFyYWN0ZXJzPworICAgRmlyc3Qgb2YgYWxsLCB3aGVuIHlvdSBkb24ndCB1c2UgdG9vIG1hbnkgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycywgeW91CitjYW4gdXNlIGRpZ3JhcGhzLiAgVGhpcyB3YXMgYWxyZWFkeSBleHBsYWluZWQgaW4gfDI0Ljl8LgorICAgV2hlbiB5b3UgdXNlIGEgbGFuZ3VhZ2UgdGhhdCB1c2VzIG1hbnkgbW9yZSBjaGFyYWN0ZXJzIHRoYW4ga2V5cyBvbiB5b3VyCitrZXlib2FyZCwgeW91IHdpbGwgd2FudCB0byB1c2UgYW4gSW5wdXQgTWV0aG9kIChJTSkuICBUaGlzIHJlcXVpcmVzIGxlYXJuaW5nCit0aGUgdHJhbnNsYXRpb24gZnJvbSB0eXBlZCBrZXlzIHRvIHJlc3VsdGluZyBjaGFyYWN0ZXIuICBXaGVuIHlvdSBuZWVkIGFuIElNCit5b3UgcHJvYmFibHkgYWxyZWFkeSBoYXZlIG9uZSBvbiB5b3VyIHN5c3RlbS4gIEl0IHNob3VsZCB3b3JrIHdpdGggVmltIGxpa2UKK3dpdGggb3RoZXIgcHJvZ3JhbXMuICBGb3IgZGV0YWlscyBzZWUgfG1ieXRlLVhJTXwgZm9yIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kCit8bWJ5dGUtSU1FfCBmb3IgTVMtV2luZG93cy4KKworCitLRVlNQVBTCisKK0ZvciBzb21lIGxhbmd1YWdlcyB0aGUgY2hhcmFjdGVyIHNldCBpcyBkaWZmZXJlbnQgZnJvbSBsYXRpbiwgYnV0IHVzZXMgYQorc2ltaWxhciBudW1iZXIgb2YgY2hhcmFjdGVycy4gIEl0J3MgcG9zc2libGUgdG8gbWFwIGtleXMgdG8gY2hhcmFjdGVycy4gIFZpbQordXNlcyBrZXltYXBzIGZvciB0aGlzLgorICAgU3VwcG9zZSB5b3Ugd2FudCB0byB0eXBlIEhlYnJldy4gIFlvdSBjYW4gbG9hZCB0aGUga2V5bWFwIGxpa2UgdGhpczogPgorCisJOnNldCBrZXltYXA9aGVicmV3CisKK1ZpbSB3aWxsIHRyeSB0byBmaW5kIGEga2V5bWFwIGZpbGUgZm9yIHlvdS4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YKKydlbmNvZGluZycuICBJZiBubyBtYXRjaGluZyBmaWxlIHdhcyBmb3VuZCwgeW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuCisKK05vdyB5b3UgY2FuIHR5cGUgSGVicmV3IGluIEluc2VydCBtb2RlLiAgSW4gTm9ybWFsIG1vZGUsIGFuZCB3aGVuIHR5cGluZyBhICI6IgorY29tbWFuZCwgVmltIGF1dG9tYXRpY2FsbHkgc3dpdGNoZXMgdG8gRW5nbGlzaC4gIFlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCB0bworc3dpdGNoIGJldHdlZW4gSGVicmV3IGFuZCBFbmdsaXNoOiA+CisKKwlDVFJMLV4KKworVGhpcyBvbmx5IHdvcmtzIGluIEluc2VydCBtb2RlIGFuZCBDb21tYW5kLWxpbmUgbW9kZS4gIEluIE5vcm1hbCBtb2RlIGl0IGRvZXMKK3NvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCAoanVtcHMgdG8gYWx0ZXJuYXRlIGZpbGUpLgorICAgVGhlIHVzYWdlIG9mIHRoZSBrZXltYXAgaXMgaW5kaWNhdGVkIGluIHRoZSBtb2RlIG1lc3NhZ2UsIGlmIHlvdSBoYXZlIHRoZQorJ3Nob3dtb2RlJyBvcHRpb24gc2V0LiAgSW4gdGhlIEdVSSBWaW0gd2lsbCBpbmRpY2F0ZSB0aGUgdXNhZ2Ugb2Yga2V5bWFwcyB3aXRoCithIGRpZmZlcmVudCBjdXJzb3IgY29sb3IuCisgICBZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSB1c2FnZSBvZiB0aGUga2V5bWFwIHdpdGggdGhlICdpbWluc2VydCcgYW5kCisnaW1zZWFyY2gnIG9wdGlvbnMuCisKK1RvIHNlZSB0aGUgbGlzdCBvZiBtYXBwaW5ncywgdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmxtYXAKKworVG8gZmluZCBvdXQgd2hpY2gga2V5bWFwIGZpbGVzIGFyZSBhdmFpbGFibGUsIGluIHRoZSBHVUkgeW91IGNhbiB1c2UgdGhlCitFZGl0L0tleW1hcCBtZW51LiAgT3RoZXJ3aXNlIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZDogPgorCisJOmVjaG8gZ2xvYnBhdGgoJnJ0cCwgImtleW1hcC8qLnZpbSIpCisKKworRE8tSVQtWU9VUlNFTEYgS0VZTUFQUworCitZb3UgY2FuIGNyZWF0ZSB5b3VyIG93biBrZXltYXAgZmlsZS4gIEl0J3Mgbm90IHZlcnkgZGlmZmljdWx0LiAgU3RhcnQgd2l0aAorYSBrZXltYXAgZmlsZSB0aGF0IGlzIHNpbWlsYXIgdG8gdGhlIGxhbmd1YWdlIHlvdSB3YW50IHRvIHVzZS4gIENvcHkgaXQgdG8gdGhlCisia2V5bWFwIiBkaXJlY3RvcnkgaW4geW91ciBydW50aW1lIGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCBmb3IgVW5peCwgeW91Cit3b3VsZCB1c2UgdGhlIGRpcmVjdG9yeSAifi8udmltL2tleW1hcCIuCisgICBUaGUgbmFtZSBvZiB0aGUga2V5bWFwIGZpbGUgbXVzdCBsb29rIGxpa2UgdGhpczoKKworCWtleW1hcC97bmFtZX0udmltIH4KK29yCisJa2V5bWFwL3tuYW1lfV97ZW5jb2Rpbmd9LnZpbSB+CisKK3tuYW1lfSBpcyB0aGUgbmFtZSBvZiB0aGUga2V5bWFwLiAgQ2hvc2UgYSBuYW1lIHRoYXQgaXMgb2J2aW91cywgYnV0IGRpZmZlcmVudAorZnJvbSBleGlzdGluZyBrZXltYXBzICh1bmxlc3MgeW91IHdhbnQgdG8gcmVwbGFjZSBhbiBleGlzdGluZyBrZXltYXAgZmlsZSkuCit7bmFtZX0gY2Fubm90IGNvbnRhaW4gYW4gdW5kZXJzY29yZS4gIE9wdGlvbmFsbHksIGFkZCB0aGUgZW5jb2RpbmcgdXNlZCBhZnRlcgorYW4gdW5kZXJzY29yZS4gIEV4YW1wbGVzOgorCisJa2V5bWFwL2hlYnJldy52aW0gfgorCWtleW1hcC9oZWJyZXdfdXRmLTgudmltIH4KKworVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LiAgTG9vayBhdCBhIGZldyBvZiB0aGUKK2tleW1hcHMgdGhhdCBhcmUgZGlzdHJpYnV0ZWQgd2l0aCBWaW0uICBGb3IgdGhlIGRldGFpbHMsIHNlZSB8bWJ5dGUta2V5bWFwfC4KKworCitMQVNUIFJFU09SVAorCitJZiBhbGwgb3RoZXIgbWV0aG9kcyBmYWlsLCB5b3UgY2FuIGVudGVyIGFueSBjaGFyYWN0ZXIgd2l0aCBDVFJMLVY6CisKKwllbmNvZGluZyAgIHR5cGUJCQlyYW5nZSB+CisJOC1iaXQJICAgQ1RSTC1WIDEyMwkJZGVjaW1hbCAwLTI1NQorCTgtYml0CSAgIENUUkwtViB4IGExCQloZXhhZGVjaW1hbCAwMC1mZgorCTE2LWJpdCAgICAgQ1RSTC1WIHUgMDEzYgloZXhhZGVjaW1hbCAwMDAwLWZmZmYKKwkzMS1iaXQJICAgQ1RSTC1WIFUgMDAxMzAzYTQJaGV4YWRlY2ltYWwgMDAwMDAwMDAtN2ZmZmZmZmYKKworRG9uJ3QgdHlwZSB0aGUgc3BhY2VzLiAgU2VlIHxpX0NUUkwtVl9kaWdpdHwgZm9yIHRoZSBkZXRhaWxzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV4dCBjaGFwdGVyOiB8dXNyXzkwLnR4dHwgIEluc3RhbGxpbmcgVmltCisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdXNyXzkwLnR4dCBiL3J1bnRpbWUvZG9jL3Vzcl85MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5YzQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl85MC50eHQKQEAgLTAsMCArMSw0OTggQEAKKyp1c3JfOTAudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBNYXIgMjEKKworCQkgICAgIFZJTSBVU0VSIE1BTlVBTCAtIGJ5IEJyYW0gTW9vbGVuYWFyCisKKwkJCQlJbnN0YWxsaW5nIFZpbQorCisJCQkJCQkJCSppbnN0YWxsKgorQmVmb3JlIHlvdSBjYW4gdXNlIFZpbSB5b3UgaGF2ZSB0byBpbnN0YWxsIGl0LiAgRGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtIGl0J3MKK3NpbXBsZSBvciBlYXN5LiAgVGhpcyBjaGFwdGVyIGdpdmVzIGEgZmV3IGhpbnRzIGFuZCBhbHNvIGV4cGxhaW5zIGhvdwordXBncmFkaW5nIHRvIGEgbmV3IHZlcnNpb24gaXMgZG9uZS4KKworfDkwLjF8CVVuaXgKK3w5MC4yfAlNUy1XaW5kb3dzCit8OTAuM3wJVXBncmFkaW5nCit8OTAuNHwJQ29tbW9uIGluc3RhbGxhdGlvbiBpc3N1ZXMKK3w5MC41fAlVbmluc3RhbGxpbmcgVmltCisKKyBQcmV2aW91cyBjaGFwdGVyOiB8dXNyXzQ1LnR4dHwgIFNlbGVjdCB5b3VyIGxhbmd1YWdlCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo5MC4xKglVbml4CisKK0ZpcnN0IHlvdSBoYXZlIHRvIGRlY2lkZSBpZiB5b3UgYXJlIGdvaW5nIHRvIGluc3RhbGwgVmltIHN5c3RlbS13aWRlIG9yIGZvciBhCitzaW5nbGUgdXNlci4gIFRoZSBpbnN0YWxsYXRpb24gaXMgYWxtb3N0IHRoZSBzYW1lLCBidXQgdGhlIGRpcmVjdG9yeSB3aGVyZSBWaW0KK2lzIGluc3RhbGxlZCBpbiBkaWZmZXJzLgorICAgRm9yIGEgc3lzdGVtLXdpZGUgaW5zdGFsbGF0aW9uIHRoZSBiYXNlIGRpcmVjdG9yeSAiL3Vzci9sb2NhbCIgaXMgb2Z0ZW4KK3VzZWQuICBCdXQgdGhpcyBtYXkgYmUgZGlmZmVyZW50IGZvciB5b3VyIHN5c3RlbS4gIFRyeSBmaW5kaW5nIG91dCB3aGVyZSBvdGhlcgorcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KKyAgIFdoZW4gaW5zdGFsbGluZyBmb3IgYSBzaW5nbGUgdXNlciwgeW91IGNhbiB1c2UgeW91ciBob21lIGRpcmVjdG9yeSBhcyB0aGUKK2Jhc2UuICBUaGUgZmlsZXMgd2lsbCBiZSBwbGFjZWQgaW4gc3ViZGlyZWN0b3JpZXMgbGlrZSAiYmluIiBhbmQgInNoYXJlZC92aW0iLgorCisKK0ZST00gQSBQQUNLQUdFCisKK1lvdSBjYW4gZ2V0IHByZWNvbXBpbGVkIGJpbmFyaWVzIGZvciBtYW55IGRpZmZlcmVudCBVTklYIHN5c3RlbXMuICBUaGVyZSBpcyBhCitsb25nIGxpc3Qgd2l0aCBsaW5rcyBvbiB0aGlzIHBhZ2U6CisKKwlodHRwOi8vd3d3LnZpbS5vcmcvYmluYXJpZXMuaHRtbCB+CisKK1ZvbHVudGVlcnMgbWFpbnRhaW4gdGhlIGJpbmFyaWVzLCBzbyB0aGV5IGFyZSBvZnRlbiBvdXQgb2YgZGF0ZS4gIEl0IGlzIGEKK2dvb2QgaWRlYSB0byBjb21waWxlIHlvdXIgb3duIFVOSVggdmVyc2lvbiBmcm9tIHRoZSBzb3VyY2UuICBBbHNvLCBjcmVhdGluZwordGhlIGVkaXRvciBmcm9tIHRoZSBzb3VyY2UgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoaWNoIGZlYXR1cmVzIGFyZSBjb21waWxlZC4KK1RoaXMgZG9lcyByZXF1aXJlIGEgY29tcGlsZXIgdGhvdWdoLgorCitJZiB5b3UgaGF2ZSBhIExpbnV4IGRpc3RyaWJ1dGlvbiwgdGhlICJ2aSIgcHJvZ3JhbSBpcyBwcm9iYWJseSBhIG1pbmltYWwKK3ZlcnNpb24gb2YgVmltLiAgSXQgZG9lc24ndCBkbyBzeW50YXggaGlnaGxpZ2h0aW5nLCBmb3IgZXhhbXBsZS4gIFRyeSBmaW5kaW5nCithbm90aGVyIFZpbSBwYWNrYWdlIGluIHlvdXIgZGlzdHJpYnV0aW9uLCBvciBzZWFyY2ggb24gdGhlIHdlYiBzaXRlLgorCisKK0ZST00gU09VUkNFUworCitUbyBjb21waWxlIGFuZCBpbnN0YWxsIFZpbSwgeW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nOgorCisJLSAgQSBDIGNvbXBpbGVyIChHQ0MgcHJlZmVycmVkKQorCS0gIFRoZSBHWklQIHByb2dyYW0gKHlvdSBjYW4gZ2V0IGl0IGZyb20gd3d3LmdudS5vcmcpCisJLSAgVGhlIFZpbSBzb3VyY2UgYW5kIHJ1bnRpbWUgYXJjaGl2ZXMKKworVG8gZ2V0IHRoZSBWaW0gYXJjaGl2ZXMsIGxvb2sgaW4gdGhpcyBmaWxlIGZvciBhIG1pcnJvciBuZWFyIHlvdSwgdGhpcyBzaG91bGQKK3Byb3ZpZGUgdGhlIGZhc3Rlc3QgZG93bmxvYWQ6CisKKwlmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL01JUlJPUlMgfgorCitPciB1c2UgdGhlIGhvbWUgc2l0ZSBmdHAudmltLm9yZywgaWYgeW91IHRoaW5rIGl0J3MgZmFzdCBlbm91Z2guICBHbyB0byB0aGUKKyJ1bml4IiBkaXJlY3RvcnkgYW5kIHlvdSdsbCBmaW5kIGEgbGlzdCBvZiBmaWxlcyB0aGVyZS4gIFRoZSB2ZXJzaW9uIG51bWJlciBpcworZW1iZWRkZWQgaW4gdGhlIGZpbGUgbmFtZS4gIFlvdSB3aWxsIHdhbnQgdG8gZ2V0IHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uLgorICAgWW91IGNhbiBnZXQgdGhlIGZpbGVzIGZvciBVbml4IGluIHR3byB3YXlzOiBPbmUgYmlnIGFyY2hpdmUgdGhhdCBjb250YWlucworZXZlcnl0aGluZywgb3IgZm91ciBzbWFsbGVyIG9uZXMgdGhhdCBlYWNoIGZpdCBvbiBhIGZsb3BweSBkaXNrLiAgRm9yIHZlcnNpb24KKzYuMSB0aGUgc2luZ2xlIGJpZyBvbmUgaXMgY2FsbGVkOgorCisJdmltLTYuMS50YXIuYnoyIH4KKworWW91IG5lZWQgdGhlIGJ6aXAyIHByb2dyYW0gdG8gdW5jb21wcmVzcyBpdC4gIElmIHlvdSBkb24ndCBoYXZlIGl0LCBnZXQgdGhlCitmb3VyIHNtYWxsZXIgZmlsZXMsIHdoaWNoIGNhbiBiZSB1bmNvbXByZXNzZWQgd2l0aCBnemlwLiAgRm9yIFZpbSA2LjEgdGhleSBhcmUKK2NhbGxlZDoKKworCXZpbS02LjEtc3JjMS50YXIuZ3ogfgorCXZpbS02LjEtc3JjMi50YXIuZ3ogfgorCXZpbS02LjEtcnQxLnRhci5neiB+CisJdmltLTYuMS1ydDIudGFyLmd6IH4KKworCitDT01QSUxJTkcKKworRmlyc3QgY3JlYXRlIGEgdG9wIGRpcmVjdG9yeSB0byB3b3JrIGluLCBmb3IgZXhhbXBsZTogPgorCisJbWtkaXIgfi92aW0KKwljZCB+L3ZpbQorCitUaGVuIHVucGFjayB0aGUgYXJjaGl2ZXMgdGhlcmUuICBJZiB5b3UgaGF2ZSB0aGUgb25lIGJpZyBhcmNoaXZlLCB5b3UgdW5wYWNrCitpdCBsaWtlIHRoaXM6ID4KKworCWJ6aXAyIC1kIC1jIHBhdGgvdmltLTYuMS50YXIuYnoyIHwgdGFyIHhmIC0KKworQ2hhbmdlICJwYXRoIiB0byB3aGVyZSB5b3UgaGF2ZSBkb3dubG9hZGVkIHRoZSBmaWxlLiA+CisKKwlnemlwIC1kIC1jIHBhdGgvdmltLTYuMS1zcmMxLnRhci5neiB8IHRhciB4ZiAtCisJZ3ppcCAtZCAtYyBwYXRoL3ZpbS02LjEtc3JjMi50YXIuZ3ogfCB0YXIgeGYgLQorCWd6aXAgLWQgLWMgcGF0aC92aW0tNi4xLXJ0MS50YXIuZ3ogfCB0YXIgeGYgLQorCWd6aXAgLWQgLWMgcGF0aC92aW0tNi4xLXJ0Mi50YXIuZ3ogfCB0YXIgeGYgLQorCitJZiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIGdldHRpbmcgdGhlIGRlZmF1bHQgZmVhdHVyZXMsIGFuZCB5b3VyIGVudmlyb25tZW50CitpcyBzZXR1cCBwcm9wZXJseSwgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgVmltIHdpdGgganVzdCB0aGlzOiA+CisKKwljZCB2aW02MS9zcmMKKwltYWtlCisKK1RoZSBtYWtlIHByb2dyYW0gd2lsbCBydW4gY29uZmlndXJlIGFuZCBjb21waWxlIGV2ZXJ5dGhpbmcuICBGdXJ0aGVyIG9uIHdlCit3aWxsIGV4cGxhaW4gaG93IHRvIGNvbXBpbGUgd2l0aCBkaWZmZXJlbnQgZmVhdHVyZXMuCisgICBJZiB0aGVyZSBhcmUgZXJyb3JzIHdoaWxlIGNvbXBpbGluZywgY2FyZWZ1bGx5IGxvb2sgYXQgdGhlIGVycm9yIG1lc3NhZ2VzLgorVGhlcmUgc2hvdWxkIGJlIGEgaGludCBhYm91dCB3aGF0IHdlbnQgd3JvbmcuICBIb3BlZnVsbHkgeW91IHdpbGwgYmUgYWJsZSB0bworY29ycmVjdCBpdC4gIFlvdSBtaWdodCBoYXZlIHRvIGRpc2FibGUgc29tZSBmZWF0dXJlcyB0byBtYWtlIFZpbSBjb21waWxlLgorTG9vayBpbiB0aGUgTWFrZWZpbGUgZm9yIHNwZWNpZmljIGhpbnRzIGZvciB5b3VyIHN5c3RlbS4KKworCitURVNUSU5HCisKK05vdyB5b3UgY2FuIGNoZWNrIGlmIGNvbXBpbGluZyB3b3JrZWQgT0s6ID4KKworCW1ha2UgdGVzdAorCitUaGlzIHdpbGwgcnVuIGEgc2VxdWVuY2Ugb2YgdGVzdCBzY3JpcHRzIHRvIHZlcmlmeSB0aGF0IFZpbSB3b3JrcyBhcyBleHBlY3RlZC4KK1ZpbSB3aWxsIGJlIHN0YXJ0ZWQgbWFueSB0aW1lcyBhbmQgYWxsIGtpbmRzIG9mIHRleHQgYW5kIG1lc3NhZ2VzIGZsYXNoIGJ5LgorSWYgaXQgaXMgYWxyaWdodCB5b3Ugd2lsbCBmaW5hbGx5IHNlZToKKworCXRlc3QgcmVzdWx0czogfgorCUFMTCBET05FIH4KKworSWYgdGhlcmUgYXJlIG9uZSBvciB0d28gbWVzc2FnZXMgYWJvdXQgZmFpbGVkIHRlc3RzLCBWaW0gbWlnaHQgc3RpbGwgd29yaywgYnV0Citub3QgcGVyZmVjdGx5LiAgSWYgeW91IHNlZSBhIGxvdCBvZiBlcnJvciBtZXNzYWdlcyBvciBWaW0gZG9lc24ndCBmaW5pc2ggdW50aWwKK3RoZSBlbmQsIHRoZXJlIG11c3QgYmUgc29tZXRoaW5nIHdyb25nLiAgRWl0aGVyIHRyeSB0byBmaW5kIG91dCB5b3Vyc2VsZiwgb3IKK2ZpbmQgc29tZW9uZSB3aG8gY2FuIHNvbHZlIGl0LiAgWW91IGNvdWxkIGxvb2sgaW4gdGhlIHxtYWlsbGlzdC1hcmNoaXZlfCBmb3IgYQorc29sdXRpb24uICBJZiBldmVyeXRoaW5nIGVsc2UgZmFpbHMsIHlvdSBjb3VsZCBhc2sgaW4gdGhlIHZpbSB8bWFpbGxpc3R8IGlmCitzb21lb25lIGNhbiBoZWxwIHlvdS4KKworCitJTlNUQUxMSU5HCisJCQkJCQkJKmluc3RhbGwtaG9tZSoKK0lmIHlvdSB3YW50IHRvIGluc3RhbGwgaW4geW91ciBob21lIGRpcmVjdG9yeSwgZWRpdCB0aGUgTWFrZWZpbGUgYW5kIHNlYXJjaAorZm9yIGEgbGluZToKKworCSNwcmVmaXggPSAkKEhPTUUpIH4KKworUmVtb3ZlIHRoZSAjIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKyAgIFdoZW4gaW5zdGFsbGluZyBmb3IgdGhlIHdob2xlIHN5c3RlbSwgVmltIGhhcyBtb3N0IGxpa2VseSBhbHJlYWR5IHNlbGVjdGVkCithIGdvb2QgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBmb3IgeW91LiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgb25lLCBzZWUgYmVsb3cuCitZb3UgbmVlZCB0byBiZWNvbWUgcm9vdCBmb3IgdGhlIGZvbGxvd2luZy4KKworVG8gaW5zdGFsbCBWaW0gZG86ID4KKworCW1ha2UgaW5zdGFsbAorCitUaGF0IHNob3VsZCBtb3ZlIGFsbCB0aGUgcmVsZXZhbnQgZmlsZXMgdG8gdGhlIHJpZ2h0IHBsYWNlLiAgTm93IHlvdSBjYW4gdHJ5CitydW5uaW5nIHZpbSB0byB2ZXJpZnkgdGhhdCBpdCB3b3Jrcy4gIFVzZSB0d28gc2ltcGxlIHRlc3RzIHRvIGNoZWNrIGlmIFZpbSBjYW4KK2ZpbmQgaXRzIHJ1bnRpbWUgZmlsZXM6ID4KKworCTpoZWxwCisJOnN5bnRheCBlbmFibGUKKworSWYgdGhpcyBkb2Vzbid0IHdvcmssIHVzZSB0aGlzIGNvbW1hbmQgdG8gY2hlY2sgd2hlcmUgVmltIGlzIGxvb2tpbmcgZm9yIHRoZQorcnVudGltZSBmaWxlczogPgorCisJOmVjaG8gJFZJTVJVTlRJTUUKKworWW91IGNhbiBhbHNvIHN0YXJ0IFZpbSB3aXRoIHRoZSAiLVYiIGFyZ3VtZW50IHRvIHNlZSB3aGF0IGhhcHBlbnMgZHVyaW5nCitzdGFydHVwOiA+CisKKwl2aW0gLVYKKworRG9uJ3QgZm9yZ2V0IHRoYXQgdGhlIHVzZXIgbWFudWFsIGFzc3VtZXMgeW91IFZpbSBpbiBhIGNlcnRhaW4gd2F5LiAgQWZ0ZXIKK2luc3RhbGxpbmcgVmltLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBhdCB8bm90LWNvbXBhdGlibGV8IHRvIG1ha2UgVmltIHdvcmsKK2FzIGFzc3VtZWQgaW4gdGhpcyBtYW51YWwuCisKKworU0VMRUNUSU5HIEZFQVRVUkVTCisKK1ZpbSBoYXMgbWFueSB3YXlzIHRvIHNlbGVjdCBmZWF0dXJlcy4gIE9uZSBvZiB0aGUgc2ltcGxlIHdheXMgaXMgdG8gZWRpdCB0aGUKK01ha2VmaWxlLiAgVGhlcmUgYXJlIG1hbnkgZGlyZWN0aW9ucyBhbmQgZXhhbXBsZXMuICBPZnRlbiB5b3UgY2FuIGVuYWJsZSBvcgorZGlzYWJsZSBhIGZlYXR1cmUgYnkgdW5jb21tZW50aW5nIGEgbGluZS4KKyAgIEFuIGFsdGVybmF0aXZlIGlzIHRvIHJ1biAiY29uZmlndXJlIiBzZXBhcmF0ZWx5LiAgVGhpcyBhbGxvd3MgeW91IHRvCitzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtYW51YWxseS4gIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgaGF2ZSB0bworZmlndXJlIG91dCB3aGF0IGV4YWN0bHkgdG8gdHlwZS4KKyAgIFNvbWUgb2YgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY29uZmlndXJlIGFyZ3VtZW50cyBmb2xsb3cuICBUaGVzZSBjYW4gYWxzbyBiZQorZW5hYmxlZCBmcm9tIHRoZSBNYWtlZmlsZS4KKworCS0tcHJlZml4PXtkaXJlY3Rvcnl9CQlUb3AgZGlyZWN0b3J5IHdoZXJlIHRvIGluc3RhbGwgVmltLgorCisJLS13aXRoLWZlYXR1cmVzPXRpbnkJCUNvbXBpbGUgd2l0aCBtYW55IGZlYXR1cmVzIGRpc2FibGVkLgorCS0td2l0aC1mZWF0dXJlcz1zbWFsbAkJQ29tcGlsZSB3aXRoIHNvbWUgZmVhdHVyZXMgZGlzYWJsZWQuCisJLS13aXRoLWZlYXR1cmVzPWJpZwkJQ29tcGlsZSB3aXRoIG1vcmUgZmVhdHVyZXMgZW5hYmxlZC4KKwktLXdpdGgtZmVhdHVyZXM9aHVnZQkJQ29tcGlsZSB3aXRoIG1vc3QgZmVhdHVyZXMgZW5hYmxlZC4KKwkJCQkJU2VlIHwrZmVhdHVyZS1saXN0fCBmb3Igd2hpY2ggZmVhdHVyZQorCQkJCQlpcyBlbmFibGVkIGluIHdoaWNoIGNhc2UuCisKKwktLWVuYWJsZS1wZXJsaW50ZXJwCQlFbmFibGUgdGhlIFBlcmwgaW50ZXJmYWNlLiAgVGhlcmUgYXJlCisJCQkJCXNpbWlsYXIgYXJndW1lbnRzIGZvciBydWJ5LCBweXRob24gYW5kCisJCQkJCXRjbC4KKworCS0tZGlzYWJsZS1ndWkJCQlEbyBub3QgY29tcGlsZSB0aGUgR1VJIGludGVyZmFjZS4KKwktLXdpdGhvdXQteAkJCURvIG5vdCBjb21waWxlIFgtd2luZG93cyBmZWF0dXJlcy4KKwkJCQkJV2hlbiBib3RoIG9mIHRoZXNlIGFyZSB1c2VkLCBWaW0gd2lsbAorCQkJCQlub3QgY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIsIHdoaWNoCisJCQkJCW1ha2VzIHN0YXJ0dXAgZmFzdGVyLgorCitUbyBzZWUgdGhlIHdob2xlIGxpc3QgdXNlOiA+CisKKwkuL2NvbmZpZ3VyZSAtLWhlbHAKKworWW91IGNhbiBmaW5kIGEgYml0IG9mIGV4cGxhbmF0aW9uIGZvciBlYWNoIGZlYXR1cmUsIGFuZCBsaW5rcyBmb3IgbW9yZQoraW5mb3JtYXRpb24gaGVyZTogfGZlYXR1cmUtbGlzdHwuCisgICBGb3IgdGhlIGFkdmVudHVyb3VzLCBlZGl0IHRoZSBmaWxlICJmZWF0dXJlLmgiLiAgWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUKK3NvdXJjZSBjb2RlIHlvdXJzZWxmIQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo5MC4yKglNUy1XaW5kb3dzCisKK1RoZXJlIGFyZSB0d28gd2F5cyB0byBpbnN0YWxsIHRoZSBWaW0gcHJvZ3JhbSBmb3IgTWljcm9zb2Z0IFdpbmRvd3MuICBZb3UgY2FuCit1bmNvbXByZXNzIHNldmVyYWwgYXJjaGl2ZXMsIG9yIHVzZSBhIHNlbGYtaW5zdGFsbGluZyBiaWcgYXJjaGl2ZS4gIE1vc3QgdXNlcnMKK3dpdGggZmFpcmx5IHJlY2VudCBjb21wdXRlcnMgd2lsbCBwcmVmZXIgdGhlIHNlY29uZCBtZXRob2QuICBGb3IgdGhlIGZpcnN0CitvbmUsIHlvdSB3aWxsIG5lZWQ6CisKKwktIEFuIGFyY2hpdmUgd2l0aCBiaW5hcmllcyBmb3IgVmltLgorCS0gVGhlIFZpbSBydW50aW1lIGFyY2hpdmUuCisJLSBBIHByb2dyYW0gdG8gdW5wYWNrIHRoZSB6aXAgZmlsZXMuCisKK1RvIGdldCB0aGUgVmltIGFyY2hpdmVzLCBsb29rIGluIHRoaXMgZmlsZSBmb3IgYSBtaXJyb3IgbmVhciB5b3UsIHRoaXMgc2hvdWxkCitwcm92aWRlIHRoZSBmYXN0ZXN0IGRvd25sb2FkOgorCisJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS9NSVJST1JTIH4KKworT3IgdXNlIHRoZSBob21lIHNpdGUgZnRwLnZpbS5vcmcsIGlmIHlvdSB0aGluayBpdCdzIGZhc3QgZW5vdWdoLiAgR28gdG8gdGhlCisicGMiIGRpcmVjdG9yeSBhbmQgeW91J2xsIGZpbmQgYSBsaXN0IG9mIGZpbGVzIHRoZXJlLiAgVGhlIHZlcnNpb24gbnVtYmVyIGlzCitlbWJlZGRlZCBpbiB0aGUgZmlsZSBuYW1lLiAgWW91IHdpbGwgd2FudCB0byBnZXQgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24uCitXZSB3aWxsIHVzZSAiNjEiIGhlcmUsIHdoaWNoIGlzIHZlcnNpb24gNi4xLgorCisJZ3ZpbTYxLmV4ZQkJVGhlIHNlbGYtaW5zdGFsbGluZyBhcmNoaXZlLgorCitUaGlzIGlzIGFsbCB5b3UgbmVlZCBmb3IgdGhlIHNlY29uZCBtZXRob2QuICBKdXN0IGxhdW5jaCB0aGUgZXhlY3V0YWJsZSwgYW5kCitmb2xsb3cgdGhlIHByb21wdHMuCisKK0ZvciB0aGUgZmlyc3QgbWV0aG9kIHlvdSBtdXN0IGNob3NlIG9uZSBvZiB0aGUgYmluYXJ5IGFyY2hpdmVzLiAgVGhlc2UgYXJlCithdmFpbGFibGU6CisKKwlndmltNjEuemlwCQlUaGUgbm9ybWFsIE1TLVdpbmRvd3MgR1VJIHZlcnNpb24uCisJZ3ZpbTYxb2xlLnppcAkJVGhlIE1TLVdpbmRvd3MgR1VJIHZlcnNpb24gd2l0aCBPTEUgc3VwcG9ydC4KKwkJCQlVc2VzIG1vcmUgbWVtb3J5LCBzdXBwb3J0cyBpbnRlcmZhY2luZyB3aXRoCisJCQkJb3RoZXIgT0xFIGFwcGxpY2F0aW9ucy4KKwl2aW02MXczMi56aXAJCTMyIGJpdCBNUy1XaW5kb3dzIGNvbnNvbGUgdmVyc2lvbi4gIEZvciB1c2UgaW4KKwkJCQlhIFdpbiBOVC8yMDAwL1hQIGNvbnNvbGUuICBEb2VzIG5vdCB3b3JrIHdlbGwKKwkJCQlvbiBXaW4gOTUvOTguCisJdmltNjFkMzIuemlwCQkzMiBiaXQgTVMtRE9TIHZlcnNpb24uICBGb3IgdXNlIGluIHRoZQorCQkJCVdpbiA5NS85OCBjb25zb2xlIHdpbmRvdy4KKwl2aW02MWQxNi56aXAJCTE2IGJpdCBNUy1ET1MgdmVyc2lvbi4gIE9ubHkgZm9yIG9sZCBzeXN0ZW1zLgorCQkJCURvZXMgbm90IHN1cHBvcnQgbG9uZyBmaWxlbmFtZXMuCisKK1lvdSBvbmx5IG5lZWQgb25lIG9mIHRoZW0uICBBbHRob3VnaCB5b3UgY291bGQgaW5zdGFsbCBib3RoIGEgR1VJIGFuZCBhCitjb25zb2xlIHZlcnNpb24uICBZb3UgYWx3YXlzIG5lZWQgdG8gZ2V0IHRoZSBhcmNoaXZlIHdpdGggcnVudGltZSBmaWxlcy4KKworCXZpbTYxcnQuemlwCQlUaGUgcnVudGltZSBmaWxlcy4KKworVXNlIHlvdXIgdW4temlwIHByb2dyYW0gdG8gdW5wYWNrIHRoZSBmaWxlcy4gIEZvciBleGFtcGxlLCB1c2luZyB0aGUgInVuemlwIgorcHJvZ3JhbTogPgorCisJY2QgYzpcCisJdW56aXAgcGF0aFxndmltNjEuemlwCisJdW56aXAgcGF0aFx2aW02MXJ0LnppcAorCitUaGlzIHdpbGwgdW5wYWNrIHRoZSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5ICJjOlx2aW1cdmltNjEiLiAgSWYgeW91IGFscmVhZHkKK2hhdmUgYSAidmltIiBkaXJlY3Rvcnkgc29tZXdoZXJlLCB5b3Ugd2lsbCB3YW50IHRvIG1vdmUgdG8gdGhlIGRpcmVjdG9yeSBqdXN0CithYm92ZSBpdC4KKyAgIE5vdyBjaGFuZ2UgdG8gdGhlICJ2aW1cdmltNjEiIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBpbnN0YWxsIHByb2dyYW06ID4KKworCWluc3RhbGwKKworQ2FyZWZ1bGx5IGxvb2sgdGhyb3VnaCB0aGUgbWVzc2FnZXMgYW5kIHNlbGVjdCB0aGUgb3B0aW9ucyB5b3Ugd2FudCB0byB1c2UuCitJZiB5b3UgZmluYWxseSBzZWxlY3QgImRvIGl0IiB0aGUgaW5zdGFsbCBwcm9ncmFtIHdpbGwgY2Fycnkgb3V0IHRoZSBhY3Rpb25zCit5b3Ugc2VsZWN0ZWQuCisgICBUaGUgaW5zdGFsbCBwcm9ncmFtIGRvZXNuJ3QgbW92ZSB0aGUgcnVudGltZSBmaWxlcy4gIFRoZXkgcmVtYWluIHdoZXJlIHlvdQordW5wYWNrZWQgdGhlbS4KKworSW4gY2FzZSB5b3UgYXJlIG5vdCBzYXRpc2ZpZWQgd2l0aCB0aGUgZmVhdHVyZXMgaW5jbHVkZWQgaW4gdGhlIHN1cHBsaWVkCitiaW5hcmllcywgeW91IGNvdWxkIHRyeSBjb21waWxpbmcgVmltIHlvdXJzZWxmLiAgR2V0IHRoZSBzb3VyY2UgYXJjaGl2ZSBmcm9tCit0aGUgc2FtZSBsb2NhdGlvbiBhcyB3aGVyZSB0aGUgYmluYXJpZXMgYXJlLiAgWW91IG5lZWQgYSBjb21waWxlciBmb3Igd2hpY2ggYQorbWFrZWZpbGUgZXhpc3RzLiAgTWljcm9zb2Z0IFZpc3VhbCBDIHdvcmtzLCBidXQgaXMgZXhwZW5zaXZlLiAgVGhlIEZyZWUKK0JvcmxhbmQgY29tbWFuZC1saW5lIGNvbXBpbGVyIDUuNSBjYW4gYmUgdXNlZCwgYXMgd2VsbCBhcyB0aGUgZnJlZSBNaW5nVyBhbmQKK0N5Z3dpbiBjb21waWxlcnMuICBDaGVjayB0aGUgZmlsZSBzcmMvSU5TVEFMTHBjLnR4dCBmb3IgaGludHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKjkwLjMqCVVwZ3JhZGluZworCitJZiB5b3UgYXJlIHJ1bm5pbmcgb25lIHZlcnNpb24gb2YgVmltIGFuZCB3YW50IHRvIGluc3RhbGwgYW5vdGhlciwgaGVyZSBpcword2hhdCB0byBkby4KKworCitVTklYCisKK1doZW4geW91IHR5cGUgIm1ha2UgaW5zdGFsbCIgdGhlIHJ1bnRpbWUgZmlsZXMgd2lsbCBiZSBjb3BpZWQgdG8gYSBkaXJlY3RvcnkKK3doaWNoIGlzIHNwZWNpZmljIGZvciB0aGlzIHZlcnNpb24uICBUaHVzIHRoZXkgd2lsbCBub3Qgb3ZlcndyaXRlIGEgcHJldmlvdXMKK3ZlcnNpb24uICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSB0d28gb3IgbW9yZSB2ZXJzaW9ucyBuZXh0IHRvCitlYWNoIG90aGVyLgorICAgVGhlIGV4ZWN1dGFibGUgInZpbSIgd2lsbCBvdmVyd3JpdGUgYW4gb2xkZXIgdmVyc2lvbi4gIElmIHlvdSBkb24ndCBjYXJlCithYm91dCBrZWVwaW5nIHRoZSBvbGQgdmVyc2lvbiwgcnVubmluZyAibWFrZSBpbnN0YWxsIiB3aWxsIHdvcmsgZmluZS4gIFlvdSBjYW4KK2RlbGV0ZSB0aGUgb2xkIHJ1bnRpbWUgZmlsZXMgbWFudWFsbHkuICBKdXN0IGRlbGV0ZSB0aGUgZGlyZWN0b3J5IHdpdGggdGhlCit2ZXJzaW9uIG51bWJlciBpbiBpdCBhbmQgYWxsIGZpbGVzIGJlbG93IGl0LiAgRXhhbXBsZTogPgorCisJcm0gLXJmIC91c3IvbG9jYWwvc2hhcmUvdmltL3ZpbTU4CisKK1RoZXJlIGFyZSBub3JtYWxseSBubyBjaGFuZ2VkIGZpbGVzIGJlbG93IHRoaXMgZGlyZWN0b3J5LiAgSWYgeW91IGRpZCBjaGFuZ2UKK3RoZSAiZmlsZXR5cGUudmltIiBmaWxlLCBmb3IgZXhhbXBsZSwgeW91IGJldHRlciBtZXJnZSB0aGUgY2hhbmdlcyBpbnRvIHRoZQorbmV3IHZlcnNpb24gYmVmb3JlIGRlbGV0aW5nIGl0LgorCitJZiB5b3UgYXJlIGNhcmVmdWwgYW5kIHdhbnQgdG8gdHJ5IG91dCB0aGUgbmV3IHZlcnNpb24gZm9yIGEgd2hpbGUgYmVmb3JlCitzd2l0Y2hpbmcgdG8gaXQsIGluc3RhbGwgdGhlIG5ldyB2ZXJzaW9uIHVuZGVyIGFub3RoZXIgbmFtZS4gIFlvdSBuZWVkIHRvCitzcGVjaWZ5IGEgY29uZmlndXJlIGFyZ3VtZW50LiAgRm9yIGV4YW1wbGU6ID4KKworCS4vY29uZmlndXJlIC0td2l0aC12aW0tbmFtZT12aW02CisKK0JlZm9yZSBydW5uaW5nICJtYWtlIGluc3RhbGwiLCB5b3UgY291bGQgdXNlICJtYWtlIC1uIGluc3RhbGwiIHRvIGNoZWNrIHRoYXQKK25vIHZhbHVhYmxlIGV4aXN0aW5nIGZpbGVzIGFyZSBvdmVyd3JpdHRlbi4KKyAgIFdoZW4geW91IGZpbmFsbHkgZGVjaWRlIHRvIHN3aXRjaCB0byB0aGUgbmV3IHZlcnNpb24sIGFsbCB5b3UgbmVlZCB0byBkbyBpcwordG8gcmVuYW1lIHRoZSBiaW5hcnkgdG8gInZpbSIuICBGb3IgZXhhbXBsZTogPgorCisJbXYgL3Vzci9sb2NhbC9iaW4vdmltNiAvdXNyL2xvY2FsL2Jpbi92aW0KKworCitNUy1XSU5ET1dTCisKK1VwZ3JhZGluZyBpcyBtb3N0bHkgZXF1YWwgdG8gaW5zdGFsbGluZyBhIG5ldyB2ZXJzaW9uLiAgSnVzdCB1bnBhY2sgdGhlIGZpbGVzCitpbiB0aGUgc2FtZSBwbGFjZSBhcyB0aGUgcHJldmlvdXMgdmVyc2lvbi4gIEEgbmV3IGRpcmVjdG9yeSB3aWxsIGJlIGNyZWF0ZWQsCitlLmcuLCAidmltNjEiLCBmb3IgdGhlIGZpbGVzIG9mIHRoZSBuZXcgdmVyc2lvbi4gIFlvdXIgcnVudGltZSBmaWxlcywgdmltcmMKK2ZpbGUsIHZpbWluZm8sIGV0Yy4gd2lsbCBiZSBsZWZ0IGFsb25lLgorICAgSWYgeW91IHdhbnQgdG8gcnVuIHRoZSBuZXcgdmVyc2lvbiBuZXh0IHRvIHRoZSBvbGQgb25lLCB5b3Ugd2lsbCBoYXZlIHRvIGRvCitzb21lIGhhbmR3b3JrLiAgRG9uJ3QgcnVuIHRoZSBpbnN0YWxsIHByb2dyYW0sIGl0IHdpbGwgb3ZlcndyaXRlIGEgZmV3IGZpbGVzCitvZiB0aGUgb2xkIHZlcnNpb24uICBFeGVjdXRlIHRoZSBuZXcgYmluYXJpZXMgYnkgc3BlY2lmeWluZyB0aGUgZnVsbCBwYXRoLgorVGhlIHByb2dyYW0gc2hvdWxkIGJlIGFibGUgdG8gYXV0b21hdGljYWxseSBmaW5kIHRoZSBydW50aW1lIGZpbGVzIGZvciB0aGUKK3JpZ2h0IHZlcnNpb24uICBIb3dldmVyLCB0aGlzIHdvbid0IHdvcmsgaWYgeW91IHNldCB0aGUgJFZJTVJVTlRJTUUgdmFyaWFibGUKK3NvbWV3aGVyZS4KKyAgIElmIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIHVwZ3JhZGUsIHlvdSBjYW4gZGVsZXRlIHRoZSBmaWxlcyBvZiB0aGUKK3ByZXZpb3VzIHZlcnNpb24uICBTZWUgfDkwLjV8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo5MC40KglDb21tb24gaW5zdGFsbGF0aW9uIGlzc3VlcworCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNvbWUgb2YgdGhlIGNvbW1vbiBwcm9ibGVtcyB0aGF0IG9jY3VyIHdoZW4gaW5zdGFsbGluZworVmltIGFuZCBzdWdnZXN0cyBzb21lIHNvbHV0aW9ucy4gIEl0IGFsc28gY29udGFpbnMgYW5zd2VycyB0byBtYW55CitpbnN0YWxsYXRpb24gcXVlc3Rpb25zLgorCisKK1E6IEkgRG8gTm90IEhhdmUgUm9vdCBQcml2aWxlZ2VzLiAgSG93IERvIEkgSW5zdGFsbCBWaW0/IChVbml4KQorCitVc2UgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGNvbW1hbmQgdG8gaW5zdGFsbCBWaW0gaW4gYSBkaXJlY3RvcnkgY2FsbGVkCiskSE9NRS92aW06ID4KKworCS4vY29uZmlndXJlIC0tcHJlZml4PSRIT01FCisKK1RoaXMgZ2l2ZXMgeW91IGEgcGVyc29uYWwgY29weSBvZiBWaW0uICBZb3UgbmVlZCB0byBwdXQgJEhPTUUvYmluIGluIHlvdXIKK3BhdGggdG8gZXhlY3V0ZSB0aGUgZWRpdG9yLiAgQWxzbyBzZWUgfGluc3RhbGwtaG9tZXwuCisKKworUTogVGhlIENvbG9ycyBBcmUgTm90IFJpZ2h0IG9uIE15IFNjcmVlbi4gKFVuaXgpCisKK0NoZWNrIHlvdXIgdGVybWluYWwgc2V0dGluZ3MgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIGEgc2hlbGw6ID4KKworCWVjaG8gJFRFUk0KKworSWYgdGhlIHRlcm1pbmFsIHR5cGUgbGlzdGVkIGlzIG5vdCBjb3JyZWN0LCBmaXggaXQuICBGb3IgbW9yZSBoaW50cywgc2VlCit8MDYuMnwuICBBbm90aGVyIHNvbHV0aW9uIGlzIHRvIGFsd2F5cyB1c2UgdGhlIEdVSSB2ZXJzaW9uIG9mIFZpbSwgY2FsbGVkCitndmltLiAgVGhpcyBhdm9pZHMgdGhlIG5lZWQgZm9yIGEgY29ycmVjdCB0ZXJtaW5hbCBzZXR1cC4KKworCitROiBNeSBCYWNrc3BhY2UgQW5kIERlbGV0ZSBLZXlzIERvbid0IFdvcmsgUmlnaHQKKworVGhlIGRlZmluaXRpb24gb2Ygd2hhdCBrZXkgc2VuZHMgd2hhdCBjb2RlIGlzIHZlcnkgdW5jbGVhciBmb3IgYmFja3NwYWNlIDxCUz4KK2FuZCBEZWxldGUgPERlbD4ga2V5cy4gIEZpcnN0IG9mIGFsbCwgY2hlY2sgeW91ciAkVEVSTSBzZXR0aW5nLiAgSWYgdGhlcmUgaXMKK25vdGhpbmcgd3Jvbmcgd2l0aCBpdCwgdHJ5IHRoaXM6ID4KKworCTpzZXQgdF9rYj1eVjxCUz4KKwk6c2V0IHRfa0Q9XlY8RGVsPgorCitJbiB0aGUgZmlyc3QgbGluZSB5b3UgbmVlZCB0byBwcmVzcyBDVFJMLVYgYW5kIHRoZW4gaGl0IHRoZSBiYWNrc3BhY2Uga2V5LgorSW4gdGhlIHNlY29uZCBsaW5lIHlvdSBuZWVkIHRvIHByZXNzIENUUkwtViBhbmQgdGhlbiBoaXQgdGhlIERlbGV0ZSBrZXkuCitZb3UgY2FuIHB1dCB0aGVzZSBsaW5lcyBpbiB5b3VyIHZpbXJjIGZpbGUsIHNlZSB8MDUuMXwuICBBIGRpc2FkdmFudGFnZSBpcwordGhhdCBpdCB3b24ndCB3b3JrIHdoZW4geW91IHVzZSBhbm90aGVyIHRlcm1pbmFsIHNvbWUgZGF5LiAgTG9vayBoZXJlIGZvcgorYWx0ZXJuYXRlIHNvbHV0aW9uczogfDpmaXhkZWx8LgorCisKK1E6IEkgQW0gVXNpbmcgUmVkSGF0IExpbnV4LiAgQ2FuIEkgVXNlIHRoZSBWaW0gVGhhdCBDb21lcyB3aXRoIHRoZSBTeXN0ZW0/CisKK0J5IGRlZmF1bHQgUmVkSGF0IGluc3RhbGxzIGEgbWluaW1hbCB2ZXJzaW9uIG9mIFZpbS4gIENoZWNrIHlvdXIgUlBNIHBhY2thZ2VzCitmb3Igc29tZXRoaW5nIG5hbWVkICJWaW0tZW5oYW5jZWQtdmVyc2lvbi5ycG0iIGFuZCBpbnN0YWxsIHRoYXQuCisKKworUTogSG93IERvIEkgVHVybiBTeW50YXggQ29sb3JpbmcgT24/ICBIb3cgZG8gSSBtYWtlIHBsdWdpbnMgd29yaz8KKworVXNlIHRoZSBleGFtcGxlIHZpbXJjIHNjcmlwdC4gIFlvdSBjYW4gZmluZCBhbiBleHBsYW5hdGlvbiBvbiBob3cgdG8gdXNlIGl0CitoZXJlOiB8bm90LWNvbXBhdGlibGV8LgorCitTZWUgY2hhcHRlciA2IGZvciBpbmZvcm1hdGlvbiBhYm91dCBzeW50YXggaGlnaGxpZ2h0aW5nOiB8dXNyXzA2LnR4dHwuCisKKworUTogV2hhdCBJcyBhIEdvb2QgdmltcmMgRmlsZSB0byBVc2U/CisKK1NlZSB0aGUgd3d3LnZpbS5vcmcgV2ViIHNpdGUgZm9yIHNldmVyYWwgZ29vZCBleGFtcGxlcy4KKworCitROiBXaGVyZSBEbyBJIEZpbmQgYSBHb29kIFZpbSBQbHVnaW4/CisKK1NlZSB0aGUgVmltLW9ubGluZSBzaXRlOiBodHRwOi8vdmltLnNmLm5ldC4gIE1hbnkgdXNlcnMgaGF2ZSB1cGxvYWRlZCB1c2VmdWwKK1ZpbSBzY3JpcHRzIGFuZCBwbHVnaW5zIHRoZXJlLgorCisKK1E6IFdoZXJlIERvIEkgRmluZCBNb3JlIFRpcHM/CisKK1NlZSB0aGUgVmltLW9ubGluZSBzaXRlOiBodHRwOi8vdmltLnNmLm5ldC4gIFRoZXJlIGlzIGFuIGFyY2hpdmUgd2l0aCBoaW50cworZnJvbSBWaW0gdXNlcnMuICBZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHNlYXJjaCBpbiB0aGUgfG1haWxsaXN0LWFyY2hpdmV8LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyo5MC41KglVbmluc3RhbGxpbmcgVmltCisKK0luIHRoZSB1bmxpa2VseSBldmVudCB5b3Ugd2FudCB0byB1bmluc3RhbGwgVmltIGNvbXBsZXRlbHksIHRoaXMgaXMgaG93IHlvdSBkbworaXQuCisKKworVU5JWAorCitXaGVuIHlvdSBpbnN0YWxsZWQgVmltIGFzIGEgcGFja2FnZSwgY2hlY2sgeW91ciBwYWNrYWdlIG1hbmFnZXIgdG8gZmluZCBvdXQKK2hvdyB0byByZW1vdmUgdGhlIHBhY2thZ2UgYWdhaW4uCisgICBJZiB5b3UgaW5zdGFsbGVkIFZpbSBmcm9tIHNvdXJjZXMgeW91IGNhbiB1c2UgdGhpcyBjb21tYW5kOiA+CisKKwltYWtlIHVuaW5zdGFsbAorCitIb3dldmVyLCBpZiB5b3UgaGF2ZSBkZWxldGVkIHRoZSBvcmlnaW5hbCBmaWxlcyBvciB5b3UgdXNlZCBhbiBhcmNoaXZlIHRoYXQKK3NvbWVvbmUgc3VwcGxpZWQsIHlvdSBjYW4ndCBkbyB0aGlzLiAgRG8gZGVsZXRlIHRoZSBmaWxlcyBtYW51YWxseSwgaGVyZSBpcyBhbgorZXhhbXBsZSBmb3Igd2hlbiAiL3Vzci9sb2NhbCIgd2FzIHVzZWQgYXMgdGhlIHJvb3Q6ID4KKworCXJtIC1yZiAvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02MQorCXJtIC91c3IvbG9jYWwvYmluL2V2aWV3CisJcm0gL3Vzci9sb2NhbC9iaW4vZXZpbQorCXJtIC91c3IvbG9jYWwvYmluL2V4CisJcm0gL3Vzci9sb2NhbC9iaW4vZ3ZpZXcKKwlybSAvdXNyL2xvY2FsL2Jpbi9ndmltCisJcm0gL3Vzci9sb2NhbC9iaW4vZ3ZpbQorCXJtIC91c3IvbG9jYWwvYmluL2d2aW1kaWZmCisJcm0gL3Vzci9sb2NhbC9iaW4vcmd2aWV3CisJcm0gL3Vzci9sb2NhbC9iaW4vcmd2aW0KKwlybSAvdXNyL2xvY2FsL2Jpbi9ydmlldworCXJtIC91c3IvbG9jYWwvYmluL3J2aW0KKwlybSAvdXNyL2xvY2FsL2Jpbi9ydmltCisJcm0gL3Vzci9sb2NhbC9iaW4vdmlldworCXJtIC91c3IvbG9jYWwvYmluL3ZpbQorCXJtIC91c3IvbG9jYWwvYmluL3ZpbWRpZmYKKwlybSAvdXNyL2xvY2FsL2Jpbi92aW10dXRvcgorCXJtIC91c3IvbG9jYWwvYmluL3h4ZAorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvZXZpZXcuMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvZXZpbS4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9leC4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9ndmlldy4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9ndmltLjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL2d2aW1kaWZmLjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL3Jndmlldy4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9yZ3ZpbS4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9ydmlldy4xCisJcm0gL3Vzci9sb2NhbC9tYW4vbWFuMS9ydmltLjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL3ZpZXcuMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvdmltLjEKKwlybSAvdXNyL2xvY2FsL21hbi9tYW4xL3ZpbWRpZmYuMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEvdmltdHV0b3IuMQorCXJtIC91c3IvbG9jYWwvbWFuL21hbjEveHhkLjEKKworCitNUy1XSU5ET1dTCisKK0lmIHlvdSBpbnN0YWxsZWQgVmltIHdpdGggdGhlIHNlbGYtaW5zdGFsbGluZyBhcmNoaXZlIHlvdSBjYW4gcnVuCit0aGUgInVuaW5zdGFsbC1ndWkiIHByb2dyYW0gbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG90aGVyIFZpbQorcHJvZ3JhbXMsIGUuZy4gImM6XHZpbVx2aW02MSIuICBZb3UgY2FuIGFsc28gbGF1bmNoIGl0IGZyb20gdGhlIFN0YXJ0IG1lbnUgaWYKK2luc3RhbGxlZCB0aGUgVmltIGVudHJpZXMgdGhlcmUuICBUaGlzIHdpbGwgcmVtb3ZlIG1vc3Qgb2YgdGhlIGZpbGVzLCBtZW51CitlbnRyaWVzIGFuZCBkZXNrdG9wIHNob3J0Y3V0cy4gIFNvbWUgZmlsZXMgbWF5IHJlbWFpbiBob3dldmVyLCBhcyB0aGV5IG5lZWQgYQorV2luZG93cyByZXN0YXJ0IGJlZm9yZSBiZWluZyBkZWxldGVkLgorICAgWW91IHdpbGwgYmUgZ2l2ZW4gdGhlIG9wdGlvbiB0byByZW1vdmUgdGhlIHdob2xlICJ2aW0iIGRpcmVjdG9yeS4gIEl0Citwcm9iYWJseSBjb250YWlucyB5b3VyIHZpbXJjIGZpbGUgYW5kIG90aGVyIHJ1bnRpbWUgZmlsZXMgdGhhdCB5b3UgY3JlYXRlZCwgc28KK2JlIGNhcmVmdWwuCisKK0Vsc2UsIGlmIHlvdSBpbnN0YWxsZWQgVmltIHdpdGggdGhlIHppcCBhcmNoaXZlcywgdGhlIHByZWZlcnJlZCB3YXkgaXMgdG8gdXNlCit0aGUgInVuaW5zdGFsIiBwcm9ncmFtIChub3RlIHRoZSBtaXNzaW5nIGwgYXQgdGhlIGVuZCkuICBZb3UgY2FuIGZpbmQgaXQgaW4KK3RoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgImluc3RhbGwiIHByb2dyYW0sIGUuZy4sICJjOlx2aW1cdmltNjEiLiAgVGhpcworc2hvdWxkIGFsc28gd29yayBmcm9tIHRoZSB1c3VhbCAiaW5zdGFsbC9yZW1vdmUgc29mdHdhcmUiIHBhZ2UuCisgICBIb3dldmVyLCB0aGlzIG9ubHkgcmVtb3ZlcyB0aGUgcmVnaXN0cnkgZW50cmllcyBmb3IgVmltLiAgWW91IGhhdmUgdG8KK2RlbGV0ZSB0aGUgZmlsZXMgeW91cnNlbGYuICBTaW1wbHkgc2VsZWN0IHRoZSBkaXJlY3RvcnkgInZpbVx2aW02MSIgYW5kIGRlbGV0ZQoraXQgcmVjdXJzaXZlbHkuICBUaGVyZSBzaG91bGQgYmUgbm8gZmlsZXMgdGhlcmUgdGhhdCB5b3UgY2hhbmdlZCwgYnV0IHlvdQorbWlnaHQgd2FudCB0byBjaGVjayB0aGF0IGZpcnN0LgorICAgVGhlICJ2aW0iIGRpcmVjdG9yeSBwcm9iYWJseSBjb250YWlucyB5b3VyIHZpbXJjIGZpbGUgYW5kIG90aGVyIHJ1bnRpbWUKK2ZpbGVzIHRoYXQgeW91IGNyZWF0ZWQuICBZb3UgbWlnaHQgd2FudCB0byBrZWVwIHRoYXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUYWJsZSBvZiBjb250ZW50czogfHVzcl90b2MudHh0fAorCitDb3B5cmlnaHQ6IHNlZSB8bWFudWFsLWNvcHlyaWdodHwgIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Vzcl90b2MudHh0IGIvcnVudGltZS9kb2MvdXNyX3RvYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3MWRkYQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3Vzcl90b2MudHh0CkBAIC0wLDAgKzEsMzQwIEBACisqdXNyX3RvYy50eHQqCUZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDAzIEF1ZyAxOAorCisJCSAgICAgVklNIFVTRVIgTUFOVUFMIC0gYnkgQnJhbSBNb29sZW5hYXIKKworCQkJICAgICAgVGFibGUgT2YgQ29udGVudHMJCQkqdXNlci1tYW51YWwqCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorT3ZlcnZpZXcgfgorCitHZXR0aW5nIFN0YXJ0ZWQKK3x1c3JfMDEudHh0fCAgQWJvdXQgdGhlIG1hbnVhbHMKK3x1c3JfMDIudHh0fCAgVGhlIGZpcnN0IHN0ZXBzIGluIFZpbQorfHVzcl8wMy50eHR8ICBNb3ZpbmcgYXJvdW5kCit8dXNyXzA0LnR4dHwgIE1ha2luZyBzbWFsbCBjaGFuZ2VzCit8dXNyXzA1LnR4dHwgIFNldCB5b3VyIHNldHRpbmdzCit8dXNyXzA2LnR4dHwgIFVzaW5nIHN5bnRheCBoaWdobGlnaHRpbmcKK3x1c3JfMDcudHh0fCAgRWRpdGluZyBtb3JlIHRoYW4gb25lIGZpbGUKK3x1c3JfMDgudHh0fCAgU3BsaXR0aW5nIHdpbmRvd3MKK3x1c3JfMDkudHh0fCAgVXNpbmcgdGhlIEdVSQorfHVzcl8xMC50eHR8ICBNYWtpbmcgYmlnIGNoYW5nZXMKK3x1c3JfMTEudHh0fCAgUmVjb3ZlcmluZyBmcm9tIGEgY3Jhc2gKK3x1c3JfMTIudHh0fCAgQ2xldmVyIHRyaWNrcworCitFZGl0aW5nIEVmZmVjdGl2ZWx5Cit8dXNyXzIwLnR4dHwgIFR5cGluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMgcXVpY2tseQorfHVzcl8yMS50eHR8ICBHbyBhd2F5IGFuZCBjb21lIGJhY2sKK3x1c3JfMjIudHh0fCAgRmluZGluZyB0aGUgZmlsZSB0byBlZGl0Cit8dXNyXzIzLnR4dHwgIEVkaXRpbmcgb3RoZXIgZmlsZXMKK3x1c3JfMjQudHh0fCAgSW5zZXJ0aW5nIHF1aWNrbHkKK3x1c3JfMjUudHh0fCAgRWRpdGluZyBmb3JtYXR0ZWQgdGV4dAorfHVzcl8yNi50eHR8ICBSZXBlYXRpbmcKK3x1c3JfMjcudHh0fCAgU2VhcmNoIGNvbW1hbmRzIGFuZCBwYXR0ZXJucworfHVzcl8yOC50eHR8ICBGb2xkaW5nCit8dXNyXzI5LnR4dHwgIE1vdmluZyB0aHJvdWdoIHByb2dyYW1zCit8dXNyXzMwLnR4dHwgIEVkaXRpbmcgcHJvZ3JhbXMKK3x1c3JfMzEudHh0fCAgRXhwbG9pdGluZyB0aGUgR1VJCisKK1R1bmluZyBWaW0KK3x1c3JfNDAudHh0fCAgTWFrZSBuZXcgY29tbWFuZHMKK3x1c3JfNDEudHh0fCAgV3JpdGUgYSBWaW0gc2NyaXB0Cit8dXNyXzQyLnR4dHwgIEFkZCBuZXcgbWVudXMKK3x1c3JfNDMudHh0fCAgVXNpbmcgZmlsZXR5cGVzCit8dXNyXzQ0LnR4dHwgIFlvdXIgb3duIHN5bnRheCBoaWdobGlnaHRlZAorfHVzcl80NS50eHR8ICBTZWxlY3QgeW91ciBsYW5ndWFnZQorCitNYWtpbmcgVmltIFJ1bgorfHVzcl85MC50eHR8ICBJbnN0YWxsaW5nIFZpbQorCisKK1RoZSB1c2VyIG1hbnVhbCBpcyBhdmFpbGFibGUgYXMgYSBzaW5nbGUsIHJlYWR5IHRvIHByaW50IEhUTUwgYW5kIFBERiBmaWxlCitoZXJlOgorCWh0dHA6Ly92aW1kb2Muc2YubmV0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorR2V0dGluZyBTdGFydGVkIH4KKworUmVhZCB0aGlzIGZyb20gc3RhcnQgdG8gZW5kIHRvIGxlYXJuIHRoZSBlc3NlbnRpYWwgY29tbWFuZHMuCisKK3x1c3JfMDEudHh0fCAgQWJvdXQgdGhlIG1hbnVhbHMKKwkJfDAxLjF8CVR3byBtYW51YWxzCisJCXwwMS4yfAlWaW0gaW5zdGFsbGVkCisJCXwwMS4zfAlVc2luZyB0aGUgVmltIHR1dG9yCisJCXwwMS40fAlDb3B5cmlnaHQKKworfHVzcl8wMi50eHR8ICBUaGUgZmlyc3Qgc3RlcHMgaW4gVmltCisJCXwwMi4xfAlSdW5uaW5nIFZpbSBmb3IgdGhlIEZpcnN0IFRpbWUKKwkJfDAyLjJ8CUluc2VydGluZyB0ZXh0CisJCXwwMi4zfAlNb3ZpbmcgYXJvdW5kCisJCXwwMi40fAlEZWxldGluZyBjaGFyYWN0ZXJzCisJCXwwMi41fAlVbmRvIGFuZCBSZWRvCisJCXwwMi42fAlPdGhlciBlZGl0aW5nIGNvbW1hbmRzCisJCXwwMi43fAlHZXR0aW5nIG91dAorCQl8MDIuOHwJRmluZGluZyBoZWxwCisKK3x1c3JfMDMudHh0fCAgTW92aW5nIGFyb3VuZAorCQl8MDMuMXwJV29yZCBtb3ZlbWVudAorCQl8MDMuMnwJTW92aW5nIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgYSBsaW5lCisJCXwwMy4zfAlNb3ZpbmcgdG8gYSBjaGFyYWN0ZXIKKwkJfDAzLjR8CU1hdGNoaW5nIGEgcGFyZW4KKwkJfDAzLjV8CU1vdmluZyB0byBhIHNwZWNpZmljIGxpbmUKKwkJfDAzLjZ8CVRlbGxpbmcgd2hlcmUgeW91IGFyZQorCQl8MDMuN3wJU2Nyb2xsaW5nIGFyb3VuZAorCQl8MDMuOHwJU2ltcGxlIHNlYXJjaGVzCisJCXwwMy45fAlTaW1wbGUgc2VhcmNoIHBhdHRlcm5zCisJCXwwMy4xMHwJVXNpbmcgbWFya3MKKworfHVzcl8wNC50eHR8ICBNYWtpbmcgc21hbGwgY2hhbmdlcworCQl8MDQuMXwJT3BlcmF0b3JzIGFuZCBtb3Rpb25zCisJCXwwNC4yfAlDaGFuZ2luZyB0ZXh0CisJCXwwNC4zfAlSZXBlYXRpbmcgYSBjaGFuZ2UKKwkJfDA0LjR8CVZpc3VhbCBtb2RlCisJCXwwNC41fAlNb3ZpbmcgdGV4dAorCQl8MDQuNnwJQ29weWluZyB0ZXh0CisJCXwwNC43fAlVc2luZyB0aGUgY2xpcGJvYXJkCisJCXwwNC44fAlUZXh0IG9iamVjdHMKKwkJfDA0Ljl8CVJlcGxhY2UgbW9kZQorCQl8MDQuMTB8CUNvbmNsdXNpb24KKworfHVzcl8wNS50eHR8ICBTZXQgeW91ciBzZXR0aW5ncworCQl8MDUuMXwJVGhlIHZpbXJjIGZpbGUKKwkJfDA1LjJ8CVRoZSBleGFtcGxlIHZpbXJjIGZpbGUgZXhwbGFpbmVkCisJCXwwNS4zfAlTaW1wbGUgbWFwcGluZ3MKKwkJfDA1LjR8CUFkZGluZyBhIHBsdWdpbgorCQl8MDUuNXwJQWRkaW5nIGEgaGVscCBmaWxlCisJCXwwNS42fAlUaGUgb3B0aW9uIHdpbmRvdworCQl8MDUuN3wJT2Z0ZW4gdXNlZCBvcHRpb25zCisKK3x1c3JfMDYudHh0fCAgVXNpbmcgc3ludGF4IGhpZ2hsaWdodGluZworCQl8MDYuMXwJU3dpdGNoaW5nIGl0IG9uCisJCXwwNi4yfAlObyBvciB3cm9uZyBjb2xvcnM/CisJCXwwNi4zfAlEaWZmZXJlbnQgY29sb3JzCisJCXwwNi40fAlXaXRoIGNvbG9ycyBvciB3aXRob3V0IGNvbG9ycworCQl8MDYuNXwJUHJpbnRpbmcgd2l0aCBjb2xvcnMKKwkJfDA2LjZ8CUZ1cnRoZXIgcmVhZGluZworCit8dXNyXzA3LnR4dHwgIEVkaXRpbmcgbW9yZSB0aGFuIG9uZSBmaWxlCisJCXwwNy4xfAlFZGl0IGFub3RoZXIgZmlsZQorCQl8MDcuMnwJQSBsaXN0IG9mIGZpbGVzCisJCXwwNy4zfAlKdW1waW5nIGZyb20gZmlsZSB0byBmaWxlCisJCXwwNy40fAlCYWNrdXAgZmlsZXMKKwkJfDA3LjV8CUNvcHkgdGV4dCBiZXR3ZWVuIGZpbGVzCisJCXwwNy42fAlWaWV3aW5nIGEgZmlsZQorCQl8MDcuN3wJQ2hhbmdpbmcgdGhlIGZpbGUgbmFtZQorCit8dXNyXzA4LnR4dHwgIFNwbGl0dGluZyB3aW5kb3dzCisJCXwwOC4xfAlTcGxpdCBhIHdpbmRvdworCQl8MDguMnwJU3BsaXQgYSB3aW5kb3cgb24gYW5vdGhlciBmaWxlCisJCXwwOC4zfAlXaW5kb3cgc2l6ZQorCQl8MDguNHwJVmVydGljYWwgc3BsaXRzCisJCXwwOC41fAlNb3Zpbmcgd2luZG93cworCQl8MDguNnwJQ29tbWFuZHMgZm9yIGFsbCB3aW5kb3dzCisJCXwwOC43fAlWaWV3aW5nIGRpZmZlcmVuY2VzIHdpdGggdmltZGlmZgorCQl8MDguOHwJVmFyaW91cworCit8dXNyXzA5LnR4dHwgIFVzaW5nIHRoZSBHVUkKKwkJfDA5LjF8CVBhcnRzIG9mIHRoZSBHVUkKKwkJfDA5LjJ8CVVzaW5nIHRoZSBtb3VzZQorCQl8MDkuM3wJVGhlIGNsaXBib2FyZAorCQl8MDkuNHwJU2VsZWN0IG1vZGUKKworfHVzcl8xMC50eHR8ICBNYWtpbmcgYmlnIGNoYW5nZXMKKwkJfDEwLjF8CVJlY29yZCBhbmQgcGxheWJhY2sgY29tbWFuZHMKKwkJfDEwLjJ8CVN1YnN0aXR1dGlvbgorCQl8MTAuM3wJQ29tbWFuZCByYW5nZXMKKwkJfDEwLjR8CVRoZSBnbG9iYWwgY29tbWFuZAorCQl8MTAuNXwJVmlzdWFsIGJsb2NrIG1vZGUKKwkJfDEwLjZ8CVJlYWRpbmcgYW5kIHdyaXRpbmcgcGFydCBvZiBhIGZpbGUKKwkJfDEwLjd8CUZvcm1hdHRpbmcgdGV4dAorCQl8MTAuOHwJQ2hhbmdpbmcgY2FzZQorCQl8MTAuOXwJVXNpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbQorCit8dXNyXzExLnR4dHwgIFJlY292ZXJpbmcgZnJvbSBhIGNyYXNoCisJCXwxMS4xfAlCYXNpYyByZWNvdmVyeQorCQl8MTEuMnwJV2hlcmUgaXMgdGhlIHN3YXAgZmlsZT8KKwkJfDExLjN8CUNyYXNoZWQgb3Igbm90PworCQl8MTEuNHwJRnVydGhlciByZWFkaW5nCisKK3x1c3JfMTIudHh0fCAgQ2xldmVyIHRyaWNrcworCQl8MTIuMXwJUmVwbGFjZSBhIHdvcmQKKwkJfDEyLjJ8CUNoYW5nZSAiTGFzdCwgRmlyc3QiIHRvICJGaXJzdCBMYXN0IgorCQl8MTIuM3wJU29ydCBhIGxpc3QKKwkJfDEyLjR8CVJldmVyc2UgbGluZSBvcmRlcgorCQl8MTIuNXwJQ291bnQgd29yZHMKKwkJfDEyLjZ8CUZpbmQgYSBtYW4gcGFnZQorCQl8MTIuN3wJVHJpbSBibGFua3MKKwkJfDEyLjh8CUZpbmQgd2hlcmUgYSB3b3JkIGlzIHVzZWQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFZGl0aW5nIEVmZmVjdGl2ZWx5IH4KKworU3ViamVjdHMgdGhhdCBjYW4gYmUgcmVhZCBpbmRlcGVuZGVudGx5LgorCit8dXNyXzIwLnR4dHwgIFR5cGluZyBjb21tYW5kLWxpbmUgY29tbWFuZHMgcXVpY2tseQorCQl8MjAuMXwJQ29tbWFuZCBsaW5lIGVkaXRpbmcKKwkJfDIwLjJ8CUNvbW1hbmQgbGluZSBhYmJyZXZpYXRpb25zCisJCXwyMC4zfAlDb21tYW5kIGxpbmUgY29tcGxldGlvbgorCQl8MjAuNHwJQ29tbWFuZCBsaW5lIGhpc3RvcnkKKwkJfDIwLjV8CUNvbW1hbmQgbGluZSB3aW5kb3cKKworfHVzcl8yMS50eHR8ICBHbyBhd2F5IGFuZCBjb21lIGJhY2sKKwkJfDIxLjF8CVN1c3BlbmQgYW5kIHJlc3VtZQorCQl8MjEuMnwJRXhlY3V0aW5nIHNoZWxsIGNvbW1hbmRzCisJCXwyMS4zfAlSZW1lbWJlcmluZyBpbmZvcm1hdGlvbjsgdmltaW5mbworCQl8MjEuNHwJU2Vzc2lvbnMKKwkJfDIxLjV8CVZpZXdzCisJCXwyMS42fAlNb2RlbGluZXMKKworfHVzcl8yMi50eHR8ICBGaW5kaW5nIHRoZSBmaWxlIHRvIGVkaXQKKwkJfDIyLjF8CVRoZSBmaWxlIGV4cGxvcmVyCisJCXwyMi4yfAlUaGUgY3VycmVudCBkaXJlY3RvcnkKKwkJfDIyLjN8CUZpbmRpbmcgYSBmaWxlCisJCXwyMi40fAlUaGUgYnVmZmVyIGxpc3QKKworfHVzcl8yMy50eHR8ICBFZGl0aW5nIG90aGVyIGZpbGVzCisJCXwyMy4xfAlET1MsIE1hYyBhbmQgVW5peCBmaWxlcworCQl8MjMuMnwJRmlsZXMgb24gdGhlIGludGVybmV0CisJCXwyMy4zfAlFbmNyeXB0aW9uCisJCXwyMy40fAlCaW5hcnkgZmlsZXMKKwkJfDIzLjV8CUNvbXByZXNzZWQgZmlsZXMKKworfHVzcl8yNC50eHR8ICBJbnNlcnRpbmcgcXVpY2tseQorCQl8MjQuMXwJTWFraW5nIGNvcnJlY3Rpb25zCisJCXwyNC4yfAlTaG93aW5nIG1hdGNoZXMKKwkJfDI0LjN8CUNvbXBsZXRpb24KKwkJfDI0LjR8CVJlcGVhdGluZyBhbiBpbnNlcnQKKwkJfDI0LjV8CUNvcHlpbmcgZnJvbSBhbm90aGVyIGxpbmUKKwkJfDI0LjZ8CUluc2VydGluZyBhIHJlZ2lzdGVyCisJCXwyNC43fAlBYmJyZXZpYXRpb25zCisJCXwyNC44fAlFbnRlcmluZyBzcGVjaWFsIGNoYXJhY3RlcnMKKwkJfDI0Ljl8CURpZ3JhcGhzCisJCXwyNC4xMHwJTm9ybWFsIG1vZGUgY29tbWFuZHMKKworfHVzcl8yNS50eHR8ICBFZGl0aW5nIGZvcm1hdHRlZCB0ZXh0CisJCXwyNS4xfAlCcmVha2luZyBsaW5lcworCQl8MjUuMnwJQWxpZ25pbmcgdGV4dAorCQl8MjUuM3wJSW5kZW50cyBhbmQgdGFicworCQl8MjUuNHwJRGVhbGluZyB3aXRoIGxvbmcgbGluZXMKKwkJfDI1LjV8CUVkaXRpbmcgdGFibGVzCisKK3x1c3JfMjYudHh0fCAgUmVwZWF0aW5nCisJCXwyNi4xfAlSZXBlYXRpbmcgd2l0aCBWaXN1YWwgbW9kZQorCQl8MjYuMnwJQWRkIGFuZCBzdWJ0cmFjdAorCQl8MjYuM3wJTWFraW5nIGEgY2hhbmdlIGluIG1hbnkgZmlsZXMKKwkJfDI2LjR8CVVzaW5nIFZpbSBmcm9tIGEgc2hlbGwgc2NyaXB0CisKK3x1c3JfMjcudHh0fCAgU2VhcmNoIGNvbW1hbmRzIGFuZCBwYXR0ZXJucworCQl8MjcuMXwJSWdub3JpbmcgY2FzZQorCQl8MjcuMnwJV3JhcHBpbmcgYXJvdW5kIHRoZSBmaWxlIGVuZAorCQl8MjcuM3wJT2Zmc2V0cworCQl8MjcuNHwJTWF0Y2hpbmcgbXVsdGlwbGUgdGltZXMKKwkJfDI3LjV8CUFsdGVybmF0aXZlcworCQl8MjcuNnwJQ2hhcmFjdGVyIHJhbmdlcworCQl8MjcuN3wJQ2hhcmFjdGVyIGNsYXNzZXMKKwkJfDI3Ljh8CU1hdGNoaW5nIGEgbGluZSBicmVhaworCQl8MjcuOXwJRXhhbXBsZXMKKworfHVzcl8yOC50eHR8ICBGb2xkaW5nCisJCXwyOC4xfAlXaGF0IGlzIGZvbGRpbmc/CisJCXwyOC4yfAlNYW51YWwgZm9sZGluZworCQl8MjguM3wJV29ya2luZyB3aXRoIGZvbGRzCisJCXwyOC40fAlTYXZpbmcgYW5kIHJlc3RvcmluZyBmb2xkcworCQl8MjguNXwJRm9sZGluZyBieSBpbmRlbnQKKwkJfDI4LjZ8CUZvbGRpbmcgd2l0aCBtYXJrZXJzCisJCXwyOC43fAlGb2xkaW5nIGJ5IHN5bnRheAorCQl8MjguOHwJRm9sZGluZyBieSBleHByZXNzaW9uCisJCXwyOC45fAlGb2xkaW5nIHVuY2hhbmdlZCBsaW5lcworCQl8MjguMTB8IFdoaWNoIGZvbGQgbWV0aG9kIHRvIHVzZT8KKworfHVzcl8yOS50eHR8ICBNb3ZpbmcgdGhyb3VnaCBwcm9ncmFtcworCQl8MjkuMXwJVXNpbmcgdGFncworCQl8MjkuMnwJVGhlIHByZXZpZXcgd2luZG93CisJCXwyOS4zfAlNb3ZpbmcgdGhyb3VnaCBhIHByb2dyYW0KKwkJfDI5LjR8CUZpbmRpbmcgZ2xvYmFsIGlkZW50aWZpZXJzCisJCXwyOS41fAlGaW5kaW5nIGxvY2FsIGlkZW50aWZpZXJzCisKK3x1c3JfMzAudHh0fCAgRWRpdGluZyBwcm9ncmFtcworCQl8MzAuMXwJQ29tcGlsaW5nCisJCXwzMC4yfAlJbmRlbnRpbmcgQyBmaWxlcworCQl8MzAuM3wJQXV0b21hdGljIGluZGVudGluZworCQl8MzAuNHwJT3RoZXIgaW5kZW50aW5nCisJCXwzMC41fAlUYWJzIGFuZCBzcGFjZXMKKwkJfDMwLjZ8CUZvcm1hdHRpbmcgY29tbWVudHMKKworfHVzcl8zMS50eHR8ICBFeHBsb2l0aW5nIHRoZSBHVUkKKwkJfDMxLjF8CVRoZSBmaWxlIGJyb3dzZXIKKwkJfDMxLjJ8CUNvbmZpcm1hdGlvbgorCQl8MzEuM3wJTWVudSBzaG9ydGN1dHMKKwkJfDMxLjR8CVZpbSB3aW5kb3cgcG9zaXRpb24gYW5kIHNpemUKKwkJfDMxLjV8CVZhcmlvdXMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUdW5pbmcgVmltIH4KKworTWFrZSBWaW0gd29yayBhcyB5b3UgbGlrZSBpdC4KKworfHVzcl80MC50eHR8ICBNYWtlIG5ldyBjb21tYW5kcworCQl8NDAuMXwJS2V5IG1hcHBpbmcKKwkJfDQwLjJ8CURlZmluaW5nIGNvbW1hbmQtbGluZSBjb21tYW5kcworCQl8NDAuM3wJQXV0b2NvbW1hbmRzCisKK3x1c3JfNDEudHh0fCAgV3JpdGUgYSBWaW0gc2NyaXB0CisJCXw0MS4xfAlJbnRyb2R1Y3Rpb24KKwkJfDQxLjJ8CVZhcmlhYmxlcworCQl8NDEuM3wJRXhwcmVzc2lvbnMKKwkJfDQxLjR8CUNvbmRpdGlvbmFscworCQl8NDEuNXwJRXhlY3V0aW5nIGFuIGV4cHJlc3Npb24KKwkJfDQxLjZ8CVVzaW5nIGZ1bmN0aW9ucworCQl8NDEuN3wJRGVmaW5pbmcgYSBmdW5jdGlvbgorCQl8NDEuOHwJRXhjZXB0aW9ucworCQl8NDEuOXwJVmFyaW91cyByZW1hcmtzCisJCXw0MS4xMHwJV3JpdGluZyBhIHBsdWdpbgorCQl8NDEuMTF8CVdyaXRpbmcgYSBmaWxldHlwZSBwbHVnaW4KKwkJfDQxLjEyfAlXcml0aW5nIGEgY29tcGlsZXIgcGx1Z2luCisKK3x1c3JfNDIudHh0fCAgQWRkIG5ldyBtZW51cworCQl8NDIuMXwJSW50cm9kdWN0aW9uCisJCXw0Mi4yfAlNZW51IGNvbW1hbmRzCisJCXw0Mi4zfAlWYXJpb3VzCisJCXw0Mi40fAlUb29sYmFyIGFuZCBwb3B1cCBtZW51cworCit8dXNyXzQzLnR4dHwgIFVzaW5nIGZpbGV0eXBlcworCQl8NDMuMXwJUGx1Z2lucyBmb3IgYSBmaWxldHlwZQorCQl8NDMuMnwJQWRkaW5nIGEgZmlsZXR5cGUKKworfHVzcl80NC50eHR8ICBZb3VyIG93biBzeW50YXggaGlnaGxpZ2h0ZWQKKwkJfDQ0LjF8CUJhc2ljIHN5bnRheCBjb21tYW5kcworCQl8NDQuMnwJS2V5d29yZHMKKwkJfDQ0LjN8CU1hdGNoZXMKKwkJfDQ0LjR8CVJlZ2lvbnMKKwkJfDQ0LjV8CU5lc3RlZCBpdGVtcworCQl8NDQuNnwJRm9sbG93aW5nIGdyb3VwcworCQl8NDQuN3wJT3RoZXIgYXJndW1lbnRzCisJCXw0NC44fAlDbHVzdGVycworCQl8NDQuOXwJSW5jbHVkaW5nIGFub3RoZXIgc3ludGF4IGZpbGUKKwkJfDQ0LjEwfAlTeW5jaHJvbml6aW5nCisJCXw0NC4xMXwJSW5zdGFsbGluZyBhIHN5bnRheCBmaWxlCisJCXw0NC4xMnwJUG9ydGFibGUgc3ludGF4IGZpbGUgbGF5b3V0CisKK3x1c3JfNDUudHh0fCAgU2VsZWN0IHlvdXIgbGFuZ3VhZ2UKKwkJfDQ1LjF8CUxhbmd1YWdlIGZvciBNZXNzYWdlcworCQl8NDUuMnwJTGFuZ3VhZ2UgZm9yIE1lbnVzCisJCXw0NS4zfAlVc2luZyBhbm90aGVyIGVuY29kaW5nCisJCXw0NS40fAlFZGl0aW5nIGZpbGVzIHdpdGggYSBkaWZmZXJlbnQgZW5jb2RpbmcKKwkJfDQ1LjV8CUVudGVyaW5nIGxhbmd1YWdlIHRleHQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitNYWtpbmcgVmltIFJ1biB+CisKK0JlZm9yZSB5b3UgY2FuIHVzZSBWaW0uCisKK3x1c3JfOTAudHh0fCAgSW5zdGFsbGluZyBWaW0KKwkJfDkwLjF8CVVuaXgKKwkJfDkwLjJ8CU1TLVdpbmRvd3MKKwkJfDkwLjN8CVVwZ3JhZGluZworCQl8OTAuNHwJQ29tbW9uIGluc3RhbGxhdGlvbiBpc3N1ZXMKKwkJfDkwLjV8CVVuaW5zdGFsbGluZyBWaW0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodDogc2VlIHxtYW51YWwtY29weXJpZ2h0fCAgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmFyaW91cy50eHQgYi9ydW50aW1lL2RvYy92YXJpb3VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTI1NzJkCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmFyaW91cy50eHQKQEAgLTAsMCArMSwxMDk4IEBACisqdmFyaW91cy50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWF5IDAxCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVmFyaW91cyBjb21tYW5kcwkJCQkJKnZhcmlvdXMqCisKKzEuIFZhcmlvdXMgY29tbWFuZHMJCXx2YXJpb3VzLWNtZHN8CisyLiBPbmxpbmUgaGVscAkJCXxvbmxpbmUtaGVscHwKKzMuIFByaW50aW5nCQkJfHByaW50aW5nfAorNC4gVXNpbmcgVmltIGxpa2UgbGVzcyBvciBtb3JlCXxsZXNzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIFZhcmlvdXMgY29tbWFuZHMJCQkJCSp2YXJpb3VzLWNtZHMqCisKKwkJCQkJCQkqQ1RSTC1MKgorQ1RSTC1MCQkJQ2xlYXIgYW5kIHJlZHJhdyB0aGUgc2NyZWVuIChsYXRlcikuCisKKwkJCQkJCQkqOnJlZHIqICo6cmVkcmF3KgorOnJlZHJbYXddWyFdCQlSZWRyYXcgdGhlIHNjcmVlbiByaWdodCBub3cuICBXaGVuICEgaXMgaW5jbHVkZWQgaXQgaXMKKwkJCWNsZWFyZWQgZmlyc3QuCisJCQlVc2VmdWwgdG8gdXBkYXRlIHRoZSBzY3JlZW4gaGFsZndheSBleGVjdXRpbmcgYSBzY3JpcHQKKwkJCW9yIGZ1bmN0aW9uLiAgQWxzbyB3aGVuIGhhbGZ3YXkgYSBtYXBwaW5nIGFuZAorCQkJJ2xhenlyZWRyYXcnIGlzIHNldC4KKworCQkJCQkJKjpyZWRyYXdzKiAqOnJlZHJhd3N0YXR1cyoKKzpyZWRyYXdzW3RhdHVzXVshXQlSZWRyYXcgdGhlIHN0YXR1cyBsaW5lIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gIFdoZW4gIQorCQkJaXMgaW5jbHVkZWQgYWxsIHN0YXR1cyBsaW5lcyBhcmUgcmVkcmF3bi4KKwkJCVVzZWZ1bCB0byB1cGRhdGUgdGhlIHN0YXR1cyBsaW5lKHMpIHdoZW4gJ3N0YXR1c2xpbmUnCisJCQlpbmNsdWRlcyBhbiBpdGVtIHRoYXQgZG9lc24ndCBjYXVzZSBhdXRvbWF0aWMKKwkJCXVwZGF0aW5nLgorCisJCQkJCQkJKk48RGVsPioKKzxEZWw+CQkJV2hlbiBlbnRlcmluZyBhIG51bWJlcjogUmVtb3ZlIHRoZSBsYXN0IGRpZ2l0LgorCQkJTm90ZTogaWYgeW91IGxpa2UgdG8gdXNlIDxCUz4gZm9yIHRoaXMsIGFkZCB0aGlzCisJCQltYXBwaW5nIHRvIHlvdXIgLnZpbXJjOiA+CisJCQkJOm1hcCBDVFJMLVYgPEJTPiAgIENUUkwtViA8RGVsPgorPAkJCVNlZSB8OmZpeGRlbHwgaWYgeW91ciA8RGVsPiBrZXkgZG9lcyBub3QgZG8gd2hhdCB5b3UKKwkJCXdhbnQuCisKKzphc1tjaWldCW9yCQkJCQkqZ2EqICo6YXMqICo6YXNjaWkqCitnYQkJCVByaW50IHRoZSBhc2NpaSB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZQorCQkJY3Vyc29yIGluIGRlY2ltYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbC4gIEZvcgorCQkJZXhhbXBsZSwgd2hlbiB0aGUgY3Vyc29yIGlzIG9uIGEgJ1InOgorCQkJCTxSPiAgODIsICBIZXggNTIsICBPY3RhbCAxMjIgfgorCQkJV2hlbiB0aGUgY2hhcmFjdGVyIGlzIGEgbm9uLXN0YW5kYXJkIEFTQ0lJIGNoYXJhY3RlciwKKwkJCWJ1dCBwcmludGFibGUgYWNjb3JkaW5nIHRvIHRoZSAnaXNwcmludCcgb3B0aW9uLCB0aGUKKwkJCW5vbi1wcmludGFibGUgdmVyc2lvbiBpcyBhbHNvIGdpdmVuLiAgV2hlbiB0aGUKKwkJCWNoYXJhY3RlciBpcyBsYXJnZXIgdGhhbiAxMjcsIHRoZSA8TS14PiBmb3JtIGlzIGFsc28KKwkJCXByaW50ZWQuICBGb3IgZXhhbXBsZToKKwkJCQk8fkE+ICA8TS1eQT4gIDEyOSwgIEhleCA4MSwgIE9jdGFsIDIwMSB+CisJCQkJPHA+ICA8fH4+ICA8TS1+PiAgMjU0LCAgSGV4IGZlLCAgT2N0YWwgMzc2IH4KKwkJCSh3aGVyZSA8cD4gaXMgYSBzcGVjaWFsIGNoYXJhY3RlcikKKwkJCVRoZSA8TnVsPiBjaGFyYWN0ZXIgaW4gYSBmaWxlIGlzIHN0b3JlZCBpbnRlcm5hbGx5IGFzCisJCQk8Tkw+LCBidXQgaXQgd2lsbCBiZSBzaG93biBhczoKKwkJCQk8XkA+ICAwLCAgSGV4IDAwLCAgT2N0YWwgMDAwIH4KKwkJCU1uZW1vbmljOiBHZXQgQXNjaWkgdmFsdWUuICB7bm90IGluIFZpfQorCisJCQkJCQkJKmc4KgorZzgJCQlQcmludCB0aGUgaGV4IHZhbHVlcyBvZiB0aGUgYnl0ZXMgdXNlZCBpbiB0aGUKKwkJCWNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLCBhc3N1bWluZyBpdCBpcyBpbiB8VVRGLTh8CisJCQllbmNvZGluZy4gIFRoaXMgYWxzbyBzaG93cyBjb21wb3NpbmcgY2hhcmFjdGVycy4KKwkJCUV4YW1wbGUgb2YgYSBjaGFyYWN0ZXIgd2l0aCB0aHJlZSBjb21wb3NpbmcKKwkJCWNoYXJhY3RlcnM6CisJCQkJZTAgYjggODEgKyBlMCBiOCBiOSArIGUwIGI5IDg5IH4KKwkJCXtub3QgaW4gVml9CisKKwkJCQkJCQkqOnAqICo6cHIqICo6cHJpbnQqCis6W3JhbmdlXXBbcmludF0JCVByaW50IFtyYW5nZV0gbGluZXMgKGRlZmF1bHQgY3VycmVudCBsaW5lKS4KKwkJCU5vdGU6IElmIHlvdSBhcmUgbG9va2luZyBmb3IgYSB3YXkgdG8gcHJpbnQgeW91ciB0ZXh0CisJCQlmaWxlLCB5b3UgbmVlZCBhbiBleHRlcm5hbCBwcm9ncmFtIGZvciB0aGF0LiAgSW4gdGhlCisJCQlHVUkgeW91IGNhbiB1c2UgdGhlIEZpbGUuUHJpbnQgbWVudSBlbnRyeS4KKwkJCShGb3IgcHJpbnRpbmcgb24gcGFwZXIgc2VlIHw6aGFyZGNvcHl8KQorCis6W3JhbmdlXXBbcmludF0ge2NvdW50fQorCQkJUHJpbnQge2NvdW50fSBsaW5lcywgc3RhcnRpbmcgd2l0aCBbcmFuZ2VdIChkZWZhdWx0CisJCQljdXJyZW50IGxpbmUgfGNtZGxpbmUtcmFuZ2VzfCkuCisKKwkJCQkJCQkqOlAqICo6UHJpbnQqCis6W3JhbmdlXVBbcmludF0gW2NvdW50XQorCQkJSnVzdCBhcyAiOnByaW50Ii4gIFdhcyBhcHBhcmVudGx5IGFkZGVkIHRvIFZpIGZvcgorCQkJcGVvcGxlIHRoYXQga2VlcCB0aGUgc2hpZnQga2V5IHByZXNzZWQgdG9vIGxvbmcuLi4KKworCQkJCQkJCSo6bCogKjpsaXN0KgorOltyYW5nZV1sW2lzdF0gW2NvdW50XQorCQkJU2FtZSBhcyA6cHJpbnQsIGJ1dCBkaXNwbGF5IHVucHJpbnRhYmxlIGNoYXJhY3RlcnMKKwkJCXdpdGggJ14nLgorCisJCQkJCQkJKjpudSogKjpudW1iZXIqCis6W3JhbmdlXW51W21iZXJdIFtjb3VudF0KKwkJCVNhbWUgYXMgOnByaW50LCBidXQgcHJlY2VkZSBlYWNoIGxpbmUgd2l0aCBpdHMgbGluZQorCQkJbnVtYmVyLiAgKFNlZSBhbHNvICdoaWdobGlnaHQnIG9wdGlvbikuCisKKwkJCQkJCQkqOiMqCis6W3JhbmdlXSMgW2NvdW50XQlzeW5vbnltIGZvciA6bnVtYmVyLgorCisJCQkJCQkJKjp6KiAqRTE0NCoKKzp7cmFuZ2V9elsrLV4uPV17Y291bnR9CURpc3BsYXkgc2V2ZXJhbCBsaW5lcyBvZiB0ZXh0IHN1cnJvdW5kaW5nIHRoZSBsaW5lCisJCQlzcGVjaWZpZWQgd2l0aCB7cmFuZ2V9LCBvciBhcm91bmQgdGhlIGN1cnJlbnQgbGluZQorCQkJaWYgdGhlcmUgaXMgbm8ge3JhbmdlfS4gIElmIHRoZXJlIGlzIGEge2NvdW50fSwgdGhhdCdzCisJCQlob3cgbWFueSBsaW5lcyB5b3UnbGwgc2VlOyBvdGhlcndpc2UsIHRoZSBjdXJyZW50CisJCQl3aW5kb3cgc2l6ZSBpcyB1c2VkLgorCisJCQk6eiBjYW4gYmUgdXNlZCBlaXRoZXIgYWxvbmUgb3IgZm9sbG93ZWQgYnkgYW55IG9mCisJCQlzZXZlcmFsIHB1bmN0dWF0aW9uIG1hcmtzLiAgVGhlc2UgaGF2ZSB0aGUgZm9sbG93aW5nCisJCQllZmZlY3Q6CisKKwkJCW1hcmsgICBmaXJzdCBsaW5lICAgIGxhc3QgbGluZSAgICAgIG5ldyBsb2NhdGlvbiAgIH4KKwkJCS0tLS0gICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLQorCQkJKyAgICAgIGN1cnJlbnQgbGluZSAgMSBzY3IgZm9yd2FyZCAgMSBzY3IgZm9yd2FyZAorCQkJLSAgICAgIDEgc2NyIGJhY2sgICAgY3VycmVudCBsaW5lICAgY3VycmVudCBsaW5lCisJCQleICAgICAgMiBzY3IgYmFjayAgICAxIHNjciBiYWNrICAgICAxIHNjciBiYWNrCisJCQkuICAgICAgMS8yIHNjciBiYWNrICAxLzIgc2NyIGZ3ZCAgICAxLzIgc3JjIGZ3ZAorCQkJPSAgICAgIDEvMiBzcmMgYmFjayAgMS8yIHNjciBmd2QgICAgY3VycmVudCBsaW5lCisKKwkJCVNwZWNpZnlpbmcgbm8gbWFyayBhdCBhbGwgaXMgdGhlIHNhbWUgYXMgIisiLgorCQkJSWYgdGhlIG1hcmsgaXMgIj0iLCBhIGxpbmUgb2YgZGFzaGVzIGlzIHByaW50ZWQKKwkJCWFyb3VuZCB0aGUgY3VycmVudCBsaW5lLgorCis6e3JhbmdlfXojWystXi49XXtjb3VudH0JCQkJKjp6IyoKKwkJCUxpa2UgIjp6IiwgYnV0IG51bWJlciB0aGUgbGluZXMuCisJCQl7bm90IGluIGFsbCB2ZXJzaW9ucyBvZiBWaSwgbm90IHdpdGggdGhlc2UgYXJndW1lbnRzfQorCisJCQkJCQkJKjo9KgorOj0JCQlQcmludCB0aGUgbGFzdCBsaW5lIG51bWJlci4KKworOntyYW5nZX09CQlQcmludHMgdGhlIGxhc3QgbGluZSBudW1iZXIgaW4ge3JhbmdlfS4gIEZvciBleGFtcGxlLAorCQkJdGhpcyBwcmludHMgdGhlIGN1cnJlbnQgbGluZSBudW1iZXI6ID4KKwkJCQk6Lj0KKworOm5vcm1bYWxdWyFdIHtjb21tYW5kc30JCQkJCSo6bm9ybSogKjpub3JtYWwqCisJCQlFeGVjdXRlIE5vcm1hbCBtb2RlIGNvbW1hbmRzIHtjb21tYW5kc30uICBUaGlzIG1ha2VzCisJCQlpdCBwb3NzaWJsZSB0byBleGVjdXRlIE5vcm1hbCBtb2RlIGNvbW1hbmRzIHR5cGVkIG9uCisJCQl0aGUgY29tbWFuZC1saW5lLiAge2NvbW1hbmRzfSBpcyBleGVjdXRlZCBsaWtlIGl0IGlzCisJCQl0eXBlZC4gIEZvciB1bmRvIGFsbCBjb21tYW5kcyBhcmUgdW5kb25lIHRvZ2V0aGVyLgorCQkJSWYgdGhlIFshXSBpcyBnaXZlbiwgbWFwcGluZ3Mgd2lsbCBub3QgYmUgdXNlZC4KKwkJCXtjb21tYW5kc30gc2hvdWxkIGJlIGEgY29tcGxldGUgY29tbWFuZC4gIElmCisJCQl7Y29tbWFuZHN9IGRvZXMgbm90IGZpbmlzaCBhIGNvbW1hbmQsIHRoZSBsYXN0IG9uZQorCQkJd2lsbCBiZSBhYm9ydGVkIGFzIGlmIDxFc2M+IG9yIDxDLUM+IHdhcyB0eXBlZC4KKwkJCVRoZSBkaXNwbGF5IGlzbid0IHVwZGF0ZWQgd2hpbGUgIjpub3JtYWwiIGlzIGJ1c3kuCisJCQlUaGlzIGltcGxpZXMgdGhhdCBhbiBpbnNlcnQgY29tbWFuZCBtdXN0IGJlIGNvbXBsZXRlZAorCQkJKHRvIHN0YXJ0IEluc2VydCBtb2RlLCBzZWUgfDpzdGFydGluc2VydHwpLiAgQSAiOiIKKwkJCWNvbW1hbmQgbXVzdCBiZSBjb21wbGV0ZWQgYXMgd2VsbC4KKwkJCXtjb21tYW5kc30gY2Fubm90IHN0YXJ0IHdpdGggYSBzcGFjZS4gUHV0IGEgMSAob25lKQorCQkJYmVmb3JlIGl0LCAxIHNwYWNlIGlzIG9uZSBzcGFjZS4KKwkJCVRoZSAnaW5zZXJ0bW9kZScgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIHtjb21tYW5kc30uCisJCQlUaGlzIGNvbW1hbmQgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZCwKKwkJCXNpbmNlIGFueSAnfCcgaXMgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBjb21tYW5kLgorCQkJVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIHJlY3Vyc2l2ZWx5LCBidXQgdGhlIGRlcHRoIGlzCisJCQlsaW1pdGVkIGJ5ICdtYXhtYXBkZXB0aCcuCisJCQlXaGVuIHRoaXMgY29tbWFuZCBpcyBjYWxsZWQgZnJvbSBhIG5vbi1yZW1hcHBhYmxlCisJCQltYXBwaW5nIHw6bm9yZW1hcHwsIHRoZSBhcmd1bWVudCBjYW4gYmUgbWFwcGVkIGFueXdheS4KKwkJCUFuIGFsdGVybmF0aXZlIGlzIHRvIHVzZSB8OmV4ZWN1dGV8LCB3aGljaCB1c2VzIGFuCisJCQlleHByZXNzaW9uIGFzIGFyZ3VtZW50LiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZgorCQkJcHJpbnRhYmxlIGNoYXJhY3RlcnMuICBFeGFtcGxlOiA+CisJCQkJOmV4ZSAibm9ybWFsIFw8Yy13Plw8Yy13PiIKKzwJCQl7bm90IGluIFZpLCBvZiBjb3Vyc2V9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K2V4X2V4dHJhfCBmZWF0dXJlIHdhcworCQkJZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lfQorCis6e3JhbmdlfW5vcm1bYWxdWyFdIHtjb21tYW5kc30JCQkJKjpub3JtYWwtcmFuZ2UqCisJCQlFeGVjdXRlIE5vcm1hbCBtb2RlIGNvbW1hbmRzIHtjb21tYW5kc30gZm9yIGVhY2ggbGluZQorCQkJaW4gdGhlIHtyYW5nZX0uICBCZWZvcmUgZXhlY3V0aW5nIHRoZSB7Y29tbWFuZHN9LCB0aGUKKwkJCWN1cnNvciBpcyBwb3NpdGlvbmVkIGluIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIHJhbmdlLAorCQkJZm9yIGVhY2ggbGluZS4gIE90aGVyd2lzZSBpdCdzIHRoZSBzYW1lIGFzIHRoZQorCQkJIjpub3JtYWwiIGNvbW1hbmQgd2l0aG91dCBhIHJhbmdlLgorCQkJe25vdCBpbiBWaX0KKwkJCU5vdCBhdmFpbGFibGUgd2hlbiB8K2V4X2V4dHJhfCBmZWF0dXJlIHdhcyBkaXNhYmxlZCBhdAorCQkJY29tcGlsZSB0aW1lLgorCisJCQkJCQkJKjpzaCogKjpzaGVsbCogKkUzNzEqCis6c2hbZWxsXQkJVGhpcyBjb21tYW5kIHN0YXJ0cyBhIHNoZWxsLiAgV2hlbiB0aGUgc2hlbGwgZXhpdHMKKwkJCShhZnRlciB0aGUgImV4aXQiIGNvbW1hbmQpIHlvdSByZXR1cm4gdG8gVmltLiAgVGhlCisJCQluYW1lIGZvciB0aGUgc2hlbGwgY29tbWFuZCBjb21lcyBmcm9tICdzaGVsbCcgb3B0aW9uLgorCQkJCQkJCSpFMzYwKgorCQkJTm90ZTogVGhpcyBkb2Vzbid0IHdvcmsgd2hlbiBWaW0gb24gdGhlIEFtaWdhIHdhcworCQkJc3RhcnRlZCBpbiBRdWlja0ZpeCBtb2RlIGZyb20gYSBjb21waWxlciwgYmVjYXVzZSB0aGUKKwkJCWNvbXBpbGVyIHdpbGwgaGF2ZSBzZXQgc3RkaW4gdG8gYSBub24taW50ZXJhY3RpdmUKKwkJCW1vZGUuCisKKwkJCQkJCQkqOiFjbWQqICo6ISogKkUzNCoKKzohe2NtZH0JCQlFeGVjdXRlIHtjbWR9IHdpdGggdGhlIHNoZWxsLiAgU2VlIGFsc28gdGhlICdzaGVsbCcKKwkJCWFuZCAnc2hlbGx0eXBlJyBvcHRpb24uCisJCQlBbnkgJyEnIGluIHtjbWR9IGlzIHJlcGxhY2VkIHdpdGggdGhlIHByZXZpb3VzCisJCQlleHRlcm5hbCBjb21tYW5kIChzZWUgYWxzbyAnY3BvcHRpb25zJykuICBCdXQgbm90IHdoZW4KKwkJCXRoZXJlIGlzIGEgYmFja3NsYXNoIGJlZm9yZSB0aGUgJyEnLCB0aGVuIHRoYXQKKwkJCWJhY2tzbGFzaCBpcyByZW1vdmVkLiAgRXhhbXBsZTogIjohbHMiIGZvbGxvd2VkIGJ5CisJCQkiOiFlY2hvICEgXCEgXFwhIiBleGVjdXRlcyAiZWNobyBscyAhIFwhIi4KKwkJCUFmdGVyIHRoZSBjb21tYW5kIGhhcyBiZWVuIGV4ZWN1dGVkLCB0aGUgdGltZXN0YW1wIG9mCisJCQl0aGUgY3VycmVudCBmaWxlIGlzIGNoZWNrZWQgfHRpbWVzdGFtcHwuCisJCQlUaGVyZSBjYW5ub3QgYmUgYSAnfCcgaW4ge2NtZH0sIHNlZSB8OmJhcnwuCisJCQlBIG5ld2xpbmUgY2hhcmFjdGVyIGVuZHMge2NtZH0sIHdoYXQgZm9sbG93cyBpcworCQkJaW50ZXJwcmV0ZWQgYXMgYSBmb2xsb3dpbmcgIjoiIGNvbW1hbmQuICBIb3dldmVyLCBpZgorCQkJdGhlcmUgaXMgYSBiYWNrc2xhc2ggYmVmb3JlIHRoZSBuZXdsaW5lIGl0IGlzIHJlbW92ZWQKKwkJCWFuZCB7Y21kfSBjb250aW51ZXMuICBJdCBkb2Vzbid0IG1hdHRlciBob3cgbWFueQorCQkJYmFja3NsYXNoZXMgYXJlIGJlZm9yZSB0aGUgbmV3bGluZSwgb25seSBvbmUgaXMKKwkJCXJlbW92ZWQuCisJCQlPbiBVbml4IHRoZSBjb21tYW5kIG5vcm1hbGx5IHJ1bnMgaW4gYSBub24taW50ZXJhY3RpdmUKKwkJCXNoZWxsLiAgSWYgeW91IHdhbnQgYW4gaW50ZXJhY3RpdmUgc2hlbGwgdG8gYmUgdXNlZAorCQkJKHRvIHVzZSBhbGlhc2VzKSBzZXQgJ3NoZWxsY21kZmxhZycgdG8gIi1pYyIuCisJCQlGb3IgV2luMzIgYWxzbyBzZWUgfDohc3RhcnR8LgorCQkJVmltIHJlZHJhd3MgdGhlIHNjcmVlbiBhZnRlciB0aGUgY29tbWFuZCBpcyBmaW5pc2hlZCwKKwkJCWJlY2F1c2UgaXQgbWF5IGhhdmUgcHJpbnRlZCBhbnkgdGV4dC4gIFRoaXMgcmVxdWlyZXMgYQorCQkJaGl0LWVudGVyIHByb21wdCwgc28gdGhhdCB5b3UgY2FuIHJlYWQgYW55IG1lc3NhZ2VzLgorCQkJVG8gYXZvaWQgdGhpcyB1c2U6ID4KKwkJCQk6c2lsZW50ICF7Y21kfQorPAkJCVRoZSBzY3JlZW4gaXMgbm90IHJlZHJhd24gdGhlbiwgdGh1cyB5b3UgaGF2ZSB0byB1c2UKKwkJCUNUUkwtTCBvciAiOnJlZHJhdyEiIGlmIHRoZSBjb21tYW5kIGRpZCBkaXNwbGF5CisJCQlzb21ldGhpbmcuCisJCQlBbHNvIHNlZSB8c2hlbGwtd2luZG93fC4KKworCQkJCQkJCSo6ISEqCis6ISEJCQlSZXBlYXQgbGFzdCAiOiF7Y21kfSIuCisKKwkJCQkJCQkqOnZlKiAqOnZlcnNpb24qCis6dmVbcnNpb25dCQlQcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGVkaXRvci4gIElmIHRoZQorCQkJY29tcGlsZXIgdXNlZCB1bmRlcnN0YW5kcyAiX19EQVRFX18iIHRoZSBjb21waWxhdGlvbgorCQkJZGF0ZSBpcyBtZW50aW9uZWQuICBPdGhlcndpc2UgYSBmaXhlZCByZWxlYXNlLWRhdGUgaXMKKwkJCXNob3duLgorCQkJVGhlIGZvbGxvd2luZyBsaW5lcyBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoCisJCQlmZWF0dXJlcyB3ZXJlIGVuYWJsZWQgd2hlbiBWaW0gd2FzIGNvbXBpbGVkLiAgV2hlbgorCQkJdGhlcmUgaXMgYSBwcmVjZWRpbmcgJysnLCB0aGUgZmVhdHVyZSBpcyBpbmNsdWRlZCwKKwkJCXdoZW4gdGhlcmUgaXMgYSAnLScgaXQgaXMgZXhjbHVkZWQuICBUbyBjaGFuZ2UgdGhpcywKKwkJCXlvdSBoYXZlIHRvIGVkaXQgZmVhdHVyZS5oIGFuZCByZWNvbXBpbGUgVmltLgorCQkJVG8gY2hlY2sgZm9yIHRoaXMgaW4gYW4gZXhwcmVzc2lvbiwgc2VlIHxoYXMoKXwuCisJCQlIZXJlIGlzIGFuIG92ZXJ2aWV3IG9mIHRoZSBmZWF0dXJlcy4KKwkJCVRoZSBmaXJzdCBjb2x1bW4gc2hvd3MgdGhlIHNtYWxsZXN0IHZlcnNpb24gaW4gd2hpY2gKKwkJCXRoZXkgYXJlIGluY2x1ZGVkOgorCQkJICAgVAl0aW55CisJCQkgICBTCXNtYWxsCisJCQkgICBOCW5vcm1hbAorCQkJICAgQgliaWcKKwkJCSAgIEgJaHVnZQorCQkJICAgbQltYW51YWxseSBlbmFibGVkIG9yIGRlcGVuZHMgb24gb3RoZXIgZmVhdHVyZXMKKwkJCSAobm9uZSkgc3lzdGVtIGRlcGVuZGVudAorCQkJVGh1cyBpZiBhIGZlYXR1cmUgaXMgbWFya2VkIHdpdGggIk4iLCBpdCBpcyBpbmNsdWRlZAorCQkJaW4gdGhlIG5vcm1hbCwgYmlnIGFuZCBodWdlIHZlcnNpb25zIG9mIFZpbS4KKworCQkJCQkJCSorZmVhdHVyZS1saXN0KgorICAgKitBUlAqCQlBbWlnYSBvbmx5OiBBUlAgc3VwcG9ydCBpbmNsdWRlZAorQiAgKithcmFiaWMqCQl8QXJhYmljfCBsYW5ndWFnZSBzdXBwb3J0CitOICAqK2F1dG9jbWQqCQl8OmF1dG9jbWR8LCBhdXRvbWF0aWMgY29tbWFuZHMKK20gICorYmFsbG9vbl9ldmFsKgl8YmFsbG9vbi1ldmFsfCBzdXBwb3J0CitOICAqK2Jyb3dzZSoJCXw6YnJvd3NlfCBjb21tYW5kCitOICAqK2J1aWx0aW5fdGVybXMqCXNvbWUgdGVybWluYWxzIGJ1aWx0aW4gfGJ1aWx0aW4tdGVybXN8CitCICAqKytidWlsdGluX3Rlcm1zKgltYXhpbWFsIHRlcm1pbmFscyBidWlsdGluIHxidWlsdGluLXRlcm1zfAorTiAgKitieXRlX29mZnNldCoJc3VwcG9ydCBmb3IgJ28nIGZsYWcgaW4gJ3N0YXR1c2xpbmUnIG9wdGlvbiwgImdvIgorCQkJYW5kICI6Z290byIgY29tbWFuZHMuCitOICAqK2NpbmRlbnQqCQl8J2NpbmRlbnQnfCwgQyBpbmRlbnRpbmcKK04gICorY2xpZW50c2VydmVyKglVbml4IGFuZCBXaW4zMjogUmVtb3RlIGludm9jYXRpb24gfGNsaWVudHNlcnZlcnwKKyAgICorY2xpcGJvYXJkKgkJfGNsaXBib2FyZHwgc3VwcG9ydAorTiAgKitjbWRsaW5lX2NvbXBsKgljb21tYW5kIGxpbmUgY29tcGxldGlvbiB8Y21kbGluZS1jb21wbGV0aW9ufAorTiAgKitjbWRsaW5lX2hpc3QqCWNvbW1hbmQgbGluZSBoaXN0b3J5IHxjbWRsaW5lLWhpc3Rvcnl8CitOICAqK2NtZGxpbmVfaW5mbyoJfCdzaG93Y21kJ3wgYW5kIHwncnVsZXInfAorTiAgKitjb21tZW50cyoJCXwnY29tbWVudHMnfCBzdXBwb3J0CitOICAqK2NyeXB0dioJCWVuY3J5cHRpb24gc3VwcG9ydCB8ZW5jcnlwdGlvbnwKK0IgICorY3Njb3BlKgkJfGNzY29wZXwgc3VwcG9ydAorTiAgKitkaWFsb2dfZ3VpKglTdXBwb3J0IGZvciB8OmNvbmZpcm18IHdpdGggR1VJIGRpYWxvZy4KK04gICorZGlhbG9nX2NvbioJU3VwcG9ydCBmb3IgfDpjb25maXJtfCB3aXRoIGNvbnNvbGUgZGlhbG9nLgorTiAgKitkaWFsb2dfY29uX2d1aSoJU3VwcG9ydCBmb3IgfDpjb25maXJtfCB3aXRoIEdVSSBhbmQgY29uc29sZSBkaWFsb2cuCitOICAqK2RpZmYqCQl8dmltZGlmZnwgYW5kICdkaWZmJworTiAgKitkaWdyYXBocyoJCXxkaWdyYXBoc3wgKkUxOTYqCisgICAqK2RuZCoJCVN1cHBvcnQgZm9yIERuRCBpbnRvIHRoZSAifiByZWdpc3RlciB8cXVvdGVffnwuCitCICAqK2VtYWNzX3RhZ3MqCXxlbWFjcy10YWdzfCBmaWxlcworTiAgKitldmFsKgkJZXhwcmVzc2lvbiBldmFsdWF0aW9uIHxldmFsLnR4dHwKK04gICorZXhfZXh0cmEqCQlWaW0ncyBleHRyYSBFeCBjb21tYW5kczogfDpjZW50ZXJ8LCB8OmxlZnR8LAorCQkJfDpub3JtYWx8LCB8OnJldGFifCBhbmQgfDpyaWdodHwKK04gICorZXh0cmFfc2VhcmNoKgl8J2hsc2VhcmNoJ3wgYW5kIHwnaW5jc2VhcmNoJ3wgb3B0aW9ucy4KK0IgICorZmFyc2kqCQl8ZmFyc2l8IGxhbmd1YWdlCitOICAqK2ZpbGVfaW5fcGF0aCoJfGdmfCwgfENUUkwtV19mfCBhbmQgfDxjZmlsZT58CitOICAqK2ZpbmRfaW5fcGF0aCoJaW5jbHVkZSBmaWxlIHNlYXJjaGVzOiB8W0l8LCB8OmlzZWFyY2h8LAorCQkJfENUUkwtV19DVFJMLUl8LCB8OmNoZWNrcGF0aHwsIGV0Yy4KK04gICorZm9sZGluZyoJCXxmb2xkaW5nfAorICAgKitmb290ZXIqCQl8Z3VpLWZvb3RlcnwKKyAgICorZm9yayoJCVVuaXggb25seTogfGZvcmt8IHNoZWxsIGNvbW1hbmRzCitOICAqK2dldHRleHQqCQltZXNzYWdlIHRyYW5zbGF0aW9ucyB8bXVsdGktbGFuZ3wKKyAgICorR1VJX0F0aGVuYSoJVW5peCBvbmx5OiBBdGhlbmEgfEdVSXwKKyAgICorR1VJX25lWHRhdyoJVW5peCBvbmx5OiBuZVh0YXcgfEdVSXwKKyAgICorR1VJX0JlT1MqCQlCZU9TIG9ubHk6IEJlT1MgfEdVSXwKKyAgICorR1VJX0dUSyoJCVVuaXggb25seTogR1RLKyB8R1VJfAorICAgKitHVUlfTW90aWYqCQlVbml4IG9ubHk6IE1vdGlmIHxHVUl8CisgICAqK0dVSV9QaG90b24qCVFOWCBvbmx5OiAgUGhvdG9uIHxHVUl8CittICAqK2hhbmd1bF9pbnB1dCoJSGFuZ3VsIGlucHV0IHN1cHBvcnQgfGhhbmd1bHwKKyAgICoraWNvbnYqCQlDb21waWxlZCB3aXRoIHRoZSB8aWNvbnYoKXwgZnVuY3Rpb24sIG1heSBoYXZlIHwvZHlufAorTiAgKitpbnNlcnRfZXhwYW5kKgl8aW5zZXJ0X2V4cGFuZHwgSW5zZXJ0IG1vZGUgY29tcGxldGlvbgorTiAgKitqdW1wbGlzdCoJCXxqdW1wbGlzdHwKK0IgICora2V5bWFwKgkJfCdrZXltYXAnfAorQiAgKitsYW5nbWFwKgkJfCdsYW5nbWFwJ3wKK04gICorbGliY2FsbCoJCXxsaWJjYWxsKCl8CitOICAqK2xpbmVicmVhayoJCXwnbGluZWJyZWFrJ3wsIHwnYnJlYWthdCd8IGFuZCB8J3Nob3dicmVhayd8CitOICAqK2xpc3BpbmRlbnQqCXwnbGlzcCd8CitOICAqK2xpc3RjbWRzKgkJVmltIGNvbW1hbmRzIGZvciB0aGUgbGlzdCBvZiBidWZmZXJzIHxidWZmZXItaGlkZGVufAorCQkJYW5kIGFyZ3VtZW50IGxpc3QgfDphcmdkZWxldGV8CitOICAqK2xvY2FsbWFwKgkJU3VwcG9ydCBmb3IgbWFwcGluZ3MgbG9jYWwgdG8gYSBidWZmZXIgfDptYXAtbG9jYWx8CitOICAqK21lbnUqCQl8Om1lbnV8CitOICAqK21rc2Vzc2lvbioJCXw6bWtzZXNzaW9ufAorTiAgKittb2RpZnlfZm5hbWUqCXxmaWxlbmFtZS1tb2RpZmllcnN8CitOICAqK21vdXNlKgkJTW91c2UgaGFuZGxpbmcgfG1vdXNlLXVzaW5nfAorTiAgKittb3VzZXNoYXBlKgl8J21vdXNlc2hhcGUnfAorQiAgKittb3VzZV9kZWMqCQlVbml4IG9ubHk6IERlYyB0ZXJtaW5hbCBtb3VzZSBoYW5kbGluZyB8ZGVjLW1vdXNlfAorTiAgKittb3VzZV9ncG0qCQlVbml4IG9ubHk6IExpbnV4IGNvbnNvbGUgbW91c2UgaGFuZGxpbmcgfGdwbS1tb3VzZXwKK0IgICorbW91c2VfbmV0dGVybSoJVW5peCBvbmx5OiBuZXR0ZXJtIG1vdXNlIGhhbmRsaW5nIHxuZXR0ZXJtLW1vdXNlfAorTiAgKittb3VzZV9wdGVybSoJUU5YIG9ubHk6IHB0ZXJtIG1vdXNlIGhhbmRsaW5nIHxxbngtdGVybWluYWx8CitOICAqK21vdXNlX3h0ZXJtKglVbml4IG9ubHk6IHh0ZXJtIG1vdXNlIGhhbmRsaW5nIHx4dGVybS1tb3VzZXwKK0IgICorbXVsdGlfYnl0ZSoJS29yZWFuIGFuZCBvdGhlciBsYW5ndWFnZXMgfG11bHRpYnl0ZXwKKyAgICorbXVsdGlfYnl0ZV9pbWUqCVdpbjMyIGlucHV0IG1ldGhvZCBmb3IgbXVsdGlieXRlIGNoYXJzIHxtdWx0aWJ5dGUtaW1lfAorTiAgKittdWx0aV9sYW5nKglub24tRW5nbGlzaCBsYW5ndWFnZSBzdXBwb3J0IHxtdWx0aS1sYW5nfAorbSAgKituZXRiZWFuc19pbnRnKgl8bmV0YmVhbnN8CittICAqK29sZSoJCVdpbjMyIEdVSSBvbmx5OiB8b2xlLWludGVyZmFjZXwKKyAgICorb3NmaWxldHlwZSoJU3VwcG9ydCBmb3IgdGhlICdvc2ZpbGV0eXBlJyBvcHRpb24gYW5kIGZpbGV0eXBlCisJCQljaGVja2luZyBpbiBhdXRvbWF0aWMgY29tbWFuZHMuICB8YXV0b2NtZC1vc2ZpbGV0eXBlc3wKK04gICorcGF0aF9leHRyYSoJVXAvZG93bndhcmRzIHNlYXJjaCBpbiAncGF0aCcgYW5kICd0YWdzJworbSAgKitwZXJsKgkJUGVybCBpbnRlcmZhY2UgfHBlcmx8LCBtYXkgaGF2ZSB8L2R5bnwKKyAgICorcG9zdHNjcmlwdCoJfDpoYXJkY29weXwgd3JpdGVzIGEgUG9zdFNjcmlwdCBmaWxlCitOICAqK3ByaW50ZXIqCQl8OmhhcmRjb3B5fCBjb21tYW5kCittICAqK3B5dGhvbioJCVB5dGhvbiBpbnRlcmZhY2UgfHB5dGhvbnwsIG1heSBoYXZlIHwvZHlufAorTiAgKitxdWlja2ZpeCoJCXw6bWFrZXwgYW5kIHxxdWlja2ZpeHwgY29tbWFuZHMKK0IgICorcmlnaHRsZWZ0KgkJUmlnaHQgdG8gbGVmdCB0eXBpbmcgfCdyaWdodGxlZnQnfAorbSAgKitydWJ5KgkJUnVieSBpbnRlcmZhY2UgfHJ1Ynl8LCBtYXkgaGF2ZSB8L2R5bnwKK04gICorc2Nyb2xsYmluZCoJfCdzY3JvbGxiaW5kJ3wKK0IgICorc2lnbnMqCQl8OnNpZ258CitOICAqK3NtYXJ0aW5kZW50Kgl8J3NtYXJ0aW5kZW50J3wKK20gICorc25pZmYqCQlTbmlGRiBpbnRlcmZhY2UgfHNuaWZmfAorTiAgKitzdGF0dXNsaW5lKglPcHRpb25zICdzdGF0dXNsaW5lJywgJ3J1bGVyZm9ybWF0JyBhbmQgc3BlY2lhbAorCQkJZm9ybWF0cyBvZiAndGl0bGVzdHJpbmcnIGFuZCAnaWNvbnN0cmluZycKK20gICorc3VuX3dvcmtzaG9wKgl8d29ya3Nob3B8CitOICAqK3N5bnRheCoJCVN5bnRheCBoaWdobGlnaHRpbmcgfHN5bnRheHwKKyAgICorc3lzdGVtKCkqCQlVbml4IG9ubHk6IG9wcG9zaXRlIG9mIHwrZm9ya3wKK04gICordGFnX2JpbmFyeSoJYmluYXJ5IHNlYXJjaGluZyBpbiB0YWdzIGZpbGUgfHRhZy1iaW5hcnktc2VhcmNofAorTiAgKit0YWdfb2xkX3N0YXRpYyoJb2xkIG1ldGhvZCBmb3Igc3RhdGljIHRhZ3MgfHRhZy1vbGQtc3RhdGljfAorbSAgKit0YWdfYW55X3doaXRlKglhbnkgd2hpdGUgc3BhY2UgYWxsb3dlZCBpbiB0YWdzIGZpbGUgfHRhZy1hbnktd2hpdGV8CittICAqK3RjbCoJCVRjbCBpbnRlcmZhY2UgfHRjbHwsIG1heSBoYXZlIHwvZHlufAorICAgKit0ZXJtaW5mbyoJCXVzZXMgfHRlcm1pbmZvfCBpbnN0ZWFkIG9mIHRlcm1jYXAKK04gICordGVybXJlc3BvbnNlKglzdXBwb3J0IGZvciB8dF9SVnwgYW5kIHx2OnRlcm1yZXNwb25zZXwKK04gICordGV4dG9iamVjdHMqCXx0ZXh0LW9iamVjdHN8IHNlbGVjdGlvbgorICAgKit0Z2V0ZW50KgkJbm9uLVVuaXggb25seTogYWJsZSB0byB1c2UgZXh0ZXJuYWwgdGVybWNhcAorTiAgKit0aXRsZSoJCVNldHRpbmcgdGhlIHdpbmRvdyB0aXRsZSB8J3RpdGxlJ3wKK04gICordG9vbGJhcioJCXxndWktdG9vbGJhcnwKK04gICordXNlcl9jb21tYW5kcyoJVXNlci1kZWZpbmVkIGNvbW1hbmRzLiB8dXNlci1jb21tYW5kc3wKK04gICordmltaW5mbyoJCXwndmltaW5mbyd8CitOICAqK3ZlcnRzcGxpdCoJCVZlcnRpY2FsbHkgc3BsaXQgd2luZG93cyB8OnZzcGxpdHwKK04gICordmlydHVhbGVkaXQqCXwndmlydHVhbGVkaXQnfAorUyAgKit2aXN1YWwqCQlWaXN1YWwgbW9kZSB8VmlzdWFsLW1vZGV8CitOICAqK3Zpc3VhbGV4dHJhKglleHRyYSBWaXN1YWwgbW9kZSBjb21tYW5kcyB8YmxvY2t3aXNlLW9wZXJhdG9yc3wKK04gICordnJlcGxhY2UqCQl8Z1J8IGFuZCB8Z3J8CitOICAqK3dpbGRpZ25vcmUqCXwnd2lsZGlnbm9yZSd8CitOICAqK3dpbGRtZW51KgkJfCd3aWxkbWVudSd8CitTICAqK3dpbmRvd3MqCQltb3JlIHRoYW4gb25lIHdpbmRvdworbSAgKit3cml0ZWJhY2t1cCoJfCd3cml0ZWJhY2t1cCd8IGlzIGRlZmF1bHQgb24KK20gICoreGltKgkJWCBpbnB1dCBtZXRob2QgfHhpbXwKKyAgICoreGZvbnRzZXQqCQlYIGZvbnRzZXQgc3VwcG9ydCB8eGZvbnRzZXR8CisgICAqK3hzbXAqCQlYU01QIChYIHNlc3Npb24gbWFuYWdlbWVudCkgc3VwcG9ydAorICAgKit4c21wX2ludGVyYWN0KglpbnRlcmFjdGl2ZSBYU01QIChYIHNlc3Npb24gbWFuYWdlbWVudCkgc3VwcG9ydAorTiAgKit4dGVybV9jbGlwYm9hcmQqCVVuaXggb25seTogeHRlcm0gY2xpcGJvYXJkIGhhbmRsaW5nCittICAqK3h0ZXJtX3NhdmUqCXNhdmUgYW5kIHJlc3RvcmUgeHRlcm0gc2NyZWVuIHx4dGVybS1zY3JlZW5zfAorTiAgKitYMTEqCQlVbml4IG9ubHk6IGNhbiByZXN0b3JlIHdpbmRvdyB0aXRsZSB8WDExfAorCisJCQkJCQkJKi9keW4qICpFMzcwKiAqRTQ0OCoKKwkJCVRvIHNvbWUgb2YgdGhlIGZlYXR1cmVzICIvZHluIiBpcyBhZGRlZCB3aGVuIHRoZQorCQkJZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHRoZSByZWxhdGVkIGxpYnJhcnkgY2FuCisJCQliZSBkeW5hbWljYWxseSBsb2FkZWQuCisKKzp2ZVtyc2lvbl0ge25yfQkJSXMgbm93IGlnbm9yZWQuICBUaGlzIHdhcyBwcmV2aW91c2x5IHVzZWQgdG8gY2hlY2sgdGhlCisJCQl2ZXJzaW9uIG51bWJlciBvZiBhIC52aW1yYyBmaWxlLiAgSXQgd2FzIHJlbW92ZWQsCisJCQliZWNhdXNlIHlvdSBjYW4gbm93IHVzZSB0aGUgIjppZiIgY29tbWFuZCBmb3IKKwkJCXZlcnNpb24tZGVwZW5kZW50IGJlaGF2aW9yLiAge25vdCBpbiBWaX0KKworCQkJCQkJCSo6cmVkaSogKjpyZWRpcioKKzpyZWRpW3JdWyFdID4ge2ZpbGV9CVJlZGlyZWN0IG1lc3NhZ2VzIHRvIGZpbGUge2ZpbGV9LiAgVGhlIG1lc3NhZ2VzIHdoaWNoCisJCQlhcmUgdGhlIG91dHB1dCBvZiBjb21tYW5kcyBhcmUgd3JpdHRlbiB0byB0aGF0IGZpbGUsCisJCQl1bnRpbCByZWRpcmVjdGlvbiBlbmRzLiAgVGhlIG1lc3NhZ2VzIGFyZSBhbHNvIHN0aWxsCisJCQlzaG93biBvbiB0aGUgc2NyZWVuLiAgV2hlbiBbIV0gaXMgaW5jbHVkZWQsIGFuCisJCQlleGlzdGluZyBmaWxlIGlzIG92ZXJ3cml0dGVuLiAgV2hlbiBbIV0gaXMgb21pdHRlZCwKKwkJCWFuZCB7ZmlsZX0gZXhpc3RzLCB0aGlzIGNvbW1hbmQgZmFpbHMuCisJCQlPbmx5IG9uZSAiOnJlZGlyIiBjYW4gYmUgYWN0aXZlIGF0IGEgdGltZS4gIENhbGxzIHRvCisJCQkiOnJlZGlyIiB3aWxsIGNsb3NlIGFueSBhY3RpdmUgcmVkaXJlY3Rpb24gYmVmb3JlCisJCQlzdGFydGluZyByZWRpcmVjdGlvbiB0byB0aGUgbmV3IHRhcmdldC4KKwkJCVRvIHN0b3AgdGhlIG1lc3NhZ2VzIGFuZCBjb21tYW5kcyBmcm9tIGJlaW5nIGVjaG9lZCB0bworCQkJdGhlIHNjcmVlbiwgcHV0IHRoZSBjb21tYW5kcyBpbiBhIGZ1bmN0aW9uIGFuZCBjYWxsIGl0CisJCQl3aXRoICI6c2lsZW50IGNhbGwgRnVuY3Rpb24oKSIuCisJCQl7bm90IGluIFZpfQorCis6cmVkaVtyXSA+PiB7ZmlsZX0JUmVkaXJlY3QgbWVzc2FnZXMgdG8gZmlsZSB7ZmlsZX0uICBBcHBlbmQgaWYge2ZpbGV9CisJCQlhbHJlYWR5IGV4aXN0cy4gIHtub3QgaW4gVml9CisKKzpyZWRpW3JdIEB7YS16QS1afQlSZWRpcmVjdCBtZXNzYWdlcyB0byByZWdpc3RlciB7YS16fS4gIEFwcGVuZCB0byB0aGUKKwkJCWNvbnRlbnRzIG9mIHRoZSByZWdpc3RlciBpZiBpdHMgbmFtZSBpcyBnaXZlbgorCQkJdXBwZXJjYXNlIHtBLVp9LiAge25vdCBpbiBWaX0KKworOnJlZGlbcl0gQCoJCVJlZGlyZWN0IG1lc3NhZ2VzIHRvIHRoZSBjbGlwYm9hcmQuIHtub3QgaW4gVml9CisKKzpyZWRpW3JdIEAiCQlSZWRpcmVjdCBtZXNzYWdlcyB0byB0aGUgdW5uYW1lZCByZWdpc3Rlci4ge25vdCBpbiBWaX0KKworOnJlZGlbcl0gRU5ECQlFbmQgcmVkaXJlY3RpbmcgbWVzc2FnZXMuICB7bm90IGluIFZpfQorCisJCQkJCQkqOnNpbCogKjpzaWxlbnQqCis6c2lsW2VudF1bIV0ge2NvbW1hbmR9CUV4ZWN1dGUge2NvbW1hbmR9IHNpbGVudGx5LiAgTm9ybWFsIG1lc3NhZ2VzIHdpbGwgbm90CisJCQliZSBnaXZlbiBvciBhZGRlZCB0byB0aGUgbWVzc2FnZSBoaXN0b3J5LgorCQkJV2hlbiBbIV0gaXMgYWRkZWQsIGVycm9yIG1lc3NhZ2VzIHdpbGwgYWxzbyBiZQorCQkJc2tpcHBlZCwgYW5kIGNvbW1hbmRzIGFuZCBtYXBwaW5ncyB3aWxsIG5vdCBiZSBhYm9ydGVkCisJCQl3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLiAgfHY6ZXJybXNnfCBpcyBzdGlsbCBzZXQuCisJCQlXaGVuIFshXSBpcyBub3QgdXNlZCwgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGNhdXNlCisJCQlmdXJ0aGVyIG1lc3NhZ2VzIHRvIGJlIGRpc3BsYXllZCBub3JtYWxseS4KKwkJCVJlZGlyZWN0aW9uLCBzdGFydGVkIHdpdGggfDpyZWRpcnwsIHdpbGwgY29udGludWUgYXMKKwkJCXVzdWFsLCBhbHRob3VnaCB0aGVyZSBtaWdodCBiZSBzbWFsbCBkaWZmZXJlbmNlcy4KKwkJCVRoaXMgd2lsbCBhbGxvdyByZWRpcmVjdGluZyB0aGUgb3V0cHV0IG9mIGEgY29tbWFuZAorCQkJd2l0aG91dCBzZWVpbmcgaXQgb24gdGhlIHNjcmVlbi4gIEV4YW1wbGU6ID4KKwkJCSAgICA6cmVkaXIgPi90bXAvZm9vYmFyCisJCQkgICAgOnNpbGVudCBnL0FhcC9wCisJCQkgICAgOnJlZGlyIEVORAorPAkJCVRvIGV4ZWN1dGUgYSBOb3JtYWwgbW9kZSBjb21tYW5kIHNpbGVudGx5LCB1c2UgdGhlCisJCQl8Om5vcm1hbHwgY29tbWFuZC4gIEZvciBleGFtcGxlLCB0byBzZWFyY2ggZm9yIGEKKwkJCXN0cmluZyB3aXRob3V0IG1lc3NhZ2VzOiA+CisJCQkgICAgOnNpbGVudCBleGUgIm5vcm1hbCAvcGF0aFw8Q1I+IgorPAkJCSI6c2lsZW50ISIgaXMgdXNlZnVsIHRvIGV4ZWN1dGUgYSBjb21tYW5kIHRoYXQgbWF5CisJCQlmYWlsLCBidXQgdGhlIGZhaWx1cmUgaXMgdG8gYmUgaWdub3JlZC4gIEV4YW1wbGU6ID4KKwkJCSAgICA6bGV0IHY6ZXJybXNnID0gIiIKKwkJCSAgICA6c2lsZW50ISAvXmJlZ2luCisJCQkgICAgOmlmIHY6ZXJybXNnICE9ICIiCisJCQkgICAgOiAuLi4gcGF0dGVybiB3YXMgbm90IGZvdW5kCis8CQkJIjpzaWxlbnQiIHdpbGwgYWxzbyBhdm9pZCB0aGUgaGl0LWVudGVyIHByb21wdC4gIFdoZW4KKwkJCXVzaW5nIHRoaXMgZm9yIGFuIGV4dGVybmFsIGNvbW1hbmQsIHRoaXMgbWF5IGNhdXNlIHRoZQorCQkJc2NyZWVuIHRvIGJlIG1lc3NlZCB1cC4gIFVzZSB8Q1RSTC1MfCB0byBjbGVhbiBpdCB1cAorCQkJdGhlbi4KKwkJCSI6c2lsZW50IG1lbnUgLi4uIiBkZWZpbmVzIGEgbWVudSB0aGF0IHdpbGwgbm90IGVjaG8gYQorCQkJQ29tbWFuZC1saW5lIGNvbW1hbmQuICBUaGUgY29tbWFuZCB3aWxsIHN0aWxsIHByb2R1Y2UKKwkJCW1lc3NhZ2VzIHRob3VnaC4gIFVzZSAiOnNpbGVudCIgaW4gdGhlIGNvbW1hbmQgaXRzZWxmCisJCQl0byBhdm9pZCB0aGF0OiAiOnNpbGVudCBtZW51IC4uLi4gOnNpbGVudCBjb21tYW5kIi4KKworCQkJCQkJKjp2ZXJiKiAqOnZlcmJvc2UqCis6W2NvdW50XXZlcmJbb3NlXSB7Y29tbWFuZH0KKwkJCUV4ZWN1dGUge2NvbW1hbmR9IHdpdGggJ3ZlcmJvc2UnIHNldCB0byBbY291bnRdLiAgSWYKKwkJCVtjb3VudF0gaXMgb21pdHRlZCBvbmUgaXMgdXNlZC4KKwkJCVRoZSBhZGRpdGlvbmFsIHVzZSBvZiAiOnNpbGVudCIgbWFrZXMgbWVzc2FnZXMKKwkJCWdlbmVyYXRlZCBidXQgbm90IGRpc3BsYXllZC4KKwkJCVRoZSBjb21iaW5hdGlvbiBvZiAiOnNpbGVudCIgYW5kICI6dmVyYm9zZSIgY2FuIGJlCisJCQl1c2VkIHRvIGdlbmVyYXRlIG1lc3NhZ2VzIGFuZCBjaGVjayB0aGVtIHdpdGgKKwkJCXx2OnN0YXR1c21zZ3wgYW5kIGZyaWVuZHMuICBGb3IgZXhhbXBsZTogPgorCQkJCTpsZXQgdjpzdGF0dXNtc2cgPSAiIgorCQkJCTpzaWxlbnQgdmVyYm9zZSBydW50aW1lIGZvb2Jhci52aW0KKwkJCQk6aWYgdjpzdGF0dXNtc2cgIT0gIiIKKwkJCQk6ICAiIGZvb2Jhci52aW0gY291bGQgbm90IGJlIGZvdW5kCisJCQkJOmVuZGlmCis8CQkJV2hlbiBjb25jYXRlbmF0aW5nIGFub3RoZXIgY29tbWFuZCwgdGhlICI6dmVyYm9zZSIKKwkJCW9ubHkgYXBwbGllcyB0byB0aGUgZmlyc3Qgb25lOiA+CisJCQkJOjR2ZXJib3NlIHNldCB2ZXJib3NlIHwgc2V0IHZlcmJvc2UKKzwJCQkJICB2ZXJib3NlPTQgfgorCQkJCSAgdmVyYm9zZT0wIH4KKworCQkJCQkJCSpLKgorSwkJCVJ1biBhIHByb2dyYW0gdG8gbG9va3VwIHRoZSBrZXl3b3JkIHVuZGVyIHRoZQorCQkJY3Vyc29yLiAgVGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gaXMgZ2l2ZW4gd2l0aCB0aGUKKwkJCSdrZXl3b3JkcHJnJyAoa3ApIG9wdGlvbiAoZGVmYXVsdCBpcyAibWFuIikuICBUaGUKKwkJCWtleXdvcmQgaXMgZm9ybWVkIG9mIGxldHRlcnMsIG51bWJlcnMgYW5kIHRoZQorCQkJY2hhcmFjdGVycyBpbiAnaXNrZXl3b3JkJy4gIFRoZSBrZXl3b3JkIHVuZGVyIG9yCisJCQlyaWdodCBvZiB0aGUgY3Vyc29yIGlzIHVzZWQuICBUaGUgc2FtZSBjYW4gYmUgZG9uZQorCQkJd2l0aCB0aGUgY29tbWFuZCA+CisJCQkJOiF7cHJvZ3JhbX0ge2tleXdvcmR9Cis8CQkJVGhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHByb2dyYW0gdG8gdXNlIGluIHRoZSB0b29scworCQkJZGlyZWN0b3J5IG9mIFZpbS4gIEl0IGlzIGNhbGxlZCAncmVmJyBhbmQgZG9lcyBhCisJCQlzaW1wbGUgc3BlbGxpbmcgY2hlY2suCisJCQlTcGVjaWFsIGNhc2VzOgorCQkJLSBJZiAna2V5d29yZHByZycgaXMgZW1wdHksIHRoZSAiOmhlbHAiIGNvbW1hbmQgaXMKKwkJCSAgdXNlZC4gIEl0J3MgYSBnb29kIGlkZWEgdG8gaW5jbHVkZSBtb3JlIGNoYXJhY3RlcnMKKwkJCSAgaW4gJ2lza2V5d29yZCcgdGhlbiwgdG8gYmUgYWJsZSB0byBmaW5kIG1vcmUgaGVscC4KKwkJCS0gV2hlbiAna2V5d29yZHByZycgaXMgZXF1YWwgdG8gIm1hbiIsIGEgY291bnQgYmVmb3JlCisJCQkgICJLIiBpcyBpbnNlcnRlZCBhZnRlciB0aGUgIm1hbiIgY29tbWFuZCBhbmQgYmVmb3JlCisJCQkgIHRoZSBrZXl3b3JkLiAgRm9yIGV4YW1wbGUsIHVzaW5nICIySyIgd2hpbGUgdGhlCisJCQkgIGN1cnNvciBpcyBvbiAibWtkaXIiLCByZXN1bHRzIGluOiA+CisJCQkJIW1hbiAyIG1rZGlyCis8CQkJLSBXaGVuICdrZXl3b3JkcHJnJyBpcyBlcXVhbCB0byAibWFuIC1zIiwgYSBjb3VudAorCQkJICBiZWZvcmUgIksiIGlzIGluc2VydGVkIGFmdGVyIHRoZSAiLXMiLiAgSWYgdGhlcmUgaXMKKwkJCSAgbm8gY291bnQsIHRoZSAiLXMiIGlzIHJlbW92ZWQuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKnZfSyoKK3tWaXN1YWx9SwkJTGlrZSAiSyIsIGJ1dCB1c2UgdGhlIHZpc3VhbGx5IGhpZ2hsaWdodGVkIHRleHQgZm9yCisJCQl0aGUga2V5d29yZC4gIE9ubHkgd29ya3Mgd2hlbiB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCBpcworCQkJbm90IG1vcmUgdGhhbiBvbmUgbGluZS4gIHtub3QgaW4gVml9CisKK1tOXWdzCQkJCQkJCSpncyogKjpzbCogKjpzbGVlcCoKKzpbTl1zbFtlZXBdIFtOXQlbbV0JRG8gbm90aGluZyBmb3IgW05dIHNlY29uZHMuICBXaGVuIFttXSBpcyBpbmNsdWRlZCwKKwkJCXNsZWVwIGZvciBbTl0gbWlsbGlzZWNvbmRzLiBUaGUgY291bnQgZm9yICJncyIgYWx3YXlzCisJCQl1c2VzIHNlY29uZHMuICBUaGUgZGVmYXVsdCBpcyBvbmUgc2Vjb25kLiA+CisJCQkgICAgIDpzbGVlcAkgICAgICJzbGVlcCBmb3Igb25lIHNlY29uZAorCQkJICAgICA6NXNsZWVwCSAgICAgInNsZWVwIGZvciBmaXZlIHNlY29uZHMKKwkJCSAgICAgOnNsZWVwIDEwMG0gICAgICJzbGVlcCBmb3IgYSBodW5kcmVkIG1pbGxpc2Vjb25kcworCQkJICAgICAxMGdzCSAgICAgInNsZWVwIGZvciB0ZW4gc2Vjb25kcworPAkJCUNhbiBiZSBpbnRlcnJ1cHRlZCB3aXRoIENUUkwtQyAoQ1RSTC1CcmVhayBvbiBNUy1ET1MpLgorCQkJImdzIiBzdGFuZHMgZm9yICJnb3RvIHNsZWVwIi4gIFdoaWxlIHNsZWVwaW5nIHRoZQorCQkJY3Vyc29yIGlzIHBvc2l0aW9uZWQgaW4gdGhlIHRleHQgKGlmIHZpc2libGUpLiAge25vdAorCQkJaW4gVml9CisKKwkJCQkJCQkqZ19DVFJMLUEqCitnIENUUkwtQQkJT25seSB3aGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCBNRU1fUFJPRklMSU5HIGRlZmluZWQKKwkJCSh3aGljaCBpcyB2ZXJ5IHJhcmUpOiBwcmludCBtZW1vcnkgdXNhZ2Ugc3RhdGlzdGljcy4KKwkJCU9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgVmltLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuIE9ubGluZSBoZWxwCQkJCQkJKm9ubGluZS1oZWxwKgorCisJCQkqaGVscCogKjxIZWxwPiogKjpoKiAqOmhlbHAqICo8RjE+KiAqaV88RjE+KiAqaV88SGVscD4qCis8SGVscD4JCW9yCis6aFtlbHBdCQkJT3BlbiBhIHdpbmRvdyBhbmQgZGlzcGxheSB0aGUgaGVscCBmaWxlIGluIHJlYWQtb25seQorCQkJbW9kZS4gIElmIHRoZXJlIGlzIGEgaGVscCB3aW5kb3cgb3BlbiBhbHJlYWR5LCB1c2UKKwkJCXRoYXQgb25lLiAgT3RoZXJ3aXNlLCBpZiB0aGUgY3VycmVudCB3aW5kb3cgdXNlcyB0aGUKKwkJCWZ1bGwgd2lkdGggb2YgdGhlIHNjcmVlbiBvciBpcyBhdCBsZWFzdCA4MCBjaGFyYWN0ZXJzCisJCQl3aWRlLCB0aGUgaGVscCB3aW5kb3cgd2lsbCBhcHBlYXIganVzdCBhYm92ZSB0aGUKKwkJCWN1cnJlbnQgd2luZG93LiAgT3RoZXJ3aXNlIHRoZSBuZXcgd2luZG93IGlzIHB1dCBhdAorCQkJdGhlIHZlcnkgdG9wLgorCQkJVGhlICdoZWxwbGFuZycgb3B0aW9uIGlzIHVzZWQgdG8gc2VsZWN0IGEgbGFuZ3VhZ2UsIGlmCisJCQl0aGUgbWFpbiBoZWxwIGZpbGUgaXMgYXZhaWxhYmxlIGluIHNldmVyYWwgbGFuZ3VhZ2VzLgorCQkJe25vdCBpbiBWaX0KKworCQkJCQkJKntzdWJqZWN0fSogKkUxNDkqICpFNjYxKgorOmhbZWxwXSB7c3ViamVjdH0JTGlrZSAiOmhlbHAiLCBhZGRpdGlvbmFsbHkganVtcCB0byB0aGUgdGFnIHtzdWJqZWN0fS4KKwkJCXtzdWJqZWN0fSBjYW4gaW5jbHVkZSB3aWxkY2FyZHMgbGlrZSAiKiIsICI/IiBhbmQKKwkJCSJbYS16XSI6CisJCQkgICA6aGVscCB6PwlqdW1wIHRvIGhlbHAgZm9yIGFueSAieiIgY29tbWFuZAorCQkJICAgOmhlbHAgei4JanVtcCB0byB0aGUgaGVscCBmb3IgInouIgorCQkJSWYgdGhlcmUgaXMgbm8gZnVsbCBtYXRjaCBmb3IgdGhlIHBhdHRlcm4sIG9yIHRoZXJlCisJCQlhcmUgc2V2ZXJhbCBtYXRjaGVzLCB0aGUgImJlc3QiIG1hdGNoIHdpbGwgYmUgdXNlZC4KKwkJCUEgc29waGlzdGljYXRlZCBhbGdvcml0aG0gaXMgdXNlZCB0byBkZWNpZGUgd2hpY2gKKwkJCW1hdGNoIGlzIGJldHRlciB0aGFuIGFub3RoZXIgb25lLiAgVGhlc2UgaXRlbXMgYXJlCisJCQljb25zaWRlcmVkIGluIHRoZSBjb21wdXRhdGlvbjoKKwkJCS0gQSBtYXRjaCB3aXRoIHNhbWUgY2FzZSBpcyBtdWNoIGJldHRlciB0aGFuIGEgbWF0Y2gKKwkJCSAgd2l0aCBkaWZmZXJlbnQgY2FzZS4KKwkJCS0gQSBtYXRjaCB0aGF0IHN0YXJ0cyBhZnRlciBhIG5vbi1hbHBoYW51bWVyaWMKKwkJCSAgY2hhcmFjdGVyIGlzIGJldHRlciB0aGFuIGEgbWF0Y2ggaW4gdGhlIG1pZGRsZSBvZiBhCisJCQkgIHdvcmQuCisJCQktIEEgbWF0Y2ggYXQgb3IgbmVhciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YWcgaXMKKwkJCSAgYmV0dGVyIHRoYW4gYSBtYXRjaCBmdXJ0aGVyIG9uLgorCQkJLSBUaGUgbW9yZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBtYXRjaCwgdGhlIGJldHRlci4KKwkJCS0gVGhlIHNob3J0ZXIgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2gsIHRoZSBiZXR0ZXIuCisKKwkJCVRoZSAnaGVscGxhbmcnIG9wdGlvbiBpcyB1c2VkIHRvIHNlbGVjdCBhIGxhbmd1YWdlLCBpZgorCQkJdGhlIHtzdWJqZWN0fSBpcyBhdmFpbGFibGUgaW4gc2V2ZXJhbCBsYW5ndWFnZXMuCisJCQlUbyBmaW5kIGEgdGFnIGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UsIGFwcGVuZCAiQGFiIiwKKwkJCXdoZXJlICJhYiIgaXMgdGhlIHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZS4gIFNlZQorCQkJfGhlbHAtdHJhbnNsYXRlZHwuCisKKwkJCU5vdGUgdGhhdCB0aGUgbG9uZ2VyIHRoZSB7c3ViamVjdH0geW91IGdpdmUsIHRoZSBsZXNzCisJCQltYXRjaGVzIHdpbGwgYmUgZm91bmQuICBZb3UgY2FuIGdldCBhbiBpZGVhIGhvdyB0aGlzCisJCQlhbGwgd29ya3MgYnkgdXNpbmcgY29tbWFuZGxpbmUgY29tcGxldGlvbiAodHlwZSBDVFJMLUQKKwkJCWFmdGVyICI6aGVscCBzdWJqZWN0IikuCisJCQlJZiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGVzLCB5b3UgY2FuIGhhdmUgdGhlbSBsaXN0ZWQKKwkJCWJ5IGhpdHRpbmcgQ1RSTC1ELiAgRXhhbXBsZTogPgorCQkJCTpoZWxwIGNvbnQ8Q3RybC1EPgorPAkJCVRvIHVzZSBhIHJlZ2V4cCB8cGF0dGVybnwsIGZpcnN0IGRvICI6aGVscCIgYW5kIHRoZW4KKwkJCXVzZSAiOnRhZyB7cGF0dGVybn0iIGluIHRoZSBoZWxwIHdpbmRvdy4gIFRoZQorCQkJIjp0bmV4dCIgY29tbWFuZCBjYW4gdGhlbiBiZSB1c2VkIHRvIGp1bXAgdG8gb3RoZXIKKwkJCW1hdGNoZXMsICJ0c2VsZWN0IiB0byBsaXN0IG1hdGNoZXMgYW5kIGNob29zZSBvbmUuID4KKwkJCQk6aGVscCBpbmRleHwgOnRzZSB6LgorPAkJCVRoaXMgY29tbWFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgJ3wnIGFuZCBhbm90aGVyCisJCQljb21tYW5kLCBidXQgeW91IGRvbid0IG5lZWQgdG8gZXNjYXBlIHRoZSAnfCcgaW5zaWRlIGEKKwkJCWhlbHAgY29tbWFuZC4gIFNvIHRoZXNlIGJvdGggd29yazogPgorCQkJCTpoZWxwIHwKKwkJCQk6aGVscCBrfCBvbmx5Cis8CQkJTm90ZSB0aGF0IGEgc3BhY2UgYmVmb3JlIHRoZSAnfCcgaXMgc2VlbiBhcyBwYXJ0IG9mCisJCQl0aGUgIjpoZWxwIiBhcmd1bWVudC4KKwkJCVlvdSBjYW4gYWxzbyB1c2UgPExGPiBvciA8Q1I+IHRvIHNlcGFyYXRlIHRoZSBoZWxwCisJCQljb21tYW5kIGZyb20gYSBmb2xsb3dpbmcgY29tbWFuZC4gIFlvdSBuZWVkIHRvIHR5cGUKKwkJCUNUUkwtViBmaXJzdCB0byBpbnNlcnQgdGhlIDxMRj4gb3IgPENSPi4gIEV4YW1wbGU6ID4KKwkJCQk6aGVscCBzbzxDLVY+PENSPm9ubHkKKzwJCQl7bm90IGluIFZpfQorCis6aFtlbHBdISBbc3ViamVjdF0JTGlrZSAiOmhlbHAiLCBidXQgaW4gbm9uLUVuZ2xpc2ggaGVscCBmaWxlcyBwcmVmZXIgdG8KKwkJCWZpbmQgYSB0YWcgaW4gYSBmaWxlIHdpdGggdGhlIHNhbWUgbGFuZ3VhZ2UgYXMgdGhlCisJCQljdXJyZW50IGZpbGUuICBTZWUgfGhlbHAtdHJhbnNsYXRlZHwuCisKKwkJCQkJCQkqOmhlbHBnKiAqOmhlbHBncmVwKgorOmhlbHBnW3JlcF0ge3BhdHRlcm59CisJCQlTZWFyY2ggYWxsIGhlbHAgdGV4dCBmaWxlcyBhbmQgbWFrZSBhIGxpc3Qgb2YgbGluZXMKKwkJCWluIHdoaWNoIHtwYXR0ZXJufSBtYXRjaGVzLiAgSnVtcHMgdG8gdGhlIGZpcnN0IG1hdGNoLgorCQkJWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBtYXRjaGVzIHdpdGggdGhlCisJCQl8cXVpY2tmaXh8IGNvbW1hbmRzLCBlLmcuLCB8OmNuZXh0fCB0byBqdW1wIHRvIHRoZQorCQkJbmV4dCBvbmUuICBPciB1c2UgfDpjd2luZG93fCB0byBnZXQgdGhlIGxpc3Qgb2YKKwkJCW1hdGNoZXMgaW4gdGhlIHF1aWNrZml4IHdpbmRvdy4KKwkJCXtwYXR0ZXJufSBpcyB1c2VkIGFzIGEgVmltIHJlZ2V4cCB8cGF0dGVybnwuCisJCQknaWdub3JlY2FzZScgaXMgbm90IHVzZWQsIGFkZCAiXGMiIHRvIGlnbm9yZSBjYXNlLgorCQkJRXhhbXBsZSBmb3IgY2FzZSBzZW5zaXRpdmUgc2VhcmNoOiA+CisJCQkJOmhlbHBncmVwIFVnYW5kYQorPAkJCUV4YW1wbGUgZm9yIGNhc2UgaWdub3Jpbmcgc2VhcmNoOiA+CisJCQkJOmhlbHBncmVwIHVnYW5kYVxjCis8CQkJQ2Fubm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZCwgZXZlcnl0aGluZyBpcworCQkJdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXR0ZXJuLiAgQnV0IHlvdSBjYW4gdXNlCisJCQl8OmV4ZWN1dGV8IHdoZW4gbmVlZGVkLgorCQkJQ29tcHJlc3NlZCBoZWxwIGZpbGVzIHdpbGwgbm90IGJlIHNlYXJjaGVkIChEZWJpYW4KKwkJCWNvbXByZXNzZXMgdGhlIGhlbHAgZmlsZXMpLgorCQkJe25vdCBpbiBWaX0KKworCitXaGVuIG5vIGFyZ3VtZW50IGlzIGdpdmVuIHRvIHw6aGVscHwgdGhlIGZpbGUgZ2l2ZW4gd2l0aCB0aGUgJ2hlbHBmaWxlJyBvcHRpb24KK3dpbGwgYmUgb3BlbmVkLiAgT3RoZXJ3aXNlIHRoZSBzcGVjaWZpZWQgdGFnIGlzIHNlYXJjaGVkIGZvciBpbiBhbGwgImRvYy90YWdzIgorZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB0aGUgJ3J1bnRpbWVwYXRoJyBvcHRpb24uCisKK1RoZSBpbml0aWFsIGhlaWdodCBvZiB0aGUgaGVscCB3aW5kb3cgY2FuIGJlIHNldCB3aXRoIHRoZSAnaGVscGhlaWdodCcgb3B0aW9uCisoZGVmYXVsdCAyMCkuCisKK0p1bXAgdG8gc3BlY2lmaWMgc3ViamVjdHMgYnkgdXNpbmcgdGFncy4gIFRoaXMgY2FuIGJlIGRvbmUgaW4gdHdvIHdheXM6CistIFVzZSB0aGUgIkNUUkwtXSIgY29tbWFuZCB3aGlsZSBzdGFuZGluZyBvbiB0aGUgbmFtZSBvZiBhIGNvbW1hbmQgb3Igb3B0aW9uLgorICBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgdGFnIGlzIGEga2V5d29yZC4gICI8Qy1MZWZ0bW91c2U+IiBhbmQKKyAgImc8TGVmdE1vdXNlPiIgd29yayBqdXN0IGxpa2UgIkNUUkwtXSIuCistIHVzZSB0aGUgIjp0YSB7c3ViamVjdH0iIGNvbW1hbmQuICBUaGlzIGFsc28gd29ya3Mgd2l0aCBub24ta2V5d29yZAorICBjaGFyYWN0ZXJzLgorCitVc2UgQ1RSTC1UIG9yIENUUkwtTyB0byBqdW1wIGJhY2suCitVc2UgIjpxIiB0byBjbG9zZSB0aGUgaGVscCB3aW5kb3cuCisKK0lmIHRoZXJlIGFyZSBzZXZlcmFsIG1hdGNoZXMgZm9yIGFuIGl0ZW0geW91IGFyZSBsb29raW5nIGZvciwgdGhpcyBpcyBob3cgeW91CitjYW4ganVtcCB0byBlYWNoIG9uZSBvZiB0aGVtOgorMS4gT3BlbiBhIGhlbHAgd2luZG93CisyLiBVc2UgdGhlICI6dGFnIiBjb21tYW5kIHdpdGggYSBzbGFzaCBwcmVwZW5kZWQgdG8gdGhlIHRhZy4gIEUuZy46ID4KKwk6dGFnIC9taW4KKzMuIFVzZSAiOnRuZXh0IiB0byBqdW1wIHRvIHRoZSBuZXh0IG1hdGNoaW5nIHRhZy4KKworSXQgaXMgcG9zc2libGUgdG8gYWRkIGhlbHAgZmlsZXMgZm9yIHBsdWdpbnMgYW5kIG90aGVyIGl0ZW1zLiAgWW91IGRvbid0IG5lZWQKK3RvIGNoYW5nZSB0aGUgZGlzdHJpYnV0ZWQgaGVscCBmaWxlcyBmb3IgdGhhdC4gIFNlZSB8YWRkLWxvY2FsLWhlbHB8LgorCitUbyB3cml0ZSBhIGxvY2FsIGhlbHAgZmlsZSwgc2VlIHx3cml0ZS1sb2NhbC1oZWxwfC4KKworTm90ZSB0aGF0IHRoZSB0aXRsZSBsaW5lcyBmcm9tIHRoZSBsb2NhbCBoZWxwIGZpbGVzIGFyZSBhdXRvbWFnaWNhbGx5IGFkZGVkIHRvCit0aGUgIkxPQ0FMIEFERElUSU9OUyIgc2VjdGlvbiBpbiB0aGUgImhlbHAudHh0IiBoZWxwIGZpbGUgfGxvY2FsLWFkZGl0aW9uc3wuCitUaGlzIGlzIGRvbmUgd2hlbiB2aWV3aW5nIHRoZSBmaWxlIGluIFZpbSwgdGhlIGZpbGUgaXRzZWxmIGlzIG5vdCBjaGFuZ2VkLiAgSXQKK2lzIGRvbmUgYnkgZ29pbmcgdGhyb3VnaCBhbGwgaGVscCBmaWxlcyBhbmQgb2J0YWluaW5nIHRoZSBmaXJzdCBsaW5lIG9mIGVhY2gKK2ZpbGUuICBUaGUgZmlsZXMgaW4gJFZJTVJVTlRJTUUvZG9jIGFyZSBza2lwcGVkLgorCisJCQkJCQkJKmhlbHAteHRlcm0td2luZG93KgorSWYgeW91IHdhbnQgdG8gaGF2ZSB0aGUgaGVscCBpbiBhbm90aGVyIHh0ZXJtIHdpbmRvdywgeW91IGNvdWxkIHVzZSB0aGlzCitjb21tYW5kOiA+CisJOiF4dGVybSAtZSB2aW0gK2hlbHAgJgorPAorCisJCQkqOmhlbHBmaW5kKiAqOmhlbHBmKgorOmhlbHBmW2luZF0JCUxpa2UgfDpoZWxwfCwgYnV0IHVzZSBhIGRpYWxvZyB0byBlbnRlciB0aGUgYXJndW1lbnQuCisJCQlPbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gIEl0IG5vdyBleGVjdXRlcyB0aGUKKwkJCVRvb2xCYXIuRmluZEhlbHAgbWVudSBlbnRyeSBpbnN0ZWFkIG9mIHVzaW5nIGEgYnVpbHRpbgorCQkJZGlhbG9nLiAge29ubHkgd2hlbiBjb21waWxlZCB3aXRoIHwrR1VJX0dUS3x9Cis8CQkJe25vdCBpbiBWaX0KKworCQkJCQkqOmhlbHB0KiAqOmhlbHB0YWdzKgorCQkJCSpFMTU0KiAqRTE1MCogKkUxNTEqICpFMTUyKiAqRTE1MyogKkU2NzAqCis6aGVscHRbYWdzXSB7ZGlyfQlHZW5lcmF0ZSB0aGUgaGVscCB0YWdzIGZpbGUocykgZm9yIGRpcmVjdG9yeSB7ZGlyfS4KKwkJCUFsbCAiKi50eHQiIGFuZCAiKi4/P3giIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXJlCisJCQlzY2FubmVkIGZvciBhIGhlbHAgdGFnIGRlZmluaXRpb24gaW4gYmV0d2VlbiBzdGFycy4KKwkJCVRoZSAiKi4/P3giIGZpbGVzIGFyZSBmb3IgdHJhbnNsYXRlZCBkb2NzLCB0aGV5CisJCQlnZW5lcmF0ZSB0aGUgInRhZ3MtPz8iIGZpbGUsIHNlZSB8aGVscC10cmFuc2xhdGVkfC4KKwkJCVRoZSBnZW5lcmF0ZWQgdGFncyBmaWxlcyBhcmUgc29ydGVkLgorCQkJV2hlbiB0aGVyZSBhcmUgZHVwbGljYXRlcyBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuLgorCQkJQW4gZXhpc3RpbmcgdGFncyBmaWxlIGlzIHNpbGVudGx5IG92ZXJ3cml0dGVuLgorCQkJVG8gcmVidWlsZCB0aGUgaGVscCB0YWdzIGluIHRoZSBydW50aW1lIGRpcmVjdG9yeQorCQkJKHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gdGhlcmUpOiA+CisJCQkJOmhlbHB0YWdzICRWSU1SVU5USU1FL2RvYworPAkJCXtub3QgaW4gVml9CisKKworVFJBTlNMQVRFRCBIRUxQCQkJCQkJKmhlbHAtdHJhbnNsYXRlZCoKKworSXQgaXMgcG9zc2libGUgdG8gYWRkIHRyYW5zbGF0ZWQgaGVscCBmaWxlcywgbmV4dCB0byB0aGUgb3JpZ2luYWwgRW5nbGlzaCBoZWxwCitmaWxlcy4gIFZpbSB3aWxsIHNlYXJjaCBmb3IgYWxsIGhlbHAgaW4gImRvYyIgZGlyZWN0b3JpZXMgaW4gJ3J1bnRpbWVwYXRoJy4KK1RoaXMgaXMgb25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2xhbmd8IGZlYXR1cmUuCisKK0Egc2V0IG9mIHRyYW5zbGF0ZWQgaGVscCBmaWxlcyBjb25zaXN0cyBvZiB0aGVzZSBmaWxlczoKKworCWhlbHAuYWJ4CisJaG93dG8uYWJ4CisJLi4uCisJdGFncy1hYgorCisiYWIiIGlzIHRoZSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUuICBUaHVzIGZvciBJdGFsaWFuIHRoZSBuYW1lcyBhcmU6CisKKwloZWxwLml0eAorCWhvd3RvLml0eAorCS4uLgorCXRhZ3MtaXQKKworVGhlICdoZWxwbGFuZycgb3B0aW9uIGNhbiBiZSBzZXQgdG8gdGhlIHByZWZlcnJlZCBsYW5ndWFnZShzKS4gIFRoZSBkZWZhdWx0IGlzCitzZXQgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudC4gIFZpbSB3aWxsIGZpcnN0IHRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgdGFnCitpbiB0aGUgcHJlZmVycmVkIGxhbmd1YWdlKHMpLiAgRW5nbGlzaCBpcyB1c2VkIHdoZW4gaXQgY2Fubm90IGJlIGZvdW5kLgorCitUbyBmaW5kIGEgdGFnIGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UsIGFwcGVuZCAiQGFiIiB0byBhIHRhZywgd2hlcmUgImFiIiBpcyB0aGUKK3R3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZS4gIEV4YW1wbGU6ID4KKwk6aGUgdXNlci1tYW51YWxAaXQKKwk6aGUgdXNlci1tYW51YWxAZW4KK1RoZSBmaXJzdCBvbmUgZmluZHMgdGhlIEl0YWxpYW4gdXNlciBtYW51YWwsIGV2ZW4gd2hlbiAnaGVscGxhbmcnIGlzIGVtcHR5LgorVGhlIHNlY29uZCBvbmUgZmluZHMgdGhlIEVuZ2xpc2ggdXNlciBtYW51YWwsIGV2ZW4gd2hlbiAnaGVscGxhbmcnIGlzIHNldCB0bworIml0Ii4KKworV2hlbiB1c2luZyBjb21tYW5kLWxpbmUgY29tcGxldGlvbiBmb3IgdGhlICI6aGVscCIgY29tbWFuZCwgdGhlICJAZW4iCitleHRlbnRpb24gaXMgb25seSBzaG93biB3aGVuIGEgdGFnIGV4aXN0cyBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzLiAgV2hlbiB0aGUKK3RhZyBvbmx5IGV4aXN0cyBmb3IgRW5nbGlzaCAiQGVuIiBpcyBvbWl0dGVkLgorCitXaGVuIHVzaW5nIHxDVFJMLV18IG9yICI6aGVscCEiIGluIGEgbm9uLUVuZ2xpc2ggaGVscCBmaWxlIFZpbSB3aWxsIHRyeSB0bworZmluZCB0aGUgdGFnIGluIHRoZSBzYW1lIGxhbmd1YWdlLiAgSWYgbm90IGZvdW5kIHRoZW4gJ2hlbHBsYW5nJyB3aWxsIGJlIHVzZWQKK3RvIHNlbGVjdCBhIGxhbmd1YWdlLgorCitIZWxwIGZpbGVzIG11c3QgdXNlIGxhdGluMSBvciB1dGYtOCBlbmNvZGluZy4gIFZpbSBhc3N1bWVzIHRoZSBlbmNvZGluZyBpcwordXRmLTggd2hlbiBmaW5kaW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIHRoZSBmaXJzdCBsaW5lLiAgVGh1cyB5b3UgbXVzdAordHJhbnNsYXRlIHRoZSBoZWFkZXIgd2l0aCAiRm9yIFZpbSB2ZXJzaW9uIi4KKworVGhlIHNhbWUgZW5jb2RpbmcgbXVzdCBiZSB1c2VkIGZvciB0aGUgaGVscCBmaWxlcyBvZiBvbmUgbGFuZ3VhZ2UgaW4gb25lCitkaXJlY3RvcnkuICBZb3UgY2FuIHVzZSBhIGRpZmZlcmVudCBlbmNvZGluZyBmb3IgZGlmZmVyZW50IGxhbmd1YWdlcyBhbmQgdXNlCithIGRpZmZlcmVudCBlbmNvZGluZyBmb3IgaGVscCBmaWxlcyBvZiB0aGUgc2FtZSBsYW5ndWFnZSBidXQgaW4gYSBkaWZmZXJlbnQKK2RpcmVjdG9yeS4KKworSGludHMgZm9yIHRyYW5zbGF0b3JzOgorLSBEbyBub3QgdHJhbnNsYXRlIHRoZSB0YWdzLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgJ2hlbHBsYW5nJyB0bworICBzcGVjaWZ5IHRoZSBwcmVmZXJyZWQgbGFuZ3VhZ2UuICBZb3UgbWF5IGFkZCBuZXcgdGFncyBpbiB5b3VyIGxhbmd1YWdlLgorLSBXaGVuIHlvdSBkbyBub3QgdHJhbnNsYXRlIGEgcGFydCBvZiBhIGZpbGUsIGFkZCB0YWdzIHRvIHRoZSBFbmdsaXNoIHZlcnNpb24sCisgIHVzaW5nIHRoZSAidGFnQGVuIiBub3RhdGlvbi4KKy0gTWFrZSBhIHBhY2thZ2Ugd2l0aCBhbGwgdGhlIGZpbGVzIGFuZCB0aGUgdGFncyBmaWxlIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQuCisgIFVzZXJzIGNhbiBkcm9wIGl0IGluIG9uZSBvZiB0aGUgImRvYyIgZGlyZWN0b3JpZXMgYW5kIHN0YXJ0IHVzZSBpdC4KKyAgUmVwb3J0IHRoaXMgdG8gQnJhbSwgc28gdGhhdCBoZSBjYW4gYWRkIGEgbGluayBvbiB3d3cudmltLm9yZy4KKy0gVXNlIHRoZSB8OmhlbHB0YWdzfCBjb21tYW5kIHRvIGdlbmVyYXRlIHRoZSB0YWdzIGZpbGVzLiAgSXQgd2lsbCBmaW5kIGFsbAorICBsYW5ndWFnZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gUHJpbnRpbmcJCQkJCQkqcHJpbnRpbmcqCisKK09uIE1TLVdpbmRvd3MgVmltIGNhbiBwcmludCB5b3VyIHRleHQgb24gYW55IGluc3RhbGxlZCBwcmludGVyLiAgT24gb3RoZXIKK3N5c3RlbXMgYSBQb3N0U2NyaXB0IGZpbGUgaXMgcHJvZHVjZWQuICBUaGlzIGNhbiBiZSBkaXJlY3RseSBzZW50IHRvIGEKK1Bvc3RTY3JpcHQgcHJpbnRlci4gIEZvciBvdGhlciBwcmludGVycyBhIHByb2dyYW0gbGlrZSBnaG9zdHNjcmlwdCBuZWVkcyB0byBiZQordXNlZC4KKworMy4xIFBvc3RTY3JpcHQgUHJpbnRpbmcJCQl8cG9zdHNjcmlwdC1wcmludGluZ3wKKzMuMiBQb3N0U2NyaXB0IFByaW50aW5nIEVuY29kaW5nCXxwb3N0c2NyaXB0LXByaW50LWVuY29kaW5nfAorMy4zIFBvc3RTY3JpcHQgUHJpbnRpbmcgVHJvdWJsZXNob290aW5nIHxwb3N0c2NyaXB0LXByaW50LXRyb3VibGV8CiszLjQgUG9zdFNjcmlwdCBVdGlsaXRpZXMJCXxwb3N0c2NyaXB0LXByaW50LXV0aWx8CiszLjUgRm9ybWZlZWQgQ2hhcmFjdGVycwkJCXxwcmludGluZy1mb3JtZmVlZHwKKwore25vdCBpbiBWaX0KK3tvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggfCtwcmludGVyfCBmZWF0dXJlfQorCisJCQkJCSo6aGEqICo6aGFyZGNvcHkqICpFMjM3KiAqRTIzOCogKkUzMjQqCis6W3JhbmdlXWhhW3JkY29weV1bIV0gW2FyZ3VtZW50c10KKwkJCVNlbmQgW3JhbmdlXSBsaW5lcyAoZGVmYXVsdCB3aG9sZSBmaWxlKSB0byB0aGUKKwkJCXByaW50ZXIuCisKKwkJCU9uIE1TLVdpbmRvd3MgYSBkaWFsb2cgaXMgZGlzcGxheWVkIHRvIGFsbG93IHNlbGVjdGlvbgorCQkJb2YgcHJpbnRlciwgcGFwZXIgc2l6ZSBldGMuIFRvIHNraXAgdGhlIGRpYWxvZywgdXNlCisJCQl0aGUgWyFdLiAgSW4gdGhpcyBjYXNlIHRoZSBwcmludGVyIGRlZmluZWQgYnkKKwkJCSdwcmludGRldmljZScgaXMgdXNlZCwgb3IsIGlmICdwcmludGRldmljZScgaXMgZW1wdHksCisJCQl0aGUgc3lzdGVtIGRlZmF1bHQgcHJpbnRlci4KKworCQkJRm9yIHN5c3RlbXMgb3RoZXIgdGhhbiBNUy1XaW5kb3dzLCBQb3N0U2NyaXB0IGlzCisJCQl3cml0dGVuIGluIGEgdGVtcCBmaWxlIGFuZCAncHJpbnRleHByJyBpcyB1c2VkIHRvCisJCQlhY3R1YWxseSBwcmludCBpdC4gIFRoZW4gW2FyZ3VtZW50c10gY2FuIGJlIHVzZWQgYnkKKwkJCSdwcmludGV4cHInIHRocm91Z2ggfHY6Y21kYXJnfC4gIE90aGVyd2lzZSBbYXJndW1lbnRzXQorCQkJaXMgaWdub3JlZC4gICdwcmludG9wdGlvbnMnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKwkJCXBhcGVyIHNpemUsIGR1cGxleCwgZXRjLgorCis6W3JhbmdlXWhhW3JkY29weV1bIV0gPntmaWxlbmFtZX0KKwkJCUFzIGFib3ZlLCBidXQgd3JpdGUgdGhlIHJlc3VsdGluZyBQb3N0U2NyaXB0IGluIGZpbGUKKwkJCXtmaWxlbmFtZX0uCisJCQlUaGluZ3MgbGlrZSAiJSIgYXJlIGV4cGFuZGVkIHxjbWRsaW5lLXNwZWNpYWx8CisJCQlDYXJlZnVsOiBBbiBleGlzdGluZyBmaWxlIGlzIHNpbGVudGx5IG92ZXJ3cml0dGVuLgorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtwb3N0c2NyaXB0fAorCQkJZmVhdHVyZX0KKwkJCU9uIE1TLVdpbmRvd3MgdXNlIHRoZSAicHJpbnQgdG8gZmlsZSIgZmVhdHVyZSBvZiB0aGUKKwkJCXByaW50ZXIgZHJpdmVyLgorCitQcm9ncmVzcyBpcyBkaXNwbGF5ZWQgZHVyaW5nIHByaW50aW5nIGFzIGEgcGFnZSBudW1iZXIgYW5kIGEgcGVyY2VudGFnZS4gIFRvCithYm9ydCBwcmludGluZyB1c2UgdGhlIGludGVycnVwdCBrZXkgKENUUkwtQyBvciwgb24gTVMtc3lzdGVtcywgQ1RSTC1CcmVhaykuCisKK1ByaW50ZXIgb3V0cHV0IGlzIGNvbnRyb2xsZWQgYnkgdGhlICdwcmludGZvbnQnIGFuZCAncHJpbnRvcHRpb25zJyBvcHRpb25zLgorJ3ByaW50aGVhZGVyJyBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiBhIHBhZ2UgaGVhZGVyLgorCitUaGUgcHJpbnRlZCBmaWxlIGlzIGFsd2F5cyBsaW1pdGVkIHRvIHRoZSBzZWxlY3RlZCBtYXJnaW5zLCBpcnJlc3BlY3RpdmUgb2YKK3RoZSBjdXJyZW50IHdpbmRvdydzICd3cmFwJyBvciAnbGluZWJyZWFrJyBzZXR0aW5ncy4gIFRoZSAid3JhcCIgaXRlbSBpbgorJ3ByaW50b3B0aW9ucycgY2FuIGJlIHVzZWQgdG8gc3dpdGNoIHdyYXBwaW5nIG9mZi4KK1RoZSBjdXJyZW50IGhpZ2hsaWdodGluZyBjb2xvcnMgYXJlIHVzZWQgaW4gdGhlIHByaW50b3V0LCB3aXRoIHRoZSBmb2xsb3dpbmcKK2NvbnNpZGVyYXRpb25zOgorMSkgVGhlIG5vcm1hbCBiYWNrZ3JvdW5kIGlzIGFsd2F5cyByZW5kZXJlZCBhcyB3aGl0ZSAoaS5lLiBibGFuayBwYXBlci4pCisyKSBXaGl0ZSB0ZXh0IG9yIHRoZSBkZWZhdWx0IGZvcmVncm91bmQgaXMgcmVuZGVyZWQgYXMgYmxhY2ssIHNvIHRoYXQgaXQgc2hvd3MKKyAgIHVwIQorMykgSWYgJ2JhY2tncm91bmQnIGlzICJkYXJrIiwgdGhlbiB0aGUgY29sb3VycyBhcmUgZGFya2VuZWQgdG8gY29tcGVuc2F0ZSBmb3IKKyAgIHRoZSBmYWN0IHRoYXQgb3RoZXJ3aXNlIHRoZXkgd291bGQgYmUgdG9vIGJyaWdodCB0byBzaG93IHVwIGNsZWFybHkgb24KKyAgIHdoaXRlIHBhcGVyLgorCisKKzMuMSBQb3N0U2NyaXB0IFByaW50aW5nCQkJCQkqcG9zdHNjcmlwdC1wcmludGluZyoKKwkJCQkJCSpFNDU1KiAqRTQ1NiogKkU0NTcqICpFNjI0KgorUHJvdmlkZWQgeW91IGhhdmUgZW5vdWdoIGRpc2sgc3BhY2UgdGhlcmUgc2hvdWxkIGJlIG5vIHByb2JsZW1zIGdlbmVyYXRpbmcgYQorUG9zdFNjcmlwdCBmaWxlLiAgWW91IG5lZWQgdG8gaGF2ZSB0aGUgcnVudGltZSBmaWxlcyBjb3JyZWN0bHkgaW5zdGFsbGVkIChpZgoreW91IGNhbiBmaW5kIHRoZSBoZWxwIGZpbGVzLCB0aGV5IHByb2JhYmx5IGFyZSkuCisKK1RoZXJlIGFyZSBjdXJyZW50bHkgYSBudW1iZXIgb2YgbGltaXRhdGlvbnMgd2l0aCBQb3N0U2NyaXB0IHByaW50aW5nOgorCistICdwcmludGZvbnQnIC0gVGhlIGZvbnQgbmFtZSBpcyBpZ25vcmVkICh0aGUgQ291cmllciBmYW1pbHkgaXMgYWx3YXlzIHVzZWQgLQorICBpdCBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIGFsbCBQb3N0U2NyaXB0IHByaW50ZXJzKSBidXQgdGhlIGZvbnQgc2l6ZSBpcworICB1c2VkLgorCistICdwcmludG9wdGlvbnMnIC0gVGhlIGR1cGxleCBzZXR0aW5nIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIFBvc3RTY3JpcHQKKyAgb3V0cHV0LCBidXQgaXQgaXMgdXAgdG8gdGhlIHByaW50ZXIgdG8gdGFrZSBub3RpY2Ugb2YgdGhlIHNldHRpbmcuICBJZiB0aGUKKyAgcHJpbnRlciBkb2VzIG5vdCBzdXBwb3J0IGR1cGxleCBwcmludGluZyB0aGVuIGl0IHNob3VsZCBiZSBzaWxlbnRseSBpZ25vcmVkLgorICBTb21lIHByaW50ZXJzLCBob3dldmVyLCBkb24ndCBwcmludCBhdCBhbGwuCisKKy0gOC1iaXQgc3VwcG9ydCAtIFdoaWxlIGEgbnVtYmVyIG9mIDgtYml0IHByaW50IGNoYXJhY3RlciBlbmNvZGluZ3MgYXJlCisgIHN1cHBvcnRlZCBpdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgY2hhcmFjdGVycyB3aWxsIG5vdCBwcmludC4gIFdoZXRoZXIgYQorICBjaGFyYWN0ZXIgd2lsbCBwcmludCBkZXBlbmRzIG9uIHRoZSBmb250IGluIHRoZSBwcmludGVyIGtub3dpbmcgdGhlCisgIGNoYXJhY3Rlci4gIE1pc3NpbmcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYW4gdXBzaWRlIGRvd24gcXVlc3Rpb24KKyAgbWFyaywgb3IgYSBzcGFjZSBpZiB0aGF0IGNoYXJhY3RlciBpcyBhbHNvIG5vdCBrbm93biBieSB0aGUgZm9udC4gIEl0IG1heSBiZQorICBwb3NzaWJsZSB0byBnZXQgYWxsIHRoZSBjaGFyYWN0ZXJzIGluIGFuIGVuY29kaW5nIHRvIHByaW50IGJ5IGluc3RhbGxpbmcgYQorICBuZXcgdmVyc2lvbiBvZiB0aGUgQ291cmllciBmb250IGZhbWlseS4KKworLSBNdWx0aS1ieXRlIHN1cHBvcnQgLSBDdXJyZW50bHkgVklNIHdpbGwgdHJ5IHRvIGNvbnZlcnQgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzCisgIHRvIHRoZSA4LWJpdCBlbmNvZGluZyBzcGVjaWZpZWQgYnkgJ3ByaW50ZW5jb2RpbmcnIChvciBsYXRpbjEgaWYgaXQgaXMKKyAgZW1wdHkpLiAgQW55IGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgYXJlIHNob3duIGFzCisgIHVua25vd24gY2hhcmFjdGVycy4gIFByaW50aW5nIHdpbGwgZmFpbCBpZiBWSU0gY2Fubm90IGNvbnZlcnQgdGhlIG11bHRpLWJ5dGUKKyAgdG8gdGhlIDgtYml0IGVuY29kaW5nLgorCisKKzMuMiBDdXN0b20gOC1iaXQgUHJpbnQgQ2hhcmFjdGVyIEVuY29kaW5ncwkqcG9zdHNjcmlwdC1wcmludC1lbmNvZGluZyoKKwkJCQkJCQkJKkU2MTgqICpFNjE5KgorVG8gdXNlIHlvdXIgb3duIHByaW50IGNoYXJhY3RlciBlbmNvZGluZyB3aGVuIHByaW50aW5nIDgtYml0IGNoYXJhY3RlciBkYXRhCit5b3UgbmVlZCB0byBkZWZpbmUgeW91ciBvd24gUG9zdFNjcmlwdCBmb250IGVuY29kaW5nIHZlY3Rvci4gIERldGFpbHMgb24gaG93Cit0byB0byBkZWZpbmUgYSBmb250IGVuY29kaW5nIHZlY3RvciBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgaGVscCBmaWxlLCBidXQKK3lvdSBjYW4gZmluZCBkZXRhaWxzIGluIHRoZSBQb3N0U2NyaXB0IExhbmd1YWdlIFJlZmVyZW5jZSBNYW51YWwsIDNyZCBFZGl0aW9uLAorcHVibGlzaGVkIGJ5IEFkZGlzb24tV2VzbGV5IGFuZCBhdmFpbGFibGUgaW4gUERGIGZvcm0gYXQKK2h0dHA6Ly93d3cuYWRvYmUuY29tLy4gIFRoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gZG8gZm9yIFZJTSB0bworbG9jYXRlIGFuZCB1c2UgeW91ciBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcuCisKK2kuICAgRGVjaWRlIG9uIGEgdW5pcXVlIG5hbWUgZm9yIHlvdXIgZW5jb2RpbmcgdmVjdG9yLCBvbmUgdGhhdCBkb2VzIG5vdCBjbGFzaAorICAgICB3aXRoIGFueSBvZiB0aGUgcmVjb2duaXplZCBvciBzdGFuZGFyZCBlbmNvZGluZyBuYW1lcyB0aGF0IFZJTSB1c2VzIChzZWUKKyAgICAgfGVuY29kaW5nLW5hbWVzfCBmb3IgYSBsaXN0KSwgYW5kIHRoYXQgbm8gb25lIGVsc2UgaXMgbGlrZWx5IHRvIHVzZS4KK2lpLiAgQ29weSAkVklNUlVOVElNRS9wcmludC9sYXRpbjEucHMgdG8gdGhlIHByaW50IHN1YmRpcmVjdG9yeSBpbiB5b3VyCisgICAgICdydW50aW1lcGF0aCcgYW5kIHJlbmFtZSBpdCB3aXRoIHlvdXIgdW5pcXVlIG5hbWUuCitpaWkuIEVkaXQgeW91ciByZW5hbWVkIGNvcHkgb2YgbGF0aW4xLnBzLCByZXBsYWNpbmcgYWxsIG9jY3VycmVuY2VzIG9mIGxhdGluMQorICAgICB3aXRoIHlvdXIgdW5pcXVlIG5hbWUgKGRvbid0IGZvcmdldCB0aGUgbGluZSBzdGFydGluZyAlJVRpdGxlOiksIGFuZAorICAgICBtb2RpZnkgdGhlIGFycmF5IG9mIGdseXBoIG5hbWVzIHRvIGRlZmluZSB5b3VyIG5ldyBlbmNvZGluZyB2ZWN0b3IuICBUaGUKKyAgICAgYXJyYXkgbXVzdCBoYXZlIGV4YWN0bHkgMjU2IGVudHJpZXMgb3IgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gcHJpbnQhCitpdi4gIFdpdGhpbiBWSU0sIHNldCAncHJpbnRlbmNvZGluZycgdG8geW91ciB1bmlxdWUgZW5jb2RpbmcgbmFtZSBhbmQgdGhlbgorICAgICBwcmludCB5b3VyIGZpbGUuICBWSU0gd2lsbCBub3cgdXNlIHlvdXIgY3VzdG9tIHByaW50IGNoYXJhY3RlciBlbmNvZGluZy4KKworVklNIHdpbGwgcmVwb3J0IGFuIGVycm9yIHdpdGggdGhlIHJlc291cmNlIGZpbGUgaWYgeW91IGNoYW5nZSB0aGUgb3JkZXIgb3IKK2NvbnRlbnQgb2YgdGhlIGZpcnN0IDMgbGluZXMsIG90aGVyIHRoYW4gdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIG9uIHRoZSBsaW5lCitzdGFydGluZyAlJVRpdGxlOiBvciB0aGUgdmVyc2lvbiBudW1iZXIgb24gdGhlIGxpbmUgc3RhcnRpbmcgJSVWZXJzaW9uOi4KKworW1RlY2huaWNhbCBleHBsYW5hdGlvbiBmb3IgdGhvc2UgdGhhdCBrbm93IFBvc3RTY3JpcHQgLSBWSU0gbG9va3MgZm9yIGEgZmlsZQord2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBlbmNvZGluZyBpdCB3aWxsIHVzZSB3aGVuIHByaW50aW5nLiAgVGhlIGZpbGUKK2RlZmluZXMgYSBuZXcgUG9zdFNjcmlwdCBFbmNvZGluZyByZXNvdXJjZSBjYWxsZWQgL1ZJTS1uYW1lLCB3aGVyZSBuYW1lIGlzIHRoZQorcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIFZJTSB3aWxsIHVzZS5dCisKKworMy4zIFBvc3RTY3JpcHQgUHJpbnRpbmcgVHJvdWJsZXNob290aW5nCQkqcG9zdHNjcmlwdC1wcmludC10cm91YmxlKgorCQkJCQkJCQkJKkU2MjEqCitVc3VhbGx5IHRoZSBvbmx5IHNpZ24gb2YgYSBwcm9ibGVtIHdoZW4gcHJpbnRpbmcgd2l0aCBQb3N0U2NyaXB0IGlzIHRoYXQgeW91cgorcHJpbnRvdXQgZG9lcyBub3QgYXBwZWFyLiAgSWYgeW91IGFyZSBsdWNreSB5b3UgbWF5IGdldCBhIHByaW50ZWQgcGFnZSB0aGF0Cit0ZWxscyB5b3UgdGhlIFBvc3RTY3JpcHQgb3BlcmF0b3IgdGhhdCBnZW5lcmF0ZWQgdGhlIGVycm9yIHRoYXQgcHJldmVudGVkIHRoZQorcHJpbnQgam9iIGNvbXBsZXRpbmcuCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgYXMgdG8gd2h5IHRoZSBwcmludGluZyBtYXkgaGF2ZSBmYWlsZWQ6CisKKy0gV3JvbmcgdmVyc2lvbiBvZiB0aGUgcHJvbG9nIHJlc291cmNlIGZpbGUuICBUaGUgcHJvbG9nIHJlc291cmNlIGZpbGUKKyAgY29udGFpbnMgc29tZSBQb3N0U2NyaXB0IHRoYXQgVklNIG5lZWRzIHRvIGJlIGFibGUgdG8gcHJpbnQuICBFYWNoIHZlcnNpb24KKyAgb2YgVklNIG5lZWRzIG9uZSBwYXJ0aWN1bGFyIHZlcnNpb24uICBNYWtlIHN1cmUgeW91IGhhdmUgY29ycmVjdGx5IGluc3RhbGxlZAorICB0aGUgcnVudGltZSBmaWxlcywgYW5kIGRvbid0IGhhdmUgYW55IG9sZCB2ZXJzaW9ucyBvZiBhIGZpbGUgY2FsbGVkIHByb2xvZworICBpbiB0aGUgcHJpbnQgZGlyZWN0b3J5IGluIHlvdXIgJ3J1bnRpbWVwYXRoJyBkaXJlY3RvcnkuCisKKy0gUGFwZXIgc2l6ZS4gIFNvbWUgUG9zdFNjcmlwdCBwcmludGVycyB3aWxsIGFib3J0IHByaW50aW5nIGEgZmlsZSBpZiB0aGV5IGRvCisgIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgcGFwZXIgc2l6ZS4gIEJ5IGRlZmF1bHQgVklNIHVzZXMgQTQgcGFwZXIuICBGaW5kCisgIG91dCB3aGF0IHNpemUgcGFwZXIgeW91ciBwcmludGVyIG5vcm1hbGx5IHVzZXMgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgcGFwZXIKKyAgc2l6ZSB3aXRoICdwcmludG9wdGlvbnMnLiAgSWYgeW91IGNhbm5vdCBmaW5kIHRoZSBuYW1lIG9mIHRoZSBwYXBlciB1c2VkLAorICBtZWFzdXJlIGEgc2hlZXQgYW5kIGNvbXBhcmUgaXQgd2l0aCB0aGUgdGFibGUgb2Ygc3VwcG9ydGVkIHBhcGVyIHNpemVzIGxpc3RlZAorICBmb3IgJ3ByaW50b3B0aW9ucycsIHVzaW5nIHRoZSBwYXBlciB0aGF0IGlzIGNsb3Nlc3QgaW4gYm90aCB3aWR0aCBBTkQgaGVpZ2h0LgorICBOb3RlOiBUaGUgZGltZW5zaW9ucyBvZiBhY3R1YWwgcGFwZXIgbWF5IHZhcnkgc2xpZ2h0bHkgZnJvbSB0aGUgb25lcyBsaXN0ZWQuCisgIElmIHRoZXJlIGlzIG5vIHBhcGVyIGxpc3RlZCBjbG9zZSBlbm91Z2gsIHRoZW4geW91IG1heSB3YW50IHRvIHRyeSBwc3Jlc2l6ZQorICBmcm9tIFBTVXRpbHMsIGRpc2N1c3NlZCBiZWxvdy4KKworLSBUd28tc2lkZWQgcHJpbnRpbmcgKGR1cGxleCkuICBOb3JtYWxseSBhIFBvc3RTY3JpcHQgcHJpbnRlciB0aGF0IGRvZXMgbm90CisgIHN1cHBvcnQgdHdvLXNpZGVkIHByaW50aW5nIHdpbGwgaWdub3JlIGFueSByZXF1ZXN0IHRvIGRvIGl0LiAgSG93ZXZlciwgc29tZQorICBwcmludGVycyBtYXkgYWJvcnQgdGhlIGpvYiBhbHRvZ2V0aGVyLiAgVHJ5IHByaW50aW5nIHdpdGggZHVwbGV4IHR1cm5lZCBvZmYuCisgIE5vdGU6IER1cGxleCBwcmludHMgY2FuIGJlIGFjaGlldmVkIG1hbnVhbGx5IHVzaW5nIFBTIHV0aWxzIC0gc2VlIGJlbG93LgorCistIENvbGxhdGVkIHByaW50aW5nLiAgQXMgd2l0aCBEdXBsZXggcHJpbnRpbmcsIG1vc3QgUG9zdFNjcmlwdCBwcmludGVycyB0aGF0CisgIGRvIG5vdCBzdXBwb3J0IGNvbGxhdGluZyBwcmludG91dHMgd2lsbCBpZ25vcmUgYSByZXF1ZXN0IHRvIGRvIHNvLiAgU29tZSBtYXkKKyAgbm90LiAgVHJ5IHByaW50aW5nIHdpdGggY29sbGF0aW9uIHR1cm5lZCBvZmYuCisKKy0gU3ludGF4IGhpZ2hsaWdodGluZy4gIFNvbWUgcHJpbnQgbWFuYWdlbWVudCBjb2RlIG1heSBwcmV2ZW50IHRoZSBnZW5lcmF0ZWQKKyAgUG9zdFNjcmlwdCBmaWxlIGZyb20gYmVpbmcgcHJpbnRlZCBvbiBhIGJsYWNrIGFuZCB3aGl0ZSBwcmludGVyIHdoZW4gc3ludGF4CisgIGhpZ2hsaWdodGluZyBpcyB0dXJuZWQgb24sIGV2ZW4gaWYgc29saWQgYmxhY2sgaXMgdGhlIG9ubHkgY29sb3IgdXNlZC4gIFRyeQorICBwcmludGluZyB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgdHVybmVkIG9mZi4KKworQSBzYWZlIHByaW50b3B0aW9ucyBzZXR0aW5nIHRvIHRyeSBpczogPgorCisJOnNldCBwcmludG9wdGlvbnM9cGFwZXI6QTQsZHVwbGV4Om9mZixjb2xsYXRlOm4sc3ludGF4Om4KKworUmVwbGFjZSAiQTQiIHdpdGggdGhlIHBhcGVyIHNpemUgdGhhdCBiZXN0IG1hdGNoZXMgeW91ciBwcmludGVyIHBhcGVyLgorCisKKzMuNCBQb3N0U2NyaXB0IFV0aWxpdGllcwkJCSpwb3N0c2NyaXB0LXByaW50LXV0aWwqCisKKzMuNC4xIEdob3N0c2NyaXB0CisKK0dob3N0c2NyaXB0IGlzIGEgUG9zdFNjcmlwdCBhbmQgUERGIGludGVycHJldGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheQorYW5kIHByaW50IG9uIG5vbi1Qb3N0U2NyaXB0IHByaW50ZXJzIFBvc3RTY3JpcHQgYW5kIFBERiBmaWxlcy4gIEl0IGNhbiBhbHNvCitnZW5lcmF0ZSBQREYgZmlsZXMgZnJvbSBQb3N0U2NyaXB0LgorCitHaG9zdHNjcmlwdCB3aWxsIHJ1biBvbiBhIHdpZGUgdmFyaWV0eSBvZiBwbGF0Zm9ybXMuCisKK1RoZXJlIGFyZSB0aHJlZSBhdmFpbGFibGUgdmVyc2lvbnM6CisKKy0gQUZQTCBHaG9zdHNjcmlwdCAoZm9ybWVybHkgQWxhZGRpbiBHaG9zdHNjcmlwdCkgd2hpY2ggaXMgZnJlZSBmb3IKKyAgbm9uLWNvbW1lcmNpYWwgdXNlLiAgSXQgY2FuIGJlIG9idGFpbmVkIGZyb206CisKKyAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC8KKworLSBHTlUgR2hvc3RzY3JpcHQgd2hpY2ggaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEl0CisgIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorCisgICAgZnRwOi8vbWlycm9yLmNzLndpc2MuZWR1L3B1Yi9taXJyb3JzL2dob3N0L2dudS8KKworLSBBIGNvbW1lcmNpYWwgdmVyc2lvbiBmb3IgaW5jbHVzaW9uIGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuCisKK0FkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gR2hvc3RzY3JpcHQgY2FuIGFsc28gYmUgZm91bmQgYXQ6CisKKyAgaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20vCisKK1N1cHBvcnQgZm9yIGEgbnVtYmVyIG9mIG5vbiBQb3N0U2NyaXB0IHByaW50ZXJzIGlzIHByb3ZpZGVkIGluIHRoZQorZGlzdHJpYnV0aW9uIGFzIHN0YW5kYXJkLCBidXQgaWYgeW91IGNhbm5vdCBmaW5kIHN1cHBvcnQgZm9yIHlvdXIgcHJpbnRlcgorY2hlY2sgdGhlIEdob3N0c2NyaXB0IHNpdGUgZm9yIG90aGVyIHByaW50ZXJzIG5vdCBpbmNsdWRlZCBieSBkZWZhdWx0LgorCisKKzMuNC4yIEdob3N0c2NyaXB0IFByZXZpZXdlcnMuCisKK1RoZSBpbnRlcmZhY2UgdG8gR2hvc3RzY3JpcHQgaXMgdmVyeSBwcmltaXRpdmUgc28gYSBudW1iZXIgb2YgZ3JhcGhpY2FsIGZyb250CitlbmRzIGhhdmUgYmVlbiBjcmVhdGVkLiAgVGhlc2UgYWxsb3cgZWFzaWVyIFBvc3RTY3JpcHQgZmlsZSBzZWxlY3Rpb24sCitwcmV2aWV3aW5nIGF0IGRpZmZlcmVudCB6b29tIGxldmVscywgYW5kIHByaW50aW5nLiAgQ2hlY2sgc3VwcGxpZWQKK2RvY3VtZW50YXRpb24gZm9yIGZ1bGwgZGV0YWlscy4KKworWDExCisKKy0gR2hvc3R2aWV3LiAgT2J0YWluYWJsZSBmcm9tOgorCisgICAgaHR0cDovL3d3dy5jcy53aXNjLmVkdS9+Z2hvc3QvZ3YvCisKKy0gZ3YuICBEZXJpdmVkIGZyb20gR2hvc3R2aWV3LiAgT2J0YWluYWJsZSBmcm9tOgorCisgICAgaHR0cDovL3d3d3RoZXAucGh5c2lrLnVuaS1tYWluei5kZS9+cGxhc3MvZ3YvCisKKyAgQ29waWVzIChwb3NzaWJseSBub3QgdGhlIG1vc3QgcmVjZW50KSBjYW4gYmUgZm91bmQgYXQ6CisKKyAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC9ndi8KKworT3BlblZNUworCistIElzIGFwcGFyZW50bHkgc3VwcG9ydGVkIGluIHRoZSBtYWluIGNvZGUgbm93ICh1bnRlc3RlZCkuICBTZWU6CisKKyAgICBodHRwOi8vd3d3dGhlcC5waHlzaWsudW5pLW1haW56LmRlL35wbGFzcy9ndi8KKworV2luZG93cyBhbmQgT1MvMgorCistIEdTdmlldy4gIE9idGFpbmFibGUgZnJvbToKKworICAgIGh0dHA6Ly93d3cuY3Mud2lzYy5lZHUvfmdob3N0L2dzdmlldy8KKworRE9TCisKKy0gcHNfdmlldy4gIE9idGFpbmFibGUgZnJvbToKKworICAgIGZ0cDovL2Z0cC5wZy5nZGEucGwvcHViL1RlWC9zdXBwb3J0L3BzX3ZpZXcvCisgICAgZnRwOi8vZnRwLmRhbnRlLmRlL3RleC1hcmNoaXZlL3N1cHBvcnQvcHNfdmlldy8KKworTGludXgKKworLSBHU3ZpZXcuICBMaW51eCB2ZXJzaW9uIG9mIHRoZSBwb3B1bGFyIFdpbmRvd3MgYW5kIE9TLzIgcHJldmlld2VyLgorICBPYnRhaW5hYmxlIGZyb206CisKKyAgICBodHRwOi8vd3d3LmNzLndpc2MuZWR1L35naG9zdC9nc3ZpZXcvCisKKy0gQk1WLiAgRGlmZmVyZW50IGZyb20gR2hvc3R2aWV3IGFuZCBndiBpbiB0aGF0IGl0IGRvZXNuJ3QgdXNlIFggYnV0IHN2Z2FsaWIuCisgIE9idGFpbmFibGUgZnJvbToKKworICAgIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvYXBwcy9ncmFwaGljcy92aWV3ZXJzL3N2Z2EvYm12LTEuMi50Z3oKKworCiszLjQuMyBQU1V0aWxzCisKK1BTVXRpbHMgaXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdHkgcHJvZ3JhbXMgZm9yIG1hbmlwdWxhdGluZyBQb3N0U2NyaXB0Citkb2N1bWVudHMuICBCaW5hcnkgZGlzdHJpYnV0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBtYW55IHBsYXRmb3JtcywgYXMgd2VsbCBhcwordGhlIGZ1bGwgc291cmNlLiAgUFNVdGlscyBjYW4gYmUgZm91bmQgYXQ6CisKKyAgaHR0cDovL2tuYWNrZXJlZC5vcmcvYW5ndXMvcHN1dGlscworCitUaGUgdXRpbGl0aWVzIG9mIGludGVyZXN0IGluY2x1ZGU6CisKKy0gcHNudXAuICAgICBDb252ZXJ0IFBTIGZpbGVzIGZvciBOLXVwIHByaW50aW5nLgorLSBwc3NlbGVjdC4gIFNlbGVjdCBwYWdlIHJhbmdlIGFuZCBvcmRlciBvZiBwcmludGluZy4KKy0gcHNyZXNpemUuICBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZS4KKy0gcHNib29rLiAgICBSZW9yZGVyIGFuZCBsYXkgb3V0IHBhZ2VzIHJlYWR5IGZvciBtYWtpbmcgYSBib29rLgorCitUaGUgb3V0cHV0IG9mIG9uZSBwcm9ncmFtIGNhbiBiZSB1c2VkIGFzIHRoZSBpbnB1dCB0byB0aGUgbmV4dCwgYWxsb3dpbmcgZm9yCitjb21wbGV4IHByaW50IGRvY3VtZW50IGNyZWF0aW9uLgorCisKK04tVVAgUFJJTlRJTkcKKworVGhlIHBzbnVwIHV0aWxpdHkgdGFrZXMgYW4gZXhpc3RpbmcgUG9zdFNjcmlwdCBmaWxlIGdlbmVyYXRlZCBmcm9tIFZJTSBhbmQKK2NvbnZlcnQgaXQgdG8gYW4gbi11cCB2ZXJzaW9uLiAgVGhlIHNpbXBsZXN0IHdheSB0byBjcmVhdGUgYSAyLXVwIHByaW50b3V0IGlzCit0byBmaXJzdCBjcmVhdGUgYSBQb3N0U2NyaXB0IGZpbGUgd2l0aDogPgorCisJOmhhcmRjb3B5ID4gdGVzdC5wcworCitUaGVuIG9uIHlvdXIgY29tbWFuZCBsaW5lIGV4ZWN1dGU6ID4KKworCXBzbnVwIC1uIDIgdGVzdC5wcyBmaW5hbC5wcworCitOb3RlOiBZb3UgbWF5IGdldCB3YXJuaW5ncyBmcm9tIHNvbWUgR2hvc3RzY3JpcHQgcHJldmlld2VycyBmb3IgZmlsZXMgcHJvZHVjZWQKK2J5IHBzbnVwIC0gdGhlc2UgbWF5IHNhZmVseSBiZSBpZ25vcmVkLgorCitGaW5hbGx5IHByaW50IHRoZSBmaWxlIGZpbmFsLnBzIHRvIHlvdXIgUG9zdFNjcmlwdCBwcmludGVyIHdpdGggeW91cgorcGxhdGZvcm0ncyBwcmludCBjb21tYW5kLiAgKFlvdSB3aWxsIG5lZWQgdG8gZGVsZXRlIHRoZSB0d28gUG9zdFNjcmlwdCBmaWxlcworYWZ0ZXJ3YXJkcyB5b3Vyc2VsZi4pICAncHJpbnRleHByJyBjb3VsZCBiZSBtb2RpZmllZCB0byBwZXJmb3JtIHRoaXMgZXh0cmEKK3N0ZXAgYmVmb3JlIHByaW50aW5nLgorCisKK0FMVEVSTkFURSBEVVBMRVggUFJJTlRJTkcKKworSXQgaXMgcG9zc2libGUgdG8gYWNoaWV2ZSBhIHBvb3IgbWFuJ3MgdmVyc2lvbiBvZiBkdXBsZXggcHJpbnRpbmcgdXNpbmcgdGhlIFBTCit1dGlsaXR5IHBzc2VsZWN0LiAgVGhpcyB1dGlsaXR5IGhhcyBvcHRpb25zIC1lIGFuZCAtbyBmb3IgcHJpbnRpbmcganVzdCB0aGUKK2V2ZW4gb3Igb2RkIHBhZ2VzIG9mIGEgUFMgZmlsZSByZXNwZWN0aXZlbHkuCisKK0ZpcnN0IGdlbmVyYXRlIGEgUFMgZmlsZSB3aXRoIHRoZSAnaGFyZGNvcHknIGNvbW1hbmQsIHRoZW4gZ2VuZXJhdGUgYSBuZXcKK2ZpbGVzIHdpdGggYWxsIHRoZSBvZGQgYW5kIGV2ZW4gbnVtYmVyZWQgcGFnZXMgd2l0aDogPgorCisJcHNzZWxlY3QgLW8gdGVzdC5wcyBvZGQucHMKKwlwc3NlbGVjdCAtZSB0ZXN0LnBzIGV2ZW4ucHMKKworTmV4dCBwcmludCBvZGQucHMgd2l0aCB5b3VyIHBsYXRmb3JtJ3Mgbm9ybWFsIHByaW50IGNvbW1hbmQuICBUaGVuIHRha2UgdGhlCitwcmludCBvdXRwdXQsIHR1cm4gaXQgb3ZlciBhbmQgcGxhY2UgaXQgYmFjayBpbiB0aGUgcGFwZXIgZmVlZGVyLiAgTm93IHByaW50CitldmVuLnBzIHdpdGggeW91ciBwbGF0Zm9ybSdzIHByaW50IGNvbW1hbmQuICBBbGwgdGhlIGV2ZW4gcGFnZXMgc2hvdWxkIG5vdworYXBwZWFyIG9uIHRoZSBiYWNrIG9mIHRoZSBvZGQgcGFnZXMuCisKK1RoZXJlIGEgY291cGxlIG9mIHBvaW50cyB0byBiZWFyIGluIG1pbmQ6CisKKzEuIFBvc2l0aW9uIG9mIHRoZSBmaXJzdCBwYWdlLiAgSWYgdGhlIGZpcnN0IHBhZ2UgaXMgb24gdG9wIG9mIHRoZSBwcmludG91dAorICAgd2hlbiBwcmludGluZyB0aGUgb2RkIHBhZ2VzIHRoZW4geW91IG5lZWQgdG8gcmV2ZXJzZSB0aGUgb3JkZXIgdGhhdCB0aGUgb2RkCisgICBwYWdlcyBhcmUgcHJpbnRlZC4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCB0aGUgLXIgb3B0aW9uIHRvIHBzc2VsZWN0LiAgVGhpcworICAgd2lsbCBlbnN1cmUgcGFnZSAyIGlzIHByaW50ZWQgb24gdGhlIGJhY2sgb2YgcGFnZSAxLgorICAgTm90ZTogaXQgaXMgYmV0dGVyIHRvIHJldmVyc2UgdGhlIG9kZCBudW1iZXJlZCBwYWdlcyByYXRoZXIgdGhhbiB0aGUgZXZlbgorICAgbnVtYmVyZWQgaW4gY2FzZSB0aGVyZSBhcmUgYW4gb2RkIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgb3JpZ2luYWwgUFMgZmlsZS4KKworMi4gUGFwZXIgZmxpcHBpbmcuICBXaGVuIHR1cm5pbmcgb3ZlciB0aGUgcGFwZXIgd2l0aCB0aGUgb2RkIHBhZ2VzIHByaW50ZWQgb24KKyAgIHRoZW0geW91IG1heSBoYXZlIHRvIGVpdGhlciBmbGlwIHRoZW0gaG9yaXpvbnRhbGx5IChhbG9uZyB0aGUgbG9uZyBlZGdlKSBvcgorICAgdmVydGljYWxseSAoYWxvbmcgdGhlIHNob3J0IGVkZ2UpLCBhcyB3ZWxsIGFzIHBvc3NpYmx5IHJvdGF0aW5nIHRoZW0gMTgwCisgICBkZWdyZWVzLiAgQWxsIHRoaXMgZGVwZW5kcyBvbiB0aGUgcHJpbnRlciAtIGl0IHdpbGwgYmUgbW9yZSBvYnZpb3VzIGZvcgorICAgZGVza3RvcCBpbmsgamV0cyB0aGFuIGZvciBzbWFsbCBvZmZpY2UgbGFzZXIgcHJpbnRlcnMgd2hlcmUgdGhlIHBhcGVyIHBhdGgKKyAgIGlzIGhpZGRlbiBmcm9tIHZpZXcuCisKKworMy41IEZvcm1mZWVkIENoYXJhY3RlcnMJCQkJCSpwcmludGluZy1mb3JtZmVlZCoKKworQnkgZGVmYXVsdCBWSU0gZG9lcyBub3QgZG8gYW55IHNwZWNpYWwgcHJvY2Vzc2luZyBvZiB8Zm9ybWZlZWR8IGNvbnRyb2wKK2NoYXJhY3RlcnMuICBTZXR0aW5nIHRoZSAncHJpbnRvcHRpb25zJyBmb3JtZmVlZCBpdGVtIHdpbGwgbWFrZSBWSU0gcmVjb2duaXplCitmb3JtZmVlZCBjaGFyYWN0ZXJzIGFuZCBjb250aW51ZSBwcmludGluZyB0aGUgY3VycmVudCBsaW5lIGF0IHRoZSBiZWdpbm5pbmcKK29mIHRoZSBmaXJzdCBsaW5lIG9uIGEgbmV3IHBhZ2UuICBUaGUgdXNlIG9mIGZvcm1mZWVkIGNoYXJhY3RlcnMgcHJvdmlkZXMKK3J1ZGltZW50YXJ5IHByaW50IGNvbnRyb2wgYnV0IHRoZXJlIGFyZSBjZXJ0YWluIHRoaW5ncyB0byBiZSBhd2FyZSBvZi4KKworVklNIHdpbGwgYWx3YXlzIHN0YXJ0IHByaW50aW5nIGEgbGluZSAoaW5jbHVkaW5nIGEgbGluZSBudW1iZXIgaWYgZW5hYmxlZCkKK2NvbnRhaW5pbmcgYSBmb3JtZmVlZCBjaGFyYWN0ZXIsIGV2ZW4gaWYgaXQgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiB0aGUKK2xpbmUuICBUaGlzIG1lYW5zIGlmIGEgbGluZSBzdGFydGluZyB3aXRoIGEgZm9ybWZlZWQgY2hhcmFjdGVyIGlzIHRoZSBmaXJzdAorbGluZSBvZiBhIHBhZ2UgdGhlbiBWSU0gd2lsbCBwcmludCBhIGJsYW5rIHBhZ2UuCisKK1NpbmNlIHRoZSBsaW5lIG51bWJlciBpcyBwcmludGVkIGF0IHRoZSBzdGFydCBvZiBwcmludGluZyB0aGUgbGluZSBjb250YWluaW5nCit0aGUgZm9ybWZlZWQgY2hhcmFjdGVyLCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIHByaW50ZWQgb24gdGhlIG5ldyBwYWdlCit3aWxsIG5vdCBoYXZlIGEgbGluZSBudW1iZXIgcHJpbnRlZCBmb3IgaXQgKGluIHRoZSBzYW1lIHdheSBhcyB0aGUgd3JhcHBlZAorbGluZXMgb2YgYSBsb25nIGxpbmUgd2hlbiB3cmFwIGluICdwcmludG9wdGlvbnMnIGlzIGVuYWJsZWQpLgorCitJZiB0aGUgZm9ybWZlZWQgY2hhcmFjdGVyIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBvbiBhIGxpbmUsIHRoZW4gcHJpbnRpbmcgd2lsbAorY29udGludWUgb24gdGhlIHNlY29uZCBsaW5lIG9mIHRoZSBuZXcgcGFnZSwgbm90IHRoZSBmaXJzdC4gIFRoaXMgaXMgZHVlIHRvCitWSU0gcHJvY2Vzc2luZyB0aGUgZW5kIG9mIHRoZSBsaW5lIGFmdGVyIHRoZSBmb3JtZmVlZCBjaGFyYWN0ZXIgYW5kIG1vdmluZworZG93biBhIGxpbmUgdG8gY29udGludWUgcHJpbnRpbmcuCisKK0R1ZSB0byB0aGUgcG9pbnRzIG1hZGUgYWJvdmUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB3aGVuIGZvcm1mZWVkIGNoYXJhY3RlcgorcHJvY2Vzc2luZyBpcyBlbmFibGVkLCBwcmludGluZyBvZiBsaW5lIG51bWJlcnMgaXMgZGlzYWJsZWQsIGFuZCB0aGF0IGZvcm0KK2ZlZWQgY2hhcmFjdGVycyBhcmUgbm90IHRoZSBsYXN0IGNoYXJhY3RlciBvbiBhIGxpbmUuICBFdmVuIHRoZW4geW91IG1heSBuZWVkCit0byBhZGp1c3QgdGhlIG51bWJlciBvZiBsaW5lcyBiZWZvcmUgYSBmb3JtZmVlZCBjaGFyYWN0ZXIgdG8gcHJldmVudAorYWNjaWRlbnRhbCBibGFuayBwYWdlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBVc2luZyBWaW0gbGlrZSBsZXNzIG9yIG1vcmUJCQkJCSpsZXNzKgorCitJZiB5b3UgdXNlIHRoZSBsZXNzIG9yIG1vcmUgcHJvZ3JhbSB0byB2aWV3IGEgZmlsZSwgeW91IGRvbid0IGdldCBzeW50YXgKK2hpZ2hsaWdodGluZy4gIFRodXMgeW91IHdvdWxkIGxpa2UgdG8gdXNlIFZpbSBpbnN0ZWFkLiAgWW91IGNhbiBkbyB0aGlzIGJ5Cit1c2luZyB0aGUgc2hlbGwgc2NyaXB0ICIkVklNUlVOVElNRS9tYWNyb3MvbGVzcy5zaCIuCisKK1RoaXMgc2hlbGwgc2NyaXB0IHVzZXMgdGhlIFZpbSBzY3JpcHQgIiRWSU1SVU5USU1FL21hY3Jvcy9sZXNzLnZpbSIuICBJdCBzZXRzCit1cCBtYXBwaW5ncyB0byBzaW11bGF0ZSB0aGUgY29tbWFuZHMgdGhhdCBsZXNzIHN1cHBvcnRzLiAgT3RoZXJ3aXNlLCB5b3UgY2FuCitzdGlsbCB1c2UgdGhlIFZpbSBjb21tYW5kcy4KKworVGhpcyBpc24ndCBwZXJmZWN0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdmlld2luZyBhIHNob3J0IGZpbGUgVmltIHdpbGwgc3RpbGwgdXNlCit0aGUgd2hvbGUgc2NyZWVuLiAgQnV0IGl0IHdvcmtzIGdvb2QgZW5vdWdoIGZvciBtb3N0IHVzZXMsIGFuZCB5b3UgZ2V0IHN5bnRheAoraGlnaGxpZ2h0aW5nLgorCitUaGUgImgiIGtleSB3aWxsIGdpdmUgeW91IGEgc2hvcnQgb3ZlcnZpZXcgb2YgdGhlIGF2YWlsYWJsZSBjb21tYW5kcy4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZlcnNpb240LnR4dCBiL3J1bnRpbWUvZG9jL3ZlcnNpb240LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2Y3NjBmCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmVyc2lvbjQudHh0CkBAIC0wLDAgKzEsMzU1IEBACisqdmVyc2lvbjQudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgTWFyIDEyCisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVGhpcyBkb2N1bWVudCBsaXN0cyB0aGUgaW5jb21wYXRpYmxlIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltIDMuMCBhbmQgVmltIDQuMC4KK0FsdGhvdWdoIDQuMCBpcyBtZW50aW9uZWQgaGVyZSwgdGhpcyBpcyBhbHNvIGZvciB2ZXJzaW9uIDQuMSwgNC4yLCBldGMuLgorCitUaGlzIGZpbGUgaXMgaW1wb3J0YW50IGZvciBldmVyeWJvZHkgdXBncmFkaW5nIGZyb20gVmltIDMuMC4gIFJlYWQgaXQKK2NhcmVmdWxseSB0byBhdm9pZCB1bmV4cGVjdGVkIHByb2JsZW1zLgorCisnYmFja3VwJyBvcHRpb24gZGVmYXVsdCBjaGFuZ2VkCQkJfGJhY2t1cC1jaGFuZ2VkfAorRXh0ZW5zaW9uIGZvciBiYWNrdXAgZmlsZSBjaGFuZ2VkCQl8YmFja3VwLWV4dGVuc2lvbnwKK1N0cnVjdHVyZSBvZiBzd2FwIGZpbGUgY2hhbmdlZAkJCXxzd2FwZmlsZS1jaGFuZ2VkfAorIi13IHNjcmlwdG91dCIgYXJndW1lbnQgY2hhbmdlZAkJCXxzY3JpcHRvdXQtY2hhbmdlZHwKK0JhY2tzcGFjZSBhbmQgRGVsZXRlIGtleXMJCQl8YmFja3NwYWNlLWRlbGV0ZXwKK0VzY2FwZSBmb3IgfCBjaGFuZ2VkCQkJCXxlc2NhcGUtYmFyfAorS2V5IGNvZGVzIGNoYW5nZWQJCQkJfGtleS1jb2Rlcy1jaGFuZ2VkfAorVGVybWluYWwgb3B0aW9ucyBjaGFuZ2VkCQkJfHRlcm1jYXAtY2hhbmdlZHwKKydlcnJvcmZvcm1hdCcgb3B0aW9uIGNoYW5nZWQJCQl8ZXJyb3Jmb3JtYXQtY2hhbmdlZHwKKydncmFwaGljJyBvcHRpb24gZ29uZQkJCQl8Z3JhcGhpYy1vcHRpb24tZ29uZXwKKyd5YW5rZW5kb2ZsaW5lJyBvcHRpb24gZ29uZQkJCXx5ZS1vcHRpb24tZ29uZXwKKydpY29uJyBhbmQgJ3RpdGxlJyBkZWZhdWx0IHZhbHVlIGNoYW5nZWQJfGljb24tY2hhbmdlZHwKKydoaWdobGlnaHQnIG9wdGlvbiBjaGFuZ2VkCQkJfGhpZ2hsaWdodC1jaGFuZ2VkfAorJ3RpbGRlb3AnIGFuZCAnd2VpcmRpbnZlcnQnIHNob3J0IG5hbWVzIGNoYW5nZWQJfHNob3J0LW5hbWUtY2hhbmdlZHwKK1VzZSBvZiAidiIsICJWIiBhbmQgIkNUUkwtViIgaW4gVmlzdWFsIG1vZGUJfHVzZS12aXN1YWwtY21kc3wKK0NUUkwtQiBpbiBJbnNlcnQgbW9kZSByZW1vdmVkCQkJfHRvZ2dsZS1yZXZpbnN8CisKKworJ2JhY2t1cCcgb3B0aW9uIGRlZmF1bHQgY2hhbmdlZAkJCQkqYmFja3VwLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciAnYmFja3VwJyB1c2VkIHRvIGJlIG9uLiAgVGhpcyByZXN1bHRlZCBpbiBhIGJhY2t1cCBmaWxlCitiZWluZyBtYWRlIHdoZW4gdGhlIG9yaWdpbmFsIGZpbGUgd2FzIG92ZXJ3cml0dGVuLgorCitOb3cgdGhlIGRlZmF1bHQgZm9yICdiYWNrdXAnIGlzIG9mZi4gIEFzIHNvb24gYXMgdGhlIHdyaXRpbmcgb2YgdGhlIGZpbGUgaGFzCitzdWNjZXNzZnVsbHkgZmluaXNoZWQsIHRoZSBiYWNrdXAgZmlsZSBpcyBkZWxldGVkLiAgSWYgeW91IHdhbnQgdG8ga2VlcCB0aGUKK2JhY2t1cCBmaWxlLCBzZXQgJ2JhY2t1cCcgb24gaW4geW91ciB2aW1yYy4gIFRoZSByZWFzb24gZm9yIHRoaXMgY2hhbmdlIGlzCit0aGF0IG1hbnkgcGVvcGxlIGNvbXBsYWluZWQgdGhhdCBsZWF2aW5nIGEgYmFja3VwIGZpbGUgYmVoaW5kIGlzIG5vdAorVmktY29tcGF0aWJsZS4JCQkJCQl8J2JhY2t1cCd8CisKKworRXh0ZW5zaW9uIGZvciBiYWNrdXAgZmlsZSBjaGFuZ2VkCQkJKmJhY2t1cC1leHRlbnNpb24qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGV4dGVuc2lvbiBmb3IgdGhlIGJhY2t1cCBmaWxlIHVzZWQgdG8gYmUgIi5iYWsiLiAgU2luY2Ugb3RoZXIgcHJvZ3JhbXMKK2Fsc28gdXNlIHRoaXMgZXh0ZW5zaW9uIGFuZCBzb21lIHVzZXJzIG1ha2UgY29waWVzIHdpdGggdGhpcyBleHRlbnNpb24sIGl0IHdhcworY2hhbmdlZCB0byB0aGUgbGVzcyBvYnZpb3VzICJ+Ii4gIEFub3RoZXIgYWR2YW50YWdlIGlzIHRoYXQgdGhpcyB0YWtlcyBsZXNzCitzcGFjZSwgd2hpY2ggaXMgdXNlZnVsIHdoZW4gd29ya2luZyBvbiBhIHN5c3RlbSB3aXRoIHNob3J0IGZpbGUgbmFtZXMuICBGb3IKK2V4YW1wbGUsIG9uIE1TLURPUyB0aGUgYmFja3VwIGZpbGVzIGZvciAibG9uZ2ZpbGUuYyIgYW5kICJsb25nZmlsZS5oIiB3b3VsZAorYm90aCBiZWNvbWUgImxvbmdmaWxlLmJhayI7IG5vdyB0aGV5IHdpbGwgYmUgImxvbmdmaWxlLmN+IiBhbmQgImxvbmdmaWxlLmh+Ii4KKworSWYgeW91IHByZWZlciB0byB1c2UgIi5iYWsiLCB5b3UgY2FuIHNldCB0aGUgJ2JhY2t1cGV4dCcgb3B0aW9uOiA+CisJOnNldCBiZXg9LmJhaworCisKK1N0cnVjdHVyZSBvZiBzd2FwIGZpbGUgY2hhbmdlZAkJCQkqc3dhcGZpbGUtY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29udGVudHMgb2YgdGhlIHN3YXAgZmlsZSB3ZXJlIGV4dGVuZGVkIHdpdGggc2V2ZXJhbCBwYXJhbWV0ZXJzLiAgVmltCitzdG9yZXMgdGhlIHVzZXIgbmFtZSBhbmQgb3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVkaXRlZCBmaWxlIHRvIG1ha2UKK3JlY292ZXJ5IG1vcmUgZWFzeSBhbmQgdG8gYmUgYWJsZSB0byBrbm93IHdoZXJlIHRoZSBzd2FwIGZpbGUgY29tZXMgZnJvbS4gIFRoZQorZmlyc3QgcGFydCBvZiB0aGUgc3dhcCBmaWxlIGNhbiBub3cgYmUgdW5kZXJzdG9vZCBvbiBhIG1hY2hpbmUgd2l0aCBhCitkaWZmZXJlbnQgYnl0ZSBvcmRlciBvciBzaXplb2YoaW50KS4gIFdoZW4geW91IHRyeSB0byByZWNvdmVyIGEgZmlsZSBvbiBzdWNoIGEKK21hY2hpbmUsIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlIHRoYXQgdGhpcyBpcyBub3QgcG9zc2libGUuCisKK0JlY2F1c2Ugb2YgdGhpcyBjaGFuZ2UsIHN3YXAgZmlsZXMgY2Fubm90IGJlIGV4Y2hhbmdlZCBiZXR3ZWVuIDMuMCBhbmQgNC4wLgorSWYgeW91IGhhdmUgYSBzd2FwIGZpbGUgZnJvbSBhIGNyYXNoZWQgc2Vzc2lvbiB3aXRoIDMuMCwgdXNlIFZpbSAzLjAgdG8KK3JlY292ZXIgdGhlIGZpbGUtLS1kb24ndCB1c2UgNC4wLgkJCXxzd2FwLWZpbGV8CisKKworIi13IHNjcmlwdG91dCIgYXJndW1lbnQgY2hhbmdlZAkJCQkqc2NyaXB0b3V0LWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJ2aW0gLXcgc2NyaXB0b3V0IiB1c2VkIHRvIGFwcGVuZCB0byB0aGUgc2NyaXB0b3V0IGZpbGUuICBTaW5jZSB0aGlzIHdhcworaWxsb2dpY2FsLCBpdCBub3cgY3JlYXRlcyBhIG5ldyBmaWxlLiAgQW4gZXhpc3RpbmcgZmlsZSBpcyBub3Qgb3ZlcndyaXR0ZW4KKyh0byBhdm9pZCBkZXN0cm95aW5nIGFuIGV4aXN0aW5nIGZpbGUgZm9yIHRob3NlIHdobyByZWx5IG9uIHRoZSBhcHBlbmRpbmcpLgorW1RoaXMgd2FzIHJlbW92ZWQgYWdhaW4gbGF0ZXJdCQkJCQl8LXd8CisKKworQmFja3NwYWNlIGFuZCBEZWxldGUga2V5cwkJCQkqYmFja3NwYWNlLWRlbGV0ZSoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gMy4wIGJvdGggdGhlIGRlbGV0ZSBrZXkgYW5kIHRoZSBiYWNrc3BhY2Uga2V5IHdvcmtlZCBhcyBhIGJhY2tzcGFjZSBpbgoraW5zZXJ0IG1vZGU7IHRoZXkgZGVsZXRlZCB0aGUgY2hhcmFjdGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IuICBJbiA0LjAgdGhlCitkZWxldGUga2V5IGhhcyBhIG5ldyBmdW5jdGlvbjogaXQgZGVsZXRlcyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IsIGp1c3QKK2xpa2UgaXQgZG9lcyBvbiB0aGUgY29tbWFuZC1saW5lLiAgSWYgdGhlIGN1cnNvciBpcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBsaW5lCithbmQgJ2JzJyBpcyBzZXQsIHR3byBsaW5lcyBhcmUgam9pbmVkLgkJCXw8RGVsPnwgfGlfPERlbD58CisKK0luIDMuMCB0aGUgYmFja3NwYWNlIGtleSB3YXMgYWx3YXlzIGRlZmluZWQgYXMgQ1RSTC1IIGFuZCBkZWxldGUgYXMgQ1RSTC0/LgorSW4gNC4wIHRoZSBjb2RlIGZvciB0aGUgYmFja3NwYWNlIGFuZCBkZWxldGUga2V5IGlzIG9idGFpbmVkIGZyb20gdGVybWNhcCBvcgordGVybWxpYiwgYW5kIGFkanVzdGVkIGZvciB0aGUgInN0dHkgZXJhc2UiIHZhbHVlIG9uIFVuaXguICBUaGlzIGhlbHBzIHBlb3BsZQord2hvIGRlZmluZSB0aGUgZXJhc2UgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0aGUga2V5Ym9hcmQgdGhleSBhcmUgd29ya2luZyBvbi4KKwkJCQkJCQl8PEJTPnwgfGlfPEJTPnwKKworSWYgeW91IHByZWZlciBiYWNrc3BhY2UgYW5kIGRlbGV0ZSBpbiBJbnNlcnQgbW9kZSB0byBoYXZlIHRoZSBvbGQgYmVoYXZpb3IsCitwdXQgdGhpcyBsaW5lIGluIHlvdXIgdmltcmM6CisKKwlpbm9yZW1hcCBePyBeSAorCitBbmQgeW91IG1heSBhbHNvIHdhbnQgdG8gYWRkIHRoZXNlLCB0byBmaXggdGhlIHZhbHVlcyBmb3IgPEJTPiBhbmQgPERlbD46CisKKwlzZXQgdF9rYj1eSAorCXNldCB0X2tEPV4/CisKKyhFbnRlciBeSCB3aXRoIENUUkwtViBDVFJMLUggYW5kIF4/IHdpdGggQ1RSTC1WIENUUkwtPyBvciA8RGVsPi4pCisKK0lmIHRoZSB2YWx1ZSBmb3IgdF9rYiBpcyBjb3JyZWN0LCBidXQgdGhlIHRfa0QgdmFsdWUgaXMgbm90LCB1c2UgdGhlICI6Zml4ZGVsIgorY29tbWFuZC4gIEl0IHdpbGwgc2V0IHRfa0QgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiB0X2tiLiAgVGhpcyBpcyB1c2VmdWwgaWYKK3lvdSBhcmUgdXNpbmcgc2V2ZXJhbCBkaWZmZXJlbnQgdGVybWluYWxzLgkJfDpmaXhkZWx8CisKK1doZW4gXkggaXMgbm90IHJlY29nbml6ZWQgYXMgPEJTPiBvciA8RGVsPiwgaXQgaXMgdXNlZCBsaWtlIGEgYmFja3NwYWNlLgorCisKK0VzY2FwZSBmb3IgfCBjaGFuZ2VkCQkJCQkqZXNjYXBlLWJhcioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlICdiJyBmbGFnIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycsIHRoZSBiYWNrc2xhc2ggY2Fubm90IGJlIHVzZWQgdG8KK2VzY2FwZSAnfCcgaW4gbWFwcGluZyBhbmQgYWJicmV2aWF0ZSBjb21tYW5kcywgb25seSBDVFJMLVYgY2FuLiAgVGhpcyBpcworVmktY29tcGF0aWJsZS4gIElmIHlvdSB3b3JrIGluIFZpLWNvbXBhdGlibGUgbW9kZSBhbmQgaGFkIHVzZWQgIlx8IiB0byBpbmNsdWRlCithIGJhciBpbiBhIG1hcHBpbmcsIHRoaXMgbmVlZHMgdG8gYmUgcmVwbGFjZWQgYnkgIl5WfCIuICBTZWUgfDpiYXJ8LgorCisKK0tleSBjb2RlcyBjaGFuZ2VkCQkJCQkqa2V5LWNvZGVzLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2Yga2V5IGNvZGVzIGhhcyBjaGFuZ2VkIGRyYW1hdGljYWxseS4gIEluIDMuMCBhCitvbmUtYnl0ZSBjb2RlIHdhcyB1c2VkIHRvIHJlcHJlc2VudCBhIGtleS4gIFRoaXMgY2F1c2VkIHByb2JsZW1zIHdpdGgKK2RpZmZlcmVudCBjaGFyYWN0ZXJzIHNldHMgdGhhdCBhbHNvIHVzZWQgdGhlc2UgY29kZXMuICBJbiA0LjAgYSB0aHJlZS1ieXRlCitjb2RlIGlzIHVzZWQgdGhhdCBjYW5ub3QgYmUgY29uZnVzZWQgd2l0aCBhIGNoYXJhY3Rlci4JCXxrZXktbm90YXRpb258CisKK0lmIHlvdSBoYXZlIHVzZWQgdGhlIHNpbmdsZS1ieXRlIGtleSBjb2RlcyBpbiB5b3VyIHZpbXJjIGZvciBtYXBwaW5ncywgeW91Cit3aWxsIGhhdmUgdG8gcmVwbGFjZSB0aGVtIHdpdGggdGhlIDQuMCBjb2Rlcy4gIEluc3RlYWQgb2YgdXNpbmcgdGhlIHRocmVlLWJ5dGUKK2NvZGUgZGlyZWN0bHksIHlvdSBzaG91bGQgdXNlIHRoZSBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBmb3IgdGhpcyBpbiA8Pi4gIFNlZQordGhlIHRhYmxlIGJlbG93LiAgVGhlIHRhYmxlIGFsc28gbGlzdHMgdGhlIG9sZCBuYW1lLCBhcyBpdCB3YXMgdXNlZCBpbiB0aGUgMy4wCitkb2N1bWVudGF0aW9uLgorCitUaGUga2V5IG5hbWVzIGluIDw+IGNhbiBiZSB1c2VkIGluIG1hcHBpbmdzIGRpcmVjdGx5LiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZQordG8gY29weS9wYXN0ZSBleGFtcGxlcyBvciB0eXBlIHRoZW0gbGl0ZXJhbGx5LiAgVGhlIDw+IG5vdGF0aW9uIGhhcyBiZWVuCitpbnRyb2R1Y2VkIGZvciB0aGlzIHw8PnwuICBUaGUgJ0InIGFuZCAnPCcgZmxhZ3MgbXVzdCBub3QgYmUgcHJlc2VudCBpbgorJ2Nwb3B0aW9ucycgdG8gZW5hYmxlIHRoaXMgdG8gd29yayB8J2Nwb3B0aW9ucyd8LgorCitvbGQgbmFtZQluZXcgbmFtZQkgIG9sZCBjb2RlCW9sZCBNUy1ET1MgY29kZQl+CisJCQkJaGV4CWRlYwloZXgJZGVjCX4KKzxFU0M+CQk8RXNjPgorPFRBQj4JCTxUYWI+Cis8TEY+CQk8Tkw+IDxOZXdMaW5lPiA8TGluZUZlZWQ+Cis8U1BBQ0U+CQk8U3BhY2U+Cis8TlVMPgkJPE51bD4KKzxCRUxMPgkJPEJlbGw+Cis8QlM+CQk8QlM+IDxCYWNrU3BhY2U+Cis8SU5TRVJUPgk8SW5zZXJ0PgorPERFTD4JCTxEZWw+IDxEZWxldGU+Cis8SE9NRT4JCTxIb21lPgorPEVORD4JCTxFbmQ+Cis8UEFHRV9VUD4JPFBhZ2VVcD4KKzxQQUdFX0RPV04+CTxQYWdlRG93bj4KKworPENfVVA+CQk8VXA+CQkweDgwCTEyOAkweGIwCTE3NgorPENfRE9XTj4JPERvd24+CQkweDgxCTEyOSAgICAgMHhiMQkxNzcKKzxDX0xFRlQ+CTxMZWZ0PgkJMHg4MgkxMzAgICAgIDB4YjIJMTc4Cis8Q19SSUdIVD4JPFJpZ2h0PgkJMHg4MwkxMzEgICAgIDB4YjMJMTc5Cis8U0NfVVA+CQk8Uy1VcD4JCTB4ODQJMTMyICAgICAweGI0CTE4MAorPFNDX0RPV04+CTxTLURvd24+CTB4ODUJMTMzICAgICAweGI1CTE4MQorPFNDX0xFRlQ+CTxTLUxlZnQ+CTB4ODYJMTM0ICAgICAweGI2CTE4MgorPFNDX1JJR0hUPgk8Uy1SaWdodD4JMHg4NwkxMzUgICAgIDB4YjcJMTgzCisKKzxGMT4JCTxGMT4JCTB4ODgJMTM2ICAgICAweGI4CTE4NAorPEYyPgkJPEYyPgkJMHg4OQkxMzcgICAgIDB4YjkJMTg1Cis8RjM+CQk8RjM+CQkweDhhCTEzOCAgICAgMHhiYQkxODYKKzxGND4JCTxGND4JCTB4OGIJMTM5ICAgICAweGJiCTE4NworPEY1PgkJPEY1PgkJMHg4YwkxNDAgICAgIDB4YmMJMTg4Cis8RjY+CQk8RjY+CQkweDhkCTE0MSAgICAgMHhiZAkxODkKKzxGNz4JCTxGNz4JCTB4OGUJMTQyICAgICAweGJlCTE5MAorPEY4PgkJPEY4PgkJMHg4ZgkxNDMgICAgIDB4YmYJMTkxCis8Rjk+CQk8Rjk+CQkweDkwCTE0NCAgICAgMHhjMAkxOTIKKzxGMTA+CQk8RjEwPgkJMHg5MQkxNDUgICAgIDB4YzEJMTkzCisKKzxTRjE+CQk8Uy1GMT4JCTB4OTIJMTQ2ICAgICAweGMyCTE5NAorPFNGMj4JCTxTLUYyPgkJMHg5MwkxNDcgICAgIDB4YzMJMTk1Cis8U0YzPgkJPFMtRjM+CQkweDk0CTE0OCAgICAgMHhjNAkxOTYKKzxTRjQ+CQk8Uy1GND4JCTB4OTUJMTQ5ICAgICAweGM1CTE5NworPFNGNT4JCTxTLUY1PgkJMHg5NgkxNTAgICAgIDB4YzYJMTk4Cis8U0Y2PgkJPFMtRjY+CQkweDk3CTE1MSAgICAgMHhjNwkxOTkKKzxTRjc+CQk8Uy1GNz4JCTB4OTgJMTUyICAgICAweGM4CTIwMAorPFNGOD4JCTxTLUY4PgkJMHg5OQkxNTMgICAgIDB4YzkJMjAxCis8U0Y5PgkJPFMtRjk+CQkweDlhCTE1NCAgICAgMHhjYQkyMDIKKzxTRjEwPgkJPFMtRjEwPgkJMHg5YgkxNTUgICAgIDB4Y2IJMjAzCisKKzxIRUxQPgkJPEhlbHA+CQkweDljCTE1NiAgICAgMHhjYwkyMDQKKzxVTkRPPgkJPFVuZG8+CQkweDlkCTE1NyAgICAgMHhjZAkyMDUKKworCQkobm90IHVzZWQpCTB4OWUJMTU4ICAgICAweGNlCTIwNgorCQkobm90IHVzZWQpCTB4OWYJMTU5ICAgICAweGNmCTIwNworCisKK1Rlcm1pbmFsIG9wdGlvbnMgY2hhbmdlZAkJCQkqdGVybWNhcC1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBuYW1lcyBvZiB0aGUgdGVybWluYWwgb3B0aW9ucyBoYXZlIGJlZW4gY2hhbmdlZCB0byBtYXRjaCB0aGUgdGVybWNhcCBuYW1lcworb2YgdGhlc2Ugb3B0aW9ucy4gIEFsbCB0ZXJtaW5hbCBvcHRpb25zIG5vdyBoYXZlIHRoZSBuYW1lIHRfeHgsIHdoZXJlIHh4IGlzCit0aGUgdGVybWNhcCBuYW1lLiAgTm9ybWFsbHkgdGhlc2Ugb3B0aW9ucyBhcmUgbm90IHVzZWQsIHVubGVzcyB5b3UgaGF2ZSBhCit0ZXJtY2FwIGVudHJ5IHRoYXQgaXMgd3Jvbmcgb3IgaW5jb21wbGV0ZSwgb3IgeW91IGhhdmUgc2V0IHRoZSBoaWdobGlnaHQKK29wdGlvbnMgdG8gYSBkaWZmZXJlbnQgdmFsdWUuCQkJCXx0ZXJtaW5hbC1vcHRpb25zfAorCitOb3RlIHRoYXQgZm9yIHNvbWUga2V5cyB0aGVyZSBpcyBubyB0ZXJtY2FwIG5hbWUuICBVc2UgdGhlIDw+IHR5cGUgb2YgbmFtZQoraW5zdGVhZCwgd2hpY2ggaXMgYSBnb29kIGlkZWEgYW55d2F5LgorCitOb3RlIHRoYXQgInRfdGkiIGhhcyBiZWNvbWUgInRfbXIiIChpbnZlcnQvcmV2ZXJzZSBvdXRwdXQpIGFuZCAidF90cyIgaGFzCitiZWNvbWUgInRfdGkiIChpbml0IHRlcm1pbmFsIG1vZGUpLiAgQmUgY2FyZWZ1bCB3aGVuIHlvdSB1c2UgInRfdGkiIQorCitvbGQgbmFtZQluZXcgbmFtZQltZWFuaW5nCQl+Cit0X2NkbAkJdF9ETAkJZGVsZXRlIG51bWJlciBvZiBsaW5lcwkJKnRfY2RsKgordF9jaQkJdF92aQkJY3Vyc29yIGludmlzaWJsZQkJKnRfY2kqCit0X2NpbAkJdF9BTAkJaW5zZXJ0IG51bWJlciBvZiBsaW5lcwkJKnRfY2lsKgordF9jbQkJdF9jbQkJbW92ZSBjdXJzb3IKK3RfY3JpCQl0X1JJCQljdXJzb3IgbnVtYmVyIG9mIGNoYXJzIHJpZ2h0CSp0X2NyaSoKK3RfY3YJCXRfdmUJCWN1cnNvciB2aXNpYmxlCQkJKnRfY3YqCit0X2N2dgkJdF92cwkJY3Vyc29yIHZlcnkgdmlzaWJsZQkJKnRfY3Z2KgordF9kbAkJdF9kbAkJZGVsZXRlIGxpbmUKK3RfY3MJCXRfY3MJCXNjcm9sbCByZWdpb24KK3RfZWQJCXRfY2wJCWNsZWFyIGRpc3BsYXkJCQkqdF9lZCoKK3RfZWwJCXRfY2UJCWNsZWFyIGxpbmUJCQkqdF9lbCoKK3RfaWwJCXRfYWwJCWluc2VydCBsaW5lCQkJKnRfaWwqCisJCXRfZGEJCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGFib3ZlIHRoZSBzY3JlZW4KKwkJdF9kYgkJZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYmVsb3cgdGhlIHNjcmVlbgordF9rZQkJdF9rZQkJcHV0IHRlcm1pbmFsIG91dCBvZiBrZXlwYWQgdHJhbnNtaXQgbW9kZQordF9rcwkJdF9rcwkJcHV0IHRlcm1pbmFsIGluIGtleXBhZCB0cmFuc21pdCBtb2RlCit0X21zCQl0X21zCQlzYXZlIHRvIG1vdmUgY3Vyc29yIGluIGhpZ2hsaWdodCBtb2RlCit0X3NlCQl0X3NlCQlub3JtYWwgbW9kZSAodW5kbyB0X3NvKQordF9zbwkJdF9zbwkJc2hpZnQgb3V0IChzdGFuZG91dCkgbW9kZQordF90aQkJdF9tcgkJcmV2ZXJzZSBoaWdobGlnaHQKK3RfdGIJCXRfbWQJCWJvbGQgbW9kZQkJCSp0X3RiKgordF90cAkJdF9tZQkJaGlnaGxpZ2h0IGVuZAkJCSp0X3RwKgordF9zcgkJdF9zcgkJc2Nyb2xsIHJldmVyc2UKK3RfdGUJCXRfdGUJCW91dCBvZiB0ZXJtY2FwIG1vZGUKK3RfdHMJCXRfdGkJCWludG8gdGVybWNhcCBtb2RlCQkqdF90c19vbGQqCit0X3ZiCQl0X3ZiCQl2aXN1YWwgYmVsbAordF9jc2MJCXRfQ1MJCWN1cnNvciBpcyByZWxhdGl2ZSB0byBzY3JvbGwgcmVnaW9uICp0X2NzYyoKKwordF9rdQl0X2t1CTxVcD4JCWFycm93IHVwCit0X2tkCXRfa2QJPERvd24+CQlhcnJvdyBkb3duCit0X2tyCXRfa3IJPFJpZ2h0PgkJYXJyb3cgcmlnaHQKK3Rfa2wJdF9rbAk8TGVmdD4JCWFycm93IGxlZnQKK3Rfc2t1CQk8Uy1VcD4JCXNoaWZ0ZWQgYXJyb3cgdXAJCSp0X3NrdSoKK3Rfc2tkCQk8Uy1Eb3duPglzaGlmdGVkIGFycm93IGRvd24JCSp0X3NrZCoKK3Rfc2tyCXRfJWkJPFMtUmlnaHQ+CXNoaWZ0ZWQgYXJyb3cgcmlnaHQJCSp0X3NrcioKK3Rfc2tsCXRfIzQJPFMtTGVmdD4Jc2hpZnRlZCBhcnJvdyBsZWZ0CQkqdF9za2wqCit0X2YxCXRfazEJPEYxPgkJZnVuY3Rpb24ga2V5IDEJCQkqdF9mMSoKK3RfZjIJdF9rMgk8RjI+CQlmdW5jdGlvbiBrZXkgMgkJCSp0X2YyKgordF9mMwl0X2szCTxGMz4JCWZ1bmN0aW9uIGtleSAzCQkJKnRfZjMqCit0X2Y0CXRfazQJPEY0PgkJZnVuY3Rpb24ga2V5IDQJCQkqdF9mNCoKK3RfZjUJdF9rNQk8RjU+CQlmdW5jdGlvbiBrZXkgNQkJCSp0X2Y1KgordF9mNgl0X2s2CTxGNj4JCWZ1bmN0aW9uIGtleSA2CQkJKnRfZjYqCit0X2Y3CXRfazcJPEY3PgkJZnVuY3Rpb24ga2V5IDcJCQkqdF9mNyoKK3RfZjgJdF9rOAk8Rjg+CQlmdW5jdGlvbiBrZXkgOAkJCSp0X2Y4KgordF9mOQl0X2s5CTxGOT4JCWZ1bmN0aW9uIGtleSA5CQkJKnRfZjkqCit0X2YxMAl0X2s7CTxGMTA+CQlmdW5jdGlvbiBrZXkgMTAJCQkqdF9mMTAqCit0X3NmMQkJPFMtRjE+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAxCQkqdF9zZjEqCit0X3NmMgkJPFMtRjI+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAyCQkqdF9zZjIqCit0X3NmMwkJPFMtRjM+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSAzCQkqdF9zZjMqCit0X3NmNAkJPFMtRjQ+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA0CQkqdF9zZjQqCit0X3NmNQkJPFMtRjU+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA1CQkqdF9zZjUqCit0X3NmNgkJPFMtRjY+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA2CQkqdF9zZjYqCit0X3NmNwkJPFMtRjc+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA3CQkqdF9zZjcqCit0X3NmOAkJPFMtRjg+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA4CQkqdF9zZjgqCit0X3NmOQkJPFMtRjk+CQlzaGlmdGVkIGZ1bmN0aW9uIGtleSA5CQkqdF9zZjkqCit0X3NmMTAJCTxTLUYxMD4JCXNoaWZ0ZWQgZnVuY3Rpb24ga2V5IDEwCQkqdF9zZjEwKgordF9oZWxwCXRfJTEJPEhlbHA+CQloZWxwIGtleQkJCSp0X2hlbHAqCit0X3VuZG8JdF8mOAk8VW5kbz4JCXVuZG8ga2V5CQkJKnRfdW5kbyoKKworCisnZXJyb3Jmb3JtYXQnIG9wdGlvbiBjaGFuZ2VkCQkJCSplcnJvcmZvcm1hdC1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisnZXJyb3Jmb3JtYXQnIGNhbiBub3cgY29udGFpbiBzZXZlcmFsIGZvcm1hdHMsIHNlcGFyYXRlZCBieSBjb21tYXMuICBUaGUgZmlyc3QKK2Zvcm1hdCB0aGF0IG1hdGNoZXMgaXMgdXNlZC4gIFRoZSBkZWZhdWx0IHZhbHVlcyBoYXZlIGJlZW4gYWRqdXN0ZWQgdG8gY2F0Y2gKK3RoZSBtb3N0IGNvbW1vbiBmb3JtYXRzLgkJCQl8ZXJyb3Jmb3JtYXR8CisKK0lmIHlvdSBoYXZlIGEgZm9ybWF0IHRoYXQgY29udGFpbnMgYSBjb21tYSwgaXQgbmVlZHMgdG8gYmUgcHJlY2VkZWQgd2l0aCBhCitiYWNrc2xhc2guICBUeXBlIHR3byBiYWNrc2xhc2hlcywgYmVjYXVzZSB0aGUgIjpzZXQiIGNvbW1hbmQgd2lsbCBlYXQgb25lLgorCisKKydncmFwaGljJyBvcHRpb24gZ29uZQkJCQkJKmdyYXBoaWMtb3B0aW9uLWdvbmUqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICdncmFwaGljJyBvcHRpb24gd2FzIHVzZWQgdG8gbWFrZSB0aGUgY2hhcmFjdGVycyBiZXR3ZWVuIDx+PiBhbmQgMHhhMAorZGlzcGxheSBkaXJlY3RseSBvbiB0aGUgc2NyZWVuLiAgTm93IHRoZSAnaXNwcmludCcgb3B0aW9uIHRha2VzIGNhcmUgb2YgdGhpcword2l0aCBtYW55IG1vcmUgcG9zc2liaWxpdGllcy4gIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgdGhlIHNhbWU7IHlvdSBvbmx5IG5lZWQKK3RvIGxvb2sgaW50byB0aGlzIGlmIHlvdSBwcmV2aW91c2x5IHNldCB0aGUgJ2dyYXBoaWMnIG9wdGlvbiBpbiB5b3VyIHZpbXJjLgorCQkJCQkJCXwnaXNwcmludCd8CisKKworJ3lhbmtlbmRvZmxpbmUnIG9wdGlvbiBnb25lCQkJCSp5ZS1vcHRpb24tZ29uZSoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ3lhbmtlbmRvZmxpbmUnIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiAgSW5zdGVhZCB5b3UgY2FuIGp1c3QgdXNlCisJOm1hcCBZIHkkCisKKworJ2ljb24nIGFuZCAndGl0bGUnIGRlZmF1bHQgdmFsdWUgY2hhbmdlZAkJKmljb24tY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICd0aXRsZScgb3B0aW9uIGlzIG5vdyBvbmx5IHNldCBieSBkZWZhdWx0IGlmIHRoZSBvcmlnaW5hbCB0aXRsZSBjYW4gYmUKK3Jlc3RvcmVkLiAgQXZvaWRzICJUaGFua3MgZm9yIGZseWluZyBWaW0iIHRpdGxlcy4gIElmIHlvdSB3YW50IHRoZW0gYW55d2F5LAorcHV0ICI6c2V0IHRpdGxlIiBpbiB5b3VyIHZpbXJjLgkJCQl8J3RpdGxlJ3wKKworVGhlIGRlZmF1bHQgZm9yICdpY29uJyBub3cgZGVwZW5kcyBvbiB0aGUgcG9zc2liaWxpdHkgb2YgcmVzdG9yaW5nIHRoZQorb3JpZ2luYWwgdmFsdWUsIGp1c3QgbGlrZSAndGl0bGUnLiAgSWYgeW91IGRvbid0IGxpa2UgeW91ciBpY29uIHRpdGxlcyB0byBiZQorY2hhbmdlZCwgYWRkIHRoaXMgbGluZSB0byB5b3VyIHZpbXJjOgkJCXwnaWNvbid8CisJOnNldCBub2ljb24KKworCisnaGlnaGxpZ2h0JyBvcHRpb24gY2hhbmdlZAkJCQkqaGlnaGxpZ2h0LWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ2knIGZsYWcgbm93IG1lYW5zIGl0YWxpYyBoaWdobGlnaHRpbmcsIGluc3RlYWQgb2YgaW52ZXJ0LiAgVGhlICdyJyBmbGFnCitpcyB1c2VkIGZvciByZXZlcnNlIGhpZ2hsaWdodGluZywgd2hpY2ggaXMgd2hhdCAnaScgdXNlZCB0byBiZS4gIE5vcm1hbGx5IHlvdQord29uJ3Qgc2VlIHRoZSBkaWZmZXJlbmNlLCBiZWNhdXNlIGl0YWxpYyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgb24gbW9zdAordGVybWluYWxzIGFuZCByZXZlcnNlIG1vZGUgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLgl8J2hpZ2hsaWdodCd8CisKK1doZW4gYW4gb2NjYXNpb24gaXMgbm90IHByZXNlbnQgaW4gJ2hpZ2hsaWdodCcsIHVzZSB0aGUgbW9kZSBmcm9tIHRoZSBkZWZhdWx0Cit2YWx1ZSBmb3IgJ2hpZ2hsaWdodCcsIGluc3RlYWQgb2YgcmV2ZXJzZSBtb2RlLgorCisKKyd0aWxkZW9wJyBhbmQgJ3dlaXJkaW52ZXJ0JyBzaG9ydCBuYW1lcyBjaGFuZ2VkCQkqc2hvcnQtbmFtZS1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVuYW1lZCAndG8nIChhYmJyZXZpYXRpb24gZm9yICd0aWxkZW9wJykgdG8gJ3RvcCcuCXwndGlsZGVvcCd8CitSZW5hbWVkICd3aScgKGFiYnJldmlhdGlvbiBmb3IgJ3dlaXJkaW52ZXJ0JykgdG8gJ3dpdicuCXwnd2VpcmRpbnZlcnQnfAorCitUaGlzIHdhcyBkb25lIGJlY2F1c2UgVmkgdXNlcyAnd2knIGFzIHRoZSBzaG9ydCBuYW1lIGZvciAnd2luZG93JyBhbmQgJ3RvJyBhcwordGhlIHNob3J0IG5hbWUgZm9yICd0aW1lb3V0Jy4gIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgdHJ5IHNldHRpbmcgdGhlc2UKK29wdGlvbnMsIHlvdSB3b24ndCBnZXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IHRoZSBlZmZlY3Qgd2lsbCBiZSBkaWZmZXJlbnQuCisKKworVXNlIG9mICJ2IiwgIlYiIGFuZCAiQ1RSTC1WIiBpbiBWaXN1YWwgbW9kZQkJKnVzZS12aXN1YWwtY21kcyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gVmlzdWFsIG1vZGUsICJ2IiwgIlYiLCBhbmQgIkNUUkwtViIgdXNlZCB0byBlbmQgVmlzdWFsIG1vZGUuICBOb3cgdGhpcworaGFwcGVucyBvbmx5IGlmIHRoZSBWaXN1YWwgbW9kZSB3YXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdHlwZS4gIE90aGVyd2lzZSB0aGUKK3R5cGUgb2YgVmlzdWFsIG1vZGUgaXMgY2hhbmdlZC4gIE5vdyBvbmx5IEVTQyBjYW4gYmUgdXNlZCBpbiBhbGwgY2lyY3Vtc3RhbmNlcwordG8gZW5kIFZpc3VhbCBtb2RlIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuCQl8dl9WfAorCisKK0NUUkwtQiBpbiBJbnNlcnQgbW9kZSByZW1vdmVkCQkJCSp0b2dnbGUtcmV2aW5zKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ1RSTC1CIGluIEluc2VydCBtb2RlIHVzZWQgdG8gdG9nZ2xlIHRoZSAncmV2aW5zJyBvcHRpb24uICBJZiB5b3UgZG9uJ3Qga25vdwordGhpcyBhbmQgYWNjaWRlbnRhbGx5IGhpdCBDVFJMLUIsIGl0IGlzIHZlcnkgZGlmZmljdWx0IHRvIGZpbmQgb3V0IGhvdyB0byB1bmRvCitpdC4gIFNpbmNlIGhhcmRseSBhbnlib2R5IHVzZXMgdGhpcyBmZWF0dXJlLCBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiAgSWYKK3lvdSB3YW50IHRvIHVzZSBpdCwgZGVmaW5lIFJJR0hUTEVGVCBpbiBmZWF0dXJlLmggYmVmb3JlIGNvbXBpbGluZy4gfCdyZXZpbnMnfAorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmVyc2lvbjUudHh0IGIvcnVudGltZS9kb2MvdmVyc2lvbjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTM0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92ZXJzaW9uNS50eHQKQEAgLTAsMCArMSw3ODEzIEBACisqdmVyc2lvbjUudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSmFuIDE3CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKK1dlbGNvbWUgdG8gVmltIFZlcnNpb24gNS4wIQorCitUaGlzIGRvY3VtZW50IGxpc3RzIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSA0LnggYW5kIFZpbSA1LjAuCitBbHRob3VnaCA1LjAgaXMgbWVudGlvbmVkIGhlcmUsIHRoaXMgaXMgYWxzbyBmb3IgdmVyc2lvbiA1LjEsIDUuMiwgZXRjLi4KK1NlZSB8dmlfZGlmZi50eHR8IGZvciBhbiBvdmVydmlldyBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpIGFuZCBWaW0gNS4wLgorU2VlIHx2ZXJzaW9uNC50eHR8IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSAzLjAgYW5kIFZpbSA0LjAuCisKK0lOQ09NUEFUSUJMRToJCQkJfGluY29tcGF0aWJsZS01fAorCitEZWZhdWx0IHZhbHVlIGZvciAnY29tcGF0aWJsZScgY2hhbmdlZAl8Y3AtZGVmYXVsdHwKK1RleHQgZm9ybWF0dGluZyBjb21tYW5kICJRIiBjaGFuZ2VkCXxRLWNvbW1hbmQtY2hhbmdlZHwKK0NvbW1hbmQtbGluZSBhcmd1bWVudHMgY2hhbmdlZAkJfGNtZGxpbmUtY2hhbmdlZHwKK0F1dG9jb21tYW5kcyBhcmUga2VwdAkJCXxhdXRvY21kcy1rZXB0fAorVXNlIG9mICdoaWRkZW4nIGNoYW5nZWQJCQl8aGlkZGVuLWNoYW5nZWR8CitUZXh0IG9iamVjdCBjb21tYW5kcyBjaGFuZ2VkCQl8dGV4dC1vYmplY3RzLWNoYW5nZWR8CitYLVdpbmRvd3MgUmVzb3VyY2VzIHJlbW92ZWQJCXx4LXJlc291cmNlc3wKK1VzZSBvZiAkVklNCQkJCXwkVklNLXVzZXwKK1VzZSBvZiAkSE9NRSBmb3IgTVMtRE9TIGFuZCBXaW4zMgl8JEhPTUUtdXNlfAorVGFncyBmaWxlIGZvcm1hdCBjaGFuZ2VkCQl8dGFncy1maWxlLWNoYW5nZWR8CitPcHRpb25zIGNoYW5nZWQJCQkJfG9wdGlvbnMtY2hhbmdlZHwKK0NUUkwtQiBpbiBJbnNlcnQgbW9kZSBnb25lCQl8aV9DVFJMLUItZ29uZXwKKworTkVXIEZFQVRVUkVTOgkJCQl8bmV3LTV8CisKK1N5bnRheCBoaWdobGlnaHRpbmcJCQl8bmV3LWhpZ2hsaWdodGluZ3wKK0J1aWx0LWluIHNjcmlwdCBsYW5ndWFnZQkJfG5ldy1zY3JpcHR8CitQZXJsIGFuZCBQeXRob24gc3VwcG9ydAkJCXxuZXctcGVybC1weXRob258CitXaW4zMiBHVUkgdmVyc2lvbgkJCXxhZGRlZC13aW4zMi1HVUl8CitWTVMgdmVyc2lvbgkJCQl8YWRkZWQtVk1TfAorQmVPUyB2ZXJzaW9uCQkJCXxhZGRlZC1CZU9TfAorTWFjaW50b3NoIEdVSSB2ZXJzaW9uCQkJfGFkZGVkLU1hY3wKK01vcmUgVmkgY29tcGF0aWJsZQkJCXxtb3JlLWNvbXBhdGlibGV8CitSZWFkIGlucHV0IGZyb20gc3RkaW4JCQl8cmVhZC1zdGRpbnwKK1JlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucwkJfGFkZGVkLXJlZ2V4cHwKK092ZXJsb2FkZWQgdGFncwkJCQl8dGFnLW92ZXJsb2FkZWR8CitOZXcgY29tbWFuZHMJCQkJfG5ldy1jb21tYW5kc3wKK05ldyBvcHRpb25zCQkJCXxhZGRlZC1vcHRpb25zfAorTmV3IGNvbW1hbmQtbGluZSBhcmd1bWVudHMJCXxhZGRlZC1jbWRsaW5lLWFyZ3N8CitWYXJpb3VzIGFkZGl0aW9ucwkJCXxhZGRlZC12YXJpb3VzfAorCitJTVBST1ZFTUVOVFMJCQkJfGltcHJvdmVtZW50cy01fAorCitDT01QSUxFIFRJTUUgQ0hBTkdFUwkJCXxjb21waWxlLWNoYW5nZXMtNXwKKworQlVHIEZJWEVTCQkJCXxidWctZml4ZXMtNXwKKworVkVSU0lPTiA1LjEJCQl8dmVyc2lvbi01LjF8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC01LjF8CitBZGRlZAkJCQkJfGFkZGVkLTUuMXwKK0ZpeGVkCQkJCQl8Zml4ZWQtNS4xfAorCitWRVJTSU9OIDUuMgkJCXx2ZXJzaW9uLTUuMnwKK0xvbmcgbGluZXMgZWRpdGFibGUJCQl8bG9uZy1saW5lc3wKK0ZpbGUgYnJvd3NlciBhZGRlZAkJCXxmaWxlLWJyb3dzZXItNS4yfAorRGlhbG9ncyBhZGRlZAkJCQl8ZGlhbG9ncy1hZGRlZHwKK1BvcHVwIG1lbnUgYWRkZWQJCQl8cG9wdXAtbWVudS1hZGRlZHwKK1NlbGVjdCBtb2RlIGFkZGVkCQkJfG5ldy1TZWxlY3QtbW9kZXwKK1Nlc3Npb24gZmlsZXMgYWRkZWQJCQl8bmV3LXNlc3Npb24tZmlsZXN8CitVc2VyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCBjb21tYW5kcwl8bmV3LXVzZXItZGVmaW5lZHwKK05ldyBpbnRlcmZhY2VzCQkJCXxpbnRlcmZhY2VzLTUuMnwKK05ldyBwb3J0cwkJCQl8cG9ydHMtNS4yfAorTXVsdGktYnl0ZSBzdXBwb3J0CQkJfG5ldy1tdWx0aS1ieXRlfAorTmV3IGZ1bmN0aW9ucwkJCQl8bmV3LWZ1bmN0aW9ucy01LjJ8CitOZXcgb3B0aW9ucwkJCQl8bmV3LW9wdGlvbnMtNS4yfAorTmV3IEV4IGNvbW1hbmRzCQkJCXxuZXctZXgtY29tbWFuZHMtNS4yfAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNS4yfAorQWRkZWQJCQkJCXxhZGRlZC01LjJ8CitGaXhlZAkJCQkJfGZpeGVkLTUuMnwKKworVkVSU0lPTiA1LjMJCQl8dmVyc2lvbi01LjN8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC01LjN8CitBZGRlZAkJCQkJfGFkZGVkLTUuM3wKK0ZpeGVkCQkJCQl8Zml4ZWQtNS4zfAorCitWRVJTSU9OIDUuNAkJCXx2ZXJzaW9uLTUuNHwKK1J1bnRpbWUgZGlyZWN0b3J5IGludHJvZHVjZWQJCXxuZXctcnVudGltZS1kaXJ8CitGaWxldHlwZSBpbnRyb2R1Y2VkCQkJfG5ldy1maWxldHlwZS01LjR8CitWaW0gc2NyaXB0IGxpbmUgY29udGludWF0aW9uCQl8bmV3LWxpbmUtY29udGludWF0aW9ufAorSW1wcm92ZWQgc2Vzc2lvbiBmaWxlcwkJCXxpbXByb3ZlZC1zZXNzaW9uc3wKK0F1dG9jb21tYW5kcyBpbXByb3ZlZAkJCXxpbXByb3ZlZC1hdXRvY21kcy01LjR8CitFbmNyeXB0aW9uCQkJCXxuZXctZW5jcnlwdGlvbnwKK0dUSyBHVUkgcG9ydAkJCQl8bmV3LUdUSy1HVUl8CitNZW51IGNoYW5nZXMJCQkJfG1lbnUtY2hhbmdlcy01LjR8CitWaW1pbmZvIGltcHJvdmVkCQkJfGltcHJvdmVkLXZpbWluZm98CitWYXJpb3VzIG5ldyBjb21tYW5kcwkJCXxuZXctY29tbWFuZHMtNS40fAorVmFyaW91cyBuZXcgb3B0aW9ucwkJCXxuZXctb3B0aW9ucy01LjR8CitWaW0gc2NyaXB0cwkJCQl8bmV3LXNjcmlwdC01LjR8CitBdm9pZCBoaXQtZW50ZXIgcHJvbXB0CQkJfGF2b2lkLWhpdC1lbnRlcnwKK0ltcHJvdmVkIHF1aWNrZml4CQkJfGltcHJvdmVkLXF1aWNrZml4fAorUmVndWxhciBleHByZXNzaW9ucwkJCXxyZWdleHAtY2hhbmdlcy01LjR8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC01LjR8CitBZGRlZAkJCQkJfGFkZGVkLTUuNHwKK0ZpeGVkCQkJCQl8Zml4ZWQtNS40fAorCitWRVJTSU9OIDUuNQkJCXx2ZXJzaW9uLTUuNXwKK0NoYW5nZWQJCQkJCXxjaGFuZ2VkLTUuNXwKK0FkZGVkCQkJCQl8YWRkZWQtNS41fAorRml4ZWQJCQkJCXxmaXhlZC01LjV8CisKK1ZFUlNJT04gNS42CQkJfHZlcnNpb24tNS42fAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNS42fAorQWRkZWQJCQkJCXxhZGRlZC01LjZ8CitGaXhlZAkJCQkJfGZpeGVkLTUuNnwKKworVkVSU0lPTiA1LjcJCQl8dmVyc2lvbi01Ljd8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC01Ljd8CitBZGRlZAkJCQkJfGFkZGVkLTUuN3wKK0ZpeGVkCQkJCQl8Zml4ZWQtNS43fAorCitWRVJTSU9OIDUuOAkJCXx2ZXJzaW9uLTUuOHwKK0NoYW5nZWQJCQkJCXxjaGFuZ2VkLTUuOHwKK0FkZGVkCQkJCQl8YWRkZWQtNS44fAorRml4ZWQJCQkJCXxmaXhlZC01Ljh8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCSBJTkNPTVBBVElCTEUJCSppbmNvbXBhdGlibGUtNSoKKworRGVmYXVsdCB2YWx1ZSBmb3IgJ2NvbXBhdGlibGUnIGNoYW5nZWQJCQkqY3AtZGVmYXVsdCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZpbSB2ZXJzaW9uIDUuMCB0cmllcyB0byBiZSBtb3JlIFZpIGNvbXBhdGlibGUuICBUaGlzIGhlbHBzIHBlb3BsZSB3aG8gdXNlIFZpbQorYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBWaSwgYnV0IGNhdXNlcyBzb21lIHRoaW5ncyB0byBiZSBpbmNvbXBhdGlibGUKK3dpdGggdmVyc2lvbiA0LnguCisKK0luIHZlcnNpb24gNC54IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbiB3YXMgb2ZmLiAgTm93IHRoZQorZGVmYXVsdCBpcyBvbi4gIFRoZSBmaXJzdCB0aGluZyB5b3Ugd2lsbCBub3RpY2UgaXMgdGhhdCB0aGUgInUiIGNvbW1hbmQgdW5kb2VzCitpdHNlbGYuICBPdGhlciBzaWRlIGVmZmVjdHMgd2lsbCBiZSB0aGF0IG1hcHBpbmdzIG1heSB3b3JrIGRpZmZlcmVudGx5IG9yIG5vdAord29yayBhdCBhbGwuCisKK1NpbmNlIGEgbG90IG9mIHBlb3BsZSBzd2l0Y2hpbmcgZnJvbSBWaW0gNC54IHRvIDUuMCB3aWxsIGZpbmQgdGhpcyBhbm5veWluZywKK3RoZSAnY29tcGF0aWJsZScgb3B0aW9uIGlzIHN3aXRjaGVkIG9mZiBpZiBWaW0gZmluZHMgYSB2aW1yYyBmaWxlLiAgVGhpcyBpcyBhCitiaXQgb2YgbWFnaWMgdG8gbWFrZSBzdXJlIHRoYXQgOTAlIG9mIHRoZSBWaW0gdXNlcnMgd2lsbCBub3QgYmUgYml0dGVuIGJ5Cit0aGlzIGNoYW5nZS4KKworV2hhdCBkb2VzIHRoaXMgbWVhbj8KKy0gSWYgeW91IHByZWZlciB0byBydW4gaW4gJ2NvbXBhdGlibGUnIG1vZGUgYW5kIGRvbid0IGhhdmUgYSB2aW1yYyBmaWxlLCB5b3UKKyAgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKy0gSWYgeW91IHByZWZlciB0byBydW4gaW4gJ25vY29tcGF0aWJsZScgbW9kZSBhbmQgZG8gaGF2ZSBhIHZpbXJjIGZpbGUsIHlvdQorICBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgorLSBJZiB5b3UgcHJlZmVyIHRvIHJ1biBpbiAnY29tcGF0aWJsZScgbW9kZSBhbmQgZG8gaGF2ZSBhIHZpbXJjIGZpbGUsIHlvdQorICBzaG91bGQgcHV0IHRoaXMgbGluZSBmaXJzdCBpbiB5b3VyIHZpbXJjIGZpbGU6ID4KKwk6c2V0IGNvbXBhdGlibGUKKy0gSWYgeW91IHByZWZlciB0byBydW4gaW4gJ25vY29tcGF0aWJsZScgbW9kZSBhbmQgZG9uJ3QgaGF2ZSBhIHZpbXJjIGZpbGUsCisgIHlvdSBjYW4gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLSBDcmVhdGUgYW4gZW1wdHkgdmltcmMgZmlsZSAoZS5nLjogIn4vLnZpbXJjIiBmb3IgVW5peCkuCisgICAgLSBQdXQgdGhpcyBjb21tYW5kIGluIHlvdXIgLmV4cmMgZmlsZSBvciAkRVhJTklUOiA+CisJCTpzZXQgbm9jb21wYXRpYmxlCis8ICAgLSBTdGFydCBWaW0gd2l0aCB0aGUgIi1OIiBhcmd1bWVudC4KKworSWYgeW91IGFyZSBuZXcgdG8gVmkgYW5kIFZpbSwgdXNpbmcgJ25vY29tcGF0aWJsZScgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQsCitiZWNhdXNlIFZpIGhhcyBhIGxvdCBvZiB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cywgd2hpY2ggYXJlIGF2b2lkZWQgYnkgdGhpcworc2V0dGluZy4gIFNlZSAnY29tcGF0aWJsZScuCisKK0lmIHlvdSBsaWtlIHNvbWUgdGhpbmdzIGZyb20gJ2NvbXBhdGlibGUnIGFuZCBzb21lIG5vdCwgeW91IGNhbiB0dW5lIHRoZQorY29tcGF0aWJpbGl0eSB3aXRoICdjcG9wdGlvbnMnLgorCitXaGVuIHlvdSBpbnZva2UgVmltIGFzICJleCIgb3IgImdleCIsIFZpbSBhbHdheXMgc3RhcnRzIGluIGNvbXBhdGlibGUgbW9kZS4KKworCitUZXh0IGZvcm1hdHRpbmcgY29tbWFuZCAiUSIgY2hhbmdlZAkJCSpRLWNvbW1hbmQtY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAiUSIgY29tbWFuZCBmb3JtZXJseSBmb3JtYXR0ZWQgbGluZXMgdG8gdGhlIHdpZHRoIHRoZSAndGV4dHdpZHRoJyBvcHRpb24KK3NwZWNpZmllcy4gIFRoZSBjb21tYW5kIGZvciB0aGlzIGlzIG5vdyAiZ3EiIChzZWUgfGdxfCBmb3IgbW9yZSBpbmZvKS4gIFRoZQorcmVhc29uIGZvciB0aGlzIGNoYW5nZSBpcyB0aGF0ICJRIiBpcyB0aGUgc3RhbmRhcmQgVmkgY29tbWFuZCB0byBlbnRlciAiRXgiCittb2RlLCBhbmQgVmltIG5vdyBkb2VzIGluIGZhY3QgaGF2ZSBhbiAiRXgiIG1vZGUgKHNlZSB8UXwgZm9yIG1vcmUgaW5mbykuCisKK0lmIHlvdSBzdGlsbCB3YW50IHRvIHVzZSAiUSIgZm9yIGZvcm1hdHRpbmcsIHVzZSB0aGlzIG1hcHBpbmc6ID4KKwk6bm9yZW1hcCBRIGdxCitBbmQgaWYgeW91IGFsc28gd2FudCB0byB1c2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgIlEiOiA+CisJOm5vcmVtYXAgZ1EgUQorCisKK0NvbW1hbmQtbGluZSBhcmd1bWVudHMgY2hhbmdlZAkJCQkqY21kbGluZS1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbW1hbmQtbGluZSBmaWxlLWFyZ3VtZW50cyBhbmQgb3B0aW9uLWFyZ3VtZW50cyBjYW4gbm93IGJlIG1peGVkLiAgWW91IGNhbgorZ2l2ZSBvcHRpb25zIGFmdGVyIHRoZSBmaWxlIG5hbWVzLiAgRXhhbXBsZTogPgorICAgdmltIG1haW4uYyAtZworCitUaGlzIGlzIG5vdCBwb3NzaWJsZSB3aGVuIGVkaXRpbmcgYSBmaWxlIHRoYXQgc3RhcnRzIHdpdGggYSAnLScuICBVc2UgdGhlICItLSIKK2FyZ3VtZW50IHRoZW4gfC0tLXw6ID4KKyAgIHZpbSAtZyAtLSAtbWFpbi5jCisKKyItdiIgbm93IG1lYW5zIHRvIHN0YXJ0IEV4IGluIFZpIG1vZGUsIHVzZSAiLVIiIGZvciByZWFkLW9ubHkgbW9kZS4KK29sZDogInZpbSAtdiBmaWxlIgl8LXZ8CituZXc6ICJ2aW0gLVIgZmlsZSIJfC1SfAorCisiLWUiIG5vdyBtZWFucyB0byBzdGFydCBWaSBpbiBFeCBtb2RlLCB1c2UgIi1xIiBmb3IgcXVpY2tmaXguCitvbGQ6ICJ2aW0gLWUgZXJyb3JmaWxlIgl8LWV8CituZXc6ICJ2aW0gLXEgZXJyb3JmaWxlIiB8LXF8CisKKyItcyIgaW4gRXggbW9kZSBub3cgbWVhbnMgdG8gcnVuIGluIHNpbGVudCAoYmF0Y2gpIG1vZGUuIHwtcy1leHwKKworIi14IiByZXNlcnZlZCBmb3IgY3J5cHQsIHVzZSAiLWYiIHRvIGF2b2lkIHN0YXJ0aW5nIGEgbmV3IENMSSAoQW1pZ2EpLgorb2xkOiAidmltIC14IGZpbGUiCXwteHwKK25ldzogInZpbSAtZiBmaWxlIgl8LWZ8CisKK1ZpbSBhbGxvd3MgdXAgdG8gdGVuICIrY21kIiBhbmQgIi1jIGNtZCIgYXJndW1lbnRzLiAgUHJldmlvdXNseSBWaW0gZXhlY3V0ZWQKK29ubHkgdGhlIGxhc3Qgb25lLgorCisiLW4iIG5vdyBvdmVycmlkZXMgYW55IHNldHRpbmcgZm9yICd1cGRhdGVjb3VudCcgaW4gYSB2aW1yYyBmaWxlLCBidXQgbm90IGluCithIGd2aW1yYyBmaWxlLgorCisKK0F1dG9jb21tYW5kcyBhcmUga2VwdAkJCQkJKmF1dG9jbWRzLWtlcHQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIHZlcnNpb24gNS4wLCBhdXRvY29tbWFuZHMgd2l0aCB0aGUgc2FtZSBldmVudCwgZmlsZSBuYW1lIHBhdHRlcm4sIGFuZAorY29tbWFuZCBjb3VsZCBhcHBlYXIgb25seSBvbmNlLiAgVGhpcyB3YXMgZmluZSBmb3Igc2ltcGxlIGF1dG9jb21tYW5kcyAobGlrZQorc2V0dGluZyBvcHRpb24gdmFsdWVzKSwgYnV0IGZvciBtb3JlIGNvbXBsaWNhdGVkIGF1dG9jb21tYW5kcywgd2hlcmUgdGhlIHNhbWUKK2NvbW1hbmQgbWlnaHQgYXBwZWFyIHR3aWNlLCB0aGlzIHJlc3RyaWN0aW9uIGNhdXNlZCBwcm9ibGVtcy4gIFRoZXJlZm9yZQorVmltIHN0b3JlcyBhbGwgYXV0b2NvbW1hbmRzIGFuZCBrZWVwcyB0aGVtIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIGRlZmluZWQuCisKK1RoZSBtb3N0IG9idmlvdXMgc2lkZSBlZmZlY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgdGhhdCB3aGVuIHlvdSBzb3VyY2UgYSB2aW1yYworZmlsZSB0d2ljZSwgdGhlIGF1dG9jb21tYW5kcyBpbiBpdCB3aWxsIGJlIGRlZmluZWQgdHdpY2UuICBUbyBhdm9pZCB0aGlzLCBkbworb25lIG9mIHRoZXNlOgorCistIFJlbW92ZSBhbnkgYXV0b2NvbW1hbmRzIHRoYXQgbWlnaHQgcG90ZW50aWFsbHkgZGVmaW5lZCB0d2ljZSBiZWZvcmUKKyAgZGVmaW5pbmcgdGhlbS4gIEV4YW1wbGU6ID4KKwk6YXUhICogKi5leHQKKwk6YXUgQnVmRW50ZXIgKi5leHQgLi4uCisKKy0gUHV0IHRoZSBhdXRvY29tbWFuZHMgaW5zaWRlIGFuICI6aWYiIGNvbW1hbmQuICBFeGFtcGxlOiA+CisJaWYgIWV4aXN0cygiZGlkX2V4dF9hdXRvY21kcyIpCisJICBsZXQgZGlkX2V4dF9hdXRvY21kcyA9IDEKKwkgIGF1dG9jbWQgQnVmRW50ZXIgKi5leHQgLi4uCisJZW5kaWYKKworLSBQdXQgeW91ciBhdXRvY29tbWFuZHMgaW4gYSBkaWZmZXJlbnQgYXV0b2NvbW1hbmQgZ3JvdXAgc28geW91IGNhbiByZW1vdmUKKyAgdGhlbSBiZWZvcmUgZGVmaW5pbmcgdGhlbSB8OmF1Z3JvdXB8OiA+CisJYXVncm91cCB1bmNvbXByZXNzCisJICBhdSEKKwkgIGF1IEJ1ZlJlYWRQb3N0ICouZ3ogLi4uCisJYXVncm91cCBFTkQKKworCitVc2Ugb2YgJ2hpZGRlbicgY2hhbmdlZAkJCQkJKmhpZGRlbi1jaGFuZ2VkKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdmVyc2lvbiA0LngsIG9ubHkgc29tZSBjb21tYW5kcyB1c2VkIHRoZSAnaGlkZGVuJyBvcHRpb24uICBOb3cgYWxsIGNvbW1hbmRzCit1c2VzIGl0IHdoZW5ldmVyIGEgYnVmZmVyIGRpc2FwcGVhcnMgZnJvbSBhIHdpbmRvdy4KKworUHJldmlvdXNseSB5b3UgY291bGQgZG8gIjpidWYgeHh4IiBpbiBhIGNoYW5nZWQgYnVmZmVyIGFuZCB0aGF0IGJ1ZmZlciB3b3VsZAordGhlbiBiZWNvbWUgaGlkZGVuLiAgTm93IHlvdSBtdXN0IHNldCB0aGUgJ2hpZGRlbicgb3B0aW9uIGZvciB0aGlzIHRvIHdvcmsuCisKK1RoZSBuZXcgYmVoYXZpb3IgaXMgc2ltcGxlcjogd2hldGhlciBWaW0gaGlkZXMgYnVmZmVycyBubyBsb25nZXIgZGVwZW5kcyBvbgordGhlIHNwZWNpZmljIGNvbW1hbmQgdGhhdCB5b3UgdXNlLgorLSB3aXRoICdoaWRkZW4nIG5vdCBzZXQsIHlvdSBuZXZlciBnZXQgaGlkZGVuIGJ1ZmZlcnMuICBFeGNlcHRpb25zIGFyZSB0aGUKKyAgIjpoaWRlIiBhbmQgIjpjbG9zZSEiIGNvbW1hbmRzIGFuZCwgaW4gcmFyZSBjYXNlcywgd2hlcmUgeW91IHdvdWxkIG90aGVyd2lzZQorICBsb3NlIGNoYW5nZXMgdG8gdGhlIGJ1ZmZlci4KKy0gV2l0aCAnaGlkZGVuJyBzZXQsIHlvdSBhbG1vc3QgbmV2ZXIgdW5sb2FkIGEgYnVmZmVyLiAgRXhjZXB0aW9ucyBhcmUgdGhlCisgICI6YnVubG9hZCIgb3IgIjpiZGVsIiBjb21tYW5kcy4KKworIjpidWZmZXIiIG5vdyBzdXBwb3J0cyBhICIhIjogYWJhbmRvbiBjaGFuZ2VzIGluIGN1cnJlbnQgYnVmZmVyLiAgU28gZG8KKyI6Ym5leHQiLCAiOmJyZXdpbmQiLCBldGMuCisKKworVGV4dCBvYmplY3QgY29tbWFuZHMgY2hhbmdlZAkJCQkqdGV4dC1vYmplY3RzLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RleHQgb2JqZWN0IGNvbW1hbmRzIGhhdmUgbmV3IG5hbWVzLiAgVGhpcyBhbGxvd3MgbW9yZSB0ZXh0IG9iamVjdHMgYW5kIG1ha2VzCitjaGFyYWN0ZXJzIGF2YWlsYWJsZSBmb3Igb3RoZXIgVmlzdWFsIG1vZGUgY29tbWFuZHMuICBTaW5jZSBubyBtb3JlIHNpbmdsZQorY2hhcmFjdGVycyB3ZXJlIGF2YWlsYWJsZSwgdGV4dCBvYmplY3RzIG5hbWVzIG5vdyByZXF1aXJlIHR3byBjaGFyYWN0ZXJzLgorVGhlIGZpcnN0IG9uZSBpcyBhbHdheXMgJ2knIG9yICdhJy4KKwlPTEQJTkVXCX4KKwlhCWF3CWEgd29yZAkJCXx2X2F3fAorCUEJYVcJYSBXT1JECQkJfHZfYVd8CisJcwlhcwlhIHNlbnRlbmNlCQl8dl9hc3wKKwlwCWFwCWEgcGFyYWdyYXBoCQl8dl9hcHwKKwlTCWFiCWEgKCkgYmxvY2sJCXx2X2FifAorCVAJYUIJYSB7fSBibG9jawkJfHZfYUJ8CisKK1RoZXJlIGlzIGFub3RoZXIgc2V0IG9mIHRleHQgb2JqZWN0cyB0aGF0IHN0YXJ0cyB3aXRoICJpIiwgZm9yICJpbm5lciIuICBUaGVzZQorc2VsZWN0IHRoZSBzYW1lIG9iamVjdHMsIGJ1dCBleGNsdWRlIHdoaXRlIHNwYWNlLgorCisKK1gtV2luZG93cyBSZXNvdXJjZXMgcmVtb3ZlZAkJCQkqeC1yZXNvdXJjZXMqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWaW0gbm8gbG9uZ2VyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgWCByZXNvdXJjZXM6CistIGJvbGRDb2xvcgorLSBpdGFsaWNDb2xvcgorLSB1bmRlcmxpbmVDb2xvcgorLSBjdXJzb3JDb2xvcgorCitWaW0gbm93IHVzZXMgaGlnaGxpZ2h0IGdyb3VwcyB0byBzZXQgY29sb3JzLiAgVGhpcyBhdm9pZHMgdGhlIGNvbmZ1c2lvbiBvZgordXNpbmcgYSBib2xkIEZvbnQsIHdoaWNoIHdvdWxkIGltcGx5IGEgY2VydGFpbiBjb2xvci4gIFNlZSB8OmhpZ2hsaWdodHwgYW5kCit8Z3VpLXJlc291cmNlc3wuCisKKworVXNlIG9mICRWSU0JCQkJCQkqJFZJTS11c2UqCistLS0tLS0tLS0tLQorCitWaW0gbm93IHVzZXMgdGhlIFZJTSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBmaW5kIGFsbCBWaW0gc3lzdGVtIGZpbGVzLiAgVGhpcworaW5jbHVkZXMgdGhlIGdsb2JhbCB2aW1yYywgZ3ZpbXJjLCBhbmQgbWVudS52aW0gZmlsZXMgYW5kIGFsbCBvbi1saW5lIGhlbHAKK2FuZCBzeW50YXggZmlsZXMuICBTZWUgfCRWSU18LiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDUuNCwgfCRWSU1SVU5USU1FfCBjYW4KK2Fsc28gYmUgdXNlZC4KK0ZvciBVbml4LCBWaW0gc2V0cyBhIGRlZmF1bHQgdmFsdWUgZm9yICRWSU0gd2hlbiBkb2luZyAibWFrZSBpbnN0YWxsIi4KK1doZW4gJFZJTSBpcyBub3Qgc2V0LCBpdHMgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZGlyZWN0b3J5IGZyb20gJ2hlbHBmaWxlJywKK2V4Y2x1ZGluZyAiL2RvYy9oZWxwLnR4dCIuCisKKworVXNlIG9mICRIT01FIGZvciBNUy1ET1MgYW5kIFdpbjMyCQkJKiRIT01FLXVzZSoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgTVMtRE9TIGFuZCBXaW4zMiB2ZXJzaW9ucyBvZiBWaW0gbm93IGZpcnN0IGNoZWNrICRIT01FIHdoZW4gc2VhcmNoaW5nIGZvcgorYSB2aW1yYyBvciBleHJjIGZpbGUgYW5kIGZvciByZWFkaW5nL3N0b3JpbmcgdGhlIHZpbWluZm8gZmlsZS4gIFByZXZpb3VzbHkgVmltCit1c2VkICRWSU0gZm9yIHRoZXNlIHN5c3RlbXMsIGJ1dCB0aGlzIGNhdXNlcyB0cm91YmxlIG9uIGEgc3lzdGVtIHdpdGggc2V2ZXJhbAordXNlcnMuICBOb3cgVmltIHVzZXMgJFZJTSBvbmx5IHdoZW4gJEhPTUUgaXMgbm90IHNldCBvciB0aGUgZmlsZSBpcyBub3QgZm91bmQKK2luICRIT01FLiAgU2VlIHxfdmltcmN8LgorCisKK1RhZ3MgZmlsZSBmb3JtYXQgY2hhbmdlZAkJCQkqdGFncy1maWxlLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT25seSBUYWJzIGFyZSBhbGxvd2VkIHRvIHNlcGFyYXRlIGZpZWxkcyBpbiBhIHRhZ3MgZmlsZS4gIFRoaXMgYWxsb3dzIGZvcgorc3BhY2VzIGluIGEgZmlsZSBuYW1lIGFuZCBpcyBzdGlsbCBWaSBjb21wYXRpYmxlLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YKK1ZpbSwgYW55IHdoaXRlIHNwYWNlIHdhcyBhbGxvd2VkIHRvIHNlcGFyYXRlIHRoZSBmaWVsZHMuICBJZiB5b3UgaGF2ZSBhIGZpbGUKK3doaWNoIGRvZXNuJ3QgdXNlIGEgc2luZ2xlIFRhYiBiZXR3ZWVuIGZpZWxkcywgZWRpdCB0aGUgdGFncyBmaWxlIGFuZCBleGVjdXRlCit0aGlzIGNvbW1hbmQ6ID4KKwk6JXMvXChcUypcKVxzXCtcKFxTKlwpXHNcK1woLipcKS9cMVx0XDJcdFwzLworCisKK09wdGlvbnMgY2hhbmdlZAkJCQkJCSpvcHRpb25zLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgdmFsdWUgb2YgJ2Vycm9yZmlsZScgaGFzIGNoYW5nZWQgZnJvbSAiZXJyb3JzLnZpbSIgdG8gImVycm9ycy5lcnIiLgorVGhlIHJlYXNvbiBpcyB0aGF0IG9ubHkgVmltIHNjcmlwdHMgc2hvdWxkIGhhdmUgdGhlICIudmltIiBleHRlbnNpb25zLgorCitUaGUgIjptYWtlIiBjb21tYW5kIG5vIGxvbmdlciB1c2VzIHRoZSAnZXJyb3JmaWxlJyBvcHRpb24uICBUaGlzIHByZXZlbnRzIHRoZQorb3V0cHV0IG9mIHRoZSAiOm1ha2UiIGNvbW1hbmQgZnJvbSBvdmVyd3JpdGluZyBhIG1hbnVhbGx5IHNhdmVkIGVycm9yIGZpbGUuCisiOm1ha2UiIHVzZXMgdGhlICdtYWtlZWYnIG9wdGlvbiBpbnN0ZWFkLiAgVGhpcyBhbHNvIGFsbG93cyBmb3IgZ2VuZXJhdGluZyBhCit1bmlxdWUgbmFtZSwgdG8gcHJldmVudCBjb25jdXJyZW50bHkgcnVubmluZyAiOm1ha2UiIGNvbW1hbmRzIGZyb20gb3ZlcndyaXRpbmcKK2VhY2ggb3RoZXIncyBmaWxlcy4KKworV2l0aCAnaW5zZXJ0bW9kZScgc2V0LCBhIGZldyBtb3JlIHRoaW5ncyBjaGFuZ2U6CistIDxFc2M+IGluIE5vcm1hbCBtb2RlIGdvZXMgdG8gSW5zZXJ0IG1vZGUuCistIDxFc2M+IGluIEluc2VydCBtb2RlIGRvZXNuJ3QgbGVhdmUgSW5zZXJ0IG1vZGUuCistIFdoZW4gZG9pbmcgIjpzZXQgaW0iLCBnbyB0byBJbnNlcnQgbW9kZSBpbW1lZGlhdGVseS4KKworVmltIGNvbnNpZGVycyBhIGJ1ZmZlciB0byBiZSBjaGFuZ2VkIHdoZW4gdGhlICdmaWxlZm9ybWF0JyAoZm9ybWVybHkgdGhlCisndGV4dG1vZGUnIG9wdGlvbikgaXMgZGlmZmVyZW50IGZyb20gdGhlIGJ1ZmZlcidzIGluaXRpYWwgZm9ybWF0LgorCisKK0NUUkwtQiBpbiBJbnNlcnQgbW9kZSBnb25lCQkJCSppX0NUUkwtQi1nb25lKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fCBmZWF0dXJlLCB5b3UgY291bGQgdXNlIENUUkwtQiB0bwordG9nZ2xlIHRoZSAncmV2aW5zJyBvcHRpb24uICBVbmZvcnR1bmF0ZWx5LCBzb21lIHBlb3BsZSBoaXQgdGhlICdCJyBrZXkKK2FjY2lkZW50YWxseSB3aGVuIHRyeWluZyB0byB0eXBlIENUUkwtViBvciBDVFJMLU4gYW5kIHRoZW4gZGlkbid0IGtub3cgaG93IHRvCit1bmRvIHRoaXMuICBTaW5jZSB0b2dnbGluZyB0aGUgJ3Jldmlucycgb3B0aW9uIGNhbiBlYXNpbHkgYmUgZG9uZSB3aXRoIHRoZQorbWFwcGluZyBiZWxvdywgdGhpcyB1c2Ugb2YgdGhlIENUUkwtQiBrZXkgaXMgZGlzYWJsZWQuICBZb3UgY2FuIHN0aWxsIHVzZSB0aGUKK0NUUkwtXyBrZXkgZm9yIHRoaXMgfGlfQ1RSTC1ffC4gPgorICAgOmltYXAgPEMtQj4gPEMtTz46c2V0IHJldmlucyE8Q1I+CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCSBORVcgRkVBVFVSRVMJCSpuZXctNSoKKworU3ludGF4IGhpZ2hsaWdodGluZwkJCQkJKm5ldy1oaWdobGlnaHRpbmcqCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZpbSBub3cgaGFzIGEgdmVyeSBmbGV4aWJsZSB3YXkgdG8gaGlnaGxpZ2h0aW5nIGp1c3QgYWJvdXQgYW55IHR5cGUgb2YgZmlsZS4KK1NlZSB8c3ludGF4fC4gIFN1bW1hcnk6ID4KKyAgIDpzeW50YXggb24KKworQ29sb3JzIGFuZCBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQgZm9yIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nLCBhbmQgYWxzbyBmb3IKK290aGVyIGhpZ2hsaWdodGVkIGl0ZW1zIHdpdGggdGhlICc6JyBmbGFnIGluIHRoZSAnaGlnaGxpZ2h0JyBvcHRpb24uICBBbGwKK2hpZ2hsaWdodGVkIGl0ZW1zIGFyZSBhc3NpZ25lZCBhIGhpZ2hsaWdodCBncm91cCB3aGljaCBzcGVjaWZpZXMgdGhlaXIKK2hpZ2hsaWdodGluZy4gIFNlZSB8OmhpZ2hsaWdodHwuICBUaGUgZGVmYXVsdCBjb2xvcnMgaGF2ZSBiZWVuIGltcHJvdmVkLgorCitZb3UgY2FuIHVzZSB0aGUgIk5vcm1hbCIgZ3JvdXAgdG8gc2V0IHRoZSBkZWZhdWx0IGZvcmUvYmFja2dyb3VuZCBjb2xvcnMgZm9yIGEKK2NvbG9yIHRlcm1pbmFsLiAgRm9yIHRoZSBHVUksIHlvdSBjYW4gdXNlIHRoaXMgZ3JvdXAgdG8gc3BlY2lmeSB0aGUgZm9udCwgdG9vLgorCitUaGUgIjJodG1sLnZpbSIgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYW55IGZpbGUgdGhhdCBoYXMgc3ludGF4CitoaWdobGlnaHRpbmcgdG8gSFRNTC4gIFRoZSBjb2xvcnMgd2lsbCBiZSBleGFjdGx5IHRoZSBzYW1lIGFzIGhvdyB5b3Ugc2VlIHRoZW0KK2luIFZpbS4gIFdpdGggYSBIVE1MIHZpZXdlciB5b3UgY2FuIGFsc28gcHJpbnQgdGhlIGZpbGUgd2l0aCBjb2xvcnMuCisKKworQnVpbHQtaW4gc2NyaXB0IGxhbmd1YWdlCQkJCSpuZXctc2NyaXB0KgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZmV3IGV4dHJhIGNvbW1hbmRzIGFuZCBhbiBleHByZXNzaW9uIGV2YWx1YXRvciBlbmFibGUgeW91IHRvIHdyaXRlIHNpbXBsZQorYnV0IHBvd2VyZnVsIHNjcmlwdHMuICBDb21tYW5kcyBpbmNsdWRlICI6aWYiIGFuZCAiOndoaWxlIi4gIEV4cHJlc3Npb25zIGNhbgorbWFuaXB1bGF0ZSBudW1iZXJzIGFuZCBzdHJpbmdzLiAgWW91IGNhbiB1c2UgdGhlICc9JyByZWdpc3RlciB0byBpbnNlcnQKK2RpcmVjdGx5IHRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbi4gIFNlZSB8ZXhwcmVzc2lvbnwuCisKKworUGVybCBhbmQgUHl0aG9uIHN1cHBvcnQJCQkJCSpuZXctcGVybC1weXRob24qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWaW0gY2FuIGNhbGwgUGVybCBjb21tYW5kcyB3aXRoICI6cGVybGRvIiwgIjpwZXJsIiwgZXRjLiAgU2VlIHxwZXJsfC4KK1BhdGNoZXMgbWFkZSBieSBTdmVuIFZlcmRvb2xhZWdlIGFuZCBNYXR0IEdlcmFzc2ltb2ZmLgorCitWaW0gY2FuIGNhbGwgUHl0aG9uIGNvbW1hbmRzIHdpdGggIjpweXRob24iIGFuZCAiOnB5ZmlsZSIuICBTZWUgfHB5dGhvbnwuCisKK0JvdGggb2YgdGhlc2UgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gZW5hYmxlZCBhdCBjb21waWxlIHRpbWUuCisKKworV2luMzIgR1VJIHZlcnNpb24JCQkJCSphZGRlZC13aW4zMi1HVUkqCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgR1VJIGhhcyBiZWVuIHBvcnRlZCB0byBNUyBXaW5kb3dzIDk1IGFuZCBOVC4gIEFsbCB0aGUgZmVhdHVyZXMgb2YgdGhlIFgxMQorR1VJIGFyZSBhdmFpbGFibGUgdG8gV2luZG93cyB1c2VycyBub3cuICB8Z3VpLXczMnwKK1RoaXMgYWxzbyBmaXhlcyBwcm9ibGVtcyB3aXRoIHJ1bm5pbmcgdGhlIFdpbjMyIGNvbnNvbGUgdmVyc2lvbiB1bmRlciBXaW5kb3dzCis5NSwgd2hlcmUgY29uc29sZSBzdXBwb3J0IGhhcyBhbHdheXMgYmVlbiBiYWQuCitUaGVyZSBpcyBhbHNvIGEgdmVyc2lvbiB0aGF0IHN1cHBvcnRzIE9MRSBhdXRvbWF0aW9uIGludGVyZmFjZS4gIHxpZl9vbGUudHh0fAorVmltIGNhbiBiZSBpbnRlZ3JhdGVkIHdpdGggTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gdXNpbmcgdGhlIFZpc1ZpbSBETEwuCitJdCBpcyBwb3NzaWJsZSB0byBwcm9kdWNlIGEgRExMIHZlcnNpb24gb2YgZ3ZpbSB3aXRoIEJvcmxhbmQgQysrIChBYXJvbikuCisKKworVk1TIHZlcnNpb24JCQkJCQkqYWRkZWQtVk1TKgorLS0tLS0tLS0tLS0KKworVmltIGNhbiBub3cgYWxzbyBiZSB1c2VkIG9uIFZNUyBzeXN0ZW1zLiAgUG9ydCBkb25lIGJ5IEhlbmsgRWxiZXJzLgorVGhpcyBoYXMgbm90IGJlZW4gdGVzdGVkIG11Y2gsIGJ1dCBpdCBzaG91bGQgd29yay4KK1NvcnJ5LCBubyBkb2N1bWVudGF0aW9uIQorCisKK0JlT1MgdmVyc2lvbgkJCQkJCSphZGRlZC1CZU9TKgorLS0tLS0tLS0tLS0tCisKK1ZpbSBjYW4gYmUgdXNlZCBvbiBCZU9TIHN5c3RlbXMgKGluY2x1ZGluZyB0aGUgQmVCb3gpLiAgKE9sYWYgU2VpYmVydCkKK1NlZSB8b3NfYmVvcy50eHR8LgorCisKK01hY2ludG9zaCBHVUkgdmVyc2lvbgkJCQkJKmFkZGVkLU1hYyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWaW0gY2FuIG5vdyBiZSB1c2VkIG9uIHRoZSBNYWNpbnRvc2guICAoRGFueSBTdC1BbWFudCkKK0l0IGhhcyBub3QgYmVlbiB0ZXN0ZWQgbXVjaCB5ZXQsIGJlIGNhcmVmdWwhCitTZWUgfG9zX21hYy50eHR8LgorCisKK01vcmUgVmkgY29tcGF0aWJsZQkJCQkJKm1vcmUtY29tcGF0aWJsZSoKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBub3cgYSByZWFsIEV4IG1vZGUuICBTdGFydGVkIHdpdGggdGhlICJRIiBjb21tYW5kLCBvciBieSBjYWxsaW5nIHRoZQorZXhlY3V0YWJsZSAiZXgiIG9yICJnZXgiLiAgfEV4LW1vZGV8CisKK0Fsd2F5cyBhbGxvdyBtdWx0aS1sZXZlbCB1bmRvLCBhbHNvIGluIFZpIGNvbXBhdGlibGUgbW9kZS4gIFdoZW4gdGhlICd1JyBmbGFnCitpbiAnY3BvcHRpb25zJyBpcyBpbmNsdWRlZCwgQ1RSTC1SIGlzIHVzZWQgZm9yIHJlcGVhdGluZyB0aGUgdW5kbyBvciByZWRvCisobGlrZSAiLiIgaW4gTnZpKS4KKworCitSZWFkIGlucHV0IGZyb20gc3RkaW4JCQkJCSpyZWFkLXN0ZGluKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgdGhlICItIiBjb21tYW5kLWxpbmUgYXJndW1lbnQsIFZpbSByZWFkcyBpdHMgdGV4dCBpbnB1dCBmcm9tIHN0ZGluLgorVGhpcyBjYW4gYmUgdXNlZCBmb3IgcHV0dGluZyBWaW0gYXQgdGhlIGVuZCBvZiBhIHBpcGU6ID4KKyAgIGdyZXAgIl5hLioiICouYyB8IHZpbSAtCitTZWUgfC0tfC4KKworCitSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybnMJCQkJKmFkZGVkLXJlZ2V4cCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGRlZCBzcGVjaWZ5aW5nIGEgcmFuZ2UgZm9yIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBvZiBhIGF0b206ICJce2EsYn0iLiB8L1x7fAorQWRkZWQgdGhlICJzaG9ydGVzdCBtYXRjaCIgcmVnZXhwICJcey19IiAoV2ViYikuCitBZGRlZCAiXHMiLCBtYXRjaGVzIGEgd2hpdGUgY2hhcmFjdGVyLiAgQ2FuIHJlcGxhY2UgIlsgXHRdIi4JCXwvXHN8CitBZGRlZCAiXFMiLCBtYXRjaGVzIGEgbm9uLXdoaXRlIGNoYXJhY3Rlci4gIENhbiByZXBsYWNlICJbXiBcdF0iLgl8L1xTfAorCisKK092ZXJsb2FkZWQgdGFncwkJCQkJCSp0YWctb3ZlcmxvYWRlZCoKKy0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHVzaW5nIGEgbGFuZ3VhZ2UgbGlrZSBDKyssIHRoZXJlIGNhbiBiZSBzZXZlcmFsIHRhZ3MgZm9yIHRoZSBzYW1lCit0YWduYW1lLiAgQ29tbWFuZHMgaGF2ZSBiZWVuIGFkZGVkIHRvIGJlIGFibGUgdG8ganVtcCB0byBhbnkgb2YgdGhlc2UKK292ZXJsb2FkZWQgdGFnczoKK3w6dHNlbGVjdHwJTGlzdCBtYXRjaGluZyB0YWdzLCBhbmQganVtcCB0byBvbmUgb2YgdGhlbS4KK3w6c3RzZWxlY3R8CUlkZW0sIGFuZCBzcGxpdCB3aW5kb3cuCit8Z19DVFJMLV18CURvICI6dHNlbGVjdCIgd2l0aCB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLgorCisJQWZ0ZXIgIjp0YSB7dGFnbmFtZX0iIHdpdGggbXVsdGlwbGUgbWF0Y2hlczoKK3w6dG5leHR8CUdvIHRvIG5leHQgbWF0Y2hpbmcgdGFnLgorfDp0cHJldmlvdXN8CUdvIHRvIHByZXZpb3VzIG1hdGNoaW5nIHRhZy4KK3w6dHJld2luZHwJR28gdG8gZmlyc3QgbWF0Y2hpbmcgdGFnLgorfDp0bGFzdHwJR28gdG8gbGFzdCBtYXRjaGluZyB0YWcuCisKK1RoZSAiOnRhZyIgY29tbWFuZCBub3cgYWxzbyBhY2NlcHRzIHdpbGRjYXJkcy4gIFdoZW4gZG9pbmcgY29tbWFuZC1saW5lCitjb21wbGV0aW9uIG9uIHRhZ3MsIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcgaXMgYWxzbyBhdmFpbGFibGUgKGF0IHRoZSBlbmQpLgorCisKK05ldyBjb21tYW5kcwkJCQkJCSpuZXctY29tbWFuZHMqCistLS0tLS0tLS0tLS0KKworfDphbWVudXwJRGVmaW5lIG1lbnVzIGZvciBhbGwgbW9kZXMsIGluc2VydGluZyBhIENUUkwtTyBmb3IgSW5zZXJ0CisJCW1vZGUsIEVTQyBmb3IgVmlzdWFsIGFuZCBDVFJMLUMgZm9yIENtZGxpbmUgbW9kZS4gICJhbWVudSIgaXMKKwkJdXNlZCBmb3IgdGhlIGRlZmF1bHQgbWVudXMgYW5kIHRoZSBTeW50YXggbWVudS4KKworfDphdWdyb3VwfAlTZXQgZ3JvdXAgdG8gYmUgdXNlZCBmb3IgZm9sbG93aW5nIGF1dG9jb21tYW5kcy4gIEFsbG93cyB0aGUKKwkJZ3JvdXBpbmcgb2YgYXV0b2NvbW1hbmRzIHRvIGVuYWJsZSBkZWxldGlvbiBvZiBhIHNwZWNpZmljCisJCWdyb3VwLgorCit8OmNyZXdpbmR8CUdvIHRvIGZpcnN0IGVycm9yLgorfDpjbGFzdHwJR28gdG8gbGFzdCBlcnJvci4KKworfDpkb2F1dG9hbGx8CUV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBhbGwgbG9hZGVkIGJ1ZmZlcnMuCisKK3w6ZWNob3wJCUVjaG8gaXRzIGFyZ3VtZW50LCB3aGljaCBpcyBhbiBleHByZXNzaW9uLiAgQ2FuIGJlIHVzZWQgdG8KKwkJZGlzcGxheSBtZXNzYWdlcyB3aGljaCBpbmNsdWRlIHZhcmlhYmxlcy4KKworfDpleGVjdXRlfAlFeGVjdXRlIGl0cyBhcmd1bWVudCwgd2hpY2ggaXMgYW4gZXhwcmVzc2lvbi4gIENhbiBiZSB1c2VkIHRvCisJCWJ1aWx0IHVwIGFuIEV4IGNvbW1hbmQgd2l0aCBhbnl0aGluZy4KKworfDpoaWRlfAkJV29ya3MgbGlrZSAiOmNsb3NlIi4KKworfDppZnwJCUNvbmRpdGlvbmFsIGV4ZWN1dGlvbiwgZm9yIGJ1aWx0LWluIHNjcmlwdCBsYW5ndWFnZS4KKworfDppbnRyb3wJU2hvdyBpbnRyb2R1Y3RvcnkgbWVzc2FnZS4gIFRoaXMgaXMgYWx3YXlzIGV4ZWN1dGVkIHdoZW4gVmltCisJCWlzIHN0YXJ0ZWQgd2l0aG91dCBmaWxlIGFyZ3VtZW50cy4KKworfDpsZXR8CQlBc3NpZ24gYSB2YWx1ZSB0byBhbiBpbnRlcm5hbCB2YXJpYWJsZS4KKworfDpvbWFwfAkJTWFwIG9ubHkgaW4gb3BlcmF0b3ItcGVuZGluZyBtb2RlLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gbWFwCisJCXRleHQtb2JqZWN0IGNvbW1hbmRzLgorCit8OnJlZGlyfAlSZWRpcmVjdCBvdXRwdXQgb2YgbWVzc2FnZXMgdG8gYSBmaWxlLgorCit8OnVwZGF0ZXwJV3JpdGUgd2hlbiBidWZmZXIgaGFzIGNoYW5nZWQuCisKK3w6d2hpbGV8CVdoaWxlLWxvb3AgZm9yIGJ1aWx0LWluIHNjcmlwdCBsYW5ndWFnZS4KKworVmlzdWFsIG1vZGU6Cit8dl9PfAkJIk8iIGluIFZpc3VhbCBibG9jayBtb2RlLCBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBvdGhlciBjb3JuZXIKKwkJaG9yaXpvbnRhbGx5LgorfHZfRHwJCSJEIiBpbiBWaXN1YWwgYmxvY2sgbW9kZSBkZWxldGVzIHRpbGwgZW5kIG9mIGxpbmUuCisKK0luc2VydCBtb2RlOgorfGlfQ1RSTC1dfAlUcmlnZ2VycyBhYmJyZXZpYXRpb24sIHdpdGhvdXQgaW5zZXJ0aW5nIGFueSBjaGFyYWN0ZXIuCisKKworTmV3IG9wdGlvbnMJCQkJCQkqYWRkZWQtb3B0aW9ucyoKKy0tLS0tLS0tLS0tCisKKydiYWNrZ3JvdW5kJwlVc2VkIGZvciBzZWxlY3RpbmcgaGlnaGxpZ2h0IGNvbG9yIGRlZmF1bHRzLiAgQWxzbyB1c2VkIGluCisJCSJzeW50YXgudmltIiBmb3Igc2VsZWN0aW5nIHRoZSBzeW50YXggY29sb3JzLiAgT2Z0ZW4gc2V0CisJCWF1dG9tYXRpY2FsbHksIGRlcGVuZGluZyBvbiB0aGUgdGVybWluYWwgdXNlZC4KKworJ2NvbXBsZXRlJwlTcGVjaWZpZXMgaG93IEluc2VydCBtb2RlIGNvbXBsZXRpb24gd29ya3MuCisKKydldmVudGlnbm9yZScJTWFrZXMgaXQgcG9zc2libGUgdG8gaWdub3JlIGF1dG9jb21tYW5kcyB0ZW1wb3JhcmlseS4KKworJ2ZpbGVmb3JtYXQnCUN1cnJlbnQgZmlsZSBmb3JtYXQuICBSZXBsYWNlcyAndGV4dG1vZGUnLgorJ2ZpbGVmb3JtYXRzJwlQb3NzaWJsZSBmaWxlIGZvcm1hdHMuICBSZXBsYWNlcyAndGV4dGF1dG8nLgorCQlOZXcgaXMgdGhhdCB0aGlzIGFsc28gc3VwcG9ydHMgTWFjaW50b3NoIGZvcm1hdDogQSBzaW5nbGUgPENSPgorCQlzZXBhcmF0ZXMgbGluZXMuCisJCVRoZSBkZWZhdWx0IGZvciAnZmlsZWZvcm1hdHMnIGZvciBNUy1ET1MsIFdpbjMyIGFuZCBPUy8yIGlzCisJCSJkb3MsdW5peCIsIGFsc28gd2hlbiAnY29tcGF0aWJsZScgc2V0LiAgVW5peCB0eXBlIGZpbGVzCisJCWRpZG4ndCB3b3JrIGFueXdheSB3aGVuICdmaWxlZm9ybWF0cycgd2FzIGVtcHR5LgorCisnZ3VpY3Vyc29yJwlTZXQgdGhlIGN1cnNvciBzaGFwZSBhbmQgYmxpbmtpbmcgaW4gdmFyaW91cyBtb2Rlcy4KKwkJRGVmYXVsdCBpcyB0byBhZGp1c3QgdGhlIGN1cnNvciBmb3IgSW5zZXJ0IGFuZCBSZXBsYWNlIG1vZGUsCisJCWFuZCB3aGVuIGFuIG9wZXJhdG9yIGlzIHBlbmRpbmcuICBCbGlua2luZyBpcyBkZWZhdWx0IG9uLgorCisnZmttYXAnCQlGYXJzaSBrZXkgbWFwcGluZy4KKworJ2hsc2VhcmNoJwlIaWdobGlnaHQgYWxsIG1hdGNoZXMgd2l0aCB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuLgorCisnaGttYXBwJwlQaG9uZXRpYyBIZWJyZXcgbWFwcGluZyAoSWx5YSBEb2dvbGF6a3kpLgorCisnaWNvbnN0cmluZycJRGVmaW5lIHRoZSBuYW1lIG9mIHRoZSBpY29uLCB3aGVuIG5vdCBlbXB0eS4gKHZlcnNpb24gNS4yOiB0aGUKKwkJc3RyaW5nIGlzIHVzZWQgbGl0ZXJhbGx5LCBhIG5ld2xpbmUgY2FuIGJlIHVzZWQgdG8gbWFrZSB0d28KKwkJbGluZXMpLgorCisnbGF6eXJlZHJhdycJRG9uJ3QgcmVkcmF3IHRoZSBzY3JlZW4gd2hpbGUgZXhlY3V0aW5nIG1hY3JvcywgcmVnaXN0ZXJzIG9yCisJCW90aGVyIG5vdCB0eXBlZCBjb21tYW5kcy4KKworJ21ha2VlZicJRXJyb3JmaWxlIHRvIGJlIHVzZWQgZm9yICI6bWFrZSIuICAiIyMiIGlzIHJlcGxhY2VkIHdpdGggYQorCQl1bmlxdWUgbnVtYmVyLiAgQXZvaWRzIHRoYXQgdHdvIFZpbSBzZXNzaW9ucyBvdmVyd3JpdGUgZWFjaAorCQlvdGhlcnMgZXJyb3JmaWxlLiAgVGhlIFVuaXggZGVmYXVsdCBpcyAiL3RtcC92aW0jIy5lcnIiOyBmb3IKKwkJQW1pZ2EgInQ6dmltIyMuRXJyLCBmb3Igb3RoZXJzICJ2aW0jIy5lcnIiLgorCisnbWF0Y2h0aW1lJwkxLzEwcyBvZiBhIHNlY29uZCB0byBzaG93IGEgbWF0Y2hpbmcgcGFyZW4sIHdoZW4gJ3Nob3dtYXRjaCcKKwkJaXMgc2V0LiAgTGlrZSBOdmkuCisKKydtb3VzZWhpZGUnCUhpZGUgbW91c2UgcG9pbnRlciBpbiBHVUkgd2hlbiB0eXBpbmcgdGV4dC4KKworJ25yZm9ybWF0cycJRGVmaW5lcyB3aGF0IGJhc2VzIFZpbSB3aWxsIGNvbnNpZGVyIGZvciBudW1iZXJzIHdoZW4gdXNpbmcKKwkJdGhlIENUUkwtQSBhbmQgQ1RSTC1YIGNvbW1hbmRzLiAgRGVmYXVsdDogImhleCxvY3RhbCIuCisKKydzaGVsbHhxdW90ZScJQWRkIGV4dHJhIHF1b3RlcyBhcm91bmQgdGhlIHdob2xlIHNoZWxsIGNvbW1hbmQsIGluY2x1ZGluZworCQlyZWRpcmVjdGlvbi4KKworJ3NvZnR0YWJzdG9wJwlNYWtlIHR5cGluZyBiZWhhdmUgbGlrZSB0YWJzdG9wIGlzIHNldCBhdCB0aGlzIHZhbHVlLCB3aXRob3V0CisJCWNoYW5naW5nIHRoZSB2YWx1ZSBvZiAndGFic3RvcCcuICBNYWtlcyBpdCBtb3JlIGVhc3kgdG8ga2VlcAorCQkndHMnIGF0IDgsIHdoaWxlIHN0aWxsIGdldHRpbmcgZm91ciBzcGFjZXMgZm9yIGEgPFRhYj4uCisKKyd0aXRsZXN0cmluZycJU3RyaW5nIGZvciB0aGUgd2luZG93IHRpdGxlLCB3aGVuIG5vdCBlbXB0eS4gICh2ZXJzaW9uIDUuMjoKKwkJdGhpcyBzdHJpbmcgaXMgdXNlZCBsaXRlcmFsbHksIGEgbmV3bGluZSBjYW4gYmUgdXNlZCB0byBtYWtlCisJCXR3byBsaW5lcykuCisKKyd2ZXJib3NlJwlMZXZlbCBvZiB2ZXJib3NpdHkuICBNYWtlcyBpdCBwb3NzaWJsZSB0byBzaG93IHdoaWNoIC52aW1yYywKKwkJLmV4cmMsIC52aW1pbmZvIGZpbGVzIGV0Yy4gYXJlIHVzZWQgZm9yIGluaXRpYWxpemluZy4gIEFsc28KKwkJdG8gc2hvdyBhdXRvY29tbWFuZHMgdGhhdCBhcmUgYmVpbmcgZXhlY3V0ZWQuICBDYW4gYWxzbyBiZSBzZXQKKwkJYnkgdXNpbmcgdGhlICItViIgY29tbWFuZC1saW5lIGFyZ3VtZW50LgorCisKK05ldyBjb21tYW5kLWxpbmUgYXJndW1lbnRzCQkJCSphZGRlZC1jbWRsaW5lLWFyZ3MqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit8LVV8CQlTZXQgdGhlIGd2aW1yYyBmaWxlIHRvIGJlIHVzZWQuICBMaWtlICItdSIgZm9yIHRoZSB2aW1yYy4KKworfC1WfAkJU2V0IHRoZSAndmVyYm9zZScgb3B0aW9uLiAgRS5nLiAidmltIC1WMTAiLgorCit8LU58CQlTdGFydCBpbiBub24tY29tcGF0aWJsZSBtb2RlLgorCit8LUN8CQlTdGFydCBpbiBjb21wYXRpYmxlIG1vZGUuCisKK3wtWnwJCVN0YXJ0IGluIHJlc3RyaWN0ZWQgbW9kZSwgZGlzYWxsb3cgc2hlbGwgY29tbWFuZHMuICBDYW4gYWxzbworCQliZSBkb25lIGJ5IGNhbGxpbmcgdGhlIGV4ZWN1dGFibGUgInJ2aW0iLgorCit8LWh8CQlTaG93IHVzYWdlIGluZm9ybWF0aW9uIGFuZCBleGl0LgorCisKK1ZhcmlvdXMgYWRkaXRpb25zCQkJCQkqYWRkZWQtdmFyaW91cyoKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIHN1cHBvcnQgZm9yIFNOaUZGKyBjb25uZWN0aW9uIChzdWJtaXR0ZWQgYnkgVG9uaSBMZWhlcmJhdWVyKS4gIFZpbSBjYW4KK2JlIHVzZWQgYXMgYW4gZWRpdG9yIGZvciBTTmlGRi4gIE5vIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlLi4uCisKK0ZvciBwcm9kdWNpbmcgYSBidWcgcmVwb3J0LCB0aGUgYnVncmVwb3J0LnZpbSBzY3JpcHQgaGFzIGJlZW4gaW5jbHVkZWQuCitDYW4gYmUgdXNlZCB3aXRoICI6c28gJFZJTVJVTlRJTUUvYnVncmVwb3J0LnZpbSIsIHdoaWNoIGNyZWF0ZXMgdGhlIGZpbGUKKyJidWdyZXBvcnQudHh0IiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIHxidWdzfAorCitBZGRlZCByYW5nZSB0byAiOm5vcm1hbCIgY29tbWFuZC4gIE5vdyB5b3UgY2FuIHJlcGVhdCB0aGUgc2FtZSBjb21tYW5kIGZvcgorZWFjaCBsaW5lIGluIHRoZSByYW5nZS4gIHw6bm9ybWFsLXJhbmdlfAorCitJbmNsdWRlZCBzdXBwb3J0IGZvciB0aGUgRmFyc2kgbGFuZ3VhZ2UgKFNoaXJhbikuICBPbmx5IHdoZW4gZW5hYmxlZCBhdAorY29tcGlsZSB0aW1lLiAgU2VlIHxmYXJzaXwuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCSBJTVBST1ZFTUVOVFMJCSppbXByb3ZlbWVudHMtNSoKKworUGVyZm9ybWFuY2U6CistIFdoZW4gJ3Nob3djbWQnIHdhcyBzZXQsIG1hcHBpbmdzIHdvdWxkIGV4ZWN1dGUgbXVjaCBtb3JlIHNsb3dseSBiZWNhdXNlIHRoZQorICBvdXRwdXQgd291bGQgYmUgZmx1c2hlZCB2ZXJ5IG9mdGVuLiAgSGVscHMgYSBsb3Qgd2hlbiBleGVjdXRpbmcgdGhlICJsaWZlIgorICBtYWNyb3Mgd2l0aCAnc2hvd2NtZCcgc2V0LgorLSBJbmNsdWRlZCBwYXRjaGVzIGZvciBiaW5hcnkgc2VhcmNoaW5nIGluIHRhZ3MgZmlsZSAoRGF2aWQgTydOZWlsbCkuCisgIENhbiBiZSBkaXNhYmxlZCBieSByZXNldHRpbmcgdGhlICd0YWdic2VhcmNoJyBvcHRpb24uCistIERvbid0IHVwZGF0ZSB0aGUgcnVsZXIgd2hlbiByZXBlYXRpbmcgaW5zZXJ0IChzbG93ZWQgaXQgZG93biBhIGxvdCkuCistIEZvciBVbml4LCBmaWxlIG5hbWUgZXhwYW5zaW9uIGlzIG5vdyBkb25lIGludGVybmFsbHkgaW5zdGVhZCBvZiBzdGFydGluZyBhCisgIHNoZWxsIGZvciBpdC4KKy0gRXhwYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIGV4cGFuZF9lbnYoKSwgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZQorICBzaGVsbC4gIE1ha2VzICI6c28gJFZJTVJVTlRJTUUvc3ludGF4L3N5bnRheC52aW0iIGEgTE9UIGZhc3Rlci4KKy0gUmVkdWNlZCBvdXRwdXQgZm9yIGN1cnNvciBwb3NpdGlvbmluZzogVXNlIENSLUxGIGZvciBtb3ZpbmcgdG8gZmlyc3QgZmV3CisgIGNvbHVtbnMgaW4gbmV4dCBmZXcgbGluZXM7ICBEb24ndCBvdXRwdXQgQ1IgdHdpY2Ugd2hlbiB1c2luZyB0ZXJtaW9zLgorLSBPcHRpbWl6ZWQgY3Vyc29yIHBvc2l0aW9uaW5nLiAgVXNlIENSLCBCUyBhbmQgTkwgd2hlbiBpdCdzIHNob3J0ZXIgdGhhbgorICBhYnNvbHV0ZSBjdXJzb3IgcG9zaXRpb25pbmcuCistIERpc2FibGUgcmVkcmF3aW5nIHdoaWxlIHJlcGVhdGluZyBpbnNlcnQgIjEwMDBpaTxFc2M+Ii4KKy0gTWFkZSAiZCQiIG9yICJEIiBmb3IgbG9uZyBsaW5lcyBhIGxvdCBmYXN0ZXIgKGRlbGV0ZSBhbGwgY2hhcmFjdGVycyBhdCBvbmNlLAorICBpbnN0ZWFkIG9mIG9uZSBieSBvbmUpLgorLSBBY2Nlc3Mgb3B0aW9uIHRhYmxlIGJ5IGZpcnN0IGxldHRlciwgaW5zdGVhZCBvZiBzZWFyY2hpbmcgZnJvbSBzdGFydC4KKy0gTWFkZSBzZXR0aW5nIHNwZWNpYWwgaGlnaGxpZ2h0aW5nIGF0dHJpYnV0ZXMgYSBsb3QgZmFzdGVyIGJ5IHVzaW5nCisgIGhpZ2hsaWdodF9hdHRyW10sIGluc3RlYWQgb2Ygc2VhcmNoaW5nIGluIHRoZSAnaGlnaGxpZ2h0JyBzdHJpbmcuCistIERvbid0IHNob3cgdGhlIG1vZGUgd2hlbiByZWRyYXdpbmcgaXMgZGlzYWJsZWQuCistIFdoZW4gc2V0dGluZyBhbiBvcHRpb24sIG9ubHkgcmVkcmF3IHRoZSBzY3JlZW4gd2hlbiByZXF1aXJlZC4KKy0gSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgRXggY29tbWFuZHMgYnkgdXNpbmcgYSBsb29rdXAgdGFibGUgZm9yIHRoZSBmaXJzdAorICBjaGFyYWN0ZXIuCisKK09wdGlvbnM6CisnY2lub3B0aW9ucycJQWRkZWQgJ2cnIGZsYWcsIGZvciBDKysgc2NvcGUgZGVjbGFyYXRpb25zLgorJ2Nwb3B0aW9ucycJQWRkZWQgJ0UnIGZsYWc6IERpc2FsbG93IHlhbmtpbmcsIGRlbGV0aW5nLCBldGMuIGVtcHR5IHRleHQKKwkJYXJlYS4gIERlZmF1bHQgaXMgdG8gYWxsb3cgZW1wdHkgeWFua3MuICBXaGVuICdFJyBpcyBpbmNsdWRlZCwKKwkJInkkIiBpbiBhbiBlbXB0eSBsaW5lIG5vdyBpcyBoYW5kbGVkIGFzIGFuIGVycm9yIChWaQorCQljb21wYXRpYmxlKS4KKwkJQWRkZWQgJ2onIGZsYWc6IE9ubHkgYWRkIHR3byBzcGFjZXMgZm9yIGEgam9pbiBhZnRlciBhICcuJywKKwkJbm90IGFmdGVyIGEgJz8nIG9yICchJy4KKwkJQWRkZWQgJ0EnIGZsYWc6IGRvbid0IGdpdmUgQVRURU5USU9OIG1lc3NhZ2UuCisJCUFkZGVkICdMJyBmbGFnOiBXaGVuIG5vdCBpbmNsdWRlZCwgYW5kICdsaXN0JyBpcyBzZXQsCisJCSd0ZXh0d2lkdGgnIGZvcm1hdHRpbmcgd29ya3MgbGlrZSAnbGlzdCcgaXMgbm90IHNldC4KKwkJQWRkZWQgJ1cnIGZsYWc6ICBMZXQgIjp3ISIgYmVoYXZlIGxpa2UgVmk6IGRvbid0IG92ZXJ3cml0ZQorCQlyZWFkb25seSBmaWxlcywgb3IgYSBmaWxlIG93bmVkIGJ5IHNvbWVvbmUgZWxzZS4KKydoaWdobGlnaHQnCUFkZGVkICdAJyBmbGFnLCBmb3IgJ0AnIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGxhc3QgbGluZSBvbiB0aGUKKwkJc2NyZWVuLCBhbmQgJyQnIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgd2hlbiAnbGlzdCcgaXMgc2V0LgorCQlBZGRlZCAnaScgZmxhZzogU2V0IGhpZ2hsaWdodGluZyBmb3IgJ2luY3NlYXJjaCcuICBEZWZhdWx0CisJCXVzZXMgIkluY1NlYXJjaCIgaGlnaGxpZ2h0IGdyb3VwLCB3aGljaCBpcyBsaW5rZWQgdG8gIlZpc3VhbCIuCisJCURpc2FsbG93ICdoJyBmbGFnIGluICdoaWdobGlnaHQnICh3YXNuJ3QgdXNlZCBhbnltb3JlIHNpbmNlCisJCTMuMCkuCisnZ3VpZm9udCcJV2luMzIgR1VJIG9ubHk6IFdoZW4gc2V0IHRvICIqIiBicmluZ3MgdXAgYSBmb250IHJlcXVlc3Rlci4KKydndWlwdHknCURlZmF1bHQgb24sIGJlY2F1c2Ugc28gbWFueSBwZW9wbGUgbmVlZCBpdC4KKydwYXRoJwkJQ2FuIGNvbnRhaW4gd2lsZGNhcmRzLCBhbmQgIioqIiBmb3Igc2VhcmNoaW5nIGEgd2hvbGUgdHJlZS4KKydzaG9ydG1lc3MnCUFkZGVkICdJJyBmbGFnIHRvIGF2b2lkIHRoZSBpbnRybyBtZXNzYWdlLgorJ3ZpbWluZm8nCUFkZGVkICclJyBmbGFnOiBTdG9yZSBidWZmZXIgbGlzdCBpbiB2aW1pbmZvIGZpbGUuCisKKy0gSW5jcmVhc2VkIGRlZmF1bHRzIGZvciAnbWF4bWVtJyBhbmQgJ21heG1lbXRvdCcgZm9yIFVuaXggYW5kIFdpbjMyLiAgTW9zdAorICBtYWNoaW5lcyBoYXZlIG11Y2ggbW9yZSBSQU0gbm93IHRoYXQgcHJpY2VzIGhhdmUgZHJvcHBlZC4KKy0gSW1wbGVtZW50ZWQgIjpzZXQgYWxsJiIsIHNldCBhbGwgb3B0aW9ucyB0byB0aGVpciBkZWZhdWx0IHZhbHVlLiB8OnNldHwKKworU3dhcCBmaWxlOgorLSBEb24ndCBjcmVhdGUgYSBzd2FwIGZpbGUgZm9yIGEgcmVhZG9ubHkgZmlsZS4gIFRoZW4gY3JlYXRlIG9uZSBvbiB0aGUgZmlyc3QKKyAgY2hhbmdlLiAgQWxzbyBjcmVhdGUgYSBzd2FwZmlsZSB3aGVuIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgaXMgZ2V0dGluZworICB0b28gaGlnaC4gfHN3YXAtZmlsZXwKKy0gTWFrZSBzd2FwIGZpbGUgImhpZGRlbiIsIGlmIHBvc3NpYmxlLiAgT24gVW5peCB0aGlzIGlzIGRvbmUgYnkgcHJlcGVuZGluZyBhCisgIGRvdCB0byB0aGUgc3dhcCBmaWxlIG5hbWUuICBXaGVuIGxvbmcgZmlsZSBuYW1lcyBhcmUgdXNlZCwgdGhlIERKR1BQIGFuZAorICBXaW4zMiB2ZXJzaW9ucyBhbHNvIHByZXBlbmQgYSBkb3QsIGluIGNhc2UgYSBmaWxlIG9uIGEgbW91bnRlZCBVbml4IGZpbGUKKyAgc3lzdGVtIGlzIGVkaXRlZC4gIHw6c3dhcG5hbWV8ICBPbiBNU0RPUyB0aGUgaGlkZGVuIGZpbGUgYXR0cmlidXRlIGlzIE5PVAorICBzZXQsIGJlY2F1c2UgdGhpcyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBzaGFyZS5leGUuCistICd1cGRhdGVjb3VudCcgYWx3YXlzIGRlZmF1bHRzIHRvIG5vbi16ZXJvLCBhbHNvIGZvciBWaSBjb21wYXRpYmxlIG1vZGUuCisgIFRoaXMgbWVhbnMgdGhlcmUgaXMgYSBzd2FwIGZpbGUsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZWNvdmVyeS4KKworVGFnczoKKy0gSW5jbHVkZWQgY3RhZ3MgMi4wIChEYXJyZW4gSGllYmVydCkuICBUaGUgc3ludGF4IGZvciBzdGF0aWMgdGFncyBjaGFuZ2VkCisgIGZyb20KKwl7dGFnfTp7Zm5hbWV9CXtmbmFtZX0Je2NvbW1hbmR9CisgIHRvCisJe3RhZ30Je2ZuYW1lfQl7Y29tbWFuZH07IglmaWxlOgorICBXaGljaCBpcyBib3RoIGZhc3RlciB0byBwYXJzZSwgc2hvcnRlciBhbmQgVmkgY29tcGF0aWJsZS4gIFRoZSBvbGQgZm9ybWF0IGlzCisgIGFsc28gc3RpbGwgYWNjZXB0ZWQsIHVubGVzcyBkaXNhYmxlZCBpbiBzcmMvZmVhdHVyZS5oIChzZWUgT0xEX1NUQVRJQ19UQUdTKS4KKyAgfHRhZ3MtZmlsZS1mb3JtYXR8CistIENvbXBsZXRpb24gb2YgdGFncyBub3cgYWxzbyBpbmNsdWRlcyBzdGF0aWMgdGFncyBmb3Igb3RoZXIgZmlsZXMsIGF0IHRoZQorICBlbmQuCistIEluY2x1ZGVkICJzaHRhZ3MiIGZyb20gU3RlcGhlbiBSaWVobS4KKy0gV2hlbiBmaW5kaW5nIGEgbWF0Y2hpbmcgdGFnLCBidXQgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgY29udGludWUgc2VhcmNoaW5nCisgIGZvciBhbm90aGVyIG1hdGNoLiAgSGVscHMgd2hlbiB1c2luZyB0aGUgc2FtZSB0YWdzIGZpbGUgKHdpdGggbGlua3MpIGZvcgorICBkaWZmZXJlbnQgdmVyc2lvbnMgb2Ygc291cmNlIGNvZGUuCistIEdpdmUgYSB0YWcgd2l0aCBhIGdsb2JhbCBtYXRjaCBpbiB0aGUgY3VycmVudCBmaWxlIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gYQorICBnbG9iYWwgbWF0Y2ggaW4gYW5vdGhlciBmaWxlLgorCitJbmNsdWRlZCB4eGQgdmVyc2lvbiBWMS44IChKdWVyZ2VuIFdlaWdlcnQpLgorCitBdXRvY29tbWFuZHM6CistIFZpbUxlYXZlIGF1dG9jb21tYW5kcyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgd3JpdGluZyB0aGUgdmltaW5mbyBmaWxlLCBpbnN0ZWFkCisgIG9mIGJlZm9yZS4gIHxWaW1MZWF2ZXwKKy0gQWxsb3cgY2hhbmdpbmcgYXV0b2NvbW1hbmRzIHdoaWxlIGV4ZWN1dGluZyB0aGVtLiAgVGhpcyBhbGxvd3MgZm9yCisgIHNlbGYtbW9kaWZ5aW5nIGF1dG9jb21tYW5kcy4gKGlkZWEgZnJvbSBHb2xkYmVyZykKKy0gV2hlbiB1c2luZyBhdXRvY29tbWFuZHMgd2l0aCB0d28gb3IgbW9yZSBwYXR0ZXJucywgY291bGQgbm90IHNwbGl0CisgICI6aWYvOmVuZGlmIiBvdmVyIHR3byBsaW5lcy4gIE5vdyBhbGwgbWF0Y2hpbmcgYXV0b2NvbW1hbmRzIGFyZSBleGVjdXRlZCBpbgorICBvbmUgZG9fY21kbGluZSgpLgorLSBBdXRvY29tbWFuZHMgbm8gbG9uZ2VyIGNoYW5nZSB0aGUgY29tbWFuZCByZXBlYXRlZCB3aXRoICIuIi4KKy0gU2VhcmNoIHBhdHRlcm5zIGFyZSByZXN0b3JlZCBhZnRlciBleGVjdXRpbmcgYXV0b2NvbW1hbmRzLiAgVGhpcyBhdm9pZHMKKyAgdGhhdCB0aGUgJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgaXMgbWVzc2VkIHVwIGJ5IGF1dG9jb21tYW5kcy4KKy0gV2hlbiB0cnlpbmcgdG8gZXhlY3V0ZSBhbiBhdXRvY29tbWFuZCwgYWxzbyB0cnkgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gd2l0aAorICB0aGUgc2hvcnQgZmlsZSBuYW1lLiAgSGVscHMgd2hlbiBzaG9ydCBmaWxlIG5hbWUgaXMgZGlmZmVyZW50IGZyb20gZnVsbAorICBmaWxlIG5hbWUgKGV4cGFuZGVkIHN5bWJvbGljIGxpbmtzKS4gfGF1dG9jbWQtcGF0dGVybnN8CistIE1hZGUgdGhlIG91dHB1dCBvZiAiOmF1dG9jbWQiIHNob3J0ZXIgYW5kIGxvb2sgYmV0dGVyLgorLSBFeHBhbmQgPHNmaWxlPiBpbiBhbiAiOmF1dG9jbWQiIHdoZW4gaXQgaXMgZGVmaW5lZC4gIHw8c2ZpbGU+fAorLSBBZGRlZCAibmVzdGVkIiBmbGFnIHRvICI6YXV0b2NtZCIsIGFsbG93cyBuZXN0aW5nLiAgfGF1dG9jbWQtbmVzdGVkfAorLSBBZGRlZCBbZ3JvdXBdIGFyZ3VtZW50IHRvICI6YXV0b2NtZCIuICBPdmVycmlkZXMgdGhlIGN1cnJlbnRseSBzZXQgZ3JvdXAuCisgIHxhdXRvY21kLWdyb3Vwc3wKKy0gbmV3IGV2ZW50czoKKyAgfEJ1ZlVubG9hZHwJCWJlZm9yZSBhIGJ1ZmZlciBpcyB1bmxvYWRlZAorICB8QnVmRGVsZXRlfAkJYmVmb3JlIGEgYnVmZmVyIGlzIGRlbGV0ZWQgZnJvbSB0aGUgYnVmZmVyIGxpc3QKKyAgfEZpbGVDaGFuZ2VkU2hlbGx8CXdoZW4gYSBmaWxlJ3MgbW9kaWZpY2F0aW9uIHRpbWUgaGFzIGNoYW5nZWQgYWZ0ZXIKKwkJCWV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQKKyAgfFVzZXJ8CQl1c2VyLWRlZmluZWQgYXV0b2NvbW1hbmQKKy0gV2hlbiAnbW9kaWZpZWQnIHdhcyBzZXQgYnkgYSBCdWZSZWFkKiBhdXRvY29tbWFuZCwgaXQgd2FzIHJlc2V0IGFnYWluCisgIGFmdGVyd2FyZHMuICBOb3cgdGhlICI6c2V0IG1vZGlmaWVkIiBpcyByZW1lbWJlcmVkLgorCitHVUk6CistIEltcHJvdmVkIEdVSSBzY3JvbGxiYXIgaGFuZGxpbmcgd2hlbiByZWRyYXdpbmcgaXMgc2xvd2VyIHRoYW4gdGhlIHNjcm9sbGJhcgorICBldmVudHMgYXJlIGdlbmVyYXRlZC4KKy0gInZpbSAtdSBOT05FIiBub3cgYWxzbyBzdG9wcyBsb2FkaW5nIHRoZSAuZ3ZpbXJjIGFuZCBvdGhlciBHVUkgaW5pdHMuICB8LXV8CisgIFVzZSAiLVUiIHRvIHVzZSBhbm90aGVyIGd2aW1yYyBmaWxlLiAgfC1VfAorLSBIYW5kbGUgQ1RSTC1DIGZvciBleHRlcm5hbCBjb21tYW5kLCBhbHNvIGZvciBzeXN0ZW1zIHdoZXJlICJzZXRzaWQoKSIgaXMKKyAgc3VwcG9ydGVkLgorLSBXaGVuIHN0YXJ0aW5nIHRoZSBHVUksIHJlc3RyaWN0IHRoZSB3aW5kb3cgc2l6ZSB0byB0aGUgc2NyZWVuIHNpemUuCistIFRoZSBkZWZhdWx0IG1lbnVzIGFyZSByZWFkIGZyb20gJFZJTVJVTlRJTUUvbWVudS52aW0uICBUaGlzIGFsbG93cyBmb3IgYQorICBjdXN0b21pemVkIGRlZmF1bHQgbWVudS4gIHxtZW51LnZpbXwKKy0gSW1wcm92ZWQgdGhlIGRlZmF1bHQgbWVudXMuICBBZGRlZCBGaWxlL1ByaW50LCBhIFdpbmRvdyBtZW51LCBTeW50YXggbWVudSwKKyAgZXRjLgorLSBBZGRlZCBwcmlvcml0eSB0byB0aGUgIjptZW51IiBjb21tYW5kLiAgTm93IGVhY2ggbWVudSBjYW4gYmUgcHV0IGluIGEgcGxhY2UKKyAgd2hlcmUgeW91IHdhbnQgaXQsIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgbWVudXMgYXJlIGRlZmluZWQuCisgIHxtZW51LXByaW9yaXR5fAorCitHaXZlIGEgd2FybmluZyBpbiB0aGUgaW50cm8gc2NyZWVuIHdoZW4gcnVubmluZyB0aGUgV2luMzIgY29uc29sZSB2ZXJzaW9uIG9uCitXaW5kb3dzIDk1IGJlY2F1c2UgdGhlcmUgYXJlIHByb2JsZW1zIHVzaW5nIHRoaXMgdmVyc2lvbiB1bmRlciBXaW5kb3dzIDk1LgorfHdpbjMyLXByb2JsZW1zfAorCitBZGRlZCAnZScgZmxhZyBmb3IgIjpzdWJzdGl0dXRlIiBjb21tYW5kOiBEb24ndCBjb21wbGFpbiB3aGVuIG5vdCBmaW5kaW5nIGEKK21hdGNoIChDYW1wYmVsbCkuICB8OnN8CisKK1doZW4gdXNpbmcgc2VhcmNoIGNvbW1hbmRzIGluIGEgbWFwcGluZywgb25seSB0aGUgbGFzdCBvbmUgaXMga2VwdCBpbiB0aGUKK2hpc3RvcnkuICBBdm9pZHMgdGhhdCB0aGUgaGlzdG9yeSBpcyB0cmFzaGVkIGJ5IGxvbmcgbWFwcGluZ3MuCisKK0lnbm9yZSBjaGFyYWN0ZXJzIGFmdGVyICJleCIsICJ2aWV3IiBhbmQgImd2aW0iIHdoZW4gY2hlY2tpbmcgc3RhcnR1cCBtb2RlLgorQWxsb3dzIHRoZSB1c2Ugb2YgImd2aW01IiBldC4gYWwuICB8Z3ZpbXwgImd2aWV3IiBzdGFydHMgdGhlIEdVSSBpbiByZWFkb25seQorbW9kZS4gIHxndmlld3wKKworV2hlbiByZXNpemluZyB3aW5kb3dzLCB0aGUgY3Vyc29yIGlzIGtlcHQgaW4gdGhlIHNhbWUgcmVsYXRpdmUgcG9zaXRpb24sIGlmCitwb3NzaWJsZS4gIChXZWJiKQorCisiOmFsbCIgYW5kICI6YmFsbCIgbm8gbG9uZ2VyIGNsb3NlIGFuZCB0aGVuIG9wZW4gYSB3aW5kb3cgZm9yIHRoZSBzYW1lIGJ1ZmZlci4KK0F2b2lkcyBsb3Npbmcgb3B0aW9ucywganVtcGxpc3QsIGFuZCBvdGhlciBpbmZvLgorCisiLWYiIGNvbW1hbmQtbGluZSBhcmd1bWVudCBpcyBub3cgaWdub3JlZCBpZiBWaW0gd2FzIGNvbXBpbGVkIHdpdGhvdXQgR1VJLgorfC1mfAorCitJbiBWaXN1YWwgYmxvY2sgbW9kZSwgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBwaWNrcyB1cCB0aGUgbmVhcmVzdCBjb3JuZXIuCisKK0NoYW5nZWQgZGVmYXVsdCBtYXBwaW5ncyBmb3IgRE9TIGV0IGFsLiAgUmVtb3ZlZCB0aGUgRE9TLXNwZWNpZmljIG1hcHBpbmdzLAorb25seSB1c2UgdGhlIFdpbmRvd3Mgb25lcy4gIEFkZGVkIFNoaWZ0LUluc2VydCwgQ3RybC1JbnNlcnQsIEN0cmwtRGVsIGFuZAorU2hpZnQtRGVsLgorCitDaGFuZ2VkIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQgb2YgIjpqdW1wcyIsIHNvIHlvdSBjYW4gc2VlIHdoZXJlIHtjb3VudH0KK0NUUkwtTyB0YWtlcyB5b3UuICB8Omp1bXBzfAorCitVc2luZyAifiIgZm9yICRIT01FIG5vdyB3b3JrcyBmb3IgYWxsIHN5c3RlbXMuICB8JEhPTUV8CisKK1VuaXg6IEJlc2lkZXMgdXNpbmcgQ1RSTC1DLCBhbHNvIHVzZSB0aGUgSU5UUiBjaGFyYWN0ZXIgZnJvbSB0aGUgdHR5IHNldHRpbmdzLgorU29tZWJvZHkgaGFzIElOVFIgc2V0IHRvIERFTC4KKworQWxsb3cgYSA8TEY+IGluIGEgIjpoZWxwIiBjb21tYW5kIGFyZ3VtZW50IHRvIGVuZCB0aGUgaGVscCBjb21tYW5kLCBzbyBhbm90aGVyCitjb21tYW5kIGNhbiBmb2xsb3cuCisKK0RvaW5nICIlIiBvbiBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiICAgI2lmIiBkaWRuJ3QganVtcCB0byBtYXRjaGluZyAiI2Vsc2UiLgorRG9uJ3QgcmVjb2duaXplICIjaWYiLCAiI2Vsc2UiIGV0Yy4gZm9yICclJyB3aGVuICdjcG8nIGNvbnRhaW5zIHRoZSAnJScgZmxhZy4KK3wlfAorCitJbnNlcnQgbW9kZSBleHBhbnNpb24gd2l0aCAiQ1RSTC1OIiwgIkNUUkwtUCIgYW5kICJDVFJMLVgiIGltcHJvdmVkCit8aW5zLWNvbXBsZXRpb258OgorLSAnY29tcGxldGUnIG9wdGlvbiBhZGRlZC4KKy0gV2hlbiAnbm93cmFwc2NhbicgaXMgc2V0LCBhbmQgbm8gbWF0Y2ggZm91bmQsIHJlcG9ydCB0aGUgc2VhcmNoZWQgZGlyZWN0aW9uCisgIGluIHRoZSBlcnJvciBtZXNzYWdlLgorLSBSZXBlYXRpbmcgQ1RSTC1YIGNvbW1hbmRzIGFkZHMgZm9sbG93aW5nIHdvcmRzL2xpbmVzIGFmdGVyIHRoZSBtYXRjaC4KKy0gV2hlbiBhZGRpbmctZXhwYW5zaW9ucywgYWNjZXB0IHNpbmdsZSBjaGFyYWN0ZXIgbWF0Y2hlcy4KKy0gTWFkZSByZXBlYXRlZCBDVFJMLVggQ1RSTC1OIG5vdCBicmVhayB1bmRvLCBhbmQgIi4iIHJlcGVhdHMgdGhlIHdob2xlCisgIGluc2VydGlvbi4gIEFsc28gZml4ZXMgbm90IGJlaW5nIGFibGUgdG8gYmFja3NwYWNlIG92ZXIgYSB3b3JkIHRoYXQgaGFzIGJlZW4KKyAgaW5zZXJ0ZWQgd2l0aCBDVFJMLU4uCisKK1doZW4gY29weWluZyBjaGFyYWN0ZXJzIGluIEluc2VydCBtb2RlIGZyb20gcHJldmlvdXMvbmV4dCBsaW5lLCB3aXRoIENUUkwtRSBvcgorQ1RSTC1ZLCAndGV4dHdpZHRoJyBpcyBubyBsb25nZXIgdXNlZC4gIHxpX0NUUkwtRXwKKworQ29tbWFuZHMgdGhhdCBtb3ZlIGluIHRoZSBhcmdsaXN0LCBsaWtlICI6biIgYW5kICI6cmV3Iiwga2VlcCB0aGUgb2xkIGN1cnNvcgorcG9zaXRpb24gb2YgdGhlIGZpbGUgKHRoaXMgaXMgbW9zdGx5IFZpIGNvbXBhdGlibGUpLgorCitWaW0gbm93IHJlbWVtYmVycyB0aGUgJzwgYW5kICc+IG1hcmtzIGZvciBlYWNoIGJ1ZmZlci4gIFRoaXMgZml4ZXMgYSBwcm9ibGVtCit0aGF0IGEgbGluZS1kZWxldGUgaW4gb25lIGJ1ZmZlciBpbnZhbGlkYXRlZCB0aGUgJzwgYW5kICc+IG1hcmtzIGluIGFub3RoZXIKK2J1ZmZlci4gIHwnPHwKKworRm9yIE1TRE9TLCBVbml4IGFuZCBPUy8yOiBXaGVuICRWSU0gbm90IHNldCwgdXNlIHRoZSBwYXRoIGZyb20gdGhlIGV4ZWN1dGFibGUuCitXaGVuIHVzaW5nIHRoZSBleGVjdXRhYmxlIHBhdGggZm9yICRWSU0sIHJlbW92ZSAic3JjLyIgd2hlbiBwcmVzZW50LiAgU2hvdWxkCittYWtlIFZpbSBmaW5kIHRoZSBkb2NzIGFuZCBzeW50YXggZmlsZXMgd2hlbiBpdCBpcyBydW4gZGlyZWN0bHkgYWZ0ZXIKK2NvbXBpbGluZy4gIHwkVklNfAorCitXaGVuIHF1aXR0aW5nIFZpc3VhbCBtb2RlIHdpdGggPEVzYz4sIHRoZSBjdXJzb3IgaXMgcHV0IGF0IHN0YXJ0IG9mIHRoZSBWaXN1YWwKK2FyZWEgKGxpa2UgYWZ0ZXIgZXhlY3V0aW5nIGFuIG9wZXJhdG9yKS4KKworV2luMzIgYW5kIFVuaXggdmVyc2lvbjogUmVtb3ZlZCAxMTAwIGNoYXJhY3RlciBsaW1pdCBvbiBleHRlcm5hbCBjb21tYW5kcy4KKworQWRkZWQgcG9zc2liaWxpdHkgdG8gaW5jbHVkZSBhIHNwYWNlIGluIGEgIjplZGl0ICtjb21tYW5kIiBhcmd1bWVudCwgYnkKK3B1dHRpbmcgYSBiYWNrc2xhc2ggYmVmb3JlIGl0LiAgfCtjbWR8CisKK0FmdGVyIHJlY292ZXJ5LCBCdWZSZWFkUG9zdCBhdXRvY29tbWFuZHMgYXJlIGFwcGxpZWQuICB8OnJlY292ZXJ8CisKK0FkZGVkIGNvbG9yIHN1cHBvcnQgZm9yICJvczJhbnNpIiwgT1MvMiBjb25zb2xlLiAoU2xvb3RtYW4pIHxvczJhbnNpfAorCitBbGxvdyAiJTpwOmgiIHdoZW4gJSBpcyBlbXB0eS4gIHw6XyV8CisKK0luY2x1ZGVkICI8c2ZpbGU+IjogZmlsZSBuYW1lIGZyb20gdGhlICI6c291cmNlIiBjb21tYW5kLiAgfDxzZmlsZT58CisKK0FkZGVkICI8QnNsYXNoPiIgc3BlY2lhbCBjaGFyYWN0ZXIuICBIZWxwcyBmb3IgYXZvaWRpbmcgbXVsdGlwbGUgYmFja3NsYXNoZXMKK2luIG1hcHBpbmdzIGFuZCBtZW51cy4KKworSW4gYSBoZWxwIHdpbmRvdywgYSBkb3VibGUtY2xpY2sganVtcHMgdG8gdGhlIHRhZyB1bmRlciB0aGUgY3Vyc29yIChsaWtlCitDVFJMLV0pLgorCis8Qy1MZWZ0PiBhbmQgPEMtUmlnaHQ+IG5vdyB3b3JrIGxpa2UgPFMtTGVmdD4gYW5kIDxTLVJpZ2h0PiwgbW92ZSBhIHdvcmQKK2ZvcndhcmQvYmFja3dhcmQgKFdpbmRvd3MgY29tcGF0aWJsZSkuIHw8Qy1MZWZ0PnwKKworUmVtb3ZlZCB0aGUgcmVxdWlyZW1lbnQgZm9yIGEgIjp2ZXJzaW9uIiBjb21tYW5kIGluIGEgLnZpbXJjIGZpbGUuICBJdCB3YXNuJ3QKK3VzZWQgZm9yIGFueXRoaW5nLiAgWW91IGNhbiB1c2UgIjppZiIgdG8gaGFuZGxlIGRpZmZlcmVuY2VzIGJldHdlZW4gdmVyc2lvbnMuCit8OnZlcnNpb258CisKK0ZvciBNUy1ET1MsIFdpbjMyIGFuZCBPUy8yOiBXaGVuIGNvbXBhcmluZyBmaWxlIG5hbWVzIGZvciBhdXRvY29tbWFuZHMsIGRvbid0CittYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuICcvJyBhbmQgJ1wnIGZvciBwYXRoIHNlcGFyYXRvci4KKworTmV3IHRlcm1jYXAgb3B0aW9uczoKKyJtYiI6IGJsaW5rLiAgQ2FuIG9ubHkgYmUgdXNlZCBieSBhc3NpZ25pbmcgaXQgdG8gb25lIG9mIHRoZSBvdGhlciBoaWdobGlnaHQKKyAgICAgIG9wdGlvbnMuICB8dF9tYnwKKyJiYyI6IGJhY2tzcGFjZSBjaGFyYWN0ZXIuICB8dF9iY3wKKyJuZCI6IFVzZWQgZm9yIG1vdmluZyB0aGUgY3Vyc29yIHJpZ2h0IGluIHRoZSBHVUksIHRvIGF2b2lkIHJlbW92aW5nIG9uZSBsaW5lCisgICAgICBvZiBwaXhlbHMgZnJvbSB0aGUgbGFzdCBib2xkIGNoYXJhY3Rlci4gIHx0X25kfAorInhzIjogaGlnaGxpZ2h0aW5nIG5vdCBlcmFzZWQgYnkgb3ZlcndyaXRpbmcsIGZvciBocHRlcm0uICBDb21iaW5lZCB3aXRoCisgICAgICAnd2VpcmRpbnZlcnQnLiAgVmlzdWFsIG1vZGUgd29ya3Mgb24gaHB0ZXJtIG5vdy4gIHx0X3hzfAorCitVbml4OiBTZXQgdGltZSBvZiBwYXRjaCBhbmQgYmFja3VwIGZpbGUgc2FtZSBhcyBvcmlnaW5hbCBmaWxlLiAgKEhpZWJlcnQpLgorCitBbWlnYTogSW4gUXVpY2tGaXggbW9kZSBubyBsb25nZXIgb3BlbnMgYW5vdGhlciB3aW5kb3cuICBTaGVsbCBjb21tYW5kcyBjYW4gYmUKK3VzZWQgbm93LgorCitBZGRlZCBkZWNtb3VzZSBwYXRjaGVzIGZyb20gRGF2aWQgQmluZXR0ZS4gIENhbiBub3cgdXNlIERlYyBhbmQgTmV0dGVybSBtb3VzZS4KK0J1dCBvbmx5IHdoZW4gZW5hYmxlZCBhdCBjb21waWxlIHRpbWUuCisKK0FkZGVkICcjJyByZWdpc3RlcjogQWx0ZXJuYXRlIGZpbGUgbmFtZSB8cXVvdGUjfC4gIERpc3BsYXkgJyMnIHJlZ2lzdGVyIHdpdGgKKyI6ZGlzIiBjb21tYW5kLiB8OmRpc3BsYXl8CisKK1JlbW92ZWQgJzonIGZyb20gJ2lzZm5hbWUnIGRlZmF1bHQgZm9yIFVuaXguICBDaGVjayBmb3IgIjovLyIgaW4gYSBmaWxlIG5hbWUKK2FueXdheS4gIEFsc28gY2hlY2sgZm9yICI6XFwiLCBmb3IgTVMtRE9TLgorCitBZGRlZCBjb3VudCB0byAiSyJleXdvcmQgY29tbWFuZCwgd2hlbiAna2V5d29yZHByZycgaXMgIm1hbiIsIGlzIGluc2VydGVkIGluCit0aGUgbWFuIGNvbW1hbmQuICAiMksiIHJlc3VsdHMgaW4gIiFtYW4gMiA8Y3dvcmQ+Ii4gIHxLfAorCitXaGVuIHVzaW5nICJnZiIgb24gYSByZWxhdGl2ZSBwYXRoIG5hbWUsIHJlbW92ZSAiLi4vIiBmcm9tIHRoZSBmaWxlIG5hbWUsIGxpa2UKK2l0J3MgZG9uZSBmb3IgZmlsZSBuYW1lcyBpbiB0aGUgdGFncyBmaWxlLiB8Z2Z8CisKK1doZW4gZmluaXNoaW5nIHJlY29yZGluZywgZG9uJ3QgbWFrZSB0aGUgcmVjb3JkZWQgcmVnaXN0ZXIgdGhlIGRlZmF1bHQgcHV0CityZWdpc3Rlci4KKworV2hlbiB1c2luZyAiISEiLCBkb24ndCBwdXQgIjo1LDUhIiBvbiB0aGUgY29tbWFuZC1saW5lLCBidXQgIjouISIuICBBbmQgc29tZQorb3RoZXIgZW5oYW5jZW1lbnRzIHRvIHJlcGxhY2UgdGhlIGxpbmUgbnVtYmVyIHdpdGggIi4iIG9yICIkIiB3aGVuIHBvc3NpYmxlLgorCitNU0RPUyBldCBhbC46IFJlbmFtZWQgJFZJTS92aW1pbmZvIHRvICRWSU0vX3ZpbWluZm8uICBJdCdzIG1vcmUgY29uc2lzdGVudDoKKy52aW1yYy9fdmltcmMgYW5kIC52aW1pbmZvL192aW1pbmZvCisKK0ZvciBzeXN0ZW1zIHdoZXJlIGNhc2UgZG9lc24ndCBtYXR0ZXIgaW4gZmlsZSBuYW1lcyAoTVNET1MsIEFtaWdhKSwgaWdub3JlCitjYXNlIHdoaWxlIHNvcnRpbmcgZmlsZSBuYW1lcy4gIEZvciBidWZmZXIgbmFtZXMgdG9vLgorCitXaGVuIHJlYWRpbmcgZnJvbSBzdGRpbiBkb2Vzbid0IHdvcmssIHJlYWQgZnJvbSBzdGRlcnIgKGhlbHBzIGZvciAiZm9vIHwgeGFyZ3MKK3ZpbSIpLgorCiszMiBiaXQgTVMtRE9TIHZlcnNpb246IFJlcGxhY2VkIGNzZHBtaTMgYnkgY3NkcG1pNC4KKworQ2hhbmdlZCA8Qy1MZWZ0PiBhbmQgPEMtUmlnaHQ+IHRvIHNraXAgYSBXT1JEIGluc3RlYWQgb2YgYSB3b3JkLgorCitXYXJuaW5nIGZvciBjaGFuZ2VkIG1vZGlmaWVkIHRpbWUgd2hlbiBvdmVyd3JpdGluZyBhIGZpbGUgbm93IGFsc28gd29ya3Mgb24KK290aGVyIHN5c3RlbXMgdGhhbiBVbml4LgorCitVbml4OiBDaGFuZ2VkIHRoZSBkZWZhdWx0cyBmb3IgY29uZmlndXJlIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBkZWZhdWx0cyBmb3IKK01ha2VmaWxlOiBpbmNsdWRlIEdVSSwgUGVybCwgYW5kIFB5dGhvbi4KKworU29tZSB2ZXJzaW9ucyBvZiBNb3RpZiByZXF1aXJlICItbFhwbSIuICBBZGRlZCBjaGVjayBmb3IgdGhpcyBpbiBjb25maWd1cmUuCisKK0Rvbid0IGFkZCAiLUwvdXNyL2xpYiIgdG8gdGhlIGxpbmsgbGluZSwgY2F1c2VzIHByb2JsZW1zIG9uIGEgZmV3IHN5c3RlbXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICAgICBDT01QSUxFIFRJTUUgQ0hBTkdFUwkqY29tcGlsZS1jaGFuZ2VzLTUqCisKK1doZW4gY29tcGlsaW5nLCBhbGxvdyBhIGNob2ljZSBmb3IgbWluaW1hbCwgbm9ybWFsIG9yIG1heGltYWwgZmVhdHVyZXMgaW4gYW4KK2Vhc3kgd2F5LCBieSBjaGFuZ2luZyBhIHNpbmdsZSBsaW5lIGluIHNyYy9mZWF0dXJlLmguCitUaGUgRE9TMTYgdmVyc2lvbiBoYXMgYmVlbiBjb21waWxlZCB3aXRoIG1pbmltYWwgZmVhdHVyZXMgdG8gYXZvaWQgcnVubmluZworb3V0IG9mIG1lbW9yeSB0b28gcXVpY2tseS4gfGRvczE2fAorVGhlIFdpbjMyLCBESkdQUCwgYW5kIE9TLzIgdmVyc2lvbnMgdXNlIG1heGltYWwgZmVhdHVyZXMsIGJlY2F1c2UgdGhleSBoYXZlCitlbm91Z2ggbWVtb3J5LgorVGhlIEFtaWdhIHZlcnNpb24gaXMgYXZhaWxhYmxlIHdpdGggbm9ybWFsIGFuZCBtYXhpbWFsIGZlYXR1cmVzLgorCitBZGRlZCAibWFrZSB0ZXN0IiB0byBVbml4IHZlcnNpb24gTWFrZWZpbGUuICBBbGxvd3MgZm9yIGEgcXVpY2sgY2hlY2sgaWYgbW9zdAorIm5vcm1hbCIgY29tbWFuZHMgd29yayBwcm9wZXJseS4gIEFsc28gdGVzdHMgYSBmZXcgc3BlY2lmaWMgY29tbWFuZHMuCisKK0FkZGVkIHNldGxvY2FsZSgpIHdpdGggY29kZXBhZ2Ugc3VwcG9ydCBmb3IgREpHUFAgdmVyc2lvbi4KKworYXV0b2NvbmY6CistIEFkZGVkIGF1dG9jb25mIGNoZWNrIGZvciAtbFhkbWNwLgorLSBJbmNsdWRlZCBjaGVjayBmb3IgLWxYbXUsIG5vIGxvbmdlciBuZWVkZWQgdG8gZWRpdCB0aGUgTWFrZWZpbGUgZm9yIHRoaXMuCistIFN3aXRjaGVkIHRvIGF1dG9jb25mIDIuMTIuCistIEFkZGVkIGNvbmZpZ3VyZSBjaGVjayBmb3IgPHBvbGwuaD4uICBTZWVtcyB0byBiZSBuZWVkZWQgd2hlbiBpbmNsdWRpbmcKKyAgUGVybCBvbiBMaW51eD8KKy0gdGVybWxpYiBpcyBub3cgY2hlY2tlZCBiZWZvcmUgdGVybWNhcC4KKy0gQWRkZWQgY29uZmlndXJlIGNoZWNrIGZvciBzdHJuY2FzZWNtcCgpLCBzdHJpY21wKCkgYW5kIHN0cm5pY21wKCkuICBBZGRlZAorICB2aW1fc3RyaWNtcCgpIGZvciB3aGVuIHRoZXJlJ3Mgbm8gbGlicmFyeSBmdW5jdGlvbiBmb3Igc3RyaWNtcCgpLgorLSBVc2UgImRhdGFkaXIiIGluIGNvbmZpZ3VyZSwgaW5zdGVhZCBvZiBvdXIgb3duIGNoZWNrIGZvciBIRUxQRElSLgorCitSZW1vdmVkICJtYWtlIHByb3RvIiBmcm9tIE1ha2VmaWxlLm1hbnguICBDb3VsZCBub3QgbWFrZSBpdCB3b3JrIHdpdGhvdXQgYSBsb3QKK29mICNpZmRlZnMuCisKK1JlbW92ZWQgInByb3RvLyIgZnJvbSBwYXRocyBpbiBwcm90by5oLiAgTmVlZGVkIGZvciB0aGUgTWFjIHBvcnQuCisKK0RyYXN0aWNhbGx5IGNoYW5nZWQgTWFrZWZpbGUubWludC4gIE5vdyBpdCBpbmNsdWRlcyB0aGUgVW5peCBNYWtlZmlsZS4KKworQWRkZWQgc3VwcG9ydCBmb3IgRG9zMTYgaW4gTWFrZWZpbGUuYjMyIChyZW5hbWVkIE1ha2VmaWxlLmIzMiB0byBNYWtlZmlsZS5ib3IpCisKK0FsbCBzb3VyY2UgZmlsZXMgYXJlIG5vdyBlZGl0ZWQgd2l0aCBhIHRhYnN0b3Agb2YgOCBpbnN0ZWFkIG9mIDQsIHdoaWNoIGlzCitiZXR0ZXIgd2hlbiBkZWJ1Z2dpbmcgYW5kIHVzaW5nIG90aGVyIHRvb2xzLiAgJ3NvZnR0YWJzdG9wJyBpcyBzZXQgdG8gNCwgdG8KK21ha2UgZWRpdGluZyBlYXNpZXIuCisKK1VuaXg6IEFkZGVkICJsaW5rLnNoIiBzY3JpcHQsIHdoaWNoIHJlbW92ZXMgYSBmZXcgdW5uZWNlc3NhcnkgbGlicmFyaWVzIGZyb20KK3RoZSBsaW5rIGNvbW1hbmQuCisKK0Rvbid0IHVzZSBIUFVYIGRpZ3JhcGhzIGJ5IGRlZmF1bHQsIGJ1dCBvbmx5IHdoZW4gSFBVWF9ESUdSQVBIUyBpcyBkZWZpbmVkLgorfGRpZ3JhcGhzLWRlZmF1bHR8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCSBCVUcgRklYRVMJCSpidWctZml4ZXMtNSoKKworTm90ZToJU29tZSBvZiB0aGVzZSBmaXhlcyBtYXkgb25seSBhcHBseSB0byB0ZXN0IHZlcnNpb25zIHdoaWNoIHdlcmUKKwljcmVhdGVkIGFmdGVyIHZlcnNpb24gNC42LCBidXQgYmVmb3JlIDUuMC4KKworCitXaGVuIGRvaW5nICI6YmRlbCIsIHRyeSBnb2luZyB0byB0aGUgbmV4dCBsb2FkZWQgYnVmZmVyLiAgRG9uJ3QgcmV3aW5kIHRvIHRoZQorc3RhcnQgb2YgdGhlIGJ1ZmZlciBsaXN0LgorCittY2hfaXNkaXIoKSBmb3IgVW5peCByZXR1cm5lZCBUUlVFIGZvciAiIiBvbiBzb21lIHN5c3RlbXMuCisKK1dpbjMyOiAnc2hlbGwnIHNldCB0byAibWtzbnQvc2guZXhlIiBicmVha3MgIjohIiBjb21tYW5kcy4gIERvbid0IHVzZQorYmFja3NsYXNoZXMgaW4gdGhlIHRlbXAgZmlsZSBuYW1lcy4KKworT24gbGludXgsIHdpdGggYSBGQVQgZmlsZSBzeXN0ZW0sIGNvdWxkIGdldCBzcHVyaW91cyAiZmlsZSB4eHggY2hhbmdlZCBzaW5jZQorZWRpdGluZyBzdGFydGVkIiBtZXNzYWdlcywgYmVjYXVzZSB0aGUgdGltZSBpcyByb3VuZGVkIG9mZiB0byB0d28gc2Vjb25kcwordW5leHBlY3RlZGx5LgorCitDcmFzaCBpbiBHVUksIHdoZW4gc2VsZWN0aW5nIGEgd29yZCAoZG91YmxlIGNsaWNrKSBhbmQgdGhlbiBleHRlbmQgdW50aWwgYW4KK2VtcHR5IGxpbmUuCisKK0ZvciBzeXN0ZW1zIHdoZXJlIGlzZGlnaXQoKSBjYW4ndCBoYW5kbGUgY2hhcmFjdGVycyA+IDI1NSwgZ2V0X251bWJlcigpIGNhdXNlZAorYSBjcmFzaCB3aGVuIG1vdmluZyB0aGUgbW91c2UgZHVyaW5nIHRoZSBwcm9tcHQgZm9yIHJlY292ZXJ5LgorCitJbiBJbnNlcnQgbW9kZSwgIkNUUkwtTyBQIiBsZWZ0IHRoZSBjdXJzb3Igb24gdGhlIGxhc3QgaW5zZXJ0ZWQgY2hhcmFjdGVyLgorTm93IHRoZSBjdXJzb3IgaXMgbGVmdCBhZnRlciB0aGUgbGFzdCBwdXR0ZWQgY2hhcmFjdGVyLgorCitXaGVuIHF1aWNrZml4IGZvdW5kIGFuIGVycm9yIHR5cGUgb3RoZXIgdGhhbiAnZScgb3IgJ3cnLCBpdCB3YXMgbmV2ZXIgcHJpbnRlZC4KKworQSBzZXR0aW5nIGZvciAnZXJyb3JmaWxlJyBpbiBhIC52aW1yYyBvdmVycnVsZWQgdGhlICItcSBlcnJvcmZpbGUiIGFyZ3VtZW50LgorCitTb21lIHN5c3RlbXMgY3JlYXRlIGEgZmlsZSB3aGVuIGdlbmVyYXRpbmcgYSB0ZW1wIGZpbGUgbmFtZS4gIEZpbHRlcmluZyB3b3VsZAordGhlbiBjcmVhdGUgYSBiYWNrdXAgZmlsZSBmb3IgdGhpcywgd2hpY2ggd2FzIG5ldmVyIGRlbGV0ZWQuICBOb3cgbm8gYmFja3VwCitmaWxlIGlzIG1hZGUgd2hlbiBmaWx0ZXJpbmcuCisKK3NpbXBsaWZ5X2ZpbGVuYW1lKCkgY291bGQgcmVtb3ZlIGEgIi4uIiBhZnRlciBhIGxpbmssIHJlc3VsdGluZyBpbiB0aGUgd3JvbmcKK2ZpbGUgbmFtZS4gIE1hZGUgc2ltcGxpZnlfZmlsZW5hbWUgYWxzbyB3b3JrIGZvciBNU0RPUy4gIERvbid0IHVzZSBpdCBmb3IKK0FtaWdhLCBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgIi4uLyIuCisKK290aGVyZmlsZSgpIHdhcyB1bnJlbGlhYmxlIHdoZW4gdXNpbmcgbGlua3MuICBDb3VsZCB0aGluayB0aGF0IHJlYWRpbmcvd3JpdGluZword2FzIGZvciBhIGRpZmZlcmVudCBmaWxlLCB3aGVuIGl0IHdhcyB0aGUgc2FtZS4KKworUGFzdGluZyB3aXRoIG1vdXNlIGluIFJlcGxhY2UgbW9kZSBkaWRuJ3QgcmVwbGFjZSBhbnl0aGluZy4KKworV2luZG93IGhlaWdodCBjb21wdXRlZCB3cm9uZyB3aGVuIHJlc2l6aW5nIGEgd2luZG93IHdpdGggYW4gYXV0b2NvbW1hbmQgKGNvdWxkCitjYXVzZSBhIGNyYXNoKS4KKworIjpzIWZvbyFiYXIhIiB3YXNuJ3QgcG9zc2libGUgKFZpIGNvbXBhdGlibGUpLgorCitkb19iYW5nKCkgZnJlZWQgbWVtb3J5IHR3aWNlIHdoZW4gY2FsbGVkIHJlY3Vyc2l2ZWx5LCBiZWNhdXNlIG9mIGF1dG9jb21tYW5kcworKHRlc3QxMSkuICBUaGFua3MgdG8gRWxlY3RyaWMgRmVuY2UhCisKKyJ2JGQiIG9uIGFuIGVtcHR5IGxpbmUgZGlkbid0IHJlbW92ZSB0aGUgIi0tIFZJU1VBTCAtLSIgbW9kZSBtZXNzYWdlIGZyb20gdGhlCitjb21tYW5kLWxpbmUsIGFuZCBpbnZlcnRlZCB0aGUgY3Vyc29yLgorCisiOm1rZXhyYyIgZGlkbid0IGNoZWNrIGZvciBmYWlsdXJlIHRvIG9wZW4gdGhlIGZpbGUsIGNhdXNpbmcgYSBjcmFzaC4KKyhGZWxkZXJob2ZmKS4KKworV2luMzIgbWNoX3dyaXRlKCkgd3JvdGUgcGFzdCBmaXhlZCBidWZmZXIsIGNhdXNpbmcgdGVybWluYWwga2V5cyBubyBsb25nZXIgdG8KK2JlIHJlY29nbml6ZWQuICBCb3RoIGNvbnNvbGUgYW5kIEdVSSB2ZXJzaW9uLgorCitBdGhlbmEgR1VJOiBDcmFzaCB3aGVuIHJlbW92aW5nIGEgbWVudSBpdGVtLiAgTm93IFZpbSBkb2Vzbid0IGNyYXNoLCBidXQgdGhlCityZXZlcnNpbmcgb2YgdGhlIG1lbnUgaXRlbSBpcyBzdGlsbCB3cm9uZy4KKworQWx3YXlzIHJlc2V0ICdsaXN0JyBvcHRpb24gZm9yIHRoZSBoZWxwIHdpbmRvdy4KKworV2hlbiAnc2Nyb2xsb2ZmJyBpcyBub24temVybywgYSAnc2hvd21hdGNoJyBjb3VsZCBjYXVzZSB0aGUgc2hvd24gbWF0Y2ggdG8gYmUKK2luIHRoZSB3cm9uZyBsaW5lIGFuZCB0aGUgd2luZG93IHRvIGJlIHNjcm9sbGVkIChBY2V2ZWRvKS4KKworQWZ0ZXIgIjpzZXQgYWxsJiIsICdsaW5lcycgYW5kICd0dHl0eXBlJyB3ZXJlIHN0aWxsIG5vbi1kZWZhdWx0LCBiZWNhdXNlIHRoZQorZGVmYXVsdHMgbmV2ZXIgZ290IHNldC4gIE5vdyB0aGUgZGVmYXVsdHMgZm9yICdsaW5lcycgYW5kICdjb2x1bW5zJyBhcmUgc2V0CithZnRlciBkZXRlY3RpbmcgdGhlIHdpbmRvdyBzaXplLiAndGVybScgYW5kICd0dHl0eXBlJyBkZWZhdWx0cyBhcmUgc2V0IHdoZW4KK2RldGVjdGluZyB0aGUgdGVybWluYWwgdHlwZS4KKworRm9yIChtb3N0KSBub24tVW5peCBzeXN0ZW1zLCBkb24ndCBhZGQgZmlsZSBuYW1lcyB3aXRoIGlsbGVnYWwgY2hhcmFjdGVycyB3aGVuCitleHBhbmRpbmcuICBGaXhlcyAiY2Fubm90IG9wZW4gc3dhcGZpbGUiIGVycm9yIHdoZW4gZG9pbmcgIjplICouYnVycCIsIHdoZW4KK3RoZXJlIGlzIG5vIG1hdGNoLgorCitJbiBYMTEgR1VJLCBkcmF3aW5nIHBhcnQgb2YgdGhlIGN1cnNvciBvYnNjdXJlZCB0aGUgdGV4dC4gIE5vdyB0aGUgdGV4dCBpcworZHJhd24gb3ZlciB0aGUgY3Vyc29yLCBsaWtlIHdoZW4gaXQgZmlsbHMgdGhlIGJsb2NrLiAoU2VpYmVydCkKKword2hlbiBzdGFydGVkIHdpdGggIi1jIGNtZCAtcSBlcnJmaWxlIiwgdGhlIGN1cnNvciB3b3VsZCBiZSBsZWZ0IGluIGxpbmUgMS4KK05vdyBhICI6Y2MiIGlzIGRvbmUgYWZ0ZXIgZXhlY3V0aW5nICJjbWQiLgorCisiOmlsaXN0IiBuZXZlciBpZ25vcmVkIGNhc2UsIGV2ZW4gd2hlbiAnaWdub3JlY2FzZScgc2V0LgorCisidmltIC1yIGZpbGUiIGZvciBhIHJlYWRvbmx5IGZpbGUsIHRoZW4gbWFraW5nIGEgY2hhbmdlLCBnb3QgQVRURU5USU9OIG1lc3NhZ2UKK2luIGluc2VydCBtb2RlLCBkaXNwbGF5IG1peGVkIHVwIHVudGlsIDxFc2M+IHR5cGVkLiAgQWxzbyBkb24ndCBnaXZlIEFUVEVOVElPTgorbWVzc2FnZSBhZnRlciByZWNvdmVyaW5nIGEgZmlsZS4KKworVGhlIGFiYnJldmlhdGlvbiAiOmFiICNpICNpbmNsdWRlIiBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KKworQ1RSTC1MIGNvbXBsZXRpb24gKGxvbmdlc3QgY29tbW9uIG1hdGNoKSBvbiBjb21tYW5kLWxpbmUgZGlkbid0IHdvcmsgcHJvcGVybHkKK2ZvciBjYXNlLWluc2Vuc2l0aXZlIHN5c3RlbXMgKE1TLURPUywgV2luZG93cywgZXRjLikuICAoc3VnZ2VzdGVkIGJ5IFJpY2hhcmQKK0tpbGdvcmUpLgorCitGb3IgdGVybWluYWxzIHRoYXQgY2FuIGhpZGUgdGhlIGN1cnNvciAoInZpIiB0ZXJtY2FwIGVudHJ5KSwgcmVzaXppbmcgdGhlCit3aW5kb3cgY2F1c2VkIHRoZSBjdXJzb3IgdG8gZGlzYXBwZWFyLgorCitVc2luZyBhbiBpbnZhbGlkIG1hcmsgaW4gYW4gRXggYWRkcmVzcyBkaWRuJ3QgYWJvcnQgdGhlIGNvbW1hbmQuCisKK1doZW4gJ3NtYXJ0dGFiJyBzZXQsIHdvdWxkIHVzZSAnc2hpZnRyb3VuZCcgd2hlbiBpbnNlcnRpbmcgYSBUQUIgYWZ0ZXIgYQorc3BhY2UuICBOb3cgaXQgYWx3YXlzIHJvdW5kcyB0byBhIHRhYnN0b3AuCisKK1NldCAnWyBhbmQgJ10gbWFya3MgZm9yICI6Y29weSIsICI6bW92ZSIsICI6YXBwZW5kIiwgIjppbnNlcnQiLCAiOnN1YnN0aXR1dGUiCithbmQgIjpjaGFuZ2UiLiAgKEFjZXZlZG8pLgorCisiZCQiIGluIGFuIGVtcHR5IGxpbmUgc3RpbGwgY2F1c2VkIGFuIGVycm9yLCBldmVuIHdoZW4gJ0UnIGlzIG5vdCBpbgorJ2Nwb3B0aW9ucycuCisKK0hlbHAgZmlsZXMgd2VyZSBzdG9yZWQgaW4gdGhlIHZpbWluZm8gYnVmZmVyIGxpc3Qgd2l0aG91dCBhIHBhdGguCisKK0dVSTogRGlzcGxheWluZyBjdXJzb3Igd2FzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aCBvdGhlciBkaXNwbGF5aW5nLiAgQ2F1c2VkCitzZXZlcmFsIGRpc3BsYXkgZXJyb3JzLiAgRm9yIGV4YW1wbGUsIHdoZW4gdGhlIGxhc3QgdHdvIGxpbmVzIGluIHRoZSBmaWxlCitzdGFydCB3aXRoIHNwYWNlcywgImRkIiBvbiB0aGUgbGFzdCBsaW5lIGNvcGllZCB0ZXh0IHRvIHRoZSAodGhlbikgbGFzdCBsaW5lLgorCitXaW4zMjogTmVlZGVkIHRvIHR5cGUgQ1RSTC1TSElGVC0tIHRvIGdldCBDVFJMLV8uCisKK0dVSTogTW92aW5nIHRoZSBjdXJzb3IgZm9yd2FyZHMgb3ZlciBib2xkIHRleHQgd291bGQgcmVtb3ZlIG9uZSBjb2x1bW4gb2YgYm9sZAorcGl4ZWxzLgorCitYMTEgR1VJOiBXaGVuIGEgYm9sZCBjaGFyYWN0ZXIgaW4gdGhlIGxhc3QgY29sdW1uIHdhcyBzY3JvbGxlZCB1cCBvciBkb3duLCBvbmUKK2NvbHVtbiBvZiBwaXhlbHMgd291bGQgbm90IGJlIGNvcGllZC4KKworVXNpbmcgPEJTPiB0byBtb3ZlIHRoZSBjdXJzb3IgbGVmdCBjYW4gc29tZXRpbWVzIGVyYXNlIGEgY2hhcmFjdGVyLiAgTm93IHVzZQorImxlIiB0ZXJtY2FwIGVudHJ5IGZvciB0aGlzLgorCitLZXl3b3JkIGNvbXBsZXRpb24gd2l0aCByZWdleHAgZGlkbid0IHdvcmsuICBlLmcuLCBmb3IgImIuKmNyYXQiLgorCitGaXhlZDogV2l0aCBDVFJMLU8gdGhhdCBqdW1wcyB0byBhbm90aGVyIGZpbGUsIGN1cnNvciBjb3VsZCBlbmQgdXAganVzdCBhZnRlcgordGhlIGxpbmUuCisKK0FtaWdhOiAnJCcgd2FzIG1pc3NpbmcgZnJvbSBjaGFyYWN0ZXIgcmVjb2duaXplZCBhcyB3aWxkY2FyZHMsIGNhdXNpbmcgJFZJTQorc29tZXRpbWVzIG5vdCB0byBiZSBleHBhbmRlZC4KKworIjpjaGFuZ2UiIGRpZG4ndCBhZGp1c3QgbWFya3MgZm9yIGRlbGV0ZWQgbGluZXMuCisKKyI6aGVscCBbcmFuZ2VdIiBkaWRuJ3Qgd29yay4gIEFsc28gZm9yIFtwYXR0ZXJuXSwgW2NvdW50XSBhbmQgW3F1b3RleF0uCisKK0ZvciAnY2luZGVudCdpbmcsIHR5cGluZyAiY2xhc3M6Om1ldGhvZCIgZG9lc24ndCBhbGlnbiBsaWtlIGEgbGFiZWwgd2hlbiB0aGUKK3NlY29uZCAnOicgaXMgdHlwZWQuCitXaGVuIGluc2VydGluZyBhIENSIHdpdGggJ2NpbmRlbnQnIHNldCAoYW5kIGEgYnVuY2ggb2Ygb3RoZXIgY29uZGl0aW9ucykgdGhlCitjdXJzb3Igd2VudCB0byBhIHdyb25nIGxvY2F0aW9uLgorJ2NpbmRlbnQnIHdhcyB3cm9uZyBmb3IgYSBsaW5lIHRoYXQgZW5kcyBpbiAnfScuCisnY2luZGVudCcgd2FzIHdyb25nIGFmdGVyICJlbHNlIHsiLgorCitXaGlsZSBlZGl0aW5nIHRoZSBjbWRsaW5lIGluIHRoZSBHVUksIGNvdWxkIG5vdCB1c2UgdGhlIG1vdXNlIHRvIHNlbGVjdCB0ZXh0Citmcm9tIHRoZSBjb21tYW5kLWxpbmUgaXRzZWxmLgorCitXaGVuIGRlbGV0aW5nIGxpbmVzLCBtYXJrcyBpbiB0YWcgc3RhY2sgd2VyZSBvbmx5IGFkanVzdGVkIGZvciB0aGUgY3VycmVudAord2luZG93LCBub3QgZm9yIG90aGVyIHdpbmRvd3Mgb24gdGhlIHNhbWUgYnVmZmVyLgorCitUYWcgZ3Vlc3NpbmcgY291bGQgZmluZCBhIGZ1bmN0aW9uICJzb21lX2Z1bmMiIGluc3RlYWQgb2YgdGhlICJmdW5jIiB3ZSB3ZXJlCitsb29raW5nIGZvci4KKworVGFncyBmaWxlIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZmlsZSBkaWRuJ3Qgd29yay4KKworIjpnL3BhdDIvcy8vcGF0Mi9nIiwgY2F1c2luZyB0aGUgbnVtYmVyIG9mIHN1YnMgdG8gYmUgcmVwb3J0ZWQsIHVzZWQgdG8gY2F1c2UKK2Egc2Nyb2xsIHVwLiAgTm93IHlvdSBubyBsb25nZXIgaGF2ZSB0byBoaXQgPENSPi4KKworWDExIEdVSTogU2VsZWN0aW5nIHRleHQgY291bGQgY2F1c2UgYSBjcmFzaC4KKworMzIgYml0IERPUyB2ZXJzaW9uOiBDVFJMLUMgaW4gZXh0ZXJuYWwgY29tbWFuZCBraWxsZWQgVmltLiAgV2hlbiBTSEVMTCBpcyBzZXQKK3RvICJzaC5leGUiLCBleHRlcm5hbCBjb21tYW5kcyBkaWRuJ3Qgd29yay4gIFJlbW92ZWQgdXNpbmcgb2YgY29tbWFuZC5jb20sIG5vCitsb25nZXIgbmVlZCB0byBzZXQgJ3NoZWxscXVvdGUnLgorCitGaXhlZCBjcmFzaCB3aGVuIHVzaW5nICI6Zy9wYXQvaSIuCisKK0ZpeGVkIChwb3RlbnRpYWwpIGNyYXNoIGZvciBYMTEgR1VJLCB3aGVuIHVzaW5nIGFuIFggc2VsZWN0aW9uLiAgV2FzIGdpdmluZyBhCitwb2ludGVyIG9uIHRoZSBzdGFjayB0byBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBub3cgaXQncyBzdGF0aWMuCisKK1VzaW5nICIjIiBhbmQgIioiIHdpdGggYW4gb3BlcmF0b3IgZGlkbid0IHdvcmsuICBFLmcuICJjIyIuCisKK0NvbW1hbmQtbGluZSBleHBhbnNpb24gZGlkbid0IHdvcmsgcHJvcGVybHkgYWZ0ZXIgIjoqIi4gKEFjZXZlZG8pCisKK1NldHRpbmcgJ3dlaXJkaW52ZXJ0JyBjYXVzZWQgaGlnaGxpZ2h0aW5nIHRvIGJlIHdyb25nIGluIHRoZSBHVUkuCisKKyI6ZSArNCAjIiBkaWRuJ3Qgd29yaywgYmVjYXVzZSB0aGUgIjQiIHdhcyBpbiB1bmFsbG9jYXRlZCBtZW1vcnkgKGNvdWxkIGNhdXNlCithIGNyYXNoKS4KKworQ3Vyc29yIHBvc2l0aW9uIHdhcyB3cm9uZyBmb3IgIjplICMiLCBhZnRlciAiOmUgIyIgZmFpbGVkLCBiZWNhdXNlIG9mIGNoYW5nZXMKK3RvIHRoZSBidWZmZXIuCisKK1doZW4gZG9pbmcgIjpidWYgTiIsIGdvaW5nIHRvIGEgYnVmZmVyIHRoYXQgd2FzIGVkaXRlZCB3aXRoICI6dmlldyIsIHRoZQorcmVhZG9ubHkgZmxhZyB3YXMgcmVzZXQuICBOb3cgbWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiAiOmUgZmlsZSIgYW5kICI6YnVmCitmaWxlIjogT25seSBzZXQvcmVzZXQgJ3JvJyBmb3IgdGhlIGZpcnN0IG9uZS4KKworQXZvaWQgfGhpdC1lbnRlcnwgcHJvbXB0IHdoZW4gbm90IGFibGUgdG8gd3JpdGUgdmltaW5mbyBvbiBleGl0LgorCitXaGVuIGdpdmluZyBlcnJvciBtZXNzYWdlcyBpbiB0aGUgdGVybWluYWwgd2hlcmUgdGhlIEdVSSB3YXMgc3RhcnRlZCwgR1VJCitlc2NhcGUgY29kZXMgd291bGQgYmUgd3JpdHRlbiB0byB0aGUgdGVybWluYWwuICBJbiBhbiB4dGVybSB0aGlzIGNvdWxkIGJlIHNlZW4KK2FzIGEgJyQnIGFmdGVyIHRoZSBtZXNzYWdlLgorCitNb3VzZSB3b3VsZCBub3Qgd29yayBkaXJlY3RseSBhZnRlciAiOmd1aSIsIGJlY2F1c2UgZnVsbF9zY3JlZW4gaXNuJ3Qgc2V0LAord2hpY2ggY2F1c2VzIHN0YXJ0dGVybWNhcCgpIG5vdCB0byBkbyBpdHMgd29yay4KKworJ2luY3NlYXJjaCcgZGlkIG5vdCBzY3JvbGwgdGhlIHdpbmRvdyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGFjdHVhbCBzZWFyY2guCitXaGVuICdub3dyYXAnIHNldCwgaW5jc2VhcmNoIGRpZG4ndCBzaG93IGEgbWF0Y2ggd2hlbiBpdCB3YXMgb2ZmIHRoZSBzaWRlIG9mCit0aGUgc2NyZWVuLiAgTm93IGl0IGFsc28gc2hvd3MgdGhlIHdob2xlIG1hdGNoLCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGN1cnNvcgorcG9zaXRpb24gKGlmIHBvc3NpYmxlKS4KKworIjp1bm1hcCIsICI6dW5hYiIgYW5kICI6dW5tZW51IiBkaWQgbm90IGFjY2VwdCBhIGRvdWJsZSBxdW90ZSwgaXQgd2FzIHNlZW4gYXMKK3RoZSBzdGFydCBvZiBhIGNvbW1lbnQuICBOb3cgaXQncyBWaSBjb21wYXRpYmxlLgorCitVc2luZyA8VXA+PExlZnQ+PExlZnQ+PFVwPiBpbiB0aGUgY29tbWFuZC1saW5lLCB3aGVuIHRoZXJlIGlzIG5vIHByZXZpb3VzCitjbWRsaW5lIGluIHRoZSBoaXN0b3J5LCBpbnNlcnRlZCBhIE5VTCBvbiB0aGUgY29tbWFuZC1saW5lLgorCisiaTxFc2M+IiB3aGVuIG9uIGEgPFRhYj4gaW4gY29sdW1uIDAgbGVmdCB0aGUgY3Vyc29yIGluIHRoZSB3cm9uZyBwbGFjZS4KKworR1VJIE1vdGlmOiBXaGVuIGFkZGluZyBhIGxvdCBvZiBtZW51IGl0ZW1zLCB0aGUgbWVudSBiYXIgZ29lcyBpbnRvIHR3byByb3dzLgorRGVsZXRpbmcgbWVudSBpdGVtcywgcmVkdWNpbmcgdGhlIG51bWJlciBvZiByb3dzLCBub3cgYWxzbyB3b3Jrcy4KKworV2l0aCAiOmcvcGF0L3MvL2Zvby9jIiwgYSBtYXRjaCBpbiB0aGUgZmlyc3QgbGluZSB3YXMgc2Nyb2xsZWQgb2ZmIG9mIHRoZQorc2NyZWVuLCBzbyB5b3UgY291bGQgbm90IHNlZSBpdC4KK1doZW4gdXNpbmcgIjpzLy9jIiwgd2l0aCAnbm93cmFwJyBzZXQsIGEgbWF0Y2ggY291bGQgYmUgb2ZmIHRoZSBzaWRlIG9mIHRoZQorc2NyZWVuLCBzbyB5b3UgY291bGQgbm90IHNlZSBpdC4KKworV2hlbiAnaGVscGZpbGUnIHdhcyBzZXQgdG8gYSBmaXhlZCwgbm9uLWFic29sdXRlIHBhdGggaW4gZmVhdHVyZS5oLCBWaW0gd291bGQKK2NyYXNoLiAgbWNoX0Z1bGxuYW1lIGNhbiBub3cgaGFuZGxlIGZpbGUgbmFtZXMgaW4gcmVhZC1vbmx5IG1lbW9yeS4gKExvdHRlbSkKKworV2hlbiB1c2luZyBDVFJMLUEgb3IgQ1RSTC1AIGluIEluc2VydCBtb2RlLCB0aGVyZSBjb3VsZCBiZSBzdHJhbmdlIGVmZmVjdHMKK3doZW4gdXNpbmcgQ1RSTC1EIG5leHQuICBBbHNvLCB3aGVuIHJlcGVhdGluZyBpbnNlcnRlZCB0ZXh0IHRoYXQgaW5jbHVkZWQgIjAKK0NUUkwtRCIgb3IgIl4gQ1RSTC1EIiB0aGlzIGRpZG4ndCB3b3JrLiAoQWNldmVkbykKK1VzaW5nIENUUkwtRCBhZnRlciB1c2luZyBDVFJMLUUgb3IgQ1RSTC1ZIGluIEluc2VydCBtb2RlIHRoYXQgaW5zZXJ0ZWQgYSAnMCcKK29yICdeJywgcmVtb3ZlZCB0aGUgJzAnIG9yICdeJyBhbmQgbW9yZSBpbmRlbnQuCisKK1RoZSBjb21tYW5kICIyIi5wIiBjYXVzZWQgdGhlIGxhc3QgaW5zZXJ0ZWQgdGV4dCB0byBiZSBleGVjdXRlZCBhcyBjb21tYW5kcy4KKyhBY2V2ZWRvKQorCitSZXBlYXRpbmcgdGhlIGluc2VydCBvZiAiQ1RSTC1WIDA0OCIgcmVzdWx0ZWQgaW4gIl5AIiB0byBiZSBpbnNlcnRlZC4KKworUmVwZWF0aW5nIEluc2VydCBjb21wbGV0aW9uIGNvdWxkIGZhaWwgaWYgdGhlcmUgYXJlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKK3RleHQuIChBY2V2ZWRvKQorCisiOm5vcm1hbCAvc3RyaW5nPENSPiIgY2F1c2VkIHRoZSB3aW5kb3cgdG8gc2Nyb2xsLiAgTm93IGFsbCAiOm5vcm1hbCIgY29tbWFuZHMKK2FyZSBleGVjdXRlZCB3aXRob3V0IHNjcm9sbGluZyBtZXNzYWdlcy4KKworUmVkbyBvZiBDVFJMLUUgb3IgQ1RSTC1ZIGluIEluc2VydCBtb2RlIGludGVycHJldGVkIHNwZWNpYWwgY2hhcmFjdGVycyBhcworY29tbWFuZHMuCisKK0xpbmUgd3JhcHBpbmcgZm9yICd0dycgd2FzIGRvbmUgb25lIGNoYXJhY3RlciBvZmYgZm9yIGluc2VydCBleHBhbnNpb24KK2luc2VydHMuCisKK2J1ZmZlcl9leGlzdHMoKSBmdW5jdGlvbiBkaWRuJ3Qgd29yayBwcm9wZXJseSBmb3IgYnVmZmVyIG5hbWVzIHdpdGggYSBzeW1ib2xpYworbGluayBpbiB0aGVtIChlLmcuIHdoZW4gdXNpbmcgYnVmZmVyX2V4aXN0cygjKSkuCisKK1JlbW92ZWQgdGhlICJNT1RJRl9DT01NRU5UIiBjb25zdHJ1Y3Rpb24gZnJvbSBNYWtlZmlsZS4gIEl0IG5vdyB3b3JrcyB3aXRoCitGcmVlQlNEIG1ha2UsIGFuZCBwcm9iYWJseSB3aXRoIE5lWFQgbWFrZSB0b28uCisKK01hdGNoaW5nIHRoZSAnZGVmaW5lJyBhbmQgJ2luY2x1ZGUnIGFyZ3VtZW50cyBub3cgaG9ub3IgdGhlIHNldHRpbmdzIGZvcgorJ2lnbm9yZWNhc2UnLiAoQWNldmVkbykKKworV2hlbiBvbmUgZmlsZSBzaG93biBpbiB0d28gd2luZG93cywgVmlzdWFsIHNlbGVjdGlvbiBtaXhlZCB1cCBjdXJzb3IgcG9zaXRpb24KK2luIGN1cnJlbnQgd2luZG93IGFuZCBvdGhlciB3aW5kb3cuCisKK1doZW4gZG9pbmcgIjplIGZpbGUiIGZyb20gYSBoZWxwIGZpbGUsIHRoZSAnaXNrJyBvcHRpb24gd2Fzbid0IHJlc2V0IHByb3Blcmx5LAorYmVjYXVzZSBvZiBhIG1vZGVsaW5lIGluIHRoZSBoZWxwIGZpbGUuCisKK1doZW4gZG9pbmcgIjplISIsIGEgY3Vyc29yIGluIGFub3RoZXIgd2luZG93IG9uIHRoZSBzYW1lIGJ1ZmZlciBjb3VsZCBiZWNvbWUKK2ludmFsaWQsIGxlYWRpbmcgdG8gIm1sX2dldDogaW52YWxpZCBsbnVtIiBlcnJvcnMuCisKK01hdGNoaW5nIGJ1ZmZlciBuYW1lIGZvciB3aGVuIGV4cGFuZGVkIG5hbWUgaGFzIGEgZGlmZmVyZW50IHBhdGggZnJvbSBub3QKK2V4cGFuZGVkIG5hbWUgKEJydWduYXJhKS4KKworTm9ybWFsIG1hcHBpbmdzIGRpZG4ndCB3b3JrIGFmdGVyIGFuIG9wZXJhdG9yLiAgRm9yIGV4YW1wbGUsIHdpdGggIjptYXAgUSBncSIsCisiUVEiIGRpZG4ndCB3b3JrLgorCitXaGVuICI6bWFrZSIgcmVzdWx0ZWQgaW4gemVybyBlcnJvcnMsIGEgIk5vIEVycm9ycyIgZXJyb3IgbWVzc2FnZSB3YXMgZ2l2ZW4KKyh3aGljaCBicmVha3MgbWFwcGluZ3MpLgorCitXaGVuICI6c291cmNpbmciIGEgZmlsZSwgbGluZSBsZW5ndGggd2FzIGxpbWl0ZWQgdG8gMTAyNCBjaGFyYWN0ZXJzLiAgQ1RSTC1WCitiZWZvcmUgPEVPTD4gd2FzIG5vdCBoYW5kbGVkIFZpIGNvbXBhdGlibGUuICAoQWNldmVkbykKKworVW5leHBlY3RlZCBleGl0IGZvciBYMTEgR1VJLCBjYXVzZWQgYnkgU0FWRV9ZT1VSU0VMRiBldmVudC4gIChIZWltYW5uKQorCitDVFJMLVggQ1RSTC1JIG9ubHkgZm91bmQgb25lIG1hdGNoIHBlciBsaW5lLiAoQWNldmVkbykKK1doZW4gdXNpbmcgYW4gaWxsZWdhbCBDVFJMLVgga2V5IGluIEluc2VydCBtb2RlLCB0aGUgQ1RSTC1YIG1vZGUgbWVzc2FnZQord2FzIHN0dWNrLgorCitGaW5hbGx5IG1hbmFnZWQgdG8gaWdub3JlIHRoZSAiUXVpdCIgbWVudSBlbnRyeSBvZiB0aGUgV2luZG93IG1hbmFnZXIhICBOb3cKK1ZpbSBvbmx5IGV4aXN0cyB3aGVuIHRoZXJlIGFyZSBubyBjaGFuZ2VkIGJ1ZmZlcnMuCisKK1RyeWluZyB0byBzdGFydCB0aGUgR1VJIHdoZW4gJERJU1BMQVkgaXMgbm90IHNldCByZXN1bHRlZCBpbiBhIGNyYXNoLgorV2hlbiAkRElTUExBWSBpcyBub3Qgc2V0IGFuZCBndmltIHN0YXJ0cyB2aW0sIHRpdGxlIHdhcyByZXN0b3JlZCB0byAiVGhhbmtzCitmb3IgZmx5aW5nIFZpbSIuCitXaGVuICRESVNQTEFZIG5vdCBzZXQsIHN0YXJ0aW5nICJndmltIiAoZHJvcHBpbmcgYmFjayB0byB2aW0pIGFuZCB0aGVuCitzZWxlY3RpbmcgdGV4dCB3aXRoIHRoZSBtb3VzZSBjYXVzZWQgYSBjcmFzaC4KKworIkoiLCB3aXRoICdqb2luc3BhY2VzJyBzZXQsIG9uIGEgbGluZSBlbmRpbmcgaW4gIi4gIiwgY2F1c2VkIG9uZSBzcGFjZSB0b28KK21hbnkgdG8gYmUgYWRkZWQuICAoQWNldmVkbykKKworSW4gaW5zZXJ0IG1vZGUsIGEgQ1RSTC1SIHtyZWduYW1lfSB3aGljaCBkaWRuJ3QgaW5zZXJ0IGFueXRoaW5nIGxlZnQgdGhlICciJworb24gdGhlIHNjcmVlbi4KKworIjp6MTAiIGRpZG4ndCB3b3JrLiAoQ2xhcHApCisKKyJIZWxwICIqIiBkaWRuJ3Qgd29yay4KKworUmVuYW1lZCBhIGxvdCBvZiBmdW5jdGlvbnMsIHRvIGF2b2lkIGNsYXNoZXMgd2l0aCBQT1NJWCBuYW1lIHNwYWNlLgorCitXaGVuIGFkZGluZyBjaGFyYWN0ZXJzIHRvIGEgbGluZSwgbWFraW5nIGl0IHdyYXAsIHRoZSBmb2xsb3dpbmcgbGluZXMgd2VyZQorc29tZXRpbWVzIG5vdCBzaGlmdGVkIGRvd24gKGUuZy4gYWZ0ZXIgYSB0YWcganVtcCkuCisKK0NUUkwtRSwgd2l0aCAnc28nIHNldCBhbmQgY3Vyc29yIG9uIGxhc3QgbGluZSwgbm93IGRvZXMgbm90IG1vdmUgY3Vyc29yIGFzCitsb25nIGFzIHRoZSBsYXN0IGxpbmUgaXMgb24gdGhlIHNjcmVlbi4KKworV2hlbiB0aGVyZSBhcmUgdHdvIHdpbmRvd3MsIGRvaW5nICJeVyteVy0iIGluIHRoZSBib3R0b20gd2luZG93IGNvdWxkIGNhdXNlCit0aGUgc3RhdHVzIGxpbmUgdG8gYmUgZG91YmxlZCAobm90IHJlZHJhd24gY29ycmVjdGx5KS4KKworVGhpcyBjb21tYW5kIHdvdWxkIGhhbmc6ICI6biBgY2F0YCIuICBOb3cgY29ubmVjdCBzdGRpbiBvZiB0aGUgZXh0ZXJuYWwKK2NvbW1hbmQgdG8gL2Rldi9udWxsLCB3aGVuIGV4cGFuZGluZy4KKworRml4ZWQgbGFsbG9jKDAsKSBlcnJvciBmb3IgIjplY2hvICU6ZTpyIi4gIChBY2V2ZWRvKQorCitUaGUgIitjb21tYW5kIiBhcmd1bWVudCB0byAiOnNwbGl0IiBkaWRuJ3Qgd29yayB3aGVuIHRoZXJlIHdhcyBubyBmaWxlIG5hbWUuCisKK1doZW4gc2VsZWN0aW5nIHRleHQgaW4gdGhlIEdVSSwgd2hpY2ggaXMgdGhlIG91dHB1dCBvZiBhIGNvbW1hbmQtbGluZSBjb21tYW5kCitvciBhbiBleHRlcm5hbCBjb21tYW5kLCB0aGUgaW52ZXJzaW9uIHdvdWxkIHNvbWV0aW1lcyByZW1haW4uCisKK0dVSTogIi1taCA3MCIgYXJndW1lbnQgd2FzIGJyb2tlbi4gIE5vdywgd2hlbiBtZW51aGVpZ2h0IGlzIHNwZWNpZmllZCwgaXQgaXMKK25vdCBjaGFuZ2VkIGFueW1vcmUuCisKK0dVSTogV2hlbiB1c2luZyB0aGUgc2Nyb2xsYmFyIG9yIG1vdXNlIHdoaWxlIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kLAordGhpcyBjYXVzZWQgZ2FyYmFnZSBjaGFyYWN0ZXJzLgorCitTaG93bWF0Y2ggc29tZXRpbWVzIGp1bXBlZCB0byB0aGUgd3JvbmcgcG9zaXRpb24uICBXYXMgY2F1c2VkIGJ5IGEgY2FsbCB0bworZmluZG1hdGNoKCkgd2hlbiByZWRyYXdpbmcgdGhlIGRpc3BsYXkgKHdoZW4gc3ludGF4IGhpZ2hsaWdodGluZyBpcyBvbikuCisKK1NlYXJjaCBwYXR0ZXJuICJcKGEgKlwpXHszfSBkaWQgbm90IHdvcmsgY29ycmVjdGx5LCBhbHNvIG1hdGNoZWQgImEgYSIuCitQcm9ibGVtIHdpdGggYnJhY2VfY291bnQgbm90IGJlaW5nIGRlY3JlbWVudGVkLgorCitXaWxkY2FyZCBleHBhbnNpb24gYWRkZWQgdG9vIG1hbnkgbm9uLW1hdGNoaW5nIGZpbGUgbmFtZXMuCisKK1doZW4gJ2lza2V5d29yZCcgY29udGFpbnMgY2hhcmFjdGVycyBsaWtlICd+JywgIioiIGFuZCAiIyIgZGlkbid0IHdvcmsKK3Byb3Blcmx5LiAoQWNldmVkbykKKworT24gTGludXgsIG9uIGEgRkFUIGZpbGUgc3lzdGVtLCBtb2RpZmljYXRpb24gdGltZSBjYW4gY2hhbmdlIGJ5IG9uZSBzZWNvbmQuCitBdm9pZCBhICJmaWxlIGhhcyBjaGFuZ2VkIiB3YXJuaW5nIGZvciBhIG9uZSBzZWNvbmQgZGlmZmVyZW5jZS4KKworV2hlbiB1c2luZyB0aGUgcGFnZS1zd2l0Y2hpbmcgaW4gYW4geHRlcm0sIFZpbSB3b3VsZCBwb3NpdGlvbiB0aGUgY3Vyc29yIG9uCit0aGUgbGFzdCBsaW5lIG9mIHRoZSB3aW5kb3cgb24gZXhpdC4gIEFsc28gcmVtb3ZlZCB0aGUgY3Vyc29yIHBvc2l0aW9uaW5nIGZvcgorIjohIiBjb21tYW5kcy4KKworIjpnL3BhdC9wIiBjb21tYW5kIChwYXJ0bHkpIG92ZXJ3cm90ZSB0aGUgY29tbWFuZC4gIE5vdyB0aGUgb3V0cHV0IGlzIG9uIGEKK3NlcGFyYXRlIGxpbmUuCisKK1dpdGggJ2ljJyBhbmQgJ3Njcycgc2V0LCBhIHNlYXJjaCBmb3IgIktleXdvcmQiLCBpZ25vcmUtY2FzZSBtYXRjaGVzIHdlcmUKK2hpZ2hsaWdodGVkIHRvby4KKworIl4iIG9uIGEgbGluZSB3aXRoIG9ubHkgd2hpdGUgc3BhY2UsIHB1dCBjdXJzb3IgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKK1doZW4gZGVsZXRpbmcgY2hhcmFjdGVycyBiZWZvcmUgd2hlcmUgaW5zZXJ0aW9uIHN0YXJ0ZWQgKCdicycgPT0gMiksIGNvdWxkIG5vdAordXNlIGFiYnJldmlhdGlvbnMuCisKK0NUUkwtRSBhdCBlbmQgb2YgZmlsZSBwdXRzIGN1cnNvciBiZWxvdyB0aGUgZmlsZSwgaW4gVmlzdWFsIG1vZGUsIHdoZW4gJ3NvJyBpcworbm9uLXplcm8uICBDVFJMLUUgZGlkbid0IHdvcmsgd2hlbiAnc28nIGlzIGJpZyBhbmQgdGhlIGxpbmUgYmVsb3cgdGhlIHdpbmRvdword3JhcHMuICBDVFJMLUUsIHdoZW4gJ3NvJyBpcyBub24temVybywgYXQgZW5kIG9mIHRoZSBmaWxlLCBjYXVzZWQganVtcGluZwordXAtZG93bi4KKworIjpyZXRhYiIgZGlkbid0IHdvcmsgd2VsbCB3aGVuICdsaXN0JyBpcyBzZXQuCisKK0FtaWdhOiBXaGVuIGluc2VydGluZyBjaGFyYWN0ZXJzIGF0IHRoZSBsYXN0IGxpbmUgb24gdGhlIHNjcmVlbiwgY2F1c2luZyBpdAordG8gd3JhcCwgbWVzc2VkIHVwIHRoZSBkaXNwbGF5LiAgSXQgYXBwZWFycyB0aGF0IGEgJ1xuJyBvbiB0aGUgbGFzdCBsaW5lCitkb2Vzbid0IGFsd2F5cyBjYXVzZSBhIHNjcm9sbCB1cC4KKworSW4gSW5zZXJ0IG1vZGUgIjA8Qy1EPjxDLUQ+IiBkZWxldGVkIGFuIGV4dHJhIGNoYXJhY3RlciwgYmVjYXVzZSBWaW0gdGhvdWdodAordGhhdCB0aGUgIjAiIHdhcyBzdGlsbCB0aGVyZS4gKEFjZXZlZG8pCisKKyJ6e2NvdW50fWwiIGlnbm9yZWQgdGhlIGNvdW50LiAgQWxzbyBmb3IgInpoIiBldC4gYWwuIChBY2V2ZWRvKQorCisiUyIgd2hlbiAnYXV0b2luZGVudCcgaXMgb2ZmIGRpZG4ndCBkZWxldGUgbGVhZGluZyB3aGl0ZSBzcGFjZS4KKworIi88VGFiPiIgbGFuZGVkIG9uIHRoZSB3cm9uZyBjaGFyYWN0ZXIgd2hlbiAnaW5jc2VhcmNoJyBpcyBzZXQuCisKK0Fza2luZyBhIHllcy9ubyBxdWVzdGlvbiBjb3VsZCBjYXVzZSBhIHxoaXQtZW50ZXJ8IHByb21wdC4KKworV2hlbiB0aGUgZmlsZSBjb25zaXN0cyBvZiBvbmUgbG9uZyBsaW5lICg+NDEwMCBjaGFyYWN0ZXJzKSwgbWFraW5nIGNoYW5nZXMKK2NhdXNlZCB2YXJpb3VzIGVycm9ycyBhbmQgYSBjcmFzaC4KKworREpHUFAgdmVyc2lvbiBjb3VsZCBub3Qgc2F2ZSBsb25nIGxpbmVzICg+NjQwMDApIGZvciB1bmRvLgorCisieXciIG9uIHRoZSBsYXN0IGNoYXIgaW4gdGhlIGZpbGUgZGlkbid0IHdvcmsuICBBbHNvIGZpeGVkICI2eCIgYXQgdGhlIGVuZCBvZgordGhlIGxpbmUuICI2WCIgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBmYWlscywgYnV0IGRvZXMgbm90IGJyZWFrIGEgbWFwcGluZy4gIEluCitnZW5lcmFsLCBhIG1vdmVtZW50IGZvciBhbiBvcGVyYXRvciBkb2Vzbid0IGJlZXAgb3IgZmx1c2ggYSBtYXBwaW5nLCBidXQgd2hlbgordGhlcmUgaXMgbm90aGluZyB0byBvcGVyYXRlIG9uIGl0IGJlZXBzICh0aGlzIGlzIFZpIGNvbXBhdGlibGUpLgorCisibSciIGFuZCAibWAiIG5vdyBzZXQgdGhlICcnIG1hcmsgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworVW5peDogUmVzZXR0aW5nIG9mIHNpZ25hbHMgZm9yIGV4dGVybmFsIHByb2dyYW0gZGlkbid0IHdvcmssIGJlY2F1c2UgU0lHX0RGTAorYW5kIE5VTEwgYXJlIHRoZSBzYW1lISAgRm9yICIhIXllc3xkZCBjb3VudD0xfCwgdGhlIHllcyBjb21tYW5kIGtlcHQgb24KK3J1bm5pbmcuCisKK1BhcnRseSBmaXhlZDogVW5peCBHVUk6IFR5cGVhaGVhZCB3aGlsZSBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCB3YXMgbG9zdC4KK05vdyBpdCdzIG5vdCBsb3N0IHdoaWxlIHRoZSBjb21tYW5kIGlzIHByb2R1Y2luZyBvdXRwdXQuCisKK1R5cGluZyA8Uy1UYWI+IGluIEluc2VydCBtb2RlLCB3aGVuIGl0IGlzbid0IG1hcHBlZCwgaW5zZXJ0ZWQgIjxTLVRhYj4iLiAgTm93CitpdCB3b3JrcyBsaWtlIGEgbm9ybWFsIDxUYWI+LCBqdXN0IGxpa2UgPEMtVGFiPiBhbmQgPE0tVGFiPi4KKworUmVkcmF3aW5nIHJ1bGVyIGRpZG4ndCBjaGVjayBmb3Igb2xkIHZhbHVlIGNvcnJlY3RseSAoY2F1c2VkIFVNUiB3YXJuaW5ncyBpbgorUHVyaWZ5KS4KKworTmVnYXRpdmUgYXJyYXkgaW5kZXggaW4gZmluaXNoX3ZpbWluZm9faGlzdG9yeSgpLgorCisiOmcvXi9kfG1vICQiIGRlbGV0ZWQgYWxsIHRoZSBsaW5lcy4gIFRoZSAiOm1vdmUiIGNvbW1hbmQgbm93IHJlbW92ZXMgdGhlCis6Z2xvYmFsIG1hcmsgZnJvbSB0aGUgbW92ZWQgbGluZXMuCisKK1VzaW5nICJ2RyIgd2hpbGUgdGhlIGxhc3QgbGluZSBpbiB0aGUgd2luZG93IGlzIGEgIkAiIGxpbmUsIGRpZG4ndCB1cGRhdGUKK2NvcnJlY3RseS4gIEp1c3QgdGhlICJ2IiBzaG93ZWQgIn4iIGxpbmVzLgorCisiZGF3IiBvbiB0aGUgbGFzdCBjaGFyIG9mIHRoZSBmaWxlLCB3aGVuIGl0J3MgYSBzcGFjZSwgbW92ZWQgdGhlIGN1cnNvciBiZXlvbmQKK3RoZSBlbmQgb2YgdGhlIGxpbmUuCisKK1doZW4gJ2hsc2VhcmNoJyB3YXMgc2V0IG9yIHJlc2V0LCBvbmx5IHRoZSBjdXJyZW50IGJ1ZmZlciB3YXMgcmVkcmF3biwgd2hpbGUKK3RoaXMgYWZmZWN0cyBhbGwgd2luZG93cy4KKworQ1RSTC1eLCBwb3NpdGlvbmluZyB0aGUgY3Vyc29yIHNvbWV3aGVyZSBmcm9tIDEvMiB0byAxIDEvMiBzY3JlZW4gZG93biB0aGUKK2ZpbGUsIHB1dCB0aGUgY3Vyc29yIGF0IHRoZSBib3R0b20gb2YgdGhlIHdpbmRvdywgaW5zdGVhZCBvZiBoYWxmd2F5LgorCitXaGVuIHNjcm9sbGluZyB1cCBmb3IgIjphcHBlbmQiIGNvbW1hbmQsIG5vdCBhbGwgd2luZG93cyB3ZXJlIHVwZGF0ZWQKK2NvcnJlY3RseS4KKworV2hlbiAnaGxzZWFyY2gnIGlzIHNldCwgYW5kIGFuIGF1dG8taW5kZW50IGlzIGhpZ2hsaWdodGVkLCBwcmVzc2luZyA8RXNjPgorZGlkbid0IHJlbW92ZSB0aGUgaGlnaGxpZ2h0aW5nLCBhbHRob3VnaCB0aGUgaW5kZW50IHdhcyBkZWxldGVkLgorCitXaGVuICdydScgc2V0IGFuZCAnbm9zYycsIHVzaW5nICIkaiIgc2hvd2VkIGEgd3JvbmcgcnVsZXIuCisKK1VuZGVyIFhmcmVlIDMuMiwgU2hpZnQtVGFiIGRpZG4ndCB3b3JrICh3cm9uZyBrZXlzeW0gaXMgdXNlZCkuCisKK01hcHBpbmcgPFMtVGFiPiBkaWRuJ3Qgd29yay4gIENoYW5nZWQgdGhlIGtleSB0cmFuc2xhdGlvbnMgdG8gdXNlIHRoZSBzaG9ydGVzdAora2V5IGNvZGUgcG9zc2libGUuICBUaGlzIG1ha2VzIHRoZSB0ZXJtY29kZSB0cmFuc2xhdGlvbnMgYW5kIG1hcHBpbmdzIG1vcmUKK2NvbnNpc3RlbnQuICBOb3cgYWxsIG1vZGlmaWVycyB3b3JrIGluIGFsbCBjb21iaW5hdGlvbnMsIG5vdCBvbmx5IHdpdGggPFRhYj4sCitidXQgYWxzbyB3aXRoIDxTcGFjZT4sIDxDUj4sIGV0Yy4KKworRm9yIFVuaXgsIHJlc3RvcmUgdGhyZWUgbW9yZSBzaWduYWxzLiAgQW5kIFZpbSBjYXRjaGVzIFNJR0lOVCBub3csIHNvIENUUkwtQworaW4gRXggbW9kZSBkb2Vzbid0IG1ha2UgVmltIGV4aXQuCisKKyIiYTVZIiB5YW5rZWQgMjUgbGluZXMgaW5zdGVhZCBvZiA1LgorCisidnJ4eHg8RXNjPiIgaW4gYW4gZW1wdHkgbGluZSBjb3VsZCBub3QgYmUgdW5kb25lLgorCitBIENUUkwtQyB0aGF0IGJyZWFrcyAiOm1ha2UiIGNhdXNlZCB0aGUgZXJyb3JmaWxlIG5vdCB0byBiZSByZWFkIChhbm5veWluZword2hlbiB5b3Ugd2FudCB0byBoYW5kbGUgd2hhdCAiOm1ha2UiIHByb2R1Y2VkIHNvIGZhcikuCisKKyI6MDsvcGF0IiBkaWRuJ3QgZmluZCAicGF0IiBpbiBsaW5lIDEuCisKK1NlYXJjaCBmb3IgIi90ZXN0L3MrMSIgYXQgZmlyc3QgY2hhciBvZiBmaWxlIGdhdmUgYm90dG9tLXRvcCBtZXNzYWdlLCBvcgorZGlkbid0IHdvcmsgYXQgYWxsIHdpdGggJ25vd3JhcHNjYW4nLgorCitCdWcgaW4gdmltaW5mbyBoaXN0b3J5LiAgQ291bGQgY2F1c2UgYSBjcmFzaCBvbiBleGl0LgorCisiOnByaW50IiBkaWRuJ3QgcHV0IGN1cnNvciBvbiBmaXJzdCBub24tYmxhbmsgaW4gbGluZS4KKworIjowciAhY2F0IDwvZGV2L251bGwiIGxlZnQgY3Vyc29yIGluIGxpbmUgemVybywgd2l0aCB2ZXJ5IHN0cmFuZ2UgZWZmZWN0cy4KKworV2l0aCAnc2hvd2NtZCcgc2V0IGFuZCAndGltZW91dGxlbicgc2V0IHRvIGEgZmV3IHNlY29uZHMsIHRyaWNrIHRvIHBvc2l0aW9uCit0aGUgY3Vyc29yIGxlZnR3YXJkcyBkaWRuJ3Qgd29yay4KKworQUlYIHN0dHkgc2V0dGluZ3Mgd2VyZSByZXN0b3JlZCB0byBjczUgaW5zdGVhZCBvZiBjczggKFdpbm4pLgorCitGaWxlIG5hbWUgY29tcGxldGlvbiBkaWRuJ3Qgd29yayBmb3IgInpzaCIgdmVyc2lvbnMgdGhhdCBwdXQgc3BhY2VzIGJldHdlZW4KK2ZpbGUgbmFtZXMsIGluc3RlYWQgb2YgTlVMcy4KKworQ2hhbmdlZCAiWGF3Q2hhaW4qIiB0byAiWHRDaGFpbioiLCBzaG91bGQgd29yayBmb3IgbW9yZSBzeXN0ZW1zLgorCitJbmNsdWRlZCBxdWl0ZSBhIGZldyBmaXhlcyBmb3IgcmlnaHRsZWZ0IG1vZGUgKExvdHRlbSkuCisKK0RpZG4ndCBhc2sgdG8gfGhpdC1lbnRlcnwgd2hlbiBHVUkgaXMgc3RhcnRlZCBhbmQgZXJyb3IgbWVzc2FnZXMgYXJlIHByaW50ZWQuCisKK1doZW4gdHJ5aW5nIHRvIGVkaXQgYSBmaWxlIGluIGEgbm9uLWV4aXN0ZW50IGRpcmVjdG9yeSwgZW5kZWQgdXAgd2l0aCBlZGl0aW5nCisiTm8gZmlsZSIuCisKKyJncWFwIiB0byBmb3JtYXQgYSBwYXJhZ3JhcGggZGlkIHRvbyBtdWNoIHJlZHJhd2luZy4KKworV2hlbiAnaGxzZWFyY2gnIHNldCwgb25seSB0aGUgY3VycmVudCB3aW5kb3cgd2FzIHVwZGF0ZWQgZm9yIGEgbmV3IHNlYXJjaAorcGF0dGVybi4KKworU29tZXRpbWVzIGVycm9yIG1lc3NhZ2VzIG9uIHN0YXJ0dXAgZGlkbid0IGNhdXNlIGEgfGhpdC1lbnRlcnwgcHJvbXB0LAorYmVjYXVzZSBvZiBhdXRvY29tbWFuZHMgY29udGFpbmluZyBhbiBlbXB0eSBsaW5lLgorCitXYXMgcG9zc2libGUgdG8gc2VsZWN0IHBhcnQgb2YgdGhlIHdpbmRvdyBpbiB0aGUgYm9yZGVyLCBiZWxvdyB0aGUgY29tbWFuZAorbGluZS4KKworJzwgYW5kICc+IG1hcmtzIHdlcmUgbm90IGF0IHRoZSBjb3JyZWN0IHBvc2l0aW9uIGFmdGVyIGxpbmV3aXNlIFZpc3VhbAorc2VsZWN0aW9uLgorCitXaGVuIHRyYW5zbGF0aW5nIGEgaGVscCBhcmd1bWVudCB0byAiQ1RSTC14IiwgcHJlcGVuZCBvciBhcHBlbmQgYSAnXycsIHdoZW4KK2FwcGxpY2FibGUuCisKK0Jsb2Nrd2lzZSB2aXN1YWwgbW9kZSB3YXNuJ3QgY29ycmVjdCB3aGVuIG1vdmluZyB2ZXJ0aWNhbGx5IG92ZXIgYSBzcGVjaWFsCitjaGFyYWN0ZXIgKGRpc3BsYXllZCBhcyB0d28gc2NyZWVuIGNoYXJhY3RlcnMpLgorCitSZW5hbWVkICJzdHJ1Y3Qgb3B0aW9uIiB0byAic3RydWN0IHZpbW9wdGlvbiIgdG8gYXZvaWQgbmFtZSBjbGFzaCB3aXRoIEdOVQorZ2V0b3B0KCkuCisKKyI6YWJjbGVhciIgZGlkbid0IHdvcmsgKGJ1dCAiOmlhYmNsZWFyIiBhbmQgIjpjYWJjbGVhciIgZGlkIHdvcmspLgorCitXaGVuICdub3dyYXAnIHVzZWQsIHNjcmVlbiB3YXNuJ3QgYWx3YXlzIHVwZGF0ZWQgY29ycmVjdGx5LgorCisidmltIC1jIHNwbGl0IGZpbGUiIGRpc3BsYXllZCBleHRyYSBsaW5lcy4KKworQWZ0ZXIgc3RhcnRpbmcgdGhlIEdVSSwgc2VhcmNoZWQgdGhlIHRlcm1jYXAgZm9yIGEgImd1aSIgdGVybS4KKworV2hlbiAnaGxzJyB1c2VkLCBzZWFyY2ggZm9yICJeJCIgY2F1c2VkIGEgaGFuZy4KK1doZW4gJ2hscycgd2FzIHNldCwgYW4gZXJyb3IgaW4gdGhlIGxhc3QgcmVnZXhwIGNhdXNlZCB0cm91YmxlLgorCitVbml4OiBPbmx5IG91dHB1dCBhbiBleHRyYSA8RU9MPiBvbiBleGl0IHdoZW4gb3V0cHV0dGVkIHNvbWV0aGluZyBpbiB0aGUKK2FsdGVybmF0ZSBzY3JlZW4sIG9yIHdoZW4gdGhlcmUgaXMgYSBtZXNzYWdlIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZC4KKworIi9hXHsiIGRpZCBzdHJhbmdlIHRoaW5ncywgZGVwZW5kaW5nIG9uIHByZXZpb3VzIHNlYXJjaC4KKworImN9IiBvbmx5IHJlZHJldyBvbmUgbGluZSAod2l0aCAtdSBOT05FKS4KKworRm9yIG1hcHBpbmdzLCBDVFJMLU1FVEEtQSB3YXMgc2hvd24gYXMgPE0tXkE+IGluc3RlYWQgb2YgPE1DLUE+LCB3aGlsZSA6bWFwCitvbmx5IGFjY2VwdHMgPE1DLUE+LiAgTm93IDxNLUMtQT4gaXMgc2hvd24uCisKK1VuaXg6IFdoZW4gdXNpbmcgZnVsbCBwYXRoIG5hbWUgaW4gYSB0YWdzIGZpbGUsIHdoaWNoIGNvbnRhaW5zIGEgbGluaywgYW5kCisnaGlkZGVuJyBzZXQgYW5kIGp1bXBpbmcgdG8gYSB0YWcgaW4gdGhlIGN1cnJlbnQgZmlsZSwgd291bGQgZ2V0IGJvZ3VzCitBVFRFTlRJT04gbWVzc2FnZS4gIFNvbHZlZCBieSBhbHdheXMgZXhwYW5kaW5nIGZpbGUgbmFtZXMsIGV2ZW4gd2hlbiBzdGFydGluZword2l0aCAnLycuCisKKydobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIG9mIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgYSBUQUIpIGRpZG4ndCBoaWdobGlnaHQKK3RoZSB3aG9sZSB0aGluZy4KKworInI8Q1I+IiBkaWRuJ3Qgd29yayBjb3JyZWN0bHkgb24gdGhlIGxhc3QgY2hhciBvZiBhIGxpbmUuCisKK3NvbWV0aW1lcyBhIHdpbmRvdyByZXNpemUgb3Igb3RoZXIgc2lnbmFsIGNhdXNlZCBhbiBlbmRsZXNzIGxvb3AsIGludm9sdmluZworc2V0X3dpbnNpemUoKS4KKworInZpbSAtciIgZGlkbid0IHdvcmssIGl0IHdvdWxkIGp1c3QgaGFuZyAodXNpbmcgdGdldGVudCgpIHdoaWxlICd0ZXJtJyBpcworZW1wdHkpLgorCisiZ2siIHdoaWxlICdub3dyYXAnIHNldCBtb3ZlZCB0d28gbGluZXMgdXAuCisKK1doZW4gd2luZG93cyBhcmUgc3BsaXQsIGEgbWVzc2FnZSB0aGF0IGNhdXNlcyBhIHNjcm9sbC11cCBtZXNzZWQgdXAgb25lIG9mIHRoZQord2luZG93cywgd2hpY2ggcmVxdWlyZWQgYSBDVFJMLUwgdG8gYmUgdHlwZWQuCisKK1Bvc3NpYmxlIGVuZGxlc3MgbG9vcCB3aGVuIHVzaW5nIHNoZWxsIGNvbW1hbmQgaW4gdGhlIEdVSS4KKworTWVudXMgZGVmaW5lZCBpbiB0aGUgLnZpbXJjIHdlcmUgcmVtb3ZlZCB3aGVuIEdVSSBzdGFydGVkLgorCitDcmFzaCB3aGVuIHBhc3Rpbmcgd2l0aCB0aGUgbW91c2UgaW4gaW5zZXJ0IG1vZGUuCisKK0NyYXNoIHdoaXRoICI6dW5tZW51ICoiIGluIC5ndmltcmMgZm9yIEF0aGVuYS4KKworIjU+PiIgc2hpZnRlZCA1IGxpbmVzIDUgdGltZXMsIGluc3RlYWQgb2YgMSB0aW1lLgorCitDVFJMLUMgd2hlbiBnZXR0aW5nIGEgcHJvbXB0IGluICI6Z2xvYmFsIiBkaWRuJ3QgaW50ZXJydXB0LgorCitXaGVuICdzbycgaXMgbm9uLXplcm8sIGFuZCBtb3ZpbmcgdGhlIHNjcm9sbGJhciBjb21wbGV0ZWx5IHRvIHRoZSBib3R0b20sCit0aGVyZSB3YXMgYSBsb3Qgb2YgZmxhc2hpbmcuCisKK0dVSTogU2Nyb2xsYmFyIGlkZW50IG11c3QgYmUgbG9uZyBmb3IgREVDIEFscGhhLgorCitTb21lIGZ1bmN0aW9ucyBjYWxsZWQgdmltX3JlZ2NvbXAoKSB3aXRob3V0IHNldHRpbmcgcmVnX21hZ2ljLCB3aGljaCBjb3VsZAorbGVhZCB0byB1bnByZWRpY3RhYmxlIG1hZ2ljbmVzcy4KKworQ3Jhc2ggd2hlbiBjbGlja2luZyBhcm91bmQgdGhlIHN0YXR1cyBsaW5lLCBjb3VsZCBnZXQgYSBzZWxlY3Rpb24gd2l0aCBhCitiYWNrd2FyZHMgcmFuZ2UuCisKK1doZW4gZGVsZXRpbmcgbW9yZSB0aGFuIG9uZSBsaW5lIGNoYXJhY3Rlcndpc2UsIHRoZSBsYXN0IGNoYXJhY3RlciB3YXNuJ3QKK2RlbGV0ZWQuCisKK0dVSTogU3RhdHVzIGxpbmUgY291bGQgYmUgb3ZlcndyaXR0ZW4gd2hlbiBtb3ZpbmcgdGhlIHNjcm9sbGJhciBxdWlja2x5IChvcgord2hlbiAnd2QnIGlzIG5vbi16ZXJvKS4KKworQW4gRVNDIGF0IHRoZSBlbmQgb2YgYSAiOm5vcm1hbCIgY29tbWFuZCBjYXVzZWQgYSB3YWl0IGZvciBhIHRlcm1pbmFsIGNvZGUgdG8KK2ZpbmlzaC4gIE5vdywgYSB0ZXJtaW5hbCBjb2RlIGlzIG5vdCByZWNvZ25pemVkIHdoZW4gaXRzIHN0YXJ0IGNvbWVzIGZyb20gYQorbWFwcGluZyBvciAiOm5vcm1hbCIgY29tbWFuZC4KKworSW5jbHVkZWQgcGF0Y2hlcyBmcm9tIFJvYmVydCBXZWJiIGZvciBHVUkuICBMYXlvdXQgb2YgdGhlIHdpbmRvd3MgaXMgbm93IGRvbmUKK2luc2lkZSBWaW0sIGluc3RlYWQgb2YgbGV0dGluZyB0aGUgbGF5b3V0IG1hbmFnZXIgZG8gdGhpcy4gIE1ha2VzIFZpbSB3b3JrCit3aXRoIExlc3N0aWYhCisKK1VNUiB3YXJuaW5nIGluIHNldF9leHBhbmRfY29udGV4dCgpLgorCitNZW1vcnkgbGVhazogYl93aW5sbnVtIGxpc3Qgd2FzIG5ldmVyIGZyZWVkLgorCitSZW1vdmVkIFRJT0NMU0VUL1RJT0NMR0VUIGNvZGUgZnJvbSBvc191bml4LmMuICBXYXMgY2hhbmdpbmcgc29tZSBvZiB0aGUKK3Rlcm1pbmFsIHNldHRpbmdzLCBhbmQgbG9va2VkIGxpa2UgaXQgd2Fzbid0IGRvaW5nIGFueXRoaW5nIGdvb2QuICAoc3VnZ2VzdGVkCitieSBKdWVyZ2VuIFdlaWdlcnQpLgorCitSdWxlciBvdmVyd3JvdGUgImlzIGEgZGlyZWN0b3J5IiBtZXNzYWdlLiAgV2hlbiBzdGFydGluZyB1cCwgYW5kICdjbWRoZWlnaHQnCitzZXQgdG8gPiAxLCBmaXJzdCBtZXNzYWdlIGNvdWxkIHN0aWxsIGJlIGluIHRoZSBsYXN0IGxpbmUuCisKK1JlbW92ZWQgcHJvdG90eXBlIGZvciBwdXRlbnYoKSBmcm9tIHByb3RvLmgsIGl0J3MgYWxyZWFkeSBpbiBvc2RlZjIuaC5pbi4KKworSW4gcmVwbGFjZSBtb2RlLCB3aGVuIG1vdmluZyB0aGUgY3Vyc29yIGFuZCB0aGVuIGJhY2tzcGFjaW5nLCB3cm9uZyBjaGFyYWN0ZXJzCit3ZXJlIGluc2VydGVkLgorCitXaW4zMiBHVUkgd2FzIGNoZWNraW5nIGZvciBhIENUUkwtQyB0b28gb2Z0ZW4sIG1ha2luZyBpdCBzbG93LgorCitSZW1vdmVkIG1hcHBpbmdzIGZvciBNUy1ET1MgdGhhdCB3ZXJlIGFscmVhZHkgY292ZXJlZCBieSBjb21tYW5kcy4KKworV2hlbiB2aXN1YWxseSBzZWxlY3RpbmcgYWxsIGxpbmVzIGluIGEgZmlsZSwgY3Vyc29yIGF0IGxhc3QgbGluZSwgdGhlbiAiSiIuCitHYXZlIG1sX2dldCBlcnJvcnMuICBXYXMgYSBwcm9ibGVtIHdpdGggc2Nyb2xsaW5nIGRvd24gZHVyaW5nIHJlZHJhd2luZy4KKworV2hlbiBkb2luZyBhIGxpbmV3aXNlIG9wZXJhdG9yLCBhbmQgdGhlbiBhbiBvcGVyYXRvciB3aXRoIGEgbW91c2UgY2xpY2ssIGl0Cit3YXMgYWxzbyBsaW5ld2lzZSwgaW5zdGVhZCBvZiBjaGFyYWN0ZXJ3aXNlLgorCitXaGVuICdsaXN0JyBpcyBzZXQsIHRoZSBjb2x1bW4gb2YgdGhlIHJ1bGVyIHdhcyB3cm9uZy4KKworU3B1cmlvdXMgZXJyb3IgbWVzc2FnZSBmb3IgIi9cKGJcK1wpKiIuCisKK1doZW4gdmlzdWFsbHkgc2VsZWN0ZWQgbWFueSBsaW5lcywgbWVzc2FnZSBmcm9tICI6dyBmaWxlIiBkaXNhcHBlYXJlZCB3aGVuCityZWRyYXdpbmcgdGhlIHNjcmVlbi4KKworIjpzZXQgPE0tYj49XltiIiwgdGhlbiBpbnNlcnQgIl5bYiIsIHdhaXRlZCBmb3IgYW5vdGhlciBjaGFyYWN0ZXIuICBBbmQgdGhlbgoraW5zZXJ0ZWQgIjxNLWI+IiBpbnN0ZWFkIG9mIHRoZSByZWFsIDxNLWI+IGNoYXJhY3Rlci4gIFdhcyB0cnlpbmcgdG8gaW5zZXJ0CitLX1NQRUNJQUwgeCBOVUwuCisKK0NUUkwtVyBdIGRpZG4ndCB1c2UgY291bnQgdG8gc2V0IHdpbmRvdyBoZWlnaHQuCisKK0dVSTogIi1mb250IiBjb21tYW5kLWxpbmUgYXJndW1lbnQgZGlkbid0IG92ZXJyaWRlICdndWlmb250JyBzZXR0aW5nIGZyb20KKy5ndmltcmMuIChBY2V2ZWRvKQorCitHVUk6IGNsaXBib2FyZCB3YXNuJ3QgdXNlZCBmb3IgIip5Ii4gIEFuZCBzb21lIG1vcmUgV2luMzIvWDExIGRpZmZlcmVuY2VzCitmaXhlZCBmb3IgdGhlIGNsaXBib2FyZCAoV2ViYikuCisKK0p1bXBpbmcgZnJvbSBvbmUgaGVscCBmaWxlIHRvIGFub3RoZXIgaGVscCBmaWxlLCB3aXRoICdjb21wYXRpYmxlJyBzZXQsCityZW1vdmVkIHRoZSAnaGVscCcgZmxhZyBmcm9tIHRoZSBidWZmZXIuCisKK0ZpbGUtd3JpdGFibGUgYml0IGNvdWxkIGJlIHJlc2V0IHdoZW4gdXNpbmcgIjp3ISIgZm9yIGEgcmVhZG9ubHkgZmlsZS4KKworVGhlcmUgd2FzIGEgd2FpdCBmb3IgQ1RSTC1PIG4gaW4gSW5zZXJ0IG1vZGUsIGJlY2F1c2UgdGhlIHNlYXJjaCBwYXR0ZXJuIHdhcworc2hvd24uCitSZWR1Y2VkIHdhaXQsIHRvIGFsbG93IHJlYWRpbmcgYSBtZXNzYWdlLCBmcm9tIDEwIHRvIDMgc2Vjb25kcy4gIEl0IHNlZW1lZAorbm90aGluZyB3YXMgaGFwcGVuaW5nLgorCisiOnJlY292ZXIiIGZvdW5kIHNhbWUgc3dhcCBmaWxlIHR3aWNlLgorCitHVUk6ICIqeXkgb25seSB3b3JrZWQgdGhlIHNlY29uZCB0aW1lICh3aGVuIHBhc3RpbmcgdG8gYW4geHRlcm0pLiIKKworREpHUFAgdmVyc2lvbiAoZG9zMzIpOiBUaGUgc3lzdGVtIGZsYWdzIHdlcmUgY2xlYXJlZC4KKworRG9zMzIgdmVyc2lvbjogVW5kZXJzY29yZXMgd2VyZSBzb21ldGltZXMgcmVwbGFjZWQgd2l0aCB5LXVtbGF1dCAoTGV2aW4pLgorCitWZXJzaW9uIDQuMSBvZiBuY3Vyc2VzIGNhbid0IGhhbmRsZSB0cHV0cygiIiwgLi4pLiAgQXZvaWQgY2FsbGluZyB0cHV0cygpIHdpdGgKK2FuIGVtcHR5IHN0cmluZy4KKworPFMtVGFiPiBpbiB0aGUgY29tbWFuZC1saW5lIHdvcmtlZCBsaWtlIENUUkwtUCB3aGVuIG5vIGNvbXBsZXRpb24gc3RhcnRlZCB5ZXQuCitOb3cgaXQgZG9lcyBjb21wbGV0aW9uLCBsYXN0IG1hdGNoIGZpcnN0LgorCitVbml4OiBDb3VsZCBnZXQgYW5ub3lpbmcgImNhbid0IHdyaXRlIHZpbWluZm8iIG1lc3NhZ2UgYWZ0ZXIgZG9pbmcgInN1Ii4gIE5vdwordGhlIHZpbWluZm8gZmlsZSBpcyBvdmVyd3JpdHRlbiwgYW5kIHRoZSB1c2VyIHNldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvbmUuCisKKyI6c2V0IHRlcm09YnVpbHRpbl9ndWkiIHN0YXJ0ZWQgdGhlIEdVSSBpbiBhIHdyb25nIHdheS4gIE5vdyBpdCdzIG5vdAorYWxsb3dlZCBhbnltb3JlLiAgQnV0ICJ2aW0gLVQgZ3VpIiBkb2VzIHN0YXJ0IHRoZSBHVUkgY29ycmVjdGx5IG5vdy4KKworR1VJOiBUcmlwbGUgY2xpY2sgYWZ0ZXIgYSBsaW5lIG9ubHkgcHV0IGxhc3QgY2hhciBpbiBzZWxlY3Rpb24sIHdoZW4gaXQgaXMgYQorc2luZ2xlIGNoYXJhY3RlciB3b3JkLgorCitXaGVuIHRoZSB3aW5kb3cgaXMgYmlnZ2VyIHRoYW4gdGhlIHNjcmVlbiwgdGhlIHNjcm9sbGluZyB1cCBvZiBtZXNzYWdlcyB3YXMKK3dyb25nIChlLmcuICI6dmVycyIsICI6aGkiKS4gIEFsc28gd2hlbiB0aGUgYm90dG9tIHBhcnQgb2YgdGhlIHdpbmRvdyB3YXMKK29ic2N1cmVkIGJ5IGFub3RoZXIgd2luZG93LgorCitXaGVuIHVzaW5nIGEgd3Jvbmcgb3B0aW9uIG9ubHkgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCB0byBhdm9pZCB0aGF0IHRoZQordXNhZ2UgaW5mb3JtYXRpb24gbWFrZXMgaXQgc2Nyb2xsIG9mZiB0aGUgc2NyZWVuLgorCitXaGVuIGV4aXRpbmcgYmVjYXVzZSBvZiBub3QgYmVpbmcgYWJsZSB0byByZWFkIGZyb20gc3RkaW4sIGRpZG4ndCBwcmVzZXJ2ZSB0aGUKK3N3YXAgZmlsZXMgcHJvcGVybHkuCisKK1Zpc3VhbCBzZWxlY3RpbmcgYWxsIGNoYXJzIGluIG1vcmUgdGhhbiBvbmUgbGluZSwgdGhlbiBoaXQgIngiIGRpZG4ndCBsZWF2ZSBhbgorZW1wdHkgbGluZS4gIEZvciBvbmUgbGluZSBpdCBkaWQgbGVhdmUgYW4gZW1wdHkgbGluZS4KKworTWVzc2FnZSBmb3Igd2hpY2ggYXV0b2NvbW1hbmQgaXMgZXhlY3V0aW5nIG1lc3NlZCB1cCBmaWxlIHdyaXRlIG1lc3NhZ2UgKGZvcgorRmlsZVdyaXRlUG9zdCBldmVudCkuCisKKyJ2aW0gLWgiIGluY2x1ZGVkICItVSIgZXZlbiB3aGVuIEdVSSBpcyBub3QgYXZhaWxhYmxlLCBhbmQgIi1sIiB3aGVuIGxpc3AgaXMKK25vdCBhdmFpbGFibGUuCisKK0NyYXNoIGZvciAiOmhlIDxDLUE+IiAoY29tbWFuZC1saW5lIGxvbmdlciB0aGFuIHNjcmVlbikuCisKKyI6cy90aGlzL3RoYXQvZ2MiLCB0eXBlICJ5IiB0d28gdGltZXMsIHRoZW4gdW5kbywgZGlkIHJlc2V0IHRoZSBtb2RpZmllZAorb3B0aW9uLCBldmVuIHRob3VnaCB0aGUgZmlsZSBpcyBzdGlsbCBtb2RpZmllZC4KKworRW1wdHkgbGluZXMgaW4gYSB0YWdzIGZpbGUgY2F1c2VkIGEgIjp0YWciIHRvIGJlIGFib3J0ZWQuCisKK1doZW4gaGl0dGluZyAncScgYXQgdGhlIG1vcmUgcHJvbXB0IGZvciAiOm1lbnUiLCBzdGlsbCBzY3JvbGxlZCBhIGZldyBsaW5lcy4KKworSW4gYW4geHRlcm0gdGhhdCB1c2VzIHRoZSBib2xkIHRyaWNrIGEgc2luZ2xlIHJvdyBvZiBjaGFyYWN0ZXJzIGNvdWxkIHJlbWFpbgorYWZ0ZXIgYW4gZXJhc2VkIGJvbGQgY2hhcmFjdGVyLiAgTm93IGVyYXNlIG9uZSBleHRyYSBjaGFyIGFmdGVyIHRoZSBib2xkIGNoYXIsCitsaWtlIGZvciB0aGUgR1VJLgorCisiOnBvcCEiIGRpZG4ndCB3b3JrLgorCitXaGVuIHRoZSByZWFkaW5nIGEgYnVmZmVyIHdhcyBpbnRlcnJ1cHRlZCwgIjp3IiBzaG91bGQgbm90IGJlIGFibGUgdG8KK292ZXJ3cml0ZSB0aGUgZmlsZSwgIjp3ISIgaXMgcmVxdWlyZWQuCisKKyI6Y2YlIiBjYXVzZWQgYSBjcmFzaC4KKworIjpndWkgbG9uZ2ZpbGVuYW1lIiwgd2hlbiBmb3JraW5nIGlzIGVuYWJsZWQsIGNvdWxkIGxlYXZlIHBhcnQgb2YgdGhlCitsb25nZmlsZW5hbWUgYXQgdGhlIHNoZWxsIHByb21wdC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDUuMQkJCQkJCSp2ZXJzaW9uLTUuMSoKKworSW1wcm92ZW1lbnRzIG1hZGUgYmV0d2VlbiB2ZXJzaW9uIDUuMCBhbmQgNS4xLgorCitUaGlzIHdhcyBtb3N0bHkgYSBidWctZml4IHJlbGVhc2UsIG5vdCBtYW55IG5ldyBmZWF0dXJlcy4KKworCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTUuMSoKKy0tLS0tLS0KKworVGhlIGV4cGFuZCgpIGZ1bmN0aW9uIG5vdyBzZXBhcmF0ZXMgZmlsZSBuYW1lcyB3aXRoIDxOTD4gaW5zdGVhZCBvZiBhIHNwYWNlLgorVGhpcyBhdm9pZHMgcHJvYmxlbXMgZm9yIGZpbGUgbmFtZXMgd2l0aCBlbWJlZGRlZCBzcGFjZXMuICBUbyBnZXQgdGhlIG9sZAorcmVzdWx0LCB1c2Ugc3Vic3RpdHV0ZShleHBhbmQoZm9vKSwgIlxuIiwgIiAiLCAiZyIpLgorCitGb3IgSW5zZXJ0LWV4cGFuZGluZyBkaWN0aW9uYXJpZXMgYWxsb3cgYSBiYWNrc2xhc2ggdG8gYmUgdXNlZCBmb3IKK3dpbGRjaGFycy4gIEFsbG93cyBleHBhbmRpbmcgInplXGtyYSIsIHdoZW4gJ2lzaycgaW5jbHVkZXMgYSBiYWNrc2xhc2guCisKK05ldyBpY29uIGZvciB0aGUgV2luMzIgR1VJLgorCisiOnRhZyIsICI6dHNlbGVjdCIgZXRjLiBvbmx5IHVzZSB0aGUgYXJndW1lbnQgYXMgYSByZWdleHAgd2hlbiBpdCBzdGFydHMKK3dpdGggJy8nLiAgQXZvaWRzIHRoYXQgIjp0YWcgeHh+IiBnaXZlcyBhbiBlcnJvciBtZXNzYWdlOiAiTm8gcHJldmlvdXMgc3ViLgorcmVnZXhwIi4gIEFsc28sIHdoZW4gdGhlIDp0YWcgYXJndW1lbnQgY29udGFpbmVkIHdpbGRjYXJkIGNoYXJhY3RlcnMsIGl0IHdhcworbm90IFZpIGNvbXBhdGlibGUuCitXaGVuIHVzaW5nICcvJywgdGhlIGFyZ3VtZW50IGlzIHRha2VuIGxpdGVyYWxseSB0b28sIHdpdGggYSBoaWdoZXIgcHJpb3JpdHksCitzbyBpdCdzIGZvdW5kIGJlZm9yZSB3aWxkY2FyZCBtYXRjaGVzLgorT25seSB3aGVuIHRoZSAnLycgaXMgdXNlZCBhcmUgbWF0Y2hlcyB3aXRoIGRpZmZlcmVudCBjYXNlIGZvdW5kLCBldmVuIHRob3VnaAorJ2lnbm9yZWNhc2UnIGlzbid0IHNldC4KK0NoYW5nZWQgImdeXSIgdG8gb25seSBkbyAiOnRzZWxlY3QiIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uIG1hdGNoaW5nIHRhZy4KKworQ2hhbmdlZCBzb21lIG9mIHRoZSBkZWZhdWx0IGNvbG9ycywgYmVjYXVzZSB0aGV5IHdlcmUgbm90IHZlcnkgcmVhZGFibGUgb24gYQorZGFyayBiYWNrZ3JvdW5kLgorCitBIGNoYXJhY3RlciBvZmZzZXQgdG8gYSBzZWFyY2ggcGF0dGVybiBjYW4gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IG9yCitwcmV2aW91cyBsaW5lLiAgQWxzbyBmaXhlcyB0aGF0ICIvcGF0dGVybi9lKzIiIGdvdCBzdHVjayBvbiAicGF0dGVybiIgYXQgdGhlCitlbmQgb2YgYSBsaW5lLgorCitEb3VibGUtY2xpY2tzIGluIHRoZSBzdGF0dXMgbGluZSBkbyBubyBsb25nZXIgc3RhcnQgVmlzdWFsIG1vZGUuICBEcmFnZ2luZyBhCitzdGF0dXMgbGluZSBubyBsb25nZXIgc3RvcHMgVmlzdWFsIG1vZGUuCisKK1BlcmwgaW50ZXJmYWNlOiBCdWZmZXJzKCkgYW5kIFdpbmRvd3MoKSBub3cgdXNlIG1vcmUgbG9naWNhbCBhcmd1bWVudHMsIGxpa2UKK3RoZXkgYXJlIHVzZWQgaW4gdGhlIHJlc3Qgb2YgVmltIChNb29yZSkuCisKK0luaXQgJyIgbWFyayB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBsaW5lLiAgTWFrZXMgaXQgcG9zc2libGUgdG8KK3VzZSAnIiBpbiBhbiBhdXRvY29tbWFuZCB3aXRob3V0IGdldHRpbmcgYW4gZXJyb3IgbWVzc2FnZS4KKworCitBZGRlZAkJCQkJCQkqYWRkZWQtNS4xKgorLS0tLS0KKworInNoZWxsX2Vycm9yIiBpbnRlcm5hbCB2YXJpYWJsZTogcmVzdWx0IG9mIGxhc3Qgc2hlbGwgY29tbWFuZC4KKworIjplY2hvaGwiIGNvbW1hbmQ6IFNldCBoaWdobGlnaHRpbmcgZm9yICI6ZWNobyIuCisKKydTJyBmbGFnIGluICdoaWdobGlnaHQnIGFuZCBTdGF0dXNMaW5lTkMgaGlnaGxpZ2h0IGdyb3VwOiBoaWdobGlnaHRpbmcgZm9yCitzdGF0dXMgbGluZSBvZiBub3QtY3VycmVudCB3aW5kb3cuICBEZWZhdWx0IGlzIHRvIHVzZSBib2xkIGZvciBjdXJyZW50Cit3aW5kb3cuCisKK0FkZGVkIGJ1ZmZlcl9uYW1lKCkgYW5kIGJ1ZmZlcl9udW1iZXIoKSBmdW5jdGlvbnMgKEFhcm9uKS4KK0FkZGVkIGZsYWdzIGFyZ3VtZW50ICJnIiB0byBzdWJzdGl0dXRlKCkgZnVuY3Rpb24gKEFhcm9uKS4KK0FkZGVkIHdpbmhlaWdodCgpIGZ1bmN0aW9uLgorCitXaW4zMjogV2hlbiBhbiBleHRlcm5hbCBjb21tYW5kIHN0YXJ0cyB3aXRoICJzdGFydCAiLCBubyBjb25zb2xlIGlzIG9wZW5lZAorZm9yIGl0IChBYXJvbikuCisKK1dpbjMyIGNvbnNvbGU6IFVzZSB0ZXJtY2FwIGNvZGVzIGZvciBib2xkL3JldmVyc2UgYmFzZWQgb24gdGhlIGN1cnJlbnQKK2NvbnNvbGUgYXR0cmlidXRlcy4KKworQ29uZmlndXJlIGNoZWNrIGZvciAic3RyaXAiLiAoTmFwaWVyKQorCitDVFJMLVIgQ1RSTC1SIHggaW4gSW5zZXJ0IG1vZGU6IEluc2VydCB0aGUgY29udGVudHMgb2YgYSByZWdpc3RlciBsaXRlcmFsbHksCitpbnN0ZWFkIG9mIGFzIHR5cGVkLgorCitNYWRlIGEgZmV3ICJObyBtYXRjaCIgZXJyb3IgbWVzc2FnZXMgbW9yZSBpbmZvcm1hdGl2ZSBieSBhZGRpbmcgdGhlIHBhdHRlcm4KK3RoYXQgZGlkbid0IG1hdGNoLgorCisibWFrZSBpbnN0YWxsIiBub3cgYWxzbyBjb3BpZXMgdGhlIG1hY3JvIGZpbGVzLgorCit0b29scy90Y2x0YWdzLCBhIHNoZWxsIHNjcmlwdCB0byBnZW5lcmF0ZSBhIHRhZ3MgZmlsZSBmcm9tIGEgVENMIGZpbGUuCisKKyItLXdpdGgtdGxpYiIgc2V0dGluZyBmb3IgY29uZmlndXJlLiAgRWFzeSB3YXkgdG8gdXNlIHRlcm1saWI6ICIuL2NvbmZpZ3VyZQorLS13aXRoLXRsaWI9dGVybWxpYiIuCisKKyd1JyBmbGFnIGluICdjaW5vJyBmb3Igc2V0dGluZyB0aGUgaW5kZW50IGZvciBjb250YWluZWQgKCkgcGFydHMuCisKK1doZW4gV2luMzIgT0xFIHZlcnNpb24gY2FuJ3QgbG9hZCB0aGUgcmVnaXN0ZXJlZCB0eXBlIGxpYnJhcnksIGFzayB0aGUgdXNlcgoraWYgaGUgd2FudHMgdG8gcmVnaXN0ZXIgVmltIG5vdy4gKEVyaGFyZHQpCitXaW4zMiB3aXRoIE9MRTogV2hlbiByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHksIGV4aXQgVmltLgorSW5jbHVkZWQgVmlzVmltIDEuMWIsIHdpdGggYSBmZXcgZW5oYW5jZW1lbnRzIGFuZCB0aGUgbmV3IGljb24gKEhlaWtvCitFcmhhcmR0KS4KKworQWRkZWQgcGF0Y2ggZnJvbSBWaW5jZSBOZWdyaSBmb3IgV2luMzJzIHN1cHBvcnQuICBOZWVkcyB0byBiZSBjb21waWxlZCB3aXRoCitWQyA0LjEhCisKK1BlcmwgaW50ZXJmYWNlOiBBZGRlZCAkY3VyYnVmLiAgUmF0aW9uYWxpemVkIEJ1ZmZlcnMoKSBhbmQgV2luZG93cygpLgorKE1vb3JlKSBBZGRlZCAiZ3JvdXAiIGFyZ3VtZW50IHRvIE1zZygpLgorCitJbmNsdWRlZCBQZXJsIGZpbGVzIGluIERPUyBzb3VyY2UgYXJjaGl2ZS4gIENoYW5nZWQgTWFrZWZpbGUuYm9yIGFuZAorTWFrZWZpbGUudzMyIHRvIHN1cHBvcnQgYnVpbGRpbmcgYSBXaW4zMiB2ZXJzaW9uIHdpdGggUGVybCBpbmNsdWRlZC4KKworSW5jbHVkZWQgbmV3IE1ha2VmaWxlLnczMiBmcm9tIEtlbiBTY290dC4gIE5vdyBpdCdzIGFibGUgdG8gbWFrZSBhbGwgV2luMzIKK3ZlcnNpb25zLCBpbmNsdWRpbmcgT0xFLCBQZXJsIGFuZCBQeXRob24uCisKK0FkZGVkIENUUkwtVyBnIF0gYW5kIENUUkwtVyBnIF5dOiBzcGxpdCB3aW5kb3cgYW5kIGRvIGddIG9yIGdeXS4KKworQWRkZWQgImddIiB0byBhbHdheXMgZG8gIjp0c2VsZWN0IiBmb3IgdGhlIGlkZW50IHVuZGVyIHRoZSBjdXJzb3IuCitBZGRlZCAiOnRqdW1wIiBhbmQgIjpzdGp1bXAiIGNvbW1hbmRzLgorSW1wcm92ZWQgbGlzdGluZyBvZiAiOnRzZWxlY3QiIHdoZW4gdGFnIG5hbWVzIGFyZSBhIGJpdCBsb25nLgorCitJbmNsdWRlZCBwYXRjaGVzIGZvciB0aGUgTWFjaW50b3NoIHZlcnNpb24uIEFsc28gZm9yIFB5dGhvbiBpbnRlcmZhY2UuCisoU3QtQW1hbnQpCisKKyI6YnVmIGZvbyIgbm93IGFsc28gcmVzdG9yZXMgY3Vyc29yIGNvbHVtbiwgd2hlbiB0aGUgYnVmZmVyIHdhcyB1c2VkIGJlZm9yZS4KKworQWRqdXN0ZWQgdGhlIE1ha2VmaWxlIGZvciBkaWZmZXJlbnQgZmluYWwgZGVzdGluYXRpb25zIGZvciB0aGUgc3ludGF4IGZpbGVzCithbmQgc2NyaXB0cyAoZm9yIERlYmlhbiBMaW51eCkuCisKK0FtaWdhOiAkVklNIGNhbiBiZSB1c2VkIGV2ZXJ5d2hlcmUuICBXaGVuICRWSU0gaXMgbm90IGRlZmluZWQsICJWSU06IiBpcwordXNlZC4gIFRoaXMgZml4ZXMgdGhhdCAiVklNOiIgaGFkIHRvIGJlIGFzc2lnbmVkIGZvciB0aGUgaGVscCBmaWxlcywgYW5kCiskVklNIHNldCBmb3IgdGhlIHN5bnRheCBmaWxlcy4gIE5vdyBlaXRoZXIgb2YgdGhlc2Ugd29yay4KKworU29tZSB4dGVybXMgc2VuZCB2dDEwMCBjb21wYXRpYmxlIGZ1bmN0aW9uIGtleXMgRjEtRjQuICBTaW5jZSBpdCdzIG5vdAorcG9zc2libGUgdG8gZGV0ZWN0IHRoaXMsIHJlY29nbml6ZSBib3RoIHR5cGUgb2Yga2V5cyBhbmQgdHJhbnNsYXRlIHRoZW0gdG8KKzxGMT4gLSA8RjQ+LgorCitBZGRlZCAiVmltRW50ZXIiIGF1dG9jb21tYW5kLiAgRXhlY3V0ZWQgYWZ0ZXIgbG9hZGluZyBhbGwgdGhlIHN0YXJ0dXAgc3R1ZmYuCisKK0JlT1MgdmVyc2lvbiBub3cgYWxzbyBydW5zIG9uIEludGVsIENQVXMgKFNlaWJlcnQpLgorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC01LjEqCistLS0tLQorCisiOnRzIiBjaGFuZ2VkIHBvc2l0aW9uIGluIHRoZSB0YWcgc3RhY2sgd2hlbiBjYW5jZWxsZWQgd2l0aCA8Q1I+LgorIjp0cyIgY2hhbmdlZCB0aGUgY3Vyc29yIHBvc2l0aW9uIGZvciBDVFJMLVQgd2hlbiBjYW5jZWxsZWQgd2l0aCA8Q1I+LgorIjp0biIgd291bGQgYWx3YXlzIGp1bXAgdG8gdGhlIHNlY29uZCBtYXRjaC4JV2FzIHVzaW5nIHRoZSB3cm9uZyBlbnRyeSBpbgordGhlIHRhZyBzdGFjay4KK0RvaW5nICJ0YWcgZm9vIiwgdGhlbiAiOnRzZWxlY3QiLCBvdmVyd3JvdGUgdGhlIG9yaWdpbmFsIGN1cnNvciBwb3NpdGlvbiBpbgordGhlIHRhZyBzdGFjay4KKworIm1ha2UgaW5zdGFsbCIgY2hhbmdlZCB0aGUgdmltLjEgbWFucGFnZSBpbiBhIHdyb25nIHdheSwgY2F1c2luZyAiZG9jL2RvYyIKK3RvIGFwcGVhciBmb3IgdGhlIGRvY3VtZW50YXRpb24gZmlsZXMuCisKK1doZW4gY29tcGlsZWQgd2l0aCBNQVhfRkVBVCwgeHRlcm0gbW91c2UgaGFuZGxpbmcgZmFpbGVkLiAgV2FzIGNhdXNlZCBieSBERUMKK21vdXNlIGhhbmRsaW5nIGludGVyZmVyaW5nLgorCitXYXMgbGVha2luZyBtZW1vcnkgd2hlbiB1c2luZyBzZWxlY3Rpb24gaW4gWDExLgorCitDVFJMLUQgaGFsZndheSBhIGNvbW1hbmQtbGluZSBsZWZ0IHNvbWUgY2hhcmFjdGVycyBiZWhpbmQgdGhlIGZpcnN0IGxpbmUocykKK29mIHRoZSBsaXN0aW5nLgorCitXaGVuIGV4cGFuZGluZyBkaXJlY3RvcmllcyBmb3IgIjpzZXQgcGF0aD0iLCBwdXQgdHdvIGV4dHJhIGJhY2tzbGFzaGVzCitiZWZvcmUgYSBzcGFjZSBpbiBhIGRpcmVjdG9yeSBuYW1lLgorCitXaGVuICdsaXNwJyBzZXQsIGZpcnN0IGxpbmUgb2YgYSBmdW5jdGlvbiB3b3VsZCBiZSBpbmRlbnRlZC4gIE5vdyBpdHMgaW5kZW50CitpcyBzZXQgdG8gemVyby4gIEFuZCB1c2UgdGhlIGluZGVudCBvZiB0aGUgZmlyc3QgcHJldmlvdXMgbGluZSB0aGF0IGlzIGF0Cit0aGUgc2FtZSAoKSBsZXZlbC4gIEFkZGVkIHRlc3QzMy4KKworInNvPEVzYz51IiBpbiBhbiBlbXB0eSBmaWxlIGRpZG4ndCB3b3JrLgorCitET1M6ICJzZWVrIGVycm9yIGluIHN3YXAgZmlsZSB3cml0ZSIgZXJyb3JzLCB3aGVuIHVzaW5nIERPUyA2LjIgc2hhcmUuZXhlLAorYmVjYXVzZSB0aGUgc3dhcCBmaWxlIHdhcyBtYWRlIGhpZGRlbi4gIEl0J3Mgbm8gbG9uZ2VyIGhpZGRlbi4KKworIjpnbG9iYWwiIGNvbW1hbmQgd291bGQgc29tZXRpbWVzIG5vdCBleGVjdXRlIG9uIGEgbWF0Y2hpbmcgbGluZS4gIEhhcHBlbmVkCit3aGVuIGEgZGF0YSBibG9jayBpcyBmdWxsIGluIG1sX3JlcGxhY2UoKS4KKworRm9yIEFJWCB1c2UgYSB0Z2V0ZW50IGJ1ZmZlciBvZiAyMDQ4IGJ5dGVzLCBpbnN0ZWFkIG9mIDEwMjQuCisKK1dpbjMyIGd2aW0gbm93IG9ubHkgc2V0cyB0aGUgY29uc29sZSBzaXplIGZvciBleHRlcm5hbCBjb21tYW5kcyB0byAyNXg4MAorb24gV2luZG93cyA5NSwgbm90IG9uIE5ULgorCitXaW4zMiBjb25zb2xlOiBEZWFkIGtleSBjb3VsZCBjYXVzZSBhIGNyYXNoLCBiZWNhdXNlIG9mIGEgbWlzc2luZyAiV0lOQVBJIgorKERlc2hwYW5kZSkuCisKK1RoZSByaWdodCBtb3VzZSBidXR0b24gc3RhcnRlZCBWaXN1YWwgbW9kZSwgZXZlbiB3aGVuICdtb3VzZScgaXMgZW1wdHksIGFuZAoraW4gdGhlIGNvbW1hbmQtbGluZSwgYSBsZWZ0IGNsaWNrIG1vdmVkIHRoZSBjdXJzb3Igd2hlbiAnbW91c2UnIGlzIGVtcHR5LgorSW4gVmlzdWFsIG1vZGUsICduJyBpbiAnbW91c2UnIHdvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiAndicuCisKK0EgYmxpbmtpbmcgY3Vyc29yIG9yIGZvY3VzIGNoYW5nZSBjbGVhcmVkIGEgbm9uLVZpc3VhbCBzZWxlY3Rpb24uCisKK0NUUkwtSG9tZSBhbmQgQ1RSTC1FbmQgZGlkbid0IHdvcmsgZm9yIE1TLURPUyB2ZXJzaW9ucy4KKworQ291bGQgaW5jbHVkZSBOVUwgaW4gJ2lza2V5d29yZCcsIGNhdXNpbmcgYSBjcmFzaCB3aGVuIGRvaW5nIGluc2VydCBtb2RlCitjb21wbGV0aW9uLgorCitVc2UgX2Rvc19jb21taXQoKSB0byBmbHVzaCB0aGUgc3dhcCBmaWxlIHRvIGRpc2sgZm9yIE1TRE9TIDE2IGJpdCB2ZXJzaW9uLgorCitJbiBtYXBwaW5ncywgQ1RSTC1IIHdhcyByZXBsYWNlZCBieSB0aGUgYmFja3NwYWNlIGtleSBjb2RlLiAgVGhpcyBjYXVzZWQKK3Byb2JsZW1zIHdoZW4gaXQgd2FzIHVzZWQgYXMgdGV4dCwgZS5nLiAiOm1hcCBfVSA6JXMvLl5ILy9nPENSPiIuCisKKyI6c2V0IHRfQ289MCIgd2FzIG5vdCBoYW5kbGVkIGxpa2UgYSBub3JtYWwgdGVybS4gIE5vdyBpdCdzIHRyYW5zbGF0ZWQgaW50bworIjpzZXQgdF9Dbz0iLCB3aGljaCB3b3Jrcy4KKworRm9yICI6c3ludGF4IGtleXdvcmQiIHRoZSAidHJhbnNwYXJlbnQiIG9wdGlvbiBkaWQgd29yaywgYWx0aG91Z2ggbm90CittZW50aW9uZWQgaW4gdGhlIGhlbHAuICBCdXQgc3luSUQoKSByZXR1cm5lZCB3cm9uZyBuYW1lLgorCisiZ3FHIiBpbiBhIGZpbGUgd2l0aCBvbmUtd29yZC1wZXItbGluZSAoZS5nLiBhIGRpY3Rpb25hcnkpIHdhcyB2ZXJ5IHNsb3cgYW5kCitub3QgaW50ZXJydXB0YWJsZS4KKworImdxIiBvcGVyYXRvciBpbnNlcnRlZCBzY3JlZW4gbGluZXMgaW4gdGhlIHdyb25nIHNpdHVhdGlvbi4gIE5vdyBzY3JlZW4KK2xpbmVzIGFyZSBpbnNlcnRlZCBvciBkZWxldGVkIHdoZW4gdGhpcyBzcGVlZHMgdXAgZGlzcGxheWluZy4KKworY2luZGVudCB3YXMgd3Jvbmcgd2hlbiBhbiAiaWYiIGNvbnRhaW5lZCAiKCgiLgorCisncicgZmxhZyBpbiAndmltaW5mbycgd2FzIG5vdCB1c2VkIGZvciAnJScuICBDb3VsZCBnZXQgZmlsZXMgaW4gdGhlIGJ1ZmZlcgorbGlzdCBmcm9tIHJlbW92YWJsZSBtZWRpYS4KKworV2luMzIgR1VJIHdpdGggT0xFOiBpZl9vbGVfdmMubWFrIGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb2plY3QuCitIYW5kLWVkaXRlZCB0byBmaXggdGhpcy4uLgorCitXaXRoICdub3NvbCcgc2V0LCBkb2luZyAiJGtkdyIgYmVsb3cgYW4gZW1wdHkgbGluZSBwb3NpdGlvbmVkIHRoZSBjdXJzb3IgYXQKK3RoZSBlbmQgb2YgdGhlIGxpbmUuCisKK0RvczMyIHZlcnNpb24gY2hhbmdlZCAiXGRpclxmaWxlIiBpbnRvICIvZGlyL2ZpbGUiLCB0byB3b3JrIGFyb3VuZCBhIERKR1BQCitidWcuICBUaGF0IGJ1ZyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBmaXhlZCwgdGhlcmVmb3JlIHRoaXMgdHJhbnNsYXRpb24gaGFzCitiZWVuIHJlbW92ZWQuCisKKyIvXioiIGRpZG4ndCB3b3JrIChmaW5kICcqJyBpbiBmaXJzdCBjb2x1bW4pLgorCisiPGFmaWxlPiIgd2FzIG5vdCBhbHdheXMgc2V0IGZvciBhdXRvY29tbWFuZHMuICBFLmcuLCBmb3IgIjphdSBCdWZFbnRlciAqCitsZXQgJnRhZ3MgPSBleHBhbmQoIjxhZmlsZT46cDpoIikgLiAiL3RhZ3MiLgorCitJbiBhbiB4dGVybSwgdGhlIHdpbmRvdyBtYXkgYmUgYSBjaGlsZCBvZiB0aGUgb3V0ZXIgeHRlcm0gd2luZG93LiAgVXNlIHRoZQorcGFyZW50IHdpbmRvdyB3aGVuIGdldHRpbmcgdGhlIHRpdGxlIGFuZCBpY29uIG5hbWVzLiAoU21pdGgpCisKK1doZW4gc3RhcnRpbmcgd2l0aCAiZ3ZpbSAtYmcgYmxhY2sgLWZnIHdoaXRlIiwgdGhlIHZhbHVlIG9mICdiYWNrZ3JvdW5kJyBpcworb25seSBzZXQgYWZ0ZXIgcmVhZGluZyB0aGUgLmd2aW1yYyBmaWxlLiAgVGhpcyBjYXVzZXMgYSAiOnN5bnRheCBvbiIgdG8gdXNlCit0aGUgd3JvbmcgY29sb3JzLiAgTm93IGFsbG93IHVzaW5nICI6Z3VpIiB0byBvcGVuIHRoZSBHVUkgd2luZG93IGFuZCBzZXQgdGhlCitjb2xvcnMuICBQcmV2aW91c2x5ICI6Z3VpIiBpbiBhIGd2aW1yYyBjcmFzaGVkIFZpbS4KKwordGVtcG5hbWUoKSByZXR1cm5lZCB0aGUgc2FtZSBuYW1lIGFsbCB0aGUgdGltZSwgdW5sZXNzIHRoZSBmaWxlIHdhcyBhY3R1YWxseQorY3JlYXRlZC4gIE5vdyB0aGVyZSBhcmUgYXQgbGVhc3QgMjYgZGlmZmVyZW50IG5hbWVzLgorCitGaWxlIG5hbWUgdXNlZCBmb3IgPGFmaWxlPiB3YXMgc29tZXRpbWVzIGZ1bGwgcGF0aCwgc29tZXRpbWVzIGZpbGUgbmFtZQorcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3RvcnkuCisKK1doZW4gJ2JhY2tncm91bmQnIHdhcyBzZXQgYWZ0ZXIgdGhlIEdVSSB3aW5kb3cgd2FzIG9wZW5lZCwgaXQgY291bGQgY2hhbmdlCitjb2xvcnMgdGhhdCB3ZXJlIHNldCBieSB0aGUgdXNlciBpbiB0aGUgLmd2aW1yYyBmaWxlLiAgTm93IGl0IG9ubHkgY2hhbmdlcworY29sb3JzIHRoYXQgaGF2ZSBub3QgYmVlbiBzZXQgYnkgdGhlIHVzZXIuCisKK0lnbm9yZSBzcGVjaWFsIGNoYXJhY3RlcnMgYWZ0ZXIgYSBDU0kgaW4gdGhlIEdVSSB2ZXJzaW9uLiAgVGhlc2UgY291bGQgYmUKK2ludGVycHJldGVkIGFzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHdyb25nIHdheS4gKFN0LUFtYW50KQorCitNZW1vcnkgbGVhayBpbiBmYXJzaSBjb2RlLCB3aGVuIHVzaW5nIHNlYXJjaCBvciAiOnMiIGNvbW1hbmQuCitGYXJzaSBzdHJpbmcgcmV2ZXJzaW5nIGZvciBhIG1hcHBpbmcgd2FzIG9ubHkgZG9uZSBmb3IgbmV3IG1hcHBpbmdzLiAgTm93IGl0CithbHNvIHdvcmtzIGZvciByZXBsYWNpbmcgYSBtYXBwaW5nLgorCitDcmFzaCBpbiBXaW4zMiB3aGVuIHVzaW5nIGEgZmlsZSBuYW1lIGxvbmdlciB0aGFuIF9NQVhfUEFUSC4gKEFhcm9uKQorCitXaGVuIEJ1ZkRlbGV0ZSBhdXRvY29tbWFuZHMgd2VyZSBleGVjdXRlZCwgc29tZSB0aGluZ3MgZm9yIHRoZSBidWZmZXIgd2VyZQorYWxyZWFkeSBkZWxldGVkIChlc3AuIFBlcmwgc3R1ZmYpLgorCitQZXJsIGludGVyZmFjZTogQnVmZmVyIHNwZWNpZmljIGl0ZW1zIHdlcmUgZGVsZXRlZCB0b28gc29vbjsgZml4ZXMgInNjcmVlbgorbm8gbG9uZ2VyIGV4aXN0cyIgbWVzc2FnZXMuICAoTW9vcmUpCisKK1RoZSBQZXJsIGZ1bmN0aW9ucyBkaWRuJ3Qgc2V0IHRoZSAnbW9kaWZpZWQnIGZsYWcuCisKK2xpbmsuc2ggZGlkIG5vdCByZXR1cm4gYW4gZXJyb3Igb24gZXhpdCwgd2hpY2ggbWF5IGNhdXNlIFZpbSB0byBzdGFydAoraW5zdGFsbGluZywgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8gZXhlY3V0YWJsZSB0byBpbnN0YWxsLiAoUmllaG0pCisKK1ZpIGluY29tcGF0aWJpbGl0eTogSW4gVmkgIi4iIHJlZG9lcyB0aGUgInkiIGNvbW1hbmQuICBBZGRlZCB0aGUgJ3knIGZsYWcgdG8KKydjcG9wdGlvbnMnLiAgT25seSBmb3IgJ2NvbXBhdGlibGUnIG1vZGUuCisKKyI6ZWNob2hsIiBkZWZpbmVkIGEgbmV3IGdyb3VwLCB3aGVuIHRoZSBhcmd1bWVudCB3YXMgbm90IGFuIGV4aXN0aW5nIGdyb3VwLgorCisic3luIG9uIiBhbmQgIjpzeW4gb2ZmIiBjb3VsZCBtb3ZlIHRoZSBjdXJzb3IsIGlmIHRoZXJlIGlzIGEgaGlkZGVuIGJ1ZmZlcgordGhhdCBpcyBzaG9ydGVyIHRoYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorCitUaGUgIiBtYXJrIHdhcyBub3Qgc2V0IHdoZW4gZG9pbmcgIjpiIGZpbGUiLgorCitXaGVuIGEgIm5leHRncm91cCIgaXMgdXNlZCB3aXRoICJza2lwd2hpdGUiIGluIHN5bnRheCBoaWdobGlnaHRpbmcsIHNwYWNlIGF0Cit0aGUgZW5kIG9mIHRoZSBsaW5lIG1hZGUgdGhlIG5leHRncm91cCBhbHNvIGJlIGZvdW5kIGluIHRoZSBuZXh0IGxpbmUuCisKKyI6aGUgZzxDVFJMLUQ+IiwgdGhlbiAiOiIgYW5kIGJhY2tzcGFjZSB0byB0aGUgc3RhcnQgZGlkbid0IHJlZHJhdy4KKworWDExIEdVSTogImd2aW0gLXJ2IiByZXZlcnNlZCB0aGUgY29sb3JzIHR3aWNlIG9uIFN1bi4gIE5vdyBWaW0gY2hlY2tzIGlmIHRoZQorcmVzdWx0IGlzIHJlYWxseSByZXZlcnNlIHZpZGVvIChiYWNrZ3JvdW5kIGRhcmtlciB0aGFuIGZvcmVncm91bmQpLgorCisiY2F0IGxpbmsuc2ggfCB2aW0gLSIgZGlkbid0IHNldCBzeW50YXggaGlnaGxpZ2h0aW5nLgorCitXaW4zMjogRXhwYW5kaW5nICJmaWxlLnN3PyIgbWF0Y2hlZCAiLmZpbGUuc3dwIi4gIFRoaXMgaXMgYW4gZXJyb3Igb2YKK0ZpbmRuZXh0RmlsZSgpIHRoYXQgd2UgbmVlZCB0byB3b3JrIGFyb3VuZC4gIChLaWxnb3JlKQorCisiZ3FncSIgZ2F2ZSBhbiAiSW52YWxpZCBsbnVtIiBlcnJvciBvbiB0aGUgbGFzdCBsaW5lLgorRm9ybWF0dGluZyB3aXRoICJncSIgZGlkbid0IGZvcm1hdCB0aGUgZmlyc3QgbGluZSBhZnRlciBhIGNoYW5nZSBvZiBjb21tZW50CitsZWFkZXIuCisKK1RoZXJlIHdhcyBubyBjaGVjayBmb3Igb3V0LW9mLW1lbW9yeSBpbiB3aW5fYWxsb2MoKS4KKworInZpbSAtaCIgZGlkbid0IG1lbnRpb24gIi1yZWdpc3RlciIgYW5kICItdW5yZWdpc3RlciIgZm9yIHRoZSBPTEUgdmVyc2lvbi4KKworQ291bGQgbm90IGluY3JlYXNlICdjbWRoZWlnaHQnIHdoZW4gdGhlIGxhc3Qgd2luZG93IGlzIG9ubHkgb25lIGxpbmUuICBOb3cKK290aGVyIHdpbmRvd3MgYXJlIGFsc28gbWFkZSBzbWFsbGVyLCB3aGVuIG5lY2Vzc2FyeS4KKworQWRkZWQgYSBmZXcge30gdG8gYXZvaWQgInN1Z2dlc3QgYnJhY2VzIGFyb3VuZCIgd2FybmluZ3MgZnJvbSBnY2MgMi44LnguCitDaGFuZ2VkIHJldHVybiB0eXBlIG9mIG1haW4oKSBmcm9tIHZvaWQgdG8gaW50LiAoTmFtKQorCitVc2luZyAnficgdHdpY2UgaW4gYSBzdWJzdGl0dXRlIHBhdHRlcm4gY2F1c2VkIGEgY3Jhc2guCisKKyJzeW4gb24iIGFuZCAiOnN5biBvZmYiIGNvdWxkIHNjcm9sbCB0aGUgd2luZG93LCBpZiB0aGVyZSBpcyBhIGhpZGRlbiBidWZmZXIKK3RoYXQgaXMgc2hvcnRlciB0aGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKworIjppZiAwIHwgaWYgMSB8IGVuZGlmIHwgZW5kaWYiIGRpZG4ndCB3b3JrLiAgU2FtZSBmb3IgIjp3aGlsZSIgYW5kICJlbHNlaWYiLgorCitXaXRoIHR3byB3aW5kb3dzIG9uIG1vZGlmaWVkIGZpbGVzLCB3aXRoICdhdXRvd3JpdGUnIHNldCwgY3Vyc29yIGluIHNlY29uZAord2luZG93LCAiOnFhIiBnYXZlIGEgd2FybmluZyBmb3IgdGhlIGZpbGUgaW4gdGhlIGZpcnN0IHdpbmRvdywgYnV0IHRoZW4KK2F1dG8td3JvdGUgdGhlIGZpbGUgaW4gdGhlIHNlY29uZCB3aW5kb3cuIChXZWJiKQorCitXaW4zMiBHVUkgc2Nyb2xsYmFyIGNvdWxkIG9ubHkgaGFuZGxlIDMyNzY3IGxpbmVzLiAgQWxzbyBtYWtlcyB0aGUKK2ludGVsbGltb3VzZSB3aGVlbCB1c2UgdGhlIGNvbmZpZ3VyYWJsZSBudW1iZXIgb2Ygc2Nyb2xscy4gKFJvYmluc29uKQorCitXaGVuIHVzaW5nICdwYXRjaG1vZGUnLCBhbmQgdGhlIGJhY2t1cCBmaWxlIGlzIG9uIGFub3RoZXIgcGFydGl0aW9uLCB0aGUgZmlsZQorY29weWluZyBtZXNzZWQgdXAgdGhlIHdyaXRlLWZpbGUgbWVzc2FnZS4KKworR1VJIFgxMTogQWx0LUJhY2tzcGFjZSBhbmQgQWx0LURlbGV0ZSBkaWRuJ3Qgd29yay4KKworImAwIiBjb3VsZCBwdXQgdGhlIGN1cnNvciBhZnRlciB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUsIGNhdXNpbmcKK3Ryb3VibGUgZm9yIG90aGVyIGNvbW1hbmRzLCBsaWtlICJpIi4KKworV2hlbiBjb21wbGV0aW5nIHRhZ3MgaW4gaW5zZXJ0IG1vZGUgd2l0aCBeWF5dLCBzb21lIG1hdGNoZXMgd2VyZSBza2lwcGVkLAorYmVjYXVzZSB0aGUgY29tcGFyZSB3aXRoIG90aGVyIHRhZ3Mgd2FzIHdyb25nLiAgRS5nLiwgd2hlbiAibW51RmlsZVNhdmUiIHdhcworYWxyZWFkeSB0aGVyZSwgIm1udUZpbGUiIHdvdWxkIGJlIHNraXBwZWQuIChOZWdyaSkKKworV2hlbiBzY3JvbGxpbmcgdXAvZG93biwgYSBzeW50YXggaXRlbSB3aXRoICJrZWVwZW5kIiBkaWRuJ3Qgd29yayBwcm9wZXJseS4KK05vdyB0aGUgZmxhZ3MgYXJlIGFsc28gc3RvcmVkIGZvciB0aGUgc3ludGF4IHN0YXRlIGEgdGhlIHN0YXJ0IG9mIGVhY2ggbGluZS4KKworV2hlbiAnaWMnIHdhcyBjaGFuZ2VkIHdoaWxlICdobHNlYXJjaCcgaXMgb24sIHRoZXJlIHdhcyBubyByZWRyYXcgdG8gc2hvdyB0aGUKK2VmZmVjdC4KKworV2luMzIgR1VJOiBEb24ndCBkaXNwbGF5ICJObyB3cml0ZSBzaW5jZSBsYXN0IGNoYW5jZSIgaW4gYSBtZXNzYWdlIGJveCwgYnV0IGluCit0aGUgVmltIHdpbmRvdy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDUuMgkJCQkJCSp2ZXJzaW9uLTUuMioKKworSW1wcm92ZW1lbnRzIG1hZGUgYmV0d2VlbiB2ZXJzaW9uIDUuMSBhbmQgNS4yLgorCisKK0xvbmcgbGluZXMgZWRpdGFibGUJCQkJCSpsb25nLWxpbmVzKgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHNpbmdsZSBsb25nIGxpbmUgdGhhdCBkb2Vzbid0IGZpdCBpbiB0aGUgd2luZG93IGRvZXNuJ3Qgc2hvdyBhIGxpbmUgb2YgQEBACithbnltb3JlLiAgUmVkcmF3aW5nIHN0YXJ0cyBhdCBhIGNoYXJhY3RlciBmdXJ0aGVyIG9uIGluIHRoZSBsaW5lLCBzdWNoIHRoYXQKK3RoZSB0ZXh0IGFyb3VuZCB0aGUgY3Vyc29yIGNhbiBiZSBzZWVuLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBlZGl0IHRoZXNlCitsb25nIGxpbmVzIHdoZW4gd3JhcHBpbmcgaXMgb24uCisKKworRmlsZSBicm93c2VyIGFkZGVkCQkJCQkqZmlsZS1icm93c2VyLTUuMioKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgV2luMzIsIEF0aGVuYSBhbmQgTW90aWYgR1VJIGJyaW5nIHVwIGEgZmlsZSByZXF1ZXN0ZXIgaWYgdGhlIHVzZXIgYXNrcyB0bworIjpicm93c2UiIGZvciB0aGUgIjplIiwgIjp3IiwgIjpyIiwgIjpzbyIsICI6cmVkaXJlY3QiIGFuZAorIjpta2V4cmMvdmltcmMvdnNlc3MiIGNvbW1hbmRzLiAgOjpicm93c2UgZSAvZm9vL2JhciIgb3BlbnMgdGhlIHJlcXVlc3RlciBpbgordGhlIC9mb28vYmFyIGRpcmVjdG9yeSwgc28geW91IGNhbiBoYXZlIG5pY2UgbWFwcGluZyByaHMncyBsaWtlICI6YnJvd3NlIHNvCiskdmltL21hY3JvcyIuICBJZiBubyBpbml0aWFsIGRpciBzcGVjaWZpZWQgZm9yICI6YnJvd3NlIGUiLCBjYW4gYmUgY29tcGlsZWQgdG8KK2VpdGhlciBiZWdpbiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIG9yIHRoYXQgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLiAoTmVncmkKK2FuZCBLYWhuKQorQWRkZWQgdGhlICdicm93c2VkaXInIG9wdGlvbiwgd2l0aCB2YWx1ZSAiY3VycmVudCIsICJsYXN0IiBvciAiYnVmZmVyIi4gIFRlbGxzCit3ZXRoZXIgYSBicm93c2UgZGlhbG9nIHN0YXJ0cyBpbiBsYXN0IHVzZWQgZGlyLCBkaXIgb2YgY3VycmVudCBidWZmZXIsIG9yCitjdXJyZW50IGRpci4gICI6YnJvd3NlIHciIGlzIHVuYWZmZWN0ZWQuCitUaGUgZGVmYXVsdCBtZW51cyBoYXZlIGJlZW4gY2hhbmdlZCB0byB1c2UgdGhlICI6YnJvd3NlIiBjb21tYW5kLgorCisKK0RpYWxvZ3MgYWRkZWQJCQkJCQkqZGlhbG9ncy1hZGRlZCoKKy0tLS0tLS0tLS0tLS0KKworQWRkZWQgdGhlICI6Y29uZmlybSIgY29tbWFuZC4gIFdvcmtzIG9uICI6ZSIsICI6cSIsICI6dyIsICI6Y2wiLiAgV2luMzIsCitBdGhlbmEgYW5kIE1vdGlmIEdVSSB1c2VzIGEgd2luZG93LWRpYWxvZy4gIEFsbCBvdGhlciBwbGF0Zm9ybXMgY2FuIHVzZQorcHJvbXB0IGluIGNvbW1hbmQtbGluZS4gICI6Y29uZmlybSBxYSIgb2ZmZXJzIGEgY2hvaWNlIHRvIHNhdmUgYWxsIG1vZGlmaWVkCitmaWxlcy4KKworY29uZmlybSgpIGZ1bmN0aW9uOiBhbGxvd3MgdXNlciBhY2Nlc3MgdG8gdGhlIGNvbmZpcm0gZW5naW5lLgorCitBZGRlZCAndicgZmxhZyB0byAnZ3Vpb3B0aW9ucycuICBXaGVuIGluY2x1ZGVkLCBhIHZlcnRpY2FsIGJ1dHRvbiBsYXlvdXQgaXMKK2Fsd2F5cyB1c2VkIGZvciB0aGUgV2luMzIgR1VJIGRpYWxvZy4gIE90aGVyd2lzZSwgYSBob3Jpem9udGFsIGxheW91dCBpcworcHJlZmVycmVkLgorCitXaW4zMiBHVUk6ICI6cHJvbXB0ZmluZCIgYW5kICI6cHJvbXB0cmVwbCIgcG9wIHVwIGEgZGlhbG9nIHRvIGZpbmQvcmVwbGFjZS4KK1RvIGJlIHVzZWQgZnJvbSBhIG1lbnUgZW50cnkuIChOZWdyaSkKKworCitQb3B1cCBtZW51IGFkZGVkCQkJCQkqcG9wdXAtbWVudS1hZGRlZCoKKy0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB0aGUgJ21vdXNlbW9kZWwnIG9wdGlvbiBpcyBzZXQgdG8gInBvcHVwIiwgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbgorZGlzcGxheXMgdGhlIHRvcCBsZXZlbCBtZW51IGhlYWRlZCB3aXRoICJQb3BVcCIgYXMgcG9wLXVwIGNvbnRleHQgbWVudS4gIFRoZQorIlBvcFVwIiBtZW51IGlzIG5vdCBkaXNwbGF5ZWQgaW4gdGhlIG5vcm1hbCBtZW51IGJhci4gIFRoaXMgY3VycmVudGx5IG9ubHkKK3dvcmtzIGZvciBXaW4zMiBhbmQgQXRoZW5hIEdVSS4KKworCitTZWxlY3QgbW9kZSBhZGRlZAkJCQkJKm5ldy1TZWxlY3QtbW9kZSoKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0EgbmV3IG1vZGUgaGFzIGJlZW4gYWRkZWQ6ICJTZWxlY3QgbW9kZSIuICBJdCBpcyBsaWtlIFZpc3VhbCBtb2RlLCBidXQgdHlwaW5nCithIHByaW50YWJsZSBjaGFyYWN0ZXIgcmVwbGFjZXMgdGhlIHNlbGVjdGlvbi4KKy0gQ1RSTC1HIGNhbiBiZSB1c2VkIHRvIHRvZ2dsZSBiZXR3ZWVuIFZpc3VhbCBtb2RlIGFuZCBTZWxlY3QgbW9kZS4KKy0gQ1RSTC1PIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCBmcm9tIFNlbGVjdCBtb2RlIHRvIFZpc3VhbCBtb2RlIGZvciBvbmUgY29tbWFuZC4KKy0gQWRkZWQgJ3NlbGVjdG1vZGUnIG9wdGlvbjogdGVsbHMgd2hlbiB0byBzdGFydCBTZWxlY3QgbW9kZSBpbnN0ZWFkIG9mIFZpc3VhbAorICBtb2RlLgorLSBBZGRlZCAnbW91c2Vtb2RlbCcgb3B0aW9uOiBDaGFuZ2UgdXNlIG9mIG1vdXNlIGJ1dHRvbnMuCistIEFkZGVkICdrZXltb2RlbCcgb3B0aW9uOiB0ZWxscyB0byB1c2Ugc2hpZnRlZCBzcGVjaWFsIGtleXMgdG8gc3RhcnQgYQorICBWaXN1YWwgb3IgU2VsZWN0IG1vZGUgc2VsZWN0aW9uLgorLSBBZGRlZCAiOmJlaGF2ZSIuIENhbiBiZSB1c2VkIHRvIHF1aWNrbHkgc2V0ICdzZWxlY3Rtb2RlJywgJ21vdXNlbW9kZWwnCisgIGFuZCAna2V5bW9kZWwnIGZvciBNUy1XaW5kb3dzIGFuZCB4dGVybSBiZWhhdmlvci4KKy0gVGhlIHh0ZXJtLWxpa2Ugc2VsZWN0aW9uIGlzIG5vdyBjYWxsZWQgbW9kZWxlc3Mgc2VsZWN0aW9uLgorLSBWaXN1YWwgbW9kZSBtYXBwaW5ncyBhbmQgbWVudXMgYXJlIHVzZWQgaW4gU2VsZWN0IG1vZGUuICBUaGV5IGF1dG9tYXRpY2FsbHkKKyAgc3dpdGNoIHRvIFZpc3VhbCBtb2RlIGZpcnN0LiAgQWZ0ZXJ3YXJkcywgcmVzZWxlY3QgdGhlIGFyZWEsIHVubGVzcyBpdCB3YXMKKyAgZGVsZXRlZC4gIFRoZSAiZ1YiIGNvbW1hbmQgY2FuIGJlIHVzZWQgaW4gYSBtYXBwaW5nIHRvIHNraXAgdGhlIHJlc2VsZWN0aW9uLgorLSBBZGRlZCB0aGUgImdoIiwgImdIIiBhbmQgImdeSCIgY29tbWFuZHM6IHN0YXJ0IFNlbGVjdCAoaGlnaGxpZ2h0KSBtb2RlLgorLSBCYWNrc3BhY2UgaW4gU2VsZWN0IG1vZGUgZGVsZXRlcyB0aGUgc2VsZWN0ZWQgYXJlYS4KKworIm1zd2luLnZpbSIgc2NyaXB0LiAgU2V0cyBiZWhhdmlvciBtb3N0bHkgbGlrZSBNUy1XaW5kb3dzLgorCisKK1Nlc3Npb24gZmlsZXMgYWRkZWQJCQkJCSpuZXctc2Vzc2lvbi1maWxlcyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworIjpta3NbZXNzaW9uXSIgYWN0cyBsaWtlICJta3ZpbXJjIiwgYnV0IGFsc28gd3JpdGVzIHRoZSBmdWxsIGZpbGVuYW1lcyBvZiB0aGUKK2N1cnJlbnRseSBsb2FkZWQgYnVmZmVycyBhbmQgY3VycmVudCBkaXJlY3RvcnksIHNvIHRoYXQgOnNvJ2luZyB0aGUgZmlsZQorcmUtbG9hZHMgdGhvc2UgZmlsZXMgYW5kIGNkJ3MgdG8gdGhhdCBkaXJlY3RvcnkuICBBbHNvIHN0b3JlcyBhbmQgcmVzdG9yZXMKK3dpbmRvd3MuICBGaWxlIG5hbWVzIGFyZSBtYWRlIHJlbGF0aXZlIHRvIHNlc3Npb24gZmlsZS4KK1RoZSAnc2Vzc2lvbm9wdGlvbnMnIG9wdGlvbiBzZXRzIGJlaGF2aW9yIG9mICI6bWtzZXNzaW9uIi4gKE5lZ3JpKQorCisKK1VzZXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIGNvbW1hbmRzCQkJKm5ldy11c2VyLWRlZmluZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGRlZCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zLiAgRGVmaW5lZCB3aXRoICI6ZnVuY3Rpb24iIHVudGlsICI6ZW5kZnVuY3Rpb24iLgorQ2FsbGVkIHdpdGggIkZ1bmMoKSIuICBBbGxvd3MgdGhlIHVzZSBvZiBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuCitJbmNsdWRlZCBzdXBwb3J0IGZvciBsb2NhbCB2YXJpYWJsZXMgImw6bmFtZSIuICBSZXR1cm4gYSB2YWx1ZSB3aXRoICI6cmV0dXJuIi4KK1NlZSB8OmZ1bmN0aW9ufC4KK0NhbGwgYSBmdW5jdGlvbiB3aXRoICI6Y2FsbCIuICBXaGVuIHVzaW5nIGEgcmFuZ2UsIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yCitlYWNoIGxpbmUgaW4gdGhlIHJhbmdlLiB8OmNhbGx8CisibWFjcm9zL2p1c3RpZnkudmltIiBpcyBhbiBleGFtcGxlIG9mIHVzaW5nIHVzZXIgZGVmaW5lZCBmdW5jdGlvbnMuCitVc2VyIGZ1bmN0aW9ucyBkbyBub3QgY2hhbmdlIHRoZSBsYXN0IHVzZWQgc2VhcmNoIHBhdHRlcm4gb3IgdGhlIGNvbW1hbmQgdG8gYmUKK3JlZG9uZSB3aXRoICIuIi4KKydtYXhmdW5jZGVwdGgnIG9wdGlvbi4gIFJlc3RyaWN0cyB0aGUgZGVwdGggb2YgZnVuY3Rpb24gY2FsbHMuICBBdm9pZHMgdHJvdWJsZQorKGNyYXNoIGJlY2F1c2Ugb2Ygb3V0LW9mLW1lbW9yeSkgd2hlbiBhIGZ1bmN0aW9uIHVzZXMgZW5kbGVzcyByZWN1cnNpb24uCisKK1VzZXIgZGVmaW5hYmxlIEV4IGNvbW1hbmRzOiAiOmNvbW1hbmQiLCAiOmRlbGNvbW1hbmQiIGFuZCAiOmNvbWNsZWFyIi4KKyhNb29yZSkgIFNlZSB8dXNlci1jb21tYW5kc3wuCisKKworTmV3IGludGVyZmFjZXMJCQkJCQkqaW50ZXJmYWNlcy01LjIqCistLS0tLS0tLS0tLS0tLQorCitUY2wgaW50ZXJmYWNlLiAoV2lsa2VuKSAgU2VlIHx0Y2x8LgorVXNlcyB0aGUgIjp0Y2wiLCAiOnRjbGRvIiBhbmQgInRjbGZpbGUiIGNvbW1hbmRzLgorCitDc2NvcGUgc3VwcG9ydC4gKEthaG4pIChTZWtlcmEpICBTZWUgfGNzY29wZXwuCitVc2VzIHRoZSAiOmNzY29wZSIgYW5kICI6Y3N0YWciIGNvbW1hbmRzLiAgVXNlcyB0aGUgb3B0aW9ucyAnY3Njb3BlcHJnJywKKydjc2NvcGV0YWcnLCAnY3Njb3BldGFnb3JkZXInIGFuZCAnY3Njb3BldmVyYm9zZScuCisKKworTmV3IHBvcnRzCQkJCQkJKnBvcnRzLTUuMioKKy0tLS0tLS0tLQorCitBbWlnYSBHVUkgcG9ydC4gKE5pZWxzZW4pICBOb3QgdGVzdGVkIG11Y2ggeWV0IQorCitSSVNDIE9TIHZlcnNpb24uIChUaG9tYXMgTGVvbmFyZCkgIFNlZSB8cmlzY29zfC4KK1RoaXMgdmVyc2lvbiBjYW4gcnVuIGVpdGhlciB3aXRoIGEgR1VJIG9yIGluIHRleHQgbW9kZSwgZGVwZW5kaW5nIHVwb24gd2hlcmUKK2l0IGlzIGludm9rZWQuCitEZWxldGVkIHRoZSAib3NfYXJjaGllIiBmaWxlcywgdGhleSB3ZXJlIG5vdCB3b3JraW5nIGFueXdheS4KKworCitNdWx0aS1ieXRlIHN1cHBvcnQJCQkJCSpuZXctbXVsdGktYnl0ZSoKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitNdWx0aUJ5dGUgc3VwcG9ydCBmb3IgV2luMzIgR1VJLiAoQmFlaykKK1RoZSAnZmlsZWVuY29kaW5nJyBvcHRpb24gZGVjaWRlcyBob3cgdGhlIHRleHQgaW4gdGhlIGZpbGUgaXMgZW5jb2RlZC4KKyI6YXNjaWkiIHdvcmtzIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBNdWx0aS1ieXRlIGNoYXJhY3RlcnMgd29yayBvbgorV2luZG93cyA5NSwgZXZlbiB3aGVuIHVzaW5nIHRoZSBVUyB2ZXJzaW9uLiAoQWFyb24pCitOZWVkcyB0byBiZSBlbmFibGVkIGluIGZlYXR1cmUuaC4KK1RoaXMgaGFzIG5vdCBiZWVuIHRlc3RlZCBtdWNoIHlldCEKKworCitOZXcgZnVuY3Rpb25zCQkJCQkJKm5ldy1mdW5jdGlvbnMtNS4yKgorLS0tLS0tLS0tLS0tLQorCit8YnJvd3NlKCl8CXB1dHMgdXAgYSBmaWxlIHJlcXVlc3RlciB3aGVuIGF2YWlsYWJsZS4gKE5lZ3JpKQorfGVzY2FwZSgpfAllc2NhcGVzIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgd2l0aCBhIGJhY2tzbGFzaC4KK3xmbmFtZW1vZGlmeSgpfAltb2RpZmllcyBhIGZpbGUgbmFtZS4KK3xpbnB1dCgpfAlhc2tzIHRoZSB1c2VyIHRvIGVudGVyIGEgbGluZS4gKEFhcm9uKSBUaGVyZSBpcyBhIHNlcGFyYXRlCisJCWhpc3RvcnkgZm9yIGxpbmVzIHR5cGVkIGZvciB0aGUgaW5wdXQoKSBmdW5jdGlvbi4KK3xhcmdjKCl8Cit8YXJndigpfAljYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIGFyZ3VtZW50IGxpc3QuCit8d2luYnVmbnIoKXwJYnVmZmVyIG51bWJlciBvZiBhIHdpbmRvdy4gKEFhcm9uKQorfHdpbm5yKCl8CXdpbmRvdyBudW1iZXIuIChBYXJvbikKK3xtYXRjaHN0cigpfAlSZXR1cm4gbWF0Y2hlZCBzdHJpbmcuCit8c2V0bGluZSgpfAlTZXQgYSBsaW5lIHRvIGEgc3RyaW5nIHZhbHVlLgorCisKK05ldyBvcHRpb25zCQkJCQkJKm5ldy1vcHRpb25zLTUuMioKKy0tLS0tLS0tLS0tCisKKydhbGxvd3JldmlucycJRW5hYmxlIHRoZSBDVFJMLV8gY29tbWFuZCBpbiBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBtb2RlLgorJ2Jyb3dzZWRpcicJVGVsbHMgaW4gd2hpY2ggZGlyZWN0b3J5IGEgYnJvd3NlIGRpYWxvZyBzdGFydHMuCisnY29uZmlybScJd2hlbiBzZXQsIDpxIDp3IGFuZCA6ZSBjb21tYW5kcyBhbHdheXMgYWN0IGFzIGlmICI6Y29uZmlybSIKKwkJaXMgdXNlZC4gIChOZWdyaSkKKydjc2NvcGVwcmcnCisnY3Njb3BldGFnJworJ2NzY29wZXRhZ29yZGVyJworJ2NzY29wZXZlcmJvc2UnCVNldCB0aGUgfGNzY29wZXwgYmVoYXZpb3IuCisnZmlsZXR5cGUnCVJJU0MtT1Mgc3BlY2lmaWMgdHlwZSBvZiBmaWxlLgorJ2dyZXBmb3JtYXQnCisnZ3JlcHByZycJRm9yIHRoZSB8OmdyZXB8IGNvbW1hbmQuCisna2V5bW9kZWwnCVRlbGxzIHRvIHVzZSBzaGlmdGVkIHNwZWNpYWwga2V5cyB0byBzdGFydCBhIFZpc3VhbCBvciBTZWxlY3QKKwkJbW9kZSBzZWxlY3Rpb24uCisnbGlzdGNoYXJzJwlTZXQgY2hhcmFjdGVyIHRvIHNob3cgaW4gJ2xpc3QnIG1vZGUgZm9yIGVuZC1vZi1saW5lLCB0YWJzIGFuZAorCQl0cmFpbGluZyBzcGFjZXMuIChwYXJ0bHkgYnkgU21pdGgpIEFsc28gc2V0cyBjaGFyYWN0ZXIgdG8KKwkJZGlzcGxheSBpZiBhIGxpbmUgZG9lc24ndCBmaXQgd2hlbiAnbm93cmFwJyBpcyBzZXQuCisnbWF0Y2hwYWlycycJQWxsb3dzIG1hdGNoaW5nICc8JyB3aXRoICc+JywgYW5kIG90aGVyIHNpbmdsZSBjaGFyYWN0ZXIKKwkJcGFpcnMuCisnbW91c2Vmb2N1cycJV2luZG93IGZvY3VzIGZvbGxvd3MgbW91c2UgKHBhcnRseSBieSBUZXJoYWFyKS4gIENoYW5naW5nIHRoZQorCQlmb2N1cyB3aXRoIGEga2V5Ym9hcmQgY29tbWFuZCBtb3ZlcyB0aGUgcG9pbnRlciB0byB0aGF0CisJCXdpbmRvdy4gIEFsc28gbW92ZSB0aGUgcG9pbnRlciB3aGVuIGNoYW5naW5nIHRoZSB3aW5kb3cgbGF5b3V0CisJCShzcGxpdCB3aW5kb3csIGNoYW5nZSB3aW5kb3cgaGVpZ2h0LCBldGMuKS4KKydtb3VzZW1vZGVsJwlDaGFuZ2UgdXNlIG9mIG1vdXNlIGJ1dHRvbnMuCisnc2VsZWN0aW9uJwlXaGVuIHNldCB0byAiaW5jbHVzaXZlIiBvciAiZXhjbHVzaXZlIiwgdGhlIGN1cnNvciBjYW4gZ28gb25lCisJCWNoYXJhY3RlciBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUgaW4gVmlzdWFsIG9yIFNlbGVjdCBtb2RlLgorCQlXaGVuIHNldCB0byAib2xkIiB0aGUgb2xkIGJlaGF2aW9yIGlzIHVzZWQuICBXaGVuCisJCSJpbmNsdXNpdmUiLCB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgaXMgaW5jbHVkZWQgaW4gdGhlCisJCW9wZXJhdGlvbi4gIFdoZW4gdXNpbmcgImV4Y2x1c2l2ZSIsIHRoZSBuZXcgInZlIiBlbnRyeSBvZgorCQknZ3VpY3Vyc29yJyBpcyB1c2VkLiAgVGhlIGRlZmF1bHQgaXMgYSB2ZXJ0aWNhbCBiYXIuCisnc2VsZWN0bW9kZScJVGVsbHMgd2hlbiB0byBzdGFydCBTZWxlY3QgbW9kZSBpbnN0ZWFkIG9mIFZpc3VhbCBtb2RlLgorJ3Nlc3Npb25vcHRpb25zJyBTZXRzIGJlaGF2aW9yIG9mICI6bWtzZXNzaW9uIi4gKE5lZ3JpKQorJ3Nob3dmdWxsdGFnJwlXaGVuIGNvbXBsZXRpbmcgYSB0YWcgaW4gSW5zZXJ0IG1vZGUsIHNob3cgdGhlIHRhZyBzZWFyY2gKKwkJcGF0dGVybiAodGlkaWVkIHVwKSBhcyBhIGNob2ljZSBhcyB3ZWxsIChpZiB0aGVyZSBpcyBvbmUpLgorJ3N3YXBmaWxlJwlXaGV0aGVyIHRvIHVzZSBhIHN3YXAgZmlsZSBmb3IgYSBidWZmZXIuCisnc3ludGF4JwlXaGVuIGl0IGlzIHNldCwgdGhlIHN5bnRheCBieSB0aGF0IG5hbWUgaXMgbG9hZGVkLiAgQWxsb3dzIGZvcgorCQlzZXR0aW5nIGEgc3BlY2lmaWMgc3ludGF4IGZyb20gYSBtb2RlbGluZS4KKyd0dHltb3VzZScJQWxsb3dzIHVzaW5nIHh0ZXJtIG1vdXNlIGNvZGVzIGZvciB0ZXJtaW5hbHMgd2hpY2ggbmFtZQorCQlkb2Vzbid0IHN0YXJ0IHdpdGggInh0ZXJtIi4KKyd3aWxkaWdub3JlJwlMaXN0IG9mIHBhdHRlcm5zIGZvciBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgY29tcGxldGVkIGF0CisJCWFsbC4KKyd3aWxkbW9kZScJQ2FuIGJlIHVzZWQgdG8gc2V0IHRoZSB0eXBlIG9mIGV4cGFuc2lvbiBmb3IgJ3dpbGRjaGFyJy4KKwkJUmVwbGFjZXMgdGhlIENUUkwtVCBjb21tYW5kIGZvciBjb21tYW5kIGxpbmUgY29tcGxldGlvbi4KKwkJRG9uJ3QgYmVlcCB3aGVuIGxpc3RpbmcgYWxsIG1hdGNoZXMuCisnd2luYWx0a2V5cycJV2luMzIgYW5kIE1vdGlmIEdVSS4gIFdoZW4gInllcyIsIEFMVCBrZXlzIGFyZSBoYW5kbGVkCisJCWVudGlyZWx5IGJ5IHRoZSB3aW5kb3cgc3lzdGVtLiAgV2hlbiAibm8iLCBBTFQga2V5cyBhcmUgbmV2ZXIKKwkJdXNlZCBieSB0aGUgd2luZG93IHN5c3RlbS4gIFdoZW4gIm1lbnUiIGl0IGRlcGVuZHMgb24gd2hldGhlcgorCQlhIGtleSBpcyBhIG1lbnUgc2hvcnRjdXQuCisnd2lubWluaGVpZ2h0JwlNaW5pbWFsIGhlaWdodCBmb3IgZWFjaCB3aW5kb3cuICBEZWZhdWx0IGlzIDEuICBTZXQgdG8gMCBpZgorCQl5b3Ugd2FudCB6ZXJvLWxpbmUgd2luZG93cy4gIFNjcm9sbGJhciBpcyByZW1vdmVkIGZvcgorCQl6ZXJvLWhlaWdodCB3aW5kb3dzLiAoTmVncmkpCisKKworCitOZXcgRXggY29tbWFuZHMJCQkJCQkqbmV3LWV4LWNvbW1hbmRzLTUuMioKKy0tLS0tLS0tLS0tLS0tLQorCit8OmJhZGR8CQlBZGQgZmlsZSBuYW1lIHRvIGJ1ZmZlciBsaXN0IHdpdGhvdXQgc2lkZSBlZmZlY3RzLiAgKE5lZ3JpKQorfDpiZWhhdmV8CVF1aWNrbHkgc2V0IE1TLVdpbmRvd3Mgb3IgeHRlcm0gYmVoYXZpb3IuCit8OmJyb3dzZXwJVXNlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy4KK3w6Y2FsbHwJCUNhbGwgYSBmdW5jdGlvbiwgb3B0aW9uYWxseSB3aXRoIGEgcmFuZ2UuCit8OmNuZXdlcnwKK3w6Y29sZGVyfAlUbyBhY2Nlc3MgYSBzdGFjayBvZiBxdWlja2ZpeCBlcnJvciBsaXN0cy4KK3w6Y29tY2xlYXJ8CUNsZWFyIGFsbCB1c2VyLWRlZmluZWQgY29tbWFuZHMuCit8OmNvbW1hbmR8CURlZmluZSBhIHVzZXIgY29tbWFuZC4KK3w6Y29udGludWV8CUdvIGJhY2sgdG8gIjp3aGlsZSIuCit8OmNvbmZpcm18CUFzayBjb25maXJtYXRpb24gaWYgc29tZXRoaW5nIHVuZXhwZWN0ZWQgaGFwcGVucy4KK3w6Y3Njb3BlfAlFeGVjdXRlIGNzY29wZSBjb21tYW5kLgorfDpjc3RhZ3wJVXNlIGNzY29wZSB0byBqdW1wIHRvIGEgdGFnLgorfDpkZWxjb21tYW5kfAlEZWxldGUgYSB1c2VyLWRlZmluZWQgY29tbWFuZC4KK3w6ZGVsZnVuY3Rpb258CURlbGV0ZSBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbi4KK3w6ZW5kZnVuY3Rpb258CUVuZCBvZiB1c2VyLWRlZmluZWQgZnVuY3Rpb24uCit8OmZ1bmN0aW9ufAlEZWZpbmUgYSB1c2VyIGZ1bmN0aW9uLgorfDpncmVwfAkJV29ya3Mgc2ltaWxhciB0byAiOm1ha2UiLiAoTmVncmkpCit8Om1rc2Vzc2lvbnwJQ3JlYXRlIGEgc2Vzc2lvbiBmaWxlLgorfDpub2hsc2VhcmNofAlTdG9wICdobHNlYXJjaCcgaGlnaGxpZ2h0aW5nIGZvciBhIG1vbWVudC4KK3w6UHJpbnR8CVRoaXMgaXMgVmkgY29tcGF0aWJsZS4gIERvZXMgdGhlIHNhbWUgYXMgIjpwcmludCIuCit8OnByb21wdGZpbmR8CVNlYXJjaCBkaWFsb2cgKFdpbjMyIEdVSSkuCit8OnByb21wdHJlcGx8CVNlYXJjaC9yZXBsYWNlIGRpYWxvZyAoV2luMzIgR1VJKS4KK3w6cmV0dXJufAlSZXR1cm4gZnJvbSBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbi4KK3w6c2ltYWx0fAlXaW4zMiBHVUk6IFNpbXVsYXRlIGFsdC1rZXkgcHJlc3NlZC4gIChOZWdyaSkKK3w6c21hZ2ljfAlMaWtlICI6c3Vic3RpdHV0ZSIsIGJ1dCBhbHdheXMgdXNlICdtYWdpYycuCit8OnNub21hZ2ljfAlMaWtlICI6c3Vic3RpdHV0ZSIsIGJ1dCBhbHdheXMgdXNlICdub21hZ2ljJy4KK3w6dGNsfAkJRXhlY3V0ZSBUQ0wgY29tbWFuZC4KK3w6dGNsZG98CUV4ZWN1dGUgVENMIGNvbW1hbmQgZm9yIGEgcmFuZ2Ugb2YgbGluZXMuCit8OnRjbGZpbGV8CUV4ZWN1dGUgYSBUQ0wgc2NyaXB0IGZpbGUuCit8OnRlYXJvZmZ8CVRlYXItb2ZmIGEgbWVudSAoV2luMzIgR1VJKS4KK3w6dG1lbnV8Cit8OnR1bm1lbnV8CVdpbjMyIEdVSTogbWVudSB0b29sdGlwcy4gIChOZWdyaSkKK3w6c3RhcnwJOioJRXhlY3V0ZSBhIHJlZ2lzdGVyLgorCisKK0NoYW5nZWQJCQkJCQkJKmNoYW5nZWQtNS4yKgorLS0tLS0tLQorCitSZW5hbWVkIGZ1bmN0aW9uczoKKwkJYnVmZmVyX2V4aXN0cygpCSAgIC0+IGJ1ZmV4aXN0cygpCisJCWJ1ZmZlcl9uYW1lKCkgICAgICAtPiBidWZuYW1lKCkKKwkJYnVmZmVyX251bWJlcigpICAgIC0+IGJ1Zm5yKCkKKwkJZmlsZV9yZWFkYWJsZSgpICAgIC0+IGZpbGVyZWFkYWJsZSgpCisJCWhpZ2hsaWdodF9leGlzdHMoKSAtPiBobGV4aXN0cygpCisJCWhpZ2hsaWdodElEKCkgICAgICAtPiBobElEKCkKKwkJbGFzdF9idWZmZXJfbnIoKSAgIC0+IGJ1Zm5yKCIkIikKK1RoZSBvbGQgb25lcyBhcmUgc3RpbGwgdGhlcmUsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworVGhlIENUUkwtXyBjb21tYW5kIGluIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUgaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUKK25ldyAnYWxsb3dyZXZpbnMnIG9wdGlvbiBpcyBzZXQuICBBdm9pZHMgdGhhdCBwZW9wbGUgd2hvIHdhbnQgdG8gdHlwZSBTSElGVC1fCithY2NpZGVudGFsbHkgZW50ZXIgcmV2ZXJzZSBJbnNlcnQgbW9kZSwgYW5kIGRvbid0IGtub3cgaG93IHRvIGdldCBvdXQuCisKK1doZW4gYSBmaWxlIG5hbWUgcGF0aCBpbiAiOnRzZWxlY3QiIGxpc3RpbmcgaXMgdG9vIGxvbmcsIHJlbW92ZSBhIHBhcnQgaW4gdGhlCittaWRkbGUgYW5kIHB1dCAiLi4uIiB0aGVyZS4KKworV2luMzIgR1VJOiBNYWRlIGZvbnQgc2VsZWN0b3IgYXBwZWFyIGluc2lkZSBWaW0gd2luZG93LCBub3QganVzdCBhbnkgb2RkCitwbGFjZS4gKE5lZ3JpKQorCisiOmJuIiBza2lwcyBoZWxwIGJ1ZmZlcnMsIHVubGVzcyBjdXJyZW50bHkgaW4gYSBoZWxwIGJ1ZmZlci4gKE5lZ3JpKQorCitXaGVuIHRoZXJlIGlzIGEgc3RhdHVzIGxpbmUgYW5kIG9ubHkgb25lIHdpbmRvdywgZG9uJ3Qgc2hvdyAnXicgaW4gdGhlIHN0YXR1cworbGluZSBvZiB0aGUgY3VycmVudCB3aW5kb3cuCisKKyI6KiIgdXNlZCB0byBiZSB1c2VkIGZvciAiJzwsJz4iLCB0aGUgVmlzdWFsIGFyZWEuICBCdXQgaW4gVmkgaXQncyB1c2VkIGFzIGFuCithbHRlcm5hdGl2ZSBmb3IgIjpAIi4gIFdoZW4gJ2Nwb3B0aW9ucycgaW5jbHVkZXMgJyonIHRoaXMgaXMgVmkgY29tcGF0aWJsZS4KKworV2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LCB1c2luZyBDVFJMLU8gdG8gZXhlY3V0ZSBhIG1hcHBpbmcgd2lsbCB3b3JrIGxpa2UKKydpbnNlcnRtb2RlJyB3YXMgbm90IHNldC4gIFRoaXMgYWxsb3dzICJub3JtYWwiIG1hcHBpbmdzIHRvIGJlIHVzZWQgZXZlbiB3aGVuCisnaW5zZXJ0bW9kZScgaXMgc2V0LgorCitXaGVuICdtb3VzZScgd2FzIHNldCBhbHJlYWR5IChlLmcuLCBpbiB0aGUgLnZpbXJjIGZpbGUpLCBkb24ndCBhdXRvbWF0aWNhbGx5CitzZXQgJ21vdXNlJyB3aGVuIHRoZSBHVUkgc3RhcnRzLgorCitSZW1vdmVkIHRoZSAnTicsICdJJyBhbmQgJ0EnIGZsYWdzIGZyb20gdGhlICdtb3VzZScgb3B0aW9uLgorCitSZW5hbWVkICJ0b2dnbGUgb3B0aW9uIiB0byAiYm9vbGVhbiBvcHRpb24iLiAgU29tZSBwZW9wbGUgdGhvdWdodCB0aGF0ICI6c2V0Cit4eXoiIHdvdWxkIHRvZ2dsZSAneHl6JyBvbi9vZmYgZWFjaCB0aW1lLgorCitUaGUgaW50ZXJuYWwgdmFyaWFibGUgInNoZWxsX2Vycm9yIiBjb250YWlucyB0aGUgZXJyb3IgY29kZSBmcm9tIHRoZSBzaGVsbCwKK2luc3RlYWQgb2YganVzdCAwIG9yIDEuCisKK1doZW4gaW5zZXJ0aW5nIG9yIHJlcGxhY2luZywgdHlwaW5nIENUUkwtViBDVFJMLTxDUj4gdXNlZCB0byBpbnNlcnQgIjxDLUNSPiIuCitUaGF0IGlzIG5vdCB2ZXJ5IHVzZWZ1bC4gIE5vdyB0aGUgQ1RSTCBrZXkgaXMgaWdub3JlZCBhbmQgYSA8Q1I+IGlzIGluc2VydGVkLgorU2FtZSBmb3IgYWxsIG90aGVyICJub3JtYWwiIGtleXMgd2l0aCBtb2RpZmllcnMuICBNYXBwaW5nIHRoZXNlIG1vZGlmaWVkIGtleQorY29tYmluYXRpb25zIGlzIHN0aWxsIHBvc3NpYmxlLgorSW4gSW5zZXJ0IG1vZGUsIDxDLUNSPiBhbmQgPFMtU3BhY2U+IGNhbiBiZSBpbnNlcnRlZCBieSB1c2luZyBDVFJMLUsgYW5kIHRoZW4KK3RoZSBzcGVjaWFsIGNoYXJhY3Rlci4KKworTW92ZWQgInF1b3RlcyIgZmlsZSB0byBkb2MvcXVvdGVzLnR4dCwgYW5kICJ0b2RvIiBmaWxlIHRvIGRvYy90b2RvLnR4dC4gIFRoZXkKK2FyZSBub3cgaW5zdGFsbGVkIGxpa2Ugb3RoZXIgZG9jdW1lbnRhdGlvbiBmaWxlcy4KKword2luaGVpZ2h0KCkgZnVuY3Rpb24gcmV0dXJucyAtMSBmb3IgYSBub24tZXhpc3Rpbmcgd2luZG93LiAgSXQgdXNlZCB0byBiZQoremVybywgYnV0IHRoYXQgaXMgYSB2YWxpZCBoZWlnaHQgbm93LgorCitUaGUgZGVmYXVsdCBmb3IgJ3NlbGVjdGlvbicgaXMgImluY2x1c2l2ZSIsIHdoaWNoIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuCit1c2luZyAiJCIgb3IgdGhlIG1vdXNlIHRvIG1vdmUgdGhlIGN1cnNvciBpbiBWaXN1YWwgbW9kZS4KKworIjpxISIgZG9lcyBub3QgZXhpdCB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VkIGJ1ZmZlcnMgd2hpY2ggYXJlIGhpZGRlbi4gIFVzZQorIjpxYSEiIHRvIGV4aXQgYW55d2F5LgorCitEaXNhYmxlZCB0aGUgUGVybC9QeXRob24vVGNsIGludGVyZmFjZXMgYnkgZGVmYXVsdC4gIE5vdCBtYW55IHBlb3BsZSB1c2UgdGhlbQorYW5kIHRoZXkgbWFrZSB0aGUgZXhlY3V0YWJsZSBhIGxvdCBiaWdnZXIuICBUaGUgaW50ZXJuYWwgc2NyaXB0aW5nIGxhbmd1YWdlIGlzCitub3cgcG93ZXJmdWwgZW5vdWdoIGZvciBtb3N0IHRhc2tzLgorCitUaGUgc3RyaW5ncyBmcm9tIHRoZSAndGl0bGVzdHJpbmcnIGFuZCAnaWNvbnN0cmluZycgb3B0aW9ucyBhcmUgdXNlZAordW50cmFuc2xhdGVkIGZvciB0aGUgV2luZG93IHRpdGxlIGFuZCBpY29uLiAgVGhpcyBhbGxvd3MgZm9yIGluY2x1ZGluZyBhIDxDUj4uCitQcmV2aW91c2x5IGEgPENSPiB3b3VsZCBiZSBzaG93biBhcyAiXk0iICh0d28gY2hhcmFjdGVycykuCisKK1doZW4gYSBtYXBwaW5nIGlzIHN0YXJ0ZWQgaW4gVmlzdWFsIG9yIFNlbGVjdCBtb2RlIHdoaWNoIHdhcyBzdGFydGVkIGZyb20KK0luc2VydCBtb2RlICh0aGUgbW9kZSBzaG93cyAiKGluc2VydCkgVmlzdWFsIiksIGRvbid0IHJldHVybiB0byBJbnNlcnQgbW9kZQordW50aWwgdGhlIG1hcHBpbmcgaGFzIGVuZGVkLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGEgbWFwcGluZyBpbiBWaXN1YWwKK21vZGUgdGhhdCBhbHNvIHdvcmtzIHdoZW4gdGhlIFZpc3VhbCBtb2RlIHdhcyBzdGFydGVkIGZyb20gU2VsZWN0IG1vZGUuCisKK01lbnVzIGluICRWSU1SVU5USU1FL21lbnUudmltIG5vIGxvbmdlciBvdmVycnVsZSBleGlzdGluZyBtZW51cy4gIFRoaXMgaGVscHMKK3doZW4gZGVmaW5pbmcgbWVudXMgaW4gdGhlIC52aW1yYyBmaWxlLCBvciB3aGVuIHNvdXJjaW5nIG1zd2luLnZpbS4KKworVW5peDogVXNlIC92YXIvdG1wIGZvciAuc3dwIGZpbGVzLCBpZiBpdCBleGlzdHMuICBGaWxlcyB0aGVyZSBzdXJ2aXZlIGEKK3JlYm9vdCAoYXQgbGVhc3Qgb24gTGludXgpLgorCisKK0FkZGVkCQkJCQkJCSphZGRlZC01LjIqCistLS0tLQorCistLXdpdGgtbW90aWYtbGliIGNvbmZpZ3VyZSBhcmd1bWVudC4gIEFsbG93cyBmb3IgdXNpbmcgYSBzdGF0aWMgTW90aWYgbGlicmFyeS4KKworU3VwcG9ydCBmb3IgbWFwcGluZyBudW1lcmljIGtleXBhZCArLC0sKiwvIGtleXMuIChOZWdyaSkKK1doZW4gbm90IG1hcHBlZCwgdGhleSBwcm9kdWNlIHRoZSBub3JtYWwgY2hhcmFjdGVyLgorCitXaW4zMiBHVUk6IFdoZW4gZGlyZWN0b3J5IGRyb3BwZWQgb24gR3ZpbSwgY2QgdGhlcmUgYW5kIGVkaXQgbmV3IGJ1ZmZlci4KKyhOZWdyaSkKKworV2luMzIgR1VJOiBNYWRlIENUUkwtQnJlYWsgd29yayBhcyBpbnRlcnJ1cHQsIHNvIHRoYXQgQ1RSTC1DIGNhbiBiZQordXNlZCBmb3IgbWFwcGluZ3MuCisKK0luIHRoZSBvdXRwdXQgb2YgIjptYXAiLCBoaWdobGlnaHQgdGhlICIqIiB0byBtYWtlIGNsZWFyIGl0J3Mgbm90IHBhcnQgb2YgdGhlCityaHMuIChSb2VtZXIpCisKK1doZW4gc2hvd2luZyB0aGUgVmlzdWFsIGFyZWEsIHRoZSBjdXJzb3IgaXMgbm90IHN3aXRjaGVkIG9mZiwgc28gdGhhdCBpdCBjYW4KK2JlIGxvY2F0ZWQuICBUaGUgVmlzdWFsIGFyZWEgaXMgbm93IGhpZ2hsaWdodGVkIHdpdGggYSBncmV5IGJhY2tncm91bmQgaW4gdGhlCitHVUkuICBUaGlzIG1ha2VzIHRoZSBjdXJzb3IgdmlzaWJsZSB3aGVuIGl0J3MgYWxzbyByZXZlcnNlZC4KKworV2luMzI6IFdoZW4gc3RhcnRlZCB3aXRoIHNpbmdsZSBmdWxsIHBhdGhuYW1lIChlLmcuIHZpYSBkb3VibGUtY2xpY2tlZCBmaWxlKSwKK2NkIHRvIHRoYXQgZmlsZSdzIGRpcmVjdG9yeS4gKE5lZ3JpKQorCitXaW4zMiBHVUk6IFRlYXItb2ZmIG1lbnVzLCB3aXRoICI6dGVhcm9mZiA8bWVudS1uYW1lPiIgY29tbWFuZC4gKE5lZ3JpKQorJ3QnIG9wdGlvbiB0byAnZ3Vpb3B0aW9ucyc6IEFkZCB0ZWFyb2ZmIG1lbnUgaXRlbXMgZm9yIFdpbjMyIEdVSSBhbmQgTW90aWYuCitJdCdzIGluY2x1ZGVkIGJ5IGRlZmF1bHQuCitXaW4zMiBHVUk6IHRlYXJvZmYgbWVudSB3aXRoIHN1Ym1lbnVzIGlzIGluZGljYXRlZCB3aXRoIGEgIj4+Ii4gKE5lZ3JpKQorCitBZGRlZCBeS2FhIGFuZCBeS0FBIGRpZ3JhcGhzLgorQWRkZWQgImV1cm8iIHN5bWJvbCB0byBkaWdyYXBoLmMuIChDb3JyeSkKKworU3VwcG9ydCBmb3IgTW90aWYgbWVudSBzaG9ydGN1dCBrZXlzLCB1c2luZyAnJicgbGlrZSBNUy1XaW5kb3dzIChPbGxpcykuCitPdGhlciBHVUlzIGlnbm9yZSAnJicgaW4gYSBtZW51IG5hbWUuCisKK0RKR1BQOiBGYXN0ZXIgc2NyZWVuIHVwZGF0aW5nIChKb2huIExhbmdlKS4KKworQ2x1c3RlcmluZyBvZiBzeW50YXggZ3JvdXBzICI6c3ludGF4IGNsdXN0ZXIiIChCaWdoYW0pLgorSW5jbHVkaW5nIHN5bnRheCBmaWxlczogIjpzeW50YXggaW5jbHVkZSIgKEJpZ2hhbSkuCisKK0tlZXAgY29sdW1uIHdoZW4gc3dpdGNoaW5nIGJ1ZmZlcnMsIHdoZW4gJ25vc29sJyBpcyBzZXQgKFJhZGljcykuCisKK051bWJlciBmdW5jdGlvbiBmb3IgUGVybCBpbnRlcmZhY2UuCisKK1N1cHBvcnQgZm9yIEludGVsbGltb3VzZSBpbiBBdGhlbmEgR1VJLiAoSmVuc2VuKQorCisiOnNsZWVwIiBhbHNvIGFjY2VwdHMgYW4gYXJndW1lbnQgaW4gbWlsbGlzZWNvbmRzLCB3aGVuICJtIiBpcyB1c2VkLgorCitBZGRlZCAncCcgZmxhZyBpbiAnZ3Vpb3B0aW9ucyc6IEluc3RhbGwgY2FsbGJhY2tzIGZvciBlbnRlci9sZWF2ZSB3aW5kb3cKK2V2ZW50cy4gIE1ha2VzIGN1cnNvciBibGlua2luZyB3b3JrIGZvciBUZXJoYWFyLCBicmVha3MgaXQgZm9yIG1lLgorCisiLS1oZWxwIiBhbmQgIi0tdmVyc2lvbiIgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKworTm9uLXRleHQgaW4gIjpsaXN0IiBvdXRwdXQgaXMgaGlnaGxpZ2h0ZWQgd2l0aCBOb25UZXh0LgorCitBZGRlZCB0ZXh0IG9iamVjdHM6ICJpKCIgYW5kICJpKSIgYXMgc3lub255bSBmb3IgImliIi4gIml7IiBhbmQgIml9IiBhcworc3lub255bSBmb3IgImlCIi4gIE5ldzogImk8IiBhbmQgImk+IiwgdG8gc2VsZWN0IDx0aGluZz4uICBBbGwgdGhpcyBhbHNvIGZvcgorImEiIG9iamVjdHMuCisKKydPJyBmbGFnIGluICdzaG9ydG1lc3MnOiBtZXNzYWdlIGZvciByZWFkaW5nIGEgZmlsZSBvdmVyd3JpdGVzIGFueSBwcmV2aW91cworbWVzc2FnZS4gKE5lZ3JpKQorCitXaW4zMiBHVUk6ICdUJyBmbGFnIGluICdndWlvcHRpb25zJzogc3dpdGNoIHRvb2xiYXIgb24vb2ZmLgorSW5jbHVkZWQgYSBsaXN0IHdpdGggc2VsZi1tYWRlIHRvb2xiYXIgYml0bWFwcy4gIChOZWdyaSkKKworQWRkZWQgbWVudSBwcmlvcml0eSBmb3Igc3ViLW1lbnVzLiAgSW1wbGVtZW50ZWQgZm9yIFdpbjMyIGFuZCBNb3RpZiBHVUkuCitEaXNwbGF5IG1lbnUgcHJpb3JpdHkgd2l0aCAiOm1lbnUiIGNvbW1hbmQuCitEZWZhdWx0IGFuZCBTeW50YXggbWVudXMgbm93IGluY2x1ZGUgcHJpb3JpdHkgZm9yIGl0ZW1zLiAgQWxsb3dzIGluc2VydGluZworbWVudSBpdGVtcyBpbiBiZXR3ZWVuIHRoZSBkZWZhdWx0IG9uZXMuCisKK1doZW4gdGhlICdudW1iZXInIG9wdGlvbiBpcyBvbiwgaGlnaGxpZ2h0IGxpbmUgbnVtYmVycyB3aXRoIHRoZSBMaW5lTnIgZ3JvdXAuCisKKyJJZ25vcmUiIGhpZ2hsaWdodCBncm91cDogVGV4dCBoaWdobGlnaHRlZCB3aXRoIHRoaXMgaXMgbWFkZSBibGFuay4gIEl0IGlzCit1c2VkIHRvIGhpZGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBoZWxwIHRleHQuCisKK0luY2x1ZGVkIEV4dWJlcmFudCBDdGFncyB2ZXJzaW9uIDIuMywgd2l0aCBDKysgc3VwcG9ydCwgSmF2YSBzdXBwb3J0IGFuZAorcmVjdXJzZSBpbnRvIGRpcmVjdG9yaWVzLiAoSGllYmVydCkKKworV2hlbiBhIHRhZ3MgZmlsZSBpcyBub3Qgc29ydGVkLCBhbmQgdGhpcyBpcyBkZXRlY3RlZCAoaW4gYSBzaW1wbGlzdGljIHdheSksIGFuCitlcnJvciBtZXNzYWdlIGlzIGdpdmVuLgorCisiOnVubGV0IiBhY2NlcHRzIGEgIiEiLCB0byBpZ25vcmUgbm9uLWV4aXN0aW5nIHZhcmlhYmxlcywgYW5kIGFjY2VwdHMgbW9yZQordGhhbiBvbmUgYXJndW1lbnQuIChSb2VtZXIpCitDb21wbGV0aW9uIG9mIHZhcmlhYmxlIG5hbWVzIGZvciAiOnVubGV0Ii4gKFJvZW1lcikKKworV2hlbiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBieSBhbm90aGVyIGZ1bmN0aW9uLCBzaG93Cit0aGUgY2FsbCBzdGFjayBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KKworTmV3IGZpbGUgbmFtZSBtb2RpZmllcnM6CisiOi4iOiByZWR1Y2UgZmlsZSBuYW1lIHRvIGJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyLgorIjp+IjogcmVkdWNlIGZpbGUgbmFtZSB0byBiZSByZWxhdGl2ZSB0byBob21lIGRpci4KKyI6cz9wYXQ/c3ViPyI6IHN1YnN0aXR1dGUgInBhdCIgd2l0aCAic3ViIiBvbmNlLgorIjpncz9wYXQ/c3ViPyI6IHN1YnN0aXR1dGUgInBhdCIgd2l0aCAic3ViIiBnbG9iYWxseS4KKworTmV3IGNvbmZpZ3VyZSBhcmd1bWVudHM6IC0tZW5hYmxlLW1pbi1mZWF0dXJlcyBhbmQgLS1lbmFibGUtbWF4LWZlYXR1cmVzLgorRWFzeSB3YXkgdG8gc3dpdGNoIHRvIG1pbmltdW0gb3IgbWF4aW11bSBmZWF0dXJlcy4KKworTmV3IGNvbXBpbGUtdGltZSBmZWF0dXJlOiBtb2RpZnlfZm5hbWUuICBGb3IgZmlsZSBuYW1lIG1vZGlmaWVycywgZS5nLAorIiU6cDpoIi4gIENhbiBiZSBkaXNhYmxlZCB0byBzYXZlIHNvbWUgY29kZSAoMTYgYml0IERPUykuCisKK1doZW4gdXNpbmcgd2hvbGUtbGluZSBjb21wbGV0aW9uIGluIEluc2VydCBtb2RlLCBhbmQgJ2NpbmRlbnQnIGlzIHNldCwgaW5kZW50Cit0aGUgbGluZSBwcm9wZXJseS4KKworTVNET1MgYW5kIFdpbjMyIGNvbnNvbGU6ICdndWljdXJzb3InIHNldHMgY3Vyc29yIHRoaWNrbmVzcy4gKE5lZ3JpKQorCitJbmNsdWRlZCBuZXcgc2V0IG9mIEZhcnNpIGZvbnRzLiAoU2hpcmFuKQorCitBY2NlbGVyYXRvciB0ZXh0IG5vdyBhbHNvIHdvcmtzIGluIE1vdGlmLiAgQWxsIG1lbnVzIGNhbiBiZSBkZWZpbmVkIHdpdGggJiBmb3IKK21uZW1vbmljIGFuZCBUQUIgZm9yIGFjY2VsZXJhdG9yIHRleHQuICBUaGV5IGFyZSBpZ25vcmVkIG9uIHN5c3RlbXMgdGhhdCBkb24ndAorc3VwcG9ydCB0aGVtLgorV2hlbiByZW1vdmluZyBvciByZXBsYWNpbmcgYSBtZW51LCBjb21wYXJlIHRoZSBtZW51IG5hbWUgb25seSB1cCB0byB0aGUgPFRhYj4KK2JlZm9yZSB0aGUgbW5lbW9uaWMuCisKKydpJyBhbmQgJ0knIGZsYWdzIGFmdGVyICI6c3Vic3RpdHV0ZSI6IGlnbm9yZSBjYXNlIG9yIG5vdC4KKworIm1ha2UgaW5zdGFsbCIgY29tcGxhaW5zIGlmIHRoZSBydW50aW1lIGZpbGVzIGFyZSBtaXNzaW5nLgorCitVbml4OiBXaGVuIGZpbmRpbmcgYW4gZXhpc3Rpbmcgc3dhcCBmaWxlIHRoYXQgY2FuJ3QgYmUgb3BlbmVkLCBtZW50aW9uIHRoZQorb3duZXIgb2YgdGhlIGZpbGUgaW4gdGhlIEFUVEVOVElPTiBtZXNzYWdlLgorCitUaGUgJ2knLCAndCcgYW5kICdrJyBvcHRpb25zIGluICdjb21wbGV0ZScgbm93IGFsc28gcHJpbnQgdGhlIHBsYWNlIHdoZXJlIHRoZXkKK2FyZSBsb29raW5nIGZvciBtYXRjaGVzLiAoQWNldmVkbykKKworImdKIiBjb21tYW5kOiBKb2luIGxpbmVzIHdpdGhvdXQgaW5zZXJ0aW5nIGEgc3BhY2UuCisKK1NldHRpbmcgJ2tleXdvcmRwcmcnIHRvICJtYW4gLXMiIGlzIGhhbmRsZWQgc3BlY2lmaWNhbGx5LiAgVGhlICItcyIgaXMgcmVtb3ZlZAord2hlbiBubyBjb3VudCBnaXZlbiwgdGhlIGNvdW50IGlzIGFkZGVkIG90aGVyd2lzZS4gIENvbmZpZ3VyZSBjaGVja3MgaWYgIm1hbgorLXMgMiByZWFkIiB3b3JrcywgYW5kIHNldHMgdGhlIGRlZmF1bHQgZm9yICdrZXl3b3JkcHJnJyBhY2NvcmRpbmdseS4KKworSWYgeW91IGRvIGEgIjpiZCIgYW5kIHRoZXJlIGlzIG9ubHkgb25lIHdpbmRvdyBvcGVuLCBWaW0gdHJpZXMgdG8gbW92ZSB0byBhCitidWZmZXIgb2YgdGhlIHNhbWUgdHlwZSAoaS5lLiBub24taGVscCB0byBub24taGVscCwgaGVscCB0byBoZWxwKSwgZm9yCitjb25zaXN0ZW50IGJlaGF2aW9yIHRvIDpibmV4dC86YnByZXYuIChOZWdyaSkKKworQWxsb3cgIjxOb3A+IiB0byBiZSB1c2VkIGFzIHRoZSByaHMgb2YgYSBtYXBwaW5nLiAgIjptYXAgeHggPE5vcD4iLCBtYXBzICJ4eCIKK3RvIG5vdGhpbmcgYXQgYWxsLgorCitJbiBhICI6bWVudSIgY29tbWFuZCwgIjxUYWI+IiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgcmVhbCB0YWIsIGluIHRoZSBtZW51CitwYXRoLiAgVGhpcyBtYWtlcyBpdCBtb3JlIGVhc3kgdG8gdHlwZSwgbm8gYmFja3NsYXNoIG5lZWRlZC4KKworUE9TSVggY29tcGF0aWJsZSBjaGFyYWN0ZXIgY2xhc3NlcyBmb3IgcmVnZXhwIHBhdHRlcm5zOiBbOmFsbnVtOl0sIFs6YWxwaGE6XSwKK1s6Ymxhbms6XSwgWzpjbnRybDpdLCBbOmRpZ2l0Ol0sIFs6Z3JhcGg6XSwgWzpsb3dlcjpdLCBbOnByaW50Ol0sIFs6cHVuY3Q6XSwKK1s6c3BhY2U6XSwgWzp1cHBlcjpdIGFuZCBbOnhkaWdpdDpdLiAoQnJpc2NvZSkKKworcmVnZXhwIGNoYXJhY3RlciBjbGFzc2VzIChmb3IgZmFzdCBzeW50YXggaGlnaGxpZ2h0IG1hdGNoaW5nKToKKwlkaWdpdHM6CSAgICBcZCBbMC05XQkJXEQgIG5vdCBkaWdpdCAoUm9lbWVyKQorCWhleDoJICAgIFx4IFswLTlhLWZBLUZdCVxYICBub3QgaGV4CisJb2N0YWw6CSAgICBcbyBbMC03XQkJXE8gIG5vdCBvY3RhbAorCXdvcmQ6CSAgICBcdyBbYS16QS1aMC05X10JXFcgIG5vdCB3b3JkCisJaGVhZDoJICAgIFxoIFthLXpBLVpfXQlcSCAgbm90IGhlYWQKKwlhbHBoYWJldGljOiBcYSBbYS16QS1aXQkJXEEgIG5vdCBhbHBoYWJldGljCisJbG93ZXJjYXNlOiAgXGwgW2Etel0JCVxMICBub3QgbG93ZXJjYXNlCisJdXBwZXJjYXNlOiAgXHUgW0EtWl0JCVxVICBub3QgdXBwZXJjYXNlCisKKyI6c2V0IiBub3cgYWNjZXB0cyAiKz0iLCB8Xj0iIGFuZCAiLT0iOiBhZGQgb3IgcmVtb3ZlIHBhcnRzIG9mIGEgc3RyaW5nCitvcHRpb24sIGFkZCBvciBzdWJ0cmFjdCBhIG51bWJlciBmcm9tIGEgbnVtYmVyIG9wdGlvbi4gIEEgY29tbWEgaXMKK2F1dG9tYWdpY2FsbHkgaW5zZXJ0ZWQgb3IgZGVsZXRlZCBmb3Igb3B0aW9ucyB0aGF0IGFyZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LgorCitGaWxldHlwZSBmZWF0dXJlLCBmb3IgYXV0b2NvbW1hbmRzLiAgVXNlcyBhIGZpbGUgdHlwZSBpbnN0ZWFkIG9mIGEgcGF0dGVybiB0bworbWF0Y2ggYSBmaWxlLiAgQ3VycmVudGx5IG9ubHkgdXNlZCBmb3IgUklTQyBPUy4gIChMZW9uYXJkKQorCitJbiBhIHBhdHRlcm4gZm9yIGFuIGF1dG9jb21tYW5kLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlIHVzZWQuICBUaGV5IGFyZQorZXhwYW5kZWQgd2hlbiB0aGUgYXV0b2NvbW1hbmQgaXMgZGVmaW5lZC4KKworIkJ1ZkZpbGVQcmUiIGFuZCAiQnVmRmlsZVBvc3QiIGF1dG9jb21tYW5kIGV2ZW5zOiBCZWZvcmUgYW5kIGFmdGVyIGFwcGx5aW5nCit0aGUgIjpmaWxlIiBjb21tYW5kIHRvIGNoYW5nZSB0aGUgbmFtZSBvZiBhIGJ1ZmZlci4KKyJWaW1MZWF2ZVByZSIgYXV0b2NvbW1hbmQgZXZlbnQ6IGJlZm9yZSB3cml0aW5nIHRoZSAudmltaW5mbyBmaWxlLgorCitGb3IgYXV0b2NvbW1hbmRzIGFyZ3VtZW50OiA8YWJ1Zj4gaXMgYnVmZmVyIG51bWJlciwgbGlrZSA8YWZpbGU+LgorCitNYWRlIHN5bnRheCBoaWdobGlnaHRpbmcgYSBiaXQgZmFzdGVyIHdoZW4gc2Nyb2xsaW5nIGJhY2t3YXJkcywgYnkga2VlcGluZworbW9yZSBzeW5jaW5nIGNvbnRleHQuCisKK1dpbjMyIEdVSTogTWFkZSBzY3JvbGxpbmcgZmFzdGVyIGJ5IGF2b2lkaW5nIGEgcmVkcmF3IHdoZW4gZGVsZXRpbmcgb3IKK2luc2VydGluZyBzY3JlZW4gbGluZXMuCisKK0dVSTogTWFkZSBzY3JvbGxpbmcgZmFzdGVyIGJ5IG5vdCByZWRyYXdpbmcgdGhlIHNjcm9sbGJhciB3aGVuIHRoZSB0aHVtYiBtb3ZlZAorbGVzcyB0aGFuIGEgcGl4ZWwuCisKK0luY2x1ZGVkICI6aGlnaGxpZ2h0IiBpbiBidWdyZXBvcnQudmltLgorCitDcmVhdGVkIGluc3RhbGwuZXhlIHByb2dyYW0sIGZvciBzaW1wbGlzdGljIGluc3RhbGxhdGlvbiBvbiBET1MgYW5kCitNUy1XaW5kb3dzLgorCitOZXcgcmVnaXN0ZXI6ICdfJywgdGhlIGJsYWNrIGhvbGUuICBXaGVuIHdyaXRpbmcgdG8gaXQsIG5vdGhpbmcgaGFwcGVucy4gIFdoZW4KK3JlYWRpbmcgZnJvbSBpdCwgaXQncyBhbHdheXMgZW1wdHkuICBDYW4gYmUgdXNlZCB0byBhdm9pZCBhIGRlbGV0ZSBvciBjaGFuZ2UKK2NvbW1hbmQgdG8gbW9kaWZ5IHRoZSByZWdpc3RlcnMsIG9yIHJlZHVjZSBtZW1vcnkgdXNlIGZvciBiaWcgY2hhbmdlcy4KKworQ1RSTC1WIHhmZiBlbnRlcnMgY2hhcmFjdGVyIGJ5IGhleCBudW1iZXIuICBDVFJMLVYgbzEyMyBlbnRlcnMgY2hhcmFjdGVyIGJ5CitvY3RhbCBudW1iZXIuIChBYXJvbikKKworSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2Ygc3ludGF4IGhpZ2hsaWdodGluZyBieSBza2lwcGluZyBjaGVjayBmb3IgImtlZXBlbmQiCit3aGVuIHRoZXJlIGlzbid0IGFueS4KKworTW92ZWQgdGhlIG1vZGUgbWVzc2FnZSAoIi0tIElOU0VSVCAtLSIpIHRvIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHNjcmVlbi4gIFdoZW4KKydjbWRoZWlnaHQnIGlzIG1vcmUgdGhhbiBvbmUsIG1lc3NhZ2VzIHdpbGwgcmVtYWluIHJlYWRhYmxlLgorCitXaGVuIGxpc3RpbmcgbWF0Y2hpbmcgZmlsZXMsIHRoZXkgYXJlIGFsc28gc29ydGVkIG9uICdzdWZmaXhlcycsIHN1Y2ggdGhhdAordGhleSBhcmUgbGlzdGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIENUUkwtTiByZXRyaWV2ZXMgdGhlbS4KKworc3luSURhdHRyKCkgdGFrZXMgYSB0aGlyZCBhcmd1bWVudCAob3B0aW9uYWxseSksIHdoaWNoIHRlbGxzIGZvciB3aGljaAordGVybWluYWwgdHlwZSB0byBnZXQgdGhlIGF0dHJpYnV0ZXMgZm9yLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4KKzJodG1sLnZpbSBvdXRzaWRlIG9mIGd2aW0gKHVzaW5nIGNvbG9yIG5hbWVzIGluc3RlYWQgb2YgI1JSR0dCQikuCisKK01lbW9yeSBwcm9maWxpbmcsIG9ubHkgZm9yIGRlYnVnZ2luZy4gIFByaW50cyBhdCBleGl0LCBhbmQgd2l0aCAiZ15BIiBjb21tYW5kLgorKEthaG4pCisKK0RPUzogV2hlbiB1c2luZyBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZHJpdmUsIHJlbW92ZSB0aGUgZHJpdmUgbmFtZToKKyJBOlxkaXJcZmlsZSIgLT4gIlxkaXJcZmlsZSIuICBUaGlzIGhlbHBzIHdoZW4gbW92aW5nIGEgc2Vzc2lvbiBmaWxlIG9uIGEKK2Zsb3BweSBmcm9tICJBOlxkaXIiIHRvICJCOlxkaXIiLgorCitJbmNyZWFzZWQgbnVtYmVyIG9mIHJlbWVtYmVyZWQganVtcHMgZnJvbSAzMCB0byA1MCBwZXIgd2luZG93LgorCitDb21tYW5kIHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgJ2hscycgaGlnaGxpZ2h0aW5nIHVudGlsIHRoZSBuZXh0IHNlYXJjaDoKKyI6bm9obHNlYXJjaCIuCisKKyJncCIgYW5kICJnUCIgY29tbWFuZHM6IGxpa2UgInAiIGFuZCAiUCIsIGJ1dCBsZWF2ZSB0aGUgY3Vyc29yIGp1c3QgYWZ0ZXIgdGhlCitpbnNlcnRlZCB0ZXh0LiAgVXNlZCBmb3IgdGhlIENUUkwtViBjb21tYW5kIGluIE1TLVdpbmRvd3MgbW9kZS4KKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNS4yKgorLS0tLS0KKworV2luMzIgR1VJOiBDb3VsZCBkcmF3IHRleHQgdHdpY2UgaW4gb25lIHBsYWNlLCBmb3IgZmFrZS1ib2xkIHRleHQuICBSZW1vdmVkCit0aGlzLCBXaW5kb3dzIHdpbGwgaGFuZGxlIHRoZSBib2xkIHRleHQgYW55d2F5LiAoTmVncmkpCisKK3BhdGNoIDUuMS4xOiBXaW4zMnMgR1VJOiBwYXN0aW5nIGNhdXNlZCBhIGNyYXNoIChOZWdyaSkKKworcGF0Y2ggNS4xLjI6IFdoZW4gZW50ZXJpbmcgYW5vdGhlciB3aW5kb3csIHdoZXJlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjdXJzb3IKK2hhdmUgYmVlbiBkZWxldGVkLCBjb3VsZCBoYXZlIGEgY3Vyc29yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitwYXRjaCA1LjEuMzogV2luMzJzIEdVSTogRGlkbid0IHdhaXQgZm9yIGV4dGVybmFsIGNvbW1hbmQgdG8gZmluaXNoLiAoTmVncmkpCisKK3BhdGNoIDUuMS40OiBNYWtlZmlsZS53MzIgY2FuIG5vdyBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIE9MRSB2ZXJzaW9uCisoU2NvdHQpLgorCitwYXRjaCA1LjEuNTogQ3Jhc2hlZCB3aGVuIHVzaW5nIHN5bnRheCBoaWdobGlnaHRpbmc6IGN1cnNvciBvbiBhIGxpbmUgdGhhdAorZG9lc24ndCBmaXQgaW4gdGhlIHdpbmRvdywgYW5kIHNwbGl0dGluZyB0aGF0IGxpbmUgaW4gdHdvLgorCitwYXRjaCA1LjEuNjogVmlzdWFsIGhpZ2hsaWdodGluZyBidWc6IEFmdGVyICI6c2V0IG5vd3JhcCIsIGdvIHRvIGVuZCBvZiBsaW5lCisoc28gdGhhdCB0aGUgd2luZG93IHNjcm9sbHMgaG9yaXpvbnRhbGx5KSwgIjpzZXQgd3JhcCIuICBGb2xsb3dpbmcgVmlzdWFsCitzZWxlY3Rpb24gd2FzIHdyb25nLgorCitwYXRjaCA1LjEuNzogV2hlbiAndGFnYnNlYXJjaCcgb2ZmLCBhbmQgJ2lnbm9yZWNhc2UnIG9mZiwgc3RpbGwgY291bGQgZG8KK2JpbmFyeSBzZWFyY2hpbmcuCisKK3BhdGNoIDUuMS44OiBXaW4zMiBHVUk6IGRyYWdnaW5nIHRoZSBzY3JvbGxiYXIgZGlkbid0IHVwZGF0ZSB0aGUgcnVsZXIuCisKK3BhdGNoIDUuMS45OiBVc2luZyAiOmd1aSIgaW4gLnZpbXJjLCBjYXVzZWQgeHRlcm0gY3Vyc29yIHRvIGRpc2FwcGVhci4KKworcGF0Y2ggNS4xLjEwOiBBIENUUkwtTiBpbiBJbnNlcnQgbW9kZSBjb3VsZCBjYXVzZSBhIGNyYXNoLCB3aGVuIGEgYnVmZmVyCit3aXRob3V0IGEgbmFtZSBleGlzdHMuCisKK3BhdGNoIDUuMS4xMTogIm1ha2UgdGVzdCIgZGlkbid0IHdvcmsgaW4gdGhlIHNoYWRvdyBkaXJlY3RvcnkuICBBbHNvIGFkanVzdGVkCisibWFrZSBzaGFkb3ciIGZvciB0aGUgbGlua3MgaW4gdGhlIGN0YWdzIGRpcmVjdG9yeS4KKworcGF0Y2ggNS4xLjEyOiAiYnVmIDEyM2ZvbyIgdXNlZCAiMTIzIiBhcyBhIGNvdW50LCBpbnN0ZWFkIGFzIHRoZSBzdGFydCBvZiBhCitidWZmZXIgbmFtZS4KKworcGF0Y2ggNS4xLjEzOiBXaGVuIGNvbXBsZXRpbmcgZmlsZSBuYW1lcyBvbiB0aGUgY29tbWFuZC1saW5lLCByZWFsbG9jYXRpbmcgdGhlCitjb21tYW5kLWxpbmUgbWF5IGdvIHdyb25nLgorCitwYXRjaCA1LjEuMTQ6ICI6W252Y2lddW5tZW51IiByZW1vdmVkIG1lbnUgZm9yIGFsbCBtb2Rlcywgd2hlbiBmdWxsIG1lbnUgcGF0Y2gKK3NwZWNpZmllZC4KKworR3JhY2VmdWwgaGFuZGxpbmcgb2YgTlVMTHMgaW4gZHJhZy1kcm9wcGVkIGZpbGUgbGlzdC4gIEhhbmRsZSBwYXNzaW5nIE5VTEwgdG8KK0Z1bGxuYW1lX3NhdmUoKS4gKE5lZ3JpKQorCitXaW4zMjogIjohc3RhcnQiIHRvIGludm9rZSBhIHByb2dyYW0gd2l0aG91dCBvcGVuaW5nIGEgY29uc29sZSwgc3dhcHBpbmcKK3NjcmVlbnMsIG9yIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaW4gZWl0aGVyIGNvbnNvbGUgb3IgZ3VpIHZlcnNpb24uIGUuZy4geW91CitjYW4gdHlwZSAiOiFzdGFydCB3aW5maWxlIi4gIEFMU08gZml4ZXMgImNhbid0IGRlbGV0ZSBzd2FwZmlsZSBhZnRlciBzcGF3bmluZworYSBzaGVsbCIgYnVnLiAoZW5oYW5jZW1lbnQgb2YgQWFyb24gcGF0Y2gpIChOZWdyaSkKKworV2luMzIgR1VJOiBGaXggQ1RSTC1YIGRlZmF1bHQga2V5bWFwcGluZyB0byBiZSBtb3JlIFdpbmRvd3MtbGlrZS4gKE5lZ3JpKQorCitTaG9ydGVuIGZpbGVuYW1lcyBvbiBzdGFydHVwLiAgSWYgaW4gL2Zvby9iYXIsIGVudGVyaW5nICJ2aW0gLi4vYmFyL2JhbmcuYyIKK2Rpc3BsYXlzICJiYW5nLmMiIGluIHN0YXR1cyBiYXIsIG5vdCAiL2Zvby9iYXIvYmFuZy5jIiAgKE5lZ3JpKQorCitXaW4zMiBHVUk6IE5vIGNvcHkgdG8gV2luZG93cyBjbGlwYm9hcmQgd2hlbiBpdCdzIG5vdCBkZXNpcmVkLgorCitXaW4zMnM6IEZpeCBwYXN0aW5nIGZyb20gY2xpcGJvYXJkIC0gbWFkZSBhbiBhc3N1bXB0aW9uIG5vdCB2YWxpZCB1bmRlcgorV2luMzJzLiAoTmVncmkpCisKK1dpbjMyIEdVSTogU3BlZWQgdXAgY2FsbHMgdG8gZ3VpX21jaF9kcmF3X3N0cmluZygpIGFuZCBjdXJzb3IgZHJhd2luZworZnVuY3Rpb25zLiAoTmVncmkpCisKK1dpbjMyIEdVSTogTWlkZGxlIG1vdXNlIGJ1dHRvbiBlbXVsYXRpb24gbm93IHdvcmtzIGluIEdVSSEgKE5lZ3JpKQorCitDb3VsZCBza2lwIG1lc3NhZ2VzIHdoZW4gY29tYmluaW5nIGNvbW1hbmRzIGluIG9uZSBsaW5lLCBlLmcuOgorIjplY2hvICJoZWxsbyIgfCB3cml0ZSIuCisKK1BlcmwgaW50ZXJwcmV0ZXIgd2FzIGRpc2FibGVkIGJlZm9yZSBleGVjdXRpbmcgVmltTGVhdmUgYXV0b2NvbW1hbmRzLiAgQ291bGQKK25vdCB1c2UgIjpwZXJsIiBpbiB0aGVtLiAgKEFhcm9uKQorCitJbmNsdWRlZCBwYXRjaCBmb3IgdGhlIEludGVsbGltb3VzZSAoQWFyb24vUm9iaW5zb24pLgorCitDb3VsZCBub3Qgc2V0ICdscycgdG8gb25lLCB3aGVuIGxhc3Qgd2luZG93IGhhcyBvbmx5IG9uZSBsaW5lLiAgKE1pdHRlcmFuZCkKKworRml4ZWQgYSBtZW1vcnkgbGVhayB3aGVuIHJlbW92aW5nIG1lbnVzLgorCitBZnRlciAiOm9ubHkiIHRoZSBydWxlciBjb3VsZCBvdmVyd3JpdGUgYSBtZXNzYWdlLgorCitEb3MzMjogcmVtb3ZlZCBjaGFuZ2luZyBvZiBfX3N5c3RlbV9mbGFncy4gIEl0IGFwcGVhcnMgdG8gd29yayBiZXR0ZXIgd2hlbgoraXQncyBsZWZ0IGF0IHRoZSBkZWZhdWx0IHZhbHVlLgorCitwX2FsZXBoIHdhcyBhbiBpbnQgaW5zdGVhZCBvZiBhbG9uZywgY2F1c2VkIHRyb3VibGUgb24gc3lzdGVtcyB3aGVyZQorc2l6ZW9mKGludCkgIT0gc2l6ZW9mKGxvbmcpLiAoU2NobWlkdCkKKworRml4ZWQgZW51bSBwcm9ibGVtcyBmb3IgVWx0cml4LiAoU2VpYmVydCkKKworU21hbGwgcmVkcmF3IHByb2JsZW06ICJkZCIgb24gbGFzdCBsaW5lIGluIGZpbGUgY2xlYXJlZCB3cm9uZyBsaW5lLgorCitEaWRuJ3QgaW50ZXJwcmV0ICJjbWQgfCBlbmRpZiIgd2hlbiAiY21kIiBzdGFydHMgd2l0aCBhIHJhbmdlLiAgRS5nLiAiaWYgMCB8CisuZCB8IGVuZGlmIi4KKworQ29tbWFuZCAiK3wiIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGZpbGUgY2F1c2VkIG1sX2dldCBlcnJvcnMuCisKK01lbW9yeSB1bmRlcnJ1biBpbiBldmFsX3ZhcnMoKS4gKEFhcm9uKQorCitEb24ndCByZW5hbWUgZmlsZXMgaW4gYSBkaWZmaWN1bHQgd2F5LCBleGNlcHQgb24gV2luZG93cyA5NSAod2FzIGFsc28gZG9uZSBvbgorV2luZG93cyBOVCkuCisKK1dpbjMyIEdVSTogQW4gZXh0ZXJuYWwgY29tbWFuZCB0aGF0IHByb2R1Y2VzIGFuIGVycm9yIGNvZGUgcHV0IHRoZSBlcnJvcgorbWVzc2FnZSBpbiBhIGRpYWxvZyBib3guICBoYWQgdG8gY2xvc2UgdGhlIHdpbmRvdyBhbmQgY2xvc2UgdGhlIGRpYWxvZy4gIE5vdwordGhlIGVycm9yIGNvZGUgaXMgZGlzcGxheWVkIGluIHRoZSBjb25zb2xlLiAoTmVncmkpCisKKyJjb21jdGwzMi5saWIiIHdhcyBtaXNzaW5nIGZyb20gdGhlIEdVSSBsaWJyYXJpZXMgaW4gTWFrZWZpbGUudzMyLiAoQmF0dGxlKQorCitJbiBJbnNlcnQgbW9kZSwgd2hlbiBlbnRlcmluZyBhIHdpbmRvdyBpbiBJbnNlcnQgbW9kZSwgYWxsb3cgdGhlIGN1cnNvciB0byBiZQorb25lIGNoYXIgYmV5b25kIHRoZSB0ZXh0LgorCitSZW5hbWVkIG1hY2hpbmUgZGVwZW5kZW50IHJlbmFtZSgpIHRvIG1jaF9yZW5hbWUoKS4gIERlZmluZSBtY2hfcmVuYW1lKCkgdG8KK3JlbmFtZSgpIHdoZW4gaXQgd29ya3MgcHJvcGVybHkuCisKK1JlbmFtZSB2aW1fY2hkaXIoKSB0byBtY2hfY2hkaXIoKSwgYmVjYXVzZSBpdCdzIG1hY2hpbmUgZGVwZW5kZW50LgorCitXaGVuIHVzaW5nIGFuIGFyZ2xpc3QsIGFuZCBlZGl0aW5nIGZpbGUgNSBvZiA0LCAiOnEiIGNvdWxkIGNhdXNlICItMSBtb3JlCitmaWxlcyB0byBlZGl0IiBlcnJvci4KKworSW4gaWZfcHl0aG9uLmMsIFZpbUNvbW1hbmQoKSBjYXVzZWQgYW4gYXNzZXJ0aW9uIHdoZW4gYSBkb19jbWRsaW5lKCkgZmFpbGVkLgorTW92ZWQgdGhlIFB5dGhvbl9SZWxlYXNlX1ZpbSgpIHRvIGJlZm9yZSB0aGUgVmltRXJyb3JDaGVjaygpLiAgKEhhcmtpbnMpCisKK0dpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgYW4gdW5rbm93biBhcmd1bWVudCBhZnRlciAiLS0iLiAgRS5nLiBmb3IgInZpbQorLS14eXoiLgorCitUaGUgRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBkaWRuJ3Qgc2V0IDxhZmlsZT4gdG8gdGhlIG5hbWUgb2YgdGhlIGNoYW5nZWQKK2ZpbGUuCisKK1doZW4gZG9pbmcgIjplIGZpbGUiLCBjYXVzaW5nIHRoZSBhdHRlbnRpb24gbWVzc2FnZSwgdGhlcmUgc29tZXRpbWVzIHdhcyBubworaGl0LWVudGVyIHByb21wdC4gIENhdXNlZCBieSBlbXB0eSBsaW5lIG9yICJlbmRpZiIgYXQgZW5kIG9mIHNvdXJjZWQgZmlsZS4KKworQSBsYXJnZSBudW1iZXIgb2YgcGF0Y2hlcyBmb3IgdGhlIFZNUyB2ZXJzaW9uLiAoSHVuc2FrZXIpCisKK1doZW4gQ1RSTC1MIGNvbXBsZXRpb24gKGZpbmQgbG9uZ2VzdCBtYXRjaCkgcmVzdWx0cyBpbiBhIHNob3J0ZXIgc3RyaW5nLCBubworY29tcGxldGlvbiBpcyBkb25lIChoYXBwZW5zIHdpdGggIjpoZWxwIikuCisKK0NyYXNoIGluIFdpbjMyIEdVSSB2ZXJzaW9uLCB3aGVuIHVzaW5nIGFuIEV4ICJAIiBjb21tYW5kLCBiZWNhdXNlCitMaW5lUG9pbnRlcnNbXSB3YXMgdXNlZCB3aGlsZSBub3QgaW5pdGlhbGl6ZWQuCisKK1dpbjMyIEdVSTogYWxsb3cgbWFwcGluZyBvZiBBbHQtU3BhY2UuCisKK091dHB1dCBmcm9tICJ2aW0gLWgiIHdhcyBzZW50IHRvIHN0ZGVyci4gIFNlbmRpbmcgaXQgdG8gc3Rkb3V0IGlzIGJldHRlciwgc28KK29uZSBjYW4gdXNlICJ2aW0gLWggfCBtb3JlIi4KKworSW4gY29tbWFuZC1saW5lIG1vZGUsICI6dmlbIV0iIHNob3VsZCByZWxvYWQgdGhlIGZpbGUsIGp1c3QgbGlrZSAiOmVbIV0iLgorSW4gRXggbW9kZSwgIjp2aSIgc3RvcHMgRXggbW9kZSwgYnV0IGRvZXNuJ3QgcmVsb2FkIHRoZSBmaWxlLiAgVGhpcyBpcyBWaQorY29tcGF0aWJsZS4KKworV2hlbiB1c2luZyBhICI6c2V0IGxzPTEiIGluIHRoZSAuZ3ZpbXJjIGZpbGUsIHdvdWxkIGdldCBhIHN0YXR1cyBsaW5lIGZvciBhCitzaW5nbGUgd2luZG93LiAgKFJvYmluc29uKQorCitEaWRuJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciAiOnNldCBhaSx4eCIuIChSb2VtZXIpCitEaWRuJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciAiOnNldCBhaT94eCIsICI6c2V0IGFpJnh4IiwgIjpzZXQgYWkheHgiLgorCitOb24tVW5peCBzeXN0ZW1zOiBUaGF0IGEgZmlsZSBleGlzdHMgYnV0IGlzIHVucmVhZGFibGUgaXMgcmVjb2duaXplZCBhcyAibmV3CitmaWxlIi4gIE5vdyBjaGVjayBmb3IgZXhpc3RlbmNlIHdoZW4gZmlsZSBjYW4ndCBiZSBvcGVuZWQgKGxpa2UgVW5peCkuCisKK1VuaXg6IG9zZGVmLnNoIGRpZG4ndCBoYW5kbGUgZGVjbGFyYXRpb25zIHdoZXJlIHRoZSBmdW5jdGlvbiBuYW1lIGlzIGF0IHRoZQorZmlyc3QgY29sdW1uIG9mIHRoZSBsaW5lLgorCitESkdQUDogU2hvcnRlbmluZyBvZiBmaWxlIG5hbWVzIGRpZG4ndCB3b3JrIHByb3Blcmx5LCBiZWNhdXNlIGdldF9jd2QoKQorcmV0dXJuZWQgYSBwYXRoIHdpdGggYmFja3NsYXNoZXMuIChOZWdyaSkKKworV2hlbiB1c2luZyBhICdjb21tZW50cycgcGFydCB3aGVyZSBhIHNwYWNlIGlzIHJlcXVpcmVkIGFmdGVyIHRoZSBtaWRkbGUgcGFydCwKK2Fsd2F5cyBpbnNlcnQgYSBzcGFjZSB3aGVuIHN0YXJ0aW5nIGEgbmV3IGxpbmUuICBIZWxwcyBmb3IgQyBjb21tZW50cywgYmVsb3cgYQorbGluZSB3aXRoICIvKioqKiIuCisKK1JlcGxhY2luZyBwYXRoIG9mIGhvbWUgZGlyZWN0b3J5IHdpdGggIn4vIiBjb3VsZCBiZSB3cm9uZyBmb3IgZmlsZSBuYW1lcword2l0aCBlbWJlZGRlZCBzcGFjZXMgb3IgY29tbWFzLgorCitBIGZldyBmaXhlcyBmb3IgdGhlIFNuaWZmIGludGVyZmFjZS4gKExlaGVyYmF1ZXIpCisKK1doZW4gYXNraW5nIHRvIGhpdCAneScgb3IgJ24nIChlLmcuIGZvciAiOjMsMWQiKSwgdXNpbmcgdGhlIG1vdXNlIGNhdXNlZAordHJvdWJsZS4gIFNhbWUgZm9yICI6cy94L3kvYyIgcHJvbXB0LgorCitXaXRoICdub3dyYXAnIGFuZCAnbGlzdCcsIGEgVGFiIGhhbGZ3YXkgb24gdGhlIHNjcmVlbiB3YXMgZGlzcGxheWVkIGFzIGJsYW5rcywKK2luc3RlYWQgb2YgdGhlIGNoYXJhY3RlcnMgc3BlY2lmaWVkIHdpdGggJ2xpc3RjaGFycycuICBBbHNvIGZvciBvdGhlcgorY2hhcmFjdGVycyB0aGF0IHRha2UgbW9yZSB0aGFuIG9uZSBzY3JlZW4gY2hhcmFjdGVyLgorCitXaGVuIHNldHRpbmcgJ2d1aWZvbnQnIHRvIGFuIHVua25vd24gZm9udCBuYW1lLCB0aGUgcHJldmlvdXMgZm9udCB3YXMgbG9zdCBhbmQKK2EgZGVmYXVsdCBmb250IHdvdWxkIGJlIHVzZWQuIChTdGVlZCkKKworRE9TOiBGaWxlbmFtZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGRpZG4ndCBnZXQgc2hvcnRlbmVkIHByb3Blcmx5LiAoTmVncmkpCisKK0RKR1BQOiBtYWtpbmcgYSBmdWxsIHBhdGggbmFtZSBvdXQgb2YgYSBmaWxlIG5hbWUgZGlkbid0IHdvcmsgcHJvcGVybHkgd2hlbgordGhlcmUgaXMgbm8gX2Z1bGxwYXRoKCkgZnVuY3Rpb24uIChOZWdyaSkKKworV2luMzIgY29uc29sZTogIjpzaCIgY2F1c2VkIGEgY3Jhc2guIChOZWdyaSkKKworV2luMzIgY29uc29sZTogU2V0dGluZyAnbGluZXMnIGFuZC9vciAnY29sdW1ucycgaW4gdGhlIF92aW1yYyBmYWlsZWQgbWlzZXJhYmx5CisoY291bGQgaGFuZyBXaW5kb3dzIDk1KS4gKE5lZ3JpKQorCitXaW4zMjogVGhlIGNoYW5nZS1kcml2ZSBmdW5jdGlvbiB3YXMgbm90IGNvcnJlY3QsIHdlbnQgdG8gdGhlIHdyb25nIGRyaXZlLgorKFRzaW5kbGVraHQpCisKK0dVSTogV2hlbiBlZGl0aW5nIGEgY29tbWFuZCBsaW5lIGluIEV4IG1vZGUsIFRhYnMgd2VyZSBzb21ldGltZXMgbm90CitiYWNrc3BhY2VkIHByb3Blcmx5LCBhbmQgdW5wcmludGFibGUgY2hhcmFjdGVycyB3ZXJlIGRpc3BsYXllZCBkaXJlY3RseS4KK25vbi1HVUkgY2FuIHN0aWxsIGJlIHdyb25nLCBiZWNhdXNlIGEgc3lzdGVtIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgdGhpcy4KKworIjpzZXQiIGRpZG4ndCBzdG9wIGFmdGVyIGFuIGVycm9yLiAgRm9yIGV4YW1wbGUgIjpzZXQgbm8gYWkiIGdhdmUgYW4gZXJyb3IgZm9yCisibm8iLCBidXQgc3RpbGwgc2V0ICJhaSIuICBOb3cgIjpzZXQiIHN0b3BzIGFmdGVyIHRoZSBmaXJzdCBlcnJvci4KKworV2hlbiBydW5uaW5nIGNvbmZpZ3VyZSBmb3IgY3RhZ3MsICRMREZMQUdTIHdhc24ndCBwYXNzZWQgdG8gaXQsIGNhdXNpbmcKK3Ryb3VibGUgZm9yIElSSVguCisKKyJAJSIgYW5kICJAIyIgd2hlbiBmaWxlIG5hbWUgbm90IHNldCBnYXZlIGFuIGVycm9yIG1lc3NhZ2UuICBOb3cgdGhleSBqdXN0CityZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiAoU3RlZWQpCisKK0NUUkwtWCBhbmQgQ1RSTC1BIGRpZG4ndCB3b3JrIGNvcnJlY3RseSB3aXRoIG5lZ2F0aXZlIGhleCBhbmQgb2N0YWwgbnVtYmVycy4KKyhTdGVlZCkKKworIjplY2hvIiBhbHdheXMgc3RhcnRlZCB3aXRoIGEgYmxhbmsuCisKK1VwZGF0aW5nIEdVSSBjdXJzb3Igc2hhcGUgZGlkbid0IGFsd2F5cyB3b3JrIChlLmcuLCB3aGVuIGJsaW5raW5nIGlzIG9mZikuCisKK0luIHNpbGVudCBFeCBtb2RlICgiZXggLXMiIG9yICJleCA8ZmlsZSIpICI6cy8vL3AiIGRpZG4ndCBwcmludCBhIGxpbmUuICBBbHNvCithIGZldyBvdGhlciBjb21tYW5kcyB0aGF0IGV4cGxpY2l0bHkgcHJpbnQgYSB0ZXh0IGxpbmUgZGlkbid0IHdvcmsuICBNYWRlIHRoaXMKK1ZpIGNvbXBhdGlibGUuCisKK1dpbjMyIHZlcnNpb24gb2YgX2NoZHJpdmUoKSBkaWRuJ3QgcmV0dXJuIGNvcnJlY3QgdmFsdWUuIChUc2luZGxla2h0KQorCitXaGVuIHVzaW5nICd0JyBpbiAnY29tcGxldGUnIG9wdGlvbiwgbm8gbG9uZ2VyIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBmb3IgYQorbWlzc2luZyB0YWdzIGZpbGUuCisKK1VuaXg6IHRnb3RvKCkgY2FuIHJldHVybiBOVUxMLCB3aGljaCB3YXMgbm90IGhhbmRsZWQgY29ycmVjdGx5IGluIGNvbmZpZ3VyZS4KKworV2hlbiBkb2luZyAiOmhlbHAiIGZyb20gYSBidWZmZXIgd2hlcmUgJ2JpbmFyeScgaXMgc2V0LCBhbHNvIGVkaXRlZCB0aGUgaGVscAorZmlsZSBpbiBiaW5hcnkgbW9kZS4gIENhdXNlZCBleHRyYSBeTXMgZm9yIERPUyBzeXN0ZW1zLgorCitDdXJzb3IgcG9zaXRpb24gaW4gYSBmaWxlIHdhcyByZXNldCB0byAxIHdoZW4gY2xvc2luZyBhIHdpbmRvdy4KKworIjohbHMiIGluIEV4IG1vZGUgc3dpdGNoZWQgb2ZmIGVjaG8uCisKK1doZW4gZG9pbmcgYSBkb3VibGUgY2xpY2sgaW4gd2luZG93IEEsIHdoaWxlIGN1cnJlbnRseSBpbiB3aW5kb3cgQiwgZmlyc3QKK2NsaWNrIHdvdWxkIHJlc2V0IGRvdWJsZSBjbGljayB0aW1lLCBoYWQgdG8gY2xpY2sgdGhyZWUgdGltZXMgdG8gc2VsZWN0IGEKK3dvcmQuCisKK1doZW4gdXNpbmcgPEYxMT4gaW4gbWFwcGluZ3MsICI6bWtleHJjIiBwcm9kdWNlZCBhbiBleHJjIGZpbGUgdGhhdCBjYW4ndCBiZQordXNlZCBpbiBWaSBjb21wYXRpYmxlIG1vZGUuICBBZGRlZCBzZXR0aW5nIG9mICdjcG8nIHRvIGF2b2lkIHRoaXMuICBBbHNvLCBhZGQKK2EgQ1RSTC1WIGluIGZyb250IG9mIGEgJzwnLCB0byBhdm9pZCBhIG5vcm1hbCBzdHJpbmcgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgYQorc3BlY2lhbCBrZXkgbmFtZS4KKworR2F2ZSBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZSBmb3IgIjpzZXQgZ3VpZm9udD0tKi1sdWNpZGEtKiI6IGZpcnN0ICJmb250IGlzCitub3QgZml4ZWQgd2lkdGgiLCB0aGVuICJVbmtub3duIGZvbnQiLgorCitTb21lIG9wdGlvbnMgd2VyZSBzdGlsbCBjb21wbGV0ZWx5IGxlZnQgb3V0LCBpbnN0ZWFkIG9mIGluY2x1ZGVkIGFzIGhpZGRlbgorb3B0aW9ucy4KKworV2hpbGUgcnVubmluZyB0aGUgWDExIEdVSSwgaWdub3JlIFNJR0hVUCBzaWduYWxzLiAgQXZvaWRzIGEgY3Jhc2ggYWZ0ZXIKK2V4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kIChpbiByYXJlIGNhc2VzKS4KKworSW4gb3NfdW5peHguaCwgc2lnbmFsKCkgd2FzIGRlZmluZWQgdG8gc2lnc2V0KCksIHdoaWxlIGl0IGFscmVhZHkgd2FzLgorCitNZW1vcnkgbGVhayB3aGVuIGV4ZWN1dGluZyBhdXRvY29tbWFuZHMgKHdhcyByZXBvcnRlZCBhcyBhIG1lbW9yeSBsZWFrIGluCitzeW50YXggaGlnaGxpZ2h0aW5nKS4KKworRGlkbid0IHByaW50IHNvdXJjZSBvZiBlcnJvciBzb21ldGltZXMsIGJlY2F1c2UgcG9pbnRlcnMgd2VyZSB0aGUgc2FtZSwKK2FsdGhvdWdoIG5hbWVzIHdlcmUgZGlmZmVyZW50LgorCitBdm9pZCBhIG51bWJlciBvZiBVTVIgZXJyb3JzIGZyb20gUHVyaWZ5ICh0aGlyZCBhcmd1bWVudCB0byBvcGVuKCkpLgorCitBIHN3YXAgZmlsZSBjb3VsZCBzdGlsbCBiZSBjcmVhdGVkIGp1c3QgYWZ0ZXIgc2V0dGluZyAndXBkYXRlY291bnQnIHRvIHplcm8sCit3aGVuIHRoZXJlIGlzIGFuIGVtcHR5IGJ1ZmZlciBhbmQgZG9pbmcgIjplIGZpbGUiLiAoS3V0c2NoZXJhKQorCitUZXN0IDM1IGZhaWxlZCBvbiA2NCBiaXQgbWFjaGluZXMuIChTY2hpbGQpCisKK1dpdGggInAiIGFuZCAiUCIgY29tbWFuZHMsIHJlZHJhd2luZyB3YXMgc2xvdy4KKworQXdrIHNjcmlwdCBmb3IgaHRtbCBkb2N1bWVudGF0aW9uIGRpZG4ndCB3b3JrIGNvcnJlY3RseSB3aXRoIEFJWCBhd2suCitSZXBsYWNlZCAiWyAsLik7XF0JXSIgd2l0aCAiW10gLC4pOwldIi4gKEJyaXNjb2UpCitUaGUgbWFrZWh0bWwuYXdrIHNjcmlwdCBoYWQgYSBzbWFsbCBwcm9ibGVtLCBjYXVzaW5nIGV4dHJhIGxpbmVzIHRvIGJlCitpbnNlcnRlZC4gKEJyaXNjb2UpCisKKyJncWdxIiBjb3VsZCBub3QgYmUgcmVwZWF0ZWQuICBSZXBlYXRpbmcgZm9yICJndWd1IiBhbmQgImdVZ1UiIHdvcmtlZCBpbiBhCit3cm9uZyB3YXkuICBBbHNvIG1hZGUgImdxcSIgd29yayB0byBiZSBjb25zaXN0ZW50IHdpdGggImd1dSIuCisKK0MgaW5kZW50IHdhcyB3cm9uZyBhZnRlciAiY2FzZSAnOic6Ii4KKworIjphdSBCdWZSZWFkUHJlICouYyBwdXQiOiBMaW5lIGZyb20gcHV0IHRleHQgd2FzIGRlbGV0ZWQsIGJlY2F1c2UgdGhlIGJ1ZmZlcgord2FzIHN0aWxsIGFzc3VtZWQgdG8gYmUgZW1wdHkuCisKK1RleHQgcGFzdGVkIHdpdGggdGhlIEVkaXQvUGFzdGUgbWVudSB3YXMgc3ViamVjdCB0byAndGV4dHdpZHRoJyBhbmQKKydhdXRvaW5kZW50Jy4gIFRoYXQgd2FzIGluY29uc2lzdGVudCB3aXRoIHVzaW5nIHRoZSBtb3VzZSB0byBwYXN0ZS4gIE5vdyAiKnAKK2lzIHVzZWQuCisKK1doZW4gdXNpbmcgQ1RSTC1XIENUUkwtXSBvbiBhIHdvcmQgdGhhdCdzIG5vdCBhIHRhZywgYW5kIHRoZW4gQ1RSTC1dIG9uIGEgdGFnLAord2luZG93IHdhcyBzcGxpdC4KKworIjp0cyIgZ290IHN0dWNrIG9uIGEgdGFncyBsaW5lIHRoYXQgaGFzIHR3byBleHRyYSBmaWVsZHMuCisKK0luIEluc2VydCBtb2RlLCB3aXRoICdzaG93bW9kZScgb24sIDxDLU8+PEMtRz4gbWVzc2FnZSB3YXMgZGlyZWN0bHkKK292ZXJ3cml0dGVuIGJ5IG1vZGUgbWVzc2FnZSwgaWYgcHJlY2VkZWQgd2l0aCBzZWFyY2ggY29tbWFuZCB3YXJuaW5nIG1lc3NhZ2UuCisKK1doZW4gcHV0dGluZyB0aGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24gd2l0aCAiPTxleHByPnAsIG5ld2xpbmVzIHdlcmUKK2luc2VydGVkIGxpa2UgXkAgKE5VTCBpbiB0aGUgZmlsZSkuICBOb3cgdGhlIHN0cmluZyBpcyBzcGxpdCB1cCBpbiBsaW5lcyBhdAordGhlIG5ld2xpbmUuCisKK3B1dGVudigpIHdhcyBkZWNsYXJlZCB3aXRoICJjb25zdCBjaGFyICoiIGluIHB0eS5jLCBidXQgd2l0aCAiY2hhciAqIiBpbgorb3NkZWYyLmguaW4uICBNYWRlIHRoZSBsYXN0IG9uZSBhbHNvICJjb25zdCBjaGFyICoiLgorCisiOmhlbHAge3dvcmR9Iiwgd2hlcmUgK3t3b3JkfSBpcyBhIGZlYXR1cmUsIGp1bXBlZCB0byB0aGUgZmVhdHVyZSBsaXN0IGluc3RlYWQKK29mIHdoZXJlIHRoZSBjb21tYW5kIHdhcyBleHBsYWluZWQuICBFLmcuLCAiOmhlbHAgYnJvd3NlIiwgIjpoZWxwIGF1dG9jbWQiLgorCitVc2luZyB0aGUgIlw8eHg+IiBmb3JtIGluIGFuIGV4cHJlc3Npb24gb25seSBnb3Qgb25lIGJ5dGUsIGV2ZW4gd2hlbiB1c2luZyBhCitzcGVjaWFsIGNoYXJhY3RlciB0aGF0IHVzZXMgc2V2ZXJhbCBieXRlcyAoZS5nLiwgIlw8Rjk+IikuCitDaGFuZ2VkICJcPEJTPiIgdG8gcHJvZHVjZSBDVFJMLUggaW5zdGVhZCBvZiB0aGUgc3BlY2lhbCBrZXkgY29kZSBmb3IgdGhlCitiYWNrc3BhY2Uga2V5LiAgIlw8RGVsPiIgcHJvZHVjZXMgMHg3Zi4KKworIjpta3ZpbXJjIiBkaWRuJ3Qgd3JpdGUgYSBjb21tYW5kIHRvIHNldCAnY29tcGF0aWJsZScgb3IgJ25vY29tcGF0aWJsZScuCisKK1RoZSBzaGVsbCBzeW50YXggZGlkbid0IGNvbnRhaW4gYSAic3luIHN5bmMgbWF4bGluZXMiIHNldHRpbmcuICBJbiBhIGxvbmcgZmlsZQord2l0aG91dCByZWNvZ25pemFibGUgaXRlbXMsIHN5bmNpbmcgdG9vayBzbyBsb25nIGl0IGxvb2tlZCBsaWtlIFZpbSBoYW5ncy4KK0FkZGVkIGEgbWF4bGluZXMgc2V0dGluZywgYW5kIG1hZGUgc3luY2luZyBpbnRlcnJ1cHRhYmxlLgorCitUaGUgImdzIiBjb21tYW5kIGRpZG4ndCBmbHVzaCBvdXRwdXQgYmVmb3JlIHdhaXRpbmcuCisKK01lbW9yeSBsZWFrcyBmb3I6CisgICAgIjppZiAwIHwgbGV0IGEgPSBiIC4gYyB8IGVuZGlmIgorICAgICJsZXQgYSA9IGJbY10iCisgICAgIjpzbyB7ZmlsZX0iIHdoZXJlIHtmaWxlfSBjb250YWlucyBhICI6d2hpbGUiCisKK0dVSTogYWxsb2NhdGVkIGZvbnRzIHdlcmUgbmV2ZXIgcmVsZWFzZWQuIChMZW9uYXJkKQorCitNYWtlZmlsZS5ib3I6CistIENoYW5nZWQgJChERUZJTkVTKSBpbnRvIGEgbGlzdCBvZiAiLUQiIG9wdGlvbnMsIHNvIHRoYXQgaXQgY2FuIGFsc28gYmUgdXNlZAorICBmb3IgdGhlIHJlc291cmNlIGNvbXBpbGVyLiAobm90IHRlc3RlZCEpCistICJiY2MuY2ZnIiB3YXMgdXNlZCBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLiAgV2hlbiBidWlsZGluZyBmb3IgYW5vdGhlcgorICBjb25maWd1cmF0aW9uLCB0aGUgc2V0dGluZ3MgZm9yIHRoZSBwcmV2aW91cyBvbmUgd291bGQgYmUgdXNlZC4gIE1vdmVkCisgICJiY2MuY2ZnIiB0byB0aGUgb2JqZWN0IGRpcmVjdG9yeS4gKEdlZGRlcykKKy0gSW5jbHVkZWQgdGFyZ2V0cyBmb3IgdmltcnVuLCBpbnN0YWxsLCBjdGFncyBhbmQgeHhkLiAgQ2hhbmdlZCB0aGUgZGVmYXVsdCB0bworICB1c2UgdGhlIEJvcmxhbmQgRExMIFJ1bnRpbWUgTGlicmFyeSwgbWFrZXMgVmltLmV4ZSBhIGxvZyBzbWFsbGVyLiAoQWFyb24pCisKKyIyKiIgc2VhcmNoIGZvciB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yIHdpdGggIjIiIHByZXBlbmRlZC4gKExlb25hcmQpCisKK1doZW4gZGVsZXRpbmcgaW50byBhIHNwZWNpZmljIHJlZ2lzdGVyLCB3b3VsZCBzdGlsbCBvdmVyd3JpdGUgdGhlIG5vbi1XaW4zMgorR1VJIHNlbGVjdGlvbi4gIE5vdyAiIngiKlAgd29ya3MuCisKK1doZW4gZGVsZXRpbmcgaW50byB0aGUgIiIgcmVnaXN0ZXIsIHdvdWxkIHdyaXRlIHRvIHRoZSBsYXN0IHVzZWQgcmVnaXN0ZXIuCitOb3cgIiJ4IGFsd2F5cyB3cml0ZXMgdG8gdGhlIHVubmFtZWQgcmVnaXN0ZXIuCisKK0dVSSBBdGhlbmE6IEEgc3VibWVudSB3aXRoIGEgJy4nIGluIGl0IGRpZG4ndCB3b3JrLiAgRS5nLiwKKyI6YW1lbnUgU3ludGF4LlhZXC5aLmZvbyBsbGwiLgorCitXaGVuIGZpcnN0IGRvaW5nICI6dGFnIGZvbyIgYW5kIHRoZW4gIjp0bmV4dCIgYW5kL29yICI6dHNlbGVjdCIgdGhlIG9yZGVyIG9mCittYXRjaGluZyB0YWdzIGNvdWxkIGNoYW5nZSwgYmVjYXVzZSB0aGUgY3VycmVudCBmaWxlIGlzIGRpZmZlcmVudC4gIE5vdyB0aGUKK2V4aXN0aW5nIG1hdGNoZXMgYXJlIGtlcHQgaW4gdGhlIHNhbWUgb3JkZXIsIG5ld2x5IGZvdW5kIG1hdGNoZXMgYXJlIGFkZGVkCithZnRlciB0aGVtLCBub3QgbWF0dGVyIHdoYXQgdGhlIGN1cnJlbnQgZmlsZSBpcy4KKworIjp0YSIgZGlkbid0IGZpbmQgdGhlIHNlY29uZCBlbnRyeSBpbiBhIHRhZ3MgZmlsZSwgaWYgdGhlIHNlY29uZCBlbnRyeSB3YXMKK2xvbmdlciB0aGFuIHRoZSBmaXJzdCBvbmUuCisKK1doZW4gdXNpbmcgIjpzZXQgc2kgdHc9NyIgaW5zZXJ0aW5nICJmb28ge15QfSIgbWFkZSB0aGUgIn0iIGluc2VydGVkIGF0IHRoZQord3JvbmcgcG9zaXRpb24uICBjYW5fc2kgd2FzIHN0aWxsIFRSVUUgd2hlbiB0aGUgY3Vyc29yIGlzIG5vdCBpbiB0aGUgaW5kZW50IG9mCit0aGUgbGluZS4KKworUnVubmluZyBhbiBleHRlcm5hbCBjb21tYW5kIGluIFdpbjMyIHZlcnNpb24gaGFkIHRoZSBwcm9ibGVtIHRoYXQgVmltIGV4aXRzCit3aGVuIHRoZSBYIG9uIHRoZSBjb25zb2xlIGlzIGhpdCAoYW5kIGNvbmZpcm1lZCkuICBOb3cgdXNlIHRoZSAidmltcnVuIgorY29tbWFuZCB0byBzdGFydCB0aGUgZXh0ZXJuYWwgY29tbWFuZCBpbmRpcmVjdGx5LiAoTmVncmkpCisKK1dpbjMyIEdVSTogV2hlbiBydW5uaW5nIGFuIGV4dGVybmFsIGZpbHRlciwgZG8gaXQgaW4gYSBtaW5pbWl6ZWQgRE9TIGJveC4KKyhOZWdyaSkKKworIjpsZXQiIGxpc3RlZCB2YXJpYWJsZXMgd2l0aG91dCB0cmFuc2xhdGlvbiBpbnRvIHByaW50YWJsZSBjaGFyYWN0ZXJzLgorCitXaW4zMiBjb25zb2xlOiBXaGVuIHJlc2l6aW5nIHRoZSB3aW5kb3csIHN3aXRjaGluZyBiYWNrIHRvIHRoZSBvbGQgc2l6ZQorKHdoZW4gZXhpdGluZyBvciBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCkgc29tZXRpbWVzIGZhaWxlZC4gKE5lZ3JpKQorVGhpcyBhcHBlYXJzIHRvIGFsc28gZml4IGEgIm5vbiBmaXhhYmxlIiBwcm9ibGVtOgorV2luMzIgY29uc29sZSBpbiBOVCA0LjA6IFdoZW4gcnVubmluZyBWaW0gaW4gYSBjbWQgd2luZG93IHdpdGggYSBzY3JvbGxiYXIsCit0aGUgc2Nyb2xsYmFyIGRpc2FwcGVhcmVkIGFuZCB3YXMgbm90IHJlc3RvcmVkIHdoZW4gVmltIGV4aXRzLiAgVGhpcyBkb2VzIHdvcmsKK3VuZGVyIE5UIDMuNTEsIGl0IGFwcGVhcnMgbm90IHRvIGJlIGEgVmltIHByb2JsZW0uCisKK1doZW4gZXhlY3V0aW5nIEJ1ZkRlbGV0ZSBhbmQgQnVmVW5sb2FkIGF1dG9jb21tYW5kcyBmb3IgYSBidWZmZXIgd2l0aG91dCBhCituYW1lLCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBidWZmZXIgd2FzIHVzZWQgZm9yIDxhZmlsZT4uCisKK1doZW4ganVtcGluZyB0byBhIHRhZyBpdCByZXBvcnRlZCAidGFnIDEgb2YgPjIiLCB3aGlsZSBpbiBmYWN0IHRoZXJlIGNvdWxkIGJlCitvbmx5IHR3byBtYXRjaGVzLiAgQ2hhbmdlZCB0byAidGFnIDEgb2YgMiBvciBtb3JlIi4KKworIjp0anVtcCB0YWciIGRpZCBhIGxpbmVhciBzZWFyY2ggaW4gdGhlIHRhZ3MgZmlsZSwgd2hpY2ggY2FuIGJlIHNsb3cuCisKK0NvbmZpZ3VyZSBkaWRuJ3QgZmluZCAiTGliWG0uc28uMi4wIiwgYSBYbSBsaWJyYXJ5IHdpdGggYSB2ZXJzaW9uIG51bWJlci4KKworV2luMzIgR1VJOiBXaGVuIHVzaW5nIGEgc2hpZnRlZCBrZXkgd2l0aCBBTFQsIHRoZSBzaGlmdCBtb2RpZmllciB3b3VsZCByZW1haW4KK3NldCwgZXZlbiB3aGVuIGl0IHdhcyBhbHJlYWR5IHVzZWQgYnkgY2hhbmdpbmcgdGhlIHVzZWQga2V5LiAgRS5nLiwgIjxNLVMtOT4iCityZXN1bHRlZCBpbiAiPE0tUy0oPiIsIGJ1dCBpdCBzaG91bGQgYmUgIjxNLSg+Ii4gKE5lZ3JpKQorCitBIGNhbGwgdG8gZ2FfaW5pdCgpIHdhcyBvZnRlbiBmb2xsb3dlZCBieSBzZXR0aW5nIGdyb3dzaXplIGFuZCBpdGVtc2l6ZS4KK0NyZWF0ZWQgZ2FfaW5pdDIoKSBmb3IgdGhpcywgd2hpY2ggbG9va3MgYmV0dGVyLiAoQWFyb24pCisKK0Z1bmN0aW9uIGZpbGVyZWFkYWJsZSgpIGNvdWxkIGNhbGwgZm9wZW4oKSB3aXRoIGFuIGVtcHR5IHN0cmluZywgd2hpY2ggbWlnaHQKK2JlIGlsbGVnYWwuCisKK1ggV2luZG93cyBHVUk6IFdoZW4gZXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgdGhhdCBvdXRwdXRzIHRleHQsIGNvdWxkCit3cml0ZSBvbmUgY2hhcmFjdGVyIGJleW9uZCB0aGUgZW5kIG9mIGEgYnVmZmVyLCB3aGljaCBjYXVzZWQgYSBjcmFzaC4gKEtvaGFuKQorCitXaGVuIHVzaW5nICIqIiBvciAiIyIgb24gYSBzdHJpbmcgdGhhdCBpbmNsdWRlcyAnLycgb3IgJz8nICh3aGVuIHRoZXNlIGFyZQoraW5jbHVkZWQgaW4gJ2lzaycpLCB0aGV5IHdlcmUgbm90IGVzY2FwZWQuIChQYXJtZWxhbikKKworV2hlbiBhZGRpbmcgYSBUb29sQmFyIG1lbnUgaW4gdGhlIE1vdGlmIEdVSSwgdGhlIHN1Ym1lbnVfaWQgZmllbGQgd2FzIG5vdAorY2xlYXJlZCwgY2F1c2luZyByYW5kb20gcHJvYmxlbXMuCisKK1doZW4gYWRkaW5nIGEgbWVudSwgdGhlIGNoZWNrIGlmIHRoaXMgbWVudSAob3Igc3VibWVudSkgbmFtZSBhbHJlYWR5IGV4aXN0cworZGlkbid0IGNvbXBhcmUgd2l0aCB0aGUgc2ltcGxpZmllZCB2ZXJzaW9uIChubyBtbmVtb25pYyBvciBhY2NlbGVyYXRvcikgb2YgdGhlCituZXcgbWVudS4gIENvdWxkIGdldCB0d28gbWVudXMgd2l0aCB0aGUgc2FtZSBuYW1lLCBlLmcuLCAiRmlsZSIgYW5kICImRmlsZSIuCisKK0JyZWFraW5nIGEgbGluZSBiZWNhdXNlIG9mICd0ZXh0d2lkdGgnIGF0IHRoZSBsYXN0IGxpbmUgaW4gdGhlIHdpbmRvdyBjYXVzZWQgYQorcmVkcmF3IG9mIHRoZSB3aG9sZSB3aW5kb3cgaW5zdGVhZCBvZiBhIHNjcm9sbC4gIFNwZWVkcyB1cCBub3JtYWwgdHlwaW5nIHdpdGgKKyd0ZXh0d2lkdGgnIGEgbG90IGZvciBzbG93IHRlcm1pbmFscy4KKworQW4gaW52YWxpZCBsaW5lIG51bWJlciBwcm9kdWNlZCBhbiAiaW52YWxpZCByYW5nZSIgZXJyb3IsIGV2ZW4gd2hlbiBpdCB3YXNuJ3QKK3RvIGJlIGV4ZWN1dGVkIChpbnNpZGUgImlmIDAiKS4KKworV2hlbiB0aGUgdW5uYW1lZCwgZmlyc3QgYnVmZmVyIGlzIHJlLXVzZWQsIHRoZSAiQnVmRGVsZXRlIiBhdXRvY29tbWFuZCB3YXMKK25vdCBjYWxsZWQuICBJdCB3b3VsZCBzdGljayBpbiBhIGJ1ZmZlciBsaXN0IG1lbnUuCisKK1doZW4gZG9pbmcgIiUiIG9uIHRoZSBOVUwgYWZ0ZXIgdGhlIGxpbmUsIGEgInsiIG9yICJ9IiBpbiB0aGUgbGFzdCBjaGFyYWN0ZXIKK29mIHRoZSBsaW5lIHdhcyBub3QgZm91bmQuCisKK1RoZSBJbnNlcnQgbW9kZSBtZW51IHdhcyBub3QgdXNlZCBmb3IgdGhlICJzIiBjb21tYW5kLCB0aGUgT3BlcmF0b3ItcGVuZGluZworbWVudSB3YXMgdXNlZCBpbnN0ZWFkLgorCitXaXRoICdjb21wYXRpYmxlJyBzZXQsIHNvbWUgc3ludGF4IGhpZ2hsaWdodGluZyB3YXMgbm90IGNvcnJlY3QsIGJlY2F1c2Ugb2YKK3VzaW5nICJbXHRdIiBmb3IgYSBzZWFyY2ggcGF0dGVybi4gIE5vdyB1c2UgdGhlIHJlZ2V4cHMgZm9yIHN5bnRheAoraGlnaGxpZ2h0aW5nIGxpa2UgdGhlICdjcG9wdGlvbnMnIG9wdGlvbiBpcyBlbXB0eSAoYXMgd2FzIGRvY3VtZW50ZWQgYWxyZWFkeSkuCisKK1doZW4gdXNpbmcgIm1hcCA8TS1TcGFjZT4gbXMiIG9yICJtYXAgPFNwYWNlPiBzc3MiIHRoZSBvdXRwdXQgb2YgIjptYXAiIGRpZG4ndAorc2hvdyBhbnkgbGhzIGZvciB0aGUgbWFwcGluZyAoaWYgJ2lzcHJpbnQnIGluY2x1ZGVzIDE2MCkuICBOb3cgYWx3YXlzIHVzZQorPFNwYWNlPiBhbmQgPE0tU3BhY2U+LCBldmVuIHdoZW4gdGhleSBhcmUgcHJpbnRhYmxlLgorCitBZGp1c3RlZCB0aGUgU3ludGF4IG1lbnUsIHNvIHRoYXQgdGhlIGxvd2VzdCBlbnRyeSBmaXRzIG9uIGEgc21hbGwgc2NyZWVuIChmb3IKK0F0aGVuYSwgd2hlcmUgbWVudXMgZG9uJ3Qgd3JhcCkuCisKK1doZW4gdXNpbmcgQ1RSTC1FIG9yIENUUkwtWSBpbiBJbnNlcnQgbW9kZSBmb3IgY2hhcmFjdGVycyBsaWtlICdvJywgJ3gnIGFuZAorZGlnaXRzLCByZXBlYXRpbmcgdGhlIGluc2VydCBkaWRuJ3Qgd29yay4KKworVGhlIGZpbGUgInRvb2xzL2NjZmlsdGVyLlJFQURNRS50eHQiIGNvdWxkIG5vdCBiZSB1bnBhY2tlZCB3aGVuIHVzaW5nIHNob3J0CitmaWxlIG5hbWVzLCBiZWNhdXNlIG9mIHRoZSB0d28gZG90cy4gIFJlbmFtZWQgaXQgdG8KKyJ0b29scy9jY2ZpbHRlcl9SRUFETUUudHh0Ii4KKworRm9yIGEgZGFyayAnYmFja2dyb3VuZCcsIHVzaW5nIEJsdWUgZm9yIERpcmVjdG9yeSBhbmQgU3BlY2lhbEtleSBoaWdobGlnaHQKK2dyb3VwcyBpcyBub3QgdmVyeSByZWFkYWJsZS4gIFVzZSBDeWFuIGluc3RlYWQuCisKK0luIHRoZSBmdW5jdGlvbiB1Y19zY2FuX2F0dHIoKSBpbiBleF9kb2NtZC5jIHRoZXJlIHdhcyBhIGdvdG8gdGhhdCBqdW1wZWQgaW50bworYSBibG9jayB3aXRoIGEgbG9jYWwgdmFyaWFibGUuICBUaGF0J3MgaWxsZWdhbCBmb3Igc29tZSBjb21waWxlcnMuCisKK1dpbjMyIEdVSTogVGhlcmUgd2FzIGEgcm93IG9mIHBpeGVscyBhdCB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cgd2hpY2ggd2FzIG5vdAorZHJhd24uIChBYXJvbikKKworVW5kZXIgRE9TLCBlZGl0aW5nICJmaWxlbmFtZS8iIGNyZWF0ZWQgYSBzd2FwIGZpbGUgb2YgImZpbGVuYW1lLy5zd3AiLiAgU2hvdWxkCitiZSAiZmlsZW5hbWUvX3N3cCIuCisKK1dpbjMyIEdVSTogcG9pbnRlciB3YXMgaGlkZGVuIHdoZW4gZXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQuCisKK1doZW4gJ3NvJyBpcyA5OTksICJKIiBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUgZGlkbid0IHJlZGlzcGxheSBjb3JyZWN0bHkuCisKKyI6MGEiIGluc2VydGVkIGFmdGVyIHRoZSBmaXJzdCBsaW5lLCBpbnN0ZWFkIG9mIGJlZm9yZSB0aGUgZmlyc3QgbGluZS4KKworVW5peDogV2lsZGNhcmQgZXhwYW5zaW9uIGRpZG4ndCBoYW5kbGUgc2luZ2xlIHF1b3RlcyBhbmQge30gcGF0dGVybnMuICBOb3cKKyI6ZmlsZSAnd2luZG93LmMnIiByZW1vdmVzIHRoZSBxdW90ZXMgYW5kICI6ZSAnbWFpbiouYyciIHdvcmtzIChsaXRlcmFsICcqJykuCisiOmZpbGUge299e259e2V9IiBub3cgcmVzdWx0cyBpbiBmaWxlIG5hbWUgIm9uZSIuCisKK01lbW9yeSBsZWFrIHdoZW4gc2V0dGluZyBhIHN0cmluZyBvcHRpb24gYmFjayB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDUuMwkJCQkJCSp2ZXJzaW9uLTUuMyoKKworVmVyc2lvbiA1LjMgd2FzIGEgYnVnLWZpeCB2ZXJzaW9uIG9mIDUuMi4gIFRoZXJlIGFyZSBub3QgbWFueSBjaGFuZ2VzLgorSW1wcm92ZW1lbnRzIG1hZGUgYmV0d2VlbiB2ZXJzaW9uIDUuMiBhbmQgNS4zOgorCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTUuMyoKKy0tLS0tLS0KKworUmVuYW1lZCAiSURFIiBtZW51IHRvICJUb29scyIgbWVudS4KKworCitBZGRlZAkJCQkJCQkqYWRkZWQtNS4zKgorLS0tLS0KKworV2luMzIgR1VJOiBHaXZlIGEgd2FybmluZyB3aGVuIFZpbSBpcyBhY3RpdmF0ZWQsIGFuZCBvbmUgb2YgdGhlIGZpbGVzIGNoYW5nZWQKK3NpbmNlIGVkaXRpbmcgc3RhcnRlZC4gKE5lZ3JpKQorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC01LjMqCistLS0tLQorCis1LjIuMTogV2luMzIgR1VJOiBzcGFjZSBmb3IgZXh0ZXJuYWwgY29tbWFuZCB3YXMgbm90IHByb3Blcmx5IGFsbG9jYXRlZCwgY291bGQKK2NhdXNlIGEgY3Jhc2guIChBYXJvbikgIFRoaXMgd2FzIHRoZSByZWFzb24gdG8gYnJpbmcgb3V0IDUuMyBxdWlja2x5IGFmdGVyCis1LjIuCisKKzUuMi4yOiBTb21lIGNvbW1hbmRzIGRpZG4ndCBjb21wbGFpbiB3aGVuIHVzZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgYWx0aG91Z2gKK3RoZXkgbmVlZCBvbmU6ICI6YmFkZCIsICI6YnJvd3NlIiwgIjpjYWxsIiwgIjpjb25maXJtIiwgIjpiZWhhdmUiLAorIjpkZWxmdW5jdGlvbiIsICI6ZGVsY29tbWFuZCIgYW5kICI6dGVhcm9mZiIuCisiOmVuZGZ1bmN0aW9uIiBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gZ2F2ZSB3cm9uZyBlcnJvciBtZXNzYWdlOiAiQ29tbWFuZCBub3QKK2ltcGxlbWVudGVkIi4gIFNob3VsZCBiZSAiOmVuZGZ1bmN0aW9uIG5vdCBpbnNpZGUgYSBmdW5jdGlvbiIuCisKKzUuMi4zOiBXaW4zMiBHVUk6IFdoZW4gZ3ZpbSB3YXMgaW5zdGFsbGVkIGluICJQcm9ncmFtIGZpbGVzIiwgb3IgYW5vdGhlciBwYXRoCit3aXRoIGEgc3BhY2UgaW4gaXQsIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcyB3aXRoIHZpbXJ1biBkaWRuJ3Qgd29yay4KKworNS4yLjQ6IFBhc3Rpbmcgd2l0aCB0aGUgbW91c2UgaW4gSW5zZXJ0IG1vZGUgbGVmdCB0aGUgY3Vyc29yIG9uIHRoZSBsYXN0CitwYXN0ZWQgY2hhcmFjdGVyLCBpbnN0ZWFkIG9mIGJlaGluZCBpdC4KKworNS4yLjU6IEluIEluc2VydCBtb2RlLCBjdXJzb3IgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGluZSwgYSBzaGlmdC1jdXJzb3ItbGVmdAorZGlkbid0IGluY2x1ZGUgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzZWxlY3Rpb24uCisKKzUuMi42OiBXaGVuIGRlbGV0aW5nIHRleHQgZnJvbSBJbnNlcnQgbW9kZSAod2l0aCAiPEMtTz5EIiBvciB0aGUgbW91c2UpLCB3aGljaAoraW5jbHVkZXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lLCB0aGUgY3Vyc29yIGNvdWxkIGJlIGxlZnQgb24gdGhlIGxhc3QKK2NoYXJhY3RlciBpbiB0aGUgbGluZSwgaW5zdGVhZCBvZiBqdXN0IGFmdGVyIGl0LgorCis1LjIuNzogV2luMzIgR1VJOiBzY3JvbGxiYXIgd2FzIG9uZSBwaXhlbCB0b28gYmlnLgorCis1LjIuODogQ29tcGxldGlvbiBvZiAiUG9wVXAiIG1lbnUgc2hvd2VkIHRoZSBkZXJpdmF0ZXMgIlBvcFVwYyIsICJQb3BVUGkiLAorZXRjLiAgIjptZW51IiBhbHNvIHNob3dlZCB0aGVzZS4KKworNS4yLjk6IFdoZW4gdXNpbmcgdHdvIGlucHV0KCkgZnVuY3Rpb25zIG9uIGEgcm93LCB0aGUgcHJvbXB0IHdvdWxkIG5vdCBiZQorZHJhd24gaW4gY29sdW1uIDAuCisKKzUuMi4xMDogQSBsb29wIHdpdGggaW5wdXQoKSBjb3VsZCBub3QgYmUgYnJva2VuIHdpdGggQ1RSTC1DLgorCis1LjIuMTE6ICI6Y2FsbCBhc2RmIiBhbmQgIjpjYWxsIGFzZGYoIiBkaWRuJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLgorCis1LjIuMTI6IFJlY3Vyc2l2ZWx5IHVzaW5nICI6bm9ybWFsIiBjcmFzaGVzIFZpbSBhZnRlciBhIHdoaWxlLiAgRS5nLjoKKyI6bWFwIGdxIDpub3JtYWwgZ3E8Q1I+IgorCis1LjIuMTM6IFN5bnRheCBoaWdobGlnaHRpbmcgdXNlZCAnaXNrZXl3b3JkJyBmcm9tIHdyb25nIGJ1ZmZlci4gIFdoZW4gdXNpbmcKKyI6aGVscCIsIHRoZW4gIi9cayoiIGluIGFub3RoZXIgd2luZG93IHdpdGggJ2hsc2VhcmNoJyBzZXQuCisKKzUuMi4xNDogV2hlbiB1c2luZyAiOnNvdXJjZSIgZnJvbSBhIGZ1bmN0aW9uLCBnbG9iYWwgdmFyaWFibGVzIHdvdWxkIG5vdCBiZQorYXZhaWxhYmxlIHVubGVzcyAiZzoiIHdhcyB1c2VkLgorCis1LjIuMTU6IFhQTSBmaWxlcyBjYW4gaGF2ZSB0aGUgZXh0ZW5zaW9uICIucG0iLCB3aGljaCBpcyB0aGUgc2FtZSBhcyBmb3IgUGVybAorbW9kdWxlcy4gIEFkZGVkICJzeW50YXgvcG1maWxlLnZpbSIgdG8gaGFuZGxlIHRoaXMuCisKKzUuMi4xNjogT24gV2luMzIgYW5kIEFtaWdhLCAiZWNobyBleHBhbmQoIiU6cDpoIikiIHJlbW92ZWQgb25lIGRpcm5hbWUgaW4gYW4KK2VtcHR5IGJ1ZmZlci4gIG1jaF9GdWxsbmFtZSgpIGRpZG4ndCBhcHBlbmQgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIGEgZGlyZWN0b3J5CituYW1lLgorCitTaG91bGQgaW5jbHVkZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgaW4gdGhlIFZpc3VhbCBhcmVhIHdoZW4gdXNpbmcKKydzZWxlY3Rpb24nICJleGNsdXNpdmUiLiAgVGhpcyB3YXNuJ3QgZG9uZSBmb3IgIiUiLCAiZSIsICJFIiwgInQiIGFuZCAiZiIuCisKKyIicCB3b3VsZCBhbHdheXMgcHV0IHJlZ2lzdGVyIDAsIGluc3RlYWQgb2YgdGhlIHVubmFtZWQgKGxhc3QgdXNlZCkgcmVnaXN0ZXIuCitSZXZlcnNlIHRoZSBjaGFuZ2UgdGhhdCAiInggZG9lc24ndCB3cml0ZSBpbiB0aGUgdW5uYW1lZCAobGFzdCB1c2VkKSByZWdpc3Rlci4KK0l0IHdvdWxkIGFsd2F5cyB3cml0ZSBpbiByZWdpc3RlciAwLCB3aGljaCBpc24ndCB2ZXJ5IHVzZWZ1bC4gIFVzZSAiLXggZm9yIHRoZQorcGFzdGUgbWFwcGluZ3MgaW4gVmlzdWFsIG1vZGUuCisKK1doZW4gdGhlcmUgaXMgb25lIGxvbmcgbGluZSBvbiB0aGUgc2NyZWVuLCBhbmQgJ3Nob3djbWQnIGlzIG9mZiwgIjAkIiBkaWRuJ3QKK3JlZHJhdyB0aGUgc2NyZWVuLgorCitXaW4zMiBHVUk6IFdoZW4gdXNpbmcgJ21vdXNlaGlkZScsIHRoZSBwb2ludGVyIHdvdWxkIGZsaWNrZXIgd2hlbiB0aGUgY3Vyc29yCitzaGFwZSBpcyBjaGFuZ2VkLiAoTmVncmkpCisKK1doZW4gY2FuY2VsbGluZyBWaXN1YWwgbW9kZSwgYW5kIHRoZSBjdXJzb3IgbW92ZXMgdG8gdGhlIHN0YXJ0LCB0aGUgd2FudGVkCitjb2x1bW4gd2Fzbid0IHNldCwgImsiIG9yICJqIiBtb3ZlZCB0byB0aGUgd3JvbmcgY29sdW1uLgorCitXaGVuIHVzaW5nICI6YnJvd3NlIiBvciAiOmNvbmZpcm0iLCB3YXMgY2hlY2tpbmcgZm9yIGEgY29tbWVudCBhbmQgc2VwYXJhdGluZworYmFyLCB3aGljaCBjYW4gYnJlYWsgc29tZSBjb21tYW5kcy4KKworSW5jbHVkZWQgZml4ZXMgZm9yIE1hY2ludG9zaC4gKEtpZWxob3JuKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZFUlNJT04gNS40CQkJCQkJKnZlcnNpb24tNS40KgorCitWZXJzaW9uIDUuNCBhZGRzIG5ldyBmZWF0dXJlcywgdXNlZnVsIGNoYW5nZXMgYW5kIGEgbG90IG9mIGJ1ZyBmaXhlcy4KKworCitSdW50aW1lIGRpcmVjdG9yeSBpbnRyb2R1Y2VkCQkJCSpuZXctcnVudGltZS1kaXIqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaXN0cmlidXRlZCBydW50aW1lIGZpbGVzIGFyZSBub3cgaW4gJFZJTVJVTlRJTUUsIHRoZSB1c2VyIGZpbGVzIGluICRWSU0uCitZb3Ugbm9ybWFsbHkgZG9uJ3Qgc2V0ICRWSU1SVU5USU1FIGJ1dCBsZXQgVmltIGZpbmQgaXQsIGJ5IHVzaW5nCiskVklNL3ZpbXt2ZXJzaW9ufSwgb3IgdXNlICRWSU0gd2hlbiB0aGF0IGRvZXNuJ3QgZXhpc3QuICBUaGlzIGFsbG93cyBmb3IKK3NlcGFyYXRpbmcgdGhlIHVzZXIgZmlsZXMgZnJvbSB0aGUgZGlzdHJpYnV0ZWQgZmlsZXMgYW5kIG1ha2VzIGl0IG1vcmUgZWFzeSB0bwordXBncmFkZSB0byBhbm90aGVyIHZlcnNpb24uICBJdCBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGtlZXAgdHdvIHZlcnNpb25zIG9mCitWaW0gYXJvdW5kLCBlYWNoIHdpdGggdGhlaXIgb3duIHJ1bnRpbWUgZmlsZXMuCisKK0luIHRoZSBVbml4IGRpc3RyaWJ1dGlvbiB0aGUgcnVudGltZSBmaWxlcyBoYXZlIGJlZW4gbW92ZWQgdG8gdGhlICJydW50aW1lIgorZGlyZWN0b3J5LiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb3B5IGFsbCB0aGUgcnVudGltZSBmaWxlcyBhdCBvbmNlLAord2l0aG91dCB0aGUgbmVlZCB0byBrbm93IHdoYXQgbmVlZHMgdG8gYmUgY29waWVkLgorCitUaGUgYXJjaGl2ZXMgZm9yIERPUywgV2luZG93cywgQW1pZ2EgYW5kIE9TLzIgbm93IGhhdmUgYW4gZXh0cmEgdG9wLWxldmVsCisidmltIiBkaXJlY3RvcnkuICBUaGlzIGlzIHRvIG1ha2UgY2xlYXIgdGhhdCB1c2VyLW1vZGlmaWVkIGZpbGVzIHNob3VsZCBiZSBwdXQKK2hlcmUuICBUaGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGV4ZWN1dGFibGVzIGRvZXNuJ3QgaGF2ZSAnLScgb3IgJy4nCitjaGFyYWN0ZXJzLiAgVGhpcyBhdm9pZHMgc3RyYW5nZSBleHRlbnNpb25zLgorCitUaGUgJFZJTSBhbmQgJFZJTVJVTlRJTUUgdmFyaWFibGVzIGFyZSBzZXQgd2hlbiB0aGV5IGFyZSBmaXJzdCB1c2VkLiAgVGhpcworYWxsb3dzIHRoZW0gdG8gYmUgdXNlZCBieSBQZXJsLCBmb3IgZXhhbXBsZS4KKworVGhlIHJ1bnRpbWUgZmlsZXMgYXJlIGFsc28gZm91bmQgaW4gYSBkaXJlY3RvcnkgY2FsbGVkICIkVklNL3J1bnRpbWUiLiAgVGhpcworaGVscHMgd2hlbiBydW5uaW5nIFZpbSBhZnRlciBqdXN0IHVucGFja2luZyB0aGUgcnVudGltZSBhcmNoaXZlLiAgV2hlbiB1c2luZworYW4gZXhlY3V0YWJsZSBpbiB0aGUgInNyYyIgZGlyZWN0b3J5LCBWaW0gY2hlY2tzIGlmICJ2aW01NCIgb3IgInJ1bnRpbWUiIGNhbgorYmUgYWRkZWQgYWZ0ZXIgcmVtb3ZpbmcgaXQuICBUaGlzIG1ha2UgdGhlIHJ1bnRpbWUgZmlsZXMgYmUgZm91bmQganVzdCBhZnRlcgorY29tcGlsaW5nLgorCitBIGRlZmF1bHQgZm9yICRWSU1SVU5USU1FIGNhbiBiZSBnaXZlbiBpbiB0aGUgVW5peCBNYWtlZmlsZS4gIFRoaXMgaXMgdXNlZnVsCitpZiAkVklNIGRvZXNuJ3QgcG9pbnQgdG8gYWJvdmUgdGhlIHJ1bnRpbWUgZGlyZWN0b3J5IGJ1dCB0byBlLmcuLCAiL2V0Yy8iLgorCisKK0ZpbGV0eXBlIGludHJvZHVjZWQJCQkJCSpuZXctZmlsZXR5cGUtNS40KgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXggZmlsZXMgYXJlIG5vdyBsb2FkZWQgd2l0aCB0aGUgbmV3IEZpbGVUeXBlIGF1dG9jb21tYW5kLiAgT2xkCisibXlzeW50YXhmaWxlIiBmaWxlcyB3aWxsIG5vIGxvbmdlciB3b3JrLiB8ZmlsZXR5cGVzfAorCitUaGUgc2NyaXB0cyBmb3IgbG9hZGluZyBzeW50YXggaGlnaGxpZ2h0aW5nIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIHVzZSB0aGUKK25ldyBTeW50YXggYXV0b2NvbW1hbmQgZXZlbnQuCisKK1RoaXMgY29tYmluYXRpb24gb2YgRmlsZXR5cGUgYW5kIFN5bnRheCBldmVudHMgYWxsb3dzIHR1bmluZyB0aGUgc3ludGF4CitoaWdobGlnaHRpbmcgYSBiaXQgbW9yZSwgYWxzbyB3aGVuIHNlbGVjdGVkIGZyb20gdGhlIFN5bnRheCBtZW51LiAgVGhlCitGaWxlVHlwZSBhdXRvY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNldCBvcHRpb25zIGFuZCBtYXBwaW5ncyBzcGVjaWZpY2FsbHkKK2ZvciB0aGF0IHR5cGUgb2YgZmlsZS4KKworVGhlICIkVklNUlVOVElNRS9maWxldHlwZS52aW0iIGZpbGUgaXMgbm90IGxvYWRlZCBhdXRvbWF0aWNhbGx5LiAgVGhlCisiOmZpbGV0eXBlIG9uIiBjb21tYW5kIGhhcyBiZWVuIGFkZGVkIGZvciB0aGlzLiAgIjpzeW50YXggb24iIGFsc28gbG9hZHMgaXQuCisKK1RoZSAnZmlsZXR5cGUnIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4gIEl0IGlzIHVzZWQgdG8gdHJpZ2dlciB0aGUgRmlsZVR5cGUKK2F1dG9jb21tYW5kIGV2ZW50LCBsaWtlIHRoZSAnc3ludGF4JyBvcHRpb24gZG9lcyBmb3IgdGhlIFN5bnRheCBldmVudC4KKworIjpzZXQgc3ludGF4PU9GRiIgYW5kICI6c2V0IHN5bnRheD1PTiIgY2FuIGJlIHVzZWQgKGluIGEgbW9kZWxpbmUpIHRvIHN3aXRjaAorc3ludGF4IGhpZ2hsaWdodGluZyBvbi9vZmYgZm9yIHRoZSBjdXJyZW50IGZpbGUuCisKK1RoZSBTeW50YXggbWVudSBjb21tYW5kcyBoYXZlIGJlZW4gbW92ZWQgdG8gJFZJTVJVTlRJTUUvbWVudS52aW0uICBUaGUgU3ludGF4CittZW51IGlzIGluY2x1ZGVkIGJvdGggd2hlbiAiOmZpbGV0eXBlIG9uIiBhbmQgd2hlbiAiOnN5bnRheCBtYW51YWwiIGlzIHVzZWQuCisKK1JlbmFtZWQgdGhlIG9sZCAnZmlsZXR5cGUnIG9wdGlvbiB0byAnb3NmaWxldHlwZScuICBJdCB3YXMgb25seSB1c2VkIGZvcgorUklTQ09TLiAgJ2ZpbGV0eXBlJyBpcyBub3cgdXNlZCBmb3IgdGhlIGNvbW1vbiBmaWxlIHR5cGUuCisKK0FkZGVkIHRoZSAiOnN5bnRheCBtYW51YWwiIGNvbW1hbmQuICBBbGxvd3MgbWFudWFsIHNlbGVjdGlvbiBvZiB0aGUgc3ludGF4IHRvCitiZSB1c2VkLCBlLmcuLCBmcm9tIGEgbW9kZWxpbmUuCisKKworVmltIHNjcmlwdCBsaW5lIGNvbnRpbnVhdGlvbgkJCSpuZXctbGluZS1jb250aW51YXRpb24qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYW4gRXggbGluZSBzdGFydHMgd2l0aCBhIGJhY2tzbGFzaCwgaXQgaXMgY29uY2F0ZW5hdGVkIHRvIHRoZSBwcmV2aW91cworbGluZS4gIFRoaXMgYXZvaWRzIHRoZSBuZWVkIGZvciBsb25nIGxpbmVzLiB8bGluZS1jb250aW51YXRpb258IChSb2VtZXIpCitFeGFtcGxlOiA+CisJaWYgICBoYXMoImRpYWxvZ19jb24iKSB8fAorCSAgIFwgaGFzKCJkaWFsb2dfZ3VpIikKKwkgICAgOmxldCByZXN1bHQgPSBjb25maXJtKCJFbnRlciB5b3VyIGNob2ljZSIsCisJCQkJXCAiJlllc1xuJk5vXG4mTWF5YmUiLAorCQkJCVwgMikKKwllbmRpZgorCisKK0ltcHJvdmVkIHNlc3Npb24gZmlsZXMJCQkJKmltcHJvdmVkLXNlc3Npb25zKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZXcgd29yZHMgZm9yICdzZXNzaW9ub3B0aW9ucyc6CistICJoZWxwIglSZXN0b3JlIHRoZSBoZWxwIHdpbmRvdy4KKy0gImJsYW5rIglSZXN0b3JlIGVtcHR5IHdpbmRvd3MuCistICJ3aW5wb3MiCVJlc3RvcmUgdGhlIFZpbSB3aW5kb3cgcG9zaXRpb24uICBVc2VzIHRoZSBuZXcgIjp3aW5wb3MiCisJCWNvbW1hbmQKKy0gImJ1ZmZlcnMiCVJlc3RvcmUgaGlkZGVuIGFuZCB1bmxvYWRlZCBidWZmZXJzLiAgV2l0aG91dCBpdCBvbmx5IHRoZQorCQlidWZmZXJzIGluIHdpbmRvd3MgYXJlIHJlc3RvcmVkLgorLSAic2xhc2giCVJlcGxhY2UgYmFja3dhcmQgYnkgZm9yd2FyZCBzbGFzaGVzIGluIGZpbGUgbmFtZXMuCistICJnbG9iYWxzIglTdG9yZSBnbG9iYWwgdmFyaWFibGVzLgorLSAidW5peCIJVXNlIHVuaXggZmlsZSBmb3JtYXQgKDxOTD4gaW5zdGVhZCBvZiA8Q1I+PE5MPikKKworVGhlICI6bWtzZXNzaW9uIiBhbmQgJ3Nlc3Npb25vcHRpb25zJyBhcmUgbm93IGluIHRoZSArbWtzZXNzaW9uIGZlYXR1cmUuCisKK1RoZSB0b3AgbGluZSBvZiB0aGUgd2luZG93IGlzIGFsc28gcmVzdG9yZWQgd2hlbiB1c2luZyBhIHNlc3Npb24gZmlsZS4KKworIjpta3Nlc3Npb24iIGFuZCAiOm1rdmltcmMiIGRvbid0IHN0b3JlICdmaWxlZm9ybWF0JywgaXQgc2hvdWxkIGJlIGRldGVjdGVkCit3aGVuIGxvYWRpbmcgYSBmaWxlLgorCisoTW9zdCBvZiB0aGlzIHdhcyBkb25lIGJ5IFZpbmNlIE5lZ3JpIGFuZCBSb2JlcnQgV2ViYikKKworCitBdXRvY29tbWFuZHMgaW1wcm92ZWQJCQkJKmltcHJvdmVkLWF1dG9jbWRzLTUuNCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZXcgZXZlbnRzOgorfEZpbGVUeXBlfAlXaGVuIHRoZSBmaWxlIHR5cGUgaGFzIGJlZW4gZGV0ZWN0ZWQuCit8Rm9jdXNHYWluZWR8CVdoZW4gVmltIGdvdCBpbnB1dCBmb2N1cy4gKE5lZ3JpKQorfEZvY3VzTG9zdHwJV2hlbiBWaW0gbG9zdCBpbnB1dCBmb2N1cy4gKE5lZ3JpKQorfEJ1ZkNyZWF0ZXwJQ2FsbGVkIGp1c3QgYWZ0ZXIgYSBuZXcgYnVmZmVyIGhhcyBiZWVuIGNyZWF0ZWQgb3IgaGFzIGJlZW4KKwkJcmVuYW1lZC4gKE1hZHNlbikKK3xDdXJzb3JIb2xkfAlUcmlnZ2VyZWQgd2hlbiBubyBrZXkgaGFzIGJlZW4gdHlwZWQgZm9yICd1cGRhdGV0aW1lJy4gIENhbiBiZQorCQl1c2VkIHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuIChOZWdyaSkKKwkJSW1wbGVtZW50ZWQgQ3Vyc29ySG9sZCBhdXRvY29tbWFuZCBldmVudCBmb3IgVW5peC4gKFplbGxuZXIpCisJCUFsc28gZm9yIEFtaWdhIGFuZCBNUy1ET1MuCit8R1VJRW50ZXJ8CUNhbiBiZSB1c2VkIHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBHVUkgd2luZG93IGFmdGVyIGl0IGhhcworCQliZWVuIGNyZWF0ZWQgKGUuZy4sIGEgIjp3aW5wb3MgMTAwIDUwIikuCit8QnVmSGlkZGVufAlXaGVuIGEgYnVmZmVyIGJlY29tZXMgaGlkZGVuLiAgVXNlZCB0byBkZWxldGUgdGhlCisJCW9wdGlvbi13aW5kb3cgd2hlbiBpdCBiZWNvbWVzIGhpZGRlbi4KKworQWxzbyB0cmlnZ2VyIHxCdWZEZWxldGV8IGp1c3QgYmVmb3JlIGEgYnVmZmVyIGlzIGdvaW5nIHRvIGJlIHJlbmFtZWQuIChNYWRzZW4pCisKK1RoZSAiPGFtYXRjaD4iIHBhdHRlcm4gY2FuIGJlIHVzZWQgbGlrZSAiPGFmaWxlPiIgZm9yIGF1dG9jb21tYW5kcywgZXhjZXB0Cit0aGF0IGl0IGlzIHRoZSBtYXRjaGluZyB2YWx1ZSBmb3IgdGhlIEZpbGVUeXBlIGFuZCBTeW50YXggZXZlbnRzLgorCitXaGVuICI6bGV0IEAvID0gPHN0cmluZz4iIGlzIHVzZWQgaW4gYW4gYXV0b2NvbW1hbmQsIHRoaXMgbGFzdCBzZWFyY2ggcGF0dGVybgord2lsbCBiZSB1c2VkIGFmdGVyIHRoZSBhdXRvY29tbWFuZCBmaW5pc2hlcy4KKworTWFkZSBsb2FkaW5nIGF1dG9jb21tYW5kcyBhIGJpdCBmYXN0ZXIuICBBdm9pZCBkb2luZyBzdHJsZW4oKSBvbiBlYWNoIGV4aXRpbmcKK3BhdHRlcm4gZm9yIGVhY2ggbmV3IHBhdHRlcm4gYnkgcmVtZW1iZXJpbmcgdGhlIGxlbmd0aC4KKworCitFbmNyeXB0aW9uCQkJCQkJKm5ldy1lbmNyeXB0aW9uKgorLS0tLS0tLS0tLQorCitGaWxlcyBjYW4gYmUgZW5jcnlwdGVkIHdoZW4gd3JpdGluZyBhbmQgZGVjcnlwdGVkIHdoZW4gcmVhZGluZy4gIEFkZGVkIHRoZQorJ2tleScgb3B0aW9uLCAiLXgiIGNvbW1hbmQgbGluZSBhcmd1bWVudCBhbmQgIjpYIiBjb21tYW5kLiB8ZW5jcnlwdGlvbnwgKGJhc2VkCitvbiBwYXRjaCBmcm9tIE1vaHNpbiBBaG1lZCkKKworV2hlbiByZWFkaW5nIGEgZmlsZSwgdGhlcmUgaXMgYW4gYXV0b21hdGljIGRldGVjdGlvbiB3aGV0aGVyIGl0IGhhcyBiZWVuCitjcnlwdGVkLiAgVmltIHdpbGwgdGhlbiBwcm9tcHQgZm9yIHRoZSBrZXkuCisKK05vdGUgdGhhdCB0aGUgZW5jcnlwdGlvbiBtZXRob2QgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBWaS4gIFRoZSBlbmNyeXB0aW9uIGlzCitub3QgdW5icmVha2FibGUuICBUaGlzIGFsbG93cyBpdCB0byBiZSBleHBvcnRlZCBmcm9tIHRoZSBVUy4KKworCitHVEsgR1VJIHBvcnQJCQkJCQkqbmV3LUdUSy1HVUkqCistLS0tLS0tLS0tLS0KKworTmV3IEdVSSBwb3J0IGZvciBHVEsrLiAgSW5jbHVkZXMgYSB0b29sYmFyLCBtZW51IHRlYXJvZmZzLCBldGMuIHxndWktZ3RrfAorQWRkZWQgdGhlIHw6aGVscGZpbmR8IGNvbW1hbmQuIChLYWhuIGFuZCBEYWxlY2tpKQorCisKK01lbnUgY2hhbmdlcwkJCQkJCSptZW51LWNoYW5nZXMtNS40KgorLS0tLS0tLS0tLS0tCisKK01lbnVzIGNhbiBub3cgYWxzbyBiZSB1c2VkIGluIHRoZSBjb25zb2xlLiAgSXQgaXMgZW5hYmxlZCBieSB0aGUgbmV3Cisnd2lsZG1lbnUnIG9wdGlvbi4gIFRoaXMgc2hvd3MgbWF0Y2hlcyBmb3IgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gbGlrZSBhCittZW51LiAgVGhpcyB3b3JrcyBhcyBhIG1pbmltYWwgZmlsZSBicm93c2VyLgorCitUaGUgbmV3IHw6ZW1lbnV8IGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBhIG1lbnUgaXRlbS4KKworVXNlcyB0aGUgbGFzdCBzdGF0dXMgbGluZSB0byBsaXN0IGl0ZW1zLCBvciBpbnNlcnRzIGEgbGluZSBqdXN0IGFib3ZlIHRoZQorY29tbWFuZCBsaW5lLiAgKE5lZ3JpKQorCitUaGUgJ3dpbGRjaGFyeCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgJ3dpbGRtZW51JyBjb21wbGV0aW9uIGZyb20gYQorbWFwcGluZy4KKworV2hlbiBjb21waWxlZCB3aXRob3V0IG1lbnVzLCB0aGlzIGNhbiBiZSBkZXRlY3RlZCB3aXRoIGhhcygibWVudSIpLiAgQWxzbyBzaG93Cit0aGlzIGluIHRoZSAiOnZlcnNpb24iIG91dHB1dC4gIEFsbG93IGNvbXBpbGluZyBHVUkgdmVyc2lvbnMgd2l0aG91dCBtZW51CitzdXBwb3J0LiAgT25seSBpbmNsdWRlIHRvb2xiYXIgc3VwcG9ydCB3aGVuIHRoZXJlIGlzIG1lbnUgc3VwcG9ydC4KKworTW92ZWQgdGhlICJXaW5kb3ciIG1lbnUgYWxsIHRoZSB3YXkgdG8gdGhlIHJpZ2h0IChwcmlvcml0eSA3MCkuICBMb29rcyBtb3JlCitmYW1pbGlhciBmb3IgcGVvcGxlIHdvcmtpbmcgd2l0aCBNUy1XaW5kb3dzLCBzaG91bGRuJ3QgbWF0dGVyIGZvciBvdGhlcnMuCisKK0luY2x1ZGVkICJCdWZmZXJzIiBtZW51LiAgV29ya3Mgd2l0aCBleGlzdGluZyBhdXRvY29tbWFuZHMgYW5kIGZ1bmN0aW9ucy4gIEl0CitjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgIm5vX2J1ZmZlcnNfbWVudSIgdmFyaWFibGUuICAoQWFyb24gYW5kIE1hZHNlbikKKworV2luMzIgc3VwcG9ydHMgc2VwYXJhdG9ycyBpbiBhIG1lbnU6ICItLiotIi4gKEdlZGRlcykKK01lbnUgc2VwYXJhdG9ycyBmb3IgTW90aWYgbm93IHdvcmsgdG9vLgorCitNYWRlIFBvcHVwIG1lbnUgZm9yIE1vdGlmIEdVSSB3b3JrLiAoTWFkc2VuKQorCisnTScgZmxhZyBpbiAnZ3Vpb3B0aW9ucyc6IERvbid0IHNvdXJjZSB0aGUgc3lzdGVtIG1lbnUuCisKK0FsbCB0aGUgbWVudSBjb2RlIGhhcyBiZWVuIG1vdmVkIGZyb20gZ3VpLmMgdG8gbWVudS5jLgorCisKK1ZpbWluZm8gaW1wcm92ZWQJCQkJCSppbXByb3ZlZC12aW1pbmZvKgorLS0tLS0tLS0tLS0tLS0tLQorCitOZXcgZmxhZ3MgZm9yICd2aW1pbmZvJzoKKychJwlTdG9yZSBnbG9iYWwgdmFyaWFibGVzIGluIHRoZSB2aW1pbmZvIGZpbGUgaWYgdGhleSBhcmUgaW4gdXBwZXJjYXNlCisJbGV0dGVycy4gKE5lZ3JpKQorJ2gnCURvICI6bm9obHNlYXJjaCIgd2hlbiBsb2FkaW5nIGEgdmltaW5mbyBmaWxlLgorCitTdG9yZSBzZWFyY2ggcGF0dGVybnMgaW4gdGhlIHZpbWluZm8gZmlsZSB3aXRoIHRoZWlyIG9mZnNldCwgbWFnaWMsIGV0Yy4gIEFsc28KK3N0b3JlIHRoZSBmbGFnIHdoZXRoZXIgJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgaXMgb24gb3Igb2ZmICh3aGljaCBpcyBub3QgdXNlZAoraWYgdGhlICdoJyBmbGFnIGlzIGluICd2aW1pbmZvJykuCisKK0dpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHNldHRpbmcgJ3ZpbWluZm8nIHdpdGhvdXQgY29tbWFzLgorCisKK1ZhcmlvdXMgbmV3IGNvbW1hbmRzCQkJCQkqbmV3LWNvbW1hbmRzLTUuNCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09wZXJhdG9yIHxnP3w6IHJvdDEzIGVuY29kaW5nLiAoTmVncmkpCisKK3x6SHwgYW5kIHx6THwgY29tbWFuZHM6IEhvcml6b250YWwgc2Nyb2xsaW5nIGJ5IGhhbGYgYSBwYWdlLgorfGdtfCBtb3ZlIGN1cnNvciB0byBtaWRkbGUgb2Ygc2NyZWVuIGxpbmUuIChJZGVhcyBieSBDYW1wYmVsbCkKKworT3BlcmF0aW9ucyBvbiBWaXN1YWwgYmxvY2tzOiB8dl9iX0l8LCB8dl9iX0F8LCB8dl9iX2N8LCB8dl9iX0N8LCB8dl9iX3J8LAorfHZfYl88fCBhbmQgfHZfYl8+fC4gKEtlbGx5KQorCitOZXcgY29tbWFuZDogQ1RSTC1cIENUUkwtTiwgd2hpY2ggZG9lcyBub3RoaW5nIGluIE5vcm1hbCBtb2RlLCBhbmQgZ29lcyB0bworTm9ybWFsIG1vZGUgd2hlbiBpbiBJbnNlcnQgb3IgQ29tbWFuZC1saW5lIG1vZGUuICBDYW4gYmUgdXNlZCBieSBWaXNWaW0gb3IKK290aGVyIE9MRSBwcm9ncmFtcyB0byBtYWtlIHN1cmUgVmltIGlzIGluIE5vcm1hbCBtb2RlLCB3aXRob3V0IGNhdXNpbmcgYSBiZWVwLgorfENUUkwtXF9DVFJMLU58CisKKyI6Y3Njb3BlIGtpbGwiIGNvbW1hbmQgdG8gdXNlIHRoZSBjb25uZWN0aW9uIGZpbGVuYW1lLiB8OmNzY29wZXwgKEthaG4pCisKK3w6c3RhcnRpbnNlcnR8IGNvbW1hbmQ6IFN0YXJ0IEluc2VydCBtb2RlIG5leHQuCisKK3w6aGlzdG9yeXwgY29tbWFuZCwgdG8gc2hvdyBhbGwgZm91ciB0eXBlcyBvZiBoaXN0b3JpZXMuIChSb2VtZXIpCisKK3xbbXwsIHxbTXwsIHxdbXwgYW5kIHxdTXwgY29tbWFuZHMsIGZvciBqdW1waW5nIGJhY2t3YXJkL2ZvcndhcmQgdG8gc3RhcnQvZW5kCitvZiBtZXRob2QgaW4gYSAoSmF2YSkgY2xhc3MuCisKKyI6QCoiIGV4ZWN1dGVzIHRoZSAqIHJlZ2lzdGVyLiB8OkB8IChBY2V2ZWRvKQorCit8Z298IGFuZCB8OmdvdG98IGNvbW1hbmRzOiBKdW1wIHRvIGJ5dGUgb2Zmc2V0IGluIHRoZSBmaWxlLgorCit8Z1J8IGFuZCB8Z3J8IGNvbW1hbmQ6IFZpcnR1YWwgUmVwbGFjZSBtb2RlLiAgUmVwbGFjZSBjaGFyYWN0ZXJzIHdpdGhvdXQKK2NoYW5naW5nIHRoZSBsYXlvdXQuIChXZWJiKQorCisiOmNkIC0iIGNoYW5nZXMgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIGJlZm9yZSB0aGUgcHJldmlvdXMgIjpjZCIgY29tbWFuZC4KK3w6Y2QtfCAoV2ViYikKKworVGFnIHByZXZpZXcgY29tbWFuZHMgfDpwdGFnfC4gIFNob3dzIHRoZSByZXN1bHQgb2YgYSAiOnRhZyIgaW4gYSBkZWRpY2F0ZWQKK3dpbmRvdy4gIENhbiBiZSB1c2VkIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGUgdGFnIChlLmcuLCBmdW5jdGlvbiBhcmd1bWVudHMpLgorKE5lZ3JpKQorfDpwY2xvc2V8IGNvbW1hbmQsIGFuZCBDVFJMLVcgQ1RSTC1aOiBDbG9zZSBwcmV2aWV3IHdpbmRvdy4gKE1vb3JlKQorJ3ByZXZpZXdoZWlnaHQnIG9wdGlvbiwgaGVpZ2h0IGZvciB0aGUgcHJldmlldyB3aW5kb3cuCitBbHNvIHw6cHBvcHwsIHw6cHRuZXh0fCwgfDpwdHByZXZpb3VzfCwgfDpwdE5leHR8LCB8OnB0cmV3aW5kfCwgfDpwdGxhc3R8LgorCit8OmZpbmR8IGFuZCB8OnNmaW5kfCBjb21tYW5kczogRmluZCBhIGZpbGUgaW4gJ3BhdGgnLCAoc3BsaXQgd2luZG93KSBhbmQgZWRpdAoraXQuCisKK1RoZSB8Om9wdGlvbnN8IGNvbW1hbmQgb3BlbnMgYW4gb3B0aW9uIHdpbmRvdyB0aGF0IHNob3dzIHRoZSBjdXJyZW50IG9wdGlvbgordmFsdWVzLiAgT3IgdXNlICI6YnJvd3NlIHNldCIgdG8gb3BlbiBpdC4gIE9wdGlvbnMgYXJlIGdyb3VwZWQgYnkgZnVuY3Rpb24uCitPZmZlcnMgc2hvcnQgaGVscCBvbiBlYWNoIG9wdGlvbi4gIEhpdCA8Q1I+IHRvIGp1bXAgdG8gbW9yZSBoZWxwLiAgRWRpdCB0aGUKK29wdGlvbiB2YWx1ZSBhbmQgaGl0IDxDUj4gb24gYSAic2V0IiBsaW5lIHRvIHNldCBhIG5ldyB2YWx1ZS4KKworCitWYXJpb3VzIG5ldyBvcHRpb25zCQkJCQkqbmV3LW9wdGlvbnMtNS40KgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTY3JvbGwtYmluZGluZzogJ3Njcm9sbGJpbmQnIGFuZCAnc2Nyb2xsb3B0JyBvcHRpb25zLiAgQWRkZWQgfDpzeW5jYmluZHwKK2NvbW1hbmQuICBNYWtlcyB3aW5kb3dzIHNjcm9sbCB0aGUgc2FtZSBhbW91bnQgKGhvcml6b250YWxseSBhbmQvb3IKK3ZlcnRpY2FsbHkpLiAoUmFsc3RvbikKKworJ2NvbnNrZXknIG9wdGlvbiBmb3IgTVMtRE9TLiAgVXNlIGRpcmVjdCBjb25zb2xlIEkvTy4gIFRoaXMgc2hvdWxkIHdvcmsgd2l0aAordGVsbmV0ICh1bnRlc3RlZCEpLgorCisnc3RhdHVzbGluZScgb3B0aW9uOiBDb25maWd1cmFibGUgY29udGVudHMgb2YgdGhlIHN0YXR1cyBsaW5lLiAgQWxzbyBhbGxvd3MKK3Nob3dpbmcgdGhlIGJ5dGUgb2Zmc2V0IGluIHRoZSBmaWxlLiAgSGlnaGxpZ2h0aW5nIHdpdGggJTEqIHRvICU5KiwgdXNpbmcgdGhlCituZXcgaGlnaGxpZ2h0IGdyb3VwcyBVc2VyMSB0byBVc2VyOS4gIChNYWRzZW4pCisKKydydWxlcmZvcm1hdCcgb3B0aW9uOiBDb25maWd1cmFibGUgY29udGVudHMgb2YgdGhlIHJ1bGVyLCBsaWtlICdzdGF0dXNsaW5lJy4KKyhNYWRzZW4pCisKKyd3cml0ZScgb3B0aW9uOiBXaGVuIG9mZiwgd3JpdGluZyBmaWxlcyBpcyBub3QgYWxsb3dlZC4gIEF2b2lkcyBvdmVyd3JpdGluZyBhCitmaWxlIGV2ZW4gd2l0aCAiOnchIi4gIFRoZSB8LW18IGNvbW1hbmQgbGluZSBvcHRpb24gcmVzZXRzICd3cml0ZScuCisKKydjbGlwYm9hcmQnIG9wdGlvbjogSG93IHRoZSBjbGlwYm9hcmQgaXMgdXNlZC4gIFZhbHVlICJ1bm5hbWVkIjogVXNlIHVubmFtZWQKK3JlZ2lzdGVyIGxpa2UgIiouIChDb3J0b3Bhc3NpKSAgVmFsdWUgImF1dG9zZWxlY3QiOiBMaWtlIHdoYXQgJ2EnIGluCisnZ3Vpb3B0aW9ucycgZG9lcyBidXQgd29ya3MgaW4gdGhlIHRlcm1pbmFsLgorCisnZ3VpZm9udHNldCcgb3B0aW9uOiBTcGVjaWZ5IGZvbnRzIGZvciB0aGUgK2ZvbnRzZXQgZmVhdHVyZSwgZm9yIHRoZSBYMTEgR1VJCit2ZXJzaW9ucy4gIEFsbG93cyB1c2luZyBub3JtYWwgZm9udHMgd2hlbiB2aW0gaXMgY29tcGlsZWQgd2l0aCB0aGlzIGZlYXR1cmUuCisoTmFtKQorCisnZ3VpaGVhZHJvb20nIG9wdGlvbjogSG93IG11Y2ggcm9vbSB0byBhbGxvdyBhYm92ZS9iZWxvdyB0aGUgR1VJIHdpbmRvdy4KK1VzZWQgZm9yIE1vdGlmLCBBdGhlbmEgYW5kIEdUSy4KKworSW1wbGVtZW50ZWQgJ3RhZ3N0YWNrJyBvcHRpb246IFdoZW4gb2ZmLCBwdXNoaW5nIHRhZ3Mgb250byB0aGUgc3RhY2sgaXMKK2Rpc2FibGVkIChWaSBjb21wYXRpYmxlKS4gIFVzZWZ1bCBmb3IgbWFwcGluZ3MuCisKKydzaGVsbHNsYXNoJyBvcHRpb24uICBPbmx5IGZvciBzeXN0ZW1zIHRoYXQgdXNlIGEgYmFja3NsYXNoIGFzIGEgZmlsZQorc2VwYXJhdG9yLiAgVGhpcyBvcHRpb24gd2lsbCB1c2UgYSBmb3J3YXJkIHNsYXNoIGluIGZpbGUgbmFtZXMgd2hlbiBleHBhbmRpbmcKK2l0LiAgVXNlZnVsIHdoZW4gJ3NoZWxsJyBpcyBzaCBvciBjc2guCisKKydwYXN0ZXRvZ2dsZScgb3B0aW9uOiBLZXkgc2VxdWVuY2UgdGhhdCB0b2dnbGVzICdwYXN0ZScuICBXb3JrcyBhcm91bmQgdGhlCitwcm9ibGVtIHRoYXQgbWFwcGluZ3MgZG9uJ3Qgd29yayBpbiBJbnNlcnQgbW9kZSB3aGVuICdwYXN0ZScgaXMgc2V0LgorCisnZGlzcGxheScgb3B0aW9uOiBXaGVuIHNldCB0byAibGFzdGxpbmUiLCB0aGUgbGFzdCBsaW5lIGZpbGxzIHRoZSB3aW5kb3csCitpbnN0ZWFkIG9mIGJlaW5nIHJlcGxhY2VkIHdpdGggIkAiIGxpbmVzLiAgT25seSB0aGUgbGFzdCB0aHJlZSBjaGFyYWN0ZXJzIGFyZQorcmVwbGFjZWQgd2l0aCAiQEBAIiwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGluZSBoYXMgbm90IGZpbmlzaGVkIHlldC4KKworJ3N3aXRjaGJ1Zicgb3B0aW9uOiBBbGxvd3MgcmUtdXNpbmcgZXhpc3Rpbmcgd2luZG93cyBvbiBhIGJ1ZmZlciB0aGF0IGlzIGJlaW5nCitqdW1wZWQgdG8sIG9yIHNwbGl0IHRoZSB3aW5kb3cgdG8gb3BlbiBhIG5ldyBidWZmZXIuIChSb2VtZXIpCisKKyd0aXRsZW9sZCcgb3B0aW9uLiAgUmVwbGFjZXMgdGhlIGZpeGVkIHN0cmluZyAiVGhhbmtzIGZvciBmbHlpbmcgVmltIiwgd2hpY2gKK2lzIHVzZWQgdG8gc2V0IHRoZSB0aXRsZSB3aGVuIGV4aXRpbmcuIChTY2hpbGQpCisKKworVmltIHNjcmlwdHMJCQkJCQkqbmV3LXNjcmlwdC01LjQqCistLS0tLS0tLS0tLQorCitUaGUgfGV4aXN0cygpfCBmdW5jdGlvbiBjYW4gYWxzbyBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIGEgZnVuY3Rpb24uIChSb2VtZXIpCitBbiBpbnRlcm5hbCBmdW5jdGlvbiBpcyBub3cgZm91bmQgd2l0aCBhIGJpbmFyeSBzZWFyY2gsIHNob3VsZCBiZSBhIGJpdAorZmFzdGVyLiAoUm9lbWVyKQorCitOZXcgZnVuY3Rpb25zOgorLSB8Z2V0d2lucG9zeCgpfCBhbmQgfGdldHdpbnBvc3koKXw6IGdldCBWaW0gd2luZG93IHBvc2l0aW9uLiAoV2ViYikKKy0gfGhpc3RucigpfCwgfGhpc3RhZGQoKXwsIHxoaXN0Z2V0KCl8IGFuZCB8aGlzdGRlbCgpfDogTWFrZSBoaXN0b3J5CisgIGF2YWlsYWJsZS4gKFJvZW1lcikKKy0gfG1hcGFyZygpfDogUmV0dXJucyByaHMgb2YgYSBtYXBwaW5nLiAgQmFzZWQgb24gYSBwYXRjaCBmcm9tIFZpa2FzLgorLSB8bWFwY2hlY2soKXw6IENoZWNrIGlmIGEgbWFwIG5hbWUgbWF0Y2hlcyB3aXRoIGFuIGV4aXN0aW5nIG9uZS4KKy0gfHZpc3VhbG1vZGUoKXw6IFJldHVybiB0eXBlIG9mIGxhc3QgVmlzdWFsIG1vZGUuIChXZWJiKQorLSB8bGliY2FsbCgpfDogQ2FsbCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeS4gIEN1cnJlbnRseSBvbmx5IGZvciBXaW4zMi4gKE5lZ3JpKQorLSB8YnVmd2lubnIoKXw6IGZpbmQgd2luZG93IHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBidWZmZXIuIChSb2VtZXIpCistIHxidWZsb2FkZWQoKXw6IFdoZXRoZXIgYSBidWZmZXIgZXhpc3RzIGFuZCBpcyBsb2FkZWQuCistIHxsb2NhbHRpbWUoKXwgYW5kIHxnZXRmdGltZSgpfDogd2FsbCBjbG9jayB0aW1lIGFuZCBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lCisgIG9mIGEgZmlsZSAoV2ViYikKKy0gfGdsb2IoKXw6IGV4cGFuZCBmaWxlIG5hbWUgd2lsZGNhcmRzIG9ubHkuCistIHxzeXN0ZW0oKXw6IGdldCB0aGUgcmF3IG91dHB1dCBvZiBhbiBleHRlcm5hbCBjb21tYW5kLiAoYmFzZWQgb24gYSBwYXRjaAorICBmcm9tIEFhcm9uKS4KKy0gfHN0cnRyYW5zKCl8OiBUcmFuc2xhdGUgU3RyaW5nIGludG8gcHJpbnRhYmxlIGNoYXJhY3RlcnMuICBVc2VkIGZvcgorICAyaHRtbC52aW0gc2NyaXB0LgorLSB8YXBwZW5kKCl8OiBlYXN5IHdheSB0byBhcHBlbmQgYSBsaW5lIG9mIHRleHQgaW4gYSBidWZmZXIuCisKK0NoYW5nZWQgZnVuY3Rpb25zOgorLSBPcHRpb25hbCBhcmd1bWVudCB0byB8c3RyZnRpbWUoKXwgdG8gZ2l2ZSB0aGUgdGltZSBpbiBzZWNvbmRzLiAoV2ViYikKKy0gfGV4cGFuZCgpfCBub3cgYWxzbyByZXR1cm5zIG5hbWVzIGZvciBmaWxlcyB0aGF0IGRvbid0IGV4aXN0LgorCitBbGxvdyBudW1iZXJzIGluIHRoZSBuYW1lIG9mIGEgdXNlciBjb21tYW5kLiAoV2ViYikKKworVXNlICJ2OiIgZm9yIGludGVybmFsIFZpbSB2YXJpYWJsZXM6ICJ2OmVycm1zZyIsICJ2OnNoZWxsX2Vycm9yIiwgZXRjLiAgVGhlCitvbmVzIGZyb20gdmVyc2lvbiA1LjMgY2FuIGJlIHVzZWQgd2l0aG91dCAidjoiIHRvbywgZm9yIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4KKworTmV3IHZhcmlhYmxlczoKKyJ2Ondhcm5pbmdtc2ciIGFuZCAidjpzdGF0dXNtc2ciIGludGVybmFsIHZhcmlhYmxlcy4gIENvbnRhaW4gdGhlIGxhc3QgZ2l2ZW4KK3dhcm5pbmcgYW5kIHN0YXR1cyBtZXNzYWdlLiB8djp3YXJuaW5nbXNnfCB8djpzdGF0dXNtc2d8IChNYWRzZW4pCisidjpjb3VudDEiIHZhcmlhYmxlOiBsaWtlICJ2OmNvdW50IiwgYnV0IGRlZmF1bHRzIHRvIG9uZSB3aGVuIG5vIGNvdW50IGlzCit1c2VkLiB8djpjb3VudDF8CisKK1doZW4gY29tcGlsaW5nIHdpdGhvdXQgZXhwcmVzc2lvbiBldmFsdWF0aW9uLCAiaWYgMSIgY2FuIGJlIHVzZWQgYXJvdW5kIHRoZQorbm90IHN1cHBvcnRlZCBjb21tYW5kcyB0byBhdm9pZCBpdCBiZWluZyBleGVjdXRlZC4gIFdvcmtzIGxpa2UgaW4gVmltIDQueC4KK1NvbWUgb2YgdGhlIHJ1bnRpbWUgc2NyaXB0cyBnYXZlIGVycm9ycyB3aGVuIHVzZWQgd2l0aCBhIFZpbSB0aGF0IHdhcyBjb21waWxlZAord2l0aCBtaW5pbWFsIGZlYXR1cmVzLiAgTm93ICJpZiAxIiBpcyB1c2VkIGFyb3VuZCBjb2RlIHRoYXQgaXMgbm90IGFsd2F5cworc3VwcG9ydGVkLgorCitXaGVuIGV2YWx1YXRpbmcgYW4gZXhwcmVzc2lvbiB3aXRoICYmIGFuZCB8fCwgc2tpcCB0aGUgcGFydHMgdGhhdCB3aWxsIG5vdAoraW5mbHVlbmNlIHRoZSBvdXRjb21lLiAgVGhpcyBtYWtlcyBpdCBmYXN0ZXIgYW5kIGF2b2lkcyBlcnJvciBtZXNzYWdlcy4gKFdlYmIpCitBbHNvIG9wdGltaXplZCB0aGUgc2tpcHBpbmcgb2YgZXhwcmVzc2lvbnMgaW5zaWRlIGFuICJpZiAwIi4KKworCitBdm9pZCBoaXQtZW50ZXIgcHJvbXB0CQkJCQkqYXZvaWQtaGl0LWVudGVyKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgJ1QnIGZsYWcgdG8gJ3Nob3J0bWVzcyc6IFRydW5jYXRlIGFsbCBtZXNzYWdlcyB0aGF0IHdvdWxkIGNhdXNlIHRoZQoraGl0LWVudGVyIHByb21wdCAodW5sZXNzIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSkuCitUaGUgJ08nIGZsYWcgaW4gJ3Nob3J0bWVzcycgbm93IGFsc28gYXBwbGllcyB0byBxdWlja2ZpeCBtZXNzYWdlcywgZS5nLiwgZnJvbQordGhlICI6Y24iIGNvbW1hbmQuCisKK1RoZSBkZWZhdWx0IGZvciAnc2hvcnRtZXNzJyBpcyBub3cgImZpbG54dFRvTyIsIHRvIG1ha2UgbW9zdCBtZXNzYWdlcyBmaXQgb24KK3RoZSBjb21tYW5kIGxpbmUsIGFuZCBub3QgY2F1c2UgdGhlIGhpdC1lbnRlciBwcm9tcHQuCisKK1ByZXZpb3VzIG1lc3NhZ2VzIGNhbiBiZSB2aWV3ZWQgd2l0aCB0aGUgbmV3IHw6bWVzc2FnZXN8IGNvbW1hbmQuCisKK1NvbWUgbWVzc2FnZXMgYXJlIHNob3duIGZ1bGx5LCBldmVuIHdoZW4gJ3Nob3J0bWVzcycgdGVsbHMgdG8gc2hvcnRlbgorbWVzc2FnZXMsIGJlY2F1c2UgdGhlIHVzZXIgaXMgZXhwZWN0ZWQgdG8gd2FudCB0byBzZWUgdGhlbSBpbiBmdWxsOiBDVFJMLUcgYW5kCitzb21lIHF1aWNrZml4IGNvbW1hbmRzLgorCisKK0ltcHJvdmVkIHF1aWNrZml4CQkJCQkqaW1wcm92ZWQtcXVpY2tmaXgqCistLS0tLS0tLS0tLS0tLS0tLQorCitQYXJzZSBjaGFuZ2UtZGlyZWN0b3J5IGxpbmVzIGZvciBnbWFrZTogIm1ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSAnbmFtZSciLgorVXNlcyAiJUQiIGFuZCAiJVgiIGluICdlcnJvcmZvcm1hdCcuCitBbHNvIHBhcnNlICJNYWtpbmcge3RhcmdldH0gaW4ge2Rpcn0iIG1lc3NhZ2VzIGZyb20gbWFrZS4gIEhlbHBzIHdoZW4gbm90Cit1c2luZyBHTlUgbWFrZS4gKFNjaGFuZGwpCisKK1VzZSAnaXNmbmFtZScgZm9yICIlZiIgaW4gJ2Vycm9yZm9ybWF0Jy4KKworUGFyc2luZyBvZiBtdWx0aS1saW5lIG1lc3NhZ2VzLiB8ZXJyb3Jmb3JtYXQtbXVsdGktbGluZXwKKworQWxsb3cgYSByYW5nZSBmb3IgdGhlIHw6Y2xpc3R8IGNvbW1hbmQuIChSb2VtZXIpCisKK1N1cHBvcnQgZm9yICJnbG9iYWwiIGZpbGUgbmFtZXMsIGZvciBlcnJvciBmb3JtYXRzIHRoYXQgb3V0cHV0IHRoZSBmaWxlIG5hbWUKK29uY2UgZm9yIHNldmVyYWwgZXJyb3JzLiAoUm9lbWVyKQorCit8OmNuZmlsZXwganVtcHMgdG8gZmlyc3QgZXJyb3IgaW4gbmV4dCBmaWxlLgorCisiJCoiIGluICdtYWtlcHJnJyBpcyByZXBsYWNlZCBieSBhcmd1bWVudHMgdG8gIjptYWtlIi4gKFJvZW1lcikKKworCitSZWd1bGFyIGV4cHJlc3Npb25zCQkJCQkqcmVnZXhwLWNoYW5nZXMtNS40KgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBhIHJlZ2V4cCwgYSAnJCcgYmVmb3JlICJcKSIgaXMgYWxzbyBjb25zaWRlcmVkIHRvIGJlIGFuIGVuZC1vZi1saW5lLiB8LyR8CitJbiBwYXR0ZXJucyAiXiIgYWZ0ZXIgIlx8IiBvciAiXCgiIGlzIGEgc3RhcnQtb2YtbGluZS4gfC9efCAoUm9iaW5zb24pCisKK0luIGEgcmVnZXhwLCBpbiBmcm9udCBvZiAiXCkiIGFuZCAiXHwiIGJvdGggIiQiIGFuZCAiXCQiIHdlcmUgY29uc2lkZXJlZAorZW5kLW9mLWxpbmUuICBOb3cgdXNlICIkIiBhcyBlbmQtb2YtbGluZSBhbmQgIlwkIiBmb3IgYSBsaXRlcmFsIGRvbGxhci4gIFNhbWUKK2ZvciAnXicgYWZ0ZXIgIlwoIiBhbmQgIlx8Ii4gfC9cJHwgfC9cXnwKKworU29tZSBzZWFyY2ggcGF0dGVybnMgY2FuIGJlIGV4dHJlbWVseSBzbG93LCBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgcmVhbGx5CitpbGxlZ2FsLiAgRm9yIGV4YW1wbGU6ICJcKFteYS16XVwrXClcK1EiLiAgQWxsb3cgaW50ZXJydXB0aW5nIGFueSByZWdleHAKK3NlYXJjaCB3aXRoIENUUkwtQy4KKworUmVnaXN0ZXIgIi86IGxhc3Qgc2VhcmNoIHN0cmluZyAocmVhZC1vbmx5KS4gKEtvaGFuKSAgQ2hhbmdlZCB0byB1c2UgbGFzdCB1c2VkCitzZWFyY2ggcGF0dGVybiAobGlrZSB3aGF0ICdobHNlYXJjaCcgdXNlcykuICBDYW4gc2V0IHRoZSBzZWFyY2ggcGF0dGVybiB3aXRoCisiOmxldCBALyA9IHtleHByfSIuCisKK0FkZGVkIGNoYXJhY3RlciBjbGFzc2VzIHRvIHNlYXJjaCBwYXR0ZXJucywgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIHJlbW92aW5nIHRoZQorJ2wnIGZsYWcgZnJvbSAnY3BvcHRpb25zJzogfFs6dGFiOl18LCB8WzpyZXR1cm46XXwsIHxbOmJhY2tzcGFjZTpdfCBhbmQKK3xbOmVzY2FwZTpdfC4KKworQnkgYWRkaW5nIGEgJz8nIGFmdGVyIGEgY29tcGFyYXRpdmUgb3BlcmF0b3IgaW4gYW4gZXhwcmVzc2lvbiwgdGhlIGNvbXBhcmlzb24KK2lzIGRvbmUgYnkgaWdub3JpbmcgY2FzZS4gfGV4cHItPT0/fAorCisKK090aGVyIGltcHJvdmVtZW50cyBtYWRlIGJldHdlZW4gdmVyc2lvbiA1LjMgYW5kIDUuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZWQJCQkJCQkJKmNoYW5nZWQtNS40KgorLS0tLS0tLQorCitVbml4OiBVc2UgJFRNUERJUiBmb3IgdGVtcG9yYXJ5IGZpbGVzLCBpZiBpdCBpcyBzZXQgYW5kIGV4aXN0cy4KKworUmVtb3ZlZCAiRW1wdHkgYnVmZmVyIiBtZXNzYWdlLiAgSXQgaXNuJ3QgdXNlZnVsIGFuZCBjYW4gY2F1c2UgYSBoaXQtZW50ZXIKK3Byb21wdC4gKE5lZ3JpKQorCisiZXggLSIgbm93IHJlYWRzIGNvbW1hbmRzIGZyb20gc3RkaW4gYW5kIHdvcmtzIGluIHNpbGVudCBtb2RlLiAgVGhpcyBpcyB0byBiZQorY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbCAiZXgiIGNvbW1hbmQgdGhhdCBpcyB1c2VkIGZvciBzY3JpcHRzLgorCitEZWZhdWx0IHJhbmdlIGZvciAiOnRjbGRvIiBpcyB0aGUgd2hvbGUgZmlsZS4KKworQ2FuY2VsbGluZyBWaXN1YWwgbW9kZSB3aXRoIEVTQyBtb3ZlZCB0aGUgY3Vyc29yLiAgVGhlcmUgYXBwZWFycyB0byBiZSBubworcmVhc29uIGZvciB0aGlzLiAgTm93IGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgaXMuCisKK1RoZSAiOmdyZXAiIGFuZCAiOm1ha2UiIGNvbW1hbmRzIHNlZSAiIGFzIHBhcnQgb2YgdGhlIGFyZ3VtZW50cywgaW5zdGVhZCBvZgordGhlIHN0YXJ0IG9mIGEgY29tbWVudC4KKworSW4gZXhwcmVzc2lvbnMgdGhlICI9fiIgYW5kICIhfiIgb3BlcmF0b3JzIG5vIGxvbmdlciBhcmUgYWZmZWN0ZWQgYnkKKydpZ25vcmVjYXNlJy4KKworUmVuYW1lZCB2aW1yY19leGFtcGxlIHRvIHZpbXJjX2V4YW1wbGUudmltIGFuZCBndmltcmNfZXhhbXBsZSB0bworZ3ZpbXJjX2V4YW1wbGUudmltLiAgTWFrZXMgdGhlbSBiZWluZyByZWNvZ25pemVkIGFzIHZpbSBzY3JpcHRzLgorCisiZ2QiIG5vIGxvbmdlciBzdGFydHMgc2VhcmNoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgYXQKK3RoZSBmaXJzdCBibGFuayBsaW5lIGFib3ZlIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gIEF2b2lkcyB0aGF0Cit1c2luZyAiZ2QiIGluIHRoZSBmaXJzdCBmdW5jdGlvbiBmaW5kcyBnbG9iYWwgYSB2YXJpYWJsZS4KKworRGVmYXVsdCBmb3IgJ2NvbXBsZXRlJyBjaGFuZ2VkIGZyb20gIi4sYiIgdG8gIi4sdyxiLHUsdCxpIi4gIE1hbnkgbW9yZSBtYXRjaGVzCit3aWxsIGJlIGZvdW5kLCBhdCB0aGUgY29zdCBvZiB0aW1lICh0aGUgc2VhcmNoIGNhbiBiZSBpbnRlcnJ1cHRlZCkuCisKK0l0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBzZXQgJ3NoZWxsKicgb3B0aW9ucyBmcm9tIGEgbW9kZWxpbmUuICBQcmV2aW91c2x5Citvbmx5IGEgd2FybmluZyBtZXNzYWdlIHdhcyBnaXZlbi4gIFRoaXMgcmVkdWNlcyBzZWN1cml0eSByaXNrcy4KKworVGhlIG9yZGVyaW5nIG9mIHRoZSBpbmRleCBvZiBkb2N1bWVudGF0aW9uIGZpbGVzIHdhcyBjaGFuZ2VkIHRvIG1ha2UgaXQgbW9yZQorZWFzeSB0byBmaW5kIGEgc3ViamVjdC4KKworT24gTVMtRE9TIGFuZCB3aW4zMiwgd2hlbiAkVklNIHdhcyBub3Qgc2V0LCAkSE9NRSB3YXMgdXNlZC4gIFRoaXMgY2F1c2VkCit0cm91YmxlIGlmICRIT01FIHdhcyBzZXQgdG8gZS5nLiwgIkM6XCIgZm9yIHNvbWUgb3RoZXIgdG9vbCwgdGhlIHJ1bnRpbWUgZmlsZXMKK3dvdWxkIG5vdCBiZSBmb3VuZC4gIE5vdyB1c2UgJEhPTUUgb25seSBmb3IgX3ZpbXJjLCBfZ3ZpbXJjLCBldGMuLCBub3QgdG8gZmluZAordGhlIHJ1bnRpbWUgZmlsZS4KKworV2hlbiAndGFncycgaXMgIi4ve2ZuYW1lfSIgYW5kIHRoZXJlIGlzIG5vIGZpbGUgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLAoranVzdCB1c2UgaXQuICBQcmV2aW91c2x5IGl0IHdhcyBza2lwcGVkLCBjYXVzaW5nICJ2aW0gLXQge3RhZ30iIG5vdCB0byBmaW5kCittYW55IHRhZ3MuCisKK1doZW4gdHJ5aW5nIHRvIHNlbGVjdCB0ZXh0IGluIHRoZSAnc2Nyb2xsb2ZmJyBhcmVhIGJ5IG1vdXNlIGRyYWdnaW5nLCB0aGUKK3Jlc3VsdGluZyBzY3JvbGxpbmcgbWFkZSB0aGlzIGRpZmZpY3VsdC4gIE5vdyAnc2Nyb2xsb2ZmJyBpcyB0ZW1wb3JhcmlseSBzZXQKK3RvIDAgb3IgMSB0byBhdm9pZCB0aGlzLiAgQnV0IHN0aWxsIGFsbG93IHNjcm9sbGluZyBpbiB0aGUgdG9wIGxpbmUgdG8gZXh0ZW5kCit0byBhYm92ZSB0aGUgZGlzcGxheWVkIHRleHQuCisKK0RlZmF1bHQgZm9yICdjb21tZW50cycgbm93IGluY2x1ZGVzICJzbDovKixtYjogKixleDoqLyIsIHRvIG1ha2UgamF2YWRvYworY29tbWVudHMgd29yay4gIEFsc28gaGVscHMgZm9yIEMgY29tbWVudHMgdGhhdCBzdGFydCB3aXRoICIvKioqKioqKiIuCisKK0NUUkwtWCBDVFJMLV0gSW5zZXJ0IG1vZGUgdGFnIGV4cGFuc2lvbiB0cmllZCB0byBleHBhbmQgdG8gYWxsIHRhZ3Mgd2hlbiB1c2VkCithZnRlciBhIG5vbi1JRCBjaGFyYWN0ZXIsIHdoaWNoIGNhbiB0YWtlIGEgdmVyeSBsb25nIHRpbWUuICBOb3cgbGltaXQgdGhpcyB0bworMjAwIG1hdGNoZXMuICBBbHNvIHVzZWQgZm9yIGNvbW1hbmQtbGluZSB0YWcgY29tcGxldGlvbi4KKworVGhlIE9TLzIgZGlzdHJpYnV0aW9uIGhhcyBiZWVuIHNwbGl0IGluIHR3byBmaWxlcy4gIEl0IHdhcyB0b28gYmlnIHRvIGZpdCBvbiBhCitmbG9wcHkuICBUaGUgc2FtZSBydW50aW1lIGFyY2hpdmUgYXMgZm9yIHRoZSBQQyBpcyBub3cgdXNlZC4KKworSW4gdGhlIGRvY3VtZW50YXRpb24sIGl0ZW1zIGxpa2UgPGEtej4gaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGgge2Eten0gZm9yCitub24tb3B0aW9uYWwgYXJndW1lbnRzLiAgVGhpcyBhdm9pZHMgY29uZnVzaW9uIHdpdGgga2V5IG5hbWVzOiA8Qy1aPiBpcyBhCitDVFJMLVosIG5vdCBhIGNoYXJhY3RlciBiZXR3ZWVuIEMgYW5kIFosIHRoYXQgaXMge0MtWn0uCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTUuNCoKKy0tLS0tCisKK0NvbG9yIHN1cHBvcnQgZm9yIHRoZSBpcmlzLWFuc2kgYnVpbHRpbiB0ZXJtY2FwIGVudHJ5LiAoVHVibWFuKQorCitJbmNsdWRlZCBWaXNWaW0gdmVyc2lvbiAxLjNhLiAoRXJoYXJkdCkKKworV2luMzIgcG9ydCBmb3IgU05pRkYrIGludGVyZmFjZS4gKExlaGVyYmF1ZXIpCitEb2N1bWVudGF0aW9uIGZpbGUgZm9yIHNuaWZmIGludGVyZmFjZTogaWZfc25pZmYudHh0LiAoTGVoZXJiYXVlcikKKworSW5jbHVkZWQgdGhlICJTZW5kVG9WaW0iIGFuZCAiT3BlbldpdGhWaW0iIHByb2dyYW1zIGluIHRoZSBPbGVWaW0gZGlyZWN0b3J5LgorVG8gYmUgdXNlZCB3aXRoIHRoZSBPTEUgdmVyc2lvbiBvZiBndmltIHVuZGVyIE1TLVdpbmRvd3MuIChTY2hhbGxlcikKKworSW5jbHVkZWQgRXh1YmVyYW50IEN0YWdzIHZlcnNpb24gMy4yLjQgd2l0aCBFaWZmZWwgc3VwcG9ydC4gKEhpZWJlcnQpCisKK1doZW4gYSBmaWxlIHRoYXQgaXMgYmVpbmcgZWRpdGVkIGlzIGRlbGV0ZWQsIGdpdmUgYSB3YXJuaW5nIChsaWtlIHdoZW4gdGhlCit0aW1lIHN0YW1wIGNoYW5nZWQpLgorCitJbmNsdWRlZCBuZXdlciB2ZXJzaW9ucyBvZiB0aGUgSFRNTC1nZW5lcmF0aW5nIEF3ayBhbmQgUGVybCBzY3JpcHRzLiAoQ29sb21ibykKKworTGludXggY29uc29sZSBtb3VzZSBzdXBwb3J0IHRocm91Z2ggImdwbSIuIChUc2luZGxla2h0KQorCitTZWN1cml0eSBmaXg6IERpc2FsbG93IGNoYW5naW5nICdzZWN1cmUnIGFuZCAnZXhyYycgZnJvbSBhIG1vZGVsaW5lLiAgV2hlbgorJ3NlY3VyZScgaXMgc2V0LCBnaXZlIGEgd2FybmluZyBmb3IgY2hhbmdpbmcgb3B0aW9ucyB0aGF0IGNvbnRhaW4gYSBwcm9ncmFtCituYW1lLgorCitNYWRlIHRoZSBQZXJsIGludGVyZmFjZSB3b3JrIHdpdGggUGVybCA1LjAwNSBhbmQgdGhyZWFkcy4gKFZlcmRvb2xhZWdlKQorCitXaGVuIGdpdmluZyBhbiBlcnJvciBtZXNzYWdlIGZvciBhbiBhbWJpZ3VvdXMgbWFwcGluZywgaW5jbHVkZSB0aGUgb2ZmZW5kaW5nCittYXBwaW5nLiAoUm9lbWVyKQorCitDb21tYW5kIGxpbmUgZWRpdGluZzoKKy0gQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gb2YgbWFwcGluZ3MuIChSb2VtZXIpCistIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciAiOmZ1bmN0aW9uIiwgIjpkZWxmdW5jdGlvbiIsICI6bGV0IiwgIjpjYWxsIiwKKyAgIjppZiIsIGV0Yy4gKFJvZW1lcikKKy0gV2hlbiB1c2luZyBDVFJMLUQgY29tcGxldGlvbiBmb3IgdXNlciBjb21tYW5kcyB0aGF0IGhhdmUKKyAgIi1jb21wbGV0ZT10YWdfbGlzdGZpbGVzIiBhbHNvIGxpc3QgdGhlIGZpbGUgbmFtZXMuICAoTWFkc2VuKQorLSBDb21wbGV0ZSB0aGUgYXJndW1lbnRzIG9mIHRoZSAiOmNvbW1hbmQiIGNvbW1hbmQuIChXZWJiKQorLSBDVFJMLVIgLiBpbiBjb21tYW5kIGxpbmUgaW5zZXJ0cyBsYXN0IGluc2VydGVkIHRleHQuICBDVFJMLUYsIENUUkwtUCwgQ1RSTC1XCisgIGFuZCBDVFJMLUEgYWZ0ZXIgQ1RSTC1SIGFyZSB1c2VkIHRvIGluc2VydCBhbiBvYmplY3QgZnJvbSB1bmRlciB0aGUgY3Vyc29yLgorICAoTWFkc2VuKQorCitNYWRlIHRoZSB0ZXh0IGluIHVnYW5kYS50eHQgYWJvdXQgY29weWluZyBWaW0gYSBiaXQgbW9yZSBjbGVhci4KKworVXBkYXRlZCB0aGUgVmltIHR1dG9yLiAgQWRkZWQgdGhlICJ2aW10dXRvciIgY29tbWFuZCwgd2hpY2ggY29waWVzIHRoZSB0dXRvcgorYW5kIHN0YXJ0cyBWaW0gb24gaXQuICAibWFrZSBpbnN0YWxsIiBub3cgYWxzbyBjb3BpZXMgdGhlIHR1dG9yLgorCitJbiB0aGUgb3V0cHV0IG9mICI6Y2xpc3QiIHRoZSBjdXJyZW50IGVudHJ5IGlzIGhpZ2hsaWdodGVkLCB3aXRoIHRoZSAnaScKK2hpZ2hsaWdodGluZyAoc2FtZSBhcyB1c2VkIGZvciAnaW5jc2VhcmNoJykuCisKK0ZvciB0aGUgIjpjbGlzdCIgY29tbWFuZCwgeW91IGNhbiBzY3JvbGwgYmFja3dhcmRzIHdpdGggImIiIChvbmUgc2NyZWVuZnVsbCksCisidSIgKGhhbGYgYSBzY3JlZW5mdWxsKSBhbmQgImsiIChvbmUgbGluZSkuCisKK011bHRpLWJ5dGUgc3VwcG9ydDoKKy0gWC1pbnB1dCBtZXRob2QgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gIEFuZCB2YXJpb3VzIGZpeGVzIGZvciBtdWx0aS1ieXRlCisgIHN1cHBvcnQuIChOYW0pCistIEhhbmd1bCBpbnB1dCBtZXRob2QgZmVhdHVyZTogfGhhbmd1bHwuIChOYW0pCistIENsZWFuZWQgdXAgY29uZmlndXJhdGlvbiBvZiBtdWx0aS1ieXRlIHN1cHBvcnQsIFhJTSwgZm9udHNldCBhbmQgSGFuZ3VsCisgIGlucHV0LiAgRWFjaCBpcyBub3cgY29uZmlndXJhYmxlIHNlcGFyYXRlbHkuCistIENoYW5nZWQgY2hlY2sgZm9yIEdUS19LRVlCT0FSRCB0byBIQU5HVUxfS0VZQk9BUkRfVFlQRS4gKE5hbSkKKy0gQWRkZWQgZG9jL2hhbmd1bGluLnR4dDogRG9jdW1lbnRhdGlvbiBmb3IgdGhlIEhhbmd1bCBpbnB1dCBjb2RlLiAoTmFtKQorLSBYSU0gc3VwcG9ydCBmb3IgR1RLKy4gKE5hbSkKKy0gRmlyc3QgYXR0ZW1wdCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFNKSVMgZW5jb2RpbmcuIChOYWdhbm8pCistIFdoZW4gYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgZG9lc24ndCBmaXQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSwgcHV0IGEgIn4iCisgIHRoZXJlIGFuZCBwcmludCBpdCBvbiB0aGUgbmV4dCBsaW5lLgorLSBPcHRpbWl6ZSBvdXRwdXQgb2YgbXVsdGktYnl0ZSB0ZXh0LiAoUGFyaykKKy0gV2luMzIgSU1FOiBwcmVlZGl0IHN0eWxlIGlzIGxpa2Ugb3Zlci10aGUtc3BvdC4gKE5hZ2FubykKKy0gV2luMzIgSU1FOiBJTUUgbW9kZSBjaGFuZ2Ugbm93IGRvbmUgd2l0aCBJbW1TZXRPcGVuU3RhdHVzLiAoTmFnYW5vKQorLSBHVUkgQXRoZW5hOiBmaWxlIHNlbGVjdGlvbiBkaWFsb2cgY2FuIGRpc3BsYXkgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorICAoTmFnYW5vKQorLSBTZWxlY3Rpb24gcmVwbHkgZm9yIFhBX1RFWFQgYXMgWEFfU1RSSU5HLiAoTmFnYW5vKQorCisicnVudGltZS9tYWNyb3MvZGlmZndpbi52aW0iLiAgTWFwcGluZ3MgdG8gbWFrZSBhIGRpZmYgd2luZG93LiAoQ2FtcGJlbGwpCisKK0FkZGVkICIub2JqIiB0byB0aGUgJ3N1ZmZpeGVzJyBvcHRpb24uCisKK1JlZHVjZWQgc2l6ZSBvZiBzeW50YXgvc3lubG9hZC52aW0gYnkgdXNpbmcgdGhlICI6U3luQXUiIHVzZXIgY29tbWFuZC4KK0F1dG9tYXRlZCBudW1iZXJpbmcgb2YgU3ludGF4IG1lbnUgZW50cmllcyBpbiBtZW51LnZpbS4KK0luIHRoZSBTeW50YXggbWVudSwgaW5zZXJ0IHNlcGFyYXRvcnMgYmV0d2VlbiBzeW50YXggbmFtZXMgdGhhdCBzdGFydCB3aXRoCithIGRpZmZlcmVudCBsZXR0ZXIuIChHZWRkZXMpCisKK1h0ZXJtOgorLSBDbGlwYm9hcmQgc3VwcG9ydCB3aGVuIHVzaW5nIHRoZSBtb3VzZSBpbiBhbiB4dGVybS4gKE1hZHNlbikKKy0gV2hlbiB1c2luZyB0aGUgeHRlcm0gbW91c2UsIHRyYWNrIGRyYWdnaW5nIG9mIHRoZSBtb3VzZS4gIFVzZSB4dGVybSBlc2NhcGUKKyAgc2VxdWVuY2VzIHdoZW4gcG9zc2libGUuICBJdCBpcyBtb3JlIHByZWNpc2UgdGhhbiBvdGhlciBtZXRob2RzLCBidXQKKyAgcmVxdWlyZXMgYSBmYWlybHkgcmVjZW50IHh0ZXJtIHZlcnNpb24uICBJdCBpcyBlbmFibGVkIHdpdGggInh0ZXJtMiIgaW4KKyAgJ3R0eW1vdXNlJy4gIChNYWRzZW4pCistIENoZWNrIHh0ZXJtIHBhdGNoIGxldmVsLCB0byBzZXQgdGhlIHZhbHVlIG9mICd0dHltb3VzZScuICBIYXMgb25seSBiZWVuCisgIGFkZGVkIHRvIHh0ZXJtIHJlY2VudGx5IChwYXRjaCBsZXZlbCA+IDk1KS4gIFVzZXMgdGhlIG5ldyAndF9SVicgdGVybWNhcAorICBvcHRpb24uICBTZXQgJ3R0eW1vdXNlJyB0byAieHRlcm0yIiB3aGVuIGEgY29ycmVjdCByZXNwb25zZSBpcyByZWNvZ25pemVkLgorICBXaWxsIG1ha2UgeHRlcm0gbW91c2UgZHJhZ2dpbmcgd29yayBiZXR0ZXIuCistIFN1cHBvcnQgZm9yIHNoaWZ0ZWQgZnVuY3Rpb24ga2V5cyBvbiB4dGVybS4gIENoYW5nZWQgY29kZXMgZm9yIHNoaWZ0ZWQKKyAgY3Vyc29yIGtleXMgdG8gd2hhdCB0aGUgeHRlcm0gYWN0dWFsbHkgcHJvZHVjZXMuICBBZGRlZCBjb2RlcyBmb3Igc2hpZnRlZAorICA8RW5kPiBhbmQgPEhvbWU+LgorLSBBZGRlZCAndF9XUCcgdG8gc2V0IHRoZSB3aW5kb3cgcG9zaXRpb24gaW4gcGl4ZWxzIGFuZCAndF9XUycgdG8gc2V0IHRoZQorICB3aW5kb3cgc2l6ZSBpbiBjaGFyYWN0ZXJzLiAgWHRlcm0gY2FuIG5vdyBtb3ZlICh1c2VkIGZvciAiOndpbnBvcyIpIGFuZAorICByZXNpemUgKHVzZSBmb3IgIjpzZXQgbGluZXM9IiBhbmQgIjpzZXQgY29sdW1ucz0iKS4KKworWDExOgorLSBXaGVuIGluIFZpc3VhbCBtb2RlIGJ1dCBub3Qgb3duaW5nIHRoZSBzZWxlY3Rpb24sIGRpc3BsYXkgdGhlIFZpc3VhbCBhcmVhCisgIHdpdGggdGhlIFZpc3VhbE5PUyBncm91cCB0byBzaG93IHRoaXMuIChNYWRzZW4pCistIFN1cHBvcnQgZm9yIHJlcXVlc3RpbmcgdGhlIHR5cGUgb2YgY2xpcGJvYXJkIHN1cHBvcnQuICBVc2VkIGZvciBBSVggYW5kCisgIGR0dGVybS4gKFdpdHRpZykKKy0gU3VwcG9ydCBjb21wb3VuZF90ZXh0IHNlbGVjdGlvbiAoZXZlbiB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgbXVsdGktYnl0ZSkuCisKK1N3YXAgZmlsZToKKy0gTmV3IHZhcmlhdGlvbiBmb3IgbmFtaW5nIHN3YXAgZmlsZXM6IFJlcGxhY2UgcGF0aCBzZXBhcmF0b3JzIGludG8gJSwgcGxhY2UKKyAgYWxsIHN3YXAgZmlsZXMgaW4gb25lIGRpcmVjdG9yeS4gIFVzZWQgd2hlbiBhIG5hbWUgaW4gJ2RpcicgZW5kcyBpbiB0d28gcGF0aAorICBzZXBhcmF0b3JzLiAoTWFkc2VuKQorLSBXaGVuIGEgc3dhcCBmaWxlIGlzIGZvdW5kLCBzaG93IHdoZXRoZXIgaXQgY29udGFpbnMgbW9kaWZpY2F0aW9ucyBvciBub3QgaW4KKyAgdGhlIGluZm9ybWF0aXZlIG1lc3NhZ2UuIChNYWRzZW4pCistIFdoZW4gZGlhbG9ncyBhcmUgc3VwcG9ydGVkLCB1c2UgYSBkaWFsb2cgdG8gYXNrIHRoZSB1c2VyIHdoYXQgdG8gZG8gd2hlbiBhCisgIHN3YXBmaWxlIGFscmVhZHkgZXhpc3RzLgorCisicG9wdXBfc2V0cG9zIiBpbiAnbW91c2Vtb2RlbCcgb3B0aW9uLiAgQWxsb3dzIGZvciBtb3ZpbmcgdGhlIGN1cnNvciB3aGVuCit1c2luZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLgorCitXaGVuIGEgYnVmZmVyIGlzIGRlbGV0ZWQsIHRoZSBzZWxlY3Rpb24gZm9yIHdoaWNoIGJ1ZmZlciB0byBkaXNwbGF5IGluc3RlYWQKK25vdyB1c2VzIHRoZSBtb3N0IHJlY2VudCBlbnRyeSBmcm9tIHRoZSBqdW1wIGxpc3QuIChNYWRzZW4pCisKK1doZW4gdXNpbmcgQ1RSTC1PL0NUUkwtSSwgc2tpcCBkZWxldGVkIGJ1ZmZlcnMuCisKK0EgcGVyY2VudGFnZSBpcyBzaG93biBpbiB0aGUgcnVsZXIsIHdoZW4gdGhlcmUgaXMgcm9vbS4KKworVXNlZCBhdXRvY29uZiAxLjEzIHRvIGdlbmVyYXRlIGNvbmZpZ3VyZS4KKworSW5jbHVkZWQgZ2V0X2xpc3BfaW5kZW50KCkgZnJvbSBEaXJrIHZhbiBEZXVuLiAgRG9lcyBiZXR0ZXIgTGlzcCBpbmRlbnRpbmcKK3doZW4gJ3AnIGZsYWcgaW4gJ2Nwb3B0aW9ucycgaXMgbm90IGluY2x1ZGVkLgorCitNYWRlIHRoZSAyaHRtbC52aW0gc2NyaXB0IHF1aXRlIGEgYml0IGZhc3Rlci4gIChiYXNlZCBvbiBpZGVhcyBmcm9tIEdlZGRlcykKKworVW5peDoKKy0gSW5jbHVkZWQgdGhlIG5hbWUgb2YgdGhlIHVzZXIgdGhhdCBjb21waWxlZCBWaW0gYW5kIHRoZSBzeXN0ZW0gbmFtZSBpdCB3YXMKKyAgY29tcGlsZWQgb24gaW4gdGhlIHZlcnNpb24gbWVzc2FnZS4KKy0gIm1ha2UgaW5zdGFsbCIgbm93IGFsc28gaW5zdGFsbHMgdGhlICJ0b29scyIgZGlyZWN0b3J5LiAgTWFrZXMgdGhlbQorICBhdmFpbGFibGUgZm9yIGV2ZXJ5Ym9keS4KKy0gIm1ha2UgY2hlY2siIG5vdyBkb2VzIHRoZSBzYW1lIGFzICJtYWtlIHRlc3QiLiAgIm1ha2UgdGVzdCIgY2hlY2tzIGZvcgorICBWaXN1YWwgYmxvY2sgbW9kZSBzaGlmdCwgaW5zZXJ0LCByZXBsYWNlIGFuZCBjaGFuZ2UuCistIFNwZWVkIHVwIGNvbXBhcmluZyBhIGZpbGUgbmFtZSB3aXRoIGV4aXN0aW5nIGJ1ZmZlcnMgYnkgc3RvcmluZyB0aGUKKyAgZGV2aWNlL2lub2RlIG51bWJlciB3aXRoIHRoZSBidWZmZXIuCistIEFkZGVkIGNvbmZpZ3VyZSBhcmd1bWVudHMgIi0tZGlzYWJsZS1ndGsiLCAiLS1kaXNhYmxlLW1vdGlmIiBhbmQKKyAgIi0tZGlzYWJsZS1hdGhlbmEiLCB0byBiZSBhYmxlIHRvIGRpc2FibGUgYSBzcGVjaWZpYyBHVUkgKHdoZW4gaXQgZG9lc24ndAorICB3b3JrKS4KKy0gUmVuYW1lZCB0aGUgY29uZmlndXJlIGFyZ3VtZW50cyBmb3IgZGlzYWJsaW5nIHRoZSBjaGVjayBmb3Igc3BlY2lmaWMgR1VJcy4KKyAgU2hvdWxkIGJlIGNsZWFyZXIgbm93LiAoS2FobikKKy0gT24gYSBEaWdpdGFsIFVuaXggc3lzdGVtICgiT1NGMSIpIGNoZWNrIGZvciB0aGUgY3Vyc2VzIGxpYnJhcnkgYmVmb3JlCisgIHRlcm1saWIgYW5kIHRlcm1jYXAuIChTY2hpbGQpCistICJtYWtlIHVuaW5zdGFsbF9ydW50aW1lIiB3aWxsIG9ubHkgZGVsZXRlIHRoZSB2ZXJzaW9uLXNwZWNpZmljIGZpbGVzLiAgQ2FuCisgIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSBydW50aW1lIGZpbGVzIG9mIGEgcHJldmlvdXMgdmVyc2lvbi4KKworTWFjaW50b3NoOiAoU3QtQW1hbnQpCistIERyYWdnaW5nIHRoZSBzY3JvbGxiYXIsIGxpa2UgaXQncyBkb25lIGZvciB0aGUgV2luMzIgR1VJLiAgTW92ZWQgY29tbW9uIGNvZGUKKyAgZnJvbSBndWlfdzMyLmMgdG8gZ3VpLmMKKy0gQWRkZWQgZGlhbG9ncyBhbmQgZmlsZSBicm93c2luZy4KKy0gUmVzb3VyY2UgZm9yayBwcmVzZXJ2ZWQsIHdhcm5pbmcgd2hlbiBpdCB3aWxsIGJlIGxvc3QuCistIENvcHkgb3JpZ2luYWwgZmlsZSBhdHRyaWJ1dGVzIHRvIG5ld2x5IHdyaXR0ZW4gZmlsZS4KKy0gU2V0IHRpdGxlL25vdGl0bGUgYnVnIHNvbHZlZC4KKy0gRmlsZW5hbWUgY29tcGxldGlvbiBpbXByb3ZlZC4KKy0gR3JvdyBib3ggbGltaXQgcmVzaXplIHRvIGEgY2hhciBieSBjaGFyIHNpemUuCistIFVzZSBvZiByZ2IudHh0IGZvciBtb3JlIGNvbG9ycyAoYnV0IGdpdmUgYmFjayBiYWQgY29sb3IpLgorLSBBcHBsZSBtZW51IHdvcmtzIChiZXNpZGUgdGhlIGFib3V0Li4uKS4KKy0gSW50ZXJuYWwgYm9yZGVyIG5vdyB2aW0gY29tcGxpYW50LgorLSBSZW1vdmluZyBhIG1lbnUgZG9lc24ndCBjcmFzaCBhbnltb3JlLgorLSBXZWFrLWxpbmtpbmcgb2YgUHl0aG9uIDEuNS4xIChvbmx5IG9uIFBQQykuICBQeXRob24gaXMgc3VwcG9ydGVkIHdoZW4gdGhlCisgIGxpYnJhcnkgaXMgYXZhaWxhYmxlLgorLSBJZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGVuIHNvdXJjaW5nIHRoZSB1c2VycyAudmltcmMsIHRoZSBhbGVydCBib3ggbm93CisgIHNob3dzIHJpZ2h0IGF3YXkgd2l0aCB0aGUgT0sgYnV0dG9uIGRlZmF1bHRlZC4gVGhlcmUncyBubyBtb3JlICJEZWxldGUiLWtleQorICBzaWduIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmUKKy0gQmV0dGVyIG1hbmFnZW1lbnQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgTm93ICRWSU0gaXMgY2FsY3VsYXRlZCBvbmx5CisgIG9uY2UsIG5vdCByZWdlbmVyYXRlZCBldmVyeSB0aW1lIGl0IGlzIHVzZWQuCistIE5vIG1vcmUgQ1BVIGhvZyB3aGVuIGluIGJhY2tncm91bmQuCistIEluIGEgc291cmNlZCBWaW0gc2NyaXB0IHRoZSBNYWMgZmlsZSBmb3JtYXQgY2FuIGJlIHJlY29nbml6ZWQsIGp1c3QgbGlrZSBET1MKKyAgZmlsZSBmb3JtYXQgaXMuCisKK1doZW4gYm90aCAidW5peCIgYW5kICJtYWMiIGFyZSBwcmVzZW50IGluICdmaWxlZm9ybWF0cycsIHByZWZlciAibWFjIiBmb3JtYXQKK3doZW4gdGhlcmUgYXJlIG1vcmUgQ1IgdGhhbiBOTCBjaGFyYWN0ZXJzLgorV2hlbiB1c2luZyAibWFjIiBmaWxlZm9ybWF0LCB1c2UgQ1IgaW5zdGVhZCBvZiBhIE5MLCBiZWNhdXNlIE5MIGlzIHVzZWQgZm9yCitOVUwuICBXaWxsIHByZXNlcnZlIGFsbCBjaGFyYWN0ZXJzIGluIGEgZmlsZS4gKE1hZHNlbikKKworVGhlIERPUyBpbnN0YWxsLmV4ZSBub3cgY29udGFpbnMgY2hlY2tzIGZvciBhbiBleGlzdGluZyBpbnN0YWxsYXRpb24uICBJdAorYXZvaWRzIHNldHRpbmcgJFZJTSBhbmQgJFBBVEggYWdhaW4uCitUaGUgaW5zdGFsbCBwcm9ncmFtIGZvciBEb3MvV2luZG93cyBjYW4gbm93IGluc3RhbGwgVmltIGluIHRoZSBwb3B1cCBtZW51LCBieQorYWRkaW5nIHR3byByZWdpc3RyeSBrZXlzLgorCitQb3J0IHRvIEVHQ1MvbWluZ3czMi4gIE5ldyBNYWtlZmlsZS5taW5nLiAoQWFyb24pCisKK0RPUyAxNiBiaXQ6IERvbid0IGluY2x1ZGUgY3Vyc29yIHNoYXBlIHN0dWZmLiAgU2F2ZSBzb21lIGJ5dGVzLgorCitUQ0wgc3VwcG9ydCB0byBNYWtlZmlsZS53MzIuIChEdXBlcnZhbCkKKworT1MvMjogVXNlIGFyZ3ZbMF0gdG8gZmluZCBydW50aW1lIGZpbGVzLgorCitXaGVuIHVzaW5nICJnZiIgdG8gZ28gdG8gYSBidWZmZXIgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQsIGp1bXAgdG8gdGhlCitsaW5lIHdoZXJlIHRoZSBjdXJzb3IgbGFzdCB3YXMuCisKK0NvbG9yZWQgdGhlIG91dHB1dCBvZiAiOnRzZWxlY3QiIGEgYml0IG1vcmUuICBEaWZmZXJlbnQgaGlnaGxpZ2h0aW5nIGJldHdlZW4KK3RhZyBuYW1lIGFuZCBmaWxlIG5hbWUuICBIaWdobGlnaHQgZmllbGQgbmFtZSAoInN0cnVjdDoiKSBzZXBhcmF0ZWx5IGZyb20KK2FyZ3VtZW50LgorCitCYWNrdGljayBleHBhbnNpb24gZm9yIG5vbi1Vbml4IHN5c3RlbXMuICBCYXNlZCBvbiBhIHBhdGNoIGZyb20gQWFyb24uCitBbGxvd3MgdGhlIHVzZSBvZiB0aGluZ3MgbGlrZSAiOm4gYGdyZXAgLWwgdGVzdCAqLmNgIiBhbmQKKyJlY2hvIGV4cGFuZCgnYGxzIG0qYCcpIi4KKworQ2hlY2sgZm9yIHRoZSAnY29tcGxldGUnIG9wdGlvbiB3aGVuIGl0IGlzIHNldC4gKEFjZXZlZG8pCisnZCcgZmxhZyBpbiAnY29tcGxldGUnIHNlYXJjaGVzIGZvciBkZWZpbmVkIG5hbWVzIG9yIG1hY3Jvcy4KK1doaWxlIHNlYXJjaGluZyBmb3IgSW5zZXJ0IG1vZGUgY29tcGxldGlvbnMgaW4gaW5jbHVkZSBmaWxlcyBhbmQgdGFncyBmaWxlcywKK2NoZWNrIGZvciB0eXBlYWhlYWQsIHNvIHRoYXQgeW91IGNhbiB1c2UgbWF0Y2hlcyBlYXJseS4gKFdlYmIpCitUaGUgJy4nIGZsYWcgaW4gJ2NvbXBsZXRlJyBub3cgc2NhbnMgdGhlIGN1cnJlbnQgYnVmZmVyIGNvbXBsZXRlbHksIGlnbm9yaW5nCisnbm93cmFwc2NhbicuICAoV2ViYikKKworQWRkZWQgJ34nIGZsYWcgdG8gJ3doaWNod3JhcCcuIChBY2V2ZWRvKQorCitXaGVuIGVuZGluZyB0aGUgVmlzdWFsIG1vZGUgKGUuZy4sIHdpdGggRVNDKSBkb24ndCBncmFiIG93bmVyc2hpcCBvZiB0aGUKK3NlbGVjdGlvbi4KKworSW4gYSBjb2xvciB0ZXJtaW5hbCwgImZnIiBhbmQgImJnIiBjYW4gYmUgdXNlZCBhcyBjb2xvciBuYW1lcy4gIFRoZXkgc3RhbmQgZm9yCit0aGUgIk5vcm1hbCIgY29sb3JzLgorCitBIGZldyBjc2NvcGUgY2xlYW51cHMuIChLYWhuKQorCitJbmNsdWRlZCBjaGFuZ2VkIHZpbXNwZWxsLnNoIGZyb20gU2NoZW1lbmF1ZXIuCisKK0NvbmNhdGVuYXRpb24gb2Ygc3RyaW5ncyBpbiBhbiBleHByZXNzaW9uIHdpdGggIi4iIGlzIGEgYml0IGZhc3Rlci4gKFJvZW1lcikKKworVGhlICI6cmVkaXIiIGNvbW1hbmQgY2FuIG5vdyByZWRpcmVjdCB0byBhIHJlZ2lzdGVyOiAiOnJlZGlyIEByIi4gKFJvZW1lcikKKworTWFkZSB0aGUgb3V0cHV0IG9mICI6bWFya3MiIGFuZCAiOmp1bXBzIiBsb29rIHNpbWlsYXIuICBXaGVuIHRoZSBtYXJrIGlzIGluCit0aGUgY3VycmVudCBmaWxlLCBzaG93IHRoZSB0ZXh0IGF0IHRoZSBtYXJrLiAgQWxzbyBmb3IgIjp0YWdzIi4KKworV2hlbiBjb25maWd1cmUgZmluZHMgZnRlbGxvKCkgYW5kIGZzZWVrbygpLCB0aGV5IGFyZSB1c2VkIGluIHRhZy5jIChmb3Igd2hlbgoreW91IGhhdmUgZXh0cmVtZWx5IGJpZyB0YWdzIGZpbGVzKS4KKworQ29uZmlndXJlIGNoZWNrIGZvciAiLUZPbGltaXQsMjAwMCIgYXJndW1lbnQgZm9yIHRoZSBjb21waWxlci4gKEJvcnNlbmtvdykKKworR1VJOgorLSBXaGVuIHVzaW5nICI6Z3VpIiBpbiBhIG5vbi1HVUkgVmltLCBnaXZlIGEgY2xlYXIgZXJyb3IgbWVzc2FnZS4KKy0gImd2aW0gLXYiIGRvZXNuJ3Qgc3RhcnQgdGhlIEdVSSAoaWYgY29uc29sZSBzdXBwb3J0IGlzIHByZXNlbnQpLgorLSBXaGVuIGluIEV4IG1vZGUsIHVzZSBub24tVmlzdWFsIHNlbGVjdGlvbiBmb3IgdGhlIHdob2xlIHNjcmVlbi4KKy0gV2hlbiBzdGFydGluZyB3aXRoICJndmltIC1mIiBhbmQgdXNpbmcgIjpndWkiIGluIHRoZSAuZ3ZpbXJjIGZpbGUsIFZpbQorICBmb3JrZWQgYW55d2F5LiAgTm93IHRoZSAiLWYiIGZsYWcgaXMgcmVtZW1iZXJlZCBmb3IgIjpndWkiLiAgQWRkZWQgImd1aSAtYiIKKyAgdG8gcnVuIGd2aW0gaW4gdGhlIGJhY2tncm91bmQgYW55d2F5LgorCitNb3RpZiBHVUk6CistIENoZWNrIGZvciAiLWxYcCIgbGlicmFyeSBpbiBjb25maWd1cmUgKGJ1dCBpdCBkb2Vzbid0IHdvcmsgeWV0Li4uKS4KKy0gTGV0IGNvbmZpZ3VyZSBjaGVjayBmb3IgTGVzc3RpZiBpbiAiL3Vzci9sb2NhbC9MZXNzdGlmL01vdGlmKiIuICBDaGFuZ2VkIHRoZQorICBvcmRlciB0byBsZXQgYSBsb2NhbCBNb3RpZiB2ZXJzaW9uIG92ZXJyaWRlIGEgc3lzdGVtIHN0YW5kYXJkIHZlcnNpb24uCisKK1dpbjMyIEdVSToKKy0gV2hlbiB1c2luZyAiLXJlZ2lzdGVyIiBvciAiLXVucmVnaXN0ZXIiIGluIHRoZSBub24tT0xFIHZlcnNpb24sIGdpdmUgYW4KKyAgZXJyb3IgbWVzc2FnZS4KKy0gVXNlIEdUSyB0b29sYmFyIGljb25zLiAgTWFrZSB3aW5kb3cgYm9yZGVyIGxvb2sgYmV0dGVyLiAgVXNlIHNpemluZyBoYW5kbGVzCisgIG9uIHRoZSBsb3dlciBsZWZ0JnJpZ2h0IGNvcm5lcnMgb2YgdGhlIHdpbmRvdy4gKE5lZ3JpKQorLSBXaGVuIHN0YXJ0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQgd2l0aCAiOiFzdGFydCIgYW5kIHRoZSBjb21tYW5kIGNhbiBub3QgYmUKKyAgZXhlY3V0ZWQsIGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4gKFdlYmIpCistIFVzZSBzaXppbmcgaGFuZGxlcyBmb3IgdGhlIGdyZXkgcmVjdGFuZ2xlcyBiZWxvdyB0aGUgc2Nyb2xsYmFycy4gIENhbiBkcmF3CisgIHRvb2xiYXIgaW4gZmxhdCBtb2RlIG5vdywgbG9va3MgYmV0dGVyLiAoTmVncmkpCistIFByZXBhcmF0aW9ucyBmb3IgTVMtV2luZG93cyAzLjEgYWRkaXRpb24uICBNb3N0bHkgY2hhbmdpbmcgV0lOMzIgdG8gTVNXSU4KKyAgYW5kIFVTRV9HVUlfV0lOMzIgdG8gVVNFX0dVSV9NU1dJTi4gKE5lZ3JpKQorCitBdm9pZCBhbGxvY2F0aW5nIHRoZSBzYW1lIHN0cmluZyBmb3VyIHRpbWVzIGluIGJ1Zmxpc3RfZmluZHBhdCgpLiAoV2lsbGlhbXMpCisKK1NldCB0aXRsZSBhbmQgaWNvbiB0ZXh0IHdpdGggdGVybWNhcCBvcHRpb25zICd0X3RzJywgJ3RfZnMnLCAndF9JUycgYW5kCisndF9JRScuICBBbGxvd3MgZG9pbmcgdGhpcyBvbiBhbnkgdGVybWluYWwgdGhhdCBzdXBwb3J0cyBzZXR0aW5nIHRoZSB0aXRsZQorYW5kL29yIGljb24gdGV4dC4gKFNjaGlsZCkKKworTmV3ICd4JyBmbGFnIGluICdjb21tZW50cyc6IEF1dG9tYXRpY2FsbHkgaW5zZXJ0IHRoZSBlbmQgcGFydCB3aGVuIGl0cyBsYXN0CitjaGFyYWN0ZXIgaXMgdHlwZWQuICBIZWxwcyB0byBjbG9zZSBhIC8qICovIGNvbW1lbnQgaW4gQy4gKFdlYmIpCisKK1doZW4gZXhwYW5kKCkgaGFzIGEgc2Vjb25kIGFyZ3VtZW50IHdoaWNoIGlzIG5vbi16ZXJvLCBkb24ndCB1c2UgJ3N1ZmZpeGVzJworYW5kICd3aWxkaWdub3JlJywgcmV0dXJuIGFsbCBtYXRjaGVzLgorCisnTycgZmxhZyBpbiAnY3BvcHRpb25zOiBXaGVuIG5vdCBpbmNsdWRlZCwgVmltIHdpbGwgbm90IG92ZXJ3cml0ZSBhIGZpbGUsIGlmCitpdCBkaWRuJ3QgZXhpc3Qgd2hlbiBlZGl0aW5nIHN0YXJ0ZWQgYnV0IGl0IGRvZXMgZXhpc3Qgd2hlbiB0aGUgYnVmZmVyIGlzCit3cml0dGVuIHRvIHRoZSBmaWxlLiAgVGhlIGZpbGUgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBvdXRzaWRlIG9mIFZpbSwgcG9zc2libHkKK3dpdGhvdXQgdGhlIHVzZXIga25vd2luZyBpdC4gIFdoZW4gdGhpcyBpcyBkZXRlY3RlZCBhZnRlciBhIHNoZWxsIGNvbW1hbmQsCitnaXZlIGEgd2FybmluZyBtZXNzYWdlLgorCitXaGVuIGVkaXRpbmcgYSBuZXcgZmlsZSwgQ1RSTC1HIHdpbGwgc2hvdyBbTmV3IGZpbGVdLiAgV2hlbiB0aGVyZSB3ZXJlIGVycm9ycword2hpbGUgcmVhZGluZyB0aGUgZmlsZSwgQ1RSTC1HIHdpbGwgc2hvdyBbUmVhZCBlcnJvcnNdLgorCisiOndhbGwiIGNhbiBub3cgdXNlIGEgZGlhbG9nIGFuZCBmaWxlLWJyb3dzaW5nIHdoZW4gbmVlZGVkLgorCitHcm91cGVkIGZ1bmN0aW9uYWxpdHkgaW50byBuZXcgZmVhdHVyZXMsIG1haW5seSB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlCittaW5pbWFsIHZlcnNpb246CisrbGluZWJyZWFrOgknc2hvd2JyZWFrJywgJ2JyZWFrYXQnIGFuZCAnbGluZWJyZWFrJworK3Zpc3VhbGV4dHJhOgkiSSJuc2VydCBhbmQgIkEicHBlbmQgaW4gVmlzdWFsIGJsb2NrIG1vZGUsICJjImhhbmdlIGFsbCBsaW5lcworCQlpbiBhIGJsb2NrLCAiPiIgYW5kICI8IjogU2hpZnRpbmcgYSBibG9jaywgInIiOiBSZXBsYWNpbmcgYQorCQlWaXN1YWwgYXJlYSB3aXRoIG9uZSBjaGFyYWN0ZXIuCisrY29tbWVudHM6CSdjb21tZW50cycKKytjbWRsaW5lX2luZm86CSdydWxlcicgYW5kICdzaG93Y21kJy4gIFJlcGxhY2VzICtzaG93Y21kLgorIit0aXRsZSIJRG9uJ3QgYWRkIGNvZGUgdG8gc2V0IHRpdGxlIG9yIGljb24gZm9yIE1TRE9TLCB0aGlzIHdhcyBub3QKKwkJcG9zc2libGUgYW55d2F5LgorK2NtZGxpbmVfY29tcGwJRGlzYWJsZSBjb21tYW5kbGluZSBjb21wbGV0aW9uIGF0IGNvbXBpbGUgdGltZSwgZXhjZXB0IGZvcgorCQlmaWxlcywgZGlyZWN0b3JpZXMgYW5kIGhlbHAgaXRlbXMuCisKK01vdmVkIGZlYXR1cmVzIGZyb20gYSBsaXN0IG9mIGZ1bmN0aW9uIGNhbGxzIGludG8gYW4gYXJyYXkuICBTaG91bGQgc2F2ZSBhIGJpdAorb2Ygc3BhY2UuCisKK1doaWxlIGVudGVyaW5nIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24sIGFkanVzdCBpbmRlbnQgYWNjb3JkaW5nIHRvICJpZiIgYW5kCisid2hpbGUiIGNvbW1hbmRzLgorCitWTVM6IEFkanVzdGVkIG9zX3Ztcy5tbXMgYSBiaXQgYWNjb3JkaW5nIHRvIHN1Z2dlc3Rpb25zIGZyb20gQXJwYWRmZnkuCisKK1RoZSBmbGFncyBpbiB0aGUgJ2NvbW1lbnRzJyBvcHRpb24gY2FuIG5vdyBpbmNsdWRlIGFuIG9mZnNldC4gIFRoaXMgbWFrZXMgaXQKK3Bvc3NpYmxlIHRvIGFsaWduICIvKioqKioiLCAiLyogICB4eHgiIGFuZCAiLyoiIGNvbW1lbnRzIHdpdGggdGhlIHNhbWUKKydjb21tZW50cycgc2V0dGluZy4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciAnY29tbWVudHMnIHVzZXMgdGhpcy4KK0FkZGVkICdPJyBmbGFnOiBEb24ndCB1c2UgdGhpcyBwYXJ0IGZvciB0aGUgIk8iIGNvbW1hbmQuICBVc2VmdWwgZm9yICJzZXQKK2NvbT1zTzoqXCAtLG1POipcIFwgLGV4TzoqLyIKKworRmlsZVR5cGUgYXV0b2NvbW1hbmRzIHJlY29nbml6ZSAiLmJhayIsICIub3JpZyIgYW5kICJ+IiBleHRlbnNpb25zIGFuZCByZW1vdmUKK3RoZW0gdG8gZmluZCB0aGUgcmVsZXZhbnQgZXh0ZW5zaW9uLgorCitUaGUgdHV0b3JpYWwgZm9yIHdyaXRpbmcgYSBWaW0gc2NyaXB0IGZpbGUgaGFzIGJlZW4gZXh0ZW5kZWQuCisKK1NvbWUgbW9yZSBoaWdobGlnaHRpbmcgaW4gaGVscCBmaWxlcywgZm9yIGl0ZW1zIHRoYXQgYXJlIG5vdCB0eXBlZCBsaXRlcmFsbHkuCisKK0NhbiB1c2UgIkNUUkwtVyBDVFJMLUciIGxpa2UgIkNUUkwtVyBnIi4KKworIm1ha2UgdGVzdCIgZm9yIE9TLzIuCisKK0FkanVzdGVkIGNvbmZpZ3VyZSB0byBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgR1VJIGZvciBCZU9TLgorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC01LjQqCistLS0tLQorCis1LjMuMTogV2hlbiB1c2luZyBhbiBhdXRvY29tbWFuZCBmb3IgQnVmV3JpdGVQcmUgdGhhdCBjaGFuZ2VzIHRoZSBuYW1lIG9mIHRoZQorYnVmZmVyLCBmcmVlZCBtZW1vcnkgd291bGQgYmUgdXNlZC4gKEdlZGRlcykKKworTWFjOiBDb21waWxlciBkaWRuJ3QgdW5kZXJzdGFuZCBzdGFydCBvZiBza2lwX2NsYXNzX25hbWUoKS4KKworV2luMzIgR1VJOgorLSBXaGVuIGNhbmNlbGxpbmcgdGhlIGZvbnQgcmVxdWVzdGVyLCBkb24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UuCistIFdoZW4gYSB0ZWFyb2ZmLW1lbnUgaXMgb3BlbiBhbmQgaXRzIG1lbnUgaXMgZGVsZXRlZCwgVmltIGNvdWxkIGNyYXNoLgorICAoTmVncmkpCistIFRoZXJlIHdhcyBhIHByb2JsZW0gb24gV2luZG93cyA5NSB3aXRoICh1biltYXhpbWl6aW5nIHRoZSB3aW5kb3cuCisgIChXaWxsaWFtcykKKy0gd2hlbiAnbW91c2VoaWRlJyBpcyBzZXQsIHRoZSBtb3VzZSB3b3VsZCBzdGF5IGhpZGRlbiB3aGVuIGEgbWVudSBpcyBkcm9wcGVkCisgIHdpdGggdGhlIGtleWJvYXJkLiAoUmFsc3RvbikKKy0gVGhlIHRlbXBuYW1lKCkgZnVuY3Rpb24gYWxyZWFkeSBjcmVhdGVkIHRoZSBmaWxlLiAgQ2F1c2VkIHByb2JsZW1zIHdoZW4KKyAgdXNpbmcgIjp3Ii4gIE5vdyB0aGUgZmlsZSBpcyBkZWxldGVkLgorLSBDdXJzb3IgZGlzYXBwZWFyZWQgd2hlbiBlbmRpbmcgdXAgaW4gdGhlIHRvcC1sZWZ0IGNoYXJhY3RlciBvbiB0aGUgc2NyZWVuCisgIGFmdGVyIHNjcm9sbGluZy4gKFdlYmIpCistIFdoZW4gYWRkaW5nIGEgc3VibWVudSBmb3IgYSB0b3JuLW9mZiBtZW51LCBpdCB3YXMgbm90IHVwZGF0ZWQuCistIE1lbnUgdG9vbHRpcCB3YXMgdXNpbmcgdGhlIHRvb2xiYXIgdG9vbHRpcC4gKE5lZ3JpKQorLSBTZXR0aW5nICdub3RpdGxlJyBkaWRuJ3QgcmVtb3ZlIHRoZSB0aXRsZS4gKFN0ZWVkKQorLSBVc2luZyAiOiFzdGFydCBjbWQiIHNjcm9sbGVkIHRoZSBzY3JlZW4gb25lIGxpbmUgdXAsIGFuZCBkaWRuJ3Qgd2FpdCBmb3IKKyAgcmV0dXJuIHdoZW4gdGhlIGNvbW1hbmQgd2Fzbid0IGZvdW5kLgorCitDc2NvcGUgaW50ZXJmYWNlOiBTb3J0aW5nIG9mIG1hdGNoZXMgd2FzIHdyb25nLiAgU3RhcnRpbmcgdGhlIGludGVyZmFjZSBjb3VsZAorZmFpbC4gKEthaG4pCisKK01vdGlmIEdVSTogQ291bGQgbm90IGNvbXBpbGUgd2l0aCBNb3RpZiAxLjEsIGJlY2F1c2Ugc29tZSB0ZWFyLW9mZgorZnVuY3Rpb25hbGl0eSB3YXMgbm90IGluICNpZmRlZnMuCisKK0NvbmZpZ3VyZSBjb3VsZCBzb21ldGltZXMgbm90IGNvbXBpbGUgb3IgbGluayB0aGUgdGVzdCBwcm9ncmFtIGZvciBzaXplb2YoaW50KQorcHJvcGVybHkuICBUaGlzIGNhdXNlZCBhbGlnbm1lbnQgcHJvYmxlbXMgZm9yIHRoZSB1bmRvIHN0cnVjdHVyZSBhbGxvY2F0aW9ucy4KK0FkZGVkIGEgc2FmZXR5IGNoZWNrIHRoYXQgU0laRU9GX0lOVCBpcyBub3QgemVyby4KKworQWRkZWQgY29uZmlndXJlIGNoZWNrIHRvIHRlc3QgaWYgc3RyaW5ncy5oIGNhbiBiZSBpbmNsdWRlZCBhZnRlciBzdHJpbmcuaC4KK1NvbWUgc3lzdGVtcyBjYW4ndCBoYW5kbGUgaXQuCitTb21lIHN5c3RlbXMgbmVlZCBib3RoIHN0cmluZy5oIGFuZCBzdHJpbmdzLmggaW5jbHVkZWQuICBBZGp1c3RlZCB2aW0uaCBmb3IKK3RoYXQuICBSZW1vdmVkIGluY2x1ZGluZyBzdHJpbmcuaCBmcm9tIG9zX3VuaXh4LmgsIHNpbmNlIGl0J3MgYWxyZWFkeSBpbgordmltLmguIChTYXZhZ2UpCitBSVg6IGRlZmluaW5nIF9OT19QUk9UTyBpbiBvc191bml4LmggY2F1c2VzIGEgY29uZmxpY3QgYmV0d2VlbiBzdHJpbmcuaCBhbmQKK3N0cmluZ3MuaCwgYnV0IGFmdGVyIHRoZSBjb25maWd1cmUgY2hlY2sgc2FpZCBpdCB3YXMgT0suICBBbHNvIGRlZmluZQorX05PX1BST1RPIGZvciBBSVggaW4gdGhlIGNvbmZpZ3VyZSBjaGVjay4gKFdpbm4pCisKK1doZW4gY2xvc2luZyBhIHdpbmRvdyB3aXRoIENUUkwtVyBjLCB0aGUgdmFsdWUgb2YgJ2hpZGRlbicgd2FzIG5vdCB0YWtlbiBpbnRvCithY2NvdW50LCB0aGUgYnVmZmVyIHdhcyBhbHdheXMgdW5sb2FkZWQuIChOZWdyaSkKKworVW5peCBNYWtlZmlsZTogIm1ha2UgaW5zdGFsbCIgYWx3YXlzIHRyaWVkIHRvIHJlbmFtZSBhbiBvbGRlciBleGVjdXRhYmxlIGFuZAorcmVtb3ZlIGl0LiAgVGhpcyBjYXVzZWQgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGl0IGRpZG4ndCBleGl0LiAgQWRkZWQgYSBjaGVjaworZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gb2xkIGV4ZWN1dGFibGUuCitUaGUgY29tbWFuZCBsaW5lIGZvciAibWFrZSBpbnN0YWxsIiBjb3VsZCBnZXQgdG9vIGxvbmcsIGJlY2F1c2Ugb2YgdGhlIG1hbnkKK3N5bnRheCBmaWxlcy4gIE5vdyBmaXJzdCBkbyBhICJjZCIgdG8gcmVkdWNlIHRoZSBsZW5ndGguCisKK09uIFJJU0NPUyBhbmQgTVNET1MsIHJlYWRpbmcgYSBmaWxlIGNvdWxkIGZhaWwsIGJlY2F1c2UgdGhlIHNob3J0IGZpbGVuYW1lIHdhcwordXNlZCwgd2hpY2ggY2FuIGJlIHdyb25nIGFmdGVyIGEgIjohY2QiLgorCitJbiB0aGUgRE9TIHZlcnNpb25zLCB0aGUgd3JvbmcgaW5zdGFsbC5leGUgd2FzIGluY2x1ZGVkIChyZXF1aXJlZCBXaW5kb3dzKS4KK05vdyB0aGUgaW5zdGFsbC5leGUgdmVyc2lvbiBpcyBpbmNsdWRlZCB0aGF0IGlzIHRoZSBzYW1lIGFzIHRoZSBWaW0gdmVyc2lvbi4KK1RoaXMgYWxzbyBzdXBwb3J0cyBsb25nIGZpbGUgbmFtZXMgd2hlcmUgcG9zc2libGUuCisKK1doZW4gcmVjb3JkaW5nLCBhbmQgc3RvcHBpbmcgd2hpbGUgaW4gSW5zZXJ0IG1vZGUgd2l0aCBDVFJMLU8gcSwgdGhlIENUUkwtTword291bGQgYWxzbyBiZSByZWNvcmRlZC4KKworMzJiaXQgRE9TIHZlcnNpb246ICJ2aW0gXGZpbGUiLCB3aGlsZSBpbiBhIHN1YmRpcmVjdG9yeSwgcmVzdWx0ZWQgaW4gIm5ldworZmlsZSIgZm9yICJmaWxlIiBpbiB0aGUgbG9jYWwgZGlyZWN0b3J5LCB3aGlsZSAiXGZpbGUiIGRpZCBleGlzdC4gIFdoZW4KKyJmaWxlIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZXhpc3RlZCwgdGhpcyBkaWRuJ3QgaGFwcGVuLgorCitNU0RPUzogTW91c2UgY291bGQgbm90IGdvIGJleW9uZCA4MCBjb2x1bW5zIGluIDEzMiBjb2x1bW5zIG1vZGUuIChZb3VuZykKKworIm1ha2UgdGVzdCIgZmFpbGVkIGluIHRoZSBSZWRIYXQgUlBNLCBiZWNhdXNlIGNvbXBhdGlibGUgaXMgb2ZmIGJ5IGRlZmF1bHQuCisKK0luIEluc2VydCBtb2RlIDxDLU8+PEMtVz48Qy1XPiBjaGFuZ2VzIHRvIG90aGVyIHdpbmRvdywgYnV0IHRoZSBzdGF0dXMgYmFycword2VyZSBub3QgdXBkYXRlZCB1bnRpbCBhbm90aGVyIGNoYXJhY3RlciB3YXMgdHlwZWQuCisKK01TRE9TOiBlbnZpcm9ubWVudCBvcHRpb25zIGluIGxvd2VyY2FzZSBkaWRuJ3Qgd29yaywgYWx0aG91Z2ggdGhleSBkaWQgaW4gdGhlCitXaW4zMiB2ZXJzaW9ucy4gKE5lZ3JpKQorCitBZnRlciAiOm5vaGxzZWFyY2giLCBhIHRhZyBjb21tYW5kIHN3aXRjaGVkIGhpZ2hsaWdodGluZyBiYWNrIG9uLgorCitXaGVuIHVzaW5nICJhcHBlbmQiIGNvbW1hbmQgYXMgdGhlIGxhc3QgbGluZSBpbiBhbiBhdXRvY29tbWFuZCwgVmltIHdvdWxkCitjcmFzaC4KKworUklTQ09TOiBUaGUgc2Nyb2xsIGJ1bXBlcnMgKD8pIHdlcmUgbm90IHdvcmtpbmcgcHJvcGVybHkuIChMZW9uYXJkKQorCisiemwiIGFuZCAiemgiIGNvdWxkIG1vdmUgdGhlIGN1cnNvciwgYnV0IHRoaXMgZGlkbid0IHNldCB0aGUgY29sdW1uIGluIHdoaWNoCitlLmcuLCAiayIgd291bGQgbW92ZSB0aGUgY3Vyc29yLgorCitXaGVuIGRvaW5nICI6c2V0IGFsbCYiIHRoZSB2YWx1ZSBvZiAnc2Nyb2xsJyB3YXMgbm90IHNldCBjb3JyZWN0bHkuICBUaGlzCitjYXVzZWQgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGxhdGVyIHNldHRpbmcgYW55IG90aGVyIG51bWJlciBvcHRpb24uCisKK1doZW4gJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgaGFzIGJlZW4gZGlzYWJsZWQgd2l0aCAiOm5vaGxzZWFyY2giLAoraW5jcmVtZW50YWwgc2VhcmNoaW5nIHdvdWxkIHN3aXRjaCBpdCBiYWNrIG9uIHRvbyBlYXJseS4KKworV2hlbiBsaXN0aW5nIHRhZ3MgZm9yICI6dHNlbGVjdCIsIGFuZCB1c2luZyBhIG5vbi1zZWFyY2ggY29tbWFuZCwgYW5kIHRoZSBsYXN0CitjaGFyYWN0ZXIgd2FzIGVxdWFsIHRvIHRoZSBmaXJzdCAoZS5nLiwgIjk5IiksIHRoZSBsYXN0IGNoYXIgd291bGQgbm90IGJlCitzaG93bi4KKworV2hlbiBzZWFyY2hpbmcgZm9yIHRhZ3Mgd2l0aCAiOnRhZyIgVmltIHdvdWxkIGFzc3VtZSB0aGF0IGFsbCBtYXRjaGVzIGhhZCBiZWVuCitmb3VuZCB3aGVuIHRoZXJlIHdlcmUgc3RpbGwgbW9yZSAoZS5nLiBmcm9tIGFub3RoZXIgdGFncyBmaWxlKS4KKworV2luMzI6IERpZG4ndCByZWNvZ25pemUgImM6XCIgKGUuZy4sIGluIHRhZ3MgZmlsZSkgYXMgYWJzb2x1dGUgcGF0aCB3aGVuCit1cHBlci9sb3dlcmNhc2Ugd2FzIGRpZmZlcmVudC4KKworU29tZSB4dGVybXMgKERlYmlhbikgc2VuZCA8RXNjPk9IIGZvciBIT01FIGFuZCA8RXNjPk9GIGZvciBFTkQuICBBZGRlZCB0aGVzZQordG8gdGhlIGJ1aWx0aW4teHRlcm0uCisKK0luIGV4IG1vZGUsIGFueSBDUiB3YXMgc2VlbiBhcyB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgT25seSBhIE5MIHNob3VsZCBiZQoraGFuZGxlZCB0aGF0IHdheS4gIGJyb2tlICI6cy9mb28vc29tZV5NdGV4dC8iLgorCitJbiBtZW51LnZpbSwgYSB2bWVudSB3YXMgdXNlZCB0byBvdmVycmlkZSBhbiBhbWVudS4gIFRoYXQgZGlkbid0IHdvcmssIGJlY2F1c2UKK3RoZSBzeXN0ZW0gbWVudSBmaWxlIGRvZXNuJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIG1lbnVzLiAgQWRkZWQgZXhwbGljaXQgdnVubWVudQordG8gc29sdmUgdGhpcy4KKworQ29uZmlndXJlIGNoZWNrIGZvciB0ZXJtaW5hbCBsaWJyYXJ5IGNvdWxkIGZpbmQgYSBsaWJyYXJ5IHRoYXQgZG9lc24ndCB3b3JrIGF0CitydW50aW1lIChTb2xhcmlzOiBzaGFyZWQgbGlicmFyeSBub3QgZm91bmQpLiAgQWRkZWQgYSBjaGVjayB0aGF0IGEgcHJvZ3JhbQord2l0aCB0Z290bygpIGNhbiBydW4gY29ycmVjdGx5LgorCitVbml4OiAiZWNobyAtbiIgaW4gdGhlIE1ha2VmaWxlIGRvZXNuJ3Qgd29yayBvbiBhbGwgc3lzdGVtcywgY2F1c2luZyBlcnJvcnMKK2NvbXBpbGluZyBwYXRoZGVmLmMuICBSZXBsYWNlZCBpdCB3aXRoICJ0ciIuCisKK1Blcmw6IERPX0pPSU4gd2FzIHJlZGVmaW5lZCBieSBQZXJsLiAgVW5kZWZpbmVkIGl0IGluIHRoZSBwZXJsIGZpbGVzLgorCitWYXJpb3VzIFhJTSBhbmQgbXVsdGktYnl0ZSBmaXhlczoKKy0gRml4IHVzZXIgY2Fubm90IHNlZSBoaXMgbGFuZ3VhZ2Ugd2hpbGUgaGUgaXMgdHlwaW5nIGhpcyBsYW5ndWFnZSB3aXRoCisgIG9mZi10aGUtc3BvdCBtZXRob2QuIChOYWdhbm8pCistIEZpeCBwcmVlZGl0IHBvc2l0aW9uIHVzaW5nIHRleHQvZWRpdCBhcmVhICh1c2luZyBndWkud2lkKS4gKE5hZ2FubykKKy0gcmVtb3ZlICdmaXggZGVhZCBrZXknIGNvZGVzLiBJdCB3YXMgbmVlZGVkIHNpbmNlIFhORm9jdXNXaW5kb3cgd2FzCisgICJ4MTFfd2luZG93IiwgWE5Gb2N1c1dpbmRvdyBpcyBub3cgZ3VpLndpZC4gKE5hZ2FubykKKy0gUmVtb3ZlIHNvbWUgY29tcGlsZSB3YXJuaW5ncyBhbmQgZml4IHR5cG9zLiAoTmFtc2gpCistIEZvciBzdGF0dXMgYXJlYSwgY2hlY2sgdGhlIGd0aysgdmVyc2lvbiB3aGlsZSBWaW0gcnVucy4gIEkgYmVsaWV2ZSBpdCBpcworICBiZXR0ZXIgdGhhbiBjb21waWxlIHRpbWUgY2hlY2suIChOYW1zaCkKKy0gUmVtb3ZlIG9uZSBGSVhNRSBmb3IgZ3RrKy14aW0uIChOYW1zaCkKKy0gWElNOiBEZWFkIGtleXMgZGlkbid0IHdvcmsgZm9yIEN6ZWNoLiAoVnlza292c2t5KQorLSBNdWx0aWJ5dGU6IElmIHVzZXIgaW5wdXQgb25seSAzYnl0ZSBzdWNoIGFzIG1iMV9tYjJfZW5nIG9yIGVuZ19tYjFfbWIyIFZJTQorICBjb3VsZCBjb252ZXJ0IGl0IHRvIHNwZWNpYWwgY2hhcmFjdGVyLiAoTmFtKQorLSBBdGhlbmEvTW90aWYgd2l0aCBYSU06IGZpeCBwcmVlZGl0IGFyZWEuIChOYW0pCistIFhJTTogQ29tcG9zZWQgc3RyaW5ncyB3ZXJlIHNvbWV0aW1lcyBpZ25vcmVkLiAgVmltIGNyYXNoZWQgd2hlbiBjb21wb3NlCisgIHN0cmluZyB3YXMgbG9uZ2VyIHRoYW4gMjU2IGJ5dGVzLiAgSU0ncyBnZW9tZXRyeSBjb250cm9sIGlzIGZpeGVkLiAoTmFtLAorICBOYWdhbm8pCistIFdpbjMyIG11bHRpLWJ5dGU6IGhvbGxvd2VkIGN1cnNvciB3aWR0aCBvbiBhIGRvdWJsZSBieXRlIGNoYXIgd2FzIHdyb25nLgorICAoTmFnYW5vKQorLSBXaGVuIHRoZXJlIGlzIG5vIEdVSSwgc2VsZWN0aW5nIFhJTSBjYXVzZWQgY29tcGlsYXRpb24gcHJvYmxlbXMuCisgIEF1dG9tYXRpY2FsbHkgZGlzYWJsZSBYSU0gd2hlbiB0aGVyZSBpcyBubyBHVUkgaW4gY29uZmlndXJlLgorLSBNb3RpZiBhbmQgQXRoZW5hOiBXaGVuIGNvbXBpbGVkIHdpdGggWElNLCBidXQgdGhlIGlucHV0IG1ldGhvZCB3YXMgbm90CisgIGVuYWJsZWQsIHRoZXJlIHdvdWxkIHN0aWxsIGJlIGEgc3RhdHVzIGxpbmUuICBOb3cgdGhlIHN0YXR1cyBsaW5lIGlzIGdvbmUgaWYKKyAgdGhlIGlucHV0IG1ldGhvZCBkb2Vzbid0IHdvcmsuIChOYW0pCisKK1dpbjMyOiB0b29sdGlwIHdhcyBub3QgcmVtb3ZlZCB3aGVuIHNlbGVjdGluZyBhIHBhcmVudCBtZW51IChpdCB3YXMgd2hlbgorc2VsZWN0aW5nIGEgbWVudSBlbnRyeSkuIChOZWdyaSkKKworVW5peCB3aXRoIFg6IFNvbWUgc3lzdGVtcyBjcmFzaCBvbiBleGl0LCBiZWNhdXNlIG9mIHRoZSBYdENsb3NlRGlzcGxheSgpIGNhbGwuCitSZW1vdmVkIGl0LCBpdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB3aGVuIGV4aXRpbmcuCisKK1dpbjMyOiBDcmFzaCBvbiBrZXlwcmVzcyB3aGVuIGNvbXBpbGVkIHdpdGggQm9ybGFuZCBDKysuIChBYXJvbikKKworV2hlbiBjaGVja2luZyBmb3IgTW90aWYgbGlicmFyeSBmaWxlcywgcHJlZmVyIHRoZSBzYW1lIGxvY2F0aW9uIGFzIHRoZSBpbmNsdWRlCitmaWxlcyAod2l0aCAiaW5jbHVkZSIgcmVwbGFjZWQgd2l0aCAibGliIikgYWJvdmUgYW5vdGhlciBlbnRyeS4KKworQXRoZW5hIEdVSTogQ2hhbmdlZCAiWHRPZmZzZXQoKSIgaW4gZ3VpX2F0X2ZzLmMgdG8gIlh0T2Zmc2V0T2YoKSIsIGxpa2UgaXQncwordXNlZCBpbiBndWlfeDExLmMuCisKK1dpbjMyOiBXaGVuIHRlc3RpbmcgZm9yIGEgdGltZXN0YW1wIG9mIGEgZmlsZSBvbiBmbG9wcHksIHdvdWxkIGdldCBhIGRpYWxvZworYm94IHdoZW4gdGhlIGZsb3BweSBoYXMgYmVlbiByZW1vdmVkLiAgTm93IHJldHVybiB3aXRoIGFuIGVycm9yLiAgKE5lZ3JpKQorCitXaW4zMiBPTEU6IFdoZW4gZm9yY2VkIHRvIGNvbWUgdG8gdGhlIGZvcmVncm91bmQsIGEgbWluaW1pemVkIHdpbmRvdyB3YXMgc3RpbGwKK21pbmltaXplZCwgbm93IGl0J3MgcmVzdG9yZWQuIChaaXZrb3YpCisKK1RoZXJlIHdhcyBubyBjaGVjayBmb3IgYSBwb3NpdGl2ZSAnc2hpZnR3aWR0aCcuICBBIG5lZ2F0aXZlIHZhbHVlIGNvdWxkIGNhdXNlCithIGhhbmd1cCwgYSB6ZXJvIHZhbHVlIGEgY3Jhc2guCisKK0F0aGVuYSBHVUk6IGhvcml6b250YWwgc2Nyb2xsYmFyIHdhc24ndCB1cGRhdGVkIGNvcnJlY3RseSB3aGVuIGNsaWNraW5nIHJpZ2h0CitvciBsZWZ0IG9mIHRoZSB0aHVtYi4KKworV2hlbiBtYWtpbmcgYSBWaXN1YWwtYmxvY2sgc2VsZWN0aW9uIGluIG9uZSB3aW5kb3csIGFuZCB0cnlpbmcgdG8gc2Nyb2xsCithbm90aGVyLCBjb3VsZCBjYXVzZSBlcnJvcnMgZm9yIGFjY2Vzc2luZyBub24tZXhpc3RlbnQgbGluZSBudW1iZXJzLgorCitXaGVuICdtYXRjaHBhaXJzJyBjb250YWlucyAiYDonIiwganVtcGluZyBmcm9tIHRoZSBgIHRvIHRoZSAnIGRpZG4ndCB3b3JrCitwcm9wZXJseS4KKworQ2hhbmdlZCAnXCInIHRvICciJyB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBvbGQgQyBjb21waWxlcnMuCisKK1RoZSBjb21tYW5kIGxpbmUgZXhwYW5zaW9uIGZvciBtYXBwaW5ncyBjYXVzZWQgYSBzY3JpcHQgd2l0aCBhIFRBQiBiZXR3ZWVuIGxocworYW5kIHJocyBvZiBhIG1hcCBjb21tYW5kIHRvIGZhaWwuICBBc3N1bWUgdGhlIFRBQiBpcyB0byBzZXBhcmF0ZSBsaHMgYW5kIHJocword2hlbiB0aGVyZSBhcmUgbm8gbWFwcGluZ3MgdG8gZXhwYW5kLgorCitXaGVuIGVkaXRpbmcgYSBmaWxlIHdpdGggdmVyeSBsb25nIGxpbmVzIHdpdGggJ3Njcm9sbG9mZicgc2V0LCAiaiIgd291bGQKK3NvbWV0aW1lcyBlbmQgdXAgaW4gYSBsaW5lIHdoaWNoIHdhc24ndCBkaXNwbGF5ZWQuCisKK1doZW4gZWRpdGluZyBhIHJlYWQtb25seSBmaWxlLCBpdCB3YXMgY29tcGxldGVseSByZWFkIGludG8gbWVtb3J5LCBldmVuIHdoZW4KK2l0IHdvdWxkIG5vdCBmaXQuICBOb3cgY3JlYXRlIGEgc3dhcCBmaWxlIGZvciBhIHJlYWQtb25seSBmaWxlIHdoZW4gcnVubmluZworb3V0IG9mIG1lbW9yeSB3aGlsZSByZWFkaW5nIHRoZSBmaWxlLgorCitXaGVuIHVzaW5nICI6c2V0IGNpbm89e3MsZS1zIiwgYSBsaW5lIGFmdGVyICJ9IGVsc2UgeyIgd2FzIG5vdCBpbmRlbnRlZAorcHJvcGVybHkuICBBbHNvIGFkZGVkIGEgY2hlY2sgZm9yIHRoaXMgaW4gdGVzdDMuaW4uCisKK1RoZSBIZWJyZXcgbWFwcGluZyBmb3IgdGhlIGNvbW1hbmQgbGluZSB3YXMgcmVtZW1iZXJlZCBmb3IgdGhlIG5leHQgY29tbWFuZAorbGluZS4gIFRoYXQgaXNuJ3QgdmVyeSB1c2VmdWwsIGEgY29tbWFuZCBpcyBub3QgSGVicmV3LiAoS29sKQorCitXaGVuIGNvbXBsZXRpbmcgZmlsZSBuYW1lcyB3aXRoIGVtYmVkZGVkIHNwYWNlcywgbGlrZSAiUHJvZ3JhbVwgZmlsZXMiLCB0aGlzCitkaWRuJ3Qgd29yay4gIEFsc28gZm9yIHVzZXIgY29tbWFuZHMuICBNb3ZlZCBiYWNrc2xhc2hfaGFsdmUoKSBkb3duIHRvCittY2hfZXhwYW5kcGF0aCgpLgorCitXaGVuIHVzaW5nICJzZXQgbW91c2U9YSIgaW4gRXggbW9kZSwgbW91c2UgZXZlbnRzIHdlcmUgaGFuZGxlZCBsaWtlIHR5cGVkCit0ZXh0LiAgVGhlbiB0eXBpbmcgInF1aXQiIHNjcmV3ZWQgdXAgdGhlIG1vdXNlIGJlaGF2aW9yIG9mIHRoZSB4dGVybS4KKworV2hlbiByZXBlYXRpbmcgYW4gaW5zZXJ0IHdpdGggIi4iIHRoYXQgY29udGFpbnMgYSBDVFJMLVksIGEgbnVtYmVyIDUgd2FzCitpbnNlcnRlZCBhcyAiMDUzIi4KKworWWFua2luZyBhIFZpc3VhbCBhcmVhLCB3aXRoIHRoZSBjdXJzb3IgcGFzdCB0aGUgbGluZSwgZGlkbid0IG1vdmUgdGhlIGN1cnNvcgorYmFjayBvbnRvIHRoZSBsaW5lLiAgU2FtZSBmb3IgIn4iLCAidSIsICJVIiBhbmQgImc/IgorCitXaW4zMjogRGVmYXVsdCBmb3IgJ2dyZXBwcmcnIGNvdWxkIGJlICJmaW5kc3RyIC9uIiBldmVuIHRob3VnaCB0aGVyZSBpcyBubworZmluZHN0ci5leGUgKFdpbmRvd3MgOTUpLiAgQ2hlY2sgaWYgaXQgZXhpc3RzLCBhbmQgZmFsbCBiYWNrIHRvICJncmVwIC1uIiBpZgoraXQgZG9lc24ndC4KKworQmVjYXVzZSBndWlfbW91c2VfbW92ZWQoKSBpbnNlcnRlZCBhIGxlZnRtb3VzZSBjbGljayBpbiB0aGUgaW5wdXQgYnVmZmVyLAorcmVtYXBwaW5nIGEgbGVmdG1vdXNlIGNsaWNrIGNhdXNlZCBzdHJhbmdlIGVmZmVjdHMuICBOb3cgSW5zZXJ0IGFub3RoZXIgY29kZQoraW4gdGhlIGlucHV0IGJ1ZmZlci4gIEFsc28gaW5zZXJ0IGEgbGVmdG1vdXNlIHJlbGVhc2UsIHRvIGF2b2lkIHRoZSBwcm9ibGVtCit3aXRoICI6bWFwIDxMZWZ0TW91c2U+IGwiIHRoYXQgdGhlIG5leHQgcmVsZWFzZSBpcyBzZWVuIGFzIHRoZSByZWxlYXNlIGZvciB0aGUKK2ZvY3VzIGNsaWNrLgorCitXaXRoICd3cmFwJyBvbiwgd2hlbiB1c2luZyBhIGxpbmUgdGhhdCBkb2Vzbid0IGZpdCBvbiB0aGUgc2NyZWVuLCBpZiB0aGUgc3RhcnQKK29mIHRoZSBWaXN1YWwgYXJlYSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBzY3JlZW4sIHRoZXJlIHdhcyBubworaGlnaGxpZ2h0aW5nLiAgQWxzbywgJ3Nob3dicmVhaycgZG9lc24ndCB3b3JrIHByb3Blcmx5LgorCitET1MsIFdpbjMyOiBBIHBhdHRlcm4gIlswLTldXCsiIGRpZG4ndCB3b3JrIGluIGF1dG9jb21tYW5kcy4KKworV2hlbiBjcmVhdGluZyBhIHN3YXAgZmlsZSBmb3IgYSBidWZmZXIgd2hpY2ggaXNuJ3QgdGhlIGN1cnJlbnQgYnVmZmVyLCBjb3VsZAorZ2V0IGEgbWl4dXAgb2Ygc2hvcnQgZmlsZSBuYW1lLCByZXN1bHRpbmcgaW4gYSBsb25nIGZpbGUgbmFtZSB3aGVuIGEgc2hvcnQKK2ZpbGUgbmFtZSB3YXMgcmVxdWlyZWQuICBtYWtlc3dhcG5hbWUoKSB3YXMgY2FsbGluZyBtb2RuYW1lKCkgaW5zdGVhZCBvZgorYnVmX21vZG5hbWUoKS4KKworV2hlbiBhIGZ1bmN0aW9uIGNhdXNlZCBhbiBlcnJvciwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHdhcyB2ZXJ5IGxvbmcgYmVjYXVzZQorb2YgcmVjdXJzaXZlbmVzcywgdGhpcyB3b3VsZCBjYXVzZSBhIGNyYXNoLgorCisnc3VmZml4ZXMnIHdlcmUgYWx3YXlzIGNvbXBhcmVkIHdpdGggbWF0Y2hpbmcgY2FzZS4gIEZvciBNUy1ET1MsIFdpbjMyIGFuZAorT1MvMiBjYXNlIGlzIG5vdyBpZ25vcmVkLgorCitUaGUgdXNlIG9mIENIQVJCSVRTIGluIHJlZ2V4cC5jIGRpZG4ndCB3b3JrIG9uIHNvbWUgTGludXguICBEb24ndCB1c2UgaXQuCisKK1doZW4gZ2VuZXJhdGluZyBhIHNjcmlwdCBmaWxlLCAnY3BvJyB3YXMgbWFkZSBlbXB0eS4gIFRoaXMgY2F1c2VkIGJhY2tzbGFzaGVzCit0byBkaXNhcHBlYXIgZnJvbSBtYXBwaW5ncy4gIFNldCBpdCB0byAiQiIgdG8gYXZvaWQgdGhhdC4KKworTG90cyBvZiB0eXBvcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gKENhbXBiZWxsKQorCitXaGVuIGVkaXRpbmcgYW4gZXhpc3RpbmcgKGhpZGRlbikgYnVmZmVyLCBqdW1wIHRvIHRoZSBsYXN0IHVzZWQgY3Vyc29yCitwb3NpdGlvbi4gKE1hZHNlbikKKworT24gYSBTdW4gdGhlIHh0ZXJtIHNjcmVlbiB3YXMgbm90IHJlc3RvcmVkIHByb3Blcmx5IHdoZW4gc3VzcGVuZGluZy4gKE1hZHNlbikKKworV2hlbiAkVklNSU5JVCBpcyBwcm9jZXNzZWQsICdub2NvbXBhdGlibGUnIHdhcyBvbmx5IHNldCBhZnRlciBwcm9jZXNzaW5nIGl0LgorCitVbml4OiBQb2xsaW5nIGZvciBhIGNoYXJhY3RlciB3YXNuJ3QgZG9uZSBmb3IgR1BNLCBTbmlmZiBhbmQgWHRlcm0gY2xpcGJvYXJkCithbGwgdG9nZXRoZXIuICBDbGVhbmVkIHVwIHRoZSBjb2RlIGZvciB1c2luZyBzZWxlY3QoKSB0b28uCisKK1doZW4gZXhlY3V0aW5nIGV4dGVybmFsIGNvbW1hbmRzIGZyb20gdGhlIEdVSSwgc29tZSB0eXBlYWhlYWQgd2FzIGxvc3QuICBBZGRlZAorc29tZSBjb2RlIHRvIHJlZ2FpbiBhcyBtdWNoIHR5cGVhaGVhZCBhcyBwb3NzaWJsZS4KKworV2hlbiB0aGUgd2luZG93IGhlaWdodCBpcyA1IGxpbmVzIG9yIGZld2VyLCA8UGFnZURvd24+IGRpZG4ndCB1c2UgYSBvbmUtbGluZQorb3ZlcmxhcCwgd2hpbGUgPFBhZ2VVcD4gZG9lcy4gIE1hZGUgc3VyZSB0aGF0IDxQYWdlVXA+IHVzZXMgdGhlIHNhbWUgb3ZlcmxhcAorYXMgPFBhZ2VEb3duPiwgc28gdGhhdCB1c2luZyB0aGVtIGJvdGggYWx3YXlzIGRpc3BsYXlzIHRoZSBzYW1lIGxpbmVzLgorCitSZW1vdmVkIGEgZmV3IHVudXNlZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyAoZm91bmQgd2l0aCBsaW50KS4KKworRGljdGlvbmFyeSBjb21wbGV0aW9uIGRpZG4ndCB1c2UgJ2luZmVyY2FzZScuIChSYXVsKQorCitDb25maWd1cmUgdGVzdHMgZmFpbGVkIHdoZW4gdGhlIFBlcmwgbGlicmFyeSB3YXMgbm90IGluIExEX0xJQlJBUllfUEFUSC4KK0Rvbid0IHVzZSB0aGUgUGVybCBsaWJyYXJ5IGZvciBjb25maWd1cmUgdGVzdHMsIGFkZCBpdCB0byB0aGUgbGlua2VyIGxpbmUgb25seQord2hlbiBsaW5raW5nIFZpbS4KKworV2hlbiB1c2luZyBuY3Vyc2VzL3Rlcm1pbmZvLCBjb3VsZCBnZXQgYSAndF9TZicgYW5kICd0X1NiJyB0ZXJtY2FwIGVudHJ5IHRoYXQKK2hhcyAiJWQiIGluc3RlYWQgb2YgIiVwMSVkIi4gIFRoZSBsaWdodCBiYWNrZ3JvdW5kIGNvbG9ycyBkaWRuJ3Qgd29yayB0aGVuLgorCitHVEsgR1VJIHdpdGggbmN1cnNlczogQ3Jhc2hlZCB3aGVuIHN0YXJ0aW5nIHVwIGluIHRwdXRzKCkuICBEb24ndCB1c2UgdHB1dHMoKQord2hlbiB0aGUgR1VJIGlzIGFjdGl2ZS4KKworQ291bGQgdXNlIHRoZSAiOmxldCIgY29tbWFuZCB0byBzZXQgdGhlICJjb3VudCIsICJzaGVsbF9lcnJvciIgYW5kICJ2ZXJzaW9uIgordmFyaWFibGVzLCBidXQgdGhhdCBkaWRuJ3Qgd29yay4gIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byBzZXQKK3RoZW0uCisKK09uIEZyZWVCU0QgMy4wLCB0Y2xzaCBpcyBjYWxsZWQgdGNsc2g4LjAuICBBZGp1c3RlZCBjb25maWd1cmUuaW4gdG8gZmluZCBpdC4KKworV2hlbiBWaW0gaXMgbGlua2VkIHdpdGggLWxuY3Vyc2VzLCBidXQgcHl0aG9uIHVzZXMgLWx0ZXJtY2FwLCB0aGlzIGNhdXNlcwordHJvdWJsZTogIk9PUFMiLiAgQ29uZmlndXJlIG5vdyByZW1vdmVzIHRoZSAtbHRlcm1jYXAuCisKKzpAIiBhbmQgOioiIGRpZG4ndCB3b3JrIHByb3Blcmx5LCBiZWNhdXNlIHRoZSAiIHdhcyByZWNvZ25pemVkIGFzIHRoZSBzdGFydCBvZgorYSBjb21tZW50LgorCitXaW4zMnMgR1VJOiBNaW5pbWl6aW5nIHRoZSBjb25zb2xlIHdoZXJlIGEgZmlsdGVyIGNvbW1hbmQgcnVucyBpbiBjYXVzZWQKK3Ryb3VibGUgZm9yIGRldGVjdGluZyB0aGF0IHRoZSBmaWx0ZXIgY29tbWFuZCBoYXMgZmluaXNoZWQuIChOZWdyaSkKKworQWZ0ZXIgZXhlY3V0aW5nIGEgZmlsdGVyIGNvbW1hbmQgZnJvbSBhbiB4dGVybSwgdGhlIG1vdXNlIHdvdWxkIGJlIGRpc2FibGVkLgorSXQgd291bGQgd29yayBhZ2FpbiBhZnRlciBjaGFuZ2luZyB0aGUgbW9kZS4KKworTWFjIEdVSTogQ3Jhc2hlZCBpbiBuZXdlbnYoKS4gKFN0LUFtYW50KQorCitUaGUgbWVudXMgYW5kIG1hcHBpbmdzIGluIG1zd2luLnZpbSBkaWRuJ3QgaGFuZGxlIHRleHQgZW5kaW5nIGluIGEgTkwKK2NvcnJlY3RseS4gKEFjZXZlZG8pCisKK1RoZSAiOmsiIGNvbW1hbmQgZGlkbid0IGNoZWNrIGlmIGl0IGhhZCBhIHZhbGlkIGFyZ3VtZW50IG9yIGV4dHJhIGNoYXJhY3RlcnMuCitOb3cgZ2l2ZSBhIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZS4gKFdlYmIpCisKK09uIFNHSSwgdGhlIHNpZ25hbCBmdW5jdGlvbiBkb2Vzbid0IGFsd2F5cyBoYXZlIHRocmVlIGFyZ3VtZW50cy4gIENoZWNrIGZvcgorc3RydWN0IHNpZ2NvbnRleHQgdG8gZmluZCBvdXQuICBNaWdodCBzdGlsbCBiZSB3cm9uZy4uLgorCitDb3VsZCBjcmFzaCB3aGVuIHVzaW5nICdobHNlYXJjaCcgYW5kIHNlYXJjaCBwYXR0ZXJuIGlzICJeIi4KKworV2hlbiBzZWFyY2ggcGF0dGVybnMgd2VyZSBzYXZlZCBhbmQgcmVzdG9yZWQsIHN0YXR1cyBvZiBub19obHNlYXJjaCB3YXMgbm90CithbHNvIHNhdmVkIGFuZCByZXN0b3JlZCAoZnJvbSAiOm5vaGxzZWFyY2giIGNvbW1hbmQpLgorCitXaGVuIHVzaW5nIHNldGxpbmUoKSB0byBtYWtlIGEgbGluZSBzaG9ydGVyLCB0aGUgY3Vyc29yIHBvc2l0aW9uIHdhcyBub3QKK2FkanVzdGVkLgorCitNUy1ET1MgYW5kIFdpbjk1OiBXaGVuIHRyeWluZyB0byBlZGl0IGEgZmlsZSBhbmQgYWNjaWRlbnRhbGx5IGFkZGluZyBhIHNsYXNoCitvciBiYWNrc2xhc2ggYXQgdGhlIGVuZCwgdGhlIGZpbGUgd2FzIGRlbGV0ZWQuICBQcm9iYWJseSB3aGVuIHRyeWluZyB0byBjcmVhdGUKK3RoZSBzd2FwIGZpbGUuICBFeHBsaWNpdGx5IGNoZWNrIGZvciBhIHRyYWlsaW5nIHNsYXNoIG9yIGJhY2tzbGFzaCBiZWZvcmUKK3RyeWluZyB0byByZWFkIGEgZmlsZS4KKworWDExIEdVSTogV2hlbiBzdGFydGluZyB0aGUgR1VJIGZhaWxlZCBhbmQgcmVjZWl2ZWQgYSBkZWFkbHkgc2lnbmFsIHdoaWxlCitzZXR0aW5nIHRoZSB0aXRsZSwgd291bGQgbG9jayB1cCB3aGVuIHRyeWluZyB0byBleGl0LCBiZWNhdXNlIHRoZSB0aXRsZSBpcworcmVzZXQgYWdhaW4uICBBdm9pZCB1c2luZyBtY2hfc2V0dGl0bGUoKSByZWN1cnNpdmVseS4KKworWDExIEdVSTogV2hlbiBzdGFydGluZyB0aGUgR1VJIGZhaWxzLCBhbmQgdGhlbiB0cnlpbmcgaXQgYWdhaW4sIHdvdWxkIGNyYXNoLAorYmVjYXVzZSBhcmd2W10gaGFzIGJlZW4gZnJlZWQgYW5kIHgxMV9kaXNwbGF5IHdhcyByZXNldCB0byBOVUxMLgorCitXaW4zMjogV2hlbiAkSE9NRSB3YXMgc2V0LCB3b3VsZCBwdXQgIn51c2VyIiBpbiB0aGUgc3dhcCBmaWxlLCB3aGljaCB3b3VsZAorbmV2ZXIgY29tcGFyZSB3aXRoIGEgZmlsZSBuYW1lLCBhbmQgbmV2ZXIgY2F1c2UgdGhlIGF0dGVudGlvbiBtZXNzYWdlLiAgUHV0Cit0aGUgZnVsbCBwYXRoIGluIHRoZSBzd2FwIGZpbGUgaW5zdGVhZC4KKworV2luMzIgY29uc29sZTogVGhlcmUgd2VyZSBmdW5ueSBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgdGhlICJ2aW0gLXIiIHN3YXAKK2ZpbGVzIG1lc3NhZ2UgKGRpcmVjdCBvdXRwdXQgb2YgQ1IgQ1IgTEYpLgorCitET1MgMzIgYml0OiAidmltIC1yIiBwdXQgdGhlIHRleHQgYXQgdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCitHVUk6IFdpdGggJ21vdXNlZm9jdXMnIHNldCwgZ290IG1vdXNlIGNvZGVzIGFzIHRleHQgd2l0aCAiIXNsZWVwIDEwMCIgb3IgIlEiLgorCitNb3RpZiBhbmQgV2luMzIgR1VJOiBXaGVuIGNoYW5naW5nICdndWlmb250JyB0byBhIGZvbnQgb2YgdGhlIHNhbWUgc2l6ZSB0aGUKK3NjcmVlbiB3YXNuJ3QgcmVkcmF3bi4KKworVW5peDogV2hlbiB1c2luZyAiOm1ha2UiLCBqdW1waW5nIHRvIGEgZmlsZSBiLmMsIHdoaWNoIGlzIGFscmVhZHkgb3BlbiBhcyBhCitzeW1ib2xpYyBsaW5rIGEuYywgb3BlbmVkIGEgbmV3IGJ1ZmZlciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBleGlzdGluZyBvbmUuCisKK0luc2VydGluZyB0ZXh0IGluIHRoZSBjdXJyZW50IGJ1ZmZlciB3aGlsZSBzb3VyY2luZyB0aGUgLnZpbXJjIGZpbGUgd291bGQKK2NhdXNlIGEgY3Jhc2ggb3IgaGFuZy4gIFRoZSBtZW1maWxlIGZvciB0aGUgY3VycmVudCBidWZmZXIgd2FzIG5ldmVyCithbGxvY2F0ZWQuICBOb3cgaXQncyBhbGxvY2F0ZWQgYXMgc29vbiBhcyBzb21ldGhpbmcgaXMgd3JpdHRlbiBpbiB0aGUgYnVmZmVyLgorCitET1MgMzIgYml0OiAibGlnaHRibHVlIiBiYWNrZ3JvdW5kIHdvcmtlZCBmb3IgdGV4dCwgYnV0IG5vdCBkcmF3biBwYXJ0cyB3ZXJlCitibGFjay4KKworRE9TOiBDb2xvcnMgb2YgY29uc29sZSB3ZXJlIG5vdCByZXN0b3JlZCB1cG9uIGV4aXRpbmcuCisKK1doZW4gcmVjb3JkaW5nLCB3aXRoICdjbWRoZWlnaHQnIHNldCB0byAyIGFuZCB0eXBpbmcgRXNjPiBpbiBJbnNlcnQgbW9kZQorY2F1c2VkIHRoZSAicmVjb3JkaW5nIiBtZXNzYWdlIHRvIGJlIGRvdWJsZWQuCisKK1NwdXJpb3VzICJmaWxlIGNoYW5nZWQiIG1lc3NhZ2VzIGNvdWxkIGhhcHBlbiBvbiBXaW5kb3dzLiAgTm93IHRvbGVyYXRlIGEgb25lCitzZWNvbmQgZGlmZmVyZW5jZSwgbGlrZSBmb3IgTGludXguCisKK0dVSTogV2hlbiByZXR1cm5pbmcgZnJvbSBFeCBtb2RlLCBzY3JvbGxiYXJzIHdlcmUgbm90IHVwZGF0ZWQuCisKK1dpbjMyOiBDb3B5aW5nIHRleHQgdG8gdGhlIGNsaXBib2FyZCBjb250YWluaW5nIGEgPENSPiwgcGFzdGluZyBpdCB3b3VsZAorcmVwbGFjZSBpdCB3aXRoIGEgPE5MPiBhbmQgZHJvcCB0aGUgbmV4dCBjaGFyYWN0ZXIuCisKK0VudGVyaW5nIGEgZG91YmxlIGJ5dGUgY2hhcmFjdGVyIGRpZG4ndCB3b3JrIGlmIHRoZSBzZWNvbmQgYnl0ZSBpcyBpbiBbeFhvT10uCisoRXJpYyBMZWUpCisKK3ZpbV9yZWFsbG9jIHdhcyBib3RoIGRlZmluZWQgYW5kIGhhZCBhIHByb3RvdHlwZSBpbiBwcm90by9taXNjMi5wcm8uICBDYXVzZWQKK2NvbmZsaWN0cyBvbiBTb2xhcmlzLgorCitBIHBhdHRlcm4gaW4gYW4gYXV0b2NvbW1hbmQgd2FzIHRyZWF0ZWQgZGlmZmVyZW50bHkgb24gRE9TIGV0IGFsLiB0aGFuIG9uCitVbml4LiAgTm93IGl0J3MgdGhlIHNhbWUsIGFsc28gd2hlbiB1c2luZyBiYWNrc2xhc2hlcy4KKworV2hlbiB1c2luZyA8VGFiPiB0d2ljZSBmb3IgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24sIHdpdGhvdXQgYSBtYXRjaCwgdGhlIDxUYWI+Cit3b3VsZCBiZSBpbnNlcnRlZC4gKE5lZ3JpKQorCitCdWcgaW4gTVMtVmlzdWFsIEMrKyA2LjAgd2hlbiBjb21waWxpbmcgZXhfZG9jbWQuYyB3aXRoIG9wdGltaXphdGlvbi4gKE5lZ3JpKQorCitUZXN0aW5nIHRoZSByZXN1bHQgb2YgbWt0ZW1wKCkgZm9yIGZhaWx1cmUgd2FzIHdyb25nLiAgQ291bGQgY2F1c2UgYSBjcmFzaC4KKyhQZXRlcnMpCisKK0dVSTogV2hlbiBjaGVja2luZyBmb3IgYSAiLmd2aW1yYyIgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGRpZG4ndCBjaGVjaworZm9yIGEgIl9ndmltcmMiIGZpbGUgdG9vLgorCitNb3RpZiBHVUk6IFdoZW4gdXNpbmcgdGhlIHBvcHVwIG1lbnUgYW5kIHRoZW4gYWRkaW5nIGFuIGl0ZW0gdG8gdGhlIG1lbnUgYmFyLAordGhlIG1lbnUgYmFyIHdvdWxkIGdldCB2ZXJ5IGhpZ2guCisKK01vdXNlIGNsaWNrcyBhbmQgc3BlY2lhbCBrZXlzIChlLmcuIGN1cnNvciBrZXlzKSBxdWl0IHRoZSBtb3JlIHByb21wdCBhbmQKK2RpYWxvZ3MuICBOb3cgdGhleSBhcmUgaWdub3JlZC4KKworV2hlbiBhdCB0aGUgbW9yZS1wcm9tcHQsIHh0ZXJtIHNlbGVjdGlvbiBkaWRuJ3Qgd29yay4gIE5vdyB1c2UgdGhlICdyJyBmbGFnIGluCisnbW91c2UnIGFsc28gZm9yIHRoZSBtb3JlLXByb21wdC4KKworV2hlbiBzZWxlY3RpbmcgYSBWaXN1YWwgYXJlYSBvZiBtb3JlIHRoYW4gMTAyMyBsaW5lcywgd2l0aCAnZ3Vpb3B0aW9ucycgc2V0IHRvCisiYSIsIGNvdWxkIG1lc3MgdXAgdGhlIGRpc3BsYXkgYmVjYXVzZSBvZiBhIG1lc3NhZ2UgaW4gZnJlZV95YW5rKCkuICBSZW1vdmVkCit0aGF0IG1lc3NhZ2UsIGV4Y2VwdCBmb3IgdGhlIEFtaWdhLgorCitNb3ZlZCBhdXRvLXNlbGVjdGlvbiBmcm9tIHVpX3dyaXRlKCkgdG8gdGhlIHNjcmVlbiB1cGRhdGUgZnVuY3Rpb25zLiAgQXZvaWRzCit1bmV4cGVjdGVkIGJlaGF2aW9yIGZyb20gYSBsb3ctbGV2ZWwgZnVuY3Rpb24uICBBbHNvIG1ha2VzIHRoZSBkaWZmZXJlbnQKK2ZlZWRiYWNrIG9mIG93bmluZyB0aGUgc2VsZWN0aW9uIHBvc3NpYmxlLgorCitWaSBpbmNvbXBhdGliaWxpdHk6IFVzaW5nICJpPENSPiIgaW4gYW4gaW5kZW50LCB3aXRoICdhaScgc2V0LCB1c2VkIHRoZQorb3JpZ2luYWwgaW5kZW50IGluc3RlYWQgb2YgdHJ1bmNhdGluZyBpdCBhdCB0aGUgY3Vyc29yLiAoV2ViYikKKworIjplY2hvIHgiIGRpZG4ndCBzdG9wIGF0ICJxIiBmb3IgdGhlIG1vcmUgcHJvbXB0LgorCitWYXJpb3VzIGZpeGVzIGZvciBNYWNpbnRvc2guIChTdC1BbWFudCkKKworV2hlbiB1c2luZyAnc2VsZWN0bW9kZScgc2V0IHRvICJleGNsdXNpdmUiLCBzZWxlY3RpbmcgYSB3b3JkIGFuZCB0aGVuIHVzaW5nCitDVFJMLV0gaW5jbHVkZWQgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgorCitVc2luZyAiOmxldCBhOm5hbWUiIGluIGEgZnVuY3Rpb24gY2F1c2VkIGEgY3Jhc2guIChXZWJiKQorCitXaGVuIHVzaW5nICI6YXBwZW5kIiwgYW4gZW1wdHkgbGluZSBkaWRuJ3Qgc2Nyb2xsIHVwLgorCitET1MgZXRjLjogQSBmaWxlIG5hbWUgc3RhcnRpbmcgd2l0aCAnIScgZGlkbid0IHdvcmsuICBBZGRlZCAnIScgdG8gZGVmYXVsdCBmb3IKKydpc2ZuYW1lJy4KKworQmVPUzogQ29tcGlsYXRpb24gcHJvYmxlbSB3aXRoIHByb3RvdHlwZSBvZiBza2lwX2NsYXNzX25hbWUoKS4gKFByaWNlKQorCitXaGVuIGRlbGV0aW5nIG1vcmUgdGhhbiBvbmUgbGluZSwgZS5nLiwgd2l0aCAiZGUiLCBjb3VsZCBzdGlsbCB1c2UgIlUiCitjb21tYW5kLCB3aGljaCBkaWRuJ3Qgd29yayBwcm9wZXJseSB0aGVuLgorCitBbWlnYTogQ291bGQgbm90IGNvbXBpbGUgZXhfZG9jbWQuYywgaXQgd2FzIGdldHRpbmcgdG9vIGJpZy4gIE1vdmVkIHNvbWUKK2Z1bmN0aW9ucyB0byBleF9jbWRzLmMuCisKK1RoZSBleHBhbmQoKSBmdW5jdGlvbiB3b3VsZCBhZGQgYSB0cmFpbGluZyBzbGFzaCBmb3IgZGlyZWN0b3JpZXMuCisKK0RpZG4ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gYXNzaWduIGEgdmFsdWUgdG8gYW4gYXJndW1lbnQgb2YgYQorZnVuY3Rpb24uICAoV2ViYikKKworTW92ZWQgaW5jbHVkaW5nIHN5cy9wdGVtLmggdG8gYWZ0ZXIgdGVybWlvcy5oLiAgTmVlZGVkIGZvciBTaW5peC4KKworT0xFIGludGVyZmFjZTogRG9uJ3QgZGVsZXRlIHRoZSBvYmplY3QgaW4gQ1ZpbUNGOjpSZWxlYXNlKCkgd2hlbiB0aGUgcmVmZXJlbmNlCitjb3VudCBiZWNvbWVzIHplcm8uIChDb3JkZWxsKQorVmlzVmltIGNvdWxkIHN0aWxsIGNyYXNoIG9uIGV4aXQuIChFcmhhcmR0KQorCisiY2FzZSBhOiBjYXNlIGI6IiAodHdvIGNhc2Ugc3RhdGVtZW50cyBpbiBvbmUgbGluZSkgYWxpZ25lZCB3aXRoIHRoZSBzZWNvbmQKK2Nhc2UuICBOb3cgaXQgdXNlcyBvbmUgJ3N3JyBmb3IgaW5kZW50LiAoV2ViYikKKworRm9udCBpbml0aWFsaXNhdGlvbiB3YXNuJ3QgcmlnaHQgZm9yIEF0aGVuYS9Nb3RpZiBHVUkuICBNb3ZlZCB0aGUgY2FsbCB0bworaGlnaGxpZ2h0X2d1aV9zdGFydGVkKCkgZ3VpX21jaF9pbml0KCkgdG8gZ3VpX21jaF9vcGVuKCkuIChOYW0pCisKK0luIFJlcGxhY2UgbW9kZSwgYmFja3NwYWNpbmcgb3ZlciBhIFRBQiBiZWZvcmUgd2hlcmUgdGhlIHJlcGxhY2UgbW9kZSBzdGFydGVkCit3aGlsZSAnc3RzJyBpcyBkaWZmZXJlbnQgZnJvbSAndHMnLCB3b3VsZCBkZWxldGUgdGhlIFRBQi4KKworV2luMzIgY29uc29sZTogV2hlbiBleGVjdXRpbmcgZXh0ZXJuYWwgY29tbWFuZHMgYW5kIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSB0d28KK2NvbnNvbGUgc2NyZWVucywgVmltIHdvdWxkIGNvcHkgdGhlIHRleHQgYmV0d2VlbiB0aGUgYnVmZmVycy4gIFRoYXQgY2F1c2VkIHRoZQorc2NyZWVuIHRvIGJlIG1lc3NlZCB1cCBmb3IgYmFja3RpY2sgZXhwYW5zaW9uLgorCisiOndpbnBvcyAtMSIgdGhlbiAiOndpbnBvcyIgZ2F2ZSB3cm9uZyBlcnJvciBtZXNzYWdlLgorCitXaW5kb3dzIGNvbW1hbmRlciBjcmVhdGVzIGZpbGVzIGNhbGxlZCBjOlx0bXBcJHdjXGFiYy50eHQuICBEb24ndCByZW1vdmUgdGhlCitiYWNrc2xhc2ggYmVmb3JlIHRoZSAkLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIHdlcmUgbm90IGV4cGFuZGVkIGFueXdheSwKK2JlY2F1c2Ugb2YgdGhlIGJhY2tzbGFzaCBiZWZvcmUgdGhlIGRvbGxhci4KKworVXNpbmcgIi09IiB3aXRoICI6c2V0IiBjb3VsZCByZW1vdmUgaGFsZiBhIHBhcnQgd2hlbiBpdCBjb250YWlucyBhICJcLCIuCitFLmcuLCAiOnNldCBwYXRoKz1hXFwsYiIgYW5kIHRoZW4gInNldCBwYXRoLT1iIiAgcmVtb3ZlZCAiLGIiLgorCitXaGVuIFZpc3VhbGx5IHNlbGVjdGluZyBsaW5lcywgd2l0aCAnc2VsZWN0aW9uJyBzZXQgdG8gImluY2x1c2l2ZSIsIGluY2x1ZGluZwordGhlIGxhc3QgY2hhciBvZiB0aGUgbGluZSwgIjw8IiBtb3ZlZCBhbiBleHRyYSBsaW5lLiAgQWxzbyBmb3Igb3RoZXIgb3BlcmF0b3JzCit0aGF0IGFsd2F5cyB3b3JrIG9uIGxpbmVzLgorCitsaW5rLnNoIGNoYW5nZWQgIi1sbnNsX3MiIHRvICJfcyIgd2hlbiBsb29raW5nIGZvciAibnNsIiB0byBiZSByZW1vdmVkLgorTm93IGl0IG9ubHkgcmVtb3ZlIHdob2xlIHdvcmRzLgorCitXaGVuIGp1bXBlZCB0byBhIG1hcmsgb3IgdXNpbmcgImZ6IiwgYW5kIHRoZXJlIGlzIGFuIGVycm9yLCB0aGUgY3VycmVudCBjb2x1bW4KK3dhcyBsb3N0LiAgRS5nLiB3aGVuIHVzaW5nICIkZnpqIi4KKworVGhlICJnIENUUkwtRyIgY29tbWFuZCBjb3VsZCBub3QgYmUgaW50ZXJydXB0ZWQsIGV2ZW4gdGhvdWdoIGl0IGNhbiB0YWtlIGEKK2xvbmcgdGltZS4KKworU29tZSB0ZXJtaW5hbHMgZG8gaGF2ZSA8RjQ+IGFuZCA8eEY0Pi4gIDx4RjQ+IHdhcyBhbHdheXMgaW50ZXJwcmV0ZWQgYXMgPEY0Pi4KK05vdyBtYXAgPHhGND4gdG8gPEY0Piwgc28gdGhhdCB0aGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcy4KKworV2hlbiBjb21waWxpbmcgb3Nfd2luMzIuYyB3aXRoIE1JTl9GRUFUIHRoZSBhcHBseV9hdXRvY21kcygpIHNob3VsZCBub3QgYmUKK3VzZWQuIChBYXJvbikKKworVGhpcyBhdXRvY29tbWFuZCBsb29wZWQgZm9yZXZlcjogIjphdSBGaWxlQ2hhbmdlZFNoZWxsICogbmVzdGVkIGUgPGFmaWxlPiIKK05vdyBGaWxlQ2hhbmdlU2hlbGwgbmV2ZXIgbmVzdHMuIChSb2VtZXIpCisKK1doZW4gZXZhbHVhdGluZyBhbiAiOmVsc2VpZiIgdGhhdCB3YXMgbm90IGdvaW5nIHRvIG1hdHRlciBhbnl3YXksIGlnbm9yZQorZXJyb3JzLiAoUm9lbWVyKQorCitHVUkgTGVzc3RpZjogVGVhcm9mZiBiYXIgd2FzIHRoZSBsYXN0IGl0ZW0sIGluc3RlYWQgb2YgdGhlIGZpcnN0LgorCitHVUkgTW90aWY6IENvbG9ycyBvZiB0ZWFyLW9mZiB3aWRnZXRzIHdhcyB3cm9uZyB3aGVuICd0JyBmbGFnIGFkZGVkIHRvCisnZ3Vpb3B0aW9ucycgYWZ0ZXJ3YXJkcy4gIFdoZW4gJ3QnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnIGlzIGV4Y2x1ZGVkLCB3b3VsZAorc3RpbGwgZ2V0IGEgdGVhcm9mZiBpdGVtIGluIGEgbmV3IG1lbnUuCisKK0FuIGlub2RlIG51bWJlciBjYW4gYmUgImxvbmcgbG9uZyIuICBVc2UgaW5vX3QgaW5zdGVhZCBvZiBsb25nLiAgQWRkZWQKK2NvbmZpZ3VyZSBjaGVjayBmb3IgaW5vX3QuCisKK0JpbmFyeSBzZWFyY2ggZm9yIHRhZ3Mgd2FzIHVzaW5nIGEgZmlsZSBvZmZzZXQgImxvbmciIGluc3RlYWQgb2YgIm9mZl90Ii4KKworSW5zZXJ0IG1vZGUgY29tcGxldGlvbiBvZiB0YWdzIHdhcyBub3QgdXNpbmcgJ2lnbm9yZWNhc2UnIHByb3Blcmx5LgorCitJbiBJbnNlcnQgbW9kZSwgdGhlIDx4Rm4+IGtleXMgd2VyZSBub3QgcHJvcGVybHkgbWFwcGVkIHRvIDxGbj4gZm9yIHRoZQorZGVmYXVsdCBtYXBwaW5ncy4gIEFsc28gY2F1c2VkIGVycm9ycyBmb3IgIjpta3ZpbXJjIiBhbmQgIjpta3Nlc3Npb24iLgorCitXaGVuIGp1bXBpbmcgdG8gYW5vdGhlciB3aW5kb3cgd2hpbGUgaW4gSW5zZXJ0IG1vZGUsIHdvdWxkIGdldCB0aGUgIndhcm5pbmc6CitjaGFuZ2luZyByZWFkb25seSBmaWxlIiBldmVuIHdoZW4gbm90IG1ha2luZyBhIGNoYW5nZS4KKworQSAnKCcgb3IgJ3snIGluc2lkZSBhIHRyYWlsaW5nICIvLyIgY29tbWVudCB3b3VsZCBkaXN0dXJiIEMtaW5kZW50aW5nLgorV2hlbiB1c2luZyB0d28gbGFiZWxzIGJlbG93IGVhY2ggb3RoZXIsIHRoZSBzZWNvbmQgb25lIHdhcyBub3QgaW5kZW50ZWQKK3Byb3Blcmx5LiAgQ29tbWVudHMgY291bGQgbWVzcyB1cCBDLWluZGVudGluZyBpbiBtYW55IHBsYWNlcy4gIChSb2VtZXIpCisKK0NvdWxkIGRlbGV0ZSBvciByZWRlZmluZSBhIGZ1bmN0aW9uIHdoaWxlIGl0IHdhcyBiZWluZyB1c2VkLiAgQ291bGQgY2F1c2UgYQorY3Jhc2guCitJbiBhIGZ1bmN0aW9uIGl0J3MgbG9naWNhbCB0byBwcmVwZW5kICJnOiIgdG8gYSBzeXN0ZW0gdmFyaWFibGUsIGJ1dCB0aGlzCitkaWRuJ3Qgd29yay4gKFJvZW1lcikKKworSGFuZ3VsIGlucHV0OiBCdWZmZXIgd291bGQgb3ZlcmZsb3cgd2hlbiB1c2VyIGlucHV0cyBpbnZhbGlkIGtleSBzZXF1ZW5jZS4KKyhOYW0pCisKK1doZW4gQnVmTG9hZCBvciBCdWZFbnRlciBhdXRvY29tbWFuZHMgY2hhbmdlIHRoZSB0b3BsaW5lIG9mIHRoZSBidWZmZXIgaW4gdGhlCit3aW5kb3csIGl0IHdhcyBvdmVycnVsZWQgYW5kIHRoZSBjdXJzb3IgcHV0IGhhbGZ3YXkgdGhlIHdpbmRvdy4gIE5vdyBvbmx5IHB1dAordGhlIGN1cnNvciBoYWxmd2F5IGlmIHRoZSBhdXRvY29tbWFuZHMgZGlkbid0IGNoYW5nZSB0aGUgdG9wbGluZS4KKworQ2FsbGluZyBleGlzdHMoIiZvcHRpb24iKSBhbHdheXMgcmV0dXJuZWQgMS4gKFJvZW1lcikKKworV2luMzI6IERpZG4ndCB0YWtlIGFjdHVhbGx5IGF2YWlsYWJsZSBtZW1vcnkgaW50byBhY2NvdW50LiAoV2lsbGlhbXMpCisKK1doaXRlIHNwYWNlIGFmdGVyIGFuIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgY29tbWVudCBsZWFkZXIgd2FzIG5vdCByZW1vdmVkCit3aGVuICdhaScgaXMgbm90IHNldCBhbmQgPENSPiBoaXQganVzdCBhZnRlciBpbnNlcnRpbmcgaXQuIChXZWJiKQorCitBIGZldyBtZW51cyBoYWQgZHVwbGljYXRlZCBhY2NlbGVyYXRvcnMuIChSb2VtZXIpCisKK1NwZWxsaW5nIGVycm9ycyBpbiBkb2N1bWVudGF0aW9uLCBxdWl0ZSBhIGZldyAidGhlIHRoZSIuIChSb2VtZXIpCisKK01pc3NpbmcgcHJvdG90eXBlcyBmb3IgTWFjaW50b3NoLiAoS2llbGhvcm4pCisKK1dpbjMyOiBXaGVuIHVzaW5nICdzaGVsbHF1b3RlJyBvciAnc2hlbGx4cXVvdGUnLCB0aGUgIiFzdGFydCBjbWQiIHdhc24ndAorZXhlY3V0ZWQgaW4gYSBkaXNjb25uZWN0ZWQgcHJvY2Vzcy4KKworV2hlbiByZXNpemluZyB0aGUgd2luZG93LCBjYXVzaW5nIGEgbGluZSBiZWZvcmUgdGhlIGN1cnNvciB0byB3cmFwIG9yIHVud3JhcCwKK3RoZSBjdXJzb3Igd2FzIGRpc3BsYXllZCBpbiB0aGUgd3JvbmcgcG9zaXRpb24uCisKK1RoZXJlIHdhcyBxdWl0ZSBhIGJpdCBvZiBkZWFkIGNvZGUgd2hlbiBjb21waWxpbmcgd2l0aCBtaW5pbWFsIGZlYXR1cmVzLgorCitXaGVuIGRvaW5nIGEgIjolcy8vLyIgY29tbWFuZCB0aGF0IG1ha2VzIGxpbmVzIHNob3J0ZXIsIHN1Y2ggdGhhdCBsaW5lcyBhYm92ZQordGhlIGZpbmFsIGN1cnNvciBwb3NpdGlvbiBubyBsb25nZXIgd3JhcCwgdGhlIGN1cnNvciBwb3NpdGlvbiB3YXMgbm90IHVwZGF0ZWQuCisKK2dldF9pZF9saXN0KCkgY291bGQgYWxsb2NhdGUgYW4gYXJyYXkgb25lIHRvbyBzbWFsbCwgd2hlbiBhICJjb250YWlucz0iIGl0ZW0KK2hhcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhIGdyb3VwIG5hbWUgdGhhdCBpcyBhZGRlZCBqdXN0IGFmdGVyIGl0LiAgRS5nLjoKKyJjb250YWlucz1hLipiLGF4YiIuICBHaXZlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGl0LgorCitXaGVuIHlhbmtpbmcgYSBWaXN1YWwgYXJlYSBhbmQgdXNpbmcgdGhlIG1pZGRsZSBtb3VzZSBidXR0b24gLT4gY3Jhc2guICBXaGVuCitjbGlwYm9hcmQgZG9lc24ndCB3b3JrLCBub3cgbWFrZSAiKiBhbHdheXMgdXNlICIiLgorCitXaW4zMjogVXNpbmcgIjpidWYgYVwgYlxmaWxlIiBkaWRuJ3Qgd29yaywgaXQgd2FzIGludGVycHJldGVkIGFzICJhYlxmaWxlIi4KKworVXNpbmcgIjp0cyBpZGVudCIsIHRoZW4gaGl0IDxDUj4sIHdpdGggJ2NtZGhlaWdodCcgc2V0IHRvIDI6IGNvbW1hbmQgbGluZSB3YXMKK25vdCBjbGVhcmVkLCB0aGUgdHNlbGVjdCBwcm9tcHQgd2FzIG9uIHRoZSBsYXN0IGJ1dCBvbmUgbGluZS4KKworbWtzZXNzaW9uIGRpZG4ndCByZXN0b3JlIHRoZSBjdXJzb3IgY29sdW1uIHByb3Blcmx5IHdoZW4gaXQgd2FzIGFmdGVyIGEgdGFiLgorQ291bGQgbm90IGdldCBhbGwgd2luZG93cyBiYWNrIHdoZW4gdXNpbmcgYSBzbWFsbGVyIHRlcm1pbmFsIHNjcmVlbi4gIERpZG4ndAorcmVzdG9yZSBhbGwgd2luZG93cyB3aGVuICJ3aW5zaXplIiB3YXMgbm90IGluICdzZXNzaW9ub3B0aW9ucycuIChXZWJiKQorCitDb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgIjpidWZmZXIiIGRlcGVuZGVkIG9uICdpZ25vcmVjYXNlJyBmb3IgVW5peCwgYnV0Citub3QgZm9yIERPUyBldCBhbC4uICBOb3cgZG9uJ3QgdXNlICdpZ25vcmVjYXNlJywgYnV0IGxldCBpdCBkZXBlbmQgb24gd2hldGhlcgorZmlsZSBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUgb3Igbm90IChsaWtlIHdoZW4gZXhwYW5kaW5nIGZpbGUgbmFtZXMpLgorCitXaW4zMiBHVUk6IChOZWdyaSkKKy0gUmVkcmF3aW5nIHRoZSBiYWNrZ3JvdW5kIGNhdXNlZCBmbGlja2VyIHdoZW4gcmVzaXppbmcgdGhlIHdpbmRvdy4gIFJlbW92ZWQKKyAgX09uRXJhc2VCRygpLiAgUmVtb3ZlZCBDU19IUkVEUkFXIGFuZCBDU19WUkVEUkFXIGZsYWdzIGZyb20gdGhlCisgIHNuZGNsYXNzLnN0eWxlLgorLSBTb21lIHBhcnRzIG9mIHRoZSB3aW5kb3cgd2VyZSBkcmF3biBpbiBncmV5LCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjb2xvciBmcm9tCisgIHRoZSB1c2VyIGNvbG9yIHNjaGVtZS4KKy0gRHJvcHBpbmcgYSBmaWxlIG9uIGd2aW0gZGlkbid0IGFjdGl2YXRlIHRoZSB3aW5kb3cuCistIFdoZW4gdGhlcmUgaXMgbm8gbWVudSAoJ2d1aW9wdGlvbnMnIGV4Y2x1ZGVzICdtJyksIG5ldmVyIHVzZSB0aGUgQUxUIGtleSBmb3IKKyAgaXQuCisKK0dVSTogV2hlbiByZXNpemluZyB0aGUgd2luZG93LCB3b3VsZCBtYWtlIHRoZSB3aW5kb3cgaGVpZ2h0IGEgYml0IHNtYWxsZXIuCitOb3cgcm91bmQgb2ZmIHRvIHRoZSBuZWFyZXN0IGNoYXIgY2VsbCBzaXplLiAoTmVncmkpCisKK0luIFZpIHRoZSAiKSIgYW5kICIoIiBjb21tYW5kcyBkb24ndCBzdG9wIGF0IGEgc2luZ2xlIHNwYWNlIGFmdGVyIGEgZG90LgorQWRkZWQgJ0onIGZsYWcgaW4gJ2Nwb3B0aW9ucycgdG8gbWFrZSB0aGlzIGJlaGF2ZSBWaSBjb21wYXRpYmxlLiAoUm9lbWVyKQorCitXaGVuIHNhdmluZyBhIHNlc3Npb24gd2l0aG91dCBhbnkgYnVmZmVycyBsb2FkZWQsIHRoZXJlIHdvdWxkIGJlIGEgIjpub3JtYWwiCitjb21tYW5kIHdpdGhvdXQgYXJndW1lbnRzIGluIGl0LiAoV2ViYikKKworTWVtb3J5IGxlYWtzIGZpeGVkOiAoTWFkc2VuKQorLSBldmFsLmM6IGZvcmdvdCB0byByZWxlYXNlIGZ1bmMgc3RydWN0dXJlIHdoZW4gZnVuYyBkZWxldGVkCistIGV4X2RvY21kLmM6IGZvcmdvdCB0byByZWxlYXNlIHN0cmluZyBhZnRlciAiPHNmaWxlPiIKKy0gbWlzYzEuYzogbGVhayB3aGVuIGNvbXBsZXRpb24gcGF0dGVybiBoYWQgbm8gbWF0Y2hlcy4KKy0gb3NfdW5peC5jOiBmb3Jnb3QgdG8gcmVsZWFzZSByZWdleHAgYWZ0ZXIgZmlsZSBjb21wbGV0aW9ucworCitDb3VsZCBjcmFzaCB3aGVuIHVzaW5nIGEgYnVmZmVyIHdpdGhvdXQgYSBuYW1lLiAoTWFkc2VuKQorQ291bGQgY3Jhc2ggd2hlbiBkb2luZyBmaWxlIG5hbWUgY29tcGxldGlvbiwgYmVjYXVzZSBvZiBiYWNrc2xhc2hfaGFsdmUoKS4KKyhNYWRzZW4pCisKKyI6QGEiIHdvdWxkIGRvIG1hcHBpbmdzIG9uIHJlZ2lzdGVyIGEsIHdoaWNoIGlzIG5vdCBWaSBjb21wYXRpYmxlLiAoUm9lbWVyKQorCisiOmcvZm9vLiooKS9zL2Zvb2Jhci9fJi9nYyIgd29ya2VkIGZpbmUsIGJ1dCB0aGVuICJuIiBzZWFyY2hlZCBmb3IgImZvb2JhciIKK2FuZCBkaXNwbGF5ZWQgIi9mb28uKigpIi4gKFJvZW1lcikKKworT1MvMjogZ2V0X2NtZF9vdXRwdXQoKSB3YXMgbm90IGluY2x1ZGVkLiAgRGlkbid0IGNoZWNrIGZvciAkVklNLy52aW1yYyBmaWxlLgorCitDb21tYW5kIGxpbmUgY29tcGxldGlvbiBvZiBvcHRpb25zIGRpZG4ndCB3b3JrIGFmdGVyICIrPSIgYW5kICItPSIuCisKK1VuaXggY29uZmlndXJlOiBUZXN0IGZvciBtZW1tb3ZlKCkvYmNvcHkoKS9tZW1jcHkoKSB0cmllZCByZWRlZmluaW5nIHRoZXNlCitmdW5jdGlvbnMsIHdoaWNoIGNvdWxkIGZhaWwgaWYgdGhleSBhcmUgZGVmaW5lZCBhbHJlYWR5LiAgVXNlIG1jaF9tZW1tb3ZlKCkgdG8KK3JlZGVmaW5lLgorCitVbml4OiAiOmxldCBhID0gZXhwYW5kKCJgeHRlcm1gJiIpIiBzdGFydGVkIGFuIHh0ZXJtIGFzeW5jaHJvbm91c2x5LCBidXQKKyI6bGV0IGEgPSBleHBhbmQoImB4dGVybSZgIikiIGdlbmVyYXRlZCBhbiBlcnJvciBtZXNzYWdlLCBiZWNhdXNlIHRoZQorcmVkaXJlY3Rpb24gd2FzIHB1dCBhZnRlciB0aGUgJyYnLgorCitXaW4zMiBHVUk6IERpYWxvZyBidXR0b25zIGNvdWxkIG5vdCBiZSBzZWxlY3RlZCBwcm9wZXJseSB3aXRoIGN1cnNvciBrZXlzLAord2hlbiB0aGUgZGVmYXVsdCBpcyBub3QgdGhlIGZpcnN0IGJ1dHRvbi4gKFdlYmIpCisKK1RoZSAiRmlsZSBoYXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQiICh3aGVuIHJlZ2FpbmluZyBmb2N1cykgY291bGQgbm90CithbHdheXMgYmUgc2Vlbi4gKFdlYmIpCisKK1doZW4gc3RhcnRpbmcgd2l0aCAiZXggZmlsZW5hbWUiLCB0aGUgZmlsZSBtZXNzYWdlIHdhcyBvdmVyd3JpdHRlbiB3aXRoCit0aGUgImVudGVyaW5nIEV4IG1vZGUiIG1lc3NhZ2UuCisKK091dHB1dCBvZiAiOnRzZWxlY3QiIGxpc3RlZCBuYW1lIG9mIGZpbGUgZGlyZWN0bHkgZnJvbSB0aGUgdGFncyBmaWxlLiAgTm93IGl0CitpcyBjb3JyZWN0ZWQgZm9yIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGFncyBmaWxlLgorCitXaGVuICdiYWNrc3BhY2UnIGlzIDAsIGNvdWxkIGJhY2tzcGFjZSBvdmVyIGF1dG9pbmRlbnQuICBOb3cgaXQgaXMgbm8gbG9uZ2VyCithbGxvd2VkIChWaSBjb21wYXRpYmxlKS4KKworSW4gUmVwbGFjZSBtb2RlLCB3aGVuICdub2V4cGFuZHRhYicgYW5kICdzbWFydHRhYicgd2VyZSBzZXQsIGFuZCBpbnNlcnRpbmcKK1RhYnMsIGJhY2tzcGFjaW5nIGRpZG4ndCB3b3JrIGNvcnJlY3RseSBmb3IgVGFicyBpbnNlcnRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlCitsaW5lICh1bmxlc3MgJ3N0cycgd2FzIHNldCB0b28pLiAgQWxzbywgd2hlbiByZXBsYWNpbmcgdGhlIGZpcnN0IG5vbi1ibGFuaworYWZ0ZXIgd2hpY2ggaXMgYSBzcGFjZSwgcm91bmRpbmcgdGhlIGluZGVudCB3YXMgZG9uZSBvbiB0aGUgZmlyc3Qgbm9uLWJsYW5rCitpbnN0ZWFkIG9mIG9uIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KKworV2hlbiAnc3cnIGF0IDQsICd0cycgYXQgOCBhbmQgJ3NtYXJ0dGFiJyBzZXQ6IFdoZW4gYSB0YWIgd2FzIGFwcGVuZGVkIGFmdGVyCitmb3VyIHNwYWNlcyAodGhleSBhcmUgcmVwbGFjZWQgd2l0aCBhIHRhYikgY291bGRuJ3QgYmFja3NwYWNlIG92ZXIgdGhlIHRhYi4KKworSW4gSW5zZXJ0IG1vZGUsIHdpdGggJ2JzJyBzZXQgdG8gMCwgY291bGRuJ3QgYmFja3NwYWNlIHRvIGJlZm9yZSBhdXRvaW5kZW50LAorZXZlbiB3aGVuIGl0IHdhcyByZW1vdmVkIHdpdGggQ1RSTC1ELgorCitXaGVuIHJlcGVhdGluZyBhbiBpbnNlcnQgY29tbWFuZCB3aGVyZSBhIDxCUz4sIDxMZWZ0PiBvciBvdGhlciBrZXkgY2F1c2VzIGFuCitlcnJvciwgd291bGQgZmx1c2ggYnVmZmVycyBhbmQgcmVtYWluIGluIEluc2VydCBtb2RlLiAgTm8gbG9uZ2VyIGZsdXNoCitidWZmZXJzLCBvbmx5IGJlZXAgYW5kIGNvbnRpbnVlIHdpdGggdGhlIGluc2VydCBjb21tYW5kLgorCitEb3MgYW5kIFdpbjMyIGNvbnNvbGU6IFNldHRpbmcgdF9tZSBkaWRuJ3Qgd29yayB0byBnZXQgYW5vdGhlciBjb2xvci4gIE1hZGUKK3RoaXMgd29ya3MgYmFja3dhcmRzIGNvbXBhdGlibGUuCisKK0ZvciB0dXJraXNoIChMQU5HID0gInRyIikgdXBwZXJjYXNlICdpJyBpcyBub3QgYW4gJ0knLiAgVXNlIEFTQ0lJIHVwcGVyY2FzZQordHJhbnNsYXRpb24gaW4gdmltX3N0cnVwKCkgdG8gYXZvaWQgbGFuZ3VhZ2UgcHJvYmxlbXMuIChLb211cikKKworVW5peDogVXNlIHVzbGVlcCgpIG9yIG5hbm9zbGVlcCgpIGZvciBtY2hfZGVsYXkoKSB3aGVuIGF2YWlsYWJsZS4gIEhvcGVmdWxseQordGhpcyBhdm9pZHMgYSBoYW5ndXAgaW4gc2VsZWN0KDAsIC4uKSBmb3IgU29sYXJpcyAyLjYuCisKK1ZpbSB3b3VsZCBjcmFzaCB3aGVuIHVzaW5nIGEgc2NyaXB0IGZpbGUgd2l0aCAnbGV0ICZzcCA9ICJ8IHRlZSInLCBzdGFydGluZwordmltIHdpdGggInZpbSAtdSB0ZXN0IiwgdGhlbiBkb2luZyAiOnNldCBzcD0iLiAgVGhlIFBfV0FTX1NFVCBmbGFnIHdhc24ndCBzZXQKK2ZvciBhIHN0cmluZyBvcHRpb24sIGNvdWxkIGNhdXNlIHByb2JsZW1zIHdpdGggYW55IHN0cmluZyBvcHRpb24uCisKK1doZW4gdXNpbmcgImNtZCB8IHZpbSAtIiwgc3RkaW4gaXMgbm90IGEgdGVybWluYWwuICBUaGlzIGdhdmUgcHJvYmxlbXMgd2l0aAorR1BNIChMaW51eCBjb25zb2xlIG1vdXNlKSBhbmQgd2hlbiBleGVjdXRpbmcgZXh0ZXJuYWwgY29tbWFuZHMuICBOb3cgY2xvc2UKK3N0ZGluIGFuZCByZS1vcGVuIGl0IGFzIGEgY29weSBvZiBzdGRlcnIuCisKK1N5bnRheCBoaWdobGlnaHRpbmc6IEEgIm5leHRncm91cCIgaXRlbSB3YXMgbm90IHByb3Blcmx5IHN0b3JlZCBpbiB0aGUgc3RhdGUKK2xpc3QuICBUaGlzIGNhdXNlZCBtaXNzaW5nIG9mIG5leHQgZ3JvdXBzIHdoZW4gbm90IHJlZHJhd2luZyBmcm9tIHN0YXJ0IHRvCitlbmQsIGJ1dCBzdGFydGluZyBoYWxmd2F5LgorCitEaWRuJ3QgY2hlY2sgZm9yIHZhbGlkIHZhbHVlcyBvZiAndHR5bW91c2UnLgorCitXaGVuIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kIGZyb20gdGhlIEdVSSwgd2FpdGluZyBmb3IgdGhlIGNoaWxkIHRvCit0ZXJtaW5hdGUgbWlnaHQgbm90IHdvcmssIGNhdXNpbmcgYSBoYW5nLiAoUGFybWVsYW4pCisKKyJtYWtlIHVuaW5zdGFsbCIgZGlkbid0IGRlbGV0ZSB0aGUgdmltcmNfZXhhbXBsZS52aW0gYW5kIGd2aW1yY19leGFtcGxlLnZpbQorZmlsZXMgYW5kIHRoZSB2aW10dXRvci4KKworV2luMzI6ICJleHBhbmQoIiU6cDpoIikiIHdpdGggbm8gYnVmZmVyIG5hbWUgcmVtb3ZlZCB0aGUgZGlyZWN0b3J5IG5hbWUuCisiZm5hbWVtb2RpZnkoIiIsICI6cCIpIiBkaWQgbm90IGFkZCBhIHRyYWlsaW5nIHNsYXNoLCBmbmFtZV9jYXNlKCkgcmVtb3ZlZCBpdC4KKworRml4ZWQ6IFdoZW4gJ2hsc2VhcmNoJyB3YXMgc2V0IGFuZCB0aGUgJ2MnIGZsYWcgd2FzIG5vdCBpbiAnY3BvcHRpb25zJzoKK2hpZ2hsaWdodGluZyB3YXMgbm90IGNvcnJlY3QuICBOb3cgb3ZlcmxhcHBpbmcgbWF0Y2hlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCisKK0F0aGVuYSwgTW90aWYgYW5kIEdUSyBHVUk6IFdoZW4gc3RhcnRlZCB3aXRob3V0IGZvY3VzLCBjdXJzb3Igd2FzIHNob3duIGFzIGlmCit3aXRoIGZvY3VzLgorCitEb24ndCBpbmNsdWRlICdzaGVsbHBpcGUnIHdoZW4gY29tcGlsZWQgd2l0aG91dCBxdWlja2ZpeCwgaXQncyBub3QgdXNlZC4KK0Rvbid0IGluY2x1ZGUgJ2RpY3Rpb25hcnknIG9wdGlvbiB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtpbnNlcnRfZXhwYW5kCitmZWF0dXJlLgorT25seSBpbmNsdWRlIHRoZSAnc2hlbGx0eXBlJyBvcHRpb24gZm9yIHRoZSBBbWlnYS4KKworV2hlbiBtYWtpbmcgYSBjaGFuZ2UgdG8gYSBsaW5lLCB3aXRoICdobHNlYXJjaCcgb24sIGNhdXNpbmcgaXQgdG8gd3JhcCwgd2hpbGUKK2V4ZWN1dGluZyBhIHJlZ2lzdGVyLCB0aGUgc2NyZWVuIHdvdWxkIG5vdCBiZSB1cGRhdGVkIGNvcnJlY3RseS4gIFRoaXMgd2FzIGEKK2dlbmVyaWMgcHJvYmxlbSBpbiB1cGRhdGVfc2NyZWVubGluZSgpIGJlaW5nIGNhbGxlZCB3aGlsZSBtdXN0X3JlZHJhdyBpcworVkFMSUQuCisKK1VzaW5nICI6YmRlbGV0ZSIgaW4gYSBCdWZVbmxvYWQgYXV0b2NvbW1hbmQgY291bGQgY2F1c2UgYSBjcmFzaC4gIFRoZSB3aW5kb3cKK2hlaWdodCB3YXMgYWRkZWQgdG8gYW5vdGhlciB3aW5kb3cgdHdpY2UgaW4gY2xvc2Vfd2luZG93KCkuCisKK1dpbjMyIEdVSTogV2hlbiByZW1vdmluZyBhIG1lbnUgaXRlbSwgdGhlIHRlYXJvZmYgd2Fzbid0IHVwZGF0ZWQuIChOZWdyaSkKKworU29tZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZW1vdmVkLiAgQWxsb2NhdGluZyBtZW1vcnkgd2FzIG5vdCBlZmZpY2llbnQuCitGb3IgV2luMzIgY2hlY2tpbmcgZm9yIGF2YWlsYWJsZSBtZW1vcnkgd2FzIHNsb3csIGRvbid0IGNoZWNrIGl0IGV2ZXJ5IHRpbWUKK25vdy4gIE9uIE5UIG9idGFpbmluZyB0aGUgdXNlciBuYW1lIHRha2VzIGEgbG9uZyB0aW1lLCBjYWNoZSB0aGUgcmVzdWx0IChmb3IKK2FsbCBzeXN0ZW1zKS4KKworZm5hbWVtb2RpZnkoKSB3aXRoIGFuIGFyZ3VtZW50ICI6fjouIiBvciAiOi46fiIgZGlkbid0IHdvcmsgcHJvcGVybHkuCisKK1doZW4gZWRpdGluZyBhIG5ldyBmaWxlIGFuZCBleGl0aW5nLCB0aGUgbWFya3MgZm9yIHRoZSBidWZmZXIgd2VyZSBub3Qgc2F2ZWQKK2luIHRoZSB2aW1pbmZvIGZpbGUuCisKKyI6Y29uZmlybSBvbmx5IiBkaWRuJ3QgcHV0IHVwIGEgZGlhbG9nLgorCitUaGVzZSB0ZXh0IG9iamVjdHMgZGlkbid0IHdvcmsgd2hlbiAnc2VsZWN0aW9uJyB3YXMgImV4Y2x1c2l2ZSI6IHZhKCB2aSggdmF7Cit2aXsgdmE8IHZpPCB2aVsgdmFbLgorCitUaGUgZGlhbG9nIGZvciB3cml0aW5nIGEgcmVhZG9ubHkgZmlsZSBkaWRuJ3QgaGF2ZSBhIHZhbGlkIGRlZmF1bHQuIChOZWdyaSkKKworVGhlIGxpbmUgbnVtYmVyIHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzIHdoZW4gc291cmNpbmcgYSBmaWxlIHdhcyByZXNldCB3aGVuCittb2RlbGluZXMgd2VyZSBpbnNwZWN0ZWQuICBJdCB3YXMgd3Jvbmcgd2hlbiBleGVjdXRpbmcgYSBmdW5jdGlvbi4KKworVGhlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgZm9yIGFuIGVycm9yIG1lc3NhZ2Ugd2Fzbid0IGRpc3BsYXllZCB3aGVuIGl0Cit3YXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBsYXN0IGVycm9yLCBldmVuIHdoZW4gdGhpcyB3YXMgbG9uZyBhZ28uICBOb3cgcmVzZXQKK3RoZSBuYW1lL2xudW0gYWZ0ZXIgYSBoaXQtZW50ZXIgcHJvbXB0LgorCitJbiBhIHNlc3Npb24gZmlsZSwgYSAiJSIgaW4gYSBmaWxlIG5hbWUgY2F1c2VkIHRyb3VibGUsIGJlY2F1c2UgZnByaW50ZigpIHdhcwordXNlZCB0byB3cml0ZSBpdCB0byB0aGUgZmlsZS4KKworV2hlbiBza2lwcGluZyBzdGF0ZW1lbnRzLCBhIG1hcmsgaW4gYW4gYWRkcmVzcyB3YXNuJ3Qgc2tpcHBlZCBjb3JyZWN0bHk6Cisia2F8aWYgMHwnYWR8ZWxzZXxlY2hvfGVuZGlmIi4gKFJvZW1lcikKKworIjp3YWxsIiBjb3VsZCBvdmVyd3JpdGUgYSBub3QtZWRpdGVkIGZpbGUgd2l0aG91dCBhc2tpbmcuCisKK0dVSTogV2hlbiAkRElTUExBWSB3YXMgbm90IHNldCBvciBzdGFydGluZyB0aGUgR1VJIGZhaWxlZCBpbiBhbm90aGVyIHdheSwgdGhlCitjb25zb2xlIG1vZGUgdGhlbiBzdGFydGVkIHdpdGggd3JvbmcgY29sb3JzIGFuZCBza2lwcGVkIGluaXRpYWxpemF0aW9ucy4gIE5vdworZG8gYW4gZWFybHkgY2hlY2sgaWYgdGhlIEdVSSBjYW4gYmUgc3RhcnRlZC4gIERvbid0IHNvdXJjZSB0aGUgbWVudS52aW0gb3IKK2d2aW1yYyB3aGVuIGl0IHdpbGwgbm90LiAgQWxzbyBkbyBub3JtYWwgdGVybWluYWwgaW5pdGlhbGl6YXRpb25zIGlmIHRoZSBHVUkKK21pZ2h0IG5vdCBzdGFydC4KKworV2hlbiB1c2luZyBhIEJ1ZkVudGVyIGF1dG9jb21tYW5kIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYW5kIHNjcm9sbCB0aGUKK3dpbmRvdywgdGhlIGN1cnNvciB3YXMgYWx3YXlzIHB1dCBhdCB0aGUgbGFzdCB1c2VkIGxpbmUgYW5kIGhhbGZ3YXkgdGhlIHdpbmRvdworYW55aG93LgorCitXaGVuICd3aWxkbW9kZScgd2FzIHNldCB0byAibG9uZ2VzdCxsaXN0OmZ1bGwiLCAiOmUgKi5jPFRhYj48VGFiPiIgZGlkbid0IGxpc3QKK3RoZSBtYXRjaGVzLiAgQWxzbyBhdm9pZCB0aGF0IGxpc3RpbmcgYWZ0ZXIgYSAibG9uZ2VzdCIgbGlzdHMgdGhlIHdyb25nCittYXRjaGVzIHdoZW4gdGhlIGZpcnN0IGV4cGFuc2lvbiBjaGFuZ2VkIHRoZSBzdHJpbmcgaW4gZnJvbnQgb2YgdGhlIGN1cnNvci4KKworV2hlbiB1c2luZyAiOmluc2VydCIsICI6YXBwZW5kIiBvciAiOmNoYW5nZSIgaW5zaWRlIGEgd2hpbGUgbG9vcCwgd2FzIG5vdCBhYmxlCit0byBicmVhayBvdXQgb2YgaXQgd2l0aCBhIENUUkwtQy4KKworV2luMzI6ICI6ZSAuIiB0b29rIGFuIGF3ZnVsIGxvbmcgdGltZSBiZWZvcmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHVzZWQgaW4KKyJDOlwiLiAgV2FzIGNhdXNlZCBieSBhZGRpbmcgYW5vdGhlciBiYWNrc2xhc2ggYW5kIHRoZW4gdHJ5aW5nIHRvIGdldCB0aGUgZnVsbAorbmFtZSBmb3IgIkM6XFwiLgorCisiOndpbnBvcyAtMTAgMTAwIiB3YXMgd29ya2luZyBsaWtlICI6d2lucG9zIC0xMCAtMTAiLCBiZWNhdXNlIGEgcG9pbnRlciB3YXMKK25vdCBhZHZhbmNlZCBwYXN0IHRoZSAnLScgc2lnbi4KKworV2hlbiBvYnRhaW5pbmcgdGhlIHZhbHVlIG9mIGEgaGlkZGVuIG9wdGlvbiwgd291bGQgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLiAgTm93CitqdXN0IHVzZSBhIHplcm8gdmFsdWUuCisKK09TLzI6IFdhcyB1c2luZyBhcmd2WzBdLCBldmVuIHRob3VnaCBpdCB3YXMgbm90IGEgdXNlZnVsIG5hbWUuICBJdCBjb3VsZCBiZQoranVzdCAidmltIiwgZm91bmQgaW4gdGhlIHNlYXJjaCBwYXRoLgorCitYdGVybTogIjpzZXQgY29sdW1ucz03OCIgZGlkbid0IHJlZHJhdyBwcm9wZXJseSAod2hlbiBsaW5lcyB3cmFwL3Vud3JhcCkgdW50aWwKK2FmdGVyIGEgZGVsYXkgb2YgJ3VwZGF0ZXRpbWUnLiAgRGlkbid0IGNoZWNrIGZvciB0aGUgc2l6ZS1jaGFuZ2VkIHNpZ25hbC4KKworJ3Njcm9sbGJpbmQnIGRpZG4ndCB3b3JrIGluIEluc2VydCBtb2RlLgorSG9yaXpvbnRhbCBzY3JvbGxiaW5kaW5nIGRpZG4ndCBhbHdheXMgd29yayBmb3IgIjAiIGFuZCAiJCIgY29tbWFuZHMgKGUuZy4sCit3aGVuICdzaG93Y21kJyB3YXMgb2ZmKS4KKworV2hlbiBjb21waWxlZCB3aXRoIG1pbmltYWwgZmVhdHVyZXMgYnV0IHdpdGggR1VJLCBzd2l0Y2hpbmcgb24gdGhlIG1vdXNlIGluIGFuCit4dGVybSBjYXVzZWQgZ2FyYmFnZSwgYmVjYXVzZSB0aGUgbW91c2UgY29kZXMgd2VyZSBub3QgcmVjb2duaXplZC4gIERvbid0CitlbmFibGUgdGhlIG1vdXNlIHdoZW4gaXQgY2FuJ3QgYmUgcmVjb2duaXplZC4gIEluIHRoZSBHVUkgaXQgYWxzbyBkaWRuJ3Qgd29yaywKK3RoZSBhcmd1bWVudHMgdG8gdGhlIG1vdXNlIGNvZGUgd2VyZSBub3QgaW50ZXJwcmV0ZWQuCisKK1doZW4gJ3Nob3dicmVhaycgdXNlZCwgaW4gSW5zZXJ0IG1vZGUsIHdoZW4gdGhlIGN1cnNvciBpcyBqdXN0IGFmdGVyIHRoZSBsYXN0CitjaGFyYWN0ZXIgaW4gdGhlIGxpbmUsIHdoaWNoIGlzIGFsc28gdGhlIGluIHRoZSByaWdodG1vc3QgY29sdW1uLCB0aGUgY3Vyc29yCitwb3NpdGlvbiB3b3VsZCBiZSBsaWtlIHRoZSAnc2hvd2JyZWFrJyBzdHJpbmcgaXMgc2hvd24sIGJ1dCBpdCB3YXNuJ3QuCisKK0F1dG9jb21tYW5kcyBjb3VsZCBtb3ZlIHRoZSBjdXJzb3IgaW4gYSBuZXcgZmlsZSwgc28gdGhhdCBDVFJMLVcgaSBkaWRuJ3Qgc2hvdwordGhlIHJpZ2h0IGxpbmUuICBTYW1lIGZvciB3aGVuIHVzaW5nIGEgZmlsZW1hcmsgdG8ganVtcCB0byBhbm90aGVyIGZpbGUuCisKK1doZW4gcmVkZWZpbmluZyB0aGUgYXJndW1lbnQgbGlzdCwgdGhlIHRpdGxlIHVzZWQgZm9yIG90aGVyIHdpbmRvd3MgY291bGQgYmUKK3Nob3dpbmcgdGhlIHdyb25nIGluZm8gYWJvdXQgdGhlIHBvc2l0aW9uIGluIHRoZSBhcmd1bWVudCBsaXN0LiAgQWxzbyB1cGRhdGUKK3RoaXMgZm9yIGEgIjpzcGxpdCIgY29tbWFuZCB3aXRob3V0IGFyZ3VtZW50cy4KKworV2hlbiBlZGl0aW5nIGZpbGUgOTcgb2YgMTMsICI6TmV4dCIgZGlkbid0IHdvcmsuICBOb3cgaXQgZ29lcyB0byB0aGUgbGFzdAorZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdC4KKworSW5zZXJ0IG1vZGUgY29tcGxldGlvbiAoZm9yIGRpY3Rpb25hcmllcyBvciBpbmNsdWRlZCBmaWxlcykgY291bGQgbm90IGJlCitpbnRlcnJ1cHRlZCBieSB0eXBpbmcgYW4gPEVzYz4uICBDb3VsZCBnZXQgaGl0LWVudGVyIHByb21wdCBhZnRlciBsaW5lCitjb21wbGV0aW9uLCBvciB3aGVuZXZlciB0aGUgaW5mb3JtYXRpdmUgbWVzc2FnZSB3b3VsZCBnZXQgdG9vIGxvbmcuCisKK1doZW4gdXNpbmcgdGhlICI6ZWRpdCIgY29tbWFuZCB0byByZS1lZGl0IHRoZSBzYW1lIGZpbGUsIGFuIGF1dG9jb21tYW5kIHRvCitqdW1wIHRvIHRoZSBsYXN0IGN1cnNvciBwb3NpdGlvbiBjYXVzZWQgdGhlIGN1cnNvciB0byBtb3ZlLiAgTm93IHNldCB0aGUgbGFzdAordXNlZCBjdXJzb3IgcG9zaXRpb24gdG8gYXZvaWQgdGhpcy4KKworV2hlbiAnY29tbWVudHMnIGhhcyBhIHBhcnQgdGhhdCBzdGFydHMgd2l0aCB3aGl0ZSBzcGFjZSwgZm9ybWF0dGluZyB0aGUKK2NvbW1lbnQgZGlkbid0IHdvcmsuCisKK0F0IHRoZSAiOnRzZWxlY3QiIHByb21wdCBOb3JtYWwgbW9kZSBtYXBwaW5ncyB3ZXJlIHVzZWQuICBUaGF0IGhhcyBiZWVuCitkaXNhYmxlZC4KKworV2hlbiAnc2VsZWN0aW9uJyBpcyBub3QgIm9sZCIsIHNvbWUgY29tbWFuZHMgc3RpbGwgZGlkbid0IGFsbG93IHRoZSBjdXJzb3IKK3Bhc3QgdGhlIGVuZC1vZi1saW5lIGluIFZpc3VhbCBtb2RlLgorCitBdGhlbmE6IFdoZW4gYSBtZW51IHdhcyBkZWxldGVkLCBpdCB3b3VsZCBhcHBlYXIgYWdhaW4gKGJ1dCBub3QgZnVuY3Rpb25hbCkKK3doZW4gYWRkaW5nIGFub3RoZXIgbWVudS4gIE5vdyB0aGV5IGRvbid0IHJlYXBwZWFyIGFueW1vcmUgKGFsdGhvdWdoIHRoZXkgYXJlCitub3QgcmVhbGx5IGRlbGV0ZWQgZWl0aGVyKS4KKworQm9ybGFuZCBDKysgNC54IGhhZCBhbiBvcHRpbWl6ZXIgcHJvYmxlbSBpbiBmaWxsX2JyZWFrYXRfZmxhZ3MoKS4gKE5lZ3JpKQorCisiemUiIGRpZG4ndCB3b3JrIHdoZW4gJ251bWJlcicgd2FzIG9uLiAoRGF2aXMpCisKK1dpbjMyIEdVSTogSW50ZWxsaW1vdXNlIGNvZGUgZGlkbid0IHdvcmsgcHJvcGVybHkgb24gV2luZG93cyA5OC4gKFJvYmluc29uKQorCitBIGZldyBmaWxlcyB3ZXJlIGluY2x1ZGluZyBwcm90by5oIGEgc2Vjb25kIHRpbWUsIGFmdGVyIHZpbS5oIGhhZCBhbHJlYWR5IGRvbmUKK3RoYXQsIHdoaWNoIGNvdWxkIGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIHZpbV9yZWFsbG9jKCkgbWFjcm8uCisKK1dpbjMyIGNvbnNvbGU6IDxNLXg+IG9yIEFMVC14IHdhcyBub3QgcmVjb2duaXplZC4gIEFsc28ga2V5cGFkICcrJywgJy0nIGFuZAorJyonLiAoTmVncmkpCitNUy1ET1M6IDxNLXg+IGRpZG4ndCB3b3JrLCBwcm9kdWNlZCBhIHR3by1ieXRlIGNvZGUuICBOb3cgdGhlIGFscGhhYmV0aWMgYW5kCitudW1iZXIga2V5cyB3b3JrLiAoTmVncmkpCisKK1doZW4gZmluZGluZyBhIGxvdCBvZiBtYXRjaGVzIGZvciBhIHRhZyBjb21wbGV0aW9uLCB0aGUgY2hlY2sgZm9yIGF2b2lkaW5nCitkb3VibGUgbWF0Y2hlcyBjb3VsZCB0YWtlIGEgbG90IG9mIHRpbWUuICBBZGQgYSBsaW5lX2JyZWFrY2hlY2soKSB0byBiZSBhYmxlCit0byBpbnRlcnJ1cHQgdGhpcy4gKERlc2hwYW5kZSkKKworV2hlbiB0aGUgY29tbWFuZCBsaW5lIHdhcyBnZXR0aW5nIGxvbmdlciB0aGFuIHRoZSBzY3JlZW4sIHRoZSBtb3JlLXByb21wdAord291bGQgYmUgZ2l2ZW4gcmVndWxhcmx5LCBhbmQgdGhlIGN1cnNvciBwb3NpdGlvbiB3b3VsZCBiZSB3cm9uZy4gIE5vdyBvbmx5CitzaG93IHRoZSBwYXJ0IG9mIHRoZSBjb21tYW5kIGxpbmUgdGhhdCBmaXRzIG9uIHRoZSBzY3JlZW4gYW5kIGZvcmNlIHRoZSBjdXJzb3IKK3RvIGJlIHBvc2l0aW9uZWQgb24gdGhlIHZpc2libGUgcGFydC4gIFRoZXJlIGNhbiBiZSB0ZXh0IGFmdGVyIHRoZSBjdXJzb3IKK3doaWNoIGlzbid0IGVkaXRhYmxlLgorCitBdCB0aGUgbW9yZSBwcm9tcHQgYW5kIHdpdGggdGhlIGNvbnNvbGUgZGlhbG9nLCBhIGN1cnNvciBrZXkgd2FzIGludGVycHJldGVkCithcyA8RXNjPiBhbmQgT0EuICBOb3cgcmVjb2duaXplIHNwZWNpYWwga2V5cyBpbiBnZXRfa2V5c3Ryb2tlKCkuICBJZ25vcmUgbW91c2UKK2FuZCBzY3JvbGxiYXIgZXZlbnRzLgorCitXaGVuIHR5cGluZyBhIEJTIGFmdGVyIGluc2VydGluZyBhIG1pZGRsZSBjb21tZW50IGxlYWRlciwgdHlwaW5nIHRoZSBsYXN0IGNoYXIKK29mIHRoZSBlbmQgY29tbWVudCBsZWFkZXIgc3RpbGwgY2hhbmdlZCBpdCBpbnRvIHRoZSBlbmQgY29tbWVudCBsZWFkZXIuIChXZWJiKQorCitXaGVuIGEgZmlsZSBzeXN0ZW0gaXMgZnVsbCwgd3JpdGluZyB0byBhIHN3YXAgZmlsZSBmYWlsZWQuICBOb3cgZmlyc3QgdHJ5IHRvCit3cml0ZSBvbmUgYmxvY2sgdG8gdGhlIGZpbGUuICBUcnkgbmV4dCBlbnRyeSBpbiAnZGlyJyBpZiBpdCBmYWlscy4KKworV2hlbiAifiIgaXMgaW4gJ3doaWNod3JhcCcsIGRvaW5nICJ+IiBvbiBsYXN0IGNoYXIgb2YgYSBsaW5lIGRpZG4ndCB1cGRhdGUgdGhlCitkaXNwbGF5LgorCitVbml4OiBFeHBhbmRpbmcgd2lsZGNhcmRzIGZvciAiOmZpbGUge1xcfSIgZGlkbid0IHdvcmssIGJlY2F1c2UgIlx9IiB3YXMKK3RyYW5zbGF0ZWQgdG8gIn0iIGJlZm9yZSB0aGUgc2hlbGwgZ290IGl0LiAgTm93IGRvbid0IHJlbW92ZSBiYWNrc2xhc2hlcyB3aGVuCit3aWxkY2FyZHMgYXJlIGdvaW5nIHRvIGJlIGV4cGFuZGVkLgorCitVbml4OiAiOmUgL3RtcC8kdWlkIiBkaWRuJ3Qgd29yay4gIFdoZW4gZXhwYW5kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBhCitmaWxlIG5hbWUgZG9lc24ndCB3b3JrLCB1c2UgdGhlIHNoZWxsIHRvIGV4cGFuZCB0aGUgZmlsZSBuYW1lLiAiOmUgL3RtcC8kdHR5Igorc3RpbGwgZG9lc24ndCB3b3JrIHRob3VnaC4KKworIm1ha2UgdGVzdCIgZGlkbid0IGFsd2F5cyB3b3JrIG9uIERPUy9XaW5kb3dzIGZvciB0ZXN0MzAsIGJlY2F1c2UgaXQgZGVwZW5kZWQKK29uIHRoZSBleHRlcm5hbCAiZWNobyIgY29tbWFuZC4KKworVGhlIGxpbmsuc2ggc2NyaXB0IHVzZWQgIm1ha2UiIGluc3RlYWQgb2YgJE1BS0UgZnJvbSB0aGUgTWFrZWZpbGUuICBDYXVzZWQKK3Byb2JsZW1zIGZvciBnZW5lcmF0aW5nIHBhdGhkZWYuYyB3aGVuICJtYWtlIiBkb2Vzbid0IHdvcmsgcHJvcGVybHkuCisKK09uIHZlcnNpb25zIHRoYXQgY2FuIGRvIGNvbnNvbGUgYW5kIEdVSTogSW4gdGhlIGNvbnNvbGUgYSB0eXBlZCBDU0kgY29kZSBjb3VsZAorY2F1c2UgdHJvdWJsZS4KKworVGhlIHBhdHRlcm5zIGluIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBkaWRuJ3QgaWdub3JlIHRoZSAnbCcgZmxhZyBpbgorJ2Nwb3B0aW9ucycuICBUaGlzIGJyb2tlIHRoZSB3b3JraW5nIG9mIDxDUj4gaW4gdGhlIG9wdGlvbnMgd2luZG93LgorCitXaGVuICdobHMnIG9mZiBhbmQgJ2FpJyBvbiwgIk88RXNjPiIgZGlkIHJlbW92ZSB0aGUgaW5kZW50LCBidXQgaXQgd2FzIHN0aWxsCitoaWdobGlnaHRlZCByZWQgZm9yIHRyYWlsaW5nIHNwYWNlLgorCitXaW4zMiBHVUk6IERyb3BwaW5nIGFuIGVuY3J5cHRlZCBmaWxlIG9uIGEgcnVubmluZyBndmltIGRpZG4ndCB3b3JrIHJpZ2h0LiAgVmltCit3b3VsZCBsb29wIHdoaWxlIG91dHB1dHRpbmcgIioiIGNoYXJhY3RlcnMuICB2Z2V0YygpIHdhcyBjYWxsZWQgcmVjdXJzaXZlbHksCit0aHVzIGl0IHJldHVybnMgTlVMLiAgQWRkZWQgc2FmZV92Z2V0YygpLCB3aGljaCByZWFkcyBpbnB1dCBkaXJlY3RseSBmcm9tIHRoZQordXNlciBpbiB0aGlzIHNpdHVhdGlvbi4KKworV2hpbGUgcmVhZGluZyB0ZXh0IGZyb20gc3RkaW4sIG9ubHkgYW4gZW1wdHkgc2NyZWVuIHdhcyBzaG93bi4gIE5vdyBzaG93IHRoYXQKK1ZpbSBpcyByZWFkaW5nIGZyb20gc3RkaW4uCisKK1RoZSBjdXJzb3Igc2hhcGUgd2Fzbid0IHNldCBwcm9wZXJseSB3aGVuIHJldHVybmluZyB0byBJbnNlcnQgbW9kZSwgYWZ0ZXIKK3VzaW5nIGEgQ1RSTC1PIC9hc2RmIGNvbW1hbmQgd2hpY2ggZmFpbHMuICBJdCB3b3VsZCBiZSBPSyBhZnRlciBhIGZldyBzZWNvbmRzLgorTm93IGl0J3MgT0sgcmlnaHQgYXdheS4KKworVGhlICdpc2ZuYW1lJyBkZWZhdWx0IGZvciBET1MvV2luZG93cyBkaWRuJ3QgaW5jbHVkZSB0aGUgJ0AnIGNoYXJhY3Rlci4gIEZpbGUKK25hbWVzIHRoYXQgY29udGFpbmVkICJkaXJcQGZpbGUiIGNvdWxkIG5vdCBiZSBlZGl0ZWQuCisKK1dpbjMyIGNvbnNvbGU6IDxDLVMtTGVmdD4gY291bGQgY2F1c2UgYSBjcmFzaCB3aGVuIGNvbXBpbGVkIHdpdGggQm9ybGFuZCBvcgorZWdjcy4gKEFhcm9uKQorCitVbml4IGFuZCBWTVM6ICIjaWYgSEFWRV9ESVJFTlRfSCIgY2F1c2VkIHByb2JsZW1zIGZvciBzb21lIGNvbXBpbGVycy4gIFVzZQorIiNpZmRlZiBIQVZFX0RJUkVOVF9IIiBpbnN0ZWFkLiAoSm9uZXMpCisKK1doZW4gYSBtYXRjaGluZyB0YWcgaXMgaW4gdGhlIGN1cnJlbnQgZmlsZSBidXQgaGFzIGEgc2VhcmNoIHBhdHRlcm4gdGhhdAorZG9lc24ndCBtYXRjaCwgdGhlIGN1cnNvciB3b3VsZCBqdW1wIHRvIHRoZSBmaXJzdCBsaW5lLgorCitVbml4OiBEZXBlbmRlbmNpZXMgZm9yIHB0eS5jIHdlcmUgbm90IGluY2x1ZGVkIGluIE1ha2VmaWxlLiAgRGVwZW5kZW5jeSBvZgorY3RhZ3MvY29uZmlnLmggd2FzIG5vdCBpbmNsdWRlZCAob25seSBtYXR0ZXJzIGZvciBwYXJhbGxlbCBtYWtlKS4KKworUmVtb3ZlZCBhIGZldyBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyAocG90ZW50aWFsIGNyYXNoZXMpLiAgSW4gZG9fY2FsbCgpCitjYWxsaW5nIGNsZWFyX3ZhcigpIHdoZW4gbm90IGV2YWx1YXRpbmcuICBJbiB3aW4zMl9leHBhbmRwYXRoKCkgYW5kCitkb3NfZXhwYW5kcGF0aCgpIGNhbGxpbmcgYmFja3NsYXNoX2hhbHZlKCkgcGFzdCB0aGUgZW5kIG9mIGEgZmlsZSBuYW1lLgorCitSZW1vdmVkIG1lbW9yeSBsZWFrczogU2V0X3ZpbV92YXJfc3RyaW5nKCkgbmV2ZXIgZnJlZWQgdGhlIHZhbHVlLiAgVGhlCituZXh0X2xpc3QgZm9yIGEgc3ludGF4IGtleXdvcmQgd2FzIG5ldmVyIGZyZWVkLgorCitPbiBub24tVW5peCBzeXN0ZW1zLCB1c2luZyBhIGZpbGUgbmFtZSB3aXRoIHdpbGRjYXJkcyB3aXRob3V0IGEgbWF0Y2ggd291bGQKK3NpbGVudGx5IGZhaWwuICBFLmcuLCAiOmUgKi5zaCIuICBOb3cgZ2l2ZSBhICJObyBtYXRjaCIgZXJyb3IgbWVzc2FnZS4KKworVGhlIGxpZmUvbGlmZS5tYWMsIHVybS91cm0ubWFjIGFuZCBoYW5vaS9oYW5vaS5tYWMgZmlsZXMgd2VyZSBub3QgcmVjb2duaXplZAorYXMgVmltIHNjcmlwdHMuICBSZW5hbWVkIHRoZW0gdG8gKi52aW0uCisKK1tOb3RlOiBzb21lIG51bWJlcmVkIHBhdGNoZXMgYXJlIG5vdCByZWxldmFudCB3aGVuIHVwZ3JhZGluZyBmcm9tIHZlcnNpb24gNS4zLAordGhleSBoYXZlIGJlZW4gcmVtb3ZlZF0KKworUGF0Y2ggNS40bS4xCitQcm9ibGVtOiAgICBXaGVuIGVkaXRpbmcgYSBmaWxlIHdpdGggYSBsb25nIG5hbWUsIHdvdWxkIGdldCB0aGUgaGl0LWVudGVyCisJICAgIHByb21wdCwgZXZlbiB0aG91Z2ggYWxsIHNldHRpbmdzIGFyZSBzdWNoIHRoYXQgdGhlIG5hbWUgc2hvdWxkIGJlCisJICAgIHRydW5jYXRlZCB0byBhdm9pZCB0aGF0LiAgZmlsZW1lc3MoKSB3YXMgcHJpbnRpbmcgdGhlIGZpbGUgbmFtZQorCSAgICB3aXRob3V0IHRydW5jYXRpbmcgaXQuCitTb2x1dGlvbjogICBUcnVuY2F0ZSB0aGUgbWVzc2FnZSBpbiBmaWxlbWVzcygpLiAgVXNlIHRoZSBzYW1lIGNvZGUgYXMgZm9yCisJICAgIG1zZ190cnVuY19hdHRyKCksIHdoaWNoIGlzIG1vdmVkIHRvIHRoZSBuZXcgZnVuY3Rpb24KKwkgICAgbXNnX21heV90cnVuYygpLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvcHJvdG8vbWVzc2FnZS5wcm8sIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjRtLjMKK1Byb2JsZW06ICAgIFRoZSBNb3RpZiBsaWJyYXJpZXMgd2VyZSBub3QgZm91bmQgYnkgY29uZmlndXJlIGZvciBEaWdpdGFsIFVuaXguCitTb2x1dGlvbjogICBBZGQgIi91c3Ivc2hsaWIiIHRvIHRoZSBzZWFyY2ggcGF0aC4gKEFuZHkgS2FobikKK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZQorCitQYXRjaCA1LjRtLjUKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiB1c2luZyB0aGUgU2F2ZS1BcyBtZW51IGVudHJ5IGFuZCBzZWxlY3RpbmcgYW4KKwkgICAgZXhpc3RpbmcgZmlsZSBpbiB0aGUgZmlsZSBicm93c2VyLCB3b3VsZCBnZXQgYSBkaWFsb2cgdG8gY29uZmlybQorCSAgICBvdmVyd3JpdGluZyB0d2ljZS4gIChFZCBLcmFsbCkKK1NvbHV0aW9uOiAgIFJlbW92ZWQgdGhlIGRpYWxvZyBmcm9tIHRoZSBmaWxlIGJyb3dzZXIuICBJdCB3b3VsZCBiZSBuaWNlciB0bworCSAgICBzZXQgdGhlICJmb3JjZWl0IiBmbGFnIGFuZCBza2lwIFZpbSdzICI6Y29uZmlybSIgZGlhbG9nLCBidXQgaXQKKwkgICAgcmVxdWlyZXMgcXVpdGUgYSBmZXcgY2hhbmdlcyB0byBkbyB0aGF0LgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNG0uNgorUHJvYmxlbTogICAgV2luMzIgR1VJOiBXaGVuIHJlYWRpbmcgdGV4dCBmcm9tIHN0ZGluLCBlLmcuLCAiY2F0IGZvbyB8IGd2aW0gLSIsCisJICAgIGEgbWVzc2FnZSBib3ggd291bGQgcG9wIHVwIHdpdGggIi1zdGRpbi0iICh3aGVuIGV4aXRpbmcpLiAoTWljaGFlbAorCSAgICBTY2hhYXApCitTb2x1dGlvbjogICBEb24ndCBzd2l0Y2ggb2ZmIHRlcm1jYXAgbW9kZSBmb3IgdmVyc2lvbnMgdGhhdCBhcmUgR1VJLW9ubHkuCisJICAgIFRoZXkgdXNlIGFub3RoZXIgdGVybWluYWwgdG8gcmVhZCBmcm9tIHN0ZGluLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS40bS43CitQcm9ibGVtOiAgICBVbml4OiBydW5uaW5nIGNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWd0ay1jaGVjaywKKwkgICAgLS1lbmFibGUtbW90aWYtY2hlY2ssIC0tZW5hYmxlLWF0aGVuYS1jaGVjayBvciAtLWVuYWJsZS1ndGt0ZXN0CisJICAgIGhhZCB0aGUgcmV2ZXJzZSBlZmZlY3QuIChUaG9tYXMgS29laGxlcikKK1NvbHV0aW9uOiAgIFVzZSAkZW5hYmxlX2d0a19jaGVjayB2YXJpYWJsZSBjb3JyZWN0bHkgaW4gQUNfQVJHX0VOQUJMRSgpLgorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlndXJlCisKK1BhdGNoIDUuNG0uOQorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2l0aCB3cmFwcGluZyBsaW5lcywgdGhlIGN1cnNvciB3YXMgc29tZXRpbWVzIDIKKwkgICAgY2hhcmFjdGVycyB0byB0aGUgbGVmdC4gIFN5bnRheCBoaWdobGlnaHRpbmcgd2FzIHdyb25nIHdoZW4gYQorCSAgICBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgd2FzIHNwbGl0IGZvciBhIHdyYXBwaW5nIGxpbmUuICBXaGVuCisJICAgICdzaG93YnJlYWsnIHdhcyBvbiB0aGUgc3BsaXR0aW5nIGFsc28gZGlkbid0IHdvcmsuCitTb2x1dGlvbjogICBBZGp1c3QgZ2V0dmNvbCgpIGFuZCB3aW5fbGluZSgpLiAoQ2hvbmctRGFlIFBhcmspCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA1LjRtLjExCitQcm9ibGVtOiAgICBUaGUgIjpjYWxsIiBjb21tYW5kIGRpZG4ndCBjaGVjayBmb3IgaWxsZWdhbCB0cmFpbGluZyBjaGFyYWN0ZXJzLgorCSAgICAoU3RlZmFuIFJvZW1lcikKK1NvbHV0aW9uOiAgIEFkZCB0aGUgY2hlY2sgaW4gZG9fY2FsbCgpLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDUuNG0uMTMKK1Byb2JsZW06ICAgIFdpdGggdGhlICI6cyIgY29tbWFuZDoKKwkgICAgMS4gV2hlbiBwZXJmb3JtaW5nIGEgc3Vic3RpdHV0ZSBjb21tYW5kLCB0aGUgbW91c2Ugd291bGQgYmUKKwkgICAgICAgZGlzYWJsZWQgYW5kIGVuYWJsZWQgZm9yIGV2ZXJ5IHN1YnN0aXR1dGlvbi4KKwkgICAgMi4gVGhlIGN1cnNvciBwb3NpdGlvbiBjb3VsZCBiZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKwkgICAgICAgQ2FsbGluZyBsaW5lX2JyZWFrY2hlY2soKSBjb3VsZCB0cnkgdG8gcG9zaXRpb24gdGhlIGN1cnNvciwKKwkgICAgICAgd2hpY2ggY2F1c2VzIGEgY3Jhc2ggaW4gdGhlIFdpbjMyIEdVSS4KKwkgICAgMy4gV2hlbiB1c2luZyAiOnMiIGluIGEgIjpnIiBjb21tYW5kLCB0aGUgY3Vyc29yIHdhcyBub3QgcHV0IG9uCisJICAgICAgIHRoZSBmaXJzdCBub24td2hpdGUgaW4gdGhlIGxpbmUuCisJICAgIDQuIFRoZXJlIHdhcyBhIGhpdC1lbnRlciBwcm9tcHQgd2hlbiBjb25maXJtaW5nIHRoZSBzdWJzdGl0dXRpb24KKwkgICAgICAgYW5kIHRoZSByZXBsYWNlbWVudCB3YXMgYSBiaXQgbG9uZ2VyLgorU29sdXRpb246ICAgMS4gT25seSBkaXNhYmxlL2VuYWJsZSB0aGUgbW91c2Ugd2hlbiBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbi4KKwkgICAgMi4gQWx3YXlzIHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIGl0IGlzIGdvaW5nIHRvIGJlCisJICAgICAgIG1vdmVkIHRvIHRoZSBmaXJzdCBub24tYmxhbmsgYW55d2F5LgorCSAgICAgICBEb24ndCB1c2UgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiBndWlfbWNoX2RyYXdfaG9sbG93X2N1cnNvcigpLAorCSAgICAgICBnZXQgdGhlIGNoYXJhY3RlciBmcm9tIHRoZSBzY3JlZW4gYnVmZmVyLgorCSAgICAzLiBBZGRlZCBnbG9iYWxfbmVlZF9iZWdpbmxpbmUgZmxhZyB0byBjYWxsIGJlZ2lubGluZSgpIGFmdGVyICI6ZyIKKwkgICAgICAgaGFzIGZpbmlzaGVkIGFsbCBzdWJzdGl0dXRpb25zLgorCSAgICA0LiBDbGVhciB0aGUgbmVlZF93YWl0X3JldHVybiBmbGFnIGFmdGVyIHByb21wdGluZyB0aGUgdXNlci4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjRtLjE0CitQcm9ibGVtOiAgICBXaGVuIGRvaW5nICJ2aW0geHh4IiwgIjpvcHQiLCAiOm9ubHkiIGFuZCB0aGVuICI6ZSB4eHgiIHdlIGVuZAorCSAgICB1cCB3aXRoIHR3byBzd2FwZmlsZXMgZm9yICJ4eHgiLiAgVGhhdCBpcyBjYXVzZWQgYnkgdGhlICI6YmRlbCIKKwkgICAgY29tbWFuZCB3aGljaCBpcyBleGVjdXRlZCB3aGVuIHVubG9hZGluZyB0aGUgb3B0aW9uLXdpbmRvdy4KKwkgICAgQWxzbywgdGhlcmUgd2FzIG5vIGNoZWNrIGlmIGNsb3NpbmcgYSBidWZmZXIgbWFkZSB0aGUgbmV3IG9uZQorCSAgICBpbnZhbGlkLCB0aGlzIGNvdWxkIGNhdXNlIGEgY3Jhc2guCitTb2x1dGlvbjogICBXaGVuIGNsb3NpbmcgYSBidWZmZXIgY2F1c2VzIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBiZSBkZWxldGVkLAorCSAgICB1c2UgdGhlIG5ldyBidWZmZXIgdG8gcmVwbGFjZSBpdC4gIEFsc28gZGV0ZWN0IHRoYXQgdGhlIG5ldyBidWZmZXIKKwkgICAgaGFzIGJlY29tZSBpbnZhbGlkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgY2xvc2luZyB0aGUgY3VycmVudCBvbmUuCisJICAgIE1ha2UgYXV0b2NvbW1hbmQgdGhhdCBjYWxscyAiOmJkZWwiIGluIG9wdHdpbi52aW0gbmVzdGVkLCBzbyB0aGF0CisJICAgIHRoZSBidWZmZXIgbG9hZGluZyBpdCB0cmlnZ2VycyBhbHNvIGV4ZWN1dGVzIGF1dG9jb21tYW5kcy4KKwkgICAgQWxzbyBhZGRlZCBhIHRlc3QgZm9yIHRoaXMgaW4gdGVzdDEzLgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0sIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMuYywgc3JjL2dsb2JhbHMuaAorCSAgICBzcmMvdGVzdGRpci90ZXN0MTMuaW4sIHNyYy90ZXN0ZGlyL3Rlc3QxMy5vaworCitQYXRjaCA1LjRtLjE1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgQnVmRW50ZXIgYXV0b2NvbW1hbmQgdG8gcmVsb2FkIHRoZSBzeW50YXggZmlsZSwKKwkgICAgY29udmVyc2lvbiB0byBIVE1MIGNhdXNlZCBhIGNyYXNoLiAoU3VuZy1IeXVuIE5hbSkKK1NvbHV0aW9uOiAgIFdoZW4gdXNpbmcgIjpzeW50YXggY2xlYXIiIHRoZSBjdXJyZW50IHN0YWNrIG9mIHN5bnRheCBpdGVtcyB3YXMKKwkgICAgbm90IGNsZWFyZWQuICBUaGlzIHdpbGwgY2F1c2UgbWVtb3J5IHRvIGJlIHVzZWQgdGhhdCBoYXMgYWxyZWFkeQorCSAgICBiZWVuIGZyZWVkLiAgQWRkZWQgY2FsbCB0byBpbnZhbGlkYXRlX2N1cnJlbnRfc3RhdGUoKSBpbgorCSAgICBzeW50YXhfY2xlYXIoKS4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDUuNG0uMTcKK1Byb2JsZW06ICAgIFdoZW4gb21pdHRpbmcgYSAnKScgaW4gYW4gZXhwcmVzc2lvbiBpdCB3b3VsZCBub3QgYmUgc2VlbiBhcyBhCisJICAgIGZhaWx1cmUuCisJICAgIFdoZW4gZGV0ZWN0aW5nIGFuIGVycm9yIGluc2lkZSAoKSwgdGhlcmUgd291bGQgYmUgYW4gZXJyb3IgbWVzc2FnZQorCSAgICBmb3IgYSBtaXNzaW5nICcpJyB0b28uCisJICAgIFdoZW4gdXNpbmcgIjplY2hvIDErfGVjaG8gMiIgdGhlcmUgd2FzIG5vIGVycm9yIG1lc3NhZ2UuIChSb2VtZXIpCisJICAgIFdoZW4gdXNpbmcgIjpleGUgMSsiIHRoZXJlIHdhcyBubyBlcnJvciBtZXNzYWdlLgorCSAgICBXaGVuIHVzaW5nICI6cmV0dXJuIDErIiB0aGVyZSB3YXMgbm8gZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIEZpeCBkb19lY2hvKCksIGRvX2V4ZWN1dGUoKSBhbmQgZG9fcmV0dXJuKCkgdG8gZ2l2ZSBhbiBlcnJvcgorCSAgICBtZXNzYWdlIHdoZW4gZXZhbDEoKSByZXR1cm5zIEZBSUwuCisJICAgIEZpeCBldmFsNigpIHRvIGhhbmRsZSB0cmFpbGluZyAnKScgY29ycmVjdGx5IGFuZCByZXR1cm4gRkFJTCB3aGVuCisJICAgIGl0J3MgbWlzc2luZy4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA1LjRtLjE4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGlucHV0KCkgZnJvbSBpbnNpZGUgYW4gZXhwcmVzc2lvbiBlbnRlcmVkIHdpdGgKKwkgICAgIkNUUkwtUiA9IiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGVyZSBjb3VsZCBiZSBhIGNyYXNoLiAgQW5kIHRoZQorCSAgICByZXN1bHRpbmcgY29tbWFuZCBsaW5lIHdhcyB3cm9uZy4KK1NvbHV0aW9uOiAgIEFkZGVkIGdldGNtZGxpbmVfcHJvbXB0KCksIHdoaWNoIGhhbmRsZXMgcmVjdXJzaXZlIHVzZSBvZgorCSAgICBnZXRjbWRsaW5lKCkgY29ycmVjdGx5LiAgSXQgYWxzbyBzZXRzIHRoZSBjb21tYW5kIGxpbmUgcHJvbXB0LgorCSAgICBSZW1vdmVkIGNtZGxpbmVfcHJvbXB0KCkuICBBbHNvIHVzZSBnZXRjbWRsaW5lX3Byb21wdCgpIGZvcgorCSAgICBnZXR0aW5nIHRoZSBjcnlwdCBrZXkgaW4gZ2V0X2NyeXB0X2tleSgpLgorRmlsZXM6CSAgICBzcmMvcHJvdG8vZXhfZ2V0bG4ucHJvLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2V2YWwuYywgc3JjL21pc2MyLmMKKworUGF0Y2ggNS40bS4yMQorUHJvYmxlbTogICAgV2hlbiBzdGFydGluZyB1cCwgdGhlIHNjcmVlbiBzdHJ1Y3R1cmVzIHdlcmUgZmlyc3QgYWxsb2NhdGVkIGF0CisJICAgIHRoZSBtaW5pbWFsIHNpemUsIHRoZW4gaW5pdGlhbGl6YXRpb25zIHdlcmUgZG9uZSB3aXRoIFJvd3MKKwkgICAgcG9zc2libHkgZGlmZmVyZW50IGZyb20gc2NyZWVuX1Jvd3MuICBDYXVzZWQgYSBjcmFzaCBpbiByYXJlCisJICAgIHNpdHVhdGlvbnMgKEdUSyB3aXRoIFhJTSBhbmQgZm9udHNldCkuCitTb2x1dGlvbjogICBDYWxsIHNjcmVlbmFsbG9jKCkgaW4gbWFpbigpIG9ubHkgYWZ0ZXIgY2FsbGluZyB1aV9nZXRfd2luc2l6ZSgpLgorCSAgICBBbHNvIGF2b2lkcyBhIHBvdGVudGlhbCBkZWxheSBiZWNhdXNlIG9mIGNhbGxpbmcgc2NyZWVuY2xlYXIoKQorCSAgICB3aGlsZSAic3RhcnRpbmciIGlzIG5vbi16ZXJvLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDUuNG0uMjIKK1Byb2JsZW06ICAgIEluIHRoZSBHVUkgaXQgd2FzIHBvc3NpYmxlIHRoYXQgdGhlIHNjcmVlbiB3YXMgcmVzaXplZCBhbmQgdGhlCisJICAgIHNjcmVlbiBzdHJ1Y3R1cmVzIHJlLWFsbG9jYXRlZCB3aGlsZSByZWRyYXdpbmcgdGhlIHNjcmVlbi4gIFRoaXMKKwkgICAgY291bGQgY2F1c2UgYSBjcmFzaCAoaGFyZCB0byByZXByb2R1Y2UpLiAgVGhlIGNhbGwgc2VxdWVuY2UgZ29lcworCSAgICB0aHJvdWdoIHVwZGF0ZV9zY3JlZW4oKSAuLiBzeW50YXhfc3RhcnQoKSAuLiB1aV9icmVha2NoZWNrKCkgLi4KKwkgICAgZ3VpX3Jlc2l6ZV93aW5kb3coKSAuLiBzY3JlZW5hbGxvYygpLgorU29sdXRpb246ICAgU2V0IHVwZGF0aW5nX3NjcmVlbiB3aGlsZSByZWRyYXdpbmcuICBJZiB0aGUgd2luZG93IGlzIHJlc2l6ZWQKKwkgICAgcmVtZW1iZXIgdGhlIG5ldyBzaXplIGFuZCBoYW5kbGUgaXQgb25seSBhZnRlciByZWRyYXdpbmcgaXMKKwkgICAgZmluaXNoZWQuCisJICAgIFRoaXMgYWxzbyBmaXhlcyB0aGF0IHJlc2l6aW5nIHRoZSBzY3JlZW4gd2hpbGUgc3RpbGwgcmVkcmF3aW5nCisJICAgIChzbG93IHN5bnRheCBoaWdobGlnaHRpbmcpIHdvdWxkIG5vdCB3b3JrIHByb3Blcmx5LgorCSAgICBBbHNvIGRpc2FibGUgZGlzcGxheV9oaW50LCBpdCB3YXMgbmV2ZXIgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL2d1aS5jLCBzcmMvc2NyZWVuLmMsIHNyYy9wcm90by9ndWkucHJvCisKK1BhdGNoIDUuNG0uMjMKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgZXhwYW5kKCI8Y3dvcmQ+Iikgd2hlbiB0aGVyZSB3YXMgbm8gd29yZCB1bmRlciB0aGUKKwkgICAgY3Vyc29yLCB3b3VsZCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIFNhbWUgZm9yIDxjV09SRD4gYW5kIDxjZmlsZT4uCitTb2x1dGlvbjogICBEb24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNS40bS4yNAorUHJvYmxlbTogICAgIjpoZWxwIFx8IiBkaWRuJ3QgZmluZCBhbnl0aGluZy4gIEl0IHdhcyB0cmFuc2xhdGVkIHRvICIvXFx8Ii4KK1NvbHV0aW9uOiAgIFRyYW5zbGF0ZSAiXHwiIGludG8gIlxcYmFyIi4gIEZpcnN0IGNoZWNrIHRoZSB0YWJsZSBmb3Igc3BlY2lmaWMKKwkgICAgdHJhbnNsYXRpb25zIGJlZm9yZSBjaGVja2luZyBmb3IgIlx4Ii4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA1LjRtLjI1CitQcm9ibGVtOiAgICBVbml4OiBXaGVuIHVzaW5nIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIG9uIGZpbGVzIHRoYXQgY29udGFpbgorCSAgICAnJycsICciJyBvciAnfCcgdGhlIGZpbGUgbmFtZSBjb3VsZCBub3QgYmUgdXNlZC4KKwkgICAgQWRkaW5nIHRoaXMgZmlsZSBuYW1lIHRvIHRoZSBCdWZmZXJzIG1lbnUgY2F1c2VkIGFuIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBJbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIHRoZXNlIHRocmVlIGNoYXJhY3RlcnMuCisJICAgIEFkanVzdCBNdW5nZW5hbWUoKSBmdW5jdGlvbiB0byBpbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlICd8Jy4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNS40bS4yNgorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIG1hcHBpbmcgb2YgdHdvIGZ1bmN0aW9uIGtleXMsIGUuZy4sIDxGMT48RjE+LCBhbmQKKwkgICAgb25seSB0aGUgZmlyc3QgY2hhciBvZiB0aGUgc2Vjb25kIGtleSBoYXMgYmVlbiByZWFkLCB0aGUgbWFwcGluZworCSAgICB3b3VsZCBub3QgYmUgcmVjb2duaXplZC4gIE5vdGljZWQgb24gc29tZSBVbml4IHN5c3RlbXMgd2l0aCB4dGVybS4KK1NvbHV0aW9uOiAgIEFkZCAnSycgZmxhZyB0byAnY3BvcHRpb25zJyB0byB3YWl0IGZvciB0aGUgd2hvbGUga2V5IGNvZGUsIGV2ZW4KKwkgICAgd2hlbiBoYWxmd2F5IGEgbWFwcGluZy4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5oLCBzcmMvdGVybS5jCisKK1BhdGNoIDUuNG0uMjcKK1Byb2JsZW06ICAgIFdoZW4gbWFraW5nIHRlc3QzMyB3aXRob3V0IHRoZSBsaXNwIGZlYXR1cmUgaXQgaGFuZ3MuIEludGVycnVwdGluZworCSAgICB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzY3JpcHQgdGhlbiBtaWdodCBjYXVzZSBhIGNyYXNoLgorU29sdXRpb246ICAgSW4gaW5jaGFyKCksIGFmdGVyIGNsb3NpbmcgYSBzY3JpcHQsIGRvbid0IHVzZSBidWZbXSBhbnltb3JlLgorCSAgICBjbG9zZXNjcmlwdCgpIGhhcyBmcmVlZCB0eXBlYnVmW10gYW5kIGJ1ZltdIG1pZ2h0IGJlIHBvaW50aW5nCisJICAgIGluc2lkZSB0eXBlYnVmW10uCisJICAgIEF2b2lkIHRoYXQgdGVzdDMzIGhhbmdzIHdoZW4gdGhlIGxpc3AgZmVhdHVyZSBpcyBtaXNzaW5nLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jIHNyYy90ZXN0ZGlyL3Rlc3QzMy5pbgorCisib3MyIiB3YXMgbWlzc2luZyBmcm9tIHRoZSBmZWF0dXJlIGxpc3QuICBVc2VmdWwgZm9yIGhhcygib3MyIikuCisKK0JlT1M6CistIEluY2x1ZGVkIHBhdGNoZXMgZnJvbSBSaWNoYXJkIE9mZmVyIGZvciBCZU9TIFI0LjUuCistIG1lbnUgY29kZSBkaWRuJ3Qgd29yayByaWdodC4gIENyYXNoZWQgaW4gdGhlIEJ1ZmZlcnMgbWVudS4gIFRoZSB3aW5kb3cgdGl0bGUKKyAgd2Fzbid0IHNldC4gKE9mZmVyKQorCitQYXRjaCA1LjRuLjMKK1Byb2JsZW06ICAgIEMtaW5kZW50aW5nIHdhcyB3cm9uZyBhZnRlciAiICB9IGVsc2UiLiAgVGhlIHdoaXRlIHNwYWNlIHdhcyBub3QKKwkgICAgc2tpcHBlZC4gIFZpc2libGUgd2hlbiAnY2lubycgaGFzICIrMTAiLgorU29sdXRpb246ICAgU2tpcCB3aGl0ZSBzcGFjZSBiZWZvcmUgY2FsbGluZyBjaW5faXNlbHNlKCkuIChOb3JiZXJ0IFplaCkKK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNS40bi40CitQcm9ibGVtOiAgICBXaGVuIHRoZSAndCcgZmxhZyBpbiAnY3BvcHRpb25zJyBpcyBpbmNsdWRlZCwgYWZ0ZXIgYQorCSAgICAiOm5vaGxzZWFyY2giIHRoZSBzZWFyY2ggaGlnaGxpZ2h0aW5nIHdvdWxkIG5vdCBiZSBlbmFibGVkIGFnYWluCisJICAgIGFmdGVyIGEgdGFnIHNlYXJjaC4gKE5vcmJlcnQgWmVoKQorU29sdXRpb246ICAgV2hlbiBzZXR0aW5nIHRoZSBuZXcgc2VhcmNoIHBhdHRlcm4gaW4ganVtcHRvX3RhZygpLCBkb24ndCByZXN0b3JlCisJICAgIG5vX2hsc2VhcmNoLgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNS40bi41CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6bm9ybWFsIiBmcm9tIGEgQ3Vyc29ySG9sZCBhdXRvY29tbWFuZCBWaW0gaGFuZ3MuICBUaGUKKwkgICAgYXV0b2NvbW1hbmQgaXMgZXhlY3V0ZWQgZG93biBmcm9tIHZnZXRjKCkuICBDYWxsaW5nIHZnZXRjKCkKKwkgICAgcmVjdXJzaXZlbHkgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCBkb2Vzbid0IHdvcmsgdGhlbi4KK1NvbHV0aW9uOiAgIEZvcmJpZCB0aGUgdXNlIG9mICI6bm9ybWFsIiB3aGVuIHZnZXRjX2J1c3kgaXMgc2V0LiAgR2l2ZSBhbiBlcnJvcgorCSAgICBtZXNzYWdlIHdoZW4gdGhpcyBoYXBwZW5zLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgcnVudGltZS9kb2MvYXV0b2NtZC50eHQKKworUGF0Y2ggNS40bi42CitQcm9ibGVtOiAgICAiZ3YiIGNvdWxkIHJlc2VsZWN0IGEgVmlzdWFsIHRoYXQgc3RhcnRzIGFuZC9vciBlbmRzIHBhc3QgdGhlIGVuZAorCSAgICBvZiBhIGxpbmUuIChSb2JlcnQgV2ViYikKK1NvbHV0aW9uOiAgIENoZWNrIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIFZpc3VhbCBhcmVhIGFyZSBvbiBhIHZhbGlkCisJICAgIGNoYXJhY3RlciBieSBjYWxsaW5nIGFkanVzdF9jdXJzb3IoKS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNG4uOAorUHJvYmxlbTogICAgV2hlbiBhIG1hcmsgd2FzIG9uIGEgbm9uIGV4aXN0aW5nIGxpbmUgKGUuZy4sIHdoZW4gdGhlIC52aW1pbmZvCisJICAgIHdhcyBlZGl0ZWQpLCBqdW1waW5nIHRvIGl0IGNhdXNlZCBtbF9nZXQgZXJyb3JzLiAoQWxleGV5CisJICAgIE1hcmluaWNoZXYpLgorU29sdXRpb246ICAgQWRkZWQgY2hlY2tfY3Vyc29yX2xudW0oKSBpbiBudl9nb21hcmsoKS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNG4uOQorUHJvYmxlbTogICAgIjotMiIgbW92ZWQgdGhlIGN1cnNvciB0byBhIG5lZ2F0aXZlIGxpbmUgbnVtYmVyLiAoUmFsZiBTY2hhbmRsKQorU29sdXRpb246ICAgR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciBhIG5lZ2F0aXZlIGxpbmUgbnVtYmVyLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjRuLjEwCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IEF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0LCBpdCB3YXMgcG9zc2libGUgdG8gc2Nyb2xsIHRoZQorCSAgICB0ZXh0LiAgVGhpcyBlcmFzZWQgdGhlIHByb21wdCBhbmQgbWFkZSBWaW0gbG9vayBsaWtlIGl0IGlzIGluCisJICAgIE5vcm1hbCBtb2RlLCB3aGlsZSBpdCBpcyBhY3R1YWxseSBzdGlsbCB3YWl0aW5nIGZvciBhIDxDUj4uCitTb2x1dGlvbjogICBEaXNhbGxvdyBzY3JvbGxpbmcgYXQgdGhlIGhpdC1lbnRlciBwcm9tcHQgZm9yIHN5c3RlbXMgdGhhdCB1c2UKKwkgICAgb24gdGhlIGZseSBzY3JvbGxpbmcuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNS40bi4xNAorUHJvYmxlbTogICAgV2luMzIgR1VJOiBXaGVuIHVzaW5nICI6d2luc2l6ZSA4MCA0NiIgYW5kIHRoZSBoZWlnaHQgaXMgbW9yZSB0aGFuCisJICAgIHdoYXQgZml0cyBvbiB0aGUgc2NyZWVuLCB0aGUgd2luZG93IHNpemUgd2FzIG1hZGUgc21hbGxlciB0aGFuCisJICAgIGFza2VkIGZvciAodGhhdCdzIE9LKSBhbmQgVmltIGNyYXNoZWQgKHRoYXQncyBub3QgT0spPgorU29sdXRpb246ICAgQ2FsbCBjaGVja193aW5zaXplKCkgZnJvbSBndWlfc2V0X3dpbnNpemUoKSB0byByZXNpemUgdGhlIHdpbmRvd3MuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA1LjRuLjE2CitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFRoZSA8RjEwPiBrZXkgYm90aCBzZWxlY3RlZCB0aGUgbWVudSBhbmQgd2FzIGhhbmRsZWQgYXMKKwkgICAgYSBrZXkgaGl0LgorU29sdXRpb246ICAgQXBwbHkgJ3dpbmFsdGtleXMnIHRvIDxGMTA+LCBsaWtlIGl0IGlzIHVzZWQgZm9yIEFsdCBrZXlzLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNG4uMTcKK1Byb2JsZW06ICAgIExvY2FsIGJ1ZmZlciB2YXJpYWJsZXMgd2VyZSBmcmVlZCB3aGVuIHRoZSBidWZmZXIgaXMgdW5sb2FkZWQuCisJICAgIFRoYXQncyBub3QgbG9naWNhbCwgc2luY2Ugb3B0aW9ucyBhcmUgbm90IGZyZWVkLiAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgRnJlZSBsb2NhbCBidWZmZXIgdmFyaWFibGVzIG9ubHkgd2hlbiBkZWxldGluZyB0aGUgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNS40bi4xOQorUHJvYmxlbTogICAgRG9pbmcgIjplIiAod2l0aG91dCBhcmd1bWVudCkgaW4gYW4gb3B0aW9uLXdpbmRvdyBjYXVzZXMgdHJvdWJsZS4KKwkgICAgVGhlIG1hcHBpbmdzIGZvciA8Q1I+IGFuZCA8U3BhY2U+IGFyZSBub3QgcmVtb3ZlZC4gIFdoZW4gdGhlcmUgaXMKKwkgICAgYW5vdGhlciBidWZmZXIgbG9hZGVkLCB0aGUgc3dhcCBmaWxlIGZvciBpdCBnZXRzIG1peGVkIHVwLgorCSAgICAoU3RldmUgTXVlbGxlcikKK1NvbHV0aW9uOiAgIEFsc28gcmVtb3ZlIHRoZSBtYXBwaW5ncyBhdCB0aGUgQnVmVW5sb2FkIGV2ZW50LCBpZiB0aGV5IGFyZSBzdGlsbAorCSAgICBwcmVzZW50LgorCSAgICBXaGVuIHJlLWVkaXRpbmcgdGhlIHNhbWUgZmlsZSBjYXVzZXMgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIGJlCisJICAgIGRlbGV0ZWQsIGRvbid0IHRyeSBlZGl0aW5nIGl0LgorCSAgICBBbHNvIGFkZGVkIGEgdGVzdCBmb3IgdGhpcyBzaXR1YXRpb24uCitGaWxlczoJICAgIHJ1bnRpbWUvb3B0d2luLnZpbSwgc3JjL2V4X2NtZHMuYywgc3JjL3Rlc3RkaXIvdGVzdDEzLmluLAorCSAgICBzcmMvdGVzdGRpci90ZXN0MTMub2sKKworUGF0Y2ggNS40bi4yNAorUHJvYmxlbTogICAgQmVPUzogY29uZmlndXJlIG5ldmVyIGVuYWJsZWQgdGhlIEdVSSwgYmVjYXVzZSAkd2l0aF94IHdhcyAibm8iLgorCSAgICBVbml4IHByb3RvdHlwZXMgY2F1c2VkIHByb2JsZW1zLCBiZWNhdXNlIERpc3BsYXkgYW5kIFdpZGdldCBhcmUKKwkgICAgdW5kZWZpbmVkLgorCSAgICBGcmVlaW5nIGZvbnRzIG9uIGV4aXQgY2F1c2VkIGEgY3Jhc2guCitTb2x1dGlvbjogICBPbmx5IGRpc2FibGUgdGhlIEdVSSB3aGVuICR3aXRoX3ggaXMgIm5vIiBhbmQgICRCRU9TIGlzIG5vdCAieWVzIi4KKwkgICAgQWRkIGR1bW15IGRlZmluZXMgZm9yIERpc3BsYXkgYW5kIFdpZGdldCBpbiBwcm90by5oLgorCSAgICBEb24ndCBmcmVlIHRoZSBmb250cyBpbiBndWlfZXhpdCgpIGZvciBCZU9TLgorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlndXJlLCBzcmMvcHJvdG8uaCwgc3JjL2d1aS5jLgorCisKK1RoZSBydW50aW1lL3ZpbTQ4eDQ4LnhwbSBpY29uIGRpZG4ndCBoYXZlIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4gKFNjaGlsZCkKKworU29tZSB2ZXJzaW9ucyBvZiB0aGUgbWluZ3czMi9lZ2NzIGNvbXBpbGVyIGRpZG4ndCBoYXZlIFdJTkJBU0VBUEkgZGVmaW5lZC4KKyhBYXJvbikKKworVk1TOgorLSBtY2hfc2V0ZW52KCkgaGFkIHR3byBhcmd1bWVudHMgaW5zdGVhZCBvZiB0aHJlZS4KKy0gVGhlIHN5c3RlbSB2aW1yYyBhbmQgZ3ZpbXJjIGZpbGVzIHdlcmUgY2FsbGVkICIudmltcmMiIGFuZCAiLmd2aW1yYyIuCisgIFJlbW92ZWQgdGhlIGRvdC4KKy0gY2FsbCB0byBSZWFsV2FpdEZvckNoYXIoKSBoYWQgb25lIGFyZ3VtZW50IHRvbyBtYW55LiAoQ2FtcGJlbGwpCistIFdhaXRGb3JDaGFyKCkgaXMgc3RhdGljLCByZW1vdmVkIHRoZSBwcm90b3R5cGUgZnJvbSBwcm90by9vc192bXMucHJvLgorLSBNYW55IGZpbGUgYWNjZXNzZXMgZmFpbGVkLCBiZWNhdXNlIFVuaXggc3R5bGUgZmlsZSBuYW1lcyB3ZXJlIHVzZWQuCisgIFRyYW5zbGF0ZSBmaWxlIG5hbWVzIHRvIFZNUyBzdHlsZSBieSB1c2luZyB2aW1fZm9wZW4oKS4KKy0gRmlsdGVyaW5nIGRpZG4ndCB3b3JrLCBiZWNhdXNlIHRoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lIHdhcyBnZW5lcmF0ZWQgd3JvbmcuCistIFRoZXJlIHdhcyBhbiBleHRyYSBuZXdsaW5lIGV2ZXJ5IDkxOTIgY2hhcmFjdGVycyB3aGVuIHdyaXRpbmcgYSBmaWxlLiAgV29yaworICBhcm91bmQgaXQgYnkgd3JpdGluZyBsaW5lIGJ5IGxpbmUuIChDYW1wYmVsbCkKKy0gb3Nfdm1zLmMgY29udGFpbmVkICIjIHR5cGVkZWYgaW50IERFU0MiLiAgU2hvdWxkIGJlICJ0eXBlZGVmIGludCBERVNDOyIuCisgIE9ubHkgbWF0dGVyZWQgZm9yIGdlbmVyYXRpbmcgcHJvdG90eXBlcy4KKy0gQWRkZWQgZmlsZSBuYW1lIHRyYW5zbGF0aW9uIHRvIG1hbnkgcGxhY2VzLiAgTWFkZSBlYXN5IGJ5IGRlZmluaW5nIG1hY3JvcworICBtY2hfYWNjZXNzKCksIG1jaF9mb3BlbigpLCBtY2hfZnN0YXQoKSwgbWNoX2xzdGF0KCkgYW5kIG1jaF9zdGF0KCkuCistIFNldCBkZWZhdWx0IGZvciAndGFnYnNlYXJjaCcgdG8gb2ZmLCBiZWNhdXNlIGJpbmFyeSB0YWcgc2VhcmNoaW5nIGFwcGFyZW50bHkKKyAgZG9lc24ndCB3b3JrIGZvciBWTVMuCistIG1ha2UgbWNoX2dldF9ob3N0X25hbWUoKSB3b3JrIHdpdGggL2RlYyBhbmQgL3N0YW5kYXJkPXZheGMuIChDYW1wYmVsbCkKKworCitQYXRjaCA1LjRvLjIKK1Byb2JsZW06ICAgIENyYXNoIHdoZW4gdXNpbmcgImdmIiBvbiAiZmlsZS5jOi8vY29tbWVudCBoZXJlIi4gKFNjb3R0IEdyYWhhbSkKK1NvbHV0aW9uOiAgIEZpeCB3cm9uZyB1c2Ugb2YgcG9pbnRlcnMgaW4gZ2V0X2ZpbGVfbmFtZV9pbl9wYXRoKCkuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA1LjRvLjMKK1Byb2JsZW06ICAgIFRoZSBob3Jpem9udGFsIHNjcm9sbGJhciB3YXMgbm90IHNpemVkIGNvcnJlY3RseSB3aGVuICdudW1iZXInIGlzCisJICAgIHNldCBhbmQgJ3dyYXAnIG5vdCBzZXQuCisJICAgIEF0aGVuYTogSG9yaXpvbnRhbCBzY3JvbGxiYXIgd2Fzbid0IHVwZGF0ZWQgd2hlbiB0aGUgY3Vyc29yIHdhcworCSAgICBwb3NpdGlvbmVkIHdpdGggYSBtb3VzZSBjbGljayBqdXN0IGFmdGVyIGRyYWdnaW5nLgorU29sdXRpb246ICAgU3VidHJhY3QgOCBmcm9tIHRoZSBzaXplIHdoZW4gJ251bWJlcicgc2V0IGFuZCAnd3JhcCcgbm90IHNldC4KKwkgICAgUmVzZXQgZ3VpLmRyYWdnZWRfc2Igd2hlbiBhIG1vdXNlIGNsaWNrIGlzIHJlY2VpdmVkLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNS40by40CitQcm9ibGVtOiAgICBXaGVuIHJ1bm5pbmcgaW4gYW4geHRlcm0gYW5kICRXSU5ET1dJRCBpcyBzZXQgdG8gYW4gaWxsZWdhbCB2YWx1ZSwKKwkgICAgVmltIHdvdWxkIGV4aXQgd2l0aCAiVmltOiBHb3QgWCBlcnJvciIuCitTb2x1dGlvbjogICBXaGVuIHVzaW5nIHRoZSBkaXNwbGF5IHdoaWNoIHdhcyBvcGVuZWQgZm9yIHRoZSB4dGVybSBjbGlwYm9hcmQsCisJICAgIGNoZWNrIGlmIHgxMV93aW5kb3cgaXMgdmFsaWQgYnkgdHJ5aW5nIHRvIG9idGFpbiB0aGUgd2luZG93IHRpdGxlLgorCSAgICBBbHNvIGFkZCBhIGNoZWNrIGluIHNldHVwX3h0ZXJtX2NsaXAoKSwgZm9yIHdoZW4gdXNpbmcgWCBjYWxscyB0bworCSAgICBnZXQgdGhlIHBvaW50ZXIgcG9zaXRpb24gaW4gYW4geHRlcm0uCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS40by41CitQcm9ibGVtOiAgICBNb3RpZiB2ZXJzaW9uIHdpdGggTGVzc3RpZjogV2hlbiByZW1vdmluZyB0aGUgbWVudWJhciBhbmQgdGhlbgorCSAgICB1c2luZyBhIG1lbnUgc2hvcnRjdXQga2V5LCBWaW0gd291bGQgY3Jhc2guIChyYWYpCitTb2x1dGlvbjogICBEaXNhYmxlIHRoZSBtZW51IG1uZW1vbmljcyB3aGVuIHRoZSBtZW51IGJhciBpcyByZW1vdmVkLgorRmlsZXM6CSAgICBzcmMvZ3VpX21vdGlmLmMKKworUGF0Y2ggNS40by45CitQcm9ibGVtOiAgICBUaGUgRE9TIGluc3RhbGwuZXhlIHByb2dyYW0gdXNlZCB0aGUgIm1vdmUiIHByb2dyYW0uICBUaGF0IGRvZXNuJ3QKKwkgICAgd29yayBvbiBXaW5kb3dzIE5ULCB3aGVyZSAibW92ZSIgaXMgaW50ZXJuYWwgdG8gY21kLmV4ZS4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSBhbiBleHRlcm5hbCBwcm9ncmFtIGZvciBtb3ZpbmcgdGhlIGV4ZWN1dGFibGVzLiAgVXNlIEMKKwkgICAgZnVuY3Rpb25zIHRvIGNvcHkgdGhlIGZpbGUgYW5kIGRlbGV0ZSB0aGUgb3JpZ2luYWwuCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworTW90aWYgYW5kIEF0aGVuYSBvYnRhaW5lZCB0aGUgc3RhdHVzIGFyZWEgaGVpZ2h0IGRpZmZlcmVudGx5IGZyb20gR1RLLiAgTW92ZWQKK3N0YXR1c19hcmVhX2VuYWJsZWQgZnJvbSBnbG9iYWwuaCB0byBndWlfeDExLmMgYW5kIGNhbGwKK3hpbV9nZXRfc3RhdHVzX2FyZWFfaGVpZ2h0KCkgdG8gZ2V0IHRoZSBzdGF0dXMgYXJlYSBoZWlnaHQuCisKK1BhdGNoIDUuNHAuMQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhdXRvLXNlbGVjdCwgYW5kIHRoZSAiZ3YiIGNvbW1hbmQgaXMgdXNlZCwgd291bGQgbm90CisJICAgIGFsd2F5cyBvYnRhaW4gb3duZXJzaGlwIG9mIHRoZSBzZWxlY3Rpb24uICBDYXVzZWQgYnkgdGhlIFZpc3VhbAorCSAgICBhcmVhIHN0aWxsIGJlaW5nIHRoZSBzYW1lLCBidXQgb3duZXJzaGlwIHRha2VuIGF3YXkgYnkgYW5vdGhlcgorCSAgICBwcm9ncmFtLgorU29sdXRpb246ICAgUmVzZXQgdGhlIGNsaXBib2FyZCBWaXN1YWwgbW9kZSB0byBmb3JjZSB1cGRhdGluZyB0aGUgc2VsZWN0aW9uLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS40cC4yCitQcm9ibGVtOiAgICBNb3RpZiBhbmQgQXRoZW5hIHdpdGggWElNOiBUeXBpbmcgMy1ieXRlCisJICAgIDxtdWx0aWJ5dGU+PG11bHRpYnl0ZT48c3BhY2U+IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBBbWkgWElNLgorU29sdXRpb246ICAgQXZvaWQgdXNpbmcga2V5X3N5bSBYS19Wb2lkU3ltYm9sLiAoTmFtKQorRmlsZXM6CSAgICBzcmMvbXVsdGJ5dGUuYywgc3JjL2d1aV94MTEuYworCitQYXRjaCA1LjRwLjQKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogVGhlIHNjcm9sbGJhciB2YWx1ZXMgd2VyZSByZWR1Y2VkIGZvciBhIGZpbGUgd2l0aCBtb3JlCisJICAgIHRoYW4gMzI3NjcgbGluZXMuICBCdXQgdGhpcyBpbmZvIHdhcyBrZXB0IGdsb2JhbCBmb3IgYWxsCisJICAgIHNjcm9sbGJhcnMsIGNhdXNpbmcgYSBtaXh1cCBiZXR3ZWVuIHRoZSB3aW5kb3dzLgorCSAgICBVc2luZyB0aGUgZG93biBhcnJvdyBvZiBhIHNjcm9sbGJhciBpbiBhIGxhcmdlIGZpbGUgZGlkbid0IHdvcmsuCisJICAgIEJlY2F1c2Ugb2Ygcm91bmQtb2ZmIGVycm9ycyB0aGVyZSBpcyBubyBzY3JvbGwgYXQgYWxsLgorU29sdXRpb246ICAgR2l2ZSBlYWNoIHNjcm9sbGJhciBpdHMgb3duIHNjcm9sbF9zaGlmdCBmaWVsZC4gIFdoZW4gdGhlIGRvd24KKwkgICAgYXJyb3cgaXMgdXNlZCwgc2Nyb2xsIHNldmVyYWwgbGluZXMuCitGaWxlczoJICAgIHNyYy9ndWkuaCwgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjRwLjUKK1Byb2JsZW06ICAgIFdoZW4gY2hhbmdpbmcgYnVmZmVycyBpbiBhIEJ1ZkRlbGV0ZSBhdXRvY29tbWFuZCwgdGhlcmUgY291bGQgYmUKKwkgICAgbWxfbGluZSBlcnJvcnMgYW5kL29yIGEgY3Jhc2guIChTY2hhbmRsKSAgV2FzIGNhdXNlZCBieSBkZWxldGluZworCSAgICB0aGUgY3VycmVudCBidWZmZXIuCitTb2x1dGlvbjogICBXaGVuIHRoZSBidWZmZXIgdG8gYmUgZGVsZXRlZCB1bmV4cGVjdGVkbHkgYmVjb21lcyB0aGUgY3VycmVudAorCSAgICBidWZmZXIsIGRvbid0IGRlbGV0ZSBpdC4KKwkgICAgQWxzbyBhZGRlZCBhIGNoZWNrIGZvciB0aGlzIGluIHRlc3QxMy4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvdGVzdGRpci90ZXN0MTMuaW4sIHNyYy90ZXN0ZGlyL3Rlc3QxMy5vaworCitQYXRjaCA1LjRwLjcKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiB1c2luZyAnbW91c2Vtb2RlbCcgc2V0IHRvICJwb3B1cF9zZXRwb3MiIGFuZAorCSAgICBjbGlja2luZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIG91dHNpZGUgb2YgdGhlIHNlbGVjdGVkIGFyZWEsIHRoZQorCSAgICBzZWxlY3RlZCBhcmVhIHdhc24ndCByZW1vdmVkIHVudGlsIHRoZSBwb3B1cCBtZW51IGhhcyBnb25lLgorCSAgICAoQWFyb24pCitTb2x1dGlvbjogICBTZXQgdGhlIGN1cnNvciBhbmQgdXBkYXRlIHRoZSBkaXNwbGF5IGJlZm9yZSBzaG93aW5nIHRoZSBwb3B1cAorCSAgICBtZW51LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS40cC44CitQcm9ibGVtOiAgICBUaGUgZ2VuZXJhdGVkIGJ1Z3JlcG9ydCBkaWRuJ3QgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dAorCSAgICAkVklNUlVOVElNRSBhbmQgd2hldGhlciBydW50aW1lIGZpbGVzIGFjdHVhbGx5IGV4aXN0LgorU29sdXRpb246ICAgQWRkZWQgYSBmZXcgY2hlY2tzIHRvIHRoZSBidWdyZXBvcnQgc2NyaXB0LgorRmlsZXM6CSAgICBydW50aW1lL2J1Z3JlcG9ydC52aW0KKworUGF0Y2ggNS40cC45CitQcm9ibGVtOiAgICBUaGUgd2luZG93cyBpbnN0YWxsLmV4ZSBjcmVhdGVkIGEgd3JvbmcgZW50cnkgaW4gdGhlIHBvcHVwIG1lbnUuCisJICAgIFRoZSAiJTEiIHdhcyAiIi4gIFRoZSBmdWxsIGRpcmVjdG9yeSB3YXMgaW5jbHVkZWQsIGV2ZW4gd2hlbiB0aGUKKwkgICAgZXhlY3V0YWJsZSBoYWQgYmVlbiBtb3ZlZCBlbHNld2hlcmUuIChPdHQpCitTb2x1dGlvbjogICBEb3VibGUgdGhlICclJyB0byBnZXQgb25lIGZyb20gcHJpbnRmLiAgT25seSBpbmNsdWRlIHRoZSBwYXRoIHRvCisJICAgIGd2aW0uZXhlIHdoZW4gaXQgd2Fzbid0IG1vdmVkIGFuZCBpdCdzIG5vdCBpbiAkUEFUSC4KK0ZpbGVzOgkgICAgc3JjL2Rvc2luc3QuYworCitQYXRjaCA1LjRwLjEwCitQcm9ibGVtOiAgICBXaW4zMjogT24gdG9wIG9mIDUuNHAuOTogVGhlICJFZGl0IHdpdGggVmltIiBlbnRyeSBzb21ldGltZXMgdXNlZAorCSAgICBhIHNob3J0IGZpbGUgbmFtZSBmb3IgYSBkaXJlY3RvcnkuCitTb2x1dGlvbjogICBDaGFuZ2UgdGhlICIlMSIgdG8gIiVMIiBpbiB0aGUgcmVnaXN0cnkgZW50cnkuCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNS40cC4xMQorUHJvYmxlbTogICAgTW90aWYsIEF0aGVuYSBhbmQgR1RLOiBXaGVuIGNsb3NpbmcgdGhlIEdVSSB3aW5kb3cgd2hlbiB0aGVyZSBpcyBhCisJICAgIGNoYW5nZWQgYnVmZmVyLCB0aGVyZSB3YXMgb25seSBhbiBlcnJvciBtZXNzYWdlIGFuZCBWaW0gd291bGQgbm90CisJICAgIGV4aXQuCitTb2x1dGlvbjogICBQdXQgdXAgYSBkaWFsb2csIGxpa2UgZm9yICI6Y29uZmlybSBxYSIuICBVc2VzIHRoZSBjb2RlIHRoYXQgd2FzCisJICAgIGFscmVhZHkgdXNlZCBmb3IgTVMtV2luZG93cy4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNHAuMTIKK1Byb2JsZW06ICAgIFdpbjMyOiBUcnlpbmcgdG8gZXhwYW5kIGEgc3RyaW5nIHRoYXQgaXMgbG9uZ2VyIHRoYW4gMjU2CisJICAgIGNoYXJhY3RlcnMgY291bGQgY2F1c2UgYSBjcmFzaC4gKFN0ZWVkKQorU29sdXRpb246ICAgRm9yIHRoZSBidWZmZXIgaW4gd2luMzJfZXhwYW5kcGF0aCgpIGRvbid0IHVzZSBhIGZpeGVkIHNpemUgYXJyYXksCisJICAgIGFsbG9jYXRlIGl0LgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitNU0RPUzogQWRkZWQgIi1XYWxsIiB0byBNYWtlZmlsZS5kamcgY29tcGlsZSBmbGFncy4gIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yCitmbmFtZV9jYXNlKCkgYW5kIG1jaF91cGRhdGVfY3Vyc29yKCkgd2VyZSBtaXNzaW5nLiAgImZkIiB3YXMgdW51c2VkIGluCittZl9zeW5jKCkuICAicHVpTG9jYXRpb24iIHdhcyB1bnVzZWQgaW4gbXlwdXRjaCgpLiAgIm5ld2NtZCIgdW51c2VkIGluCittY2hfY2FsbF9zaGVsbCgpIGZvciBESkdQUCB2ZXJzaW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZFUlNJT04gNS41CQkJCQkJKnZlcnNpb24tNS41KgorCitWZXJzaW9uIDUuNSBpcyBhIGJ1Zy1maXggdmVyc2lvbiBvZiA1LjQuCisKKworQ2hhbmdlZAkJCQkJCQkqY2hhbmdlZC01LjUqCistLS0tLS0tCisKK1RoZSBESkdQUCB2ZXJzaW9uIGlzIG5vdyBjb21waWxlZCB3aXRoICItTzIiIGluc3RlYWQgb2YgIi1PNCIgdG8gcmVkdWNlIHRoZQorc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZXMuCisKK01vdmVkIHRoZSBzcmMvU1RZTEUgZmlsZSB0byBydW50aW1lL2RvYy9kZXZlbG9wLnR4dC4gIEFkZGVkIHRoZSBkZXNpZ24gZ29hbHMKK3RvIGl0LgorCisnYmFja3NwYWNlJyBpcyBub3cgYSBzdHJpbmcgb3B0aW9uLiAgU2VlIHBhdGNoIDUuNC4xNS4KKworCitBZGRlZAkJCQkJCQkqYWRkZWQtNS41KgorLS0tLS0KKworSW5jbHVkZWQgRXh1YmVyYW50IEN0YWdzIHZlcnNpb24gMy4zLiAoRGFycmVuIEhpZWJlcnQpCisKK0luIHJ1bnRpbWUvbXN3aW4udmltLCBtYXAgQ1RSTC1RIHRvIENUUkwtViwgc28gdGhhdCBDVFJMLVEgY2FuIGJlIHVzZWQKK2V2ZXJ5d2hlcmUgdG8gZG8gd2hhdCBDVFJMLVYgdXNlZCB0byBkby4KKworU3VwcG9ydCBmb3IgZGVjb21wcmVzc2lvbiBvZiBiemlwMiBmaWxlcyBpbiB2aW1yY19leGFtcGxlLnZpbS4KKworV2hlbiBhIHBhdGNoIGlzIGluY2x1ZGVkLCB0aGUgcGF0Y2ggbnVtYmVyIGlzIGVudGVyZWQgaW4gYSB0YWJsZSBpbiB2ZXJzaW9uLmMuCitUaGlzIGFsbG93cyBza2lwcGluZyBhIHBhdGNoIHdpdGhvdXQgYnJlYWtpbmcgYSBuZXh0IG9uZS4KKworU3VwcG9ydCBmb3IgbW91c2Ugc2Nyb2xsIHdoZWVsIGluIFgxMS4gIFNlZSBwYXRjaCA1LjVhLjE0LgorCitsaW5lMmJ5dGUoKSBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFNlZSBwYXRjaCA1LjQuMzUuCisKK1RoZSBDVFJMLVIgQ1RSTC1PIHIgYW5kIENUUkwtUiBDVFJMLVAgciBjb21tYW5kcyBpbiBJbnNlcnQgbW9kZSBhcmUgdXNlZCB0bworaW5zZXJ0IGEgcmVnaXN0ZXIgbGl0ZXJhbGx5LiAgU2VlIHBhdGNoIDUuNC40OC4KKworVW5pbnN0YWxsIHByb2dyYW0gZm9yIE1TLVdpbmRvd3MuICBUbyBiZSBhYmxlIHRvIHJlbW92ZSB0aGUgcmVnaXN0cnkgZW50cmllcworZm9yICJFZGl0IHdpdGggVmltIi4gIEl0IGlzIHJlZ2lzdGVyZWQgdG8gYmUgcnVuIGZyb20gdGhlICJBZGQvUmVtb3ZlCitwcm9ncmFtcyIgYXBwbGljYXRpb24uICBTZWUgcGF0Y2ggNS40Lng3LgorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC01LjUqCistLS0tLQorCitXaGVuIHVzaW5nIHZpbXJjX2V4YW1wbGUudmltOiBBbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIGN1cnNvciBpcyBvbiBhIGxpbmUKK2hpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGNvbXByZXNzZWQgZmlsZS4gIE1vdmUgdGhlIGF1dG9jb21tYW5kCitmb3IganVtcGluZyB0byB0aGUgbGFzdCBrbm93biBjdXJzb3IgcG9zaXRpb24gdG8gYWZ0ZXIgdGhlIGRlY29tcHJlc3NpbmcKK2F1dG9jb21tYW5kcy4KKworIjpta2V4cmMiIGFuZCAiOm1rc2Vzc2lvbiIgd3JvdGUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ3RleHRtb2RlJy4gIFRoYXQgbWF5CittYXJrIGEgZmlsZSBhcyBtb2RpZmllZCwgd2hpY2ggY2F1c2VzIHByb2JsZW1zLiAgVGhpcyBpcyBhIGJ1ZmZlci1zcGVjaWZpYworc2V0dGluZywgaXQgc2hvdWxkIG5vdCBhZmZlY3QgYWxsIGZpbGVzLgorCisidmltIC0tdmVyc2lvbiIgd3JvdGUgdHdvIGVtcHR5IGxpbmVzLgorCitVbml4OiBUaGUgYWxhcm0gc2lnbmFsIGNvdWxkIGtpbGwgVmltLiAgSXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBQZXJsIGFsYXJtKCkKK2Z1bmN0aW9uLiAgSWdub3JlIFNJR0FMUk0uCisKK1dpbjMyIEdVSTogVG9vbGJhciBzdGlsbCBoYWQgdGhlIHllbGxvdyBiaXRtYXAgZm9yIHJ1bm5pbmcgYSBWaW0gc2NyaXB0LgorCitCZU9TOiAidG1vIiBtdXN0IGJlIGJpZ3RpbWVfdCwgaW5zdGVhZCBvZiBkb3VibGUuIChTZWliZXJ0KQorCitQYXRjaCA1LjQuMQorUHJvYmxlbTogICAgVGVzdDExIGZhaWxzIHdoZW4gJEdaSVAgaXMgc2V0IHRvICItdiIuIChNYXR0aGV3IEphY2tzb24pCitTb2x1dGlvbjogICBTZXQgJEdaSVAgdG8gYW4gZW1wdHkgc3RyaW5nLgorRmlsZXM6CSAgICBzcmMvdGVzdGRpci90ZXN0MTEuaW4KKworUGF0Y2ggNS40LjIKK1Byb2JsZW06ICAgIFR5cGluZyA8RXNjPiBhdCB0aGUgY3J5cHQga2V5IHByb21wdCBjYXVzZWQgYSBjcmFzaC4gKEthbGxpbmdhbCkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIE5VTEwgcG9pbnRlciByZXR1cm5lZCBmcm9tIGdldF9jcnlwdF9rZXkoKS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNC4zCitQcm9ibGVtOiAgICBQeXRob246IFRyeWluZyB0byB1c2UgdGhlIG5hbWUgb2YgYW4gdW5uYW1lZCBidWZmZXIgY2F1c2VkIGEKKwkgICAgY3Jhc2guIChEYW5pZWwgQnVycm93cykKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBiX2ZuYW1lIGJlaW5nIGEgTlVMTCBwb2ludGVyLgorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNS40LjQKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIGNvbXBpbGVkIHdpdGhvdXQgdG9vbGJhciwgYnV0IHRoZSAnVCcgZmxhZyBpcyBpbgorCSAgICAnZ3Vpb3B0aW9ucycsIHRoZXJlIHdvdWxkIGJlIGFuIGVtcHR5IHNwYWNlIGZvciB0aGUgdG9vbGJhci4KK1NvbHV0aW9uOiAgIEFkZCB0d28gI2lmZGVmcyB3aGVyZSBjaGVja2luZyBmb3IgdGhlICdUJyBmbGFnLiAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA1LjQuNQorUHJvYmxlbTogICAgQXRoZW5hIEdVSTogVXNpbmcgdGhlIEJ1ZmZlcnMuUmVmcmVzaCBtZW51IGVudHJ5IGNhdXNlZCBhIGNyYXNoLgorCSAgICBMb29rcyBsaWtlIGFueSAiOnVubWVudSIgY29tbWFuZCBtYXkgY2F1c2UgdHJvdWJsZS4KK1NvbHV0aW9uOiAgIERpc2FsbG93ICI6dW5tZW51IiBpbiB0aGUgQXRoZW5hIHZlcnNpb24uICBEaXNhYmxlIHRoZSBCdWZmZXJzCisJICAgIG1lbnUsIGJlY2F1c2UgdGhlIFJlZnJlc2ggaXRlbSB3b3VsZCBub3Qgd29yay4KK0ZpbGVzOgkgICAgc3JjL21lbnUuYywgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA1LjQuNgorUHJvYmxlbTogICAgR1RLIEdVSTogVXNpbmcgIjpndWkiIGluIHRoZSAuZ3ZpbXJjIGZpbGUgY2F1c2VkIGFuIGVycm9yLiAgT25seQorCSAgICBoYXBwZW5zIHdoZW4gdGhlIEdVSSBmb3Jrcy4KK1NvbHV0aW9uOiAgIERvbid0IGZvcmsgaW4gYSByZWN1cnNpdmUgY2FsbCBvZiBndWlfc3RhcnQoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDUuNC43CitQcm9ibGVtOiAgICBUeXBpbmcgJ3EnIGF0IHRoZSBtb3JlIHByb21wdCBmb3IgdGhlIEFUVEVOVElPTiBtZXNzYWdlIGNhdXNlcyB0aGUKKwkgICAgZmlsZSBsb2FkaW5nIHRvIGJlIGludGVycnVwdGVkLiAoV2lsbCBEYXkpCitTb2x1dGlvbjogICBSZXNldCBnb3RfaW50IGFmdGVyIHNob3dpbmcgdGhlIEFUVEVOVElPTiBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvbWVtbGluZS5jCisKK1BhdGNoIDUuNC44CitQcm9ibGVtOiAgICBFZGl0IHNvbWUgZmlsZSwgIjpoZSIsICI6b3B0Ijogb3B0aW9ucyBmcm9tIGhlbHAgd2luZG93IGFyZSBzaG93biwKKwkgICAgYnV0IHByZXNzaW5nIHNwYWNlIHVwZGF0ZXMgZnJvbSB0aGUgb3RoZXIgd2luZG93LiAoUGhpbGxpcHBzKQorCSAgICBBbHNvOiBXaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIHRoZSBvcHRpb24td2luZG93LCAiOnEhIiBnaXZlcyBhbgorCSAgICBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgQmVmb3JlIGNyZWF0aW5nIHRoZSBvcHRpb24td2luZG93LCBnbyB0byBhIG5vbi1oZWxwIHdpbmRvdy4KKwkgICAgVXNlICI6YmRlbCEiIHRvIGRlbGV0ZSB0aGUgYnVmZmVyLgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0KKworUGF0Y2ggNS40LjkKKwkgICAgSnVzdCB1cGRhdGVzIHZlcnNpb24uaC4gIFRoZSByZWFsIHBhdGNoIGhhcyBiZWVuIG1vdmVkIHRvIDUuNC54MS4KKwkgICAgVGhpcyBwYXRjaCBpcyBqdXN0IHRvIGtlZXAgdGhlIHZlcnNpb24gbnVtYmVyIGNvcnJlY3QuCisKK1BhdGNoIDUuNC4xMAorUHJvYmxlbTogICAgR1RLIEdVSTogV2hlbiAkRElTUExBWSBpcyBpbnZhbGlkLCAiZ3ZpbSAtZiIganVzdCBleGl0cy4gIEl0CisJICAgIHNob3VsZCBydW4gaW4gdGhlIHRlcm1pbmFsLgorU29sdXRpb246ICAgVXNlIGd0a19pbml0X2NoZWNrKCkgaW5zdGVhZCBvZiBndGtfaW5pdCgpLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA1LjQuMTEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgdGhlICdTJyBmbGFnIGluICdjcG9wdGlvbnMnLCAndGFic3RvcCcgaXMgbm90IGNvcGllZCB0bworCSAgICB0aGUgbmV4dCBidWZmZXIgZm9yIHNvbWUgY29tbWFuZHMsIGUuZy4sICI6YnVmZmVyIi4KK1NvbHV0aW9uOiAgIFdoZW4gdGhlIEJDT19OT0hFTFAgZmxhZyBpcyBnaXZlbiB0byBidWZfY29weV9vcHRpb25zKCksIHN0aWxsCisJICAgIGNvcHkgdGhlIG9wdGlvbnMgdXNlZCBieSBkb19oZWxwKCkgd2hlbiBuZWl0aGVyIHRoZSAiZnJvbSIgb3IgInRvIgorCSAgICBidWZmZXIgaXMgYSBoZWxwIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDUuNC4xMgorUHJvYmxlbTogICAgV2hlbiB1c2luZyAnc21hcnRpbmRlbnQnLCB0aGVyZSB3b3VsZCBiZSBubyBleHRyYSBpbmRlbnQgaWYgdGhlCisJICAgIGN1cnJlbnQgbGluZSBkaWQgbm90IGhhdmUgYW55IGluZGVudCBhbHJlYWR5LiAoSGFudXMgQWRsZXIpCitTb2x1dGlvbjogICBUaGVyZSB3YXMgYSB3cm9uZ2x5IHBsYWNlZCAiZWxzZSIsIHRoYXQgcHJldmlvdXNseSBtYXRjaGVkIHdpdGgKKwkgICAgdGhlICJpZiIgdGhhdCBzZXQgdHJ1bmNfbGluZS4gIFJlbW92ZWQgdGhlICJlbHNlIiBhbmQgYWRkZWQgYQorCSAgICBjaGVjayBmb3IgdHJ1bmNfbGluZSB0byBiZSBmYWxzZS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNS40LjEzCitQcm9ibGVtOiAgICBOZXcgU0dJIEMgY29tcGlsZXJzIG5lZWQgYW5vdGhlciBvcHRpb24gZm9yIG9wdGltaXNhdGlvbi4KK1NvbHV0aW9uOiAgIEFkZCBhIGNoZWNrIGluIGNvbmZpZ3VyZSBmb3IgIi1PUFQ6T2xpbWl0Ii4gKENoaW4gQSBZb3VuZykKK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZQorCitQYXRjaCA1LjQuMTQKK1Byb2JsZW06ICAgIE1vdGlmIEdVSTogV2hlbiB0aGUgcG9wdXAgbWVudSBpcyBwcmVzZW50LCBhIHRpbnkgd2luZG93IGFwcGVhcnMKKwkgICAgb24gdGhlIGRlc2t0b3AgZm9yIHNvbWUgdXNlcnMuCitTb2x1dGlvbjogICBTZXQgdGhlIG1lbnUgd2lkZ2V0IElEIGZvciBhIHBvcHVwIG1lbnUgdG8gMC4gKFRob21hcyBLb2VobGVyKQorRmlsZXM6CSAgICBzcmMvZ3VpX21vdGlmLmMKKworUGF0Y2ggNS40LjE1CitQcm9ibGVtOiAgICBTaW5jZSAnYmFja3NwYWNlJyBzZXQgdG8gMCBoYXMgYmVlbiBtYWRlIFZpIGNvbXBhdGlibGUsIGl0IGlzIG5vCisJICAgIGxvbmdlciBwb3NzaWJsZSB0byBvbmx5IGFsbG93IGRlbGV0aW5nIGF1dG9pbmRlbnQuCitTb2x1dGlvbjogICBNYWtlICdiYWNrc3BhY2UnIGEgbGlzdCBvZiBwYXJ0cywgdG8gYWxsb3cgZWFjaCBraW5kIG9mCisJICAgIGJhY2tzcGFjaW5nIHNlcGFyYXRlbHkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9vcHRpb24uYywgc3JjL29wdGlvbi5oLCBzcmMvcHJvdG8vb3B0aW9uLnBybywKKwkgICAgcnVudGltZS9kb2Mvb3B0aW9uLnR4dCwgcnVudGltZS9kb2MvaW5zZXJ0LnR4dAorCitQYXRjaCA1LjQuMTYKK1Byb2JsZW06ICAgIE11bHRpYnl0ZTogTG9jYWxlIHpoX1RXLkJpZzUgd2FzIG5vdCBjaGVja2VkIGZvciBpbiBjb25maWd1cmUuCitTb2x1dGlvbjogICBBZGQgemhfVFcuQmlnNSB0byBjb25maWd1cmUgY2hlY2suIChDaGloLVRzdW4gSHVhbmcpCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWd1cmUKKworUGF0Y2ggNS40LjE3CitQcm9ibGVtOiAgICBHVUk6IFdoZW4gc3RhcnRlZCBmcm9tIGluc2lkZSBndmltIHdpdGggIjohZ3ZpbSIsIFZpbSB3b3VsZCBub3QKKwkgICAgc3RhcnQuICAiOiFndmltIC1mIiB3b3JrcyBmaW5lLgorU29sdXRpb246ICAgQWZ0ZXIgZm9ya2luZywgd2FpdCBhIG1vbWVudCBpbiB0aGUgcGFyZW50IHByb2Nlc3MsIHRvIGdpdmUgdGhlCisJICAgIGNoaWxkIGEgY2hhbmNlIHRvIHNldCBpdHMgcHJvY2VzcyBncm91cC4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDUuNC4xOAorUHJvYmxlbTogICAgUHl0aG9uOiBUaGUgY2xlYXJfaGlzdG9yeSgpIGZ1bmN0aW9uIGFsc28gZXhpc3RzIGluIGEgbGlicmFyeS4KK1NvbHV0aW9uOiAgIFJlbmFtZSBjbGVhcl9oaXN0b3J5KCkgdG8gY2xlYXJfaGlzdCgpLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL2V2YWwuYywgc3JjL3Byb3RvL2V4X2dldGxuLnBybworCitQYXRjaCA1LjQuMTkKK1Byb2JsZW06ICAgIEluIGEgdGVybWluYWwgd2l0aCAyNSBsaW5lcywgdGhlcmUgaXMgYSBtb3JlIHByb21wdCBhZnRlciB0aGUKKwkgICAgQVRURU5USU9OIG1lc3NhZ2UuICBXaGVuIGhpdHRpbmcgJ3EnIGhlcmUgdGhlIGRpYWxvZyBwcm9tcHQKKwkgICAgZG9lc24ndCBhcHBlYXIgYW5kIGZpbGUgbG9hZGluZyBpcyBpbnRlcnJ1cHRlZC4gKFdpbGwgRGF5KQorU29sdXRpb246ICAgRG9uJ3QgYWxsb3cgcXVpdHRpbmcgdGhlIHByaW50aW5nIG9mIGEgbWVzc2FnZSBmb3IgdGhlIGRpYWxvZworCSAgICBwcm9tcHQuICBBZGRlZCB0aGUgbXNnX25vcXVpdF9tb3JlIGZsYWcgZm9yIHRoaXMuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNS40LjIwCitQcm9ibGVtOiAgICBHVEs6IFdoZW4gc3RhcnRpbmcgZ3ZpbSwgd291bGQgc2VuZCBlc2NhcGUgc2VxdWVuY2VzIHRvIHRoZQorCSAgICB0ZXJtaW5hbCB0byBzd2l0Y2ggdGhlIGN1cnNvciBvZmYgYW5kIG9uLgorU29sdXRpb246ICAgRG9uJ3QgY2FsbCBtc2dfc3RhcnQoKSBpZiB0aGUgR1VJIGlzIGV4cGVjdGVkIHRvIHN0YXJ0LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDUuNC4yMQorUHJvYmxlbTogICAgTW90aWY6IFRvcGxldmVsIG1lbnUgb3JkZXJpbmcgd2FzIHdyb25nIHdoZW4gdXNpbmcgdGVhci1vZmYgaXRlbXMuCitTb2x1dGlvbjogICBEb24ndCBhZGQgb25lIHRvIHRoZSBpbmRleCBmb3IgYSB0b3BsZXZlbCBtZW51LgorRmlsZXM6CSAgICBzcmMvZ3VpX21vdGlmLmMKKworUGF0Y2ggNS40LjIyCitQcm9ibGVtOiAgICBJbiBJbnNlcnQgbW9kZSwgPEMtTGVmdD4sIDxTLUxlZnQ+LCA8Qy1SaWdodD4gYW5kIDxTLVJpZ2h0PiBkaWRuJ3QKKwkgICAgdXBkYXRlIHRoZSBjb2x1bW4gdXNlZCBmb3IgdmVydGljYWwgbW92ZW1lbnQuCitTb2x1dGlvbjogICBTZXQgY3Vyd2luLT53X3NldF9jdXJzd2FudCBmb3IgdGhvc2UgY29tbWFuZHMuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNS40LjIzCitQcm9ibGVtOiAgICBXaGVuIGEgVmlzdWFsIHNlbGVjdGlvbiBpcyBsb3N0IHRvIGFub3RoZXIgcHJvZ3JhbSwgYW5kIHRoZW4gdGhlCisJICAgIHNhbWUgdGV4dCBpcyBWaXN1YWxseSBzZWxlY3RlZCBhZ2FpbiwgdGhlIGNsaXBib2FyZCBvd25lcnNoaXAKKwkgICAgd2Fzbid0IHJlZ2FpbmVkLgorU29sdXRpb246ICAgU2V0IGNsaXBib2FyZC52bW9kZSB0byBOVUwgdG8gZm9yY2UgcmVnYWluaW5nIHRoZSBjbGlwYm9hcmQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjQuMjQKK1Byb2JsZW06ICAgIEVuY3J5cHRpb246IFdoZW4gdXNpbmcgIjpyIGZpbGUiIHdoaWxlICdrZXknIGhhcyBhbHJlYWR5IGVudGVyZWQsCisJICAgIHRoZSAna2V5JyBvcHRpb24gd291bGQgYmUgbWVzc2VkIHVwLiAgV2hlbiB3cml0aW5nIHRoZSBmaWxlIGl0CisJICAgIHdvdWxkIGJlIGVuY3J5cHRlZCB3aXRoIGFuIHVua25vd24ga2V5IGFuZCBsb3N0ISAoQnJhZCBEZXNwcmVzKQorU29sdXRpb246ICAgRG9uJ3QgZnJlZSBjcnlwdGtleSB3aGVuIGl0IGlzIGVxdWFsIHRvIHRoZSAna2V5JyBvcHRpb24uCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjQuMjUKK1Byb2JsZW06ICAgIFdoZW4gJ2NpbmRlbnQnIGlzIHNldCwgYnV0ICdhdXRvaW5kZW50JyBpc24ndCwgY29tbWVudHMgYXJlIG5vdAorCSAgICBwcm9wZXJseSBpbmRlbnRlZCB3aGVuIHN0YXJ0aW5nIGEgbmV3IGxpbmUuIChNaXR0ZXJhbmQpCitTb2x1dGlvbjogICBXaGVuIHRoZXJlIGlzIGEgY29tbWVudCBsZWFkZXIgZm9yIHRoZSBuZXcgbGluZSwgYnV0ICdhdXRvaW5kZW50JworCSAgICBpc24ndCBzZXQsIGRvIEMtaW5kZW50aW5nLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA1LjQuMjYKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaXMgbmV2ZXIgcmVjb2duaXplZCBpbiBhIGZpbGUKKwkgICAgbmFtZSwgY2F1c2luZyBhIGJhY2tzbGFzaCBiZWZvcmUgaXQgdG8gYmUgcmVtb3ZlZCBvbiBXaW5kb3dzLgorU29sdXRpb246ICAgQXNzdW1lIHRoYXQgYSBsZWFkaW5nLWJ5dGUgY2hhcmFjdGVyIGlzIGEgZmlsZSBuYW1lIGNoYXJhY3RlciBpbgorCSAgICB2aW1faXNmaWxlYygpLgorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jCisKK1BhdGNoIDUuNC4yNworUHJvYmxlbTogICAgRW50cmllcyBpbiB0aGUgUG9wVXBbbnZpY10gbWVudXMgd2VyZSBhZGRlZCBmb3Igc2V2ZXJhbCBtb2RlcywgYnV0CisJICAgIG9ubHkgZGVsZXRlZCBmb3IgdGhlIG1vZGUgdGhleSB3ZXJlIHVzZWQgZm9yLiAgVGhpcyByZXN1bHRlZCBpbgorCSAgICB0aGUgIGVudHJ5IHJlbWFpbmluZyBpbiB0aGUgUG9wVXAgbWVudS4KKwkgICAgV2hlbiByZW1vdmluZyBhIFBvcFVwW252aWNdIG1lbnUsIHRoZSBuYW1lIGhhZCBiZWVuIHRydW5jYXRlZCwKKwkgICAgY291bGQgcmVzdWx0IGluIGdyZXlpbmctb3V0IHRoZSB3aG9sZSBQb3BVcCBtZW51LgorU29sdXRpb246ICAgUmVtb3ZlIGVudHJpZXMgZm9yIGFsbCBtb2RlcyBmcm9tIHRoZSBQb3BVcFtudmljXSBtZW51cy4gIFJlbW92ZQorCSAgICB0aGUgUG9wVXBbbnZpY10gbWVudSBlbnRyaWVzIGZpcnN0LCBiZWZvcmUgdGhlIG5hbWUgaXMgY2hhbmdlZC4KK0ZpbGVzOgkgICAgc3JjL21lbnUuYworCitQYXRjaCA1LjQuMjgKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSBCdWZXcml0ZVByZSBhdXRvY29tbWFuZCB0byBjaGFuZ2UgJ2ZpbGVmb3JtYXQnLCB0aGUKKwkgICAgbmV3IHZhbHVlIHdvdWxkIG5vdCBiZSB1c2VkIGZvciB3cml0aW5nIHRoZSBmaWxlLgorU29sdXRpb246ICAgQ2hlY2sgJ2ZpbGVmb3JtYXQnIGFmdGVyIGV4ZWN1dGluZyB0aGUgYXV0b2NvbW1hbmRzIGluc3RlYWQgb2YKKwkgICAgYmVmb3JlLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS40LjI5CitQcm9ibGVtOiAgICBBdGhlbmEgR1VJOiBXaGVuIHJlbW92aW5nIHRoZSAnZycgZmxhZyBmcm9tICdndWlvcHRpb25zJywgdXNpbmcgYQorCSAgICBtZW51IGNhbiByZXN1bHQgaW4gYSBjcmFzaC4KK1NvbHV0aW9uOiAgIEFsd2F5cyBncmV5LW91dCBtZW51cyBmb3IgQXRoZW5hLCBkb24ndCBoaWRlIHRoZW0uCitGaWxlczoJICAgIHNyYy9tZW51LmMKKworUGF0Y2ggNS40LjMwCitQcm9ibGVtOiAgICBCZU9TOiBTdXNwZW5kaW5nIFZpbSB3aXRoIENUUkwtWiBkaWRuJ3Qgd29yayAoa2lsbGVkIFZpbSkuICBUaGUKKwkgICAgZmlyc3QgY2hhcmFjdGVyIHR5cGVkIGFmdGVyICI6c2giIGdvZXMgdG8gVmltLCBpbnN0ZWFkIG9mIHRoZQorCSAgICBzdGFydGVkIHNoZWxsLgorU29sdXRpb246ICAgRG9uJ3Qgc3VzcGVuZCBWaW0sIHN0YXJ0IGEgbmV3IHNoZWxsLiAgS2lsbCB0aGUgYXN5bmMgcmVhZCB0aHJlYWQKKwkgICAgd2hlbiBzdGFydGluZyBhIG5ldyBzaGVsbC4gIEl0IHdpbGwgYmUgcmVzdGFydGVkIGxhdGVyLiAoV2lsbCBEYXkpCitGaWxlczoJICAgIHNyYy9vc191bml4LmMsIHNyYy91aS5jCisKK1BhdGNoIDUuNC4zMQorUHJvYmxlbTogICAgR1VJOiBXaGVuICdtb3VzZWZvY3VzJyBpcyBzZXQsIG1vdmluZyB0aGUgbW91c2Ugb3ZlciB3aGVyZSBhCisJICAgIHdpbmRvdyBib3VuZGFyeSB3YXMsIGNhdXNlcyBhIGhpdC1lbnRlciBwcm9tcHQgdG8gYmUgZmluaXNoZWQuCisJICAgIChKZWZmIFdhbGtlcikKK1NvbHV0aW9uOiAgIERvbid0IHVzZSAnbW91c2Vmb2N1cycgYXQgdGhlIGhpdC1lbnRlciBwcm9tcHQuICBBbHNvIGlnbm9yZSBpdAorCSAgICBmb3IgdGhlIG1vcmUgcHJvbXB0IGFuZCBhIGZldyBvdGhlciBzaXR1YXRpb25zLiAgV2hlbiBhbiBvcGVyYXRvcgorCSAgICBpcyBwZW5kaW5nLCBhYm9ydCBpdCBmaXJzdC4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDUuNC4zMgorUHJvYmxlbTogICAgVW5peDogJExERkxBR1Mgd2FzIG5vdCBwYXNzZWQgdG8gY29uZmlndXJlLgorU29sdXRpb246ICAgUGFzcyAkTERGTEFHUyB0byBjb25maWd1cmUganVzdCBsaWtlICRDRkxBR1MuIChKb24gTWluZXIpCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA1LjQuMzMKK1Byb2JsZW06ICAgIFVuaXg6IEFmdGVyIGV4cGFuZGluZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBzaGVsbCwgdGhlCisJICAgIG5leHQgZXhwYW5zaW9uIHdvdWxkIGFsc28gdXNlIHRoZSBzaGVsbCwgZXZlbiB0aG91Z2ggaXQgaXMgbm90CisJICAgIG5lZWRlZC4KK1NvbHV0aW9uOiAgIFJlc2V0ICJyZWN1cnNpdmUiIGJlZm9yZSByZXR1cm5pbmcgZnJvbSBnZW5fZXhwYW5kX3dpbGRjYXJkcygpLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA1LjQuMzQgKGFsc28gc2VlIDUuNC54NSkKK1Byb2JsZW06ICAgIFdoZW4gZWRpdGluZyBhIGZpbGUsIGFuZCB0aGUgZmlsZSBuYW1lIGlzIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5CisJICAgIGFib3ZlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdGhlIGZpbGUgbmFtZSB3YXMgbWFkZSBhYnNvbHV0ZS4KKwkgICAgKEdyZWdvcnkgTWFyZ28pCitTb2x1dGlvbjogICBBZGQgYW4gYXJndW1lbnQgdG8gc2hvcnRlbl9mbmFtZXMoKSB3aGljaCBpbmRpY2F0ZXMgaWYgYWxsIGZpbGUKKwkgICAgbmFtZXMgc2hvdWxkIGJlIHNob3J0ZW5lZCwgb3Igb25seSBhYnNvbHV0ZSBuYW1lcy4gIEluIG1haW4oKSBvbmx5CisJICAgIHVzZSBzaG9ydGVuX2ZuYW1lcygpIHRvIHNob3J0ZW4gYWJzb2x1dGUgbmFtZXMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZmlsZWlvLmMsIHNyYy9tYWluLmMsIHNyYy9wcm90by9maWxlaW8ucHJvCisKK1BhdGNoIDUuNC4zNQorUHJvYmxlbTogICAgVGhlcmUgaXMgbm8gZnVuY3Rpb24gdG8gZ2V0IHRoZSBjdXJyZW50IGZpbGUgc2l6ZS4KK1NvbHV0aW9uOiAgIEFsbG93IHVzaW5nIGxpbmUyYnl0ZSgpIHdpdGggdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZSBwbHVzCisJICAgIG9uZS4gIFRoaXMgcmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBsaW5lIHBhc3QgdGhlIGVuZCBvZiB0aGUKKwkgICAgZmlsZSwgd2hpY2ggaXMgdGhlIGZpbGUgc2l6ZSBwbHVzIG9uZS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgcnVudGltZS9kb2MvZXZhbC50eHQKKworUGF0Y2ggNS40LjM2CitQcm9ibGVtOiAgICBDb21wYXJpbmcgc3RyaW5ncyB3aGlsZSBpZ25vcmluZyBjYXNlIGRpZG4ndCB3b3JrIGNvcnJlY3RseSBmb3IKKwkgICAgc29tZSBtYWNoaW5lcy4gKE1pZGUgU3RlZWQpCitTb2x1dGlvbjogICB2aW1fc3RyaWNtcCgpIGFuZCB2aW1fc3RybmljbXAoKSBvbmx5IHJldHVybmVkIDAgb3IgMS4gIENoYW5nZWQKKwkgICAgdGhlbSB0byByZXR1cm4gLTEgd2hlbiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgc21hbGxlci4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNS40LjM3IChhbHNvIHNlZSA1LjQuNDAgYW5kIDUuNC40MykKK1Byb2JsZW06ICAgIExvbmcgc3RyaW5ncyBmcm9tIHRoZSB2aW1pbmZvIGZpbGUgYXJlIHRydW5jYXRlZC4KK1NvbHV0aW9uOiAgIFdoZW4gd3JpdGluZyBhIGxvbmcgc3RyaW5nIHRvIHRoZSB2aW1pbmZvIGZpbGUsIGZpcnN0IHdyaXRlIGEgbGluZQorCSAgICB3aXRoIHRoZSBsZW5ndGgsIHRoZW4gdGhlIHN0cmluZyBpdHNlbGYgaW4gYSBzZWNvbmQgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9tYXJrLmMsIHNyYy9vcHMuYywKKwkgICAgc3JjL3NlYXJjaC5jLCBzcmMvcHJvdG8vZXhfY21kcy5wcm8sIHJ1bnRpbWUvc3ludGF4L3ZpbWluZm8udmltCisKK1BhdGNoIDUuNC4zOAorUHJvYmxlbTogICAgSW4gdGhlIG9wdGlvbi13aW5kb3csICI6c2V0IGdvJiIgcmVzdWx0ZWQgaW4gJ2dvJyBiZWluZyBoYW5kbGVkCisJICAgIGxpa2UgYSBib29sZWFuIG9wdGlvbi4KKwkgICAgTWFwcGluZ3MgZm9yIDxTcGFjZT4gYW5kIDxDUj4gd2VyZSBvdmVycnVsZWQgYnkgdGhlIG9wdGlvbi13aW5kb3cuCitTb2x1dGlvbjogICBXaGVuIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24gaXNuJ3QgMCBvciAxLCBkb24ndCBoYW5kbGUgaXQgbGlrZSBhCisJICAgIGJvb2xlYW4gb3B0aW9uLgorCSAgICBTYXZlIGFuZCByZXN0b3JlIG1hcHBpbmdzIGZvciA8U3BhY2U+IGFuZCA8Q1I+IHdoZW4gZW50ZXJpbmcgYW5kCisJICAgIGxlYXZpbmcgdGhlIG9wdGlvbi13aW5kb3cuCitGaWxlczoJICAgIHJ1bnRpbWUvb3B0d2luLnZpbQorCitQYXRjaCA1LjQuMzkKK1Byb2JsZW06ICAgIFdoZW4gc2V0dGluZyBhIGhpZGRlbiBvcHRpb24sIHNwYWNlcyBiZWZvcmUgdGhlIGVxdWFsIHNpZ24gd2VyZQorCSAgICBub3Qgc2tpcHBlZCBhbmQgY2F1c2UgYW4gZXJyb3IgbWVzc2FnZS4gIEUuZy4sICI6c2V0IGNzcHJnID1jbWQiLgorU29sdXRpb246ICAgV2hlbiBza2lwcGluZyBvdmVyIGEgaGlkZGVuIG9wdGlvbiwgY2hlY2sgZm9yIGEgZm9sbG93aW5nICI9dmFsIgorCSAgICBhbmQgc2tpcCBpdCB0b28uCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA1LjQuNDAgKGRlcGVuZHMgb24gNS40LjM3KQorUHJvYmxlbTogICAgQ29tcGlsZXIgZXJyb3IgZm9yICJhdG9sKHAgKyAxKSIuIChBeGVsIEtpZWxob3JuKQorU29sdXRpb246ICAgQWRkIGEgdHlwZWNhc3Q6ICJhdG9sKChjaGFyICopcCArIDEpIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA1LjQuNDEKK1Byb2JsZW06ICAgIFNvbWUgY29tbWFuZHMgdGhhdCB3ZXJlIG5vdCBpbmNsdWRlZCB3b3VsZCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UsCisJICAgIGV2ZW4gd2hlbiBhZnRlciAiaWYgMCIuCitTb2x1dGlvbjogICBEb24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIHVuc3VwcG9ydGVkIGNvbW1hbmQgd2hlbiBub3QKKwkgICAgZXhlY3V0aW5nIHRoZSBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjQuNDIKK1Byb2JsZW06ICAgICI6dyIgd291bGQgYWxzbyBjYXVzZSBhIHRydW5jYXRlZCBtZXNzYWdlIHRvIGFwcGVhciBpbiB0aGUgbWVzc2FnZQorCSAgICBoaXN0b3J5LgorU29sdXRpb246ICAgRG9uJ3QgcHV0IGEga2VwdCBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIGhpc3Rvcnkgd2hlbiBpdCBzdGFydHMKKwkgICAgd2l0aCAiPCIuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNS40LjQzIChkZXBlbmRzIG9uIDUuNC4zNykKK1Byb2JsZW06ICAgIE1peGluZyBsb25nIGxpbmVzIHdpdGggbXVsdGlwbGUgbGluZXMgaW4gYSByZWdpc3RlciBjYXVzZXMgZXJyb3JzCisJICAgIHdoZW4gd3JpdGluZyB0aGUgdmltaW5mbyBmaWxlLiAoUm9iaW5zb24pCitTb2x1dGlvbjogICBXaGVuIHJlYWRpbmcgdGhlIHZpbWluZm8gZmlsZSB0byBza2lwIHJlZ2lzdGVyIGNvbnRlbnRzLCBza2lwCisJICAgIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCAiPCIuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA1LjQuNDQKK1Byb2JsZW06ICAgIFdoZW4gJ3doaWNod3JhcCcgaW5jbHVkZXMgJ34nLCBhICJ+IiBjb21tYW5kIHRoYXQgZ29lcyBvbiB0byB0aGUKKwkgICAgbmV4dCBsaW5lIGNhbm5vdCBiZSBwcm9wZXJseSB1bmRvbmUuIChaZWxsbmVyKQorU29sdXRpb246ICAgU2F2ZSBlYWNoIGxpbmUgZm9yIHVuZG8gaW4gbl9zd2FwY2hhcigpLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS40LjQ1IChhbHNvIHNlZSA1LjQueDgpCitQcm9ibGVtOiAgICBXaGVuIGV4cGFuZCgiJEFTREYiKSBmYWlscywgdGhlcmUgaXMgYW4gZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgZ2xvYmFsIGV4cGFuZF9pbnRlcmFjdGl2ZWx5LiAgUGFzcyBhIGZsYWcgZG93biB0byBza2lwCisJICAgIHRoZSBlcnJvciBtZXNzYWdlLgorCSAgICBBbHNvOiBleHBhbmQoIiRBU0RGIikgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgJEFTREYgaXNuJ3Qgc2V0LgorCSAgICBQcmV2aW91c2x5IGl0IHJldHVybmVkICIkQVNERiIgd2hlbiAnc2hlbGwnIGlzICJzaCIuCisJICAgIEFsc286IHN5c3RlbSgpIGRvZXNuJ3QgcHJpbnQgYW4gZXJyb3Igd2hlbiB0aGUgY29tbWFuZCByZXR1cm5zIGFuCisJICAgIGVycm9yIGNvZGUuCitGaWxlczoJICAgIG1hbnkKKworUGF0Y2ggNS40LjQ2CitQcm9ibGVtOiAgICBCYWNrc3BhY2luZyBkaWQgbm90IGFsd2F5cyB1c2UgJ3NvZnR0YWJzdG9wJyBhZnRlciBoaXR0aW5nIDxDUj4sCisJICAgIGluc2VydGluZyBhIHJlZ2lzdGVyLCBtb3ZpbmcgdGhlIGN1cnNvciwgZXRjLgorU29sdXRpb246ICAgUmVzZXQgaW5zZXJ0ZWRfc3BhY2UgbXVjaCBtb3JlIG9mdGVuIGluIGVkaXQoKS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA1LjQuNDcKK1Byb2JsZW06ICAgIFdoZW4gZXhlY3V0aW5nIEJ1ZldyaXRlUHJlIG9yIEJ1ZldyaXRlUG9zdCBhdXRvY29tbWFuZHMgZm9yIGEKKwkgICAgaGlkZGVuIGJ1ZmZlciwgdGhlIGN1cnNvciBjb3VsZCBiZSBtb3ZlZCB0byBhIG5vbi1leGlzdGluZworCSAgICBwb3NpdGlvbi4gKFZpbmNlIE5lZ3JpKQorU29sdXRpb246ICAgU2F2ZSBhbmQgcmVzdG9yZSB0aGUgY3Vyc29yIGFuZCB0b3BsaW5lIGZvciB0aGUgY3VycmVudCB3aW5kb3cKKwkgICAgd2hlbiBpdCBpcyBnb2luZyB0byBiZSB1c2VkIHRvIGV4ZWN1dGUgYXV0b2NvbW1hbmRzIGZvciBhIGhpZGRlbgorCSAgICBidWZmZXIuICBVc2UgYW4gZXhpc3Rpbmcgd2luZG93IGZvciB0aGUgYnVmZmVyIHdoZW4gaXQncyBub3QKKwkgICAgaGlkZGVuLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS40LjQ4CitQcm9ibGVtOiAgICBBIHBhc3RlIHdpdGggdGhlIG1vdXNlIGluIEluc2VydCBtb2RlIHdhcyBub3QgcmVwZWF0ZWQgZXhhY3RseSB0aGUKKwkgICAgc2FtZSB3aXRoICIuIi4gIEZvciBleGFtcGxlLCB3aGVuICdhdXRvaW5kZW50JyBpcyBzZXQgYW5kIHBhc3RpbmcKKwkgICAgdGV4dCB3aXRoIGxlYWRpbmcgaW5kZW50LiAoUGVycnkpCitTb2x1dGlvbjogICBBZGQgdGhlIENUUkwtUiBDVFJMLU8gciBhbmQgQ1RSTC1SIENUUkwtUCByIGNvbW1hbmRzIGluIEluc2VydAorCSAgICBtb2RlLCB3aGljaCBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgbGl0ZXJhbGx5LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvbm9ybWFsLmMsIHJ1bnRpbWUvZG9jL2luc2VydC50eHQKKworUGF0Y2ggNS40LjQ5CitQcm9ibGVtOiAgICBXaGVuIHBhc3RpbmcgdGV4dCB3aXRoIFsgPE1pZGRsZU1vdXNlPiwgdGhlIGN1cnNvciBjb3VsZCBlbmQgdXAKKwkgICAgYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lLgorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgY3Vyc29yIHBvc2l0aW9uIGZvciB0aGUgY2hhbmdlIGluIGluZGVudC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNC54MSAobm90ZTogUmVwbGFjZXMgcGF0Y2ggNS40LjkpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IG1lbnUgaGludHMgd2VyZSBuZXZlciB1c2VkLCBiZWNhdXNlIFdBTlRfTUVOVSBpcyBub3QKKwkgICAgZGVmaW5lZCB1bnRpbCB2aW0uaCBpcyBpbmNsdWRlZC4KK1NvbHV0aW9uOiAgIE1vdmUgdGhlICNpZmRlZiBXQU5UX01FTlUgZnJvbSB3aGVyZSBNRU5VSElOVFMgaXMgZGVmaW5lZCB0byB3aGVyZQorCSAgICBpdCBpcyB1c2VkLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNC54MgorUHJvYmxlbTogICAgQmVPUzogV2hlbiBwYXN0aW5nIHRleHQsIG9uZSBjaGFyYWN0ZXIgd2FzIG1vdmVkIHRvIHRoZSBlbmQuCitTb2x1dGlvbjogICBSZS1lbmFibGUgdGhlIEJlT1MgY29kZSBpbiBmaWxsX2lucHV0X2J1ZigpLCBhbmQgZml4IHRpbWluZyBvdXQKKwkgICAgd2l0aCBhY3F1aXJlX3NlbV9ldGMoKS4gKFdpbGwgRGF5KQorRmlsZXM6CSAgICBzcmMvb3NfYmVvcy5jLCBzcmMvdWkuYworCitQYXRjaCA1LjQueDMKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiBkcm9wcGluZyBhIGRpcmVjdG9yeSBvbiBhIHJ1bm5pbmcgZ3ZpbSBpdCBjcmFzaGVzLgorU29sdXRpb246ICAgQXZvaWQgdXNpbmcgYSBOVUxMIGZpbGUgbmFtZS4gIEFsc28gZGlzcGxheSBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUKKwkgICAgdGhhdCB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2FzIGNoYW5nZWQuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS40Lng0CitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFJlbW92aW5nIGFuIGl0ZW0gZnJvbSB0aGUgcG9wdXAgbWVudSBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBEb24ndCByZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgbWVudWJhciwgYnV0IGZyb20gdGhlIHBhcmVudCBwb3B1cAorCSAgICBtZW51LgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNC54NSAoYWRkaXRpb24gdG8gNS40LjM0KQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNC54NgorUHJvYmxlbTogICAgV2luMzI6IEV4cGFuZGluZyAoZGlyKW5hbWUgc3RhcnRpbmcgd2l0aCBhIGRvdCBkb2Vzbid0IHdvcmsuCisJICAgIChNY0Nvcm1hY2spICBPbmx5IHdoZW4gdGhlcmUgaXMgYSBwYXRoIGJlZm9yZSBpdC4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgY2hlY2ssIGRvbmUgYmVmb3JlIGV4cGFuc2lvbiwgaWYgdGhlIGZpbGUgbmFtZSBwYXR0ZXJuCisJICAgIHN0YXJ0cyB3aXRoIGEgZG90LgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA1LjQueDcKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogUmVtb3ZpbmcgIkVkaXQgd2l0aCBWaW0iIGZyb20gcmVnaXN0cnkgaXMgZGlmZmljdWx0LgorU29sdXRpb246ICAgQWRkIHVuaW5zdGFsbCBwcm9ncmFtIHRvIHJlbW92ZSB0aGUgcmVnaXN0cnkga2V5cy4gSXQgaXMgaW5zdGFsbGVkCisJICAgIGluIHRoZSAiQWRkL1JlbW92ZSBwcm9ncmFtcyIgbGlzdCBmb3IgZWFzZSBvZiB1c2UuCisJICAgIEFsc286IGRvbid0IHNldCAkVklNIHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgd2l0aCB0aGUgcnVudGltZSBmaWxlcy4KKwkgICAgQWxzbzogQWRkIGEgdGV4dCBmaWxlIHdpdGggYSBzdGVwLWJ5LXN0ZXAgZGVzY3JpcHRpb24gb2YgaG93IHRvCisJICAgIHVuaW5zdGFsbCBWaW0gZm9yIERPUyBhbmQgV2luZG93cy4KK0ZpbGVzOgkgICAgc3JjL3VuaW5zdGFsLmMsIHNyYy9kb3NpbnN0LmMsIHNyYy9NYWtlZmlsZS53MzIsIHVuaW5zdGFsLnR4dAorCitQYXRjaCA1LjQueDggKGFkZGl0aW9uIHRvIDUuNC40NSkKK0ZpbGVzOgkgICAgbWFueQorCitQYXRjaCA1LjQueDkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogQWZ0ZXIgZXhlY3V0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQsIGZvY3VzIGlzIG5vdAorCSAgICBhbHdheXMgcmVnYWluZWQgKHdoZW4gdXNpbmcgZm9jdXMtZm9sbG93cy1tb3VzZSkuCitTb2x1dGlvbjogICBBZGQgU2V0Rm9jdXMoKSBpbiBtY2hfc3lzdGVtKCkuIChNaWtlIFN0ZWVkKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCisKK1BhdGNoIDUuNWEuMQorUHJvYmxlbTogICAgIjpsZXQgQCogPSBAOiIgZGlkIG5vdCB3b3JrLiAgVGhlIHRleHQgd2FzIG5vdCBwdXQgb24gdGhlCisJSSAgIGNsaXBib2FyZC4gIChGaXNoZXIpCitTb2x1dGlvbjogICBPd24gdGhlIGNsaXBib2FyZCBhbmQgcHV0IHRoZSB0ZXh0IG9uIGl0LgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNS41YS4yCitQcm9ibGVtOiAgICBhcHBlbmQoKSBkaWQgbm90IG1hcmsgdGhlIGJ1ZmZlciBtb2RpZmllZC4gIE1hcmtzIGJlbG93IHRoZQorCSAgICBuZXcgbGluZSB3ZXJlIG5vdCBhZGp1c3RlZC4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgZl9hcHBlbmQoKSBmdW5jdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA1LjVhLjMKK1Byb2JsZW06ICAgIEVkaXRpbmcgY29tcHJlc3NlZCAiLmd6IiBmaWxlcyBkb2Vzbid0IHdvcmsgb24gbm9uLVVuaXggc3lzdGVtcywKKwkgICAgYmVjYXVzZSB0aGVyZSBpcyBubyAibXYiIGNvbW1hbmQuCitTb2x1dGlvbjogICBBZGQgdGhlIHJlbmFtZSgpIGZ1bmN0aW9uIGFuZCB1c2UgaXQgaW5zdGVhZCBvZiAiOiFtdiIuCisJICAgIEFsc286IERpc2FibGUgdGhlIGF1dG9tYXRpYyBqdW1wIHRvIHRoZSBsYXN0IHBvc2l0aW9uLCBiZWNhdXNlIGl0CisJICAgIGNoYW5nZXMgdGhlIGp1bXBsaXN0LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBydW50aW1lL2RvYy9ldmFsLnR4dCwgcnVudGltZS92aW1yY19leGFtcGxlLnZpbQorCitQYXRjaCA1LjVhLjQKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgd2hvbGUtbGluZSBjb21wbGV0aW9uIGluIGluc2VydCBtb2RlIHdoaWxlIHRoZSBjdXJzb3IKKwkgICAgaXMgaW4gdGhlIGluZGVudCwgZ2V0ICJvdXQgb2YgbWVtb3J5IiBlcnJvci4gKFN0ZWtydCkKK1NvbHV0aW9uOiAgIERvbid0IGFsbG9jYXRlIGEgbmVnYXRpdmUgYW1vdW50IG9mIG1lbW9yeSBpbiBpbnNfY29tcGxldGUoKS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA1LjVhLjUKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgJ3BhdGgnIG9wdGlvbiBjYW4gaG9sZCBvbmx5IHVwIHRvIDI1NiBjaGFyYWN0ZXJzLAorCSAgICBiZWNhdXNlIF9NQVhfUEFUSCBpcyAyNTYuICAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBVc2UgYSBmaXhlZCBwYXRoIGxlbmd0aCBvZiAxMDI0LgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuaAorCitQYXRjaCA1LjVhLjYKK1Byb2JsZW06ICAgIENvbXBpbGluZyB3aXRoIGdjYyBvbiBXaW4zMiwgdXNpbmcgdGhlIFVuaXggTWFrZWZpbGUsIGRpZG4ndCB3b3JrLgorU29sdXRpb246ICAgQWRkICQoU1VGRklYKSB0byBhbGwgcGxhY2VzIHdoZXJlIGFuIGV4ZWN1dGFibGUgaXMgdXNlZC4gIEFsc28KKwkgICAgcGFzcyBpdCB0byBjdGFncy4gIChSZXlub2xkcykKK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDUuNWEuNworUHJvYmxlbTogICAgV2hlbiB1c2luZyAiY2F0IHwgdmltIC0iIGluIGFuIHh0ZXJtLCB0aGUgeHRlcm0gdmVyc2lvbiByZXBseQorCSAgICB3b3VsZCBlbmQgdXAgaW4gdGhlIGZpbGUuCitTb2x1dGlvbjogICBSZWFkIHRoZSBmaWxlIGZyb20gc3RkaW4gYmVmb3JlIHN3aXRjaGluZyB0aGUgdGVybWluYWwgdG8gUkFXCisJICAgIG1vZGUuICBTaG91bGQgYWxzbyBhdm9pZCBwcm9ibGVtcyB3aXRoIHByb2dyYW1zIHRoYXQgdXNlIGEKKwkgICAgc3BlY2lmaWMgdGVybWluYWwgc2V0dGluZy4KKwkgICAgQWxzbzogd2hlbiB1c2luZyB0aGUgR1VJLCBwcmludCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uIiBpbiB0aGUgR1VJCisJICAgIHdpbmRvdywgdG8gZ2l2ZSBhIGhpbnQgd2h5IGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCitGaWxlczoJICAgIHNyYy9tYWluLmMsIHNyYy9maWxlaW8uYworCitQYXRjaCA1LjVhLjgKK1Byb2JsZW06ICAgIE9uIG11bHRpLXRocmVhZGVkIFNvbGFyaXMsIHN1c3BlbmRpbmcgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgQ2FsbCBwYXVzZSgpIHdoZW4gdGhlIFNJR0NPTlQgc2lnbmFsIHdhcyBub3QgcmVjZWl2ZWQgYWZ0ZXIKKwkgICAgc2VuZGluZyB0aGUgU0lHVFNUUCBzaWduYWwuIChOYWdhbm8pCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS41YS45CitQcm9ibGVtOiAgICAnd2luYWx0a2V5cycgY291bGQgYmUgc2V0IHRvIGFuIGVtcHR5IGFyZ3VtZW50LCB3aGljaCBpcyBpbGxlZ2FsLgorU29sdXRpb246ICAgR2l2ZSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gZG9pbmcgIjpzZXQgd2luYWx0a2V5cz0iLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNS41YS4xMAorUHJvYmxlbTogICAgV2luMzIgY29uc29sZTogVXNpbmcgQUxUR1Igb24gYSBHZXJtYW4ga2V5Ym9hcmQgdG8gcHJvZHVjZSAifSIKKwkgICAgZG9lc24ndCB3b3JrLCBiZWNhdXNlIHRoZSA4dGggYml0IGlzIHNldCB3aGVuIEFMVCBpcyBwcmVzc2VkLgorU29sdXRpb246ICAgRG9uJ3Qgc2V0IHRoZSA4dGggYml0IHdoZW4gQUxUIGFuZCBDVFJMIGFyZSB1c2VkLiAoTGVpcGVydCkKK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNS41YS4xMQorUHJvYmxlbTogICAgVGNsOiBDb25maWd1cmUgYWx3YXlzIHVzZXMgdGNsc2g4LjAuCisJICAgIEFsc286IExvYWRpbmcgYSBsaWJyYXJ5IGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEFkZCAiLS13aXRoLXRjbHNoIiBjb25maWd1cmUgYXJndW1lbnQgdG8gYWxsb3cgc3BlY2lmeWluZyBhbm90aGVyCisJICAgIG5hbWUgZm9yIHRoZSB0Y2wgc2hlbGwuCisJICAgIENhbGwgVGNsX0luaXQoKSBpbiB0Y2xpbml0KCkgdG8gbWFrZSBsb2FkaW5nIGxpYnJhcmllcyB3b3JrLgorCSAgICAoSm9oYW5uZXMgWmVsbG5lcikKK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZSwgc3JjL2lmX3RjbC5jCisKK1BhdGNoIDUuNWEuMTIKK1Byb2JsZW06ICAgIFRoZSAidXNlcl9jb21tYW5kcyIgZmVhdHVyZSBpcyBjYWxsZWQgInVzZXItY29tbWFuZHMiLgorU29sdXRpb246ICAgUmVwbGFjZSAidXNlci1jb21tYW5kcyIgd2l0aCAidXNlcl9jb21tYW5kcyIuIChLaW0gU3VuZy1ib20pCisJICAgIEtlZXAgInVzZXItY29tbWFuZHMiIGZvciB0aGUgaGFzKCkgZnVuY3Rpb24sIHRvIHJlbWFpbiBiYWNrd2FyZHMKKwkgICAgY29tcGF0aWJsZSB3aXRoIDUuNC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL3ZlcnNpb24uYworCitQYXRjaCA1LjVhLjEzCitQcm9ibGVtOiAgICBPUy8yOiBXaGVuICRIT01FIGlzIG5vdCBkZWZpbmVkLCAiQzovIiBpcyB1c2VkIGZvciB0aGUgdmltaW5mbworCSAgICBmaWxlLiAgVGhhdCBpcyB2ZXJ5IHdyb25nIHdoZW4gT1MvMiBpcyBvbiBhbm90aGVyIHBhcnRpdGlvbi4KK1NvbHV0aW9uOiAgIFVzZSAkVklNIGZvciB0aGUgdmltaW5mbyBmaWxlIHdoZW4gaXQgaXMgZGVmaW5lZCwgbGlrZSBmb3IgTVNET1MuCisJICAgIEFsc286IE1ha2VmaWxlLm9zMiBkaWRuJ3QgZGVwZW5kIG9uIG9zX3VuaXguaC4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguaCwgc3JjL01ha2VmaWxlLm9zMgorCitQYXRjaCA1LjVhLjE0CitQcm9ibGVtOiAgICBBdGhlbmEsIE1vdGlmIGFuZCBHVEs6IFRoZSBNb3VzZSBzY3JvbGwgd2hlZWwgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgSW50ZXJwcmV0IGEgY2xpY2sgb2YgdGhlIHdoZWVsIGFzIGEga2V5IHByZXNzIG9mIHRoZSA8TW91c2VEb3duPgorCSAgICBvciA8TW91c2VVcD4ga2V5cy4gIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gc2Nyb2xsIHRocmVlIGxpbmVzLCBvcgorCSAgICBhIGZ1bGwgcGFnZSB3aGVuIFNoaWZ0IGlzIHVzZWQuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZ3VpLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLAorCSAgICBzcmMvZ3VpX3gxMS5jLCBzcmMva2V5bWFwLmgsIHNyYy9tZXNzYWdlLmMsIHNyYy9taXNjMS5jLAorCSAgICBzcmMvbWlzYzIuYywgc3JjL25vcm1hbC5jLCAgc3JjL3Byb3RvL25vcm1hbC5wcm8sIHNyYy92aW0uaCwKKwkgICAgcnVudGltZS9kb2Mvc2Nyb2xsLnR4dAorCitQYXRjaCA1LjVhLjE1CitQcm9ibGVtOiAgICBVc2luZyBDVFJMLUEgaW4gSW5zZXJ0IG1vZGUgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSBpbnNlcnQKKwkgICAgc3RhcnRlZCB3aXRoIHRoZSA8SW5zZXJ0PiBrZXkuIChBbmRyZWFzIFJvaHJzY2huZWlkZXIpCitTb2x1dGlvbjogICBSZXBsYWNlIDxJbnNlcnQ+IHdpdGggImkiIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSByZWRvIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNWEuMTYKK1Byb2JsZW06ICAgIFZNUzogR1VJIGRvZXMgbm90IGNvbXBpbGUgYW5kIHJ1bi4KK1NvbHV0aW9uOiAgIFZhcmlvdXMgZml4ZXMuIChab2x0YW4gQXJwYWRmZnkpCisJICAgIE1vdmVkIGZ1bmN0aW9ucyBmcm9tIG9zX3VuaXguYyB0byB1aS5jLCBzbyB0aGF0IFZNUyBjYW4gdXNlIHRoZW0KKwkgICAgdG9vOiBvcGVuX2FwcF9jb250ZXh0KCksIHgxMV9zZXR1cF9hdG9tcygpIGFuZCBjbGlwX3gxMSogZnVuY3Rpb25zLgorCSAgICBNYWRlIHh0ZXJtX2RweSBnbG9iYWwsIGl0J3Mgbm93IHVzZWQgYnkgdWkuYyBhbmQgb3NfdW5peC5jLgorCSAgICBVc2UgZ2V0aG9zdG5hbWUoKSBhbHdheXMsIHN5c19ob3N0bmFtZSBkb2Vzbid0IGV4aXN0LgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oLCBzcmMvZ3VpX3gxMS5jLCBzcmMvb3Nfdm1zLm1tcywgc3JjL29zX3VuaXguYywKKwkgICAgc3JjL29zX3Ztcy5jLCBzcmMvdWkuYywgc3JjL3Byb3RvL29zX3VuaXgucHJvLCBzcmMvcHJvdG8vdWkucHJvCisKK1JlbmFtZWQgQWRqdXN0Q3Vyc29yRm9yTXVsdGlCeXRlQ2hhcmFjdGVyKCkgdG8gQWRqdXN0Q3Vyc29yRm9yTXVsdGlCeXRlQ2hhcigpCit0byBhdm9pZCBzeW1ib2wgbGVuZ3RoIGxpbWl0IG9mIDMxIGNoYXJhY3RlcnMuIChTdGV2ZSBQLiBXYWxsKQorCitQYXRjaCA1LjViLjEKK1Byb2JsZW06ICAgIFNBU0MgY29tcGxhaW5zIGFib3V0IGRlYWQgYXNzaWdubWVudHMgYW5kIGltcGxpY2l0IHR5cGUgY2FzdHMuCitTb2x1dGlvbjogICBSZW1vdmVkIHRoZSBkZWFkIGFzc2lnbm1lbnRzLiAgQWRkZWQgZXhwbGljaXQgdHlwZSBjYXN0cy4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZWRpdC5jLCBzcmMvZXZhbC5jLCBzcmMvZXhfY21kcy5jLAorCSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL2ZpbGVpby5jLCBzcmMvZ2V0Y2hhci5jLCBzcmMvbWVtbGluZS5jLAorCSAgICBzcmMvbWVudS5jLCBzcmMvbWlzYzEuYywgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMsIHNyYy9xdWlja2ZpeC5jLAorCSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNS41Yi4yCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICJDVFJMLU8gTyIgaW4gSW5zZXJ0IG1vZGUsIGhpdCA8RXNjPiBhbmQgdGhlbiAibyIgaW4KKwkgICAgYW5vdGhlciBsaW5lIHRydW5jYXRlcyB0aGF0IGxpbmUuIChEZXZpbiBXZWF2ZXIpCitTb2x1dGlvbjogICBXaGVuIHVzaW5nIGEgY29tbWFuZCB0aGF0IHN0YXJ0cyBJbnNlcnQgbW9kZSBmcm9tIENUUkwtTywgcmVzZXQKKwkgICAgInJlc3RhcnRfZWRpdCIgZmlyc3QuICBUaGlzIGF2b2lkcyB0aGF0IGVkaXQoKSBpcyBjYWxsZWQgd2l0aCBhCisJICAgIG1peCBvZiBzdGFydGluZyBhIG5ldyBlZGl0IGNvbW1hbmQgYW5kIHJlc3RhcnRpbmcgYSBwcmV2aW91cyBvbmUuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZFUlNJT04gNS42CQkJCQkJKnZlcnNpb24tNS42KgorCitWZXJzaW9uIDUuNiBpcyBhIGJ1Zy1maXggdmVyc2lvbiBvZiA1LjUuCisKKworQ2hhbmdlZAkJCQkJCQkqY2hhbmdlZC01LjYqCistLS0tLS0tCisKK1NtYWxsIGNoYW5nZXMgdG8gT2xlVmltIGZpbGVzLiAoQ2hyaXN0aWFuIFNjaGFsbGVyKQorCitJbnNlcnRlZCAiLyoqLyIgYmV0d2VlbiBwYXRjaCBudW1iZXJzIGluIHNyYy92ZXJzaW9uLmMuICBUaGlzIGFsbG93cyBmb3Igb25lCitsaW5lIG9mIGNvbnRleHQsIHdoaWNoIHNvbWUgdmVyc2lvbnMgb2YgcGF0Y2ggbmVlZC4KKworUmVvcmRlcmVkIHRoZSBTeW50YXggbWVudSB0byBhdm9pZCBsb25nIHN1Ym1lbnVzLiAgUmVtb3ZlZCBrZXlib2FyZCBzaG9ydGN1dHMKK2ZvciBhbHBoYWJldGljYWwgaXRlbXMgdG8gYXZvaWQgYSBjbGFzaCB3aXRoIGZpeGVkIGl0ZW1zLgorCisKK0FkZGVkCQkJCQkJCSphZGRlZC01LjYqCistLS0tLQorCitJbmNsdWRlZCBFeHViZXJhbnQgQ3RhZ3MgdmVyc2lvbiAzLjQuIChEYXJyZW4gSGllYmVydCkKKworT3BlbldpdGhWaW0gaW4gUHl0aG9uLiAoQ2hyaXN0aWFuIFNjaGFsbGVyKQorCitXaW4zMiBHVUk6IGd2aW1leHQuZGxsLCBmb3IgdGhlIGNvbnRleHQgbWVudSAiRWRpdCB3aXRoIFZpbSIgZW50cnkuICBBdm9pZHMKK3RoZSByZXBvcnRlZCBwcm9ibGVtcyB3aXRoIHRoZSBNUyBPZmZpY2UgdGFza2Jhci4gIE5vdyBpdCdzIGEgU2hlbGwgRXh0ZW5zaW9uLgorKFRpYW5taWFvIEh1KQorCitOZXcgc3ludGF4IGZpbGVzOgorYWJlbAkJQWJlbCAoSm9obiBDb29rKQorYW1sCQlBcmMgTWFjcm8gTGFuZ3VhZ2UgKE5pa2tpIEtudWl0KQorYXBhY2hlc3R5bGUJQXBhY2hlLXN0eWxlIGNvbmZpZyBmaWxlIChDaHJpc3RpYW4gSGFtbWVycykKK2NmCQlDb2xkIEZ1c2lvbiAoSmVmZiBMYW56YXJvdHRhKQorY3RybGgJCWZpbGVzIHdpdGggQ1RSTC1IIHNlcXVlbmNlcyAoQnJhbSBNb29sZW5hYXIpCitjdXBsCQlDVVBMIChKb2huIENvb2spCitjdXBsc2ltCQlDVVBMIHNpbXVsYXRpb24gKEpvaG4gQ29vaykKK2VybGFuZwkJRXJsYW5nIChLcmVzaW1pciBNYXJ6aWMpCitnZWRjb20JCUdlZGNvbSAoUGF1bCBKb2huc29uKQoraWNvbgkJSWNvbiAoV2VuZGVsbCBUdXJuZXIpCitpc3QJCU1ha2VJbmRleCBzdHlsZSAoUGV0ZXIgTWVzemFyb3MpCitqc3AJCUphdmEgU2VydmVyIFBhZ2VzIChSYWZhZWwgR2FyY2lhLVN1YXJleikKK3Jjc2xvZwkJUmNzbG9nIChKb2UgS2FydGhhdXNlcikKK3JlbWluZAkJUmVtaW5kIChEYXZpZGUgQWxiZXJhbmkpCitzcXIJCVN0cnVjdHVyZWQgUXVlcnkgUmVwb3J0IFdyaXRlciAoUGF1bCBNb29yZSkKK3RhZHMJCVRBRFMgKEFtaXIgS2FyZ2VyKQordGV4aW5mbwkJVGV4aW5mbyAoU2FuZG9yIEtvcGFueWkpCit4cG0yCQlYIFBpeG1hcCB2MiAoU3RldmUgV2FsbCkKKworVGhlICdDJyBmbGFnIGluICdjcG9wdGlvbnMnIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCBvZmYgY29uY2F0ZW5hdGlvbiBmb3IKK3NvdXJjZWQgbGluZXMuICBTZWUgcGF0Y2ggNS41LjAxMyBiZWxvdy4gfGxpbmUtY29udGludWF0aW9ufAorCisiZXhjbHVkZW5sIiBhcmd1bWVudCBmb3IgdGhlICI6c3ludGF4IiBjb21tYW5kLiAgU2VlIHBhdGNoIDUuNS4wMzIgYmVsb3cuCit8OnN5bi1leGNsdWRlbmx8CisKK0ltcGxlbWVudGVkIHx6K3wgYW5kIHx6XnwgY29tbWFuZHMuICBTZWUgcGF0Y2ggNS41LjA1MCBiZWxvdy4KKworVmltIGxvZ28gaW4gQ29yZWwgRHJhdyBmb3JtYXQuICBDYW4gYmUgc2NhbGVkIHRvIGFueSByZXNvbHV0aW9uLgorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC01LjYqCistLS0tLQorCitVc2luZyB0aGlzIG1hcHBpbmcgaW4gU2VsZWN0IG1vZGUsIHRlcm1pbmF0ZWQgY29tcGxldGlvbjoKKyI6dm5vcmVtYXAgPEMtTj4gPEVzYz5hPEMtTj4iIChCZW5qaSBGaXNoZXIpCitJZ25vcmUgS19TRUxFQ1QgaW4gaW5zX2NvbXBsX3ByZXAoKS4KKworVk1TIChab2x0YW4gQXJwYWRmZnksIERhdmlkIEVsaW5zKToKKy0gaW9jdGwoKSBpbiBwdHkuYyBjYXVzZWQgdHJvdWJsZSwgI2lmbmRlZiBWTVMgYWRkZWQuCistIEN1dCAmIHBhc3RlIG1pc21hdGNoIGNvcnJlY3RlZC4KKy0gUG9wdXAgbWVudSBsaW5lIGNyYXNoIGNvcnJlY3RlZC4gIChQYXRjaCA1LjUuMDQ3KQorLSBNb3RpZiBkaXJlY3RvcmllcyBkdXJpbmcgb3BlbiBhbmQgc2F2ZSBhcyBjb3JyZWN0ZWQuCistIEhhbmRsZSBmdWxsIGZpbGUgbmFtZXMgd2l0aCB2ZXJzaW9uIG51bWJlcnMuIChQYXRjaCA1LjUuMDQ2KQorLSBEaXJlY3RvcnkgaGFuZGxpbmcgKENEIGNvbW1hbmQgZXRjLikKKy0gQ29ycmVjdGVkIGZpbGUgbmFtZSBjb252ZXJzaW9uIFZNUyB0byBVbml4IGFuZCB2LnYuCistIFJlY292ZXJ5IHdhcyBub3Qgd29ya2luZy4KKy0gVGVybWluYWwgYW5kIHNpZ25hbCBoYW5kbGluZyB3YXMgb3V0ZGF0ZWQgY29tcGFyZWQgdG8gb3NfdW5peC5jLgorLSBJbXByb3ZlZCBvc192bXMudHh0LgorCitDb25maWd1cmUgdXNlZCBmcHJpbnRmKCkgaW5zdGVhZCBvZiBwcmludGYoKSB0byBjaGVjayBmb3IgX19EQVRFX18gYW5kCitfX1RJTUVfXy4gKEpvaG4gQ2FyZCBJSSkKKworQmVPUzogQWRqdXN0IGNvbXB1dGluZyB0aGUgY2hhcl9oZWlnaHQgYW5kIGNoYXJfYXNjZW50LiAgUm91bmQgdGhlbSB1cAorc2VwYXJhdGVseSwgYXZvaWRzIHJlZHJhd2luZyBhcnRpZmFjdHMuIChNaWtlIFN0ZWVkKQorCitGaXggYSBmZXcgbXVsdGktYnl0ZSBwcm9ibGVtcyBpbiBtZW51X25hbWVfc2tpcCgpLCBzZXRfcmVnX2ljKCksIHNlYXJjaGMoKSBhbmQKK2ZpbmRtYXRjaGxpbWl0KCkuIChUYXJvIE11cmFva2EpCisKK0dUSyBHVUk6CistIFdpdGggR1RLIDEuMi41IGFuZCBsYXRlciB0aGUgc2Nyb2xsYmFycyB3ZXJlIG5vdCByZWRyYXduIGNvcnJlY3RseS4KKy0gQWRqdXN0ZWQgdGhlIGd0a19mb3JtX2RyYXcoKSBmdW5jdGlvbi4KKy0gU05pRkYgY29ubmVjdGlvbiBkaWRuJ3Qgd29yay4KKy0gJ21vdXNlZm9jdXMnIHdhcyBub3Qgd29ya2luZy4gKERhbGVja2kpCistIFNvbWUga2V5cyB3ZXJlIG5vdCB3b3JraW5nIHdpdGggbW9kaWZpZXJzOiBTaGlmdC1UYWIsIEN0cmwtU3BhY2UgYW5kIENUUkwtQC4KKworCitQYXRjaCA1LjUuMDAxCitQcm9ibGVtOiAgICBDb25maWd1cmUgaW4gdGhlIHRvcCBkaXJlY3RvcnkgZGlkIG5vdCBwYXNzIG9uIGFuIGFyZ3VtZW50IHdpdGggYQorCSAgICBzcGFjZSBjb3JyZWN0bHkuICBGb3IgZXhhbXBsZSAiLi9jb25maWd1cmUgLS1wcmV2aXM9Ii9NeSBob21lIi4KKwkgICAgKFN0ZXBoYW5lIENoYXplbGFzKQorU29sdXRpb246ICAgVXNlICciJEAiJyBpbnN0ZWFkIG9mICckKicgdG8gcGFzcyBvbiB0aGUgYXJndW1lbnRzLgorRmlsZXM6CSAgICBjb25maWd1cmUKKworUGF0Y2ggNS41LjAwMgorUHJvYmxlbTogICAgQ29tcGlsYXRpb24gZXJyb3IgZm9yIHVzaW5nICJmZHNbXSAmIFBPTExJTiIuIChKZWZmIFdhbGtlcikKK1NvbHV0aW9uOiAgIFVzZSAiZmRzW10ucmV2ZW50cyAmIFBPTExJTiIuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS41LjAwMworUHJvYmxlbTogICAgVGhlIGF1dG9jb25mIGNoZWNrIGZvciBzaXplb2YoaW50KSBpcyB3cm9uZyBvbiBtYWNoaW5lcyB3aGVyZQorCSAgICBzaXplb2Yoc2l6ZV90KSAhPSBzaXplb2YoaW50KS4KK1NvbHV0aW9uOiAgIFVzZSBvdXIgb3duIGNvbmZpZ3VyZSBjaGVjay4gIEFsc28gZml4ZXMgdGhlIHdhcm5pbmcgZm9yCisJICAgIGNyb3NzLWNvbXBpbGluZy4KK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZQorCitQYXRjaCA1LjUuMDA0CitQcm9ibGVtOiAgICBPbiBVbml4IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGludGVycnVwdCAiOnNsZWVwIDEwMCIuCitTb2x1dGlvbjogICBTd2l0Y2ggdGVybWluYWwgdG8gY29va2VkIG1vZGUgd2hpbGUgYXNsZWVwLCB0byBhbGxvdyBhIFNJR0lOVCB0bworCSAgICB3YWtlIHVzIHVwLiAgQnV0IHN3aXRjaCBvZmYgZWNobywgYWRkZWQgVE1PREVfU0xFRVAuCitGaWxlczoJICAgIHNyYy90ZXJtLmgsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS41LjAwNQorUHJvYmxlbTogICAgV2hlbiB1c2luZyA8Zi1hcmdzPiB3aXRoIGEgdXNlciBjb21tYW5kLCBhbiBlbXB0eSBhcmd1bWVudCB0byB0aGUKKwkgICAgY29tbWFuZCByZXN1bHRlZCBpbiBvbmUgZW1wdHkgc3RyaW5nLCB3aGlsZSBubyBzdHJpbmcgd2FzCisJICAgIGV4cGVjdGVkLgorU29sdXRpb246ICAgQ2F0Y2ggYW4gZW1wdHkgYXJndW1lbnQgYW5kIHBhc3Mgbm8gYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLgorCSAgICAoUGF1bCBNb29yZSkKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS41LjAwNgorUHJvYmxlbTogICAgUHl0aG9uOiBXaGVuIHBsYXRmb3JtLWRlcGVuZGVudCBmaWxlcyBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnkKKwkgICAgdGhhbiB0aGUgcGxhdGZvcm0taW5kZXBlbmRlbnQgZmlsZXMgaXQgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgQWxzbyBjaGVjayB0aGUgZXhlY3V0YWJsZSBkaXJlY3RvcnksIGFuZCBhZGQgaXQgdG8gQ0ZMQUdTLiAoVGVzc2EKKwkgICAgTGF1KQorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlndXJlCisKK1BhdGNoIDUuNS4wMDcgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgT0xFOiBPY2Nhc2lvbmFsIGNyYXNoIHdoZW4gZXhpdGluZyB3aGlsZSBzdGlsbCBiZWluZyB1c2VkCisJICAgIHZpYSBPTEUuCitTb2x1dGlvbjogICBNb3ZlIE9sZVVuaW5pdGlhbGl6ZSgpIHRvIGJlZm9yZSBkZWxldGluZyB0aGUgYXBwbGljYXRpb24gb2JqZWN0LgorCSAgICAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9pZl9vbGUuY3BwCisKK1BhdGNoIDUuNS4wMDgKK1Byb2JsZW06ICAgIDEwMDAwQEAgdGFrZXMgYSBsb25nIHRpbWUgYW5kIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZC4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBDVFJMLUMgdHlwZWQgd2hpbGUgaW4gdGhlIGxvb3AgdG8gcHVzaCB0aGUgcmVnaXN0ZXIuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjUuMDA5CitQcm9ibGVtOiAgICBSZWNlbnQgU2VxdWVudCBtYWNoaW5lcyBkb24ndCBsaW5rIHdpdGggIi1saW5ldCIuIChLdXJ0aXMgUmFkZXIpCitTb2x1dGlvbjogICBSZW1vdmUgY29uZmlndXJlIGNoZWNrIGZvciBTZXF1ZW50LgorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlndXJlCisKK1BhdGNoIDUuNS4wMTAKK1Byb2JsZW06ICAgIEN0YWdzIGZyZWVkIGEgbWVtb3J5IGJsb2NrIHR3aWNlIHdoZW4gZXhpdGluZy4gIFdoZW4gb3V0IG9mCisJICAgIG1lbW9yeSwgYSBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2Ugd2FzIGdpdmVuLgorU29sdXRpb246ICAgVXBkYXRlIHRvIGN0YWdzIDMuMy4yLiAgQWxzbyBmaXhlcyBhIGZldyBvdGhlciBwcm9ibGVtcy4gKERhcnJlbgorCSAgICBIaWViZXJ0KQorRmlsZXM6CSAgICBzcmMvY3RhZ3MvKgorCitQYXRjaCA1LjUuMDExCitQcm9ibGVtOiAgICBBZnRlciAiQ1RSTC1WIHMiLCB0aGUgY3Vyc29yIGp1bXBzIGJhY2sgdG8gdGhlIHN0YXJ0LCB3aGlsZSBhbGwKKwkgICAgb3RoZXIgb3BlcmF0b3JzIGxlYXZlIHRoZSBjdXJzb3Igb24gdGhlIGxhc3QgY2hhbmdlZCBjaGFyYWN0ZXIuCisJICAgIChYaWFuZ2ppYW5nIE1hKQorU29sdXRpb246ICAgUG9zaXRpb24gY3Vyc29yIG9uIGxhc3QgY2hhbmdlZCBjaGFyYWN0ZXIsIGlmIHBvc3NpYmxlLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNS41LjAxMgorUHJvYmxlbTogICAgVXNpbmcgQ1RSTC1dIGluIFZpc3VhbCBtb2RlIGRvZXNuJ3Qgd29yayB3aGVuIHRoZSB0ZXh0IGluY2x1ZGVzIGEKKwkgICAgc3BhY2UgKGp1c3Qgd2hlcmUgaXQncyB1c2VmdWwpLiAoU3RlZmFuIEJpdHRuZXIpCitTb2x1dGlvbjogICBEb24ndCBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgdGFnIG5hbWUgd2l0aCBhIGJhY2tzbGFzaC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNS4wMTMKK1Byb2JsZW06ICAgIFRoZSAiOmFwcGVuZCIgYW5kICI6aW5zZXJ0IiBjb21tYW5kcyBhbGxvdyB1c2luZyBhIGxlYWRpbmcKKwkgICAgYmFja3NsYXNoIGluIGEgbGluZS4gIFRoZSAiOnNvdXJjZSIgY29tbWFuZCBjb25jYXRlbmF0ZXMgdGhvc2UKKwkgICAgbGluZXMuIChIZWlubGVpbikKK1NvbHV0aW9uOiAgIEFkZCB0aGUgJ0MnIGZsYWcgaW4gJ2Nwb3B0aW9ucycgdG8gc3dpdGNoIG9mZiBjb25jYXRlbmF0aW9uLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL29wdGlvbi5oLCBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwKKwkgICAgcnVudGltZS9maWxldHlwZS52aW0sIHJ1bnRpbWUvc2NyaXB0cy52aW0KKworUGF0Y2ggNS41LjAxNAorUHJvYmxlbTogICAgV2hlbiBleGVjdXRpbmcgYSByZWdpc3RlciB3aXRoICI6QCIsIHRoZSAiOmFwcGVuZCIgY29tbWFuZCB3b3VsZAorCSAgICBnZXQgdGV4dCBsaW5lcyB3aXRoIGEgJzonIHByZXBlbmRlZC4gKEhlaW5sZWluKQorU29sdXRpb246ICAgUmVtb3ZlIHRoZSAnOicgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZ2xvYmFscy5oCisKK1BhdGNoIDUuNS4wMTUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjpnL3BhdC9wIiwgaXQncyBoYXJkIHRvIHNlZSB3aGVyZSB0aGUgb3V0cHV0IHN0YXJ0cywKKwkgICAgdGhlICI6ZyIgY29tbWFuZCBpcyBvdmVyd3JpdHRlbi4gIFZpIGtlZXBzIHRoZSAiOmciIGNvbW1hbmQuCitTb2x1dGlvbjogICBLZWVwIHRoZSAiOmciIGNvbW1hbmQsIGJ1dCBhbGxvdyBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSByZXBvcnQKKwkgICAgZm9yIHRoZSBudW1iZXIgb2YgY2hhbmdlcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA1LjUuMDE2IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBVc2luZyByZWdlZGl0IHRvIGluc3RhbGwgVmltIGluIHRoZSBwb3B1cCBtZW51IHJlcXVpcmVzIHRoZQorCSAgICB1c2VyIHRvIGNvbmZpcm0gdGhpcyBpbiBhIGRpYWxvZy4KK1NvbHV0aW9uOiAgIFVzZSAicmVnZWRpdCAvcyIgdG8gYXZvaWQgdGhlIGRpYWxvZworRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDUuNS4wMTcKK1Byb2JsZW06ICAgIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIGNsb3NpbmcgdGhlIGN1cnJlbnQgd2luZG93LCBWaW0gY291bGQgZ2V0CisJICAgIHN0dWNrIGluIHRoZSBlcnJvciBoYW5kbGluZy4KK1NvbHV0aW9uOiAgIERvbid0IHNldCBjdXJ3aW4gdG8gTlVMTCB3aGVuIGNsb3NpbmcgdGhlIGN1cnJlbnQgd2luZG93LgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNS41LjAxOAorUHJvYmxlbTogICAgQWJzb2x1dGUgcGF0aHMgaW4gc2hlbGwgc2NyaXB0cyBkbyBub3QgYWx3YXlzIHdvcmsuCitTb2x1dGlvbjogICBVc2UgL3Vzci9iaW4vZW52IHRvIGZpbmQgb3V0IHRoZSBwYXRoLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy92aW0yaHRtbC5wbCwgcnVudGltZS90b29scy9lZm1fZmlsdGVyLnBsLAorCSAgICBydW50aW1lL3Rvb2xzL3NodGFncy5wbAorCitQYXRjaCA1LjUuMDE5CitQcm9ibGVtOiAgICBBIGZ1bmN0aW9uIGNhbGwgaW4gJ3N0YXR1c2xpbmUnIHN0b3BzIHVzaW5nICI6cSIgdHdpY2UgZnJvbQorCSAgICBleGl0aW5nLCB3aGVuIHRoZSBsYXN0IGFyZ3VtZW50IGhhc24ndCBiZWVuIGVkaXRlZC4KK1NvbHV0aW9uOiAgIERvbid0IGRlY3JlbWVudCBxdWl0bW9yZSB3aGVuIGV4ZWN1dGluZyBhIGZ1bmN0aW9uLiAoTWFkc2VuKQorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjUuMDIwCitQcm9ibGVtOiAgICBXaGVuIHRoZSBvdXRwdXQgb2YgQ1RSTC1EIGNvbXBsZXRpb24gaW4gdGhlIGNvbW1hbmRsaW5lIGdvZXMgYWxsCisJICAgIHRoZSB3YXkgdG8gdGhlIGxhc3QgY29sdW1uLCB0aGVyZSBpcyBhbiBlbXB0eSBsaW5lLgorU29sdXRpb246ICAgRG9uJ3QgYWRkIGEgbmV3bGluZSB3aGVuIHRoZSBjdXJzb3Igd3JhcHBlZCBhbHJlYWR5LiAoTWFkc2VuKQorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA1LjUuMDIxCitQcm9ibGVtOiAgICBXaGVuIGNoZWNraW5nIGlmIGEgZmlsZSBuYW1lIGluIHRoZSB0YWdzIGZpbGUgaXMgcmVsYXRpdmUsCisJICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyB3ZXJlIG5vdCBleHBhbmRlZC4KK1NvbHV0aW9uOiAgIEV4cGFuZCB0aGUgZmlsZSBuYW1lIGJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyByZWxhdGl2ZS4gKE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDUuNS4wMjIKK1Byb2JsZW06ICAgIFdoZW4gc2V0dGluZyBvciByZXNldHRpbmcgJ3Bhc3RlJyB0aGUgcnVsZXIgd2Fzbid0IHVwZGF0ZWQuCitTb2x1dGlvbjogICBVcGRhdGUgdGhlIHN0YXR1cyBsaW5lcyB3aGVuICdydWxlcicgY2hhbmdlcyBiZWNhdXNlIG9mICdwYXN0ZScuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA1LjUuMDIzCitQcm9ibGVtOiAgICBXaGVuIGVkaXRpbmcgYSBuZXcgZmlsZSBhbmQgYXV0b2NvbW1hbmRzIGNoYW5nZSB0aGUgY3Vyc29yCisJICAgIHBvc2l0aW9uLCB0aGUgY3Vyc29yIHdhcyBtb3ZlZCBiYWNrIHRvIHRoZSBmaXJzdCBub24td2hpdGUsIHVubGVzcworCSAgICAnc3RhcnRvZmxpbmUnIHdhcyByZXNldC4KK1NvbHV0aW9uOiAgIEtlZXAgdGhlIG5ldyBjb2x1bW4sIGp1c3QgbGlrZSB0aGUgbGluZSBudW1iZXIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNS41LjAyNCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gdXNpbmcgY29uZmlybSgpIHRvIHB1dCB1cCBhIGRpYWxvZyB3aXRob3V0IGEKKwkgICAgZGVmYXVsdCBidXR0b24sIHRoZSBkaWFsb2cgd291bGQgbm90IGhhdmUga2V5Ym9hcmQgZm9jdXMuCisJICAgIChLcmlzaG5hKQorU29sdXRpb246ICAgQWx3YXlzIHNldCBmb2N1cyB0byB0aGUgZGlhbG9nIHdpbmRvdy4gIE9ubHkgc2V0IGZvY3VzIHRvIGEgYnV0dG9uCisJICAgIHdoZW4gYSBkZWZhdWx0IG9uZSBpcyBzcGVjaWZpZWQuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS41LjAyNQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAia2VlcGVuZCIgaW4gYSBzeW50YXggcmVnaW9uLCBhIGNvbnRhaW5lZCBtYXRjaCB0aGF0CisJICAgIGluY2x1ZGVzIHRoZSBlbmQtb2YtbGluZSBjb3VsZCBzdGlsbCBmb3JjZSB0aGF0IHJlZ2lvbiB0bworCSAgICBjb250aW51ZSwgaWYgdGhlcmUgaXMgYW5vdGhlciBjb250YWluZWQgbWF0Y2ggaW4gYmV0d2Vlbi4KK1NvbHV0aW9uOiAgIENoZWNrIHRoZSBrZWVwZW5kX2xldmVsIGluIGNoZWNrX3N0YXRlX2VuZHMoKS4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDUuNS4wMjYKK1Byb2JsZW06ICAgIFdoZW4gc3RhcnRpbmcgVmltIGluIGEgd2hpdGUtb24tYmxhY2sgeHRlcm0sIHdpdGggJ2JnJyBzZXQgdG8KKwkgICAgImRhcmsiLCBhbmQgdGhlbiBzdGFydGluZyB0aGUgR1VJIHdpdGggIjpndWkiLCBzZXR0aW5nICdiZycgdG8KKwkgICAgImxpZ2h0IiBpbiB0aGUgZ3ZpbXJjLCB0aGUgaGlnaGxpZ2h0aW5nIGlzbid0IHNldC4gIChUc2pva3dpbmcpCitTb2x1dGlvbjogICBTZXQgdGhlIGhpZ2hsaWdodGluZyB3aGVuICdiZycgaXMgY2hhbmdlZCBpbiB0aGUgZ3ZpbXJjLCBldmVuCisJICAgIHRob3VnaCBmdWxsX3NjcmVlbiBpc24ndCBzZXQuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA1LjUuMDI3CitQcm9ibGVtOiAgICBVbml4OiBvc191bml4LmMgZG9lc24ndCBjb21waWxlIHdoZW4gWFRFUk1fQ0xJUCBpcyB1c2VkIGJ1dAorCSAgICBXQU5UX1RJVExFIGlzbid0LiAoQmFybnVtKQorU29sdXRpb246ICAgTW92ZSBhIGZldyBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBieSB0aGUgWDExIHRpdGxlIGFuZCBjbGlwYm9hcmQKKwkgICAgYW5kIHB1dCBhbm90aGVyICIjaWYiIGFyb3VuZCBpdC4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA1LjUuMDI4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiBhIGZpbGUgaXMgZHJvcHBlZCBvbiBXaW4zMiBndmltIHdoaWxlIGF0IHRoZSAiOiIKKwkgICAgcHJvbXB0LCB0aGUgZmlsZSBpcyBlZGl0ZWQgYnV0IHRoZSBjb21tYW5kIGxpbmUgaXMgYWN0dWFsbHkgc3RpbGwKKwkgICAgdGhlcmUsIHRoZSBjdXJzb3IgZ29lcyBiYWNrIHRvIGNvbW1hbmQgbGluZSBvbiB0aGUgbmV4dCBjb21tYW5kLgorCSAgICAoS3Jpc2huYSkKK1NvbHV0aW9uOiAgIFdoZW4gZHJvcHBpbmcgYSBmaWxlIG9yIGRpcmVjdG9yeSBvbiBndmltIHdoaWxlIGF0IHRoZSAiOiIgcHJvbXB0LAorCSAgICBpbnNlcnQgdGhlIG5hbWUgb2YgdGhlIGZpbGUvZGlyZWN0b3J5LiAgQWxsb3dzIHVzaW5nIHRoZQorCSAgICBmaWxlL2RpcmVjdG9yeSBuYW1lIGZvciBhbnkgRXggY29tbWFuZC4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjUuMDI5CitQcm9ibGVtOiAgICAiZGFzIiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGRpZG4ndCBkZWxldGUgdGhlIGxhc3QgY2hhcmFjdGVyIG9mCisJICAgIHRoZSBzZW50ZW5jZS4KK1NvbHV0aW9uOiAgIFdoZW4gdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGFmdGVyIHRoZSBzZW50ZW5jZSwgbWFrZSB0aGUgb3BlcmF0aW9uCisJICAgIGluY2x1c2l2ZSBpbiBjdXJyZW50X3NlbnQoKS4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDUuNS4wMzAKK1Byb2JsZW06ICAgIFVuaXg6IGluIG9zX3VuaXguYywgInRlcm1fc3RyIiBpcyB1c2VkLCB3aGljaCBpcyBhbHNvIGRlZmluZWQgaW4KKwkgICAgdmltLmggYXMgYSBtYWNyby4gKHd1eGluKQorU29sdXRpb246ICAgUmVuYW1lZCAidGVybV9zdHIiIHRvICJidWYiIGluIGRvX3h0ZXJtX3RyYWNlKCkuCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS41LjAzMSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFdoZW4gZXhpdGluZyBXaW5kb3dzLCBndmltIHdpbGwgbGVhdmUgc3dhcCBmaWxlcyBiZWhpbmQKKwkgICAgYW5kIHdpbGwgYmUga2lsbGVkIHVuZ3JhY2VmdWxseS4gKEtyaXNobmEpCitTb2x1dGlvbjogICBDYXRjaCB0aGUgV01fUVVFUllFTkRTRVNTSU9OIGFuZCBXTV9FTkRTRVNTSU9OIG1lc3NhZ2VzIGFuZCB0cnkgdG8KKwkgICAgZXhpdCBncmFjZWZ1bGx5LiAgQWxsb3cgdGhlIHVzZXIgdG8gY2FuY2VsIHRoZSBzaHV0ZG93biBpZiB0aGVyZQorCSAgICBpcyBhIGNoYW5nZWQgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNS4wMzIKK1Byb2JsZW06ICAgIFBhdGNoIDUuNS4wMjUgd2Fzbid0IHJpZ2h0LiAgQW5kIEMgaGlnaGxpZ2h0aW5nIHdhcyBzdGlsbCBub3QKKwkgICAgd29ya2luZyBjb3JyZWN0bHkgZm9yIGEgI2RlZmluZS4KK1NvbHV0aW9uOiAgIEFkZGVkICJleGNsdWRlbmwiIGFyZ3VtZW50IHRvICI6c3ludGF4IiwgdG8gYmUgYWJsZSBub3QgdG8gZXh0ZW5kCisJICAgIGEgY29udGFpbmluZyBpdGVtIHdoZW4gdGhlcmUgaXMgYSBtYXRjaCB3aXRoIHRoZSBlbmQtb2YtbGluZS4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jLCBydW50aW1lL2RvYy9zeW50YXgudHh0LCBydW50aW1lL3N5bnRheC9jLnZpbQorCitQYXRjaCA1LjUuMDMzCitQcm9ibGVtOiAgICBXaGVuIHJlYWRpbmcgZnJvbSBzdGRpbiwgYSBsb25nIGxpbmUgaW4gdmltaW5mbyB3b3VsZCBtZXNzIHVwIHRoZQorCSAgICBmaWxlIG1lc3NhZ2UuICByZWFkZmlsZSgpIHVzZXMgSU9idWZmIGZvciBrZWVwX21zZywgd2hpY2ggY291bGQgYmUKKwkgICAgb3ZlcndyaXR0ZW4gYnkgYW55b25lLgorU29sdXRpb246ICAgQ29weSB0aGUgbWVzc2FnZSBmcm9tIElPYnVmZiB0byBtc2dfYnVmIGFuZCBzZXQga2VlcF9tc2cgdG8gdGhhdC4KKwkgICAgQWxzbyBjaGFuZ2UgdmltX2ZnZXRzKCkgdG8gbm90IHVzZSBJT2J1ZmYgYW55IGxvbmdlci4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNS4wMzQKK1Byb2JsZW06ICAgICJndmltIC1ydiIgY2F1c2VkIGEgY3Jhc2guICBVc2luZyAndF9DbycgYmVmb3JlIGl0J3Mgc2V0LgorU29sdXRpb246ICAgRG9uJ3QgdHJ5IHRvIGluaXRpYWxpemUgdGhlIGhpZ2hsaWdodGluZyBiZWZvcmUgaXQgaGFzIGJlZW4KKwkgICAgaW5pdGlhbGl6ZWQgZnJvbSBtYWluKCkuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA1LjUuMDM1CitQcm9ibGVtOiAgICBHVEsgd2l0aCBYSU06IFJlc2l6aW5nIHdpdGggc3RhdHVzIGFyZWEgd2FzIG1lc3N5LCBhbmQKKwkgICAgIjpzZXQgZ3Vpb3B0aW9ucys9YiIgZGlkbid0IHdvcmsuCitTb2x1dGlvbjogICBNYWtlIHN0YXR1cyBhcmVhIGEgc2VwYXJhdGUgd2lkZ2V0LCBidXQgbm90IGEgc2VwYXJhdGUgd2luZG93LgorCSAgICAoQ2hpLURlb2sgSHdhbmcpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX2YuYywgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9tdWx0Ynl0ZS5jCisKK1BhdGNoIDUuNS4wMzYKK1Byb2JsZW06ICAgIFRoZSBHWklQX3JlYWQoKSBmdW5jdGlvbiBpbiAkVklNUlVOVElNRS92aW1yY19leGFtcGxlLnZpbSB0bworCSAgICB1bmNvbXByZXNzIGEgZmlsZSBkaWQgbm90IGRvIGRldGVjdGlvbiBmb3IgJ2ZpbGVmb3JtYXQnLiAgVGhpcyBpcworCSAgICBiZWNhdXNlIHRoZSBmaWx0ZXJpbmcgaXMgZG9uZSB3aXRoICdiaW5hcnknIHNldC4KK1NvbHV0aW9uOiAgIFNwbGl0IHRoZSBmaWx0ZXJpbmcgaW50byBzZXBhcmF0ZSB3cml0ZSwgZmlsdGVyIGFuZCByZWFkIGNvbW1hbmRzLgorRmlsZXM6CSAgICBydW50aW1lL3ZpbXJjX2V4YW1wbGUudmltCisKK1BhdGNoIDUuNS4wMzcKK1Byb2JsZW06ICAgIFRoZSAiVSIgY29tbWFuZCBkaWRuJ3QgbWFyayB0aGUgYnVmZmVyIGFzIGNoYW5nZWQuIChNY0Nvcm1hY2spCitTb2x1dGlvbjogICBTZXQgdGhlICdtb2RpZmllZCcgZmxhZyB3aGVuIHVzaW5nICJVIi4KK0ZpbGVzOgkgICAgc3JjL3VuZG8uYworCitQYXRjaCA1LjUuMDM4CitQcm9ibGVtOiAgICBXaGVuIHR5cGluZyBhIGxvbmcgIjoiIGNvbW1hbmQsIHNvIHRoYXQgdGhlIHNjcmVlbiBzY3JvbGxzIHVwLAorCSAgICBjYXVzZXMgdGhlIGhpdC1lbnRlciBwcm9tcHQsIGV2ZW4gdGhvdWdoIHRoZSB1c2VyIGp1c3QgdHlwZWQKKwkgICAgcmV0dXJuIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQuCitTb2x1dGlvbjogICBSZXNldCBuZWVkX3dhaXRfcmV0dXJuIGlmIChwYXJ0IG9mKSB0aGUgY29tbWFuZCB3YXMgdHlwZWQgaW4KKwkgICAgZ2V0Y21kbGluZSgpLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA1LjUuMDM5CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgY3VzdG9tIHN0YXR1cyBsaW5lLCAiJWEiIChmaWxlICMgb2YgIykgcmVwb3J0cyB0aGUKKwkgICAgaW5kZXggb2YgdGhlIGN1cnJlbnQgd2luZG93IGZvciBhbGwgd2luZG93cy4KK1NvbHV0aW9uOiAgIFBhc3MgYSB3aW5kb3cgcG9pbnRlciB0byBhcHBlbmRfYXJnX251bWJlcigpLCBhbmQgcGFzcyB0aGUgd2luZG93CisJICAgIGJlaW5nIHVwZGF0ZWQgZnJvbSBidWlsZF9zdGxfc3RyX2hsKCkuIChTdGVwaGVuIFAuIFdhbGwpCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL3NjcmVlbi5jLCBzcmMvcHJvdG8vYnVmZmVyLnBybworCitQYXRjaCA1LjUuMDQwCitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBXaGVuIHRoZXJlIGlzIHNvbWUgZXJyb3IgaW4geGltX3JlYWxfaW5pdCgpLCBpdCBjYW4KKwkgICAgY2xvc2UgWElNIGFuZCByZXR1cm4uICBBZnRlciB0aGlzIHRoZXJlIGNhbiBiZSBhIHNlZ3YuCitTb2x1dGlvbjogICBUZXN0ICJ4aWMiIGZvciBiZWluZyBub24tTlVMTCwgZG9uJ3Qgc2V0ICJ4aW0iIHRvIE5VTEwuICBBbHNvIHRyeQorCSAgICB0byBmaW5kIG1vcmUgbWF0Y2hlcyBmb3Igc3VwcG9ydGVkIHN0eWxlcy4gKFN1bmctSHl1biBOYW0pCitGaWxlczoJICAgIHNyYy9tdWx0Ynl0ZS5jCisKK1BhdGNoIDUuNS4wNDEKK1Byb2JsZW06ICAgIFgxMSBHVUk6IENUUkwtXyByZXF1aXJlcyB0aGUgU0hJRlQga2V5IG9ubHkgb24gc29tZSBtYWNoaW5lcy4KK1NvbHV0aW9uOiAgIFRyYW5zbGF0ZSBDVFJMLS0gdG8gQ1RSTC1fLiAoUm9iZXJ0IFdlYmIpCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNS41LjA0MgorUHJvYmxlbTogICAgWDExIEdVSToga2V5cyB3aXRoIEFMVCB3ZXJlIGFzc3VtZWQgdG8gYmUgdXNlZCBmb3IgdGhlIG1lbnUsIGV2ZW4KKwkgICAgd2hlbiB0aGUgbWVudSBoYXMgYmVlbiBkaXNhYmxlZCBieSByZW1vdmluZyAnbScgZnJvbSAnZ3Vpb3B0aW9ucycuCitTb2x1dGlvbjogICBJZ25vcmUga2V5cyB3aXRoIEFMVCBvbmx5IHdoZW4gZ3VpLm1lbnVfaXNfYWN0aXZlIGlzIHNldC4gKFJhZikKK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYworCitQYXRjaCA1LjUuMDQzCitQcm9ibGVtOiAgICBHVEs6IEhhbmRsaW5nIG9mIGZvbnRzZXQgZm9udHMgd2FzIG5vdCByaWdodCB3aGVuICdndWlmb250c2V0JworCSAgICBjb250YWlucyBleGFjdGx5IDE0IHRpbWVzICctJy4KK1NvbHV0aW9uOiAgIEF2b2lkIHNldHRpbmcgZm9udHMgd2hlbiB3b3JraW5nIHdpdGggYSBmb250c2V0LiAoU3VuZy1IeXVuIE5hbSkKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNS41LjA0NAorUHJvYmxlbTogICAgcGx0YWdzLnBsIGNvbnRhaW5zIGFuIGFic29sdXRlIHBhdGggIi91c3IvbG9jYWwvYmluL3BlcmwiLiAgVGhhdAorCSAgICBtaWdodCBub3Qgd29yayBldmVyeXdoZXJlLgorU29sdXRpb246ICAgVXNlICIvdXNyL2Jpbi9lbnYgcGVybCIgaW5zdGVhZC4KK0ZpbGVzOgkgICAgcnVudGltZS90b29scy9wbHRhZ3MucGwKKworUGF0Y2ggNS41LjA0NQorUHJvYmxlbTogICAgVXNpbmcgInRoaXNfc2Vzc2lvbiIgdmFyaWFibGUgZG9lcyBub3Qgd29yaywgcmVxdWlyZXMgcHJlY2VkaW5nIGl0CisJICAgIHdpdGggInY6Ii4gIERlZmF1bHQgZmlsZW5hbWUgZm9yICI6bWtzZXNzaW9uIiBpc24ndCBtZW50aW9uZWQKKwkgICAgaW4gdGhlIGRvY3MuIChGaXNoZXIpCitTb2x1dGlvbjogICBTdXBwb3J0IHVzaW5nICJ0aGlzX3Nlc3Npb24iIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBydW50aW1lL2RvYy9vcHRpb25zLnR4dAorCitQYXRjaCA1LjUuMDQ2IChleHRyYSkKK1Byb2JsZW06ICAgIFZNUzogcHJvYmxlbXMgd2l0aCBwYXRoIGFuZCBmaWxlbmFtZS4KK1NvbHV0aW9uOiAgIFRydW5jYXRlIGZpbGUgbmFtZSBhdCBsYXN0ICc7JywgZXRjLiAoWm9sdGFuIEFycGFkZmZ5KQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9maWxlaW8uYywgc3JjL2d1aV9tb3RpZi5jLCBzcmMvb3Nfdm1zLmMsCisJICAgIHNyYy9wcm90by9vc192bXMucHJvCisKK1BhdGNoIDUuNS4wNDcKK1Byb2JsZW06ICAgIFZNUzogQ3Jhc2ggd2hlbiB1c2luZyB0aGUgcG9wdXAgbWVudQorU29sdXRpb246ICAgVHVybiB0aGUgI2RlZmluZSBNRU5VX01PREVfQ0hBUlMgaW50byBhbiBhcnJheS4gKEFycGFkZmZ5KQorRmlsZXM6CSAgICBzcmMvc3RydWN0cy5oLCBzcmMvbWVudS5jCisKK1BhdGNoIDUuNS4wNDgKK1Byb2JsZW06ICAgIEhQLVVYIDExOiBDb21waWxpbmcgZG9lc24ndCB3b3JrLCBiZWNhdXNlIGJvdGggc3RyaW5nLmggYW5kCisJICAgIHN0cmluZ3MuaCBhcmUgaW5jbHVkZWQuIChTcXVhc3NhYmlhKQorU29sdXRpb246ICAgVGhlIGNvbmZpZ3VyZSB0ZXN0IGZvciBpbmNsdWRpbmcgYm90aCBzdHJpbmcuaCBhbmQgc3RyaW5ncy5oCisJICAgIG11c3QgaW5jbHVkZSA8WG0vWG0uaD4gZmlyc3QsIGJlY2F1c2UgaXQgY2F1c2VzIHByb2JsZW1zLgorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlndXJlLCBzcmMvY29uZmlnLmguaW4KKworUGF0Y2ggNS41LjA0OQorUHJvYmxlbTogICAgVW5peDogV2hlbiBpbnN0YWxsaW5nIFZpbSwgdGhlIHByb3RlY3Rpb24gYml0cyBvZiBmaWxlcyBtaWdodCBiZQorCSAgICBpbmZsdWVuY2VkIGJ5IHRoZSB1bWFzay4KK1NvbHV0aW9uOiAgIEFkZCAkKEZJTEVNT0QpIHRvIE1ha2VmaWxlLiAoU2hldHllKQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNS41LjA1MAorUHJvYmxlbTogICAgInorIiBhbmQgInpeIiBjb21tYW5kcyBhcmUgbWlzc2luZy4KK1NvbHV0aW9uOiAgIEltcGxlbWVudGVkICJ6KyIgYW5kICJ6XiIuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgcnVudGltZS9kb2Mvc2Nyb2xsLnR4dCwgcnVudGltZS9kb2MvaW5kZXgudHh0CisKK1BhdGNoIDUuNS4wNTEKK1Byb2JsZW06ICAgIFNldmVyYWwgVW5peCBzeXN0ZW1zIGhhdmUgYSBwcm9ibGVtIHdpdGggdGhlIG9wdGltaXphdGlvbiBsaW1pdHMKKwkgICAgY2hlY2sgaW4gY29uZmlndXJlLgorU29sdXRpb246ICAgUmVtb3ZlZCB0aGUgY29uZmlndXJlIGNoZWNrLCBsZXQgdGhlIHVzZXIgYWRkIGl0IG1hbnVhbGx5IGluCisJICAgIE1ha2VmaWxlIG9yIHRoZSBlbnZpcm9ubWVudC4KK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZ3VyZSwgc3JjL01ha2VmaWxlCisKK1BhdGNoIDUuNS4wNTIKK1Byb2JsZW06ICAgIENyYXNoIHdoZW4gdXNpbmcgYSBjdXJzb3Iga2V5IGF0IHRoZSBBVFRFTlRJT04gcHJvbXB0LiAoQWxiZXJhbmkpCitTb2x1dGlvbjogICBJZ25vcmUgc3BlY2lhbCBrZXlzIGF0IHRoZSBjb25zb2xlIGRpYWxvZy4gIEFsc28gaWdub3JlIGNoYXJhY3RlcnMKKwkgICAgPiAyNTUgZm9yIG90aGVyIHVzZXMgb2YgdG9sb3dlcigpIGFuZCB0b3VwcGVyKCkuCitGaWxlczoJICAgIHNyYy9tZW51LmMsIHNyYy9tZXNzYWdlLmMsIHNyYy9taXNjMi5jCisKK1BhdGNoIDUuNS4wNTMKK1Byb2JsZW06ICAgIEluZGVudGluZyBpcyB3cm9uZyBhZnRlciBhIGZ1bmN0aW9uIHdoZW4gJ2Npbm8nIGhhcyAiZnMiLiAgQW5vdGhlcgorCSAgICBwcm9ibGVtIHdoZW4gJ2Npbm8nIGhhcyAie3MiLgorU29sdXRpb246ICAgUHV0IGxpbmUgYWZ0ZXIgY2xvc2luZyAifSIgb2YgYSBmdW5jdGlvbiBhdCB0aGUgbGVmdCBtYXJnaW4uCisJICAgIEFwcGx5IGluZF9vcGVuX2V4dHJhIGluIHRoZSByaWdodCB3YXkgYWZ0ZXIgYSAneycuCitGaWxlczoJICAgIHNyYy9taXNjMS5jLCBzcmMvdGVzdGRpci90ZXN0My5pbiwgc3JjL3Rlc3RkaXIvdGVzdDMub2sKKworUGF0Y2ggNS41LjA1NAorUHJvYmxlbTogICAgVW5peDogIjplICMiIGRvZXNuJ3Qgd29yayBpZiB0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZSBjb250YWlucyBhCisJICAgIHNwYWNlIG9yIGJhY2tzbGFzaC4gKEh1ZGFjZWspCitTb2x1dGlvbjogICBXaGVuIHJlcGxhY2luZyAiIyIsICIlIiBvciBvdGhlciBpdGVtcyB0aGF0IHN0YW5kIGZvciBhIGZpbGUgbmFtZSwKKwkgICAgcHJlcGVuZCBhIGJhY2tzbGFzaCBiZWZvcmUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjUuMDU1CitQcm9ibGVtOiAgICBVc2luZyAiPEMtVj4kci0iIGluIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSByZXBsYWNlcyBvbmUgY2hhcmFjdGVyCisJICAgIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAoWml2a292KQorU29sdXRpb246ICAgT25seSByZXBsYWNlIGV4aXN0aW5nIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA1LjUuMDU2CitQcm9ibGVtOiAgICBBZnRlciAiejIwPENSPiIgbWVzc2FnZXMgd2VyZSBwcmludGVkIGF0IHRoZSBvbGQgY29tbWFuZCBsaW5lCisJICAgIHBvc2l0aW9uIG9uY2UuICAoVmVzZWxpbm92aWMpCitTb2x1dGlvbjogICBTZXQgbXNnX3JvdyBhbmQgbXNnX2NvbCB3aGVuIGNoYW5naW5nIGNtZGxpbmVfcm93IGluCisJICAgIHdpbl9zZXRoZWlnaHQoKS4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDUuNS4wNTcKK1Byb2JsZW06ICAgIEFmdGVyICJTPEVzYz4iIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZXN0b3JlIHRoZSBsaW5lIHdpdGggIlUiLgorCSAgICAoVmVzZWxpbm92aWMpCitTb2x1dGlvbjogICBEb24ndCBjYWxsIHVfY2xlYXJsaW5lKCkgaW4gb3BfZGVsZXRlKCkgd2hlbiBjaGFuZ2luZyBvbmx5IG9uZQorCSAgICBsaW5lLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNS41LjA1OAorUHJvYmxlbTogICAgVXNpbmcgYSBsb25nIHNlYXJjaCBwYXR0ZXJuIGFuZCB0aGVuICJuIiBjYXVzZXMgdGhlIGhpdC1lbnRlcgorCSAgICBwcm9tcHQuICAoS3Jpc2huYSkKK1NvbHV0aW9uOiAgIFRydW5jYXRlIHRoZSBlY2hvZWQgcGF0dGVybiwgbGlrZSBvdGhlciBtZXNzYWdlcy4gIE1vdmVkIGNvZGUgZm9yCisJICAgIHRydW5jYXRpbmcgZnJvbSBtc2dfYXR0cigpIHRvIG1zZ19zdHJ0cnVuYygpLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvcHJvdG8vbWVzc2FnZS5wcm8sIHNyYy9zZWFyY2guYworCitQYXRjaCA1LjUuMDU5CitQcm9ibGVtOiAgICBHVEsgR1VJOiBXaGVuICR0ZXJtIGlzIGludmFsaWQsIHVzaW5nICJndmltIiBnaXZlcyBhbiBlcnJvcgorCSAgICBtZXNzYWdlLCBldmVuIHRob3VnaCAkdGVybSBpc24ndCByZWFsbHkgdXNlZC4gIChSb2JiaW5zKQorU29sdXRpb246ICAgV2hlbiB0aGUgR1VJIGlzIGFib3V0IHRvIHN0YXJ0LCBza2lwIHRoZSBlcnJvciBtZXNzYWdlcyBmb3IgYQorCSAgICB3cm9uZyAkdGVybS4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA1LjUuMDYwIChleHRyYSkKK1Byb2JsZW06ICAgIERvcyAzMiBiaXQ6IFdoZW4gYSBkaXJlY3RvcnkgaW4gJ2JhY2t1cGRpcicgZG9lc24ndCBleGlzdCwgIjp3IgorCSAgICBjYXVzZXMgdGhlIGZpbGUgdG8gYmUgcmVuYW1lZCB0byAiYXhscXdxaHkuYmF+Ii4gKE1hdHpkb3JmKQorU29sdXRpb246ICAgVGhlIGNvZGUgdG8gd29yayBhcm91bmQgYSBMRk4gYnVnIGluIFdpbmRvd3MgOTUgZG9lc24ndCBoYW5kbGUgYQorCSAgICBub24tZXhpc3RpbmcgdGFyZ2V0IG5hbWUgY29ycmVjdGx5LiAgV2hlbiByZW5hbWluZyBmYWlscywgbWFrZQorCSAgICBzdXJlIHRoZSBmaWxlIGhhcyBpdHMgb3JpZ2luYWwgbmFtZS4gIEFsc28gZG8gdGhpcyBmb3IgdGhlIFdpbjMyCisJICAgIHZlcnNpb24sIGFsdGhvdWdoIGl0J3MgdW5saWtlbHkgdGhhdCBpdCBydW5zIGludG8gdGhpcyBwcm9ibGVtLgorRmlsZXM6CSAgICBzcmMvb3NfbXNkb3MuYywgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNS41LjA2MQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiXDoiIGluIGEgbW9kZWxpbmUsIHRoZSBiYWNrc2xhc2ggaXMgaW5jbHVkZWQgaW4gdGhlCisJICAgIG9wdGlvbiB2YWx1ZS4gKE1vaHNpbikKK1NvbHV0aW9uOiAgIFJlbW92ZSBvbmUgYmFja3NsYXNoIGJlZm9yZSB0aGUgJzonIGluIGEgbW9kZWxpbmUuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKKworUGF0Y2ggNS41LjA2MiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBjb25zb2xlOiBUZW1wIGZpbGVzIGFyZSBjcmVhdGVkIGluIHRoZSByb290IG9mIHRoZSBjdXJyZW50CisJICAgIGRyaXZlLCB3aGljaCBtYXkgYmUgcmVhZC1vbmx5LiAoUGV0ZXJzb24pCitTb2x1dGlvbjogICBVc2UgdGhlIHNhbWUgbWVjaGFuaXNtIG9mIHRoZSBHVUkgdmVyc2lvbjogVXNlICRUTVAsICRURU1QIG9yIHRoZQorCSAgICBjdXJyZW50IGRpcmVjdG9yeS4gIENsZWFuZWQgdXAgdmltX3RlbXBuYW1lKCkgYSBiaXQuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL29zX3dpbjMyLmgsIHJ1bnRpbWUvZG9jL29zX2Rvcy50eHQKKworUGF0Y2ggNS41LjA2MworUHJvYmxlbTogICAgV2hlbiB1c2luZyB3aG9sZS1saW5lIGNvbXBsZXRpb24gaW4gSW5zZXJ0IG1vZGUsICdjaW5kZW50JyBpcworCSAgICBhcHBsaWVkLCBldmVuIGFmdGVyIGNoYW5naW5nIHRoZSBpbmRlbnQgb2YgdGhlIGxpbmUuCitTb2x1dGlvbjogICBEb24ndCByZWluZGVudCB0aGUgY29tcGxldGVkIGxpbmUgYWZ0ZXIgaW5zZXJ0aW5nL3JlbW92aW5nIGluZGVudC4KKwkgICAgKFJvYmVydCBXZWJiKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDUuNS4wNjQKK1Byb2JsZW06ICAgIGhhcygic25pZmYiKSBkb2Vzbid0IHdvcmsgY29ycmVjdGx5LgorU29sdXRpb246ICAgUmV0dXJuIDEgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggdGhlICtzbmlmZiBmZWF0dXJlLiAoUHJ1ZW1tZXIpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNS41LjA2NQorUHJvYmxlbTogICAgV2hlbiBkcm9wcGluZyBhIGZpbGUgb24gVmltLCB0aGUgJ3NoZWxsc2xhc2gnIG9wdGlvbiBpcyBub3QKKwkgICAgZWZmZWN0aXZlLiAoS3Jpc2huYSkKK1NvbHV0aW9uOiAgIEZpeCB0aGUgc2xhc2hlcyBpbiB0aGUgZHJvcHBlZCBmaWxlIG5hbWVzIGFjY29yZGluZyB0bworCSAgICAnc2hlbGxzbGFzaCcuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBydW50aW1lL2RvYy9vcHRpb25zLnR4dAorCitQYXRjaCA1LjUuMDY2CitQcm9ibGVtOiAgICBGb3Igc3lzdGVtcyB3aXRoIGJhY2tzbGFzaCBpbiBmaWxlIG5hbWU6IFNldHRpbmcgYSBmaWxlIG5hbWUKKwkgICAgb3B0aW9uIHRvIGEgdmFsdWUgc3RhcnRpbmcgd2l0aCAiXFxtYWNoaW5lIiByZW1vdmVkIGEgYmFja3NsYXNoLgorU29sdXRpb246ICAgS2VlcCB0aGUgZG91YmxlIGJhY2tzbGFzaCBmb3IgIlxcbWFjaGluZSIsIGJ1dCBkbyBjaGFuZ2UKKwkgICAgIlxcXFxtYWNoaW5lIiB0byAiXFxtYWNoaW5lIiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYywgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKKworUGF0Y2ggNS41LjA2NworUHJvYmxlbTogICAgV2l0aCAnaGxzZWFyY2gnIHNldCwgdGhlIHBhdHRlcm4gIlw+IiBkb2Vzbid0IGhpZ2hsaWdodCB0aGUgZmlyc3QKKwkgICAgbWF0Y2ggaW4gYSBsaW5lLiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgRml4IGhpZ2hsaWdodGluZyBhbiBlbXB0eSBtYXRjaC4gIEFsc28gaGlnaGxpZ2h0IHRoZSBmaXJzdAorCSAgICBjaGFyYWN0ZXIgaW4gYW4gZW1wdHkgbGluZSBmb3IgIiQiLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNS41LjA2OAorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiBhICI6d2hpbGUiIGlzIHVzZWQgd2l0aCBhbiBhcmd1bWVudCB0aGF0IGhhcyBhbiBlcnJvci4KKwkgICAgKFN5bHZhaW4gVmlhcnQpCitTb2x1dGlvbjogICBXYXMgdXNpbmcgYW4gdW5pbml0aWFsaXplZCBpbmRleCBpbiB0aGUgY3NfbGluZVtdIGFycmF5LiAgVGhlCisJICAgIGNyYXNoIG9ubHkgaGFwcGVuZWQgd2hlbiB0aGUgaW5kZXggd2FzIGZhciBvZmYuICBNYWRlIHN1cmUgdGhlCisJICAgIHVuaW5pdGlhbGl6ZWQgaW5kZXggaXNuJ3QgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS41LjA2OQorUHJvYmxlbTogICAgU2hpZnRpbmcgbGluZXMgaW4gYmxvY2t3aXNlIFZpc3VhbCBtb2RlIGRpZG4ndCBzZXQgdGhlICdtb2RpZmllZCcKKwkgICAgZmxhZy4KK1NvbHV0aW9uOiAgIERvIHNldCB0aGUgJ21vZGlmaWVkJyBmbGFnLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNS41LjA3MAorUHJvYmxlbTogICAgV2hlbiBlZGl0aW5nIGEgbmV3IGZpbGUsIGNyZWF0aW5nIHRoYXQgZmlsZSBvdXRzaWRlIG9mIFZpbSwgdGhlbgorCSAgICBlZGl0aW5nIGl0IGFnYWluLCAiOnciIHN0aWxsIHdhcm5zIGZvciBvdmVyd3JpdGluZyBhbiBleGlzdGluZworCSAgICBmaWxlLiAoTmFtKQorU29sdXRpb246ICAgVGhlIEJGX05FVyBmbGFnIGluIHRoZSAiYl9mbGFncyIgZmllbGQgd2Fzbid0IGNsZWFyZWQgcHJvcGVybHkuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNS4wNzEKK1Byb2JsZW06ICAgIFVzaW5nIGEgbWF0Y2hncm91cCBpbiBhICI6c3luIHJlZ2lvbiIsIHdoaWNoIGlzIHRoZSBzYW1lIHN5bnRheAorCSAgICBncm91cCBhcyB0aGUgcmVnaW9uLCBkaWRuJ3Qgc3RvcCBhIGNvbnRhaW5lZCBpdGVtIGZyb20gbWF0Y2hpbmcgaW4KKwkgICAgdGhlIHN0YXJ0IHBhdHRlcm4uCitTb2x1dGlvbjogICBBbHNvIHB1c2ggYW4gaXRlbSBvbiB0aGUgc3RhY2sgd2hlbiB0aGUgc3ludGF4IElEIG9mIHRoZQorCSAgICBtYXRjaGdyb3VwIGlzIHRoZSBzYW1lIGFzIHRoZSBzeW50YXggSUQgb2YgdGhlIHJlZ2lvbi4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDUuNS4wNzIgKGV4dHJhKQorUHJvYmxlbTogICAgRG9zIDMyIGJpdDogV2hlbiBzZXR0aW5nICdjb2x1bW5zJyB0byBhIHRvbyBsYXJnZSB2YWx1ZSwgVmltIG1heQorCSAgICBjcmFzaCwgYW5kIHRoZSBET1MgY29uc29sZSB0b28uCitTb2x1dGlvbjogICBDaGVjayB0aGF0IHRoZSB2YWx1ZSBvZiAnY29sdW1ucycgaXNuJ3QgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZgorCSAgICBjb2x1bW5zIHRoYXQgdGhlIEJJT1MgcmVwb3J0cy4KK0ZpbGVzOgkgICAgc3JjL29zX21zZG9zLmMsIHNyYy9wcm90by9vc19tc2Rvcy5wcm8sIHNyYy9vcHRpb24uYworCitQYXRjaCA1LjUuMDczIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbiAzMiBHVUk6IFRoZSBGaW5kIGFuZCBGaW5kL1JlcGxhY2UgZGlhbG9ncyBkaWRuJ3Qgc2hvdyB0aGUKKwkgICAgIm1hdGNoIGNhc2UiIGNoZWNrYm94LiAgVGhlIEZpbmQvUmVwbGFjZSBkaWFsb2cgZGlkbid0IGhhbmRsZSB0aGUKKwkgICAgIm1hdGNoIHdob2xlIHdvcmQiIGNoZWNrYm94LgorU29sdXRpb246ICAgU3VwcG9ydCB0aGUgIm1hdGNoIGNhc2UiIGFuZCAibWF0Y2ggd2hvbGUgd29yZCIgY2hlY2tib3hlcy4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjZhLjAwMQorUHJvYmxlbTogICAgVXNpbmcgPEMtRW5kPiB3aXRoIGEgY291bnQgZG9lc24ndCB3b3JrIGxpa2UgaXQgZG9lcyB3aXRoICJHIi4KKwkgICAgKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIEFjY2VwdCBhIGNvdW50IGZvciA8Qy1FbmQ+IGFuZCA8Qy1Ib21lPi4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNmEuMDAyCitQcm9ibGVtOiAgICBUaGUgc2NyaXB0IGZvciBjb252ZXJzaW9uIHRvIEhUTUwgd2FzIGFuIG9sZGVyIHZlcnNpb24uCitTb2x1dGlvbjogICBBZGQgc3VwcG9ydCBmb3IgcnVubmluZyAyaHRtbC52aW0gb24gYSBjb2xvciB0ZXJtaW5hbC4KK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvMmh0bWwudmltCisKK1BhdGNoIDUuNmEuMDAzCitQcm9ibGVtOiAgICBEZWZpbmluZyBhIGZ1bmN0aW9uIGluc2lkZSBhIGZ1bmN0aW9uIGRpZG4ndCBnaXZlIGFuIGVycm9yCisJICAgIG1lc3NhZ2UuICBBIG1pc3NpbmcgIjplbmRmdW5jdGlvbiIgZG9lc24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBBbGxvdyBkZWZpbmluZyBhIGZ1bmN0aW9uIGluc2lkZSBhIGZ1bmN0aW9uLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBydW50aW1lL2RvYy9ldmFsLnR4dAorCitQYXRjaCA1LjZhLjAwNAorUHJvYmxlbTogICAgQSBtaXNzaW5nICI6ZW5kd2hpbGUiIG9yICI6ZW5kaWYiIGRvZXNuJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLgorCSAgICAoSm9oYW5uZXMgWmVsbG5lcikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBtaXNzaW5nICI6ZW5kd2hpbGUiIGFuZCAiOmVuZGlmIiBpbiBzb3VyY2VkIGZpbGVzLgorCSAgICBBZGQgbWlzc2luZyAiOmVuZGlmIiBpbiBmaWxlIHNlbGVjdGlvbiBtYWNyb3MuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBydW50aW1lL21hY3Jvcy9maWxlX3NlbGVjdC52aW0KKworUGF0Y2ggNS42YS4wMDUKK1Byb2JsZW06ICAgICdobHNlYXJjaCcgd2FzIG5vdCBsaXN0ZWQgYWxwaGFiZXRpY2FsbHkuICBUaGUgdmFsdWUgb2YgJ3Rvb2xiYXInCisJICAgIHdhcyBjaGFuZ2VkIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KK1NvbHV0aW9uOiAgIE1vdmVkIGVudHJ5IG9mICdobHNlYXJjaCcgaW4gb3B0aW9uc1tdIHRhYmxlIGRvd24uCisJICAgIERvbid0IHJlc2V0ICd0b29sYmFyJyBvcHRpb24gdG8gdGhlIGRlZmF1bHQgdmFsdWUgd2hlbgorCSAgICAnY29tcGF0aWJsZScgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNS42YS4wMDYKK1Byb2JsZW06ICAgIFVzaW5nIGEgYmFja3dhcmRzIHJhbmdlIGluc2lkZSAiOmlmIDAiIGdhdmUgYW4gZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIERvbid0IGNvbXBsYWluIGFib3V0IGEgcmFuZ2Ugd2hlbiBpdCBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZC4KKwkgICAgKFN0ZWZhbiBSb2VtZXIpCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDUuNmEuMDA3CitQcm9ibGVtOiAgICAiOmxldCIgZGlkbid0IHNob3cgaW50ZXJuYWwgVmltIHZhcmlhYmxlcy4gIChSb24gQWFyb24pCitTb2x1dGlvbjogICBEbyBzaG93ICI6diIgdmFyaWFibGVzIGZvciAiOmxldCIgYW5kICI6bGV0IHY6bmFtZSIuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNS42YS4wMDgKK1Byb2JsZW06ICAgIFNlbGVjdGluZyBhIHN5bnRheCBmcm9tIHRoZSBTeW50YXggbWVudSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgUmVwbGFjZSAiZWxzZSBpZiIgaW4gU2V0U3luKCkgd2l0aCAiZWxzZWlmIi4gIChSb25hbGQgU2NoaWxkKQorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDUuNmEuMDA5CitQcm9ibGVtOiAgICBXaGVuIGNvbXBpbGluZyB3aXRoICtleHRyYV9zZWFyY2ggYnV0IHdpdGhvdXQgK3N5bnRheCwgdGhlcmUgaXMgYQorCSAgICBjb21waWxhdGlvbiBlcnJvciBpbiBzY3JlZW4uYy4gKEF4ZWwgS2llbGhvcm4pCitTb2x1dGlvbjogICBBZGp1c3QgdGhlICNpZmRlZiBmb3IgZGVjbGFyaW5nIGFuZCBpbml0aWFsaXppbmcgImxpbmUiIGluCisJICAgIHdpbl9saW5lKCkuICBBbHNvIHNvbHZlIGNvbXBpbGF0aW9uIHByb2JsZW0gd2hlbiArc3RhdHVzbGluZSBpcworCSAgICB1c2VkIHdpdGhvdXQgK2V2YWwuICBBbm90aGVyIG9uZSB3aGVuICtjbWRsaW5lX2NvbXBsIGlzIHVzZWQKKwkgICAgd2l0aG91dCArZXZhbC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jLCBzcmMvbWlzYzIuYworCitQYXRjaCA1LjZhLjAxMAorUHJvYmxlbTogICAgSW4gYSBmdW5jdGlvbiwgIjpzdGFydGluc2VydCEiIGRvZXMgbm90IGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZQorCSAgICBsaW5lIGlmIGEgIjpub3JtYWwiIGNvbW1hbmQgd2FzIHVzZWQgdG8gbW92ZSB0aGUgY3Vyc29yLiAoRmlzaGVyKQorU29sdXRpb246ICAgUmVzZXQgIndfc2V0X2N1cnN3YW50IiB0byBhdm9pZCB0aGF0IHdfY3Vyc3dhbnQgaXMgY2hhbmdlZCBhZ2Fpbi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNS42YS4wMTEgKGRlcGVuZHMgb24gNS42YS4wMDQpCitQcm9ibGVtOiAgICBBIG1pc3NpbmcgIjplbmRpZiIgb3IgIjplbmR3aGlsZSIgaW4gYSBmdW5jdGlvbiBkb2Vzbid0IGdpdmUgYW4KKwkgICAgZXJyb3IgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIEdpdmUgdGhhdCBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjZhLjAxMiAoZGVwZW5kcyBvbiA1LjZhLjAwOCkKK1Byb2JsZW06ICAgIFNvbWUgU3ludGF4IG1lbnUgZW50cmllcyBjYXVzZWQgYSBoaXQtZW50ZXIgcHJvbXB0LgorU29sdXRpb246ICAgQ2FsbCBhIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIGNvbW1hbmQgc2hvcnRlci4gIEFsc28gcmVuYW1lIGEgZmV3CisJICAgIGZ1bmN0aW9ucyB0byBhdm9pZCBuYW1lIGNsYXNoZXMuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNS42YS4wMTMKK1Byb2JsZW06ICAgIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIHdvcmtzIGRpZmZlcmVudCB3aGVuIGFub3RoZXIgY29tcGxldGlvbgorCSAgICB3YXMgZG9uZSBlYXJsaWVyLiAoSm9oYW5uZXMgWmVsbG5lcikKK1NvbHV0aW9uOiAgIFJlc2V0IHdpbV9pbmRleCB3aGVuIHN0YXJ0aW5nIGEgbmV3IGNvbXBsZXRpb24uCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDUuNmEuMDE0CitQcm9ibGVtOiAgICBWYXJpb3VzIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiBjb21waWxpbmcgYW5kIHJ1bm5pbmcgbGludCB3aXRoCisJICAgIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgZmVhdHVyZXMuCitTb2x1dGlvbjogICBGaXggdGhlIHdhcm5pbmcgbWVzc2FnZXMuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9leF9kb2NtZC5jLCBzcmMvZ3VpX2d0a194MTEuYywKKwkgICAgc3JjL29wdGlvbi5jLCBzcmMvc2NyZWVuLmMsIHNyYy9zZWFyY2guYywgc3JjL3N5bnRheC5jLAorCSAgICBzcmMvZmVhdHVyZS5oLCBzcmMvZ2xvYmFscy5oCisKK1BhdGNoIDUuNmEuMDE1CitQcm9ibGVtOiAgICBUaGUgdmltdHV0b3IgY29tbWFuZCBkb2Vzbid0IGFsd2F5cyBrbm93IHRoZSB2YWx1ZSBvZiAkVklNUlVOVElNRS4KK1NvbHV0aW9uOiAgIExldCBWaW0gZXhwYW5kICRWSU1SVU5USU1FLCBpbnN0ZWFkIG9mIHRoZSBzaGVsbC4KK0ZpbGVzOgkgICAgc3JjL3ZpbXR1dG9yCisKK1BhdGNoIDUuNmEuMDE2IChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogV2luZG93IHNpemUgaXMgcmVzdHJpY3RlZCB3aGVuIHN0YXJ0aW5nLiAgQ2Fubm90IGRyYWcgdGhlCisJICAgIHdpbmRvdyBhbGwgb3ZlciB0aGUgZGVza3RvcC4KK1NvbHV0aW9uOiAgIEdldCByZWFsIHNjcmVlbiBzaXplIGluc3RlYWQgb2YgYXNzdW1pbmcgNjQweDQwMC4gIERvIG5vdCB1c2UgYQorCSAgICBmaXhlZCBudW1iZXIgZm9yIHRoZSBkcmFnIGxpbWl0cy4gKEF4ZWwgS2llbGhvcm4pCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNS42YS4wMTcKK1Byb2JsZW06ICAgIFRoZSAiUGFzdGUiIGVudHJ5IGluIHBvcHVwIG1lbnUgZm9yIFZpc3VhbCwgSW5zZXJ0IGFuZCBDbWRsaW5lCisJICAgIG1vZGUgaXMgaW4gdGhlIHdyb25nIHBvc2l0aW9uLiAoU3RvbCkKK1NvbHV0aW9uOiAgIEFkZCBwcmlvcml0eSBudW1iZXJzIGZvciBhbGwgUGFzdGUgbWVudSBlbnRyaWVzLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDUuNmEuMDE4CitQcm9ibGVtOiAgICBHVEsgR1VJOiBzdWJtZW51IHByaW9yaXR5IGRvZXNuJ3Qgd29yay4KKwkgICAgSGVscCBkaWFsb2cgY291bGQgYmUgZGVzdHJveWVkIHRvbyBzb29uLgorCSAgICBXaGVuIGNsb3NpbmcgYSBkaWFsb2cgd2luZG93IChlLmcuIHRoZSAiQVRURU5USU9OIiBvbmUpLCBWaW0gd291bGQKKwkgICAganVzdCBoYW5nLgorCSAgICBXaGVuIEdUSyB0aGVtZSBpcyBjaGFuZ2VkLCBWaW0gZG9lc24ndCBhZGp1c3QgdG8gdGhlIG5ldyBjb2xvcnMuCisJICAgIEFyZ3VtZW50IGZvciAiOnByb21wdGZpbmQiIGlzbid0IHVzZWQuCitTb2x1dGlvbjogICBGaXhlZCB0aGUgbWVudGlvbmVkIHByb2JsZW1zLgorCSAgICBNYWRlIHRoZSBkaWFsb2dzIGxvb2smZmVlbCBuaWNlci4KKwkgICAgTW92ZWQgZnVuY3Rpb25zIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBhIGZvcndhcmQgZGVjbGFyYXRpb24uCisJICAgIEZpeGVkIHJlZW50cmFuY3kgb2YgdGhlIGZpbGUgYnJvd3NlciBkaWFsb2cuCisJICAgIEFkZGVkIGRyYWcmZHJvcCBzdXBwb3J0IGZvciBHTk9NRS4KKwkgICAgSW5pdCB0aGUgdGV4dCBmb3IgdGhlIEZpbmQvcmVwbGFjZSBkaWFsb2cgZnJvbSB0aGUgbGFzdCB1c2VkCisJICAgIHNlYXJjaCBzdHJpbmcuICBTZXQgIm1hdGNoIHdob2xlIHdvcmQiIHRvZ2dsZSBidXR0b24gY29ycmVjdGx5LgorCSAgICBNYWRlIHJlcGVhdCByYXRlIGZvciBkcmFnIG91dHNpZGUgb2Ygd2luZG93IGRlcGVuZCBvbiB0aGUKKwkgICAgZGlzdGFuY2UgZnJvbSB0aGUgd2luZG93LiAgKE1hcmNpbiBEYWxlY2tpKQorCSAgICBNYWRlIHRoZSBkcmFnIGluIFZpc3VhbCBtb2RlIGFjdHVhbGx5IHdvcmsuCisJICAgIFJlbW92ZWQgcmVjdXJzaXZlbmVzcyBwcm90ZWN0aW9uIGZyb20gZ3VpX21jaF9nZXRfcmdiKCksIGl0IG1pZ2h0CisJICAgIGNhdXNlIG1vcmUgdHJvdWJsZSB0aGFuIGl0IHNvbHZlcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvdWkuYywKKwkgICAgc3JjL3Byb3RvL3VpLnBybywgc3JjL21pc2MyLmMKKworUGF0Y2ggNS42YS4wMTkKK1Byb2JsZW06ICAgIFdoZW4gdHJ5aW5nIHRvIHJlY292ZXIgdGhyb3VnaCBORlMsIHdoaWNoIHVzZXMgYSBsYXJnZSBibG9jayBzaXplLAorCSAgICBWaW0gbWlnaHQgdGhpbmsgdGhlIHN3YXAgZmlsZSBpcyBlbXB0eSwgYmVjYXVzZSBtZl9ibG9ja25yX21heCBpcworCSAgICB6ZXJvLiAgKFNjb3R0IE1jRGVybW90dCkKK1NvbHV0aW9uOiAgIFdoZW4gY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgYmxvY2tzIG9mIHRoZSBmaWxlIGluIG1mX29wZW4oKSwKKwkgICAgcm91bmQgdXAgaW5zdGVhZCBvZiBkb3duLgorRmlsZXM6CSAgICBzcmMvbWVtZmlsZS5jCisKK1BhdGNoIDUuNmEuMDIwCitQcm9ibGVtOiAgICBHVUkgR1RLOiBDb3VsZCBub3Qgc2V0IGRpc3BsYXkgZm9yIGd2aW0uCitTb2x1dGlvbjogICBBZGQgIi1kaXNwbGF5IiBhbmQgIi0tZGlzcGxheSIgYXJndW1lbnRzLiAoTWFyY2luIERhbGVja2kpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDUuNmEuMDIxCitQcm9ibGVtOiAgICBSZWNvdmVyaW5nIHN0aWxsIG1heSBub3Qgd29yayB3aGVuIHRoZSBibG9jayBzaXplIG9mIHRoZSBkZXZpY2UKKwkgICAgd2hlcmUgdGhlIHN3YXAgZmlsZSBpcyBsb2NhdGVkIGlzIGxhcmdlciB0aGFuIDQwOTYuCitTb2x1dGlvbjogICBSZWFkIGJsb2NrIDAgd2l0aCB0aGUgbWluaW1hbCBibG9jayBzaXplLgorRmlsZXM6CSAgICBzcmMvbWVtbGluZS5jLCBzcmMvbWVtZmlsZS5jLCBzcmMvdmltLmgKKworUGF0Y2ggNS42YS4wMjIgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBXaGVuIGFuIGVycm9yIGluIHRoZSB2aW1yYyBjYXVzZXMgYSBkaWFsb2cgdG8gcG9wIHVwCisJICAgIChlLmcuLCBmb3IgYW4gZXhpc3Rpbmcgc3dhcCBmaWxlKSwgVmltIGNyYXNoZXMuIChEYXZpZCBFbGlucykKK1NvbHV0aW9uOiAgIEJlZm9yZSBzaG93aW5nIGEgZGlhbG9nLCBvcGVuIHRoZSBtYWluIHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjZhLjAyMworUHJvYmxlbTogICAgVXNpbmcgZXhwYW5kKCIlOmdzPz8vPyIpIGNhdXNlcyBhIGNyYXNoLiAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIHJ1bm5pbmcgaW50byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgaW4gZG9fc3RyaW5nX3N1YigpLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDUuNmEuMDI0CitQcm9ibGVtOiAgICBVc2luZyBhbiBhdXRvY29tbWFuZCB0byBkZWxldGUgYSBidWZmZXIgd2hlbiBsZWF2aW5nIGl0IGNhbiBjYXVzZQorCSAgICBhIGNyYXNoIHdoZW4ganVtcGluZyB0byBhIHRhZy4gKEZyYW56IEdvcmtvdHRlKQorU29sdXRpb246ICAgSW4gZG9fdGFnKCksIHN0b3JlIHRhZ3N0YWNrbGVuIGJlZm9yZSBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyLgorCSAgICBDaGVjayB0YWdzdGFja2lkeCBhZnRlciBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyLgorCSAgICBBZGQgZXh0cmEgY2hlY2sgaW4gd2luX3NwbGl0KCkgaWYgdGFnbmFtZSBpc24ndCBOVUxMLgorRmlsZXM6CSAgICBzcmMvdGFnLmMsIHNyYy93aW5kb3cuYworCitQYXRjaCA1LjZhLjAyNSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFRoZSB0YWJsZXMgZm9yIHRvdXBwZXIoKSBhbmQgdG9sb3dlcigpIGFyZSBpbml0aWFsaXplZAorCSAgICB0b28gbGF0ZS4gKE1pa2UgU3RlZWQpCitTb2x1dGlvbjogICBNb3ZlIHRoZSBpbml0aWFsaXphdGlvbiB0byB3aW4zMl9pbml0KCkgYW5kIGNhbGwgaXQgZnJvbSBtYWluKCkuCitGaWxlczoJICAgIHNyYy9tYWluLmMsIHNyYy9vc193MzIuYywgc3JjL3Byb3RvL29zX3czMi5wcm8KKworUGF0Y2ggNS42YS4wMjYKK1Byb2JsZW06ICAgIFdoZW4gdGhlIFNOaUZGIGNvbm5lY3Rpb24gaXMgb3Blbiwgc2hlbGwgY29tbWFuZHMgaGFuZy4gKFBydWVtbWVyKQorU29sdXRpb246ICAgU2tpcCBhIHNlY29uZCB3YWl0KCkgY2FsbCBpZiB3YWl0cGlkKCkgYWxyZWFkeSBkZXRlY3RlZCB0aGF0IHRoZQorCSAgICBjaGlsZCBoYXMgZXhpdGVkLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNmEuMDI3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogVGhlICJFZGl0IHdpdGggVmltIiBwb3B1cCBtZW51IGVudHJ5IGNhdXNlcyBwcm9ibGVtcworCSAgICBmb3IgdGhlIE9mZmljZSB0b29sYmFyLgorU29sdXRpb246ICAgVXNlIGEgc2hlbGwgZXh0ZW5zaW9uIGRsbC4gKFRpYW5taWFvIEh1KQorCSAgICBBZGRlZCBpdCB0byB0aGUgaW5zdGFsbCBhbmQgdW5pbnN0YWwgcHJvZ3JhbXMsIHJlcGxhY2VzIHRoZSBvbGQKKwkgICAgIkVkaXQgd2l0aCBWaW0iIG1lbnUgcmVnaXN0cnkgZW50cmllcy4KK0ZpbGVzOgkgICAgc3JjL2Rvc2luc3QuYywgc3JjL3VuaW5zdGFsLmMsIGd2aW1leHQvKiwgcnVudGltZS9kb2MvZ3VpX3czMi50eHQKKworUGF0Y2ggNS42YS4wMjggKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBEaWFsb2dzIGFuZCB0ZWFyLW9mZiBtZW51cyBjYW4ndCBoYW5kbGUgbXVsdGktYnl0ZQorCSAgICBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgQWRqdXN0IG5Db3B5QW5zaVRvV2lkZUNoYXIoKSB0byBoYW5kbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzCisJICAgIGNvcnJlY3RseS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1ZFUlNJT04gNS43CQkJCQkJKnZlcnNpb24tNS43KgorCitWZXJzaW9uIDUuNyBpcyBhIGJ1Zy1maXggdmVyc2lvbiBvZiA1LjYuCisKK0NoYW5nZWQJCQkJCQkJKmNoYW5nZWQtNS43KgorLS0tLS0tLQorCitSZW5hbWVkIHNyYy9JTlNUQUxMLm1hYyB0byBJTlNUQUxMX21hYy50eHQgdG8gYXZvaWQgaXQgYmVpbmcgcmVjb2duaXplZCB3aXRoIGEKK3dyb25nIGZpbGUgdHlwZS4gIEFsc28gcmVuYW1lZCBzcmMvSU5TVEFMTC5hbWlnYSB0byBJTlNUQUxMX2FtaS50eHQuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTUuNyoKKy0tLS0tCisKK05ldyBzeW50YXggZmlsZXM6CitzdHAJCVN0b3JlZCBQcm9jZWR1cmVzIChKZWZmIExhbnphcm90dGEpCitzbm5zbmV0LCBzbm5zcGF0LCBzbm5zcmVzCVNOTlMgKERhdmlkZSBBbGJlcmFuaSkKK21lbAkJTUVMIChSb2JlcnQgTWluc2spCitydWJ5CQlSdWJ5IChNaXJrbyBOYXNhdG8pCit0bGkJCVRlYWxJbmZvIChLdXJ0IFcuIEFuZHJld3MpCitvcmEJCU9yYWNsZSBjb25maWcgZmlsZSAoU2FuZG9yIEtvcGFueWkpCithYmFxdXMJCUFiYXF1cyAoQ2FybCBPc3Rlcndpc2NoKQoranByb3BlcnRpZXMJSmF2YSBQcm9wZXJ0aWVzIChTaW1vbiBCYWxkd2luKQorYXBhY2hlCQlBcGFjaGUgY29uZmlnIChBbGxhbiBLZWxseSkKK2NzcAkJQ1NQIChKYW4gQnJlZGVyZWtlKQorc2FtYmEJCVNhbWJhIGNvbmZpZyAoUmFmYWVsIEdhcmNpYS1TdWFyZXopCitrc2NyaXB0CQlLREUgc2NyaXB0IChUaG9tYXMgQ2FwcmljZWxsaSkKK2hiCQlIeXBlciBCdWlsZGVyIChBbGVqYW5kcm8gRm9yZXJvIEN1ZXJ2bykKK2ZvcnRyYW4JCUZvcnRyYW4gKHJld3JpdHRlbikgKEFqaXQgSi4gVGhha2thcikKK3NtbAkJU01MIChGYWJyaXppbyBaZW5vIENvcm5lbGxpKQorY3ZzCQlDVlMgY29tbWl0IChNYXR0IER1bmZvcmQpCithc3BwZXJsCQlBU1AgUGVybCAoQWFyb24gSG9wZSkKK2JjCQlCQyBjYWxjdWxhdG9yIChWbGFkaW1pciBTY2hvbHR6KQorbGF0dGUJCUxhdHRlIChOaWNrIE1vZmZpdHQpCit3bWwJCVdNTCAoR2VyZnJpZWQgRnVjaHMpCisKK0luY2x1ZGVkIEV4dWJlcmFudCBjdGFncyAzLjUuMS4gKERhcnJlbiBIaWViZXJ0KQorCisiZGlzcGxheSIgYW5kICJmb2xkIiBhcmd1bWVudHMgZm9yIHN5bnRheCBpdGVtcy4gIEZvciBmdXR1cmUgZXh0ZW5zaW9uLCB0aGV5CithcmUgaWdub3JlZCBub3cuCisKK3N0cmZ0aW1lKCkgZnVuY3Rpb24gZm9yIHRoZSBNYWNpbnRvc2guCisKK21hY3Jvcy9leHBsb3Jlci52aW06IEEgZmlsZSBicm93c2VyIHNjcmlwdCAoTSBBIEF6aXogQWhtZWQpCisKKworRml4ZWQJCQkJCQkJKmZpeGVkLTUuNyoKKy0tLS0tCisKK1RoZSAxNiBiaXQgTVMtRE9TIHZlcnNpb24gaXMgbm93IGNvbXBpbGVkIHdpdGggQmNjIDMuMSBpbnN0ZWFkIG9mIDQuMC4gIFRoZQorZXhlY3V0YWJsZSBpcyBzbWFsbGVyLgorCitXaGVuIGEgIm1ha2UgdGVzdCIgZmFpbGVkLCB0aGUgb3V0cHV0IGZpbGUgd2FzIGxvc3QuICBSZW5hbWUgaXQgdG8KK3Rlc3Q5OS5mYWlsZWQgdG8gYmUgYWJsZSB0byBzZWUgd2hhdCB3ZW50IHdyb25nLgorCitBZnRlciBzb3VyY2luZyBidWdyZXBvcnQudmltLCBpdCdzIG5vdCBjbGVhciB0aGF0IGJ1Z3JlcG9ydC50eHQgaGFzIGJlZW4KK3dyaXR0ZW4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgRWRpdCBidWdyZXBvcnQudHh0IHRvIGF2b2lkIHRoYXQuCisKK0FkZGluZyBJTUUgc3VwcG9ydCB3aGVuIHVzaW5nIE1ha2VmaWxlLnczMiBkaWRuJ3Qgd29yay4gKFRhcm8gTXVyYW9rYSkKKworV2luMzIgY29uc29sZTogTW91c2UgZHJhZ3Mgd2VyZSBwYXNzZWQgb24gZXZlbiB3aGVuIHRoZSBtb3VzZSBkaWRuJ3QgbW92ZS4KKworUGVybCBpbnRlcmZhY2U6IEluIEJ1ZmZlcnMoKSwgdHlwZSBvZiBhcmd1bWVudCB0byBTdlBWKCkgd2FzIGludCwgc2hvdWxkIGJlCitTVFJMRU4uIChUb255IExlbmVpcykKKworUHJvYmxlbSB3aXRoIHByb3RvdHlwZSBmb3IgaW5kZXgoKSBvbiBBSVggNC4zLjAuICBBZGRlZCBjaGVjayBmb3IgX0FJWDQzIGluCitvc191bml4LmguIChKYWtlIEhhbWJ5KQorCitNYXBwaW5ncyBpbiBtc3dpbi52aW0gY291bGQgYnJlYWsgd2hlbiBzb21lIGNvbW1hbmRzIGFyZSBtYXBwZWQuICBBZGQgIm5vcmUiCit0byBtb3N0IG1hcHBpbmdzIHRvIGF2b2lkIHJlLW1hcHBpbmcuCisKK21vZGlmeV9mbmFtZSgpIG1hZGUgYSBjb3B5IG9mIGEgZmlsZSBuYW1lIGZvciAiOnAiIHdoZW4gaXQgYWxyZWFkeSB3YXMgYSBmdWxsCitwYXRoIG5hbWUsIHdoaWNoIGlzIGEgYml0IHNsb3cuCisKK1dpbjMyIHdpdGggQm9ybGFuZCBDKysgNS41OiBQYXNzIHRoZSBwYXRoIHRvIHRoZSBjb21waWxlciBvbiB0byB4eGQgYW5kIGN0YWdzLAordG8gYXZvaWQgZGVwZW5kaW5nIG9uICRQQVRILiAgRml4ZWQgIm1ha2UgY2xlYW4iLgorCitNYW55IGZpeGVzIHRvIE1hY2ludG9zaCBzcGVjaWZpYyBwYXJ0czogKG1vc3RseSBieSBEYW55IFN0QW1hbnQpCistIE9ubHkgb25lIEhlbHAgbWVudS4KKy0gTm8gbW9yZSBjcmFzaCB3aGVuIHJlbW92aW5nIGEgbWVudSBpdGVtLgorLSBTdXBwb3J0IGFzIEV4dGVybmFsIEVkaXRvciBmb3IgQ29kZXdhcnJpb3IgKHN0aWxsIHNvbWUgbGl0dGxlIGdsaXRjaGVzKS4KKy0gUG9wdXAgbWVudSBzdXBwb3J0LgorLSBGaXhlZCBjcmFzaCB3aGVuIHBhc3RpbmcgYWZ0ZXIgYXBwbGljYXRpb24gc3dpdGNoLgorLSBDb2xvciBmcm9tIHJnYi50eHQgcHJvcGVybHkgZGlzcGxheWVkLgorLSAnaXNwcmludCcgZGVmYXVsdCBpbmNsdWRlcyBhbGwgY2hhcnMgYWJvdmUgJ34nLiAoQXhlbCBLaWVsaG9ybikKKy0gbWFjX2V4cGFuZHBhdGgoKSB3YXMgbGVha2luZyBtZW1vcnkuCistIEFkZCBkaWdyYXBocyB0YWJsZS4gKEF4ZWwgS2llbGhvcm4pCistIE11bHRpLWJ5dGUgc3VwcG9ydDogKEtlbmljaGkgQXNhaSkKKyAgU3dpdGNoIGtleXNjcmlwdCB3aGVuIGdvaW5nIGluL291dCBvZiBJbnNlcnQgbW9kZS4KKyAgRHJhdyBtdWx0aS1ieXRlIGNoYXJhY3RlciBjb3JyZWN0bHkuCisgIERvbid0IHVzZSBtYmxlbigpIGJ1dCBoaWdoZXN0IGJpdCBvZiBjaGFyIHRvIGRldGVjdCBtdWx0aS1ieXRlIGNoYXIuCisgIERpc3BsYXkgdmFsdWUgb2YgbXVsdGktYnl0ZSBpbiBzdGF0dXNsaW5lIChhbHNvIGZvciBvdGhlciBzeXN0ZW1zKS4KKy0gbW91c2UgYnV0dG9uIHdhcyBub3QgaW5pdGlhbGl6ZWQgcHJvcGVybHkgdG8gTU9VU0VfTEVGVCB3aGVuCisgIFVTRV9DVFJMQ0xJQ0tNRU5VIG5vdCBkZWZpbmVkLgorLSBXaXRoIEphcGFuZXNlIFNKSVMgY2hhcmFjdGVyczogTWFrZSAidyIsICJiIiwgYW5kICJlIiB3b3JrCisgIHByb3Blcmx5LiAgKEtlbmljaGkgQXNhaSkKKy0gUmVwbGFjZWQgb2xkIENvZGVXYXJyaW9yIGZpbGUgb3NfbWFjLkNXOS5ocXggd2l0aCBvc19tYWMuY3c1LnNpdC5ocXguCisKK0ZpeGVzIGZvciBWTVM6IChab2x0YW4gQXJwYWRmZnkpIChhbHNvIHNlZSBwYXRjaCA1LjYuMDQ1IGJlbG93KQorLSBBZGRlZCBNYWtlZmlsZV92bXMubW1zIGFuZCB2aW1yYy52bXMgdG8gc3JjL3Rlc3RkaXIgdG8gYmUgYWJsZSB0byBydW4gdGhlCisgIHRlc3RzLgorLSBWYXJpb3VzIGZpeGVzLgorLSBTZXQgJ3VuZG9sZXZlbHMnIHRvIDEwMDAgYnkgZGVmYXVsdC4KKy0gTWFkZSBtY2hfc2V0dGl0bGUoKSBlcXVpdmFsZW50IHRvIHRoZSBvbmUgaW4gb3NfdW5peC5jLgorCitSaXNjT1M6IEEgZmV3IHByb3RvdHlwZXMgZm9yIG9zX3Jpc2Nvcy5jIHdlcmUgb3V0ZGF0ZWQuICBHZW5lcmF0ZSBwcm90b3R5cGVzCithdXRvbWF0aWNhbGx5LgorCisKK1ByZXZpb3VzbHkgcmVsZWFzZWQgcGF0Y2hlczoKKworUGF0Y2ggNS42LjAwMQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAic2V0IGJzPTAgc2kgY2luIiwgSW5zZXJ0aW5nICIjPEJTPiIgb3IgIn08QlM+IiB3aGljaAorCSAgICByZWR1Y2VzIHRoZSBpbmRlbnQgZG9lc24ndCBkZWxldGUgdGhlICIjIiBvciAifSIuIChMb3J0b24pCitTb2x1dGlvbjogICBBZGp1c3QgYWlfY29sIGluIGluc190cnlfc2koKS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA1LjYuMDAyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHRoZSB2aW0udmltIHN5bnRheCBmaWxlLCBhIGNvbW1lbnQgd2l0aCBhbGwgdXBwZXJjYXNlCisJICAgIGNoYXJhY3RlcnMgY2F1c2VzIGEgaGFuZy4KK1NvbHV0aW9uOiAgIEFkanVzdCBwYXR0ZXJuIGZvciB2aW1Db21tZW50VGl0bGUgKENoYXJsZXMgQ2FtcGJlbGwpCitGaWxlczoJICAgIHJ1bnRpbWUvc3ludGF4L3ZpbS52aW0KKworUGF0Y2ggNS42LjAwMworUHJvYmxlbTogICAgR1RLIEdVSTogTG9hZGluZyBhIHVzZXIgZGVmaW5lZCB0b29sYmFyIGJpdG1hcCBnaXZlcyBhIHdhcm5pbmcKKwkgICAgYWJvdXQgdGhlIGNvbG9ybWFwLiAgUHJvYmFibHkgYmVjYXVzZSB0aGUgd2luZG93IGhhcyBub3QgYmVlbgorCSAgICBvcGVuZWQgeWV0LgorU29sdXRpb246ICAgVXNlIGdka19waXhtYXBfY29sb3JtYXBfY3JlYXRlX2Zyb21feHBtKCkgdG8gY29udmVydCB0aGUgeHBtIGZpbGUuCisJICAgIChLZWl0aCBSYWRlYmF1Z2gpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNS42LjAwNCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUkgd2l0aCBJTUU6IFdoZW4gc2V0dGluZyAnZ3VpZm9udCcgdG8gIioiLCB0aGUgZm9udAorCSAgICByZXF1ZXN0ZXIgYXBwZWFycyB0d2ljZS4KK1NvbHV0aW9uOiAgIEluIGd1aV9tY2hfaW5pdF9mb250KCkgZG9uJ3QgY2FsbCBnZXRfbG9nZm9udCgpIGJ1dCBjb3B5CisJICAgIG5vcm1fbG9nZm9udCBmcm9tIGZoLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNi4wMDUKK1Byb2JsZW06ICAgIFdoZW4gJ3dpbm1pbmhlaWdodCcgaXMgemVybywgQ1RSTC1XIC0gd2l0aCBhIGJpZyBudW1iZXIgY2F1c2VzIGEKKwkgICAgY3Jhc2guICAoRGF2aWQgS290Y2hhbikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBuZWdhdGl2ZSB3aW5kb3cgaGVpZ2h0IGluIHdpbl9zZXRoZWlnaHQoKS4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDUuNi4wMDYKK1Byb2JsZW06ICAgIEdUSyBHVUk6IEJvbGQgZm9udCBjYW5ub3QgYWx3YXlzIGJlIHVzZWQuICBNZW1vcnkgaXMgZnJlZWQgdG9vCisJICAgIGVhcmx5IGluIGd1aV9tY2hfaW5pdF9mb250KCkuCitTb2x1dGlvbjogICBNb3ZlIGNhbGwgdG8gZ19mcmVlKCkgdG8gYWZ0ZXIgd2hlcmUgc2R1cCBpcyB1c2VkLiAoQXJ0ZW0gSG9keXVzaCkKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNS42LjAwNyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBJTUU6IEZvbnQgaXMgbm90IGNoYW5nZWQgd2hlbiBzY3JlZW4gZm9udCBpcyBjaGFuZ2VkLiBBbmQKKwkgICAgSU1FIGNvbXBvc2l0aW9uIHdpbmRvdyBkb2VzIG5vdCB0cmFjZSB0aGUgY3Vyc29yLgorU29sdXRpb246ICAgSW5pdGlhbGl6ZSBJTUUgZm9udC4gIFdoZW4gY3Vyc29yIGlzIG1vdmVkLCBzZXQgSU1FIGNvbXBvc2l0aW9uCisJICAgIHdpbmRvdyB3aXRoIEltZVNldENvbXBvc2l0aW9uV2luZG93KCkuICBBZGQgY2FsbCB0bworCSAgICBJbW1SZWxlYXNlQ29udGV4dCgpIGluIHNldmVyYWwgcGxhY2VzLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9ndWlfdzMyLmMsIHNyYy9wcm90by9ndWlfdzMyLnBybworCitQYXRjaCA1LjYuMDA4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIHR3byBmaWxlcyBleGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudCBjYXNlCisJICAgICh0aHJvdWdoIE5GUyBvciBTYW1iYSksIGZpeGluZyB0aGUgZmlsZSBuYW1lIGNhc2UgY291bGQgY2F1c2UgdGhlCisJICAgIHdyb25nIG9uZSB0byBiZSBlZGl0ZWQuCitTb2x1dGlvbjogICBQcmVmZXIgYSBwZXJmZWN0IG1hdGNoIGFib3ZlIGEgbWF0Y2ggd2hpbGUgaWdub3JpbmcgY2FzZSBpbgorCSAgICBmbmFtZV9jYXNlKCkuICAoRmxlbW1pbmcgTWFkc2VuKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA1LjYuMDA5IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogR2FyYmFnZSBpbiBXaW5kb3dzIEV4cGxvcmVyIGhlbHAgbGluZSB3aGVuIHNlbGVjdGluZworCSAgICAiRWRpdCB3aXRoIFZpbSIgcG9wdXAgbWVudSBlbnRyeS4KK1NvbHV0aW9uOiAgIE9ubHkgcmV0dXJuIHRoZSBoZWxwIGxpbmUgd2hlbiBjYWxsZWQgd2l0aCB0aGUgR0NTX0hFTFBURVhUIGZsYWcuCisJICAgIChUaWFubWlhbyBIdSkKK0ZpbGVzOgkgICAgR3ZpbUV4dC9ndmltZXh0LmNwcAorCitQYXRjaCA1LjYuMDEwCitQcm9ibGVtOiAgICBBIGZpbGUgbmFtZSB3aGljaCBjb250YWlucyBhIFRBQiB3YXMgbm90IHJlYWQgY29ycmVjdGx5IGZyb20gdGhlCisJICAgIHZpbWluZm8gZmlsZSBhbmQgdGhlICI6bHMiIGxpc3Rpbmcgd2FzIG5vdCBhbGlnbmVkIHByb3Blcmx5LgorU29sdXRpb246ICAgUGFyc2UgdGhlIGJ1ZmZlciBsaXN0IGxpbmVzIGluIHRoZSB2aW1pbmZvIGZpbGUgZnJvbSB0aGUgZW5kCisJICAgIGJhY2t3YXJkcy4gIENvdW50IGEgVGFiIGZvciB0d28gY2hhcmFjdGVycyB0byBhbGlnbiB0aGUgIjpscyIgbGlzdC4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDUuNi4wMTEKK1Byb2JsZW06ICAgIFdoZW4gJ2NvbHVtbnMnIGlzIGh1Z2UgKHVzaW5nIGEgdGlueSBmb250KSBhbmQgJ3N0YXR1c2xpbmUnIGlzCisJICAgIHVzZWQsIFZpbSBjYW4gY3Jhc2guCitTb2x1dGlvbjogICBMaW1pdCBtYXhsZW4gdG8gTUFYUEFUSEwgaW4gd2luX3JlZHJfY3VzdG9tKCkuIChKb2huIE11bGxpbikKK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDUuNi4wMTIKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgInpzaCIgZm9yIC9iaW4vc2gsIHRvb2xjaGVjayBtYXkgaGFuZyB1bnRpbCAiZXhpdCIgaXMKKwkgICAgdHlwZWQuIChLdXJhdGN6eWspCitTb2x1dGlvbjogICBBZGQgIi1jIGV4aXQiIHdoZW4gY2hlY2tpbmcgZm9yIHRoZSBzaGVsbCB2ZXJzaW9uLgorRmlsZXM6CSAgICBzcmMvdG9vbGNoZWNrCisKK1BhdGNoIDUuNi4wMTMKK1Byb2JsZW06ICAgIE11bHRpYnl0ZSBjaGFyIGluIHRvb2x0aXAgaXMgYnJva2VuLgorU29sdXRpb246ICAgQ29uc2lkZXIgbXVsdGlieXRlIGNoYXIgaW4gcmVwbGFjZV90ZXJtY29kZXMoKS4gKFRhcm8gTXVyYW9rYSkKK0ZpbGVzOiAgICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNS42LjAxNAorUHJvYmxlbTogICAgV2hlbiBjdXJzb3IgaXMgYXQgdGhlIGVuZCBvZiBsaW5lIGFuZCB0aGUgY2hhcmFjdGVyIHVuZGVyIGN1cnNvcgorCSAgICBpcyBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIsICJ5bCIgZG9lc24ndCB5YW5rIDEgbXVsdGlieXRlLWNoYXIuCisJICAgIChUYWt1aGlybyBOaXNoaW9rYSkKK1NvbHV0aW9uOiAgIFJlY29nbml6ZSBhIG11bHRpYnl0ZS1jaGFyIGF0IGVuZC1vZi1saW5lIGNvcnJlY3RseSBpbiBvbmVyaWdodCgpLgorCSAgICAoVGFybyBNdXJhb2thKQorCSAgICBBbHNvOiBtYWtlICIrcXVpY2tmaXgiIGluICI6dmVyc2lvbiIgb3V0cHV0IGFwcGVhciBhbHBoYWJldGljYWxseS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA1LjYuMDE1CitQcm9ibGVtOiAgICBOZXcgeHRlcm0gZGVsZXRlIGtleSBzZW5kcyA8RXNjPlszfiBieSBkZWZhdWx0LgorU29sdXRpb246ICAgQWRkZWQgPGtEZWw+IGFuZCA8a0lucz4gdG8gbWFrZSB0aGUgc2V0IG9mIGtleXBhZCBrZXlzIGNvbXBsZXRlLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2tleW1hcC5oLCBzcmMvbWlzYzEuYywKKwkgICAgc3JjL21pc2MyLmMsIHNyYy9ub3JtYWwuYywgc3JjL29zX3VuaXguYywgc3JjL3Rlcm0uYworCitQYXRjaCA1LjYuMDE2CitQcm9ibGVtOiAgICBXaGVuIGRlbGV0aW5nIGEgc2VhcmNoIHN0cmluZyBmcm9tIGhpc3RvcnkgZnJvbSBpbnNpZGUgYSBtYXBwaW5nLAorCSAgICBhbm90aGVyIGVudHJ5IGlzIGRlbGV0ZWQgdG9vLiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgUmVzZXQgbGFzdF9tYXB0aWNrIHdoZW4gZGVsZXRpbmcgdGhlIGxhc3QgZW50cnkgb2YgdGhlIHNlYXJjaAorCSAgICBoaXN0b3J5LiAgQWxzbzogSW5jcmVtZW50IG1hcHRpY2sgd2hlbiBzdGFydGluZyBhIG1hcHBpbmcgZnJvbQorCSAgICB0eXBlZCBjaGFyYWN0ZXJzIHRvIGF2b2lkIGEganVzdCBhZGRlZCBzZWFyY2ggc3RyaW5nIGJlaW5nCisJICAgIG92ZXJ3cml0dGVuIG9yIHJlbW92ZWQgZnJvbSBoaXN0b3J5LgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL2dldGNoYXIuYworCitQYXRjaCA1LjYuMDE3CitQcm9ibGVtOiAgICAiOnMvZS9cXk0vIiBzaG91bGQgcmVwbGFjZSBhbiAiZSIgd2l0aCBhIENUUkwtTSwgbm90IHNwbGl0IHRoZQorCSAgICBsaW5lLiAoQ2FsZGVyKQorU29sdXRpb246ICAgUmVwbGFjZSB0aGUgYmFja3NsYXNoIHdpdGggYSBDVFJMLVYgaW50ZXJuYWxseS4gKFN0ZXBoZW4gUC4gV2FsbCkKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA1LjYuMDE4CitQcm9ibGVtOiAgICAiOmhlbHAgWzpkaWdpdDpdIiB0YWtlcyBhIGxvbmcgdGltZSB0byBqdW1wIHRvIHRoZSB3cm9uZyBwbGFjZS4KK1NvbHV0aW9uOiAgIEluc2VydCBhIGJhY2tzbGFzaCB0byBhdm9pZCB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mICdbXScuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNS42LjAxOQorUHJvYmxlbTogICAgInNuZC5jIiwgInNuZC5qYXZhIiwgZXRjLiB3ZXJlIHJlY29nbml6ZWQgYXMgIm1haWwiIGZpbGV0eXBlLgorU29sdXRpb246ICAgTWFrZSBwYXR0ZXJuIGZvciBtYWlsIGZpbGV0eXBlIG1vcmUgc3RyaWN0LgorRmlsZXM6CSAgICBydW50aW1lL2ZpbGV0eXBlLnZpbQorCitQYXRjaCA1LjYuMDIwIChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBESkdQUCB2ZXJzaW9uIGVhdHMgcHJvY2Vzc29yIHRpbWUgKFdhbHRlciBCcmlzY29lKS4KK1NvbHV0aW9uOiAgIENhbGwgX19kcG1pX3lpZWxkKCkgaW4gdGhlIGJ1c3ktd2FpdCBsb29wLgorRmlsZXM6CSAgICBzcmMvb3NfbXNkb3MuYworCitQYXRjaCA1LjYuMDIxCitQcm9ibGVtOiAgICBXaGVuICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiLCBhIGRvdWJsZSBtb3VzZSBjbGljayBpbiBJbnNlcnQKKwkgICAgbW9kZSBkb2Vzbid0IHNlbGVjdCBsYXN0IGNoYXIgaW4gbGluZS4gKEx1dHopCitTb2x1dGlvbjogICBBbGxvdyBsZWF2aW5nIHRoZSBjdXJzb3Igb24gdGhlIE5VTCBwYXN0IHRoZSBsaW5lIGluIHRoaXMgY2FzZS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA1LjYuMDIyCitQcm9ibGVtOiAgICAiOmUgXH48VGFiPiIgZXhwYW5kcyB0byAiOmUgflwkY2VlbGVuIiwgd2hpY2ggZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgUmUtaW5zZXJ0IHRoZSBiYWNrc2xhc2ggYmVmb3JlIHRoZSAnficuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDUuNi4wMjMgKGV4dHJhKQorUHJvYmxlbTogICAgVmFyaW91cyB3YXJuaW5ncyBmb3IgdGhlIE1pbmcgY29tcGlsZXIuCitTb2x1dGlvbjogICBDaGFuZ2VzIHRvIGF2b2lkIHRoZSB3YXJuaW5ncy4gKEJpbGwgTWNDYXJ0aHkpCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9ndWlfdzMyLmMsIHNyYy9vc193MzJleGUuYywgc3JjL29zX3dpbjMyLmMsCisJICAgIHNyYy9zeW50YXguYywgc3JjL3ZpbS5yYworCitQYXRjaCA1LjYuMDI0IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIGNvbnNvbGU6IEVudGVyaW5nIENUUkwtXyByZXF1aXJlcyB0aGUgc2hpZnQga2V5LiAoS290Y2hhbikKK1NvbHV0aW9uOiAgIFNwZWNpZmljYWxseSBjYXRjaCBrZXljb2RlIDB4QkQsIGxpa2UgdGhlIEdVSS4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNS42LjAyNQorUHJvYmxlbTogICAgR1RLIEdVSTogU3RhcnRpbmcgdGhlIEdVSSBjb3VsZCBiZSBpbnRlcnJ1cHRlZCBieSBhIFNJR1dJTkNILgorCSAgICAoTmlscyBMb2huZXIpCitTb2x1dGlvbjogICBSZXBlYXQgdGhlIHJlYWQoKSBjYWxsIHRvIGdldCB0aGUgZ3VpX2luX3VzZSB2YWx1ZSB3aGVuCisJICAgIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNS42LjAyNiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMiBHVUk6IFRvb2xiYXIgYml0bWFwcyBhcmUgc2VhcmNoZWQgZm9yIGluCisJICAgICRWSU1SVU5USU1FL2JpdG1hcHMsIHdoaWxlIEdUSyBsb29rcyBpbiAkVklNL2JpdG1hcHMuIChLZWl0aAorCSAgICBSYWRlYmF1Z2gpCitTb2x1dGlvbjogICBVc2UgJFZJTS9iaXRtYXBzIGZvciBib3RoLCBiZWNhdXNlIHRoZXNlIGFyZSBub3QgcGFydCBvZiB0aGUKKwkgICAgZGlzdHJpYnV0aW9uIGJ1dCBkZWZpbmVkIGJ5IHRoZSB1c2VyLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jLCBydW50aW1lL2RvYy9ndWkudHh0CisKK1BhdGNoIDUuNi4wMjcKK1Byb2JsZW06ICAgIFRDTDogQ3Jhc2ggd2hlbiB1c2luZyBhIFRjbCBzY3JpcHQgKHJlcG9ydGVkIGZvciBXaW4zMikuCitTb2x1dGlvbjogICBDYWxsIFRjbF9GaW5kRXhlY3V0YWJsZSgpIGluIG1haW4oKS4gKEJyZW50IEZ1bGdoYW0pCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNS42LjAyOAorUHJvYmxlbTogICAgWHRlcm0gcGF0Y2ggbGV2ZWwgMTI2IHNlbmRzIGNvZGVzIGZvciBtb3VzZSBzY3JvbGwgd2hlZWwuCisJICAgIEZ1bGx5IHdvcmtzIHdpdGggeHRlcm0gcGF0Y2ggbGV2ZWwgMTMxLgorU29sdXRpb246ICAgUmVjb2duaXplIHRoZSBjb2RlcyBmb3IgYnV0dG9uIDQgKDB4NjApIGFuZCBidXR0b24gNSAoMHg2MSkuCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNS42LjAyOQorUHJvYmxlbTogICAgR1RLIEdVSTogU2hvcnRjdXQga2V5cyBjYW5ub3QgYmUgdXNlZCBmb3IgYSBkaWFsb2cuIChKb2hhbm5lcworCSAgICBaZWxsbmVyKQorU29sdXRpb246ICAgQWRkIHN1cHBvcnQgZm9yIHNob3J0Y3V0IGtleXMuIChNYXJjaW4gRGFsZWNraSkKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA1LjYuMDMwCitQcm9ibGVtOiAgICBXaGVuIGNsb3NpbmcgYSB3aW5kb3cgYW5kICdlYScgaXMgc2V0LCBWaW0gY2FuIGNyYXNoLiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorU29sdXRpb246ICAgU2V0ICJjdXJidWYiIHRvIGEgdmFsaWQgdmFsdWUgaW4gd2luX2Nsb3NlKCkuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA1LjYuMDMxCitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBXaGVuIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyIGVuZHMgaW4gQ1NJLCBWaW0gd2FpdHMKKwkgICAgZm9yIGFub3RoZXIgY2hhcmFjdGVyIHRvIGJlIHR5cGVkLgorU29sdXRpb246ICAgUmVjb2duaXplIHRoZSBDU0kgYXMgdGhlIHNlY29uZCBieXRlIG9mIGEgY2hhcmFjdGVyIGFuZCBkb24ndCB3YWl0CisJICAgIGZvciBhbm90aGVyIG9uZS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYworCitQYXRjaCA1LjYuMDMyCitQcm9ibGVtOiAgICBGdW5jdGlvbnMgd2l0aCBhbiBhcmd1bWVudCB0aGF0IGlzIGEgbGluZSBudW1iZXIgZG9uJ3QgYWxsIGFjY2VwdAorCSAgICAiLiIsICIkIiwgZXRjLiAoUmFsZiBBcmVucykKK1NvbHV0aW9uOiAgIEFkZCBnZXRfYXJ0X2xudW0oKSBhbmQgdXNlIGl0IGZvciBzZXRsaW5lKCksIGxpbmUyYnl0ZSgpIGFuZAorCSAgICBzeW5JRCgpLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDUuNi4wMzMKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6ICJmICIgc29tZXRpbWVzIHNraXBzIHRvIHRoZSBzZWNvbmQgc3BhY2UuICAoU3VuZy1IeXVuCisJICAgIE5hbSkKK1NvbHV0aW9uOiAgIENoYW5nZSBsb2dpYyBpbiBzZWFyY2hjKCkgdG8gc2tpcCB0cmFpbGluZyBieXRlIG9mIGEgZG91YmxlLWJ5dGUKKwkgICAgY2hhcmFjdGVyLgorCSAgICBBbHNvOiBBc2sgZm9yIHNlY29uZCBieXRlIHdoZW4gc2VhcmNoaW5nIGZvciBkb3VibGUtYnl0ZQorCSAgICBjaGFyYWN0ZXIuIChQYXJrIENob25nLURhZSkKK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDUuNi4wMzQgKGV4dHJhKQorUHJvYmxlbTogICAgQ29tcGlsaW5nIHdpdGggQm9ybGFuZCBDKysgNS41IGZhaWxzIG9uIHRvbG93ZXIoKSBhbmQgdG91cHBlcigpLgorU29sdXRpb246ICAgVXNlIFRPX0xPV0VSKCkgYW5kIFRPX1VQUEVSKCkgaW5zdGVhZC4gIEFsc28gYWRqdXN0IHRoZSBNYWtlZmlsZQorCSAgICB0byBtYWtlIHVzaW5nIGJjYyA1LjUgZWFzaWVyLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL21pc2MxLmMsIHNyYy9NYWtlZmlsZS5ib3IKKworUGF0Y2ggNS42LjAzNQorUHJvYmxlbTogICAgTGlzdGluZyB0aGUiK2NvbW1lbnRzIiBmZWF0dXJlIGluIHRoZSAiOnZlcnNpb24iIG91dHB1dCBkZXBlbmRlZAorCSAgICBvbiB0aGUgd3JvbmcgSUQuIChTdGVwaGVuIFAuIFdhbGwpCitTb2x1dGlvbjogICBDaGFuZ2UgIkNSWVBUViIgdG8gIkNPTU1FTlRTIi4KK0ZpbGVzOgkgICAgc3JjL3ZlcnNpb24uYworCitQYXRjaCA1LjYuMDM2CitQcm9ibGVtOiAgICBHVEsgR1VJOiBDb3B5L3Bhc3RlIHRleHQgZG9lc24ndCB3b3JrIGJldHdlZW4gZ3ZpbSBhbmQgRXRlcm0uCitTb2x1dGlvbjogICBTdXBwb3J0IFRFWFQgYW5kIENPTVBPVU5EX1RFWFQgc2VsZWN0aW9uIHRhcmdldHMuIChDaGlEZW9rIEh3YW5nKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA1LjYuMDM3CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBDYW4ndCB1c2UgImYiIGNvbW1hbmQgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlciBpbiBHVUkuCitTb2x1dGlvbjogICBFbmFibGUgWElNIGluIE5vcm1hbCBtb2RlIGZvciB0aGUgR1VJLiAoU3VuZy1IeXVuIE5hbSkKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9tdWx0Ynl0ZS5jCisKK1BhdGNoIDUuNi4wMzgKK1Byb2JsZW06ICAgIE11bHRpLWNsaWNrcyBpbiBHVUkgYXJlIGludGVycHJldGVkIGFzIGEgbW91c2Ugd2hlZWwgY2xpY2suICBXaGVuCisJICAgICd0dHltb3VzZScgaXMgInh0ZXJtIiBhIG1vdXNlIGNsaWNrIGlzIGludGVycHJldGVkIGFzIGEgbW91c2UKKwkgICAgd2hlZWwgY2xpY2suCitTb2x1dGlvbjogICBEb24ndCByZWNvZ25pemUgdGhlIG1vdXNlIHdoZWVsIGluIGNoZWNrX3Rlcm1jb2RlKCkgaW4gdGhlIEdVSS4KKwkgICAgVXNlIDB4NDMgZm9yIGEgbW91c2UgZHJhZyBpbiBkb194dGVybV90cmFjZSgpLCBub3QgMHg2My4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYywgc3JjL29zX3VuaXguYworCitQYXRjaCA1LjYuMDM5CitQcm9ibGVtOiAgICBNb3RpZiBHVUkgdW5kZXIgS0RFOiBXaGVuIHRyeWluZyB0byBsb2dvdXQsIFZpbSBoYW5ncyB1cCB0aGUKKwkgICAgc3lzdGVtLiAoSGVybWFubiBSb2NoaG9seikKK1NvbHV0aW9uOiAgIFdoZW4gaGFuZGxpbmcgdGhlIFdNX1NBVkVfWU9VUlNFTEYgZXZlbnQsIHNldCB0aGUgV01fQ09NTUFORAorCSAgICBwcm9wZXJ0eSBvZiB0aGUgd2luZG93IHRvIGxldCB0aGUgc2Vzc2lvbiBtYW5hZ2VyIGtub3cgd2UgZmluaXNoZWQKKwkgICAgc2F2aW5nIG91cnNlbHZlcy4KK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYworCitQYXRjaCA1LjYuMDQwCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6cyIgY29tbWFuZCwgbWF0Y2hpbmcgdGhlIHJlZ2V4cCBpcyBkb25lIHR3aWNlLgorU29sdXRpb246ICAgQWZ0ZXIgY29weWluZyB0aGUgbWF0Y2hlZCBsaW5lLCBhZGp1c3QgdGhlIHBvaW50ZXJzIGluc3RlYWQgb2YKKwkgICAgZmluZGluZyB0aGUgbWF0Y2ggYWdhaW4uIChMb2ljIEdyZW5pZSkgIEFkZGVkIHZpbV9yZWduZXdwdHIoKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL3JlZ2V4cC5jLCBzcmMvcHJvdG8vcmVnZXhwLnBybworCitQYXRjaCA1LjYuMDQxCitQcm9ibGVtOiAgICBHVUk6IEF0aGVuYSwgTW90aWYgYW5kIEdUSyBkb24ndCBnaXZlIG1vcmUgdGhhbiAxMCBkaWFsb2cgYnV0dG9ucy4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBidXR0b25zLgorCSAgICBBbHNvIHN1cHBvcnQgdGhlICd2JyBmbGFnIGluICdndWlvcHRpb25zJy4KKwkgICAgRm9yIEdUSzogQ2VudGVyIHRoZSBidXR0b25zLgorRmlsZXM6CSAgICBzcmMvZ3VpX2F0aGVuYS5jLCBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX21vdGlmLmMKKworUGF0Y2ggNS42LjA0MgorUHJvYmxlbTogICAgV2hlbiBkb2luZyAidmltIC11IHZpbXJjIiBhbmQgdmltcmMgY29udGFpbnMgIjpxIiwgdGhlIGN1cnNvciBpbgorCSAgICB0aGUgdGVybWluYWwgY2FuIHJlbWFpbiBvZmYuCitTb2x1dGlvbjogICBDYWxsIGN1cnNvcl9vbigpIGluIG1jaF93aW5kZXhpdCgpLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDUuNi4wNDMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiBXaGVuIHNlbGVjdGluZyBndWlmb250IHdpdGggdGhlIGRpYWxvZywgJ2d1aWZvbnQnCisJICAgIGRvZXNuJ3QgaW5jbHVkZSB0aGUgYm9sZCBvciBpdGFsaWMgYXR0cmlidXRlcy4KK1NvbHV0aW9uOiAgIEFwcGVuZCAiOmkiIGFuZC9vciAiOmIiIHRvICdndWlmb250JyBpbiBndWlfbWNoX2luaXRfZm9udCgpLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDUuNi4wNDQgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtRE9TIGFuZCBXaW5kb3dzOiBUaGUgbGluZSB0aGF0IGRvc2luc3QuZXhlIGFwcGVuZHMgdG8KKwkgICAgYXV0b2V4ZWMuYmF0IHRvIHNldCBQQVRIIGlzIHdyb25nIHdoZW4gVmltIGlzIGluIGEgZGlyZWN0b3J5IHdpdGgKKwkgICAgYW4gZW1iZWRkZWQgc3BhY2UuCitTb2x1dGlvbjogICBVc2UgZG91YmxlIHF1b3RlcyBmb3IgdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgYW4gZW1iZWRkZWQgc3BhY2UuCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNS42LjA0NSAoZXh0cmEpIChmaXhlZCB2ZXJzaW9uKQorUHJvYmxlbTogICAgVk1TOiBWYXJpb3VzIHNtYWxsIHByb2JsZW1zLgorU29sdXRpb246ICAgTWFueSBzbWFsbCBjaGFuZ2VzLiAoWm9sdGFuIEFycGFkZmZ5KQorCSAgICBGaWxlIG5hbWUgbW9kaWZpZXIgIjpoIiBrZWVwcyB0aGUgcGF0aCBzZXBhcmF0b3IuCisJICAgIEZpbGUgbmFtZSBtb2RpZmllciAiOmUiIGFsc28gcmVtb3ZlcyB2ZXJzaW9uLgorCSAgICBDb21waWxlIHdpdGggTUFYX0ZFQVQgYnkgZGVmYXVsdC4KKwkgICAgV2hlbiBjaGVja2luZyBmb3IgYXV0b2NvbW1hbmRzIGlnbm9yZSB2ZXJzaW9uIGluIGZpbGUgbmFtZS4KKwkgICAgQmUgYXdhcmUgb2YgZmlsZSBuYW1lcyBiZWluZyBjYXNlIGluc2Vuc2l0aXZlLgorCSAgICBBZGRlZCB2dDMyMCBidWlsdGluIHRlcm1jYXAuCisJICAgIEJlIHByZXBhcmVkIGZvciBhbiBlbXB0eSBkZWZhdWx0X3ZpbV9kaXIuCitGaWxlczoJICAgIHJ1bnRpbWUvZ3ZpbXJjX2V4YW1wbGUudmltLCBydW50aW1lL3ZpbXJjX2V4YW1wbGUudmltLAorCSAgICBydW50aW1lL2RvYy9vc192bXMudHh0LCBzcmMvZXZhbC5jLCBzcmMvZmVhdHVyZS5oLCBzcmMvZmlsZWlvLmMsCisJICAgIHNyYy9ndWlfbW90aWYuYywgc3JjL2d1aV92bXNfY29uZi5oLCBzcmMvbWFpbi5jLCBzcmMvbWVtbGluZS5jLAorCSAgICBzcmMvbWlzYzEuYywgc3JjL29wdGlvbi5jLCBzcmMvb3Nfdm1zX2NvbmYuaCwgc3JjL29zX3Ztcy5jLAorCSAgICBzcmMvb3Nfdm1zLmgsIHNyYy9vc192bXMubW1zLCBzcmMvdGFnLmMsIHNyYy90ZXJtLmMsIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNS42LjA0NgorUHJvYmxlbTogICAgU3lzdGVtcyB3aXRoIGJhY2tzbGFzaCBpbiBmaWxlIG5hbWU6IFdpdGggJ3NoZWxsc2xhc2gnIHNldCwgInZpbQorCSAgICAqLyouYyIgb25seSB1c2VzIGEgc2xhc2ggZm9yIHRoZSBmaXJzdCBmaWxlIG5hbWUuICAoSGFyJ0VsKQorU29sdXRpb246ICAgRml4IHNsYXNoZXMgaW4gZmlsZSBuYW1lIGFyZ3VtZW50cyBhZnRlciByZWFkaW5nIHRoZSB2aW1yYyBmaWxlLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNS42LjA0NworUHJvYmxlbTogICAgJENQUEZMQUdTIGlzIG5vdCBwYXNzZWQgb24gdG8gY3RhZ3MgY29uZmlndXJlLgorU29sdXRpb246ICAgQWRkIGl0LiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9jb25maWcubWsuaW4sIHNyYy9NYWtlZmlsZQorCitQYXRjaCA1LjYuMDQ4CitQcm9ibGVtOiAgICBDVFJMLVIgaW4gQ29tbWFuZC1saW5lIG1vZGUgaXMgZG9jdW1lbnRlZCB0byBpbnNlcnQgdGV4dCBhcyB0eXBlZCwKKwkgICAgYnV0IGluc2VydHMgdGV4dCBsaXRlcmFsbHkuCitTb2x1dGlvbjogICBNYWtlIENUUkwtUiBpbnNlcnQgdGV4dCBhcyB0eXBlZCwgdXNlIENUUkwtUiBDVFJMLVIgdG8gaW5zZXJ0CisJICAgIGxpdGVyYWxseS4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIEluc2VydCBtb2RlLiAgQnV0IGNoYXJhY3RlcnMKKwkgICAgdGhhdCBlbmQgQ29tbWFuZC1saW5lIG1vZGUgYXJlIGluc2VydGVkIGxpdGVyYWxseS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaW5kZXgudHh0LCBydW50aW1lL2RvYy9jbWRsaW5lLnR4dCwgc3JjL2V4X2dldGxuLmMsCisJICAgIHNyYy9vcHMuYywgc3JjL3Byb3RvL29wcy5wcm8KKworUGF0Y2ggNS42LjA0OQorUHJvYmxlbTogICAgRG9jdW1lbnRhdGlvbiBmb3IgWyFdIGFmdGVyICI6aWp1bXAiIGlzIHdyb25nIHdheSBhcm91bmQuIChCZW5qaQorCSAgICBGaXNoZXIpCitTb2x1dGlvbjogICBGaXggdGhlIGRvY3VtZW50YXRpb24uICBBbHNvIGltcHJvdmUgdGhlIGNvZGUgdG8gY2hlY2sgZm9yIGEgbWF0Y2gKKwkgICAgYWZ0ZXIgYSAvKiAqLyBjb21tZW50LgorRmlsZXM6CSAgICBydW50aW1lL2RvYy90YWdzZWFyY2gudHh0LCBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNS42LjA1MAorUHJvYmxlbTogICAgUmVwbGFjaW5nIGlzIHdyb25nIHdoZW4gcmVwbGFjaW5nIGEgc2luZ2xlLWJ5dGUgY2hhciB3aXRoCisJICAgIGRvdWJsZS1ieXRlIGNoYXIgb3IgdGhlIG90aGVyIHdheSBhcm91bmQuCitTb2x1dGlvbjogICBTaGlmdCB0aGUgdGV4dCBhZnRlciB0aGUgY2hhcmFjdGVyIHdoZW4gaXQgaXMgcmVwbGFjZWQuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgc3JjL21pc2MxLmMKKworUGF0Y2ggNS42LjA1MQorUHJvYmxlbTogICAgIjp0cHJldiIgYW5kICI6dG5leHQiIGRvbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0bworCSAgICBnbyBiZWZvcmUgdGhlIGZpcnN0IG9yIGJleW9uZCB0aGUgbGFzdCB0YWcuIChSb2JlcnQgV2ViYikKK1NvbHV0aW9uOiAgIEFkZGVkIGVycm9yIG1lc3NhZ2VzLiAgQWxzbzogRGVsYXkgYSBzZWNvbmQgd2hlbiBhIGZpbGUtcmVhZAorCSAgICBtZXNzYWdlIGlzIGdvaW5nIHRvIG92ZXJ3cml0ZSBhbiBlcnJvciBtZXNzYWdlLCBvdGhlcndpc2UgaXQgd29uJ3QKKwkgICAgYmUgc2Vlbi4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNS42LjA1MgorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2hlbiBhbiBFeCBjb21tYW5kIGhhcyBhICd8JyBvciAnIicgYXMgYSBzZWNvbmQgYnl0ZSwKKwkgICAgaXQgdGVybWluYXRlcyB0aGUgY29tbWFuZC4KK1NvbHV0aW9uOiAgIFNraXAgc2Vjb25kIGJ5dGUgb2YgbXVsdGktYnl0ZSBjaGFyIHdoZW4gY2hlY2tpbmcgZm9yICd8JyBhbmQgJyInLgorCSAgICAoQXNhaSBLZW5pY2hpKQorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjYuMDUzCitQcm9ibGVtOiAgICBDVFJMLV0gZG9lc24ndCB3b3JrIG9uIGEgdGFnIHRoYXQgY29udGFpbnMgYSAnfCcuIChDZXNhciBDcnVzaXVzKQorU29sdXRpb246ICAgRXNjYXBlICd8JywgJyInIGFuZCAnXCcgaW4gdGFnIG5hbWVzIHdoZW4gdXNpbmcgQ1RSTC1dIGFuZCBhbHNvCisJICAgIGZvciBjb21tYW5kLWxpbmUgY29tcGxldGlvbi4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjYuMDU0CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6ZSIgYW5kICI6ZSAjIiB0aGUgY3Vyc29yIGlzIHB1dCBpbiB0aGUgZmlyc3QgY29sdW1uCisJICAgIHdoZW4gJ3N0YXJ0b2ZsaW5lJyBpcyBzZXQuIChDb3JkZWxsKQorU29sdXRpb246ICAgVXNlIHRoZSBsYXN0IGtub3duIGNvbHVtbiB3aGVuICdzdGFydG9mbGluZScgaXMgc2V0LgorCSAgICBBbHNvLCB1c2UgRUNNRF9MQVNUIG1vcmUgb2Z0ZW4gdG8gc2ltcGxpZnkgdGhlIGNvZGUuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9wcm90by9idWZmZXIucHJvCisKK1BhdGNoIDUuNi4wNTUKK1Byb2JsZW06ICAgIFdoZW4gJ3N0YXR1c2xpbmUnIG9ubHkgY29udGFpbnMgYSB0ZXh0IHdpdGhvdXQgIiUiIGFuZCBkb2Vzbid0IGZpdAorCSAgICBpbiB0aGUgd2luZG93LCBWaW0gY3Jhc2hlcy4gKFJvbiBBYXJvbikKK1NvbHV0aW9uOiAgIERvbid0IHVzZSB0aGUgcG9pbnRlciBmb3IgdGhlIGZpcnN0IGl0ZW0gaWYgdGhlcmUgaXMgbm8gaXRlbS4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDUuNi4wNTYgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtRE9TOiBGMTEgYW5kIEYxMiBkb24ndCB3b3JrIHdoZW4gJ2Jpb3NrZXknIGlzIHNldC4KK1NvbHV0aW9uOiAgIFVzZSBlbmhhbmNlZCBrZXlib2FyZCBmdW5jdGlvbnMuIChWaW5jZSBOZWdyaSkKKwkgICAgRGV0ZWN0IHByZXNlbmNlIG9mIGVuaGFuY2VkIGtleWJvYXJkIGFuZCBzZXQgYmlvc2tleV9yZWFkIGFuZAorCSAgICBiaW9za2V5X3JlYWR5LgorRmlsZXM6CSAgICBzcmMvb3NfbXNkb3MuYworCitQYXRjaCA1LjYuMDU3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSB3cm9uZyBpbiBkaWFsb2dzIGFuZCB0ZWFyLW9mZgorCSAgICBtZW51cy4KK1NvbHV0aW9uOiAgIFVzZSBzeXN0ZW0gZm9udCBpbnN0ZWFkIG9mIGEgZml4ZWQgZm9udC4gKE1hdHN1bW90bywgTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA1LjYuMDU4CitQcm9ibGVtOiAgICBXaGVuIHRoZSAnYScgZmxhZyBpcyBub3QgaW4gJ2d1aW9wdGlvbnMnLCBub24tV2luZG93cyBzeXN0ZW1zCisJICAgIGNvcHkgVmlzdWFsbHkgc2VsZWN0ZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkL3NlbGVjdGlvbiBvbiBhIHlhbmsKKwkgICAgb3IgZGVsZXRlIGNvbW1hbmQgYW55d2F5LiAgT24gV2luZG93cyBpdCBpc24ndCBkb25lIGV2ZW4gd2hlbiB0aGUKKwkgICAgJ2EnIGZsYWcgaXMgaW5jbHVkZWQuCitTb2x1dGlvbjogICBSZXNwZWN0IHRoZSAnYScgZmxhZyBpbiAnZ3Vpb3B0aW9ucycgb24gYWxsIHN5c3RlbXMuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjYuMDU5IChleHRyYSkKK1Byb2JsZW06ICAgIFdoZW4gbW92aW5nIHRoZSBjdXJzb3Igb3ZlciBpdGFsaWMgdGV4dCBhbmQgdGhlIGNoYXJhY3RlcnMgc3BpbGwKKwkgICAgb3ZlciB0byB0aGUgY2VsbCBvbiB0aGUgcmlnaHQsIHRoYXQgc3BpbGwtb3ZlciBpcyBkZWxldGVkLgorCSAgICBOb3RpY2VkIGluIHRoZSBXaW4zMiBHVUksIGNhbiBoYXBwZW4gb24gb3RoZXIgc3lzdGVtcyB0b28uCitTb2x1dGlvbjogICBSZWRyYXcgaXRhbGljIHRleHQgc3RhcnRpbmcgZnJvbSBhIGJsYW5rLCBsaWtlIHRoaXMgaXMgYWxyZWFkeQorCSAgICBkb25lIGZvciBib2xkIHRleHQuIChWaW5jZSBOZWdyaSkKK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpLmgsIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS42LjA2MAorUHJvYmxlbTogICAgU29tZSBib2xkIGNoYXJhY3RlcnMgc3BpbGwgb3ZlciB0byB0aGUgY2VsbCBvbiB0aGUgbGVmdCwgdGhhdAorCSAgICBzcGlsbC1vdmVyIGNhbiByZW1haW4gc29tZXRpbWVzLgorU29sdXRpb246ICAgUmVkcmF3IGEgY2hhcmFjdGVycyB3aGVuIHRoZSBuZXh0IGNoYXJhY3RlciB3YXMgYm9sZCBhbmQgbmVlZHMKKwkgICAgcmVkcmF3aW5nLiAoUm9iZXJ0IFdlYmIpCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA1LjYuMDYxCitQcm9ibGVtOiAgICBXaGVuIHh0ZXJtIHNlbmRzIDgtYml0IGNvbnRyb2xzLCByZWNvZ25pemluZyB0aGUgdmVyc2lvbiByZXNwb25zZQorCSAgICBkb2Vzbid0IHdvcmsuCisJICAgIFdoZW4gdXNpbmcgQ1NJIGluc3RlYWQgb2YgPEVzYz5bIGZvciB0aGUgdGVybWNhcCBjb2xvciBjb2RlcywKKwkgICAgdXNpbmcgMTYgY29sb3JzIGRvZXNuJ3Qgd29yay4gKE5laWwgQmlyZCkKK1NvbHV0aW9uOiAgIEFsc28gYWNjZXB0IENTSSBpbiBwbGFjZSBvZiA8RXNjPlsgZm9yIHRoZSB2ZXJzaW9uIHN0cmluZy4KKwkgICAgQWxzbyBjaGVjayBmb3IgQ1NJIHdoZW4gaGFuZGxpbmcgY29sb3JzIDgtMTUgaW4gdGVybV9jb2xvcigpLgorCSAgICBVc2UgQ1NJIGZvciBidWlsdGluIHh0ZXJtIHRlcm1jYXAgZW50cmllcyB3aGVuICd0ZXJtJyBjb250YWlucworCSAgICAiOGJpdCIuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3Rlcm0udHh0LCBzcmMvZXhfY21kcy5jLCBzcmMvb3B0aW9uLmMsIHNyYy90ZXJtLmMsCisJICAgIHNyYy9vc191bml4LmMsIHNyYy9wcm90by9vcHRpb24ucHJvLCBzcmMvcHJvdG8vdGVybS5wcm8KKworUGF0Y2ggNS42LjA2MgorUHJvYmxlbTogICAgVGhlIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IHNldHRpbmcgJ3NtYXJ0aW5kZW50JyBkb2Vzbid0IGhhdmUgYW4KKwkgICAgZWZmZWN0IHdoZW4gJ2NpbmRlbnQnIGlzIHNldCwgYnV0IGl0IGRvZXMgbWFrZSBhIGRpZmZlcmVuY2UgZm9yCisJICAgIGxpbmVzIHN0YXJ0aW5nIHdpdGggIiMiLiAoTmVpbCBCaXJkKQorU29sdXRpb246ICAgUmVhbGx5IGlnbm9yZSAnc21hcnRpbmRlbnQnIHdoZW4gJ2NpbmRlbnQnIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMsIHNyYy9vcHMuYworCitQYXRjaCA1LjYuMDYzCitQcm9ibGVtOiAgICBVc2luZyAiSSIgaW4gVmlzdWFsLWJsb2NrIG1vZGUgZG9lc24ndCBhY2NlcHQgYSBjb3VudC4gKEpvaGFubmVzCisJICAgIFplbGxuZXIpCitTb2x1dGlvbjogICBQYXNzIHRoZSBjb3VudCBvbiB0byBkb19pbnNlcnQoKSBhbmQgZWRpdCgpLiAoQWxsYW4gS2VsbHkpCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jLCBzcmMvcHJvdG8vb3BzLnBybworCitQYXRjaCA1LjYuMDY0CitQcm9ibGVtOiAgICBNUy1ET1MgYW5kIFdpbjMyIGNvbnNvbGU6IE1vdXNlIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgYWZ0ZXIKKwkgICAgaW5jbHVkaW5nIHBhdGNoIDUuNi4yOC4gKFZpbmNlIE5lZ3JpKQorU29sdXRpb246ICAgRG9uJ3QgY2hlY2sgZm9yIG1vdXNlIHNjcm9sbCB3aGVlbCB3aGVuIHRoZSBtb3VzZSBjb2RlIGNvbnRhaW5zCisJICAgIHRoZSBudW1iZXIgb2YgY2xpY2tzLgorRmlsZXM6CSAgICBzcmMvdGVybS5jCisKK1BhdGNoIDUuNi4wNjUKK1Byb2JsZW06ICAgIEFmdGVyIG1vdmluZyB0aGUgY3Vyc29yIGFyb3VuZCBpbiBJbnNlcnQgbW9kZSwgdHlwaW5nIGEgc3BhY2UgY2FuCisJICAgIHN0aWxsIHRyaWdnZXIgYW4gYWJicmV2aWF0aW9uLiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgRG9uJ3QgY2hlY2sgZm9yIGFuIGFiYnJldmlhdGlvbiBhZnRlciBtb3ZpbmcgYXJvdW5kIGluIEluc2VydCBtb2RlLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDUuNi4wNjYKK1Byb2JsZW06ICAgIFN0aWxsIGEgZmV3IGJvbGQgY2hhcmFjdGVyIHNwaWxsLW92ZXIgcmVtYWlucyBhZnRlciBwYXRjaCA2MC4KK1NvbHV0aW9uOiAgIENsZWFyIGNoYXJhY3RlciBqdXN0IGluIGZyb250IG9mIGJsYW5raW5nIG91dCByZXN0IG9mIHRoZSBsaW5lLgorCSAgICAoUm9iZXJ0IFdlYmIpCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA1LjYuMDY3CitQcm9ibGVtOiAgICBXaGVuIGEgZmlsZSBuYW1lIGNvbnRhaW5zIGEgTkwsIHRoZSB2aW1pbmZvIGZpbGUgaXMgY29ycnVwdGVkLgorU29sdXRpb246ICAgVXNlIHZpbWluZm9fd3JpdGVzdHJpbmcoKSB0byBjb252ZXJ0IHRoZSBOTCB0byBDVFJMLVYgbi4KKwkgICAgQWxzbyBmaXggdGhlIEJ1ZmZlcnMgbWVudSBhbmQgbGlzdGluZyBhIG1lbnUgbmFtZSB3aXRoIGEgbmV3bGluZS4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbSwgc3JjL2J1ZmZlci5jLCBzcmMvbWFyay5jLCBzcmMvbWVudS5jCisKK1BhdGNoIDUuNi4wNjgKK1Byb2JsZW06ICAgIENvbXBpbGluZyB0aGUgUGVybCBpbnRlcmZhY2UgZG9lc24ndCB3b3JrIHdpdGggUGVybCA1LjYuMC4KKwkgICAgKEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIpCitTb2x1dGlvbjogICBBbHNvIGNoZWNrIHhzX2FwaXZlcnNpb24gZm9yIHRoZSB2ZXJzaW9uIG51bWJlciB3aGVuIHByZXBlbmRpbmcKKwkgICAgZGVmaW5lcyBmb3IgUExfKi4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDUuNi4wNjkKK1Byb2JsZW06ICAgICJnbyIgZG9lc24ndCBhbHdheXMgZW5kIHVwIGF0IHRoZSByaWdodCBjaGFyYWN0ZXIgd2hlbgorCSAgICAnZmlsZWZvcm1hdCcgaXMgImRvcyIuIChCcnVjZSBEZVZpc3NlcikKK1NvbHV0aW9uOiAgIENvcnJlY3QgY29tcHV0YXRpb25zIGluIG1sX2ZpbmRfbGluZV9vcl9vZmZzZXQoKS4KK0ZpbGVzOgkgICAgc3JjL21lbWxpbmUuCisKK1BhdGNoIDUuNi4wNzAgKGRlcGVuZHMgb24gNS42LjA2OCkKK1Byb2JsZW06ICAgIENvbXBpbGluZyB0aGUgUGVybCBpbnRlcmZhY2UgZG9lc24ndCB3b3JrIHdpdGggUGVybCA1LjYuMC4KKwkgICAgKEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIpCitTb2x1dGlvbjogICBTaW1wbGVyIGNoZWNrIGluc3RlYWQgb2YgdGhlIG9uZSBmcm9tIHBhdGNoIDY4LgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNS42LjA3MQorUHJvYmxlbTogICAgIkEiIGluIFZpc3VhbCBibG9jayBtb2RlIG9uIGEgVGFiIHBvc2l0aW9ucyB0aGUgY3Vyc29yIG9uZSBjaGFyIHRvCisJICAgIHRoZSByaWdodC4gKE1pY2hhZWwgSGF1bWFubikKK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIGNvbHVtbiBjb21wdXRhdGlvbiBpbiBvcF9pbnNlcnQoKS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNi4wNzIKK1Byb2JsZW06ICAgIFdoZW4gc3RhcnRpbmcgVmltIHdpdGggInZpbSArc3RhcnRpbnNlcnQiLCBpdCBlbnRlcnMgSW5zZXJ0IG1vZGUKKwkgICAgb25seSBhZnRlciB0eXBpbmcgdGhlIGZpcnN0IGNvbW1hbmQuIChBbmRyZXcgUGltbG90dCkKK1NvbHV0aW9uOiAgIEluc2VydCBhIGR1bW15IGNvbW1hbmQgaW4gdGhlIHN0dWZmIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA1LjYuMDczIChleHRyYSkgKGRlcGVuZHMgb24gNS42LjAzNCkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiBjb21waWxlZCB3aXRoIEJjYyA1LjUgbWVudXMgZG9uJ3Qgd29yay4KKwkgICAgSW4gZG9zaW5zdC5jIHRvdXBwZXIoKSBhbmQgdG9sb3dlcigpIGdpdmUgYW4gImludGVybmFsIGNvbXBpbGVyCisJICAgIGVycm9yIiBmb3IgQmNjIDUuNS4KK1NvbHV0aW9uOiAgIERlZmluZSBXSU5WRVIgdG8gNCB0byBhdm9pZCBjb21waWxpbmcgZm9yIFdpbmRvd3MgMjAwMC4gKERhbgorCSAgICBTaGFycCkgIEFsc28gY2xlYW5lZCB1cCBjb21waWxhdGlvbiBhcmd1bWVudHMuCisJICAgIFVzZSBvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHRvdXBwZXIoKSBpbiBkb3NpbnN0LmMuICBVc2UKKwkgICAgbXl0b3VwcGVyKCkgaW5zdGVhZCBvZiB0b2xvd2VyKCkuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZS5ib3IsIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNS42LjA3NCAoZXh0cmEpCitQcm9ibGVtOiAgICBFbnRlcmluZyBDU0kgZGlyZWN0bHkgZG9lc24ndCBhbHdheXMgd29yaywgYmVjYXVzZSBpdCdzIHJlY29nbml6ZWQKKwkgICAgYXMgdGhlIHN0YXJ0IG9mIGEgc3BlY2lhbCBrZXkuICBNb3N0bHkgYSBwcm9ibGVtIHdpdGggbXVsdGktYnl0ZQorCSAgICBpbiB0aGUgR1VJLgorU29sdXRpb246ICAgVXNlIEtfQ1NJIGZvciBhIHR5cGVkIENTSSBjaGFyYWN0ZXIuICBVc2UgPENTST4gZm9yIGEgbm9ybWFsIENTSSwKKwkgICAgPHhDU0k+IGZvciBhIENTSSB0eXBlZCBpbiB0aGUgR1VJLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9pbnRyby50eHQsIHNyYy9nZXRjaGFyLmMsIHNyYy9ndWlfYW1pZ2EuYywKKwkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9ndWlfbWFjLmMsIHNyYy9ndWlfcmlzY29zLmMsIHNyYy9ndWlfdzMyLmMsCisJICAgIHNyYy9rZXltYXAuaCwgc3JjL21pc2MyLmMKKworUGF0Y2ggNS42LjA3NQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiSSIgb3IgIkEiIGluIFZpc3VhbCBibG9jayBtb2RlIHdoaWxlICdzdHMnIGlzIHNldCBtYXkKKwkgICAgY2hhbmdlIHNwYWNlcyB0byBhIFRhYiB0aGUgaW5zZXJ0ZWQgdGV4dCBpcyBub3QgY29ycmVjdC4gKE1pa2UKKwkgICAgU3RlZWQpICBBbmQgc29tZSBvdGhlciBwcm9ibGVtcyB3aGVuIHVzaW5nICJBIiB0byBhcHBlbmQgYWZ0ZXIgdGhlCisJICAgIGVuZCBvZiB0aGUgbGluZS4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBjaGFuZ2UgaW4gc3BhY2VzL3RhYnMgYWZ0ZXIgaW5zZXJ0aW5nIHRoZSB0ZXh0LiAgQXBwZW5kCisJICAgIHNwYWNlcyB0byBmaWxsIHRoZSBnYXAgYmV0d2VlbiB0aGUgZW5kLW9mLWxpbmUgYW5kIHRoZSByaWdodCBlZGdlCisJICAgIG9mIHRoZSBibG9jay4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNi4wNzYKK1Byb2JsZW06ICAgIEdUSyBHVUk6IE1hcHBpbmcgPE0tU3BhY2U+IGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSB0aGUgIkFsdCIgbW9kaWZpZXIgdHdpY2UgaW4ga2V5X3ByZXNzX2V2ZW50KCkuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDUuNi4wNzcKK1Byb2JsZW06ICAgIEdVSTogV2hlbiBpbnRlcnJ1cHRpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSB3aXRoIENUUkwtQywgZ3ZpbSBtaWdodAorCSAgICBjcmFzaC4gKEJlbmphbWluIEtvcnZlbWFrZXIpCitTb2x1dGlvbjogICBBdm9pZCB1c2luZyBhIE5VTEwgcG9pbnRlciBpbiB1aV9pbmNoYXJfdW5kbygpLgorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA1LjYuMDc4CitQcm9ibGVtOiAgICBMb2NhbGUgZG9lc24ndCBhbHdheXMgd29yayBvbiBGcmVlQlNELiAoRGF2aWQgTydCcmllbikKK1NvbHV0aW9uOiAgIExpbmsgd2l0aCB0aGUgInhwZzQiIGxpYnJhcnkgd2hlbiBhdmFpbGFibGUuCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWd1cmUKKworUGF0Y2ggNS42LjA3OQorUHJvYmxlbTogICAgVmltIGNvdWxkIGNyYXNoIHdoZW4gc2V2ZXJhbCBUY2wgaW50ZXJwcmV0ZXJzIGFyZSBjcmVhdGVkIGFuZAorCSAgICBkZXN0cm95ZWQuCitTb2x1dGlvbjogICBoYW5kbGUgdGhlICJleGl0IiBjb21tYW5kIGFuZCBuZXN0ZWQgIjp0Y2wiIGNvbW1hbmRzIGJldHRlci4gKEluZ28KKwkgICAgV2lsa2VuKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9pZl90Y2wudHh0LCBzcmMvaWZfdGNsLmMKKworUGF0Y2ggNS42LjA4MAorUHJvYmxlbTogICAgV2hlbiBqdW1waW5nIHRvIGEgdGFnLCBnZW5lcmF0aW5nIHRoZSB0YWdzIGZpbGUgYW5kIGp1bXBpbmcgdG8gdGhlCisJICAgIHNhbWUgdGFnIGFnYWluIHVzZXMgdGhlIG9sZCBzZWFyY2ggcGF0dGVybi4gKFN1bmctSHl1biBOYW0pCitTb2x1dGlvbjogICBGbHVzaCBjYWNoZWQgdGFnIG1hdGNoZXMgd2hlbiBleGVjdXRpbmcgYW4gZXh0ZXJuYWwgY29tbWFuZC4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMsIHNyYy9wcm90by90YWcucHJvLCBzcmMvdGFnLmMKKworUGF0Y2ggNS42LjA4MQorUHJvYmxlbTogICAgIjpzeW4gaW5jbHVkZSIgdXNlcyBhIGxldmVsIGZvciB0aGUgaW5jbHVkZWQgZmlsZSwgdGhpcyBjb25mdXNlcworCSAgICBjb250YWluZWQgaXRlbXMgaW5jbHVkZWQgYXQgdGhlIHNhbWUgbGV2ZWwuCitTb2x1dGlvbjogICBVc2UgYSB1bmlxdWUgdGFnIGZvciBlYWNoIGluY2x1ZGVkIGZpbGUuICBDaGFuZ2VkIHNwX3N5bl9pbmNfbHZsCisJICAgIHRvIHNwX3N5bl9pbmNfdGFnLiAoU2NvdHQgQmlnaGFtKQorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMsIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNS42LjA4MgorUHJvYmxlbTogICAgV2hlbiB1c2luZyBjc2NvcGUsIFZpbSBjYW4gY3Jhc2guCitTb2x1dGlvbjogICBJbml0aWFsaXplIHRhZ19mbmFtZSBpbiBmaW5kX3RhZ3MoKS4gKEFudG9uIEJsYW5jaGFyZCkKK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDUuNi4wODMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFRoZSB2aXN1YWwgYmVlcCBjYW4ndCBiZSBzZWVuLiAoRXJpYyBSb2VzaW5nZXIpCitTb2x1dGlvbjogICBGbHVzaCB0aGUgb3V0cHV0IGJlZm9yZSB3YWl0aW5nIHdpdGggR2RpRmx1c2goKS4gKE1hdXJpY2UgUy4gQmFybnVtKQorCSAgICBBbHNvOiBBbGxvdyBzcGVjaWZ5aW5nIHRoZSBkZWxheSBpbiB0X3ZiIGZvciB0aGUgR1VJLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9ndWlfYW1pZ2EuYywgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9ndWlfbWFjLmMsCisJICAgIHNyYy9ndWlfcmlzY29zLmMsIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfeDExLmMsIHNyYy9ndWlfYmVvcy5jYywKKwkgICAgc3JjL3Byb3RvL2d1aV9hbWlnYS5wcm8sIHNyYy9wcm90by9ndWlfZ3RrX3gxMS5wcm8sCisJICAgIHNyYy9wcm90by9ndWlfbWFjLnBybywgc3JjL3Byb3RvL2d1aV9yaXNjb3MucHJvLAorCSAgICBzcmMvcHJvdG8vZ3VpX3czMi5wcm8sIHNyYy9wcm90by9ndWlfeDExLnBybywKKwkgICAgc3JjL3Byb3RvL2d1aV9iZW9zLnBybworCitQYXRjaCA1LjYuMDg0IChkZXBlbmRzIG9uIDUuNi4wNzQpCitQcm9ibGVtOiAgICBHVUk6IEVudGVyaW5nIENTSSBkb2Vzbid0IGFsd2F5cyB3b3JrIGZvciBBdGhlbmEgYW5kIE1vdGlmLgorU29sdXRpb246ICAgSGFuZGxlIHR5cGVkIENTSSBhcyA8eENTST4gKGZvcmdvdCB0aGlzIGJpdCBpbiA1LjYuMDc0KS4KK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYworCitQYXRjaCA1LjYuMDg1CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBVc2luZyAiciIgdG8gcmVwbGFjZSBhIGRvdWJsZS1ieXRlIGNoYXIgd2l0aCBhCisJICAgIHNpbmdsZS1ieXRlIGNoYXIgbW92ZWQgdGhlIGN1cnNvciBvbmUgY2hhcmFjdGVyLiAoTWF0c3Vtb3RvKQorCSAgICBBbHNvLCB1c2luZyBhIGNvdW50IHdoZW4gcmVwbGFjaW5nIGEgc2luZ2xlLWJ5dGUgY2hhciB3aXRoIGEKKwkgICAgZG91YmxlLWJ5dGUgY2hhciBkaWRuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSBkZWxfY2hhcigpIHRvIGRlbGV0ZSB0aGUgc2Vjb25kIGJ5dGUuCisJICAgIEdldCAicHRyIiBhZ2FpbiBhZnRlciBjYWxsaW5nIGluc19jaGFyKCkuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA1LjYuMDg2IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIHVzaW5nIGxpYmNhbGwoKSBhbmQgdGhlIHJldHVybmVkIHZhbHVlIGlzIG5vdCBhIHZhbGlkCisJICAgIHBvaW50ZXIsIFZpbSBjcmFzaGVzLgorU29sdXRpb246ICAgVXNlIElzQmFkU3RyaW5nUHRyKCkgdG8gY2hlY2sgaWYgdGhlIHBvaW50ZXIgaXMgdmFsaWQuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDUuNi4wODcKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IENvbW1hbmRzIGFuZCBtZXNzYWdlcyB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUKKwkgICAgZGlzcGxheWVkIHdyb25nLgorU29sdXRpb246ICAgRGV0ZWN0IGRvdWJsZS1ieXRlIGNoYXJhY3RlcnMuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jLCBzcmMvbWVzc2FnZS5jLCBzcmMvbWlzYzIuYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDUuNi4wODgKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGUgd2l0aCBNb3RpZiBvciBBdGhlbmE6IFRoZSBtZXNzYWdlICJYSU0gcmVxdWlyZXMKKwkgICAgZm9udHNldCIgaXMgYW5ub3lpbmcgd2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggWElNIHN1cHBvcnQgYnV0IGl0CisJICAgIGlzIG5vdCBiZWluZyB1c2VkLgorU29sdXRpb246ICAgUmVtb3ZlIHRoYXQgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL211bHRieXRlLmMKKworUGF0Y2ggNS42LjA4OQorUHJvYmxlbTogICAgT24gbm9uLVVuaXggc3lzdGVtcyBpdCdzIHBvc3NpYmxlIHRvIG92ZXJ3cml0ZSBhIHJlYWQtb25seSBmaWxlCisJICAgIHdpdGhvdXQgdXNpbmcgIiEiLgorU29sdXRpb246ICAgQ2hlY2sgaWYgdGhlIGZpbGUgcGVybWlzc2lvbnMgYWxsb3cgb3ZlcndyaXRpbmcgYmVmb3JlIG1vdmluZyB0aGUKKwkgICAgZmlsZSB0byBiZWNvbWUgdGhlIGJhY2t1cCBmaWxlLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS42LjA5MAorUHJvYmxlbTogICAgV2hlbiBlZGl0aW5nIGEgZmlsZSBpbiAiL2hvbWUvZGlyL2hvbWUvZGlyIiB0aGlzIHdhcyByZXBsYWNlZCB3aXRoCisJICAgICJ+fiIuICAoQW5kcmVhcyBKZWxsaW5naGF1cykKK1NvbHV0aW9uOiAgIFJlcGxhY2UgdGhlIGhvbWUgZGlyZWN0b3J5IG9ubHkgb25jZSBpbiBob21lX3JlcGxhY2UoKS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNS42LjA5MQorUHJvYmxlbTogICAgV2hlbiBlZGl0aW5nIG1hbnkgIm5vIGZpbGUiIGZpbGVzLCBjYW4ndCBjcmVhdGUgc3dhcCBmaWxlLCBiZWNhdXNlCisJICAgIC5zd1thLXBdIGhhdmUgYWxsIGJlZW4gdXNlZC4gIChOZWlsIEJpcmQpCitTb2x1dGlvbjogICBBbHNvIHVzZSAiLnN2W2Etel0iLCAiLnN1W2Etel0iLCBldGMuCitGaWxlczoJICAgIHNyYy9tZW1saW5lLmMKKworUGF0Y2ggNS42LjA5MgorUHJvYmxlbTogICAgRnJlZUJTRDogV2hlbiBzZXR0aW5nICRURVJNIHRvIGEgbm9uLXZhbGlkIHRlcm1pbmFsIG5hbWUsIFZpbQorCSAgICBoYW5ncyBpbiB0cHV0cygpLgorU29sdXRpb246ICAgQWZ0ZXIgdGdldGVudCgpIHJldHVybnMgYW4gZXJyb3IgY29kZSwgY2FsbCBpdCBhZ2FpbiB3aXRoIHRoZQorCSAgICB0ZXJtaW5hbCBuYW1lICJkdW1iIi4gIFRoaXMgYXBwYXJlbnRseSBjcmVhdGVzIGFuIGVudmlyb25tZW50IGluCisJICAgIHdoaWNoIHRwdXRzKCkgZG9lc24ndCBmYWlsLgorRmlsZXM6CSAgICBzcmMvdGVybS5jCisKK1BhdGNoIDUuNi4wOTMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiAibHMgfCBndmltIC0iIHdpbGwgc2hvdyBhIG1lc3NhZ2UgYm94IGFib3V0IHJlYWRpbmcKKwkgICAgc3RkaW4gd2hlbiBWaW0gZXhpdHMuIChEb25vaHVlKQorU29sdXRpb246ICAgRG9uJ3Qgd3JpdGUgYSBtZXNzYWdlIGFib3V0IHRoZSBmaWxlIHJlYWQgZnJvbSBzdGRpbiB1bnRpbCB0aGUgR1VJCisJICAgIGhhcyBzdGFydGVkLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS42LjA5NAorUHJvYmxlbTogICAgUHJvYmxlbSB3aXRoIG11bHRpLWJ5dGUgc3RyaW5nIGZvciAiOmVjaG8gdmFyIi4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBsZW5ndGggaW4gbXNnX291dHRyYW5zX2xlbl9hdHRyKCkuIChTdW5nLUh5dW4gTmFtKQorCSAgICBBbHNvIG1ha2UgZG9fZWNobygpIGF3YXJlIG9mIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL21lc3NhZ2UuYworCitQYXRjaCA1LjYuMDk1CitQcm9ibGVtOiAgICBXaXRoIGFuIEVtYWNzIFRBR1MgZmlsZSB0aGF0IGluY2x1ZGUgYW5vdGhlciBhIHJlbGF0aXZlIHBhdGgKKwkgICAgZG9lc24ndCBhbHdheXMgd29yay4KK1NvbHV0aW9uOiAgIFVzZSBleHBhbmRfdGFnX2ZuYW1lKCkgb24gdGhlIG5hbWUgb2YgdGhlIGluY2x1ZGVkIGZpbGUuCisJICAgIChVdHotVXdlIEhhdXMpCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA1LjYuMDk2CitQcm9ibGVtOiAgICBVbml4OiBXaGVuIGVkaXRpbmcgbWFueSBmaWxlcywgc3RhcnR1cCBjYW4gYmUgc2xvdy4gKFBhdWwKKwkgICAgQWNrZXJzdmlsbGVyKQorU29sdXRpb246ICAgSGFsdmUgdGhlIG51bWJlciBvZiBzdGF0KCkgY2FsbHMgdXNlZCB0byBhZGQgYSBmaWxlIHRvIHRoZSBidWZmZXIKKwkgICAgbGlzdC4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDUuN2EuMDAxCitQcm9ibGVtOiAgICBHVEsgZG9lc24ndCByZXNwb25kIG9uIGRyYWcmZHJvcCBmcm9tIFJPWC1GaWxlci4KK1NvbHV0aW9uOiAgIEFkZCAidGV4dC91cmktbGlzdCIgdGFyZ2V0LiAoVGhvbWFzIExlb25hcmQpCisJICAgIEFsc286IGZpeCBwcm9ibGVtIHdpdGggY2hlY2tpbmcgZm9yIHRyYXNoIGFyZ3VtZW50cy4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNS43YS4wMDIKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6ICdzaG93bWF0Y2gnIGlzIHBlcmZvcm1lZCB3aGVuIHNlY29uZCBieXRlIG9mIGFuCisJICAgIGluc2VydGVkIGRvdWJsZS1ieXRlIGNoYXIgaXMgYSBwYXJlbiBvciBicmFjZS4KK1NvbHV0aW9uOiAgIENoZWNrIElzVHJhaWxCeXRlKCkgYmVmb3JlIGNhbGxpbmcgc2hvd21hdGNoKCkuIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDUuN2EuMDAzCitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBBZnRlciB1c2luZyBDVFJMLU8gaW4gSW5zZXJ0IG1vZGUgd2l0aCB0aGUgY3Vyc29yIGF0CisJICAgIHRoZSBlbmQgb2YgdGhlIGxpbmUgb24gYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB0aGUgY3Vyc29yIG1vdmVzIHRvCisJICAgIHRoZSBsZWZ0LgorU29sdXRpb246ICAgQ2hlY2sgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGF0IGVuZC1vZi1saW5lLiAoVGFybyBNdXJhb2thKQorCSAgICBBbHNvOiBmaXggY2xzKCkgdG8gZGV0ZWN0IGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyLiAoQ2hvbmctRGFlIFBhcmspCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9zZWFyY2guYworCitQYXRjaCA1LjdhLjAwNAorUHJvYmxlbTogICAgV2hlbiByZXBvcnRpbmcgdGhlIHNlYXJjaCBwYXR0ZXJuIG9mZnNldCwgdGhlIHN0cmluZyBjb3VsZCBiZQorCSAgICB1bnRlcm1pbmF0ZWQsIHdoaWNoIG1heSBjYXVzZSBhIGNyYXNoLgorU29sdXRpb246ICAgVGVybWluYXRlIHRoZSBzdHJpbmcgZm9yIHRoZSBzZWFyY2ggb2Zmc2V0LiAoU3RlcGhlbiBQLiBXYWxsKQorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNS43YS4wMDUKK1Byb2JsZW06ICAgIFdoZW4gIjpzLy9+LyIgZG9lc24ndCBmaW5kIGEgbWF0Y2ggaXQgcmVwb3J0cyAiW05VTExdIiBmb3IgdGhlCisJICAgIHBhdHRlcm4uCitTb2x1dGlvbjogICBVc2UgZ2V0X3NlYXJjaF9wYXQoKSB0byBvYnRhaW4gdGhlIGFjdHVhbGx5IHVzZWQgcGF0dGVybi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL3Byb3RvL3NlYXJjaC5wcm8sIHNyYy9zZWFyY2guYworCitQYXRjaCA1LjdhLjAwNiAoZXh0cmEpCitQcm9ibGVtOiAgICBWTVM6IFZhcmlvdXMgcHJvYmxlbXMsIGFsc28gd2l0aCB0aGUgVkFYQyBjb21waWxlci4KK1NvbHV0aW9uOiAgIEluIG1hbnkgcGxhY2VzIHVzZSB0aGUgVW5peCBjb2RlIGZvciBWTVMgdG9vLgorCSAgICBBZGRlZCB0aW1lLCBkYXRlIGFuZCBjb21waWxlciB2ZXJzaW9uIHRvIHZlcnNpb24gbWVzc2FnZS4KKwkgICAgKFpvbHRhbiBBcnBhZGZmeSkKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9ndWlfdm1zX2NvbmYuaCwKKwkgICAgc3JjL21haW4uYywgc3JjL21lc3NhZ2UuYywgc3JjL21pc2MxLmMsIHNyYy9vc192bXMuYywKKwkgICAgc3JjL29zX3Ztcy5oLCBzcmMvb3Nfdm1zLm1tcywgc3JjL29zX3Ztc19jb25mLmgsCisJICAgIHNyYy9wcm90by9vc192bXMucHJvLCBzcmMvcHJvdG8vdmVyc2lvbi5wcm8sIHNyYy90ZXJtLmMsCisJICAgIHNyYy92ZXJzaW9uLmMsIHNyYy94eGQvb3Nfdm1zLm1tcywgc3JjL3h4ZC94eGQuYworCitQYXRjaCA1LjdhLjAwNworUHJvYmxlbTogICAgTW90aWYgYW5kIEF0aGVuYSBHVUk6IENUUkwtQCBpcyBpbnRlcnByZXRlZCBhcyBDVFJMLUMuCitTb2x1dGlvbjogICBPbmx5IHVzZSAiaW50cl9jaGFyIiB3aGVuIGl0IGhhcyBiZWVuIHNldC4KK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYworCitQYXRjaCA1LjdhLjAwOAorUHJvYmxlbTogICAgR1RLIEdVSTogV2hlbiB1c2luZyBDVFJMLUwgdGhlIHNjcmVlbiBpcyByZWRyYXduIHR3aWNlLCBjYXVzaW5nCisJICAgIHRyb3VibGUgZm9yIGJvbGQgY2hhcmFjdGVycy4gIEFsc28gaGFwcGVucyB3aGVuIG1vdmluZyB3aXRoIHRoZQorCSAgICBzY3JvbGxiYXIuICBCZXN0IHNlZW4gd2hlbiAnd3JpdGVkZWxheScgaXMgbm9uLXplcm8uCisJICAgIFdoZW4gc3RhcnRpbmcgdGhlIEdVSSB3aXRoICI6Z3VpIiB0aGUgc2NyZWVuIGlzIHJlZHJhd24gb25jZSB3aXRoCisJICAgIHRoZSB3cm9uZyBjb2xvcnMuCitTb2x1dGlvbjogICBPbmx5IHNldCB0aGUgZ2VvbWV0cnkgaGludHMgd2hlbiB0aGUgd2luZG93IHNpemUgcmVhbGx5IGNoYW5nZWQuCisJICAgIFRoaXMgYXZvaWRzIHNldHRpbmcgaXQgZWFjaCB0aW1lIHRoZSBzY3JvbGxiYXIgaXMgZm9yY2VmdWxseQorCSAgICByZWRyYXduLgorCSAgICBEb24ndCByZWRyYXcgaW4gZXhwb3NlX2V2ZW50KCkgd2hlbiBndWkuc3RhcnRpbmcgaXMgc3RpbGwgc2V0LgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVkVSU0lPTiA1LjgJCQkJCQkqdmVyc2lvbi01LjgqCisKK1ZlcnNpb24gNS44IGlzIGEgYnVnLWZpeCB2ZXJzaW9uIG9mIDUuNy4KKworCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTUuOCoKKy0tLS0tLS0KKworQ3RhZ3MgaXMgbm8gbG9uZ2VyIGluY2x1ZGVkIHdpdGggVmltLiAgSXQgaGFzIGdyb3duIGludG8gYSBwcm9qZWN0IG9mIGl0cyBvd24uCitZb3UgY2FuIGZpbmQgaXQgaGVyZTogIGh0dHA6Ly9jdGFncy5zZi5uZXQuICBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgYXMgYSBWaW0KK2NvbXBhbmlvbiB3aGVuIHlvdSBhcmUgd3JpdGluZyBwcm9ncmFtcy4KKworCitBZGRlZAkJCQkJCQkqYWRkZWQtNS44KgorLS0tLS0KKworTmV3IHN5bnRheCBmaWxlczoKK2FjZWRiCQlBY2VEQiAoU3Rld2FydCBNb3JyaXMpCithZmxleAkJQWZsZXggKE1hdGhpZXUgQ2xhYmF1dCkKK2FudGxyCQlBbnRsciAoTWF0aGlldSBDbGFiYXV0KQorYXNtNjhrCQk2ODAwMCBBc3NlbWJseSAoU3RldmUgV2FsbCkKK2F1dG9tYWtlCUF1dG9tYWtlIChKb2huIFdpbGxpYW1zKQorYXlhY2MJCUF5YWNjIChNYXRoaWV1IENsYWJhdXQpCitiCQlCIChNYXRoaWV1IENsYWJhdXQpCitiaW5kem9uZQlCSU5EIHpvbmUgKGdsb3J5IGh1bXApCitibGFuawkJQmxhbmsgKFJhZmFsIFN1bGVqbWFuKQorY2ZnCQlDb25maWd1cmUgZmlsZXMgKElnb3IgUHJpc2NoZXBvZmYpCitjaGFuZ2Vsb2cJQ2hhbmdlTG9nIChHZWRpbWluYXMgUGF1bGF1c2thcykKK2NsCQlDbGV2ZXIgKFBoaWwgVXJlbikKK2Nyb250YWIJCUNyb250YWIgKEpvaG4gSG9lbHplbCkKK2NzYwkJRXNzYmFzZSBzY3JpcHQgKFJhdWwgU2VndXJhIEFjZXZlZG8pCitjeW5saWIJCUN5bmxpYihDKyspIChQaGlsIERlcnJpY2spCitjeW5wcAkJQ3luKysgKFBoaWwgRGVycmljaykKK2RlYmNoYW5nZWxvZwlEZWJpYW4gQ2hhbmdlbG9nIChXaWNoZXJ0IEFra2VybWFuKQorZGViY29udHJvbAlEZWJpYW4gQ29udHJvbCAoV2ljaGVydCBBa2tlcm1hbikKK2RucwkJRE5TIHpvbmUgZmlsZSAoSmVoc29tKQorZHRtbAkJWm9wZSdzIERUTUwgKEplYW4gSm9yZGFhbikKK2R5bGFuCQlEeWxhbiwgRHlsYW4taW50ciBhbmQgRHlsYW4tbGlkIChCcmVudCBGdWxnaGFtKQorZWNkCQlFbWJlZGl4IENvbXBvbmVudCBEZXNjcmlwdGlvbiAoSm9obiBCZXBwdSkKK2ZnbAkJSW5mb3JtaXggNEdMIChSYWZhbCBTdWxlam1hbikKK2ZveHBybwkJRm94UHJvIChQb3dpbmcgVHNlKQorZ3NwCQlHTlUgU2VydmVyIFBhZ2VzIChOYXRoYW5pZWwgSGFyd2FyZCkKK2d0a3JjCQlHVEsgcmMgKERhdmlkIE5lY2FzKQoraGVyY3VsZXMJSGVyY3VsZXMgKEF2YW50ISBDb3Jwb3JhdGlvbikgKERhbmEgRWR3YXJkcykKK2h0bWxvcwkJSFRNTC9PUyBieSBBZXN0aXZhIChKYXNvbiBSdXN0KQoraW5pdHRhYgkJU3lzViBwcm9jZXNzIGNvbnRyb2wgKERhdmlkIE5lY2FzKQoraXNzCQlJbm5vIFNldHVwIChEb21pbmlxdWUgU3RlcGhhbikKK2phbQkJSmFtIChSYWxmIExlbWtlKQoramVzcwkJSmVzcyAoUGF1bCBCYWxlbWUpCitscHJvbG9nCQlMYW1iZGFQcm9sb2cgKE1hcmt1cyBNb3R0bCkKK2lhNjQJCUludGVsIEl0YW5pdW0gKHBhcnRoIG1hbHdhbmthcikKK2tpeAkJS2l4dGFydCAoTmlnZWwgR2liYnMpCittZ3AJCU1hR2ljIFBvaW50IChHZXJmcmllZCBGdWNocykKK21hc29uCQlNYXNvbiAoSFRNTCB3aXRoIFBlcmwpIChBbmRyZXcgU21pdGgpCittbWEJCU1hdGhlbWF0aWNhIChXb2xmZ2FuZyBXYWx0ZW5iZXJnZXIpCitucWMJCU5vdCBRdWl0ZSBDIChTdGVmYW4gU2NoZXJlcikKK29tbmltYXJrCU9tbmltYXJrIChQYXVsIFRlcnJheSkKK29wZW5yb2FkCU9wZW5ST0FEIChMdWlzIE1vcmVubyBTZXJyYW5vKQorbmFtZWQJCUJJTkQgY29uZmlndXJhdGlvbiAoZ2xvcnkgaHVtcCkKK3BhcHAJCVBBcHAgKE1hcmMgTGVobWFubikKK3BmbWFpbgkJUG9zdGZpeCBtYWluIGNvbmZpZyAoUGV0ZXIgS2VsZW1lbikKK3BpYwkJUElDIGFzc2VtYmx5IChBbGVrc2FuZGFyIFZlc2VsaW5vdmljKQorcHB3aXoJCVBQV2l6YXJkIChTdGVmYW4gU2Nod2FyemVyKQorcHJvZ3Jlc3MJUHJvZ3Jlc3MgKFBoaWwgVXJlbikKK3BzZgkJUHJvZHVjdCBTcGVjaWZpY2F0aW9uIEZpbGUgKFJleCBCYXJ6ZWUpCityCQlSIChUb20gUGF5bmUpCityZWdpc3RyeQlNUy1XaW5kb3dzIHJlZ2lzdHJ5IChEb21pbmlxdWUgU3RlcGhhbikKK3JvYm90cwkJUm9ib3RzLnR4dCAoRG9taW5pcXVlIFN0ZXBoYW4pCitydGYJCVJpY2ggVGV4dCBGb3JtYXQgKERvbWluaXF1ZSBTdGVwaGFuKQorc2V0bAkJU0VUTCAoQWxleCBQb3lsaXNoZXIpCitzZ21sZGVjbAlTR01MIERlY2xhcmF0aW9ucyAoRGFuaWVsIEEuIE1vbGluYSBXLikKK3NpbmRhCQlTaW5kYSBpbnB1dCAoQWRyaWFuIE5hZ2xlKQorc2luZGFjbXAJU2luZGEgY29tcGFyZSAoQWRyaWFuIE5hZ2xlKQorc2luZGFvdXQJU2luZGEgb3V0cHV0IChBZHJpYW4gTmFnbGUpCitzbWl0aAkJU01JVEggKFJhZmFsIFN1bGVqbWFuKQorc25vYm9sNAkJU25vYm9sIDQgKFJhZmFsIFN1bGVqbWFuKQorc3RyYWNlCQlTdHJhY2UgKERhdmlkIE5lY2FzKQordGFrCQlUQUsgaW5wdXQgKEFkcmlhbiBOYWdsZSkKK3Rha2NtcAkJVEFLIGNvbXBhcmUgKEFkcmlhbiBOYWdsZSkKK3Rha291dAkJVEFLIG91dHB1dCAoQWRyaWFuIE5hZ2xlKQordGFzbQkJVHVyYm8gYXNzZW1ibHkgKEZvb0xtYW4pCit0ZXhtZgkJVGVYIGNvbmZpZ3VyYXRpb24gKERhdmlkIE5lY2FzKQordHJhc3lzCQlUcmFzeXMgaW5wdXQgKEFkcmlhbiBOYWdsZSkKK3Rzc2dtCQlUU1MgR2VvbWV0cnkgKEFkcmlhbiBOYWdsZSkKK3Rzc29wCQlUU1MgT3B0aWNzIChBZHJpYW4gTmFnbGUpCit0c3NjbAkJVFNTIENvbW1hbmQgbGluZSAoQWRyaWFuIE5hZ2xlKQordmlyYXRhCQlWaXJhdGEgQ29uZmlndXJhdGlvbiBTY3JpcHQgKE1hbnVlbCBNLkguIFN0b2wpCit2c2VqY2wJCVZTRSBKQ0wgKERhdmlkIE9uZHJlamtvKQord2RpZmYJCVdvcmR3aXNlIGRpZmYgKEdlcmZyaWVkIEZ1Y2hzKQord3NoCQlXaW5kb3dzIFNjcmlwdGluZyBIb3N0IChQYXVsIE1vb3JlKQoreGtiCQlYIEtleWJvYXJkIEV4dGVuc2lvbiAoRGF2aWQgTmVjYXMpCisKK1JlbmFtZWQgcGhwMyB0byBwaHAsIGl0IG5vdyBhbHNvIHN1cHBvcnRzIHBocDQgKEx1dHogRXltZXJzKQorCitQYXRjaCA1LjcuMDE1CitQcm9ibGVtOiAgICBTeW50YXggZmlsZXMgZm9yIFZpbSA2LjAgY2FuJ3QgYmUgdXNlZCB3aXRoIDUueC4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgImRlZmF1bHQiIGFyZ3VtZW50IHRvIHRoZSAiOmhpZ2hsaWdodCIgY29tbWFuZDogSWdub3JlIHRoZQorCSAgICBjb21tYW5kIGlmIGhpZ2hsaWdodGluZyB3YXMgYWxyZWFkeSBzcGVjaWZpZWQuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitHZW5lcmF0ZSB0aGUgU3ludGF4IG1lbnUgd2l0aCBtYWtlbWVudS52aW0sIHNvIHRoYXQgaXQgZG9lc24ndCBoYXZlIHRvIGJlIGRvbmUKK3doZW4gVmltIGlzIHN0YXJ0aW5nIHVwLiAgUmVkdWNlcyB0aGUgc3RhcnR1cCB0aW1lIG9mIHRoZSBHVUkuCisKKworRml4ZWQJCQkJCQkJKmZpeGVkLTUuOCoKKy0tLS0tCisKK0NvbnZlcnNpb24gb2YgZG9jcyB0byBIVE1MIGRpZG4ndCBjb252ZXJ0ICJ8dGFnfHMiIHRvIGEgaHlwZXJsaW5rLgorCitGaXhlZCBjb21waWxpbmcgdW5kZXIgTmVYVC4gKEplcm9lbiBDLk0uIEdvdWRzd2FhcmQpCisKK29wdHdpbi52aW0gZ2F2ZSBhbiBlcnJvciB3aGVuIHVzZWQgaW4gVmkgY29tcGF0aWJsZSBtb2RlICgnY3BvJyBjb250YWlucyAnQycpLgorCitUY2wgaW50ZXJwcmV0ZXI6ICJidWZmZXIiIGNvbW1hbmQgZGlkbid0IGNoZWNrIGZvciBwcmVjZW5zZSBvZiBhbiBhcmd1bWVudC4KKyhEYXZlIEJvZGVuc3RhYikKKworZG9zaW5zdC5jOiBBZGRlZCBjaGVja3MgZm9yIHRvbyBsb25nIGZpbGUgbmFtZS4KKworQW1pZ2E6IGEgZmlsZSBuYW1lIHN0YXJ0aW5nIHdpdGggYSBjb2xvbiB3YXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBidXQgaXQgaXNuJ3QuCitBbWlnYTogIjpwd2QiIGFkZGVkIGEgc2xhc2ggd2hlbiBpbiB0aGUgcm9vdCBvZiBhIGRyaXZlLgorCitNYWNpbnRvc2g6IFdhcm5pbmdzIGZvciB1bnVzZWQgdmFyaWFibGVzLiAoQmVybmhhcmQgUHJ1ZW1tZXIpCisKK1VuaXg6IFdoZW4gY2F0Y2hpbmcgYSBkZWFkbHkgc2lnbmFsLCBoYW5kbGUgaXQgaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MKK3VubGlrZWx5IHRoYXQgVmltIHdpbGwgaGFuZy4gIENhbGwgX2V4aXQoKSBpbnN0ZWFkIG9mIGV4aXQoKSBpbiBjYXNlIG9mIGEKK3NldmVyZSBwcm9ibGVtLgorCitTZXR0aW5nIHRoZSB3aW5kb3cgdGl0bGUgZnJvbSBub3RoaW5nIHRvIHNvbWV0aGluZyBkaWRuJ3Qgd29yayBhZnRlciBwYXRjaCAyOS4KKworQ2hlY2sgZm9yIG93bmVyc2hpcCBvZiAuZXhyYyBhbmQgLnZpbXJjIHdhcyBkb25lIHdpdGggc3RhdCgpLiAgVXNlIGxzdGF0KCkgYXMKK3dlbGwgZm9yIGV4dHJhIHNlY3VyaXR5LgorCitXaW4zMiBHVUk6IFByaW50aW5nIGEgZmlsZSB3aXRoICdmaWxlZm9ybWF0JyAidW5peCIgZGlkbid0IHdvcmsuICBTZXQKKydmaWxlZm9ybWF0JyB0byAiZG9zIiBiZWZvcmUgd3JpdGluZyB0aGUgdGVtcCBmaWxlLgorCitVbml4OiBDb3VsZCBzdGFydCB3YWl0aW5nIGZvciBhIGNoYXJhY3RlciB3aGVuIGNoZWNraW5nIGZvciBhIENUUkwtQyB0eXBlZAord2hlbiBhbiBYIGV2ZW50IGlzIHJlY2VpdmVkLgorCitDb3VsZCBub3QgdXNlIFBlcmwgYW5kIFB5dGhvbiBhdCB0aGUgc2FtZSB0aW1lIG9uIEZyZWVCU0QsIGJlY2F1c2UgUGVybCB1c2VkCisiLWxjIiBhbmQgUHl0aG9uIHVzZWQgdGhlIHRocmVhZGVkIEMgbGlicmFyeS4KKworV2luMzI6IFRoZSBNaW5ndyBjb21waWxlciBnYXZlIGEgZmV3IHdhcm5pbmcgbWVzc2FnZXMuCisKK1doZW4gdXNpbmcgIlpaIiBhbmQgYW4gYXV0b2NvbW1hbmQgZm9yIHdyaXRpbmcgdXNlcyBhbiBhYmJyZXZpYXRpb24gaXQgZGlkbid0Cit3b3JrLiAgRG9uJ3Qgc3R1ZmYgdGhlICI6eCIgY29tbWFuZCBidXQgZXhlY3V0ZSBpdCBkaXJlY3RseS4gKE1pa2FlbCBCZXJ0aGUpCisKK1ZNUyBkb2Vzbid0IGFsd2F5cyBoYXZlIGxzdGF0KCksIGFkZGVkIGFuICNpZmRlZiBhcm91bmQgaXQuCisKK0FkZGVkIGEgZmV3IGNvcnJlY3Rpb25zIGZvciB0aGUgTWFjaW50b3NoLiAoQXhlbCBLaWVsaG9ybikKKworV2luMzI6IEd2aW1leHQgY291bGQgbm90IGVkaXQgbW9yZSB0aGFuIGEgZmV3IGZpbGVzIGF0IG9uY2UsIHRoZSBsZW5ndGggb2YgdGhlCithcmd1bWVudCB3YXMgZml4ZWQuCisKKworUHJldmlvdXNseSByZWxlYXNlZCBwYXRjaGVzIGZvciBWaW0gNS43OgorCitQYXRjaCA1LjcuMDAxCitQcm9ibGVtOiAgICBXaGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBjcnlwdGVkLCBhbmQgYW5vdGhlciBtb2RpZmllZCBidWZmZXIKKwkgICAgaXNuJ3QsICI6d2FsbCIgd2lsbCBlbmNyeXB0IHRoZSBvdGhlciBidWZmZXIuCitTb2x1dGlvbjogICBJbiBidWZfd3JpdGUoKSB1c2UgImJ1ZiIgaW5zdGVhZCBvZiAiY3VyYnVmIiB0byBjaGVjayBmb3IgdGhlCisJICAgIGNyeXB0IGtleS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNy4wMDIKK1Byb2JsZW06ICAgIFdoZW4gJ3Nob3dtb2RlJyBpcyBzZXQsIHVzaW5nICJDVFJMLU8gOnIgZmlsZSIgd2FpdHMgdGhyZWUgc2Vjb25kcworCSAgICBiZWZvcmUgZGlzcGxheWluZyB0aGUgcmVhZCB0ZXh0LiAoV2ljaGVydCBBa2tlcm1hbikKK1NvbHV0aW9uOiAgIFNldCAia2VlcF9tc2ciIHRvIHRoZSBmaWxlIG1lc3NhZ2Ugc28gdGhhdCB0aGUgc2NyZWVuIGlzIHJlZHJhd24KKwkgICAgYmVmb3JlIHRoZSB0aHJlZSBzZWNvbmRzIHdhaXQgZm9yIGRpc3BsYXlpbmcgdGhlIG1vZGUgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDUuNy4wMDMKK1Byb2JsZW06ICAgIFNlYXJjaGluZyBmb3IgIltbOmNudHJsOl1dIiBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBFeGNsdWRlIE5VTCBmcm9tIHRoZSBtYXRjaGluZyBjaGFyYWN0ZXJzLCBpdCB0ZXJtaW5hdGVzIHRoZSBsaXN0LgorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNS43LjAwNAorUHJvYmxlbTogICAgR1RLOiBXaGVuIHNlbGVjdGluZyBhIG5ldyBmb250LCBWaW0gY2FuIGNyYXNoLgorU29sdXRpb246ICAgSW4gZ3VpX21jaF9pbml0X2ZvbnQoKSB1bnJlZmVyZW5jZSB0aGUgb2xkIGZvbnQsIG5vdCB0aGUgbmV3IG9uZS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNS43LjAwNQorUHJvYmxlbTogICAgTXVsdGlieXRlOiBJbnNlcnRpbmcgYSB3cmFwcGVkIGxpbmUgY29ycnVwdHMga3Rlcm0gc2NyZWVuLgorCSAgICBQYXN0aW5nIFRFWFQvQ09NUE9VTkRfVEVYVCBpbnRvIFZpbSBkb2VzIG5vdCB3b3JrLgorCSAgICBPbiBNb3RpZiBubyBYSU0gc3RhdHVzIGxpbmUgaXMgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIGl0IGlzCisJICAgIGF2YWlsYWJsZS4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSB4dGVybSB0cmljayBmb3Igd3JhcHBpbmcgbGluZXMgZm9yIG11bHRpYnl0ZSBtb2RlLgorCSAgICBDb3JyZWN0IGEgbWlzc2luZyAiYnJlYWsiLCBhZGRlZCBURVhUL0NPTVBPVU5EX1RFWFQgc2VsZWN0aW9uCisJICAgIHJlcXVlc3QuCisJICAgIEFkZCBYSU1TdGF0dXNBcmVhIGZhbGxiYWNrIGNvZGUuCisJICAgIChLYXRzdWhpdG8gTmFnYW5vKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYywgc3JjL211bHRieXRlLmMsIHNyYy9zY3JlZW4uYywgc3JjL3VpLmMKKworUGF0Y2ggNS43LjAwNgorUHJvYmxlbTogICAgR1VJOiByZWRyYXdpbmcgdGhlIG5vbi1WaXN1YWwgc2VsZWN0aW9uIGlzIHdyb25nIHdoZW4gdGhlIHdpbmRvdworCSAgICBpcyB1bm9ic2N1cmVkLiAoSmVhbi1QaWVycmUgRXRpZW5uZSkKK1NvbHV0aW9uOiAgIFJlZHJhdyB0aGUgc2VsZWN0aW9uIHByb3Blcmx5IGFuZCBkb24ndCBjbGVhciBpdC4gIEFkZGVkICJsZW4iCisJICAgIGFyZ3VtZW50IHRvIGNsaXBfbWF5X3JlZHJhd19zZWxlY3Rpb24oKS4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvdWkuYywgc3JjL3Byb3RvL3VpLnBybworCitQYXRjaCA1LjcuMDA3CitQcm9ibGVtOiAgICBQeXRob246IENyYXNoIHdoZW4gdXNpbmcgdGhlIGN1cnJlbnQgYnVmZmVyIHR3aWNlLgorU29sdXRpb246ICAgSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYnVmZmVyIGFuZCB3aW5kb3cgb2JqZWN0cy4KKwkgICAgKEpvaGFubmVzIFplbGxuZXIpCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA1LjcuMDA4CitQcm9ibGVtOiAgICBJbiBFeCBtb2RlLCBiYWNrc3BhY2luZyBvdmVyIHRoZSBmaXJzdCBUQUIgZG9lc24ndCB3b3JrIHByb3Blcmx5LgorCSAgICAoV2ljaGVydCBBa2tlcm1hbikKK1NvbHV0aW9uOiAgIFN3aXRjaCB0aGUgY3Vyc29yIG9uIGJlZm9yZSBwcmludGluZyB0aGUgbmV3bGluZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNS43LjAwOSAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IENyYXNoIHdoZW4gdXNpbmcgYSBsb25nIGZpbGUuCitTb2x1dGlvbjogICBEb24ndCByZWRlZmluZSBtYWxsb2MoKSBhbmQgZnJlZSgpLCBiZWNhdXNlIGl0IHdpbGwgYnJlYWsgdXNpbmcKKwkgICAgcmVhbGxvYygpLgorRmlsZXM6CSAgICBzcmMvb3NfbWFjLmgKKworUGF0Y2ggNS43LjAxMAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBDVFJMLUEgb24gYSB2ZXJ5IGxvbmcgbnVtYmVyIFZpbSBjYW4gY3Jhc2guICAoTWljaGFlbAorCSAgICBOYXVtYW5uKQorU29sdXRpb246ICAgVHJ1bmNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IG51bWJlciB0byBhdm9pZCBhIGJ1ZmZlciBvdmVyZmxvdy4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDUuNy4wMTEgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJIG9uIE5UIDUgYW5kIFdpbjk4OiBEaXNwbGF5aW5nIEhlYnJldyBpcyByZXZlcnNlZC4KK1NvbHV0aW9uOiAgIE91dHB1dCBlYWNoIGNoYXJhY3RlciBzZXBhcmF0ZWx5LCB0byBhdm9pZCB0aGF0IFdpbmRvd3MgcmV2ZXJzZXMKKwkgICAgdGhlIHRleHQgZm9yIHNvbWUgZm9udHMuIChSb24gQWFyb24pCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNS43LjAxMgorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiLWNvbXBsZXRlPWJ1ZmZlciIgZm9yICI6Y29tbWFuZCIgdGhlIHVzZXIgY29tbWFuZAorCSAgICBmYWlscy4KK1NvbHV0aW9uOiAgIEluIGEgdXNlciBjb21tYW5kIGRvbid0IHJlcGxhY2UgdGhlIGJ1ZmZlciBuYW1lIHdpdGggYSBjb3VudCBmb3IKKwkgICAgdGhlICBidWZmZXIgbnVtYmVyLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA1LjcuMDEzCitQcm9ibGVtOiAgICAiZ0QiIGRpZG4ndCBhbHdheXMgZmluZCBhIG1hdGNoIGluIHRoZSBmaXJzdCBsaW5lLCBkZXBlbmRpbmcgb24KKwkgICAgdGhlIGNvbHVtbiB0aGUgc2VhcmNoIHN0YXJ0ZWQgYXQuCitTb2x1dGlvbjogICBSZXNldCB0aGUgY29sdW1uIHRvIHplcm8gYmVmb3JlIHN0YXJ0aW5nIHRvIHNlYXJjaC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDUuNy4wMTQKK1Byb2JsZW06ICAgIFJvdDEzIGVuY29kaW5nIHdhcyBkb25lIG9uIGNoYXJhY3RlcnMgd2l0aCBhY2NlbnRzLCB3aGljaCBpcworCSAgICB3cm9uZy4gKFN2ZW4gR290dHdhbGQpCitTb2x1dGlvbjogICBPbmx5IGRvIHJvdDEzIGVuY29kaW5nIG9uIEFTQ0lJIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA1LjcuMDE2CitQcm9ibGVtOiAgICBXaGVuIGhpdHRpbmcgJ24nIGZvciBhICI6cy8vL2MiIGNvbW1hbmQsIHRoZSBpZ25vcmUtY2FzZSBmbGFnIHdhcworCSAgICBub3QgcmVzdG9yZWQsIHNvbWUgbWF0Y2hlcyB3ZXJlIHNraXBwZWQuIChEYW5pZWwgQmxhdXN0ZWluKQorU29sdXRpb246ICAgUmVzdG9yZSB0aGUgcmVnX2ljIHZhcmlhYmxlIHdoZW4gJ24nIHdhcyBoaXQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNS43LjAxNworUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIFZpbSBzY3JpcHQgZm9yIFZpbSA2LjAgd2l0aCA8U0lEPiBiZWZvcmUgYSBmdW5jdGlvbgorCSAgICBuYW1lLCBpdCBwcm9kdWNlcyBhbiBlcnJvciBtZXNzYWdlIGV2ZW4gd2hlbiBpbnNpZGUgYW4gImlmIHZlcnNpb24KKwkgICAgPj0gNjAwIi4gIChDaGFybGVzIENhbXBiZWxsKQorU29sdXRpb246ICAgSWdub3JlIGVycm9ycyBpbiB0aGUgZnVuY3Rpb24gbmFtZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBub3QgZ29pbmcKKwkgICAgdG8gYmUgZGVmaW5lZC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA1LjcuMDE4CitQcm9ibGVtOiAgICBXaGVuIHJ1bm5pbmcgInJ2aW0iIG9yICJ2aW0gLVoiIGl0IHdhcyBzdGlsbCBwb3NzaWJsZSB0byBleGVjdXRlIGEKKwkgICAgc2hlbGwgY29tbWFuZCB3aXRoIHN5c3RlbSgpIGFuZCBiYWNrdGljay1leHBhbnNpb24uIChBbnRvbmlvcyBBLgorCSAgICBLYXZhcm5vcykKK1NvbHV0aW9uOiAgIERpc2FsbG93IGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQgaW4gZ2V0X2NtZF9vdXRwdXQoKSBhbmQKKwkgICAgbWNoX2V4cGFuZF93aWxkY2FyZHMoKS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNS43LjAxOQorUHJvYmxlbTogICAgTXVsdGlieXRlOiBJbiBhIHN1YnN0aXR1dGUgc3RyaW5nLCBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGlzbid0CisJICAgIHNraXBwZWQgcHJvcGVybHksIGNhbiBiZSBhIHByb2JsZW0gd2hlbiB0aGUgc2Vjb25kIGJ5dGUgaXMgYQorCSAgICBiYWNrc2xhc2guCitTb2x1dGlvbjogICBTa2lwIGFuIGV4dHJhIGJ5dGUgZm9yIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyLiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDUuNy4wMjAKK1Byb2JsZW06ICAgIENvbXBpbGF0aW9uIGRvZXNuJ3Qgd29yayBvbiBNYWNPUy1YLgorU29sdXRpb246ICAgQWRkIGEgY291cGxlIG9mICNpZmRlZnMuIChKYW1pZSBDdXJtaSkKK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jLCBzcmMvY3RhZ3MvZ2VuZXJhbC5oCisKK1BhdGNoIDUuNy4wMjEKK1Byb2JsZW06ICAgIFZpbSBzb21ldGltZXMgcHJvZHVjZXMgYSBiZWVwIHdoZW4gc3RhcnRlZCBpbiBhbiB4dGVybS4gIE9ubHkKKwkgICAgaGFwcGVucyB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgbW91c2Ugc3VwcG9ydC4KK1NvbHV0aW9uOiAgIFJlcXVlc3RpbmcgdGhlIHh0ZXJtIHZlcnNpb24gcmVzdWx0cyBpbiBhIEtfSUdOT1JFLiAgVGhpcyB3YXNuJ3QKKwkgICAgaGFuZGxlZCB3aGVuIG1vdXNlIHN1cHBvcnQgaXMgZGlzYWJsZWQuICBBY2NlcHQgS19JR05PUkUgYWx3YXlzLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNS43LjAyMgorUHJvYmxlbTogICAgJXYgaW4gJ3N0YXR1c2xpbmUnIGlzIG5vdCBkaXNwbGF5ZWQgd2hlbiBpdCdzIGVxdWFsIHRvICVjLgorU29sdXRpb246ICAgQ2hlY2sgaWYgJVYgb3IgJXYgaXMgdXNlZCBhbmQgaGFuZGxlIHRoZW0gZGlmZmVyZW50bHkuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA1LjcuMDIzCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIGEgV2luTGVhdmUgYXV0b2NvbW1hbmQgZGVsZXRlcyB0aGUgYnVmZmVyIGluIHRoZSBvdGhlcgorCSAgICB3aW5kb3cuCitTb2x1dGlvbjogICBDaGVjayB0aGF0IGFmdGVyIGV4ZWN1dGluZyB0aGUgV2luTGVhdmUgYXV0b2NvbW1hbmRzIHRoZXJlIHN0aWxsCisJICAgIGlzIGEgd2luZG93IHRvIGJlIGNsb3NlZC4gIEFsc28gdXBkYXRlIHRoZSB0ZXN0IHRoYXQgd2FzIHN1cHBvc2VkCisJICAgIHRvIGNoZWNrIGZvciB0aGlzIHByb2JsZW0uCitGaWxlczoJICAgIHNyYy93aW5kb3cuYywgdGVzdGRpci90ZXN0MTMuaW4sIHRlc3RkaXIvdGVzdDEzLm9rCisKK1BhdGNoIDUuNy4wMjQKK1Byb2JsZW06ICAgIEV2YWx1YXRpbmcgYW4gZXhwcmVzc2lvbiBmb3IgJ3N0YXR1c2xpbmUnIGNhbiBoYXZlIHNpZGUgZWZmZWN0cy4KK1NvbHV0aW9uOiAgIEV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGluIGEgc2FuZGJveC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL2V2YWwuYywgc3JjL3Byb3RvL2V2YWwucHJvLCBzcmMvZXhfY21kcy5jLAorCSAgICBzcmMvZXhfY21kcy5oLCBzcmMvZXhfZG9jbWQuYywgc3JjL2dsb2JhbHMuaCwgc3JjL29wdGlvbi5jLAorCSAgICBzcmMvc2NyZWVuLmMsIHNyYy91bmRvLmMKKworUGF0Y2ggNS43LjAyNSAoZml4ZWQpCitQcm9ibGVtOiAgICBDcmVhdGluZyBhIHRlbXAgZmlsZSBoYXMgYSByYWNlIGNvbmRpdGlvbi4KK1NvbHV0aW9uOiAgIENyZWF0ZSBhIHByaXZhdGUgZGlyZWN0b3J5IHRvIHdyaXRlIHRoZSB0ZW1wIGZpbGVzIGluLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9taXNjMS5jLCBzcmMvcHJvdG8vbWlzYzEucHJvLAorCSAgICBzcmMvcHJvdG8vZmlsZWlvLnBybywgc3JjL21lbWxpbmUuYywgc3JjL29zX3VuaXguaAorCitQYXRjaCA1LjcuMDI2IChleHRyYSkKK1Byb2JsZW06ICAgIENyZWF0aW5nIGEgdGVtcCBmaWxlIGhhcyBhIHJhY2UgY29uZGl0aW9uLgorU29sdXRpb246ICAgQ3JlYXRlIGEgcHJpdmF0ZSBkaXJlY3RvcnkgdG8gd3JpdGUgdGhlIHRlbXAgZmlsZXMgaW4uCisJICAgIFRoaXMgaXMgdGhlIGV4dHJhIHBhcnQgb2YgcGF0Y2ggNS43LjAyNS4KK0ZpbGVzOgkgICAgc3JjL29zX21zZG9zLmgKKworUGF0Y2ggNS43LjAyNworUHJvYmxlbTogICAgU3RhcnRpbmcgdG8gZWRpdCBhIGZpbGUgY2FuIGNhdXNlIGEgY3Jhc2guICBGb3IgZXhhbXBsZSB3aGVuIGluCisJICAgIEluc2VydCBtb2RlLCB1c2luZyBDVFJMLU8gOmhlbHAgYWJicjxUYWI+IHRvIHNjcm9sbCB0aGUgc2NyZWVuIGFuZAorCSAgICB0aGVuIDxDUj4sIHdoaWNoIGVkaXRzIGEgaGVscCBmaWxlLiAoUm9iZXJ0IEJvZ29taXApCitTb2x1dGlvbjogICBDaGVjayBpZiBrZWVwX21zZyBpcyBOVUxMIGJlZm9yZSBjb3B5aW5nIGl0LgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNS43LjAyOAorUHJvYmxlbTogICAgQ3JlYXRpbmcgYSBiYWNrdXAgb3Igc3dhcCBmaWxlIGNvdWxkIGZhaWwgaW4gcmFyZSBzaXR1YXRpb25zLgorU29sdXRpb246ICAgVXNlIE9fRVhDTCBmb3Igb3BlbigpLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9tZW1maWxlLmMKKworUGF0Y2ggNS43LjAyOQorUHJvYmxlbTogICAgRWRpdGluZyBhIGZpbGUgd2l0aCBhbiBleHRyZW1lbHkgbG9uZyBuYW1lIGNyYXNoZWQgVmltLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIGxlbmd0aCBvZiB0aGUgbmFtZSB3aGVuIHNldHRpbmcgdGhlIHdpbmRvdyB0aXRsZS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDUuNy4wMzAKK1Byb2JsZW06ICAgIEEgIjptYWtlIiBvciAiOmdyZXAiIGNvbW1hbmQgd2l0aCBhIHZlcnkgbG9uZyBhcmd1bWVudCBjb3VsZCBjYXVzZQorCSAgICBhIGNyYXNoLgorU29sdXRpb246ICAgQWxsb2NhdGUgdGhlIGJ1ZmZlciBmb3IgdGhlIHNoZWxsIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZlcnNpb242LnR4dCBiL3J1bnRpbWUvZG9jL3ZlcnNpb242LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdjZjkyCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmVyc2lvbjYudHh0CkBAIC0wLDAgKzEsMTM4NDYgQEAKKyp2ZXJzaW9uNi50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitXZWxjb21lIHRvIFZpbSBWZXJzaW9uIDYuMCEgIEEgbGFyZ2UgbnVtYmVyIG9mIGZlYXR1cmVzIGhhcyBiZWVuIGFkZGVkLiAgVGhpcworZmlsZSBtZW50aW9ucyBhbGwgdGhlIG5ldyBpdGVtcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCwgY2hhbmdlcyB0byBleGlzdGluZworZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcyBjb21wYXJlZCB0byBWaW0gNS54LgorCitTZWUgfHZpX2RpZmYudHh0fCBmb3IgYW4gb3ZlcnZpZXcgb2YgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaSBhbmQgVmltIDYuMC4KK1NlZSB8dmVyc2lvbjQudHh0fCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gMy4wIGFuZCBWaW0gNC4wLgorU2VlIHx2ZXJzaW9uNS50eHR8IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSA0LjAgYW5kIFZpbSA1LjAuCisKK0lOQ09NUEFUSUJMRSBDSEFOR0VTCQkJfGluY29tcGF0aWJsZS02fAorCitDdXJzb3IgcG9zaXRpb24gaW4gVmlzdWFsIG1vZGUJCXxjdXJwb3MtdmlzdWFsfAorc3Vic3RpdHV0ZSBjb21tYW5kIFZpIGNvbXBhdGlibGUJfHN1YnN0aXR1dGUtQ1J8CitnbG9iYWwgb3B0aW9uIHZhbHVlcyBpbnRyb2R1Y2VkCQl8bmV3LWdsb2JhbC12YWx1ZXN8CisnZmlsZWVuY29kaW5nJyBjaGFuZ2VkCQkJfGZpbGVlbmNvZGluZy1jaGFuZ2VkfAorRGlncmFwaHMgY2hhbmdlZAkJCXxkaWdyYXBocy1jaGFuZ2VkfAorRmlsZXR5cGUgZGV0ZWN0aW9uIGNoYW5nZWQJCXxmaWxldHlwZWRldGVjdC1jaGFuZ2VkfAorVW5saXN0ZWQgYnVmZmVycyBpbnRyb2R1Y2VkCQl8bmV3LXVubGlzdGVkLWJ1ZmZlcnN8CitDVFJMLVUgaW4gQ29tbWFuZC1saW5lIG1vZGUgY2hhbmdlZAl8Q1RSTC1VLWNoYW5nZWR8CitDdGFncyBnb25lCQkJCXxjdGFncy1nb25lfAorRG9jdW1lbnRhdGlvbiByZW9yZ2FuaXplZAkJfGRvY3VtZW50YXRpb24tNnwKK01vZGVsZXNzIHNlbGVjdGlvbiBhbmQgY2xpcGJvYXJkCXxtb2RlbGVzcy1hbmQtY2xpcGJvYXJkfAorU21hbGwgaW5jb21wYXRpYmlsaXRpZXMJCQl8aW5jb21wLXNtYWxsLTZ8CisKK05FVyBGRUFUVVJFUwkJCQl8bmV3LTZ8CisKK0ZvbGRpbmcJCQkJCXxuZXctZm9sZGluZ3wKK1ZlcnRpY2FsbHkgc3BsaXQgd2luZG93cwkJfG5ldy12ZXJ0c3BsaXR8CitEaWZmIG1vZGUJCQkJfG5ldy1kaWZmLW1vZGV8CitFYXN5IFZpbTogY2xpY2stYW5kLXR5cGUJCXxuZXctZXZpbXwKK1VzZXIgbWFudWFsCQkJCXxuZXctdXNlci1tYW51YWx8CitGbGV4aWJsZSBpbmRlbnRpbmcJCQl8bmV3LWluZGVudC1mbGV4fAorRXh0ZW5kZWQgc2VhcmNoIHBhdHRlcm5zCQl8bmV3LXNlYXJjaHBhdHwKK1VURi04IHN1cHBvcnQJCQkJfG5ldy11dGYtOHwKK011bHRpLWxhbmd1YWdlIHN1cHBvcnQJCQl8bmV3LW11bHRpLWxhbmd8CitQbHVnaW4gc3VwcG9ydAkJCQl8bmV3LXBsdWdpbnN8CitGaWxldHlwZSBwbHVnaW5zCQkJfG5ldy1maWxldHlwZS1wbHVnaW5zfAorRmlsZSBicm93c2VyCQkJCXxuZXctZmlsZS1icm93c2VyfAorRWRpdGluZyBmaWxlcyBvdmVyIGEgbmV0d29yawkJfG5ldy1uZXR3b3JrLWZpbGVzfAorV2luZG93IGZvciBjb21tYW5kLWxpbmUgZWRpdGluZwkJfG5ldy1jbWR3aW58CitEZWJ1Z2dpbmcgbW9kZQkJCQl8bmV3LWRlYnVnLW1vZGV8CitDdXJzb3IgaW4gdmlydHVhbCBwb3NpdGlvbgkJfG5ldy12aXJ0ZWRpdHwKK0RlYnVnZ2VyIGludGVyZmFjZQkJCXxuZXctZGVidWctaXRmfAorQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIFZpbXMJCXxuZXctdmltLXNlcnZlcnwKK0J1ZmZlciB0eXBlIG9wdGlvbnMJCQl8bmV3LWJ1ZnR5cGV8CitQcmludGluZwkJCQl8bmV3LXByaW50aW5nfAorUG9ydHMJCQkJCXxwb3J0cy02fAorUXVpY2tmaXggZXh0ZW5kZWQJCQl8cXVpY2tmaXgtNnwKK09wZXJhdG9yIG1vZGlmaWVycwkJCXxuZXctb3BlcmF0b3ItbW9kfAorU2VhcmNoIFBhdGgJCQkJfG5ldy1zZWFyY2gtcGF0aHwKK1dyaXRpbmcgZmlsZXMgaW1wcm92ZWQJCQl8bmV3LWZpbGUtd3JpdGluZ3wKK0FyZ3VtZW50IGxpc3QJCQkJfG5ldy1hcmd1bWVudC1saXN0fAorUmVzdG9yZSBhIFZpZXcJCQkJfG5ldy1WaWV3fAorQ29sb3Igc2NoZW1lcwkJCQl8bmV3LWNvbG9yLXNjaGVtZXN8CitWYXJpb3VzIG5ldyBpdGVtcwkJCXxuZXctaXRlbXMtNnwKKworSU1QUk9WRU1FTlRTCQkJCXxpbXByb3ZlbWVudHMtNnwKKworQ09NUElMRSBUSU1FIENIQU5HRVMJCQl8Y29tcGlsZS1jaGFuZ2VzLTZ8CisKK0JVRyBGSVhFUwkJCQl8YnVnLWZpeGVzLTZ8CisKK1ZFUlNJT04gNi4xCQkJfHZlcnNpb24tNi4xfAorQ2hhbmdlZAkJCQkJfGNoYW5nZWQtNi4xfAorQWRkZWQJCQkJCXxhZGRlZC02LjF8CitGaXhlZAkJCQkJfGZpeGVkLTYuMXwKKworVkVSU0lPTiA2LjIJCQl8dmVyc2lvbi02LjJ8CitDaGFuZ2VkCQkJCQl8Y2hhbmdlZC02LjJ8CitBZGRlZAkJCQkJfGFkZGVkLTYuMnwKK0ZpeGVkCQkJCQl8Zml4ZWQtNi4yfAorCitWRVJTSU9OIDYuMwkJCXx2ZXJzaW9uLTYuM3wKK0NoYW5nZWQJCQkJCXxjaGFuZ2VkLTYuM3wKK0FkZGVkCQkJCQl8YWRkZWQtNi4zfAorRml4ZWQJCQkJCXxmaXhlZC02LjN8CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSU5DT01QQVRJQkxFIENIQU5HRVMJCQkJKmluY29tcGF0aWJsZS02KgorCitUaGVzZSBjaGFuZ2VzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyByZWxlYXNlcy4gIENoZWNrIHRoaXMgbGlzdCBpZiB5b3UKK3J1biBpbnRvIGEgcHJvYmxlbSB3aGVuIHVwZ3JhZGluZyBmcm9tIFZpbSA1LnggdG8gNi4wCisKKworQ3Vyc29yIHBvc2l0aW9uIGluIFZpc3VhbCBtb2RlCQkJKmN1cnBvcy12aXN1YWwqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBnb2luZyBmcm9tIG9uZSB3aW5kb3cgdG8gYW5vdGhlciB3aW5kb3cgb24gdGhlIHNhbWUgYnVmZmVyIHdoaWxlIGluCitWaXN1YWwgbW9kZSwgdGhlIGN1cnNvciBwb3NpdGlvbiBvZiB0aGUgb3RoZXIgd2luZG93IGlzIGFkanVzdGVkIHRvIGtlZXAgdGhlCitzYW1lIFZpc3VhbCBhcmVhLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHN0YXJ0IG9mIHRoZSBWaXN1YWwgYXJlYSBpbiBvbmUKK3dpbmRvdyBhbmQgdGhlIGVuZCBpbiBhbm90aGVyLiAgSW4gdmltIDUueCB0aGUgY3Vyc29yIHBvc2l0aW9uIG9mIHRoZSBvdGhlcgord2luZG93IHdvdWxkIGJlIHVzZWQsIHdoaWNoIGNvdWxkIGJlIGFueXdoZXJlIGFuZCB3YXMgbm90IHZlcnkgdXNlZnVsLgorCisKK1N1YnN0aXR1dGUgY29tbWFuZCBWaSBjb21wYXRpYmxlCQkqc3Vic3RpdHV0ZS1DUioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdWJzdGl0dXRlIHN0cmluZyAodGhlICJ0byIgcGFydCBvZiB0aGUgc3Vic3RpdHV0ZSBjb21tYW5kKSBoYXMgYmVlbiBtYWRlCitWaSBjb21wYXRpYmxlLiAgUHJldmlvdXNseSBhIENUUkwtViBoYWQgYSBzcGVjaWFsIG1lYW5pbmcgYW5kIGNvdWxkIGJlIHVzZWQgdG8KK3ByZXZlbnQgYSA8Q1I+IHRvIGluc2VydCBhIGxpbmUgYnJlYWsuICBUaGlzIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBpbnNlcnQgYQorQ1RSTC1WIGJlZm9yZSBhIGxpbmUgYnJlYWsuICBOb3cgYSBiYWNrc2xhc2ggaXMgdXNlZCB0byBwcmV2ZW50IGEgPENSPiB0bworY2F1c2UgYSBsaW5lIGJyZWFrLiAgU2luY2UgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpcyBoYWx2ZWQsIGl0IGlzIHN0aWxsCitwb3NzaWJsZSB0byBpbnNlcnQgYSBsaW5lIGJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICBUaGlzIG5vdyB3b3JrcyBqdXN0CitsaWtlIFZpLCBidXQgaXQncyBub3QgY29tcGF0aWJsZSB3aXRoIFZpbSB2ZXJzaW9ucyBiZWZvcmUgNi4wLgorCitXaGVuIGEgIjpzIiBjb21tYW5kIGRvZXNuJ3QgbWFrZSBhbnkgc3Vic3RpdHV0aW9ucywgaXQgbm8gbG9uZ2VyIHNldHMgdGhlICdbCithbmQgJ10gbWFya3MuICBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIFZpLCBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgdGhlc2UgbWFya3MuCisKKworR2xvYmFsIG9wdGlvbiB2YWx1ZXMgaW50cm9kdWNlZAkJCSpuZXctZ2xvYmFsLXZhbHVlcyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIG5vdyBnbG9iYWwgdmFsdWVzIGZvciBvcHRpb25zIHdoaWNoIGFyZSBsb2NhbCB0byBhIGJ1ZmZlciBvciB3aW5kb3cuCitQcmV2aW91c2x5IHRoZSBsb2NhbCBvcHRpb25zIHdlcmUgY29waWVkIGZyb20gb25lIGJ1ZmZlciB0byBhbm90aGVyLiAgV2hlbgorZWRpdGluZyBhbm90aGVyIGZpbGUgdGhpcyBjb3VsZCBjYXVzZSBvcHRpb24gdmFsdWVzIGZyb20gYSBtb2RlbGluZSB0byBiZSB1c2VkCitmb3IgdGhlIHdyb25nIGZpbGUuICBOb3cgdGhlIGdsb2JhbCB2YWx1ZXMgYXJlIHVzZWQgd2hlbiBlbnRlcmluZyBhIGJ1ZmZlcgordGhhdCBoYXMgbm90IGJlZW4gdXNlZCBiZWZvcmUuICBBbHNvLCB3aGVuIGVkaXRpbmcgYW5vdGhlciBidWZmZXIgaW4gYSB3aW5kb3csCit0aGUgbG9jYWwgd2luZG93IG9wdGlvbnMgYXJlIHJlc2V0IHRvIHRoZWlyIGdsb2JhbCB2YWx1ZXMuICBUaGUgIjpzZXQiIGNvbW1hbmQKK3NldHMgYm90aCB0aGUgbG9jYWwgYW5kIGdsb2JhbCB2YWx1ZXMsIHRoaXMgaXMgc3RpbGwgY29tcGF0aWJsZS4gIEJ1dCBhCittb2RlbGluZSBvbmx5IHNldHMgdGhlIGxvY2FsIHZhbHVlLCB0aGlzIGlzIG5vdCBiYWNrd2FyZHMgY29tcGF0aWJsZS4KKworIjpsZXQgJm9wdCA9IHZhbCIgbm93IHNldHMgdGhlIGxvY2FsIGFuZCBnbG9iYWwgdmFsdWVzLCBsaWtlICI6c2V0Ii4gIE5ldworY29tbWFuZHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHNldCB0aGUgZ2xvYmFsIG9yIGxvY2FsIHZhbHVlOgorCTpsZXQgJm9wdCA9IHZhbAkJbGlrZSAiOnNldCIKKwk6bGV0ICZnOm9wdCA9IHZhbAlsaWtlICI6c2V0Z2xvYmFsIgorCTpsZXQgJmw6b3B0ID0gdmFsCWxpa2UgIjpzZXRsb2NhbCIKKworCisnZmlsZWVuY29kaW5nJyBjaGFuZ2VkCQkJCSpmaWxlZW5jb2RpbmctY2hhbmdlZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJ2ZpbGVlbmNvZGluZycgd2FzIHVzZWQgaW4gVmltIDUueCB0byBzZXQgdGhlIGVuY29kaW5nIHVzZWQgaW5zaWRlIGFsbCBvZiBWaW0uCitUaGlzIHdhcyBhIGJpdCBzdHJhbmdlLCBiZWNhdXNlIGl0IHdhcyBsb2NhbCB0byBhIGJ1ZmZlciBhbmQgd29ya2VkIGZvciBhbGwKK2J1ZmZlcnMuICBJdCBjb3VsZCBuZXZlciBiZSBkaWZmZXJlbnQgYmV0d2VlbiBidWZmZXJzLCBiZWNhdXNlIGl0IGNoYW5nZWQgdGhlCit3YXkgdGV4dCBpbiBhbGwgYnVmZmVycyB3YXMgaW50ZXJwcmV0ZWQuCitJdCBpcyBub3cgdXNlZCBmb3IgdGhlIGVuY29kaW5nIG9mIHRoZSBmaWxlIHJlbGF0ZWQgdG8gdGhlIGJ1ZmZlci4gIElmIHlvdQorc3RpbGwgc2V0ICdmaWxlZW5jb2RpbmcnIGl0IGlzIGxpa2VseSB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGV0ZWN0ZWQKK2VuY29kaW5nIGZyb20gJ2ZpbGVlbmNvZGluZ3MnLCB0aHVzIGl0IGlzICJtb3N0bHkgaGFybWxlc3MiLgorVGhlIG9sZCBGaWxlRW5jb2RpbmcgYXV0b2NvbW1hbmQgbm93IGRvZXMgdGhlIHNhbWUgYXMgdGhlIG5ldyBFbmNvZGluZ0NoYW5nZWQKK2V2ZW50LgorCisKK0RpZ3JhcGhzIGNoYW5nZWQJCQkJKmRpZ3JhcGhzLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IGRpZ3JhcGhzIG5vdyBjb3JyZXNwb25kIHRvIFJGQzEzNDUuICBUaGlzIGlzIHZlcnkgZGlmZmVyZW50IGZyb20KK3doYXQgd2FzIHVzZWQgaW4gVmltIDUueC4gfGRpZ3JhcGhzfAorCisKK0ZpbGV0eXBlIGRldGVjdGlvbiBjaGFuZ2VkCQkJKmZpbGV0eXBlZGV0ZWN0LWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZXR5cGUgZGV0ZWN0aW9uIHByZXZpb3VzbHkgd2FzIHVzaW5nIHRoZSAiZmlsZXR5cGUiIGF1dG9jb21tYW5kIGdyb3VwLgorVGhpcyBjYXVzZWQgY29uZnVzaW9uIHdpdGggdGhlIEZpbGVUeXBlIGV2ZW50IG5hbWUgKGNhc2UgaXMgaWdub3JlZCkuICBUaGUKK2dyb3VwIGlzIG5vdyBjYWxsZWQgImZpbGV0eXBlZGV0ZWN0Ii4gIEl0IHN0aWxsIHdvcmtzLCBidXQgaWYgdGhlICJmaWxldHlwZSIKK2dyb3VwIGlzIHVzZWQgdGhlIGF1dG9jb21tYW5kcyB3aWxsIG5vdCBiZSByZW1vdmVkIGJ5ICI6ZmlsZXR5cGUgb2ZmIi4KKyAgIFRoZSBzdXBwb3J0IGZvciAncnVudGltZXBhdGgnIGhhcyBtYWRlIHRoZSAibXlmaWxldHlwZWZpbGUiIGFuZAorIm15c3ludGF4ZmlsZSIgbWVjaGFuaXNtIG9ic29sZXRlLiAgVGhleSBhcmUgc3RpbGwgdXNlZCBmb3IgYmFja3dhcmRzCitjb21wYXRpYmlsaXR5LgorCitUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBGaWxlVHlwZSBldmVudCBhbmQgc2V0dGluZyB0aGUgJ3N5bnRheCcgb3B0aW9uIHdhcworcHJldmlvdXNseSBpbiB0aGUgInN5bnRheCIgYXV0b2NvbW1hbmQgZ3JvdXAuICBUaGF0IGNhdXNlZCBjb25mdXNpb24gd2l0aCB0aGUKK1N5bnRheCBldmVudCBuYW1lLiAgVGhlIGdyb3VwIGlzIG5vdyBjYWxsZWQgInN5bnRheHNldCIuCisKK1RoZSBkaXN0cmlidXRlZCBzeW50YXggZmlsZXMgbm8gbG9uZ2VyIGNvbnRhaW4gInN5bnRheCBjbGVhciIuICBUaGF0IG1ha2VzIGl0Citwb3NzaWJsZSB0byBpbmNsdWRlIG9uZSBpbiB0aGUgb3RoZXIgd2l0aG91dCB0cmlja3MuICBUaGUgc3ludGF4IGlzIG5vdworY2xlYXJlZCB3aGVuIHRoZSAnc3ludGF4JyBvcHRpb24gaXMgc2V0IChieSBhbiBhdXRvY29tbWFuZCBhZGRlZCBmcm9tCitzeW5sb2FkLnZpbSkuICBUaGlzIG1ha2VzIHRoZSBzeW50YXggY2xlYXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiAnc3ludGF4JyBkb2VzCitub3QgY29ycmVzcG9uZCB0byBhIHN5bnRheCBmaWxlLiAgUHJldmlvdXNseSB0aGUgZXhpc3RpbmcgaGlnaGxpZ2h0aW5nIHdhcwora2VwdC4KKworCitVbmxpc3RlZCBidWZmZXJzIGludHJvZHVjZWQJCQkqbmV3LXVubGlzdGVkLWJ1ZmZlcnMqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgbm93IGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGJ1ZmZlcnMgd2hpY2ggZG9uJ3QgYXBwZWFyIGluIHRoZSBidWZmZXIKK2xpc3QgYW5kIGJ1ZmZlcnMgd2hpY2ggYXJlIHJlYWxseSBub3QgaW4gdGhlIGJ1ZmZlciBsaXN0LiAgQ29tbWFuZHMgbGlrZQorIjpscyIsICI6Ym5leHQiLCAiOmJsYXN0IiBhbmQgdGhlIEJ1ZmZlcnMgbWVudSB3aWxsIHNraXAgYnVmZmVycyBub3QgaW4gdGhlCitidWZmZXIgbGlzdC4gfHVubGlzdGVkLWJ1ZmZlcnwKK1RoZSAnYnVmbGlzdGVkJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gbWFrZSBhIGJ1ZmZlciBhcHBlYXIgaW4gdGhlIGJ1ZmZlciBsaXN0CitvciBub3QuCisKK1NldmVyYWwgY29tbWFuZHMgdGhhdCBwcmV2aW91c2x5IGFkZGVkIGEgYnVmZmVyIHRvIHRoZSBidWZmZXIgbGlzdCBub3cgY3JlYXRlCithbiB1bmxpc3RlZCBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgYSAiOmJuZXh0IiBhbmQgIjpiYWxsIiB3aWxsIG5vdCBmaW5kIHRoZXNlCitmaWxlcyB1bnRpbCB0aGV5IGhhdmUgYWN0dWFsbHkgYmVlbiBlZGl0ZWQuICBGb3IgZXhhbXBsZSwgYnVmZmVycyB1c2VkIGZvciB0aGUKK2FsdGVybmF0aXZlIGZpbGUgYnkgIjp3cml0ZSBmaWxlIiBhbmQgIjpyZWFkIGZpbGUiLgorICAgT3RoZXIgY29tbWFuZHMgcHJldmlvdXNseSBjb21wbGV0ZWx5IGRlbGV0ZWQgYSBidWZmZXIgYW5kIG5vdyBvbmx5IHJlbW92ZQordGhlIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgbGlzdC4gIENvbW1hbmRzIHJlbHlpbmcgb24gYSBidWZmZXIgbm90IHRvIGJlCitwcmVzZW50IG1pZ2h0IGZhaWwuICBGb3IgZXhhbXBsZSwgYSAiOmJkZWxldGUiIGNvbW1hbmQgaW4gYW4gYXV0b2NvbW1hbmQgdGhhdAorcmVsaWVkIG9uIHNvbWV0aGluZyBmb2xsb3dpbmcgdG8gZmFpbCAod2FzIHVzZWQgaW4gdGhlIGF1dG9tYXRpYyB0ZXN0cykuCit8OmJ3aXBlb3V0fCBjYW4gYmUgdXNlZCBmb3IgdGhlIG9sZCBtZWFuaW5nIG9mICI6YmRlbGV0ZSIuCisKK1RoZSBCdWZEZWxldGUgYXV0b2NvbW1hbmQgZXZlbnQgaXMgbm93IHRyaWdnZXJlZCB3aGVuIGEgYnVmZmVyIGlzIHJlbW92ZWQgZnJvbQordGhlIGJ1ZmZlciBsaXN0LiAgVGhlIEJ1ZkNyZWF0ZSBldmVudCBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIGEgYnVmZmVyIGlzCitjcmVhdGVkIHRoYXQgaXMgYWRkZWQgdG8gdGhlIGJ1ZmZlciBsaXN0LCBvciB3aGVuIGFuIGV4aXN0aW5nIGJ1ZmZlciBpcyBhZGRlZAordG8gdGhlIGJ1ZmZlciBsaXN0LiAgQnVmQWRkIGlzIGEgbmV3IG5hbWUgZm9yIEJ1ZkNyZWF0ZS4KK1RoZSBuZXcgQnVmTmV3IGV2ZW50IGlzIGZvciBjcmVhdGluZyBhbnkgYnVmZmVyIGFuZCBCdWZXaXBlb3V0IGZvciByZWFsbHkKK2RlbGV0aW5nIGEgYnVmZmVyLgorCitXaGVuIGRvaW5nIEluc2VydCBtb2RlIGNvbXBsZXRpb24sIG9ubHkgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QgYXJlCitzY2FubmVkLiAgQWRkZWQgdGhlICdVJyBmbGFnIHRvICdjb21wbGV0ZScgdG8gZG8gY29tcGxldGlvbiBmcm9tIHVubGlzdGVkCitidWZmZXJzLgorCitVbmxpc3RlZCBidWZmZXJzIGFyZSBub3Qgc3RvcmVkIGluIGEgdmltaW5mbyBmaWxlLgorCisKK0NUUkwtVSBpbiBDb21tYW5kLWxpbmUgbW9kZSBjaGFuZ2VkCQkqQ1RSTC1VLWNoYW5nZWQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2luZyBDVFJMLVUgd2hlbiBlZGl0aW5nIHRoZSBjb21tYW5kIGxpbmUgY2xlYXJlZCB0aGUgd2hvbGUgbGluZS4gIE1vc3QKK3NoZWxscyBvbmx5IGRlbGV0ZSB0aGUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvci4gIE1hZGUgaXQgd29yayBsaWtlIHRoYXQuCisoU3RldmUgV2FsbCkKKworWW91IGNhbiBnZXQgdGhlIG9sZCBiZWhhdmlvciB3aXRoIENUUkwtRSBDVFJMLVU6ID4KKwk6Y25vcmVtYXAgPEMtVT4gPEMtRT48Qy1VPgorCisKK0N0YWdzIGdvbmUJCQkJCSpjdGFncy1nb25lKgorLS0tLS0tLS0tLQorCitDdGFncyBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUgVmltIGRpc3RyaWJ1dGlvbi4gIEl0J3Mgbm93IGEgZ3Jvd24tdXAgcHJvZ3JhbQorYnkgaXRzZWxmLCBpdCBkZXNlcnZlcyB0byBiZSBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5LgorQ3RhZ3MgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHA6Ly9jdGFncy5zZi5uZXQvLgorCisKK0RvY3VtZW50YXRpb24gcmVvcmdhbml6ZWQJCQkqZG9jdW1lbnRhdGlvbi02KgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiByZW9yZ2FuaXplZCwgYW4gaXRlbSBtYXkgbm90IGJlIHdoZXJlIHlvdSBmb3VuZCBpdAoraW4gVmltIDUueC4KKy0gVGhlIHVzZXIgbWFudWFsIHdhcyBhZGRlZCwgc29tZSBpdGVtcyBoYXZlIGJlZW4gbW92ZWQgdG8gaXQgZnJvbSB0aGUKKyAgcmVmZXJlbmNlIG1hbnVhbC4KKy0gVGhlIHF1aWNrIHJlZmVyZW5jZSBpcyBub3cgaW4gYSBzZXBhcmF0ZSBmaWxlIChzbyB0aGF0IGl0IGNhbiBiZSBwcmludGVkKS4KKworVGhlIGV4YW1wbGVzIGluIHRoZSBkb2N1bWVudGF0aW9uIHdlcmUgcHJldmlvdXNseSBtYXJrZWQgd2l0aCBhICI+IiBpbiB0aGUKK2ZpcnN0IGNvbHVtbi4gIFRoaXMgbWFkZSBpdCBkaWZmaWN1bHQgdG8gY29weS9wYXN0ZSB0aGVtLiAgVGhlcmUgaXMgbm93IGEKK3NpbmdsZSAiPiIgYmVmb3JlIHRoZSBleGFtcGxlIGFuZCBpdCBlbmRzIGF0IGEgIjwiIG9yIGEgbm9uLWJsYW5rIGluIHRoZSBmaXJzdAorY29sdW1uLiAgVGhpcyBhbHNvIGxvb2tzIGJldHRlciB3aXRob3V0IGhpZ2hsaWdodGluZy4KKworJ2hlbHBmaWxlJyBpcyBubyBsb25nZXIgdXNlZCB0byBmaW5kIHRoZSBoZWxwIHRhZ3MgZmlsZS4gIFRoaXMgYWxsb3dzIGEgdXNlcgordG8gYWRkIGl0cyBvd24gaGVscCBmaWxlcyAoZS5nLiwgZm9yIHBsdWdpbnMpLgorCisKK01vZGVsZXNzIHNlbGVjdGlvbiBhbmQgY2xpcGJvYXJkCQkqbW9kZWxlc3MtYW5kLWNsaXBib2FyZCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtb2RlbGVzcyBzZWxlY3Rpb24gaXMgdXNlZCB0byBzZWxlY3QgdGV4dCB3aGVuIFZpc3VhbCBtb2RlIGNhbid0IGJlIHVzZWQsCitmb3IgZXhhbXBsZSB3aGVuIGVkaXRpbmcgdGhlIGNvbW1hbmQgbGluZSBvciBhdCB0aGUgbW9yZSBwcm9tcHQuCitJbiBWaW0gNS54IHRoZSBtb2RlbGVzcyBzZWxlY3Rpb24gd2FzIGFsd2F5cyB1c2VkLiAgT24gTVMtV2luZG93cyB0aGlzIGNhdXNlZAordGhlIGNsaXBib2FyZCB0byBiZSBvdmVyd3JpdHRlbiwgd2l0aCBubyB3YXkgdG8gYXZvaWQgdGhhdC4gIFRoZSBtb2RlbGVzcworc2VsZWN0aW9uIG5vdyBvYmV5cyB0aGUgJ2EnIGFuZCAnQScgZmxhZ3MgaW4gJ2d1aW9wdGlvbnMnIGFuZCAiYXV0b3NlbGVjdCIgYW5kCisiYXV0b3NlbGVjdG1sIiBpbiAnY2xpcGJvYXJkJy4gIEJ5IGRlZmF1bHQgdGhlcmUgaXMgbm8gYXV0b21hdGljIGNvcHkgb24KK01TLVdpbmRvd3MuICBVc2UgdGhlIHxjX0NUUkwtWXwgY29tbWFuZCB0byBtYW51YWxseSBjb3B5IHRoZSBzZWxlY3Rpb24uCisKK1RvIGdldCB0aGUgb2xkIGJlaGF2aW9yIGJhY2ssIGRvIHRoaXM6ID4KKworCTpzZXQgY2xpcGJvYXJkXj1hdXRvc2VsZWN0bWwgZ3Vpb3B0aW9ucys9QQorCisKK1NtYWxsIGluY29tcGF0aWJpbGl0aWVzCQkJCSppbmNvbXAtc21hbGwtNioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKydiYWNrdXBkaXInLCAnY2RwYXRoJywgJ2RpcmVjdG9yeScsICdlcXVhbHByZycsICdlcnJvcmZpbGUnLCAnZm9ybWF0cHJnJywKKydncmVwcHJnJywgJ2hlbHBmaWxlJywgJ21ha2VlZicsICdtYWtlcHJnJywgJ2tleXdvcmRwcmcnLCAnY3Njb3BlcHJnJywKKyd2aW1pbmZvJyBhbmQgJ3J1bnRpbWVwYXRoJyBjYW4gbm8gbG9uZ2VyIGJlIHNldCBmcm9tIGEgbW9kZWxpbmUsIGZvciBiZXR0ZXIKK3NlY3VyaXR5LgorCitSZW1vdmVkICdfJyBmcm9tIHRoZSAnYnJlYWthdCcgZGVmYXVsdDogSXQncyBjb21tb25seSB1c2VkIGluIGtleXdvcmRzLgorCitUaGUgZGVmYXVsdCBmb3IgJ21vdXNlaGlkZScgaXMgb24sIGJlY2F1c2UgdGhpcyB3b3JrcyB3ZWxsIGZvciBtb3N0IHBlb3BsZS4KKworVGhlIEFtaWdhIGJpbmFyeSBpcyBub3cgYWx3YXlzIGNvbXBpbGVkIHdpdGggImJpZyIgZmVhdHVyZXMuICBUaGUgImJpZyIgYmluYXJ5CithcmNoaXZlIG5vIGxvbmdlciBleGlzdHMuCisKK1RoZSBpdGVtcyAiW1JPXSIsICJbK10iLCAiW2hlbHBdIiwgIltQcmV2aWV3XSIgYW5kICJbZmlsZXR5cGVdIiBpbgorJ3N0YXR1c2xpbmUnIG5vIGxvbmdlciBoYXZlIGEgbGVhZGluZyBzcGFjZS4KKworTm9uLVVuaXggc3lzdGVtczogV2hlbiBleHBhbmRpbmcgd2lsZGNhcmRzIGZvciB0aGUgVmltIGFyZ3VtZW50cywgZG9uJ3QgdXNlCisnc3VmZml4ZXMnLiAgSXQgbm93IHdvcmtzIGFzIGlmIHRoZSBzaGVsbCBoYWQgZXhwYW5kZWQgdGhlIGFyZ3VtZW50cy4KKworVGhlICdsaXNwJywgJ3NtYXJ0aW5kZW50JyBhbmQgJ2NpbmRlbnQnIG9wdGlvbnMgYXJlIG5vdCBzd2l0Y2hlZCBvZmYgd2hlbgorJ3Bhc3RlJyBpcyBzZXQuICBUaGUgYXV0by1pbmRlbnRpbmcgaXMgZGlzYWJsZWQgd2hlbiAncGFzdGUnIGlzIHNldCwgYnV0CittYW51YWwgaW5kZW50aW5nIHdpdGggIj0iIHN0aWxsIHdvcmtzLgorCitXaGVuIGZvcm1hdHRpbmcgd2l0aCAiPSIgdXNlcyAnY2luZGVudCcgb3IgJ2luZGVudGV4cHInIGluZGVudGluZywgYW5kIHRoZXJlCitpcyBubyBjaGFuZ2UgaW4gaW5kZW50LCB0aGlzIGlzIG5vdCBjb3VudGVkIGFzIGEgY2hhbmdlICgnbW9kaWZpZWQnIGlzbid0IHNldAorYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gdW5kbykuCisKK1JlcG9ydCAnbW9kaWZpZWQnIGFzIGNoYW5nZWQgd2hlbiAnZmlsZWVuY29kaW5nJyBvciAnZmlsZWZvcm1hdCcgd2FzIHNldC4KK1RodXMgaXQgcmVmbGVjdHMgdGhlIHBvc3NpYmlsaXR5IHRvIGFiYW5kb24gdGhlIGJ1ZmZlciB3aXRob3V0IGxvc2luZyBjaGFuZ2VzLgorCitUaGUgIlNhdmUgQXMiIG1lbnUgZW50cnkgbm93IGVkaXRzIHRoZSBzYXZlZCBmaWxlLiAgTW9zdCBwZW9wbGUgZXhwZWN0IGl0IHRvCit3b3JrIGxpa2UgdGhpcy4KKworQSBidWZmZXIgZm9yIGEgZGlyZWN0b3J5IGlzIG5vIGxvbmdlciBhZGRlZCB0byB0aGUgQnVmZmVycyBtZW51LgorCitSZW5hbWVkIDxSZXR1cm4+IHRvIDxFbnRlcj4sIHNpbmNlIHRoYXQncyB3aGF0IGl0J3MgY2FsbGVkIG9uIG1vc3Qga2V5Ym9hcmRzLgorVGh1cyBpdCdzIG5vdyB0aGUgaGl0LWVudGVyIHByb21wdCBpbnN0ZWFkIG9mIHRoZSBoaXQtcmV0dXJuIHByb21wdC4KK0NhbiBtYXAgPEVudGVyPiBqdXN0IGxpa2UgPENSPiBvciA8UmV0dXJuPi4KKworVGhlIGRlZmF1bHQgZm9yIHRoZSAndmltaW5mbycgb3B0aW9uIGlzIG5vdyAnMjAsIjUwLGggd2hlbiAnY29tcGF0aWJsZScgaXNuJ3QKK3NldC4gIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0byB1c2UgaXQsIGluY2x1ZGluZyBiZWdpbm5lcnMsIGJ1dCBpdCByZXF1aXJlZAorc2V0dGluZyB0aGUgb3B0aW9uLCB3aGljaCBpc24ndCB0aGF0IGVhc3kuCisKK0FmdGVyIHVzaW5nICI6Y29sZGVyIiB0aGUgbmV3ZXIgZXJyb3IgbGlzdHMgYXJlIG92ZXJ3cml0dGVuLiAgVGhpcyBtYWtlcyBpdAorcG9zc2libGUgdG8gdXNlICI6Z3JlcCIgdG8gYnJvd3NlIGluIGEgdHJlZS1saWtlIHdheS4gIE11c3QgdXNlICI6Y25ld2VyIDk5IgordG8gZ2V0IHRoZSBvbGQgYmVoYXZpb3IuCisKK1RoZSBwYXR0ZXJucyBpbiAnZXJyb3Jmb3JtYXQnIHdvdWxkIHNvbWV0aW1lcyBpZ25vcmUgY2FzZSAoTVMtV2luZG93cykgYW5kCitzb21ldGltZXMgbm90IChVbml4KS4gIE5vdyBjYXNlIGlzIGFsd2F5cyBpZ25vcmVkLiAgQWRkICJcQyIgdG8gdGhlIHBhdHRlcm4gdG8KK21hdGNoIGNhc2UuCisKK1RoZSAxNiBiaXQgTVMtRE9TIHZlcnNpb24gaXMgbm93IGNvbXBpbGVkIHdpdGhvdXQgdGhlICtsaXN0Y21kcyBmZWF0dXJlCisoYnVmZmVyIGxpc3QgbWFuaXB1bGF0aW9uIGNvbW1hbmRzKS4gIFRoZXkgYXJlIG5vdCBvZnRlbiBuZWVkZWQgYW5kIHRoaXMKK2V4ZWN1dGFibGUgbmVlZHMgdG8gYmUgc21hbGxlci4KKworJ3Nlc3Npb25vcHRpb25zJyBub3cgaW5jbHVkZXMgImN1cmRpciIgYnkgZGVmYXVsdC4gIFRoaXMgbWVhbnMgdGhhdCByZXN0b3JpbmcKK2Egc2Vzc2lvbiB3aWxsIHJlc3VsdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYmVpbmcgcmVzdG9yZWQsIGluc3RlYWQgb2YKK2dvaW5nIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHNlc3Npb24gZmlsZSBpcyBsb2NhdGVkLgorCitBIHNlc3Npb24gZGVsZXRlZCBhbGwgYnVmZmVycywgZGVsZXRpbmcgYWxsIG1hcmtzLiAgTm93IGtlZXAgdGhlIGJ1ZmZlciBsaXN0LAoraXQgc2hvdWxkbid0IGh1cnQgZm9yIHNvbWUgZXhpc3RpbmcgYnVmZmVycyB0byByZW1haW4gcHJlc2VudC4KK1doZW4gdGhlIGFyZ3VtZW50IGxpc3QgaXMgZW1wdHkgIjphcmdkZWwgKiIgY2F1c2VkIGFuIGVycm9yIG1lc3NhZ2UuCisKK05vIGxvbmdlciBwdXQgdGhlIHNlYXJjaCBwYXR0ZXJuIGZyb20gYSB0YWcganVtcCBpbiB0aGUgaGlzdG9yeS4KKworVXNlICJTcGVjaWFsS2V5IiBoaWdobGlnaHRpbmcgZm9yIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiAiTm9uVGV4dCIuCitUaGUgaWRlYSBpcyB0aGF0IHVucHJpbnRhYmxlIHRleHQgb3IgYW55IHRleHQgdGhhdCdzIGRpc3BsYXllZCBkaWZmZXJlbnRseQorZnJvbSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBpcyB1c2luZyAiU3BlY2lhbEtleSIsIGFuZCAiTm9uVGV4dCIgaXMgdXNlZAorZm9yIHRleHQgdGhhdCBkb2Vzbid0IHJlYWxseSBleGlzdCBpbiB0aGUgZmlsZS4KKworTW90aWYgbm93IHVzZXMgdGhlIHN5c3RlbSBkZWZhdWx0IGNvbG9ycyBmb3IgdGhlIG1lbnUgYW5kIHNjcm9sbGJhci4gIFVzZWQgdG8KK2JlIGdyZXkuICBJdCdzIHN0aWxsIHBvc3NpYmxlIHRvIHNldCB0aGUgY29sb3JzIHdpdGggIjpoaWdobGlnaHQiIGNvbW1hbmRzIGFuZAorcmVzb3VyY2VzLgorCitGb3JtYXR0aW5nIHRleHQgd2l0aCAiZ3EiIGJyZWFrcyBhIHBhcmFncmFwaCBhdCBhIG5vbi1lbXB0eSBibGFuayBsaW5lLgorUHJldmlvdXNseSB0aGUgbGluZSB3b3VsZCBiZSByZW1vdmVkLCB3aGljaCB3YXNuJ3QgdmVyeSB1c2VmdWwuCisKKyI6bm9ybWFsIiBkb2VzIG5vIGxvbmdlciBoYW5nIHdoZW4gdGhlIGFyZ3VtZW50IGVuZHMgaW4gaGFsZiBhIGNvbW1hbmQuCitQcmV2aW91c2x5IFZpbSB3b3VsZCB3YWl0IGZvciBtb3JlIGNoYXJhY3RlcnMgdG8gYmUgdHlwZWQsIHdpdGhvdXQgdXBkYXRpbmcKK3RoZSBzY3JlZW4uICBOb3cgaXQgcHJldGVuZHMgYW4gPEVzYz4gd2FzIHR5cGVkLgorCitCaXRtYXBzIGZvciB0aGUgdG9vbGJhciBhcmUgbm8gbG9uZ2VyIHNlYXJjaGVkIGZvciBpbiAiJFZJTS9iaXRtYXBzIiBidXQgaW4KK3RoZSAiYml0bWFwcyIgZGlyZWN0b3JpZXMgaW4gJ3J1bnRpbWVwYXRoJy4KKworTm93IHVzZSB0aGUgQ21kbGluZS1tb2RlIG1lbnVzIGZvciB0aGUgaGl0LWVudGVyIHByb21wdCBpbnN0ZWFkIG9mIHRoZSBOb3JtYWwKK21vZGUgbWVudXMuICBUaGlzIGdlbmVyYWxseSB3b3JrcyBiZXR0ZXIgYW5kIGFsbG93cyB1c2luZyB0aGUgIkNvcHkiIG1lbnUgdG8KK3Byb2R1Y2UgQ1RSTC1ZIHRvIGNvcHkgdGhlIG1vZGVsZXNzIHNlbGVjdGlvbi4KKworTW92ZWQgdGhlIGZvbnQgc2VsZWN0aW9uIGZyb20gdGhlIFdpbmRvdyB0byB0aGUgRWRpdCBtZW51LCB0b2dldGhlciB3aXRoIHRoZQorb3RoZXIgc2V0dGluZ3MuCisKK1RoZSBkZWZhdWx0IHZhbHVlcyBmb3IgJ2lzZm5hbWUnIGluY2x1ZGUgbW9yZSBjaGFyYWN0ZXJzIHRvIG1ha2UgImdmIiB3b3JrCitiZXR0ZXIuCisKK0NoYW5nZWQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBkb2N1bWVudGF0aW9uIHRvIHRoZSBPcGVuIFB1YmxpY2F0aW9uIExpY2Vuc2UuCitUaGlzIHNlZW1lZCBmYWlyLCBjb25zaWRlcmluZyB0aGUgaW5jbHVzaW9uIG9mIHBhcnRzIG9mIHRoZSBWaW0gYm9vaywgd2hpY2ggaXMKK2Fsc28gcHVibGlzaGVkIHVuZGVyIHRoZSBPUEwuICBUaGUgZG93bnNpZGUgaXMgdGhhdCB3ZSBjYW4ndCBmb3JjZSBzb21lb25lIHdobword291bGQgc2VsbCBjb3BpZXMgb2YgdGhlIG1hbnVhbCB0byBjb250cmlidXRlIHRvIFVnYW5kYS4KKworQWZ0ZXIgICJheXkgIGRvbid0IGxldCAgIiJ5eSAgb3IgIDpsZXQgQCIgPSB2YWwgIG92ZXJ3cml0ZSB0aGUgImEgcmVnaXN0ZXIuCitVc2UgdGhlIHVubmFtZWQgcmVnaXN0ZXIgaW5zdGVhZC4KKworTVNET1M6IEEgcGF0dGVybiAiKi4qIiBwcmV2aW91c2x5IGFsc28gbWF0Y2hlZCBhIGZpbGUgbmFtZSB3aXRob3V0IGEgZG90LgorVGhpcyB3YXMgaW5jb25zaXN0ZW50IHdpdGggb3RoZXIgdmVyc2lvbnMuCisKK0luIEluc2VydCBtb2RlLCBDVFJMLU8gQ1RSTC1cIENUUkwtTiB7Y21kfSByZW1haW5zIGluIE5vcm1hbCBtb2RlLiAgUHJldmlvdXNseQoraXQgd291bGQgZ28gYmFjayB0byBJbnNlcnQgbW9kZSwgdGh1cyBjb25mdXNpbmcgdGhlIG1lYW5pbmcgb2YgQ1RSTC1cIENUUkwtTiwKK3doaWNoIGlzIHN1cHBvc2VkIHRvIHRha2UgdXMgdG8gTm9ybWFsIG1vZGUgKGVzcGVjaWFsbHkgaW4gIjphbWVudSIpLgorCitBbGxvdyB1c2luZyAiOiIgY29tbWFuZHMgYWZ0ZXIgYW4gb3BlcmF0b3IuICBDb3VsZCBiZSB1c2VkIHRvIGltcGxlbWVudCBhIG5ldworbW92ZW1lbnQgY29tbWFuZC4gIFRodXMgaXQgbm8gbG9uZ2VyIGFib3J0cyBhIHBlbmRpbmcgb3BlcmF0b3IuCisKK0ZvciB0aGUgQW1pZ2EgdGhlICItZCB7ZGV2aWNlfSIgYXJndW1lbnQgd2FzIHBvc3NpYmxlLiAgV2hlbiBjb21waWxlZCB3aXRoIHRoZQorZGlmZiBmZWF0dXJlLCB0aGlzIG5vIGxvbmdlciB3b3Jrcy4gIFVzZSAiLWRldiB7ZGV2aWNlfSIgaW5zdGVhZC4gfC1kZXZ8CisKK01hZGUgdGhlIGRlZmF1bHQgbWFwcGluZ3MgZm9yIDxTLUluc2VydD4gaW4gSW5zZXJ0IG1vZGUgaW5zZXJ0IHRoZSB0ZXh0CitsaXRlcmFsbHksIGF2b2lkcyB0aGF0IHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIEJTIGNhdXNlIHNpZGUgZWZmZWN0cy4KKworVXNpbmcgIjpjb25maXJtIiBhcHBsaWVkIHRvIHRoZSByZXN0IG9mIHRoZSBsaW5lLiAgTm93IGl0IGFwcGxpZXMgb25seSB0byB0aGUKK2NvbW1hbmQgcmlnaHQgYWZ0ZXIgaXQuICBUaHVzICI6Y29uZmlybSBpZiB4IHwgZWRpdCB8IGVuZGlmIiBubyBsb25nZXIgd29ya3MsCit1c2UgIjppZiB4IHwgY29uZmlybSBlZGl0IHwgZW5kaWYiLiAgVGhpcyB3YXMgdGhlIG9yaWdpbmFsIGludGVudGlvbiwgdGhhdCBpdAord29ya2VkIGRpZmZlcmVudGx5IHdhcyBhIGJ1Zy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitORVcgRkVBVFVSRVMJCQkJCQkqbmV3LTYqCisKK0ZvbGRpbmcJCQkJCQkJKm5ldy1mb2xkaW5nKgorLS0tLS0tLQorCitWaW0gY2FuIG5vdyBkaXNwbGF5IGEgYnVmZmVyIHdpdGggdGV4dCBmb2xkZWQuICBUaGlzIGFsbG93cyBvdmVydmlld2luZyB0aGUKK3N0cnVjdHVyZSBvZiBhIGZpbGUgcXVpY2tseS4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8geWFuaywgZGVsZXRlIGFuZCBwdXQKK2ZvbGRlZCB0ZXh0LCBmb3IgZXhhbXBsZSB0byBtb3ZlIGEgZnVuY3Rpb24gdG8gYW5vdGhlciBwb3NpdGlvbi4KKworVGhlcmUgaXMgYSB3aG9sZSBidW5jaCBvZiBuZXcgY29tbWFuZHMgYW5kIG9wdGlvbnMgcmVsYXRlZCB0byBmb2xkaW5nLgorU2VlIHxmb2xkaW5nfC4KKworCitWZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MJCQkJKm5ldy12ZXJ0c3BsaXQqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2luZG93cyBjYW4gYWxzbyBiZSBzcGxpdCB2ZXJ0aWNhbGx5LiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYXZlIHdpbmRvd3MKK3NpZGUgYnkgc2lkZS4gIE9uZSBuaWNlIHVzZSBmb3IgdGhpcyBpcyB0byBjb21wYXJlIHR3byBzaW1pbGFyIGZpbGVzIChzZWUKK3xuZXctZGlmZi1tb2RlfCkuICBUaGUgJ3Njcm9sbGJpbmQnIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzeW5jaHJvbml6ZQorc2Nyb2xsaW5nLgorCitBIHZlcnRpY2FsIHNwbGl0IGNhbiBiZSBjcmVhdGVkIHdpdGggdGhlIGNvbW1hbmRzOgorCTp2c3BsaXQJICBvciAgQ1RSTC1XIHYgIG9yIENUUkwtVyBDVFJMLVYJfDp2c3BsaXR8CisJOnZuZXcJCQkJCQl8OnZuZXd8CisJOnZlcnRpY2FsIHtjbWR9CQkJCQl8OnZlcnRpY2FsfAorVGhlIGxhc3Qgb25lIGlzIGEgbW9kaWZpZXIsIHdoaWNoIGhhcyBhIG1lYW5pbmcgZm9yIGFueSBjb21tYW5kIHRoYXQgc3BsaXRzIGEKK3dpbmRvdy4gIEZvciBleGFtcGxlOiA+CisJOnZlcnRpY2FsIHN0YWcgbWFpbgorV2lsbCB2ZXJ0aWNhbGx5IHNwbGl0IHRoZSB3aW5kb3cgYW5kIGp1bXAgdG8gdGhlIHRhZyAibWFpbiIgaW4gdGhlIG5ldyB3aW5kb3cuCisKK01vdmluZyBmcm9tIHdpbmRvdyB0byB3aW5kb3cgaG9yaXpvbnRhbGx5IGNhbiBiZSBkb25lIHdpdGggdGhlIHxDVFJMLVdfaHwgYW5kCit8Q1RSTC1XX2x8IGNvbW1hbmRzLiAgVGhlIHxDVFJMLVdfa3wgYW5kIHxDVFJMLVdfanwgY29tbWFuZHMgaGF2ZSBiZWVuIGNoYW5nZWQKK3RvIGp1bXAgdG8gdGhlIHdpbmRvdyBhYm92ZSBvciBiZWxvdyB0aGUgY3Vyc29yIHBvc2l0aW9uLgorCitUaGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgc3BsaXRzIGNhbiBiZSBtaXhlZCBhcyB5b3UgbGlrZS4gIFJlc2l6aW5nIHdpbmRvd3MKK2lzIGVhc3kgd2hlbiB1c2luZyB0aGUgbW91c2UsIGp1c3QgcG9zaXRpb24gdGhlIHBvaW50ZXIgb24gYSBzdGF0dXMgbGluZSBvcgordmVydGljYWwgc2VwYXJhdG9yIGFuZCBkcmFnIGl0LiAgSW4gdGhlIEdVSSBhIHNwZWNpYWwgbW91c2UgcG9pbnRlciBzaGFwZQoraW5kaWNhdGVzIHdoZXJlIHlvdSBjYW4gZHJhZyBhIHN0YXR1cyBvciBzZXBhcmF0b3IgbGluZS4KKworVG8gcmVzaXplIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cyB1c2UgdGhlIHxDVFJMLVdfPHwgYW5kIHxDVFJMLVdfPnwgY29tbWFuZHMuCitUbyBtYWtlIGEgd2luZG93IHRoZSBtYXhpbXVtIHdpZHRoIHVzZSB0aGUgQ1RSTC1XIHwgY29tbWFuZCB8Q1RSTC1XX2JhcnwuCisKK1RvIGZvcmNlIGEgbmV3IHdpbmRvdyB0byB1c2UgdGhlIGZ1bGwgd2lkdGggb3IgaGVpZ2h0IG9mIHRoZSBWaW0gd2luZG93LAordGhlc2UgdHdvIG1vZGlmaWVycyBhcmUgYXZhaWxhYmxlOgorCTp0b3BsZWZ0IHtjbWR9CQlOZXcgd2luZG93IGFwcGVhcnMgYXQgdGhlIHRvcCB3aXRoIGZ1bGwKKwkJCQl3aWR0aCBvciBhdCB0aGUgbGVmdCB3aXRoIGZ1bGwgaGVpZ2h0LgorCTpib3RyaWdodCB7Y21kfQkJTmV3IHdpbmRvdyBhcHBlYXJzIGF0IHRoZSBib3R0b20gd2l0aCBmdWxsCisJCQkJd2lkdGggb3IgYXQgdGhlIHJpZ2h0IHdpdGggZnVsbCBoZWlnaHQuCitUaGlzIGNhbiBiZSBjb21iaW5lZCB3aXRoICI6dmVydGljYWwiIHRvIGZvcmNlIGEgdmVydGljYWwgc3BsaXQ6ID4KKwk6dmVydCBib3QgZHNwbGl0IERFQlVHCitUaGlzIHdpbGwgb3BlbiBhIHdpbmRvdyBhdCB0aGUgZmFyIHJpZ2h0LCBvY2N1cHlpbmcgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSBWaW0KK3dpbmRvdywgd2l0aCB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBkZWZpbml0aW9uIG9mICJERUJVRyIuCitUaGUgaGVscCB3aW5kb3cgaXMgb3BlbmVkIGF0IHRoZSB0b3AsIGxpa2UgIjp0b3BsZWZ0IiB3YXMgdXNlZCwgaWYgdGhlIGN1cnJlbnQKK3dpbmRvdyBpcyBmZXdlciB0aGFuIDgwIGNoYXJhY3RlcnMgd2lkZS4KKworQSBmZXcgb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHByZWZlcmVuY2VzIGZvciB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MuCitUaGV5IHdvcmsgc2ltaWxhciB0byB0aGVpciBleGlzdGluZyBob3Jpem9udGFsIGVxdWl2YWxlbnRzOgorCWhvcml6b250YWwJdmVydGljYWwgfgorCSdzcGxpdGJlbG93Jwknc3BsaXRyaWdodCcKKwknd2luaGVpZ2h0Jwknd2lud2lkdGgnCisJJ3dpbm1pbmhlaWdodCcJJ3dpbm1pbndpZHRoJworSXQncyBwb3NzaWJsZSB0byBzZXQgJ3dpbm1pbndpZHRoJyB0byB6ZXJvLCBzbyB0aGF0IHRlbXBvcmFyaWx5IHVudXNlZCB3aW5kb3dzCitoYXJkbHkgdGFrZSB1cCBzcGFjZSB3aXRob3V0IGNsb3NpbmcgdGhlbS4KKworVGhlIG5ldyAnZWFkaXJlY3Rpb24nIG9wdGlvbiB0ZWxscyB3aGVyZSAnZXF1YWxhbHdheXMnIGFwcGxpZXM6CisJOnNldCBlYWRpcmVjdGlvbj1ib3RoCQlib3RoIGRpcmVjdGlvbnMKKwk6c2V0IGVhZGlyZWN0aW9uPXZlcgkJZXF1YWxpemUgd2luZG93IGhlaWdodHMKKwk6c2V0IGVhZGlyZWN0aW9uPWhvcgkJZXF1YWxpemUgd2luZG93cyB3aWR0aHMKK1RoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgY2hhbmdpbmcgd2luZG93IHNpemVzIHdoZW4geW91IHdhbnQgdG8ga2VlcCB0aGVtLgorCitTaW5jZSB3aW5kb3dzIGNhbiBiZWNvbWUgcXVpdGUgbmFycm93IHdpdGggdmVydGljYWwgc3BsaXRzLCB0ZXh0IGxpbmVzIHdpbGwKK29mdGVuIG5vdCBmaXQuICBUaGUgJ3NpZGVzY3JvbGxvZmYnIGhhcyBiZWVuIGFkZGVkIHRvIGtlZXAgc29tZSBjb250ZXh0IGxlZnQKK2FuZCByaWdodCBvZiB0aGUgY3Vyc29yLiAgVGhlICdsaXN0Y2hhcnMnIG9wdGlvbiBoYXMgYmVlbiBleHRlbmRlZCB3aXRoIHRoZQorInByZWNlZGVzIiBpdGVtLCB0byBzaG93IGEgIjwiIGZvciBleGFtcGxlLCB3aGVuIHRoZXJlIGlzIHRleHQgbGVmdCBvZmYgdGhlCitzY3JlZW4uIChVdHotVXdlIEhhdXMpCisKKyItTyIgY29tbWFuZCBsaW5lIGFyZ3VtZW50OiBMaWtlICItbyIgYnV0IHNwbGl0IHdpbmRvd3MgdmVydGljYWxseS4gKFNjb3R0CitVcmJhbikKKworQWRkZWQgY29tbWFuZHMgdG8gbW92ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlIHZlcnkgdG9wIChDVFJMLVcgSyksIGJvdHRvbQorKENUUkwtVyBKKSwgbGVmdCAoQ1RSTC1XIEgpIGFuZCByaWdodCAoQ1RSTC1XIEwpLiAgSW4gdGhlIG5ldyBwb3NpdGlvbiB0aGUKK3dpbmRvdyB1c2VzIHRoZSBmdWxsIHdpZHRoL2hlaWdodCBvZiB0aGUgc2NyZWVuLgorCitXaGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgc3RhdHVzIGxpbmUgZm9yIGJvdGggdGhlIGZpbGUgbmFtZSBhbmQKK3RoZSBydWxlciwgdXNlIHVwIHRvIGhhbGYgdGhlIHdpZHRoIGZvciB0aGUgcnVsZXIuICBVc2VmdWwgZm9yIG5hcnJvdyB3aW5kb3dzLgorCisKK0RpZmYgbW9kZQkJCQkJCSpuZXctZGlmZi1tb2RlKgorLS0tLS0tLS0tCisKK0luIGRpZmYgbW9kZSBWaW0gc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvLCB0aHJlZSBvciBmb3VyIGZpbGVzLgorRm9sZGluZyBpcyB1c2VkIHRvIGhpZGUgdGhlIHBhcnRzIG9mIHRoZSBmaWxlIHRoYXQgYXJlIGVxdWFsLgorSGlnaGxpZ2h0aW5nIGlzIHVzZWQgdG8gc2hvdyBkZWxldGVkIGFuZCBjaGFuZ2VkIGxpbmVzLgorU2VlIHxkaWZmLW1vZGV8LgorCitBbiBlYXN5IHdheSB0byBzdGFydCBpbiBkaWZmIG1vZGUgaXMgdG8gc3RhcnQgVmltIGFzICJ2aW1kaWZmIGZpbGUxIGZpbGUyIi4KK0FkZGVkIHRoZSB2aW1kaWZmIG1hbnBhZ2UuCisKK0luIGEgcnVubmluZyBWaW0gdGhlIHw6ZGlmZnNwbGl0fCBjb21tYW5kIHN0YXJ0cyBkaWZmIG1vZGUgZm9yIHRoZSBjdXJyZW50CitmaWxlIGFuZCBhbm90aGVyIGZpbGUuICBUaGUgfDpkaWZmcGF0Y2h8IGNvbW1hbmQgc3RhcnRzIGRpZmYgbW9kZSB1c2luZyB0aGUKK2N1cnJlbnQgZmlsZSBhbmQgYSBwYXRjaCBmaWxlLiAgVGhlIHw6ZGlmZnRoaXN8IGNvbW1hbmQgc3RhcnRzIGRpZmYgbW9kZSBmb3IKK3RoZSBjdXJyZW50IHdpbmRvdy4KKworRGlmZmVyZW5jZXMgY2FuIGJlIHJlbW92ZWQgd2l0aCB0aGUgfDpkaWZmZ2V0fCBhbmQgfDpkaWZmcHV0fCBjb21tYW5kcy4KKworLSBUaGUgJ2RpZmYnIG9wdGlvbiBzd2l0Y2hlcyBkaWZmIG1vZGUgb24gaW4gYSB3aW5kb3cuCistIFRoZSB8OmRpZmZ1cGRhdGV8IGNvbW1hbmQgcmVmcmVzaGVzIHRoZSBkaWZmcy4KKy0gVGhlICdkaWZmb3B0JyBvcHRpb24gY2hhbmdlcyBob3cgZGlmZnMgYXJlIGRpc3BsYXllZC4KKy0gVGhlICdkaWZmZXhwcicgb3B0aW9uIGNhbiBiZSBzZXQgaG93IGEgZGlmZiBpcyB0byBiZSBjcmVhdGVkLgorLSBUaGUgJ3BhdGNoZXhwcicgb3B0aW9uIGNhbiBiZSBzZXQgaG93IHBhdGNoIGlzIGFwcGxpZWQgdG8gYSBmaWxlLgorLSBBZGRlZCB0aGUgImRpZmYiIGZvbGRpbmcgbWV0aG9kLiAgV2hlbiBvcGVuaW5nIGEgd2luZG93IGZvciBkaWZmLW1vZGUsIHNldAorICAnZm9sZGxldmVsJyB0byB6ZXJvIGFuZCAnZm9sZGVuYWJsZScgb24sIHRvIGNsb3NlIHRoZSBmb2xkcy4KKy0gQWRkZWQgdGhlIERpZmZBZGQsIERpZmZDaGFuZ2UsIERpZmZEZWxldGUgYW5kIERpZmZUZXh0IGhpZ2hsaWdodCBncm91cHMgdG8KKyAgc3BlY2lmeSB0aGUgaGlnaGxpZ2h0aW5nIGZvciBkaWZmZXJlbmNlcy4gIFRoZSBkZWZhdWx0cyBhcmUgdWdseS4uLgorLSBVbml4OiBtYWtlIGEgdmltZGlmZiBzeW1ib2xpYyBsaW5rIGZvciAibWFrZSBpbnN0YWxsIi4KKy0gUmVtb3ZlZCB0aGUgbm93IG9ic29sZXRlICJ2aW1kaWZmLnZpbSIgc2NyaXB0IGZyb20gdGhlIGRpc3RyaWJ1dGlvbi4KKy0gQWRkZWQgdGhlICJbYyIgYW5kICJdYyIgY29tbWFuZHMgdG8gbW92ZSB0byB0aGUgbmV4dC9wcmV2aW91cyBjaGFuZ2UgaW4gZGlmZgorICBtb2RlLgorCisKK0Vhc3kgVmltOiBjbGljay1hbmQtdHlwZQkJCQkqbmV3LWV2aW0qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZVZpbSBzdGFuZHMgZm9yICJFYXN5IFZpbSIuICBUaGlzIGlzIGEgc2VwYXJhdGUgcHJvZ3JhbSwgYnV0IGNhbiBhbHNvIGJlCitzdGFydGVkIGFzICJ2aW0gLXkiLgorCitUaGlzIHN0YXJ0cyBWaW0gd2l0aCAnaW5zZXJ0bW9kZScgc2V0IHRvIGFsbG93IGNsaWNrLWFuZC10eXBlIGVkaXRpbmcuICBUaGUKKyRWSU1SVU5USU1FL2V2aW0udmltIHNjcmlwdCBpcyB1c2VkIHRvIGFkZCBtYXBwaW5ncyBhbmQgc2V0IG9wdGlvbnMgdG8gYmUgYWJsZQordG8gZG8gbW9zdCB0aGluZ3MgbGlrZSBOb3RlcGFkLiAgVGhpcyBpcyBvbmx5IGZvciBwZW9wbGUgd2hvIGNhbid0IHN0YW5kIHR3bworbW9kZXMuCisKK2VWaWV3IGRvZXMgdGhlIHNhbWUgYnV0IGluIHJlYWRvbmx5IG1vZGUuCisKK0luIHRoZSBHVUkgYSBDVFJMLUMgbm93IG9ubHkgaW50ZXJydXB0cyB3aGVuIGJ1c3kgd2l0aCBzb21ldGhpbmcsIG5vdCB3aGVuCit3YWl0aW5nIGZvciBhIGNoYXJhY3Rlci4gIEFsbG93cyB1c2luZyBDVFJMLUMgdG8gY29weSB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQuCisKKworVXNlciBtYW51YWwJCQkJCQkqbmV3LXVzZXItbWFudWFsKgorLS0tLS0tLS0tLS0KKworVGhlIHVzZXIgbWFudWFsIGhhcyBiZWVuIGFkZGVkLiAgSXQgaXMgb3JnYW5pc2VkIGFyb3VuZCBlZGl0aW5nIHRhc2tzLiAgSXQKK3JlYWRzIGxpa2UgYSBib29rLCBmcm9tIHN0YXJ0IHRvIGVuZC4gIEl0IHNob3VsZCBhbGxvdyBiZWdpbm5lcnMgdG8gc3RhcnQKK2xlYXJuaW5nIFZpbS4gIEl0IGhlbHBzIGV2ZXJ5Ym9keSB0byBsZWFybiB1c2luZyB0aGUgbW9zdCB1c2VmdWwgVmltIGZlYXR1cmVzLgorSXQgaXMgbXVjaCBlYXNpZXIgdG8gcmVhZCB0aGFuIHRoZSByZWZlcmVuY2UgbWFudWFsLCBidXQgb21pdHMgZGV0YWlscy4gIFNlZQorfHVzZXItbWFudWFsfC4KKworVGhlIHVzZXIgbWFudWFsIGluY2x1ZGVzIHBhcnRzIG9mIHRoZSBWaW0gYm9vayBieSBTdGV2ZSBPdWFsbGluZSB8ZnJvbWJvb2t8LgorSXQgaXMgcHVibGlzaGVkIHVuZGVyIHRoZSBPUEwgfG1hbnVhbC1jb3B5cmlnaHR8LgorCitXaGVuIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgbm90IGVuYWJsZWQsIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBoZWxwIGZpbGUgd2hpY2gKK21hcmsgZXhhbXBsZXMgKCc+JyBhbmQgJzwnKSBhbmQgaGVhZGVyIGxpbmVzICgnficpIGFyZSByZXBsYWNlZCB3aXRoIGEgc3BhY2UuCisKK1doZW4gY2xvc2luZyB0aGUgaGVscCB3aW5kb3csIHRoZSB3aW5kb3cgbGF5b3V0IGlzIHJlc3RvcmVkIGZyb20gYmVmb3JlCitvcGVuaW5nIGl0LCBpZiB0aGUgd2luZG93IGxheW91dCBkaWRuJ3QgY2hhbmdlIHNpbmNlIHRoZW4uCitXaGVuIG9wZW5pbmcgdGhlIGhlbHAgd2luZG93LCBwdXQgaXQgYXQgdGhlIHRvcCBvZiB0aGUgVmltIHdpbmRvdyBpZiB0aGUKK2N1cnJlbnQgd2luZG93IGlzIGZld2VyIHRoYW4gODAgY2hhcmFjdGVycyBhbmQgbm90IGZ1bGwgd2lkdGguCisKKworRmxleGlibGUgaW5kZW50aW5nCQkJCQkqbmV3LWluZGVudC1mbGV4KgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F1dG9tYXRpYyBpbmRlbnRpbmcgaXMgbm93IHBvc3NpYmxlIGZvciBhbnkgbGFuZ3VhZ2UuICBJdCB3b3JrcyB3aXRoIGEgVmltCitzY3JpcHQsIHdoaWNoIG1ha2VzIGl0IHZlcnkgZmxleGlibGUgdG8gY29tcHV0ZSB0aGUgaW5kZW50LgorCitUaGUgIjpmaWxldHlwZSBpbmRlbnQgb24iIGNvbW1hbmQgZW5hYmxlcyB1c2luZyB0aGUgcHJvdmlkZWQgaW5kZW50IHNjcmlwdHMuCitUaGlzIGlzIGV4cGxhaW5lZCBpbiB0aGUgdXNlciBtYW51YWw6IHwzMC4zfC4KKworVGhlICdpbmRlbnRleHByJyBvcHRpb24gaXMgZXZhbHVhdGVkIHRvIGdldCB0aGUgaW5kZW50IGZvciBhIGxpbmUuICBUaGUKKydpbmRlbnRrZXlzJyBvcHRpb24gdGVsbHMgd2hlbiB0byB0cmlnZ2VyIHJlLWluZGVudGluZy4gIE5vcm1hbGx5IHRoZXNlCitvcHRpb25zIGFyZSBzZXQgZnJvbSBhbiBpbmRlbnQgc2NyaXB0LiAgTGlrZSBTeW50YXggZmlsZXMsIGluZGVudCBzY3JpcHRzIHdpbGwKK2JlIGNyZWF0ZWQgYW5kIG1haW50YWluZWQgYnkgbWFueSBwZW9wbGUuCisKKworRXh0ZW5kZWQgc2VhcmNoIHBhdHRlcm5zCQkJCSpuZXctc2VhcmNocGF0KgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byBtYXRjaCBtb3JlIHRoYW4gb25lIGxpbmUgd2l0aCBhIHBhdHRlcm4uIChwYXJ0bHkgYnkKK0xvaWMgR3JlbmllKQorTmV3IGl0ZW1zIGluIGEgc2VhcmNoIHBhdHRlcm4gZm9yIG11bHRpLWxpbmUgbWF0Y2hlczoKK1xuCQltYXRjaCBlbmQtb2YtbGluZSwgYWxzbyBpbiBbXQorXF9bXQkJbWF0Y2ggY2hhcmFjdGVycyBpbiByYW5nZSBhbmQgZW5kLW9mLWxpbmUKK1xfeAkJbWF0Y2ggY2hhcmFjdGVyIGNsYXNzIGFuZCBlbmQtb2YtbGluZQorXF8uCQltYXRjaCBhbnkgY2hhcmFjdGVyIG9yIGVuZC1vZi1saW5lCitcX14JCW1hdGNoIHN0YXJ0LW9mLWxpbmUsIGNhbiBiZSB1c2VkIGFueXdoZXJlIGluIHRoZSByZWdleHAKK1xfJAkJbWF0Y2ggZW5kLW9mLWxpbmUsIGNhbiBiZSB1c2VkIGFueXdoZXJlIGluIHRoZSByZWdleHAKKworVmFyaW91cyBvdGhlciBuZXcgaXRlbXMgaW4gc2VhcmNoIHBhdHRlcm5zOgorXGMJCWlnbm9yZSBjYXNlIGZvciB0aGUgd2hvbGUgcGF0dGVybgorXEMJCW1hdGNoIGNhc2UgZm9yIHRoZSB3aG9sZSBwYXR0ZXJuCitcbQkJbWFnaWMgb24gZm9yIHRoZSBmb2xsb3dpbmcKK1xNCQltYWdpYyBvZmYgZm9yIHRoZSBmb2xsb3dpbmcKK1x2CQltYWtlIGZvbGxvd2luZyBjaGFyYWN0ZXJzICJ2ZXJ5IG1hZ2ljIgorXFYJCW1ha2UgZm9sbG93aW5nIGNoYXJhY3RlcnMgInZlcnkgbm9tYWdpYyIKKworXEAhCQlkb24ndCBtYXRjaCBhdG9tIGJlZm9yZSB0aGlzLgorCQlFeGFtcGxlOiAiZm9vXChiYXJcKVxAISIgbWF0Y2hlcyAiZm9vICIgYnV0IG5vdCAiZm9vYmFyIi4KK1xAPQkJbWF0Y2ggYXRvbSwgcmVzdWx0aW5nIGluICB6ZXJvLXdpZHRoIG1hdGNoCisJCUV4YW1wbGU6ICJmb29cKGJhclwpXEA9IiBtYXRjaGVzICJmb28iIGluICJmb29iYXIiLgorXEA8IQkJZG9uJ3QgbWF0Y2ggcHJlY2VkaW5nIGF0b20gYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uCitcQDw9CQltYXRjaCBwcmVjZWRpbmcgYXRvbSBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24KK1xAPgkJbWF0Y2ggcHJlY2VkaW5nIGF0b20gYXMgYSBzdWJleHByZXNzaW9uCisKK1wmCQltYXRjaCBvbmx5IHdoZW4gYnJhbmNoIGJlZm9yZSBhbmQgYWZ0ZXIgaXQgbWF0Y2gKKworXCVbXQkJb3B0aW9uYWxseSBtYXRjaCBhIGxpc3Qgb2YgYXRvbXM7ICJlbmRcJVtpZl0iIG1hdGNoZXMgImVuZCIsCisJCSJlbmRpIiBhbmQgImVuZGlmIgorXCUoXCkJCWxpa2UgXChcKSwgYnV0IHdpdGhvdXQgY3JlYXRpbmcgYSBiYWNrLXJlZmVyZW5jZTsgdGhlcmUgY2FuIGJlCisJCWFueSBudW1iZXIgb2YgdGhlc2UsIG92ZXJjb21lcyB0aGUgbGltaXQgb2YgbmluZSBcKCBcKSBwYWlycworXCVeCQltYXRjaCBzdGFydC1vZi1maWxlIChDaGFzZSBUaW5nbGV5KQorXCUkCQltYXRjaCBlbmQtb2YtZmlsZSAoQ2hhc2UgVGluZ2xleSkKK1wlIwkJTWF0Y2ggd2l0aCB0aGUgY3Vyc29yIHBvc2l0aW9uLiAoQ2hhc2UgVGluZ2xleSkKK1w/CQlKdXN0IGxpa2UgIlw9IiBidXQgY2FuJ3QgYmUgdXNlZCBpbiBhICI/IiBjb21tYW5kLgorCitcJTIzbAkJbWF0Y2ggaW4gbGluZSAyMworXCU8MjNsCQltYXRjaCBiZWZvcmUgbGluZSAyMworXCU+MjNsCQltYXRjaCBhZnRlciBsaW5lIDIzCitcJTIzYywgXCU8MjNjLCBcJT4yM2MgICBtYXRjaCBpbi9iZWZvcmUvYWZ0ZXIgY29sdW1uIDIzCitcJTIzdiwgXCU8MjN2LCBcJT4yM3YJbWF0Y2ggaW4vYmVmb3JlL2FmdGVyIHZpcnR1YWwgY29sdW1uIDIzCisKKworRm9yIHN5bnRheCBpdGVtczoKK1x6KC4uLlwpCWV4dGVybmFsIHJlZmVyZW5jZSBtYXRjaCBzZXQgKGluIHJlZ2lvbiBzdGFydCBwYXR0ZXJuKQorXHoxIC0gXHo5CWV4dGVybmFsIHJlZmVyZW5jZSBtYXRjaCB1c2UgKGluIHJlZ2lvbiBza2lwIG9yIGVuZCBwYXR0ZXJuKQorCShTY290dCBCaWdoYW0pCisKK1x6cwkJdXNlIHBvc2l0aW9uIGFzIHN0YXJ0IG9mIG1hdGNoCitcemUJCXVzZSBwb3NpdGlvbiBhcyBlbmQgb2YgbWF0Y2gKKworUmVtb3ZlZCBsaW1pdCBvZiBtYXRjaGluZyBvbmx5IHVwIHRvIDMyNzY3IHRpbWVzIHdpdGggKiwgXCssIGV0Yy4KKworQWRkZWQgc3VwcG9ydCB0byBtYXRjaCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuIChwYXJ0bHkgYnkgTXVyYW9rYSBUYXJvKQorTWFkZSAiXDwiIGFuZCAiXD4iIHdvcmsgZm9yIFVURi04LiAoTXVyYW9rYSBUYXJvKQorCisKK1VURi04IHN1cHBvcnQJCQkJCQkqbmV3LXV0Zi04KgorLS0tLS0tLS0tLS0tLQorCitWaW0gY2FuIG5vdyBlZGl0IGZpbGVzIGluIFVURi04IGVuY29kaW5nLiAgVXAgdG8gMzEgYml0IGNoYXJhY3RlcnMgY2FuIGJlCit1c2VkLCBidXQgb25seSAxNiBiaXQgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkLiAgVXAgdG8gdHdvIGNvbWJpbmluZworY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkLCB0aGV5IG92ZXJwcmludCB0aGUgcHJlY2VkaW5nIGNoYXJhY3Rlci4KK0RvdWJsZS13aWRlIGNoYXJhY3RlcnMgYXJlIGFsc28gc3VwcG9ydGVkLiAgU2VlIHxVVEYtOHwuCisKK1VDUy0yLCBVQ1MtNCBhbmQgVVRGLTE2IGVuY29kaW5ncyBhcmUgc3VwcG9ydGVkIHRvbywgdGhleSBhcmUgY29udmVydGVkIHRvCitVVEYtOCBpbnRlcm5hbGx5LiAgVGhlcmUgaXMgYWxzbyBzdXBwb3J0IGZvciBlZGl0aW5nIFVuaWNvZGUgZmlsZXMgaW4gYSBMYXRpbjEKK2Vudmlyb25tZW50LiAgT3RoZXIgZW5jb2RpbmdzIGFyZSBjb252ZXJ0ZWQgd2l0aCBpY29udigpIG9yIGFuIGV4dGVybmFsCitjb252ZXJ0ZXIgc3BlY2lmaWVkIHdpdGggJ2NoYXJjb252ZXJ0Jy4KKworTWFueSBuZXcgaXRlbXMgZm9yIE11bHRpLWJ5dGUgc3VwcG9ydDoKKy0gQWRkZWQgJ2VuY29kaW5nJyBvcHRpb246IHNwZWNpZmllcyBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCBpbnNpZGUgVmltLiAgSXQKKyAgY2FuIGJlIGFueSA4LWJpdCBlbmNvZGluZywgc29tZSBkb3VibGUtYnl0ZSBlbmNvZGluZ3Mgb3IgVW5pY29kZS4KKyAgSXQgaXMgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgd2hlbiBhIHN1cHBvcnRlZCB2YWx1ZSBpcyBmb3VuZC4KKy0gQWRkZWQgJ2ZpbGVlbmNvZGluZycgYW5kICdmaWxlZW5jb2RpbmdzJzogc3BlY2lmeSBjaGFyYWN0ZXIgY29kaW5nIGluIGEKKyAgZmlsZSwgc2ltaWxhciB0byAnZmlsZWZvcm1hdCcgYW5kICdmaWxlZm9ybWF0cycuCisgIFdoZW4gJ2VuY29kaW5nJyBpcyAidXRmLTgiIGFuZCAnZmlsZWVuY29kaW5ncycgaXMgInV0Zi04LGxhdGluMSIgdGhpcyB3aWxsCisgIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIGxhdGluMSBpZiBhIGZpbGUgZG9lcyBub3QgY29udGFpbiB2YWxpZCBVVEYtOC4KKy0gQWRkZWQgJ2JvbWInIG9wdGlvbiBhbmQgZGV0ZWN0aW9uIG9mIGEgQk9NIGF0IHRoZSBzdGFydCBvZiBhIGZpbGUuICBDYW4gYmUKKyAgdXNlZCB3aXRoICJ1Y3MtYm9tIiBpbiAnZmlsZWVuY29kaW5ncycgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgYSBVbmljb2RlCisgIGZpbGUgaWYgaXQgc3RhcnRzIHdpdGggYSBCT00uICBFc3BlY2lhbGx5IHVzZWZ1bCBvbiBNUy1XaW5kb3dzIChOVCBhbmQKKyAgMjAwMCksIHdoaWNoIHVzZXMgdWNzLTJsZSBmaWxlcyB3aXRoIGEgQk9NIChlLmcuLCB3aGVuIGV4cG9ydGluZyB0aGUKKyAgcmVnaXN0cnkpLgorLSBBZGRlZCB0aGUgJ3Rlcm1lbmNvZGluZycgb3B0aW9uOiBTcGVjaWZpZXMgdGhlIGVuY29kaW5nIHVzZWQgZm9yIHRoZQorICB0ZXJtaW5hbC4gIFVzZWZ1bCB0byBwdXQgVmltIGluIHV0Zi04IG1vZGUgd2hpbGUgaW4gYSBub24tVW5pY29kZSBsb2NhbGU6ID4KKyAgICA6bGV0ICZ0ZXJtZW5jb2RpbmcgPSAmZW5jb2RpbmcKKyAgICA6c2V0IGVuY29kaW5nPXV0Zi04CistIFdoZW4gJ3ZpbWluZm8nIGNvbnRhaW5zIHRoZSAnYycgZmxhZywgdGhlIHZpbWluZm8gZmlsZSBpcyBjb252ZXJ0ZWQgZnJvbSB0aGUKKyAgJ2VuY29kaW5nJyBpdCB3YXMgd3JpdHRlbiB3aXRoIHRvIHRoZSBjdXJyZW50ICdlbmNvZGluZycuCistIEFkZGVkICI6c2NyaXB0ZW5jb2RpbmciIGNvbW1hbmQ6IGNvbnZlcnQgbGluZXMgaW4gYSBzb3VyY2VkIHNjcmlwdCB0bworICAnZW5jb2RpbmcnLiAgVXNlZnVsIGZvciBtZW51IGZpbGVzLgorLSBBZGRlZCAnZ3VpZm9udHdpZGUnIHRvIHNwZWNpZnkgYSBmb250IGZvciBkb3VibGUtd2lkZSBjaGFyYWN0ZXJzLgorLSBBZGRlZCBLb3JlYW4gc3VwcG9ydCBmb3IgY2hhcmFjdGVyIGNsYXNzIGRldGVjdGlvbi4gIEFsc28gZml4IGNscygpIGluCisgIHNlYXJjaC5jLiAoQ2hvbmctRGFlIFBhcmspCistIFdpbjMyOiBUeXBpbmcgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHdpdGhvdXQgSU1FLiAoQWxleGFuZGVyIFNtaXNobGFqZXYpCistIFdpbjMyIHdpdGggTWluZ3c6IGNvbXBpbGUgd2l0aCBpY29udiBsaWJyYXJ5LiAoUm9uIEFhcm9uKQorLSBXaW4zMiB3aXRoIE1TVkM6IGR5bmFtaWNhbGx5IGxvYWQgaWNvbnYuZGxsIGxpYnJhcnkuIChNdXJhb2thIFRhcm8pCistIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgYSB2ZXJzaW9uIHdpdGggbXVsdGktYnl0ZSBhbmQgaWNvbnYgc3VwcG9ydCB3aXRoCisgIEJvcmxhbmQgNS41LiAgKFlhc3VoaXJvIE1hdHN1bW90bykKKy0gQWRkZWQgJ2RlbGNvbWJpbmUnIG9wdGlvbjogRGVsZXRlIGNvbWJpbmluZyBjaGFyYWN0ZXIgc2VwYXJhdGVseS4gKFJvbgorICBBYXJvbikKKy0gVGhlICJ4Zm9udHNldCIgZmVhdHVyZSBpc24ndCByZXF1aXJlZCBmb3IgInhpbSIuICBUaGVzZSBhcmUgbm93IHR3bworICBpbmRlcGVuZGVudCBmZWF0dXJlcy4KKy0gWElNOiBlbmFibGUgWElNIHdoZW4gdHlwaW5nIGEgbGFuZ3VhZ2UgY2hhcmFjdGVyIChJbnNlcnQgbW9kZSwgU2VhcmNoCisgIHBhdHRlcm4sICJmIiBvciAiciIgY29tbWFuZCkuICBEaXNhYmxlIFhJTSB3aGVuIHR5cGluZyBhIE5vcm1hbCBtb2RlCisgIGNvbW1hbmQuCistIFdoZW4gdGhlIFhJTSBpcyBhY3RpdmUsIHNob3cgIlhJTSIgaW4gdGhlICdzaG93bW9kZScgbWVzc2FnZS4gKE5hbSBTdW5nSHl1bikKKy0gU3VwcG9ydCAiQ3Vyc29ySU0iIGZvciBYSU0uICAoTmFtIFN1bmdIeXVuKQorLSBBZGRlZCAnbScgZmxhZyB0byAnZm9ybWF0b3B0aW9ucyc6IFdoZW4gd3JhcHBpbmcgd29yZHMsIGFsbG93IHNwbGl0dGluZyBhdAorICBlYWNoIG11bHRpYnl0ZSBjaGFyYWN0ZXIsIG5vdCBvbmx5IGF0IGEgc3BhY2UuCistIE1hZGUgIjpzeW50YXgga2V5d29yZCIgd29yayB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KKy0gQWRkZWQgc3VwcG9ydCBmb3IgVW5pY29kZSB1cHBlci9sb3dlcmNhc2UgZmxpcHBpbmcgYW5kIGNvbXBhcmluZy4gKGJhc2VkIG9uCisgIHBhdGNoIGJ5IFJhcGhhZWwgRmlua2VsKQorICBMZXQgIn4iIG9uIG11bHRpLWJ5dGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYSB0aGlyZCBjYXNlICgidGl0bGUgY2FzZSIpCisgIHN3aXRjaCBiZXR3ZWVuIHRoZSB0aHJlZSBjYXNlcy4gKFJhcGhhZWwgRmlua2VsKQorCitBbGxvdyBkZWZpbmluZyBkaWdyYXBocyBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorQWRkZWQgUkZDMTM0NSBkaWdyYXBocyBmb3IgVW5pY29kZS4KK01vc3QgTm9ybWFsIG1vZGUgY29tbWFuZHMgdGhhdCBhY2NlcHQgYSBjaGFyYWN0ZXIgYXJndW1lbnQsIGxpa2UgInIiLCAidCIgYW5kCisiZiIgbm93IGFjY2VwdCBhIGRpZ3JhcGguICBUaGUgJ0QnIGZsYWcgaW4gJ2Nwb3B0aW9ucycgZGlzYWJsZXMgdGhpcyB0byByZW1haW4KK1ZpIGNvbXBhdGlibGUuCisKK0FkZGVkIExhbmd1YWdlIG1hcHBpbmcgYW5kICdrZXltYXAnIHRvIGJlIGFibGUgdG8gdHlwZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnM6CistIEFkZGVkIHRoZSAiOmxtYXAiIGNvbW1hbmQgYW5kIGZyaWVuZHM6IERlZmluZSBtYXBwaW5ncyB0aGF0IGFyZSB1c2VkIHdoZW4KKyAgdHlwaW5nIGNoYXJhY3RlcnMgaW4gdGhlIGxhbmd1YWdlIG9mIHRoZSB0ZXh0LiAgQWxzbyBmb3IgInIiLCAidCIsIGV0Yy4gIEluCisgIEluc2VydCBhbmQgQ29tbWFuZC1saW5lIG1vZGUgQ1RSTC1eIHN3aXRjaGVzIHRoZSB1c2Ugb2YgdGhlIG1hcHBpbmdzIG9uL29mZi4KKyAgQ1RSTC1eIGFsc28gdG9nZ2xlcyB0aGUgdXNlIG9mIGFuIGlucHV0IG1ldGhvZCB3aGVuIG5vIGxhbmd1YWdlIG1hcHBpbmdzIGFyZQorICBwcmVzZW50LiAgQWxsb3dzIHN3aXRjaGluZyB0aGUgSU0gYmFjayBvbiBoYWxmd2F5IHR5cGluZy4KKy0gIjxjaGFyLTEyMz4iIGFyZ3VtZW50IHRvICI6bWFwIiwgYWxsb3dzIHRvIHNwZWNpZnkgdGhlIGRlY2ltYWwsIG9jdGFsIG9yCisgIGhleGFkZWNpbWFsIHZhbHVlIG9mIGEgY2hhcmFjdGVyLgorLSBJbXBsZW1lbnRlZCB0aGUgJ2tleW1hcCcgb3B0aW9uOiBMb2FkIGEga2V5bWFwIGZpbGUuICBVc2VzICI6bG5vcmVtYXAiIHRvCisgIGRlZmluZSBtYXBwaW5ncyBmb3IgdGhlIGtleW1hcC4gIFRoZSBuZXcgIjpsb2Fka2V5bWFwIiBjb21tYW5kIGlzIHVzZWQgaW4KKyAgdGhlIGtleW1hcCBmaWxlLgorLSBBZGRlZCAnaycgZmxhZyBpbiAnc3RhdHVzbGluZSc6IFZhbHVlIG9mICJiOmtleW1hcF9uYW1lIiBvciAna2V5bWFwJyB3aGVuCisgIGl0J3MgYmVpbmcgdXNlZC4gIFVzZXMgIjxsYW5nPiIgd2hlbiBubyBrZXltYXAgaXMgbG9hZGVkIGFuZCAiOmxtYXAicyBhcmUKKyAgYWN0aXZlLiAgU2hvdyB0aGlzIHRleHQgaW4gdGhlIGRlZmF1bHQgc3RhdHVzbGluZSB0b28uCistIEFkZGVkIHRoZSAnaW1pbnNlcnQnIGFuZCAnaW1zZWFyY2gnIG9wdGlvbnM6IFNwZWNpZnkgdXNlIG9mIGxhbmdtYXAgbWFwcGluZ3MKKyAgYW5kIElucHV0IE1ldGhvZCB3aXRoIGFuIG9wdGlvbi4gKE11cmFva2EgVGFybykKKyAgQWRkZWQgJ2ltY21kbGluZScgb3B0aW9uOiBXaGVuIHNldCB0aGUgaW5wdXQgbWV0aG9kIGlzIGFsd2F5cyBlbmFibGVkIHdoZW4KKyAgc3RhcnRpbmcgdG8gZWRpdCBhIGNvbW1hbmQgbGluZS4gIFVzZWZ1bCBmb3IgYSBYSU0gdGhhdCB1c2VzIGRlYWQga2V5cyB0bworICB0eXBlIGFjY2VudGVkIGNoYXJhY3RlcnMuCisgIEFkZGVkICdpbWFjdGl2YXRla2V5JyBvcHRpb24gdG8gYmV0dGVyIGNvbnRyb2wgWElNLiAgKE11cmFva2EgVGFybykKKy0gV2hlbiB0eXBpbmcgYSBtYXBwaW5nIHRoYXQncyBub3QgZmluaXNoZWQgeWV0LCBkaXNwbGF5IHRoZSBsYXN0IGNoYXJhY3RlcgorICB1bmRlciB0aGUgY3Vyc29yIGluIEluc2VydCBtb2RlIGFuZCBDb21tYW5kLWxpbmUgbW9kZS4gIExvb2tzIGdvb2QgZm9yIGRlYWQKKyAgY2hhcmFjdGVycy4KKy0gTWFkZSB0aGUgJ2xhbmdtYXAnIG9wdGlvbiByZWNvZ25pemUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAgQnV0IG1hcHBpbmcgb25seQorICB3b3JrcyBmb3IgOC1iaXQgY2hhcmFjdGVycy4gIEhlbHBzIHdoZW4gdXNpbmcgVVRGLTguCistIFVzZSBhIGRpZmZlcmVudCBjdXJzb3IgZm9yIHdoZW4gIjpsbWFwIiBtYXBwaW5ncyBhcmUgYWN0aXZlLiAgQ2FuIHNwZWNpZnkKKyAgdHdvIGhpZ2hsaWdodCBncm91cHMgZm9yIGFuIGl0ZW0gaW4gJ2d1aWN1cnNvcicuICBCeSBkZWZhdWx0ICJsQ3Vyc29yIiBhbmQKKyAgIkN1cnNvciIgYXJlIGVxdWFsLCB0aGUgdXNlciBtdXN0IHNldCBhIGNvbG9yIGhlIGxpa2VzLgorICBVc2UgdGhlIGN1cnNvciBjb2xvciBmb3IgaGFuZ3VsIGlucHV0IGFzIHdlbGwuIChTdW5nLUh5dW4gTmFtKQorLSBTaG93ICIobGFuZykiIGZvciAnc2hvd21vZGUnIHdoZW4gbGFuZ3VhZ2UgbWFwcGluZyBpcyBlbmFibGVkLgorLSBVVEYtODogTWFkZSAiciIgd29yayB3aXRoIGEgIjpsbWFwIiB0aGF0IGluY2x1ZGVzIGEgY29tcG9zaW5nIGNoYXJhY3Rlci4KKyAgQWxzbyB3b3JrcyBmb3IgImYiLCB3aGljaCBub3cgd29ya3MgdG8gZmluZCBhIGNoYXJhY3RlciB0aGF0IGluY2x1ZGVzIGEKKyAgY29tcG9zaW5nIGNoYXJhY3Rlci4KKworT3RoZXIgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgYWRkaXRpb25zOgorLSBTdXBwb3J0IGRvdWJsZS1ieXRlIHNpbmdsZS13aWR0aCBjaGFyYWN0ZXJzIGZvciBldWMtanA6IENoYXJhY3RlcnMgc3RhcnRpbmcKKyAgd2l0aCAweDhFLiAgQWRkZWQgU2NyZWVuTGluZXMyW10gdG8gc3RvcmUgdGhlIHNlY29uZCBieXRlLgorCisKK011bHRpLWxhbmd1YWdlIHN1cHBvcnQJCQkJCSpuZXctbXVsdGktbGFuZyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lc3NhZ2VzIHVzZWQgaW4gVmltIGNhbiBiZSB0cmFuc2xhdGVkLiAgU2V2ZXJhbCB0cmFuc2xhdGlvbnMgYXJlCithdmFpbGFibGUuICBUaGlzIHVzZXMgdGhlIGdldHRleHQgbWVjaGFuaXNtLiAgSXQgYWxsb3dzIGFkZGluZyBhIHRyYW5zbGF0aW9uCit3aXRob3V0IHJlY29tcGlsaW5nIFZpbS4gIHxtdWx0aS1sYW5nfCAocGFydGx5IGJ5IE1hcmNpbiBEYWxlY2tpKQorCitUaGUgdHJhbnNsYXRpb24gZmlsZXMgYXJlIGluIHRoZSBzcmMvcG8gZGlyZWN0b3J5LiAgVGhlIHNyYy9wby9SRUFETUUudHh0IGZpbGUKK2V4cGxhaW5zIGEgZmV3IHRoaW5ncyBhYm91dCBkb2luZyBhIHRyYW5zbGF0aW9uLgorCitNZW51IHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlIGFzIHdlbGwuICBUaGlzIHVzZXMgdGhlIG5ldyB8Om1lbnV0cmFuc2xhdGV8Citjb21tYW5kLiAgVGhlIHRyYW5zbGF0aW9ucyBhcmUgZm91bmQgaW4gdGhlIHJ1bnRpbWUgZGlyZWN0b3J5ICJsYW5nIi4gIFRoaXMKK2FsbG93cyBhIHVzZXIgdG8gYWRkIGEgdHJhbnNsYXRpb24uCisKK0FkZGVkIHw6bGFuZ3VhZ2V8IGNvbW1hbmQgdG8gc2V0IHRoZSBsYW5ndWFnZSAobG9jYWxlKSBmb3IgbWVzc2FnZXMsIHRpbWUgYW5kCitjaGFyYWN0ZXIgdHlwZS4gIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBsYW5ndWFnZXMgaW4gVmltIHdpdGhvdXQgY2hhbmdpbmcgdGhlCitsb2NhbGUgb3V0c2lkZSBvZiBWaW0uCisKK01hZGUgaXQgcG9zc2libGUgdG8gaGF2ZSB2aW10dXRvciB1c2UgZGlmZmVyZW50IGxhbmd1YWdlcy4gIChFZHVhcmRvIEZlcm5hbmRleikKK1NwYW5pc2ggKEVkdWFyZG8gRmVybmFuZGV6KSwgSXRhbGlhbiAoQW50b25pbyBDb2xvbWJvKSwgSmFwYW5lc2UgKFlhc3VoaXJvCitNYXRzdW1vdG8pIGFuZCBGcmVuY2ggKEFkcmllbiBCZWF1KSB0cmFuc2xhdGlvbnMgYXJlIGluY2x1ZGVkLgorQWRkZWQgInZpbXR1dG9yLmJhdCI6IHNjcmlwdCB0byBzdGFydCBWaW0gb24gYSBjb3B5IG9mIHRoZSB0dXRvciBmaWxlIGZvcgorTVMtV2luZG93cy4gKERhbiBTaGFycCkKKworLSBBZGRlZCB2OmxhbmcgdmFyaWFibGUgdG8gYmUgYWJsZSB0byBnZXQgY3VycmVudCBsYW5ndWFnZSBzZXR0aW5nLgorICAoTWFyY2luIERhbGVja2kpICBBbHNvIHY6bGNfdGltZSBhbmQgdjpjdHlwZS4KKy0gTWFrZSBpdCBwb3NzaWJsZSB0byB0cmFuc2xhdGUgdGhlIGRpYWxvZ3MgdXNlZCBieSB0aGUgbWVudXMuICBVc2VzIGdsb2JhbAorICAibWVudXRyYW5zXyIgdmFyaWFibGVzLiAgIjptZW51dHJhbnMgY2xlYXIiIGRlbGV0ZXMgdGhlbS4KKy0gcmVtb3ZlZCAiYnJva2VuIGxvY2FsZSIgKE1hcmNpbiBEYWxlY2tpKS4KKy0gRG9uJ3QgdXNlIGNvbG9yIG5hbWVzIGluIGljb25zLCB1c2UgUkdCIHZhbHVlcy4gIFRoZSBuYW1lcyBjb3VsZCBiZQorICB0cmFuc2xhdGVkLgorLSBXaW4zMjogQWRkZWQgZ2xvYmFsIElNRSBzdXBwb3J0IChNdXJhb2thKQorLSBXaW4zMjogQWRkZWQgZHluYW1pYyBsb2FkaW5nIG9mIElNRSBzdXBwb3J0LgorLSAiOm1lc3NhZ2VzIiBwcmludHMgYSBtZXNzYWdlIGFib3V0IHdobyBtYWludGFpbnMgdGhlIG1lc3NhZ2VzIG9yIHRoZQorICB0cmFuc2xhdGlvbnMuICBVc2VmdWwgdG8gZmluZCBvdXQgd2hlcmUgdG8gbWFrZSBhIHJlbWFyayBhYm91dCBhIHdyb25nCisgIHRyYW5zbGF0aW9uLgorLSAtLWRpc2FibGUtbmxzIGFyZ3VtZW50IGZvciBjb25maWd1cmU6IERpc2FibGUgdXNlIG9mIGdldHRleHQoKS4gKFN1bmctSHl1bgorICBOYW0pCistIEFkZGVkIE5MUyBzdXBwb3J0IGZvciBXaW4zMiB3aXRoIHRoZSBNaW5nVyBjb21waWxlci4gKEVkdWFyZG8gRmVybmFuZGV6KQorLSBXaGVuIGF2YWlsYWJsZSwgY2FsbCBiaW5kX3RleHRkb21haW5fY29kZXNldCgpIHRvIGhhdmUgZ2V0dGV4dCgpIHRyYW5zbGF0ZQorICBtZXNzYWdlcyB0byAnZW5jb2RpbmcnLiAgVGhpcyByZXF1aXJlcyBHTlUgZ2V0dGV4dCAwLjEwLjM2IG9yIGxhdGVyLgorLSBBZGRlZCBnZXR0ZXh0IHN1cHBvcnQgZm9yIFdpbjMyLiAgVGhpcyBtZWFucyBtZXNzYWdlcyB3aWxsIGJlIHRyYW5zbGF0ZWQKKyAgd2hlbiB0aGUgbG9jYWxlIGlzIHNldCBhbmQgbGliaW50bC5kbGwgY2FuIGJlIGZvdW5kLiAgKE11cmFva2EgVGFybykKKyAgQWxzbyBtYWRlIGl0IHdvcmsgd2l0aCBNaW5nVyBjb21waWxlci4gIChFZHVhcmRvIEZlcm5hbmRleikKKyAgRGV0ZWN0IHRoZSBsYW5ndWFnZSBhbmQgc2V0ICRMQU5HIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgdHJhbnNsYXRlZCBtZXNzYWdlcworICAoaWYgc3VwcG9ydGVkKS4gIEFsc28gdXNlICRMQU5HIHRvIHNlbGVjdCBhIGxhbmd1YWdlLCB2OmxhbmcgaXMgYSB2ZXJ5CisgIGRpZmZlcmVudCBraW5kIG9mIG5hbWUuCistIE1hZGUgZ3ZpbWV4dC5kbGwgdXNlIHRyYW5zbGF0ZWQgbWVzc2FnZXMsIGlmIHBvc3NpYmxlLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCisKK1BsdWdpbiBzdXBwb3J0CQkJCQkqbmV3LXBsdWdpbnMqCistLS0tLS0tLS0tLS0tLQorCitUbyBtYWtlIGl0IHJlYWxseSBlYXN5IHRvIGxvYWQgYSBWaW0gc2NyaXB0IHdoZW4gc3RhcnRpbmcgVmltLCB0aGUgInBsdWdpbiIKK3J1bnRpbWUgZGlyZWN0b3J5IGNhbiBiZSB1c2VkLiAgQWxsICIqLnZpbSIgZmlsZXMgaW4gaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5Citsb2FkZWQuICBGb3IgVW5peCwgdGhlIGRpcmVjdG9yeSAifi8udmltL3BsdWdpbiIgaXMgdXNlZCBieSBkZWZhdWx0LiAgVGhlCisncnVudGltZXBhdGgnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIGxvb2sgaW4gb3RoZXIgZGlyZWN0b3JpZXMgZm9yIHBsdWdpbnMuCit8bG9hZC1wbHVnaW5zfCB8YWRkLXBsdWdpbnwKKworVGhlIHw6cnVudGltZXwgY29tbWFuZCBoYXMgYmVlbiBhZGRlZCB0byBsb2FkIG9uZSBvciBtb3JlIGZpbGVzIGluCisncnVudGltZXBhdGgnLgorCitTdGFuZGFyZCBwbHVnaW5zOgorbmV0cncudmltIC0gRWRpdCBmaWxlcyBvdmVyIGEgbmV0d29yayB8bmV3LW5ldHdvcmstZmlsZXN8CitnemlwLnZpbSAtIEVkaXQgY29tcHJlc3NlZCBmaWxlcworZXhwbG9yZXIudmltIC0gQnJvd3NlIGRpcmVjdG9yaWVzIHxuZXctZmlsZS1icm93c2VyfAorCitBZGRlZCBzdXBwb3J0IGZvciBsb2NhbCBoZWxwIGZpbGVzLiB8YWRkLWxvY2FsLWhlbHB8LgorV2hlbiBzZWFyY2hpbmcgZm9yIGhlbHAgdGFncywgYWxsICJkb2MvdGFncyIgZmlsZXMgaW4gJ3J1bnRpbWVwYXRoJyBhcmUgdXNlZC4KK0FkZGVkIHRoZSAiOmhlbHB0YWdzIiBjb21tYW5kOiBHZW5lcmF0ZSBhIHRhZ3MgZmlsZSBmb3IgYSBoZWxwIGRpcmVjdG9yeS4KK1RoZSBmaXJzdCBsaW5lIG9mIGVhY2ggaGVscCBmaWxlIGlzIGF1dG9tYWdpY2FsbHkgYWRkZWQgdG8gdGhlICJMT0NBTAorQURESVRJT05TIiBzZWN0aW9uIGluIGRvYy9oZWxwLnR4dC4KKworQWRkZWQgdGhlIDx1bmlxdWU+IGFyZ3VtZW50IHRvICI6bWFwIjogb25seSBhZGQgYSBtYXBwaW5nIHdoZW4gaXQgd2Fzbid0CitkZWZpbmVkIGJlZm9yZS4KKworV2hlbiBkaXNwbGF5aW5nIGFuIG9wdGlvbiB2YWx1ZSB3aXRoICd2ZXJib3NlJyBzZXQgd2lsbCBnaXZlIGEgbWVzc2FnZSBhYm91dAord2hlcmUgdGhlIG9wdGlvbiB3YXMgbGFzdCBzZXQuICBWZXJ5IHVzZWZ1bCB0byBmaW5kIG91dCB3aGljaCBzY3JpcHQgZGlkIHNldAordGhlIHZhbHVlLgorCitUaGUgbmV3IHw6c2NyaXB0bmFtZXN8IGNvbW1hbmQgZGlzcGxheXMgYSBsaXN0IG9mIGFsbCBzY3JpcHRzIHRoYXQgaGF2ZSBiZWVuCitzb3VyY2VkLgorCitHVUk6IEZvciBBdGhlbmEsIE1vdGlmIGFuZCBHVEsgbG9vayBmb3IgYSB0b29sYmFyIGJpdG1hcCBpbiB0aGUgImJpdG1hcHMiCitkaXJlY3RvcmllcyBpbiAncnVudGltZXBhdGgnLiAgQWxsb3dzIGFkZGluZyB5b3VyIG93biBiaXRtYXBzLgorCisKK0ZpbGV0eXBlIHBsdWdpbnMJCQkJKm5ldy1maWxldHlwZS1wbHVnaW5zKgorLS0tLS0tLS0tLS0tLS0tLS0KKworQSBuZXcgZ3JvdXAgb2YgZmlsZXMgaGFzIGJlZW4gYWRkZWQgdG8gZG8gc2V0dGluZ3MgZm9yIHNwZWNpZmljIGZpbGUgdHlwZXMuCitUaGVzZSBjYW4gYmUgb3B0aW9ucyBhbmQgbWFwcGluZ3Mgd2hpY2ggYXJlIHNwZWNpZmljYWxseSB1c2VkIGZvciBvbmUgdmFsdWUgb2YKKydmaWxldHlwZScuCisKK1RoZSBmaWxlcyBhcmUgbG9jYXRlZCBpbiAiJFZJTVJVTlRJTUUvZnRwbHVnaW4iLiAgVGhlICdydW50aW1lcGF0aCcgb3B0aW9uCittYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc2V2ZXJhbCBzZXRzIG9mIHBsdWdpbnM6IFlvdXIgb3duLCBzeXN0ZW0td2lkZSwKK2luY2x1ZGVkIGluIHRoZSBWaW0gZGlzdHJpYnV0aW9uLCBldGMuCisKK1RvIGJlIGFibGUgdG8gbWFrZSB0aGlzIHdvcmssIHNldmVyYWwgZmVhdHVyZXMgd2VyZSBhZGRlZDoKKy0gQWRkZWQgdGhlICJzOiIgdmFyaWFibGVzLCBsb2NhbCB0byBhIHNjcmlwdC4gIEF2b2lkcyBuYW1lIGNvbmZsaWN0cyB3aXRoCisgIGdsb2JhbCB2YXJpYWJsZXMuICBUaGV5IGNhbiBiZSB1c2VkIGluIHRoZSBzY3JpcHQgYW5kIGluIGZ1bmN0aW9ucywKKyAgYXV0b2NvbW1hbmRzIGFuZCB1c2VyIGNvbW1hbmRzIGRlZmluZWQgaW4gdGhlIHNjcmlwdC4gIFRoZXkgYXJlIGtlcHQgYmV0d2VlbgorICBpbnZvY2F0aW9ucyBvZiB0aGUgc2FtZSBzY3JpcHQuICB8czp2YXJ8CistIEFkZGVkIHRoZSBnbG9iYWwgdmFsdWUgZm9yIGxvY2FsIG9wdGlvbnMuICBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBvcGVuaW5nCisgIGEgbmV3IGJ1ZmZlciBvciBlZGl0aW5nIGFub3RoZXIgZmlsZS4gIFRoZSBvcHRpb24gdmFsdWUgc3BlY2lmaWVkIGluIGEKKyAgbW9kZWxpbmUgb3IgZmlsZXR5cGUgc2V0dGluZyBpcyBub3QgY2FycmllZCBvdmVyIHRvIGFub3RoZXIgYnVmZmVyLgorICAiOnNldCIgc2V0cyBib3RoIHRoZSBsb2NhbCBhbmQgdGhlIGdsb2JhbCB2YWx1ZS4KKyAgIjpzZXRsb2NhbCIgc2V0cyB0aGUgbG9jYWwgb3B0aW9uIHZhbHVlIG9ubHkuCisgICI6c2V0Z2xvYmFsIiBzZXRzIG9yIGRpc3BsYXlzIHRoZSBnbG9iYWwgdmFsdWUgZm9yIGEgbG9jYWwgb3B0aW9uLgorICAiOnNldGxvY2FsIG5hbWU8IiBzZXRzIGEgbG9jYWwgb3B0aW9uIHRvIGl0cyBnbG9iYWwgdmFsdWUuCistIEFkZGVkIHRoZSBidWZmZXItbG9jYWwgdmFsdWUgZm9yIHNvbWUgZ2xvYmFsIG9wdGlvbnM6ICdlcXVhbHByZycsICdtYWtlcHJnJywKKyAgJ2Vycm9yZm9ybWF0JywgJ2dyZXBwcmcnLCAncGF0aCcsICdkaWN0aW9uYXJ5JywgJ3RoZXNhdXJ1cycsICd0YWdzJywKKyAgJ2luY2x1ZGUnIGFuZCAnZGVmaW5lJy4gIFRoaXMgYWxsb3dzIHNldHRpbmcgYSBsb2NhbCB2YWx1ZSBmb3IgdGhlc2UgZ2xvYmFsCisgIG9wdGlvbnMsIHdpdGhvdXQgbWFraW5nIGl0IGluY29tcGF0aWJsZS4KKy0gQWRkZWQgbWFwcGluZ3MgYW5kIGFiYnJldmlhdGlvbnMgbG9jYWwgdG8gYSBidWZmZXI6ICI6bWFwIDxidWZmZXI+Ii4KKy0gSW4gYSBtYXBwaW5nICI8TGVhZGVyPiIgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgIm1hcGxlYWRlciIKKyAgdmFyaWFibGUuICBUaGlzIHNpbXBsaWZpZXMgbWFwcGluZ3MgdGhhdCB1c2UgIm1hcGxlYWRlciIuICAiPExlYWRlcj4iCisgIGRlZmF1bHRzIHRvICJcIi4gICI8TG9jYWxMZWFkZXI+IiBkb2VzIHRoZSBzYW1lIHdpdGggIm1hcGxvY2FsbGVhZGVyIi4gIFRoaXMKKyAgaXMgdG8gYmUgdXNlZCBmb3IgbWFwcGluZ3MgbG9jYWwgdG8gYSBidWZmZXIuCistIEFkZGVkIDxTSUQ+IFNjcmlwdCBJRCB0byBkZWZpbmUgZnVuY3Rpb25zIGFuZCBtYXBwaW5ncyBsb2NhbCB0byBhIHNjcmlwdC4KKy0gQWRkZWQgPHNjcmlwdD4gYXJndW1lbnQgdG8gIjpub3JlbWFwIiBhbmQgIjpub3JlbWVudSI6IE9ubHkgcmVtYXAKKyAgc2NyaXB0LWxvY2FsIG1hcHBpbmdzLiAgQXZvaWRzIHRoYXQgbWFwcGluZ3MgZnJvbSBvdGhlciBzY3JpcHRzIGdldCBpbiB0aGUKKyAgd2F5LCBidXQgZG9lcyBhbGxvdyB1c2luZyBtYXBwaW5ncyBkZWZpbmVkIGluIHRoZSBzY3JpcHQuCistIFVzZXIgY29tbWFuZHMgY2FuIGJlIGxvY2FsIHRvIGEgYnVmZmVyOiAiOmNvbW1hbmQgLWJ1ZmZlciIuCisKK1RoZSBuZXcgIjpzZXRmaWxldHlwZSIgY29tbWFuZCBpcyB1c2VkIGluIHRoZSBmaWxldHlwZSBkZXRlY3Rpb24gYXV0b2NvbW1hbmRzLAordG8gYXZvaWQgdGhhdCAnZmlsZXR5cGUnIGlzIHNldCB0d2ljZS4KKworCitGaWxlIGJyb3dzZXIJCQkJCQkqbmV3LWZpbGUtYnJvd3NlcioKKy0tLS0tLS0tLS0tLQorCitXaGVuIGVkaXRpbmcgYSBkaXJlY3RvcnksIHRoZSBleHBsb3JlciBwbHVnaW4gd2lsbCBsaXN0IHRoZSBmaWxlcyBpbiB0aGUKK2RpcmVjdG9yeS4gIFByZXNzaW5nIDxFbnRlcj4gb24gYSBmaWxlIG5hbWUgZWRpdHMgdGhhdCBmaWxlLiAgUHJlc3NpbmcgPEVudGVyPgorb24gYSBkaXJlY3RvcnkgbW92ZXMgdGhlIGJyb3dzZXIgdG8gdGhhdCBkaXJlY3RvcnkuCisKK1RoZXJlIGFyZSBzZXZlcmFsIG90aGVyIHBvc3NpYmlsaXRpZXMsIHN1Y2ggYXMgb3BlbmluZyBhIGZpbGUgaW4gdGhlIHByZXZpZXcKK3dpbmRvdywgcmVuYW1pbmcgZmlsZXMgYW5kIGRlbGV0aW5nIGZpbGVzLgorCitTZWUgfGZpbGUtZXhwbG9yZXJ8LgorCisKK0VkaXRpbmcgZmlsZXMgb3ZlciBhIG5ldHdvcmsJCQkJKm5ldy1uZXR3b3JrLWZpbGVzKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaWxlcyBzdGFydGluZyB3aXRoIHNjcDovLywgcmNwOi8vLCBmdHA6Ly8gYW5kIGh0dHA6Ly8gYXJlIHJlY29nbml6ZWQgYXMKK3JlbW90ZSBmaWxlcy4gIEFuIGF0dGVtcHQgaXMgbWFkZSB0byBhY2Nlc3MgdGhlc2UgZmlsZXMgd2l0aCB0aGUgaW5kaWNhdGVkCittZXRob2QuICBGb3IgaHR0cDovLyBvbmx5IHJlYWRpbmcgaXMgcG9zc2libGUsIGZvciB0aGUgb3RoZXJzIHdyaXRpbmcgaXMgYWxzbworc3VwcG9ydGVkLiAgVXNlcyB0aGUgbmV0cncudmltIHNjcmlwdCBhcyBhIHN0YW5kYXJkICJwbHVnaW4iLiB8bmV0cnd8CisKK01hZGUgImdmIiB3b3JrIG9uIGEgVVJMLiAgSXQgbm8gbG9uZ2VyIGFzc3VtZXMgdGhlIGZpbGUgaXMgbG9jYWwgb24gdGhlCitjb21wdXRlciAobW9zdGx5IGRpZG4ndCB3b3JrIGFueXdheSwgYmVjYXVzZSB0aGUgZnVsbCBwYXRoIHdhcyByZXF1aXJlZCkuCitBZGp1c3RlZCB0ZXN0MiBmb3IgdGhpcy4KKworQWxsb3cgdXNpbmcgYSBVUkwgaW4gJ3BhdGgnLiAgTWFrZXMgIjpmaW5kIGluZGV4Lmh0bWwiIHdvcmsuCisKK0dUSzogQWxsb3cgZHJvcHBpbmcgYSBodHRwOi8vIGFuZCBmdHA6Ly8gVVJMIG9uIFZpbS4gIFRoZSBuZXRydyBwbHVnaW4gdGFrZXMKK2NhcmUgb2YgZG93bmxvYWRpbmcgdGhlIGZpbGUuIChNaUthZWwgQmVydGhlKQorCisKK1dpbmRvdyBmb3IgY29tbWFuZC1saW5lIGVkaXRpbmcJCQkJKm5ldy1jbWR3aW4qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBDb21tYW5kLWxpbmUgd2luZG93IGNhbiBiZSB1c2VkIHRvIGVkaXQgYSBjb21tYW5kLWxpbmUgd2l0aCBOb3JtYWwgYW5kCitJbnNlcnQgbW9kZSBjb21tYW5kcy4gIFdoZW4gaXQgaXMgb3BlbmVkIGl0IGNvbnRhaW5zIHRoZSBoaXN0b3J5LiAgVGhpcyBhbGxvd3MKK2NvcHlpbmcgcGFydHMgb2YgcHJldmlvdXMgY29tbWFuZCBsaW5lcy4gfGNtZHdpbnwKKworVGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgY2FuIGJlIG9wZW5lZCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgd2l0aCB0aGUga2V5CitzcGVjaWZpZWQgYnkgdGhlICdjZWRpdCcgb3B0aW9uIChsaWtlIE52aSkuICBJdCBjYW4gYWxzbyBiZSBvcGVuZWQgZGlyZWN0bHkKK2Zyb20gTm9ybWFsIG1vZGUgd2l0aCAicToiLCAicS8iIGFuZCAicT8iLgorCitUaGUgJ2NtZHdpbmhlaWdodCcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBpbml0aWFsIGhlaWdodCBvZiB0aGUgd2luZG93LgorCitJbiBJbnNlcnQgbW9kZSBDVFJMLVggQ1RSTC1WIGNhbiBiZSB1c2VkIHRvIGNvbXBsZXRlIGFuIEV4IGNvbW1hbmQgbGluZSwgbGlrZQoraXQncyBkb25lIG9uIHRoZSBjb21tYW5kLWxpbmUuICBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciB3cml0aW5nIFZpbSBzY3JpcHRzIQorCitBZGRpdGlvbmFsbHksIHRoZXJlIGlzICJpbXByb3ZlZCBFeCBtb2RlIi4gIEVudGVyZWQgd2hlbiBWaW0gaXMgc3RhcnRlZCBhcworImV4aW0iIG9yICJ2aW0gLUUiLCBhbmQgd2l0aCB0aGUgImdRIiBjb21tYW5kLiAgV29ya3MgbGlrZSByZXBlYXRlZCB1c2Ugb2YKKyI6Iiwgd2l0aCBmdWxsIGNvbW1hbmQtbGluZSBlZGl0aW5nIGFuZCBjb21wbGV0aW9uLiAoVWxmIENhcmxzc29uKQorCisKK0RlYnVnZ2luZyBtb2RlCQkJCQkJKm5ldy1kZWJ1Zy1tb2RlKgorLS0tLS0tLS0tLS0tLS0KKworSW4gZGVidWdnaW5nIG1vZGUgc291cmNlZCBzY3JpcHRzIGFuZCB1c2VyIGZ1bmN0aW9ucyBjYW4gYmUgZXhlY3V0ZWQgbGluZSBieQorbGluZS4gIFRoZXJlIGFyZSBjb21tYW5kcyB0byBzdGVwIG92ZXIgYSBjb21tYW5kIG9yIHN0ZXAgaW50byBpdC4gfGRlYnVnLW1vZGV8CisKK0JyZWFrcG9pbnRzIGNhbiBiZSBzZXQgdG8gcnVuIHVudGlsIGEgY2VydGFpbiBsaW5lIGluIGEgc2NyaXB0IG9yIHVzZXIKK2Z1bmN0aW9uIGlzIGV4ZWN1dGVkLiB8OmJyZWFrYWRkfAorCitEZWJ1Z2dpbmcgY2FuIGJlIHN0YXJ0ZWQgd2l0aCAiOmRlYnVnIHtjbWR9IiB0byBkZWJ1ZyB3aGF0IGhhcHBlbnMgd2hlbiBhCitjb21tYW5kIGV4ZWN1dGVzLiAgVGhlIHwtRHwgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gZGVidWcgd2hpbGUgc3RhcnRpbmcgdXAuCisKKworQ3Vyc29yIGluIHZpcnR1YWwgcG9zaXRpb24JCQkJKm5ldy12aXJ0ZWRpdCoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIHRoZSAndmlydHVhbGVkaXQnIG9wdGlvbjogQWxsb3cgcG9zaXRpb25pbmcgdGhlIGN1cnNvciB3aGVyZSB0aGVyZSBpcyBubworYWN0dWFsIGNoYXJhY3RlciBpbiBJbnNlcnQgbW9kZSwgVmlzdWFsIG1vZGUgb3IgYWx3YXlzLiAoTWF0dGhpYXMgS3JhbW0pCitUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGluIFZpc3VhbC1ibG9jayBtb2RlLiAgSXQgYWxsb3dzIHBvc2l0aW9uaW5nIGEKK2Nvcm5lciBvZiB0aGUgYXJlYSB3aGVyZSB0aGVyZSBpcyBubyB0ZXh0IGNoYXJhY3Rlci4gIChNYW55IGltcHJvdmVtZW50cyBieQorQ2hhc2UgVGluZ2xleSkKKworCitEZWJ1Z2dlciBpbnRlcmZhY2UJCQkJCSpuZXctZGVidWctaXRmKgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2FzIG9yaWdpbmFsbHkgbWFkZSB0byB3b3JrIHdpdGggU3VuIFZpc3VhbCBXb3Jrc2hvcC4gKEdvcmRvbiBQcmlldXIpCitTZWUgfGRlYnVnZ2VyLnR4dHwsIHxzaWduLnR4dHwgYW5kIHx3b3Jrc2hvcC50eHR8LgorCitBZGRlZCB0aGUgIjpzaWduIiBjb21tYW5kIHRvIGRlZmluZSBhbmQgcGxhY2Ugc2lnbnMuICBUaGV5IGNhbiBiZSBkaXNwbGF5ZWQKK3dpdGggdHdvIEFTQ0lJIGNoYXJhY3RlcnMgb3IgYW4gaWNvbi4gIFRoZSBsaW5lIGFmdGVyIGl0IGNhbiBiZSBoaWdobGlnaHRlZC4KK1VzZWZ1bCB0byBkaXNwbGF5IGJyZWFrcG9pbnRzIGFuZCB0aGUgY3VycmVudCBQQyBwb3NpdGlvbi4KKworQWRkZWQgdGhlIHw6d3N2ZXJifCBjb21tYW5kIHRvIGV4ZWN1dGUgZGVidWdnZXIgY29tbWFuZHMuCisKK0FkZGVkIGJhbGxvb24gc3R1ZmY6ICdiYWxsb29uZGVsYXknIGFuZCAnYmFsbG9vbmV2YWwnIG9wdGlvbnMuCisKK0FkZGVkICJpY29uPSIgYXJndW1lbnQgZm9yICI6bWVudSIuICBBbGxvd3MgZGVmaW5pbmcgYSBzcGVjaWZpYyBpY29uIGZvciBhCitUb29sQmFyIGl0ZW0uCisKKworQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIFZpbXMJCQkJKm5ldy12aW0tc2VydmVyKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byBWaW1zLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gc2VuZCBjb21tYW5kcyBmcm9tCitvbmUgVmltIHRvIGFub3RoZXIuICBXb3JrcyBmb3IgWC1XaW5kb3dzIGFuZCBNUy1XaW5kb3dzIHxjbGllbnRzZXJ2ZXJ8LgorCitVc2UgIi0tcmVtb3RlIiB0byBoYXZlIGZpbGVzIGJlIGVkaXRlZCBpbiBhbiBhbHJlYWR5IHJ1bm5pbmcgVmltLgorVXNlICItLXJlbW90ZS13YWl0IiB0byBkbyB0aGUgc2FtZSBhbmQgd2FpdCBmb3IgdGhlIGVkaXRpbmcgdG8gZmluaXNoLgorVXNlICItLXJlbW90ZS1zZW5kIiB0byBzZW5kIGNvbW1hbmRzIGZyb20gb25lIFZpbSB0byBhbm90aGVyLgorVXNlICItLXJlbW90ZS1leHByIiB0byBoYXZlIGFuIGV4cHJlc3Npb24gZXZhbHVhdGVkIGluIGFub3RoZXIgVmltLgorVXNlICItLXNlcnZlcmxpc3QiIHRvIGxpc3QgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgVmltIHNlcnZlcnMuIChYIG9ubHkpCitUaGVyZSBhcmUgYWxzbyBmdW5jdGlvbnMgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCB0aGUgY2xpZW50LgorfHJlbW90ZV9zZW5kKCl8IHxyZW1vdGVfZXhwcigpfAorCisoWC13aW5kb3dzIHZlcnNpb24gaW1wbGVtZW50ZWQgYnkgRmxlbW1pbmcgTWFkc2VuLCBNUy1XaW5kb3dzIHZlcnNpb24gYnkgUGF1bAorTW9vcmUpCisKK0FkZGVkIHRoZSBjb21tYW5kIHNlcnZlciBuYW1lIHRvIHRoZSB3aW5kb3cgdGl0bGUsIHNvIHlvdSBjYW4gc2VlIHdoaWNoIHNlcnZlcgorbmFtZSBiZWxvbmdzIHRvIHdoaWNoIFZpbS4KKworUmVtb3ZlZCB0aGUgT2xlVmltIGRpcmVjdG9yeSBhbmQgU2VuZFRvVmltLmV4ZSBhbmQgRWRpdFdpdGhWaW0uZXhlIGZyb20gdGhlCitkaXN0cmlidXRpb24uICBDYW4gbm93IHVzZSAiZ3ZpbSAtLXJlbW90ZSIgYW5kICJndmltIC0tcmVtb3RlLXNlbmQiLCB3aGljaCBpcworcG9ydGFibGUuCisKK0dUSys6IFN1cHBvcnQgcnVubmluZyBWaW0gaW5zaWRlIGFub3RoZXIgd2luZG93LiAgVXNlcyB0aGUgLS1zb2NrZXRpZCBhcmd1bWVudAorKE5laWwgQmlyZCkKKworCitCdWZmZXIgdHlwZSBvcHRpb25zCQkJCQkqbmV3LWJ1ZnR5cGUqCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnYnVmdHlwZScgYW5kICdidWZoaWRkZW4nIG9wdGlvbnMgaGF2ZSBiZWVuIGFkZGVkLiAgVGhleSBjYW4gYmUgc2V0IHRvCitoYXZlIGRpZmZlcmVudCBraW5kcyBvZiBidWZmZXJzLiAgRm9yIGV4YW1wbGU6CistICdidWZ0eXBlJyA9ICJxdWlja2ZpeCI6IGJ1ZmZlciB3aXRoIGVycm9yIGxpc3QKKy0gJ2J1ZnR5cGUnID0gIm5vZmlsZSIgYW5kICdidWZoaWRkZW4nID0gImRlbGV0ZSI6IHNjcmF0Y2ggYnVmZmVyIHRoYXQgd2lsbCBiZQorICBkZWxldGVkIGFzIHNvb24gYXMgdGhlcmUgaXMgbm8gd2luZG93IGRpc3BsYXlpbmcgaXQuCisKKydidWZoaWRkZW4nIGNhbiBiZSB1c2VkIHRvIG92ZXJydWxlIHRoZSAnaGlkZGVuJyBvcHRpb24gZm9yIG9uZSBidWZmZXIuCisKK0luIGNvbWJpbmF0aW9uIHdpdGggJ2J1Zmxpc3RlZCcgYW5kICdzd2FwZmlsZScgdGhpcyBvZmZlcnMgdGhlIHBvc3NpYmlsaXR5IHRvCit1c2UgdmFyaW91cyBraW5kcyBvZiBzcGVjaWFsIGJ1ZmZlcnMuICBTZWUgfHNwZWNpYWwtYnVmZmVyc3wuCisKKworUHJpbnRpbmcJCQkJCQkqbmV3LXByaW50aW5nKgorLS0tLS0tLS0KKworSW5jbHVkZWQgZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlICI6aGFyZGNvcHkiIGNvbW1hbmQgZm9yIHByaW50aW5nCit0byBwYXBlci4gIEZvciBNUy1XaW5kb3dzIGFueSBpbnN0YWxsZWQgcHJpbnRlciBjYW4gYmUgdXNlZC4gIEZvciBvdGhlcgorc3lzdGVtcyBhIFBvc3RTY3JpcHQgZmlsZSBpcyBnZW5lcmF0ZWQsIHdoaWNoIGNhbiBiZSBwcmludGVkIHdpdGggdGhlCisncHJpbnRleHByJyBvcHRpb24uCisoTVMtV2luZG93cyBwYXJ0IGJ5IFZpbmNlIE5lZ3JpLCBWaXBpbiBBcmF2aW5kLCBQb3N0U2NyaXB0IGJ5IFZpbmNlIE5lZ3JpIGFuZAorTWlrZSBXaWxsaWFtcykKKworTWFkZSAiOmhhcmRjb3B5IiB3b3JrIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAoTXVyYW9rYSBUYXJvLCBZYXN1aGlybworTWF0c3Vtb3RvKQorCitBZGRlZCBvcHRpb25zIHRvIHR1bmUgdGhlIHdheSBwcmludGluZyB3b3JrczogKFZpbmNlIE5lZ3JpKQorLSAncHJpbnRvcHRpb25zJyBkZWZpbmVzIHZhcmlvdXMgdGhpbmdzLgorLSAncHJpbnRoZWFkZXInIHNwZWNpZmllcyB0aGUgaGVhZGVyIGZvcm1hdC4gIEFkZGVkICJOIiBmaWVsZCB0byAnc3RhdHVzbGluZScKKyAgZm9yIHRoZSBwYWdlIG51bWJlci4KKy0gJ3ByaW50Zm9udCcgc3BlY2lmaWVzIHRoZSBmb250IG5hbWUgYW5kIGF0dHJpYnV0ZXMuCistICdwcmludGRldmljZScgZGVmaW5lcyB0aGUgZGVmYXVsdCBwcmludGVyIGZvciAiOmhhcmRjb3B5ISIuCisKKworUG9ydHMJCQkJCQkJKnBvcnRzLTYqCistLS0tLQorCitQb3J0IHRvIE9TLzM5MCBVbml4IChSYWxmIFNjaGFuZGwpCistIEEgbG90IG9mIGNoYW5nZXMgdG8gaGFuZGxlIEVCQ0RJQyBlbmNvZGluZy4KKy0gQ2hhbmdlZCBDdHJsKCd4JykgdG8gQ3RybF94IGRlZmluZS4KKworSW5jbHVkZWQganNibW91c2Ugc3VwcG9ydC4gKERhcnJlbiBHYXJ0aCkKK1N1cHBvcnQgZm9yIGRlYyBtb3VzZSBpbiBVbml4LiAoU3RldmUgV2FsbCkKKworUG9ydCB0byAxNi1iaXQgTVMgV2luZG93cyAoV2luZG93cyAzLjF4KSAoVmluY2UgTmVncmkpCisKK1BvcnQgdG8gUU5YLiAgU3VwcG9ydHMgdGhlIFBob3RvbiBHVUksIG1vdXNlLCBldGMuIChKdWxpYW4gS2lucmFpZCkKKworQWxsb3cgY3Jvc3MtY29tcGlsaW5nIHRoZSBXaW4zMiB2ZXJzaW9uIHdpdGggTWFrZV9taW5nLm1hay4gKFJvbiBBYXJvbikKK0FkZGVkIFB5dGhvbiBzdXBwb3J0IGZvciBjb21waWxpbmcgd2l0aCBNaW5ndy4gKFJvbiBBYXJvbikKKworRG9zIDMyIGJpdDogQWRkZWQgc3VwcG9ydCB0aGUgV2luZG93cyBjbGlwYm9hcmQuIChEYXZpZCBLb3RjaGFuKQorCitXaW4zMjogRHluYW1pY2FsbHkgbG9hZCBQZXJsIGFuZCBQeXRob24uICBBbGxvd3MgY29tcGlsaW5nIFZpbSB3aXRoIHRoZXNlCitpbnRlcmZhY2VzIGFuZCB3aWxsIHRyeSB0byBmaW5kIHRoZSBETExzIGF0IHJ1bnRpbWUuIChNdXJhb2thIFRhcm8pCisKK0NvbXBpbGluZyB0aGUgV2luMzIgR1VJIHdpdGggQ3lnd2luLiAgQWxzbyBjb21waWxlIHZpbXJ1biwgZG9zaW5zdCBhbmQKK3VuaW5zdGFsbC4gIChHZXJmcmllZCkKKworTWFjOiBNYWtlIFZpbSBjb21waWxlIHdpdGggdGhlIGZyZWUgTVBXIGNvbXBpbGVyIHN1cHBsaWVkIGJ5IEFwcGxlLiAgQW5kCit1cGRhdGVzIGZvciBDb2RlV2Fycmlvci4gKEF4ZWwgS2llbGhvcm4pCisKK0FkZGVkIHR5cGVjYXN0cyBhbmQgaWZkZWZzIGFzIGEgc3RhcnQgdG8gbWFrZSBWaW0gd29yayBvbiBXaW42NCAoR2VvcmdlCitSZWlsbHkpCisKKworUXVpY2tmaXggZXh0ZW5kZWQJCQkJCSpxdWlja2ZpeC02KgorLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgdGhlICJlcnJvciB3aW5kb3ciLiAgSXQgY29udGFpbnMgYWxsIHRoZSBlcnJvcnMgb2YgdGhlIGN1cnJlbnQgZXJyb3IKK2xpc3QuICBQcmVzc2luZyA8RW50ZXI+IGluIGEgbGluZSBtYWtlcyBWaW0ganVtcCB0byB0aGF0IGxpbmUgKGluIGFub3RoZXIKK3dpbmRvdykuICBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgZXJyb3IgbGlzdC4KK3xxdWlja2ZpeC13aW5kb3d8LgorCistIHw6Y29wZW58IG9wZW5zIHRoZSBxdWlja2ZpeCB3aW5kb3cuCistIHw6Y2Nsb3NlfCBjbG9zZXMgdGhlIHF1aWNrZml4IHdpbmRvdy4KKy0gfDpjd2luZG93fCB0YWtlcyBjYXJlIHRoYXQgdGhlcmUgaXMgYSBxdWlja2ZpeCB3aW5kb3cgb25seSB3aGVuIHRoZXJlIGFyZQorICByZWNvZ25pemVkIGVycm9ycy4gKERhbiBTaGFycCkKKworLSBRdWlja2ZpeCBhbHNvIGtub3dzICJpbmZvIiwgbmV4dCB0byAid2FybmluZyIgYW5kICJlcnJvciIgdHlwZXMuICIlSSIgY2FuIGJlCisgIHVzZWQgZm9yIHRoZSBzdGFydCBvZiBhIG11bHRpLWxpbmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlLiAoVG9ueSBMZW5laXMpCistIFRoZSAiJXAiIGFyZ3VtZW50IGNhbiBiZSB1c2VkIGluICdlcnJvcmZvcm1hdCcgdG8gZ2V0IHRoZSBjb2x1bW4gbnVtYmVyIGZyb20KKyAgYSBsaW5lIHdoZXJlICJeIiBwb2ludHMgdG8gdGhlIGNvbHVtbi4gKFN0ZWZhbiBSb2VtZXIpCistIFdoZW4gdXNpbmcgIiVmIiBpbiAnZXJyb3Jmb3JtYXQnIG9uIGEgRE9TL1dpbmRvd3Mgc3lzdGVtLCBhbHNvIGluY2x1ZGUgImM6IgorICBpbiB0aGUgZmlsZW5hbWUsIGV2ZW4gd2hlbiB1c2luZyAiJWY6Ii4KKworCitPcGVyYXRvciBtb2RpZmllcnMJCQkJCSpuZXctb3BlcmF0b3ItbW9kKgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luc2VydCAidiIsICJWIiBvciBDVFJMLVYgYmV0d2VlbiBhbiBvcGVyYXRvciBhbmQgYSBtb3Rpb24gY29tbWFuZCB0byBmb3JjZQordGhlIG9wZXJhdG9yIHRvIHdvcmsgY2hhcmFjdGVyd2lzZSwgbGluZXdpc2Ugb3IgYmxvY2t3aXNlLiB8b192fAorCisKK1NlYXJjaCBQYXRoCQkJCQkJKm5ldy1zZWFyY2gtcGF0aCoKKy0tLS0tLS0tLS0tCisKK1ZpbSBjYW4gc2VhcmNoIGluIGEgZGlyZWN0b3J5IHRyZWUgbm90IG9ubHkgaW4gZG93bndhcmRzIGJ1dCBhbHNvIHVwd2FyZHMuCitXb3JrcyBmb3IgdGhlICdwYXRoJywgJ2NkcGF0aCcgYW5kICd0YWdzJyBvcHRpb25zLiAoUmFsZiBTY2hhbmRsKQorCitBbHNvIHVzZSAiKioiIGZvciAndGFncycgb3B0aW9uLiAoUmFsZiBTY2hhbmRsKQorCitBZGRlZCAnaW5jbHVkZWV4cHInLCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgZmlsZSBuYW1lIGZvdW5kIGJ5ICdpbmNsdWRlJworb3B0aW9uLgorQWxzbyB1c2UgJ2luY2x1ZGVleHByJyBmb3IgImdmIiBhbmQgIjxjZmlsZT4iIHdoZW4gdGhlIGZpbGUgY2FuJ3QgYmUgZm91bmQKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLiAgVXNlZnVsIGZvciBkb2luZyAiZ2YiIG9uIHRoZSBuYW1lIGFmdGVyIGFuIGluY2x1ZGUgb3IKK2ltcG9ydCBzdGF0ZW1lbnQuCisKK0FkZGVkIHRoZSAnY2RwYXRoJyBvcHRpb246IExvY2F0aW9ucyB0byBmaW5kIGEgIjpjZCIgYXJndW1lbnQuIChSYWYpCisKK0FkZGVkIHRoZSAnc3VmZml4ZXNhZGQnIG9wdGlvbjogU3VmZml4ZXMgdG8gYmUgYWRkZWQgdG8gYSBmaWxlIG5hbWUgd2hlbgorc2VhcmNoaW5nIGZvciBhIGZpbGUgZm9yIHRoZSAiZ2YiLCAiW0kiLCBldGMuIGNvbW1hbmRzLgorCisKK1dyaXRpbmcgZmlsZXMgaW1wcm92ZWQJCQkJCSpuZXctZmlsZS13cml0aW5nKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGRlZCB0aGUgJ2JhY2t1cGNvcHknIG9wdGlvbjogU2VsZWN0IHdoZXRoZXIgYSBmaWxlIGlzIHRvIGJlIGNvcGllZCBvcgorcmVuYW1lZCB0byBtYWtlIGEgYmFja3VwIGZpbGUuICBVc2VmdWwgb24gVW5peCB0byBzcGVlZCB1cCB3cml0aW5nIGFuIG9yZGluYXJ5CitmaWxlLiAgVXNlZnVsIG9uIG90aGVyIHN5c3RlbXMgdG8gcHJlc2VydmUgZmlsZSBhdHRyaWJ1dGVzIGFuZCB3aGVuIGVkaXRpbmcgYQorZmlsZSBvbiBhIFVuaXggZmlsZXN5c3RlbS4KKworQWRkZWQgdGhlICdhdXRvd3JpdGVhbGwnIG9wdGlvbi4gIFdvcmtzIGxpa2UgJ2F1dG93cml0ZScgYnV0IGZvciBtb3JlCitjb21tYW5kcy4KKworQWRkZWQgdGhlICdiYWNrdXBza2lwJyBvcHRpb246IEEgbGlzdCBvZiBmaWxlIHBhdHRlcm5zIHRvIHNraXAgbWFraW5nIGEgYmFja3VwCitmaWxlIHdoZW4gaXQgbWF0Y2hlcy4gIFRoZSBkZWZhdWx0IGZvciBVbml4IGluY2x1ZGVzICIvdG1wLyoiLCB0aGlzIG1ha2VzCisiY3JvbnRhYiAtZSIgd29yay4KKworQWRkZWQgc3VwcG9ydCBmb3IgQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTCkgZm9yIEZyZWVCU0QgYW5kIFdpbjMyLiAgVGhlIEFDTAoraXMgY29waWVkIGZyb20gdGhlIG9yaWdpbmFsIGZpbGUgdG8gdGhlIG5ldyBmaWxlIChvciB0aGUgYmFja3VwIGlmIGl0J3MKK2NvcGllZCkuCitBQ0wgaXMgYWxzbyBzdXBwb3J0ZWQgZm9yIEFJWCwgU29sYXJpcyBhbmQgZ2VuZXJpYyBQT1NJWC4gKFRvbWFzIE9ncmVuKQorQW5kIG9uIFNHSS4KKworCitBcmd1bWVudCBsaXN0CQkJCQkJKm5ldy1hcmd1bWVudC1saXN0KgorLS0tLS0tLS0tLS0tLQorCitUaGUgc3VwcG9ydCBmb3IgdGhlIGFyZ3VtZW50IGxpc3QgaGFzIGJlZW4gZXh0ZW5kZWQuICBJdCBjYW4gbm93IGJlCittYW5pcHVsYXRlZCB0byBjb250YWluIHRoZSBmaWxlcyB5b3Ugd2FudCBpdCB0byBjb250YWluLgorCitUaGUgYXJndW1lbnQgbGlzdCBjYW4gbm93IGJlIGxvY2FsIHRvIGEgd2luZG93LiAgSXQgaXMgY3JlYXRlZCB3aXRoIHRoZQorfDphcmdsb2NhbHwgY29tbWFuZC4gIFRoZSB8OmFyZ2dsb2JhbHwgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBnbyBiYWNrIHRvIHRoZQorZ2xvYmFsIGFyZ3VtZW50IGxpc3QuCisKK1RoZSB8OmFyZ2RvfCBjb21tYW5kIGV4ZWN1dGVzIGEgY29tbWFuZCBvbiBhbGwgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCisKK0ZpbGUgbmFtZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBhcmd1bWVudCBsaXN0IHdpdGggfDphcmdhZGR8LiAgRmlsZSBuYW1lcyBjYW4KK2JlIHJlbW92ZWQgd2l0aCB8OmFyZ2RlbGV0ZXwuCisKKyIjIyIgY2FuIGJlIHVzZWQgbGlrZSAiIyIsIGl0IGlzIHJlcGxhY2VkIGJ5IGFsbCB0aGUgbmFtZXMgaW4gdGhlIGFyZ3VtZW50CitsaXN0IGNvbmNhdGVuYXRlZC4gIFVzZWZ1bCBmb3IgIjpncmVwIGZvbyAjIyIuCisKK1RoZSB8OmFyZ2VkaXR8IGFkZHMgYSBmaWxlIHRvIHRoZSBhcmd1bWVudCBsaXN0IGFuZCBlZGl0cyBpdC4gIExpa2UgIjphcmdhZGQiCithbmQgdGhlbiAiOmVkaXQiLgorCisKK1Jlc3RvcmUgYSBWaWV3CQkJCQkJKm5ldy1WaWV3KgorLS0tLS0tLS0tLS0tLS0KKworVGhlICI6bWt2aWV3IiBjb21tYW5kIHdyaXRlcyBhIFZpbSBzY3JpcHQgd2l0aCB0aGUgc2V0dGluZ3MgYW5kIG1hcHBpbmdzIGZvcgorb25lIHdpbmRvdy4gIFdoZW4gdGhlIGNyZWF0ZWQgZmlsZSBpcyBzb3VyY2VkLCB0aGUgdmlldyBvZiB0aGUgd2luZG93IGlzCityZXN0b3JlZC4gIEl0J3MgbGlrZSAiOm1rc2Vzc2lvbiIgZm9yIG9uZSB3aW5kb3cuCitUaGUgVmlldyBhbHNvIGNvbnRhaW5zIHRoZSBsb2NhbCBhcmd1bWVudCBsaXN0IGFuZCBtYW51YWxseSBjcmVhdGVkLCBvcGVuZWQKK2FuZCBjbG9zZWQgZm9sZHMuCisKK0FkZGVkIHRoZSAiOmxvYWR2aWV3IiBjb21tYW5kIGFuZCB0aGUgJ3ZpZXdkaXInIG9wdGlvbjogQWxsb3dzIGZvciBzYXZpbmcgYW5kCityZXN0b3Jpbmcgdmlld3Mgb2YgYSBmaWxlIHdpdGggc2ltcGxlIGNvbW1hbmRzLiAiOm1rdmlldyAxIiBzYXZlcyB2aWV3IDEgZm9yCit0aGUgY3VycmVudCBmaWxlLCAiOmxvYWR2aWV3IDEiIGxvYWRzIGl0IGFnYWluLiAgQWxzbyBhbGxvd3MgcXVpY2tseSBzd2l0Y2hpbmcKK2JldHdlZW4gdHdvIHZpZXdzIG9uIG9uZSBmaWxlLiAgQW5kIHNhdmluZyBhbmQgcmVzdG9yaW5nIG1hbnVhbCBmb2xkcyBhbmQgdGhlCitmb2xkaW5nIHN0YXRlLgorCitBZGRlZCAndmlld29wdGlvbnMnIHRvIHNwZWNpZnkgaG93ICI6bWt2aWV3IiB3b3Jrcy4KKworIjpta3Nlc3Npb24iIG5vdyBhbHNvIHdvcmtzIGZpbmUgd2l0aCB2ZXJ0aWNhbCBzcGxpdHMuICBJdCBoYXMgYmVlbiBmdXJ0aGVyCitpbXByb3ZlZCBhbmQgcmVzdG9yZXMgdGhlIHZpZXcgb2YgZWFjaCB3aW5kb3cuICBJdCBhbHNvIHdvcmtzIHByb3Blcmx5IHdpdGgKK3ByZXZpZXcgYW5kIHF1aWNrZml4IHdpbmRvd3MuCisKKydzZXNzaW9ub3B0aW9ucycgaXMgdXNlZCBmb3IgIjpta3ZpZXciIGFzIHdlbGwuCitBZGRlZCAiY3VyZGlyIiBhbmQgInNlc2RpciIgdG8gJ3Nlc3Npb25vcHRpb25zJy4gIEFsbG93cyBzZWxlY3Rpb24gb2Ygd2hhdAordGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgcmVzdG9yZWQgdG8uCisKK1RoZSBzZXNzaW9uIGZpbGUgbm93IGFsc28gY29udGFpbnMgdGhlIGFyZ3VtZW50IGxpc3QocykuCisKKworQ29sb3Igc2NoZW1lcwkJCQkJCSpuZXctY29sb3Itc2NoZW1lcyoKKy0tLS0tLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgbG9hZGluZyBhIGNvbG9yIHNjaGVtZS4gIEFkZGVkIHRoZSAiOmNvbG9yc2NoZW1lIiBjb21tYW5kLgorQXV0b21hdGljYWxseSBhZGQgbWVudSBlbnRyaWVzIGZvciBhdmFpbGFibGUgc2NoZW1lcy4KK1Nob3VsZCBub3cgcHJvcGVybHkgcmVzZXQgdGhlIGNvbG9ycyB3aGVuICdiYWNrZ3JvdW5kJyBvciAndF9DbycgaXMgY2hhbmdlZC4KKyI6aGlnaGxpZ2h0IGNsZWFyIiBzZXRzIHRoZSBkZWZhdWx0IGNvbG9ycyBhZ2Fpbi4KKyI6c3ludGF4IHJlc2V0IiBzZXRzIHRoZSBzeW50YXggaGlnaGxpZ2h0IGNvbG9ycyBiYWNrIHRvIHRoZSBkZWZhdWx0cy4KK0ZvciAiOnNldCBiZyYiIGd1ZXNzIHRoZSB2YWx1ZS4gIFRoaXMgYWxsb3dzIGEgY29sb3Igc2NoZW1lIHRvIHN3aXRjaCBiYWNrIHRvCit0aGUgZGVmYXVsdCBjb2xvcnMuCitXaGVuIHN5bnRheCBoaWdobGlnaHRpbmcgaXMgc3dpdGNoZWQgb24gYW5kIGEgY29sb3Igc2NoZW1lIHdhcyBkZWZpbmVkLCByZWxvYWQKK3RoZSBjb2xvciBzY2hlbWUgdG8gZGVmaW5lIHRoZSBjb2xvcnMuCisKKworVmFyaW91cyBuZXcgaXRlbXMJCQkJCSpuZXctaXRlbXMtNioKKy0tLS0tLS0tLS0tLS0tLS0tCisKK05vcm1hbCBtb2RlIGNvbW1hbmRzOiB+CisKKyJnaSIJCUp1bXAgdG8gdGhlIF4gbWFyayBhbmQgc3RhcnQgSW5zZXJ0IG1vZGUuICBBbHNvIHdvcmtzIHdoZW4gdGhlCisJCW1hcmsgaXMganVzdCBhZnRlciB0aGUgbGluZS4gfGdpfAorCisiZydtIiBhbmQgImdgbSIKKwkJSnVtcCB0byBhIG1hcmsgd2l0aG91dCBjaGFuZ2luZyB0aGUganVtcGxpc3QuICBOb3cgeW91IGNhbiB1c2UKKwkJZ2AiIHRvIGp1bXAgdG8gdGhlIGxhc3Qga25vd24gcG9zaXRpb24gaW4gYSBmaWxlIHdpdGhvdXQgc2lkZQorCQllZmZlY3RzLiAgQWxzbyB1c2VmdWwgaW4gbWFwcGluZ3MuCisKK1snLCBbYCwgXScgYW5kIF1gCisJCW1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dC9wcmV2aW91cyBsb3dlcmNhc2UgbWFyay4KKworZ18JCUdvIHRvIGxhc3Qgbm9uLWJsYW5rIGluIGxpbmUuIChTdGV2ZSBXYWxsKQorCisKK09wdGlvbnM6IH4KKworJ2F1dG9yZWFkJwlXaGVuIGRldGVjdGVkIHRoYXQgYSBmaWxlIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0sCisJCWF1dG9tYXRpY2FsbHkgcmVhZCBhIGJ1ZmZlciBhZ2FpbiB3aGVuIGl0J3Mgbm90IGNoYW5nZWQuCisJCUl0IGhhcyBhIGdsb2JhbCBhbmQgYSBsb2NhbCB2YWx1ZS4gIFVzZSAiOnNldGxvY2FsIGF1dG9yZWFkPCIKKwkJdG8gZ28gYmFjayB0byB1c2luZyB0aGUgZ2xvYmFsIHZhbHVlIGZvciAnYXV0b3JlYWQnLgorCisnZGVidWcnCQlXaGVuIHNldCB0byAibXNnIiBpdCB3aWxsIHByaW50IGVycm9yIG1lc3NhZ2VzIHRoYXQgd291bGQKKwkJb3RoZXJ3aXNlIGJlIG9taXR0ZWQuICBVc2VmdWwgZm9yIGRlYnVnZ2luZyAnaW5kZW50ZXhwcicgYW5kCisJCSdmb2xkZXhwcicuCisKKydsaXNwd29yZHMnCUxpc3Qgb2Ygd29yZHMgdXNlZCBmb3IgbGlzcCBpbmRlbnRpbmcuICBJdCB3YXMgcHJldmlvdXNseSBoYXJkCisJCWNvZGVkLiAgQWRkZWQgYSBudW1iZXIgb2YgTGlzcCBuYW1lcyB0byB0aGUgZGVmYXVsdC4KKworJ2ZvbGQuLi4nCU1hbnkgbmV3IG9wdGlvbnMgZm9yIGZvbGRpbmcuCisKKydtb2RpZmlhYmxlJwlXaGVuIG9mZiwgaXQgaXMgaW1wb3NzaWJsZSB0byBtYWtlIGNoYW5nZXMgdG8gYSBidWZmZXIuCisJCVRoZSAlbSBhbmQgJU0gaXRlbXMgaW4gJ3N0YXR1c2xpbmUnIHNob3cgYSAnLScuCisKKydwcmV2aWV3d2luZG93JyBTZXQgaW4gdGhlIHByZXZpZXcgd2luZG93LiAgVXNlZCBpbiBhIHNlc3Npb24gZmlsZSB0byBtYXJrIGEKKwkJd2luZG93IGFzIHRoZSBwcmV2aWV3IHdpbmRvdy4KKworJ3ByaW50Zm9udCcKKydwcmludGV4cHInCisncHJpbnRoZWFkZXInCisncHJpbnRkZXZpY2UnCisncHJpbnRvcHRpb25zJwlmb3IgIjpoYXJkY29weSIuCisKKydidWZsaXN0ZWQnCU1ha2VzIGEgYnVmZmVyIGFwcGVhciBpbiB0aGUgYnVmZmVyIGxpc3Qgb3Igbm90LgorCitVc2UgInZpbXt2ZXJzaW9ufToiIGZvciBtb2RlbGluZXMsIG9ubHkgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgdmVyc2lvbiBpcworPj0ge3ZlcnNpb259LiAgQWxzbyAidmltPnt2ZXJzaW9ufSIsICJ2aW08e3ZlcnNpb259IiBhbmQgInZpbT17dmVyc2lvbn0iLgorCisKK0V4IGNvbW1hbmRzOiB+CisKKzpzYXZbZWFzXVshXSB7ZmlsZX0KKwkJV29ya3MgbGlrZSAiOncgZmlsZSIgYW5kICI6ZSAjIiwgYnV0IHdpdGhvdXQgbG9hZGluZyB0aGUgZmlsZQorCQlhZ2FpbiBhbmQgYXZvaWRpbmcgb3RoZXIgc2lkZSBlZmZlY3RzLiB8OnNhdmVhc3wKKworOnNpbGVudFshXSB7Y21kfQorCQlFeGVjdXRlIGEgY29tbWFuZCBzaWxlbnRseS4gIEFsc28gZG9uJ3QgdXNlIGEgZGVsYXkgdGhhdCB3b3VsZAorCQljb21lIGFmdGVyIHRoZSBtZXNzYWdlLiAgQW5kIGRvbid0IGRvICdzaG93bWF0Y2gnLgorCQlSSVNDT1M6IFJlbW92ZWQgdGhhdCAiIX5jbWQiIGRpZG4ndCBvdXRwdXQgYW55dGhpbmcsIGFuZAorCQlkaWRuJ3Qgd2FpdCBmb3IgPEVudGVyPiBhZnRlcndhcmRzLiAgQ2FuIHVzZSAiOnNpbGVudCAhY21kIgorCQlub3cuCis6bWVudSA8c2lsZW50PiAgQWRkIGEgbWVudSB0aGF0IHdvbid0IGVjaG8gRXggY29tbWFuZHMuCis6bWFwIDxzaWxlbnQ+ICAgQWRkIGEgbWFwcGluZyB0aGF0IHdvbid0IGVjaG8gRXggY29tbWFuZHMuCisKKzpjaGVja3RpbWUJQ2hlY2sgZm9yIGNoYW5nZWQgYnVmZmVycy4KKworOnZlcmJvc2Uge2NtZH0gIFNldCAndmVyYm9zZScgZm9yIG9uZSBjb21tYW5kLgorCis6ZWNob21zZyB7ZXhwcn0KKzplY2hvZXJyIHtleHByfSBMaWtlICI6ZWNobyIgYnV0IHN0b3JlIHRoZSBtZXNzYWdlIGluIHRoZSBoaXN0b3J5LiAoTWFyaworCQlXYWdnb25lcikKKworOmdyZXBhZGQJV29ya3MganVzdCBsaWtlICI6Z3JlcCIgYnV0IGFkZHMgdG8gdGhlIGN1cnJlbnQgZXJyb3IgbGlzdAorCQlpbnN0ZWFkIG9mIGRlZmluaW5nIGEgbmV3IGxpc3QuIHw6Z3JlcGFkZHwKKworOmZpbmlzaAkJRmluaXNoIHNvdXJjaW5nIGEgZmlsZS4gIENhbiBiZSB1c2VkIHRvIHNraXAgdGhlIHJlc3Qgb2YgYSBWaW0KKwkJc2NyaXB0LiB8OmZpbmlzaHwKKworOmxlZnRhYm92ZQorOmFib3ZlbGVmdAlTcGxpdCBsZWZ0L2Fib3ZlIGN1cnJlbnQgd2luZG93LgorCis6cmlnaHRiZWxvdworOmJlbG93cmlnaHQJU3BsaXQgcmlnaHQvYmVsb3cgY3VycmVudCB3aW5kb3cuCisKKzpmaXJzdCwgOmJmaXJzdCwgOnB0Zmlyc3QsIGV0Yy4KKwkJQWxpYXMgZm9yICI6cmV3aW5kIi4gIEl0J3MgbW9yZSBsb2dpY2FsIGNvbXBhcmVkIHRvICI6bGFzdCIuCisKKzplbmV3CQlFZGl0IGEgbmV3LCB1bm5hbWVkIGJ1ZmZlci4gIFRoaXMgaXMgbmVlZGVkLCBiZWNhdXNlICI6ZWRpdCIKKwkJcmUtZWRpdHMgdGhlIHNhbWUgZmlsZS4gKFdhbGwpCisKKzpxdWl0YWxsCVNhbWUgYXMgIjpxYWxsIi4KKworOm1hdGNoCQlEZWZpbmUgbWF0Y2ggaGlnaGxpZ2h0aW5nIGxvY2FsIHRvIGEgd2luZG93LiAgQWxsb3dzCisJCWhpZ2hsaWdodGluZyBhbiBpdGVtIGluIHRoZSBjdXJyZW50IHdpbmRvdyB3aXRob3V0IGludGVyZmVyaW5nCisJCXdpdGggc3ludGF4IGhpZ2hsaWdodGluZy4KKworOm1lbnUgZW5hYmxlCis6bWVudSBkaXNhYmxlCUNvbW1hbmRzIHRvIGVuYWJsZS9kaXNhYmxlIG1lbnUgZW50cmllcyB3aXRob3V0IHJlbW92aW5nIHRoZW0uCisJCShNb25pc2ggU2hhaCkKKworOndpbmRvCQlFeGVjdXRlIGEgY29tbWFuZCBpbiBhbGwgd2luZG93cy4KKzpidWZkbwkJRXhlY3V0ZSBhIGNvbW1hbmQgaW4gYWxsIGJ1ZmZlcnMuCisKKzp3aW5jbWQJCVdpbmRvdyAoQ1RSTC1XKSBjb21tYW5kLiAgVXNlZnVsIHdoZW4gYSBOb3JtYWwgbW9kZSBjb21tYW5kCisJCWNhbid0IGJlIHVzZWQgKGUuZy4sIGZvciBhIEN1cnNvckhvbGQgYXV0b2NvbW1hbmQpLiAgU2VlCisJCXxDdXJzb3JIb2xkLWV4YW1wbGV8IGZvciBhIG5pY2UgYXBwbGljYXRpb24gd2l0aCBpdC4KKworOmxjZCBhbmQgOmxjaGRpcgorCQlTZXQgbG9jYWwgZGlyZWN0b3J5IGZvciBhIHdpbmRvdy4gKEJlbmppZSBDaGVuKQorCis6aGlkZSB7Y29tbWFuZH0KKwkJRXhlY3V0ZSB7Y29tbWFuZH0gd2l0aCAnaGlkZGVuJyBzZXQuCisKKzplbWVudQkJaW4gVmlzdWFsIG1vZGUgdG8gZXhlY3V0ZSBhICI6dm1lbnUiIGVudHJ5LgorCis6cG9wdXAJCVBvcCB1cCBhIHBvcHVwIG1lbnUuCisKKzpyZWRyYXcJCVJlZHJhdyB0aGUgc2NyZWVuIGV2ZW4gd2hlbiBidXN5IHdpdGggYSBzY3JpcHQgb3IgZnVuY3Rpb24uCisKKzpoYXJkY29weQlQcmludCB0byBwYXBlci4KKworOmNvbXBpbGVyCUxvYWQgYSBWaW0gc2NyaXB0IHRvIGRvIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGNvbXBpbGVyLgorCis6eiMJCUxpc3QgbnVtYmVyZWQgbGluZXMuIChCb2hkYW4gVmxhc3l1aykKKworCitOZXcgbWFya3M6IH4KKworJyggYW5kICcpCUJlZ2luIG9yIGVuZCBvZiBjdXJyZW50IHNlbnRlbmNlLiAgVXNlZnVsIGluIEV4IGNvbW1hbmRzLgorJ3sgYW5kICd9CUJlZ2luIG9yIGVuZCBvZiBjdXJyZW50IHBhcmFncmFwaC4gIFVzZWZ1bCBpbiBFeCBjb21tYW5kcy4KKycuCQlQb3NpdGlvbiBvZiB0aGUgbGFzdCBjaGFuZ2UgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgorJ14JCVBvc2l0aW9uIHdoZXJlIEluc2VydCBtb2RlIHdhcyBzdG9wcGVkLgorCitTdG9yZSB0aGUgXiBhbmQgLiBtYXJrcyBpbiB0aGUgdmltaW5mbyBmaWxlLiAgTWFrZXMgaXQgcG9zc2libGUgdG8ganVtcCB0byB0aGUKK2xhc3QgaW5zZXJ0IHBvc2l0aW9uIG9yIGNoYW5nZWQgdGV4dC4KKworCitOZXcgZnVuY3Rpb25zOiB+CithcmdpZHgoKQlDdXJyZW50IGluZGV4IGluIGFyZ3VtZW50IGxpc3QuCitidWZsaXN0ZWQoKQlDaGVja3MgaWYgdGhlIGJ1ZmZlciBleGlzdHMgYW5kIGhhcyAnYnVmbGlzdGVkJyBzZXQuCitjaW5kZW50KCkJR2V0IGluZGVudCBhY2NvcmRpbmcgdG8gJ2NpbmRlbnQnLgorZXZlbnRoYW5kbGVyKCkJUmV0dXJucyAxIHdoZW4gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXIgYW5kIGludGVyYWN0aXZlCisJCWNvbW1hbmRzIGNhbid0IGJlIHVzZWQuCitleGVjdXRhYmxlKCkJQ2hlY2tzIGlmIGEgcHJvZ3JhbSBvciBiYXRjaCBzY3JpcHQgY2FuIGJlIGV4ZWN1dGVkLgorZmlsZXdyaXRhYmxlKCkJQ2hlY2tzIGlmIGEgZmlsZSBjYW4gYmUgd3JpdHRlbi4gKFJvbiBBYXJvbikKK2ZvbGRjbG9zZWQoKQlGaW5kIG91dCBpZiB0aGVyZSBpcyBhIGNsb3NlZCBmb2xkLiAoSm9oYW5uZXMgWmVsbG5lcikuCitmb2xkY2xvc2VlbmQoKQlGaW5kIHRoZSBlbmQgb2YgYSBjbG9zZWQgZm9sZC4KK2ZvbGRsZXZlbCgpCUZpbmQgb3V0IHRoZSBmb2xkbGV2ZWwuIChKb2hhbm5lcyBaZWxsbmVyKQorZm9yZWdyb3VuZCgpCU1vdmUgdGhlIEdVSSB3aW5kb3cgdG8gdGhlIGZvcmVncm91bmQuCitnZXRjaGFyKCkJR2V0IG9uZSBjaGFyYWN0ZXIgZnJvbSB0aGUgdXNlci4gIENhbiBiZSB1c2VkIHRvIGRlZmluZSBhCisJCW1hcHBpbmcgdGhhdCB0YWtlcyBhbiBhcmd1bWVudC4KK2dldGNoYXJtb2QoKQlHZXQgbGFzdCB1c2VkIGtleSBtb2RpZmllci4KK2dldGJ1ZnZhcigpCWdldHMgdGhlIHZhbHVlIG9mIGFuIG9wdGlvbiBvciBsb2NhbCB2YXJpYWJsZSBpbiBhIGJ1ZmZlciAoUm9uCisJCUFhcm9uKQorZ2V0ZnNpemUoKQlSZXR1cm4gdGhlIHNpemUgb2YgYSBmaWxlLgorZ2V0d2ludmFyKCkJZ2V0cyB0aGUgdmFsdWUgb2YgYW4gb3B0aW9uIG9yIGxvY2FsIHZhcmlhYmxlIGluIGEgd2luZG93IChSb24KKwkJQWFyb24pCitnbG9icGF0aCgpCUZpbmQgbWF0Y2hpbmcgZmlsZXMgaW4gYSBsaXN0IG9mIGRpcmVjdG9yaWVzLgoraGFzbWFwdG8oKQlEZXRlY3QgaWYgYSBtYXBwaW5nIHRvIGEgc3RyaW5nIGlzIGFscmVhZHkgcHJlc2VudC4KK2ljb252KCkJCUNvbnZlcnQgYSBzdHJpbmcgZnJvbSBvbmUgZW5jb2RpbmcgdG8gYW5vdGhlci4KK2luZGVudCgpCWdldHMgdGhlIGluZGVudCBvZiBhIGxpbmUgKFJvbiBBYXJvbikKK2lucHV0ZGlhbG9nKCkJTGlrZSBpbnB1dCgpIGJ1dCB1c2UgYSBHVUkgZGlhbG9nIHdoZW4gcG9zc2libGUuICBDdXJyZW50bHkKKwkJb25seSB3b3JrcyBmb3IgV2luMzIsIE1vdGlmLCBBdGhlbmEgYW5kIEdUSy4KKwkJVXNlIGlucHV0ZGlhbG9nKCkgZm9yIHRoZSBFZGl0L1NldHRpbmdzL1RleHQgV2lkdGggbWVudS4gIEFsc28KKwkJZm9yIHRoZSBIZWxwL0ZpbmQuLiBhbmQgVG9vbGJhciBGaW5kSGVscCBpdGVtcy4KKwkJKFdpbjMyIHN1cHBvcnQgYnkgVGhvcmUgQi4gS2FybHNlbikKKwkJKFdpbjE2IHN1cHBvcnQgYnkgVmluY2UgTmVncmkpCitpbnB1dHNlY3JldCgpCUFzayB0aGUgdXNlciB0byB0eXBlIGEgc3RyaW5nIHdpdGhvdXQgc2hvd2luZyB0aGUgdHlwZWQga2V5cy4KKwkJKENoYXJsZXMgQ2FtcGJlbGwpCitsaWJjYWxsKCkJZm9yIFVuaXggKE5laWwgQmlyZCwgSm9oYW5uZXMgWmVsbG5lciwgU3RlcGhlbiBXYWxsKQorbGliY2FsbG5yKCkJZm9yIFdpbjMyIGFuZCBVbml4CitsaXNwaW5kZW50KCkJR2V0IGluZGVudCBhY2NvcmRpbmcgdG8gJ2xpc3AnLgorbW9kZSgpCQlSZXR1cm4gYSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgbW9kZS4KK25leHRub25ibGFuaygpCVNraXAgYmxhbmsgbGluZXMgZm9yd2FyZHMuCitwcmV2bm9uYmxhbmsoKQlTa2lwIGJsYW5rIGxpbmVzIGJhY2t3YXJkcy4gIFVzZWZ1bCB0byBmb3IgaW5kZW50IHNjcmlwdHMuCityZXNvbHZlKCkJTVMtV2luZG93czogcmVzb2x2ZSBhIHNob3J0Y3V0IHRvIHRoZSBmaWxlIGl0IHBvaW50cyB0by4KKwkJVW5peDogcmVzb2x2ZSBhIHN5bWJvbGljIGxpbmsuCitzZWFyY2goKQlTZWFyY2ggZm9yIGEgcGF0dGVybi4KK3NlYXJjaHBhaXIoKQlTZWFyY2ggZm9yIG1hdGNoaW5nIHBhaXIuICBDYW4gYmUgdXNlZCBpbiBpbmRlbnQgZmlsZXMgdG8gZmluZAorCQl0aGUgImlmIiBtYXRjaGluZyBhbiBlbmRpZi4KK3NldGJ1ZnZhcigpCXNldHMgYW4gb3B0aW9uIG9yIHZhcmlhYmxlIGxvY2FsIHRvIGEgYnVmZmVyIChSb24gQWFyb24pCitzZXR3aW52YXIoKQlzZXRzIGFuIG9wdGlvbiBvciB2YXJpYWJsZSBsb2NhbCB0byBhIHdpbmRvdyAoUm9uIEFhcm9uKQorc3RyaWR4KCkJU2VhcmNoIGZvciBmaXJzdCBvY2N1cnJlbmNlIG9mIG9uZSBzdHJpbmcgaW4gYW5vdGhlci4KK3N0cnJpZHgoKQlTZWFyY2ggZm9yIGxhc3Qgb2NjdXJyZW5jZSBvZiBvbmUgc3RyaW5nIGluIGFub3RoZXIuCit0b2xvd2VyKCkJQ29udmVydCBzdHJpbmcgdG8gYWxsLWxvd2VyY2FzZS4KK3RvdXBwZXIoKQlDb252ZXJ0IHN0cmluZyB0byBhbGwtdXBwZXJjYXNlLgordHlwZSgpCQlDaGVjayB0aGUgdHlwZSBvZiBhbiBleHByZXNzaW9uLgord2luY29sKCkJd2luZG93IGNvbHVtbiBvZiB0aGUgY3Vyc29yCit3aW53aWR0aCgpCVdpZHRoIG9mIGEgd2luZG93LiAoSm9oYW5uZXMgWmVsbG5lcikKK3dpbmxpbmUoKQl3aW5kb3cgbGluZSBvZiB0aGUgY3Vyc29yCisKKworQWRkZWQgZXhwYW5zaW9uIG9mIGN1cmx5IGJyYWNlcyBpbiB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICBUaGlzIGNhbiBiZQordXNlZCBmb3IgdmFyaWFibGUgbmFtZXMgdGhhdCBpbmNsdWRlIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24uICBPciBhIHByaW1pdGl2ZQorZm9ybSBvZiBhcnJheXMuIChWaW5jZSBOZWdyaSkKKworCitOZXcgYXV0b2NvbW1hbmQgZXZlbnRzOiB+CitCdWZXaW5FbnRlcglUcmlnZ2VyZWQgd2hlbiBhIGJ1ZmZlciBpcyBkaXNwbGF5ZWQgaW4gYSB3aW5kb3csIGFmdGVyIHVzaW5nCisJCXRoZSBtb2RlbGluZXMuICBDYW4gYmUgdXNlZCB0byBsb2FkIGEgdmlldy4KK0J1ZldpbkxlYXZlCVRyaWdnZXJlZCB3aGVuIGEgYnVmZmVyIGlzIG5vIGxvbmdlciBpbiBhIHdpbmRvdy4gIEFsc28KKwkJdHJpZ2dlcmVkIHdoZW4gZXhpdGluZyBWaW0uICBDYW4gYmUgdXNlZCB0byBzYXZlIHZpZXdzLgorRmlsZUNoYW5nZWRSTwlUcmlnZ2VyZWQgYmVmb3JlIG1ha2luZyB0aGUgZmlyc3QgY2hhbmdlIHRvIGEgcmVhZC1vbmx5IGZpbGUuCisJCUNhbiBiZSB1c2VkIHRvIGNoZWNrLW91dCB0aGUgZmlsZS4gKFNjb3R0IEdyYWhhbSkKK1Rlcm1SZXNwb25zZQlUcmlnZ2VyZWQgd2hlbiB0aGUgdGVybWluYWwgcmVwbGllcyB0byB0aGUgdmVyc2lvbi1yZXF1ZXN0LgorCQlUaGUgdjp0ZXJtcmVzcG9uc2UgaW50ZXJuYWwgdmFyaWFibGUgaG9sZHMgdGhlIHJlc3VsdC4gIENhbiBiZQorCQl1c2VkIHRvIHJlYWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSB0ZXJtaW5hbC4gIChSb25hbGQgU2NoaWxkKQorRmlsZVJlYWRDbWQJVHJpZ2dlcmVkIGJlZm9yZSByZWFkaW5nIGEgZmlsZS4KK0J1ZlJlYWRDbWQJVHJpZ2dlcmVkIGJlZm9yZSByZWFkaW5nIGEgZmlsZSBpbnRvIGEgYnVmZmVyLgorRmlsZVdyaXRlQ21kCVRyaWdnZXJlZCBiZWZvcmUgd3JpdGluZyBhIGZpbGUuCitCdWZXcml0ZUNtZAlUcmlnZ2VyZWQgYmVmb3JlIHdyaXRpbmcgYSBidWZmZXIgaW50byBhIGZpbGUuCitGaWxlQXBwZW5kQ21kCVRyaWdnZXJlZCBiZWZvcmUgYXBwZW5kaW5nIHRvIGEgZmlsZS4KK0Z1bmNVbmRlZmluZWQJVHJpZ2dlcmVkIHdoZW4gYSB1c2VyIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkLiAoUm9uIEFhcm9uKQorCitUaGUgYXV0b2NvbW1hbmRzIGZvciB0aGUgKkNtZCBldmVudHMgcmVhZCBvciB3cml0ZSB0aGUgZmlsZSBpbnN0ZWFkIG9mIG5vcm1hbAorZmlsZSByZWFkL3dyaXRlLiAgVXNlIHRoaXMgaW4gbmV0cncudmltIHRvIGJlIGFibGUgdG8gZWRpdCBmaWxlcyBvbiBhIHJlbW90ZQorc3lzdGVtLiAoQ2hhcmxlcyBDYW1wYmVsbCkKKworCitOZXcgU3ludGF4IGZpbGVzOiB+CisKK2JkZgkJQkRGIGZvbnQgZGVmaW5pdGlvbiAoTmlrb2xhaSBXZWlidWxsKQorY2F0YWxvZwkJU0dNTCBjYXRhbG9nIChKb2hhbm5lcyBaZWxsbmVyKQorZGViY2hhbmdlbG9nCURlYmlhbiBDaGFuZ2Vsb2cgKFdpY2hlcnQgQWtrZXJtYW4pCitkZWJjb250cm9sCURlYmlhbiBDb250cm9sIChXaWNoZXJ0IEFra2VybWFuKQorZG90CQlkb3QgKE1hcmt1cyBNb3R0bCkKK2RzbAkJRFNTU0wgc3ludGF4IChKb2hhbm5lcyBaZWxsbmVyKQorZXRlcm0JCUV0ZXJtIGNvbmZpZ3VyYXRpb24gKE5pa29sYWkgV2VpYnVsbCkKK2luZGVudAkJSW5kZW50IHByb2ZpbGUgKE5pa29sYWkgV2VpYnVsbCkKK2xmdHAJCUxGVFAgKE5pa29sYWkgV2VpYnVsbCkKK2x5bngJCUx5bnggY29uZmlnIChEb3VnIEtlYXJucykKK211c2gJCW11c2ggc291cmNlY29kZSAoQmVrIE9iZXJpbikKK25hdHVyYWwJCU5hdHVyYWwgKE1hcmtvIExlaXBlcnQpCitwaWxyYwkJUGFsIHJlc291cmNlIGNvbXBpbGVyIChCcmlhbiBTY2hhdSkKK3BsbQkJUEwvTSAoUGhpbGlwcGUgQ291bG9uZ2VzKQorcG92aW5pCQlQb3ZyYXkgY29uZmlndXJhdGlvbiAoRGF2aWQgTmVjYXMpCityYXRwb2lzb24JUmF0cG9pc29uIGNvbmZpZy9jb21tYW5kIChEb3VnIEtlYXJucykKK3JlYWRsaW5lCXJlYWRsaW5lIGNvbmZpZyAoTmlrb2xhaSBXZWlidWxsKQorc2NyZWVuCQlTY3JlZW4gUkMgKE5pa29sYWkgV2VpYnVsbCkKK3NwZWNtYW4JCVNwZWNtYW4gKE9yIEZyZXVuZCkKK3NxbGZvcm1zCVNRTCpGb3JtcyAoQXVzdGluIFppZWdsZXIpCit0ZXJtaW5mbwl0ZXJtaW5mbyAoTmlrb2xhaSBXZWlidWxsKQordGlkeQkJVGlkeSBjb25maWd1cmF0aW9uIChEb3VnIEtlYXJucykKK3dnZXQJCVdnZXQgY29uZmlndXJhdGlvbiAoRG91ZyBLZWFybnMpCisKKworVXBkYXRlZCBtYW55IHN5bnRheCBmaWxlcyB0byB3b3JrIGJvdGggd2l0aCBWaW0gNS43IGFuZCA2LjAuCisKK0ludGVyZmFjZSB0byBSdWJ5LiAoU2h1Z28gTWFlZGEpCitTdXBwb3J0IGR5bmFtaWMgbG9hZGluZyBvZiB0aGUgUnVieSBpbnRlcmZhY2Ugb24gTVMtV2luZG93cy4gKE11cmFva2EgVGFybykKK1N1cHBvcnQgdGhpcyBmb3IgTWluZ3cgdG9vLiAoQmVub2l0IENlcnJpbmEpCisKK1dpbjMyOiBBZGRlZCBwb3NzaWJpbGl0eSB0byBsb2FkIFRDTCBkeW5hbWljYWxseS4gKE11cmFva2EgVGFybykKK0Fsc28gZm9yIEJvcmxhbmQgNS41LiAoRGFuIFNoYXJwKQorCitXaW4zMjogV2hlbiBlZGl0aW5nIGEgZmlsZSB0aGF0IGlzIGEgc2hvcnRjdXQgKCoubG5rIGZpbGUpLCBlZGl0IHRoZSBmaWxlIGl0CitsaW5rcyB0by4gIFVubGVzcyAnYmluYXJ5JyBpcyBzZXQsIHRoZW4gZWRpdCB0aGUgc2hvcnRjdXQgZmlsZSBpdHNlbGYuCisoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCitUaGUgIjpjb21tYW5kIiBjb21tYW5kIG5vdyBhY2NlcHRzIGEgIi1iYXIiIGFyZ3VtZW50LiAgVGhpcyBhbGxvd3MgdGhlIHVzZXIKK2NvbW1hbmQgdG8gYmUgZm9sbG93ZWQgYnkgInwgY29tbWFuZCIuCisKK1RoZSBwcmV2aWV3IHdpbmRvdyBpcyBub3cgYWxzbyB1c2VkIGJ5IHRoZXNlIGNvbW1hbmRzOgorLSB8OnBlZGl0fCBlZGl0cyB0aGUgc3BlY2lmaWVkIGZpbGUgaW4gdGhlIHByZXZpZXcgd2luZG93CistIHw6cHNlYXJjaHwgc2VhcmNoZXMgZm9yIGEgd29yZCBpbiBpbmNsdWRlZCBmaWxlcywgbGlrZSB8OmlqdW1wfCwgYW5kCisgIGRpc3BsYXlzIHRoZSBmb3VuZCB0ZXh0IGluIHRoZSBwcmV2aWV3IHdpbmRvdy4KK0FkZGVkIHRoZSBDVFJMLVcgUCBjb21tYW5kOiBnbyB0byBwcmV2aWV3IHdpbmRvdy4KKworTVMtRE9TIGFuZCBNUy1XaW5kb3dzIGFsc28gcmVhZCB0aGUgc3lzdGVtLXdpZGUgdmltcmMgZmlsZSAkVklNL3ZpbXJjLiAgTW9zdGx5Citmb3IgTlQgc3lzdGVtcyB3aXRoIG11bHRpcGxlIHVzZXJzLgorCitBIGRvdWJsZS1jbGljayBvZiB0aGUgbW91c2Ugb24gYSBjaGFyYWN0ZXIgdGhhdCBoYXMgYSAiJSIgbWF0Y2ggc2VsZWN0cyBmcm9tCit0aGF0IGNoYXJhY3RlciB0byB0aGUgbWF0Y2guICBTaW1pbGFyIHRvICJ2JSIuCisKKyItUyBzZXNzaW9uLnZpbSIgYXJndW1lbnQ6IFNvdXJjZSBhIHNjcmlwdCBmaWxlIHdoZW4gc3RhcnRpbmcgdXAuICBDb252ZW5pZW50Cit3YXkgdG8gc3RhcnQgVmltIHdpdGggYSBzZXNzaW9uIGZpbGUuCisKK0FkZGVkICItLWNtZCB7Y29tbWFuZH0iIFZpbSBhcmd1bWVudCB0byBleGVjdXRlIGEgY29tbWFuZCBiZWZvcmUgYSB2aW1yYyBmaWxlCitpcyBsb2FkZWQuIChWaW5jZSBOZWdyaSkKKworQWRkZWQgdGhlICItTSIgVmltIGFyZ3VtZW50OiByZXNldCAnbW9kaWZpYWJsZScgYW5kICd3cml0ZScsIHRodXMgZGlzYWxsb3cKK21ha2luZyBjaGFuZ2VzIGFuZCB3cml0aW5nIGZpbGVzLgorCitBZGRlZCBydW50aW1lL2RlbG1lbnUudmltLiAgU291cmNlIHRoaXMgdG8gcmVtb3ZlIGFsbCBtZW51cyBhbmQgcHJlcGFyZSBmb3IKK2xvYWRpbmcgbmV3IG1lbnVzLiAgVXNlZnVsIHdoZW4gY2hhbmdpbmcgJ2xhbmdtZW51Jy4KKworUGVybCBzY3JpcHQgdG8gZmlsdGVyIFBlcmwgZXJyb3IgbWVzc2FnZXMgdG8gcXVpY2tmaXggdXNhYmxlIGZvcm1hdC4gKEpvZXJnCitaaWVmbGUpCisKK0FkZGVkIHJ1bnRpbWUvbWFjcm9zL2xlc3MudmltOiBWaW0gc2NyaXB0IHRvIHNpbXVsYXRlIGxlc3MsIGJ1dCB3aXRoIHN5bnRheAoraGlnaGxpZ2h0aW5nLgorCitNUy1XaW5kb3dzIGluc3RhbGwgcHJvZ3JhbTogKEpvbiBNZXJ6KQorLSBUaGUgV2luMzIgcHJvZ3JhbSBjYW4gbm93IGNyZWF0ZSBzaG9ydGN1dHMgb24gdGhlIGRlc2t0b3AgYW5kIGluc3RhbGwgVmltIGluCisgIHRoZSBTdGFydCBtZW51LgorLSBQb3NzaWJseSByZW1vdmUgb2xkICJFZGl0IHdpdGggVmltIiBlbnRyaWVzLgorLSBUaGUgVmltIGV4ZWN1dGFibGUgaXMgbmV2ZXIgbW92ZWQgb3IgJFBBVEggY2hhbmdlZC4gIEEgc21hbGwgYmF0Y2ggZmlsZSBpcworICBjcmVhdGVkIGluIGEgZGlyZWN0b3J5IGluICRQQVRILiAgRmV3ZXIgY2hvaWNlcyB0byBiZSBtYWRlLgorLSBEZXRlY3QgYWxyZWFkeSBpbnN0YWxsZWQgVmltIHZlcnNpb25zIGFuZCBvZmZlciB0byB1bmluc3RhbGwgdGhlbSBmaXJzdC4KKworSW1wcm92ZWQgdGhlIE1TLVdpbmRvd3MgdW5pbnN0YWwgcHJvZ3JhbS4gIEl0IG5vdyBhbHNvIGRlbGV0ZXMgdGhlIGVudHJpZXMgaW4KK3RoZSBTdGFydCBtZW51LCBpY29ucyBmcm9tIHRoZSBkZXNrdG9wIGFuZCB0aGUgY3JlYXRlZCBiYXRjaCBmaWxlcy4gKEpvbiBNZXJ6KQorQWxzbyBtYWRlIGl0IHBvc3NpYmxlIHRvIGRlbGV0ZSBvbmx5IHNvbWUgb2YgdGhlc2UuICBBbHNvIHVucmVnaXN0ZXIgZ3ZpbSBmb3IKK09MRS4KKworR2VuZXJhdGUgYSBzZWxmLWluc3RhbGxpbmcgVmltIHBhY2thZ2UgZm9yIE1TLVdpbmRvd3MuICBUaGlzIHVzZXMgTlNJUy4gKEpvbgorTWVyeiBldCBhbC4pCisKK0FkZGVkICI6ZmlsZXR5cGUgZGV0ZWN0Ii4gIFRyeSBkZXRlY3RpbmcgdGhlIGZpbGV0eXBlIGFnYWluLiAgSGVscHMgd2hlbgord3JpdGluZyBhIG5ldyBzaGVsbCBzY3JpcHQsIGFmdGVyIGFkZGluZyAiIyEvYmluL2NzaCIuCisKK0FkZGVkICI6YXVncm91cCEgbmFtZSIgdG8gZGVsZXRlIGFuIGF1dG9jb21tYW5kIGdyb3VwLiAgTmVlZGVkIGZvciB0aGUKK2NsaWVudC1zZXJ2ZXIgIi0tcmVtb3RlLXdhaXQiLgorCitBZGQgdGhlIFZpbSB2ZXJzaW9uIG51bWJlciB0byB0aGUgdmltaW5mbyBmaWxlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJTVBST1ZFTUVOVFMJCQkJCQkqaW1wcm92ZW1lbnRzLTYqCisKK0FkZGVkIHRoZSAnbicgZmxhZyBpbiAnY3BvcHRpb25zJzogV2hlbiBvbWl0dGVkIHRleHQgb2Ygd3JhcHBlZCBsaW5lcyBpcyBub3QKK3B1dCBiZXR3ZWVuIGxpbmUgbnVtYmVycyBmcm9tICdudW1iZXInIG9wdGlvbi4gIE1ha2VzIGl0IGEgbG90IGVhc2llciB0byByZWFkCit3cmFwcGVkIGxpbmVzLgorCitXaGVuIHRoZXJlIGlzIGEgZm9ybWF0IGVycm9yIGluIGEgdGFncyBmaWxlLCB0aGUgYnl0ZSBwb3NpdGlvbiBpcyByZXBvcnRlZCBzbwordGhhdCB0aGUgZXJyb3IgY2FuIGJlIGxvY2F0ZWQuCisKKyJnZiIgd29ya3MgaW4gVmlzdWFsIG1vZGU6IFVzZSB0aGUgc2VsZWN0ZWQgdGV4dCBhcyB0aGUgZmlsZSBuYW1lLiAoQ2hhc2UKK1RpbmdsZXkpCisKK0FsbG93IGFtYmlndW91cyBtYXBwaW5ncy4gIFRodXMgImFhIiBhbmQgImFhYSIgY2FuIGJvdGggYmUgbWFwcGVkLCB0aGUgbG9uZ2VzdAorbWF0Y2hpbmcgb25lIGlzIHVzZWQuICBFc3BlY2lhbGx5IHVzZWZ1bCBmb3IgIjpsbWFwIiBhbmQgJ2tleW1hcCcuCisKK0VuY3J5cHRpb246IEFzayB0aGUga2V5IHRvIGJlIHR5cGVkIHR3aWNlIHdoZW4gY3J5cHRpbmcgdGhlIGZpcnN0IHRpbWUuCitPdGhlcndpc2UgYSB0eXBvIG1pZ2h0IGNhdXNlIHRoZSB0ZXh0IHRvIGJlIGxvc3QgZm9yZXZlci4gKENoYXNlIFRpbmdsZXkpCisKK1RoZSB3aW5kb3cgdGl0bGUgbm93IGhhcyAiVklNIiBvbiB0aGUgZW5kLiAgVGhlIGZpbGUgbmFtZSBjb21lcyBmaXJzdCwgdXNlZnVsCitpbiB0aGUgdGFza2Jhci4gIEEgIisiIGlzIGFkZGVkIHdoZW4gdGhlIGZpbGUgaXMgbW9kaWZpZWQuICAiPSIgaXMgYWRkZWQgZm9yCithIHJlYWQtb25seSBmaWxlLiAgIi0iIGlzIGFkZGVkIGZvciBhIGZpbGUgd2l0aCAnbW9kaWZpYWJsZScgb2ZmLgorCitJbiBWaXN1YWwgbW9kZSwgbWVudGlvbiB0aGUgc2l6ZSBvZiB0aGUgc2VsZWN0ZWQgYXJlYSBpbiB0aGUgJ3Nob3djbWQnCitwb3NpdGlvbi4KKworQWRkZWQgdGhlICJiOmNoYW5nZWR0aWNrIiB2YXJpYWJsZS4gIEluY3JlbWVudGVkIGF0IGVhY2ggY2hhbmdlLCBhbHNvIGZvcgordW5kby4gIENhbiBiZSB1c2VkIHRvIHRha2UgYWN0aW9uIG9ubHkgaWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBjaGFuZ2VkLgorCitJbiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIG9mIGEgIjpzIiBjb21tYW5kICJcPSIgY2FuIGJlIHVzZWQgdG8gcmVwbGFjZSB3aXRoCit0aGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24uICBGcm9tIHRoaXMgZXhwcmVzc2lvbiB0aGUgc3VibWF0Y2goKSBmdW5jdGlvbiBjYW4KK2JlIHVzZWQgdG8gYWNjZXNzIHN1Ym1hdGNoZXMuCisKK1doZW4gZG9pbmcgIjpxYWxsIiBhbmQgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYSBidWZmZXIgdGhhdCBpcyBiZWluZyBlZGl0ZWQgaW4KK2Fub3RoZXIgd2luZG93LCBqdW1wIHRvIHRoYXQgd2luZG93LCBpbnN0ZWFkIG9mIGVkaXRpbmcgdGhhdCBidWZmZXIgaW4gdGhlCitjdXJyZW50IHdpbmRvdy4KKworQWRkZWQgdGhlICIrK2VuYz0iIGFuZCAiKytmZj0iIGFyZ3VtZW50cyB0byBmaWxlIHJlYWQvd3JpdGUgY29tbWFuZHMgdG8gZm9yY2UKK3VzaW5nIHRoZSBnaXZlbiAnZW5jb2RpbmcnIG9yICdmaWxlZm9ybWF0Jy4gIEFuZCBhZGRlZCB0aGUgInY6Y21kYXJnIgordmFyaWFibGUsIHRvIGJlIHVzZWQgZm9yIEZpbGVSZWFkQ21kIGF1dG9jb21tYW5kcyB0aGF0IHJlYWQvd3JpdGUgdGhlIGZpbGUKK3RoZW1zZWx2ZXMuCisKK1doZW4gcmVhZGluZyBzdGRpbiwgZmlyc3QgcmVhZCB0aGUgdGV4dCBpbiBiaW5hcnkgbW9kZSBhbmQgdGhlbiByZS1yZWFkIGl0Cit3aXRoIGF1dG9tYXRpYyBzZWxlY3Rpb24gb2YgJ2ZpbGVmb3JtYXQnIGFuZCAnZmlsZWVuY29kaW5nJy4gIFRoaXMgYXZvaWRzCitwcm9ibGVtcyB3aXRoIG5vdCBiZWluZyBhYmxlIHRvIHJld2luZCB0aGUgZmlsZSAoZS5nLiwgd2hlbiBhIGxpbmUgbmVhciB0aGUKK2VuZCBvZiB0aGUgZmlsZSBlbmRzIGluIExGIGluc3RlYWQgb2YgQ1ItTEYpLgorV2hlbiByZWFkaW5nIHRleHQgZnJvbSBzdGRpbiBhbmQgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgZG9uJ3QgbWFyayBpdCBjaGFuZ2VkLgorQWxsb3dzIGV4aXRpbmcgd2l0aG91dCB0cm91YmxlLgorCitBZGRlZCBhbiBJRCB0byBtYW55IGVycm9yIG1lc3NhZ2VzLiAgVGhpcyB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgaGVscCBmb3IKK2EgbWVzc2FnZS4KKworSW5zZXJ0IG1vZGU6CistICJDVFJMLUcgaiIgYW5kICJDVFJMLUcgayIgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IGluIGFub3RoZXIgbGluZSBpbiB0aGUgc2FtZQorICBjb2x1bW4uICBVc2VmdWwgZm9yIGVkaXRpbmcgYSB0YWJsZS4KKy0gQWRkZWQgVGhlc2F1cnVzIGNvbXBsZXRpb24gd2l0aCBDVFJMLVggQ1RSTC1ULiAoVmluY2UgTmVncmkpCistIEFkZGVkIHRoZSAndGhlc2F1cnVzJyBvcHRpb24sIHRvIHVzZSBpbnN0ZWFkIG9mICdkaWN0aW9uYXJ5JyBmb3IgdGhlc2F1cnVzCisgIGNvbXBsZXRpb24uICBBZGRlZCB0aGUgJ3MnIGZsYWcgaW4gJ2NvbXBsZXRlJy4KKy0gTWFkZSBDVFJMLVggQ1RSTC1MIGluIEluc2VydCBtb2RlIHVzZSB0aGUgJ2NvbXBsZXRlJyBvcHRpb24uICBJdCBub3cgYWxzbworICBzY2FucyBvdGhlciBsb2FkZWQgYnVmZmVycyBmb3IgbWF0Y2hpbmcgbGluZXMuCistIENUUkwtUiBub3cgYWxzbyB3b3JrcyBpbiBJbnNlcnQgbW9kZSB3aGlsZSBkb2luZyBjb21wbGV0aW9uIHdpdGggQ1RSTC1YIG9yCisgIENUUkwtTi4gKE5laWwgQmlyZCkKKy0gV2hlbiBkb2luZyBJbnNlcnQgbW9kZSBjb21wbGV0aW9uLCB3aGVuIGNvbXBsZXRpb24gaXMgZmluaXNoZWQgY2hlY2sgZm9yIGEKKyAgbWF0Y2ggd2l0aCB3b3JkcyBmcm9tICdjaW5rZXlzJyBvciAnaW5kZW50a2V5cycuCisKK1BlcmZvcm1hbmNlOgorLSBNYWRlIGRpc3BsYXkgdXBkYXRpbmcgbW9yZSBlZmZpY2llbnQuICBJbnNlcnQvZGVsZXRlIGxpbmVzIG1heSBiZSB1c2VkIGZvcgorICBhbGwgY2hhbmdlcywgYWxzbyBmb3IgdW5kby9yZWRvLgorLSBUaGUgZGlzcGxheSBpcyBub3QgcmVkcmF3biB3aGVuIHRoZXJlIGlzIHR5cGVhaGVhZCBpbiBJbnNlcnQgbW9kZS4gIFNwZWVkcworICB1cCBDVFJMLVIgYSBsb3QuCistIEltcHJvdmVkIHNwZWVkIG9mIHNjcmVlbiBvdXRwdXQgZm9yIDMyIGJpdCBET1MgdmVyc2lvbi4gKFZpbmNlIE5lZ3JpKQorLSBXaGVuIGRyYWdnaW5nIHdpdGggdGhlIG1vdXNlLCB0aGVyZSBpcyBhIGxvb2thaGVhZCB0byBza2lwIG1vdXNlIGNvZGVzIHdoZW4KKyAgdGhlcmUgaXMgYW5vdGhlciBvbmUgbmV4dC4gIE1ha2VzIGRyYWdnaW5nIHdpdGggdGhlIG1vdXNlIGEgbG90IGZhc3Rlci4KKy0gQWxzbyBhIG1lbW9yeSB1c2FnZSBpbXByb3ZlbWVudDogV2hlbiBjYWxsaW5nIHVfc2F2ZSB3aXRoIGEgc2luZ2xlIGxpbmUsCisgIGRvbid0IHNhdmUgaXQgaWYgdGhlIGxpbmUgd2FzIHJlY2VudGx5IHNhdmVkIGZvciB0aGUgc2FtZSB1bmRvIGFscmVhZHkuCistIFdoZW4gdXNpbmcgYSBzY3JpcHQgdGhhdCBhcHBlbmRzIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lLCB0aGUgYW1vdW50IG9mCisgIGFsbG9jYXRlZCBtZW1vcnkgd2FzIGdyb3dpbmcgc3RlYWRpbHkuICBBbHNvIHdoZW4gJ3VuZG9sZXZlbHMnIGlzIC0xLgorICBDYXVzZWQgYnkgdGhlIGxpbmUgc2F2ZWQgZm9yICJVIiBuZXZlciB0byBiZSBmcmVlZC4gIE5vdyBmcmVlIGFuIHVuZG8gYmxvY2sKKyAgd2hlbiBpdCBiZWNvbWVzIGVtcHR5LgorLSBHVUkgYW5kIERvczMyOiBVc2UgYSB2ZXJ0aWNhbCBzY3JvbGwgcmVnaW9uLCB0byBtYWtlIHNjcm9sbGluZyBpbiBhCisgIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93IGZhc3Rlci4gIE5vIG5lZWQgdG8gcmVkcmF3IHRoZSB3aG9sZSB3aW5kb3cuCistIFdoZW4gc2Nyb2xsaW5nIGlzbid0IHBvc3NpYmxlIHdpdGggdGVybWluYWwgY29kZXMgKGUuZy4sIGZvciBhIHZlcnRpY2FsbHkKKyAgc3BsaXQgd2luZG93KSByZWRyYXcgZnJvbSBTY3JlZW5MaW5lc1tdLiAgVGhhdCBzaG91bGQgYmUgZmFzdGVyIHRoYW4gZ29pbmcKKyAgdGhyb3VnaCB0aGUgbGluZXMgd2l0aCB3aW5fbGluZSgpLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgc3ludGF4CisgIGhpZ2hsaWdodGluZy4KKy0gVGhlIFN5bnRheCBtZW51IGlzIG5vdyBwcmUtZ2VuZXJhdGVkIGJ5IGEgc2VwYXJhdGUgc2NyaXB0LiAgTWFrZXMgbG9hZGluZworICB0aGUgbWVudSA3MCUgZmFzdGVyLiAgVGhpcyBjYW4gaGFsdmUgdGhlIHN0YXJ0dXAgdGltZSBvZiBndmltLgorLSBXaGVuIGRvaW5nICI6aGVscCB0YWciLCBkb24ndCBvcGVuIGhlbHAudHh0IGZpcnN0LCBqdW1wIGRpcmVjdGx5IHRvIHRoZSBoZWxwCisgIHRhZy4gIEl0J3MgZmFzdGVyIGFuZCBhdm9pZHMgYW4gZXh0cmEgbWVzc2FnZS4KKy0gV2luMzI6IFdoZW4gYSBmaWxlIG5hbWUgZG9lc24ndCBlbmQgaW4gIi5sbmsiIGRvbid0IHRyeSByZXNvbHZpbmcgYQorICBzaG9ydGN1dCwgaXQgdGFrZXMgcXVpdGUgYSBiaXQgb2YgdGltZS4KKy0gRG9uJ3QgdXBkYXRlIHRoZSBtb3VzZSBwb2ludGVyIHNoYXBlIHdoaWxlIHRoZXJlIGFyZSB0eXBlYWhlYWQgY2hhcmFjdGVycy4KKy0gQ2hhbmdlIE1FVEFbXSBmcm9tIGEgc3RyaW5nIGludG8gYW4gYXJyYXksIGF2b2lkcyB1c2luZyBzdHJjaHIoKSBvbiBpdC4KKy0gRG9uJ3QgY2xlYXIgdGhlIGNvbW1hbmQgbGluZSB3aGVuIGFkZGluZyBjaGFyYWN0ZXJzLCBhdm9pZHMgdGhhdCBzY3JlZW5fZmlsbAorICBpcyBjYWxsZWQgYnV0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCisKK1JvYnVzdG5lc3M6CistIFVuaXg6IENoZWNrIGZvciBydW5uaW5nIG91dCBvZiBzdGFjayBzcGFjZSB3aGVuIGV4ZWN1dGluZyBhIHJlZ2V4cC4gIEF2b2lkcworICBhIG5hc3R5IGNyYXNoLiAgT25seSB3b3JrcyB3aGVuIHRoZSBzeXN0ZW0gc3VwcG9ydHMgcnVubmluZyB0aGUgc2lnbmFsCisgIGZ1bmN0aW9uIG9uIGFub3RoZXIgc3RhY2suCistIERpc2FsbG93ICI6c291cmNlIDxkaXJuYW1lPiIuICBPbiB1bml4IGl0J3MgcG9zc2libGUgdG8gcmVhZCBhIGRpcmVjdG9yeSwKKyAgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgaXQgYXMgVmltIGNvbW1hbmRzLgorCitTZWN1cml0eToKKy0gV2hlbiByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhIHRlbXBvcmFyeSBmaWxlLCBjaGVjayB0aGF0IGl0IGlzbid0IGEKKyAgc3ltYm9saWMgbGluay4gIEdpdmVzIHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IHN5bWxpbmsgYXR0YWNrcy4KKy0gV2hlbiBjcmVhdGluZyBhIGJhY2t1cCBmaWxlIGNvcHkgb3IgYSBzd2FwIGZpbGUsIGNoZWNrIGZvciBpdCBhbHJlYWR5CisgIGV4aXN0aW5nIHRvIGF2b2lkIGEgc3ltbGluayBhdHRhY2suIChDb2xpbiBQaGlwcHMpCistIEV2YWx1YXRpbmcgb3B0aW9ucyB3aGljaCBhcmUgYW4gZXhwcmVzc2lvbiBpcyBkb25lIGluIGEgfHNhbmRib3h8LiAgSWYgdGhlCisgIG9wdGlvbiB3YXMgc2V0IGJ5IGEgbW9kZWxpbmUsIGl0IGNhbm5vdCBjYXVzZSBkYW1hZ2UuCistIFVzZSBhIHNlY3VyZSB3YXkgdG8gZ2VuZXJhdGUgdGVtcCBmaWxlIG5hbWVzOiBDcmVhdGUgYSBwcml2YXRlIGRpcmVjdG9yeSBmb3IKKyAgdGVtcCBmaWxlcy4gIFVzZWQgZm9yIFVuaXgsIE1TLURPUyBhbmQgT1MvMi4KKy0gJ21ha2VlZicgY2FuIGJlIGVtcHR5LCB3aGljaCBtZWFucyB0aGF0IGFuIGludGVybmFsbHkgZ2VuZXJhdGVkIGZpbGUgbmFtZSBpcworICB1c2VkLiAgVGhlIG9sZCBkZWZhdWx0IHdhcyAiL3RtcC9maWxlIiwgd2hpY2ggaXMgYSBzZWN1cml0eSByaXNrLgorICBXcml0aW5nICdtYWtlZWYnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmYWlscyBpbiBhIHJlYWQtb25seSBkaXJlY3RvcnkgYW5kCisgIGNhdXNlcyB0cm91YmxlIHdoZW4gdXNpbmcgIjpncmVwIiBvbiBhbGwgZmlsZXMuICBNYWRlIHRoZSBkZWZhdWx0IGVtcHR5IGZvcgorICBhbGwgc3lzdGVtcywgc28gdGhhdCBhIHRlbXAgZmlsZSBpcyB1c2VkLgorLSBUaGUgY29tbWFuZCBmcm9tIGEgdGFncyBmaWxlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW5kYm94IGZvciBiZXR0ZXIgc2VjdXJpdHkuCistIFRoZSBSdWJ5LCBUY2wgYW5kIFB5dGhvbiBpbnRlcmZhY2VzIGNhbm5vdCBiZSB1c2VkIGZyb20gdGhlIHNhbmRib3guICBUaGV5CisgIG1pZ2h0IGRvIGRhbmdlcm91cyB0aGluZ3MuICBQZXJsIGlzIHN0aWxsIHBvc3NpYmxlLCBidXQgbGltaXRlZCB0byB0aGUgU2FmZQorICBlbnZpcm9ubWVudC4gKERvbm5pZSBTbWl0aCkKKworU3ludGF4IGhpZ2hsaWdodGluZzoKKy0gT3B0aW1pemVkIHRoZSBzcGVlZCBieSBjYWNoaW5nIHRoZSBzdGF0ZSBzdGFjayBhbGwgb3ZlciB0aGUgZmlsZSwgbm90IGp1c3QKKyAgdGhlIHBhcnQgYmVpbmcgZGlzcGxheWVkLiAgUmVxdWlyZWQgZm9yIGZvbGRpbmcuCistIEFkZGVkICI6c3ludGF4IHN5bmMgZnJvbXN0YXJ0IjogQWx3YXlzIHBhcnNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgorLSBBZGRlZCB0aGUgImRpc3BsYXkiIGFyZ3VtZW50IGZvciBzeW50YXggaXRlbXM6IHVzZSB0aGUgaXRlbSBvbmx5IHdoZW4KKyAgZGlzcGxheWluZyB0aGUgcmVzdWx0LiAgQ2FuIG1ha2UgcGFyc2luZyBmYXN0ZXIgZm9yIHRleHQgdGhhdCBpc24ndCBnb2luZyB0bworICBiZSBkaXNwbGF5ZWQuCistIFdoZW4gdXNpbmcgQ1RSTC1MLCB0aGUgY2FjaGVkIHN0YXRlcyBhcmUgZGVsZXRlZCwgdG8gZm9yY2UgcGFyc2luZyB0aGUgdGV4dAorICBhZ2Fpbi4KKy0gVXNlIGVsZmhhc2ggYWxnb3JpdGhtIGZvciB0YWJsZSBvZiBrZXl3b3Jkcy4gIFRoaXMgc2hvdWxkIGdpdmUgYSBiZXR0ZXIKKyAgZGlzdHJpYnV0aW9uIGFuZCBzcGVlZHVwIGtleXdvcmQgbG9va3VwLiAoQ2FtcGJlbGwpCistIEFsc28gYWxsb3cgdGhlICJsYyIgbGVhZGluZyBjb250ZXh0IGZvciBza2lwIGFuZCBlbmQgcGF0dGVybnMuIChTY290dAorICBCaWdoYW0pCistIFN5bnRheCBpdGVtcyBjYW4gaGF2ZSB0aGUgImV4dGVuZCIgYXJndW1lbnQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIGEKKyAgImtlZXBlbmQiIGFyZ3VtZW50IG9mIGFuIGl0ZW0gaXQgaXMgY29udGFpbmVkIGluLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gaGF2ZQorICBzb21lIGNvbnRhaW5lZCBpdGVtcyBleHRlbmQgYSByZWdpb24gd2hpbGUgb3RoZXJzIGRvbid0LgorLSAiOnN5bnRheCBjbGVhciIgbm93IGRlbGV0ZXMgdGhlIGI6Y3VycmVudF9zeW50YXggdmFyaWFibGUuICBUaGF0J3MgbG9naWNhbCwKKyAgc2luY2Ugbm8gc3ludGF4IGlzIGRlZmluZWQgYWZ0ZXIgdGhpcyBjb21tYW5kLgorLSBBZGRlZCAiOnN5bnRheCBlbmFibGUiOiBzd2l0Y2ggb24gc3ludGF4IGhpZ2hsaWdodGluZyB3aXRob3V0IGNoYW5naW5nIHRoZQorICBjb2xvcnMuICBUaGlzIGFsbG93cyBzcGVjaWZ5aW5nIHRoZSBjb2xvcnMgaW4gdGhlIC52aW1yYyBmaWxlIHdpdGhvdXQgdGhlCisgIG5lZWQgZm9yIGEgbXlzeW50YXhmaWxlLgorLSBBZGRlZCAiOnN5bnRheCByZXNldCI6IHJlc2V0IHRoZSBjb2xvcnMgdG8gdGhlaXIgZGVmYXVsdHMuCistIEFkZGVkIHRoZSAiY29udGFpbnM9VE9QIiBhbmQgImNvbnRhaW5zPUNPTlRBSU5FRCIgYXJndW1lbnRzLiAgTWFrZXMgaXQKKyAgcG9zc2libGUgdG8gZGVmaW5lIGEgdHJhbnNwYXJlbnQgaXRlbSB0aGF0IGRvZXNuJ3QgY29udGFpbiBpdHNlbGYuCistIEFkZGVkIGEgImNvbnRhaW5lZGluIiBhcmd1bWVudCB0byBzeW50YXggaXRlbXMuICBBbGxvd3MgYWRkaW5nIGEgY29udGFpbmVkCisgIGl0ZW0gdG8gYW4gZXhpc3RpbmcgaXRlbSAoZS5nLiwgdG8gaGlnaGxpZ2h0IGEgbmFtZSBpbiBhIGNvbW1lbnQpLgorCitNb2RlbGVzcyBzZWxlY3Rpb246CistIFdoZW4gaW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3csIHVzZSBtb2RlbGVzcyBzZWxlY3Rpb24gaW4gdGhlIG90aGVyCisgIHdpbmRvd3MuICBNYWtlcyBpdCBwb3NzaWJsZSB0byBjb3B5IHZpc2libGUgdGV4dCB0byB0aGUgY29tbWFuZC1saW5lIHdpbmRvdy4KKy0gU3VwcG9ydCBtb2RlbGVzcyBzZWxlY3Rpb24gb24gdGhlIGNtZGxpbmUgaW4gYSB0ZXJtaW5hbC4gIFByZXZpb3VzbHkgaXQgd2FzCisgIG9ubHkgcG9zc2libGUgZm9yIHRoZSBHVUkuCistIE1ha2UgZG91YmxlLXJpZ2h0LWNsaWNrIGluIG1vZGVsZXNzIHNlbGVjdGlvbiBzZWxlY3QgYSB3aG9sZSB3b3JkLiAgU2luZ2xlCisgIHJpZ2h0IGNsaWNrIGRvZXNuJ3QgdXNlIHRoZSB3b3JkIHNlbGVjdGlvbiBzdGFydGVkIGJ5IGEgZG91YmxlLWxlZnQtY2xpY2suCisgIE1ha2VzIGl0IHdvcmsgbGlrZSBpbiBWaXN1YWwgbW9kZS4KKy0gVGhlIG1vZGVsZXNzIHNlbGVjdGlvbiBubyBsb25nZXIgaGFzIGFuIGltcGxpZWQgYXV0b21hdGljIGNvcHkgdG8gdGhlCisgIGNsaXBib2FyZC4gIEl0IG5vdyBvYmV5cyB0aGUgJ2EnIGFuZCAnQScgZmxhZ3MgaW4gJ2d1aW9wdGlvbnMnIG9yCisgICJhdXRvc2VsZWN0IiBhbmQgImF1dG9zZWxlY3RtbCIgaW4gJ2NsaXBib2FyZCcuCistIEFkZGVkIHRoZSBDVFJMLVkgY29tbWFuZCBpbiBDbWRsaW5lLW1vZGUgdG8gY29weSB0aGUgbW9kZWxlc3Mgc2VsZWN0aW9uIHRvCisgIHRoZSBjbGlwYm9hcmQuICBBbHNvIHdvcmtzIGF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0IGFuZCB0aGUgbW9yZSBwcm9tcHQuCisgIFJlbW92ZWQgdGhlIG1hcHBpbmdzIGluIHJ1bnRpbWUvbXN3aW4udmltIGZvciBDVFJMLVkgYW5kIENUUkwtWiBpbgorICBjbWRsaW5lLW1vZGUgdG8gYmUgYWJsZSB0byB1c2UgQ1RSTC1ZIGluIHRoZSBuZXcgd2F5LgorCitSZWR1Y2VkIHRoZSBhbW91bnQgb2Ygc3RhY2sgc3BhY2UgdXNlZCBieSByZWdtYXRjaCgpIHRvIGFsbG93IGl0IHRvIGhhbmRsZQorY29tcGxpY2F0ZWQgcGF0dGVybnMgb24gYSBsb25nZXIgdGV4dC4KKworJ2lzZm5hbWUnIG5vdyBpbmNsdWRlcyAnJScgYW5kICcjJy4gIE1ha2VzICJ2aW0gZGlyXCNmaWxlIiB3b3JrIGZvciBNUy1ET1MuCisKK0FkZGVkIGtleXBhZCBzcGVjaWFsIGtleXMgPGtFbnRlcj4sIDxrMD4gLSA8azk+LiAgV2hlbiBub3QgbWFwcGVkIHRoZXkgYmVoYXZlCitsaWtlIHRoZSBBU0NJSSBlcXVpdmFsZW50LiAoSXZhbiBXZWxsZXN6IGFuZCBWaW5jZSBOZWdyaSkKK1JlY29nbml6ZSBhIGZldyBtb3JlIHh0ZXJtIGtleXM6IDxDLVJpZ2h0PiwgPEMtTGVmdD4sIDxDLUVuZD4sIDxDLUhvbWU+CisKK0Fsc28gdHJpZ2dlciB0aGUgQnVmVW5sb2FkIGV2ZW50IHdoZW4gVmltIGlzIGdvaW5nIHRvIGV4aXQuICBQZXJoYXBzIGEgc2NyaXB0CituZWVkcyB0byBkbyBzb21lIGNsZWFuaW5nIHVwLgorCitFeHBhbmQgZXhwcmVzc2lvbiBpbiBiYWNrdGlja3M6IGA9e2V4cHJ9YC4gIENhbiBiZSB1c2VkIHdoZXJlIGJhY2t0aWNrCitleHBhbnNpb24gaXMgZG9uZS4gKFZpbmNlIE5lZ3JpKQorCitHVUk6CistIEFkZGVkICdMJyBhbmQgJ1InIGZsYWdzIGluICdndWlvcHRpb25zJzogQWRkIGEgbGVmdCBvciByaWdodCBzY3JvbGxiYXIgb25seQorICB3aGVuIHRoZXJlIGlzIGEgdmVydGljYWxseSBzcGxpdCB3aW5kb3cuCistIFgxMTogV2hlbiBhIGNvbG9yIGNhbid0IGJlIGFsbG9jYXRlZCwgdXNlIHRoZSBuZWFyZXN0IG1hdGNoIGZyb20gdGhlCisgIGNvbG9ybWFwLiAgVGhpcyBhdm9pZHMgdGhhdCBibGFjayBpcyB1c2VkIGZvciBtYW55IHRoaW5ncy4gKE1vbmlzaCBTaGFoKQorICBBbHNvIGRvIHRoaXMgZm9yIHRoZSBtZW51IGFuZCBzY3JvbGxiYXIsIHRvIGF2b2lkIHRoYXQgdGhleSBiZWNvbWUgYmxhY2suCistIFdpbjMyIGFuZCBYMTE6IEFkZGVkICdtb3VzZXNoYXBlJyBvcHRpb246IEFkanVzdCB0aGUgbW91c2UgcG9pbnRlciBzaGFwZSB0bworICB0aGUgY3VycmVudCBtb2RlLiAoVmluY2UgTmVncmkpCistIEFkZGVkIHRoZSAnbGluZXNwYWNlJyBvcHRpb246IEluc2VydCBhIHBpeGVsIGxpbmUgYmV0d2VlbiBsaW5lcy4gKE5hbSkKKy0gQWxsb3cgbW9kZWxlc3Mgc2VsZWN0aW9uICh3aXRob3V0IG1vdmluZyB0aGUgY3Vyc29yKSBieSBrZWVwaW5nIENUUkwgYW5kCisgIFNISUZUIHByZXNzZWQuIChJdmFuIFdlbGxlc3opCistIE1vdGlmOiBhZGRlZCB0b29sYmFyLiAoR29yZG9uIFByaWV1cikgIEFsc28gYWRkZWQgdG9vbHRpcHMuCistIEF0aGVuYTogYWRkZWQgdG9vbGJhciBhbmQgdG9vbHRpcHMuIChEYXZpZCBIYXJyaXNvbiAtLSBiYXNlZCBvbiBHb3Jkb24KKyAgUHJpZXVyJ3Mgd29yaykKKy0gTWFkZSB0aGUgJ3Rvb2xiYXInIG9wdGlvbiB3b3JrIGZvciBBdGhlbmEgYW5kIE1vdGlmLiAgQ2FuIG5vdyBzd2l0Y2ggYmV0d2VlbgorICB0ZXh0IGFuZCBpY29ucyBvbiB0aGUgZmx5LiAgKERhdmlkIEhhcnJpc29uKQorLSBTdXBwb3J0IG1lbnUgc2VwYXJhdG9yIGxpbmVzIGZvciBBdGhlbmEuICAoRGF2aWQgSGFycmlzb24pCistIEF0aGVuYTogQWRqdXN0IHRoZSBhcnJvdyBwaXhtYXAgdXNlZCBpbiBhIHB1bGxyaWdodCBtZW51IHRvIHRoZSBzaXplIG9mIHRoZQorICBmb250LiAoRGF2aWQgSGFycmlzb24pCistIFdpbjMyOiBBZGRlZCAiYyIgZmxhZyB0byAnZ3VpZm9udCcgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IHRoZSBjaGFyc2V0LiAoQXJ0ZW0KKyAgS2hvZHVzaCkKKy0gV2hlbiBubyAtLWVuYWJsZS14aW0gYXJndW1lbnQgaXMgZ2l2ZW4sIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGl0IHdoZW4gYSBYIEdVSQorICBpcyB1c2VkLiAgUmVxdWlyZWQgZm9yIGRlYWQga2V5IHN1cHBvcnQgKGFuZCBtdWx0aS1ieXRlIGlucHV0KS4KKy0gQWZ0ZXIgYSBmaWxlIHNlbGVjdGlvbiBkaWFsb2csIGNoZWNrIHRoYXQgdGhlIGVkaXRlZCBmaWxlcyB3ZXJlIG5vdCBjaGFuZ2VkCisgIG9yIGRlbGV0ZWQuICBUaGUgV2luMzIgZGlhbG9nIGFsbG93cyBkZWxldGluZyBhbmQgcmVuYW1pbmcgZmlsZXMuCistIE1vdGlmIGFuZCBBdGhlbmE6IEFkZGVkIHN1cHBvcnQgZm9yICJlZGl0cmVzIi4gKE1hcnRpbiBEYWxlY2tpKQorLSBNb3RpZiBhbmQgQXRoZW5hOiBBZGRlZCAibWVudUZvbnQiIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhIGZvbnQgb3IgZm9udHNldAorICBmb3IgdGhlIG1lbnVzLiAgQ2FuIGFsc28gYmUgc2V0IHdpdGggdGhlICJNZW51IiBoaWdobGlnaHQgZ3JvdXAuICBVc2VmdWwKKyAgd2hlbiB0aGUgbG9jYWxlIGlzIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycuIChEYXZpZCBIYXJyaXNvbikKKyAgV2hlbiBGT05UU0VUX0FMV0FZUyBpcyBkZWZpbmVkLCBhbHdheXMgdXNlIGEgZm9udHNldCBmb3IgdGhlIG1lbnVzLiAgU2hvdWxkCisgIGF2b2lkIHRyb3VibGUgd2l0aCBjaGFuZ2luZyBmcm9tIGEgZm9udCB0byBhIGZvbnRzZXQuICAoRGF2aWQgSGFycmlzb24pCistIEhpZ2hsaWdodGluZyBhbmQgZm9udCBmb3IgdGhlIHRvb2x0aXBzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgIlRvb2x0aXAiCisgIGhpZ2hsaWdodCBncm91cC4gKERhdmlkIEhhcnJpc29uKQorLSBUaGUgQ21kbGluZS1tb2RlIG1lbnVzIGNhbiBiZSB1c2VkIGF0IHRoZSBtb3JlLXByb21wdC4gIFRoaXMgbW9zdGx5IHdvcmtzCisgIGZpbmUsIGJlY2F1c2UgdGhleSBzdGFydCB3aXRoIGEgQ1RSTC1DLiAgVGhlICJDb3B5IiBtZW51IHdvcmtzIHRvIGNvcHkgdGhlCisgIG1vZGVsZXNzIHNlbGVjdGlvbi4gIEFsbG93cyBjb3B5aW5nIHRoZSBvdXRwdXQgb2YgIjpzZXQgYWxsIiBvciAiOmludHJvIgorICB3aXRob3V0IGF1dG8tc2VsZWN0aW9uLgorLSBXaGVuIHN0YXJ0aW5nIHRoZSBHVUkgd2hlbiB0aGVyZSBpcyBubyB0ZXJtaW5hbCBjb25uZWN0ZWQgdG8gc3Rkb3V0IGFuZAorICBzdGRlcnIsIGRpc3BsYXkgZXJyb3IgbWVzc2FnZXMgaW4gYSBkaWFsb2cuICBQcmV2aW91c2x5IHRoZXkgd291bGRuJ3QgYmUKKyAgZGlzcGxheWVkIGF0IGFsbC4KKy0gQWxsb3cgc2V0dGluZyAnYnJvd3NlZGlyJyB0byB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSwgdG8gYmUgdXNlZCBmb3IgdGhlCisgIGZpbGUgZGlhbG9nLiAoRGFuIFNoYXJwKQorLSBiOmJyb3dzZWZpbHRlciBhbmQgZzpicm93c2VmaWx0ZXIgY2FuIGJlIHNldCB0byB0aGUgZmlsdGVycyB1c2VkIGZvciB0aGUKKyAgZmlsZSBkaWFsb2cuICBTdXBwb3J0ZWQgZm9yIFdpbjMyIGFuZCBNb3RpZiBHVUkuIChEYW4gU2hhcnApCisKK1gxMToKKy0gU3VwcG9ydCBmb3IgdGhlIGNsaXBib2FyZCBzZWxlY3Rpb24gYXMgcmVnaXN0ZXIgIisuICBXaGVuIGV4aXRpbmcgb3IKKyAgc3VzcGVuZGluZyBjb3B5IHRoZSBzZWxlY3Rpb24gdG8gY3V0IGJ1ZmZlciAwLiAgU2hvdWxkIGFsbG93IGNvcHkvcGFzdGUgd2l0aAorICBtb3JlIGFwcGxpY2F0aW9ucyBpbiBhIFgxMS1zdGFuZGFyZCB3YXkuICAoTmVpbCBCaXJkKQorLSBVc2UgdGhlIFggY2xpcGJvYXJkIGluIGFueSB0ZXJtaW5hbCwgbm90IGp1c3QgaW4gYW4geHRlcm0uCisgIEFkZGVkICJleGNsdWRlOiIgaW4gJ2NsaXBib2FyZCc6IFNwZWNpZnkgYSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgdGVybWluYWwKKyAgbmFtZXMgZm9yIHdoaWNoIG5vIGNvbm5lY3Rpb24gc2hvdWxkIGJlIG1hZGUgdG8gdGhlIFggc2VydmVyLiAgVGhlIGRlZmF1bHQKKyAgY3VycmVudGx5IHdvcmsgZm9yIEZyZWVCU0QgYW5kIExpbnV4IGNvbnNvbGVzLgorLSBBZGRlZCBhIGZldyBtZXNzYWdlcyBmb3Igd2hlbiAndmVyYm9zZScgaXMgbm9uLXplcm8gdG8gc2hvdyB3aGF0IGhhcHBlbnMKKyAgd2hlbiB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIuICBTaG91bGQgaGVscCB3aGVuIHRyeWluZyB0byBmaW5kIG91dAorICB3aHkgc3RhcnR1cCBpcyBzbG93LgorCitHVEsgR1VJOiAocGFydGx5IGJ5IE1hcmNpbiBEYWxlY2tpKQorLSBXaXRoIHNvbWUgZm9udHMgdGhlIGNoYXJhY3RlcnMgY2FuIGJlIHRhbGxlciB0aGFuIGFzY2VudCArIGRlc2NlbnQuICBFLmcuLAorICAiLW1pc2MtZml4ZWQtKi0qLSotKi0xOC0qLSotKi0qLSotaXNvMTA2NDYtMSIuICBBZGQgb25lIHRvIHRoZSBjaGFyYWN0ZXIKKyAgY2VsbCBoZWlnaHQuCistIEltcGxlbWVudCAibm8iIHZhbHVlIGZvciAnd2luYWx0a2V5cyc6IGRvbid0IHVzZSBBbHQtS2V5IGFzIGEgbWVudSBzaG9ydGN1dCwKKyAgd2hlbiAnd2FrJyBjaGFuZ2VkIGFmdGVyIGNyZWF0aW5nIHRoZSBtZW51cy4KKy0gU2V0dGluZyAnd2FrJyBhZnRlciB0aGUgR1VJIHN0YXJ0ZWQgd29ya3MuCistIHJlY3ljbGUgdGV4dCBHQydzIHRvIHJlZHVjZSBjb21tdW5pY2F0aW9uLgorLSBBZGp1c3QgaWNvbiBzaXplIHRvIHdpbmRvdyBtYW5hZ2VyLgorLSBDbGVhbnVwIGluIGZvbnQgaGFuZGxpbmcuCistIFJlcGxhY2UgWFF1ZXJ5Q29sb3Igd2l0aCBHREsgY2FsbHMuCistIEdub21lIHN1cHBvcnQuICBEZXRlY3RzIEdub21lIGluIGNvbmZpZ3VyZSBhbmQgdXNlcyBkaWZmZXJlbnQgd2lkZ2V0cy4KKyAgT3RoZXJ3aXNlIGl0J3MgbXVjaCBsaWtlIEdUSy4gKEFuZHkgS2FobikKKyAgSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBpdCBjYXVzZXMgYSBmZXcgcHJvYmxlbXMuCistIFJlbW92ZWQgdGhlIHNwZWNpYWwgY29kZSB0byBmb3JrIGZpcnN0IGFuZCB0aGVuIHN0YXJ0IHRoZSBHVUkuICBOb3cgdXNlCisgIF9leGl0KCkgaW5zdGVhZCBvZiBleGl0KCksIHRoaXMgd29ya3MgZmluZSB3aXRob3V0IHNwZWNpYWwgdHJpY2tzLgorLSBEaWFsb2dzIHNvbWV0aW1lcyBhcHBlYXJlZCBhIGJpdCBmYXIgYXdheS4gIFBvc2l0aW9uIHRoZSBkaWFsb2dzIGluc2lkZQorICB0aGUgZ3ZpbSB3aW5kb3cuIChCcmVudCBWZXJuZXIpCistIFdoZW4gZHJvcHBpbmcgYSBmaWxlIG9uIFZpbSwgcmVtb3ZlIGV4dHJhIHNsYXNoZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCisgIHBhdGguICBBbHNvIHNob3J0ZW4gdGhlIGZpbGUgbmFtZSBpZiBwb3NzaWJsZS4KKworTW90aWY6IChNYXJ0aW4gRGFsZWNraSkKKy0gTWFkZSB0aGUgZGlhbG9nIGxheW91dCBiZXR0ZXIuCistIEFkZGVkIGZpbmQgYW5kIGZpbmQvcmVwbGFjZSBkaWFsb2dzLgorLSBGb3IgdGhlIG1lbnVzLCBjaGFuZ2UgImlzby04ODU5IiB0byAiaXNvXzg4NTkiLCBMaW51eCBhcHBlYXJzIHRvIG5lZWQgdGhpcy4KKy0gQWRkZWQgaWNvbiB0byBkaWFsb2dzLCBsaWtlIGZvciBHVEsuCistIFVzZSBYUE0gYml0bWFwcyBmb3IgdGhlIGljb24gd2hlbiBwb3NzaWJsZS4gIFVzZSB0aGUgU29sYXJpcyBYcG1QLmggaW5jbHVkZQorICBmaWxlIHdoZW4gaXQncyBhdmFpbGFibGUuCistIENoYW5nZSB0aGUgc2hhZG93IG9mIHRoZSB0b29sYmFyIGl0ZW1zIHRvIGdldCBhIHZpc3VhbCBmZWVkYmFjayBvZiBpdCBiZWluZworICBwcmVzc2VkIG9uIG5vbi1MZXNzVGlmZi4KKy0gVXNlIGdhZGdldHMgaW5zdGVhZCBvZiB3aW5kb3dzIGZvciBzb21lIGl0ZW1zIGZvciBzcGVlZC4KKworQ29tbWFuZCBsaW5lIGNvbXBsZXRpb246CistIENvbXBsZXRlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLiAoTWlrZSBTdGVlZCkKKy0gRm9yICI6Y29tbWFuZCIsIGFkZGVkIGEgZmV3IGNvbXBsZXRpb24gbWV0aG9kczogIm1hcHBpbmciLCAiZnVuY3Rpb24iLAorICAiZXhwcmVzc2lvbiIgYW5kICJlbnZpcm9ubWVudCIuCistIFdoZW4gYSBmdW5jdGlvbiBkb2Vzbid0IHRha2UgYXJndW1lbnRzLCBsZXQgY29tcGxldGlvbiBhZGQgKCkgaW5zdGVhZCBvZiAoLgorCitGb3IgTVMtRE9TLCBNUy1XaW5kb3dzIGFuZCBPUy8yOiBFeHBhbmQgJVZBUiUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgJFZBUi4KKyhXYWx0ZXIgQnJpc2NvZSkKKworUmVkaXJlY3QgbWVzc2FnZXMgdG8gdGhlIGNsaXBib2FyZCAiOnJlZGlyIEAqIiBhbmQgdG8gdGhlIHVubmFtZWQgcmVnaXN0ZXIKKyI6cmVkaXIgQCIiLiAoV2FsbCkKKworIjpsZXQgQC8gPSAnJyIgY2xlYXJzIHRoZSBzZWFyY2ggcGF0dGVybiwgaW5zdGVhZCBvZiBzZXR0aW5nIGl0IHRvIGFuIGVtcHR5CitzdHJpbmcuCisKK0V4cHJlc3Npb24gZXZhbHVhdGlvbjoKKy0gIj8gOiIgY2FuIGJlIHVzZWQgbGlrZSBpbiBDLgorLSBjb2woIiQiKSByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGN1cnNvciBsaW5lIHBsdXMgb25lLiAoU3RlcGhlbiBQLiBXYWxsKQorLSBPcHRpb25hbCBleHRyYSBhcmd1bWVudCBmb3IgbWF0Y2goKSwgbWF0Y2hlbmQoKSBhbmQgbWF0Y2hzdHIoKTogT2Zmc2V0IHRvCisgIHN0YXJ0IGxvb2tpbmcgZm9yIGEgbWF0Y2guCistIE1hZGUgdGhpcmQgYXJndW1lbnQgdG8gc3RycGFydCgpIG9wdGlvbmFsLiAgKFBhdWwgTW9vcmUsIFpkZW5layBTZWtlcmEpCistIGV4aXN0cygpIGNhbiBhbHNvIGJlIHVzZWQgdG8gY2hlY2sgZm9yIEV4IGNvbW1hbmRzIGFuZCBkZWZpbmVkIGF1dG9jb21tYW5kcy4KKy0gQWRkZWQgZXh0cmEgYXJndW1lbnQgdG8gaW5wdXQoKTogRGVmYXVsdCB0ZXh0LgorLSBBbHNvIHNldCAidjplcnJtc2ciIHdoZW4gdXNpbmcgIjpzaWxlbnQhIGNtZCIuCistIEFkZGVkIHRoZSB2OnByZXZjb3VudCB2YXJpYWJsZTogdjpjb3VudCBmb3IgdGhlIHByZXZpb3VzIGNvbW1hbmQuCistIEFkZGVkICJ2OnByb2duYW1lIiwgbmFtZSB3aXRoIHdoaWNoIFZpbSB3YXMgc3RhcnRlZC4gKFZpbmNlIE5lZ3JpKQorLSBJbiB0aGUgdmVyYm9zZSBtZXNzYWdlIGFib3V0IHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24sIGFsc28gc2hvdyB0aGUgcmV0dXJuCisgIHZhbHVlLgorCitDc2NvcGU6CistIEFkZGVkIHRoZSBjc2NvcGVfY29ubmVjdGlvbigpIGZ1bmN0aW9uLiAoQW5keSBLYWhuKQorLSAiOmNzY29wZSBraWxsIC0xIiBraWxscyBhbGwgY3Njb3BlIGNvbm5lY3Rpb25zLiAoQW5keSBLYWhuKQorLSBBZGRlZCB0aGUgJ2NzY29wZXBhdGhjb21wJyBvcHRpb24uIChTY290dCBIYXVjaykKKy0gQWRkZWQgIjpzY3Njb3BlIiBjb21tYW5kLCBzcGxpdCB3aW5kb3cgYW5kIGV4ZWN1dGUgQ3Njb3BlIGNvbW1hbmQuIChKYXNvbgorICBEdWVsbCkKKworVk1TOgorLSBDb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBhbHdheXMgdXBwZXJjYXNlLiAgSW50ZXJwcmV0IGEgIi1YIiBhcmd1bWVudCBhcworICAiLXgiIGFuZCAiLS9YIiBhcyAiLVgiLgorLSBTZXQgJ21ha2VwcmcnIGFuZCAnZ3JlcHByZycgdG8gbWVhbmluZ2Z1bCBkZWZhdWx0cy4gKFpvbHRhbiBBcnBhZGZmeSkKKy0gVXNlIHRoZSBYLWNsaXBib2FyZCBmZWF0dXJlIGFuZCB0aGUgWCBjb21tYW5kIHNlcnZlci4gKFpvbHRhbiBBcnBhZGZmeSkKKworTWFjaW50b3NoOiAoRGFueSBTdC1BbWFudCkKKy0gQWxsb3cgYSB0YWdzIGZpbGUgdG8gaGF2ZSBDUiwgQ1ItTEYgb3IgTEYgbGluZSBzZXBhcmF0b3IuIChBeGVsIEtpZWxob3JuKQorLSBDYXJib25pemVkICh3aGlsZSBrZWVwaW5nIG5vbiBDYXJib24gY29kZSkKKyAgKFNvbWUgd29yayAic3RvbGVuIiBmcm9tIEFtbW9uIFNraWRtb3JlKQorLSBJbXByb3ZlZCB0aGUgbWVudSBpdGVtIGluZGV4IGhhbmRsaW5nIChzaG91bGQgYmUgZmFzdGVyKQorLSBSdW50aW1lIGNvbW1hbmRzIG5vdyBoYW5kbGUgLyBpbiBmaWxlIG5hbWUgKE1hY09TIDkgdmVyc2lvbikKKy0gQWRkZWQgIjp3aW5wb3MiIHN1cHBvcnQuCistIFN1cHBvcnQgdXNpbmcgIn4iIGluIGZpbGUgbmFtZXMgZm9yIGhvbWUgZGlyZWN0b3J5LgorCitPcHRpb25zOgorLSBXaGVuIHVzaW5nIHNldCArPSBvciBePSAsIGNoZWNrIGZvciBpdGVtcyB1c2VkIHR3aWNlLiAgRHVwbGljYXRlcyBhcmUKKyAgcmVtb3ZlZC4gIChWaW5jZSBOZWdyaSkKKy0gV2hlbiBzZXR0aW5nIGFuIG9wdGlvbiB0aGF0IGlzIGEgbGlzdCBvZiBmbGFncywgcmVtb3ZlIGR1cGxpY2F0ZSBmbGFncy4KKy0gSWYgcG9zc2libGUsIHVzZSBnZXRybGltaXQoKSB0byBzZXQgJ21heG1lbXRvdCcgYW5kICdtYXhtZW0nLiAoUGluYSkKKy0gQWRkZWQgImFscGhhIiB0byAnbnJmb3JtYXRzJzogaW5jcmVtZW50IG9yIGRlY3JlbWVudCBhbiBhbHBoYWJldGljIGNoYXJhY3RlcgorICB3aXRoIENUUkwtQSBhbmQgQ1RSTC1YLgorLSAiOnNldCBvcHQmdmkiIHNldHMgYW4gb3B0aW9uIHRvIGl0cyBWaSBkZWZhdWx0LCAiOnNldCBvcHQmdmltIiB0byBpdHMgVmltCisgIGRlZmF1bHQuICBVc2VmdWwgdG8gc2V0ICdjcG8nIHRvIGl0cyBWaW0gZGVmYXVsdCB3aXRob3V0IGtub3dpbmcgd2hhdCBmbGFncworICB0aGF0IGluY2x1ZGVzLgorLSAnc2Nyb2xsb2ZmJyBub3cgYWxzbyBhcHBsaWVzIHRvIGEgbG9uZywgd3JhcHBlZCBsaW5lIHRoYXQgZG9lc24ndCBmaXQgaW4gdGhlCisgIHdpbmRvdy4KKy0gQWRkZWQgbW9yZSBvcHRpb24gc2V0dGluZ3MgdG8gdGhlIGRlZmF1bHQgbWVudXMuCistIFVwZGF0ZWQgdGhlIG9wdGlvbiB3aW5kb3cgd2l0aCBuZXcgb3B0aW9ucy4gIE1hZGUgaXQgYSBiaXQgZWFzaWVyIHRvIHJlYWQuCisKK0ludGVybmFsIGNoYW5nZXM6CistIFNwbGl0IGxpbmUgcG9pbnRlcnMgaW4gdGV4dCBwYXJ0IGFuZCBhdHRyaWJ1dGVzIHBhcnQuICBBbGxvd3MgZm9yIGZ1dHVyZQorICBjaGFuZ2UgdG8gbWFrZSBhdHRyaWJ1dGUgbW9yZSB0aGFuIG9uZSBieXRlLgorLSBQcm92aWRlIGEgcXNvcnQoKSBmdW5jdGlvbiBmb3Igc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgaXQuCistIENoYW5nZWQgdGhlIGJpZyBzd2l0Y2ggZm9yIE5vcm1hbCBtb2RlIGNvbW1hbmRzIGludG8gYSB0YWJsZS4gIFRoaXMgY2xlYW5zCisgIHVwIHRoZSBjb2RlIGNvbnNpZGVyYWJseSBhbmQgYXZvaWRzIHRyb3VibGUgZm9yIHNvbWUgb3B0aW1pemluZyBjb21waWxlcnMuCistIEFzc2lnbmVkIGEgbmVnYXRpdmUgdmFsdWUgdG8gc3BlY2lhbCBrZXlzLCB0byBhdm9pZCB0aGVtIGJlaW5nIG1peGVkIHVwIHdpdGgKKyAgVW5pY29kZSBjaGFyYWN0ZXJzLgorLSBHbG9iYWwgdmFyaWFibGVzIGV4cGFuZF9jb250ZXh0IGFuZCBleHBhbmRfcGF0dGVybiB3ZXJlIG5vdCBzdXBwb3NlZCB0byBiZQorICBnbG9iYWwuICBQYXNzIHRoZW0gdG8gRXhwYW5kT25lKCkgYW5kIGFsbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IGl0LgorLSBObyBsb25nZXIgdXNlIHRoZSBnbG9iYWwgcmVnX2ljIGZsYWcuICBJdCBjYXVzZWQgdHJvdWJsZSBhbmQgaW4gYSBmZXcgcGxhY2VzCisgIGl0IHdhcyBub3Qgc2V0LgorLSBSZW1vdmVkIHRoZSB1c2Ugb2YgdGhlIHN0dWZmIGJ1ZmZlciBmb3IgIioiLCAiSyIsIENUUkwtXSwgZXRjLiAgQXZvaWRzCisgIHByb2JsZW0gd2l0aCBhdXRvY29tbWFuZHMuCistIE1vdmVkIHNvbWUgY29kZSBmcm9tIGV4X2RvY21kLmMgdG8gZXhfY21kczIuYy4gIFRoZSBmaWxlIHdhcyBnZXR0aW5nIHRvbworICBiaWcuICBBbHNvIG1vdmVkIHNvbWUgY29kZSBmcm9tIHNjcmVlbi5jIHRvIG1vdmUuYy4KKy0gRG9uJ3QgaW5jbHVkZSB0aGUgQ1JDIHRhYmxlIGZvciBlbmNyeXB0aW9uLCBnZW5lcmF0ZSBpdC4gIFNhdmVzIHF1aXRlIGEgYml0CisgIG9mIHNwYWNlIGluIHRoZSBzb3VyY2UgY29kZS4gKE1hdHRoaWFzIEtyYW1tKQorLSBSZW5hbWVkIG11bHRpYnl0ZS5jIHRvIG1ieXRlLmMgdG8gYXZvaWQgYSBwcm9ibGVtIHdpdGggOC4zIGZpbGVzeXN0ZW1zLgorLSBSZW1vdmVkIHRoZSBHVEsgaW1wbGVtZW50YXRpb24gb2YgIjpmaW5kaGVscCIsIGl0IG5vdyB1c2VzIHRoZQorICBUb29sQmFyLkZpbmRIZWxwICBtZW51IGVudHJ5LgorLSBSZW5hbWVkIG1jaF93aW5kZXhpdCgpIHRvIG1jaF9leGl0KCksIG1jaF9pbml0KCkgdG8gbWNoX2Vhcmx5X2luaXQoKSBhbmQKKyAgbWNoX3NoZWxsaW5pdCgpIHRvIG1jaF9pbml0KCkuCisKK0hpZ2hsaWdodGluZzoKKy0gSW4gYSAiOmhpZ2hsaWdodCIgbGlzdGluZywgc2hvdyAieHh4IiB3aXRoIHRoZSBoaWdobGlnaHQgY29sb3IuCistIEFkZGVkIHN1cHBvcnQgZm9yIHh0ZXJtIHdpdGggODggb3IgMjU2IGNvbG9ycy4gIFRoZSByaWdodCBjb2xvciBudW1iZXJzIHdpbGwKKyAgYmUgdXNlZCBmb3IgdGhlIG5hbWUgdXNlZCBpbiBhICI6aGlnaGxpZ2h0IiBjb21tYW5kLiAoU3RldmUgV2FsbCkKKy0gQWRkZWQgImRlZmF1bHQiIGFyZ3VtZW50IGZvciAiOmhpZ2hsaWdodCIuICBXaGVuIGluY2x1ZGVkLCB0aGUgY29tbWFuZCBpcworICBpZ25vcmVkIGlmIGhpZ2hsaWdodGluZyBmb3IgdGhlIGdyb3VwIHdhcyBhbHJlYWR5IGRlZmluZWQuCisgIEFsbCBzeW50YXggZmlsZXMgbm93IHVzZSAiOmhpIGRlZmF1bHQgLi4uIiB0byBhbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5CisgIGNvbG9ycyBpbiBoaXMgdmltcmMgZmlsZS4gIEFsc28sIHRoZSAiaWYgZGlkX3h4eF9zeW50YXhfaW5pdHMiIGlzIG5vdCBuZWVkZWQKKyAgYW55bW9yZS4gIFRoaXMgZ3JlYXRseSBzaW1wbGlmaWVzIHVzaW5nIG5vbi1kZWZhdWx0IGNvbG9ycyBmb3IgYSBzcGVjaWZpYworICBsYW5ndWFnZS4KKy0gQWRqdXN0ZWQgY29sb3J0ZXN0LnZpbTogSW5jbHVkZWQgY29sb3JzIG9uIG5vcm1hbCBiYWNrZ3JvdW5kIGFuZCByZWR1Y2VkIHRoZQorICBzaXplIGJ5IHVzaW5nIGEgd2hpbGUgbG9vcC4gKFJhZmFlbCBHYXJjaWEtU3VhcmV6KQorLSBBZGRlZCB0aGUgIkRhcmtZZWxsb3ciIGNvbG9yIG5hbWUuICBKdXN0IHRvIG1ha2UgdGhlIGxpc3Qgb2Ygc3RhbmRhcmQgY29sb3JzCisgIGNvbnNpc3RlbnQsIGl0J3Mgbm90IHJlYWxseSBhIG5pY2UgY29sb3IgdG8gdXNlLgorCitXaGVuIGFuIHh0ZXJtIGlzIGluIDgtYml0IG1vZGUgdGhpcyBpcyBkZXRlY3RlZCBieSB0aGUgY29kZSByZXR1cm5lZCBmb3IKK3x0X1JWfC4gIEFsbCBrZXkgY29kZXMgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZWlyIDgtYml0IHZlcnNpb25zLgorCitUaGUgT1BUX1RDQVBfUVVFUlkgaW4geHRlcm0gcGF0Y2ggbGV2ZWwgMTQxIGFuZCBsYXRlciBpcyB1c2VkIHRvIG9idGFpbiB0aGUKK2FjdHVhbCBrZXkgY29kZXMgdXNlZCBhbmQgdGhlIG51bWJlciBvZiBjb2xvcnMgZm9yIHRfQ28uICBPbmx5IHdoZW4gfHRfUlZ8IGlzCithbHNvIHVzZWQuCisKKyI6YnJvd3NlIHNldCIgbm93IGFsc28gd29ya3MgaW4gdGhlIGNvbnNvbGUgbW9kZS4gICI6YnJvd3NlIGVkaXQiIHdpbGwgZ2l2ZSBhbgorZXJyb3IgbWVzc2FnZS4KKworIjpiZGVsZXRlIiBhbmQgIjpidW5sb2FkIiBvbmx5IHJlcG9ydCB0aGUgbnVtYmVyIG9mIGRlbGV0ZWQvdW5sb2FkZWQgYnVmZmVycword2hlbiBtb3JlIHRoYW4gJ3JlcG9ydCcuICBUaGUgbWVzc2FnZSB3YXMgYW5ub3lpbmcgd2hlbiBkZWxldGluZyBhIGJ1ZmZlciBpbiBhCitzY3JpcHQuCisKK0p1bXAgbGlzdDoKKy0gVGhlIG51bWJlciBvZiBtYXJrcyBrZXB0IGluIHRoZSBqdW1wbGlzdCBoYXMgYmVlbiBpbmNyZWFzZWQgZnJvbSA1MCB0byAxMDAuCistIFRoZSBqdW1wbGlzdCBpcyBub3cgc3RvcmVkIGluIHRoZSB2aW1pbmZvIGZpbGUuICBDVFJMLU8gY2FuIGJlIHVzZWQgdG8ganVtcAorICB0byBwb3NpdGlvbnMgZnJvbSBhIHByZXZpb3VzIGVkaXQgc2Vzc2lvbi4KKy0gV2hlbiBkb2luZyAiOnNwbGl0IiBjb3B5IHRoZSBqdW1wbGlzdCB0byB0aGUgbmV3IHdpbmRvdy4KKworQWxzbyBzZXQgdGhlICdbIGFuZCAnXSBtYXJrcyBmb3IgdGhlICJ+IiBhbmQgInIiIGNvbW1hbmRzLiAgVGhlc2UgbWFya3MgYXJlCitub3cgYWx3YXlzIHNldCB3aGVuIG1ha2luZyBhIGNoYW5nZSB3aXRoIGEgTm9ybWFsIG1vZGUgY29tbWFuZC4KKworUHl0aG9uIGludGVyZmFjZTogQWxsb3cgc2V0dGluZyB0aGUgd2lkdGggb2YgYSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdy4gKEpvaG4KK0Nvb2spCisKK0FkZGVkICI9d29yZCIgYW5kICI9fndvcmQiIHRvICdjaW5rZXlzJyAoYWxzbyB1c2VkIGluICdpbmRlbnRrZXlzJykuCisKK0FkZGVkICJqMSIgYXJndW1lbnQgaW4gJ2Npbm9wdGlvbnMnOiBpbmRlbnQge30gaW5zaWRlICgpIGZvciBKYXZhLiAoSm9oYW5uZXMKK1plbGxuZXIpCitBZGRlZCB0aGUgImwiIGZsYWcgaW4gJ2Npbm9wdGlvbnMnLiAoQW5kdWluIFdpdGhlcnMpCitBZGRlZCAnQycsICdVJywgJ3cnIGFuZCAnbScgZmxhZ3MgdG8gJ2Npbm9wdGlvbnMnLiAoU2VydmF0aXVzIEJyYW5kdCkKKworV2hlbiBkb2luZyAiOndhbGwiIG9yICI6d3FhbGwiIGFuZCBhIG1vZGlmaWVkIGJ1ZmZlciBkb2Vzbid0IGhhdmUgYSBuYW1lLAorbWVudGlvbiBpdHMgYnVmZmVyIG51bWJlciBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KKworIjpmdW5jdGlvbiBOYW1lIiBsaXN0cyB0aGUgZnVuY3Rpb24gd2l0aCBsaW5lIG51bWJlcnMuICBNYWtlcyBpdCBlYXNpZXIgdG8KK2ZpbmQgb3V0IHdoZXJlIGFuIGVycm9yIGhhcHBlbmVkLgorCitJbiBub24tYmxvY2t3aXNlIFZpc3VhbCBtb2RlLCAiciIgcmVwbGFjZXMgYWxsIHNlbGVjdGVkIGNoYXJhY3RlcnMgd2l0aCB0aGUKK3R5cGVkIG9uZSwgbGlrZSBpbiBibG9ja3dpc2UgVmlzdWFsIG1vZGUuCisKK1doZW4gZWRpdGluZyB0aGUgbGFzdCBmaWxlIGluIHRoZSBhcmd1bWVudCBsaXN0IGluIGFueSB3YXksIGFsbG93IGV4aXRpbmcuCitQcmV2aW91c2x5IHRoaXMgd2FzIG9ubHkgcG9zc2libGUgd2hlbiBnZXR0aW5nIHRvIHRoYXQgZmlsZSB3aXRoICI6bmV4dCIgb3IKKyI6bGFzdCIuCisKK0FkZGVkIHRoZSAnMScgZmxhZyB0byAnZm9ybWF0b3B0aW9ucycuIChWaXQgU3RyYWRhbCkKK0FkZGVkICduJyBmbGFnIGluICdmb3JtYXRvcHRpb25zJzogZm9ybWF0IGEgbnVtYmVyZWQgbGlzdC4KKworU3dhcCBmaWxlOgorLSBXaGVuIGEgc3dhcCBmaWxlIGFscmVhZHkgZXhpc3RzLCBhbmQgdGhlIHVzZXIgc2VsZWN0cyAiRGVsZXRlIiBhdCB0aGUKKyAgQVRURU5USU9OIHByb21wdCwgdXNlIHRoZSBzYW1lICIuc3dwIiBzd2FwZmlsZSwgdG8gYXZvaWQgY3JlYXRpbmcgYSAiLnN3byIKKyAgZmlsZSB3aGljaCB3b24ndCBhbHdheXMgYmUgZm91bmQuCistIFdoZW4gZ2l2aW5nIHRoZSBBVFRFTlRJT04gbWVzc2FnZSBhbmQgdGhlIGRhdGUgb2YgdGhlIGZpbGUgaXMgbmV3ZXIgdGhhbiB0aGUKKyAgZGF0ZSBvZiBzd2FwIGZpbGUsIGdpdmUgYSB3YXJuaW5nIGFib3V0IHRoaXMuCistIE1hZGUgdGhlIGluZm8gZm9yIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSBhIGJpdCBzaG9ydGVyLCBzbyB0aGF0IGl0IHN0aWxsIGZpdHMKKyAgb24gYSAyNCBsaW5lIHNjcmVlbi4KKy0gSXQgd2FzIHBvc3NpYmxlIHRvIG1ha2UgYSBzeW1saW5rIHdpdGggdGhlIG5hbWUgb2YgYSBzd2FwIGZpbGUsIGxpbmtpbmcgdG8gYQorICBmaWxlIHRoYXQgZG9lc24ndCBleGlzdC4gIFZpbSB3b3VsZCB0aGVuIHNpbGVudGx5IHVzZSBhbm90aGVyIGZpbGUgKGlmIG9wZW4KKyAgd2l0aCBPX0VYQ0wgcmVmdXNlcyBhIHN5bWxpbmspLiAgTm93IGNoZWNrIGZvciBhIHN5bWxpbmsgdG8gZXhpc3QuICBBbHNvIGRvCisgIGFub3RoZXIgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSBqdXN0IGJlZm9yZSBjcmVhdGluZyBpdCB0byBjYXRjaCBhCisgIHN5bWxpbmsgYXR0YWNrLgorCitUaGUgZyBDVFJMLUcgY29tbWFuZCBhbHNvIHdvcmtzIGluIFZpc3VhbCBtb2RlIGFuZCBjb3VudHMgdGhlIG51bWJlciBvZiB3b3Jkcy4KKyhDaGFzZSBUaW5nbGV5KQorCitHaXZlIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB1c2luZyAnc2hlbGwnIGFuZCBpdCdzIGVtcHR5LgorCitBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gaW5jbHVkZSAiJXMiIGluICdzaGVsbHBpcGUnLgorCitBZGRlZCAidWhleCIgdmFsdWUgZm9yICdkaXNwbGF5Jzogc2hvdyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXMgPHh4Pi4KK1Nob3cgdW5wcmludGFibGUgY2hhcmFjdGVycyB3aXRoIE5vblRleHQgaGlnaGxpZ2h0aW5nLCBhbHNvIGluIHRoZSBjb21tYW5kCitsaW5lLgorCitXaGVuIGFza2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIG9mIGEgaGlkZGVuIG9wdGlvbiwgdGVsbCBpdCdzIG5vdCBzdXBwb3J0ZWQuCisKK1dpbjMyOgorLSBXaGVuIGRyb3BwaW5nIGEgc2hvcnRjdXQgb24gZ3ZpbSAoLmxuayBmaWxlKSBlZGl0IHRoZSB0YXJnZXQsIG5vdCB0aGUKKyAgc2hvcnRjdXQgaXRzZWxmLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKKy0gQWRkZWQgQyB2ZXJzaW9ucyBvZiB0aGUgT3BlbldpdGhWaW0gYW5kIFNlbmRUb1ZpbSBwcm9ncmFtcy4gKFdhbHRlciBCcmlzY29lKQorLSBXaGVuICdzaGVsbCcgaXMgImNtZCIgb3IgImNtZC5leGUiLCBzZXQgJ3NoZWxscmVkaXInIHRvIHJlZGlyZWN0IHN0ZGVyciB0b28uCisgIEFsc28gY2hlY2sgZm9yIHRoZSBVbml4IHNoZWxsIG5hbWVzLgorLSBXaGVuICRIT01FRFJJVkUgYW5kICRIT01FUEFUSCBhcmUgZGVmaW5lZCwgdXNlIHRoZW0gdG8gZGVmaW5lICRIT01FLiAgKENyYWlnCisgIEJhcmtob3VzZSkKKworV2luMzIgY29uc29sZSB2ZXJzaW9uOgorLSBJbmNsdWRlcyB0aGUgdXNlciBhbmQgc3lzdGVtIG5hbWUgaW4gdGhlICI6dmVyc2lvbiIgbWVzc2FnZSwgd2hlbiBhdmFpbGFibGUuCisgIEl0IGdlbmVyYXRlcyBhIHBhdGhkZWYuYyBmaWxlIGZvciB0aGlzLiAgKEpvbiBNaW5lcikKKy0gU2V0IHRoZSB3aW5kb3cgaWNvbiB0byBWaW0ncyBpY29uIChvbmx5IGZvciBXaW5kb3dzIDIwMDApLiAgV2hpbGUgZXhlY3V0aW5nCisgIGEgc2hlbGwgY29tbWFuZCwgbW9kaWZ5IHRoZSB3aW5kb3cgdGl0bGUgdG8gc2hvdyB0aGlzLiAgV2hlbiBleGl0aW5nLAorICByZXN0b3JlIHRoZSBjdXJzb3IgcG9zaXRpb24gdG9vLiAgKENyYWlnIEJhcmtob3VzZSkKKy0gVGhlIFdpbjMyIGNvbnNvbGUgdmVyc2lvbiBjYW4gYmUgY29tcGlsZWQgd2l0aCBPTEUgc3VwcG9ydC4gIEl0IGNhbiBvbmx5CisgIGZ1bmN0aW9uIGFzIGEgY2xpZW50LCBub3QgYXMgYW4gT0xFIHNlcnZlci4KKworRXJyb3Jmb3JtYXQ6CistIExldCAiJXAiIGluICdlcnJvcmZvcm1hdCcgKGNvbHVtbiBvZiBlcnJvciBpbmRpY2F0ZWQgYnkgYSByb3cgb2YgY2hhcmFjdGVycykKKyAgYWxzbyBhY2NlcHQgYSBsaW5lIG9mIGRvdHMuCistIEFkZGVkICIldiIgaXRlbSBpbiAnZXJyb3Jmb3JtYXQnOiBWaXJ0dWFsIGNvbHVtbiBudW1iZXIuIChEYW4gU2hhcnApCistIEFkZGVkIGEgZGVmYXVsdCAnZXJyb3Jmb3JtYXQnIHZhbHVlIGZvciBWTVMuIChKaW0gQnVzaCkKKworVGhlICJwIiBjb21tYW5kIGNhbiBub3cgYmUgdXNlZCBpbiBWaXN1YWwgbW9kZS4gIEl0IG92ZXJ3cml0ZXMgdGhlIHNlbGVjdGVkCit0ZXh0IHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIuCisKK0hpZ2hsaWdodCB0aGUgPD4gaXRlbXMgaW4gdGhlIGludHJvIG1lc3NhZ2UgdG8gbWFrZSBjbGVhciB0aGV5IGFyZSBzcGVjaWFsLgorCitXaGVuIHVzaW5nIHRoZSAiYyIgZmxhZyBmb3IgIjpzdWJzdGl0dXRlIiwgYWxsb3cgdHlwaW5nICJsIiBmb3IgcmVwbGFjaW5nIHRoaXMKK2l0ZW0gYW5kIHRoZW4gc3RvcDogImxhc3QiLgorCitXaGVuIHByaW50aW5nIGEgdmVyYm9zZSBtZXNzYWdlIGFib3V0IHNvdXJjaW5nIGFub3RoZXIgZmlsZSwgcHJpbnQgdGhlIGxpbmUKK251bWJlci4KKworV2hlbiByZXNpemluZyB0aGUgVmltIHdpbmRvdywgZG9uJ3QgdXNlICdlcXVhbGFsd2F5cycuICBBdm9pZHMgdGhhdCBtYWtpbmcgdGhlCitWaW0gd2luZG93IHNtYWxsZXIgbWFrZXMgc3BsaXQgd2luZG93cyBiaWdnZXIuICBBbmQgaXQncyB3aGF0IHRoZSBkb2NzIHNheS4KKworV2hlbiB0eXBpbmcgQ1RSTC1EIGluIEluc2VydCBtb2RlLCBqdXN0IGFmdGVyIGFuIGF1dG9pbmRlbnQsIHRoZW4gaGl0dGluZyBDUgora2VwdCB0aGUgcmVtYWluaW5nIHdoaXRlIHNwYWNlLiAgTm93IG1hZGUgaXQgd29yayBsaWtlIEJTOiBkZWxldGUgdGhlCithdXRvaW5kZW50IHRvIGF2b2lkIGEgYmxhbmsgbm9uLWVtcHR5IGxpbmUgcmVzdWx0cy4KKworQWRkZWQgYSBHZXRId25kKCkgY2FsbCB0byB0aGUgT0xFIGludGVyZmFjZS4gIChWaW5jZSBOZWdyaSkKKworTWFkZSAiOm5vcm1hbCIgd29yayBpbiBhbiBldmVudCBoYW5kbGVyLiAgVXNlZnVsIHdoZW4gZHJvcHBpbmcgYSBmaWxlIG9uIFZpbQorYW5kIGZvciBDdXJzb3JIb2xkIGF1dG9jb21tYW5kcy4KKworRm9yIHRoZSBNUy1XaW5kb3dzIHZlcnNpb24sIGRvbid0IGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHdoZW4gYQorc2xhc2ggaXMgdXNlZCBpbnN0ZWFkIG9mIGEgYmFja3NsYXNoLiAgRXhwbG9yZXIgc2hvdWxkIGFsd2F5cyB1c2UgYSBiYWNrc2xhc2gsCit0aGUgdXNlciBjYW4gdXNlIGEgc2xhc2ggd2hlbiB0eXBpbmcgdGhlIGNvbW1hbmQuCisKK1RpbWVzdGFtcHM6CistIFdoZW4gYSBidWZmZXIgd2FzIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0gYW5kIHJlZ2FpbmluZyBmb2N1cywgZ2l2ZSBhIGRpYWxvZworICB0byBhbGxvdyB0aGUgdXNlciB0byByZWxvYWQgdGhlIGZpbGUuICBOb3cgYWxzbyBmb3Igb3RoZXIgR1VJcyB0aGFuCisgIE1TLVdpbmRvd3MuICBBbmQgYWxzbyB1c2VkIGluIHRoZSBjb25zb2xlLCB3aGVuIGNvbXBpbGVkIHdpdGggZGlhbG9nCisgIHN1cHBvcnQuCistIEluc3BlY3QgdGhlIGZpbGUgY29udGVudHMgdG8gZmluZCBvdXQgaWYgaXQgcmVhbGx5IGNoYW5nZWQsIGlnbm9yZQorICBzaXR1YXRpb25zIHdoZXJlIG9ubHkgdGhlIHRpbWUgc3RhbXAgY2hhbmdlZCAoZS5nLiwgY2hlY2tpbmcgdGhlIGZpbGUgb3V0CisgIGZyb20gQ1ZTKS4KKy0gV2hlbiBjaGVja2luZyB0aGUgdGltZXN0YW1wLCBmaXJzdCBjaGVjayBpZiB0aGUgZmlsZSBzaXplIGNoYW5nZWQsIHRvIGF2b2lkCisgIGEgZmlsZSBjb21wYXJlIHRoZW4uICBNYWtlcyBpdCBxdWlja2VyIGZvciBsYXJnZSAobG9nKSBmaWxlcyB0aGF0IGFyZQorICBhcHBlbmRlZCB0by4KKy0gRG9uJ3QgZ2l2ZSBhIHdhcm5pbmcgZm9yIGEgY2hhbmdlZCBvciBkZWxldGVkIGZpbGUgd2hlbiAnYnVmdHlwZScgaXMgc2V0LgorLSBObyBsb25nZXIgd2FybiBmb3IgYSBjaGFuZ2VkIGRpcmVjdG9yeS4gIFRoaXMgYXZvaWRzIHRoYXQgdGhlIGZpbGUgZXhwbG9yZXIKKyAgcHJvZHVjZXMgd2FybmluZ3MuCistIENoZWNraW5nIHRpbWVzdGFtcHMgaXMgb25seSBkb25lIGZvciBidWZmZXJzIHRoYXQgYXJlIG5vdCBoaWRkZW4uICBUaGVzZQorICB3aWxsIGJlIGNoZWNrZWQgd2hlbiB0aGV5IGJlY29tZSB1bmhpZGRlbi4KKy0gV2hlbiBjaGVja2luZyBmb3IgYSBmaWxlIGJlaW5nIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0sIGFsc28gY2hlY2sgaWYgdGhlCisgIGZpbGUgcGVybWlzc2lvbnMgY2hhbmdlZC4gIFdoZW4gdGhlIGZpbGUgY29udGVudHMgZGlkbid0IGNoYW5nZSBidXQgdGhlCisgIHBlcm1pc3Npb25zIGRpZCwgZ2l2ZSBhIHdhcm5pbmcuCistIEF2b2lkIGNoZWNraW5nIHRvbyBvZnRlbiwgb3RoZXJ3aXNlIHRoZSBkaWFsb2cga2VlcHMgcG9wcGluZyB1cCBmb3IgYSBsb2cKKyAgZmlsZSB0aGF0IHN0ZWFkaWx5IGdyb3dzLgorCitNYXBwaW5nIDxNLUE+IHdoZW4gJ2VuY29kaW5nJyBpcyAibGF0aW4xIiBhbmQgdGhlbiBzZXR0aW5nICdlbmNvZGluZycgdG8KKyJ1dGYtOCIgY2F1c2VzIHRoZSBmaXJzdCBieXRlIG9mIGEgbXVsdGktYnl0ZSB0byBiZSBtYXBwZWQuICBDYW4gY2F1c2UgdmVyeQoraGFyZCB0byBmaW5kIHByb2JsZW1zLiAgRGlzYWxsb3cgbWFwcGluZyBwYXJ0IG9mIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCisKK0ZvciAiOnB5dGhvbiIgYW5kICI6dGNsIiBhY2NlcHQgYW4gaW4tbGluZSBzY3JpcHQuIChKb2hhbm5lcyBaZWxsbmVyKQorQWxzbyBmb3IgIjpydWJ5IiBhbmQgIjpwZXJsIi4gKEJlbm9pdCBDZXJyaW5hKQorCitNYWRlICI6c3luIGluY2x1ZGUiIHVzZSAncnVudGltZXBhdGgnIHdoZW4gdGhlIGZpbGUgbmFtZSBpcyBub3QgYSBmdWxsIHBhdGguCisKK1doZW4gJ3N3aXRjaGJ1ZicgY29udGFpbnMgInNwbGl0IiBhbmQgdGhlIGN1cnJlbnQgd2luZG93IGlzIGVtcHR5LCBkb24ndCBzcGxpdAordGhlIHdpbmRvdy4KKworVW5peDogQ2F0Y2ggU0lHUFdSIHRvIHByZXNlcnZlIGZpbGVzIHdoZW4gdGhlIHBvd2VyIGlzIGFib3V0IHRvIGdvIGRvd24uCisKK1NuaWZmIGludGVyZmFjZTogKEFudG9uIExlaGVyYmF1ZXIpCistIGZpeGVkIHdpbmRvd3MgY29kZSwgZXNwLiB0aGUgZXZlbnQgaGFuZGxpbmcgc3R1ZmYKKy0gYWRhcHRhdGlvbnMgZm9yIHNuaWZmIDQueCAoJFNOSUZGX0RJUjQpCistIHN1cHBvcnQgZm9yIGFkZGluZyBzbmlmZiByZXF1ZXN0cyBhdCBydW50aW1lCisKK1N1cHBvcnQgdGhlIG5vdGF0aW9uIDxBLXg+IGFzIGFuIGFsaWFzIGZvciA8TS14Pi4gIFRoaXMgbG9naWNhbCwgc2luY2UgdGhlIEFsdAora2V5IGlzIHVzZWQuCisKKyI6ZmluZCIgYWNjZXB0cyBhIGNvdW50LCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb3VudCd0aCBtYXRjaCBpbiAncGF0aCcgaXMKK3VzZWQuCisKKyI6bHMiIGFuZCAiOmJ1ZmZlcnMiIG91dHB1dCBzaG93cyBtb2RpZmllZC9yZWFkb25seS9tb2RpZmlhYmxlIGZsYWcuICBXaGVuIGEKK2J1ZmZlciBpcyBhY3RpdmUgc2hvdyAiYSIgaW5zdGVhZCBvZiBub3RoaW5nLiAgV2hlbiBhIGJ1ZmZlciBpc24ndCBsb2FkZWQKK3Nob3cgbm90aGluZyBpbnN0ZWFkIG9mICItIi4KKworVW5peCBpbnN0YWxsOgorLSBXaGVuIGluc3RhbGxpbmcgdGhlIHRvb2xzLCBzZXQgYWJzb2x1dGUgcGF0aHMgaW4gdG9vbHMgc2NyaXB0cyBlZm1fcGVybC5wbAorICBhbmQgbXZlLmF3ay4gIEF2b2lkcyB0aGF0IHRoZSB1c2VyIGhhcyB0byBlZGl0IHRoZXNlIGZpbGVzLgorLSBJbnN0YWxsIEljb25zIGZvciBLREUgd2hlbiB0aGUgZGlyZWN0b3JpZXMgZXhpc3QgYW5kIHRoZSBpY29ucyBkbyBub3QgZXhpc3QKKyAgeWV0LgorCitBZGRlZCBoYXMoIndpbjk1IiksIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBNUy1XaW5kb3dzIDk1Lzk4L01FIGFuZAorTlQvMjAwMC9YUCBpbiBhIFZpbSBzY3JpcHQuCisKK1doZW4gYSAiOmNkIiBjb21tYW5kIHdhcyB0eXBlZCwgZWNobyB0aGUgbmV3IGN1cnJlbnQgZGlyZWN0b3J5LiAoRGFuIFNoYXJwKQorCitXaGVuIHVzaW5nICI6d2lucG9zIiBiZWZvcmUgdGhlIEdVSSB3aW5kb3cgaGFzIGJlZW4gb3BlbmVkLCByZW1lbWJlciB0aGUKK3ZhbHVlcyB1bnRpbCBpdCBpcyBvcGVuZWQuCisKK0luIHRoZSAiOnZlcnNpb24iIG91dHB1dCwgYWRkICIvZHluIiBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZHluYW1pY2FsbHkgbG9hZGVkLgorVGhpcyBpbmRpY2F0ZXMgdGhlIGZlYXR1cmUgbWF5IG5vdCBhbHdheXMgd29yay4KKworT24gV2luZG93cyBOVCBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgZGlyZWN0b3J5IGlzIHJlYWQtb25seSwgYnV0IGEgZmlsZSBjYW4gYmUKK2RlbGV0ZWQuICBXaGVuIG1ha2luZyBhIGJhY2t1cCBieSByZW5hbWluZyB0aGUgZmlsZSBhbmQgJ2JhY2t1cGRpcicgZG9lc24ndAordXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdGhpcyBjYXVzZXMgdGhlIG9yaWdpbmFsIGZpbGUgdG8gYmUgZGVsZXRlZCwKK3dpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IHRvIGNyZWF0ZSBhIG5ldyBmaWxlLiAgR2l2ZSBhbiBleHRyYSBlcnJvciBtZXNzYWdlCit0aGVuIHRvIHdhcm4gdG8gdXNlciBhYm91dCB0aGlzLgorCitNYWRlIENUUkwtUiBDVFJMLU8gYXQgdGhlIGNvbW1hbmQgbGluZSB3b3JrIGxpa2UgQ1RSTC1SIENUUkwtUiwgc28gdGhhdCBpdCdzCitjb25zaXN0ZW50IHdpdGggSW5zZXJ0IG1vZGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ09NUElMRSBUSU1FIENIQU5HRVMJCQkJCSpjb21waWxlLWNoYW5nZXMtNioKKworQWxsIGdlbmVyYXRlZCBmaWxlcyBoYXZlIGJlZW4gbW92ZWQgb3V0IG9mIHRoZSAic3JjIiBkaXJlY3RvcnkuICBUaGlzIG1ha2VzIGl0CitlYXN5IHRvIHNlZSB3aGljaCBmaWxlcyBhcmUgbm90IGVkaXRlZCBieSBoYW5kLiAgVGhlIGZpbGVzIGdlbmVyYXRlZCBieQorY29uZmlndXJlIGFyZSBub3cgaW4gdGhlICJzcmMvYXV0byIgZGlyZWN0b3J5LiAgRm9yIFVuaXgsIGNvbXBpbGVkIG9iamVjdAorZmlsZXMgZ28gaW4gdGhlIG9iamVjdHMgZGlyZWN0b3J5LgorCitUaGUgc291cmNlIGFyY2hpdmUgd2FzIG92ZXIgdGhlIDEuNE0gZmxvcHB5IGxpbWl0LiAgVGhlIGFyY2hpdmVzIGFyZSBub3cgc3BsaXQKK3VwIGludG8gdHdvIHJ1bnRpbWUgYW5kIHR3byBzb3VyY2UgYXJjaGl2ZXMuICBBbHNvIHByb3ZpZGUgYSBiemlwMiBjb21wcmVzc2VkCithcmNoaXZlIHRoYXQgY29udGFpbnMgYWxsIHRoZSBzb3VyY2VzIGFuZCBydW50aW1lIGZpbGVzLgorCitBZGRlZCAicmVjb25maWciIGFzIGEgdGFyZ2V0IGZvciBtYWtlLiAgVXNlZnVsIHdoZW4gY2hhbmdpbmcgc29tZSBvZiB0aGUKK2FyZ3VtZW50cyB0aGF0IHJlcXVpcmUgZmx1c2hpbmcgdGhlIGNhY2hlLCBzdWNoIGFzIHN3aXRjaGluZyBmcm9tIEdUSyB0bworTW90aWYuICBBZGp1c3RlZCB0aGUgbWVhbmluZyBvZiBHVUlfSU5DX0xPQyBhbmQgR1VJX0xJQl9MT0MgdG8gYmUgY29uc2lzdGVudAorb3ZlciBkaWZmZXJlbnQgR1VJcy4KKworQWRkZWQgc3JjL1JFQURNRS50eHQgdG8gZ2l2ZSBhbiBvdmVydmlldyBvZiB0aGUgbWFpbiBwYXJ0cyBvZiB0aGUgc291cmNlIGNvZGUuCisKK1RoZSBVbml4IE1ha2VmaWxlIG5vdyBmdWxseSBzdXBwb3J0cyB1c2luZyAkKERFU1RESVIpIHRvIGluc3RhbGwgdG8gYSBzcGVjaWZpYworbG9jYXRpb24uICBSZXBsYWNlcyB0aGUgbWFudWFsIHNldHRpbmcgb2YgKkVORExPQyB2YXJpYWJsZXMuCisKK0FkZGVkIHRoZSBwb3NzaWJpbGl0eSBmb3IgYSBtYWludGFpbmVyIG9mIGEgYmluYXJ5IHZlcnNpb24gdG8gaW5jbHVkZSBoaXMKK2UtbWFpbCBhZGRyZXNzIHdpdGggdGhlIC0td2l0aC1jb21waWxlZGJ5IGNvbmZpZ3VyZSBhcmd1bWVudC4KKworSW5jbHVkZWQgZmVhdHVyZXMgYXJlIG5vdyBncm91cGVkIGluICJ0aW55IiwgInNtYWxsIiwgIm5vcm1hbCIsICJiaWciIGFuZAorImh1Z2UiLiAgVGhpcyByZXBsYWNlcyAibWluLWZlYXR1cmVzIiBhbmQgIm1heC1mZWF0dXJlcyIuICBVc2luZyAidGlueSIKK2Rpc2FibGVzIG11bHRpcGxlIHdpbmRvd3MgZm9yIGEgcmVhbGx5IHNtYWxsIFZpbS4KKworRm9yIHRoZSB0aW55IHZlcnNpb24gb3Igd2hlbiBGRUFUX1dJTkRPV1MgaXMgbm90IGRlZmluZWQ6IEZpcnN0d2luIGFuZCBsYXN0d2luCithcmUgZXF1YWwgdG8gY3Vyd2luIGFuZCBkb24ndCB1c2Ugd19uZXh0IGFuZCB3X3ByZXYuCisKK0FkZGVkIHRoZSArbGlzdGNtZHMgZmVhdHVyZS4gIENhbiBiZSB1c2VkIHRvIGNvbXBpbGUgd2l0aG91dCB0aGUgVmltIGNvbW1hbmRzCit0aGF0IG1hbmlwdWxhdGUgdGhlIGJ1ZmZlciBsaXN0IGFuZCBhcmd1bWVudCBsaXN0ICh0aGUgYnVmZmVyIGxpc3QgaXRzZWxmIGlzCitzdGlsbCB0aGVyZSwgY2FuJ3QgZG8gd2l0aG91dCBpdCkuCisKK0FkZGVkIHRoZSArdnJlcGxhY2UgZmVhdHVyZS4gIEl0IGlzIGRpc2FibGVkIGluIHRoZSAic21hbGwiIHZlcnNpb24gdG8gYXZvaWQKK3RoYXQgdGhlIDE2IGJpdCBET1MgdmVyc2lvbiBydW5zIG91dCBvZiBtZW1vcnkuCisKK1JlbW92ZWQgR1RLKyBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvbGRlciB0aGFuIDEuMS4xNi4KKworVGhlIGNvbmZpZ3VyZSBjaGVja3MgZm9yIHVzaW5nIFBUWXMgaGF2ZSBiZWVuIGltcHJvdmVkLiAgQ29kZSB0YWtlbiBmcm9tIGEKK3JlY2VudCB2ZXJzaW9uIG9mIHNjcmVlbi4KKworQWRkZWQgY29uZmlndXJlIG9wdGlvbnMgdG8gaW5zdGFsbCBWaW0sIEV4IGFuZCBWaWV3IHVuZGVyIGFub3RoZXIgbmFtZSAoZS5nLiwKK3ZpbTYsIGV4NiBhbmQgdmlldzYpLgorCitBZGRlZCAiLS13aXRoLWdsb2JhbC1ydW50aW1lIiBjb25maWd1cmUgYXJndW1lbnQuICBBbGxvd3Mgc3BlY2lmeWluZyB0aGUKK2dsb2JhbCBkaXJlY3RvcnkgdXNlZCBpbiB0aGUgJ3J1bnRpbWVwYXRoJyBkZWZhdWx0LgorCitNYWRlIGVuYWJsaW5nIHRoZSBTTmlGRisgaW50ZXJmYWNlIHBvc3NpYmxlIHdpdGggYSBjb25maWd1cmUgYXJndW1lbnQuCisKK0NvbmZpZ3VyZSBub3cgYWx3YXlzIGNoZWNrcyAvdXNyL2xvY2FsL2xpYiBmb3IgbGlicmFyaWVzIGFuZAorL3Vzci9sb2NhbC9pbmNsdWRlIGZvciBpbmNsdWRlIGZpbGVzLiAgSGVscHMgZmluZGluZyB0aGUgc3R1ZmYgZm9yIGljb252KCkgYW5kCitnZXR0ZXh0KCkuCisKK01vdmVkIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeSBzdHVmZiBpbnRvIHRoZSArY21kbGluZV9oaXN0IGZlYXR1cmUsIHRvCitleGNsdWRlIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeSBmcm9tIHRoZSB0aW55IHZlcnNpb24uCisKK01TLVdpbmRvd3M6IE1vdmVkIGNvbW1vbiBmdW5jdGlvbnMgZnJvbSBXaW4xNiBhbmQgV2luMzIgdG8gb3NfbXN3aW4uYy4gIEF2b2lkcworaGF2aW5nIHRvIGNoYW5nZSB0d28gZmlsZXMgZm9yIG9uZSBwcm9ibGVtLiAgKFZpbmNlIE5lZ3JpKQorCitNb3ZlZCBjb21tb24gY29kZSBmcm9tIGd1aV93MTYuYyBhbmQgZ3VpX3czMi5jIHRvIGd1aV93NDguYyAoVmluY2UgTmVncmkpCisKK1RoZSBqdW1wbGlzdCBpcyBub3cgYSBzZXBhcmF0ZSBmZWF0dXJlLiAgSXQgaXMgZGlzYWJsZWQgZm9yIHRoZSAic21hbGwiCit2ZXJzaW9uICgxNiBiaXQgTVMtRE9TKS4KKworUmVuYW1lZCBhbGwgdHlwZXMgZW5kaW5nIGluIF90IHRvIGVuZCBpbiBfVC4gIEF2b2lkcyBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aAorc3lzdGVtIHR5cGVzLgorCitBZGRlZCBhIGNvbmZpZ3VyZSBjaGVjayBmb3IgWDExIGhlYWRlciBmaWxlcyB0aGF0IGltcGxpY2l0bHkgZGVmaW5lIHRoZSByZXR1cm4KK3R5cGUgdG8gaW50LiAoU3RldmUgV2FsbCkKKworIm1ha2UgZG9zbGFuZyIgaW4gdGhlIHRvcCBkaXJlY3RvcnkgbWFrZXMgYW4gYXJjaGl2ZSB3aXRoIHRoZSBtZW51IGFuZCAubW8KK2ZpbGVzIGZvciBXaW5kb3dzLiAgVGhpcyB1c2VzIHRoZSBmaWxlcyBnZW5lcmF0ZWQgb24gVW5peCwgdGhlc2Ugc2hvdWxkIHdvcmsKK29uIE1TLVdpbmRvd3MgYXMgd2VsbC4KKworTWVyZ2VkIGEgbGFyZ2UgcGFydCBvZiBvc192bXMuYyB3aXRoIG9zX3VuaXguYy4gIFRoZSBjb2RlIHdhcyBkdXBsaWNhdGVkIGluCit0aGUgcGFzdCB3aGljaCBtYWRlIG1haW50ZW5hbmNlIG1vcmUgd29yay4gIChab2x0YW4gQXJwYWRmZnkpCisKK1VwZGF0ZWQgdGhlIEJvcmxhbmQgQyB2ZXJzaW9uIDUgTWFrZWZpbGU6IChEYW4gU2hhcnApCistIEZpeGVkIHRoZSBQZXJsIGJ1aWxkCistIEFkZGVkIHB5dGhvbiBhbmQgdGNsIGJ1aWxkcworLSBBZGRlZCBkeW5hbWljIHBlcmwgYW5kIGR5bmFtaWMgcHl0aG9uIGJ1aWxkcworLSBBZGRlZCB1bmluc3RhbC5leGUgYnVpbGQKKy0gVXNlICJ5ZXMiIGFuZCAibm8iIGZvciB0aGUgb3B0aW9ucywgbGlrZSBpbiBNYWtlX212Yy5tYWsuCisKK1dpbjMyOiBNZXJnZWQgTWFrZV9ndmMubWFrIGFuZCBNYWtlX292Yy5tYWsgaW50byBvbmUgZmlsZTogTWFrZV9pdmMubWFrLiAgSXQncworbXVjaCBzbWFsbGVyLCBtYW55IHVubmVjZXNzYXJ5IHRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gKFdhbHRlciBCcmlzY29lKQorQWRkZWQgTWFrZV9kdmMubWFrIHRvIGJlIGFibGUgdG8gZGVidWcgZXhlIGdlbmVyYXRlZCB3aXRoIE1ha2VfbXZjLm1hayBpbgorTVMtRGV2c3R1ZGlvLiAoV2FsdGVyIEJyaXNjb2UpCisKK01TLVdpbmRvd3M6IFRoZSBiaWcgZ3ZpbS5leGUsIHdoaWNoIGluY2x1ZGVzIE9MRSwgbm93IGFsc28gaW5jbHVkZXMKK2R5bmFtaWNhbGx5IGxvYWRlZCBUY2wsIFBlcmwgYW5kIFB5dGhvbi4gIFRoaXMgdXNlcyBBY3RpdmVQZXJsIDUuNi4xLAorQWN0aXZlUHl0aG9uIDIuMS4xIGFuZCBBY3RpdmVUQ0wgOC4zLjMKKworQWRkZWQgQUNfRVhFRVhUIHRvIGNvbmZpZ3VyZS5pbiwgdG8gY2hlY2sgaWYgdGhlIGV4ZWN1dGFibGUgbmVlZHMgIi5leGUiIGZvcgorQ3lnd2luIG9yIE1pbmdXLiAgUmVuYW1lZCBTVUZGSVggdG8gRVhFRVhUIGluIE1ha2VmaWxlLgorCitXaW4zMjogTG9hZCBjb21kbGczMi5kbGwgZGVsYXllZCBmb3IgZmFzdGVyIHN0YXJ0dXAuICBPbmx5IHdoZW4gdXNpbmcgVkMgNi4KKyhWaXBpbiBBcmF2aW5kKQorCitXaW4zMjogV2hlbiBjb21waWxpbmcgd2l0aCBCb3JsYW5kLCBhbGxvdyB1c2luZyBJTUUuIChZYXN1aGlybyBNYXRzdW1vdG8pCisKK1dpbjMyOiBBZGRlZCBNYWtlZmlsZSBmb3IgQm9ybGFuZCA1IHRvIGNvbXBpbGUgZ3ZpbWV4dC5kbGwuIChZYXN1aGlybworTWF0c3Vtb3RvKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0JVRyBGSVhFUwkJCQkJCSpidWctZml4ZXMtNioKKworV2hlbiBjaGVja2luZyB0aGUgY29tbWFuZCBuYW1lIGZvciAiZ3ZpbSIsICJleCIsIGV0Yy4gaWdub3JlIGNhc2UuICBSZXF1aXJlZAorZm9yIHN5c3RlbXMgd2hlcmUgY2FzZSBpcyBpZ25vcmVkIGluIGNvbW1hbmQgbmFtZXMuCisKK1NlYXJjaCBwYXR0ZXJuICJbYS1jLWVdIiBhbHNvIG1hdGNoZWQgYSAnZCcgYW5kIGRpZG4ndCBtYXRjaCBhICctJy4KKworV2hlbiBkb3VibGUtY2xpY2tpbmcgaW4gYW5vdGhlciB3aW5kb3csIHdhc24ndCByZWNvZ25pemVkIGFzIGRvdWJsZSBjbGljaywKK2JlY2F1c2UgdG9wbGluZSBpcyBkaWZmZXJlbnQuICBBZGRlZCBzZXRfbW91c2VfdG9wbGluZSgpLgorCitUaGUgQlJPS0VOX0xPQ0FMRSBjaGVjayB3YXMgYnJva2VuLiAgKE1hcmNpbiBEYWxlY2tpKQorCitXaGVuICJ0X0NvIiBpcyBzZXQsIHRoZSBkZWZhdWx0IGNvbG9ycyByZW1haW4gdGhlIHNhbWUsIHRodXMgd3JvbmcuICBSZXNldCB0aGUKK2NvbG9ycyBhZnRlciBjaGFuZ2luZyAidF9DbyIuIChTdGV2ZSBXYWxsKQorCitXaGVuIGV4aXRpbmcgd2l0aCAiOndxYWxsIiB0aGUgbWVzc2FnZXMgYWJvdXQgd3JpdGluZyBmaWxlcyBjb3VsZCBvdmVyd3JpdGUKK2VhY2ggb3RoZXIgYW5kIGJlIGxvc3QgZm9yZXZlci4KKworV2hlbiBzdGFydGluZyBWaW0gd2l0aCBhbiBleHRyZW1lbHkgbG9uZyBmaWxlIG5hbWUgKGFyb3VuZCAxMDI0IGNoYXJhY3RlcnMpIGl0Cit3b3VsZCBjcmFzaC4gIEFkZGVkIGEgZmV3IGNoZWNrcyB0byBhdm9pZCBidWZmZXIgb3ZlcmZsb3dzLgorCitDVFJMLUUgY291bGQgZ2V0IHN0dWNrIGluIGEgZmlsZSB3aXRoIHZlcnkgbG9uZyBsaW5lcy4KKworIjphdSBzeW50YXg8VGFiPiIgZXhwYW5kZWQgZXZlbnQgbmFtZXMgd2hpbGUgaXQgc2hvdWxkIGV4cGFuZCBncm91cHMgc3RhcnRpbmcKK3dpdGggInN5bnRheCIuCisKK1doZW4gZXhwYW5kaW5nIGEgZmlsZSBuYW1lIGNhdXNlZCBhbiBlcnJvciAoZS5nLiwgZm9yIDxhbWF0Y2g+KSBpdCB3YXMKK3Byb2R1Y2VkIGV2ZW4gd2hlbiBpbnNpZGUgYW4gImlmIDAiLgorCisnY2luZGVudCcgZm9ybWF0dGVkIEMgY29tbWVudHMgZGlmZmVyZW50bHkgZnJvbSB3aGF0IHRoZSAnY29tbWVudHMnIG9wdGlvbgorc3BlY2lmaWVkLiAoU3RldmUgV2FsbCkKKworRGVmYXVsdCBmb3IgJ2dyZXBwcmcnIGRpZG4ndCBpbmNsdWRlIHRoZSBmaWxlIG5hbWUgd2hlbiBvbmx5IGdyZXBwaW5nIGluIG9uZQorZmlsZS4gIE5vdyAvZGV2L251bGwgaGFzIGJlZW4gYWRkZWQgZm9yIFVuaXguCisKK09wZW5pbmcgdGhlIG9wdGlvbiB3aW5kb3cgdHdpY2UgY2F1c2VkIHRyb3VibGUuICBOb3cgdGhlIGN1cnNvciBnb2VzIHRvIHRoZQorZXhpc3Rpbmcgb3B0aW9uIHdpbmRvdy4KKworIjpzdmlldyIgYW5kICI6dmlldyIgZGlkbid0IHNldCAncmVhZG9ubHknIGZvciBhbiBleGlzdGluZyBidWZmZXIuICBOb3cgZG8gc2V0CisncmVhZG9ubHknLCB1bmxlc3MgdGhlIGJ1ZmZlciBpcyBhbHNvIGVkaXRlZCBpbiBhbm90aGVyIHdpbmRvdy4KKworR1RLIEdVSTogV2hlbiAnZ3Vpb3B0aW9ucycgZXhjbHVkZWQgJ2cnLCB0aGUgbW9yZSBwcm9tcHQgY2F1c2VkIHRoZSB0b29sYmFyCithbmQgbWVudWJhciB0byBkaXNhcHBlYXIgYW5kIHJlc2l6ZSB0aGUgd2luZG93ICh3aGljaCBjbGVhcnMgdGhlIHRleHQpLgorTm93IGFsd2F5cyBncmV5LW91dCB0aGUgdG9wbGV2ZWwgbWVudXMgdG8gYXZvaWQgdGhhdCB0aGUgbWVudWJhciBjaGFuZ2VzIHNpemUKK29yIGRpc2FwcGVhcnMuCisKK1doZW4gcmUtdXNpbmcgdGhlIGN1cnJlbnQgYnVmZmVyIGZvciBhIG5ldyBidWZmZXIsIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZXMgd2VyZQorbm90IGRlbGV0ZWQuCisKK0dVSTogd2hlbiAnc2Nyb2xsb2ZmJyBpcyAwIGRyYWdnaW5nIHRoZSBtb3VzZSBhYm92ZSB0aGUgd2luZG93IGRpZG4ndCBjYXVzZSBhCitkb3duIHNjcm9sbC4gIE5vdyBwYXNzIG9uIGEgbW91c2UgZXZlbnQgd2l0aCBtb3VzZV9yb3cgc2V0IHRvIC0xLgorCitXaW4zMjogQ29uc29sZSB2ZXJzaW9uIGRpZG4ndCB3b3JrIG9uIHRlbG5ldCwgYmVjYXVzZSBvZiBzd2l0Y2hpbmcgYmV0d2VlbiB0d28KK2NvbnNvbGUgc2NyZWVucy4gIE5vdyB1c2Ugb25lIGNvbnNvbGUgc2NyZWVuIGFuZCBzYXZlL3Jlc3RvcmUgdGhlIGNvbnRlbnRzCit3aGVuIG5lZWRlZC4gIChDcmFpZyBCYXJraG91c2UpCisKK1doZW4gcmVhZGluZyBhIGZpbGUgdGhlIG1hZ2ljIG51bWJlciBmb3IgZW5jcnlwdGlvbiB3YXMgaW5jbHVkZWQgaW4gdGhlIGZpbGUKK2xlbmd0aC4gKEFudG9uaW8gQ29sb21ibykKKworVGhlIHF1aWNrZml4IHdpbmRvdyBjb250YWluZWQgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBOVUxzIGZvciBtdWx0aS1saW5lCittZXNzYWdlcy4gKERhdmlkIEhhcnJpc29uKQorCitXaGVuIHVzaW5nIGNzY29wZSwgcmVkdW5kYW50IHRhZ3Mgd2VyZSByZW1vdmVkLiAgVGhpcyBjYXVzZWQgYSBudW1iZXJpbmcKK3Byb2JsZW0sIGJlY2F1c2UgdGhleSB3ZXJlIGFsbCBsaXN0ZWQuICBEb24ndCByZW1vdmUgcmVkdW5kYW50IGNzY29wZSB0YWdzLgorKERhdmlkIEJ1c3RvcykuCisKK0NzY29wZTogVGVzdCBmb3Igd2hpY2ggbWF0Y2hlcyBhcmUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIHNvbWV0aW1lcyBmYWlsZWQsCitjYXVzaW5nIGEganVtcCB0byBhbm90aGVyIG1hdGNoIHRoYW4gc2VsZWN0ZWQuIChEYXZpZCBCdXN0b3MpCisKK1dpbjMyOiBCdWZmZXIgb3ZlcmZsb3cgd2hlbiBhZGRpbmcgYSBjaGFyc2V0IG5hbWUgaW4gYSBmb250LgorCisndGl0bGVzdHJpbmcnIGFuZCAnaWNvbnN0cmluZycgd2VyZSBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gaW4gdGhlIGN1cnJlbnQKK2NvbnRleHQsIHdoaWNoIGNvdWxkIGJlIGEgdXNlciBmdW5jdGlvbiwgd2hpY2ggaXMgYSBwcm9ibGVtIGZvciBsb2NhbAordmFyaWFibGVzIHZzIGdsb2JhbCB2YXJpYWJsZXMuCisKK1dpbjMyIEdVSTogTWFwcGluZyA8TS1GPiBkaWRuJ3Qgd29yay4gIE5vdyBoYW5kbGUgU0hJRlQgYW5kIENUUkwgaW4KK19PblN5c0NoYXIoKS4KKworV2luMzIgR1VJOiAob24gbm8gZmlsZSksIDp2czxDUj46cTxDUj4gbGVmdCBhIHRyYWlsIG9mIHBpeGVscyBkb3duIHRoZSBtaWRkbGUuCitDb3VsZCBhbHNvIGhhcHBlbiBmb3IgdGhlIHJ1bGVyLiAgc2NyZWVuX3B1dHMoKSBkaWRuJ3QgY2xlYXIgdGhlIHJpZ2h0IGNoYXIgaW4KK1NjcmVlbkxpbmVzW10gZm9yIHRoZSBib2xkIHRyaWNrLgorCitXaW4zMjogIjolIXNvcnR8dW5pcSIgZGlkbid0IHdvcmssIGJlY2F1c2UgdGhlIGlucHV0IGZpbGUgbmFtZSB0b3VjaGVzIHRoZQorInwiLiAgSW5zZXJ0IGEgc3BhY2UgYmVmb3JlIHRoZSAifCIuCisKK09TLzI6IEV4cGFuZGluZyB3aWxkY2FyZHMgaW5jbHVkZWQgbm9uLWV4aXN0aW5nIGZpbGVzLiAgQ2F1c2VkICI6cnVudGltZSIgdG8KK2ZhaWwsIHdoaWNoIGNhdXNlZCBzeW50YXggaGlnaGxpZ2h0aW5nIHRvIGZhaWwuCisKK1Bhc3RpbmcgYSByZWdpc3RlciBjb250YWluaW5nIENUUkwtUiBvbiB0aGUgY29tbWFuZCBsaW5lIGNvdWxkIGNhdXNlIGFuCitlbmRsZXNzIGxvb3AgdGhhdCBjYW4ndCBiZSBpbnRlcnJ1cHRlZC4gIE5vdyBpdCBjYW4gYmUgc3RvcHBlZCB3aXRoIENUUkwtQy4KKworV2hlbiAndmVyYm9zZScgaXMgc2V0LCBhIG1lc3NhZ2UgZm9yIGZpbGUgcmVhZC93cml0ZSBjb3VsZCBvdmVyd3JpdGUgdGhlCitwcmV2aW91cyBtZXNzYWdlLgorV2hlbiAndmVyYm9zZScgaXMgc2V0LCB0aGUgaGVhZGVyIGZyb20gIjpzZWxlY3QiIHdhcyBwdXQgYWZ0ZXIgdGhlIGxhc3QKK21lc3NhZ2UuICBOb3cgc3RhcnQgYSBuZXcgbGluZS4KKworVGhlIGhpdC1lbnRlciBwcm9tcHQgcmVhY3RlZCB0byB0aGUgcmVzcG9uc2Ugb2YgdGhlIHRfUlYgc3RyaW5nLCBjYXVzaW5nCittZXNzYWdlcyBhdCBzdGFydHVwIHRvIGRpc2FwcGVhci4KKworV2hlbiB0X0NvIHdhcyBzZXQgdG8gMSwgY29sb3JzIHdlcmUgc3RpbGwgdXNlZC4gIE5vdyBvbmx5IHVzZSBjb2xvciB3aGVuIHRfQ28KKz4gMS4KKworTGlzdGluZyBmdW5jdGlvbnMgd2l0aCAiOmZ1bmN0aW9uIiBkaWRuJ3QgcXVpdCB3aGVuICdxJyBvciAnOicgd2FzIHR5cGVkIGF0Cit0aGUgbW9yZSBwcm9tcHQuCisKK1VzZSBta3N0ZW1wKCkgaW5zdGVhZCBvZiBta3RlbXAoKSB3aGVuIGl0J3MgYXZhaWxhYmxlLCBhdm9pZHMgYSB3YXJuaW5nIGZvcgorbGlua2luZyBvbiBGcmVlQlNELgorCitXaGVuIGRvaW5nIEluc2VydCBtb2RlIGNvbXBsZXRpb24gaXQncyBwb3NzaWJsZSB0aGF0IGJfc2ZuYW1lIGlzIE5VTEwuICBEb24ndAorZ2l2ZSBpdCB0byBwcmludGYoKSBmb3IgdGhlICJTY2FubmluZyIgbWVzc2FnZS4KKworIjpzZXQgcnVudGltZXBhdGgtPSRWSU1SVU5USU1FIiBkaWRuJ3Qgd29yaywgYmVjYXVzZSBleHBhbnNpb24gb2Ygd2lsZGNhcmRzCit3YXMgZG9uZSBhZnRlciB0cnlpbmcgdG8gcmVtb3ZlIHRoZSBzdHJpbmcuICBOb3cgZm9yICI6c2V0IG9wdCs9dmFsIiBhbmQgIjpzZXQKK29wdC09dmFsIiB0aGUgZXhwYW5zaW9uIG9mIHdpbGRjYXJkcyBpcyBkb25lIGJlZm9yZSBhZGRpbmcgb3IgcmVtb3ZpbmcgInZhbCIuCisKK1VzaW5nIENUUkwtViB3aXRoIHRoZSAiciIgY29tbWFuZCB3aXRoIGEgYmxvY2t3aXNlIFZpc3VhbCBzZWxlY3Rpb24gaW5zZXJ0ZWQgYQorQ1RSTC1WIGluc3RlYWQgb2YgZ2V0dGluZyBhIHNwZWNpYWwgY2hhcmFjdGVyLgorCitVbml4OiBDaGFuZ2VkIHRoZSBvcmRlciBvZiBsaWJyYXJpZXM6IFB1dCAtbFhkbWNwIGFmdGVyIC1sWDExIGFuZCAtbFNNIC1sSUNFCithZnRlciAtbFhkbWNwLiAgU2hvdWxkIGZpeCBsaW5rIHByb2JsZW0gb24gSFAtVVggMTAuMjAuCisKK0Rvbid0IHJlbW92ZSB0aGUgbGFzdCAiLWxtIiBmcm9tIHRoZSBsaW5rIGxpbmUuICBWaW0gbWF5IGxpbmsgYnV0IGZhaWwgbGF0ZXIKK3doZW4gdGhlIEdVSSBzdGFydHMuCisKK1doZW4gdGhlIHNoZWxsIHJldHVybnMgd2l0aCBhbiBlcnJvciB3aGVuIHRyeWluZyB0byBleHBhbmQgd2lsZGNhcmRzLCBkbworaW5jbHVkZSB0aGUgcGF0dGVybiB3aGVuIHRoZSAiRVdfTk9URk9VTkQiIGZsYWcgd2FzIHNldC4KK1doZW4gZXhwYW5kaW5nIHdpbGRjYXJkcyB3aXRoIHRoZSBzaGVsbCBmYWlscywgZ2l2ZSBhIGNsZWFyIGVycm9yIG1lc3NhZ2UKK2luc3RlYWQgb2YganVzdCAiMSByZXR1cm5lZCIuCisKK1NlbGVjdGluZyBhIFZpc3VhbCBibG9jaywgd2l0aCB0aGUgc3RhcnQgcGFydGx5IG9uIGEgVGFiLCBkZWxldGluZyBpdCBsZWF2ZXMKK3RoZSBjdXJzb3IgdG9vIGZhciB0byB0aGUgbGVmdC4gIENhdXNlcyAicyIgdG8gd29yayBpbiB0aGUgd3JvbmcgcG9zaXRpb24uCisKK1BvdW5kIHNpZ24gaW4gbm9ybWFsLmMgY2F1c2VkIHRyb3VibGUgb24gc29tZSBjb21waWxlcnMuICBVc2UgMHhBMyBpbnN0ZWFkLgorCitXYXJuaW5nIGZvciBjaGFuZ2luZyBhIHJlYWQtb25seSBmaWxlIHdhc24ndCBnaXZlbiB3aGVuICdpbnNlcnRtb2RlJyB3YXMgc2V0LgorCitXaW4zMjogV2hlbiAnc2hlbGx4cXVvdGUnIGlzIHNldCB0byBhIGRvdWJsZSBxdW90ZSAoZS5nLiwgdXNpbmcgY3NoKSwgIjohc3RhcnQKK25vdGVwYWQgZmlsZSIgZG9lc24ndCB3b3JrLiAgUmVtb3ZlIHRoZSBkb3VibGUgcXVvdGVzIGFkZGVkIGJ5ICdzaGVsbHhxdW90ZScKK3doZW4gdXNpbmcgIjohc3RhcnQiLiAoUGF2b2wgSnVoYXMpCisKK1RoZSAiPGYtYXJncz4iIGFyZ3VtZW50IG9mICI6Y29tbWFuZCIgZGlkbid0IGFjY2VwdCBUYWJzIGZvciB3aGl0ZSBzcGFjZS4KK0Fsc28sIGRvbid0IGFkZCBhbiBlbXB0eSBhcmd1bWVudCB3aGVuIHRoZXJlIGFyZSB0cmFpbGluZyBibGFua3MuCisKKyI6ZSB0ZXN0XFxqZSIgZWRpdGVkICJ0ZXN0XGplIiwgYnV0ICI6bmV4dCB0ZXN0XFxqZSIgZWRpdGVkICJ0ZXN0amUiLgorQmFja3NsYXNoZXMgd2VyZSByZW1vdmVkIG9uZSB0aW1lIHRvbyBtYW55IGZvciAiOm5leHQiLgorCitWTVM6ICJnZiIgZGlkbid0IHdvcmsgcHJvcGVybHkuICBVc2Ugdm1zX2ZpeGZpbGVuYW1lKCkgdG8gdHJhbnNsYXRlIHRoZSBmaWxlCituYW1lLiAoWm9sdGFuIEFycGFkZmZ5KQorCitBZnRlciAiOmhpIE5vcm1hbCBjdGVybWJnPWJsYWNrIGN0ZXJtZmc9d2hpdGUiIGFuZCBzdXNwZW5kaW5nIFZpbSBub3QgYWxsCitjaGFyYWN0ZXJzIGFyZSByZWRyYXduIHdpdGggdGhlIHJpZ2h0IGJhY2tncm91bmQuCisKK1doZW4gZG9pbmcgIm1ha2UgdGVzdCIgd2l0aG91dCArZXZhbCBvciArd2luZG93cyBmZWF0dXJlLCBtYW55IHRlc3RzIGZhaWxlZC4KK05vdyBoYXZlIHRlc3QxIGdlbmVyYXRlIGEgc2NyaXB0IHRvIGNvcHkgdGhlIGNvcnJlY3Qgb3V0cHV0LCBzbyB0aGF0IGEgdGVzdAordGhhdCBkb2Vzbid0IHdvcmsgaXMgc2tpcHBlZC4KKworT24gRnJlZUJTRCB0aGUgUGVybCBpbnRlcmZhY2UgYWRkZWQgIi1sYyIgdG8gdGhlIGxpbmsgY29tbWFuZCBhbmQgUHl0aG9uIGFkZGVkCisiLXB0aHJlYWQiLiAgVGhlc2UgdHdvIGRvbid0IHdvcmsgdG9nZXRoZXIsIGJlY2F1c2UgdGhlIGxpYmNfciBsaWJyYXJ5IHNob3VsZAorYmUgdXNlZC4gIFJlbW92ZWQgIi1sYyIgZnJvbSBQZXJsLCBpdCBzaG91bGQgbm90IGJlIG5lZWRlZC4KK0Fsc286IEFkZCAiLXB0aHJlYWQiIHRvICRMSUJTLCBzbyB0aGF0IHRoZSBjaGVja3MgZm9yIGZ1bmN0aW9ucyBpcyBkb25lIHdpdGgKK2xpYmNfci4gIFNpZ2FsdHN0YWNrKCkgYXBwZWFycyB0byBiZSBtaXNzaW5nIGZyb20gbGliY19yLgorCitUaGUgU3ludGF4IHN1Yi1tZW51cyB3ZXJlIGdldHRpbmcgdG9vIGxvbmcsIHJlb3JnYW5pemVkIHRoZW0gYW5kIGFkZGVkIGFub3RoZXIKK2xldmVsIGZvciBzb21lIGxhbmd1YWdlcy4KKworVmlzdWFsIGJsb2NrICJyImVwbGFjZSBkaWRuJ3Qgd29yayB3ZWxsIHdoZW4gYSBUYWIgaXMgcGFydGx5IGluY2x1ZGVkLgorKE1hdHRoaWFzIEtyYW1tKQorCitXaGVuIHlhbmtpbmcgYSBWaXN1YWwgYmxvY2ssIHdoZXJlIHNvbWUgbGluZXMgZW5kIGhhbGZ3YXkgdGhlIGJsb2NrLCBwdXR0aW5nCit0aGUgdGV4dCBzb21ld2hlcmUgZWxzZSBkb2Vzbid0IGluc2VydCBhIGJsb2NrLiAgUGFkZCB3aXRoIHNwYWNlcyBmb3IgbWlzc2luZworY2hhcmFjdGVycy4gIEFkZGVkICJ5X3dpZHRoIiB0byBzdHJ1Y3QgeWFua3JlZy4gKE1hdHRoaWFzIEtyYW1tKQorCitJZiBhIHN1YnN0aXR1dGUgc3RyaW5nIGhhcyBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgYWZ0ZXIgYSBiYWNrc2xhc2ggb25seSB0aGUKK2ZpcnN0IGJ5dGUgb2YgaXQgd2FzIHNraXBwZWQuIChNdXJhb2thIFRhcm8pCisKK1dpbjMyOiBOdW1lcmljIGtleXBhZCBrZXlzIHdlcmUgbWlzc2luZyBmcm9tIHRoZSBidWlsdGluIHRlcm1jYXAgZW50cnkuCisKK1doZW4gYSBmaWxlIHdhcyByZWFkLW9ubHkgIjp3YSEiIGRpZG4ndCBmb3JjZSBpdCB0byBiZSB3cml0dGVuLiAoVmluY2UgTmVncmkpCisKK0FtaWdhOiBBIGZpbGUgbmFtZSBzdGFydGluZyB3aXRoIGEgY29sb24gd2FzIGNvbnNpZGVyZWQgYWJzb2x1dGUgYnV0IGl0IGlzbid0LgorQW1pZ2E6ICI6cHdkIiBhZGRlZCBhIHNsYXNoIHdoZW4gaW4gdGhlIHJvb3Qgb2YgYSBkcml2ZS4KKworRG9uJ3QgbGV0ICd0dHltb3VzZScgZGVmYXVsdCB0byAiZGVjIiB3aGVuIGNvbXBpbGVkIHdpdGggZGVjIG1vdXNlIHN1cHBvcnQuCitJdCBicmVha3MgdGhlIGdwbSBtb3VzZSAoTGludXggY29uc29sZSkuCisKK1RoZSBwcm90b3R5cGVzIGZvciB0aGUgUGVybCBpbnRlcmZhY2UgZGlkbid0IHdvcmsgZm9yIHRocmVhZGVkIFBlcmwuICBBZGRlZCBhCitzZWQgY29tbWFuZCB0byByZW1vdmUgdGhlIHByb3RvdHlwZXMgZnJvbSBwcm90by9pZl9wZXJsLnBybyBhbmQgYWRkZWQgdGhlbQorbWFudWFsbHkgdG8gaWZfcGVybC54cy4KKworV2hlbiAiOnchIiByZXNldHMgdGhlICdyZWFkb25seScgb3B0aW9uIHRoZSB0aXRsZSBhbmQgc3RhdHVzIGxpbmVzIHdlcmUgbm90Cit1cGRhdGVkLgorCisiOmFyZ3MiIHNob3dlZCB0aGUgY3VycmVudCBmaWxlIHdoZW4gdGhlIGFyZ3VtZW50IGxpc3Qgd2FzIGVtcHR5LiAgTWFkZSB0aGlzCit3b3JrIGxpa2UgVmk6IGRpc3BsYXkgbm90aGluZy4KKworIjk5OjxDLVU+ZWNobyB2OmNvdW50IiBlY2hvZWQgIjk5IiBpbiBOb3JtYWwgbW9kZSwgYnV0IDAgaW4gVmlzdWFsIG1vZGUuCitEb24ndCBzZXQgdjpjb3VudCB3aGVuIGV4ZWN1dGluZyBhIHN0dWZmZWQgY29tbWFuZC4KKworQW1pZ2E6IEdvdCBhIHJlcXVlc3RlciBmb3IgImhvbWU6IiBiZWNhdXNlIGl0J3MgaW4gdGhlIGRlZmF1bHQgcnVudGltZSBwYXRoLgorRG9uJ3QgYnJpbmcgdXAgYSByZXF1ZXN0ZXIgd2hlbiBzZWFyY2hpbmcgZm9yIGEgZmlsZSBpbiAncGF0aCcsIHNvdXJjaW5nIHRoZQorLnZpbXJjIGZpbGUgb3IgdXNpbmcgIjpydW50aW1lIi4KKworV2luMTYgYW5kIFdpbjMyOiBDb25zaWRlcmVkIGEgZmlsZSAiXHBhdGhcZmlsZSIgYWJzb2x1dGUuICBDYW4gY2F1c2UgdGhlIHNhbWUKK2ZpbGUgdG8gYXBwZWFyIGFzIHR3byBkaWZmZXJlbnQgYnVmZmVycy4KKworV2luMzI6IFJlbmFtaW5nIGEgZmlsZSB0byBhbiBlbXB0eSBzdHJpbmcgY3Jhc2hlZCBWaW0uICBIYXBwZW5lZCB3aGVuIHVzaW5nCitleHBsb3Jlci52aW0gYW5kIGhpdHRpbmcgRVNDIGF0IHRoZSByZW5hbWUgcHJvbXB0LgorCitXaW4zMjogc3RyZnRpbWUoKSBjcmFzaGVkIHdoZW4gY2FsbGVkIHdpdGggYSAiLTEiIHZhbHVlIGZvciB0aGUgdGltZS4KKworV2luMzIgd2l0aCBCb3JsYW5kIGNvbXBpbGVyOiBtY2hfRnVsbE5hbWUoKSBkaWRuJ3Qgd29yaywgY2F1c2VkIHRhZyBmaWxlIG5vdAordG8gYmUgZm91bmQuCisKK0NzY29wZSBzb21ldGltZXMganVtcGVkIHRvIHRoZSB3cm9uZyB0YWcuIChEYXZpZCBCdXN0b3MpCisKK09TLzI6IENvdWxkIG5vdCBmaW5kIHRoZSB0YWdzIGZpbGUuICBtY2hfZXhwYW5kX3dpbGRjYXJkcygpIGFkZGVkIGFub3RoZXIKK3NsYXNoIHRvIGEgZGlyZWN0b3J5IG5hbWUuCisKK1doZW4gdXNpbmcgIj4+IiB0aGUgYF0gbWFyayB3YXMgbm90IGluIHRoZSBsYXN0IGNvbHVtbi4KKworV2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGhvdXQgbWVudSBzdXBwb3J0LCBmaWxldHlwZS52aW0gd2FzIHN0aWxsIHRyeWluZyB0bworc291cmNlIHRoZSBtZW51LnZpbSBzY3JpcHQuIChSYWZhZWwgR2FyY2lhLVN1YXJleikKKworIjpwdGFnIiBhZGRlZCBhbiBpdGVtIHRvIHRoZSB0YWcgc3RhY2suCisKK1dpbjMyIElNRTogImdyIiBkaWRuJ3QgdXNlIElNRSBtb2RlLgorCitJbiB0aGUgInZpbSAtLWhlbHAiIG1lc3NhZ2UgdGhlIHRlcm0gIm9wdGlvbnMiIHdhcyB1c2VkIGZvciBhcmd1bWVudHMuICBUaGF0J3MKK2NvbmZ1c2luZywgY2FsbCB0aGVtICJhcmd1bWVudHMiLgorCitXaGVuIHRoZXJlIGFyZSB0d28gd2luZG93cywgYW5kIGEgQnVmVW5sb2FkIGF1dG9jb21tYW5kIGZvciBjbG9zaW5nIHdpbmRvdyAjMQorY2xvc2VkIHdpbmRvdyAjMiwgVmltIHdvdWxkIGNyYXNoLgorCitXaGVuIHRoZXJlIGlzIGEgcHJldmlldyB3aW5kb3cgYW5kIG9ubHkgb25lIG90aGVyIHdpbmRvdywgIjpxIiB3b3VsZG4ndCBleGl0LgorCitJbiBJbnNlcnQgbW9kZSwgd2hlbiBjYW5jZWxsaW5nIGEgZGlncmFwaCB3aXRoIEVTQywgdGhlICc/JyB3YXNuJ3QgcmVtb3ZlZC4KKworT24gVW5peCBnbG9iKCIuKiIpIHJldHVybmVkICIuIiBhbmQgIi4uIiwgb24gV2luZG93cyBpdCBkaWRuJ3QuICBPbiBXaW5kb3dzCitnbG9iKCIqIikgYWxzbyByZXR1cm5lZCBmaWxlcyBzdGFydGluZyB3aXRoIGEgZG90LiAgTWFkZSB0aGlzIHdvcmsgbGlrZSBVbml4CitvbiBhbGwgc3lzdGVtcy4KKworV2luMzI6IFJlbW92ZWQgb2xkIGNvZGUgdG8gb3BlbiBhIGNvbnNvbGUuICBWaW1ydW4gaXMgbm93IHVzZWQgYW5kIHdvcmtzIGZpbmUuCisKK0NvbXB1dGUgdGhlIHJvb20gbmVlZGVkIGJ5IHRoZSBpbnRybyBtZXNzYWdlIGFjY3VyYXRlbHksIHNvIHRoYXQgaXQgYWxzbyBmaXRzCitvbiBhIDI1IGxpbmUgY29uc29sZS4gKENyYWlnIEJhcmtob3VzZSkKKworIjpwdG5leHQiIHdhcyBicm9rZW4uICBOb3cgcmVtZW1iZXIgdGhlIGxhc3QgdGFnIHVzZWQgaW4gdGhlIHByZXZpZXcgd2luZG93CitzZXBhcmF0ZWx5IGZyb20gdGhlIHRhZ3N0YWNrLgorCitEaWRuJ3QgY2hlY2sgZm9yICItZGlzcGxheSIgYmVpbmcgdGhlIGxhc3QgYXJndW1lbnQuIChXaWNoZXJ0IEFra2VybWFuKQorCitHVEsgR1VJOiBXaGVuIHN0YXJ0aW5nICJndmltIiB1bmRlciBzb21lIGNvbmRpdGlvbnMgdGhlcmUgd291bGQgYmUgYW4gWCBlcnJvci4KK0Rvbid0IHJlcGxhY2UgdGhlIGVycm9yIGhhbmRsZXIgd2hlbiBjcmVhdGluZyB0aGUgeHRlcm0gY2xpcGJvYXJkLiAoV2ljaGVydAorQWtrZXJtYW4pCisKK0FkZGluZyBhIHNwYWNlIGFmdGVyIGEgaGVscCB0YWcgY2F1c2VkIHRoZSB0YWcgbm90IHRvIGJlIGZvdW5kLiAgRS5nLiwgIjpoZQorYXV0b2luZGVudCAiLgorCitXYXMgdHJ5aW5nIHRvIGV4cGFuZCBhIFVSTCBpbnRvIGEgZnVsbCBwYXRoIG5hbWUuICBPbiBXaW5kb3dzIHRoaXMgcmVzdWx0ZWQgaW4KK3RoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBiZSBwcmVwZW5kZWQgdG8gdGhlIFVSTC4gIEFkZGVkIHZpbV9pc0Fic05hbWUoKSBhbmQKK3ZpbV9GdWxsTmFtZSgpIHRvIGF2b2lkIHRoYXQgdmFyaW91cyBtYWNoaW5lIHNwZWNpZmljIGZ1bmN0aW9ucyBkbyBpdAorZGlmZmVyZW50bHkuCisKKyI6biAqLmMiICI6Y2QgLi4iICI6biIgZGlkbid0IHVzZSB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5IG9mIHRoZSBmaWxlLiAgVmkgb25seQorZG9lcyBpdCBmb3IgdGhlIGN1cnJlbnQgZmlsZSAobG9va3MgbGlrZSBhIGJ1ZykuICBOb3cgcmVtZW1iZXIgdGhlIGJ1ZmZlciB1c2VkCitmb3IgdGhlIGVudHJ5IGluIHRoZSBhcmd1bWVudCBsaXN0IGFuZCB1c2UgaXQncyBuYW1lIChhZGp1c3RlZCB3aGVuIGRvaW5nCisiOmNkIiksIHVubGVzcyBpdCdzIGRlbGV0ZWQuCisKK1doZW4gaW5zZXJ0aW5nIGEgc3BlY2lhbCBrZXkgYXMgaXRzIG5hbWUgKCI8Rjg+IiBhcyBmb3VyIGNoYXJhY3RlcnMpIGFmdGVyCittb3ZpbmcgYXJvdW5kIGluIEluc2VydCBtb2RlLCB1bmRvIGRpZG4ndCB3b3JrIHByb3Blcmx5LgorCitNb3RpZiBHVUk6IFdoZW4gdXNpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiwgZm9yIHNvbWUgcGVvcGxlIGd2aW0gZnJvemUgZm9yCithIGNvdXBsZSBvZiBzZWNvbmRzIChNb3RpZiAxLjI/KS4gIFRoaXMgZG9lc24ndCBoYXBwZW4gd2hlbiB0aGVyZSBpcyBubyBQb3B1cAorbWVudS4gIFNvbHZlZCBieSBvbmx5IGNyZWF0aW5nIGEgcG9wdXAgbWVudSB3aGVuICdtb3VzZW1vZGVsJyBpcyAicG9wdXAiIG9yCisicG9wdXBfc2V0cG9zIi4gKERhdmlkIEhhcnJpc29uKQorCitNb3RpZjogV2hlbiBhZGRpbmcgbWFueSBtZW51IGl0ZW1zLCB0aGUgIkhlbHAiIG1lbnUgZGlzYXBwZWFyZWQgYnV0IHRoZQorbWVudWJhciBkaWRuJ3Qgd3JhcC4gIE5vdyBtYW51YWxseSBzZXQgdGhlIG1lbnViYXIgaGVpZ2h0LgorCitXaGVuIHVzaW5nIDxCUz4gaW4gSW5zZXJ0IG1vZGUgdG8gcmVtb3ZlIGEgbGluZSBicmVhaywgb3IgdXNpbmcgIkoiIHRvIGpvaW4KK2xpbmVzLCB0aGUgY3Vyc29yIGNvdWxkIGVuZCB1cCBoYWxmd2F5IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuIChNdXJhb2thIFRhcm8pCisKK1JlbW92ZWQgZGVmaW5pbmcgU1ZSNCBpbiBjb25maWd1cmUuICBJdCBjYXVzZXMgcHJvYmxlbXMgZm9yIHNvbWUgWCBoZWFkZXIKK2ZpbGVzIGFuZCBkb2Vzbid0IGFwcGVhciB0byBiZSB1c2VkIGFueXdoZXJlLgorCitXaGVuICd3aWxkaWdub3JlJyBpcyB1c2VkLCAnaWdub3JlY2FzZScgZm9yIGEgdGFnIG1hdGNoIHdhcyBub3Qgd29ya2luZy4KKworV2hlbiAnd2lsZGlnbm9yZScgY29udGFpbnMgIip+IiBpdCB3YXMgaW1wb3NzaWJsZSB0byBlZGl0IGEgZmlsZSBlbmRpbmcgaW4gYQorIn4iLiAgTm93IGRvbid0IHJlY29nbml6ZSBhIGZpbGUgZW5kaW5nIGluICJ+IiBhcyBjb250YWluaW5nIHdpbGRjYXJkcy4KKworRGlzYWJsZWQgdGhlIG1vdXNlIGNvZGUgZm9yIE9TLzIuICBJdCB3YXMgbm90IHJlYWxseSB1c2VkLgorCisiOm1rc2Vzc2lvbiIgYWx3YXlzIHVzZWQgdGhlIGZ1bGwgcGF0aCBuYW1lIGZvciBhIGJ1ZmZlciwgYWxzbyB3aGVuIHRoZSBzaG9ydAorbmFtZSBjb3VsZCBiZSB1c2VkLgorIjpta3ZpbXJjIiBhbmQgIjpta3Nlc3Npb24iIGRpZG4ndCBzYXZlICd3aWxkY2hhcicgYW5kICdwYXN0ZXRvZ2dsZScgaW4gc3VjaCBhCit3YXkgdGhhdCB0aGV5IHdvdWxkIGJlIHJlc3RvcmVkLiAgTm93IHVzZSB0aGUga2V5IG5hbWUgaWYgcG9zc2libGUsIHRoaXMgaXMKK3BvcnRhYmxlLgorCitBZnRlciByZWNvdmVyaW5nIGEgZmlsZSBhbmQgYWJhbmRvbmluZyBpdCwgYW4gIjplZGl0IiBjb21tYW5kIGRpZG4ndCBnaXZlIHRoZQorQVRURU5USU9OIHByb21wdCBhZ2Fpbi4gIFdvdWxkIGJlIHVzZWZ1bCB0byBiZSBhYmxlIHRvIGRlbGV0ZSB0aGUgZmlsZSBpbiBhbgorZWFzeSB3YXkuICBSZXNldCB0aGUgQkZfUkVDT1ZFUkVEIGZsYWcgd2hlbiB1bmxvYWRpbmcgdGhlIGJ1ZmZlci4KKworaGlzdGRlbCgpIGNvdWxkIG1hdGNoIG9yIGlnbm9yZSBjYXNlLCBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5lZCBiZWZvcmUgaXQuCitOb3cgYWx3YXlzIG1hdGNoIGNhc2UuCisKK1doZW4gYSB3aW5kb3cgc2l6ZSB3YXMgc3BlY2lmaWVkIHdoZW4gc3BsaXR0aW5nIGEgd2luZG93LCBpdCB3b3VsZCBzdGlsbCBnZXQKK3RoZSBzaXplIGZyb20gJ3dpbmhlaWdodCcgb3IgJ3dpbndpZHRoJyBpZiBpdCdzIGxhcmdlci4KKworV2hlbiB1c2luZyAiYXBwZW5kIiBvciAiaW5zZXJ0IiBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBhIGxpbmUgc3RhcnRpbmcKK3dpdGggImZ1bmN0aW9uIiBvciAiZW5kZnVuY3Rpb24iIGNhdXNlZCBjb25mdXNpb24uICBOb3cgcmVjb2duaXplIHRoZSBjb21tYW5kcworYW5kIHNraXAgbGluZXMgdW50aWwgYSAiLiIuCisKK0F0IHRoZSBlbmQgb2YgYW55IGZ1bmN0aW9uIG9yIHNvdXJjZWQgZmlsZSBuZWVkX3dhaXRfcmV0dXJuIGNvdWxkIGJlIHJlc2V0LAorY2F1c2luZyBtZXNzYWdlcyB0byBkaXNhcHBlYXIgd2hlbiByZWRyYXdpbmcuCisKK1doZW4gaW4gYSB3aGlsZSBsb29wIHRoZSBsaW5lIG51bWJlciBmb3IgZXJyb3IgbWVzc2FnZXMgc3RheWVkIGZpeGVkLiAgTm93IHRoZQorbGluZSBudW1iZXIgaXMgcmVtZW1iZXJlZCBpbiB0aGUgd2hpbGUgbG9vcC4KKworImNkIGM6LyIgZGlkbid0IHdvcmsgb24gTVMtRE9TLiAgbWNoX2lzZGlyKCkgcmVtb3ZlZCBhIHRyYWlsaW5nIHNsYXNoLgorCitNUy1XaW5kb3dzOiBnZXRmdGltZSgpIGRpZG4ndCB3b3JrIHdoZW4gYSBkaXJlY3RvcnkgaGFkIGEgdHJhaWxpbmcgc2xhc2ggb3IKK2JhY2tzbGFzaC4gIERpZG4ndCBzaG93IHRoZSB0aW1lIGluIHRoZSBleHBsb3JlciBiZWNhdXNlIG9mIHRoaXMuCisKK1doZW4gZG9pbmcgd2lsZGNhcmQgY29tcGxldGlvbiwgYSBkaXJlY3RvcnkgImEvIiBzb3J0ZWQgYWZ0ZXIgImEtYiIuICBOb3cKK3JlY29nbml6ZSBwYXRoIHNlcGFyYXRvcnMgd2hlbiBzb3J0aW5nIGZpbGVzLgorCitOb24tVW5peCBzeXN0ZW1zOiBXaGVuIGVkaXRpbmcgImM6L2Rpci8uLi9maWxlIiBhbmQgImM6L2ZpbGUiIHRoZXkgd2VyZQorY3JlYXRlZCBhcyBkaWZmZXJlbnQgYnVmZmVycywgYWx0aG91Z2ggaXQncyB0aGUgc2FtZSBmaWxlLiAgRXhwYW5kIHRvIGEgZnVsbAorZmlsZSBuYW1lIGFsc28gd2hlbiBhbiBhYnNvbHV0ZSBuYW1lIGNvbnRhaW5zICIuLiIuCisKKyJnJiIgZGlkbid0IHJlcGVhdCB0aGUgbGFzdCBzdWJzdGl0dXRlIHByb3Blcmx5LgorCitXaGVuICdjbGlwYm9hcmQnIHdhcyBzZXQgdG8gInVubmFtZWQiLCBhICJZIiBjb21tYW5kIHdvdWxkIG5vdCB3cml0ZSB0byAiMC4KK05vdyBtYWtlIGEgY29weSBvZiByZWdpc3RlciAwIHRvIHRoZSBjbGlwYm9hcmQgcmVnaXN0ZXIuCisKK1doZW4gdGhlIHNlYXJjaCBwYXR0ZXJuIG1hdGNoZXMgaW4gbWFueSB3YXlzLCBpdCBjb3VsZCBub3QgYWx3YXlzIGJlCitpbnRlcnJ1cHRlZCB3aXRoIGEgQ1RSTC1DLiAgQW5kIENUUkwtQyB3b3VsZCBoYXZlIHRvIGJlIGhpdCBvbmNlIGZvciBldmVyeQorbGluZSB3aGVuICdobHNlYXJjaCcgaXMgb24uCitXaGVuICdpbmNzZWFyY2gnIGlzIG9uIGFuZCBpbnRlcnJ1cHRpbmcgdGhlIHNlYXJjaCBmb3IgYSBtYXRjaCwgZG9uJ3QgYWJhbmRvbgordGhlIGNvbW1hbmQgbGluZS4KKworV2hlbiB0dXJuaW5nIGEgZGlyZWN0b3J5IG5hbWUgaW50byBhIGZ1bGwgcGF0aCwgZS5nLiwgd2l0aCBmbmFtZW1vZGlmeSgpLAorc29tZXRpbWVzIGEgc2xhc2ggd2FzIGFkZGVkLiAgTWFrZSB0aGlzIGNvbnNpc3RlbnQ6IERvbid0IGFkZCBhIHNsYXNoLgorCitXaGVuIGEgZmlsZSBuYW1lIGNvbnRhaW5zIGEgIiEiLCB1c2luZyBpdCBpbiBhIHNoZWxsIGNvbW1hbmQgd2lsbCBjYXVzZQordHJvdWJsZTogIjohY2F0ICUiLiAgRXNjYXBlIHRoZSAiISIgdG8gYXZvaWQgdGhhdC4gIEVzY2FwZSBpdCBhbm90aGVyIHRpbWUKK3doZW4gJ3NoZWxsJyBjb250YWlucyAic2giLgorCitDb21wbGV0aW5nIGEgZmlsZSBuYW1lIHRoYXQgaGFzIGEgdGFpbCB0aGF0IHN0YXJ0cyB3aXRoIGEgIn4iIGRpZG4ndCB3b3JrOgorIjplIHZpZXcvfjxUYWI+Ii4KKworVXNpbmcgYSAiOmNvbW1hbmQiIGFyZ3VtZW50IHRoYXQgY29udGFpbnMgPCBhbmQgPiBidXQgbm90IGZvciBhIHNwZWNpYWwKK2FyZ3VtZW50IHdhcyBub3Qgc2tpcHBlZCBwcm9wZXJseS4KKworVGhlIERPUyBpbnN0YWxsIHByb2dyYW06IE9uIFdpbjIwMDAgdGhlIGNoZWNrIGZvciBhIHZpbS5leGUgb3IgZ3ZpbS5leGUgaW4KKyRQQVRIIGRpZG4ndCB3b3JrLCBpdCBhbHdheXMgZm91bmQgaXQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorUmVuYW1lIHRoZSB2aW0uZXhlIGluIHRoZSBjdXJyZW50IGRpciB0byBhdm9pZCB0aGlzLiAoV2FsdGVyIEJyaXNjb2UpCisKK0luIHRoZSBNUy1ET1MvV2luZG93cyBpbnN0YWxsIHByb2dyYW0sIHVzZSAlVklNJSBpbnN0ZWFkIG9mIGFuIGFic29sdXRlIHBhdGgsCitzbyB0aGF0IG1vdmluZyBWaW0gcmVxdWlyZXMgb25seSBvbmUgY2hhbmdlIGluIHRoZSBiYXRjaCBmaWxlLgorCitNYWM6IG1jaF9GdWxsTmFtZSgpIGNoYW5nZWQgdGhlICJmbmFtZSIgYXJndW1lbnQgYW5kIGRpZG4ndCBhbHdheXMgaW5pdGlhbGl6ZQordGhlIGJ1ZmZlci4KKworTVMtRE9TOiBtY2hfRnVsbE5hbWUoKSBkaWRuJ3QgZml4IGZvcndhcmQvYmFja3dhcmQgc2xhc2hlcyBpbiBhbiBhYnNvbHV0ZSBmaWxlCituYW1lLgorCisiZWNobyBleHBhbmQoIiU6cDpoIikiIHdpdGggYW4gZW1wdHkgZmlsZSBuYW1lIHJlbW92ZWQgb25lIGRpcmVjdG9yeSBuYW1lIG9uCitNUy1ET1MuICBGb3IgVW5peCwgd2hlbiB0aGUgZmlsZSBuYW1lIGlzIGEgZGlyZWN0b3J5LCB0aGUgZGlyZWN0b3J5IG5hbWUgd2FzCityZW1vdmVkLiAgTm93IG1ha2UgaXQgY29uc2lzdGVudDogIiU6cCIgYWRkcyBhIHBhdGggc2VwYXJhdG9yIGZvciBhbGwgc3lzdGVtcywKK2J1dCBubyBwYXRoIHNlcGFyYXRvciBpcyBhZGRlZCBpbiBvdGhlciBzaXR1YXRpb25zLgorCitVbml4OiBXaGVuIGNoZWNraW5nIGZvciBhIENUUkwtQyAoY291bGQgaGFwcGVuIGFueSB0aW1lKSBhbmQgdGhlcmUgaXMgYW4gWAorZXZlbnQgKGUuZy4sIGNsaXBib2FyZCB1cGRhdGVkKSBhbmQgdGhlcmUgaXMgdHlwZWFoZWFkLCBWaW0gd291bGQgaGFuZyB1bnRpbCBhCitjaGFyYWN0ZXIgd2FzIHR5cGVkLgorCitNUy1ET1MsIE1TLVdpbmRvd3MgYW5kIEFtaWdhOiBleHBhbmRpbmcgIiRFTlYvZm9vIiB3aGVuICRFTlYgZW5kcyBpbiBhIGNvbG9uLAoraGFkIHRoZSBzbGFzaCByZW1vdmVkLgorCisiOmhlIFxePSIgZ2F2ZSBhbiBlcnJvciBmb3IgdXNpbmcgXF8uICAiOmhlIF49IiBkaWRuJ3QgZmluZCB0YWcgOnNldF49LiAgRXZlbgorImhlIDpzZXRePSIgZGlkbid0IGZpbmQgaXQuCisKK0EgdGFncyBmaWxlIG5hbWUgIkQ6L3RhZ3MiIHdhcyB1c2VkIGFzIGZpbGUgInRhZ3MiIGluICJEOiIuICBUaGF0IGRvZXNuJ3Qgd29yaword2hlbiB0aGUgY3VycmVudCBwYXRoIGZvciBEOiBpc24ndCB0aGUgcm9vdCBvZiB0aGUgZHJpdmUuCisKK1JlbW92ZWQgY2FsbHMgdG8gWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3MoKSwgdGhleSBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgorCitXaGVuIHVzaW5nIGEgZHR0ZXJtIG9yIHZhcmlvdXMgb3RoZXIgY29sb3IgdGVybWluYWxzLCBhbmQgdGhlIE5vcm1hbCBncm91cCBoYXMKK2JlZW4gc2V0IHRvIHVzZSBhIGRpZmZlcmVudCBiYWNrZ3JvdW5kIGNvbG9yLCB0aGUgYmFja2dyb3VuZCB3b3VsZG4ndCBhbHdheXMKK2JlIGRpc3BsYXllZCB3aXRoIHRoYXQgY29sb3IuICBBZGRlZCBjaGVjayBmb3IgInV0IiB0ZXJtY2FwIGVudHJ5OiBJZiBpdCdzCittaXNzaW5nLCBjbGVhcmluZyB0aGUgc2NyZWVuIHdvbid0IGdpdmUgdXMgdGhlIGN1cnJlbnQgYmFja2dyb3VuZCBjb2xvci4gIE5lZWQKK3RvIGRyYXcgZWFjaCBjaGFyYWN0ZXIgaW5zdGVhZC4gIFZpbSBub3cgYWxzbyB3b3JrcyB3aGVuIHRoZSAiY2wiIChjbGVhcgorc2NyZWVuKSB0ZXJtY2FwIGVudHJ5IGlzIG1pc3NpbmcuCisKK1doZW4gcmVwZWF0aW5nIGEgIi8iIHNlYXJjaCBjb21tYW5kIHdpdGggYSBsaW5lIG9mZnNldCwgdGhlICJuIiBkaWQgdXNlIHRoZQorb2Zmc2V0IGJ1dCBkaWRuJ3QgbWFrZSB0aGUgbW90aW9uIGxpbmV3aXNlLiAgTWFkZSAiZC9wYXQvKzIiIGFuZCAiZG4iIGRvIHRoZQorc2FtZS4KKworV2luMzI6IFRyeWluZyB0byB1c2UgIjp0ZWFyb2ZmIiBmb3IgYSBtZW51IHRoYXQgZG9lc24ndCBleGlzdCBjYXVzZWQgYSBjcmFzaC4KKworT3BlblBUWSgpIGRpZG4ndCB3b3JrIG9uIFNlcXVlbnQuICBBZGQgYSBjb25maWd1cmUgY2hlY2sgZm9yIGdldHBzZXVkb3R0eSgpLgorCitDLWluZGVudGluZzogSW5kZW50ZWQgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIikiIHdpdGggdGhlIG1hdGNoaW5nICIoIiwgYnV0IG5vdAorYSBsaW5lIHN0YXJ0aW5nIHdpdGggIngpIiBsb29rcyBzdHJhbmdlLiAgQWxzbyBjb21wdXRlIHRoZSBpbmRlbnQgZm9yIGFsaWduaW5nCit3aXRoIGl0ZW1zIGluc2lkZSB0aGUgKCkgYW5kIHVzZSB0aGUgbG93ZXN0IGluZGVudC4KKworTVMtRE9TIGFuZCBXaW5kb3dzOiAiOm4gKi52aW0iIGFsc28gbWF0Y2hlZCBmaWxlcyBlbmRpbmcgaW4gIn4iLgorTW92ZWQgbWNoX2V4cGFuZHBhdGgoKSBmcm9tIG9zX3dpbjE2LmMgYW5kIG9zX21zZG9zLmMgdG8gbWlzYzEuYywgdGhleSBhcmUKK2VxdWFsLgorCitNYWNpbnRvc2g6IChEYW55IFN0LUFtYW50KQorLSBJbiBWaS1jb21wYXRpYmxlIG1vZGUgZGlkbid0IHJlYWQgZmlsZXMgd2l0aCBDUiBsaW5lIHNlcGFyYXRvcnMuCistIEZpeGVkIGEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBBY3RpdmF0ZS9EZWFjdGl2YXRlIEV2ZW50CistIEZpeGVkIGEgYnVnIGluIGd1aV9tY2hfZGlhbG9nICh1c2luZyB3cm9uZyBwb2ludGVyKQorCitNdWx0aWJ5dGUgR0RLIFhJTTogV2hpbGUgY29tcG9zaW5nIGEgbXVsdGlieXRlLXdvcmQsIGlmIHVzZXIgcHJlc3NlcyBhCittb3VzZSBidXR0b24sIHRoZW4gdGhlIHdvcmQgaXMgcmVtb3ZlZC4gIEl0IHNob3VsZCByZW1haW4gYW5kIGNvbXBvc2luZyBlbmQuCisoU3VuZy1IeXVuIE5hbSkKKworTVMtRE9TLCBNUy1XaW5kb3dzIGFuZCBPUy8yOiBXaGVuIHJlYWRpbmcgZnJvbSBzdGRpbiwgYXV0b21hdGljIENSLUxGCitjb252ZXJzaW9uIGJ5IHRoZSBDIGxpYnJhcnkgZ290IGluIHRoZSB3YXkgb2YgZGV0ZWN0aW5nIGEgImRvcyIgJ2ZpbGVmb3JtYXQnLgorCitXaGVuICdzbWFydGNhc2UnIGlzIHNldCwgcGF0dGVybnMgd2l0aCAiXFMiIHdvdWxkIGFsc28gbWFrZSAnaWdub3JlY2FzZScKK3Jlc2V0LgorCitXaGVuIGNsaWNraW5nIHRoZSBtb3VzZSBpbiBhIGNvbHVtbiBsYXJnZXIgdGhhbiAyMjIsIGl0IG1vdmVkIHRvIHRoZSBmaXJzdAorY29sdW1uLiAgQ2FuJ3QgZW5jb2RlIGEgbGFyZ2VyIG51bWJlciBpbiBhIGNoYXJhY3Rlci4gIE5vdyBsaW1pdCB0aGUgbnVtYmVyIHRvCisyMjIsIGRvbid0IGp1bXAgYmFjayB0byB0aGUgZmlyc3QgY29sdW1uLgorCitHVUk6IEluIHNvbWUgdmVyc2lvbnMgQ1NJIHdvdWxkIGNhdXNlIHRyb3VibGUsIGVpdGhlciB3aGVuIHR5cGVkIGRpcmVjdGx5IG9yCit3aGVuIHBhcnQgb2YgYSBtdWx0aS1ieXRlIHNlcXVlbmNlLgorCitXaGVuIHVzaW5nIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIGEgIjpub3JtYWwiIGNvbW1hbmQsIGEgdHJhaWxpbmcgYnl0ZSB0aGF0CitpcyBDU0kgb3IgS19TUEVDSUFMIGNhdXNlZCBwcm9ibGVtcy4KKworV2lsZG1lbnUgZGlkbid0IGhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCisKKyI6c2xlZXAgMTAiIGNvdWxkIG5vdCBiZSBpbnRlcnJ1cHRlZCBvbiBXaW5kb3dzLCB3aGlsZSAiZ3MiIGNvdWxkLiAgTWFkZSB0aGVtCitib3RoIHdvcmsgdGhlIHNhbWUuCisKK1VuaXg6IFdoZW4gd2FpdGluZyBmb3IgYSBjaGFyYWN0ZXIgaXMgaW50ZXJydXB0ZWQgYnkgYW4gWC13aW5kb3dzIGV2ZW50IChlLmcuLAordG8gb2J0YWluIHRoZSBjb250ZW50cyBvZiB0aGUgc2VsZWN0aW9uKSwgdGhlIHdhaXQgdGltZSB3b3VsZCBub3QgYmUgaG9ub3JlZC4KK0EgbWVzc2FnZSBjb3VsZCBiZSBvdmVyd3JpdHRlbiBxdWlja2x5LiAgTm93IGNvbXB1dGUgdGhlIHJlbWFpbmluZyB3YWl0aW5nCit0aW1lLgorCitXaW5kb3dzOiBDb21wbGV0aW5nICJcXHNoYXJlXGMkXFMiIGluc2VydGVkIGEgYmFja3NsYXNoIGJlZm9yZSB0aGUgJCBhbmQgdGhlbgordGhlIG5hbWUgaXMgaW52YWxpZC4gIERvbid0IGluc2VydCB0aGUgYmFja3NsYXNoLgorCitXaGVuIGRvaW5nIGFuIGF1dG8td3JpdGUgYmVmb3JlICI6bWFrZSIsIElPYnVmZiB3YXMgb3ZlcndyaXR0ZW4gYW5kIHRoZSB3cm9uZwordGV4dCBkaXNwbGF5ZWQgbGF0ZXIuCisKK09uIHRoZSBNYWMgdGhlIGRpcmVjdG9yaWVzICJjOi90bXAiIGFuZCAiYzovdGVtcCIgd2VyZSB1c2VkIGluIHRoZSBkZWZhdWx0cworZm9yICdiYWNrdXBkaXInIGFuZCAnZGlyZWN0b3J5JywgdGhleSBkb24ndCBleGlzdC4KKworVGhlIGNoZWNrIGZvciBhIG5ldyBmaWxlIG5vdCB0byBiZSBvbiBhbiBNUy1ET1MgZmlsZXN5c3RlbSBjcmVhdGVkIHRoZSBmaWxlCit0ZW1wb3JhcmlseSwgd2hpY2ggY2FuIGJlIHNsb3cuICBEb24ndCBkbyB0aGlzIGlmIHRoZXJlIGlzIGFub3RoZXIgY2hlY2sgZm9yCit0aGUgc3dhcCBmaWxlIGJlaW5nIG9uIGFuIE1TLURPUyBmaWxlc3lzdGVtLgorCitEb24ndCBnaXZlIHRoZSAiQ2hhbmdpbmcgYSByZWFkb25seSBmaWxlIiB3YXJuaW5nIHdoZW4gcmVhZGluZyBmcm9tIHN0ZGluLgorCitXaGVuIHVzaW5nIHRoZSAiU2F2ZSBBcyIgbWVudSBlbnRyeSBhbmQgbm90IGVudGVyaW5nIGEgZmlsZSBuYW1lLCB3b3VsZCBnZXQgYW4KK2Vycm9yIG1lc3NhZ2UgZm9yIHRoZSB0cmFpbGluZyAiOmVkaXQgIyIuICBOb3cgb25seSBkbyB0aGF0IHdoZW4gdGhlCithbHRlcm5hdGUgZmlsZSBuYW1lIHdhcyBjaGFuZ2VkLgorCitXaGVuIFZpbSBvd25zIHRoZSBYMTEgc2VsZWN0aW9uIGFuZCBpcyBiZWluZyBzdXNwZW5kZWQsIGFuIGFwcGxpY2F0aW9uIHRoYXQKK3RyaWVzIHRvIHVzZSB0aGUgc2VsZWN0aW9uIGhhbmdzLiAgV2hlbiBWaW0gY29udGludWVzIGl0IGNvdWxkIG5vIGxvbmdlcgorb2J0YWluIHRoZSBzZWxlY3Rpb24uICBOb3cgZ2l2ZSB1cCB0aGUgc2VsZWN0aW9uIHdoZW4gc3VzcGVuZGluZy4KKworb3B0aW9uLmggYW5kIGdsb2JhbHMuaCB3ZXJlIGluY2x1ZGVkIGluIHNvbWUgZmlsZXMsIHdoaWxlIHRoZXkgd2VyZSBhbHJlYWR5CitpbmNsdWRlZCBpbiB2aW0uaC4gIE1vdmVkIHRoZSBkZWZpbml0aW9uIG9mIEVYVEVSTiB0byB2aW0uaCB0byBhdm9pZCBkb2luZyBpdAordHdpY2UuCisKK1doZW4gcmVwZWF0aW5nIGFuIG9wZXJhdG9yIHRoYXQgdXNlZCBhIHNlYXJjaCBwYXR0ZXJuIGFuZCB0aGUgc2VhcmNoIHBhdHRlcm4KK2NvbnRhaW5lZCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBvbiB0aGUgY21kbGluZSAoZS5nLiwgQ1RSTC1VKQoraXQgZGlkbid0IHdvcmsuCisKK0ZpeGVkIHZhcmlvdXMgcHJvYmxlbXMgd2l0aCB1c2luZyBLX1NQRUNJQUwgKDB4ODApIGFuZCBDU0kgKDB4OWIpIGFzIGEgYnl0ZSBpbgorYSAobXVsdGlieXRlKSBjaGFyYWN0ZXIuICBGb3IgZXhhbXBsZSwgdGhlICJyIiBjb21tYW5kIGNvdWxkIG5vdCBiZSByZXBlYXRlZC4KKworVGhlIERPUy9XaW5kb3dzIGluc3RhbGwgcHJvZ3JhbSBkaWRuJ3QgYWx3YXlzIHdvcmsgZnJvbSBhIGRpcmVjdG9yeSB3aXRoIGEKK2xvbmcgZmlsZW5hbWUsIGJlY2F1c2UgJFZJTSBhbmQgdGhlIGV4ZWN1dGFibGUgbmFtZSB3b3VsZCBub3QgaGF2ZSB0aGUgc2FtZQorcGF0aC4KKworTXVsdGktYnl0ZToKKy0gVXNpbmcgYW4gYW55LWJ1dCBjaGFyYWN0ZXIgcmFuZ2UgW154XSBpbiBhIHJlZ2V4cCBkaWRuJ3Qgd29yayBmb3IgVVRGLTguCisgIChNdXJhb2thIFRhcm8pCistIFdoZW4gYmFja3NwYWNpbmcgb3ZlciBpbnNlcnRlZCBjaGFyYWN0ZXJzIGluIFJlcGxhY2UgbW9kZSBtdWx0aS1ieXRlCisgIGNoYXJhY3RlcnMgd2VyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIChNdXJhb2thIFRhcm8pCistIFNlYXJjaCBjb21tYW5kcyAiIyIgYW5kICIqIiBkaWRuJ3Qgd29yayB3aXRoIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAoTXVyYW9rYQorICBUYXJvKQorLSBXb3JkIGNvbXBsZXRpb24gaW4gSW5zZXJ0IG1vZGUgZGlkbid0IHdvcmsgd2l0aCBtdWx0aWJ5dGUgY2hhcmFjdGVycy4KKyAgKE11cmFva2EgVGFybykKKy0gQXRoZW5hL01vdGlmIEdVSTogd2hlbiAnbGluZXNwYWNlJyBpcyBub24temVybyB0aGUgY3Vyc29yIHdvdWxkIGJlIGRyYXduIHRvbworICB3aWRlIChudW1iZXIgb2YgYnl0ZXMgaW5zdGVhZCBvZiBjZWxsIHdpZHRoKS4KKy0gV2hlbiBjaGFuZ2luZyAnZW5jb2RpbmcnIHRvICJldWMtanAiIGFuZCBpbnNlcnRpbmcgYSBjaGFyYWN0ZXIgVmltIHdvdWxkCisgIGNyYXNoLgorLSBGb3IgZXVjLWpwIGNoYXJhY3RlcnMgcG9zaXRpb25pbmcgdGhlIGN1cnNvciB3b3VsZCBzb21ldGltZXMgYmUgd3JvbmcuCisgIEFsc28sIHdpdGggdHdvIGNoYXJhY3RlcnMgd2l0aCAweDhlIGxlYWRpbmcgYnl0ZSBvbmx5IHRoZSBmaXJzdCBvbmUgd291bGQgYmUKKyAgZGlzcGxheWVkLgorLSBXaGVuIHVzaW5nIERZTkFNSUNfSUNPTlYgb24gV2luMzIgY29udmVyc2lvbiBtaWdodCBmYWlsIGJlY2F1c2Ugb2YgdXNpbmcgdGhlCisgIHdyb25nIGVycm9yIG51bWJlci4gKE11cmFva2EgVGFybykKKy0gVXNpbmcgQWx0LXggaW4gdGhlIEdVSSB3aGlsZSAnZW5jb2RpbmcnIHdhcyBzZXQgdG8gInV0Zi04IiBkaWRuJ3QgcHJvZHVjZQorICB0aGUgcmlnaHQgY2hhcmFjdGVyLgorLSBXaGVuIHVzaW5nIFZpc3VhbCBibG9jayBzZWxlY3Rpb24gYW5kIG9ubHkgdGhlIGxlZnQgaGFsdmUgb2YgYSBkb3VibGUtd2lkZQorICBjaGFyYWN0ZXIgaXMgc2VsZWN0ZWQsIHRoZSBoaWdobGlnaHRpbmcgY29udGludWVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCistIFZpc3VhbC1ibG9jayBkZWxldGUgZGlkbid0IHdvcmsgcHJvcGVybHkgd2hlbiBkZWxldGluZyB0aGUgcmlnaHQgaGFsdmUgb2YgYQorICBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuCistIE92ZXJzdHJpa2UgbW9kZSBmb3IgdGhlIGNtZGxpbmUgcmVwbGFjZWQgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZQorICBjaGFyYWN0ZXIuCistIFRoZSBjdXJzb3IgaW4gUmVwbGFjZSBtb2RlIChhbHNvIGluIHRoZSBjbWRsaW5lKSB3YXMgdG8gc21hbGwgb24gYQorICBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuCistIFdoZW4gYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGNvbnRhaW5lZCBhIDB4ODAgYnl0ZSwgaXQgZGlkbid0IHdvcmsgKHdhcyB1c2luZworICBhIENTSSBieXRlIGluc3RlYWQpLiAoTXVyYW9rYSBUYXJvKQorLSBXb3Jkd2lzZSBzZWxlY3Rpb24gd2l0aCB0aGUgbW91c2UgZGlkbid0IHdvcmsuCistIFlhbmtpbmcgYSBtb2RlbGVzcyBzZWxlY3Rpb24gb2YgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGRpZG4ndCB3b3JrLgorLSBXaGVuICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiLCBzZWxlY3RpbmcgYSB3b3JkIHRoYXQgZW5kcyBpbiBhIG11bHRpLWJ5dGUKKyAgY2hhcmFjdGVyIHVzZWQgd3JvbmcgaGlnaGxpZ2h0aW5nIGZvciB0aGUgZm9sbG93aW5nIGNoYXJhY3Rlci4KKworV2luMzIgd2l0aCBNYWtlX212Yy5tYWs6IERpZG4ndCBjb21waWxlIGZvciBkZWJ1Z2dpbmcuIChDcmFpZyBCYXJraG91c2UpCisKK1dpbjMyIEdVSTogV2hlbiAidmltcnVuLmV4ZSIgaXMgdXNlZCB0byBleGVjdXRlIGFuIGV4dGVybmFsIGNvbW1hbmQsIGRvbid0CitnaXZlIGEgbWVzc2FnZSBib3ggd2l0aCB0aGUgcmV0dXJuIHZhbHVlLCBpdCB3YXMgYWxyZWFkeSBwcmludGVkIGJ5IHZpbXJ1bi4KK0Fsc28gYXZvaWQgcHJpbnRpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc2hlbGwgd2hlbiAiOnNpbGVudCEiIGlzIHVzZWQuCisKK1dpbjMyOiBzZWxlY3RpbmcgYSBsb3Qgb2YgdGV4dCBhbmQgdXNpbmcgdGhlICJmaW5kL3JlcGxhY2UiIGRpYWxvZyBjYXVzZWQgYQorY3Jhc2guCisKK1gxMSBHVUk6IFdoZW4gdHlwaW5nIGEgY2hhcmFjdGVyIHdpdGggdGhlIDh0aCBiaXQgc2V0IGFuZCB0aGUgTWV0YS9BbHQKK21vZGlmaWVyLCB0aGUgbW9kaWZpZXIgd2FzIHJlbW92ZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgY2hhcmFjdGVyLgorCitUcnVuY2F0aW5nIGEgbWVzc2FnZSB0byBtYWtlIGl0IGZpdCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2luZyAiLi4uIiBmb3IgdGhlCittaWRkbGUsIGRpZG4ndCBhbHdheXMgY29tcHV0ZSB0aGUgc3BhY2UgY29ycmVjdGx5LgorCitDb3VsZCBub3QgaW1hcCA8Qy1APi4gIE5vdyBpdCB3b3JrcyBsaWtlIDxOdWw+LgorCitWTVM6CistIEZpeGVkIGEgZmV3IHRoaW5ncyBmb3IgVkFYQy4gIG9zX3Ztc19maXguY29tIGhhZCBzb21lIHN0cmFuZ2UgQ1RSTC1NCisgIGNoYXJhY3RlcnMuIChab2x0YW4gQXJwYWRmZnkgYW5kIEpvaG4gVy4gSGFtaWxsKQorLSBBZGRlZCBWTVMtc3BlY2lmaWMgZGVmYXVsdHMgZm9yIHRoZSAnaXNmbmFtZScgYW5kICdpc3ByaW50JyBvcHRpb25zLgorICAoWm9sdGFuIEFycGFkZmZ5KQorLSBSZW1vdmVkIG9zX3Ztc19vc2RlZi5oLCBpdCdzIG5vIGxvbmdlciB1c2VkLgorCitUaGUgZ3ppcCBwbHVnaW4gdXNlZCBhICI6bm9ybWFsIiBjb21tYW5kLCB0aGlzIGRvZXNuJ3Qgd29yayB3aGVuIGRyb3BwaW5nIGEKK2NvbXByZXNzZWQgZmlsZSBvbiBWaW0uCisKK0luIHZlcnkgcmFyZSBzaXR1YXRpb25zIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSB0YWcgd291bGQgZmFpbCwgYmVjYXVzZSBhbgordW5pbml0aWFsaXplZCB2YWx1ZSBoYXBwZW5zIHRvIGJlIGhhbGYgdGhlIHNpemUgb2YgdGhlIHRhZyBmaWxlLiAoTmFyZW5kcmFuKQorCitXaGVuIHVzaW5nIEJ1ZkVudGVyIGFuZCBCdWZMZWF2ZSBhdXRvY29tbWFuZHMgdG8gZW5hYmxlL2Rpc2FibGUgYSBtZW51LCBpdAord2Fzbid0IHVwZGF0ZWQgcmlnaHQgYXdheS4KKworV2hlbiBkb2luZyBhIHJlcGxhY2Ugd2l0aCB0aGUgImMib25maXJtIGZsYWcsIHRoZSBjdXJzb3Igd2FzIHBvc2l0aW9uZWQgYWZ0ZXIKK3RoZSBydWxlciwgaW5zdGVhZCBvZiBhZnRlciB0aGUgcXVlc3Rpb24uICBXaXRoIGEgbG9uZyByZXBsYWNlbWVudCBzdHJpbmcgdGhlCitzY3JlZW4gY291bGQgc2Nyb2xsIHVwIGFuZCBjYXVzZSBhICJtb3JlIiBwcm9tcHQuICBOb3cgdGhlIG1lc3NhZ2UgaXMKK3RydW5jYXRlZCB0byBtYWtlIGl0IGZpdC4KKworTW90aWY6IFRoZSBhdXRvY29uZiBjaGVjayBmb3IgdGhlIFhwIGxpYnJhcnkgZGlkbid0IHdvcmsuCisKK1doZW4gJ3ZlcmJvc2UnIGlzIHNldCB0byBsaXN0IGxpbmVzIG9mIGEgc291cmNlZCBmaWxlLCBkZWZpbmluZyBhIGZ1bmN0aW9uCit3b3VsZCByZXNldCB0aGUgY291bnRlciB1c2VkIGZvciB0aGUgIm1vcmUiIHByb21wdC4KKworSW4gdGhlIFdpbjMyIGZpbmQvcmVwbGFjZSBkaWFsb2csIGEgJy8nIGNoYXJhY3RlciBjYXVzZWQgcHJvYmxlbXMuICBFc2NhcGUgaXQKK3dpdGggYSBiYWNrc2xhc2guCisKK1N0YXJ0aW5nIGEgc2hlbGwgd2l0aCAiOnNoIiB3YXMgZGlmZmVyZW50IGZyb20gc3RhcnRpbmcgYSBzaGVsbCBmb3IgQ1RSTC1aCit3aGVuIHN1c3BlbmRpbmcgZG9lc24ndCB3b3JrLiAgVGhleSBub3cgd29yayB0aGUgc2FtZSB3YXkuCisKK0p1bXBpbmcgdG8gYSBmaWxlIG1hcmsgd2hpbGUgaW4gYSBjaGFuZ2VkIGJ1ZmZlciBnYXZlIGEgIm1hcmsgbm90IHNldCIgZXJyb3IuCisKKyI6ZXhlY3V0ZSBoaXN0Z2V0KCJjbWQiKSIgY2F1c2VzIGFuIGVuZGxlc3MgbG9vcCBhbmQgY3Jhc2hlZCBWaW0uICBOb3cgY2F0Y2gKK2FsbCBjb21tYW5kcyB0aGF0IGNhdXNlIHRvbyBtdWNoIHJlY3Vyc2l2ZW5lc3MuCisKK1JlbW92ZWQgIkZhaWxlZCB0byBvcGVuIGlucHV0IG1ldGhvZCIgZXJyb3IgbWVzc2FnZSwgdG9vIG1hbnkgcGVvcGxlIGdvdCB0aGlzCit3aGVuIHRoZXkgZGlkbid0IHdhbnQgdG8gdXNlIGEgWElNLgorCitHVUk6IFdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3dpbmRvd3MgZmVhdHVyZSwgdGhlIHNjcm9sbGJhciB3b3VsZCBzdGFydAorYmVsb3cgbGluZSBvbmUuCisKK1JlbW92ZWQgdGhlIHRyaWNrIHdpdGggcmVkZWZpbmluZyBjaGFyYWN0ZXIgY2xhc3MgZnVuY3Rpb25zIGZyb20gcmVnZXhwLmMuCisKK1dpbjMyIEdVSTogRmluZCBkaWFsb2cgZ2l2ZXMgZm9jdXMgYmFjayB0byBtYWluIHdpbmRvdywgd2hlbiB0eXBpbmcgYQorY2hhcmFjdGVyIG1vdXNlIHBvaW50ZXIgaXMgYmxhbmtlZCwgaXQgZGlkbid0IHJlYXBwZWFyIHdoZW4gbW92aW5nIGl0IGluIHRoZQorZGlhbG9nIHdpbmRvdy4gKFZpbmNlIE5lZ3JpKQorCitXaGVuIHJlY29yZGluZyBhbmQgdHlwaW5nIGEgQ1RSTC1DLCBubyBjaGFyYWN0ZXIgd2FzIHJlY29yZGVkLiAgV2hlbiBpbiBJbnNlcnQKK21vZGUgb3IgY2FuY2VsbGluZyBoYWxmIGEgY29tbWFuZCwgcGxheWluZyBiYWNrIHRoZSByZWNvcmRlZCBzZXF1ZW5jZSB3b3VsZG4ndAord29yay4gIE5vdyByZWNvcmQgdGhlIENUUkwtQy4KKworV2hlbiB0aGUgR1VJIHdhcyBzdGFydGVkLCBtb3VzZSBjb2RlcyBmb3IgREVDIGFuZCBuZXR0ZXJtIHdlcmUgc3RpbGwgY2hlY2tlZAorZm9yLgorCitHVUk6IFdoZW4gc2Nyb2xsaW5nIGFuZCAnd3JpdGVkZWxheScgaXMgbm9uLXplcm8sIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlCitjdXJzb3Igd2FzIGRpc3BsYXllZCBpbiB0aGUgd3JvbmcgcG9zaXRpb24gKG9uZSBsaW5lIGFib3ZlL2JlbG93IHdpdGgKK0NUUkwtRS9DVFJMLVkpLgorCitBICI6bm9ybWFsIiBjb21tYW5kIHdvdWxkIHJlc2V0IHRoZSAnc2Nyb2xsYmluZCcgaW5mby4gIENhdXNlcyBwcm9ibGVtcyB3aGVuCit1c2luZyBhICI6bm9ybWFsIiBjb21tYW5kIGluIGFuIGF1dG9jb21tYW5kIGZvciBvcGVuaW5nIGEgZmlsZS4KKworV2luZG93cyBHVUk6IGEgcG9pbnQgc2l6ZSB3aXRoIGEgZG90LCBsaWtlICI3LjUiLCB3YXNuJ3QgcmVjb2duaXplZC4gKE11cmFva2EKK1Rhcm8pCisKK1doZW4gJ3Njcm9sbGJpbmQnIHdhc24ndCBzZXQgd291bGQgc3RpbGwgcmVtZW1iZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24sCit3YXN0aW5nIHRpbWUuCisKK0dUSzogQ3Jhc2ggd2hlbiAnc2hlbGwnIGRvZXNuJ3QgZXhpc3QgYW5kIGRvaW5nIjohbHMiLiAgVXNlIF9leGl0KCkgaW5zdGVhZCBvZgorZXhpdCgpIHdoZW4gdGhlIGNoaWxkIGNvdWxkbid0IGV4ZWN1dGUgdGhlIHNoZWxsLgorCitNdWx0aS1ieXRlOgorLSBHVUkgd2l0aCBkb3VibGUtYnl0ZSBlbmNvZGluZzogYSBtb3VzZSBjbGljayBpbiBsZWZ0IGhhbHZlIG9mIGRvdWJsZS13aWRlCisgIGNoYXJhY3RlciBwdXQgdGhlIGN1cnNvciBpbiBwcmV2aW91cyBjaGFyLgorLSBVc2luZyBkb3VibGUtYnl0ZSBlbmNvZGluZyBhbmQgJ3NlbGVjdGlvbicgaXMgImV4Y2x1c2l2ZSI6ICJ2ZXkiIGFuZCAiXlZleSIKKyAgaW5jbHVkZWQgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgd29yZC4KKy0gV2hlbiB1c2luZyBhIGRvdWJsZS1ieXRlIGVuY29kaW5nIGFuZCB0aGVyZSBpcyBhIGxlYWQgYnl0ZSBhdCB0aGUgZW5kIG9mIHRoZQorICBsaW5lLCB0aGUgcHJlY2VkaW5nIGxpbmUgd291bGQgYmUgZGlzcGxheWVkLiAgImdhIiBhbHNvIHNob3dlZCB3cm9uZyBpbmZvLgorLSAiZ2YiIGRpZG4ndCBpbmNsdWRlIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvciBwcm9wZXJseS4KKyAgKE11cmFva2EgVGFybykKKworR1VJOiBUaGUgY3Vyc29yIHdhcyBzb21ldGltZXMgbm90IHJlbW92ZWQgd2hlbiBzY3JvbGxpbmcuICBDaGFuZ2VkIHRoZSBwb2xpY3kKK2Zyb20gcmVkcmF3aW5nIHRoZSBjdXJzb3IgYWZ0ZXIgZWFjaCBjYWxsIHRvIGd1aV93cml0ZSgpIHRvIG9ubHkgdXBkYXRlIGl0IGF0Cit0aGUgZW5kIG9mIHVwZGF0ZV9zY3JlZW4oKSBvciB3aGVuIHNldHRpbmcgdGhlIGN1cnNvciBwb3NpdGlvbi4gIEFsc28gb25seQordXBkYXRlIHRoZSBzY3JvbGxiYXJzIGF0IHRoZSBlbmQgb2YgdXBkYXRlX3NjcmVlbigpLCB0aGF0J3MgdGhlIG9ubHkgcGxhY2UKK3doZXJlIHRoZSB3aW5kb3cgdGV4dCBtYXkgaGF2ZSBiZWVuIHNjcm9sbGVkLgorCitGb3JtYXR0aW5nICIvKjxUYWI+bG9uZyB0ZXh0IiwgcHJvZHVjZWQgIiogPFRhYj4iIGluIHRoZSBuZXh0IGxpbmUuICBOb3cKK3JlbW92ZSB0aGUgc3BhY2UgYmVmb3JlIHRoZSBUYWIuCitGb3JtYXR0aW5nICIvKjxUYWI+ICBsb25nIHRleHQiLCBwcm9kdWNlZCAiKiA8VGFiPiBsb25nIHRleHQiIGluIHRoZSBuZXh0CitsaW5lLiAgTm93IGtlZXAgdGhlIHNwYWNlIGFmdGVyIHRoZSBUYWIuCisKK0luIHNvbWUgcGxhY2VzIG5vbi1BU0NJSSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB3ZXJlIGFjY2VwdGVkLCB3aGljaCBjb3VsZAorY2F1c2UgcHJvYmxlbXMuICBGb3IgZXhhbXBsZSwgIjpYIiAoWCBiZWluZyBzdWNoIGEgY2hhcmFjdGVyKS4KKworV2hlbiBhIHBhdHRlcm4gbWF0Y2hlcyB0aGUgZW5kIG9mIHRoZSBsaW5lLCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgd2FzCitoaWdobGlnaHRlZCBmb3IgJ2hsc2VhcmNoJy4gIFRoYXQgbG9va3Mgd3JvbmcgZm9yICIvXCUzYyIuICBOb3cgaGlnaGxpZ2h0IHRoZQorY2hhcmFjdGVyIGp1c3QgYWZ0ZXIgdGhlIGxpbmUuCisKK01vdGlmOiBJZiBhIGRpYWxvZyB3YXMgY2xvc2VkIGJ5IGNsaWNraW5nIG9uIHRoZSAiWCIgb2YgdGhlIHdpbmRvdyBmcmFtZSBWaW0KK3dvdWxkIG5vIGxvbmdlciByZXNwb25kLgorCitXaGVuIHVzaW5nIENUUkwtWCBvciBDVFJMLUEgb24gYSBudW1iZXIgd2l0aCBtYW55IGxlYWRpbmcgemVyb3MsIFZpbSB3b3VsZAorY3Jhc2guIChNYXRzdW1vdG8pCisKK1doZW4gJ2luc2VydG1vZGUnIGlzIHNldCwgdGhlIG1hcHBpbmcgaW4gbXN3aW4udmltIGZvciBDVFJMLVYgZGlkbid0IHdvcmsgaW4KK1NlbGVjdCBtb2RlLiAgSW5zZXJ0IG1vZGUgd2Fzbid0IHJlc3RhcnRlZCBhZnRlciBvdmVyd3JpdGluZyB0aGUgdGV4dC4KK05vdyBhbGxvdyBuZXN0aW5nIEluc2VydCBtb2RlIHdpdGggaW5zZXJ0IGFuZCBjaGFuZ2UgY29tbWFuZHMuICBDVFJMLU8KK2N3Zm9vPEVzYz4gbm93IGFsc28gd29ya3MuCisKK0NsaWNraW5nIHdpdGggdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpbiBhbm90aGVyIHdpbmRvdyBzdGFydGVkIFZpc3VhbCBtb2RlLAorYnV0IHVzZWQgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gIENhdXNlZCBtbF9nZXQgZXJyb3JzIHdoZW4KK3RoZSBsaW5lIG51bWJlciB3YXMgaW52YWxpZC4gIE5vdyBzdGF5IGluIHRoZSBzYW1lIHdpbmRvdy4KKworV2hlbiAnc2VsZWN0aW9uJyBpcyAiZXhjbHVzaXZlIiwgImd2IiBzb21ldGltZXMgc2VsZWN0ZWQgb25lIGNoYXJhY3RlciBmZXdlci4KKworV2hlbiAnY29tbWVudHMnIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgc3RhcnQvbWlkZGxlL2VuZCB0cmlwbGV0LCB0aGUgb3B0aW9uYWwKK2ZsYWdzIGNvdWxkIGJlIG1peGVkIHVwLiAgQWxzbyBkaWRuJ3QgYWxpZ24gdGhlIGVuZCB3aXRoIHRoZSBtaWRkbGUgcGFydC4KKworRG91YmxlLXJpZ2h0LWNsaWNrIGluIFZpc3VhbCBtb2RlIGRpZG4ndCB1cGRhdGUgdGhlIHNob3duIG1vZGUuCisKK1doZW4gdGhlIE5vcm1hbCBncm91cCBoYXMgYSBmb250IG5hbWUsIGl0IHdhcyBuZXZlciB1c2VkIHdoZW4gc3RhcnRpbmcgdXAuCitOb3cgdXNlIGl0IHdoZW4gJ2d1aWZvbnQnIGFuZCAnZ3VpZm9udHNldCcgYXJlIGVtcHR5LgorU2V0dGluZyBhIGZvbnQgbmFtZSB0byBhIGhpZ2hsaWdodCBncm91cCBiZWZvcmUgdGhlIEdVSSB3YXMgc3RhcnRlZCBkaWRuJ3QKK3dvcmsuCisKKyJtYWtlIHRlc3QiIGRpZG4ndCB1c2UgdGhlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBWaW0gZXhlY3V0YWJsZS4KKworJ2NpbmRlbnQnIHByb2JsZW1zOgorLSBBbGlnbmVkIHdpdGggYW4gImVsc2UiIGluc2lkZSBhIGRvLXdoaWxlIGxvb3AgZm9yIGEgbGluZSBiZWxvdyB0aGF0IGxvb3AuCisgIChNZWlrZWwgQnJhbmRtZXllcikKKy0gQSBsaW5lIGJlZm9yZSBhIGZ1bmN0aW9uIHdvdWxkIGJlIGluZGVudGVkIGV2ZW4gd2hlbiB0ZXJtaW5hdGVkIHdpdGggYQorICBzZW1pY29sb24uIChNZWlrZWwgQnJhbmRtZXllcikKKy0gJ2NpbmRlbnQnIGdhdmUgdG9vIG11Y2ggaW5kZW50IHRvIGEgbGluZSBhZnRlciBhICJ9OyIgdGhhdCBlbmRzIGFuIGFycmF5CisgIGluaXQuCistIFN1cHBvcnQgZGVjbGFyYXRpb24gbGluZXMgZW5kaW5nIGluICIsIiBhbmQgIlwiLiAgKE1laWtlbCBCcmFuZG1leWVyKQorLSBBIGNhc2Ugc3RhdGVtZW50IGluc2lkZSBhIGRvLXdoaWxlIGxvb3Agd2FzIHVzZWQgZm9yIGluZGVudGluZyBhIGxpbmUgYWZ0ZXIKKyAgdGhlIGRvLXdoaWxlIGxvb3AuIChNZWlrZWwgQnJhbmRtZXllcikKKy0gV2hlbiBza2lwcGluZyBhIHN0cmluZyBpbiBhIGxpbmUgd2l0aCBvbmUgZG91YmxlIHF1b3RlIGl0IGNvdWxkIGNvbnRpbnVlIGluCisgIHRoZSBwcmV2aW91cyBsaW5lLiAoTWVpa2VsIEJyYW5kbWV5ZXIpCisKK1doZW4gJ2xpc3QnIGlzIHNldCwgJ2hsc2VhcmNoJyBkaWRuJ3QgaGlnaGxpZ2h0IGEgbWF0Y2ggYXQgdGhlIGVuZCBvZiB0aGUKK2xpbmUuICBOb3cgaGlnaGxpZ2h0IHRoZSAnJCcuCisKK1RoZSBQYXN0ZSBtZW51IGl0ZW0gaW4gdGhlIG1lbnUgYmFyLCB0aGUgcG9wdXAgbWVudSBhbmQgdGhlIHRvb2xiYXIgd2VyZSBhbGwKK2RpZmZlcmVudC4gIE5vdyBtYWRlIHRoZW0gYWxsIGVxdWFsIHRvIGhvdyBpdCB3YXMgZG9uZSBpbiBtc3dpbi52aW0uCisKK3N0X2RldiBjYW4gYmUgc21hbGxlciB0aGFuICJ1bnNpZ25lZCIuICBUaGUgY29tcGlsZXIgbWF5IGdpdmUgYW4gb3ZlcmZsb3cKK3dhcm5pbmcuICBBZGRlZCBhIGNvbmZpZ3VyZSBjaGVjayBmb3IgZGV2X3QuCisKK0F0aGVuYTogY2xvc2luZyBhIGNvbmZpcm0oKSBkaWFsb2cga2lsbGVkIFZpbS4KKworVmFyaW91cyB0eXBvcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gKE1hdHQgRHVuZm9yZCkKKworUHl0aG9uIGludGVyZmFjZTogVGhlIGRlZmluaXRpb24gb2YgX0RFQlVHIGNvdWxkIGNhdXNlIHRyb3VibGUsIHVuZGVmaW5lIGl0LgorVGhlIGVycm9yIG1lc3NhZ2UgZm9yIG5vdCBiZWluZyBhYmxlIHRvIGxvYWQgdGhlIHNoYXJlZCBsaWJyYXJ5IHdhc24ndAordHJhbnNsYXRlZC4gIChNdXJhb2thIFRhcm8pCisKK01hYzogKERhbnkgU3QtQW1hbnQgYW5kIEF4ZWwgS2llbGhvcm4pCistIFNldmVyYWwgZml4ZXMuCistIFZpbSB3YXMgZWF0aW5nIDgwJSBvZiB0aGUgQ1BVIHRpbWUuCistIFRoZSBwcm9qZWN0IG9zX21hYy5wYnhwcm9qIGRpZG4ndCB3b3JrLCAgTW92ZWQgaXQgdG8gYSBzdWJkaXJlY3RvcnkuCistIE1hZGUgdGhlIG1lbnUgcHJpb3JpdHkgd29yayBmb3IgdGhlIG1lbnViYXIuCistIEZpeGVkIGEgcHJvYmxlbSB3aXRoIGRyYWdnaW5nIHRoZSBzY3JvbGxiYXIuCistIENsZWFuZWQgdXAgdGhlIHZhcmlvdXMgI2lmZGVmcy4KKworVW5peDogV2hlbiBjYXRjaGluZyBhIGRlYWRseSBzaWduYWwgYW5kIHdlIGtlZXAgZ2V0dGluZyBvbmUgdXNlIF9leGl0KCkgdG8KK2V4aXQgaW4gYSBxdWljayBhbmQgZGlydHkgd2F5LgorCitBdGhlbmEgbWVudSBvcmRlcmluZyBkaWRuJ3Qgd29yayBjb3JyZWN0bHkuIChEYXZpZCBIYXJyaXNvbikKKworQSAiOm1ha2UiIG9yICI6Z3JlcCIgY29tbWFuZCB3aXRoIGEgbG9uZyBhcmd1bWVudCBjb3VsZCBjYXVzZSBhIGNyYXNoLgorCitEb2luZyAiOm5ldyBmaWxlIiBhbmQgdXNpbmcgIlF1aXQiIGZvciB0aGUgQVRURU5USU9OIGRpYWxvZyBzdGlsbCBvcGVuZWQgYSBuZXcKK3dpbmRvdy4KKworR1RLOiBXaGVuIHN0YXJ0aW5nIHRoZSBHVUkgYW5kIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSAudmltcmMgZmlsZSwgZG9uJ3QKK3ByZXNlbnQgdGhlIHdhaXQtcmV0dXJuIHByb21wdCwgc2luY2UgdGhlIG1lc3NhZ2Ugd2FzIGdpdmVuIGluIHRoZSB0ZXJtaW5hbC4KKworV2hlbiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gYSAudmltcmMgZmlsZSB0aGUgdGVybWluYWwgd2hlcmUgZ3ZpbSB3YXMgc3RhcnRlZAorY291bGQgYmUgY2xlYXJlZC4gIFNldCBtc2dfcm93IGluIG1haW4uYyBiZWZvcmUgd3JpdGluZyBhbnkgbWVzc2FnZXMuCisKK0dUSyBhbmQgWDExIEdVSTogV2hlbiB0cnlpbmcgdG8gcmVhZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHVzZXIgKGUuZy4gd2l0aAoraW5wdXQoKSkgYmVmb3JlIHRoZSBWaW0gd2luZG93IHdhcyBvcGVuZWQgY2F1c2VkIFZpbSB0byBoYW5nIHdoZW4gaXQgd2FzCitzdGFydGVkIGZyb20gdGhlIGRlc2t0b3AuCisKK09TLzM5MCB1c2VzIDMxIGJpdCBwb2ludGVycy4gIFRoYXQgYnJva2Ugc29tZSBjb21wdXRhdGlvbnMgd2l0aCBNQVhfQ09MLgorUmVkdWNlIE1BWF9DT0wgYnkgb25lIGJpdCBmb3IgT1MvMzkwLiAoUmFsZiBTY2hhbmRsKQorCitXaGVuIGRlZmluaW5nIGEgZnVuY3Rpb24gYW5kIGl0IGFscmVhZHkgZXhpc3RzLCBWaW0gZGlkbid0IHNheSBpdCBleGlzdGVkCit1bnRpbCBhZnRlciB0eXBpbmcgaXQuICBOb3cgZG8gdGhpcyByaWdodCBhd2F5IHdoZW4gdHlwaW5nIGl0LgorCitUaGUgbWVzc2FnZSByZW1lbWJlcmVkIGZvciBkaXNwbGF5aW5nIGxhdGVyIChrZWVwX21zZykgd2FzIHNvbWV0aW1lcyBwb2ludGluZworaW50byBhIGdlbmVyaWMgYnVmZmVyLCB3aGljaCBtaWdodCBiZSBjaGFuZ2VkIGJ5IHRoZSB0aW1lIHRoZSBtZXNzYWdlIGlzCitkaXNwbGF5ZWQuICBOb3cgbWFrZSBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UuCisKK1doZW4gdXNpbmcgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGluIGEgbWVudSBhbmQgYSB0cmFpbGluZyBieXRlIGlzIGEgYmFja3NsYXNoLAordGhlIG1lbnUgd291bGQgbm90IGJlIGNyZWF0ZWQgY29ycmVjdGx5LiAgKE11cmFva2EgVGFybykKK1VzaW5nIGEgbXVsdGlieXRlIGNoYXJhY3RlciBpbiB0aGUgc3Vic3RpdHV0ZSBzdHJpbmcgd2hlcmUgYSB0cmFpbCBieXRlIGlzIGEKK2JhY2tzbGFzaCBkaWRuJ3Qgd29yay4gIChNdXJhb2thIFRhcm8pCisKK1doZW4gc2V0dGluZyAidF9DbyIgaW4gYSB2aW1yYyBmaWxlLCB0aGVuIHNldHRpbmcgaXQgYXV0b21hdGljYWxseSBmcm9tIGFuCit4dGVybSB0ZXJtcmVzcG9uc2UgYW5kIHRoZW4gc2V0dGluZyBpdCBhZ2FpbiBtYW51YWxseSBjYXVzZWQgYSBjcmFzaC4KKworV2hlbiBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIHN0cmluZyBvcHRpb24gdGhhdCBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgbnVtYmVyCit6ZXJvIHdhcyByZXR1cm5lZC4gIFRoaXMgYnJlYWtzIGEgY2hlY2sgbGlrZSAiJmVuYyA9PSAiYXNkZiIuICBOb3cgYW4gZW1wdHkKK3N0cmluZyBpcyByZXR1cm5lZCBmb3Igc3RyaW5nIG9wdGlvbnMuCisKK0NyYXNoZWQgd2hlbiBzdGFydGluZyB0aGUgR1RLIEdVSSB3aGlsZSB1c2luZyAnbm90aXRsZScgaW4gdGhlIHZpbXJjLCBzZXR0aW5nCisndGl0bGUnIGluIHRoZSBndmltcmMgYW5kIHN0YXJ0aW5nIHRoZSBHVUkgd2l0aCAiOmd1aSIuICBDbG9zZWQgdGhlIGNvbm5lY3Rpb24KK3RvIHRoZSBYIHNlcnZlciBhY2NpZGVudGFsbHkuCisKK0hhZCB0byBoaXQgcmV0dXJuIGFmdGVyIHNlbGVjdGluZyBhbiBlbnRyeSBmb3IgIjp0cyIuCisKK1RoZSBtZXNzYWdlIGZyb20gIjpjbiIgbWVzc2FnZSB3YXMgc29tZXRpbWVzIGNsZWFyZWQuICBOb3cgZGlzcGxheSBpdCBhZnRlcgorcmVkcmF3aW5nIGlmIGl0IGRvZXNuJ3QgY2F1c2UgYSBzY3JvbGwgKHRydW5jYXRlZCB3aGVuIG5lY2Vzc2FyeSkuCisKK2hhbmd1bGluLmMgZGlkbid0IGNvbXBpbGUgd2hlbiB0aGUgR1VJIHdhcyBkaXNhYmxlZC4gIERpc2FibGUgaXQgd2hlbiBpdCB3b24ndAord29yay4KKworV2hlbiBzZXR0aW5nIGEgdGVybWNhcCBvcHRpb24gbGlrZSAidF9DTyIsIHRoZSB2YWx1ZSBjb3VsZCBiZSBkaXNwbGF5ZWQgYXMKK2JlaW5nIGZvciBhIG5vcm1hbCBrZXkgd2l0aCBhIG1vZGlmaWVyLCBsaWtlICI8TS09PiIuCisKK1doZW4gZXhwYW5kaW5nIHRoZSBhcmd1bWVudCBsaXN0LCBlbnRyaWVzIHdoaWNoIGFyZSBhIGRpcmVjdG9yeSBuYW1lIGRpZCBub3QKK2dldCBpbmNsdWRlZC4gIFRoaXMgc3RvcHBlZCAidmltIGM6LyIgZnJvbSBvcGVuaW5nIHRoZSBmaWxlIGV4cGxvcmVyLgorCisiOnN5biBtYXRjaCBzZCAiXiIgbmV4dGdyb3VwPWFzZGYiIHNraXBwZWQgdGhlIGZpcnN0IGNvbHVtbiBhbmQgbWF0Y2hlZCB0aGUKK25leHRncm91cCBpbiB0aGUgc2Vjb25kIGNvbHVtbi4KKworR1VJOiBXaGVuICdsYXp5cmVkcmF3JyBpcyBzZXQsICdzaG93bWF0Y2gnIGRpZG4ndCB3b3JrLiAgUmVxdWlyZWQgZmx1c2hpbmcKK3RoZSBvdXRwdXQuCisKK0Rvbid0IGRlZmluZSB0aGUgPE5ldE1vdXNlPiB0ZXJtY29kZSBpbiBhbiB4dGVybSwgcmVkdWNlcyB0aGUgcHJvYmxlbSB3aGVuCitzb21lb25lIHR5cGVzIDxFc2M+IH0gaW4gSW5zZXJ0IG1vZGUuCisKK01hZGUgc2xhc2hfYWRqdXN0KCkgd29yayBjb3JyZWN0bHkgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gKFlhc3VoaXJvCitNYXRzdW1vdG8pCitVc2luZyBhIGZpbGVuYW1lIGluIEJpZzUgZW5jb2RpbmcgZm9yIGF1dG9jb21tYW5kcyBkaWRuJ3Qgd29yayAoYmFja3NsYXNoIGluCit0cmFpbGJ5dGUpLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKKworRE9TIGFuZCBXaW5kb3dzOiBFeHBhbmRpbmcgKi52aW0gYWxzbyBtYXRjaGVkIGZpbGUudmltZm9vLiAgRXhwYW5kIHBhdGggbGlrZQorVW5peCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIFdpbmRvd3MgZGlyIGZ1bmN0aW9ucy4gIE1lcmdlZCB0aGUgRE9TIGFuZCBXaW4zMgorZnVuY3Rpb25zLgorCitXaW4zMjogR3ZpbWV4dCBjb3VsZCBub3QgZWRpdCBtb3JlIHRoYW4gYSBmZXcgZmlsZXMgYXQgb25jZSwgdGhlIGxlbmd0aCBvZiB0aGUKK2FyZ3VtZW50IHdhcyBmaXhlZC4KKworImxzIC0xICogfCB4YXJncyB2aW0iIHdvcmtlZCwgYnV0IHRoZSBpbnB1dCB3YXMgaW4gY29va2VkIG1vZGUuICBOb3cgc3dpdGNoIHRvCityYXcgbW9kZSB3aGVuIG5lZWRlZC4gIFVzZSBkdXAoKSB0byBjb3B5IHRoZSBzdGRlcnIgZmlsZSBkZXNjcmlwdG9yIHRvIHN0ZGluCit0byBtYWtlIHNoZWxsIGNvbW1hbmRzIHdvcmsuICBObyBsb25nZXIgcmVxdWlyZXMgYW4gZXh0ZXJuYWwgcHJvZ3JhbSB0byBkbwordGhpcy4KKworV2hlbiB1c2luZyAiOmZpbGV0eXBlIG9mZiIsIGZ0cGx1Z2luIGFuZCBpbmRlbnQgdXNhZ2Ugd291bGQgYmUgc3dpdGNoZWQgb2ZmIGF0Cit0aGUgc2FtZSB0aW1lLiAgRG9uJ3QgZG8gdGhpcywgc2V0dGluZyAnZmlsZXR5cGUnIG1hbnVhbGx5IGNhbiBzdGlsbCB1c2UgdGhlbS4KKworR1VJOiBXaGVuIHdyaXRpbmcgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIsIGl0IGNvdWxkIGJlIHNwbGl0IHVwIGluIHR3byBjYWxscwordG8gZ3VpX3dyaXRlKCksIHdoaWNoIGRvZXNuJ3Qgd29yay4gIE5vdyBmbHVzaCBiZWZvcmUgdGhlIG91dHB1dCBidWZmZXIKK2JlY29tZXMgZnVsbC4KKworV2hlbiAnbGFzdHN0YXR1cycgaXMgc2V0IGFuZCAnY21kaGVpZ2h0JyBpcyB0d28gb3IgYmlnZ2VyLCB0aGUgaW50cm8gbWVzc2FnZQord291bGQgYmUgd3JpdHRlbiBvdmVyIHRoZSBzdGF0dXMgbGluZS4KK1RoZSAiOmludHJvIiBjb21tYW5kIGRpZG4ndCB3b3JrIHdoZW4gdGhlcmUgd2Fzbid0IGVub3VnaCByb29tLgorCitDb25maWd1cmluZyBmb3IgUnVieSBmYWlsZWQgd2l0aCBhIHJlY2VudCB2ZXJzaW9uIG9mIFJ1YnkuIChBa2lub3JpIE11c2hhKQorCitBdGhlbmE6IFdoZW4gZGVsZXRpbmcgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBWaW0gd2FzIHN0YXJ0ZWQsIHVzaW5nIHRoZSBmaWxlCiticm93c2VyIG1hZGUgVmltIGV4aXQuICBSZW1vdmVkIHRoZSB1c2Ugb2YgWHRBcHBFcnJvcigpLgorCitXaGVuIHVzaW5nIGF1dG9jb25mIDIuNTAsIFVOSVggd2FzIG5vdCBkZWZpbmVkLiAgTW92ZWQgdGhlIGNvbW1lbnQgZm9yICIjdW5kZWYKK1VOSVgiIHRvIGEgc2VwYXJhdGUgbGluZS4KKworV2luMzI6IERpc2FibGVkIF9PbldpbmRvd1Bvc0NoYW5naW5nKCkgdG8gbWFrZSBtYXhpbWl6ZSB3b3JrIGJldHRlci4KKworV2luMzI6IENvbXBpbGluZyB3aXRoIFZDIDQuMCBkaWRuJ3Qgd29yay4gKFdhbHRlciBCcmlzY29lKQorCitBdGhlbmE6CistIEZpbmFsbHkgZml4ZWQgdGhlIHByb2JsZW1zIHdpdGggZGVsZXRpbmcgYSBtZW51LiAoRGF2aWQgSGFycmlzb24pCistIEF0aGVuYTogV2hlbiBjbG9zaW5nIHRoZSBjb25maXJtKCkgZGlhbG9nLCB3b3JrZWQgbGlrZSBPSyB3YXMgcHJlc3NlZCwKKyAgaW5zdGVhZCBvZiBDYW5jZWwuCisKK1RoZSBmaWxlIGV4cGxvcmVyIGRpZG4ndCB3b3JrIGluIGNvbXBhdGlibGUgbW9kZSwgYmVjYXVzZSBvZiBsaW5lCitjb250aW51YXRpb24uCisKK0RpZG4ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgZm9yICI6ZGlncmFwaCBhIi4KKworV2hlbiB1c2luZyBFeCBtb2RlIGluIHRoZSBHVUkgYW5kIHR5cGluZyBhIHNwZWNpYWwga2V5LCA8QlM+IGRpZG4ndCBkZWxldGUgaXQKK2NvcnJlY3RseS4gIE5vdyBkaXNwbGF5ICc/JyBmb3IgYSBzcGVjaWFsIGtleS4KKworV2hlbiBhbiBvcGVyYXRvciBpcyBwZW5kaW5nLCBjbGlja2luZyBpbiBhbm90aGVyIHdpbmRvdyBtYWRlIGl0IGFwcGx5IHRvIHRoYXQKK3dpbmRvdywgZXZlbiB0aG91Z2ggdGhlIGxpbmUgbnVtYmVycyBjb3VsZCBiZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCitXaGVuIGEgZnVuY3Rpb24gY2FsbCBkb2Vzbid0IGhhdmUgYSB0ZXJtaW5hdGluZyAiKSIgVmltIGNvdWxkIGNyYXNoLgorCitQZXJsIGludGVyZmFjZTogY291bGQgY3Jhc2ggb24gZXhpdCB3aXRoIHBlcmwgNS42LjEuIChBbmR1aW4gV2l0aGVycykKKworVXNpbmcgJVAgaW4gJ2Vycm9yZm9ybWF0JyB3YXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkuIChUb21hcyBaZWxsZXJpbikKKworVXNpbmcgYSBzeW50YXggY2x1c3RlciB0aGF0IGluY2x1ZGVzIGl0c2VsZiBtYWRlIFZpbSBjcmFzaC4KKworR1VJOiBXaXRoICdscycgc2V0IHRvIDIsIGRyYWdnaW5nIHRoZSBzdGF0dXMgbGluZSBhbGwgdGhlIHdheSB1cCwgdGhlbiBtYWtpbmcKK3RoZSBWaW0gd2luZG93IHNtYWxsZXI6IENvdWxkIG5vdCB0aGUgZHJhZyBzdGF0dXMgbGluZSBhbnltb3JlLgorCisidmltIC1jIHN0YXJ0aW5zZXJ0ISBmaWxlIiBwbGFjZWQgY3Vyc29yIG9uIGxhc3QgY2hhciBvZiBhIGxpbmUsIGluc3RlYWQgb2YKK2FmdGVyIGl0LiAgQSAiOnNldCIgY29tbWFuZCBpbiB0aGUgYnVmZmVyIG1lbnUgc2V0IHdfc2V0X2N1cnN3YW50LiAgTm93IGRvbid0CitkbyB0aGlzIHdoZW4gd19jdXJzd2FudCBpcyBNQVhDT0wuCisKK1dpbjMyOiBXaGVuIHRoZSBndmltIHdpbmRvdyB3YXMgbWF4aW1pemVkIGFuZCBzZWxlY3RpbmcgYW5vdGhlciBmb250LCB0aGUKK3dpbmRvdyB3b3VsZCBubyBsb25nZXIgZmlsbCB0aGUgc2NyZWVuLgorCitUaGUgbGluZSB3aXRoICdwYXN0ZXRvZ2dsZScgaW4gIjpvcHRpb25zIiBkaWRuJ3Qgc2hvdyB0aGUgcmlnaHQgdmFsdWUgd2hlbiBpdAoraXMgYSBzcGVjaWFsIGtleS4gIEhpdHRpbmcgPENSPiBkaWRuJ3Qgd29yayBlaXRoZXIuCisKK0Zvcm1hdHRpbmcgdGV4dCwgcmVzdWx0aW5nIGluIGEgJSBsYW5kaW5nIGluIHRoZSBmaXJzdCBsaW5lLCByZXBlYXRlZCB0aGUgJSBpbgordGhlIGZvbGxvd2luZyBsaW5lcywgbGlrZSBpdCdzIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQuCisKK0dUSzogV2hlbiBhZGRpbmcgYSB0b29sYmFyIGl0ZW0gd2hpbGUgZ3ZpbSBpcyBhbHJlYWR5IHJ1bm5pbmcsIGl0IHdhc24ndAorcG9zc2libGUgdG8gdXNlIHRoZSB0b29sdGlwLiAgTm93IGl0IHdvcmtzIGJ5IGFkZGluZyB0aGUgdG9vbHRpcCBmaXJzdC4KKworVGhlIG91dHB1dCBvZiAiZyBDVFJMLUciIG1lbnRpb25lZCAiQ2hhciIgYnV0IGl0J3MgYWN0dWFsbHkgYnl0ZXMuCisKK1NlYXJjaGluZyBmb3IgdGhlIGVuZCBvZiBhIG9uZWxpbmUgcmVnaW9uIGRpZG4ndCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZXJlIGlzCithbiBvZmZzZXQgZm9yIHRoZSBoaWdobGlnaHRpbmcuCisKK1N5bnRheCBoaWdobGlnaHRpbmc6IFdoZW4gc3luY2hyb25pemluZyBvbiBDLWNvbW1lbnRzLCAvLyovIHdhcyBzZWVuIGFzIHRoZQorc3RhcnQgb2YgYSBjb21tZW50LgorCitXaW4zMjogV2l0aG91dCBzY3JvbGxiYXJzIHByZXNlbnQsIHRoZSBNUyBtb3VzZSBzY3JvbGwgd2hlZWwgZGlkbid0IHdvcmsuCitBbHNvIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyB3aGVuIHRoZXkgYXJlIG5vdCB2aXNpYmxlLgorCitNb3RpZjogV2hlbiB0aGVyZSBpcyBubyByaWdodCBzY3JvbGxiYXIsIHRoZSBib3R0b20gc2Nyb2xsYmFyIHdvdWxkIHN0aWxsCitsZWF2ZSByb29tIGZvciBpdC4gIChNYXJ0aW4gRGFsZWNraSkKKworV2hlbiBjaGFuZ2luZyAnZ3VpY3Vyc29yJyBhbmQgdGhlIHZhbHVlIGlzIGludmFsaWQsIHNvbWUgb2YgdGhlIGVmZmVjdHMgd291bGQKK3N0aWxsIHRha2UgcGxhY2UuICBOb3cgZmlyc3QgY2hlY2sgZm9yIGVycm9ycyBhbmQgb25seSBtYWtlIHRoZSBuZXcgdmFsdWUKK2VmZmVjdGl2ZSB3aGVuIGl0J3MgT0suCisKK1VzaW5nICJBIiBJbiBWaXN1YWwgYmxvY2sgbW9kZSwgYXBwZW5kaW5nIHRvIGxpbmVzIHRoYXQgZG9uJ3QgZXh0ZW5kIGludG8gdGhlCitibG9jaywgcGFkZGluZyB3YXMgd3JvbmcuCisKK1doZW4gcGFzdGluZyBhIGJsb2NrIG9mIHRleHQsIGEgY2hhcmFjdGVyIHRoYXQgb2NjdXBpZXMgbW9yZSB0aGFuIG9uZSBzY3JlZW4KK2NvbHVtbiBjb3VsZCBiZSBkZWxldGVkIGFuZCBzcGFjZXMgaW5zZXJ0ZWQgaW5zdGVhZC4gIE5vdyBvbmx5IGRvIHRoYXQgd2l0aCBhCit0YWIuCisKK0ZpeGVkIGNvbnZlcnNpb24gb2YgZG9jdW1lbnRhdGlvbiB0byBIVE1MIHVzaW5nIFBlcmwuIChEYW4gU2hhcnApCisKK0dpdmUgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGEgbWVudSBuYW1lIHN0YXJ0cyB3aXRoIGEgZG90LgorCitBdm9pZCBhIGhhbmcgd2hlbiBleGVjdXRpbmcgYSBzaGVsbCBmcm9tIHRoZSBHVUkgb24gSFAtVVggYnkgcHVzaGluZyAicHRlbSIKK2V2ZW4gd2hlbiBzeXMvcHRlbS5oIGlzbid0IHByZXNlbnQuCisKK1doZW4gY3JlYXRpbmcgdGhlIHRlbXAgZGlyZWN0b3J5LCBtYWtlIHN1cmUgdW1hc2sgaXMgMDc3LCBvdGhlcndpc2UgdGhlCitkaXJlY3RvcnkgaXMgbm90IGFjY2Vzc2libGUgd2hlbiBpdCB3YXMgc2V0IHRvIDAxNzcuCisKK1VuaXg6IFdoZW4gcmVzaXppbmcgdGhlIHdpbmRvdyBhbmQgYSByZWRyYXcgaXMgYSBiaXQgc2xvdywgY291bGQgZ2V0IGEgd2luZG93CityZXNpemUgZXZlbnQgd2hpbGUgcmVkcmF3aW5nLCByZXN1bHRpbmcgaW4gYSBtZXNzZWQgdXAgd2luZG93LiAgQW55IGlucHV0CisoZS5nLiwgYSBtb3VzZSBjbGljaykgd291bGQgcmVkcmF3LgorCitUaGUgIiVCIiBpdGVtIGluIHRoZSBzdGF0dXMgbGluZSBiZWNhbWUgemVybyBpbiBJbnNlcnQgbW9kZSAodGhhdCdzIG5vcm1hbCkKK2ZvciBhbm90aGVyIHRoYW4gdGhlIGN1cnJlbnQgd2luZG93LgorCitUaGUgbWVudSBlbnRyaWVzIHRvIGNvbnZlcnQgdG8geHhkIGFuZCBiYWNrIGRpZG4ndCB3b3JrIGluIEluc2VydCBtb2RlLgorCitXaGVuICI6dmdsb2JhbCIgZGlkbid0IGZpbmQgYSBsaW5lIHdoZXJlIHRoZSBwYXR0ZXJuIGRvZXNuJ3QgbWF0Y2gsIHRoZSBlcnJvcgorbWVzc2FnZSB3b3VsZCBiZSB0aGUgd3Jvbmcgd2F5IGFyb3VuZC4KKworV2hlbiBpZ25vcmluZyBhIG11bHRpLWxpbmUgZXJyb3IgbWVzc2FnZSB3aXRoICIlLUEiLCB0aGUgY29udGludWF0aW9uIGxpbmVzCit3b3VsZCBiZSB1c2VkIGFueXdheS4gKFNlcnZhdGl1cyBCcmFuZHQpCisKKyJncngiIG9uIGEgZG91YmxlLXdpZGUgY2hhcmFjdGVyIGluc2VydGVkICJ4IiwgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlCitjaGFyYWN0ZXIgd2l0aCAieCAiLiAgImdSIiBvbiA8eHg+ICgnZGlzcGxheScgc2V0IHRoZSAidWhleCIpIGRpZG4ndCByZXBsYWNlCithdCBhbGwuICBXaGVuIGRvaW5nICJnUnh4IiBvbiBhIGNvbnRyb2wgY2hhcmFjdGVyIHRoZSBmaXJzdCAieCIgd291bGQgYmUKK2luc2VydGVkLCBicmVha2luZyB0aGUgYWxpZ25tZW50LgorCitBZGRlZCAiMCkiIHRvICdjaW5rZXlzJywgc28gdGhhdCB3aGVuIHR5cGluZyBhICkgaXQgaXMgcHV0IGluIHRoZSBzYW1lIHBsYWNlCithcyB3aGVyZSAiPT0iIHdvdWxkIHB1dCBpdC4KKworV2luMzI6IFdoZW4gbWF4aW1pemVkLCBhZGRpbmcvcmVtb3ZpbmcgdG9vbGJhciBkaWRuJ3QgcmVzaXplIHRoZSB0ZXh0IGFyZWEuCisKK1doZW4gdXNpbmcgPEMtUmlnaHRNb3VzZT4gYSBjb3VudCB3YXMgZGlzY2FyZGVkLgorCitXaGVuIHR5cGluZyBDVFJMLVYgYW5kIDxSaWdodE1vdXNlPiBpbiB0aGUgY29tbWFuZCBsaW5lLCB3b3VsZCBpbnNlcnQKKzxMZWZ0TW91c2U+LgorCitVc2luZyAidmlzIiBvciAidmFzIiB3aGVuICdzZWxlY3Rpb24nIGlzIGV4Y2x1c2l2ZSBkaWRuJ3QgaW5jbHVkZSB0aGUgbGFzdAorY2hhcmFjdGVyLgorCitXaGVuIGFkZGluZyB0byBhbiBvcHRpb24gbGlrZSAnZ3JlcHByZycsIGxlYWRpbmcgc3BhY2Ugd291bGQgYmUgbG9zdC4gIERvbid0CitleHBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoZW4gdGhlcmUgaXMgbm8gY29tbWEgc2VwYXJhdGluZyB0aGUgaXRlbXMuCisKK0dVSTogV2hlbiB1c2luZyBhIGJvbGQtaXRhbGljIGZvbnQsIHdvdWxkIHN0aWxsIHVzZSB0aGUgYm9sZCB0cmljayBhbmQKK3VuZGVybGluaW5nLgorCitNb3RpZjogVGhlIGRlZmF1bHQgYnV0dG9uIGRpZG4ndCB3b3JrIGluIGRpYWxvZ3MsIHRoZSBmaXJzdCBvbmUgd2FzIGFsd2F5cwordXNlZC4gIEhhZCB0byBnaXZlIGlucHV0IGZvY3VzIHRvIHRoZSBkZWZhdWx0IGJ1dHRvbi4KKworV2hlbiB1c2luZyBDVFJMLVQgdG8ganVtcCB3aXRoaW4gdGhlIHNhbWUgZmlsZSwgdGhlICcnIG1hcmsgd2Fzbid0IHNldC4KKworVW5kbyB3YXNuJ3QgVmkgY29tcGF0aWJsZSB3aGVuIHVzaW5nIHRoZSAnYycgZmxhZyBmb3IgIjpzIi4gIE5vdyBpdCB1bmRvZXMgdGhlCit3aG9sZSAiOnMiIGNvbW1hbmQgaW5zdGVhZCBvZiBlYWNoIGNvbmZpcm1lZCByZXBsYWNlbWVudC4KKworVGhlIEJ1ZmZlcnMgbWVudSwgd2hlbiB0b3JuLW9mZiwgZGlzYXBwZWFyZWQgd2hlbiBiZWluZyByZWZyZXNoZWQuICBBZGQgYQorZHVtbXkgaXRlbSB0byBhdm9pZCB0aGlzLgorCitSZW1vdmVkIGNhbGxpbmcgbXNnX3N0YXJ0KCkgaW4gbWFpbigpLCBpdCBzaG91bGQgbm90IGJlIG5lZWRlZC4KKwordmltX3N0cnBicmsoKSBkaWQgbm90IHN1cHBvcnQgbXVsdGlieXRlIGNoYXJhY3RlcnMuIChNdXJhb2thIFRhcm8pCisKK1RoZSBBbWlnYSB2ZXJzaW9uIGRpZG4ndCBjb21waWxlLCB0aGUgY29kZSB3YXMgdG9vIGJpZyBmb3IgcmVsYXRpdmUganVtcHMuCitNb3ZlZCBhIGZldyBmaWxlcyBmcm9tIGV4X2RvY21kLmMgdG8gZXhfY21kczIuYworCitXaGVuIGV2YWx1YXRpbmcgdGhlICI9IHJlZ2lzdGVyIHJlc3VsdGVkIGluIHRoZSAiPSByZWdpc3RlciBiZWluZyBjaGFuZ2VkLCBWaW0KK3dvdWxkIGNyYXNoLgorCitXaGVuIGRvaW5nICI6dmlldyBmaWxlIiBhbmQgaXQgZmFpbHMsIHRoZSBjdXJyZW50IGJ1ZmZlciB3YXMgbWFkZSByZWFkLW9ubHkuCisKK01vdGlmOiBGb3Igc29tZSBwZW9wbGUgdGhlIHNlcGFyYXRvcnMgaW4gdGhlIHRvb2xiYXIgZGlzYXBwZWFyZWQgd2hlbiByZXNpemluZwordGhlIFZpbSB3aW5kb3cuIChNYXJ0aW4gRGFsZWNraSkKKworV2luMzIgR1VJOiB3aGVuIHNldHRpbmcgJ2xpbmVzJyB0byBhIGh1Z2UgbnVtYmVyLCB3b3VsZCBub3QgY29tcHV0ZSB0aGUKK2F2YWlsYWJsZSBzcGFjZSBjb3JyZWN0bHkuICBXYXMgY291bnRpbmcgdGhlIG1lbnUgaGVpZ2h0IHR3aWNlLgorCitDb252ZXJzaW9uIG9mIHRoZSBkb2NzIHRvIEhUTUwgZGlkbid0IGhhbmRsZSB0aGUgbGluZSB3aXRoIHRoZSArcXVpY2tmaXggdGFnCitjb3JyZWN0bHkuIChBbnRvbmlvIENvbG9tYm8pCisKK1dpbjMyOiBmbmFtZV9jYXNlKCkgZGlkbid0IGhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgY29ycmVjdGx5LiAoWWFzdWhpcm8KK01hdHN1bW90bykKKworVGhlIEN5Z3dpbiB2ZXJzaW9uIGhhZCB0cm91YmxlIHdpdGggZmNoZGlyKCkuICBEb24ndCB1c2UgdGhhdCBmdW5jdGlvbiBmb3IKK0N5Z3dpbi4KKworVGhlIGdlbmVyaWMgY2hlY2sgaW4gc2NyaXB0cy52aW0gZm9yICJjb25mIiBzeW50YXggd2FzIGRvbmUgYmVmb3JlIHNvbWUgY2hlY2tzCitpbiBmaWxldHlwZS52aW0sIHJlc3VsdGluZyBpbiAiY29uZiIgc3ludGF4IHRvbyBvZnRlbi4KKworRG9zMzI6IFR5cGluZyBsYWdnZWQgYmVoaW5kLiAgV291bGQgd2FpdCBmb3Igb25lIGJpb3N0aWNrIHdoZW4gY2hlY2tpbmcgaWYgYQorY2hhcmFjdGVyIGlzIGF2YWlsYWJsZS4KKworR1RLOiBXaGVuIHNldHRpbmcgJ2NvbHVtbnMnIHdoaWxlIHN0YXJ0aW5nIHVwICJndmltIiwgd291bGQgc2V0IHRoZSB3aWR0aCBvZgordGhlIHRlcm1pbmFsIGl0IHdhcyBzdGFydGVkIGluLgorCitXaGVuIHVzaW5nIEVTQyBpbiBJbnNlcnQgbW9kZSwgYW4gYXV0b2luZGVudCB0aGF0IHdyYXBzIHRvIHRoZSBuZXh0IGxpbmUKK2NhdXNlZCB0aGUgY3Vyc29yIHRvIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSB0ZW1wb3JhcmlseS4gIFdoZW4gdGhlCitjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjdXJzb3Igd2FzIGEgZG91YmxlLXdpZGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgdGhlIGN1cnNvcgord291bGQgYmUgb24gdGhlIHJpZ2h0IGhhbHZlLCB3aGljaCBjYXVzZXMgcHJvYmxlbXMgd2l0aCBzb21lIHRlcm1pbmFscy4KKworRGlkbid0IGhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgY29ycmVjdGx5IHdoZW4gZXhwYW5kaW5nIGEgZmlsZSBuYW1lLgorKFlhc3VoaXJvIE1hdHN1bW90bykKKworV2luMzIgR1VJOiBFcnJvcnMgZ2VuZXJhdGVkIGJlZm9yZSB0aGUgR1VJIGlzIGRlY2lkZWQgdG8gc3RhcnQgd2VyZSBub3QKK3JlcG9ydGVkLgorCitnbG9icGF0aCgpIGRpZG4ndCByZXNlcnZlIGVub3VnaCByb29tIGZvciBjb25jYXRlbmF0ZWQgcmVzdWx0cy4gKEFuZHVpbgorV2l0aGVycykKKworV2hlbiBleHBhbmRpbmcgYW4gb3B0aW9uIHRoYXQgaXMgdmVyeSBsb25nIGFscmVhZHksIGRvbid0IGRvIHRoZSBleHBhbnNpb24sIGl0Cit3b3VsZCBiZSB0cnVuY2F0ZWQgdG8gTUFYUEFUSEwuIChBbmR1aW4gV2l0aGVycykKKworV2hlbiAnc2VsZWN0aW9uJyBpcyAiZXhjbHVzaXZlIiwgdXNpbmcgIkZ4IiBpbiBWaXN1YWwgbW9kZSBvbmx5IG1vdmVkIHVudGlsCitqdXN0IGFmdGVyIHRoZSBjaGFyYWN0ZXIuCisKK1doZW4gdXNpbmcgSU1FIG9uIHRoZSBjb25zb2xlIHRvIGVudGVyIGEgZmlsZSBuYW1lLCB0aGUgc2NyZWVuIG1heSBzY3JvbGwgdXAuCitSZWRyYXcgdGhlIHNjcmVlbiB0aGVuLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCitNb3RpZjogSW4gdGhlIGZpbmQvcmVwbGFjZSBkaWFsb2cgdGhlICJSZXBsYWNlIiBidXR0b24gZGlkbid0IHdvcmsgZmlyc3QgdGltZSwKK3NlY29uZCB0aW1lIGl0IHJlcGxhY2VkIGFsbCBtYXRjaGVzLiAgUmVtb3ZlZCB0aGUgdXNlIG9mICI6cy8vL2MiLgorR1RLOiBTaW1pbGFyIHByb2JsZW1zIHdpdGggdGhlIGZpbmQvcmVwbGFjZSBkaWFsb2csIG1vdmVkIHRoZSBjb2RlIHRvIGEgY29tbW9uCitmdW5jdGlvbi4KKworWDExOiBVc2Ugc2hhcmVkIEdDJ3MgZm9yIHRleHQuIChNYXJ0aW4gRGFsZWNraSkKKworIl1pIiBmb3VuZCB0aGUgbWF0Y2ggdW5kZXIgdGhlIGN1cnNvciwgaW5zdGVhZCBvZiB0aGUgZmlyc3Qgb25lIGJlbG93IGl0LgorU2FtZSBmb3IgIl1JIiwgIl0gQ1RSTC1JIiwgIl1kIiwgIl1EIiBhbmQgIl0gQ1RSTC1EIi4KKworV2luMTY6IFdoZW4gbWF4aW1pemVkIGFuZCB0aGUgZm9udCBpcyBjaGFuZ2VkLCBkb24ndCBjaGFuZ2UgdGhlIHdpbmRvdyBzaXplLgorKFZpbmNlIE5lZ3JpKQorCitXaGVuICdsYnInIGlzIHNldCwgZGVsZXRpbmcgYSBibG9jayBvZiB0ZXh0IGNvdWxkIGxlYXZlIHRoZSBjdXJzb3IgaW4gdGhlCit3cm9uZyBwb3NpdGlvbi4KKworV2luMzI6IFdoZW4gb3BlbmluZyBhIGZpbGUgd2l0aCB0aGUgIkVkaXQgd2l0aCBWaW0iIHBvcHVwIG1lbnUgZW50cnksCit3aWxkY2FyZHMgd291bGQgY2F1c2UgdHJvdWJsZS4gIEFkZGVkIHRoZSAiLS1saXRlcmFsIiBhcmd1bWVudCB0byBhdm9pZAorZXhwYW5kaW5nIGZpbGUgbmFtZXMuCisKK1doZW4gdXNpbmcgImd2IiwgaXQgZGlkbid0IHJlc3RvcmUgdGhhdCAiJCIgd2FzIHVzZWQgaW4gVmlzdWFsIGJsb2NrIG1vZGUuCisKK1dpbjMyIEdVSTogV2hpbGUgd2FpdGluZyBmb3IgYSBzaGVsbCBjb21tYW5kIHRvIGZpbmlzaCwgdGhlIHdpbmRvdyB3YXNuJ3QKK3JlZHJhd24gYXQgYWxsLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCitTeW50YXggaGlnaGxpZ2h0aW5nOiBBIG1hdGNoIHRoYXQgY29udGludWVzIG9uIGEgbmV4dCBsaW5lIGJlY2F1c2Ugb2YgYQorY29udGFpbmVkIHJlZ2lvbiBkaWRuJ3QgZW5kIHdoZW4gdGhhdCByZWdpb24gZW5kZWQuCisKK1RoZSAiOnMiIGNvbW1hbmQgZGlkbid0IGFsbG93IGZsYWdzIGxpa2UgJ2UnIGFuZCAnaScgcmlnaHQgYWZ0ZXIgaXQuCisKK1doZW4gdXNpbmcgIjpzIiB0byBzcGxpdCBhIGxpbmUsIG1hcmtzIHdlcmUgbW92ZWQgdG8gdGhlIG5leHQgbGluZS4gIFZpIGtlZXBzCit0aGVtIGluIHRoZSBmaXJzdCBsaW5lLgorCitXaGVuIHVzaW5nICI6biIgIjpyZXciLCB0aGUgcHJldmlvdXMgY29udGV4dCBtYXJrIHdhcyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLAord2hpbGUgVmkgcHV0cyBpdCBpbiB0aGUgc2FtZSBwbGFjZSBhcyB0aGUgY3Vyc29yLiAgTWFkZSBpdCBWaSBjb21wYXRpYmxlLgorCitGaXhlZCBWaSBpbmNvbXBhdGliaWxpdHk6IFRleHQgd2FzIG5vdCBwdXQgaW4gcmVnaXN0ZXIgMSB3aGVuIHVzaW5nICJjIiBhbmQKKyJkIiB3aXRoIGEgbW90aW9uIGNoYXJhY3Rlciwgd2hlbiBkZWxldGluZyB3aXRoaW4gb25lIGxpbmUgd2l0aCBvbmUgb2YgdGhlCitjb21tYW5kczogJSAoICkgYDxjaGFyYWN0ZXI+IC8gPyBOIG4geyB9CisKK1dpbjMyIEdVSTogVGhlIHRvb2x0aXAgZm9yIHRlYXItb2ZmIGl0ZW1zIHJlbWFpbmVkIHdoZW4gdGhlIHRlYXItb2ZmIGl0ZW0gd2FzCitubyBsb25nZXIgc2VsZWN0ZWQuCisKK0dVSTogV2hlbiB0eXBpbmcgIjoiIGF0IHRoZSBtb3JlIHByb21wdCwgd291bGQgcmV0dXJuIHRvIE5vcm1hbCBtb2RlIGFuZCBub3QKK3JlZHJhdyB0aGUgc2NyZWVuLgorCitXaGVuIHN0YXJ0aW5nIFZpbSB3aXRoIGFuIGFyZ3VtZW50ICItYyBnL2F0L3AiIHRoZSBwcmludGVkIGxpbmVzIHdvdWxkCitvdmVyd3JpdGUgZWFjaCBvdGhlci4KKworQmVPUzogRGlkbid0IGNvbXBpbGUuICBDb25maWd1cmUgZGlkbid0IGFkZCB0aGUgb3NfYmVvcyBmaWxlcywgdGhlIFFOWCBjaGVjaworcmVtb3ZlZCB0aGVtLiAgVmFyaW91cyBjaGFuZ2VzIHRvIG9zX2Jlb3MuY2MuIChKb3NodWEgSGFiZXJtYW4pCitSZW1vdmVkIHRoZSBjaGVjayBmb3IgdGhlIGhhcmR3YXJlIHBsYXRmb3JtLCB0aGUgQmVCb3ggaGFzIG5vdCBiZWVuIHByb2R1Y2VkCitmb3IgYSBsb25nIHRpbWUgbm93LgorCitXaW4zMiBHVUk6IGRvbid0IHVzZSBhIG1lc3NhZ2UgYm94IHdoZW4gdGhlIHNoZWxsIHJldHVybnMgYW4gZXJyb3IgY29kZSwKK2Rpc3BsYXkgdGhlIG1lc3NhZ2UgaW4gdGhlIFZpbSB3aW5kb3cuCisKK01ha2VfbXZjLm1hayBhbHdheXMgaW5jbHVkZWQgIi9kZWJ1ZyIgZm9yIGxpbmtpbmcuICAiR1VJPW5vIiBhcmd1bWVudCBkaWRuJ3QKK3dvcmsuICBVc2UgIkRFQlVHPXllcyIgaW5zdGVhZCBvZiAiREVCVUc9MSIgdG8gbWFrZSBpdCBjb25zaXN0ZW50LiAoRGFuIFNoYXJwKQorCitXaGVuIGEgbGluZSBpbiB0aGUgdGFncyBmaWxlIGVuZGVkIGluIDsiIChubyBUQUIgZm9sbG93aW5nKSB0aGUgY29tbWFuZCB3b3VsZAorbm90IGJlIHJlY29nbml6ZWQgYXMgYSBzZWFyY2ggY29tbWFuZC4KKworWDExOiBUaGUgaW5wdXRNZXRob2QgcmVzb3VyY2UgbmV2ZXIgd29ya2VkLiAgRG9uJ3QgdXNlIHRoZSAibm9uZSIgaW5wdXQgbWV0aG9kCitmb3IgU0dJLCBpdCBhcHBhcmVudGx5IG1ha2VzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gSW5wdXQgbWV0aG9kIGRyb3BwZWQuCisKK0ZpeGVkIGluY29ycmVjdCB0ZXN0cyBpbiBvc19tYWMuaC4gKEF4ZWwgS2llbGhvcm4pCisKK1dpbjMyIGNvbnNvbGU6IFdoZW4gdGhlIGNvbnNvbGUgd2hlcmUgVmltIHJ1bnMgaW4gaXMgY2xvc2VkLCBWaW0gY291bGQgaGFuZyBpbgordHJ5aW5nIHRvIHJlc3RvcmUgdGhlIHdpbmRvdyBpY29uLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCitXaGVuIHVzaW5nICI6M2NhbGwgZnVuYygpIiBvciAiOjMsM2NhbGwgZnVuYygpIHRoZSBsaW5lIG51bWJlciB3YXMgaWdub3JlZC4KKworV2hlbiAnc2hvd2JyZWFrJyBhbmQgJ2xpbmVicmVhaycgd2VyZSBib3RoIHNldCwgVmlzdWFsIGhpZ2hsaWdodGluZyBzb21ldGltZXMKK2NvbnRpbnVlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitHVEsgR1VJOiBUZWFyb2ZmIGl0ZW1zIHdlcmUgYWRkZWQgZXZlbiB3aGVuICdndWlvcHRpb25zJyBkaWRuJ3QgY29udGFpbiAndCcKK3doZW4gc3RhcnRpbmcgdXAuCisKK01TLVdpbmRvd3M6IFdoZW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGluY2x1ZGVzIGEgIn4iLCBzZWFyY2hpbmcgZmlsZXMgd2l0aAorImdmIiBvciAiOmZpbmQiIGRpZG4ndCB3b3JrLiAgQSAiJCIgaW4gdGhlIGRpcmVjdG9yeSBoYWQgdGhlIHNhbWUgcHJvYmxlbS4KK0FkZGVkIG1jaF9oYXNfZXhwX3dpbGRjYXJkKCkgZnVuY3Rpb25zLgorCitXaGVuIHJlZHVjaW5nIHRoZSBWaW0gd2luZG93IGhlaWdodCB3aGlsZSBzdGFydGluZyB1cCwgd291bGQgZ2V0IGFuCitvdXQtb2YtbWVtb3J5IGVycm9yIG1lc3NhZ2UuCisKK1doZW4gZWRpdGluZyBhIHZlcnkgbG9uZyBzZWFyY2ggcGF0dGVybiwgJ2luY3NlYXJjaCcgY2F1c2VkIHRoZSByZWRyYXcgb2YgdGhlCitjb21tYW5kIGxpbmUgdG8gZmFpbC4KKworTW90aWYgR1VJOiBPbiBzb21lIHN5c3RlbXMgdGhlICJIZWxwIiBtZW51IHdvdWxkIG5vdCBiZSBvbiB0aGUgZmFyIHJpZ2h0LCBhcworaXQgc2hvdWxkIGJlLiAgT24gc29tZSBvdGhlciBzeXN0ZW1zIChlc3AuIElSSVgpIHRoZSBjb21tYW5kIGxpbmUgd291bGQgbm90Citjb21wbGV0ZWx5IHNob3cuICBTb2x1dGlvbiBpcyB0byBvbmx5IHJlc2l6ZSB0aGUgbWVudWJhciBmb3IgTGVzc3RpZi4KKworVXNpbmcgIiUiIGluIGEgbGluZSB0aGF0IGNvbnRhaW5zICJcXCIgdHdpY2UgZGlkbid0IHRha2UgY2FyZSBvZiB0aGUgcXVvdGVzCitwcm9wZXJseS4gIE5vdyBtYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIFwiIGFuZCBcXCIuCisKK0ZvciBub24tVW5peCBzeXN0ZW1zIGEgZHVtbXkgZmlsZSBpcyBjcmVhdGVkIHdoZW4gZmluZGluZyBhIHN3YXAgbmFtZSB0bworZGV0ZWN0IGEgOC4zIGZpbGVzeXN0ZW0uICBXaGVuIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSwgd291bGQgZ2V0IGEKK3dhcm5pbmcgZm9yIHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWQgb3V0c2lkZSBvZiBWaW0uICBBbHNvLCB3aGVuIGNsb3NpbmcgdGhlIFZpbQord2luZG93IHRoZSBmaWxlIHdvdWxkIHJlbWFpbi4KKworTW90aWY6IFRoZSBtZW51IGhlaWdodCB3YXMgYWx3YXlzIGNvbXB1dGVkLCB1c2luZyBhICItbWVudWhlaWdodCIgYXJndW1lbnQKK3dhcyBzZXR0aW5nIHRoZSByb29tIGZvciB0aGUgY29tbWFuZCBsaW5lLiAgTm93IG1ha2UgY2xlYXIgdGhlIGFyZ3VtZW50IGlzIG5vdAorc3VwcG9ydGVkLgorCitGb3Igc29tZSAoRUJDRElDKSBzeXN0ZW1zLCBQT1VORCB3YXMgZXF1YWwgdG8gJyMnLiAgQWRkZWQgYW4gI2lmIGZvciB0aGF0IHRvCithdm9pZCBhIGR1cGxpY2F0ZSBjYXNlIGluIGEgc3dpdGNoLgorCitUaGUgR1VJIG1heSBoYXZlIHByb2JsZW1zIHdoZW4gZm9ya2luZy4gIEFsd2F5cyBjYWxsIF9leGl0KCkgaW5zdGVhZCBvZiBleGl0KCkKK2luIHRoZSBwYXJlbnQsIHRoZSBjaGlsZCB3aWxsIGNhbGwgZXhpdCgpLgorCitXaW4zMiBHVUk6IEFjY2VudGVkIGNoYXJhY3RlcnMgd2VyZSBvZnRlbiB3cm9uZyBpbiBkaWFsb2dzIGFuZCB0ZWFyb2ZmIG1lbnVzLgorTm93IHVzZSBDUF9BQ1AgaW5zdGVhZCBvZiBDUF9PRU1DUC4gKFZpbmNlIE5lZ3JpKQorCitXaGVuIGRpc3BsYXlpbmcgdGV4dCB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgY2F1c2VzIGFuIGVycm9yIChlLmcuLCBydW5uaW5nCitvdXQgb2Ygc3RhY2spIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIGRpc2FibGVkIHRvIGF2b2lkIGZ1cnRoZXIgbWVzc2FnZXMuCisKK1doZW4gYSBjb21tYW5kIGluIGEgLnZpbXJjIG9yIC5ndmltcmMgY2F1c2VzIGFuIEFUVEVOVElPTiBwcm9tcHQsIGFuZCBWaW0gd2FzCitzdGFydGVkIGZyb20gdGhlIGRlc2t0b3AgKG5vIHBsYWNlIHRvIGRpc3BsYXkgbWVzc2FnZXMpIGl0IHdvdWxkIGhhbmcuICBOb3cKK29wZW4gdGhlIEdVSSB3aW5kb3cgZWFybHkgdG8gYmUgYWJsZSB0byBkaXNwbGF5IHRoZSBtZXNzYWdlcyBhbmQgcG9wIHVwIHRoZQorZGlhbG9nLgorCisicjxDUj4iIG9uIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgZGVsZXRlZCBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZQorY2hhcmFjdGVyLiAiM3I8Q1I+IiBkZWxldGVkIHRocmVlIGJ5dGVzIGluc3RlYWQgb2YgdGhyZWUgY2hhcmFjdGVycy4KKworV2hlbiBpbnRlcnJ1cHRpbmcgcmVhZGluZyBhIGZpbGUsIFZpIGNvbnNpZGVycyB0aGUgYnVmZmVyIG1vZGlmaWVkLiAgQWRkZWQgdGhlCisnaScgZmxhZyBpbiAnY3BvcHRpb25zJyBmbGFnIGZvciB0aGlzICh3ZSBkb24ndCB3YW50IGl0IG1vZGlmaWVkIHRvIGJlIGFibGUgdG8KK2RvICI6cSIpLgorCitXaGVuIHVzaW5nIGFuIGl0ZW0gaW4gJ2d1aWN1cnNvcicgdGhhdCBzdGFydHMgd2l0aCBhIGNvbG9uLCBWaW0gd291bGQgZ2V0CitzdHVjayBvciBjcmFzaC4KKworV2hlbiBwdXR0aW5nIGEgZmlsZSBtYXJrIGluIGEgaGVscCBmaWxlIGFuZCBsYXRlciBqdW1waW5nIGJhY2sgdG8gaXQsIHRoZQorb3B0aW9ucyB3b3VsZCBub3QgYmUgc2V0LiAgRXh0ZW5kZWQgdGhlIG1vZGVsaW5lIGluIGFsbCBoZWxwIGZpbGVzIHRvIG1ha2UKK3RoaXMgd29yayBiZXR0ZXIuCisKK1doZW4gYSBtb2RlbGluZSBjb250YWluZWQgIjo6IiB0aGUgbG9jYWwgb3B0aW9uIHZhbHVlcyB3b3VsZCBiZSBwcmludGVkLiAgTm93CitpZ25vcmUgaXQuCisKK1NvbWUgaGVscCBmaWxlcyBkaWQgbm90IHVzZSBhIDguMyBuYW1lcywgd2hpY2ggY2F1c2VzIHByb2JsZW1zIHdoZW4gdXNpbmcKK01TLURPUyB1bnppcC4gIFJlbmFtZWQgIm11bHRpYnl0ZS50eHQiIHRvICJtYnl0ZS50eHQiLCAicmlnaHRsZWZ0LnR4dCIgdG8KKyJyaWxlZnQudHh0IiwgInRhZ3NlYXJjaC50eHQiIHRvICJ0YWdzcmNoLnR4dCIsICJvc19yaXNjb3MudHh0IiB0bworIm9zX3Jpc2MudHh0Ii4KKworV2hlbiBWaXN1YWwgbW9kZSBpcyBibG9ja3dpc2UsIHVzaW5nICJpdyIgb3IgImF3IiBtYWRlIGl0IGNoYXJhY3Rlcndpc2UuICBUaGF0Citkb2Vzbid0IHNlZW0gcmlnaHQsIG9ubHkgZG8gdGhpcyB3aGVuIGluIGxpbmV3aXNlIG1vZGUuICBCdXQgdGhlbiBkbyBpdAorYWx3YXlzLCBub3Qgb25seSB3aGVuIHN0YXJ0IGFuZCBlbmQgb2YgVmlzdWFsIG1vZGUgYXJlIGVxdWFsLgorCitXaGVuIHVzaW5nICJ2aXciIG9uIGEgc2luZ2xlLWxldHRlciB3b3JkIGFuZCAnc2VsZWN0aW9uJyBpcyBleGNsdXNpdmUsIHdvdWxkCitub3QgaW5jbHVkZSB0aGUgd29yZC4KKworV2hlbiBmb3JtYXR0aW5nIHRleHQgZnJvbSBJbnNlcnQgbW9kZSwgdXNpbmcgQ1RSTC1PLCBjb3VsZCBtZXNzIHVwIHVuZG8KK2luZm9ybWF0aW9uLgorCitXaGlsZSB3cml0aW5nIGEgZmlsZSAoYWxzbyBmb3IgdGhlIGJhY2t1cCBmaWxlKSB0aGVyZSB3YXMgbm8gY2hlY2sgZm9yIGFuCitpbnRlcnJ1cHQgKGhpdHRpbmcgQ1RSTC1DKS4gIFZpbSBjb3VsZCBoYW5nIHdoZW4gd3JpdGluZyBhIGxhcmdlIGZpbGUgb3ZlciBhCitzbG93IG5ldHdvcmssIGFuZCBtb3ZpbmcgdGhlIG1vdXNlIGRpZG4ndCBtYWtlIGl0IGFwcGVhciAod2hlbiAnbW91c2VoaWRlJyBpcworc2V0KSBhbmQgdGhlIHNjcmVlbiB3YXNuJ3QgdXBkYXRlZCBpbiB0aGUgR1VJLiAgQWxzbyBhbGxvdyBpbnRlcnJ1cHRpbmcgd2hlbgorc3luY2luZyB0aGUgc3dhcCBmaWxlLCBpdCBjYW4gdGFrZSBhIGxvbmcgdGltZS4KKworV2hlbiB1c2luZyAiOm1rc2Vzc2lvbiIgd2hpbGUgdGhlcmUgaXMgaGVscCB3aW5kb3csIGl0IHdvdWxkIGxhdGVyIGJlIHJlc3RvcmVkCit0byB0aGUgcmlnaHQgZmlsZSBidXQgbm90IG1hcmtlZCBhcyBhIGhlbHAgYnVmZmVyLiAgIjpoZWxwIiB3b3VsZCB0aGVuIG9wZW4KK2Fub3RoZXIgd2luZG93LiAgTm93IHVzZSB0aGUgdmFsdWUgImhlbHAiIGZvciAnYnVmdHlwZScgdG8gbWFyayBhIGhlbHAgYnVmZmVyLgorCitUaGUgc2Vzc2lvbiBmaWxlIGNvbnRhaW5lZCBhYnNvbHV0ZSBwYXRoIG5hbWVzIGluIG9wdGlvbiB2YWx1ZXMsIHRoYXQgZG9lc24ndAord29yayB3aGVuIHRoZSBob21lIGRpcmVjdG9yeSBkZXBlbmRzIG9uIHRoZSBzaXR1YXRpb24uICBSZXBsYWNlIHRoZSBob21lCitkaXJlY3Rvcnkgd2l0aCB+LyB3aGVuIHBvc3NpYmxlLgorCitXaGVuIHVzaW5nICdzaG93YnJlYWsnIGEgVEFCIGp1c3QgYWZ0ZXIgdGhlIHNob3duIGJyZWFrIHdvdWxkIG5vdCBiZSBjb3VudGVkCitjb3JyZWN0bHksIHRoZSBjdXJzb3Igd291bGQgYmUgcG9zaXRpb25lZCB3cm9uZy4KKworV2l0aCAnc2hvd2JyZWFrJyBzZXQgdG8gIi0tLT4iIG9yICItLS0tLS0tPiIgYW5kICdzdHMnIHNldCB0byA0LCBpbnNlcnRpbmcKK3RhYnMgZGlkIG5vdCB3b3JrIHJpZ2h0LiAgQ291bGQgY2F1c2UgYSBjcmFzaC4gIEJhY2tzcGFjaW5nIHdhcyBhbHNvIHdyb25nLAorY291bGQgZ2V0IHN0dWNrIGF0IGEgbGluZSBicmVhay4KKworV2luMzI6IGNyYXNoZWQgd2hlbiB0ZWFyaW5nIG9mZiBhIG1lbnUgd2l0aCBvdmVyIDMwMCBpdGVtcy4KKworR1VJOiBBIG1lbnUgb3IgdG9vbGJhciBpdGVtIHdvdWxkIGFwcGVhciB3aGVuIG9ubHkgYSB0b29sdGlwIHdhcyBkZWZpbmVkIGZvcgoraXQuCisKK1doZW4gJ3Njcm9sbG9mZicgaXMgbm9uLXplcm8gYW5kICIkIiBpcyBpbiAnY3BvcHRpb25zJywgdXNpbmcgInMiIHdoaWxlIHRoZQorbGFzdCBsaW5lIG9mIHRoZSBmaWxlIGlzIHRoZSBmaXJzdCBsaW5lIG9uIHNjcmVlbiwgdGhlIHRleHQgd2Fzbid0IGRpc3BsYXllZC4KKworV2hlbiBydW5uaW5nICJhdXRvY29uZiIsIGRlbGV0ZSB0aGUgY29uZmlndXJlIGNhY2hlIHRvIGZvcmNlIHN0YXJ0aW5nIGNsZWFubHkKK3doZW4gY29uZmlndXJlIGlzIHJ1biBhZ2Fpbi4KKworV2hlbiBjaGFuZ2luZyB0aGUgTm9ybWFsIGNvbG9ycyBmb3IgY3Rlcm0sIHRoZSB2YWx1ZSBvZiAnYmFja2dyb3VuZCcgd2FzCitjaGFuZ2VkIGV2ZW4gd2hlbiB0aGUgR1VJIHdhcyB1c2VkLgorCitUaGUgd2FybmluZyBmb3IgYSBtaXNzaW5nIHZpbXJ1bi5leGUgd2FzIGFsd2F5cyBnaXZlbiBvbiBzdGFydHVwLCBidXQgc29tZQorcGVvcGxlIGp1c3QgZWRpdGluZyBhIGZpbGUgZG9uJ3QgbmVlZCB0byBiZSBib3RoZXJlZCBieSBpdC4gIE9ubHkgc2hvdyBpdCB3aGVuCit2aW1ydW4gd291bGQgYmUgdXNlZC4KKworV2hlbiB1c2luZyAiJSIgaW4gYSBtdWx0aWJ5dGUgdGV4dCBpdCBjb3VsZCBnZXQgY29uZnVzZWQgYnkgdHJhaWxieXRlcyB0aGF0CittYXRjaC4gKE11cmFva2EgVGFybykKKworVGVybWNhcCBlbnRyeSBmb3IgUmlzY09TIHdhcyB3cm9uZywgdXNpbmcgNyBhbmQgOCBpbiBvY3RhbCBjb2Rlcy4KKworQXRoZW5hOiBUaGUgdGl0bGUgb2YgYSBkaWFsb2cgd2luZG93IGFuZCB0aGUgZmlsZSBzZWxlY3RvciB3aW5kb3cgd2VyZSBub3QKK3NldC4gKERhdmlkIEhhcnJpc29uKQorCitUaGUgImh0bWxMaW5rIiBoaWdobGlnaHQgZ3JvdXAgc3BlY2lmaWVkIGNvbG9ycywgd2hpY2ggZ2l2ZXMgcHJvYmxlbXMgd2hlbgordXNpbmcgYSBjb2xvciBzY2hlbWUuICBBZGRlZCB0aGUgIlVuZGVybGluZWQiIGhpZ2hsaWdodCBncm91cCBmb3IgdGhpcy4KKworQWZ0ZXIgdXNpbmcgIjppbnNlcnQiIG9yICI6Y2hhbmdlIiB0aGUgJ1sgbWFyayB3b3VsZCBiZSBvbmUgbGluZSB0b28gbG93LgorCitXaGVuIGxvb2tpbmcgZm9yIHRoZSBmaWxlIG5hbWUgYWZ0ZXIgYSBtYXRjaCB3aXRoICdpbmNsdWRlJyBvbmUgY2hhcmFjdGVyIHdhcworc2tpcHBlZC4gIFNhbWUgZm9yICdkZWZpbmUnLgorCitXaW4zMiBhbmQgREpHUFA6IFdoZW4gZWRpdGluZyBhIGZpbGUgd2l0aCBhIHNob3J0IG5hbWUgaW4gYSBkaXJlY3RvcnksIGFuZAorZWRpdGluZyB0aGUgc2FtZSBmaWxlIGJ1dCB1c2luZyB0aGUgbG9uZyBuYW1lLCB3b3VsZCBlbmQgdXAgd2l0aCB0d28gYnVmZmVycworb24gdGhlIHNhbWUgZmlsZS4KKworImdmIiBvbiBhIGZpbGVuYW1lIHRoYXQgc3RhcnRzIHdpdGggIi4uLyIgb25seSB3b3JrZWQgd2hlbiB0aGUgZmlsZSBiZWluZworZWRpdGVkIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEFuIGluY2x1ZGUgZmlsZSBzZWFyY2ggZGlkbid0IHdvcmsKK3Byb3Blcmx5IGZvciBmaWxlcyBzdGFydGluZyB3aXRoICIuLi8iIG9yICIuIi4gIE5vdyBzZWFyY2ggYm90aCByZWxhdGl2ZSB0bwordGhlIGZpbGUgYW5kIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworV2hlbiAncHJpbnRoZWFkZXInLCAndGl0bGVzdHJpbmcnLCAnaWNvbnN0cmluZycsICdydWxlcmZvcm1hdCcgb3IgJ3N0YXR1c2xpbmUnCitjb250YWluZWQgIiV7IiBidXQgbm8gZm9sbG93aW5nICJ9IiBtZW1vcnkgd2FzIGNvcnJ1cHRlZCBhbmQgYSBjcmFzaCBjb3VsZAoraGFwcGVuLgorCisiOjBhcHBlbmQiIGFuZCB0aGVuIGluc2VydGluZyB0d28gbGluZXMgZGlkIG5vdCByZWRyYXcgdGhlIGJsYW5rIGxpbmVzIHRoYXQKK3dlcmUgc2Nyb2xsZWQgYmFjayBkb3duLgorCitXaGVuIHVzaW5nIGluc2VydCBtb2RlIGNvbXBsZXRpb24gaW4gYSBuYXJyb3cgd2luZG93LCB0aGUgbWVzc2FnZSBjYXVzZWQgYQorc2Nyb2xsIHVwLiAgTm93IHNob3J0ZW4gdGhlIG1lc3NhZ2UgaWYgaXQgZG9lc24ndCBmaXQgYW5kIGF2b2lkIHdyaXRpbmcgdGhlCitydWxlciBvdmVyIHRoZSBtZXNzYWdlLgorCitYSU0gc3RpbGwgZGlkbid0IHdvcmsgY29ycmVjdGx5IG9uIHNvbWUgc3lzdGVtcywgZXNwZWNpYWxseSBTR0kvSVJJWC4gIEFkZGVkCit0aGUgJ2ltZGlzYWJsZScgb3B0aW9uLCB3aGljaCBpcyBzZXQgYnkgZGVmYXVsdCBmb3IgdGhhdCBzeXN0ZW0uCisKK1BhdGNoIDYuMGF3LjAwOAorUHJvYmxlbTogICAgV2hlbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgZmlsZSBuYW1lIGlzIG92ZXIgMTI3LCB0aGUgQnVmZmVycworCSAgICBtZW51IGVudHJ5IHdvdWxkIGdldCBhIG5lZ2F0aXZlIHByaW9yaXR5IGFuZCBjYXVzZSBwcm9ibGVtcy4KK1NvbHV0aW9uOiAgIFJlZHVjZSB0aGUgbXVsdGlwbGllciBmb3IgdGhlIGZpcnN0IGNoYXJhY3RlciB3aGVuIGNvbXB1dGluZworCSAgICB0aGUgaGFzaCB2YWx1ZSBmb3IgYSBCdWZmZXJzIG1lbnUgZW50cnkuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4wYXcuMDEwCitQcm9ibGVtOiAgICBXaW4zMjogIjpicm93c2UgZWRpdCBkaXIvZGlyIiBkaWRuJ3Qgd29yay4gKFZpa2FzKQorU29sdXRpb246ICAgQ2hhbmdlIHNsYXNoZXMgdG8gYmFja3NsYXNoZXMgaW4gdGhlIGRpcmVjdG9yeSBwYXNzZWQgdG8gdGhlIGZpbGUKKwkgICAgYnJvd3Nlci4KK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitBdGhlbmEgZmlsZSBicm93c2VyOiBPbiBzb21lIHN5c3RlbXMgd2NzdG9tYnMoKSBjYW4ndCBiZSB1c2VkIHRvIGdldCB0aGUKK2xlbmd0aCBvZiBhIG11bHRpLWJ5dGUgc3RyaW5nLiAgVXNlIHRoZSBtYXhpbXVtIGxlbmd0aCB0aGVuLiAoWWFzdWhpcm8KK01hdHN1bW90bykKKworUGF0Y2ggNi4wYXguMDAxCitQcm9ibGVtOiAgICBXaGVuICdwYXRjaG1vZGUnIGlzIHNldCwgYXBwZW5kaW5nIHRvIGEgZmlsZSBnaXZlcyBhbiBlbXB0eQorCSAgICBvcmlnaW5hbCBmaWxlLiAoRWQgUmFsc3RvbikKK1NvbHV0aW9uOiAgIEFsc28gbWFrZSBhIGJhY2t1cCBjb3B5IHdoZW4gYXBwZW5kaW5nIGFuZCAncGF0Y2htb2RlJyBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjBheC4wMDIKK1Byb2JsZW06ICAgIFdoZW4gJ3BhdGNobW9kZScgaXMgc2V0LCBhcHBlbmRpbmcgdG8gYSBjb21wcmVzc2VkIGZpbGUgZ2l2ZXMgYW4KKwkgICAgdW5jb21wcmVzc2VkIG9yaWdpbmFsIGZpbGUuIChFZCBSYWxzdG9uKQorU29sdXRpb246ICAgQ3JlYXRlIHRoZSBvcmlnaW5hbCBmaWxlIGJlZm9yZSBkZWNvbXByZXNzaW5nLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9nemlwLnZpbQorCitQYXRjaCA2LjBheC4wMDUKK1Byb2JsZW06ICAgIEF0aGVuYSBmaWxlIHNlbGVjdG9yIGtlZXBzIHRoZSB0aXRsZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4KK1NvbHV0aW9uOiAgIFNldCB0aGUgdGl0bGUgZWFjaCB0aW1lIHRoZSBmaWxlIHNlbGVjdG9yIGlzIG9wZW5lZC4gKERhdmlkCisJICAgIEhhcnJpc29uKQorRmlsZXM6CSAgICBzcmMvZ3VpX2F0X2ZzLmMKKworUGF0Y2ggNi4wYXguMDA3CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIEdQTSAobW91c2UgZHJpdmVyIGluIGEgTGludXggY29uc29sZSkgYSBkb3VibGUgY2xpY2sgaXMKKwkgICAgaW50ZXJwcmV0ZWQgYXMgYSBzY3JvbGwgd2hlZWwgY2xpY2suCitTb2x1dGlvbjogICBDaGVjayBpZiBHUE0gaXMgYmVpbmcgdXNlZCB3aGVuIGRlY2lkaW5nIGlmIGEgbW91c2UgZXZlbnQgaXMgZm9yCisJICAgIHRoZSBzY3JvbGwgd2hlZWwuCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4wYXguMDEwCitQcm9ibGVtOiAgICBUaGUgRWRpdC5TYXZlIG1lbnUgYW5kIHRoZSBTYXZlIHRvb2xiYXIgYnV0dG9uIGRpZG4ndCB3b3JrIHdoZW4KKwkgICAgdGhlIGJ1ZmZlciBoYXMgbm8gZmlsZSBuYW1lLgorU29sdXRpb246ICAgVXNlIGEgZmlsZSBicm93c2VyIHRvIGFzayBmb3IgYSBmaWxlIG5hbWUuICBBbHNvIGZpeCB0aGUgdG9vbGJhcgorCSAgICBGaW5kIGl0ZW0gaW4gVmlzdWFsIG1vZGUuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4wYXguMDEyCitQcm9ibGVtOiAgICBXaGVuICdjcG9wdGlvbnMnIGNvbnRhaW5zICIkIiwgYnJlYWtpbmcgYSBsaW5lIGZvciAndGV4dHdpZHRoJworCSAgICBkb2Vzbid0IHJlZHJhdyBwcm9wZXJseS4gKFN0ZWZhbiBTY2h1bHplKQorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBkb2xsYXIgYmVmb3JlIGJyZWFraW5nIHRoZSBsaW5lLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMGF4LjAxNAorUHJvYmxlbTogICAgV2luMzI6IE9uIFdpbmRvd3MgOTggIjptYWtlIC1mIGZpbGUiIGRvZXNuJ3Qgd29yayB3aGVuICdzaGVsbCcgaXMKKwkgICAgImNvbW1hbmQuY29tIiBhbmQgJ21ha2VwcmcnIGlzICJubWFrZSIuICBUaGUgZW52aXJvbm1lbnQgaXNuJ3QKKwkgICAgcGFzc2VkIG9uIHRvICJubWFrZSIuCitTb2x1dGlvbjogICBBbHNvIHVzZSB2aW1ydW4uZXhlIHdoZW4gcmVkaXJlY3RpbmcgdGhlIG91dHB1dCBvZiBhIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMGF4LjAxNgorUHJvYmxlbTogICAgVGhlIHZlcnNpb24gbnVtYmVyIHdhcyByZXBvcnRlZCB3cm9uZyBpbiB0aGUgaW50cm8gc2NyZWVuLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgdmVyc2lvbiBudW1iZXIgd2l0aCB0d28gYWRkaXRpb25hbCBsZXR0ZXJzLgorRmlsZXM6CSAgICBzcmMvdmVyc2lvbi5jCisKK1BhdGNoIDYuMGF4LjAxOQorUHJvYmxlbTogICAgV2hlbiBzY3JvbGxpbmcgYSB3aW5kb3cgd2l0aCBmb2xkcyB1cHdhcmRzLCBzd2l0Y2hpbmcgdG8gYW5vdGhlcgorCSAgICB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdyBhbmQgYmFjayBtYXkgbm90IHVwZGF0ZSB0aGUgc2Nyb2xsYmFyLgorU29sdXRpb246ICAgTGltaXQgd19ib3RsaW5lIHRvIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGJ1ZmZlciBwbHVzIG9uZS4KK0ZpbGVzOgkgICAgc3JjL21vdmUuYworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVkVSU0lPTiA2LjEJCQkJCQkqdmVyc2lvbi02LjEqCisKK1RoaXMgc2VjdGlvbiBpcyBhYm91dCBpbXByb3ZlbWVudHMgbWFkZSBiZXR3ZWVuIHZlcnNpb24gNi4wIGFuZCA2LjEuCisKK1RoaXMgaXMgYSBidWctZml4IHJlbGVhc2UsIHRoZXJlIGFyZSBub3QgcmVhbGx5IGFueSBuZXcgZmVhdHVyZXMuCisKKworQ2hhbmdlZAkJCQkJCQkqY2hhbmdlZC02LjEqCistLS0tLS0tCisKKydpbWluc2VydCcgYW5kICdpbXNlYXJjaCcgYXJlIG5vIGxvbmdlciBzZXQgYXMgYSBzaWRlIGVmZmVjdCBvZiBkZWZpbmluZyBhCitsYW5ndWFnZS1tYXBwaW5nIHVzaW5nICI6bG1hcCIuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTYuMSoKKy0tLS0tCisKK1N5bnRheCBmaWxlczoKK2FtcGwJCUFNUEwgKERhdmlkIEtyaWVmKQorYW50CQlBbnQgKEpvaGFubmVzIFplbGxuZXIpCitiYWFuCQlCYWFuIChIZXIgdmFuIGRlIFZsaWVydCkKK2NzCQlDIyAoSm9oYW5uZXMgWmVsbG5lcikKK2xpZmVsaW5lcwlMaWZlbGluZXMgKFBhdHJpY2sgVGV4aWVyKQorbHNjcmlwdAkJTG90dXNTY3JpcHQgKFRhcnluIEVhc3QpCittb28JCU1PTyAoVGltbyBGcmVuYXkpCituc2lzCQlOU0lTIChBbGV4IEpha3VzaGV2KQorcHBkCQlQb3N0c2NyaXB0IFByaW50ZXIgRGVzY3JpcHRpb24gKEJqb2VybiBKYWNrZSkKK3JwbAkJUlBMLzIgKEpvZWwgQmVydHJhbmQpCitzY2lsYWIJCVNjaWxhYiAoQmVub2l0IEhhbWVsaW4pCitzcGxpbnQJCVNwbGludCAoUmFsZiBXaWxkZW5odWVzKQorc3FsagkJU1FMSiAoQW5kcmVhcyBGaXNjaGJhY2gpCit3dmRpYWwJCVd2RGlhbCAoUHJhaGxhZCBWYWlkeWFuYXRoYW4pCit4Zjg2Y29uZglYRnJlZTg2IGNvbmZpZyAoTmlrb2xhaSBXZWlidWxsKQoreG1vZG1hcAkJWG1vZG1hcCAoTmlrb2xhaSBXZWlidWxsKQoreHNsdAkJWHNsdCAoSm9oYW5uZXMgWmVsbG5lcikKK21vbmsJCU1vbmsgKE1pa2UgTGl0aGVybGFuZCkKK3hzZAkJWHNkIChKb2hhbm5lcyBaZWxsbmVyKQorY2RsCQlDREwgKFJhdWwgU2VndXJhIEFjZXZlZG8pCitzZW5kcHIJCVNlbmQtcHIgKEhlbmRyaWsgU2Nob2x6KQorCitBZGRlZCBpbmRlbnQgZmlsZSBmb3IgU2NoZW1lLiAoRG9yYWkgU2l0YXJhbSkKK0FkZGVkIGluZGVudCBmaWxlIGZvciBQcm9sb2cuIChLb250cmEgR2VyZ2VseSkKK0FkZGVkIGluZGVudCBmaWxlIGZvciBQb3ZyYXkgKERhdmlkIE5lY2FzKQorQWRkZWQgaW5kZW50IGZpbGUgZm9yIElETCAoQWxla3NhbmRhciBKZWxlbmFrKQorQWRkZWQgQyMgaW5kZW50IGFuZCBmdHBsdWdpbiBzY3JpcHRzLgorCitBZGRlZCBVa3JhaW5pYW4gbWVudSB0cmFuc2xhdGlvbnMuIChCb2hkYW4gVmxhc3l1aykKK0FkZGVkIEFTQ0lJIHZlcnNpb24gb2YgdGhlIEN6ZWNoIG1lbnVzLiAoSmlyaSBCcmV6aW5hKQorCitBZGRlZCBTaW1wbGlmaWVkIENoaW5lc2UgdHJhbnNsYXRpb24gb2YgdGhlIHR1dG9yLiAoTWVuZGVsIEwgQ2hhbikKKworQWRkZWQgUnVzc2lhbiBrZXltYXAgZm9yIHlhd2VydHkga2V5Ym9hcmQuCisKK0FkZGVkIGFuIGV4cGxhbmF0aW9uIG9mIHVzaW5nIHRoZSB2aW1yYyBmaWxlIGluIHRoZSB0dXRvci4KK0NoYW5nZWQgdHV0b3IudmltIHRvIGdldCB0aGUgcmlnaHQgZW5jb2RpbmcgZm9yIHRoZSBUYWl3YWluZXNlIHR1dG9yLgorCitBZGRlZCBSdXNzaWFuIHR1dG9yLiAoQW5kcmV5IEtpc2VsZXYpCitBZGRlZCBQb2xpc2ggdHV0b3IuIChNaWtvbGFqIE1hY2hvd3NraSkKKworQWRkZWQgZGFya2JsdWUgY29sb3Igc2NoZW1lLiAoQm9oZGFuIFZsYXN5dWspCisKK1doZW4gcGFja2luZyB0aGUgZG9zIGxhbmd1YWdlIGFyY2hpdmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgLm1vIGZpbGVzCit0aGF0IGFyZSByZXF1aXJlZC4KKworSW1wcm92ZWQgTlNJUyBzY3JpcHQgdG8gc3VwcG9ydCBOU0lTIDE4MC4gIEFkZGVkIGljb25zIGZvciB0aGUKK2VuYWJsZWQvZGlzYWJsZWQgc3RhdHVzLiAoTWlyZWsgUHJ1Y2huaWspCisKK2NwMTI1MCB2ZXJzaW9uIG9mIHRoZSBTbG92YWsgbWVzc2FnZSB0cmFuc2xhdGlvbnMuCisKK0NvbXBpbGVyIHBsdWdpbnMgZm9yIElSSVggY29tcGlsZXJzLiAoRGF2aWQgSGFycmlzb24pCisKKworRml4ZWQJCQkJCQkJKmZpeGVkLTYuMSoKKy0tLS0tCisKK1RoZSBsaWNlbnNlIHRleHQgd2FzIHVwZGF0ZWQgdG8gbWFrZSB0aGUgbWVhbmluZyBjbGVhcmVyIGFuZCBtYWtlIGl0Citjb21wYXRpYmxlIHdpdGggdGhlIEdOVSBHUEwuICBPdGhlcndpc2UgZGlzdHJpYnV0b3JzIGhhdmUgYSBwcm9ibGVtIHdoZW4KK2xpbmtpbmcgVmltIHdpdGggYSBHUEwnZWQgbGlicmFyeS4KKworV2hlbiBpbnN0YWxsaW5nIHRoZSAibGVzcy5zaCIgc2NyaXB0IGl0IHdhcyBub3QgbWFkZSBleGVjdXRhYmxlLiAoQ2h1Y2sgQmVyZykKKworV2luMzI6IFRoZSAiOSIga2V5IG9uIHRoZSBudW1wYWQgd2Fzbid0IHdvcmtpbmcuIChKdWxpYW4gS2lucmFpZCkKKworVGhlIE5TSVMgaW5zdGFsbCBzY3JpcHQgZGlkbid0IHdvcmsgd2l0aCBOU0lTIDEuODAgb3IgbGF0ZXIuICBBbHNvIGFkZAorVmltLXNwZWNpZmljIGljb25zLiAoUHJ1Y2huaWspCisKK1RoZSBzY3JpcHQgZm9yIGNvbnZlcnNpb24gdG8gSFRNTCBjb250YWluZWQgYW4gImlmIiBpbiB0aGUgd3JvbmcgcGxhY2UuCisoTWljaGFlbCBHZWRkZXMpCisKK0FsbG93IHVzaW5nICI6YXNjaWkiIGluIHRoZSBzYW5kYm94LCBpdCdzIGhhcm1sZXNzLgorCitSZW1vdmVkIGNyZWF0KCkgZnJvbSBvc2RlZjIuaC5pbiwgaXQgd2Fzbid0IHVzZWQgYW5kIG1heSBjYXVzZSBhIHByb2JsZW0gd2hlbgoraXQncyByZWRlZmluZWQgdG8gY3JlYXQ2NCgpLgorCitUaGUgdGV4dCBmaWxlcyBpbiB0aGUgVmlzVmltIGRpcmVjdG9yeSB3ZXJlIGluICJkb3MiIGZvcm1hdC4gIFRoaXMgY2F1c2VkCitwcm9ibGVtcyB3aGVuIGFwcGx5aW5nIGEgcGF0Y2guICBOb3cga2VlcCB0aGVtIGluICJ1bml4IiBmb3JtYXQgYW5kIGNvbnZlcnQKK3RoZW0gdG8gImRvcyIgZm9ybWF0IG9ubHkgZm9yIHRoZSBQQyBhcmNoaXZlcy4KKworQWRkIHJ1YnkgZmlsZXMgdG8gdGhlIGRvcyBzb3VyY2UgYXJjaGl2ZSwgdGhleSBjYW4gYmUgdXNlZCBieSBNYWtlX212Yy5tYWsuCisoTWlyZWsgUHJ1Y2huaWspCisKKyJjcCAtZiIgZG9lc24ndCB3b3JrIG9uIGFsbCBzeXN0ZW1zLiAgQ2hhbmdlICJjcCAtZiIgaW4gdGhlIE1ha2VmaWxlIHRvICJybQorLWYiIGFuZCAiY3AiLgorCitEaWRuJ3QgY29tcGlsZSBvbiBhIENvbXBhcSBUYW5kZW0gSGltYWxheWEgT1NTLiAoTWljaGFlbCBBLiBCZW56aW5nZXIpCisKK1RoZSBHVEsgZmlsZSBzZWxlY3Rpb24gZGlhbG9nIGRpZG4ndCBpbmNsdWRlIHRoZSAiQ3JlYXRlIERpciIsICJEZWxldGUgRmlsZSIKK2FuZCAiUmVuYW1lIEZpbGUiIGJ1dHRvbnMuCisKK1doZW4gZG9pbmcgIjpicm93c2Ugc291cmNlIiB0aGUgZGlhbG9nIGhhcyB0aGUgdGl0bGUgIlJ1biBNYWNybyIuICBCZXR0ZXIKK3dvdWxkIGJlICJTb3VyY2UgVmltIHNjcmlwdCIuIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorCitXaW4zMjogRG9uJ3QgdXNlIHRoZSBwcmludGVyIGZvbnQgYXMgZGVmYXVsdCBmb3IgdGhlIGZvbnQgZGlhbG9nLgorCisibWFrZSBkb3NsYW5nIiBkaWRuJ3Qgd29yayB3aGVuIGNvbmZpZ3VyZSBkaWRuJ3QgcnVuICh5ZXQpLiAgU2V0ICRNQUtFTU8gdG8KKyJ5ZXMiLiAoTWlyZWsgUHJ1Y2huaWspCisKK1RoZSBUb29sQmFyIFRhZ0p1bXAgaXRlbSB1c2VkICJnXSIsIHdoaWNoIHByb21wdHMgZm9yIGEgc2VsZWN0aW9uIGV2ZW4gd2hlbgordGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgdGFnLiAgVXNlICJnPEMtXT4iIGluc3RlYWQuCisKK1RoZSBtaW5nIG1ha2VmaWxlIGZvciBtZXNzYWdlIHRyYW5zbGF0aW9ucyBkaWRuJ3QgaGF2ZSB0aGUgcmlnaHQgbGlzdCBvZgorZmlsZXMuCisKK1RoZSBNUy1XaW5kb3dzIDMuMSB2ZXJzaW9uIGNvbXBsYWlucyBhYm91dCBMSUJJTlRMLkRMTCBub3QgZm91bmQuICBDb21waWxlCit0aGlzIHZlcnNpb24gd2l0aG91dCBtZXNzYWdlIHRyYW5zbGF0aW9ucy4KKworVGhlIEJvcmxhbmQgNSBtYWtlZmlsZSBjb250YWluZWQgYSBjaGVjayBmb3IgUnVieSB3aGljaCBpcyBubyBsb25nZXIgbmVlZGVkLgorVGhlIFVSTHMgZm9yIHRoZSBUQ0wgbGlicmFyeSB3YXMgb3V0ZGF0ZWQuIChEYW4gU2hhcnApCisKK1RoZSBldmlzby5wcyBmaWxlIHdhcyBtaXNzaW5nIGZyb20gdGhlIERPUyBydW50aW1lIGFyY2hpdmUsIGl0J3MgbmVlZGVkIGZvcgorcHJpbnRpbmcgUG9zdFNjcmlwdCBpbiB0aGUgMzJiaXQgRE9TIHZlcnNpb24uCisKK0luIG1lbnUgZmlsZXMgIjpzY3JpcHRlbmNvZGluZyIgd2FzIHVzZWQgaW4gYSB3cm9uZyB3YXkgYWZ0ZXIgcGF0Y2ggNi4xYS4wMzIKK05vdyB1c2UgIjpzY3JpcHRlbmNvZGluZyIgaW4gdGhlIGZpbGUgd2hlcmUgdGhlIHRyYW5zbGF0aW9ucyBhcmUgZ2l2ZW4uICBEbwordGhlIHNhbWUgZm9yIGFsbCBtZW51cyBpbiBsYXRpbjEgZW5jb2RpbmcuCisKK0luY2x1ZGVkIGEgbG90IG9mIGZpeGVzIGZvciB0aGUgTWFjaW50b3NoLCBtb3N0bHkgdG8gbWFrZSBpdCB3b3JrIHdpdGggQ2FyYm9uLgorKERhbnkgU3RBbWFudCwgQXhlbCBLaWVsaG9ybiwgQmVuamkgRmlzaGVyKQorCitJbXByb3ZlZCB0aGUgdmltdHV0b3Igc2hlbGwgc2NyaXB0IHRvIHVzZSAkVE1QRElSIHdoZW4gaXQgZXhpc3RzLCBhbmQgZGVsZXRlCit0aGUgY29waWVkIGZpbGUgd2hlbiBleGl0aW5nIGluIGFuIGFibm9ybWFsIHdheS4gKE1heCBJc2NoZW5rbykKKworV2hlbiAiaWNvbnYuZGxsIiBjYW4ndCBiZSBmb3VuZCwgdHJ5IHVzaW5nICJsaWJpY29udi5kbGwiLgorCitXaGVuIGVuY3J5cHRpb24gaXMgdXNlZCwgZmlsdGVyaW5nIHdpdGggYSBzaGVsbCBjb21tYW5kIHdhc24ndCBwb3NzaWJsZS4KKworREpHUFA6ICI6Y2QgYzoiIGFsd2F5cyBmYWlsZWQsIGNhbid0IGdldCBwZXJtaXNzaW9ucyBmb3IgImM6Ii4KK1dpbjMyOiAiOmNkIGM6LyIgZmFpbGVkIGlmIHRoZSBwcmV2aW91cyBjdXJyZW50IGRpcmVjdG9yeSBvbiBjOiBoYWQgYmVjb21lCitpbnZhbGlkLgorCitESkdQUDogU2hpZnQtRGVsIGFuZCBEZWwgYm90aCBwcm9kdWNlIFwzMTZcMTIzLiAgRGVmYXVsdCBtYXBwaW5nIGZvciBEZWwgaXMKK3dyb25nLiAgRGlzYWJsZWQgaXQuCisKK0RlcGVuZGVuY2llcyBvbiBoZWFkZXIgZmlsZXMgaW4gTWluZ1cgbWFrZWZpbGUgd2FzIHdyb25nLgorCitXaW4zMjogRG9uJ3QgdXNlIEFDTCBzdHVmZiBmb3IgTVNWQyA0LjIsIGl0J3Mgbm90IHN1cHBvcnRlZC4gKFdhbHRlciBCcmlzY29lKQorCitXaW4zMiB3aXRoIEJvcmxhbmQ6IGJjYy5jZmcgd2FzIGNhY2hpbmcgdGhlIHZhbHVlIGZvciAkKEJPUiksIGJ1dCBwcm92aWRpbmcgYQorZGlmZmVyZW50IGFyZ3VtZW50IHRvIG1ha2UgZGlkbid0IHJlZ2VuZXJhdGUgaXQuCisKK1dpbjMyIHdpdGggTVNWQzogTWFrZV9pdmMubWFrIGdlbmVyYXRlcyBhIG5ldyBpZl9vbGUuaCBpbiBhIGRpZmZlcmVudAorZGlyZWN0b3J5LCB0aGUgaWZfb2xlLmggaW4gdGhlIHNyYyBkaXJlY3RvcnkgbWF5IGJlIHVzZWQgaW5zdGVhZC4gIERlbGV0ZSB0aGUKK2Rpc3RyaWJ1dGVkIGZpbGUuCisKK1doZW4gYSB3aW5kb3cgaXMgdmVydGljYWxseSBzcGxpdCBhbmQgdGhlbiAiOmJhbGwiIGlzIHVzZWQsIHRoZSB3aW5kb3cgbGF5b3V0CitpcyBtZXNzZWQgdXAsIGNhbiBjYXVzZSBhIGNyYXNoLiAoTXVyYW9rYSBUYXJvKQorCitXaGVuICdpbnNlcnRtb2RlJyBpcyBzZXQsIHVzaW5nIEZpbGUvTmV3IG1lbnUgYW5kIHRoZW4gZG91YmxlIGNsaWNraW5nLCAiaSIgaXMKK3Nvb24gaW5zZXJ0ZWQuIChNZXJsaW4gSGFuc2VuKQorCitXaGVuIFNlbGVjdCBtb2RlIGlzIGFjdGl2ZSBhbmQgdXNpbmcgdGhlIEJ1ZmZlcnMgbWVudSB0byBzd2l0Y2ggdG8gYW5vdGhlcgorYnVmZmVyLCBhbiBvbGQgc2VsZWN0aW9uIGNvbWVzIGJhY2suICBSZXNldCBWSXN1YWxfcmVzZWxlY3QgZm9yIGEgIjpidWZmZXIiCitjb21tYW5kLgorCitXaGVuIFNlbGVjdCBtb2RlIGlzIGFjdGl2ZSBhbmQgJ2luc2VydG1vZGUnIGlzIHNldCwgdXNpbmcgdGhlIEJ1ZmZlcnMgbWVudSB0bworc3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyLCBkaWQgbm90IHJldHVybiB0byBJbnNlcnQgbW9kZS4gIE1ha2Ugc3VyZQorInJlc3RhcnRfZWRpdCIgaXMgc2V0LgorCitXaGVuIGRvdWJsZSBjbGlja2luZyBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgd29yZCB3aGlsZSAnc2VsZWN0aW9uJyBpcworImV4Y2x1c2l2ZSIgZGlkbid0IHNlbGVjdCB0aGF0IHdvcmQuCisKKworUGF0Y2ggNi4wLjAwMQorUHJvYmxlbTogICAgTG9hZGluZyB0aGUgc2gudmltIHN5bnRheCBmaWxlIGNhdXNlcyBlcnJvciBtZXNzYWdlcyAuIChDb3Jpbm5hCisJICAgIFZpbnNjaGVuKQorU29sdXRpb246ICAgQWRkIGFuICJpZiIuIChDaGFybGVzIENhbXBiZWxsKQorRmlsZXM6CSAgICBydW50aW1lL3N5bnRheC9zaC52aW0KKworUGF0Y2ggNi4wLjAwMgorUHJvYmxlbTogICAgVXNpbmcgYSAnQCcgaXRlbSBpbiAndmltaW5mbycgZG9lc24ndCB3b3JrLiAoTWFya28gTGVpcGVydCkKK1NvbHV0aW9uOiAgIEFkZCAnQCcgdG8gdGhlIGxpc3Qgb2YgYWNjZXB0ZWQgaXRlbXMuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMDAzCitQcm9ibGVtOiAgICBUaGUgY29uZmlndXJlIGNoZWNrIGZvciBBQ0xzIG9uIEFJWCBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBGaXggdGhlIHRlc3QgcHJvZ3JhbSBzbyB0aGF0IGl0IGNvbXBpbGVzLiAoVG9tYXMgT2dyZW4pCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9hdXRvL2NvbmZpZ3VyZQorCitQYXRjaCA2LjAuMDA0CitQcm9ibGVtOiAgICBUaGUgZmluZC9yZXBsYWNlIGRpYWxvZyBkb2Vzbid0IHJldXNlIGEgcHJldmlvdXMgYXJndW1lbnQKKwkgICAgcHJvcGVybHkuCitTb2x1dGlvbjogICBBZnRlciByZW1vdmluZyBhICJcViIgdGVybWluYXRlIHRoZSBzdHJpbmcuIChad2FuZSBNd2Fpa2FtYm8pCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjAuMDA1CitQcm9ibGVtOiAgICBJbiBJbnNlcnQgbW9kZSwgIkNUUkwtTyA6bHMiIGhhcyBhIGRlbGF5IGJlZm9yZSByZWRyYXdpbmcuCitTb2x1dGlvbjogICBEb24ndCBkZWxheSBqdXN0IGFmdGVyIHdhaXRfcmV0dXJuKCkgd2FzIGNhbGxlZC4gIEFkZGVkIHRoZQorCSAgICBkaWRfd2FpdF9yZXR1cm4gZmxhZy4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL21lc3NhZ2UuYywgc3JjL25vcm1hbC5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjAwNgorUHJvYmxlbTogICAgV2l0aCBhIHZlcnRpY2FsIHNwbGl0LCAnbnVtYmVyJyBzZXQgYW5kICdzY3JvbGxvZmYnIG5vbi16ZXJvLAorCSAgICBtYWtpbmcgdGhlIHdpbmRvdyB3aWR0aCB2ZXJ5IHNtYWxsIGNhdXNlcyBhIGNyYXNoLiAoTmlrbGFzCisJICAgIExpbmRzdHJvbSkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIHplcm8gd2lkdGguCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4wLjAwNworUHJvYmxlbTogICAgV2hlbiBzZXR0aW5nICdmaWxldHlwZScgd2hpbGUgdGhlcmUgaXMgbm8gRmlsZVR5cGUgYXV0b2NvbW1hbmQsIGEKKwkgICAgZm9sbG93aW5nICI6c2V0ZmlsZXR5cGUiIHdvdWxkIHNldCAnZmlsZXR5cGUnIGFnYWluLiAoS29idXMKKwkgICAgUmV0aWVmKQorU29sdXRpb246ICAgU2V0IGRpZF9maWxldHlwZSBhbHdheXMgd2hlbiAnZmlsZXR5cGUnIGhhcyBiZWVuIHNldC4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMC4wMDgKK1Byb2JsZW06ICAgICdpbWRpc2FibGUnIGlzIG1pc3NpbmcgZnJvbSB0aGUgb3B0aW9ucyB3aW5kb3cuIChNaWNoYWVsIE5hdW1hbm4pCitTb2x1dGlvbjogICBBZGQgYW4gZW50cnkgZm9yIGl0LgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0KKworUGF0Y2ggNi4wLjAwOQorUHJvYmxlbTogICAgTmV4dHN0ZXAgZG9lc24ndCBoYXZlIFNfSVNCTEsuIChKb2huIEJlcHB1KQorU29sdXRpb246ICAgRGVmaW5lIFNfSVNCTEsgdXNpbmcgU19JRkJMSy4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguaAorCitQYXRjaCA2LjAuMDEwCitQcm9ibGVtOiAgICBVc2luZyAiZ2YiIG9uIGEgZmlsZSBuYW1lIHN0YXJ0aW5nIHdpdGggIi4vIiBvciAiLi4vIiBpbiBhIGJ1ZmZlcgorCSAgICB3aXRob3V0IGEgbmFtZSBjYXVzZXMgYSBjcmFzaC4gKFJveSBMZXdpcykKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIE5VTEwgZmlsZSBuYW1lLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYworCitQYXRjaCA2LjAuMDExCitQcm9ibGVtOiAgICBQeXRob246IEFmdGVyIHJlcGxhY2luZyBvciBkZWxldGluZyBsaW5lcyBnZXQgYW4gbWxfZ2V0IGVycm9yLgorCSAgICAoTGVvIExpcGVsaXMpCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIGN1cnNvciBwb3NpdGlvbiBmb3IgZGVsZXRlZCBvciBhZGRlZCBsaW5lcy4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMC4wMTIKK1Byb2JsZW06ICAgIFBvbGlzaCB0cmFuc2xhdGlvbnMgY29udGFpbiBwcmludGYgZm9ybWF0IGVycm9ycywgdGhpcyBjYW4gcmVzdWx0CisJICAgIGluIGEgY3Jhc2ggd2hlbiB1c2luZyBvbmUgb2YgdGhlbS4KK1NvbHV0aW9uOiAgIEZpeCBmb3IgdHJhbnNsYXRlZCBtZXNzYWdlcy4gKE1pY2hhbCBQb2xpdG93c2tpKQorRmlsZXM6CSAgICBzcmMvcG8vcGwucG8KKworUGF0Y2ggNi4wLjAxMworUHJvYmxlbTogICAgVXNpbmcgIjpzaWxlbnQhIGNtZCIgc3RpbGwgZ2l2ZXMgc29tZSBlcnJvciBtZXNzYWdlcywgbGlrZSBmb3IgYW4KKwkgICAgaW52YWxpZCByYW5nZS4gKFNhbG1hbiBIYWxpbSkKK1NvbHV0aW9uOiAgIFJlc2V0IGVtc2dfc2lsZW50IGFmdGVyIGNhbGxpbmcgZW1zZygpIGluIGRvX29uZV9jbWQoKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4wLjAxNAorUHJvYmxlbTogICAgV2hlbiAnbW9kaWZpYWJsZScgaXMgb2ZmIGFuZCAndmlydHVhbGVkaXQnIGlzICJhbGwiLCAicngiIG9uIGEgVEFCCisJICAgIHN0aWxsIGNoYW5nZXMgdGhlIGJ1ZmZlci4gKE11cmFva2EgVGFybykKK1NvbHV0aW9uOiAgIENoZWNrIGlmIHNhdmluZyB0aGUgbGluZSBmb3IgdW5kbyBmYWlscy4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4wMTUKK1Byb2JsZW06ICAgIFdoZW4gJ2Nwb3B0aW9ucycgaW5jbHVkZXMgIlMiIGFuZCAiZmlsZXR5cGUgcGx1Z2luIG9uIiBoYXMgYmVlbgorCSAgICB1c2VkLCBjYW4gZ2V0IGFuIGVycm9yIGZvciBkZWxldGluZyB0aGUgYjpkaWRfZnRwbHVnaW4gdmFyaWFibGUuCisJICAgIChSYWxwaCBIZW5kZXJzb24pCitTb2x1dGlvbjogICBPbmx5IGRlbGV0ZSB0aGUgdmFyaWFibGUgd2hlbiBpdCBleGlzdHMuCitGaWxlczoJICAgIHJ1bnRpbWUvZnRwbHVnaW4udmltCisKK1BhdGNoIDYuMC4wMTYKK1Byb2JsZW06ICAgIGJ1Zm5yKCksIGJ1Zm5hbWUoKSBhbmQgYnVmd2lubnIoKSBkb24ndCBmaW5kIHVubGlzdGVkIGJ1ZmZlcnMgd2hlbgorCSAgICB0aGUgYXJndW1lbnQgaXMgYSBzdHJpbmcuIChIYXJpIEtyaXNobmEgRGFyYSkKKwkgICAgQWxzbyBmb3Igc2V0YnVmdmFyKCkgYW5kIGdldGJ1ZnZhcigpLgorU29sdXRpb246ICAgQWxzbyBmaW5kIHVubGlzdGVkIGJ1ZmZlcnMuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjAxNworUHJvYmxlbTogICAgV2hlbiAndHR5YnVpbHRpbicgaXMgc2V0IGFuZCBhIGJ1aWx0aW4gdGVybWNhcCBlbnRyeSBkZWZpbmVzIHRfQ28KKwkgICAgYW5kIHRoZSBleHRlcm5hbCBvbmUgZG9lc24ndCwgaXQgZ2V0cyByZXNldCB0byBlbXB0eS4gKERhdmlkCisJICAgIEhhcnJpc29uKQorU29sdXRpb246ICAgT25seSBzZXQgdF9DbyB3aGVuIGl0IHdhc24ndCBzZXQgeWV0LgorRmlsZXM6CSAgICBzcmMvdGVybS5jCisKK1BhdGNoIDYuMC4wMTgKK1Byb2JsZW06ICAgIEluaXRpYWxpemluZyAnZW5jb2RpbmcnIG1heSBjYXVzZSBhIGNyYXNoIHdoZW4gc2V0bG9jYWxlKCkgaXMgbm90CisJICAgIHVzZWQuIChEYW55IFN0LUFtYW50KQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgTlVMTCBwb2ludGVyLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjAuMDE5CitQcm9ibGVtOiAgICBDb252ZXJ0aW5nIGEgc3RyaW5nIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHRvIGEgcHJpbnRhYmxlCisJICAgIHN0cmluZywgZS5nLiwgd2l0aCBzdHJ0cmFucygpLCBtYXkgY2F1c2UgYSBjcmFzaC4gKFRvbWFzIFplbGxlcmluKQorU29sdXRpb246ICAgQ29ycmVjdGx5IGNvbXB1dGUgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IGluIHRyYW5zc3RyKCkuCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMKKworUGF0Y2ggNi4wLjAyMAorUHJvYmxlbTogICAgV2hlbiBvYnRhaW5pbmcgdGhlIHZhbHVlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIGludGVybmFsbHksIGNvdWxkCisJICAgIGdldCB0aGUgZnVuY3Rpb24tbG9jYWwgdmFsdWUgaW5zdGVhZC4gIEFwcGxpZXMgdG8gdXNpbmcgPExlYWRlcj4KKwkgICAgYW5kIDxMb2NhbExlYWRlcj4gYW5kIHJlc2V0dGluZyBoaWdobGlnaHRpbmcgaW4gYSBmdW5jdGlvbi4KK1NvbHV0aW9uOiAgIFByZXBlbmQgImc6IiB0byB0aGUgdmFyaWFibGUgbmFtZS4gKEFyaWMgQmx1bWVyKQorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMsIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4wLjAyMQorUHJvYmxlbTogICAgVGhlICdjc2NvcGVwYXRoY29tcCcgb3B0aW9uIGRpZG4ndCB3b3JrLgorU29sdXRpb246ICAgQ2hhbmdlIFVTRV9DU0NPUEUgdG8gRkVBVF9DU0NPUEUuIChNYXJrIEZlbmcpCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMDIyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHRoZSAnbGFuZ21hcCcgb3B0aW9uLCB0aGUgc2Vjb25kIGNoYXJhY3RlciBvZiBhIGNvbW1hbmQKKwkgICAgc3RhcnRpbmcgd2l0aCAiZyIgaXNuJ3QgYWRqdXN0ZWQuCitTb2x1dGlvbjogICBBcHBseSAnbGFuZ21hcCcgdG8gdGhlIHNlY29uZCBjaGFyYWN0ZXIuIChBbGV4IEthcHJhbm9mZikKK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4wMjMKK1Byb2JsZW06ICAgIExvYWRpbmcgdGhlIGxoYXNrZWxsIHN5bnRheCBkb2Vzbid0IHdvcmsuIChUaG9yZSBCLiBLYXJsc2VuKQorU29sdXRpb246ICAgVXNlICI6cnVudGltZSIgaW5zdGVhZCBvZiAic291cmNlIiB0byBsb2FkIGhhc2tlbGwudmltLgorRmlsZXM6CSAgICBydW50aW1lL3N5bnRheC9saGFza2VsbC52aW0KKworUGF0Y2ggNi4wLjAyNAorUHJvYmxlbTogICAgVXNpbmcgIkNUUkwtViB1IDk5MDAiIGluIEluc2VydCBtb2RlIG1heSBjYXVzZSBhIGNyYXNoLiAoTm9haAorCSAgICBMZXZpdHQpCitTb2x1dGlvbjogICBEb24ndCBpbnNlcnQgYSBOVUwgYnl0ZSBpbiB0aGUgdGV4dCwgdXNlIGEgbmV3bGluZS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4wLjAyNQorUHJvYmxlbTogICAgVGhlIHBhdHRlcm4gIlx2eCgufCQpIiBkb2Vzbid0IG1hdGNoICJ4IiBhdCB0aGUgZW5kIG9mIGEgbGluZS4KKwkgICAgKFByZWJlbiBQZXBwZSBHdWxkYmVyZykKK1NvbHV0aW9uOiAgIEFsd2F5cyBzZWUgYSAiJCIgYXMgZW5kLW9mLWxpbmUgYWZ0ZXIgIlx2Ii4gIERvIHRoZSBzYW1lIGZvciAiXiIuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjAuMDI2CitQcm9ibGVtOiAgICBHVEs6IFdoZW4gdXNpbmcgYXJyb3cga2V5cyB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBtZW51cywgdGhlCisJICAgIHNlcGFyYXRvcnMgYXJlIHNlbGVjdGVkLgorU29sdXRpb246ICAgU2V0IHRoZSBzZXBhcmF0b3JzICJpbnNlbnNpdGl2ZSIuIChQYXZlbCBLYW5rb3Zza3kpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMC4wMjcKK1Byb2JsZW06ICAgIFZNUzogUHJpbnRpbmcgZG9lc24ndCB3b3JrLCB0aGUgZmlsZSBpcyBkZWxldGVkIHRvbyBxdWlja2x5LgorCSAgICBObyBsb25nZXIgbmVlZCB0aGUgVk1TIHNwZWNpZmljIHByaW50aW5nIG1lbnUuCisJICAgIGdldGhvc3RuYW1lKCkgaXMgbm90IGF2YWlsYWJsZSB3aXRoIFZBWEMuCisJICAgIFRoZSBtYWtlZmlsZSB3YXMgbGFja2luZyBzZWxlY3Rpb24gb2YgdGhlIHRpbnktaHVnZSBmZWF0dXJlIHNldC4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgJ3ByaW50ZXhwcicgb3B0aW9uIGRlZmF1bHQuIEZpeCB0aGUgb3RoZXIgcHJvYmxlbXMgYW5kCisJICAgIHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbi4gIChab2x0YW4gQXJwYWRmZnkpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29zX3Ztcy50eHQsIHJ1bnRpbWUvbWVudS52aW0sIHNyYy9JTlNUQUxMdm1zLnR4dCwKKwkgICAgc3JjL01ha2Vfdm1zLm1tcywgc3JjL29wdGlvbi5jLCBzcmMvb3NfdW5peC5jLCBzcmMvb3Nfdm1zX2NvbmYuaAorCitQYXRjaCA2LjAuMDI4CitQcm9ibGVtOiAgICBDYW4ndCBjb21waWxlIHdpdGhvdXQgK3ZpcnR1YWxlZGl0IGFuZCB3aXRoICt2aXN1YWxleHRyYS4gKEdlemEKKwkgICAgTGFrbmVyKQorU29sdXRpb246ICAgQWRkIGFuICNpZmRlZiBmb3IgK3ZpcnR1YWxlZGl0LgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4wLjAyOQorUHJvYmxlbTogICAgV2hlbiBtYWtpbmcgYSBjaGFuZ2UgaW4gbGluZSAxLCB0aGVuIGluIGxpbmUgMiBhbmQgdGhlbiBkZWxldGluZworCSAgICBsaW5lIDEsIHVuZG8gaW5mbyBjb3VsZCBiZSB3cm9uZy4gT25seSB3aGVuIHRoZSBjaGFuZ2VzIGFyZSB1bmRvbmUKKwkgICAgYXQgb25jZS4gKEdlcmhhcmQgSG9jaGhvbHplcikKK1NvbHV0aW9uOiAgIFdoZW4gbm90IHNhdmluZyBhIGxpbmUgZm9yIHVuZG8gYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSBkb25lCisJICAgIGJlZm9yZSwgcmVtZW1iZXIgZm9yIHdoaWNoIGVudHJ5IHRoZSBsYXN0IGxpbmUgbXVzdCBiZSBjb21wdXRlZC4KKwkgICAgQWRkZWQgdWVfZ2V0Ym90X2VudHJ5IHBvaW50ZXIgZm9yIHRoaXMuICBXaGVuIHRoZSBudW1iZXIgb2YgbGluZXMKKwkgICAgY2hhbmdlcywgYWRqdXN0IHRoZSBwb3NpdGlvbiBvZiBuZXdlciB1bmRvIGVudHJpZXMuCitGaWxlczoJICAgIHNyYy9zdHJ1Y3RzLmgsIHNyYy91bmRvLmMKKworUGF0Y2ggNi4wLjAzMAorUHJvYmxlbTogICAgVXNpbmcgIjpzb3VyY2UhIGZpbGUiIGRvZXNuJ3Qgd29yayBpbnNpZGUgYSBsb29wIG9yIGFmdGVyCisJICAgICI6YXJnZG8iLiAoUGF2b2wgSnVoYXMpCitTb2x1dGlvbjogICBFeGVjdXRlIHRoZSBjb21tYW5kcyBpbiB0aGUgZmlsZSByaWdodCBhd2F5LCBkbyBub3QgbGV0IHRoZSBtYWluCisJICAgIGxvb3AgZG8gaXQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2dldGNoYXIuYywgc3JjL2dsb2JhbHMuaCwKKwkgICAgc3JjL3Byb3RvL2V4X2RvY21kLnBybywgc3JjL3Byb3RvL2dldGNoYXIucHJvCisKK1BhdGNoIDYuMC4wMzEKK1Byb2JsZW06ICAgIE5leHRzdGVwIGRvZXNuJ3QgaGF2ZSBzZXRlbnYoKSBvciBwdXRlbnYoKS4gIChKb2huIEJlcHB1KQorU29sdXRpb246ICAgTW92ZSBwdXRlbnYoKSBmcm9tIHB0eS5jIHRvIG1pc2MyLmMKK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMsIHNyYy9wdHkuYworCitQYXRjaCA2LjAuMDMyCitQcm9ibGVtOiAgICBXaGVuIGNoYW5naW5nIGEgc2V0dGluZyB0aGF0IGFmZmVjdHMgYWxsIGZvbGRzLCB0aGV5IGFyZSBub3QKKwkgICAgZGlzcGxheWVkIGltbWVkaWF0ZWx5LgorU29sdXRpb246ICAgU2V0IHRoZSByZWRyYXcgZmxhZyBpbiBmb2xkVXBkYXRlQWxsKCkuCitGaWxlczoJICAgIHNyYy9mb2xkLmMKKworUGF0Y2ggNi4wLjAzMworUHJvYmxlbTogICAgVXNpbmcgJ3dpbGRtZW51JyBvbiBNUy1XaW5kb3dzLCBmaWxlIG5hbWVzIHRoYXQgaW5jbHVkZSBhIHNwYWNlCisJICAgIGFyZSBvbmx5IGRpc3BsYXllZCBzdGFydGluZyB3aXRoIHRoYXQgc3BhY2UuIChYaWUgWXVoZW5nKQorU29sdXRpb246ICAgRG9uJ3QgcmVjb2duaXplIGEgYmFja3NsYXNoIGJlZm9yZSBhIHNwYWNlIGFzIGEgcGF0aCBzZXBhcmF0b3IuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjAuMDM0CitQcm9ibGVtOiAgICBDYWxsaW5nIHNlYXJjaHBhaXIoKSB3aXRoIHRocmVlIGFyZ3VtZW50cyBjb3VsZCByZXN1bHQgaW4gYSBjcmFzaAorCSAgICBvciBzdHJhbmdlIGVycm9yIG1lc3NhZ2UuIChLYWxsZSBCam9ya2xpZCkKK1NvbHV0aW9uOiAgIERvbid0IHVzZSB0aGUgZmlmdGggYXJndW1lbnQgd2hlbiB0aGVyZSBpcyBubyBmb3VydGggYXJndW1lbnQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjAzNQorUHJvYmxlbTogICAgVGhlIG1lbnUgaXRlbSBFZGl0L0dsb2JhbF9TZXR0aW5ncy9Ub2dnbGVfVG9vbGJhciBkb2Vzbid0IHdvcmsKKwkgICAgd2hlbiAnaWdub3JlY2FzZScgaXMgc2V0LiAoQWxsZW4gQ2FzdGFiYW4pCitTb2x1dGlvbjogICBBbHdheXMgbWF0Y2ggY2FzZSB3aGVuIGNoZWNraW5nIGlmIGEgZmxhZyBpcyBhbHJlYWR5IHByZXNlbnQgaW4KKwkgICAgJ2d1aW9wdGlvbnMnLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMC4wMzYKK1Byb2JsZW06ICAgIE9TLzIsIE1TLURPUyBhbmQgTVMtV2luZG93czogVXNpbmcgYSBwYXRoIHRoYXQgc3RhcnRzIHdpdGggYQorCSAgICBzbGFzaCBpbiAndGFncycgZG9lc24ndCB3b3JrIGFzIGV4cGVjdGVkLiAoTWF0aGlhcyBLb2VocmVyCitTb2x1dGlvbjogICBPbmx5IHVzZSB0aGUgZHJpdmUsIG5vdCB0aGUgd2hvbGUgcGF0aCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisJICAgIEFsc28gbWFrZSBpdCB3b3JrIGZvciAiYzpkaXIvZmlsZSIuCitGaWxlczoJICAgIHNyYy9taXNjMi5jCisKK1BhdGNoIDYuMC4wMzcKK1Byb2JsZW06ICAgIFdoZW4gdGhlIHVzZXIgaGFzIHNldCAiZGlkX2luc3RhbGxfc3ludGF4X21lbnUiIHRvIGF2b2lkIHRoZQorCSAgICBkZWZhdWx0IFN5bnRheCBtZW51IGl0IHN0aWxsIGFwcGVhcnMuIChWaXJnaWxpbykKK1NvbHV0aW9uOiAgIERvbid0IGFkZCB0aGUgdGhyZWUgZGVmYXVsdCBpdGVtcyB3aGVuICJkaWRfaW5zdGFsbF9zeW50YXhfbWVudSIKKwkgICAgaXMgc2V0LgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMC4wMzgKK1Byb2JsZW06ICAgIFdoZW4gJ3NlbGVjdGlvbicgaXMgImV4Y2x1c2l2ZSIsIGRlbGV0aW5nIGEgYmxvY2sgb2YgdGV4dCBhdCB0aGUKKwkgICAgZW5kIG9mIGEgbGluZSBjYW4gbGVhdmUgdGhlIGN1cnNvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZS4KK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIGN1cnNvciBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4wMzkKK1Byb2JsZW06ICAgICJnUCIgbGVhdmVzIHRoZSBjdXJzb3IgaW4gdGhlIHdyb25nIHBvc2l0aW9uIHdoZW4gJ3ZpcnR1YWxlZGl0JyBpcworCSAgICB1c2VkLiAgVXNpbmcgImMiIGluIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSBsZWF2ZXMgdGhlIGN1cnNvciBpbiBhCisJICAgIHN0cmFuZ2UgcG9zaXRpb24uCitTb2x1dGlvbjogICBGb3IgImdQIiByZXNldCB0aGUgImNvbGFkZCIgZmllbGQgZm9yIHRoZSAnXSBtYXJrLiAgRm9yICJjIiBsZWF2ZQorCSAgICB0aGUgY3Vyc29yIG9uIHRoZSBsYXN0IGluc2VydGVkIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4wNDAKK1Byb2JsZW06ICAgIFdoZW4gJ2ZpbGVlbmNvZGluZycgaXMgaW52YWxpZCBhbmQgd3JpdGluZyBmYWlscyBiZWNhdXNlIG9mCisJICAgIHRoaXMsIHRoZSBvcmlnaW5hbCBmaWxlIGlzIGdvbmUuIChFcmljIENhcmxpZXIpCitTb2x1dGlvbjogICBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmaWxlIGZyb20gdGhlIGJhY2t1cC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4wNDEKK1Byb2JsZW06ICAgIFVzaW5nICI6bGFuZ3VhZ2UgbWVzc2FnZXMgZW4iIHdoZW4gTENfTUVTU0FHRVMgaXMgdW5kZWZpbmVkCisJICAgIHJlc3VsdHMgaW4gc2V0dGluZyBMQ19DVFlQRS4gKEVyaWMgQ2FybGllcikKK1NvbHV0aW9uOiAgIFNldCAkTENfTUVTU0FHRVMgaW5zdGVhZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4wLjA0MgorUHJvYmxlbTogICAgIjpta3Nlc3Npb24iIGNhbid0IGhhbmRsZSBmaWxlIG5hbWVzIHdpdGggYSBzcGFjZS4KK1NvbHV0aW9uOiAgIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lcyB3aXRoIGEgYmFja3NsYXNoLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjAuMDQzCitQcm9ibGVtOiAgICBQYXRjaCA2LjAuMDQxIHdhcyB3cm9uZy4KK1NvbHV0aW9uOiAgIFVzZSBtY2hfZ2V0ZW52KCkgaW5zdGVhZCBvZiB2aW1fZ2V0ZW52KCkuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMC4wNDQKK1Byb2JsZW06ICAgIFVzaW5nIGEgImNvbnRhaW5lZGluIiBsaXN0IGZvciBhIHN5bnRheCBpdGVtIGRvZXNuJ3Qgd29yayBmb3IgYW4KKwkgICAgaXRlbSB0aGF0IGRvZXNuJ3QgaGF2ZSBhICJjb250YWlucyIgYXJndW1lbnQuICBBbHNvLCAiY29udGFpbmVkaW4iCisJICAgIGRvZXNuJ3QgaWdub3JlIGEgdHJhbnNwYXJlbnQgaXRlbS4gKFRpbW8gRnJlbmF5KQorU29sdXRpb246ICAgV2hlbiB0aGVyZSBpcyBhICJjb250YWluZWRpbiIgYXJndW1lbnQgc29tZXdoZXJlLCBhbHdheXMgY2hlY2sgZm9yCisJICAgIGNvbnRhaW5lZCBpdGVtcy4gIERvbid0IGNoZWNrIGZvciB0aGUgdHJhbnNwYXJlbnQgaXRlbSBidXQgdGhlCisJICAgIGl0ZW0gaXQncyBjb250YWluZWQgaW4uCitGaWxlczoJICAgIHNyYy9zdHJ1Y3RzLmgsIHNyYy9zeW50YXguYworCitQYXRjaCA2LjAuMDQ1CitQcm9ibGVtOiAgICBBZnRlciBjcmVhdGluZyBhIGZvbGQgd2l0aCBhIFZpc3VhbCBzZWxlY3Rpb24sIGFub3RoZXIgd2luZG93CisJICAgIHdpdGggdGhlIHNhbWUgYnVmZmVyIHN0aWxsIGhhcyBpbnZlcnRlZCB0ZXh0LiAoU2FtaSBTYWxvbmVuKQorU29sdXRpb246ICAgUmVkcmF3IHRoZSBpbnZlcnRlZCB0ZXh0LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjA0NgorUHJvYmxlbTogICAgV2hlbiBnZXRybGltaXQoKSByZXR1cm5zIGFuIDggYnl0ZSBudW1iZXIgdGhlIGNoZWNrIGZvciBydW5uaW5nCisJICAgIG91dCBvZiBzdGFjayBtYXkgZmFpbC4gKEFudGhvbnkgTWVpamVyKQorU29sdXRpb246ICAgU2tpcCB0aGUgc3RhY2sgY2hlY2sgaWYgdGhlIGxpbWl0IGRvZXNuJ3QgZml0IGluIGEgbG9uZy4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlnLmguaW4sIHNyYy9jb25maWd1cmUuaW4sCisJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4wLjA0NworUHJvYmxlbTogICAgVXNpbmcgYSByZWdleHAgd2l0aCAiXChcKSIgaW5zaWRlIGEgIlwlW10iIGl0ZW0gY2F1c2VzIGEgY3Jhc2guCisJICAgIChTYW11ZWwgTGFjYXMpCitTb2x1dGlvbjogICBEb24ndCBhbGxvdyBuZXN0ZWQgYXRvbXMgaW5zaWRlICJcJVtdIi4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMC4wNDgKK1Byb2JsZW06ICAgIFdpbjMyOiBJbiB0aGUgY29uc29sZSB0aGUgbW91c2UgZG9lc24ndCBhbHdheXMgd29yayBjb3JyZWN0bHkuCisJICAgIFNvbWV0aW1lcyBhZnRlciBnZXR0aW5nIGZvY3VzIGEgbW91c2UgbW92ZW1lbnQgaXMgaW50ZXJwcmV0ZWQgbGlrZQorCSAgICBhIGJ1dHRvbiBjbGljay4KK1NvbHV0aW9uOiAgIFVzZSBhIGRpZmZlcmVudCBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIG51bWJlciBvZiBtb3VzZSBidXR0b25zLgorCSAgICBBdm9pZCByZWNvZ25pemluZyBhIGJ1dHRvbiBwcmVzcyBmcm9tIHVuZGVmaW5lZCBiaXRzLiAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMC4wNDkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgZXZpbSB0aGUgaW50cm8gc2NyZWVuIGlzIG1pc2xlYWRpbmcuIChBZHJpYW4gTmFnbGUpCitTb2x1dGlvbjogICBNZW50aW9uIHdoZXRoZXIgJ2luc2VydG1vZGUnIGlzIHNldCBhbmQgdGhlIG1lbnVzIHRvIGJlIHVzZWQuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0sIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNi4wLjA1MAorUHJvYmxlbTogICAgVVRGLTg6ICJ2aXciIGRvZXNuJ3QgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycyBiZWZvcmUgdGhlCisJICAgIGN1cnNvci4gKEJlcnRpbG8gV2VubmVyZ3JlbikKK1NvbHV0aW9uOiAgIFVzZSBkZWNfY3Vyc29yKCkgaW5zdGVhZCBvZiBkZWNyZW1lbnRpbmcgdGhlIGNvbHVtbiBudW1iZXIuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjAuMDUxCitQcm9ibGVtOiAgICBVVEYtODogVXNpbmcgQ1RSTC1SIG9uIHRoZSBjb21tYW5kIGxpbmUgZG9lc24ndCBpbnNlcnQgY29tcG9zaW5nCisJICAgIGNoYXJhY3RlcnMuIChSb24gQWFyb24pCitTb2x1dGlvbjogICBBbHNvIGluY2x1ZGUgdGhlIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGFuZCBmaXggcmVkcmF3aW5nIHRoZW0uCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jLCBzcmMvb3BzLmMKKworUGF0Y2ggNi4wLjA1MgorUHJvYmxlbTogICAgVGhlIGNoZWNrIGZvciBybGltX3QgaW4gcGF0Y2ggNi4wLjA0NiBkb2VzIG5vdCB3b3JrIG9uIHNvbWUKKwkgICAgc3lzdGVtcy4gKFpkZW5layBTZWtlcmEpCitTb2x1dGlvbjogICBBbHNvIGxvb2sgaW4gc3lzL3Jlc291cmNlLmggZm9yIHJsaW1fdC4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMC4wNTMgKGV4dHJhKQorUHJvYmxlbTogICAgVmFyaW91cyBwcm9ibGVtcyB3aXRoIFFOWC4KK1NvbHV0aW9uOiAgIE1pbm9yIGZpeCBmb3IgY29uZmlndXJlLiAgU3dpdGNoIG9uIHRlcm1pbmFsIGNsaXBib2FyZCBzdXBwb3J0IGluCisJICAgIG1haW4uYy4gIEZpeCAicHRlcm0iIG1vdXNlIHN1cHBvcnQuICBvc19xbnguYyBkaWRuJ3QgYnVpbGQgd2l0aG91dAorCSAgICBwaG90b24uIChKdWxpYW4gS2lucmFpZCkKK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvZ3VpX3Bob3Rvbi5jLAorCSAgICBzcmMvbWFpbi5jLCBzcmMvbWlzYzIuYywgc3JjL29wdGlvbi5oLCBzcmMvb3NfcW54LmMsIHNyYy9vc19xbnguaCwKKwkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMC4wNTQKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgbXN3aW4udmltLCBDVFJMLVYgcGFzdGVzIGEgYmxvY2sgb2YgdGV4dCBsaWtlIGl0IGlzCisJICAgIG5vcm1hbCB0ZXh0LiAgVXNpbmcgQ1RSTC1WIGluIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSBsZWF2ZXMgIngiCisJICAgIGNoYXJhY3RlcnMgYmVoaW5kLgorU29sdXRpb246ICAgTWFrZSBDVFJMLVYgd29yayBhcyBpdCBzaG91bGQuICBEbyB0aGUgc2FtZSBmb3IgdGhlIFBhc3RlIG1lbnUKKwkgICAgZW50cmllcy4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbSwgcnVudGltZS9tc3dpbi52aW0KKworUGF0Y2ggNi4wLjA1NQorUHJvYmxlbTogICAgR1RLOiBUaGUgc2VsZWN0aW9uIGlzbid0IGNvcGllZCB0aGUgZmlyc3QgdGltZS4KK1NvbHV0aW9uOiAgIE93biB0aGUgc2VsZWN0aW9uIGF0IHRoZSByaWdodCBtb21lbnQuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMC4wNTYKK1Byb2JsZW06ICAgIFVzaW5nICJDVFJMLU8gY3ciIGluIEluc2VydCBtb2RlIHJlc3VsdHMgaW4gYSBuZXN0ZWQgSW5zZXJ0IG1vZGUuCisJICAgIDxFc2M+IGRvZXNuJ3QgbGVhdmUgSW5zZXJ0IG1vZGUgdGhlbi4KK1NvbHV0aW9uOiAgIE9ubHkgdXNlIG5lc3RlZCBJbnNlcnQgbW9kZSB3aGVuICdpbnNlcnRtb2RlJyBpcyBzZXQgb3Igd2hlbiBhCisJICAgIG1hcHBpbmcgaXMgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4wNTcKK1Byb2JsZW06ICAgIFVzaW5nICI6d2luY21kIGd9IiBpbiBhIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yay4gIChHYXJ5IEhvbGxvd2F5KQorU29sdXRpb246ICAgRXhlY3V0ZSB0aGUgY29tbWFuZCBkaXJlY3RseSwgaW5zdGVhZCBvZiBwdXR0aW5nIGl0IGluIHRoZQorCSAgICB0eXBlYWhlYWQgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by9ub3JtYWwucHJvLCBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4wLjA1OAorUHJvYmxlbTogICAgV2hlbiBhIEN1cnNvcmhvbGQgYXV0b2NvbW1hbmQgbW92ZWQgdGhlIGN1cnNvciwgdGhlIHJ1bGVyIHdhc24ndAorCSAgICB1cGRhdGVkLiAoQm9oZGFuIFZsYXN5dWspCitTb2x1dGlvbjogICBVcGRhdGUgdGhlIHJ1bGVyIGFmdGVyIGV4ZWN1dGluZyB0aGUgYXV0b2NvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4wLjA1OQorUHJvYmxlbTogICAgSGlnaGxpZ2h0aW5nIGZvciAnaGxzZWFyY2gnIGlzbid0IHZpc2libGUgaW4gbGluZXMgdGhhdCBhcmUKKwkgICAgaGlnaGxpZ2h0ZWQgZm9yIGRpZmYgaGlnaGxpZ2h0aW5nLiAgKEdhcnkgSG9sbG93YXkpCitTb2x1dGlvbjogICBMZXQgJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgb3ZlcnJ1bGUgZGlmZiBoaWdobGlnaHRpbmcuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjAuMDYwCitQcm9ibGVtOiAgICBNb3RpZjogV2hlbiB0aGUgdG9vbHRpcCBpcyB0byBiZSBwb3BwZWQgdXAsIFZpbSBjcmFzaGVzLgorCSAgICAoR2FyeSBIb2xsb3dheSkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIE5VTEwgcmV0dXJuIHZhbHVlIGZyb20gZ3VpX21vdGlmX2ZvbnRzZXQyZm9udGxpc3QoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9iZXZhbC5jCisKK1BhdGNoIDYuMC4wNjEKK1Byb2JsZW06ICAgIFRoZSB0b29sYmFyIGJ1dHRvbnMgdG8gbG9hZCBhbmQgc2F2ZSBhIHNlc3Npb24gZG8gbm90IGNvcnJlY3RseQorCSAgICB1c2Ugdjp0aGlzX3Nlc3Npb24uCitTb2x1dGlvbjogICBDaGVjayBmb3Igdjp0aGlzX3Nlc3Npb24gdG8gYmUgZW1wdHkgaW5zdGVhZCBvZiBleGlzdGluZy4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjAuMDYyCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuICd2ZXJib3NlJyBpcyA+IDMgYW5kIHVzaW5nICI6c2hlbGwiLiAoWWVnYXBwYW4KKwkgICAgTGFrc2htYW5hbikKK1NvbHV0aW9uOiAgIEF2b2lkIGdpdmluZyBhIE5VTEwgcG9pbnRlciB0byBwcmludGYoKS4gIEFsc28gb3V0cHV0IGEgbmV3bGluZQorCSAgICBhbmQgc3dpdGNoIHRoZSBjdXJzb3Igb24uCitGaWxlczoJICAgIHNyYy9taXNjMi5jCisKK1BhdGNoIDYuMC4wNjMKK1Byb2JsZW06ICAgIFdoZW4gJ2Nwb3B0aW9ucycgaW5jbHVkZXMgIiQiLCB1c2luZyAiY3ciIHRvIHR5cGUgYSAnKScgb24gdG9wIG9mCisJICAgIHRoZSAiJCIgZG9lc24ndCB1cGRhdGUgc3ludGF4IGhpZ2hsaWdodGluZyBhZnRlciBpdC4KK1NvbHV0aW9uOiAgIFN0b3AgZGlzcGxheWluZyB0aGUgIiQiIHdoZW4gdHlwaW5nIGEgJyknIGluIGl0cyBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMC4wNjQgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIE5TSVMgaW5zdGFsbCBzY3JpcHQgZG9lc24ndCB3b3JrIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgTlNJUy4KKwkgICAgVGhlIGRpZmYgZmVhdHVyZSBkb2Vzbid0IHdvcmsgd2hlbiB0aGVyZSBpc24ndCBhIGdvb2QgZGlmZi5leGUgb24KKwkgICAgdGhlIHN5c3RlbS4KK1NvbHV0aW9uOiAgIFJlcGxhY2UgdGhlIEdldFBhcmVudERpciBpbnN0cnVjdGlvbiBieSBhIHVzZXIgZnVuY3Rpb24uCisJICAgIEZpeCBhIGZldyBjb3NtZXRpYyBwcm9ibGVtcy4gIFVzZSBkZWZpbmVkIGNvbnN0YW50cyBmb3IgdGhlCisJICAgIHZlcnNpb24gbnVtYmVyLCBzbyB0aGF0IGl0J3MgZGVmaW5lZCBpbiBvbmUgcGxhY2Ugb25seS4KKwkgICAgT25seSBhY2NlcHQgdGhlIGluc3RhbGwgZGlyZWN0b3J5IHdoZW4gaXQgZW5kcyBpbiAidmltIi4KKwkgICAgKEVkdWFyZG8gRmVybmFuZGV6KQorCSAgICBBZGQgYSBkaWZmLmV4ZSBhbmQgdXNlIGl0IGZyb20gdGhlIGRlZmF1bHQgX3ZpbXJjLgorRmlsZXM6CSAgICBuc2lzL2d2aW0ubnNpLCBuc2lzL1JFQURNRS50eHQsIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNi4wLjA2NQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOm5vcm1hbCIgaW4gJ2luZGVudGV4cHInIGl0IG1heSB1c2UgcmVkbyBjaGFyYWN0ZXJzCisJICAgIGJlZm9yZSBpdHMgYXJndW1lbnQuICAoTmVpbCBCaXJkKQorU29sdXRpb246ICAgU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc3R1ZmYgYnVmZmVyIGluIGV4X25vcm1hbCgpLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2dldGNoYXIuYywgc3JjL2dsb2JhbHMuaCwgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjAuMDY2CitQcm9ibGVtOiAgICBTb21ldGltZXMgdW5kbyBmb3Igb25lIGNvbW1hbmQgaXMgc3BsaXQgaW50byB0d28gdW5kbyBhY3Rpb25zLgorCSAgICAoSGFsaW0gU2FsbWFuKQorU29sdXRpb246ICAgRG9uJ3Qgc2V0IHRoZSB1bmRvLXN5bmNlZCBmbGFnIHdoZW4gcmV1c2luZyBhIGxpbmUgdGhhdCB3YXMKKwkgICAgYWxyZWFkeSBzYXZlZCBmb3IgdW5kby4KK0ZpbGVzOgkgICAgc3JjL3VuZG8uYworCitQYXRjaCA2LjAuMDY3CitQcm9ibGVtOiAgICBpZl94Y21kc3J2LmMgZG9lc24ndCBjb21waWxlIG9uIHN5c3RlbXMgd2hlcmUgZmRfc2V0IGlzbid0IGRlZmluZWQKKwkgICAgaW4gdGhlIHVzdWFsIGhlYWRlciBmaWxlIChlLmcuLCBBSVgpLiAoTWFyayBXYWdnb25lcikKK1NvbHV0aW9uOiAgIEluY2x1ZGUgc3lzL3NlbGVjdC5oIGluIGlmX3hjbWRzcnYuYyBmb3Igc3lzdGVtcyB0aGF0IGhhdmUgaXQuCitGaWxlczoJICAgIHNyYy9pZl94Y21kc3J2LmMKKworUGF0Y2ggNi4wLjA2OAorUHJvYmxlbTogICAgV2hlbiBmb3JtYXR0aW5nIGEgVmlzdWFsbHkgc2VsZWN0ZWQgYXJlYSB3aXRoICJncSIgYW5kIHRoZSBudW1iZXIKKwkgICAgb2YgbGluZXMgaW5jcmVhc2VzIHRoZSBsYXN0IGxpbmUgbWF5IG5vdCBiZSByZWRyYXduIGNvcnJlY3RseS4KKwkgICAgKFllZ2FwcGFuIExha3NobWFuYW4pCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBhcmVhIHRvIGJlIHJlZHJhd24gZm9yIGluc2VydGVkL2RlbGV0ZWQgbGluZXMuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMDY5CitQcm9ibGVtOiAgICBVc2luZyAiSyIgb24gYSB3b3JkIHRoYXQgaW5jbHVkZXMgYSAiISIgY2F1c2VzIGEgIk5vIHByZXZpb3VzCisJICAgIGNvbW1hbmQiIGVycm9yLCBiZWNhdXNlIHRoZSAiISIgaXMgZXhwYW5kZWQuIChDcmFpZyBKZWZmcmllcykKK1NvbHV0aW9uOiAgIFB1dCBhIGJhY2tzbGFzaCBiZWZvcmUgdGhlICIhIi4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4wNzAKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgZXJyb3IgbWVzc2FnZSBmb3IgYSBmYWlsZWQgZHluYW1pYyBsaW5raW5nIG9mIGEgUGVybCwKKwkgICAgUnVieSwgVGNsIGFuZCBQeXRob24gbGlicmFyeSBpcyB1bmNsZWFyIGFib3V0IHdoYXQgd2VudCB3cm9uZy4KK1NvbHV0aW9uOiAgIEdpdmUgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb3IgZnVuY3Rpb24gdGhhdCBjb3VsZCBub3QgYmUgbG9hZGVkLgorCSAgICBBbHNvIGZvciB0aGUgaWNvbnYgYW5kIGdldHRleHQgbGlicmFyaWVzIHdoZW4gJ3ZlcmJvc2UnIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2lmX3BlcmwueHMsIHNyYy9pZl9weXRob24uYywgc3JjL2lmX3J1YnkuYywKKwkgICAgc3JjL2lmX3RjbC5jLCBzcmMvbWJ5dGUuYywgc3JjL29zX3dpbjMyLmMsIHNyYy9wcm90by9pZl9wZXJsLnBybywKKwkgICAgc3JjL3Byb3RvL2lmX3B5dGhvbi5wcm8sIHNyYy9wcm90by9pZl9ydWJ5LnBybywKKwkgICAgc3JjL3Byb3RvL2lmX3RjbC5wcm8sIHNyYy9wcm90by9tYnl0ZS5wcm8KKworUGF0Y2ggNi4wLjA3MQorUHJvYmxlbTogICAgVGhlICJpcmlzLWFuc2kiIGJ1aWx0aW4gdGVybWNhcCBpc24ndCB2ZXJ5IGdvb2QuCitTb2x1dGlvbjogICBGaXggdGhlIHdyb25nIGVudHJpZXMuIChEYXZpZCBIYXJyaXNvbikKK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA2LjAuMDcyCitQcm9ibGVtOiAgICBXaGVuICdsYXp5cmVkcmF3JyBpcyBzZXQsIGEgbWFwcGluZyB0aGF0IHN0b3BzIFZpc3VhbCBtb2RlLCBtb3ZlcworCSAgICB0aGUgY3Vyc29yIGFuZCBzdGFydHMgVmlzdWFsIG1vZGUgYWdhaW4gY2F1c2VzIGEgcmVkcmF3IHByb2JsZW0uCisJICAgIChCcmlhbiBTaWx2ZXJtYW4pCitTb2x1dGlvbjogICBSZWRyYXcgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IFZpc3VhbCBhcmVhIHdoZW4gbmVjZXNzYXJ5LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjAuMDczIChleHRyYSkKK1Byb2JsZW06ICAgIERKR1BQOiBXaGVuIHVzaW5nIENUUkwtWiB0byBzdGFydCBhIHNoZWxsLCB0aGUgcHJvbXB0IGlzIGhhbGZ3YXkKKwkgICAgdGhlIHRleHQuIChWb2xrZXIgS2llZmVsKQorU29sdXRpb246ICAgUG9zaXRpb24gdGhlIHN5c3RlbSBjdXJzb3IgYmVmb3JlIHN0YXJ0aW5nIHRoZSBzaGVsbC4KK0ZpbGVzOgkgICAgc3JjL29zX21zZG9zLmMKKworUGF0Y2ggNi4wLjA3NAorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiJiIgaW4gYSBzdWJzdGl0dXRlIHN0cmluZyBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHdpdGgKKwkgICAgYSB0cmFpbGJ5dGUgMHg1YyBpcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCitTb2x1dGlvbjogICBSZWNvZ25pemUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGluc2lkZSB0aGUgIiYiIHBhcnQuIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjAuMDc1CitQcm9ibGVtOiAgICBXaGVuIGNsb3NpbmcgYSBob3Jpem9udGFsbHkgc3BsaXQgd2luZG93IHdoaWxlICdlYWRpcmVjdGlvbicgaXMKKwkgICAgImhvciIgYW5vdGhlciBob3Jpem9udGFsbHkgc3BsaXQgd2luZG93IGlzIHN0aWxsIHJlc2l6ZWQuIChBcm9uCisJICAgIEdyaWZmaXMpCitTb2x1dGlvbjogICBPbmx5IHJlc2l6ZSB3aW5kb3dzIGluIHRoZSBzYW1lIHRvcCBmcmFtZSBhcyB0aGUgd2luZG93IHRoYXQgaXMKKwkgICAgc3BsaXQgb3IgY2xvc2VkLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvcHJvdG8vd2luZG93LnBybywgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMC4wNzYKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIHdyb25nIHBvaW50ZXIgdHlwZSB3aGVuIGNvbXBpbGluZy4KK1NvbHV0aW9uOiAgIFVzZSBjaGFyIGluc3RlYWQgb2YgY2hhcl91IHBvaW50ZXIuCitGaWxlczoJICAgIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNi4wLjA3NworUHJvYmxlbTogICAgUGF0Y2ggNi4wLjA3NSB3YXMgaW5jb21wbGV0ZS4KK1NvbHV0aW9uOiAgIEZpeCBhbm90aGVyIGNhbGwgdG8gd2luX2VxdWFsKCkuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMDc4CitQcm9ibGVtOiAgICBVc2luZyAiZGF3IiBhdCB0aGUgZW5kIG9mIGEgbGluZSBvbiBhIHNpbmdsZS1jaGFyYWN0ZXIgd29yZCBkaWRuJ3QKKwkgICAgaW5jbHVkZSB0aGUgd2hpdGUgc3BhY2UgYmVmb3JlIGl0LiAgQXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpdAorCSAgICBkaWRuJ3Qgd29yayBhdCBhbGwuICAoR2F2aW4gU2luY2xhaXIpCitTb2x1dGlvbjogICBJbmNsdWRlIHRoZSB3aGl0ZSBzcGFjZSBiZWZvcmUgdGhlIHdvcmQuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjAuMDc5CitQcm9ibGVtOiAgICBXaGVuICJXIiBpcyBpbiAnY3BvcHRpb25zJyBhbmQgJ2JhY2t1cGNvcHknIGlzICJubyIgb3IgImF1dG8iLCBjYW4KKwkgICAgc3RpbGwgb3ZlcndyaXRlIGEgcmVhZC1vbmx5IGZpbGUsIGJlY2F1c2UgaXQncyByZW5hbWVkLiAoR2FyeQorCSAgICBIb2xsb3dheSkKK1NvbHV0aW9uOiAgIEFkZCBhIGNoZWNrIGZvciBhIHJlYWQtb25seSBmaWxlIGJlZm9yZSByZW5hbWluZyB0aGUgZmlsZSB0bworCSAgICBiZWNvbWUgdGhlIGJhY2t1cC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4wODAKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSBzZXNzaW9uIGZpbGUgdGhhdCBoYXMgdGhlIHNhbWUgZmlsZSBpbiB0d28gd2luZG93cywKKwkgICAgdGhlIGZpbGVpbmZvKCkgY2FsbCBpbiBkb19lY21kKCkgY2F1c2VzIGEgc2Nyb2xsIGFuZCBhIGhpdC1lbnRlcgorCSAgICBwcm9tcHQuIChSb2JlcnQgV2ViYikKK1NvbHV0aW9uOiAgIERvbid0IHNjcm9sbCB0aGlzIG1lc3NhZ2Ugd2hlbiAnc2hvcnRtZXNzJyBjb250YWlucyAnTycuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4wLjA4MQorUHJvYmxlbTogICAgQWZ0ZXIgdXNpbmcgIjpzYXZlYXMiIHRoZSBuZXcgYnVmZmVyIG5hbWUgaXMgYWRkZWQgdG8gdGhlIEJ1ZmZlcnMKKwkgICAgbWVudSB3aXRoIGEgd3JvbmcgbnVtYmVyLiAoQ2hhdWstTWVhbiBQcm91bSkKK1NvbHV0aW9uOiAgIFRyaWdnZXIgQnVmRmlsZVByZSBhbmQgQnVmRmlsZVBvc3QgZXZlbnRzIGZvciB0aGUgcmVuYW1lZCBidWZmZXIKKwkgICAgYW5kIEJ1ZkFkZCBmb3IgdGhlIG9sZCBuYW1lICh3aGljaCBpcyB3aXRoIGEgbmV3IGJ1ZmZlcikuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4wLjA4MgorUHJvYmxlbTogICAgV2hlbiBzd2FwcGluZyBzY3JlZW5zIGluIGFuIHh0ZXJtIGFuZCB0aGVyZSBpcyBhbiAoZXJyb3IpIG1lc3NhZ2UKKwkgICAgZnJvbSB0aGUgdmltcmMgc2NyaXB0LCB0aGUgc2hlbGwgcHJvbXB0IGlzIGFmdGVyIHRoZSBtZXNzYWdlLgorU29sdXRpb246ICAgT3V0cHV0IGEgbmV3bGluZSB3aGVuIHRoZXJlIHdhcyBvdXRwdXQgb24gdGhlIGFsdGVybmF0ZSBzY3JlZW4uCisJICAgIEFsc28gd2hlbiBzdGFydGluZyB0aGUgR1VJLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMC4wODMKK1Byb2JsZW06ICAgIEdUSzogV2hlbiBjb21waWxlZCB3aXRob3V0IG1lbnUgc3VwcG9ydCB0aGUgYnV0dG9ucyBpbiBhIGRpYWxvZworCSAgICBkb24ndCBoYXZlIGFueSB0ZXh0LiAoRXJpayBFZGVsbWFubikKK1NvbHV0aW9uOiAgIEFkZCB0aGUgdGV4dCBhbHNvIHdoZW4gR1RLX1VTRV9BQ0NFTCBpc24ndCBkZWZpbmVkLiAgQW5kIGRlZmluZQorCSAgICBHVEtfVVNFX0FDQ0VMIGFsc28gd2hlbiBub3QgdXNpbmcgbWVudXMuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMKKworUGF0Y2ggNi4wLjA4NAorUHJvYmxlbTogICAgVVRGLTg6IGEgInIiIGNvbW1hbmQgd2l0aCBhbiBhcmd1bWVudCB0aGF0IGlzIGEga2V5bWFwIGZvciBhCisJICAgIGNoYXJhY3RlciB3aXRoIGEgY29tcG9zaW5nIGNoYXJhY3RlciBjYW4ndCBiZSByZXBlYXRlZCB3aXRoICIuIi4KKwkgICAgKFJhcGhhZWwgRmlua2VsKQorU29sdXRpb246ICAgQWRkIHRoZSBjb21wb3NpbmcgY2hhcmFjdGVycyB0byB0aGUgcmVkbyBidWZmZXIuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMDg1CitQcm9ibGVtOiAgICBXaGVuICdtb3VzZWZvY3VzJyBpcyBzZXQsIHVzaW5nICJzIiB0byBnbyB0byBJbnNlcnQgbW9kZSBhbmQgdGhlbgorCSAgICBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIgdG8gYW5vdGhlciB3aW5kb3cgc3RvcHMgSW5zZXJ0IG1vZGUsCisJICAgIHdoaWxlIHRoaXMgZG9lc24ndCBoYXBwZW4gd2l0aCAiYSIgb3IgImkiLiAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBSZXNldCBmaW5pc2hfb3AgYmVmb3JlIGNhbGxpbmcgZWRpdCgpLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjA4NgorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiZ3UiIHRoZSBtZXNzYWdlIHNheXMgIn5lZCIuCitTb2x1dGlvbjogICBNYWtlIHRoZSBtZXNzYWdlIHNheSAiY2hhbmdlZCIuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMDg3IChsYW5nKQorUHJvYmxlbTogICAgTWVzc2FnZSB0cmFuc2xhdGlvbnMgYXJlIGluY29ycmVjdCwgd2hpY2ggbWF5IGNhdXNlIGEgY3Jhc2guCisJICAgIChQZXRlciBGaWd1cmEpCisJICAgIFRoZSBUdXJraXNoIHRyYW5zbGF0aW9ucyBuZWVkZWQgbW9yZSB3b3JrIGFuZCB0aGUgbWFpbnRhaW5lcgorCSAgICBkaWRuJ3QgaGF2ZSB0aW1lLgorU29sdXRpb246ICAgRml4IG9yZGVyIG9mIHByaW50ZiBhcmd1bWVudHMuICBSZW1vdmUgJTIkZCBjb25zdHJ1Y3RzLgorCSAgICBBZGQgIi12IiB0byBtc2dmbXQgdG8gZ2V0IGEgd2FybmluZyBmb3Igd3JvbmcgdHJhbnNsYXRpb25zLgorCSAgICBEb24ndCBpbnN0YWxsIHRoZSBUdXJraXNoIHRyYW5zbGF0aW9ucyBmb3Igbm93LgorCSAgICBVcGRhdGUgYSBmZXcgbW9yZSB0cmFuc2xhdGlvbnMuCitGaWxlczoJICAgIHNyYy9wby9NYWtlZmlsZSwgc3JjL3BvL2FmLnBvLCBzcmMvcG8vY3MucG8sIHNyYy9wby9jcy5jcDEyNTAucG8sCisJICAgIHNyYy9wby9kZS5wbywgc3JjL3BvL2VzLnBvLCBzcmMvcG8vZnIucG8sIHNyYy9wby9pdC5wbywKKwkgICAgc3JjL3BvL2phLnBvLCBzcmMvcG8vamEuc2ppcy5wbywgc3JjL3BvL2tvLnBvLCBzcmMvcG8vcGwucG8sCisJICAgIHNyYy9wby9zay5wbywgc3JjL3BvL3VrLnBvLCBzcmMvcG8vemhfQ04uVVRGLTgucG8sCisJICAgIHNyYy9wby96aF9DTi5jcDkzNi5wbywgc3JjL3BvL3poX0NOLnBvLCBzcmMvcG8vemhfVFcucG8KKworUGF0Y2ggNi4wLjA4OAorUHJvYmxlbTogICAgIi4iIGRvZXNuJ3Qgd29yayBhZnRlciB1c2luZyAicngiIGluIFZpc3VhbCBtb2RlLiAgKENoYXJsZXMKKwkgICAgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBBbHNvIHN0b3JlIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaW4gdGhlIHJlZG8gYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjA4OQorUHJvYmxlbTogICAgSW4gYSBDIGZpbGUsIHVzaW5nICI9PSIgdG8gYWxpZ24gYSBsaW5lIHN0YXJ0aW5nIHdpdGggIiogICIgYWZ0ZXIKKwkgICAgYSBsaW5lIHdpdGggIiogLSIgaW5kZW50cyBvbmUgc3BhY2UgdG9vIGZldy4gIChQaWV0IERlbHBvcnQpCitTb2x1dGlvbjogICBBbGlnbiB3aXRoIHRoZSBwcmV2aW91cyBsaW5lIGlmIHRoZSBjb21tZW50LXN0YXJ0LXN0cmluZyBtYXRjaGVzCisJICAgIHRoZXJlLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjAuMDkwCitQcm9ibGVtOiAgICBXaGVuIGEgd3JhcHBpbmcgbGluZSBkb2VzIG5vdCBmaXQgaW4gYSB3aW5kb3cgYW5kICdzY3JvbGxvZmYnIGlzCisJICAgIGJpZ2dlciB0aGFuIGhhbGYgdGhlIHdpbmRvdyBoZWlnaHQsIG1vdmluZyB0aGUgY3Vyc29yIGxlZnQgb3IKKwkgICAgcmlnaHQgY2F1c2VzIHRoZSBzY3JlZW4gdG8gZmxhc2ggYmFkbHkuIChMdWJvbWlyIEhvc3QpCitTb2x1dGlvbjogICBXaGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSB0byBzaG93ICdzY3JvbGxvZmYnIHNjcmVlbiBsaW5lcyBhbmQKKwkgICAgbmVhciB0aGUgZW5kIG9mIHRoZSBsaW5lLCBzaG93IHRoZSBlbmQgb2YgdGhlIGxpbmUuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4wLjA5MQorUHJvYmxlbTogICAgVXNpbmcgQ1RSTC1PIGluIEluc2VydCBtb2RlLCB3aGlsZSAndmlydHVhbGVkaXQnIGlzICJhbGwiIGFuZCB0aGUKKwkgICAgY3Vyc29yIGlzIGFmdGVyIHRoZSBlbmQtb2YtbGluZSwgbW92ZXMgdGhlIGN1cnNvciBsZWZ0LiAoWWVnYXBwYW4KKwkgICAgTGFrc2htYW5hbikKK1NvbHV0aW9uOiAgIEtlZXAgdGhlIGN1cnNvciBpbiB0aGUgc2FtZSBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjAuMDkyCitQcm9ibGVtOiAgICBUaGUgZXhwbG9yZXIgcGx1Z2luIGRvZXNuJ3QgaWdub3JlIGNhc2Ugb2YgJ3N1ZmZpeGVzJyBvbgorCSAgICBNUy1XaW5kb3dzLiAoTWlrZSBXaWxsaWFtcykKK1NvbHV0aW9uOiAgIE1hdGNoIG9yIGlnbm9yZSBjYXNlIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgT1MuCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbQorCitQYXRjaCA2LjAuMDkzCitQcm9ibGVtOiAgICBXaGVuIHRoZSBUY2wgbGlicmFyeSBjb3VsZG4ndCBiZSBsb2FkZWQgZHluYW1pY2FsbHksIGdldCBhbiBlcnJvcgorCSAgICBtZXNzYWdlIHdoZW4gY2xvc2luZyBhIGJ1ZmZlciBvciB3aW5kb3cuIChNdXJhb2thIFRhcm8pCitTb2x1dGlvbjogICBPbmx5IGZyZWUgc3RydWN0dXJlcyBpZiBhbHJlYWR5IHVzaW5nIHRoZSBUY2wgaW50ZXJwcmV0ZXIuCitGaWxlczoJICAgIHNyYy9pZl90Y2wuYworCitQYXRjaCA2LjAuMDk0CitQcm9ibGVtOiAgICBBdGhlbmE6IFdoZW4gY2xpY2tpbmcgaW4gdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIFZpbSBjcmFzaGVzLgorCSAgICAoUGF1bCBBY2tlcnN2aWxsZXIpCitTb2x1dGlvbjogICBVc2UgdGhlIHRodW1iIHNpemUgaW5zdGVhZCBvZiB0aGUgd2luZG93IHBvaW50ZXIgb2YgdGhlIHNjcm9sbGJhcgorCSAgICAod2hpY2ggaXMgTlVMTCkuIChEYXZpZCBIYXJyaXNvbikKKwkgICAgQWxzbyBhdm9pZCB0aGF0IHNjcm9sbGluZyBnb2VzIHRoZSB3cm9uZyB3YXkgaW4gYSBuYXJyb3cgd2luZG93LgorRmlsZXM6CSAgICBzcmMvZ3VpX2F0aGVuYS5jCisKK1BhdGNoIDYuMC4wOTUKK1Byb2JsZW06ICAgIFBlcmw6IERlbGV0aW5nIGxpbmVzIG1heSBsZWF2ZSB0aGUgY3Vyc29yIGJleW9uZCB0aGUgZW5kIG9mIHRoZQorCSAgICBmaWxlLgorU29sdXRpb246ICAgQ2hlY2sgdGhlIGN1cnNvciBwb3NpdGlvbiBhZnRlciBkZWxldGluZyBhIGxpbmUuIChTZXJndWVpKQorRmlsZXM6CSAgICBzcmMvaWZfcGVybC54cworCitQYXRjaCA2LjAuMDk2CitQcm9ibGVtOiAgICBXaGVuICI6c2F2ZWFzIGZuYW1lIiBmYWlscyBiZWNhdXNlIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCB0aGUKKwkgICAgZmlsZSBuYW1lIGlzIGNoYW5nZWQgYW55d2F5IGFuZCBhIGZvbGxvd2luZyAiOnciIHdpbGwgb3ZlcndyaXRlCisJICAgIHRoZSBmaWxlLiAoRXJpYyBDYXJsaWVyKQorU29sdXRpb246ICAgRG9uJ3QgY2hhbmdlIHRoZSBmaWxlIG5hbWUgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4wLjA5NworUHJvYmxlbTogICAgUmUtaW5kZW50aW5nIGluIEluc2VydCBtb2RlIHdpdGggQ1RSTC1GIG1heSBjYXVzZSBhIGNyYXNoIHdpdGggYQorCSAgICBtdWx0aS1ieXRlIGVuY29kaW5nLgorU29sdXRpb246ICAgQXZvaWQgdXNpbmcgYSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBzdGFydCBvZiBhIGxpbmUuIChTZXJnZXkKKwkgICAgVmxhc292KQorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMC4wOTgKK1Byb2JsZW06ICAgIEdUSzogV2hlbiB1c2luZyBHbm9tZSB0aGUgIlNlYXJjaCIgYW5kICJTZWFyY2ggYW5kIFJlcGxhY2UiIGRpYWxvZworCSAgICBib3hlcyBhcmUgbm90IHRyYW5zbGF0ZWQuCitTb2x1dGlvbjogICBEZWZpbmUgRU5BQkxFX05MUyBiZWZvcmUgaW5jbHVkaW5nIGdub21lLmguIChFZHVhcmRvIEZlcm5hbmRleikKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYywgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4wLjA5OQorUHJvYmxlbTogICAgQ3lnd2luOiBXaGVuIHJ1bm5pbmcgVmkgY29tcGF0aWJsZSBNUy1ET1MgbGluZSBlbmRpbmdzIGNhdXNlCisJICAgIHRyb3VibGUuCitTb2x1dGlvbjogICBNYWtlIHRoZSBkZWZhdWx0IGZvciAnZmlsZWZvcm1hdHMnICJ1bml4LGRvcyIgaW4gVmkgY29tcGF0aWJsZQorCSAgICBtb2RlLiAgKE1pY2hhZWwgU2NoYWFwKQorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmgKKworUGF0Y2ggNi4wLjEwMAorUHJvYmxlbTogICAgIjpiYWRkICswIHRlc3QlZmlsZSIgY2F1c2VzIGEgY3Jhc2guCitTb2x1dGlvbjogICBUYWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSAiKzAiIGlzIE5VTCB0ZXJtaW5hdGVkIHdoZW4gYWxsb2NhdGluZworCSAgICByb29tIGZvciByZXBsYWNpbmcgdGhlICIlIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4wLjEwMQorUHJvYmxlbTogICAgIjpta3Nlc3Npb24iIGRvZXNuJ3QgcmVzdG9yZSBlZGl0aW5nIGEgZmlsZSB0aGF0IGhhcyBhICcjJyBvciAnJScKKwkgICAgaW4gaXRzIG5hbWUuICAoV29sZmdhbmcgQmxhbmtlbmJ1cmcpCitTb2x1dGlvbjogICBQdXQgYSBiYWNrc2xhc2ggYmVmb3JlIHRoZSAnIycgYW5kICclJy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4wLjEwMgorUHJvYmxlbTogICAgV2hlbiBjaGFuZ2luZyBmb2xkcyB0aGUgY3Vyc29yIG1heSBhcHBlYXIgaGFsZndheSBhIGNsb3NlZCBmb2xkLgorCSAgICAoTmFtIFN1bmdIeXVuKQorU29sdXRpb246ICAgU2V0IHdfY2xpbmVfZm9sZGVkIGNvcnJlY3RseS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL21vdmUuYworCitQYXRjaCA2LjAuMTAzCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICdzY3JvbGxiaW5kJyBhIGxhcmdlIHZhbHVlIG9mICdzY3JvbGxvZmYnIHdpbGwgbWFrZSB0aGUKKwkgICAgc2Nyb2xsIGJpbmRpbmcgc3RvcCBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUuIChDb2VuIEVuZ2VsYmFydHMpCitTb2x1dGlvbjogICBEb24ndCB1c2UgJ3Njcm9sbG9mZicgd2hlbiBsaW1pdGluZyB0aGUgdG9wbGluZSBmb3Igc2Nyb2xsCisJICAgIGJpbmRpbmcuIChEYW55IFN0QW1hbnQpCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMTA0CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBXaGVuICckJyBpcyBpbiAnY3BvcHRpb25zJywgdHlwaW5nIGEgZG91YmxlLXdpZGUKKwkgICAgY2hhcmFjdGVyIHRoYXQgb3ZlcndyaXRlcyB0aGUgbGVmdCBoYWx2ZSBvZiBhbiBvbGQgZG91YmxlLXdpZGUKKwkgICAgY2hhcmFjdGVyIGNhdXNlcyBhIHJlZHJhdyBwcm9ibGVtIGFuZCB0aGUgY3Vyc29yIHN0b3BzIGJsaW5raW5nLgorU29sdXRpb246ICAgQ2xlYXIgdGhlIHJpZ2h0IGhhbGYgb2YgdGhlIG9sZCBjaGFyYWN0ZXIuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjAuMTA1CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBJbiBhIHdpbmRvdyBvZiBvbmUgY29sdW1uIHdpZGUsIHdpdGggc3ludGF4CisJICAgIGhpZ2hsaWdodGluZyBlbmFibGVkIGEgY3Jhc2ggbWlnaHQgaGFwcGVuLgorU29sdXRpb246ICAgU2tpcCBnZXR0aW5nIHRoZSBzeW50YXggYXR0cmlidXRlIHdoZW4gdGhlIGNoYXJhY3RlciBkb2Vzbid0IGZpdAorCSAgICBhbnl3YXkuICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjEwNiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB0aGUgcHJpbnRlciBmb250IGlzIHdyb25nLCB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgR2l2ZSBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjAuMTA3IChleHRyYSkKK1Byb2JsZW06ICAgIFZpc1ZpbTogV2hlbiBlZGl0aW5nIGFub3RoZXIgZmlsZSwgYSBtb2RpZmllZCBmaWxlIG1heSBiZSB3cml0dGVuCisJICAgIHVuZXhwZWN0ZWRseSBhbmQgd2l0aG91dCB3YXJuaW5nLgorU29sdXRpb246ICAgU3BsaXQgdGhlIHdpbmRvdyBpZiBhIGZpbGUgd2FzIG1vZGlmaWVkLgorRmlsZXM6CSAgICBWaXNWaW0vQ29tbWFuZHMuY3BwCisKK1BhdGNoIDYuMC4xMDgKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgZm9sZGluZyBjb3VsZCB0cnkgZGlzcGxheWluZyBsaW5lIHplcm8sIHJlc3VsdGluZyBpbiBhbgorCSAgICBlcnJvciBmb3IgYSBOVUxMIHBvaW50ZXIuCitTb2x1dGlvbjogICBTdG9wIGRlY3JlbWVudGluZyB3X3RvcGxpbmUgd2hlbiB0aGUgZmlyc3QgbGluZSBvZiBhIHdpbmRvdyBpcyBpbgorCSAgICBhIGNsb3NlZCBmb2xkLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4wLjEwOQorUHJvYmxlbTogICAgWElNOiBXaGVuIHRoZSBpbnB1dCBtZXRob2QgaXMgZW5hYmxlZCwgcmVwZWF0aW5nIGFuIGluc2VydGlvbiB3aXRoCisJICAgICIuIiBkaXNhYmxlcyBpdC4gKE1hcmNlbCBTdml0YWxza3kpCitTb2x1dGlvbjogICBEb24ndCBzdG9yZSB0aGUgaW5wdXQgbWV0aG9kIHN0YXR1cyB3aGVuIGEgY29tbWFuZCBjb21lcyBmcm9tIHRoZQorCSAgICBzdHVmZiBidWZmZXIuCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMC4xMTAKK1Byb2JsZW06ICAgIFVzaW5nIHVuZG8gYWZ0ZXIgZXhlY3V0aW5nICJPeBtqQXgba2RkIiBmcm9tIGEgcmVnaXN0ZXIgaW4KKwkgICAgYW4gZW1wdHkgYnVmZmVyIGdpdmVzIGFuIGVycm9yIG1lc3NhZ2UuICAoR2VyaGFyZCBIb2NoaG9semVyKQorU29sdXRpb246ICAgRG9uJ3QgYWRqdXN0IHRoZSBib3R0b20gbGluZSBudW1iZXIgb2YgYW4gdW5kbyBibG9jayB3aGVuIGl0J3MKKwkgICAgemVyby4gIEFkZCBhIHRlc3QgZm9yIHRoaXMgcHJvYmxlbS4KK0ZpbGVzOgkgICAgc3JjL3VuZG8uYywgc3JjL3Rlc3RkaXIvdGVzdDIwLmluLCBzcmMvdGVzdGRpci90ZXN0MjAub2sKKworUGF0Y2ggNi4wLjExMQorUHJvYmxlbTogICAgVGhlIHZpcnRjb2woKSBmdW5jdGlvbiBkb2Vzbid0IHRha2UgY2FyZSBvZiAndmlydHVhbGVkaXQnLgorU29sdXRpb246ICAgQWRkIHRoZSBjb2x1bW4gb2Zmc2V0IHdoZW4gbmVlZGVkLiAoWWVnYXBwYW4gTGFrc2htYW5hbikKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjAuMTEyCitQcm9ibGVtOiAgICBUaGUgZXhwbG9yZXIgcGx1Z2luIGRvZXNuJ3Qgc29ydCBkaXJlY3RvcmllcyB3aXRoIGEgc3BhY2Ugb3IKKwkgICAgc3BlY2lhbCBjaGFyYWN0ZXIgYWZ0ZXIgYSBkaXJlY3Rvcnkgd2l0aCBhIHNob3J0ZXIgbmFtZS4KK1NvbHV0aW9uOiAgIElnbm9yZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBjb21wYXJpbmcgZGlyZWN0b3J5IG5hbWVzLiAgKE1pa2UKKwkgICAgV2lsbGlhbXMpCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbQorCitQYXRjaCA2LjAuMTEzCitQcm9ibGVtOiAgICAiOmVkaXQgfi9mbmFtZSIgZG9lc24ndCB3b3JrIGlmICRIT01FIGluY2x1ZGVzIGEgc3BhY2UuICBBbHNvLAorCSAgICBleHBhbmRpbmcgd2lsZGNhcmRzIHdpdGggdGhlIHNoZWxsIG1heSBmYWlsLiAoSm9obiBEYW5pZWwpCitTb2x1dGlvbjogICBFc2NhcGUgc3BhY2VzIHdpdGggYSBiYWNrc2xhc2ggd2hlbiBuZWVkZWQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvbWlzYzEuYywgc3JjL3Byb3RvL21pc2MxLnBybywgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjAuMTE0CitQcm9ibGVtOiAgICBVc2luZyAiOnAiIHdpdGggZm5hbWVtb2RpZnkoKSBkaWRuJ3QgZXhwYW5kICJ+LyIgb3IgIn51c2VyLyIgdG8gYQorCSAgICBmdWxsIHBhdGguICBGb3IgV2luMzIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdhcyBwcmVwZW5kZWQuCisJICAgIChNaWNoYWVsIEdlZGRlcykKK1NvbHV0aW9uOiAgIEV4cGFuZCB0aGUgaG9tZSBkaXJlY3RvcnkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjExNSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB1c2luZyBhIGRpYWxvZyB3aXRoIGEgdGV4dGZpZWxkIGl0IGNhbm5vdCBzY3JvbGwgdGhlCisJICAgIHRleHQuCitTb2x1dGlvbjogICBBZGQgRVNfQVVUT0hTQ1JPTEwgdG8gdGhlIHRleHRmaWVsZCBzdHlsZS4gKFBlZHJvIEdvbWVzKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMC4xMTYgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtV2luZG93cyBOVC8yMDAwL1hQOiBmaWxld3JpdGFibGUoKSBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGZvcgorCSAgICBmaWxlc3lzdGVtcyB0aGF0IHVzZSBBQ0xzLgorU29sdXRpb246ICAgVXNlIEFDTCBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmaWxlIGlzIHdyaXRhYmxlLiAoTWlrZSBXaWxsaWFtcykKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL21hY3Jvcy5oLCBzcmMvb3Nfd2luMzIuYywgc3JjL3Byb3RvL29zX3dpbjMyLnBybworCitQYXRjaCA2LjAuMTE3IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiB3aGVuIGRpc2FibGluZyB0aGUgbWVudSwgInNldCBsaW5lcz05OTkiIGRvZXNuJ3QgdXNlIGFsbAorCSAgICB0aGUgYXZhaWxhYmxlIHNjcmVlbiBzcGFjZS4KK1NvbHV0aW9uOiAgIERvbid0IHN1YnRyYWN0IHRoZSBmaXhlZCBjYXB0aW9uIGhlaWdodCBidXQgdGhlIHJlYWwgbWVudSBoZWlnaHQKKwkgICAgZnJvbSB0aGUgYXZhaWxhYmxlIHNjcmVlbiBzcGFjZS4gIEFsc286IEF2b2lkIHJlY3Vyc2lvbiBpbgorCSAgICBndWlfbXN3aW5fZ2V0X21lbnVfaGVpZ2h0KCkuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4wLjExOAorUHJvYmxlbTogICAgV2hlbiAkVE1QRElSIGlzIGEgcmVsYXRpdmUgcGF0aCwgdGhlIHRlbXAgZGlyZWN0b3J5IGlzIG1pc3NpbmcgYQorCSAgICB0cmFpbGluZyBzbGFzaCBhbmQgaXNuJ3QgZGVsZXRlZCB3aGVuIFZpbSBleGl0cy4gKFBldGVyIEhvbG0pCitTb2x1dGlvbjogICBBZGQgdGhlIHNsYXNoIGFmdGVyIGV4cGFuZGluZyB0aGUgZGlyZWN0b3J5IHRvIGFuIGFic29sdXRlIHBhdGguCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMTE5IChkZXBlbmRzIG9uIHBhdGNoIDYuMC4xMTYpCitQcm9ibGVtOiAgICBWTVM6IGZpbGV3cml0YWJsZSgpIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgc2FtZSBtZXRob2QgYXMgZm9yIFVuaXguIChab2x0YW4gQXJwYWRmZnkpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjEyMAorUHJvYmxlbTogICAgVGhlIGNvbnZlcnNpb24gdG8gaHRtbCBpc24ndCBjb21wYXRpYmxlIHdpdGggWEhUTUwuCitTb2x1dGlvbjogICBRdW90ZSB0aGUgdmFsdWVzLiAoSmVzcyBUaHJ5c29lZSkKK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvMmh0bWwudmltCisKK1BhdGNoIDYuMC4xMjEgKGV4dHJhKSAoZGVwZW5kcyBvbiBwYXRjaCA2LjAuMTE2KQorUHJvYmxlbTogICAgV2luMzI6IEFmdGVyIHBhdGNoIDYuMC4xMTYgVmltIGRvZXNuJ3QgY29tcGlsZSB3aXRoIG1pbmd3MzIuCitTb2x1dGlvbjogICBBZGQgYW4gI2lmZGVmIEhBVkVfQUNMLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjAuMTIyIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjE2OiBTYW1lIHJlc2l6ZSBwcm9ibGVtcyBhcyBwYXRjaCA2LjAuMTE3IGZpeGVkIGZvciBXaW4zMi4gIEFuZAorCSAgICBkaWFsb2cgdGV4dGZpZWxkIHByb2JsZW0gZnJvbSBwYXRjaCA2LjAuMTE1LgorU29sdXRpb246ICAgU2V0IG9sZF9tZW51X2hlaWdodCBvbmx5IHdoZW4gdXNlZC4gIEFkZCBFU19BVVRPSFNDUk9MTCBmbGFnLgorCSAgICAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9ndWlfdzE2LmMKKworUGF0Y2ggNi4wLjEyMyAoZGVwZW5kcyBvbiBwYXRjaCA2LjAuMTE5KQorUHJvYmxlbTogICAgV2luMTY6IENvbXBpbGF0aW9uIHByb2JsZW1zLgorU29sdXRpb246ICAgTW92ZSAiJiYiIHRvIG90aGVyIGxpbmVzLiAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjEyNAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBhICI6c3Vic3RpdHV0ZSIgY29tbWFuZCB0aGF0IHN0YXJ0cyB3aXRoICJcPSIKKwkgICAgKGV2YWx1YXRlZCBhcyBhbiBleHByZXNzaW9uKSwgIn4iIHdhcyBzdGlsbCByZXBsYWNlZCB3aXRoIHRoZQorCSAgICBwcmV2aW91cyBzdWJzdGl0dXRlIHN0cmluZy4KK1NvbHV0aW9uOiAgIFNraXAgdGhlIHJlcGxhY2VtZW50IHdoZW4gdGhlIHN1YnN0aXR1dGUgc3RyaW5nIHN0YXJ0cyB3aXRoICJcPSIuCisJICAgIEFsc28gYWRqdXN0IHRoZSBkb2N1bWVudGF0aW9uIGFib3V0IGRvdWJsaW5nIGJhY2tzbGFzaGVzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jLCBydW50aW1lL2RvYy9jaGFuZ2UudHh0CisKK1BhdGNoIDYuMC4xMjUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdXNpbmcgdGhlIG11bHRpX2J5dGVfaW1lIGZlYXR1cmUgcHJlc3NpbmcgdGhlIHNoaWZ0CisJICAgIGtleSB3b3VsZCBiZSBoYW5kbGVkIGFzIGlmIGEgY2hhcmFjdGVyIHdhcyBlbnRlcmVkLCB0aHVzIG1hcHBpbmdzCisJICAgIHdpdGggYSBzaGlmdGVkIGtleSBkaWRuJ3Qgd29yay4gKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBJZ25vcmUgcHJlc3NpbmcgdGhlIHNoaWZ0LCBjb250cm9sIGFuZCBhbHQga2V5cy4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4wLjEyNgorUHJvYmxlbTogICAgVGhlIHB5dGhvbiBsaWJyYXJ5IHdhcyBhbHdheXMgc3RhdGljYWxseSBsaW5rZWQuCitTb2x1dGlvbjogICBMaW5rIHRoZSBweXRob24gbGlicmFyeSBkeW5hbWljYWxseS4gKE1hdHRoaWFzIEtsb3NlKQorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4wLjEyNworUHJvYmxlbTogICAgV2hlbiB1c2luZyBhIHRlcm1pbmFsIHRoYXQgc3dhcHMgc2NyZWVucyBhbmQgdGhlIE5vcm1hbCBiYWNrZ3JvdW5kCisJICAgIGNvbG9yIGhhcyBhIGRpZmZlcmVudCBiYWNrZ3JvdW5kLCB1c2luZyBhbiBleHRlcm5hbCBjb21tYW5kIG1heQorCSAgICBjYXVzZSB0aGUgY29sb3Igb2YgdGhlIHdyb25nIHNjcmVlbiB0byBiZSBjaGFuZ2VkLiAoTWFyayBXYWdnb25lcikKK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgc2NyZWVuX3N0b3BfaGlnaGxpZ2h0KCkgaW4gc3RvcHRlcm1jYXAoKS4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA2LjAuMTI4CitQcm9ibGVtOiAgICBXaGVuIG1vdmluZyBhIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93IHRvIHRoZSBmYXIgbGVmdCBvciByaWdodCwKKwkgICAgdGhlIHNjcm9sbGJhcnMgYXJlIG5vdCBhZGp1c3RlZC4gKFNjb3R0IEUgTGVlKSAgV2hlbiAnbW91c2Vmb2N1cycKKwkgICAgaXMgc2V0IHRoZSBtb3VzZSBwb2ludGVyIHdhc24ndCBhZGp1c3RlZC4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgc2Nyb2xsYmFycyBhbmQgdGhlIG1vdXNlIHBvaW50ZXIuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjAuMTI5CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgdmVyeSBsb25nIGZpbGUgbmFtZSwgIjpscyIgKHJlcGVhdGVkIGEgZmV3IHRpbWVzKQorCSAgICBjYXVzZXMgYSBjcmFzaC4gIFRlc3Qgd2l0aCAidmltIGBwZXJsIC1lICdwcmludCAiQSJ4MTAwMCdgIi4KKwkgICAgKFRlamVkYSkKK1NvbHV0aW9uOiAgIFRlcm1pbmF0ZSBhIHN0cmluZyBiZWZvcmUgZ2V0dGluZyBpdHMgbGVuZ3RoIGluIGJ1Zmxpc3RfbGlzdCgpLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4wLjEzMAorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOmNwcmV2IiB3aGlsZSB0aGUgZXJyb3Igd2luZG93IGlzIG9wZW4sIGFuZCB0aGUgbmV3CisJICAgIGxpbmUgYXQgdGhlIHRvcCB3cmFwcywgdGhlIHdpbmRvdyBpc24ndCBjb3JyZWN0bHkgZHJhd24uCisJICAgIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorU29sdXRpb246ICAgV2hlbiByZWRyYXdpbmcgdGhlIHRvcGxpbmUgZG9uJ3Qgc2Nyb2xsIHR3aWNlLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjEzMQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBidWZuYW1lKCkgYW5kIHRoZXJlIGFyZSB0d28gbWF0Y2hlcyBmb3IgbGlzdGVkIGJ1ZmZlcnMKKwkgICAgYW5kIG9uZSBtYXRjaCBmb3IgYW4gdW5saXN0ZWQgYnVmZmVyLCB0aGUgdW5saXN0ZWQgYnVmZmVyIGlzIHVzZWQuCisJICAgIChBcmljIEJsdW1lcikKK1NvbHV0aW9uOiAgIFdoZW4gdGhlcmUgaXMgYSBtYXRjaCB3aXRoIGEgbGlzdGVkIGJ1ZmZlciwgZG9uJ3QgY2hlY2sgZm9yCisJICAgIHVubGlzdGVkIGJ1ZmZlcnMuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjAuMTMyCitQcm9ibGVtOiAgICBXaGVuIHNldHRpbmcgJ2ltaW5zZXJ0JyBpbiB0aGUgdmltcmMgYW5kIHVzaW5nIGFuIHh0ZXJtIHdpdGggdHdvCisJICAgIHNjcmVlbnMgdGhlIHJ1bGVyIGlzIGRyYXduIGluIHRoZSB3cm9uZyBzY3JlZW4uIChJZ29yIEdvbGRlbmJlcmcpCitTb2x1dGlvbjogICBPbmx5IGRyYXcgdGhlIHJ1bGVyIHdoZW4gdXNpbmcgdGhlIHJpZ2h0IHNjcmVlbi4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMC4xMzMKK1Byb2JsZW06ICAgIFdoZW4gb3BlbmluZyBhbm90aGVyIGJ1ZmZlciB3aGlsZSAna2V5bWFwJyBpcyBzZXQgYW5kICdpbWluc2VydCcKKwkgICAgaXMgemVybywgJ2ltaW5zZXJ0JyBpcyBzZXQgdG8gb25lIHVuZXhwZWN0ZWRseS4gKElnb3IgR29sZGVuYmVyZykKK1NvbHV0aW9uOiAgIERvbid0IHNldCAnaW1pbnNlcnQnIGFzIGEgc2lkZSBlZmZlY3Qgb2YgZGVmaW5pbmcgYSAiOmxtYXAiCisJICAgIG1hcHBpbmcuICBPbmx5IGRvIHRoYXQgd2hlbiAna2V5bWFwJyBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMTM0CitQcm9ibGVtOiAgICBXaGVuIGNvbXBsZXRpbmcgIjpzZXQgdGFncz0iIGEgcGF0aCB3aXRoIGFuIGVtYmVkZGVkIHNwYWNlIGNhdXNlcworCSAgICB0aGUgY29tcGxldGlvbiB0byBzdG9wLiAoU2VrdG9yIHZhbiBTa2lqbGVuKQorU29sdXRpb246ICAgRXNjYXBlIHNwYWNlcyB3aXRoIGJhY2tzbGFzaGVzLCBsaWtlIGZvciAiOnNldCBwYXRoPSIuICBBbHNvIHRha2UKKwkgICAgYmFja3NsYXNoZXMgaW50byBhY2NvdW50IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgc3RhcnQgb2YgdGhlIHBhdGgKKwkgICAgdG8gY29tcGxldGUgKGUuZy4sIGZvciAnYmFja3VwZGlyJyBhbmQgJ2NzY29wZXByZycpLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9vcHRpb24uYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjAuMTM1CitQcm9ibGVtOiAgICBNZW51cyB0aGF0IGFyZSBub3Qgc3VwcG9zZWQgdG8gZG8gYW55dGhpbmcgdXNlZCAiPE51bD4iLCB3aGljaAorCSAgICBzdGlsbCBwcm9kdWNlZCBhbiBlcnJvciBiZWVwLgorCSAgICBXaGVuIENUUkwtTyBpcyBtYXBwZWQgZm9yIEluc2VydCBtb2RlLCAiOmFtZW51IiBjb21tYW5kcyBkaWRuJ3QKKwkgICAgd29yayBpbiBJbnNlcnQgbW9kZS4KKwkgICAgTWVudSBsYW5ndWFnZSBmYWxscyBiYWNrIHRvIEVuZ2xpc2ggd2hlbiAkTEFORyBlbmRzIGluICJAZXVybyIuCitTb2x1dGlvbjogICBVc2UgIjxOb3A+IiBmb3IgYSBtZW51IGl0ZW0gdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nLCBqdXN0IGxpa2UKKwkgICAgbWFwcGluZ3MuCisJICAgIFVzZSAiOmFub3JlbWVudSIgaW5zdGVhZCBvZiAiOmFtZW51Ii4KKwkgICAgSWdub3JlICJAZXVybyIgaW4gdGhlIGxvY2FsZSBuYW1lLgorRmlsZXM6CSAgICBydW50aW1lL21ha2VtZW51LnZpbSwgcnVudGltZS9tZW51LnZpbSwgc3JjL21lbnUuYworCitQYXRjaCA2LjAuMTM2CitQcm9ibGVtOiAgICBXaGVuIGNvbXBsZXRpbmcgaW4gSW5zZXJ0IG1vZGUsIGEgbWFwcGluZyBjb3VsZCBiZSB1bmV4cGVjdGVkbHkKKwkgICAgYXBwbGllZC4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSBtYXBwaW5ncyB3aGVuIGNoZWNraW5nIGZvciBhIHR5cGVkIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjAuMTM3CitQcm9ibGVtOiAgICBHVUk6IFdoZW4gdXNpbmcgdGhlIGZpbmQgb3IgZmluZC9yZXBsYWNlIGRpYWxvZyBmcm9tIEluc2VydCBtb2RlLAorCSAgICB0aGUgaW5wdXQgbW9kZSBpcyBzdG9wcGVkLgorU29sdXRpb246ICAgRG9uJ3QgdXNlIHRoZSBpbnB1dCBtZXRob2Qgc3RhdHVzIHdoZW4gdGhlIG1haW4gd2luZG93IGRvZXNuJ3QKKwkgICAgaGF2ZSBmb2N1cy4KK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNi4wLjEzOAorUHJvYmxlbTogICAgR1VJOiBXaGVuIHVzaW5nIHRoZSBmaW5kIG9yIGZpbmQvcmVwbGFjZSBkaWFsb2cgZnJvbSBJbnNlcnQgbW9kZSwKKwkgICAgdGhlIHRleHQgaXMgaW5zZXJ0ZWQgd2hlbiBDVFJMLU8gaXMgbWFwcGVkLiAoQW5kcmUgUGFuZykKKwkgICAgV2hlbiBvcGVuaW5nIHRoZSBkaWFsb2cgYWdhaW4sIGEgd2hvbGUgd29yZCBzZWFyY2ggaXNuJ3QKKwkgICAgcmVjb2duaXplZC4KKwkgICAgV2hlbiBkb2luZyAicmVwbGFjZSBhbGwiIGEgd2hvbGUgd29yZCBzZWFyY2ggd2FzIG5ldmVyIGRvbmUuCitTb2x1dGlvbjogICBEb24ndCBwdXQgYSBzZWFyY2ggb3IgcmVwbGFjZSBjb21tYW5kIGluIHRoZSBpbnB1dCBidWZmZXIsCisJICAgIGV4ZWN1dGUgaXQgZGlyZWN0bHkuCisJICAgIFJlY29nbml6ZSAiXDwiIGFuZCAiXD4iIGFmdGVyIHJlbW92aW5nICJcViIuCisJICAgIEFkZCAiXDwiIGFuZCAiXD4iIGFsc28gZm9yICJyZXBsYWNlIGFsbCIuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjAuMTM5CitQcm9ibGVtOiAgICBXaGVuIHN0b3BwaW5nICd3aWxkbWVudScgY29tcGxldGlvbiwgdGhlIHN0YXR1c2xpbmUgb2YgdGhlCisJICAgIGJvdHRvbS1sZWZ0IHZlcnRpY2FsbHkgc3BsaXQgd2luZG93IGlzbid0IHJlZHJhd24uIChZZWdhcHBhbgorCSAgICBMYWtzaG1hbmFuKQorU29sdXRpb246ICAgUmVkcmF3IGFsbCB0aGUgYm90dG9tIHN0YXR1c2xpbmVzLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL3Byb3RvL3NjcmVlbi5wcm8sIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjAuMTQwCitQcm9ibGVtOiAgICBNZW1vcnkgYWxsb2NhdGVkIGZvciBsb2NhbCBtYXBwaW5ncyBhbmQgYWJicmV2aWF0aW9ucyBpcyBsZWFrZWQKKwkgICAgd2hlbiB0aGUgYnVmZmVyIGlzIHdpcGVkIG91dC4KK1NvbHV0aW9uOiAgIENsZWFyIHRoZSBsb2NhbCBtYXBwaW5ncyB3aGVuIGRlbGV0aW5nIGEgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9nZXRjaGFyLmMsIHNyYy9wcm90by9nZXRjaGFyLnBybywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMC4xNDEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjplbmV3IiBpbiBhbiBlbXB0eSBidWZmZXIsIHNvbWUgYnVmZmVyLWxvY2FsIHRoaW5ncworCSAgICBhcmUgbm90IGNsZWFyZWQuICBiOmtleW1hcF9uYW1lIGlzIG5vdCBzZXQuCitTb2x1dGlvbjogICBDbGVhciB1c2VyIGNvbW1hbmRzIGFuZCBtYXBwaW5ncyBsb2NhbCB0byB0aGUgYnVmZmVyIHdoZW4gcmUtdXNpbmcKKwkgICAgdGhlIGN1cnJlbnQgYnVmZmVyLiAgUmVsb2FkIHRoZSBrZXltYXAuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjAuMTQyCitQcm9ibGVtOiAgICBXaGVuIFB5dGhvbiBpcyBsaW5rZWQgc3RhdGljYWxseSwgbG9hZGluZyBkeW5hbWljIGV4dGVuc2lvbnMgbWlnaHQKKwkgICAgZmFpbC4KK1NvbHV0aW9uOiAgIEFkZCBhbiBleHRyYSBsaW5raW5nIGZsYWcgd2hlbiBuZWVkZWQuIChBbmRyZXcgUm9kaW9ub2ZmKQorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluLCBzcmMvYXV0by9jb25maWd1cmUKKworUGF0Y2ggNi4wLjE0MworUHJvYmxlbTogICAgV2hlbiBhIHN5bnRheCBpdGVtIGluY2x1ZGVzIGEgbGluZSBicmVhayBpbiBhIHBhdHRlcm4sIHRoZSBzeW50YXgKKwkgICAgbWF5IG5vdCBiZSB1cGRhdGVkIHByb3Blcmx5IHdoZW4gbWFraW5nIGEgY2hhbmdlLgorU29sdXRpb246ICAgQWRkIHRoZSAibGluZWJyZWFrcyIgYXJndW1lbnQgdG8gIjpzeW4gc3luYyIuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3N5bnRheC50eHQsIHNyYy9zY3JlZW4uYywgc3JjL3N0cnVjdHMuaCwgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMC4xNDQKK1Byb2JsZW06ICAgIEFmdGVyIHBhdGNoIDYuMC4wODggcmVkb2luZyAidmVVIiBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBEb24ndCBhZGQgdGhlICJVIiB0byB0aGUgcmVkbyBidWZmZXIsIGl0IHdpbGwgYmUgdXNlZCBhcyBhbiB1bmRvCisJICAgIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMTQ1CitQcm9ibGVtOiAgICBXaGVuIFZpbSBjYW4ndCByZWFkIGFueSBpbnB1dCBpdCBtaWdodCBnZXQgc3R1Y2suICBXaGVuCisJICAgIHJlZGlyZWN0aW5nIHN0ZGluIGFuZCBzdGRlcnIgVmltIHdvdWxkIG5vdCByZWFkIGNvbW1hbmRzIGZyb20gYQorCSAgICBmaWxlLiAgKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBXaGVuIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIHJlYWQgYSBjaGFyYWN0ZXIgd2hlbiBpdCdzIG5vdCBwb3NzaWJsZSwKKwkgICAgZXhpdCBWaW0uICBXaGVuIHN0ZGluIGFuZCBzdGRlcnIgYXJlIG5vdCBhIHR0eSwgc3RpbGwgdHJ5IHJlYWRpbmcKKwkgICAgZnJvbSB0aGVtLCBidXQgZG9uJ3QgZG8gYSBibG9ja2luZyB3YWl0LgorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA2LjAuMTQ2CitQcm9ibGVtOiAgICBXaGVuICdzdGF0dXNsaW5lJyBjb250YWlucyAiJXsnLSd9IiB0aGlzIHJlc3VsdHMgaW4gYSB6ZXJvLgorCSAgICAoTWlsYW4gVmFuY3VyYSkKK1NvbHV0aW9uOiAgIERvbid0IGhhbmRsZSBudW1iZXJzIHdpdGggYSBtaW51cyBhcyBhIG51bWJlciwgdGhleSB3ZXJlIG5vdAorCSAgICBkaXNwbGF5ZWQgYW55d2F5LgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4wLjE0NworUHJvYmxlbTogICAgSXQncyBub3QgZWFzeSB0byBtYXJrIGEgVmltIHZlcnNpb24gYXMgYmVpbmcgbW9kaWZpZWQuICBUaGUgbmV3CisJICAgIGxpY2Vuc2UgcmVxdWlyZXMgdGhpcy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgLS1tb2RpZmllZC1ieSBhcmd1bWVudCB0byBjb25maWd1cmUgYW5kIHRoZSBNT0RJRklFRF9CWQorCSAgICBkZWZpbmUuICBJJ3MgdXNlZCBpbiB0aGUgaW50cm8gc2NyZWVuIGFuZCB0aGUgIjp2ZXJzaW9uIiBvdXRwdXQuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2NvbmZpZy5oLmluLAorCSAgICBzcmMvZmVhdHVyZS5oLCBzcmMvdmVyc2lvbi5jCisKK1BhdGNoIDYuMC4xNDgKK1Byb2JsZW06ICAgIEFmdGVyICJwIiBpbiBhbiBlbXB0eSBsaW5lLCBgWyBnb2VzIHRvIHRoZSBzZWNvbmQgY2hhcmFjdGVyLgorCSAgICAoS29udHJhIEdlcmdlbHkpCitTb2x1dGlvbjogICBEb24ndCBpbmNyZW1lbnQgdGhlIGNvbHVtbiBudW1iZXIgaW4gYW4gZW1wdHkgbGluZS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4xNDkKK1Byb2JsZW06ICAgIFRoZSBwYXR0ZXJuICJcKC5cey19XCkqIiBjYXVzZXMgYSBoYW5nLiAgV2hlbiB1c2luZyBhIHNlYXJjaAorCSAgICBwYXR0ZXJuIHRoYXQgY2F1c2VzIGEgc3RhY2sgb3ZlcmZsb3cgdG8gYmUgZGV0ZWN0ZWQgVmltIGNvdWxkCisJICAgIHN0aWxsIGhhbmcuCitTb2x1dGlvbjogICBDb3JyZWN0bHkgcmVwb3J0ICJvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IiB3aGVuIHVzaW5nICJcey19Ii4KKwkgICAgQ2hlY2sgZm9yICJvdXRfb2Zfc3RhY2siIGluc2lkZSBsb29wcyB0byBhdm9pZCBhIGhhbmcuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjAuMTUwCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgbXVsdGktYnl0ZSBlbmNvZGluZywgcGF0Y2ggNi4wLjE0OCBjYXVzZXMgInAiIHRvIHdvcmsKKwkgICAgbGlrZSAiUCIuIChTdW5nLUh5dW4gTmFtKQorU29sdXRpb246ICAgQ29tcHV0ZSB0aGUgYnl0ZSBsZW5ndGggb2YgYSBtdWx0aS1ieXRlIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4xNTEKK1Byb2JsZW06ICAgIFJlZHJhd2luZyB0aGUgc3RhdHVzIGxpbmUgYW5kIHJ1bGVyIGNhbiBiZSB3cm9uZyB3aGVuIGl0IGNvbnRhaW5zCisJICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIFVzZSBjaGFyYWN0ZXIgd2lkdGggYW5kIGJ5dGUgbGVuZ3RoIGNvcnJlY3RseS4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMC4xNTIKK1Byb2JsZW06ICAgIHN0cnRyYW5zKCkgY291bGQgaGFuZyBvbiBhbiBpbGxlZ2FsIFVURi04IGJ5dGUgc2VxdWVuY2UuCitTb2x1dGlvbjogICBTa2lwIG92ZXIgaWxsZWdhbCBieXRlcy4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2NoYXJzZXQuYworCitQYXRjaCA2LjAuMTUzCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIChpbGxlZ2FsKSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXJzIGFuZCBWaW0gc3ludGF4CisJICAgIGhpZ2hsaWdodGluZyBWaW0gY2FuIGNyYXNoLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgSW5jcmVhc2UgYSBwb2ludGVyIG92ZXIgYSBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBhIGJ5dGUuCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjAuMTU0CitQcm9ibGVtOiAgICBNUy1ET1MgYW5kIE1TLVdpbmRvd3M6IFRoZSBtZW51IGVudHJpZXMgZm9yIHh4ZCBkb24ndCB3b3JrIHdoZW4KKwkgICAgdGhlcmUgaXMgbm8geHhkIGluIHRoZSBwYXRoLgorCSAgICBXaGVuIGNvbnZlcnRpbmcgYmFjayBmcm9tIEhleCB0aGUgZmlsZXR5cGUgbWF5IHJlbWFpbiAieHhkIiBpZiBpdAorCSAgICBpcyBub3QgZGV0ZWN0ZWQuCitTb2x1dGlvbjogICBXaGVuIHh4ZCBpcyBub3QgaW4gdGhlIHBhdGggdXNlIHRoZSBvbmUgaW4gdGhlIHJ1bnRpbWUgZGlyZWN0b3J5LAorCSAgICB3aGVyZSB0aGUgaW5zdGFsbCBwcm9ncmFtIGhhcyBwdXQgaXQuCisJICAgIENsZWFyIHRoZSAnZmlsZXR5cGUnIG9wdGlvbiBiZWZvcmUgZGV0ZWN0aW5nIHRoZSBuZXcgdmFsdWUuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4wLjE1NQorUHJvYmxlbTogICAgTWFjOiBjb21waWxhdGlvbiBwcm9ibGVtcyBpbiB1aS5jIGFmdGVyIHBhdGNoIDYuMC4xNDUuIChBeGVsCisJICAgIEtpZWxob3JuKQorU29sdXRpb246ICAgRG9uJ3QgY2FsbCBtY2hfaW5jaGFyKCkgd2hlbiBOT19DT05TT0xFIGlzIGRlZmluZWQuCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMC4xNTYKK1Byb2JsZW06ICAgIFN0YXJ0aW5nIFZpbSB3aXRoIHRoZSAtYiBhcmd1bWVudCBhbmQgdHdvIGZpbGVzLCAiOm5leHQiIGRvZXNuJ3QKKwkgICAgc2V0ICdiaW5hcnknIGluIHRoZSBzZWNvbmQgZmlsZSwgbGlrZSBWaW0gNS43LiAoTm9ybWFuIERpYW1vbmQpCitTb2x1dGlvbjogICBTZXQgdGhlIGdsb2JhbCB2YWx1ZSBmb3IgJ2JpbmFyeScuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMTU3CitQcm9ibGVtOiAgICBXaGVuIGRlZmluaW5nIGEgdXNlciBjb21tYW5kIHdpdGggIi1jb21wbGV0ZT1kaXIiIGZpbGVzIHdpbGwgYWxzbworCSAgICBiZSBleHBhbmRlZC4gIEFsc28sICItY29tcGxldGU9bWFwcGluZyIgZG9lc24ndCBhcHBlYXIgdG8gd29yay4KKwkgICAgKE1pY2hhZWwgTmF1bWFubikKK1NvbHV0aW9uOiAgIFVzZSB0aGUgZXhwYW5zaW9uIGZsYWdzIGRlZmluZWQgd2l0aCB0aGUgdXNlciBjb21tYW5kLgorCSAgICBIYW5kbGUgZXhwYW5kaW5nIG1hcHBpbmdzIHNwZWNpZmljYWxseS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4wLjE1OAorUHJvYmxlbTogICAgV2hlbiBnZXR0aW5nIHRoZSB3YXJuaW5nIGZvciBhIGZpbGUgYmVpbmcgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbQorCSAgICBhbmQgcmVsb2FkaW5nIHRoZSBmaWxlLCB0aGUgJ3JlYWRvbmx5JyBvcHRpb24gaXMgcmVzZXQsIGV2ZW4gd2hlbgorCSAgICB0aGUgcGVybWlzc2lvbnMgZGlkbid0IGNoYW5nZS4gKE1hcmNlbCBTdml0YWxza3kpCitTb2x1dGlvbjogICBLZWVwICdyZWFkb25seScgc2V0IHdoZW4gcmVsb2FkaW5nIGEgZmlsZSBhbmQgdGhlIHBlcm1pc3Npb25zCisJICAgIGRpZG4ndCBjaGFuZ2UuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMTU5CitQcm9ibGVtOiAgICBXaWxkY2FyZCBleHBhbnNpb24gZm9yICI6ZW1lbnUiIGFsc28gc2hvd3Mgc2VwYXJhdG9ycy4KK1NvbHV0aW9uOiAgIFNraXAgbWVudSBzZXBhcmF0b3JzIGZvciAiOmVtZW51IiwgIjpwb3B1cCIgYW5kICI6dGVhcm9mZiIuCisJICAgIEFsc28sIGRvbid0IGhhbmRsZSAiOnRtZW51IiBhcyBpZiBpdCB3YXMgIjp0ZWFyb2ZmIi4gIEFuZCBsZWF2ZQorCSAgICBvdXQgdGhlIGFsdGVybmF0aXZlcyB3aXRoICImIiBpbmNsdWRlZC4KK0ZpbGVzOgkgICAgc3JjL21lbnUuYworCitQYXRjaCA2LjAuMTYwCitQcm9ibGVtOiAgICBXaGVuIGNvbXBpbGluZyB3aXRoIEdDQyAzLjAuMiBhbmQgdXNpbmcgdGhlICItTzIiIGFyZ3VtZW50LCB0aGUKKwkgICAgb3B0aW1pemVyIGNhdXNlcyBhIHByb2JsZW0gdGhhdCBtYWtlcyBWaW0gY3Jhc2guCitTb2x1dGlvbjogICBBZGQgYSBjb25maWd1cmUgY2hlY2sgdG8gYXZvaWQgIi1PMiIgZm9yIHRoaXMgdmVyc2lvbiBvZiBnY2MuCitGaWxlczoJICAgIHNyYy9jb25maWd1cmUuaW4sIHNyYy9hdXRvL2NvbmZpZ3VyZQorCitQYXRjaCA2LjAuMTYxIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBCaXRtYXBzIGRvbid0IHdvcmsgd2l0aCBzaWducy4KK1NvbHV0aW9uOiAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGJpdG1hcHMgd2l0aCBzaWducy4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL2ZlYXR1cmUuaCwgc3JjL2d1aV93MzIuYywgc3JjL2d1aV94MTEuYywKKwkgICAgc3JjL3Byb3RvL2d1aV93MzIucHJvLCBzcmMvcHJvdG8vZ3VpX3gxMS5wcm8KKworUGF0Y2ggNi4wLjE2MgorUHJvYmxlbTogICAgQ2xpZW50LXNlcnZlcjogQW4gZXJyb3IgbWVzc2FnZSBmb3IgYSB3cm9uZyBleHByZXNzaW9uIGFwcGVhcnMgaW4KKwkgICAgdGhlIHNlcnZlciBpbnN0ZWFkIG9mIHRoZSBjbGllbnQuCitTb2x1dGlvbjogICBQYXNzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LiAgQWxzbworCSAgICBhZGp1c3QgdGhlIGV4YW1wbGUgY29kZS4gKEZsZW1taW5nIE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL2lmX3hjbWRzcnYuYywgc3JjL21haW4uYywgc3JjL29zX21zd2luLmMsCisJICAgIHNyYy9wcm90by9pZl94Y21kc3J2LnBybywgc3JjL3Byb3RvL29zX21zd2luLnBybywKKwkgICAgcnVudGltZS9kb2MvZXZhbC50eHQsIHJ1bnRpbWUvdG9vbHMveGNtZHNydl9jbGllbnQuYworCitQYXRjaCA2LjAuMTYzCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgR1VJIGRpYWxvZywgYSBmaWxlIG5hbWUgaXMgc29tZXRpbWVzIHVzZWQgbGlrZSBpdCB3YXMKKwkgICAgYSBkaXJlY3RvcnkuCitTb2x1dGlvbjogICBTZXBhcmF0ZSBwYXRoIGFuZCBmaWxlIG5hbWUgcHJvcGVybHkuCisJICAgIEZvciBHVEssIE1vdGlmIGFuZCBBdGhlbmEgY29uY2F0ZW5hdGUgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWUgZm9yCisJICAgIHRoZSBkZWZhdWx0IHNlbGVjdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYywgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2NtZHMyLmMsIHNyYy9leF9kb2NtZC5jLAorCSAgICBzcmMvZ3VpX2F0aGVuYS5jLCBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX21vdGlmLmMsIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4wLjE2NAorUHJvYmxlbTogICAgQWZ0ZXIgcGF0Y2ggNi4wLjEzNSB0aGUgbWVudSBlbnRyaWVzIGZvciBwYXN0aW5nIGRvbid0IHdvcmsgaW4KKwkgICAgSW5zZXJ0IGFuZCBWaXN1YWwgbW9kZS4gKE11cmFva2EgVGFybykKK1NvbHV0aW9uOiAgIEFkZCA8c2NyaXB0PiB0byBhbGxvdyBzY3JpcHQtbG9jYWwgbWFwcGluZ3MuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4wLjE2NQorUHJvYmxlbTogICAgVXNpbmcgLS1yZW1vdGUgYW5kIGV4ZWN1dGluZyBsb2NhbGx5IGdpdmVzIHVuYXZvaWRhYmxlIGVycm9yCisJICAgIG1lc3NhZ2VzLgorU29sdXRpb246ICAgQWRkIC0tcmVtb3RlLXNpbGVudCBhbmQgLS1yZW1vdGUtd2FpdC1zaWxlbnQgdG8gc2lsZW50bHkgZXhlY3V0ZQorCSAgICBsb2NhbGx5LgorCSAgICBGb3IgV2luMzIgdGhlcmUgd2FzIG5vIGVycm9yIG1lc3NhZ2Ugd2hlbiBhIHNlcnZlciBkaWRuJ3QgZXhpc3QuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9pZl94Y21kc3J2LmMsIHNyYy9tYWluLmMsIHNyYy9vc19tc3dpbi5jLAorCSAgICBzcmMvcHJvdG8vaWZfeGNtZHNydi5wcm8sIHNyYy9wcm90by9vc19tc3dpbi5wcm8KKworUGF0Y2ggNi4wLjE2NgorUHJvYmxlbTogICAgR1VJOiBUaGVyZSBpcyBubyB3YXkgdG8gYXZvaWQgZGlhbG9ncyB0byBwb3AgdXAuCitTb2x1dGlvbjogICBBZGQgdGhlICdjJyBmbGFnIHRvICdndWlvcHRpb25zJzogVXNlIGNvbnNvbGUgZGlhbG9ncy4gIChZZWdhcHBhbgorCSAgICBMYWtzaG1hbmFuKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL29wdGlvbi5oLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMC4xNjcKK1Byb2JsZW06ICAgIFdoZW4gJ2ZpbGVlbmNvZGluZ3MnIGlzICJsYXRpbjIiIHNvbWUgY2hhcmFjdGVycyBpbiB0aGUgaGVscCBmaWxlcworCSAgICBhcmUgZGlzcGxheWVkIHdyb25nLgorU29sdXRpb246ICAgRm9yY2UgdGhlICdmaWxlZW5jb2RpbmcnIGZvciB0aGUgaGVscCBmaWxlcyB0byBiZSAibGF0aW4xIi4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4xNjgKK1Byb2JsZW06ICAgICI6JXMvXG4vIy8iIGRvZXNuJ3QgcmVwbGFjZSBhdCBhbiBlbXB0eSBsaW5lLiAoQnJ1Y2UgRGVWaXNzZXIpCitTb2x1dGlvbjogICBEb24ndCBza2lwIG1hdGNoZXMgYWZ0ZXIgam9pbmluZyB0d28gbGluZXMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4wLjE2OQorUHJvYmxlbTogICAgV2hlbiBydW4gYXMgZXZpbSBhbmQgdGhlIEdVSSBjYW4ndCBiZSBzdGFydGVkIHdlIGdldCBzdHVjayBpbiBhCisJICAgIHRlcm1pbmFsIHdpdGhvdXQgbWVudXMgaW4gSW5zZXJ0IG1vZGUuCitTb2x1dGlvbjogICBFeGl0IHdoZW4gdXNpbmcgImV2aW0iIGFuZCAiZ3ZpbSAteSIgd2hlbiB0aGUgR1VJIGNhbid0IGJlCisJICAgIHN0YXJ0ZWQuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4wLjE3MAorUHJvYmxlbTogICAgV2hlbiBwcmludGluZyBkb3VibGUtd2lkdGggY2hhcmFjdGVycyB0aGUgc2l6ZSBvZiB0YWJzIGFmdGVyIHRoZW0KKwkgICAgaXMgd3JvbmcuICAoTXVyYW9rYSBUYXJvKQorU29sdXRpb246ICAgQ29ycmVjdGx5IGNvbXB1dGUgdGhlIGNvbHVtbiBhZnRlciBhIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMC4xNzEKK1Byb2JsZW06ICAgIFdpdGggJ2tleW1vZGVsJyBpbmNsdWRpbmcgInN0YXJ0c2VsIiwgaW4gSW5zZXJ0IG1vZGUgYWZ0ZXIgdGhlIGVuZAorCSAgICBvZiBhIGxpbmUsIHNoaWZ0LUxlZnQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yLiAoU3RldmUgSGFsbCkKK1NvbHV0aW9uOiAgIENUUkwtTyBkb2Vzbid0IG1vdmUgdGhlIGN1cnNvciBsZWZ0LCBuZWVkIHRvIGRvIHRoYXQgZXhwbGljaXRseS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjAuMTcyCitQcm9ibGVtOiAgICBDVFJMLVEgZG9lc24ndCByZXBsYWNlIENUUkwtViBhZnRlciBDVFJMLVggaW4gSW5zZXJ0IG1vZGUgd2hpbGUgaXQKKwkgICAgZG9lcyBpbiBtb3N0IG90aGVyIHNpdHVhdGlvbnMuCitTb2x1dGlvbjogICBNYWtlIENUUkwtWCBDVFJMLVEgd29yayBsaWtlIENUUkwtWCBDVFJMLVYgaW4gSW5zZXJ0IG1vZGUuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4wLjE3MworUHJvYmxlbTogICAgV2hlbiB1c2luZyAiUCIgdG8gaW5zZXJ0IGEgbGluZSBicmVhayB0aGUgY3Vyc29yIHJlbWFpbnMgcGFzdCB0aGUKKwkgICAgZW5kIG9mIHRoZSBsaW5lLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHRoZSBjdXJzb3IgYmVpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjAuMTc0CitQcm9ibGVtOiAgICBBZnRlciB1c2luZyAiZ2QiIG9yICJnRCIgdGhlIHNlYXJjaCBkaXJlY3Rpb24gZm9yICJuIiBtYXkgc3RpbGwgYmUKKwkgICAgYmFja3dhcmRzLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIFJlc2V0IHRoZSBzZWFyY2ggZGlyZWN0aW9uIHRvIGZvcndhcmQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgc3JjL3NlYXJjaC5jLCBzcmMvcHJvdG8vc2VhcmNoLnBybworCitQYXRjaCA2LjAuMTc1CitQcm9ibGVtOiAgICAiOmhlbHAgL1x6KFwpIiBkb2Vzbid0IHdvcmsuIChUaG9tYXMgS29laGxlcikKK1NvbHV0aW9uOiAgIERvdWJsZSB0aGUgYmFja3NsYXNoZXMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4wLjE3NgorUHJvYmxlbTogICAgV2hlbiBraWxsZWQgYnkgYSBzaWduYWwgYXV0b2NvbW1hbmRzIGFyZSBzdGlsbCB0cmlnZ2VyZWQgYXMgaWYKKwkgICAgbm90aGluZyBoYXBwZW5lZC4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgdjpkeWluZyB2YXJpYWJsZSB0byBhbGxvdyBhdXRvY29tbWFuZHMgdG8gd29yayBkaWZmZXJlbnRseQorCSAgICB3aGVuIGEgZGVhZGx5IHNpZ25hbCBoYXMgYmVlbiB0cmFwcGVkLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvb3NfdW5peC5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4wLjE3NworUHJvYmxlbTogICAgV2hlbiAnY29tbWVudHN0cmluZycgaXMgZW1wdHkgYW5kICdmb2xkbWV0aG9kJyBpcyAibWFya2VyIiwgInpmIgorCSAgICBkb2Vzbid0IHdvcmsuIChUaG9tYXMgUy4gVXJiYW4pCitTb2x1dGlvbjogICBBZGQgdGhlIG1hcmtlciBldmVuIHdoZW4gJ2NvbW1lbnRzdHJpbmcnIGlzIGVtcHR5LgorRmlsZXM6CSAgICBzcmMvZm9sZC5jLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjE3OAorUHJvYmxlbTogICAgVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBmcm9tIHhwX2JhY2tzbGFzaCBmaWVsZC4KK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgeHBfYmFja3NsYXNoIGZpZWxkIHByb3Blcmx5LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9taXNjMS5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4wLjE3OQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gZGlzcGxheWluZyBVVEYtOCBjaGFyYWN0ZXJzIG1heSByZWFkIHVuaW5pdGlhbGl6ZWQKKwkgICAgbWVtb3J5LgorU29sdXRpb246ICAgQWRkIHV0ZmNfcHRyMmxlbl9jaGVja19sZW4oKSB0byBhdm9pZCByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiBhCisJICAgIHN0cmluZy4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMsIHNyYy9wcm90by9tYnl0ZS5wcm8sIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4wLjE4MAorUHJvYmxlbTogICAgRXhwYW5kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBhIHN0cmluZyB0aGF0IGVuZHMgaW4gYQorCSAgICBiYWNrc2xhc2ggY291bGQgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCitTb2x1dGlvbjogICBEZXRlY3QgdGhlIHRyYWlsaW5nIGJhY2tzbGFzaC4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4wLjE4MQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOmNkIGRpciIgbWVtb3J5IHdhcyBsZWFrZWQuCitTb2x1dGlvbjogICBGcmVlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiAgQWxzbyBhdm9pZCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeQorCSAgICByZWFkLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYworCitQYXRjaCA2LjAuMTgyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgcmVnZXhwIG9uIG11bHRpLWJ5dGUgY2hhcmFjdGVycywgY291bGQgdHJ5IHRvIHJlYWQgYQorCSAgICBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgbGluZS4KK1NvbHV0aW9uOiAgIERvbid0IGRlY3JlbWVudCBhIHBvaW50ZXIgdG8gYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgbGluZS4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMC4xODMKK1Byb2JsZW06ICAgIExlYWtpbmcgbWVtb3J5IHdoZW4gIjpmdW5jISIgcmVkZWZpbmVzIGEgZnVuY3Rpb24uCitTb2x1dGlvbjogICBGcmVlIHRoZSBmdW5jdGlvbiBuYW1lIHdoZW4gaXQncyBub3QgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjAuMTg0CitQcm9ibGVtOiAgICBMZWFraW5nIG1lbW9yeSB3aGVuIGV4cGFuZGluZyBvcHRpb24gdmFsdWVzLgorU29sdXRpb246ICAgRG9uJ3QgYWx3YXlzIGNvcHkgdGhlIGV4cGFuZGVkIG9wdGlvbiBpbnRvIGFsbG9jYXRlZCBtZW1vcnkuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjAuMTg1CitQcm9ibGVtOiAgICBDcmFzaCBpbiBWaW0gd2hlbiBwYXN0aW5nIGEgc2VsZWN0aW9uIGluIGFub3RoZXIgYXBwbGljYXRpb24sIG9uIGEKKwkgICAgNjQgYml0IG1hY2hpbmUuCitTb2x1dGlvbjogICBGaXggdGhlIGZvcm1hdCBmb3IgYW4gQXRvbSB0byAzMiBiaXRzLiAoUGV0ZXIgRGVycikKK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNi4wLjE4NgorUHJvYmxlbTogICAgWDExOiBUaHJlZSB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB0aGUgY2xpZW50LXNlcnZlciBjb2RlLgorU29sdXRpb246ICAgQWRkIGEgdHlwZWNhc3QgdG8gdW5zaWduZWQgY2hhci4KK0ZpbGVzOgkgICAgc3JjL2lmX3hjbWRzcnYuYworCitQYXRjaCA2LjAuMTg3CitQcm9ibGVtOiAgICAiSSIgaW4gVmlzdWFsIG1vZGUgYW5kIHRoZW4gInUiIHJlcG9ydHMgdG9vIG1hbnkgY2hhbmdlcy4gKEFuZHJldworCSAgICBTdHJ5a2VyKQorCSAgICAiSSIgaW4gVmlzdWFsIGxpbmV3aXNlIG1vZGUgYWRqdXN0cyB0aGUgaW5kZW50IGZvciBubyBhcHBhcmVudAorCSAgICByZWFzb24uCitTb2x1dGlvbjogICBPbmx5IHNhdmUgdGhvc2UgbGluZXMgZm9yIHVuZG8gdGhhdCBhcmUgY2hhbmdlZC4KKwkgICAgRG9uJ3QgY2hhbmdlIHRoZSBpbmRlbnQgYWZ0ZXIgaW5zZXJ0aW5nIGluIFZpc3VhbCBsaW5ld2lzZSBtb2RlLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4wLjE4OAorUHJvYmxlbTogICAgV2luMzI6IEFmdGVyIHBhdGNoIDYuMC4xNjEgc2lnbnMgZGVmaW5lZCBpbiB0aGUgdmltcmMgZmlsZSBkb24ndAorCSAgICB3b3JrLgorU29sdXRpb246ICAgSW5pdGlhbGl6ZSB0aGUgc2lnbiBpY29ucyBhZnRlciBpbml0aWFsaXppbmcgdGhlIEdVSS4gKFZpbmNlCisJICAgIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNi4wLjE4OQorUHJvYmxlbTogICAgVGhlIHNpemUgb2YgdGhlIFZpc3VhbCBhcmVhIGlzbid0IGFsd2F5cyBkaXNwbGF5ZWQgd2hlbiBzY3JvbGxpbmcKKwkgICAgKCdydWxlcicgb2ZmLCAnc2hvd2NtZCcgb24pLiAgQWxzbyBub3Qgd2hlbiB1c2luZyBhIHNlYXJjaAorCSAgICBjb21tYW5kLiAoU3lsdmFpbiBIaXRpZXIpCitTb2x1dGlvbjogICBSZWRpc3BsYXkgdGhlIHNpemUgb2YgdGhlIHNlbGVjdGlvbiBhZnRlciBzaG93aW5nIHRoZSBtb2RlLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4wLjE5MAorUHJvYmxlbTogICAgR1VJOiB3aGVuICdtb3VzZScgaXMgZW1wdHkgYSBjbGljayB3aXRoIHRoZSBtaWRkbGUgYnV0dG9uIHN0aWxsCisJICAgIG1vdmVzIHRoZSBjdXJzb3IuCitTb2x1dGlvbjogICBQYXN0ZSBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluc3RlYWQgb2YgdGhlIG1vdXNlIHBvc2l0aW9uLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjE5MQorUHJvYmxlbTogICAgV2hlbiBubyBzZXJ2ZXJzIGFyZSBhdmFpbGFibGUgc2VydmVybGlzdCgpIGdpdmVzIGFuIGVycm9yIGluc3RlYWQKKwkgICAgb2YgcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZy4gKEhhcmkgS3Jpc2huYSkKK1NvbHV0aW9uOiAgIERvbid0IGdpdmUgYW4gZXJyb3IgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjAuMTkyCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0LCAieWxqIiBnb2VzIHRvIHRoZSB3cm9uZyBjb2x1bW4uIChBbmRyZXcKKwkgICAgTmlraXRpbikKK1NvbHV0aW9uOiAgIFJlc2V0IHRoZSBmbGFnIHRoYXQgd192aXJ0Y29sIGlzIHZhbGlkIHdoZW4gbW92aW5nIHRoZSBjdXJzb3IgYmFjaworCSAgICB0byB0aGUgc3RhcnQgb2YgdGhlIG9wZXJhdGVkIGFyZWEuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMTkzCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0LCBjb2woIi4iKSBhZnRlciB0aGUgZW5kIG9mIHRoZSBsaW5lCisJICAgIHNob3VsZCByZXR1cm4gb25lIGV4dHJhLgorU29sdXRpb246ICAgQWRkIG9uZSB0byB0aGUgY29sdW1uLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMC4xOTQKK1Byb2JsZW06ICAgICItLXJlbW90ZS1zaWxlbnQiIHRyaWVzIHRvIHNlbmQgYSByZXBseSB0byB0aGUgY2xpZW50LCBsaWtlIGl0IHdhcworCSAgICAiLS1yZW1vdGUtd2FpdCIuCitTb2x1dGlvbjogICBQcm9wZXJseSBjaGVjayBmb3IgdGhlIGFyZ3VtZW50LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMC4xOTUKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgYW5kIGEgc2VhcmNoIHN0YXJ0cyBpbiB2aXJ0dWFsIHNwYWNlCisJICAgICI6Y2FsbCBzZWFyY2goJ3gnKSIgZ29lcyB0byB0aGUgd3JvbmcgcG9zaXRpb24uIChFcmljIExvbmcpCitTb2x1dGlvbjogICBSZXNldCBjb2xhZGQgd2hlbiBmaW5kaW5nIGEgbWF0Y2guCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjAuMTk2CitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0LCAnc2VsZWN0aW9uJyBpcyAiZXhjbHVzaXZlIiBhbmQgdmlzdWFsbHkKKwkgICAgc2VsZWN0aW5nIHBhcnQgb2YgYSB0YWIgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgIngiIGpvaW5zIGl0IHdpdGgKKwkgICAgdGhlIHByZXZpb3VzIGxpbmUuICBBbHNvLCB3aGVuIHRoZSBzZWxlY3Rpb24gc3BhbnMgbW9yZSB0aGFuIG9uZQorCSAgICBsaW5lIHRoZSB3aG9sZSB0YWIgaXMgZGVsZXRlZC4KK1NvbHV0aW9uOiAgIFRha2UgY29sYWRkIGludG8gYWNjb3VudCB3aGVuIGFkanVzdGluZyBmb3IgJ3NlbGVjdGlvbicgYmVpbmcKKwkgICAgImV4Y2x1c2l2ZSIuICBBbHNvIGV4cGFuZCBhIHRhYiBpbnRvIHNwYWNlcyB3aGVuIGRlbGV0aW5nIG1vcmUKKwkgICAgdGhhbiBvbmUgbGluZS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMKKworUGF0Y2ggNi4wLjE5NworUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCBhbmQgJ3NlbGVjdGlvbicgaXMgImV4Y2x1c2l2ZSIsICJ2JHgiCisJICAgIGRvZXNuJ3QgZGVsZXRlIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgbGluZS4gKEVyaWMgTG9uZykKK1NvbHV0aW9uOiAgIERvbid0IHJlc2V0IHRoZSBpbmNsdXNpdmUgZmxhZy4gKEhlbG11dCBTdGllZ2xlcikKK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMC4xOTgKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgYW5kICdzaG93YnJlYWsnIGlzIG5vdCBlbXB0eSwgbW92aW5nIHRoZQorCSAgICBjdXJzb3Igb3ZlciB0aGUgbGluZSBicmVhayBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIChFcmljIExvbmcpCitTb2x1dGlvbjogICBNYWtlIGdldHZpc2NvbCgpIGFuZCBnZXR2aXNjb2wyKCkgdXNlIGdldHZ2Y29sKCkgdG8gb2J0YWluIHRoZQorCSAgICB2aXJ0dWFsIGN1cnNvciBwb3NpdGlvbi4gIEFkanVzdCBjb2xhZHZhbmNlKCkgYW5kIG9uZWxlZnQoKSB0bworCSAgICBza2lwIG92ZXIgdGhlICdzaG93YnJlYWsnIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9taXNjMi5jCisKK1BhdGNoIDYuMC4xOTkKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IGNvdWxkIHVzZSBpY29udigpIGFmdGVyIGNhbGxpbmcgaWNvbnZfZW5kKCkuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBTdG9wIGNvbnZlcnRpbmcgaW5wdXQgYW5kIG91dHB1dCBzdHJlYW0gYWZ0ZXIgY2FsbGluZyBpY29udl9lbmQoKS4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4wLjIwMAorUHJvYmxlbTogICAgQSBzY3JpcHQgdGhhdCBzdGFydHMgd2l0aCAiIyFwZXJsIiBpc24ndCByZWNvZ25pemVkIGFzIGEgUGVybAorCSAgICBmaWxldHlwZS4KK1NvbHV0aW9uOiAgIElnbm9yZSBhIG1pc3NpbmcgcGF0aCBpbiBhIHNjcmlwdCBoZWFkZXIuICBBbHNvLCBzcGVlZCB1cAorCSAgICByZWNvZ25pemluZyBzY3JpcHRzIGJ5IHNpbXBsaWZ5aW5nIHRoZSBwYXR0ZXJucyB1c2VkLgorRmlsZXM6CSAgICBydW50aW1lL3NjcmlwdHMudmltCisKK1BhdGNoIDYuMC4yMDEKK1Byb2JsZW06ICAgIFdoZW4gc2Nyb2xsYmluZGluZyBhbmQgZG9pbmcgYSBsb25nIGp1bXAsIHN3aXRjaGluZyB3aW5kb3dzIGp1bXBzCisJICAgIHRvIGFub3RoZXIgcG9zaXRpb24gaW4gdGhlIGZpbGUuICBTY3JvbGxpbmcgYSBmZXcgbGluZXMgYXQgYSB0aW1lCisJICAgIGlzIE9LLiAoSm9oYW5uZXMgWmVsbG5lcikKK1NvbHV0aW9uOiAgIFdoZW4gc2V0dGluZyB3X3RvcGxpbmUgcmVzZXQgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd19ib3RsaW5lIGlzCisJICAgIHZhbGlkLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jCisKK1BhdGNoIDYuMC4yMDIKK1Byb2JsZW06ICAgIFRoZSAiaWNvbj0iIGFyZ3VtZW50IGZvciB0aGUgbWVudSBjb21tYW5kIHRvIGRlZmluZSBhIHRvb2xiYXIgaWNvbgorCSAgICB3aXRoIGEgZmlsZSBkaWRuJ3Qgd29yayBmb3IgR1RLLiAoQ2hyaXN0aWFuIEouIFJvYmluc29uKQorCSAgICBGb3IgTW90aWYgYW5kIEF0aGVuYSBhIGZ1bGwgcGF0aCB3YXMgcmVxdWlyZWQuCitTb2x1dGlvbjogICBTZWFyY2ggdGhlIGljb24gZmlsZSB1c2luZyB0aGUgc3BlY2lmaWVkIHBhdGguICBFeHBhbmQgZW52aXJvbm1lbnQKKwkgICAgdmFyaWFibGVzIGluIHRoZSBmaWxlIG5hbWUuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNi4wLjIwMworUHJvYmxlbTogICAgQ2FuIGNoYW5nZSAnZmlsZWZvcm1hdCcgZXZlbiB0aG91Z2ggJ21vZGlmaWFibGUnIGlzIG9mZi4KKwkgICAgKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBDb3JyZWN0IGNoZWNrIGZvciBraW5kIG9mIHNldCBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjIwNAorUHJvYmxlbTogICAgIjp1bmxldCIgZG9lc24ndCB3b3JrIGZvciB2YXJpYWJsZXMgd2l0aCBjdXJseSBicmFjZXMuIChUaG9tYXMKKwkgICAgU2NvdHQgVXJiYW4pCitTb2x1dGlvbjogICBIYW5kbGUgdmFyaWFibGUgbmFtZXMgd2l0aCBjdXJseSBicmFjZXMgcHJvcGVybHkuIChWaW5jZSBOZWdyaSkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjAuMjA1IChleHRyYSkKK1Byb2JsZW06ICAgICJndmltIC1mIiBzdGlsbCBmb3JrcyB3aGVuIHVzaW5nIHRoZSBiYXRjaCBzY3JpcHQgdG8gc3RhcnQgVmltLgorU29sdXRpb246ICAgQWRkIGFuIGFyZ3VtZW50IHRvICJzdGFydCIgdG8gdXNlIGEgZm9yZWdyb3VuZCBzZXNzaW9uIChNaWNoYWVsCisJICAgIEdlZGRlcykKK0ZpbGVzOgkgICAgc3JjL2Rvc2luc3QuYworCitQYXRjaCA2LjAuMjA2CitQcm9ibGVtOiAgICBVbml4OiBpZiBleHBhbmRpbmcgYSB3aWxkY2FyZCBpbiBhIGZpbGUgbmFtZSByZXN1bHRzIGluIGEKKwkgICAgd2lsZGNhcmQgY2hhcmFjdGVyIGFuZCB0aGVyZSBhcmUgbW9yZSBwYXJ0cyBpbiB0aGUgcGF0aCB3aXRoIGEKKwkgICAgd2lsZGNhcmQsIGl0IGlzIGV4cGFuZGVkIGFnYWluLgorCSAgICBXaW5kb3dzOiAiOmVkaXQgXFthYmNdIiBjb3VsZCBuZXZlciBlZGl0IHRoZSBmaWxlICJbYWJjXSIuCitTb2x1dGlvbjogICBEb24ndCBleHBhbmQgd2lsZGNhcmRzIGluIGFscmVhZHkgZXhwYW5kZWQgcGFydHMuCisJICAgIERvbid0IHJlbW92ZSBiYWNrc2xhc2hlcyB1c2VkIHRvIGVzY2FwZSB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIGEKKwkgICAgd2lsZGNhcmQ7IGNhbiBlZGl0ICJbYWJjXSIgaWYgJ1snIGlzIHJlbW92ZWQgZnJvbSAnaXNmbmFtZScuCitGaWxlczoJICAgIHNyYy9taXNjMS5jLCBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMC4yMDcgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBzaG9ydGN1dHMgYW5kIHN0YXJ0IG1lbnUgZW50cmllcyBsZXQgVmltIHN0YXJ0dXAgaW4gdGhlCisJICAgIGRlc2t0b3AgZGlyZWN0b3J5LCB3aGljaCBpcyBub3QgdmVyeSB1c2VmdWwuCitTb2x1dGlvbjogICBMZXQgc2hvcnRjdXRzIHN0YXJ0IFZpbSBpbiAkSE9NRSBvciAkSE9NRURJUiRIT01FUEFUSC4KK0ZpbGVzOgkgICAgc3JjL2Rvc2luc3QuYworCitQYXRjaCA2LjAuMjA4CitQcm9ibGVtOiAgICBHVUk6IFdoZW4gdXNpbmcgYSBrZXltYXAgYW5kIHRoZSBjdXJzb3IgaXMgbm90IGJsaW5raW5nLCBDVFJMLV4gaW4KKwkgICAgSW5zZXJ0IG1vZGUgZG9lc24ndCBkaXJlY3RseSBjaGFuZ2UgdGhlIGN1cnNvciBjb2xvci4gIChBbGV4CisJICAgIFNvbG93KQorU29sdXRpb246ICAgRm9yY2UgYSByZWRyYXcgb2YgdGhlIGN1cnNvciBhZnRlciBDVFJMLV4uCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4wLjIwOQorUHJvYmxlbTogICAgR1VJIEdUSzogQWZ0ZXIgc2VsZWN0aW5nIGEgJ2d1aWZvbnQnIHdpdGggdGhlIGZvbnQgZGlhbG9nIHRoZXJlCisJICAgIGFyZSByZWRyYXcgcHJvYmxlbXMgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIFNlcGFyYXRlIHRoZSBmb250IGRpYWxvZyBmcm9tIHNldHRpbmcgdGhlIG5ldyBmb250IG5hbWUgdG8gYXZvaWQKKwkgICAgdGhhdCAiKiIgaXMgdXNlZCB0byBmaW5kIHdpZGUgYW5kIGJvbGQgZm9udHMuCisJICAgIFdoZW4gcmVkcmF3aW5nIGV4dHJhIGNoYXJhY3RlcnMgZm9yIHRoZSBib2xkIHRyaWNrLCB0YWtlIGNhcmUgb2YKKwkgICAgVVRGLTggY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX2d0a194MTEuYywgc3JjL29wdGlvbi5jLCBzcmMvcHJvdG8vZ3VpLnBybywKKwkgICAgc3JjL3Byb3RvL2d1aV9ndGtfeDExLnBybworCitQYXRjaCA2LjAuMjEwCitQcm9ibGVtOiAgICBBZnRlciBwYXRjaCA2LjAuMTY3IGl0J3Mgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIGVkaXQgYSBoZWxwIGZpbGUgaW4KKwkgICAgYW5vdGhlciBlbmNvZGluZyB0aGFuIGxhdGluMS4KK1NvbHV0aW9uOiAgIExldCB0aGUgIisrZW5jPSIgYXJndW1lbnQgb3ZlcnJ1bGUgdGhlIGVuY29kaW5nLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4wLjIxMQorUHJvYmxlbTogICAgV2hlbiByZWFkaW5nIGEgZmlsZSBmYWlscywgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgYnV0IGl0IG1pZ2h0IHN0aWxsCisJICAgIGJlIHBvc3NpYmxlIHRvIHdyaXRlIGl0IHdpdGggIjp3IiBsYXRlci4gIFRoZSBvcmlnaW5hbCBmaWxlIGlzCisJICAgIGxvc3QgdGhlbi4gKFN0ZXZlIEFtZXJpZ2UpCitTb2x1dGlvbjogICBTZXQgdGhlICdyZWFkb25seScgb3B0aW9uIGZvciB0aGUgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4wLjIxMgorUHJvYmxlbTogICAgR1VJIEdUSzogY29uZmlybSgiZm9vIiwgIiIpIGNhdXNlcyBhIGNyYXNoLgorU29sdXRpb246ICAgRG9uJ3QgbWFrZSBhIG5vbi1leGlzdGluZyBidXR0b24gdGhlIGRlZmF1bHQuICBBZGQgYSBkZWZhdWx0ICJPSyIKKwkgICAgYnV0dG9uIGlmIG5vbmUgaXMgc3BlY2lmaWVkLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZ3VpX2d0ay5jCisKK1BhdGNoIDYuMC4yMTMKK1Byb2JsZW06ICAgIFdoZW4gYSBmaWxlIG5hbWUgY29udGFpbnMgdW5wcmludGFibGUgY2hhcmFjdGVycywgQ1RSTC1HIGFuZCBvdGhlcgorCSAgICBjb21tYW5kcyBkb24ndCB3b3JrIHdlbGwuCitTb2x1dGlvbjogICBUdXJuIHVucHJpbnRhYmxlIGludG8gcHJpbnRhYmxlIGNoYXJhY3RlcnMuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2NoYXJzZXQuYworCitQYXRjaCA2LjAuMjE0CitQcm9ibGVtOiAgICBXaGVuIHRoZXJlIGlzIGEgYnVmZmVyIHdpdGhvdXQgYSBuYW1lLCBlbXB0eSBlbnRyaWVzIGFwcGVhciBpbiB0aGUKKwkgICAganVtcGxpc3Qgc2F2ZWQgaW4gdGhlIHZpbWluZm8gZmlsZS4KK1NvbHV0aW9uOiAgIERvbid0IHdyaXRlIGp1bXBsaXN0IGVudHJpZXMgd2l0aG91dCBhIGZpbGUgbmFtZS4KK0ZpbGVzOgkgICAgc3JjL21hcmsuYworCitQYXRjaCA2LjAuMjE1CitQcm9ibGVtOiAgICBBZnRlciB1c2luZyAiLyIgZnJvbSBWaXN1YWwgbW9kZSB0aGUgUGFzdGUgbWVudSBhbmQgVG9vbGJhcgorCSAgICBlbnRyaWVzIGRvbid0IHdvcmsuICBQYXN0aW5nIHdpdGggdGhlIG1pZGRsZSBtb3VzZSBkb2Vzbid0IHdvcmsKKwkgICAgYW5kIG1vZGVsZXNzIHNlbGVjdGlvbiBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBVc2UgdGhlIGNvbW1hbmQgbGluZSBtb2RlIG1lbnVzIGFuZCB1c2UgdGhlIG1vdXNlIGxpa2UgaW4gdGhlCisJICAgIGNvbW1hbmQgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvbWVudS5jLCBzcmMvdWkuYworCitQYXRjaCA2LjAuMjE2CitQcm9ibGVtOiAgICBBZnRlciByZWxvYWRpbmcgYSBmaWxlLCBkaXNwbGF5ZWQgaW4gYW5vdGhlciB3aW5kb3cgdGhhbiB0aGUKKwkgICAgY3VycmVudCBvbmUsIHdoaWNoIHdhcyBjaGFuZ2VkIG91dHNpZGUgb2YgVmltIHRoZSBwYXJ0IG9mIHRoZSBmaWxlCisJICAgIGFyb3VuZCB0aGUgY3Vyc29yIHNldCBieSBhdXRvY29tbWFuZHMgbWF5IGJlIGRpc3BsYXllZCwgYnV0CisJICAgIGp1bXBpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgY3Vyc29yIHBvc2l0aW9uIHdoZW4gZW50ZXJpbmcgdGhlCisJICAgIHdpbmRvdyBhZ2Fpbi4KK1NvbHV0aW9uOiAgIFJlc3RvcmUgdGhlIHRvcGxpbmUgb2YgdGhlIHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4yMTcKK1Byb2JsZW06ICAgIFdoZW4gZ2V0dGluZyBoZWxwIGZyb20gYSBoZWxwIGZpbGUgdGhhdCB3YXMgdXNlZCBiZWZvcmUsIGFuIGVtcHR5CisJICAgIHVubGlzdGVkIGJ1ZmZlciByZW1haW5zIGluIHRoZSBidWZmZXIgbGlzdC4gKEVyaWMgTG9uZykKK1NvbHV0aW9uOiAgIFdpcGUgb3V0IHRoZSBidWZmZXIgdXNlZCB0byBkbyB0aGUgdGFnIGp1bXAgZnJvbS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZXhfY21kcy5jLCBzcmMvcHJvdG8vYnVmZmVyLnBybworCitQYXRjaCA2LjAuMjE4CitQcm9ibGVtOiAgICBXaXRoIGV4cGxvcmVyIHBsdWdpbjogInZpbSAtbyBmaWxlbmFtZSBkaXJuYW1lIiBkb2Vzbid0IGxvYWQgdGhlCisJICAgIGV4cGxvcmVyIHdpbmRvdyB1bnRpbCBlbnRlcmluZyB0aGUgd2luZG93LgorU29sdXRpb246ICAgQ2FsbCBzOkVkaXREaXIoKSBmb3IgZWFjaCB3aW5kb3cgYWZ0ZXIgc3RhcnRpbmcgdXAuCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbQorCitQYXRjaCA2LjAuMjE5CitQcm9ibGVtOiAgICAiOnNldGxvY2FsIiBhbmQgIjpzZXRnbG9iYWwiLCB3aXRob3V0IGFyZ3VtZW50cywgZGlzcGxheSB0ZXJtaW5hbAorCSAgICBvcHRpb25zLiAoWmRlbmVrIFNla2VyYSkKK1NvbHV0aW9uOiAgIFNraXAgdGVybWluYWwgb3B0aW9ucyBmb3IgdGhlc2UgdHdvIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjIyMAorUHJvYmxlbTogICAgQWZ0ZXIgcGF0Y2ggNi4wLjIxOCBnZXQgYSBiZWVwIG9uIHN0YXJ0dXAuIChNdXJhb2thIFRhcm8pCitTb2x1dGlvbjogICBEb24ndCB0cnkgZ29pbmcgdG8gYW5vdGhlciB3aW5kb3cgd2hlbiB0aGVyZSBpc24ndCBvbmUuCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbQorCitQYXRjaCA2LjAuMjIxCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6YmRlbCIgYW5kIGFsbCBvdGhlciBidWZmZXJzIGFyZSB1bmxvYWRlZCB0aGUgbG93ZXN0CisJICAgIG51bWJlcmVkIGJ1ZmZlciBpcyBqdW1wZWQgdG8gaW5zdGVhZCBvZiB0aGUgbW9zdCByZWNlbnQgb25lLiAoRGF2ZQorCSAgICBDZWNpbCkKK1NvbHV0aW9uOiAgIFByZWZlciBhbiB1bmxvYWRlZCBidWZmZXIgZnJvbSB0aGUganVtcGxpc3QuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjAuMjIyCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0IGFuZCB1c2luZyBhdXRvaW5kZW50LCBwcmVzc2luZyBFc2MgYWZ0ZXIKKwkgICAgc3RhcnRpbmcgYSBuZXcgbGluZSBsZWF2ZXMgYmVoaW5kIHBhcnQgb2YgdGhlIGF1dG9pbmRlbnQuIChIZWxtdXQKKwkgICAgU3RpZWdsZXIpCitTb2x1dGlvbjogICBBZnRlciBkZWxldGluZyB0aGUgbGFzdCBjaGFyIGluIHRoZSBsaW5lIGFkanVzdCB0aGUgY3Vyc29yCisJICAgIHBvc2l0aW9uIGluIGRlbF9ieXRlcygpLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYywgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4yMjMKK1Byb2JsZW06ICAgIFdoZW4gc3BsaXR0aW5nIGEgd2luZG93IHRoYXQgY29udGFpbnMgdGhlIGV4cGxvcmVyLCBoaXR0aW5nIENSIG9uCisJICAgIGEgZmlsZSBuYW1lIGdpdmVzIGVycm9yIG1lc3NhZ2VzLgorU29sdXRpb246ICAgU2V0IHRoZSB3aW5kb3cgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyB0aGUgd2luZG93LgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0KKworUGF0Y2ggNi4wLjIyNAorUHJvYmxlbTogICAgV2hlbiAnc2lkZXNjcm9sbCcgYW5kICdzaWRlc2Nyb2xsb2ZmJyBhcmUgc2V0IGluIGEgbmFycm93IHdpbmRvdworCSAgICB0aGUgdGV4dCBtYXkganVtcCBsZWZ0LXJpZ2h0IGFuZCB0aGUgY3Vyc29yIGlzIGRpc3BsYXllZCBpbiB0aGUKKwkgICAgd3JvbmcgcG9zaXRpb24uIChBcmljIEJsdW1lcikKK1NvbHV0aW9uOiAgIFdoZW4gdGhlcmUgaXMgbm90IGVub3VnaCByb29tLCBjb21wdXRlIHRoZSBsZWZ0IGNvbHVtbiBmb3IgdGhlCisJICAgIHdpbmRvdyB0byBwdXQgdGhlIGN1cnNvciBpbiB0aGUgbWlkZGxlLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMC4yMjUKK1Byb2JsZW06ICAgIEluIFZpc3VhbCBtb2RlICJnayIgZ2V0cyBzdHVjayBpbiBhIGNsb3NlZCBmb2xkLiAoU3JpbmF0aAorCSAgICBBdmFkaGFudWxhKQorU29sdXRpb246ICAgQmVoYXZlIGRpZmZlcmVudGx5IGluIGEgY2xvc2VkIGZvbGQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjAuMjI2CitQcm9ibGVtOiAgICBXaGVuIGRvaW5nICI6cmVjb3ZlciBmaWxlIiBnZXQgdGhlIEFUVEVOVElPTiBwcm9tcHQuCisJICAgIEFmdGVyIHJlY292ZXJpbmcgdGhlIHNhbWUgZmlsZSBmaXZlIHRpbWVzIGdldCBhIHJlYWQgZXJyb3Igb3IgYQorCSAgICBjcmFzaC4gIChBbGV4IERhdmlzKQorU29sdXRpb246ICAgU2V0IHRoZSByZWNvdmVyeW1vZGUgZmxhZyBiZWZvcmUgc2V0dGluZyB0aGUgZmlsZSBuYW1lLgorCSAgICBDb3JyZWN0IHRoZSBhbW91bnQgb2YgdXNlZCBtZW1vcnkgZm9yIHRoZSBzaXplIG9mIGJsb2NrIHplcm8uCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMC4yMjcgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIFJJU0MgT1MgcG9ydCBoYXMgc2V2ZXJhbCBwcm9ibGVtcy4KK1NvbHV0aW9uOiAgIFVwZGF0ZSB0aGUgbWFrZWZpbGUgYW5kIGZpeCBzb21lIG9mIHRoZSBwcm9ibGVtcy4gKEFuZHkgV2luZ2F0ZSkKK0ZpbGVzOgkgICAgc3JjL01ha2Vfcm8ubWFrLCBzcmMvb3NfcmlzY29zLmMsIHNyYy9vc19yaXNjb3MuaCwKKwkgICAgc3JjL3Byb3RvL29zX3Jpc2Nvcy5wcm8sIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjAuMjI4CitQcm9ibGVtOiAgICBBZnRlciBwdXR0aW5nIHRleHQgaW4gVmlzdWFsIG1vZGUgdGhlICddIG1hcmsgaXMgbm90IGF0IHRoZSBlbmQgb2YKKwkgICAgdGhlIHB1dCB0ZXh0LgorCSAgICBVbmRvIGRvZXNuJ3Qgd29yayBwcm9wZXJseSB3aGVuIHB1dHRpbmcgYSB3b3JkIGludG8gYSBWaXN1YWwKKwkgICAgc2VsZWN0aW9uIHRoYXQgc3BhbnMgbW9yZSB0aGFuIG9uZSBsaW5lLgorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgJ10gbWFyayBmb3IgdGhlIGRlbGV0aW5nIHRoZSBWaXN1YWxseSBzZWxlY3RlZCB0ZXh0LgorCSAgICAjaWZkZWYgY29kZSB0aGF0IGRlcGVuZHMgb24gRkVBVF9WSVNVQUwgcHJvcGVybHkuCisJICAgIEFsc28gZml4IHRoYXQgImQiIGNyb3NzaW5nIGxpbmUgYm91bmRhcnkgcHV0cyAnWyBqdXN0IGJlZm9yZQorCSAgICBkZWxldGVkIHRleHQuCisJICAgIEZpeCB1bmRvIGJ5IHNhdmluZyBhbGwgZGVsZXRlZCBsaW5lcyBhdCBvbmNlLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2dsb2JhbHMuaCwgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMsCisJICAgIHNyYy9zdHJ1Y3RzLmgsIHNyYy92aW0uaAorCitQYXRjaCA2LjAuMjI5CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlOiBXaXRoICdtJyBpbiAnZm9ybWF0b3B0aW9ucycsIGZvcm1hdHRpbmcgZG9lc24ndCBicmVhaworCSAgICBhdCBhIG11bHRpLWJ5dGUgY2hhciBmb2xsb3dlZCBieSBhbiBBU0NJSSBjaGFyLCBhbmQgdGhlIG90aGVyIHdheQorCSAgICBhcm91bmQuIChNdXJhb2thIFRhcm8pCisJICAgIFdoZW4gam9pbmluZyBsaW5lcyBhIHNwYWNlIGlzIGluc2VydGVkIGJldHdlZW4gbXVsdGktYnl0ZQorCSAgICBjaGFyYWN0ZXJzLCB3aGljaCBpcyBub3QgYWx3YXlzIHdhbnRlZC4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBicmVha3BvaW50LgorCSAgICBEb24ndCBpbnNlcnQgYSBzcGFjZSBiZWZvcmUgb3IgYWZ0ZXIgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB3aGVuCisJICAgIGpvaW5pbmcgbGluZXMgYW5kIHRoZSAnTScgZmxhZyBpcyBpbiAnZm9ybWF0b3B0aW9ucycuICBEb24ndAorCSAgICBpbnNlcnQgYSBzcGFjZSBiZXR3ZWVuIG11bHRpLWJ5dGUgY2hhcmFjdGVycyB3aGVuIHRoZSAnQicgZmxhZyBpcworCSAgICBpbiAnZm9ybWF0b3B0aW9ucycuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9vcHMuYywgc3JjL29wdGlvbi5oCisKK1BhdGNoIDYuMC4yMzAKK1Byb2JsZW06ICAgIFRoZSAiOiIgdXNlZCBhcyBhIG1vdGlvbiBhZnRlciBhbiBvcGVyYXRvciBpcyBleGNsdXNpdmUsIGJ1dAorCSAgICBzb21ldGltZXMgaXQgc2hvdWxkIGJlIGluY2x1c2l2ZS4KK1NvbHV0aW9uOiAgIE1ha2UgdGhlICJ2IiBpbiBiZXR3ZWVuIGFuIG9wZXJhdG9yIGFuZCBtb3Rpb24gdG9nZ2xlCisJICAgIGluY2x1c2l2ZS9leGNsdXNpdmUuIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9tb3Rpb24udHh0LCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjIzMQorUHJvYmxlbTogICAgImdkIiBhbmQgImdEIiBkb24ndCB3b3JrIHdoZW4gdGhlIHZhcmlhYmxlIG1hdGNoZXMgaW4gYSBjb21tZW50CisJICAgIGp1c3QgYWJvdmUgdGhlIG1hdGNoIHRvIGJlIGZvdW5kLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIENvbnRpbnVlIHNlYXJjaGluZyBpbiB0aGUgZmlyc3QgY29sdW1uIGJlbG93IHRoZSBjb21tZW50LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4wLjIzMgorUHJvYmxlbTogICAgInZpbSAtLXZlcnNpb24iIHByaW50cyBvbiBzdGRlcnIgd2hpbGUgInZpbSAtLWhlbHAiIHByaW50cyBvbgorCSAgICBzdGRvdXQuCitTb2x1dGlvbjogICBNYWtlICJ2aW0gLS12ZXJzaW9uIiB1c2Ugc3Rkb3V0LgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9zdGFydGluZy50eHQsIHNyYy9nbG9iYWxzLmgsIHNyYy9tYWluLmMsIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4wLjIzMworUHJvYmxlbTogICAgIlwxXHssOH0iIGluIGEgcmVnZXhwIGlzIG5vdCBhbGxvd2VkLCBidXQgaXQgc2hvdWxkIHdvcmssIGJlY2F1c2UKKwkgICAgdGhlcmUgaXMgYW4gdXBwZXIgbGltaXQuICAoSmltIEJhdHRsZSkKK1NvbHV0aW9uOiAgIEFsbG93IHVzaW5nICJce21pbixtYXh9IiBhZnRlciBhbiBhdG9tIHRoYXQgY2FuIGJlIGVtcHR5IGlmIHRoZXJlCisJICAgIGlzIGFuIHVwcGVyIGxpbWl0LgorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4wLjIzNAorUHJvYmxlbTogICAgSXQncyBub3QgZWFzeSB0byBzZXQgdGhlIGN1cnNvciBwb3NpdGlvbiB3aXRob3V0IG1vZGlmeWluZyBtYXJrcy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgY3Vyc29yKCkgZnVuY3Rpb24uIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ldmFsLnR4dCwgc3JjL2V2YWwuYworCitQYXRjaCA2LjAuMjM1CitQcm9ibGVtOiAgICBXaGVuIHdyaXRpbmcgYSBmaWxlIGFuZCByZW5hbWluZyB0aGUgb3JpZ2luYWwgZmlsZSB0byBtYWtlIHRoZQorCSAgICBiYWNrdXAsIHBlcm1pc3Npb25zIGNvdWxkIGNoYW5nZSB3aGVuIHNldHRpbmcgdGhlIG93bmVyLgorU29sdXRpb246ICAgT25seSBzZXQgdGhlIG93bmVyIHdoZW4gaXQncyBuZWVkZWQgYW5kIHNldCB0aGUgcGVybWlzc2lvbnMgYWdhaW4KKwkgICAgYWZ0ZXJ3YXJkcy4KKwkgICAgV2hlbiAnYmFja3VwY29weScgaXMgImF1dG8iIGNoZWNrIHRoYXQgdGhlIG93bmVyIGFuZCBwZXJtaXNzaW9ucworCSAgICBvZiBhIG5ld2x5IGNyZWF0ZWQgZmlsZSBjYW4gYmUgc2V0IHByb3Blcmx5LgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4wLjIzNgorUHJvYmxlbTogICAgIjplZGl0IiB3aXRob3V0IGFyZ3VtZW50IHNob3VsZCBtb3ZlIGN1cnNvciB0byBsaW5lIDEgaW4gVmkKKwkgICAgY29tcGF0aWJsZSBtb2RlLgorU29sdXRpb246ICAgQWRkICdnJyBmbGFnIHRvICdjcG9wdGlvbnMnLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL2V4X2RvY21kLmMsIHNyYy9vcHRpb24uaAorCitQYXRjaCA2LjAuMjM3CitQcm9ibGVtOiAgICBJbiBhIEMgZmlsZSwgdXNpbmcgdGhlIGZpbGV0eXBlIHBsdWdpbiwgcmUtaW5kZW50aW5nIGEgY29tbWVudAorCSAgICB3aXRoIHR3byBzcGFjZXMgYWZ0ZXIgdGhlIG1pZGRsZSAiKiIgZG9lc24ndCBhbGlnbiBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSBhIG1pZGRsZSBlbnRyeSBmcm9tIGEgc3RhcnQvbWlkZGxlL2VuZCB0byBsaW5lIHVwIHdpdGgKKwkgICAgdGhlIHN0YXJ0IG9mIHRoZSBjb21tZW50IHdoZW4gdGhlIHN0YXJ0IHBhcnQgZG9lc24ndCBtYXRjaCB3aXRoCisJICAgIHRoZSBhY3R1YWwgY29tbWVudCBzdGFydC4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4wLjIzOAorUHJvYmxlbTogICAgVXNpbmcgYSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgd2l0aCBhIHN1YnN0aXR1dGUoKSBjYWxsIGluIHRoZQorCSAgICBzdWJzdGl0dXRpb24gZXhwcmVzc2lvbiBjYXVzZXMgZXJyb3JzLiAoU3JpbmF0aCBBdmFkaGFudWxhKQorU29sdXRpb246ICAgU2F2ZSBhbmQgcmVzdG9yZSBwb2ludGVycyB3aGVuIGRvaW5nIHN1YnN0aXR1dGlvbiByZWN1cnNpdmVseS4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMC4yMzkKK1Byb2JsZW06ICAgIFVzaW5nICJBIiB0byBhcHBlbmQgYWZ0ZXIgYSBWaXN1YWxseSBzZWxlY3RlZCBibG9jayB3aGljaCBpcyBhZnRlcgorCSAgICB0aGUgZW5kIG9mIHRoZSBsaW5lLCBzcGFjZXMgYXJlIGluc2VydGVkIGluIHRoZSB3cm9uZyBsaW5lIGFuZAorCSAgICBvdGhlciB1bmV4cGVjdGVkIGVmZmVjdHMuIChNaWNoYWVsIE5hdW1hbm4pCitTb2x1dGlvbjogICBEb24ndCBhZHZhbmNlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgbGluZS4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMC4yNDAKK1Byb2JsZW06ICAgIFdpbjMyOiBidWlsZGluZyB3aXRoIFB5dGhvbiAyLjIgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgQWRkIHN1cHBvcnQgZm9yIFB5dGhvbiAyLjIgd2l0aCBkeW5hbWljIGxpbmtpbmcuIChQYXVsIE1vb3JlKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4wLjI0MQorUHJvYmxlbTogICAgV2luMzI6IEV4cGFuZGluZyB0aGUgb2xkIHZhbHVlIG9mIGFuIG9wdGlvbiB0aGF0IGlzIGEgcGF0aCB0aGF0CisJICAgIHN0YXJ0cyB3aXRoIGEgYmFja3NsYXNoLCBhbiBleHRyYSBiYWNrc2xhc2ggaXMgaW5zZXJ0ZWQuCitTb2x1dGlvbjogICBPbmx5IGluc2VydCBiYWNrc2xhc2hlcyB3aGVyZSBuZWVkZWQuCisJICAgIEFsc28gaGFuZGxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBwcm9wZXJseSB3aGVuIHJlbW92aW5nCisJICAgIGJhY2tzbGFzaGVzLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjI0MgorUHJvYmxlbTogICAgR1VJOiBPbiBhIHN5c3RlbSB3aXRoIGFuIEV4Y2VlZCBYIHNlcnZlciBzb21ldGltZXMgZ2V0IGEgIkJhZAorCSAgICBXaW5kb3ciIGVycm9yLiAoVG9tbWkgTWFla2l0YWxvKQorU29sdXRpb246ICAgV2hlbiBmb3JraW5nLCB1c2UgYSBwaXBlIHRvIHdhaXQgaW4gdGhlIHBhcmVudCBmb3IgdGhlIGNoaWxkIHRvCisJICAgIGhhdmUgZG9uZSB0aGUgc2V0c2lkKCkgY2FsbC4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMC4yNDMKK1Byb2JsZW06ICAgIFVuaXg6ICJ2aW0gLS12ZXJzaW9uIiBvdXRwdXRzIGEgTkwgYmVmb3JlIHRoZSBsYXN0IGxpbmUgaW5zdGVhZCBvZgorCSAgICBhZnRlciBpdC4gKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBTZW5kIHRoZSBOTCB0byB0aGUgc2FtZSBvdXRwdXQgc3RyZWFtIGFzIHRoZSB0ZXh0LgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvb3NfdW5peC5jLCBzcmMvcHJvdG8vbWVzc2FnZS5wcm8KKworUGF0Y2ggNi4wLjI0NAorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogUHJvYmxlbXMgd2l0aCAoaWxsZWdhbCkgVVRGLTggY2hhcmFjdGVycyBpbiBtZW51IGFuZAorCSAgICBmaWxlIG5hbWUgKGUuZy4sIGljb24gdGV4dCwgc3RhdHVzIGxpbmUpLgorU29sdXRpb246ICAgQ29ycmVjdGx5IGhhbmRsZSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzLiAgQ2F0Y2ggaWxsZWdhbCBVVEYtOAorCSAgICBjaGFyYWN0ZXJzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCA8eHg+LiAgVHJ1bmNhdGluZyB0aGUgc3RhdHVzIGxpbmUKKwkgICAgd2Fzbid0IGRvbmUgY29ycmVjdGx5IGF0IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCisJICAgIEFkZGVkIGNvcnJlY3RfY21kc3BvcygpIGFuZCB0cmFuc2NoYXJfYnl0ZSgpLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9jaGFyc2V0LmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZ3VpLmMsCisJICAgIHNyYy9tZXNzYWdlLmMsIHNyYy9zY3JlZW4uYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMC4yNDUKK1Byb2JsZW06ICAgIEFmdGVyIHVzaW5nIGEgY29sb3Igc2NoZW1lLCBzZXR0aW5nIHRoZSAnYmFja2dyb3VuZCcgb3B0aW9uIG1pZ2h0CisJICAgIG5vdCB3b3JrLiAoUGV0ZXIgSG9yc3QpCitTb2x1dGlvbjogICBEaXNhYmxlIHRoZSBjb2xvciBzY2hlbWUgaWYgaXQgc3dpdGNoZXMgJ2JhY2tncm91bmQnIGJhY2sgdG8gdGhlCisJICAgIHdyb25nIHZhbHVlLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4wLjI0NgorUHJvYmxlbTogICAgIjplY2hvbXNnIiBkaWRuJ3QgdXNlIHRoZSBoaWdobGlnaHRpbmcgc2V0IGJ5ICI6ZWNob2hsIi4gKEdhcnkKKwkgICAgSG9sbG93YXkpCitTb2x1dGlvbjogICBVc2UgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzIGZvciB0aGUgbWVzc2FnZS4gKFllZ2FwcGFuCisJICAgIExha3NobWFuYW4pCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjI0NworUHJvYmxlbTogICAgR1RLIEdVSTogQ2FuJ3QgdXNlIGd2aW0gaW4gYSBrcGFydCB3aWRnZXQuCitTb2x1dGlvbjogICBBZGQgdGhlICItLWVjaG8td2lkIiBhcmd1bWVudCB0byBsZXQgVmltIGVjaG8gdGhlIHdpbmRvdyBJRCBvbgorCSAgICBzdGRvdXQuIChQaGlsaXBwZSBGcmVteSkKK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvc3RhcnRpbmcudHh0LCBzcmMvZ2xvYmFscy5oLCBzcmMvZ3VpX2d0a194MTEuYywKKwkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjAuMjQ4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGNvbXByZXNzZWQgaGVscCBmaWxlcyBhbmQgJ2VuY29kaW5nJyBpc24ndCAibGF0aW4xIiwKKwkgICAgVmltIGNvbnZlcnRzIHRoZSBoZWxwIGZpbGUgYmVmb3JlIGRlY29tcHJlc3NpbmcuIChEYXZpZCBSZXZpZWpvKQorU29sdXRpb246ICAgRG9uJ3QgY29udmVydCBhIGhlbHAgZmlsZSB3aGVuICdiaW5hcnknIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4yNDkKK1Byb2JsZW06ICAgICJ2aW0gLXQgZWRpdCAtYyAnc3RhIGV4X2hlbHAnIiBkb2Vzbid0IG1vdmUgY3Vyc29yIHRvIGVkaXQoKS4KK1NvbHV0aW9uOiAgIERvbid0IHNldCB0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBsaW5lIGZvciAiLWMiIGFyZ3VtZW50cyB3aGVuCisJICAgIHRoZXJlIGFsc28gaXMgYSAiLXQiIGFyZ3VtZW50LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMC4yNTAgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjaW50b3NoOiBWYXJpb3VzIHByb2JsZW1zIHdoZW4gY29tcGlsaW5nLgorU29sdXRpb246ICAgVmFyaW91cyBmaXhlcywgbW9zdGx5ICNpZmRlZnMuIChEYW55IFN0LiBBbWFudCkKK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYywgc3JjL21haW4uYywgc3JjL21pc2MyLmMsIHNyYy9vc19tYWMuaCwKKwkgICAgc3JjL29zX21hYy5wYnByb2ovcHJvamVjdC5wYnhwcm9qLCBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMC4yNTEgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjaW50b3NoOiBtZW51IHNob3J0Y3V0cyBhcmUgbm90IHZlcnkgY2xlYXIuCitTb2x1dGlvbjogICBTaG93IHRoZSBzaG9ydGN1dCB3aXRoIHRoZSBNYWMgY2xvdmVyIHN5bWJvbC4gKHJhaW5kb2cpCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4wLjI1MgorUHJvYmxlbTogICAgV2hlbiBhIHVzZXIgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCAiYWJvcnQiLCBhbiBlcnJvciB0aGF0IGlzCisJICAgIG5vdCBpbnNpZGUgaWYvZW5kaWYgb3Igd2hpbGUvZW5kd2hpbGUgZG9lc24ndCBhYm9ydCB0aGUgZnVuY3Rpb24uCisJICAgIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgRG9uJ3QgcmVzZXQgZGlkX2Vtc2cgd2hlbiB0aGUgZnVuY3Rpb24gaXMgdG8gYmUgYWJvcnRlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4wLjI1MworUHJvYmxlbTogICAgV2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LCBhZnRlciAiPEMtTz46ZWRpdCBmaWxlIiB0aGUgbmV4dCA8Qy1PPgorCSAgICBkb2Vzbid0IHdvcmsuIChCZW5qaSBGaXNoZXIpICA8Qy1MPiBoYXMgdGhlIHNhbWUgcHJvYmxlbS4KK1NvbHV0aW9uOiAgIFJlc2V0IG5lZWRfc3RhcnRfaW5zZXJ0bW9kZSBvbmNlIGluIGVkaXQoKS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjAuMjU0IChleHRyYSkKK1Byb2JsZW06ICAgIEJvcmxhbmQgQysrIDUuNTogQ2hlY2tpbmcgZm9yIHN0YWNrIG92ZXJmbG93IGRvZXNuJ3Qgd29yaworCSAgICBjb3JyZWN0bHkuICBNYXR0ZXJzIHdoZW4gdXNpbmcgYSBjb21wbGljYXRlZCByZWdleHAuCitTb2x1dGlvbjogICBSZW1vdmUgLU4tIGZyb20gTWFrZV9iYzUubWFrLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvTWFrZV9iYzUubWFrCisKK1BhdGNoIDYuMC4yNTUgKGV4dHJhKSAoZGVwZW5kcyBvbiBwYXRjaCA2LjAuMTE2IGFuZCA2LjAuMTIxKQorUHJvYmxlbTogICAgV2luMzI6IEFDTCBzdXBwb3J0IGRvZXNuJ3Qgd29yayB3ZWxsIG9uIFNhbWJhIGRyaXZlcy4KK1NvbHV0aW9uOiAgIEFkZCBhIGNoZWNrIGZvciB3b3JraW5nIEFDTCBzdXBwb3J0LiAoTWlrZSBXaWxsaWFtcykKK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4wLjI1NiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogIjpoaWdobGlnaHQgQ29tbWVudCBndWlmZz1hc2RmIiBkb2VzIG5vdCBnaXZlIGFuIGVycm9yCisJICAgIG1lc3NhZ2UuIChSYW5kYWxsIFcuICBNb3JyaXMpICBBbHNvIGZvciBvdGhlciBzeXN0ZW1zLgorU29sdXRpb246ICAgQWRkIGd1aV9nZXRfY29sb3IoKSB0byBnaXZlIG9uZSBlcnJvciBtZXNzYWdlIGZvciBhbGwgc3lzdGVtcy4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvZ3VpX2FtaWdhLmMsIHNyYy9ndWlfYXRoZW5hLmMsIHNyYy9ndWlfbW90aWYuYywKKwkgICAgc3JjL2d1aV9yaXNjb3MuYywgc3JjL2d1aV94MTEuYywgc3JjL2d1aV9ndGtfeDExLmMsCisJICAgIHNyYy9wcm90by9ndWkucHJvLCBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4wLjI1NworUHJvYmxlbTogICAgV2luMzI6IFdoZW4gJ21vdXNlZm9jdXMnIGlzIHNldCBhbmQgdGhlcmUgaXMgYSBCdWZSZWFkCisJICAgIGF1dG9jb21tYW5kLCBhZnRlciB0aGUgZGlhbG9nIGZvciBwZXJtaXNzaW9ucyBjaGFuZ2VkIG91dHNpZGUgb2YKKwkgICAgVmltOiAnbW91c2Vmb2N1cycgc3RvcHMgd29ya2luZy4gKFJvYmVydCBXZWJiKQorU29sdXRpb246ICAgUmVzZXQgbmVlZF9tb3VzZV9jb3JyZWN0IGFmdGVyIGNoZWNraW5nIHRpbWVzdGFtcHMuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjAuMjU4CitQcm9ibGVtOiAgICBXaGVuICdzY3JvbGxvZmYnIGlzIDk5OSBhbmQgdGhlcmUgYXJlIGZvbGRzLCB0aGUgdGV4dCBjYW4ganVtcCB1cAorCSAgICBhbmQgZG93biB3aGVuIG1vdmluZyB0aGUgY3Vyc29yIGRvd24gbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCSAgICAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgV2hlbiBwdXR0aW5nIHRoZSBjdXJzb3IgaGFsZndheSB0aGUgd2luZG93IHN0YXJ0IGNvdW50aW5nIGxpbmVzIGF0CisJICAgIHRoZSBlbmQgb2YgYSBmb2xkLgorRmlsZXM6CSAgICBzcmMvbW92ZS5jCisKK1BhdGNoIDYuMC4yNTkKK1Byb2JsZW06ICAgIE1TLURPUzogYWZ0ZXIgZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lIHRoZSBjdXJzb3Igc2hhcGUgbWF5IHJlbWFpbgorCSAgICBsaWtlIGluIEluc2VydCBtb2RlLiAoVm9sa2VyIEtpZWZlbCkKK1NvbHV0aW9uOiAgIFJlc2V0IHRoZSBjdXJzb3Igc2hhcGUgYWZ0ZXIgZWRpdGluZyB0aGUgY29tbWFuZCBsaW5lLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjAuMjYwCitQcm9ibGVtOiAgICBHVUk6IE1heSBjcmFzaCB3aGlsZSBzdGFydGluZyB1cCB3aGVuIGdpdmluZyBhbiBlcnJvciBtZXNzYWdlIGZvcgorCSAgICBtaXNzaW5nIGNvbG9yLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgZ3VpX3dyaXRlKCkgd2hlbiBzdGlsbCBzdGFydGluZyB1cC4gIERvbid0IGdpdmUgZXJyb3IKKwkgICAgbWVzc2FnZSBmb3IgZW1wdHkgY29sb3IgbmFtZS4gIERvbid0IHVzZSAndF92Yicgd2hpbGUgdGhlIEdVSSBpcworCSAgICBzdGlsbCBzdGFydGluZyB1cC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvZ3VpLmMsIHNyYy9taXNjMS5jLCBzcmMvdWkuYworCitQYXRjaCA2LjAuMjYxCitQcm9ibGVtOiAgICBucjJjaGFyKCkgYW5kIGNoYXIybnIoKSBkb24ndCB3b3JrIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgVXNlICdlbmNvZGluZycgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZXZhbC50eHQsIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4wLjI2MiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogSU1FIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4gIE9uSW1lQ29tcG9zaXRpb24oKSBpc24ndCB1c2VkCisJICAgIGF0IGFsbC4KK1NvbHV0aW9uOiAgIEFkanVzdCB2YXJpb3VzIHRoaW5ncyBmb3IgSU1FLgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oLCBzcmMvZ3VpX3czMi5jLCBzcmMvbWJ5dGUuYywgc3JjL3Byb3RvL3VpLnBybywKKwkgICAgc3JjL3N0cnVjdHMuaCwgc3JjL3VpLmMKKworUGF0Y2ggNi4wLjI2MworUHJvYmxlbTogICAgR1RLOiBXaGVuIGEgZGlhbG9nIGlzIGNsb3NlZCBieSB0aGUgd2luZG93IG1hbmFnZXIsIFZpbSBoYW5ncy4KKwkgICAgKENocmlzdGlhbiBKLiBSb2JpbnNvbikKK1NvbHV0aW9uOiAgIFVzZSBHVEtfV0lER0VUX0RSQVdBQkxFKCkgaW5zdGVhZCBvZiBHVEtfV0lER0VUX1ZJU0lCTEUoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYywgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4wLjI2NAorUHJvYmxlbTogICAgVGhlIGFtb3VudCBvZiB2aXJ0dWFsIG1lbW9yeSBpcyB1c2VkIHRvIGluaXRpYWxpemUgJ21heG1lbXRvdCcsCisJICAgIHdoaWNoIG1heSBiZSBtdWNoIG1vcmUgdGhhbiB0aGUgYW1vdW50IG9mIHBoeXNpY2FsIG1lbW9yeSwKKwkgICAgcmVzdWx0aW5nIGluIGEgbG90IG9mIHN3YXBwaW5nLgorU29sdXRpb246ICAgR2V0IHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IHdpdGggc3lzY3RsKCksIHN5c2NvbmYoKSBvcgorCSAgICBzeXNpbmZvKCkgd2hlbiBwb3NzaWJsZS4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlnLmguaW4sCisJICAgIHNyYy9vc191bml4LmMsIHNyYy9vc191bml4LmgKKworUGF0Y2ggNi4wLjI2NQorUHJvYmxlbTogICAgV2luMzI6IFVzaW5nIGJhY2tzcGFjZSB3aGlsZSAnZmttYXAnIGlzIHNldCBjYXVzZXMgYSBjcmFzaC4KKwkgICAgKEphbXNoaWQgT2Fzam1vaGEpCitTb2x1dGlvbjogICBEb24ndCB0cnkgbWFwcGluZyBzcGVjaWFsIGtleXMuCitGaWxlczoJICAgIHNyYy9mYXJzaS5jCisKK1BhdGNoIDYuMC4yNjYKK1Byb2JsZW06ICAgIFRoZSByZW5hbWUoKSBmdW5jdGlvbiBkZWxldGVzIHRoZSBmaWxlIGlmIHRoZSBvbGQgYW5kIHRoZSBuZXcgbmFtZQorCSAgICBhcmUgdGhlIHNhbWUuIChWb2xrZXIgS2llZmVsKQorU29sdXRpb246ICAgRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIG5hbWVzIGFyZSBlcXVhbC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMC4yNjcKK1Byb2JsZW06ICAgIFVURi04OiBBbHRob3VnaCAnaXNwcmludCcgc2F5cyBhIGNoYXJhY3RlciBpcyBwcmludGFibGUsCisJICAgIHV0Zl9jaGFyMmNlbGxzKCkgc3RpbGwgY29uc2lkZXJzIGl0IHVucHJpbnRhYmxlLgorU29sdXRpb246ICAgVXNlIHZpbV9pc3ByaW50YygpIGZvciBjaGFyYWN0ZXJzIHVwdG8gMHgxMDAuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMC4yNjggKGV4dHJhKSAoZGVwZW5kcyBvbiBwYXRjaCA2LjAuMjU1KQorUHJvYmxlbTogICAgV2luMzI6IEFDTCBjaGVjayBjcmFzaGVzIHdoZW4gdXNpbmcgZm9yd2FyZCBzbGFzaCBpbiBmaWxlIG5hbWUuCitTb2x1dGlvbjogICBJbXByb3ZlIHRoZSBjaGVjayBmb3IgdGhlIHBhdGggaW4gdGhlIGZpbGUgbmFtZS4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4wLjI2OQorUHJvYmxlbTogICAgVW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBhIGZpbGUgbmFtZSBtYXkgY2F1c2UgcHJvYmxlbXMgd2hlbgorCSAgICB1c2luZyB0aGUgJ3N0YXR1c2xpbmUnIG9wdGlvbiBvciB3aGVuICdidWZ0eXBlJyBpcyAibm9maWxlIi4KK1NvbHV0aW9uOiAgIGNhbGwgdHJhbnNfY2hhcmFjdGVycygpIGZvciB0aGUgcmVzdWx0aW5nIHN0YXR1c2xpbmUuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL3NjcmVlbi5jLCBzcmMvY2hhcnNldC5jCisKK1BhdGNoIDYuMC4yNzAgKGRlcGVuZHMgb24gcGF0Y2ggNi4wLjI2NykKK1Byb2JsZW06ICAgIEEgdGFiIGNhdXNlcyBVVEYtOCB0ZXh0IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgd3JvbmcgcG9zaXRpb24uCisJICAgIChSb24gQWFyb24pCitTb2x1dGlvbjogICBDb3JyZWN0IHV0Zl9jaGFyMmNlbGxzKCkgYWdhaW4uCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMWEuMDAxIChleHRyYSkKK1Byb2JsZW06ICAgIDMyYml0IERPUzogY29weWluZyB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQgbWF5IGNhdXNlIGEgY3Jhc2guCisJICAgIChKb25hdGhhbiBEIEpvaG5zdG9uKQorU29sdXRpb246ICAgRG9uJ3QgY29weSBvbmUgYnl0ZSB0b28gbXVjaCBpbiBTZXRDbGlwYm9hcmREYXRhKCkuCitGaWxlczoJICAgIHNyYy9vc19tc2Rvcy5jCisKK1BhdGNoIDYuMWEuMDAyCitQcm9ibGVtOiAgICBHVEs6IE9uIHNvbWUgY29uZmlndXJhdGlvbnMsIHdoZW4gY2xvc2luZyBhIGRpYWxvZyBmcm9tIHRoZSB3aW5kb3cKKwkgICAgbWFuYWdlciwgVmltIGhhbmdzLgorU29sdXRpb246ICAgQ2F0Y2ggdGhlICJkZXN0cm95IiBzaWduYWwuIChBcmljIEJsdW1lcikKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjFhLjAwMworUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2l0aCBVVEYtOCBkb3VibGUtd2lkZSBjaGFyIGFuZCAndmlydHVhbGVkaXQnIHNldDoKKwkgICAgeWFua2luZyBpbiBWaXN1YWwgbW9kZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGxhc3QgYnl0ZS4gKEVyaWMgTG9uZykKK1NvbHV0aW9uOiAgIERvbid0IGFkZCBhIHNwYWNlIGZvciBhIGRvdWJsZS13aWRlIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMWEuMDA0IChleHRyYSkKK1Byb2JsZW06ICAgIE1JTkdXOiB1bmRlZmluZWQgdHlwZS4gKFJvbiBBYXJvbikKK1NvbHV0aW9uOiAgIE1ha2UgR2V0Q29tcG9zaXRpb25TdHJpbmdfaW5VQ1MyKCkgc3RhdGljLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jLCBzcmMvcHJvdG8vZ3VpX3czMi5wcm8KKworUGF0Y2ggNi4xYS4wMDUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6ICI6aGFyZGNvcHkiIGRvZXNuJ3Qgd29yayBhZnRlciAiOmhhcmRjb3B5ISIuIChKb25hdGhhbgorCSAgICBKb2huc3RvbikKK1NvbHV0aW9uOiAgIERvbid0IGtlZXAgdGhlIGRyaXZlciBjb250ZXh0IHdoZW4gdXNpbmcgIjpoYXJkY29weSEiLiAoVmluY2UKKwkgICAgTmVncmkpCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMWEuMDA2CitQcm9ibGVtOiAgICBtdWx0aS1ieXRlOiBhZnRlciBzZXR0aW5nICdlbmNvZGluZycgdGhlIHdpbmRvdyB0aXRsZSBtaWdodCBiZQorCSAgICB3cm9uZy4KK1NvbHV0aW9uOiAgIEZvcmNlIHJlc2V0dGluZyB0aGUgdGl0bGUuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjFhLjAwNworUHJvYmxlbTogICAgRmlsZXR5cGUgZGV0ZWN0aW9uIGZvciAiKi5pbmMiIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIFVzZSBhICI6bGV0IiBjb21tYW5kLiAoRGF2aWQgU2Nod2Vpa2VydCkKK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0KKworUGF0Y2ggNi4xYS4wMDggKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IEFDTCBkZXRlY3Rpb24gZm9yIG5ldHdvcmsgc2hhcmVzIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGhlIHRyYWlsaW5nIChiYWNrKXNsYXNoIGluIHRoZSByb290IHBhdGguIChNaWtlIFdpbGxpYW1zKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjFhLjAwOQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiXEA8PSIgb3IgIlxAPCEiIGluIGEgcGF0dGVybiwgYSAiXDEiIG1heSByZWZlciB0byBhICgpCisJICAgIHBhcnQgdGhhdCBmb2xsb3dzLCBidXQgaXQgZ2VuZXJhdGVzIGFuIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBBbGxvdyBhIGZvcndhcmQgcmVmZXJlbmNlIHdoZW4gdGhlcmUgaXMgYSBmb2xsb3dpbmcgIlxAPD0iIG9yCisJICAgICJcQDwhIi4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvcGF0dGVybi50eHQsIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjFhLjAxMAorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOmhlbHAiIGFuZCBvcGVuaW5nIGEgbmV3IHdpbmRvdywgdGhlIGFsdGVybmF0ZSBmaWxlCisJICAgIGlzbid0IHNldC4KK1NvbHV0aW9uOiAgIFNldCB0aGUgYWx0ZXJuYXRlIGZpbGUgdG8gdGhlIHByZXZpb3VzbHkgZWRpdGVkIGZpbGUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xYS4wMTEKK1Byb2JsZW06ICAgIEdUSzogIjpzZXQgY289NzciLCBjaGFuZ2Ugd2lkdGggd2l0aCB0aGUgbW91c2UsICI6c2V0IGNvPTc3IgorCSAgICBkb2Vzbid0IHJlc2l6ZSB0aGUgd2luZG93LiAoRGFycmVuIEhpZWJlcnQpCitTb2x1dGlvbjogICBTZXQgdGhlIGZvcm0gc2l6ZSBhZnRlciBoYW5kbGluZyBhIHJlc2l6ZSBldmVudC4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4xYS4wMTIKK1Byb2JsZW06ICAgIEdUSzogVGhlIGZpbGUgYnJvd3NlciBhbHdheXMgcmV0dXJucyBhIGZ1bGwgcGF0aC4gKExvaG5lcikKK1NvbHV0aW9uOiAgIFNob3J0ZW4gdGhlIGZpbGUgbmFtZSBpZiBwb3NzaWJsZS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjFhLjAxMworUHJvYmxlbTogICAgV2hlbiB1c2luZyAiPX53b3JkIiBpbiAnY2lua2V5cycgb3IgJ2luZGVudGtleXMnLCB0aGUgY2FzZSBvZiB0aGUKKwkgICAgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHdvcmQgaXNuJ3QgaWdub3JlZC4gKFJhdWwgU2VndXJhIEFjZXZlZG8pCitTb2x1dGlvbjogICBJZ25vcmUgY2FzZSB3aGVuIGNoZWNraW5nIHRoZSBsYXN0IHR5cGVkIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjFhLjAxNAorUHJvYmxlbTogICAgQWZ0ZXIgcGF0Y2ggNi4xYS4wMDYgY2FuJ3QgY29tcGlsZSB3aXRob3V0IHRoZSB0aXRsZSBmZWF0dXJlLgorU29sdXRpb246ICAgQWRkIGFuICNpZmRlZi4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMWEuMDE1CitQcm9ibGVtOiAgICBNUy1XaW5kb3dzOiBXaGVuIGV4cGFuZGluZyBhIGZpbGUgbmFtZSB0aGF0IGNvbnRhaW5zIGEgJ1snIG9yICd7JworCSAgICBhbiBleHRyYSBiYWNrc2xhc2ggaXMgaW5zZXJ0ZWQuIChSYXVsIFNlZ3VyYSBBY2V2ZWRvKQorU29sdXRpb246ICAgQXZvaWQgYWRkaW5nIHRoZSBiYWNrc2xhc2guCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuMWEuMDE2CitQcm9ibGVtOiAgICBDb21wbGV0aW9uIGFmdGVyICI6bGFuZ3VhZ2UiIGRvZXNuJ3QgaW5jbHVkZSAidGltZSIuIChSYXVsIFNlZ3VyYQorCSAgICBBY2V2ZWRvKQorU29sdXRpb246ICAgQWRkIHRoZSBhbHRlcm5hdGl2ZSB0byB0aGUgY29tcGxldGlvbnMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMWEuMDE3CitQcm9ibGVtOiAgICBDbGlja2luZyB0aGUgbW91c2UgaW4gdGhlIHRvcCByb3cgb2YgYSB3aW5kb3cgd2hlcmUgdGhlIGZpcnN0IGxpbmUKKwkgICAgZG9lc24ndCBmaXQgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgd3JvbmcgY29sdW1uLgorU29sdXRpb246ICAgQWRkIHRoZSBza2lwY29sIGFsc28gZm9yIHRoZSB0b3Agcm93IG9mIGEgd2luZG93LgorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA2LjFhLjAxOAorUHJvYmxlbTogICAgV2hlbiAnc2Nyb2xsb2ZmJyBpcyBvbmUgYW5kIHRoZSB3aW5kb3cgaGVpZ2h0IGlzIG9uZSwgImdqIiBjYW4gcHV0CisJICAgIHRoZSBjdXJzb3IgYWJvdmUgdGhlIHdpbmRvdy4gKFJhdWwgU2VndXJhIEFjZXZlZG8pCitTb2x1dGlvbjogICBEb24ndCBsZXQgc2tpcGNvbCBiZWNvbWUgYmlnZ2VyIHRoYW4gdGhlIGN1cnNvciBjb2x1bW4uCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4xYS4wMTkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSBjb21wb3NpbmcgY2hhcmFjdGVyIG9uIHRvcCBvZiBhbiBBU0NJSSBjaGFyYWN0ZXIsIHRoZQorCSAgICAibCIgY29tbWFuZCBjbGVhcnMgdGhlIGNvbXBvc2luZyBjaGFyYWN0ZXIuICBPbmx5IHdoZW4gJ3J1bGVyJyBhbmQKKwkgICAgJ3Nob3djbWQnIGFyZSBvZmYuIChSYXBoYWVsIEZpbmtlbCkKK1NvbHV0aW9uOiAgIERvbid0IG1vdmUgdGhlIGN1cnNvciBieSBkaXNwbGF5aW5nIGNoYXJhY3RlcnMgd2hlbiB0aGVyZSBhcmUKKwkgICAgY29tcG9zaW5nIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjFhLjAyMAorUHJvYmxlbTogICAgR1RLOiBhZnRlciBwYXRjaCA2LjFhLjAxMSByZXNpemluZyB3aXRoIHRoZSBtb3VzZSBkb2Vzbid0IGFsd2F5cworCSAgICB3b3JrIHdlbGwgZm9yIHNtYWxsIHNpemVzLiAoQWRyaWVuIEJlYXUpCitTb2x1dGlvbjogICBVc2UgYW5vdGhlciB3YXkgdG8gYXZvaWQgdGhlIHByb2JsZW0gd2l0aCAiOnNldCBjbz03NyIuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMWEuMDIxCitQcm9ibGVtOiAgICBTZXZlcmFsIFN5bnRheCBtZW51IGVudHJpZXMgYXJlIHdyb25nIG9yIGNvbmZ1c2luZy4KK1NvbHV0aW9uOiAgIFJlcGhyYXNlIGFuZCBjb3JyZWN0IHRoZSBtZW51IGVudHJpZXMuIChBZHJpZW4gQmVhdSkKK0ZpbGVzOgkgICAgcnVudGltZS9tYWtlbWVudS52aW0sIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4xYS4wMjIKK1Byb2JsZW06ICAgIEEgdGFncyBmaWxlIG1pZ2h0IGJlIHVzZWQgdHdpY2Ugb24gY2FzZSBpbnNlbnNpdGl2ZSBzeXN0ZW1zLgorCSAgICAoUmljayBTd2FudG9uKQorU29sdXRpb246ICAgRG9uJ3QgdXNlIHRoZSBzYW1lIGZpbGUgbmFtZSB0d2ljZSBpbiB0aGUgZGVmYXVsdCBmb3IgdGhlICd0YWdzJworCSAgICBvcHRpb24uICBJZ25vcmUgY2FzZSB3aGVuIGNvbXBhcmluZyBuYW1lcyBvZiBhbHJlYWR5IHZpc2l0ZWQKKwkgICAgZmlsZXMuCitGaWxlczoJICAgIHNyYy9taXNjMi5jLCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xYS4wMjMKK1Byb2JsZW06ICAgIFdoZW4gc3RhcnRpbmcgdGhlIEdVSSBnZXQgIkMiIGNoYXJhY3RlcnMgZWNob2VkIGluIHRoZSB0ZXJtaW5hbC4KK1NvbHV0aW9uOiAgIERvbid0IHRyeSBzZW5kaW5nIGEgY2xlYXItc2NyZWVuIGNvbW1hbmQgd2hpbGUgdGhlIEdVSSBpcyBzdGFydGluZworCSAgICB1cC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMWEuMDI0CitQcm9ibGVtOiAgICBJbiBvdGhlciBlZGl0b3JzIENUUkwtRiBpcyBvZnRlbiB1c2VkIGZvciBhIGZpbmQgZGlhbG9nLgorU29sdXRpb246ICAgSW4gZXZpbSB1c2UgQ1RSTC1GIGZvciB0aGUgZmluZCBkaWFsb2cuCitGaWxlczoJICAgIHJ1bnRpbWUvZXZpbS52aW0KKworUGF0Y2ggNi4xYS4wMjUKK1Byb2JsZW06ICAgIFRoZSBjaG9pY2VzIGZvciB0aGUgZmlsZWZvcm1hdCBkaWFsb2cgY2FuJ3QgYmUgdHJhbnNsYXRlZC4KK1NvbHV0aW9uOiAgIEFkZCBnOm1lbnV0cmFuc19maWxlZm9ybWF0X2Nob2ljZXMuIChBZHJpZW4gQmVhdSkKK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjFhLjAyNgorUHJvYmxlbTogICAgSW5kZW50aW5nIEphdmEgZmlsZXMgaXMgd3Jvbmcgd2l0aCAidGhyb3dzIiwgImV4dGVuZHMiIGFuZAorCSAgICAiaW1wbGVtZW50cyIgY2xhdXNlcy4KK1NvbHV0aW9uOiAgIFVwZGF0ZSB0aGUgSmF2YSBpbmRlbnQgc2NyaXB0LgorRmlsZXM6CSAgICBydW50aW1lL2luZGVudC9qYXZhLnZpbQorCitQYXRjaCA2LjFhLjAyNworUHJvYmxlbTogICAgQSBmZXcgU3ludGF4IG1lbnUgZW50cmllcyBtaXNzaW5nIG9yIGluY29ycmVjdC4KK1NvbHV0aW9uOiAgIEFkZCBhbmQgY29ycmVjdCB0aGUgbWVudSBlbnRyaWVzLiAoQWRyaWVuIEJlYXUpCisJICAgIFNob3J0ZW4gYSBmZXcgbWVudXMgdG8gYXZvaWQgdGhleSBiZWNvbWUgdG9vIGxvbmcuCitGaWxlczoJICAgIHJ1bnRpbWUvbWFrZW1lbnUudmltLCBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMWEuMDI4CitQcm9ibGVtOiAgICBYSU06IHByb2JsZW1zIHdpdGggZmVlZGJhY2sgYW5kIHNvbWUgaW5wdXQgbWV0aG9kcy4KK1NvbHV0aW9uOiAgIFVzZSBpY29udiBmb3IgY2FsY3VsYXRpbmcgdGhlIGNlbGxzLiAgUmVtb3ZlIHRoZSBxdWV1ZSBmb3IKKwkgICAga2V5X3ByZXNzX2V2ZW50IG9ubHkgd2hlbiB0ZXh0IHdhcyBjaGFuZ2VkLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oLCBzcmMvbWJ5dGUuYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMWEuMDI5CitQcm9ibGVtOiAgICBBZnRlciBwYXRjaCA2LjFhLjAyOCBjYW4ndCBjb21waWxlIEdUSyB2ZXJzaW9uIHdpdGggWElNIGJ1dAorCSAgICB3aXRob3V0IG11bHRpLWJ5dGUgY2hhcnMuCitTb2x1dGlvbjogICBBZGQgYW4gI2lmZGVmLiAoQXNjaHdpbiBNYXJzbWFuKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjFhLjAzMAorUHJvYmxlbTogICAgV2l0aCBkb3VibGUtYnl0ZSBlbmNvZGluZ3MgdG91cHBlcigpIGFuZCB0b2xvd2VyKCkgbWF5IGhhdmUgd3JvbmcKKwkgICAgcmVzdWx0cy4KK1NvbHV0aW9uOiAgIFNraXAgZG91YmxlLWJ5dGUgY2hhcmFjdGVycy4gKEVyaWMgTG9uZykKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjFhLjAzMQorUHJvYmxlbTogICAgQWNjZXNzaW5nIHRoZSAnYmFsbG9vbmRlbGF5JyB2YXJpYWJsZSBtYXkgY2F1c2UgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIE1ha2UgdGhlIHZhcmlhYmxlIGZvciAnYmFsbG9vbmRlbGF5JyBhIGxvbmcuIChPbGFmIFNlaWJlcnQpCitGaWxlczoJICAgIHNyYy9vcHRpb24uaAorCitQYXRjaCA2LjFhLjAzMiAoZXh0cmEpCitQcm9ibGVtOiAgICBTb21lIG1lbnUgZmlsZXMgdXNlZCBhIHdyb25nIGVuY29kaW5nIG5hbWUgZm9yICJzY3JpcHRlbmNvZGluZyIuCitTb2x1dGlvbjogICBNb3ZlIHRoZSB0cmFuc2xhdGlvbnMgdG8gYSBzZXBhcmF0ZSBmaWxlLCB3aGljaCBpcyBzb3VyY2VkIGFmdGVyCisJICAgIHNldHRpbmcgInNjcmlwdGVuY29kaW5nIi4KKwkgICAgQWxzbyBhZGQgQ3plY2ggbWVudSB0cmFuc2xhdGlvbnMgaW4gQVNDSUkgYW5kIHVwZGF0ZSB0aGUgb3RoZXIKKwkgICAgZW5jb2RpbmdzLgorRmlsZXM6CSAgICBydW50aW1lL2xhbmcvbWVudV9jc19jei5pc29fODg1OS0xLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfY3NfY3ouaXNvXzg4NTktMi52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2N6ZWNoX2N6ZWNoX3JlcHVibGljLjEyNTAudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9jemVjaF9jemVjaF9yZXB1YmxpYy4xMjUyLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfY3plY2hfY3plY2hfcmVwdWJsaWMuYXNjaWkudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9kZV9kZS5pc29fODg1OS0xLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfZGVfZGUubGF0aW4xLnZpbSwKKwkgICAgcnVudGltZS9sYW5nL21lbnVfZnJfZnIuaXNvXzg4NTktMS52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2ZyX2ZyLmxhdGluMS52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2ZyZW5jaF9mcmFuY2UuMTI1Mi52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2dlcm1hbl9nZXJtYW55LjEyNTIudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9qYV9qcC5ldWMtanAudmltLAorCSAgICBydW50aW1lL2xhbmcvbWVudV9qYV9qcC51dGYtOC52aW0sCisJICAgIHJ1bnRpbWUvbGFuZy9tZW51X2phcGFuZXNlX2phcGFuLjkzMi52aW0KKworUGF0Y2ggNi4xYS4wMzMKK1Byb2JsZW06ICAgIFhJTTogZG9lc24ndCByZXNldCBpbnB1dCBjb250ZXh0LgorU29sdXRpb246ICAgY2FsbCB4aW1fcmVzZXQoKSB3aXRoIGltX3NldF9hY3RpdmUoRkFMU0UpLiAoVGFrdWhpcm8gTmlzaGlva2EpCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMWEuMDM0IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgQUNMIGNoZWNrcyBmb3IgYSByZWFkb25seSBmaWxlIHN0aWxsIGRvbid0IHdvcmsgd2VsbC4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgQUNMIGNoZWNrcywgZ28gYmFjayB0byBob3cgaXQgd29ya2VkIGluIFZpbSA2LjAuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMWEuMDM1CitQcm9ibGVtOiAgICBtdWx0aS1ieXRlOiBXaGVuIHVzaW5nICI6c2giIGluIHRoZSBHVUksIHR5cGVkIGFuZCBkaXNwbGF5ZWQKKwkgICAgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCitTb2x1dGlvbjogICBEZWFsIHdpdGggbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHRvIGFuZCBmcm9tIHRoZSBzaGVsbC4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykgIEFsc28gaGFuZGxlIFVURi04IGNvbXBvc2luZyBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMWEuMDM2CitQcm9ibGVtOiAgICBHVEs6IHRoZSBzYXZlLXlvdXJzZWxmIGV2ZW50IHdhcyBub3QgaGFuZGxlZC4KK1NvbHV0aW9uOiAgIENhdGNoIHRoZSBzYXZlLXlvdXJzZWxmIGV2ZW50IGFuZCBwcmVzZXJ2ZSBzd2FwIGZpbGVzLiAoTmVpbCBCaXJkKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjFhLjAzNworUHJvYmxlbTogICAgVGhlIE1TLVdpbmRvd3Mga2V5IG1hcHBpbmcgZG9lc24ndCBpbmNsdWRlIENUUkwtUyBmb3Igc2F2aW5nLgorCSAgICAoVmxhZCBTYW5kcmluaSkKK1NvbHV0aW9uOiAgIE1hcCBDVFJMLVMgdG8gIjp1cGRhdGUiLgorRmlsZXM6CSAgICBydW50aW1lL21zd2luLnZpbQorCitQYXRjaCA2LjFhLjAzOAorUHJvYmxlbTogICAgU29sYXJpczogSW5jbHVkaW5nIGJvdGggc3lzL3N5c2N0bC5oIGFuZCBzeXMvc3lzaW5mby5oIGRvZXNuJ3QKKwkgICAgd29yay4gKEFudG9uaW8gQ29sb21ibykKK1NvbHV0aW9uOiAgIERvbid0IGluY2x1ZGUgc3lzL3N5c2luZm8uaCB3aGVuIG5vdCBjYWxsaW5nIHN5c2luZm8oKS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjFhLjAzOQorUHJvYmxlbTogICAgTm90IGFsbCB2aXN1YWwgYmFzaWMgZmlsZXMgYXJlIHJlY29nbml6ZWQuCitTb2x1dGlvbjogICBBZGQgY2hlY2tzIHRvIGNhdGNoICouY3RsIGZpbGVzLiAoUmF1bCBTZWd1cmEgQWNldmVkbykKK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0KKworUGF0Y2ggNi4xYS4wNDAKK1Byb2JsZW06ICAgIEEgKi5wbCBmaWxlIGlzIHJlY29nbml6ZWQgYXMgUGVybCwgYnV0IGl0IGNvdWxkIGJlIGEgcHJvbG9nIGZpbGUuCitTb2x1dGlvbjogICBDaGVjayB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpbmUuIChLb250cmEgR2VyZ2VseSkKK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0KKworUGF0Y2ggNi4xYS4wNDEKK1Byb2JsZW06ICAgIFdoZW4gcHJlc3NpbmcgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGluIHRoZSBjb21tYW5kIGxpbmUgYW5kIHRoZW0KKwkgICAgbW92aW5nIHRoZSBtb3VzZSB1cHdhcmRzLCBuZWFybHkgYWxsIHRoZSB0ZXh0IGlzIHNlbGVjdGVkLgorU29sdXRpb246ICAgRG9uJ3QgdHJ5IGV4dGVuZGluZyBhIG1vZGVsZXNzIHNlbGVjdGlvbiB3aGVuIHRoZXJlIGlzbid0IG9uZS4KK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNi4xYS4wNDIKK1Byb2JsZW06ICAgIFdoZW4gbWVyZ2luZyBmaWxlcywgIjpkaWZmcHV0IiBhbmQgIjpkaWZmZ2V0IiBhcmUgdXNlZCBhIGxvdCwgYnV0CisJICAgIHRoZXkgcmVxdWlyZSBhIGxvdCBvZiB0eXBpbmcuCitTb2x1dGlvbjogICBBZGQgImRwIiBmb3IgIjpkaWZmcHV0IiBhbmQgImRvIiBmb3IgIjpkaWZmZ2V0Ii4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZGlmZi50eHQsIHNyYy9kaWZmLmMsIHNyYy9ub3JtYWwuYywgc3JjL3Byb3RvL2RpZmYucHJvCisKKworUGF0Y2ggNi4xYi4wMDEgKGV4dHJhKQorUHJvYmxlbTogICAgQ2hlY2tpbmcgZm9yIHdpbGRjYXJkcyBpbiBhIHBhdGggZG9lcyBub3QgaGFuZGxlIG11bHRpLWJ5dGUKKwkgICAgY2hhcmFjdGVycyB3aXRoIGEgdHJhaWwgYnl0ZSB3aGljaCBpcyBhIHdpbGRjYXJkLgorU29sdXRpb246ICAgSGFuZGxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBjb3JyZWN0bHkuIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9vc19hbWlnYS5jLCBzcmMvb3NfbWFjLmMsIHNyYy9vc19tc2Rvcy5jLCBzcmMvb3NfbXN3aW4uYywKKwkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjFiLjAwMgorUHJvYmxlbTogICAgQSByZWdleHAgdGhhdCBlbmRzIGluICJceyIgaXMgbm90IGZsYWdnZWQgYXMgYW4gZXJyb3IuICBNYXkgY2F1c2UKKwkgICAgYSBzdGFjayBvdmVyZmxvdyB3aGVuICdpbmNzZWFyY2gnIGlzIHNldC4gKEdlcmhhcmQgSG9jaGhvbHplcikKK1NvbHV0aW9uOiAgIEhhbmRsZSBhIG1pc3NpbmcgIn0iIGFzIGFuIGVycm9yLgorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4xYi4wMDMgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIFJJU0MgT1MgR1VJIGRvZXNuJ3QgY29tcGlsZS4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgY2hhbmdlcyBzaW5jZSBWaW0gNS43LiAoQW5keSBXaW5nYXRlKQorRmlsZXM6CSAgICBzcmMvTWFrZV9yby5tYWssIHNyYy9ndWlfcmlzY29zLmMsIHNyYy9vc19yaXNjb3MuYywKKwkgICAgc3JjL29zX3Jpc2Nvcy5oLCBzcmMvcHJvdG8vZ3VpX3Jpc2Nvcy5wcm8KKworUGF0Y2ggNi4xYi4wMDQKK1Byb2JsZW06ICAgIGNvbCgiJz4iKSByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGZvciBsaW5ld2lzZSBzZWxlY3Rpb24uIChOZWlsCisJICAgIEJpcmQpCitTb2x1dGlvbjogICBEb24ndCBhZGQgb25lIHRvIE1BWENPTC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjFiLjAwNQorUHJvYmxlbTogICAgVXNpbmcgYSBzZWFyY2ggcGF0dGVybiB0aGF0IGNhdXNlcyBhbiBvdXQtb2Ytc3RhY2sgZXJyb3Igd2hpbGUKKwkgICAgJ2hsc2VhcmNoJyBpcyBzZXQga2VlcHMgZ2l2aW5nIHRoZSBoaXQtRW50ZXIgcHJvbXB0LgorCSAgICBBIHNlYXJjaCBwYXR0ZXJuIHRoYXQgdGFrZXMgYSBsb25nIHRpbWUgZGVsYXlzIHR5cGluZyB3aGVuCisJICAgICdpbmNzZWFyY2gnIGlzIHNldC4KK1NvbHV0aW9uOiAgIFN0b3AgJ2hsc2VhcmNoJyBoaWdobGlnaHRpbmcgd2hlbiB0aGUgcmVnZXhwIGNhdXNlcyBhbiBlcnJvci4KKwkgICAgU3RvcCBzZWFyY2hpbmcgZm9yICdpbmNzZWFyY2gnIHdoZW4gYSBjaGFyYWN0ZXIgaXMgdHlwZWQuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9tZXNzYWdlLmMsIHNyYy9zY3JlZW4uYywgc3JjL3NlYXJjaC5jLAorCSAgICBzcmMvdmltLmgKKworUGF0Y2ggNi4xYi4wMDYKK1Byb2JsZW06ICAgIFdoZW4gZW50ZXJpbmcgYSBjb21wb3NpbmcgY2hhcmFjdGVyIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aAorCSAgICBDVFJMLVYsIHRoZSB0ZXh0IGlzbid0IHJlZHJhd24gY29ycmVjdGx5LgorU29sdXRpb246ICAgUmVkcmF3IHRoZSB0ZXh0IHVuZGVyIGFuZCBhZnRlciB0aGUgY3Vyc29yLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjFiLjAwNworUHJvYmxlbTogICAgV2hlbiB0aGUgY3Vyc29yIGlzIGluIHRoZSB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHR3byBzZW50ZW5jZXMsICJkaXMiCisJICAgIGRlbGV0ZXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZm9sbG93aW5nIHNlbnRlbmNlLCAiZGFzIgorCSAgICBkZWxldGVzIGEgc3BhY2UgYWZ0ZXIgdGhlIHNlbnRlbmNlLgorU29sdXRpb246ICAgQmFja3VwIHRoZSBjdXJzb3Igb25lIGNoYXJhY3RlciBpbiB0aGVzZSBzaXR1YXRpb25zLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4xYi4wMDgKK1Byb2JsZW06ICAgICoueHNsIGZpbGVzIGFyZSBub3QgcmVjb2duaXplZCBhcyB4c2x0IGJ1dCB4bWwuCisJICAgIE1vbmsgZmlsZXMgYXJlIG5vdCByZWNvZ25pemVkLgorU29sdXRpb246ICAgRGVsZXRlIHRoZSBkdXBsaWNhdGUgbGluZSBmb3IgKi54c2wuIChKb2hhbm5lcyBaZWxsbmVyKQorCSAgICBSZWNvZ25pemUgbW9uayBmaWxlcy4KK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0KKworUGF0Y2ggNi4xYi4wMDkKK1Byb2JsZW06ICAgIENhbid0IGFsd2F5cyBjb21waWxlIHNtYWxsIGZlYXR1cmVzIGFuZCB0aGVuIGFkZGluZyBldmFsIGZlYXR1cmUsCisJICAgICJzYW5kYm94IiBpcyB1bmRlZmluZWQuIChBeGVsIEtpZWxob3JuKQorU29sdXRpb246ICAgQWx3YXlzIGRlZmluZSAic2FuZGJveCIgd2hlbiB0aGUgZXZhbCBmZWF0dXJlIGlzIHVzZWQuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgKKworUGF0Y2ggNi4xYi4wMTAgKGV4dHJhKQorUHJvYmxlbTogICAgV2hlbiBjb21waWxpbmcgZ3ZpbWV4dC5jcHAgd2l0aCBNU1ZDIDQuMiBnZXQgYSBudW1iZXIgb2Ygd2FybmluZ3MuCitTb2x1dGlvbjogICBDaGFuZ2UgInRydWUiIHRvICJUUlVFIi4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBHdmltRXh0L2d2aW1leHQuY3BwCisKK1BhdGNoIDYuMWIuMDExCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgdmVyeSBsb25nIHN0cmluZyBmb3IgY29uZmlybSgpLCBjYW4ndCBxdWl0IHRoZQorCSAgICBkaXNwbGF5aW5nIGF0IHRoZSBtb3JlIHByb21wdC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgSnVtcCB0byB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlIHRvIHNob3cgdGhlIGNob2ljZXMuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4xYi4wMTIKK1Byb2JsZW06ICAgIE11bHRpLWJ5dGU6IFdoZW4gJ3Nob3dicmVhaycgaXMgc2V0IGFuZCBhIGRvdWJsZS13aWRlIGNoYXJhY3RlcgorCSAgICBkb2Vzbid0IGZpdCBhdCB0aGUgcmlnaHQgd2luZG93IGVkZ2UgdGhlIGN1cnNvciBnZXRzIHN0dWNrIHRoZXJlLgorCSAgICBVc2luZyBjdXJzb3ItbGVmdCBnZXRzIHN0dWNrIHdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQuICAoRXJpYworCSAgICBMb25nKQorU29sdXRpb246ICAgRml4IHRoZSB3YXkgdGhlIGV4dHJhICI+IiBjaGFyYWN0ZXIgaXMgY291bnRlZCB3aGVuICdzaG93YnJlYWsnIGlzCisJICAgIHNldC4gIERvbid0IGNvcnJlY3QgY3Vyc29yIGZvciB2aXJ0dWFsIGVkaXRpbmcgb24gYSBkb3VibGUtd2lkZQorCSAgICBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMsIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4xYi4wMTMKK1Byb2JsZW06ICAgIEEgdXNlciBjb21tYW5kIHRoYXQgcGFydGx5IG1hdGNoZXMgd2l0aCBhIGJ1ZmZlci1sb2NhbCB1c2VyCisJICAgIGNvbW1hbmQgYW5kIG1hdGNoZXMgZnVsbCB3aXRoIGEgZ2xvYmFsIHVzZXIgY29tbWFuZCB1bm5lY2Vzc2FyaWx5CisJICAgIGdpdmVzIGFuICdhbWJpZ3VvdXMgY29tbWFuZCcgZXJyb3IuCitTb2x1dGlvbjogICBGaW5kIHRoZSBmdWxsIGdsb2JhbCBtYXRjaCBldmVuIGFmdGVyIGEgcGFydGx5IGxvY2FsIG1hdGNoLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjFiLjAxNAorUHJvYmxlbTogICAgRUJDRElDOiBzd2l0Y2hpbmcgbW91c2UgZXZlbnRzIG9mZiBjYXVzZXMgZ2FyYmFnZSBvbiBzY3JlZW4uCisJICAgIFBvc2l0aW9uaW5nIHRoZSBjdXJzb3IgaW4gdGhlIEdVSSBjYXVzZXMgZ2FyYmFnZS4KK1NvbHV0aW9uOiAgIEluc2VydCBhbiBFU0MgaW4gdGhlIHRlcm1pbmFsIGNvZGUuIChSYWxmIFNjaGFuZGwpCisJICAgIFVzZSAiXGIiIGluc3RlYWQgb2YgIlwwMTAiIGZvciBLU19MRS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYywgc3JjL3Rlcm0uYworCitQYXRjaCA2LjFiLjAxNQorUHJvYmxlbTogICAgVmltdHV0b3IgaGFzIGEgdHlwby4gIEdldCBhIHdhcm5pbmcgZm9yICJ0ZW1wZmlsZSIgaWYgaXQKKwkgICAgZG9lc24ndCBleGlzdC4KK1NvbHV0aW9uOiAgIE1vdmUgYSBxdW90ZSB0byB0aGUgZW5kIG9mIGEgbGluZS4gKE1heCBJc2NoZW5rbykKKwkgICAgVXNlICJta3RlbXAiIGZpcnN0LCBtb3JlIHN5c3RlbXMgaGF2ZSBpdC4KK0ZpbGVzOgkgICAgc3JjL3ZpbXR1dG9yCisKK1BhdGNoIDYuMWIuMDE2CitQcm9ibGVtOiAgICBHVEs6IGxvYWRpbmcgYSBmb250c2V0IHRoYXQgd29ya3MgcGFydGx5LCBWaW0gbWlnaHQgaGFuZyBvciBjcmFzaC4KK1NvbHV0aW9uOiAgIEF2b2lkIHRoYXQgY2hhcl93aWR0aCBiZWNvbWVzIHplcm8uIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMWIuMDE3CitQcm9ibGVtOiAgICBHVUk6IFdoZW4gdXNpbmcgIjpzaGVsbCIgYW5kIHRoZXJlIGlzIGEgYmVlcCwgbm90aGluZyBoYXBwZW5zLgorU29sdXRpb246ICAgQ2FsbCB2aW1fYmVlcCgpIHRvIHByb2R1Y2UgdGhlIGJlZXAgZnJvbSB0aGUgc2hlbGwuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4xYi4wMTggKGRlcGVuZHMgb24gNi4xYi4wMDYpCitQcm9ibGVtOiAgICBXaGVuIGVudGVyaW5nIHRoZSBlbmNyeXB0aW9uIGtleSwgc3BlY2lhbCBrZXlzIG1heSBzdGlsbCByZXZlYWwKKwkgICAgdGhlIHR5cGVkIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBNYWtlIHN1cmUgc3RhcnMgYXJlIHVzZWQgb3Igbm90aGluZyBpcyBzaG93biBpbiBhbGwgY2FzZXMuCitGaWxlczoJICAgIHNyYy9kaWdyYXBoLmMsIHNyYy9nZXRjaGFyLmMsIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuMWIuMDE5IChkZXBlbmRzIG9uIDYuMWIuMDA1KQorUHJvYmxlbTogICAgQSBzZWFyY2ggcGF0dGVybiB0aGF0IHRha2VzIGEgbG9uZyB0aW1lIHNsb3dzIGRvd24gdHlwaW5nIHdoZW4KKwkgICAgJ2luY3NlYXJjaCcgaXMgc2V0LgorU29sdXRpb246ICAgUGFzcyBTRUFSQ0hfUEVFSyB0byBkb3NlYXJjaCgpLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjFiLjAyMAorUHJvYmxlbTogICAgV2hlbiB1c2luZyB0aGUgbWF0Y2hpdCBwbHVnaW4sICIlIiBmaW5kcyBhIG1hdGNoIG9uIHRoZSAiZW5kIiBvZiBhCisJICAgICI6c3ludGF4IHJlZ2lvbiIgY29tbWFuZCBpbiBWaW0gc2NyaXB0cy4KK1NvbHV0aW9uOiAgIFNraXAgb3ZlciAiOnN5bnRheCByZWdpb24iIGNvbW1hbmRzIGJ5IHNldHRpbmcgYjptYXRjaF9za2lwLgorRmlsZXM6CSAgICBydW50aW1lL2Z0cGx1Z2luL3ZpbS52aW0KKworUGF0Y2ggNi4xYi4wMjEKK1Byb2JsZW06ICAgIHdoZW4gJ21vdXNlZm9jdXMnIGlzIHNldCwgQ1RSTC1XIENUUkwtXSBzb21ldGltZXMgZG9lc24ndCB3YXJwIHRoZQorCSAgICBwb2ludGVyIHRvIHRoZSBuZXcgd2luZG93LiAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBEb24ndCByZXNldCBuZWVkX21vdXNlX2NvcnJlY3Qgd2hlbiBjaGVja2luZyB0aGUgdGltZXN0YW1wIG9mIGEKKwkgICAgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMWIuMDIyCitQcm9ibGVtOiAgICBXaXRoIGxvdHMgb2YgZm9sZHMgImoiIGRvZXMgbm90IG9iZXkgJ3Njcm9sbG9mZicgcHJvcGVybHkuCisJICAgIChTcmluYXRoIEF2YWRoYW51bGEpCitTb2x1dGlvbjogICBHbyB0byBlbmQgb2YgdGhlIGZvbGQgYmVmb3JlIGNvdW50aW5nIGNvbnRleHQgbGluZXMuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4xYi4wMjMKK1Byb2JsZW06ICAgIE9uIE1TLVdpbmRvd3Mgc3lzdGVtKCkgbWF5IGNhdXNlIGNoZWNraW5nIHRpbWVzdGFtcHMsIGJlY2F1c2UgVmltCisJICAgIGxvb3NlcyBhbmQgZ2FpbnMgaW5wdXQgZm9jdXMsIHdoaWxlIHRoaXMgZG9lc24ndCBoYXBwZW4gb24gVW5peC4KK1NvbHV0aW9uOiAgIERvbid0IGNoZWNrIHRpbWVzdGFtcHMgd2hpbGUgc3lzdGVtKCkgaXMgYnVzeS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMsIHNyYy9maWxlaW8uYywgc3JjL2dsb2JhbHMuaCwgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4xYi4wMjQgKGV4dHJhKQorUHJvYmxlbTogICAgR2V0dGV4dCAwLjExIGNvbXBsYWlucyB0aGF0ICJzamlzIiBpcyBub3QgYSBzdGFuZGFyZCBuYW1lLgorU29sdXRpb246ICAgVXNlICJjcDkzMiIgaW5zdGVhZC4KK0ZpbGVzOgkgICAgc3JjL3BvL3NqaXNjb3JyLmMKKworUGF0Y2ggNi4xYi4wMjUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gY2xvc2luZyBndmltIHdoaWxlIGl0IGlzIG1pbmltaXplZCAgYW5kIGhhcyBhIGNoYW5nZWQKKwkgICAgZmlsZSwgdGhlIGZpbGUtY2hhbmdlZCBkaWFsb2cgcG9wcyB1cCBpbiBhIGNvcm5lciBvZiB0aGUgc2NyZWVuLgorU29sdXRpb246ICAgUHV0IHRoZSBkaWFsb2cgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuLgorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMWIuMDI2CitQcm9ibGVtOiAgICBXaGVuICdkaWZmb3B0JyBjb250YWlucyAnaXdoaXRlJyBidXQgbm90ICdpY2FzZSc6IGRpZmZlcmVuY2VzIGluCisJICAgIGNhc2UgYXJlIG5vdCBoaWdobGlnaHRlZCBwcm9wZXJseS4gKEdlcmhhcmQgSG9jaGhvbHplcikKK1NvbHV0aW9uOiAgIERvbid0IGlnbm9yZSBjYXNlIHdoZW4gaWdub3Jpbmcgd2hpdGUgc3BhY2UgZGlmZmVyZW5jZXMuCitGaWxlczoJICAgIHNyYy9kaWZmLmMKKworUGF0Y2ggNi4xYi4wMjcKK1Byb2JsZW06ICAgICJ2aW0gLS1yZW1vdGUgKyIgbWF5IGNhdXNlIGEgY3Jhc2guCitTb2x1dGlvbjogICBDaGVjayBmb3IgbWlzc2luZyBmaWxlIG5hbWUgYXJndW1lbnQuIChNYXJ0aW4gS2FobGVydCkKK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjFiLjAyOCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4xNjogQ2FuJ3QgY29tcGlsZSBhZnRlciBwYXRjaCA2LjFiLjAyNS4KK1NvbHV0aW9uOiAgIEFkZCBjb2RlIHNwZWNpZmljYWxseSBmb3IgV2luMTYuIChWaW5jZSBOZWdyaSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjFiLjAyOQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gYSBkaXJlY3Rvcnkgb24gYW4gTlRGUyBwYXJ0aXRpb24gaXMgcmVhZC9leGVjdXRlIChubworCSAgICBkZWxldGUsbW9kaWZ5LHdyaXRlKSBhbmQgdGhlIGZpbGUgaGFzIG1vZGlmeSByaWdodHMsIHRyeWluZyB0bworCSAgICB3cml0ZSB0aGUgZmlsZSBkZWxldGVzIGl0LiAgTWFraW5nIHRoZSBmaWxlIHJlYWQvd3JpdGUvZXhlY3V0ZQorCSAgICAobm90IGRlbGV0ZSkgc29sdmVzIGl0LiAoTWFyayBDYW51cCkKK1NvbHV0aW9uOiAgIFVzZSB0aGUgVW5peCBjb2RlIHRvIGNoZWNrIGZvciBhIHdyaXRhYmxlIGRpcmVjdG9yeS4gIElmIG5vdCwgdGhlbgorCSAgICBtYWtlIGEgYmFja3VwIGNvcHkgYW5kIG92ZXJ3cml0ZSB0aGUgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMWIuMDMwIChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogc21hbGwgbWlzdGFrZSBpbiB0aGUgYnVpbGQgc2NyaXB0IGFuZCBwcm90b3R5cGVzLgorU29sdXRpb246ICAgRml4IHRoZSBidWlsZCBzY3JpcHQgYW5kIGFkZCB0aGUgcHJvdG90eXBlcy4gKEF4ZWwgS2llbGhvcm4pCitGaWxlczoJICAgIHNyYy9vc19tYWMuYnVpbGQsIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4xYi4wMzEgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgR1VJOiAiOnNldCBndWlmb250PSoiIGRvZXNuJ3Qgc2V0ICdndWlmb250JyB0byB0aGUgcmVzdWx0aW5nCisJICAgIGZvbnQgbmFtZS4gKFZsYWQgU2FuZHJpbmkpCitTb2x1dGlvbjogICBQdXQgdGhlIGNvZGUgYmFjayBpbiBndWlfbWNoX2luaXRfZm9udCgpIHRvIGZvcm0gdGhlIGZvbnQgbmFtZSBvdXQKKwkgICAgb2YgdGhlIGxvZ2ZvbnQuCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4xYi4wMzIKK1Byb2JsZW06ICAgIEF0aGVuYTogU2V0dGluZyBhIGNvbG9yIHNjaGVtZSBiZWZvcmUgdGhlIEdVSSBoYXMgc3RhcnRlZCBjYXVzZXMgYQorCSAgICBjcmFzaC4gKFRvZGQgQmx1bWVyKQorU29sdXRpb246ICAgRG9uJ3QgdHJ5IHVzaW5nIGNvbG9yIG5hbWVzIHRoYXQgaGF2ZW4ndCBiZWVuIHNldCB5ZXQuCitGaWxlczoJICAgIHNyYy9ndWlfYXRoZW5hLmMKKworUGF0Y2ggNi4xYi4wMzMKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSBjb3VudCBhZnRlciBhICI6cyIgY29tbWFuZCBtYXkgZ2V0IG1sX2dldCBlcnJvcnMuCisJICAgIChEaWV0bWFyIExhbmcpCitTb2x1dGlvbjogICBDaGVjayB0aGF0IHRoZSByZXN1bHRpbmcgcmFuZ2UgZG9lcyBub3QgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZQorCSAgICBidWZmZXIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xYi4wMzQKK1Byb2JsZW06ICAgIEFmdGVyIHNvdXJjaW5nIG1zd2luLnZpbSwgd2hlbiB1c2luZyA8Qy1TLVJpZ2h0PiBhZnRlcgorCSAgICBhdXRvLWluZGVudGluZyBhbmQgdGhlbiA8RGVsPiwgZ2V0IHdhcm5pbmcgZm9yIGFsbG9jYXRpbmcKKwkgICAgcmlkaWN1bG91cyBhbW91bnQgb2YgbWVtb3J5LiAoRGF2ZSBEZWxncmVjbykKK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgc3RhcnQgb2YgdGhlIFZpc3VhbCBhcmVhIHdoZW4gZGVsZXRpbmcgdGhlIGF1dG8taW5kZW50LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMWIuMDM1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGV2aW0sIGRyb3BwaW5nIGEgZmlsZSBvbiBWaW0gYW5kIHRoZW4gZG91YmxlIGNsaWNraW5nCisJICAgIG9uIGEgd29yZCwgaXQgaXMgY2hhbmdlZCB0byAiaSIuIChNZXJsaW4gSGFuc2VuKQorU29sdXRpb246ICAgUmVzZXQgbmVlZF9zdGFydF9pbnNlcnRtb2RlIGFmdGVyIGVkaXRpbmcgdGhlIGZpbGUuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitWRVJTSU9OIDYuMgkJCQkJCSp2ZXJzaW9uLTYuMioKKworVGhpcyBzZWN0aW9uIGlzIGFib3V0IGltcHJvdmVtZW50cyBtYWRlIGJldHdlZW4gdmVyc2lvbiA2LjEgYW5kIDYuMi4KKworVGhpcyBpcyBtYWlubHkgYSBidWctZml4IHJlbGVhc2UuICBUaGVyZSBhcmUgYWxzbyBhIGZldyBuZXcgZmVhdHVyZXMuCisKK01haW4gbmV3IGZlYXR1cmVzOgorLSBTdXBwb3J0IGZvciBHVEsgMi4gKERhbmllbCBFbHN0bmVyKQorLSBTdXBwb3J0IGZvciBlZGl0aW5nIEFyYWJpYyB0ZXh0LiAoTmFkaW0gU2hhaWtsaSAmIElzYW0gQmF5YXppZGkpCistICI6dHJ5IiBjb21tYW5kIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuIChTZXJ2YXRpdXMgQnJhbmR0KQorLSBTdXBwb3J0IGZvciB0aGUgbmVYdGF3IEdVSSB0b29sa2l0IChtb3N0bHkgbGlrZSBBdGhlbmEpLiAoQWxleGV5IEZyb2xvZmYpCistIENzY29wZSBzdXBwb3J0IGZvciBXaW4zMi4gKEtob3JldiBTZXJnZXkpCistIFN1cHBvcnQgZm9yIFBvc3RTY3JpcHQgcHJpbnRpbmcgaW4gdmFyaW91cyA4LWJpdCBlbmNvZGluZ3MuIChNaWtlIFdpbGxpYW1zKQorCisKK0NoYW5nZWQJCQkJCQkJKmNoYW5nZWQtNi4yKgorLS0tLS0tLQorCitSZW1vdmVkIHRoZSBzY2hlbWUgaW5kZW50IGZpbGUsIHRoZSBpbnRlcm5hbCBMaXNwIGluZGVudGluZyB3b3JrcyB3ZWxsIG5vdy4KKworTW92ZWQgdGhlIEd2aW1FWHQsIE9sZVZpbSBhbmQgVmlzVmltIGRpcmVjdG9yaWVzIGludG8gdGhlICJzcmMiIGRpcmVjdG9yeS4KK1RoaXMgaXMgbW9yZSBjb25zaXN0ZW50IHdpdGggaG93IHh4ZCBpcyBoYW5kbGVkLgorCitUaGUgVmlzVmltLmRsbCBmaWxlIGlzIGluc3RhbGxlZCBpbiB0aGUgdG9wIGRpcmVjdG9yeSwgbmV4dCB0byBndmltZXh0LmRsbCwKK2luc3RlYWQgb2YgaW4gYSBzdWJkaXJlY3RvcnkgIlZpc1ZpbSIuICBGaXhlcyB0aGF0IE5TSVMgd2FzIHVuaW5zdGFsbGluZyBpdAorZnJvbSB0aGUgd3JvbmcgZGlyZWN0b3J5LgorCitSZW1vdmVkIHRoZSBhcnQgaW5kZW50IGZpbGUsIGl0IGRpZG4ndCBkbyBhbnl0aGluZy4KKworc3VibWF0Y2goKSByZXR1cm5lZCBsaW5lIGJyZWFrcyB3aXRoIENSIGluc3RlYWQgb2YgTEYuCisKK0NoYW5nZWQgdGhlIFdpbjMyIE1ha2VmaWxlcyB0byBiZWNvbWUgbW9yZSB1bmlmb3JtIGFuZCBjb21waWxlIGd2aW1leHQuZGxsLgorKERhbiBTaGFycCkKKworJ2NpbmRlbnQnOiBBbGlnbiBhICIvLyIgY29tbWVudCB3aXRoIGEgIi8vIiBjb21tZW50IGluIGEgcHJldmlvdXMgbGluZS4KKyhIZWxtdXQgU3RpZWdsZXIpCisKK1ByZXZpb3VzbHkgb25seSBmb3IgeHRlcm0tbGlrZSB0ZXJtaW5hbHMgcGFyZW50IHdpZGdldHMgd2VyZSBmb2xsb3dlZCB0byBmaW5kCit0aGUgdGl0bGUgYW5kIGljb24gbGFiZWwuICBOb3cgZG8gdGhpcyBmb3IgYWxsIHRlcm1pbmFsIGVtdWxhdG9ycy4KKworTWFkZSBpdCBwb3NzaWJsZSB0byByZWNvZ25pemUgYmFja3NsYXNoZXMgZm9yICIlIiBtYXRjaGluZy4gIFRoZSAnTScgZmxhZyBpbgorJ2Nwb3B0aW9ucycgZGlzYWJsZXMgaXQuIChIYWFrb24gUmlpc2VyKQorCitSZW1vdmVkIHRoZSBNYWtlX3RjYy5tYWsgbWFrZWZpbGUgZm9yIFR1cmJvIEMuICBJdCBkaWRuJ3Qgd29yayBhbmQgd2UgcHJvYmFibHkKK2Nhbid0IG1ha2UgaXQgd29yayAodGhlIGNvbXBpbGVyIHJ1bnMgb3V0IG9mIG1lbW9yeSkuCisKK0V2ZW4gdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIHJlZmVycyB0byBrZXl3b3JkcywgIlsgQ1RSTC1EIiB3YXMgdXNpbmcKKydpc2lkZW50JyB0byBmaW5kIG1hdGNoZXMuICBDaGFuZ2VkIGl0IHRvIHVzZSAnaXNrZXl3b3JkJy4gIEFsc28gYXBwbGllcyB0bworb3RoZXIgY29tbWFuZHMgdGhhdCBzZWFyY2ggZm9yIGRlZmluZWQgd29yZHMgaW4gaW5jbHVkZWQgZmlsZXMgc3VjaCBhcworIjpkc2VhcmNoIiwgIltEIiBhbmQgIltkIi4KKworTWFkZSAna2V5d29yZHByZycgZ2xvYmFsLWxvY2FsLiAoQ2hyaXN0aWFuIFJvYmluc29uKQorCitFbmFibGVkIHRoZSBOZXRiZWFucyBpbnRlcmZhY2UgYnkgZGVmYXVsdC4gIFJldmVyc2VkIHRoZSBjb25maWd1cmUgYXJndW1lbnQKK2Zyb20gIi0tZW5hYmxlLW5ldGJlYW5zIiB0byAiLS1kaXNhYmxlLW5ldGJlYW5zIi4KKworCitBZGRlZAkJCQkJCQkqYWRkZWQtNi4yKgorLS0tLS0KKworTmV3IG9wdGlvbnM6CisJJ2FyYWJpYycKKwknYXJhYmljc2hhcGUnCisJJ2FtYml3aWR0aCcKKwknYXV0b2NoZGlyJworCSdjYXNlbWFwJworCSdjb3B5aW5kZW50JworCSdjc2NvcGVxdWlja2ZpeCcKKwkncHJlc2VydmVpbmRlbnQnCisJJ3ByaW50ZW5jb2RpbmcnCisJJ3JpZ2h0bGVmdGNtZCcKKwkndGVybWJpZGknCisJJ3Rvb2xiYXJpY29uc2l6ZScKKwknd2luZml4aGVpZ2h0JworCitOZXcga2V5bWFwczoKKwlTZXJiaWFuIChBbGVrc2FuZGFyIFZlc2VsaW5vdmljKQorCUNoaW5lc2UgUGlueWluIChGcmVkcmlrIFJvdWJlcnQpCisJRXNwZXJhbnRvIChBbnRvaW5lIEouIE1lY2hlbHluY2spCisKK05ldyBzeW50YXggZmlsZXM6CisJVmFsZ3JpbmQgKFJvZ2VyIEx1ZXRoaSkKKwlTbWFydHkgdGVtcGxhdGUgKE1hbmZyZWQgU3RpZW5zdHJhKQorCU15U1FMIChLZW5uZXRoIFByb25vdmljaSkKKwlSb2NrTGludXggcGFja2FnZSBkZXNjcmlwdGlvbiAoUGlvdHIgRXNkZW4tVGVtcHNraSkKKwlNTUlYIChEaXJrIEh1ZXNrZW4pCisJZ2tyZWxsbXJjIChEYXZpZCBOZWNhcykKKwlUaWxkZSAoVG9iaWFzIFJ1bmR0cm9tKQorCUxvZ3RhbGsgKFBhdWxvIE1vdXJhKQorCVBMUCAoSnVlcmQgV2FhbGJvZXIpCisJZnZ3bTJtNCAoRGF2aWQgTmVjYXMpCisJSVBmaWx0ZXIgKEhlbmRyaWsgU2Nob2x6KQorCWZzdGFiIChSYWR1IERpbmVpdSkKKwlRdWFrZSAoTmlrb2xhaSBXZWlidWxsKQorCU9jY2FtIChNYXJpbyBTY2h3ZWlnbGVyKQorCWxwYyAoU2hpemh1IFBhbikKKwlFeGltIGNvbmYgKERhdmlkIE5lY2FzKQorCUVESUYgKEFydGVtIFphbmtvdmljaCkKKwkuY3ZzcmMgKE5pa29sYWkgV2VpYnVsbCkKKwkuZmV0Y2htYWlscmMgKE5pa29sYWkgV2VpYnVsbCkKKwlHTlUgZ3BnIChOaWtvbGFpIFdlaWJ1bGwpCisJR3J1YiAoTmlrb2xhaSBXZWlidWxsKQorCU1vZGNvbmYgKE5pa29sYWkgV2VpYnVsbCkKKwlSQ1MgKERtaXRyeSBWYXNpbGlldikKKwlBcnQgKERvcmFpIFNpdGFyYW0pCisJUmVuZGVybWFuIEludGVyZmFjZSBCeXRlc3RyZWFtIChBbmRyZXcgSiBCcm9tYWdlKQorCU1haWxjYXAgKERvdWcgS2Vhcm5zKQorCVN1YnZlcnNpb24gY29tbWl0IGZpbGUgKERtaXRyeSBWYXNpbGlldikKKwlNaWNyb3NvZnQgSURMIChWYWRpbSBaZWl0bGluKQorCVdpbGRQYWNrZXRzIEV0aGVyUGVlayBEZWNvZGVyIChDaHJpc3RvcGhlciBTaGlubikKKwlTcHljZSAoUmltb24gQmFycikKKwlSZXNvbHYuY29uZiAoUmFkdSBEaW5laXUpCisJQTY1IChDbGVtZW5zIEtpcmNoZ2F0dGVyZXIpCisJc3NoY29uZmlnIGFuZCBzc2hkY29uZmlnIChEYXZpZCBOZWNhcykKKwlDaGVldGFoIGFuZCBIVE1MQ2hlZXRhaCAoTWF4IElzY2hlbmtvKQorCVBhY2tldCBmaWx0ZXIgKENhbWllbCBEb2JiZWxhYXIpCisKK05ldyBpbmRlbnQgZmlsZXM6CisJRWlmZmVsIChEYXZpZCBDbGFya2UpCisJVGlsZGUgKFRvYmlhcyBSdW5kdHJvbSkKKwlPY2NhbSAoTWFyaW8gU2Nod2VpZ2xlcikKKwlBcnQgKERvcmFpIFNpdGFyYW0pCisJUEhQIChNaWxlcyBMb3R0KQorCUR5bGFuIChCcmVudCBGdWxnaGFtKQorCitOZXcgdHV0b3IgdHJhbnNsYXRpb25zOgorCVNsb3ZhayAoTHVib3MgQ2Vsa28pCisJR3JlZWsgKENocmlzdG9zIEtvbnRhcykKKwlHZXJtYW4gKEpvYWNoaW0gSG9mbWFubikKKwlOb3J3ZWdpYW4gKNh5dmluZCBIb2xtKQorCitOZXcgZmlsZXR5cGUgcGx1Z2luczoKKwlPY2NhbSAoTWFyaW8gU2Nod2VpZ2xlcikKKwlBcnQgKERvcmFpIFNpdGFyYW0pCisJYW50LnZpbSwgYXNwdmJzLnZpbSwgY29uZmlnLnZpbSwgY3NjLnZpbSwgY3NoLnZpbSwgZHRkLnZpbSwgaHRtbC52aW0sCisJanNwLnZpbSwgcGFzY2FsLnZpbSwgcGhwLnZpbSwgc2dtbC52aW0sIHNoLnZpbSwgc3ZnLnZpbSwgdGNzaC52aW0sCisJeGh0bWwudmltLCB4bWwudmltLCB4c2QudmltLiAgKERhbiBTaGFycCkKKworTmV3IGNvbXBpbGVyIHBsdWdpbnM6CisJQ2hlY2tzdHlsZSAoRG91ZyBLZWFybnMpCisJZzc3IChSYWxmIFdpbGRlbmh1ZXMpCisJZm9ydHJhbiAoSm9oYW5uLUd1ZW50ZXIgU2ltb24pCisJWG1sbGludCAoRG91ZyBLZWFybnMpCisJUnVieSAoVGltIEhhbW1lcnF1aXN0KQorCU1vZGVsc2ltIHZjb20gKFBhdWwgQmFsZW1lKQorCitOZXcgbWVudSB0cmFuc2xhdGlvbnM6CisJQnJhemlsaWFuIChKb3PpIGRlIFBhdWxhKQorCUJyaXRpc2ggKE1pa2UgV2lsbGlhbXMpCisJS29yZWFuIGluIFVURi04LiAoTmFtIFN1bmdIeXVuKQorCU5vcndlZ2lhbiAo2Hl2aW5kIEhvbG0pCisJU2VyYmlhbiAoQWxla3NhbmRhciBKZWxlbmFrKQorCitOZXcgbWVzc2FnZSB0cmFuc2xhdGlvbiBmb3IgTm9yd2VnaWFuLiAo2Hl2aW5kIEhvbG0pCisKK05ldyBjb2xvciBzY2hlbWU6CisJZGVzZXJ0IChIYW5zIEZ1Z2FsKQorCitBcmFiaWMgc3BlY2lmaWMgZmVhdHVyZXMuICdhcmFiaWNzaGFwZScsICd0ZXJtYmlkaScsICdhcmFiaWMnIGFuZAorJ3JpZ2h0bGVmdGNtZCcgb3B0aW9ucy4gIChOYWRpbSBTaGFpa2xpICYgSXNhbSBCYXlhemlkaSkKKworU3VwcG9ydCBmb3IgbmVYdGF3IEdVSSB0b29sa2l0LCBtb3N0bHkgbGlrZSBBdGhlbmEuIChBbGV4ZXkgRnJvbG9mZikKKworV2luMzI6IGNzY29wZSBzdXBwb3J0LiAoS2hvcmV2IFNlcmdleSkKKworVk1TOiB2YXJpb3VzIGltcHJvdmVtZW50cyB0byBkb2N1bWVudGF0aW9uIGFuZCBtYWtlZmlsZXMuICAoWm9sdGFuIEFycGFkZmZ5KQorCitBZGRlZCAieCIga2V5IHRvIHRoZSBleHBsb3JlciBwbHVnaW46IGV4ZWN1dGUgdGhlIGRlZmF1bHQgYWN0aW9uLiAoWWFzdWhpcm8KK01hdHN1bW90bykKKworQ29tcGlsZSBndmltZXh0LmRsbCB3aXRoIE1pbmdXLiAoUmVuZSBkZSBad2FydCkKKworQWRkIHRoZSAidG9odG1sLnZpbSIgcGx1Z2luLiAgSXQgZGVmaW5lcyB0aGUgIjpUT2h0bWwiIHVzZXIgY29tbWFuZCwgYW4gZWFzeQord2F5IHRvIGNvbnZlcnQgdGV4dCB0byBIVE1MLgorCitBZGRlZCAiOnRyeSIgLyAiOmNhdGNoIiAvICI6ZmluYWxseSIgLyAiOmVuZHRyeSIgY29tbWFuZHMuICBBZGQgRTk5OSBudW1iZXJzCit0byBhbGwgZXJyb3IgbWVzc2FnZXMsIHNvIHRoYXQgdGhleSBjYW4gYmUgY2F1Z2h0IGJ5IHRoZSBudW1iZXIuCisoU2VydmF0aXVzIEJyYW5kdCkKK01vdmVkIHBhcnQgb2YgZXhfZG9jbWQuYyB0byB0aGUgbmV3IGV4X2V2YWwuYyBzb3VyY2UgZmlsZS4KKworSW5jbHVkZSBzdXBwb3J0IGZvciBHVEsrIDIuMi54IChEYW5pZWwgRWxzdG5lcikKK0FkZHMgdGhlICJ+IiByZWdpc3RlcjogZHJhZyAmIGRyb3AgdGV4dC4KK0FkZHMgdGhlICd0b29sYmFyaWNvbnNpemUnIG9wdGlvbi4KK0FkZCAtRGFsbG9jYSB3aGVuIHJ1bm5pbmcgbGludCB0byB3b3JrIGFyb3VuZCBhIHByb2JsZW0gd2l0aCBhbGxvY2EoKQorcHJvdG90eXBlLgorCitXaGVuIHNlbGVjdGluZyBhbiBpdGVtIGluIHRoZSBlcnJvciB3aW5kb3cgdG8ganVtcCB0bywgdGFrZSBzb21lIGVmZm9ydCB0bworZmluZCBhbiBvcmRpbmFyeSB3aW5kb3cgdG8gc2hvdyB0aGUgZmlsZSBpbiAobm90IGEgcHJldmlldyB3aW5kb3cpLgorCitTdXBwb3J0IGZvciBQb3N0U2NyaXB0IHByaW50aW5nIG9mIHZhcmlvdXMgOC1iaXQgZW5jb2RpbmdzLiAoTWlrZSBXaWxsaWFtcykKKworaW5wdXRkaWFsb2coKSBhY2NlcHRzIGEgdGhpcmQgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHdoZW4gdGhlIGRpYWxvZyBpcworY2FuY2VsbGVkLiAgTWFrZXMgaXQgcG9zc2libGUgdG8gc2VlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGNhbmNlbGxpbmcgYW5kCitlbnRlcmluZyBub3RoaW5nLgorCitJbmNsdWRlZCBBYXAgcmVjaXBlcy4gIENhbiBiZSB1c2VkIHRvIHVwZGF0ZSBWaW0gdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLAorYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcuCisKKyIvIiBvcHRpb24gaW4gJ2Npbm9wdGlvbnMnOiBleHRyYSBpbmRlbnQgZm9yIGNvbW1lbnQgbGluZXMuIChIZWxtdXQgU3RpZWdsZXIpCisKK1ZpbSB2YXJpYWJsZSAidjpyZWdpc3RlciIgYW5kIGZ1bmN0aW9ucyBzZXRyZWcoKSwgZ2V0cmVnKCkgYW5kIGdldHJlZ3R5cGUoKS4KKyhNaWNoYWVsIEdlZGRlcykKKworInYiIGZsYWcgaW4gJ2Nwb3B0aW9ucyc6IExlYXZlIHRleHQgb24gc2NyZWVuIHdpdGggYmFja3NwYWNlIGluIEluc2VydCBtb2RlLgorKFBoaWxsaXAgVmFuZHJ5KQorCitEb3NpbnN0LmV4ZSBhbHNvIGZpbmRzIGd2aW1leHQuZGxsIGluIHRoZSAiR3ZpbUV4dCIgZGlyZWN0b3J5LiAgVXNlZnVsIHdoZW4KK3J1bm5pbmcgaW5zdGFsbCBpbiB0aGUgInNyYyIgZGlyZWN0b3J5IGZvciB0ZXN0aW5nLgorCitTdXBwb3J0IHRhZyBmaWxlcyB0aGF0IHdlcmUgc29ydGVkIHdpdGggY2FzZSBpZ25vcmVkLiAoRmxlbW1pbmcgTWFkc2VuKQorCitXaGVuIGNvbXBsZXRpbmcgYSB3aWxkY2FyZCBpbiBhIGxlYWRpbmcgcGF0aCBlbGVtZW50LCBhcyBpbiAiLi4vKi9NYWtlZmlsZSIsCitvbmx5IHRoZSBsYXN0IHBhcnQgKCJNYWtlZmlsZSIpIHdhcyBsaXN0ZWQuICBTdXBwb3J0IGN1c3RvbSBkZWZpbmVkCitjb21tYW5kIGxpbmUgY29tcGxldGlvbi4gIChGbGVtbWluZyBNYWRzZW4pCisKK0Fsc28gcmVjb2duaXplICJyeHZ0IiBhcyBhbiB4dGVybS1saWtlIHRlcm1pbmFsLiAoVG9tYXMgU3R5YmxvKQorCitQcm9wZXIgWDExIHNlc3Npb24gbWFuYWdlbWVudC4gIEZpeGVzIHRoYXQgdGhlIFdNX1NBVkVfWU9VUlNFTEYgZXZlbnQgd2FzIG5vdAordXNlZCBieSBwb3B1bGFyIGRlc2t0b3BzLiAgKE5laWwgQmlyZCkKK05vdCB1c2VkIGZvciBHbm9tZSAyLCBpdCBoYXMgaXRzIG93biBoYW5kbGluZy4KKworU3VwcG9ydCBCT1IsIERFQlVHIGFuZCBTUEFXTk8gYXJndW1lbnRzIGZvciB0aGUgQm9ybGFuZCAzIE1ha2VmaWxlLiAoV2FsdGVyCitCcmlzY29lKQorCitTdXBwb3J0IHBhZ2UgYnJlYWtzIGZvciBwcmludGluZy4gIEFkZHMgdGhlICJmb3JtZmVlZCIgZmllbGQgaW4KKydwcmludG9wdGlvbnMnLiAgKE1pa2UgV2lsbGlhbXMpCisKK01hYyBPU1g6IG11bHRpLWxhbmd1YWdlIHN1cHBvcnQ6IGljb252IGFuZCBnZXR0ZXh0LiAoTXVyYW9rYSBUYXJvLCBBeGVsCitLaWVsaG9ybikKKworIlxaIiBmbGFnIGluIHBhdHRlcm5zOiBpZ25vcmUgZGlmZmVyZW5jZXMgaW4gY29tYmluaW5nIGNoYXJhY3RlcnMuIChSb24gQWFyb24pCisKK0FkZGVkICdwcmVzZXJ2ZWluZGVudCcgYW5kICdjb3B5aW5kZW50JyBvcHRpb25zLiAgVGhleSB1c2UgZXhpc3Rpbmcgd2hpdGUKK3NwYWNlIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiB1c2luZyBUYWJzIGFzIG11Y2ggYXMgcG9zc2libGUuIChDaHJpcyBMZWlzaG1hbikKKworVXBkYXRlZCBVbmljb2RlIHRhYmxlcyB0byBVbmljb2RlIDQuMC4gKFJhcGhhZWwgRmlua2VsKQorCitTdXBwb3J0IGZvciB0aGUgbW91c2Ugd2hlZWwgaW4gcnh2dC4gKEFJREEgU2hpbnJhKQorCitXaW4zMjogQWRkZWQgIjo4IiBmaWxlIG1vZGlmaWVyIHRvIGdldCBzaG9ydCBmaWxlbmFtZS4gIFRlc3Q1MCB0ZXN0cyB0aGUgIjo4IgorZXhwYW5zaW9uIG9uIFdpbjMyIHN5c3RlbXMuIChNaWNoYWVsIEdlZGRlcykKKworJ2NzY29wZXF1aWNrZml4JyBvcHRpb246IE9wZW4gcXVpY2tmaXggd2luZG93IGZvciBDc2NvcGUgY29tbWFuZHMuICBBbHNvCitjbGVhbnVwIHRoZSBjb2RlIGZvciBnaXZpbmcgbWVzc2FnZXMuICAoS2hvcmV2IFNlcmdleSkKKworR1VJOiBTdXBwb3J0IG1vcmUgdGhhbiAyMjIgY29sdW1ucyBmb3IgbW91c2UgcG9zaXRpb25zLgorCisiOnN0b3BpbnNlcnQiIGNvbW1hbmQ6IERvbid0IHJldHVybiB0byBJbnNlcnQgbW9kZS4KKworImludGVycnVwdCIgY29tbWFuZCBmb3IgZGVidWcgbW9kZS4gIFVzZWZ1bCBmb3Igc2ltdWxhdGluZyBDVFJMLUMuIChTZXJ2YXRpdXMKK0JyYW5kdCkKKworCitGaXhlZAkJCQkJCQkqZml4ZWQtNi4yKgorLS0tLS0KKworUmVtb3ZlZCBhIGZldyB1bnVzZWQgI2RlZmluZXMgZnJvbSBjb25maWcuaC5pbiwgb3Nfb3MyX2NmZy5oIGFuZCBvc192bXNfY29uZi5oLgorCitUaGUgVmltIGljb25zIGluIFBORyBmb3JtYXQgZGlkbid0IGhhdmUgYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLiAoR3JlZworUm9lbG9mcykKKworRml4ZWQgYSBsYXJnZSBudW1iZXIgb2Ygc3BlbGxpbmcgbWlzdGFrZXMgaW4gdGhlIGRvY3MuIChBZHJpIFZlcmhvZWYpCisKK1RoZSAjZGVmaW5lcyBmb3IgcHJvdG90eXBlIGdlbmVyYXRpb24gd2VyZSBjYXVzaW5nIHRyb3VibGUuICBDaGFuZ2VkIHRoZW0gdG8KK3R5cGVkZWZzLgorCitBIG5ldyB2ZXJzaW9uIG9mIGxpYmludGwuaCB1c2VzIF9fYXNtX18sIHdoaWNoIGNvbmZ1c2VzIGNwcm90by4gIERlZmluZSBhCitkdW1teSBfX2FzbV9fIG1hY3JvLgorCitXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0IGNhbid0IG1vdmUgdG8gaGFsZndheSBhbiB1bnByaW50YWJsZSBjaGFyYWN0ZXIuCitDcmlwcGxlcyBDVFJMLVYgc2VsZWN0aW9uLiAoVGFybyBNdXJhb2thKQorQWxsb3cgbW92aW5nIHRvIGhhbGZ3YXkgYW4gdW5wcmludGFibGUgY2hhcmFjdGVyLiAgRG9uJ3QgbGV0IGdldHZ2Y29sKCkgY2hhbmdlCit0aGUgcG9zLT5jb2xhZGQgYXJndW1lbnQuCisKK1doZW4gYSB0YWIgd3JhcHMgdG8gdGhlIG5leHQgbGluZSwgJ2xpc3RjaGFycycgaXMgc2V0IGFuZCAnZm9sZGNvbHVtbicgaXMKK25vbi16ZXJvLCBvbmx5IG9uZSBjaGFyYWN0ZXIgb2YgdGhlIGZvbGRjb2x1bW4gaXMgaGlnaGxpZ2h0ZWQuIChNdXJhb2thIFRhcm8pCisKK1doZW4gdXNpbmcgIjpjYXRjaCIgd2l0aG91dCBhbiBhcmd1bWVudCBWaW0gY3Jhc2hlcy4gKFlhc3VoaXJvIE1hdHN1bW90bykKK1doZW4gbm8gYXJndW1lbnQgZ2l2ZW4gdXNlIHRoZSAiLioiIHBhdHRlcm4uCisKK1dpbjMyOiBXaGVuIGd2aW0uZXhlIGlzIHN0YXJ0ZWQgZnJvbSBhIHNob3J0Y3V0IHdpdGggdGhlIHdpbmRvdyBzdHlsZSBwcm9wZXJ0eQorc2V0IHRvIG1heGltaXplIFZpbSBkb2Vzbid0IHN0YXJ0IHdpdGggYSBtYXhpbWl6ZWQgd2luZG93LiAoWWFzdWhpcm8KK01hdHN1bW90bykgIE9wZW4gdGhlIHdpbmRvdyB3aXRoIHRoZSBkZWZhdWx0IHNpemUgYW5kIGRvbid0IGNhbGwgU2hvd1dpbmRvdygpCithZ2FpbiB3aGVuIGl0J3MgYWxyZWFkeSB2aXNpYmxlLiAoSGVsbXV0IFN0aWVnbGVyKQorCitndWlfZ3RrLmMgdXNlZCBNQVgsIGJ1dCBpdCdzIHVuZGVmaW5lZCB0byBhdm9pZCBhIGNvbmZsaWN0IHdpdGggc3lzdGVtIGhlYWRlcgorZmlsZXMuCisKK1dpbjMyOiBXaGVuIGNsb3NpbmcgYSB3aW5kb3cgZnJvbSBhIG1hcHBpbmcgc29tZSBwaXhlbHMgcmVtYWluIG9uIHRoZQorc3RhdHVzbGluZS4gKFlhc3VoaXJvIE1hdHN1bW90bykKKworQSBjb2x1bW4gbnVtYmVyIGluIGFuIGVycm9yZm9ybWF0IHRoYXQgZ29lcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbGluZSBtYXkKK2NhdXNlIGEgY3Jhc2guCisKKyI6dGhyb3cgJ3Rlc3QnIiBjcmFzaGVzIFZpbS4gKFlhc3VoaXJvIE1hdHN1bW90bykKKworVGhlIGZpbGUgc2VsZWN0b3IncyBzY3JvbGxiYXIgY29sb3JzIGFyZSBub3Qgc2V0IGFmdGVyIGRvaW5nIGEgIjpoaSBTY3JvbGxiYXIKK2d1aWZnPWNvbG9yIi4gIEFuZCB0aGUgZmlsZSBzZWxlY3RvcidzIGNvbG9ycyBhcmUgbm90IGNoYW5nZWQgYnkgdGhlCitjb2xvcnNjaGVtZSBjb21tYW5kLiAgKERhdmlkIEhhcnJpc29uKQorCitNb3RpZjogV2hlbiBjb21waWxpbmcgd2l0aCBGRUFUX0ZPT1RFUiBkZWZpbmVkLCB0aGUgdGV4dCBhcmVhIGdldHMgYSBmZXcKK3BpeGVscyBleHRyYSBzcGFjZSBvbiB0aGUgcmlnaHQuICBSZW1vdmUgdGhlIHNwZWNpYWwgY2FzZSBpbgorZ3VpX2dldF9iYXNlX3dpZHRoKCkuIChEYXZpZCBIYXJyaXNvbikKKworVXNpbmcgQ1RSTC1SIENUUkwtUCBpbiBJbnNlcnQgbW9kZSBwdXRzIHRoZSAnXSBtYXJrIGluIHRoZSB3cm9uZyBwb3NpdGlvbi4KKyhIZWxtdXQgU3RpZWdsZXIpCisKK1doZW4gJ2Zvcm1hdG9wdGlvbnMnIGluY2x1ZGVzICJhd2N0IiBhIG5vbi1jb21tZW50IHdhc24ndCBhdXRvLWZvcm1hdHRlZC4KKworVXNpbmcgYSAiLS1jbWQiIGFyZ3VtZW50IG1vcmUgdGhhbiAxMCB0aW1lcyBjYXVzZWQgYSBjcmFzaC4KKworREVDIHN0eWxlIG1vdXNlIHN1cHBvcnQgZGlkbid0IHdvcmsgaWYgdGhlIHBhZ2UgZmllbGQgaXMgbm90IGVtcHR5LgorKFVyaWJhcnJpKQorCisidmltIC1sIG9uZSB0d28iIGRpZCBvbmx5IHNldCAnbGlzcCcgaW4gdGhlIGZpcnN0IGZpbGUuICBWaSBkb2VzIGl0IGZvciBldmVyeQorZmlsZS4KKworIjpzZXQgdHc8IiBkaWRuJ3Qgd29yay4gIFdhcyBjaGVja2luZyBmb3IgJ14nIGluc3RlYWQgb2YgJzwnLgorCitJbiAiOmhhcmRjb3B5ID4gJS5wcyIgdGhlICIlIiB3YXMgbm90IGV4cGFuZGVkIHRvIHRoZSBjdXJyZW50IGZpbGVuYW1lLgorCitNYWRlICI6cmVkcmF3IiBhbHNvIHVwZGF0ZSB0aGUgVmlzdWFsIGFyZWEuCisKK1doZW4gYSBub3QgaW1wbGVtZW50ZWQgY29tbWFuZCwgc3VjaCBhcyAiOnBlcmwiLCBoYXMgd3JvbmcgYXJndW1lbnRzIHRoZSBsZXNzCitpbXBvcnRhbnQgZXJyb3Igd2FzIHJlcG9ydGVkLCBnaXZpbmcgdGhlIHVzZXIgdGhlIGlkZWEgdGhlIGNvbW1hbmQgY291bGQgd29yay4KKworT24gbm9uLVVuaXggc3lzdGVtcyBhdXRvY29tbWFuZHMgZm9yIHdyaXRpbmcgZGlkIG5vdCBhdHRlbXB0IGEgbWF0Y2ggd2l0aCB0aGUKK3Nob3J0IGZpbGUgbmFtZSwgY2F1c2luZyBhIHBhdHRlcm4gbGlrZSAiYS9iIiB0byBmYWlsLgorCitWTVM6IGVfc2NyZWVubW9kZSB3YXMgbm90IGRlZmluZWQgYW5kIGEgZmV3IG90aGVyIGZpeGVzIGZvciBWTVMuIChab2x0YW4KK0FycGFkZmZ5KQorCityZWRyYXdfbXNnKCkgZGVwZW5kZWQgb24gRkVBVF9BUkFCSUMgaW5zdGVhZCBvZiBGRUFUX1JJR0hUTEVGVC4gKFdhbHRlcgorQnJpc2NvZSkKKworVmFyaW91cyBjaGFuZ2VzIGZvciB0aGUgUEMgTWFrZWZpbGVzLiAoV2FsdGVyIEJyaXNjb2UpCisKK1VzZSBfdHJ1ZW5hbWUoKSBpbnN0ZWFkIG9mIG91ciBvd24gY29kZSB0byBleHBhbmQgYSBmaWxlIG5hbWUgaW50byBhIGZ1bGwKK3BhdGguIChXYWx0ZXIgQnJpc2NvZSkKKworRXJyb3IgaW4gZmlsZXR5cGUgY2hlY2sgZm9yIC9ldGMvbW9kdXRpbHMuIChMdWJvbWlyIEhvc3QpCisKK0NzY29wZSBpbnRlcmZhY2U6IGFsbG9jYXRlZCBhIGJ1ZmZlciB0b28gc21hbGwuCisKK1dpbjE2OiByZW1vdmUgYSB0cmFpbGluZyBiYWNrc2xhc2ggZnJvbSBhIHBhdGggd2hlbiBvYnRhaW5pbmcgdGhlIHBlcm1pc3Npb24KK2ZsYWdzLiAoVmluY2UgTmVncmkpCisKK1doZW4gc2VhcmNoaW5nIGZvciB0YWdzIHdpdGggY2FzZSBpZ25vcmVkIFZpbSBjb3VsZCBoYW5nLgorCitXaGVuIHNlYXJjaGluZyBkaXJlY3RvcmllcyB3aXRoIGEgc3RvcGRpciBjb3VsZCBnZXQgYSBjcmFzaC4gIERpZCBub3QKK3JlLWFsbG9jYXRlIGVub3VnaCBtZW1vcnkuIChWaW5jZSBOZWdyaSkKKworQSB1c2VyIGNvbW1hbmQgbWF5IGNhdXNlIGEgY3Jhc2guICBEb24ndCB1c2UgdGhlIGNvbW1hbmQgaW5kZXggd2hlbiBpdCdzCituZWdhdGl2ZS4gKFZpbmNlIE5lZ3JpKQorCitwdXRlbnYoKSBkaWRuJ3Qgd29yayBmb3IgTWluZ1cgYW5kIEN5Z3dpbi4gKERhbiBTaGFycCkKKworTWFueSBmdW5jdGlvbnMgd2VyZSBjb21tb24gYmV0d2VlbiBvc19tc2Rvcy5jIGFuZCBvc193aW4xNi5jLiAgVXNlIG9zX21zZG9zLmMKK2ZvciBjb21waWxpbmcgdGhlIFdpbjE2IHZlcnNpb24gYW5kIHJlbW92ZSB0aGUgZnVuY3Rpb25zIGZyb20gb3Nfd2luMTYuYy4KKyhWaW5jZSBOZWdyaSkKKworRm9yIHRlcm1pbmFscyB0aGF0IGJlaGF2ZSBsaWtlIGFuIHh0ZXJtIGJ1dCBkaWRuJ3QgaGF2ZSBhIG5hbWUgdGhhdCBpcworcmVjb2duaXplZCwgdGhlIHdpbmRvdyB0aXRsZSB3b3VsZCBub3QgYWx3YXlzIGJlIHNldC4KKworV2hlbiBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIG9mZiAiOmhhcmRjb3B5IiBjb3VsZCBzdGlsbCBhdHRlbXB0IHByaW50aW5nCitjb2xvcnMuCisKK0NyYXNoIHdoZW4gdXNpbmcgIjpjYXRjaCIgd2l0aG91dCBhbiBhcmd1bWVudC4gIChTZXJ2YXRpdXMgQnJhbmR0KQorCitXaW4zMjogIjpuICMiIGRvdWJsZWQgdGhlIGJhY2tzbGFzaGVzLgorCitGaXhlZCBBcmFiaWMgc2hhcGluZyBmb3IgdGhlIGNvbW1hbmQgbGluZS4gKE5hZGltIFNoYWlrbGkpCisKK0F2b2lkIHNwbGl0dGluZyB1cCBhIHN0cmluZyBkaXNwbGF5ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBpbnRvIGluZGl2aWR1YWwKK2NoYXJhY3RlcnMsIGl0IGJyZWFrcyBBcmFiaWMgc2hhcGluZy4KKworVXBkYXRlZCBDeWd3aW4gYW5kIE1pbmdXIG1ha2VmaWxlcyB0byB1c2UgbW9yZSBkZXBlbmRlbmNpZXMuIChEYW4gU2hhcnApCisKKzJodG1sLnZpbSBkaWRuJ3Qgd29yayB3aXRoICdub21hZ2ljJyBzZXQuCisKK1doZW4gYSBsb2NhbCBhcmd1bWVudCBsaXN0IGlzIHVzZWQgYW5kIGRvaW5nICI6b25seSIgVmltIGNvdWxkIGNyYXNoIGxhdGVyLgorKE11cmFva2EgVGFybykKKworV2hlbiB1c2luZyAiJVAiIGluICdzdGF0dXNsaW5lJyBhbmQgdGhlIGZpbGxjaGFyIGlzICItIiwgYSBwZXJjZW50YWdlIG9mIDMlCitjb3VsZCByZXN1bHQgaW4gIi0zJSIuICBBbHNvIGF2b2lkIGNoYW5naW5nIGEgc3BhY2UgaW5zaWRlIGEgZmlsZW5hbWUgdG8gdGhlCitmaWxsIGNoYXJhY3Rlci4KKworTVN3aW46IEhhbmRsaW5nIG9mIGJhY2tzbGFzaGVzIGFuZCBkb3VibGUgcXVvdGVzIGZvciBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit3YXMgbm90IGxpa2Ugd2hhdCBvdGhlciBhcHBsaWNhdGlvbnMgZG8uICAoV2FsdGVyIEJyaXNjb2UpCisKK1Rlc3QzMiBzb21ldGltZXMgZGlkbid0IHdvcmssIGJlY2F1c2UgdGVzdDExLm91dCB3YXMgd3JpdHRlbiBhcyBURVNUMTEuT1VULgorCitBdm9pZCBwb2ludGVyIGNvbnZlcnNpb25zIHdhcm5pbmdzIGZvciBCb3JsYW5kIEMgNS41IGluIGRvc2luc3QuYyBhbmQKK3VuaW5zdGFsLmMuCisKK01vcmUgaW1wcm92ZW1lbnRzIGZvciBNYWtlX2JjMy5tYWsgZmlsZS4gKFdhbHRlciBCcmlzY29lKQorCitXaGVuICI6c3luIHN5bmMgbGluZWJyZWFrcz0xIiBpcyB1c2VkLCBlZGl0aW5nIHRoZSBmaXJzdCBsaW5lIGNhdXNlZCBhIHJlZHJhdworb2YgdGhlIHdob2xlIHNjcmVlbi4KKworTWFraW5nIHRyYW5zbGF0ZWQgbWVzc2FnZXMgZGlkbid0IHdvcmssIGlmX3BlcmwueHMgd2Fzbid0IGZvdW5kLiAoVmxhZAorU2FuZHJpbmkpCisKK01vdGlmIGFuZCBBdGhlbmE6IG1vdmluZyBWaW0gdG8gdGhlIGZvcmVncm91bmQgZGlkbid0IHVuaWNvbmlmeSBpdC4gIFVzZQorWE1hcFJhaXNlZCgpIGluc3RlYWQgb2YgWFJhaXNlV2luZG93KCkuIChTcmlrYW50aCBTYW5rYXJhbikKKworV2hlbiB1c2luZyAiOnB0YWciIGluIGEgd2luZG93IHdoZXJlICdzY3JvbGxiaW5kJyBpcyBzZXQgdGhlIHByZXZpZXcgd2luZG93Cit3b3VsZCBhbHNvIGhhdmUgJ3Njcm9sbGJpbmQnIHNldC4gIEFsc28gcmVzZXQgJ2ZvbGRjb2x1bW4nIGFuZCAnZGlmZicuCisKK1ZhcmlvdXMgY29tbWFuZHMgdGhhdCBzcGxpdCBhIHdpbmRvdyB0b29rIG92ZXIgJ3Njcm9sbGJpbmQnLCB3aGljaCBpcyBoYXJkbHkKK2V2ZXIgZGVzaXJlZC4gIEVzcC4gZm9yICJxOiIgYW5kICI6Y29wZW4iLiAgTW9zdGx5IHJlc2V0ICdzY3JvbGxiaW5kJyB3aGVuCitzcGxpdHRpbmcgYSB3aW5kb3cuCisKK1doZW4gJ3NoZWxsc2xhc2gnIGlzIHNldCBpbiB0aGUgdmltcmMgZmlsZSB0aGUgZmlyc3QgZW50cnkgb2YgIjpzY3JpcHRuYW1lcyIKK3dvdWxkIHN0aWxsIGhhdmUgYmFja3NsYXNoZXMuICBFbnRyaWVzIGluIHRoZSBxdWlja2ZpeCBsaXN0IGNvdWxkIGFsc28gaGF2ZQord3JvbmcgKGJhY2spc2xhc2hlcy4KKworV2luMzI6IHByaW50ZXIgZGlhbG9nIHRleHRzIHdlcmUgbm90IHRyYW5zbGF0ZWQuIChZYXN1aGlybyBNYXRzdW1vdG8pCisKK1doZW4gdXNpbmcgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB3aXRoIGEgS19TUEVDSUFMIGJ5dGUgb3IgYSBzcGVjaWFsIGtleSBjb2RlCit3aXRoICItLXJlbW90ZS1zZW5kIiB0aGUgcmVjZWl2ZWQgYnl0ZSBzZXF1ZW5jZSB3YXMgbWFuZ2xlZC4gIFB1dCBpdCBpbiB0aGUKK3R5cGVhaGVhZCBidWZmZXIgaW5zdGVhZCBvZiB0aGUgaW5wdXQgYnVmZmVyLgorCitXaW4zMjogVGhlIGN1cnNvciBwb3NpdGlvbiB3YXMgaW5jb3JyZWN0IGFmdGVyIGNoYW5naW5nIGN1cnNvciBzaGFwZS4KKyhZYXN1aGlybyBNYXRzdW1vdG8pLgorCitXaW4zMjogV2hlbiAnZW5jb2RpbmcnIGlzIG5vdCB0aGUgY3VycmVudCBjb2RlcGFnZSB0aGUgdGl0bGUgY291bGQgbm90IGJlIHNldAordG8gbm9uLWFzY2lpIGNoYXJhY3RlcnMuCisKKyJ2aW0gLWQgc2NwOi8vbWFjaGluZS9maWxlMSBzY3A6Ly9tYWNoaW5lL2ZpbGUyIiBkaWQgbm90IHdvcmssIHRoZXJlIHdhcyBvbmx5CitvbmUgd2luZG93LiAgRml4ZWQgdGhlIG5ldHJ3IHBsdWdpbiBub3QgdG8gd2lwZSBvdXQgdGhlIGJ1ZmZlciBpZiBpdCBpcworZGlzcGxheWVkIGluIG90aGVyIHdpbmRvd3MuCisKKyIvJCIgY2F1c2VkICJlIiBpbiBsYXN0IGNvbHVtbiBvZiBzY3JlZW4gdG8gZGlzYXBwZWFyLCBhIGhpZ2hsaWdodGVkIGJsYW5rIHdhcworZGlzcGxheWVkIGluc3RlYWQuCisKKyI6cy8gKlx6ZVxuLy9lIiByZW1vdmVkIHRoZSBsaW5lIGJyZWFrIGFuZCBpbnRyb2R1Y2VkIGFyYml0cmFyeSB0ZXh0LiAgV2FzCit1c2luZyB0aGUgbGluZSBjb3VudCBpbmNsdWRpbmcgd2hhdCBtYXRjaGVkIGFmdGVyIHRoZSAiXHplIi4KKworVXNpbmcgdGhlICJjIiBmbGFnIHdpdGggIjpzIiBjaGFuZ2VkIHRoZSBiZWhhdmlvciB3aGVuIGEgbGluZSBicmVhayBpcworcmVwbGFjZWQgYW5kICJcQDw9IiBpcyB1c2VkLiAgV2l0aG91dCAiYyIgYSBmb2xsb3dpbmcgbWF0Y2ggd2FzIG5vdCBmb3VuZC4KKworIjolcy9cdkFAPD1cbkJAPS8vZ2NlIiBnb3Qgc3R1Y2sgb24gIkFcbkIiIHdoZW4gZW50ZXJpbmcgIm4iLgorCitWTVM6IGFkZCBIQVZFX1NUUkZUSU1FIGluIHRoZSBjb25maWcgZmlsZS4gKFpvbHRhbiBBcnBhZGZmeSkKKworV2hlbiBhIGRlbGV0ZSBwcm9tcHRzIGlmIGEgZGVsZXRlIHNob3VsZCBjb250aW51ZSB3aGVuIHlhbmtpbmcgaXMgbm90Citwb3NzaWJsZSwgcmVzdG9yZSBtc2dfc2lsZW50IGFmdGVyd2FyZHMuCisKKyI6c2lnbiIgZGlkIG5vdCBjb21wbGFpbiBhYm91dCBhIG1pc3NpbmcgYXJndW1lbnQuCisKK1doZW4gYWRkaW5nIG9yIGRlbGV0aW5nIGEgc2lnbiAnaGxzZWFyY2gnIGhpZ2hsaWdodGluZyBjb3VsZCBkaXNhcHBlYXIuCitVc2UgdGhlIGdlbmVyaWMgZnVuY3Rpb25zIGZvciB1cGRhdGluZyBzaWducy4KKworT24gTVMtV2luZG93cyBOVCwgMksgYW5kIFhQIGRvbid0IHVzZSBjb21tYW5kLmNvbSBidXQgY21kLmV4ZSBmb3IgdGVzdGluZy4KK01ha2VzIHRoZSB0ZXN0cyB3b3JrIG9uIG1vcmUgc3lzdGVtcy4KKworSW4gdGhlIERPUyB0ZXN0cyBkb24ndCBjcmVhdGUgIi90bXAiIHRvIGF2b2lkIGFuIGVycm9yLgorCitNYWMgY2xhc3NpYzogUHJvYmxlbXMgd2l0aCByZWFkaW5nIGZpbGVzIHdpdGggQ1IgdnMgQ1IvTEYuICBSZWx5IG9uIHRoZQorbGlicmFyeSB2ZXJzaW9uIG9mIGZnZXRzKCkgdG8gd29yayBjb3JyZWN0bHkgZm9yIE1ldHJvd2Vya3MgMi4yLiAoQXhlbAorS2llbGhvcm4pCisKK1doZW4gdHlwaW5nIGEgcGFzc3dvcmQgYSAiKiIgd2FzIHNob3duIGZvciBlYWNoIGJ5dGUgaW5zdGVhZCBvZiBmb3IgZWFjaAorY2hhcmFjdGVyLiAgQWRkZWQgbXVsdGktYnl0ZSBoYW5kbGluZyB0byBkaXNwbGF5aW5nIHRoZSBzdGFycy4gKFlhc3VoaXJvCitNYXRzdW1vdG8pCisKK1doZW4gdXNpbmcgUGVybCA1LjYgYWNjZXNzaW5nICRjdXJidWYgZG9lc24ndCB3b3JrLiAgQWRkIGFuICNpZmRlZiB0byB1c2UKK2RpZmZlcmVudCBjb2RlIGZvciA1LjYgYW5kIDUuOC4gIChEYW4gU2hhcnApCisKK01pbmdXIGFuZCBDeWd3aW46IERvbid0IHN0cmlwIHRoZSBkZWJ1ZyBleGVjdXRhYmxlLiAoRGFuIFNoYXJwKQorCitBbiBhc3NpZ25tZW50IHRvIGEgdmFyaWFibGUgd2l0aCBjdXJsaWVzIHRoYXQgaW5jbHVkZXMgIj09IiBkb2Vzbid0IHdvcmsuCitTa2lwIG92ZXIgdGhlIGN1cmxpZXMgYmVmb3JlIHNlYXJjaGluZyBmb3IgYW4gIj0iLiAoVmluY2UgTmVncmkpCisKK1doZW4gY2FuY2VsbGluZyB0aGUgc2VsZWN0aW9uIG9mIGFsdGVybmF0ZSBtYXRjaGluZyB0YWdzIHRoZSB0YWcgc3RhY2sgaW5kZXgKK2NvdWxkIGJlIGFkdmFuY2VkIHRvbyBmYXIsIHJlc3VsdGluZyBpbiBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdXNpbmcgQ1RSTC1ULgorCisKK1BhdGNoIDYuMS4wMDEKK1Byb2JsZW06ICAgIFdoZW4gZm9ybWF0dGluZyBVVEYtOCB0ZXh0IGl0IG1pZ2h0IGJlIHdyYXBwZWQgYXQgYSBzcGFjZSB0aGF0IGlzCisJICAgIGZvbGxvd2VkIGJ5IGEgY29tcG9zaW5nIGNoYXJhY3Rlci4gKFJhcGhhZWwgRmlua2VsKQorCSAgICBBbHNvIGNvcnJlY3QgYSBkaXNwbGF5IGVycm9yIGZvciByZW1vdmluZyBhIGNvbXBvc2luZyBjaGFyIG9uIHRvcAorCSAgICBvZiBhIHNwYWNlLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgY29tcG9zaW5nIGNoYXJhY3RlciBvbiBhIHNwYWNlLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvbWlzYzEuYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4wMDIgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IGFmdGVyIGEgIjpwb3B1cCIgY29tbWFuZCB0aGUgbW91c2UgcG9pbnRlciBzdGF5cyBoaWRkZW4uCitTb2x1dGlvbjogICBVbmhpZGUgdGhlIG1vdXNlIHBvaW50ZXIgYmVmb3JlIHNob3dpbmcgdGhlIG1lbnUuCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4xLjAwMworUHJvYmxlbTogICAgV2hlbiAnbGFzdHN0YXR1cycgaXMgemVybyBhbmQgdGhlcmUgaXMgYSB2ZXJ0aWNhbCBzcGxpdCwgdGhlCisJICAgIHZlcnRpY2FsIHNlcGFyYXRvciBpcyBkcmF3biBpbiB0aGUgY29tbWFuZCBsaW5lLiAoU3Jpa2FudAorCSAgICBTYW5rYXJhbikKK1NvbHV0aW9uOiAgIERvbid0IGRyYXcgdGhlIHZlcnRpY2FsIHNlcGFyYXRvciB3aGVyZSB0aGVyZSBpcyBubyBzdGF0dXNsaW5lLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjAwNAorUHJvYmxlbTogICAgVW5pY29kZSAzLjIgY2hhbmdlcyB3aWR0aCBhbmQgY29tcG9zaW5nIG9mIGEgZmV3IGNoYXJhY3RlcnMuCisJICAgIChNYXJrdXMgS3VobikKK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgVW5pY29kZSBmdW5jdGlvbnMgZm9yIHRoZSBjaGFyYWN0ZXIgd2lkdGggYW5kIGNvbXBvc2luZworCSAgICBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjEuMDA1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIG1vcmUgdGhhbiA1MCBpdGVtcyBpbiAnc3RhdHVzbGluZScgVmltIG1pZ2h0IGNyYXNoLgorCSAgICAoU3RldmUgSGFsbCkKK1NvbHV0aW9uOiAgIEluY3JlbWVudCBpdGVtY250IGluIGNoZWNrX3N0bF9vcHRpb24oKS4gKEZsZW1taW5nIE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMS4wMDYKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIlAiIGluIFZpc3VhbCBtb2RlIHRvIHB1dCBsaW5ld2lzZSBzZWxlY3RlZCB0ZXh0LCB0aGUKKwkgICAgd3JvbmcgdGV4dCBpcyBkZWxldGVkLiAoSmFrdWIgVHVyc2tpKQorU29sdXRpb246ICAgUHV0IHRoZSB0ZXh0IGJlZm9yZSB0aGUgVmlzdWFsIGFyZWEgYW5kIGNvcnJlY3QgdGhlIHRleHQgdG8gYmUKKwkgICAgZGVsZXRlZCBmb3IgdGhlIGluc2VydGVkIGxpbmVzLgorCSAgICBBbHNvIGZpeCB0aGF0ICJwIiBvZiBsaW5ld2lzZSB0ZXh0IGluIFZpc3VhbCBibG9jayBtb2RlIGRvZXNuJ3QKKwkgICAgd29yayBjb3JyZWN0bHkuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jCisKK1BhdGNoIDYuMS4wMDcKK1Byb2JsZW06ICAgIFVzaW5nICI6ZmlsZXR5cGUgcGx1Z2luIG9mZiIgd2hlbiBmaWxldHlwZSBwbHVnaW5zIHdlcmUgbmV2ZXIKKwkgICAgZW5hYmxlZCBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZS4gKFlpdSBXaW5nKQorU29sdXRpb246ICAgVXNlICI6c2lsZW50ISIgdG8gYXZvaWQgdGhlIGVycm9yIG1lc3NhZ2UuCitGaWxlczoJICAgIHJ1bnRpbWUvZnRwbHVnb2YudmltCisKK1BhdGNoIDYuMS4wMDgKK1Byb2JsZW06ICAgIFRoZSAiJSIgY29tbWFuZCBkb2Vzbid0IGlnbm9yZSBcIiBpbnNpZGUgYSBzdHJpbmcsIGl0J3Mgc2VlbiBhcworCSAgICB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuIChLZW4gQ2xhcmspCitTb2x1dGlvbjogICBTa2lwIGEgZG91YmxlIHF1b3RlIHByZWNlZGVkIGJ5IGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjEuMDA5CitQcm9ibGVtOiAgICBWaW0gY3Jhc2hlcyB3aGVuIHVzaW5nIGEgaHVnZSBudW1iZXIgZm9yIHRoZSBtYXh3aWQgdmFsdWUgaW4gYQorCSAgICBzdGF0dXNsaW5lLiAoUm9iZXJ0IE0uIE5vd290bmlhaykKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhbiBvdmVyZmxvdyB0aGF0IG1ha2VzIG1heHdpZCBuZWdhdGl2ZS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4wMTAKK1Byb2JsZW06ICAgIFNlYXJjaGluZyBiYWNrd2FyZHMgZm9yIGEgcXVlc3Rpb24gbWFyayB3aXRoICI/XD8iIGRvZXNuJ3Qgd29yay4KKwkgICAgKEFsYW4gSXNhYWMpICBTYW1lIHByb2JsZW0gaW4gIjpzP1w/PyIgYW5kICI6Zz9cPz8iLgorU29sdXRpb246ICAgQ2hhbmdlIHRoZSAiXD8iIGluIGEgcGF0dGVybiB0byAiPyIgd2hlbiB1c2luZyAiPyIgYXMgZGVsaW1pdGVyLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL3Byb3RvL3JlZ2V4cC5wcm8sIHNyYy9yZWdleHAuYywKKwkgICAgc3JjL3NlYXJjaC5jLCBzcmMvc3ludGF4LmMsIHNyYy90YWcuYworCitQYXRjaCA2LjEuMDExCitQcm9ibGVtOiAgICBYSU06IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbiAnbnVtYmVyJyBpcyBzZXQuICBBbHNvLCBhIGZvY3VzCisJICAgIHByb2JsZW0gd2hlbiBzZWxlY3RpbmcgY2FuZGlkYXRlcy4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgWElNIHByb2JsZW1zLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4wMTIKK1Byb2JsZW06ICAgIEEgc3lzdGVtKCkgY2FsbCBtaWdodCBmYWlsIGlmIGZyZWFkKCkgZG9lcyBDUi1MRiB0byBMRgorCSAgICB0cmFuc2xhdGlvbi4KK1NvbHV0aW9uOiAgIE9wZW4gdGhlIG91dHB1dCBmaWxlIGluIGJpbmFyeSBtb2RlLiAoUGF2b2wgSHVoYXMpCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMS4wMTMKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgZGVmYXVsdCBmb3IgJ3ByaW50ZXhwcicgZG9lc24ndCB3b3JrIHdoZW4gdGhlcmUgYXJlCisJICAgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiAncHJpbnRkZXZpY2UnLgorU29sdXRpb246ICAgQWRkIGRvdWJsZSBxdW90ZXMgYXJvdW5kIHRoZSBkZXZpY2UgbmFtZS4gKE1pa2UgV2lsbGlhbXMpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29wdGlvbi50eHQsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMDE0CitQcm9ibGVtOiAgICBBbiBvcGVyYXRvciBsaWtlICJyIiB1c2VkIGluIFZpc3VhbCBibG9jayBtb2RlIGRvZXNuJ3QgdXNlCisJICAgICd2aXJ0dWFsZWRpdCcgd2hlbiBpdCdzIHNldCB0byAiYmxvY2siLgorU29sdXRpb246ICAgQ2hlY2sgZm9yICd2aXJ0dWFsZWRpdCcgYmVpbmcgYWN0aXZlIGluIFZpc3VhbCBibG9jayBtb2RlIHdoZW4gdGhlCisJICAgIG9wZXJhdG9yIHdhcyBzdGFydGVkLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2dsb2JhbHMuaCwgc3JjL21pc2MyLmMsIHNyYy9ub3JtYWwuYywKKwkgICAgc3JjL29wcy5jLCBzcmMvdW5kby5jCisKK1BhdGNoIDYuMS4wMTUKK1Byb2JsZW06ICAgIEFmdGVyIHBhdGNoIDYuMS4wMTQgY2FuJ3QgY29tcGlsZSB3aXRoIHRpbnkgZmVhdHVyZXMuIChDaHJpc3RpYW4KKwkgICAgSi4gUm9iaW5zb24pCitTb2x1dGlvbjogICBBZGQgdGhlIG1pc3NpbmcgZGVmaW5lIG9mIHZpcnR1YWxfb3AuCitGaWxlczoJICAgIHNyYy92aW0uaAorCitQYXRjaCA2LjEuMDE2IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBPdXRwdXR0aW5nIEhlYnJldyBvciBBcmFiaWMgdGV4dCBtaWdodCBoYXZlIGEgcHJvYmxlbSB3aXRoCisJICAgIHJldmVyc2luZy4KK1NvbHV0aW9uOiAgIFJlcGxhY2UgdGhlIFJldk91dCgpIGZ1bmN0aW9uIHdpdGggRVRPX0lHTk9SRUxBTkdVQUdFLiAoUm9uIEFhcm9uKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMS4wMTcKK1Byb2JsZW06ICAgIEN5Z3dpbjogQWZ0ZXIgcGF0Y2ggNi4xLjAxMiBTdGlsbCBkb2Vzbid0IGRvIGJpbmFyeSBmaWxlIEkvTy4KKwkgICAgKFBhdm9sIEp1aGFzKQorU29sdXRpb246ICAgRGVmaW5lIEJJTkFSWV9GSUxFX0lPIGZvciBDeWd3aW4uCitGaWxlczoJICAgIHNyYy9vc191bml4LmgKKworUGF0Y2ggNi4xLjAxOAorUHJvYmxlbTogICAgRXJyb3IgbWVzc2FnZSB3aGVuIHVzaW5nIGN0ZXJtIGhpZ2hsaWdodGluZy4gKExlb25hcmRvIERpIExlbGxhKQorU29sdXRpb246ICAgUmVtb3ZlIGEgYmFja3NsYXNoIGJlZm9yZSBhIHF1ZXN0aW9uIG1hcmsuCitGaWxlczoJICAgIHJ1bnRpbWUvc3ludGF4L2N0ZXJtLnZpbQorCitQYXRjaCA2LjEuMDE5IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBGaWxlIG5hbWUgaXMgbWVzc2VkIHVwIHdoZW4gZWRpdGluZyBqdXN0IGEgZHJpdmUgbmFtZS4KKwkgICAgKFdhbHRlciBCcmlzY29lKQorU29sdXRpb246ICAgQXBwZW5kIGEgTlVMIGFmdGVyIHRoZSBkcml2ZSBuYW1lLiAoVmluY2UgTmVncmkpCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMS4wMjAKK1Byb2JsZW06ICAgIGNvbCgiJz4iKSByZXR1cm5zIGEgaHVnZSBudW1iZXIgYWZ0ZXIgdXNpbmcgVmlzdWFsIGxpbmUgbW9kZS4KK1NvbHV0aW9uOiAgIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5lIGluc3RlYWQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjAyMSAoZGVwZW5kcyBvbiBwYXRjaCA2LjEuMDA5KQorUHJvYmxlbTogICAgVmltIGNyYXNoZXMgd2hlbiB1c2luZyBhIGh1Z2UgbnVtYmVyIGZvciB0aGUgbWlud2lkIHZhbHVlIGluIGEKKwkgICAgc3RhdHVzbGluZS4gKFJvYmVydCBNLiBOb3dvdG5pYWspCitTb2x1dGlvbjogICBDaGVjayBmb3IgYW4gb3ZlcmZsb3cgdGhhdCBtYWtlcyBtaW53aWQgbmVnYXRpdmUuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMDIyCitQcm9ibGVtOiAgICBHcmFiYmluZyB0aGUgc3RhdHVzIGxpbmUgYWJvdmUgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgd29ya3MgbGlrZQorCSAgICB0aGUgYm90dG9tIHN0YXR1cyBsaW5lIHdhcyBncmFiYmVkLiAoSmltIEJhdHRsZSkKK1NvbHV0aW9uOiAgIE1ha2UgaXQgcG9zc2libGUgdG8gZ3JhYiB0aGUgc3RhdHVzIGxpbmUgYWJvdmUgdGhlIGNvbW1hbmQtbGluZQorCSAgICB3aW5kb3csIHNvIHRoYXQgaXQgY2FuIGJlIHJlc2l6ZWQuCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMS4wMjMgKGV4dHJhKQorUHJvYmxlbTogICAgVk1TOiBydW5uaW5nIHRlc3RzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgbWFrZWZpbGUuIChab2x0YW4gQXJwYWRmZnkpCitGaWxlczoJICAgIHNyYy90ZXN0ZGlyL01ha2Vfdm1zLm1tcworCitQYXRjaCA2LjEuMDI0CitQcm9ibGVtOiAgICBXaGVuIGhlYWRlciBmaWxlcyB1c2UgYSBuZXcgc3ludGF4IGZvciBkZWNsYXJpbmcgZnVuY3Rpb25zLCBWaW0KKwkgICAgY2FuJ3QgZmlndXJlIG91dCBtaXNzaW5nIHByb3RvdHlwZXMgcHJvcGVybHkuCitTb2x1dGlvbjogICBBY2NlcHQgYnJhY2VzIGFyb3VuZCBhIGZ1bmN0aW9uIG5hbWUuIChNLiBXYXJuZXIgTG9zaCkKK0ZpbGVzOgkgICAgc3JjL29zZGVmLnNoCisKK1BhdGNoIDYuMS4wMjUKK1Byb2JsZW06ICAgIEZpdmUgbWVzc2FnZXMgZm9yICJ2aW0gLS1oZWxwIiBkb24ndCBzdGFydCB3aXRoIGEgY2FwaXRhbC4gKFZsYWQKKwkgICAgU2FuZHJpbmkpCitTb2x1dGlvbjogICBNYWtlIHRoZSBtZXNzYWdlcyBjb25zaXN0ZW50LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4wMjYKK1Byb2JsZW06ICAgICoucGF0Y2ggZmlsZXMgYXJlIG5vdCByZWNvZ25pemVkIGFzIGRpZmYgZmlsZXMuICBJbiBhIHNjcmlwdCBhCisJICAgICJWQVI9dmFsIiBhcmd1bWVudCBhZnRlciAiZW52IiBpc24ndCBpZ25vcmVkLiAgUEhQIHNjcmlwdHMgYXJlIG5vdAorCSAgICByZWNvZ25pemVkLgorU29sdXRpb246ICAgQWRkICoucGF0Y2ggZm9yIGRpZmYgZmlsZXR5cGVzLiAgSWdub3JlICJWQVI9dmFsIi4gIFJlY29nbml6ZSBQSFAKKwkgICAgc2NyaXB0cy4gKFJvbWFuIE5ldWhhdXNlcikKK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0sIHJ1bnRpbWUvc2NyaXB0cy52aW0KKworUGF0Y2ggNi4xLjAyNworUHJvYmxlbTogICAgV2hlbiAnZm9sZGNvbHVtbicgaXMgbm9uLXplcm8sIGEgc3BlY2lhbCBjaGFyYWN0ZXIgdGhhdCB3cmFwcyB0bworCSAgICB0aGUgbmV4dCBsaW5lIGRpc3R1cmJzIHRoZSBmb2xkY29sdW1uIGhpZ2hsaWdodGluZy4gIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBPbmx5IHVzZSB0aGUgc3BlY2lhbCBoaWdobGlnaHRpbmcgd2hlbiBkcmF3aW5nIHRleHQgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4wMjgKK1Byb2JsZW06ICAgIENsaWVudC1zZXJ2ZXI6IFdoZW4gYSAtLXJlbW90ZS1leHByIGZhaWxzLCBWaW0gc3RpbGwgZXhpdHMgd2l0aAorCSAgICBzdGF0dXMgemVyby4KK1NvbHV0aW9uOiAgIEV4aXQgVmltIHdpdGggYSBub24temVybyBzdGF0dXMgdG8gaW5kaWNhdGUgdGhlIC0tcmVtb3RlLWV4cHIKKwkgICAgZmFpbGVkLiAoVGhvbWFzIFNjb3R0IFVyYmFuKQorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4wMjkKK1Byb2JsZW06ICAgIFdoZW4gJ2VuY29kaW5nJyBpcyBhbiA4LWJpdCBlbmNvZGluZyBvdGhlciB0aGFuICJsYXRpbjEiLCBlZGl0aW5nCisJICAgIGEgdXRmLTggb3Igb3RoZXIgVW5pY29kZSBmaWxlIHVzZXMgdGhlIHdyb25nIGNvbnZlcnNpb24uIChKYW4KKwkgICAgRmVkYWspCitTb2x1dGlvbjogICBEb24ndCB1c2UgVW5pY29kZSB0byBsYXRpbjEgY29udmVyc2lvbiBmb3IgOC1iaXQgZW5jb2RpbmdzIG90aGVyCisJICAgIHRoYW4gImxhdGluMSIuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMDMwCitQcm9ibGVtOiAgICBXaGVuIENUUkwtTiBpcyBtYXBwZWQgaW4gSW5zZXJ0IG1vZGUsIGl0IGlzIGFsc28gbWFwcGVkIGFmdGVyCisJICAgIENUUkwtWCBDVFJMLU4sIHdoaWxlIGl0IGlzIG5vdCBtYXBwZWQgYWZ0ZXIgQ1RSTC1YIENUUkwtRi4KKwkgICAgKEtvbnRyYSBHZXJnZWx5KQorU29sdXRpb246ICAgRG9uJ3QgbWFwIENUUkwtTiBhZnRlciBDVFJMLVggQ1RSTC1OLiAgU2FtZSBmb3IgQ1RSTC1QLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuMS4wMzEKK1Byb2JsZW06ICAgIEN5Z3dpbjogWHhkIGNvdWxkIHJlYWQgYSBmaWxlIGluIHRleHQgbW9kZSBpbnRlYWQgb2YgYmluYXJ5IG1vZGUuCitTb2x1dGlvbjogICBVc2UgInJiIiBvciAicnQiIHdoZW4gbmVlZGVkLiAoUGF2b2wgSnVoYXMpCitGaWxlczoJICAgIHNyYy94eGQveHhkLmMKKworUGF0Y2ggNi4xLjAzMgorUHJvYmxlbTogICAgQ2FuJ3Qgc3BlY2lmeSBhIHF1aWNrZml4IGZpbGUgd2l0aG91dCBqdW1waW5nIHRvIHRoZSBmaXJzdCBlcnJvci4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgIjpjZ2V0ZmlsZSIgY29tbWFuZC4gKFllZ2FwcGFuIExha3NobWFuYW4pCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2luZGV4LnR4dCwgcnVudGltZS9kb2MvcXVpY2tmaXgudHh0LCBzcmMvZXhfY21kcy5oLAorCSAgICBzcmMvcXVpY2tmaXguYworCitQYXRjaCA2LjEuMDMzCitQcm9ibGVtOiAgICBHVUk6IFdoZW4gdGhlIHNlbGVjdGlvbiBpcyBsb3N0IGFuZCB0aGUgVmlzdWFsIGhpZ2hsaWdodGluZyBpcworCSAgICBjaGFuZ2VkIHRvIHVuZGVybGluaW5nLCB0aGUgY3Vyc29yIGlzIGxlZnQgaW4gYSBkaWZmZXJlbnQKKwkgICAgcG9zaXRpb24uIChDaHJpc3RpYW4gTWljaG9uKQorU29sdXRpb246ICAgVXBkYXRlIHRoZSBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIgcmVkcmF3aW5nIHRoZSBzZWxlY3Rpb24uCitGaWxlczoJICAgIHNyYy91aS5jCisKK1BhdGNoIDYuMS4wMzQKK1Byb2JsZW06ICAgIEEgQ1ZTIGRpZmYgZmlsZSBpc24ndCByZWNvZ25pemVkIGFzIGRpZmYgZmlsZXR5cGUuCitTb2x1dGlvbjogICBTa2lwIGxpbmVzIHN0YXJ0aW5nIHdpdGggIj8gIiBiZWZvcmUgY2hlY2tpbmcgZm9yIGFuICJJbmRleDoiIGxpbmUuCitGaWxlczoJICAgIHJ1bnRpbWUvc2NyaXB0cy52aW0KKworUGF0Y2ggNi4xLjAzNSAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjAxNikKK1Byb2JsZW06ICAgIFdpbjMyOiBPdXRwdXR0aW5nIEhlYnJldyBvciBBcmFiaWMgdGV4dCBtaWdodCBoYXZlIGEgcHJvYmxlbSB3aXRoCisJICAgIHJldmVyc2luZyBvbiBNUy1XaW5kb3dzIDk1Lzk4L01FLgorU29sdXRpb246ICAgUmVzdG9yZSB0aGUgUmV2T3V0KCkgZnVuY3Rpb24gYW5kIHVzZSBpdCBpbiBzcGVjaWZpYyBzaXR1YXRpb25zCisJICAgIG9ubHkuIChSb24gQWFyb24pCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjAzNgorUHJvYmxlbTogICAgVGhpcyBjb21tYW5kIG1heSBjYXVzZSBhIGNyYXNoOiAiOnYvLi8sLy8taiIuIChSYWxmIEFyZW5zKQorU29sdXRpb246ICAgQ29tcHV0ZSB0aGUgcmlnaHQgbGVuZ3RoIG9mIHRoZSByZWdleHAgd2hlbiBpdCdzIGVtcHR5LgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4xLjAzNworUHJvYmxlbTogICAgV2hlbiAnbGF6eXJlZHJhdycgaXMgc2V0LCBwcmVzc2luZyAicSIgYXQgdGhlIGhpdC1lbnRlciBwcm9tcHQKKwkgICAgY2F1c2VzIGFuIGluY29tcGxldGUgcmVkcmF3IGFuZCB0aGUgY3Vyc29yIGlzbid0IHBvc2l0aW9uZWQuCisJICAgIChMdWJvbWlyIEhvc3QpCitTb2x1dGlvbjogICBPdmVycnVsZSAnbGF6eXJlZHJhdycgd2hlbiBkb19yZWRyYXcgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjAzOAorUHJvYmxlbTogICAgTXVsdGktYnl0ZTogV2hlbiBhICI6cyIgY29tbWFuZCBjb250YWlucyBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyCisJICAgIHdoZXJlIHRoZSB0cmFpbCBieXRlIGlzICd+JyB0aGUgdGV4dCBpcyBtZXNzZWQgdXAuCitTb2x1dGlvbjogICBQcm9wZXJseSBza2lwIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBpbiByZWd0aWxkZSgpIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjEuMDM5CitQcm9ibGVtOiAgICBXaGVuIGZvbGRzIGFyZSBkZWZpbmVkIGFuZCB0aGUgZmlsZSBpcyBjaGFuZ2VkIG91dHNpZGUgb2YgVmltLAorCSAgICByZWxvYWRpbmcgdGhlIGZpbGUgZG9lc24ndCB1cGRhdGUgdGhlIGZvbGRzLiAoQW5kZXJzCisJICAgIFNjaGFjay1OaWVsc2VuKQorU29sdXRpb246ICAgUmVjb21wdXRlIHRoZSBmb2xkcyBhZnRlciByZWxvYWRpbmcgdGhlIGZpbGUuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMDQwCitQcm9ibGVtOiAgICBXaGVuIGNoYW5naW5nIGRpcmVjdG9yeSBmb3IgZXhwYW5kaW5nIGEgZmlsZSBuYW1lIGZhaWxzIHRoZXJlIGlzCisJICAgIG5vIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBHaXZlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgc2l0dWF0aW9uLiAgRG9uJ3QgY2hhbmdlIGRpcmVjdG9yeQorCSAgICBpZiB3ZSBjYW4ndCByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIGRpcmVjdG9yeS4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9taXNjMS5jLAorCSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMS4wNDEKK1Byb2JsZW06ICAgICI6bWt2aW1yYyIgZG9lc24ndCBoYW5kbGUgYSBtYXBwaW5nIHRoYXQgaGFzIGEgbGVhZGluZyBzcGFjZSBpbgorCSAgICB0aGUgcmhzLiAoRGF2eWQgT25kcmVqa28pCitTb2x1dGlvbjogICBJbnNlcnQgYSBDVFJMLVYgYmVmb3JlIHRoZSBsZWFkaW5nIHNwYWNlLiAgQWxzbyBkaXNwbGF5IGxlYWRpbmcKKwkgICAgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlIGluIDw+IGZvcm0uCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMsIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4xLjA0MgorUHJvYmxlbTogICAgInZpbSAtciIgZG9lc24ndCBzaG93IGFsbCBtYXRjaGVzIHdoZW4gJ3dpbGRpZ25vcmUnIHJlbW92ZXMgc3dhcAorCSAgICBmaWxlcy4gKFN0ZXZlIFRhbGxleSkKK1NvbHV0aW9uOiAgIEtlZXAgYWxsIG1hdGNoaW5nIHN3YXAgZmlsZSBuYW1lcy4KK0ZpbGVzOgkgICAgc3JjL21lbWxpbmUuYworCitQYXRjaCA2LjEuMDQzCitQcm9ibGVtOiAgICBBZnRlciBwYXRjaCA2LjEuMDQwIGEgZmV3IHdhcm5pbmdzIGFyZSBwcm9kdWNlZC4KK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGUgY2FzdCB0byAiY2hhciAqIiBmb3IgbWNoX2NoZGlyKCkuIChBeGVsIEtpZWxob3JuKQorRmlsZXM6CSAgICBzcmMvZGlmZi5jLCBzcmMvZXhfZG9jbWQuYy5jLCBzcmMvbWlzYzEuYywgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMDQ0IChleHRyYSkKK1Byb2JsZW06ICAgIEdVSTogV2hlbiB1c2luZyB0aGUgZmluZC9yZXBsYWNlIGRpYWxvZyB3aXRoIHRleHQgdGhhdCBjb250YWlucyBhCisJICAgIHNsYXNoLCBhbiBpbnZhbGlkIHN1YnN0aXR1dGUgY29tbWFuZCBpcyBnZW5lcmF0ZWQuCisJICAgIE9uIFdpbjMyIGEgZmluZCBkb2Vzbid0IHdvcmsgd2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LgorU29sdXRpb246ICAgRXNjYXBlIHNsYXNoZXMgd2l0aCBhIGJhY2tzbGFzaC4KKwkgICAgTWFrZSB0aGUgV2luMzIsIE1vdGlmIGFuZCBHVEsgZ3VpIHVzZSBjb21tb24gY29kZSBmb3IgdGhlCisJICAgIGZpbmQvcmVwbGFjZSBkaWFsb2cuCisJICAgIEFkZCB0aGUgIm1hdGNoIGNhc2UiIG9wdGlvbiBmb3IgTW90aWYgYW5kIEdUSy4KK0ZpbGVzOgkgICAgc3JjL2ZlYXR1cmUuaCwgc3JjL3Byb3RvL2d1aS5wcm8sIHNyYy9ndWkuYywgc3JjL2d1aS5oLAorCSAgICBzcmMvZ3VpX21vdGlmLmMsIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4xLjA0NQorUHJvYmxlbTogICAgSW4gVmlzdWFsIG1vZGUsIHdpdGggbG90cyBvZiBmb2xkcyBhbmQgJ3Njcm9sbG9mZicgc2V0IHRvIDk5OSwKKwkgICAgbW92aW5nIHRoZSBjdXJzb3IgZG93biBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUgY2F1c2VzIHRoZSB0ZXh0IHRvCisJICAgIGp1bXAgdXAgYW5kIGRvd24uIChMdWJvbWlyIEhvc3QpCitTb2x1dGlvbjogICBUYWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBjdXJzb3IgbWF5IGJlIG9uIHRoZSBsYXN0IGxpbmUgb2YgYQorCSAgICBjbG9zZWQgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL21vdmUuYworCitQYXRjaCA2LjEuMDQ2CitQcm9ibGVtOiAgICBYMTEgR1VJOiAiOnNldCBsc3A9MiBnY3I9bi12LWk6aG9yMS1ibGlua29uMCIgZHJhd3MgYSBibGFjaworCSAgICByZWN0YW5nbGUuICAiOnNldCBsc3A9MiBnY3I9bi12LWk6aG9yMTAtYmxpbmtvbjAiIG1ha2VzIHRoZSBjdXJzb3IKKwkgICAgZGlzYXBwZWFyLiAgKE5hbSBTdW5nSHl1bikKK1NvbHV0aW9uOiAgIENvcnJlY3RseSBjb21wdXRlIHRoZSBoZWlnaHQgb2YgdGhlIGhvcml6b250YWwgY3Vyc29yLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYywgc3JjL2d1aV94MTEuYworCitQYXRjaCA2LjEuMDQ3CitQcm9ibGVtOiAgICBXaGVuIHNraXBwaW5nIGNvbW1hbmRzIGFmdGVyIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCwgZXhwcmVzc2lvbnMKKwkgICAgZm9yICI6aWYiLCAiO2Vsc2VpZiIgYW5kICI6d2hpbGUiIGFyZSBzdGlsbCBldmFsdWF0ZWQuCitTb2x1dGlvbjogICBTa2lwIHRoZSBleHByZXNzaW9uIGFmdGVyIGFuIGVycm9yLiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjA0OAorUHJvYmxlbTogICAgVW5pY29kZSAzLjIgY2hhbmdlcyB3ZXJlIG1pc3NpbmcgYSBmZXcgSGFuZ3VsIEphbW8gY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIFJlY29nbml6ZSBtb3JlIGNoYXJhY3RlcnMgYXMgY29tcG9zaW5nIGNoYXJhY3RlcnMuIChKdW5nc2hpayBTaGluKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjEuMDQ5IChleHRyYSkKK1Byb2JsZW06ICAgIE9uIGEgMzIgYml0IGRpc3BsYXkgYSB2YWxpZCBjb2xvciBtYXkgY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSwKKwkgICAgYmVjYXVzZSBpdHMgcGl4ZWwgdmFsdWUgaXMgbmVnYXRpdmUuIChDaHJpcyBQYXVsc29uLUVsbGlzKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIC0xMTExMSBpbnN0ZWFkIG9mIHRoZSBjb2xvciBiZWluZyBuZWdhdGl2ZS4KKwkgICAgRG9uJ3QgYWRkIG9uZSB0byB0aGUgcGl4ZWwgdmFsdWUsIC0xIG1heSBiZSB1c2VkIGZvciB3aGl0ZS4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL2d1aS5jLCBzcmMvZ3VpLmgsIHNyYy9ndWlfYW1pZ2EuYywKKwkgICAgc3JjL2d1aV9hdGhlbmEuYywgc3JjL2d1aV9iZW9zLmNjLCBzcmMvZ3VpX2d0a194MTEuYywKKwkgICAgc3JjL2d1aV9tYWMuYywgc3JjL2d1aV9tb3RpZi5jLCBzcmMvZ3VpX3Bob3Rvbi5jLAorCSAgICBzcmMvZ3VpX3Jpc2Nvcy5jLCBzcmMvZ3VpX3cxNi5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jLAorCSAgICBzcmMvZ3VpX3gxMS5jLCBzcmMvbWJ5dGUuYywgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMS4wNTAgKGRlcGVuZHMgb24gNi4xLjA0OSkKK1Byb2JsZW06ICAgIEFmdGVyIHBhdGNoIDYuMS4wNDkgdGhlIG5vbi1HVUkgdmVyc2lvbiBkb2Vzbid0IGNvbXBpbGUuCitTb2x1dGlvbjogICBBZGQgYW4gI2lmZGVmIEZFQVRfR1VJLiAgKFJvYmVydCBTdGFudG9uKQorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4xLjA1MSAoZGVwZW5kcyBvbiA2LjEuMDQ0KQorUHJvYmxlbTogICAgRG9lc24ndCBjb21waWxlIHdpdGggR1VJIGFuZCBzbWFsbCBmZWF0dXJlcy4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgI2lmIGZvciBnYV9hcHBlbmQoKS4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4xLjA1MgorUHJvYmxlbTogICAgVW5peDogVGhlIGV4ZWN1dGFibGUoKSBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgd2hlbiB0aGUgIndoaWNoIgorCSAgICBjb21tYW5kIGlzbid0IGF2YWlsYWJsZS4KK1NvbHV0aW9uOiAgIEdvIHRocm91Z2ggJFBBVEggbWFudWFsbHkuICBBbHNvIG1ha2VzIGl0IHdvcmsgZm9yIFZNUy4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMDUzCitQcm9ibGVtOiAgICBXaGVuICdzZXNzaW9ub3B0aW9ucycgY29udGFpbnMgImdsb2JhbHMiLCBvciAibG9jYWxvcHRpb25zIiBhbmQgYW4KKwkgICAgb3B0aW9uIHZhbHVlIGNvbnRhaW5zIGEgbGluZSBicmVhaywgdGhlIHJlc3VsdGluZyBzY3JpcHQgaXMgd3JvbmcuCitTb2x1dGlvbjogICBVc2UgIlxuIiBhbmQgIlxyIiBmb3IgYSBsaW5lIGJyZWFrLiAoU3JpbmF0aCBBdmFkaGFudWxhKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4wNTQKK1Byb2JsZW06ICAgIEdVSTogQSBtb3VzZSBjbGljayBpcyBub3QgcmVjb2duaXplZCBhdCB0aGUgbW9yZSBwcm9tcHQsIGV2ZW4gd2hlbgorCSAgICAnbW91c2UnIGluY2x1ZGVzICdyJy4KK1NvbHV0aW9uOiAgIFJlY29nbml6ZSBhIG1vdXNlIGNsaWNrIGF0IHRoZSBtb3JlIHByb21wdC4KKwkgICAgQWxzbyBhY2NlcHQgYSBtb3VzZSBjbGljayBpbiB0aGUgbGFzdCBsaW5lIGluIHRoZSBHVUkuCisJICAgIEFkZCAibWwiIGVudHJ5IGluICdtb3VzZXNoYXBlJy4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvbWVzc2FnZS5jLCBzcmMvbWlzYzEuYywgc3JjL21pc2MyLmMsIHNyYy9vcHRpb24uYywKKwkgICAgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjEuMDU1CitQcm9ibGVtOiAgICBXaGVuIGVkaXRpbmcgYSBjb21wcmVzc2VkIGZpbGUsIFZpbSB3aWxsIGluc3BlY3QgdGhlIGNvbnRlbnRzIHRvCisJICAgIGd1ZXNzIHRoZSBmaWxldHlwZS4KK1NvbHV0aW9uOiAgIERvbid0IHNvdXJjZSBzY3JpcHRzLnZpbSBmb3IgLlosIC5neiwgLmJ6MiwgLnppcCBhbmQgLnRneiBmaWxlcy4KK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0sIHJ1bnRpbWUvcGx1Z2luL2d6aXAudmltCisKK1BhdGNoIDYuMS4wNTYKK1Byb2JsZW06ICAgIExvYWRpbmcgdGhlIFN5bnRheCBtZW51IGNhbiB0YWtlIHF1aXRlIGEgYml0IG9mIHRpbWUuCitTb2x1dGlvbjogICBBZGQgdGhlICJza2lwX3N5bnRheF9zZWxfbWVudSIgdmFyaWFibGUuICBXaGVuIGl0cyBkZWZpbmVkIHRoZQorCSAgICBhdmFpbGFibGUgc3ludGF4IGZpbGVzIGFyZSBub3QgaW4gdGhlIFN5bnRheCBtZW51LgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ndWkudHh0LCBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMS4wNTcKK1Byb2JsZW06ICAgIEFuIEVTQyBpbnNpZGUgYSBtYXBwaW5nIGRvZXNuJ3Qgd29yayBhcyBkb2N1bWVudGVkIHdoZW4KKwkgICAgJ2luc2VydG1vZGUnIGlzIHNldCwgaXQgZG9lcyBnbyBmcm9tIFZpc3VhbCBvciBOb3JtYWwgbW9kZSB0bworCSAgICBJbnNlcnQgbW9kZS4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIE1ha2UgaXQgd29yayBhcyBkb2N1bWVudGVkLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjA1OAorUHJvYmxlbTogICAgV2hlbiB0aGVyZSBpcyBhIGNsb3NlZCBmb2xkIGp1c3QgYWJvdmUgdGhlIGZpcnN0IGxpbmUgaW4gdGhlCisJICAgIHdpbmRvdywgdXNpbmcgQ1RSTC1YIENUUkwtWSBpbiBJbnNlcnQgbW9kZSB3aWxsIHNob3cgb25seSBvbmUgbGluZQorCSAgICBvZiB0aGUgZm9sZC4gKEFsZXhleSBNYXJpbmljaGV2KQorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgdG9wbGluZSBieSBwdXR0aW5nIGl0IGF0IHRoZSBzdGFydCBvZiB0aGUgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL21vdmUuYworCitQYXRjaCA2LjEuMDU5CitQcm9ibGVtOiAgICAiOnJlZGlyID4gfi9maWxlIiBkb2Vzbid0IHdvcmsuIChTdGVwaGVuIFJhc2t1KQorU29sdXRpb246ICAgRXhwYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgIjpyZWRpciA+IiBhcmd1bWVudC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjA2MAorUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCBhbmQgJ3NlbGVjdGlvbicgaXMgImV4Y2x1c2l2ZSIsIGRlbGV0aW5nCisJICAgIGEgY2hhcmFjdGVyIGp1c3QgYmVmb3JlIGEgdGFiIGNoYW5nZXMgdGhlIHRhYiBpbnRvIHNwYWNlcy4gIFVuZG8KKwkgICAgZG9lc24ndCByZXN0b3JlIHRoZSB0YWIuIChIZWxtdXQgU3RpZWdsZXIpCitTb2x1dGlvbjogICBEb24ndCByZXBsYWNlIHRoZSB0YWIgYnkgc3BhY2VzIHdoZW4gaXQncyBub3QgbmVlZGVkLiAgQ29ycmVjdGx5CisJICAgIHNhdmUgdGhlIGxpbmUgYmVmb3JlIGl0J3MgY2hhbmdlZC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMS4wNjEKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgYW5kICdzZWxlY3Rpb24nIGlzICJleGNsdXNpdmUiLCBhIFZpc3VhbAorCSAgICBzZWxlY3Rpb24gdGhhdCBlbmRzIGp1c3QgYWZ0ZXIgYSB0YWIgZG9lc24ndCBpbmNsdWRlIHRoYXQgdGFiIGluCisJICAgIHRoZSBoaWdobGlnaHRpbmcuICAoSGVsbXV0IFN0aWVnbGVyKQorU29sdXRpb246ICAgVXNlIGEgZGlmZmVyZW50IHdheSB0byBleGNsdWRlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvci4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4wNjIKK1Byb2JsZW06ICAgIFRoZSAibWFuIiBmaWxldHlwZSBwbHVnaW4gZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIFNvbGFyaXMgNS4KK1NvbHV0aW9uOiAgIFVzZSBhIGRpZmZlcmVudCB3YXkgdG8gZGV0ZWN0IHRoYXQgIm1hbiAtcyIgc2hvdWxkIGJlIHVzZWQuIChIdWdoCisJICAgIFNhc3NlKQorRmlsZXM6CSAgICBydW50aW1lL2Z0cGx1Z2luL21hbi52aW0KKworUGF0Y2ggNi4xLjA2MworUHJvYmxlbTogICAgSmF2YSBpbmRlbnRpbmcgZG9lc24ndCB3b3JrIHByb3Blcmx5LgorU29sdXRpb246ICAgSWdub3JlIGNvbW1lbnRzIHdoZW4gY2hlY2tpbmcgaWYgdGhlIGluZGVudCBkb2Vzbid0IGluY3JlYXNlIGFmdGVyCisJICAgIGEgIn0iLgorRmlsZXM6CSAgICBydW50aW1lL2luZGVudC9qYXZhLnZpbQorCitQYXRjaCA2LjEuMDY0CitQcm9ibGVtOiAgICBUaGUgVVJMcyB0aGF0IHRoZSBuZXRydyBwbHVnaW4gcmVjb2duaXplZCBmb3IgZnRwIGFuZCByY3AgZGlkIG5vdAorCSAgICBjb25mb3JtIHRvIHRoZSBzdGFuZGFyZCBtZXRob2Q6Ly9bdXNlckBdaG9zdFs6cG9ydF0vcGF0aC4KK1NvbHV0aW9uOiAgIFVzZSBmdHA6Ly9bdXNlckBdaG9zdFtbOiNdcG9ydF0vcGF0aCwgd2hpY2ggc3VwcG9ydHMgYm90aCB0aGUgbmV3CisJICAgIGFuZCB0aGUgcHJldmlvdXMgc3R5bGUuICBBbHNvIGFkZGVkIGEgYml0IG9mIGRhdi9jYWRhdmVyIHN1cHBvcnQuCisJICAgIChDaGFybGVzIENhbXBiZWxsKQorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9uZXRydy52aW0KKworUGF0Y2ggNi4xLjA2NQorUHJvYmxlbTogICAgVk1TOiBUaGUgY29sb3JzY2hlbWUsIGtleW1hcCBhbmQgY29tcGlsZXIgbWVudXMgYXJlIG5vdCBmaWxsZWQgaW4uCitTb2x1dGlvbjogICBJZ25vcmUgY2FzZSB3aGVuIGxvb2tpbmcgZm9yICIudmltIiBmaWxlcy4gKENvZW4gRW5nZWxiYXJ0cykKK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMDY2IChleHRyYSkKK1Byb2JsZW06ICAgIFdoZW4gY2FsbGluZyBzeXN0ZW0oKSBpbiBhIHBsdWdpbiByZWFkaW5nIHN0ZGluIGhhbmdzLgorU29sdXRpb246ICAgRG9uJ3Qgc2V0IHRoZSB0ZXJtaW5hbCB0byBSQVcgbW9kZSB3aGVuIGl0IHdhc24ndCBpbiBSQVcgbW9kZQorCSAgICBiZWZvcmUgdGhlIHN5c3RlbSgpIGNhbGwuCitGaWxlczoJICAgIHNyYy9vc19hbWlnYS5jLCBzcmMvb3NfbXNkb3MuYywgc3JjL29zX3Jpc2Nvcy5jLCBzcmMvb3NfdW5peC5jLAorCSAgICBzcmMvb3Nfd2luMTYuYywgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xLjA2NworUHJvYmxlbTogICAgIjpzZXQgdmltaW5mbys9ZjAiIGlzIG5vdCB3b3JraW5nLiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgQ2hlY2sgdGhlICJmIiBmbGFnIGluc3RlYWQgb2YgIiciIGluICd2aW1pbmZvJy4KK0ZpbGVzOgkgICAgc3JjL21hcmsuYworCitQYXRjaCA2LjEuMDY4CitQcm9ibGVtOiAgICBXaGVuIGEgZmlsZSBpcyByZWxvYWRlZCBhZnRlciBpdCB3YXMgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbSwgZGlmZgorCSAgICBtb2RlIGlzbid0IHVwZGF0ZWQuIChNaWNoYWVsIE5hdW1hbm4pCitTb2x1dGlvbjogICBJbnZhbGlkYXRlIHRoZSBkaWZmIGluZm8gc28gdGhhdCBpdCdzIHVwZGF0ZWQgd2hlbiBuZWVkZWQuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMDY5CitQcm9ibGVtOiAgICBXaGVuICdzaG93bWF0Y2gnIGlzIHNldCBhbmQgIiQiIGlzIGluICdjcG9wdGlvbnMnLCB1c2luZworCSAgICAiQ308RXNjPiIgbWF5IGZvcmdldCB0byByZW1vdmUgdGhlICIkIi4gKFByZWJlbiBHdWxkYmVyZykKK1NvbHV0aW9uOiAgIFJlc3RvcmUgZG9sbGFyX3Zjb2wgYWZ0ZXIgZGlzcGxheWluZyB0aGUgbWF0Y2hpbmcgY3Vyc29yIHBvc2l0aW9uLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4xLjA3MCAoZGVwZW5kcyBvbiA2LjEuMDYwKQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3Igc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoLiAoTWlrZSBXaWxsaWFtcykKK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0IHRvIGludC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMS4wNzEKK1Byb2JsZW06ICAgIFdoZW4gJ3NlbGVjdGlvbicgaXMgZXhjbHVzaXZlLCBnIENUUkwtRyBpbiBWaXN1YWwgbW9kZSBjb3VudHMgb25lCisJICAgIGNoYXJhY3RlciB0b28gbXVjaC4gKERhdmlkIE5lY2FzKQorU29sdXRpb246ICAgU3VidHJhY3Qgb25lIGZyb20gdGhlIGVuZCBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMS4wNzIKK1Byb2JsZW06ICAgIFdoZW4gYSBmaWxlIG5hbWUgaW4gYSB0YWdzIGZpbGUgc3RhcnRzIHdpdGggaHR0cDovLyBvciBzb21ldGhpbmcKKwkgICAgZWxzZSBmb3Igd2hpY2ggdGhlcmUgaXMgYSBCdWZSZWFkQ21kIGF1dG9jb21tYW5kLCB0aGUgZmlsZSBpc24ndAorCSAgICBvcGVuZWQgYW55d2F5LgorU29sdXRpb246ICAgQ2hlY2sgaWYgdGhlcmUgaXMgYSBtYXRjaGluZyBCdWZSZWFkQ21kIGF1dG9jb21tYW5kIGFuZCB0cnkgdG8KKwkgICAgb3BlbiB0aGUgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvcHJvdG8vZmlsZWlvLnBybywgc3JjL3RhZy5jCisKK1BhdGNoIDYuMS4wNzMgKGV4dHJhKQorUHJvYmxlbTogICAgQkM1OiBDYW4ndCBlYXNpbHkgc3BlY2lmeSBhIHRpbnksIHNtYWxsLCBub3JtYWwsIGJpZyBvciBodWdlCisJICAgIHZlcnNpb24uCitTb2x1dGlvbjogICBBbGxvdyBzZWxlY3RpbmcgdGhlIHZlcnNpb24gd2l0aCB0aGUgRkVBVFVSRVMgdmFyaWFibGUuIChBaml0CisJICAgIFRoYWtrYXIpCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWsKKworUGF0Y2ggNi4xLjA3NAorUHJvYmxlbTogICAgV2hlbiAnY2RwYXRoJyBpbmNsdWRlcyAiLi4vLi4iLCBjaGFuZ2luZyB0byBhIGRpcmVjdG9yeSBpbiB3aGljaAorCSAgICB3ZSBjdXJyZW50bHkgYWxyZWFkeSBhcmUgZG9lc24ndCB3b3JrLiAgZmZfY2hlY2tfdmlzaXRlZCgpIGFkZHMKKwkgICAgdGhlIGRpcmVjdG9yeSBib3RoIHdoZW4gdXNpbmcgaXQgYXMgdGhlIHJvb3QgZm9yIHNlYXJjaGluZyBhbmQgZm9yCisJICAgIHRoZSBhY3R1YWwgbWF0Y2hlcy4gKFN0ZXBoZW4gUmFza3UpCitTb2x1dGlvbjogICBVc2UgYSBzZXBhcmF0ZSBsaXN0IGZvciB0aGUgYWxyZWFkeSBzZWFyY2hlZCBkaXJlY3Rvcmllcy4KK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4xLjA3NSAoZGVwZW5kcyBvbiA2LjEuMDcyKQorUHJvYmxlbTogICAgQ2FuJ3QgY29tcGlsZSBmaWxlaW8uYyBvbiBNUy1XaW5kb3dzLgorU29sdXRpb246ICAgQWRkIGEgZGVjbGFyYXRpb24gZm9yIHRoZSAicCIgcG9pbnRlci4gKE1hZG9rYSBNYWNoaXRhbmkpCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMDc2IChleHRyYSkKK1Byb2JsZW06ICAgIE1hY2ludG9zaDogZXhwbG9yZXIgcGx1Z2luIGRvZXNuJ3Qgd29yayBvbiBNYWMgQ2xhc3NpYy4KKwkgICAgSU1FIGRvZXNuJ3Qgd29yay4gIERpYWxvZyBib3hlcyBkb24ndCB3b3JrIG9uIE1hYyBPUyBYCitTb2x1dGlvbjogICBGaXggZXhwbG9yZXIgcGx1Z2luIGFuZCBrZXkgbW9kaWZpZXJzLiAoQXhlbCBLaWVsaG9ybikKKwkgICAgRml4IElNRSBzdXBwb3J0LiAoTXVyYW9rYSBUYXJvKQorCSAgICBEaXNhYmxlIGRpYWxvZyBib3hlcy4gKEJlbmppIEZpc2hlcikKK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL2ZlYXR1cmUuaCwgc3JjL2d1aV9tYWMuYywgc3JjL29zX21hYy5jCisKK1BhdGNoIDYuMS4wNzcKK1Byb2JsZW06ICAgIE9uIGEgRGViaWFuIHN5c3RFbSB3aHQgQUNMIGxpbmtpbmcgZmFpbHMuIChMdWJvbWlyIEhvc3QpCitTb2x1dGlvbjogICBXaGVuIHRoZSAiYWNsIiBsaWJyYXJ5IGlzIHVzZWQsIGNoZWNrIGlmIHRoZSAiYXR0ciIgbGlicmFyeSBpcworCSAgICBwcmVzZW50IGFuZCB1c2UgaXQuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2xpbmsuc2gKKworUGF0Y2ggNi4xLjA3OAorUHJvYmxlbTogICAgV2hlbiB1c2luZyAnZm9sZG1ldGhvZCcgIm1hcmtlciIgYW5kIHRoZSBlbmQgbWFya2VyIGFwcGVhcnMgYmVmb3JlCisJICAgIHRoZSBzdGFydCBtYXJrZXIgaW4gdGhlIGZpbGUsIG5vIGZvbGQgaXMgZm91bmQuIChOYXpyaSBSYW1saXkpCitTb2x1dGlvbjogICBEb24ndCBsZXQgdGhlIGZvbGQgZGVwdGggZ28gbmVnYXRpdmUuCitGaWxlczoJICAgIHNyYy9mb2xkLmMKKworUGF0Y2ggNi4xLjA3OQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAicyIgaW4gVmlzdWFsIGJsb2NrIG1vZGUgd2l0aCAndmlydHVhbGVkaXQnIHNldCwgd2hlbgorCSAgICB0aGUgc2VsZWN0ZWQgYmxvY2sgaXMgYWZ0ZXIgdGhlIGVuZCBvZiBzb21lIGxpbmVzIHRoZSB3cm9uZyB0ZXh0CisJICAgIGlzIGluc2VydGVkIGFuZCBzb21lIGxpbmVzIGFyZSBza2lwcGVkLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIEluc2VydCB0aGUgcmlnaHQgdGV4dCBhbmQgZXh0ZW5kIHNob3J0IGxpbmVzLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4xLjA4MAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBnY2Mgd2l0aCAvdXNyL2xvY2FsIGFscmVhZHkgaW4gdGhlIHNlYXJjaCBwYXRoLCBhZGRpbmcKKwkgICAgaXQgYWdhaW4gY2F1c2VzIHByb2JsZW1zLgorU29sdXRpb246ICAgQWRqdXN0IGNvbmZpZ3VyZS5pbiB0byBhdm9pZCBhZGRpbmcgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZAorCSAgICAvdXNyL2xvY2FsL2xpYiB3aGVuIHVzaW5nIEdDQyBhbmQgdGhleSBhcmUgYWxyZWFkeSB1c2VkLiAoSm9oYW5uZXMKKwkgICAgWmVsbG5lcikKK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMS4wODEKK1Byb2JsZW06ICAgICI6aGVscCBDVFJMLVxfQ1RSTC1OIiBkb2Vzbid0IHdvcmsuICAoQ2hyaXN0aWFuIEouIFJvYmluc29uKQorU29sdXRpb246ICAgRG91YmxlIHRoZSBiYWNrc2xhc2ggdG8gYXZvaWQgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiAiXF8iLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMS4wODIKK1Byb2JsZW06ICAgIE9uIE1TLVdpbmRvd3MgdGhlIHZpbXJjX2V4YW1wbGUudmltIHNjcmlwdCBpcyBzb3VyY2VkIGFuZCB0aGVuCisJICAgIG1zd2luLnZpbS4gIFRoaXMgZW5hYmxlcyB1c2luZyBzZWxlY3QgbW9kZSwgYnV0IHNpbmNlICJwIiBpcworCSAgICBtYXBwZWQgaXQgZG9lc24ndCByZXBsYWNlIHRoZSBzZWxlY3Rpb24uCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIG1hcHBpbmcgb2YgInAiIGZyb20gdmltcmNfZXhhbXBsZS52aW0sIGl0J3Mgb2Jzb2xldGUuCisJICAgIChWbGFkIFNhbmRyaW5pKQorRmlsZXM6CSAgICBydW50aW1lL3ZpbXJjX2V4YW1wbGUudmltCisKK1BhdGNoIDYuMS4wODMKK1Byb2JsZW06ICAgIFdoZW4gJExBTkcgaXMgInNrIiBvciAic2tfc2siLCB0aGUgU2xvdmFrIG1lbnUgZmlsZSBpc24ndCBmb3VuZC4KKwkgICAgKE1hcnRpbiBMYWNrbykKK1NvbHV0aW9uOiAgIEd1ZXNzIHRoZSByaWdodCBtZW51IGZpbGUgYmFzZWQgb24gdGhlIHN5c3RlbS4KK0ZpbGVzOgkgICAgcnVudGltZS9sYW5nL21lbnVfc2tfc2sudmltCisKK1BhdGNoIDYuMS4wODQgKGRlcGVuZHMgb24gNi4xLjA4MCkKK1Byb2JsZW06ICAgICJpbmNsdWRlIiBhbmQgImxpYiIgYXJlIG1peGVkIHVwIHdoZW4gY2hlY2tpbmcgdGhlIGRpcmVjdG9yaWVzIGdjYworCSAgICBhbHJlYWR5IHNlYXJjaGVzLgorU29sdXRpb246ICAgU3dhcCB0aGUgdmFyaWFibGUgbmFtZXMuIChTdW5IbyBLaW0pCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjEuMDg1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIENUUkwtTyBDVFJMLVwgQ1RSTC1OIGZyb20gSW5zZXJ0IG1vZGUsIHRoZSBkaXNwbGF5ZWQKKwkgICAgbW9kZSAiKGluc2VydCkiIGlzbid0IHJlbW92ZWQuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBDbGVhciB0aGUgY29tbWFuZCBsaW5lLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjA4NiAoZGVwZW5kcyBvbiA2LjEuMDQ5KQorUHJvYmxlbTogICAgVGhlIGd1aWZnIGNvbG9yIGZvciBDdXJzb3JJTSBkb2Vzbid0IHRha2UgZWZmZWN0LgorU29sdXRpb246ICAgVXNlIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHdoZW4gaXQncyBkZWZpbmVkLiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4xLjA4NworUHJvYmxlbTogICAgQSB0aGVzYXVydXMgd2l0aCBKYXBhbmVzZSBjaGFyYWN0ZXJzIGhhcyBwcm9ibGVtcyB3aXRoIGNoYXJhY3RlcnMKKwkgICAgaW4gZGlmZmVyZW50IHdvcmQgY2xhc3Nlcy4KK1NvbHV0aW9uOiAgIE9ubHkgc2VwYXJhdGUgd29yZHMgd2l0aCBzaW5nbGUtYnl0ZSBub24td29yZCBjaGFyYWN0ZXJzLgorCSAgICAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMS4wODggKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IG5vIGRlYnVnZ2luZyBpbmZvIGlzIGdlbmVyYXRlZC4gIFRhZ3MgZmlsZSBleGNsdWRlcyAuY3BwCisJICAgIGZpbGVzLgorU29sdXRpb246ICAgQWRkICIvbWFwIiB0byBjb21waWxlciBmbGFncy4gIEFkZCAiKi5jcHAiIHRvIGN0YWdzIGNvbW1hbmQuCisJICAgIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9NYWtlX212Yy5tYWsKKworUGF0Y2ggNi4xLjA4OQorUHJvYmxlbTogICAgT24gQlNESSBzeXN0ZW1zIHRoZXJlIGlzIG5vIHNzX3NwIGZpZWxkIGluIHN0YWNrX3QuIChSb2JlcnQgSmFuKQorU29sdXRpb246ICAgVXNlIHNzX2Jhc2UgaW5zdGVhZC4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvY29uZmlnLmguaW4sCisJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4xLjA5MAorUHJvYmxlbTogICAgQ1RSTC1GIGdldHMgc3R1Y2sgd2hlbiAnc2Nyb2xsb2ZmJyBpcyBub24temVybyBhbmQgdGhlcmUgaXMgYSBtaXgKKwkgICAgb2YgbG9uZyB3cmFwcGluZyBsaW5lcyBhbmQgYSBub24td3JhcHBpbmcgbGluZS4KK1NvbHV0aW9uOiAgIENoZWNrIHRoYXQgQ1RSTC1GIHNjcm9sbHMgYXQgbGVhc3Qgb25lIGxpbmUuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4xLjA5MQorUHJvYmxlbTogICAgR1RLOiBDYW4ndCBjaGFuZ2UgcHJlZWRpdHN0YXRlIHdpdGhvdXQgc2V0dGluZyAnaW1hY3RpdmF0ZWtleScuCitTb2x1dGlvbjogICBBZGQgc29tZSBjb2RlIHRvIGNoYW5nZSBwcmVlZGl0c3RhdGUgZm9yIE9uVGhlU3BvdC4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjA5MgorUHJvYmxlbTogICAgIjptYXBjbGVhciA8YnVmZmVyPiIgZG9lc24ndCB3b3JrLiAoU3Jpa2FudGggQWRheWFwYWxhbSkKK1NvbHV0aW9uOiAgIEFsbG93IGFuIGFyZ3VtZW50IGZvciAiOm1hcGNsZWFyIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuaAorCitQYXRjaCA2LjEuMDkzIChleHRyYSkKK1Byb2JsZW06ICAgIE1hYyBhbmQgTVMtV2luZG93cyBHVUk6IHdoZW4gc2Nyb2xsaW5nIHdoaWxlICI6cyIgaXMgd29ya2luZyB0aGUKKwkgICAgcmVzdWx0cyBjYW4gYmUgbWVzc2VkIHVwLCBiZWNhdXNlIHRoZSBjdXJzb3IgaXMgbW92ZWQuCitTb2x1dGlvbjogICBEaXNhbGxvdyBkaXJlY3Qgc2Nyb2xsaW5nIHdoZW4gbm90IHdhaXRpbmcgZm9yIGEgY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvZ3VpX21hYy5jLCBzcmMvZ3VpX3cxNi5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMS4wOTQKK1Byb2JsZW06ICAgIEN5Z3dpbjogUGFzc2luZyBhIGZpbGUgbmFtZSB0aGF0IGhhcyBiYWNrc2xhc2hlcyBpc24ndCBoYW5kbGVkCisJICAgIHZlcnkgd2VsbC4KK1NvbHV0aW9uOiAgIENvbnZlcnQgZmlsZSBuYW1lIGFyZ3VtZW50cyB0byBQb3NpeC4gIChDaHJpcyBNZXRjYWxmKQorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4wOTUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgc2lnbnMgY2FuIGZyZWUgYW4gaXRlbSBvbiB0aGUgc3RhY2suCisJICAgIE92ZXJydWxpbmcgc2lnbiBjb2xvcnMgZG9lc24ndCB3b3JrLiAoU3Jpa2FudGggU2Fua2FyYW4pCitTb2x1dGlvbjogICBEb24ndCBmcmVlIHRoZSBpdGVtIG9uIHRoZSBzdGFjay4gIFVzZSBOVUxMIGluc3RlYWQgb2YgIm5vbmUiIGZvcgorCSAgICB0aGUgdmFsdWUgb2YgdGhlIGNvbG9yLgorRmlsZXM6CSAgICBzcmMvZ3VpX3gxMS5jCisKK1BhdGNoIDYuMS4wOTYKK1Byb2JsZW06ICAgIFdoZW4gZXJhc2luZyB0aGUgcmlnaHQgaGFsdmUgb2YgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIsIGl0IG1heQorCSAgICBjYXVzZSBmdXJ0aGVyIGNoYXJhY3RlcnMgdG8gYmUgZXJhc2VkLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgTWFrZSBzdXJlIG9ubHkgb25lIGNoYXJhY3RlciBpcyBlcmFzZWQuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMDk3IChkZXBlbmRzIG9uIDYuMS4wOTApCitQcm9ibGVtOiAgICBXaGVuICdzY3JvbGxvZmYnIGlzIHNldCB0byBhIGh1Z2UgdmFsdWUsIENUUkwtRiBhdCB0aGUgZW5kIG9mIHRoZQorCSAgICBmaWxlIHNjcm9sbHMgb25lIGxpbmUuIChMdWJvbWlyIEhvc3QpCitTb2x1dGlvbjogICBEb24ndCBzY3JvbGwgd2hlbiBDVFJMLUYgZGV0ZWN0cyB0aGUgZW5kLW9mLWZpbGUuCitGaWxlczoJICAgIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4xLjA5OAorUHJvYmxlbTogICAgTVMtV2luZG93czogV2hlbiB0aGUgeHhkIHByb2dyYW0gaXMgdW5kZXIgImM6XHByb2dyYW0gZmlsZXMiIHRoZQorCSAgICAiQ29udmVydCB0byBIZXgiIG1lbnUgZG9lc24ndCB3b3JrLiAoQnJpYW4gTWF0aGlzKQorU29sdXRpb246ICAgUHV0IHRoZSBwYXRoIHRvIHh4ZCBpbiBkb3VibGUgcXVvdGVzLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMS4wOTkKK1Byb2JsZW06ICAgIE1lbW9yeSBjb3JydXB0ZWQgd2hlbiBjbG9zaW5nIGEgZm9sZCB3aXRoIG1vcmUgdGhhbiA5OTk5OSBsaW5lcy4KK1NvbHV0aW9uOiAgIEFsbG9jYXRlIG1vcmUgc3BhY2UgZm9yIHRoZSBmb2xkIHRleHQuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMTAwIChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMDg4KQorUHJvYmxlbTogICAgV2luMzI6IFZDNSBhbmQgZWFybGllciBkb24ndCBzdXBwb3J0IHRoZSAvbWFwaW5mbyBvcHRpb24uCitTb2x1dGlvbjogICBBZGQgIi9tYXBpbmZvIiBvbmx5IHdoZW4gIk1BUD1saW5lcyIgaXMgc3BlY2lmaWVkLiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMS4xMDEKK1Byb2JsZW06ICAgIEFmdGVyIHVzaW5nICI6b3B0aW9ucyIgdGhlIHRhYnN0b3Agb2YgYSBuZXcgd2luZG93IGlzIDE1LiAgRW50cnkKKwkgICAgaW4gIjpvcHRpb25zIiB3aW5kb3cgZm9yICdhdXRvd3JpdGVhbGwnIGlzIHdyb25nLiAoQW50b2luZSBKCisJICAgIE1lY2hlbHluY2spICBDYW4ndCBpbnNlcnQgYSBzcGFjZSBpbiBhbiBvcHRpb24gdmFsdWUuCitTb2x1dGlvbjogICBVc2UgIjpzZXRsb2NhbCIgaW5zdGVhZCBvZiAiOnNldCIuICBDaGFuZ2UgImF3IiB0byAiYXdhIi4KKwkgICAgRG9uJ3QgbWFwIHNwYWNlIGluIEluc2VydCBtb2RlLgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0KKworUGF0Y2ggNi4xLjEwMgorUHJvYmxlbTogICAgVW5wcmludGFibGUgYW5kIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBpbiBhIHN0YXR1c2xpbmUgaXRlbSBhcmUgbm90CisJICAgIHRydW5jYXRlZCBjb3JyZWN0bHkuIChZYXN1aGlybyBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBDb3VudCB0aGUgd2lkdGggb2YgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMTAzCitQcm9ibGVtOiAgICBBIGZ1bmN0aW9uIHJldHVybmluZyBmcm9tIGEgd2hpbGUgbG9vcCwgd2l0aCAndmVyYm9zZScgc2V0IHRvIDEyCisJICAgIG9yIGhpZ2hlciwgZG9lc24ndCBtZW50aW9uIHRoZSByZXR1cm4gdmFsdWUuICBBIGZ1bmN0aW9uIHdpdGggdGhlCisJICAgICdhYm9ydCcgYXR0cmlidXRlIG1heSByZXR1cm4gLTEgd2hpbGUgdGhlIHZlcmJvc2UgbWVzc2FnZSBzYXlzCisJICAgIHNvbWV0aGluZyBlbHNlLgorU29sdXRpb246ICAgTW92ZSB0aGUgdmVyYm9zZSBtZXNzYWdlIGFib3V0IHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24gdG8KKwkgICAgY2FsbF9mdW5jKCkuIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4xMDQKK1Byb2JsZW06ICAgIEdDQyAzLjEgYXBwZWFycyB0byBoYXZlIGFuIG9wdGltaXplciBwcm9ibGVtIHRoYXQgbWFrZXMgdGVzdCAzCisJICAgIGNyYXNoLgorU29sdXRpb246ICAgRm9yIEdDQyAzLjEgYWRkIC1mbm8tc3RyZW5ndGgtcmVkdWNlIHRvIGF2b2lkIHRoZSBvcHRpbWl6ZXIgYnVnLgorCSAgICBGaWx0ZXIgb3V0IGV4dHJhIGluZm8gZnJvbSAiZ2NjIC0tdmVyc2lvbiIuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjEuMTA1CitQcm9ibGVtOiAgICBXaW4zMjogVGhlIGRlZmF1bHQgZm9yICdzaGVsbHBpcGUnIGRvZXNuJ3QgcmVkaXJlY3Qgc3RkZXJyLiAoRGlvbgorCSAgICBOaWNvbGFhcykKK1NvbHV0aW9uOiAgIFJlZGlyZWN0IHN0ZGVyciwgZGVwZW5kaW5nIG9uIHRoZSBzaGVsbCAobGlrZSBmb3IgJ3NoZWxscmVkaXInKS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMS4xMDYKK1Byb2JsZW06ICAgIFRoZSBtYXplIHByb2dyYW0gY3Jhc2hlcy4KK1NvbHV0aW9uOiAgIENoYW5nZSAiMTEiIHRvICIyNyIgYW5kIGl0IHdvcmtzLiAoR3JlZyBSb2Vsb2ZzKQorRmlsZXM6CSAgICBydW50aW1lL21hY3Jvcy9tYXplL21hemVhbnNpLmMKKworUGF0Y2ggNi4xLjEwNworUHJvYmxlbTogICAgV2hlbiAnbGlzdCcgaXMgc2V0IHRoZSBjdXJyZW50IGxpbmUgaW4gdGhlIGVycm9yIHdpbmRvdyBtYXkgYmUKKwkgICAgZGlzcGxheWVkIHdyb25nLiAoTXVyYW9rYSBUYXJvKQorU29sdXRpb246ICAgRG9uJ3QgY29udGludWUgdGhlIGxpbmUgYWZ0ZXIgdGhlICQgaGFzIGJlZW4gZGlzcGxheWVkIGFuZCB0aGUKKwkgICAgcmlnaHRtb3N0IGNvbHVtbiBpcyByZWFjaGVkLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjEwOAorUHJvYmxlbTogICAgV2hlbiBpbnRlcnJ1cHRpbmcgYSBmaWx0ZXIgY29tbWFuZCBzdWNoIGFzICIhIXNsZWVwIDIwIiB0aGUgZmlsZQorCSAgICBiZWNvbWVzIHJlYWQtb25seS4gKE1hcmsgQnJhZGVyKQorU29sdXRpb246ICAgT25seSBzZXQgdGhlIHJlYWQtb25seSBmbGFnIHdoZW4gb3BlbmluZyBhIGJ1ZmZlciBpcyBpbnRlcnJ1cHRlZC4KKwkgICAgV2hlbiB0aGUgc2hlbGwgY29tbWFuZCB3YXMgaW50ZXJydXB0ZWQsIHJlYWQgdGhlIG91dHB1dCB0aGF0IHdhcworCSAgICBwcm9kdWNlZCBzbyBmYXIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMTA5CitQcm9ibGVtOiAgICBXaGVuICdlYWRpcmVjdGlvbicgaXMgImhvciIsIHVzaW5nIENUUkwtVyA9IGRvZXNuJ3QgZXF1YWxpemUgdGhlCisJICAgIHdpbmRvdyBoZWlnaHRzLiAoUm9tYW4gTmV1aGF1c2VyKQorU29sdXRpb246ICAgSWdub3JlICdlYWRpcmVjdGlvbicgZm9yIENUUkwtVyA9CitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjEuMTEwCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6YmFkZCBmaWxlIiB3aGVuICJmaWxlIiBpcyBhbHJlYWR5IHByZXNlbnQgYnV0IG5vdAorCSAgICBsaXN0ZWQsIGl0IHN0YXlzIHVubGlzdGVkLiAoRGF2aWQgRnJleSkKK1NvbHV0aW9uOiAgIFNldCAnYnVmbGlzdGVkJy4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4xMTEKK1Byb2JsZW06ICAgIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGRldGVjdCB1c2luZyB0aGUgVW5peCBzb3VyY2VzIG9uIFdpbjMyIG9yIE1hYy4KK1NvbHV0aW9uOiAgIEFkZCBoYXMoIm1hY3VuaXgiKSBhbmQgaGFzKCJ3aW4zMnVuaXgiKS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZXZhbC50eHQsIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjExMgorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOmFyZ2RvIiwgIjpidWZkbyIgb3IgIjp3aW5kbyIsIENUUkwtTyBkb2Vzbid0IGdvIHRvCisJICAgIHRoZSBjdXJzb3IgcG9zaXRpb24gZnJvbSBiZWZvcmUgdGhpcyBjb21tYW5kIGJ1dCBldmVyeSBwb3NpdGlvbgorCSAgICB3aGVyZSB0aGUgYXJndW1lbnQgd2FzIGV4ZWN1dGVkLgorU29sdXRpb246ICAgT25seSByZW1lbWJlciB0aGUgY3Vyc29yIHBvc2l0aW9uIGZyb20gYmVmb3JlIHRoZSAiOmFyZ2RvIiwKKwkgICAgIjpidWZkbyIgYW5kICI6d2luZG8iLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYywgc3JjL21hcmsuYworCitQYXRjaCA2LjEuMTEzCitQcm9ibGVtOiAgICAiOmJ1ZmRvIGJ3aXBlIiBvbmx5IHdpcGVzIG91dCBoYWxmIHRoZSBidWZmZXJzLiAgKFJvbWFuIE5ldWhhdXNlcikKK1NvbHV0aW9uOiAgIERlY2lkZSB3aGF0IGJ1ZmZlciB0byBnbyB0byBuZXh0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4xMTQKK1Byb2JsZW06ICAgICI6cHl0aG9uIGltcG9ydCB2aW0iLCAiOnB5dGhvbiB2aW0uY3VycmVudC5idWZmZXJbMDowXSA9IFtdIiBnaXZlcworCSAgICBhIGxhbGxvYygwKSBlcnJvci4gKENocmlzIFNvdXRoZXJuKQorU29sdXRpb246ICAgRG9uJ3QgYWxsb2NhdGUgYW4gYXJyYXkgd2hlbiBpdCdzIHNpemUgaXMgemVyby4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMS4xMTUKK1Byb2JsZW06ICAgICJkYXMiIG9uIHRoZSB3aGl0ZSBzcGFjZSBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoIGRvZXMgbm90IGRlbGV0ZQorCSAgICB0aGUgIi4iIHRoZSBzZW50ZW5jZSBlbmRzIHdpdGguCitTb2x1dGlvbjogICBEb24ndCBleGNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciB3aGVuIGl0IGlzIG5vdCB3aGl0ZSBzcGFjZS4KK0ZpbGVzOgkgICAgc3JjL3NlYXJjaC5jCisKK1BhdGNoIDYuMS4xMTYKK1Byb2JsZW06ICAgIFdoZW4gJ2VuZG9mbGluZScgaXMgY2hhbmdlZCB3aGlsZSAnYmluYXJ5JyBpcyBzZXQgYSBmaWxlIHNob3VsZCBiZQorCSAgICBjb25zaWRlcmVkIG1vZGlmaWVkLiAoT2xhZiBCdWRkZW5oYWdlbikKK1NvbHV0aW9uOiAgIFJlbWVtYmVyIHRoZSAnZW9sJyB2YWx1ZSB3aGVuIGVkaXRpbmcgc3RhcnRlZCBhbmQgY29uc2lkZXIgdGhlCisJICAgIGZpbGUgY2hhbmdlZCB3aGVuIHRoZSBjdXJyZW50IHZhbHVlIGlzIGRpZmZlcmVudCBhbmQgJ2JpbmFyeScgaXMKKwkgICAgc2V0LiAgQWxzbyBmaXggdGhhdCB0aGUgd2luZG93IHRpdGxlIGlzbid0IHVwZGF0ZWQgd2hlbiAnZmYnIG9yCisJICAgICdiaW4nIGNoYW5nZXMuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjEuMTE3CitQcm9ibGVtOiAgICBTbWFsbCBwcm9ibGVtIHdpdGggZWRpdGluZyBhIGZpbGUgb3ZlciBmdHA6IGFuZCB3aXRoIEN5Z3dpbi4KK1NvbHV0aW9uOiAgIFJlbW92ZSBhIGRvdCBmcm9tIGEgIjpub3JtYWwiIGNvbW1hbmQuICBVc2UgImN5Z2RyaXZlIiB3aGVyZQorCSAgICBhcHByb3ByaWF0ZS4gIChDaGFybGVzIENhbXBiZWxsKQorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9uZXRydy52aW0KKworUGF0Y2ggNi4xLjExOAorUHJvYmxlbTogICAgV2hlbiBhIGZpbGUgaW4gZGlmZiBtb2RlIGlzIHJlbG9hZGVkIGJlY2F1c2UgaXQgY2hhbmdlZCBvdXRzaWRlCisJICAgIG9mIFZpbSwgb3RoZXIgd2luZG93cyBpbiBkaWZmIG1vZGUgYXJlIG5vdCBhbHdheXMgdXBkYXRlZC4KKwkgICAgKE1pY2hhZWwgTmF1bWFubikKK1NvbHV0aW9uOiAgIEFmdGVyIHJlbG9hZGluZyBhIGZpbGUgaW4gZGlmZiBtb2RlIG1hcmsgYWxsIHdpbmRvd3MgaW4gZGlmZiBtb2RlCisJICAgIGZvciByZWRyYXcuCitGaWxlczoJICAgIHNyYy9kaWZmLmMKKworUGF0Y2ggNi4xLjExOSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaXRoIHRoZSBTbmlmZiBpbnRlcmZhY2UsIHVzaW5nIFNuaWZmIDQuMC5YIG9uIEhQLVVYLCB0aGVyZSBtYXkgYmUKKwkgICAgYSBjcmFzaCB3aGVuIGNvbm5lY3RpbmcgdG8gU25pZmYuCitTb2x1dGlvbjogICBJbml0aWFsaXplIHNuaWZmX3JxX3NlcCBzdWNoIHRoYXQgaXRzIHZhbHVlIGNhbiBiZSBjaGFuZ2VkLgorCSAgICAoTWFydGluIEVnbG9mZikKK0ZpbGVzOgkgICAgc3JjL2lmX3NuaWZmLmMKKworUGF0Y2ggNi4xLjEyMCAoZGVwZW5kcyBvbiA2LjEuMDk3KQorUHJvYmxlbTogICAgV2hlbiAnc2Nyb2xsb2ZmJyBpcyBub24temVybyBhbmQgdGhlcmUgYXJlIGZvbGRzLCBDVFJMLUYgYXQgdGhlCisJICAgIGVuZCBvZiB0aGUgZmlsZSBzY3JvbGxzIHBhcnQgb2YgYSBjbG9zZWQgZm9sZC4gIChMdWJvbWlyIEhvc3QpCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIGZpcnN0IGxpbmUgdG8gdGhlIHN0YXJ0IG9mIGEgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL21vdmUuYworCitQYXRjaCA2LjEuMTIxIChkZXBlbmRzIG9uIDYuMS4wOTgpCitQcm9ibGVtOiAgICBXaGVuIHN0YXJ0aW5nIFNlbGVjdCBtb2RlIGZyb20gSW5zZXJ0IG1vZGUsIHRoZW4gdXNpbmcgdGhlIFBhc3RlCisJICAgIG1lbnUgZW50cnksIHRoZSBjdXJzb3IgaXMgbGVmdCBiZWZvcmUgdGhlIGxhc3RlIHBhc3RlZCBjaGFyYWN0ZXIuCisJICAgIChNYXJpbyBTY2h3ZWlnbGVyKQorU29sdXRpb246ICAgU2V0IHRoZSBjdXJzb3IgZm9yIEluc2VydCBtb2RlIG9uZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0LgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMS4xMjIKK1Byb2JsZW06ICAgICI6ZmlsZSBuYW1lIiBjcmVhdGVzIGEgbmV3IGJ1ZmZlciB0byBob2xkIHRoZSBvbGQgYnVmZmVyIG5hbWUsCisJICAgIHdoaWNoIGJlY29tZXMgdGhlIGFsdGVybmF0ZSBmaWxlLiAgVGhpcyBidWZmZXIgaXMgdW5leHBlY3RlZGx5CisJICAgIGxpc3RlZC4KK1NvbHV0aW9uOiAgIENyZWF0ZSB0aGUgYnVmZmVyIGZvciB0aGUgYWx0ZXJuYXRlIG5hbWUgdW5saXN0ZWQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjEyMworUHJvYmxlbTogICAgQSAiOm1hdGNoIiBjb21tYW5kIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBkb2Vzbid0IHJlcG9ydCBhbgorCSAgICBlcnJvci4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBleHRyYSBjaGFyYWN0ZXJzLiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjEyNAorUHJvYmxlbTogICAgV2hlbiB0cnlpbmcgdG8gZXhpdCBhbmQgdGhlcmUgaXMgYSBoaWRkZW4gYnVmZmVyIHRoYXQgaGFkICdlb2wnCisJICAgIG9mZiBhbmQgJ2Jpbicgc2V0IGV4aXRpbmcgaXNuJ3QgcG9zc2libGUuIChKb2huIE1jR293YW4pCitTb2x1dGlvbjogICBTZXQgYl9zdGFydF9lb2wgd2hlbiBjbGVhcmluZyB0aGUgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4xLjEyNQorUHJvYmxlbTogICAgRXhwbG9yZXIgcGx1Z2luIGFza3MgZm9yIHNhdmluZyBhIG1vZGlmaWVkIGJ1ZmZlciBldmVuIHdoZW4gaXQncworCSAgICBvcGVuIGluIGFub3RoZXIgd2luZG93IGFzIHdlbGwuCitTb2x1dGlvbjogICBDb3VudCB0aGUgbnVtYmVyIG9mIHdpbmRvd3MgdXNpbmcgdGhlIGJ1ZmZlci4KK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vZXhwbG9yZXIudmltCisKK1BhdGNoIDYuMS4xMjYKK1Byb2JsZW06ICAgIEFkZGluZyB0aGUgY2hvaWNlcyBpbiB0aGUgc3ludGF4IG1lbnUgaXMgY29uc3VtaW5nIG11Y2ggb2YgdGhlCisJICAgIHN0YXJ0dXAgdGltZSBvZiB0aGUgR1VJIHdoaWxlIGl0J3Mgbm90IG9mdGVuIHVzZWQuCitTb2x1dGlvbjogICBPbmx5IGFkZCB0aGUgY2hvaWNlcyB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVzZSB0aGVtLgorRmlsZXM6CSAgICBNYWtlZmlsZSwgcnVudGltZS9tYWtlbWVudS52aW0sIHJ1bnRpbWUvbWVudS52aW0sCisJICAgIHJ1bnRpbWUvc3lubWVudS52aW0sIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjEuMTI3CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICItLXJlbW90ZSBmaWxlIiBhbmQgdGhlIHNlcnZlciBoYXMgJ2luc2VydG1vZGUnIHNldCwKKwkgICAgY29tbWFuZHMgYXJlIGluc2VydGVkIGluc3RlYWQgb2YgYmVpbmcgZXhlY3V0ZWQuIChOaWtsYXMgVm9sYmVycykKK1NvbHV0aW9uOiAgIEdvIHRvIE5vcm1hbCBtb2RlIGFnYWluIGFmdGVyIHRoZSAiOmRyb3AiIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xLjEyOAorUHJvYmxlbTogICAgVGhlIGV4cHJlc3Npb24gImlucHV0KCd2ZXJ5IGxvbmcgcHJvbXB0JykiIHB1dHMgdGhlIGN1cnNvciBpbiB0aGUKKwkgICAgd3JvbmcgbGluZSAoY29sdW1uIGlzIE9LKS4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgd3JhcHBlZCBsaW5lcyB0byB0aGUgaW5kZW50LiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjEuMTI5CitQcm9ibGVtOiAgICBPbiBTb2xhcmlzIGVkaXRpbmcgImZpbGUvIiBhbmQgdGhlbiAiZmlsZSIgcmVzdWx0cyBpbiB1c2luZyB0aGUKKwkgICAgc2FtZSBidWZmZXIuICAoSmltIEJhdHRsZSkKK1NvbHV0aW9uOiAgIEJlZm9yZSB1c2luZyBzdGF0KCksIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaWxsZWdhbCB0cmFpbGluZworCSAgICBzbGFzaC4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlnLmguaW4sIHNyYy9jb25maWd1cmUuaW4sCisJICAgIHNyYy9tYWNyb3MuaCBzcmMvbWlzYzIuYywgc3JjL3Byb3RvL21pc2MyLnBybworCitQYXRjaCA2LjEuMTMwCitQcm9ibGVtOiAgICBUaGUgZG9jdW1lbnRhdGlvbiBmb3Igc29tZSBvZiB0aGUgJ2Vycm9yZm9ybWF0JyBpdGVtcyBpcyB1bmNsZWFyLgorU29sdXRpb246ICAgQWRkIG1vcmUgZXhhbXBsZXMgYW5kIGV4cGxhaW4gaGFyZCB0byB1bmRlcnN0YW5kIGl0ZW1zLiAoU3RlZmFuCisJICAgIFJvZW1lcikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvcXVpY2tmaXgudHh0CisKK1BhdGNoIDYuMS4xMzEKK1Byb2JsZW06ICAgIFgxMSBHVUk6IHdoZW4gZXhwYW5kaW5nIGEgQ1NJIGJ5dGUgaW4gdGhlIGlucHV0IHN0cmVhbSB0byBLX0NTSSwKKwkgICAgdGhlIENTSSBieXRlIGl0c2VsZiBpc24ndCBjb3BpZWQuCitTb2x1dGlvbjogICBDb3B5IHRoZSBDU0kgYnl0ZS4KK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYworCitQYXRjaCA2LjEuMTMyCitQcm9ibGVtOiAgICBFeGVjdXRpbmcgYSByZWdpc3RlciBpbiBFeCBtb2RlIG1heSBjYXVzZSBjb21tYW5kcyB0byBiZSBza2lwcGVkLgorCSAgICAoSm9obiBNY0dvd2FuKQorU29sdXRpb246ICAgSW4gRXggbW9kZSB1c2UgYW4gZXh0cmEgY2hlY2sgaWYgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIHdhcworCSAgICBjb25zdW1lZCwgdG8gYXZvaWQgaW5wdXQgZ29lcyBpbnRvIHRoZSB0eXBlYWhlYWQgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMTMzCitQcm9ibGVtOiAgICBXaGVuIGRyYXdpbmcgZG91YmxlLXdpZGUgY2hhcmFjdGVycyBpbiB0aGUgc3RhdHVzbGluZSwgbWF5IGNsZWFyCisJICAgIGhhbGYgb2YgYSBjaGFyYWN0ZXIuIChZYXN1aGlybyBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBGb3JjZSByZWRyYXcgb2YgdGhlIG5leHQgY2hhcmFjdGVyIGJ5IHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMKKwkgICAgaW5zdGVhZCBvZiBwdXR0aW5nIGEgTlVMIGluIFNjcmVlbkxpbmVzW10uICBEbyBwdXQgYSBOVUwgaW4KKwkgICAgU2NyZWVuTGluZXNbXSB3aGVuIG92ZXJ3cml0aW5nIGhhbGYgb2YgYSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMTM0CitQcm9ibGVtOiAgICBBbiBlcnJvciBmb3IgYSB0cmFpbGluZyBhcmd1bWVudCBvZiAiOm1hdGNoIiBzaG91bGQgbm90IGJlIGdpdmVuCisJICAgIGFmdGVyICI6aWYgMCIuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgT25seSBkbyB0aGUgY2hlY2sgd2hlbiBleGVjdXRpbmcgY29tbWFuZHMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4xMzUKK1Byb2JsZW06ICAgIFBhc3NpbmcgYSBjb21tYW5kIHRvIHRoZSBzaGVsbCB0aGF0IGluY2x1ZGVzIGEgbmV3bGluZSBhbHdheXMgaGFzCisJICAgIGEgYmFja3NsYXNoIGJlZm9yZSB0aGUgbmV3bGluZS4KK1NvbHV0aW9uOiAgIFJlbW92ZSBvbmUgYmFja3NsYXNoIGJlZm9yZSB0aGUgbmV3bGluZS4gIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMTM2CitQcm9ibGVtOiAgICBXaGVuICRURVJNIGlzICJsaW51eCIgdGhlIGRlZmF1bHQgZm9yICdiYWNrZ3JvdW5kJyBpcyAiZGFyayIsIGV2ZW4KKwkgICAgdGhvdWdoIHRoZSBHVUkgdXNlcyBhIGxpZ2h0IGJhY2tncm91bmQuIChIdWdoIEFsbGVuKQorU29sdXRpb246ICAgRG9uJ3QgbWFyayB0aGUgb3B0aW9uIGFzIHNldCB3aGVuIGRlZmF1bHRpbmcgdG8gImRhcmsiIGZvciB0aGUKKwkgICAgbGludXggY29uc29sZS4gIEFsc28gcmVzZXQgJ2JhY2tncm91bmQnIHRvICJsaWdodCIgd2hlbiB0aGUgR1VJCisJICAgIGhhcyBhIGxpZ2h0IGJhY2tncm91bmQuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMTM3CitQcm9ibGVtOiAgICBDb252ZXJ0aW5nIHRvIEhUTUwgaGFzIGEgY2x1bXN5IHdheSBvZiBkZWFsaW5nIHdpdGggdGFicyB3aGljaCBtYXkKKwkgICAgY2hhbmdlIHRoZSBoaWdobGlnaHRpbmcuCitTb2x1dGlvbjogICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgYWZ0ZXIgY29udmVydGluZyBhIGxpbmUgdG8gSFRNTC4gKFByZWJlbgorCSAgICBHdWxkYmVyZykKK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvMmh0bWwudmltCisKK1BhdGNoIDYuMS4xMzggKGRlcGVuZHMgb24gNi4xLjEyNikKK1Byb2JsZW06ICAgIEFkZGluZyBleHRyYSBpdGVtcyB0byB0aGUgU3ludGF4IG1lbnUgY2FuJ3QgYmUgZG9uZSB3aGVuIHRoZSAiU2hvdworCSAgICBpbmRpdmlkdWFsIGNob2ljZXMiIG1lbnUgaXMgdXNlZC4KK1NvbHV0aW9uOiAgIFVzZSAiOnJ1bnRpbWUhIiBpbnN0ZWFkIG9mICI6c291cmNlIiwgc28gdGhhdCBhbGwgc3lubWVudS52aW0KKwkgICAgZmlsZXMgaW4gdGhlIHJ1bnRpbWUgcGF0aCBhcmUgbG9hZGVkLiAoU2VydmF0aXVzIEJyYW5kdCkKKwkgICAgQWxzbyBmaXggdGhhdCBhIHRyYW5zbGF0ZWQgbWVudSBjYW4ndCBiZSByZW1vdmVkLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMS4xMzkKK1Byb2JsZW06ICAgIEN5Z3dpbjogUEFUSF9NQVggaXMgbm90IGRlZmluZWQuCitTb2x1dGlvbjogICBJbmNsdWRlIGxpbWl0cy5oLiAoRGFuIFNoYXJwKQorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4xNDAKK1Byb2JsZW06ICAgIEN5Z3dpbjogIjphcmdzIGBscyAqLmNgIiBkb2VzIG5vdCB3b3JrIGlmIHRoZSBzaGVsbCBjb21tYW5kCisJICAgIHByb2R1Y2VzIENSIE5MIGxpbmUgc2VwYXJhdG9ycy4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgQ1IgY2hhcmFjdGVycyBvdXJzZWx2ZXMuIChQYXZvbCBKdWhhcykKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMTQxCitQcm9ibGVtOiAgICAiOndpbmNtZCBneCIgbWF5IGNhdXNlIHByb2JsZW1zIHdoZW4gbWl4ZWQgd2l0aCBvdGhlciBjb21tYW5kcy4KKwkgICAgIjp3aW5jbWQgYyIgZG9lc24ndCBjbG9zZSB0aGUgd2luZG93IGltbWVkaWF0ZWx5LiAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgUGFzcyB0aGUgZXh0cmEgY29tbWFuZCBjaGFyYWN0ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyB0aGUKKwkgICAgc3R1ZmYgYnVmZmVyIGFuZCBjYWxsIGV4X2Nsb3NlKCkgZGlyZWN0bHkuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by9ub3JtYWwucHJvLAorCSAgICBzcmMvcHJvdG8vd2luZG93LnBybywgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMS4xNDIKK1Byb2JsZW06ICAgIERlZmluaW5nIHBhcmFncmFwaHMgd2l0aG91dCBhIHNlcGFyYXRpbmcgYmxhbmsgbGluZSBpc24ndAorCSAgICBwb3NzaWJsZS4gIFBhcmFncmFwaHMgY2FuJ3QgYmUgZm9ybWF0dGVkIGF1dG9tYXRpY2FsbHkuCitTb2x1dGlvbjogICBBbGxvdyBkZWZpbmluZyBwYXJhZ3JhcGhzIHdpdGggbGluZXMgdGhhdCBlbmQgaW4gd2hpdGUgc3BhY2UuCisJICAgIEFkZGVkIHRoZSAndycgYW5kICdhJyBmbGFncyBpbiAnZm9ybWF0b3B0aW9ucycuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2NoYW5nZS50eHQsIHNyYy9lZGl0LmMsIHNyYy9taXNjMS5jLCBzcmMvbm9ybWFsLmMsCisJICAgIHNyYy9vcHRpb24uaCwgc3JjL29wcy5jLCBzcmMvcHJvdG8vZWRpdC5wcm8sIHNyYy9wcm90by9vcHMucHJvLAorCSAgICBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjE0MyAoZGVwZW5kcyBvbiA2LjEuMTQyKQorUHJvYmxlbTogICAgQXV0byBmb3JtYXR0aW5nIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZSBtb3ZlcyB0aGUgY3Vyc29yIHRvIGEKKwkgICAgd3JvbmcgcG9zaXRpb24uICBJbiBJbnNlcnQgbW9kZSBzb21lIGxpbmVzIGFyZSBtYWRlIG9uZSBjaGFyIHRvbworCSAgICBuYXJyb3cuICBXaGVuIGRlbGV0aW5nIGEgbGluZSB1bmRvIG1pZ2h0IG5vdCBhbHdheXMgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIERvbid0IGFsd2F5cyBtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgaW4gdGhlIGxhc3QgbGluZS4gIERvbid0CisJICAgIHBvc2l0aW9uIHRoZSBjdXJzb3IgcGFzdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGluIEluc2VydCBtb2RlLgorCSAgICBBZnRlciBkZWxldGluZyBhIGxpbmUgc2F2ZSB0aGUgY3Vyc29yIGxpbmUgZm9yIHVuZG8uCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9vcHMuYywgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4xNDQKK1Byb2JsZW06ICAgIE9idGFpbmluZyB0aGUgc2l6ZSBvZiBhIGxpbmUgaW4gc2NyZWVuIGNoYXJhY3RlcnMgY2FuIGJlIHdyb25nLgorCSAgICBBIHBvaW50ZXIgbWF5IHdyYXAgYXJvdW5kIHplcm8uCitTb2x1dGlvbjogICBJbiB3aW5fbGluZXRhYnNpemUoKSBjaGVjayBmb3IgYSBNQVhDT0wgbGVuZ3RoIGFyZ3VtZW50LiAoSmltCisJICAgIER1bmxlYXZ5KQorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jCisKK1BhdGNoIDYuMS4xNDUKK1Byb2JsZW06ICAgIEdUSzogRHJhZyZkcm9wIHdpdGggbW9yZSB0aGFuIDMgZmlsZXMgbWF5IGNhdXNlIGEgY3Jhc2guIChNaWNrYWVsCisJICAgIE1hcmNoYW5kKQorU29sdXRpb246ICAgUmV3cml0ZSB0aGUgY29kZSB0aGF0IHBhcnNlcyB0aGUgcmVjZWl2ZWQgbGlzdCBvZiBmaWxlcyB0byBiZSBtb3JlCisJICAgIHJvYnVzdC4KK0ZpbGVzOgkgICAgc3JjL2NoYXJzZXQuYywgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4xLjE0NgorUHJvYmxlbTogICAgTVMtV2luZG93czogV2hlbiAkSE9NRSBpcyBjb25zdHJ1Y3RlZCBmcm9tICRIT01FRFJJVkUgYW5kCisJICAgICRIT01FUEFUSCwgaXQgaXMgbm90IHVzZWQgZm9yIHN0b3JpbmcgdGhlIF92aW1pbmZvIGZpbGUuICAoTm9ybWFsCisJICAgIERpYW1vbmQpCitTb2x1dGlvbjogICBTZXQgJEhPTUUgd2l0aCB0aGUgdmFsdWUgb2J0YWluZWQgZnJvbSAkSE9NRURSSVZFIGFuZCAkSE9NRVBBVEguCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMS4xNDcgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtV2luZG93czogV2hlbiBhIGRpYWxvZyBoYXMgbm8gZGVmYXVsdCBidXR0b24sIHByZXNzaW5nIEVudGVyCisJICAgIGVuZHMgaXQgYW55d2F5IGFuZCBhbGwgYnV0dG9ucyBhcmUgc2VsZWN0ZWQuCitTb2x1dGlvbjogICBEb24ndCBlbmQgYSBkaWFsb2cgd2hlbiB0aGVyZSBpcyBubyBkZWZhdWx0IGJ1dHRvbi4gIERvbid0IHNlbGVjdAorCSAgICBhbGwgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gZGVmYXVsdC4gKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMS4xNDggKGV4dHJhKQorUHJvYmxlbTogICAgTVMtV2luZG93czogQUNMIGlzIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQuCitTb2x1dGlvbjogICBBZGQgYW4gYWNjZXNzKCkgcmVwbGFjZW1lbnQgdGhhdCBhbHNvIHdvcmtzIGZvciBBQ0wuIChNaWtlCisJICAgIFdpbGxpYW1zKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9lZGl0aW5nLnR4dCwgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xLjE0OSAoZXh0cmEpCitQcm9ibGVtOiAgICBNUy1XaW5kb3dzOiBDYW4ndCB1c2UgZGlmZiBtb2RlIGZyb20gdGhlIGZpbGUgZXhwbG9yZXIuCitTb2x1dGlvbjogICBBZGQgYSAiZGlmZiB3aXRoIFZpbSIgY29udGV4dCBtZW51IGVudHJ5LiAoRGFuIFNoYXJwKQorRmlsZXM6CSAgICBHdmltRXh0L2d2aW1leHQuY3BwLCBHdmltRXh0L2d2aW1leHQuaAorCitQYXRjaCA2LjEuMTUwCitQcm9ibGVtOiAgICBPUy8yLCBNUy1XaW5kb3dzIGFuZCBNUy1ET1M6IFdoZW4gJ3NoZWxsc2xhc2gnIGlzIHNldCBnZXRjd2QoKQorCSAgICBzdGlsbCB1c2VzIGJhY2tzbGFzaC4gKFllZ2FwcGFuIExha3NobWFuYW4pCitTb2x1dGlvbjogICBBZGp1c3Qgc2xhc2hlcyBpbiBnZXRjd2QoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMTUxIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgTlRGUyBzdWJzdHJlYW0gaXNuJ3QgY29waWVkLgorU29sdXRpb246ICAgQ29weSB0aGUgc3Vic3RyZWFtIHdoZW4gbWFraW5nIGEgYmFja3VwIGNvcHkuIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL29zX3dpbjMyLmMsIHNyYy9wcm90by9vc193aW4zMi5wcm8KKworUGF0Y2ggNi4xLjE1MgorUHJvYmxlbTogICAgV2hlbiAkTEFORyBpcyBpc284ODU5LTEgdHJhbnNsYXRlZCBtZW51cyBhcmUgbm90IHVzZWQuCitTb2x1dGlvbjogICBDaGFuZ2UgaXNvODg1OSB0byBpc29fODg1OS4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjEuMTUzCitQcm9ibGVtOiAgICBTZWFyY2hpbmcgaW4gaW5jbHVkZWQgZmlsZXMgbWF5IHNlYXJjaCByZWN1cnNpdmVseSB3aGVuIHRoZSBwYXRoCisJICAgIHN0YXJ0cyB3aXRoICIuLi8iLiAgKFN2ZW4gQmVya3ZlbnMtTWF0dGhpanNzZSkKK1NvbHV0aW9uOiAgIENvbXBhcmUgZnVsbCBmaWxlIG5hbWVzLCB1c2UgaW5vZGUvZGV2aWNlIHdoZW4gcG9zc2libGUuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjEuMTU0IChleHRyYSkKK1Byb2JsZW06ICAgIERKR1BQOiAidmltIC1oIiBsZWF2ZXMgdGhlIGN1cnNvciBpbiBhIHdyb25nIHBvc2l0aW9uLgorU29sdXRpb246ICAgRG9uJ3QgcG9zaXRpb24gdGhlIGN1cnNvciB1c2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gKEppbQorCSAgICBEdW5sZWF2eSkKK0ZpbGVzOgkgICAgc3JjL29zX21zZG9zLmMKKworUGF0Y2ggNi4xLjE1NQorUHJvYmxlbTogICAgV2luMzI6IEN1cnNvciBtYXkgc29tZXRpbWVzIGRpc2FwcGVhciBpbiBJbnNlcnQgbW9kZS4KK1NvbHV0aW9uOiAgIENoYW5nZSAiaG9yMTAiIGluICdndWljdXJzb3InIHRvICJob3IxNSIuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMS4xNTYKK1Byb2JsZW06ICAgIENvbnZlcnNpb24gYmV0d2VlbiBEQkNTIGFuZCBVQ1MtMiBpc24ndCBpbXBsZW1lbnRlZCBjbGVhbmx5LgorU29sdXRpb246ICAgQ2xlYW4gdXAgYSBmZXcgdGhpbmdzLgorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjEuMTU3CitQcm9ibGVtOiAgICAnaGxzZWFyY2gnIGhpZ2hsaWdodHMgb25seSB0aGUgc2Vjb25kIGNvbW1hIGluICIsLCwsLCIgd2l0aAorCSAgICAiLyxcQDw9W14sXSoiLiAoUHJlYmVuIEd1bGRiZXJnKQorU29sdXRpb246ICAgQWxzbyBjaGVjayBmb3IgYW4gZW1wdHkgbWF0Y2ggdG8gc3RhcnQganVzdCBhZnRlciBhIHByZXZpb3VzCisJICAgIG1hdGNoLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjE1OAorUHJvYmxlbTogICAgInpzIiBhbmQgInplIiBkb24ndCB3b3JrIGNvcnJlY3RseSB3aXRoICI6c2V0IG5vd3JhcCBzaXNvPTEiLgorCSAgICAoUHJlYmVuIEd1bGRiZXJnKQorU29sdXRpb246ICAgVGFrZSAnc2lzbycgaW50byBhY2NvdW50IHdoZW4gY29tcHV0aW5nIHRoZSBob3Jpem9udGFsIHNjcm9sbAorCSAgICBwb3NpdGlvbiBmb3IgInpzIiBhbmQgInplIi4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4xNTkKK1Byb2JsZW06ICAgIFdoZW4gZXhwYW5kaW5nIGFuIGFiYnJldmlhdGlvbiB0aGF0IGluY2x1ZGVzIGEgbXVsdGktYnl0ZQorCSAgICBjaGFyYWN0ZXIgdG9vIG1hbnkgY2hhcmFjdGVycyBhcmUgZGVsZXRlZC4gKEFuZHJleSBVcmF6b3YpCitTb2x1dGlvbjogICBEZWxldGUgdGhlIGFiYnJldmlhdGlvbiBjb3VudGluZyBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgYnl0ZXMuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNi4xLjE2MAorUHJvYmxlbTogICAgIjokcmVhZCBmaWxlLmd6IiBkb2Vzbid0IHdvcmsuIChQcmViZW4gR3VsZGJlcmcpCitTb2x1dGlvbjogICBEb24ndCB1c2UgdGhlICdbIG1hcmsgYWZ0ZXIgaXQgaGFzIGJlY29tZSBpbnZhbGlkLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9nemlwLnZpbQorCitQYXRjaCA2LjEuMTYxIChkZXBlbmRzIG9uIDYuMS4xNTgpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBzaWduZWQvdW5zaWduZWQgY29tcGFyZS4gIENhbiBzZXQgJ3Npc28nIHRvIGEgbmVnYXRpdmUKKwkgICAgdmFsdWUuIChNaWtlIFdpbGxpYW1zKQorU29sdXRpb246ICAgQWRkIGEgdHlwZWNhc3QuICBBZGQgYSBjaGVjayBmb3IgJ3Npc28nIGJlaW5nIG5lZ2F0aXZlLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMTYyCitQcm9ibGVtOiAgICBQeXRob24gaW50ZXJmYWNlOiBEaWRuJ3QgaW5pdGlhbGl6ZSB0aHJlYWRzIHByb3Blcmx5LgorU29sdXRpb246ICAgQ2FsbCBQeUV2YWxfSW5pdFRocmVhZHMoKSB3aGVuIHN0YXJ0aW5nIHVwLgorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4xLjE2MworUHJvYmxlbTogICAgV2luMzI6IENhbid0IGNvbXBpbGUgd2l0aCBQeXRob24gYWZ0ZXIgNi4xLjE2Mi4KK1NvbHV0aW9uOiAgIER5bmFtaWNhbGx5IGxvYWQgIFB5RXZhbF9Jbml0VGhyZWFkcygpLiAoRGFuIFNoYXJwKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4xLjE2NAorUHJvYmxlbTogICAgSWYgJ21vZGlmaWFibGUnIGlzIG9mZiwgY29udmVydGluZyB0byB4eGQgZmFpbHMgYW5kICdmaWxldHlwZScgaXMKKwkgICAgY2hhbmdlZCB0byAieHhkIiBhbnl3YXkuCitTb2x1dGlvbjogICBEb24ndCBjaGFuZ2UgJ2ZpbGV0eXBlJyB3aGVuIGNvbnZlcnNpb24gZmFpbGVkLgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMS4xNjUKK1Byb2JsZW06ICAgIE1ha2luZyBjaGFuZ2VzIGluIHNldmVyYWwgbGluZXMgYW5kIHRoZW4gYSBjaGFuZ2UgaW4gb25lIG9mIHRoZXNlCisJICAgIGxpbmVzIHRoYXQgc3BsaXRzIGl0IGluIHR3byBvciBtb3JlIGxpbmVzLCB1bmRvIGluZm9ybWF0aW9uIHdhcworCSAgICBjb3JydXB0ZWQuICBNYXkgY2F1c2UgYSBjcmFzaC4gKERhdmUgRmlzaGJ1cm4pCitTb2x1dGlvbjogICBXaGVuIHNraXBwaW5nIHRvIHNhdmUgYSBsaW5lIGZvciB1bmRvIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkKKwkgICAgc2F2ZWQsIG1vdmUgaXQgdG8gYmVjb21lIHRoZSBsYXN0IHNhdmVkIGxpbmUsIHNvIHRoYXQgd2hlbiB0aGUKKwkgICAgY29tbWFuZCBjaGFuZ2VzIHRoZSBsaW5lIGNvdW50IG90aGVyIHNhdmVkIGxpbmVzIGFyZSBub3QgaW52b2x2ZWQuCitGaWxlczoJICAgIHNyYy91bmRvLmMKKworUGF0Y2ggNi4xLjE2NgorUHJvYmxlbTogICAgV2hlbiAnYXV0b2luZGVudCcgaXMgc2V0IGFuZCBtc3dpbi52aW0gaGFzIGJlZW4gc291cmNlZCwgcGFzdGluZworCSAgICB3aXRoIENUUkwtViBqdXN0IGFmdGVyIGF1dG8taW5kZW50aW5nIHJlbW92ZXMgdGhlIGluZGVudC4gKFNobG9taQorCSAgICBGaXNoKQorU29sdXRpb246ICAgRmlyc3QgaW5zZXJ0IGFuICJ4IiBhbmQgZGVsZXRlIGl0IGFnYWluLCBzbyB0aGF0IHRoZSBhdXRvLWluZGVudAorCSAgICByZW1haW5zLgorRmlsZXM6CSAgICBydW50aW1lL21zd2luLnZpbQorCitQYXRjaCA2LjEuMTY3CitQcm9ibGVtOiAgICBXaGVuIGdpdmluZyBhIG5lZ2F0aXZlIGFyZ3VtZW50IHRvICI6cmV0YWIiIHN0cmFuZ2UgdGhpbmdzIHN0YXJ0CisJICAgIGhhcHBlbmluZy4gKEhhbnMgR2luemVsKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgbmVnYXRpdmUgdmFsdWUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjE2OAorUHJvYmxlbTogICAgUHJlc3NpbmcgQ1RSTC1DIGF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0IGRvZXNuJ3QgZW5kIHRoZSBwcm9tcHQuCitTb2x1dGlvbjogICBNYWtlIENUUkwtQyBzdG9wIHRoZSBoaXQtZW50ZXIgcHJvbXB0LgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMS4xNjkKK1Byb2JsZW06ICAgIGJ1ZmV4aXN0cygpIGZpbmRzIGEgYnVmZmVyIGJ5IHVzaW5nIHRoZSBuYW1lIG9mIGEgc3ltYm9saWMgbGluayB0bworCSAgICBpdCwgYnV0IGJ1Zm5yKCkgZG9lc24ndC4gKFllZ2FwcGFuIExha3NobWFuYW4pCitTb2x1dGlvbjogICBXaGVuIGJ1Zm5yKCkgY2FuJ3QgZmluZCBhIGJ1ZmZlciwgdHJ5IHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBhcworCSAgICBidWZleGlzdHMoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMTcwCitQcm9ibGVtOiAgICBVc2luZyAiOm1rc2Vzc2lvbiIgdXNlcyB0aGUgZGVmYXVsdCBzZXNzaW9uIGZpbGUgbmFtZSwgYnV0ICJ2aW0KKwkgICAgLVMiIGRvZXNuJ3QuIChIYW5zIEdpbnplbCkKK1NvbHV0aW9uOiAgIFVzZSB0aGUgZGVmYXVsdCBzZXNzaW9uIGZpbGUgbmFtZSBpZiAiLVMiIGlzIHRoZSBsYXN0IGNvbW1hbmQKKwkgICAgbGluZSBhcmd1bWVudCBvciBhbm90aGVyIG9wdGlvbiBmb2xsb3dzLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9zdGFydGluZy50eHQsIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xLjE3MQorUHJvYmxlbTogICAgV2hlbiBvcGVuaW5nIGEgbGluZSBqdXN0IGFib3ZlIGEgY2xvc2VkIGZvbGQgd2l0aCAiTyIgYW5kIHRoZQorCSAgICBjb21tZW50IGxlYWRlciBpcyBhdXRvbWF0aWNhbGx5IGluc2VydGVkLCB0aGUgY3Vyc29yIGlzIGRpc3BsYXllZAorCSAgICBpbiB0aGUgZmlyc3QgY29sdW1uLiAoU3VuZy1IeXVuIE5hbSkKK1NvbHV0aW9uOiAgIFVwZGF0ZSB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB0aGUgY3Vyc29yIGlzIGluIGEgY2xvc2VkIGZvbGQuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMS4xNzIKK1Byb2JsZW06ICAgIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIG9mICI6dGFnIC9wYXQiIGRvZXMgbm90IHNob3cgdGhlIHNhbWUKKwkgICAgcmVzdWx0cyBhcyB0aGUgdGFncyB0aGUgY29tbWFuZCBhY3R1YWxseSBmaW5kcy4gKEdpbGxlcyBSb3kpCitTb2x1dGlvbjogICBEb24ndCBtb2RpZnkgdGhlIHBhdHRlcm4gdG8gbWFrZSBpdCBhIHJlZ2V4cC4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMsIHNyYy90YWcuYworCitQYXRjaCA2LjEuMTczCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHJlbW90ZSBjb250cm9sIHRvIGVkaXQgYSBwb3NpdGlvbiBpbiBhIGZpbGUgYW5kIHRoaXMKKwkgICAgZmlsZSBpcyB0aGUgY3VycmVudCBidWZmZXIgYW5kIGl0J3MgbW9kaWZpZWQsIHRoZSB3aW5kb3cgaXMgc3BsaXQKKwkgICAgYW5kIHRoZSAiOmRyb3AiIGNvbW1hbmQgZmFpbHMuCitTb2x1dGlvbjogICBEb24ndCBzcGxpdCB0aGUgd2luZG93LCBrZWVwIGVkaXRpbmcgdGhlIHNhbWUgYnVmZmVyLgorCSAgICBVc2UgdGhlICI6ZHJvcCIgY29tbWFuZCBpbiBWaXNWaW0gdG8gYXZvaWQgdGhlIHByb2JsZW0gdGhlcmUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvcHJvdG8vZXhfY21kczIucHJvLAorCSAgICBWaXNWaW0vQ29tbWFuZHMuY3BwCisKK1BhdGNoIDYuMS4xNzQKK1Byb2JsZW06ICAgIEl0IGlzIGRpZmZpY3VsdCB0byBrbm93IGluIGEgc2NyaXB0IHdoZXRoZXIgYW4gb3B0aW9uIG5vdCBvbmx5CisJICAgIGV4aXN0cyBidXQgcmVhbGx5IHdvcmtzLgorU29sdXRpb246ICAgQWRkICJleGlzdHMoJytvcHRpb24nKSIuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4xNzUKK1Byb2JsZW06ICAgIFdoZW4gcmVhZGluZyBjb21tYW5kcyBmcm9tIGEgcGlwZSBhbmQgYSBDVFJMLUMgaXMgcHJlc3NlZCwgVmltCisJICAgIHdpbGwgaGFuZy4gKFBpZXQgRGVscG9ydCkKK1NvbHV0aW9uOiAgIERvbid0IGtlZXAgcmVhZGluZyBjaGFyYWN0ZXJzIHRvIGNsZWFyIHR5cGVhaGVhZCB3aGVuIGFuIGludGVycnVwdAorCSAgICB3YXMgZGV0ZWN0ZWQsIHN0b3Agd2hlbiBhIHNpbmdsZSBDVFJMLUMgaXMgcmVhZC4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYywgc3JjL3VpLmMKKworUGF0Y2ggNi4xLjE3NgorUHJvYmxlbTogICAgV2hlbiB0aGUgc3RhY2sgbGltaXQgaXMgdmVyeSBiaWcgYSBmYWxzZSBvdXQtb2Ytc3RhY2sgZXJyb3IgbWF5CisJICAgIGJlIGRldGVjdGVkLgorU29sdXRpb246ICAgQWRkIGEgY2hlY2sgZm9yIG92ZXJmbG93IG9mIHRoZSBzdGFjayBsaW1pdCBjb21wdXRhdGlvbi4gKEppbQorCSAgICBEdW5sZWF2eSkKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMTc3IChkZXBlbmRzIG9uIDYuMS4xNDEpCitQcm9ibGVtOiAgICAiOndpbmNtZCIgZG9lcyBub3QgYWxsb3cgYSBmb2xsb3dpbmcgY29tbWFuZC4gKEdhcnkgSm9obnNvbikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhIGZvbGxvd2luZyAiIHwgY21kIi4gIEFsc28gZ2l2ZSBhbiBlcnJvciBmb3IgdHJhaWxpbmcKKwkgICAgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjE3OAorUHJvYmxlbTogICAgV2hlbiAnZXhwYW5kdGFiJyBpcyBzZXQgInI8Qy1WPjxUYWI+IiBzdGlsbCBleHBhbmRzIHRoZSBUYWIuCisJICAgIChCcnVjZSBkZVZpc3NlcikKK1NvbHV0aW9uOiAgIFJlcGxhY2Ugd2l0aCBhIGxpdGVyYWwgVGFiLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjE3OSAoZGVwZW5kcyBvbiA2LjEuMDkxKQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBYMTFSNSBYSU1QcmVzZXJ2ZVN0YXRlIGlzIHVuZGVmaW5lZC4gKEFsYmVydCBDaGluKQorU29sdXRpb246ICAgSW5jbHVkZSB0aGUgbWlzc2luZyBkZWZpbml0aW9ucy4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjE4MAorUHJvYmxlbTogICAgVXNlIG9mIHRoZSBHVUkgY29kZSBmb3IgZm9ya2luZyBpcyBpbmNvbnNpc3RlbnQuCitTb2x1dGlvbjogICBEZWZpbmUgTUFZX0ZPUksgYW5kIHVzZSBpdCBmb3IgbGF0ZXIgI2lmZGVmcy4gKEJlbiBGb3dsd2VyKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4xLjE4MQorUHJvYmxlbTogICAgSWYgdGhlIHRlcm1pbmFsIGRvZXNuJ3Qgd3JhcCBmcm9tIHRoZSBsYXN0IGNoYXIgaW4gYSBsaW5lIHRvIHRoZQorCSAgICBuZXh0IGxpbmUsIHRoZSBsYXN0IGNvbHVtbiBpcyBibGFua2VkIG91dC4gKFBldGVyIEthcnApCitTb2x1dGlvbjogICBEb24ndCBvdXRwdXQgYSBzcGFjZSB0byBtYXJrIHRoZSB3cmFwLCBidXQgdGhlIHNhbWUgY2hhcmFjdGVyCisJICAgIGFnYWluLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjE4MiAoZGVwZW5kcyBvbiA2LjEuMTQyKQorUHJvYmxlbTogICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGF1dG8tZm9ybWF0IGNvbW1lbnRzIG9ubHkuIChNb3NoZSBLYW1pbnNreSkKK1NvbHV0aW9uOiAgIFdoZW4gdGhlICdhJyBhbmQgJ2MnIGZsYWdzIGFyZSBpbiAnZm9ybWF0b3B0aW9ucycgb25seSBhdXRvLWZvcm1hdAorCSAgICBjb21tZW50cy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvY2hhbmdlLnR4dCwgc3JjL2VkaXQuYworCitQYXRjaCA2LjEuMTgzCitQcm9ibGVtOiAgICBXaGVuICdmZW5jcycgaXMgZW1wdHkgYW5kICdlbmMnIGlzIHV0Zi04LCByZWFkaW5nIGEgZmlsZSB3aXRoCisJICAgIGlsbGVnYWwgYnl0ZXMgZ2l2ZXMgIkNPTlZFUlNJT04gRVJST1IiIGV2ZW4gdGhvdWdoIG5vIGNvbnZlcnNpb24KKwkgICAgaXMgZG9uZS4gICdyZWFkb25seScgaXMgc2V0LCBldmVuIHRob3VnaCB3cml0aW5nIHRoZSBmaWxlIHJlc3VsdHMKKwkgICAgaW4gYW4gdW5tb2RpZmllZCBmaWxlLgorU29sdXRpb246ICAgRm9yIHRoaXMgc3BlY2lmaWMgZXJyb3IgdXNlICJJTExFR0FMIEJZVEUiIGFuZCBkb24ndCBzZXQKKwkgICAgJ3JlYWRvbmx5Jy4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS4xODQgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIGV4dHJhIG1vdXNlIGJ1dHRvbnMgZm91bmQgb24gc29tZSBtaWNlIGRvbid0IHdvcmsuCitTb2x1dGlvbjogICBTdXBwb3J0IHR3byBleHRyYSBidXR0b25zIGZvciBNUy1XaW5kb3dzLiAoTWljaGFlbCBHZWRkZXMpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3Rlcm0udHh0LCBzcmMvZWRpdC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2d1aS5jLAorCSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jLCBzcmMva2V5bWFwLmgsIHNyYy9tZXNzYWdlLmMsCisJICAgIHNyYy9taXNjMS5jLCBzcmMvbWlzYzIuYywgc3JjL25vcm1hbC5jLiBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjE4NSAoZGVwZW5kcyBvbiA2LjEuMTgyKQorUHJvYmxlbTogICAgQ2FuJ3QgY29tcGlsZSB3aXRob3V0ICtjb21tZW50cyBmZWF0dXJlLgorU29sdXRpb246ICAgQWRkICNpZmRlZiBGRUFUX0NPTU1FTlRTLiAoQ2hyaXN0aWFuIEouIFJvYmluc29uKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMS4xODYgKGRlcGVuZHMgb24gNi4xLjE3NykKK1Byb2JsZW06ICAgICI6d2luY21kIiBkb2VzIG5vdCBhbGxvdyBhIGZvbGxvd2luZyBjb21tZW50LiAoQXJpYyBCbHVtZXIpCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSBmb2xsb3dpbmcgZG91YmxlIHF1b3RlLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMTg3CitQcm9ibGVtOiAgICBVc2luZyAiOmRvYXJnIiB3aXRoICdoaWRkZW4nIHNldCBhbmQgdGhlIGN1cnJlbnQgZmlsZSBpcyB0aGUgb25seQorCSAgICBhcmd1bWVudCBhbmQgd2FzIG1vZGlmaWVkIGdpdmVzIGFuIGVycm9yIG1lc3NhZ2UuIChQcmViZW4KKwkgICAgR3VsZGJlcmcpCitTb2x1dGlvbjogICBEb24ndCB0cnkgcmUtZWRpdGluZyB0aGUgc2FtZSBmaWxlLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjEuMTg4IChkZXBlbmRzIG9uIDYuMS4xNzMpCitQcm9ibGVtOiAgICBVbnVzZWQgdmFyaWFibGUgaW4gdGhlIHNtYWxsIHZlcnNpb24uCitTb2x1dGlvbjogICBNb3ZlIHRoZSBkZWNsYXJhdGlvbiBmb3IgInAiIGluc2lkZSAjaWZkZWYgRkVBVF9MSVNUQ01EUy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4xLjE4OQorUHJvYmxlbTogICAgaW5wdXRkaWFsb2coKSBkb2Vzbid0IHdvcmsgd2hlbiAnYycgaXMgaW4gJ2d1aW9wdGlvbnMnLiAoQXJpYworCSAgICBCbHVtZXIpCitTb2x1dGlvbjogICBGYWxsIGJhY2sgdG8gdGhlIGlucHV0KCkgZnVuY3Rpb24gaW4gdGhpcyBzaXR1YXRpb24uCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjE5MCAoZXh0cmEpCitQcm9ibGVtOiAgICBWTVM6IGRvZXNuJ3QgYnVpbGQgd2l0aCBHVEsgR1VJLiAgVmFyaW91cyBvdGhlciBwcm9ibGVtcy4KK1NvbHV0aW9uOiAgIEZpeCBidWlsZGluZyBmb3IgR1RLLiAgSW1wcm92ZWQgUGVybCwgUHl0aG9uIGFuZCBUQ0wgc3VwcG9ydC4KKwkgICAgSW1wcm92ZWQgVk1TIGRvY3VtZW50YXRpb24uIChab2x0YW4gQXJwYWRmZnkpCisJICAgIEFkZGVkIFZpbXR1dG9yIGZvciBWTVMgKFQuIFIuIFd5YW50KQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vc192bXMudHh0LCBzcmMvSU5TVEFMTHZtcy50eHQsIHNyYy9ndWlfZ3RrX2YuaCwKKwkgICAgc3JjL2lmX3RjbC5jLCBzcmMvbWFpbi5jLCBzcmMvZ3VpX2d0a192bXMuaCwgc3JjL01ha2Vfdm1zLm1tcywKKwkgICAgc3JjL29zX3Ztcy5vcHQsIHNyYy9wcm90by9pZl90Y2wucHJvLCB2aW10dXRvci5jb20sCisJICAgIHNyYy90ZXN0ZGlyL01ha2Vfdm1zLm1tcworCitQYXRjaCA2LjEuMTkxCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICJ2aW0gLXMgc2NyaXB0IiBhbmQgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCwgdGhlIGRlbGF5CisJICAgIGZvciB0aGUgIk91dHB1dCBpcyBub3QgdG8gYSB0ZXJtaW5hbCIgd2FybmluZyBzbG93cyBWaW0gZG93biB0b28KKwkgICAgbXVjaC4KK1NvbHV0aW9uOiAgIERvbid0IGRlbGF5IHdoZW4gcmVhZGluZyBjb21tYW5kcyBmcm9tIGEgc2NyaXB0LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS4xOTIKK1Byb2JsZW06ICAgICI6ZGlmZnNwbGl0IiBkb2Vzbid0IGFkZCAiaG9yIiB0byAnc2Nyb2xsb3B0Jy4gKEdhcnkgSm9obnNvbikKK1NvbHV0aW9uOiAgIEFkZCAiaG9yIiB0byAnc2Nyb2xsb3B0JyBlYWNoIHRpbWUgIjpkaWZmc3BsaXQiIGlzIHVzZWQuCitGaWxlczoJICAgIHNyYy9kaWZmLmMsIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xLjE5MworUHJvYmxlbTogICAgQ3Jhc2ggaW4gaW5faWRfbGlzdCgpIGZvciBhbiBpdGVtIHdpdGggYSAiY29udGFpbmVkaW4iIGxpc3QuIChEYXZlCisJICAgIEZpc2hidXJuKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgbmVnYXRpdmUgc3ludGF4IGlkLCB1c2VkIGZvciBrZXl3b3Jkcy4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMS4xOTQKK1Byb2JsZW06ICAgIFdoZW4gInRfdGkiIGlzIHNldCBidXQgaXQgZG9lc24ndCBjYXVzZSBzd2FwcGluZyB0ZXJtaW5hbCBwYWdlcywKKwkgICAgIlpaIiBtYXkgY2F1c2UgdGhlIHNoZWxsIHByb21wdCB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBmaWxlLXdyaXRlCisJICAgIG1lc3NhZ2UuCitTb2x1dGlvbjogICBTY3JvbGwgdGhlIHRleHQgdXAgaW4gdGhlIFZpbSBwYWdlIGJlZm9yZSBzd2FwcGluZyB0byB0aGUgdGVybWluYWwKKwkgICAgcGFnZS4gKE1pY2hhZWwgU2Nocm9lZGVyKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMS4xOTUKK1Byb2JsZW06ICAgIFRoZSBxdWlja2ZpeCBhbmQgcHJldmlldyB3aW5kb3dzIGFsd2F5cyBrZWVwIHRoZWlyIGhlaWdodCwgd2hpbGUKKwkgICAgb3RoZXIgd2luZG93cyBjYW4ndCBmaXggdGhlaXIgaGVpZ2h0LgorU29sdXRpb246ICAgQWRkIHRoZSAnd2luZml4aGVpZ2h0JyBvcHRpb24sIHNvIHRoYXQgYSBmaXhlZCBoZWlnaHQgY2FuIGJlCisJICAgIHNwZWNpZmllZCBmb3IgYW55IHdpbmRvdy4gIEFsc28gZml4IHRoYXQgdGhlIHdpbGRtZW51IG1heSByZXNpemUgYQorCSAgICBvbmUtbGluZSB3aW5kb3cgdG8gYSB0d28tbGluZSB3aW5kb3cgaWYgJ2xzJyBpcyB6ZXJvLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgcnVudGltZS9vcHR3aW4udmltLCBzcmMvZXhfY21kcy5jLAorCSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL2dsb2JhbHMuaCwgc3JjL29wdGlvbi5jLCBzcmMvcXVpY2tmaXguYywKKwkgICAgc3JjL3NjcmVlbi5jLCBzcmMvc3RydWN0cy5oLCBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjE5NiAgKGRlcGVuZHMgb24gNi4xLjA4NCkKK1Byb2JsZW06ICAgIE9uIE1hYyBPUyBYIDEwLjIgZ2VuZXJhdGluZyBvc2RlZi5oIGZhaWxzLgorU29sdXRpb246ICAgQWRkIC1uby1jcHAtcHJlY29tcCB0byBhdm9pZCB1c2luZyBwcmVjb21waWxlZCBoZWFkZXIgZmlsZXMsIHdoaWNoCisJICAgIGRpc2FibGVzIHByaW50aW5nIHRoZSBzZWFyY2ggcGF0aC4gKEJlbiBGb3dsZXIpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjEuMTk3CitQcm9ibGVtOiAgICAiOmhlbHAgPEMtVj48Qy1cPjxDLVY+PEMtTj4iIChyZXN1bHRpbmcgaW4gPDFjPjwwZT4pIGdpdmVzIGFuCisJICAgIGVycm9yIG1lc3NhZ2UuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgRG91YmxlIHRoZSBiYWNrc2xhc2ggaW4gIkNUUkwtXCIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjE5OCAoZXh0cmEpIChkZXBlbmRzIG9uIDYuMS4wNzYpCitQcm9ibGVtOiAgICBNYWMgT1MgWDogRGlhbG9ndWVzIGRvbid0IHdvcmsuCitTb2x1dGlvbjogICBGaXggYSBjcmFzaGluZyBwcm9ibGVtIGZvciBzb21lIEdVSSBkaWFsb2d1ZXMuICBGaXggYSBwcm9ibGVtIHdoZW4KKwkgICAgc2F2aW5nIHRvIGEgbmV3IGZpbGUgZnJvbSB0aGUgR1VJLiAoUGV0ZXIgQ3Vja2EpCitGaWxlczoJICAgIHNyYy9mZWF0dXJlLmgsIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4xLjE5OQorUHJvYmxlbTogICAgJ2d1aWZvbnR3aWRlJyBkb2Vzbid0IHdvcmsgb24gV2luMzIuCitTb2x1dGlvbjogICBPdXRwdXQgZWFjaCB3aWRlIGNoYXJhY3RlciBzZXBhcmF0ZWx5LiAoTWljaGFlbCBHZWRkZXMpCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjEuMjAwCitQcm9ibGVtOiAgICAiOnN5biBzeW5jIGZyb21zdGFydCIgaXMgbm90IHNraXBwZWQgYWZ0ZXIgIjppZiAwIi4gIFRoaXMgY2FuIG1ha2UKKwkgICAgc3ludGF4IGhpZ2hsaWdodGluZyB2ZXJ5IHNsb3cuCitTb2x1dGlvbjogICBDaGVjayAiZWFwLT5za2lwIiBhcHByb3ByaWF0ZWx5LiAoUm9iIFdlc3QpCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjEuMjAxIChkZXBlbmRzIG9uIDYuMS4xOTIpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBpbGxlZ2FsIHBvaW50ZXIgY29tYmluYXRpb24uIChab2x0YW4gQXJwYWRmZnkpCitTb2x1dGlvbjogICBBZGQgYSB0eXBlY2FzdC4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYworCitQYXRjaCA2LjEuMjAyICAoZXh0cmEpKGRlcGVuZHMgb24gNi4xLjE0OCkKK1Byb2JsZW06ICAgIFdpbjMyOiBmaWxld3JpdGFibGUoKSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgb24gZGlyZWN0b3JpZXMuCitTb2x1dGlvbjogICBmaXggZmlsZXdyaXRhYmxlKCkuIChNaWtlIFdpbGxpYW1zKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjEuMjAzCitQcm9ibGVtOiAgICAiOiVzL34vLyIgY2F1c2VzIGEgY3Jhc2ggYWZ0ZXIgIjolcy94Ly8iLiAoR2FyeSBIb2xsb3dheSkKK1NvbHV0aW9uOiAgIEF2b2lkIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIGEgbGluZSB3aGVuICJ+IiBpcyBlbXB0eS4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMS4yMDQgKGRlcGVuZHMgb24gNi4xLjEyOSkKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIGFuIGlsbGVnYWwgcG9pbnRlciBvbiBTb2xhcmlzLgorU29sdXRpb246ICAgQWRkIGEgdHlwZWNhc3QuIChEZXJlayBXeWF0dCkKK0ZpbGVzOgkgICAgc3JjL21pc2MyLmMKKworUGF0Y2ggNi4xLjIwNQorUHJvYmxlbTogICAgVGhlIGd6aXAgcGx1Z2luIGNoYW5nZXMgdGhlIGFsdGVybmF0ZSBmaWxlIHdoZW4gZWRpdGluZyBhCisJICAgIGNvbXByZXNzZWQgZmlsZS4gKE9saXZlciBGdWNocykKK1NvbHV0aW9uOiAgIFRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgJ2EnIGFuZCAnQScgZmxhZ3MgZnJvbSAnY3BvJy4KK0ZpbGVzOgkgICAgcnVudGltZS9wbHVnaW4vZ3ppcC52aW0KKworUGF0Y2ggNi4xLjIwNgorUHJvYmxlbTogICAgVGhlIHNjcmlwdCBnZW5lcmF0ZWQgd2l0aCAiOm1rc2Vzc2lvbiIgZG9lc24ndCB3b3JrIHByb3Blcmx5IHdoZW4KKwkgICAgc29tZSBjb21tYW5kcyBhcmUgbWFwcGVkLgorU29sdXRpb246ICAgVXNlICI6bm9ybWFsISIgaW5zdGVhZCBvZiAiOm5vcm1hbCIuICBBbmQgdXNlICI6d2luY21kIiB3aGVyZQorCSAgICBwb3NzaWJsZS4gKE11cmFva2EgVGFybykKK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9mb2xkLmMKKworUGF0Y2ggNi4xLjIwNworUHJvYmxlbTogICAgSW5kZW50aW5nIGEgSmF2YSBmaWxlIGhhbmdzIGJlbG93IGEgbGluZSB3aXRoIGEgY29tbWVudCBhZnRlciBhCisJICAgIGNvbW1hbmQuCitTb2x1dGlvbjogICBCcmVhayBvdXQgb2YgYSBsb29wLiAoQW5kcmUgUGFuZykKKwkgICAgQWxzbyBsaW5lIHVwIH0gd2l0aCBtYXRjaGluZyB7LgorRmlsZXM6CSAgICBydW50aW1lL2luZGVudC9qYXZhLnZpbQorCitQYXRjaCA2LjEuMjA4CitQcm9ibGVtOiAgICBDYW4ndCB1c2UgdGhlIGJ1ZmZlciBudW1iZXIgZnJvbSB0aGUgUHl0aG9uIGludGVyZmFjZS4KK1NvbHV0aW9uOiAgIEFkZCBidWZmZXIubnVtYmVyLiAoTWljaGFsIFZpdGVjZWspCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjEuMjA5CitQcm9ibGVtOiAgICBQcmludGluZyBkb2Vzbid0IHdvcmsgb24gTWFjIE9TIGNsYXNzaWMuCitTb2x1dGlvbjogICBVc2UgYSAiOiIgZm9yIHBhdGggc2VwYXJhdG9yIHdoZW4gb3BlbmluZyB0aGUgcmVzb3VyY2UgZmlsZS4gKEF4ZWwKKwkgICAgS2llbGhvcm4pCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4yMTAKK1Byb2JsZW06ICAgIFdoZW4gdGhlcmUgaXMgYW4gaWNvbnYoKSBjb252ZXJzaW9uIGVycm9yIHdoZW4gcmVhZGluZyBhIGZpbGUKKwkgICAgdGhlcmUgY2FuIGJlIGFuIGVycm9yIHRoZSBuZXh0IHRpbWUgaWNvbnYoKSBpcyB1c2VkLgorU29sdXRpb246ICAgUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBpY29udigpIGRlc2NyaXB0b3IuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMjExCitQcm9ibGVtOiAgICBUaGUgbWVzc2FnZSAidXNlICEgdG8gb3ZlcnJpZGUiIGlzIGNvbmZ1c2luZy4KK1NvbHV0aW9uOiAgIE1ha2UgaXQgImFkZCAhIHRvIG92ZXJyaWRlIi4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZXZhbC5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2ZpbGVpby5jLAorCSAgICBzcmMvZ2xvYmFscy5oCisKK1BhdGNoIDYuMS4yMTIKK1Byb2JsZW06ICAgIFdoZW4gVmltIHdhcyBzdGFydGVkIHdpdGggIi1SIiAiOm5ldyIgY3JlYXRlcyBhIGJ1ZmZlcgorCSAgICAnbm9yZWFkb25seScgd2hpbGUgIjplbmV3IiBoYXMgJ3JlYWRvbmx5JyBzZXQuIChQcmViZW4gR3VsZGJlcmcpCitTb2x1dGlvbjogICBEb24ndCBzZXQgJ3JlYWRvbmx5IGluIGEgbmV3IGVtcHR5IGJ1ZmZlciBmb3IgIjplbmV3Ii4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjIxMworUHJvYmxlbTogICAgVXNpbmcgQ1RSTC1XIEggbWF5IGNhdXNlIGEgYmlnIGdhcCB0byBhcHBlYXIgYmVsb3cgdGhlIGxhc3QKKwkgICAgd2luZG93LiAoQXJpYyBCbHVtZXIpCitTb2x1dGlvbjogICBEb24ndCBzZXQgdGhlIHdpbmRvdyBoZWlnaHQgd2hlbiB0aGVyZSBpcyBhIHZlcnRpY2FsIHNwbGl0LgorCSAgICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjIxNAorUHJvYmxlbTogICAgV2hlbiBpbnN0YWxsaW5nIFZpbSBhbmQgdGhlIHJ1bnRpbWUgZmlsZXMgd2VyZSBjaGVja2VkIG91dCBmcm9tCisJICAgIENWUyB0aGUgQ1ZTIGRpcmVjdG9yaWVzIHdpbGwgYWxzbyBiZSBpbnN0YWxsZWQuCitTb2x1dGlvbjogICBBdm9pZCBpbnN0YWxsaW5nIHRoZSBDVlMgZGlycyBhbmQgdGhlaXIgY29udGVudHMuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjEuMjE1CitQcm9ibGVtOiAgICBXaW4zMjogIjpwd2QiIHVzZXMgYmFja3NsYXNoZXMgZXZlbiB3aGVuICdzaGVsbHNsYXNoJyBpcyBzZXQuCisJICAgIChYaWFuZ2ppYW5nIE1hKQorU29sdXRpb246ICAgQWRqdXN0IGJhY2tzbGFzaGVzIGJlZm9yZSBwcmludGluZyB0aGUgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjIxNgorUHJvYmxlbTogICAgV2hlbiBkeW5hbWljYWxseSBsb2FkaW5nIHRoZSBpY29udiBsaWJyYXJ5LCB0aGUgZXJyb3IgY29kZXMgbWF5IGJlCisJICAgIGNvbmZ1c2VkLgorU29sdXRpb246ICAgVXNlIHNwZWNpZmljIGVycm9yIGNvZGVzIGZvciBpY29udiBhbmQgcmVkZWZpbmUgdGhlbSBmb3IgZHluYW1pYworCSAgICBsb2FkaW5nLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9tYnl0ZS5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjIxNworUHJvYmxlbTogICAgV2hlbiBzb3VyY2luZyB0aGUgc2FtZSBWaW0gc2NyaXB0IHVzaW5nIGEgZGlmZmVyZW50IG5hbWUgKHN5bWJvbGljCisJICAgIGxpbmsgb3IgTVMtV2luZG93cyA4LjMgbmFtZSkgaXQgaXMgbGlzdGVkIHR3aWNlIHdpdGgKKwkgICAgIjpzY3JpcHRuYW1lcyIuICAoVG9ueSBNZWNoZWx5bmNrKQorU29sdXRpb246ICAgVHVybiB0aGUgc2NyaXB0IG5hbWUgaW50byBhIGZ1bGwgcGF0aCBiZWZvcmUgdXNpbmcgaXQuICBPbiBVbml4CisJICAgIGNvbXBhcmUgaW5vZGUvZGV2aWNlIG51bWJlcnMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4yMTgKK1Byb2JsZW06ICAgIE5vIGVycm9yIG1lc3NhZ2UgZm9yIHVzaW5nIHRoZSBmdW5jdGlvbiBhcmd1bWVudCAiNSsiLiAgKFNlcnZhdGl1cworCSAgICBCcmFuZHQpCitTb2x1dGlvbjogICBHaXZlIGFuIGVycm9yIG1lc3NhZ2UgaWYgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyBleHBlY3RlZCBidXQgaXMKKwkgICAgbm90IGZvdW5kLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yMTkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjphbWVudSA6YiAxPENSPiIgd2l0aCBhIFZpc3VhbCBzZWxlY3Rpb24gYW5kCisJICAgICdpbnNlcnRtb2RlJyBpcyBzZXQsIFZpbSBkb2VzIG5vdCByZXR1cm4gdG8gSW5zZXJ0IG1vZGUuIChNaWNrYWVsCisJICAgIE1hcmNoYW5kKQorU29sdXRpb246ICAgQWRkIHRoZSBjb21tYW5kIENUUkwtXCBDVFJMLUcgdGhhdCBnb2VzIHRvIEluc2VydCBtb2RlIGlmCisJICAgICdpbnNlcnRtb2RlJyBpcyBzZXQgYW5kIHRvIE5vcm1hbCBtb2RlIG90aGVyd2lzZS4gIEFwcGVuZCB0aGlzIHRvCisJICAgIG1lbnVzIGRlZmluZWQgd2l0aCAiOmFtZW51Ii4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjEuMjIwCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgQnVmUmVhZFBvc3QgYXV0b2NvbW1hbmQgdGhhdCBjaGFuZ2VzIHRoZSBsaW5lIGNvdW50LAorCSAgICBlLmcuLCAiJC0xam9pbiIsIHJlbG9hZGluZyBhIGZpbGUgdGhhdCB3YXMgY2hhbmdlZCBvdXRzaWRlIFZpbQorCSAgICBkb2VzIG5vdCB3b3JrIHByb3Blcmx5LiAoQWxhbiBHIElzYWFjKQorU29sdXRpb246ICAgTWFrZSB0aGUgYnVmZmVyIGVtcHR5IGJlZm9yZSByZWFkaW5nIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgZmlsZS4KKwkgICAgU2F2ZSB0aGUgbGluZXMgaW4gYSBkdW1teSBidWZmZXIsIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGJhY2sKKwkgICAgd2hlbiByZWFkaW5nIHRoZSBmaWxlIGZhaWxzLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9maWxlaW8uYywgc3JjL2dsb2JhbHMuaCwKKwkgICAgc3JjL3Byb3RvL2J1ZmZlci5wcm8KKworUGF0Y2ggNi4xLjIyMQorUHJvYmxlbTogICAgQ2hhbmdpbmcgY2FzZSBtYXkgbm90IHdvcmsgcHJvcGVybHksIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAorCSAgICBsb2NhbGUuCitTb2x1dGlvbjogICBBZGQgdGhlICdjYXNlbWFwJyBvcHRpb24gdG8gbGV0IHRoZSB1c2VyIGNob3NlIGhvdyBjaGFuZ2luZyBjYXNlCisJICAgIGlzIHRvIGJlIGRvbmUuCisJICAgIEFsc28gZml4IGxvd2VyaW5nIGNhc2Ugd2hlbiBhbiBVVEYtOCBjaGFyYWN0ZXIgZG9lc24ndCBrZWVwIHRoZQorCSAgICBzYW1lIGJ5dGUgbGVuZ3RoLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL2FzY2lpLmgsIHNyYy9hdXRvL2NvbmZpZ3VyZSwKKwkgICAgc3JjL2J1ZmZlci5jLCBzcmMvY2hhcnNldC5jLCBzcmMvY29uZmlnLmguaW4sIHNyYy9jb25maWd1cmUuaW4sCisJICAgIHNyYy9kaWZmLmMsIHNyYy9lZGl0LmMsIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzMi5jLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9maWxlaW8uYywgc3JjL2d1aV9hbWlnYS5jCisJICAgIHNyYy9ndWlfbWFjLmMsIHNyYy9ndWlfcGhvdG9uLmMsIHNyYy9ndWlfdzQ4LmMsIHNyYy9ndWlfYmVvcy5jYywKKwkgICAgc3JjL21hY3Jvcy5oLCBzcmMvbWFpbi5jLCBzcmMvbWJ5dGUuYywgc3JjL21lbnUuYywgc3JjL21lc3NhZ2UuYywKKwkgICAgc3JjL21pc2MxLmMsIHNyYy9taXNjMi5jLCBzcmMvb3B0aW9uLmMsIHNyYy9vc19tc2Rvcy5jLAorCSAgICBzcmMvb3NfbXN3aW4uYywgc3JjL3Byb3RvL2NoYXJzZXQucHJvLCBzcmMvcmVnZXhwLmMsIHNyYy9vcHRpb24uaCwKKwkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMS4yMjIgKGRlcGVuZHMgb24gNi4xLjIxOSkKK1Byb2JsZW06ICAgIFBhdGNoIDYuMS4yMTkgd2FzIGluY29tcGxldGUuCitTb2x1dGlvbjogICBBZGQgdGhlIGNoYW5nZXMgZm9yICI6YW1lbnUiLgorRmlsZXM6CSAgICBzcmMvbWVudS5jCisKK1BhdGNoIDYuMS4yMjMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gSU1FIGlzIGFjdGl2YXRlZCAnaW1pbnNlcnQnIGlzIHNldCwgYnV0IGl0IG1pZ2h0IG5ldmVyCisJICAgIGJlIHJlc2V0IHdoZW4gSU1FIGlzIGRpc2FibGVkLiAoTXVyYW9rYSBUYXJvKQorCSAgICBBbGwgc3lzdGVtczogJ2ltaW5zZXJ0JyBpcyBzZXQgdG8gMiB3aGVuIGxlYXZpbmcgSW5zZXJ0IG1vZGUsIGV2ZW4KKwkgICAgd2hlbiBsYW5nbWFwIGlzIGJlaW5nIHVzZWQuIChQZXRlciBWYWxhY2gpCitTb2x1dGlvbjogICBEb24ndCBzZXQgImJfcF9pbWluc2VydCIgaW4gX09uSW1lTm90aWZ5KCkuIChNdXJhb2thIFRhcm8pCisJICAgIERvbid0IHN0b3JlIHRoZSBzdGF0dXMgb2YgdGhlIGlucHV0IG1ldGhvZCBpbiAnaW1pbnNlcnQnIHdoZW4KKwkgICAgJ2ltaW5zZXJ0JyBpcyBvbmUuICBBbHNvIGZvciBlZGl0aW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kIGZvcgorCSAgICBhcmd1bWVudHMgdG8gTm9ybWFsIG1vZGUgY29tbWFuZHMuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjIyNAorUHJvYmxlbTogICAgImV4cGFuZCgnJFZBUicpIiByZXR1cm5zIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZSBleHBhbmRlZCAkVkFSCisJICAgIGlzIG5vdCBhbiBleGlzdGluZyBmaWxlLiAoQXJpYyBCbHVtZXIpCitTb2x1dGlvbjogICBJbmNsdWRlZCBub24tZXhpc3RpbmcgZmlsZXMsIGFzIGRvY3VtZW50ZWQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjIyNQorUHJvYmxlbTogICAgVXNpbmcgPEMtTz48Qy1ePiBpbiBJbnNlcnQgbW9kZSBoYXMgYSBkZWxheSB3aGVuIHN0YXJ0aW5nICJ2aW0gLXUKKwkgICAgTk9ORSIgYW5kICI6c2V0IG5vY3AgaGlkZGVuIi4gKEVtbWFudWVsKSAgZG9fZWNtZCgpIHVzZXMKKwkgICAgZmlsZWluZm8oKSwgdGhlIHJlZHJhdyBpcyBkb25lIGFmdGVyIGEgZGVsYXkgdG8gZ2l2ZSB0aGUgdXNlciB0aW1lCisJICAgIHRvIHJlYWQgdGhlIG1lc3NhZ2UuCitTb2x1dGlvbjogICBQdXQgdGhlIG1lc3NhZ2UgZnJvbSBmaWxlaW8oKSBpbiAia2VlcF9tc2ciLCBzbyB0aGF0IHRoZSByZWRyYXcgaXMKKwkgICAgZG9uZSBiZWZvcmUgdGhlIGRlbGF5IChzdGlsbCBuZWVkZWQgdG8gYXZvaWQgdGhlIG1vZGUgbWVzc2FnZQorCSAgICBvdmVyd3JpdGVzIHRoZSBmaWxlaW5mbygpIG1lc3NhZ2UpLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4xLjIyNgorUHJvYmxlbTogICAgVXNpbmcgIjpkZWJ1ZyIgd2l0aCBhICI6bm9ybWFsIiBjb21tYW5kIG1heSBjYXVzZSBhIGhhbmcuICAoQ29saW4KKwkgICAgS2VpdGgpCitTb2x1dGlvbjogICBTYXZlIHRoZSB0eXBlYWhlYWQgYnVmZmVyIHdoZW4gb2J0YWluaW5nIGEgZGVidWcgY29tbWFuZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMsIHNyYy9nZXRjaGFyLmMsIHNyYy9wcm90by9nZXRjaGFyLnBybworCitQYXRjaCA2LjEuMjI3CitQcm9ibGVtOiAgICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSB2YXJpYWJsZSBuYW1lICJhc2RmOmFzZGYiIGFuZCAiOmxldCBqOmFzZGYKKwkgICAgPSA1IiBkb2VzIG5vdCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UuIChNaWtvbGFqIE1hY2hvd3NraSkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBhICI6IiBpbnNpZGUgdGhlIHZhcmlhYmxlIG5hbWUuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjIyOCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogVGhlIHNwZWNpYWwgb3V0cHV0IGZ1bmN0aW9uIGZvciBIYW5ndWwgaXMgdXNlZCB0b28gb2Z0ZW4sCisJICAgIGNhdXNpbmcgc3BlY2lhbCBoYW5kbGluZyBmb3Igb3RoZXIgc2l0dWF0aW9ucyB0byBiZSBza2lwcGVkLgorCSAgICBiSW5Db21wb3NpdGlvbiBpcyBhbHdheXMgRkFMU0UsIGNhdXNpbmcgSW1lR2V0VGVtcENvbXBvc2l0aW9uKCkKKwkgICAgYWx3YXlzIHRvIHJldHVybiBOVUxMLgorU29sdXRpb246ICAgUmVtb3ZlIEhhbkV4dFRleHRPdXQoKS4gIERlbGV0ZSB0aGUgZGVhZCBjb2RlIGFyb3VuZAorCSAgICBiSW5Db21wb3NpdGlvbiBhbmQgSW1lR2V0VGVtcENvbXBvc2l0aW9uKCkuCitGaWxlczoJICAgIHNyYy9ndWlfdzE2LmMsIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4xLjIyOQorUHJvYmxlbTogICAgV2luMzI6IENvbnZlcnNpb24gdG8vZnJvbSBvZnRlbiB1c2VkIGNvZGVwYWdlcyByZXF1aXJlcyB0aGUgaWNvbnYKKwkgICAgbGlicmFyeSwgd2hpY2ggaXMgbm90IGFsd2F5cyBhdmFpbGFibGUuCitTb2x1dGlvbjogICBVc2Ugc3RhbmRhcmQgTVMtV2luZG93cyBmdW5jdGlvbnMgZm9yIHRoZSBjb252ZXJzaW9uIHdoZW4KKwkgICAgcG9zc2libGUuIChtb3N0bHkgYnkgR2xlbm4gTWF5bmFyZCkKKwkgICAgQWxzbyBmaXhlcyBtaXNzaW5nIGRlY2xhcmF0aW9uIGZvciBwYXRjaCA2LjEuMjIwLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjIzMCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4xNjogYnVpbGRpbmcgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgRXhjbHVkZSB0aGUgWEJVVFRPTiBoYW5kbGluZy4gKFZpbmNlIE5lZ3JpKQorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMS4yMzEKK1Byb2JsZW06ICAgIERvdWJsZSBjbGlja2luZyB3aXRoIHRoZSBtb3VzZSB0byBzZWxlY3QgYSB3b3JkIGRvZXMgbm90IHdvcmsgZm9yCisJICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIFVzZSB2aW1faXN3b3JkYygpIGluc3RlYWQgb2YgdmltX2lzSURjKCkuICBUaGlzIG1lYW5zICdpc2tleXdvcmQnCisJICAgIGlzIHVzZWQgaW50ZWFkIG9mICdpc2lkZW50Jy4gIEFsc28gZml4IHRoYXQgbWl4aW5nIEFTQ0lJIHdpdGgKKwkgICAgbXVsdGktYnl0ZSB3b3JkIGNoYXJhY3RlcnMgZG9lc24ndCB3b3JrLCB0aGUgbW91c2UgY2xhc3MgZm9yCisJICAgIHB1bmN0dWF0aW9uIGFuZCB3b3JkIGNoYXJhY3RlcnMgd2FzIG1peGVkIHVwLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjIzMiAoZGVwZW5kcyBvbiA2LjEuMjI2KQorUHJvYmxlbTogICAgVXNpbmcgZXhfbm9ybWFsX2J1c3kgd2hpbGUgaXQgbWlnaHQgbm90IGJlIGF2YWlsYWJsZS4gKEF4ZWwKKwkgICAgS2llbGhvcm4pCitTb2x1dGlvbjogICBPbmx5IHVzZSBleF9ub3JtYWxfYnVzeSB3aGVuIEZFQVRfRVhfRVhUUkEgaXMgZGVmaW5lZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4xLjIzMworUHJvYmxlbTogICAgIjpoZWxwIGV4cHItfHwiIGRvZXMgbm90IHdvcmsuCitTb2x1dGlvbjogICBEb24ndCB1c2UgdGhlICd8JyBhcyBhIGNvbW1hbmQgc2VwYXJhdG9yCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4xLjIzNCAoZGVwZW5kcyBvbiA2LjEuMjE3KQorUHJvYmxlbTogICAgR2V0IGEgd2FybmluZyBmb3IgdXNpbmcgYSBuZWdhdGl2ZSB2YWx1ZSBmb3Igc3RfZGV2LgorU29sdXRpb246ICAgRG9uJ3QgYXNzaWduIGEgbmVnYXRpdmUgdmFsdWUgdG8gc3RfZGV2LgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYworCitQYXRjaCA2LjEuMjM1IChkZXBlbmRzIG9uIDYuMS4yMjMpCitQcm9ibGVtOiAgICAnaW1pbnNlcnQnIGlzIGNoYW5nZWQgZnJvbSAxIHRvIDIgd2hlbiBsZWF2aW5nIEluc2VydCBtb2RlLiAoUGV0ZXIKKwkgICAgVmFsYWNoKQorU29sdXRpb246ICAgQ2hlY2sgIlN0YXRlIiBiZWZvcmUgcmVzZXR0aW5nIGl0IHRvIE5PUk1BTC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjEuMjM2CitQcm9ibGVtOiAgICBNZW1vcnkgbGVha3Mgd2hlbiBhcHBlbmRpbmcgbGluZXMgZm9yICI6ZGlmZmdldCIgb3IgIjpkaWZmcHV0IiBhbmQKKwkgICAgd2hlbiByZWxvYWRpbmcgYSBjaGFuZ2VkIGJ1ZmZlci4KK1NvbHV0aW9uOiAgIEZyZWUgYSBsaW5lIGFmdGVyIGNhbGxpbmcgbWxfYXBwZW5kKCkuCitGaWxlczoJICAgIHNyYy9kaWZmLmMsIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMjM3CitQcm9ibGVtOiAgICBQdXR0aW5nIGluIFZpc3VhbCBibG9jayBtb2RlIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gIiQiIHdhcworCSAgICB1c2VkIG9yIHdoZW4gdGhlIGZpcnN0IGxpbmUgaXMgc2hvcnQuICAoQ2hyaXN0aWFuIE1pY2hvbikKK1NvbHV0aW9uOiAgIEZpcnN0IGRlbGV0ZSB0aGUgc2VsZWN0ZWQgdGV4dCBhbmQgdGhlbiBwdXQgdGhlIG5ldyB0ZXh0LiAgU2F2ZQorCSAgICBhbmQgcmVzdG9yZSByZWdpc3RlcnMgYXMgbmVjZXNzYXJ5LgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oLCBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYywgc3JjL3Byb3RvL29wcy5wcm8sCisJICAgIHNyYy92aW0uaAorCitQYXRjaCA2LjEuMjM4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgImljb249IiBhcmd1bWVudCBmb3IgdGhlICI6bWVudSIgY29tbWFuZCBkb2VzIG5vdAorCSAgICBzZWFyY2ggZm9yIHRoZSBiaXRtYXAgZmlsZS4KK1NvbHV0aW9uOiAgIEV4cGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHNlYXJjaCBmb3IgdGhlIGJpdG1hcCBmaWxlLgorCSAgICAoVmluY2UgTmVncmkpCisJICAgIE1ha2UgaXQgY29uc2lzdGVudCwgdXNlIHRoZSBzYW1lIG1lY2hhbmlzbSBmb3IgWDExIGFuZCBHVEsuCitGaWxlczoJICAgIHNyYy9ndWkuYyBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3gxMS5jLAorCSAgICBzcmMvcHJvdG8vZ3VpLnBybworCitQYXRjaCA2LjEuMjM5CitQcm9ibGVtOiAgICBHaXZpbmcgYW4gZXJyb3IgZm9yIG1pc3NpbmcgOmVuZGlmIG9yIDplbmR3aGlsZSB3aGVuIGJlaW5nCisJICAgIGludGVycnVwdGVkLgorU29sdXRpb246ICAgRG9uJ3QgZ2l2ZSB0aGVzZSBtZXNzYWdlcyB3aGVuIGludGVycnVwdGVkLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMjQwIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIHdpdGggQkNDIDU6IENQVSBtYXkgYmUgZGVmaW5lZCBpbiB0aGUgZW52aXJvbm1lbnQsIHdoaWNoCisJICAgIGNhdXNlcyBhIHdyb25nIGFyZ3VtZW50IGZvciB0aGUgY29tcGlsZXIuIChXYWx0ZXIgQnJpc2NvZSkKK1NvbHV0aW9uOiAgIFVzZSBDUFVOUiBpbnN0ZWFkIG9mIENQVS4KK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haworCitQYXRjaCA2LjEuMjQxCitQcm9ibGVtOiAgICBTb21ldGhpbmcgZ29lcyB3cm9uZyB3aGVuIGRyYXdpbmcgb3IgdW5kcmF3aW5nIHRoZSBjdXJzb3IuCitTb2x1dGlvbjogICBSZW1lbWJlciB3aGVuIHRoZSBjdXJzb3IgaW52YWxpZCBpbiBhIGJldHRlciB3YXkuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjEuMjQyCitQcm9ibGVtOiAgICBXaGVuIHBhc3RpbmcgYSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb24gdGhlIGNvbW1hbmQgbGluZSBpdCBpcyBub3QKKwkgICAgcG9zc2libGUgdG8gaW50ZXJydXB0LiAoSmVhbiBKb3JkYWFuKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGFuIGludGVycnVwdCBhZnRlciBlYWNoIHBhc3RlZCBsaW5lLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4xLjI0MyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB0aGUgT0xFIHZlcnNpb24gaXMgc3RhcnRlZCBhbmQgd2Fzbid0IHJlZ2lzdGVyZWQsIGEKKwkgICAgbWVzc2FnZSBwb3BzIHVwIHRvIHN1Z2dlc3QgcmVnaXN0ZXJpbmcsIGV2ZW4gd2hlbiB0aGlzIGlzbid0CisJICAgIHBvc3NpYmxlICh3aGVuIHRoZSByZWdpc3RyeSBpcyBub3Qgd3JpdGFibGUpLgorU29sdXRpb246ICAgQ2hlY2sgaWYgcmVnaXN0ZXJpbmcgaXMgcG9zc2libGUgYmVmb3JlIGFza2luZyB3aGV0aGVyIGl0IHNob3VsZAorCSAgICBiZSBkb25lLiAoV2FsdGVyIEJyaXNjb2UpCisJICAgIEFsc28gYXZvaWQgcmVzdGFydGluZyBWaW0gYWZ0ZXIgcmVnaXN0ZXJpbmcuCitGaWxlczoJICAgIHNyYy9pZl9vbGUuY3BwCisKK1BhdGNoIDYuMS4yNDQKK1Byb2JsZW06ICAgIFBhdGNoIDYuMS4yMzcgd2FzIG1pc3NpbmcgdGhlIGRpZmYgZm9yIHZpbS5oLiAoSWdvciBHb2xkZW5iZXJnKQorU29sdXRpb246ICAgSW5jbHVkZSBpdCBoZXJlLgorRmlsZXM6CSAgICBzcmMvdmltLmgKKworUGF0Y2ggNi4xLjI0NQorUHJvYmxlbTogICAgQ29tcGFyaW5nIHdpdGggaWdub3JlZCBjYXNlIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgZm9yIFVuaWNvZGUKKwkgICAgd2l0aCBhIGxvY2FsZSB3aGVyZSBjYXNlIGZvbGRpbmcgYW4gQVNDSUkgY2hhcmFjdGVyIHJlc3VsdHMgaW4gYQorCSAgICBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKEdsZW5uIE1heW5hcmQpCitTb2x1dGlvbjogICBIYW5kbGUgaWdub3JlLWNhc2UgY29tcGFyZSBmb3IgVW5pY29kZSBkaWZmZXJlbnRseS4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjI0NgorUHJvYmxlbTogICAgIjpibGFzdCIgZ29lcyB0byB0aGUgZmlyc3QgYnVmZmVyIGlmIHRoZSBsYXN0IG9uZSBpcyB1bmxpc3RlZC4KKwkgICAgKEFuZHJldyBTdHJ5a2VyKQorU29sdXRpb246ICAgRnJvbSB0aGUgbGFzdCBidWZmZXIgc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIGZpcnN0IGxpc3RlZCBidWZmZXIKKwkgICAgaW5zdGVhZCBvZiBmb3J3YXJkcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjI0NworUHJvYmxlbTogICAgQUNMIHN1cHBvcnQgZG9lc24ndCBhbHdheXMgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIEFkZCBhIGNvbmZpZ3VyZSBhcmd1bWVudCB0byBkaXNhYmxlIEFDTCAiLS1kaXNhYmxlLWFjbCIuIChUaGllcnJ5CisJICAgIFZpZ25hdWQpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjEuMjQ4CitQcm9ibGVtOiAgICBUeXBpbmcgJ3EnIGF0IHRoZSBtb3JlLXByb21wdCBmb3IgIjpsZXQiIGRvZXMgbm90IHF1aXQgdGhlCisJICAgIGxpc3RpbmcuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIFF1aXQgdGhlIGxpc3Rpbmcgd2hlbiBnb3RfaW50IGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjQ5CitQcm9ibGVtOiAgICBDYW4ndCBleHBhbmQgYSBwYXRoIG9uIHRoZSBjb21tYW5kIGxpbmUgaWYgaXQgaW5jbHVkZXMgYSAifCIgYXMgYQorCSAgICB0cmFpbCBieXRlIG9mIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCitTb2x1dGlvbjogICBDaGVjayBmb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMjUwCitQcm9ibGVtOiAgICBXaGVuIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiAnbGluZXMnIGluc2lkZSB0aGUgZXhwcmVzc2lvbiBzZXQgd2l0aAorCSAgICAnZGlmZmV4cHInIFZpbSBtaWdodCBjcmFzaC4gKERhdmUgRmlzaGJ1cm4pCitTb2x1dGlvbjogICBEb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgc2NyZWVuIHNpemUgd2hpbGUgdXBkYXRpbmcgdGhlIHNjcmVlbi4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL29wdGlvbi5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjI1MQorUHJvYmxlbTogICAgQ2FuJ3QgdXNlIGNvbXBsZXRpb24gZm9yICI6bGNkIiBhbmQgIjpsY2hkaXIiIGxpa2UgIjpjZCIuCitTb2x1dGlvbjogICBFeHBhbmQgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGVzZSBjb21tYW5kcy4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4yNTIKK1Byb2JsZW06ICAgICJ2aX0iIGRvZXMgbm90IGluY2x1ZGUgYSBsaW5lIGJyZWFrIHdoZW4gdGhlICJ9IiBpcyBhdCB0aGUgc3RhcnQKKwkgICAgb2YgYSBmb2xsb3dpbmcgbGluZS4gKEthbWlsIEJ1cnp5bnNraSkKK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGhlIGxpbmUgYnJlYWsuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjEuMjUzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIHdpdGggQ3lnd2luOiBDaGFuZ2VzIHRoZSBwYXRoIG9mIGFyZ3VtZW50cyBpbiBhIHdyb25nIHdheS4KKwkgICAgKFhpYW5namlhbmcgTWEpCitTb2x1dGlvbjogICBEb24ndCB1c2UgY3lnd2luX2NvbnZfdG9fcG9zaXhfcGF0aCgpIGZvciB0aGUgV2luMzIgdmVyc2lvbi4KKwkgICAgVXBkYXRlIHRoZSBDeWd3aW4gbWFrZWZpbGUgdG8gc3VwcG9ydCBtb3JlIGZlYXR1cmVzLiAgKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL01ha2VfY3lnLm1haywgc3JjL2lmX29sZS5jcHAsIHNyYy9tYWluLmMKKworUGF0Y2ggNi4xLjI1NAorUHJvYmxlbTogICAgZXhpc3RzKCJmb297YmFyfSIpIGRvZXMgbm90IHdvcmsuICAnOnVubGV0IHZ7ImEifXInIGRvZXMgbm90IHdvcmsuCisJICAgICI6bGV0IHZ7YX1yMSB2e2F9cjIiIGRvZXMgbm90IHdvcmsuICI6ZnVuYyBGeygxKX0iIGRvZXMgbm90IHdvcmsuCisJICAgICI6ZGVsZnVuYyBGeyIgZG9lcyBub3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLiAgJzpkZWxmdW5jIEZ7IkYifScKKwkgICAgZG9lcyBub3Qgd29yay4KK1NvbHV0aW9uOiAgIFN1cHBvcnQgbWFnaWMgYnJhY2VzIGZvciB0aGUgZXhpc3RzKCkgYXJndW1lbnQuIChWaW5jZSBOZWdyaSkKKwkgICAgQ2hlY2sgZm9yIHRyYWlsaW5nIGNvbW1lbnRzIGV4cGxpY2l0bHkgZm9yICI6dW5sZXQiLiAgQWRkIHN1cHBvcnQKKwkgICAgZm9yIG1hZ2ljIGJyYWNlcyBpbiBmdXJ0aGVyIGFyZ3VtZW50cyBvZiAiOmxldCIuICBMb29rIGZvciBhCisJICAgIHBhcmVudGhlc2lzIG9ubHkgYWZ0ZXIgdGhlIGZ1bmN0aW9uIG5hbWUuICAoU2VydmF0aXVzIEJyYW5kdCkKKwkgICAgQWxzbyBleHBhbmQgbWFnaWMgYnJhY2VzIGZvciAiZXhpc3RzKCcqZXhwcicpIi4gIEdpdmUgYW4gZXJyb3IKKwkgICAgbWVzc2FnZSBmb3IgYW4gaW52YWxpZCAiOmRlbGZ1bmMiIGFyZ3VtZW50LiAgQWxsb3cgcXVvdGVzIGluIHRoZQorCSAgICAiOmRlbGZ1bmMiIGFyZ3VtZW50LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfY21kcy5oLCBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMjU1IChkZXBlbmRzIG9uIDYuMS4yNTQpCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIGxvYWRpbmcgbWVudS52aW0gYSBzZWNvbmQgdGltZS4gKENocmlzdGlhbiBSb2JpbnNvbikKKwkgICAgIjp1bmxldCBnYXJiYWdlIGZvbyIgdHJpZXMgdW5sZXR0aW5nICJmb28iIGFmdGVyIGFuIGVycm9yIG1lc3NhZ2UuCisJICAgIChTZXJ2YXRpdXMgQnJhbmR0KQorCSAgICBWZXJ5IGxvbmcgZnVuY3Rpb24gYXJndW1lbnRzIGNhdXNlIHZlcnkgbG9uZyBtZXNzYWdlcyB3aGVuCisJICAgICd2ZXJib3NlJyBpcyAxNCBvciBoaWdoZXIuCitTb2x1dGlvbjogICBBdm9pZCByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuCisJICAgIEJyZWFrIG91dCBvZiBhIGxvb3AgYWZ0ZXIgYW4gaW52YWxpZCBhcmd1bWVudCBmb3IgIjp1bmxldCIuCisJICAgIFRydW5jYXRlIGxvbmcgZnVuY3Rpb24gYXJndW1lbnRzIHRvIDgwIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjI1NiAoZGVwZW5kcyBvbiA2LjEuMjU1KQorUHJvYmxlbTogICAgRGVmaW5pbmcgYSBmdW5jdGlvbiBhZnRlciAiOmlmIDAiIGNvdWxkIHN0aWxsIGNhdXNlIGFuIGVycm9yCisJICAgIG1lc3NhZ2UgZm9yIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLgorCSAgICBMZWFraW5nIG1lbW9yeSB3aGVuIHRoZXJlIGFyZSB0cmFpbGluZyBjaGFyYWN0ZXJzIGZvciAiOmRlbGZ1bmMiLgorU29sdXRpb246ICAgQ2hlY2sgdGhlICJza2lwIiBmbGFnLiAgRnJlZSB0aGUgbWVtb3J5LiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjU3CitQcm9ibGVtOiAgICAiOmN3aW5kb3ciIGFsd2F5cyBzZXRzIHRoZSBwcmV2aW91cyB3aW5kb3cgdG8gdGhlIGxhc3QgYnV0IG9uZQorCSAgICB3aW5kb3cuICAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgU2V0IHRoZSBwcmV2aW91cyB3aW5kb3cgcHJvcGVybHkuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmMsIHNyYy9xdWlja2ZpeC5jLCBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjI1OAorUHJvYmxlbTogICAgQnVmZmVycyBtZW51IGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IgbXVsdGlieXRlIGJ1ZmZlciBuYW1lcy4KK1NvbHV0aW9uOiAgIFVzZSBhIHBhdHRlcm4gdG8gZ2V0IHRoZSBsZWZ0IGFuZCByaWdodCBwYXJ0IG9mIHRoZSBuYW1lLgorCSAgICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMS4yNTkgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiB3aXRoICdwYXRjaG1vZGUnIGlzIHVzZWQgZmlsZW5hbWVzIGFyZSB0cnVuY2F0ZWQuCitTb2x1dGlvbjogICBJbmNyZWFzZSB0aGUgQkFTRU5BTUVMRU4gZm9yIE1hYyBPUyBYLiAoRWQgUmFsc3RvbikKK0ZpbGVzOgkgICAgc3JjL29zX21hYy5oCisKK1BhdGNoIDYuMS4yNjAgKGRlcGVuZHMgb24gNi4xLjEwNCkKK1Byb2JsZW06ICAgIEdDQyAzLjIgc3RpbGwgc2VlbXMgdG8gaGF2ZSBhbiBvcHRpbWl6ZXIgcHJvYmxlbS4gKFp2aSBIYXInRWwpCitTb2x1dGlvbjogICBVc2UgdGhlIHNhbWUgY29uZmlndXJlIGNoZWNrIGFzIHVzZWQgZm9yIEdDQyAzLjEuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjEuMjYxCitQcm9ibGVtOiAgICBXaGVuIGRlbGV0aW5nIGEgbGluZSBpbiBhIGJ1ZmZlciB3aGljaCBpcyBub3QgdGhlIGN1cnJlbnQgYnVmZmVyLAorCSAgICB1c2luZyB0aGUgUGVybCBpbnRlcmZhY2UgRGVsZXRlKCksIHRoZSBjdXJzb3IgaW4gdGhlIGN1cnJlbnQKKwkgICAgd2luZG93IG1heSBtb3ZlLiAoQ2hyaXMgSG91c2VyKQorU29sdXRpb246ICAgRG9uJ3QgYWRqdXN0IHRoZSBjdXJzb3IgcG9zaXRpb24gd2hlbiBjaGFuZ2luZyBhbm90aGVyIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2lmX3BlcmwueHMKKworUGF0Y2ggNi4xLjI2MgorUHJvYmxlbTogICAgV2hlbiBqdW1waW5nIG92ZXIgZm9sZHMgd2l0aCAielsiLCAiemoiIGFuZCAiemsiIHRoZSBwcmV2aW91cworCSAgICBwb3NpdGlvbiBpcyBub3QgcmVtZW1iZXJlZC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgU2V0IHRoZSBwcmV2aW91cyBjb250ZXh0IG1hcmsgYmVmb3JlIGp1bXBpbmcuCitGaWxlczoJICAgIHNyYy9mb2xkLmMKKworUGF0Y2ggNi4xLjI2MworUHJvYmxlbTogICAgV2hlbiB0eXBpbmcgYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB0aGF0IHRyaWdnZXJzIGFuIGFiYnJldmlhdGlvbgorCSAgICBpdCBpcyBub3QgaW5zZXJ0ZWQgcHJvcGVybHkuCitTb2x1dGlvbjogICBIYW5kbGUgYWRkaW5nIHRoZSB0eXBlZCBtdWx0aS1ieXRlIGNoYXJhY3Rlci4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYworCitQYXRjaCA2LjEuMjY0IChkZXBlbmRzIG9uIHBhdGNoIDYuMS4yNTQpCitQcm9ibGVtOiAgICBleGlzdHMoKSBkb2VzIG5vdCB3b3JrIGZvciBidWlsdC1pbiBmdW5jdGlvbnMuIChTdGV2ZSBXYWxsKQorU29sdXRpb246ICAgRG9uJ3QgY2hlY2sgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHRvIHN0YXJ0IHdpdGggYSBjYXBpdGFsLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yNjUKK1Byb2JsZW06ICAgIGxpYmNhbGwoKSBjYW4gYmUgdXNlZCBpbiAnZm9sZGV4cHInIHRvIGNhbGwgYW55IHN5c3RlbSBmdW5jdGlvbi4KKwkgICAgcmVuYW1lKCksIGRlbGV0ZSgpIGFuZCByZW1vdGVfc2VuZCgpIGNhbiBhbHNvIGJlIHVzZWQgaW4KKwkgICAgJ2ZvbGRleHByJy4gIFRoZXNlIGFyZSBzZWN1cml0eSBwcm9ibGVtcy4gKEdlb3JnaSBHdW5pbnNraSkKK1NvbHV0aW9uOiAgIERvbid0IGFsbG93IHVzaW5nIGxpYmNhbGwoKSwgcmVuYW1lKCksIGRlbGV0ZSgpLCByZW1vdGVfc2VuZCgpIGFuZAorCSAgICBzaW1pbGFyIGZ1bmN0aW9ucyBpbiB0aGUgc2FuZGJveC4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjY2IChkZXBlbmRzIG9uIDYuMS4yNjUpCitQcm9ibGVtOiAgICBXaW4zMjogY29tcGlsZSBlcnJvciBpbiBldmFsLmMuIChCaWxsIE1jQ2FydGh5KQorU29sdXRpb246ICAgTW92ZSBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yNjcKK1Byb2JsZW06ICAgIFVzaW5nICJwIiB0byBwYXN0ZSBpbnRvIGEgVmlzdWFsIHNlbGVjdGVkIGFyZWEgbWF5IGNhdXNlIGEgY3Jhc2guCitTb2x1dGlvbjogICBBbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBzYXZpbmcgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzLiAoTXVyYW9rYQorCSAgICBUYXJvKQorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4xLjI2OAorUHJvYmxlbTogICAgV2hlbiB0cmlnZ2VyaW5nIGFuIGFiYnJldmlhdGlvbiB3aXRoIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIsIHRoaXMKKwkgICAgY2hhcmFjdGVyIGlzIG5vdCBjb3JyZWN0bHkgaW5zZXJ0ZWQgYWZ0ZXIgZXhwYW5kaW5nIHRoZQorCSAgICBhYmJyZXZpYXRpb24uIChUYXJvIE11cmFva2EpCitTb2x1dGlvbjogICBBZGQgQUJCUl9PRkYgdG8gYWxsIGNoYXJhY3RlcnMgYWJvdmUgMHhmZi4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNi4xLjI2OQorUHJvYmxlbTogICAgQWZ0ZXIgdXNpbmcgaW5wdXQoKSB0ZXh0IHdyaXR0ZW4gd2l0aCAiOnJlZGlyIiBnZXRzIGV4dHJhIGluZGVudC4KKwkgICAgKERhdmlkIEZpc2hidXJuKQorU29sdXRpb246ICAgUmVzdG9yZSBtc2dfY29sIGFmdGVyIHVzaW5nIGlucHV0KCkuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuMS4yNzAgKGRlcGVuZHMgb24gNi4xLjI2MCkKK1Byb2JsZW06ICAgIEdDQyAzLjIuMSBzdGlsbCBzZWVtcyB0byBoYXZlIGFuIG9wdGltaXplciBwcm9ibGVtLgorU29sdXRpb246ICAgVXNlIHRoZSBzYW1lIGNvbmZpZ3VyZSBjaGVjayBhcyB1c2VkIGZvciBHQ0MgMy4xLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjI3MQorUHJvYmxlbTogICAgV2hlbiBjb21waWxpbmcgd2l0aG91dCB0aGUgK3N5bnRheCBmZWF0dXJlIHRoZXJlIGFyZSBlcnJvcnMuCitTb2x1dGlvbjogICBEb24ndCB1c2Ugc29tZSBjb2RlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLiAoUm9nZXIgQ29ybmVsaXVzKQorCSAgICBNYWtlIHRlc3QgNDUgd29yayB3aXRob3V0IHN5bnRheCBoaWdobGlnaHRpbmcuCisJICAgIEFsc28gZml4IGFuIGVycm9yIGluIGEgcGF0dGVybiBtYXRjaGluZzogIlwlKCIgd2FzIG5vdCBzdXBwb3J0ZWQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jLCBzcmMvcmVnZXhwLmMsIHNyYy90ZXN0ZGlyL3Rlc3Q0NS5pbgorCitQYXRjaCA2LjEuMjcyCitQcm9ibGVtOiAgICBBZnRlciB1c2luZyAiOnNldCBkZWZpbmU8IiBhIGNyYXNoIG1heSBoYXBwZW4uIChDaHJpc3RpYW4gUm9iaW5zb24pCitTb2x1dGlvbjogICBNYWtlIGEgY29weSBvZiB0aGUgb3B0aW9uIHZhbHVlIGluIGFsbG9jYXRlZCBtZW1vcnkuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMjczCitQcm9ibGVtOiAgICBXaGVuIHRoZSBjdXJzb3IgZG9lc24ndCBibGluaywgcmVkcmF3aW5nIGFuIGV4cG9zZWQgYXJlYSBtYXkgaGlkZQorCSAgICB0aGUgY3Vyc29yLgorU29sdXRpb246ICAgQWx3YXlzIGRyYXcgdGhlIGN1cnNvciwgYWxzbyB3aGVuIGl0IGRpZG4ndCBtb3ZlLiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4xLjI3NCAoZGVwZW5kcyBvbiA2LjEuMjEwKQorUHJvYmxlbTogICAgUmVzZXR0aW5nIHRoZSBpY29udigpIHN0YXRlIGFmdGVyIGVhY2ggZXJyb3IgaXMgd3JvbmcgZm9yIGFuCisJICAgIGluY29tcGxldGUgc2VxdWVuY2UuCitTb2x1dGlvbjogICBEb24ndCByZXNldCB0aGUgaWNvbnYoKSBzdGF0ZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS4yNzUKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgInYiIGluIGEgc3RhcnR1cCBzY3JpcHQsIGdldCB3YXJuaW5nIG1lc3NhZ2UgdGhhdAorCSAgICB0ZXJtaW5hbCBjYW5ub3QgaGlnaGxpZ2h0LiAoQ2hhcmxlcyBDYW1wYmVsbCkKK1NvbHV0aW9uOiAgIE9ubHkgZ2l2ZSB0aGUgbWVzc2FnZSBhZnRlciB0aGUgdGVybWluYWwgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjEuMjc2CitQcm9ibGVtOiAgICAiZ3ZpbSAtLXJlbW90ZSBmaWxlIiBkb2Vzbid0IHByb21wdCBmb3IgYW4gZW5jcnlwdGlvbiBrZXkuCitTb2x1dGlvbjogICBUaGUgZnVydGhlciBjaGFyYWN0ZXJzIHRoZSBjbGllbnQgc2VuZHMgdG8gdGhlIHNlcnZlciBhcmUgdXNlZC4KKwkgICAgQWRkZWQgaW5wdXRzYXZlKCkgYW5kIGlucHV0cmVzdG9yZSgpIHRvIGFsbG93IHByb21wdGluZyB0aGUKKwkgICAgdXNlciBkaXJlY3RseSBhbmQgbm90IHVzaW5nIHR5cGVhaGVhZC4KKwkgICAgQWxzbyBmaXggcG9zc2libGUgbWVtb3J5IGxlYWsgZm9yICI6bm9ybWFsIi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMyLmMsIHNyYy9leF9kb2NtZC5jLCBzcmMvZ2V0Y2hhci5jLAorCSAgICBzcmMvbWFpbi5jLCBzcmMvcHJvdG8vZ2V0Y2hhci5wcm8sIHNyYy9wcm90by91aS5wcm8sCisJICAgIHNyYy9ydW50aW1lL2RvYy9ldmFsLnR4dCwgc3JjL3N0cnVjdHMuaCwgc3JjL3VpLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjEuMjc3IChkZXBlbmRzIG9uIDYuMS4yNzYpCitQcm9ibGVtOiAgICBDb21waWxhdGlvbiBlcnJvciB3aGVuIGJ1aWxkaW5nIHdpdGggc21hbGwgZmVhdHVyZXMuCitTb2x1dGlvbjogICBEZWZpbmUgdHJhc2hfaW5wdXRfYnVmKCkgd2hlbiBuZWVkZWQuIChLZWx2aW4gTGVlKQorRmlsZXM6CSAgICBzcmMvdWkuYworCitQYXRjaCA2LjEuMjc4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHNpZ25zIHRoZSBsaW5lIG51bWJlciBvZiBhIGNsb3NlZCBmb2xkIGRvZXNuJ3QgbGluZSB1cAorCSAgICB3aXRoIHRoZSBvdGhlciBsaW5lIG51bWJlcnMuIChLYW1pbCBCdXJ6eW5za2kpCitTb2x1dGlvbjogICBJbnNlcnQgdHdvIHNwYWNlcyBmb3IgdGhlIHNpZ24gY29sdW1uLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjI3OQorUHJvYmxlbTogICAgVGhlIHByb3RvdHlwZSBmb3Igc21zZygpIGFuZCBzbXNnX2F0dHIoKSBkbyBub3QgbWF0Y2ggdGhlIGZ1bmN0aW9uCisJICAgIGRlZmluaXRpb24uICBUaGlzIG1heSBjYXVzZSB0cm91YmxlIGZvciBzb21lIGNvbXBpbGVycy4gKE5peCkKK1NvbHV0aW9uOiAgIFVzZSB2YV9saXN0IGZvciBzeXN0ZW1zIHRoYXQgaGF2ZSBzdGRhcmcuaC4gIFVzZSAiaW50IiBpbnN0ZWFkIG9mCisJICAgICJ2b2lkIiBmb3IgdGhlIHJldHVybiB0eXBlLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWcuaC5pbiwgc3JjL2NvbmZpZ3VyZS5pbiwKKwkgICAgc3JjL3Byb3RvLmgsIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4xLjI4MAorUHJvYmxlbTogICAgSXQncyBwb3NzaWJsZSB0byB1c2UgYW4gYXJndW1lbnQgImZpcnN0bGluZSIgb3IgImxhc3RsaW5lIiBmb3IgYQorCSAgICBmdW5jdGlvbiBidXQgdXNpbmcgImE6Zmlyc3RsaW5lIiBvciAiYTpsYXN0bGluZSIgaW4gdGhlIGZ1bmN0aW9uCisJICAgIHdvbid0IHdvcmsuICAoQmVuamkgRmlzaGVyKQorU29sdXRpb246ICAgR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGVzZSBhcmd1bWVudHMuCisJICAgIEFsc28gYXZvaWQgdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGJvZHkgY2F1c2VzIGEgd2hvbGUgcm93IG9mCisJICAgIGVycm9ycywgc2tpcCBvdmVyIGl0IGFmdGVyIGFuIGVycm9yIGluIHRoZSBmaXJzdCBsaW5lLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4yODEKK1Byb2JsZW06ICAgIEluIEluc2VydCBtb2RlIENUUkwtWCBDVFJMLUcgbGVhdmVzIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIHJ1bGVyLgorU29sdXRpb246ICAgU2V0IHRoZSBjdXJzb3IgcG9zaXRpb24gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBhcmd1bWVudCBvZiBDVFJMLUcuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4xLjI4MgorUHJvYmxlbTogICAgRWx2aXMgdXNlcyAic2UiIGluIGEgbW9kZWxpbmUsIFZpbSBkb2Vzbid0IHJlY29nbml6ZSB0aGlzLgorU29sdXRpb246ICAgQWxzbyBhY2NlcHQgInNlICIgd2hlcmUgInNldCAiIGlzIGFjY2VwdGVkIGluIGEgbW9kZWxpbmUuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMjgzCitQcm9ibGVtOiAgICBGb3IgIjpzaWduIiB0aGUgaWNvbiBmaWxlIG5hbWUgY2Fubm90IGNvbnRhaW4gYSBzcGFjZS4KK1NvbHV0aW9uOiAgIEhhbmRsZSBiYWNrc2xhc2hlcyBpbiB0aGUgZmlsZSBuYW1lLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuMjg0CitQcm9ibGVtOiAgICBPbiBTb2xhcmlzIHRoZXJlIGlzIGEgd2FybmluZyBmb3IgInN0cnVjdCB1dGltYnVmIi4KK1NvbHV0aW9uOiAgIE1vdmUgaW5jbHVkaW5nICJ1dGltZS5oIiB0byBvdXRzaWRlIHRoZSBmdW5jdGlvbi4gKERlcmVrIFd5YXR0KQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjI4NQorUHJvYmxlbTogICAgQ2FuJ3Qgd2lwZSBvdXQgYSBidWZmZXIgd2l0aCAnYnVmaGlkZScgb3B0aW9uLgorU29sdXRpb246ICAgQWRkICJ3aXBlIiB2YWx1ZSB0byAnYnVmaGlkZScuIChZZWdhcHBhbiBMYWtzaG1hbmFuKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL2J1ZmZlci5jLCBzcmMvb3B0aW9uLmMsCisJICAgIHNyYy9xdWlja2ZpeC5jCisKK1BhdGNoIDYuMS4yODYKK1Byb2JsZW06ICAgICdzaG93YnJlYWsnIGNhbm5vdCBjb250YWluIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIEFsbG93IHVzaW5nIGFsbCBwcmludGFibGUgY2hhcmFjdGVycyBmb3IgJ3Nob3dicmVhaycuCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMsIHNyYy9tb3ZlLmMsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjEuMjg3IChkZXBlbmRzIG9uIDYuMS4yODUpCitQcm9ibGVtOiAgICBFZmZlY3Qgb2YgImRlbGV0ZSIgYW5kICJ3aXBlIiBpbiAnYnVmaGlkZScgd2VyZSBtaXhlZCB1cC4KK1NvbHV0aW9uOiAgIFdpcGUgb3V0IHdoZW4gd2lwaW5nIG91dCBpcyBhc2tlZCBmb3IuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjEuMjg4CitQcm9ibGVtOiAgICAiOnNpbGVudCBmdW5jdGlvbiBGIiBoYW5ncy4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgRG9uJ3QgdXNlIG1zZ19jb2wsIGl0IGlzIG5vdCBpbmNyZW1lbnRlZCB3aGVuIHVzaW5nICI6c2lsZW50Ii4KKwkgICAgQWxzbyBtYWRlIHRoZSBmdW5jdGlvbiBvdXRwdXQgbG9vayBhIGJpdCBiZXR0ZXIuICBEb24ndCB0cmFuc2xhdGUKKwkgICAgImZ1bmN0aW9uIi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjEuMjg5IChkZXBlbmRzIG9uIDYuMS4yNzgpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5nIGZvciBwb2ludGVyLiAoQXhlbCBLaWVsaG9ybikKK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0IGZvciAiICAiLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjI5MCAoZXh0cmEpCitQcm9ibGVtOiAgICBUcnVuY2F0aW5nIGxvbmcgdGV4dCBmb3IgbWVzc2FnZSBib3ggbWF5IGJyZWFrIG11bHRpLWJ5dGUKKwkgICAgY2hhcmFjdGVyLgorU29sdXRpb246ICAgQWRqdXN0IHRvIHN0YXJ0IG9mIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjEuMjkxIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBDVFJMLUAgZG9lc24ndCB3b3JrLiAgRG9uJ3QgZXZlbiBnZXQgYSBtZXNzYWdlIGZvciBpdC4KK1NvbHV0aW9uOiAgIFJlY29nbml6ZSB0aGUga2V5Y29kZSBmb3IgQ1RSTC1ALiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMS4yOTIgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS4yNTMpCitQcm9ibGVtOiAgICBXaW4zMjogQ2FuJ3QgY29tcGlsZSB3aXRoIG5ldyBNaW5nVyBjb21waWxlci4KKwkgICAgQm9ybGFuZCA1IG1ha2VmaWxlIGRvZXNuJ3QgZ2VuZXJhdGUgcGF0aGRlZi5jLgorU29sdXRpb246ICAgUmVtb3ZlIC13d2lkZS1tdWx0aXBseSBhcmd1bWVudC4gKFJlbmUgZGUgWndhcnQpCisJICAgIFZhcmlvdXMgZml4ZXMgZm9yIG90aGVyIHByb2JsZW1zIGluIFdpbjMyIG1ha2VmaWxlcy4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haywgc3JjL01ha2VfY3lnLm1haywgc3JjL01ha2VfbWluZy5tYWssCisJICAgIHNyYy9NYWtlX212Yy5tYWsKKworUGF0Y2ggNi4xLjI5MworUHJvYmxlbTogICAgYnl0ZTJsaW5lKCkgcmV0dXJucyBhIHdyb25nIHJlc3VsdCBmb3Igc29tZSB2YWx1ZXMuCitTb2x1dGlvbjogICBDaGFuZ2UgIj49IiB0byAiPiIgaW4gbWxfZmluZF9saW5lX29yX29mZnNldCgpLiAoQnJhZGZvcmQgQyBTbWl0aCkKKwkgICAgQWRkIG9uZSB0byB0aGUgbGluZSBudW1iZXIgd2hlbiBhdCB0aGUgZW5kIG9mIGEgYmxvY2suCitGaWxlczoJICAgIHNyYy9tZW1saW5lLmMKKworUGF0Y2ggNi4xLjI5NAorUHJvYmxlbTogICAgQ2FuJ3QgaW5jbHVkZSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGluIGEgc3RyaW5nIGJ5IGl0cyBoZXggdmFsdWUuCisJICAgIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBBZGQgIlx1Li4uLiI6IGEgY2hhcmFjdGVyIHNwZWNpZmllZCB3aXRoIHVwIHRvIGZvdXIgaGV4IG51bWJlcnMKKwkgICAgYW5kIHN0b3JlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mICdlbmNvZGluZycuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjI5NSAoZXh0cmEpCitQcm9ibGVtOiAgICBQcm9jZXNzaW5nIHRoZSBjcy5wbyBmaWxlIGdlbmVyYXRlcyBhbiBlcnJvci4gKFJhaHVsIEFncmF3YWwpCitTb2x1dGlvbjogICBGaXggdGhlIHByaW50ZiBmb3JtYXQgY2hhcmFjdGVycyBpbiB0aGUgdHJhbnNsYXRpb24uCitGaWxlczoJICAgIHNyYy9wby9jcy5wbworCitQYXRjaCA2LjEuMjk2CitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiBjYW5jZWxsaW5nIHRoZSBmb250IGRpYWxvZyAnZ3VpZm9udCcgcmVtYWlucyBzZXQgdG8KKwkgICAgIioiLgorU29sdXRpb246ICAgUmVzdG9yZSB0aGUgb2xkIHZhbHVlIG9mICdndWlmb250JyAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xLjI5NworUHJvYmxlbTogICAgIm1ha2UgdGVzdCIgZmFpbHMgaW4gdGVzdDYgaW4gYW4gVVRGLTggZW52aXJvbm1lbnQuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBCZWZvcmUgZXhlY3V0aW5nIHRoZSBCdWZSZWFkUG9zdCBhdXRvY29tbWFuZHMgc2F2ZSB0aGUgY3VycmVudAorCSAgICBmaWxlZW5jb2RpbmcsIHNvIHRoYXQgdGhlIGZpbGUgaXNuJ3QgbWFya2VkIGNoYW5nZWQuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMjk4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHNpZ25zIGFuZCB0aGUgZmlyc3QgbGluZSBvZiBhIGNsb3NlZCBmb2xkIGhhcyBhIHNpZ24KKwkgICAgaXQgY2FuIGJlIHJlZHJhd24gYXMgaWYgdGhlIGZvbGQgd2FzIG9wZW4uICAoS2FtaWwgQnVyenluc2tpKQorU29sdXRpb246ICAgRG9uJ3QgcmVkcmF3IGEgc2lnbiBpbnNpZGUgYSBjbG9zZWQgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4yOTkKK1Byb2JsZW06ICAgICI6ZWRpdCArc2V0XCBybyBmaWxlIiBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBIYWx2ZSB0aGUgbnVtYmVyIG9mIGJhY2tzbGFzaGVzIGluIHRoZSAiK2NtZCIgYXJndW1lbnQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4zMDAgKGV4dHJhKQorUHJvYmxlbTogICAgSGFuZGxpbmcgb2YgRVRPX0lHTk9SRUxBTkdVQUdFIGlzIGNvbmZ1c2luZy4KK1NvbHV0aW9uOiAgIENsZWFuIHVwIHRoZSBoYW5kbGluZyBvZiBFVE9fSUdOT1JFTEFOR1VBR0UuIChHbGVubiBNYXluYXJkKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMS4zMDEgKGV4dHJhKQorUHJvYmxlbTogICAgRnJlbmNoIHRyYW5zbGF0aW9uIG9mIGZpbGUtc2F2ZSBkaWFsb2cgZG9lc24ndCBzaG93IGZpbGUgbmFtZS4KK1NvbHV0aW9uOiAgIEluc2VydCBhIHN0YXIgaW4gdGhlIHByaW50ZiBzdHJpbmcuIChGcmFuY29pcyBUZXJyb3QpCitGaWxlczoJICAgIHNyYy9wby9mci5wbworCitQYXRjaCA2LjEuMzAyCitQcm9ibGVtOiAgICBDb3VudGluZyBsaW5lcyBvZiB0aGUgVmlzdWFsIGFyZWEgaXMgaW5jb3JyZWN0IGZvciBjbG9zZWQgZm9sZHMuCisJICAgIChNaWtvbGFqIE1hY2hvd3NraSkKK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIHN0YXJ0IGFuZCBlbmQgZm9yIHRoZSBjbG9zZWQgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS4zMDMgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIFRvcC9Cb3R0b20vQWxsIHRleHQgZG9lcyBub3QgYWx3YXlzIGZpdCBpbiB0aGUgcnVsZXIgd2hlbgorCSAgICB0cmFuc2xhdGVkIHRvIEphcGFuZXNlLiAgUHJvYmxlbSB3aXRoIGEgY2hhcmFjdGVyIGJlaW5nIHdpZGVyIHdoZW4KKwkgICAgaW4gYSBib2xkIGZvbnQuCitTb2x1dGlvbjogICBVc2UgRVRPX1BEWSB0byBzcGVjaWZ5IHRoZSB3aWR0aCBvZiBlYWNoIGNoYXJhY3Rlci4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuMzA0IChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMjkyKQorUHJvYmxlbTogICAgV2luMzI6IFBvc3RzY3JpcHQgaXMgYWx3YXlzIGVuYWJsZWQgaW4gdGhlIE1pbmdXIE1ha2VmaWxlLgorCSAgICBQYXRoZGVmLmMgaXNuJ3QgZ2VuZXJhdGVkIHByb3Blcmx5IHdpdGggTWFrZV9iYzUubWFrLiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorU29sdXRpb246ICAgQ2hhbmdlIGFuIGlmZGVmIHRvIGFuIGlmZXEuIChNYWRva2EgTWFjaGl0YW5pKQorCSAgICBVc2UgdGhlIEJvcmxhbmQgbWFrZSByZWRpcmVjdGlvbiB0byBnZW5lcmF0ZSBwYXRoZGVmLmMuIChNYXVyaWNlCisJICAgIEJhcm51bSkKK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haywgc3JjL01ha2VfbWluZy5tYWsKKworUGF0Y2ggNi4xLjMwNQorUHJvYmxlbTogICAgV2hlbiAndmVyYm9zZScgaXMgMTQgb3IgaGlnaGVyLCBhIGZ1bmN0aW9uIGNhbGwgbWF5IGNhdXNlIHJlYWRpbmcKKwkgICAgdW5pbml0aWFsaXplZCBkYXRhLiAoV2FsdGVyIEJyaXNjb2UpCitTb2x1dGlvbjogICBDaGVjayBmb3IgZW5kLW9mLXN0cmluZyBpbiB0cnVuY19zdHJpbmcoKS4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjEuMzA2CitQcm9ibGVtOiAgICBUaGUgQUlYIFZpc3VhbEFnZSBjYyBjb21waWxlciBkb2Vzbid0IGRlZmluZSBfX1NURENfXy4KK1NvbHV0aW9uOiAgIFVzZSBfX0VYVEVOREVEX18gbGlrZSBfX1NURENfXy4gKEplc3MgVGhyeXNvZWUpCitGaWxlczoJICAgIHNyYy9vc191bml4LmgKKworUGF0Y2ggNi4xLjMwNworUHJvYmxlbTogICAgV2hlbiBhIGRvdWJsZS1ieXRlIGNoYXJhY3RlciBoYXMgYW4gaWxsZWdhbCB0YWlsIGJ5dGUgdGhlIGRpc3BsYXkKKwkgICAgaXMgbWVzc2VkIHVwLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgRHJhdyAiWFgiIGluc3RlYWQgb2YgdGhlIHdyb25nIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4zMDgKK1Byb2JsZW06ICAgIENhbid0IHJlc2V0IHRoZSBWaXN1YWwgbW9kZSByZXR1cm5lZCBieSB2aXN1YWxtb2RlKCkuCitTb2x1dGlvbjogICBVc2UgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gdmlzdWFsbW9kZSgpLiAoQ2hhcmxlcyBDYW1wYmVsbCkKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZXZhbC50eHQsIHNyYy9ldmFsLmMsIHNyYy9ub3JtYWwuYywKKwkgICAgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjEuMzA5CitQcm9ibGVtOiAgICBUaGUgdHV0b3IgZG9lc24ndCBzZWxlY3QgR2VybWFuIGlmIHRoZSBsb2NhbGUgbmFtZSBpcworCSAgICAiR2VybWFuX0dlcm1hbnkuMTI1MiIuIChKb2FjaGltIEhvZm1hbm4pCitTb2x1dGlvbjogICBDaGVjayBmb3IgIkdlcm1hbiIgaW4gdGhlIGxvY2FsZSBuYW1lLiAgQWxzbyBjaGVjayBmb3IKKwkgICAgIi5nZSIuICBBbmQgaW5jbHVkZSB0aGUgR2VybWFuIGFuZCBHcmVlayB0dXRvcnMuCitGaWxlczoJICAgIHJ1bnRpbWUvdHV0b3IvdHV0b3IuZGUsIHJ1bnRpbWUvdHV0b3IvdHV0b3IudmltLAorCSAgICBydW50aW1lL3R1dG9yL3R1dG9yLmdyLCBydW50aW1lL3R1dG9yL3R1dG9yLmdyLmNwNzM3CisKK1BhdGNoIDYuMS4zMTAgKGRlcGVuZHMgb24gNi4xLjMwNykKK1Byb2JsZW06ICAgIEFsbCBkb3VibGUtYnl0ZSBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgYXMgIlhYIi4KK1NvbHV0aW9uOiAgIFVzZSAiPj0gMzIiIGluc3RlYWQgb2YgIjwgMzIiLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS4zMTEgKGV4dHJhKQorUHJvYmxlbTogICAgVk1TOiBwYXRoIGluIHdpbmRvdyB0aXRsZSBkb2Vzbid0IGluY2x1ZGUgbmVjZXNzYXJ5IHNlcGFyYXRvci4KKwkgICAgZmlsZSB2ZXJzaW9uIGRvZXNuJ3QgYWx3YXlzIHdvcmsgcHJvcGVybHkgd2l0aCBVbml4LgorCSAgICBDcmFzaGVzIGJlY2F1c2Ugb2YgbWVtb3J5IG92ZXJ3cml0ZSBpbiBHVUkuCisJICAgIERpZG4ndCBhbHdheXMgaGFuZGxlIGZpbGVzIHdpdGggbG93ZXJjYXNlIGFuZCBjb3JyZWN0IHBhdGguCitTb2x1dGlvbjogICBGaXggdGhlIHByb2JsZW1zLiAgUmVtb3ZlIHVubmVjZXNzYXJ5IGZpbGUgbmFtZSB0cmFuc2xhdGlvbnMuCisJICAgIChab2x0YW4gQXJwYWRmZnkpCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMyLmMsIHNyYy9maWxlaW8uYywgc3JjL21lbWxpbmUuYywKKwkgICAgc3JjL21pc2MxLmMsIHNyYy9taXNjMi5jLCBzcmMvb3NfdW5peC5jLCBzcmMvb3Nfdm1zLmMsIHNyYy90YWcuYworCitQYXRjaCA2LjEuMzEyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nICI6c2lsZW50IiBkZWJ1Z2dpbmcgaXMgYWxzbyBkb25lIHNpbGVudGx5LgorU29sdXRpb246ICAgRGlzYWJsZSBzaWxlbmNlIHdoaWxlIGF0IHRoZSBkZWJ1ZyBwcm9tcHQuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS4zMTMKK1Byb2JsZW06ICAgIFdoZW4gYSAiOmRyb3AgZm5hbWUiIGNvbW1hbmQgaXMgdXNlZCBhbmQgImZuYW1lIiBpcyBvcGVuIGluCisJICAgIGFub3RoZXIgd2luZG93LCBpdCBpcyBhbHNvIG9wZW5lZCBpbiB0aGUgY3VycmVudCB3aW5kb3cuCitTb2x1dGlvbjogICBDaGFuZ2UgdG8gdGhlIHdpbmRvdyB3aXRoICJmbmFtZSIgaW5zdGVhZC4KKwkgICAgRG9uJ3QgcmVkZWZpbmUgdGhlIGFyZ3VtZW50IGxpc3Qgd2hlbiBkcm9wcGluZyBvbmx5IG9uZSBmaWxlLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy93aW5kb3dzLnR4dCwgc3JjL2V4X2NtZHMyLmMsIHNyYy9leF9jbWRzLmMsCisJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvcHJvdG8vZXhfY21kczIucHJvLCBzcmMvcHJvdG8vZXhfZG9jbWQucHJvCisKK1BhdGNoIDYuMS4zMTQgKGRlcGVuZHMgb24gNi4xLjEyNikKK1Byb2JsZW06ICAgIE1pc3NpbmcgYmFja3NsYXNoIGluICJHZW5lcmljIENvbmZpZyBmaWxlIiBzeW50YXggbWVudS4KK1NvbHV0aW9uOiAgIEluc2VydCB0aGUgYmFja3NsYXNoLiAoWmFrIEJlY2spCitGaWxlczoJICAgIHJ1bnRpbWUvbWFrZW1lbnUudmltLCBydW50aW1lL3N5bm1lbnUudmltCisKK1BhdGNoIDYuMS4zMTUgKGV4dHJhKQorUHJvYmxlbTogICAgQSB2ZXJ5IGxvbmcgaG9zdG5hbWUgbWF5IGxlYWQgdG8gYW4gdW50ZXJtaW5hdGVkIHN0cmluZy4gIEZhaWxpbmcKKwkgICAgdG8gb2J0YWluIGEgaG9zdG5hbWUgbWF5IHJlc3VsdCBpbiBnYXJiYWdlLiAgKFdhbHRlciBCcmlzY29lKQorU29sdXRpb246ICAgQWRkIGEgTlVMIGF0IHRoZSBlbmQgb2YgdGhlIGhvc3RuYW1lIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL29zX21hYy5jLCBzcmMvb3NfbXNkb3MuYywgc3JjL29zX3VuaXguYywgc3JjL29zX3dpbjE2LmMsCisJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMS4zMTYKK1Byb2JsZW06ICAgIFdoZW4gZXhpdGluZyB3aXRoICJ3cSIgYW5kIHRoZXJlIGlzIGEgaGlkZGVuIGJ1ZmZlciwgYWZ0ZXIgdGhlCisJICAgICJmaWxlIGNoYW5nZWQiIGRpYWxvZyB0aGVyZSBpcyBhIHdhcm5pbmcgZm9yIGEgY2hhbmdlZCBidWZmZXIuCisJICAgIChBaml0IFRoYWtrYXIpCitTb2x1dGlvbjogICBEbyB1cGRhdGUgdGhlIGJ1ZmZlciB0aW1lc3RhbXBzIHdoZW4gZXhpdGluZy4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS4zMTcKK1Byb2JsZW06ICAgIENsb3NpbmcgYSB3aW5kb3cgbWF5IGNhdXNlIHNvbWUgb2YgdGhlIHJlbWFpbmluZyB3aW5kb3dzIHRvIGJlCisJICAgIHBvc2l0aW9uZWQgd3JvbmcgaWYgdGhlcmUgaXMgYSBtaXggb2YgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKKwkgICAgc3BsaXRzLiAoU3RlZmFuIEluZ2kgVmFsZGltYXJzc29uKQorU29sdXRpb246ICAgVXBkYXRlIHRoZSBmcmFtZSBzaXplcyBiZWZvcmUgdXBkYXRpbmcgdGhlIHdpbmRvdyBwb3NpdGlvbnMuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjEuMzE4CitQcm9ibGVtOiAgICBhdXRvL3BhdGhkZWYuYyBjYW4gaW5jbHVkZSB3cm9uZyBxdW90ZXMgd2hlbiBhIGNvbXBpbGVyIGZsYWcKKwkgICAgaW5jbHVkZXMgcXVvdGVzLgorU29sdXRpb246ICAgUHV0IGEgYmFja3NsYXNoIGJlZm9yZSB0aGUgcXVvdGVzIGluIGNvbXBpbGVyIGZsYWdzLiAoU2hpbnJhIEFpZGEpCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjEuMzE5IChkZXBlbmRzIG9uIDYuMS4yNzYpCitQcm9ibGVtOiAgICBVc2luZyAiLS1yZW1vdGUgK2NtZCBmaWxlIiBkb2VzIG5vdCBleGVjdXRlICJjbWQiLgorU29sdXRpb246ICAgQ2FsbCBpbnB1dHJlc3RvcmUoKSBpbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUgYXMgaW5wdXRzYXZlKCksCisJICAgIG90aGVyd2lzZSBpdCB3aWxsIG5ldmVyIGdldCBleGVjdXRlZC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuMzIwIChkZXBlbmRzIG9uIDYuMS4zMTMpCitQcm9ibGVtOiAgICBXaGVuIGEgIjpkcm9wIG9uZVwgZmlsZSIgY29tbWFuZCBpcyB1c2VkIHRoZSBmaWxlICJvbmVcIGZpbGUiIGlzCisJICAgIG9wZW5lZCwgdGhlIGJhY2tzbGFzaCBpcyBub3QgcmVtb3ZlZC4gKFRhcm8gTXVyYW9rYSkKK1NvbHV0aW9uOiAgIEhhbmRsZSBiYWNrc2xhc2hlcyBjb3JyZWN0bHkuICBBbHdheXMgc2V0IHRoZSBhcmd1bWVudCBsaXN0IHRvCisJICAgIGtlZXAgaXQgc2ltcGxlLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy93aW5kb3dzLnR4dCwgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuMzIxCitQcm9ibGVtOiAgICBXaGVuICdtb3VzZScgaW5jbHVkZXMgJ24nIGJ1dCBub3QgJ3YnLCBkb24ndCBhbGxvdyBzdGFydGluZyBWaXN1YWwKKwkgICAgbW9kZSB3aXRoIHRoZSBtb3VzZS4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSBNT1VTRV9NQVlfVklTIHdoZW4gdGhlcmUgaXMgbm8gJ3YnIGluICdtb3VzZScuIChGbGVtbWluZworCSAgICBNYWRzZW4pCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjEuMzIyIChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMzE1KQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBob3N0IG5hbWUgaXMgYWx3YXlzICJQQyAiIHBsdXMgdGhlIHJlYWwgaG9zdCBuYW1lLgorU29sdXRpb246ICAgRG9uJ3QgaW5zZXJ0ICJQQyAiIGJlZm9yZSB0aGUgaG9zdCBuYW1lLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjEuMzIzCitQcm9ibGVtOiAgICAiOnJlZ2lzdGVycyIgZG9lc24ndCBzdG9wIGxpc3RpbmcgZm9yIGEgInEiIGF0IHRoZSBtb3JlIHByb21wdC4KKwkgICAgKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGludGVycnVwdCBhbmQgZ290X2ludC4KK0ZpbGVzOgkgICAgc3JjL29wcy5jLCBzcmMvcHJvdG8vb3BzLnBybworCitQYXRjaCA2LjEuMzI0CitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIGRyYWdnaW5nIGEgdmVydGljYWwgc2VwYXJhdG9yIHdoZW4gPExlZnRNb3VzZT4gaXMKKwkgICAgcmVtYXBwZWQgdG8ganVtcCB0byBhbm90aGVyIHdpbmRvdy4KK1NvbHV0aW9uOiAgIFBhc3MgdGhlIHdpbmRvdyBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiBkb2luZyB0aGUgZHJhZ2dpbmcgaW5zdGVhZAorCSAgICBvZiBhbHdheXMgdXNpbmcgdGhlIGN1cnJlbnQgd2luZG93LiAoRGFuaWVsIEVsc3RuZXIpCisJICAgIEFsc28gZml4IHRoYXQgc3RhcnRpbmcgYSBkcmFnIGNoYW5nZXMgd2luZG93IGZvY3VzLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by93aW5kb3cucHJvLCBzcmMvdWkuYywgc3JjL3ZpbS5oLAorCSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjMyNQorUHJvYmxlbTogICAgU2hpZnQtVGFiIGlzIG5vdCBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQgaW4gYW4geHRlcm0uCitTb2x1dGlvbjogICBBZGQgPEVzYz5bWiBhcyB0aGUgdGVybWNhcCBjb2RlLiAoQW5kcmV3IFBpbWxvdHQpCitGaWxlczoJICAgIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4xLjMyNgorUHJvYmxlbTogICAgVXNpbmcgYSBzZWFyY2ggcGF0dGVybiBtYXkgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgZGF0YSAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorU29sdXRpb246ICAgSW5pdGlhbGl6ZSBwb2ludGVycyB0byBOVUxMLgorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4xLjMyNworUHJvYmxlbTogICAgV2hlbiBvcGVuaW5nIHRoZSAibWJ5dGUudHh0IiBoZWxwIGZpbGUgdGhlIHV0Zi04IGNoYXJhY3RlcnMgYXJlCisJICAgIHVucmVhZGFibGUsIGJlY2F1c2UgdGhlIGZpbGVlbmNvZGluZyBpcyBmb3JjZWQgdG8gYmUgbGF0aW4xLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHV0Zi04IGVuY29kaW5nIGZpcnN0IGluIGhlbHAgZmlsZXMuIChEYW5pZWwgRWxzdG5lcikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbWJ5dGUudHh0LCBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjMyOAorUHJvYmxlbTogICAgUHJvdG90eXBlIGZvciBlbmNfY2Fub25fc2VhcmNoKCkgaXMgbWlzc2luZy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgcHJvdG90eXBlLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS4zMjkKK1Byb2JsZW06ICAgIFdoZW4gZWRpdGluZyBhIGZpbGUgImEgYiBjIiByZXBsYWNpbmcgIiUiIGluICI6Q21kICUiIG9yICI6bmV4dCAlIgorCSAgICBkb2VzIG5vdCB3b3JrIHByb3Blcmx5LiAgKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgQWx3YXlzIGVzY2FwZSBzcGFjZXMgd2hlbiBleHBhbmRpbmcgIiUiLiAgRG9uJ3Qgc3BsaXQgYXJndW1lbnQgZm9yCisJICAgIDxmLWFyZ3M+IGluIGEgdXNlciBjb21tYW5kIHdoZW4gb25seSBvbmUgYXJndW1lbnQgaXMgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjMzMAorUHJvYmxlbTogICAgR1RLLCBNb3RpZiBhbmQgQXRoZW5hOiBLZXlwYWQga2V5cyBwcm9kdWNlIHRoZSBzYW1lIGNvZGUgYXMKKwkgICAgbm9uLWtleXBhZCBrZXlzLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBtYXAgdGhlbSBzZXBhcmF0ZWx5LgorU29sdXRpb246ICAgVXNlIGRpZmZlcmVudCB0ZXJtY2FwIGNvZGVzIGZvciB0aGUga2V5cGFkIGtleXMuIChOZWlsIEJpcmQpCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZ3VpX3gxMS5jCisKK1BhdGNoIDYuMS4zMzEKK1Byb2JsZW06ICAgIFdoZW4gdHJhbnNsYXRpbmcgdGhlIGhlbHAgZmlsZXMsICJMT0NBTCBBRERJVElPTlMiIG5vIGxvbmdlciBtYXJrcworCSAgICB0aGUgc3BvdCB3aGVyZSBoZWxwIGZpbGVzIGZyb20gcGx1Z2lucyBhcmUgdG8gYmUgbGlzdGVkLgorU29sdXRpb246ICAgQWRkIGEgImxvY2FsLWFkZGl0aW9ucyIgdGFnIGFuZCB1c2UgdGhhdCB0byBmaW5kIHRoZSByaWdodCBzcG90LgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9oZWxwLnR4dCwgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuMzMyIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBMb2FkaW5nIFBlcmwgZHluYW1pY2FsbHkgZG9lc24ndCB3b3JrIHdpdGggUGVybCA1LjguCisJICAgIFBlcmwgNS44IGFsc28gZG9lcyBub3Qgd29yayB3aXRoIEN5Z3dpbiBhbmQgTWluZy4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgZnVuY3Rpb24gY2FsbHMuIChUYXJvIE11cmFva2EpCisJICAgIEFkanVzdCB0aGUgY3lnIGFuZCBtaW5nIG1ha2VmaWxlcy4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL01ha2VfY3lnLm1haywgc3JjL01ha2VfbWluZy5tYWssIHNyYy9NYWtlX212Yy5tYWssCisJICAgIHNyYy9pZl9wZXJsLnhzCisKK1BhdGNoIDYuMS4zMzMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IENhbid0IGhhbmRsZSBVbmljb2RlIHRleHQgb24gdGhlIGNsaXBib2FyZC4KKwkgICAgQ2FuJ3QgcGFzcyBOVUwgYnl0ZSwgaXQgYmVjb21lcyBhIGxpbmUgYnJlYWsuICAoQnJ1Y2UgRGVWaXNzZXIpCitTb2x1dGlvbjogICBTdXBwb3J0IFVuaWNvZGUgZm9yIHRoZSBjbGlwYm9hcmQgKFJvbiBBYXJvbiBhbmQgR2xlbm4gTWF5bmFyZCkKKwkgICAgQWxzbyBzdXBwb3J0IGNvcHkvcGFzdGUgb2YgTlVMIGJ5dGVzLgorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYywgc3JjL29zX3dpbjE2LmMgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4xLjMzNCAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjMwMykKK1Byb2JsZW06ICAgIFByb2JsZW0gd2l0aCBkcmF3aW5nIEhlYnJldyBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgT25seSB1c2UgRVRPX1BEWSBmb3IgV2luZG93cyBOVCBhbmQgdGhlIGxpa2UuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjMzNSAoZXh0cmEpCitQcm9ibGVtOiAgICBGYWlsdXJlIG9mIG9idGFpbmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uIGFuZCB3aW5kb3cgc2l6ZSBpcworCSAgICBpZ25vcmVkLgorU29sdXRpb246ICAgUmVtb3ZlIGEgc2VtaWNvbG9uIGFmdGVyIGFuICJpZiIuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuMzM2IChleHRyYSkKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIHVzZSBvZiBmdW5jdGlvbiBwcm90b3R5cGVzIG9mIHNtc2coKS4KK1NvbHV0aW9uOiAgIERlZmluZSBIQVZFX1NUREFSR19ILiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5oCisKK1BhdGNoIDYuMS4zMzcKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgImZpbmlzaCIgaW4gZGVidWcgbW9kZSBpbiBmdW5jdGlvbiBCKCkgZm9yICI6Y2FsbAorCSAgICBBKEIoKSkiIGRvZXMgbm90IHN0b3AgYWZ0ZXIgQigpIGlzIGZpbmlzaGVkLgorU29sdXRpb246ICAgSW5jcmVhc2UgZGVidWdfbGV2ZWwgd2hpbGUgZXZhbHVhdGluZyBhIGZ1bmN0aW9uLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuMzM4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgbWVudSB0aGF0IGNoZWNrcyBvdXQgdGhlIGN1cnJlbnQgZmlsZSBmcm9tIEluc2VydAorCSAgICBtb2RlLCB0aGVyZSBpcyBubyB3YXJuaW5nIGZvciB0aGUgY2hhbmdlZCBmaWxlIHVudGlsIGV4aXRpbmcKKwkgICAgSW5zZXJ0IG1vZGUuICAoU3Jpa2FudGggU2Fua2FyYW4pCitTb2x1dGlvbjogICBBZGQgYSBjaGVjayBmb3IgbmVlZF9jaGVja190aW1lc3RhbXBzIGluIHRoZSBJbnNlcnQgbW9kZSBsb29wLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMS4zMzkKK1Byb2JsZW06ICAgIENvbXBsZXRpb24gZG9lc24ndCBhbGxvdyAiZzoiIGluICI6bGV0IGc6ZGlkXzxUYWI+Ii4gKEJlbmppCisJICAgIEZpc2hlcikKK1NvbHV0aW9uOiAgIFJldHVybiAiZzp2YXIiIGZvciBnbG9iYWwgdmFyaWFibGVzIHdoZW4gdGhhdCBpcyB3aGF0IGlzIGJlaW5nCisJICAgIGV4cGFuZGVkLiAoRmxlbW1pbmcgTWFkc2VuKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMS4zNDAgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS4zMzIpCitQcm9ibGVtOiAgICBXaW4zMjogQ2FuJ3QgY29tcGlsZSB0aGUgUGVybCBpbnRlcmZhY2Ugd2l0aCBubWFrZS4KK1NvbHV0aW9uOiAgIERvbid0IGNvbXBhcmUgdGhlIHZlcnNpb24gbnVtYmVyIGFzIGEgc3RyaW5nIGJ1dCBhcyBhIG51bWJlci4KKwkgICAgKEp1ZXJnZW4gS3JhZW1lcikKK0ZpbGVzOgkgICAgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjEuMzQxCitQcm9ibGVtOiAgICBJbiBJbnNlcnQgbW9kZSB3aXRoICdyaWdodGxlZnQnIHNldCB0aGUgY3Vyc29yIGlzIGRyYXduIGhhbGZ3YXkgYQorCSAgICBkb3VibGUtd2lkZSBjaGFyYWN0ZXIuICBGb3IgQ1RSTC1SIGFuZCBDVFJMLUsgaW4gSW5zZXJ0IG1vZGUgdGhlICIKKwkgICAgb3IgPyBpcyBub3QgZGlzcGxheWVkLgorU29sdXRpb246ICAgRHJhdyB0aGUgY3Vyc29yIGluIHRoZSBuZXh0IGNoYXJhY3RlciBjZWxsLiAgRGlzcGxheSB0aGUgIiBvciA/CisJICAgIG92ZXIgdGhlIHJpZ2h0IGhhbGYgb2YgdGhlIGRvdWJsZS13aWRlIGNoYXJhY3Rlci4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykgIEFsc28gZml4IHRoYXQgY2FuY2VsbGluZyBhIGRpZ3JhcGggZG9lc24ndCByZWRyYXcKKwkgICAgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgY29ycmVjdGx5LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvZ3VpLmMsIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMS4zNDIgKGRlcGVuZHMgb24gNi4xLjM0MSkKK1Byb2JsZW06ICAgIFdpdGggJ3JpZ2h0bGVmdCcgc2V0IHR5cGluZyAiYyIgb24gYSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIgY2F1c2VzCisJICAgIHRoZSBjdXJzb3IgdG8gYmUgZGlzcGxheWVkIG9uZSBjZWxsIHRvIHRoZSBsZWZ0LgorU29sdXRpb246ICAgRHJhdyB0aGUgY3Vyc29yIGluIHRoZSBuZXh0IGNoYXJhY3RlciBjZWxsLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMS4zNDMgKGRlcGVuZHMgb24gNi4xLjM0MikKK1Byb2JsZW06ICAgIENhbm5vdCBjb21waWxlIHdpdGggdGhlICttdWx0aV9ieXRlIGZlYXR1cmUgYnV0IHdpdGhvdXQgK3JpZ2h0bGVmdC4KKwkgICAgQ2Fubm90IGNvbXBpbGUgd2l0aG91dCB0aGUgR1VJLgorU29sdXRpb246ICAgRml4IHRoZSAjaWZkZWZzLiAgKHBhcnRseSBieSBOYW0gU3VuZ0h5dW4pCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL21ieXRlLmMsIHNyYy91aS5jCisKK1BhdGNoIDYuMS4zNDQKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjpzaWxlbnQgZmlsZXR5cGUiIHRoZSBvdXRwdXQgaXMgc3RpbGwgcHV0IGluIHRoZQorCSAgICBtZXNzYWdlIGhpc3RvcnkuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIERvbid0IGFkZCBtZXNzYWdlcyBpbiB0aGUgaGlzdG9yeSB3aGVuICI6c2lsZW50IiBpcyB1c2VkLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMS4zNDUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6ICdpbWRpc2FibGUnIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIE1ha2UgJ2ltZGlzYWJsZScgd29yay4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuMzQ2CitQcm9ibGVtOiAgICBUaGUgc2Nyb2xsIHdoZWVsIGNhbiBvbmx5IHNjcm9sbCB0aGUgY3VycmVudCB3aW5kb3cuCitTb2x1dGlvbjogICBNYWtlIHRoZSBzY3JvbGwgd2hlZWwgc2Nyb2xsIHRoZSB3aW5kb3cgdGhhdCB0aGUgbW91c2UgcG9pbnRzIHRvLgorCSAgICAoRGFuaWVsIEVsc3RuZXIpCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9ndWkuYywgc3JjL25vcm1hbC5jLCBzcmMvdGVybS5jCisKK1BhdGNoIDYuMS4zNDcKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgY3Njb3BlIHRvIGxpc3QgbWF0Y2hpbmcgdGFncywgdGhlIGxpc3RlZCBudW1iZXIgaXMKKwkgICAgc29tZXRpbWVzIG5vdCBlcXVhbCB0byB3aGF0IGNzY29wZSB1c2VzLiAoVmlocmVuIE1pbGV2KQorU29sdXRpb246ICAgRm9yIGNzY29wZSB0YWdzIHVzZSBvbmx5IG9uZSB0YWJsZSwgZG9uJ3QgZ2l2ZSB0YWdzIGluIHRoZSBjdXJyZW50CisJICAgIGZpbGUgYSBoaWdoZXIgcHJpb3JpdHkuCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA2LjEuMzQ4CitQcm9ibGVtOiAgICBXaWxkbW9kZSB3aXRoIHdpbGRtZW51OiAiOnNldCB3aWxkbW9kZT1saXN0LGZ1bGwiLCAiOmNvbG9yc2NoZW1lCisJICAgIDx0YWI+IiByZXN1bHRzIGluICJ6ZWxsbmVyIiBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBlbnRyeS4gKEFuYW5kCisJICAgIEhhcmloYXJhbikKK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgRXhwYW5kT25lKCkgZnJvbSBnbG9icGF0aCgpLiAoRmxlbW1pbmcgTWFkc2VuKQorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjEuMzQ5CitQcm9ibGVtOiAgICAidmltIC0tc2VydmVybGlzdCIgd2hlbiBubyBzZXJ2ZXIgd2FzIGV2ZXIgc3RhcnRlZCBnaXZlcyBhbiBlcnJvcgorCSAgICBtZXNzYWdlIHdpdGhvdXQgIlxuIi4KKwkgICAgInZpbSAtLXNlcnZlcmxpc3QiIGRvZXNuJ3QgZXhpdCB3aGVuIHRoZSBYIHNlcnZlciBjYW4ndCBiZQorCSAgICBjb250YWN0ZWQsIGl0IHN0YXJ0cyBWaW0gdW5leHBlY3RlZGx5LiAoUmljYXJkbyBTaWduZXMpCitTb2x1dGlvbjogICBEb24ndCBnaXZlIGFuIGVycm9yIHdoZW4gbm8gVmltIHNlcnZlciB3YXMgZXZlciBzdGFydGVkLgorCSAgICBUcmVhdCBmYWlsaW5nIG9mIG9wZW5pbmcgdGhlIGRpc3BsYXkgZXF1YWwgdG8gZXJyb3JzIGluc2lkZSB0aGUKKwkgICAgcmVtb3RlKigpIGZ1bmN0aW9ucy4gKEZsZW1taW5nIE1hZHNlbikKK0ZpbGVzOgkgICAgc3JjL2lmX3hjbWRzcnYuYywgc3JjL21haW4uYworCitQYXRjaCA2LjEuMzUwCitQcm9ibGVtOiAgICBXaGVuIGVudGVyaW5nIGEgYnVmZmVyIHdpdGggIjpibmV4dCIgZm9yIHRoZSBmaXJzdCB0aW1lLCB1c2luZyBhbgorCSAgICBhdXRvY29tbWFuZCB0byByZXN0b3JlIHRoZSBsYXN0IHVzZWQgY3Vyc29yIHBvc2l0aW9uIGRvZXNuJ3Qgd29yay4KKwkgICAgKFBhb2xvIEdpYXJ1c3NvKQorU29sdXRpb246ICAgRG9uJ3QgdXNlIHRoZSBsYXN0IGtub3duIGN1cnNvciBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBWaW0KKwkgICAgaW52b2NhdGlvbiBpZiBhbiBhdXRvY29tbWFuZCBjaGFuZ2VkIHRoZSBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4zNTEgKGRlcGVuZHMgb24gNi4xLjM0OSkKK1Byb2JsZW06ICAgIENyYXNoIHdoZW4gc3RhcnRpbmcgVmltIHRoZSBmaXJzdCB0aW1lIGluIGFuIFggc2VydmVyLiAoSm9obgorCSAgICBNY0dvd2FuKQorU29sdXRpb246ICAgRG9uJ3QgY2FsbCB4RnJlZSgpIHdpdGggYSBmaXhlZCBzdHJpbmcuCitGaWxlczoJICAgIHNyYy9pZl94Y21kc3J2LmMKKworUGF0Y2ggNi4xLjM1MiAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjM0NSkKK1Byb2JsZW06ICAgIFdpbjMyOiBDcmFzaCB3aGVuIHNldHRpbmcgImltZGlzYWJsZSIgaW4gX3ZpbXJjLgorU29sdXRpb246ICAgRG9uJ3QgY2FsbCBJTUUgZnVuY3Rpb25zIHdoZW4gaW1tMzIuZGxsIHdhcyBub3QgbG9hZGVkICh5ZXQpLgorCSAgICBBbHNvIGFkZCB0eXBlY2FzdHMgdG8gYXZvaWQgQ29tcGlsZXIgd2FybmluZ3MgZm9yCisJICAgIEltbUFzc29jaWF0ZUNvbnRleHQoKSBhcmd1bWVudC4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuMzUzIChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMzM0KQorUHJvYmxlbTogICAgUHJvYmxlbSB3aXRoIGRyYXdpbmcgQXJhYmljIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBEb24ndCB1c2UgRVRPX1BEWSwgZG8gdXNlIHBhZGRpbmcuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjM1NCAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjMzMykKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3MgOTg6IE5vdGVwYWQgY2FuJ3QgcGFzdGUgdGV4dCBjb3BpZWQgZnJvbSBWaW0gd2hlbgorCSAgICAnZW5jb2RpbmcnIGlzICJ1dGYtOCIuCitTb2x1dGlvbjogICBBbHNvIG1ha2UgQ0ZfVEVYVCBhdmFpbGFibGUgb24gdGhlIGNsaXBib2FyZC4gKFJvbiBBYXJvbikKK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4xLjM1NQorUHJvYmxlbTogICAgSW4gYSByZWdleHAgJ1xuJyB3aWxsIG5ldmVyIG1hdGNoIGFueXRoaW5nIGluIGEgc3RyaW5nLgorU29sdXRpb246ICAgTWFrZSAnXG4nIG1hdGNoIGEgbmV3bGluZSBjaGFyYWN0ZXIuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2VkaXQuYywgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMyLmMsCisJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2ZpbGVpby5jLCBzcmMvbWlzYzEuYywKKwkgICAgc3JjL29wdGlvbi5jLCBzcmMvb3NfbWFjLmMsIHNyYy9vc191bml4LmMsIHNyYy9xdWlja2ZpeC5jLAorCSAgICBzcmMvcmVnZXhwLmMsIHNyYy9zZWFyY2guYywgc3JjL3N5bnRheC5jLCBzcmMvdGFnLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjEuMzU2IChleHRyYSwgZGVwZW5kcyBvbiwgd2VsbCwgZWgsIHNldmVyYWwgb3RoZXJzKQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZ3MgZm9yIHVzaW5nIGNvbnZlcnRfc2V0dXAoKSBhbmQgYSBmZXcgb3RoZXIKKwkgICAgdGhpbmdzLgorU29sdXRpb246ICAgQWRkIHR5cGVjYXN0cy4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMsIHNyYy9vc19tc3dpbi5jLCBzcmMvcHJvdG8vb3Nfd2luMzIucHJvLCBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjEuMzU3CitQcm9ibGVtOiAgICBDUiBpbiB0aGUgcXVpY2tmaXggd2luZG93IGp1bXBzIHRvIHRoZSBlcnJvciB1bmRlciB0aGUgY3Vyc29yLCBidXQKKwkgICAgdGhpcyBkb2Vzbid0IHdvcmsgaW4gSW5zZXJ0IG1vZGUuIChTcmlrYW50aCBTYW5rYXJhbikKK1NvbHV0aW9uOiAgIEhhbmRsZSBDUiBpbiBJbnNlcnQgbW9kZSBpbiB0aGUgcXVpY2tmaXggd2luZG93LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMS4zNTgKK1Byb2JsZW06ICAgIFRoZSB0dXRvciBkb2Vzbid0IHNlbGVjdCBhbm90aGVyIGxvY2FsZSB2ZXJzaW9uIHByb3Blcmx5LgorU29sdXRpb246ICAgSW5zZXJ0IHRoZSAibGV0IiBjb21tYW5kLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBydW50aW1lL3R1dG9yL3R1dG9yLnZpbQorCitQYXRjaCA2LjEuMzU5IChleHRyYSkKK1Byb2JsZW06ICAgIE1hYyBDYXJib246IFZpbSBkb2Vzbid0IGdldCBmb2N1cyB3aGVuIHN0YXJ0ZWQgZnJvbSB0aGUgY29tbWFuZAorCSAgICBsaW5lLiAgQ3Jhc2ggd2hlbiB1c2luZyBob3Jpem9udGFsIHNjcm9sbCBiYXIuCitTb2x1dGlvbjogICBTZXQgVmltIGFzIHRoZSBmcm9udHByb2Nlc3MuICBGaXggc2Nyb2xsaW5nLiAgKFBldGVyIEN1Y2thKQorRmlsZXM6CSAgICBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDYuMS4zNjAgKGRlcGVuZHMgb24gNi4xLjM0MSkKK1Byb2JsZW06ICAgIEluIEluc2VydCBtb2RlIENUUkwtSyBFU0MgbWVzc2VzIHVwIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCisJICAgIChBbmRlcnMgSGVsbWVyc3NvbikKK1NvbHV0aW9uOiAgIFNhdmUgYWxsIGJ5dGVzIG9mIGEgY2hhcmFjdGVyIHdoZW4gZGlzcGxheWluZyBhIGNoYXJhY3RlcgorCSAgICB0ZW1wb3JhcmlseS4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYywgc3JjL3Byb3RvL3NjcmVlbi5wcm8sIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuMzYxCitQcm9ibGVtOiAgICBDYW5ub3QganVtcCB0byBhIGZpbGUgbWFyayB3aXRoICI6J00iLgorU29sdXRpb246ICAgQWxsb3cganVtcGluZyB0byBhbm90aGVyIGZpbGUgZm9yIGEgbWFyayBpbiBhbiBFeCBhZGRyZXNzIHdoZW4gaXQKKwkgICAgaXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIGNvbW1hbmQgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjM2MgorUHJvYmxlbTogICAgdGdldGVudCgpIG1heSByZXR1cm4gemVybyBmb3Igc3VjY2Vzcy4gdGdldGZsYWcoKSBtYXkgcmV0dXJuIC0xCisJICAgIGZvciBhbiBlcnJvci4KK1NvbHV0aW9uOiAgIENoZWNrIHRnZXRmbGFnKCkgZm9yIHJldHVybmluZyBhIHBvc2l0aXZlIHZhbHVlLiAgQWRkIGFuIGF1dG9jb25mCisJICAgIGNoZWNrIGZvciB0aGUgdmFsdWUgdGhhdCB0Z2V0ZW50KCkgcmV0dXJucy4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlnLmguaW4sIHNyYy9jb25maWd1cmUuaW4sIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4xLjM2MworUHJvYmxlbTogICAgYnl0ZTJsaW5lKCkgY2FuIHJldHVybiBvbmUgbW9yZSB0aGFuIHRoZSBudW1iZXIgb2YgbGluZXMuCitTb2x1dGlvbjogICBSZXR1cm4gLTEgaWYgdGhlIG9mZnNldCBpcyBvbmUgYnl0ZSBwYXN0IHRoZSBlbmQuCitGaWxlczoJICAgIHNyYy9tZW1saW5lLmMKKworUGF0Y2ggNi4xLjM2NAorUHJvYmxlbTogICAgVGhhdCB0aGUgRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCBldmVudCBuZXZlciBuZXN0cyBtYWtlcyBpdAorCSAgICBkaWZmaWN1bHQgdG8gcmVsb2FkIGEgZmlsZSBpbiBhIG5vcm1hbCB3YXkuCitTb2x1dGlvbjogICBBbGxvdyBuZXN0aW5nIGZvciB0aGUgRmlsZUNoYW5nZWRTaGVsbCBldmVudCBidXQgZG8gbm90IGFsbG93CisJICAgIHRyaWdnZXJpbmcgaXRzZWxmIGFnYWluLgorCSAgICBBbHNvIGF2b2lkIGF1dG9jb21tYW5kcyBmb3IgdGhlIGNtZGxpbmUgd2luZG93IGluIHJhcmUgY2FzZXMuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jLCBzcmMvZmlsZWlvLmMsIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjEuMzY1IChkZXBlbmRzIG9uIDYuMS4yMTcpCitQcm9ibGVtOiAgICBTZXR0aW5nIGEgYnJlYWtwb2ludCBpbiBhIHNvdXJjZWQgZmlsZSB3aXRoIGEgcmVsYXRpdmUgcGF0aCBuYW1lCisJICAgIGRvZXNuJ3Qgd29yay4gKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBFeHBhbmQgdGhlIGZpbGUgbmFtZSB0byBhIGZ1bGwgcGF0aC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4xLjM2NgorUHJvYmxlbTogICAgQ2FuJ3QgdXNlIFZpbSB3aXRoIE5ldGJlYW5zLgorU29sdXRpb246ICAgQWRkIHRoZSBOZXRiZWFucyBpbnRlcmZhY2UuICBJbmNsdWRlcyBzdXBwb3J0IGZvciBzaWduIGljb25zIGFuZAorCSAgICAiLWZnIiBhbmQgIi1iZyIgYXJndW1lbnRzIGZvciBHVEsuICBBZGQgdGhlICdhdXRvY2hkaXInCisJICAgIG9wdGlvbi4gIChHb3Jkb24gUHJpZXVyLCBHZW9yZ2UgSGVybmFuZGV6LCBEYXZlIFdlYXRoZXJmb3JkKQorCSAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGRpc3BsYXkgYm90aCBhIHNpZ24gd2l0aCBhIHRleHQgYW5kIG9uZSB3aXRoCisJICAgIGxpbmUgaGlnaGxpZ2h0aW5nIGluIHRoZSBzYW1lIGxpbmUuCisJICAgIEFkZCBzdXBwb3J0IGZvciBBZ2lkZSwgaW50ZXJmYWNlIHZlcnNpb24gMi4xLgorCSAgICBBbHNvIGZpeCB0aGF0IHdoZW4gJ2lza2V5d29yZCcgaW5jbHVkZXMgJz8nIHRoZSAiKiIgY29tbWFuZAorCSAgICBkb2Vzbid0IHdvcmsgcHJvcGVybHkgb24gYSB3b3JkIHRoYXQgaW5jbHVkZXMgIj8iIChCaWxsIE1jQ2FydGh5KToKKwkgICAgRG9uJ3QgZXNjYXBlICI/IiB0byAiXD8iIHdoZW4gc2VhcmNoaW5nIGZvcndhcmQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL01ha2VmaWxlLCBydW50aW1lL2RvYy9uZXRiZWFucy50eHQsCisJICAgIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0LCBydW50aW1lL2RvYy92YXJpb3VzLnR4dCwKKwkgICAgc3JjL01ha2VmaWxlLCBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9idWZmZXIuYywgc3JjL2NvbmZpZy5oLmluLAorCSAgICBzcmMvY29uZmlnLm1rLmluLCBzcmMvY29uZmlndXJlLmluLCBzcmMvZWRpdC5jLCBzcmMvZXhfY21kcy5jLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2ZlYXR1cmUuaCwgc3JjL2ZpbGVpby5jLCBzcmMvZ2xvYmFscy5oLAorCSAgICBzcmMvZ3VpLmMsIHNyYy9ndWlfYmV2YWwuYywgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9ndWlfeDExLmMsCisJICAgIHNyYy9tYWluLmMsIHNyYy9tZW1saW5lLmMsIHNyYy9taXNjMS5jLCBzcmMvbWlzYzIuYywgc3JjL21vdmUuYywKKwkgICAgc3JjL25iZGVidWcuYywgc3JjL25iZGVidWcuaCwgc3JjL25ldGJlYW5zLmMsIHNyYy9ub3JtYWwuYywKKwkgICAgc3JjL29wcy5jLCBzcmMvb3B0aW9uLmMsIHNyYy9vcHRpb24uaCwgc3JjL3Byb3RvL2J1ZmZlci5wcm8sCisJICAgIHNyYy9wcm90by9ndWlfYmV2YWwucHJvLCBzcmMvcHJvdG8vZ3VpX2d0a194MTEucHJvLAorCSAgICBzcmMvcHJvdG8vZ3VpX3gxMS5wcm8sIHNyYy9wcm90by9taXNjMi5wcm8sCisJICAgIHNyYy9wcm90by9uZXRiZWFucy5wcm8sIHNyYy9wcm90by9ub3JtYWwucHJvLCBzcmMvcHJvdG8vdWkucHJvLAorCSAgICBzcmMvcHJvdG8uaCwgc3JjL3NjcmVlbi5jLCBzcmMvc3RydWN0cy5oLCBzcmMvdWkuYywgc3JjL3VuZG8uYywKKwkgICAgc3JjL3ZpbS5oLCBzcmMvd2luZG93LmMsIHNyYy93b3Jrc2hvcC5jCisKK1BhdGNoIDYuMS4zNjcgKGRlcGVuZHMgb24gNi4xLjM2NSkKK1Byb2JsZW06ICAgIFNldHRpbmcgYSBicmVha3BvaW50IGluIGEgZnVuY3Rpb24gZG9lc24ndCB3b3JrLiAgRm9yIGEgc291cmNlZAorCSAgICBmaWxlIGl0IGRvZXNuJ3Qgd29yayB3aGVuIHN5bWJvbGljIGxpbmtzIGFyZSBpbnZvbHZlZC4gIChTZXJ2YXRpdXMKKwkgICAgQnJhbmR0KQorU29sdXRpb246ICAgRXhwYW5kIHRoZSBmaWxlIG5hbWUgaW4gdGhlIHNhbWUgd2F5IGFzIGRvX3NvdXJjZSgpIGRvZXMuICBEb24ndAorCSAgICBwcmVwZW5kIHRoZSBwYXRoIHRvIGEgZnVuY3Rpb24gbmFtZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4xLjM2OAorUHJvYmxlbTogICAgQ29tcGxldGlvbiBmb3IgIjptYXAiIGRvZXMgbm90IGluY2x1ZGUgPHNpbGVudD4gYW5kIDxzY3JpcHQ+LgorCSAgICAiOm1rZXhyYyIgZG8gbm90IHNhdmUgdGhlIDxzaWxlbnQ+IGF0dHJpYnV0ZSBvZiBtYXBwaW5ncy4KK1NvbHV0aW9uOiAgIEFkZCAiPHNpbGVudD4iIHRvIHRoZSBnZW5lcmF0ZWQgbWFwIGNvbW1hbmRzIHdoZW4gYXBwcm9wcmlhdGUuCisJICAgIChEYXZpZCBFbHN0bmVyKQorCSAgICBBZGQgPHNpbGVudD4gYW5kIDxzY3JpcHQ+IHRvIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuMS4zNjkgKGV4dHJhKQorUHJvYmxlbTogICAgVk1TOiBWaW0gaGFuZ3Mgd2hlbiBhdHRlbXB0aW5nIHRvIGVkaXQgYSByZWFkLW9ubHkgZmlsZSBpbiB0aGUKKwkgICAgdGVybWluYWwuICBQcm9ibGVtIHdpdGggVk1TIGZpbGVuYW1lcyBmb3IgcXVpY2tmaXguCitTb2x1dGlvbjogICBSZXdyaXRlIGxvdyBsZXZlbCBpbnB1dC4gIFJlbW92ZSB2ZXJzaW9uIG51bWJlciBmcm9tIGZpbGUgbmFtZSBpbgorCSAgICBhIGNvdXBsZSBtb3JlIHBsYWNlcy4gIEZpeCBjcmFzaCBhZnRlciBwYXRjaCA2LjEuMzYyLiAgQ29ycmVjdAorCSAgICByZXR1cm4gY29kZSBmb3Igc3lzdGVtKCkuICAoWm9sdGFuIEFycGFkZmZ5LCBUb21hcyBTdGVobGlrKQorRmlsZXM6CSAgICBzcmMvbWlzYzEuYywgc3JjL29zX3VuaXguYywgc3JjL29zX3Ztcy5jLCBzcmMvcHJvdG8vb3Nfdm1zLnBybywKKwkgICAgc3JjL29zX3Ztc19jb25mLmgsIHNyYy9xdWlja2ZpeC5jLCBzcmMvdWkuYworCitQYXRjaCA2LjEuMzcwCitQcm9ibGVtOiAgICAjaWZkZWYgbmVzdGluZyBpcyB1bmNsZWFyLgorU29sdXRpb246ICAgSW5zZXJ0IHNwYWNlcyB0byBpbmRpY2F0ZSB0aGUgbmVzdGluZy4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMzcxCitQcm9ibGVtOiAgICAiJVYiIGluICdzdGF0dXNsaW5lJyBkb2Vzbid0IHNob3cgIjAtMSIgaW4gYW4gZW1wdHkgbGluZS4KK1NvbHV0aW9uOiAgIEFkZCBvbmUgdG8gdGhlIGNvbHVtbiB3aGVuIGNvbXBhcmluZyB3aXRoIHZpcnR1YWwgY29sdW1uIChBbmRyZXcKKwkgICAgUGltbG90dCkKK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4zNzIKK1Byb2JsZW06ICAgIFdpdGggMTYgYml0IGludHMgdGhlcmUgYXJlIGNvbXBpbGVyIHdhcm5pbmdzLiAoV2FsdGVyIEJyaXNjb2UpCitTb2x1dGlvbjogICBDaGFuZ2UgaW50IGludG8gbG9uZy4KK0ZpbGVzOgkgICAgc3JjL3N0cnVjdHMuaCwgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMS4zNzMKK1Byb2JsZW06ICAgIFRoZSBkZWZhdWx0IHBhZ2UgaGVhZGVyIGZvciBwcmludGluZyBpcyBub3QgdHJhbnNsYXRlZC4KK1NvbHV0aW9uOiAgIEFkZCBfKCkgYXJvdW5kIHRoZSB0d28gcGxhY2VzIHdoZXJlICJQYWdlIiBpcyB1c2VkLiAoTWlrZQorCSAgICBXaWxsaWFtcykgIFRyYW5zbGF0ZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3RpdGxlb2xkJyBhbmQKKwkgICAgJ3ByaW50aGVhZGVyJyBvcHRpb25zLgorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYywgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMS4zNzQgKGV4dHJhKQorUHJvYmxlbTogICAgTVMtV2luZG93czogQ2Fubm90IGJ1aWxkIEd2aW1FeHQgd2l0aCBNaW5nVyBvciBDeWd3aW4uCitTb2x1dGlvbjogICBBZGQgbWFrZWZpbGUgYW5kIG1vZGlmaWVkIHJlc291cmNlIGZpbGVzLiAoUmVuZSBkZSBad2FydCkKKwkgICAgQWxzbyBzdXBwb3J0IEN5Z3dpbi4gKEFsZWphbmRybyBMb3Blel9WYWxlbmNpYSkKK0ZpbGVzOgkgICAgR3ZpbUV4dC9NYWtlX2N5Zy5tYWssIEd2aW1FeHQvTWFrZV9taW5nLm1haywgR3ZpbUV4dC9NYWtlZmlsZSwKKwkgICAgR3ZpbUV4dC9ndmltZXh0X21pbmcuZGVmLCBHdmltRXh0L2d2aW1leHRfbWluZy5yYworCitQYXRjaCA2LjEuMzc1CitQcm9ibGVtOiAgICBNUy1XaW5kb3dzOiAnOiFkaXIgIiUiJyBkb2VzIG5vdCB3b3JrIGZvciBhIGZpbGUgbmFtZSB3aXRoIHNwYWNlcy4KKwkgICAgKFhpYW5namlhbmcgTWEpCitTb2x1dGlvbjogICBEb24ndCBpbnNlcnQgYmFja3NsYXNoZXMgZm9yIHNwYWNlcyBpbiBhIHNoZWxsIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4zNzYKK1Byb2JsZW06ICAgICJ2aW0gLS12ZXJzaW9uIiBhbmQgInZpbSAtLWhlbHAiIGhhdmUgYSBub24temVybyBleGl0IGNvZGUuCisJICAgIFRoYXQgaXMgdW51c3VhbC4gKFBldGVzZWEpCitTb2x1dGlvbjogICBVc2UgYSB6ZXJvIGV4aXQgY29kZS4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjEuMzc3CitQcm9ibGVtOiAgICBDYW4ndCBhZGQgd29yZHMgdG8gJ2xpc3B3b3Jkcycgb3B0aW9uLgorU29sdXRpb246ICAgQWRkIFBfQ09NTUEgYW5kIFBfTk9EVVAgZmxhZ3MuIChIYWFrb24gUmlpc2VyKQorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4xLjM3OAorUHJvYmxlbTogICAgV2hlbiB0d28gYnVmZmVyLWxvY2FsIHVzZXIgY29tbWFuZHMgYXJlIGFtYmlndW91cywgYSBmdWxsIG1hdGNoCisJICAgIHdpdGggYSBnbG9iYWwgdXNlciBjb21tYW5kIGlzbid0IGZvdW5kLiAoSGFyaSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBEZXRlY3QgdGhpcyBzaXR1YXRpb24gYW5kIGFjY2VwdCB0aGUgZ2xvYmFsIGNvbW1hbmQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMS4zNzkKK1Byb2JsZW06ICAgIExpbnV4IHdpdGgga2VybmVsIDIuMiBjYW4ndCB1c2UgdGhlIGFsdGVybmF0ZSBzdGFjayBpbiBjb21iaW5hdGlvbgorCSAgICB3aXRoIHRocmVhZGluZywgY2F1c2VzIGFuIGluZmluaXRlIGxvb3AuCitTb2x1dGlvbjogICBEb24ndCB1c2UgdGhlIGFsdGVybmF0ZSBzdGFjayBpbiB0aGlzIHNpdHVhdGlvbi4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuMzgwCitQcm9ibGVtOiAgICBXaGVuICd3aW5taW5oZWlnaHQnIGlzIHplcm8gYW5kIHRoZSBxdWlja2ZpeCB3aW5kb3cgaXMgemVybyBsaW5lcywKKwkgICAgZW50ZXJpbmcgdGhlIHdpbmRvdyBkb2Vzbid0IG1ha2UgaXQgaGlnaGVyLiAoQ2hyaXN0aWFuIEouCisJICAgIFJvYmluc29uKQorU29sdXRpb246ICAgTWFrZSBzdXJlIHRoZSBjdXJyZW50IHdpbmRvdyBpcyBhdCBsZWFzdCBvbmUgbGluZSBoaWdoLgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjM4MQorUHJvYmxlbTogICAgV2hlbiBhIEJ1ZldyaXRlQ21kIGlzIHVzZWQgYW5kIGl0IGxlYXZlcyB0aGUgYnVmZmVyIG1vZGlmaWVkLCB0aGUKKwkgICAgd2luZG93IG1heSBzdGlsbCBiZSBjbG9zZWQuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIFJldHVybiBGQUlMIGZyb20gYnVmX3dyaXRlKCkgd2hlbiB0aGUgYnVmZmVyIGlzIHN0aWxsIG1vZGlmaWVkCisJICAgIGFmdGVyIGEgQnVmV3JpdGVDbWQgYXV0b2NvbW1hbmQgd2FzIHVzZWQuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjEuMzgyIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIEdVSTogV2hlbiB1c2luZyB0d28gbW9uaXRvcnMsIHRoZSBjb2RlIHRoYXQgY2hlY2tzL2ZpeGVzIHRoZQorCSAgICB3aW5kb3cgc2l6ZSBhbmQgcG9zaXRpb24gKGUuZy4gd2hlbiBhIGZvbnQgY2hhbmdlcykgZG9lc24ndCB3b3JrCisJICAgIHByb3Blcmx5LiAgKEdlb3JnZSBSZWlsbHkpCitTb2x1dGlvbjogICBIYW5kbGUgYSBkb3VibGUgbW9uaXRvciBzaXR1YXRpb24uIChIZWxtdXQgU3RpZWdsZXIpCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4xLjM4MworUHJvYmxlbTogICAgVGhlIGZpbGxpbmcgb2YgdGhlIHN0YXR1cyBsaW5lIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IKKwkgICAgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLiAoTmFtIFN1bmdIeXVuKQorCSAgICBUaGVyZSBpcyBubyBjaGVjayBmb3IgZ29pbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCitTb2x1dGlvbjogICBQcm9wZXJseSBkaXN0aW5ndWlzaCBjaGFyYWN0ZXJzIGFuZCBieXRlcy4gIFByb3Blcmx5IGNoZWNrIGZvcgorCSAgICBydW5uaW5nIG91dCBvZiBidWZmZXIgc3BhY2UuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2V4X2NtZHMyLmMsIHNyYy9wcm90by9idWZmZXIucHJvLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjM4NAorUHJvYmxlbTogICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGZpbmQgaWYgYSBjZXJ0YWluIHBhdGNoIGhhcyBiZWVuIGluY2x1ZGVkLgorCSAgICAoTHVib21pciBIb3N0KQorU29sdXRpb246ICAgU3VwcG9ydCB1c2luZyBoYXMoKSB0byBjaGVjayBpZiBhIHBhdGNoIHdhcyBpbmNsdWRlZC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvZXZhbC50eHQsIHNyYy9ldmFsLmMsIHNyYy9wcm90by92ZXJzaW9uLnBybywKKwkgICAgc3JjL3ZlcnNpb24uYworCitQYXRjaCA2LjEuMzg1IChkZXBlbmRzIG9uIDYuMS4zODMpCitQcm9ibGVtOiAgICBDYW4ndCBjb21waWxlIHdpdGhvdXQgdGhlIG11bHRpLWJ5dGUgZmVhdHVyZS4KK1NvbHV0aW9uOiAgIE1vdmUgYW4gI2lmZGVmLiAgKENocmlzdGlhbiBKLiBSb2JpbnNvbikKK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4zODYKK1Byb2JsZW06ICAgIEdldCBkdXBsaWNhdGUgdGFncyB3aGVuIHJ1bm5pbmcgIjpoZWxwdGFncyIuCitTb2x1dGlvbjogICBEbyB0aGUgb3RoZXIgaGFsdmUgb2YgbW92aW5nIGEgc2VjdGlvbiB0byBhbm90aGVyIGhlbHAgZmlsZS4KK0ZpbGVzOgkgICAgcnVudGltZS90YWdzcmNoLnR4dAorCitQYXRjaCA2LjEuMzg3IChkZXBlbmRzIG9uIDYuMS4zNzMpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5nIGZvciBwb2ludGVyIGNhc3QuCitTb2x1dGlvbjogICBBZGQgKGNoYXJfdSAqKS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMS4zODggKGRlcGVuZHMgb24gNi4xLjM4NCkKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmcgZm9yIHBvaW50ZXIgY2FzdC4KK1NvbHV0aW9uOiAgIEFkZCAoY2hhciAqKS4gIE9ubHkgaW5jbHVkZSBoYXNfcGF0Y2goKSB3aGVuIHVzZWQuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNi4xLjM4OSAoZGVwZW5kcyBvbiA2LjEuMzY2KQorUHJvYmxlbTogICAgQmFsbG9vbiBldmFsdWF0aW9uIGRvZXNuJ3Qgd29yayBmb3IgR1RLLgorCSAgICBoYXMoImJhbGxvb25fZXZhbCIpIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEFkZCBiYWxsb29uIGV2YWx1YXRpb24gZm9yIEdUSy4gIEFsc28gaW1wcm92ZSBkaXNwbGF5aW5nIG9mIHNpZ25zLgorCSAgICAoRGFuaWVsIEVsc3RuZXIpCisJICAgIEFsc28gbWFrZSAiOmd1aSIgc3RhcnQgdGhlIG5ldGJlYW5zIGNvbm5lY3Rpb24gYW5kIGF2b2lkIHVzaW5nCisJICAgIG5ldGJlYW5zIGZ1bmN0aW9ucyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBvcGVuLgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUsIHNyYy9mZWF0dXJlLmgsIHNyYy9ndWkuYywgc3JjL2d1aS5oLAorCSAgICBzcmMvZ3VpX2JldmFsLmMsIHNyYy9ndWlfYmV2YWwuaCwgc3JjL2d1aV9ndGsuYywKKwkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9ldmFsLmMsIHNyYy9tZW1saW5lLmMsIHNyYy9tZW51LmMsCisJICAgIHNyYy9uZXRiZWFucy5jLCBzcmMvcHJvdG8vZ3VpX2JldmFsLnBybywgc3JjL3Byb3RvL2d1aV9ndGsucHJvLAorCSAgICBzcmMvc3RydWN0cy5oLCBzcmMvc3ludGF4LmMsIHNyYy91aS5jLCBzcmMvd29ya3Nob3AuYworCitQYXRjaCA2LjEuMzkwIChkZXBlbmRzIG9uIDYuMS4zODkpCitQcm9ibGVtOiAgICBJdCdzIG5vdCBwb3NzaWJsZSB0byB0ZWxsIFZpbSB0byBzYXZlIGFuZCBleGl0IHRocm91Z2ggdGhlCisJICAgIE5ldGJlYW5zIGludGVyZmFjZS4gIFdvdWxkIHN0aWxsIHRyeSB0byBzZW5kIGJhbGxvb24gZXZhbCB0ZXh0CisJICAgIGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKwkgICAgQ2FuJ3QgdXNlIFVuaWNvZGUgY2hhcmFjdGVycyBmb3Igc2lnbiB0ZXh0LgorU29sdXRpb246ICAgQWRkIGZ1bmN0aW9ucyAic2F2ZUFuZEV4aXQiIGFuZCAiZ2V0TW9kaWZpZWQiLiAgQ2hlY2sgZm9yIGEKKwkgICAgd29ya2luZyBjb25uZWN0aW9uIGJlZm9yZSBzZW5kaW5nIGEgYmFsbG9vblRleHQgZXZlbnQuCisJICAgIHZhcmlvdXMgb3RoZXIgY2xlYW51cHMuCisJICAgIFN1cHBvcnQgYW55IGNoYXJhY3RlciBmb3Igc2lnbiB0ZXh0LiAoRGFuaWVsIEVsc3RuZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL25ldGJlYW5zLnR4dCwgcnVudGltZS9kb2Mvc2lnbi50eHQsIHNyYy9leF9jbWRzLmMsCisJICAgIHNyYy9uZXRiZWFucy5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjM5MQorUHJvYmxlbTogICAgbWxfZ2V0KCkgZXJyb3Igd2hlbiB1c2luZyB2aXJ0dWFsZWRpdC4gKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBHZXQgYSBsaW5lIGZyb20gYSBzcGVjaWZpYyB3aW5kb3csIG5vdCB0aGUgY3VycmVudCBvbmUuCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMKKworUGF0Y2ggNi4xLjM5MiAoZGVwZW5kcyBvbiA2LjEuMzgzKQorUHJvYmxlbTogICAgSGlnaGxpZ2h0aW5nIGluIHRoZSAnc3RhdHVzbGluZScgaXMgaW4gdGhlIHdyb25nIHBvc2l0aW9uIHdoZW4gYW4KKwkgICAgaXRlbSBpcyB0cnVuY2F0ZWQuIChaYWsgQmVjaykKK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIHN0YXJ0IG9mICdzdGF0dXNsaW5lJyBpdGVtcyBwcm9wZXJseSBmb3IgYSB0cnVuY2F0ZWQKKwkgICAgaXRlbS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS4zOTMKK1Byb2JsZW06ICAgIFdoZW4gY29tcGlsZWQgd2l0aCBQeXRob24gYW5kIHRocmVhZHMsIGRldGFjaGluZyB0aGUgdGVybWluYWwgbWF5CisJICAgIGNhdXNlIFZpbSB0byBsb29wIGZvcmV2ZXIuCitTb2x1dGlvbjogICBBZGQgLXB0aHJlYWQgdG8gJENGTEFHUyB3aGVuIHVzaW5nIFB5dGhvbiBhbmQgZ2NjLiAoRGFuaWVsCisJICAgIEVsc3RuZXIpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjM5NCAoZGVwZW5kcyBvbiA2LjEuMzkwKQorUHJvYmxlbTogICAgVGhlIG5ldGJlYW5zIGludGVyZmFjZSBkb2Vzbid0IHJlY29nbml6ZSBtdWx0aWJ5dGUgZ2x5cGggbmFtZXMuCitTb2x1dGlvbjogICBDaGVjayB0aGUgbnVtYmVyIG9mIGNlbGxzIHJhdGhlciB0aGFuIGJ5dGVzIHRvIGRlY2lkZQorCSAgICB3aGV0aGVyIGEgZ2x5cGggbmFtZSBpcyBub3QgYSBmaWxlbmFtZS4gKERhbmllbCBFbHN0bmVyKQorRmlsZXM6CSAgICBzcmMvbmV0YmVhbnMuYworCitQYXRjaCA2LjEuMzk1IChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMzY5KQorUHJvYmxlbTogICAgVk1TOiBPTERfVk1TIGlzIG5ldmVyIGRlZmluZWQuICBNaXNzaW5nIGZ1bmN0aW9uIHByb3RvdHlwZS4KK1NvbHV0aW9uOiAgIERlZmluZSBPTERfVk1TIGluIE1ha2Vfdm1zLm1tcy4gIEFkZCB2bXNfc3lzX3N0YXR1cygpIHRvCisJICAgIG9zX3Ztcy5wcm8uIChab2x0YW4gQXJwYWRmZnkpCitGaWxlczoJICAgIHNyYy9NYWtlX3Ztcy5tbXMsIHNyYy9wcm90by9vc192bXMucHJvCisKK1BhdGNoIDYuMS4zOTYgKGRlcGVuZHMgb24gNi4xLjMzMCkKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmdzIGZvciB1c2luZyBlbnVtLgorU29sdXRpb246ICAgQWRkIHR5cGVjYXN0IHRvIGNoYXJfdS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNi4xLjM5NyAoZXh0cmEpCitQcm9ibGVtOiAgICBUaGUgaW5zdGFsbCBwcm9ncmFtIG1heSB1c2UgYSB3cm9uZyBwYXRoIGZvciB0aGUgZGlmZiBjb21tYW5kIGlmCisJICAgIHRoZXJlIGlzIGEgc3BhY2UgaW4gdGhlIGluc3RhbGwgZGlyZWN0b3J5IHBhdGguCitTb2x1dGlvbjogICBVc2UgZG91YmxlIHF1b3RlcyBhcm91bmQgdGhlIHBhdGggaWYgbmVjZXNzYXJ5LiAoQWxlamFuZHJvCisJICAgIExvcGV6LVZhbGVuY2lhKSAgQWxzbyB1c2UgZG91YmxlIHF1b3RlcyBhcm91bmQgdGhlIGZpbGUgbmFtZQorCSAgICBhcmd1bWVudHMuCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNi4xLjM5OAorUHJvYmxlbTogICAgU2F2aW5nIHRoZSB0eXBlYWhlYWQgZm9yIGRlYnVnIG1vZGUgY2F1c2VzIHRyb3VibGUgZm9yIGEgdGVzdAorCSAgICBzY3JpcHQuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgQWRkIHRoZSAiOmRlYnVnZ3JlZWR5IiBjb21tYW5kIHRvIGF2b2lkIHNhdmluZyB0aGUgdHlwZWFoZWFkLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9yZXBlYXQudHh0LCBzcmMvZXhfY21kcy5oLCBzcmMvZXhfY21kczIuYywKKwkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9wcm90by9leF9jbWRzMi5wcm8KKworUGF0Y2ggNi4xLjM5OQorUHJvYmxlbTogICAgV2FybmluZyBmb3IgdW51c2VkIHZhcmlhYmxlLgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSB2YXJpYWJsZSB0d29fb3JfbW9yZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuNDAwIChkZXBlbmRzIG9uIDYuMS4zODEpCitQcm9ibGVtOiAgICBXaGVuIGEgQnVmV3JpdGVDbWQgd2lwZXMgb3V0IHRoZSBidWZmZXIgaXQgbWF5IHN0aWxsIGJlIGFjY2Vzc2VkLgorU29sdXRpb246ICAgRG9uJ3QgdHJ5IGFjY2Vzc2luZyBhIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIHdpcGVkIG91dC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMS40MDEgKGV4dHJhKQorUHJvYmxlbTogICAgQnVpbGRpbmcgdGhlIFdpbjE2IHZlcnNpb24gd2l0aCBCb3JsYW5kIDUuMDEgZG9lc24ndCB3b3JrLgorCSAgICAibWFrZSB0ZXN0IiBkb2Vzbid0IHdvcmsgd2l0aCBNYWtlX2Rvcy5tYWsuIChXYWx0ZXIgQnJpc2NvZSkKK1NvbHV0aW9uOiAgIFZhcmlvdXMgZml4ZXMgdG8gdGhlIHcxNiBtYWtlZmlsZS4gKFdhbHRlciBCcmlzY29lKQorCSAgICBEb24ndCB1c2UgZGVsdHJlZS4gIFVzZSAibWtkaXIgXHRtcCIgaW5zdGVhZCBvZiAibWtkaXIgL3RtcCIuCitGaWxlczoJICAgIHNyYy9NYWtlX3cxNi5tYWssIHNyYy90ZXN0ZGlyL01ha2VfZG9zLm1haworCitQYXRjaCA2LjEuNDAyCitQcm9ibGVtOiAgICBXaGVuIGV2YWx1YXRpbmcgYSBmdW5jdGlvbiBuYW1lIHdpdGggY3VybHkgYnJhY2VzLCBhbiBlcnJvcgorCSAgICBpcyBub3QgaGFuZGxlZCBjb25zaXN0ZW50bHkuCitTb2x1dGlvbjogICBBY2NlcHQgdGhlIHJlc3VsdCBvZiBhbiBjdXJseSBicmFjZXMgZXhwcmVzc2lvbiB3aGVuIGFuCisJICAgIGVycm9yIHdhcyBlbmNvdW50ZXJlZC4gIFNraXAgZXZhbHVhdGluZyBhbiBleHByZXNzaW9uIGluIGN1cmx5CisJICAgIGJyYWNlcyB3aGVuIHNraXBwaW5nLiAgKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4xLjQwMyAoZXh0cmEpCitQcm9ibGVtOiAgICBNUy1XaW5kb3dzIDE2IGJpdDogY29tcGlsZXIgd2FybmluZ3MuCitTb2x1dGlvbjogICBBZGQgdHlwZWNhc3RzLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jLCBzcmMvZ3VpX3c0OC5jLCBzcmMvb3NfbXN3aW4uYywgc3JjL29zX3dpbjE2LmMsCisJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjEuNDA0IChleHRyYSkKK1Byb2JsZW06ICAgIFZhcmlvdXMgc21hbGwgcHJvYmxlbXMuCitTb2x1dGlvbjogICBGaXggY29tbWVudHMuICBWYXJpb3VzIHNtYWxsIGFkZGl0aW9ucywgY2hhbmdlcyBpbiBpbmRlbnQsIHJlbW92YWwKKwkgICAgb2YgdW51c2VkIGl0ZW1zIGFuZCBmaXhlcy4KK0ZpbGVzOgkgICAgTWFrZWZpbGUsIFJFQURNRS50eHQsIHJ1bnRpbWUvbWVudS52aW0sIHJ1bnRpbWUvdmltcmNfZXhhbXBsZS52aW0sCisJICAgIHNyYy9JTlNUQUxMLCBzcmMvSU5TVEFMTG9sZS50eHQsIHNyYy9NYWtlX2JjNS5tYWssCisJICAgIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrLCBzcmMvTWFrZWZpbGUsCisJICAgIHNyYy9jb25maWcuaC5pbiwgc3JjL2VkaXQuYywgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMyLmMsCisJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2ZpbGVpby5jLCBzcmMvZ2V0Y2hhci5jLAorCSAgICBzcmMvZ3VpLmMsIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWlfcGhvdG9uLmMsIHNyYy9pZl9jc2NvcGUuYywKKwkgICAgc3JjL2lmX3B5dGhvbi5jLCBzcmMva2V5bWFwLmgsIHNyYy9tYXJrLmMsIHNyYy9tYnl0ZS5jLAorCSAgICBzcmMvbWVzc2FnZS5jLCBzcmMvbWlzYzEuYywgc3JjL21pc2MyLmMsIHNyYy9ub3JtYWwuYywKKwkgICAgc3JjL29wdGlvbi5jLCBzcmMvb3Nfb3MyX2NmZy5oLCBzcmMvb3Nfd2luMzIuYywKKwkgICAgc3JjL3Byb3RvL2dldGNoYXIucHJvLCBzcmMvcHJvdG8vbWVzc2FnZS5wcm8sCisJICAgIHNyYy9wcm90by9yZWdleHAucHJvLCBzcmMvc2NyZWVuLmMsIHNyYy9zdHJ1Y3RzLmgsIHNyYy9zeW50YXguYywKKwkgICAgc3JjL3Rlcm0uYywgc3JjL3Rlc3RkaXIvdGVzdDE1LmluLCBzcmMvdGVzdGRpci90ZXN0MTUub2ssCisJICAgIHNyYy92aW0ucmMsIHNyYy94eGQvTWFrZV9jeWcubWFrLCBzcmMveHhkL01ha2VmaWxlCisKK1BhdGNoIDYuMS40MDUKK1Byb2JsZW06ICAgIEEgZmV3IGZpbGVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIHRvcGxldmVsIE1ha2VmaWxlLgorU29sdXRpb246ICAgQWRkIHRoZSBtaXNzaW5nIGZpbGVzLgorRmlsZXM6CSAgICBNYWtlZmlsZQorCitQYXRjaCA2LjEuNDA2IChkZXBlbmRzIG9uIDYuMS4zOTIpCitQcm9ibGVtOiAgICBXaGVuIGEgc3RhdHVzbGluZSBpdGVtIGRvZXNuJ3QgZml0IGFyYml0cmFyeSB0ZXh0IGFwcGVhcnMuCisJICAgIChDaHJpc3RpYW4gSi4gUm9iaW5zb24pCitTb2x1dGlvbjogICBXaGVuIHRoZXJlIGlzIGp1c3QgZW5vdWdoIHJvb20gYnV0IG5vdCBmb3IgdGhlICI8IiB0cnVuY2F0ZSB0aGUKKwkgICAgc3RhdHVzbGluZSBpdGVtIGxpa2UgdGhlcmUgaXMgbm8gcm9vbS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS40MDcKK1Byb2JsZW06ICAgICI6c2V0IHNjcm9sbGJpbmQgfCBoZWxwIiBzY3JvbGxiaW5kcyB0aGUgaGVscCB3aW5kb3cuIChBbmRyZXcKKwkgICAgUGltbG90dCkKK1NvbHV0aW9uOiAgIFJlc2V0ICdzY3JvbGxiaW5kJyB3aGVuIG9wZW5pbmcgYSBoZWxwIHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuNDA4CitQcm9ibGVtOiAgICBXaGVuICdyaWdodGxlZnQnIGlzIHNldCB1bnByaW50YWJsZSBjaGFyYWN0ZXIgMHgwYyBpcyBkaXNwbGF5ZWQgYXMKKwkgICAgIj5jMDwiLgorU29sdXRpb246ICAgUmV2ZXJzZSB0aGUgdGV4dCBvZiB0aGUgaGV4IGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMS40MDkKK1Byb2JsZW06ICAgIEdlbmVyYXRpbmcgdGFncyBmb3IgdGhlIGhlbHAgZG9lc24ndCB3b3JrIGZvciBzb21lIGxvY2FsZXMuCitTb2x1dGlvbjogICBTZXQgTEFORz1DIExDX0FMTD1DIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgInNvcnQiLiAoRGFuaWVsCisJICAgIEVsc3RuZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL01ha2VmaWxlCisKK1BhdGNoIDYuMS40MTAgKGRlcGVuZHMgb24gNi4xLjM5MCkKK1Byb2JsZW06ICAgIExpbmtpbmcgZXJyb3Igd2hlbiBjb21waWxpbmcgd2l0aCBOZXRiZWFucyBidXQgd2l0aG91dCBzaWduIGljb25zLgorCSAgICAoTWFsdGUgTmV1bWFubikKK1NvbHV0aW9uOiAgIERvbid0IGRlZmluZSBidWZfc2lnbmNvdW50KCkgd2hlbiBzaWduIGljb25zIGFyZSB1bmF2YWlsYWJsZS4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jCisKK1BhdGNoIDYuMS40MTEKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQsIGhpZ2hsaWdodGluZyBhIFZpc3VhbCBibG9jayBiZXlvbmQgdGhlCisJICAgIGVuZCBvZiBhIGxpbmUgbWF5IGJlIHdyb25nLgorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgdmlydHVhbCBjb2x1bW4gd2hlbiB0aGUgZW5kIG9mIHRoZSBsaW5lIGlzIGJlZm9yZSB0aGUKKwkgICAgZGlzcGxheWVkIHBhcnQgb2YgdGhlIGxpbmUuIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuNDEyCitQcm9ibGVtOiAgICBXaGVuIHN3YXBwaW5nIHRlcm1pbmFsIHNjcmVlbnMgYW5kIHVzaW5nICI6Z3VpIiB0byBzdGFydCB0aGUgR1VJLAorCSAgICB0aGUgc2hlbGwgcHJvbXB0IG1heSBiZSBhZnRlciBhIGhpdC1lbnRlciBwcm9tcHQuCitTb2x1dGlvbjogICBPdXRwdXQgYSBuZXdsaW5lIGluIHRoZSB0ZXJtaW5hbCB3aGVuIHN0YXJ0aW5nIHRoZSBHVUkgYW5kIHRoZXJlCisJICAgIHdhcyBhIGhpdC1lbnRlciBwcm9tcHQuLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4xLjQxMworUHJvYmxlbTogICAgV2hlbiAnY2xpcGJvYXJkJyBjb250YWlucyAidW5uYW1lZCIsICJwIiBpbiBWaXN1YWwgbW9kZSBkb2Vzbid0CisJICAgIHdvcmsgY29ycmVjdGx5LgorU29sdXRpb246ICAgU2F2ZSB0aGUgcmVnaXN0ZXIgYmVmb3JlIG92ZXJ3cml0aW5nIGl0IGFuZCBwdXQgdGhlIHJlc3VsdGluZyB0ZXh0CisJICAgIG9uIHRoZSBjbGlwYm9hcmQgYWZ0ZXJ3YXJkcy4gIChNdXJhb2thIFRhcm8pCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jCisKK1BhdGNoIDYuMS40MTQgKGV4dHJhLCBkZXBlbmRzIG9uIDYuMS4zNjkpCitQcm9ibGVtOiAgICBWTVM6IFZpbSBidXN5IHdhaXRzIHdoZW4gd2FpdGluZyBmb3IgaW5wdXQuCitTb2x1dGlvbjogICBEZWxheSBmb3IgYSBzaG9ydCB3aGlsZSBiZWZvcmUgZ2V0dGluZyBhbm90aGVyIGNoYXJhY3Rlci4gIChab2x0YW4KKwkgICAgQXJwYWRmZnkpCitGaWxlczoJICAgIHNyYy9vc192bXMuYworCitQYXRjaCA2LjEuNDE1CitQcm9ibGVtOiAgICBXaGVuIHRoZXJlIGlzIGEgdmVydGljYWwgc3BsaXQgYW5kIGEgcXVpY2tmaXggd2luZG93LCByZWR1Y2luZyB0aGUKKwkgICAgc2l6ZSBvZiB0aGUgVmltIHdpbmRvdyBtYXkgcmVzdWx0IGluIGEgd3Jvbmcgd2luZG93IGxheW91dCBhbmQgYQorCSAgICBjcmFzaC4KK1NvbHV0aW9uOiAgIFdoZW4gcmVkdWNpbmcgdGhlIHdpbmRvdyBzaXplIGFuZCB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGZvcgorCSAgICAnd2luZml4aGVpZ2h0JyBzZXQgdGhlIGZyYW1lIGhlaWdodCB0byB0aGUgbGFyZ2VyIGhlaWdodCwgc28gdGhhdAorCSAgICB0aGVyZSBpcyBhIHJldHJ5IHdoaWxlIGlnbm9yaW5nICd3aW5maXhoZWlnaHQnLiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4xLjQxNiAoZGVwZW5kcyBvbiA2LjEuMzY2KQorUHJvYmxlbTogICAgV2hlbiB1c2luZyB0aGUgTmV0YmVhbnMgaW50ZXJmYWNlLCBhIGxpbmUgd2l0aCBhIHNpZ24gY2Fubm90IGJlCisJICAgIGNoYW5nZWQuCitTb2x1dGlvbjogICBSZXNwZWN0IHRoZSBHVUFSREVET0ZGU0VUIGZvciBzaWduIElEcyB3aGVuIGNoZWNraW5nIGZvciBhIGd1YXJkZWQKKwkgICAgYXJlYS4KK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4xLjQxNworUHJvYmxlbTogICAgVW5wcmludGFibGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCisJICAgIE11bHRpLWJ5dGUgY2hhcmFjdGVycyBhYm92ZSAweGZmZmYgYXJlIGRpc3BsYXllZCBhcyBhbm90aGVyCisJICAgIGNoYXJhY3Rlci4KK1NvbHV0aW9uOiAgIEhhbmRsZSB1bnByaW50YWJsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBEaXNwbGF5IG11bHRpLWJ5dGUKKwkgICAgY2hhcmFjdGVycyBhYm92ZSAweGZmZmYgd2l0aCBhIG1hcmtlci4gIFJlY29nbml6ZSBVVEYtMTYgd29yZHMgYW5kCisJICAgIEJPTSB3b3JkcyBhcyB1bnByaW50YWJsZS4gIChEYW5pZWwgRWxzdG5lcikKK0ZpbGVzOgkgICAgc3JjL2NoYXJzZXQuYywgc3JjL21ieXRlLmMsIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjEuNDE4CitQcm9ibGVtOiAgICBUaGUgcmVzdWx0IG9mIHN0cmZ0aW1lKCkgaXMgaW4gdGhlIGN1cnJlbnQgbG9jYWxzLiAgTmVlZCB0bworCSAgICBjb252ZXJ0IGl0IHRvICdlbmNvZGluZycuCitTb2x1dGlvbjogICBPYnRhaW4gdGhlIGN1cnJlbnQgbG9jYWxlIGFuZCBjb252ZXJ0IHRoZSBhcmd1bWVudCBmb3Igc3RyZnRpbWUoKQorCSAgICB0byBpdCBhbmQgdGhlIHJlc3VsdCBiYWNrIHRvICdlbmNvZGluZycuICAoRGFuaWVsIEVsc3RuZXIpCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvbWJ5dGUuYywKKwkgICAgc3JjL3Byb3RvL21ieXRlLnBybywgc3JjL29wdGlvbi5jLCBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjEuNDE5CitQcm9ibGVtOiAgICBWaW0gZG9lc24ndCBjb21waWxlIG9uIEFJWCA1LjEuCitTb2x1dGlvbjogICBEb24ndCBkZWZpbmUgX05PX1BST1RPIG9uIHRoaXMgc3lzdGVtLiAoVXJpYmFycmkpCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjEuNDIwIChleHRyYSkKK1Byb2JsZW06ICAgIGNvbnZlcnRfaW5wdXQoKSBoYXMgYW4gdW5uZWNlc3NhcnkgU1RSTEVOKCkuCisJICAgIENvbnZlcnNpb24gZnJvbSBVQ1MtMiB0byBhIGNvZGVwYWdlIHVzZXMgd29yZCBjb3VudCBpbnN0ZWFkIG9mCisJICAgIGJ5dGUgY291bnQuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIFNUUkxFTigpIGNhbGwuIChEYW5pZWwgRWxzdG5lcikKKwkgICAgQWx3YXlzIHVzZSBieXRlIGNvdW50IGZvciBzdHJpbmdfY29udmVydCgpLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjEuNDIxIChleHRyYSwgZGVwZW5kcyBvbiA2LjEuMzU0KQorUHJvYmxlbTogICAgTVMtV2luZG93cyA5eDogV2hlbiBwdXR0aW5nIHRleHQgb24gdGhlIGNsaXBib2FyZCBpdCBjYW4gYmUgaW4KKwkgICAgdGhlIHdyb25nIGVuY29kaW5nLgorU29sdXRpb246ICAgQ29udmVydCB0ZXh0IHRvIHRoZSBhY3RpdmUgY29kZXBhZ2UgZm9yIENGX1RFWFQuIChHbGVubiBNYXluYXJkKQorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjEuNDIyCitQcm9ibGVtOiAgICBFcnJvciBpbiAudmltcmMgZG9lc24ndCBjYXVzZSBoaXQtZW50ZXIgcHJvbXB0IHdoZW4gc3dhcHBpbmcKKwkgICAgc2NyZWVucy4gKE5laWwgQmlyZCkKK1NvbHV0aW9uOiAgIFNldCBtc2dfZGlkYW55IGFsc28gd2hlbiBzZW5kaW5nIGEgbWVzc2FnZSB0byB0aGUgdGVybWluYWwKKwkgICAgZGlyZWN0bHkuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4xLjQyMworUHJvYmxlbTogICAgQ2FuJ3QgZmluZCBhcmJpdHJhcnkgdGV4dCBpbiBoZWxwIGZpbGVzLgorU29sdXRpb246ICAgQWRkZWQgdGhlICI6aGVscGdyZXAiIGNvbW1hbmQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3ZhcmlvdXMudHh0LCBzcmMvZXhfY21kcy5oLCBzcmMvZXhfZG9jbWQuYywKKwkgICAgc3JjL3Byb3RvL3F1aWNrZml4LnBybywgc3JjL3F1aWNrZml4LmMKKworUGF0Y2ggNi4xLjQyNCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogR3ZpbSBjb21waWxlZCB3aXRoIFZDKysgNy4wIHJ1biBvbiBXaW5kb3dzIDk1IGRvZXMgbm90IHNob3cKKwkgICAgbWVudSBpdGVtcy4KK1NvbHV0aW9uOiAgIERlZmluZSAkV0lOVkVSIHRvIGF2b2lkIGFuIGV4dHJhIGl0ZW0gaXMgYWRkZWQgdG8gTUVOVUlURU1JTkZPLgorCSAgICAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMS40MjUKK1Byb2JsZW06ICAgICI6aGVscHRhZ3MgJFZJTVJVTlRJTUUvZG9jIiBkb2VzIG5vdCBhZGQgdGhlICJoZWxwLXRhZ3MiIHRhZy4KK1NvbHV0aW9uOiAgIERvIGFkZCB0aGUgImhlbHAtdGFncyIgdGFnIGZvciB0aGF0IHNwZWNpZmljIGRpcmVjdG9yeS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjEuNDI2CitQcm9ibGVtOiAgICAiLS1yZW1vdGUtd2FpdCArY21kIGZpbGUiIHdhaXRzIGZvcmV2ZXIuIChWYWxlcnkgS29uZGFrb2ZmKQorU29sdXRpb246ICAgRG9uJ3Qgd2FpdCBmb3IgdGhlICIrY21kIiBhcmd1bWVudCB0byBoYXZlIGJlZW4gZWRpdGVkLgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS40MjcKK1Byb2JsZW06ICAgIFNldmVyYWwgZXJyb3IgbWVzc2FnZXMgZm9yIHJlZ2V4cCBwYXR0ZXJucyBhcmUgbm90IHRyYW5zbGF0ZWQuCitTb2x1dGlvbjogICBVc2UgXygpIHByb3Blcmx5LiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4xLjQyOAorUHJvYmxlbTogICAgRnJlZUJTRDogd2FpdCgpIG1heSBoYW5nIHdoZW4gY29tcGlsZWQgd2l0aCBQeXRob24gc3VwcG9ydCBhbmQKKwkgICAgZG9pbmcgYSBzeXN0ZW0oKSBjYWxsIGluIGEgc3RhcnR1cCBzY3JpcHQuCitTb2x1dGlvbjogICBVc2Ugd2FpdHBpZCgpIGluc3RlYWQgb2Ygd2FpdCgpIGFuZCBwb2xsIGV2ZXJ5IDEwIG1zZWMsIGp1c3QgbGlrZQorCSAgICB3aGF0IGlzIGRvbmUgaW4gdGhlIEdVSS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuNDI5IChkZXBlbmRzIG9uIDYuMS4zOTApCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIHVzaW5nIHNob3dtYXJrcy52aW0gcGx1Z2luLiAoQ2hhcmxlcyBDYW1wYmVsbCkKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBzaWduX2dldF90ZXh0KCkgcmV0dXJuaW5nIGEgTlVMTCBwb2ludGVyLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjQzMAorUHJvYmxlbTogICAgSW4gTGlzcCBjb2RlIGJhY2tzbGFzaGVkIHBhcmVucyBzaG91bGQgYmUgaWdub3JlZCBmb3IgIiUiLiAoRG9yYWkpCitTb2x1dGlvbjogICBTa2lwIG92ZXIgYmFja3NsYXNoZWQgcGFyZW5zLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4xLjQzMQorUHJvYmxlbTogICAgRGVidWcgY29tbWFuZHMgZW5kIHVwIGluIHJlZGlyZWN0ZWQgdGV4dC4KK1NvbHV0aW9uOiAgIERpc2FibGUgcmVkaXJlY3Rpb24gd2hpbGUgaGFuZGxpbmcgZGVidWcgY29tbWFuZHMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMS40MzIgKGRlcGVuZHMgb24gNi4xLjM3NSkKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6ICI6bWFrZSAlOnAiIGluc2VydHMgZXh0cmEgYmFja3NsYXNoZXMuIChEYXZpZCBSZW5uYWxscykKK1NvbHV0aW9uOiAgIERvbid0IGFkZCBiYWNrc2xhc2hlcywgaGFuZGxlIGl0IGxpa2UgIjohY21kIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4xLjQzMworUHJvYmxlbTogICAgIjpwb3B1cCIgb25seSB3b3JrcyBmb3IgV2luMzIuCitTb2x1dGlvbjogICBBZGQgIjpwb3B1cCIgc3VwcG9ydCBmb3IgR1RLLiAgKERhbmllbCBFbHN0bmVyKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ndWkudHh0LCBzcmMvZXhfZG9jbWQuYywgc3JjL2d1aV9ndGsuYywgc3JjL21lbnUuYywKKwkgICAgc3JjL3Byb3RvL2d1aV9ndGsucHJvCisKK1BhdGNoIDYuMS40MzQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiAzMjc2NyBsaW5lcywgdGhlIHNjcm9sbGJhciBoYXMgYQorCSAgICByb3VuZG9mZiBlcnJvci4KK1NvbHV0aW9uOiAgIE1ha2UgYSBjbGljayBvbiBhbiBhcnJvdyBtb3ZlIG9uZSBsaW5lLiAgQWxzbyBtb3ZlIHRoZSBjb2RlIHRvCisJICAgIGd1aV93NDguYywgdGhlcmUgaXMgaGFyZGx5IGFueSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIDE2IGJpdCBhbmQKKwkgICAgMzIgYml0IHZlcnNpb25zLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9ndWlfdzE2LmMsIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4xLjQzNQorUHJvYmxlbTogICAgIjp3aW5zaXplIHgiIHJlc2l6ZXMgdGhlIFZpbSB3aW5kb3cgdG8gdGhlIG1pbmltYWwgc2l6ZS4gKEFuZHJldworCSAgICBQaW1sb3R0KQorU29sdXRpb246ICAgR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGZvciB3cm9uZyBhcmd1bWVudHMgb2YgIjp3aW5zaXplIiBhbmQKKwkgICAgIjp3aW5wb3MiLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuNDM2CitQcm9ibGVtOiAgICBXaGVuIGEgbG9uZyBVVEYtOCBmaWxlIGNvbnRhaW5zIGFuIGlsbGVnYWwgYnl0ZSBpdCdzIGhhcmQgdG8gZmluZAorCSAgICBvdXQgd2hlcmUgaXQgaXMuIChSb24gQWFyb24pCitTb2x1dGlvbjogICBBZGQgdGhlIGxpbmUgbnVtYmVyIHRvIHRoZSBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4xLjQzNyAoZXh0cmEsIGRlcGVuZHMgb24gNi4xLjQyMSkKK1Byb2JsZW06ICAgIFVzaW5nIG11bHRpLWJ5dGUgZnVuY3Rpb25zIHdoZW4gdGhleSBhcmUgbm90IGF2YWlsYWJsZS4KK1NvbHV0aW9uOiAgIFB1dCB0aGUgY2xpcGJvYXJkIGNvbnZlcnNpb24gaW5zaWRlIGFuICNpZmRlZi4gKFZpbmNlIE5lZ3JpKQorCSAgICBBbHNvIGZpeCBhIHBvaW50ZXIgdHlwZSBtaXN0YWtlLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMS40MzgKK1Byb2JsZW06ICAgIFdoZW4gUGVybCBoYXMgdGhyZWFkIHN1cHBvcnQgVmltIGNhbm5vdCB1c2UgdGhlIFBlcmwgaW50ZXJmYWNlLgorU29sdXRpb246ICAgQWRkIGEgY29uZmlndXJlIGNoZWNrIGFuZCBkaXNhYmxlIFBlcmwgd2hlbiBpdCB3aWxsIG5vdCB3b3JrLgorCSAgICAoQXJvbiBHcmlmZmlzKQorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4xLjQzOQorUHJvYmxlbTogICAgTmV0YmVhbnM6IEEgImNyZWF0ZSIgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSBjcmVhdGUgYSBidWZmZXIsCisJICAgIGZvbGxvd2luZyBmdW5jdGlvbnMgbWF5IGZhaWwuCitTb2x1dGlvbjogICBDcmVhdGUgYSBWaW0gYnVmZmVyIHdpdGhvdXQgYSBuYW1lIHdoZW4gImNyZWF0ZSIgaXMgY2FsbGVkLgorCSAgICAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbmV0YmVhbnMudHh0LCBzcmMvbmV0YmVhbnMuYworCitQYXRjaCA2LjEuNDQwCitQcm9ibGVtOiAgICBUaGUgIkAqIiBjb21tYW5kIGRvZXNuJ3Qgb2J0YWluIHRoZSBhY3R1YWwgY29udGVudHMgb2YgdGhlCisJICAgIGNsaXBib2FyZC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgT2J0YWluIHRoZSBjbGlwYm9hcmQgdGV4dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBjb21tYW5kLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4xLjQ0MQorUHJvYmxlbTogICAgInpqIiBhbmQgInprIiBjYW5ub3QgYmUgdXNlZCBhcyBhIG1vdGlvbiBjb21tYW5kIGFmdGVyIGFuCisJICAgIG9wZXJhdG9yLiAoUmFsZiBIZXR6ZWwpCitTb2x1dGlvbjogICBBY2NlcHQgdGhlc2UgY29tbWFuZHMgYXMgbW90aW9uIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4xLjQ0MgorUHJvYmxlbTogICAgVW5pY29kZSAzLjIgZGVmaW5lcyBtb3JlIHNwYWNlIGFuZCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLgorU29sdXRpb246ICAgQWRkIHRoZSBuZXcgY2hhcmFjdGVycyB0byB0aGUgVW5pY29kZSB0YWJsZXMuIChSYXBoYWVsIEZpbmtlbCkKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjQ0MyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogVGhlIGd2aW1leHQuZGxsIGJ1aWxkIHdpdGggQm9ybGFuZCA1LjUgcmVxdWlyZXMgYW5vdGhlcgorCSAgICBETEwuCitTb2x1dGlvbjogICBCdWlsZCBhIHN0YXRpY2FsbHkgbGlua2VkIHZlcnNpb24gYnkgZGVmYXVsdC4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgR3ZpbUV4dC9NYWtlX2JjNS5tYWsKKworUGF0Y2ggNi4xLjQ0NCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogRW5hYmxpbmcgYSBidWlsZCB3aXRoIGdldHRleHQgc3VwcG9ydCBpcyBub3QgY29uc2lzdGVudC4KK1NvbHV0aW9uOiAgIFVzZSAiR0VUVEVYVCIgZm9yIEJvcmxhbmQgYW5kIG1zdmMgbWFrZWZpbGVzLiAoRGFuIFNoYXJwKQorRmlsZXM6CSAgICBzcmMvTWFrZV9iYzUubWFrLCBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMS40NDUgKGV4dHJhKQorUHJvYmxlbTogICAgREpHUFA6IGdldCB3YXJuaW5nIGZvciBhcmd1bWVudCBvZiBwdXRlbnYoKQorU29sdXRpb246ICAgRGVmaW5lIEhBVkVfUFVURU5WIHRvIHVzZSBESkdQUCdzIHB1dGVudigpLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9vc19tc2Rvcy5oCisKK1BhdGNoIDYuMS40NDYgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBNaW5nVyBtYWtlZmlsZSB1c2VzIGEgZGlmZmVyZW50IHN0eWxlIG9mIGFyZ3VtZW50cyB0aGFuCisJICAgIG90aGVyIG1ha2VmaWxlcy4KKwkgICAgRHluYW1pYyBJTUUgaXMgbm90IHN1cHBvcnRlZCBmb3IgQ3lnd2luLgorU29sdXRpb246ICAgVXNlICJubyIgYW5kICJ5ZXMiIHN0eWxlIGFyZ3VtZW50cy4gIFJlbW92ZSB0aGUgdXNlIG9mIHRoZQorCSAgICBkeW4tbWluZy5oIGluY2x1ZGUgZmlsZS4gKERhbiBTaGFycCkKKwkgICAgRG8gbm90IGluY2x1ZGUgdGhlIGltZS5oIGZpbGUgYW5kIGFkanVzdCB0aGUgbWFrZWZpbGUuIChBbGVqYW5kcm8KKwkgICAgTG9wZXotVmFsZW5jaWEpCitGaWxlczoJICAgIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrLCBzcmMvZ3VpX3czMi5jLAorCSAgICBzcmMvaWZfcGVybC54cywgc3JjL2lmX3B5dGhvbi5jLCBzcmMvaWZfcnVieS5jLCBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjEuNDQ3CitQcm9ibGVtOiAgICAibWFrZSBpbnN0YWxsIiB1c2VzICJtYWtlIiBkaXJlY3RseSBmb3IgZ2VuZXJhdGluZyBoZWxwIHRhZ3MuCitTb2x1dGlvbjogICBVc2UgJChNQUtFKSBpbnN0ZWFkIG9mICJtYWtlIi4gKFRpbSBNb29uZXkpCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjEuNDQ4CitQcm9ibGVtOiAgICAndGl0bGVzdHJpbmcnIGhhcyBhIGRlZmF1bHQgbWF4aW11bSB3aWR0aCBvZiA1MCBjaGFycyBwZXIgaXRlbS4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgZGVmYXVsdCBtYXhpbXVtIChhbHNvIGZvciAnc3RhdHVzbGluZScpLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4xLjQ0OQorUHJvYmxlbTogICAgV2hlbiAiMSIgYW5kICJhIiBhcmUgaW4gJ2Zvcm1hdG9wdGlvbnMnLCBhdXRvLWZvcm1hdHRpbmcgYWx3YXlzCisJICAgIG1vdmVzIGEgbmV3bHkgYWRkZWQgY2hhcmFjdGVyIHRvIHRoZSBuZXh0IGxpbmUuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgRG9uJ3QgbW92ZSBhIHNpbmdsZSBjaGFyYWN0ZXIgdG8gdGhlIG5leHQgbGluZSB3aGVuIGl0IHdhcyBqdXN0CisJICAgIHR5cGVkLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMS40NTAKK1Byb2JsZW06ICAgIFRlcm1jYXAgZW50cnkgImtCIiBmb3IgYmFjay10YWIgaXMgbm90IHJlY29nbml6ZWQuCitTb2x1dGlvbjogICBVc2UgYmFjay10YWIgYXMgdGhlIHNoaWZ0LXRhYiBjb2RlLgorRmlsZXM6CSAgICBzcmMva2V5bWFwLmgsIHNyYy9taXNjMi5jLCBzcmMvdGVybS5jCisKK1BhdGNoIDYuMS40NTEKK1Byb2JsZW06ICAgIEdVSTogV2hlbiB0ZXh0IGluIHRoZSBmaW5kIGRpYWxvZyBjb250YWlucyBhIHNsYXNoLCBhIGJhY2tzbGFzaCBpcworCSAgICBpbnNlcnRlZCB0aGUgbmV4dCB0aW1lIGl0IGlzIG9wZW5lZC4gKE1lenopCitTb2x1dGlvbjogICBSZW1vdmUgZXNjYXBlZCBiYWNrc2xhc2hlcyBhbmQgcXVlc3Rpb24gbWFya3MuIChEYW5pZWwgRWxzdG5lcikKK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMS40NTIgKGV4dHJhLCBhZnRlciA2LjEuNDQ2KQorUHJvYmxlbTogICAgV2luMzI6IElNRSBzdXBwb3J0IGRvZXNuJ3Qgd29yayBmb3IgTVNWQy4KK1NvbHV0aW9uOiAgIFVzZSBfTVNDX1ZFUiBpbnN0ZWFkIG9mIF9fTVNWQy4gKEFsZWphbmRybyBMb3Blei1WYWxlbmNpYSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjEuNDUzIChhZnRlciA2LjEuNDI5KQorUHJvYmxlbTogICAgV2hlbiBjb21waWxlZCB3aXRob3V0IHNpZ24gaWNvbnMgYnV0IHdpdGggc2lnbiBzdXBwb3J0LCBhZGRpbmcgYQorCSAgICBzaWduIG1heSBjYXVzZSBhIGNyYXNoLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHRoZSB0ZXh0IHNpZ24gdG8gZXhpc3QgYmVmb3JlIHVzaW5nIGl0LiAoS2FtaWwKKwkgICAgQnVyenluc2tpKQorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjQ1NCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogcGFzdGluZyBSdXNzaWFuIHRleHQgaW4gVmltIHdpdGggJ2VuYycgc2V0IHRvIGNwMTI1MQorCSAgICByZXN1bHRzIGluIHV0Zi04IGJ5dGVzLiAgKFBlcmVseXVic2tpeSkKKwkgICAgQ29udmVyc2lvbiBmcm9tIERCQ1MgdG8gVUNTMiBkb2VzIG5vdCB3b3JrIHdoZW4gJ2VuY29kaW5nJyBpcyBub3QKKwkgICAgdGhlIGFjdGl2ZSBjb2RlcGFnZS4KK1NvbHV0aW9uOiAgIEludHJvZHVjZSBlbmNfY29kZXBhZ2UgYW5kIHVzZSBpdCBmb3IgY29udmVyc2lvbiB0byAnZW5jb2RpbmcnCisJICAgIChHbGVubiBNYXluYXJkKQorCSAgICBVc2UgTXVsdGlCeXRlVG9XaWRlQ2hhcigpIGFuZCBXaWRlQ2hhclRvTXVsdGlCeXRlKCkgaW5zdGVhZCBvZgorCSAgICBpY29udigpLiAgU2hvdWxkIGRvIG1vc3QgbmVlZGVkIGNvbnZlcnNpb25zIHdpdGhvdXQgaWNvbnYuZGxsLgorRmlsZXM6CSAgICBzcmMvZ2xvYmFscy5oLCBzcmMvZ3VpX3czMi5jLCBzcmMvbWJ5dGUuYywgc3JjL29zX21zd2luLmMsCisJICAgIHNyYy9wcm90by9tYnl0ZS5wcm8sIHNyYy9wcm90by9vc19tc3dpbi5wcm8sIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4xLjQ1NQorUHJvYmxlbTogICAgU29tZSBVbmljb2RlIGNoYXJhY3RlcnMgY2FuIGJlIG9uZSBvciB0d28gY2hhcmFjdGVyIGNlbGxzIHdpZGUuCitTb2x1dGlvbjogICBBZGQgdGhlICdhbWJpd2lkdGgnIG9wdGlvbiB0byB0ZWxsIFZpbSBob3cgdG8gZGlzcGxheSB0aGVzZQorCSAgICBjaGFyYWN0ZXJzLiAoSnVuZ3NoaWsgU2hpbikKKwkgICAgQWxzbyByZXNldCB0aGUgc2NyaXB0IElEIHdoZW4gc2V0dGluZyBhbiBvcHRpb24gdG8gaXRzIGRlZmF1bHQKKwkgICAgdmFsdWUsIHNvIHRoYXQgIjp2ZXJib3NlIHNldCIgd29uJ3QgZ2l2ZSB3cm9uZyBpbmZvLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL21ieXRlLmMsIHNyYy9vcHRpb24uYywgc3JjL29wdGlvbi5oCisKK1BhdGNoIDYuMS40NTYgKGV4dHJhLCBhZnRlciA2LjEuNDU0KQorUHJvYmxlbTogICAgV2luMzI6IElNRSBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBJbW1HZXRDb21wb3NpdGlvblN0cmluZ1coKSByZXR1cm5zIHRoZSBzaXplIGluIGJ5dGVzLCBub3Qgd29yZHMuCisJICAgIChZYXN1aGlybyBNYXRzdW1vdG8pICBBbHNvIGZpeCB0eXBlY2FzdCBwcm9ibGVtLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjEuNDU3CitQcm9ibGVtOiAgICBBbiBlbXB0eSByZWdpc3RlciBpbiB2aW1pbmZvIGNhdXNlcyBjb252ZXJzaW9uIHRvIGZhaWwuCitTb2x1dGlvbjogICBEb24ndCBjb252ZXJ0IGFuIGVtcHR5IHN0cmluZy4gKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjQ1OAorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3IgcG9pbnRlci4KK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0LgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMS40NTkgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IGxpYmNhbGwoKSBtYXkgcmV0dXJuIGFuIGludmFsaWQgcG9pbnRlciBhbmQgY2F1c2UgVmltIHRvCisJICAgIGNyYXNoLgorU29sdXRpb246ICAgQWRkIGEgc3RyaWN0IGNoZWNrIGZvciB0aGUgcmV0dXJuZWQgcG9pbnRlci4gKEJydWNlIE1lbGxvd3MpCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMS40NjAKK1Byb2JsZW06ICAgIEdUSzogYWZ0ZXIgc2Nyb2xsaW5nIHRoZSB0ZXh0IG9uZSBsaW5lIHdpdGggYSBrZXksIGNsaWNraW5nIHRoZQorCSAgICBhcnJvdyBvZiB0aGUgc2Nyb2xsYmFyIGRvZXMgbm90IGFsd2F5cyB3b3JrLiAoTmFtIFN1bmdIeXVuKQorU29sdXRpb246ICAgQWx3YXlzIHVwZGF0ZSB0aGUgc2Nyb2xsYmFyIHRodW1iIHdoZW4gdGhlIHZhbHVlIGNoYW5nZWQsIGV2ZW4KKwkgICAgd2hlbiBpdCB3b3VsZCBub3QgbW92ZSwgbGlrZSBmb3IgUklTQ09TLiAgKERhbmllbCBFbHN0bmVyKQorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9ndWkuaAorCitQYXRjaCA2LjEuNDYxCitQcm9ibGVtOiAgICBXaGVuIGEga2V5bWFwIGlzIGFjdGl2ZSwgdHlwaW5nIGEgY2hhcmFjdGVyIGluIFNlbGVjdCBtb2RlIGRvZXMKKwkgICAgbm90IHVzZSBpdC4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIEFwcGx5IEluc2VydCBtb2RlIG1hcHBpbmcgdG8gdGhlIGNoYXJhY3RlciB0eXBlZCBpbiBTZWxlY3QgbW9kZS4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMS40NjIKK1Byb2JsZW06ICAgIFdoZW4gYXV0b2NvbW1hbmRzIHdpcGUgb3V0IGEgYnVmZmVyLCBhIGNyYXNoIG1heSBoYXBwZW4uIChIYXJpCisJICAgIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIERvbid0IGRlY3JlbWVudCB0aGUgd2luZG93IGNvdW50IG9mIGEgYnVmZmVyIGJlZm9yZSBjYWxsaW5nIHRoZQorCSAgICBhdXRvY29tbWFuZHMgZm9yIGl0LiAgV2hlbiByZS11c2luZyB0aGUgY3VycmVudCBidWZmZXIsIHdhdGNoIG91dAorCSAgICBmb3IgYXV0b2NvbW1hbmRzIGNoYW5naW5nIHRoZSBjdXJyZW50IGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZXhfY21kcy5jLCBzcmMvcHJvdG8vYnVmZmVyLnBybworCitQYXRjaCA2LjEuNDYzCitQcm9ibGVtOiAgICBXaGVuIHdyaXRpbmcgYSBjb21wcmVzc2VkIGZpbGUsIHRoZSBmaWxlIG5hbWUgdGhhdCBnemlwIHN0b3JlcyBpbgorCSAgICB0aGUgZmlsZSBpcyB0aGUgd2VpcmQgdGVtcG9yYXJ5IGZpbGUgbmFtZS4gKERhdmlkIFJlbm5hbGxzKQorU29sdXRpb246ICAgVXNlIHRoZSByZWFsIGZpbGUgbmFtZSB3aGVuIHBvc3NpYmxlLgorRmlsZXM6CSAgICBydW50aW1lL3BsdWdpbi9nemlwLnZpbQorCitQYXRjaCA2LjEuNDY0CitQcm9ibGVtOiAgICBDcmFzaCB3aGVuIHVzaW5nIEMrKyBzeW50YXggaGlnaGxpZ2h0aW5nLiAoR2VyaGFyZCBIb2NoaG9semVyKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgbmVnYXRpdmUgaW5kZXguCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjEuNDY1IChhZnRlciA2LjEuNDU0KQorUHJvYmxlbTogICAgQ29tcGlsZSBlcnJvciB3aGVuIHVzaW5nIGN5Z3dpbi4KK1NvbHV0aW9uOiAgIENoYW5nZSAjaWZkZWYgV0lOMzIgdG8gI2lmZGVmIFdJTjMyNjQuIChBbGVqYW5kcm8gTG9wZXotVmFsZW5jaWEpCisJICAgIFVuZGVmaW5lIFdJTjMyIGFmdGVyIGluY2x1ZGluZyB3aW5kb3dzLmgKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4xLjQ2NgorUHJvYmxlbTogICAgVGhlICItZiIgYXJndW1lbnQgaXMgYSBiaXQgb2JzY3VyZS4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgIi0tbm9mb3JrIiBhcmd1bWVudC4gIEltcHJvdmUgdGhlIGhlbHAgdGV4dCBhIGJpdC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvc3RhcnRpbmcudHh0LCBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMS40NjcKK1Byb2JsZW06ICAgIFNldHRpbmcgdGhlIHdpbmRvdyB0aXRsZSBkb2Vzbid0IHdvcmsgZm9yIENoaW5lc2UuCitTb2x1dGlvbjogICBVc2UgYW4gWDExIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdGV4dCB0byBhIHRleHQgcHJvcGVydHkuIChLZW50YXJvCisJICAgIE5ha2F6YXdhKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMS40NjgKK1Byb2JsZW06ICAgICI6bWtzZXNzaW9uIiBhbHNvIHN0b3JlcyBmb2xkcyBmb3IgYnVmZmVycyB3aGljaCB3aWxsIG5vdCBiZQorCSAgICByZXN0b3JlZC4KK1NvbHV0aW9uOiAgIE9ubHkgc3RvcmUgZm9sZHMgZm9yIGEgYnVmZmVyIHdpdGggJ2J1ZnR5cGUnIGVtcHR5IGFuZCBoZWxwIGZpbGVzLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjEuNDY5CitQcm9ibGVtOiAgICAnbGlzdGNoYXJzJyBjYW5ub3QgY29udGFpbiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBIYW5kbGUgbXVsdGktYnl0ZSBVVEYtOCBsaXN0IGNoYXJhY3RlcnMuIChNYXR0aGV3IFNhbXNvbm9mZikKK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYywgc3JjL29wdGlvbi5jLCBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4xLjQ3MCAobGFuZykKK1Byb2JsZW06ICAgIFBvbGlzaCBtZXNzYWdlcyBkb24ndCBzaG93IHVwIGNvcnJlY3RseSBvbiBNUy1XaW5kb3dzLgorU29sdXRpb246ICAgQ29udmVydCBtZXNzYWdlcyB0byBjcDEyNTAuIChNaWtvbGFqIE1hY2hvd3NraSkKKwkgICAgQWxzbyBhZGQgRW5nbGlzaCBtZXNzYWdlIHRyYW5zbGF0aW9ucywgYmVjYXVzZSBpdCBnb3QgaW4gdGhlIHdheQorCSAgICBvZiB0aGUgcGF0Y2guCitGaWxlczoJICAgIE1ha2VmaWxlLCBzcmMvcG8vTWFrZWZpbGUsIHNyYy9wby9lbl9nYi5wbywgc3JjL3BvL3BsLnBvCisKK1BhdGNoIDYuMS40NzEKK1Byb2JsZW06ICAgICI6anVtcHMiIG91dHB1dCBjb250aW51ZXMgYWZ0ZXIgcHJlc3NpbmcgInEiIGF0IHRoZSBtb3JlLXByb21wdC4KKwkgICAgKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgQ2hlY2sgZm9yICJnb3RfaW50IiBiZWluZyBzZXQuCitGaWxlczoJICAgIHNyYy9tYXJrLmMKKworUGF0Y2ggNi4xLjQ3MgorUHJvYmxlbTogICAgV2hlbiB0aGVyZSBpcyBhbiBhdXRoZW50aWNhdGlvbiBlcnJvciB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIFgKKwkgICAgc2VydmVyIFZpbSBleGl0cy4KK1NvbHV0aW9uOiAgIFVzZSBYU2V0SU9FcnJvckhhbmRsZXIoKSB0byBjYXRjaCB0aGUgZXJyb3IgYW5kIGxvbmdqbXAoKSB0byBhdm9pZAorCSAgICB0aGUgZXhpdC4gIEFsc28gZG8gdGhpcyBpbiB0aGUgbWFpbiBsb29wLCBzbyB0aGF0IHdoZW4gdGhlIFgKKwkgICAgc2VydmVyIGV4aXRzIGEgVmltIHJ1bm5pbmcgaW4gYSBjb25zb2xlIGlzbid0IGtpbGxlZC4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL21haW4uYywgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjEuNDczCitQcm9ibGVtOiAgICBSZWZlcnJpbmcgdG8gJGN1cndpbiBvciAkY3VyYnVmIGluIFBlcmwgNS42IGNhdXNlcyBhIGNyYXNoLgorU29sdXRpb246ICAgQWRkICJwVEhYXyIgdG8gY3VyX3ZhbCgpLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvaWZfcGVybC54cworCitQYXRjaCA2LjEuNDc0CitQcm9ibGVtOiAgICBXaGVuIG9wZW5pbmcgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgaW4gRXggbW9kZSBpdCdzIGltcG9zc2libGUgdG8KKwkgICAgZ28gYmFjay4gKFBhdm9sIEp1aGFzKQorU29sdXRpb246ICAgUmVzZXQgImV4bW9kZV9hY3RpdmUiIGFuZCByZXN0b3JlIGl0IHdoZW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cKKwkgICAgaXMgY2xvc2VkLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCisKK1BhdGNoIDYuMmYuMDAxCitQcm9ibGVtOiAgICBUaGUgY29uZmlndXJlIGNoZWNrIGZvciBSdWJ5IGRpZG4ndCB3b3JrIHByb3Blcmx5IGZvciBSdWJ5IDEuOC4wLgorU29sdXRpb246ICAgQ2hhbmdlIHRoZSB3YXkgdGhlIFJ1YnkgY2hlY2sgaXMgZG9uZS4gKEFyb24gR3JpZmZpcykKK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMmYuMDAyCitQcm9ibGVtOiAgICBUaGUgb3V0cHV0IG9mICI6bHMiIGRvZXNuJ3Qgc2hvdyB3aGV0aGVyIGEgYnVmZmVyIGhhZCByZWFkIGVycm9ycy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgIngiIGZsYWcgaW4gdGhlICI6bHMiIG91dHB1dC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvd2luZG93cy50eHQsIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjJmLjAwMworUHJvYmxlbTogICAgVGVzdDQ5IGRvZXNuJ3QgcHJvcGVybHkgdGVzdCB0aGUgYmVoYXZpb3Igb2YgIjpjYXRjaCIgd2l0aG91dCBhbgorCSAgICBhcmd1bWVudC4KK1NvbHV0aW9uOiAgIFVwZGF0ZSB0ZXN0NDkuIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvdGVzdGRpci90ZXN0NDkub2ssIHNyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KKworUGF0Y2ggNi4yZi4wMDQKK1Byb2JsZW06ICAgICJ2aW0gLS12ZXJzaW9uIiBhbHdheXMgdXNlcyBDUi9MRiBpbiB0aGUgb3V0cHV0LgorU29sdXRpb246ICAgT21pdCB0aGUgQ1IuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yZi4wMDUKK1Byb2JsZW06ICAgIFR3byBlcnJvciBtZXNzYWdlcyB3aXRob3V0IGEgY29sb24gYWZ0ZXIgdGhlIG51bWJlci4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgY29sb24uIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9pZl9jc2NvcGUuYworCitQYXRjaCA2LjJmLjAwNgorUHJvYmxlbTogICAgV2hlbiBzYXZpbmcgYSBmaWxlIHRha2VzIGEgd2hpbGUgYW5kIFZpbSByZWdhaW5zIGZvY3VzIHRoaXMgY2FuCisJICAgIHJlc3VsdCBpbiBhICJmaWxlIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0iIHdhcm5pbmcgYW5kIG1sX2dldCgpCisJICAgIGVycm9ycy4gKE1pa2UgV2lsbGlhbXMpCitTb2x1dGlvbjogICBBZGQgdGhlICJiX3NhdmluZyIgZmxhZyB0byBhdm9pZCBjaGVja2luZyB0aGUgdGltZXN0YW1wIHdoaWxlIHRoZQorCSAgICBidWZmZXIgaXMgYmVpbmcgc2F2ZWQuIChNaWNoYWVsIFNjaGFhcCkKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvc3RydWN0cy5oCisKK1BhdGNoIDYuMmYuMDA3CitQcm9ibGVtOiAgICBJcml4IGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBtdWx0aXBsZSBkZWZpbmVkIHN5bWJvbHMuCisJICAgIHZzbnByaW50ZigpIGlzIG5vdCBhdmFpbGFibGUuICAoQ2hhcmxlcyBDYW1wYmVsbCkKK1NvbHV0aW9uOiAgIEluc2VydCBFWFRFUk4gZm9yIHZhcmlhYmxlcyBpbiBnbG9iYWxzLmguICBDaGFuZ2UgdGhlIGNvbmZpZ3VyZQorCSAgICBjaGVjayBmb3IgdnNucHJpbnRmKCkgZnJvbSBjb21waWxpbmcgdG8gbGlua2luZy4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvZ2xvYmFscy5oCisKK1BhdGNoIDYuMmYuMDA4CitQcm9ibGVtOiAgICBUaGUgQWFwIHJlY2lwZSBkb2Vzbid0IHdvcmsgd2l0aCBBYXAgMC4xNDkuCitTb2x1dGlvbjogICBDaGFuZ2UgdGFyZ2V0YXJnIHRvIFRBUkdFVEFSRy4gIFVwZGF0ZSB0aGUgbXlzaWduIGZpbGUuCitGaWxlczoJICAgIHNyYy9tYWluLmFhcCwgc3JjL215c2lnbgorCitQYXRjaCA2LjJmLjAwOSAoZXh0cmEpCitQcm9ibGVtOiAgICBTbWFsbCBwcm9ibGVtIHdoZW4gYnVpbGRpbmcgd2l0aCBCb3JsYW5kIDUuMDEuCitTb2x1dGlvbjogICBVc2UgbWtkaXIoKSBpbnN0ZWFkIG9mIF9ta2RpcigpLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmgKKworUGF0Y2ggNi4yZi4wMTAKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIG1pc3NpbmcgcHJvdG90eXBlcy4KK1NvbHV0aW9uOiAgIEFkZCBtaXNzaW5nIHByb3RvdHlwZXMuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgc3JjL2lmX2NzY29wZS5jCisKK1BhdGNoIDYuMmYuMDExCitQcm9ibGVtOiAgICBUaGUgY29uZmlndXJlIHNjcmlwdCBkb2Vzbid0IHdvcmsgd2l0aCBhdXRvY29uZiAyLjV4LgorU29sdXRpb246ICAgQWRkIHNxdWFyZSBicmFja2V0cyBhcm91bmQgYSBoZWFkZXIgY2hlY2suIChBcm9uIEdyaWZmaXMpCisJICAgIE5vdGU6IHRvdWNoIHNyYy9hdXRvL2NvbmZpZ3VyZSBhZnRlciBhcHBseWluZyB0aGlzIHBhdGNoLgorRmlsZXM6CSAgICBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMmYuMDEyCitQcm9ibGVtOiAgICAiOmVjaG9lcnIiIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgaW5zaWRlIHRyeS9lbmR0cnkuCitTb2x1dGlvbjogICBEb24ndCByZXNldCBkaWRfZW1zZyBpbnNpZGUgYSB0cnkvZW5kdHJ5LiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjJmLjAxMyAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWNpbnRvc2g6IENvbXBpbGVyIHdhcm5pbmcgZm9yIGEgdHJpZ3JhcGguCitTb2x1dGlvbjogICBJbnNlcnQgYSBiYWNrc2xhc2ggYmVmb3JlIGVhY2ggcXVlc3Rpb24gbWFyay4gKFBldGVyIEN1Y2thKQorRmlsZXM6CSAgICBzcmMvb3NfbWFjLmgKKworUGF0Y2ggNi4yZi4wMTQgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjaW50b3NoOiBleF9ldmFsIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcHJvamVjdCBmaWxlLgorU29sdXRpb246ICAgQWRkIGV4X2V2YWwuIChEYW55IFN0LUFtYW50KQorRmlsZXM6CSAgICBzcmMvb3NfbWFjLnBicHJvai9wcm9qZWN0LnBieHByb2oKKworUGF0Y2ggNi4yZi4wMTUgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gY2hhbmdpbmcgaGVhZGVyIGZpbGVzIG5vdCBhbGwgc291cmNlIGZpbGVzIGludm9sdmVkCisJICAgIGFyZSByZWNvbXBpbGVkLgorU29sdXRpb246ICAgSW1wcm92ZSB0aGUgZGVwZW5kZW5jeSBydWxlcy4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL01ha2VfY3lnLm1haywgc3JjL01ha2VfbWluZy5tYWsKKworUGF0Y2ggNi4yZi4wMTYKK1Byb2JsZW06ICAgICJ2aW0gLS12ZXJzaW9uID4gZmYiIG9uIG5vbi1Vbml4IHN5c3RlbXMgcmVzdWx0cyBpbiBhIGZpbGUgd2l0aCBhCisJICAgIG1pc3NpbmcgbGluZSBicmVhayBhdCB0aGUgZW5kLiAoQmlsbCBNY0NBcnRoeSkKK1NvbHV0aW9uOiAgIEFkZCBhIGxpbmUgYnJlYWsuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4yZi4wMTcKK1Byb2JsZW06ICAgIFVuaXg6IHN0YXJ0aW5nIFZpbSBpbiB0aGUgYmFja2dyb3VuZCBhbmQgdGhlbiBicmluZ2luZyBpdCB0byB0aGUKKwkgICAgZm9yZWdyb3VuZCBtYXkgY2F1c2UgdGhlIHRlcm1pbmFsIHNldHRpbmdzIHRvIGJlIHdyb25nLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHRjc2V0YXR0cigpIHRvIHJldHVybiBhbiBlcnJvciwgcmV0cnkgd2hlbiBpdCBkb2VzLgorCSAgICAoUGF1bCBUYXBwZXIpCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yZi4wMTgKK1Byb2JsZW06ICAgIE1hYyBPUyBYIDEwLjI6IE9LIGlzIGRlZmluZWQgdG8gemVybyBpbiBjdXJzdXMuaCB3aGlsZSBWaW0gdXNlcworCSAgICBvbmUuICBSZWRlZmluaW5nIGl0IGNhdXNlcyBhIHdhcm5pbmcgbWVzc2FnZS4KK1NvbHV0aW9uOiAgIFVuZGVmaW5lIE9LIGJlZm9yZSBkZWZpbmluZyBpdCB0byBvbmUuIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIHNyYy92aW0uaAorCitQYXRjaCA2LjJmLjAxOQorUHJvYmxlbTogICAgTWFjIE9TIFggMTAuMjogQ09MT1JfQkxBQ0sgYW5kIENPTE9SX1dISVRFIGFyZSBkZWZpbmVkIGluCisJICAgIGN1cnNlcy5oLgorU29sdXRpb246ICAgUmVuYW1lIHRoZW0gdG8gUFJDT0xPUl9CTEFDSyBhbmQgUFJDT0xPUl9XSElURS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4yZi4wMjAKK1Byb2JsZW06ICAgIFdpbjMyOiB0ZXN0NTAgcHJvZHVjZXMgYmVlcHMgYW5kIGZhaWxzIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBkaWZmLgorU29sdXRpb246ICAgUmVtb3ZlIGVtcHR5IGxpbmVzIGFuZCBjb252ZXJ0IHRoZSBvdXRwdXQgdG8gZG9zIGZpbGVmb3JtYXQuCitGaWxlczoJICAgIHNyYy90ZXN0ZGlyL3Rlc3Q1MC5pbgorCitQYXRjaCA2LjJmLjAyMQorUHJvYmxlbTogICAgUnVubmluZyBjb25maWd1cmUgd2l0aCAiLS1lbmFibGUtbmV0YmVhbnMiIGRpc2FibGVzIE5ldGJlYW5zLgorCSAgICAoR29yZG9uIFByaWV1cikKK1NvbHV0aW9uOiAgIEZpeCB0aGUgdGVzdHMgaW4gY29uZmlndXJlLmluIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRvIGVuYWJsZSBhCisJICAgIGZlYXR1cmUuICBGaXggdGhhdCAiLS1lbmFibGUtYWNsIiByZXBvcnRlZCAieWVzIiBjb25mdXNpbmdseS4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvbXlzaWduCisKK1BhdGNoIDYuMmYuMDIyCitQcm9ibGVtOiAgICBBIGJvZ3VzIHZhbHVlIGZvciAnZm9sZG1hcmtlcicgaXMgbm90IHJlamVjdGVkLCBwb3NzaWJseSBjYXVzaW5nIGEKKwkgICAgaGFuZy4gKERlcmVrIFd5YXR0KQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgbm9uLWVtcHR5IHN0cmluZyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjb21tYS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMmYuMDIzCitQcm9ibGVtOiAgICBXaGVuIHRoZSBoZWxwIGZpbGVzIGFyZSBub3QgaW4gJFZJTVJVTlRJTUUgYnV0ICdoZWxwZmlsZScgaXMKKwkgICAgY29ycmVjdCBWaW0gc3RpbGwgY2FuJ3QgZmluZCB0aGUgaGVscCBmaWxlcy4KK1NvbHV0aW9uOiAgIEFsc28gbG9vayBmb3IgYSB0YWdzIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBvZiAnaGVscGZpbGUnLgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yZi4wMjQKK1Byb2JsZW06ICAgIFdoZW4gJ2RlbGNvbWJpbmUnIGlzIHNldCBhbmQgYSBjaGFyYWN0ZXIgaGFzIG1vcmUgdGhhbiB0d28KKwkgICAgY29tcG9zaW5nIGNoYXJhY3RlcnMgIngiIGRlbGV0ZXMgdGhlbSBhbGwuCitTb2x1dGlvbjogICBBbHdheXMgZGVsZXRlIG9ubHkgdGhlIGxhc3QgY29tcG9zaW5nIGNoYXJhY3Rlci4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4yZi4wMjUKK1Byb2JsZW06ICAgIFdoZW4gcmVhZGluZyBhIGZpbGUgZnJvbSBzdGRpbiB0aGF0IGhhcyBET1MgbGluZSBlbmRpbmdzIGJ1dCBhCisJICAgIG1pc3NpbmcgZW5kLW9mLWxpbmUgZm9yIHRoZSBsYXN0IGxpbmUgJ2ZpbGVmb3JtYXQnIGJlY29tZXMgInVuaXgiLgorCSAgICAoQmlsbCBNY0NhcnRoeSkKK1NvbHV0aW9uOiAgIERvbid0IGFkZCB0aGUgbWlzc2luZyBsaW5lIGJyZWFrIHdoZW4gcmUtcmVhZGluZyB0aGUgdGV4dCBmcm9tIHRoZQorCSAgICBidWZmZXIuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjJmLjAyNgorUHJvYmxlbTogICAgV2hlbiB0eXBpbmcgbmV3IHRleHQgYXQgdGhlIGNvbW1hbmQgbGluZSwgb2xkIGNvbXBvc2luZyBjaGFyYWN0ZXJzCisJICAgIG1heSBiZSBkaXNwbGF5ZWQuCitTb2x1dGlvbjogICBEb24ndCByZWFkIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGZyb20gYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKKwkgICAgdGV4dCB0byBiZSBkaXNwbGF5ZWQuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jLCBzcmMvbWJ5dGUuYywgc3JjL21lc3NhZ2UuYywgc3JjL3Byb3RvL21ieXRlLnBybywKKwkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMmYuMDI3CitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5ncyBmb3IgdW5zaWduZWQgY2hhciBwb2ludGVycy4gKFRvbnkgTGVuZWlzKQorU29sdXRpb246ICAgQWRkIHR5cGVjYXN0cyB0byBjaGFyIHBvaW50ZXIuCitGaWxlczoJICAgIHNyYy9xdWlja2ZpeC5jCisKK1BhdGNoIDYuMmYuMDI4CitQcm9ibGVtOiAgICBHVEs6IFdoZW4gJ2ltYWN0aXZhdGVrZXknIGlzIGVtcHR5IGFuZCBYSU0gaXMgaW5hY3RpdmUgaXQgY2FuJ3QgYmUKKwkgICAgbWFkZSBhY3RpdmUgYWdhaW4uICBDdXJzb3IgaXNuJ3QgdXBkYXRlZCBpbW1lZGlhdGVseSB3aGVuIGNoYW5naW5nCisJICAgIFhJTSBhY3RpdmF0aW9uLiAgSmFwYW5lc2UgWElNIG1heSBoYW5nIHdoZW4gdXNpbmcgJ2ltYWN0aXZhdGVrZXknLgorCSAgICBDYW4ndCBhY3RpdmF0ZSBYSU0gYWZ0ZXIgdHlwaW5nIGZGdFQgY29tbWFuZCBvciAiOnNoIi4KK1NvbHV0aW9uOiAgIFByb3Blcmx5IHNldCB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB0aGUgSU0gaXMgYWN0aXZlLiAgVXBkYXRlIHRoZQorCSAgICBjdXJzb3IgcmlnaHQgYXdheS4gIERvIG5vdCBzZW5kIGEga2V5LXJlbGVhc2UgZXZlbnQuICBIYW5kbGUKKwkgICAgTm9ybWFsIG1vZGUgYW5kIHJ1bm5pbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCBkaWZmZXJlbnRseS4KKwkgICAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yZi4wMjkKK1Byb2JsZW06ICAgIE1peGluZyB1c2Ugb2YgaW50IGFuZCBlbnVtLgorU29sdXRpb246ICAgQWRqdXN0IGFyZ3VtZW50IHR5cGUgb2YgY3NfdXNhZ2VfbXNnKCkuICBGaXggd3JvbmcgdHlwZWRlZi4KK0ZpbGVzOgkgICAgc3JjL2lmX2NzY29wZS5jLCBzcmMvaWZfY3Njb3BlLmgKKworUGF0Y2ggNi4yZi4wMzAgKGFmdGVyIDYuMmYuMDI4KQorUHJvYmxlbTogICAgQ3Vyc29yIG1vdmVzIHVwIHdoZW4gdXNpbmcgWElNLgorU29sdXRpb246ICAgUmVzZXQgaW1fcHJlZWRpdF9jdXJzb3IuICAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjJmLjAzMQorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiBsaXN0aW5nIGEgZnVuY3Rpb24gYXJndW1lbnQgaW4gdGhlIGRlYnVnZ2VyLiAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgSW5pdCB0aGUgbmFtZSBmaWVsZCBvZiBhbiBhcmd1bWVudCB0byBOVUxMLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMmYuMDMyCitQcm9ibGVtOiAgICBXaGVuIGEgd3JpdGUgZmFpbHMgZm9yIGEgIjpzaWxlbnQhIiB3aGlsZSBpbnNpZGUgdHJ5L2VuZHRyeSB0aGUKKwkgICAgQnVmV3JpdGVQb3N0IGF1dG9jb21tYW5kcyBhcmUgbm90IHRyaWdnZXJlZC4KK1NvbHV0aW9uOiAgIENoZWNrIHRoZSBlbXNnX3NpbGVudCBmbGFnIGluIHNob3VsZF9hYm9ydCgpLiAoU2VydmF0aXVzIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V4X2V2YWwuYywgc3JjL3Rlc3RkaXIvdGVzdDQ5Lm9rLCBzcmMvdGVzdGRpci90ZXN0NDkudmltCisKK1BhdGNoIDYuMmYuMDMzCitQcm9ibGVtOiAgICBDc2NvcGU6IHJlLWVudHJhbmNlIHByb2JsZW0gZm9yICI6Y3Njb3BlIiBjb21tYW5kLiAgQ2hlY2tpbmcgZm9yCisJICAgIGR1cGxpY2F0ZSBkYXRhYmFzZSBkaWRuJ3Qgd29yayB3ZWxsIGZvciBXaW45NS4gIERpZG4ndCBjaGVjayBmb3IKKwkgICAgZHVwbGljYXRlIGRhdGFiYXNlcyBhZnRlciBhbiBlbXB0eSBlbnRyeS4KK1NvbHV0aW9uOiAgIERvbid0IHNldCBwb3N0cG9uZWRfc3BsaXQgdG9vIGVhcmx5LiAgUmVtZW1iZXIgZmlyc3QgZW1wdHkKKwkgICAgZGF0YWJhc2UgZW50cnkuIChTZXJnZXkgS2hvcmV2KQorRmlsZXM6CSAgICBzcmMvaWZfY3Njb3BlLmMKKworUGF0Y2ggNi4yZi4wMzQKK1Byb2JsZW06ICAgIFRoZSBuZXRiZWFucyBpbnRlcmZhY2UgY2Fubm90IGJlIHVzZWQgb24gc3lzdGVtcyB3aXRob3V0CisJICAgIHZzbnByaW50ZigpLiAoVG9ueSBMZW5laXMpCitTb2x1dGlvbjogICBVc2UgRU1TRygpLCBFTVNHTigpIGFuZCBFTVNHMigpIGluc3RlYWQuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4yZi4wMzUKK1Byb2JsZW06ICAgIFRoZSBjb25maWd1cmUgY2hlY2sgZm9yIHRoZSBuZXRiZWFucyBpbnRlcmZhY2UgZG9lc24ndCB3b3JrIGlmIHRoZQorCSAgICBzb2NrZXQgYW5kIG5zbCBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIHRoZSBzb2NrZXQgYW5kIG5zbCBsaWJyYXJpZXMgYmVmb3JlIHRoZSBuZXRiZWFucyBjaGVjay4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMmYuMDM2CitQcm9ibGVtOiAgICBNb3ZpbmcgbGVmdHdhcmRzIG92ZXIgdGV4dCB3aXRoIGFuIGlsbGVnYWwgVVRGLTggYnl0ZSBtb3ZlcyBvbmUKKwkgICAgYnl0ZSBpbnN0ZWFkIG9mIG9uZSBjaGFyYWN0ZXIuCitTb2x1dGlvbjogICBJZ25vcmUgYW4gaWxsZWdhbCBieXRlIGFmdGVyIHRoZSBjdXJzb3IgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMmYuMDM3CitQcm9ibGVtOiAgICBXaGVuIHJlY2VpdmluZyBhIE5ldGJlYW5zIGNvbW1hbmQgYXQgdGhlIGhpdC1lbnRlciBvciBtb3JlIHByb21wdAorCSAgICB0aGUgc2NyZWVuIGlzIHJlZHJhd24gYnV0IFZpbSBpcyBzdGlsbCB3YWl0aW5nIGF0IHRoZSBwcm9tcHQuCitTb2x1dGlvbjogICBRdWl0IHRoZSBwcm9tcHQgbGlrZSBhIENUUkwtQyB3YXMgdHlwZWQuCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMmYuMDM4CitQcm9ibGVtOiAgICBUaGUgZGVwZW5kZW5jeSB0byBydW4gYXV0b2NvbmYgY2F1c2VzIGEgcGF0Y2ggZm9yIGNvbmZpZ3VyZS5pbgorCSAgICB0byBydW4gYXV0b2NvbmYsIGV2ZW4gdGhvdWdoIHRoZSBjb25maWd1cmUgc2NyaXB0IHdhcyB1cGRhdGVkIGFzCisJICAgIHdlbGwuCitTb2x1dGlvbjogICBPbmx5IHJ1biBhdXRvY29uZiB3aXRoICJtYWtlIGF1dG9jb25mIi4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMmYuMDM5CitQcm9ibGVtOiAgICBDVFJMLVcgSyBtYWtlcyB0aGUgbmV3IHRvcCB3aW5kb3cgdmVyeSBoaWdoLgorU29sdXRpb246ICAgV2hlbiAnZXF1YWxhbHdheXMnIGlzIHNldCBlcXVhbGl6ZSB0aGUgd2luZG93IGhlaWdodHMuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVkVSU0lPTiA2LjMJCQkJCQkqdmVyc2lvbi02LjMqCisKK1RoaXMgc2VjdGlvbiBpcyBhYm91dCBpbXByb3ZlbWVudHMgbWFkZSBiZXR3ZWVuIHZlcnNpb24gNi4yIGFuZCA2LjMuCisKK1RoaXMgaXMgbWFpbmx5IGEgYnVnLWZpeCByZWxlYXNlLiAgVGhlcmUgYXJlIGFsc28gYSBmZXcgbmV3IGZlYXR1cmVzLgorVGhlIG1ham9yIG51bWJlciBvZiBuZXcgaXRlbXMgaXMgaW4gdGhlIHJ1bnRpbWUgZmlsZXMgYW5kIHRyYW5zbGF0aW9ucy4KKworCitDaGFuZ2VkCQkJCQkJCSpjaGFuZ2VkLTYuMyoKKy0tLS0tLS0KKworVGhlIGludHJvIG1lc3NhZ2UgYWxzbyBkaXNwbGF5cyBhIG5vdGUgYWJvdXQgc3BvbnNvcmluZyBWaW0sIG1peGVkIHJhbmRvbWx5Cit3aXRoIHRoZSBtZXNzYWdlIGFib3V0IGhlbHBpbmcgY2hpbGRyZW4gaW4gVWdhbmRhLgorCitJbmNsdWRlZCB0aGUgdHJhbnNsYXRlZCBtZW51cywga2V5bWFwcyBhbmQgdHV0b3JzIHdpdGggdGhlIG5vcm1hbCBydW50aW1lCitmaWxlcy4gIFRoZSBzZXBhcmF0ZSAibGFuZyIgYXJjaGl2ZSBub3cgb25seSBjb250YWlucyB0cmFuc2xhdGVkIG1lc3NhZ2VzLgorCitNYWRlIHRoZSB0cmFuc2xhdGVkIG1lbnUgZmlsZSBuYW1lcyBhIGJpdCBtb3JlIGNvbnNpc3RlbnQuICBVc2UgImxhdGluMSIgZm9yCisiaXNvXzg4NTktMSIgYW5kICJpc29fODg1OS0xNSIuCisKK1JlbW92ZWQgdGhlICJmaWxlX3NlbGVjdC52aW0iIHNjcmlwdCBmcm9tIHRoZSBkaXN0cmlidXRpb24uICBJdCdzIG5vdCBtb3JlCit1c2VmdWwgdGhhbiBvdGhlciBzY3JpcHRzIHRoYXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSB3d3cudmltLm9yZy4KKworVGhlICJydW50aW1lL2RvYy90YWdzIiBmaWxlIGlzIG5vdyBhbHdheXMgaW4gdW5peCBmaWxlZm9ybWF0LiAgT24gTVMtV2luZG93cworaXQgdXNlZCB0byBiZSBkb3MgZmlsZWZvcm1hdCwgYnV0ICI6aGVscHRhZ3MiIGdlbmVyYXRlcyBhIHVuaXggZm9ybWF0IGZpbGUuCisKKworQWRkZWQJCQkJCQkJKmFkZGVkLTYuMyoKKy0tLS0tCisKK05ldyBjb21tYW5kczoKKwk6Y05maWxlCQlnbyB0byBsYXN0IGVycm9yIGluIHByZXZpb3VzIGZpbGUKKwk6Y3BmaWxlCQlpZGVtCisJOmNoYW5nZXMJcHJpbnQgdGhlIGNoYW5nZSBsaXN0CisJOmtlZXBtYXJrcwlmb2xsb3dpbmcgY29tbWFuZCBrZWVwcyBtYXJrcyB3aGVyZSB0aGV5IGFyZQorCTprZWVwanVtcHMJZm9sbG93aW5nIGNvbW1hbmQga2VlcHMganVtcGxpc3QgYW5kIG1hcmtzCisJOmxvY2ttYXJrcwlmb2xsb3dpbmcgY29tbWFuZCBrZWVwcyBtYXJrcyB3aGVyZSB0aGV5IGFyZQorCTpyZWRyYXdzdGF0dXMJZm9yY2UgYSByZWRyYXcgb2YgdGhlIHN0YXR1cyBsaW5lKHMpCisKK05ldyBvcHRpb25zOgorCSdhbnRpYWxpYXMnCU1hYyBPUyBYOiB1c2Ugc21vb3RoLCBhbnRpYWxpYXNlZCBmb250cworCSdoZWxwbGFuZycJcHJlZmVycmVkIGhlbHAgbGFuZ3VhZ2VzCisKK1N5bnRheCBmaWxlczoKKwlBcmNoIGludmVudG9yeSAoTmlrb2xhaSBXZWlidWxsKQorCUNhbGVuZGFyIChOaWtvbGFpIFdlaWJ1bGwpCisJQ2ggKFdheW5lIENoZW5nKQorCUNvbnRyb2xsYWJsZSBSZWdleCBNdXRpbGF0b3IgKE5pa29sYWkgV2VpYnVsbCkKKwlEIChKYXNvbiBNaWxscykKKwlEZXNrdG9wIChNaWtvbGFqIE1hY2hvd3NraSkKKwlEaXJjb2xvcnMgKE5pa29sYWkgV2VpYnVsbCkKKwlFbGlua3MgY29uZmlndXJhdGlvbiAoTmlrb2xhaSBXZWlidWxsKQorCUZBU00gKFJvbiBBYXJvbikKKwlHckFEUyBzY3JpcHRzIChTdGVmYW4gRnJvbnplaykKKwlJY2V3bSBtZW51IChKYW1lcyBNYWhsZXIpCisJTERJRiAoWmFrIEpvaG5zb24pCisJTG9jYWxlIGlucHV0LCBmZGNjLiAoRHdheW5lIEJhaWxleSkKKwlQaW5mbyBjb25maWcgKE5pa29sYWkgV2VpYnVsbCkKKwlQeXJleCAoTWFyY28gQmFyaXNpb25lKQorCVJlbGF4IE5HIENvbXBhY3QgKE5pa29sYWkgV2VpYnVsbCkKKwlTbGljZSAoTW9yZWwgQm9kaW4pCisJVkFYIE1hY3JvIEFzc2VtYmx5IChUb20gVWlqbGRlcnQpCisJZ3JhZHMgKFN0ZWZhbiBGcm9uemVrKQorCWxpYmFvIChOaWtvbGFpIFdlaWJ1bGwpCisJbXBsYXllciAoTmlrb2xhaSBXZWlidWxsKQorCXJzdCAoTmlrb2xhaSBXZWlidWxsKQorCXRjc2ggKEdhdXRhbSBJeWVyKQorCXlhbWwgKE5pa29sYWkgV2VpYnVsbCkKKworQ29tcGlsZXIgcGx1Z2luczoKKwlBVFQgZG90IChNYXJjb3MgTWFjZWRvKQorCUFwcGxlIFByb2plY3QgQnVpbGRlciAoQWxleGFuZGVyIHZvbiBCZWxvdykKKwlJbnRlbCAoRGF2aWQgSGFycmlzb24pCisJYmRmIChOaWtvbGFpIFdlaWJ1bGwpCisJaWNjIChQZXRlciBQdWNrKQorCWphdmFjIChEb3VnIEtlYXJucykKKwluZWF0byAoTWFyY29zIE1hY2VkbykKKwlvbnNnbWxzIChSb2JlcnQgQi4gUm93c29tZSkKKwlwZXJsIChDaHJpc3RpYW4gSi4gUm9iaW5zb24pCisJcnN0IChOaWtvbGFpIFdlaWJ1bGwpCisJc2UgKFNtYXJ0RWlmZmVsKSAoRG91ZyBLZWFybnMpCisJdGNsIChEb3VnIEtlYXJucykKKwl4bWx3ZiAoUm9iZXJ0IEIuIFJvd3NvbWUpCisKK0ZpbGV0eXBlIHBsdWdpbnM6CisJQWFwIChCcmFtIE1vb2xlbmFhcikKKwlDaCAoV2F5bmUgQ2hlbmcpCisJQ3NzIChOaWtvbGFpIFdlaWJ1bGwpCisJUHlyZXggKE1hcmNvIEJhcmlzaW9uZSkKKwlSc3QgKE5pa29sYWkgV2VpYnVsbCkKKworSW5kZW50IHNjcmlwdHM6CisJQWFwIChCcmFtIE1vb2xlbmFhcikKKwlDaCAoV2F5bmUgQ2hlbmcpCisJRG9jQm9vayAoTmlrb2xhaSBXZWlidWxsKQorCU1ldGFQb3N0IChFdWdlbmUgTWlua292c2tpaSkKKwlPYmplY3RpdmUtQyAoS2F6dW5vYnUgS3VyaXlhbWEpCisJUHlyZXggKE1hcmNvIEJhcmlzaW9uZSkKKwlSc3QgKE5pa29sYWkgV2VpYnVsbCkKKwlUY3NoIChHYXV0YW0gSXllcikKKwlYRnJlZTg2IGNvbmZpZ3VyYXRpb24gZmlsZSAoTmlrb2xhaSBXZWlidWxsKQorCVpzaCAoTmlrb2xhaSBXZWlidWxsKQorCitLZXltYXBzOgorCUdyZWVrIGZvciBjcDEyNTMgKFBhbmFnaW90aXMgTG91cmlkYXMpCisJSHVuZ2FyaWFuIChNYWd5YXIpIChMYXN6bG8gWmF2YWxldGEpCisJUGVyc2lhbi1JcmFuaWFuIChCZWhuYW0gRXNmYWhib2QpCisKK01lc3NhZ2UgdHJhbnNsYXRpb25zOgorCUNhdGFsYW4gKEVybmVzdCBBZHJvZ3VlKQorCVJ1c3NpYW4gKFZhc3NpbHkgUmFnb3NpbikKKwlTd2VkaXNoIChKb2hhbiBTdmVkYmVyZykKKworTWVudSB0cmFuc2xhdGlvbnM6CisJQ2F0YWxhbiAoRXJuZXN0IEFkcm9ndWUpCisJUnVzc2lhbiAoVGltIEFsZXhlZXZza3kpCisJU3dlZGlzaCAoSm9oYW4gU3ZlZGJlcmcpCisKK1R1dG9yIHRyYW5zbGF0aW9uczoKKwlDYXRhbGFuIChFcm5lc3QgQWRyb2d1ZSkKKwlSdXNzaWFuIGluIGNwMTI1MSAoQWxleGV5IEZyb2xvZmYpCisJU2xvdmFrIGluIGNwMTI1MSBhbmQgaXNvODg1OS0yIChMdWJvcyBDZWxrbykKKwlTd2VkaXNoIChKb2hhbiBTdmVkYmVyZykKKwlLb3JlYW4gKEtlZS1Xb24gU2VvKQorCVVURi04IHZlcnNpb24gb2YgdGhlIEphcGFuZXNlIHR1dG9yIChZYXN1aGlybyBNYXRzdW1vdG8pIFVzZSB0aGlzIGFzCisJCXRoZSBvcmlnaW5hbCwgY3JlYXRlIHRoZSBvdGhlciBKYXBhbmVzZSB0dXRvciBieSBjb252ZXJzaW9uLgorCitJbmNsdWRlZCAicnVzc2lhbi50eHQiIGhlbHAgZmlsZS4gKFZhc3NpbHkgUmFnb3NpbikKKworSW5jbHVkZSBFbmNhcHN1bGF0ZWQgUG9zdFNjcmlwdCBhbmQgUERGIHZlcnNpb25zIG9mIHRoZSBWaW0gbG9nbyBpbiB0aGUgZXh0cmEKK2FyY2hpdmUuCisKK1RoZSBoZWxwIGhpZ2hsaWdodGluZyBmaW5kcyB0aGUgaGlnaGxpZ2h0IGdyb3VwcyBhbmQgc2hvd3MgdGhlbSBpbiB0aGUgY29sb3IKK3RoYXQgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gKGlkZWEgZnJvbSBZYWtvdiBMZXJuZXIpCisKK1RoZSBiaWcgV2luMzIgdmVyc2lvbiBpcyBub3cgY29tcGlsZWQgd2l0aCBSdWJ5IGludGVyZmFjZSwgdmVyc2lvbiAxLjguICBGb3IKK1B5dGhvbiB2ZXJzaW9uIDIuMyBpcyB1c2VkLiAgRm9yIFBlcmwgdmVyc2lvbiA1LjggaXMgdXNlZC4KKworVGhlICJmdGRldGVjdCIgZGlyZWN0b3J5IGlzIG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gIFRoZSBET1MgaW5zdGFsbAorcHJvZ3JhbSBjcmVhdGVzIGl0LgorCisKK0ZpeGVkCQkJCQkJCSpmaXhlZC02LjMqCistLS0tLQorCitUZXN0IDQyIGZhaWxlZCBvbiBNUy1XaW5kb3dzLiAgU2V0IGFuZCByZXNldCAnZmlsZWZvcm1hdCcgYW5kICdiaW5hcnknIG9wdGlvbnMKK2hlcmUgYW5kIHRoZXJlLiAgKFdhbHRlciBCcmlzY29lKQorCitUaGUgZXhwbG9yZXIgcGx1Z2luIGRpZG4ndCB3b3JrIGZvciBkb3VibGUtYnl0ZSAnZW5jb2Rpbmcncy4KKworVXNlICJjb3B5IC95IiBpbiBNYWtlX2JjNS5tYWsgdG8gYXZvaWQgYSBwcm9tcHQgZm9yIG92ZXJ3cml0aW5nLgorCitQYXRjaCA2LjIuMDAxCitQcm9ibGVtOiAgICBUaGUgIjpzdG9waW5zZXJ0IiBjb21tYW5kIGRvZXNuJ3QgaGF2ZSBhIGhlbHAgdGFnLgorU29sdXRpb246ICAgQWRkIHRoZSB0YWcuIChBbnRvaW5lIEouICBNZWNoZWx5bmNrKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9pbnNlcnQudHh0LCBydW50aW1lL2RvYy90YWdzCisKK1BhdGNoIDYuMi4wMDIKK1Byb2JsZW06ICAgIFdoZW4gY29tcGlsZWQgd2l0aCB0aGUgK211bHRpX2J5dGUgZmVhdHVyZSBidXQgd2l0aG91dCArZXZhbCwKKwkgICAgZGlzcGxheWluZyBVVEYtOCBjaGFyYWN0ZXJzIG1heSBjYXVzZSBhIGNyYXNoLiAoS2Fyc3RlbiBIb3BwKQorU29sdXRpb246ICAgQWxzbyBzZXQgdGhlIGRlZmF1bHQgZm9yICdhbWJpd2lkdGgnIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkgICAgK2V2YWwgZmVhdHVyZS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4wMDMKK1Byb2JsZW06ICAgIEdUSyAyOiBkb3VibGUtd2lkZSBjaGFyYWN0ZXJzIGJlbG93IDI1NiBhcmUgbm90IGRpc3BsYXllZAorCSAgICBjb3JyZWN0bHkuCitTb2x1dGlvbjogICBDaGVjayB0aGUgY2VsbCB3aWR0aCBmb3IgY2hhcmFjdGVycyBhYm92ZSAxMjcuIChZYXN1aGlybworCSAgICBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMi4wMDQKK1Byb2JsZW06ICAgIFdpdGggYSBsaW5lLVZpc3VhbCBzZWxlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhICJwIiBjb21tYW5kCisJICAgIHB1dHMgdGhlIHRleHQgb25lIGxpbmUgdXB3YXJkcy4KK1NvbHV0aW9uOiAgIERldGVjdCB0aGF0IHRoZSBsYXN0IGxpbmUgd2FzIGRlbGV0ZWQgYW5kIHB1dCBmb3J3YXJkLiAoVGFybworCSAgICBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjAwNQorUHJvYmxlbTogICAgR1RLOiB0aGUgIkZpbmQiIGFuZCAiRmluZCBhbmQgUmVwbGFjZSIgdG9vbHMgZG9uJ3Qgd29yay4gKEFzY2h3aW4KKwkgICAgTWFyc21hbikKK1NvbHV0aW9uOiAgIFNob3cgdGhlIGRpYWxvZyBhZnRlciBjcmVhdGluZyBpdC4gIChEYXZpZCBOZWNhcykKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjIuMDA2CitQcm9ibGVtOiAgICBUaGUgTmV0YmVhbnMgY29kZSBjb250YWlucyBhbiBvYnNvbGV0ZSBmdW5jdGlvbiB0aGF0IHVzZXMgInZpbTYxIgorCSAgICBhbmQgc2V0cyB0aGUgZmFsbC1iYWNrIHZhbHVlIGZvciAkVklNUlVOVElNRS4KK1NvbHV0aW9uOiAgIERlbGV0ZSB0aGUgb2Jzb2xldGUgZnVuY3Rpb24uCitGaWxlczoJICAgIHNyYy9tYWluLmMsIHNyYy9uZXRiZWFucy5jLCBzcmMvcHJvdG8vbmV0YmVhbnMucHJvCisKK1BhdGNoIDYuMi4wMDcKK1Byb2JsZW06ICAgIExpc3RpbmcgdGFncyBmb3IgQ3Njb3BlIGRvZXNuJ3QgYWx3YXlzIHdvcmsuCitTb2x1dGlvbjogICBBdm9pZCB1c2luZyBzbWdzX2F0dHIoKS4gKFNlcmdleSBLaG9yZXYpCitGaWxlczoJICAgIHNyYy9pZl9jc2NvcGUuYworCitQYXRjaCA2LjIuMDA4CitQcm9ibGVtOiAgICBYSU0gd2l0aCBHVEsgMjogQWZ0ZXIgYmFja3NwYWNpbmcgcHJlZWRpdCBjaGFyYWN0ZXJzIGFyZSB3cm9uZy4KK1NvbHV0aW9uOiAgIFJlc2V0IHRoZSBjdXJzb3IgcG9zaXRpb24uIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi4wMDkKK1Byb2JsZW06ICAgIFdpbjMyOiBUaGUgc2VsZi1pbnN0YWxsaW5nIGV4ZWN1dGFibGUgIkZ1bGwiIHNlbGVjdGlvbiBvbmx5CisJICAgIHNlbGVjdHMgc29tZSBvZiB0aGUgaXRlbXMgdG8gaW5zdGFsbC4gKFNhbG1hbiBNb2hzaW4pCitTb2x1dGlvbjogICBDaGFuZ2UgY29tbWFzIHRvIHNwYWNlcyBpbiBiZXR3ZWVuIHNlY3Rpb24gbnVtYmVycy4KK0ZpbGVzOgkgICAgbnNpcy9ndmltLm5zaQorCitQYXRjaCA2LjIuMDEwCitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgZWZmZWN0aXZlIGFuZCBhIGxpbmUgc3RhcnRzIHdpdGggYQorCSAgICBtdWx0aS1ieXRlIGNoYXJhY3RlciwgbW92aW5nIHRoZSBjdXJzb3IgcmlnaHQgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgT2J0YWluIHRoZSByaWdodCBjaGFyYWN0ZXIgdG8gY29tcHV0ZSB0aGUgY29sdW1uIG9mZnNldC4gKFRhcm8KKwkgICAgTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2NoYXJzZXQuYworCitQYXRjaCA2LjIuMDExCitQcm9ibGVtOiAgICBBbHBoYSBPU0YxOiBzdGF0KCkgaXMgYSBtYWNybyBhbmQgZG9lc24ndCBhbGxvdyBhbiAjaWZkZWYgaGFsZndheS4KKwkgICAgKE1vc2hlIEthbWluc2t5KQorU29sdXRpb246ICAgTW92ZSB0aGUgI2lmZGVmIG91dHNpZGUgb2Ygc3RhdCgpLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi4wMTIKK1Byb2JsZW06ICAgIE1heSBoYW5nIHdoZW4gcG9sbGluZyBmb3IgYSBjaGFyYWN0ZXIuCitTb2x1dGlvbjogICBCcmVhayB0aGUgd2FpdCBsb29wIHdoZW4gbm90IHdhaXRpbmcgZm9yIGEgY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi4wMTMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFRoZSByZWdpc3RyeSBrZXkgZm9yIHVuaW5zdGFsbGluZyBHdmltRXh0IHN0aWxsIHVzZXMgIjYuMSIuCitTb2x1dGlvbjogICBDaGFuZ2UgdGhlIHZlcnNpb24gbnVtYmVyIHRvICI2LjIiLiAoQWppdCBUaGFra2FyKQorRmlsZXM6CSAgICBzcmMvR3ZpbUV4dC9HdmltRXh0LnJlZworCitQYXRjaCA2LjIuMDE0IChhZnRlciA2LjIuMDEyKQorUHJvYmxlbTogICAgWFNNUCBkb2Vzbid0IHdvcmsgd2hlbiB1c2luZyBwb2xsKCkuCitTb2x1dGlvbjogICBVc2UgeHNtcF9pZHggaW5zdGVhZCBvZiBncG1faWR4LiAoTmVpbCBCaXJkKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi4wMTUKK1Byb2JsZW06ICAgIFRoZSAreHNtcCBmZWF0dXJlIGlzIG5ldmVyIGVuYWJsZWQuCitTb2x1dGlvbjogICBNb3ZlIHRoZSAjZGVmaW5lIGZvciBVU0VfWFNNUCB0byBiZWxvdyB3aGVyZSBXQU5UX1gxMSBpcyBkZWZpbmVkLgorCSAgICAoQWxleGV5IEZyb2xvZmYpCitGaWxlczoJICAgIHNyYy9mZWF0dXJlLmgKKworUGF0Y2ggNi4yLjAxNgorUHJvYmxlbTogICAgVXNpbmcgIjpzY3Njb3BlIGZpbmQiIHdpdGggJ2NzY29wZXF1aWNrZml4JyBkb2VzIG5vdCBhbHdheXMgc3BsaXQKKwkgICAgdGhlIHdpbmRvdy4gKEdhcnkgSm9obnNvbikKKwkgICAgV2luMzI6ICI6Y3Njb3BlIGFkZCIgY291bGQgbWFrZSB0aGUgc2NyaXB0IHRoYXQgY29udGFpbnMgaXQKKwkgICAgcmVhZC1vbmx5IHVudGlsIHRoZSBjb3JyZXNwb25kaW5nICI6Y3Njb3BlIGtpbGwiLgorCSAgICBFcnJvcnMgZHVyaW5nICI6Y3Njb3BlIGFkZCIgbWF5IG5vdCBiZSBoYW5kbGVkIHByb3Blcmx5LgorU29sdXRpb246ICAgV2hlbiB1c2luZyB0aGUgcXVpY2tmaXggd2luZG93IG1heSBuZWVkIHRvIHNwbGl0IHRoZSB3aW5kb3cuCisJICAgIEF2b2lkIGZpbGUgaGFuZGxlIGluaGVyaXRhbmNlIGZvciB0aGUgc2NyaXB0LgorCSAgICBDaGVjayBmb3IgYSBmYWlsZWQgY29ubmVjdGlvbiBhbmQvb3IgcHJvY2Vzcy4gIChTZXJnZXkgS2hvcmV2KQorRmlsZXM6CSAgICBzcmMvZXhfY21kczIuYywgc3JjL2lmX2NzY29wZS5jCisKK1BhdGNoIDYuMi4wMTcKK1Byb2JsZW06ICAgIFRlc3QxMSBzb21ldGltZXMgcHJvbXB0cyB0aGUgdXNlciwgYmVjYXVzZSBhIGZpbGUgd291bGQgaGF2ZSBiZWVuCisJICAgIGNoYW5nZWQgb3V0c2lkZSBvZiBWaW0uIChBbnRvbmlvIENvbG9tYm8pCitTb2x1dGlvbjogICBBZGQgYSBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIHRvIGF2b2lkIHRoZSBwcm9tcHQuCitGaWxlczoJICAgIHNyYy90ZXN0ZGlyL3Rlc3QxMS5pbgorCitQYXRjaCA2LjIuMDE4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHRoZSBYU01QIHByb3RvY29sIGFuZCByZWFkaW5nIGZyb20gc3RkaW4gVmltIG1heSB3YWl0CisJICAgIGZvciBhIGtleSB0byBiZSBwcmVzc2VkLgorU29sdXRpb246ICAgQXZvaWQgdGhhdCBSZWFsV2FpdEZvckNoYXIoKSBpcyB1c2VkIHJlY3Vyc2l2ZWx5LgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi4wMTkgKGxhbmcpCitQcm9ibGVtOiAgICBMb2FkaW5nIHRoZSBQb3J0dWd1ZXNlIG1lbnUgY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBKb2luIHR3byBsaW5lcy4gIChKb3NlIFBlZHJvIE9saXZlaXJhLCBKb3PpIGRlIFBhdWxhKQorRmlsZXM6CSAgICBydW50aW1lL2xhbmcvbWVudV9wdF9ici52aW0KKworUGF0Y2ggNi4yLjAyMAorUHJvYmxlbTogICAgVGhlICJTeW50YXgvU2V0IHN5bnRheCBvbmx5IiBtZW51IGl0ZW0gY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2UuCisJICAgIChPeXZpbmQgSG9sbSkKK1NvbHV0aW9uOiAgIFNldCB0aGUgc2NyaXB0LWxvY2FsIHZhcmlhYmxlIGluIGEgZnVuY3Rpb24uIChCZW5qaSBGaXNoZXIpCitGaWxlczoJICAgIHJ1bnRpbWUvc3lubWVudS52aW0KKworUGF0Y2ggNi4yLjAyMQorUHJvYmxlbTogICAgVGhlIHVzZXIgbWFudWFsIHNlY3Rpb24gb24gZXhjZXB0aW9ucyBjb250YWlucyBzbWFsbCBtaXN0YWtlcy4KK1NvbHV0aW9uOiAgIEdpdmUgYSBnb29kIGV4YW1wbGUgb2YgYW4gZXJyb3IgdGhhdCBjb3VsZCBiZSBtaXNzZWQgYW5kIG90aGVyCisJICAgIGltcHJvdmVtZW50cy4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3Vzcl80MS50eHQKKworUGF0Y2ggNi4yLjAyMiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQWZ0ZXIgZGVsZXRpbmcgYSBtZW51IGl0ZW0gaXQgc3RpbGwgYXBwZWFycyBpbiBhIHRlYXItb2ZmCisJICAgIHdpbmRvdy4KK1NvbHV0aW9uOiAgIFNldCB0aGUgbW9kZSB0byB6ZXJvIGZvciB0aGUgZGVsZXRlZCBpdGVtLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMi4wMjMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IE1ha2VfaXZjLm1hayBkb2VzIG5vdCBjbGVhbiBldmVyeXRoaW5nLgorU29sdXRpb246ICAgRGVsZXRlIG1vcmUgZmlsZXMgaW4gdGhlIGNsZWFuIHJ1bGUuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgc3JjL01ha2VfaXZjLm1haworCitQYXRjaCA2LjIuMDI0IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBDb21waWxlciB3YXJuaW5ncyBmb3IgdHlwZWNhc3RzLgorU29sdXRpb246ICAgVXNlIERXT1JEIGluc3RlYWQgb2YgV09SRC4gKFdhbHRlciBCcmlzY29lKQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMi4wMjUKK1Byb2JsZW06ICAgIE1pc3NpbmcgcHJvdG90eXBlIGZvciBzaWdhbHRzdGFjaygpLgorU29sdXRpb246ICAgQWRkIHRoZSBwcm90b3R5cGUgd2hlbiBpdCBpcyBub3QgZm91bmQgaW4gYSBoZWFkZXIgZmlsZS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMDI2CitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciB1dGltZXMoKSBhcmd1bWVudC4KK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGVjYXN0LgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjAyNworUHJvYmxlbTogICAgV2FybmluZyBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KK1NvbHV0aW9uOiAgIFNldCBtYl9sIHRvIG9uZSB3aGVuIG5vdCB1c2luZyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4yLjAyOAorUHJvYmxlbTogICAgQ3Njb3BlIGNvbm5lY3Rpb24gbWF5IGtpbGwgVmltIHByb2Nlc3MgYW5kIG90aGVycy4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBwaWQgYmVpbmcgbGFyZ2VyIHRoYW4gb25lLiAoS2hvcmV2IFNlcmdleSkKK0ZpbGVzOgkgICAgc3JjL2lmX2NzY29wZS5jCisKK1BhdGNoIDYuMi4wMjkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgdGhlIHJlbW90ZSBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSBWaW0gbWF5IGxlYWsgbWVtb3J5LgorCSAgICAoU3Jpa2FudGggU2Fua2FyYW4pCitTb2x1dGlvbjogICBGcmVlIHRoZSByZXN1bHQgb2YgWExpc3RQcm9wZXJ0aWVzKCkuCitGaWxlczoJICAgIHNyYy9pZl94Y21kc3J2LmMKKworUGF0Y2ggNi4yLjAzMAorUHJvYmxlbTogICAgTWFjOiBXYXJuaW5nIGZvciBub3QgYmVpbmcgYWJsZSB0byB1c2UgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzLgorU29sdXRpb246ICAgRG9uJ3QgcmVkZWZpbmUgc2VsZWN0LiAgVXNlIC1uby1jcHAtcHJlY29tcCBmb3IgY29tcGlsaW5nLCBzbyB0aGF0CisJICAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlIHN0aWxsIGZvdW5kLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jLCBzcmMvb3NkZWYuc2gKKworUGF0Y2ggNi4yLjAzMQorUHJvYmxlbTogICAgVGhlIGxhbmdtZW51IGVudHJ5IGluIHRoZSBvcHRpb25zIHdpbmRvdyBkb2Vzbid0IHdvcmsuIChSb2RvbGZvCisJICAgIExpbWEpCisJICAgIFdpdGggR1RLIDEgdGhlICI6b3B0aW9ucyIgY29tbWFuZCBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZS4KKwkgICAgKE1pY2hhZWwgTmF1bWFubikKK1NvbHV0aW9uOiAgIENoYW5nZSAibG1lbnUiIHRvICJsYW5nbWVudSIuICBPbmx5IGRpc3BsYXkgdGhlICd0YmlzJyBvcHRpb24gZm9yCisJICAgIEdUSyAyLgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0KKworUGF0Y2ggNi4yLjAzMgorUHJvYmxlbTogICAgVGhlIGxwYyBmaWxldHlwZSBpcyBuZXZlciByZWNvZ25pemVkLiAoU2hpemh1IFBhbikKK1NvbHV0aW9uOiAgIENoZWNrIGZvciBnOmxwY19zeW50YXhfZm9yX2MgaW5zdGVhZCBvZiB0aGUgbG9jYWwgdmFyaWFibGUKKwkgICAgbHBjX3N5bnRheF9mb3JfYy4gKEJlbmppIEZpc2hlcikKK0ZpbGVzOgkgICAgcnVudGltZS9maWxldHlwZS52aW0KKworUGF0Y2ggNi4yLjAzMyAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IFZhcmlvdXMgY29tcGlsZXIgd2FybmluZ3MuCitTb2x1dGlvbjogICBEb24ndCBpbmNsdWRlIENsYXNzaWMtb25seSBoZWFkZXJzIGluIFVuaXggdmVyc2lvbi4KKwkgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gc2V2ZXJhbCB1bnVzZWQgdmFyaWFibGVzLiAoQmVuIEZvd2xlcikKKwkgICAgRml4IGRvdWJsZSBkZWZpbml0aW9uIG9mIERFRkFVTFRfVEVSTS4KKwkgICAgVXNlIGludCBpbnN0ZWFkIG9mIHVuc2lnbmVkIHNob3J0IGZvciBwaXhlbCB2YWx1ZXMsIHNvIHRoYXQgdGhlCisJICAgIG5lZ2F0aXZlIGVycm9yIHZhbHVlcyBhcmUgcmVjb2duaXplZC4KK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYywgc3JjL3Rlcm0uYworCitQYXRjaCA2LjIuMDM0CitQcm9ibGVtOiAgICBNYWM6IENvbXBpbGVyIHdhcm5pbmcgZm9yIHJlZGVmaW5pbmcgREVGQVVMVF9URVJNLgorU29sdXRpb246ICAgRml4IGRvdWJsZSBkZWZpbml0aW9uIG9mIERFRkFVTFRfVEVSTS4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA2LjIuMDM1CitQcm9ibGVtOiAgICBNYWM6IENvbXBpbGVyIHdhcm5pbmdzIGluIFB5dGhvbiBpbnRlcmZhY2UuCitTb2x1dGlvbjogICBNYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHB1cmUgTWFjIGFuZCBVbml4LU1hYy4gKFBldGVyIEN1Y2thKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4yLjAzNiAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWMgVW5peCB2ZXJzaW9uOiBJZiBmb28gaXMgYSBkaXJlY3RvcnksIHRoZW4gIjplIGY8VGFiPiIgc2hvdWxkCisJICAgIGV4cGFuZCB0byAiOmUgZm9vLyIgaW5zdGVhZCBvZiAiOmUgZm9vIiAuICAoVmFkaW0gWmVpdGxpbikKK1NvbHV0aW9uOiAgIERlZmluZSBET05UX0FERF9QQVRIU0VQX1RPX0RJUiBvbmx5IGZvciBwdXJlIE1hYy4gKEJlbmppIEZpc2hlcikKK0ZpbGVzOgkgICAgc3JjL29zX21hYy5oCisKK1BhdGNoIDYuMi4wMzcKK1Byb2JsZW06ICAgIFdpbjMyOiBjb252ZXJ0aW5nIGFuIGVuY29kaW5nIG5hbWUgdG8gYSBjb2RlcGFnZSBjb3VsZCByZXN1bHQgaW4KKwkgICAgYW4gYXJiaXRyYXJ5IG51bWJlci4KK1NvbHV0aW9uOiAgIG1ha2UgZW5jbmFtZTJjb2RlcGFnZSgpIHJldHVybiB6ZXJvIGlmIHRoZSBlbmNvZGluZyBuYW1lIGRvZXNuJ3QKKwkgICAgY29udGFpbiBhIGNvZGVwYWdlIG51bWJlci4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yLjAzOCAoZXh0cmEpCitQcm9ibGVtOiAgICBXYXJuaW5nIG1lc3NhZ2VzIHdoZW4gdXNpbmcgdGhlIE1pbmdXIGNvbXBpbGVyLiAoQmlsbCBNY0NhcnRoeSkKKwkgICAgQ2FuJ3QgY29tcGlsZSBjb25zb2xlIHZlcnNpb24gd2l0aG91dCArbW91c2UgZmVhdHVyZS4KK1NvbHV0aW9uOiAgIEluaXRpYWxpemUgdmFyaWFibGVzLCBhZGQgcGFyZW50aGVzaXMuCisJICAgIEFkZCBhbiAjaWZkZWYgYXJvdW5kIGdfbk1vdXNlQ2xpY2suIChBaml0IFRoYWtrYXIpCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9vc193aW4zMi5jLCBzcmMvZ3VpX3czMi5jLCBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDYuMi4wMzkgKGV4dHJhKQorUHJvYmxlbTogICAgTW9yZSB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gdXNpbmcgdGhlIE1pbmdXIGNvbXBpbGVyLgorU29sdXRpb246ICAgSW5pdGlhbGl6ZSB2YXJpYWJsZXMuIChCaWxsIE1jQ2FydGh5KQorRmlsZXM6CSAgICBzcmMvb3NfbXN3aW4uYworCitQYXRjaCA2LjIuMDQwCitQcm9ibGVtOiAgICBGcmVlQlNEOiBDcmFzaCB3aGlsZSBzdGFydGluZyB1cCB3aGVuIGNvbXBpbGVkIHdpdGggK3hzbXAgZmVhdHVyZS4KK1NvbHV0aW9uOiAgIFBhc3MgYSBub24tTlVMTCBhcmd1bWVudCB0byBJY2VBZGRDb25uZWN0aW9uV2F0Y2goKS4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMDQxIChleHRyYSwgYWZ0ZXIgNi4yLjAzMykKK1Byb2JsZW06ICAgIE1hYzogQ29tcGlsZXIgd2FybmluZ3MgZm9yIGNvbnZlcnNpb24gdHlwZXMsIG1pc3NpbmcgcHJvdG90eXBlLAorCSAgICBtaXNzaW5nIHJldHVybiB0eXBlLgorU29sdXRpb246ICAgQ2hhbmdlIHNzY2FuZiAiJWhkIiB0byAiJWQiLCB0aGUgYXJndW1lbnQgaXMgYW4gaW50IG5vdy4gIEFkZAorCSAgICBndWlfbWNoX2luaXRfY2hlY2soKSBwcm90b3R5cGUuICBBZGQgImludCIgdG8gdGVybWxpYiBmdW5jdGlvbnMuCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMsIHNyYy9wcm90by9ndWlfbWFjLnBybywgc3JjL3Rlcm1saWIuYy4KKworUGF0Y2ggNi4yLjA0MiAoZXh0cmEpCitQcm9ibGVtOiAgICBDeWd3aW46IGdjYyAzLjIgaGFzIGFuIG9wdGltaXplciBwcm9ibGVtLCBzb21ldGltZXMgY2F1c2luZyBhCisJICAgIGNyYXNoLgorU29sdXRpb246ICAgQWRkIC1mbm8tc3RyZW5ndGgtcmVkdWNlIHRvIHRoZSBjb21waWxlciBhcmd1bWVudHMuIChEYW4gU2hhcnApCitGaWxlczoJICAgIHNyYy9NYWtlX2N5Zy5tYWsKKworUGF0Y2ggNi4yLjA0MworUHJvYmxlbTogICAgQ29tcGlsaW5nIHdpdGggYm90aCBuZXRiZWFucyBhbmQgd29ya3Nob3AgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgTW92ZSB0aGUgc2hlbGxSZWN0YW5nbGUoKSBmdW5jdGlvbiB0byBndWlfeDExLmMuIChHb3Jkb24gUHJpZXVyKQorRmlsZXM6CSAgICBzcmMvZ3VpX3gxMS5jLCBzcmMvaW50ZWdyYXRpb24uYywgc3JjL25ldGJlYW5zLmMsCisJICAgIHNyYy9wcm90by9uZXRiZWFucy5wcm8KKworUGF0Y2ggNi4yLjA0NAorUHJvYmxlbTogICAgIjphdSBmaWxldHlwZWRldGVjdCIgZ2l2ZXMgYW4gZXJyb3IgZm9yIGEgbm9uLWV4aXN0aW5nIGV2ZW50IG5hbWUsCisJICAgIGJ1dCBpdCdzIGFjdHVhbGx5IGEgbm9uLWV4aXN0aW5nIGdyb3VwIG5hbWUuIChBbnRvaW5lIE1lY2hlbHluY2spCitTb2x1dGlvbjogICBNYWtlIHRoZSBlcnJvciBtZXNzYWdlIGNsZWFyZXIuCitGaWxlczoJICAgIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjIuMDQ1CitQcm9ibGVtOiAgICBPYnRhaW5pbmcgdGhlICcoIG1hcmsgY2hhbmdlcyB0aGUgJycgbWFyay4gKEdhcnkgSG9sbG93YXkpCitTb2x1dGlvbjogICBEb24ndCBzZXQgdGhlICcnIG1hcmsgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzdGFydC9lbmQgb2YgdGhlCisJICAgIGN1cnJlbnQgc2VudGVuY2UvcGFyYWdyYXBoLgorRmlsZXM6CSAgICBzcmMvbWFyay5jCisKK1BhdGNoIDYuMi4wNDYKK1Byb2JsZW06ICAgIFdoZW4gZXZhbHVhdGluZyBhbiBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uIHRocm93cyBhbiBleGNlcHRpb24gdGhlCisJICAgIGZ1bmN0aW9uIGlzIHN0aWxsIGNhbGxlZC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgRG9uJ3QgY2FsbCB0aGUgZnVuY3Rpb24gd2hlbiBhbiBleGNlcHRpb24gd2FzIHRocm93bi4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuMDQ3IChleHRyYSkKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmdzIHdoZW4gdXNpbmcgTWluZ1cuIChCaWxsIE1jQ2FydGh5KQorU29sdXRpb246ICAgR2l2ZSB0aGUgc19kd0xhc3RDbGlja1RpbWUgdmFyaWFibGUgYSB0eXBlLiAgSW5pdGlhbGl6ZSBkd0VuZFRpbWUuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMi4wNDgKK1Byb2JsZW06ICAgIFRoZSBQeXRob24gaW50ZXJmYWNlIGRvZXNuJ3QgY29tcGlsZSB3aXRoIFB5dGhvbiAyLjMgd2hlbgorCSAgICBkeW5hbWljYWxseSBsb2FkZWQuCitTb2x1dGlvbjogICBVc2UgZGxsX1B5T2JqZWN0X01hbGxvYyBhbmQgZGxsX1B5T2JqZWN0X0ZyZWUuIChQYXVsIE1vb3JlKQorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4yLjA0OQorUHJvYmxlbTogICAgVXNpbmcgYSAiLXJhbmdlPSIgYXJndW1lbnQgd2l0aCAiOmNvbW1hbmQiIGRvZXNuJ3Qgd29yayBhbmQKKwkgICAgZG9lc24ndCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgR2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjA1MAorUHJvYmxlbTogICAgVGVzdCAzMiBkaWRuJ3Qgd29yayBvbiBNUy1XaW5kb3dzLgorU29sdXRpb246ICAgV3JpdGUgdGhlIHRlbXAgZmlsZSBpbiBVbml4IGZpbGVmb3JtYXQuIChXYWx0ZXIgQnJpc2NvZSkKK0ZpbGVzOgkgICAgc3JjL3Rlc3RkaXIvdGVzdDMyLmluCisKK1BhdGNoIDYuMi4wNTEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIlw9c3VibWF0Y2goMCkiIGluIGEgIjpzIiBjb21tYW5kLCBsaW5lIGJyZWFrcyBiZWNvbWUKKwkgICAgTlVMIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBDaGFuZ2UgTkwgdG8gQ1IgY2hhcmFjdGVycywgc28gdGhhdCB0aGV5IGJlY29tZSBsaW5lIGJyZWFrcy4KK0ZpbGVzOgkgICAgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMi4wNTIKK1Byb2JsZW06ICAgIEEgZmV3IG1lc3NhZ2VzIGFyZSBub3QgdHJhbnNsYXRlZC4KK1NvbHV0aW9uOiAgIEFkZCBfKCkgdG8gdGhlIG1lc3NhZ2VzLiAoTXVyYW9rYSBUYXJvKQorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi4wNTMKK1Byb2JsZW06ICAgIFByb3RvdHlwZSBmb3IgYnplcm8oKSBkb2Vzbid0IG1hdGNoIG1vc3Qgc3lzdGVtcy4KK1NvbHV0aW9uOiAgIFVzZSAidm9pZCAqIiBpbnN0ZWFkIG9mICJjaGFyICoiIGFuZCAic2l6ZV90IiBpbnRlYWQgb2YgImludCIuCitGaWxlczoJICAgIHNyYy9vc2RlZjEuaC5pbgorCitQYXRjaCA2LjIuMDU0CitQcm9ibGVtOiAgICBBIGRvdWJsZS1ieXRlIGNoYXJhY3RlciB3aXRoIGEgc2Vjb25kIGJ5dGUgdGhhdCBpcyBhIGJhY2tzbGFzaAorCSAgICBjYXVzZXMgcHJvYmxlbXMgaW5zaWRlIGEgc3RyaW5nLgorU29sdXRpb246ICAgU2tpcCBvdmVyIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBpbiBhIHN0cmluZyBwcm9wZXJseS4gKFlhc3VoaXJvCisJICAgIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuMDU1CitQcm9ibGVtOiAgICBVc2luZyBjb2woJy4nKSBmcm9tIENUUkwtTyBpbiBJbnNlcnQgbW9kZSBkb2VzIG5vdCByZXR1cm4gdGhlCisJICAgIGNvcnJlY3QgdmFsdWUgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIGN1cnNvciBwb3NpdGlvbiB3aGVuIGl0IGlzIG5lY2Vzc2FyeSwgbW92ZSB0byB0aGUKKwkgICAgZmlyc3QgYnl0ZSBvZiBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMi4wNTYgKGV4dHJhKQorUHJvYmxlbTogICAgQnVpbGRpbmcgd2l0aCBTbmlmZisrIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgbXVsdGktdGhyZWFkZWQgbGliYyB3aGVuIG5lZWRlZC4gKEhvbGdlciBEaXR0aW5nKQorRmlsZXM6CSAgICBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMi4wNTcgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBXaXRoIC1ETUFDT1NfWCBwdXRlbnYoKSBpcyBkZWZpbmVkIHR3aWNlLCBpdCBpcyBpbiBhIHN5c3RlbQorCSAgICBsaWJyYXJ5LiAgR2V0IGEgd2FybmluZyBmb3IgcmVkZWZpbmluZyBPSy4gIFVudXNlZCB2YXJpYWJsZXMgaW4KKwkgICAgb3NfbWFjLmMKK1NvbHV0aW9uOiAgIERlZmluZSBIQVZFX1BVVEVOVi4gIFVuZGVmaW5lIE9LIGFmdGVyIGluY2x1ZGluZyBjdXJzZXMuaC4KKwkgICAgUmVtb3ZlIGRlY2xhcmF0aW9ucyBmb3IgdW51c2VkIHZhcmlhYmxlcy4KK0ZpbGVzOgkgICAgc3JjL29zX21hYy5jLCBzcmMvb3NfbWFjLmgsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMDU4CitQcm9ibGVtOiAgICBXaGVuICdhdXRvY2hkaXInIGlzIHNldCAiOmJuZXh0IiB0byBhIGJ1ZmZlciB3aXRob3V0IGEgbmFtZSBjYXVzZXMKKwkgICAgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIERvbid0IGNhbGwgdmltX2NoZGlyZmlsZSgpIHdoZW4gdGhlIGZpbGUgbmFtZSBpcyBOVUxMLiAoVGFybworCSAgICBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4yLjA1OQorUHJvYmxlbTogICAgV2hlbiAnc2Nyb2xsb2ZmJyBpcyBhIGxhcmdlIG51bWJlciBhbmQgbGlzdGluZyBjb21wbGV0aW9uIHJlc3VsdHMKKwkgICAgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlbiBleGVjdXRpbmcgYSBjb21tYW5kIHRoYXQganVtcHMgY2xvc2UgdG8KKwkgICAgd2hlcmUgdGhlIGN1cnNvciB3YXMgYmVmb3JlLCBwYXJ0IG9mIHRoZSBzY3JlZW4gaXMgbm90IHVwZGF0ZWQuCisJICAgIChZYWtvdiBMZXJuZXIpCitTb2x1dGlvbjogICBEb24ndCBza2lwIHJlZHJhd2luZyBwYXJ0IG9mIHRoZSB3aW5kb3cgd2hlbiBpdCB3YXMgc2Nyb2xsZWQuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuMDYwIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuICdlbmNvZGluZycgaXMgc2V0IHRvICJpc28tODg1OS03IiBjb3B5L3Bhc3RlIHRvL2Zyb20KKwkgICAgdGhlIGNsaXBib2FyZCBnaXZlcyBhIGxhbGxvYygwKSBlcnJvci4gKEtyaXRvbiBLeXJpbWlzKQorU29sdXRpb246ICAgV2hlbiB0aGUgc3RyaW5nIGxlbmd0aCBpcyB6ZXJvIGFsbG9jYXRlIG9uZSBieXRlLiAgQWxzbyBmaXggdGhhdAorCSAgICB3aGVuIHRoZSBsZW5ndGggb2YgdGhlIFVuaWNvZGUgdGV4dCBpcyB6ZXJvIChjb252ZXJzaW9uIGZyb20KKwkgICAgJ2VuY29kaW5nJyB0byBVQ1MtMiB3YXMgbm90IHBvc3NpYmxlKSB0aGUgbm9ybWFsIHRleHQgaXMgdXNlZC4KK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4yLjA2MQorUHJvYmxlbTogICAgR1VJOiBVc2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gd2l0aCB0aGUgc2hpZnQga2V5IHNob3VsZCB3b3JrCisJICAgIGxpa2UgIioiIGJ1dCBpdCBzY3JvbGxzIGluc3RlYWQuIChNYXJ0aW4gQmVsbGVyKQorU29sdXRpb246ICAgRG9uJ3QgcmVjb2duaXplIGFuIHJ4dnQgc2Nyb2xsIHdoZWVsIGV2ZW50IHdoZW4gdXNpbmcgdGhlIEdVSS4KK0ZpbGVzOgkgICAgc3JjL3Rlcm0uYworCitQYXRjaCA2LjIuMDYyCitQcm9ibGVtOiAgICBXaGVuIG9uZSBidWZmZXIgdXNlcyBhIHN5bnRheCB3aXRoICJjb250YWluZWRpbiIgYW5kIGFub3RoZXIKKwkgICAgYnVmZmVyIGRvZXMgbm90LCByZWRyYXdpbmcgZGVwZW5kcyBvbiB3aGF0IHRoZSBjdXJyZW50IGJ1ZmZlciBpcy4KKwkgICAgKEJyZXR0IFBlcnNoaW5nIFN0YWhsbWFuKQorU29sdXRpb246ICAgVXNlICJzeW5fYnVmIiBpbnN0ZWFkIG9mICJjdXJidWYiIHRvIGdldCB0aGUgYl9zeW5fY29udGFpbmVkaW4KKwkgICAgZmxhZy4KK0ZpbGVzOgkgICAgc3JjL3N5bnRheC5jCisKK1BhdGNoIDYuMi4wNjMKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgY3VzdG9tIGNvbXBsZXRpb24gZW5kIHVwIHdpdGggbm8gbWF0Y2hlcy4KK1NvbHV0aW9uOiAgIE1ha2UgY21kX251bWZpbGVzIGFuZCBjbWRfZmlsZXMgbG9jYWwgdG8gY29tcGxldGlvbiB0byBhdm9pZCB0aGF0CisJICAgIHRoZXkgYXJlIG92ZXJ3cml0dGVuIHdoZW4gRXhwYW5kT25lKCkgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5IGJ5CisJICAgIGZfZ2xvYigpLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9wcm90by9leF9nZXRsbi5wcm8sCisJICAgIHNyYy9taXNjMS5jLCBzcmMvc3RydWN0cy5oLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjA2NAorUHJvYmxlbTogICAgcmVzb2x2ZSgpIG9ubHkgaGFuZGxlcyBvbmUgc3ltYm9saWMgbGluaywgbmVlZCB0byByZXBlYXQgaXQgdG8KKwkgICAgcmVzb2x2ZSBhbGwgb2YgdGhlbS4gIFRoZW4gbmVlZCB0byBzaW1wbGlmeSB0aGUgZmlsZSBuYW1lLgorU29sdXRpb246ICAgTWFrZSByZXNvbHZlKCkgcmVzb2x2ZSBhbGwgc3ltYm9saWMgbGlua3MgYW5kIHNpbXBsaWZ5IHRoZSByZXN1bHQuCisJICAgIEFkZCBzaW1wbGlmeSgpIHRvIGp1c3Qgc2ltcGxpZnkgYSBmaWxlIG5hbWUuICBGaXggdGhhdCB0ZXN0NDkKKwkgICAgZG9lc24ndCB3b3JrIGlmIC90bXAgaXMgYSBzeW1ib2xpYyBsaW5rLiAgKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jLCBzcmMvdGFnLmMsCisJICAgIHNyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KKworUGF0Y2ggNi4yLjA2NQorUHJvYmxlbTogICAgIjp3aW5kbyAxMjMiIG9ubHkgdXBkYXRlcyBvdGhlciB3aW5kb3dzIHdoZW4gZW50ZXJpbmcgdGhlbS4KKwkgICAgKFdhbHRlciBCcmlzY29lKQorU29sdXRpb246ICAgVXBkYXRlIHRoZSB0b3BsaW5lIGJlZm9yZSBnb2luZyB0byB0aGUgbmV4dCB3aW5kb3cuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi4wNjYgKGV4dHJhKQorUHJvYmxlbTogICAgUnVieSBpbnRlcmZhY2UgZG9lc24ndCB3b3JrIHdpdGggUnVieSAxLjguMC4KK1NvbHV0aW9uOiAgIENoYW5nZSAiZGVmb3V0IiB0byAic3Rkb3V0Ii4gKEFyb24gR3JpZmlzKQorCSAgICBDaGFuZ2UgZHluYW1pYyBsb2FkaW5nLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvaWZfcnVieS5jLCBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMi4wNjcKK1Byb2JsZW06ICAgIFdoZW4gc2VhcmNoaW5nIGZvciBhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIGEgY29tcG9zaW5nIGNoYXJhY3RlcgorCSAgICB0aGUgY29tbWFuZCBsaW5lIGlzbid0IGRyYXduIHByb3Blcmx5LgorU29sdXRpb246ICAgRG9uJ3QgY291bnQgdGhlIHNwYWNlIHRvIGRyYXcgdGhlIGNvbXBvc2luZyBjaGFyYWN0ZXIgb24gYW5kCisJICAgIGFkanVzdCB0aGUgY3Vyc29yIGNvbHVtbiBhZnRlciBkcmF3aW5nIHRoZSBzdHJpbmcuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4yLjA2OAorUHJvYmxlbTogICAgRXZlbnRzIGZvciB0aGUgbmV0YmVhbnMgaW50ZXJmYWNlIHRoYXQgaW5jbHVkZSBhIGZpbGUgbmFtZSB3aXRoCisJICAgIHNwZWNpYWwgY2hhcmFjdGVycyBkb24ndCB3b3JrIHByb3Blcmx5LgorU29sdXRpb246ICAgVXNlIG5iX3F1b3RlKCkgb24gdGhlIGZpbGUgbmFtZS4gKFNlcmdleSBLaG9yZXYpCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMi4wNjkgKGFmdGVyIDYuMi4wNjQpCitQcm9ibGVtOiAgICBVbnVzZWQgdmFyaWFibGVzICJsaW1pdCIgYW5kICJuZXdfc3QiIGFuZCB1bnVzZWQgbGFiZWwgImZhaWwiIGluCisJICAgIHNvbWUgc2l0dWF0aW9uLiAoQmlsbCBNY0NhcnRoeSkKK1NvbHV0aW9uOiAgIFB1dCB0aGUgZGVjbGFyYXRpb25zIGluc2lkZSBhbiAjaWZkZWYuIChTZXJ2YXRpdXMgQnJhbmR0KQorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjA3MCAoYWZ0ZXIgNi4yLjA2OSkKK1Byb2JsZW06ICAgIFN0aWxsIHVudXNlZCB2YXJpYWJsZSAibmV3X3N0Ii4gKEJpbGwgTWNDYXJ0aHkpCitTb2x1dGlvbjogICBNb3ZlIHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgcmlnaHQgYmxvY2sgdGhpcyB0aW1lLgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjA3MQorUHJvYmxlbTogICAgJ3N0YXR1c2xpbmUnIGNhbiBvbmx5IGNvbnRhaW4gNTAgJSBpdGVtcy4gKEFudG9ueSBTY3JpdmVuKQorU29sdXRpb246ICAgQWxsb3cgODAgaXRlbXMgYW5kIG1lbnRpb24gaXQgaW4gdGhlIGRvY3MuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29wdGlvbi50eHQsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMDcyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGV4cHJlc3Npb24gZm9sZGluZywgZm9sZGV4cHIoKSBtb3N0bHkgcmV0dXJucyAtMSBmb3IKKwkgICAgdGhlIHByZXZpb3VzIGxpbmUsIHdoaWNoIG1ha2VzIGl0IGRpZmZpY3VsdCB0byB3cml0ZSBhIGZvbGQKKwkgICAgZXhwcmVzc2lvbi4KK1NvbHV0aW9uOiAgIE1ha2UgdGhlIGxldmVsIG9mIHRoZSBwcmV2aW91cyBsaW5lIGF2YWlsYWJsZSB3aGlsZSBzdGlsbCBsb29raW5nCisJICAgIGZvciB0aGUgZW5kIG9mIGEgZm9sZC4KK0ZpbGVzOgkgICAgc3JjL2ZvbGQuYworCitQYXRjaCA2LjIuMDczCitQcm9ibGVtOiAgICBXaGVuIGFkZGluZyBkZXRlY3Rpb24gb2YgYSBzcGVjaWZpYyBmaWxldHlwZSBmb3IgYSBwbHVnaW4geW91IG5lZWQKKwkgICAgdG8gZWRpdCAiZmlsZXR5cGUudmltIi4KK1NvbHV0aW9uOiAgIFNvdXJjZSBmaWxlcyBmcm9tIHRoZSAiZnRkZXRlY3QiIGRpcmVjdG9yeSwgc28gdGhhdCBhIGZpbGV0eXBlCisJICAgIGRldGVjdGlvbiBwbHVnaW4gb25seSBuZWVkcyB0byBiZSBkcm9wcGVkIGluIGEgZGlyZWN0b3J5LgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9maWxldHlwZS50eHQsIHJ1bnRpbWUvZG9jL3Vzcl8wNS50eHQsCisJICAgIHJ1bnRpbWUvZG9jL3Vzcl80MS50eHQsIHJ1bnRpbWUvZmlsZXR5cGUudmltCisKK1BhdGNoIDYuMi4wNzQKK1Byb2JsZW06ICAgIFdhcm5pbmdzIHdoZW4gY29tcGlsaW5nIHRoZSBQeXRob24gaW50ZXJmYWNlLiAoQWppdCBUaGFra2FyKQorU29sdXRpb246ICAgVXNlIEFOU0kgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4yLjA3NQorUHJvYmxlbTogICAgV2hlbiB0aGUgdGVtcCBmaWxlIGZvciB3cml0aW5nIHZpbWluZm8gY2FuJ3QgYmUgdXNlZCAiTlVMTCIKKwkgICAgYXBwZWFycyBpbiB0aGUgZXJyb3IgbWVzc2FnZS4gKEJlbiBMYXZlbmRlcikKK1NvbHV0aW9uOiAgIFByaW50IHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUgd2hlbiB0aGVyZSBpcyBubyB0ZW1wIGZpbGUgbmFtZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMDc2CitQcm9ibGVtOiAgICBUaGUgdGFncyBsaXN0ZWQgZm9yIGNzY29wZSBhcmUgaW4gdGhlIHdyb25nIG9yZGVyLiAoSm9oYW5uZXMKKwkgICAgU3RlemVuYmFjaCkKK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgcmVvcmRlcmluZyBvZiB0YWdzIGZvciB0aGUgY3VycmVudCBmaWxlLiAoU2VyZ2V5CisJICAgIEtob3JldikKK0ZpbGVzOgkgICAgc3JjL2lmX2NzY29wZS5jCisKK1BhdGNoIDYuMi4wNzcKK1Byb2JsZW06ICAgIFdoZW4gYSB1c2VyIGZ1bmN0aW9uIHNwZWNpZmllcyBjdXN0b20gY29tcGxldGlvbiwgdGhlIGZ1bmN0aW9uCisJICAgIGdldHMgYSB6ZXJvIGFyZ3VtZW50IGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlcmUgaXMgbm8KKwkgICAgd29yZCBiZWZvcmUgdGhlIGN1cnNvci4gKFByZWJlbiBHdWxkYmVyZykKK1NvbHV0aW9uOiAgIERvbid0IGNvbnZlcnQgYW4gZW1wdHkgc3RyaW5nIHRvIGEgemVyby4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuMDc4CitQcm9ibGVtOiAgICAibWFrZSB0ZXN0IiBkb2Vzbid0IHdvcmsgaWYgVmltIHdhc24ndCBjb21waWxlZCB5ZXQuIChFZCBBdmlzKQorU29sdXRpb246ICAgQnVpbGQgVmltIGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0cy4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMi4wNzkKK1Byb2JsZW06ICAgICI6dyArK2VuYz11dGYtOCAhY21kIiBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBDaGVjayBmb3IgdGhlICIrKyIgYXJndW1lbnQgYmVmb3JlIHRoZSAiISIuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4wODAKK1Byb2JsZW06ICAgIFdoZW4gJ3RfdGknIGlzIG5vdCBlbXB0eSBidXQgZG9lc24ndCBzd2FwIHNjcmVlbnMsIHVzaW5nICJaWiIgaW4KKwkgICAgYW4gdW5tb2RpZmllZCBmaWxlIGRvZXNuJ3QgY2xlYXIgdGhlIGxhc3QgbGluZS4KK1NvbHV0aW9uOiAgIENhbGwgbXNnX2Nscl9lb3MoKSB3aGVuIG5lZWRlZC4gKE1pY2hhZWwgU2Nocm9lZGVyKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi4wODEKK1Byb2JsZW06ICAgIFByb2JsZW0gd2hlbiB1c2luZyBhIGxvbmcgbXVsdGlieXRlIHN0cmluZyBmb3IgdGhlIHN0YXR1c2xpbmUuCitTb2x1dGlvbjogICBVc2UgdGhlIHJpZ2h0IHBvaW50ZXIgdG8gZ2V0IHRoZSBjZWxsIHNpemUuIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjIuMDgyCitQcm9ibGVtOiAgICBDYW4ndCBjb21waWxlIHdpdGggUGVybCA1LjguMS4KK1NvbHV0aW9uOiAgIFJlbmFtZSAiZV9udW1iZXIiIHRvICJlX251bWJlcl9leHAiLiAoU2FzY2hhIEJsYW5rKQorRmlsZXM6CSAgICBzcmMvZGlncmFwaC5jLCBzcmMvZ2xvYmFscy5oCisKK1BhdGNoIDYuMi4wODMKK1Byb2JsZW06ICAgIFdoZW4gYSBjb21waWxlciB1c2VzIF5eXl4gdG8gbWFyayBhIHdvcmQgdGhlIGluZm9ybWF0aW9uIGlzIG5vdAorCSAgICB2aXNpYmxlIGluIHRoZSBxdWlja2ZpeCB3aW5kb3cuIChTcmlrYW50aCBTYW5rYXJhbikKK1NvbHV0aW9uOiAgIERvbid0IHJlbW92ZSB0aGUgaW5kZW50IGZvciBhIGxpbmUgdGhhdCBpcyBub3QgcmVjb2duaXplZCBhcyBhbgorCSAgICBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvcXVpY2tmaXguYworCitQYXRjaCA2LjIuMDg0CitQcm9ibGVtOiAgICAiZ18iIGluIFZpc3VhbCBtb2RlIGFsd2F5cyBnb2VzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxpbmUuCisJICAgIChKZWFuLVJlbmUgRGF2aWQpCitTb2x1dGlvbjogICBJZ25vcmUgdGhlIE5VTCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjA4NQorUHJvYmxlbTogICAgIjp2ZXJib3NlIHNldCB0cyIgZG9lc24ndCBzYXkgYW4gb3B0aW9uIHdhcyBzZXQgd2l0aCBhICItYyIgb3IKKwkgICAgIi0tY21kIiBhcmd1bWVudC4KK1NvbHV0aW9uOiAgIFJlbWVtYmVyIHRoZSBvcHRpb24gd2FzIHNldCBmcm9tIGEgVmltIGFyZ3VtZW50LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvZXhfY21kczIuYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4wODYKK1Byb2JsZW06ICAgICJ7IiBhbmQgIn0iIHN0b3AgaW5zaWRlIGEgY2xvc2VkIGZvbGQuCitTb2x1dGlvbjogICBPbmx5IHN0b3Agb25jZSBpbnNpZGUgYSBjbG9zZWQgZm9sZC4gKFN0ZXBoZW4gUmllaG0pCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjIuMDg3CitQcm9ibGVtOiAgICBDVFJMLV4gZG9lc24ndCB1c2UgdGhlICdjb25maXJtJyBvcHRpb24uICBTYW1lIHByb2JsZW0gd2l0aAorCSAgICAiOmJuZXh0Ii4gKFlha292IExlcm5lcikKK1NvbHV0aW9uOiAgIFB1dCB1cCBhIGRpYWxvZyBmb3IgYSBjaGFuZ2VkIGZpbGUgd2hlbiAnY29uZmlybScgaXMgc2V0IGluIG1vcmUKKwkgICAgc2l0dWF0aW9ucy4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi4wODgKK1Byb2JsZW06ICAgIFdoZW4gJ3NpZGVzY3JvbGxvZmYnIGlzIHNldCAnc2hvd21hdGNoJyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGlmCisJICAgIHRoZSBtYXRjaCBpcyBsZXNzIHRoYW4gJ3NpZGVzY3JvbGxvZmYnIG9mZiBmcm9tIHRoZSBzaWRlIG9mIHRoZQorCSAgICB3aW5kb3cuICAoUm9sYW5kIFN0YWhuKQorU29sdXRpb246ICAgU2V0ICdzaWRlc2Nyb2xsb2ZmJyB0byB6ZXJvIHdoaWxlIGRpc3BsYXlpbmcgdGhlIG1hdGNoLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4yLjA4OQorUHJvYmxlbTogICAgIjpzZXQgaXNrKz0iIGFkZHMgYSBjb21tYS4gKE1hcmsgV2FnZ29uZXIpCitTb2x1dGlvbjogICBEb24ndCBhZGQgYSBjb21tYSB3aGVuIHRoZSBhZGRlZCB2YWx1ZSBpcyBlbXB0eS4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4wOTAgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IE1pbmdXIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCAjcHJhZ21hcy4gKEJpbGwgTWNDYXJ0aHkpCitTb2x1dGlvbjogICBQdXQgYW4gI2lmZGVmIGFyb3VuZCB0aGUgI3ByYWdtYXMuCitGaWxlczoJICAgIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMi4wOTEKK1Byb2JsZW06ICAgIFdoZW4gYW4gYXV0b2NvbW1hbmQgaXMgdHJpZ2dlcmVkIHdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb24gVmltIGFuZAorCSAgICBpdCBwcm9kdWNlcyBvdXRwdXQsIG1lc3NhZ2VzIGZyb20gYSBmb2xsb3dpbmcgY29tbWFuZCBtYXkgYmUKKwkgICAgc2Nyb2xsZWQgdW5leHBlY3RlZGx5LiAoRGF2aWQgUmVubmFsbHMpCitTb2x1dGlvbjogICBTYXZlIGFuZCByZXN0b3JlIG1zZ19zY3JvbGwgaW4gaGFuZGxlX2Ryb3AoKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjA5MgorUHJvYmxlbTogICAgSW52YWxpZCBpdGVtcyBhcHBlYXIgaW4gdGhlIGhlbHAgZmlsZSB0YWdzLiAoQW50b25pbyBDb2xvbWJvKQorU29sdXRpb246ICAgT25seSBhY2NlcHQgdGFncyB3aXRoIHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgZmlyc3QgIioiLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9kb2N0YWdzLmMsIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjA5MworUHJvYmxlbTogICAgIjpubm9yZW1lbnUiIGFsc28gZGVmaW5lcyBtZW51IGZvciBWaXN1YWwgbW9kZS4gKEtsYXVzIEJvc2F1KQorU29sdXRpb246ICAgQ2hlY2sgdGhlIHNlY29uZCBjb21tYW5kIGNoYXJhY3RlciBmb3IgYW4gIm8iLCBub3QgdGhlIHRoaXJkLgorRmlsZXM6CSAgICBzcmMvbWVudS5jCisKK1BhdGNoIDYuMi4wOTQKK1Byb2JsZW06ICAgIENhbid0IGNvbXBpbGUgd2l0aCBHVEsgYW5kIHRpbnkgZmVhdHVyZXMuCitTb2x1dGlvbjogICBJbmNsdWRlIGhhbmRsZV9kcm9wKCkgYW5kIHZpbV9jaGRpcmZpbGUoKSB3aGVuIEZFQVRfRE5EIGlzIGRlZmluZWQuCisJICAgIERvIG5vdCB0cnkgdG8gc3BsaXQgdGhlIHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9taXNjMi5jCisKK1BhdGNoIDYuMi4wOTUKK1Byb2JsZW06ICAgIFRoZSBtZXNzYWdlICJDYW5ub3QgZ28gdG8gYnVmZmVyIHgiIGlzIGNvbmZ1c2luZyBmb3IgIjpidWYgNiIuCisJICAgIChGcmFucyBFbmdsaWNoKQorU29sdXRpb246ICAgTWFrZSBpdCAiQnVmZmVyIHggZG9lcyBub3QgZXhpc3QiLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4yLjA5NgorUHJvYmxlbTogICAgV2luMzI6ICI6bGV0IEAqID0gJyciIHB1dCBhIG5ld2xpbmUgb24gdGhlIGNsaXBib2FyZC4gKEtsYXVzCisJICAgIEJvc2F1KQorU29sdXRpb246ICAgUHV0IHplcm8gYnl0ZXMgb24gdGhlIGNsaWJwb2FyZCBmb3IgYW4gZW1wdHkgc3RyaW5nLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4yLjA5NworUHJvYmxlbTogICAgU2V0dGluZyBvciByZXNldHRpbmcgJ2luc2VydG1vZGUnIGluIGEgQnVmRW50ZXIgYXV0b2NvbW1hbmQKKwkgICAgZG9lc24ndCBhbHdheXMgaGF2ZSBpbW1lZGlhdGUgZWZmZWN0LiAoTmFnZ2VyKQorU29sdXRpb246ICAgV2hlbiAnaW5zZXJ0bW9kZScgaXMgc2V0LCBzZXQgbmVlZF9zdGFydF9pbnNlcnRtb2RlLCB3aGVuIGl0J3MKKwkgICAgcmVzZXQgc2V0IHN0b3BfaW5zZXJ0X21vZGUuCitGaWxlczoJICAgIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuMDk4IChhZnRlciA2LjIuMDk3KQorUHJvYmxlbTogICAgQ2FuJ3QgYnVpbGQgVmltIHdpdGggdGlueSBmZWF0dXJlcy4gKENocmlzdGlhbiBKLiBSb2JpbnNvbikKK1NvbHV0aW9uOiAgIERlY2xhcmUgc3RvcF9pbnNlcnRfbW9kZSBhbHdheXMuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9nbG9iYWxzLmgKKworUGF0Y2ggNi4yLjA5OSAoZXh0cmEpCitQcm9ibGVtOiAgICBUZXN0IDQ5IGZhaWxzLiAoTWlrb2xhaiBNYWNob3dza2kpCitTb2x1dGlvbjogICBUaGUgUG9saXNoIHRyYW5zbGF0aW9uIG11c3Qgbm90IGNoYW5nZSAiRTExNiIgdG8gIlIxMTYiLgorRmlsZXM6CSAgICBzcmMvcG8vcGwucG8KKworUGF0Y2ggNi4yLjEwMAorUHJvYmxlbTogICAgIm1ha2UgcHJvdG8iIGZhaWxzIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgUGVybCBpbnRlcmZhY2UuCitTb2x1dGlvbjogICBSZW1vdmUgIi1mbm8uKiIgZnJvbSBQRVJMX0NGTEFHUywgY3Byb3RvIHNlZXMgaXQgYXMgaXRzIG9wdGlvbi4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMi4xMDEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgc3ludGF4IGZvbGRpbmcsIG9wZW5pbmcgYSBmaWxlIHNsb3dzIGRvd24gYSBsb3Qgd2hlbgorCSAgICBpdCdzIHNpemUgaW5jcmVhc2VzIGJ5IG9ubHkgMjAlLiAoR2FyeSBKb2huc29uKQorU29sdXRpb246ICAgVGhlIGFycmF5IHdpdGggY2FjaGVkIHN5bnRheCBzdGF0ZXMgaXMgbGVha2luZyBlbnRyaWVzLiAgQWZ0ZXIKKwkgICAgY2xlYW5pbmcgdXAgdGhlIGxpc3Qgb2J0YWluIHRoZSBjdXJyZW50IGVudHJ5IGFnYWluLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4yLjEwMgorUHJvYmxlbTogICAgVGhlIG1hY3JvcyBlcXVhbCgpIGFuZCBDUiBjb25mbGljdCB3aXRoIGEgQ2FyYm9uIGhlYWRlciBmaWxlLgorU29sdXRpb246ICAgUmVuYW1lIGVxdWFsKCkgdG8gZXF1YWxwb3MoKS4gIFJlbmFtZSBDUiB0byBDQVIuCisJICAgIERvIHRoaXMgaW4gdGhlIG5vbi1leHRyYSBmaWxlcyBvbmx5LgorRmlsZXM6CSAgICBzcmMvYXNjaWkuaCwgc3JjL2J1ZmZlci5jLCBzcmMvY2hhcnNldC5jLCBzcmMvZWRpdC5jLCBzcmMvZXZhbC5jLAorCSAgICBzcmMvZXhfY21kcy5jLCBzcmMvZXhfY21kczIuYywgc3JjL2V4X2dldGxuLmMsIHNyYy9maWxlaW8uYywKKwkgICAgc3JjL2dldGNoYXIuYywgc3JjL2d1aS5jLCBzcmMvZ3VpX2F0aGVuYS5jLCBzcmMvZ3VpX2d0a194MTEuYywKKwkgICAgc3JjL2d1aV9tb3RpZi5jLCBzcmMvbWFjcm9zLmgsIHNyYy9tYXJrLmMsIHNyYy9tZXNzYWdlLmMsCisJICAgIHNyYy9taXNjMS5jLCBzcmMvbWlzYzIuYywgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMsIHNyYy9vc191bml4LmMsCisJICAgIHNyYy9yZWdleHAuYywgc3JjL3NlYXJjaC5jLCBzcmMvdWkuYywgc3JjL3dvcmtzaG9wLmMKKworUGF0Y2ggNi4yLjEwMyAoZXh0cmEpCitQcm9ibGVtOiAgICBUaGUgbWFjcm9zIGVxdWFsKCkgYW5kIENSIGNvbmZsaWN0IHdpdGggYSBDYXJib24gaGVhZGVyIGZpbGUuCitTb2x1dGlvbjogICBSZW5hbWUgZXF1YWwoKSB0byBlcXVhbHBvcygpLiAgUmVuYW1lIENSIHRvIENBUi4KKwkgICAgRG8gdGhpcyBpbiB0aGUgZXh0cmEgZmlsZXMgb25seS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9waG90b24uYywgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuMTA0CitQcm9ibGVtOiAgICBVbm1hdGNoZWQgYnJhY2VzIGluIHRoZSB0YWJsZSB3aXRoIG9wdGlvbnMuCitTb2x1dGlvbjogICBNb3ZlIHRoZSAifSwiIG91dHNpZGUgb2YgdGhlICNpZmRlZi4gKFlha292IExlcm5lcikKK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4xMDUKK1Byb2JsZW06ICAgIFdoZW4gdGhlIGN1cnNvciBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpbmUgd2hlbiBjYWxsaW5nCisJICAgIGdldF9jX2luZGVudCgpIGEgY3Jhc2ggbWlnaHQgb2NjdXIuCitTb2x1dGlvbjogICBEb24ndCBsb29rIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGluZS4gKE5KIFZlcmVuaW5pKQorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjIuMTA2CitQcm9ibGVtOiAgICBUYWcgc2VhcmNoaW5nIGdldHMgc3R1Y2sgb24gYSB2ZXJ5IGxvbmcgbGluZSBpbiB0aGUgdGFncyBmaWxlLgorU29sdXRpb246ICAgV2hlbiBza2lwcGluZyBiYWNrIHRvIHNlYXJjaCB0aGUgZmlyc3QgbWF0Y2hpbmcgdGFnIHJlbWVtYmVyIHRoZQorCSAgICBvZmZzZXQgd2hlcmUgc2VhcmNoaW5nIHN0YXJ0ZWQgbG9va2luZyBmb3IgYSBsaW5lIGJyZWFrLgorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjEwNyAoZXh0cmEpCitQcm9ibGVtOiAgICBUaGUgTmV0QmVhbnMgaW50ZXJmYWNlIGNhbm5vdCBiZSB1c2VkIG9uIFdpbjMyLgorU29sdXRpb246ICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBOZXRCZWFucyBmb3IgV2luMzIuICBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZworCSAgICBYUE0gZmlsZXMgb24gV2luMzIuICBBbHNvIGZpeGVzIHRoYXQgYSBzaWduIGljb24gd2l0aCBhIHNwYWNlIGluCisJICAgIHRoZSBmaWxlIG5hbWUgZGlkIG5vdCB3b3JrIHRocm91Z2ggdGhlIE5ldEJlYW5zIGludGVyZmFjZS4KKwkgICAgKFNlcmdleSBLaG9yZXYpCisJICAgIEFsc286IGF2b2lkIHJlcGVhdGluZyBlcnJvciBtZXNzYWdlcyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QuCitGaWxlczoJICAgIE1ha2VmaWxlLCBydW50aW1lL2RvYy9uZXRiZWFucy50eHQsIHNyYy9NYWtlX2JjNS5tYWssCisJICAgIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrLCBzcmMvTWFrZV9tdmMubWFrLAorCSAgICBzcmMvYmlndmltLmJhdCwgc3JjL2ZlYXR1cmUuaCwgc3JjL2d1aV9iZXZhbC5jLCBzcmMvZ3VpX2JldmFsLmgsCisJICAgIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMsIHNyYy9tZW51LmMsIHNyYy9uYmRlYnVnLmMsCisJICAgIHNyYy9uYmRlYnVnLmgsIHNyYy9uZXRiZWFucy5jLCBzcmMvb3NfbXN3aW4uYywgc3JjL29zX3dpbjMyLmgsCisJICAgIHNyYy9wcm90by9ndWlfYmV2YWwucHJvLCBzcmMvcHJvdG8vZ3VpX3czMi5wcm8sCisJICAgIHNyYy9wcm90by9uZXRiZWFucy5wcm8sIHNyYy9wcm90by5oLCBzcmMvdmVyc2lvbi5jLCBzcmMvdmltLmgsCisJICAgIHNyYy94cG1fdzMyLmMsIHNyYy94cG1fdzMyLmgKKworUGF0Y2ggNi4yLjEwOAorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiBnaXZpbmcgYSBtZXNzYWdlIGFib3V0IGlnbm9yaW5nIGNhc2UgaW4gYSB0YWcuIChNYW5mcmVkCisJICAgIEt1ZWhuKQorU29sdXRpb246ICAgVXNlIGEgbG9uZ2VyIGJ1ZmZlciBmb3IgdGhlIG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA2LjIuMTA5CitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5ncyB3aXRoIHZhcmlvdXMgQW1pZ2EgY29tcGlsZXJzLgorU29sdXRpb246ICAgQWRkIHR5cGVjYXN0LCBwcm90b3R5cGVzLCBldCBhbC4gdGhhdCBhcmUgYWxzbyB1c2VmdWwgZm9yIG90aGVyCisJICAgIHN5c3RlbXMuICAoRmxhdmlvIFN0YW5jaGluYSkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL29wcy5jCisKK1BhdGNoIDYuMi4xMTAKK1Byb2JsZW06ICAgIFdoZW4gJExBTkcgaW5jbHVkZXMgdGhlIGVuY29kaW5nLCBhIG1lbnUgd2l0aG91dCBhbiBlbmNvZGluZyBuYW1lCisJICAgIGlzIG5vdCBmb3VuZC4KK1NvbHV0aW9uOiAgIEFsc28gbG9vayBmb3IgYSBtZW51IGZpbGUgd2l0aG91dCBhbnkgZW5jb2RpbmcuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4yLjExMQorUHJvYmxlbTogICAgRW5jb2RpbmcgImNwMTI1MSIgaXMgbm90IHJlY29nbml6ZWQuCitTb2x1dGlvbjogICBBZGQgImNwMTI1MSIgdG8gdGhlIHRhYmxlIG9mIGVuY29jaW5ncy4gKEFsZXhleSBGcm9sb2ZmKQorRmlsZXM6CSAgICBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuMTEyCitQcm9ibGVtOiAgICBBZnRlciBhcHBseWluZyBwYXRjaGVzIHRlc3QzMiBmYWlscy4gKEFudG9uaW8gQ29sb21ibykKK1NvbHV0aW9uOiAgIEhhdmUgIm1ha2UgY2xlYW4iIGluIHRoZSB0ZXN0ZGlyIGRlbGV0ZSAqLnJlaiBhbmQgKi5vcmlnIGZpbGVzLgorCSAgICBVc2UgdGhpcyB3aGVuIGRvaW5nICJtYWtlIGNsZWFuIiBpbiB0aGUgc3JjIGRpcmVjdG9yeS4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlLCBzcmMvdGVzdGRpci9NYWtlZmlsZQorCitQYXRjaCA2LjIuMTEzCitQcm9ibGVtOiAgICBVc2luZyAiOnN0YXJ0aW5zZXJ0IiBhZnRlciAiJCIgd29ya3MgbGlrZSAiYSIgaW5zdGVhZCBvZiAiaSIuCisJICAgIChBaml0IFRoYWtrYXIpCitTb2x1dGlvbjogICBSZXNldCAid19jdXJzd2FudCIgZm9yICI6c3RhcnRpbnNlcnQiIGFuZCByZXNldCBvX2VvbCBpbiBlZGl0KCkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4xMTQKK1Byb2JsZW06ICAgIFdoZW4gc3Rkb3V0IGlzIHBpcGVkIHRocm91Z2ggInRlZSIsIHRoZSBzaXplIG9mIHRoZSBzY3JlZW4gbWF5IG5vdAorCSAgICBiZSBjb3JyZWN0LgorU29sdXRpb246ICAgVXNlIHN0ZGluIGluc3RlYWQgb2Ygc3Rkb3V0IGZvciBpb2N0bCgpIHdoZW4gc3RkaW4gaXMgYSB0dHkgYW5kCisJICAgIHN0ZG91dCBpc24ndC4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMTE1IChleHRyYSkKK1Byb2JsZW06ICAgIENvbXBpbGVyIHdhcm5pbmdzIHdpdGggdmFyaW91cyBBbWlnYSBjb21waWxlcnMuCitTb2x1dGlvbjogICBBZGQgdHlwZWNhc3QsIHByb3RvdHlwZXMsIGV0IGFsLiAgVGhvc2UgY2hhbmdlcyB0aGF0IGFyZQorCSAgICBBbWlnYS1zcGVjaWZpYy4gKEZsYXZpbyBTdGFuY2hpbmEpCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL21lbWZpbGUuYywgc3JjL29zX2FtaWdhLmMsIHNyYy9vc19hbWlnYS5oLAorCSAgICBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjExNiAoZXh0cmEpCitQcm9ibGVtOiAgICBHZXJtYW4ga2V5Ym9hcmQgd2l0aCBOdW1sb2NrIHNldCBkaWZmZXJlbnQgZnJvbSBzeXN0ZW0gc3RhcnR1cAorCSAgICBjYXVzZXMgcHJvYmxlbXMuCitTb2x1dGlvbjogICBJZ25vcmUga2V5cyB3aXRoIGNvZGUgMHhmZi4gKEhlbG11dCBTdGllZ2xlcikKK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuMTE3CitQcm9ibGVtOiAgICBCcmVha3BvaW50cyBpbiBsb29wcyBvZiBzb3VyY2VkIGZpbGVzIGFuZCBmdW5jdGlvbnMgYXJlIG5vdAorCSAgICBkZXRlY3RlZC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGJyZWFrcG9pbnRzIHdoZW4gdXNpbmcgbGluZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmVhZC4KKwkgICAgKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL3Byb3RvL2V2YWwucHJvLAorCSAgICBzcmMvcHJvdG8vZXhfY21kczIucHJvCisKK1BhdGNoIDYuMi4xMTggKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBDb21waWxpbmcgaXMgZG9uZSBpbiBhIG5vbi1zdGFuZGFyZCB3YXkuCitTb2x1dGlvbjogICBVc2UgdGhlIFVuaXggbWV0aG9kIGZvciBNYWMgT1MgWCwgd2l0aCBhdXRvY29uZi4gIEFkZCAiQ0FSQk9OR1VJIgorCSAgICB0byBNYWtlZmlsZSBhbmQgY29uZmlndXJlLiAoRXJpYyBLb3cpCisJICAgIE1vdmUgYSBmZXcgcHJvdG90eXBlcyBmcm9tIG9zX21hYy5wcm8gdG8gZ3VpX21hYy5wcm8uCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZSwgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLAorCSAgICBzcmMvY29uZmlnLm1rLmluLCBzcmMvZ3VpX21hYy5jLCBzcmMvb3NfbWFjLmgsIHNyYy9vc19tYWNvc3guYywKKwkgICAgc3JjL3Byb3RvL2d1aV9tYWMucHJvLCBzcmMvcHJvdG8vb3NfbWFjLnBybywKKwkgICAgc3JjL2luZnBsaXN0LnhtbCwgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4xMTkgKGFmdGVyIDYuMi4xMDcpCitQcm9ibGVtOiAgICBXaGVuIHBhY2tpbmcgdGhlIE1TLVdpbmRvd3MgYXJjaGl2ZXMgYSBmZXcgZmlsZXMgYXJlIG1pc3NpbmcuCisJICAgIChHdW9wZW5nIFdlbikKK1NvbHV0aW9uOiAgIEFkZCBndWlfYmV2YWwuKiB0byB0aGUgbGlzdCBvZiBnZW5lcmljIHNvdXJjZSBmaWxlcy4KK0ZpbGVzOgkgICAgTWFrZWZpbGUKKworUGF0Y2ggNi4yLjEyMAorUHJvYmxlbTogICAgV2luMzIgR1VJOiBUaGUgY29uc29sZSBkaWFsb2dzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIE1TLVdpbmRvd3MsCisJICAgIGRpc2FibGluZyB0aGUgJ2MnIGZsYWcgb2YgJ2d1aW9wdGlvbnMnLiAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIERlZmluZSBGRUFUX0NPTl9ESUFMT0cgYWxzbyBmb3IgR1VJLW9ubHkgYnVpbGRzLgorRmlsZXM6CSAgICBzcmMvZmVhdHVyZS5oCisKK1BhdGNoIDYuMi4xMjEgKGFmdGVyIDYuMi4xMTgpCitQcm9ibGVtOiAgICBOb3QgYWxsIG1ha2UgcHJvZ3JhbXMgc3VwcG9ydCAiKz0iLiAoQ2hhcmxlcyBDYW1wYmVsbCkKK1NvbHV0aW9uOiAgIFVzZSBhIG5vcm1hbCBhc3NpZ25tZW50LgorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjEyMiAoYWZ0ZXIgNi4yLjExOSkKK1Byb2JsZW06ICAgIE5vdCBhbGwgc2hlbGxzIGNhbiBleHBhbmQgW15+XS4gIEZpbGUgbWlzc2luZy4gIChHdW9wZW5nIFdlbikKK1NvbHV0aW9uOiAgIFVzZSBhIHNpbXBsZXIgcGF0dGVybi4gIEFkZCB0aGUgQWFwIHJlY2lwZSBmb3IgdGhlIG1hemUgcHJvZ3JhbQorCSAgICBhbmQgYSBjbGVhbiB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgY29kZS4KK0ZpbGVzOgkgICAgTWFrZWZpbGUsIHJ1bnRpbWUvbWFjcm9zL21hemUvTWFrZWZpbGUsCisJICAgIHJ1bnRpbWUvbWFjcm9zL21hemUvUkVBRE1FLnR4dCwgcnVudGltZS9tYWNyb3MvbWF6ZS9tYWluLmFhcCwKKwkgICAgcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplY2xlYW4uYworCitQYXRjaCA2LjIuMTIzIChhZnRlciA2LjIuMTE4KQorUHJvYmxlbTogICAgUnVubmluZyBjb25maWd1cmUgZmFpbHMuIChUb255IExlbmVpcykKK1NvbHV0aW9uOiAgIENoYW5nZSAiPT0iIHRvICI9IiBmb3IgYSB0ZXN0LgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4KKworUGF0Y2ggNi4yLjEyNCAoYWZ0ZXIgNi4yLjEyMSkoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IFJlY3Vyc2l2ZSB1c2Ugb2YgTTRGTEFHUyBjYXVzZXMgcHJvYmxlbXMuICBXaGVuIHJ1bm5pbmcgVmltCisJICAgIGRpcmVjdGx5IGl0IGNhbid0IGZpbmQgdGhlIHJ1bnRpbWUgZmlsZXMuICAoRW1pbHkgSmFja3NvbikKKwkgICAgVXNpbmcgR05VIGNvbnN0cnVjdHMgY2F1c2VzIHdhcm5pbmdzIHdpdGggb3RoZXIgbWFrZSBwcm9ncmFtcy4KKwkgICAgKFJvbmFsZCBTY2hpbGQpCitTb2x1dGlvbjogICBVc2UgYW5vdGhlciBuYW1lIGZvciB0aGUgTTRGTEFHUyB2YXJpYWJsZS4KKwkgICAgRG9uJ3QgcmVtb3ZlICJWaW0uYXBwIiBmcm9tIHRoZSBwYXRoLgorCSAgICBVcGRhdGUgdGhlIGV4cGxhbmF0aW9uIGZvciBjb21waWxpbmcgb24gdGhlIE1hYy4gKEVyaWMgS293KQorCSAgICBEb24ndCB1c2UgJChzaGVsbCApIGFuZCAkKGFkZHByZWZpeCApLgorRmlsZXM6CSAgICBzcmMvSU5TVEFMTG1hYy50eHQsIHNyYy9NYWtlZmlsZSwgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4yLjEyNSAoYWZ0ZXIgNi4yLjEwNykKK1Byb2JsZW06ICAgIFRoZSAid2luc29jazIuaCIgZmlsZSBpc24ndCBhbHdheXMgYXZhaWxhYmxlLgorU29sdXRpb246ICAgRG9uJ3QgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlLgorRmlsZXM6CSAgICBzcmMvbmV0YmVhbnMuYworCitQYXRjaCA2LjIuMTI2CitQcm9ibGVtOiAgICBUeXBpbmcgQ1RSTC1DIGF0IGEgY29uZmlybSgpIHByb21wdCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbi4KK1NvbHV0aW9uOiAgIFJlc2V0ICJtYXBwZWRfY3RybF9jIiBpbiBnZXRfa2V5c3Ryb2tlKCksIHNvIHRoYXQgImdvdF9pbnQiIGlzIHNldAorCSAgICBpbiBfT25DaGFyKCkuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi4xMjcgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzIgY29uc29sZTogVHlwaW5nIENUUkwtQyBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbi4KK1NvbHV0aW9uOiAgIFNldCBnb3RfaW50IGltbWVkaWF0ZWx5IHdoZW4gQ1RSTC1DIGlzIHR5cGVkLCBkb24ndCB3YWl0IGZvcgorCSAgICBtY2hfYnJlYWtjaGVjaygpIGJlaW5nIGNhbGxlZC4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjEyOCAoYWZ0ZXIgNi4yLjExOCkKK1Byb2JsZW06ICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSBpcyBub3QgY29uc2lzdGVudCB3aXRoIHNyYy9jb25maWd1cmUuaW4uCitTb2x1dGlvbjogICBVc2UgdGhlIG5ld2x5IGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0LgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUKKworUGF0Y2ggNi4yLjEyOQorUHJvYmxlbTogICAgV2hlbiAnbnVtYmVyJyBpcyBzZXQgJ3dyYXBtYXJnaW4nIGRvZXMgbm90IHdvcmsgVmktY29tcGF0aWJsZS4KKwkgICAgKFlhc3VoaXJvIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIFJlZHVjZSB0aGUgdGV4dHdpZHRoIHdoZW4gJ251bWJlcicgaXMgc2V0LiAgQWxzbyBmb3IgJ2ZvbGRjb2x1bW4nCisJICAgIGFuZCBzaW1pbGFyIHRoaW5ncy4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjIuMTMwIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIGNvbnNvbGU6IFdoZW4gJ3Jlc3RvcmVzY3JlZW4nIGlzIG5vdCBzZXQgZXhpdGluZyBWaW0gY2F1c2VzCisJICAgIHRoZSBzY3JlZW4gdG8gYmUgY2xlYXJlZC4gKE1pY2hhZWwgQS4gTWFuZ2lubykKK1NvbHV0aW9uOiAgIERvbid0IGNsZWFyIHRoZSBzY3JlZW4gd2hlbiBleGl0aW5nIGFuZCAncmVzdG9yZXNjcmVlbicgaXNuJ3Qgc2V0LgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuMTMxIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBGb250IGhhbmRsZXMgYXJlIGxlYWtlZC4KK1NvbHV0aW9uOiAgIEZyZWUgaXRhbGljLCBib2xkIGFuZCBib2xkLWl0YWxpYyBoYW5kbGVzIGJlZm9yZSBvdmVyd3JpdGluZyB0aGVtLgorCSAgICAoTWljaGFlbCBXb29rZXkpCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4yLjEzMiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogY29uc29sZSB2ZXJzaW9uIGRvZXNuJ3Qgd29yayBvbiBsYXRlc3QgV2luZG93cyBTZXJ2ZXIgMjAwMy4KK1NvbHV0aW9uOiAgIENvcHkgMTIwMDAgaW5zdGVhZCBvZiAxNTAwMCBjZWxscyBhdCBhIHRpbWUgdG8gYXZvaWQgcnVubmluZyBvdXQKKwkgICAgb2YgbWVtb3J5LgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuMTMzCitQcm9ibGVtOiAgICBXaGVuIHN0YXJ0aW5nIHRoZSBHVUkgYSBib2d1cyBlcnJvciBtZXNzYWdlIGFib3V0ICdpbWFjdGl2YXRla2V5JworCSAgICBtYXkgYmUgZ2l2ZW4uCitTb2x1dGlvbjogICBPbmx5IGNoZWNrIHRoZSB2YWx1ZSBvZiAnaW1hY3RpdmF0ZWtleScgd2hlbiB0aGUgR1VJIGlzIHJ1bm5pbmcuCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4xMzQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gc2Nyb2xsaW5nIHBhcnRzIG9mIHRoZSB3aW5kb3cgYXJlIHJlZHJhd24gd2hlbiB0aGlzCisJICAgIGlzbid0IG5lY2Vzc2FyeS4KK1NvbHV0aW9uOiAgIE9ubHkgaW52YWxpZGF0ZSBwYXJ0cyBvZiB0aGUgd2luZG93IHdoZW4gdGhleSBhcmUgb2JzY3VyZWQgYnkKKwkgICAgb3RoZXIgd2luZG93cy4gKE1pY2hhZWwgV29va2V5KQorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMi4xMzUKK1Byb2JsZW06ICAgIEFuIGl0ZW0gPD4gaW4gdGhlICI6Y29tbWFuZCIgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgPGFyZ3M+LgorU29sdXRpb246ICAgQXZvaWQgdGhhdCA8PiBpcyByZWNvZ25pemVkIGFzIDxhcmdzPi4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjEzNgorUHJvYmxlbTogICAgIjplICsrZW5jPWxhdGluMSBuZXdmaWxlIiBkb2Vzbid0IHNldCAnZmVuYycgd2hlbiB0aGUgZmlsZSBkb2Vzbid0CisJICAgIGV4aXN0LiAgKE1pcm9zbGF3IERvYnJ6YW5za2ktTmV1bWFubikKK1NvbHV0aW9uOiAgIFNldCAnZmlsZWVuY29kaW5nJyB0byB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIHdoZW4gZWRpdGluZyBhIGZpbGUKKwkgICAgdGhhdCBkb2VzIG5vdCBleGlzdC4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi4xMzcKK1Byb2JsZW06ICAgICJkOmNtZDxDUj4iIGNhbm5vdCBiZSByZXBlYXRlZCB3aXRoICIuIi4gIEJyZWFrcyByZXBlYXRpbmcgImQlIgorCSAgICB3aGVuIHVzaW5nIHRoZSBtYXRjaGl0IHBsdWdpbi4KK1NvbHV0aW9uOiAgIFN0b3JlIHRoZSBjb21tYW5kIHRvIGJlIHJlcGVhdGVkLiAgVGhpcyBpcyByZXN0cmljdGVkIHRvCisJICAgIHNpbmdsZS1saW5lIGNvbW1hbmRzLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2dsb2JhbHMuaCwgc3JjL25vcm1hbC5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjEzOCAoZXh0cmEpCitQcm9ibGVtOiAgICBDb21waWxhdGlvbiBwcm9ibGVtIG9uIFZNUyB3aXRoIGR5bmFtaWMgYnVmZmVyIG9uIHRoZSBzdGFjay4KK1NvbHV0aW9uOiAgIFJlYWQgb25lIGJ5dGUgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIHNvIHRoYXQgd2UgY2FuCisJICAgIGNoZWNrIGZvciB0aGUgc3RyaW5nIGxlbmd0aCB3aXRob3V0IGFuIGV4dHJhIGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL29zX3Ztcy5jCisKK1BhdGNoIDYuMi4xMzkKK1Byb2JsZW06ICAgIENvZGUgaXMgcmVwZWF0ZWQgaW4gdGhlIHR3byBQZXJsIGZpbGVzLgorU29sdXRpb246ICAgTW92ZSBjb21tb24gY29kZSBmcm9tIGlmX3BlcmwueHMgYW5kIGlmX3BlcmxzZmlvLmMgdG8gdmltLmguCisJICAgIEFsc28gZml4IGEgcHJvYmxlbSB3aXRoIGdlbmVyYXRpbmcgcHJvdG90eXBlcy4KK0ZpbGVzOgkgICAgc3JjL2lmX3BlcmwueHMsIHNyYy9pZl9wZXJsc2Zpby5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjE0MCAoYWZ0ZXIgNi4yLjEyMSkKK1Byb2JsZW06ICAgIE1hYzogQ29tcGlsaW5nIHdpdGggUHl0aG9uIGFuZCBQZXJsIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIEFkanVzdCB0aGUgY29uZmlndXJlIGNoZWNrIGZvciBQeXRob24gdG8gdXNlICItZnJhbWV3b3JrIFB5dGhvbiIKKwkgICAgZm9yIFB5dGhvbiAyLjMgb24gTWFjIE9TL1guCisJICAgIE1vdmUgIi1sZGwiIGFmdGVyICJEeW5hTG9hZGVyLmEiIGluIHRoZSBsaW5rIGNvbW1hbmQuCisJICAgIENoYW5nZSAicGVybGxpYnMiIHRvICJQRVJMX0xJQlMiLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWcubWsuaW4KKworUGF0Y2ggNi4yLjE0MSAoZXh0cmEpCitQcm9ibGVtOiAgICBNYWM6IFRoZSBiX0ZTU3BlYyBmaWVsZCBpcyBzb21ldGltZXMgdW51c2VkLgorU29sdXRpb246ICAgQ2hhbmdlIHRoZSAjaWZkZWYgdG8gRkVBVF9DV19FRElUT1IgYW5kIGRlZmluZWQgaXQgaW4gZmVhdHVyZS5oCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL2d1aV9tYWMuYywgc3JjL3N0cnVjdHMuaCwgc3JjL2ZlYXR1cmUuaAorCitQYXRjaCA2LjIuMTQyIChhZnRlciA2LjIuMTI0KQorUHJvYmxlbTogICAgTWFjOiBidWlsZGluZyB3aXRob3V0IEdVSSB0aHJvdWdoIGNvbmZpZ3VyZSBkb2Vzbid0IHdvcmsuCisJICAgIFdoZW4gdGhlIHN5c3RlbSBpcyBzbG93LCB1bnBhY2tpbmcgdGhlIHJlc291cmNlIGZpbGUgdGFrZXMgdG9vCisJICAgIGxvbmcuCitTb2x1dGlvbjogICBEb24ndCBhbHdheXMgZGVmaW5lIEZFQVRfR1VJX01BQyB3aGVuIE1BQ09TIGlzIGRlZmluZWQsIGRlZmluZSBpdAorCSAgICBpbiB0aGUgTWFrZWZpbGUuCisJICAgIEFkZCBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gc2tpcCBEYXJ3aW4gZGV0ZWN0aW9uLgorCSAgICBVc2UgYSBQeXRob24gc2NyaXB0IHRvIHVucGFjayB0aGUgcmVzb3VyY2VzIHRvIGF2b2lkIGEgcmFjZQorCSAgICBjb25kaXRpb24uIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIE1ha2VmaWxlLCBzcmMvTWFrZWZpbGUsIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbiwKKwkgICAgc3JjL2RlaHF4LnB5LCBzcmMvdmltLmgKKworUGF0Y2ggNi4yLjE0MworUHJvYmxlbTogICAgVXNpbmcgIksiIG9uIFZpc3VhbGx5IHNlbGVjdGVkIHRleHQgZG9lc24ndCB3b3JrIGlmIGl0IGVuZHMgaW4KKwkgICAgYSBtdWx0aS1ieXRlIGNoYXJhY3Rlci4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgYWxsIHRoZSBieXRlcyBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIuIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMTQ0CitQcm9ibGVtOiAgICBXaGVuICJnOmh0bWxfdXNlX2NzcyIgaXMgc2V0IHRoZSBIVE1MIGhlYWRlciBnZW5lcmF0ZWQgYnkgdGhlCisJICAgIDJodG1sIHNjcmlwdCBpcyB3cm9uZy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgaGVhZGVyIGFmdGVyIGFkZGluZyBIUkVGIGZvciBsaW5rcy4KKwkgICAgQWxzbyB1c2UgIjpub3JtYWwhIiBpbnN0ZWFkIG9mICI6bm9ybWFsIiB0byBhdm9pZCBtYXBwaW5ncworCSAgICBnZXR0aW5nIGluIHRoZSB3YXkuCitGaWxlczoJICAgIHJ1bnRpbWUvc3ludGF4LzJodG1sLnZpbQorCitQYXRjaCA2LjIuMTQ1IChhZnRlciA2LjIuMTM5KQorUHJvYmxlbTogICAgVW5kZWZpbmluZyAiYm9vbCIgZG9lc24ndCB3b3JrIGZvciBvbGRlciBzeXN0ZW1zLiAoV29qdGVrIFBpbG9yeikKK1NvbHV0aW9uOiAgIE9ubHkgdW5kZWZpbmUgImJvb2wiIG9uIE1hYyBPUy4KK0ZpbGVzOgkgICAgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4xNDYKK1Byb2JsZW06ICAgIE9uIHNvbWUgc3lzdGVtcyB0aGUgcHJvdG90eXBlIGZvciBpY29udigpIGlzIHdyb25nLCBjYXVzaW5nIGEKKwkgICAgd2FybmluZyBtZXNzYWdlLgorU29sdXRpb246ICAgVXNlIGEgY2FzdCAodm9pZCAqKSB0byBhdm9pZCB0aGUgd2FybmluZy4gKENoYXJsZXMgQ2FtcGJlbGwpCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yLjE0NworUHJvYmxlbTogICAgIjpzL3BhdC9cPWNvbCgnLicpIiBhbHdheXMgcmVwbGFjZXMgd2l0aCAiMSIuCitTb2x1dGlvbjogICBTZXQgdGhlIGN1cnNvciB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoIGJlZm9yZSBzdWJzdGl0dXRpbmcuCisJICAgIChIZWxtdXQgU3RpZWdsZXIpCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjE0OAorUHJvYmxlbTogICAgQ2FuJ3QgYnJlYWsgYW4gSW5zZXJ0IGludG8gc2V2ZXJhbCB1bmRvYWJsZSBwYXJ0cy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgQ1RSTC1HIHUgY29tbWFuZC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvaW5zZXJ0LnR4dCwgc3JjL2VkaXQuYworCitQYXRjaCA2LjIuMTQ5CitQcm9ibGVtOiAgICBXaGVuIHRoZSBjdXJzb3IgaXMgb24gYSBsaW5lIHBhc3QgMjEsNDc0LDc0OCB0aGUgaW5kaWNhdGVkCisJICAgIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvc2l0aW9uIGlzIGludmFsaWQuICBXaXRoIHRoYXQgbWFueSBsaW5lcworCSAgICAiMTAwJSIgY2F1c2VzIGEgbmVnYXRpdmUgY3Vyc29yIGxpbmUgbnVtYmVyLCByZXN1bHRpbmcgaW4gYSBjcmFzaC4KKwkgICAgKERhbmllbCBHb3Vqb3QpCitTb2x1dGlvbjogICBEaXZpZGUgYnkgMTAwIGluc3RlYWQgb2YgbXVsdGlwbHlpbmcuICBBdm9pZCBvdmVyZmxvdyB3aGVuCisJICAgIGNvbXB1dGluZyB0aGUgbGluZSBudW1iZXIgZm9yICIxMDAlIi4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvZXhfY21kczIuYywgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4xNTAKK1Byb2JsZW06ICAgIFdoZW4gZG9pbmcgInZpbSAtIDwgZmlsZSIgbGluZXMgYXJlIGJyb2tlbiBhdCBOVUwgY2hhcnMuCisJICAgIChEYW5pZWwgR291am90KQorU29sdXRpb246ICAgQ2hhbmdlIE5MIGNoYXJhY3RlcnMgYmFjayB0byBOVUwgd2hlbiByZWFkaW5nIGZyb20gdGhlIHRlbXAKKwkgICAgYnVmZmVyLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjE1MQorUHJvYmxlbTogICAgV2hlbiBkb2luZyAidmltIC0tcmVtb3RlICtzdGFydGluc2VydCBmaWxlIiBzb21lIGNvbW1hbmRzIGFyZQorCSAgICBpbnNlcnRlZCBhcyB0ZXh0LiAoS2xhdXMgQm9zYXUpCitTb2x1dGlvbjogICBQdXQgYWxsIHRoZSBpbml0IGNvbW1hbmRzIGluIG9uZSBFeCBsaW5lLCBub3QgdXNpbmcgYSA8Q1I+LCBzbworCSAgICB0aGF0IEluc2VydCBtb2RlIGlzbid0IHN0YXJ0ZWQgdG9vIGVhcmx5LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMi4xNTIKK1Byb2JsZW06ICAgIFRoZSBjdXJzb3IoKSBmdW5jdGlvbiBkb2Vzbid0IHJlc2V0IHRoZSBjb2x1bW4gb2Zmc2V0IGZvcgorCSAgICAndmlydHVhbGVkaXQnLgorU29sdXRpb246ICAgUmVzZXQgdGhlIG9mZnNldCB0byB6ZXJvLiAoSGVsbXV0IFN0aWVnbGVyKQorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi4xNTMKK1Byb2JsZW06ICAgIFdpbjMyOiAiOmxhbmcgZ2VybWFuIiBkb2Vzbid0IHVzZSBHZXJtYW4gbWVzc2FnZXMuCitTb2x1dGlvbjogICBBZGQgYSB0YWJsZSB0byB0cmFuc2xhdGUgdGhlIFdpbjMyIGxhbmd1YWdlIG5hbWVzIHRvIHR3by1sZXR0ZXIKKwkgICAgbGFuZ3VhZ2UgY29kZXMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi4xNTQKK1Byb2JsZW06ICAgIFB5dGhvbiBiYWlscyBvdXQgd2hlbiBnaXZpbmcgYSB3YXJuaW5nIG1lc3NhZ2UuIChFdWdlbmUKKwkgICAgTWlua292c2tpaSkKK1NvbHV0aW9uOiAgIFNldCBzeXMuYXJndltdIHRvIGFuIGVtcHR5IHN0cmluZy4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi4xNTUKK1Byb2JsZW06ICAgIFdpbjMyOiBVc2luZyAiOnRqdW1wIHd3dyIgaW4gYSBoZWxwIGZpbGUgZ2l2ZXMgdHdvIHJlc3VsdHMuCisJICAgIChEYXZlIFJvYmVydHMpCitTb2x1dGlvbjogICBJZ25vcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzbGFzaGVzIGFuZCBiYWNrc2xhc2hlcyB3aGVuIGNoZWNraW5nCisJICAgIGZvciBpZGVudGljYWwgdGFnIG1hdGNoZXMuCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA2LjIuMTU2IChhZnRlciA2LjIuMTI1KQorUHJvYmxlbTogICAgV2luMzI6IE5ldGJlYW5zIGZhaWxzIHRvIGJ1aWxkLCBFSU5UUiBpcyBub3QgZGVmaW5lZC4KK1NvbHV0aW9uOiAgIFJlZGVmaW5lIEVJTlRSIHRvIFdTQUVJTlRSLiAoTWlrZSBXaWxsaWFtcykKK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4yLjE1NworUHJvYmxlbTogICAgVXNpbmcgIiVwIiBpbiAnZXJyb3Jmb3JtYXQnIGdpdmVzIGEgY29sdW1uIG51bWJlciB0aGF0IGlzIHRvbworCSAgICBoaWdoLgorU29sdXRpb246ICAgU2V0IHRoZSBmbGFnIHRvIHVzZSB0aGUgbnVtYmVyIGFzIGEgdmlydHVhbCBjb2x1bW4uICAoTGVmdGVyaXMKKwkgICAgS291dHNvbG91a2FzKQorRmlsZXM6CSAgICBzcmMvcXVpY2tmaXguYworCitQYXRjaCA2LjIuMTU4CitQcm9ibGVtOiAgICBUaGUgc2VkIGNvbW1hbmQgb24gU29sYXJpcyBhbmQgSFBVWCBkb2Vzbid0IHdvcmsgZm9yIGEgbGluZSB0aGF0CisJICAgIGRvZXNuJ3QgZW5kIGluIGEgbmV3bGluZS4KK1NvbHV0aW9uOiAgIEFkZCBhIG5ld2xpbmUgd2hlbiBmZWVkaW5nIHRleHQgdG8gc2VkLiAoTWFyayBXYWdnb25lcikKK0ZpbGVzOgkgICAgc3JjL2NvbmZpZ3VyZS5pbiwgc3JjL2F1dG8vY29uZmlndXJlCisKK1BhdGNoIDYuMi4xNTkKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgZXhwcmVzc2lvbiBmb2xkaW5nIGFuZCAnZm9sZG9wZW4nIGlzICJ1bmRvIiBhbiB1bmRvCisJICAgIGNvbW1hbmQgZG9lc24ndCBhbHdheXMgb3BlbiB0aGUgZm9sZC4KK1NvbHV0aW9uOiAgIFNhdmUgYW5kIHJlc3RvcmUgdGhlIEtleVR5cGVkIHZhcmlhYmxlIHdoZW4gZXZhbHVhdGluZyAnZm9sZGV4cHInLgorCSAgICAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvZm9sZC5jCisKK1BhdGNoIDYuMi4xNjAKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyAiYWxsIiBhbmQgJ3NlbGVjdGlvbiBpcyAiZXhjbHVzaXZlIiwKKwkgICAgc2VsZWN0aW5nIGEgZG91YmxlLXdpZHRoIGNoYXJhY3RlciBiZWxvdyBhIHNpbmdsZS13aWR0aCBjaGFyYWN0ZXIKKwkgICAgbWF5IGNhdXNlIGEgY3Jhc2guCitTb2x1dGlvbjogICBBdm9pZCBvdmVyZmxvdyBvbiB1bnNpZ25lZCBpbnRlZ2VyIGRlY3JlbWVudC4gKFRhcm8gTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4xNjEgKGV4dHJhKQorUHJvYmxlbTogICAgVk1TOiBNaXNzaW5nIGhlYWRlciBmaWxlLiAgUmVhZGluZyBpbnB1dCBidXN5IGxvb3BzLgorU29sdXRpb246ICAgSW5jbHVkZSB0ZXJtZGVmLmguICBBdm9pZCB0aGUgdXNlIG9mIGEgd2FpdCBmdW5jdGlvbiBpbgorCSAgICB2bXNfcmVhZCgpLiAgKEZyYW5rIFJpZXMpCitGaWxlczoJICAgIHNyYy9vc191bml4LmgsIHNyYy9vc192bXMuYworCitQYXRjaCA2LjIuMTYyCitQcm9ibGVtOiAgICAiOnJlZHJhdyIgZG9lc24ndCBhbHdheXMgZGlzcGxheSB0aGUgdGV4dCB0aGF0IGluY2x1ZGVzIHRoZSBjdXJzb3IKKwkgICAgcG9zaXRpb24sIGUuZy4gYWZ0ZXIgIjpjYWxsIGN1cnNvcigxLCAwKSIuIChFdWdlbmUgTWlua292c2tpaSkKK1NvbHV0aW9uOiAgIENhbGwgdXBkYXRlX3RvcGxpbmUoKSBiZWZvcmUgcmVkcmF3aW5nLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuMTYzCitQcm9ibGVtOiAgICAibWFrZSBpbnN0YWxsIiBtYXkgYWxzbyBjb3B5IEFBUERJUiBkaXJlY3Rvcmllcy4KK1NvbHV0aW9uOiAgIERlbGV0ZSBBQVBESVIgZGlyZWN0b3JpZXMsIGp1c3QgbGlrZSBDVlMgZGlyZWN0b3JpZXMuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjIuMTY0IChhZnRlciA2LjIuMTQ0KQorUHJvYmxlbTogICAgV2hlbiAiZzpodG1sX3VzZV9jc3MiIGlzIHNldCB0aGUgSFRNTCBoZWFkZXIgZ2VuZXJhdGVkIGJ5IHRoZQorCSAgICAyaHRtbCBzY3JpcHQgaXMgc3RpbGwgd3JvbmcuCitTb2x1dGlvbjogICBTZWFyY2ggZm9yIGEgc3RyaW5nIGluc3RlYWQgb2YganVtcGluZyB0byBhIGZpeGVkIGxpbmUgbnVtYmVyLgorCSAgICBHbyB0byB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYmVmb3JlIGluc2VydGluZyB0aGUgaGVhZGVyLgorCSAgICAoSmVzcyBUaHJ5c29lZSkKK0ZpbGVzOgkgICAgcnVudGltZS9zeW50YXgvMmh0bWwudmltCisKK1BhdGNoIDYuMi4xNjUKK1Byb2JsZW06ICAgIFRoZSBjb25maWd1cmUgY2hlY2tzIGhhbmcgd2hlbiB1c2luZyBhdXRvY29uZiAyLjU3LgorU29sdXRpb246ICAgSW52b2tlIEFDX1BST0dSQU1fRUdSRVAgdG8gc2V0ICRFR1JFUC4gKEFyb24gR3JpZmZpcykKK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMi4xNjYKK1Byb2JsZW06ICAgIFdoZW4gJEdaSVAgY29udGFpbnMgIi1OIiBlZGl0aW5nIGNvbXByZXNzZWQgZmlsZXMgZG9lc24ndCB3b3JrCisJICAgIHByb3Blcmx5LgorU29sdXRpb246ICAgQWRkICItbiIgdG8gImd6aXAgLWQiIHRvIGF2b2lkIHJlc3RvcmluZyB0aGUgZmlsZSBuYW1lLiAoT3l2aW5kCisJICAgIEhvbG0pCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2d6aXAudmltCisKK1BhdGNoIDYuMi4xNjcKK1Byb2JsZW06ICAgIFRoZSBQeXRob24gaW50ZXJmYWNlIGxlYWtzIG1lbW9yeSB3aGVuIGFzc2lnbmluZyBsaW5lcyB0byBhCisJICAgIGJ1ZmZlci4gKFNlcmdleSBLaG9yZXYpCitTb2x1dGlvbjogICBEbyBub3QgY29weSB0aGUgbGluZSB3aGVuIGNhbGxpbmcgbWxfcmVwbGFjZSgpLgorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4yLjE2OAorUHJvYmxlbTogICAgUHl0aG9uIGludGVyZmFjZTogVGhlcmUgaXMgbm8gd2F5IHRvIGdldCB0aGUgaW5kaWNlcyBmcm9tIGEgcmFuZ2UKKwkgICAgb2JqZWN0LgorU29sdXRpb246ICAgQWRkIHRoZSAic3RhcnQiIGFuZCAiZW5kIiBhdHRyaWJ1dGVzLiAoTWF1cmljZSBTLiBCYXJudW0pCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYywgcnVudGltZS9kb2MvaWZfcHl0aC50eHQKKworUGF0Y2ggNi4yLjE2OQorUHJvYmxlbTogICAgVGhlIHByb3RvdHlwZSBmb3IgX1htYmxlbigpIGFwcGVhcnMgaW4gYSByZWNlbnQgWEZyZWU4NiBoZWFkZXIKKwkgICAgZmlsZSwgY2F1c2luZyBhIHdhcm5pbmcgZm9yIG91ciBwcm90b3R5cGUuIChIaXNhc2hpIFQgRnVqaW5ha2EpCitTb2x1dGlvbjogICBNb3ZlIHRoZSBwcm90b3R5cGUgdG8gYW4gb3NkZWYgZmlsZSwgc28gdGhhdCBpdCdzIGZpbHRlcmVkIG91dC4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMsIHNyYy9vc2RlZjIuaC5pbgorCitQYXRjaCA2LjIuMTcwCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIFN1biBXb3JrU2hvcCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXNuJ3QgY2hhbmdlZCB0bworCSAgICB3aGVyZSB0aGUgZmlsZSBpcy4KK1NvbHV0aW9uOiAgIFNldCB0aGUgJ2F1dG9jaGRpcicgb3B0aW9uIHdoZW4gdXNpbmcgV29ya1Nob3AuICBBbmQgYXZvaWQgdXNpbmcKKwkgICAgdGhlIGJhc2VuYW1lIHdoZW4gJ2F1dG9jaGRpcicgaXMgbm90IHNldC4KK0ZpbGVzOgkgICAgc3JjL2d1aV94MTEuYywgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMTcxIChhZnRlciA2LjIuMTYzKQorUHJvYmxlbTogICAgVGhlICItb3IiIGFyZ3VtZW50IG9mICJmaW5kIiBkb2Vzbid0IHdvcmsgZm9yIFN5c1Ygc3lzdGVtcy4KK1NvbHV0aW9uOiAgIFVzZSAiLW8iIGluc3RlYWQuIChHb3Jkb24gUHJpZXVyKQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjE3MiAoYWZ0ZXIgNi4yLjE2OSkKK1Byb2JsZW06ICAgIFRoZSBwcm90b3R5cGUgZm9yIF9YbWJsZW4oKSBzdGlsbCBjYXVzZXMgdHJvdWJsZS4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGhlIFgxMSBoZWFkZXIgZmlsZSB0aGF0IGRlZmluZXMgdGhlIHByb3RvdHlwZS4KK0ZpbGVzOgkgICAgc3JjL29zZGVmMi5oLmluLCBzcmMvb3NkZWYuc2gKKworUGF0Y2ggNi4yLjE3MyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogUnVieSBpbnRlcmZhY2UgZG9lc24ndCB3b3JrIHdpdGggUnVieSAxLjguMCBmb3Igb3RoZXIKKwkgICAgY29tcGlsZXJzIHRoYW4gTVNWQy4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgQkM1LCBDeWd3aW4gYW5kIE1pbmd3IG1ha2VmaWxlcy4gKERhbiBTaGFycCkKK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haywgc3JjL01ha2VfY3lnLm1haywgc3JjL01ha2VfbWluZy5tYWsKKworUGF0Y2ggNi4yLjE3NAorUHJvYmxlbTogICAgQWZ0ZXIgdGhlICI6aW50cm8iIG1lc3NhZ2Ugb25seSBhIG1vdXNlIGNsaWNrIGluIHRoZSBsYXN0IGxpbmUKKwkgICAgZ2V0cyBwYXN0IHRoZSBoaXQtcmV0dXJuIHByb21wdC4KK1NvbHV0aW9uOiAgIEFjY2VwdCBhIGNsaWNrIGF0IG9yIGJlbG93IHRoZSBoaXQtcmV0dXJuIHByb21wdC4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMi4xNzUKK1Byb2JsZW06ICAgIENoYW5naW5nICdiYWNrdXBleHQnIGluIGEgKldyaXRlUHJlIGF1dG9jb21tYW5kIGRvZXNuJ3Qgd29yay4KKwkgICAgKFdpbGxpYW0gTmF0dGVyKQorU29sdXRpb246ICAgTW92ZSB0aGUgdXNlIG9mIHBfYmV4IHRvIGFmdGVyIGV4ZWN1dGluZyB0aGUgKldyaXRlUHJlCisJICAgIGF1dG9jb21tYW5kcy4gIEFsc28gYXZvaWRzIHJlYWRpbmcgYWxsb2NhdGVkIG1lbW9yeSBhZnRlciBmcmVlaW5nLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjE3NgorUHJvYmxlbTogICAgQWNjZW50ZWQgY2hhcmFjdGVycyBpbiB0cmFuc2xhdGVkIGhlbHAgZmlsZXMgYXJlIG5vdCBoYW5kbGVkCisJICAgIGNvcnJlY3RseS4gKEZhYmllbiBWYXlzc2llcmUpCitTb2x1dGlvbjogICBJbmNsdWRlICIxOTItMjU1IiBpbiAnaXNrZXl3b3JkJyBmb3IgdGhlIGhlbHAgd2luZG93LgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi4xNzcgKGV4dHJhKQorUHJvYmxlbTogICAgVmlzVmltOiBPcGVuaW5nIGEgZmlsZSB3aXRoIGEgc3BhY2UgaW4gdGhlIG5hbWUgZG9lc24ndCB3b3JrLiAoUm9iCisJICAgIFJldHRlcikgIEFyYml0cmFyeSBjb21tYW5kcyBhcmUgYmVpbmcgZXhlY3V0ZWQuIChOZWlsIEJpcmQpCitTb2x1dGlvbjogICBQdXQgYSBiYWNrc2xhc2ggaW4gZnJvbnQgb2YgZXZlcnkgc3BhY2UgaW4gdGhlIGZpbGUgbmFtZS4KKwkgICAgKEdlcmFyZCBCbGFpcykgIFRlcm1pbmF0ZSB0aGUgQ1RSTC1cIENUUkwtTiBjb21tYW5kIHdpdGggYSBOVUwuCitGaWxlczoJICAgIHNyYy9WaXNWaW0vQ29tbWFuZHMuY3BwLCBzcmMvVmlzVmltL1Zpc1ZpbS5yYworCitQYXRjaCA2LjIuMTc4CitQcm9ibGVtOiAgICBQZW9wbGUgd2hvIGRvbid0IGtub3cgaG93IHRvIGV4aXQgVmltIHRyeSBwcmVzc2luZyBDVFJMLUMuCitTb2x1dGlvbjogICBHaXZlIGEgbWVzc2FnZSBob3cgdG8gZXhpdCBWaW0gd2hlbiBDVFJMLUMgaXMgcHJlc3NlZCBhbmQgaXQKKwkgICAgZG9lc24ndCBjYW5jZWwgYW55dGhpbmcuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMTc5IChleHRyYSkKK1Byb2JsZW06ICAgIFRoZSBlbl9nYiBtZXNzYWdlcyBmaWxlIGlzbid0IGZvdW5kIG9uIGNhc2Ugc2Vuc2l0aXZlIHN5c3RlbXMuCitTb2x1dGlvbjogICBSZW5hbWUgZW5fZ2IgdG8gZW5fR0IuIChNaWtlIFdpbGxpYW1zKQorRmlsZXM6CSAgICBzcmMvcG8vZW5fZ2IucG8sIHNyYy9wby9lbl9HQi5wbywgc3JjL3BvL01ha2VfbWluZy5tYWssCisJICAgIHNyYy9wby9NYWtlX212Yy5tYWssIHNyYy9wby9NYWtlZmlsZSwgc3JjL3BvL1JFQURNRV9tdmMudHh0CisKK1BhdGNoIDYuMi4xODAKK1Byb2JsZW06ICAgIENvbXBpbGluZyB3aXRoIEdUSzIgb24gV2luMzIgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgSW5jbHVkZSBnZGt3aW4zMi5oIGluc3RlYWQgb2YgZ2RreC5oLiAoU3JpbmF0aCBBdmFkaGFudWxhKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jLCBzcmMvZ3VpX2d0a19mLmMsIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvbWJ5dGUuYworCitQYXRjaCA2LjIuMTgxIChhZnRlciA2LjIuMTcxKQorUHJvYmxlbTogICAgVGhlICItbyIgYXJndW1lbnQgb2YgImZpbmQiIGhhcyBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSBpbXBsaWVkCisJICAgICJhbmQiIHdpdGggIi1wcmludCIuCitTb2x1dGlvbjogICBBZGQgcGFyZW50aGVzaXMgYXJvdW5kIHRoZSAiLW8iIGV4cHJlc3Npb24uIChHb3Jkb24gUHJpZXVyKQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjE4MiAoYWZ0ZXIgNi4yLjA5NCkKK1Byb2JsZW06ICAgIENvbXBpbGF0aW9uIHdpdGggdGlueSBmZWF0dXJlcyBmYWlscyBiZWNhdXNlIG9mIG1pc3NpbmcKKwkgICAgZ2V0X3Bhc3RfaGVhZCgpIGZ1bmN0aW9uLgorU29sdXRpb246ICAgQWRqdXN0IHRoZSAjaWZkZWYgZm9yIGdldF9wYXN0X2hlYWQoKS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4yLjE4MyAoYWZ0ZXIgNi4yLjE3OCkKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIGNoYXIvdW5zaWduZWQgY2hhciBtaXh1cC4KK1NvbHV0aW9uOiAgIFVzZSBNU0coKSBpbnN0ZWFkIG9mIG1zZygpLiAoVG9ueSBMZW5laXMpCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMTg0CitQcm9ibGVtOiAgICBXaXRoICdmb3JtYXRvcHRpb25zJyBzZXQgdG8gIjFhdyIgaW5zZXJ0aW5nIHRleHQgbWF5IGNhdXNlIHRoZQorCSAgICBwYXJhZ3JhcGggdG8gYmUgZW5kZWQuIChBbGFuIFNjaG1pdHQpCitTb2x1dGlvbjogICBUZW1wb3JhcmlseSBhZGQgYW4gZXh0cmEgc3BhY2UgdG8gbWFrZSB0aGUgcGFyYWdyYXBoIGNvbnRpbnVlCisJICAgIGFmdGVyIG1vdmluZyB0aGUgd29yZCBhZnRlciB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IGxpbmUuCisJICAgIEFsc28gZm9ybWF0IHdoZW4gcHJlc3NpbmcgRXNjLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jLCBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by9lZGl0LnBybworCitQYXRjaCA2LjIuMTg1CitQcm9ibGVtOiAgICBSZXN0b3JpbmcgYSBzZXNzaW9uIHdpdGggemVyby1oZWlnaHQgd2luZG93cyBkb2VzIG5vdCB3b3JrCisJICAgIHByb3Blcmx5LiAoQ2hhcmxlcyBDYW1wYmVsbCkKK1NvbHV0aW9uOiAgIEFjY2VwdCBhIHplcm8gYXJndW1lbnQgdG8gIjpyZXNpemUiIGFzIGludGVuZGVkLiAgQWRkIGEgd2luZG93CisJICAgIG51bWJlciBhcmd1bWVudCB0byAiOnJlc2l6ZSIgdG8gYmUgYWJsZSB0byBzZXQgdGhlIHNpemUgb2Ygb3RoZXIKKwkgICAgd2luZG93cywgYmVjYXVzZSB0aGUgY3VycmVudCB3aW5kb3cgY2Fubm90IGJlIHplcm8taGVpZ2h0LgorCSAgICBGaXggdGhlIGV4cGxvcmVyIHBsdWdpbiB0byBhdm9pZCBjaGFuZ2luZyB0aGUgd2luZG93IHNpemVzLiAgQWRkCisJICAgIHRoZSB3aW5yZXN0Y21kKCkgZnVuY3Rpb24gZm9yIHRoaXMuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBydW50aW1lL3BsdWdpbi9leHBsb3Jlci52aW0sIHNyYy9ldmFsLmMsCisJICAgIHNyYy9leF9jbWRzLmgsIHNyYy9leF9kb2NtZC5jLCBzcmMvcHJvdG8vd2luZG93LnBybywgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMi4xODYgKGFmdGVyIDYuMi4xODUpCitQcm9ibGVtOiAgICBEb2N1bWVudGF0aW9uIGZpbGUgZXZhbC50eHQgY29udGFpbnMgZXhhbXBsZXMgd2l0aG91dCBpbmRlbnQuCitTb2x1dGlvbjogICBJbnNlcnQgdGhlIGluZGVudC4gIEFsc28gZml4IG90aGVyIG1pc3Rha2VzLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ldmFsLnR4dAorCitQYXRjaCA2LjIuMTg3CitQcm9ibGVtOiAgICBVc2luZyBJbnN1cmUrKyByZXZlYWxzIGEgbnVtYmVyIG9mIGJ1Z3MuICAoRG9taW51cXVlIFBlbGxlKQorU29sdXRpb246ICAgSW5pdGlhbGl6ZSB2YXJpYWJsZXMgd2hlcmUgbmVlZGVkLiAgRnJlZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGF2b2lkCisJICAgIGxlYWtzLiAgRml4IGNvbXBhcmluZyB0YWdzIHRvIGF2b2lkIHJlYWRpbmcgcGFzdCBhbGxvY2F0ZWQgbWVtb3J5LgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9kaWZmLmMsIHNyYy9maWxlaW8uYywgc3JjL21hcmsuYywgc3JjL21pc2MxLmMsCisJICAgIHNyYy9taXNjMi5jLCBzcmMvb3BzLmMsIHNyYy9vcHRpb24uYywgc3JjL3RhZy5jLCBzcmMvdWkuYworCitQYXRjaCA2LjIuMTg4IChleHRyYSkKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6IE11bHRpLWJ5dGUgY2hhcmFjdGVycyBpbiBhIGZpbGVuYW1lIGNhdXNlIHRyb3VibGUgZm9yCisJICAgIHRoZSB3aW5kb3cgdGl0bGUuCitTb2x1dGlvbjogICBSZXR1cm4gd2hlbiB0aGUgd2lkZSBmdW5jdGlvbiBmb3Igc2V0dGluZyB0aGUgdGl0bGUgZGlkIGl0cyB3b3JrLgorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMi4xODkKK1Byb2JsZW06ICAgIFdoZW4gc2V0dGluZyAndmltaW5mbycgYWZ0ZXIgZWRpdGluZyBhIG5ldyBidWZmZXIgaXRzIG1hcmtzIGFyZQorCSAgICBub3Qgc3RvcmVkLiAoS2VpdGggUm9iZXJ0cykKK1NvbHV0aW9uOiAgIFNldCB0aGUgImJfbWFya3NfcmVhZCIgZmxhZyB3aGVuIHNraXBwaW5nIHRvIHJlYWQgbWFya3MgZnJvbSB0aGUKKwkgICAgdmltaW5mbyBmaWxlLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjE5MAorUHJvYmxlbTogICAgV2hlbiBlZGl0aW5nIGEgY29tcHJlc3NlZCBmaWxlcywgbWFya3MgYXJlIGxvc3QuCitTb2x1dGlvbjogICBBZGQgdGhlICI6bG9ja21hcmtzIiBtb2RpZmllciBhbmQgdXNlIGl0IGluIHRoZSBnemlwIHBsdWdpbi4KKwkgICAgTWFrZSBleGlzdHMoKSBhbHNvIGNoZWNrIGZvciBjb21tYW5kIG1vZGlmaWVycywgc28gdGhhdCB0aGUKKwkgICAgZXhpc3RlbmNlIG9mICI6bG9ja21hcmtzIiBjYW4gYmUgY2hlY2tlZCBmb3IuCisJICAgIEFsc28gYWRkICI6a2VlcG1hcmtzIiB0byBhdm9pZCB0aGF0IG1hcmtzIGFyZSBkZWxldGVkIHdoZW4KKwkgICAgZmlsdGVyaW5nIHRleHQuCisJICAgIFdoZW4gZGVsZXRpbmcgbGluZXMgcHV0IG1hcmtzICdBIC0gJ1ogYW5kICcwIC0gJzkgYXQgdGhlIGZpcnN0CisJICAgIGRlbGV0ZWQgbGluZSBpbnN0ZWFkIG9mIGNsZWFyaW5nIHRoZSBtYXJrLiAgVGhleSB3ZXJlIGtlcHQgaW4gdGhlCisJICAgIHZpbWluZm8gZmlsZSBhbnl3YXkuCisJICAgIEF2b2lkIHRoYXQgdGhlIGd6aXAgcGx1Z2luIHB1dHMgZGVsZXRlZCB0ZXh0IGluIHJlZ2lzdGVycy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbW90aW9uLnR4dCwgcnVudGltZS9wbHVnaW4vZ3ppcC52aW0sIHNyYy9leF9jbWRzLmMsCisJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvbWFyay5jLCBzcmMvc3RydWN0cy5oCisKK1BhdGNoIDYuMi4xOTEKK1Byb2JsZW06ICAgIFRoZSBpbnRybyBtZXNzYWdlIGlzIG91dGRhdGVkLiAgSW5mb3JtYXRpb24gYWJvdXQgc3BvbnNvcmluZyBhbmQKKwkgICAgcmVnaXN0ZXJpbmcgaXMgbWlzc2luZy4KK1NvbHV0aW9uOiAgIFNob3cgaW5mbyBhYm91dCBzcG9uc29yaW5nIGFuZCByZWdpc3RlcmluZyBWaW0gaW4gdGhlIGludHJvCisJICAgIG1lc3NhZ2Ugbm93IGFuZCB0aGVuLiAgQWRkIGhlbHAgZmlsZSBhYm91dCBzcG9uc29yaW5nLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9oZWxwLnR4dCwgcnVudGltZS9kb2Mvc3BvbnNvci50eHQsIHJ1bnRpbWUvZG9jL3RhZ3MsCisJICAgIHJ1bnRpbWUvbWVudS52aW0sIHNyYy92ZXJzaW9uLmMKKworUGF0Y2ggNi4yLjE5MgorUHJvYmxlbTogICAgVXNpbmcgQ1RSTC1UIGFuZCBDVFJMLUQgd2l0aCAiZ1IiIG1lc3NlcyB1cCB0aGUgdGV4dC4gIChKb25haHRhbgorCSAgICBIYW5raW5zKQorU29sdXRpb246ICAgQXZvaWQgY2FsbGluZyBjaGFuZ2VfaW5kZW50KCkgcmVjdXJzaXZlbHkuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4yLjE5MworUHJvYmxlbTogICAgV2hlbiByZWNhbGxpbmcgYSBzZWFyY2ggcGF0dGVybiBmcm9tIHRoZSBoaXN0b3J5IGZyb20gYSAiOnMsYS9jLCIKKwkgICAgY29tbWFuZCB0aGUgJy8nIGVuZHMgdGhlIHNlYXJjaCBzdHJpbmcuIChKQyB2YW4gV2lua2VsKQorU29sdXRpb246ICAgU3RvcmUgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgd2l0aCB0aGUgaGlzdG9yeSBlbnRyaWVzLiAgRXNjYXBlCisJICAgIGNoYXJhY3RlcnMgd2hlbiBuZWVkZWQsIHJlcGxhY2UgdGhlIG9sZCBzZXBhcmF0b3Igd2l0aCB0aGUgbmV3IG9uZS4KKwkgICAgQWxzbyBmaXhlcyB0aGF0IHJlY2FsbGluZyBhICIvIiBzZWFyY2ggZm9yIGEgIj8iIGNvbW1hbmQgbWVzc2VzIHVwCisJICAgIHRyYWlsaW5nIGZsYWdzLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL25vcm1hbC5jLCBzcmMvcHJvdG8vZXhfZ2V0bG4ucHJvLAorCSAgICBzcmMvc2VhcmNoLmMsIHNyYy90YWcuYworCitQYXRjaCA2LjIuMTk0IChhZnRlciA2LjIuMDY4KQorUHJvYmxlbTogICAgRm9yIE5ldEJlYW5zLCBpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGZpbGUgYW5kIHNlbmRpbmcgYW4gZXZlbnQKKwkgICAgYWJvdXQgaXQsIHRlbGwgTmV0QmVhbnMgdG8gd3JpdGUgdGhlIGZpbGUuCitTb2x1dGlvbjogICBBZGQgdGhlICJzYXZlIiBjb21tYW5kLCAibmV0YmVhbnNCdWZmZXIiIGNvbW1hbmQgYW5kCisJICAgICJidXR0b25SZWxlYXNlIiBldmVudCB0byB0aGUgbmV0YmVhbnMgcHJvdG9jb2wuICBVcGRhdGVkIHRoZQorCSAgICBpbnRlcmZhY2UgdG8gdmVyc2lvbiAyLjIuICAoR29yZG9uIFByaWV1cikKKwkgICAgQWxzbzogb3BlbiBhIGZvbGQgd2hlbiB0aGUgY3Vyc29yIGhhcyBiZWVuIHBvc2l0aW9uZWQuCisJICAgIEFsc286IGZpeCBtZW1vcnkgbGVhaywgZnJlZSByZXN1bHQgb2YgbmJfcXVvdGUoKS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbmV0YmVhbnMudHh0LCBzcmMvZmlsZWlvLmMsIHNyYy9uZXRiZWFucy5jLAorCSAgICBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by9uZXRiZWFucy5wcm8sIHNyYy9zdHJ1Y3RzLmgKKworUGF0Y2ggNi4yLjE5NSAoYWZ0ZXIgNi4yLjE5MCkKK1Byb2JsZW06ICAgIENvbXBpbGluZyBmYWlscyBmb3IgbWlzc2luZyBDUE9fUkVNTUFSSyBzeW1ib2wuCitTb2x1dGlvbjogICBBZGQgdGhlIHBhdGNoIEkgZm9yZ290IHRvIGluY2x1ZGUuLi4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5oCisKK1BhdGNoIDYuMi4xOTYgKGFmdGVyIDYuMi4xOTEpCitQcm9ibGVtOiAgICBSZWJ1aWxkaW5nIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgdXNlIHRoZSBzcG9uc29yLnR4dCBmaWxlLgorU29sdXRpb246ICAgQWRkIHNwb25zb3IudHh0IHRvIHRoZSBNYWtlZmlsZS4gKENocmlzdGlhbiBKLiBSb2JpbnNvbikKK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjE5NworUHJvYmxlbTogICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGZvcmNlIGEgcmVkcmF3IG9mIHN0YXR1cyBsaW5lcy4gKEdhcnkKKwkgICAgSm9obnNvbikKK1NvbHV0aW9uOiAgIEFkZCB0aGUgIjpyZWRyYXdzdGF0dXMiIGNvbW1hbmQuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL3ZhcmlvdXMudHh0LCBzcmMvZXhfY21kcy5oLCBzcmMvZXhfZG9jbWQuYywKKwkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMi4xOTgKK1Byb2JsZW06ICAgIEEgZmV3IG1lc3NhZ2VzIGFyZSBub3QgdHJhbnNsYXRlZC4gKEVybmVzdCBBZHJvZ3VlKQorU29sdXRpb246ICAgTWFyayB0aGUgbWVzc2FnZXMgdG8gYmUgdHJhbnNsYXRlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMTk5IChhZnRlciA2LjIuMTk0KQorUHJvYmxlbTogICAgVmltIGRvZXNuJ3Qgd29yayBwZXJmZWN0bHkgd2VsbCB3aXRoIE5ldEJlYW5zLgorU29sdXRpb246ICAgV2hlbiBOZXRCZWFucyBzYXZlcyB0aGUgZmlsZSwgcmVzZXQgdGhlIHRpbWVzdGFtcCB0byBhdm9pZCAiZmlsZQorCSAgICBjaGFuZ2VkIiB3YXJuaW5ncy4gIENsb3NlIGEgYnVmZmVyIGluIGEgcHJvcGVyIHdheS4gIERvbid0IHRyeQorCSAgICBnaXZpbmcgYSBkZWJ1ZyBtZXNzYWdlIHdpdGggYW4gaW52YWxpZCBwb2ludGVyLiAgU2VuZCBhCisJICAgIG5ld0RvdEFuZE1hcmsgbWVzc2FnZSB3aGVuIG5lZWRlZC4gIFJlcG9ydCBhIGNoYW5nZSBieSB0aGUgInIiCisJICAgIGNvbW1hbmQgdG8gTmV0QmVhbnMuICAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMsIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMjAwCitQcm9ibGVtOiAgICBXaGVuIHJlY292ZXJpbmcgYSBmaWxlLCAnZmlsZWZvcm1hdCcgaXMgYWx3YXlzIHRoZSBkZWZhdWx0LCB0aHVzCisJICAgIHdyaXRpbmcgdGhlIGZpbGUgbWF5IHJlc3VsdCBpbiBkaWZmZXJlbmNlcy4gKFBlbmVsb3BlIEZ1ZGQpCitTb2x1dGlvbjogICBCZWZvcmUgcmVjb3ZlcmluZyB0aGUgZmlsZSB0cnkgcmVhZGluZyB0aGUgb3JpZ2luYWwgZmlsZSB0byBvYnRhaW4KKwkgICAgdGhlIHZhbHVlcyBvZiAnZmlsZWZvcm1hdCcsICdmaWxlZW5jb2RpbmcnLCBldGMuCitGaWxlczoJICAgIHNyYy9tZW1saW5lLmMKKworUGF0Y2ggNi4yLjIwMQorUHJvYmxlbTogICAgV2hlbiAnYXV0b3dyaXRlYWxsJyBpcyBzZXQgIjpxYWxsIiBzdGlsbCByZWZ1c2VzIHRvIGV4aXQgaWYgdGhlcmUKKwkgICAgaXMgYSBtb2RpZmllZCBidWZmZXIuIChBbnRvaW5lIE1lY2hlbHluY2spCitTb2x1dGlvbjogICBBdHRlbXB0IHdyaXRpbmcgbW9kaWZpZWQgYnVmZmVycyBhcyBpbnRlbmRlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4yLjIwMgorUHJvYmxlbTogICAgRmlsZXR5cGUgbmFtZXMgb2YgQ0hJTEwgYW5kIGNoIHNjcmlwdCBhcmUgY29uZnVzaW5nLgorU29sdXRpb246ICAgUmVuYW1lICJjaCIgdG8gImNoaWxsIiBhbmQgImNoc2NyaXB0IiB0byAiY2giLgorRmlsZXM6CSAgICBydW50aW1lL2ZpbGV0eXBlLnZpbSwgcnVudGltZS9tYWtlbWVudS52aW0sIHJ1bnRpbWUvc3lubWVudS52aW0KKwkgICAgcnVudGltZS9zeW50YXgvY2gudmltLCBydW50aW1lL3N5bnRheC9jaGlsbC52aW0KKworUGF0Y2ggNi4yLjIwMworUHJvYmxlbTogICAgV2l0aCBjaGFyYWN0ZXJ3aXNlIHRleHQgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBsaW5lLCAiM1AiIHdvcmtzCisJICAgIHdyb25nLiAgIjNwIiBoYXMgdGhlIHNhbWUgcHJvYmxlbS4gIFRoZXJlIGFsc28gaXMgYSBkaXNwbGF5CisJICAgIHByb2JsZW0uIChEYW5pZWwgR291am90KQorU29sdXRpb246ICAgUGVyZm9ybSBjaGFyYWN0ZXJ3aXNlIHB1dHMgd2l0aCBhIGNvdW50IGluIHRoZSByaWdodCBwb3NpdGlvbi4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMi4yMDQgKGFmdGVyIDYuMi4wODYpCitQcm9ibGVtOiAgICAiXV0iIGluIGEgZmlsZSB3aXRoIGNsb3NlZCBmb2xkcyBtb3ZlcyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCSAgICAoTmFtIFN1bmdIeXVuKQorU29sdXRpb246ICAgRmluZCBvbmUgcG9zaXRpb24gaW4gZWFjaCBjbG9zZWQgZm9sZCwgdGhlbiBtb3ZlIHRvIGFmdGVyIHRoZSBmb2xkLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4yLjIwNSAoZXh0cmEpCitQcm9ibGVtOiAgICBNUy1XaW5kb3dzOiBXaGVuIHRoZSB0YXNrYmFyIGlzIGF0IHRoZSBsZWZ0IG9yIHRvcCBvZiB0aGUgc2NyZWVuLAorCSAgICB0aGUgVmltIHdpbmRvdyBwbGFjZW1lbnQgaXMgd3JvbmcuCitTb2x1dGlvbjogICBDb21wdXRlIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgd2luZG93IGNvcnJlY3RseS4gKFRhcm8KKwkgICAgTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuMjA2CitQcm9ibGVtOiAgICBNdWx0aS1ieXRlIGNoYXJhY3RlcnMgY2Fubm90IGJlIHVzZWQgYXMgaG90a2V5cyBpbiBhIGNvbnNvbGUKKwkgICAgZGlhbG9nLiAgKE1hdHRpYXMgRXJraXNzb24pCitTb2x1dGlvbjogICBIYW5kbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHByb3Blcmx5LiAgQWxzbyBwdXQgKCkgb3IgW10gYXJvdW5kCisJICAgIGRlZmF1bHQgaG90a2V5cy4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYywgc3JjL21hY3Jvcy5oCisKK1BhdGNoIDYuMi4yMDcKK1Byb2JsZW06ICAgIFdoZW4gJ2VuY29kaW5nJyBpcyBhIG11bHRpLWJ5dGUgZW5jb2RpbmcsIGV4cGFuZGluZyBhbgorCSAgICBhYmJyZXZpYXRpb24gdGhhdCBzdGFydHMgd2hlcmUgaW5zZXJ0aW9uIHN0YXJ0ZWQgcmVzdWx0cyBpbgorCSAgICBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgaW5zZXJ0aW9uIHRvIGJlIGRlbGV0ZWQuICAoWGlhbmdqaWFuZyBNYSkKK1NvbHV0aW9uOiAgIFN0b3Agc2VhcmNoaW5nIGxlZnR3YXJkcyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSB3b3JkIGF0IHRoZSBwb3NpdGlvbgorCSAgICB3aGVyZSBpbnNlcnRpb24gc3RhcnRlZC4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYworCitQYXRjaCA2LjIuMjA4CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGZvbGQgbWFya2VycywgdGhyZWUgbGluZXMgaW4gYSByb3cgaGF2ZSB0aGUgc3RhcnQKKwkgICAgbWFya2VyIGFuZCBkZWxldGluZyB0aGUgZmlyc3Qgb25lIHdpdGggImRkIiwgYSBuZXN0ZWQgZm9sZCBpcyBub3QKKwkgICAgZGVsZXRlZC4gIChLYW1pbCBCdXJ6eW5za2kpCisJICAgIFVzaW5nIG1hcmtlciBmb2xkaW5nLCBhIGxldmVsIDEgZm9sZCBkb2Vzbid0IHN0b3Agd2hlbiBpdCBpcworCSAgICBmb2xsb3dlZCBieSAie3t7MiIsIHN0YXJ0aW5nIGEgbGV2ZWwgMiBmb2xkLgorU29sdXRpb246ICAgRG9uJ3Qgc3RvcCB1cGRhdGluZyBmb2xkcyBhdCB0aGUgZW5kIG9mIGEgY2hhbmdlIHdoZW4gdGhlIG5lc3RpbmcKKwkgICAgbGV2ZWwgb2YgZm9sZHMgaXMgbGFyZ2VyIHRoYW4gdGhlIGZvbGQgbGV2ZWwuCisJICAgIENvcnJlY3RseSBjb21wdXRlIHRoZSBudW1iZXIgb2YgZm9sZHMgdGhhdCBzdGFydCBhdCAie3t7MiIuCisJICAgIEFsc28gYXZvaWQgYSBjcmFzaCBmb3IgYSBOVUxMIHBvaW50ZXIuCitGaWxlczoJICAgIHNyYy9mb2xkLmMKKworUGF0Y2ggNi4yLjIwOQorUHJvYmxlbTogICAgQSBib2d1cyBmb2xkIGlzIGNyZWF0ZWQgd2hlbiB1c2luZyAiUCIgd2hpbGUgdGhlIGN1cnNvciBpcyBpbiB0aGUKKwkgICAgbWlkZGxlIG9mIGEgY2xvc2VkIGZvbGQuIChLYW1pbCBCdXJ6eW5za2kpCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBsaW5lIG51bWJlciB3aGVyZSBtYXJrcyBhcmUgbW9kaWZpZWQgZm9yIGNsb3NlZCBmb2xkcy4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMi4yMTAgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjIE9TWDogYW50aWFsaWFzZWQgZm9udHMgYXJlIG5vdCBzdXBwb3J0ZWQuCitTb2x1dGlvbjogICBBZGQgdGhlICdhbnRpYWxpYXMnIG9wdGlvbiB0byBzd2l0Y2ggb24gYW50aWFsaWFzaW5nIG9uIE1hYyBPU1gKKwkgICAgMTAuMiBhbmQgbGF0ZXIuIChQZXRlciBDdWNrYSkKK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9ndWlfbWFjLmMsIHNyYy9vcHRpb24uaCwgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4yMTEgKGV4dHJhKQorUHJvYmxlbTogICAgQ29kZSBmb3IgaGFuZGxpbmcgZmlsZSBkcm9wcGVkIG9uIFZpbSBpcyBkdXBsaWNhdGVkLgorU29sdXRpb246ICAgTW92ZSB0aGUgY29tbW9uIGNvZGUgdG8gZ3VpX2hhbmRsZV9kcm9wKCkuCisJICAgIEFkZCBjb2RlIHRvIGRyb3AgdGhlIGZpbGVzIGluIHRoZSB3aW5kb3cgdW5kZXIgdGhlIGN1cnNvci4KKwkgICAgU3VwcG9ydCBkcmFnJmRyb3Agb24gdGhlIE1hY2ludG9zaC4gIChUYXJvIE11cmFva2EpCisJICAgIFdoZW4gZHJvcHBpbmcgYSBkaXJlY3RvcnkgbmFtZSBlZGl0IHRoYXQgZGlyZWN0b3J5ICh1c2luZyB0aGUKKwkgICAgZXhwbG9yZXIgcGx1Z2luKQorCSAgICBGaXggdGhhdCBjaGFuZ2luZyBkaXJlY3Rvcnkgd2l0aCBTaGlmdCBwcmVzc2VkIGRpZG4ndCB3b3JrIGZvcgorCSAgICByZWxhdGl2ZSBwYXRoIG5hbWVzLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9ndWkuYywgc3JjL2d1aV9ndGtfeDExLmMsIHNyYy9ndWlfbWFjLmMsCisJICAgIHNyYy9ndWlfdzQ4LmMsIHNyYy9wcm90by9maWxlaW8ucHJvLCBzcmMvcHJvdG8vZ3VpLnBybworCitQYXRjaCA2LjIuMjEyIChhZnRlciA2LjIuMTk5KQorUHJvYmxlbTogICAgTmV0QmVhbnM6IFJlcGxhY2luZyB3aXRoIGEgY291bnQgaXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LgorU29sdXRpb246ICAgTW92ZSByZXBvcnRpbmcgdGhlIGNoYW5nZSBvdXRzaWRlIG9mIHRoZSBsb29wIGZvciB0aGUgY291bnQuCisJICAgIChHb3Jkb24gUHJpZXVyKQorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjIxMyAoYWZ0ZXIgNi4yLjIwOCkKK1Byb2JsZW06ICAgIFVzaW5nIG1hcmtlciBmb2xkaW5nLCAie3t7MSIgZG9lc24ndCBzdGFydCBhIG5ldyBmb2xkIHdoZW4gYWxyZWFkeQorCSAgICBhdCBmb2xkIGxldmVsIDEuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgQ29ycmVjdGx5IGNvbXB1dGUgdGhlIG51bWJlciBvZiBmb2xkcyB0aGF0IHN0YXJ0IGF0ICJ7e3sxIi4KK0ZpbGVzOgkgICAgc3JjL2ZvbGQuYworCitQYXRjaCA2LjIuMjE0IChhZnRlciA2LjIuMjExKSAoZXh0cmEpCitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBhbiB1bnVzZWQgdmFyaWFibGUuCitTb2x1dGlvbjogICBEZWxldGUgdGhlIGRlY2xhcmF0aW9uLiAoQmlsbCBNY0NhcnRoeSkKK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuMjE1CitQcm9ibGVtOiAgICBOZXRCZWFuczogcHJvYmxlbXMgc2F2aW5nIGFuIHVubW9kaWZpZWQgZmlsZS4KK1NvbHV0aW9uOiAgIEFkZCBpc05ldGJlYW5zTW9kaWZpZWQoKSBmdW5jdGlvbi4gIERpc2FibGUgbmV0YmVhbnNfdW5tb2RpZmllZCgpLgorCSAgICAoR29yZG9uIFByaWV1cikKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jLCBzcmMvbmV0YmVhbnMuYywgc3JjL3Byb3RvL25ldGJlYW5zLnBybywKKwkgICAgcnVudGltZS9kb2MvbmV0YmVhbnMudHh0LCBydW50aW1lL2RvYy90YWdzCisKK1BhdGNoIDYuMi4yMTYgKGFmdGVyIDYuMi4yMDYpCitQcm9ibGVtOiAgICBNdWx0aS1ieXRlIGNoYXJhY3RlcnMgc3RpbCBjYW5ub3QgYmUgdXNlZCBhcyBob3RrZXlzIGluIGEgY29uc29sZQorCSAgICBkaWFsb2cuICAoTWF0dGlhcyBFcmtpc3NvbikKK1NvbHV0aW9uOiAgIE1ha2UgZ2V0X2tleXN0cm9rZSgpIGhhbmRsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi4yMTcKK1Byb2JsZW06ICAgIEdUSzogc2V0dGluZyB0aGUgdGl0bGUgZG9lc24ndCBhbHdheXMgd29yayBjb3JyZWN0bHkuCitTb2x1dGlvbjogICBJbnZva2UgZ3VpX21jaF9zZXR0aXRsZSgpLiAoVG9tYXMgU3RlaGxpaykKK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMjE4CitQcm9ibGVtOiAgICBXYXJuaW5nIGZvciBmdW5jdGlvbiB3aXRob3V0IHByb3RvdHlwZS4KK1NvbHV0aW9uOiAgIEFkZCBhcmd1bWVudCB0eXBlcyB0byB0aGUgbXNnQ0IgZmllbGQgb2YgdGhlIEJhbGxvb25FdmFsIHN0cnVjdC4KK0ZpbGVzOgkgICAgc3JjL2d1aV9iZXZhbC5oCisKK1BhdGNoIDYuMi4yMTkKK1Byb2JsZW06ICAgIFN5bnRheCBoaWdobGlnaHRpbmcgaGFuZ3Mgb24gYW4gZW1wdHkgbWF0Y2ggb2YgYW4gaXRlbSB3aXRoIGEKKwkgICAgbmV4dGdyb3VwLiAgKENoYXJsZXMgQ2FtcGJlbGwpCitTb2x1dGlvbjogICBSZW1lbWJlciB0aGF0IHRoZSBpdGVtIGhhcyBhbHJlYWR5IG1hdGNoZWQgYW5kIGRvbid0IG1hdGNoIGl0CisJICAgIGFnYWluIGF0IHRoZSBzYW1lIHBvc2l0aW9uLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4yLjIyMAorUHJvYmxlbTogICAgV2hlbiBhIFZpbSBzZXJ2ZXIgcnVucyBpbiBhIGNvbnNvbGUgYSByZW1vdGUgY29tbWFuZCBpc24ndCBoYW5kbGVkCisJICAgIGJlZm9yZSBhIGtleSBpcyB0eXBlZC4gIChKb3NodWEgTmV1aGVpc2VsKQorU29sdXRpb246ICAgRG9uJ3QgdHJ5IHJlYWRpbmcgbW9yZSBpbnB1dCB3aGVuIGEgY2xpZW50LXNlcnZlciBjb21tYW5kIGhhcyBiZWVuCisJICAgIHJlY2VpdmVkLgorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi4yMjEKK1Byb2JsZW06ICAgIE5vIGZpbGUgbmFtZSBjb21wbGV0aW9uIGZvciAiOmNzY29wZSBhZGQiLgorU29sdXRpb246ICAgQWRkIHRoZSBYRklMRSBmbGFnIHRvICI6Y3Njb3BlIi4gKEdhcnkgSm9obnNvbikKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuaAorCitQYXRjaCA2LjIuMjIyCitQcm9ibGVtOiAgICBVc2luZyAiLS1yZW1vdGUiIHNldmVyYWwgdGltZXMgb24gYSByb3cgb25seSBvcGVucyBzb21lIG9mIHRoZQorCSAgICBmaWxlcy4gKERhbnkgU3QtQW1hbnQpCitTb2x1dGlvbjogICBEb24ndCBkZWxldGUgYWxsIHR5cGVoZWFkIHdoZW4gdGhlIHNlcnZlciByZWNlaXZlcyBhIGNvbW1hbmQgZnJvbQorCSAgICBhIGNsaWVudCwgb25seSBkZWxldGUgdHlwZWQgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjIuMjIzCitQcm9ibGVtOiAgICBDc2NvcGU6IEF2b2lkIGEgaGFuZyB3aGVuIGNzY29wZSB3YWl0cyBmb3IgYSByZXNwb25zZSB3aGlsZSBWaW0KKwkgICAgd2FpdHMgZm9yIGEgcHJvbXB0LgorCSAgICBFcnJvciBtZXNzYWdlcyBmcm9tIENzY29wZSBtZXNzIHVwIHRoZSBkaXNwbGF5LgorU29sdXRpb246ICAgRGV0ZWN0IHRoZSBoaXQtZW50ZXIgbWVzc2FnZSBhbmQgcmVzcG9uZCBieSBzZW5kaW5nIGEgcmV0dXJuCisJICAgIGNoYXJhY3RlciB0byBjc2NvcGUuIChHYXJ5IEpvaG5zb24pCisJICAgIFVzZSBFTVNHKCkgYW5kIHN0cmVycm9yKCkgd2hlbiBwb3NzaWJsZS4gIFJlcGxhY2UgcGVycm9yKCkgd2l0aAorCSAgICBQRVJST1IoKSBldmVyeXdoZXJlLCBhZGQgZW1zZzMoKS4KK0ZpbGVzOgkgICAgc3JjL2RpZmYuYywgc3JjL2lmX2NzY29wZS5jLCBzcmMvaW50ZWdyYXRpb24uYywgc3JjL21lc3NhZ2UuYywKKwkgICAgc3JjL3Byb3RvL21lc3NhZ2UucHJvLCBzcmMvbWlzYzIuYywgc3JjL25ldGJlYW5zLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMjI0CitQcm9ibGVtOiAgICBNYWM6IENhbid0IGNvbXBpbGUgd2l0aCBzbWFsbCBmZWF0dXJlcy4gKEF4ZWwgS2llbGhvcm4pCitTb2x1dGlvbjogICBBbHNvIGluY2x1ZGUgdmltX2NoZGlyZmlsZSgpIHdoZW4gY29tcGlsaW5nIGZvciB0aGUgTWFjLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYworCitQYXRjaCA2LjIuMjI1CitQcm9ibGVtOiAgICBOZXRCZWFuczogUmVwb3J0ZWQgbW9kaWZpZWQgc3RhdGUgaXNuJ3QgZXhhY3RseSByaWdodC4KK1NvbHV0aW9uOiAgIFJlcG9ydCBhIGZpbGUgYmVpbmcgbW9kaWZpZWQgaW4gdGhlIE5ldEJlYW5zIHdheS4KK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4yLjIyNiAoYWZ0ZXIgNi4yLjEwNykgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlICJ3czItMzIubGliIiBmaWxlIGlzbid0IGFsd2F5cyBhdmFpbGFibGUuCitTb2x1dGlvbjogICBVc2UgIldTb2NrMzIubGliIiBpbnN0ZWFkLiAoVGFybyBNdXJhb2thLCBEYW4gU2hhcnApCitGaWxlczoJICAgIHNyYy9NYWtlX2N5Zy5tYWssIHNyYy9NYWtlX21pbmcubWFrLCBzcmMvTWFrZV9tdmMubWFrCisKK1BhdGNoIDYuMi4yMjcgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlICJQQyIgc3ltYm9sIGlzIGRlZmluZWQgYnV0IG5vdCB1c2VkIGFueXdoZXJlLgorU29sdXRpb246ICAgUmVtb3ZlICItRFBDIiBmcm9tIHRoZSBtYWtlZmlsZXMuCitGaWxlczoJICAgIHNyYy9NYWtlX2JjMy5tYWssIHNyYy9NYWtlX2JjNS5tYWssIHNyYy9NYWtlX2N5Zy5tYWssCisJICAgIHNyYy9NYWtlX21pbmcubWFrCisKK1BhdGNoIDYuMi4yMjgKK1Byb2JsZW06ICAgIFJlY2VpdmluZyBDVFJMLVwgQ1RSTC1OIGFmdGVyIHR5cGluZyAiZiIgb3IgIm0iIGRvZXNuJ3Qgc3dpdGNoIFZpbQorCSAgICBiYWNrIHRvIE5vcm1hbCBtb2RlLiAgU2FtZSBmb3IgQ1RSTC1cIENUUkwtRy4KK1NvbHV0aW9uOiAgIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgdHlwZWQgYWZ0ZXIgYSBjb21tYW5kIGlzIENUUkwtXCBhbmQgb2J0YWluCisJICAgIGFub3RoZXIgY2hhcmFjdGVyIHRvIGNoZWNrIGZvciBDVFJMLU4gb3IgQ1RSTC1HLCB3YWl0aW5nIHVwIHRvCisJICAgICd0dGltZW91dGxlbicgbXNlYy4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jCisKK1BhdGNoIDYuMi4yMjkKK1Byb2JsZW06ICAgICI6ZnVuY3Rpb24iIHdpdGggYSBuYW1lIHRoYXQgdXNlcyBtYWdpYyBjdXJsaWVzIGRvZXMgbm90IHdvcmsKKwkgICAgaW5zaWRlIGEgZnVuY3Rpb24uICAoU2VydmF0aXVzIEJyYW5kdCkKK1NvbHV0aW9uOiAgIFNraXAgb3ZlciB0aGUgZnVuY3Rpb24gbmFtZSBwcm9wZXJseS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuMjMwIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBhIGNvbXBsZXggcGF0dGVybiBtYXkgY2F1c2UgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIFVzZSBfX3RyeSBhbmQgX19leGNlcHQgdG8gY2F0Y2ggdGhlIGV4Y2VwdGlvbiBhbmQgaGFuZGxlIGl0CisJICAgIGdyYWNlZnVsbHksIHdoZW4gcG9zc2libGUuICBBZGQgbXlyZXNldHN0a29mbHcoKSB0byByZXNldCB0aGUKKwkgICAgc3RhY2sgb3ZlcmZsb3cuIChCZW5qYW1pbiBQZXRlcnNvbikKK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haywgc3JjL29zX21zd2luLmMgc3JjL29zX3dpbjMyLmMsIHNyYy9vc193aW4zMi5oLAorCSAgICBzcmMvcHJvdG8vb3Nfd2luMzIucHJvLCBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4yLjIzMSAoYWZ0ZXIgNi4yLjA0NikKK1Byb2JsZW06ICAgIFZhcmlvdXMgcHJvYmxlbXMgd2hlbiBhbiBlcnJvciBleGNlcHRpb24gaXMgcmFpc2VkIGZyb20gd2l0aGluIGEKKwkgICAgYnVpbHRpbiBmdW5jdGlvbi4gIFdoZW4gaXQgaXMgaW52b2tlZCB3aGlsZSBldmFsdWF0aW5nIGFyZ3VtZW50cworCSAgICB0byBhIGZ1bmN0aW9uIGZvbGxvd2luZyBhcmd1bWVudHMgYXJlIHN0aWxsIGV2YWx1YXRlZC4gIFdoZW4KKwkgICAgaW52b2tlZCB3aXRoIGEgbGluZSByYW5nZSBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgcmVtYWluaW5nIGxpbmVzLgorU29sdXRpb246ICAgVXBkYXRlICJmb3JjZV9hYm9ydCIgYWxzbyBhZnRlciBjYWxsaW5nIGEgYnVpbHRpbiBmdW5jdGlvbiwgc28KKwkgICAgdGhhdCBhYm9ydGluZygpIGFsd2F5cyByZXR1cm5zIHRoZSBjb3JyZWN0IHZhbHVlLiAoU2VydmF0aXVzCisJICAgIEJyYW5kdCkKK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2V2YWwuYywgc3JjL3Byb3RvL2V4X2V2YWwucHJvLAorCSAgICBzcmMvdGVzdGRpci90ZXN0NDkub2ssIHNyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KKworUGF0Y2ggNi4yLjIzMgorUHJvYmxlbTogICAgIjpweXRob24gdmltLmNvbW1hbmQoJ3B5dGhvbiBwcmludCAyKjInKSIgY3Jhc2hlcyBWaW0uICAoRXVnZW5lCisJICAgIE1pbmtvdnNraWkpCitTb2x1dGlvbjogICBEaXNhbGxvdyBleGVjdXRpbmcgYSBQeXRob24gY29tbWFuZCByZWN1cnNpdmVseSBhbmQgZ2l2ZSBhbiBlcnJvcgorCSAgICBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvaWZfcHl0aG9uLmMKKworUGF0Y2ggNi4yLjIzMworUHJvYmxlbTogICAgT24gTWFjIE9TWCBhZGRpbmcgLXB0aHJlYWQgZm9yIFB5dGhvbiBvbmx5IGdlbmVyYXRlcyBhIHdhcm5pbmcuCisJICAgIFRoZSB0ZXN0IGZvciBQZXJsIHRocmVhZHMgcmVqZWN0cyBQZXJsIHdoaWxlIGl0J3MgT0suCisJICAgIFRjbCBkb2Vzbid0IHdvcmsgYXQgYWxsLgorCSAgICBUaGUgdGVzdCBmb3IgUnVieSBmYWlscyBpZiBydWJ5IGV4aXN0cyBidXQgdGhlcmUgYXJlIG5vIGhlYWRlcgorCSAgICBmaWxlcy4gIFRoZSBSdWJ5IGxpYnJhcnkgaXNuJ3QgZGV0ZWN0ZWQgcHJvcGVybHkKK1NvbHV0aW9uOiAgIEF2b2lkIGFkZGluZyAtcHRocmVhZCBvbiBNYWMgT1NYLiAgQWNjZXB0IFBlcmwgdGhyZWFkcyB3aGVuIGl0J3MKKwkgICAgbm90IHRoZSA1LjUgdGhyZWFkcy4KKwkgICAgVXNlIHRoZSBUY2wgZnJhbWV3b3JrIGZvciBoZWFkZXIgZmlsZXMuICBGb3IgUnVieSByZW5hbWUgY1dpbmRvdworCSAgICB0byBjVmltV2luZG93IHRvIGF2b2lkIGEgbmFtZSBjbGFzaC4gKEtlbiBTY290dCkKKwkgICAgT25seSBlbmFibGUgUnVieSB3aGVuIHRoZSBoZWFkZXIgZmlsZXMgY2FuIGJlIGZvdW5kLiAgVXNlICItbHJ1YnkiCisJICAgIGluc3RlYWQgb2YgImxpYnJ1YnkuYSIgd2hlbiBpdCBjYW4ndCBiZSBmb3VuZC4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvaWZfcnVieS5jCisKK1BhdGNoIDYuMi4yMzQKK1Byb2JsZW06ICAgIEdUSyAyIEdVSTogIjpzcCIgYW5kIHRoZSAiOnEiIGxlYXZlcyB0aGUgY3Vyc29yIG9uIHRoZSBjb21tYW5kCisJICAgIGxpbmUuCitTb2x1dGlvbjogICBGbHVzaCBvdXRwdXQgYmVmb3JlIHJlbW92aW5nIHNjcm9sbGJhcnMuICBBbHNvIGRvIHRoaXMgaW4gb3RoZXIKKwkgICAgcGxhY2VzIHdoZXJlIGd1aV9tY2hfKigpIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL29wdGlvbi5jLCBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4yLjIzNSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQ3Vyc29yIGlzbid0IHJlbW92ZWQgd2l0aCBhIDI1eDgwIHdpbmRvdyBhbmQgZG9pbmc6CisJICAgICIxODMwaWE8RXNjPjQwMGEtPEVzYz4wdzAiLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBjYWxsIHRvIGd1aV91bmRyYXdfY3Vyc29yKCkgZnJvbSBndWlfbWNoX2luc2VydF9saW5lcygpLgorRmlsZXM6CSAgICBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuMi4yMzYKK1Byb2JsZW06ICAgIFVzaW5nIGd2aW0gd2l0aCBBZ2lkZSBnaXZlcyAiY29ubmVjdGlvbiBsb3N0IiBlcnJvciBtZXNzYWdlcy4KK1NvbHV0aW9uOiAgIE9ubHkgZ2l2ZSB0aGUgImNvbm5lY3Rpb24gbG9zdCIgbWVzc2FnZSB3aGVuIHRoZSBidWZmZXIgd2FzIG9uY2UKKwkgICAgb3duZWQgYnkgTmV0QmVhbnMuCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jLCBzcmMvc3RydWN0cy5oCisKK1BhdGNoIDYuMi4yMzcKK1Byb2JsZW06ICAgIEdUSyAyOiBUaGFpIHRleHQgaXMgZHJhd24gd3JvbmcuICBJdCBjaGFuZ2VzIHdoZW4gbW92aW5nIHRoZQorCSAgICBjdXJzb3Igb3ZlciBpdC4KK1NvbHV0aW9uOiAgIERpc2FibGUgdGhlIHNoYXBpbmcgZW5naW5lLCBpdCBtb3ZlcyBjb21iaW5pbmcgY2hhcmFjdGVycyB0byBhCisJICAgIHdyb25nIHBvc2l0aW9uIGFuZCBjb21iaW5lcyBjaGFyYWN0ZXJzLCB3aGlsZSBkcmF3aW5nIHRoZSBjdXJzb3IKKwkgICAgZG9lc24ndCBjb21iaW5lIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMi4yMzggKGFmdGVyIDYuMi4yMzEpCitQcm9ibGVtOiAgICAiOmZ1bmN0aW9uIiBkb2VzIG5vdCB3b3JrIGluc2lkZSBhIHdoaWxlIGxvb3AuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgQWRkIGdldF93aGlsZV9saW5lKCkgYW5kIHBhc3MgaXQgdG8gZG9fb25lX2NtZCgpIHdoZW4gaW4gYSB3aGlsZQorCSAgICBsb29wLCBzbyB0aGF0IGFsbCBsaW5lcyBhcmUgc3RvcmVkIGFuZCBjYW4gYmUgdXNlZCBhZ2FpbiB3aGVuCisJICAgIHJlcGVhdGluZyB0aGUgbG9vcC4KKwkgICAgQWRqdXN0IHRlc3QgNDkgc28gdGhhdCBpdCBjaGVja3MgZm9yIHRoZSBmaXhlZCBwcm9ibGVtcy4KKwkgICAgKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9kaWdyYXBoLmMsIHNyYy9leF9jbWRzMi5jLCBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2V2YWwuYywKKwkgICAgc3JjL3Byb3RvL2V4X2NtZHMyLnBybywgc3JjL3Byb3RvL2V4X2RvY21kLnBybywKKwkgICAgc3JjL3Rlc3RkaXIvdGVzdDQ5LmluLCBzcmMvdGVzdGRpci90ZXN0NDkub2ssCisJICAgIHNyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KKworUGF0Y2ggNi4yLjIzOQorUHJvYmxlbTogICAgR1RLIDI6IFdpdGggY2xvc2VkIGZvbGRzIHRoZSBhcnJvdyBidXR0b25zIG9mIGEgdmVydGljYWwgc2Nyb2xsYmFyCisJICAgIG9mdGVuIGRvZXNuJ3Qgc2Nyb2xsLiAoTW9zaGUgS2FtaW5za3kpCitTb2x1dGlvbjogICBIYWNraXNoIHNvbHV0aW9uOiBEZXRlY3QgdGhhdCB0aGUgYnV0dG9uIHdhcyBwcmVzc2VkIGZyb20gdGhlCisJICAgIG1vdXNlIHBvaW50ZXIgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrLmMsIHNyYy9ndWkuYworCitQYXRjaCA2LjIuMjQwCitQcm9ibGVtOiAgICBHVEsgMjogU2VhcmNoaW5nIGZvciBiaXRtYXBzIGZvciB0aGUgdG9vbGJhciBkb2Vzbid0IHdvcmsgYXMgd2l0aAorCSAgICBvdGhlciBzeXN0ZW1zLiAgTmVlZCB0byBleHBsaWNpdGx5IHVzZSAiaWNvbj1uYW1lIi4gIChOZWQgS29ueiwKKwkgICAgQ2hyaXN0aWFuIEouICBSb2JpbnNvbikKK1NvbHV0aW9uOiAgIFNlYXJjaCBmb3IgaWNvbnMgbGlrZSBkb25lIGZvciBNb3RpZi4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjIuMjQxCitQcm9ibGVtOiAgICBHVEsgMjogU2VhcmNoIGFuZCBTZWFyY2gvUmVwbGFjZSBkaWFsb2dzIGFyZSBzeW5jZWQsIHRoYXQgbWFrZXMgbm8KKwkgICAgc2Vuc2UuICBCdXR0b25zIGFyZSBzb21ldGltZXMgZ3JleWVkLW91dC4gKEplcmVteSBNZXNzZW5nZXIpCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIGNvZGUgdG8gc3luYyB0aGUgdHdvIGRpYWxvZ3MuICBBZGp1c3QgdGhlIGNvZGUgdG8gcmVhY3QKKwkgICAgdG8gYW4gZW1wdHkgc2VhcmNoIHN0cmluZyB0byBhbHNvIHdvcmsgZm9yIEdUSzIuIChEYXZpZCBOZWNhcykKK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjIuMjQyCitQcm9ibGVtOiAgICBHbm9tZTogInZpbSAtLWhlbHAiIG9ubHkgc2hvd3MgdGhlIEdub21lIGFyZ3VtZW50cywgbm90IHRoZSBWaW0KKwkgICAgYXJndW1lbnRzLgorU29sdXRpb246ICAgRG9uJ3QgbGV0IHRoZSBHbm9tZSBjb2RlIHJlbW92ZSB0aGUgIi0taGVscCIgYXJndW1lbnQgYW5kIGRvbid0CisJICAgIGV4aXQgYXQgdGhlIGVuZCBvZiB1c2FnZSgpLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYywgc3JjL21haW4uYworCitQYXRjaCA2LjIuMjQzIChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogRHJvcHBpbmcgYSBmaWxlIG9uIGEgVmltIGljb24gY2F1c2VzIGEgaGl0LWVudGVyIHByb21wdC4KK1NvbHV0aW9uOiAgIE1vdmUgdGhlIGRyb3BwZWQgZmlsZXMgdG8gdGhlIGdsb2JhbCBhcmd1bWVudCBsaXN0LCBpbnN0ZWFkIG9mIHRoZQorCSAgICB1c3VhbCBkcm9wIGhhbmRsaW5nLiAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9tYWluLmMsIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4yLjI0NAorUHJvYmxlbTogICAgJzplY2hvICJceGY3IicgZGlzcGxheXMgdGhlIGlsbGVnYWwgYnl0ZSBhcyBpZiBpdCB3YXMgYSBjaGFyYWN0ZXIKKwkgICAgYW5kIGxlYXZlcyAiY2hvIiBhZnRlciBpdC4KK1NvbHV0aW9uOiAgIFdoZW4gY2hlY2tpbmcgdGhlIGxlbmd0aCBvZiBhIFVURi04IGJ5dGUgc2VxdWVuY2UgYW5kIGl0J3Mgc2hvcnRlcgorCSAgICB0aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCBhc3N1bWUgaXQncyBhbiBpbGxlZ2FsIGJ5dGUuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi4yNDUKK1Byb2JsZW06ICAgIENvbXBsZXRpb24gZG9lc24ndCB3b3JrIGZvciAiOmtlZXBtYXJrcyIgYW5kICI6bG9ja21hcmtzIi4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgY29tbWFuZCBtb2RpZmllcnMgdG8gdGhlIHRhYmxlIG9mIGNvbW1hbmRzLiAoTWFkb2thCisJICAgIE1hY2hpdGFuaSkKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuaCwgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjI0NgorUHJvYmxlbTogICAgTWFjOiBTdGFydGluZyBWaW0gZnJvbSBGaW5kZXIgZG9lc24ndCBzaG93IGVycm9yIG1lc3NhZ2VzLgorU29sdXRpb246ICAgUmVjb2duaXplIHRoYXQgb3V0cHV0IGlzIGJlaW5nIGRpc3BsYXllZCBieSBzdGRlcnIgYmVpbmcKKwkgICAgIi9kZXYvY29uc29sZSIuICAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9tYWluLmMsIHNyYy9tZXNzYWdlLmMKKworUGF0Y2ggNi4yLjI0NyAoYWZ0ZXIgNi4yLjE5MykKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgYSBzZWFyY2ggcGF0dGVybiBmcm9tIHRoZSB2aW1pbmZvIGZpbGUgdGhlIGxhc3QKKwkgICAgY2hhcmFjdGVyIGlzIHJlcGxhY2VkIHdpdGggYSAnLycuCitTb2x1dGlvbjogICBTdG9yZSB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciBpbiB0aGUgcmlnaHQgcGxhY2UuIChLZWx2aW4gTGVlKQorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjIuMjQ4CitQcm9ibGVtOiAgICBHVEs6IFdoZW4gWElNIGlzIGVuYWJsZWQgbm9ybWFsICIyIiBhbmQga2V5cGFkICIyIiBjYW5ub3QgYmUKKwkgICAgZGlzdGluZ3Vpc2hlZC4KK1NvbHV0aW9uOiAgIERldGVjdCB0aGF0IFhJTSBjaGFuZ2VzIHRoZSBrZXlwYWQga2V5IHRvIHRoZSBleHBlY3RlZCBBU0NJSQorCSAgICBjaGFyYWN0ZXIgYW5kIGZhbGwgYmFjayB0byB0aGUgbm9uLVhJTSBjb2RlLiAoTmVpbCBCaXJkKQorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYywgc3JjL21ieXRlLmMsIHNyYy9wcm90by9tYnl0ZS5wcm8KKworUGF0Y2ggNi4yLjI0OQorUHJvYmxlbTogICAgIjpjbmV4dCIgbW92ZXMgdG8gdGhlIGVycm9yIGluIHRoZSBuZXh0IGZpbGUsIGJ1dCB0aGVyZSBpcyBubworCSAgICBtZXRob2QgdG8gZ28gYmFjay4KK1NvbHV0aW9uOiAgIEFkZCAiOmNwZmlsZSIgYW5kICI6Y05maWxlIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuaCwgc3JjL3F1aWNrZml4LmMsIHNyYy92aW0uaCwgcnVudGltZS9kb2MvcXVpY2tmaXgudHh0CisKK1BhdGNoIDYuMi4yNTAKK1Byb2JsZW06ICAgIE1lbW9yeSBsZWFrcyB3aGVuIHVzaW5nIHNpZ25zLiAoWGF2aWVyIGRlIEdheWUpCitTb2x1dGlvbjogICBEZWxldGUgdGhlIGxpc3Qgb2Ygc2lnbnMgd2hlbiB1bmxvYWRpbmcgYSBidWZmZXIuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjIuMjUxCitQcm9ibGVtOiAgICBHVEs6IFRoZSAndicgZmxhZyBpbiAnZ3Vpb3B0aW9ucycgZG9lc24ndCB3b3JrLiAoU3RldmUgSGFsbCkKKwkgICAgT3JkZXIgb2YgYnV0dG9ucyBpcyByZXZlcnNlZCBmb3IgR1RLIDIuMi40LiAgRG9uJ3QgYWx3YXlzIGdldAorCSAgICBmb2N1cyBiYWNrIGFmdGVyIGhhbmRsaW5nIGEgZGlhbG9nLgorU29sdXRpb246ICAgTWFrZSBidXR0b25zIGFwcGVhciB2ZXJ0aWNhbGx5IHdoZW4gZGVzaXJlZC4gIFJldmVyc2UgdGhlIG9yZGVyIGluCisJICAgIHdoaWNoIGJ1dHRvbnMgYXJlIGFkZGVkIHRvIGEgZGlhbG9nLiAgTW92ZSBtb3VzZSBwb2ludGVyIGFyb3VuZAorCSAgICB3aGVuIHRoZSBkaWFsb2cgaXMgZG9uZSBhbmQgd2UgZG9uJ3QgaGF2ZSBmb2N1cy4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjIuMjUyIChleHRyYSwgYWZ0ZXIgNi4yLjI0MykKK1Byb2JsZW06ICAgIE1hYzogRHJvcHBpbmcgYSBmaWxlIG9uIGEgVmltIGljb24gY2F1c2VzIGEgaGl0LWVudGVyIHByb21wdCBmb3IKKwkgICAgTWFjIE9TIGNsYXNzaWMuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlICNpZmRlZiBmcm9tIHRoZSBjb2RlIHRoYXQgZml4ZXMgaXQgZm9yIE1hYyBPU1guCitGaWxlczoJICAgIHNyYy9ndWlfbWFjLmMKKworUGF0Y2ggNi4yLjI1MworUHJvYmxlbTogICAgV2hlbiAndGFnc3RhY2snIGlzIG5vdCBzZXQgYSAiOnRhZyBpZCIgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFmdGVyCisJICAgIGEgIjp0anVtcCIgY29tbWFuZC4KK1NvbHV0aW9uOiAgIFNldCAibmV3X3RhZyIgd2hlbiAndGFnc3RhY2snIGlzbid0IHNldC4gKEcuIE5hcmVuZHJhbikKK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi4yNTQKK1Byb2JsZW06ICAgIE1heSBydW4gb3V0IG9mIHNwYWNlIGZvciBlcnJvciBtZXNzYWdlcy4KK1NvbHV0aW9uOiAgIEtlZXAgcm9vbSBmb3IgdHdvIG1vcmUgYnl0ZXMuCitGaWxlczoJICAgIHNyYy9xdWlja2ZpeC5jCisKK1BhdGNoIDYuMi4yNTUKK1Byb2JsZW06ICAgIEdUSzogQSBuZXcgaXRlbSBpbiB0aGUgcG9wdXAgbWVudSBpcyBwdXQganVzdCBhZnRlciBpbnN0ZWFkIG9mCisJICAgIGp1c3QgYmVmb3JlIHRoZSByaWdodCBpdGVtLiAoR2FicmllbCBaYWNobWFubikKK1NvbHV0aW9uOiAgIERvbid0IGluY3JlbWVudCB0aGUgbWVudSBpdGVtIGluZGV4LgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jCisKK1BhdGNoIDYuMi4yNTYKK1Byb2JsZW06ICAgIE1hYzogIm1hY3JvbWFuIiBlbmNvZGluZyBpc24ndCByZWNvZ25pemVkLCBuZWVkIHRvIHVzZQorCSAgICAiOGJpdC1tYWNyb21hbi4KK1NvbHV0aW9uOiAgIFJlY29nbml6ZSAibWFjcm9tYW4iIHdpdGggYW4gYWxpYXMgIm1hYyIuIChFY2tlaGFyZCBCZXJucykKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yLjI1NyAoYWZ0ZXIgNi4yLjI1MCkKK1Byb2JsZW06ICAgIFNpZ25zIGFyZSBkZWxldGVkIGZvciAiOmJkZWwiLCBidXQgdGhleSBjb3VsZCBzdGlsbCBiZSB1c2VmdWwuCitTb2x1dGlvbjogICBEZWxldGUgc2lnbnMgb25seSBmb3IgIjpid2lwZSIuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYworCitQYXRjaCA2LjIuMjU4CitQcm9ibGVtOiAgICBHVUk6IGNhbid0IGRpc2FibGUgKGdyZXktb3V0KSBhIHBvcHVwIG1lbnUgaXRlbS4gIChBaml0IFRoYWtrYXIpCitTb2x1dGlvbjogICBMb29wIG92ZXIgdGhlIHBvcHVwIG1lbnVzIGZvciBhbGwgbW9kZXMuCitGaWxlczoJICAgIHNyYy9tZW51LmMKKworUGF0Y2ggNi4yLjI1OQorUHJvYmxlbTogICAgSWYgdGhlcmUgYXJlIG1lc3NhZ2VzIHdoZW4gZXhpdGluZywgb24gdGhlIGNvbnNvbGUgdGhlcmUgaXMgYQorCSAgICBoaXQtZW50ZXIgcHJvbXB0IHdoaWxlIHRoZSBtZXNzYWdlIGNhbiBiZSByZWFkOyBpbiB0aGUgR1VJIHRoZQorCSAgICBtZXNzYWdlIG1heSBub3QgYmUgdmlzaWJsZS4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgaGl0LWVudGVyIHByb21wdCB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIG1lc3NhZ2UgZnJvbQorCSAgICB3cml0aW5nIHRoZSB2aW1pbmZvIGZpbGUgb3IgYXV0b2NvbW1hbmRzLCBvciB3aGVuIHRoZXJlIGlzIGFueQorCSAgICBvdXRwdXQgaW4gdGhlIEdVSSBhbmQgJ3ZlcmJvc2UnIGlzIHNldC4gIERvbid0IHVzZSBhIGhpdC1lbnRlcgorCSAgICBwcm9tcHQgZm9yIHRoZSBub24tR1VJIHZlcnNpb24gdW5sZXNzIHRoZXJlIGlzIGFuIGVycm9yIG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4yLjI2MAorUHJvYmxlbTogICAgR1RLIDI6IENhbid0IHF1aXQgYSBkaWFsb2cgd2l0aCA8RXNjPi4KKwkgICAgR1RLIDEgYW5kIDI6IDxFbnRlcj4gYWx3YXlzIGdpdmVzIGEgcmVzdWx0LCBldmVuIHdoZW4gdGhlIGRlZmF1bHQKKwkgICAgYnV0dG9uIGhhcyBiZWVuIGRpc2FibGVkLgorU29sdXRpb246ICAgSGFuZGxlIHRoZXNlIGtleXMgZXhwbGljaXRseS4gIFdoZW4gbm8gZGVmYXVsdCBidXR0b24gaXMgc3BlY2lmaWVkCisJICAgIHVzZSB0aGUgZmlyc3Qgb25lICh3b3JrcyBtb3N0bHkgbGlrZSBpdCB3YXMgYmVmb3JlKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGsuYworCitQYXRjaCA2LjIuMjYxCitQcm9ibGVtOiAgICBXaGVuICdhdXRvaW5kZW50JyBhbmQgJ2NpbmRlbnQnIGFyZSBzZXQgYW5kIGEgbGluZSBpcyByZWNvZ25pemVkCisJICAgIGFzIGEgY29tbWVudCwgc3RhcnRpbmcgYSBuZXcgbGluZSB3b24ndCBkbyAnY2luZGVudCcgZm9ybWF0dGluZy4KK1NvbHV0aW9uOiAgIEFsc28gdXNlICdjaW5kZW50JyBmb3JtYXR0aW5nIGZvciBsaW5lcyB0aGF0IGFyZSB1c2VkIGFzIGEKKwkgICAgY29tbWVudC4gKFNlcnZhdGl1cyBCcmFuZHQpCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi4yNjIKK1Byb2JsZW06ICAgIDEgQ1RSTC1XIHcgYmVlcHMsIGV2ZW4gdGhvdWdoIGdvaW5nIHRvIHRoZSBmaXJzdCB3aW5kb3cgaXMKKwkgICAgcG9zc2libGUuIChDaGFybGVzIENhbXBiZWxsKQorU29sdXRpb246ICAgRG9uJ3QgYmVlcC4KK0ZpbGVzOgkgICAgc3JjL3dpbmRvdy5jCisKK1BhdGNoIDYuMi4yNjMKK1Byb2JsZW06ICAgIExpbnQgd2FybmluZ3M6IER1cGxpY2F0ZSBmdW5jdGlvbiBwcm90b3R5cGVzLCBkdXBsaWNhdGUgbWFjcm9zLAorCSAgICB1c2Ugb2YgYSB6ZXJvIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgemVybyBwb2ludGVyLCB1bnVzZWQKKwkgICAgdmFyaWFibGUuICBDbGVhcmluZyBhbGxvY2F0ZWQgbWVtb3J5IGluIGEgY29tcGxpY2F0ZWQgd2F5LgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIGZyb20gZmFyc2kuaC4gIFJlbW92ZSB0aGUKKwkgICAgZHVwbGljYXRlZCBsaW5lcyBpbiBrZXltYXAuaC4gIENoYW5nZSBnZXR2Y29sKCkgYXJndW1lbnQgZnJvbSBOVUwKKwkgICAgdG8gTlVMTC4gIFJlbW92ZSB0aGUgImNvbCIgdmFyaWFibGUgaW4gcmVnbWF0Y2goKS4gIFVzZQorCSAgICBsYWxsb2NfY2xlYXIoKSBpbnN0ZWFkIG9mIGxhbGxvYygpLiAoV2FsdGVyIEJyaXNjb2UpCitGaWxlczoJICAgIHNyYy9mYXJzaS5oLCBzcmMva2V5bWFwLmgsIHNyYy9vcHMuYywgc3JjL3JlZ2V4cC5jLCBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4yLjI2NCAoYWZ0ZXIgNi4yLjI0NykKK1Byb2JsZW06ICAgIFdyaXRpbmcgcGFzdCBhbGxvY2F0ZWQgbWVtb3J5IHdoZW4gdXNpbmcgYSBjb21tYW5kIGxpbmUgZnJvbSB0aGUKKwkgICAgdmltaW5mbyBmaWxlLgorU29sdXRpb246ICAgU3RvcmUgdGhlIE5VTCBpbiB0aGUgcmlnaHQgcGxhY2UuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuMi4yNjUKK1Byb2JsZW06ICAgIEFsdGhvdWdoICI6c2V0IiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2FuZGJveCwgIjpsZXQgJm9wdCA9IHZhbCIKKwkgICAgd29ya3MuCitTb2x1dGlvbjogICBEbyBhbGxvdyBjaGFuZ2luZyBvcHRpb25zIGluIHRoZSBzYW5kYm94LCBidXQgbm90IHRoZSBvbmVzIHRoYXQKKwkgICAgY2FuJ3QgYmUgY2hhbmdlZCBmcm9tIGEgbW9kZWxpbmUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmgsIHNyYy9vcHRpb25zLmMKKworUGF0Y2ggNi4yLjI2NgorUHJvYmxlbTogICAgV2hlbiByZWRpcmVjdGluZyBvdXRwdXQgYW5kIHVzaW5nICI6c2lsZW50IiwgbGluZSBicmVha3MgYXJlCisJICAgIG1pc3NpbmcgZnJvbSBvdXRwdXQgb2YgIjptYXAiIGFuZCAiOnRzZWxlY3QiLiAgQWxpZ25tZW50IG9mCisJICAgIGNvbHVtbnMgaXMgd3JvbmcuCitTb2x1dGlvbjogICBJbnNlcnQgYSBsaW5lIGJyZWFrIHdoZXJlICJtc2dfZGlkb3V0IiB3YXMgdGVzdGVkLiAgVXBkYXRlIG1zZ19jb2wKKwkgICAgd2hlbiByZWRpcmVjdGluZyBhbmQgdXNpbmcgIjpzaWxlbnQiLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jLCBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMi4yNjcgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6ICImJiIgaW4gYSB0ZWFyb2ZmIG1lbnUgaXMgbm90IHNob3duLiAoTHVjIEhlcm1pdHRlKQorU29sdXRpb246ICAgVXNlIHRoZSAibmFtZSIgaXRlbSBmcm9tIHRoZSBtZW51IGluc3RlYWQgb2YgdGhlICJkbmFtZSIgaXRlbS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgc3JjL21lbnUuYworCitQYXRjaCA2LjIuMjY4CitQcm9ibGVtOiAgICBHVUk6IFdoZW4gY2hhbmdpbmcgJ2d1aW9wdGlvbnMnIHBhcnQgb2YgdGhlIHdpbmRvdyBtYXkgYmUgb2ZmCisJICAgIHNjcmVlbi4gKFJhbmRhbGwgTW9ycmlzKQorU29sdXRpb246ICAgQWRqdXN0IHRoZSBzaXplIG9mIHRoZSB3aW5kb3cgd2hlbiBjaGFuZ2luZyAnZ3Vpb3B0aW9ucycsIGJ1dCBvbmx5CisJICAgIHdoZW4gYWRkaW5nIHNvbWV0aGluZy4KK0ZpbGVzOgkgICAgc3JjL2d1aS5jCisKK1BhdGNoIDYuMi4yNjkKK1Byb2JsZW06ICAgIERpZmYgbW9kZSBkb2VzIG5vdCBoaWdobGlnaHQgYSBjaGFuZ2UgaW4gYSBjb21iaW5pbmcgY2hhcmFjdGVyLgorCSAgICAoUmFwaGFlbCBGaW5rZWwpCitTb2x1dGlvbjogICBNYWtlIGRpZmZfZmluZF9jaGFuZ2UoKSBtdWx0aS1ieXRlIGF3YXJlOiBmaW5kIHRoZSBzdGFydCBieXRlIG9mCisJICAgIGEgY2hhcmFjdGVyIHRoYXQgY29udGFpbnMgYSBjaGFuZ2UuCitGaWxlczoJICAgIHNyYy9kaWZmLmMKKworUGF0Y2ggNi4yLjI3MAorUHJvYmxlbTogICAgQ29tcGxldGlvbiBpbiBJbnNlcnQgbW9kZSwgdGhlbiByZXBlYXRpbmcgd2l0aCAiLiIsIGRvZXNuJ3QgaGFuZGxlCisJICAgIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGluIHRoZSBjb21wbGV0ZWQgdGV4dC4gKFJhcGhhZWwgRmlua2VsKQorU29sdXRpb246ICAgRG9uJ3Qgc2tpcCBvdmVyIGNvbXBvc2luZyBjaGFycyB3aGVuIGFkZGluZyBjb21wbGV0ZWQgdGV4dCB0byB0aGUKKwkgICAgcmVkbyBidWZmZXIuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNi4yLjI3MQorUHJvYmxlbTogICAgTmV0QmVhbnM6IENhbid0IGRvICJ0YWlsIC1mIiBvbiB0aGUgbG9nLiAgUGFzc2luZyBzb2NrZXQgaW5mbyB3aXRoCisJICAgIGFuIGFyZ3VtZW50IG9yIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZWN1cmUuCitTb2x1dGlvbjogICBXYWl0IGFmdGVyIGluaXRpYWxpemluZyB0aGUgbG9nLiAgQWxsb3cgcGFzc2luZyB0aGUgc29ja2V0IGluZm8KKwkgICAgdGhyb3VnaCBhIGZpbGUuIChHb3Jkb24gUHJpZXVyKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9uZXRiZWFucy50eHQsIHNyYy9tYWluLmMsIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuMi4yNzIKK1Byb2JsZW06ICAgIFdoZW4gdGhlICJwbyIgZGlyZWN0b3J5IGV4aXN0cywgYnV0ICJwby9NYWtlZmlsZSIgZG9lc24ndCwKKwkgICAgYnVpbGRpbmcgZmFpbHMuICBNYWtlIGxvb3BzIHdoZW4gdGhlICJwbyIgZGlyZWN0b3J5IGhhcyBiZWVuCisJICAgIGRlbGV0ZWQgYWZ0ZXIgcnVubmluZyBjb25maWd1cmUuCitTb2x1dGlvbjogICBDaGVjayBmb3IgdGhlICJwby9NYWtlZmlsZSIgaW5zdGVhZCBvZiBqdXN0IHRoZSAicG8iIGRpcmVjdG9yeS4KKwkgICAgQ2hlY2sgdGhpcyBhZ2FpbiBiZWZvcmUgdHJ5aW5nIHRvIHJ1biBtYWtlIHdpdGggdGhhdCBNYWtlZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjI3MworUHJvYmxlbTogICAgQ2hhbmdpbmcgdGhlIHNvcnQgb3JkZXIgaW4gYW4gZXhwbG9yZXIgd2luZG93IGZvciBhbiBlbXB0eQorCSAgICBkaXJlY3RvcnkgcHJvZHVjZXMgZXJyb3IgbWVzc2FnZXMuIChEb3VnIEtlYXJucykKK1NvbHV0aW9uOiAgIFdoZW4gYW4gaW52YWxpZCByYW5nZSBpcyB1c2VkIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbm90IGdvaW5nIHRvCisJICAgIGJlIGV4ZWN1dGVkLCBza2lwIG92ZXIgdGhlIGFyZ3VtZW50cyBhbnl3YXkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjI3NAorUHJvYmxlbTogICAgIjpwcmludCIgc2tpcHMgZW1wdHkgbGluZXMgd2hlbiAnbGlzdCcgaXMgc2V0IGFuZCB0aGVyZSBpcyBubworCSAgICAiZW9sIiBpbiAnbGlzdGNoYXJzJy4gKFlha292IExlcm5lcikKK1NvbHV0aW9uOiAgIFNraXAgb3V0cHV0dGluZyBhIHNwYWNlIGZvciBhbiBlbXB0eSBsaW5lIG9ubHkgd2hlbiAnbGlzdCcgaXMgc2V0CisJICAgIGFuZCB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVyIGlzIG5vdCBlbXB0eS4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjIuMjc1IChleHRyYSwgYWZ0ZXIgNi4yLjI2NykKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2hlbiB1c2luZyBnY2MuCitTb2x1dGlvbjogICBJbml0aWFsaXplICJhY0xlbiIgdG8gemVyby4gKEJpbGwgTWNDYXJ0aHkpCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4yLjI3NgorUHJvYmxlbTogICAgIjplY2hvIFgoKSIgZG9lcyBub3QgcHV0IGEgbGluZSBicmVhayBiZXR3ZWVuIHRoZSBtZXNzYWdlIHRoYXQgWCgpCisJICAgIGRpc3BsYXlzIGFuZCB0aGUgdGV4dCB0aGF0IFgoKSByZXR1cm5zLiAoWWFrb3YgTGVybmVyKQorU29sdXRpb246ICAgSW52b2tlIG1zZ19zdGFydCgpIGFmdGVyIGV2YWx1YXRpbmcgdGhlIGFyZ3VtZW50LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi4yNzcKK1Byb2JsZW06ICAgIFZpbSBjcmFzaGVzIHdoZW4gYSAiOnJ1bnRpbWUgZnRwbHVnaW4vYWRhLnZpbSIgY2F1c2VzIGEgcmVjdXJzaXZlCisJICAgIGxvb3AuIChSb2JlcnQgTm93b3RuaWFrKQorU29sdXRpb246ICAgUmVzdG9yZSAibXNnX2xpc3QiIGJlZm9yZSByZXR1cm5pbmcgZnJvbSBkb19jbWRsaW5lKCkuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4yNzgKK1Byb2JsZW06ICAgIFVzaW5nICJtdWNoIiBpbnN0ZWFkIG9mICJtYW55Ii4KK1NvbHV0aW9uOiAgIENvcnJlY3QgdGhlIGVycm9yIG1lc3NhZ2UuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjI3OQorUHJvYmxlbTogICAgVGhlcmUgaXMgbm8gZGVmYXVsdCBjaG9pY2UgZm9yIGEgY29uZmlybSgpIGRpYWxvZywgbm93IHRoYXQgaXQgaXMKKwkgICAgcG9zc2libGUgbm90IHRvIGhhdmUgYSBkZWZhdWx0IGNob2ljZS4KK1NvbHV0aW9uOiAgIE1ha2UgdGhlIGZpcnN0IGNob2ljZSB0aGUgZGVmYXVsdCBjaG9pY2UuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi4yODAKK1Byb2JsZW06ICAgICJkbyIgYW5kICI6ZGlmZmdldCIgZG9uJ3Qgd29yayBpbiB0aGUgZmlyc3QgbGluZSBhbmQgdGhlIGxhc3QgbGluZQorCSAgICBvZiBhIGJ1ZmZlci4gKEFyb24gR3JpZmZpcykKK1NvbHV0aW9uOiAgIEZpbmQgYSBkaWZmZXJlbmNlIGFib3ZlIHRoZSBmaXJzdCBsaW5lIGFuZCBiZWxvdyB0aGUgbGFzdCBsaW5lLgorCSAgICBBbHNvIGZpeCBhIGZldyBkaXNwbGF5IHVwZGF0aW5nIGJ1Z3MuCitGaWxlczoJICAgIHNyYy9kaWZmLmMsIHNyYy9mb2xkLmMsIHNyYy9tb3ZlLmMKKworUGF0Y2ggNi4yLjI4MQorUHJvYmxlbTogICAgUG9zdFNjcmlwdCBwcmludGluZyBkb2Vzbid0IHdvcmsgb24gTWFjIE9TIFggMTAuMy4yLgorU29sdXRpb246ICAgQWRqdXN0IHRoZSBoZWFkZXIgZmlsZS4gKE1pa2UgV2lsbGlhbXMpCitGaWxlczoJICAgIHJ1bnRpbWUvcHJpbnQvcHJvbG9nLnBzCisKK1BhdGNoIDYuMi4yODIKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgQ1RSTC1PIHRvIGdvIGJhY2sgdG8gYSBoZWxwIGZpbGUsIGl0IGJlY29tZXMgbGlzdGVkLgorCSAgICAoQW5kcmV3IE5lc2JpdCkKKwkgICAgVXNpbmcgIjp0YWciIG9yICI6dGp1bXAiIGluIGEgaGVscCBmaWxlIGRvZXNuJ3Qga2VlcCB0aGUgaGVscCBmaWxlCisJICAgIHNldHRpbmdzIChlLmcuIGZvciAnaXNrZXl3b3JkJykuCitTb2x1dGlvbjogICBEb24ndCBtYXJrIGEgYnVmZmVyIGFzIGxpc3RlZCB3aGVuIGl0cyBoZWxwIGZsYWcgaXMgc2V0LiAgUHV0IGFsbAorCSAgICB0aGUgb3B0aW9uIHNldHRpbmdzIGZvciBhIGhlbHAgYnVmZmVyIHRvZ2V0aGVyIGluIGRvX2VjbWQoKS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMjgzCitQcm9ibGVtOiAgICBUaGUgImxvY2FsIGFkZGl0aW9ucyIgaW4gaGVscC50eHQgYXJlIHVzZWQgd2l0aG91dCBjb252ZXJzaW9uLAorCSAgICBjYXVzaW5nIGxhdGluMSBjaGFyYWN0ZXJzIHNob3dpbmcgdXAgd3Jvbmcgd2hlbiAnZW5jJyBpcyB1dGYtOC4KKwkgICAgKEFudG9pbmUgSi4gTWVjaGVseW5jaykKK1NvbHV0aW9uOiAgIENvbnZlcnQgdGhlIHRleHQgdG8gJ2VuY29kaW5nJy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjIuMjg0CitQcm9ibGVtOiAgICBMaXN0aW5nIGEgZnVuY3Rpb24gcHV0cyAiZW5kZnVuY3Rpb24iIGluIHRoZSBtZXNzYWdlIGhpc3RvcnkuCisJICAgIFR5cGluZyAicSIgYXQgdGhlIG1vcmUgcHJvbXB0IGlzbid0IGhhbmRsZWQgY29ycmVjdGx5IHdoZW4gbGlzdGluZworCSAgICB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucy4gIChIYXJhIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIERvbid0IHVzZSBtc2coKSBmb3IgImVuZGZ1bmN0aW9uIi4gIENoZWNrICJnb3RfaW50IiByZWd1bGFybHkuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjI4NQorUHJvYmxlbTogICAgR1VJOiBJbiBhIHNpbmdsZSB3cmFwcGVkIGxpbmUgdGhhdCBmaWxscyB0aGUgd2luZG93LCAiZ2oiIGluIHRoZQorCSAgICBsYXN0IHNjcmVlbiBsaW5lIGxlYXZlcyB0aGUgY3Vyc29yIGJlaGluZC4gKEl2YW4gVGFyYXNvdikKK1NvbHV0aW9uOiAgIFVuZHJhdyB0aGUgY3Vyc29yIGJlZm9yZSBzY3JvbGxpbmcgdGhlIHRleHQgdXAuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjIuMjg2CitQcm9ibGVtOiAgICBXaGVuIHRyeWluZyB0byByZW5hbWUgYSBmaWxlIGFuZCBpdCBkb2Vzbid0IGV4aXN0LCB0aGUgZGVzdGluYXRpb24KKwkgICAgZmlsZSBpcyBkZWxldGVkIGFueXdheS4gKEx1YyBEZXV4KQorU29sdXRpb246ICAgRG9uJ3QgZGVsZXRlIHRoZSBkZXN0aW5hdGlvbiB3aGVuIHRoZSBzb3VyY2UgZG9lc24ndCBleGlzdC4gKFRhcm8KKwkgICAgTXVyYW9rYSkKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi4yODcgKGFmdGVyIDYuMi4yNjQpCitQcm9ibGVtOiAgICBEdXBsaWNhdGUgbGluZXMgYXJlIGFkZGVkIHRvIHRoZSB2aW1pbmZvIGZpbGUuCitTb2x1dGlvbjogICBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRob3V0IGFuIG9mZnNldC4gIEFsc28gZml4ZXMKKwkgICAgcmVhZGluZyB2ZXJ5IGxvbmcgaGlzdG9yeSBsaW5lcyBmcm9tIHZpbWluZm8uCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuMi4yODggKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBBbiBleHRlcm5hbCBwcm9ncmFtIGNhbid0IGJlIGludGVycnVwdGVkLgorU29sdXRpb246ICAgRG9uJ3QgdXNlIHRoZSAnYycga2V5IGZvciBiYWNrc3BhY2UuIChFY2tlaGFyZCBCZXJucykKK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYworCitQYXRjaCA2LjIuMjg5CitQcm9ibGVtOiAgICBDb21waWxpbmcgdGhlIFRjbCBpbnRlcmZhY2Ugd2l0aCB0aHJlYWQgc3VwcG9ydCBjYXVzZXMgIjptYWtlIiB0bworCSAgICBmYWlsLiAgKEp1ZXJnZW4gU2FsaykKK1NvbHV0aW9uOiAgIFVzZSAkVENMX0RFRlMgZnJvbSB0aGUgVGNsIGNvbmZpZyBzY3JpcHQgdG8gb2J0YWluIHRoZSByZXF1aXJlZAorCSAgICBjb21waWxlIGZsYWdzIGZvciB1c2luZyB0aGUgdGhyZWFkIGxpYnJhcnkuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjIuMjkwIChleHRyYSkKK1Byb2JsZW06ICAgIE1hYzogVGhlIG1vdXNld2hlZWwgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgQWRkIG1vdXNld2hlZWwgc3VwcG9ydC4gIEFsc28gZml4IHVwZGF0aW5nIHRoZSB0aHVtYiBhZnRlciBhIGRyYWcKKwkgICAgYW5kIHRoZW4gdXNpbmcgYW5vdGhlciB3YXkgdG8gc2Nyb2xsLiAgKEVja2VoYXJkIEJlcm5zKQorRmlsZXM6CSAgICBzcmMvZ3VpX21hYy5jCisKK1BhdGNoIDYuMi4yOTEgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiB0aGUgcGx1cyBidXR0b24gYW5kIGNsb3NlIGJ1dHRvbiBkb24ndCBkbyBhbnl0aGluZy4KK1NvbHV0aW9uOiAgIE1ha2UgdGhlIHBsdXMgYnV0dG9uIG1heGltaXplIHRoZSB3aW5kb3cgYW5kIHRoZSBjbG9zZSBidXR0b24KKwkgICAgY2xvc2UgVmltLiAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9ndWkuYywgc3JjL2d1aV9tYWMuYworCitQYXRjaCA2LjIuMjkyCitQcm9ibGVtOiAgICBNb3RpZjogV2hlbiByZW1vdmluZyBHVUkgYXJndW1lbnRzIGZyb20gYXJndltdIGEgInBzIC1lZiIgc2hvd3MKKwkgICAgdGhlIGxhc3QgYXJndW1lbnQgcmVwZWF0ZWQuCitTb2x1dGlvbjogICBTZXQgYXJndlthcmdjXSB0byBOVUxMLiAoTWljaGFlbCBKYXJ2aXMpCitGaWxlczoJICAgIHNyYy9ndWlfeDExLmMKKworUGF0Y2ggNi4yLjI5MyAoYWZ0ZXIgNi4yLjI1NSkKK1Byb2JsZW06ICAgIEdUSzogQSBuZXcgaXRlbSBpbiBhIG1lbnUgaXMgcHV0IGJlZm9yZSB0aGUgdGVhcm9mZiBpdGVtLgorU29sdXRpb246ICAgRG8gaW5jcmVtZW50IHRoZSBtZW51IGl0ZW0gaW5kZXggZm9yIG5vbi1wb3B1cCBtZW51IGl0ZW1zLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0ay5jCisKK1BhdGNoIDYuMi4yOTQgKGV4dHJhKQorUHJvYmxlbTogICAgTWFjOiBDYW5ub3QgdXNlIG1vZGlmaWVycyB3aXRoIFNwYWNlLCBUYWIsIEVudGVyIGFuZCBFc2NhcGUuCitTb2x1dGlvbjogICBIYW5kbGUgYWxsIG1vZGlmaWVycyBmb3IgdGhlc2Uga2V5cy4gIChFY2tlaGFyZCBCZXJucykKK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYworCitQYXRjaCA2LjIuMjk1CitQcm9ibGVtOiAgICBXaGVuIGluIGRlYnVnIG1vZGUsIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSBhIHJlbW90ZSBjbGllbnQKKwkgICAgY2F1c2VzIGEgY3Jhc2guICBFdmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gY2F1c2VzIFZpbSB0byB3YWl0IGZvcgorCSAgICAiY29udCIgdG8gYmUgdHlwZWQsIHdpdGhvdXQgYSBwcm9tcHQuICAoSGFyaSBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBEaXNhYmxlIGRlYnVnZ2luZyB3aGVuIGV2YWx1YXRpbmcgYW4gZXhwcmVzc2lvbiBmb3IgYSBjbGllbnQuCisJICAgIChNaWNoYWVsIEdlZGRlcykgIERvbid0IHRyeSByZWFkaW5nIGludG8gdGhlIHR5cGVoZWFkIGJ1ZmZlciB3aGVuCisJICAgIGl0IG1heSBoYXZlIGJlZW4gZmlsbGVkIGluIGFub3RoZXIgd2F5LgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL2dldGNoYXIuYywgc3JjL2lmX3hjbWRzcnYuYywgc3JjL21haW4uYywKKwkgICAgc3JjL21pc2MxLmMsIHNyYy9wcm90by9nZXRjaGFyLnBybywgc3JjL3Byb3RvL21haW4ucHJvLAorCSAgICBzcmMvcHJvdG8vb3NfdW5peC5wcm8sIHNyYy9wcm90by91aS5wcm8sIHNyYy9zdHJ1Y3RzLmgsCisJICAgIHNyYy9vc191bml4LmMsIHNyYy91aS5jCisKK1BhdGNoIDYuMi4yOTYgKGV4dHJhKQorUHJvYmxlbTogICAgU2FtZSBhcyA2LjIuMjk1LgorU29sdXRpb246ICAgRXh0cmEgZmlsZXMgZm9yIHBhdGNoIDYuMi4yOTUuCitGaWxlczoJICAgIHNyYy9vc19hbWlnYS5jLCBzcmMvb3NfbXNkb3MuYywgc3JjL29zX3Jpc2Nvcy5jLCBzcmMvb3Nfd2luMzIuYywKKwkgICAgc3JjL3Byb3RvL29zX2FtaWdhLnBybywgc3JjL3Byb3RvL29zX21zZG9zLnBybywKKwkgICAgc3JjL3Byb3RvL29zX3Jpc2Nvcy5wcm8sIHNyYy9wcm90by9vc193aW4zMi5wcm8KKworUGF0Y2ggNi4yLjI5NyAoYWZ0ZXIgNi4yLjIzMikKK1Byb2JsZW06ICAgIENhbm5vdCBpbnZva2UgUHl0aG9uIGNvbW1hbmRzIHJlY3Vyc2l2ZWx5LgorU29sdXRpb246ICAgV2l0aCBQeXRob24gMi4zIGFuZCBsYXRlciB1c2UgdGhlIGF2YWlsYWJsZSBtZWNoYW5pc21zIHRvIGludm9rZQorCSAgICBQeXRob24gcmVjdXJzaXZlbHkuIChNYXR0aGV3IE11ZWxsZXIpCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjIuMjk4CitQcm9ibGVtOiAgICBBIGNoYW5nZSBhbHdheXMgc2V0cyB0aGUgJy4gbWFyayBhbmQgYW4gaW5zZXJ0IGFsd2F5cyBzZXRzIHRoZSAnXgorCSAgICBtYXJrLCBldmVuIHdoZW4gdGhpcyBpcyBub3Qgd2FudGVkLgorCSAgICBDYW5ub3QgZ28gYmFjayB0byB0aGUgcG9zaXRpb24gb2Ygb2xkZXIgY2hhbmdlcyB3aXRob3V0IHVuZG9pbmcKKwkgICAgdGhvc2UgY2hhbmdlcy4KK1NvbHV0aW9uOiAgIEFkZCB0aGUgIjprZWVwanVtcHMiIGNvbW1hbmQgbW9kaWZpZXIuCisJICAgIEFkZCB0aGUgImcsIiBhbmQgImc7IiBjb21tYW5kcy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbW90aW9uLnR4dCwgc3JjL2V4X2NtZHMuaCwgc3JjL2V4X2RvY21kLmMsIHNyYy9lZGl0LmMsCisJICAgIHNyYy9tYXJrLmMsIHNyYy9taXNjMS5jLCBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by9tYXJrLnBybywKKwkgICAgc3JjL3N0cnVjdHMuaCwgc3JjL3VuZG8uYworCitQYXRjaCA2LjIuMjk5CitQcm9ibGVtOiAgICBDYW4gb25seSB1c2Ugb25lIGxhbmd1YWdlIGZvciBoZWxwIGZpbGVzLgorU29sdXRpb246ICAgQWRkIHRoZSAnaGVscGxhbmcnIG9wdGlvbiB0byBzZWxlY3QgdGhlIHByZWZlcnJlZCBsYW5ndWFnZShzKS4KKwkgICAgTWFrZSAiOmhlbHB0YWdzIiBnZW5lcmF0ZSB0YWdzIGZpbGVzIGZvciBhbGwgbGFuZ3VhZ2VzLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgcnVudGltZS9kb2MvdmFyaW91cy50eHQsIHNyYy9NYWtlZmlsZSwKKwkgICAgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2NtZHMyLmMsIHNyYy9leF9jbWRzLmgsIHNyYy9leF9nZXRsbi5jLAorCSAgICBzcmMvbm9ybWFsLmMsIHNyYy9vcHRpb24uYywgc3JjL29wdGlvbi5oLCBzcmMvcHJvdG8vZXhfY21kcy5wcm8sCisJICAgIHNyYy9wcm90by9leF9jbWRzMi5wcm8sIHNyYy9wcm90by9vcHRpb24ucHJvLCBzcmMvc3RydWN0cy5oLAorCSAgICBzcmMvdGFnLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMzAwIChhZnRlciA2LjIuMjk3KQorUHJvYmxlbTogICAgQ2Fubm90IGJ1aWxkIFB5dGhvbiBpbnRlcmZhY2Ugd2l0aCBQeXRob24gMi4yIG9yIGVhcmxpZXIuCitTb2x1dGlvbjogICBBZGQgYSBzZW1pY29sb24uCitGaWxlczoJICAgIHNyYy9pZl9weXRob24uYworCitQYXRjaCA2LjIuMzAxCitQcm9ibGVtOiAgICBUaGUgInNlbGVjdCBhbGwiIGl0ZW0gZnJvbSB0aGUgcG9wdXAgbWVudSBkb2Vzbid0IHdvcmsgZm9yIFNlbGVjdAorCSAgICBtb2RlLgorU29sdXRpb246ICAgVXNlIHRoZSBzYW1lIGNvbW1hbmRzIGFzIGZvciB0aGUgIkVkaXQuc2VsZWN0IGFsbCIgbWVudS4KKwkgICAgKEJlbmppIEZpc2hlcikKK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbQorCitQYXRjaCA2LjIuMzAyCitQcm9ibGVtOiAgICBVc2luZyAiQ1RSTC1PIC4iIGluIEluc2VydCBtb2RlIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4gKEJlbmppCisJICAgIEZpc2hlcikKK1NvbHV0aW9uOiAgIFJlc3RvcmUgInJlc3RhcnRfZWRpdCIgYWZ0ZXIgYW4gaW5zZXJ0IGNvbW1hbmQgdGhhdCB3YXMgbm90IHR5cGVkLgorCSAgICBBdm9pZCB3YWl0aW5nIHdpdGggZGlzcGxheWluZyB0aGUgbW9kZSB3aGVuIHRoZXJlIGlzIG5vIHRleHQgdG8gYmUKKwkgICAgb3ZlcndyaXR0ZW4uCisJICAgIEZpeCB0aGF0ICJDVFJMLU8gLiIgc29tZXRpbWVzIGRvZXNuJ3QgcHV0IHRoZSBjdXJzb3IgYmFjayBhZnRlcgorCSAgICB0aGUgZW5kLW9mLWxpbmUuICBPbmx5IHJlc2V0IHRoZSBmbGFnIHRoYXQgQ1RSTC1PIHdhcyB1c2VkIHBhc3QKKwkgICAgdGhlIGVuZCBvZiB0aGUgbGluZSB3aGVuIHJlc3RhcnRpbmcgZWRpdGluZy4gIFVwZGF0ZSAib19sbnVtIgorCSAgICBudW1iZXIgd2hlbiBpbnNlcnRpbmcgdGV4dCBhbmQgIm9fZW9sIiBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMzAzCitQcm9ibGVtOiAgICBDYW5ub3QgdXNlIFVuaWNvZGUgZGlncmFwaHMgd2hpbGUgJ2VuY29kaW5nJyBpcyBub3QgVW5pY29kZS4KK1NvbHV0aW9uOiAgIENvbnZlcnQgdGhlIGNoYXJhY3RlciBmcm9tIFVuaWNvZGUgdG8gJ2VuY29kaW5nJyB3aGVuIG5lZWRlZC4KKwkgICAgVXNlIHRoZSBVbmljb2RlIGRpZ3JhcGhzIGZvciB0aGUgTWFjaW50b3NoLiAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9kaWdyYXBoLmMKKworUGF0Y2ggNi4yLjMwNCAoZXh0cmEsIGFmdGVyIDYuMi4yNTYpCitQcm9ibGVtOiAgICBNYWM6IE5vIHByb3BlciBzdXBwb3J0IGZvciAnZW5jb2RpbmcnLiAgQ29udmVyc2lvbiB3aXRob3V0IGljb252KCkKKwkgICAgaXMgbm90IHBvc3NpYmxlLgorU29sdXRpb246ICAgQ29udmVydCBpbnB1dCBmcm9tICd0ZXJtZW5jb2RpbmcnIHRvICdlbmNvZGluZycuICBBZGQKKwkgICAgbWFjX3N0cmluZ19jb252ZXJ0KCkuICBDb252ZXJ0IHRleHQgZm9yIHRoZSBjbGlwYm9hcmQgd2hlbiBuZWVkZWQuCisJICAgIChFY2tlaGFyZCBCZXJucykKK0ZpbGVzOgkgICAgc3JjL2d1aV9tYWMuYywgc3JjL21ieXRlLmMsIHNyYy9zdHJ1Y3RzLmgsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMzA1IChhZnRlciA2LjIuMzAwKQorUHJvYmxlbTogICAgV2luMzI6IENhbm5vdCBidWlsZCBQeXRob24gaW50ZXJmYWNlIHdpdGggUHl0aG9uIDIuMy4gKEFqaXQKKwkgICAgVGhha2thcikKK1NvbHV0aW9uOiAgIEFkZCB0d28gZnVuY3Rpb25zIHRvIHRoZSBkeW5hbWljIGxvYWRpbmcgZmVhdHVyZS4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi4zMDYgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IEJ1aWxkaW5nIGNvbnNvbGUgdmVyc2lvbiB3aXRoIEJDQyA1LjUgZ2l2ZXMgYSB3YXJuaW5nIGZvcgorCSAgICBnZXRfY21kX2FyZ3MoKSBwcm90b3R5cGUgbWlzc2luZy4gIChBaml0IFRoYWtrYXIpCitTb2x1dGlvbjogICBEb24ndCBidWlsZCBvc193MzJleGUuYyBmb3IgdGhlIGNvbnNvbGUgdmVyc2lvbi4KK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haworCitQYXRjaCA2LjIuMzA3IChhZnRlciA2LjIuMjk5KQorUHJvYmxlbTogICAgSW5zdGFsbGluZyBoZWxwIGZpbGVzIGZhaWxzLgorU29sdXRpb246ICAgRXhwYW5kIHdpbGRjYXJkcyBmb3IgdHJhbnNsYXRlZCBoZWxwIGZpbGVzIHNlcGFyYXRlbHkuCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjIuMzA4CitQcm9ibGVtOiAgICBOb3QgYWxsIHN5c3RlbXMgaGF2ZSAid2hvYW1pIiwgcmVzdWx0aW5nIGluIGFuIGVtcHR5IHVzZXIgbmFtZS4KK1NvbHV0aW9uOiAgIFVzZSAibG9nbmFtZSIgd2hlbiBwb3NzaWJsZSwgIndob2FtaSIgb3RoZXJ3aXNlLiAgKERhdmlkIEJveWNlKQorRmlsZXM6CSAgICBzcmMvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjMwOQorUHJvYmxlbTogICAgIjNncngiIHdhaXRzIGZvciB0d28gRVNDIHRvIGJlIHR5cGVkLiAgKEplbnMgUGF1bHVzKQorU29sdXRpb246ICAgQXBwZW5kIHRoZSBFU0MgdG8gdGhlIHN0dWZmIGJ1ZmZlciB3aGVuIHJlZG9pbmcgdGhlICJnciIgaW5zZXJ0LgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMi4zMTAKK1Byb2JsZW06ICAgIFdoZW4gc2V0dGluZyAndW5kb2xldmVscycgdG8gLTEsIG1ha2luZyBhIGNoYW5nZSBhbmQgc2V0dGluZworCSAgICAndW5kb2xldmVscycgdG8gYSBwb3NpdGl2ZSB2YWx1ZSBhbiAidW5kbyBsaXN0IGNvcnJ1cHQiIGVycm9yCisJICAgIG9jY3Vycy4gKE1hZG9rYSBNYWNoaXRhbmkpCitTb2x1dGlvbjogICBTeW5jIHVuZG8gYmVmb3JlIGNoYW5naW5nICd1bmRvbGV2ZWxzJy4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4zMTEgKGFmdGVyIDYuMi4yOTgpCitQcm9ibGVtOiAgICBXaGVuIG1ha2luZyBzZXZlcmFsIGNoYW5nZXMgaW4gb25lIGxpbmUgdGhlIGNoYW5nZWxpc3QgZ3Jvd3MKKwkgICAgcXVpY2tseS4gIFRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UgZm9yIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlCisJICAgIGNoYW5nZWxpc3QuICBSZWFkaW5nIGNoYW5nZWxpc3QgbWFya3MgZnJvbSB2aW1pbmZvIGRvZXNuJ3Qgd29yaworCSAgICBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIE9ubHkgbWFrZSBhIG5ldyBlbnRyeSBpbiB0aGUgY2hhbmdlbGlzdCB3aGVuIG1ha2luZyBhIGNoYW5nZSBpbgorCSAgICBhbm90aGVyIGxpbmUgb3IgJ3RleHR3aWR0aCcgY29sdW1ucyBhd2F5LiAgQWRkIEU2NjIsIEU2NjMgYW5kIEU2NjQKKwkgICAgZXJyb3IgbWVzc2FnZXMuICBQdXQgYSBjaGFuZ2VsaXN0IG1hcmsgZnJvbSB2aW1pbmZvIG9uZSBwb3NpdGlvbgorCSAgICBiZWZvcmUgdGhlIGVuZC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvbW90aW9uLnR4dCwgc3JjL21hcmsuYywgc3JjL21pc2MxLmMsIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMzEyIChhZnRlciA2LjIuMjk5KQorUHJvYmxlbTogICAgIm1ha2UgaW5zdGFsbCIgY2xlYXJzIHRoZSBzY3JlZW4gd2hlbiBpbnN0YWxsaW5nIHRoZSBkb2NzLgorU29sdXRpb246ICAgRXhlY3V0ZSAiOmhlbHB0YWdzIiBpbiBzaWxlbnQgbW9kZS4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvTWFrZWZpbGUKKworUGF0Y2ggNi4yLjMxMworUHJvYmxlbTogICAgV2hlbiBvcGVuaW5nIGZvbGRzIGluIGEgZGlmZiB3aW5kb3csIG90aGVyIGRpZmYgd2luZG93cyBubyBsb25nZXIKKwkgICAgc2hvdyB0aGUgc2FtZSB0ZXh0LgorU29sdXRpb246ICAgU3luYyB0aGUgZm9sZHMgaW4gZGlmZiB3aW5kb3dzLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jLCBzcmMvZm9sZC5jLCBzcmMvbW92ZS5jLCBzcmMvcHJvdG8vZGlmZi5wcm8sCisJICAgIHNyYy9wcm90by9tb3ZlLnBybworCitQYXRjaCA2LjIuMzE0CitQcm9ibGVtOiAgICBXaGVuICd2aXJ0dWFsZWRpdCcgaXMgc2V0ICJyeCIgbWF5IGNhdXNlIGEgY3Jhc2ggd2l0aCBhIGJsb2Nrd2lzZQorCSAgICBzZWxlY3Rpb24gYW5kIHVzaW5nICIkIi4gKE1vcml0eiBPcmJhY2gpCitTb2x1dGlvbjogICBEb24ndCB0cnkgcmVwbGFjaW5nIGNoYXJzIGluIGEgbGluZSB0aGF0IGhhcyBubyBjaGFyYWN0ZXJzIGluIHRoZQorCSAgICBibG9jay4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMi4zMTUKK1Byb2JsZW06ICAgIFVzaW5nIENUUkwtQyBpbiBhIFZpc3VhbCBtb2RlIG1hcHBpbmcgd2hpbGUgJ2luc2VydG1vZGUnIGlzIHNldAorCSAgICBzdG9wcyBWaW0gZnJvbSByZXR1cm5pbmcgdG8gSW5zZXJ0IG1vZGUuCitTb2x1dGlvbjogICBEb24ndCByZXNldCAicmVzdGFydF9lZGl0IiB3aGVuIGEgQ1RSTC1DIGlzIGZvdW5kIGFuZCAnaW5zZXJ0bW9kZScKKwkgICAgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjMxNiAoYWZ0ZXIgNi4yLjMxMikKK1Byb2JsZW06ICAgICJtYWtlIGluc3RhbGwiIHRyaWVzIGNvbm5lY3RpbmcgdG8gdGhlIFggc2VydmVyIHdoZW4gaW5zdGFsbGluZworCSAgICB0aGUgZG9jcy4gKFN0ZXBoZW4gVGhvbWFzKQorU29sdXRpb246ICAgQWRkIHRoZSAiLVgiIGFyZ3VtZW50LgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9NYWtlZmlsZQorCitQYXRjaCA2LjIuMzE3IChhZnRlciA2LjIuMzEzKQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiemkiIGluIGEgZGlmZiB3aW5kb3csIG90aGVyIGRpZmYgd2luZG93cyBhcmUgbm90CisJICAgIGFkanVzdGVkLiAoUmljaGFyZCBDdXJub3cpCitTb2x1dGlvbjogICBEaXN0cmlidXRlIGEgY2hhbmdlIGluICdmb2xkZW5hYmxlJyB0byBvdGhlciBkaWZmIHdpbmRvd3MuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMzE4CitQcm9ibGVtOiAgICBXaGVuIGNvbXBpbGluZyB3aXRoIF9USFJFQURfU0FGRSBleHRlcm5hbCBjb21tYW5kcyBkb24ndCBlY2hvCisJICAgIHR5cGVkIGNoYXJhY3RlcnMuCitTb2x1dGlvbjogICBEb24ndCBzZXQgdGhlIHRlcm1pbmFsIG1vZGUgdG8gVE1PREVfU0xFRVAgd2hlbiBpdCdzIGFscmVhZHkgYXQKKwkgICAgVE1PREVfQ09PSy4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuMzE5IChleHRyYSkKK1Byb2JsZW06ICAgIEJ1aWxkaW5nIGd2aW1leHQuZGxsIHdpdGggTWluZ3cgZG9lc24ndCB3b3JrIHByb3Blcmx5LgorU29sdXRpb246ICAgVXNlIGdjYyBpbnN0ZWFkIG9mIGRsbHdyYXAuICBVc2UgbG9uZyBvcHRpb24gbmFtZXMuIChBbGVqYW5kcm8KKwkgICAgTG9wZXotVmFsZW5jaWEpCitGaWxlczoJICAgIHNyYy9HdmltRXh0L01ha2VfbWluZy5tYWsKKworUGF0Y2ggNi4yLjMyMAorUHJvYmxlbTogICAgV2luMzI6IEFkZGluZyBhbmQgcmVtb3ZpbmcgdGhlIG1lbnViYXIgcmVzaXplcyB0aGUgVmltIHdpbmRvdy4KKwkgICAgKEpvbmF0aG9uIE1lcnopCitTb2x1dGlvbjogICBEb24ndCBsZXQgYSByZXNpemUgZXZlbnQgY2hhbmdlICdsaW5lcycgdW5leHBlY3RlZGx5LgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjMyMQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBtb2RlbGVzcyBzZWxlY3Rpb24sIHdyYXBwaW5nIGxpbmVzIGFyZSBub3QgcmVjb2duaXplZCwKKwkgICAgYSBsaW5lIGJyZWFrIGlzIGFsd2F5cyBpbnNlcnRlZC4KK1NvbHV0aW9uOiAgIEFkZCBMaW5lV3JhcHNbXSB0byByZW1lbWJlciB3aGV0aGVyIGEgbGluZSB3cmFwcGVkIG9yIG5vdC4KK0ZpbGVzOgkgICAgc3JjL2dsb2JhbHMuaCwgc3JjL3NjcmVlbi5jLCBzcmMvdWkuYworCitQYXRjaCA2LjIuMzIyCitQcm9ibGVtOiAgICBXaXRoICdzaG93Y21kJyBzZXQsIGFmdGVyIHR5cGluZyAiZGQiIHRoZSBuZXh0ICJkIiBtYXkgbm90IGJlCisJICAgIGRpc3BsYXllZC4gKEplbnMgUGF1bHVzKQorU29sdXRpb246ICAgUmVkcmF3IHRoZSBjb21tYW5kIGxpbmUgYWZ0ZXIgdXBkYXRpbmcgdGhlIHNjcmVlbiwgc2Nyb2xsaW5nIG1heQorCSAgICBoYXZlIHNldCAiY2xlYXJfY21kbGluZSIuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuMzIzCitQcm9ibGVtOiAgICBXaW4zMjogZXhwYW5kaW5nICJ+L2ZpbGUiIGluIGFuIGF1dG9jb21tYW5kIHBhdHRlcm4gcmVzdWx0cyBpbgorCSAgICBiYWNrc2xhc2hlcywgd2hpbGUgdGhpcyBwYXR0ZXJuIHNob3VsZCBvbmx5IGhhdmUgZm9yd2FyZCBzbGFzaGVzLgorU29sdXRpb246ICAgTWFrZSBleHBhbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlc3BlY3QgJ3NoZWxsc2xhc2gnIGFuZCBzZXQKKwkgICAgcF9zc2wgd2hlbiBleHBhbmRpbmcgdGhlIGF1dG9jb21tYW5kIHBhdHRlcm4uCitGaWxlczoJICAgIHNyYy9maWxlaW8uYywgc3JjL21pc2MxLmMsIHNyYy9wcm90by9maWxlaW8ucHJvCisKK1BhdGNoIDYuMi4zMjQgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IHdoZW4gInZpbXJ1bi5leGUiIGhhcyBhIHBhdGggd2l0aCB3aGl0ZSBzcGFjZSwgc3VjaCBhcworCSAgICAiUHJvZ3JhbSBGaWxlcyIsIGV4ZWN1dGluZyBleHRlcm5hbCBjb21tYW5kcyBtYXkgZmFpbC4KK1NvbHV0aW9uOiAgIFB1dCBkb3VibGUgcXVvdGVzIGFyb3VuZCB0aGUgcGF0aCB0byAidmltcnVuIi4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjMyNQorUHJvYmxlbTogICAgV2hlbiAkSE9NRSBpbmNsdWRlcyBhIHNwYWNlLCBkb2luZyAiOnNldCB0YWdzPX4vdGFncyIgZG9lc24ndAorCSAgICB3b3JrLCB0aGUgc3BhY2UgaXMgdXNlZCB0byBzZXBhcmF0ZSBmaWxlIG5hbWVzLiAgKEJyZXR0IFN0YWhsbWFuKQorU29sdXRpb246ICAgRXNjYXBlIHRoZSBzcGFjZSB3aXRoIGEgYmFja3NsYXNoLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjMyNgorUHJvYmxlbTogICAgIjp3aW5kbyBzZXQgc3ludGF4PWZvbyIgZG9lc24ndCB3b3JrLiAgKFRpbSBDaGFzZSkKK1NvbHV0aW9uOiAgIERvbid0IGNoYW5nZSAnZXZlbnRpZ25vcmUnIGZvciAiOndpbmRvIi4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4yLjMyNworUHJvYmxlbTogICAgV2hlbiBmb3JtYXR0aW5nIHRleHQgYWxsIG1hcmtzIGluIHRoZSBmb3JtYXR0ZWQgbGluZXMgYXJlIGxvc3QuCisJICAgIEEgd29yZCBpcyBub3Qgam9pbmVkIHRvIGEgcHJldmlvdXMgbGluZSB3aGVuIHRoaXMgd291bGQgYmUKKwkgICAgcG9zc2libGUuICAoTWlrb2xhaiBNYWNob3dza2kpCitTb2x1dGlvbjogICBUcnkgdG8ga2VlcCBtYXJrcyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSAgICBBbHNvIGtlZXAgbWFyayBwb3NpdGlvbnMgd2hlbiBqb2luaW5nIGxpbmVzLgorCSAgICBTdGFydCBhdXRvLWZvcm1hdHRpbmcgaW4gdGhlIHByZXZpb3VzIGxpbmUgd2hlbiBhcHByb3ByaWF0ZS4KKwkgICAgQWRkIHRoZSAiZ3ciIG9wZXJhdG9yOiBMaWtlICJncSIgYnV0IGtlZXAgdGhlIGN1cnNvciB3aGVyZSBpdCBpcy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvY2hhbmdlLnR4dCwgc3JjL2VkaXQuYywgc3JjL2dsb2JhbHMuaCwgc3JjL21hcmsuYywKKwkgICAgc3JjL21pc2MxLmMsIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jLCBzcmMvcHJvdG8vZWRpdC5wcm8sCisJICAgIHNyYy9wcm90by9tYXJrLnBybywgc3JjL3Byb3RvL29wcy5wcm8sIHNyYy9zdHJ1Y3RzLmgsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMzI4CitQcm9ibGVtOiAgICBYSU0gd2l0aCBHVEs6IEl0IGlzIGhhcmQgdG8gdW5kZXJzdGFuZCB3aGF0IFhJTSBpcyBkb2luZy4KK1NvbHV0aW9uOiAgIEFkZCB4aW1fbG9nKCkgdG8gbG9nIFhJTSBldmVudHMgYW5kIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi4zMjkKK1Byb2JsZW06ICAgICI6PSIgZG9lcyBub3Qgd29yayBWaSBjb21wYXRpYmxlLiAoQW50b255IFNjcml2ZW4pCitTb2x1dGlvbjogICBQcmludCB0aGUgbGFzdCBsaW5lIG51bWJlciBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IGxpbmUuICBEb24ndAorCSAgICBwcmludCAibGluZSIuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmgsIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi4zMzAgKGV4dHJhLCBhZnRlciA2LjIuMjY3KQorUHJvYmxlbTogICAgV2luMzI6IENyYXNoIHdoZW4gdGVhcmluZyBvZmYgYSBtZW51LgorU29sdXRpb246ICAgVGVybWluYXRlIGEgc3RyaW5nIHdpdGggYSBOVUwuIChZYXN1aGlybyBNYXRzdW1vdG8pCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMKKworUGF0Y2ggNi4yLjMzMSAoYWZ0ZXIgNi4yLjMyNykKK1Byb2JsZW06ICAgICJnd2FwIiBsZWF2ZXMgY3Vyc29yIGluIHRoZSB3cm9uZyBsaW5lLgorU29sdXRpb246ICAgUmVtZW1iZXIgdGhlIGN1cnNvciBwb3NpdGlvbiBiZWZvcmUgZmluZGluZyB0aGUgZW5kcyBvZiB0aGUKKwkgICAgcGFyYWdyYXBoLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjIuMzMyIChleHRyYSkKK1Byb2JsZW06ICAgIEFtaWdhOiBDb21waWxlIGVycm9yIGZvciBzdHJpbmcgYXJyYXkuIENvbXBpbGluZyB0aGUgQW1pZ2EgR1VJCisJICAgIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIFVzZSBhIGNoYXIgcG9pbnRlciBpbnN0ZWFkLiAgTW92ZSBpbmNsdWRpbmcgImd1aV9hbWlnYS5oIiB0byBhZnRlcgorCSAgICBpbmNsdWRpbmcgInZpbS5oIi4gIEFkZCBhIHNlbWljb2xvbi4gKEFsaSBBa2NhYWdhYykKK0ZpbGVzOgkgICAgc3JjL2d1aV9hbWlnYS5jLCBzcmMvb3NfYW1pZ2EuYworCitQYXRjaCA2LjIuMzMzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBwcmludGluZyBkb2Vzbid0IHdvcmsgd2l0aCBzcGVjaWZpZWQgZm9udCBjaGFyc2V0LgorU29sdXRpb246ICAgVXNlIHRoZSBzcGVjaWZpZWQgZm9udCBjaGFyc2V0LiAoTWlrZSBXaWxsaWFtcykKK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4yLjMzNCAoZXh0cmEsIGFmdGVyIDYuMi4yOTYpCitQcm9ibGVtOiAgICBXaW4zMjogZXZhbHVhdGluZyBjbGllbnQgZXhwcmVzc2lvbiBpbiBkZWJ1ZyBtb2RlIHJlcXVpcmVzIHR5cGluZworCSAgICAiY29udCIuCitTb2x1dGlvbjogICBVc2UgZXZhbF9jbGllbnRfZXhwcl90b19zdHJpbmcoKS4KK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4yLjMzNQorUHJvYmxlbTogICAgVGhlICI6c2lnbiIgY29tbWFuZCBjYW5ub3QgYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBjb21tYW5kLgorU29sdXRpb246ICAgQWRkIFRSTEJBUiB0byB0aGUgY29tbWFuZCBmbGFncy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuaAorCitQYXRjaCA2LjIuMzM2IChhZnRlciA2LjIuMzI3KQorUHJvYmxlbTogICAgTWl4dXAgb2YgaXRlbXMgaW4gYW4gZXhwcmVzc2lvbi4KK1NvbHV0aW9uOiAgIE1vdmUgIj09IE5VTCIgdG8gdGhlIHJpZ2h0IHNwb3QuCitGaWxlczoJICAgIHNyYy9lZGl0LmMKKworUGF0Y2ggNi4yLjMzNyAoZXh0cmEsIGFmdGVyIDYuMi4zMTkpCitQcm9ibGVtOiAgICBCdWlsZGluZyBndmltZXh0LmRsbCB3aXRoIE1pbmd3IGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KK1NvbHV0aW9uOiAgIEZpeCB3aGl0ZSBzcGFjZSBhbmQgb3RoZXIgZGV0YWlscy4gKEFsZWphbmRybyBMb3Blei1WYWxlbmNpYSkKK0ZpbGVzOgkgICAgc3JjL0d2aW1FeHQvTWFrZV9taW5nLm1haworCitQYXRjaCA2LjIuMzM4IChhZnRlciA2LjIuMzMxKQorUHJvYmxlbTogICAgV2hlbiB1bmRvaW5nICJnd2FwIiB0aGUgY3Vyc29yIGlzIGFsd2F5cyBwdXQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorCSAgICBwYXJhZ3JhcGguICBXaGVuIHVuZG9pbmcgYXV0by1mb3JtYXR0aW5nIHRoZSBjdXJzb3IgbWF5IGJlIGFib3ZlCisJICAgIHRoZSBjaGFuZ2UuCitTb2x1dGlvbjogICBUcnkgdG8gbW92ZSB0aGUgY3Vyc29yIGJhY2sgdG8gd2hlcmUgaXQgd2FzIG9yIHRvIHRoZSBmaXJzdCBsaW5lCisJICAgIHRoYXQgYWN0dWFsbHkgY2hhbmdlZC4KK0ZpbGVzOgkgICAgc3JjL25vcm1hbC5jLCBzcmMvb3BzLmMsIHNyYy91bmRvLmMKKworUGF0Y2ggNi4yLjMzOQorUHJvYmxlbTogICAgQ3Jhc2ggd2hlbiB1c2luZyBtYW55IGRpZmZlcmVudCBoaWdobGlnaHQgZ3JvdXBzIGFuZCBhIFVzZXIKKwkgICAgaGlnaGxpZ2h0IGdyb3VwLiAgKEp1ZXJnZW4gS3JhZW1lcikKK1NvbHV0aW9uOiAgIERvIG5vdCB1c2UgdGhlIHNnX25hbWVfdSBwb2ludGVyIHdoZW4gaXQgaXMgTlVMTC4gIEFsc28gc2ltcGxpZnkKKwkgICAgdXNlIG9mIHRoZSBoaWdobGlnaHQgZ3JvdXAgdGFibGUuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjIuMzQwCitQcm9ibGVtOiAgICAiOnJlZyIgZG9lc24ndCBzaG93IHRoZSBhY3R1YWwgY29udGVudHMgb2YgdGhlIGNsaXBib2FyZCBpZiBpdCB3YXMKKwkgICAgZmlsbGVkIG91dHNpZGUgb2YgVmltLiAoU3R1YXJ0IE1hY0RvbmFsZCkKK1NvbHV0aW9uOiAgIE9idGFpbiB0aGUgY2xpcGJvYXJkIGNvbnRlbnRzIGJlZm9yZSBkaXNwbGF5aW5nIGl0LgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4yLjM0MSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB0aGUgcGF0aCB0byBkaWZmLmV4ZSBjb250YWlucyBhIHNwYWNlIGFuZCB1c2luZyB0aGUKKwkgICAgdmltcmMgZ2VuZXJhdGVkIGJ5IHRoZSBpbnN0YWxsIHByb2dyYW0sIGRpZmYgbW9kZSBkb2VzIG5vdCB3b3JrLgorU29sdXRpb246ICAgUHV0IHRoZSBmaXJzdCBkb3VibGUgcXVvdGUganVzdCBiZWZvcmUgdGhlIHNwYWNlIGluc3RlYWQgb2YgYmVmb3JlCisJICAgIHRoZSBwYXRoLgorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDYuMi4zNDIgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IG1hY3JvcyBhcmUgbm90IGFsd2F5cyB1c2VkIGFzIGV4cGVjdGVkLgorU29sdXRpb246ICAgRGVmaW5lIFdJTlZFUiB0byAweDA0MDAgaW5zdGVhZCBvZiAweDQwMC4gKEFsZWphbmRybworCSAgICBMb3Blei1WYWxlbmNpYSkKK0ZpbGVzOgkgICAgc3JjL01ha2VfYmM1Lm1haywgc3JjL01ha2VfY3lnLm1haywgc3JjL01ha2VfbXZjLm1haworCitQYXRjaCA2LjIuMzQzCitQcm9ibGVtOiAgICBUaXRsZSBkb2Vzbid0IHdvcmsgd2l0aCBzb21lIHdpbmRvdyBtYW5hZ2Vycy4gIFgxMTogU2V0dGluZyB0aGUKKwkgICAgdGV4dCBwcm9wZXJ0eSBmb3IgdGhlIHdpbmRvdyB0aXRsZSBpcyBoYXJkIGNvZGVkLgorU29sdXRpb246ICAgVXNlIFNUUklORyBmb3JtYXQgd2hlbiBwb3NzaWJsZS4gIFVzZSB0aGUgVVRGLTggZnVuY3Rpb24gd2hlbgorCSAgICBpdCdzIGF2YWlsYWJsZSBhbmQgJ2VuY29kaW5nJyBpcyB1dGYtOC4gVXNlCisJICAgIFhTdHJpbmdMaXN0VG9UZXh0UHJvcGVydHkoKS4gIERvIHRoZSBzYW1lIGZvciB0aGUgaWNvbiBuYW1lLgorCSAgICAoRGF2aWQgSGFycmlzb24pCitGaWxlczoJICAgIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4yLjM0NCAoZXh0cmEsIGFmdGVyIDYuMi4zMzcpCitQcm9ibGVtOiAgICBDYW5ub3QgYnVpbGQgZ3ZpbWV4dC5kbGwgd2l0aCBNaW5nVyBvbiBMaW51eC4KK1NvbHV0aW9uOiAgIEFkZCBzdXBwb3J0IGZvciBjcm9zcyBjb21waWxpbmcuIChSb25hbGQgSG9lbGx3YXJ0aCkKK0ZpbGVzOgkgICAgc3JjL0d2aW1FeHQvTWFrZV9taW5nLm1haworCitQYXRjaCA2LjIuMzQ1IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBDb3B5L3Bhc3RlIGJldHdlZW4gdHdvIFZpbXMgZmFpbHMgaWYgJ2VuY29kaW5nJyBpcyBub3Qgc2V0CisJICAgIHByb3Blcmx5IG9yIHRoZXJlIGFyZSBpbGxlZ2FsIGJ5dGVzLgorU29sdXRpb246ICAgVXNlIGEgcmF3IGJ5dGUgZm9ybWF0LiAgQWx3YXlzIHNldCBpdCB3aGVuIGNvcHlpbmcuICBXaGVuIHBhc3RpbmcKKwkgICAgdXNlIHRoZSByYXcgZm9ybWF0IGlmICdlbmNvZGluZycgaXMgdGhlIHNhbWUuCitGaWxlczoJICAgIHNyYy9vc19tc3dpbi5jLCBzcmMvb3Nfd2luMTYuYywgc3JjL29zX3dpbjMyLmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMzQ2CitQcm9ibGVtOiAgICBXaW4zMiBjb25zb2xlOiBBZnRlciB1c2luZyAiY2hjcCIgVmltIGRvZXMgbm90IGRldGVjdCB0aGUKKwkgICAgZGlmZmVyZW50IGNvZGVwYWdlLgorU29sdXRpb246ICAgVXNlIEdldENvbnNvbGVDUCgpIGFuZCB3aGVuIGl0IGlzIGRpZmZlcmVudCBmcm9tIEdldEFDUCgpIHNldAorCSAgICAndGVybWVuY29kaW5nJy4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4zNDcgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFhQIHRoZW1lIHN1cHBvcnQgaXMgbWlzc2luZy4KK1NvbHV0aW9uOiAgIEFkZCBhIG1hbmlmZXN0IGFuZCByZWZlciB0byBpdCBmcm9tIHRoZSByZXNvdXJjZSBmaWxlLiAgKE1pY2hhZWwKKwkgICAgV29va2V5KQorRmlsZXM6CSAgICBNYWtlZmlsZSwgc3JjL2d2aW0uZXhlLm1uZiwgc3JjL3ZpbS5yYworCitQYXRjaCA2LjIuMzQ4CitQcm9ibGVtOiAgICBXaW4zMjogInZpbSBjOlxkaXJcKHRlc3QpIiBkb2Vzbid0IHdvcmssIGJlY2F1c2UgdGhlICdpc2ZuYW1lJworCSAgICBkZWZhdWx0IHZhbHVlIGRvZXNuJ3QgY29udGFpbiBwYXJlbnRoZXNpcy4KK1NvbHV0aW9uOiAgIFRlbXBvcmFyaWx5IGFkZCAnKCcgYW5kICcpJyB0byAnaXNmbmFtZScgd2hlbiBleHBhbmRpbmcgZmlsZSBuYW1lCisJICAgIGFyZ3VtZW50cy4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjIuMzQ5CitQcm9ibGVtOiAgICBGaW5kaW5nIGEgbWF0Y2ggdXNpbmcgJ21hdGNocGFpcnMnIG1heSBjYXVzZSBhIGNyYXNoLgorCSAgICAnbWF0Y2hwYWlycycgaXMgbm90IHVzZWQgZm9yICdzaG93bWF0Y2gnLgorU29sdXRpb246ICAgRG9uJ3QgbG9vayBwYXN0IHRoZSBOVUwgaW4gJ21hdGNocGFpcnMnLiAgVXNlICdtYXRjaHBhaXJzJyBmb3IKKwkgICAgJ3Nob3dtYXRjaCcuIChEYXZlIE9sc3pld2tza2kpCitGaWxlczoJICAgIHNyYy9taXNjMS5jLCBzcmMvbm9ybWFsLmMsIHNyYy9wcm90by9zZWFyY2gucHJvLCBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4yLjM1MAorUHJvYmxlbTogICAgTm90IGVub3VnaCBpbmZvIGFib3V0IHN0YXJ0dXAgdGltaW5nLgorU29sdXRpb246ICAgQWRkIGEgZmV3IG1vcmUgVElNRV9NU0coKSBjYWxscy4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjIuMzUxCitQcm9ibGVtOiAgICBXaW4zMjogJEhPTUUgbWF5IGJlIHNldCB0byAlVVNFUlBST0ZJTEUlLgorU29sdXRpb246ICAgRXhwYW5kICVWQVIlIGF0IHRoZSBzdGFydCBvZiAkSE9NRS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4yLjM1MiAoYWZ0ZXIgNi4yLjMzNSkKK1Byb2JsZW06ICAgICI6c2lnbiB0ZXh0aGw9fHwiIGRvZXMgbm90IHdvcmsuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIGNoZWNrIGZvciBhIGZvbGxvd2luZyBjb21tYW5kLiAgR2l2ZSBhbiBlcnJvciBmb3IgZXh0cmEKKwkgICAgYXJndW1lbnRzIGFmdGVyICJidWZmPTEiLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jLCBzcmMvZXhfY21kcy5oCisKK1BhdGNoIDYuMi4zNTMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFN1cHBvcnRlZCBzZXJ2ZXIgbmFtZSBsZW5ndGggaXMgbGltaXRlZC4gKFBhdWwgQm9zc2kpCitTb2x1dGlvbjogICBVc2UgTUFYX1BBVEggaW5zdGVhZCBvZiAyNS4KK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4yLjM1NCAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiB0aGUgbW91c2UgcG9pbnRlciBpcyBvbiBhIHRlYXItb2ZmIG1lbnUgaXQgaXMgaGlkZGVuCisJICAgIHdoZW4gdHlwaW5nIGJ1dCBpcyBub3QgcmVkaXNwbGF5ZWQgd2hlbiBtb3ZlZC4gKE1hcmt4IEhhY2ttYW5uKQorU29sdXRpb246ICAgSGFuZGxlIHRoZSBwb2ludGVyIG1vdmUgZXZlbnQgZm9yIHRoZSB0ZWFyLW9mZiBtZW51IHdpbmRvdy4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYworCitQYXRjaCA2LjIuMzU1IChhZnRlciA2LjIuMzAzKQorUHJvYmxlbTogICAgV2hlbiAnZW5jb2RpbmcnIGlzIGEgZG91YmxlLWJ5dGUgZW5jb2RpbmcgZGlmZmVyZW50IGZyb20gdGhlCisJICAgIGN1cnJlbnQgbG9jYWxlLCB0aGUgd2lkdGggb2YgY2hhcmFjdGVycyBpcyBub3QgY29ycmVjdC4KKwkgICAgUG9zc2libGUgZmFpbHVyZSBhbmQgbWVtb3J5IGxlYWsgd2hlbiB1c2luZyBpY29udiwgVW5pY29kZQorCSAgICBkaWdyYXBocyBhbmQgJ2VuY29kaW5nJyBpcyBub3QgInV0Zi04Ii4KK1NvbHV0aW9uOiAgIFVzZSBpY29udigpIHRvIGRpc2NvdmVyIHRoZSBhY3R1YWwgd2lkdGggb2YgY2hhcmFjdGVycy4KKwkgICAgQWRkIHRoZSAidmNfZmFpbCIgZmllbGQgdG8gdmltY29udl9ULgorCSAgICBXaGVuIGNvbnZlcnRpbmcgYSBkaWdyYXBoLCBpbml0IHRoZSBjb252ZXJzaW9uIHR5cGUgdG8gTk9ORSBhbmQKKwkgICAgY2xlYW51cCBhZnRlcndhcmRzLgorRmlsZXM6CSAgICBzcmMvZGlncmFwaC5jLCBzcmMvbWJ5dGUuYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjIuMzU2CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgZG91YmxlLWJ5dGUgJ2VuY29kaW5nJyBhbmQgJ3NlbGVjdGlvbicgaXMKKwkgICAgImV4Y2x1c2l2ZSIsICJ2eSIgb25seSB5YW5rcyB0aGUgZmlyc3QgYnl0ZSBvZiBhIGRvdWJsZS1ieXRlCisJICAgIGNoYXJhY3Rlci4gIChYaWFuZ2ppYW5nIE1hKQorU29sdXRpb246ICAgQ29ycmVjdCB0aGUgY29sdW1uIGluIHVuYWRqdXN0X2Zvcl9zZWwoKSB0byBwb3NpdGlvbiBvbiB0aGUgZmlyc3QKKwkgICAgYnl0ZSwgYWx3YXlzIGluY2x1ZGUgdGhlIHRyYWlsaW5nIGJ5dGUgb2YgdGhlIHNlbGVjdGVkIHRleHQuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMzU3IChhZnRlciA2LjIuMzIxKQorUHJvYmxlbTogICAgTWVtb3J5IGxlYWsgd2hlbiByZXNpemluZyB0aGUgVmltIHdpbmRvdy4KK1NvbHV0aW9uOiAgIEZyZWUgdGhlIExpbmVXcmFwcyBhcnJheS4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMi4zNTggKGFmdGVyIDYuMi4yOTkpCitQcm9ibGVtOiAgICBNZW1vcnkgbGVhayB3aGVuIHVzaW5nICI6aGVscCIgYW5kIHRoZSBsYW5ndWFnZSBkb2Vzbid0IG1hdGNoLgorU29sdXRpb246ICAgRnJlZSB0aGUgYXJyYXkgd2l0aCBtYXRjaGluZyB0YWdzLgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi4zNTkgKGFmdGVyIDYuMi4zNTIpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5nIGZvciBsb25nIHRvIGludCB0eXBlIGNhc3QuCitTb2x1dGlvbjogICBBZGQgZXhwbGljaXQgdHlwZSBjYXN0LgorRmlsZXM6CSAgICBzcmMvZXhfY21kcy5jCisKK1BhdGNoIDYuMi4zNjAKK1Byb2JsZW06ICAgICIxMDB8IiBpbiBhbiBlbXB0eSBsaW5lIHJlc3VsdHMgaW4gYSBydWxlciAiMSwwLTEwMCIuIChQYXZvbAorCSAgICBKdWhhcykKK1NvbHV0aW9uOiAgIFJlY29tcHV0ZSB3X3ZpcnRjb2wgaWYgdGhlIHRhcmdldCBjb2x1bW4gd2FzIG5vdCByZWFjaGVkLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYworCitQYXRjaCA2LjIuMzYxIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBSdW4gZ3ZpbSwgIjpzZXQgZ28tPW0iLCB1c2UgQWx0LVRhYiwga2VlcCBBbHQgcHJlc3NlZCB3aGlsZQorCSAgICBwcmVzc2luZyBFc2MsIHRoZW4gcmVsZWFzZSBBbHQ6IEN1cnNvciBkaXNhcHBlYXJzIGFuZCB0eXBpbmcgYSBrZXkKKwkgICAgY2F1c2VzIGEgYmVlcC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgRG9uJ3QgaWdub3JlIHRoZSBXTV9TWVNLRVlVUCBldmVudCB3aGVuIHRoZSBtZW51IGlzIGRpc2FibGVkLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuMi4zNjIgKGV4dHJhLCBhZnRlciA2LjIuMzQ3KQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBtYW5pZmVzdCBjYXVzZXMgR3ZpbSBub3QgdG8gd29yay4gKERhdmUgUm9iZXJ0cykKK1NvbHV0aW9uOiAgIENoYW5nZSAieDg2IiB0byAiWDg2Ii4gKFNlcmdlIFBpcm90dGUpCitGaWxlczoJICAgIHNyYy9ndmltLmV4ZS5tbmYKKworUGF0Y2ggNi4yLjM2MworUHJvYmxlbTogICAgSW4gYW4gZW1wdHkgZmlsZSB3aXRoICdzaG93bW9kZScgb2ZmLCAiaSIgZG9lc24ndCBjaGFuZ2UgdGhlIHJ1bGVyCisJICAgIGZyb20gIjAtMSIgdG8gIjEiLiAgVHlwaW5nICJ4PEJTPiIgZG9lcyBzaG93ICIxIiwgYnV0IHRoZW4gPEVzYz4KKwkgICAgZG9lc24ndCBtYWtlIGl0ICIwLTEiIGFnYWluLiAgU2FtZSBwcm9ibGVtIGZvciBydWxlciBpbgorCSAgICBzdGF0dXNsaW5lLiAgKEFuZHJldyBQaW1sb3R0KQorU29sdXRpb246ICAgUmVtZW1iZXIgdGhlICJlbXB0eSBsaW5lIiBmbGFnIHdpdGggSW5zZXJ0IG1vZGUgYW5kJ2VkIHRvIGl0LgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4yLjM2NAorUHJvYmxlbTogICAgSFRNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgbWVudGlvbiB0aGUgZW5jb2RpbmcsCisJICAgIHdoaWNoIGlzIGEgcHJvYmxlbSBmb3IgbWJ5dGUudHh0LgorU29sdXRpb246ICAgQWRqdXN0IHRoZSBhd2sgc2NyaXB0LiAoSWx5YSBTaGVyKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9tYWtlaHRtbC5hd2sKKworUGF0Y2ggNi4yLjM2NQorUHJvYmxlbTogICAgVGhlIGNvbmZpZ3VyZSBjaGVja3MgZm9yIFBlcmwgYW5kIFB5dGhvbiBtYXkgYWRkIGNvbXBpbGUgYW5kIGxpbmsKKwkgICAgYXJndW1lbnRzIHRoYXQgYnJlYWsgYnVpbGRpbmcgVmltLgorU29sdXRpb246ICAgRG8gYSBzYW5pdHkgY2hlY2s6IHRyeSBidWlsZGluZyB3aXRoIHRoZSBhcmd1bWVudHMuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZ3VyZS5pbgorCitQYXRjaCA2LjIuMzY2CitQcm9ibGVtOiAgICBXaGVuIHRoZSBHVUkgY2FuJ3Qgc3RhcnQgYmVjYXVzZSBubyB2YWxpZCBmb250IGlzIGZvdW5kLCB0aGVyZSBpcworCSAgICBubyBlcnJvciBtZXNzYWdlLiAoVWdlbikKK1NvbHV0aW9uOiAgIEFkZCBhbiBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjM2NworUHJvYmxlbTogICAgQnVpbGRpbmcgdGhlIGhlbHAgdGFncyBmaWxlIHdoaWxlIGluc3RhbGxpbmcgbWF5IGZhaWwgaWYgdGhlcmUgaXMKKwkgICAgYW5vdGhlciBWaW0gaW4gJFBBVEguCitTb2x1dGlvbjogICBTcGVjaWZ5IHRoZSBqdXN0IGluc3RhbGxlZCBWaW0gZXhlY3V0YWJsZS4gKEdvcmRvbiBQcmlldXIpCitGaWxlczoJICAgIHNyYy9NYWtlZmlsZQorCitQYXRjaCA2LjIuMzY4CitQcm9ibGVtOiAgICBXaGVuICdhdXRvY2hkaXInIGlzIHNldCwgY2xvc2luZyBhIHdpbmRvdyBkb2Vzbid0IGNoYW5nZSB0byB0aGUKKwkgICAgZGlyZWN0b3J5IG9mIHRoZSBuZXcgY3VycmVudCB3aW5kb3cuIChTYWxtYW4gSGFsaW0pCitTb2x1dGlvbjogICBIYW5kbGUgJ2F1dG9jaGRpcicgYWx3YXlzIHdoZW4gYSB3aW5kb3cgYmVjb21lcyB0aGUgY3VycmVudCBvbmUuCitGaWxlczoJICAgIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjIuMzY5CitQcm9ibGVtOiAgICBWYXJpb3VzIG1lbW9yeSBsZWFrczogd2hlbiB1c2luZyBnbG9icGF0aCgpLCB3aGVuIHNlYXJjaGluZyBmb3IKKwkgICAgaGVscCB0YWdzIGZpbGVzLCB3aGVuIGRlZmluaW5nIGEgZnVuY3Rpb24gaW5zaWRlIGEgZnVuY3Rpb24sIHdoZW4KKwkgICAgZ2l2aW5nIGFuIGVycm9yIG1lc3NhZ2UgdGhyb3VnaCBhbiBleGNlcHRpb24sIGZvciB0aGUgZmluYWwgIi4iCisJICAgIGxpbmUgaW4gIjphcHBlbmQiLCBpbiBleHByZXNzaW9uICJjb25kID8gYSA6IGIiIHRoYXQgZmFpbHMgYW5kIGZvcgorCSAgICBtaXNzaW5nICIpIiBpbiBhbiBleHByZXNzaW9uLiAgVXNpbmcgTlVMTCBwb2ludGVyIHdoZW4gYWRkaW5nCisJICAgIGZpcnN0IHVzZXIgY29tbWFuZCBhbmQgZm9yIHBvaW50ZXIgY29tcHV0YXRpb25zIHdpdGggcmVnZXhwLgorCSAgICAodGVzdHMgYnkgRG9taW5pcXVlIFBlbGxlKQorU29sdXRpb246ICAgRml4IHRoZSBsZWFrcyBieSBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiAgRG9uJ3QgdXNlIHRoZQorCSAgICBhcnJheSBvZiB1c2VyIGNvbW1hbmRzIHdoZW4gdGhlcmUgYXJlIG5vIGVudHJpZXMuICBVc2UgYSBtYWNybworCSAgICBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gY2FsbCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgcmVnZXhwIHN0YXRlcy4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2NtZHMuYywgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9nZXRsbi5jLAorCSAgICBzcmMvbWlzYzIuYywgc3JjL3JlZ2V4cC5jLCBzcmMvc2NyZWVuLmMsIHNyYy90YWcuYworCitQYXRjaCA2LjIuMzcwIChleHRyYSwgYWZ0ZXI2LjIuMzQxKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gdGhlIHBhdGggdG8gZGlmZi5leGUgY29udGFpbnMgYSBzcGFjZSBhbmQgdXNpbmcgdGhlCisJICAgIHZpbXJjIGdlbmVyYXRlZCBieSB0aGUgaW5zdGFsbCBwcm9ncmFtLCBkaWZmIG1vZGUgbWF5IG5vdCB3b3JrLgorCSAgICAoQWxlamFuZHJvIExvcGV6LVZhbGVuY2lhKQorU29sdXRpb246ICAgRG8gbm90IHVzZSBkb3VibGUgcXVvdGVzIGZvciBhcmd1bWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIHNwYWNlLgorRmlsZXM6CSAgICBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDYuMi4zNzEKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgYW5kIHRoZXJlIGlzIGEgVGFiIGJlZm9yZSB0aGUgbmV4dCAieCIsCisJICAgICJkdHgiIGRvZXMgbm90IGRlbGV0ZSB0aGUgd2hvbGUgVGFiLiAoS2VuIEhhc2hpc2hpKQorU29sdXRpb246ICAgTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBUYWIuICBBbHNvIGZvcgorCSAgICAiZGY8VGFiPiIuCitGaWxlczoJICAgIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuMzcyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGJhbGxvb24gZXZhbHVhdGlvbiwgbm8gdmFsdWUgaXMgZGlzcGxheWVkIGZvciBtZW1iZXJzCisJICAgIG9mIHN0cnVjdHVyZXMgYW5kIGl0ZW1zIG9mIGFuIGFycmF5LgorU29sdXRpb246ICAgSW5jbHVkZSAiLT4iLCAiLiIgYW5kICJbKl0iIGluIHRoZSBleHByZXNzaW9uLgorRmlsZXM6CSAgICBzcmMvZ3VpX2JldmFsLmMsIHNyYy9ub3JtYWwuYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi4zNzMKK1Byb2JsZW06ICAgIFdoZW4gJ3dpbm1pbmhlaWdodCcgaXMgemVybyBhbmQgYSB3aW5kb3cgaXMgcmVkdWNlZCB0byB6ZXJvCisJICAgIGhlaWdodCwgdGhlIHJ1bGVyIGFsd2F5cyBzYXlzICJUb3AiIGluc3RlYWQgb2YgdGhlIGN1cnNvcgorCSAgICBwb3NpdGlvbi4gKEFudG9pbmUgSi4gTWVjaGVseW5jaykKK1NvbHV0aW9uOiAgIERvbid0IHJlY29tcHV0ZSB3X3RvcGxpbmUgZm9yIGEgemVyby1oZWlnaHQgd2luZG93LgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4yLjM3NAorUHJvYmxlbTogICAgIjplY2hvICJoZWxsbyIgfCBzaWxlbnQgbm9ybWFsIG4iIHJlbW92ZXMgdGhlICJoZWxsbyIgbWVzc2FnZS4KKwkgICAgKFNlcnZhdGl1cyBCcmFuZHQpCitTb2x1dGlvbjogICBEb24ndCBlY2hvIHRoZSBzZWFyY2ggc3RyaW5nIHdoZW4gIjpzaWxlbnQiIHdhcyB1c2VkLiAgQWxzbyBkb24ndAorCSAgICBzaG93IHRoZSBtb2RlLiAgSW4gZ2VuZXJhbDogZG9uJ3QgY2xlYXIgdG8gdGhlIGVuZCBvZiB0aGUgc2NyZWVuLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMsIHNyYy9tZXNzYWdlLmMsIHNyYy9vc191bml4LmMsIHNyYy9wcm90by9tZXNzYWdlLnBybywKKwkgICAgc3JjL3NjcmVlbi5jLCBzcmMvc2VhcmNoLmMsIHNyYy93aW5kb3cuYworCitQYXRjaCA2LjIuMzc1CitQcm9ibGVtOiAgICBXaGVuIGNoYW5naW5nICdndWlvcHRpb25zJyB0aGUgaGl0LWVudGVyIHByb21wdCBtYXkgYmUgYmVsb3cgdGhlCisJICAgIGVuZCBvZiB0aGUgVmltIHdpbmRvdy4KK1NvbHV0aW9uOiAgIENhbGwgc2NyZWVuX2FsbG9jKCkgYmVmb3JlIHNob3dpbmcgdGhlIHByb21wdC4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjIuMzc2CitQcm9ibGVtOiAgICBXaW4zMjogUnVieSBpbnRlcmZhY2UgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGxpbmtlZCB3aXRoIFJ1YnkgMS42LgorU29sdXRpb246ICAgQWRkICNpZmRlZnMgYXJvdW5kIHVzZSBvZiByYl93MzJfc25wcmludGYoKS4gIChCZW5v7nQgQ2VycmluYSkKK0ZpbGVzOgkgICAgc3JjL2lmX3J1YnkuYworCitQYXRjaCA2LjIuMzc3IChhZnRlciA2LjIuMzcyKQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZ3MgZm9yIHNpZ25lZC91bnNpZ25lZCBjb21wYXJlLiAoTWljaGFlbCBXb29rZXkpCitTb2x1dGlvbjogICBBZGQgdHlwZSBjYXN0LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjM3OCAoZXh0cmEsIGFmdGVyIDYuMi4xMTgpCitQcm9ibGVtOiAgICBNYWM6IGNhbm5vdCBidWlsZCB3aXRoIFByb2plY3QgQnVpbGRlci4KK1NvbHV0aW9uOiAgIEFkZCByZW1vdmVfdGFpbF93aXRoX2V4dCgpIHRvIGxvY2F0ZSBhbmQgcmVtb3ZlIHRoZSAiYnVpbGQiCisJICAgIGRpcmVjdG9yeSBmcm9tIHRoZSBydW50aW1lIHBhdGguICBJbmNsdWRlIG9zX3VuaXguYyB3aGVuIG5lZWRlZC4KKwkgICAgKERhbnkgU3QgQW1hbnQpCitGaWxlczoJICAgIHNyYy9taXNjMS5jLCBzcmMvb3NfbWFjb3N4LmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuMzc5CitQcm9ibGVtOiAgICBVc2luZyAiOm1rdmltcmMiIGluIHRoZSAiOm9wdGlvbnMiIHdpbmRvdyBzZXRzICdidWZoaWRkZW4nIHRvCisJICAgICJkZWxldGUiLiAoTWljaGFlbCBOYXVtYW5uKQorU29sdXRpb246ICAgRG8gbm90IGFkZCBidWZmZXItc3BlY2lmaWMgb3B0aW9uIHZhbHVlcyB0byBhIGdsb2JhbCB2aW1yYyBmaWxlLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjM4MCAoZXh0cmEpCitQcm9ibGVtOiAgICBET1M6ICJtYWtlIHRlc3QiIGZhaWxzIHdoZW4gcnVubmluZyBpdCBhZ2Fpbi4gIENhbid0ICJtYWtlIHRlc3QiCisJICAgIHdpdGggQm9ybGFuZCBDLgorU29sdXRpb246ICAgTWFrZSBzdXJlICIub3V0IiBmaWxlcyBhcmUgZGVsZXRlZCB3aGVuIHRoZXkgZ2V0IGluIHRoZSB3YXkuICBBZGQKKwkgICAgYSAidGVzdCIgdGFyZ2V0IHRvIHRoZSBCb3JsYW5kIEMgTWFrZWZpbGUuCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWssIHNyYy90ZXN0ZGlyL01ha2VfZG9zLm1haworCitQYXRjaCA2LjIuMzgxCitQcm9ibGVtOiAgICBTZXR0aW5nICdmaWxlZW5jb2RpbmcnIHRvIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QgKGNvbmZ1c2luZyBpdAorCSAgICB3aXRoICdmaWxlZW5jb2RpbmdzJykgZG9lcyBub3QgcmVzdWx0IGluIGFuIGVycm9yIG1lc3NhZ2UuCisJICAgIFNldHRpbmcgJ2ZpbGVlbmNvZGluZycgaW4gYW4gZW1wdHkgZmlsZSBtYXJrcyBpdCBhcyBtb2RpZmllZC4KKwkgICAgVGhlcmUgaXMgbm8gIisiIGluIHRoZSB0aXRsZSBhZnRlciBzZXR0aW5nICdmaWxlZW5jb2RpbmcnLgorU29sdXRpb246ICAgQ2hlY2sgZm9yIGEgY29tbWEgaW4gJ2ZpbGVlbmNvZGluZycuICBPbmx5IGNvbnNpZGVyIGEgbm9uLWVtcHR5CisJICAgIGZpbGUgbW9kaWZpZWQgYnkgY2hhbmdpbmcgJ2ZpbGVlbmNvZGluZycuICBVcGRhdGUgdGhlIHRpdGxlIGFmdGVyCisJICAgIGNoYW5naW5nICdmaWxlZW5jb2RpbmcnLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjM4MgorUHJvYmxlbTogICAgUnVubmluZyAibWFrZSB0ZXN0IiBwdXRzIG1hcmtzIGZyb20gdGVzdCBmaWxlcyBpbiB2aW1pbmZvLgorU29sdXRpb246ICAgU3BlY2lmeSBhIGRpZmZlcmVudCB2aW1pbmZvIGZpbGUgdG8gdXNlLgorRmlsZXM6CSAgICBzcmMvdGVzdGRpci90ZXN0MTUuaW4sIHNyYy90ZXN0ZGlyL3Rlc3Q0OS5pbgorCitQYXRjaCA2LjIuMzgzCitQcm9ibGVtOiAgICAiOmhpIGZvbyB0ZXJtPSdibGEiIGNyYXNoZXMgVmltLiAoQW50b255IFNjcml2ZW4pCitTb2x1dGlvbjogICBDaGVjayB0aGF0IHRoZSBjbG9zaW5nICcgaXMgdGhlcmUuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjIuMzg0CitQcm9ibGVtOiAgICAiOm1lbnUgYS4mYiIgIjp1bm1lbnUgYS5iIiBvbmx5IHdvcmtzIGlmICImYiIgaXNuJ3QgdHJhbnNsYXRlZC4KK1NvbHV0aW9uOiAgIEFsc28gY29tcGFyZSB0aGUgbmFtZXMgd2l0aG91dCAnJicgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL21lbnUuYworCitQYXRjaCA2LjIuMzg1ICAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogZm9yd2FyZF9zbGFzaCgpIGFuZCB0cmFzaF9pbnB1dF9idWYoKSBhcmUgdW5kZWZpbmVkIHdoZW4KKwkgICAgY29tcGlsaW5nIHdpdGggc21hbGwgZmVhdHVyZXMuIChBaml0IFRoYWtrYXIpCitTb2x1dGlvbjogICBDaGFuZ2UgdGhlICNpZmRlZnMgZm9yIGZvcndhcmRfc2xhc2goKS4gIERvbid0IGNhbGwKKwkgICAgdHJhc2hfaW5wdXRfYnVmKCkgaWYgdGhlIGlucHV0IGJ1ZmZlciBpc24ndCB1c2VkLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuMi4zODYKK1Byb2JsZW06ICAgIFdhc3RpbmcgdGltZSB0cnlpbmcgdG8gcmVhZCBtYXJrcyBmcm9tIHRoZSB2aW1pbmZvIGZpbGUgZm9yIGEKKwkgICAgYnVmZmVyIHdpdGhvdXQgYSBuYW1lLgorU29sdXRpb246ICAgU2tpcCByZWFkaW5nIG1hcmtzIHdoZW4gdGhlIGJ1ZmZlciBoYXMgbm8gbmFtZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi4zODcKK1Byb2JsZW06ICAgIFRoZXJlIGlzIG5vIGhpZ2hsaWdodGluZyBvZiB0cmFuc2xhdGVkIGl0ZW1zIGluIGhlbHAgZmlsZXMuCitTb2x1dGlvbjogICBTZWFyY2ggZm9yIGEgImhlbHBfYWIudmltIiBzeW50YXggZmlsZSB3aGVuIHRoZSBoZWxwIGZpbGUgaXMKKwkgICAgY2FsbGVkICIqLmFieCIuICBBbHNvIGltcHJvdmUgdGhlIGhlbHAgaGlnaGxpZ2h0aW5nIGEgYml0LgorRmlsZXM6CSAgICBydW50aW1lL3N5bnRheC9oZWxwLnZpbQorCitQYXRjaCA2LjIuMzg4CitQcm9ibGVtOiAgICBHVEs6IFdoZW4gZGlzcGxheWluZyBzb21lIGRvdWJsZS13aWR0aCBjaGFyYWN0ZXJzIHRoZXkgYXJlIGRyYXduCisJICAgIGFzIHNpbmdsZS13aWR0aCwgYmVjYXVzZSBvZiBjb252ZXJzaW9uIHRvIFVURi04LgorU29sdXRpb246ICAgQ2hlY2sgdGhlIHdpZHRoIHRoYXQgR1RLIHVzZXMgYW5kIGFkZCBhIHNwYWNlIGlmIGl0J3Mgb25lIGluc3RlYWQKKwkgICAgb2YgdHdvLgorRmlsZXM6CSAgICBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjIuMzg5CitQcm9ibGVtOiAgICBXaGVuIHdvcmtpbmcgb3ZlciBhIHNsb3cgY29ubmVjdGlvbiwgaXQncyB2ZXJ5IGFubm95aW5nIHRoYXQgdGhlCisJICAgIGxhc3QgbGluZSBpcyBwYXJ0bHkgZHJhd24gYW5kIHRoZW4gY2xlYXJlZCBmb3IgZXZlcnkgY2hhbmdlLgorU29sdXRpb246ICAgRG9uJ3QgcmVkcmF3IHRoZSBib3R0b20gbGluZSBpZiBubyByb3dzIHdlcmUgaW5zZXJ0ZWQgb3IgZGVsZXRlZC4KKwkgICAgRG9uJ3QgZHJhdyB0aGUgbGluZSBpZiB3ZSBrbm93ICJAIiBsaW5lcyB3aWxsIGJlIHVzZWQuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuMzkwCitQcm9ibGVtOiAgICBVc2luZyAicioiIGluIFZpc3VhbCBtb2RlIG9uIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBvbmx5IHJlcGxhY2VzCisJICAgIGV2ZXJ5IG90aGVyIGNoYXJhY3Rlci4gKFR5c29uIFJvYmVydHMpCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIgcmVwbGFjaW5nIGVhY2ggY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4yLjM5MSAoZXh0cmEpCitQcm9ibGVtOiAgICBUaGUgIjpoaWdobGlnaHQiIGNvbW1hbmQgaXMgbm90IHRlc3RlZC4KK1NvbHV0aW9uOiAgIEFkZCBhIHRlc3Qgc2NyaXB0IGZvciAiOmhpZ2hsaWdodCIuCitGaWxlczoJICAgIHNyYy90ZXN0ZGlyL01ha2VmaWxlLCBzcmMvdGVzdGRpci9NYWtlX2FtaWdhLm1haywKKwkgICAgc3JjL3Rlc3RkaXIvTWFrZV9kb3MubWFrLCBzcmMvdGVzdGRpci9NYWtlX29zMi5tYWssCisJICAgIHNyYy90ZXN0ZGlyL01ha2Vfdm1zLm1tcywgc3JjL3Rlc3RkaXIvdGVzdDUxLmluLAorCSAgICBzcmMvdGVzdGRpci90ZXN0NTEub2sKKworUGF0Y2ggNi4yLjM5MiAoYWZ0ZXIgNi4yLjM4NCkKK1Byb2JsZW06ICAgIFVudXNlZCB2YXJpYWJsZS4KK1NvbHV0aW9uOiAgIFJlbW92ZSAiZGxlbiIuCitGaWxlczoJICAgIHNyYy9tZW51LmMKKworUGF0Y2ggNi4yLjM5MworUHJvYmxlbTogICAgV2hlbiB1c2luZyB2ZXJ5IGxvbmcgbGluZXMgdGhlIHZpbWluZm8gZmlsZSBjYW4gYmVjb21lIHZlcnkgYmlnLgorU29sdXRpb246ICAgQWRkIHRoZSAicyIgZmxhZyB0byAndmltaW5mbyc6IHNraXAgcmVnaXN0ZXJzIHdpdGggbW9yZSB0aGFuIHRoZQorCSAgICBzcGVjaWZpZWQgS2J5dGUgb2YgdGV4dC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9vcHMuYywgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuMi4zOTQgIChhZnRlciA2LjIuMzkxKQorUHJvYmxlbTogICAgVGVzdCA1MSBmYWlscyBvbiBhIHRlcm1pbmFsIHdpdGggOCBjb2xvcnMuIChUb255IExlbmVpcykKK1NvbHV0aW9uOiAgIFVzZSAiRGFya0JsdWUiIGluc3RlYWQgb2YgIkJsdWUiIHRvIGF2b2lkIHRoZSAiYm9sZCIgYXR0cmlidXRlLgorRmlsZXM6CSAgICBzcmMvdGVzdGRpci90ZXN0NTEuaW4KKworUGF0Y2ggNi4yLjM5NQorUHJvYmxlbTogICAgV2hlbiB1c2luZyAiOnRhZyIgb3IgIjpwb3AiIHRoZSBwcmV2aW91cyBtYXRjaGluZyB0YWcgaXMgdXNlZC4KKwkgICAgQnV0IHNpbmNlIHRoZSBjdXJyZW50IGZpbGUgaXMgZGlmZmVyZW50LCB0aGUgb3JkZXJpbmcgb2YgdGhlIHRhZ3MKKwkgICAgbWF5IGNoYW5nZS4KK1NvbHV0aW9uOiAgIFJlbWVtYmVyIHdoYXQgdGhlIGN1cnJlbnQgYnVmZmVyIHdhcyBmb3Igd2hlbiByZS11c2luZyBjdXJfbWF0Y2guCitGaWxlczoJICAgIHNyYy9lZGl0LmMsIHNyYy9leF9jbWRzLmMsIHNyYy9wcm90by90YWcucHJvLCBzcmMvc3RydWN0cy5oLAorCSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjM5NgorUHJvYmxlbTogICAgV2hlbiBDVFJMLVQganVtcHMgdG8gYW5vdGhlciBmaWxlIGFuZCBhbiBhdXRvY29tbWFuZCBtb3ZlcyB0aGUKKwkgICAgY3Vyc29yIHRvIHRoZSAnIiBtYXJrLCBkb24ndCBlbmQgdXAgb24gdGhlIHJpZ2h0IGxpbmUuICAoTWljaGFsCisJICAgIE1hbGVja2kpCitTb2x1dGlvbjogICBTZXQgdGhlIGxpbmUgbnVtYmVyIGFmdGVyIGxvYWRpbmcgdGhlIGZpbGUuCitGaWxlczoJICAgIHNyYy90YWcuYworCitQYXRjaCA2LjIuMzk3CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgZG91YmxlLWJ5dGUgJ2VuY29kaW5nJyBtYXBwaW5nIDxNLXg+IGRvZXNuJ3Qgd29yay4KKwkgICAgKFlhc3VoaXJvIE1hdHN1bW90bykKK1NvbHV0aW9uOiAgIERvIG5vdCBzZXQgdGhlIDh0aCBiaXQgb2YgdGhlIGNoYXJhY3RlciBidXQgdXNlIGEgbW9kaWZpZXIuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvZ3VpX3gxMS5jLCBzcmMvbWlzYzIuYworCitQYXRjaCA2LjIuMzk4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyIGNvbnNvbGU6IG5vIGV4dHJhIGtleSBtb2RpZmllcnMgYXJlIHN1cHBvcnRlZC4KK1NvbHV0aW9uOiAgIEVuY29kZSB0aGUgbW9kaWZpZXJzIGludG8gdGhlIGlucHV0IHN0cmVhbS4gIEFsc28gZml4IHRoYXQgc3BlY2lhbAorCSAgICBrZXlzIGFyZSBjb252ZXJ0ZWQgYW5kIHN0b3Agd29ya2luZyB3aGVuICd0ZW5jJyBpcyBzZXQuICBBbHNvIGZpeAorCSAgICB0aGF0IHdoZW4gJ3RlbmMnIGlzIGludGlhbGl6ZWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgY29udmVyc2lvbiBpcworCSAgICBub3Qgc2V0dXAgcHJvcGVybHkgdW50aWwgJ2VuYycgb3IgJ3RlbmMnIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL2dldGNoYXIuYywgc3JjL29wdGlvbi5jLCBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuMzk5CitQcm9ibGVtOiAgICBBICI6c2V0IiBjb21tYW5kIHRoYXQgZmFpbHMgc3RpbGwgd3JpdGVzIGEgbWVzc2FnZSB3aGVuIGl0IGlzCisJICAgIGluc2lkZSBhIHRyeS9jYXRjaCBibG9jay4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgYWxsIHRoZSB0ZXh0IG9mIHRoZSBtZXNzYWdlIGluIHRoZSBlcnJvciBtZXNzYWdlLgorRmlsZXM6CSAgICBzcmMvY2hhcnNldC5jLCBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjQwMAorUHJvYmxlbTogICAgQ2FuJ3QgY29tcGlsZSBpZl94Y21kc3J2LmMgb24gSFAtVVggMTEuMC4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgaGVhZGVyIGZpbGUgcG9sbC5oLiAoTWFsdGUgTmV1bWFubikKK0ZpbGVzOgkgICAgc3JjL2lmX3hjbWRzcnYuYworCitQYXRjaCA2LjIuNDAxCitQcm9ibGVtOiAgICBXaGVuIG9wZW5pbmcgYSBidWZmZXIgdGhhdCB3YXMgcHJldmlvdXNseSBvcGVuZWQsIFZpbSBkb2VzIG5vdAorCSAgICByZXN0b3JlIHRoZSBjdXJzb3IgcG9zaXRpb24gaWYgdGhlIGZpcnN0IGxpbmUgc3RhcnRzIHdpdGggd2hpdGUKKwkgICAgc3BhY2UuICAoR3JlZ29yeSBNYXJnbykKK1NvbHV0aW9uOiAgIERvbid0IHNraXAgcmVzdG9yaW5nIHRoZSBjdXJzb3IgcG9zaXRpb24gaWYgaXQgaXMgcGFzdCB0aGUgYmxhbmtzCisJICAgIGluIHRoZSBmaXJzdCBsaW5lLgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMKKworUGF0Y2ggNi4yLjQwMgorUHJvYmxlbTogICAgTWFjOiAibWFrZSBpbnN0YWxsIiBkb2Vzbid0IGdlbmVyYXRlIGhlbHAgdGFncy4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIEdlbmVyYXRlIGhlbHAgdGFncyBiZWZvcmUgY29weWluZyB0aGUgcnVudGltZSBmaWxlcy4KK0ZpbGVzOgkgICAgc3JjL01ha2VmaWxlCisKK1BhdGNoIDYuMi40MDMKK1Byb2JsZW06ICAgICI6QHkiIGNoZWNrcyBzdGRpbiBpZiB0aGVyZSBhcmUgbW9yZSBjb21tYW5kcyB0byBleGVjdXRlLiAgVGhpcworCSAgICBmYWlscyBpZiBzdGRpbiBpcyBub3QgY29ubmVjdGVkLCBlLmcuLCB3aGVuIHN0YXJ0aW5nIHRoZSBHVUkgZnJvbQorCSAgICBLREUuIChOZWQgS29ueikKK1NvbHV0aW9uOiAgIE9ubHkgY2hlY2sgZm9yIGEgbmV4dCBjb21tYW5kIGlmIHRoZXJlIHN0aWxsIGlzIHR5cGVhaGVhZC4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMKKworUGF0Y2ggNi4yLjQwNAorUHJvYmxlbTogICAgT3VyIG93biBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2lkdGggb2YgVW5pY29kZSBjaGFyYWN0ZXJzIG1heSBnZXQKKwkgICAgb3V0ZGF0ZWQuIChNYXJrdXMgS3VobikKK1NvbHV0aW9uOiAgIFVzZSB3Y3dpZHRoKCkgd2hlbiBpdCBpcyBhdmFpbGFibGUuICBBbHNvIHVzZSBpc3dwcmludCgpLgorRmlsZXM6CSAgICBzcmMvYXV0by9jb25maWd1cmUsIHNyYy9jb25maWd1cmUuaW4sIHNyYy9jb25maWcuaC5pbiwgc3JjL21ieXRlLmMKKworUGF0Y2ggNi4yLjQwNQorUHJvYmxlbTogICAgQ2Fubm90IG1hcCB6ZXJvIHdpdGhvdXQgYnJlYWtpbmcgdGhlIGNvdW50IGJlZm9yZSBhIGNvbW1hbmQuCisJICAgIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBEaXNhYmxlIG1hcHBpbmcgemVybyB3aGVuIGVudGVyaW5nIGEgY291bnQuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9ub3JtYWwuYworCitQYXRjaCA2LjIuNDA2CitQcm9ibGVtOiAgICAiOmhlbHAgXHpzIiwgIjpoZWxwIFxAPSIgYW5kIHNpbWlsYXIgZG9uJ3QgZmluZCB1c2VmdWwgaGVscC4KK1NvbHV0aW9uOiAgIFByZXBlbmQgIi9cIiB0byB0aGUgYXJndW1lbnRzIHRvIGZpbmQgdGhlIGRlc2lyZWQgaGVscCB0YWcuCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMKKworUGF0Y2ggNi4yLjQwNyAoYWZ0ZXIgNi4yLjI5OSkKK1Byb2JsZW06ICAgICI6aGVscCBcQDw9IiBkb2Vzbid0IGZpbmQgaGVscC4KK1NvbHV0aW9uOiAgIEF2b2lkIHRoYXQgIjpoZWxwIFxAPD0iIHNlYXJjaGVzIGZvciB0aGUgIjw9IiBsYW5ndWFnZS4KK0ZpbGVzOgkgICAgc3JjL3RhZy5jCisKK1BhdGNoIDYuMi40MDgKK1Byb2JsZW06ICAgICI6Y29tcGlsZXIiIGlzIG5vdCBjb25zaXN0ZW50OiBTZXRzIGxvY2FsIG9wdGlvbnMgYW5kIGEgZ2xvYmFsCisJICAgIHZhcmlhYmxlLiAoRG91Z2xhcyBQb3R0cykgIFRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2Ugd2hlbiBhCisJICAgIGNvbXBpbGVyIGlzIG5vdCBzdXBwb3J0ZWQuCitTb2x1dGlvbjogICBVc2UgIjpjb21waWxlciEiIHRvIHNldCBhIGNvbXBpbGVyIGdsb2JhbGx5LCBvdGhlcndpc2UgaXQncyBsb2NhbAorCSAgICB0byB0aGUgYnVmZmVyIGFuZCAiYjpjdXJyZW50X2NvbXBpbGVyIiBpcyB1c2VkLiAgR2l2ZSBhbiBlcnJvcgorCSAgICB3aGVuIG5vIGNvbXBpbGVyIHNjcmlwdCBjb3VsZCBiZSBmb3VuZC4KKwkgICAgTm90ZTogdXBkYXRlZCBjb21waWxlciBwbHVnaW5zIGNhbiBiZSBmb3VuZCBhdAorCSAgICBmdHA6Ly9mdHAudmltLm9yZy9wdWIvdmltL3J1bnRpbWUvY29tcGlsZXIvCitGaWxlczoJICAgIHJ1bnRpbWUvY29tcGlsZXIvbXN2Yy52aW0sIHJ1bnRpbWUvZG9jL3F1aWNrZml4LnR4dCwgc3JjL2V2YWwuYywKKwkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4yLjQwOQorUHJvYmxlbTogICAgVGhlIGN1cnNvciBlbmRzIHVwIGluIHRoZSBsYXN0IGNvbHVtbiBpbnN0ZWFkIG9mIGFmdGVyIHRoZSBsaW5lCisJICAgIHdoZW4gZG9pbmcgImkvLzxFc2M+byIgd2l0aCAnaW5kZW50ZXhwcicgc2V0IHRvICJjaW5kZW50KHY6bG51bSkiLgorCSAgICAoVG9ieSBBbGxzb3BwKQorU29sdXRpb246ICAgQWRqdXN0IHRoZSBjdXJzb3IgYXMgaWYgaW4gSW5zZXJ0IG1vZGUuCitGaWxlczoJICAgIHNyYy9taXNjMS5jCisKK1BhdGNoIDYuMi40MTAgKGFmdGVyIDYuMi4zODkpCitQcm9ibGVtOiAgICBJbiBkaWZmIG1vZGUsIHdoZW4gdGhlcmUgYXJlIG1vcmUgZmlsbGVyIGxpbmVzIHRoYW4gZml0IGluIHRoZQorCSAgICB3aW5kb3csIHRoZXkgYXJlIG5vdCBkcmF3bi4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBmaWxsZXIgbGluZXMgd2hlbiBza2lwcGluZyB0byBkcmF3IGEgbGluZSB0aGF0IGRvZXNuJ3QKKwkgICAgZml0LgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4yLjQxMQorUHJvYmxlbTogICAgQSAiXG4iIGluc2lkZSBhIHN0cmluZyBpcyBub3Qgc2VlbiBhcyBhIGxpbmUgYnJlYWsgYnkgdGhlIHJlZ3VsYXIKKwkgICAgZXhwcmVzc2lvbiBtYXRjaGluZy4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgQWRkIHRoZSB2aW1fcmVnZXhlY19ubCgpIGZ1bmN0aW9uIGZvciBzdHJpbmdzIHdoZXJlICJcbiIgaXMgdG8gYmUKKwkgICAgbWF0Y2hlZCB3aXRoIGEgbGluZSBicmVhay4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYywgc3JjL2V4X2V2YWwuYywgc3JjL3Byb3RvL3JlZ2V4cC5jLCBzcmMvcmVnZXhwLmMKKworUGF0Y2ggNi4yLjQxMgorUHJvYmxlbTogICAgUnVieTogInJ1YnkgPDwgRU9GIiBpbnNpZGUgYSBmdW5jdGlvbiBkb2Vzbid0IGFsd2F5cyB3b3JrLiAgQWxzbworCSAgICBmb3IgIjpweXRob24iLCAiOnRjbCIgYW5kICI6cGVybCIuCitTb2x1dGlvbjogICBDaGVjayBmb3IgIjw8IG1hcmtlciIgYW5kIHNraXAgdW50aWwgIm1hcmtlciIgYmVmb3JlIGNoZWNraW5nIGZvcgorCSAgICAiZW5kZnVuY3Rpb24iLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi40MTMgKGFmdGVyIDYuMi40MTEpCitQcm9ibGVtOiAgICBNaXNzaW5nIHByb3RvdHlwZSBmb3IgdmltX3JlZ2V4ZWNfbmwoKS4gKE1hcmNlbCBTdml0YWxza3kpCitTb2x1dGlvbjogICBOb3cgcmVhbGx5IGluY2x1ZGUgdGhlIHByb3RvdHlwZS4KK0ZpbGVzOgkgICAgc3JjL3Byb3RvL3JlZ2V4cC5wcm8KKworUGF0Y2ggNi4yLjQxNAorUHJvYmxlbTogICAgVGhlIGZ1bmN0aW9uIHVzZWQgZm9yIGN1c3RvbSBjb21wbGV0aW9uIG9mIHVzZXIgY29tbWFuZHMgY2Fubm90CisJICAgIGhhdmUgPFNJRD4gdG8gbWFrZSBpdCBsb2NhbC4gKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgUGFzcyB0aGUgU0lEIG9mIHRoZSBzY3JpcHQgd2hlcmUgdGhlIHVzZXIgY29tbWFuZCB3YXMgZGVmaW5lZCBvbgorCSAgICB0byB0aGUgY29tcGxldGlvbi4gIEFsc28gY2xlYW4gdXAgI2lmZGVmcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9ldmFsLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvc3RydWN0cy5oCisKK1BhdGNoIDYuMi40MTUKK1Byb2JsZW06ICAgIFZpbSBtYXkgY3Jhc2ggYWZ0ZXIgYSBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBjaGFuZ2UgdGhlIHdpbmRvdworCSAgICBzaXplLiAgVGhlIHdpbmRvdyBsYXlvdXQgYXNzdW1lcyBhIGxhcmdlciB3aW5kb3cgdGhhbiBpcyBhY3R1YWxseQorCSAgICBhdmFpbGFibGUuIChTZXJ2YXRpdXMgQnJhbmR0KQorU29sdXRpb246ICAgSW52b2tlIHdpbl9uZXdfc2hlbGxzaXplKCkgZnJvbSBzY3JlZW5hbGxvYygpIGluc3RlYWQgb2YgZnJvbQorCSAgICBzZXRfc2hlbGxzaXplKCkuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYywgc3JjL3Rlcm0uYworCitQYXRjaCA2LjIuNDE2CitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5nIGZvciBpbmNvbXBhdGlibGUgcG9pbnRlci4KK1NvbHV0aW9uOiAgIFJlbW92ZSB0aGUgIiYiIGluIHRoZSBjYWxsIHRvIHBvbGwoKS4gKFhhdmllciBkZSBHYXllKQorRmlsZXM6CSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi40MTcgKGFmdGVyIDYuMi4zOTMpCitQcm9ibGVtOiAgICBNYW55IHBlb3BsZSBmb3JnZXQgdGhhdCB0aGUgJyInIGl0ZW0gaW4gJ3ZpbWluZm8nIG5lZWRzIHRvIGJlCisJICAgIHByZWNlZGVkIHdpdGggYSBiYWNrc2xhc2gsCitTb2x1dGlvbjogICBBZGQgJzwnIGFzIGFuIGFsaWFzIGZvciB0aGUgJyInIGl0ZW0uCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0LCBzcmMvb3BzLmMsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuNDE4CitQcm9ibGVtOiAgICBVc2luZyAiOm5ub3JlbWFwIDxGMTI+IDplY2hvICJjaGVlc2UiIGFuZCAiOmNhYmJyIGNoZWVzZSB4eHgiOgorCSAgICB3aGVuIHByZXNzaW5nIDxGMTI+IHN0aWxsIHVzZXMgdGhlIGFiYnJldmlhdGlvbi4gKEhhcmkgS3Jpc2huYSkKK1NvbHV0aW9uOiAgIEFsc28gYXBwbHkgIm5vcmVtYXAiIHRvIGFiYnJldmlhdGlvbnMuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNi4yLjQxOSAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogQ2Fubm90IG9wZW4gdGhlIFZpbSB3aW5kb3cgaW5zaWRlIGFub3RoZXIgYXBwbGljYXRpb24uCitTb2x1dGlvbjogICBBZGQgdGhlICItUCIgYXJndW1lbnQgdG8gc3BlY2lmeSB0aGUgd2luZG93IHRpdGxlIG9mIHRoZQorCSAgICBhcHBsaWNhdGlvbiB0byBydW4gaW5zaWRlLiAoWmlibyBaaGFvKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9zdGFydGluZy50eHQsIHNyYy9tYWluLmMsIHNyYy9ndWlfdzMyLmMsCisJICAgIHNyYy9ndWlfdzQ4LmMsIHNyYy9pZl9vbGUuY3BwLCBzcmMvb3NfbXN3aW4uYywKKwkgICAgc3JjL3Byb3RvL2d1aV93MzIucHJvCisKK1BhdGNoIDYuMi40MjAKK1Byb2JsZW06ICAgIENhbm5vdCBzcGVjaWZ5IGEgZmlsZSB0byBiZSBlZGl0ZWQgaW4gYmluYXJ5IG1vZGUgd2l0aG91dCBzZXR0aW5nCisJICAgIHRoZSBnbG9iYWwgdmFsdWUgb2YgdGhlICdiaW5hcnknIG9wdGlvbi4KK1NvbHV0aW9uOiAgIFN1cHBvcnQgIjplZGl0ICsrYmluIGZpbGUiLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9lZGl0aW5nLnR4dCwgc3JjL2J1ZmZlci5jLCBzcmMvZXZhbC5jLCBzcmMvZXhfY21kcy5oLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2ZpbGVpby5jLCBzcmMvbWlzYzIuYworCitQYXRjaCA2LjIuNDIxCitQcm9ibGVtOiAgICBDYW5ub3Qgc2V0IHRoZSAnWyBhbmQgJ10gbWFyaywgd2hpY2ggbWF5IGJlIG5lY2Vzc2FyeSB3aGVuIGFuCisJICAgIGF1dG9jb21tYW5kIHNpbXVsYXRlcyByZWFkaW5nIGEgZmlsZS4KK1NvbHV0aW9uOiAgIEFsbG93IHVzaW5nICJtWyIgYW5kICJtXSIuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL21vdGlvbi50eHQsIHNyYy9tYXJrLmMKKworUGF0Y2ggNi4yLjQyMgorUHJvYmxlbTogICAgSW4gQ1RSTC1YIGNvbXBsZXRpb24gbWVzc2FnZXMgdGhlICIvIiBtYWtlcyB0aGVtIGxlc3MgcmVhZGFibGUuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIHNsYXNoZXMuIChBbnRvbnkgU2NyaXZlbikKK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjIuNDIzCitQcm9ibGVtOiAgICAiOnZlcnRpY2FsIHdpbmNtZCBdIiBkb2VzIG5vdCBzcGxpdCB2ZXJ0aWNhbGx5LgorU29sdXRpb246ICAgQWRkICJwb3N0cG9uZWRfc3BsaXRfZmxhZ3MiLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2dsb2JhbHMuaCwgc3JjL2lmX2NzY29wZS5jLCBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjQyNAorUHJvYmxlbTogICAgQSBCdWZFbnRlciBhdXRvY29tbWFuZCB0aGF0IHNldHMgYW4gb3B0aW9uIHN0b3BzICdtb3VzZWZvY3VzJyBmcm9tCisJICAgIHdvcmtpbmcgaW4gSW5zZXJ0IG1vZGUgKE5vcm1hbCBtb2RlIGlzIE9LKS4gKEdyZWdvcnkgU2VpZG1hbikKK1NvbHV0aW9uOiAgIEluIHRoZSBJbnNlcnQgbW9kZSBsb29wIGludm9rZSBndWlfbW91c2VfY29ycmVjdCgpIHdoZW4gbmVlZGVkLgorRmlsZXM6CSAgICBzcmMvZWRpdC5jCisKK1BhdGNoIDYuMi40MjUKK1Byb2JsZW06ICAgIFZlcnRpY2FsIHNwbGl0IGFuZCBjb21tYW5kIGxpbmUgd2luZG93OiBjYW4gb25seSBkcmFnIHN0YXR1cyBsaW5lCisJICAgIGFib3ZlIHRoZSBjbWRsaW5lIHdpbmRvdyBvbiB0aGUgcmlnaHRoYW5kIHNpZGUsIG5vdCBsZWZ0aGFuZCBzaWRlLgorU29sdXRpb246ICAgQ2hlY2sgdGhlIHN0YXR1cyBsaW5lIHJvdyBpbnN0ZWFkIG9mIHRoZSB3aW5kb3cgcG9pbnRlci4KK0ZpbGVzOgkgICAgc3JjL3VpLmMKKworUGF0Y2ggNi4yLjQyNgorUHJvYmxlbTogICAgQSBzeW50YXggcmVnaW9uIGVuZCBtYXRjaCB3aXRoIGEgbWF0Y2hncm91cCB0aGF0IGluY2x1ZGVzIGEgbGluZQorCSAgICBicmVhayBvbmx5IGhpZ2hsaWdodHMgdGhlIGxhc3QgbGluZSB3aXRoIG1hdGNoZ3JvdXAuIChHYXJ5CisJICAgIEhvbGxvd2F5KQorU29sdXRpb246ICAgQWxzbyB1c2UgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmVnaW9uCisJICAgIGhpZ2hsaWdodGluZyBlbmRzLgorRmlsZXM6CSAgICBzcmMvc3ludGF4LmMKKworUGF0Y2ggNi4yLjQyNyAoZXh0cmEpCitQcm9ibGVtOiAgICBXaGVuIHBhc3RpbmcgYSBsb3Qgb2YgdGV4dCBpbiBhIG11bHRpLWJ5dGUgZW5jb2RpbmcsIGNvbnZlcnNpb24KKwkgICAgZnJvbSAndGVybWVuY29kaW5nJyB0byAnZW5jb2RpbmcnIG1heSBmYWlsIGZvciBzb21lIGNoYXJhY3RlcnMuCisJICAgIChLdWFuZy1jaGUgV3UpCitTb2x1dGlvbjogICBXaGVuIHRoZXJlIGlzIGFuIGluY29tcGxldGUgYnl0ZSBzZXF1ZW5jZSBhdCB0aGUgZW5kIG9mIHRoZSByZWFkCisJICAgIHRleHQga2VlcCBpdCBmb3IgdGhlIG5leHQgdGltZS4KK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMsIHNyYy9vc19hbWlnYS5jLCBzcmMvb3NfbXN3aW4uYywgc3JjL3Byb3RvL21ieXRlLnBybywKKwkgICAgc3JjL3Byb3RvL29zX21zd2luLnBybywgc3JjL3VpLmMKKworUGF0Y2ggNi4yLjQyOAorUHJvYmxlbTogICAgVGhlIFgxMSBjbGlwYm9hcmQgc3VwcG9ydHMgdGhlIFZpbSBzZWxlY3Rpb24gZm9yIGNoYXIvbGluZS9ibG9jaworCSAgICBtb2RlLCBidXQgc2luY2UgdGhlIGVuY29kaW5nIGlzIG5vdCBpbmNsdWRlZCAgY2FuJ3QgY29weS9wYXN0ZQorCSAgICBiZXR3ZWVuIHR3byBWaW1zIHdpdGggYSBkaWZmZXJlbnQgJ2VuY29kaW5nJy4KK1NvbHV0aW9uOiAgIEFkZCBhIG5ldyBzZWxlY3Rpb24gZm9ybWF0IHRoYXQgaW5jbHVkZXMgdGhlICdlbmNvZGluZycuICBQZXJmb3JtCisJICAgIGNvbnZlcnNpb24gd2hlbiBuZWNlc3NhcnkuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jLCBzcmMvdWkuYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi40MjkKK1Byb2JsZW06ICAgIFVuaXg6IGdsb2IoKSBkb2Vzbid0IHdvcmsgZm9yIGEgZGlyZWN0b3J5IHdpdGggYSBzaW5nbGUgcXVvdGUgaW4KKwkgICAgdGhlIG5hbWUuIChOYXpyaSBSYW1saXkpCitTb2x1dGlvbjogICBXaGVuIHVzaW5nIHRoZSBzaGVsbCB0byBleHBhbmQsIG9ubHkgcHV0IGRvdWJsZSBxdW90ZXMgYXJvdW5kCisJICAgIHNwYWNlcyBhbmQgc2luZ2xlIHF1b3Rlcywgbm90IHRoZSB3aG9sZSB0aGluZy4KK0ZpbGVzOgkgICAgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjIuNDMwCitQcm9ibGVtOiAgICBCT00gYXQgc3RhcnQgb2YgYSB2aW0gc2NyaXB0IGZpbGUgaXMgbm90IHJlY29nbml6ZWQgYW5kIGNhdXNlcyBhbgorCSAgICBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgRGV0ZWN0IHRoZSBCT00gYW5kIHNraXAgb3ZlciBpdC4gIEFsc28gZml4IHRoYXQgYWZ0ZXIgdXNpbmcKKwkgICAgIjpzY3JpcHRlbmNvZGluZyIgdGhlIGljb252KCkgZmlsZSBkZXNjcmlwdG9yIHdhcyBub3QgY2xvc2VkCisJICAgIChtZW1vcnkgbGVhaykuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi40MzEKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyLCB0aGUgc2Nyb2xsaW5nIGlzIGxpbWl0ZWQgdG8KKwkgICAgdGhlIGxlbmd0aCBvZiB0aGUgY3Vyc29yIGxpbmUuCitTb2x1dGlvbjogICBNYWtlIHRoZSBzY3JvbGwgbGltaXQgZGVwZW5kIG9uIHRoZSBsb25nZXN0IHZpc2libGUgbGluZS4gIFRoZQorCSAgICBjdXJzb3IgaXMgbW92ZWQgd2hlbiBuZWNlc3NhcnkuICBJbmNsdWRpbmcgdGhlICdoJyBmbGFnIGluCisJICAgICdndWlvcHRpb25zJyBkaXNhYmxlcyB0aGlzLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9ndWkudHh0LCBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL2d1aS5jLAorCSAgICBzcmMvbWlzYzIuYywgc3JjL29wdGlvbi5oCisKK1BhdGNoIDYuMi40MzIgKGFmdGVyIDYuMi40MzAgYW5kIDYuMi40MzEpCitQcm9ibGVtOiAgICBMaW50IHdhcm5pbmdzLgorU29sdXRpb246ICAgQWRkIHR5cGUgY2FzdHMuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jLCBzcmMvZ3VpLmMKKworUGF0Y2ggNi4yLjQzMworUHJvYmxlbTogICAgVHJhbnNsYXRpbmcgIlZJU1VBTCIgYW5kICJCTE9DSyIgc2VwYXJhdGVseSBkb2Vzbid0IGdpdmUgYSBnb29kCisJICAgIHJlc3VsdC4gKEFsZWphbmRybyBMb3BleiBWYWxlbmNpYSkKK1NvbHV0aW9uOiAgIFVzZSBhIHN0cmluZyBmb3IgZWFjaCBjb21iaW5hdGlvbi4KK0ZpbGVzOgkgICAgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMi40MzQgKGFmdGVyIDYuMi40MzEpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5nLiAoU2FsbWFuIEhhbGltKQorU29sdXRpb246ICAgQWRkIHR5cGUgY2FzdHMuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjIuNDM1CitQcm9ibGVtOiAgICBXaGVuIHRoZXJlIGFyZSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvd3MgdGhlIG1pbmltYWwgVmltIHdpbmRvdworCSAgICBoZWlnaHQgaXMgY29tcHV0ZWQgd3JvbmcuCitTb2x1dGlvbjogICBVc2UgZnJhbWVfbWluaGVpZ2h0KCkgdG8gY29ycmVjdGx5IGNvbXB1dGUgdGhlIG1pbmltYWwgaGVpZ2h0LgorRmlsZXM6CSAgICBzcmMvd2luZG93LmMKKworUGF0Y2ggNi4yLjQzNgorUHJvYmxlbTogICAgUnVubmluZyB0aGUgdGVzdHMgY2hhbmdlcyB0aGUgdXNlcidzIHZpbWluZm8gZmlsZS4KK1NvbHV0aW9uOiAgIEluIHRlc3QgNDkgdGVsbCB0aGUgZXh0cmEgVmltIHRvIHVzZSB0aGUgdGVzdCB2aW1pbmZvIGZpbGUuCitGaWxlczoJICAgIHNyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KKworUGF0Y2ggNi4yLjQzNworUHJvYmxlbTogICAgIjpta3Nlc3Npb24iIGFsd2F5cyBwdXRzICJzZXQgbm9jb21wYXRpYmxlIiBpbiB0aGUgc2Vzc2lvbiBmaWxlLgorCSAgICBUaGlzIGNoYW5nZXMgb3B0aW9uIHNldHRpbmdzLiAoUm9uIEFhcm9uKQorU29sdXRpb246ICAgQWRkIGFuICJpZiIgdG8gb25seSBjaGFuZ2UgJ2NvbXBhdGlibGUnIHdoZW4gbmVlZGVkLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuNDM4CitQcm9ibGVtOiAgICBXaGVuIHRoZSAndicgZmxhZyBpcyBwcmVzZW50IGluICdjcG9wdGlvbnMnLCBiYWNrc3BhY2luZyBhbmQgdGhlbgorCSAgICB0eXBpbmcgdGV4dCBhZ2Fpbjogb25lIGNoYXJhY3RlciB0b28gbXVjaCBpcyBvdmVydHlwZWQgYmVmb3JlCisJICAgIGluc2VydGluZyBpcyBkb25lIGFnYWluLgorU29sdXRpb246ICAgU2V0ICJkb2xsYXJfdmNvbCIgdG8gdGhlIHJpZ2h0IGNvbHVtbi4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjIuNDM5CitQcm9ibGVtOiAgICBHVEsgMjogQ2hhbmdpbmcgJ2xpbmVzJyBtYXkgY2F1c2UgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSB3aW5kb3cKKwkgICAgbGF5b3V0IGFuZCB0aGUgc2l6ZSBvZiB0aGUgd2luZG93LgorU29sdXRpb246ICAgRGlzYWJsZSB0aGUgaGFjayB3aXRoIGZvcmNlX3NoZWxsX3Jlc2l6ZV9pZGxlKCkuCitGaWxlczoJICAgIHNyYy9ndWlfZ3RrX3gxMS5jCisKK1BhdGNoIDYuMi40NDAKK1Byb2JsZW06ICAgIFdoZW4gJ2xhenlyZWRyYXcnIGlzIHNldCB0aGUgd2luZG93IHRpdGxlIGlzIHN0aWxsIHVwZGF0ZWQuCisJICAgIFRoZSBzaXplIG9mIHRoZSBWaXN1YWwgYXJlYSBhbmQgdGhlIHJ1bGVyIGFyZSBkaXNwbGF5ZWQgdG9vIG9mdGVuLgorU29sdXRpb246ICAgUG9zdHBvbmUgcmVkcmF3aW5nIHRoZSB3aW5kb3cgdGl0bGUuICBPbmx5IHNob3cgdGhlIFZpc3VhbCBhcmVhCisJICAgIHNpemUgd2hlbiB3YWl0aW5nIGZvciBhIGNoYXJhY3Rlci4gIERvbid0IGRyYXcgdGhlIHJ1bGVyCisJICAgIHVubmVjZXNzYXJ5LgorRmlsZXM6CSAgICBzcmMvYnVmZmVyLmMsIHNyYy9ub3JtYWwuYywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuMi40NDEKK1Byb2JsZW06ICAgICI6dW5hYmJyZXZpYXRlIGZvbyAiIGRvZXNuJ3Qgd29yaywgYmVjYXVzZSBvZiB0aGUgdHJhaWxpbmcgc3BhY2UsCisJICAgIHdoaWxlIGFuIGFiYnJldmlhdGlvbiB3aXRoIGEgdHJhaWxpbmcgc3BhY2UgaXMgbm90IHBvc3NpYmxlLiAoUGF1bAorCSAgICBKb2xseSkKK1NvbHV0aW9uOiAgIEFjY2VwdCBhIG1hdGNoIHdpdGggdGhlIGxocyBvZiBhbiBhYmJyZXZpYXRpb24gd2l0aG91dCB0aGUKKwkgICAgdHJhaWxpbmcgc3BhY2UuCitGaWxlczoJICAgIHNyYy9nZXRjaGFyLmMKKworUGF0Y2ggNi4yLjQ0MgorUHJvYmxlbTogICAgQ2Fubm90IG1hbmlwdWxhdGUgdGhlIGNvbW1hbmQgbGluZSBmcm9tIGEgZnVuY3Rpb24uCitTb2x1dGlvbjogICBBZGQgZ2V0Y21kbGluZSgpLCBnZXRjbWRwb3MoKSBhbmQgc2V0Y21kcG9zKCkgZnVuY3Rpb25zIGFuZCB0aGUKKwkgICAgQ1RSTC1cIGUgY29tbWFuZC4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvY21kbGluZS50eHQsIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jCisJICAgIHNyYy9leF9nZXRsbi5jLCBzcmMvb3BzLmMsIHNyYy9wcm90by9leF9nZXRsbi5wcm8sCisJICAgIHNyYy9wcm90by9vcHMucHJvCisKK1BhdGNoIDYuMi40NDMKK1Byb2JsZW06ICAgIFdpdGggIjpzaWxlbnQhIGVjaG9lcnIgc29tZXRoaW5nIiB5b3UgZG9uJ3QgZ2V0IHRoZSBwb3NpdGlvbiBvZgorCSAgICB0aGUgZXJyb3IuICBlbXNnKCkgb25seSB3cml0ZXMgdGhlIG1lc3NhZ2UgaXRzZWxmIGFuZCByZXR1cm5zLgorU29sdXRpb246ICAgQWxzbyByZWRpcmVjdCB0aGUgcG9zaXRpb24gb2YgdGhlIGVycm9yLgorRmlsZXM6CSAgICBzcmMvbWVzc2FnZS5jCisKK1BhdGNoIDYuMi40NDQKK1Byb2JsZW06ICAgIFdoZW4gYWRkaW5nIHRoZSAnYycgZmxhZyB0byBhICI6c3Vic3RpdHV0ZSIgY29tbWFuZCBpdCBtYXkgcmVwbGFjZQorCSAgICBtb3JlIHRpbWVzIHRoYW4gd2l0aG91dCB0aGUgJ2MnIGZsYWcuICBIYXBwZW5zIGZvciBhICBtYXRjaCB0aGF0CisJICAgIHN0YXJ0cyB3aXRoICJcemUiIChNYXJjZWwgU3ZpdGFsc2spIGFuZCB3aGVuIHVzaW5nICJcQDw9IiAoS2xhdXMKKwkgICAgQm9zYXUpLgorU29sdXRpb246ICAgQ29ycmVjdCAicHJldl9tYXRjaGNvbCIgd2hlbiByZXBsYWNpbmcgdGhlIGxpbmUuICBEb24ndCByZXBsYWNlCisJICAgIHRoZSBsaW5lIHdoZW4gdGhlIHBhdHRlcm4gdXNlcyBsb29rLWJlaGluZCBtYXRjaGluZy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL3Byb3RvL3JlZ2V4cC5wcm8sIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjIuNDQ1CitQcm9ibGVtOiAgICBDb3B5aW5nIHZpbXR1dG9yIHRvIC90bXAvc29tZXRoaW5nIGlzIG5vdCBzZWN1cmUsIGEgc3ltbGluayBtYXkKKwkgICAgY2F1c2UgdHJvdWJsZS4KK1NvbHV0aW9uOiAgIENyZWF0ZSBhIGRpcmVjdG9yeSBhbmQgY3JlYXRlIHRoZSBmaWxlIGluIGl0LiAgVXNlICJ1bWFzayIgdG8KKwkgICAgY3JlYXRlIHRoZSBkaXJlY3Rvcnkgd2l0aCBtb2RlIDcwMC4gIChTdGVmYW4gTm9yZGhhdXNlbikKK0ZpbGVzOgkgICAgc3JjL3ZpbXR1dG9yCisKK1BhdGNoIDYuMi40NDYgKGFmdGVyIDYuMi40MDQpCitQcm9ibGVtOiAgICBVc2luZyBsaWJyYXJ5IGZ1bmN0aW9ucyB3Y3dpZHRoKCkgYW5kIGlzd3ByaW50KCkgcmVzdWx0cyBpbgorCSAgICBkaXNwbGF5IHByb2JsZW1zIGZvciBIZWJyZXcgY2hhcmFjdGVycy4gKFJvbiBBYXJvbikKK1NvbHV0aW9uOiAgIERpc2FibGUgdGhlIGNvZGUgdG8gdXNlIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucywgdXNlIG91ciBvd24uCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi40NDcgKGFmdGVyIDYuMi40NDApCitQcm9ibGVtOiAgICBOb3cgdGhhdCB0aGUgdGl0bGUgaXMgb25seSB1cGRhdGVkIHdoZW4gcmVkcmF3aW5nLCBpdCBpcyBubyBsb25nZXIKKwkgICAgcG9zc2libGUgdG8gc2hvdyBpdCB3aGlsZSBleGVjdXRpbmcgYSBmdW5jdGlvbi4gKE1hZG9rYSBNYWNoaXRhbmkpCitTb2x1dGlvbjogICBNYWtlICI6cmVkcmF3IiBhbHNvIHVwZGF0ZSB0aGUgdGl0bGUuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi40NDggKGFmdGVyIDYuMi40MjcpCitQcm9ibGVtOiAgICBNYWM6IGNvbnZlcnNpb24gZG9uZSB3aGVuICd0ZXJtZW5jb2RpbmcnIGRpZmZlcnMgZnJvbSAnZW5jb2RpbmcnCisJICAgIGZhaWxzIHdoZW4gcGFzdGluZyBhIGxvbmdlciB0ZXh0LgorU29sdXRpb246ICAgQ2hlY2sgZm9yIGFuIGluY29tcGxldGUgc2VxdWVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgY2h1bmsgdG8gYmUKKwkgICAgY29udmVydGVkLiAoRWNrZWhhcmQgQmVybnMpCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi40NDkgKGFmdGVyIDYuMi40MzEpCitQcm9ibGVtOiAgICBHZXQgZXJyb3IgbWVzc2FnZXMgd2hlbiBzd2l0Y2hpbmcgZmlsZXMuCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSB2YWxpZCBsaW5lIG51bWJlciB3aGVuIGNhbGN1bGF0aW5nIHRoZSB3aWR0aCBvZiB0aGUKKwkgICAgaG9yaXpvbnRhbCBzY3JvbGxiYXIuIChIZWxtdXQgU3RpZWdsZXIpCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjIuNDUwCitQcm9ibGVtOiAgICAiICAjaW5jbHVkZSIgYW5kICIgICNkZWZpbmUiIGFyZSBub3QgcmVjb2duaXplZCB3aXRoIHRoZSBkZWZhdWx0CisJICAgIG9wdGlvbiB2YWx1ZXMgZm9yICdpbmNsdWRlJyBhbmQgJ2RlZmluZWQnLiAoUkcgS2lyYW4pCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIGRlZmF1bHQgdmFsdWVzIHRvIGFsbG93IHdoaXRlIHNwYWNlIGJlZm9yZSB0aGUgIy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2Mvb3B0aW9ucy50eHQsIHNyYy9vcHRpb24uYworCitQYXRjaCA2LjIuNDUxCitQcm9ibGVtOiAgICBHVEs6IHdoZW4gdXNpbmcgWElNIHRoZXJlIGFyZSB2YXJpb3VzIHByb2JsZW1zLCBpbmNsdWRpbmcgc2V0dGluZworCSAgICAnbW9kaWZpZWQnIGFuZCBicmVha2luZyB1bmRvIGF0IHRoZSB3cm9uZyBtb21lbnQuCitTb2x1dGlvbjogICBBZGQgInhpbV9jaGFuZ2VkX3doaWxlX3ByZWVkaXRpbmciLCAicHJlZWRpdF9lbmRfY29sIiBhbmQKKwkgICAgaW1faXNfcHJlZWRpdGluZygpLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYywgc3JjL2dsb2JhbHMuaCwgc3JjL2d1aV9ndGsuYywgc3JjL2d1aV9ndGtfeDExLmMsCisJICAgIHNyYy9tYnl0ZS5jLCBzcmMvbWlzYzEuYywgc3JjL3Byb3RvL21ieXRlLnBybywgc3JjL3NjcmVlbi5jLAorCSAgICBzcmMvdW5kby5jCisKK1BhdGNoIDYuMi40NTIKK1Byb2JsZW06ICAgIEluIGRpZmYgbW9kZSwgd2hlbiBEaWZmQWRkIGFuZCBEaWZmVGV4dCBoaWdobGlnaHQgc2V0dGluZ3MgYXJlCisJICAgIGVxdWFsLCBhbiBhZGRlZCBsaW5lIGlzIGhpZ2hsaWdodGVkIHdpdGggRGlmZkNoYW5nZS4gKFRvbSBTY2h1bW0pCitTb2x1dGlvbjogICBSZW1lbWJlciB0aGUgZGlmZiBoaWdobGlnaHQgdHlwZSBpbnN0ZWFkIG9mIHRoZSBhdHRyaWJ1dGVzLgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4yLjQ1MworUHJvYmxlbTogICAgIjpzL2Zvb1x8XG5iYXIveC9nIiBkb2VzIG5vdCByZXBsYWNlIHR3byB0aW1lcyBpbiAiZm9vXG5iYXIiLgorCSAgICAoUGF2ZWwgUGFwdXNoZXYpCitTb2x1dGlvbjogICBXaGVuIHRoZSBwYXR0ZXJuIGNhbiBtYXRjaCBhIGxpbmUgYnJlYWsgYWxzbyB0cnkgbWF0Y2hpbmcgYXQgdGhlCisJICAgIE5VTCBhdCB0aGUgZW5kIG9mIGEgbGluZS4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYywgc3JjL3JlZ2V4cC5jCisKK1BhdGNoIDYuMi40NTQKK1Byb2JsZW06ICAgICI6bGV0IGI6Y2hhbmdlZHRpY2siIGRvZXNuJ3Qgd29yay4gKEFsYW4gU2NobWl0dCkgICI6bGV0CisJICAgIGI6Y2hhbmdlZHRpY2sgPSA5OSIgZG9lcyBub3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlLgorU29sdXRpb246ICAgQWRkIGNvZGUgdG8gcmVjb2duaXplICI6bGV0IGI6Y2hhbmdlZHRpY2siLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi40NTUgKGFmdGVyIDYuMi4yOTcpCitQcm9ibGVtOiAgICBJbiBQeXRob24gY29tbWFuZHMgdGhlIGN1cnJlbnQgbG9jYWxlIGNoYW5nZXMgaG93IGNlcnRhaW4gUHl0aG9uCisJICAgIGZ1bmN0aW9ucyB3b3JrLiAoRXVnZW5lIE0uIE1pbmtvdnNraWkpCitTb2x1dGlvbjogICBTZXQgdGhlIExDX05VTUVSSUMgbG9jYWxlIHRvICJDIiB3aGlsZSBleGVjdXRpbmcgYSBQeXRob24gY29tbWFuZC4KK0ZpbGVzOgkgICAgc3JjL2lmX3B5dGhvbi5jCisKK1BhdGNoIDYuMi40NTYgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IEVkaXRpbmcgYSBmaWxlIGJ5IGl0cyBVbmljb2RlIG5hbWUgKGRyb3BwaW5nIGl0IG9uIFZpbSBvcgorCSAgICB1c2luZyB0aGUgZmlsZSBzZWxlY3Rpb24gZGlhbG9nKSBkb2Vzbid0IHdvcmsuIChZYWtvdiBMZXJuZXIsIEFsZXgKKwkgICAgSmFrdXNoZXYpCitTb2x1dGlvbjogICBVc2Ugd2lkZSBjaGFyYWN0ZXIgZnVuY3Rpb25zIHdoZW4gZmlsZSBuYW1lcyBhcmUgaW52b2x2ZWQgYW5kCisJICAgIGNvbnZlcnQgZnJvbS90byAnZW5jb2RpbmcnIHdoZXJlIG5lZWRlZC4KK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYywgc3JjL21hY3Jvcy5oLCBzcmMvbWVtZmlsZS5jLCBzcmMvbWVtbGluZS5jLAorCSAgICBzcmMvb3NfbXN3aW4uYywgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4yLjQ1NyAoYWZ0ZXIgNi4yLjI0NCkKK1Byb2JsZW06ICAgIFdoZW4gJ2VuY29kaW5nJyBpcyAidXRmLTgiIGFuZCB3cml0aW5nIHRleHQgd2l0aCBjaGFycyBhYm92ZSAweDgwCisJICAgIGluIGxhdGluMSwgY29udmVyc2lvbiBpcyB3cm9uZyBldmVyeSA4MjAwIGJ5dGVzLiAoT3l2aW5kIEhvbG0pCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSB1dGZfcHRyMmxlbl9jaGVja19sZW4oKSBmdW5jdGlvbiBhbmQgZml4IHRoZSBwcm9ibGVtCisJICAgIG9mIGRpc3BsYXlpbmcgMHhmNyBpbiB1dGZjX3B0cjJsZW5fY2hlY2tfbGVuKCkuCitGaWxlczoJICAgIHNyYy9tYnl0ZS5jCisKK1BhdGNoIDYuMi40NTgKK1Byb2JsZW06ICAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBzZXQgIiQiIGRvZXNuJ3QgbW92ZSB0byB0aGUgZW5kIG9mIGFuCisJICAgIHVucHJpbnRhYmxlIGNoYXJhY3RlciwgY2F1c2luZyAieSQiIG5vdCB0byBpbmNsdWRlIHRoYXQgY2hhcmFjdGVyLgorCSAgICAoRnJlZCBNYSkKK1NvbHV0aW9uOiAgIFNldCAiY29sYWRkIiB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyLgorRmlsZXM6CSAgICBzcmMvbWlzYzIuYworCitQYXRjaCA2LjIuNDU5IChhZnRlciA2LjIuNDU0KQorUHJvYmxlbTogICAgVmFyaWFibGUgImIiIGNhbm5vdCBiZSB3cml0dGVuLiAoU2FsbWFuIEhhbGltKQorU29sdXRpb246ICAgQ29tcGFyZSBzdHJpbmdzIHByb3Blcmx5LgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuMi40NjAgKGV4dHJhLCBhZnRlciA2LjIuNDU2KQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZ3MgZm9yIG1pc3NpbmcgcHJvdG90eXBlcy4KK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGhlIG1pc3NpbmcgcHJvdG90eXBlcy4KK0ZpbGVzOgkgICAgc3JjL3Byb3RvL29zX3dpbjMyLnBybworCitQYXRjaCA2LjIuNDYxCitQcm9ibGVtOiAgICBBZnRlciB1c2luZyBhIHNlYXJjaCBjb21tYW5kICJ4IiBzdGFydHMgcHV0dGluZyBzaW5nbGUgY2hhcmFjdGVycworCSAgICBpbiB0aGUgbnVtYmVyZWQgcmVnaXN0ZXJzLgorU29sdXRpb246ICAgUmVzZXQgInVzZV9yZWdfb25lIiBhdCB0aGUgcmlnaHQgbW9tZW50LgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4yLjQ2MgorUHJvYmxlbTogICAgRmluZGluZyBhIG1hdGNoaW5nIHBhcmVudGhlc2lzIGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgYQorCSAgICBiYWNrc2xhc2ggaW4gYSB0cmFpbGluZyBieXRlLgorU29sdXRpb246ICAgSGFuZGxlIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBjb3JyZWN0bHkuIChUYXJvIE11cmFva2EpCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjIuNDYzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBBbiBOVEZTIGZpbGUgc3lzdGVtIG1heSBjb250YWluIGZpbGVzIHdpdGggZXh0cmEgaW5mbworCSAgICBzdHJlYW1zLiAgVGhlIGN1cnJlbnQgbWV0aG9kIHRvIGNvcHkgdGhlbSBjcmVhdGVzIG9uZSBhbmQgdGhlbgorCSAgICBkZWxldGVzIGl0IGFnYWluLiAgKFBldGVyIFRvZW5uaWVzKSAgQWxzbywgb25seSB0aHJlZSBzdHJlYW1zIHdpdGgKKwkgICAgaGFyZCBjb2RlZCBuYW1lcyBhcmUgY29waWVkLgorU29sdXRpb246ICAgVXNlIEJhY2t1cFJlYWQoKSB0byBjaGVjayB3aGljaCBpbmZvIHN0cmVhbXMgdGhlIG9yaWdpbmFsIGZpbGUKKwkgICAgY29udGFpbnMgYW5kIG9ubHkgY29weSB0aGVzZSBzdHJlYW1zLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuNDY0IChleHRyYSwgYWZ0ZXIgNi4yLjQyNykKK1Byb2JsZW06ICAgIEFtaWdhOiBDb21waWxhdGlvbiBlcnJvciB3aXRoIGdjYy4gKEFsaSBBa2NhYWdhYykKK1NvbHV0aW9uOiAgIE1vdmUgdGhlICNpZmRlZiBvdXRzaWRlIG9mIFJlYWQoKS4KK0ZpbGVzOgkgICAgc3JjL29zX2FtaWdhLmMKKworUGF0Y2ggNi4yLjQ2NQorUHJvYmxlbTogICAgV2hlbiByZXNpemluZyB0aGUgR1VJIHdpbmRvdyB0aGUgd2luZG93IG1hbmFnZXIgc29tZXRpbWVzIG1vdmVzIGl0CisJICAgIGxlZnQgb2Ygb3IgYWJvdmUgdGhlIHNjcmVlbi4gKE1pY2hhZWwgTWNDYXJ0eSkKK1NvbHV0aW9uOiAgIENoZWNrIHRoZSB3aW5kb3cgcG9zaXRpb24gYWZ0ZXIgcmVzaXppbmcgaXQgYW5kIG1vdmUgaXQgb250byB0aGUKKwkgICAgc2NyZWVuIHdoZW4gaXQgaXNuJ3QuCitGaWxlczoJICAgIHNyYy9ndWkuYworCitQYXRjaCA2LjIuNDY2IChleHRyYSwgYWZ0ZXIgNi4yLjQ1NikKK1Byb2JsZW06ICAgIFdpbjMyOiBDb21waWxpbmcgd2l0aCBCb3JsYW5kIEMgZmFpbHMsIGFuZCBhbiB1bi9zaWduZWQgd2FybmluZy4KK1NvbHV0aW9uOiAgIFJlZGVmaW5lIHdjc2ljbXAoKSB0byB3Y3NjbXBpKCkgYW5kIGFkZCB0eXBlIGNhc3RzLiAoWWFzdWhpcm8KKwkgICAgTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuNDY3IChleHRyYSwgYWZ0ZXIgNi4yLjQ2MykKK1Byb2JsZW06ICAgIFdpbjMyOiBjYW4ndCBjb21waWxlIHdpdGhvdXQgbXVsdGktYnl0ZSBmZWF0dXJlLiAoQWppdCBUaGFra2FyKQorU29sdXRpb246ICAgQWRkICNpZmRlZnMgYXJvdW5kIHRoZSBpbmZvIHN0cmVhbSBjb2RlLgorRmlsZXM6CSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuNDY4CitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5ncyBmb3Igc2hhZG93ZWQgdmFyaWFibGVzLiAoTWF0dGhpYXMgTW9ocikKK1NvbHV0aW9uOiAgIERlbGV0ZSBzdXBlcmZsdW91cyB2YXJpYWJsZXMgYW5kIHJlbmFtZSBvdGhlcnMuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9leF9kb2NtZC5jLCBzcmMvZXhfZXZhbC5jLCBzcmMvaWZfY3Njb3BlLmMsCisJICAgIHNyYy9mb2xkLmMsIHNyYy9vcHRpb24uYywgc3JjL29zX3VuaXguYywgc3JjL3F1aWNrZml4LmMsCisJICAgIHNyYy9yZWdleHAuYworCitQYXRjaCA2LjIuNDY5IChleHRyYSwgYWZ0ZXIgNi4yLjQ1NikKK1Byb2JsZW06ICAgIFdpbjMyOiBDYW4ndCBjcmVhdGUgc3dhcCBmaWxlIHdoZW4gJ2VuY29kaW5nJyBkaWZmZXJzIGZyb20gdGhlCisJICAgIGFjdGl2ZSBjb2RlIHBhZ2UuIChLcml0b24gS3lyaW1pcykKK1NvbHV0aW9uOiAgIEluIGVuY190b191Y3MyKCkgdGVybWluYXRlIHRoZSBjb252ZXJ0ZWQgc3RyaW5nIHdpdGggYSBOVUwKK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMKKworUGF0Y2ggNi4yLjQ3MAorUHJvYmxlbTogICAgVGhlIG5hbWUgcmV0dXJuZWQgYnkgdGVtcG5hbWUoKSBtYXkgYmUgZXF1YWwgdG8gdGhlIGZpbGUgdXNlZCBmb3IKKwkgICAgc2hlbGwgb3V0cHV0IHdoZW4gaWdub3JpbmcgY2FzZS4KK1NvbHV0aW9uOiAgIFNraXAgJ08nIGFuZCAnSScgaW4gdGVtcG5hbWUoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjIuNDcxCitQcm9ibGVtOiAgICAiLUwvdXNyL2xpYiIgaXMgdXNlZCBpbiB0aGUgbGluayBjb21tYW5kLCBldmVuIHRob3VnaCBpdCdzCisJICAgIHN1cHBvc2VkIHRvIGJlIGZpbHRlcmVkIG91dC4gIi1sdyIgYW5kICItbGRsIiBhcmUgbm90CisJICAgIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbiBuZWVkZWQgZm9yICItbFhtdSIuIChBbnRvbmlvIENvbG9tYm8pCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSBzcGFjZSBhZnRlciB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiBiZWZvcmUuICBBbHNvCisJICAgIHJlbW92ZSAiLVIvdXNyL2xpYiIgaWYgaXQncyB0aGVyZS4gIENoZWNrIGZvciAiLWx3IiBhbmQgIi1sZGwiCisJICAgIGJlZm9yZSB0cnlpbmcgIi1sWG11Ii4KK0ZpbGVzOgkgICAgc3JjL2F1dG8vY29uZmlndXJlLCBzcmMvY29uZmlndXJlLmluLCBzcmMvbGluay5zaAorCitQYXRjaCA2LjIuNDcyCitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIGEgRmlsZUNoYW5nZWRTaGVsbCBhdXRvY29tbWFuZCB0aGF0IGNoYW5nZXMgdGhlIGN1cnJlbnQKKwkgICAgYnVmZmVyLCBhIGJ1ZmZlciBleGlzdHMgdGhhdCBjYW4ndCBiZSB3aXBlZCBvdXQuCisJICAgIEFsc28sIFZpbSBzb21ldGltZXMgY3Jhc2hlcyB3aGVuIGV4ZWN1dGluZyBhbiBleHRlcm5hbCBjb21tYW5kCisJICAgIHRoYXQgY2hhbmdlcyB0aGUgYnVmZmVyIGFuZCBhIEZpbGVDaGFuZ2VkU2hlbGwgYXV0b2NvbW1hbmQgaXMKKwkgICAgdXNlZC4gIChIYXJpIEtyaXNobmEgRGFyYSkKKwkgICAgVXNlcnMgYXJlIGNvbmZ1c2VkIGJ5IHRoZSB3YXJuaW5nIGZvciBhIGZpbGUgYmVpbmcgY2hhbmdlZCBvdXRzaWRlCisJICAgIG9mIFZpbS4KK1NvbHV0aW9uOiAgIEF2b2lkIHRoYXQgdGhlIHdpbmRvdyBjb3VudGVyIGZvciBhIGJ1ZmZlciBpcyBpbmNyZW1lbnRlZCB0d2ljZS4KKwkgICAgQXZvaWQgdGhhdCBidWZfY2hlY2tfdGltZXN0YW1wKCkgaXMgdXNlZCByZWN1cnNpdmVseS4KKwkgICAgQWRkIGEgaGludCB0byBsb29rIGluIHRoZSBoZWxwIGZvciBtb3JlIGluZm8uCitGaWxlczoJICAgIHNyYy9leF9jbWRzLmMsIHNyYy9maWxlaW8uYworCitQYXRjaCA2LjIuNDczCitQcm9ibGVtOiAgICBVc2luZyBDVFJMLV0gaW4gYSBoZWxwIGJ1ZmZlciB3aXRob3V0IGEgbmFtZSBjYXVzZXMgYSBjcmFzaC4KK1NvbHV0aW9uOiAgIENoZWNrIGZvciBuYW1lIHRvIGJlIHByZXNlbnQgYmVmb3JlIHVzaW5nIGl0LiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvdGFnLmMKKworUGF0Y2ggNi4yLjQ3NCAoZXh0cmEsIGFmdGVyIDYuMi40NTYpCitQcm9ibGVtOiAgICBXaGVuIFZpbSBpcyBzdGFydGluZyB1cCBjb252ZXJzaW9uIGlzIGRvbmUgdW5uZWNlc3NhcmlseS4gIEZhaWx1cmUKKwkgICAgdG8gZmluZCB0aGUgcnVudGltZSBmaWxlcyBvbiBXaW5kb3dzIDk4LiAoUmFuZGFsbCBXLiBNb3JyaXMpCitTb2x1dGlvbjogICBJbml0IGVuY19jb2RlcGFnZSBuZWdhdGl2ZSwgb25seSB1c2UgaXQgd2hlbiBub3QgbmVnYXRpdmUuCisJICAgIERvbid0IHVzZSBHZXRGaWxlQXR0cmlidXRlc1coKSBvbiBXaW5kb3dzIDk4IG9yIGVhcmxpZXIuCitGaWxlczoJICAgIHNyYy9nbG9iYWxzLmgsIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMsIHNyYy9vc19tc3dpbi5jLAorCSAgICBzcmMvb3Nfd2luMzIuYworCitQYXRjaCA2LjIuNDc1CitQcm9ibGVtOiAgICBDb21tYW5kcyBhZnRlciAicGVybCA8PEVPRiIgYXJlIHBhcnNlZCBhcyBWaW0gY29tbWFuZHMgd2hlbiB0aGV5CisJICAgIGFyZSBub3QgZXhlY3V0ZWQuCitTb2x1dGlvbjogICBQcm9wZXJseSBza2lwIG92ZXIgdGhlIHBlcmwgY29tbWFuZHMuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jLCBzcmMvZXhfZ2V0bG4uYywgc3JjL2lmX3BlcmwueHMsIHNyYy9pZl9weXRob24uYywKKwkgICAgc3JjL2lmX3J1YnkuYywgc3JjL2lmX3RjbC5jLCBzcmMvbWlzYzIuYworCitQYXRjaCA2LjIuNDc2CitQcm9ibGVtOiAgICBXaGVuIHJlbG9hZGluZyBhIGhpZGRlbiBidWZmZXIgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbSBhbmQgdGhlCisJICAgIGN1cnJlbnQgYnVmZmVyIGlzIHJlYWQtb25seSwgdGhlIHJlbG9hZGVkIGJ1ZmZlciBiZWNvbWVzCisJICAgIHJlYWQtb25seS4gIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIFNhdmUgdGhlICdyZWFkb25seScgZmxhZyBvZiB0aGUgcmVhbG9hZGVkIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZQorCSAgICBjdXJyZW50IGJ1ZmZlci4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi40NzcKK1Byb2JsZW06ICAgIFVzaW5nIHJlbW90ZV9zZW5kKHY6c2VydmVybmFtZSwgIlw8Qy1WPiIpIGNhdXNlcyBWaW0gdG8gaGFuZy4KKwkgICAgKFlha292IExlcm5lcikKK1NvbHV0aW9uOiAgIFdoZW4gdGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgZW1wdHkgZG9uJ3Qgc2V0IHJlY2VpdmVkX2Zyb21fY2xpZW50LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jCisKK1BhdGNoIDYuMi40NzgKK1Byb2JsZW06ICAgIFdpbjMyOiAiLS1yZW1vdGUgZmlsZSIgZmFpbHMgY2hhbmdpbmcgZGlyZWN0b3J5IGlmIHRoZSBjdXJyZW50CisJICAgIGRpcmVjdG9yeSBuYW1lIHN0YXJ0cyB3aXRoIGEgc2luZ2xlIHF1b3RlLiAgKEllc3R5biBXYWx0ZXJzKQorU29sdXRpb246ICAgQWRkIGEgYmFja3NsYXNoIHdoZXJlIGl0IHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KK0ZpbGVzOgkgICAgc3JjL21haW4uYywgc3JjL21pc2MyLmMsIHNyYy9wcm90by9taXNjMi5wcm8KKworUGF0Y2ggNi4yLjQ3OQorUHJvYmxlbTogICAgVGhlIGVycm9yIG1lc3NhZ2UgZm9yIGVycm9ycyBkdXJpbmcgcmVjb3ZlcnkgZ29lcyB1bm5vdGljZWQuCitTb2x1dGlvbjogICBBdm9pZCB0aGF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0IG92ZXJ3cml0ZXMgdGhlIG1lc3NhZ2UuICBBZGQgYSBmZXcKKwkgICAgbGluZXMgdG8gbWFrZSB0aGUgZXJyb3Igc3RhbmQgb3V0LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvbWVzc2FnZS5jLCBzcmMvbWVtbGluZS5jCisKK1BhdGNoIDYuMi40ODAKK1Byb2JsZW06ICAgIE5ldEJlYW5zOiBVc2luZyBuZWdhdGl2ZSBpbmRleCBpbiBhcnJheS4gIGJhY2tzbGFzaCBhdCBlbmQgb2YKKwkgICAgbWVzc2FnZSBtYXkgY2F1c2UgVmltIHRvIGNyYXNoLiAoWGF2aWVyIGRlIEdheWUpCitTb2x1dGlvbjogICBJbml0aWFsaXplIGJ1Zl9saXN0X3VzZWQgdG8gemVyby4gQ2hlY2sgZm9yIHRyYWlsaW5nIGJhY2tzbGFzaC4KK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4yLjQ4MQorUHJvYmxlbTogICAgV2hlbiB3cml0aW5nIGEgZmlsZSBpdCBpcyBub3QgcG9zc2libGUgdG8gc3BlY2lmeSB0aGF0IGhhcmQgYW5kL29yCisJICAgIHN5bWxpbmtzIGFyZSB0byBiZSBicm9rZW4gaW5zdGVhZCBvZiBwcmVzZXJ2ZWQuCitTb2x1dGlvbjogICBBZGQgdGhlICJicmVha3N5bWxpbmsiIGFuZCAiYnJlYWtoYXJkbGluayIgdmFsdWVzIHRvICdiYWNrdXBjb3B5Jy4KKwkgICAgKFNpbW9uIEVrc3RyYW5kKQorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgc3JjL2ZpbGVpby5jLCBzcmMvb3B0aW9uLmMsIHNyYy9vcHRpb24uaAorCitQYXRjaCA2LjIuNDgyCitQcm9ibGVtOiAgICBSZXBlYXRpbmcgaW5zZXJ0IG9mIENUUkwtSyAxIFMgZG9lc24ndCB3b3JrLiAgVGhlIHN1cGVyc2NyaXB0IDEgaXMKKwkgICAgY29uc2lkZXJlZCB0byBiZSBhIGRpZ2l0LiAoSnVlcmdlbiBLcmFlbWVyKQorU29sdXRpb246ICAgSW4gdmltX2lzZGlnaXQoKSBvbmx5IGFjY2VwdCAnMCcgdG8gJzknLiAgVXNlIFZJTV9JU0RJR0lUKCkgZm9yCisJICAgIHNwZWVkIHdoZXJlIHBvc3NpYmxlLiAgQWxzbyBhZGQgdmltX2lzeGRpZ2l0KCkuCitGaWxlczoJICAgIHNyYy9idWZmZXIuYywgc3JjL2NoYXJzZXQuYywgc3JjL2RpZmYuYywgc3JjL2RpZ3JhcGguYywKKwkgICAgc3JjL2VkaXQuYywgc3JjL2V2YWwuYywsIHNyYy9leF9jbWRzLmMsIHNyYy9leF9jbWRzMi5jLAorCSAgICBzcmMvZXhfZG9jbWQuYywgc3JjL2V4X2V2YWwuYywgc3JjL2V4X2dldGxuLmMsCisJICAgIHNyYy9pZl94Y21kc3J2LmMsIHNyYy9mYXJzaS5jLCBzcmMvZmlsZWlvLmMsIHNyYy9mb2xkLmMsCisJICAgIHNyYy9nZXRjaGFyLmMsIHNyYy9ndWkuYywgc3JjL2lmX2NzY29wZS5jLCBzcmMvbWFjcm9zLmgsCisJICAgIHNyYy9tYWluLmMsIHNyYy9tYXJrLmMsIHNyYy9tYnl0ZS5jLCBzcmMvbWVudS5jLCBzcmMvbWlzYzEuYywKKwkgICAgc3JjL21pc2MyLmMsIHNyYy9ub3JtYWwuYywgc3JjL29wcy5jLCBzcmMvb3B0aW9uLmMsCisJICAgIHNyYy9wcm90by9jaGFyc2V0LnBybywgc3JjL3JlZ2V4cC5jLCBzcmMvc2NyZWVuLmMsIHNyYy9zZWFyY2guYywKKwkgICAgc3JjL3N5bnRheC5jLCBzcmMvdGFnLmMsIHNyYy90ZXJtLmMsIHNyYy90ZXJtbGliLmMKKworUGF0Y2ggNi4yLjQ4MyAoZXh0cmEsIGFmdGVyIDYuMi40ODIpCitQcm9ibGVtOiAgICBTZWUgNi4yLjQ4Mi4KK1NvbHV0aW9uOiAgIEV4dHJhIHBhcnQgb2YgcGF0Y2ggNi4yLjQ4Mi4KK0ZpbGVzOgkgICAgc3JjL2d1aV9waG90b24uYywgc3JjL2d1aV93NDguYywgc3JjL29zX21zZG9zLmMsIHNyYy9vc19tc3dpbi5jCisKK1BhdGNoIDYuMi40ODQKK1Byb2JsZW06ICAgIE1TLVdpbmRvd3M6IFdpdGggdGhlIGluY2x1ZGVkIGRpZmYuZXhlLCBkaWZmZXJlbmNlcyBhZnRlciBhIENUUkwtWgorCSAgICBhcmUgbm90IHJlY29nbml6ZWQuICAoUGV0ZXIgS2VyZXN6dGVzKQorU29sdXRpb246ICAgV3JpdGUgdGhlIGZpbGVzIHdpdGggdW5peCBmaWxlZm9ybWF0IGFuZCBpbnZva2UgZGlmZiB3aXRoIC0tYmluYXJ5CisJICAgIGlmIHBvc3NpYmxlLgorRmlsZXM6CSAgICBzcmMvZGlmZi5jCisKK1BhdGNoIDYuMi40ODUKK1Byb2JsZW06ICAgIEEgQnVmV3JpdGVDbWQgYXV0b2NvbW1hbmQgY2Fubm90IGtub3cgaWYgIiEiIHdhcyB1c2VkIG9yIG5vdC4KKwkgICAgKEhhcmkgS3Jpc2huYSBEYXJhKQorU29sdXRpb246ICAgQWRkIHRoZSB2OmNtZGJhbmcgdmFyaWFibGUuCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL2V2YWwudHh0LCBzcmMvZXZhbC5jLCBzcmMvcHJvdG8vZXZhbC5wcm8sCisJICAgIHNyYy9maWxlaW8uYywgc3JjL3ZpbS5oCisKK1BhdGNoIDYuMi40ODYgKDYuMi40ODIpCitQcm9ibGVtOiAgICBEaWZmIGZvciBldmFsLmMgaXMgbWlzc2luZy4KK1NvbHV0aW9uOiAgIEFkZGl0aW9uIHRvIHBhdGNoIDYuMi40ODIuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4yLjQ4NyAoZXh0cmEsIGFmdGVyIDYuMi40NTYpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5ncyBmb3Igd3JvbmcgcHJvdG90eXBlLiAoQWxlamFuZHJvIExvcGV6IFZhbGVuY2lhKQorU29sdXRpb246ICAgRGVsZXRlIHRoZSBwcm90b3R5cGUgZm9yIEhhbmRsZV9XTV9Ob3RpZnkoKS4KK0ZpbGVzOgkgICAgc3JjL3Byb3RvL2d1aV93MzIucHJvCisKK1BhdGNoIDYuMi40ODgKK1Byb2JsZW06ICAgIE1pc3NpbmcgIikiIGluICouY2ggZmlsZXR5cGUgZGV0ZWN0aW9uLgorU29sdXRpb246ICAgQWRkIHRoZSAiKSIuICAoQ2lhcmFuIE1jQ3JlZXNoKQorRmlsZXM6CSAgICBydW50aW1lL2ZpbGV0eXBlLnZpbQorCitQYXRjaCA2LjIuNDg5CitQcm9ibGVtOiAgICBXaGVuIGFjY2lkZW50YWxseSBvcGVuaW5nIGEgc2Vzc2lvbiBpbiBWaW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbgorCSAgICBvcGVuZWQgaW4gYW5vdGhlciBWaW0gdGhlcmUgaXMgYSBsb25nIHJvdyBvZiBBVFRFTlRJT04gcHJvbXB0cy4KKwkgICAgTmVlZCB0byBxdWl0IGVhY2ggb2YgdGhlbSB0byBnZXQgb3V0LiAoUm9iZXJ0IFdlYmIpCitTb2x1dGlvbjogICBBZGQgdGhlICJBYm9ydCIgYWx0ZXJuYXRpdmUgdG8gdGhlIGRpYWxvZy4KK0ZpbGVzOgkgICAgc3JjL21lbWxpbmUuYworCitQYXRjaCA2LjIuNDkwCitQcm9ibGVtOiAgICBXaXRoICdwYXJhZ3JhcGgnIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYSBzaW5nbGUgZG90IGFzIGEKKwkgICAgcGFyYWdyYXBoIGJvdW5kYXJ5LiAgKERvcmFpIFNpdGFyYW0pCitTb2x1dGlvbjogICBBbGxvdyB1c2luZyAiICAiICh0d28gc3BhY2VzKSBpbiAncGFyYWdyYXBoJyB0byBtYXRjaCAiLiQiIG9yCisJICAgICIuICQiCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjIuNDkxCitQcm9ibGVtOiAgICBEZWNyZW1lbnRpbmcgYSBwb3NpdGlvbiBkb2Vzbid0IHRha2UgY2FyZSBvZiBtdWx0aS1ieXRlIGNoYXJzLgorU29sdXRpb246ICAgQWRqdXN0IHRoZSBjb2x1bW4gZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gIFJlbW92ZSBtYl9kZWMoKS4KKwkgICAgKFlhc3VoaXJvIE1hdHN1bW90bykKK0ZpbGVzOgkgICAgc3JjL21ieXRlLmMsIHNyYy9taXNjMi5jLCBzcmMvcHJvdG8vbWJ5dGUucHJvCisKK1BhdGNoIDYuMi40OTIKK1Byb2JsZW06ICAgIFdoZW4gdXNpbmcgIjpyZWRyYXciIHdoaWxlIHRoZXJlIGlzIGEgbWVzc2FnZSwgdGhlIG5leHQgIjplY2hvIgorCSAgICBzdGlsbCBjYXVzZXMgdGV4dCB0byBzY3JvbGwuIChZYXN1aGlybyBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBSZXNldCBtc2dfZGlkb3V0IGFuZCBtc2dfY29sLCBzbyB0aGF0IGFmdGVyICI6cmVkcmF3IiB0aGUgbmV4dAorCSAgICBtZXNzYWdlIG92ZXJ3cml0ZXMgYW4gZXhpc3Rpbmcgb25lLgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjIuNDkzCitQcm9ibGVtOiAgICAiQHgiIGRvZXNuJ3Qgd29yayB3aGVuICdpbnNlcnRtb2RlJyBpcyBzZXQuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBQdXQgInJlc3RhcnRfZWRpdCIgaW4gdGhlIHR5cGVhaGVhZCBidWZmZXIsIHNvIHRoYXQgaXQncyB1c2VkCisJICAgIGFmdGVyIGV4ZWN1dGluZyB0aGUgcmVnaXN0ZXIgY29udGVudHMuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjIuNDk0CitQcm9ibGVtOiAgICBVc2luZyBkaWZmIG1vZGUgd2l0aCB0d28gd2luZG93cywgd2hlbiBtb3ZpbmcgaG9yaXpvbnRhbGx5IGluCisJICAgIGluc2VydGVkIGxpbmVzLCBhIGZvbGQgaW4gdGhlIG90aGVyIHdpbmRvdyBtYXkgb3Blbi4KK1NvbHV0aW9uOiAgIENvbXB1dGUgdGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvdGhlciB3aW5kb3cgY29ycmVjdGx5LgorRmlsZXM6CSAgICBzcmMvZGlmZi5jCisKK1BhdGNoIDYuMi40OTUgKGV4dHJhLCBhZnRlciA2LjIuNDU2KQorUHJvYmxlbTogICAgV2luMzI6IFRoZSBmaWxlIGRpYWxvZyBkb2Vzbid0IHdvcmsgb24gV2luZG93cyA5NS4KK1NvbHV0aW9uOiAgIFB1dCB0aGUgd2lkZSBjb2RlIG9mIGd1aV9tY2hfYnJvd3NlKCkgaW4gZ3VpX21jaF9icm93c2VXKCkgYW5kIHVzZQorCSAgICBpdCBvbmx5IG9uIFdpbmRvd3MgTlQvMjAwMC9YUC4KK0ZpbGVzOgkgICAgc3JjL2d1aV93MzIuYywgc3JjL2d1aV93NDguYworCitQYXRjaCA2LjIuNDk2CitQcm9ibGVtOiAgICBGcmVlQlNEIDQueDogV2hlbiBjb21waWxlZCB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkgKFB5dGhvbikgYQorCSAgICBjb21wbGljYXRlZCBwYXR0ZXJuIG1heSBjYXVzZSBWaW0gdG8gY3Jhc2guICBDYXRjaGluZyB0aGUgc2lnbmFsCisJICAgIGRvZXNuJ3Qgd29yay4KK1NvbHV0aW9uOiAgIFdoZW4gY29tcGlsZWQgd2l0aCB0aHJlYWRzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBub3JtYWwgc3RhY2tzaXplCisJICAgIGxpbWl0LCB1c2UgdGhlIHNpemUgb2YgdGhlIGluaXRpYWwgc3RhY2suCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL2NvbmZpZy5oLmluLCBzcmMvY29uZmlndXJlLmluLAorCSAgICBzcmMvb3NfdW5peC5jCisKK1BhdGNoIDYuMi40OTcgKGV4dHJhKQorUHJvYmxlbTogICAgUnVzc2lhbiBtZXNzYWdlcyBhcmUgb25seSBhdmFpbGFibGUgaW4gb25lIGVuY29kaW5nLgorU29sdXRpb246ICAgQ29udmVydCB0aGUgbWVzc2FnZXMgdG8gTVMtV2luZG93cyBjb2RlcGFnZXMuIChWYXNzaWx5IFJhZ29zaW4pCitGaWxlczoJICAgIHNyYy9wby9NYWtlZmlsZQorCitQYXRjaCA2LjIuNDk4CitQcm9ibGVtOiAgICBOb24tbGF0aW4xIGhlbHAgZmlsZXMgYXJlIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQuCitTb2x1dGlvbjogICBTdXBwb3J0IHV0Zi04IGhlbHAgZmlsZXMgYW5kIGNvbnZlcnQgdGhlbSB0byAnZW5jb2RpbmcnIHdoZW4KKwkgICAgbmVlZGVkLgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjQ5OQorUHJvYmxlbTogICAgV2hlbiB3cml0aW5nIGEgZmlsZSBhbmQgaGFsdGluZyB0aGUgc3lzdGVtLCB0aGUgZmlsZSBtaWdodCBiZSBsb3N0CisJICAgIHdoZW4gdXNpbmcgYSBqb3VybmFsbGluZyBmaWxlIHN5c3RlbS4KK1NvbHV0aW9uOiAgIFVzZSBmc3luYygpIHRvIGZsdXNoIHRoZSBmaWxlIGRhdGEgdG8gZGlzayBhZnRlciB3cml0aW5nIGEgZmlsZS4KKwkgICAgKFJhZGltIEtvbGFyKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4yLjUwMCAoZXh0cmEpCitQcm9ibGVtOiAgICBUaGUgRE9TL01TLVdpbmRvd3MgdGhlIGluc3RhbGxlciBkb2Vzbid0IHVzZSB0aGUgLS1iaW5hcnkgZmxhZyBmb3IKKwkgICAgZGlmZi4KK1NvbHV0aW9uOiAgIEFkZCAtLWJpbmFyeSB0byB0aGUgZGlmZiBhcmd1bWVudCBpbiBNeURpZmYoKS4gKEFsZWphbmRybyBMb3Blei0KKwkgICAgVmFsZW5jaWEpCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmMKKworUGF0Y2ggNi4yLjUwMQorUHJvYmxlbTogICAgVmltIGRvZXMgbm90IGNvbXBpbGUgd2l0aCBNb3JwaE9TLgorU29sdXRpb246ICAgQWRkIGEgTWFrZWZpbGUgYW5kIGEgZmV3IGNoYW5nZXMgdG8gbWFrZSBWaW0gd29yayB3aXRoIE1vcnBoT1MuCisJICAgIChBbGkgQWtjYWFnYWMpCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29zX2FtaWdhLnR4dCwgc3JjL0lOU1RBTExhbWkudHh0LAorCSAgICBzcmMvTWFrZV9tb3JwaG9zLm1haywgc3JjL21lbWZpbGUuYywgc3JjL3Rlcm0uYworCitQYXRjaCA2LjIuNTAyCitQcm9ibGVtOiAgICBCdWlsZGluZyBmYWlscyBmb3IgZ2VuZXJhdGluZyBtZXNzYWdlIGZpbGVzLgorU29sdXRpb246ICAgQWRkIGR1bW15IG1lc3NhZ2UgZmlsZXMuCitGaWxlczoJICAgIHNyYy9wby9jYS5wbywgc3JjL3BvL3J1LnBvLCBzcmMvcG8vc3YucG8KKworUGF0Y2ggNi4yLjUwMworUHJvYmxlbTogICAgTWFjOiBDYW4ndCBjb21waWxlIE1hY1JvbWFuIGNvbnZlcnNpb25zIHdpdGhvdXQgdGhlIEdVSS4KK1NvbHV0aW9uOiAgIEFsc28gbGluayB3aXRoIHRoZSBDYXJib24gZnJhbWV3b3JrIGZvciB0aGUgdGVybWluYWwgdmVyc2lvbiwgZm9yCisJICAgIHRoZSBNYWNSb21hbiBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gKEVja2VoYXJkIEJlcm5zKQorCSAgICBSZW1vdmUgLWx0ZXJtY2FwIGZyb20gdGhlIEdVSSBsaW5rIGNvbW1hbmQsIGl0IGlzIG5vdCBuZWVkZWQuCitGaWxlczoJICAgIHNyYy9hdXRvL2NvbmZpZ3VyZSwgc3JjL01ha2VmaWxlLCBzcmMvY29uZmlndXJlLmluCisKK1BhdGNoIDYuMi41MDQKK1Byb2JsZW06ICAgIFZhcmlvdXMgcHJvYmxlbXMgd2l0aCAnY2luZGVudCcsIGFtb25nIHdoaWNoIHRoYXQgYQorCSAgICBsaXN0IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpcyBub3QgaW5kZW50ZWQgcHJvcGVybHkuCitTb2x1dGlvbjogICBGaXggdGhlIHdyb25nIGluZGVudGluZy4gIEltcHJvdmUgaW5kZW50aW5nIG9mIEMrKyBtZXRob2RzLgorCSAgICBBZGQgdGhlICdpJywgJ2InIGFuZCAnVycgb3B0aW9ucyB0byAnY2lub3B0aW9ucycuIChtb3N0bHkgYnkKKwkgICAgSGVsbXV0IFN0aWVnbGVyKQorCSAgICBJbXByb3ZlIGluZGVudGluZyBvZiBwcmVwcm9jZXNzb3ItY29udGludWF0aW9uIGxpbmVzLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9pbmRlbnQudHh0LCBzcmMvbWlzYzEuYywgc3JjL3Rlc3RkaXIvdGVzdDMuaW4sCisJICAgIHNyYy90ZXN0ZGlyL3Rlc3QzLm9rCisKK1BhdGNoIDYuMi41MDUKK1Byb2JsZW06ICAgIEhlbHAgZm9yIC1QIGFyZ3VtZW50IGlzIG1pc3NpbmcuIChSb25hbGQgSG9lbGx3YXJ0aCkKK1NvbHV0aW9uOiAgIEFkZCB0aGUgcGF0Y2ggdGhhdCB3YXMgbWlzc2luZyBpbiA2LjIuNDE5LgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9zdGFydGluZy50eHQKKworUGF0Y2ggNi4yLjUwNiAoZXh0cmEpCitQcm9ibGVtOiAgICBXaW4zMjogV2hlbiAnZW5jb2RpbmcnIGlzIGEgY29kZXBhZ2UgdGhlbiByZWFkaW5nIGEgdXRmLTggZmlsZQorCSAgICBvbmx5IHdvcmtzIHdoZW4gaWNvbnYgaXMgYXZhaWxhYmxlLiAgV3JpdGluZyBhIGZpbGUgaW4gYW5vdGhlcgorCSAgICBjb2RlcGFnZSB1c2VzIHRoZSB3cm9uZyBraW5kIG9mIGNvbnZlcnNpb24uCitTb2x1dGlvbjogICBVc2UgaW50ZXJuYWwgY29udmVyc2lvbiBmdW5jdGlvbnMuICBFbmFibGUgcmVhZGluZyBhbmQgd3JpdGluZworCSAgICBmaWxlcyB3aXRoICdmaWxlZW5jb2RpbmcnIGRpZmZlcmVudCBmcm9tICdlbmNvZGluZycgZm9yIGFsbCB2YWxpZAorCSAgICBjb2RlcGFnZXMgYW5kIHV0Zi04IHdpdGhvdXQgdGhlIG5lZWQgZm9yIGljb252LgorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMsIHNyYy90ZXN0ZGlyL01ha2VfZG9zLm1haywgc3JjL3Rlc3RkaXIvdGVzdDUyLmluLAorCSAgICBzcmMvdGVzdGRpci90ZXN0NTIub2sKKworUGF0Y2ggNi4yLjUwNworUHJvYmxlbTogICAgVGhlIG93bmVyc2hpcCBvZiB0aGUgZmlsZSB3aXRoIHRoZSBwYXNzd29yZCBmb3IgdGhlIE5ldEJlYW5zCisJICAgIGNvbm5lY3Rpb24gaXMgbm90IGNoZWNrZWQuICAiLW5iPXtmaWxlfSIgZG9lc24ndCB3b3JrIGZvciBHVEsuCitTb2x1dGlvbjogICBPbmx5IGFjY2VwdCB0aGUgZmlsZSB3aGVuIG93bmVkIGJ5IHRoZSB1c2VyIGFuZCBub3QgYWNjZXNzaWJsZSBieQorCSAgICBvdGhlcnMuICBEZXRlY3QgIi1uYj0iIGZvciBHVEsuCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jLCBzcmMvZ3VpX2d0a194MTEuYworCitQYXRjaCA2LjIuNTA4CitQcm9ibGVtOiAgICBXaW4zMjogInY6bGFuZyIgZG9lcyBub3Qgc2hvdyB0aGUgY3VycmVudCBsYW5ndWFnZSBmb3IgbWVzc2FnZXMgaWYKKwkgICAgaXQgZGlmZmVycyBmcm9tIHRoZSBvdGhlciBsb2NhbGUgc2V0dGluZ3MuCitTb2x1dGlvbjogICBVc2UgdGhlIHZhbHVlIG9mIHRoZSAkTENfTUVTU0FHRVMgZW52aXJvbm1lbnQgdmFyaWFibGUuCitGaWxlczoJICAgIHNyYy9leF9jbWRzMi5jCisKK1BhdGNoIDYuMi41MDkgKGFmdGVyIDYuMi41MDgpCitQcm9ibGVtOiAgICBDcmFzaCB3aGVuICRMQU5HIGlzIG5vdCBzZXQuCitTb2x1dGlvbjogICBBZGQgY2hlY2sgZm9yIE5VTEwgcG9pbnRlci4gKFJvbiBBYXJvbikKK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4yLjUxMCAoYWZ0ZXIgNi4yLjUwNykKK1Byb2JsZW06ICAgIFdhcm5pbmcgZm9yIHBvaW50ZXIgY29udmVyc2lvbi4KK1NvbHV0aW9uOiAgIEFkZCBhIHR5cGUgY2FzdC4KK0ZpbGVzOgkgICAgc3JjL2d1aV9ndGtfeDExLmMKKworUGF0Y2ggNi4yLjUxMQorUHJvYmxlbTogICAgVGFncyBpbiBSdXNzaWFuIGhlbHAgZmlsZXMgYXJlIGluIHV0Zi04IGVuY29kaW5nLCB3aGljaCBtYXkgYmUKKwkgICAgZGlmZmVyZW50IGZyb20gJ2VuY29kaW5nJy4KK1NvbHV0aW9uOiAgIFVzZSB0aGUgIlRBR19GSUxFX0VOQ09ESU5HIiBmaWVsZCBpbiB0aGUgdGFncyBmaWxlIHRvIHNwZWNpZnkgdGhlCisJICAgIGVuY29kaW5nIG9mIHRoZSB0YWdzLiAgQ29udmVydCBoZWxwIHRhZ3MgZnJvbSAnZW5jb2RpbmcnIHRvIHRoZQorCSAgICB0YWcgZmlsZSBlbmNvZGluZyB3aGVuIHNlYXJjaGluZyBmb3IgbWF0Y2hlcywgZG8gdGhlIHJldmVyc2Ugd2hlbgorCSAgICBsaXN0aW5nIGhlbHAgdGFncy4KK0ZpbGVzOgkgICAgcnVudGltZS9kb2MvdGFnc3JjaC50eHQsIHNyYy9leF9jbWRzLmMsIHNyYy90YWcuYworCitQYXRjaCA2LjIuNTEyCitQcm9ibGVtOiAgICBUcmFuc2xhdGluZyAiXCJcbiIgaXMgdXNlbGVzcy4gKEdlcmZyaWVkIEZ1Y2hzKQorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBfKCkgYXJvdW5kIGl0LgorRmlsZXM6CSAgICBzcmMvbWFpbi5jLCBzcmMvbWVtbGluZS5jCisKK1BhdGNoIDYuMi41MTMgKGFmdGVyIDYuMi41MDcpCitQcm9ibGVtOiAgICBOZXRCZWFuczogdGhlIGNoZWNrIGZvciBvd25pbmcgdGhlIGNvbm5lY3Rpb24gaW5mbyBmaWxlIGNhbiBiZQorCSAgICBzaW1wbGlmaWVkLiAoTmlrb2xheSBNb2xjaGFub3YpCitTb2x1dGlvbjogICBPbmx5IGNoZWNrIGlmIHRoZSBhY2Nlc3MgbW9kZSBpcyByaWdodC4KK0ZpbGVzOgkgICAgc3JjL25ldGJlYW5zLmMKKworUGF0Y2ggNi4yLjUxNAorUHJvYmxlbTogICAgV2hlbiBhIGhpZ2hsaWdodC9zeW50YXggZ3JvdXAgbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMKKwkgICAgdGhlcmUgaXMgbm8gd2FybmluZy4KK1NvbHV0aW9uOiAgIEFkZCBhbiBlcnJvciBmb3IgdW5wcmludGFibGUgY2hhcmFjdGVycyBhbmQgYSB3YXJuaW5nIGZvciBvdGhlcgorCSAgICBpbnZhbGlkIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHNyYy9zeW50YXguYworCitQYXRjaCA2LjIuNTE1CitQcm9ibGVtOiAgICBXaGVuIHVzaW5nIHRoZSBvcHRpb25zIHdpbmRvdyAnc3dhcGZpbGUnIGlzIHJlc2V0LgorU29sdXRpb246ICAgVXNlICI6c2V0bG9jYWwiIGluc3RlYWQgb2YgIjpzZXQiLgorRmlsZXM6CSAgICBydW50aW1lL29wdHdpbi52aW0KKworUGF0Y2ggNi4yLjUxNgorUHJvYmxlbTogICAgVGhlIHNpZ24gY29sdW1uIGNhbm5vdCBiZSBzZWVuLCBsb29rcyBsaWtlIHRoZXJlIGFyZSB0d28gc3BhY2VzCisJICAgIGJlZm9yZSB0aGUgdGV4dC4gKFJvYiBSZXR0ZXIpCitTb2x1dGlvbjogICBBZGQgdGhlIFNpZ25Db2x1bW4gaGlnaGxpZ2h0IGdyb3VwLgorRmlsZXM6CSAgICBydW50aW1lL2RvYy9vcHRpb25zLnR4dCwgcnVudGltZS9kb2Mvc2lnbi50eHQsIHNyYy9vcHRpb24uYywKKwkgICAgc3JjL3NjcmVlbi5jLCBzcmMvc3ludGF4LmMsIHNyYy92aW0uaAorCitQYXRjaCA2LjIuNTE3CitQcm9ibGVtOiAgICBVc2luZyAicioiIGluIFZpc3VhbCBtb2RlIG9uIG11bHRpLWJ5dGUgY2hhcmFjdGVycyByZXBsYWNlcworCSAgICB0b28gbWFueSBjaGFyYWN0ZXJzLiAgSW4gVmlzdWFsIEJsb2NrIG1vZGUgcmVwbGFjaW5nIHdpdGggYQorCSAgICBtdWx0aS1ieXRlIGNoYXJhY3RlciBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBBZGp1c3QgdGhlIG9wZXJhdG9yIGVuZCBmb3IgdGhlIGRpZmZlcmVuY2UgaW4gYnl0ZSBsZW5ndGggb2YgdGhlCisJICAgIG9yaWdpbmFsIGFuZCB0aGUgcmVwbGFjZWQgY2hhcmFjdGVyLiAgSW5zZXJ0IGFsbCBieXRlcyBvZiBhCisJICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVyLCB0YWtlIGNhcmUgb2YgZG91YmxlLXdpZGUgY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL29wcy5jCisKK1BhdGNoIDYuMi41MTgKK1Byb2JsZW06ICAgIExhc3QgbGluZSBvZiBhIHdpbmRvdyBpcyBub3QgdXBkYXRlZCBhZnRlciB1c2luZyAiSiIgYW5kIHRoZW4gIkQiLgorCSAgICAoQWRyaSBWZXJob2VmKQorU29sdXRpb246ICAgV2hlbiBubyBsaW5lIGlzIGZvdW5kIGJlbG93IGEgY2hhbmdlIHRoYXQgZG9lc24ndCBuZWVkIHVwZGF0aW5nLAorCSAgICB1cGRhdGUgYWxsIGxpbmVzIGJlbG93IHRoZSBjaGFuZ2UuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYworCitQYXRjaCA2LjIuNTE5CitQcm9ibGVtOiAgICBNYWM6IGNhbm5vdCByZWFkL3dyaXRlIGZpbGVzIGluIE1hY1JvbWFuIGZvcm1hdC4KK1NvbHV0aW9uOiAgIERvIGludGVybmFsIGNvbnZlcnNpb24gZnJvbS90byBNYWNSb21hbiB0by9mcm9tIHV0Zi04IGFuZCBsYXRpbjEuCisJICAgIChFY2tlaGFyZCBCZXJucykKK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuMi41MjAgKGV4dHJhKQorUHJvYmxlbTogICAgVGhlIE5TSVMgaW5zdGFsbGVyIGlzIG91dGRhdGVkLgorU29sdXRpb246ICAgTWFrZSBpdCB3b3JrIHdpdGggTlNJUyAyLjAuICBBbHNvIGluY2x1ZGUgY29uc29sZSBleGVjdXRhYmxlcyBmb3IKKwkgICAgV2luIDk1Lzk4L01FIGFuZCBXaW4gTlQvMjAwMC9YUC4gIFVzZSBMWldBIGNvbXByZXNzaW9uLiAgVXNlCisJICAgICIvb25hbWUiIHRvIGF2b2lkIGhhdmluZyB0byByZW5hbWUgZmlsZXMgYmVmb3JlIHJ1bm5pbmcgTlNJUy4KK0ZpbGVzOgkgICAgTWFrZWZpbGUsIG5zaXMvZ3ZpbS5uc2kKKworUGF0Y2ggNi4yLjUyMQorUHJvYmxlbTogICAgV2hlbiB1c2luZyBzaWxlbnQgRXggbW9kZSB0aGUgImNoYW5naW5nIGEgcmVhZG9ubHkgZmlsZSIgd2FybmluZworCSAgICBpcyBvbWl0dGVkIGJ1dCB0aGUgb25lIHNlY29uZCB3YWl0IGlzbid0LiAoWWFrb3YgTGVybmVyKQorU29sdXRpb246ICAgU2tpcCB0aGUgZGVsYXkgd2hlbiAic2lsZW50X21vZGUiIGlzIHNldC4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4yLjUyMgorUHJvYmxlbTogICAgR1VJOiB3aGVuIGNoYW5naW5nICdjbWRoZWlnaHQnIGluIHRoZSBndmltcmMgZmlsZSB0aGUgd2luZG93CisJICAgIGxheW91dCBpcyBtZXNzZWQgdXAuIChLZWl0aCBEYXJ0KQorU29sdXRpb246ICAgU2tpcCB1cGRhdGluZyB0aGUgd2luZG93IGxheW91dCB3aGVuIGNoYW5naW5nICdjbWRoZWlnaHQnIHdoaWxlCisJICAgIHN0aWxsIHN0YXJ0aW5nIHVwLgorRmlsZXM6CSAgICBzcmMvb3B0aW9uLmMKKworUGF0Y2ggNi4yLjUyMworUHJvYmxlbTogICAgV2hlbiBsb2FkaW5nIGEgc2Vzc2lvbiBhbmQgYWJvcnRpbmcgd2hlbiBhIHN3YXAgZmlsZSBhbHJlYWR5CisJICAgIGV4aXN0cywgdGhlIHVzZXIgaXMgbGVmdCB3aXRoIHVzZWxlc3Mgd2luZG93cy4gKFJvYmVydCBXZWJiKQorU29sdXRpb246ICAgTG9hZCBvbmUgZmlsZSBiZWZvcmUgY3JlYXRpbmcgdGhlIHdpbmRvd3MuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuMi41MjQgKGV4dHJhLCBhZnRlciA2LjIuNTIwKQorUHJvYmxlbTogICAgV2luMzI6ICh1bilpbnN0YWxsaW5nIGd2aW1leHQuZGxsIG1heSBmYWlsIGlmIGl0IHdhcyB1c2VkLgorCSAgICBUaGUgZGVza3RvcCBhbmQgc3RhcnQgbWVudSBsaW5rcyBhcmUgY3JlYXRlZCBmb3IgdGhlIGN1cnJlbnQgdXNlcgorCSAgICBpbnN0ZWFkIG9mIGFsbCB1c2Vycy4KKwkgICAgVXNpbmcgdGhlIGhvbWUgZGlyZWN0b3J5IGFzIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgbGlua3MgaXMgYQorCSAgICBiYWQgaWRlYSBmb3IgbXVsdGktdXNlciBzeXN0ZW1zLgorCSAgICBDYW5ub3QgdXNlIFZpbSBmcm9tIHRoZSAiT3BlbiBXaXRoLi4uIiBtZW51LgorU29sdXRpb246ICAgRm9yY2UgYSByZWJvb3QgaWYgbmVjZXNzYXJ5LiAoQWxlamFuZHJvIExvcGV6LVZhbGVuY2lhKSAgQWxzbyB1c2UKKwkgICAgbWFjcm9zIGZvciB0aGUgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgYW5kIHJ1bnRpbWUgZmlsZXMuICBVc2UKKwkgICAgIkNTSURMX0NPTU1PTl8qIiBpbnN0ZWFkIG9mICJDU0lETF8qIiB3aGVuIHBvc3NpYmxlLgorCSAgICBEbyBub3Qgc3BlY2lmeSBhIHdvcmtpbmcgZGlyZWN0b3J5IGluIHRoZSBsaW5rcy4KKwkgICAgQWRkIFZpbSB0byB0aGUgIk9wZW4gV2l0aC4uLiIgbWVudS4gKEdpdXNlcHBlIEJpbG90dGEpCitGaWxlczoJICAgIG5zaXMvZ3ZpbS5uc2ksIHNyYy9kb3NpbnN0LmMsIHNyYy9kb3NpbnN0LmgsIHNyYy91bmluc3RhbC5jCisKK1BhdGNoIDYuMi41MjUKK1Byb2JsZW06ICAgIFdoZW4gdGhlIGhpc3RvcnkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgbGluZSAiOmhpc3RvcnkiIGNhdXNlcyBhCisJICAgIGNyYXNoLiAoVm9sa2VyIEtpZWZlbCkKK1NvbHV0aW9uOiAgIFNob3J0ZW4gdGhlIGhpc3RvcnkgZW50cnkgdG8gZml0IGl0IGluIG9uZSBsaW5lLgorRmlsZXM6CSAgICBzcmMvZXhfZ2V0bG4uYworCitQYXRjaCA2LjIuNTI2CitQcm9ibGVtOiAgICBXaGVuIHM6bGFuZyBpcyAiamEiIHRoZSBKYXBhbmVzZSBtZW51cyBhcmUgbm90IHVzZWQuCitTb2x1dGlvbjogICBBZGQgJ2VuY29kaW5nJyB0byB0aGUgbGFuZ3VhZ2Ugd2hlbiB0aGVyZSBpcyBubyBjaGFyc2V0LgorRmlsZXM6CSAgICBydW50aW1lL21lbnUudmltCisKK1BhdGNoIDYuMi41MjcKK1Byb2JsZW06ICAgIFRoZSAyaHRtbCBzY3JpcHQgdXNlcyAiOndpbmNtZCBwIiwgd2hpY2ggYnJlYWtzIHdoZW4gdXNpbmcgc29tZQorCSAgICBhdXRvY29tbWFuZHMuCitTb2x1dGlvbjogICBSZW1lbWJlciB0aGUgd2luZG93IG51bWJlcnMgYW5kIGp1bXAgdG8gdGhlbSB3aXRoICI6d2luY21kIHciLgorCSAgICBBbHNvIGFkZCBYSFRNTCBzdXBwb3J0LiAoUGFuYWdpb3RpcyBJc3NhcmlzKQorRmlsZXM6CSAgICBydW50aW1lL3N5bnRheC8yaHRtbC52aW0KKworUGF0Y2ggNi4yLjUyOAorUHJvYmxlbTogICAgTmV0QmVhbnM6IENoYW5nZXMgb2YgdGhlICJ+IiBjb21tYW5kIGFyZSBub3QgcmVwb3J0ZWQuCitTb2x1dGlvbjogICBDYWxsIG5ldGJlYW5zX2luc2VydGVkKCkgYWZ0ZXIgcGVyZm9ybWluZyAifiIuIChHb3Jkb24gUHJpZXVyKQorCSAgICBBbHNvIGNoYW5nZSBOZXRCZWFucyBkZWJ1Z2dpbmcgdG8gYXBwZW5kIHRvIHRoZSBsb2cgZmlsZS4KKwkgICAgQWxzbyBmaXggdGhhdCAifiIgaW4gVmlzdWFsIGJsb2NrIG1vZGUgY2hhbmdlcyB0b28gbXVjaCBpZiB0aGVyZQorCSAgICBhcmUgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLgorRmlsZXM6CSAgICBzcmMvbmJkZWJ1Zy5jLCBzcmMvbm9ybWFsLmMsIHNyYy9vcHMuYworCitQYXRjaCA2LjIuNTI5IChleHRyYSkKK1Byb2JsZW06ICAgIFZpc1ZpbSBvbmx5IHdvcmtzIGZvciBBZG1pbi4gIERvaW5nIGl0IGZvciBvbmUgdXNlciBkb2Vzbid0IHdvcmsuCisJICAgIChBbGV4YW5kcmUgR291cmF1ZCkKK1NvbHV0aW9uOiAgIFdoZW4gcmVnaXN0ZXJpbmcgdGhlIG1vZHVsZSBmYWlscywgc2ltcGx5IGNvbnRpbnVlLgorRmlsZXM6CSAgICBzcmMvVmlzVmltL1Zpc1ZpbS5jcHAKKworUGF0Y2ggNi4yLjUzMAorUHJvYmxlbTogICAgV2FybmluZyBmb3IgbWlzc2luZyBwcm90b3R5cGUgb24gdGhlIEFtaWdhLgorU29sdXRpb246ICAgSW5jbHVkZSB0aW1lLmgKK0ZpbGVzOgkgICAgc3JjL3ZlcnNpb24uYworCitQYXRjaCA2LjIuNTMxCitQcm9ibGVtOiAgICBJbiBzaWxlbnQgZXggbW9kZSBubyBtZXNzYWdlcyBhcmUgZ2l2ZW4sIHdoaWNoIG1ha2VzIGRlYnVnZ2luZworCSAgICB2ZXJ5IGRpZmZpY3VsdC4KK1NvbHV0aW9uOiAgIERvIG91dHB1dCBtZXNzYWdlcyB3aGVuICd2ZXJib3NlJyBpcyBzZXQuCitGaWxlczoJICAgIHNyYy9tZXNzYWdlLmMsIHNyYy91aS5jCisKK1BhdGNoIDYuMi41MzIgKGV4dHJhKQorUHJvYmxlbTogICAgQ29tcGlsaW5nIGZvciBXaW4zMnMgd2l0aCBWQyA0LjEgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgRG9uJ3QgdXNlIENQX1VURjggaWYgaXQncyBub3QgZGVmaW5lZC4gIERvbid0IHVzZSBDU0lETF9DT01NT04qCisJICAgIHdoZW4gbm90IGRlZmluZWQuCitGaWxlczoJICAgIHNyYy9kb3NpbnN0LmgsIHNyYy9maWxlaW8uYworCitXaW4zMiBjb25zb2xlOiBBZnRlciBwYXRjaCA2LjIuMzk4IEV4IG1vZGUgZGlkIG5vdCB3b3JrLiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorCitQYXRjaCA2LjNhLjAwMQorUHJvYmxlbTogICAgV2luMzI6IGlmIHRlc3RpbmcgZm9yIHRoZSAiLS1iaW5hcnkiIG9wdGlvbiBmYWlscywgZGlmZiBpc24ndCB1c2VkCisJICAgIGF0IGFsbC4KK1NvbHV0aW9uOiAgIEhhbmRsZSB0aGUgIm9rIiBmbGFnIHByb3Blcmx5LiAoWWFzdWhpcm8gTWF0c3Vtb3RvKQorRmlsZXM6CSAgICBzcmMvZGlmZi5jCisKK1BhdGNoIDYuM2EuMDAyCitQcm9ibGVtOiAgICBOZXRCZWFuczogQW4gaW5zZXJ0IGNvbW1hbmQgZnJvbSBOZXRCZWFucyBiZXlvbmQgdGhlIGVuZCBvZiBhCisJICAgIGJ1ZmZlciBjcmFzaGVzIFZpbS4gKFhhdmllciBkZSBHYXllKQorU29sdXRpb246ICAgVXNlIGEgbG9jYWwgcG9zX1Qgc3RydWN0dXJlIGZvciB0aGUgcG9zaXRpb24uCitGaWxlczoJICAgIHNyYy9uZXRiZWFucy5jCisKK1BhdGNoIDYuM2EuMDAzCitQcm9ibGVtOiAgICBFMzE1IGVycm9yIHdpdGggYXV0by1mb3JtYXR0aW5nIGNvbW1lbnRzLiAoSGVucnkgVmFuIFJvZXNzZWwpCitTb2x1dGlvbjogICBQYXNzIHRoZSBsaW5lIG51bWJlciB0byBzYW1lX2xlYWRlcigpLgorRmlsZXM6CSAgICBzcmMvb3BzLmMKKworUGF0Y2ggNi4zYS4wMDQKK1Byb2JsZW06ICAgIFRlc3QzMiBmYWlscyBvbiBXaW5kb3dzIFhQIGZvciB0aGUgREpHUFAgdmVyc2lvbi4gIFJlbmFtaW5nCisJICAgIHRlc3QxMS5vdXQgZmFpbHMuCitTb2x1dGlvbjogICBEb24ndCB0cnkgcmVuYW1pbmcsIGNyZWF0ZSBuZXcgZmlsZXMgdG8gdXNlIGZvciB0aGUgdGVzdC4KK0ZpbGVzOgkgICAgc3JjL3Rlc3RkaXIvdGVzdDMyLmluLCBzcmMvdGVzdGRpci90ZXN0MzIub2sKKworUGF0Y2ggNi4zYS4wMDUKK1Byb2JsZW06ICAgICI6Y2hlY2twYXRoISIgZG9lcyBub3QgdXNlICdpbmNsdWRlZXhwcicuCitTb2x1dGlvbjogICBVc2UgYSBmaWxlIG5hbWUgdGhhdCB3YXMgZm91bmQgZGlyZWN0bHkuICBXaGVuIGEgZmlsZSB3YXMgbm90CisJICAgIGZvdW5kIGFuZCB0aGUgbG9jYXRlZCBuYW1lIGlzIGVtcHR5LCB1c2UgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjNhLjAwNgorUHJvYmxlbTogICAgInlpcCIgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgeWFua2VkIGxpbmUsIGJ1dCBub3QgdG8gdGhlCisJICAgIGZpcnN0IGNvbHVtbi4gIExvb2tzIGxpa2Ugbm90IGFsbCB0ZXh0IHdhcyB5YW5rZWQuIChKZW5zIFBhdWx1cykKK1NvbHV0aW9uOiAgIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgY29sdW1uLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4zYS4wMDcKK1Byb2JsZW06ICAgICdjaW5kZW50JyByZWNvZ25pemVzICJlbnVtIiBidXQgbm90ICJ0eXBlZGVmIGVudW0iLgorU29sdXRpb246ICAgU2tpcCBvdmVyICJ0eXBlZGVmIiBiZWZvcmUgY2hlY2tpbmcgZm9yICJlbnVtIi4gKEhlbG11dCBTdGllZ2xlcikKKwkgICAgQWxzbyBhdm9pZCB0aGF0IHNlYXJjaGluZyBmb3IgdGhpcyBpdGVtIGdvZXMgdG9vIGZhciBiYWNrLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYywgc3JjL3Rlc3RkaXIvdGVzdDMuaW4sIHNyYy90ZXN0ZGlyL3Rlc3QzLm9rCisKK1BhdGNoIDYuM2EuMDA4IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbmRvd3MgOTg6IFNvbWUgb2YgdGhlIHdpZGUgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQsCisJICAgIHJlc3VsdGluZyBpbiBmaWxlIEkvTyB0byBmYWlsLiAgVGhpcyBkZXBlbmRzIG9uIHdoYXQgVW5pY29kZQorCSAgICBzdXBwb3J0IGlzIGluc3RhbGxlZC4KK1NvbHV0aW9uOiAgIEhhbmRsZSB0aGUgZmFpbHVyZSBhbmQgZmFsbCBiYWNrIHRvIG5vbi13aWRlIGZ1bmN0aW9ucy4KK0ZpbGVzOgkgICAgc3JjL29zX3dpbjMyLmMKKworUGF0Y2ggNi4zYS4wMDkKK1Byb2JsZW06ICAgIFdpbjMyOiBDb21wbGV0aW9uIG9mIGZpbGVuYW1lcyBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdoZW4KKwkgICAgJ2VuY29kaW5nJyBkaWZmZXJzIGZyb20gdGhlIGFjdGl2ZSBjb2RlIHBhZ2UuCitTb2x1dGlvbjogICBVc2Ugd2lkZSBmdW5jdGlvbnMgZm9yIGV4cGFuZGluZyB3aWxkY2FyZHMgd2hlbiBhcHByb3ByaWF0ZS4KK0ZpbGVzOgkgICAgc3JjL21pc2MxLmMKKworUGF0Y2ggNi4zYS4wMTAgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IENoYXJhY3RlcnMgaW4gdGhlIHdpbmRvdyB0aXRsZSB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gdGhlCisJICAgIGFjdGl2ZSBjb2RlcGFnZSBhcmUgcmVwbGFjZWQgYnkgYSBxdWVzdGlvbiBtYXJrLgorU29sdXRpb246ICAgVXNlIERlZldpbmRvd1Byb2NXKCkgaW5zdGVhZCBvZiBEZWZXaW5kb3dQcm9jKCkgd2hlbiBwb3NzaWJsZS4KK0ZpbGVzOgkgICAgc3JjL2dsYmxfaW1lLmNwcCwgc3JjL2dsb2JhbHMuaCwgc3JjL3Byb3RvL2d1aV93MTYucHJvLAorCSAgICBzcmMvcHJvdG8vZ3VpX3czMi5wcm8sIHNyYy9ndWlfdzE2LmMsIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4zYS4wMTEKK1Byb2JsZW06ICAgIFVzaW5nIHRoZSBleHBsb3JlciBwbHVnaW4gY2hhbmdlcyBhIGxvY2FsIGRpcmVjdG9yeSB0byB0aGUgZ2xvYmFsCisJICAgIGRpcmVjdG9yeS4KK1NvbHV0aW9uOiAgIERvbid0IHVzZSAiOmNoZGlyIiB0byByZXN0b3JlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE1ha2UKKwkgICAgImV4cGFuZCgnJTpwJykiIHJlbW92ZSAiLy4uLyIgYW5kICIvLi8iIGl0ZW1zIGZyb20gdGhlIHBhdGguCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL2V4cGxvcmVyLnZpbSwgc3JjL2V2YWwuYywgc3JjL29zX3VuaXguYworCitQYXRjaCA2LjNhLjAxMiAoZXh0cmEpCitQcm9ibGVtOiAgICBPbiBXaW5kb3dzIDk4IHRoZSBpbnN0YWxsZXIgZG9lc24ndCB3b3JrLCBkb24ndCBldmVuIGdldCB0aGUgIkkKKwkgICAgYWdyZWUiIGJ1dHRvbi4gIFRoZSBjaGVjayBmb3IgdGhlIHBhdGggZW5kaW5nIGluICJ2aW0iIG1ha2VzIHRoZQorCSAgICBicm93c2UgZGlhbG9nIGhhcmQgdG8gdXNlLiAgVGhlIGRlZmF1bHQgcGF0aCB3aGVuIG5vIHByZXZpb3VzIFZpbQorCSAgICBpcyBpbnN0YWxsZWQgaXMgImM6XHZpbSIgaW5zdGVhZCBvZiAiYzpcUHJvZ3JhbSBGaWxlc1xWaW0iLgorU29sdXRpb246ICAgUmVtb3ZlIHRoZSBiYWNrZ3JvdW5kIGdyYWRpZW50IGNvbW1hbmQuICBDaGFuZ2UgdGhlCisJICAgIC5vblZlcmlmeUluc3REaXIgZnVuY3Rpb24gdG8gYSBsZWF2ZSBmdW5jdGlvbiBmb3IgdGhlIGRpcmVjdG9yeQorCSAgICBwYWdlLiAgRG9uJ3QgbGV0IHRoZSBpbnN0YWxsIHByb2dyYW0gZGVmYXVsdCB0byBjOlx2aW0gd2hlbiBubworCSAgICBwYXRoIGNvdWxkIGJlIGZvdW5kLgorRmlsZXM6CSAgICBuc2lzL2d2aW0ubnNpLCBzcmMvZG9zaW5zdC5jCisKK1BhdGNoIDYuM2EuMDEzIChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBDaGFyYWN0ZXJzIGluIHRoZSBtZW51IHRoYXQgYXJlIG5vdCBpbiB0aGUgYWN0aXZlIGNvZGVwYWdlCisJICAgIGFyZSBnYXJibGVkLgorU29sdXRpb246ICAgQ29udmVydCBtZW51IHN0cmluZ3MgZnJvbSAnZW5jb2RpbmcnIHRvIHRoZSBhY3RpdmUgY29kZXBhZ2UuCitGaWxlczoJICAgIHNyYy9ndWlfdzMyLmMsIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4zYS4wMTQKK1Byb2JsZW06ICAgIFVzaW5nIG11bHRpLWJ5dGUgdGV4dCBhbmQgaGlnaGxpZ2h0aW5nIGluIGEgc3RhdHVzbGluZSBjYXVzZXMgZ2FwcworCSAgICB0byBhcHBlYXIuIChIZWxtdXQgU3RpZWdsZXIpCitTb2x1dGlvbjogICBBZHZhbmNlIHRoZSBjb2x1bW4gYnkgdGV4dCB3aWR0aCBpbnN0ZWFkIG9mIG51bWJlciBvZiBieXRlcy4gIEFkZAorCSAgICB0aGUgdmltX3N0cm5zaXplKCkgZnVuY3Rpb24uCitGaWxlczoJICAgIHNyYy9jaGFyc2V0LmMsIHNyYy9wcm90by9jaGFyc2V0LnBybywgc3JjL3NjcmVlbi5jCisKK1BhdGNoIDYuM2EuMDE1CitQcm9ibGVtOiAgICBVc2luZyB0aGUgInNlbGVjdCBhbGwiIG1lbnUgaXRlbSB3aGVuICdpbnNlcnRtb2RlJyBpcyBzZXQgYW5kCisJICAgIGNsaWNraW5nIHRoZSBtb3VzZSBidXR0b24gZG9lc24ndCByZXR1cm4gdG8gSW5zZXJ0IG1vZGUuICBUaGUKKwkgICAgQnVmZmVycy9EZWxldGUgbWVudSBkb2Vzbid0IG9mZmVyIGEgY2hvaWNlIHRvIGFiYW5kb24gYSBjaGFuZ2VkCisJICAgIGJ1ZmZlci4gIChKZW5zIFBhdWx1cykKK1NvbHV0aW9uOiAgIERvbid0IHVzZSBDVFJMLVwgQ1RSTC1OLiAgQWRkICI6Y29uZmlybSIgZm9yIHRoZSBCdWZmZXJzIG1lbnUKKwkgICAgaXRlbXMuCitGaWxlczoJICAgIHJ1bnRpbWUvbWVudS52aW0KKworUGF0Y2ggNi4zYS4wMTYKK1Byb2JsZW06ICAgIEFmdGVyIGNhbmNlbGxpbmcgdGhlICI6Y29uZmlybSIgZGlhbG9nIHRoZSBlcnJvciBtZXNzYWdlIGFuZAorCSAgICBoaXQtZW50ZXIgcHJvbXB0IG1heSBub3QgYmUgZGlzcGxheWVkIHByb3Blcmx5LgorU29sdXRpb246ICAgRmx1c2ggb3V0cHV0IGFmdGVyIHNob3dpbmcgdGhlIGRpYWxvZy4KK0ZpbGVzOgkgICAgc3JjL21lc3NhZ2UuYworCitQYXRjaCA2LjNhLjAxNworUHJvYmxlbTogICAgc2VydmVybmFtZSgpIGRvZXNuJ3Qgd29yayB3aGVuIFZpbSB3YXMgc3RhcnRlZCB3aXRoIHRoZSAiLVgiCisJICAgIGFyZ3VtZW50IG9yIHdoZW4gdGhlICJleGNsdWRlIiBpbiAnY2xpcGJvYXJkJyBtYXRjaGVzIHRoZSB0ZXJtaW5hbAorCSAgICBuYW1lLiAgKFJvYmVydCBOb3dvdG5pYWspCitTb2x1dGlvbjogICBGb3JjZSBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlciB3aGVuIHVzaW5nIGNsaWVudC1zZXJ2ZXIKKwkgICAgY29tbWFuZHMuCitGaWxlczoJICAgIHNyYy9ldmFsLmMsIHNyYy9nbG9iYWxzLmgsIHNyYy9vc191bml4LmMKKworUGF0Y2ggNi4zYS4wMTggKGFmdGVyIDYuM2EuMDE3KQorUHJvYmxlbTogICAgQ29tcGlsZXIgd2FybmluZyBmb3IgcmV0dXJuIHZhbHVlIG9mIG1ha2VfY29ubmVjdGlvbigpLgorU29sdXRpb246ICAgVXNlIHZvaWQgcmV0dXJuIHR5cGUuCitGaWxlczoJICAgIHNyYy9ldmFsLmMKKworUGF0Y2ggNi4zYS4wMTkgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IHR5cGluZyBub24tbGF0aW4xIGNoYXJhY3RlcnMgZG9lc24ndCB3b3JrLgorU29sdXRpb246ICAgSW52b2tlIF9PbkNoYXIoKSBkaXJlY3RseSB0byBhdm9pZCB0aGF0IHRoZSBhcmd1bWVudCBpcyB0cnVuY2F0ZWQKKwkgICAgdG8gYSBieXRlLiAgQ29udmVydCB0aGUgVVRGLTE2IGNoYXJhY3RlciB0byBieXRlcyBhY2NvcmRpbmcgdG8KKwkgICAgJ2VuY29kaW5nJyBhbmQgaWdub3JlICd0ZXJtZW5jb2RpbmcnLiAgU2FtZSBmb3IgX09uU3lzQ2hhcigpLgorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jLCBzcmMvZ3VpX3c0OC5jCisKK1BhdGNoIDYuM2EuMDIwIChleHRyYSkKK1Byb2JsZW06ICAgIE1pc3Npbmcgc3VwcG9ydCBmb3IgQVJPUyAoQW1pZ2FPUyByZWltcGxlbWVudGF0aW9uKS4gIEFtaWdhIEdVSQorCSAgICBkb2Vzbid0IHdvcmsuCitTb2x1dGlvbjogICBBZGQgQVJPUyBzdXBwb3J0LiAgKEFkYW0gQ2hvZG9yb3dza2kpCisJICAgIEZpeCBBbWlnYSBHVUkgcHJvYmxlbXMuIChHZW9yZyBTdGVnZXIsIEFsaSBBa2NhYWdhYykKK0ZpbGVzOgkgICAgTWFrZWZpbGUsIHNyYy9NYWtlX2Fyb3MubWFrLCBzcmMvZ3VpX2FtaWdhLmMsIHNyYy9ndWlfYW1pZ2EuaCwKKwkgICAgc3JjL21lbWZpbGUuYywgc3JjL29zX2FtaWdhLmMsIHNyYy90ZXJtLmMKKworUGF0Y2ggNi4zYS4wMjEgKGFmdGVyIDYuM2EuMDE3KQorUHJvYmxlbTogICAgQ2FuJ3QgY29tcGlsZSB3aXRoIFgxMSBidXQgd2l0aG91dCBHVUkuCitTb2x1dGlvbjogICBQdXQgdXNlIG9mICJndWkuaW5fdXNlIiBpbnNpZGUgYW4gI2lmZGVmLgorRmlsZXM6CSAgICBzcmMvZXZhbC5jCisKK1BhdGNoIDYuM2EuMDIyCitQcm9ibGVtOiAgICBXaGVuIHR5cGluZyBUYWJzIHdoZW4gJ3NvZnR0YWJzdG9wJyBpcyB1c2VkIGFuZCAnbGlzdCcgaXMgc2V0IGEKKwkgICAgdGFiIGlzIGNvdW50ZWQgZm9yIHR3byBzcGFjZXMuCitTb2x1dGlvbjogICBVc2UgdGhlICJMIiBmbGFnIGluICdjcG9wdGlvbnMnIHRvIHRlbGwgd2hldGhlciBhIHRhYiBpcyBjb3VudGVkCisJICAgIGFzIHR3byBzcGFjZXMgb3IgYXMgJ3RhYnN0b3AnLiAoQW50b255IFNjcml2ZW4pCitGaWxlczoJICAgIHJ1bnRpbWUvZG9jL29wdGlvbnMudHh0LCBzcmMvZWRpdC5jCisKK1BhdGNoIDYuM2EuMDIzCitQcm9ibGVtOiAgICBDb21wbGV0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUgZG9lc24ndCBoYW5kbGUgYmFja3NsYXNoZXMKKwkgICAgcHJvcGVybHkuICBPbmx5IHRoZSB0YWlsIG9mIG1hdGNoZXMgaXMgc2hvd24sIGV2ZW4gd2hlbiBub3QKKwkgICAgY29tcGxldGluZyBmaWxlbmFtZXMuCitTb2x1dGlvbjogICBXaGVuIHR1cm5pbmcgdGhlIHN0cmluZyBpbnRvIGEgcGF0dGVybiBkb3VibGUgYmFja3NsYXNoZXMuICBEb24ndAorCSAgICBvbWl0IHRoZSBwYXRoIHdoZW4gbm90IGV4cGFuZGluZyBmaWxlcyBvciBkaXJlY3Rvcmllcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4zYS4wMjQKK1Byb2JsZW06ICAgIFRoZSAic2F2ZSBhbGwiIHRvb2xiYXIgaXRlbSBmYWlscyBmb3IgYnVmZmVycyB0aGF0IGRvbid0IGhhdmUgYQorCSAgICBuYW1lLiAgV2hlbiB1c2luZyAiOndhIiBvciBjbG9zaW5nIHRoZSBWaW0gd2luZG93IGFuZCB0aGVyZSBhcmUKKwkgICAgbmFtZWxlc3MgYnVmZmVycywgYnJvd3NpbmcgZm9yIGEgbmFtZSBtYXkgY2F1c2UgdGhlIG5hbWUgYmVpbmcKKwkgICAgZ2l2ZW4gdG8gdGhlIHdyb25nIGJ1ZmZlciBvciBub3Qgc3RvcmVkIHByb3Blcmx5LiAgIjpicm93c2UiIG9ubHkKKwkgICAgd29ya2VkIGZvciBvbmUgZmlsZS4KK1NvbHV0aW9uOiAgIFVzZSAiOmNvbmZpcm0gYnJvd3NlIiBmb3IgInNhdmUgYWxsIi4KKwkgICAgUGFzcyBidWZmZXIgYXJndW1lbnQgdG8gc2V0Zm5hbWUoKS4gIFJlc3RvcmUgImJyb3dzZSIgZmxhZyBhbmQKKwkgICAgImZvcmNlaXQiIGFmdGVyIGRvaW5nIHRoZSB3b3JrIGZvciBvbmUgZmlsZS4KK0ZpbGVzOgkgICAgcnVudGltZS9tZW51LnZpbSwgc3JjL2J1ZmZlci5jLCBzcmMvZXhfY21kcy5jLCBzcmMvZXhfY21kczIuYywKKwkgICAgc3JjL2V4X2RvY21kLmMsIHNyYy9leF9nZXRsbi5jLCBzcmMvZmlsZWlvLmMsIHNyYy9tZW1saW5lLmMsCisJICAgIHNyYy9tZXNzYWdlLmMsIHNyYy93aW5kb3cuYywgc3JjL3Byb3RvL2J1ZmZlci5wcm8sCisJICAgIHNyYy9wcm90by9leF9jbWRzMi5wcm8sIHNyYy9wcm90by9tZW1saW5lLnBybworCitQYXRjaCA2LjNhLjAyNQorUHJvYmxlbTogICAgU2V0dGluZyAndmlydHVhbGVkaXQnIG1vdmVzIHRoZSBjdXJzb3IuIChCZW5qaSBGaXNoZXIpCitTb2x1dGlvbjogICBVcGRhdGUgdGhlIHZpcnR1YWwgY29sdW1uIGJlZm9yZSB1c2luZyBpdC4KK0ZpbGVzOgkgICAgc3JjL29wdGlvbi5jCisKK1BhdGNoIDYuM2EuMDI2IChleHRyYSwgYWZ0ZXIgNi4zYS4wMDgpCitQcm9ibGVtOiAgICBFZGl0aW5nIGZpbGVzIG9uIFdpbmRvd3MgOTggZG9lc24ndCB3b3JrIHdoZW4gJ2VuY29kaW5nJyBpcworCSAgICAidXRmLTgiIChBbnRvaW5lIE1lY2hlbHluY2spCisJICAgIFdhcm5pbmcgZm9yIG1pc3NpbmcgZnVuY3Rpb24gcHJvdG90eXBlLgorU29sdXRpb246ICAgRm9yIGFsbCB3aWRlIGZ1bmN0aW9ucyBjaGVjayBpZiBpdCBmYWlsZWQgYmVjYXVzZSBpdCBpcyBub3QKKwkgICAgaW1wbGVtZW50ZWQuICBVc2UgQU5TSSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmb3IgY2hhcl90b19zdHJpbmcoKS4KK0ZpbGVzOgkgICAgc3JjL2d1aV93NDguYywgc3JjL29zX21zd2luLmMsIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuM2EuMDI3IChleHRyYSwgYWZ0ZXIgNi4zYS4wMjYpCitQcm9ibGVtOiAgICBDb21waWxlciB3YXJuaW5nIGZvciBmdW5jdGlvbiBhcmd1bWVudC4KK1NvbHV0aW9uOiAgIERlY2xhcmUgYm90aCBjaGFyIGFuZCBXQ0hBUiBhcnJheXMuCitGaWxlczoJICAgIHNyYy9ndWlfdzQ4LmMKKworUGF0Y2ggNi4zYS4wMjgKK1Byb2JsZW06ICAgICI6bm9ybWFsIC4iIGRvZXNuJ3Qgd29yayBpbnNpZGUgYSBmdW5jdGlvbiwgYmVjYXVzZSByZWRvIGlzIHNhdmVkCisJICAgIGFuZCByZXN0b3JlZC4gKEJlbmppIEZpc2hlcikKK1NvbHV0aW9uOiAgIE1ha2UgYSBjb3B5IG9mIHRoZSByZWRvIGJ1ZmZlciB3aGVuIGV4ZWN1dGluZyBhIGZ1bmN0aW9uLgorRmlsZXM6CSAgICBzcmMvZ2V0Y2hhci5jCisKK1BhdGNoIDYuM2IuMDAxIChleHRyYSkKK1Byb2JsZW06ICAgIEJjYyA1OiBUaGUgZ2VuZXJhdGVkIGF1dG8vcGF0aGRlZiBjYW4ndCBiZSBjb21waWxlZC4KK1NvbHV0aW9uOiAgIEZpeCB0aGUgd2F5IHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgYXJlIGVzY2FwZWQuCitGaWxlczoJICAgIHNyYy9NYWtlX2JjNS5tYWsKKworUGF0Y2ggNi4zYi4wMDIKK1Byb2JsZW06ICAgIFdpbjMyOiBjb252ZXJzaW9uIGR1cmluZyBmaWxlIHdyaXRlIGZhaWxzIHdoZW4gYSBkb3VibGUtYnl0ZQorCSAgICBjaGFyYWN0ZXIgaXMgc3BsaXQgb3ZlciB0d28gd3JpdGVzLgorU29sdXRpb246ICAgRml4IHRoZSBjb252ZXJzaW9uIHJldHJ5IHdpdGhvdXQgYSB0cmFpbGluZyBieXRlLiAoVGFybyBNdXJhb2thKQorRmlsZXM6CSAgICBzcmMvZmlsZWlvLmMKKworUGF0Y2ggNi4zYi4wMDMgKGV4dHJhKQorUHJvYmxlbTogICAgV2luMzI6IFdoZW4gY29tcGlsaW5nIHdpdGggQm9ybGFuZCBDIDUuNSBhbmQgJ2VuY29kaW5nJyBpcyAidXRmLTgiCisJICAgIHRoZW4gVmltIGNhbid0IG9wZW4gZmlsZXMgdW5kZXIgTVMtV2luZG93cyA5OC4gKEFudG9pbmUgSi4KKwkgICAgTWVjaGVseW5jaykKK1NvbHV0aW9uOiAgIERvbid0IHVzZSBfd3N0YXQoKSwgX3dvcGVuKCkgYW5kIF93Zm9wZW4oKSBpbiB0aGlzIHNpdHVhdGlvbi4KK0ZpbGVzOgkgICAgc3JjL29zX21zd2luLmMsIHNyYy9vc193aW4zMi5jCisKK1BhdGNoIDYuM2IuMDA0CitQcm9ibGVtOiAgICAiOmhlbHBncmVwIiBpbmNsdWRlcyBhIHRyYWlsaW5nIENSIGluIHRoZSB0ZXh0IGxpbmUuCitTb2x1dGlvbjogICBSZW1vdmUgdGhlIENSLgorRmlsZXM6CSAgICBzcmMvcXVpY2tmaXguYworCitQYXRjaCA2LjNiLjAwNQorUHJvYmxlbTogICAgIjplY2hvICZnOmFpIiByZXN1bHRzIGluIHRoZSBsb2NhbCBvcHRpb24gdmFsdWUuIChTYWxtYW4gSGFsaW0pCitTb2x1dGlvbjogICBQYXNzIHRoZSBmbGFncyBmcm9tIGZpbmRfb3B0aW9uX2VuZCgpIHRvIGdldF9vcHRpb25fdmFsdWUoKS4KK0ZpbGVzOgkgICAgc3JjL2V2YWwuYworCitQYXRjaCA2LjNiLjAwNgorUHJvYmxlbTogICAgV2hlbiB1c2luZyAibXN3aW4udmltIiwgQ1RSTC1WIGluIEluc2VydCBtb2RlIGxlYXZlcyBjdXJzb3IgYmVmb3JlCisJICAgIGxhc3QgcGFzdGVkIGNoYXJhY3Rlci4gIChNYXRoZXcgRGF2aXMpCitTb2x1dGlvbjogICBVc2UgdGhlIHNhbWUgUGFzdGUoKSBmdW5jdGlvbiBhcyBpbiBtZW51LnZpbS4KK0ZpbGVzOgkgICAgcnVudGltZS9tc3dpbi52aW0KKworUGF0Y2ggNi4zYi4wMDcKK1Byb2JsZW06ICAgIFNlc3Npb24gZmlsZSBkb2Vzbid0IHJlc3RvcmUgdmlldyBvbiB3aW5kb3dzIHByb3Blcmx5LiAoUm9iZXJ0CisJICAgIFdlYmIpCitTb2x1dGlvbjogICBSZXN0b3JlIHdpbmRvdyBzaXplcyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgcmVzdG9yaW5nIHRoZSB2aWV3LCBzbworCSAgICB0aGF0IHRoZSB2aWV3LCBjdXJzb3IgcG9zaXRpb24gYW5kIHNpemUgYXJlIHJlc3RvcmVkIHByb3Blcmx5LgorRmlsZXM6CSAgICBzcmMvZXhfZG9jbWQuYworCitQYXRjaCA2LjNiLjAwOAorUHJvYmxlbTogICAgVXNpbmcgIjpmaW5hbGx5IiBpbiBhIHVzZXIgY29tbWFuZCBkb2Vzbid0IGFsd2F5cyB3b3JrLiAoSGFyaQorCSAgICBLcmlzaG5hIERhcmEpCitTb2x1dGlvbjogICBEb24ndCBhc3N1bWUgdGhhdCB1c2luZyBnZXRleGxpbmUoKSBtZWFucyB0aGUgY29tbWFuZCB3YXMgdHlwZWQuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuM2IuMDA5IChleHRyYSkKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIHRoZSAtUCBhcmd1bWVudCBpcyBub3QgZm91bmQgaW4gYSB3aW5kb3cgdGl0bGUsIHRoZXJlCisJICAgIGlzIG5vIGVycm9yIG1lc3NhZ2UuCitTb2x1dGlvbjogICBXaGVuIHRoZSB3aW5kb3cgY2FuJ3QgYmUgZm91bmQgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGFuZCBleGl0LgorCSAgICBBbHNvIHVzZSB0cnkvZXhjZXB0IHRvIGNhdGNoIGZhaWxpbmcgdG8gb3BlbiB0aGUgTURJIHdpbmRvdy4KKwkgICAgKE1pY2hhZWwgV29va2V5KQorRmlsZXM6CSAgICBzcmMvZ3VpX3czMi5jCisKK1BhdGNoIDYuM2IuMDEwCitQcm9ibGVtOiAgICBXaW4zMjogVXNpbmcgdGhlICItRCIgYXJndW1lbnQgYW5kIGV4cGFuZGluZyBhcmd1bWVudHMgbWF5IGNhdXNlIGEKKwkgICAgaGFuZywgYmVjYXVzZSB0aGUgdGVybWluYWwgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LiAoVmluY2UgTmVncmkpCitTb2x1dGlvbjogICBEb24ndCBnbyBpbnRvIGRlYnVnIG1vZGUgYmVmb3JlIHRoZSB0ZXJtaW5hbCBpcyBpbml0aWFsaXplZC4KK0ZpbGVzOgkgICAgc3JjL21haW4uYworCitQYXRjaCA2LjNiLjAxMQorUHJvYmxlbTogICAgVXNpbmcgQ1RSTC1cIGUgd2hpbGUgb2J0YWluaW5nIGFuIGV4cHJlc3Npb24gYWJvcnRzIHRoZSBjb21tYW5kCisJICAgIGxpbmUuIChIYXJpIEtyaXNobmEgRGFyYSkKK1NvbHV0aW9uOiAgIEluc2VydCB0aGUgQ1RSTC1cIGUgYXMgdHlwZWQuCitGaWxlczoJICAgIHNyYy9leF9nZXRsbi5jCisKK1BhdGNoIDYuM2IuMDEyIChhZnRlciA2LjNiLjAxMCkKK1Byb2JsZW06ICAgIENhbid0IGNvbXBpbGUgd2l0aCB0aW55IGZlYXR1cmVzLiAoTm9yYmVydCBUcmV0a293c2tpKQorU29sdXRpb246ICAgQWRkICNpZmRlZnMuCitGaWxlczoJICAgIHNyYy9tYWluLmMKKworUGF0Y2ggNi4zYi4wMTMKK1Byb2JsZW06ICAgIExvYWRpbmcgYSBzZXNzaW9uIGZpbGUgcmVzdWx0cyBpbiBlZGl0aW5nIHRoZSB3cm9uZyBmaWxlIGluIHRoZQorCSAgICBmaXJzdCB3aW5kb3cgd2hlbiB0aGlzIGlzIG5vdCB0aGUgZmlsZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbgorCSAgICB0aGUgYXJndW1lbnQgbGlzdC4gKFJvYmVydCBXZWJiKQorU29sdXRpb246ICAgQ2hlY2sgd19hcmdfaWR4X2ludmFsaWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZWRpdCBhIGZpbGUuCitGaWxlczoJICAgIHNyYy9leF9kb2NtZC5jCisKK1BhdGNoIDYuM2IuMDE0CitQcm9ibGVtOiAgICAiOnJ1bnRpbWUhIGZvbyoudmltIiBtYXkgdXNpbmcgZnJlZWQgbWVtb3J5IHdoZW4gYSBzb3VyY2VkIHNjcmlwdAorCSAgICBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiAncnVudGltZXBhdGgnLgorU29sdXRpb246ICAgTWFrZSBhIGNvcHkgb2YgJ3J1bnRpbWVwYXRoJyB3aGVuIGxvb3Bpbmcgb3ZlciB0aGUgbWF0Y2hlcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMyLmMKKworUGF0Y2ggNi4zYi4wMTUKK1Byb2JsZW06ICAgIEdldCBsYWxsb2MoMCkgZXJyb3Igd2hlbiB1c2luZyAicCIgaW4gVmlzdWFsIG1vZGUgd2hpbGUKKwkgICAgJ2NsaXBib2FyZCcgY29udGFpbnMgImF1dG9zZWxlY3QsdW5uYW1lZCIuIChNYXJrIFdhZ29ubmVyKQorU29sdXRpb246ICAgQXZvaWQgYWxsb2NhdGluZyB6ZXJvIGJ5dGVzLiAgT2J0YWluIHRoZSBjbGlwYm9hcmQgd2hlbiBuZWNlc3NhcnkuCitGaWxlczoJICAgIHNyYy9vcHMuYworCitQYXRjaCA2LjNiLjAxNgorUHJvYmxlbTogICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHVzZWQgIngiIGRvZXNuJ3QgZGVsZXRlIHRoZSBsYXN0IGNoYXJhY3RlcgorCSAgICBvZiBhIGxpbmUgdGhhdCBoYXMgYXMgbWFueSBjaGFyYWN0ZXJzIGFzICdjb2x1bW5zJy4gKFlha292IExlcm5lcikKK1NvbHV0aW9uOiAgIFdoZW4gdGhlIGN1cnNvciBpc24ndCBtb3ZlZCBsZXQgb25lcmlnaHQoKSByZXR1cm4gRkFJTC4KK0ZpbGVzOgkgICAgc3JjL2VkaXQuYworCitQYXRjaCA2LjNiLjAxNworUHJvYmxlbTogICAgV2luMzI6ICJ2aW0gLS1yZW1vdGUtd2FpdCIgZG9lc24ndCBleGl0IHdoZW4gdGhlIHNlcnZlciBmaW5pc2hlZAorCSAgICBlZGl0aW5nIHRoZSBmaWxlLiAoRGF2aWQgRmlzaGJ1cm4pCitTb2x1dGlvbjogICBJbiB0aGUgcnJoZWxwZXIgcGx1Z2luIGNoYW5nZSBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMgYW5kCisJICAgIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuCitGaWxlczoJICAgIHJ1bnRpbWUvcGx1Z2luL3JyaGVscGVyLnZpbQorCitQYXRjaCA2LjNiLjAxOAorUHJvYmxlbTogICAgVGhlIGxpc3Qgb2YgaGVscCBmaWxlcyBpbiB0aGUgImxvY2FsIGFkZGl0aW9ucyIgdGFibGUgZG9lc24ndAorCSAgICByZWNvZ25pemUgdXRmLTggZW5jb2RpbmcuIChZYXN1aGlybyBNYXRzdW1vdG8pCitTb2x1dGlvbjogICBSZWNvZ25pemUgdXRmLTggY2hhcmFjdGVycy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjNiLjAxOQorUHJvYmxlbTogICAgV2hlbiAkVklNUlVOVElNRSBpcyBub3QgYSBmdWxsIHBhdGggbmFtZSB0aGUgImxvY2FsIGFkZGl0aW9ucyIKKwkgICAgdGFibGUgbGlzdHMgYWxsIHRoZSBoZWxwIGZpbGVzLgorU29sdXRpb246ICAgVXNlIGZ1bGxwYXRoY21wKCkgaW5zdGVhZCBvZiBmbmFtZWNtcCgpIHRvIGNvbXBhcmUgdGhlIGRpcmVjdG9yeQorCSAgICBuYW1lcy4KK0ZpbGVzOgkgICAgc3JjL2V4X2NtZHMuYworCitQYXRjaCA2LjNiLjAyMAorUHJvYmxlbTogICAgV2hlbiB1c2luZyBDVFJMLV4gd2hlbiBlbnRlcmluZyBhIHNlYXJjaCBzdHJpbmcsIHRoZSBpdGVtIGluIHRoZQorCSAgICBzdGF0dXNsaW5lIHRoYXQgaW5kaWNhdGVzIHRoZSBrZXltYXAgaXMgbm90IHVwZGF0ZWQuIChJbHlhCisJICAgIERvZ29sYXpreSkKK1NvbHV0aW9uOiAgIE1hcmsgdGhlIHN0YXR1c2xpbmVzIGZvciB1cGRhdGluZy4KK0ZpbGVzOgkgICAgc3JjL2V4X2dldGxuLmMKKworUGF0Y2ggNi4zYi4wMjEKK1Byb2JsZW06ICAgIFRoZSBzd2FwZmlsZSBpcyBub3QgcmVhZGFibGUgZm9yIG90aGVycywgdGhlIEFUVEVOVElPTiBwcm9tcHQgZG9lcworCSAgICBub3Qgc2hvdyBhbGwgaW5mbyB3aGVuIHNvbWVvbmUgZWxzZSBpcyBlZGl0aW5nIHRoZSBzYW1lIGZpbGUuCisJICAgIChNYXJjZWwgU3ZpdGFsc2t5KQorU29sdXRpb246ICAgVXNlIHRoZSBwcm90ZWN0aW9uIG9mIG9yaWdpbmFsIGZpbGUgZm9yIHRoZSBzd2FwZmlsZSBhbmQgc2V0IGl0CisJICAgIGFmdGVyIGNyZWF0aW5nIHRoZSBzd2FwZmlsZS4KK0ZpbGVzOgkgICAgc3JjL2ZpbGVpby5jCisKK1BhdGNoIDYuM2IuMDIyCitQcm9ibGVtOiAgICBVc2luZyAiNHYiIHRvIHNlbGVjdCBmb3VyIHRpbWVzIHRoZSBvbGQgVmlzdWFsIGFyZWEgbWF5IHB1dCB0aGUKKwkgICAgY3Vyc29yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAoSmVucyBQYXVsdXMpCitTb2x1dGlvbjogICBDb3JyZWN0IHRoZSBjdXJzb3IgY29sdW1uLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworUGF0Y2ggNi4zYi4wMjMKK1Byb2JsZW06ICAgIFdoZW4gIjNkaXAiIHN0YXJ0cyBpbiBhbiBlbXB0eSBsaW5lLCB3aGl0ZSBsaW5lcyBhZnRlciB0aGUKKwkgICAgbm9uLXdoaXRlIGxpbmVzIGFyZSBub3QgZGVsZXRlZC4gKEplbnMgUGF1bHVzKQorU29sdXRpb246ICAgSW5jbHVkZSB0aGUgd2hpdGUgbGluZXMuCitGaWxlczoJICAgIHNyYy9zZWFyY2guYworCitQYXRjaCA2LjNiLjAyNAorUHJvYmxlbTogICAgIjJkYXciIGRvZXMgbm90IGRlbGV0ZSBsZWFkaW5nIHdoaXRlIHNwYWNlIGxpa2UgImRhdyIgZG9lcy4gIChKZW5zCisJICAgIFBhdWx1cykKK1NvbHV0aW9uOiAgIEluY2x1ZGUgdGhlIHdoaXRlIHNwYWNlIHdoZW4gYSBjb3VudCBpcyB1c2VkLgorRmlsZXM6CSAgICBzcmMvc2VhcmNoLmMKKworUGF0Y2ggNi4zYi4wMjUKK1Byb2JsZW06ICAgIFBlcmNlbnRhZ2UgaW4gcnVsZXIgaXNuJ3QgdXBkYXRlZCB3aGVuIGEgbGluZSBpcyBkZWxldGVkLiAoSmVucworCSAgICBQYXVsdXMpCitTb2x1dGlvbjogICBDaGVjayBmb3IgYSBjaGFuZ2UgaW4gbGluZSBjb3VudCB3aGVuIGRlY2lkaW5nIHRvIHVwZGF0ZSB0aGUgcnVsZXIuCitGaWxlczoJICAgIHNyYy9zY3JlZW4uYywgc3JjL3N0cnVjdHMuaAorCitQYXRjaCA2LjNiLjAyNgorUHJvYmxlbTogICAgV2hlbiBzZWxlY3RpbmcgImFib3J0IiBhdCB0aGUgQVRURU5USU9OIHByb21wdCBmb3IgYSBmaWxlIHRoYXQgaXMKKwkgICAgYWxyZWFkeSBiZWluZyBlZGl0ZWQgVmltIGNyYXNoZXMuCitTb2x1dGlvbjogICBEb24ndCBhYm9ydCBjcmVhdGluZyBhIG5ldyBidWZmZXIgd2hlbiB3ZSByZWFsbHkgbmVlZCBpdC4KK0ZpbGVzOgkgICAgc3JjL2J1ZmZlci5jLCBzcmMvdmltLmgKKworUGF0Y2ggNi4zYi4wMjcKK1Byb2JsZW06ICAgIFdpbjMyOiBXaGVuIGVuYWJsaW5nIHRoZSBtZW51IGluIGEgbWF4aW1pemVkIHdpbmRvdywgVmltIHVzZXMgbW9yZQorCSAgICBsaW5lcyB0aGFuIHdoYXQgaXMgcm9vbSBmb3IuIChTaGl6aHUgUGFuKQorU29sdXRpb246ICAgV2hlbiBkZWNpZGluZyB0byBjYWxsIHNoZWxsX3Jlc2l6ZWQoKSwgYWxzbyBjb21wYXJlIHRoZSB0ZXh0IGFyZWEKKwkgICAgc2l6ZSB3aXRoIFJvd3MgYW5kIENvbHVtbnMsIG5vdCBqdXN0IHdpdGggc2NyZWVuX1Jvd3MgYW5kCisJICAgIHNjcmVlbl9Db2x1bW5zLgorRmlsZXM6CSAgICBzcmMvZ3VpLmMKKworUGF0Y2ggNi4zYi4wMjgKK1Byb2JsZW06ICAgIFdoZW4gaW4gZGlmZiBtb2RlLCBzZXR0aW5nICdyaWdodGxlZnQnIGNhdXNlcyBhIGNyYXNoLiAoRWRkaW5lKQorU29sdXRpb246ICAgQ2hlY2sgZm9yIGxhc3QgY29sdW1uIGRpZmZlcmVudGx5IHdoZW4gJ3JpZ2h0bGVmdCcgaXMgc2V0LgorRmlsZXM6CSAgICBzcmMvc2NyZWVuLmMKKworUGF0Y2ggNi4zYi4wMjkKK1Byb2JsZW06ICAgIFdpbjMyOiB3YXJuaW5nIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgorU29sdXRpb246ICAgSW5pdGlhbGl6ZSB0byB6ZXJvLgorRmlsZXM6CSAgICBzcmMvbWlzYzEuYworCitQYXRjaCA2LjNiLjAzMAorUHJvYmxlbTogICAgQWZ0ZXIgVmlzdWFsbHkgc2VsZWN0aW5nIGZvdXIgY2hhcmFjdGVycywgY2hhbmdpbmcgaXQgdG8gb3RoZXIKKwkgICAgdGV4dCwgVmlzdWFsbHkgc2VsZWN0aW5nIGFuZCB5YW5raW5nIHR3byBjaGFyYWN0ZXJzOiAiLiIgY2hhbmdlcworCSAgICBmb3VyIGNoYXJhY3RlcnMsIGFub3RoZXIgIi4iIGNoYW5nZXMgdHdvIGNoYXJhY3RlcnMuIChSb2JlcnQgV2ViYikKK1NvbHV0aW9uOiAgIERvbid0IHN0b3JlIHRoZSBzaXplIG9mIHRoZSBWaXN1YWwgYXJlYSB3aGVuIHJlZG8gaXMgYWN0aXZlLgorRmlsZXM6CSAgICBzcmMvbm9ybWFsLmMKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dCBiL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJmZjlhCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CkBAIC0wLDAgKzEsODQgQEAKKyp2ZXJzaW9uNy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDcKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitXZWxjb21lIHRvIFZpbSA3ISAgQSBsYXJnZSBudW1iZXIgb2YgZmVhdHVyZXMgaGFzIGJlZW4gYWRkZWQuICBUaGlzIGZpbGUKK21lbnRpb25zIGFsbCB0aGUgbmV3IGl0ZW1zLCBjaGFuZ2VzIHRvIGV4aXN0aW5nIGZlYXR1cmVzIGFuZCBidWcgZml4ZXMKK2NvbXBhcmVkIHRvIFZpbSA2LnguCisKK1NlZSB8dmlfZGlmZi50eHR8IGZvciBhbiBvdmVydmlldyBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpIGFuZCBWaW0gNy4wLgorU2VlIHx2ZXJzaW9uNC50eHR8IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSAzLnggYW5kIFZpbSA0LnguCitTZWUgfHZlcnNpb241LnR4dHwgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltIDQueCBhbmQgVmltIDUueC4KK1NlZSB8dmVyc2lvbjYudHh0fCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBWaW0gNS54IGFuZCBWaW0gNi54LgorCitJTkNPTVBBVElCTEUgQ0hBTkdFUwkJCXxpbmNvbXBhdGlibGUtN3wKKworTkVXIEZFQVRVUkVTCQkJCXxuZXctN3wKKworTmV3IGRhdGEgdHlwZXMJCQkJfG5ldy1kYXRhLXR5cGVzfAorVmFyaW91cyBuZXcgaXRlbXMJCQl8bmV3LWl0ZW1zLTd8CisKK0lNUFJPVkVNRU5UUwkJCQl8aW1wcm92ZW1lbnRzLTd8CisKK0NPTVBJTEUgVElNRSBDSEFOR0VTCQkJfGNvbXBpbGUtY2hhbmdlcy03fAorCitCVUcgRklYRVMJCQkJfGJ1Zy1maXhlcy03fAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lOQ09NUEFUSUJMRSBDSEFOR0VTCQkJCSppbmNvbXBhdGlibGUtNyoKKworVGhlc2UgY2hhbmdlcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuICBDaGVjayB0aGlzIGxpc3QgaWYgeW91CitydW4gaW50byBhIHByb2JsZW0gd2hlbiB1cGdyYWRpbmcgZnJvbSBWaW0gNi54IHRvIDcuMAorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTkVXIEZFQVRVUkVTCQkJCQkJKm5ldy03KgorCitOZXcgZGF0YSB0eXBlcwkJCQkJCSpuZXctZGF0YS10eXBlcyoKKy0tLS0tLS0tLS0tLS0tCisKK0luIFZpbSBzY3JpcHRzIHRoZSBmb2xsb3dpbmcgdHlwZXMgaGF2ZSBiZWVuIGFkZGVkOgorCisJbGlzdAkJb3JkZXJlZCBsaXN0IG9mIGl0ZW1zCisJZGljdGlvbmFyeQlhc3NvY2lhdGl2ZSBhcnJheSBvZiBpdGVtcworCWZ1bmN0aW9uCXJlZmVyZW5jZSB0byBhIGZ1bmN0aW9uCisKK01hbnkgZnVuY3Rpb25zIGFuZCBjb21tYW5kcyBoYXZlIGJlZW4gYWRkZWQgdG8gc3VwcG9ydCB0aGUgbmV3IHR5cGVzLgorCisKK1ZhcmlvdXMgbmV3IGl0ZW1zCQkJCQkqbmV3LWl0ZW1zLTcqCistLS0tLS0tLS0tLS0tLS0tLQorCitOb3JtYWwgbW9kZSBjb21tYW5kczogfgorCisKK09wdGlvbnM6IH4KKworCitFeCBjb21tYW5kczogfgorCisKK05ldyBmdW5jdGlvbnM6IH4KKworCitOZXcgYXV0b2NvbW1hbmQgZXZlbnRzOiB+CisKKworTmV3IFN5bnRheCBmaWxlczogfgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSU1QUk9WRU1FTlRTCQkJCQkJKmltcHJvdmVtZW50cy03KgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ09NUElMRSBUSU1FIENIQU5HRVMJCQkJCSpjb21waWxlLWNoYW5nZXMtNyoKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0JVRyBGSVhFUwkJCQkJCSpidWctZml4ZXMtNyoKKworCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmlfZGlmZi50eHQgYi9ydW50aW1lL2RvYy92aV9kaWZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQ3ZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmlfZGlmZi50eHQKQEAgLTAsMCArMSw4ODQgQEAKKyp2aV9kaWZmLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitEaWZmZXJlbmNlcyBiZXR3ZWVuIFZpbSBhbmQgVmkJCQkJKnZpLWRpZmZlcmVuY2VzKgorCitUaHJvdWdob3V0IHRoZSBoZWxwIGZpbGVzIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltIGFuZCBWaS9FeCBhcmUgZ2l2ZW4gaW4KK2N1cmx5IGJyYWNlcywgbGlrZSAie25vdCBpbiBWaX0iLiAgVGhpcyBmaWxlIG9ubHkgbGlzdHMgd2hhdCBoYXMgbm90IGJlZW4KK21lbnRpb25lZCBpbiBvdGhlciBmaWxlcyBhbmQgZ2l2ZXMgYW4gb3ZlcnZpZXcuCisKK1ZpbSBpcyBtb3N0bHkgUE9TSVggMTAwMy4yLTEgY29tcGxpYW50LiAgVGhlIG9ubHkgY29tbWFuZCBrbm93biB0byBiZSBtaXNzaW5nCitpcyAiOm9wZW4iLiAgVGhlcmUgYXJlIHByb2JhYmx5IGEgbG90IG9mIHNtYWxsIGRpZmZlcmVuY2VzIChlaXRoZXIgYmVjYXVzZSBWaW0KK2lzIG1pc3Npbmcgc29tZXRoaW5nIG9yIGJlY2F1c2UgUG9zaXggaXMgYmVzaWRlIHRoZSBtYXJrKS4KKworMS4gTWlzc2luZyBjb21tYW5kcwkJCXxtaXNzaW5nLWNvbW1hbmRzfAorMi4gTWlzc2luZyBvcHRpb25zCQkJfG1pc3Npbmctb3B0aW9uc3wKKzMuIExpbWl0cwkJCQl8bGltaXRzfAorNC4gVGhlIG1vc3QgaW50ZXJlc3RpbmcgYWRkaXRpb25zCXx2aW0tYWRkaXRpb25zfAorNS4gT3RoZXIgdmltIGZlYXR1cmVzCQkJfG90aGVyLWZlYXR1cmVzfAorNi4gQ29tbWFuZC1saW5lIGFyZ3VtZW50cwkJfGNtZGxpbmUtYXJndW1lbnRzfAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIE1pc3NpbmcgY29tbWFuZHMJCQkJCSptaXNzaW5nLWNvbW1hbmRzKgorCitUaGlzIGNvbW1hbmQgaXMgaW4gVmksIGJ1dCBub3QgaW4gVmltOgorCis6b1twZW5dCQkJe1ZpOiBzdGFydCBlZGl0aW5nIGluIG9wZW4gbW9kZX0gKjpvKiAqOm9wKiAqOm9wZW4qCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gTWlzc2luZyBvcHRpb25zCQkJCQkqbWlzc2luZy1vcHRpb25zKgorCitUaGVzZSBvcHRpb25zIGFyZSBpbiB0aGUgVW5peCBWaSwgYnV0IG5vdCBpbiBWaW0uICBJZiB5b3UgdHJ5IHRvIHNldCBvbmUgb2YKK3RoZW0geW91IHdvbid0IGdldCBhbiBlcnJvciBtZXNzYWdlLCBidXQgdGhlIHZhbHVlIGlzIG5vdCB1c2VkIGFuZCBjYW5ub3QgYmUKK3ByaW50ZWQuCisKK2F1dG9wcmludCAoYXApCQlib29sZWFuCShkZWZhdWx0IG9uKQkJKidhdXRvcHJpbnQnKiAqJ2FwJyoKK2JlYXV0aWZ5IChiZikJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQkJKidiZWF1dGlmeScqIConYmYnKgorZmxhc2ggKGZsKQkJYm9vbGVhbgkoZGVmYXVsdCA/PykJCSonZmxhc2gnKiAqJ2ZsJyoKK2dyYXBoaWMgKGdyKQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCQkqJ2dyYXBoaWMnKiAqJ2dyJyoKK2hhcmR0YWJzIChodCkJCW51bWJlcgkoZGVmYXVsdCA4KQkJKidoYXJkdGFicycqIConaHQnKgorCW51bWJlciBvZiBzcGFjZXMgdGhhdCBhIDxUYWI+IG1vdmVzIG9uIHRoZSBkaXNwbGF5CittZXNnCQkJYm9vbGVhbgkoZGVmYXVsdCBvbikJCSonbWVzZycqCitub3ZpY2UJCQlib29sZWFuCShkZWZhdWx0IG9mZikJCSonbm92aWNlJyoKK29wZW4JCQlib29sZWFuCShkZWZhdWx0IG9uKQkJKidvcGVuJyoKK29wdGltaXplIChvcCkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQkJKidvcHRpbWl6ZScqIConb3AnKgorcHJvbXB0CQkJYm9vbGVhbgkoZGVmYXVsdCBvbikJCSoncHJvbXB0JyoKK3JlZHJhdwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQkJKidyZWRyYXcnKgorc2xvd29wZW4gKHNsb3cpCQlib29sZWFuCShkZWZhdWx0IG9mZikJCSonc2xvd29wZW4nKiAqJ3Nsb3cnKgorc291cmNlYW55CQlib29sZWFuCShkZWZhdWx0IG9mZikJCSonc291cmNlYW55JyoKK3dpbmRvdyAod2kpCQludW1iZXIJKGRlZmF1bHQgMjMpCQkqJ3dpbmRvdycqICond2knKgordzMwMAkJCW51bWJlcgkoZGVmYXVsdCAyMykJCSondzMwMCcqCit3MTIwMAkJCW51bWJlcgkoZGVmYXVsdCAyMykJCSondzEyMDAnKgordzk2MDAJCQludW1iZXIJKGRlZmF1bHQgMjMpCQkqJ3c5NjAwJyoKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBMaW1pdHMJCQkJCQkqbGltaXRzKgorCitWaW0gaGFzIG9ubHkgYSBmZXcgbGltaXRzIGZvciB0aGUgZmlsZXMgdGhhdCBjYW4gYmUgZWRpdGVkIHtWaTogY2FuIG5vdCBoYW5kbGUKKzxOdWw+IGNoYXJhY3RlcnMgYW5kIGNoYXJhY3RlcnMgYWJvdmUgMTI4LCBoYXMgbGltaXRlZCBsaW5lIGxlbmd0aCwgbWFueSBvdGhlcgorbGltaXRzfS4KKwkJCQkJCQkqRTM0MCoKK01heGltdW0gbGluZSBsZW5ndGgJICAgT24gbWFjaGluZXMgd2l0aCAxNi1iaXQgaW50cyAoQW1pZ2EgYW5kIE1TLURPUyByZWFsCisJCQkgICBtb2RlKTogMzI3NjcsIG90aGVyd2lzZSAyMTQ3NDgzNjQ3IGNoYXJhY3RlcnMuCisJCQkgICBMb25nZXIgbGluZXMgYXJlIHNwbGl0LgorTWF4aW11bSBudW1iZXIgb2YgbGluZXMJICAgMjE0NzQ4MzY0NyBsaW5lcy4KK01heGltdW0gZmlsZSBzaXplCSAgIDIxNDc0ODM2NDcgYnl0ZXMgKDIgR2J5dGUpIHdoZW4gYSBsb25nIGludGVnZXIgaXMKKwkJCSAgIDMyIGJpdHMuICBNdWNoIG1vcmUgZm9yIDY0IGJpdCBsb25ncy4gIEFsc28gbGltaXRlZAorCQkJICAgYnkgYXZhaWxhYmxlIGRpc2sgc3BhY2UgZm9yIHRoZSB8c3dhcC1maWxlfC4KKwkJCQkJCQkqRTc1KgorTGVuZ3RoIG9mIGEgZmlsZSBwYXRoCSAgIFVuaXggYW5kIFdpbjMyOiAxMDI0IGNoYXJhY3RlcnMsIG90aGVyd2lzZSAyNTYKKwkJCSAgIGNoYXJhY3RlcnMgKG9yIGFzIG11Y2ggYXMgdGhlIHN5c3RlbSBzdXBwb3J0cykuCitMZW5ndGggb2YgYW4gZXhwYW5kZWQgc3RyaW5nIG9wdGlvbgorCQkJICAgVW5peCBhbmQgV2luMzI6IDEwMjQgY2hhcmFjdGVycywgb3RoZXJ3aXNlIDI1NgorCQkJICAgY2hhcmFjdGVycworTWF4aW11bSBkaXNwbGF5IHdpZHRoCSAgIFVuaXggYW5kIFdpbjMyOiAxMDI0IGNoYXJhY3RlcnMsIG90aGVyd2lzZSAyNTUKKwkJCSAgIGNoYXJhY3RlcnMKK01heGltdW0gbGhzIG9mIGEgbWFwcGluZyAgIDUwIGNoYXJhY3RlcnMuCitOdW1iZXIgb2YgaGlnaGxpZ2h0aW5nIGRpZmZlcmVudCB0eXBlczogMjIzCisKK0luZm9ybWF0aW9uIGZvciB1bmRvIGFuZCB0ZXh0IGluIHJlZ2lzdGVycyBpcyBrZXB0IGluIG1lbW9yeSwgdGh1cyB3aGVuIG1ha2luZworKGJpZykgY2hhbmdlcyB0aGUgYW1vdW50IG9mICh2aXJ0dWFsKSBtZW1vcnkgYXZhaWxhYmxlIGxpbWl0cyB0aGUgbnVtYmVyIG9mCit1bmRvIGxldmVscyBhbmQgdGhlIHRleHQgdGhhdCBjYW4gYmUga2VwdCBpbiByZWdpc3RlcnMuICBPdGhlciB0aGluZ3MgYXJlIGFsc28KK2tlcHQgaW4gbWVtb3J5OiAgQ29tbWFuZC1saW5lIGhpc3RvcnksIGVycm9yIG1lc3NhZ2VzIGZvciBRdWlja2ZpeCBtb2RlLCBldGMuCisKK01lbW9yeSB1c2FnZSBsaW1pdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9wdGlvbiAnbWF4bWVtJyAoJ21tJykgaXMgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gbWVtb3J5IHVzZWQgZm9yIG9uZQorYnVmZmVyIChpbiBraWxvYnl0ZXMpLiAgJ21heG1lbXRvdCcgaXMgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gbWVtb3J5IHVzZWQgZm9yCithbGwgYnVmZmVycyAoaW4ga2lsb2J5dGVzKS4gIFRoZSBkZWZhdWx0cyBkZXBlbmQgb24gdGhlIHN5c3RlbSB1c2VkLiAgRm9yIHRoZQorQW1pZ2EgYW5kIE1TLURPUywgJ21heG1lbXRvdCcgaXMgc2V0IGRlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9mIG1lbW9yeQorYXZhaWxhYmxlLiAgSWYgeW91IGRvbid0IGxpa2UgVmltIHRvIHN3YXAgdG8gYSBmaWxlLCBzZXQgJ21heG1lbScgYW5kCisnbWF4bWVtdG90JyB0byBhIHZlcnkgbGFyZ2UgdmFsdWUuICBUaGUgc3dhcCBmaWxlIHdpbGwgdGhlbiBvbmx5IGJlIHVzZWQgZm9yCityZWNvdmVyeS4gIElmIHlvdSBkb24ndCB3YW50IGEgc3dhcCBmaWxlIGF0IGFsbCwgc2V0ICd1cGRhdGVjb3VudCcgdG8gMCwgb3IKK3VzZSB0aGUgIi1uIiBhcmd1bWVudCB3aGVuIHN0YXJ0aW5nIFZpbS4gIE5vdGUgdGhhdCB0aGUgJ21heG1lbScgb3B0aW9uIGlzCitvbmx5IHVzZWQgd2hlbiBhIGJ1ZmZlciBpcyBjcmVhdGVkLiAgQ2hhbmdpbmcgdGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0CitidWZmZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkLiAgVGh1cyB5b3UgY2FuIHNldCBpdCB0byBkaWZmZXJlbnQKK3ZhbHVlcyBmb3IgZGlmZmVyZW50IGZpbGVzLiAgJ21heG1lbXRvdCcgd29ya3MgYWx3YXlzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIFRoZSBtb3N0IGludGVyZXN0aW5nIGFkZGl0aW9ucwkJCSp2aW0tYWRkaXRpb25zKgorCitWaSBjb21wYXRpYmlsaXR5LgkJCQkJfCdjb21wYXRpYmxlJ3wKKwlBbHRob3VnaCBWaW0gaXMgOTklIFZpIGNvbXBhdGlibGUsIHNvbWUgdGhpbmdzIGluIFZpIGNhbiBiZQorCWNvbnNpZGVyZWQgdG8gYmUgYSBidWcsIG9yIGF0IGxlYXN0IG5lZWQgaW1wcm92ZW1lbnQuICBCdXQgc3RpbGwsIFZpbQorCXN0YXJ0cyBpbiBhIG1vZGUgd2hpY2ggYmVoYXZlcyBsaWtlIHRoZSAicmVhbCIgVmkgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwlUbyBtYWtlIFZpbSBiZWhhdmUgYSBsaXR0bGUgYml0IGJldHRlciwgdHJ5IHJlc2V0dGluZyB0aGUgJ2NvbXBhdGlibGUnCisJb3B0aW9uOgorCQk6c2V0IG5vY29tcGF0aWJsZQorCU9yIHN0YXJ0IFZpbSB3aXRoIHRoZSAiLU4iIGFyZ3VtZW50OgorCQl2aW0gLU4KKwlUaGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSBpZiB5b3UgaGF2ZSBhIC52aW1yYyBmaWxlLiAgU2VlIHxzdGFydHVwfC4KKwlUaGUgJ2Nwb3B0aW9ucycgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCBWaSBjb21wYXRpYmlsaXR5IG9uL29mZiBmb3IKKwlhIG51bWJlciBvZiBzcGVjaWZpYyBpdGVtcy4KKworU3VwcG9ydCBmb3IgZGlmZmVyZW50IHN5c3RlbXMuCisJVmltIGNhbiBiZSB1c2VkIG9uOgorCS0gQWxsIFVuaXggc3lzdGVtcyAoaXQgd29ya3Mgb24gYWxsIHN5c3RlbXMgaXQgd2FzIHRlc3RlZCBvbiwgYWx0aG91Z2gKKwkgIHRoZSBHVUkgYW5kIFBlcmwgaW50ZXJmYWNlIG1heSBub3Qgd29yayBldmVyeXdoZXJlKS4KKwktIEFtaWdhICg1MDAsIDEwMDAsIDEyMDAsIDIwMDAsIDMwMDAsIDQwMDAsIC4uLikuCisJLSBNUy1ET1MgaW4gcmVhbC1tb2RlIChubyBhZGRpdGlvbmFsIGRyaXZlcnMgcmVxdWlyZWQpLgorCS0gSW4gcHJvdGVjdGVkIG1vZGUgb24gV2luZG93cyAzLjEgYW5kIE1TLURPUyAoRFBNSSBkcml2ZXIgcmVxdWlyZWQpLgorCS0gV2luZG93cyA5NSBhbmQgV2luZG93cyBOVCwgd2l0aCBzdXBwb3J0IGZvciBsb25nIGZpbGUgbmFtZXMuCisJLSBPUy8yIChuZWVkcyBlbXguZGxsKQorCS0gQXRhcmkgTWlOVAorCS0gVk1TCisJLSBCZU9TCisJLSBNYWNpbnRvc2gKKwktIFJpc2MgT1MKKwktIElCTSBPUy8zOTAKKworTXVsdGkgbGV2ZWwgdW5kby4JCQkJCXx1bmRvfAorCSd1JyBnb2VzIGJhY2t3YXJkIGluIHRpbWUsICdDVFJMLVInIGdvZXMgZm9yd2FyZCBhZ2Fpbi4gIFNldCBvcHRpb24KKwkndW5kb2xldmVscycgdG8gdGhlIG51bWJlciBvZiBjaGFuZ2VzIHRvIGJlIHJlbWVtYmVyZWQgKGRlZmF1bHQgMTAwMCkuCisJU2V0ICd1bmRvbGV2ZWxzJyB0byAwIGZvciBhIHZpLWNvbXBhdGlibGUgb25lIGxldmVsIHVuZG8uIFNldCBpdCB0bworCS0xIGZvciBubyB1bmRvIGF0IGFsbC4KKworCVdoZW4gYWxsIGNoYW5nZXMgaW4gYSBidWZmZXIgaGF2ZSBiZWVuIHVuZG9uZSwgdGhlIGJ1ZmZlciBpcyBub3QKKwljb25zaWRlcmVkIGNoYW5nZWQgYW55bW9yZS4gIFlvdSBjYW4gZXhpdCBpdCB3aXRoIDpxLCB3aXRob3V0IDwhPi4KKworR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIChHVUkpCQkJCXxndWl8CisJSW5jbHVkZWQgc3VwcG9ydCBmb3IgR1VJOiBtZW51J3MsIG1vdXNlLCBzY3JvbGxiYXJzLCBldGMuICBZb3UgY2FuCisJZGVmaW5lIHlvdXIgb3duIG1lbnVzLiAgQmV0dGVyIHN1cHBvcnQgZm9yIENUUkwvU0hJRlQvQUxUIGtleXMgaW4KKwljb21iaW5hdGlvbiB3aXRoIHNwZWNpYWwga2V5cyBhbmQgbW91c2UuICBTdXBwb3J0ZWQgZm9yIHZhcmlvdXMKKwlwbGF0Zm9ybXMsIHN1Y2ggYXMgWDExICh3aXRoIE1vdGlmIGFuZCBBdGhlbmEgaW50ZXJmYWNlcyksIEdUSywgV2luMzIKKwkoV2luZG93cyA5NSBhbmQgbGF0ZXIpLCBCZU9TLCBBbWlnYSBhbmQgTWFjaW50b3NoLgorCitNdWx0aXBsZSB3aW5kb3dzIGFuZCBidWZmZXJzLgkJCQl8d2luZG93cy50eHR8CisJVmltIGNhbiBzcGxpdCB0aGUgc2NyZWVuIGludG8gc2V2ZXJhbCB3aW5kb3dzLCBlYWNoIGVkaXRpbmcgYQorCWRpZmZlcmVudCBidWZmZXIgb3IgdGhlIHNhbWUgYnVmZmVyIGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLiAgQnVmZmVycworCWNhbiBzdGlsbCBiZSBsb2FkZWQgKGFuZCBjaGFuZ2VkKSBidXQgbm90IGRpc3BsYXllZCBpbiBhIHdpbmRvdy4gIFRoaXMKKwlpcyBjYWxsZWQgYSBoaWRkZW4gYnVmZmVyLiAgTWFueSBjb21tYW5kcyBhbmQgb3B0aW9ucyBoYXZlIGJlZW4gYWRkZWQKKwlmb3IgdGhpcyBmYWNpbGl0eS4KKworU3ludGF4IGhpZ2hsaWdodGluZy4JCQkJCXw6c3ludGF4fAorCVZpbSBjYW4gaGlnaGxpZ2h0IGtleXdvcmRzLCBwYXR0ZXJucyBhbmQgb3RoZXIgdGhpbmdzLiAgVGhpcyBpcworCWRlZmluZWQgYnkgYSBudW1iZXIgb2YgIjpzeW50YXgiIGNvbW1hbmRzLCBhbmQgY2FuIGJlIG1hZGUgdG8KKwloaWdobGlnaHQgbW9zdCBsYW5ndWFnZXMgYW5kIGZpbGUgdHlwZXMuICBBIG51bWJlciBvZiBmaWxlcyBhcmUKKwlpbmNsdWRlZCBmb3IgaGlnaGxpZ2h0aW5nIHRoZSBtb3N0IGNvbW1vbiBsYW5ndWFnZXMsIGxpa2UgQywgQysrLAorCUphdmEsIFBhc2NhbCwgTWFrZWZpbGVzLCBzaGVsbCBzY3JpcHRzLCBldGMuICBUaGUgY29sb3JzIHVzZWQgZm9yCisJaGlnaGxpZ2h0aW5nIGNhbiBiZSBkZWZpbmVkIGZvciBvcmRpbmFyeSB0ZXJtaW5hbHMsIGNvbG9yIHRlcm1pbmFscworCWFuZCB0aGUgR1VJIHdpdGggdGhlICI6aGlnaGxpZ2h0IiBjb21tYW5kLgorCitGb2xkaW5nCQkJCQkJCXxmb2xkaW5nfAorCUEgcmFuZ2Ugb2YgbGluZXMgY2FuIGJlIHNob3duIGFzIG9uZSAiZm9sZGVkIiBsaW5lLiAgVGhpcyBhbGxvd3MKKwlvdmVydmlld2luZyBhIGZpbGUgYW5kIG1vdmluZyBibG9ja3Mgb2YgdGV4dCBhcm91bmQgcXVpY2tseS4KKwlGb2xkcyBjYW4gYmUgY3JlYXRlZCBtYW51YWxseSwgZnJvbSB0aGUgc3ludGF4IG9mIHRoZSBmaWxlLCBieSBpbmRlbnQsCisJZXRjLgorCitQbHVnaW5zCQkJCQkJCXxhZGQtcGx1Z2lufAorCVRoZSBmdW5jdGlvbmFsaXR5IGNhbiBiZSBleHRlbmRlZCBieSBkcm9wcGluZyBhIHBsdWdpbiBmaWxlIGluIHRoZQorCXJpZ2h0IGRpcmVjdG9yeS4gIFRoYXQncyBhbiBlYXN5IHdheSB0byBzdGFydCB1c2luZyBWaW0gc2NyaXB0cworCXdyaXR0ZW4gYnkgb3RoZXJzLiAgUGx1Z2lucyBjYW4gYmUgZm9yIGFsbCBraW5kIG9mIGZpbGVzLCBvcgorCXNwZWNpZmljYWxseSBmb3IgYSBmaWxldHlwZS4KKworUmVwZWF0IGEgc2VyaWVzIG9mIGNvbW1hbmRzLgkJCQl8cXwKKwkicXtjfSIgc3RhcnRzIHJlY29yZGluZyB0eXBlZCBjaGFyYWN0ZXJzIGludG8gbmFtZWQgcmVnaXN0ZXIge2N9CisJKGFwcGVuZCB0byB0aGUgcmVnaXN0ZXIgaWYgcmVnaXN0ZXIgbmFtZSBpcyB1cHBlcmNhc2UpLiAgQSBzdWJzZXF1ZW50CisJInEiIHN0b3BzIHJlY29yZGluZy4gIFRoZSByZWdpc3RlciBjYW4gdGhlbiBiZSBleGVjdXRlZCB3aXRoIHRoZQorCSJAe2N9IiBjb21tYW5kLiAgVGhpcyBpcyB2ZXJ5IHVzZWZ1bCB0byByZXBlYXQgYSBjb21wbGV4IGFjdGlvbi4KKworRmxleGlibGUgaW5zZXJ0IG1vZGUuCQkJCQl8aW5zLXNwZWNpYWwtc3BlY2lhbHwKKwlUaGUgYXJyb3cga2V5cyBjYW4gYmUgdXNlZCBpbiBpbnNlcnQgbW9kZSB0byBtb3ZlIGFyb3VuZCBpbiB0aGUgZmlsZS4KKwlUaGlzIGJyZWFrcyB0aGUgaW5zZXJ0IGluIHR3byBwYXJ0cyBhcyBmYXIgYXMgdW5kbyBhbmQgcmVkbyBpcworCWNvbmNlcm5lZC4KKworCUNUUkwtTyBjYW4gYmUgdXNlZCB0byBleGVjdXRlIGEgc2luZ2xlIGNvbW1hbmQtbW9kZSBjb21tYW5kLiAgVGhpcyBpcworCWFsbW9zdCB0aGUgc2FtZSBhcyBoaXR0aW5nIDxFc2M+LCB0eXBpbmcgdGhlIGNvbW1hbmQgYW5kIGRvaW5nICJhIi4KKworVmlzdWFsIG1vZGUuCQkJCQkJfFZpc3VhbC1tb2RlfAorCVZpc3VhbCBjYW4gYmUgdXNlZCB0byBmaXJzdCBoaWdobGlnaHQgYSBwaWVjZSBvZiB0ZXh0IGFuZCB0aGVuIGdpdmUgYQorCWNvbW1hbmQgdG8gZG8gc29tZXRoaW5nIHdpdGggaXQuICBUaGlzIGlzIGFuIChlYXN5IHRvIHVzZSkgYWx0ZXJuYXRpdmUKKwl0byBmaXJzdCBnaXZpbmcgdGhlIG9wZXJhdG9yIGFuZCB0aGVuIG1vdmluZyB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0CisJdG8gYmUgb3BlcmF0ZWQgdXBvbi4gICJ2IiBhbmQgIlYiIGFyZSB1c2VkIHRvIHN0YXJ0IFZpc3VhbCBtb2RlLiAgInYiCisJd29ya3Mgb24gY2hhcmFjdGVycyBhbmQgJ1YnIG9uIGxpbmVzLiAgTW92ZSB0aGUgY3Vyc29yIHRvIGV4dGVuZCB0aGUKKwlWaXN1YWwgcGFydC4gIEl0IGlzIHNob3duIGhpZ2hsaWdodGVkIG9uIHRoZSBzY3JlZW4uICBCeSB0eXBpbmcgIm8iCisJdGhlIG90aGVyIGVuZCBvZiB0aGUgVmlzdWFsIHRleHQgY2FuIGJlIG1vdmVkLiAgVGhlIFZpc3VhbCB0ZXh0IGNhbgorCWJlIGFmZmVjdGVkIGJ5IGFuIG9wZXJhdG9yOgorCQlkCWRlbGV0ZQorCQljCWNoYW5nZQorCQl5CXlhbmsKKwkJPiBvciA8CWluc2VydCBvciBkZWxldGUgaW5kZW50CisJCSEJZmlsdGVyIHRocm91Z2ggZXh0ZXJuYWwgcHJvZ3JhbQorCQk9CWZpbHRlciB0aHJvdWdoIGluZGVudAorCQk6CXN0YXJ0ICI6IiBjb21tYW5kIGZvciB0aGUgVmlzdWFsIGxpbmVzLgorCQlncQlmb3JtYXQgdGV4dCB0byAndGV4dHdpZHRoJyBjb2x1bW5zCisJCUoJam9pbiBsaW5lcworCQl+CXN3YXAgY2FzZQorCQl1CW1ha2UgbG93ZXJjYXNlCisJCVUJbWFrZSB1cHBlcmNhc2UKKworQmxvY2sgb3BlcmF0b3JzLgkJCQkJfHZpc3VhbC1ibG9ja3wKKwlXaXRoIFZpc3VhbCBhIHJlY3Rhbmd1bGFyIGJsb2NrIG9mIHRleHQgY2FuIGJlIHNlbGVjdGVkLiAgU3RhcnQgVmlzdWFsCisJd2l0aCBDVFJMLVYuICBUaGUgYmxvY2sgY2FuIGJlIGRlbGV0ZWQgKCJkIiksIHlhbmtlZCAoInkiKSBvciBpdHMgY2FzZQorCWNhbiBiZSBjaGFuZ2VkICgifiIsICJ1IiBhbmQgIlUiKS4gIEEgZGVsZXRlZCBvciB5YW5rZWQgYmxvY2sgY2FuIGJlCisJcHV0IGludG8gdGhlIHRleHQgd2l0aCB0aGUgInAiIGFuZCAiUCIgY29tbWFuZHMuCisKK09ubGluZSBoZWxwIHN5c3RlbS4JCQkJCXw6aGVscHwKKwlIZWxwIGlzIGRpc3BsYXllZCBpbiBhIHdpbmRvdy4gIFRoZSB1c3VhbCBjb21tYW5kcyBjYW4gYmUgdXNlZCB0bworCW1vdmUgYXJvdW5kLCBzZWFyY2ggZm9yIGEgc3RyaW5nLCBldGMuICBUYWdzIGNhbiBiZSB1c2VkIHRvIGp1bXAKKwlhcm91bmQgaW4gdGhlIGhlbHAgZmlsZXMsIGp1c3QgbGlrZSBoeXBlcnRleHQgbGlua3MuICBUaGUgIjpoZWxwIgorCWNvbW1hbmQgdGFrZXMgYW4gYXJndW1lbnQgdG8gcXVpY2tseSBqdW1wIHRvIHRoZSBpbmZvIG9uIGEgc3ViamVjdC4KKwk8RjE+IGlzIHRoZSBxdWljayBhY2Nlc3MgdG8gdGhlIGhlbHAgc3lzdGVtLiAgVGhlIG5hbWUgb2YgdGhlIGhlbHAKKwlpbmRleCBmaWxlIGNhbiBiZSBzZXQgd2l0aCB0aGUgJ2hlbHBmaWxlJyBvcHRpb24uCisKK0NvbW1hbmQtbGluZSBlZGl0aW5nIGFuZCBoaXN0b3J5LgkJCXxjbWRsaW5lLWVkaXRpbmd8CisJWW91IGNhbiBpbnNlcnQgb3IgZGVsZXRlIGF0IGFueSBwbGFjZSBpbiB0aGUgY29tbWFuZC1saW5lIHVzaW5nIHRoZQorCWN1cnNvciBrZXlzLiAgVGhlIHJpZ2h0L2xlZnQgY3Vyc29yIGtleXMgY2FuIGJlIHVzZWQgdG8gbW92ZQorCWZvcndhcmQvYmFja3dhcmQgb25lIGNoYXJhY3Rlci4gIFRoZSBzaGlmdGVkIHJpZ2h0L2xlZnQgY3Vyc29yIGtleXMKKwljYW4gYmUgdXNlZCB0byBtb3ZlIGZvcndhcmQvYmFja3dhcmQgb25lIHdvcmQuICBDVFJMLUIvQ1RSTC1FIGNhbiBiZQorCXVzZWQgdG8gZ28gdG8gdGhlIGJlZ2luL2VuZCBvZiB0aGUgY29tbWFuZC1saW5lLgorCisJCQkJCQkJfGNtZGxpbmUtaGlzdG9yeXwKKwlUaGUgY29tbWFuZC1saW5lcyBhcmUgcmVtZW1iZXJlZC4gIFRoZSB1cC9kb3duIGN1cnNvciBrZXlzIGNhbiBiZSB1c2VkCisJdG8gcmVjYWxsIHByZXZpb3VzIGNvbW1hbmQtbGluZXMuICBUaGUgJ2hpc3RvcnknIG9wdGlvbiBjYW4gYmUgc2V0IHRvCisJdGhlIG51bWJlciBvZiBsaW5lcyB0aGF0IHdpbGwgYmUgcmVtZW1iZXJlZC4gIFRoZXJlIGlzIGEgc2VwYXJhdGUKKwloaXN0b3J5IGZvciBjb21tYW5kcyBhbmQgZm9yIHNlYXJjaCBwYXR0ZXJucy4KKworQ29tbWFuZC1saW5lIGNvbXBsZXRpb24uCQkJCXxjbWRsaW5lLWNvbXBsZXRpb258CisJV2hpbGUgZW50ZXJpbmcgYSBjb21tYW5kLWxpbmUgKG9uIHRoZSBib3R0b20gbGluZSBvZiB0aGUgc2NyZWVuKQorCTxUYWI+IGNhbiBiZSB0eXBlZCB0byBjb21wbGV0ZQorCSAgIHdoYXQJCWV4YW1wbGUJCX4KKwktIGNvbW1hbmQJOmU8VGFiPgorCS0gdGFnCQk6dGEgc2NyPFRhYj4KKwktIG9wdGlvbgk6c2V0IHNjPFRhYj4KKwktIG9wdGlvbiB2YWx1ZSAgOnNldCBoZj08VGFiPgorCS0gZmlsZSBuYW1lCTplIHZlPFRhYj4KKwktIGV0Yy4KKworCUlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGVzLCBDVFJMLU4gKG5leHQpIGFuZCBDVFJMLVAgKHByZXZpb3VzKQorCXdpbGwgd2FsayB0aHJvdWdoIHRoZSBtYXRjaGVzLiAgPFRhYj4gd29ya3MgbGlrZSBDVFJMLU4sIGJ1dCB3cmFwcworCWFyb3VuZCB0byB0aGUgZmlyc3QgbWF0Y2guCisKKwlUaGUgJ3dpbGRjaGFyJyBvcHRpb24gY2FuIGJlIHNldCB0byB0aGUgY2hhcmFjdGVyIGZvciBjb21tYW5kLWxpbmUKKwljb21wbGV0aW9uLCA8VGFiPiBpcyB0aGUgZGVmYXVsdC4gIENUUkwtRCBjYW4gYmUgdHlwZWQgYWZ0ZXIgYW4KKwkoaW5jb21wbGV0ZSkgd2lsZGNhcmQ7IGFsbCBtYXRjaGVzIHdpbGwgYmUgbGlzdGVkLiAgQ1RSTC1BIHdpbGwgaW5zZXJ0CisJYWxsIG1hdGNoZXMuICBDVFJMLUwgd2lsbCBpbnNlcnQgdGhlIGxvbmdlc3QgY29tbW9uIHBhcnQgb2YgdGhlCisJbWF0Y2hlcy4KKworSW5zZXJ0LW1vZGUgY29tcGxldGlvbgkJCQkJfGlucy1jb21wbGV0aW9ufAorCUluIGluc2VydCBtb2RlIHRoZSBDVFJMLU4gYW5kIENUUkwtUCBrZXlzIGNhbiBiZSB1c2VkIHRvIGNvbXBsZXRlIGEKKwl3b3JkIHRoYXQgaGFzIHByZXZpb3VzbHkgYmVlbiB1c2VkLgl8aV9DVFJMLU58CisJV2l0aCBDVFJMLVggYW5vdGhlciBtb2RlIGlzIGVudGVyZWQsIHRocm91Z2ggd2hpY2ggY29tcGxldGlvbiBjYW4gYmUKKwlkb25lIGZvcjoKKwl8aV9DVFJMLVhfQ1RSTC1GfAlmaWxlIG5hbWVzCisJfGlfQ1RSTC1YX0NUUkwtS3wJd29yZHMgZnJvbSAnZGljdGlvbmFyeScgZmlsZXMKKwl8aV9DVFJMLVhfQ1RSTC1UfAl3b3JkcyBmcm9tICd0aGVzYXVydXMnIGZpbGVzCisJfGlfQ1RSTC1YX0NUUkwtSXwJd29yZHMgZnJvbSBpbmNsdWRlZCBmaWxlcworCXxpX0NUUkwtWF9DVFJMLUx8CXdob2xlIGxpbmVzCisJfGlfQ1RSTC1YX0NUUkwtXXwJd29yZHMgZnJvbSB0aGUgdGFncyBmaWxlCisJfGlfQ1RSTC1YX0NUUkwtRHwJZGVmaW5pdGlvbnMgb3IgbWFjcm9zCisKK0xvbmcgbGluZSBzdXBwb3J0CQkJCQl8J3dyYXAnfCB8J2xpbmVicmVhayd8CisJSWYgdGhlICd3cmFwJyBvcHRpb24gaXMgb2ZmLCBsb25nIGxpbmVzIHdpbGwgbm90IHdyYXAgYW5kIG9ubHkgcGFydAorCW9mIHRoZW0gd2lsbCBiZSBzaG93bi4gIFdoZW4gdGhlIGN1cnNvciBpcyBtb3ZlZCB0byBhIHBhcnQgdGhhdCBpcyBub3QKKwlzaG93biwgdGhlIHNjcmVlbiB3aWxsIHNjcm9sbCBob3Jpem9udGFsbHkuICBUaGUgbWluaW11bSBudW1iZXIgb2YKKwljb2x1bW5zIHRvIHNjcm9sbCBjYW4gYmUgc2V0IHdpdGggdGhlICdzaWRlc2Nyb2xsJyBvcHRpb24uICBUaGUgInpoIgorCWFuZCAiemwiIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIHNjcm9sbCBzaWRld2F5cy4KKwlBbHRlcm5hdGl2ZWx5LCBsb25nIGxpbmVzIGFyZSBicm9rZW4gaW4gYmV0d2VlbiB3b3JkcyB3aGVuIHRoZQorCSdsaW5lYnJlYWsnIG9wdGlvbiBpcyBzZXQuICBUaGlzIGFsbG93cyBlZGl0aW5nIGEgc2luZ2xlLWxpbmUKKwlwYXJhZ3JhcGggY29udmVuaWVudGx5IChlLmcuIHdoZW4gdGhlIHRleHQgaXMgbGF0ZXIgcmVhZCBpbnRvIGEgRFRQCisJcHJvZ3JhbSkuICBNb3ZlIHRoZSBjdXJzb3IgdXAvZG93biB3aXRoIHRoZSAiZ2siIGFuZCAiZ2oiIGNvbW1hbmRzLgorCitUZXh0IGZvcm1hdHRpbmcuCQkJCQl8Zm9ybWF0dGluZ3wKKwlUaGUgJ3RleHR3aWR0aCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgbGltaXQgdGhlIGxpbmUKKwlsZW5ndGguICBUaGlzIHN1cHBsZW1lbnRzIHRoZSAnd3JhcG1hcmdpbicgb3B0aW9uIG9mIFZpLCB3aGljaCB3YXMgbm90CisJdmVyeSB1c2VmdWwuICBUaGUgImdxIiBvcGVyYXRvciBjYW4gYmUgdXNlZCB0byBmb3JtYXQgYSBwaWVjZSBvZiB0ZXh0CisJKGZvciBleGFtcGxlLCAiZ3FhcCIgZm9ybWF0cyB0aGUgY3VycmVudCBwYXJhZ3JhcGgpLiAgQ29tbWFuZHMgZm9yCisJdGV4dCBhbGlnbm1lbnQ6ICI6Y2VudGVyIiwgIjpsZWZ0IiBhbmQgIjpyaWdodCIuCisKK0V4dGVuZGVkIHNlYXJjaCBwYXR0ZXJucwkJCQl8cGF0dGVybnwKKwlUaGVyZSBhcmUgbWFueSBleHRyYSBpdGVtcyB0byBtYXRjaCB2YXJpb3VzIHRleHQgaXRlbXMuICBFeGFtcGxlczoKKwlBICJcbiIgY2FuIGJlIHVzZWQgaW4gYSBzZWFyY2ggcGF0dGVybiB0byBtYXRjaCBhIGxpbmUgYnJlYWsuCisJInhcezIsNH0iIG1hdGNoZXMgIngiIDIgdG8gNCB0aW1lcy4KKwkiXHMiIG1hdGNoZXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIuCisKK0VkaXQtY29tcGlsZS1lZGl0IHNwZWVkdXAuCQkJCXxxdWlja2ZpeHwKKwlUaGUgIjptYWtlIiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJ1biB0aGUgY29tcGlsYXRpb24gYW5kIGp1bXAgdG8KKwl0aGUgZmlyc3QgZXJyb3IuICBBbHRlcm5hdGl2ZWx5IFZpbSBjYW4gYmUgc3RhcnRlZCB3aXRoIHRoZSAiLXEiCisJb3B0aW9uIGZyb20gdGhlIGNvbXBpbGVyLiAgQSBmaWxlIHdpdGggY29tcGlsZXIgZXJyb3IgbWVzc2FnZXMgaXMKKwlpbnRlcnByZXRlZC4gIFZpbSBzdGFydHMgZWRpdGluZyBhdCB0aGUgZmlyc3QgZXJyb3IuCisKKwlFYWNoIGxpbmUgaW4gdGhlIGVycm9yIGZpbGUgaXMgc2Nhbm5lZCBmb3IgdGhlIG5hbWUgb2YgYSBmaWxlLCBsaW5lCisJbnVtYmVyIGFuZCBlcnJvciBtZXNzYWdlLiAgVGhlICdlcnJvcmZvcm1hdCcgb3B0aW9uIGNhbiBiZSBzZXQgdG8gYQorCWxpc3Qgb2Ygc2NhbmYtbGlrZSBzdHJpbmdzIHRvIGhhbmRsZSBvdXRwdXQgZnJvbSBtYW55IGNvbXBpbGVycy4KKworCVRoZSAiOmNuIiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGp1bXAgdG8gdGhlIG5leHQgZXJyb3IuCisJIjpjbCIgbGlzdHMgYWxsIHRoZSBlcnJvciBtZXNzYWdlcy4gIE90aGVyIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUKKwkoYWxtb3N0IHRoZSBzYW1lIGFzIHdpdGggTWFueCdzIFogZWRpdG9yIG9uIHRoZSBBbWlnYSkuCisJVGhlICdtYWtlZWYnIG9wdGlvbiBoYXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2l0aCBlcnJvciBtZXNzYWdlcy4KKwlUaGUgJ21ha2VwcmcnIG9wdGlvbiBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byBiZSBleGVjdXRlZAorCXdpdGggdGhlICI6bWFrZSIgY29tbWFuZC4KKwlUaGUgJ3NoZWxscGlwZScgb3B0aW9uIGNvbnRhaW5zIHRoZSBzdHJpbmcgdG8gYmUgdXNlZCB0byBwdXQgdGhlCisJb3V0cHV0IG9mIHRoZSBjb21waWxlciBpbnRvIHRoZSBlcnJvcmZpbGUuCisKK0ltcHJvdmVkIGluZGVudGluZyBmb3IgQyBwcm9ncmFtcwkJCXwnY2luZGVudCd8CisJV2hlbiB0aGUgJ2NpbmRlbnQnIG9wdGlvbiBpcyBvbiB0aGUgaW5kZW50IG9mIGVhY2ggbGluZSBpcworCWF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQuICBDIHN5bnRheCBpcyBtb3N0bHkgcmVjb2duaXplZC4gIFRoZSBpbmRlbnQKKwlmb3IgdmFyaW91cyBzdHlsZXMgY2FuIGJlIHNldCB3aXRoICdjaW5vcHRpb25zJy4gIFRoZSBrZXlzIHRvIHRyaWdnZXIKKwlpbmRlbnRpbmcgY2FuIGJlIHNldCB3aXRoICdjaW5rZXlzJy4KKworCUNvbW1lbnRzIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGZvcm1hdHRlZC4gIFRoZSAnY29tbWVudHMnIG9wdGlvbiBjYW4gYmUKKwlzZXQgdG8gdGhlIGNoYXJhY3RlcnMgdGhhdCBzdGFydCBhbmQgZW5kIGEgY29tbWVudC4gIFRoaXMgd29ya3MgYmVzdAorCWZvciBDIGNvZGUsIGJ1dCBhbHNvIHdvcmtzIGZvciBlLW1haWwgKCI+IiBhdCBzdGFydCBvZiB0aGUgbGluZSkgYW5kCisJb3RoZXIgdHlwZXMgb2YgdGV4dC4gIFRoZSAiPSIgb3BlcmF0b3IgY2FuIGJlIHVzZWQgdG8gcmUtaW5kZW50CisJbGluZXMuCisKK1NlYXJjaGluZyBmb3Igd29yZHMgaW4gaW5jbHVkZSBmaWxlcwkJCXxpbmNsdWRlLXNlYXJjaHwKKwlUaGUgIltpIiBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgYSBtYXRjaCBvZiB0aGUgd29yZCB1bmRlcgorCXRoZSBjdXJzb3IgaW4gdGhlIGN1cnJlbnQgYW5kIGluY2x1ZGVkIGZpbGVzLiAgVGhlICdpbmNsdWRlJyBvcHRpb24KKwljYW4gYmUgc2V0IHRoZSBhIHBhdHRlcm4gdGhhdCBkZXNjcmliZXMgYSBjb21tYW5kIHRvIGluY2x1ZGUgYSBmaWxlCisJKHRoZSBkZWZhdWx0IGlzIGZvciBDIHByb2dyYW1zKS4KKwlUaGUgIltJIiBjb21tYW5kIGxpc3RzIGFsbCBtYXRjaGVzLCB0aGUgIlsgQ1RSTC1JIiBjb21tYW5kIGp1bXBzIHRvCisJYSBtYXRjaC4KKwlUaGUgIltkIiwgIltEIiBhbmQgIlsgQ1RSTC1EIiBjb21tYW5kcyBkbyB0aGUgc2FtZSwgYnV0IG9ubHkgZm9yCisJbGluZXMgd2hlcmUgdGhlIHBhdHRlcm4gZ2l2ZW4gd2l0aCB0aGUgJ2RlZmluZScgb3B0aW9uIG1hdGNoZXMuCisKK0F1dG9tYXRpYyBjb21tYW5kcwkJCQkJfGF1dG9jb21tYW5kfAorCUNvbW1hbmRzIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIHdoZW4gcmVhZGluZyBhIGZpbGUsIHdyaXRpbmcgYQorCWZpbGUsIGp1bXBpbmcgdG8gYW5vdGhlciBidWZmZXIsIGV0Yy4sIGRlcGVuZGluZyBvbiB0aGUgZmlsZSBuYW1lLgorCVRoaXMgaXMgdXNlZnVsIHRvIHNldCBvcHRpb25zIGFuZCBtYXBwaW5ncyBmb3IgQyBwcm9ncmFtcywKKwlkb2N1bWVudGF0aW9uLCBwbGFpbiB0ZXh0LCBlLW1haWwsIGV0Yy4gIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZQorCXRvIGVkaXQgY29tcHJlc3NlZCBmaWxlcy4KKworU2NyaXB0cyBhbmQgRXhwcmVzc2lvbnMJCQkJCXxleHByZXNzaW9ufAorCUNvbW1hbmRzIGhhdmUgYmVlbiBhZGRlZCB0byBmb3JtIHVwIGEgc2ltcGxlIGJ1dCBwb3dlcmZ1bCBzY3JpcHQKKwlsYW5ndWFnZS4KKwl8OmlmfAkJQ29uZGl0aW9uYWwgZXhlY3V0aW9uLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZXhhbXBsZQorCQkJdG8gc2V0IG9wdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiAkVEVSTS4KKwl8OndoaWxlfAlSZXBlYXQgYSBudW1iZXIgb2YgY29tbWFuZHMuCisJfDplY2hvfAkJUHJpbnQgdGhlIHJlc3VsdCBvZiBhbiBleHByZXNzaW9uLgorCXw6bGV0fAkJQXNzaWduIGEgdmFsdWUgdG8gYW4gaW50ZXJuYWwgdmFyaWFibGUsIG9wdGlvbiwgZXRjLgorCXw6ZXhlY3V0ZXwJRXhlY3V0ZSBhIGNvbW1hbmQgZm9ybWVkIGJ5IGFuIGV4cHJlc3Npb24uCisJZXRjLgorCitWaW1pbmZvCQkJCQkJCXx2aW1pbmZvLWZpbGV8CisJVGhlIGNvbW1hbmQtbGluZSBoaXN0b3J5LCBtYXJrcyBhbmQgcmVnaXN0ZXJzIGNhbiBiZSBzdG9yZWQgaW4gYSBmaWxlCisJdGhhdCBpcyByZWFkIG9uIHN0YXJ0dXAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlcGVhdCBhIHNlYXJjaCBjb21tYW5kCisJb3IgY29tbWFuZC1saW5lIGNvbW1hbmQgYWZ0ZXIgZXhpdGluZyBhbmQgcmVzdGFydGluZyBWaW0uICBJdCBpcyBhbHNvCisJcG9zc2libGUgdG8ganVtcCByaWdodCBiYWNrIHRvIHdoZXJlIHRoZSBsYXN0IGVkaXQgc3RvcHBlZCB3aXRoICInMCIuCisJVGhlICd2aW1pbmZvJyBvcHRpb24gY2FuIGJlIHNldCB0byBzZWxlY3Qgd2hpY2ggaXRlbXMgdG8gc3RvcmUgaW4gdGhlCisJLnZpbWluZm8gZmlsZS4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuCisKK01vdXNlIHN1cHBvcnQJCQkJCQl8bW91c2UtdXNpbmd8CisJVGhlIG1vdXNlIGlzIHN1cHBvcnRlZCBpbiB0aGUgR1VJIHZlcnNpb24sIGluIGFuIHh0ZXJtIGZvciBVbml4LCBmb3IKKwlMaW51eCB3aXRoIGdwbSwgZm9yIE1TLURPUywgYW5kIFdpbjMyLiAgSXQgY2FuIGJlIHVzZWQgdG8gcG9zaXRpb24gdGhlCisJY3Vyc29yLCBzZWxlY3QgdGhlIHZpc3VhbCBhcmVhLCBwYXN0ZSBhIHJlZ2lzdGVyLCBldGMuCisKK1VzYWdlIG9mIGtleSBuYW1lcwkJCQkJfDw+fCB8a2V5LW5vdGF0aW9ufAorCVNwZWNpYWwga2V5cyBub3cgYWxsIGhhdmUgYSBuYW1lIGxpa2UgPFVwPiwgPEVuZD4sIGV0Yy4KKwlUaGlzIG5hbWUgY2FuIGJlIHVzZWQgaW4gbWFwcGluZ3MsIHRvIG1ha2UgaXQgZWFzeSB0byBlZGl0IHRoZW0uCisKK0VkaXRpbmcgYmluYXJ5IGZpbGVzCQkJCQl8ZWRpdC1iaW5hcnl8CisJVmltIGNhbiBlZGl0IGJpbmFyeSBmaWxlcy4gIFlvdSBjYW4gY2hhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gYW4KKwlleGVjdXRhYmxlIGZpbGUsIHdpdGhvdXQgY29ycnVwdGluZyBpdC4gIFZpbSBkb2Vzbid0IHJlbW92ZSBOVUwKKwljaGFyYWN0ZXJzICh0aGV5IGFyZSByZXByZXNlbnRlZCBhcyA8Tkw+IGludGVybmFsbHkpLgorCXwtYnwJCWNvbW1hbmQtbGluZSBhcmd1bWVudCB0byBzdGFydCBlZGl0aW5nIGEgYmluYXJ5IGZpbGUKKwl8J2JpbmFyeSd8CU9wdGlvbiBzZXQgYnkgIi1iIi4gIFByZXZlbnRzIGFkZGluZyBhbiA8RU9MPiBmb3IgdGhlCisJCQlsYXN0IGxpbmUgaW4gdGhlIGZpbGUuCisKK011bHRpLWxhbmd1YWdlIHN1cHBvcnQJCQkJCXxtdWx0aS1sYW5nfAorCUZpbGVzIGluIGRvdWJsZS1ieXRlIG9yIG11bHRpLWJ5dGUgZW5jb2RpbmdzIGNhbiBiZSBlZGl0ZWQuICBUaGVyZSBpcworCVVURi04IHN1cHBvcnQgdG8gYmUgYWJsZSB0byBlZGl0IHZhcmlvdXMgbGFuZ3VhZ2VzIGF0IHRoZSBzYW1lIHRpbWUsCisJd2l0aG91dCBzd2l0Y2hpbmcgZm9udHMuIHxVVEYtOHwKKwlNZXNzYWdlcyBhbmQgbWVudXMgYXJlIGF2YWlsYWJsZSBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIE90aGVyIHZpbSBmZWF0dXJlcwkJCQkJKm90aGVyLWZlYXR1cmVzKgorCitBIHJhbmRvbSBjb2xsZWN0aW9uIG9mIG5pY2UgZXh0cmEgZmVhdHVyZXMuCisKKworV2hlbiBWaW0gaXMgc3RhcnRlZCB3aXRoICItcyBzY3JpcHRmaWxlIiwgdGhlIGNoYXJhY3RlcnMgcmVhZCBmcm9tCisic2NyaXB0ZmlsZSIgYXJlIHRyZWF0ZWQgYXMgaWYgeW91IHR5cGVkIHRoZW0uICBJZiBlbmQgb2YgZmlsZSBpcyByZWFjaGVkCitiZWZvcmUgdGhlIGVkaXRvciBleGl0cywgZnVydGhlciBjaGFyYWN0ZXJzIGFyZSByZWFkIGZyb20gdGhlIGNvbnNvbGUuCisKK1RoZSAiLXciIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvcmQgYWxsIHR5cGVkIGNoYXJhY3RlcnMgaW4gYSBzY3JpcHQgZmlsZS4KK1RoaXMgZmlsZSBjYW4gdGhlbiBiZSB1c2VkIHRvIHJlZG8gdGhlIGVkaXRpbmcsIHBvc3NpYmx5IG9uIGFub3RoZXIgZmlsZSBvcgorYWZ0ZXIgY2hhbmdpbmcgc29tZSBjb21tYW5kcyBpbiB0aGUgc2NyaXB0IGZpbGUuCisKK1RoZSAiLW8iIG9wdGlvbiBvcGVucyBhIHdpbmRvdyBmb3IgZWFjaCBhcmd1bWVudC4gICItbzQiIG9wZW5zIGZvdXIgd2luZG93cy4KKworVmkgcmVxdWlyZXMgc2V2ZXJhbCB0ZXJtY2FwIGVudHJpZXMgdG8gYmUgYWJsZSB0byB3b3JrIGZ1bGwtc2NyZWVuLiAgVmltIG9ubHkKK3JlcXVpcmVzIHRoZSAiY20iIGVudHJ5IChjdXJzb3IgbW90aW9uKS4KKworCitJbiBjb21tYW5kIG1vZGU6CisKK1doZW4gdGhlICdzaG93Y21kJyBvcHRpb24gaXMgc2V0LCB0aGUgY29tbWFuZCBjaGFyYWN0ZXJzIGFyZSBzaG93biBpbiB0aGUgbGFzdAorbGluZSBvZiB0aGUgc2NyZWVuLiAgVGhleSBhcmUgcmVtb3ZlZCB3aGVuIHRoZSBjb21tYW5kIGlzIGZpbmlzaGVkLgorCitJZiB0aGUgJ3J1bGVyJyBvcHRpb24gaXMgc2V0LCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaXMgc2hvd24gaW4gdGhlCitsYXN0IGxpbmUgb2YgdGhlIHNjcmVlbi4KKworIlUiIHN0aWxsIHdvcmtzIGFmdGVyIGhhdmluZyBtb3ZlZCBvZmYgdGhlIGxhc3QgY2hhbmdlZCBsaW5lIGFuZCBhZnRlciAidSIuCisKK0NoYXJhY3RlcnMgd2l0aCB0aGUgOHRoIGJpdCBzZXQgYXJlIGRpc3BsYXllZC4gIFRoZSBjaGFyYWN0ZXJzIGJldHdlZW4gJ34nIGFuZAorMHhhMCBhcmUgZGlzcGxheWVkIGFzICJ+PyIsICJ+QCIsICJ+QSIsIGV0Yy4sIHVubGVzcyB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGUKKydpc3ByaW50JyBvcHRpb24uCisKKyJdWyIgZ29lcyB0byB0aGUgbmV4dCBlbmRpbmcgb2YgYSBDIGZ1bmN0aW9uICgnfScgaW4gY29sdW1uIDEpLgorIltdIiBnb2VzIHRvIHRoZSBwcmV2aW91cyBlbmRpbmcgb2YgYSBDIGZ1bmN0aW9uICgnfScgaW4gY29sdW1uIDEpLgorCisiXWYiLCAiW2YiIGFuZCAiZ2YiIHN0YXJ0IGVkaXRpbmcgdGhlIGZpbGUgd2hvc2UgbmFtZSBpcyB1bmRlciB0aGUgY3Vyc29yLgorQ1RSTC1XIGYgc3BsaXRzIHRoZSB3aW5kb3cgYW5kIHN0YXJ0cyBlZGl0aW5nIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgdW5kZXIKK3RoZSBjdXJzb3IuCisKKyIqIiBzZWFyY2hlcyBmb3J3YXJkIGZvciB0aGUgaWRlbnRpZmllciB1bmRlciB0aGUgY3Vyc29yLCAiIyIgYmFja3dhcmQuCisiSyIgcnVucyB0aGUgcHJvZ3JhbSBkZWZpbmVkIGJ5IHRoZSAna2V5d29yZHByZycgb3B0aW9uLCB3aXRoIHRoZSBpZGVudGlmaWVyCit1bmRlciB0aGUgY3Vyc29yIGFzIGFyZ3VtZW50LgorCisiJSIgY2FuIGJlIHByZWNlZGVkIHdpdGggYSBjb3VudC4gIFRoZSBjdXJzb3IganVtcHMgdG8gdGhlIGxpbmUgdGhhdAorcGVyY2VudGFnZSBkb3duIGluIHRoZSBmaWxlLiAgVGhlIG5vcm1hbCAiJSIgZnVuY3Rpb24gdG8ganVtcCB0byB0aGUgbWF0Y2hpbmcKK2JyYWNlIHNraXBzIGJyYWNlcyBpbnNpZGUgcXVvdGVzLgorCitXaXRoIHRoZSBDVFJMLV0gY29tbWFuZCwgdGhlIGN1cnNvciBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgaWRlbnRpZmllci4KKworVGhlIHVzZWQgdGFncyBhcmUgcmVtZW1iZXJlZC4gIENvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgdGFnIHN0YWNrCithcmUgQ1RSTC1ULCAiOnBvcCIgYW5kICI6dGFnIi4gICI6dGFncyIgbGlzdHMgdGhlIHRhZyBzdGFjay4KKworVGhlICd0YWdzJyBvcHRpb24gY2FuIGJlIHNldCB0byBhIGxpc3Qgb2YgdGFnIGZpbGUgbmFtZXMuICBUaHVzIG11bHRpcGxlCit0YWcgZmlsZXMgY2FuIGJlIHVzZWQuICBGb3IgZmlsZSBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggIi4vIiwgdGhlICIuLyIgaXMKK3JlcGxhY2VkIHdpdGggdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgZmlsZS4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGEKK3RhZ3MgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGZpbGUgYmVpbmcgZWRpdGVkLgorCitQcmV2aW91c2x5IHVzZWQgZmlsZSBuYW1lcyBhcmUgcmVtZW1iZXJlZCBpbiB0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZSBsaXN0LgorQ1RSTC1eIGFjY2VwdHMgYSBjb3VudCwgd2hpY2ggaXMgYW4gaW5kZXggaW4gdGhpcyBsaXN0LgorIjpmaWxlcyIgY29tbWFuZCBzaG93cyB0aGUgbGlzdCBvZiBhbHRlcm5hdGUgZmlsZSBuYW1lcy4KKyIjPE4+IiBpcyByZXBsYWNlZCB3aXRoIHRoZSA8Tj50aCBhbHRlcm5hdGUgZmlsZSBuYW1lIGluIHRoZSBsaXN0LgorIiM8IiBpcyByZXBsYWNlZCB3aXRoIHRoZSBjdXJyZW50IGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbi4KKworU2VhcmNoIHBhdHRlcm5zIGhhdmUgbW9yZSBmZWF0dXJlcy4gIFRoZSA8Tkw+IGNoYXJhY3RlciBpcyBzZWVuIGFzIHBhcnQgb2YgdGhlCitzZWFyY2ggcGF0dGVybiBhbmQgdGhlIHN1YnN0aXR1dGUgc3RyaW5nIG9mICI6cyIuICBWaSBzZWVzIGl0IGFzIHRoZSBlbmQgb2YKK3RoZSBjb21tYW5kLgorCitTZWFyY2hlcyBjYW4gcHV0IHRoZSBjdXJzb3Igb24gdGhlIGVuZCBvZiBhIG1hdGNoIGFuZCBtYXkgaW5jbHVkZSBhIGNoYXJhY3Rlcgorb2Zmc2V0LgorCitDb3VudCBhZGRlZCB0byAifiIsICI6bmV4dCIsICI6TmV4dCIsICJuIiBhbmQgIk4iLgorCitUaGUgY29tbWFuZCAiOm5leHQhIiB3aXRoICdhdXRvd3JpdGUnIHNldCBkb2VzIG5vdCB3cml0ZSB0aGUgZmlsZS4gIEluIHZpIHRoZQorZmlsZSB3YXMgd3JpdHRlbiwgYnV0IHRoaXMgaXMgY29uc2lkZXJlZCB0byBiZSBhIGJ1ZywgYmVjYXVzZSBvbmUgZG9lcyBub3QKK2V4cGVjdCBpdCBhbmQgdGhlIGZpbGUgaXMgbm90IHdyaXR0ZW4gd2l0aCAiOnJld2luZCEiLgorCitJbiBWaSB3aGVuIGVudGVyaW5nIGEgPENSPiBpbiByZXBsYWNlIG1vZGUgZGVsZXRlcyBhIGNoYXJhY3RlciBvbmx5IHdoZW4gJ2FpJworaXMgc2V0IChidXQgZG9lcyBub3Qgc2hvdyBpdCB1bnRpbCB5b3UgaGl0IDxFc2M+KS4gIFZpbSBhbHdheXMgZGVsZXRlcyBhCitjaGFyYWN0ZXIgKGFuZCBzaG93cyBpdCBpbW1lZGlhdGVseSkuCisKK0FkZGVkIDp3bmV4dCBjb21tYW5kLiAgU2FtZSBhcyAiOndyaXRlIiBmb2xsb3dlZCBieSAiOm5leHQiLgorCitUaGUgIjp3ISIgY29tbWFuZCBhbHdheXMgd3JpdGVzLCBhbHNvIHdoZW4gdGhlIGZpbGUgaXMgd3JpdGUgcHJvdGVjdGVkLiAgSW4gVmkKK3lvdSB3b3VsZCBoYXZlIHRvIGRvICI6IWNobW9kICt3ICUiIGFuZCAiOnNldCBub3JvIi4KKworV2hlbiAndGlsZGVvcCcgaGFzIGJlZW4gc2V0LCAifiIgaXMgYW4gb3BlcmF0b3IgKG11c3QgYmUgZm9sbG93ZWQgYnkgYQorbW92ZW1lbnQgY29tbWFuZCkuCisKK1dpdGggdGhlICJKIiAoam9pbikgY29tbWFuZCB5b3UgY2FuIHJlc2V0IHRoZSAnam9pbnNwYWNlcycgb3B0aW9uIHRvIGhhdmUgb25seQorb25lIHNwYWNlIGFmdGVyIGEgcGVyaW9kIChWaSBpbnNlcnRzIHR3byBzcGFjZXMpLgorCisiY3ciIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB3aGl0ZSBzcGFjZSBmb3JtZWQgYnkgc2V2ZXJhbCBjaGFyYWN0ZXJzIChWaSBpcworY29uZnVzaW5nOiAiY3ciIG9ubHkgY2hhbmdlcyBvbmUgc3BhY2UsIHdoaWxlICJkdyIgZGVsZXRlcyBhbGwgd2hpdGUgc3BhY2UpLgorCisibyIgYW5kICJPIiBhY2NlcHQgYSBjb3VudCBmb3IgcmVwZWF0aW5nIHRoZSBpbnNlcnQgKFZpIGNsZWFycyBhIHBhcnQgb2YKK2Rpc3BsYXkpLgorCitGbGFncyBhZnRlciBFeCBjb21tYW5kcyBub3Qgc3VwcG9ydGVkIChubyBwbGFucyB0byBpbmNsdWRlIGl0KS4KKworT24gbm9uLVVOSVggc3lzdGVtcyAiOmNkIiBjb21tYW5kIHNob3dzIGN1cnJlbnQgZGlyZWN0b3J5IGluc3RlYWQgb2YgZ29pbmcgdG8KK3RoZSBob21lIGRpcmVjdG9yeSAodGhlcmUgaXNuJ3Qgb25lKS4gICI6cHdkIiBwcmludHMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uCithbGwgc3lzdGVtcy4KKworQWZ0ZXIgYSAiOmNkIiBjb21tYW5kIHRoZSBmaWxlIG5hbWVzIChpbiB0aGUgYXJndW1lbnQgbGlzdCwgb3BlbmVkIGZpbGVzKQorc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZXMuICBJbiBWaSAiOmNkIiBpcyBub3QgYWxsb3dlZCBpbiBhIGNoYW5nZWQgZmlsZTsKK290aGVyd2lzZSB0aGUgbWVhbmluZyBvZiBmaWxlIG5hbWVzIGNoYW5nZS4KKworIjpzb3VyY2UhIiBjb21tYW5kIHJlYWRzIFZpIGNvbW1hbmRzIGZyb20gYSBmaWxlLgorCisiOm1rZXhyYyIgY29tbWFuZCB3cml0ZXMgY3VycmVudCBtb2RpZmllZCBvcHRpb25zIGFuZCBtYXBwaW5ncyB0byBhICIuZXhyYyIKK2ZpbGUuICAiOm1rdmltcmMiIHdyaXRlcyB0byBhICIudmltcmMiIGZpbGUuCisKK05vIGNoZWNrIGZvciAidGFpbCByZWN1cnNpb24iIHdpdGggbWFwcGluZ3MuICBUaGlzIGFsbG93cyB0aGluZ3MgbGlrZQorIjptYXAhIGZvbyBeXWZvbyIuCisKK1doZW4gYSBtYXBwaW5nIHN0YXJ0cyB3aXRoIG51bWJlciwgdmkgbG9zZXMgdGhlIGNvdW50IHR5cGVkIGJlZm9yZSBpdCAoZS5nLgord2hlbiB1c2luZyB0aGUgbWFwcGluZyAiOm1hcCBnIDRHIiB0aGUgY29tbWFuZCAiN2ciIGdvZXMgdG8gbGluZSA0KS4gIFRoaXMgaXMKK2NvbnNpZGVyZWQgYSB2aSBidWcuICBWaW0gY29uY2F0ZW5hdGVzIHRoZSBjb3VudHMgKGluIHRoZSBleGFtcGxlIGl0IGJlY29tZXMKKyI3NEciKSwgYXMgbW9zdCBwZW9wbGUgd291bGQgZXhwZWN0LgorCitUaGUgOnB1dCEgY29tbWFuZCBpbnNlcnRzIHRoZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCisKK1RoZSAicCIgYW5kICJQIiBjb21tYW5kcyBvZiB2aSBjYW5ub3QgYmUgcmVwZWF0ZWQgd2l0aCAiLiIgd2hlbiB0aGUgcHV0dGVkCit0ZXh0IGlzIGxlc3MgdGhhbiBhIGxpbmUuICBJbiBWaW0gdGhleSBjYW4gYWx3YXlzIGJlIHJlcGVhdGVkLgorCisiOm5vcmVtYXAiIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZW50ZXIgYSBtYXBwaW5nIHRoYXQgd2lsbCBub3QgYmUgcmVtYXBwZWQuCitUaGlzIGlzIHVzZWZ1bCB0byBleGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0d28ga2V5cy4gICI6Y21hcCIsICI6Y3VubWFwIiBhbmQKKyI6Y25vcmVtYXAiIGNhbiBiZSB1c2VkIGZvciBtYXBwaW5nIGluIGNvbW1hbmQtbGluZSBlZGl0aW5nIG9ubHkuICAiOmltYXAiLAorIjppdW5tYXAiIGFuZCAiOmlub3JlbWFwIiBjYW4gYmUgdXNlZCBmb3IgbWFwcGluZyBpbiBpbnNlcnQgbW9kZSBvbmx5LgorU2ltaWxhciBjb21tYW5kcyBleGlzdCBmb3IgYWJicmV2aWF0aW9uczogIjpub3JlYWJicmV2IiwgIjppYWJicmV2IgorIjpjYWJicmV2IiwgIjppdW5hYmJyZXYiLCAiOmN1bmFiYnJldiIsICI6aW5vcmVhYmJyZXYiLCAiOmNub3JlYWJicmV2Ii4KKworSW4gVmkgdGhlIGNvbW1hbmQgIjptYXAgZm9vIGJhciIgd291bGQgcmVtb3ZlIGEgcHJldmlvdXMgbWFwcGluZworIjptYXAgYnVnIGZvbyIuICBUaGlzIGlzIGNvbnNpZGVyZWQgYSBidWcsIHNvIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiBWaW0uCisiOnVubWFwISBmb28iIGRvZXMgcmVtb3ZlICI6bWFwISBidWcgZm9vIiwgYmVjYXVzZSB1bm1hcHBpbmcgd291bGQgYmUgdmVyeQorZGlmZmljdWx0IG90aGVyd2lzZSAodGhpcyBpcyB2aSBjb21wYXRpYmxlKS4KKworVGhlICc6JyByZWdpc3RlciBjb250YWlucyB0aGUgbGFzdCBjb21tYW5kLWxpbmUuCitUaGUgJyUnIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4KK1RoZSAnLicgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGxhc3QgaW5zZXJ0ZWQgdGV4dC4KKworIjpkaXMiIGNvbW1hbmQgc2hvd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSB5YW5rIHJlZ2lzdGVycy4KKworQ1RSTC1PL0NUUkwtSSBjYW4gYmUgdXNlZCB0byBqdW1wIHRvIG9sZGVyL25ld2VyIHBvc2l0aW9ucy4gIFRoZXNlIGFyZSB0aGUKK3NhbWUgcG9zaXRpb25zIGFzIHVzZWQgd2l0aCB0aGUgJycgY29tbWFuZCwgYnV0IG1heSBiZSBpbiBhbm90aGVyIGZpbGUuICBUaGUKKyI6anVtcHMiIGNvbW1hbmQgbGlzdHMgdGhlIG9sZGVyIHBvc2l0aW9ucy4KKworSWYgdGhlICdzaGlmdHJvdW5kJyBvcHRpb24gaXMgc2V0LCBhbiBpbmRlbnQgaXMgcm91bmRlZCB0byBhIG11bHRpcGxlIG9mCisnc2hpZnR3aWR0aCcgd2l0aCAiPiIgYW5kICI8IiBjb21tYW5kcy4KKworVGhlICdzY3JvbGxqdW1wJyBvcHRpb24gY2FuIGJlIHNldCB0byB0aGUgbWluaW11bSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsCit3aGVuIHRoZSBjdXJzb3IgZ2V0cyBvZmYgdGhlIHNjcmVlbi4gIFVzZSB0aGlzIHdoZW4gc2Nyb2xsaW5nIGlzIHNsb3cuCisKK1RoZSAnc2Nyb2xsb2ZmJyBvcHRpb24gY2FuIGJlIHNldCB0byB0aGUgbWluaW11bSBudW1iZXIgb2YgbGluZXMgdG8ga2VlcAorYWJvdmUgYW5kIGJlbG93IHRoZSBjdXJzb3IuICBUaGlzIGdpdmVzIHNvbWUgY29udGV4dCB0byB3aGVyZSB5b3UgYXJlCitlZGl0aW5nLiAgV2hlbiBzZXQgdG8gYSBsYXJnZSBudW1iZXIgdGhlIGN1cnNvciBsaW5lIGlzIGFsd2F5cyBpbiB0aGUgbWlkZGxlCitvZiB0aGUgd2luZG93LgorCitVcHBlcmNhc2UgbWFya3MgY2FuIGJlIHVzZWQgdG8ganVtcCBiZXR3ZWVuIGZpbGVzLiAgVGhlICI6bWFya3MiIGNvbW1hbmQgbGlzdHMKK2FsbCBjdXJyZW50bHkgc2V0IG1hcmtzLiAgVGhlIGNvbW1hbmRzICInXSIgYW5kICJgXSIganVtcCB0byB0aGUgZW5kIG9mIHRoZQorcHJldmlvdXMgb3BlcmF0b3Igb3IgZW5kIG9mIHRoZSB0ZXh0IGluc2VydGVkIHdpdGggdGhlIHB1dCBjb21tYW5kLiAgIidbIiBhbmQKKyJgWyIgZG8ganVtcCB0byB0aGUgc3RhcnQuCisKK1RoZSAnc2hlbGx0eXBlJyBvcHRpb24gY2FuIGJlIHNldCB0byByZWZsZWN0IHRoZSB0eXBlIG9mIHNoZWxsIHVzZWQgb24gdGhlCitBbWlnYS4KKworVGhlICdoaWdobGlnaHQnIG9wdGlvbiBjYW4gYmUgc2V0IGZvciB0aGUgaGlnaGxpZ2h0IG1vZGUgdG8gYmUgdXNlZCBmb3IKK3NldmVyYWwgY29tbWFuZHMuCisKK1RoZSBDVFJMLUEgKGFkZCkgYW5kIENUUkwtWCAoc3VidHJhY3QpIGNvbW1hbmRzIGFyZSBuZXcuICBUaGUgY291bnQgdG8gdGhlCitjb21tYW5kIChkZWZhdWx0IDEpIGlzIGFkZGVkIHRvL3N1YnRyYWN0ZWQgZnJvbSB0aGUgbnVtYmVyIGF0IG9yIGFmdGVyIHRoZQorY3Vyc29yLiAgVGhhdCBudW1iZXIgbWF5IGJlIGRlY2ltYWwsIG9jdGFsIChzdGFydHMgd2l0aCBhICcwJykgb3IgaGV4YWRlY2ltYWwKKyhzdGFydHMgd2l0aCAnMHgnKS4gIFZlcnkgdXNlZnVsIGluIG1hY3Jvcy4KKworV2l0aCB0aGUgOnNldCBjb21tYW5kIHRoZSBwcmVmaXggImludiIgY2FuIGJlIHVzZWQgdG8gaW52ZXJ0IGJvb2xlYW4gb3B0aW9ucy4KKworSW4gYm90aCBWaSBhbmQgVmltIHlvdSBjYW4gY3JlYXRlIGEgbGluZSBicmVhayB3aXRoIHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQKK2J5IHVzaW5nIGEgQ1RSTC1NLiAgRm9yIFZpIHRoaXMgbWVhbnMgeW91IGNhbm5vdCBpbnNlcnQgYSByZWFsIENUUkwtTSBpbiB0aGUKK3RleHQuICBXaXRoIFZpbSB5b3UgY2FuIHB1dCBhIHJlYWwgQ1RSTC1NIGluIHRoZSB0ZXh0IGJ5IHByZWNlZGluZyBpdCB3aXRoIGEKK0NUUkwtVi4KKworCitJbiBJbnNlcnQgbW9kZToKKworSWYgdGhlICdyZXZpbnMnIG9wdGlvbiBpcyBzZXQsIGluc2VydCBoYXBwZW5zIGJhY2t3YXJkcy4gIFRoaXMgaXMgZm9yIHR5cGluZworSGVicmV3LiAgV2hlbiBpbnNlcnRpbmcgbm9ybWFsIGNoYXJhY3RlcnMgdGhlIGN1cnNvciB3aWxsIG5vdCBiZSBzaGlmdGVkIGFuZAordGhlIHRleHQgbW92ZXMgcmlnaHR3YXJkcy4gIEJhY2tzcGFjZSwgQ1RSTC1XIGFuZCBDVFJMLVUgd2lsbCBhbHNvIHdvcmsgaW4KK3RoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uICBDVFJMLUIgdG9nZ2xlcyB0aGUgJ3Jldmlucycgb3B0aW9uLiAgSW4gcmVwbGFjZSBtb2RlCisncmV2aW5zJyBoYXMgbm8gZWZmZWN0LiAgT25seSB3aGVuIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLgorCitUaGUgYmFja3NwYWNlIGtleSBjYW4gYmUgdXNlZCBqdXN0IGxpa2UgQ1RSTC1EIHRvIHJlbW92ZSBhdXRvLWluZGVudHMuCisKK1lvdSBjYW4gYmFja3NwYWNlLCBDVFJMLVUgYW5kIENUUkwtVyBvdmVyIGxpbmUgYnJlYWtzIGlmIHRoZSAnYmFja3NwYWNlJyAoYnMpCitvcHRpb24gaW5jbHVkZXMgImVvbCIuICBZb3UgY2FuIGJhY2tzcGFjZSBvdmVyIHRoZSBzdGFydCBvZiBpbnNlcnQgaWYgdGhlCisnYmFja3NwYWNlJyBvcHRpb24gaW5jbHVkZXMgInN0YXJ0Ii4KKworV2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgc2V0LCBhIGZldyBvcHRpb24gYXJlIHJlc2V0IGFuZCBtYXBwaW5nIGluIGluc2VydAorbW9kZSBhbmQgYWJicmV2aWF0aW9uIGFyZSBkaXNhYmxlZC4gIFRoaXMgYWxsb3dzIGZvciBwYXN0aW5nIHRleHQgaW4gd2luZG93aW5nCitzeXN0ZW1zIHdpdGhvdXQgdW5leHBlY3RlZCByZXN1bHRzLiAgV2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgcmVzZXQsIHRoZSBvbGQKK29wdGlvbiB2YWx1ZXMgYXJlIHJlc3RvcmVkLgorCitDVFJMLVQvQ1RSTC1EIGFsd2F5cyBpbnNlcnQvZGVsZXRlIGFuIGluZGVudCBpbiB0aGUgY3VycmVudCBsaW5lLCBubyBtYXR0ZXIKK3doYXQgY29sdW1uIHRoZSBjdXJzb3IgaXMgaW4uCisKK0NUUkwtQCAoaW5zZXJ0IHByZXZpb3VzbHkgaW5zZXJ0ZWQgdGV4dCkgd29ya3MgYWx3YXlzIChWaTogb25seSB3aGVuIHR5cGVkIGFzCitmaXJzdCBjaGFyYWN0ZXIpLgorCitDVFJMLUEgd29ya3MgbGlrZSBDVFJMLUAgYnV0IGRvZXMgbm90IGxlYXZlIGluc2VydCBtb2RlLgorCitDVFJMLVIgezAtOWEtei4ufSBjYW4gYmUgdXNlZCB0byBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIuCisKK1doZW4gdGhlICdzbWFydGluZGVudCcgb3B0aW9uIGlzIHNldCwgQyBwcm9ncmFtcyB3aWxsIGJlIGJldHRlciBhdXRvLWluZGVudGVkLgorV2l0aCAnY2luZGVudCcgZXZlbiBtb3JlLgorCitDVFJMLVkgYW5kIENUUkwtRSBjYW4gYmUgdXNlZCB0byBjb3B5IGEgY2hhcmFjdGVyIGZyb20gYWJvdmUvYmVsb3cgdGhlCitjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKworQWZ0ZXIgQ1RSTC1WIHlvdSBjYW4gZW50ZXIgYSB0aHJlZSBkaWdpdCBkZWNpbWFsIG51bWJlci4gIFRoaXMgYnl0ZSB2YWx1ZSBpcworaW5zZXJ0ZWQgaW4gdGhlIHRleHQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLiAgVXNlZnVsIGZvciBpbnRlcm5hdGlvbmFsCitjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBvbiB5b3VyIGtleWJvYXJkLgorCitXaGVuIHRoZSAnZXhwYW5kdGFiJyAoZXQpIG9wdGlvbiBpcyBzZXQsIGEgPFRhYj4gaXMgZXhwYW5kZWQgdG8gdGhlCithcHByb3ByaWF0ZSBudW1iZXIgb2Ygc3BhY2VzLgorCitUaGUgd2luZG93IGFsd2F5cyByZWZsZWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciAoVmkgZG9lcyBub3QgZG8gdGhpcword2hlbiBjaGFuZ2luZyB0ZXh0IGFuZCBpbiBzb21lIG90aGVyIGNhc2VzKS4KKworSWYgVmltIGlzIGNvbXBpbGVkIHdpdGggRElHUkFQSFMgZGVmaW5lZCwgZGlncmFwaHMgYXJlIHN1cHBvcnRlZC4gIEEgc2V0IG9mCitub3JtYWwgZGlncmFwaHMgaXMgaW5jbHVkZWQuICBUaGV5IGFyZSBzaG93biB3aXRoIHRoZSAiOmRpZ3JhcGgiIGNvbW1hbmQuCitNb3JlIGNhbiBiZSBhZGRlZCB3aXRoICI6ZGlncmFwaCB7Y2hhcjF9e2NoYXIyfSB7bnVtYmVyfSIuICBBIGRpZ3JhcGggaXMKK2VudGVyZWQgd2l0aCAiQ1RSTC1LIHtjaGFyMX0ge2NoYXIyfSIgb3IgIntjaGFyMX0gQlMge2NoYXIyfSIgKG9ubHkgd2hlbgorJ2RpZ3JhcGgnIG9wdGlvbiBpcyBzZXQpLgorCitXaGVuIHJlcGVhdGluZyBhbiBpbnNlcnQsIGUuZy4gIjEwYXRlc3QgPEVzYz4iIHZpIHdvdWxkIG9ubHkgaGFuZGxlIHdyYXBtYXJnaW4KK2ZvciB0aGUgZmlyc3QgaW5zZXJ0LiAgVmltIGRvZXMgaXQgZm9yIGFsbC4KKworQSBjb3VudCB0byB0aGUgImkiIG9yICJhIiBjb21tYW5kIGlzIHVzZWQgZm9yIGFsbCB0aGUgdGV4dC4gIFZpIHVzZXMgdGhlIGNvdW50Citvbmx5IGZvciBvbmUgbGluZS4gICIzaWFiYzxOTD5kZWY8RXNjPiIgd291bGQgaW5zZXJ0ICJhYmNhYmNhYmM8Tkw+ZGVmIiBpbiBWaQorYnV0ICJhYmM8Tkw+ZGVmYWJjPE5MPmRlZmFiYzxOTD5kZWYiIGluIFZpbS4KKworCitJbiBDb21tYW5kLWxpbmUgbW9kZToKKworPEVzYz4gdGVybWluYXRlcyB0aGUgY29tbWFuZC1saW5lIHdpdGhvdXQgZXhlY3V0aW5nIGl0LiBJbiB2aSB0aGUgY29tbWFuZAorbGluZSB3b3VsZCBiZSBleGVjdXRlZCwgd2hpY2ggaXMgbm90IHdoYXQgbW9zdCBwZW9wbGUgZXhwZWN0IChoaXR0aW5nIDxFc2M+CitzaG91bGQgYWx3YXlzIGdldCB5b3UgYmFjayB0byBjb21tYW5kIG1vZGUpLiAgVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBzb21lCitvYnNjdXJlIG1hY3JvcywgYW4gPEVzYz4gaW4gYSBtYWNybyB3aWxsIGV4ZWN1dGUgdGhlIGNvbW1hbmQuICBJZiB5b3Ugd2FudCBhCit0eXBlZCA8RXNjPiB0byBleGVjdXRlIHRoZSBjb21tYW5kIGxpa2UgdmkgZG9lcyB5b3UgY2FuIGZpeCB0aGlzIHdpdGgKKwkiOmNtYXAgXlY8RXNjPiBeVjxDUj4iCisKK0dlbmVyYWw6CisKK1RoZSAndHRpbWVvdXQnIG9wdGlvbiBpcyBsaWtlICd0aW1lb3V0JywgYnV0IG9ubHkgd29ya3MgZm9yIGN1cnNvciBhbmQKK2Z1bmN0aW9uIGtleXMsIG5vdCBmb3Igb3JkaW5hcnkgbWFwcGVkIGNoYXJhY3RlcnMuICBUaGUgJ3RpbWVvdXRsZW4nIG9wdGlvbgorZ2l2ZXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBpcyB3YWl0ZWQgZm9yLiAgSWYgdGhlICdlc2NrZXlzJyBvcHRpb24KK2lzIG5vdCBzZXQsIGN1cnNvciBhbmQgZnVuY3Rpb24ga2V5cyB0aGF0IHN0YXJ0IHdpdGggPEVzYz4gYXJlIG5vdCByZWNvZ25pemVkCitpbiBpbnNlcnQgbW9kZS4KKworVGhlcmUgaXMgYW4gb3B0aW9uIGZvciBlYWNoIHRlcm1pbmFsIHN0cmluZy4gIENhbiBiZSB1c2VkIHdoZW4gdGVybWNhcCBpcyBub3QKK3N1cHBvcnRlZCBvciB0byBjaGFuZ2UgaW5kaXZpZHVhbCBzdHJpbmdzLgorCitUaGUgJ2ZpbGVmb3JtYXQnIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHNlbGVjdCB0aGUgPEVPTD46ICJkb3MiIDxDUj48Tkw+LCAidW5peCIKKzxOTD4gb3IgIm1hYyIgPENSPi4KK1doZW4gdGhlICdmaWxlZm9ybWF0cycgb3B0aW9uIGlzIG5vdCBlbXB0eSwgVmltIHRyaWVzIHRvIGRldGVjdCB0aGUgdHlwZSBvZgorPEVPTD4gYXV0b21hdGljYWxseS4gIFRoZSAnZmlsZWZvcm1hdCcgb3B0aW9uIGlzIHNldCBhY2NvcmRpbmdseS4KKworT24gc3lzdGVtcyB0aGF0IGhhdmUgbm8gam9iIGNvbnRyb2wgKG9sZGVyIFVuaXggc3lzdGVtcyBhbmQgbm9uLVVuaXggc3lzdGVtcykKK3RoZSBDVFJMLVosICI6c3RvcCIgb3IgIjpzdXNwZW5kIiBjb21tYW5kIHN0YXJ0cyBhIG5ldyBzaGVsbC4KKworSWYgVmltIGlzIHN0YXJ0ZWQgb24gdGhlIEFtaWdhIHdpdGhvdXQgYW4gaW50ZXJhY3RpdmUgd2luZG93IGZvciBvdXRwdXQsIGEKK3dpbmRvdyBpcyBvcGVuZWQgKGFuZCA6c2ggc3RpbGwgd29ya3MpLiAgWW91IGNhbiBnaXZlIGEgZGV2aWNlIHRvIHVzZSBmb3IKK2VkaXRpbmcgd2l0aCB0aGUgfC1kfCBhcmd1bWVudCwgZS5nLiAiLWQgY29uOjIwLzIwLzYwMC8xNTAiLgorCitUaGUgJ2NvbHVtbnMnIGFuZCAnbGluZXMnIG9wdGlvbnMgYXJlIHVzZWQgdG8gc2V0IG9yIGdldCB0aGUgd2lkdGggYW5kIGhlaWdodAorb2YgdGhlIGRpc3BsYXkuCisKK09wdGlvbiBzZXR0aW5ncyBhcmUgcmVhZCBmcm9tIHRoZSBmaXJzdCBhbmQgbGFzdCBmZXcgbGluZXMgb2YgdGhlIGZpbGUuCitPcHRpb24gJ21vZGVsaW5lcycgZGV0ZXJtaW5lcyBob3cgbWFueSBsaW5lcyBhcmUgdHJpZWQgKGRlZmF1bHQgaXMgNSkuICBOb3RlCit0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIFZpIHZlcnNpb25zIHRoYXQgY2FuIGV4ZWN1dGUgYW55IEV4IGNvbW1hbmQKK2luIGEgbW9kZWxpbmUgKGEgbWFqb3Igc2VjdXJpdHkgcHJvYmxlbSkuICB8dHJvamFuLWhvcnNlfAorCitJZiB0aGUgJ2luc2VydG1vZGUnIG9wdGlvbiBpcyBzZXQgKGUuZy4gaW4gLmV4cmMpLCBWaW0gc3RhcnRzIGluIGluc2VydCBtb2RlLgorQW5kIGl0IGNvbWVzIGJhY2sgdGhlcmUsIHdoZW4gcHJlc3NpbmcgPEVzYz4uCisKK1VuZG8gaW5mb3JtYXRpb24gaXMga2VwdCBpbiBtZW1vcnkuICBBdmFpbGFibGUgbWVtb3J5IGxpbWl0cyB0aGUgbnVtYmVyIGFuZAorc2l6ZSBvZiBjaGFuZ2UgdGhhdCBjYW4gYmUgdW5kb25lLiAgVGhpcyBtYXkgYmUgYSBwcm9ibGVtIHdpdGggTVMtRE9TLCBpcworaGFyZGx5IGEgcHJvYmxlbSBvbiB0aGUgQW1pZ2EgYW5kIGFsbW9zdCBuZXZlciB3aXRoIFVuaXggYW5kIFdpbjMyLgorCitJZiB0aGUgJ2JhY2t1cCcgb3IgJ3dyaXRlYmFja3VwJyBvcHRpb24gaXMgc2V0OiBCZWZvcmUgYSBmaWxlIGlzIG92ZXJ3cml0dGVuLAorYSBiYWNrdXAgZmlsZSAoLmJhaykgaXMgbWFkZS4gIElmIHRoZSAiYmFja3VwIiBvcHRpb24gaXMgc2V0IGl0IGlzIGxlZnQKK2JlaGluZC4KKworVmltIGNyZWF0ZXMgYSBmaWxlIGVuZGluZyBpbiAiLnN3cCIgdG8gc3RvcmUgcGFydHMgb2YgdGhlIGZpbGUgdGhhdCBoYXZlIGJlZW4KK2NoYW5nZWQgb3IgdGhhdCBkbyBub3QgZml0IGluIG1lbW9yeS4gIFRoaXMgZmlsZSBjYW4gYmUgdXNlZCB0byByZWNvdmVyIGZyb20KK2FuIGFib3J0ZWQgZWRpdGluZyBzZXNzaW9uIHdpdGggInZpbSAtciBmaWxlIi4gIFVzaW5nIHRoZSBzd2FwIGZpbGUgY2FuIGJlCitzd2l0Y2hlZCBvZmYgYnkgc2V0dGluZyB0aGUgJ3VwZGF0ZWNvdW50JyBvcHRpb24gdG8gMCBvciBzdGFydGluZyBWaW0gd2l0aAordGhlICItbiIgb3B0aW9uLiAgVXNlIHRoZSAnZGlyZWN0b3J5JyBvcHRpb24gZm9yIHBsYWNpbmcgdGhlIC5zd3AgZmlsZQorc29tZXdoZXJlIGVsc2UuCisKK1ZpbSBpcyBhYmxlIHRvIHdvcmsgY29ycmVjdGx5IG9uIGZpbGVzeXN0ZW1zIHdpdGggOC4zIGZpbGUgbmFtZXMsIGFsc28gd2hlbgordXNpbmcgbWVzc3lkb3Mgb3IgY3Jvc3Nkb3MgZmlsZXN5c3RlbXMgb24gdGhlIEFtaWdhLCBvciBhbnkgOC4zIG1vdW50ZWQKK2ZpbGVzeXN0ZW0gdW5kZXIgVW5peC4gIFNlZSB8J3Nob3J0bmFtZSd8LgorCitFcnJvciBtZXNzYWdlcyBhcmUgc2hvd24gYXQgbGVhc3Qgb25lIHNlY29uZCAoVmkgb3ZlcndyaXRlcyBlcnJvciBtZXNzYWdlcykuCisKK0lmIFZpbSBnaXZlcyB0aGUgfGhpdC1lbnRlcnwgcHJvbXB0LCB5b3UgY2FuIGhpdCBhbnkga2V5LiAgQ2hhcmFjdGVycyBvdGhlcgordGhhbiA8Q1I+LCA8Tkw+IGFuZCA8U3BhY2U+IGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgKHN0YXJ0IG9mKSBhIGNvbW1hbmQuICAoVmkKK29ubHkgYWNjZXB0cyBhIGNvbW1hbmQgc3RhcnRpbmcgd2l0aCAnOicpLgorCitUaGUgY29udGVudHMgb2YgdGhlIG51bWJlcmVkIGFuZCB1bm5hbWVkIHJlZ2lzdGVycyBpcyByZW1lbWJlcmVkIHdoZW4KK2NoYW5naW5nIGZpbGVzLgorCitUaGUgIk5vIGxpbmVzIGluIGJ1ZmZlciIgbWVzc2FnZSBpcyBhIG5vcm1hbCBtZXNzYWdlIGluc3RlYWQgb2YgYW4gZXJyb3IKK21lc3NhZ2UsIHNpbmNlIHRoYXQgbWF5IGNhdXNlIGEgbWFwcGluZyB0byBiZSBhYm9ydGVkLgorCitUaGUgQVVYOiBkZXZpY2Ugb2YgdGhlIEFtaWdhIGlzIHN1cHBvcnRlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis2LiBDb21tYW5kLWxpbmUgYXJndW1lbnRzCQkJCSpjbWRsaW5lLWFyZ3VtZW50cyoKKworRGlmZmVyZW50IHZlcnNpb25zIG9mIFZpIGhhdmUgZGlmZmVyZW50IGNvbW1hbmQtbGluZSBhcmd1bWVudHMuICBUaGlzIGNhbiBiZQorY29uZnVzaW5nLiAgVG8gaGVscCB5b3UsIHRoaXMgc2VjdGlvbiBnaXZlcyBhbiBvdmVydmlldyBvZiB0aGUgZGlmZmVyZW5jZXMuCisKK0ZpdmUgdmFyaWFudHMgb2YgVmkgd2lsbCBiZSBjb25zaWRlcmVkIGhlcmU6CisJRWx2aXMJRWx2aXMgdmVyc2lvbiAyLjFiCisJTnZpCU52aSB2ZXJzaW9uIDEuNzkKKwlQb3NpeAlQb3NpeCAxMDAzLjIKKwlWaQlWaSB2ZXJzaW9uIDMuNyAoZm9yIFN1biA0LjEueCkKKwlWaWxlCVZpbGUgdmVyc2lvbiA3LjQgKGluY29tcGxldGUpCisJVmltCVZpbSB2ZXJzaW9uIDUuMgorCitPbmx5IFZpbSBpcyBhYmxlIHRvIGFjY2VwdCBvcHRpb25zIGluIGJldHdlZW4gYW5kIGFmdGVyIHRoZSBmaWxlIG5hbWVzLgorCisre2NvbW1hbmR9CUVsdmlzLCBOdmksIFBvc2l4LCBWaSwgVmltOiBTYW1lIGFzICItYyB7Y29tbWFuZH0iLgorCistCQlOdmksIFBvc2l4LCBWaTogUnVuIEV4IGluIGJhdGNoIG1vZGUuCisJCVZpbTogUmVhZCBmaWxlIGZyb20gc3RkaW4gKHVzZSAtcyBmb3IgYmF0Y2ggbW9kZSkuCisKKy0tCQlWaW06IEVuZCBvZiBvcHRpb25zLCBvbmx5IGZpbGUgbmFtZXMgYXJlIGZvbGxvd2luZy4KKworLS1jbWQge2NvbW1hbmR9CVZpbTogZXhlY3V0ZSB7Y29tbWFuZH0gYmVmb3JlIHNvdXJjaW5nIHZpbXJjIGZpbGVzLgorCistLWVjaG8td2lkCVZpbTogR1RLKyBlY2hvZXMgdGhlIFdpbmRvdyBJRCBvbiBzdGRvdXQKKworLS1oZWxwCQlWaW06IHNob3cgaGVscCBtZXNzYWdlIGFuZCBleGl0LgorCistLWxpdGVyYWwJVmltOiB0YWtlIGZpbGUgbmFtZXMgbGl0ZXJhbGx5LCBkb24ndCBleHBhbmQgd2lsZGNhcmRzLgorCistLW5vZm9yawlWaW06IHNhbWUgYXMgfC1mfAorCistLW5vcGx1Z2luW3NdCVZpbTogU2tpcCBsb2FkaW5nIHBsdWdpbnMuCisKKy0tcmVtb3RlCVZpbTogZWRpdCB0aGUgZmlsZXMgaW4gYW5vdGhlciBWaW0gc2VydmVyCisKKy0tcmVtb3RlLWV4cHIge2V4cHJ9CVZpbTogZXZhbHVhdGUge2V4cHJ9IGluIGFub3RoZXIgVmltIHNlcnZlcgorCistLXJlbW90ZS1zZW5kIHtrZXlzfQlWaW06IHNlbmQge2tleXN9IHRvIGEgVmltIHNlcnZlciBhbmQgZXhpdAorCistLXJlbW90ZS1zaWxlbnQge2ZpbGV9CVZpbTogZWRpdCB0aGUgZmlsZXMgaW4gYW5vdGhlciBWaW0gc2VydmVyIGlmIHBvc3NpYmxlCisKKy0tcmVtb3RlLXdhaXQJVmltOiBlZGl0IHRoZSBmaWxlcyBpbiBhbm90aGVyIFZpbSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIGl0CisKKy0tcmVtb3RlLXdhaXQtc2lsZW50CVZpbTogbGlrZSAtLXJlbW90ZS13YWl0LCBubyBjb21wbGFpbnRzIGlmIG5vdCBwb3NzaWJsZQorCistLXJvbGUge3JvbGV9CVZpbTogR1RLKyAyOiBzZXQgcm9sZSBvZiBtYWluIHdpbmRvdworCistLXNlcnZlcmxpc3QJVmltOiBPdXRwdXQgYSBsaXN0IG9mIFZpbSBzZXJ2ZXJzIGFuZCBleGl0CisKKy0tc2VydmVybmFtZSB7bmFtZX0JVmltOiBTcGVjaWZ5IFZpbSBzZXJ2ZXIgbmFtZQorCistLXNvY2tldGlkIHtpZH0JCVZpbTogR1RLIHdpbmRvdyBzb2NrZXQgdG8gcnVuIFZpbSBpbgorCistLXZlcnNpb24JVmltOiBzaG93IHZlcnNpb24gbWVzc2FnZSBhbmQgZXhpdC4KKworLT8JCVZpbGU6IHByaW50IHVzYWdlIHN1bW1hcnkgYW5kIGV4aXQuCisKKy1hCQlFbHZpczogTG9hZCBhbGwgc3BlY2lmaWVkIGZpbGUgbmFtZXMgaW50byBhIHdpbmRvdyAodXNlIC1vIGZvcgorCQlWaW0pLgorCistQQkJVmltOiBTdGFydCBpbiBBcmFiaWMgbW9kZSAod2hlbiBjb21waWxlZCB3aXRoIEFyYWJpYykuCisKKy1iIHtibGtzaXplfQlFbHZpczogVXNlIHtibGtzaXplfSBibG9ja3NpemUgZm9yIHRoZSBzZXNzaW9uIGZpbGUuCistYgkJVmltOiBzZXQgJ2JpbmFyeScgbW9kZS4KKworLUMJCVZpbTogQ29tcGF0aWJsZSBtb2RlLgorCistYyB7Y29tbWFuZH0JRWx2aXMsIE52aSwgUG9zaXgsIFZpbTogcnVuIHtjb21tYW5kfSBhcyBhbiBFeCBjb21tYW5kIGFmdGVyCisJCWxvYWRpbmcgdGhlIGVkaXQgYnVmZmVyLgorCQlWaW06IGFsbG93IHVwIHRvIDEwICItYyIgYXJndW1lbnRzCisKKy1kIHtkZXZpY2V9CVZpbTogVXNlIHtkZXZpY2V9IGZvciBJL08gKEFtaWdhIG9ubHkpLiB7b25seSB3aGVuIGNvbXBpbGVkCisJCXdpdGhvdXQgdGhlIHwrZGlmZnwgZmVhdHVyZX0KKy1kCQlWaW06IHN0YXJ0IHdpdGggJ2RpZmYnIHNldC4gfHZpbWRpZmZ8CisKKy1kZXYge2RldmljZX0JVmltOiBVc2Uge2RldmljZX0gZm9yIEkvTyAoQW1pZ2Egb25seSkuCisKKy1ECQlWaW06IGRlYnVnIG1vZGUuCisKKy1lCQlFbHZpcywgTnZpLCBWaW06IFN0YXJ0IGluIEV4IG1vZGUsIGFzIGlmIHRoZSBleGVjdXRhYmxlIGlzCisJCWNhbGxlZCAiZXgiLgorCistRQkJVmltOiBTdGFydCBpbiBpbXByb3ZlZCBFeCBtb2RlIHxnUXwsIGxpa2UgImV4aW0iLgorCistZgkJVmltOiBSdW4gR1VJIGluIGZvcmVncm91bmQgKEFtaWdhOiBkb24ndCBvcGVuIG5ldyB3aW5kb3cpLgorLWYge3Nlc3Npb259CUVsdmlzOiBVc2Uge3Nlc3Npb259IGFzIHRoZSBzZXNzaW9uIGZpbGUuCisKKy1GCQlWaW06IFN0YXJ0IGluIEZhcnNpIG1vZGUgKHdoZW4gY29tcGlsZWQgd2l0aCBGYXJzaSkuCisJCU52aTogRmFzdCBzdGFydCwgZG9uJ3QgcmVhZCB0aGUgZW50aXJlIGZpbGUgd2hlbiBlZGl0aW5nCisJCXN0YXJ0cy4KKworLUcge2d1aX0JRWx2aXM6IFVzZSB0aGUge2d1aX0gYXMgdXNlciBpbnRlcmZhY2UuCisKKy1nCQlWaW06IFN0YXJ0IEdVSS4KKy1nIE4JCVZpbGU6IHN0YXJ0IGVkaXRpbmcgYXQgbGluZSBOCisKKy1oCQlWaW06IEdpdmUgaGVscCBtZXNzYWdlLgorCQlWaWxlOiBlZGl0IHRoZSBoZWxwIGZpbGUKKworLUgJCVZpbTogc3RhcnQgSGVicmV3IG1vZGUgKHdoZW4gY29tcGlsZWQgd2l0aCBpdCkuCisKKy1pCQlFbHZpczogU3RhcnQgZWFjaCB3aW5kb3cgaW4gSW5zZXJ0IG1vZGUuCistaSB7dmltaW5mb30JVmltOiBVc2Uge3ZpbWluZm99IGZvciB2aW1pbmZvIGZpbGUuCisKKy1MCQlWaW06IFNhbWUgYXMgIi1yIiAoYWxzbyBpbiBzb21lIHZlcnNpb25zIG9mIFZpKS4KKworLWwJCU52aSwgVmksIFZpbTogU2V0ICdsaXNwJyBhbmQgJ3Nob3dtYXRjaCcgb3B0aW9ucy4KKworLW0JCVZpbTogTW9kaWZpY2F0aW9ucyBub3QgYWxsb3dlZCB0byBiZSB3cml0dGVuLCByZXNldHMgJ3dyaXRlJworCQlvcHRpb24uCisKKy1NCQlWaW06IE1vZGlmaWNhdGlvbnMgbm90IGFsbG93ZWQsIHJlc2V0cyAnbW9kaWZpYWJsZScgYW5kIHRoZQorCQknd3JpdGUnIG9wdGlvbi4KKworLU4JCVZpbTogTm8tY29tcGF0aWJsZSBtb2RlLgorCistbgkJVmltOiBObyBzd2FwIGZpbGUgdXNlZC4KKworLW5iW2FyZ3NdCVZpbTogb3BlbiBhIE5ldEJlYW5zIGludGVyZmFjZSBjb25uZWN0aW9uCisKKy1PW05dCQlWaW06IExpa2UgLW8sIGJ1dCB1c2UgdmVydGljYWxseSBzcGxpdCB3aW5kb3dzLgorCistb1tOXQkJVmltOiBPcGVuIFtOXSB3aW5kb3dzLCBvciBvbmUgZm9yIGVhY2ggZmlsZS4KKworLVAge3BhcmVudC10aXRsZX0gV2luMzIgVmltOiBvcGVuIFZpbSBpbnNpZGUgYSBwYXJlbnQgYXBwbGljYXRpb24gd2luZG93CisKKy1xIHtuYW1lfQlWaW06IFVzZSB7bmFtZX0gZm9yIHF1aWNrZml4IGVycm9yIGZpbGUuCistcXtuYW1lfQlWaW06IElkZW0uCisKKy1SCQlFbHZpcywgTnZpLCBQb3NpeCwgVmlsZSwgVmltOiBTZXQgdGhlICdyZWFkb25seScgb3B0aW9uLgorCistcgkJRWx2aXMsIE52aSwgUG9zaXgsIFZpLCBWaW06IFJlY292ZXJ5IG1vZGUuCisKKy1TCQlOdmk6IFNldCAnc2VjdXJlJyBvcHRpb24uCistUyB7c2NyaXB0fQlWaW06IHNvdXJjZSBzY3JpcHQgYWZ0ZXIgc3RhcnRpbmcgdXAuCisKKy1zCQlOdmksIFBvc2l4LCBWaW06IFNhbWUgYXMgIi0iIChzaWxlbnQgbW9kZSksIHdoZW4gaW4gRXggbW9kZS4KKwkJRWx2aXM6IFNldHMgdGhlICdzYWZlcicgb3B0aW9uLgorLXMge3NjcmlwdGlufQlWaW06IFJlYWQgZnJvbSBzY3JpcHQgZmlsZSB7c2NyaXB0aW59OyBvbmx5IHdoZW4gbm90IGluIEV4CisJCW1vZGUuCistcyB7cGF0dGVybn0JVmlsZTogc2VhcmNoIGZvciB7cGF0dGVybn0KKworLXQge3RhZ30JRWx2aXMsIE52aSwgUG9zaXgsIFZpLCBWaW06IEVkaXQgdGhlIGZpbGUgY29udGFpbmluZyB7dGFnfS4KKy10e3RhZ30JCVZpbTogSWRlbS4KKworLVQge3Rlcm19CVZpbTogU2V0IHRlcm1pbmFsIG5hbWUgdG8ge3Rlcm19LgorCistdSB7dmltcmN9CVZpbTogUmVhZCBpbml0aWFsaXphdGlvbnMgZnJvbSB7dmltcmN9IGZpbGUuCisKKy1VIHtndmltcmN9CVZpbTogUmVhZCBHVUkgaW5pdGlhbGl6YXRpb25zIGZyb20ge2d2aW1yY30gZmlsZS4KKworLXYJCU52aSwgUG9zaXgsIFZpLCBWaW06IEJlZ2luIGluIE5vcm1hbCBtb2RlICh2aXN1YWwgbW9kZSwgaW4gVmkKKwkJdGVybXMpLgorCQlWaWxlOiBWaWV3IG1vZGUsIG5vIGNoYW5nZXMgcG9zc2libGUuCisKKy1WCQlFbHZpcywgVmltOiBWZXJib3NlIG1vZGUuCistVntucn0JCVZpbTogVmVyYm9zZSBtb2RlIHdpdGggc3BlY2lmaWVkIGxldmVsLgorCistdyB7c2l6ZX0JRWx2aXMsIFBvc2l4LCBOdmksIFZpLCBWaW06IFNldCB2YWx1ZSBvZiAnd2luZG93JyB0byB7c2l6ZX0uCistd3tzaXplfQlOdmksIFZpOiBTYW1lIGFzICItdyB7c2l6ZX0iLgorLXcge25hbWV9CVZpbTogV3JpdGUgdG8gc2NyaXB0IGZpbGUge25hbWV9IChtdXN0IHN0YXJ0IHdpdGggbm9uLWRpZ2l0KS4KKworLVcge25hbWV9CVZpbTogQXBwZW5kIHRvIHNjcmlwdCBmaWxlIHtuYW1lfS4KKworLXgJCVZpLCBWaW06IEFzayBmb3IgZW5jcnlwdGlvbiBrZXkuICBTZWUgfGVuY3J5cHRpb258LgorCistWAkJVmltOiBEb24ndCBjb25uZWN0IHRvIHRoZSBYIHNlcnZlci4KKworLXkJCVZpbTogU3RhcnQgaW4gZWFzeSBtb2RlLCBsaWtlIHxldmltfC4KKworLVoJCVZpbTogcmVzdHJpY3RlZCBtb2RlCisKK0B7Y21kZmlsZX0JVmlsZTogdXNlIHtjbWRmaWxlfSBhcyBzdGFydHVwIGZpbGUuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aW0uMSBiL3J1bnRpbWUvZG9jL3ZpbS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZmE1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92aW0uMQpAQCAtMCwwICsxLDU0MSBAQAorLlRIIFZJTSAxICIyMDAyIEZlYiAyMiIKKy5TSCBOQU1FCit2aW0gXC0gVmkgSU1wcm92ZWQsIGEgcHJvZ3JhbW1lcnMgdGV4dCBlZGl0b3IKKy5TSCBTWU5PUFNJUworLmJyCisuQiB2aW0KK1tvcHRpb25zXSBbZmlsZSAuLl0KKy5icgorLkIgdmltCitbb3B0aW9uc10gLQorLmJyCisuQiB2aW0KK1tvcHRpb25zXSBcLXQgdGFnCisuYnIKKy5CIHZpbQorW29wdGlvbnNdIFwtcSBbZXJyb3JmaWxlXQorLlBQCisuYnIKKy5CIGV4CisuYnIKKy5CIHZpZXcKKy5icgorLkIgZ3ZpbQorLkIgZ3ZpZXcKKy5CIGV2aW0KKy5CIGV2aWV3CisuYnIKKy5CIHJ2aW0KKy5CIHJ2aWV3CisuQiByZ3ZpbQorLkIgcmd2aWV3CisuU0ggREVTQ1JJUFRJT04KKy5CIFZpbQoraXMgYSB0ZXh0IGVkaXRvciB0aGF0IGlzIHVwd2FyZHMgY29tcGF0aWJsZSB0byBWaS4KK0l0IGNhbiBiZSB1c2VkIHRvIGVkaXQgYWxsIGtpbmRzIG9mIHBsYWluIHRleHQuCitJdCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgZWRpdGluZyBwcm9ncmFtcy4KKy5QUAorVGhlcmUgYXJlIGEgbG90IG9mIGVuaGFuY2VtZW50cyBhYm92ZSBWaTogbXVsdGkgbGV2ZWwgdW5kbywKK211bHRpIHdpbmRvd3MgYW5kIGJ1ZmZlcnMsIHN5bnRheCBoaWdobGlnaHRpbmcsIGNvbW1hbmQgbGluZQorZWRpdGluZywgZmlsZW5hbWUgY29tcGxldGlvbiwgb24tbGluZSBoZWxwLCB2aXN1YWwgc2VsZWN0aW9uLCBldGMuLgorU2VlICI6aGVscCB2aV9kaWZmLnR4dCIgZm9yIGEgc3VtbWFyeSBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbgorLkIgVmltCithbmQgVmkuCisuUFAKK1doaWxlIHJ1bm5pbmcKKy5CIFZpbQorYSBsb3Qgb2YgaGVscCBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgb24tbGluZSBoZWxwIHN5c3RlbSwgd2l0aCB0aGUgIjpoZWxwIgorY29tbWFuZC4KK1NlZSB0aGUgT04tTElORSBIRUxQIHNlY3Rpb24gYmVsb3cuCisuUFAKK01vc3Qgb2Z0ZW4KKy5CIFZpbQoraXMgc3RhcnRlZCB0byBlZGl0IGEgc2luZ2xlIGZpbGUgd2l0aCB0aGUgY29tbWFuZAorLlBQCisJdmltIGZpbGUKKy5QUAorTW9yZSBnZW5lcmFsbHkKKy5CIFZpbQoraXMgc3RhcnRlZCB3aXRoOgorLlBQCisJdmltIFtvcHRpb25zXSBbZmlsZWxpc3RdCisuUFAKK0lmIHRoZSBmaWxlbGlzdCBpcyBtaXNzaW5nLCB0aGUgZWRpdG9yIHdpbGwgc3RhcnQgd2l0aCBhbiBlbXB0eSBidWZmZXIuCitPdGhlcndpc2UgZXhhY3RseSBvbmUgb3V0IG9mIHRoZSBmb2xsb3dpbmcgZm91ciBtYXkgYmUgdXNlZCB0byBjaG9vc2Ugb25lIG9yCittb3JlIGZpbGVzIHRvIGJlIGVkaXRlZC4KKy5UUCAxMgorZmlsZSAuLgorQSBsaXN0IG9mIGZpbGVuYW1lcy4KK1RoZSBmaXJzdCBvbmUgd2lsbCBiZSB0aGUgY3VycmVudCBmaWxlIGFuZCByZWFkIGludG8gdGhlIGJ1ZmZlci4KK1RoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIG9uIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBidWZmZXIuCitZb3UgY2FuIGdldCB0byB0aGUgb3RoZXIgZmlsZXMgd2l0aCB0aGUgIjpuZXh0IiBjb21tYW5kLgorVG8gZWRpdCBhIGZpbGUgdGhhdCBzdGFydHMgd2l0aCBhIGRhc2gsIHByZWNlZGUgdGhlIGZpbGVsaXN0IHdpdGggIi0tIi4KKy5UUAorLQorVGhlIGZpbGUgdG8gZWRpdCBpcyByZWFkIGZyb20gc3RkaW4uICBDb21tYW5kcyBhcmUgcmVhZCBmcm9tIHN0ZGVyciwgd2hpY2gKK3Nob3VsZCBiZSBhIHR0eS4KKy5UUAorLXQge3RhZ30KK1RoZSBmaWxlIHRvIGVkaXQgYW5kIHRoZSBpbml0aWFsIGN1cnNvciBwb3NpdGlvbiBkZXBlbmRzIG9uIGEgInRhZyIsIGEgc29ydAorb2YgZ290byBsYWJlbC4KK3t0YWd9IGlzIGxvb2tlZCB1cCBpbiB0aGUgdGFncyBmaWxlLCB0aGUgYXNzb2NpYXRlZCBmaWxlIGJlY29tZXMgdGhlIGN1cnJlbnQKK2ZpbGUgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbW1hbmQgaXMgZXhlY3V0ZWQuCitNb3N0bHkgdGhpcyBpcyB1c2VkIGZvciBDIHByb2dyYW1zLCBpbiB3aGljaCBjYXNlIHt0YWd9IGNvdWxkIGJlIGEgZnVuY3Rpb24KK25hbWUuCitUaGUgZWZmZWN0IGlzIHRoYXQgdGhlIGZpbGUgY29udGFpbmluZyB0aGF0IGZ1bmN0aW9uIGJlY29tZXMgdGhlIGN1cnJlbnQgZmlsZQorYW5kIHRoZSBjdXJzb3IgaXMgcG9zaXRpb25lZCBvbiB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLgorU2VlICI6aGVscCB0YWctY29tbWFuZHMiLgorLlRQCistcSBbZXJyb3JmaWxlXQorU3RhcnQgaW4gcXVpY2tGaXggbW9kZS4KK1RoZSBmaWxlIFtlcnJvcmZpbGVdIGlzIHJlYWQgYW5kIHRoZSBmaXJzdCBlcnJvciBpcyBkaXNwbGF5ZWQuCitJZiBbZXJyb3JmaWxlXSBpcyBvbWl0dGVkLCB0aGUgZmlsZW5hbWUgaXMgb2J0YWluZWQgZnJvbSB0aGUgJ2Vycm9yZmlsZScKK29wdGlvbiAoZGVmYXVsdHMgdG8gIkF6dGVjQy5FcnIiIGZvciB0aGUgQW1pZ2EsICJlcnJvcnMuZXJyIiBvbiBvdGhlcgorc3lzdGVtcykuCitGdXJ0aGVyIGVycm9ycyBjYW4gYmUganVtcGVkIHRvIHdpdGggdGhlICI6Y24iIGNvbW1hbmQuCitTZWUgIjpoZWxwIHF1aWNrZml4Ii4KKy5QUAorLkIgVmltCitiZWhhdmVzIGRpZmZlcmVudGx5LCBkZXBlbmRpbmcgb24gdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgKHRoZSBleGVjdXRhYmxlIG1heQorc3RpbGwgYmUgdGhlIHNhbWUgZmlsZSkuCisuVFAgMTAKK3ZpbQorVGhlICJub3JtYWwiIHdheSwgZXZlcnl0aGluZyBpcyBkZWZhdWx0LgorLlRQCitleAorU3RhcnQgaW4gRXggbW9kZS4KK0dvIHRvIE5vcm1hbCBtb2RlIHdpdGggdGhlICI6dmkiIGNvbW1hbmQuCitDYW4gYWxzbyBiZSBkb25lIHdpdGggdGhlICItZSIgYXJndW1lbnQuCisuVFAKK3ZpZXcKK1N0YXJ0IGluIHJlYWQtb25seSBtb2RlLiAgWW91IHdpbGwgYmUgcHJvdGVjdGVkIGZyb20gd3JpdGluZyB0aGUgZmlsZXMuICBDYW4KK2Fsc28gYmUgZG9uZSB3aXRoIHRoZSAiLVIiIGFyZ3VtZW50LgorLlRQCitndmltIGd2aWV3CitUaGUgR1VJIHZlcnNpb24uCitTdGFydHMgYSBuZXcgd2luZG93LgorQ2FuIGFsc28gYmUgZG9uZSB3aXRoIHRoZSAiLWciIGFyZ3VtZW50LgorLlRQCitldmltIGV2aWV3CitUaGUgR1VJIHZlcnNpb24gaW4gZWFzeSBtb2RlLgorU3RhcnRzIGEgbmV3IHdpbmRvdy4KK0NhbiBhbHNvIGJlIGRvbmUgd2l0aCB0aGUgIi15IiBhcmd1bWVudC4KKy5UUAorcnZpbSBydmlldyByZ3ZpbSByZ3ZpZXcKK0xpa2UgdGhlIGFib3ZlLCBidXQgd2l0aCByZXN0cmljdGlvbnMuICBJdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBzdGFydCBzaGVsbAorY29tbWFuZHMsIG9yIHN1c3BlbmQKKy5CIFZpbS4KK0NhbiBhbHNvIGJlIGRvbmUgd2l0aCB0aGUgIi1aIiBhcmd1bWVudC4KKy5TSCBPUFRJT05TCitUaGUgb3B0aW9ucyBtYXkgYmUgZ2l2ZW4gaW4gYW55IG9yZGVyLCBiZWZvcmUgb3IgYWZ0ZXIgZmlsZW5hbWVzLgorT3B0aW9ucyB3aXRob3V0IGFuIGFyZ3VtZW50IGNhbiBiZSBjb21iaW5lZCBhZnRlciBhIHNpbmdsZSBkYXNoLgorLlRQIDEyCisrW251bV0KK0ZvciB0aGUgZmlyc3QgZmlsZSB0aGUgY3Vyc29yIHdpbGwgYmUgcG9zaXRpb25lZCBvbiBsaW5lICJudW0iLgorSWYgIm51bSIgaXMgbWlzc2luZywgdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgb24gdGhlIGxhc3QgbGluZS4KKy5UUAorKy97cGF0fQorRm9yIHRoZSBmaXJzdCBmaWxlIHRoZSBjdXJzb3Igd2lsbCBiZSBwb3NpdGlvbmVkIG9uIHRoZQorZmlyc3Qgb2NjdXJyZW5jZSBvZiB7cGF0fS4KK1NlZSAiOmhlbHAgc2VhcmNoLXBhdHRlcm4iIGZvciB0aGUgYXZhaWxhYmxlIHNlYXJjaCBwYXR0ZXJucy4KKy5UUAorK3tjb21tYW5kfQorLlRQCistYyB7Y29tbWFuZH0KK3tjb21tYW5kfSB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZQorZmlyc3QgZmlsZSBoYXMgYmVlbiByZWFkLgore2NvbW1hbmR9IGlzIGludGVycHJldGVkIGFzIGFuIEV4IGNvbW1hbmQuCitJZiB0aGUge2NvbW1hbmR9IGNvbnRhaW5zIHNwYWNlcyBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMgKHRoaXMKK2RlcGVuZHMgb24gdGhlIHNoZWxsIHRoYXQgaXMgdXNlZCkuCitFeGFtcGxlOiBWaW0gIitzZXQgc2kiIG1haW4uYworLmJyCitOb3RlOiBZb3UgY2FuIHVzZSB1cCB0byAxMCAiKyIgb3IgIi1jIiBjb21tYW5kcy4KKy5UUAorLVMge2ZpbGV9Cit7ZmlsZX0gd2lsbCBiZSBzb3VyY2VkIGFmdGVyIHRoZSBmaXJzdCBmaWxlIGhhcyBiZWVuIHJlYWQuCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gLWMgInNvdXJjZSB7ZmlsZX0iLgore2ZpbGV9IGNhbm5vdCBzdGFydCB3aXRoICctJy4KK0lmIHtmaWxlfSBpcyBvbWl0dGVkICJTZXNzaW9uLnZpbSIgaXMgdXNlZCAob25seSB3b3JrcyB3aGVuIC1TIGlzIHRoZSBsYXN0Cithcmd1bWVudCkuCisuVFAKKy0tY21kIHtjb21tYW5kfQorTGlrZSB1c2luZyAiLWMiLCBidXQgdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQganVzdCBiZWZvcmUKK3Byb2Nlc3NpbmcgYW55IHZpbXJjIGZpbGUuCitZb3UgY2FuIHVzZSB1cCB0byAxMCBvZiB0aGVzZSBjb21tYW5kcywgaW5kZXBlbmRlbnRseSBmcm9tICItYyIgY29tbWFuZHMuCisuVFAKKy1BCitJZgorLkIgVmltCitoYXMgYmVlbiBjb21waWxlZCB3aXRoIEFSQUJJQyBzdXBwb3J0IGZvciBlZGl0aW5nIHJpZ2h0LXRvLWxlZnQKK29yaWVudGVkIGZpbGVzIGFuZCBBcmFiaWMga2V5Ym9hcmQgbWFwcGluZywgdGhpcyBvcHRpb24gc3RhcnRzCisuQiBWaW0KK2luIEFyYWJpYyBtb2RlLCBpLmUuICdhcmFiaWMnIGlzIHNldC4gIE90aGVyd2lzZSBhbiBlcnJvcgorbWVzc2FnZSBpcyBnaXZlbiBhbmQKKy5CIFZpbQorYWJvcnRzLgorLlRQCistYgorQmluYXJ5IG1vZGUuCitBIGZldyBvcHRpb25zIHdpbGwgYmUgc2V0IHRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gZWRpdCBhIGJpbmFyeSBvcgorZXhlY3V0YWJsZSBmaWxlLgorLlRQCistQworQ29tcGF0aWJsZS4gIFNldCB0aGUgJ2NvbXBhdGlibGUnIG9wdGlvbi4KK1RoaXMgd2lsbCBtYWtlCisuQiBWaW0KK2JlaGF2ZSBtb3N0bHkgbGlrZSBWaSwgZXZlbiB0aG91Z2ggYSAudmltcmMgZmlsZSBleGlzdHMuCisuVFAKKy1kCitTdGFydCBpbiBkaWZmIG1vZGUuCitUaGVyZSBzaG91bGQgYmUgdHdvIG9yIHRocmVlIGZpbGUgbmFtZSBhcmd1bWVudHMuCisuQiBWaW0KK3dpbGwgb3BlbiBhbGwgdGhlIGZpbGVzIGFuZCBzaG93IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS4KK1dvcmtzIGxpa2UgdmltZGlmZigxKS4KKy5UUAorLWQge2RldmljZX0KK09wZW4ge2RldmljZX0gZm9yIHVzZSBhcyBhIHRlcm1pbmFsLgorT25seSBvbiB0aGUgQW1pZ2EuCitFeGFtcGxlOgorIlwtZCBjb246MjAvMzAvNjAwLzE1MCIuCisuVFAKKy1ECitEZWJ1Z2dpbmcuICBHbyB0byBkZWJ1Z2dpbmcgbW9kZSB3aGVuIGV4ZWN1dGluZyB0aGUgZmlyc3QgY29tbWFuZCBmcm9tIGEKK3NjcmlwdC4KKy5UUAorLWUKK1N0YXJ0CisuQiBWaW0KK2luIEV4IG1vZGUsIGp1c3QgbGlrZSB0aGUgZXhlY3V0YWJsZSB3YXMgY2FsbGVkICJleCIuCisuVFAKKy1FCitTdGFydAorLkIgVmltCitpbiBpbXByb3ZlZCBFeCBtb2RlLCBqdXN0IGxpa2UgdGhlIGV4ZWN1dGFibGUgd2FzIGNhbGxlZCAiZXhpbSIuCisuVFAKKy1mCitGb3JlZ3JvdW5kLiAgRm9yIHRoZSBHVUkgdmVyc2lvbiwKKy5CIFZpbQord2lsbCBub3QgZm9yayBhbmQgZGV0YWNoIGZyb20gdGhlIHNoZWxsIGl0IHdhcyBzdGFydGVkIGluLgorT24gdGhlIEFtaWdhLAorLkIgVmltCitpcyBub3QgcmVzdGFydGVkIHRvIG9wZW4gYSBuZXcgd2luZG93LgorVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2hlbgorLkIgVmltCitpcyBleGVjdXRlZCBieSBhIHByb2dyYW0gdGhhdCB3aWxsIHdhaXQgZm9yIHRoZSBlZGl0CitzZXNzaW9uIHRvIGZpbmlzaCAoZS5nLiBtYWlsKS4KK09uIHRoZSBBbWlnYSB0aGUgIjpzaCIgYW5kICI6ISIgY29tbWFuZHMgd2lsbCBub3Qgd29yay4KKy5UUAorLS1ub2ZvcmsKK0ZvcmVncm91bmQuICBGb3IgdGhlIEdVSSB2ZXJzaW9uLAorLkIgVmltCit3aWxsIG5vdCBmb3JrIGFuZCBkZXRhY2ggZnJvbSB0aGUgc2hlbGwgaXQgd2FzIHN0YXJ0ZWQgaW4uCisuVFAKKy1GCitJZgorLkIgVmltCitoYXMgYmVlbiBjb21waWxlZCB3aXRoIEZLTUFQIHN1cHBvcnQgZm9yIGVkaXRpbmcgcmlnaHQtdG8tbGVmdAorb3JpZW50ZWQgZmlsZXMgYW5kIEZhcnNpIGtleWJvYXJkIG1hcHBpbmcsIHRoaXMgb3B0aW9uIHN0YXJ0cworLkIgVmltCitpbiBGYXJzaSBtb2RlLCBpLmUuICdma21hcCcgYW5kICdyaWdodGxlZnQnIGFyZSBzZXQuCitPdGhlcndpc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiBhbmQKKy5CIFZpbQorYWJvcnRzLgorLlRQCistZworSWYKKy5CIFZpbQoraGFzIGJlZW4gY29tcGlsZWQgd2l0aCBHVUkgc3VwcG9ydCwgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgR1VJLgorSWYgbm8gR1VJIHN1cHBvcnQgd2FzIGNvbXBpbGVkIGluLCBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuIGFuZAorLkIgVmltCithYm9ydHMuCisuVFAKKy1oCitHaXZlIGEgYml0IG9mIGhlbHAgYWJvdXQgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIG9wdGlvbnMuCitBZnRlciB0aGlzCisuQiBWaW0KK2V4aXRzLgorLlRQCistSAorSWYKKy5CIFZpbQoraGFzIGJlZW4gY29tcGlsZWQgd2l0aCBSSUdIVExFRlQgc3VwcG9ydCBmb3IgZWRpdGluZyByaWdodC10by1sZWZ0CitvcmllbnRlZCBmaWxlcyBhbmQgSGVicmV3IGtleWJvYXJkIG1hcHBpbmcsIHRoaXMgb3B0aW9uIHN0YXJ0cworLkIgVmltCitpbiBIZWJyZXcgbW9kZSwgaS5lLiAnaGttYXAnIGFuZCAncmlnaHRsZWZ0JyBhcmUgc2V0LgorT3RoZXJ3aXNlIGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4gYW5kCisuQiBWaW0KK2Fib3J0cy4KKy5UUAorLWkge3ZpbWluZm99CitXaGVuIHVzaW5nIHRoZSB2aW1pbmZvIGZpbGUgaXMgZW5hYmxlZCwgdGhpcyBvcHRpb24gc2V0cyB0aGUgZmlsZW5hbWUgdG8gdXNlLAoraW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAifi8udmltaW5mbyIuCitUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gc2tpcCB0aGUgdXNlIG9mIHRoZSAudmltaW5mbyBmaWxlLCBieSBnaXZpbmcgdGhlIG5hbWUKKyJOT05FIi4KKy5UUAorLUwKK1NhbWUgYXMgLXIuCisuVFAKKy1sCitMaXNwIG1vZGUuCitTZXRzIHRoZSAnbGlzcCcgYW5kICdzaG93bWF0Y2gnIG9wdGlvbnMgb24uCisuVFAKKy1tCitNb2RpZnlpbmcgZmlsZXMgaXMgZGlzYWJsZWQuCitSZXNldHMgdGhlICd3cml0ZScgb3B0aW9uLgorWW91IGNhbiBzdGlsbCBtb2RpZnkgdGhlIGJ1ZmZlciwgYnV0IHdyaXRpbmcgYSBmaWxlIGlzIG5vdCBwb3NzaWJsZS4KKy5UUAorLU0KK01vZGlmaWNhdGlvbnMgbm90IGFsbG93ZWQuICBUaGUgJ21vZGlmaWFibGUnIGFuZCAnd3JpdGUnIG9wdGlvbnMgd2lsbCBiZSB1bnNldCwKK3NvIHRoYXQgY2hhbmdlcyBhcmUgbm90IGFsbG93ZWQgYW5kIGZpbGVzIGNhbiBub3QgYmUgd3JpdHRlbi4gIE5vdGUgdGhhdCB0aGVzZQorb3B0aW9ucyBjYW4gYmUgc2V0IHRvIGVuYWJsZSBtYWtpbmcgbW9kaWZpY2F0aW9ucy4KKy5UUAorLU4KK05vLWNvbXBhdGlibGUgbW9kZS4gIFJlc2V0IHRoZSAnY29tcGF0aWJsZScgb3B0aW9uLgorVGhpcyB3aWxsIG1ha2UKKy5CIFZpbQorYmVoYXZlIGEgYml0IGJldHRlciwgYnV0IGxlc3MgVmkgY29tcGF0aWJsZSwgZXZlbiB0aG91Z2ggYSAudmltcmMgZmlsZSBkb2VzCitub3QgZXhpc3QuCisuVFAKKy1uCitObyBzd2FwIGZpbGUgd2lsbCBiZSB1c2VkLgorUmVjb3ZlcnkgYWZ0ZXIgYSBjcmFzaCB3aWxsIGJlIGltcG9zc2libGUuCitIYW5keSBpZiB5b3Ugd2FudCB0byBlZGl0IGEgZmlsZSBvbiBhIHZlcnkgc2xvdyBtZWRpdW0gKGUuZy4gZmxvcHB5KS4KK0NhbiBhbHNvIGJlIGRvbmUgd2l0aCAiOnNldCB1Yz0wIi4KK0NhbiBiZSB1bmRvbmUgd2l0aCAiOnNldCB1Yz0yMDAiLgorLlRQCistbmIKK0JlY29tZSBhbiBlZGl0b3Igc2VydmVyIGZvciBOZXRCZWFucy4gIFNlZSB0aGUgZG9jcyBmb3IgZGV0YWlscy4KKy5UUAorLW9bTl0KK09wZW4gTiB3aW5kb3dzIHN0YWNrZWQuCitXaGVuIE4gaXMgb21pdHRlZCwgb3BlbiBvbmUgd2luZG93IGZvciBlYWNoIGZpbGUuCisuVFAKKy1PW05dCitPcGVuIE4gd2luZG93cyBzaWRlIGJ5IHNpZGUuCitXaGVuIE4gaXMgb21pdHRlZCwgb3BlbiBvbmUgd2luZG93IGZvciBlYWNoIGZpbGUuCisuVFAKKy1SCitSZWFkLW9ubHkgbW9kZS4KK1RoZSAncmVhZG9ubHknIG9wdGlvbiB3aWxsIGJlIHNldC4KK1lvdSBjYW4gc3RpbGwgZWRpdCB0aGUgYnVmZmVyLCBidXQgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBhY2NpZGVudGx5CitvdmVyd3JpdGluZyBhIGZpbGUuCitJZiB5b3UgZG8gd2FudCB0byBvdmVyd3JpdGUgYSBmaWxlLCBhZGQgYW4gZXhjbGFtYXRpb24gbWFyayB0byB0aGUgRXggY29tbWFuZCwKK2FzIGluICI6dyEiLgorVGhlIC1SIG9wdGlvbiBhbHNvIGltcGxpZXMgdGhlIC1uIG9wdGlvbiAoc2VlIGJlbG93KS4KK1RoZSAncmVhZG9ubHknIG9wdGlvbiBjYW4gYmUgcmVzZXQgd2l0aCAiOnNldCBub3JvIi4KK1NlZSAiOmhlbHAgJ3JlYWRvbmx5JyIuCisuVFAKKy1yCitMaXN0IHN3YXAgZmlsZXMsIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlbSBmb3IgcmVjb3ZlcnkuCisuVFAKKy1yIHtmaWxlfQorUmVjb3ZlcnkgbW9kZS4KK1RoZSBzd2FwIGZpbGUgaXMgdXNlZCB0byByZWNvdmVyIGEgY3Jhc2hlZCBlZGl0aW5nIHNlc3Npb24uCitUaGUgc3dhcCBmaWxlIGlzIGEgZmlsZSB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lIGFzIHRoZSB0ZXh0IGZpbGUgd2l0aCAiLnN3cCIKK2FwcGVuZGVkLgorU2VlICI6aGVscCByZWNvdmVyeSIuCisuVFAKKy1zCitTaWxlbnQgbW9kZS4gIE9ubHkgd2hlbiBzdGFydGVkIGFzICJFeCIgb3Igd2hlbiB0aGUgIi1lIiBvcHRpb24gd2FzIGdpdmVuCitiZWZvcmUgdGhlICItcyIgb3B0aW9uLgorLlRQCistcyB7c2NyaXB0aW59CitUaGUgc2NyaXB0IGZpbGUge3NjcmlwdGlufSBpcyByZWFkLgorVGhlIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgYXJlIGludGVycHJldGVkIGFzIGlmIHlvdSBoYWQgdHlwZWQgdGhlbS4KK1RoZSBzYW1lIGNhbiBiZSBkb25lIHdpdGggdGhlIGNvbW1hbmQgIjpzb3VyY2UhIHtzY3JpcHRpbn0iLgorSWYgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFjaGVkIGJlZm9yZSB0aGUgZWRpdG9yIGV4aXRzLCBmdXJ0aGVyIGNoYXJhY3RlcnMKK2FyZSByZWFkIGZyb20gdGhlIGtleWJvYXJkLgorLlRQCistVCB7dGVybWluYWx9CitUZWxscworLkIgVmltCit0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgeW91IGFyZSB1c2luZy4KK09ubHkgcmVxdWlyZWQgd2hlbiB0aGUgYXV0b21hdGljIHdheSBkb2Vzbid0IHdvcmsuCitTaG91bGQgYmUgYSB0ZXJtaW5hbCBrbm93bgordG8KKy5CIFZpbQorKGJ1aWx0aW4pIG9yIGRlZmluZWQgaW4gdGhlIHRlcm1jYXAgb3IgdGVybWluZm8gZmlsZS4KKy5UUAorLXUge3ZpbXJjfQorVXNlIHRoZSBjb21tYW5kcyBpbiB0aGUgZmlsZSB7dmltcmN9IGZvciBpbml0aWFsaXphdGlvbnMuCitBbGwgdGhlIG90aGVyIGluaXRpYWxpemF0aW9ucyBhcmUgc2tpcHBlZC4KK1VzZSB0aGlzIHRvIGVkaXQgYSBzcGVjaWFsIGtpbmQgb2YgZmlsZXMuCitJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNraXAgYWxsIGluaXRpYWxpemF0aW9ucyBieSBnaXZpbmcgdGhlIG5hbWUgIk5PTkUiLgorU2VlICI6aGVscCBpbml0aWFsaXphdGlvbiIgd2l0aGluIHZpbSBmb3IgbW9yZSBkZXRhaWxzLgorLlRQCistVSB7Z3ZpbXJjfQorVXNlIHRoZSBjb21tYW5kcyBpbiB0aGUgZmlsZSB7Z3ZpbXJjfSBmb3IgR1VJIGluaXRpYWxpemF0aW9ucy4KK0FsbCB0aGUgb3RoZXIgR1VJIGluaXRpYWxpemF0aW9ucyBhcmUgc2tpcHBlZC4KK0l0IGNhbiBhbHNvIGJlIHVzZWQgdG8gc2tpcCBhbGwgR1VJIGluaXRpYWxpemF0aW9ucyBieSBnaXZpbmcgdGhlIG5hbWUgIk5PTkUiLgorU2VlICI6aGVscCBndWktaW5pdCIgd2l0aGluIHZpbSBmb3IgbW9yZSBkZXRhaWxzLgorLlRQCistVltOXQorVmVyYm9zZS4gIEdpdmUgbWVzc2FnZXMgYWJvdXQgd2hpY2ggZmlsZXMgYXJlIHNvdXJjZWQgYW5kIGZvciByZWFkaW5nIGFuZAord3JpdGluZyBhIHZpbWluZm8gZmlsZS4gIFRoZSBvcHRpb25hbCBudW1iZXIgTiBpcyB0aGUgdmFsdWUgZm9yICd2ZXJib3NlJy4KK0RlZmF1bHQgaXMgMTAuCisuVFAKKy12CitTdGFydAorLkIgVmltCitpbiBWaSBtb2RlLCBqdXN0IGxpa2UgdGhlIGV4ZWN1dGFibGUgd2FzIGNhbGxlZCAidmkiLiAgVGhpcyBvbmx5IGhhcyBlZmZlY3QKK3doZW4gdGhlIGV4ZWN1dGFibGUgaXMgY2FsbGVkICJleCIuCisuVFAKKy13IHtzY3JpcHRvdXR9CitBbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB5b3UgdHlwZSBhcmUgcmVjb3JkZWQgaW4gdGhlIGZpbGUKK3tzY3JpcHRvdXR9LCB1bnRpbCB5b3UgZXhpdAorLkIgVmltLgorVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgc2NyaXB0IGZpbGUgdG8gYmUgdXNlZCB3aXRoICJ2aW0gLXMiIG9yCisiOnNvdXJjZSEiLgorSWYgdGhlIHtzY3JpcHRvdXR9IGZpbGUgZXhpc3RzLCBjaGFyYWN0ZXJzIGFyZSBhcHBlbmRlZC4KKy5UUAorLVcge3NjcmlwdG91dH0KK0xpa2UgLXcsIGJ1dCBhbiBleGlzdGluZyBmaWxlIGlzIG92ZXJ3cml0dGVuLgorLlRQCisteAorVXNlIGVuY3J5cHRpb24gd2hlbiB3cml0aW5nIGZpbGVzLiAgIFdpbGwgcHJvbXB0IGZvciBhIGNyeXB0IGtleS4KKy5UUAorLVgKK0Rvbid0IGNvbm5lY3QgdG8gdGhlIFggc2VydmVyLiAgU2hvcnRlbnMgc3RhcnR1cCB0aW1lIGluIGEgdGVybWluYWwsIGJ1dCB0aGUKK3dpbmRvdyB0aXRsZSBhbmQgY2xpcGJvYXJkIHdpbGwgbm90IGJlIHVzZWQuCisuVFAKKy15CitTdGFydAorLkIgVmltCitpbiBlYXN5IG1vZGUsIGp1c3QgbGlrZSB0aGUgZXhlY3V0YWJsZSB3YXMgY2FsbGVkICJldmltIiBvciAiZXZpZXciLgorTWFrZXMKKy5CIFZpbQorYmVoYXZlIGxpa2UgYSBjbGljay1hbmQtdHlwZSBlZGl0b3IuCisuVFAKKy1aCitSZXN0cmljdGVkIG1vZGUuICBXb3JrcyBsaWtlIHRoZSBleGVjdXRhYmxlIHN0YXJ0cyB3aXRoICJyIi4KKy5UUAorLS0KK0Rlbm90ZXMgdGhlIGVuZCBvZiB0aGUgb3B0aW9ucy4KK0FyZ3VtZW50cyBhZnRlciB0aGlzIHdpbGwgYmUgaGFuZGxlZCBhcyBhIGZpbGUgbmFtZS4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gZWRpdCBhIGZpbGVuYW1lIHRoYXQgc3RhcnRzIHdpdGggYSAnLScuCisuVFAKKy0tZWNoby13aWQKK0dUSyBHVUkgb25seTogRWNobyB0aGUgV2luZG93IElEIG9uIHN0ZG91dAorLlRQCistLWhlbHAKK0dpdmUgYSBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQsIGp1c3QgbGlrZSAiLWgiLgorLlRQCistLWxpdGVyYWwKK1Rha2UgZmlsZSBuYW1lIGFyZ3VtZW50cyBsaXRlcmFsbHksIGRvIG5vdCBleHBhbmQgd2lsZGNhcmRzLiAgTm90IG5lZWRlZCBvbgorVW5peCwgdGhlIHNoZWxsIGV4cGFuZCB3aWxkY2FyZHMuCisuVFAKKy0tbm9wbHVnaW4KK1NraXAgbG9hZGluZyBwbHVnaW5zLiAgSW1wbGllZCBieSAtdSBOT05FLgorLlRQCistLXJlbW90ZQorQ29ubmVjdCB0byBhIFZpbSBzZXJ2ZXIgYW5kIG1ha2UgaXQgZWRpdCB0aGUgZmlsZXMgZ2l2ZW4gaW4gdGhlIHJlc3Qgb2YgdGhlCithcmd1bWVudHMuICBJZiBubyBzZXJ2ZXIgaXMgZm91bmQgYSB3YXJuaW5nIGlzIGdpdmVuIGFuZCB0aGUgZmlsZXMgYXJlIGVkaXRlZAoraW4gdGhlIGN1cnJlbnQgVmltLgorLlRQCistLXJlbW90ZS1leHByIHtleHByfQorQ29ubmVjdCB0byBhIFZpbSBzZXJ2ZXIsIGV2YWx1YXRlIHtleHByfSBpbiBpdCBhbmQgcHJpbnQgdGhlIHJlc3VsdCBvbiBzdGRvdXQuCisuVFAKKy0tcmVtb3RlLXNlbmQge2tleXN9CitDb25uZWN0IHRvIGEgVmltIHNlcnZlciBhbmQgc2VuZCB7a2V5c30gdG8gaXQuCisuVFAKKy0tcmVtb3RlLXNpbGVudAorQXMgLS1yZW1vdGUsIGJ1dCB3aXRob3V0IHRoZSB3YXJuaW5nIHdoZW4gbm8gc2VydmVyIGlzIGZvdW5kLgorLlRQCistLXJlbW90ZS13YWl0CitBcyAtLXJlbW90ZSwgYnV0IFZpbSBkb2VzIG5vdCBleGl0IHVudGlsIHRoZSBmaWxlcyBoYXZlIGJlZW4gZWRpdGVkLgorLlRQCistLXJlbW90ZS13YWl0LXNpbGVudAorQXMgLS1yZW1vdGUtd2FpdCwgYnV0IHdpdGhvdXQgdGhlIHdhcm5pbmcgd2hlbiBubyBzZXJ2ZXIgaXMgZm91bmQuCisuVFAKKy0tc2VydmVybGlzdAorTGlzdCB0aGUgbmFtZXMgb2YgYWxsIFZpbSBzZXJ2ZXJzIHRoYXQgY2FuIGJlIGZvdW5kLgorLlRQCistLXNlcnZlcm5hbWUge25hbWV9CitVc2Uge25hbWV9IGFzIHRoZSBzZXJ2ZXIgbmFtZS4gIFVzZWQgZm9yIHRoZSBjdXJyZW50IFZpbSwgdW5sZXNzIHVzZWQgd2l0aCBhCistLXJlbW90ZSBhcmd1bWVudCwgdGhlbiBpdCdzIHRoZSBuYW1lIG9mIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCB0by4KKy5UUAorLS1zb2NrZXRpZCB7aWR9CitHVEsgR1VJIG9ubHk6IFVzZSB0aGUgR3RrUGx1ZyBtZWNoYW5pc20gdG8gcnVuIGd2aW0gaW4gYW5vdGhlciB3aW5kb3cuCisuVFAKKy0tdmVyc2lvbgorUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KKy5TSCBPTi1MSU5FIEhFTFAKK1R5cGUgIjpoZWxwIiBpbgorLkIgVmltCit0byBnZXQgc3RhcnRlZC4KK1R5cGUgIjpoZWxwIHN1YmplY3QiIHRvIGdldCBoZWxwIG9uIGEgc3BlY2lmaWMgc3ViamVjdC4KK0ZvciBleGFtcGxlOiAiOmhlbHAgWloiIHRvIGdldCBoZWxwIGZvciB0aGUgIlpaIiBjb21tYW5kLgorVXNlIDxUYWI+IGFuZCBDVFJMLUQgdG8gY29tcGxldGUgc3ViamVjdHMgKCI6aGVscCBjbWRsaW5lLWNvbXBsZXRpb24iKS4KK1RhZ3MgYXJlIHByZXNlbnQgdG8ganVtcCBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyIChzb3J0IG9mIGh5cGVydGV4dCBsaW5rcywKK3NlZSAiOmhlbHAiKS4KK0FsbCBkb2N1bWVudGF0aW9uIGZpbGVzIGNhbiBiZSB2aWV3ZWQgaW4gdGhpcyB3YXksIGZvciBleGFtcGxlCisiOmhlbHAgc3ludGF4LnR4dCIuCisuU0ggRklMRVMKKy5UUCAxNQorL3Vzci9sb2NhbC9saWIvdmltL2RvYy8qLnR4dAorVGhlCisuQiBWaW0KK2RvY3VtZW50YXRpb24gZmlsZXMuCitVc2UgIjpoZWxwIGRvYy1maWxlLWxpc3QiIHRvIGdldCB0aGUgY29tcGxldGUgbGlzdC4KKy5UUAorL3Vzci9sb2NhbC9saWIvdmltL2RvYy90YWdzCitUaGUgdGFncyBmaWxlIHVzZWQgZm9yIGZpbmRpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50YXRpb24gZmlsZXMuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS9zeW50YXgvc3ludGF4LnZpbQorU3lzdGVtIHdpZGUgc3ludGF4IGluaXRpYWxpemF0aW9ucy4KKy5UUAorL3Vzci9sb2NhbC9saWIvdmltL3N5bnRheC8qLnZpbQorU3ludGF4IGZpbGVzIGZvciB2YXJpb3VzIGxhbmd1YWdlcy4KKy5UUAorL3Vzci9sb2NhbC9saWIvdmltL3ZpbXJjCitTeXN0ZW0gd2lkZQorLkIgVmltCitpbml0aWFsaXphdGlvbnMuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS9ndmltcmMKK1N5c3RlbSB3aWRlIGd2aW0gaW5pdGlhbGl6YXRpb25zLgorLlRQCisvdXNyL2xvY2FsL2xpYi92aW0vb3B0d2luLnZpbQorU2NyaXB0IHVzZWQgZm9yIHRoZSAiOm9wdGlvbnMiIGNvbW1hbmQsIGEgbmljZSB3YXkgdG8gdmlldyBhbmQgc2V0IG9wdGlvbnMuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS9tZW51LnZpbQorU3lzdGVtIHdpZGUgbWVudSBpbml0aWFsaXphdGlvbnMgZm9yIGd2aW0uCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS9idWdyZXBvcnQudmltCitTY3JpcHQgdG8gZ2VuZXJhdGUgYSBidWcgcmVwb3J0LiAgU2VlICI6aGVscCBidWdzIi4KKy5UUAorL3Vzci9sb2NhbC9saWIvdmltL2ZpbGV0eXBlLnZpbQorU2NyaXB0IHRvIGRldGVjdCB0aGUgdHlwZSBvZiBhIGZpbGUgYnkgaXRzIG5hbWUuICBTZWUgIjpoZWxwICdmaWxldHlwZSciLgorLlRQCisvdXNyL2xvY2FsL2xpYi92aW0vc2NyaXB0cy52aW0KK1NjcmlwdCB0byBkZXRlY3QgdGhlIHR5cGUgb2YgYSBmaWxlIGJ5IGl0cyBjb250ZW50cy4gIFNlZSAiOmhlbHAgJ2ZpbGV0eXBlJyIuCisuVFAKKy91c3IvbG9jYWwvbGliL3ZpbS8qLnBzCitGaWxlcyB1c2VkIGZvciBQb3N0U2NyaXB0IHByaW50aW5nLgorLlBQCitGb3IgcmVjZW50IGluZm8gcmVhZCB0aGUgVklNIGhvbWUgcGFnZToKKy5icgorPFVSTDpodHRwOi8vd3d3LnZpbS5vcmcvPgorLlNIIFNFRSBBTFNPCit2aW10dXRvcigxKQorLlNIIEFVVEhPUgorTW9zdCBvZgorLkIgVmltCit3YXMgbWFkZSBieSBCcmFtIE1vb2xlbmFhciwgd2l0aCBhIGxvdCBvZiBoZWxwIGZyb20gb3RoZXJzLgorU2VlICI6aGVscCBjcmVkaXRzIiBpbgorLkIgVmltLgorLmJyCisuQiBWaW0KK2lzIGJhc2VkIG9uIFN0ZXZpZSwgd29ya2VkIG9uIGJ5OiBUaW0gVGhvbXBzb24sCitUb255IEFuZHJld3MgYW5kIEcuUi4gKEZyZWQpIFdhbHRlci4KK0FsdGhvdWdoIGhhcmRseSBhbnkgb2YgdGhlIG9yaWdpbmFsIGNvZGUgcmVtYWlucy4KKy5TSCBCVUdTCitQcm9iYWJseS4KK1NlZSAiOmhlbHAgdG9kbyIgZm9yIGEgbGlzdCBvZiBrbm93biBwcm9ibGVtcy4KKy5QUAorTm90ZSB0aGF0IGEgbnVtYmVyIG9mIHRoaW5ncyB0aGF0IG1heSBiZSByZWdhcmRlZCBhcyBidWdzIGJ5IHNvbWUsIGFyZSBpbiBmYWN0CitjYXVzZWQgYnkgYSB0b28tZmFpdGhmdWwgcmVwcm9kdWN0aW9uIG9mIFZpJ3MgYmVoYXZpb3VyLgorQW5kIGlmIHlvdSB0aGluayBvdGhlciB0aGluZ3MgYXJlIGJ1Z3MgImJlY2F1c2UgVmkgZG9lcyBpdCBkaWZmZXJlbnRseSIsCit5b3Ugc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgdmlfZGlmZi50eHQgZmlsZSAob3IgdHlwZSA6aGVscAordmlfZGlmZi50eHQgd2hlbiBpbiBWaW0pLgorQWxzbyBoYXZlIGEgbG9vayBhdCB0aGUgJ2NvbXBhdGlibGUnIGFuZCAnY3BvcHRpb25zJyBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmltLm1hbiBiL3J1bnRpbWUvZG9jL3ZpbS5tYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzOTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZpbS5tYW4KQEAgLTAsMCArMSw0MjAgQEAKK1ZJTSgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJTSgxKQorCisKKworTkFNRQorICAgICAgIHZpbSAtIFZpIElNcHJvdmVkLCBhIHByb2dyYW1tZXJzIHRleHQgZWRpdG9yCisKK1NZTk9QU0lTCisgICAgICAgdmltIFtvcHRpb25zXSBbZmlsZSAuLl0KKyAgICAgICB2aW0gW29wdGlvbnNdIC0KKyAgICAgICB2aW0gW29wdGlvbnNdIC10IHRhZworICAgICAgIHZpbSBbb3B0aW9uc10gLXEgW2Vycm9yZmlsZV0KKworICAgICAgIGV4CisgICAgICAgdmlldworICAgICAgIGd2aW0gZ3ZpZXcgZXZpbSBldmlldworICAgICAgIHJ2aW0gcnZpZXcgcmd2aW0gcmd2aWV3CisKK0RFU0NSSVBUSU9OCisgICAgICAgVmltICBpcyBhIHRleHQgZWRpdG9yIHRoYXQgaXMgdXB3YXJkcyBjb21wYXRpYmxlIHRvIFZpLiAgSXQgY2FuIGJlIHVzZWQKKyAgICAgICB0byBlZGl0IGFsbCBraW5kcyBvZiBwbGFpbiB0ZXh0LiAgSXQgaXMgZXNwZWNpYWxseSB1c2VmdWwgIGZvciAgZWRpdGluZworICAgICAgIHByb2dyYW1zLgorCisgICAgICAgVGhlcmUgIGFyZSBhIGxvdCBvZiBlbmhhbmNlbWVudHMgYWJvdmUgVmk6IG11bHRpIGxldmVsIHVuZG8sIG11bHRpIHdpbi0KKyAgICAgICBkb3dzIGFuZCBidWZmZXJzLCBzeW50YXggaGlnaGxpZ2h0aW5nLCBjb21tYW5kIGxpbmUgIGVkaXRpbmcsICBmaWxlbmFtZQorICAgICAgIGNvbXBsZXRpb24sICAgb24tbGluZSAgIGhlbHAsICAgdmlzdWFsICBzZWxlY3Rpb24sICBldGMuLiAgIFNlZSAgIjpoZWxwCisgICAgICAgdmlfZGlmZi50eHQiIGZvciBhIHN1bW1hcnkgb2YgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gVmltIGFuZCBWaS4KKworICAgICAgIFdoaWxlIHJ1bm5pbmcgVmltIGEgbG90IG9mIGhlbHAgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlICBvbi1saW5lICBoZWxwCisgICAgICAgc3lzdGVtLCAgd2l0aCB0aGUgIjpoZWxwIiBjb21tYW5kLiAgU2VlIHRoZSBPTi1MSU5FIEhFTFAgc2VjdGlvbiBiZWxvdy4KKworICAgICAgIE1vc3Qgb2Z0ZW4gVmltIGlzIHN0YXJ0ZWQgdG8gZWRpdCBhIHNpbmdsZSBmaWxlIHdpdGggdGhlIGNvbW1hbmQKKworICAgICAgICAgICAgdmltIGZpbGUKKworICAgICAgIE1vcmUgZ2VuZXJhbGx5IFZpbSBpcyBzdGFydGVkIHdpdGg6CisKKyAgICAgICAgICAgIHZpbSBbb3B0aW9uc10gW2ZpbGVsaXN0XQorCisgICAgICAgSWYgdGhlIGZpbGVsaXN0IGlzIG1pc3NpbmcsIHRoZSBlZGl0b3Igd2lsbCBzdGFydCB3aXRoIGFuIGVtcHR5IGJ1ZmZlci4KKyAgICAgICBPdGhlcndpc2UgIGV4YWN0bHkgIG9uZSBvdXQgb2YgdGhlIGZvbGxvd2luZyBmb3VyIG1heSBiZSB1c2VkIHRvIGNob29zZQorICAgICAgIG9uZSBvciBtb3JlIGZpbGVzIHRvIGJlIGVkaXRlZC4KKworICAgICAgIGZpbGUgLi4gICAgIEEgbGlzdCBvZiBmaWxlbmFtZXMuICBUaGUgZmlyc3Qgb25lICB3aWxsICBiZSAgdGhlICBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgZmlsZSAgYW5kICByZWFkICBpbnRvIHRoZSBidWZmZXIuICBUaGUgY3Vyc29yIHdpbGwgYmUgcG9zaS0KKyAgICAgICAgICAgICAgICAgICB0aW9uZWQgb24gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGJ1ZmZlci4gIFlvdSBjYW4gZ2V0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgIG90aGVyICBmaWxlcyB3aXRoIHRoZSAiOm5leHQiIGNvbW1hbmQuICBUbyBlZGl0IGEgZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgc3RhcnRzIHdpdGggYSBkYXNoLCBwcmVjZWRlIHRoZSBmaWxlbGlzdCB3aXRoICItLSIuCisKKyAgICAgICAtICAgICAgICAgICBUaGUgZmlsZSB0byBlZGl0IGlzIHJlYWQgZnJvbSAgc3RkaW4uICAgQ29tbWFuZHMgIGFyZSAgcmVhZAorICAgICAgICAgICAgICAgICAgIGZyb20gc3RkZXJyLCB3aGljaCBzaG91bGQgYmUgYSB0dHkuCisKKyAgICAgICAtdCB7dGFnfSAgICBUaGUgZmlsZSB0byBlZGl0IGFuZCB0aGUgaW5pdGlhbCBjdXJzb3IgcG9zaXRpb24gZGVwZW5kcyBvbgorICAgICAgICAgICAgICAgICAgIGEgInRhZyIsIGEgc29ydCBvZiBnb3RvIGxhYmVsLiAge3RhZ30gaXMgbG9va2VkIHVwICBpbiAgdGhlCisgICAgICAgICAgICAgICAgICAgdGFncyBmaWxlLCB0aGUgYXNzb2NpYXRlZCBmaWxlIGJlY29tZXMgdGhlIGN1cnJlbnQgZmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBjb21tYW5kIGlzIGV4ZWN1dGVkLiAgTW9zdGx5ICB0aGlzICBpcyAgdXNlZAorICAgICAgICAgICAgICAgICAgIGZvciAgQyAgcHJvZ3JhbXMsICBpbiAgd2hpY2ggY2FzZSB7dGFnfSBjb3VsZCBiZSBhIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgbmFtZS4gIFRoZSBlZmZlY3QgaXMgdGhhdCB0aGUgZmlsZSBjb250YWluaW5nIHRoYXQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICBiZWNvbWVzICB0aGUgIGN1cnJlbnQgIGZpbGUgYW5kIHRoZSBjdXJzb3IgaXMgcG9zaXRpb25lZCBvbgorICAgICAgICAgICAgICAgICAgIHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24uICBTZWUgIjpoZWxwIHRhZy1jb21tYW5kcyIuCisKKyAgICAgICAtcSBbZXJyb3JmaWxlXQorICAgICAgICAgICAgICAgICAgIFN0YXJ0IGluIHF1aWNrRml4IG1vZGUuICBUaGUgZmlsZSBbZXJyb3JmaWxlXSBpcyAgcmVhZCAgYW5kCisgICAgICAgICAgICAgICAgICAgdGhlICBmaXJzdCAgZXJyb3IgaXMgZGlzcGxheWVkLiAgSWYgW2Vycm9yZmlsZV0gaXMgb21pdHRlZCwKKyAgICAgICAgICAgICAgICAgICB0aGUgIGZpbGVuYW1lICBpcyAgb2J0YWluZWQgIGZyb20gIHRoZSAgJ2Vycm9yZmlsZScgIG9wdGlvbgorICAgICAgICAgICAgICAgICAgIChkZWZhdWx0cyAgdG8gICJBenRlY0MuRXJyIiAgZm9yIHRoZSBBbWlnYSwgImVycm9ycy5lcnIiIG9uCisgICAgICAgICAgICAgICAgICAgb3RoZXIgc3lzdGVtcykuICBGdXJ0aGVyIGVycm9ycyBjYW4gYmUganVtcGVkIHRvICB3aXRoICB0aGUKKyAgICAgICAgICAgICAgICAgICAiOmNuIiBjb21tYW5kLiAgU2VlICI6aGVscCBxdWlja2ZpeCIuCisKKyAgICAgICBWaW0gYmVoYXZlcyBkaWZmZXJlbnRseSwgZGVwZW5kaW5nIG9uIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kICh0aGUgZXhlLQorICAgICAgIGN1dGFibGUgbWF5IHN0aWxsIGJlIHRoZSBzYW1lIGZpbGUpLgorCisgICAgICAgdmltICAgICAgIFRoZSAibm9ybWFsIiB3YXksIGV2ZXJ5dGhpbmcgaXMgZGVmYXVsdC4KKworICAgICAgIGV4ICAgICAgICBTdGFydCBpbiBFeCBtb2RlLiAgR28gdG8gTm9ybWFsIG1vZGUgd2l0aCB0aGUgIjp2aSIgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgIENhbiBhbHNvIGJlIGRvbmUgd2l0aCB0aGUgIi1lIiBhcmd1bWVudC4KKworICAgICAgIHZpZXcgICAgICBTdGFydCAgaW4gcmVhZC1vbmx5IG1vZGUuICBZb3Ugd2lsbCBiZSBwcm90ZWN0ZWQgZnJvbSB3cml0aW5nCisgICAgICAgICAgICAgICAgIHRoZSBmaWxlcy4gIENhbiBhbHNvIGJlIGRvbmUgd2l0aCB0aGUgIi1SIiBhcmd1bWVudC4KKworICAgICAgIGd2aW0gZ3ZpZXcKKyAgICAgICAgICAgICAgICAgVGhlIEdVSSB2ZXJzaW9uLiAgU3RhcnRzIGEgbmV3IHdpbmRvdy4gIENhbiBhbHNvIGJlIGRvbmUgd2l0aAorICAgICAgICAgICAgICAgICB0aGUgIi1nIiBhcmd1bWVudC4KKworICAgICAgIGV2aW0gZXZpZXcKKyAgICAgICAgICAgICAgICAgVGhlIEdVSSB2ZXJzaW9uIGluIGVhc3kgbW9kZS4gIFN0YXJ0cyBhIG5ldyB3aW5kb3cuICBDYW4gYWxzbworICAgICAgICAgICAgICAgICBiZSBkb25lIHdpdGggdGhlICIteSIgYXJndW1lbnQuCisKKyAgICAgICBydmltIHJ2aWV3IHJndmltIHJndmlldworICAgICAgICAgICAgICAgICBMaWtlIHRoZSBhYm92ZSwgYnV0IHdpdGggcmVzdHJpY3Rpb25zLiAgSXQgd2lsbCBub3QgYmUgcG9zc2ktCisgICAgICAgICAgICAgICAgIGJsZSAgdG8gIHN0YXJ0ICBzaGVsbCAgY29tbWFuZHMsIG9yIHN1c3BlbmQgVmltLiAgQ2FuIGFsc28gYmUKKyAgICAgICAgICAgICAgICAgZG9uZSB3aXRoIHRoZSAiLVoiIGFyZ3VtZW50LgorCitPUFRJT05TCisgICAgICAgVGhlIG9wdGlvbnMgbWF5IGJlIGdpdmVuIGluICBhbnkgIG9yZGVyLCAgYmVmb3JlICBvciAgYWZ0ZXIgIGZpbGVuYW1lcy4KKyAgICAgICBPcHRpb25zIHdpdGhvdXQgYW4gYXJndW1lbnQgY2FuIGJlIGNvbWJpbmVkIGFmdGVyIGEgc2luZ2xlIGRhc2guCisKKyAgICAgICArW251bV0gICAgICBGb3IgIHRoZSAgZmlyc3QgIGZpbGUgdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgb24gbGluZQorICAgICAgICAgICAgICAgICAgICJudW0iLiAgSWYgIm51bSIgaXMgbWlzc2luZywgdGhlIGN1cnNvciB3aWxsIGJlICBwb3NpdGlvbmVkCisgICAgICAgICAgICAgICAgICAgb24gdGhlIGxhc3QgbGluZS4KKworICAgICAgICsve3BhdH0gICAgIEZvciAgdGhlICBmaXJzdCAgZmlsZSAgdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgZmlyc3Qgb2NjdXJyZW5jZSBvZiB7cGF0fS4gIFNlZSAiOmhlbHAgc2VhcmNoLXBhdHRlcm4iICBmb3IKKyAgICAgICAgICAgICAgICAgICB0aGUgYXZhaWxhYmxlIHNlYXJjaCBwYXR0ZXJucy4KKworICAgICAgICt7Y29tbWFuZH0KKworICAgICAgIC1jIHtjb21tYW5kfQorICAgICAgICAgICAgICAgICAgIHtjb21tYW5kfSAgd2lsbCAgYmUgIGV4ZWN1dGVkIGFmdGVyIHRoZSBmaXJzdCBmaWxlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgcmVhZC4gIHtjb21tYW5kfSBpcyBpbnRlcnByZXRlZCBhcyBhbiBFeCBjb21tYW5kLiAgIElmICB0aGUKKyAgICAgICAgICAgICAgICAgICB7Y29tbWFuZH0gIGNvbnRhaW5zICBzcGFjZXMgIGl0ICBtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZQorICAgICAgICAgICAgICAgICAgIHF1b3RlcyAodGhpcyBkZXBlbmRzIG9uIHRoZSBzaGVsbCB0aGF0IGlzIHVzZWQpLiAgIEV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgVmltICIrc2V0IHNpIiBtYWluLmMKKyAgICAgICAgICAgICAgICAgICBOb3RlOiBZb3UgY2FuIHVzZSB1cCB0byAxMCAiKyIgb3IgIi1jIiBjb21tYW5kcy4KKworICAgICAgIC1TIHtmaWxlfSAgIHtmaWxlfSAgd2lsbCBiZSBzb3VyY2VkIGFmdGVyIHRoZSBmaXJzdCBmaWxlIGhhcyBiZWVuIHJlYWQuCisgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIC1jICJzb3VyY2UgIHtmaWxlfSIuICAge2ZpbGV9ICBjYW5ub3QKKyAgICAgICAgICAgICAgICAgICBzdGFydCB3aXRoICctJy4gIElmIHtmaWxlfSBpcyBvbWl0dGVkICJTZXNzaW9uLnZpbSIgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgIChvbmx5IHdvcmtzIHdoZW4gLVMgaXMgdGhlIGxhc3QgYXJndW1lbnQpLgorCisgICAgICAgLS1jbWQge2NvbW1hbmR9CisgICAgICAgICAgICAgICAgICAgTGlrZSB1c2luZyAiLWMiLCBidXQgdGhlIGNvbW1hbmQgaXMgIGV4ZWN1dGVkICBqdXN0ICBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nICBhbnkgIHZpbXJjIGZpbGUuICBZb3UgY2FuIHVzZSB1cCB0byAxMCBvZiB0aGVzZQorICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLCBpbmRlcGVuZGVudGx5IGZyb20gIi1jIiBjb21tYW5kcy4KKworICAgICAgIC1BICAgICAgICAgIElmIFZpbSBoYXMgYmVlbiBjb21waWxlZCB3aXRoIEFSQUJJQyAgc3VwcG9ydCAgZm9yICBlZGl0aW5nCisgICAgICAgICAgICAgICAgICAgcmlnaHQtdG8tbGVmdCAgb3JpZW50ZWQgIGZpbGVzIGFuZCBBcmFiaWMga2V5Ym9hcmQgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICB0aGlzIG9wdGlvbiBzdGFydHMgVmltIGluIEFyYWJpYyAgbW9kZSwgIGkuZS4gICdhcmFiaWMnICBpcworICAgICAgICAgICAgICAgICAgIHNldC4gIE90aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuIGFuZCBWaW0gYWJvcnRzLgorCisgICAgICAgLWIgICAgICAgICAgQmluYXJ5ICBtb2RlLiAgQSBmZXcgb3B0aW9ucyB3aWxsIGJlIHNldCB0aGF0IG1ha2VzIGl0IHBvcy0KKyAgICAgICAgICAgICAgICAgICBzaWJsZSB0byBlZGl0IGEgYmluYXJ5IG9yIGV4ZWN1dGFibGUgZmlsZS4KKworICAgICAgIC1DICAgICAgICAgIENvbXBhdGlibGUuICBTZXQgdGhlICdjb21wYXRpYmxlJyBvcHRpb24uICBUaGlzICB3aWxsICBtYWtlCisgICAgICAgICAgICAgICAgICAgVmltICBiZWhhdmUgIG1vc3RseSAgbGlrZSAgVmksICBldmVuICB0aG91Z2ggIGEgLnZpbXJjIGZpbGUKKyAgICAgICAgICAgICAgICAgICBleGlzdHMuCisKKyAgICAgICAtZCAgICAgICAgICBTdGFydCBpbiBkaWZmIG1vZGUuICBUaGVyZSBzaG91bGQgYmUgdHdvIG9yIHRocmVlIGZpbGUgbmFtZQorICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy4gICBWaW0gIHdpbGwgIG9wZW4gYWxsIHRoZSBmaWxlcyBhbmQgc2hvdyBkaWZmZXItCisgICAgICAgICAgICAgICAgICAgZW5jZXMgYmV0d2VlbiB0aGVtLiAgV29ya3MgbGlrZSB2aW1kaWZmKDEpLgorCisgICAgICAgLWQge2RldmljZX0gT3BlbiB7ZGV2aWNlfSBmb3IgdXNlIGFzIGEgdGVybWluYWwuICBPbmx5ICBvbiAgdGhlICBBbWlnYS4KKyAgICAgICAgICAgICAgICAgICBFeGFtcGxlOiAiLWQgY29uOjIwLzMwLzYwMC8xNTAiLgorCisgICAgICAgLUQgICAgICAgICAgRGVidWdnaW5nLiAgIEdvICB0byBkZWJ1Z2dpbmcgbW9kZSB3aGVuIGV4ZWN1dGluZyB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICBjb21tYW5kIGZyb20gYSBzY3JpcHQuCisKKyAgICAgICAtZSAgICAgICAgICBTdGFydCBWaW0gaW4gRXggbW9kZSwganVzdCBsaWtlIHRoZSBleGVjdXRhYmxlICB3YXMgIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICJleCIuCisKKyAgICAgICAtRSAgICAgICAgICBTdGFydCBWaW0gaW4gaW1wcm92ZWQgRXggbW9kZSwganVzdCBsaWtlIHRoZSBleGVjdXRhYmxlIHdhcworICAgICAgICAgICAgICAgICAgIGNhbGxlZCAiZXhpbSIuCisKKyAgICAgICAtZiAgICAgICAgICBGb3JlZ3JvdW5kLiAgRm9yIHRoZSBHVUkgdmVyc2lvbiwgVmltICB3aWxsICBub3QgIGZvcmsgIGFuZAorICAgICAgICAgICAgICAgICAgIGRldGFjaCBmcm9tIHRoZSBzaGVsbCBpdCB3YXMgc3RhcnRlZCBpbi4gIE9uIHRoZSBBbWlnYSwgVmltCisgICAgICAgICAgICAgICAgICAgaXMgbm90IHJlc3RhcnRlZCB0byBvcGVuIGEgbmV3IHdpbmRvdy4gIFRoaXMgb3B0aW9uICBzaG91bGQKKyAgICAgICAgICAgICAgICAgICBiZSAgdXNlZCAgd2hlbiAgVmltIGlzIGV4ZWN1dGVkIGJ5IGEgcHJvZ3JhbSB0aGF0IHdpbGwgd2FpdAorICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZWRpdCBzZXNzaW9uIHRvIGZpbmlzaCAoZS5nLiBtYWlsKS4gIE9uICB0aGUgIEFtaWdhCisgICAgICAgICAgICAgICAgICAgdGhlICI6c2giIGFuZCAiOiEiIGNvbW1hbmRzIHdpbGwgbm90IHdvcmsuCisKKyAgICAgICAtLW5vZm9yayAgICBGb3JlZ3JvdW5kLiAgIEZvciAgdGhlICBHVUkgIHZlcnNpb24sIFZpbSB3aWxsIG5vdCBmb3JrIGFuZAorICAgICAgICAgICAgICAgICAgIGRldGFjaCBmcm9tIHRoZSBzaGVsbCBpdCB3YXMgc3RhcnRlZCBpbi4KKworICAgICAgIC1GICAgICAgICAgIElmIFZpbSBoYXMgYmVlbiBjb21waWxlZCB3aXRoICBGS01BUCAgc3VwcG9ydCAgZm9yICBlZGl0aW5nCisgICAgICAgICAgICAgICAgICAgcmlnaHQtdG8tbGVmdCAgb3JpZW50ZWQgIGZpbGVzICBhbmQgRmFyc2kga2V5Ym9hcmQgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICB0aGlzIG9wdGlvbiBzdGFydHMgVmltIGluICBGYXJzaSAgbW9kZSwgIGkuZS4gICdma21hcCcgIGFuZAorICAgICAgICAgICAgICAgICAgICdyaWdodGxlZnQnICBhcmUgIHNldC4gIE90aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuCisgICAgICAgICAgICAgICAgICAgYW5kIFZpbSBhYm9ydHMuCisKKyAgICAgICAtZyAgICAgICAgICBJZiBWaW0gaGFzIGJlZW4gY29tcGlsZWQgIHdpdGggIEdVSSAgc3VwcG9ydCwgIHRoaXMgIG9wdGlvbgorICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgIHRoZSAgR1VJLiAgIElmICBubyBHVUkgc3VwcG9ydCB3YXMgY29tcGlsZWQgaW4sIGFuCisgICAgICAgICAgICAgICAgICAgZXJyb3IgbWVzc2FnZSBpcyBnaXZlbiBhbmQgVmltIGFib3J0cy4KKworICAgICAgIC1oICAgICAgICAgIEdpdmUgYSBiaXQgb2YgaGVscCBhYm91dCB0aGUgIGNvbW1hbmQgIGxpbmUgIGFyZ3VtZW50cyAgYW5kCisgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIEFmdGVyIHRoaXMgVmltIGV4aXRzLgorCisgICAgICAgLUggICAgICAgICAgSWYgVmltIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggUklHSFRMRUZUIHN1cHBvcnQgZm9yIGVkaXRpbmcKKyAgICAgICAgICAgICAgICAgICByaWdodC10by1sZWZ0IG9yaWVudGVkIGZpbGVzIGFuZCBIZWJyZXcgIGtleWJvYXJkICBtYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHRoaXMgIG9wdGlvbiAgc3RhcnRzICBWaW0gIGluIEhlYnJldyBtb2RlLCBpLmUuICdoa21hcCcgYW5kCisgICAgICAgICAgICAgICAgICAgJ3JpZ2h0bGVmdCcgYXJlIHNldC4gIE90aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlICBpcyAgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICBhbmQgVmltIGFib3J0cy4KKworICAgICAgIC1pIHt2aW1pbmZvfQorICAgICAgICAgICAgICAgICAgIFdoZW4gIHVzaW5nICB0aGUgIHZpbWluZm8gZmlsZSBpcyBlbmFibGVkLCB0aGlzIG9wdGlvbiBzZXRzCisgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVuYW1lIHRvIHVzZSwgaW5zdGVhZCBvZiB0aGUgIGRlZmF1bHQgICJ+Ly52aW1pbmZvIi4KKyAgICAgICAgICAgICAgICAgICBUaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gc2tpcCB0aGUgdXNlIG9mIHRoZSAudmltaW5mbyBmaWxlLAorICAgICAgICAgICAgICAgICAgIGJ5IGdpdmluZyB0aGUgbmFtZSAiTk9ORSIuCisKKyAgICAgICAtTCAgICAgICAgICBTYW1lIGFzIC1yLgorCisgICAgICAgLWwgICAgICAgICAgTGlzcCBtb2RlLiAgU2V0cyB0aGUgJ2xpc3AnIGFuZCAnc2hvd21hdGNoJyBvcHRpb25zIG9uLgorCisgICAgICAgLW0gICAgICAgICAgTW9kaWZ5aW5nIGZpbGVzIGlzIGRpc2FibGVkLiAgUmVzZXRzICB0aGUgICd3cml0ZScgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICBZb3UgIGNhbiBzdGlsbCBtb2RpZnkgdGhlIGJ1ZmZlciwgYnV0IHdyaXRpbmcgYSBmaWxlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlLgorCisgICAgICAgLU0gICAgICAgICAgTW9kaWZpY2F0aW9ucyBub3QgYWxsb3dlZC4gIFRoZSAgJ21vZGlmaWFibGUnICBhbmQgICd3cml0ZScKKyAgICAgICAgICAgICAgICAgICBvcHRpb25zICB3aWxsIGJlIHVuc2V0LCBzbyB0aGF0IGNoYW5nZXMgYXJlIG5vdCBhbGxvd2VkIGFuZAorICAgICAgICAgICAgICAgICAgIGZpbGVzIGNhbiBub3QgYmUgd3JpdHRlbi4gIE5vdGUgdGhhdCB0aGVzZSBvcHRpb25zICBjYW4gIGJlCisgICAgICAgICAgICAgICAgICAgc2V0IHRvIGVuYWJsZSBtYWtpbmcgbW9kaWZpY2F0aW9ucy4KKworICAgICAgIC1OICAgICAgICAgIE5vLWNvbXBhdGlibGUgIG1vZGUuICAgUmVzZXQgdGhlICdjb21wYXRpYmxlJyBvcHRpb24uICBUaGlzCisgICAgICAgICAgICAgICAgICAgd2lsbCBtYWtlIFZpbSBiZWhhdmUgYSBiaXQgYmV0dGVyLCBidXQgbGVzcyBWaSAgY29tcGF0aWJsZSwKKyAgICAgICAgICAgICAgICAgICBldmVuIHRob3VnaCBhIC52aW1yYyBmaWxlIGRvZXMgbm90IGV4aXN0LgorCisgICAgICAgLW4gICAgICAgICAgTm8gIHN3YXAgZmlsZSB3aWxsIGJlIHVzZWQuICBSZWNvdmVyeSBhZnRlciBhIGNyYXNoIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICBpbXBvc3NpYmxlLiAgSGFuZHkgaWYgeW91IHdhbnQgdG8gZWRpdCBhICBmaWxlICBvbiAgYSAgdmVyeQorICAgICAgICAgICAgICAgICAgIHNsb3cgIG1lZGl1bSAgKGUuZy4gIGZsb3BweSkuICAgQ2FuIGFsc28gYmUgZG9uZSB3aXRoICI6c2V0CisgICAgICAgICAgICAgICAgICAgdWM9MCIuICBDYW4gYmUgdW5kb25lIHdpdGggIjpzZXQgdWM9MjAwIi4KKworICAgICAgIC1uYiAgICAgICAgIEJlY29tZSBhbiBlZGl0b3Igc2VydmVyIGZvciBOZXRCZWFucy4gICBTZWUgIHRoZSAgZG9jcyAgZm9yCisgICAgICAgICAgICAgICAgICAgZGV0YWlscy4KKworICAgICAgIC1vW05dICAgICAgIE9wZW4gTiB3aW5kb3dzIHN0YWNrZWQuICBXaGVuIE4gaXMgb21pdHRlZCwgb3BlbiBvbmUgd2luZG93CisgICAgICAgICAgICAgICAgICAgZm9yIGVhY2ggZmlsZS4KKworICAgICAgIC1PW05dICAgICAgIE9wZW4gTiB3aW5kb3dzIHNpZGUgYnkgc2lkZS4gIFdoZW4gTiBpcyBvbWl0dGVkLCAgb3BlbiAgb25lCisgICAgICAgICAgICAgICAgICAgd2luZG93IGZvciBlYWNoIGZpbGUuCisKKyAgICAgICAtUiAgICAgICAgICBSZWFkLW9ubHkgIG1vZGUuICAgVGhlICAncmVhZG9ubHknIG9wdGlvbiB3aWxsIGJlIHNldC4gIFlvdQorICAgICAgICAgICAgICAgICAgIGNhbiBzdGlsbCBlZGl0IHRoZSBidWZmZXIsIGJ1dCB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGFjY2ktCisgICAgICAgICAgICAgICAgICAgZGVudGx5ICBvdmVyd3JpdGluZyAgYSBmaWxlLiAgSWYgeW91IGRvIHdhbnQgdG8gb3ZlcndyaXRlIGEKKyAgICAgICAgICAgICAgICAgICBmaWxlLCBhZGQgYW4gZXhjbGFtYXRpb24gbWFyayB0byAgdGhlICBFeCAgY29tbWFuZCwgIGFzICBpbgorICAgICAgICAgICAgICAgICAgICI6dyEiLiAgIFRoZSAgLVIgIG9wdGlvbiAgYWxzbyAgaW1wbGllcyAgdGhlIC1uIG9wdGlvbiAoc2VlCisgICAgICAgICAgICAgICAgICAgYmVsb3cpLiAgVGhlICdyZWFkb25seScgb3B0aW9uICBjYW4gIGJlICByZXNldCAgd2l0aCAgIjpzZXQKKyAgICAgICAgICAgICAgICAgICBub3JvIi4gIFNlZSAiOmhlbHAgJ3JlYWRvbmx5JyIuCisKKyAgICAgICAtciAgICAgICAgICBMaXN0ICBzd2FwICBmaWxlcywgIHdpdGggIGluZm9ybWF0aW9uICBhYm91dCB1c2luZyB0aGVtIGZvcgorICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5LgorCisgICAgICAgLXIge2ZpbGV9ICAgUmVjb3ZlcnkgbW9kZS4gIFRoZSBzd2FwIGZpbGUgaXMgdXNlZCB0byByZWNvdmVyIGEgIGNyYXNoZWQKKyAgICAgICAgICAgICAgICAgICBlZGl0aW5nICBzZXNzaW9uLiAgIFRoZSAgc3dhcCAgZmlsZSBpcyBhIGZpbGUgd2l0aCB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lIGFzIHRoZSB0ZXh0IGZpbGUgd2l0aCAiLnN3cCIgYXBwZW5kZWQuICBTZWUgIjpoZWxwCisgICAgICAgICAgICAgICAgICAgcmVjb3ZlcnkiLgorCisgICAgICAgLXMgICAgICAgICAgU2lsZW50ICBtb2RlLiAgIE9ubHkgIHdoZW4gc3RhcnRlZCBhcyAiRXgiIG9yIHdoZW4gdGhlICItZSIKKyAgICAgICAgICAgICAgICAgICBvcHRpb24gd2FzIGdpdmVuIGJlZm9yZSB0aGUgIi1zIiBvcHRpb24uCisKKyAgICAgICAtcyB7c2NyaXB0aW59CisgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBmaWxlIHtzY3JpcHRpbn0gaXMgcmVhZC4gIFRoZSBjaGFyYWN0ZXJzIGluICB0aGUKKyAgICAgICAgICAgICAgICAgICBmaWxlICBhcmUgIGludGVycHJldGVkICBhcyBpZiB5b3UgaGFkIHR5cGVkIHRoZW0uICBUaGUgc2FtZQorICAgICAgICAgICAgICAgICAgIGNhbiBiZSBkb25lIHdpdGggdGhlIGNvbW1hbmQgIjpzb3VyY2UhIHtzY3JpcHRpbn0iLiAgSWYgdGhlCisgICAgICAgICAgICAgICAgICAgZW5kIG9mIHRoZSBmaWxlIGlzIHJlYWNoZWQgYmVmb3JlIHRoZSBlZGl0b3IgZXhpdHMsIGZ1cnRoZXIKKyAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGFyZSByZWFkIGZyb20gdGhlIGtleWJvYXJkLgorCisgICAgICAgLVQge3Rlcm1pbmFsfQorICAgICAgICAgICAgICAgICAgIFRlbGxzIFZpbSB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgIHlvdSAgYXJlICB1c2luZy4gICBPbmx5CisgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgIHdoZW4gdGhlIGF1dG9tYXRpYyB3YXkgZG9lc24ndCB3b3JrLiAgU2hvdWxkIGJlIGEKKyAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCBrbm93biB0byBWaW0gKGJ1aWx0aW4pIG9yIGRlZmluZWQgaW4gIHRoZSAgdGVybWNhcAorICAgICAgICAgICAgICAgICAgIG9yIHRlcm1pbmZvIGZpbGUuCisKKyAgICAgICAtdSB7dmltcmN9ICBVc2UgIHRoZSAgY29tbWFuZHMgaW4gdGhlIGZpbGUge3ZpbXJjfSBmb3IgaW5pdGlhbGl6YXRpb25zLgorICAgICAgICAgICAgICAgICAgIEFsbCB0aGUgb3RoZXIgaW5pdGlhbGl6YXRpb25zIGFyZSAgc2tpcHBlZC4gICBVc2UgIHRoaXMgIHRvCisgICAgICAgICAgICAgICAgICAgZWRpdCAgYSBzcGVjaWFsIGtpbmQgb2YgZmlsZXMuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNraXAKKyAgICAgICAgICAgICAgICAgICBhbGwgaW5pdGlhbGl6YXRpb25zIGJ5IGdpdmluZyB0aGUgbmFtZSAiTk9ORSIuICBTZWUgICI6aGVscAorICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIiB3aXRoaW4gdmltIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAtVSB7Z3ZpbXJjfSBVc2UgIHRoZSAgY29tbWFuZHMgaW4gdGhlIGZpbGUge2d2aW1yY30gZm9yIEdVSSBpbml0aWFsaXphLQorICAgICAgICAgICAgICAgICAgIHRpb25zLiAgQWxsIHRoZSBvdGhlciBHVUkgaW5pdGlhbGl6YXRpb25zIGFyZSBza2lwcGVkLiAgIEl0CisgICAgICAgICAgICAgICAgICAgY2FuICBhbHNvIGJlIHVzZWQgdG8gc2tpcCBhbGwgR1VJIGluaXRpYWxpemF0aW9ucyBieSBnaXZpbmcKKyAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSAiTk9ORSIuICBTZWUgIjpoZWxwIGd1aS1pbml0IiB3aXRoaW4gdmltIGZvciAgbW9yZQorICAgICAgICAgICAgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAtVltOXSAgICAgICBWZXJib3NlLiAgIEdpdmUgIG1lc3NhZ2VzIGFib3V0IHdoaWNoIGZpbGVzIGFyZSBzb3VyY2VkIGFuZAorICAgICAgICAgICAgICAgICAgIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGEgdmltaW5mbyBmaWxlLiAgVGhlIG9wdGlvbmFsICBudW0tCisgICAgICAgICAgICAgICAgICAgYmVyIE4gaXMgdGhlIHZhbHVlIGZvciAndmVyYm9zZScuICBEZWZhdWx0IGlzIDEwLgorCisgICAgICAgLXYgICAgICAgICAgU3RhcnQgIFZpbSAgaW4gVmkgbW9kZSwganVzdCBsaWtlIHRoZSBleGVjdXRhYmxlIHdhcyBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAidmkiLiAgVGhpcyBvbmx5IGhhcyBlZmZlY3Qgd2hlbiB0aGUgZXhlY3V0YWJsZSAgaXMgIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICJleCIuCisKKyAgICAgICAtdyB7c2NyaXB0b3V0fQorICAgICAgICAgICAgICAgICAgIEFsbCAgdGhlICBjaGFyYWN0ZXJzIHRoYXQgeW91IHR5cGUgYXJlIHJlY29yZGVkIGluIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAge3NjcmlwdG91dH0sIHVudGlsIHlvdSBleGl0IFZpbS4gIFRoaXMgIGlzICB1c2VmdWwgIGlmICB5b3UKKyAgICAgICAgICAgICAgICAgICB3YW50ICB0byAgY3JlYXRlICBhIHNjcmlwdCBmaWxlIHRvIGJlIHVzZWQgd2l0aCAidmltIC1zIiBvcgorICAgICAgICAgICAgICAgICAgICI6c291cmNlISIuICBJZiB0aGUge3NjcmlwdG91dH0gZmlsZSBleGlzdHMsIGNoYXJhY3RlcnMgYXJlCisgICAgICAgICAgICAgICAgICAgYXBwZW5kZWQuCisKKyAgICAgICAtVyB7c2NyaXB0b3V0fQorICAgICAgICAgICAgICAgICAgIExpa2UgLXcsIGJ1dCBhbiBleGlzdGluZyBmaWxlIGlzIG92ZXJ3cml0dGVuLgorCisgICAgICAgLXggICAgICAgICAgVXNlICBlbmNyeXB0aW9uICB3aGVuICB3cml0aW5nICBmaWxlcy4gICAgV2lsbCBwcm9tcHQgZm9yIGEKKyAgICAgICAgICAgICAgICAgICBjcnlwdCBrZXkuCisKKyAgICAgICAtWCAgICAgICAgICBEb24ndCBjb25uZWN0IHRvIHRoZSBYIHNlcnZlci4gIFNob3J0ZW5zIHN0YXJ0dXAgdGltZSBpbiAgYQorICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLCAgYnV0ICB0aGUgIHdpbmRvdyB0aXRsZSBhbmQgY2xpcGJvYXJkIHdpbGwgbm90IGJlCisgICAgICAgICAgICAgICAgICAgdXNlZC4KKworICAgICAgIC15ICAgICAgICAgIFN0YXJ0IFZpbSBpbiBlYXN5IG1vZGUsIGp1c3QgbGlrZSB0aGUgZXhlY3V0YWJsZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgImV2aW0iICBvciAiZXZpZXciLiAgTWFrZXMgVmltIGJlaGF2ZSBsaWtlIGEgY2xpY2stYW5kLXR5cGUKKyAgICAgICAgICAgICAgICAgICBlZGl0b3IuCisKKyAgICAgICAtWiAgICAgICAgICBSZXN0cmljdGVkIG1vZGUuICBXb3JrcyBsaWtlICB0aGUgIGV4ZWN1dGFibGUgIHN0YXJ0cyAgd2l0aAorICAgICAgICAgICAgICAgICAgICJyIi4KKworICAgICAgIC0tICAgICAgICAgIERlbm90ZXMgIHRoZSBlbmQgb2YgdGhlIG9wdGlvbnMuICBBcmd1bWVudHMgYWZ0ZXIgdGhpcyB3aWxsCisgICAgICAgICAgICAgICAgICAgYmUgaGFuZGxlZCBhcyBhIGZpbGUgbmFtZS4gIFRoaXMgY2FuICBiZSAgdXNlZCAgdG8gIGVkaXQgIGEKKyAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIGEgJy0nLgorCisgICAgICAgLS1lY2hvLXdpZCAgR1RLIEdVSSBvbmx5OiBFY2hvIHRoZSBXaW5kb3cgSUQgb24gc3Rkb3V0CisKKyAgICAgICAtLWhlbHAgICAgICBHaXZlIGEgaGVscCBtZXNzYWdlIGFuZCBleGl0LCBqdXN0IGxpa2UgIi1oIi4KKworICAgICAgIC0tbGl0ZXJhbCAgIFRha2UgIGZpbGUgIG5hbWUgIGFyZ3VtZW50cyAgbGl0ZXJhbGx5LCBkbyBub3QgZXhwYW5kIHdpbGQtCisgICAgICAgICAgICAgICAgICAgY2FyZHMuICBOb3QgbmVlZGVkIG9uIFVuaXgsIHRoZSBzaGVsbCBleHBhbmQgd2lsZGNhcmRzLgorCisgICAgICAgLS1ub3BsdWdpbiAgU2tpcCBsb2FkaW5nIHBsdWdpbnMuICBJbXBsaWVkIGJ5IC11IE5PTkUuCisKKyAgICAgICAtLXJlbW90ZSAgICBDb25uZWN0IHRvIGEgVmltIHNlcnZlciBhbmQgbWFrZSBpdCBlZGl0IHRoZSBmaWxlcyBnaXZlbiBpbgorICAgICAgICAgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMuICBJZiBubyBzZXJ2ZXIgaXMgZm91bmQgYSB3YXJuaW5nCisgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4gYW5kIHRoZSBmaWxlcyBhcmUgZWRpdGVkIGluIHRoZSBjdXJyZW50IFZpbS4KKworICAgICAgIC0tcmVtb3RlLWV4cHIge2V4cHJ9CisgICAgICAgICAgICAgICAgICAgQ29ubmVjdCB0byBhIFZpbSBzZXJ2ZXIsIGV2YWx1YXRlIHtleHByfSBpbiAgaXQgIGFuZCAgcHJpbnQKKyAgICAgICAgICAgICAgICAgICB0aGUgcmVzdWx0IG9uIHN0ZG91dC4KKworICAgICAgIC0tcmVtb3RlLXNlbmQge2tleXN9CisgICAgICAgICAgICAgICAgICAgQ29ubmVjdCB0byBhIFZpbSBzZXJ2ZXIgYW5kIHNlbmQge2tleXN9IHRvIGl0LgorCisgICAgICAgLS1yZW1vdGUtc2lsZW50CisgICAgICAgICAgICAgICAgICAgQXMgIC0tcmVtb3RlLCAgYnV0ICB3aXRob3V0ICB0aGUgIHdhcm5pbmcgd2hlbiBubyBzZXJ2ZXIgaXMKKyAgICAgICAgICAgICAgICAgICBmb3VuZC4KKworICAgICAgIC0tcmVtb3RlLXdhaXQKKyAgICAgICAgICAgICAgICAgICBBcyAtLXJlbW90ZSwgYnV0IFZpbSBkb2VzIG5vdCBleGl0ICB1bnRpbCAgdGhlICBmaWxlcyAgaGF2ZQorICAgICAgICAgICAgICAgICAgIGJlZW4gZWRpdGVkLgorCisgICAgICAgLS1yZW1vdGUtd2FpdC1zaWxlbnQKKyAgICAgICAgICAgICAgICAgICBBcyAtLXJlbW90ZS13YWl0LCBidXQgd2l0aG91dCB0aGUgd2FybmluZyB3aGVuIG5vIHNlcnZlciBpcworICAgICAgICAgICAgICAgICAgIGZvdW5kLgorCisgICAgICAgLS1zZXJ2ZXJsaXN0CisgICAgICAgICAgICAgICAgICAgTGlzdCB0aGUgbmFtZXMgb2YgYWxsIFZpbSBzZXJ2ZXJzIHRoYXQgY2FuIGJlIGZvdW5kLgorCisgICAgICAgLS1zZXJ2ZXJuYW1lIHtuYW1lfQorICAgICAgICAgICAgICAgICAgIFVzZSB7bmFtZX0gYXMgdGhlIHNlcnZlciBuYW1lLiAgVXNlZCBmb3IgdGhlICBjdXJyZW50ICBWaW0sCisgICAgICAgICAgICAgICAgICAgdW5sZXNzIHVzZWQgd2l0aCBhIC0tcmVtb3RlIGFyZ3VtZW50LCB0aGVuIGl0J3MgdGhlIG5hbWUgb2YKKyAgICAgICAgICAgICAgICAgICB0aGUgc2VydmVyIHRvIGNvbm5lY3QgdG8uCisKKyAgICAgICAtLXNvY2tldGlkIHtpZH0KKyAgICAgICAgICAgICAgICAgICBHVEsgR1VJIG9ubHk6IFVzZSB0aGUgR3RrUGx1ZyAgbWVjaGFuaXNtICB0byAgcnVuICBndmltICBpbgorICAgICAgICAgICAgICAgICAgIGFub3RoZXIgd2luZG93LgorCisgICAgICAgLS12ZXJzaW9uICAgUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KKworT04tTElORSBIRUxQCisgICAgICAgVHlwZSAgIjpoZWxwIiAgaW4gVmltIHRvIGdldCBzdGFydGVkLiAgVHlwZSAiOmhlbHAgc3ViamVjdCIgdG8gZ2V0IGhlbHAKKyAgICAgICBvbiBhIHNwZWNpZmljIHN1YmplY3QuICBGb3IgZXhhbXBsZTogIjpoZWxwIFpaIiB0byAgZ2V0ICBoZWxwICBmb3IgIHRoZQorICAgICAgICJaWiIgIGNvbW1hbmQuICAgVXNlIDxUYWI+IGFuZCBDVFJMLUQgdG8gY29tcGxldGUgc3ViamVjdHMgKCI6aGVscCBjbWQtCisgICAgICAgbGluZS1jb21wbGV0aW9uIikuICBUYWdzIGFyZSBwcmVzZW50IHRvIGp1bXAgZnJvbSBvbmUgcGxhY2UgdG8gIGFub3RoZXIKKyAgICAgICAoc29ydCBvZiBoeXBlcnRleHQgbGlua3MsIHNlZSAiOmhlbHAiKS4gIEFsbCBkb2N1bWVudGF0aW9uIGZpbGVzIGNhbiBiZQorICAgICAgIHZpZXdlZCBpbiB0aGlzIHdheSwgZm9yIGV4YW1wbGUgIjpoZWxwIHN5bnRheC50eHQiLgorCitGSUxFUworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9kb2MvKi50eHQKKyAgICAgICAgICAgICAgICAgICAgICBUaGUgVmltIGRvY3VtZW50YXRpb24gZmlsZXMuICBVc2UgIjpoZWxwICBkb2MtZmlsZS1saXN0IgorICAgICAgICAgICAgICAgICAgICAgIHRvIGdldCB0aGUgY29tcGxldGUgbGlzdC4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9kb2MvdGFncworICAgICAgICAgICAgICAgICAgICAgIFRoZSAgdGFncyBmaWxlIHVzZWQgZm9yIGZpbmRpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGRvY3UtCisgICAgICAgICAgICAgICAgICAgICAgbWVudGF0aW9uIGZpbGVzLgorCisgICAgICAgL3Vzci9sb2NhbC9saWIvdmltL3N5bnRheC9zeW50YXgudmltCisgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIHdpZGUgc3ludGF4IGluaXRpYWxpemF0aW9ucy4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9zeW50YXgvKi52aW0KKyAgICAgICAgICAgICAgICAgICAgICBTeW50YXggZmlsZXMgZm9yIHZhcmlvdXMgbGFuZ3VhZ2VzLgorCisgICAgICAgL3Vzci9sb2NhbC9saWIvdmltL3ZpbXJjCisgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIHdpZGUgVmltIGluaXRpYWxpemF0aW9ucy4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9ndmltcmMKKyAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gd2lkZSBndmltIGluaXRpYWxpemF0aW9ucy4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9vcHR3aW4udmltCisgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0IHVzZWQgZm9yIHRoZSAiOm9wdGlvbnMiIGNvbW1hbmQsIGEgIG5pY2UgIHdheSAgdG8KKyAgICAgICAgICAgICAgICAgICAgICB2aWV3IGFuZCBzZXQgb3B0aW9ucy4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9tZW51LnZpbQorICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSB3aWRlIG1lbnUgaW5pdGlhbGl6YXRpb25zIGZvciBndmltLgorCisgICAgICAgL3Vzci9sb2NhbC9saWIvdmltL2J1Z3JlcG9ydC52aW0KKyAgICAgICAgICAgICAgICAgICAgICBTY3JpcHQgdG8gZ2VuZXJhdGUgYSBidWcgcmVwb3J0LiAgU2VlICI6aGVscCBidWdzIi4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9maWxldHlwZS52aW0KKyAgICAgICAgICAgICAgICAgICAgICBTY3JpcHQgIHRvICBkZXRlY3QgIHRoZSB0eXBlIG9mIGEgZmlsZSBieSBpdHMgbmFtZS4gIFNlZQorICAgICAgICAgICAgICAgICAgICAgICI6aGVscCAnZmlsZXR5cGUnIi4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS9zY3JpcHRzLnZpbQorICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdCB0byBkZXRlY3QgdGhlIHR5cGUgb2YgYSAgZmlsZSAgYnkgIGl0cyAgY29udGVudHMuCisgICAgICAgICAgICAgICAgICAgICAgU2VlICI6aGVscCAnZmlsZXR5cGUnIi4KKworICAgICAgIC91c3IvbG9jYWwvbGliL3ZpbS8qLnBzCisgICAgICAgICAgICAgICAgICAgICAgRmlsZXMgdXNlZCBmb3IgUG9zdFNjcmlwdCBwcmludGluZy4KKworICAgICAgIEZvciByZWNlbnQgaW5mbyByZWFkIHRoZSBWSU0gaG9tZSBwYWdlOgorICAgICAgIDxVUkw6aHR0cDovL3d3dy52aW0ub3JnLz4KKworU0VFIEFMU08KKyAgICAgICB2aW10dXRvcigxKQorCitBVVRIT1IKKyAgICAgICBNb3N0IG9mIFZpbSB3YXMgbWFkZSBieSBCcmFtIE1vb2xlbmFhciwgd2l0aCBhIGxvdCBvZiBoZWxwIGZyb20gb3RoZXJzLgorICAgICAgIFNlZSAiOmhlbHAgY3JlZGl0cyIgaW4gVmltLgorICAgICAgIFZpbSBpcyBiYXNlZCBvbiBTdGV2aWUsIHdvcmtlZCBvbiBieTogVGltIFRob21wc29uLCAgVG9ueSAgQW5kcmV3cyAgYW5kCisgICAgICAgRy5SLiAgKEZyZWQpIFdhbHRlci4gIEFsdGhvdWdoIGhhcmRseSBhbnkgb2YgdGhlIG9yaWdpbmFsIGNvZGUgcmVtYWlucy4KKworQlVHUworICAgICAgIFByb2JhYmx5LiAgU2VlICI6aGVscCB0b2RvIiBmb3IgYSBsaXN0IG9mIGtub3duIHByb2JsZW1zLgorCisgICAgICAgTm90ZSB0aGF0IGEgbnVtYmVyIG9mIHRoaW5ncyB0aGF0IG1heSBiZSByZWdhcmRlZCBhcyBidWdzIGJ5IHNvbWUsICBhcmUKKyAgICAgICBpbiAgZmFjdCAgY2F1c2VkIGJ5IGEgdG9vLWZhaXRoZnVsIHJlcHJvZHVjdGlvbiBvZiBWaSdzIGJlaGF2aW91ci4gIEFuZAorICAgICAgIGlmIHlvdSB0aGluayBvdGhlciB0aGluZ3MgYXJlIGJ1Z3MgImJlY2F1c2UgVmkgIGRvZXMgIGl0ICBkaWZmZXJlbnRseSIsCisgICAgICAgeW91ICBzaG91bGQgIHRha2UgIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHZpX2RpZmYudHh0IGZpbGUgKG9yIHR5cGUgOmhlbHAKKyAgICAgICB2aV9kaWZmLnR4dCB3aGVuIGluIFZpbSkuICBBbHNvIGhhdmUgYSBsb29rICBhdCAgdGhlICAnY29tcGF0aWJsZScgIGFuZAorICAgICAgICdjcG9wdGlvbnMnIG9wdGlvbnMuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMiBGZWIgMjIgICAgICAgICAgICAgICAgICAgICAgICAgICBWSU0oMSkKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZpbS5tYW4uaW5mbyBiL3J1bnRpbWUvZG9jL3ZpbS5tYW4uaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzNmOWEwCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmltLm1hbi5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZpbTJodG1sLnBsIGIvcnVudGltZS9kb2MvdmltMmh0bWwucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiMWM0NgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZpbTJodG1sLnBsCkBAIC0wLDAgKzEsMjI5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgY29udmVydHMgdmltIGRvY3VtZW50YXRpb24gdG8gc2ltcGxlIGh0bWwKKyMgU2lydGFqIFNpbmdoIEthbmcgKHRhakBrZGUub3JnKQorCisjIFN1biBGZWIgMjQgMTQ6NDk6MTcgQ0VUIDIwMDIKKwordXNlIHN0cmljdDsKK3VzZSB2YXJzIHF3LyV1cmwgJGRhdGUvOworCisldXJsID0gKCk7CiskZGF0ZSA9IGBkYXRlYDsKK2Nob3AgJGRhdGU7CisKK3N1YiBtYXBsaW5rCit7CisJbXkgJHRhZyA9IHNoaWZ0OworCWlmKCBleGlzdHMgJHVybHsgJHRhZyB9ICl7CisJCXJldHVybiAkdXJseyAkdGFnIH07CisJfSBlbHNlIHsKKwkJI3dhcm4gIlVua25vd24gaHlwZXJsaW5rIHRhcmdldDogJHRhZ1xuIjsKKwkJJHRhZyA9fiBzL1wudHh0Ly87CisJCSR0YWcgPX4gcy88LyZsdDsvZzsKKwkJJHRhZyA9fiBzLz4vJmd0Oy9nOworCQlyZXR1cm4gIjxjb2RlIGNsYXNzPVwiYmFkbGlua1wiPiR0YWc8L2NvZGU+IjsKKwl9Cit9CisKK3N1YiByZWFkVGFnRmlsZQoreworCW15KCR0YWdmaWxlKSA9IEBfOworCW15KCAkdGFnLCAkZmlsZSwgJG5hbWUgKTsKKworCW9wZW4oVEFHUywiJHRhZ2ZpbGUiKSB8fCBkaWUgImNhbid0IHJlYWQgdGFnc1xuIjsKKworCXdoaWxlKCA8VEFHUz4gKSB7CisJCW5leHQgdW5sZXNzIC9eKFxTKylccysoXFMrKVxzKy87CisKKwkJJHRhZyA9ICQxOworCQlteSAkbGFiZWwgPSAkdGFnOworCQkoJGZpbGU9ICQyKSA9fiBzLy50eHQkLy5odG1sL2c7CisJCSRsYWJlbCA9fiBzL1wudHh0Ly87CisKKwkJJHVybHsgJHRhZyB9ID0gIjxhIGhyZWY9XCIkZmlsZSMiLmVzY3VybCgkdGFnKS4iXCI+Ii5lc2N0ZXh0KCRsYWJlbCkuIjwvYT4iOworCX0KKwljbG9zZSggVEFHUyApOworfQorCitzdWIgZXNjdGV4dAoreworCW15ICR0ZXh0ID0gc2hpZnQ7CisJJHRleHQgPX4gcy8mLyZhbXA7L2c7CisJJHRleHQgPX4gcy88LyZsdDsvZzsKKwkkdGV4dCA9fiBzLz4vJmd0Oy9nOworCXJldHVybiAkdGV4dDsKK30KKworc3ViIGVzY3VybAoreworCW15ICR1cmwgPSBzaGlmdDsKKwkkdXJsID1+IHMvIi8lMjIvZzsKKwkkdXJsID1+IHMvfi8lN0UvZzsKKwkkdXJsID1+IHMvPC8lM0MvZzsKKwkkdXJsID1+IHMvPi8lM0UvZzsKKwkkdXJsID1+IHMvPS8lMjAvZzsKKwkkdXJsID1+IHMvIy8lMjMvZzsKKwkkdXJsID1+IHMvXC8vJTJGL2c7CisKKwlyZXR1cm4gJHVybDsKK30KKworc3ViIHZpbTJodG1sCit7CisJbXkoICRpbmZpbGUgKSA9IEBfOworCW15KCAkb3V0ZmlsZSApOworCisJb3BlbihJTiwgIiRpbmZpbGUiICkgfHwgZGllICJDb3VsZG4ndCByZWFkIGZyb20gJGluZmlsZTogJCEuXG4iOworCisJKCRvdXRmaWxlID0gJGluZmlsZSkgPX4gczouKi86Omc7CisJJG91dGZpbGUgPX4gcy9cLnR4dCQvL2c7CisKKwlvcGVuKCBPVVQsICI+JG91dGZpbGUuaHRtbCIgKQorCQkJfHwgZGllICJDb3VsZG4ndCB3cml0ZSB0byAkb3V0ZmlsZS5odG1sOiAkIS5cbiI7CisJbXkgJGhlYWQgPSB1YyggJG91dGZpbGUgKTsKKworCXByaW50IE9VVDw8RU9GOworPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlZJTTogJG91dGZpbGU8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ2aW0tc3R5bGVzaGVldC5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5PgorPGgyPiRoZWFkPC9oMj4KKzxwcmU+CitFT0YKKworCW15ICRpbmV4YW1wbGUgPSAwOworCXdoaWxlKCA8SU4+ICkgeworCQljaG9wOworCQlpZiAoIC9eXHMqWy09XStccyokLyApIHsKKwkJCXByaW50IE9VVCAiPC9wcmU+PGhyPjxwcmU+IjsKKwkJCW5leHQ7CisJCX0KKworCQkjIGV4YW1wbGVzCisJCWVsc2lmKCAvXj4kLyB8fCAvXHM+JC8gKSB7CisJCQkkaW5leGFtcGxlID0gMTsKKwkJCWNob3A7CisJCX0KKwkJZWxzaWYgKCAkaW5leGFtcGxlICYmIC9eKFs8XFNdKS8gKSB7CisJCQkkaW5leGFtcGxlID0gMDsKKwkJCSRfID0gJCcgaWYgJDEgZXEgIjwiOworCQl9CisKKwkJcy9ccyskLy9nOworCisJCSMgVmFyaW91cyB2aW0gaGlnaGxpZ2h0cy4gbm90ZSB0aGF0IDwgYW5kID4gaGF2ZSBhbHJlYWR5IGJlZW4gZXNjYXBlZAorCQkjIHNvIHRoYXQgSFRNTCBkb2Vzbid0IGdldCBzY3Jld2VkIHVwLgorCisJCW15IEBvdXQgPSAoKTsKKwkJIwkJcHJpbnQgIlRleHQ6ICRfXG4iOworCQlMT09QOgorCQlmb3JlYWNoIG15ICR0b2tlbiAoIHNwbGl0IC8oKD86XHxbXlx8XStcfCl8KD86XCpbXlwqXStcKikpLyApIHsKKwkJCWlmICggJHRva2VuID1+IC9eXHwoW15cfF0rKVx8LyApIHsKKwkJCQkjIGxpbmsKKwkJCQlwdXNoKCBAb3V0LCAifCIubWFwbGluayggJDEgKS4ifCIgKTsKKwkJCQluZXh0IExPT1A7CisJCQl9CisJCQllbHNpZiAoICR0b2tlbiA9fiAvXlwqKFteXCpdKylcKi8gKSB7CisJCQkJIyB0YXJnZXQKKwkJCQlwdXNoKCBAb3V0LAorCQkJCQkiPGIgY2xhc3M9XCJ2aW10YWdcIj5cKjxhIG5hbWU9XCIiLmVzY3VybCgkMSkuIlwiPiIuZXNjdGV4dCgkMSkuIjxcL2E+XCo8XC9iPiIpOworCQkJCW5leHQgTE9PUDsKKwkJCX0KKworCQkJJF8gPSBlc2N0ZXh0KCR0b2tlbik7CisJCQlzL0NUUkwtKFx3KykvPGNvZGUgY2xhc3M9ImtleXN0cm9rZSI+Q1RSTC0kMTxcL2NvZGU+L2c7CisJCQkjIHBhcmFtZXRlciA8Li4uPgorCQkJcy8mbHQ7KC4qPykmZ3Q7Lzxjb2RlIGNsYXNzPSJzcGVjaWFsIj4mbHQ7JDEmZ3Q7PFwvY29kZT4vZzsKKworCQkJIyBwYXJhbWV0ZXIgey4uLn0KKwkJCXMvXHsoW159XSopXH0vPGNvZGUgY2xhc3M9InNwZWNpYWwiPnskMX08XC9jb2RlPi9nOworCisJCQkjIHBhcmFtZXRlciBbLi4uXQorCQkJcy9cWyhyYW5nZXxsaW5lfGNvdW50fG9mZnNldHxjbWR8Wy0rXT9udW0pXF0vPGNvZGUgY2xhc3M9InNwZWNpYWwiPlxbJDFcXTxcL2NvZGU+L2c7CisJCQkjIG5vdGUKKwkJCXMvKE5vdGU6PykvPGNvZGUgY2xhc3M9Im5vdGUiPiQxPFwvY29kZT4vZ2k7CisKKwkJCSMgbG9jYWwgaGVhZGluZworCQkJcy9eKC4qKVx+JC88Y29kZSBjbGFzcz0ic2VjdGlvbiI+JDE8XC9jb2RlPi9nOworCQkJcHVzaCggQG91dCwgJF8gKTsKKwkJfQorCisJCSRfID0gam9pbiggIiIsIEBvdXQgKTsKKworCQlpZiggJGluZXhhbXBsZSA9PSAyICkgeworCQkJcHJpbnQgT1VUICI8Y29kZSBjbGFzcz1cImV4YW1wbGVcIj4kXzwvY29kZT5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCBPVVQgJF8sIlxuIjsKKwkJfQorCisJCSRpbmV4YW1wbGUgPSAyIGlmICRpbmV4YW1wbGUgPT0gMTsKKwl9CisJcHJpbnQgT1VUPDxFT0Y7Cis8L3ByZT4KKzxwPjxpPkdlbmVyYXRlZCBieSB2aW0yaHRtbCBvbiAkZGF0ZTwvaT48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CitFT0YKKworfQorCitzdWIgdXNhZ2UKK3sKK2RpZTw8RU9GOwordmltMmh0bWwucGw6IGNvbnZlcnRzIHZpbSBkb2N1bWVudGF0aW9uIHRvIEhUTUwuCit1c2FnZToKKworCXZpbTJodG1sLnBsIDx0YWcgZmlsZT4gPHRleHQgZmlsZXM+CitFT0YKK30KKworCisKK3N1YiB3cml0ZUNTUworeworCW9wZW4oIENTUywgIj52aW0tc3R5bGVzaGVldC5jc3MiICApIHx8IGRpZSAiQ291bGRuJ3Qgd3JpdGUgc3R5bGVzaGVldDogJCFcbiI7CisJcHJpbnQgQ1NTPDxFT0Y7Citib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IGNvbG9yOiBibGFjazt9Cis6bGluayB7IGNvbG9yOiByZ2IoMCwxMzcsMTM5KTsgfQorOnZpc2l0ZWQgeyBjb2xvcjogcmdiKDAsMTAwLDEwMCk7CisgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBzaG91bGQgYmUgaW5oZXJpdCAqLyB9Cis6YWN0aXZlIHsgY29sb3I6IHJnYigwLDIwMCwyMDApOworICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBzaG91bGQgYmUgaW5oZXJpdCAqLyB9CisKK0IudmltdGFnIHsgY29sb3IgOiByZ2IoMjUwLDAsMjUwKTsgfQorCitoMSwgaDIgeyBjb2xvcjogcmdiKDgyLDgwLDgyKTsgdGV4dC1hbGlnbjogY2VudGVyOyB9CitoMywgaDQsIGg1LCBoNiB7IGNvbG9yOiByZ2IoODIsODAsODIpOyB9CisuaGVhZGxpbmUgeyBjb2xvcjogcmdiKDAsMTM3LDEzOSk7IH0KKy5oZWFkZXIgeyBjb2xvcjogcmdiKDE2NCwgMzIsIDI0Nik7IH0KKy5zZWN0aW9uIHsgY29sb3I6IHJnYigxNjQsIDMyLCAyNDYpOyB9Cisua2V5c3Ryb2tlIHsgY29sb3I6IHJnYigxMDYsIDg5LCAyMDUpOyB9CisudmltIHsgfQorLmV4YW1wbGUgeyBjb2xvcjogcmdiKDAsIDAsIDI1NSk7IH0KKy5vcHRpb24geyB9Cisubm90dmkgeyB9Cisuc3BlY2lhbCB7IGNvbG9yOiByZ2IoMTA2LCA4OSwgMjA1KTsgfQorLm5vdGUgeyBjb2xvcjogYmx1ZTsgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OyB9Cisuc3ViIHt9CisuYmFkbGluayB7IGNvbG9yOiByZ2IoMCwzNywzOSk7IH0KK0VPRgorCit9CisKKyMgbWFpbgordXNhZ2UoKSBpZiAkI0FSR1YgPCAyOworCitwcmludCAiUHJvY2Vzc2luZyB0YWdzLi4uXG4iOworcmVhZFRhZ0ZpbGUoICRBUkdWWyAwIF0gKTsKKworZm9yZWFjaCBteSAkZmlsZSAoIDEuLiQjQVJHViApIHsKKwlwcmludCAiUHJvY2Vzc2luZyAiLiRBUkdWWyAkZmlsZSBdLiIuLi5cbiI7CisJdmltMmh0bWwoICRBUkdWWyAkZmlsZSBdICk7Cit9CitwcmludCAiV3JpdGluZyBzdHlsZXNoZWV0Li4uXG4iOword3JpdGVDU1MoKTsKK3ByaW50ICJkb25lLlxuIgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmltZGlmZi4xIGIvcnVudGltZS9kb2MvdmltZGlmZi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODcyODQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92aW1kaWZmLjEKQEAgLTAsMCArMSw0NiBAQAorLlRIIFZJTURJRkYgMSAiMjAwMSBNYXJjaCAzMCIKKy5TSCBOQU1FCit2aW1kaWZmIFwtIGVkaXQgdHdvIG9yIHRocmVlIHZlcnNpb25zIG9mIGEgZmlsZSB3aXRoIFZpbSBhbmQgc2hvdyBkaWZmZXJlbmNlcworLlNIIFNZTk9QU0lTCisuYnIKKy5CIHZpbWRpZmYKK1tvcHRpb25zXSBmaWxlMSBmaWxlMiBbZmlsZTNdCisuUFAKKy5CIGd2aW1kaWZmCisuU0ggREVTQ1JJUFRJT04KKy5CIFZpbWRpZmYKK3N0YXJ0cworLkIgVmltCitvbiB0d28gKG9yIHRocmVlKSBmaWxlcy4KK0VhY2ggZmlsZSBnZXRzIGl0cyBvd24gd2luZG93LgorVGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZpbGVzIGFyZSBoaWdobGlnaHRlZC4KK1RoaXMgaXMgYSBuaWNlIHdheSB0byBpbnNwZWN0IGNoYW5nZXMgYW5kIHRvIG1vdmUgY2hhbmdlcyBmcm9tIG9uZSB2ZXJzaW9uCit0byBhbm90aGVyIHZlcnNpb24gb2YgdGhlIHNhbWUgZmlsZS4KKy5QUAorU2VlIHZpbSgxKSBmb3IgZGV0YWlscyBhYm91dCBWaW0gaXRzZWxmLgorLlBQCitXaGVuIHN0YXJ0ZWQgYXMKKy5CIGd2aW1kaWZmCit0aGUgR1VJIHdpbGwgYmUgc3RhcnRlZCwgaWYgYXZhaWxhYmxlLgorLlBQCitJbiBlYWNoIHdpbmRvdyB0aGUgJ2RpZmYnIG9wdGlvbiB3aWxsIGJlIHNldCwgd2hpY2ggY2F1c2VzIHRoZSBkaWZmZXJlbmNlcwordG8gYmUgaGlnaGxpZ2h0ZWQuCisuYnIKK1RoZSAnd3JhcCcgYW5kICdzY3JvbGxiaW5kJyBvcHRpb25zIGFyZSBzZXQgdG8gbWFrZSB0aGUgdGV4dCBsb29rIGdvb2QuCisuYnIKK1RoZSAnZm9sZG1ldGhvZCcgb3B0aW9uIGlzIHNldCB0byAiZGlmZiIsIHdoaWNoIHB1dHMgcmFuZ2VzIG9mIGxpbmVzIHdpdGhvdXQKK2NoYW5nZXMgaW4gYSBmb2xkLiAgJ2ZvbGRjb2x1bW4nIGlzIHNldCB0byB0d28gdG8gbWFrZSBpdCBlYXN5IHRvIHNwb3QgdGhlCitmb2xkcyBhbmQgb3BlbiBvciBjbG9zZSB0aGVtLgorLlNIIE9QVElPTlMKK1ZlcnRpY2FsIHNwbGl0cyBhcmUgdXNlZCB0byBhbGlnbiB0aGUgbGluZXMsIGFzIGlmIHRoZSAiLU8iIGFyZ3VtZW50IHdhcyB1c2VkLgorVG8gdXNlIGhvcml6b250YWwgc3BsaXRzIGludGVhZCwgdXNlIHRoZSAiLW8iIGFyZ3VtZW50LgorLlBQCitGb3IgYWxsIG90aGVyIGFyZ3VtZW50cyBzZWUgdmltKDEpLgorLlNIIFNFRSBBTFNPCit2aW0oMSkKKy5TSCBBVVRIT1IKK01vc3Qgb2YKKy5CIFZpbQord2FzIG1hZGUgYnkgQnJhbSBNb29sZW5hYXIsIHdpdGggYSBsb3Qgb2YgaGVscCBmcm9tIG90aGVycy4KK1NlZSAiOmhlbHAgY3JlZGl0cyIgaW4KKy5CIFZpbS4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3ZpbWRpZmYubWFuIGIvcnVudGltZS9kb2MvdmltZGlmZi5tYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxY2U5ZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZpbWRpZmYubWFuCkBAIC0wLDAgKzEsNjYgQEAKKworCisKK1ZJTURJRkYoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSU1ESUZGKDEpCisKKworTkFNRQorICAgICAgIHZpbWRpZmYgIC0gIGVkaXQgIHR3byBvciB0aHJlZSB2ZXJzaW9ucyBvZiBhIGZpbGUgd2l0aCBWaW0KKyAgICAgICBhbmQgc2hvdyBkaWZmZXJlbmNlcworCitTWU5PUFNJUworICAgICAgIHZpbWRpZmYgW29wdGlvbnNdIGZpbGUxIGZpbGUyIFtmaWxlM10KKworICAgICAgIGd2aW1kaWZmCisKK0RFU0NSSVBUSU9OCisgICAgICAgVmltZGlmZiBzdGFydHMgVmltIG9uIHR3byAob3IgIHRocmVlKSAgZmlsZXMuICAgRWFjaCAgZmlsZQorICAgICAgIGdldHMgIGl0cyAgb3duICB3aW5kb3cuICBUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZmlsZXMKKyAgICAgICBhcmUgaGlnaGxpZ2h0ZWQuICBUaGlzIGlzIGEgbmljZSB3YXkgIHRvICBpbnNwZWN0ICBjaGFuZ2VzCisgICAgICAgYW5kIHRvIG1vdmUgY2hhbmdlcyBmcm9tIG9uZSB2ZXJzaW9uIHRvIGFub3RoZXIgdmVyc2lvbiBvZgorICAgICAgIHRoZSBzYW1lIGZpbGUuCisKKyAgICAgICBTZWUgdmltKDEpIGZvciBkZXRhaWxzIGFib3V0IFZpbSBpdHNlbGYuCisKKyAgICAgICBXaGVuIHN0YXJ0ZWQgYXMgZ3ZpbWRpZmYgIHRoZSAgR1VJICB3aWxsICBiZSAgc3RhcnRlZCwgIGlmCisgICAgICAgYXZhaWxhYmxlLgorCisgICAgICAgSW4gZWFjaCB3aW5kb3cgdGhlICdkaWZmJyBvcHRpb24gd2lsbCBiZSBzZXQsIHdoaWNoIGNhdXNlcworICAgICAgIHRoZSBkaWZmZXJlbmNlcyB0byBiZSBoaWdobGlnaHRlZC4KKyAgICAgICBUaGUgJ3dyYXAnIGFuZCAnc2Nyb2xsYmluZCcgb3B0aW9ucyBhcmUgc2V0ICB0byAgbWFrZSAgdGhlCisgICAgICAgdGV4dCBsb29rIGdvb2QuCisgICAgICAgVGhlICAnZm9sZG1ldGhvZCcgIG9wdGlvbiAgaXMgIHNldCAgdG8gICJkaWZmIiwgd2hpY2ggcHV0cworICAgICAgIHJhbmdlcyBvZiBsaW5lcyB3aXRob3V0IGNoYW5nZXMgaW4gYSAgZm9sZC4gICAnZm9sZGNvbHVtbicKKyAgICAgICBpcyAgc2V0ICB0byB0d28gdG8gbWFrZSBpdCBlYXN5IHRvIHNwb3QgdGhlIGZvbGRzIGFuZCBvcGVuCisgICAgICAgb3IgY2xvc2UgdGhlbS4KKworT1BUSU9OUworICAgICAgIFZlcnRpY2FsIHNwbGl0cyBhcmUgdXNlZCB0byBhbGlnbiB0aGUgIGxpbmVzLCAgYXMgIGlmICB0aGUKKyAgICAgICAiLU8iICBhcmd1bWVudCB3YXMgdXNlZC4gIFRvIHVzZSBob3Jpem9udGFsIHNwbGl0cyBpbnRlYWQsCisgICAgICAgdXNlIHRoZSAiLW8iIGFyZ3VtZW50LgorCisgICAgICAgRm9yIGFsbCBvdGhlciBhcmd1bWVudHMgc2VlIHZpbSgxKS4KKworU0VFIEFMU08KKyAgICAgICB2aW0oMSkKKworQVVUSE9SCisgICAgICAgTW9zdCBvZiBWaW0gd2FzIG1hZGUgYnkgQnJhbSBNb29sZW5hYXIsIHdpdGggYSBsb3Qgb2YgaGVscAorICAgICAgIGZyb20gb3RoZXJzLiAgU2VlICI6aGVscCBjcmVkaXRzIiBpbiBWaW0uCisKKworCisKKworCisKKworCisKKworCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxIE1hcmNoIDMwICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aW10dXRvci4xIGIvcnVudGltZS9kb2MvdmltdHV0b3IuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjVhZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2MvdmltdHV0b3IuMQpAQCAtMCwwICsxLDU0IEBACisuVEggVklNVFVUT1IgMSAiMjAwMSBBcHJpbCAyIgorLlNIIE5BTUUKK3ZpbXR1dG9yIFwtIHRoZSBWaW0gdHV0b3IKKy5TSCBTWU5PUFNJUworLmJyCisuQiB2aW10dXRvciBbbGFuZ3VhZ2VdCisuU0ggREVTQ1JJUFRJT04KKy5CIFZpbXR1dG9yCitzdGFydHMgdGhlCisuQiBWaW0KK3R1dG9yLgorSXQgY29waWVzIHRoZSB0dXRvciBmaWxlIGZpcnN0LCBzbyB0aGF0IGl0IGNhbiBiZSBtb2RpZmllZCB3aXRob3V0IGNoYW5naW5nCit0aGUgb3JpZ2luYWwgZmlsZS4KKy5QUAorVGhlCisuQiBWaW10dXRvcgoraXMgdXNlZnVsIGZvciBwZW9wbGUgdGhhdCB3YW50IHRvIGxlYXJuIHRoZWlyIGZpcnN0CisuQiBWaW0KK2NvbW1hbmRzLgorLlBQCitUaGUgb3B0aW9uYWwgW2xhbmd1YWdlXSBhcmd1bWVudCBpcyB0aGUgdHdvLWxldHRlciBuYW1lIG9mIGEgbGFuZ3VhZ2UsIGxpa2UKKyJpdCIgb3IgImVzIi4KK0lmIHRoZSBbbGFuZ3VhZ2VdIGFyZ3VtZW50IGlzIG1pc3NpbmcsIHRoZSBsYW5ndWFnZSBvZiB0aGUgY3VycmVudCBsb2NhbGUgd2lsbAorYmUgdXNlZC4KK0lmIGEgdHV0b3IgaW4gdGhpcyBsYW5ndWFnZSBpcyBhdmFpbGFibGUsIGl0IHdpbGwgYmUgdXNlZC4KK090aGVyd2lzZSB0aGUgRW5nbGlzaCB2ZXJzaW9uIHdpbGwgYmUgdXNlZC4KKy5QUAorLkIgVmltCitpcyBhbHdheXMgc3RhcnRlZCBpbiBWaSBjb21wYXRpYmxlIG1vZGUuCisuU0ggRklMRVMKKy5UUCAxNQorL3Vzci9sb2NhbC9saWIvdmltL3R1dG9yL3R1dG9yWy5sYW5ndWFnZV0KK1RoZQorLkIgVmltdHV0b3IKK3RleHQgZmlsZShzKS4KKy5UUCAxNQorL3Vzci9sb2NhbC9saWIvdmltL3R1dG9yL3R1dG9yLnZpbQorVGhlIFZpbSBzY3JpcHQgdXNlZCB0byBjb3B5IHRoZQorLkIgVmltdHV0b3IKK3RleHQgZmlsZS4KKy5TSCBBVVRIT1IKK1RoZQorLkIgVmltdHV0b3IKK3dhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIFZpIGJ5IE1pY2hhZWwgQy4gUGllcmNlIGFuZCBSb2JlcnQgSy4gV2FyZSwKK0NvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcyB1c2luZyBpZGVhcyBzdXBwbGllZCBieSBDaGFybGVzIFNtaXRoLAorQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eS4KK0UtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorLmJyCitJdCB3YXMgbW9kaWZpZWQgZm9yCisuQiBWaW0KK2J5IEJyYW0gTW9vbGVuYWFyLgorRm9yIHRoZSBuYW1lcyBvZiB0aGUgdHJhbnNsYXRvcnMgc2VlIHRoZSB0dXRvciBmaWxlcy4KKy5TSCBTRUUgQUxTTwordmltKDEpCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy92aW10dXRvci5tYW4gYi9ydW50aW1lL2RvYy92aW10dXRvci5tYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2YjFjMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3ZpbXR1dG9yLm1hbgpAQCAtMCwwICsxLDY2IEBACisKKworCitWSU1UVVRPUigxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSU1UVVRPUigxKQorCisKK05BTUUKKyAgICAgICB2aW10dXRvciAtIHRoZSBWaW0gdHV0b3IKKworU1lOT1BTSVMKKyAgICAgICB2aW10dXRvciBbbGFuZ3VhZ2VdCisKK0RFU0NSSVBUSU9OCisgICAgICAgVmltdHV0b3IgIHN0YXJ0cyAgdGhlIFZpbSB0dXRvci4gIEl0IGNvcGllcyB0aGUgdHV0b3IgZmlsZQorICAgICAgIGZpcnN0LCBzbyB0aGF0IGl0IGNhbiBiZSAgbW9kaWZpZWQgIHdpdGhvdXQgIGNoYW5naW5nICB0aGUKKyAgICAgICBvcmlnaW5hbCBmaWxlLgorCisgICAgICAgVGhlIFZpbXR1dG9yIGlzIHVzZWZ1bCBmb3IgcGVvcGxlIHRoYXQgd2FudCB0byBsZWFybiB0aGVpcgorICAgICAgIGZpcnN0IFZpbSBjb21tYW5kcy4KKworICAgICAgIFRoZSBvcHRpb25hbCBbbGFuZ3VhZ2VdIGFyZ3VtZW50IGlzIHRoZSB0d28tbGV0dGVyIG5hbWUgb2YKKyAgICAgICBhIGxhbmd1YWdlLCBsaWtlICJpdCIgb3IgImVzIi4gIElmIHRoZSBbbGFuZ3VhZ2VdIGFyZ3VtZW50CisgICAgICAgaXMgbWlzc2luZywgdGhlIGxhbmd1YWdlIG9mIHRoZSAgY3VycmVudCAgbG9jYWxlICB3aWxsICBiZQorICAgICAgIHVzZWQuICAgSWYgIGEgdHV0b3IgaW4gdGhpcyBsYW5ndWFnZSBpcyBhdmFpbGFibGUsIGl0IHdpbGwKKyAgICAgICBiZSB1c2VkLiAgT3RoZXJ3aXNlIHRoZSBFbmdsaXNoIHZlcnNpb24gd2lsbCBiZSB1c2VkLgorCisgICAgICAgVmltIGlzIGFsd2F5cyBzdGFydGVkIGluIFZpIGNvbXBhdGlibGUgbW9kZS4KKworRklMRVMKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vdHV0b3IvdHV0b3JbLmxhbmd1YWdlXQorICAgICAgICAgICAgICAgICAgICAgIFRoZSBWaW10dXRvciB0ZXh0IGZpbGUocykuCisKKyAgICAgICAvdXNyL2xvY2FsL2xpYi92aW0vdHV0b3IvdHV0b3IudmltCisgICAgICAgICAgICAgICAgICAgICAgVGhlIFZpbSBzY3JpcHQgdXNlZCB0byAgY29weSAgdGhlICBWaW10dXRvcgorICAgICAgICAgICAgICAgICAgICAgIHRleHQgZmlsZS4KKworQVVUSE9SCisgICAgICAgVGhlICBWaW10dXRvciAgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgVmkgYnkgTWljaGFlbCBDLgorICAgICAgIFBpZXJjZSBhbmQgUm9iZXJ0IEsuIFdhcmUsIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcyAgdXNpbmcKKyAgICAgICBpZGVhcyAgc3VwcGxpZWQgIGJ5ICBDaGFybGVzIFNtaXRoLCBDb2xvcmFkbyBTdGF0ZSBVbml2ZXItCisgICAgICAgc2l0eS4gIEUtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorICAgICAgIEl0IHdhcyBtb2RpZmllZCBmb3IgVmltIGJ5IEJyYW0gTW9vbGVuYWFyLiAgRm9yIHRoZSAgbmFtZXMKKyAgICAgICBvZiB0aGUgdHJhbnNsYXRvcnMgc2VlIHRoZSB0dXRvciBmaWxlcy4KKworU0VFIEFMU08KKyAgICAgICB2aW0oMSkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxIEFwcmlsIDIgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3Zpc3VhbC50eHQgYi9ydW50aW1lL2RvYy92aXN1YWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDA1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy92aXN1YWwudHh0CkBAIC0wLDAgKzEsNDg3IEBACisqdmlzdWFsLnR4dCogICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDQgSnVuIDA4CisKKworCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCisKKworVmlzdWFsIG1vZGUJCQkJKlZpc3VhbCogKlZpc3VhbC1tb2RlKiAqdmlzdWFsLW1vZGUqCisKK1Zpc3VhbCBtb2RlIGlzIGEgZmxleGlibGUgYW5kIGVhc3kgd2F5IHRvIHNlbGVjdCBhIHBpZWNlIG9mIHRleHQgZm9yIGFuCitvcGVyYXRvci4gIEl0IGlzIHRoZSBvbmx5IHdheSB0byBzZWxlY3QgYSBibG9jayBvZiB0ZXh0LgorCitUaGlzIGlzIGludHJvZHVjZWQgaW4gc2VjdGlvbiB8MDQuNHwgb2YgdGhlIHVzZXIgbWFudWFsLgorCisxLiBVc2luZyBWaXN1YWwgbW9kZQkJCXx2aXN1YWwtdXNlfAorMi4gU3RhcnRpbmcgYW5kIHN0b3BwaW5nIFZpc3VhbCBtb2RlCXx2aXN1YWwtc3RhcnR8CiszLiBDaGFuZ2luZyB0aGUgVmlzdWFsIGFyZWEJCXx2aXN1YWwtY2hhbmdlfAorNC4gT3BlcmF0aW5nIG9uIHRoZSBWaXN1YWwgYXJlYQkJfHZpc3VhbC1vcGVyYXRvcnN8Cis1LiBCbG9ja3dpc2Ugb3BlcmF0b3JzCQkJfGJsb2Nrd2lzZS1vcGVyYXRvcnN8Cis2LiBSZXBlYXRpbmcJCQkJfHZpc3VhbC1yZXBlYXR8Cis3LiBFeGFtcGxlcwkJCQl8dmlzdWFsLWV4YW1wbGVzfAorOC4gU2VsZWN0IG1vZGUJCQkJfFNlbGVjdC1tb2RlfAorCit7VmkgaGFzIG5vIFZpc3VhbCBtb2RlLCB0aGUgbmFtZSAidmlzdWFsIiBpcyB1c2VkIGZvciBOb3JtYWwgbW9kZSwgdG8KK2Rpc3Rpbmd1aXNoIGl0IGZyb20gRXggbW9kZX0KK3tub3QgYXZhaWxhYmxlIHdoZW4gdGhlIHwrdmlzdWFsfCBmZWF0dXJlIHdhcyBkaXNhYmxlZCB3aGVuIGNvbXBpbGluZ30KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBVc2luZyBWaXN1YWwgbW9kZQkJCQkJKnZpc3VhbC11c2UqCisKK1VzaW5nIFZpc3VhbCBtb2RlIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorMS4gTWFyayB0aGUgc3RhcnQgb2YgdGhlIHRleHQgd2l0aCAidiIsICJWIiBvciBDVFJMLVYuCisgICBUaGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3Igd2lsbCBiZSB1c2VkIGFzIHRoZSBzdGFydC4KKzIuIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dC4KKyAgIFRoZSB0ZXh0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBWaXN1YWwgbW9kZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQorICAgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgaXMgaGlnaGxpZ2h0ZWQuCiszLiBUeXBlIGFuIG9wZXJhdG9yIGNvbW1hbmQuCisgICBUaGUgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVycyB3aWxsIGJlIG9wZXJhdGVkIHVwb24uCisKK1RoZSAnaGlnaGxpZ2h0JyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkaXNwbGF5IG1vZGUgdG8gdXNlIGZvcgoraGlnaGxpZ2h0aW5nIGluIFZpc3VhbCBtb2RlLgorVGhlICd2aXJ0dWFsZWRpdCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGFsbG93IHBvc2l0aW9uaW5nIHRoZSBjdXJzb3IgdG8KK3Bvc2l0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBhY3R1YWwgY2hhcmFjdGVyLgorCitUaGUgaGlnaGxpZ2h0ZWQgdGV4dCBub3JtYWxseSBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCitIb3dldmVyLCB3aGVuIHRoZSAnc2VsZWN0aW9uJyBvcHRpb24gaXMgc2V0IHRvICJleGNsdXNpdmUiIGFuZCB0aGUgY3Vyc29yIGlzCithZnRlciB0aGUgVmlzdWFsIGFyZWEsIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciBpcyBub3QgaW5jbHVkZWQuCisKK1dpdGggInYiIHRoZSB0ZXh0IGJlZm9yZSB0aGUgc3RhcnQgcG9zaXRpb24gYW5kIGFmdGVyIHRoZSBlbmQgcG9zaXRpb24gd2lsbAorbm90IGJlIGhpZ2hsaWdodGVkLiAgSG93ZXZlciwgQWxsIHVwcGVyY2FzZSBhbmQgbm9uLWFscGhhIG9wZXJhdG9ycywgZXhjZXB0CisifiIgYW5kICJVIiwgd2lsbCB3b3JrIG9uIHdob2xlIGxpbmVzIGFueXdheS4gIFNlZSB0aGUgbGlzdCBvZiBvcGVyYXRvcnMKK2JlbG93LgorCisJCQkJCQkJKnZpc3VhbC1ibG9jayoKK1dpdGggQ1RSTC1WIChibG9ja3dpc2UgVmlzdWFsIG1vZGUpIHRoZSBoaWdobGlnaHRlZCB0ZXh0IHdpbGwgYmUgYSByZWN0YW5nbGUKK2JldHdlZW4gc3RhcnQgcG9zaXRpb24gYW5kIHRoZSBjdXJzb3IuICBIb3dldmVyLCBzb21lIG9wZXJhdG9ycyB3b3JrIG9uIHdob2xlCitsaW5lcyBhbnl3YXkgKHNlZSB0aGUgbGlzdCBiZWxvdykuICBUaGUgY2hhbmdlIGFuZCBzdWJzdGl0dXRlIG9wZXJhdG9ycyB3aWxsCitkZWxldGUgdGhlIGhpZ2hsaWdodGVkIHRleHQgYW5kIHRoZW4gc3RhcnQgaW5zZXJ0aW9uIGF0IHRoZSB0b3AgbGVmdAorcG9zaXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gU3RhcnRpbmcgYW5kIHN0b3BwaW5nIFZpc3VhbCBtb2RlCQkJKnZpc3VhbC1zdGFydCoKKworCQkJCQkJKnYqICpjaGFyYWN0ZXJ3aXNlLXZpc3VhbCoKK3YJCQlzdGFydCBWaXN1YWwgbW9kZSBwZXIgY2hhcmFjdGVyLgorCisJCQkJCQkqViogKmxpbmV3aXNlLXZpc3VhbCoKK1YJCQlzdGFydCBWaXN1YWwgbW9kZSBsaW5ld2lzZS4KKworCQkJCQkJKkNUUkwtViogKmJsb2Nrd2lzZS12aXN1YWwqCitDVFJMLVYJCQlzdGFydCBWaXN1YWwgbW9kZSBibG9ja3dpc2UuICBOb3RlOiBVbmRlciBXaW5kb3dzCisJCQlDVFJMLVYgY291bGQgYmUgbWFwcGVkIHRvIHBhc3RlIHRleHQsIGl0IGRvZXNuJ3Qgd29yaworCQkJdG8gc3RhcnQgVmlzdWFsIG1vZGUgdGhlbiwgc2VlIHxDVFJMLVYtYWx0ZXJuYXRpdmV8LgorCitJZiB5b3UgdXNlIDxFc2M+LCBjbGljayB0aGUgbGVmdCBtb3VzZSBidXR0b24gb3IgdXNlIGFueSBjb21tYW5kIHRoYXQKK2RvZXMgYSBqdW1wIHRvIGFub3RoZXIgYnVmZmVyIHdoaWxlIGluIFZpc3VhbCBtb2RlLCB0aGUgaGlnaGxpZ2h0aW5nIHN0b3BzCithbmQgbm8gdGV4dCBpcyBhZmZlY3RlZC4gIEFsc28gd2hlbiB5b3UgaGl0ICJ2IiBpbiBjaGFyYWN0ZXJ3aXNlIFZpc3VhbCBtb2RlLAorIkNUUkwtViIgaW4gYmxvY2t3aXNlIFZpc3VhbCBtb2RlIG9yICJWIiBpbiBsaW5ld2lzZSBWaXN1YWwgbW9kZS4gIElmIHlvdSBoaXQKK0NUUkwtWiB0aGUgaGlnaGxpZ2h0aW5nIHN0b3BzIGFuZCB0aGUgZWRpdG9yIGlzIHN1c3BlbmRlZCBvciBhIG5ldyBzaGVsbCBpcworc3RhcnRlZCB8Q1RSTC1afC4KKworCSAgICAgIG5ldyBtb2RlIGFmdGVyIHR5cGluZzoJCSp2X3YqICp2X0NUUkwtViogKnZfVioKK29sZCBtb2RlCSAgICAgInYiCSAgICAgICJDVFJMLVYiCQkgICAgICJWIgl+CisKK05vcm1hbAkJICAgIFZpc3VhbAkgICBibG9ja3dpc2UgVmlzdWFsCSAgbGluZXdpc2UgVmlzdWFsCitWaXN1YWwJCSAgICBOb3JtYWwJICAgYmxvY2t3aXNlIFZpc3VhbAkgIGxpbmV3aXNlIFZpc3VhbAorYmxvY2t3aXNlIFZpc3VhbCAgICBWaXN1YWwJICAgTm9ybWFsCQkgIGxpbmV3aXNlIFZpc3VhbAorbGluZXdpc2UgVmlzdWFsICAgICBWaXN1YWwJICAgYmxvY2t3aXNlIFZpc3VhbAkgIE5vcm1hbAorCisJCQkJCQkJKmd2KiAqdl9ndioKK2d2CQkJU3RhcnQgVmlzdWFsIG1vZGUgd2l0aCB0aGUgc2FtZSBhcmVhIGFzIHRoZSBwcmV2aW91cworCQkJYXJlYSBhbmQgdGhlIHNhbWUgbW9kZS4gIEluIFZpc3VhbCBtb2RlIHRoZSBjdXJyZW50IGFuZAorCQkJdGhlIHByZXZpb3VzIFZpc3VhbCBhcmVhIGFyZSBleGNoYW5nZWQuCisKKwkJCQkJCQkqPExlZnRNb3VzZT4qCis8TGVmdE1vdXNlPgkJU2V0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gIElmIFZpc3VhbCBtb2RlIGlzCisJCQlhY3RpdmUgaXQgaXMgc3RvcHBlZC4gIE9ubHkgd2hlbiAnbW91c2UnIG9wdGlvbiBpcworCQkJY29udGFpbnMgJ24nIG9yICdhJy4gIElmIHRoZSBwb3NpdGlvbiBpcyB3aXRoaW4gJ3NvJworCQkJbGluZXMgZnJvbSB0aGUgbGFzdCBsaW5lIG9uIHRoZSBzY3JlZW4gdGhlIHRleHQgaXMKKwkJCXNjcm9sbGVkIHVwLiAgSWYgdGhlIHBvc2l0aW9uIGlzIHdpdGhpbiAnc28nIGxpbmVzIGZyb20KKwkJCXRoZSBmaXJzdCBsaW5lIG9uIHRoZSBzY3JlZW4gdGhlIHRleHQgaXMgc2Nyb2xsZWQKKwkJCWRvd24uCisKKwkJCQkJCQkqPFJpZ2h0TW91c2U+KgorPFJpZ2h0TW91c2U+CQlTdGFydCBWaXN1YWwgbW9kZSBpZiBpdCBpcyBub3QgYWN0aXZlLiAgVGhlIHRleHQgZnJvbQorCQkJdGhlIGN1cnNvciBwb3NpdGlvbiB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGNsaWNrIGlzCisJCQloaWdobGlnaHRlZC4gIElmIFZpc3VhbCBtb2RlIHdhcyBhbHJlYWR5IGFjdGl2ZSBtb3ZlCisJCQl0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBoaWdobGlnaHRlZCB0ZXh0LCB3aGljaCBldmVyCisJCQlpcyBjbG9zZXN0LCB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGNsaWNrLiAgT25seSB3aGVuCisJCQknbW91c2UnIG9wdGlvbiBjb250YWlucyAnbicgb3IgJ2EnLgorCisJCQlOb3RlOiB3aGVuICdtb3VzZW1vZGVsJyBpcyBzZXQgdG8gInBvcHVwIiwKKwkJCTxTLUxlZnRNb3VzZT4gaGFzIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiA8UmlnaHRNb3VzZT4uCisKKwkJCQkJCQkqPExlZnRSZWxlYXNlPioKKzxMZWZ0UmVsZWFzZT4JCVRoaXMgd29ya3MgbGlrZSBhIDxMZWZ0TW91c2U+LCBpZiBpdCBpcyBub3QgYXQKKwkJCXRoZSBzYW1lIHBvc2l0aW9uIGFzIDxMZWZ0TW91c2U+LiAgSW4gYW4gb2xkZXIgdmVyc2lvbgorCQkJb2YgeHRlcm0geW91IHdvbid0IHNlZSB0aGUgc2VsZWN0ZWQgYXJlYSB1bnRpbCB0aGUKKwkJCWJ1dHRvbiBpcyByZWxlYXNlZCwgdW5sZXNzIHRoZXJlIGlzIGFjY2VzcyB0byB0aGUKKwkJCWRpc3BsYXkgd2hlcmUgdGhlIHh0ZXJtIGlzIHJ1bm5pbmcgKHZpYSB0aGUgRElTUExBWQorCQkJZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgdGhlIC1kaXNwbGF5IGFyZ3VtZW50KS4gIE9ubHkKKwkJCXdoZW4gJ21vdXNlJyBvcHRpb24gY29udGFpbnMgJ24nIG9yICdhJy4KKworSWYgVmlzdWFsIG1vZGUgaXMgbm90IGFjdGl2ZSBhbmQgdGhlICJ2IiwgIlYiIG9yIENUUkwtViBpcyBwcmVjZWRlZCB3aXRoIGEKK2NvdW50LCB0aGUgc2l6ZSBvZiB0aGUgcHJldmlvdXNseSBoaWdobGlnaHRlZCBhcmVhIGlzIHVzZWQgZm9yIGEgc3RhcnQuICBZb3UKK2NhbiB0aGVuIG1vdmUgdGhlIGVuZCBvZiB0aGUgaGlnaGxpZ2h0ZWQgYXJlYSBhbmQgZ2l2ZSBhbiBvcGVyYXRvci4gIFRoZSB0eXBlCitvZiB0aGUgb2xkIGFyZWEgaXMgdXNlZCAoY2hhcmFjdGVyLCBsaW5lIG9yIGJsb2Nrd2lzZSkuCistIExpbmV3aXNlIFZpc3VhbCBtb2RlOiBUaGUgbnVtYmVyIG9mIGxpbmVzIGlzIG11bHRpcGxpZWQgd2l0aCB0aGUgY291bnQuCistIEJsb2Nrd2lzZSBWaXN1YWwgbW9kZTogVGhlIG51bWJlciBvZiBsaW5lcyBhbmQgY29sdW1ucyBpcyBtdWx0aXBsaWVkIHdpdGgKKyAgdGhlIGNvdW50LgorLSBOb3JtYWwgVmlzdWFsIG1vZGUgd2l0aGluIG9uZSBsaW5lOiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaXMgbXVsdGlwbGllZAorICB3aXRoIHRoZSBjb3VudC4KKy0gTm9ybWFsIFZpc3VhbCBtb2RlIHdpdGggc2V2ZXJhbCBsaW5lczogVGhlIG51bWJlciBvZiBsaW5lcyBpcyBtdWx0aXBsaWVkCisgIHdpdGggdGhlIGNvdW50LCBpbiB0aGUgbGFzdCBsaW5lIHRoZSBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlzIHVzZWQgYXMKKyAgaW4gdGhlIGxhc3QgbGluZSBpbiB0aGUgcHJldmlvdXNseSBoaWdobGlnaHRlZCBhcmVhLgorVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGlzIHRoZSBDdXJzb3IgcG9zaXRpb24uICBJZiB0aGUgIiQiIGNvbW1hbmQgd2FzIHVzZWQgYXMKK29uZSBvZiB0aGUgbGFzdCBjb21tYW5kcyB0byBleHRlbmQgdGhlIGhpZ2hsaWdodGVkIHRleHQsIHRoZSBhcmVhIHdpbGwgYmUKK2V4dGVuZGVkIHRvIHRoZSByaWdodG1vc3QgY29sdW1uIG9mIHRoZSBsb25nZXN0IGxpbmUuCisKK0lmIHlvdSB3YW50IHRvIGhpZ2hsaWdodCBleGFjdGx5IHRoZSBzYW1lIGFyZWEgYXMgdGhlIGxhc3QgdGltZSwgeW91IGNhbiB1c2UKKyJndiIgfGd2fCB8dl9ndnwuCisKKwkJCQkJCQkqdl9DVFJMLUMqCitDVFJMLUMJCQlJbiBWaXN1YWwgbW9kZTogU3RvcCBWaXN1YWwgbW9kZS4gIFdoZW4gaW5zZXJ0IG1vZGUgaXMKKwkJCXBlbmRpbmcgKHRoZSBtb2RlIG1lc3NhZ2Ugc2hvd3MKKwkJCSItLSAoaW5zZXJ0KSBWSVNVQUwgLS0iKSwgaXQgaXMgYWxzbyBzdG9wcGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIENoYW5naW5nIHRoZSBWaXN1YWwgYXJlYQkJCQkqdmlzdWFsLWNoYW5nZSoKKworCQkJCQkJCSp2X28qCitvCQkJR28gdG8gT3RoZXIgZW5kIG9mIGhpZ2hsaWdodGVkIHRleHQ6IFRoZSBjdXJyZW50CisJCQljdXJzb3IgcG9zaXRpb24gYmVjb21lcyB0aGUgc3RhcnQgb2YgdGhlIGhpZ2hsaWdodGVkCisJCQl0ZXh0IGFuZCB0aGUgY3Vyc29yIGlzIG1vdmVkIHRvIHRoZSBvdGhlciBlbmQgb2YgdGhlCisJCQloaWdobGlnaHRlZCB0ZXh0LiAgVGhlIGhpZ2hsaWdodGVkIGFyZWEgcmVtYWlucyB0aGUKKwkJCXNhbWUuCisKKwkJCQkJCQkqdl9PKgorTwkJCUdvIHRvIE90aGVyIGVuZCBvZiBoaWdobGlnaHRlZCB0ZXh0LiAgVGhpcyBpcyBsaWtlCisJCQkibyIsIGJ1dCBpbiBWaXN1YWwgYmxvY2sgbW9kZSB0aGUgY3Vyc29yIG1vdmVzIHRvIHRoZQorCQkJb3RoZXIgY29ybmVyIGluIHRoZSBzYW1lIGxpbmUuICBXaGVuIHRoZSBjb3JuZXIgaXMgYXQKKwkJCWEgY2hhcmFjdGVyIHRoYXQgb2NjdXBpZXMgbW9yZSB0aGFuIG9uZSBwb3NpdGlvbiBvbgorCQkJdGhlIHNjcmVlbiAoZS5nLiwgYSA8VGFiPiksIHRoZSBoaWdobGlnaHRlZCB0ZXh0IG1heQorCQkJY2hhbmdlLgorCisJCQkJCQkJKnZfJCoKK1doZW4gdGhlICIkIiBjb21tYW5kIGlzIHVzZWQgd2l0aCBibG9ja3dpc2UgVmlzdWFsIG1vZGUsIHRoZSByaWdodCBlbmQgb2YgdGhlCitoaWdobGlnaHRlZCB0ZXh0IHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgbG9uZ2VzdCBoaWdobGlnaHRlZCBsaW5lLiAgVGhpcworc3RvcHMgd2hlbiBhIG1vdGlvbiBjb21tYW5kIGlzIHVzZWQgdGhhdCBkb2VzIG5vdCBtb3ZlIHN0cmFpZ2h0IHVwIG9yIGRvd24uCisKK0ZvciBtb3ZpbmcgdGhlIGVuZCBvZiB0aGUgYmxvY2sgbWFueSBjb21tYW5kcyBjYW4gYmUgdXNlZCwgYnV0IHlvdSBjYW5ub3QKK3VzZSBFeCBjb21tYW5kcywgY29tbWFuZHMgdGhhdCBtYWtlIGNoYW5nZXMgb3IgYWJhbmRvbiB0aGUgZmlsZS4gIENvbW1hbmRzCisoc3RhcnRpbmcgd2l0aCkgIi5wUGlJYUFPJiIsIENUUkwtXiwgIloiLCBDVFJMLV0sIENUUkwtVCwgQ1RSTC1SLCBDVFJMLUkKK2FuZCBDVFJMLU8gY2F1c2UgYSBiZWVwIGFuZCBWaXN1YWwgbW9kZSBjb250aW51ZXMuCisKK1doZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgd2luZG93IG9uIHRoZSBzYW1lIGJ1ZmZlciwgdGhlIGN1cnNvciBwb3NpdGlvbiBpbgordGhhdCB3aW5kb3cgaXMgYWRqdXN0ZWQsIHNvIHRoYXQgdGhlIHNhbWUgVmlzdWFsIGFyZWEgaXMgc3RpbGwgc2VsZWN0ZWQuICBUaGlzCitpcyBlc3BlY2lhbGx5IHVzZWZ1bCB0byB2aWV3IHRoZSBzdGFydCBvZiB0aGUgVmlzdWFsIGFyZWEgaW4gb25lIHdpbmRvdywgYW5kCit0aGUgZW5kIGluIGFub3RoZXIuICBZb3UgY2FuIHRoZW4gdXNlIDxSaWdodE1vdXNlPiAob3IgPFMtTGVmdE1vdXNlPiB3aGVuCisnbW91c2Vtb2RlbCcgaXMgInBvcHVwIikgdG8gbW92ZSBlaXRoZXIgZW5kIG9mIHRoZSBWaXN1YWwgYXJlYS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBPcGVyYXRpbmcgb24gdGhlIFZpc3VhbCBhcmVhCQkJCSp2aXN1YWwtb3BlcmF0b3JzKgorCitUaGUgb3BlcmF0b3JzIHRoYXQgY2FuIGJlIHVzZWQgYXJlOgorCX4Jc3dpdGNoIGNhc2UJCQkJCXx2X358CisJZAlkZWxldGUJCQkJCQl8dl9kfAorCWMJY2hhbmdlICg0KQkJCQkJfHZfY3wKKwl5CXlhbmsJCQkJCQl8dl95fAorCT4Jc2hpZnQgcmlnaHQgKDQpCQkJCQl8dl8+fAorCTwJc2hpZnQgbGVmdCAoNCkJCQkJCXx2Xzx8CisJIQlmaWx0ZXIgdGhyb3VnaCBleHRlcm5hbCBjb21tYW5kICgxKQkJfHZfIXwKKwk9CWZpbHRlciB0aHJvdWdoICdlcXVhbHByZycgb3B0aW9uIGNvbW1hbmQgKDEpCXx2Xz18CisJZ3EJZm9ybWF0IGxpbmVzIHRvICd0ZXh0d2lkdGgnIGxlbmd0aCAoMSkJCXx2X2dxfAorCitUaGUgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIGFyZToKKwlhdwlhIHdvcmQgKHdpdGggd2hpdGUgc3BhY2UpCQkJfHZfYXd8CisJaXcJaW5uZXIgd29yZAkJCQkJfHZfaXd8CisJYVcJYSBXT1JEICh3aXRoIHdoaXRlIHNwYWNlKQkJCXx2X2FXfAorCWlXCWlubmVyIFdPUkQJCQkJCXx2X2lXfAorCWFzCWEgc2VudGVuY2UgKHdpdGggd2hpdGUgc3BhY2UpCQkJfHZfYXN8CisJaXMJaW5uZXIgc2VudGVuY2UJCQkJCXx2X2lzfAorCWFwCWEgcGFyYWdyYXBoICh3aXRoIHdoaXRlIHNwYWNlKQkJCXx2X2FwfAorCWlwCWlubmVyIHBhcmFncmFwaAkJCQkJfHZfaXB8CisJYWIJYSAoKSBibG9jayAod2l0aCBwYXJlbnRoZXNpcykJCQl8dl9hYnwKKwlpYglpbm5lciAoKSBibG9jawkJCQkJfHZfaWJ8CisJYUIJYSB7fSBibG9jayAod2l0aCBicmFjZXMpCQkJfHZfYUJ8CisJaUIJaW5uZXIge30gYmxvY2sJCQkJCXx2X2lCfAorCWE8CWEgPD4gYmxvY2sgKHdpdGggPD4pCQkJCXx2X2E8fAorCWk8CWlubmVyIDw+IGJsb2NrCQkJCQl8dl9pPHwKKwlhWwlhIFtdIGJsb2NrICh3aXRoIFtdKQkJCQl8dl9hW3wKKwlpWwlpbm5lciBbXSBibG9jawkJCQkJfHZfaVt8CisKK0FkZGl0aW9uYWxseSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB1c2VkOgorCToJc3RhcnQgZXggY29tbWFuZCBmb3IgaGlnaGxpZ2h0ZWQgbGluZXMgKDEpCXx2Xzp8CisJcgljaGFuZ2UgKDQpCQkJCQl8dl9yfAorCXMJY2hhbmdlCQkJCQkJfHZfc3wKKwlDCWNoYW5nZSAoMikoNCkJCQkJCXx2X0N8CisJUwljaGFuZ2UgKDIpCQkJCQl8dl9TfAorCVIJY2hhbmdlICgyKQkJCQkJfHZfUnwKKwl4CWRlbGV0ZQkJCQkJCXx2X3h8CisJRAlkZWxldGUgKDMpCQkJCQl8dl9EfAorCVgJZGVsZXRlICgyKQkJCQkJfHZfWHwKKwlZCXlhbmsgKDIpCQkJCQl8dl9ZfAorCXAJcHV0CQkJCQkJfHZfcHwKKwlKCWpvaW4gKDEpCQkJCQl8dl9KfAorCVUJbWFrZSB1cHBlcmNhc2UJCQkJCXx2X1V8CisJdQltYWtlIGxvd2VyY2FzZQkJCQkJfHZfdXwKKwleXQlmaW5kIHRhZwkJCQkJfHZfQ1RSTC1dfAorCUkJYmxvY2sgaW5zZXJ0CQkJCQl8dl9iX0l8CisJQQlibG9jayBhcHBlbmQJCQkJCXx2X2JfQXwKKworKDEpOiBBbHdheXMgd2hvbGUgbGluZXMsIHNlZSB8OnZpc3VhbF9leGFtcGxlfC4KKygyKTogV2hvbGUgbGluZXMgd2hlbiBub3QgdXNpbmcgQ1RSTC1WLgorKDMpOiBXaG9sZSBsaW5lcyB3aGVuIG5vdCB1c2luZyBDVFJMLVYsIGRlbGV0ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lIHdoZW4KKyAgICAgdXNpbmcgQ1RSTC1WLgorKDQpOiBXaGVuIHVzaW5nIENUUkwtViBvcGVyYXRlcyBvbiB0aGUgYmxvY2sgb25seS4KKworTm90ZSB0aGF0IHRoZSAiOnZtYXAiIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmaWNhbGx5IG1hcCBrZXlzIGluIFZpc3VhbAorbW9kZS4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd291bGQgbGlrZSB0aGUgIi8iIGNvbW1hbmQgbm90IHRvIGV4dGVuZCB0aGUgVmlzdWFsCithcmVhLCBidXQgaW5zdGVhZCB0YWtlIHRoZSBoaWdobGlnaHRlZCB0ZXh0IGFuZCBzZWFyY2ggZm9yIHRoYXQ6ID4KKwk6dm1hcCAvIHkvPEMtUj4iPENSPgorKEluIHRoZSA8PiBub3RhdGlvbiB8PD58LCB3aGVuIHR5cGluZyBpdCB5b3Ugc2hvdWxkIHR5cGUgaXQgbGl0ZXJhbGx5OyB5b3UKK25lZWQgdG8gcmVtb3ZlIHRoZSAnQicgYW5kICc8JyBmbGFncyBmcm9tICdjcG9wdGlvbnMnLikKKworSWYgeW91IHdhbnQgdG8gZ2l2ZSBhIHJlZ2lzdGVyIG5hbWUgdXNpbmcgdGhlICIiIiBjb21tYW5kLCBkbyB0aGlzIGp1c3QgYmVmb3JlCit0eXBpbmcgdGhlIG9wZXJhdG9yIGNoYXJhY3RlcjogInZ7bW92ZS1hcm91bmR9InhkIi4KKworSWYgeW91IHdhbnQgdG8gZ2l2ZSBhIGNvdW50IHRvIHRoZSBjb21tYW5kLCBkbyB0aGlzIGp1c3QgYmVmb3JlIHR5cGluZyB0aGUKK29wZXJhdG9yIGNoYXJhY3RlcjogInZ7bW92ZS1hcm91bmR9Mz4iIChtb3ZlIGxpbmVzIDMgaW5kZW50cyB0byB0aGUgcmlnaHQpLgorCisJCQkJCQkJKnttb3ZlLWFyb3VuZH0qCitUaGUge21vdmUtYXJvdW5kfSBpcyBhbnkgc2VxdWVuY2Ugb2YgbW92ZW1lbnQgY29tbWFuZHMuICBOb3RlIHRoZSBkaWZmZXJlbmNlCit3aXRoIHttb3Rpb259LCB3aGljaCBpcyBvbmx5IE9ORSBtb3ZlbWVudCBjb21tYW5kLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzUuIEJsb2Nrd2lzZSBvcGVyYXRvcnMJCQkJCSpibG9ja3dpc2Utb3BlcmF0b3JzKgorCit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdmlzdWFsZXh0cmF8IGZlYXR1cmV9CisKK1JlbWluZGVyOiBVc2UgJ3ZpcnR1YWxlZGl0JyB0byBiZSBhYmxlIHRvIHNlbGVjdCBibG9ja3MgdGhhdCBzdGFydCBvciBlbmQKK2FmdGVyIHRoZSBlbmQgb2YgYSBsaW5lIG9yIGhhbGZ3YXkgYSB0YWIuCisKK1Zpc3VhbC1ibG9jayBJbnNlcnQJCQkJCQkqdl9iX0kqCitXaXRoIGEgYmxvY2t3aXNlIHNlbGVjdGlvbiwgSXtzdHJpbmd9PEVTQz4gd2lsbCBpbnNlcnQge3N0cmluZ30gYXQgdGhlIHN0YXJ0CitvZiBibG9jayBvbiBldmVyeSBsaW5lIG9mIHRoZSBibG9jaywgcHJvdmlkZWQgdGhhdCB0aGUgbGluZSBleHRlbmRzIGludG8gdGhlCitibG9jay4gIFRodXMgbGluZXMgdGhhdCBhcmUgc2hvcnQgd2lsbCByZW1haW4gdW5tb2RpZmllZC4gIFRBQnMgYXJlIHNwbGl0IHRvCityZXRhaW4gdmlzdWFsIGNvbHVtbnMuCitTZWUgfHZfYl9JX2V4YW1wbGV8LgorCitWaXN1YWwtYmxvY2sgQXBwZW5kCQkJCQkJKnZfYl9BKgorV2l0aCBhIGJsb2Nrd2lzZSBzZWxlY3Rpb24sIEF7c3RyaW5nfTxFU0M+IHdpbGwgYXBwZW5kIHtzdHJpbmd9IHRvIHRoZSBlbmQgb2YKK2Jsb2NrIG9uIGV2ZXJ5IGxpbmUgb2YgdGhlIGJsb2NrLiBUaGVyZSBpcyBzb21lIGRpZmZlcmluZyBiZWhhdmlvciB3aGVyZSB0aGUKK2Jsb2NrIFJIUyBpcyBub3Qgc3RyYWlnaHQsIGR1ZSB0byBkaWZmZXJlbnQgbGluZSBsZW5ndGhzOgorCisxLiBCbG9jayB3YXMgY3JlYXRlZCB3aXRoIDxDLXY+JAorICAgIEluIHRoaXMgY2FzZSB0aGUgc3RyaW5nIGlzIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgZWFjaCBsaW5lLgorMi4gQmxvY2sgd2FzIGNyZWF0ZWQgd2l0aCA8Qy12Pnttb3ZlLWFyb3VuZH0KKyAgICBJbiB0aGlzIGNhc2UgdGhlIHN0cmluZyBpcyBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBibG9jayBvbiBlYWNoIGxpbmUsCisgICAgYW5kIHdoaXRlc3BhY2UgaXMgaW5zZXJ0ZWQgdG8gcGFkIHRvIHRoZSBlbmQtb2YtYmxvY2sgY29sdW1uLgorU2VlIHx2X2JfQV9leGFtcGxlfC4KK05vdGU6ICJJIiBhbmQgIkEiIGJlaGF2ZSBkaWZmZXJlbnRseSBmb3IgbGluZXMgdGhhdCBkb24ndCBleHRlbmQgaW50byB0aGUKK3NlbGVjdGVkIGJsb2NrLiAgVGhpcyB3YXMgZG9uZSBpbnRlbnRpb25hbGx5LCBzbyB0aGF0IHlvdSBjYW4gZG8gaXQgdGhlIHdheQoreW91IHdhbnQuCisKK1Zpc3VhbC1ibG9jayBjaGFuZ2UJCQkJCQkqdl9iX2MqCitBbGwgc2VsZWN0ZWQgdGV4dCBpbiB0aGUgYmxvY2sgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgc2FtZSB0ZXh0IHN0cmluZy4gIFdoZW4KK3VzaW5nICJjIiB0aGUgc2VsZWN0ZWQgdGV4dCBpcyBkZWxldGVkIGFuZCBJbnNlcnQgbW9kZSBzdGFydGVkLiAgWW91IGNhbiB0aGVuCitlbnRlciB0ZXh0ICh3aXRob3V0IGEgbGluZSBicmVhaykuICBXaGVuIHlvdSBoaXQgPEVzYz4sIHRoZSBzYW1lIHN0cmluZyBpcworaW5zZXJ0ZWQgaW4gYWxsIHByZXZpb3VzbHkgc2VsZWN0ZWQgbGluZXMuCisKK1Zpc3VhbC1ibG9jayBDaGFuZ2UJCQkJCQkqdl9iX0MqCitMaWtlIHVzaW5nICJjIiwgYnV0IHRoZSBzZWxlY3Rpb24gaXMgZXh0ZW5kZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGluZSBmb3IKK2FsbCBsaW5lcy4KKworCQkJCQkJCQkqdl9iXzwqCitWaXN1YWwtYmxvY2sgU2hpZnQJCQkJCQkqdl9iXz4qCitUaGUgYmxvY2sgaXMgc2hpZnRlZCBieSAnc2hpZnR3aWR0aCcuIFRoZSBSSFMgb2YgdGhlIGJsb2NrIGlzIGlycmVsZXZhbnQuIFRoZQorTEhTIG9mIHRoZSBibG9jayBkZXRlcm1pbmVzIHRoZSBwb2ludCBmcm9tIHdoaWNoIHRvIGFwcGx5IGEgcmlnaHQgc2hpZnQsIGFuZAorcGFkZGluZyBpbmNsdWRlcyBUQUJzIG9wdGltYWxseSBhY2NvcmRpbmcgdG8gJ3RzJyBhbmQgJ2V0Jy4gVGhlIExIUyBvZiB0aGUKK2Jsb2NrIGRldGVybWluZXMgdGhlIHBvaW50IHVwdG8gd2hpY2ggdG8gc2hpZnQgbGVmdC4KKyAgICBOb3RlOiB2XzwgcGFkZGluZyBpcyBidWdneSBpZiB0aGUgVmlzdWFsIEJsb2NrIHN0YXJ0cyBhbmQgZW5kcyBpbiB0aGUgc2FtZQorICAgIFRBQi4gKFZpbSA1LjRjKS4KK1NlZSB8dl9iXz5fZXhhbXBsZXwuCitTZWUgfHZfYl88X2V4YW1wbGV8LgorCitWaXN1YWwtYmxvY2sgUmVwbGFjZQkJCQkJCSp2X2JfcioKK0V2ZXJ5IHNjcmVlbiBjaGFyIGluIHRoZSBoaWdobGlnaHRlZCByZWdpb24gaXMgcmVwbGFjZWQgd2l0aCB0aGUgc2FtZSBjaGFyLCBpZQorVEFCcyBhcmUgc3BsaXQgYW5kIHRoZSB2aXJ0dWFsIHdoaXRlc3BhY2UgaXMgcmVwbGFjZWQsIG1haW50YWluaW5nIHNjcmVlbgorbGF5b3V0LgorU2VlIHx2X2Jfcl9leGFtcGxlfC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFJlcGVhdGluZwkJCQkJCSp2aXN1YWwtcmVwZWF0KgorCitXaGVuIHJlcGVhdGluZyBhIFZpc3VhbCBtb2RlIG9wZXJhdG9yLCB0aGUgb3BlcmF0b3Igd2lsbCBiZSBhcHBsaWVkIHRvIHRoZQorc2FtZSBhbW91bnQgb2YgdGV4dCBhcyB0aGUgbGFzdCB0aW1lOgorLSBMaW5ld2lzZSBWaXN1YWwgbW9kZTogVGhlIHNhbWUgbnVtYmVyIG9mIGxpbmVzLgorLSBCbG9ja3dpc2UgVmlzdWFsIG1vZGU6IFRoZSBzYW1lIG51bWJlciBvZiBsaW5lcyBhbmQgY29sdW1ucy4KKy0gTm9ybWFsIFZpc3VhbCBtb2RlIHdpdGhpbiBvbmUgbGluZTogVGhlIHNhbWUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCistIE5vcm1hbCBWaXN1YWwgbW9kZSB3aXRoIHNldmVyYWwgbGluZXM6IFRoZSBzYW1lIG51bWJlciBvZiBsaW5lcywgaW4gdGhlCisgIGxhc3QgbGluZSB0aGUgc2FtZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhcyBpbiB0aGUgbGFzdCBsaW5lIHRoZSBsYXN0IHRpbWUuCitUaGUgc3RhcnQgb2YgdGhlIHRleHQgaXMgdGhlIEN1cnNvciBwb3NpdGlvbi4gIElmIHRoZSAiJCIgY29tbWFuZCB3YXMgdXNlZCBhcworb25lIG9mIHRoZSBsYXN0IGNvbW1hbmRzIHRvIGV4dGVuZCB0aGUgaGlnaGxpZ2h0ZWQgdGV4dCwgdGhlIHJlcGVhdGluZyB3aWxsCitiZSBhcHBsaWVkIHVwIHRvIHRoZSByaWdodG1vc3QgY29sdW1uIG9mIHRoZSBsb25nZXN0IGxpbmUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBFeGFtcGxlcwkJCQkJCSp2aXN1YWwtZXhhbXBsZXMqCisKKwkJCQkJCQkqOnZpc3VhbF9leGFtcGxlKgorQ3VycmVudGx5IHRoZSAiOiIgY29tbWFuZCB3b3JrcyBvbiB3aG9sZSBsaW5lcyBvbmx5LiAgV2hlbiB5b3Ugc2VsZWN0IHBhcnQgb2YKK2EgbGluZSwgZG9pbmcgc29tZXRoaW5nIGxpa2UgIjohZGF0ZSIgd2lsbCByZXBsYWNlIHRoZSB3aG9sZSBsaW5lLiAgSWYgeW91Cit3YW50IG9ubHkgcGFydCBvZiB0aGUgbGluZSB0byBiZSByZXBsYWNlZCB5b3Ugd2lsbCBoYXZlIHRvIG1ha2UgYSBtYXBwaW5nIGZvcgoraXQuICBJbiBhIGZ1dHVyZSByZWxlYXNlICI6IiBtYXkgd29yayBvbiBwYXJ0aWFsIGxpbmVzLgorCitIZXJlIGlzIGFuIGV4YW1wbGUsIHRvIHJlcGxhY2UgdGhlIHNlbGVjdGVkIHRleHQgd2l0aCB0aGUgb3V0cHV0IG9mICJkYXRlIjogPgorCTp2bWFwIF9hIDxFc2M+YD5hPENSPjxFc2M+YDxpPENSPjxFc2M+ISFkYXRlPENSPmtKSgorCisoSW4gdGhlIDw+IG5vdGF0aW9uIHw8PnwsIHdoZW4gdHlwaW5nIGl0IHlvdSBzaG91bGQgdHlwZSBpdCBsaXRlcmFsbHk7IHlvdQorbmVlZCB0byByZW1vdmUgdGhlICdCJyBhbmQgJzwnIGZsYWdzIGZyb20gJ2Nwb3B0aW9ucycpCisKK1doYXQgdGhpcyBkb2VzIGlzOgorPEVzYz4JCXN0b3AgVmlzdWFsIG1vZGUKK2A+CQlnbyB0byB0aGUgZW5kIG9mIHRoZSBWaXN1YWwgYXJlYQorYTxDUj48RXNjPglicmVhayB0aGUgbGluZSBhZnRlciB0aGUgVmlzdWFsIGFyZWEKK2A8CQlqdW1wIHRvIHRoZSBzdGFydCBvZiB0aGUgVmlzdWFsIGFyZWEKK2k8Q1I+PEVzYz4JYnJlYWsgdGhlIGxpbmUgYmVmb3JlIHRoZSBWaXN1YWwgYXJlYQorISFkYXRlPENSPglmaWx0ZXIgdGhlIFZpc3VhbCB0ZXh0IHRocm91Z2ggZGF0ZQora0pKCQlKb2luIHRoZSBsaW5lcyBiYWNrIHRvZ2V0aGVyCisKKwkJCQkJCQkqdmlzdWFsLXNlYXJjaCoKK0hlcmUgaXMgYW4gaWRlYSBmb3IgYSBtYXBwaW5nIHRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gZG8gYSBzZWFyY2ggZm9yIHRoZQorc2VsZWN0ZWQgdGV4dDogPgorCTp2bWFwIFggeS88Qy1SPiI8Q1I+CisKKyhJbiB0aGUgPD4gbm90YXRpb24gfDw+fCwgd2hlbiB0eXBpbmcgaXQgeW91IHNob3VsZCB0eXBlIGl0IGxpdGVyYWxseTsgeW91CituZWVkIHRvIHJlbW92ZSB0aGUgJ0InIGFuZCAnPCcgZmxhZ3MgZnJvbSAnY3BvcHRpb25zJykKKworTm90ZSB0aGF0IHNwZWNpYWwgY2hhcmFjdGVycyAobGlrZSAnLicgYW5kICcqJykgd2lsbCBjYXVzZSBwcm9ibGVtcy4KKworVmlzdWFsLWJsb2NrIEV4YW1wbGVzCQkJCQkqYmxvY2t3aXNlLWV4YW1wbGVzKgorV2l0aCB0aGUgZm9sbG93aW5nIHRleHQsIEkgd2lsbCBpbmRpY2F0ZSB0aGUgY29tbWFuZHMgdG8gcHJvZHVjZSB0aGUgYmxvY2sgYW5kCit0aGUgcmVzdWx0cyBiZWxvdy4gSW4gYWxsIGNhc2VzLCB0aGUgY3Vyc29yIGJlZ2lucyBvbiB0aGUgJ2EnIGluIHRoZSBmaXJzdAorbGluZSBpZiB0aGUgdGVzdCB0ZXh0LgorVGhlIGZvbGxvd2luZyBtb2RlbGluZSBzZXR0aW5ncyBhcmUgYXNzdW1lZCAiOnRzPTg6c3c9NDoiLgorCitJdCB3aWxsIGJlIGhlbHBmdWwgdG8KKzpzZXQgaGxzCisvPFRBQj4KK3doZXJlIDxUQUI+IGlzIGEgcmVhbCBUQUIuIFRoaXMgaGVscHMgdmlzdWFsaXNlIHRoZSBvcGVyYXRpb25zLgorCitUaGUgdGVzdCB0ZXh0IGlzOgorCithYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorYWJjCQlkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorYWJjZGVmICBnaGkJCWprbG1ub3BxcnN0dXZ3eHl6CithYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorCisxLiBmbzxDLXY+M2pJU1RSSU5HPEVTQz4JCQkJCSp2X2JfSV9leGFtcGxlKgorCithYmNkZWZnaGlqa2xtblNUUklOR29wcXJzdHV2d3h5egorYWJjCSAgICAgIFNUUklORyAgZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZiAgZ2hpICAgU1RSSU5HCWprbG1ub3BxcnN0dXZ3eHl6CithYmNkZWZnaGlqa2xtblNUUklOR29wcXJzdHV2d3h5egorCisyLiBmbzxDLXY+M2okQVNUUklORzxFU0M+CQkJCQkqdl9iX0FfZXhhbXBsZSoKKworYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpTVFJJTkcKK2FiYwkJZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpTVFJJTkcKK2FiY2RlZiAgZ2hpCQlqa2xtbm9wcXJzdHV2d3h5elNUUklORworYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpTVFJJTkcKKworMy4gZm88Qy12PjNqM2w8Li4JCQkJCQkqdl9iXzxfZXhhbXBsZSoKKworYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2FiYwkgICAgICBkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorYWJjZGVmICBnaGkgICBqa2xtbm9wcXJzdHV2d3h5egorYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKworNC4gZm88Qy12PjNqPi4uCQkJCQkJCSp2X2JfPl9leGFtcGxlKgorCithYmNkZWZnaGlqa2xtbgkJICBvcHFyc3R1dnd4eXoKK2FiYwkJCSAgICBkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorYWJjZGVmICBnaGkJCQkgICAgamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZmdoaWprbG1uCQkgIG9wcXJzdHV2d3h5egorCis1LiBmbzxDLXY+NWwzanJYCQkJCQkJKnZfYl9yX2V4YW1wbGUqCisKK2FiY2RlZmdoaWprbG1uWFhYWFhYdXZ3eHl6CithYmMJICAgICAgWFhYWFhYaGlqa2xtbm9wcXJzdHV2d3h5egorYWJjZGVmICBnaGkgICBYWFhYWFggICAgamtsbW5vcHFyc3R1dnd4eXoKK2FiY2RlZmdoaWprbG1uWFhYWFhYdXZ3eHl6CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOC4gU2VsZWN0IG1vZGUJCQkJCQkqU2VsZWN0KiAqU2VsZWN0LW1vZGUqCisKK1NlbGVjdCBtb2RlIGxvb2tzIGxpa2UgVmlzdWFsIG1vZGUsIGJ1dCB0aGUgY29tbWFuZHMgYWNjZXB0ZWQgYXJlIHF1aXRlCitkaWZmZXJlbnQuICBUaGlzIHJlc2VtYmxlcyB0aGUgc2VsZWN0aW9uIG1vZGUgaW4gTWljcm9zb2Z0IFdpbmRvd3MuCitXaGVuIHRoZSAnc2hvd21vZGUnIG9wdGlvbiBpcyBzZXQsICItLSBTRUxFQ1QgLS0iIGlzIHNob3duIGluIHRoZSBsYXN0IGxpbmUuCisKK0VudGVyaW5nIFNlbGVjdCBtb2RlOgorLSBVc2luZyB0aGUgbW91c2UgdG8gc2VsZWN0IGFuIGFyZWEsIGFuZCAnc2VsZWN0bW9kZScgY29udGFpbnMgIm1vdXNlIi4KKyAgJ21vdXNlJyBtdXN0IGFsc28gY29udGFpbiBhIGZsYWcgZm9yIHRoZSBjdXJyZW50IG1vZGUuCistIFVzaW5nIGEgbm9uLXByaW50YWJsZSBtb3ZlbWVudCBjb21tYW5kLCB3aXRoIHRoZSBTaGlmdCBrZXkgcHJlc3NlZCwgYW5kCisgICdzZWxlY3Rtb2RlJyBjb250YWlucyAia2V5Ii4gIEZvciBleGFtcGxlOiA8Uy1MZWZ0PiBhbmQgPFMtRW5kPi4gICdrZXltb2RlbCcKKyAgbXVzdCBhbHNvIGNvbnRhaW4gInN0YXJ0c2VsIi4KKy0gVXNpbmcgInYiLCAiViIgb3IgQ1RSTC1WIGNvbW1hbmQsIGFuZCAnc2VsZWN0bW9kZScgY29udGFpbnMgImNtZCIuCistIFVzaW5nICJnaCIsICJnSCIgb3IgImdfQ1RSTC1IIiBjb21tYW5kIGluIE5vcm1hbCBtb2RlLgorLSBGcm9tIFZpc3VhbCBtb2RlLCBwcmVzcyBDVFJMLUcuCQkJKnZfQ1RSTC1HKgorCitDb21tYW5kcyBpbiBTZWxlY3QgbW9kZToKKy0gUHJpbnRhYmxlIGNoYXJhY3RlcnMsIDxOTD4gYW5kIDxDUj4gY2F1c2UgdGhlIHNlbGVjdGlvbiB0byBiZSBkZWxldGVkLCBhbmQKKyAgVmltIGVudGVycyBJbnNlcnQgbW9kZS4gIFRoZSB0eXBlZCBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuCistIE5vbi1wcmludGFibGUgbW92ZW1lbnQgY29tbWFuZHMsIHdpdGggdGhlIFNoaWZ0IGtleSBwcmVzc2VkLCBleHRlbmQgdGhlCisgIHNlbGVjdGlvbi4gICdrZXltb2RlbCcgbXVzdCBpbmNsdWRlICJzdGFydHNlbCIuCistIE5vbi1wcmludGFibGUgbW92ZW1lbnQgY29tbWFuZHMsIHdpdGggdGhlIFNoaWZ0IGtleSBOT1QgcHJlc3NlZCwgc3RvcCBTZWxlY3QKKyAgbW9kZS4gICdrZXltb2RlbCcgbXVzdCBpbmNsdWRlICJzdG9wc2VsIi4KKy0gRVNDIHN0b3BzIFNlbGVjdCBtb2RlLgorLSBDVFJMLU8gc3dpdGNoZXMgdG8gVmlzdWFsIG1vZGUgZm9yIHRoZSBkdXJhdGlvbiBvZiBvbmUgY29tbWFuZC4gKnZfQ1RSTC1PKgorLSBDVFJMLUcgc3dpdGNoZXMgdG8gVmlzdWFsIG1vZGUuCisKK090aGVyd2lzZSwgdHlwZWQgY2hhcmFjdGVycyBhcmUgaGFuZGxlZCBhcyBpbiBWaXN1YWwgbW9kZS4KKworV2hlbiB1c2luZyBhbiBvcGVyYXRvciBpbiBTZWxlY3QgbW9kZSwgYW5kIHRoZSBzZWxlY3Rpb24gaXMgbGluZXdpc2UsIHRoZQorc2VsZWN0ZWQgbGluZXMgYXJlIG9wZXJhdGVkIHVwb24sIGJ1dCBsaWtlIGluIGNoYXJhY3Rlcndpc2Ugc2VsZWN0aW9uLiAgRm9yCitleGFtcGxlLCB3aGVuIGEgd2hvbGUgbGluZSBpcyBkZWxldGVkLCBpdCBjYW4gbGF0ZXIgYmUgcGFzdGVkIGhhbGZ3YXkgYSBsaW5lLgorCisKK01hcHBpbmdzIGFuZCBtZW51cyBpbiBTZWxlY3QgbW9kZS4JCQkqU2VsZWN0LW1vZGUtbWFwcGluZyoKKworSW4gU2VsZWN0IG1vZGUgdGhlIG1hcHBpbmdzIGFuZCBtZW51cyBvZiBWaXN1YWwgbW9kZSBhcmUgdXNlZC4gIEJlZm9yZSBpdCBpcworZXhlY3V0ZWQsIFZpbSBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIHRvIFZpc3VhbCBtb2RlLCBzbyB0aGF0IHRoZSBzYW1lCitiZWhhdmlvciBhcyBpbiBWaXN1YWwgbW9kZSBpcyBlZmZlY3RpdmUuCisKK0FmdGVyIHRoZSBtYXBwaW5nIG9yIG1lbnUgZmluaXNoZXMsIHRoZSBzZWxlY3Rpb24gaXMgZW5hYmxlZCBhZ2FpbiBhbmQgU2VsZWN0Cittb2RlIGVudGVyZWQsIHVubGVzcyB0aGUgc2VsZWN0ZWQgYXJlYSB3YXMgZGVsZXRlZCwgYW5vdGhlciBidWZmZXIgYmVjYW1lCit0aGUgY3VycmVudCBvbmUgb3IgdGhlIHdpbmRvdyBsYXlvdXQgd2FzIGNoYW5nZWQuCisKK1doZW4gYSBjaGFyYWN0ZXIgd2FzIHR5cGVkIHRoYXQgY2F1c2VzIHRoZSBzZWxlY3Rpb24gdG8gYmUgZGVsZXRlZCBhbmQgSW5zZXJ0Cittb2RlIHN0YXJ0ZWQsIEluc2VydCBtb2RlIG1hcHBpbmdzIGFyZSBhcHBsaWVkIHRvIHRoaXMgY2hhcmFjdGVyLiAgVGhpcyBtYXkKK2NhdXNlIHNvbWUgY29uZnVzaW9uLCBiZWNhdXNlIGl0IG1lYW5zIEluc2VydCBtb2RlIG1hcHBpbmdzIGFwcGx5IHRvIGEKK2NoYXJhY3RlciB0eXBlZCBpbiBTZWxlY3QgbW9kZS4gIExhbmd1YWdlIG1hcHBpbmdzIGFwcGx5IGFzIHdlbGwuCisKKwkJCQkJCQkqZ1YqICp2X2dWKgorZ1YJCQlBdm9pZCB0aGUgYXV0b21hdGljIHJlc2VsZWN0aW9uIG9mIHRoZSBWaXN1YWwgYXJlYQorCQkJYWZ0ZXIgYSBTZWxlY3QgbW9kZSBtYXBwaW5nIG9yIG1lbnUgaGFzIGZpbmlzaGVkLgorCQkJUHV0IHRoaXMganVzdCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgbWFwcGluZyBvciBtZW51LgorCQkJQXQgbGVhc3QgaXQgc2hvdWxkIGJlIGFmdGVyIGFueSBvcGVyYXRpb25zIG9uIHRoZQorCQkJc2VsZWN0aW9uLgorCisJCQkJCQkJKmdoKgorZ2gJCQlTdGFydCBTZWxlY3QgbW9kZSwgY2hhcmFjdGVyd2lzZS4gIFRoaXMgaXMgbGlrZSAidiIsCisJCQlidXQgc3RhcnRzIFNlbGVjdCBtb2RlIGluc3RlYWQgb2YgVmlzdWFsIG1vZGUuCisJCQlNbmVtb25pYzogImdldCBoaWdobGlnaHRlZCIuCisKKwkJCQkJCQkqZ0gqCitnSAkJCVN0YXJ0IFNlbGVjdCBtb2RlLCBsaW5ld2lzZS4gIFRoaXMgaXMgbGlrZSAiViIsCisJCQlidXQgc3RhcnRzIFNlbGVjdCBtb2RlIGluc3RlYWQgb2YgVmlzdWFsIG1vZGUuCisJCQlNbmVtb25pYzogImdldCBIaWdobGlnaHRlZCIuCisKKwkJCQkJCQkqZ19DVFJMLUgqCitnIENUUkwtSAkJU3RhcnQgU2VsZWN0IG1vZGUsIGJsb2Nrd2lzZS4gIFRoaXMgaXMgbGlrZSBDVFJMLVYsCisJCQlidXQgc3RhcnRzIFNlbGVjdCBtb2RlIGluc3RlYWQgb2YgVmlzdWFsIG1vZGUuCisJCQlNbmVtb25pYzogImdldCBIaWdobGlnaHRlZCIuCisKKyB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy93aW5kb3dzLnR4dCBiL3J1bnRpbWUvZG9jL3dpbmRvd3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjM3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2RvYy93aW5kb3dzLnR4dApAQCAtMCwwICsxLDExMjMgQEAKKyp3aW5kb3dzLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBBcHIgMjkKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCitFZGl0aW5nIHdpdGggbXVsdGlwbGUgd2luZG93cyBhbmQgYnVmZmVycy4JCSp3aW5kb3dzKiAqYnVmZmVycyoKKworVGhlIGNvbW1hbmRzIHdoaWNoIGhhdmUgYmVlbiBhZGRlZCB0byB1c2UgbXVsdGlwbGUgd2luZG93cyBhbmQgYnVmZmVycyBhcmUKK2V4cGxhaW5lZCBoZXJlLiAgQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgZXhwbGFuYXRpb25zIGZvciBjb21tYW5kcyB0aGF0IHdvcmsKK2RpZmZlcmVudGx5IHdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG1vcmUgdGhhbiBvbmUgd2luZG93LgorCitUaGUgYmFzaWNzIGFyZSBleHBsYWluZWQgaW4gY2hhcHRlciA3IGFuZCA4IG9mIHRoZSB1c2VyIG1hbnVhbCB8dXNyXzA3LnR4dHwKK3x1c3JfMDgudHh0fC4KKworMS4gIEludHJvZHVjdGlvbgkJCQl8d2luZG93cy1pbnRyb3wKKzIuICBTdGFydGluZyBWaW0JCQkJfHdpbmRvd3Mtc3RhcnRpbmd8CiszLiAgT3BlbmluZyBhbmQgY2xvc2luZyBhIHdpbmRvdwkJfG9wZW5pbmctd2luZG93fAorNC4gIE1vdmluZyBjdXJzb3IgdG8gb3RoZXIgd2luZG93cwkJfHdpbmRvdy1tb3ZlLWN1cnNvcnwKKzUuICBNb3Zpbmcgd2luZG93cyBhcm91bmQJCQl8d2luZG93LW1vdmluZ3wKKzYuICBXaW5kb3cgcmVzaXppbmcJCQkJfHdpbmRvdy1yZXNpemV8Cis3LiAgQXJndW1lbnQgYW5kIGJ1ZmZlciBsaXN0IGNvbW1hbmRzCQl8YnVmZmVyLWxpc3R8Cis4LiAgRG8gYSBjb21tYW5kIGluIGFsbCBidWZmZXJzIG9yIHdpbmRvd3MJfGxpc3QtcmVwZWF0fAorOS4gIFRhZyBvciBmaWxlIG5hbWUgdW5kZXIgdGhlIGN1cnNvcgkJfHdpbmRvdy10YWd8CisxMC4gVGhlIHByZXZpZXcgd2luZG93CQkJCXxwcmV2aWV3LXdpbmRvd3wKKzExLiBVc2luZyBoaWRkZW4gYnVmZmVycwkJCXxidWZmZXItaGlkZGVufAorMTIuIFNwZWNpYWwga2luZHMgb2YgYnVmZmVycwkJCXxzcGVjaWFsLWJ1ZmZlcnN8CisKK3tWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KK3tub3QgYWJsZSB0byB1c2UgbXVsdGlwbGUgd2luZG93cyB3aGVuIHRoZSB8K3dpbmRvd3N8IGZlYXR1cmUgd2FzIGRpc2FibGVkIGF0Citjb21waWxlIHRpbWV9Cit7bm90IGFibGUgdG8gdXNlIHZlcnRpY2FsbHkgc3BsaXQgd2luZG93cyB3aGVuIHRoZSB8K3ZlcnRzcGxpdHwgZmVhdHVyZSB3YXMKK2Rpc2FibGVkIGF0IGNvbXBpbGUgdGltZX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJbnRyb2R1Y3Rpb24JCQkJCQkqd2luZG93cy1pbnRybyoKKworQSB3aW5kb3cgaXMgYSB2aWV3cG9ydCBvbnRvIGEgYnVmZmVyLiAgWW91IGNhbiB1c2UgbXVsdGlwbGUgd2luZG93cyBvbiBvbmUKK2J1ZmZlciwgb3Igc2V2ZXJhbCB3aW5kb3dzIG9uIGRpZmZlcmVudCBidWZmZXJzLgorCitBIGJ1ZmZlciBpcyBhIGZpbGUgbG9hZGVkIGludG8gbWVtb3J5IGZvciBlZGl0aW5nLiAgVGhlIG9yaWdpbmFsIGZpbGUgcmVtYWlucwordW5jaGFuZ2VkIHVudGlsIHlvdSB3cml0ZSB0aGUgYnVmZmVyIHRvIHRoZSBmaWxlLgorCitBIGJ1ZmZlciBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczoKKworCQkJCQkJCSphY3RpdmUtYnVmZmVyKgorYWN0aXZlOiAgIFRoZSBidWZmZXIgaXMgZGlzcGxheWVkIGluIGEgd2luZG93LiAgSWYgdGhlcmUgaXMgYSBmaWxlIGZvciB0aGlzCisJICBidWZmZXIsIGl0IGhhcyBiZWVuIHJlYWQgaW50byB0aGUgYnVmZmVyLiAgVGhlIGJ1ZmZlciBtYXkgaGF2ZSBiZWVuCisJICBtb2RpZmllZCBzaW5jZSB0aGVuIGFuZCB0aHVzIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBmaWxlLgorCQkJCQkJCSpoaWRkZW4tYnVmZmVyKgoraGlkZGVuOiAgIFRoZSBidWZmZXIgaXMgbm90IGRpc3BsYXllZC4gIElmIHRoZXJlIGlzIGEgZmlsZSBmb3IgdGhpcyBidWZmZXIsIGl0CisJICBoYXMgYmVlbiByZWFkIGludG8gdGhlIGJ1ZmZlci4gIE90aGVyd2lzZSBpdCdzIHRoZSBzYW1lIGFzIGFuIGFjdGl2ZQorCSAgYnVmZmVyLCB5b3UganVzdCBjYW4ndCBzZWUgaXQuCisJCQkJCQkJKmluYWN0aXZlLWJ1ZmZlcioKK2luYWN0aXZlOiBUaGUgYnVmZmVyIGlzIG5vdCBkaXNwbGF5ZWQgYW5kIGRvZXMgbm90IGNvbnRhaW4gYW55dGhpbmcuICBPcHRpb25zCisJICBmb3IgdGhlIGJ1ZmZlciBhcmUgcmVtZW1iZXJlZCBpZiB0aGUgZmlsZSB3YXMgb25jZSBsb2FkZWQuICBJdCBjYW4KKwkgIGNvbnRhaW4gbWFya3MgZnJvbSB0aGUgfHZpbWluZm98IGZpbGUuICBCdXQgdGhlIGJ1ZmZlciBkb2Vzbid0CisJICBjb250YWluIHRleHQuCisKK0luIGEgdGFibGU6CisKK3N0YXRlCQlkaXNwbGF5ZWQJbG9hZGVkCQkiOmJ1ZmZlcnMiICB+CisJCWluIHdpbmRvdwkJCXNob3dzCSAgICB+CithY3RpdmUJCSAgeWVzCQkgeWVzCQkgICdhJworaGlkZGVuCQkgIG5vCQkgeWVzCQkgICdoJworaW5hY3RpdmUJICBubwkJIG5vCQkgICcgJworCitOb3RlOiBBbGwgQ1RSTC1XIGNvbW1hbmRzIGNhbiBhbHNvIGJlIGV4ZWN1dGVkIHdpdGggfDp3aW5jbWR8LCBmb3IgdGhvc2UKK3BsYWNlcyB3aGVyZSBhIE5vcm1hbCBtb2RlIGNvbW1hbmQgY2FuJ3QgYmUgdXNlZCBvciBpcyBpbmNvbnZlbmllbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gU3RhcnRpbmcgVmltCQkJCQkJKndpbmRvd3Mtc3RhcnRpbmcqCisKK0J5IGRlZmF1bHQsIFZpbSBzdGFydHMgd2l0aCBvbmUgd2luZG93LCBqdXN0IGxpa2UgVmkuCisKK1RoZSAiLW8iIGFuZCAiLU8iIGFyZ3VtZW50cyB0byBWaW0gY2FuIGJlIHVzZWQgdG8gb3BlbiBhIHdpbmRvdyBmb3IgZWFjaCBmaWxlCitpbiB0aGUgYXJndW1lbnQgbGlzdC4gIFRoZSAiLW8iIGFyZ3VtZW50IHdpbGwgc3BsaXQgdGhlIHdpbmRvd3MgaG9yaXpvbnRhbGx5OwordGhlICItTyIgYXJndW1lbnQgd2lsbCBzcGxpdCB0aGUgd2luZG93cyB2ZXJ0aWNhbGx5LiAgSWYgYm90aCAiLW8iIGFuZCAiLU8iCithcmUgZ2l2ZW4sIHRoZSBsYXN0IG9uZSBlbmNvdW50ZXJlZCB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzcGxpdAorb3JpZW50YXRpb24uICBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIG9wZW4gdGhyZWUgd2luZG93cywgc3BsaXQgaG9yaXpvbnRhbGx5OiA+CisJdmltIC1vIGZpbGUxIGZpbGUyIGZpbGUzCisKKyItb04iLCB3aGVyZSBOIGlzIGEgZGVjaW1hbCBudW1iZXIsIG9wZW5zIE4gd2luZG93cyBzcGxpdCBob3Jpem9udGFsbHkuICBJZgordGhlcmUgYXJlIG1vcmUgZmlsZSBuYW1lcyB0aGFuIHdpbmRvd3MsIG9ubHkgTiB3aW5kb3dzIGFyZSBvcGVuZWQgYW5kIHNvbWUKK2ZpbGVzIGRvIG5vdCBnZXQgYSB3aW5kb3cuICBJZiB0aGVyZSBhcmUgbW9yZSB3aW5kb3dzIHRoYW4gZmlsZSBuYW1lcywgdGhlCitsYXN0IGZldyB3aW5kb3dzIHdpbGwgYmUgZWRpdGluZyBlbXB0eSBidWZmZXJzLiAgU2ltaWxhcmx5LCAiLU9OIiBvcGVucyBOCit3aW5kb3dzIHNwbGl0IHZlcnRpY2FsbHksIHdpdGggdGhlIHNhbWUgcmVzdHJpY3Rpb25zLgorCitJZiB0aGVyZSBhcmUgbWFueSBmaWxlIG5hbWVzLCB0aGUgd2luZG93cyB3aWxsIGJlY29tZSB2ZXJ5IHNtYWxsLiAgWW91IG1pZ2h0Cit3YW50IHRvIHNldCB0aGUgJ3dpbmhlaWdodCcgYW5kL29yICd3aW53aWR0aCcgb3B0aW9ucyB0byBjcmVhdGUgYSB3b3JrYWJsZQorc2l0dWF0aW9uLgorCitCdWYvV2luIEVudGVyL0xlYXZlIHxhdXRvY29tbWFuZHxzIGFyZSBub3QgZXhlY3V0ZWQgd2hlbiBvcGVuaW5nIHRoZSBuZXcKK3dpbmRvd3MgYW5kIHJlYWRpbmcgdGhlIGZpbGVzLCB0aGF0J3Mgb25seSBkb25lIHdoZW4gdGhleSBhcmUgcmVhbGx5IGVudGVyZWQuCisKKwkJCQkJCQkqc3RhdHVzLWxpbmUqCitBIHN0YXR1cyBsaW5lIHdpbGwgYmUgdXNlZCB0byBzZXBhcmF0ZSB3aW5kb3dzLiAgVGhlICdsYXN0c3RhdHVzJyBvcHRpb24gdGVsbHMKK3doZW4gdGhlIGxhc3Qgd2luZG93IGFsc28gaGFzIGEgc3RhdHVzIGxpbmU6CisJJ2xhc3RzdGF0dXMnID0gMAluZXZlciBhIHN0YXR1cyBsaW5lCisJJ2xhc3RzdGF0dXMnID0gMQlzdGF0dXMgbGluZSBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHdpbmRvdworCSdsYXN0c3RhdHVzJyA9IDIJYWx3YXlzIGEgc3RhdHVzIGxpbmUKKworWW91IGNhbiBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGF0dXMgbGluZSB3aXRoIHRoZSAnc3RhdHVzbGluZScgb3B0aW9uLgorCitOb3JtYWxseSwgaW52ZXJzaW9uIGlzIHVzZWQgdG8gZGlzcGxheSB0aGUgc3RhdHVzIGxpbmUuICBUaGlzIGNhbiBiZSBjaGFuZ2VkCit3aXRoIHRoZSAncycgY2hhcmFjdGVyIGluIHRoZSAnaGlnaGxpZ2h0JyBvcHRpb24uICBGb3IgZXhhbXBsZSwgInNiIiBzZXRzIGl0IHRvCitib2xkIGNoYXJhY3RlcnMuICBJZiBubyBoaWdobGlnaHRpbmcgaXMgdXNlZCBmb3IgdGhlIHN0YXR1cyBsaW5lICgic24iKSwgdGhlCisnXicgY2hhcmFjdGVyIGlzIHVzZWQgZm9yIHRoZSBjdXJyZW50IHdpbmRvdywgYW5kICc9JyBmb3Igb3RoZXIgd2luZG93cy4gIElmCit0aGUgbW91c2UgaXMgc3VwcG9ydGVkIGFuZCBlbmFibGVkIHdpdGggdGhlICdtb3VzZScgb3B0aW9uLCBhIHN0YXR1cyBsaW5lIGNhbgorYmUgZHJhZ2dlZCB0byByZXNpemUgd2luZG93cy4KKworTm90ZTogSWYgeW91IGV4cGVjdCB5b3VyIHN0YXR1cyBsaW5lIHRvIGJlIGluIHJldmVyc2UgdmlkZW8gYW5kIGl0IGlzbid0LAorY2hlY2sgaWYgdGhlICdoaWdobGlnaHQnIG9wdGlvbiBjb250YWlucyAic2kiLiAgSW4gdmVyc2lvbiAzLjAsIHRoaXMgbWVhbnQgdG8KK2ludmVydCB0aGUgc3RhdHVzIGxpbmUuICBOb3cgaXQgc2hvdWxkIGJlICJzciIsIHJldmVyc2UgdGhlIHN0YXR1cyBsaW5lLCBhcworInNpIiBub3cgc3RhbmRzIGZvciBpdGFsaWMhICBJZiBpdGFsaWMgaXMgbm90IGF2YWlsYWJsZSBvbiB5b3VyIHRlcm1pbmFsLCB0aGUKK3N0YXR1cyBsaW5lIGlzIGludmVydGVkIGFueXdheTsgeW91IHdpbGwgb25seSBzZWUgdGhpcyBwcm9ibGVtIG9uIHRlcm1pbmFscwordGhhdCBoYXZlIHRlcm1jYXAgY29kZXMgZm9yIGl0YWxpY3MuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gT3BlbmluZyBhbmQgY2xvc2luZyBhIHdpbmRvdwkJCQkqb3BlbmluZy13aW5kb3cqICpFMzYqCisKK0NUUkwtVyBzCQkJCQkJKkNUUkwtV19zKgorQ1RSTC1XIFMJCQkJCQkqQ1RSTC1XX1MqCitDVFJMLVcgQ1RSTC1TCQkJCQkJKkNUUkwtV19DVFJMLVMqCis6W05dc3BbbGl0XSBbKytvcHRdIFsrY21kXQkJCQkqOnNwKiAqOnNwbGl0KgorCQlTcGxpdCBjdXJyZW50IHdpbmRvdyBpbiB0d28uICBUaGUgcmVzdWx0IGlzIHR3byB2aWV3cG9ydHMgb24KKwkJdGhlIHNhbWUgZmlsZS4gIE1ha2UgbmV3IHdpbmRvdyBOIGhpZ2ggKGRlZmF1bHQgaXMgdG8gdXNlIGhhbGYKKwkJdGhlIGhlaWdodCBvZiB0aGUgY3VycmVudCB3aW5kb3cpLiAgUmVkdWNlcyB0aGUgY3VycmVudCB3aW5kb3cKKwkJaGVpZ2h0IHRvIGNyZWF0ZSByb29tIChhbmQgb3RoZXJzLCBpZiB0aGUgJ2VxdWFsYWx3YXlzJyBvcHRpb24KKwkJaXMgc2V0IGFuZCAnZWFkaXJlY3Rpb24nIGlzbid0ICJob3IiKS4KKwkJTm90ZTogQ1RSTC1TIGRvZXMgbm90IHdvcmsgb24gYWxsIHRlcm1pbmFscyBhbmQgbWlnaHQgYmxvY2sKKwkJZnVydGhlciBpbnB1dCwgdXNlIENUUkwtUSB0byBnZXQgZ29pbmcgYWdhaW4uCisJCUFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKworQ1RSTC1XIENUUkwtVgkJCQkJCSpDVFJMLVdfQ1RSTC1WKgorQ1RSTC1XIHYJCQkJCQkqQ1RSTC1XX3YqCis6W05ddnNbcGxpdF0gWysrb3B0XSBbK2NtZF0gW2ZpbGVdCQkJKjp2cyogKjp2c3BsaXQqCisJCUxpa2UgfDpzcGxpdHwsIGJ1dCBzcGxpdCB2ZXJ0aWNhbGx5LiAgSWYgJ2VxdWFsYWx3YXlzJyBpcyBzZXQKKwkJYW5kICdlYWRpcmVjdGlvbicgaXNuJ3QgInZlciIgdGhlIHdpbmRvd3Mgd2lsbCBiZSBzcHJlYWQgb3V0CisJCWhvcml6b250YWxseSwgdW5sZXNzIGEgd2lkdGggd2FzIHNwZWNpZmllZC4KKwkJTm90ZTogSW4gb3RoZXIgcGxhY2VzIENUUkwtUSBkb2VzIHRoZSBzYW1lIGFzIENUUkwtViwgYnV0IGhlcmUKKwkJaXQgZG9lc24ndCEKKworQ1RSTC1XIG4JCQkJCQkqQ1RSTC1XX24qCitDVFJMLVcgQ1RSTF9OCQkJCQkJKkNUUkwtV19DVFJMLU4qCis6W05dbmV3IFsrK29wdF0gWytjbWRdCQkJCQkqOm5ldyoKKwkJQ3JlYXRlIGEgbmV3IHdpbmRvdyBhbmQgc3RhcnQgZWRpdGluZyBhbiBlbXB0eSBmaWxlIGluIGl0LgorCQlNYWtlIG5ldyB3aW5kb3cgTiBoaWdoIChkZWZhdWx0IGlzIHRvIHVzZSBoYWxmIHRoZSBleGlzdGluZworCQloZWlnaHQpLiAgUmVkdWNlcyB0aGUgY3VycmVudCB3aW5kb3cgaGVpZ2h0IHRvIGNyZWF0ZSByb29tIChhbmQKKwkJb3RoZXJzLCBpZiB0aGUgJ2VxdWFsYWx3YXlzJyBvcHRpb24gaXMgc2V0IGFuZCAnZWFkaXJlY3Rpb24nCisJCWlzbid0ICJob3IiKS4KKwkJQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCQlJZiAnZmlsZWZvcm1hdHMnIGlzIG5vdCBlbXB0eSwgdGhlIGZpcnN0IGZvcm1hdCBnaXZlbiB3aWxsIGJlCisJCXVzZWQgZm9yIHRoZSBuZXcgYnVmZmVyLiAgSWYgJ2ZpbGVmb3JtYXRzJyBpcyBlbXB0eSwgdGhlCisJCSdmaWxlZm9ybWF0JyBvZiB0aGUgY3VycmVudCBidWZmZXIgaXMgdXNlZC4gIFRoaXMgY2FuIGJlCisJCW92ZXJyaWRkZW4gd2l0aCB0aGUgfCsrb3B0fCBhcmd1bWVudC4KKwkJQXV0b2NvbW1hbmRzIGFyZSBleGVjdXRlZCBpbiB0aGlzIG9yZGVyOgorCQkxLiBXaW5MZWF2ZSBmb3IgdGhlIGN1cnJlbnQgd2luZG93CisJCTIuIFdpbkVudGVyIGZvciB0aGUgbmV3IHdpbmRvdworCQkzLiBCdWZMZWF2ZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyCisJCTQuIEJ1ZkVudGVyIGZvciB0aGUgbmV3IGJ1ZmZlcgorCQlUaGlzIGJlaGF2ZXMgbGlrZSBhICI6c3BsaXQiIGZpcnN0LCBhbmQgdGhlbiBhICI6ZSIgY29tbWFuZC4KKworOltOXXZuZVt3XSBbKytvcHRdIFsrY21kXSBbZmlsZV0JCQkqOnZuZSogKjp2bmV3KgorCQlMaWtlIHw6bmV3fCwgYnV0IHNwbGl0IHZlcnRpY2FsbHkuICBJZiAnZXF1YWxhbHdheXMnIGlzIHNldAorCQlhbmQgJ2VhZGlyZWN0aW9uJyBpc24ndCAidmVyIiB0aGUgd2luZG93cyB3aWxsIGJlIHNwcmVhZCBvdXQKKwkJaG9yaXpvbnRhbGx5LCB1bmxlc3MgYSB3aWR0aCB3YXMgc3BlY2lmaWVkLgorCis6W05dbmV3IFsrK29wdF0gWytjbWRdIHtmaWxlfQorOltOXXNwW2xpdF0gWysrb3B0XSBbK2NtZF0ge2ZpbGV9CQkJKjpzcGxpdF9mKgorCQlDcmVhdGUgYSBuZXcgd2luZG93IGFuZCBzdGFydCBlZGl0aW5nIGZpbGUge2ZpbGV9IGluIGl0LgorCQlJZiBbK2NtZF0gaXMgZ2l2ZW4sIGV4ZWN1dGUgdGhlIGNvbW1hbmQgd2hlbiB0aGUgZmlsZSBoYXMgYmVlbgorCQlsb2FkZWQgfCtjbWR8LgorCQlBbHNvIHNlZSB8KytvcHR8LgorCQlNYWtlIG5ldyB3aW5kb3cgTiBoaWdoIChkZWZhdWx0IGlzIHRvIHVzZSBoYWxmIHRoZSBleGlzdGluZworCQloZWlnaHQpLiAgUmVkdWNlcyB0aGUgY3VycmVudCB3aW5kb3cgaGVpZ2h0IHRvIGNyZWF0ZSByb29tCisJCShhbmQgb3RoZXJzLCBpZiB0aGUgJ2VxdWFsYWx3YXlzJyBvcHRpb24gaXMgc2V0KS4KKworOltOXXN2W2lld10gWysrb3B0XSBbK2NtZF0ge2ZpbGV9CQkqOnN2KiAqOnN2aWV3KiAqc3BsaXR2aWV3KgorCQlTYW1lIGFzICI6c3BsaXQiLCBidXQgc2V0ICdyZWFkb25seScgb3B0aW9uIGZvciB0aGlzIGJ1ZmZlci4KKworOltOXXNmW2luZF0gWysrb3B0XSBbK2NtZF0ge2ZpbGV9CQkqOnNmKiAqOnNmaW5kKiAqc3BsaXRmaW5kKgorCQlTYW1lIGFzICI6c3BsaXQiLCBidXQgc2VhcmNoIGZvciB7ZmlsZX0gaW4gJ3BhdGgnLiAgRG9lc24ndAorCQlzcGxpdCBpZiB7ZmlsZX0gaXMgbm90IGZvdW5kLgorCitDVFJMLVcgQ1RSTC1eCQkJCQkqQ1RSTC1XX0NUUkwtXiogKkNUUkwtV19eKgorQ1RSTC1XIF4JRG9lcyAiOnNwbGl0ICMiLCBzcGxpdCB3aW5kb3cgaW4gdHdvIGFuZCBlZGl0IGFsdGVybmF0ZSBmaWxlLgorCQlXaGVuIGEgY291bnQgaXMgZ2l2ZW4sIGl0IGJlY29tZXMgIjpzcGxpdCAjTiIsIHNwbGl0IHdpbmRvdworCQlhbmQgZWRpdCBidWZmZXIgTi4KKworTm90ZSB0aGF0IHRoZSAnc3BsaXRiZWxvdycgYW5kICdzcGxpdHJpZ2h0JyBvcHRpb25zIGluZmx1ZW5jZSB3aGVyZSBhIG5ldword2luZG93IHdpbGwgYXBwZWFyLgorCisJCQkJCQkqOnZlcnQqICo6dmVydGljYWwqCis6dmVydFtpY2FsXSB7Y21kfQorCQlFeGVjdXRlIHtjbWR9LiAgSWYgaXQgY29udGFpbnMgYSBjb21tYW5kIHRoYXQgc3BsaXRzIGEgd2luZG93LAorCQlpdCB3aWxsIGJlIHNwbGl0IHZlcnRpY2FsbHkuCisKKzpsZWZ0YVtib3ZlXSB7Y21kfQkJCQkqOmxlZnRhKiAqOmxlZnRhYm92ZSoKKzphYm9bdmVsZWZ0XSB7Y21kfQkJCQkqOmFibyogKjphYm92ZWxlZnQqCisJCUV4ZWN1dGUge2NtZH0uICBJZiBpdCBjb250YWlucyBhIGNvbW1hbmQgdGhhdCBzcGxpdHMgYSB3aW5kb3csCisJCWl0IHdpbGwgYmUgb3BlbmVkIGxlZnQgKHZlcnRpY2FsIHNwbGl0KSBvciBhYm92ZSAoaG9yaXpvbnRhbAorCQlzcGxpdCkgdGhlIGN1cnJlbnQgd2luZG93LiAgT3ZlcnJ1bGVzICdzcGxpdGJlbG93JyBhbmQKKwkJJ3NwbGl0cmlnaHQnLgorCis6cmlnaHRiW2Vsb3ddIHtjbWR9CQkJCSo6cmlnaHRiKiAqOnJpZ2h0YmVsb3cqCis6YmVsW293cmlnaHRdIHtjbWR9CQkJCSo6YmVsKiAqOmJlbG93cmlnaHQqCisJCUV4ZWN1dGUge2NtZH0uICBJZiBpdCBjb250YWlucyBhIGNvbW1hbmQgdGhhdCBzcGxpdHMgYSB3aW5kb3csCisJCWl0IHdpbGwgYmUgb3BlbmVkIHJpZ2h0ICh2ZXJ0aWNhbCBzcGxpdCkgb3IgYmVsb3cgKGhvcml6b250YWwKKwkJc3BsaXQpIHRoZSBjdXJyZW50IHdpbmRvdy4gIE92ZXJydWxlcyAnc3BsaXRiZWxvdycgYW5kCisJCSdzcGxpdHJpZ2h0Jy4KKworCQkJCQkJKjp0b3BsZWZ0KiAqRTQ0MioKKzp0b1twbGVmdF0ge2NtZH0KKwkJRXhlY3V0ZSB7Y21kfS4gIElmIGl0IGNvbnRhaW5zIGEgY29tbWFuZCB0aGF0IHNwbGl0cyBhIHdpbmRvdywKKwkJaXQgd2lsbCBhcHBlYXIgYXQgdGhlIHRvcCBhbmQgb2NjdXB5IHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBWaW0KKwkJd2luZG93LiAgV2hlbiB0aGUgc3BsaXQgaXMgdmVydGljYWwgdGhlIHdpbmRvdyBhcHBlYXJzIGF0IHRoZQorCQlmYXIgbGVmdCBhbmQgb2NjdXBpZXMgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSBWaW0gd2luZG93LgorCisJCQkJCQkqOmJvdHJpZ2h0KgorOmJvW3RyaWdodF0ge2NtZH0KKwkJRXhlY3V0ZSB7Y21kfS4gIElmIGl0IGNvbnRhaW5zIGEgY29tbWFuZCB0aGF0IHNwbGl0cyBhIHdpbmRvdywKKwkJaXQgd2lsbCBhcHBlYXIgYXQgdGhlIGJvdHRvbSBhbmQgb2NjdXB5IHRoZSBmdWxsIHdpZHRoIG9mIHRoZQorCQlWaW0gd2luZG93LiAgV2hlbiB0aGUgc3BsaXQgaXMgdmVydGljYWwgdGhlIHdpbmRvdyBhcHBlYXJzIGF0CisJCXRoZSBmYXIgcmlnaHQgYW5kIG9jY3VwaWVzIHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgVmltIHdpbmRvdy4KKworVGhlc2UgY29tbWFuZCBtb2RpZmllcnMgY2FuIGJlIGNvbWJpbmVkIHRvIG1ha2UgYSB2ZXJ0aWNhbGx5IHNwbGl0IHdpbmRvdworb2NjdXB5IHRoZSBmdWxsIGhlaWdodC4gIEV4YW1wbGU6ID4KKwk6dmVydGljYWwgdG9wbGVmdCBlZGl0IHRhZ3MKK09wZW5zIGEgdmVydGljYWxseSBzcGxpdCwgZnVsbC1oZWlnaHQgd2luZG93IG9uIHRoZSAidGFncyIgZmlsZSBhdCB0aGUgZmFyCitsZWZ0IG9mIHRoZSBWaW0gd2luZG93LgorCisKK0Nsb3NpbmcgYSB3aW5kb3cKKy0tLS0tLS0tLS0tLS0tLS0KKworQ1RSTC1XIHEJCQkJCQkqQ1RSTC1XX3EqCitDVFJMLVcgQ1RSTC1RCQkJCQkJKkNUUkwtV19DVFJMLVEqCis6cVt1aXRdCQlRdWl0IGN1cnJlbnQgd2luZG93LiAgV2hlbiBxdWl0dGluZyB0aGUgbGFzdCB3aW5kb3cgKG5vdAorCQljb3VudGluZyBhIGhlbHAgd2luZG93KSwgZXhpdCBWaW0uCisJCVdoZW4gJ2hpZGRlbicgaXMgc2V0LCBhbmQgdGhlcmUgaXMgb25seSBvbmUgd2luZG93IGZvciB0aGUKKwkJY3VycmVudCBidWZmZXIsIGl0IGJlY29tZXMgaGlkZGVuLgorCQlXaGVuICdoaWRkZW4nIGlzIG5vdCBzZXQsIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSB3aW5kb3cgZm9yIHRoZQorCQljdXJyZW50IGJ1ZmZlciwgYW5kIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQsIHRoZSBjb21tYW5kIGZhaWxzLgorCQkoTm90ZTogQ1RSTC1RIGRvZXMgbm90IHdvcmsgb24gYWxsIHRlcm1pbmFscykKKworOnFbdWl0XSEJUXVpdCBjdXJyZW50IHdpbmRvdy4gIElmIHRoaXMgd2FzIHRoZSBsYXN0IHdpbmRvdyBmb3IgYSBidWZmZXIsCisJCWFueSBjaGFuZ2VzIHRvIHRoYXQgYnVmZmVyIGFyZSBsb3N0LiAgV2hlbiBxdWl0dGluZyB0aGUgbGFzdAorCQl3aW5kb3cgKG5vdCBjb3VudGluZyBoZWxwIHdpbmRvd3MpLCBleGl0IFZpbS4gIFRoZSBjb250ZW50cyBvZgorCQl0aGUgYnVmZmVyIGFyZSBsb3N0LCBldmVuIHdoZW4gJ2hpZGRlbicgaXMgc2V0LgorCitDVFJMLVcgYwkJCQkJKkNUUkwtV19jKiAqOmNsbyogKjpjbG9zZSoKKzpjbG9bc2VdWyFdCUNsb3NlIGN1cnJlbnQgd2luZG93LiAgV2hlbiB0aGUgJ2hpZGRlbicgb3B0aW9uIGlzIHNldCwgb3IKKwkJd2hlbiB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGFuZCB0aGUgWyFdIGlzIHVzZWQsIHRoZSBidWZmZXIKKwkJYmVjb21lcyBoaWRkZW4gKHVubGVzcyB0aGVyZSBpcyBhbm90aGVyIHdpbmRvdyBlZGl0aW5nIGl0KS4KKwkJVGhpcyBjb21tYW5kIGZhaWxzIHdoZW46CQkJKkU0NDQqCisJCS0gVGhlcmUgaXMgb25seSBvbmUgd2luZG93IG9uIHRoZSBzY3JlZW4uCisJCS0gV2hlbiAnaGlkZGVuJyBpcyBub3Qgc2V0LCBbIV0gaXMgbm90IHVzZWQsIHRoZSBidWZmZXIgaGFzCisJCSAgY2hhbmdlcywgYW5kIHRoZXJlIGlzIG5vIG90aGVyIHdpbmRvdyBvbiB0aGlzIGJ1ZmZlci4KKwkJQ2hhbmdlcyB0byB0aGUgYnVmZmVyIGFyZSBub3Qgd3JpdHRlbiBhbmQgd29uJ3QgZ2V0IGxvc3QsIHNvCisJCXRoaXMgaXMgYSAic2FmZSIgY29tbWFuZC4KKworQ1RSTC1XIENUUkwtQwkJCQkJCSpDVFJMLVdfQ1RSTC1DKgorCQlZb3UgbWlnaHQgaGF2ZSBleHBlY3RlZCB0aGF0IENUUkwtVyBDVFJMLUMgY2xvc2VzIHRoZSBjdXJyZW50CisJCXdpbmRvdywgYnV0IHRoYXQgZG9lcyBub3Qgd29yaywgYmVjYXVzZSB0aGUgQ1RSTC1DIGNhbmNlbHMgdGhlCisJCWNvbW1hbmQuCisKKwkJCQkJCQkqOmhpZGUqCis6aGlkW2VdCQlRdWl0IGN1cnJlbnQgd2luZG93LCB1bmxlc3MgaXQgaXMgdGhlIGxhc3Qgd2luZG93IG9uIHRoZQorCQlzY3JlZW4uICBUaGUgYnVmZmVyIGJlY29tZXMgaGlkZGVuICh1bmxlc3MgdGhlcmUgaXMgYW5vdGhlcgorCQl3aW5kb3cgZWRpdGluZyBpdCBvciAnYnVmaGlkZGVuJyBpcyAidW5sb2FkIiBvciAiZGVsZXRlIikuCisJCVRoZSB2YWx1ZSBvZiAnaGlkZGVuJyBpcyBpcnJlbGV2YW50IGZvciB0aGlzIGNvbW1hbmQuCisJCUNoYW5nZXMgdG8gdGhlIGJ1ZmZlciBhcmUgbm90IHdyaXR0ZW4gYW5kIHdvbid0IGdldCBsb3N0LCBzbworCQl0aGlzIGlzIGEgInNhZmUiIGNvbW1hbmQuCisKKzpoaWRbZV0ge2NtZH0JRXhlY3V0ZSB7Y21kfSB3aXRoICdoaWRkZW4nIGlzIHNldC4gIFRoZSBwcmV2aW91cyB2YWx1ZSBvZgorCQknaGlkZGVuJyBpcyByZXN0b3JlZCBhZnRlciB7Y21kfSBoYXMgYmVlbiBleGVjdXRlZC4KKwkJRXhhbXBsZTogPgorCQkgICAgOmhpZGUgZWRpdCBNYWtlZmlsZQorPAkJVGhpcyB3aWxsIGVkaXQgIk1ha2VmaWxlIiwgYW5kIGhpZGUgdGhlIGN1cnJlbnQgYnVmZmVyIGlmIGl0CisJCWhhcyBhbnkgY2hhbmdlcy4KKworQ1RSTC1XIG8JCQkJCQkqQ1RSTC1XX28qICpFNDQ1KgorQ1RSTC1XIENUUkwtTwkJCQkJKkNUUkwtV19DVFJMLU8qICo6b24qICo6b25seSoKKzpvbltseV1bIV0JTWFrZSB0aGUgY3VycmVudCB3aW5kb3cgdGhlIG9ubHkgb25lIG9uIHRoZSBzY3JlZW4uICBBbGwgb3RoZXIKKwkJd2luZG93cyBhcmUgY2xvc2VkLgorCQlXaGVuIHRoZSAnaGlkZGVuJyBvcHRpb24gaXMgc2V0LCBhbGwgYnVmZmVycyBpbiBjbG9zZWQgd2luZG93cworCQliZWNvbWUgaGlkZGVuLgorCQlXaGVuICdoaWRkZW4nIGlzIG5vdCBzZXQsIGFuZCB0aGUgJ2F1dG93cml0ZScgb3B0aW9uIGlzIHNldCwKKwkJbW9kaWZpZWQgYnVmZmVycyBhcmUgd3JpdHRlbi4gIE90aGVyd2lzZSwgd2luZG93cyB0aGF0IGhhdmUKKwkJYnVmZmVycyB0aGF0IGFyZSBtb2RpZmllZCBhcmUgbm90IHJlbW92ZWQsIHVubGVzcyB0aGUgWyFdIGlzCisJCWdpdmVuLCB0aGVuIHRoZXkgYmVjb21lIGhpZGRlbi4gIEJ1dCBtb2RpZmllZCBidWZmZXJzIGFyZQorCQluZXZlciBhYmFuZG9uZWQsIHNvIGNoYW5nZXMgY2Fubm90IGdldCBsb3N0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuIE1vdmluZyBjdXJzb3IgdG8gb3RoZXIgd2luZG93cwkJCSp3aW5kb3ctbW92ZS1jdXJzb3IqCisKK0NUUkwtVyA8RG93bj4JCQkJCSpDVFJMLVdfPERvd24+KgorQ1RSTC1XIENUUkwtSgkJCQkJKkNUUkwtV19DVFJMLUoqICpDVFJMLVdfaioKK0NUUkwtVyBqCU1vdmUgY3Vyc29yIHRvIE50aCB3aW5kb3cgYmVsb3cgY3VycmVudCBvbmUuICBVc2VzIHRoZSBjdXJzb3IKKwkJcG9zaXRpb24gdG8gc2VsZWN0IGJldHdlZW4gYWx0ZXJuYXRpdmVzLgorCitDVFJMLVcgPFVwPgkJCQkJKkNUUkwtV188VXA+KgorQ1RSTC1XIENUUkwtSwkJCQkJKkNUUkwtV19DVFJMLUsqICpDVFJMLVdfayoKK0NUUkwtVyBrCU1vdmUgY3Vyc29yIHRvIE50aCB3aW5kb3cgYWJvdmUgY3VycmVudCBvbmUuICBVc2VzIHRoZSBjdXJzb3IKKwkJcG9zaXRpb24gdG8gc2VsZWN0IGJldHdlZW4gYWx0ZXJuYXRpdmVzLgorCitDVFJMLVcgPExlZnQ+CQkJCQkqQ1RSTC1XXzxMZWZ0PioKK0NUUkwtVyBDVFJMLUgJCQkJCSpDVFJMLVdfQ1RSTC1IKgorQ1RSTC1XIDxCUz4JCQkJCSpDVFJMLVdfPEJTPiogKkNUUkwtV19oKgorQ1RSTC1XIGgJTW92ZSBjdXJzb3IgdG8gTnRoIHdpbmRvdyBsZWZ0IG9mIGN1cnJlbnQgb25lLiAgVXNlcyB0aGUKKwkJY3Vyc29yIHBvc2l0aW9uIHRvIHNlbGVjdCBiZXR3ZWVuIGFsdGVybmF0aXZlcy4KKworQ1RSTC1XIDxSaWdodD4JCQkJCSpDVFJMLVdfPFJpZ2h0PioKK0NUUkwtVyBDVFJMLUwJCQkJCSpDVFJMLVdfQ1RSTC1MKiAqQ1RSTC1XX2wqCitDVFJMLVcgbAlNb3ZlIGN1cnNvciB0byBOdGggd2luZG93IHJpZ2h0IG9mIGN1cnJlbnQgb25lLiAgVXNlcyB0aGUKKwkJY3Vyc29yIHBvc2l0aW9uIHRvIHNlbGVjdCBiZXR3ZWVuIGFsdGVybmF0aXZlcy4KKworQ1RSTC1XIHcJCQkJCSpDVFJMLVdfdyogKkNUUkwtV19DVFJMLVcqCitDVFJMLVcgQ1RSTC1XCVdpdGhvdXQgY291bnQ6IG1vdmUgY3Vyc29yIHRvIHdpbmRvdyBiZWxvdy9yaWdodCBvZiB0aGUKKwkJY3VycmVudCBvbmUuICBJZiB0aGVyZSBpcyBubyB3aW5kb3cgYmVsb3cgb3IgcmlnaHQsIGdvIHRvCisJCXRvcC1sZWZ0IHdpbmRvdy4KKwkJV2l0aCBjb3VudDogZ28gdG8gTnRoIHdpbmRvdyAod2luZG93cyBhcmUgbnVtYmVyZWQgZnJvbQorCQl0b3AtbGVmdCB0byBib3R0b20tcmlnaHQpLiAgVG8gb2J0YWluIHRoZSB3aW5kb3cgbnVtYmVyIHNlZQorCQl8YnVmd2lubnIoKXwgYW5kIHx3aW5ucigpfC4KKworCQkJCQkJKkNUUkwtV19XKgorQ1RSTC1XIFcJV2l0aG91dCBjb3VudDogbW92ZSBjdXJzb3IgdG8gd2luZG93IGFib3ZlL2xlZnQgb2YgY3VycmVudAorCQlvbmUuICBJZiB0aGVyZSBpcyBubyB3aW5kb3cgYWJvdmUgb3IgbGVmdCwgZ28gdG8gYm90dG9tLXJpZ2h0CisJCXdpbmRvdy4gIFdpdGggY291bnQ6IGdvIHRvIE50aCB3aW5kb3cgKHdpbmRvd3MgYXJlIG51bWJlcmVkCisJCWZyb20gdG9wLWxlZnQgdG8gYm90dG9tLXJpZ2h0KS4KKworQ1RSTC1XIHQJCQkJCSpDVFJMLVdfdCogKkNUUkwtV19DVFJMLVQqCitDVFJMLVcgQ1RSTC1UCU1vdmUgY3Vyc29yIHRvIHRvcC1sZWZ0IHdpbmRvdy4KKworQ1RSTC1XIGIJCQkJCSpDVFJMLVdfYiogKkNUUkwtV19DVFJMLUIqCitDVFJMLVcgQ1RSTC1CCU1vdmUgY3Vyc29yIHRvIGJvdHRvbS1yaWdodCB3aW5kb3cuCisKK0NUUkwtVyBwCQkJCQkqQ1RSTC1XX3AqICpDVFJMLVdfQ1RSTC1QKgorQ1RSTC1XIENUUkwtUAlHbyB0byBwcmV2aW91cyAobGFzdCBhY2Nlc3NlZCkgd2luZG93LgorCisJCQkJCQkqQ1RSTC1XX1AqICpFNDQxKgorQ1RSTC1XIFAJR28gdG8gcHJldmlldyB3aW5kb3cuICBXaGVuIHRoZXJlIGlzIG5vIHByZXZpZXcgd2luZG93IHRoaXMgaXMKKwkJYW4gZXJyb3IuCisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwgZmVhdHVyZX0KKworSWYgVmlzdWFsIG1vZGUgaXMgYWN0aXZlIGFuZCB0aGUgbmV3IHdpbmRvdyBpcyBub3QgZm9yIHRoZSBzYW1lIGJ1ZmZlciwgdGhlCitWaXN1YWwgbW9kZSBpcyBlbmRlZC4gIElmIHRoZSB3aW5kb3cgaXMgb24gdGhlIHNhbWUgYnVmZmVyLCB0aGUgY3Vyc29yCitwb3NpdGlvbiBpcyBzZXQgdG8ga2VlcCB0aGUgc2FtZSBWaXN1YWwgYXJlYSBzZWxlY3RlZC4KKworCQkJCQkJKjp3aW5jKiAqOndpbmNtZCoKK1RoZXNlIGNvbW1hbmRzIGNhbiBhbHNvIGJlIGV4ZWN1dGVkIHdpdGggIjp3aW5jbWQiOgorCis6W2NvdW50XXdpbmNbbWRdIHthcmd9CisJCUxpa2UgZXhlY3V0aW5nIENUUkwtVyBbY291bnRdIHthcmd9LiAgRXhhbXBsZTogPgorCQkJOndpbmNtZCBqCis8CQlNb3ZlcyB0byB0aGUgd2luZG93IGJlbG93IHRoZSBjdXJyZW50IG9uZS4KKwkJVGhpcyBjb21tYW5kIGlzIHVzZWZ1bCB3aGVuIGEgTm9ybWFsIG1vZGUgY2Fubm90IGJlIHVzZWQgKGZvcgorCQl0aGUgfEN1cnNvckhvbGR8IGF1dG9jb21tYW5kIGV2ZW50KS4gIE9yIHdoZW4gYSBOb3JtYWwgbW9kZQorCQljb21tYW5kIGlzIGluY29udmVuaWVudC4KKwkJVGhlIGNvdW50IGNhbiBhbHNvIGJlIGEgd2luZG93IG51bWJlci4gIEV4YW1wbGU6ID4KKwkJCTpleGUgbnIgLiAid2luY21kIHciCis8CQlUaGlzIGdvZXMgdG8gd2luZG93ICJuciIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gTW92aW5nIHdpbmRvd3MgYXJvdW5kCQkJCSp3aW5kb3ctbW92aW5nKgorCitDVFJMLVcgcgkJCQkqQ1RSTC1XX3IqICpDVFJMLVdfQ1RSTC1SKiAqRTQ0MyoKK0NUUkwtVyBDVFJMLVIJUm90YXRlIHdpbmRvd3MgZG93bndhcmRzL3JpZ2h0d2FyZHMuICBUaGUgZmlyc3Qgd2luZG93IGJlY29tZXMKKwkJdGhlIHNlY29uZCBvbmUsIHRoZSBzZWNvbmQgb25lIGJlY29tZXMgdGhlIHRoaXJkIG9uZSwgZXRjLgorCQlUaGUgbGFzdCB3aW5kb3cgYmVjb21lcyB0aGUgZmlyc3Qgd2luZG93LiAgVGhlIGN1cnNvciByZW1haW5zCisJCWluIHRoZSBzYW1lIHdpbmRvdy4KKwkJVGhpcyBvbmx5IHdvcmtzIHdpdGhpbiB0aGUgcm93IG9yIGNvbHVtbiBvZiB3aW5kb3dzIHRoYXQgdGhlCisJCWN1cnJlbnQgd2luZG93IGlzIGluLgorCisJCQkJCQkqQ1RSTC1XX1IqCitDVFJMLVcgUglSb3RhdGUgd2luZG93cyB1cHdhcmRzL2xlZnR3YXJkcy4gIFRoZSBzZWNvbmQgd2luZG93IGJlY29tZXMKKwkJdGhlIGZpcnN0IG9uZSwgdGhlIHRoaXJkIG9uZSBiZWNvbWVzIHRoZSBzZWNvbmQgb25lLCBldGMuICBUaGUKKwkJZmlyc3Qgd2luZG93IGJlY29tZXMgdGhlIGxhc3Qgd2luZG93LiAgVGhlIGN1cnNvciByZW1haW5zIGluCisJCXRoZSBzYW1lIHdpbmRvdy4KKwkJVGhpcyBvbmx5IHdvcmtzIHdpdGhpbiB0aGUgcm93IG9yIGNvbHVtbiBvZiB3aW5kb3dzIHRoYXQgdGhlCisJCWN1cnJlbnQgd2luZG93IGlzIGluLgorCitDVFJMLVcgeAkJCQkJKkNUUkwtV194KiAqQ1RSTC1XX0NUUkwtWCoKK0NUUkwtVyBDVFJMLVgJV2l0aG91dCBjb3VudDogRXhjaGFuZ2UgY3VycmVudCB3aW5kb3cgd2l0aCBuZXh0IG9uZS4gIElmIHRoZXJlCisJCWlzIG5vIG5leHQgd2luZG93LCBleGNoYW5nZSB3aXRoIHByZXZpb3VzIHdpbmRvdy4KKwkJV2l0aCBjb3VudDogRXhjaGFuZ2UgY3VycmVudCB3aW5kb3cgd2l0aCBOdGggd2luZG93IChmaXJzdAorCQl3aW5kb3cgaXMgMSkuICBUaGUgY3Vyc29yIGlzIHB1dCBpbiB0aGUgb3RoZXIgd2luZG93LgorCQlXaGVuIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHdpbmRvdyBzcGxpdHMgYXJlIG1peGVkLCB0aGUKKwkJZXhjaGFuZ2UgaXMgb25seSBkb25lIGluIHRoZSByb3cgb3IgY29sdW1uIG9mIHdpbmRvd3MgdGhhdCB0aGUKKwkJY3VycmVudCB3aW5kb3cgaXMgaW4uCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSB3aW5kb3cgbGF5b3V0LiAgRm9yIGV4YW1wbGUsCit3aGVuIHRoZXJlIGFyZSB0d28gdmVydGljYWxseSBzcGxpdCB3aW5kb3dzLCBDVFJMLVcgSyB3aWxsIGNoYW5nZSB0aGF0IGluCitob3Jpem9udGFsbHkgc3BsaXQgd2luZG93cy4gIENUUkwtVyBIIGRvZXMgaXQgdGhlIG90aGVyIHdheSBhcm91bmQuCisKKwkJCQkJCSpDVFJMLVdfSyoKK0NUUkwtVyBLCU1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIGJlIGF0IHRoZSB2ZXJ5IHRvcCwgdXNpbmcgdGhlIGZ1bGwKKwkJd2lkdGggb2YgdGhlIHNjcmVlbi4gIFRoaXMgd29ya3MgbGlrZSBjbG9zaW5nIHRoZSBjdXJyZW50CisJCXdpbmRvdyBhbmQgdGhlbiBjcmVhdGluZyBhbm90aGVyIG9uZSB3aXRoICI6dG9wbGVmdCBzcGxpdCIsCisJCWV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IHdpbmRvdyBjb250ZW50cyBpcyB1c2VkIGZvciB0aGUgbmV3CisJCXdpbmRvdy4KKworCQkJCQkJKkNUUkwtV19KKgorQ1RSTC1XIEoJTW92ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gYmUgYXQgdGhlIHZlcnkgYm90dG9tLCB1c2luZyB0aGUKKwkJZnVsbCB3aWR0aCBvZiB0aGUgc2NyZWVuLiAgVGhpcyB3b3JrcyBsaWtlIGNsb3NpbmcgdGhlIGN1cnJlbnQKKwkJd2luZG93IGFuZCB0aGVuIGNyZWF0aW5nIGFub3RoZXIgb25lIHdpdGggIjpib3RyaWdodCBzcGxpdCIsCisJCWV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IHdpbmRvdyBjb250ZW50cyBpcyB1c2VkIGZvciB0aGUgbmV3CisJCXdpbmRvdy4KKworCQkJCQkJKkNUUkwtV19IKgorQ1RSTC1XIEgJTW92ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gYmUgYXQgdGhlIGZhciBsZWZ0LCB1c2luZyB0aGUKKwkJZnVsbCBoZWlnaHQgb2YgdGhlIHNjcmVlbi4gIFRoaXMgd29ya3MgbGlrZSBjbG9zaW5nIHRoZQorCQljdXJyZW50IHdpbmRvdyBhbmQgdGhlbiBjcmVhdGluZyBhbm90aGVyIG9uZSB3aXRoCisJCSI6dmVydCB0b3BsZWZ0IHNwbGl0IiwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgd2luZG93IGNvbnRlbnRzCisJCWlzIHVzZWQgZm9yIHRoZSBuZXcgd2luZG93LgorCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2ZXJ0c3BsaXQgZmVhdHVyZX0KKworCQkJCQkJKkNUUkwtV19MKgorQ1RSTC1XIEwJTW92ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gYmUgYXQgdGhlIGZhciByaWdodCwgdXNpbmcgdGhlIGZ1bGwKKwkJaGVpZ2h0IG9mIHRoZSBzY3JlZW4uICBUaGlzIHdvcmtzIGxpa2UgY2xvc2luZyB0aGUKKwkJY3VycmVudCB3aW5kb3cgYW5kIHRoZW4gY3JlYXRpbmcgYW5vdGhlciBvbmUgd2l0aAorCQkiOnZlcnQgYm90cmlnaHQgc3BsaXQiLCBleGNlcHQgdGhhdCB0aGUgY3VycmVudCB3aW5kb3cKKwkJY29udGVudHMgaXMgdXNlZCBmb3IgdGhlIG5ldyB3aW5kb3cuCisJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3ZlcnRzcGxpdCBmZWF0dXJlfQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzYuIFdpbmRvdyByZXNpemluZwkJCQkJKndpbmRvdy1yZXNpemUqCisKKwkJCQkJCSpDVFJMLVdfPSoKK0NUUkwtVyA9CU1ha2UgYWxsIHdpbmRvd3MgKGFsbW9zdCkgZXF1YWxseSBoaWdoIGFuZCB3aWRlLCBidXQgdXNlCisJCSd3aW5oZWlnaHQnIGFuZCAnd2lud2lkdGgnIGZvciB0aGUgY3VycmVudCB3aW5kb3cuCisKKzpyZXNbaXplXSAtTgkJCQkJKjpyZXMqICo6cmVzaXplKiAqQ1RSTC1XXy0qCitDVFJMLVcgLQlEZWNyZWFzZSBjdXJyZW50IHdpbmRvdyBoZWlnaHQgYnkgTiAoZGVmYXVsdCAxKS4KKwkJSWYgdXNlZCBhZnRlciAndmVydGljYWwnOiBkZWNyZWFzZSB3aWR0aCBieSBOLgorCis6cmVzW2l6ZV0gK04JCQkJCSpDVFJMLVdfKyoKK0NUUkwtVyArCUluY3JlYXNlIGN1cnJlbnQgd2luZG93IGhlaWdodCBieSBOIChkZWZhdWx0IDEpLgorCQlJZiB1c2VkIGFmdGVyICd2ZXJ0aWNhbCc6IGluY3JlYXNlIHdpZHRoIGJ5IE4uCisKKzpyZXNbaXplXSBbTl0KK0NUUkwtVyBDVFJMLV8JCQkJCSpDVFJMLVdfQ1RSTC1fKiAqQ1RSTC1XX18qCitDVFJMLVcgXwlTZXQgY3VycmVudCB3aW5kb3cgaGVpZ2h0IHRvIE4gKGRlZmF1bHQ6IGhpZ2hlc3QgcG9zc2libGUpLgorCit6e25yfTxDUj4JU2V0IGN1cnJlbnQgd2luZG93IGhlaWdodCB0byB7bnJ9LgorCisJCQkJCQkqQ1RSTC1XXzwqCitDVFJMLVcgPAlEZWNyZWFzZSBjdXJyZW50IHdpbmRvdyB3aWR0aCBieSBOIChkZWZhdWx0IDEpLgorCisJCQkJCQkqQ1RSTC1XXz4qCitDVFJMLVcgPglJbmNyZWFzZSBjdXJyZW50IHdpbmRvdyB3aWR0aCBieSBOIChkZWZhdWx0IDEpLgorCis6dmVydGljYWwgcmVzW2l6ZV0gW05dCQkJKjp2ZXJ0aWNhbC1yZXNpemUqICpDVFJMLVdfYmFyKgorQ1RSTC1XIHwJU2V0IGN1cnJlbnQgd2luZG93IHdpZHRoIHRvIE4gKGRlZmF1bHQ6IHdpZGVzdCBwb3NzaWJsZSkuCisKK1lvdSBjYW4gYWxzbyByZXNpemUgYSB3aW5kb3cgYnkgZHJhZ2dpbmcgYSBzdGF0dXMgbGluZSB1cCBvciBkb3duIHdpdGggdGhlCittb3VzZS4gIE9yIGJ5IGRyYWdnaW5nIGEgdmVydGljYWwgc2VwYXJhdG9yIGxpbmUgbGVmdCBvciByaWdodC4gIFRoaXMgb25seQord29ya3MgaWYgdGhlIHZlcnNpb24gb2YgVmltIHRoYXQgaXMgYmVpbmcgdXNlZCBzdXBwb3J0cyB0aGUgbW91c2UgYW5kIHRoZQorJ21vdXNlJyBvcHRpb24gaGFzIGJlZW4gc2V0IHRvIGVuYWJsZSBpdC4KKworVGhlIG9wdGlvbiAnd2luaGVpZ2h0JyAoJ3doJykgaXMgdXNlZCB0byBzZXQgdGhlIG1pbmltYWwgd2luZG93IGhlaWdodCBvZiB0aGUKK2N1cnJlbnQgd2luZG93LiAgVGhpcyBvcHRpb24gaXMgdXNlZCBlYWNoIHRpbWUgYW5vdGhlciB3aW5kb3cgYmVjb21lcyB0aGUKK2N1cnJlbnQgd2luZG93LiAgSWYgdGhlIG9wdGlvbiBpcyAnMCcsIGl0IGlzIGRpc2FibGVkLiAgU2V0ICd3aW5oZWlnaHQnIHRvIGEKK3ZlcnkgbGFyZ2UgdmFsdWUsIGUuZy4sICc5OTk5JywgdG8gbWFrZSB0aGUgY3VycmVudCB3aW5kb3cgYWx3YXlzIGZpbGwgYWxsCithdmFpbGFibGUgc3BhY2UuICBTZXQgaXQgdG8gYSByZWFzb25hYmxlIHZhbHVlLCBlLmcuLCAnMTAnLCB0byBtYWtlIGVkaXRpbmcgaW4KK3RoZSBjdXJyZW50IHdpbmRvdyBjb21mb3J0YWJsZS4KKworVGhlIGVxdWl2YWxlbnQgJ3dpbndpZHRoJyAoJ3dpdycpIG9wdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgbWluaW1hbCB3aWR0aCBvZgordGhlIGN1cnJlbnQgd2luZG93LgorCitXaGVuIHRoZSBvcHRpb24gJ2VxdWFsYWx3YXlzJyAoJ2VhJykgaXMgc2V0LCBhbGwgdGhlIHdpbmRvd3MgYXJlIGF1dG9tYXRpY2FsbHkKK21hZGUgdGhlIHNhbWUgc2l6ZSBhZnRlciBzcGxpdHRpbmcgb3IgY2xvc2luZyBhIHdpbmRvdy4gIElmIHlvdSBkb24ndCBzZXQgdGhpcworb3B0aW9uLCBzcGxpdHRpbmcgYSB3aW5kb3cgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgd2luZG93IGFuZAorbGVhdmUgdGhlIG90aGVyIHdpbmRvd3MgdGhlIHNhbWUuICBXaGVuIGNsb3NpbmcgYSB3aW5kb3csIHRoZSBleHRyYSBsaW5lcyBhcmUKK2dpdmVuIHRvIHRoZSB3aW5kb3cgYWJvdmUgaXQuCisKK1RoZSAnZWFkaXJlY3Rpb24nIG9wdGlvbiBsaW1pdHMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgJ2VxdWFsYWx3YXlzJworb3B0aW9uIGlzIGFwcGxpZWQuICBUaGUgZGVmYXVsdCAiYm90aCIgcmVzaXplcyBpbiBib3RoIGRpcmVjdGlvbnMuICBXaGVuIHRoZQordmFsdWUgaXMgInZlciIgb25seSB0aGUgaGVpZ2h0cyBvZiB3aW5kb3dzIGFyZSBlcXVhbGl6ZWQuICBVc2UgdGhpcyB3aGVuIHlvdQoraGF2ZSBtYW51YWxseSByZXNpemVkIGEgdmVydGljYWxseSBzcGxpdCB3aW5kb3cgYW5kIHdhbnQgdG8ga2VlcCB0aGlzIHdpZHRoLgorTGlrZXdpc2UsICJob3IiIGNhdXNlcyBvbmx5IHRoZSB3aWR0aHMgb2Ygd2luZG93cyB0byBiZSBlcXVhbGl6ZWQuCisKK1RoZSBvcHRpb24gJ2NtZGhlaWdodCcgKCdjaCcpIGlzIHVzZWQgdG8gc2V0IHRoZSBoZWlnaHQgb2YgdGhlIGNvbW1hbmQtbGluZS4KK0lmIHlvdSBhcmUgYW5ub3llZCBieSB0aGUgfGhpdC1lbnRlcnwgcHJvbXB0IGZvciBsb25nIG1lc3NhZ2VzLCBzZXQgdGhpcworb3B0aW9uIHRvIDIgb3IgMy4KKworSWYgdGhlcmUgaXMgb25seSBvbmUgd2luZG93LCByZXNpemluZyB0aGF0IHdpbmRvdyB3aWxsIGFsc28gY2hhbmdlIHRoZSBjb21tYW5kCitsaW5lIGhlaWdodC4gIElmIHRoZXJlIGFyZSBzZXZlcmFsIHdpbmRvd3MsIHJlc2l6aW5nIHRoZSBjdXJyZW50IHdpbmRvdyB3aWxsCithbHNvIGNoYW5nZSB0aGUgaGVpZ2h0IG9mIHRoZSB3aW5kb3cgYmVsb3cgaXQgKGFuZCBzb21ldGltZXMgdGhlIHdpbmRvdyBhYm92ZQoraXQpLgorCitUaGUgbWluaW1hbCBoZWlnaHQgYW5kIHdpZHRoIG9mIGEgd2luZG93IGlzIHNldCB3aXRoICd3aW5taW5oZWlnaHQnIGFuZAorJ3dpbm1pbndpZHRoJy4gIFRoZXNlIGFyZSBoYXJkIHZhbHVlcywgYSB3aW5kb3cgd2lsbCBuZXZlciBiZWNvbWUgc21hbGxlci4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis3LiBBcmd1bWVudCBhbmQgYnVmZmVyIGxpc3QgY29tbWFuZHMJCQkqYnVmZmVyLWxpc3QqCisKKyAgICAgIGFyZ3MgbGlzdAkJICAgICAgIGJ1ZmZlciBsaXN0CSAgIG1lYW5pbmcgfgorMS4gOltOXWFyZ3VtZW50IFtOXQkxMS4gOltOXWJ1ZmZlciBbTl0JdG8gYXJnL2J1ZiBOCisyLiA6W05dbmV4dCBbZmlsZSAuLl0JMTIuIDpbTl1ibmV4dCBbTl0JdG8gTnRoIG5leHQgYXJnL2J1ZgorMy4gOltOXU5leHQgW05dCQkxMy4gOltOXWJOZXh0IFtOXQl0byBOdGggcHJldmlvdXMgYXJnL2J1ZgorNC4gOltOXXByZXZpb3VzCVtOXQkxNC4gOltOXWJwcmV2aW91cyBbTl0JdG8gTnRoIHByZXZpb3VzIGFyZy9idWYKKzUuIDpyZXdpbmQgLyA6Zmlyc3QJMTUuIDpicmV3aW5kIC8gOmJmaXJzdAl0byBmaXJzdCBhcmcvYnVmCis2LiA6bGFzdAkJMTYuIDpibGFzdAkJdG8gbGFzdCBhcmcvYnVmCis3LiA6YWxsCQkJMTcuIDpiYWxsCQllZGl0IGFsbCBhcmdzL2J1ZmZlcnMKKwkJCTE4LiA6dW5oaWRlCQllZGl0IGFsbCBsb2FkZWQgYnVmZmVycworCQkJMTkuIDpbTl1ibW9kIFtOXQl0byBOdGggbW9kaWZpZWQgYnVmCisKKyAgc3BsaXQgJiBhcmdzIGxpc3QJICBzcGxpdCAmIGJ1ZmZlciBsaXN0CSAgIG1lYW5pbmcgfgorMjEuIDpbTl1zYXJndW1lbnQgW05dICAgMzEuIDpbTl1zYnVmZmVyIFtOXQlzcGxpdCArIHRvIGFyZy9idWYgTgorMjIuIDpbTl1zbmV4dCBbZmlsZSAuLl0gMzIuIDpbTl1zYm5leHQgW05dICAgICAgc3BsaXQgKyB0byBOdGggbmV4dCBhcmcvYnVmCisyMy4gOltOXXNOZXh0IFtOXSAgICAgICAzMy4gOltOXXNiTmV4dCBbTl0gICAgICBzcGxpdCArIHRvIE50aCBwcmV2aW91cyBhcmcvYnVmCisyNC4gOltOXXNwcmV2aW91cyBbTl0gICAzNC4gOltOXXNicHJldmlvdXMgW05dICBzcGxpdCArIHRvIE50aCBwcmV2aW91cyBhcmcvYnVmCisyNS4gOnNyZXdpbmQgLyA6c2ZpcnN0CTM1LiA6c2JyZXdpbmQgLyA6c2JmaXJzdCBzcGxpdCArIHRvIGZpcnN0IGFyZy9idWYKKzI2LiA6c2xhc3QJCTM2LiA6c2JsYXN0CQlzcGxpdCArIHRvIGxhc3QgYXJnL2J1ZgorMjcuIDpzYWxsCQkzNzogOnNiYWxsCQllZGl0IGFsbCBhcmdzL2J1ZmZlcnMKKwkJCTM4LiA6c3VuaGlkZQkJZWRpdCBhbGwgbG9hZGVkIGJ1ZmZlcnMKKwkJCTM5LiA6W05dc2Jtb2QgW05dCXNwbGl0ICsgdG8gTnRoIG1vZGlmaWVkIGJ1ZgorCis0MC4gOmFyZ3MJCWxpc3Qgb2YgYXJndW1lbnRzCis0MS4gOmJ1ZmZlcnMJCWxpc3Qgb2YgYnVmZmVycworCitUaGUgbWVhbmluZyBvZiBbTl0gZGVwZW5kcyBvbiB0aGUgY29tbWFuZDoKKyBbTl0gaXMgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gZ28gZm9yd2FyZC9iYWNrd2FyZCBvbiA/MiwgPzMsIGFuZCA/NAorIFtOXSBpcyBhbiBhcmd1bWVudCBudW1iZXIsIGRlZmF1bHRpbmcgdG8gY3VycmVudCBhcmd1bWVudCwgZm9yIDEgYW5kIDIxCisgW05dIGlzIGEgYnVmZmVyIG51bWJlciwgZGVmYXVsdGluZyB0byBjdXJyZW50IGJ1ZmZlciwgZm9yIDExIGFuZCAzMQorIFtOXSBpcyBhIGNvdW50IGZvciAxOSBhbmQgMzkKKworTm90ZTogIjpuZXh0IiBpcyBhbiBleGNlcHRpb24sIGJlY2F1c2UgaXQgbXVzdCBhY2NlcHQgYSBsaXN0IG9mIGZpbGUgbmFtZXMKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggVmkuCisKKworVGhlIGFyZ3VtZW50IGxpc3QgYW5kIG11bHRpcGxlIHdpbmRvd3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBhcmd1bWVudCBsaXN0IGNhbiBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggd2luZG93LgorUmVtZW1iZXIgdGhhdCB3aGVuIGRvaW5nICI6ZSBmaWxlIiwgdGhlIHBvc2l0aW9uIGluIHRoZSBhcmd1bWVudCBsaXN0IHN0YXlzCit0aGUgc2FtZSwgYnV0IHlvdSBhcmUgbm90IGVkaXRpbmcgdGhlIGZpbGUgYXQgdGhhdCBwb3NpdGlvbi4gIFRvIGluZGljYXRlCit0aGlzLCB0aGUgZmlsZSBtZXNzYWdlIChhbmQgdGhlIHRpdGxlLCBpZiB5b3UgaGF2ZSBvbmUpIHNob3dzCisiKGZpbGUgKE4pIG9mIE0pIiwgd2hlcmUgIihOKSIgaXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGZpbGUgbGlzdCwgYW5kCisiTSIgdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgZmlsZSBsaXN0LgorCitBbGwgdGhlIGVudHJpZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QgYXJlIGFkZGVkIHRvIHRoZSBidWZmZXIgbGlzdC4gIFRodXMsIHlvdQorY2FuIGFsc28gZ2V0IHRvIHRoZW0gd2l0aCB0aGUgYnVmZmVyIGxpc3QgY29tbWFuZHMsIGxpa2UgIjpibmV4dCIuCisKKzpbTl1hbFtsXVshXSBbTl0JCQkJKjphbCogKjphbGwqICo6c2FsKiAqOnNhbGwqCis6W05dc2FsW2xdWyFdIFtOXQorCQlSZWFycmFuZ2UgdGhlIHNjcmVlbiB0byBvcGVuIG9uZSB3aW5kb3cgZm9yIGVhY2ggYXJndW1lbnQuCisJCUFsbCBvdGhlciB3aW5kb3dzIGFyZSBjbG9zZWQuICBXaGVuIGEgY291bnQgaXMgZ2l2ZW4sIHRoaXMgaXMKKwkJdGhlIG1heGltdW0gbnVtYmVyIG9mIHdpbmRvd3MgdG8gb3Blbi4KKwkJV2hlbiB0aGUgJ2hpZGRlbicgb3B0aW9uIGlzIHNldCwgYWxsIGJ1ZmZlcnMgaW4gY2xvc2VkIHdpbmRvd3MKKwkJYmVjb21lIGhpZGRlbi4KKwkJV2hlbiAnaGlkZGVuJyBpcyBub3Qgc2V0LCBhbmQgdGhlICdhdXRvd3JpdGUnIG9wdGlvbiBpcyBzZXQsCisJCW1vZGlmaWVkIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4uICBPdGhlcndpc2UsIHdpbmRvd3MgdGhhdCBoYXZlCisJCWJ1ZmZlcnMgdGhhdCBhcmUgbW9kaWZpZWQgYXJlIG5vdCByZW1vdmVkLCB1bmxlc3MgdGhlIFshXSBpcworCQlnaXZlbiwgdGhlbiB0aGV5IGJlY29tZSBoaWRkZW4uICBCdXQgbW9kaWZpZWQgYnVmZmVycyBhcmUKKwkJbmV2ZXIgYWJhbmRvbmVkLCBzbyBjaGFuZ2VzIGNhbm5vdCBnZXQgbG9zdC4KKwkJW05dIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3aW5kb3dzIHRvIG9wZW4uICAnd2luaGVpZ2h0JworCQlhbHNvIGxpbWl0cyB0aGUgbnVtYmVyIG9mIHdpbmRvd3Mgb3BlbmVkICgnd2lud2lkdGgnIGlmCisJCXw6dmVydGljYWx8IHdhcyBwcmVwZW5kZWQpLgorCQlCdWYvV2luIEVudGVyL0xlYXZlIGF1dG9jb21tYW5kcyBhcmUgbm90IGV4ZWN1dGVkIGZvciB0aGUgbmV3CisJCXdpbmRvd3MgaGVyZSwgdGhhdCdzIG9ubHkgZG9uZSB3aGVuIHRoZXkgYXJlIHJlYWxseSBlbnRlcmVkLgorCis6W05dc2Fbcmd1bWVudF1bIV0gWysrb3B0XSBbK2NtZF0gW05dCQkJKjpzYSogKjpzYXJndW1lbnQqCisJCVNob3J0IGZvciAiOnNwbGl0IHwgYXJndW1lbnQgW05dIjogc3BsaXQgd2luZG93IGFuZCBnbyB0byBOdGgKKwkJYXJndW1lbnQuICBCdXQgd2hlbiB0aGVyZSBpcyBubyBzdWNoIGFyZ3VtZW50LCB0aGUgd2luZG93IGlzCisJCW5vdCBzcGxpdC4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKworOltOXXNuW2V4dF1bIV0gWysrb3B0XSBbK2NtZF0gW2ZpbGUgLi5dCQkJKjpzbiogKjpzbmV4dCoKKwkJU2hvcnQgZm9yICI6c3BsaXQgfCBbTl1uZXh0Ijogc3BsaXQgd2luZG93IGFuZCBnbyB0byBOdGggbmV4dAorCQlhcmd1bWVudC4gIEJ1dCB3aGVuIHRoZXJlIGlzIG5vIG5leHQgZmlsZSwgdGhlIHdpbmRvdyBpcyBub3QKKwkJc3BsaXQuICBBbHNvIHNlZSB8KytvcHR8IGFuZCB8K2NtZHwuCisKKzpbTl1zcHJbZXZpb3VzXVshXSBbKytvcHRdIFsrY21kXSBbTl0JCQkqOnNwciogKjpzcHJldmlvdXMqCis6W05dc05bZXh0XVshXSBbKytvcHRdIFsrY21kXSBbTl0JCQkqOnNOKiAqOnNOZXh0KgorCQlTaG9ydCBmb3IgIjpzcGxpdCB8IFtOXU5leHQiOiBzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIE50aAorCQlwcmV2aW91cyBhcmd1bWVudC4gIEJ1dCB3aGVuIHRoZXJlIGlzIG5vIHByZXZpb3VzIGZpbGUsIHRoZQorCQl3aW5kb3cgaXMgbm90IHNwbGl0LiAgQWxzbyBzZWUgfCsrb3B0fCBhbmQgfCtjbWR8LgorCisJCQkJCQkqOnNyZSogKjpzcmV3aW5kKgorOnNyZVt3aW5kXVshXSBbKytvcHRdIFsrY21kXQorCQlTaG9ydCBmb3IgIjpzcGxpdCB8IHJld2luZCI6IHNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gZmlyc3QKKwkJYXJndW1lbnQuICBCdXQgd2hlbiB0aGVyZSBpcyBubyBhcmd1bWVudCBsaXN0LCB0aGUgd2luZG93IGlzCisJCW5vdCBzcGxpdC4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKworCQkJCQkJKjpzZmlyKiAqOnNmaXJzdCoKKzpzZmlyW3N0IFsrK29wdF0gWytjbWRdCisJCVNhbWUgYXMgIjpzcmV3aW5kIi4KKworCQkJCQkJKjpzbGEqICo6c2xhc3QqCis6c2xhW3N0XVshXSBbKytvcHRdIFsrY21kXQorCQlTaG9ydCBmb3IgIjpzcGxpdCB8IGxhc3QiOiBzcGxpdCB3aW5kb3cgYW5kIGdvIHRvIGxhc3QKKwkJYXJndW1lbnQuICBCdXQgd2hlbiB0aGVyZSBpcyBubyBhcmd1bWVudCBsaXN0LCB0aGUgd2luZG93IGlzCisJCW5vdCBzcGxpdC4gIEFsc28gc2VlIHwrK29wdHwgYW5kIHwrY21kfC4KKworCQkJCQkJKjpkciogKjpkcm9wKgorOmRyW29wXSB7ZmlsZX0gLi4KKwkJRWRpdCB0aGUgZmlyc3Qge2ZpbGV9IGluIGEgd2luZG93LgorCQktIElmIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbiBpbiBhIHdpbmRvdyBjaGFuZ2UgdG8gdGhhdAorCQkgIHdpbmRvdy4KKwkJLSBJZiB0aGUgZmlsZSBpcyBub3Qgb3BlbiBpbiBhIHdpbmRvdyBlZGl0IHRoZSBmaWxlIGluIHRoZQorCQkgIGN1cnJlbnQgd2luZG93LiAgSWYgdGhlIGN1cnJlbnQgYnVmZmVyIGNhbid0IGJlIHxhYmFuZG9ufGVkLAorCQkgIHRoZSB3aW5kb3cgaXMgc3BsaXQgZmlyc3QuCisJCVRoZSB8YXJndW1lbnQtbGlzdHwgaXMgc2V0LCBsaWtlIHdpdGggdGhlIHw6bmV4dHwgY29tbWFuZC4KKwkJVGhlIHB1cnBvc2Ugb2YgdGhpcyBjb21tYW5kIGlzIHRoYXQgaXQgY2FuIGJlIHVzZWQgZnJvbSBhCisJCXByb2dyYW0gdGhhdCB3YW50cyBWaW0gdG8gZWRpdCBhbm90aGVyIGZpbGUsIGUuZy4sIGEgZGVidWdnZXIuCisJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlICtndWkgZmVhdHVyZX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis4LiBEbyBhIGNvbW1hbmQgaW4gYWxsIGJ1ZmZlcnMgb3Igd2luZG93cwkJCSpsaXN0LXJlcGVhdCoKKworCQkJCQkJCSo6d2luZG8qCis6d2luZG9bIV0ge2NtZH0JCUV4ZWN1dGUge2NtZH0gaW4gZWFjaCB3aW5kb3cuCisJCQlJdCB3b3JrcyBsaWtlIGRvaW5nIHRoaXM6ID4KKwkJCQlDVFJMLVcgdAorCQkJCTp7Y21kfQorCQkJCUNUUkwtVyB3CisJCQkJOntjbWR9CisJCQkJZXRjLgorPAkJCVdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQgb24gb25lIHdpbmRvdywgZnVydGhlcgorCQkJd2luZG93cyB3aWxsIG5vdCBiZSB2aXNpdGVkLgorCQkJVGhlIGxhc3Qgd2luZG93IChvciB3aGVyZSBhbiBlcnJvciBvY2N1cnJlZCkgYmVjb21lcworCQkJdGhlIGN1cnJlbnQgd2luZG93LgorCQkJe2NtZH0gY2FuIGNvbnRhaW4gJ3wnIHRvIGNvbmNhdGVuYXRlIHNldmVyYWwgY29tbWFuZHMuCisJCQl7Y21kfSBtdXN0IG5vdCBvcGVuIG9yIGNsb3NlIHdpbmRvd3Mgb3IgcmVvcmRlciB0aGVtLgorCQkJe25vdCBpbiBWaX0ge25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtsaXN0Y21kc3wgZmVhdHVyZX0KKwkJCUFsc28gc2VlIHw6YXJnZG98IGFuZCB8OmJ1ZmRvfC4KKworCQkJCQkJCSo6YnVmZG8qCis6YnVmZG9bIV0ge2NtZH0JCUV4ZWN1dGUge2NtZH0gaW4gZWFjaCBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0LgorCQkJSXQgd29ya3MgbGlrZSBkb2luZyB0aGlzOiA+CisJCQkJOmJmaXJzdAorCQkJCTp7Y21kfQorCQkJCTpibmV4dAorCQkJCTp7Y21kfQorCQkJCWV0Yy4KKzwJCQlXaGVuIHRoZSBjdXJyZW50IGZpbGUgY2FuJ3QgYmUgfGFiYW5kb258ZWQgYW5kIHRoZSBbIV0KKwkJCWlzIG5vdCBwcmVzZW50LCB0aGUgY29tbWFuZCBmYWlscy4KKwkJCVdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQgb24gb25lIGJ1ZmZlciwgZnVydGhlcgorCQkJYnVmZmVycyB3aWxsIG5vdCBiZSB2aXNpdGVkLgorCQkJVW5saXN0ZWQgYnVmZmVycyBhcmUgc2tpcHBlZC4KKwkJCVRoZSBsYXN0IGJ1ZmZlciAob3Igd2hlcmUgYW4gZXJyb3Igb2NjdXJyZWQpIGJlY29tZXMKKwkJCXRoZSBjdXJyZW50IGJ1ZmZlci4KKwkJCXtjbWR9IGNhbiBjb250YWluICd8JyB0byBjb25jYXRlbmF0ZSBzZXZlcmFsIGNvbW1hbmRzLgorCQkJe2NtZH0gbXVzdCBub3QgZGVsZXRlIGJ1ZmZlcnMgb3IgYWRkIGJ1ZmZlcnMgdG8gdGhlCisJCQlidWZmZXIgbGlzdC4KKwkJCU5vdGU6IFdoaWxlIHRoaXMgY29tbWFuZCBpcyBleGVjdXRpbmcsIHRoZSBTeW50YXgKKwkJCWF1dG9jb21tYW5kIGV2ZW50IGlzIGRpc2FibGVkIGJ5IGFkZGluZyBpdCB0bworCQkJJ2V2ZW50aWdub3JlJy4gIFRoaXMgY29uc2lkZXJhYmx5IHNwZWVkcyB1cCBlZGl0aW5nCisJCQllYWNoIGJ1ZmZlci4KKwkJCXtub3QgaW4gVml9IHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrbGlzdGNtZHN8IGZlYXR1cmV9CisJCQlBbHNvIHNlZSB8OmFyZ2RvfCBhbmQgfDp3aW5kb3wuCisKK0V4YW1wbGVzOiA+CisKKwk6d2luZG8gc2V0IG5vbGlzdCBub2ZvbGRjb2x1bW4gfCBub3JtYWwgem4KKworVGhpcyByZXNldHMgdGhlICdsaXN0JyBvcHRpb24gYW5kIGRpc2FibGVzIGZvbGRpbmcgaW4gYWxsIHdpbmRvd3MuID4KKworCTpidWZkbyBzZXQgZmlsZWVuY29kaW5nPSB8IHVwZGF0ZQorCitUaGlzIHJlc2V0cyB0aGUgJ2ZpbGVlbmNvZGluZycgaW4gZWFjaCBidWZmZXIgYW5kIHdyaXRlcyBpdCBpZiB0aGlzIGNoYW5nZWQKK3RoZSBidWZmZXIuICBUaGUgcmVzdWx0IGlzIHRoYXQgYWxsIGJ1ZmZlcnMgd2lsbCB1c2UgdGhlICdlbmNvZGluZycgZW5jb2RpbmcKKyhpZiBjb252ZXJzaW9uIHdvcmtzIHByb3Blcmx5KS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis5LiBUYWcgb3IgZmlsZSBuYW1lIHVuZGVyIHRoZSBjdXJzb3IJCQkqd2luZG93LXRhZyoKKworCQkJCQkJCSo6c3RhKiAqOnN0YWcqCis6c3RhW2ddWyFdIFt0YWduYW1lXQorCQlEb2VzICI6dGFnWyFdIFt0YWduYW1lXSIgYW5kIHNwbGl0cyB0aGUgd2luZG93IGZvciB0aGUgZm91bmQKKwkJdGFnLiAgU2VlIGFsc28gfDp0YWd8LgorCitDVFJMLVcgXQkJCQkJKkNUUkwtV19dKiAqQ1RSTC1XX0NUUkwtXSoKK0NUUkwtVyBDVFJMLV0JU3BsaXQgY3VycmVudCB3aW5kb3cgaW4gdHdvLiAgVXNlIGlkZW50aWZpZXIgdW5kZXIgY3Vyc29yIGFzIGEKKwkJdGFnIGFuZCBqdW1wIHRvIGl0IGluIHRoZSBuZXcgdXBwZXIgd2luZG93LiAgTWFrZSBuZXcgd2luZG93IE4KKwkJaGlnaC4KKworCQkJCQkJCSpDVFJMLVdfZ10qCitDVFJMLVcgZyBdCVNwbGl0IGN1cnJlbnQgd2luZG93IGluIHR3by4gIFVzZSBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciBhcyBhCisJCXRhZyBhbmQgcGVyZm9ybSAiOnRzZWxlY3QiIG9uIGl0IGluIHRoZSBuZXcgdXBwZXIgd2luZG93LgorCQlNYWtlIG5ldyB3aW5kb3cgTiBoaWdoLgorCisJCQkJCQkJKkNUUkwtV19nX0NUUkwtXSoKK0NUUkwtVyBnIENUUkwtXQlTcGxpdCBjdXJyZW50IHdpbmRvdyBpbiB0d28uICBVc2UgaWRlbnRpZmllciB1bmRlciBjdXJzb3IgYXMgYQorCQl0YWcgYW5kIHBlcmZvcm0gIjp0anVtcCIgb24gaXQgaW4gdGhlIG5ldyB1cHBlciB3aW5kb3cuICBNYWtlCisJCW5ldyB3aW5kb3cgTiBoaWdoLgorCitDVFJMLVcgZgkJCQkJKkNUUkwtV19mKiAqQ1RSTC1XX0NUUkwtRioKK0NUUkwtVyBDVFJMLUYJU3BsaXQgY3VycmVudCB3aW5kb3cgaW4gdHdvLiAgRWRpdCBmaWxlIG5hbWUgdW5kZXIgY3Vyc29yLgorCQlMaWtlICI6c3BsaXQgXWYiLCBidXQgd2luZG93IGlzbid0IHNwbGl0IGlmIHRoZSBmaWxlIGRvZXMgbm90CisJCWV4aXN0LgorCQlVc2VzIHRoZSAncGF0aCcgdmFyaWFibGUgYXMgYSBsaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyB3aGVyZSB0bworCQlsb29rIGZvciB0aGUgZmlsZS4gIEFsc28gdGhlIHBhdGggZm9yIGN1cnJlbnQgZmlsZSBpcworCQl1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUgbmFtZS4KKwkJSWYgdGhlIG5hbWUgaXMgYSBoeXBlcnRleHQgbGluayB0aGF0IGxvb2tzIGxpa2UKKwkJInR5cGU6Ly9tYWNoaW5lL3BhdGgiLCBvbmx5ICIvcGF0aCIgaXMgdXNlZC4KKwkJSWYgYSBjb3VudCBpcyBnaXZlbiwgdGhlIGNvdW50J3RoIG1hdGNoaW5nIGZpbGUgaXMgZWRpdGVkLgorCQl7bm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K2ZpbGVfaW5fcGF0aHwgZmVhdHVyZSB3YXMgZGlzYWJsZWQKKwkJYXQgY29tcGlsZSB0aW1lfQorCitBbHNvIHNlZSB8Q1RSTC1XX0NUUkwtSXw6IG9wZW4gd2luZG93IGZvciBhbiBpbmNsdWRlZCBmaWxlIHRoYXQgaW5jbHVkZXMKK3RoZSBrZXl3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMTAuIFRoZSBwcmV2aWV3IHdpbmRvdwkJCQkqcHJldmlldy13aW5kb3cqCisKK1RoZSBwcmV2aWV3IHdpbmRvdyBpcyBhIHNwZWNpYWwgd2luZG93IHRvIHNob3cgKHByZXZpZXcpIGFub3RoZXIgZmlsZS4gIEl0IGlzCitub3JtYWxseSBhIHNtYWxsIHdpbmRvdyB1c2VkIHRvIHNob3cgYW4gaW5jbHVkZSBmaWxlIG9yIGRlZmluaXRpb24gb2YgYQorZnVuY3Rpb24uCit7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8IGZlYXR1cmV9CisKK1RoZXJlIGNhbiBiZSBvbmx5IG9uZSBwcmV2aWV3IHdpbmRvdy4gIEl0IGlzIGNyZWF0ZWQgd2l0aCBvbmUgb2YgdGhlIGNvbW1hbmRzCitiZWxvdy4gIFRoZSAncHJldmlld2hlaWdodCcgb3B0aW9uIGNhbiBiZSBzZXQgdG8gc3BlY2lmeSB0aGUgaGVpZ2h0IG9mIHRoZQorcHJldmlldyB3aW5kb3cgd2hlbiBpdCdzIG9wZW5lZC4gIFRoZSAncHJldmlld3dpbmRvdycgb3B0aW9uIGlzIHNldCBpbiB0aGUKK3ByZXZpZXcgd2luZG93IHRvIGJlIGFibGUgdG8gcmVjb2duaXplIGl0LiAgVGhlICd3aW5maXhoZWlnaHQnIG9wdGlvbiBpcyBzZXQKK3RvIGhhdmUgaXQga2VlcCB0aGUgc2FtZSBoZWlnaHQgd2hlbiBvcGVuaW5nL2Nsb3Npbmcgb3RoZXIgd2luZG93cy4KKworCQkJCQkJKjpwdGEqICo6cHRhZyoKKzpwdGFbZ11bIV0gW3RhZ25hbWVdCisJCURvZXMgIjp0YWdbIV0gW3RhZ25hbWVdIiBhbmQgc2hvd3MgdGhlIGZvdW5kIHRhZyBpbiBhCisJCSJQcmV2aWV3IiB3aW5kb3cgd2l0aG91dCBjaGFuZ2luZyB0aGUgY3VycmVudCBidWZmZXIgb3IgY3Vyc29yCisJCXBvc2l0aW9uLiBJZiBhICJQcmV2aWV3IiB3aW5kb3cgYWxyZWFkeSBleGlzdHMsIGl0IGlzIHJlLXVzZWQKKwkJKGxpa2UgYSBoZWxwIHdpbmRvdyBpcykuICBJZiBhIG5ldyBvbmUgaXMgb3BlbmVkLAorCQkncHJldmlld2hlaWdodCcgaXMgdXNlZCBmb3IgdGhlIGhlaWdodCBvZiB0aGUgd2luZG93LiAgIFNlZQorCQlhbHNvIHw6dGFnfC4KKwkJU2VlIGJlbG93IGZvciBhbiBleGFtcGxlLiB8Q3Vyc29ySG9sZC1leGFtcGxlfAorCQlTbWFsbCBkaWZmZXJlbmNlIGZyb20gfDp0YWd8OiBXaGVuIFt0YWduYW1lXSBpcyBlcXVhbCB0byB0aGUKKwkJYWxyZWFkeSBkaXNwbGF5ZWQgdGFnLCB0aGUgcG9zaXRpb24gaW4gdGhlIG1hdGNoaW5nIHRhZyBsaXN0CisJCWlzIG5vdCByZXNldC4gIFRoaXMgbWFrZXMgdGhlIEN1cnNvckhvbGQgZXhhbXBsZSB3b3JrIGFmdGVyIGEKKwkJfDpwdG5leHR8LgorCitDVFJMLVcgegkJCQkJKkNUUkwtV196KgorQ1RSTC1XIENUUkwtWgkJCQkJKkNUUkwtV19DVFJMLVoqICo6cGMqICo6cGNsb3NlKgorOnBjW2xvc2VdWyFdCUNsb3NlIGFueSAiUHJldmlldyIgd2luZG93IGN1cnJlbnRseSBvcGVuLiAgV2hlbiB0aGUgJ2hpZGRlbicKKwkJb3B0aW9uIGlzIHNldCwgb3Igd2hlbiB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkIGFuZCB0aGUgWyFdIGlzCisJCXVzZWQsIHRoZSBidWZmZXIgYmVjb21lcyBoaWRkZW4gKHVubGVzcyB0aGVyZSBpcyBhbm90aGVyCisJCXdpbmRvdyBlZGl0aW5nIGl0KS4gIFRoZSBjb21tYW5kIGZhaWxzIGlmIGFueSAiUHJldmlldyIgYnVmZmVyCisJCWNhbm5vdCBiZSBjbG9zZWQuICBTZWUgYWxzbyB8OmNsb3NlfC4KKworCQkJCQkJCSo6cHAqICo6cHBvcCoKKzpbY291bnRdcHBbb3BdWyFdCisJCURvZXMgIjpbY291bnRdcG9wWyFdIiBpbiB0aGUgcHJldmlldyB3aW5kb3cuICBTZWUgfDpwb3B8IGFuZAorCQl8OnB0YWd8LiAge25vdCBpbiBWaX0KKworQ1RSTC1XIH0JCQkJCQkqQ1RSTC1XX30qCisJCVVzZSBpZGVudGlmaWVyIHVuZGVyIGN1cnNvciBhcyBhIHRhZyBhbmQgcGVyZm9ybSBhIDpwdGFnIG9uCisJCWl0LiBNYWtlIHRoZSBuZXcgUHJldmlldyB3aW5kb3cgKGlmIHJlcXVpcmVkKSBOIGhpZ2guICBJZiBOIGlzCisJCW5vdCBnaXZlbiwgJ3ByZXZpZXdoZWlnaHQnIGlzIHVzZWQuCisKK0NUUkwtVyBnIH0JCQkJCQkqQ1RSTC1XX2d9KgorCQlVc2UgaWRlbnRpZmllciB1bmRlciBjdXJzb3IgYXMgYSB0YWcgYW5kIHBlcmZvcm0gYSA6cHRqdW1wIG9uCisJCWl0LiBNYWtlIHRoZSBuZXcgUHJldmlldyB3aW5kb3cgKGlmIHJlcXVpcmVkKSBOIGhpZ2guICBJZiBOIGlzCisJCW5vdCBnaXZlbiwgJ3ByZXZpZXdoZWlnaHQnIGlzIHVzZWQuCisKKwkJCQkJCQkqOnBlZCogKjpwZWRpdCoKKzpwZWRbaXRdWyFdIFsrK29wdF0gWytjbWRdIHtmaWxlfQorCQlFZGl0IHtmaWxlfSBpbiB0aGUgcHJldmlldyB3aW5kb3cuICBUaGUgcHJldmlldyB3aW5kb3cgaXMKKwkJb3BlbmVkIGxpa2Ugd2l0aCB8OnB0YWd8LiAgVGhlIGN1cnJlbnQgd2luZG93IGFuZCBjdXJzb3IKKwkJcG9zaXRpb24gaXNuJ3QgY2hhbmdlZC4gIFVzZWZ1bCBleGFtcGxlOiA+CisJCQk6cGVkaXQgKy9mcHV0YyAvdXNyL2luY2x1ZGUvc3RkaW8uaAorPAorCQkJCQkJCSo6cHMqICo6cHNlYXJjaCoKKzpbcmFuZ2VdcHNbZWFyY2hdWyFdIFtjb3VudF0gWy9dcGF0dGVyblsvXQorCQlXb3JrcyBsaWtlIHw6aWp1bXB8IGJ1dCBzaG93cyB0aGUgZm91bmQgbWF0Y2ggaW4gdGhlIHByZXZpZXcKKwkJd2luZG93LiAgVGhlIHByZXZpZXcgd2luZG93IGlzIG9wZW5lZCBsaWtlIHdpdGggfDpwdGFnfC4gIFRoZQorCQljdXJyZW50IHdpbmRvdyBhbmQgY3Vyc29yIHBvc2l0aW9uIGlzbid0IGNoYW5nZWQuICBVc2VmdWwKKwkJZXhhbXBsZTogPgorCQkJOnBzZWFyY2ggcG9wZW4KKzwJCUxpa2Ugd2l0aCB0aGUgfDpwdGFnfCBjb21tYW5kLCB5b3UgY2FuIHVzZSB0aGlzIHRvCisJCWF1dG9tYXRpY2FsbHkgc2hvdyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29yZCB1bmRlciB0aGUKKwkJY3Vyc29yLiAgVGhpcyBpcyBsZXNzIGNsZXZlciB0aGFuIHVzaW5nIHw6cHRhZ3wsIGJ1dCB5b3UgZG9uJ3QKKwkJbmVlZCBhIHRhZ3MgZmlsZSBhbmQgaXQgd2lsbCBhbHNvIGZpbmQgbWF0Y2hlcyBpbiBzeXN0ZW0KKwkJaW5jbHVkZSBmaWxlcy4gIEV4YW1wbGU6ID4KKyAgOmF1ISBDdXJzb3JIb2xkICouW2NoXSBuZXN0ZWQgZXhlICJzaWxlbnQhIHBzZWFyY2ggIiAuIGV4cGFuZCgiPGN3b3JkPiIpCis8CQlXYXJuaW5nOiBUaGlzIGNhbiBiZSBzbG93LgorCitFeGFtcGxlCQkJCQkJKkN1cnNvckhvbGQtZXhhbXBsZSogID4KKworICA6YXUhIEN1cnNvckhvbGQgKi5bY2hdIG5lc3RlZCBleGUgInNpbGVudCEgcHRhZyAiIC4gZXhwYW5kKCI8Y3dvcmQ+IikKKworVGhpcyB3aWxsIGNhdXNlIGEgIjpwdGFnIiB0byBiZSBleGVjdXRlZCBmb3IgdGhlIGtleXdvcmQgdW5kZXIgdGhlIGN1cnNvciwKK3doZW4gdGhlIGN1cnNvciBoYXNuJ3QgbW92ZWQgZm9yIHRoZSB0aW1lIHNldCB3aXRoICd1cGRhdGV0aW1lJy4gIFRoZSAibmVzdGVkIgorbWFrZXMgb3RoZXIgYXV0b2NvbW1hbmRzIGJlIGV4ZWN1dGVkLCBzbyB0aGF0IHN5bnRheCBoaWdobGlnaHRpbmcgd29ya3MgaW4gdGhlCitwcmV2aWV3IHdpbmRvdy4gIFRoZSAic2lsZW50ISIgYXZvaWRzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdGFnIGNvdWxkIG5vdAorYmUgZm91bmQuICBBbHNvIHNlZSB8Q3Vyc29ySG9sZHwuICBUbyBkaXNhYmxlIHRoaXMgYWdhaW46ID4KKworICA6YXUhIEN1cnNvckhvbGQKKworQSBuaWNlIGFkZGl0aW9uIGlzIHRvIGhpZ2hsaWdodCB0aGUgZm91bmQgdGFnLCBhdm9pZCB0aGUgIjpwdGFnIiB3aGVuIHRoZXJlCitpcyBubyB3b3JkIHVuZGVyIHRoZSBjdXJzb3IsIGFuZCBhIGZldyBvdGhlciB0aGluZ3M6ID4KKworICA6YXUhIEN1cnNvckhvbGQgKi5bY2hdIG5lc3RlZCBjYWxsIFByZXZpZXdXb3JkKCkKKyAgOmZ1bmMgUHJldmlld1dvcmQoKQorICA6ICBpZiAmcHJldmlld3dpbmRvdwkJCSIgZG9uJ3QgZG8gdGhpcyBpbiB0aGUgcHJldmlldyB3aW5kb3cKKyAgOiAgICByZXR1cm4KKyAgOiAgZW5kaWYKKyAgOiAgbGV0IHcgPSBleHBhbmQoIjxjd29yZD4iKQkJIiBnZXQgdGhlIHdvcmQgdW5kZXIgY3Vyc29yCisgIDogIGlmIHcgPX4gJ1xhJwkJCSIgaWYgdGhlIHdvcmQgY29udGFpbnMgYSBsZXR0ZXIKKyAgOgorICA6ICAgICIgRGVsZXRlIGFueSBleGlzdGluZyBoaWdobGlnaHQgYmVmb3JlIHNob3dpbmcgYW5vdGhlciB0YWcKKyAgOiAgICBzaWxlbnQhIHdpbmNtZCBQCQkJIiBqdW1wIHRvIHByZXZpZXcgd2luZG93CisgIDogICAgaWYgJnByZXZpZXd3aW5kb3cJCQkiIGlmIHdlIHJlYWxseSBnZXQgdGhlcmUuLi4KKyAgOiAgICAgIG1hdGNoIG5vbmUJCQkiIGRlbGV0ZSBleGlzdGluZyBoaWdobGlnaHQKKyAgOiAgICAgIHdpbmNtZCBwCQkJIiBiYWNrIHRvIG9sZCB3aW5kb3cKKyAgOiAgICBlbmRpZgorICA6CisgIDogICAgIiBUcnkgZGlzcGxheWluZyBhIG1hdGNoaW5nIHRhZyBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvcgorICA6ICAgIHRyeQorICA6ICAgICAgIGV4ZSAicHRhZyAiIC4gdworICA6ICAgIGNhdGNoCisgIDogICAgICByZXR1cm4KKyAgOiAgICBlbmR0cnkKKyAgOgorICA6ICAgIHNpbGVudCEgd2luY21kIFAJCQkiIGp1bXAgdG8gcHJldmlldyB3aW5kb3cKKyAgOiAgICBpZiAmcHJldmlld3dpbmRvdwkJIiBpZiB3ZSByZWFsbHkgZ2V0IHRoZXJlLi4uCisgIDoJIGlmIGhhcygiZm9sZGluZyIpCisgIDoJICAgc2lsZW50ISAuZm9sZG9wZW4JCSIgZG9uJ3Qgd2FudCBhIGNsb3NlZCBmb2xkCisgIDoJIGVuZGlmCisgIDoJIGNhbGwgc2VhcmNoKCIkIiwgImIiKQkJIiB0byBlbmQgb2YgcHJldmlvdXMgbGluZQorICA6CSBsZXQgdyA9IHN1YnN0aXR1dGUodywgJ1xcJywgJ1xcXFwnLCAiIikKKyAgOgkgY2FsbCBzZWFyY2goJ1w8XFYnIC4gdyAuICdcPicpCSIgcG9zaXRpb24gY3Vyc29yIG9uIG1hdGNoCisgIDoJICIgQWRkIGEgbWF0Y2ggaGlnaGxpZ2h0IHRvIHRoZSB3b3JkIGF0IHRoaXMgcG9zaXRpb24KKyAgOiAgICAgIGhpIHByZXZpZXdXb3JkIHRlcm09Ym9sZCBjdGVybWJnPWdyZWVuIGd1aWJnPWdyZWVuCisgIDoJIGV4ZSAnbWF0Y2ggcHJldmlld1dvcmQgIlwlJyAuIGxpbmUoIi4iKSAuICdsXCUnIC4gY29sKCIuIikgLiAnY1xrKiInCisgIDogICAgICB3aW5jbWQgcAkJCSIgYmFjayB0byBvbGQgd2luZG93CisgIDogICAgZW5kaWYKKyAgOiAgZW5kaWYKKyAgOmVuZGZ1bgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzExLiBVc2luZyBoaWRkZW4gYnVmZmVycwkJCQkqYnVmZmVyLWhpZGRlbioKKworQSBoaWRkZW4gYnVmZmVyIGlzIG5vdCBkaXNwbGF5ZWQgaW4gYSB3aW5kb3csIGJ1dCBpcyBzdGlsbCBsb2FkZWQgaW50byBtZW1vcnkuCitUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGp1bXAgZnJvbSBmaWxlIHRvIGZpbGUsIHdpdGhvdXQgdGhlIG5lZWQgdG8gcmVhZCBvcgord3JpdGUgdGhlIGZpbGUgZXZlcnkgdGltZSB5b3UgZ2V0IGFub3RoZXIgYnVmZmVyIGluIGEgd2luZG93Lgore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2xpc3RjbWRzfCBmZWF0dXJlfQorCisJCQkJCQkJKjpidWZmZXItISoKK0lmIHRoZSBvcHRpb24gJ2hpZGRlbicgKCdoaWQnKSBpcyBzZXQsIGFiYW5kb25lZCBidWZmZXJzIGFyZSBrZXB0IGZvciBhbGwKK2NvbW1hbmRzIHRoYXQgc3RhcnQgZWRpdGluZyBhbm90aGVyIGZpbGU6ICI6ZWRpdCIsICI6bmV4dCIsICI6dGFnIiwgZXRjLiAgVGhlCitjb21tYW5kcyB0aGF0IG1vdmUgdGhyb3VnaCB0aGUgYnVmZmVyIGxpc3Qgc29tZXRpbWVzIG1ha2UgdGhlIGN1cnJlbnQgYnVmZmVyCitoaWRkZW4gYWx0aG91Z2ggdGhlICdoaWRkZW4nIG9wdGlvbiBpcyBub3Qgc2V0LiAgVGhpcyBoYXBwZW5zIHdoZW4gYSBidWZmZXIgaXMKK21vZGlmaWVkLCBidXQgaXMgZm9yY2VkICh3aXRoICchJykgdG8gYmUgcmVtb3ZlZCBmcm9tIGEgd2luZG93LCBhbmQKKydhdXRvd3JpdGUnIGlzIG9mZiBvciB0aGUgYnVmZmVyIGNhbid0IGJlIHdyaXR0ZW4uCisKK1lvdSBjYW4gbWFrZSBhIGhpZGRlbiBidWZmZXIgbm90IGhpZGRlbiBieSBzdGFydGluZyB0byBlZGl0IGl0IHdpdGggYW55Citjb21tYW5kLiAgT3IgYnkgZGVsZXRpbmcgaXQgd2l0aCB0aGUgIjpiZGVsZXRlIiBjb21tYW5kLgorCitUaGUgJ2hpZGRlbicgaXMgZ2xvYmFsLCBpdCBpcyB1c2VkIGZvciBhbGwgYnVmZmVycy4gIFRoZSAnYnVmaGlkZGVuJyBvcHRpb24KK2NhbiBiZSB1c2VkIHRvIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBhIHNwZWNpZmljIGJ1ZmZlci4gIEl0IGNhbiB0YWtlIHRoZXNlCit2YWx1ZXM6CisJPGVtcHR5PgkJVXNlIHRoZSB2YWx1ZSBvZiAnaGlkZGVuJy4KKwloaWRlCQlIaWRlIHRoaXMgYnVmZmVyLCBhbHNvIHdoZW4gJ2hpZGRlbicgaXMgbm90IHNldC4KKwl1bmxvYWQJCURvbid0IGhpZGUgYnV0IHVubG9hZCB0aGlzIGJ1ZmZlciwgYWxzbyB3aGVuICdoaWRkZW4nCisJCQlpcyBzZXQuCisJZGVsZXRlCQlEZWxldGUgdGhlIGJ1ZmZlci4KKworCQkJCQkJCSpoaWRkZW4tcXVpdCoKK1doZW4geW91IHRyeSB0byBxdWl0IFZpbSB3aGlsZSB0aGVyZSBpcyBhIGhpZGRlbiwgbW9kaWZpZWQgYnVmZmVyLCB5b3Ugd2lsbAorZ2V0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIFZpbSB3aWxsIG1ha2UgdGhhdCBidWZmZXIgdGhlIGN1cnJlbnQgYnVmZmVyLiAgWW91CitjYW4gdGhlbiBkZWNpZGUgdG8gd3JpdGUgdGhpcyBidWZmZXIgKCI6d3EiKSBvciBxdWl0IHdpdGhvdXQgd3JpdGluZyAoIjpxISIpLgorQmUgY2FyZWZ1bDogdGhlcmUgbWF5IGJlIG1vcmUgaGlkZGVuLCBtb2RpZmllZCBidWZmZXJzIQorCitBIGJ1ZmZlciBjYW4gYWxzbyBiZSB1bmxpc3RlZC4gIFRoaXMgbWVhbnMgaXQgZXhpc3RzLCBidXQgaXQgaXMgbm90IGluIHRoZQorbGlzdCBvZiBidWZmZXJzLiB8dW5saXN0ZWQtYnVmZmVyfAorCisKKzpmaWxlc1shXQkJCQkJKjpmaWxlcyoKKzpidWZmZXJzWyFdCQkJCQkqOmJ1ZmZlcnMqICo6bHMqCis6bHNbIV0JCVNob3cgYWxsIGJ1ZmZlcnMuICBFeGFtcGxlOgorCisJCQkxICNoICAiL3Rlc3QvdGV4dCIJCWxpbmUgMSB+CisJCQkydSAgICAiYXNkZiIJCQlsaW5lIDAgfgorCQkJMyAlbCsgInZlcnNpb24uYyIJCWxpbmUgMSB+CisKKwkJV2hlbiB0aGUgWyFdIGlzIGluY2x1ZGVkIHRoZSBsaXN0IHdpbGwgc2hvdyB1bmxpc3RlZCBidWZmZXJzCisJCSh0aGUgdGVybSAidW5saXN0ZWQiIGlzIGEgYml0IGNvbmZ1c2luZyB0aGVuLi4uKS4KKworCQlFYWNoIGJ1ZmZlciBoYXMgYSB1bmlxdWUgbnVtYmVyLiAgVGhhdCBudW1iZXIgd2lsbCBub3QgY2hhbmdlLAorCQlzbyB5b3UgY2FuIGFsd2F5cyBnbyB0byBhIHNwZWNpZmljIGJ1ZmZlciB3aXRoICI6YnVmZmVyIE4iIG9yCisJCSJOIENUUkwtXiIsIHdoZXJlIE4gaXMgdGhlIGJ1ZmZlciBudW1iZXIuCisKKwkJSW5kaWNhdG9ycyAoY2hhcnMgaW4gdGhlIHNhbWUgY29sdW1uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUpOgorCQl1CWFuIHVubGlzdGVkIGJ1ZmZlciAob25seSBkaXNwbGF5ZWQgd2hlbiBbIV0gaXMgdXNlZCkKKwkJCSAgIHx1bmxpc3RlZC1idWZmZXJ8CisJCSAlCXRoZSBidWZmZXIgaW4gdGhlIGN1cnJlbnQgd2luZG93CisJCSAjCXRoZSBhbHRlcm5hdGUgYnVmZmVyIGZvciAiOmUgIyIgYW5kIENUUkwtXgorCQkgIGEJYW4gYWN0aXZlIGJ1ZmZlcjogaXQgaXMgbG9hZGVkIGFuZCB2aXNpYmxlCisJCSAgaAlhIGhpZGRlbiBidWZmZXI6IEl0IGlzIGxvYWRlZCwgYnV0IGN1cnJlbnRseSBub3QKKwkJCSAgIGRpc3BsYXllZCBpbiBhIHdpbmRvdyB8aGlkZGVuLWJ1ZmZlcnwKKwkJICAgLQlhIGJ1ZmZlciB3aXRoICdtb2RpZmlhYmxlJyBvZmYKKwkJICAgPQlhIHJlYWRvbmx5IGJ1ZmZlcgorCQkgICAgKwlhIG1vZGlmaWVkIGJ1ZmZlcgorCQkgICAgeCAgIGEgYnVmZmVyIHdpdGggcmVhZCBlcnJvcnMKKworCQkJCQkJKjpiYWQqICo6YmFkZCoKKzpiYWRbZF0JWytsbnVtXSB7Zm5hbWV9CisJCUFkZCBmaWxlIG5hbWUge2ZuYW1lfSB0byB0aGUgYnVmZmVyIGxpc3QsIHdpdGhvdXQgbG9hZGluZyBpdC4KKwkJSWYgImxudW0iIGlzIHNwZWNpZmllZCwgdGhlIGN1cnNvciB3aWxsIGJlIHBvc2l0aW9uZWQgYXQgdGhhdAorCQlsaW5lIHdoZW4gdGhlIGJ1ZmZlciBpcyBmaXJzdCBlbnRlcmVkLiBOb3RlIHRoYXQgb3RoZXIKKwkJY29tbWFuZHMgYWZ0ZXIgdGhlICsgd2lsbCBiZSBpZ25vcmVkLgorCis6W05dYmRbZWxldGVdWyFdCQkJKjpiZCogKjpiZGVsKiAqOmJkZWxldGUqICpFNTE2KgorOmJkW2VsZXRlXVshXSBbTl0KKwkJVW5sb2FkIGJ1ZmZlciBbTl0gKGRlZmF1bHQ6IGN1cnJlbnQgYnVmZmVyKSBhbmQgZGVsZXRlIGl0IGZyb20KKwkJdGhlIGJ1ZmZlciBsaXN0LiAgSWYgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCwgdGhpcyBmYWlscywKKwkJdW5sZXNzIHdoZW4gWyFdIGlzIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSBjaGFuZ2VzIGFyZSBsb3N0LgorCQlUaGUgZmlsZSByZW1haW5zIHVuYWZmZWN0ZWQuICBBbnkgd2luZG93cyBmb3IgdGhpcyBidWZmZXIgYXJlCisJCWNsb3NlZC4gIElmIGJ1ZmZlciBbTl0gaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCBhbm90aGVyIGJ1ZmZlcgorCQl3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkLiAgVGhpcyBpcyB0aGUgbW9zdCByZWNlbnQgZW50cnkgaW4KKwkJdGhlIGp1bXAgbGlzdCB0aGF0IHBvaW50cyBpbnRvIGEgbG9hZGVkIGJ1ZmZlci4KKwkJQWN0dWFsbHksIHRoZSBidWZmZXIgaXNuJ3QgY29tcGxldGVseSBkZWxldGVkLCBpdCBpcyByZW1vdmVkCisJCWZyb20gdGhlIGJ1ZmZlciBsaXN0IHx1bmxpc3RlZC1idWZmZXJ8IGFuZCBvcHRpb24gdmFsdWVzLAorCQl2YXJpYWJsZXMgYW5kIG1hcHBpbmdzL2FiYnJldmlhdGlvbnMgZm9yIHRoZSBidWZmZXIgYXJlCisJCWNsZWFyZWQuCisKKzpiZGVsZXRlWyFdIHtidWZuYW1lfQkJCQkJCSpFOTMqICpFOTQqCisJCUxpa2UgIjpiZGVsZXRlWyFdIFtOXSIsIGJ1dCBidWZmZXIgZ2l2ZW4gYnkgbmFtZS4gIE5vdGUgdGhhdCBhCisJCWJ1ZmZlciB3aG9zZSBuYW1lIGlzIGEgbnVtYmVyIGNhbm5vdCBiZSByZWZlcmVuY2VkIGJ5IHRoYXQKKwkJbmFtZTsgdXNlIHRoZSBidWZmZXIgbnVtYmVyIGluc3RlYWQuICBJbnNlcnQgYSBiYWNrc2xhc2gKKwkJYmVmb3JlIGEgc3BhY2UgaW4gYSBidWZmZXIgbmFtZS4KKworOmJkZWxldGVbIV0gTjEgTjIgLi4uCisJCURvICI6YmRlbGV0ZVshXSIgZm9yIGJ1ZmZlciBOMSwgTjIsIGV0Yy4gIFRoZSBhcmd1bWVudHMgY2FuIGJlCisJCWJ1ZmZlciBudW1iZXJzIG9yIGJ1ZmZlciBuYW1lcyAoYnV0IG5vdCBidWZmZXIgbmFtZXMgdGhhdCBhcmUKKwkJYSBudW1iZXIpLiAgSW5zZXJ0IGEgYmFja3NsYXNoIGJlZm9yZSBhIHNwYWNlIGluIGEgYnVmZmVyCisJCW5hbWUuCisKKzpOLE1iZGVsZXRlWyFdCURvICI6YmRlbGV0ZVshXSIgZm9yIGFsbCBidWZmZXJzIGluIHRoZSByYW5nZSBOIHRvIE0KKwkJfGluY2x1c2l2ZXwuCisKKzpbTl1id1tpcGVvdXRdWyFdCQkJKjpidyogKjpid2lwZSogKjpid2lwZW91dCogKkU1MTcqCis6YndbaXBlb3V0XVshXSB7YnVmbmFtZX0KKzpOLE1id1tpcGVvdXRdWyFdCis6YndbaXBlb3V0XVshXSBOMSBOMiAuLi4KKwkJTGlrZSB8OmJkZWxldGV8LCBidXQgcmVhbGx5IGRlbGV0ZSB0aGUgYnVmZmVyLiAgQWxsIG1hcmtzIGluCisJCXRoaXMgYnVmZmVyIGJlY29tZSBpbnZhbGlkLCBvcHRpb24gc2V0dGluZ3MgYXJlIGxvc3QsIGV0Yy4KKwkJRG9uJ3QgdXNlIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKworOltOXWJ1bltsb2FkXVshXQkJCQkqOmJ1biogKjpidW5sb2FkKiAqRTUxNSoKKzpidW5bbG9hZF1bIV0gW05dCisJCVVubG9hZCBidWZmZXIgW05dIChkZWZhdWx0OiBjdXJyZW50IGJ1ZmZlcikuICBUaGUgbWVtb3J5CisJCWFsbG9jYXRlZCBmb3IgdGhpcyBidWZmZXIgd2lsbCBiZSBmcmVlZC4gIFRoZSBidWZmZXIgcmVtYWlucworCQlpbiB0aGUgYnVmZmVyIGxpc3QuCisJCUlmIHRoZSBidWZmZXIgd2FzIGNoYW5nZWQsIHRoaXMgZmFpbHMsIHVubGVzcyB3aGVuIFshXSBpcworCQlzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgdGhlIGNoYW5nZXMgYXJlIGxvc3QuCisJCUFueSB3aW5kb3dzIGZvciB0aGlzIGJ1ZmZlciBhcmUgY2xvc2VkLiAgSWYgYnVmZmVyIFtOXSBpcyB0aGUKKwkJY3VycmVudCBidWZmZXIsIGFub3RoZXIgYnVmZmVyIHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQuCisJCVRoaXMgaXMgdGhlIG1vc3QgcmVjZW50IGVudHJ5IGluIHRoZSBqdW1wIGxpc3QgdGhhdCBwb2ludHMKKwkJaW50byBhIGxvYWRlZCBidWZmZXIuCisKKzpidW5sb2FkWyFdIHtidWZuYW1lfQorCQlMaWtlICI6YnVubG9hZFshXSBbTl0iLCBidXQgYnVmZmVyIGdpdmVuIGJ5IG5hbWUuICBOb3RlIHRoYXQgYQorCQlidWZmZXIgd2hvc2UgbmFtZSBpcyBhIG51bWJlciBjYW5ub3QgYmUgcmVmZXJlbmNlZCBieSB0aGF0CisJCW5hbWU7IHVzZSB0aGUgYnVmZmVyIG51bWJlciBpbnN0ZWFkLiAgSW5zZXJ0IGEgYmFja3NsYXNoCisJCWJlZm9yZSBhIHNwYWNlIGluIGEgYnVmZmVyIG5hbWUuCisKKzpOLE1idW5sb2FkWyFdCURvICI6YnVubG9hZFshXSIgZm9yIGFsbCBidWZmZXJzIGluIHRoZSByYW5nZSBOIHRvIE0KKwkJfGluY2x1c2l2ZXwuCisKKzpidW5sb2FkWyFdIE4xIE4yIC4uLgorCQlEbyAiOmJ1bmxvYWRbIV0iIGZvciBidWZmZXIgTjEsIE4yLCBldGMuICBUaGUgYXJndW1lbnRzIGNhbiBiZQorCQlidWZmZXIgbnVtYmVycyBvciBidWZmZXIgbmFtZXMgKGJ1dCBub3QgYnVmZmVyIG5hbWVzIHRoYXQgYXJlCisJCWEgbnVtYmVyKS4gIEluc2VydCBhIGJhY2tzbGFzaCBiZWZvcmUgYSBzcGFjZSBpbiBhIGJ1ZmZlcgorCQluYW1lLgorCis6W05dYlt1ZmZlcl1bIV0gW05dCQkJKjpiKiAqOmJ1KiAqOmJ1ZiogKjpidWZmZXIqICpFODYqCisJCUVkaXQgYnVmZmVyIFtOXSBmcm9tIHRoZSBidWZmZXIgbGlzdC4gIElmIFtOXSBpcyBub3QgZ2l2ZW4sCisJCXRoZSBjdXJyZW50IGJ1ZmZlciByZW1haW5zIGJlaW5nIGVkaXRlZC4gIFNlZSB8OmJ1ZmZlci0hfCBmb3IKKwkJWyFdLiAgVGhpcyB3aWxsIGFsc28gZWRpdCBhIGJ1ZmZlciB0aGF0IGlzIG5vdCBpbiB0aGUgYnVmZmVyCisJCWxpc3QsIHdpdGhvdXQgc2V0dGluZyB0aGUgJ2J1Zmxpc3RlZCcgZmxhZy4KKworOltOXWJbdWZmZXJdWyFdIHtmaWxlbmFtZX0KKwkJRWRpdCBidWZmZXIgZm9yIHtmaWxlbmFtZX0gZnJvbSB0aGUgYnVmZmVyIGxpc3QuICBTZWUKKwkJfDpidWZmZXItIXwgZm9yIFshXS4gIFRoaXMgd2lsbCBhbHNvIGVkaXQgYSBidWZmZXIgdGhhdCBpcyBub3QKKwkJaW4gdGhlIGJ1ZmZlciBsaXN0LCB3aXRob3V0IHNldHRpbmcgdGhlICdidWZsaXN0ZWQnIGZsYWcuCisKKzpbTl1zYlt1ZmZlcl0gW05dCQkJCQkqOnNiKiAqOnNidWZmZXIqCisJCVNwbGl0IHdpbmRvdyBhbmQgZWRpdCBidWZmZXIgW05dIGZyb20gdGhlIGJ1ZmZlciBsaXN0LiAgSWYgW05dCisJCWlzIG5vdCBnaXZlbiwgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGVkaXRlZC4gIFJlc3BlY3RzIHRoZQorCQkidXNlb3BlbiIgc2V0dGluZyBvZiAnc3dpdGNoYnVmJyB3aGVuIHNwbGl0dGluZy4gIFRoaXMgd2lsbAorCQlhbHNvIGVkaXQgYSBidWZmZXIgdGhhdCBpcyBub3QgaW4gdGhlIGJ1ZmZlciBsaXN0LCB3aXRob3V0CisJCXNldHRpbmcgdGhlICdidWZsaXN0ZWQnIGZsYWcuCisKKzpbTl1zYlt1ZmZlcl0ge2ZpbGVuYW1lfQorCQlTcGxpdCB3aW5kb3cgYW5kIGVkaXQgYnVmZmVyIGZvciB7ZmlsZW5hbWV9IGZyb20gdGhlIGJ1ZmZlcgorCQlsaXN0LiAgVGhpcyB3aWxsIGFsc28gZWRpdCBhIGJ1ZmZlciB0aGF0IGlzIG5vdCBpbiB0aGUgYnVmZmVyCisJCWxpc3QsIHdpdGhvdXQgc2V0dGluZyB0aGUgJ2J1Zmxpc3RlZCcgZmxhZy4KKworCQkJCQkJCSo6Ym4qICo6Ym5leHQqICpFODcqCis6W05dYm5bZXh0XVshXSBbTl0KKwkJR28gdG8gW05ddGggbmV4dCBidWZmZXIgaW4gYnVmZmVyIGxpc3QuICBbTl0gZGVmYXVsdHMgdG8gb25lLgorCQlXcmFwcyBhcm91bmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGxpc3QuCisJCVNlZSB8OmJ1ZmZlci0hfCBmb3IgWyFdLgorCQlJZiB5b3UgYXJlIGluIGEgaGVscCBidWZmZXIsIHRoaXMgdGFrZXMgeW91IHRvIHRoZSBuZXh0IGhlbHAKKwkJYnVmZmVyIChpZiB0aGVyZSBpcyBvbmUpLiAgU2ltaWxhcmx5LCBpZiB5b3UgYXJlIGluIGEgbm9ybWFsCisJCShub24taGVscCkgYnVmZmVyLCB0aGlzIHRha2VzIHlvdSB0byB0aGUgbmV4dCBub3JtYWwgYnVmZmVyLgorCQlUaGlzIGlzIHNvIHRoYXQgaWYgeW91IGhhdmUgaW52b2tlZCBoZWxwLCBpdCBkb2Vzbid0IGdldCBpbgorCQl0aGUgd2F5IHdoZW4geW91J3JlIGJyb3dzaW5nIGNvZGUvdGV4dCBidWZmZXJzLiBUaGUgbmV4dCB0aHJlZQorCQljb21tYW5kcyBhbHNvIHdvcmsgbGlrZSB0aGlzLgorCisJCQkJCQkJKjpzYm4qICo6c2JuZXh0KgorOltOXXNibltleHRdIFtOXQorCQlTcGxpdCB3aW5kb3cgYW5kIGdvIHRvIFtOXXRoIG5leHQgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LgorCQlXcmFwcyBhcm91bmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGxpc3QuICBVc2VzICdzd2l0Y2hidWYnCisKKzpbTl1iTltleHRdWyFdIFtOXQkJCSo6Yk4qICo6Yk5leHQqICo6YnAqICo6YnByZXZpb3VzKiAqRTg4KgorOltOXWJwW3JldmlvdXNdWyFdIFtOXQorCQlHbyB0byBbTl10aCBwcmV2aW91cyBidWZmZXIgaW4gYnVmZmVyIGxpc3QuICBbTl0gZGVmYXVsdHMgdG8KKwkJb25lLiAgV3JhcHMgYXJvdW5kIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIGxpc3QuCisJCVNlZSB8OmJ1ZmZlci0hfCBmb3IgWyFdIGFuZCAnc3dpdGNoYnVmJy4KKworOltOXXNiTltleHRdIFtOXQkJCSo6c2JOKiAqOnNiTmV4dCogKjpzYnAqICo6c2JwcmV2aW91cyoKKzpbTl1zYnBbcmV2aW91c10gW05dCisJCVNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gW05ddGggcHJldmlvdXMgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LgorCQlXcmFwcyBhcm91bmQgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgbGlzdC4KKwkJVXNlcyAnc3dpdGNoYnVmJy4KKworCQkJCQkJCSo6YnIqICo6YnJld2luZCoKKzpicltld2luZF1bIV0JR28gdG8gZmlyc3QgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LiAgSWYgdGhlIGJ1ZmZlciBsaXN0IGlzCisJCWVtcHR5LCBnbyB0byB0aGUgZmlyc3QgdW5saXN0ZWQgYnVmZmVyLgorCQlTZWUgfDpidWZmZXItIXwgZm9yIFshXS4KKworCQkJCQkJCSo6YmYqICo6YmZpcnN0KgorOmJmW2lyc3RdCVNhbWUgYXMgIjpicmV3aW5kIi4KKworCQkJCQkJCSo6c2JyKiAqOnNicmV3aW5kKgorOnNicltld2luZF0JU3BsaXQgd2luZG93IGFuZCBnbyB0byBmaXJzdCBidWZmZXIgaW4gYnVmZmVyIGxpc3QuICBJZiB0aGUKKwkJYnVmZmVyIGxpc3QgaXMgZW1wdHksIGdvIHRvIHRoZSBmaXJzdCB1bmxpc3RlZCBidWZmZXIuCisJCVJlc3BlY3RzIHRoZSAnc3dpdGNoYnVmJyBvcHRpb24uCisKKwkJCQkJCQkqOnNiZiogKjpzYmZpcnN0KgorOnNiZltpcnN0XQlTYW1lIGFzICI6c2JyZXdpbmQiLgorCisJCQkJCQkJKjpibCogKjpibGFzdCoKKzpibFthc3RdWyFdCUdvIHRvIGxhc3QgYnVmZmVyIGluIGJ1ZmZlciBsaXN0LiAgSWYgdGhlIGJ1ZmZlciBsaXN0IGlzCisJCWVtcHR5LCBnbyB0byB0aGUgbGFzdCB1bmxpc3RlZCBidWZmZXIuCisJCVNlZSB8OmJ1ZmZlci0hfCBmb3IgWyFdLgorCisJCQkJCQkJKjpzYmwqICo6c2JsYXN0KgorOnNibFthc3RdCVNwbGl0IHdpbmRvdyBhbmQgZ28gdG8gbGFzdCBidWZmZXIgaW4gYnVmZmVyIGxpc3QuICBJZiB0aGUKKwkJYnVmZmVyIGxpc3QgaXMgZW1wdHksIGdvIHRvIHRoZSBsYXN0IHVubGlzdGVkIGJ1ZmZlci4KKwkJUmVzcGVjdHMgJ3N3aXRjaGJ1Zicgb3B0aW9uLgorCis6W05dYm1bb2RpZmllZF1bIV0gW05dCQkJCSo6Ym0qICo6Ym1vZGlmaWVkKiAqRTg0KgorCQlHbyB0byBbTl10aCBuZXh0IG1vZGlmaWVkIGJ1ZmZlci4gIE5vdGU6IHRoaXMgY29tbWFuZCBhbHNvCisJCWZpbmRzIHVubGlzdGVkIGJ1ZmZlcnMuICBJZiB0aGVyZSBpcyBubyBtb2RpZmllZCBidWZmZXIgdGhlCisJCWNvbW1hbmQgZmFpbHMuCisKKzpbTl1zYm1bb2RpZmllZF0gW05dCQkJCQkqOnNibSogKjpzYm1vZGlmaWVkKgorCQlTcGxpdCB3aW5kb3cgYW5kIGdvIHRvIFtOXXRoIG5leHQgbW9kaWZpZWQgYnVmZmVyLgorCQlSZXNwZWN0cyAnc3dpdGNoYnVmJyBvcHRpb24uCisJCU5vdGU6IHRoaXMgY29tbWFuZCBhbHNvIGZpbmRzIGJ1ZmZlcnMgbm90IGluIHRoZSBidWZmZXIgbGlzdC4KKworOltOXXVuaFtpZGVdIFtOXQkJCSo6dW5oKiAqOnVuaGlkZSogKjpzdW4qICo6c3VuaGlkZSoKKzpbTl1zdW5baGlkZV0gW05dCisJCVJlYXJyYW5nZSB0aGUgc2NyZWVuIHRvIG9wZW4gb25lIHdpbmRvdyBmb3IgZWFjaCBsb2FkZWQgYnVmZmVyCisJCWluIHRoZSBidWZmZXIgbGlzdC4gIFdoZW4gYSBjb3VudCBpcyBnaXZlbiwgdGhpcyBpcyB0aGUKKwkJbWF4aW11bSBudW1iZXIgb2Ygd2luZG93cyB0byBvcGVuLgorCis6W05dYmFbbGxdIFtOXQkJCQkJKjpiYSogKjpiYWxsKiAqOnNiYSogKjpzYmFsbCoKKzpbTl1zYmFbbGxdIFtOXQlSZWFycmFuZ2UgdGhlIHNjcmVlbiB0byBvcGVuIG9uZSB3aW5kb3cgZm9yIGVhY2ggYnVmZmVyIGluCisJCXRoZSBidWZmZXIgbGlzdC4gIFdoZW4gYSBjb3VudCBpcyBnaXZlbiwgdGhpcyBpcyB0aGUgbWF4aW11bQorCQludW1iZXIgb2Ygd2luZG93cyB0byBvcGVuLiAgJ3dpbmhlaWdodCcgYWxzbyBsaW1pdHMgdGhlIG51bWJlcgorCQlvZiB3aW5kb3dzIG9wZW5lZCAoJ3dpbndpZHRoJyBpZiB8OnZlcnRpY2FsfCB3YXMgcHJlcGVuZGVkKS4KKwkJQnVmL1dpbiBFbnRlci9MZWF2ZSBhdXRvY29tbWFuZHMgYXJlIG5vdCBleGVjdXRlZCBmb3IgdGhlIG5ldworCQl3aW5kb3dzIGhlcmUsIHRoYXQncyBvbmx5IGRvbmUgd2hlbiB0aGV5IGFyZSByZWFsbHkgZW50ZXJlZC4KKworTm90ZTogQWxsIHRoZSBjb21tYW5kcyBhYm92ZSB0aGF0IHN0YXJ0IGVkaXRpbmcgYW5vdGhlciBidWZmZXIsIGtlZXAgdGhlCisncmVhZG9ubHknIGZsYWcgYXMgaXQgd2FzLiAgVGhpcyBkaWZmZXJzIGZyb20gdGhlICI6ZWRpdCIgY29tbWFuZCwgd2hpY2ggc2V0cwordGhlICdyZWFkb25seScgZmxhZyBlYWNoIHRpbWUgdGhlIGZpbGUgaXMgcmVhZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxMi4gU3BlY2lhbCBraW5kcyBvZiBidWZmZXJzCQkJKnNwZWNpYWwtYnVmZmVycyoKKworSW5zdGVhZCBvZiBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgZmlsZSwgYnVmZmVycyBjYW4gYWxzbyBiZSB1c2VkIGZvciBvdGhlcgorcHVycG9zZXMuICBBIGZldyBvcHRpb25zIGNhbiBiZSBzZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBhIGJ1ZmZlcjoKKwknYnVmaGlkZGVuJwl3aGF0IGhhcHBlbnMgd2hlbiB0aGUgYnVmZmVyIGlzIG5vIGxvbmdlciBkaXNwbGF5ZWQKKwkJCWluIGEgd2luZG93LgorCSdidWZ0eXBlJwl3aGF0IGtpbmQgb2YgYSBidWZmZXIgdGhpcyBpcworCSdzd2FwZmlsZScJd2hldGhlciB0aGUgYnVmZmVyIHdpbGwgaGF2ZSBhIHN3YXAgZmlsZQorCSdidWZsaXN0ZWQnCWJ1ZmZlciBzaG93cyB1cCBpbiB0aGUgYnVmZmVyIGxpc3QKKworQSBmZXcgdXNlZnVsIGtpbmRzIG9mIGEgYnVmZmVyOgorCitxdWlja2ZpeAlVc2VkIHRvIGNvbnRhaW4gdGhlIGVycm9yIGxpc3QuICBTZWUgfDpjd2luZG93fC4gIFRoaXMgY29tbWFuZAorCQlzZXRzIHRoZSAnYnVmdHlwZScgb3B0aW9uIHRvICJxdWlja2ZpeCIuICBZb3UgYXJlIG5vdCBzdXBwb3NlZAorCQl0byBjaGFuZ2UgdGhpcyEgICdzd2FwZmlsZScgaXMgb2ZmLgorCitoZWxwCQlDb250YWlucyBhIGhlbHAgZmlsZS4gIFdpbGwgb25seSBiZSBjcmVhdGVkIHdpdGggdGhlIHw6aGVscHwKKwkJY29tbWFuZC4gIFRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIGEgaGVscCBidWZmZXIgaXMgaW50ZXJuYWwKKwkJYW5kIGNhbid0IGJlIGNoYW5nZWQuICBUaGUgJ2J1Zmxpc3RlZCcgb3B0aW9uIHdpbGwgYmUgcmVzZXQKKwkJZm9yIGEgaGVscCBidWZmZXIuCisKK2RpcmVjdG9yeQlEaXNwbGF5cyBkaXJlY3RvcnkgY29udGVudHMuICBVc2VkIGJ5IHRoZSB8ZmlsZS1leHBsb3JlcnwKKwkJcGx1Z2luLiAgVGhlIGJ1ZmZlciBpcyBjcmVhdGVkIHdpdGggdGhlc2Ugc2V0dGluZ3M6ID4KKwkJCTpzZXQgYnVmdHlwZT1ub3dyaXRlCisJCQk6c2V0IGJ1ZmhpZGRlbj1kZWxldGUKKwkJCTpzZXQgbm9zd2FwZmlsZQorPAkJVGhlIGJ1ZmZlciBuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgYW5kIGlzIGFkanVzdGVkCisJCXdoZW4gdXNpbmcgdGhlIHw6Y2R8IGNvbW1hbmQuCisKK3NjcmF0Y2gJCUNvbnRhaW5zIHRleHQgdGhhdCBjYW4gYmUgZGlzY2FyZGVkIGF0IGFueSB0aW1lLiAgSXQgaXMga2VwdAorCQl3aGVuIGNsb3NpbmcgdGhlIHdpbmRvdywgaXQgbXVzdCBiZSBkZWxldGVkIGV4cGxpY2l0bHkuCisJCVNldHRpbmdzOiA+CisJCQk6c2V0IGJ1ZnR5cGU9bm9maWxlCisJCQk6c2V0IGJ1ZmhpZGRlbj1oaWRlCisJCQk6c2V0IG5vc3dhcGZpbGUKKzwJCVRoZSBidWZmZXIgbmFtZSBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgYnVmZmVyLgorCisJCQkJCQkqdW5saXN0ZWQtYnVmZmVyKgordW5saXN0ZWQJVGhlIGJ1ZmZlciBpcyBub3QgaW4gdGhlIGJ1ZmZlciBsaXN0LiAgSXQgaXMgbm90IHVzZWQgZm9yCisJCW5vcm1hbCBlZGl0aW5nLCBidXQgdG8gc2hvdyBhIGhlbHAgZmlsZSwgcmVtZW1iZXIgYSBmaWxlIG5hbWUKKwkJb3IgbWFya3MuICBUaGUgIjpiZGVsZXRlIiBjb21tYW5kIHdpbGwgYWxzbyBzZXQgdGhpcyBvcHRpb24sCisJCXRodXMgaXQgZG9lc24ndCBjb21wbGV0ZWx5IGRlbGV0ZSB0aGUgYnVmZmVyLiAgU2V0dGluZ3M6ID4KKwkJCTpzZXQgbm9idWZsaXN0ZWQKKzwKKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3dvcmtzaG9wLnR4dCBiL3J1bnRpbWUvZG9jL3dvcmtzaG9wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY4Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9kb2Mvd29ya3Nob3AudHh0CkBAIC0wLDAgKzEsOTggQEAKKyp3b3Jrc2hvcC50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKYW4gMDgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgR29yZG9uIFByaWV1cgorCisKK1N1biBWaXN1YWwgV29ya1Nob3AgRmVhdHVyZXMJCQkqd29ya3Nob3AqICp3b3Jrc2hvcC1zdXBwb3J0KgorCisxLiBJbnRyb2R1Y3Rpb24JCQkJCQl8d29ya3Nob3AtaW50cm98CisyLiBDb21tYW5kcwkJCQkJCXx3b3Jrc2hvcC1jb21tYW5kc3wKKzMuIENvbXBpbGluZyB2aW0vZ3ZpbSBmb3IgV29ya1Nob3AJCQl8d29ya3Nob3AtY29tcGlsaW5nfAorNC4gQ29uZmlndXJpbmcgZ3ZpbSBmb3IgYSBXb3JrU2hvcCByZWxlYXNlIHRyZWUJCXx3b3Jrc2hvcC1jb25maWd1cmV8Cis1LiBPYnRhaW5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBYUE0gbGlicmFyeQl8d29ya3Nob3AteHBtfAorCit7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXN9Cit7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3N1bl93b3Jrc2hvcHwgZmVhdHVyZX0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJbnRyb2R1Y3Rpb24JCQkJCQkqd29ya3Nob3AtaW50cm8qCisKK1N1biBWaXN1YWwgV29ya1Nob3AgaGFzIGFuICJFZGl0b3Igb2YgQ2hvaWNlIiBmZWF0dXJlIGRlc2lnbmVkIHRvIGxldCB1c2VycworZGVidWcgdXNpbmcgdGhlaXIgZmF2b3JpdGUgZWRpdG9ycy4gRm9yIHRoZSA2LjAgcmVsZWFzZSB3ZSBoYXZlIGFkZGVkIHN1cHBvcnQKK2ZvciBndmltLiBBIHdvcmtzaG9wIGRlYnVnIHNlc3Npb24gd2lsbCBoYXZlIGEgZGVidWdnaW5nIHdpbmRvdyBhbmQgYW4gZWRpdG9yCit3aW5kb3cgKHBvc3NpYmx5IG90aGVycyBhcyB3ZWxsKS4gVGhlIHVzZXIgY2FuIGRvIG1hbnkgZGVidWdnaW5nIG9wZXJhdGlvbnMKK2Zyb20gdGhlIGVkaXRvciB3aW5kb3csIG1pbmltaXppbmcgdGhlIG5lZWQgdG8gc3dpdGNoIGZyb20gd2luZG93IHRvIHdpbmRvdy4KKworVGhlIHZlcnNpb24gb2YgdmltIHNoaXBwZWQgd2l0aCBTdW4gVmlzdWFsIFdvcmtTaG9wIDYgKGFsc28gY2FsbGVkIEZvcnRlCitEZXZlbG9wZXIgNikgaXMgdmltIDUuMy4gVGhlIGZlYXR1cmVzIGluIHRoaXMgcmVsZWFzZSBhcmUgbXVjaCBtb3JlIHJlbGlhYmxlCit0aGFuIHRoZSB2aW0vZ3ZpbSBzaGlwcGVkIHdpdGggVmlzdWFsIFdvcmtTaG9wLiBWV1MgdXNlcnMgd2lzaGluZyB0byB1c2UgdmltCithcyB0aGVpciBlZGl0b3Igc2hvdWxkIGNvbXBpbGUgdGhlc2Ugc291cmNlcyBhbmQgaW5zdGFsbCB0aGVtIGluIHRoZWlyCit3b3Jrc2hvcCByZWxlYXNlIHRyZWUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQ29tbWFuZHMJCQkJCQkqd29ya3Nob3AtY29tbWFuZHMqCisKKwkJCQkJCSo6d3MqICo6d3N2ZXJiKgorOndzW3ZlcmJdIHZlcmIJCQlQYXNzIHRoZSB2ZXJiIHRvIHRoZSB2ZXJiIGV4ZWN1dG9yCisKK1Bhc3MgdGhlIHZlcmIgdG8gYSB3b3Jrc2hvcCBmdW5jdGlvbiB3aGljaCBnYXRoZXJzIHNvbWUgYXJndW1lbnRzIGFuZAorc2VuZHMgdGhlIHZlcmIgYW5kIGRhdGEgdG8gd29ya3Nob3Agb3ZlciBhbiBJUEMgY29ubmVjdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiszLiBDb21waWxpbmcgdmltL2d2aW0gZm9yIFdvcmtTaG9wCQkJKndvcmtzaG9wLWNvbXBpbGluZyoKKworQ29tcGlsaW5nIHZpbSB3aXRoIEZFQVRfU1VOX1dPUktTSE9QIHR1cm5zIG9uIGFsbCBjb21waWxlIHRpbWUgZmxhZ3MgbmVjZXNzYXJ5Citmb3IgYnVpbGRpbmcgYSB2aW0gdG8gd29yayB3aXRoIFZpc3VhbCBXb3JrU2hvcC4gVGhlIGZlYXR1cmVzIHJlcXVpcmVkIGZvciBWV1MKK2hhdmUgYmVlbiBidWlsdCBhbmQgdGVzdGVkIHVzaW5nIHRoZSBTdW4gY29tcGlsZXJzIGZyb20gdGhlIFZXUyByZWxlYXNlLiBUaGV5CitoYXZlIG5vdCBiZWVuIGJ1aWx0IG9yIHRlc3RlZCB1c2luZyBHbnUgY29tcGlsZXJzLiBUaGlzIGRvZXMgbm90IG1lYW4gdGhlCitmZWF0dXJlcyB3b24ndCBidWlsZCBhbmQgcnVuIGlmIGNvbXBpbGVkIHdpdGggZ2NjLCBqdXN0IHRoYXQgbm90aGluZyBpcworZ3VhcmFudGVlZCB3aXRoIGdjYyEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis0LiBDb25maWd1cmluZyBndmltIGZvciBhIFdvcmtTaG9wIHJlbGVhc2UgdHJlZQkJKndvcmtzaG9wLWNvbmZpZ3VyZSoKKworVGhlcmUgYXJlIHNldmVyYWwgYXNzdW1wdGlvbnMgd2hpY2ggbXVzdCBiZSBtZXQgaW4gb3JkZXIgdG8gY29tcGlsZSBhIGd2aW0gZm9yCit1c2Ugd2l0aCBTdW4gVmlzdWFsIFdvcmtTaG9wIDYuCisKKyAgICBvIFlvdSBzaG91bGQgdXNlIHRoZSBjb21waWxlciBpbiBWV1MgcmF0aGVyIHRoYW4gZ2NjLiBXZSBoYXZlIG5laXRoZXIKKyAgICAgIGJ1aWx0IG5vciB0ZXN0ZWQgd2l0aCBnY2MgYW5kIGNhbm5vdCBndWFyYW50ZWUgaXQgd2lsbCBidWlsZCBwcm9wZXJseS4KKworICAgIG8gWW91IG11c3Qgc3VwcGx5IHlvdXIgb3duIFhQTSBsaWJyYXJ5LiBTZWUgfHdvcmtzaG9wLXhwbXwgYmVsb3cgZm9yCisgICAgICBkZXRhaWxzIG9uIG9idGFpbmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWFBNLgorCisgICAgbyBFZGl0IHRoZSBNYWtlZmlsZSBpbiB0aGUgc3JjIGRpcmVjdG9yeSBhbmQgdW5jb21tZW50IHRoZSBsaW5lcyBmb3IgU3VuCisgICAgICBWaXN1YWwgV29ya1Nob3AuIFlvdSBjYW4gZWFzaWx5IGZpbmQgdGhlc2UgYnkgc2VhcmNoaW5nIGZvciB0aGUgc3RyaW5nCisgICAgICBGRUFUX1NVTl9XT1JLU0hPUAorCisgICAgbyBXZSBhbHNvIHN1Z2dlc3QgeW91IHVzZSBNb3RpZiBmb3IgeW91ciBndWkuIFRoaXMgd2lsbCBwcm92aWRlIGd2aW0gd2l0aAorICAgICAgdGhlIHNhbWUgbG9vay1hbmQtZmVlbCBhcyB0aGUgcmVzdCBvZiBTdW4gVmlzdWFsIFdvcmtTaG9wLgorCitUaGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gbGluZSBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdmltIHRvIGJ1aWxkIGZvciB1c2UKK3dpdGggU3VuIFZpc3VhbCBXb3JrU2hvcDoKKworICAgICQgQ0M9Y2MgY29uZmlndXJlIC0tZW5hYmxlLXdvcmtzaG9wIC0tZW5hYmxlLWd1aT1tb3RpZiBcCisJLXByZWZpeD08VldTLWluc3RhbGwtZGlyPi9jb250cmliL2NvbnRyaWI2Lzx2aW0tdmVyc2lvbj4KKworVGhlIFZXUy1pbnN0YWxsLWRpciBzaG91bGQgYmUgdGhlIGJhc2UgZGlyZWN0b3J5IHdoZXJlIHlvdXIgU3VuIFZpc3VhbCBXb3JrU2hvcAord2FzIGluc3RhbGxlZC4gQnkgZGVmYXVsdCB0aGlzIGlzIC9vcHQvU1VOV3Nwcm8uIEl0IHdpbGwgbm9ybWFsbHkgcmVxdWlyZQorcm9vdCBwZXJtaXNzaW9ucyB0byBpbnN0YWxsIHRoZSB2aW0gcmVsZWFzZS4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGNoYW5nZSB0aGUKK3N5bWxpbmsgPFZXUy1pbnN0YWxsLWRpcj4vYmluL2d2aW0gdG8gcG9pbnQgdG8gdGhlIHZpbSBpbiB5b3VyIG5ld2x5IGluc3RhbGxlZAorZGlyZWN0b3J5LiBUaGUgPHZpbS12ZXJzaW9uPiBzaG91bGQgYmUgYSB1bmlxdWUgdmVyc2lvbiBzdHJpbmcuIEkgdXNlICJ2aW0iCitjb25jYXRlbmF0ZWQgd2l0aCB0aGUgZXF1aXZhbGVudCBvZiB2ZXJzaW9uLmgncyBWSU1fVkVSU0lPTl9TSE9SVC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis1LiBPYnRhaW5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBYUE0gbGlicmFyeQkqd29ya3Nob3AteHBtKgorCitUaGUgWFBNIGxpYnJhcnkgaXMgcmVxdWlyZWQgdG8gc2hvdyBpbWFnZXMgd2l0aGluIFZpbSB3aXRoIE1vdGlmIG9yIEF0aGVuYS4KK1dpdGhvdXQgaXQgdGhlIHRvb2xiYXIgYW5kIHNpZ25zIHdpbGwgYmUgZGlzYWJsZWQuCisKK1RoZSBYUE0gbGlicmFyeSBpcyBwcm92aWRlIGJ5IEFybmF1ZCBMZSBIb3JzIG9mIHRoZSBGcmVuY2ggTmF0aW9uYWwgSW5zdGl0dXRlCitmb3IgUmVzZWFyY2ggaW4gQ29tcHV0ZXIgU2NpZW5jZSBhbmQgQ29udHJvbC4gSXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbQoraHR0cDovL2tvYWxhLmlsb2cuZnIvZnRwL3B1Yi94cG0uIFRoZSBjdXJyZW50IHJlbGVhc2UsIGFzIG9mIHRoaXMgd3JpdGluZywgaXMKK3hwbS0zLjRrLXNvbGFyaXMudGd6LCB3aGljaCBpcyBhIGd6aXAnZWQgdGFyIGZpbGUuIElmIHlvdSBjcmVhdGUgdGhlIGRpcmVjdG9yeQorL3Vzci9sb2NhbC94cG0gYW5kIHVudGFyIHRoZSBmaWxlIHRoZXJlIHlvdSBjYW4gdXNlIHRoZSB1bmNvbW1lbnRlZCBsaW5lcyBpbgordGhlIE1ha2VmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlbS4gSWYgeW91IHVzZSBhbm90aGVyIHhwbSBkaXJlY3RvcnkgeW91IHdpbGwKK25lZWQgdG8gY2hhbmdlIHRoZSBYUE1fRElSIGluIHNyYy9NYWtlZmlsZS4KKworIHZpbTp0dz03ODp0cz04OmZ0PWhlbHA6bm9ybDoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3h4ZC4xIGIvcnVudGltZS9kb2MveHhkLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhMDUyMQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3h4ZC4xCkBAIC0wLDAgKzEsMzczIEBACisuVEggWFhEIDEgIkF1Z3VzdCAxOTk2IiAiTWFudWFsIHBhZ2UgZm9yIHh4ZCIKKy5cIgorLlwiIDIxc3QgTWF5IDE5OTYKKy5cIiBNYW4gcGFnZSBhdXRob3I6CisuXCIgICAgVG9ueSBOdWdlbnQgPHRvbnlAc2N0bnVnZW4ucHBwLmd1LmVkdS5hdT4gPFQuTnVnZW50QHNjdC5ndS5lZHUuYXU+CisuXCIgICAgQ2hhbmdlcyBieSBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorLlNIIE5BTUUKKy5JIHh4ZAorXC0gbWFrZSBhIGhleGR1bXAgb3IgZG8gdGhlIHJldmVyc2UuCisuU0ggU1lOT1BTSVMKKy5CIHh4ZAorXC1oW2VscF0KKy5icgorLkIgeHhkCitbb3B0aW9uc10gW2luZmlsZSBbb3V0ZmlsZV1dCisuYnIKKy5CIHh4ZAorXC1yW2V2ZXJ0XSBbb3B0aW9uc10gW2luZmlsZSBbb3V0ZmlsZV1dCisuU0ggREVTQ1JJUFRJT04KKy5JIHh4ZAorY3JlYXRlcyBhIGhleCBkdW1wIG9mIGEgZ2l2ZW4gZmlsZSBvciBzdGFuZGFyZCBpbnB1dC4KK0l0IGNhbiBhbHNvIGNvbnZlcnQgYSBoZXggZHVtcCBiYWNrIHRvIGl0cyBvcmlnaW5hbCBiaW5hcnkgZm9ybS4KK0xpa2UKKy5CUiB1dWVuY29kZSgxKQorYW5kCisuQlIgdXVkZWNvZGUoMSkKK2l0IGFsbG93cyB0aGUgdHJhbnNtaXNzaW9uIG9mIGJpbmFyeSBkYXRhIGluIGEgYG1haWwtc2FmZScgQVNDSUkgcmVwcmVzZW50YXRpb24sCitidXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgZGVjb2RpbmcgdG8gc3RhbmRhcmQgb3V0cHV0LgorTW9yZW92ZXIsIGl0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gYmluYXJ5IGZpbGUgcGF0Y2hpbmcuCisuU0ggT1BUSU9OUworSWYgbm8KKy5JIGluZmlsZQoraXMgZ2l2ZW4sIHN0YW5kYXJkIGlucHV0IGlzIHJlYWQuCitJZgorLkkgaW5maWxlCitpcyBzcGVjaWZpZWQgYXMgYQorLlJCIFxgIFwtICcKK2NoYXJhY3RlciwgdGhlbiBpbnB1dCBpcyB0YWtlbiBmcm9tIHN0YW5kYXJkIGlucHV0LgorSWYgbm8KKy5JIG91dGZpbGUKK2lzIGdpdmVuIChvciBhCisuUkIgXGAgXC0gJworY2hhcmFjdGVyIGlzIGluIGl0cyBwbGFjZSksIHJlc3VsdHMgYXJlIHNlbnQgdG8gc3RhbmRhcmQgb3V0cHV0LgorLlBQCitOb3RlIHRoYXQgYSAibGF6eSIgcGFyc2VyIGlzIHVzZWQgd2hpY2ggZG9lcyBub3QgY2hlY2sgZm9yIG1vcmUgdGhhbiB0aGUgZmlyc3QKK29wdGlvbiBsZXR0ZXIsIHVubGVzcyB0aGUgb3B0aW9uIGlzIGZvbGxvd2VkIGJ5IGEgcGFyYW1ldGVyLgorU3BhY2VzIGJldHdlZW4gYSBzaW5nbGUgb3B0aW9uIGxldHRlciBhbmQgaXRzIHBhcmFtZXRlciBhcmUgb3B0aW9uYWwuCitQYXJhbWV0ZXJzIHRvIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBpbiBkZWNpbWFsLCBoZXhhZGVjaW1hbCBvciBvY3RhbAorbm90YXRpb24uCitUaHVzCisuQlIgXC1jOCAsCisuQlIgIlwtYyA4IiAsCisuQiBcLWMgMDEwCithbmQKKy5CIFwtY29scyA4CithcmUgYWxsIGVxdWl2YWxlbnQuCisuUFAKKy5UUAorLklSIFwtYSAiIHwgIiBcLWF1dG9za2lwCit0b2dnbGUgYXV0b3NraXA6IEEgc2luZ2xlICcqJyByZXBsYWNlcyBudWwtbGluZXMuICBEZWZhdWx0IG9mZi4KKy5UUAorLklSIFwtYiAiIHwgIiBcLWJpdHMKK1N3aXRjaCB0byBiaXRzIChiaW5hcnkgZGlnaXRzKSBkdW1wLCByYXRoZXIgdGhhbiBoZXhkdW1wLgorVGhpcyBvcHRpb24gd3JpdGVzIG9jdGV0cyBhcyBlaWdodCBkaWdpdHMgIjEicyBhbmQgIjAicyBpbnN0ZWFkIG9mIGEgbm9ybWFsCitoZXhhY2VjaW1hbCBkdW1wLiBFYWNoIGxpbmUgaXMgcHJlY2VkZWQgYnkgYSBsaW5lIG51bWJlciBpbiBoZXhhZGVjaW1hbCBhbmQKK2ZvbGxvd2VkIGJ5IGFuIGFzY2lpIChvciBlYmNkaWMpIHJlcHJlc2VudGF0aW9uLiBUaGUgY29tbWFuZCBsaW5lIHN3aXRjaGVzCitcLXIsIFwtcCwgXC1pIGRvIG5vdCB3b3JrIHdpdGggdGhpcyBtb2RlLgorLlRQCisuSVIgIlwtYyBjb2xzICIgfCAiIFwtY29scyBjb2xzIgorLklSICJcLWMgY29scyAiIHwgIiBcLWNvbHMgY29scyIKK2Zvcm1hdAorLlJJIDwgY29scyA+CitvY3RldHMgcGVyIGxpbmUuIERlZmF1bHQgMTYgKFwtaTogMTIsIFwtcHM6IDMwLCBcLWI6IDYpLiBNYXggMjU2LgorLlRQCisuSVIgXC1FICIgfCAiIFwtRUJDRElDCitDaGFuZ2UgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB0aGUgcmlnaHRoYW5kIGNvbHVtbiBmcm9tIEFTQ0lJIHRvIEVCQ0RJQy4KK1RoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4gVGhlIG9wdGlvbiBpcworbWVhbmluZ2xlc3MgaW4gY29tYmluYXRpb25zIHdpdGggXC1yLCBcLXAgb3IgXC1pLgorLlRQCisuSVIgIlwtZyBieXRlcyAiIHwgIiBcLWdyb3Vwc2l6ZSBieXRlcyIKK3NlcGVyYXRlIHRoZSBvdXRwdXQgb2YgZXZlcnkKKy5SSSA8IGJ5dGVzID4KK2J5dGVzICh0d28gaGV4IGNoYXJhY3RlcnMgb3IgZWlnaHQgYml0LWRpZ2l0cyBlYWNoKSBieSBhIHdoaXRlc3BhY2UuCitTcGVjaWZ5CisuSSBcLWcgMAordG8gc3VwcHJlc3MgZ3JvdXBpbmcuCisuUkkgPCBCeXRlcyAiPiBkZWZhdWx0cyB0byAiIDIKK2luIG5vcm1hbCBtb2RlIGFuZCBcZkkxXGZQIGluIGJpdHMgbW9kZS4KK0dyb3VwaW5nIGRvZXMgbm90IGFwcGx5IHRvIHBvc3RzY3JpcHQgb3IgaW5jbHVkZSBzdHlsZS4KKy5UUAorLklSIFwtaCAiIHwgIiBcLWhlbHAKK3ByaW50IGEgc3VtbWFyeSBvZiBhdmFpbGFibGUgY29tbWFuZHMgYW5kIGV4aXQuICBObyBoZXggZHVtcGluZyBpcyBwZXJmb3JtZWQuCisuVFAKKy5JUiBcLWkgIiB8ICIgXC1pbmNsdWRlCitvdXRwdXQgaW4gQyBpbmNsdWRlIGZpbGUgc3R5bGUuIEEgY29tcGxldGUgc3RhdGljIGFycmF5IGRlZmluaXRpb24gaXMgd3JpdHRlbgorKG5hbWVkIGFmdGVyIHRoZSBpbnB1dCBmaWxlKSwgdW5sZXNzIHh4ZCByZWFkcyBmcm9tIHN0ZGluLgorLlRQCisuSVIgIlwtbCBsZW4gIiB8ICIgXC1sZW4gbGVuIgorc3RvcCBhZnRlciB3cml0aW5nCisuUkkgIDwgbGVuID4KK29jdGV0cy4KKy5UUAorLklSIFwtcCAiIHwgIiBcLXBzICIgfCAiIFwtcG9zdHNjcmlwdCAiIHwgIiBcLXBsYWluCitvdXRwdXQgaW4gcG9zdHNjcmlwdCBjb250aW51b3VzIGhleGR1bXAgc3R5bGUuIEFsc28ga25vd24gYXMgcGxhaW4gaGV4ZHVtcAorc3R5bGUuCisuVFAKKy5JUiBcLXIgIiB8ICIgXC1yZXZlcnQKK3JldmVyc2Ugb3BlcmF0aW9uOiBjb252ZXJ0IChvciBwYXRjaCkgaGV4ZHVtcCBpbnRvIGJpbmFyeS4KK0lmIG5vdCB3cml0aW5nIHRvIHN0ZG91dCwgeHhkIHdyaXRlcyBpbnRvIGl0cyBvdXRwdXQgZmlsZSB3aXRob3V0IHRydW5jYXRpbmcKK2l0LiBVc2UgdGhlIGNvbWJpbmF0aW9uCisuSSBcLXIgXC1wCit0byByZWFkIHBsYWluIGhleGFkZWNpbWFsIGR1bXBzIHdpdGhvdXQgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gYW5kIHdpdGhvdXQgYQorcGFydGljdWxhciBjb2x1bW4gbGF5b3V0LiBBZGRpdGlvbmFsIFdoaXRlc3BhY2UgYW5kIGxpbmUtYnJlYWtzIGFyZSBhbGxvd2VkCithbnl3aGVyZS4KKy5UUAorLkkgXC1zZWVrIG9mZnNldAorV2hlbiB1c2VkIGFmdGVyCisuSSBcLXIKKzogcmV2ZXJ0IHdpdGgKKy5SSSA8IG9mZnNldCA+CithZGRlZCB0byBmaWxlIHBvc2l0aW9ucyBmb3VuZCBpbiBoZXhkdW1wLgorLlRQCisuSSBcLXMgW1wrXVtcLV1zZWVrCitzdGFydCBhdAorLlJJIDwgc2VlayA+CitieXRlcyBhYnMuIChvciByZWwuKSBpbmZpbGUgb2Zmc2V0LgorXGZJXCsgXGZSaW5kaWNhdGVzIHRoYXQgdGhlIHNlZWsgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3RkaW4gZmlsZSBwb3NpdGlvbgorKG1lYW5pbmdsZXNzIHdoZW4gbm90IHJlYWRpbmcgZnJvbSBzdGRpbikuICBcZklcLSBcZlJpbmRpY2F0ZXMgdGhhdCB0aGUgc2Vlaworc2hvdWxkIGJlIHRoYXQgbWFueSBjaGFyYWN0ZXJzIGZyb20gdGhlIGVuZCBvZiB0aGUgaW5wdXQgKG9yIGlmIGNvbWJpbmVkIHdpdGgKK1xmSSBcKyBcZlI6IGJlZm9yZSB0aGUgY3VycmVudCBzdGRpbiBmaWxlIHBvc2l0aW9uKS4KK1dpdGhvdXQgXC1zIG9wdGlvbiwgeHhkIHN0YXJ0cyBhdCB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLgorLlRQCisuSSBcLXUKK3VzZSB1cHBlciBjYXNlIGhleCBsZXR0ZXJzLiBEZWZhdWx0IGlzIGxvd2VyIGNhc2UuCisuVFAKKy5JUiBcLXYgIiB8ICIgXC12ZXJzaW9uCitzaG93IHZlcnNpb24gc3RyaW5nLgorLlNIIENBVkVBVFMKKy5QUAorLkkgeHhkIFwtcgoraGFzIHNvbWUgYnVpbHRpbiBtYWdpYyB3aGlsZSBldmFsdWF0aW5nIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uLgorSWYgdGhlIG91cHV0IGZpbGUgaXMgc2Vla2FibGUsIHRoZW4gdGhlIGxpbmVudW1iZXJzIGF0IHRoZSBzdGFydCBvZiBlYWNoCitoZXhkdW1wIGxpbmUgbWF5IGJlIG91dCBvZiBvcmRlciwgbGluZXMgbWF5IGJlIG1pc3NpbmcsIG9yIG92ZXJsYXBwaW5nLiBJbgordGhlc2UgY2FzZXMgeHhkIHdpbGwgbHNlZWsoMikgdG8gdGhlIG5leHQgcG9zaXRpb24uIElmIHRoZSBvdXRwdXQgZmlsZSBpcyBub3QKK3NlZWthYmxlLCBvbmx5IGdhcHMgYXJlIGFsbG93ZWQsIHdoaWNoIHdpbGwgYmUgZmlsbGVkIGJ5IG51bGwtYnl0ZXMuCisuUFAKKy5JIHh4ZCBcLXIKK25ldmVyIGdlbmVyYXRlcyBwYXJzZSBlcnJvcnMuIEdhcmJhZ2UgaXMgc2lsZW50bHkgc2tpcHBlZC4KKy5QUAorV2hlbiBlZGl0aW5nIGhleGR1bXBzLCBwbGVhc2Ugbm90ZSB0aGF0CisuSSB4eGQgXC1yCitza2lwcyBldmVyeXRoaW5nIG9uIHRoZSBpbnB1dCBsaW5lIGFmdGVyIHJlYWRpbmcgZW5vdWdoIGNvbHVtbnMgb2YgaGV4YWRlY2ltYWwKK2RhdGEgKHNlZSBvcHRpb24gXC1jKS4gVGhpcyBhbHNvIG1lYW5zLCB0aGF0IGNoYW5nZXMgdG8gdGhlIHByaW50YWJsZSBhc2NpaSAob3IKK2ViY2RpYykgY29sdW1ucyBhcmUgYWx3YXlzIGlnbm9yZWQuIFJldmVydGluZyBhIHBsYWluIChvciBwb3N0c2NyaXB0KSBzdHlsZQoraGV4ZHVtcCB3aXRoIHh4ZCBcLXIgXC1wIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgY29ycmVjdCBudW1iZXIgb2YgY29sdW1ucy4gSGVyZSBhbiB0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBwYWlyIG9mIGhleC1kaWdpdHMgaXMgaW50ZXJwcmV0ZWQuCisuUFAKK05vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorLmJyCitcZkklIHh4ZCBcLWkgZmlsZVxmUgorLmJyCithbmQKKy5icgorXGZJJSB4eGQgXC1pIFw8IGZpbGVcZlIKKy5QUAorLkkgeHhkIFwtcyBcK3NlZWsKK21heSBiZSBkaWZmZXJlbnQgZnJvbQorLkkgeHhkIFwtcyBzZWVrCissIGFzIGxzZWVrKDIpIGlzIHVzZWQgdG8gInJld2luZCIgaW5wdXQuICBBICcrJworbWFrZXMgYSBkaWZmZXJlbmNlIGlmIHRoZSBpbnB1dCBzb3VyY2UgaXMgc3RkaW4sIGFuZCBpZiBzdGRpbidzIGZpbGUgcG9zaXRpb24KK2lzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgYnkgdGhlIHRpbWUgeHhkIGlzIHN0YXJ0ZWQgYW5kIGdpdmVuIGl0cyBpbnB1dC4KK1RoZSBmb2xsb3dpbmcgZXhhbXBsZXMgbWF5IGhlbHAgdG8gY2xhcmlmeSAob3IgZnVydGhlciBjb25mdXNlISkuLi4KKy5QUAorUmV3aW5kIHN0ZGluIGJlZm9yZSByZWFkaW5nOyBuZWVkZWQgYmVjYXVzZSB0aGUgYGNhdCcgaGFzIGFscmVhZHkgcmVhZCB0byB0aGUKK2VuZCBvZiBzdGRpbi4KKy5icgorXGZJJSBzaCBcLWMgJ2NhdCA+IHBsYWluX2NvcHk7IHh4ZCBcLXMgMCA+IGhleF9jb3B5JyA8IGZpbGUKKy5QUAorSGV4ZHVtcCBmcm9tIGZpbGUgcG9zaXRpb24gMHg0ODAgKD0xMDI0KzEyOCkgb253YXJkcy4KK1RoZSBgKycgc2lnbiBtZWFucyAicmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24iLCB0aHVzIHRoZSBgMTI4JyBhZGRzIHRvCit0aGUgMWsgd2hlcmUgZGQgbGVmdCBvZmYuCisuYnIKK1xmSSUgc2ggXC1jICdkZCBvZj1wbGFpbl9zbmlwcGV0IGJzPTFrIGNvdW50PTE7IHh4ZCBcLXMgKzEyOCA+IGhleF9zbmlwcGV0JyA8IGZpbGUKKy5QUAorSGV4ZHVtcCBmcm9tIGZpbGUgcG9zaXRpb24gMHgxMDAgKCA9IDEwMjQtNzY4KSBvbi4KKy5icgorXGZJJSBzaCBcLWMgJ2RkIG9mPXBsYWluX3NuaXBwZXQgYnM9MWsgY291bnQ9MTsgeHhkIFwtcyArLTc2OCA+IGhleF9zbmlwcGV0JyA8IGZpbGUKKy5QUAorSG93ZXZlciwgdGhpcyBpcyBhIHJhcmUgc2l0dWF0aW9uIGFuZCB0aGUgdXNlIG9mIGArJyBpcyByYXJlbHkgbmVlZGVkLgordGhlIGF1dGhvciBwcmVmZXJzIHRvIG1vbml0b3IgdGhlIGVmZmVjdCBvZiB4eGQgd2l0aCBzdHJhY2UoMSkgb3IgdHJ1c3MoMSksIHdoZW5ldmVyIFwtcyBpcyB1c2VkLgorLlNIIEVYQU1QTEVTCisuUFAKKy5icgorUHJpbnQgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IHRocmVlIGxpbmVzIChoZXggMHgzMCBieXRlcykgb2YKKy5CIGZpbGUKK1wuCisuYnIKK1xmSSUgeHhkIFwtcyAweDMwIGZpbGUKKy5QUAorLmJyCitQcmludCAzIGxpbmVzIChoZXggMHgzMCBieXRlcykgZnJvbSB0aGUgZW5kIG9mCisuQiBmaWxlCitcLgorLmJyCitcZkklIHh4ZCBcLXMgXC0weDMwIGZpbGUKKy5QUAorLmJyCitQcmludCAxMjAgYnl0ZXMgYXMgY29udGludW91cyBoZXhkdW1wIHdpdGggNDAgb2N0ZXRzIHBlciBsaW5lLgorLmJyCitcZkklIHh4ZCBcLWwgMTIwIFwtcHMgXC1jIDIwIHh4ZC4xXGZSCisuYnIKKzJlNTQ0ODIwNTg1ODQ0MjAzMTIwMjI0ZDYxNmU3NTYxNmMyMDcwNjEKKy5icgorNjc2NTIwNjY2ZjcyMjA3ODc4NjQyMjBhMmU1YzIyMGEyZTVjMjIyMAorLmJyCiszMjMxNzM3NDIwNGQ2MTc5MjAzMTM5MzkzNjBhMmU1YzIyMjA0ZDYxCisuYnIKKzZlMjA3MDYxNjc2NTIwNjE3NTc0Njg2ZjcyM2EwYTJlNWMyMjIwMjAKKy5icgorMjAyMDU0NmY2ZTc5MjA0ZTc1Njc2NTZlNzQyMDNjNzQ2ZjZlNzk0MAorLmJyCis3MzYzNzQ2ZTc1Njc2NTZlMmU3MDcwNzAyZTY3NzUyZTY1NjQ3NTJlCisuYnIKKworLmJyCitIZXhkdW1wIHRoZSBmaXJzdCAxMjAgYnl0ZXMgb2YgdGhpcyBtYW4gcGFnZSB3aXRoIDEyIG9jdGV0cyBwZXIgbGluZS4KKy5icgorXGZJJSB4eGQgXC1sIDEyMCBcLWMgMTIgeHhkLjFcZlIKKy5icgorMDAwMDAwMDogMmU1NCA0ODIwIDU4NTggNDQyMCAzMTIwIDIyNGQgIC5USCBYWEQgMSAiTQorLmJyCiswMDAwMDBjOiA2MTZlIDc1NjEgNmMyMCA3MDYxIDY3NjUgMjA2NiAgYW51YWwgcGFnZSBmCisuYnIKKzAwMDAwMTg6IDZmNzIgMjA3OCA3ODY0IDIyMGEgMmU1YyAyMjBhICBvciB4eGQiLi5cXCIuCisuYnIKKzAwMDAwMjQ6IDJlNWMgMjIyMCAzMjMxIDczNzQgMjA0ZCA2MTc5ICAuXFwiIDIxc3QgTWF5CisuYnIKKzAwMDAwMzA6IDIwMzEgMzkzOSAzNjBhIDJlNWMgMjIyMCA0ZDYxICAgMTk5Ni4uXFwiIE1hCisuYnIKKzAwMDAwM2M6IDZlMjAgNzA2MSA2NzY1IDIwNjEgNzU3NCA2ODZmICBuIHBhZ2UgYXV0aG8KKy5icgorMDAwMDA0ODogNzIzYSAwYTJlIDVjMjIgMjAyMCAyMDIwIDU0NmYgIHI6Li5cXCIgICAgVG8KKy5icgorMDAwMDA1NDogNmU3OSAyMDRlIDc1NjcgNjU2ZSA3NDIwIDNjNzQgIG55IE51Z2VudCA8dAorLmJyCiswMDAwMDYwOiA2ZjZlIDc5NDAgNzM2MyA3NDZlIDc1NjcgNjU2ZSAgb255QHNjdG51Z2VuCisuYnIKKzAwMDAwNmM6IDJlNzAgNzA3MCAyZTY3IDc1MmUgNjU2NCA3NTJlICAucHBwLmd1LmVkdS4KKy5QUAorLmJyCitEaXNwbGF5IGp1c3QgdGhlIGRhdGUgZnJvbSB0aGUgZmlsZSB4eGQuMQorLmJyCitcZkklIHh4ZCBcLXMgMHgyOCBcLWwgMTIgXC1jIDEyIHh4ZC4xXGZSCisuYnIKKzAwMDAwMjg6IDMyMzEgNzM3NCAyMDRkIDYxNzkgMjAzMSAzOTM5ICAyMXN0IE1heSAxOTkKKy5QUAorLmJyCitDb3B5CisuQiBpbnB1dF9maWxlCit0bworLkIgb3V0cHV0X2ZpbGUKK2FuZCBwcmVwZW5kIDEwMCBieXRlcyBvZiB2YWx1ZSAweDAwLgorLmJyCitcZkklIHh4ZCBpbnB1dF9maWxlIHwgeHhkIFwtciBcLXMgMTAwIFw+IG91dHB1dF9maWxlXGZSCisuYnIKKworLmJyCitQYXRjaCB0aGUgZGF0ZSBpbiB0aGUgZmlsZSB4eGQuMQorLmJyCitcZkklIGVjaG8gJzAwMDAwMjk6IDM1NzQgNjgnIHwgeHhkIFwtciBcLSB4eGQuMVxmUgorLmJyCitcZkklIHh4ZCBcLXMgMHgyOCBcLWwgMTIgXC1jIDEyIHh4ZC4xXGZSCisuYnIKKzAwMDAwMjg6IDMyMzUgNzQ2OCAyMDRkIDYxNzkgMjAzMSAzOTM5ICAyNXRoIE1heSAxOTkKKy5QUAorLmJyCitDcmVhdGUgYSA2NTUzNyBieXRlIGZpbGUgd2l0aCBhbGwgYnl0ZXMgMHgwMCwKK2V4Y2VwdCBmb3IgdGhlIGxhc3Qgb25lIHdoaWNoIGlzICdBJyAoaGV4IDB4NDEpLgorLmJyCitcZkklIGVjaG8gJzAxMDAwMDogNDEnIHwgeHhkIFwtciBcPiBmaWxlXGZSCisuUFAKKy5icgorSGV4ZHVtcCB0aGlzIGZpbGUgd2l0aCBhdXRvc2tpcC4KKy5icgorXGZJJSB4eGQgXC1hIFwtYyAxMiBmaWxlXGZSCisuYnIKKzAwMDAwMDA6IDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwICAuLi4uLi4uLi4uLi4KKy5icgorKgorLmJyCiswMDBmZmZjOiAwMDAwIDAwMDAgNDAgICAgICAgICAgICAgICAgICAgLi4uLkEKKy5QUAorQ3JlYXRlIGEgMSBieXRlIGZpbGUgY29udGFpbmluZyBhIHNpbmdsZSAnQScgY2hhcmFjdGVyLgorVGhlIG51bWJlciBhZnRlciAnXC1yIFwtcycgYWRkcyB0byB0aGUgbGluZW51bWJlcnMgZm91bmQgaW4gdGhlIGZpbGU7CitpbiBlZmZlY3QsIHRoZSBsZWFkaW5nIGJ5dGVzIGFyZSBzdXBwcmVzc2VkLgorLmJyCitcZkklIGVjaG8gJzAxMDAwMDogNDEnIHwgeHhkIFwtciBcLXMgXC0weDEwMDAwIFw+IGZpbGVcZlIKKy5QUAorVXNlIHh4ZCBhcyBhIGZpbHRlciB3aXRoaW4gYW4gZWRpdG9yIHN1Y2ggYXMKKy5CIHZpbSgxKQordG8gaGV4ZHVtcCBhIHJlZ2lvbiBtYXJrZWQgYmV0d2VlbiBgYScgYW5kIGB6Jy4KKy5icgorXGZJOidhLCd6IXh4ZFxmUgorLlBQCitVc2UgeHhkIGFzIGEgZmlsdGVyIHdpdGhpbiBhbiBlZGl0b3Igc3VjaCBhcworLkIgdmltKDEpCit0byByZWNvdmVyIGEgYmluYXJ5IGhleGR1bXAgbWFya2VkIGJldHdlZW4gYGEnIGFuZCBgeicuCisuYnIKK1xmSTonYSwneiF4eGQgXC1yXGZSCisuUFAKK1VzZSB4eGQgYXMgYSBmaWx0ZXIgd2l0aGluIGFuIGVkaXRvciBzdWNoIGFzCisuQiB2aW0oMSkKK3RvIHJlY292ZXIgb25lIGxpbmUgb2YgYSBoZXhkdW1wLiAgTW92ZSB0aGUgY3Vyc29yIG92ZXIgdGhlIGxpbmUgYW5kIHR5cGU6CisuYnIKK1xmSSEheHhkIFwtclxmUgorLlBQCitSZWFkIHNpbmdsZSBjaGFyYWN0ZXJzIGZyb20gYSBzZXJpYWwgbGluZQorLmJyCitcZkklIHh4ZCBcLWMxIDwgL2Rldi90ZXJtL2IgJlxmUgorLmJyCitcZkklIHN0dHkgPCAvZGV2L3Rlcm0vYiBcLWVjaG8gXC1vcG9zdCBcLWlzaWcgXC1pY2Fub24gbWluIDFcZlIKKy5icgorXGZJJSBlY2hvIFwtbiBmb28gPiAvZGV2L3Rlcm0vYlxmUgorLlBQCisuU0ggIlJFVFVSTiBWQUxVRVMiCitUaGUgZm9sbG93aW5nIGVycm9yIHZhbHVlcyBhcmUgcmV0dXJuZWQ6CisuVFAKKzAKK25vIGVycm9ycyBlbmNvdW50ZXJlZC4KKy5UUAorXC0xCitvcGVyYXRpb24gbm90IHN1cHBvcnRlZCAoCisuSSB4eGQgXC1yIFwtaQorc3RpbGwgaW1wb3NzaWJsZSkuCisuVFAKKzEKK2Vycm9yIHdoaWxlIHBhcnNpbmcgb3B0aW9ucy4KKy5UUAorMgorcHJvYmxlbXMgd2l0aCBpbnB1dCBmaWxlLgorLlRQCiszCitwcm9ibGVtcyB3aXRoIG91dHB1dCBmaWxlLgorLlRQCis0LDUKK2Rlc2lyZWQgc2VlayBwb3NpdGlvbiBpcyB1bnJlYWNoYWJsZS4KKy5TSCAiU0VFIEFMU08iCit1dWVuY29kZSgxKSwgdXVkZWNvZGUoMSksIHBhdGNoKDEpCisuYnIKKy5TSCBXQVJOSU5HUworVGhlIHRvb2xzIHdlaXJkbmVzcyBtYXRjaGVzIGl0cyBjcmVhdG9ycyBicmFpbi4KK1VzZSBlbnRpcmVseSBhdCB5b3VyIG93biByaXNrLiBDb3B5IGZpbGVzLiBUcmFjZSBpdC4gQmVjb21lIGEgd2l6YXJkLgorLmJyCisuU0ggVkVSU0lPTgorVGhpcyBtYW51YWwgcGFnZSBkb2N1bWVudHMgeHhkIHZlcnNpb24gMS43CisuU0ggQVVUSE9SCisuYnIKKyhjKSAxOTkwLTE5OTcgYnkgSnVlcmdlbiBXZWlnZXJ0CisuYnIKKzxqbndlaWdlckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKy5MUAorRGlzdHJpYnV0ZSBmcmVlbHkgYW5kIGNyZWRpdCBtZSwKKy5icgorbWFrZSBtb25leSBhbmQgc2hhcmUgd2l0aCBtZSwKKy5icgorbG9zZSBtb25leSBhbmQgZG9uJ3QgYXNrIG1lLgorLlBQCitNYW51YWwgcGFnZSBzdGFydGVkIGJ5IFRvbnkgTnVnZW50CisuYnIKKzx0b255QHNjdG51Z2VuLnBwcC5ndS5lZHUuYXU+IDxULk51Z2VudEBzY3QuZ3UuZWR1LmF1PgorLmJyCitTbWFsbCBjaGFuZ2VzIGJ5IEJyYW0gTW9vbGVuYWFyLgorRWRpdGVkIGJ5IEp1ZXJnZW4gV2VpZ2VydC4KKy5QUApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MveHhkLm1hbiBiL3J1bnRpbWUvZG9jL3h4ZC5tYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiMjJkNgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL3h4ZC5tYW4KQEAgLTAsMCArMSwzOTYgQEAKKworCisKK1hYRCgxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFhEKDEpCisKKworTkFNRQorICAgICAgIHh4ZCAtIG1ha2UgYSBoZXhkdW1wIG9yIGRvIHRoZSByZXZlcnNlLgorCitTWU5PUFNJUworICAgICAgIHh4ZCAtaFtlbHBdCisgICAgICAgeHhkIFtvcHRpb25zXSBbaW5maWxlIFtvdXRmaWxlXV0KKyAgICAgICB4eGQgLXJbZXZlcnRdIFtvcHRpb25zXSBbaW5maWxlIFtvdXRmaWxlXV0KKworREVTQ1JJUFRJT04KKyAgICAgICB4eGQgIGNyZWF0ZXMgYSBoZXggZHVtcCBvZiBhIGdpdmVuIGZpbGUgb3Igc3RhbmRhcmQgaW5wdXQuCisgICAgICAgSXQgY2FuIGFsc28gY29udmVydCBhIGhleCBkdW1wIGJhY2sgdG8gaXRzIG9yaWdpbmFsIGJpbmFyeQorICAgICAgIGZvcm0uICAgTGlrZSAgdXVlbmNvZGUoMSkgIGFuZCAgdXVkZWNvZGUoMSkgIGl0IGFsbG93cyB0aGUKKyAgICAgICB0cmFuc21pc3Npb24gb2YgYmluYXJ5IGRhdGEgaW4gYSBgbWFpbC1zYWZlJyBBU0NJSSAgcmVwcmUtCisgICAgICAgc2VudGF0aW9uLCAgYnV0ICBoYXMgdGhlIGFkdmFudGFnZSBvZiBkZWNvZGluZyB0byBzdGFuZGFyZAorICAgICAgIG91dHB1dC4gIE1vcmVvdmVyLCBpdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtICBiaW5hcnkgIGZpbGUKKyAgICAgICBwYXRjaGluZy4KKworT1BUSU9OUworICAgICAgIElmICBubyBpbmZpbGUgaXMgZ2l2ZW4sIHN0YW5kYXJkIGlucHV0IGlzIHJlYWQuICBJZiBpbmZpbGUKKyAgICAgICBpcyBzcGVjaWZpZWQgYXMgYSBgLScgY2hhcmFjdGVyLCB0aGVuIGlucHV0IGlzIHRha2VuICBmcm9tCisgICAgICAgc3RhbmRhcmQgIGlucHV0LiAgSWYgbm8gb3V0ZmlsZSBpcyBnaXZlbiAob3IgYSBgLScgY2hhcmFjLQorICAgICAgIHRlciBpcyBpbiBpdHMgcGxhY2UpLCByZXN1bHRzIGFyZSBzZW50IHRvIHN0YW5kYXJkIG91dHB1dC4KKworICAgICAgIE5vdGUgdGhhdCBhICJsYXp5IiBwYXJzZXIgaXMgdXNlZCB3aGljaCBkb2VzIG5vdCBjaGVjayBmb3IKKyAgICAgICBtb3JlIHRoYW4gdGhlIGZpcnN0IG9wdGlvbiBsZXR0ZXIsIHVubGVzcyAgdGhlICBvcHRpb24gIGlzCisgICAgICAgZm9sbG93ZWQgIGJ5ICBhIHBhcmFtZXRlci4gIFNwYWNlcyBiZXR3ZWVuIGEgc2luZ2xlIG9wdGlvbgorICAgICAgIGxldHRlciBhbmQgaXRzICBwYXJhbWV0ZXIgIGFyZSAgb3B0aW9uYWwuICAgUGFyYW1ldGVycyAgdG8KKyAgICAgICBvcHRpb25zICBjYW4gYmUgc3BlY2lmaWVkIGluIGRlY2ltYWwsIGhleGFkZWNpbWFsIG9yIG9jdGFsCisgICAgICAgbm90YXRpb24uICBUaHVzIC1jOCwgLWMgOCwgLWMgMDEwICBhbmQgIC1jb2xzICA4ICBhcmUgIGFsbAorICAgICAgIGVxdWl2YWxlbnQuCisKKworICAgICAgIC1hIHwgLWF1dG9za2lwCisgICAgICAgICAgICAgIHRvZ2dsZSAgYXV0b3NraXA6ICBBIHNpbmdsZSAnKicgcmVwbGFjZXMgbnVsLWxpbmVzLgorICAgICAgICAgICAgICBEZWZhdWx0IG9mZi4KKworICAgICAgIC1iIHwgLWJpdHMKKyAgICAgICAgICAgICAgU3dpdGNoIHRvIGJpdHMgKGJpbmFyeSBkaWdpdHMpICBkdW1wLCAgcmF0aGVyICB0aGFuCisgICAgICAgICAgICAgIGhleGR1bXAuICBUaGlzIG9wdGlvbiB3cml0ZXMgb2N0ZXRzIGFzIGVpZ2h0IGRpZ2l0cworICAgICAgICAgICAgICAiMSJzIGFuZCAiMCJzIGluc3RlYWQgb2YgYSBub3JtYWwgaGV4YWNlY2ltYWwgZHVtcC4KKyAgICAgICAgICAgICAgRWFjaCBsaW5lIGlzIHByZWNlZGVkIGJ5IGEgbGluZSBudW1iZXIgaW4gaGV4YWRlY2ktCisgICAgICAgICAgICAgIG1hbCBhbmQgZm9sbG93ZWQgYnkgYW4gYXNjaWkgKG9yIGViY2RpYykgIHJlcHJlc2VuLQorICAgICAgICAgICAgICB0YXRpb24uIFRoZSBjb21tYW5kIGxpbmUgc3dpdGNoZXMgLXIsIC1wLCAtaSBkbyBub3QKKyAgICAgICAgICAgICAgd29yayB3aXRoIHRoaXMgbW9kZS4KKworICAgICAgIC1jIGNvbHMgfCAtY29scyBjb2xzCisgICAgICAgICAgICAgIC1jIGNvbHMgfCAtY29scyBjb2xzIGZvcm1hdCA8Y29scz4gb2N0ZXRzIHBlciBsaW5lLgorICAgICAgICAgICAgICBEZWZhdWx0IDE2ICgtaTogMTIsIC1wczogMzAsIC1iOiA2KS4gTWF4IDI1Ni4KKworICAgICAgIC1FIHwgLUVCQ0RJQworICAgICAgICAgICAgICBDaGFuZ2UgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB0aGUgcmlnaHRoYW5kIGNvbC0KKyAgICAgICAgICAgICAgdW1uIGZyb20gQVNDSUkgdG8gRUJDRElDLiAgVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlCisgICAgICAgICAgICAgIGhleGFkZWNpbWFsICByZXByZXNlbnRhdGlvbi4gVGhlIG9wdGlvbiBpcyBtZWFuaW5nLQorICAgICAgICAgICAgICBsZXNzIGluIGNvbWJpbmF0aW9ucyB3aXRoIC1yLCAtcCBvciAtaS4KKworCisKK01hbnVhbCBwYWdlIGZvciB4eGQgICAgICAgIEF1Z3VzdCAxOTk2ICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKworCisKKworWFhEKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWEQoMSkKKworCisgICAgICAgLWcgYnl0ZXMgfCAtZ3JvdXBzaXplIGJ5dGVzCisgICAgICAgICAgICAgIHNlcGVyYXRlIHRoZSBvdXRwdXQgb2YgZXZlcnkgPGJ5dGVzPiBieXRlcyAodHdvIGhleAorICAgICAgICAgICAgICBjaGFyYWN0ZXJzICBvciAgZWlnaHQgYml0LWRpZ2l0cyBlYWNoKSBieSBhIHdoaXRlcy0KKyAgICAgICAgICAgICAgcGFjZS4gIFNwZWNpZnkgLWcgMCB0byBzdXBwcmVzcyBncm91cGluZy4gICA8Qnl0ZXM+CisgICAgICAgICAgICAgIGRlZmF1bHRzICB0byAgMiAgaW4gbm9ybWFsIG1vZGUgYW5kIDEgaW4gYml0cyBtb2RlLgorICAgICAgICAgICAgICBHcm91cGluZyBkb2VzIG5vdCBhcHBseSB0byAgcG9zdHNjcmlwdCAgb3IgIGluY2x1ZGUKKyAgICAgICAgICAgICAgc3R5bGUuCisKKyAgICAgICAtaCB8IC1oZWxwCisgICAgICAgICAgICAgIHByaW50IGEgc3VtbWFyeSBvZiBhdmFpbGFibGUgY29tbWFuZHMgYW5kIGV4aXQuICBObworICAgICAgICAgICAgICBoZXggZHVtcGluZyBpcyBwZXJmb3JtZWQuCisKKyAgICAgICAtaSB8IC1pbmNsdWRlCisgICAgICAgICAgICAgIG91dHB1dCBpbiBDIGluY2x1ZGUgZmlsZSBzdHlsZS4gQSAgY29tcGxldGUgIHN0YXRpYworICAgICAgICAgICAgICBhcnJheSAgZGVmaW5pdGlvbiBpcyB3cml0dGVuIChuYW1lZCBhZnRlciB0aGUgaW5wdXQKKyAgICAgICAgICAgICAgZmlsZSksIHVubGVzcyB4eGQgcmVhZHMgZnJvbSBzdGRpbi4KKworICAgICAgIC1sIGxlbiB8IC1sZW4gbGVuCisgICAgICAgICAgICAgIHN0b3AgYWZ0ZXIgd3JpdGluZyA8bGVuPiBvY3RldHMuCisKKyAgICAgICAtcCB8IC1wcyB8IC1wb3N0c2NyaXB0IHwgLXBsYWluCisgICAgICAgICAgICAgIG91dHB1dCBpbiBwb3N0c2NyaXB0IGNvbnRpbnVvdXMgaGV4ZHVtcCBzdHlsZS4gQWxzbworICAgICAgICAgICAgICBrbm93biBhcyBwbGFpbiBoZXhkdW1wIHN0eWxlLgorCisgICAgICAgLXIgfCAtcmV2ZXJ0CisgICAgICAgICAgICAgIHJldmVyc2UgIG9wZXJhdGlvbjogY29udmVydCAob3IgcGF0Y2gpIGhleGR1bXAgaW50bworICAgICAgICAgICAgICBiaW5hcnkuICBJZiBub3Qgd3JpdGluZyB0byBzdGRvdXQsIHh4ZCB3cml0ZXMgIGludG8KKyAgICAgICAgICAgICAgaXRzIG91dHB1dCBmaWxlIHdpdGhvdXQgdHJ1bmNhdGluZyBpdC4gVXNlIHRoZSBjb20tCisgICAgICAgICAgICAgIGJpbmF0aW9uIC1yIC1wICB0byAgcmVhZCAgcGxhaW4gIGhleGFkZWNpbWFsICBkdW1wcworICAgICAgICAgICAgICB3aXRob3V0ICBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiBhbmQgd2l0aG91dCBhIHBhci0KKyAgICAgICAgICAgICAgdGljdWxhciBjb2x1bW4gbGF5b3V0LiAgQWRkaXRpb25hbCAgV2hpdGVzcGFjZSAgYW5kCisgICAgICAgICAgICAgIGxpbmUtYnJlYWtzIGFyZSBhbGxvd2VkIGFueXdoZXJlLgorCisgICAgICAgLXNlZWsgb2Zmc2V0CisgICAgICAgICAgICAgIFdoZW4gIHVzZWQgYWZ0ZXIgLXIgOiByZXZlcnQgd2l0aCA8b2Zmc2V0PiBhZGRlZCB0bworICAgICAgICAgICAgICBmaWxlIHBvc2l0aW9ucyBmb3VuZCBpbiBoZXhkdW1wLgorCisgICAgICAgLXMgWytdWy1dc2VlaworICAgICAgICAgICAgICBzdGFydCBhdCA8c2Vlaz4gYnl0ZXMgYWJzLiAob3IgcmVsLikgaW5maWxlIG9mZnNldC4KKyAgICAgICAgICAgICAgKyAgaW5kaWNhdGVzICB0aGF0IHRoZSBzZWVrIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXItCisgICAgICAgICAgICAgIHJlbnQgc3RkaW4gIGZpbGUgIHBvc2l0aW9uICAobWVhbmluZ2xlc3MgIHdoZW4gIG5vdAorICAgICAgICAgICAgICByZWFkaW5nICBmcm9tICBzdGRpbikuICAgLSAgaW5kaWNhdGVzIHRoYXQgdGhlIHNlZWsKKyAgICAgICAgICAgICAgc2hvdWxkIGJlIHRoYXQgbWFueSBjaGFyYWN0ZXJzIGZyb20gdGhlIGVuZCBvZiAgdGhlCisgICAgICAgICAgICAgIGlucHV0IChvciBpZiBjb21iaW5lZCB3aXRoCisgICAgICAgICAgICAgICArICA6ICBiZWZvcmUgIHRoZSAgY3VycmVudCAgc3RkaW4gIGZpbGUgcG9zaXRpb24pLgorICAgICAgICAgICAgICBXaXRob3V0IC1zIG9wdGlvbiwgeHhkIHN0YXJ0cyBhdCB0aGUgIGN1cnJlbnQgIGZpbGUKKyAgICAgICAgICAgICAgcG9zaXRpb24uCisKKyAgICAgICAtdSAgICAgdXNlICB1cHBlciBjYXNlIGhleCBsZXR0ZXJzLiBEZWZhdWx0IGlzIGxvd2VyIGNhc2UuCisKKyAgICAgICAtdiB8IC12ZXJzaW9uCisgICAgICAgICAgICAgIHNob3cgdmVyc2lvbiBzdHJpbmcuCisKKworCisKKworTWFudWFsIHBhZ2UgZm9yIHh4ZCAgICAgICAgQXVndXN0IDE5OTYgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworCisKKworCitYWEQoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhYRCgxKQorCisKK0NBVkVBVFMKKyAgICAgICB4eGQgLXIgaGFzIHNvbWUgYnVpbHRpbiBtYWdpYyB3aGlsZSBldmFsdWF0aW5nIGxpbmUgbnVtYmVyCisgICAgICAgaW5mb3JtYXRpb24uICAgSWYgIHRoZSAgb3VwdXQgIGZpbGUgIGlzIHNlZWthYmxlLCB0aGVuIHRoZQorICAgICAgIGxpbmVudW1iZXJzIGF0IHRoZSBzdGFydCBvZiBlYWNoIGhleGR1bXAgbGluZSBtYXkgIGJlICBvdXQKKyAgICAgICBvZiAgb3JkZXIsICBsaW5lcyBtYXkgYmUgbWlzc2luZywgb3Igb3ZlcmxhcHBpbmcuIEluIHRoZXNlCisgICAgICAgY2FzZXMgeHhkIHdpbGwgbHNlZWsoMikgdG8gdGhlIG5leHQgcG9zaXRpb24uIElmIHRoZSAgb3V0LQorICAgICAgIHB1dCAgZmlsZSAgaXMgIG5vdCAgc2Vla2FibGUsIG9ubHkgZ2FwcyBhcmUgYWxsb3dlZCwgd2hpY2gKKyAgICAgICB3aWxsIGJlIGZpbGxlZCBieSBudWxsLWJ5dGVzLgorCisgICAgICAgeHhkIC1yIG5ldmVyIGdlbmVyYXRlcyBwYXJzZSBlcnJvcnMuIEdhcmJhZ2UgIGlzICBzaWxlbnRseQorICAgICAgIHNraXBwZWQuCisKKyAgICAgICBXaGVuICBlZGl0aW5nICBoZXhkdW1wcywgIHBsZWFzZSAgbm90ZSAgdGhhdCAgeHhkIC1yIHNraXBzCisgICAgICAgZXZlcnl0aGluZyBvbiB0aGUgaW5wdXQgbGluZSBhZnRlciByZWFkaW5nIGVub3VnaCAgY29sdW1ucworICAgICAgIG9mIGhleGFkZWNpbWFsIGRhdGEgKHNlZSBvcHRpb24gLWMpLiBUaGlzIGFsc28gbWVhbnMsIHRoYXQKKyAgICAgICBjaGFuZ2VzIHRvIHRoZSBwcmludGFibGUgYXNjaWkgIChvciAgZWJjZGljKSAgY29sdW1ucyAgYXJlCisgICAgICAgYWx3YXlzICBpZ25vcmVkLiAgUmV2ZXJ0aW5nICBhIHBsYWluIChvciBwb3N0c2NyaXB0KSBzdHlsZQorICAgICAgIGhleGR1bXAgd2l0aCB4eGQgLXIgLXAgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBjb3JyZWN0IG51bS0KKyAgICAgICBiZXIgIG9mICBjb2x1bW5zLiAgSGVyZSBhbiB0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBwYWlyIG9mCisgICAgICAgaGV4LWRpZ2l0cyBpcyBpbnRlcnByZXRlZC4KKworICAgICAgIE5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICAgICAgICUgeHhkIC1pIGZpbGUKKyAgICAgICBhbmQKKyAgICAgICAlIHh4ZCAtaSA8IGZpbGUKKworICAgICAgIHh4ZCAtcyArc2VlayBtYXkgYmUgIGRpZmZlcmVudCAgZnJvbSAgeHhkICAtcyAgc2VlayAgLCAgYXMKKyAgICAgICBsc2VlaygyKSBpcyB1c2VkIHRvICJyZXdpbmQiIGlucHV0LiAgQSAnKycgbWFrZXMgYSBkaWZmZXItCisgICAgICAgZW5jZSBpZiB0aGUgaW5wdXQgc291cmNlIGlzIHN0ZGluLCAgYW5kICBpZiAgc3RkaW4ncyAgZmlsZQorICAgICAgIHBvc2l0aW9uICBpcyAgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSBieSB0aGUgdGltZSB4eGQKKyAgICAgICBpcyBzdGFydGVkIGFuZCBnaXZlbiBpdHMgaW5wdXQuICAgVGhlICBmb2xsb3dpbmcgIGV4YW1wbGVzCisgICAgICAgbWF5IGhlbHAgdG8gY2xhcmlmeSAob3IgZnVydGhlciBjb25mdXNlISkuLi4KKworICAgICAgIFJld2luZCAgc3RkaW4gYmVmb3JlIHJlYWRpbmc7IG5lZWRlZCBiZWNhdXNlIHRoZSBgY2F0JyBoYXMKKyAgICAgICBhbHJlYWR5IHJlYWQgdG8gdGhlIGVuZCBvZiBzdGRpbi4KKyAgICAgICAlIHNoIC1jICdjYXQgPiBwbGFpbl9jb3B5OyB4eGQgLXMgMCA+IGhleF9jb3B5JyA8IGZpbGUKKworICAgICAgIEhleGR1bXAgZnJvbSBmaWxlIHBvc2l0aW9uIDB4NDgwICg9MTAyNCsxMjgpIG9ud2FyZHMuICBUaGUKKyAgICAgICBgKycgIHNpZ24gIG1lYW5zICAicmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24iLCB0aHVzCisgICAgICAgdGhlIGAxMjgnIGFkZHMgdG8gdGhlIDFrIHdoZXJlIGRkIGxlZnQgb2ZmLgorICAgICAgICUgc2ggLWMgJ2RkIG9mPXBsYWluX3NuaXBwZXQgYnM9MWsgY291bnQ9MTsgeHhkIC1zICsxMjggID4KKyAgICAgICBoZXhfc25pcHBldCcgPCBmaWxlCisKKyAgICAgICBIZXhkdW1wIGZyb20gZmlsZSBwb3NpdGlvbiAweDEwMCAoID0gMTAyNC03NjgpIG9uLgorICAgICAgICUgc2ggLWMgJ2RkIG9mPXBsYWluX3NuaXBwZXQgYnM9MWsgY291bnQ9MTsgeHhkIC1zICstNzY4ID4KKyAgICAgICBoZXhfc25pcHBldCcgPCBmaWxlCisKKyAgICAgICBIb3dldmVyLCB0aGlzIGlzIGEgcmFyZSBzaXR1YXRpb24gYW5kIHRoZSB1c2UgIG9mICBgKycgIGlzCisgICAgICAgcmFyZWx5ICBuZWVkZWQuICAgdGhlIGF1dGhvciBwcmVmZXJzIHRvIG1vbml0b3IgdGhlIGVmZmVjdAorICAgICAgIG9mIHh4ZCB3aXRoIHN0cmFjZSgxKSBvciB0cnVzcygxKSwgd2hlbmV2ZXIgLXMgaXMgdXNlZC4KKworRVhBTVBMRVMKKyAgICAgICBQcmludCBldmVyeXRoaW5nIGJ1dCAgdGhlICBmaXJzdCAgdGhyZWUgIGxpbmVzICAoaGV4ICAweDMwCisgICAgICAgYnl0ZXMpIG9mIGZpbGUKKworCisKK01hbnVhbCBwYWdlIGZvciB4eGQgICAgICAgIEF1Z3VzdCAxOTk2ICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKworCisKKworWFhEKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWEQoMSkKKworCisgICAgICAgJSB4eGQgLXMgMHgzMCBmaWxlCisKKyAgICAgICBQcmludCAzIGxpbmVzIChoZXggMHgzMCBieXRlcykgZnJvbSB0aGUgZW5kIG9mIGZpbGUKKyAgICAgICAlIHh4ZCAtcyAtMHgzMCBmaWxlCisKKyAgICAgICBQcmludCAgMTIwICBieXRlcyBhcyBjb250aW51b3VzIGhleGR1bXAgd2l0aCA0MCBvY3RldHMgcGVyCisgICAgICAgbGluZS4KKyAgICAgICAlIHh4ZCAtbCAxMjAgLXBzIC1jIDIwIHh4ZC4xCisgICAgICAgMmU1NDQ4MjA1ODU4NDQyMDMxMjAyMjRkNjE2ZTc1NjE2YzIwNzA2MQorICAgICAgIDY3NjUyMDY2NmY3MjIwNzg3ODY0MjIwYTJlNWMyMjBhMmU1YzIyMjAKKyAgICAgICAzMjMxNzM3NDIwNGQ2MTc5MjAzMTM5MzkzNjBhMmU1YzIyMjA0ZDYxCisgICAgICAgNmUyMDcwNjE2NzY1MjA2MTc1NzQ2ODZmNzIzYTBhMmU1YzIyMjAyMAorICAgICAgIDIwMjA1NDZmNmU3OTIwNGU3NTY3NjU2ZTc0MjAzYzc0NmY2ZTc5NDAKKyAgICAgICA3MzYzNzQ2ZTc1Njc2NTZlMmU3MDcwNzAyZTY3NzUyZTY1NjQ3NTJlCisKKyAgICAgICBIZXhkdW1wIHRoZSBmaXJzdCAxMjAgYnl0ZXMgIG9mICB0aGlzICBtYW4gIHBhZ2UgIHdpdGggIDEyCisgICAgICAgb2N0ZXRzIHBlciBsaW5lLgorICAgICAgICUgeHhkIC1sIDEyMCAtYyAxMiB4eGQuMQorICAgICAgIDAwMDAwMDA6IDJlNTQgNDgyMCA1ODU4IDQ0MjAgMzEyMCAyMjRkICAuVEggWFhEIDEgIk0KKyAgICAgICAwMDAwMDBjOiA2MTZlIDc1NjEgNmMyMCA3MDYxIDY3NjUgMjA2NiAgYW51YWwgcGFnZSBmCisgICAgICAgMDAwMDAxODogNmY3MiAyMDc4IDc4NjQgMjIwYSAyZTVjIDIyMGEgIG9yIHh4ZCIuLlwiLgorICAgICAgIDAwMDAwMjQ6IDJlNWMgMjIyMCAzMjMxIDczNzQgMjA0ZCA2MTc5ICAuXCIgMjFzdCBNYXkKKyAgICAgICAwMDAwMDMwOiAyMDMxIDM5MzkgMzYwYSAyZTVjIDIyMjAgNGQ2MSAgIDE5OTYuLlwiIE1hCisgICAgICAgMDAwMDAzYzogNmUyMCA3MDYxIDY3NjUgMjA2MSA3NTc0IDY4NmYgIG4gcGFnZSBhdXRobworICAgICAgIDAwMDAwNDg6IDcyM2EgMGEyZSA1YzIyIDIwMjAgMjAyMCA1NDZmICByOi4uXCIgICAgVG8KKyAgICAgICAwMDAwMDU0OiA2ZTc5IDIwNGUgNzU2NyA2NTZlIDc0MjAgM2M3NCAgbnkgTnVnZW50IDx0CisgICAgICAgMDAwMDA2MDogNmY2ZSA3OTQwIDczNjMgNzQ2ZSA3NTY3IDY1NmUgIG9ueUBzY3RudWdlbgorICAgICAgIDAwMDAwNmM6IDJlNzAgNzA3MCAyZTY3IDc1MmUgNjU2NCA3NTJlICAucHBwLmd1LmVkdS4KKworICAgICAgIERpc3BsYXkganVzdCB0aGUgZGF0ZSBmcm9tIHRoZSBmaWxlIHh4ZC4xCisgICAgICAgJSB4eGQgLXMgMHgyOCAtbCAxMiAtYyAxMiB4eGQuMQorICAgICAgIDAwMDAwMjg6IDMyMzEgNzM3NCAyMDRkIDYxNzkgMjAzMSAzOTM5ICAyMXN0IE1heSAxOTkKKworICAgICAgIENvcHkgIGlucHV0X2ZpbGUgIHRvICBvdXRwdXRfZmlsZSBhbmQgcHJlcGVuZCAxMDAgYnl0ZXMgb2YKKyAgICAgICB2YWx1ZSAweDAwLgorICAgICAgICUgeHhkIGlucHV0X2ZpbGUgfCB4eGQgLXIgLXMgMTAwID4gb3V0cHV0X2ZpbGUKKworICAgICAgIFBhdGNoIHRoZSBkYXRlIGluIHRoZSBmaWxlIHh4ZC4xCisgICAgICAgJSBlY2hvICcwMDAwMDI5OiAzNTc0IDY4JyB8IHh4ZCAtciAtIHh4ZC4xCisgICAgICAgJSB4eGQgLXMgMHgyOCAtbCAxMiAtYyAxMiB4eGQuMQorICAgICAgIDAwMDAwMjg6IDMyMzUgNzQ2OCAyMDRkIDYxNzkgMjAzMSAzOTM5ICAyNXRoIE1heSAxOTkKKworICAgICAgIENyZWF0ZSBhIDY1NTM3IGJ5dGUgZmlsZSB3aXRoIGFsbCBieXRlcyAweDAwLCAgZXhjZXB0ICBmb3IKKyAgICAgICB0aGUgbGFzdCBvbmUgd2hpY2ggaXMgJ0EnIChoZXggMHg0MSkuCisgICAgICAgJSBlY2hvICcwMTAwMDA6IDQxJyB8IHh4ZCAtciA+IGZpbGUKKworICAgICAgIEhleGR1bXAgdGhpcyBmaWxlIHdpdGggYXV0b3NraXAuCisgICAgICAgJSB4eGQgLWEgLWMgMTIgZmlsZQorICAgICAgIDAwMDAwMDA6IDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwICAuLi4uLi4uLi4uLi4KKyAgICAgICAqCisgICAgICAgMDAwZmZmYzogMDAwMCAwMDAwIDQwICAgICAgICAgICAgICAgICAgIC4uLi5BCisKKyAgICAgICBDcmVhdGUgIGEgIDEgIGJ5dGUgZmlsZSBjb250YWluaW5nIGEgc2luZ2xlICdBJyBjaGFyYWN0ZXIuCisgICAgICAgVGhlIG51bWJlciBhZnRlciAnLXIgLXMnIGFkZHMgdG8gdGhlIGxpbmVudW1iZXJzIGZvdW5kICBpbgorCisKKworTWFudWFsIHBhZ2UgZm9yIHh4ZCAgICAgICAgQXVndXN0IDE5OTYgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKworCisKKworCitYWEQoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhYRCgxKQorCisKKyAgICAgICB0aGUgZmlsZTsgaW4gZWZmZWN0LCB0aGUgbGVhZGluZyBieXRlcyBhcmUgc3VwcHJlc3NlZC4KKyAgICAgICAlIGVjaG8gJzAxMDAwMDogNDEnIHwgeHhkIC1yIC1zIC0weDEwMDAwID4gZmlsZQorCisgICAgICAgVXNlICB4eGQgIGFzICBhICBmaWx0ZXIgd2l0aGluIGFuIGVkaXRvciBzdWNoIGFzIHZpbSgxKSB0bworICAgICAgIGhleGR1bXAgYSByZWdpb24gbWFya2VkIGJldHdlZW4gYGEnIGFuZCBgeicuCisgICAgICAgOidhLCd6IXh4ZAorCisgICAgICAgVXNlIHh4ZCBhcyBhIGZpbHRlciB3aXRoaW4gYW4gZWRpdG9yICBzdWNoICBhcyAgdmltKDEpICB0bworICAgICAgIHJlY292ZXIgYSBiaW5hcnkgaGV4ZHVtcCBtYXJrZWQgYmV0d2VlbiBgYScgYW5kIGB6Jy4KKyAgICAgICA6J2EsJ3oheHhkIC1yCisKKyAgICAgICBVc2UgIHh4ZCAgYXMgIGEgIGZpbHRlciB3aXRoaW4gYW4gZWRpdG9yIHN1Y2ggYXMgdmltKDEpIHRvCisgICAgICAgcmVjb3ZlciBvbmUgbGluZSBvZiBhIGhleGR1bXAuICBNb3ZlIHRoZSBjdXJzb3IgIG92ZXIgIHRoZQorICAgICAgIGxpbmUgYW5kIHR5cGU6CisgICAgICAgISF4eGQgLXIKKworICAgICAgIFJlYWQgc2luZ2xlIGNoYXJhY3RlcnMgZnJvbSBhIHNlcmlhbCBsaW5lCisgICAgICAgJSB4eGQgLWMxIDwgL2Rldi90ZXJtL2IgJgorICAgICAgICUgc3R0eSA8IC9kZXYvdGVybS9iIC1lY2hvIC1vcG9zdCAtaXNpZyAtaWNhbm9uIG1pbiAxCisgICAgICAgJSBlY2hvIC1uIGZvbyA+IC9kZXYvdGVybS9iCisKKworUkVUVVJOIFZBTFVFUworICAgICAgIFRoZSBmb2xsb3dpbmcgZXJyb3IgdmFsdWVzIGFyZSByZXR1cm5lZDoKKworICAgICAgIDAgICAgICBubyBlcnJvcnMgZW5jb3VudGVyZWQuCisKKyAgICAgICAtMSAgICAgb3BlcmF0aW9uICBub3Qgc3VwcG9ydGVkICggeHhkIC1yIC1pIHN0aWxsIGltcG9zc2ktCisgICAgICAgICAgICAgIGJsZSkuCisKKyAgICAgICAxICAgICAgZXJyb3Igd2hpbGUgcGFyc2luZyBvcHRpb25zLgorCisgICAgICAgMiAgICAgIHByb2JsZW1zIHdpdGggaW5wdXQgZmlsZS4KKworICAgICAgIDMgICAgICBwcm9ibGVtcyB3aXRoIG91dHB1dCBmaWxlLgorCisgICAgICAgNCw1ICAgIGRlc2lyZWQgc2VlayBwb3NpdGlvbiBpcyB1bnJlYWNoYWJsZS4KKworU0VFIEFMU08KKyAgICAgICB1dWVuY29kZSgxKSwgdXVkZWNvZGUoMSksIHBhdGNoKDEpCisKK1dBUk5JTkdTCisgICAgICAgVGhlIHRvb2xzICB3ZWlyZG5lc3MgIG1hdGNoZXMgIGl0cyAgY3JlYXRvcnMgIGJyYWluLiAgIFVzZQorICAgICAgIGVudGlyZWx5ICBhdCB5b3VyIG93biByaXNrLiBDb3B5IGZpbGVzLiBUcmFjZSBpdC4gQmVjb21lIGEKKyAgICAgICB3aXphcmQuCisKK1ZFUlNJT04KKyAgICAgICBUaGlzIG1hbnVhbCBwYWdlIGRvY3VtZW50cyB4eGQgdmVyc2lvbiAxLjcKKworQVVUSE9SCisgICAgICAgKGMpIDE5OTAtMTk5NyBieSBKdWVyZ2VuIFdlaWdlcnQKKyAgICAgICA8am53ZWlnZXJAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisKKyAgICAgICBEaXN0cmlidXRlIGZyZWVseSBhbmQgY3JlZGl0IG1lLAorCisKKworTWFudWFsIHBhZ2UgZm9yIHh4ZCAgICAgICAgQXVndXN0IDE5OTYgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworCisKKworCitYWEQoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhYRCgxKQorCisKKyAgICAgICBtYWtlIG1vbmV5IGFuZCBzaGFyZSB3aXRoIG1lLAorICAgICAgIGxvc2UgbW9uZXkgYW5kIGRvbid0IGFzayBtZS4KKworICAgICAgIE1hbnVhbCBwYWdlIHN0YXJ0ZWQgYnkgVG9ueSBOdWdlbnQKKyAgICAgICA8dG9ueUBzY3RudWdlbi5wcHAuZ3UuZWR1LmF1PiA8VC5OdWdlbnRAc2N0Lmd1LmVkdS5hdT4KKyAgICAgICBTbWFsbCAgY2hhbmdlcyAgYnkgIEJyYW0gIE1vb2xlbmFhci4gICBFZGl0ZWQgIGJ5ICBKdWVyZ2VuCisgICAgICAgV2VpZ2VydC4KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitNYW51YWwgcGFnZSBmb3IgeHhkICAgICAgICBBdWd1c3QgMTk5NiAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisK