ZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9hYnN0ZWxscmF1bS5jIGIvZC9zZWhlci9oYWV1c2VyL2Fic3RlbGxyYXVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MWQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9hYnN0ZWxscmF1bS5jCkBAIC0wLDAgKzEsMTMgQEAKK2luaGVyaXQgIi9zdGQvcm9vbSI7CisjaW5jbHVkZSAiL2QvdW50ZXJ3ZWx0L3d1cnplbC93dXJ6ZWwuaCIgLy9ub2NoIHp1IGFlbmRlcm4uLi4KKworY3JlYXRlKCkgeworICA6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfSEFVU19FUkxBVUJULDEpOworICBTZXRQcm9wKFBfSU5UX1NIT1JULCJEZXIgQWJzdGVsbHJhdW0gZnVlciBoZWltYXRsb3NlIFNlaGVyaGFldXNlciIpOworICBTZXRQcm9wKFBfSU5UX0xPTkcsQlMoIkhpZXIgbGFuZGVuIFNlaGVyaGFldXNlciwgZGllIGtlaW5lbiBQbGF0eiBtZWhyIGhhYmVuLiBXZW5uICIKKyAgKyJEZWluIEhhdXMgaGllciBzdGVodCwgd2VuZGUgRGljaCBhbSBiZXN0ZW4gYmFsZCBhbiBkZW4genVzdGFlbmRpZ2VuIE1hZ2llciBmdWVyIGRpZSAiCisgICsiSGFldXNlci5cbiIpKTsKKyAgQWRkRGV0YWlsKCJtYWdpZXIiLCJXdXJ6ZWwgb2RlciBXYXJnb24ga3VlbW1lcm4gc2ljaCBtb21lbnRhbiB1bSBkaWUgSGFldXNlci5cbiIpOworICBBZGRFeGl0KCJub3JkZW4iLCIvZ2lsZGVuL2FiZW50ZXVyZXIiKTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9hY2Nlc3NfcmlnaHRzLmMgYi9kL3NlaGVyL2hhZXVzZXIvYWNjZXNzX3JpZ2h0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmNjA5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvYWNjZXNzX3JpZ2h0cy5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qIDE1LjAzLjIwMDgsIEFyYXRob3JuCisgICAtIFdhcmdvbiB1bmQgV3VyemVsIGF1c2dldHJhZ2VuIGluIEFic3RpbW11bmcgbWl0IFpvb2sgKi8KKyNpbmNsdWRlICJoYXVzLmgiCisKK2ludCBhY2Nlc3NfcmlnaHRzKHN0cmluZyBldWlkLCBzdHJpbmcgZmlsZSkKK3sKKyAgLy8gcmV0dXJuICggZXVpZCA9PSAidmFuaW9uIiApOworCisgIC8vIERpZSBNYWludGFpbmVyIGRpZXNlcyBQYWtldHMgc2luZCBpbSBEZWZpbmUgTUFJTlRBSU5FUiAKKyAgLy8gaW4gL2Qvc2VoZXIvaGFldXNlci9oYXVzLmggemVudHJhbCBnZXBmbGVndAorICByZXR1cm4gKCBtZW1iZXIoTUFJTlRBSU5FUiwgZXVpZCkgIT0tMSk7Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9iYXVzcGFydmVydHJhZy5jIGIvZC9zZWhlci9oYWV1c2VyL2JhdXNwYXJ2ZXJ0cmFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkOTk3NgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9iYXVzcGFydmVydHJhZy5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogIGJhdXNwYXJ2ZXJ0cmFnLmMgLS0gV2lyIGdlYmVuIHVuc2VybiBTZWhlcm4gZWluIFp1aGF1c2UuLi4KKyAqCisgKiAgR3J1bmR2ZXJzaW9uIHZvbiBKb2YsIHdlaXRlcmJlYXJiZWl0ZXQgdm9uIFdhcmdvbi4KKyAqCisgKiAkRGF0ZTogMTk5NC8xMi8xNyAxNTo1NjoxMSAkCisgKiAkUmV2aXNpb246IDEuNCAkCisgKiAkTG9nOiBiYXVzcGFydmVydHJhZy5jLHYgJAorICogUmV2aXNpb24gMS40ICAxOTk0LzEyLzE3ICAxNTo1NjoxMSAgV2FyZ29uCisgKiBFdHdhcyBtZWhyIFNpY2hlcmhlaXQgZ2VnZW4gWnVncmlmZmUgdm9uIGF1c3Nlbi4KKyAqCisgKiBSZXZpc2lvbiAxLjMgIDE5OTQvMTAvMjEgIDA5OjUyOjAzICBXYXJnb24KKyAqIHplcnJlaXNzZW4gZWluZ2ViYXV0LgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5NC8xMC8wOSAgMjE6MDA6NTkgIFdhcmdvbgorICogTGF1ZnplaXQgZXRjLiBhdXNnZWJhdXQsIGRhIGRhcyB1ZWJlciBkZW4gQmxvY2sgYWJnZXdpY2tlbHQKKyAqIHdpcmQuCisgKiBGdW5rdGlvbiBFaW56YWhsdW5nKCkgZWluZ2ViYXV0ICh3aXJkIHZvbiBkZXIgQmFuayBhdWZnZXJ1ZmVuKS4KKyAqCisgKiBSZXZpc2lvbiAxLjEgIDE5OTQvMTAvMDkgIDIwOjQ5OjI4ICBXYXJnb24KKyAqIEluaXRpYWwgcmV2aXNpb24KKyAqCisgKi8KKyNwcmFnbWEgc3Ryb25nX3R5cGVzLHJ0dF9jaGVja3MKKworI2luY2x1ZGUgImhhdXMuaCIKKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8bW92aW5nLmg+CisKK2luaGVyaXQgIi9zdGQvdGhpbmciOworCitwcm90ZWN0ZWQgdm9pZCBjcmVhdGUoKQoreworICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuOworICA6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfU0hPUlQsIkVpbiBCYXVzcGFydmVydHJhZyIpOworICBTZXRQcm9wKFBfTkFNRSwiQmF1c3BhcnZlcnRyYWciKTsKKyAgU2V0KFBfQVVUT0xPQURPQkosICh7MCwgVl9FUH0pICk7CisgIFNldChQX0FVVE9MT0FET0JKLCBTRUNVUkVELCBGX01PREUpOyAvLyBTaWNoZXIgaXN0IHNpY2hlci4uLgorICBTZXRQcm9wKFBfTk9EUk9QLDEpOworICBTZXRQcm9wKFBfTkVWRVJEUk9QLDEpOworICBTZXRQcm9wKFBfQVJUSUNMRSwxKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwgMCk7CisgIFNldFByb3AoUF9HRU5ERVIsMSk7CisgIEFkZElkKCAoeyJiYXVzcGFydmVydHJhZyIsICJ2ZXJ0cmFnIiwgInNlaGVccnZlcnRyYWcifSkgKTsKKyAgQWRkQ21kKCJsaWVzIiwibGVzZW4iKTsKKyAgQWRkQ21kKCAoeyAidW50ZXJzY2hyZWliZSIsICJ1bnRlcnNjaHJlaWIiIH0pLCBsYW1iZGEoICh7fSksCisgICAgKHsjJywsICh7Iydub3RpZnlfZmFpbCwgIkhpZXIga2FubnN0IER1IGRlbiBWZXJ0cmFnIG5pY2h0IHVudGVyc2NocmVpYmVuIVxuIiB9KSwKKwkgICAoeyMncmV0dXJuLCAwfSkKKyAgICB9KSApICk7CisgIEFkZENtZCggKHsgInplcnJlaXNzIiwgInplcnJlaXNzZSIgfSksIGxhbWJkYSggKHsgJ3N0ciB9KSwKKyAgICAoeyMnLCwgKHsjJ25vdGlmeV9mYWlsLCAiV2FzIHdpbGxzdCBEdSB6ZXJyZWlzc2VuP1xuIn0pLAorCSAgICh7Iyc/ISwgKHsjJ2lkLCAnc3RyfSksICh7IydyZXR1cm4sIDB9KSB9KSwKKwkgICAoeyMnPSwgJ2JsaywgKHsjJ3ByZXNlbnQsICJcbiBibG9jayIsICh7Iyd0aGlzX3BsYXllcn0pIH0pIH0pLAorCSAgICh7Iyd3cml0ZSwgIkR1IHplcnJlaXNzdCBEZWluZW4gVmVydHJhZy5cbiJ9KSwKKwkgICAoeyMnd3JpdGVfZmlsZSwgUEFUSCsibG9nL0JBTksuTE9HIiwgKHsjJ3NwcmludGYsICIlcyAtIFZlcnRyYWc6ICVzIHplcnJpc3MgaWhuLlxuIiwKKwkgICAgICAgKHsjJ2R0aW1lLCAoeyMndGltZX0pIH0pLCAoeyMnZ2V0dWlkLCAoeyMndGhpc19wbGF5ZXJ9KX0pfSl9KSwKKwkgICAoeyMnPywgJ2JsaywgKHsjJ2NhbGxfb3RoZXIsICdibGssICJyZW1vdmUiLCAxfSkgfSksCisJICAgKHsjJ3JlbW92ZSwgMX0pLAorCSAgICh7IydyZXR1cm4sIDF9KQorICAgIH0pICkgKTsKK30KKworc3RyaW5nIF9xdWVyeV9sb25nKCkKK3sKKyAgaW50IG1heDsKKworICBtYXggPSAoUXVlcnkoUF9BVVRPTE9BRE9CSilbMV0gJiBWX0ZBU1QpID8gU1VNTUVfUyA6IFNVTU1FX0w7CisgIGlmIChRdWVyeShQX0FVVE9MT0FET0JKKVsxXSAmIFZfUkFVTSkKKyAgICBtYXggPSBtYXggKiA0LzEwOworICByZXR1cm4gc3ByaW50ZigKKyAgICAgICJEaWVzIGlzdCBlaW4gQmF1c3BhcnZlcnRyYWcuIER1IGhhc3QgYmlzaGVyICVkICh2b24gJWQpIFB1bmt0ZW4gZWluZ2V6YWhsdC5cbiIsCisgICAgICBRdWVyeVByb3AoUF9BVVRPTE9BRE9CSilbMF0sIG1heCk7Cit9CisKKyNpZiAwCitpbnQgcXVlcnlfcHJldmVudF9zaGFkb3cob2JqZWN0IG9iKQoreworICBITE9HKCJTSEFET1ciLCBzcHJpbnRmKCIlcywgdm9uICVPIGltIFZlcnRyYWcuXG4iLCBkdGltZSh0aW1lKCkpWzUuLl0sIG9iKSk7CisgIHJldHVybiAxOworfQorI2VuZGlmCisKK2ludCBsZXNlbihzdHJpbmcgc3RyKQoreworICBpZiAoaWQoc3RyKSkKKyAgeworICAgIGlmIChRdWVyeShQX0FVVE9MT0FET0JKKVsxXSAmIFZfUkFVTSkKKyAgICAgIHRoaXNfcGxheWVyKCktPk1vcmUoUEFUSCsidHh0L3ZlcnRyYWdfcmF1bS50eHQiLDEpOworICAgIGVsc2UKKyAgICAgIHRoaXNfcGxheWVyKCktPk1vcmUoUEFUSCsidHh0L3ZlcnRyYWcudHh0IiwxKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IEVpbnphaGx1bmcoKQoreworICBpbnQgKmFsOworICBvYmplY3QgZW52LCBwbzsKKworICBpZiAob2xkX2V4cGxvZGUob2JqZWN0X25hbWUocG89cHJldmlvdXNfb2JqZWN0KCkpLCIjIilbMF0gIT0gUEFUSCsic2JfZWluemFobHVuZyIpIHsKKyAgICBlbnYgPSBlbnZpcm9ubWVudCgpOworICAgIEhMT0coIChlbnYgPyBnZXR1aWQoZW52KSA6ICJCQU5LLkxPRyIpLCBzcHJpbnRmKCJWZXJ0cmFnOiBFaW56YWhsdW5nIHZvbiBhdXNzZW4hIFRJID0gJU8sIFBPID0gJU9cbiIsIHRoaXNfaW50ZXJhY3RpdmUoKSwgcHJldmlvdXNfb2JqZWN0KCkpKTsKKyAgfQorICBhbCA9IFF1ZXJ5KFBfQVVUT0xPQURPQkopOworICByZXR1cm4gU2V0KFBfQVVUT0xPQURPQkosICh7IGFsWzBdK1JBVEVOSE9FSEUsIGFsWzFdIH0pIClbMF07Cit9CisKK3ZvaWQgU2lnbihpbnQgZmxhZykKK3sKKyAgU2V0KFBfQVVUT0xPQURPQkosICh7IFF1ZXJ5KFBfQVVUT0xPQURPQkopWzBdLCBmbGFnIH0pICk7Cit9CisKK3B1YmxpYyBpbnQgbW92ZShtaXhlZCBkZXN0LCBpbnQgbWV0aCkKK3sKKyAgb2JqZWN0IHBlbnY7CisgIGludCByZXQ7CisKKyAgcGVudiA9IGVudmlyb25tZW50KCk7CisgIHJldCA9IDo6bW92ZShkZXN0LCBtZXRoKTsKKworICBpZiAocmV0ID09IDEgJiYgKHBlbnYgfHwgKG9iamVjdF9uYW1lKHByZXZpb3VzX29iamVjdCgpKSAhPSBQQVRIKyJzYl9hbnRyYWciICYmCisJCQkgICAgb2JqZWN0X25hbWUocHJldmlvdXNfb2JqZWN0KCkpICE9IChzdHJpbmdwKGRlc3QpID8gZGVzdCA6IG9iamVjdF9uYW1lKGRlc3QpKSkpKQorICAgIEhMT0coIk1PVklORyIsIHNwcmludGYoIlZlcnRyYWc6IHZvbiAlTyAtPiAlTyBtaXQgJU8gKCVPKVxuIiwgZW52aXJvbm1lbnQoKSwgZGVzdCwgcHJldmlvdXNfb2JqZWN0KCksIGdldHVpZChwcmV2aW91c19vYmplY3QoKSkpKTsKKyAgcmV0dXJuIHJldDsKK30KKworbWl4ZWQgX3NldF9hdXRvbG9hZG9iaihtaXhlZCBhbCkKK3sKKyAgLy8gTG9nZ2VuLCB3ZW5uIG5pY2h0IHZvbSBTcGllbGVyb2JqZWt0IHNlbGJlciB2aWEgZGVuCisgIC8vIEF1dG9sb2FkZXItTWVjaGFuaXNtdXMgZ2VzZXR6dC4KKyAgaWYgKHByZXZpb3VzX29iamVjdCgxKQorICAgICAgJiYgc3Ryc3RyKGxvYWRfbmFtZShwcmV2aW91c19vYmplY3QoMSkpLCIvc3RkL3NoZWxscyIpICE9IDApCisgICAgSExPRygiU0VUX0FMIixzcHJpbnRmKCJWZXJ0cmFnOiBUUCA9ICVPLCBQTyA9ICVPLCBFTlYgPSAlT1xuIiwKKyAgICAgICAgICB0aGlzX3BsYXllcigpLCBwcmV2aW91c19vYmplY3QoKSwgZW52aXJvbm1lbnQoKSkpOworCisgIC8qIEtvbXBhdGliaWxpdGFldCB6dSBhbHRlbiBWZXJ0cmFlZ2VuICovCisgIGlmIChwb2ludGVycChhbCkgJiYgIShhbFsxXSAmIFZfRVApKSB7CisgICAgYWxbMF0gKj0gNDsKKyAgICBhbFsxXSB8PSBWX0VQOworICAgIGNhbGxfb3V0KCJub3RpZnlDaGFuZ2UiLCAwLCB0aGlzX3BsYXllcigpKTsKKyAgfQorICByZXR1cm4gU2V0KFBfQVVUT0xPQURPQkosIGFsKTsKK30KKwordm9pZCBub3RpZnlDaGFuZ2Uob2JqZWN0IHdlbSkKK3sKKyAgdGVsbF9vYmplY3Qod2VtLAorICAgICAgICJcbk5BQ0hSSUNIVCBWT04gREVSIFNFSEVSQkFOSzpcbiIKKyAgICAgICsiRGllIFZlcnRyYWdzbW9kYWxpdGFldGVuIGhhYmVuIHNpY2ggZ2VhZW5kZXJ0ISBCaXR0ZSBsZXNlbiBTaWUgZGVuXG4iCisgICAgICArIlZlcnRyYWcgbm9jaCBlaW5tYWwgZ2VuYXUgZHVyY2ggKGluc2Jlcy4gQXJ0LiA0KSFcbiIKKyAgICAgICsiU3RhdHQgR2VsZCBoYWJlbiBTaWUgamV0enQgRXJmYWhydW5nc3B1bmt0ZSB6dSB6YWhsZW4hXG5cbiIgKTsKK30KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL2Jsb2NrLmMgYi9kL3NlaGVyL2hhZXVzZXIvYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjAxMWVkCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL2Jsb2NrLmMKQEAgLTAsMCArMSwzMjQgQEAKKy8vIGJsb2NrLmMgLS0gSGllciBzYW1tZWxuIHNpY2ggZGllIFJhdGVuIGZ1ZXIgZGFzIFNlaGVyaGF1cworLy8KKy8vIChjKSAxOTk0IFdhcmdvbkBNb3JnZW5HcmF1ZW4KKy8vCisvLyAkSWQ6IGJsb2NrLmMsdiAxLjIgMjAwMy8xMS8xNSAxMzo1NjowMSBtdWQgRXhwICQKKy8vCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPGxhbmd1YWdlLmg+CisjaW5jbHVkZSA8bW92aW5nLmg+CisjaW5jbHVkZSA8Y29tYmF0Lmg+CisjaW5jbHVkZSAiaGF1cy5oIgorCitpbmhlcml0ICJzdGQvY2xvdGhpbmciOworCitwcml2YXRlIG5vc2F2ZSBpbnQgc2hhZG93aW5nOworCitjcmVhdGUoKQoreworICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuOworCisgIDo6Y3JlYXRlKCk7CisKKyAgU2V0UHJvcCggUF9TSE9SVCwgIkRlciBNRyBNQVNURVItQkxPQ0siICk7CisgIFNldFByb3AoIFBfTkFNRSwgIk1BU1RFUkJMT0NLIiApOworICBTZXRQcm9wKCBQX1dFSUdIVCwgMTAwICk7CisgIFNldFByb3AoIFBfR0VOREVSLCBNQUxFICk7CisgIFNldFByb3AoIFBfTk9EUk9QLCAxICk7CisgIFNldFByb3AoIFBfTkVWRVJEUk9QLCAxICk7CisgIC8vIHdlbm4gZXMga2VpbmVuIFRQIGdpYnQsIG11c3MgZGFzIERpbmcgcGVyIFNldFByb3AoUF9BVVRPTE9BRE9CSikKKyAgLy8ga29uZmlndXJpZXJ0IHdlcmRlbiwgbmljaHQgaGllci4gWmVzc3RyYSwgMjAuMTAuMjAwNworICBpZiAob2JqZWN0cCh0aGlzX3BsYXllcigpKSkKKyAgICBTZXQoIFBfQVVUT0xPQURPQkosICh7IDAsIHRoaXNfcGxheWVyKCktPlF1ZXJ5UHJvcChQX0FHRSkgKyBNQVhfVElNRSwgCisJICAgICAgICAgICAgICAgICAgIE1BWF9USU1FLzIsIEJfRVAgfSkgKTsKKyAgU2V0KCBQX0FVVE9MT0FET0JKLCBTRUNVUkVELCBGX01PREUgKTsKKyAgU2V0UHJvcCggUF9OT0JVWSwgMSApOworICBTZXRQcm9wKFBfTUFURVJJQUwsIE1BVF9NQVJCTEUpOworCisgIFNldFByb3AoUF9XRUFSX0ZVTkMsIHRoaXNfb2JqZWN0KCkpOworICBTZXRQcm9wKFBfUkVNT1ZFX0ZVTkMsIHRoaXNfb2JqZWN0KCkpOworCisgIEFkZElkKCAoeyAiYmxvY2siLCAibWFzdGVyYmxvY2siLCAibWFzdGVyLWJsb2NrIiwgIk1HIE1BU1RFUi1CTE9DSyIsICJtZyBtYXN0ZXItYmxvY2siLCAiXG4gYmxvY2siIH0pICk7CisKKyAgQWRkQ21kKCAiIiwgInJlbWluZE1lIiwgMSk7Cit9CisKK2ludCBxdWVyeV9wcmV2ZW50X3NoYWRvdyhvYmplY3Qgb2IpCit7CisgIEhMT0coIlNIQURPVyIsIHNwcmludGYoIiVzLCB2b24gJU8gaW0gQmxvY2suXG4iLGR0aW1lKHRpbWUoKSlbNS4uXSwgb2IpKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorV2VhckZ1bmMob2JqZWN0IG1lKQoreworICBpZiAoIXNoYWRvd2luZyAmJiAoUXVlcnkoUF9BVVRPTE9BRE9CSilbVl9GTEFHU10gJiBCX0FDVElWRSkgKSB7CisgICAgY2xvbmVfb2JqZWN0KCIvc3RkL3BsYXllci9zaGFkb3dzL2Jsb2NrX3NoYWRvdyIpOworICAgIHNoYWRvd2luZyA9IDE7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludAorUmVtb3ZlRnVuYyhvYmplY3QgbWUpCit7CisgIC8vIG1hbmNobWFsIGdpYnRzIGtlaW5lbiBUUCB1bmQgbWFjaG1hbCBpc3QgVFAgbmljaHQgZGVyIFNwaWVsZXIsIGRlciBkZW4KKyAgLy8gQmxvY2sgdHJhZWd0LgorICBpZiAodGhpc19wbGF5ZXIoKSAmJiB0aGlzX3BsYXllcigpID09IGVudmlyb25tZW50KCkpIHsKKyAgICBzaGFkb3dpbmcgPSAwOworICAgIHRoaXNfcGxheWVyKCktPlNlaGVySGF0R2VudWcoKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX3F1ZXJ5X3ZhbHVlKCkKK3sKKyAgcmV0dXJuKCBRdWVyeShQX0FVVE9MT0FET0JKKVswXSApOworfQorCitzdGF0aWMgaW50CitfcXVlcnlfY3Vyc2VkKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19zZXRfc2Nod2VyKGludCBzY2h3ZXIpCit7CisgIGludCAqYWw7CisKKyAgYWwgPSBRdWVyeShQX0FVVE9MT0FET0JKKTsKKyAgaWYgKHNjaHdlciAmJiAhKGFsW1ZfRkxBR1NdICYgQl9GQVNUKSkgeworICAgIGFsW1ZfRExJTkVdIC09IE1BWF9USU1FLzI7CisgICAgYWxbVl9XVElNRV0gLz0gMjsKKyAgICBhbFtWX0ZMQUdTXSB8PSBCX0ZBU1Q7CisgIH0KKyAgZWxzZSBpZiAoIXNjaHdlciAmJiAoYWxbVl9GTEFHU10gJiBCX0ZBU1QpKSB7CisgICAgYWxbVl9ETElORV0gKz0gTUFYX1RJTUUvMjsKKyAgICBhbFtWX1dUSU1FXSAqPSAyOworICAgIGFsW1ZfRkxBR1NdICY9IH5CX0ZBU1Q7CisgIH0KKyAgU2V0KCBQX0FVVE9MT0FET0JKLCBhbFswLi5dKTsKKyAgcmV0dXJuIGFsW1ZfRkxBR1NdICYgQl9GQVNUOworfQorCitzdGF0aWMgaW50CitfcXVlcnlfc2Nod2VyKCkKK3sKKyAgcmV0dXJuIChRdWVyeShQX0FVVE9MT0FET0JKKVtWX0ZMQUdTXSAmIEJfRkFTVCk7Cit9CisKK3N0YXRpYyBtaXhlZAorX3NldF9hdXRvbG9hZG9iaihtaXhlZCBhbCkKK3sKKyAgb2JqZWN0IHRpOworCisgIGlmICgodGkgPSB0aGlzX2ludGVyYWN0aXZlKCkpICYmIG9sZF9leHBsb2RlKG9iamVjdF9uYW1lKHRpKSwiIyIpWzBdICE9ICIvc2VjdXJlL2xvZ2luIikKKyAgICBITE9HKCJTRVRfQUwiLHNwcmludGYoIkJsb2NrOiBUSSA9ICVPLCBFTlYgPSAlT1xuIix0aGlzX2ludGVyYWN0aXZlKCksIGVudmlyb25tZW50KCkpKTsKKworICAvKiBLb21wYXRpYmlsaXRhZXQuLi4gKi8KKyAgaWYgKHBvaW50ZXJwKGFsKSAmJiAhKGFsW1ZfRkxBR1NdICYgQl9FUCkpIHsKKyAgICBhbFtWX01PTkVZXSAqPSA0OworICAgIGFsW1ZfRkxBR1NdIHw9IEJfRVA7CisgIH0KKyAgcmV0dXJuIFNldChQX0FVVE9MT0FET0JKLCBhbCk7Cit9CisKK3N0YXRpYyBzdHJpbmcKK19xdWVyeV9sb25nKCkKK3sKKyAgaW50ICphbDsKKyAgaW50IGxhdWZ6ZWl0LCBlaW56YWhsdW5nOworICBpbnQgcmF0ZW5ob2VoZTsKKyAgc3RyaW5nIHJldDsKKworICBhbCA9IFF1ZXJ5KFBfQVVUT0xPQURPQkopOworICByZXQgPSAiRGllcyBpc3QgZGVyIE1HIE1BU1RFUi1CTE9DSy4gRXIgYmVzdGVodCBhdXMgbWFzc2l2ZW0gTWFybW9yLCB1bSBkaWUgU2ljaGVyLVxuIgorICAgICAgICsiaGVpdCBkZXIgZWluZ2V6YWhsdGVuIFJhdGUgenUgZ2V3YWVocmxlaXN0ZW4uIE1pdCBlaW5lbSBHb2xka2V0dGNoZW4gdmVyc2VoZW4sXG4iCisgICAgICAgKyJrYW5uIG1hbiBpaG4gdHJhZ2VuIHdpZSBlaW4gQW11bGV0dC4gRGllcyBpc3QgYXVjaCBub2V0aWcsIHdlbm4gYXVmIGRlbiBCbG9ja1xuIgorICAgICAgICsiZWluZ2V6YWhsdCB3ZXJkZW4gc29sbC5cbiI7CisKKyAgcmF0ZW5ob2VoZSA9IFJBVEVOSE9FSEU7CisgIGlmIChhbFtWX0ZMQUdTXSAmIEJfRVhURU5EKQorICAgIHJhdGVuaG9laGUgKz0gKFJBVEVOSE9FSEUqNikvMTA7CisgIGxhdWZ6ZWl0ID0gMiooYWxbVl9ETElORV0tdGhpc19wbGF5ZXIoKS0+UXVlcnlQcm9wKFBfQUdFKSk7CisgIGVpbnphaGx1bmcgPSBhbFtWX01PTkVZXTsKKworICBpZiAobGF1ZnplaXQgPCAwKQorICAgIHJldCArPSAiTGVpZGVyIGhhc3QgRHUgZGllIFphaGx1bmcgZGllc2VyIFJhdGUgdmVycGFzc3QhXG4iOworICBlbHNlIHsKKyAgICBpZiAoZWluemFobHVuZyA+PSByYXRlbmhvZWhlKQorICAgICAgcmV0ICs9ICJFciBpc3Qgdm9sbHN0YWVuZGlnIG1pdCBkZXIgUmF0ZSBnZWZ1ZWxsdC5cbiI7CisgICAgZWxzZQorICAgICAgcmV0ICs9IHNwcmludGYoICJEdSBoYXN0IGJpcyBqZXR6dCAlZCAodm9uICVkKSBQdW5rdGVuIGVpbmdlemFobHQuXG4iLCBlaW56YWhsdW5nLCByYXRlbmhvZWhlICk7CisKKyAgICByZXQgKz0gdGltZTJzdHJpbmcoIkRpZXNlIFJhdGUgbXVzcyBiaXMgaW4gJWggJUgsICVtICVNIHVuZCAlcyAlUyBhYmJlemFobHQgc2VpbiFcbiIsIGxhdWZ6ZWl0KTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CityZW1pbmRNZSgpCit7CisgIGludCBub2NoLCBuZXh0LCAqYWwsIHJhdGVuaG9laGU7CisgIG9iamVjdCB2ZXJ0cmFnOworCisgIGFsID0gUXVlcnkoUF9BVVRPTE9BRE9CSik7CisgIG5leHQgPSBhbFtWX1dUSU1FXTsKKyAgcmF0ZW5ob2VoZSA9IFJBVEVOSE9FSEU7CisgIGlmIChhbFtWX0ZMQUdTXSAmIEJfRVhURU5EKQorICAgIHJhdGVuaG9laGUgKz0gKFJBVEVOSE9FSEUqNikvMTA7CisKKyAgaWYgKGFsW1ZfTU9ORVldIDwgcmF0ZW5ob2VoZSkgeworICAgIG5vY2ggPSBhbFtWX0RMSU5FXS10aGlzX3BsYXllcigpLT5RdWVyeVByb3AoUF9BR0UpOworICAgIGlmIChub2NoID49IDApIHsKKyAgICAgIGlmIChuZXh0ID4gbm9jaCkgeworCWNhbGxfb3V0KCJkb1JlbWluZCIsIDAsIHRoaXNfcGxheWVyKCksIHRpbWUyc3RyaW5nKCAiRGllIG5hZWNoc3RlIFJhdGUgd2lyZCBpbiAlaCAlSCwgJW0gJU0gdW5kICVzICVTIGZhZWxsaWchXG4iLCAyKm5vY2gpKTsKKwlkbyBuZXh0IC09IFdBUk5fVElNRTsgd2hpbGUgKG5leHQ+MCAmJiBuZXh0Pm5vY2gpOworCWlmIChuZXh0IDwgMCkKKwkgIG5leHQgPSAwOworCWFsW1ZfV1RJTUVdID0gbmV4dDsKKwlTZXQoUF9BVVRPTE9BRE9CSiwgYWxbMC4uXSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKGFsW1ZfRkxBR1NdICYgQl9FWFRFTkQpIHsKKwlzdHJpbmcgczsKKworCXdyaXRlKCAiRHUgaGFzdCBkaWUgU3RyYWZyYXRlIG5pY2h0IGJlemFobHQhXG4iICk7CisJaWYgKHZlcnRyYWcgPSBwcmVzZW50KCAic2VoZVxydmVydHJhZyIsIHRoaXNfcGxheWVyKCkpKSB7CisJICB3cml0ZSggIkRhbWl0IHZlcmZhZWxsdCBhdWNoIERlaW4gQmF1c3BhcnZlcnRyYWchIFVuZCBkYXMgaW0gd2FocnN0ZW4gU2lubmUgZGVzXG5Xb3J0ZXMuLi5cbiIgKTsKKwkgIHZlcnRyYWctPnJlbW92ZSgpOworCX0KKwlzID0gIkJsb2NrOiAiK2dldHVpZCh0aGlzX3BsYXllcigpKSsiIGhhdCB1ZWJlcnpvZ2VuLi4uIDspXG4iOworCUhMT0coZ2V0dWlkKHRoaXNfcGxheWVyKCkpLCBzKTsKKwlITE9HKCJCQU5LLkxPRyIsIHMpOworCXJlbW92ZSgxKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXdyaXRlKCAiRHUgaGFzdCBkaWUgbGV0enRlIFJhdGVuemFobHVuZyB2ZXJwYXNzdCFcbiIKKwkgICAgICArIkRpZSBSYXRlbmhvZWhlIGVyaG9laHQgc2ljaCB1bSBkaWUgU3RyYWZnZWJ1ZWhyLlxuIiApOworCWFsW1ZfRkxBR1NdIHw9IEJfRVhURU5EOworCWlmIChhbFtWX0ZMQUdTXSAmIEJfRkFTVCkgeworCSAgYWxbVl9ETElORV0gKz0gTUFYX1RJTUUvNDsKKwkgIGFsW1ZfV1RJTUVdID0gTUFYX1RJTUUvODsKKwl9CisJZWxzZSB7CisJICBhbFtWX0RMSU5FXSArPSBNQVhfVElNRS8yOworCSAgYWxbVl9XVElNRV0gPSBNQVhfVElNRS80OworCX0KKwlTZXQoIFBfQVVUT0xPQURPQkosIGFsWzAuLl0pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQKK0d1dHNjaHJlaWJlbihpbnQgbW9uZXkpCit7CisgIGludCBiYWNrLCByYXRlbmhvZWhlOworICBtaXhlZCBhbDsKKworICBpZiAoIVF1ZXJ5UHJvcChQX1dPUk4pKSAgLy8gWnVtIEd1dHNjaHJlaWJlbiBtdXNzIGRlciBCbG9jayBnZXRyYWdlbiB3ZXJkZW4hCisgICAgcmV0dXJuIG1vbmV5OworCisgIGFsID0gUXVlcnkoUF9BVVRPTE9BRE9CSik7CisgIGJhY2sgPSAwOworCisgIHJhdGVuaG9laGUgPSBSQVRFTkhPRUhFOworICBpZiAoYWxbVl9GTEFHU10gJiBCX0VYVEVORCkKKyAgICByYXRlbmhvZWhlICs9IChSQVRFTkhPRUhFKjYpLzEwOworCisgIGlmIChvbGRfZXhwbG9kZShvYmplY3RfbmFtZShwcmV2aW91c19vYmplY3QoKSksIiMiKVswXSAhPSAiL3N0ZC9wbGF5ZXIvc2hhZG93cy9ibG9ja19zaGFkb3ciKSB7CisgICAgbWl4ZWQgZW52OworCisgICAgZW52ID0gZW52aXJvbm1lbnQoKTsKKyAgICBpZiAoZW52KQorICAgICAgZW52ID0gZ2V0dWlkKGVudik7CisgICAgZWxzZQorICAgICAgZW52ID0gIkJBTksuTE9HIjsKKyAgICBITE9HKGVudiwgc3ByaW50ZigiQmxvY2s6IEd1dHNjaHJpZnQgdm9uIGF1c3NlbiAoJWQgRVApLCBUSSA9ICVPKSFcbiIsIG1vbmV5LCB0aGlzX2ludGVyYWN0aXZlKCkpKTsKKyAgfQorICBhbFtWX01PTkVZXSArPSBtb25leTsKKyAgaWYgKGFsW1ZfTU9ORVldID49IHJhdGVuaG9laGUpIHsgIC8vIGdlbnVnIGVpbmdlemFobHQuLi4KKyAgICBiYWNrID0gYWxbVl9NT05FWV0tcmF0ZW5ob2VoZTsKKyAgICBhbFtWX01PTkVZXSA9IHJhdGVuaG9laGU7CisgICAgYWxbVl9GTEFHU10gJj0gfkJfQUNUSVZFOworICAgIG1vbmV5IC09IGJhY2s7CisgICAgY2FsbF9vdXQoImJsb2NrVm9sbCIsMCxlbnZpcm9ubWVudCgpKTsKKyAgfQorCisgIFNldChQX0FVVE9MT0FET0JKLCBhbFswLi5dKTsKKworICByZXR1cm4gYmFjazsKK30KKwordm9pZAorYmxvY2tWb2xsKG9iamVjdCBwbCkKK3sKKyAgdGVsbF9vYmplY3QocGwsICJEZXIgQmxvY2sgZnVlciBkaWVzZSBSYXRlIGlzdCBqZXR6dCB2b2xsIVxuIik7CisgIHBsLT5TZWhlckhhdEdlbnVnKCk7CS8vIHNoYWRvdyBlbnRmZXJuZW4KK30KKwordm9pZAorZG9SZW1pbmQob2JqZWN0IHBsLCBzdHJpbmcgc3RyKQoreworICB0ZWxsX29iamVjdChwbCwgc3RyKTsKK30KKworcHJvdGVjdGVkIGludCBQcmV2ZW50TW92ZShvYmplY3QgZGVzdCwgb2JqZWN0IG9sZGVudiwgaW50IG1ldGhvZCkgeworICBpZiAocHJldmlvdXNfb2JqZWN0KCkgJiYgcHJldmlvdXNfb2JqZWN0KCktPlF1ZXJ5QnV5RmFjdCgpKSAvLyBJbSBMYWRlbi4uLgorICAgIHJldHVybiBNRV9DQU5UX0JFX0RST1BQRUQ7CisgIHJldHVybiA6OlByZXZlbnRNb3ZlKGRlc3QsIG9sZGVudiwgbWV0aG9kKTsKK30KKworcHJvdGVjdGVkIHZvaWQgTm90aWZ5TW92ZShvYmplY3QgZGVzdCwgb2JqZWN0IG9sZGVudiwgaW50IG1ldGhvZCkgeworCisgIGlmIChvbGRlbnYgfHwgKG9iamVjdF9uYW1lKHByZXZpb3VzX29iamVjdCgpKSAhPSBQQVRIKyJzYl9hbnRyYWciICYmCisJCSAgb2JqZWN0X25hbWUocHJldmlvdXNfb2JqZWN0KCkpICE9IFBBVEgrInNiX2VpbnphaGx1bmciICYmCisJCSAgb2JqZWN0X25hbWUocHJldmlvdXNfb2JqZWN0KCkpICE9IG9iamVjdF9uYW1lKGRlc3QpKSkKKyAgICBITE9HKCJNT1ZJTkciLCBzcHJpbnRmKCJCbG9jazogdm9uICVPIC0+ICVPIG1pdCAlTyAoJU8pXG4iLAorCQkJICAgZW52aXJvbm1lbnQoKSwgZGVzdCwKKwkJCSAgIHByZXZpb3VzX29iamVjdCgpLCBnZXR1aWQocHJldmlvdXNfb2JqZWN0KCkpKSk7CisKKyAgcmV0dXJuIDo6Tm90aWZ5TW92ZShkZXN0LCBvbGRlbnYsIG1ldGhvZCk7Cit9CisKK2ludAorcmVtb3ZlKGludCBzaWxlbnQpCit7CisgIGlmIChjbG9uZXAodGhpc19vYmplY3QoKSkgJiYgZW52aXJvbm1lbnQoKSkKKyAgICBlbnZpcm9ubWVudCgpLT5TZWhlckhhdEdlbnVnKCk7CisKKyAgcmV0dXJuIDo6cmVtb3ZlKHNpbGVudCk7Cit9CisKKy8vICRMb2c6IGJsb2NrLmMsdiAkCisvLyBSZXZpc2lvbiAxLjIgIDIwMDMvMTEvMTUgMTM6NTY6MDEgIG11ZAorLy8gTUFUX01BUkJMRQorLy8KKy8vIFJldmlzaW9uIDEuMS4xLjEgIDIwMDAvMDgvMjAgMjA6MjI6NDIgIG11ZAorLy8gSW5zIENWUyBlaW5nZWNoZWNrdAorLy8KKy8vIFJldmlzaW9uIDEuNCAgMTk5NC8xMi8xNyAgMTU6NTY6NTggIFdhcmdvbgorLy8gRXR3YXMgbWVociBTaWNoZXJoZWl0IGdlZ2VuIFp1Z3JpZmZlIHZvbiBhdXNzZW4uCisvLworLy8gUmV2aXNpb24gMS4zICAxOTk0LzEwLzIxICAwOTo1MDoyMCAgV2FyZ29uCisvLyBsb25nKCktPl9xdWVyeV9sb25nKCkKKy8vIFNoYWRvdyB3aXJkIG51ciBha3Rpdiwgd2VubiBkZXIgQmxvY2sgZ2V6dWVja3QgaXN0LgorLy8KKy8vIFJldmlzaW9uIDEuMiAgMTk5NC8xMC8wOSAgMjE6MDQ6MjcgIFdhcmdvbgorLy8gTWFuIGthbm4gamV0enQgZWluc3RlbGxlbiwgb2IgZGVyIEJsb2NrIHp1IGVpbmVtIGxlaWNodGVuLCBhYmVyCisvLyB0ZXVyZXJlbiBvZGVyIHp1IGVpbmVtIHNjaHdlcmVuLCBhYmVyIGJpbGxpZ2VyZW4gVmVydHJhZyBnZWhvZXJ0LgorLy8gRmFsbHMgbWFuIGVpbmUgUmF0ZSB2ZXJwYXNzdCBoYXQsIHZlcmZhZWxsdCBkYW1pdCBhdWNoIGRlciBWZXItCisvLyB0cmFnLgorLy8gR3V0Z2VzY2hyaWViZW4gd2lyZCBudXIsIHdlbm4gZGVyIEJsb2NrIGdlenVlY2t0IGlzdC4KKy8vIEd1dHNjaHJlaWJlbigpIGxpZWZlcnQgdWViZXJ6YWVobGlnZXMgR2VsZCB6dXJ1ZWNrLgorLy8KKy8vIFJldmlzaW9uIDEuMSAgMTk5NC8xMC8wNyAgMTQ6MzU6MzQgIFdhcmdvbgorLy8gSW5pdGlhbCByZXZpc2lvbgorLy8KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9oYWV1c2VyLnR4dCBiL2Qvc2VoZXIvaGFldXNlci9oYWV1c2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTQ1MTU3Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL2hhZXVzZXIudHh0CkBAIC0wLDAgKzEsNjMzIEBACitJbmhhbHRzdmVyemVpY2huaXM6CisKKzEuLiBLdXJ6dWViZXJzaWNodCBkZXIgRmlsZXMKKzIuLiBEZXIgSGF1c3ZlcndhbHRlcgorMy4uIFNvbmRlcnJlY2h0ZQorNC4uIERpZSBUb29scworNGEuLi4gRGVyIEhhdXNtZWlzdGVyCis0Yi4uLiBsaXN0ZS5jCis0Yy4uLiBoYXVzdG9vbC5jCis1Li4gRGFzIEhhdXMKKzVhLi4uIEF1c3NlbmFuc2ljaHQgICAgLSBoYXVzLmMKKzViLi4uIERpZSBSYWV1bWUgICAgICAgLSByYXVtLmMKKzVjLi4uIERlciBFaW5nYW5nc3JhdW0gLSByYXVtMC5jCis1ZC4uLiBEaWUgVHJ1aGUgICAgICAgIC0gdHJ1aGUuYworNi4uIFNlaGVyYmFuay9IYXVzZXJ3ZXJiCis3Li4gQmVzY2hyZWlidW5nZW4KKzdhLi4uIERldGFpbHMvUmVhZERldGFpbHMvTGFuZy0gdW5kIEt1cnpiZXNjaHJlaWJ1bmcKKzdiLi4uIEF1c2dhZW5nZQorN2MuLi4gTGljaHQKKzdkLi4uIEJlZmVobGUKKzguLiBSdWVja21lbGR1bmdlbgorOS4uIEhpbGZlc2VpdGVuCisKKzEuIEt1cnp1ZWJlcnNpY2h0IGRlciBGaWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy9kL3NlaGVyL2hhZXVzZXIvCisKKyAgLyogQW0gYWxsZXJ3aWNodGlnc3RlbjogKi8KKyAgaGF1cy5oIC4uLi4uLi4uLi4uLi4uLi4uLi4uIERlZmluaXRpb25lbiwgZGllIHVlYmVyYWxsIGJlbnV0enQgd2VyZGVuCisgIGFjY2Vzc19yaWdodHMuYyAuLi4uLi4uLi4uLiBEaWUgTGV1dGUgbWl0IEhhdXN6dWdyaWZmCisKKyAgLyogS2VpbmUgSGFldXNlciBvaG5lIFZlcndhbHR1bmcgKi8KKyAgaGF1c3ZlcndhbHRlci5jIC4uLi4uLi4uLi4uIERpZSBaZW50cmFsc3RlbGxlIGRlciBTZWhlcmhhZXVzZXIKKyAgSEFFVVNFUiAuLi4uLi4uLi4uLi4uLi4uLi4uIEluZm9zIHVlYmVyIEhhdXNiZXNpdHplciAoV2VyLCB3bywgd2llIGdyb3NzKQorCisgIHNhdmUvCisgICAgaGFldXNlci5vIC4uLi4uLi4uLi4uLi4uLi4uIERhcyBTYXZlZmlsZSBkZXMgSGF1c3ZlcndhbHRlcnMKKworICB0b29scy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4gU2FtbWVscGxhdHogZnVlciBUb29scyB6dSBkZW4gSGFldXNlcm4KKyAgICBoYXVzbWVpc3Rlci5jIC4uLi4uLi4uLi4uLi4gVmVybGVnZW4sIEFicmVpc3NlbiwgLmMtRmlsZXMgZXJzdGVsbGVuCisgICAgaGF1cy5hcHggLi4uLi4uLi4uLi4uLi4uLi4uIEZ1ZXIgLmMtRmlsZSBlaW5lcyBIYXVzZXMKKyAgICBsaXN0ZS5jIC4uLi4uLi4uLi4uLi4uLi4uLi4gWmVpZ3QgZ2Vsb2VzY2h0ZSB1bmQgZ2UtV2l6LXRlIEhhdXNiZXNpdHplcgorICAgIGhhdXN0b29sLmMgLi4uLi4uLi4uLi4uLi4uLiAob2Jzb2xldGUpCisKKyAgLyogRXJ3ZXJiIGVpbmVzIEhhdXNlcy9SYXVtZXMgKi8KKyAgc2VoZXJiYW5rLmMgLi4uLi4uLi4uLi4uLi4uIERhcyBCYW5rZ2ViYWV1ZGUKKworICBxdWV1ZS5jIC4uLi4uLi4uLi4uLi4uLi4uLi4gRGllIFNjaGxhbmdlbiB2b3IgZGVuIFNjaGFsdGVybgorICBxdWV1ZS5oCisKKyAgc2JfYW50cmFnLmMgLi4uLi4uLi4uLi4uLi4uIFNjaGFsdGVyIHp1bSBCZWFudHJhZ2VuIGVpbmVzIFZlcnRyYWdlcworICBzYl9laW56YWhsdW5nLmMgLi4uLi4uLi4uLi4gU2NoYWx0ZXIgenVtIEVpbnphaGxlbiBlaW5lciBSYXRlCisgIHNiX2F1c2dhYmUuYyAuLi4uLi4uLi4uLi4uLiBTY2hhbHRlciB6dW0gQWJob2xlbiBlaW5lcyBIYXVzZXMKKworICBiYXVzcGFydmVydHJhZy5jIC4uLi4uLi4uLi4gQXVmIGRlbSBWZXJ0cmFnIHdlcmRlbiBkaWUgUmF0ZW4gdmVybWVya3QKKyAga29tbWVudGFyLmMgLi4uLi4uLi4uLi4uLi4uIEtvbW1lbnRhcmUgenVtIHVua2xhcmVuIFZlcnRyYWdzdGV4dAorCisgIHR4dC8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBIaWVyIHN0ZWhlbiBkaWUgZWlnZW50bGljaGVuIFZlcnRyYWdzdGV4dGUKKyAgICB2ZXJ0cmFnLnR4dCAuLi4uLi4uLi4uLi4uLi4gYSkgZnVlciBlaW5lbiBIYXVzLVZlcnRyYWcKKyAgICB2ZXJ0cmFnX3JhdW0udHh0IC4uLi4uLi4uLi4gYikgZnVlciBlaW5lbiBBdXNiYXV2ZXJ0cmFnCisgICAga29tbWVudGFyLnR4dCAuLi4uLi4uLi4uLi4uIGMpIGVya2xhZXJlbmRlIEJlbWVya3VuZ2VuIHp1IGRlbiBUZXh0ZW4KKworICBibG9jay5jIC4uLi4uLi4uLi4uLi4uLi4uLi4gRGVyIEJsb2NrIHZlcndhbHRldCBkaWUgbGF1ZmVuZGUgUmF0ZQorICAvc3RkL3BsYXllci9zaGFkb3dzL2Jsb2NrX3NoYWRvdy5jCisKKyAgdHJhZ2hhdXMuYyAuLi4uLi4uLi4uLi4uLi4uIERhcyBiZWtvbW10IG1hbiBhbSBBdXNnYWJlc2NoYWx0ZXIKKworICBsb2cvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gTG9nZ2luZyBkZXIgQmFuaywgZGVzIEJsb2NrcywgZGVzIFZlcnRyYWdlcworCisgIC8qIERpZSBIYWV1c2VyIHNlbGJzdCAqLworICB2aXJ0dWFsX2NvbXBpbGVyLmMgLi4uLi4uLi4gT3JkbmV0IGRpZSBIYWV1c2VyIHBhc3NlbmQgenUKKyAgaGF1cy5jIC4uLi4uLi4uLi4uLi4uLi4uLi4uIERpZSBBdXNzZW5hbnNpY2h0IGRlcyBIYXVzZXMKKyAgcmF1bS5jIC4uLi4uLi4uLi4uLi4uLi4uLi4uIEFsbGdlbWVpbmUgRnVua3Rpb25lbiBkZXIgUmFldW1lCisgIHJhdW0wLmMgLi4uLi4uLi4uLi4uLi4uLi4uLiBEZXIgRWluZ2FuZ3NyYXVtIGhhdCBlaW5pZ2UgWnVzYXR6ZmVhdHVyZXMKKyAgbW9kdWxlcy8gLi4uLi4uLi4uLi4uLi4uLi4uIEhpbGZzbW9kdWxlOgorICAgIGhhdXN0dWVyLmMgLi4uLi4uLi4uLi4uLi4uLiBCZXNjaHJlaWJ1bmcgZGVyIEhhdXN0dWVyLCBPZWZmbmVuL1NjaGxpZXNzZW4KKyAgICBsb3NhLmMgLi4uLi4uLi4uLi4uLi4uLi4uLi4gRXJ3ZWl0ZXJ0ZXMgTGFkZW4gdW5kIFNwZWljaGVybiBkZXIgUmFldW1lCisgICAgdXNlcmNtZC5jIC4uLi4uLi4uLi4uLi4uLi4uIEFsbGVzIGZ1ZXIgYmVudXR6ZXJkZWZpbmllcnRlIEJlZmVobGUKKyAgdHJ1aGUuYyAuLi4uLi4uLi4uLi4uLi4uLi4uIERpZSBUcnVoZQorCisgIHNhdmUvCisgICAgbmFtZS5vIC4uLi4uLi4uLi4uLi4uLi4uLi4uIFNhdmVmaWxlIGRlciBBdXNzZW5hbnNpY2h0IGRlcyBIYXVzZXMKKyAgICBuYW1lMC5vIC4uLi4uLi4uLi4uLi4uLi4uLi4gU2F2ZWZpbGUgdm9uIFJhdW0gMAorCQkgICB1c3cuCisgICAgbmFtZTkubyAuLi4uLi4uLi4uLi4uLi4uLi4uIFNhdmVmaWxlIHZvbiBSYXVtIDkKKyAgICBuYW1ldHJ1aGUubyAuLi4uLi4uLi4uLi4uLi4gU2F2ZWZpbGUgZGVyIFRydWhlCisKKyAgc3BlY2lhbC8gLi4uLi4uLi4uLi4uLi4uLi4uIEJlc29uZGVyZSBPYmpla3RlCisgICAgcmouYyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uICJSb21lbyB1bmQgSnVsaWEiIHZvbiBFdGFpbgorICAgIHJvbV9qdWwvIC4uLi4uLi4uLi4uLi4uLi4uLiBIaWVyIGxpZWdlbiBkaWUgU2VpdGVuIGRlciBHZXNjaGljaHRlCisgICAgc2VoZXJmYXEuYyAuLi4uLi4uLi4uLi4uLi4uIERpZSBTZWhlci1GQVEgdm9uIFJ5bmUKKyAgICBmYXEvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gRGllIFNlaXRlbiBkZXIgRkFRCisKKyAgcmVwLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIEhpZXIgbGFuZGVuIGRpZSAndHlwbyctTWVsZHVuZ2VuIGRlciBIYWV1c2VyCisKKyAgZG9jLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIEhpbGZlc2VpdGVuIChuYWNoIC9kb2Mvc2NtZCBrb3BpZXJlbikKKyAgICBoYXVzYmF1IC4uLi4uLi4uLi4uLi4uLi4uLi4gQWxsZ2VtZWluZSBJbmZvcm1hdGlvbmVuCisgICAgc2VoZXJoYXVzIC4uLi4uLi4uLi4uCisgICAgaW5zdGFudGhhdXMgLi4uLi4uLi4KKworICAgIGFlbmRlcmUgLi4uLi4uLgorICAgIGF1c2dhbmcgLi4uLi4uLi4KKyAgICBiZWZlaGwgLi4uLi4uLi4uLgorICAgIGJlc2NocmVpYmUgLi4uLi4uLgorICAgIGVybGF1YmUgLi4uLi4uLi4uLi4KKyAgICBrb3BpZXJlIC4uLi4uLi4uLi4uLgorICAgIGxpY2h0IC4uLi4uLi4uLi4uLi4uLgorICAgIGxvZXNjaGUgLi4uLi4uLi4uLi4uLi4uLi4uLiBTZWl0ZW4genUgZGVuIGVpbnplbG5lbiBCZWZlaGxlbgorICAgIG1lbGR1bmdlbiAuLi4uLi4uLi4uLgorICAgIG5vdGl6IC4uLi4uLi4uLi4uLi4uCisgICAgc2NoaWViZSAuLi4uLi4uLi4uLgorICAgIHNwZXJyZSAuLi4uLi4uLi4uLgorICAgIHNwaW9uIC4uLi4uLi4uLi4uCisgICAgdWViZXJzaWNodCAuLi4uLgorICAgIHZlcmJpZXRlIC4uLi4uLgorICAgIHdlcmZlIC4uLi4uLi4uCisKKy9zeXMvcGxheWVyL2Jhc2UuaCAuLi4uLi4uLi4uIEhpZXIgaXN0ICJIQVVTVkVSV0FMVEVSIiBkZWZpbmllcnQKKworMi4gRGVyIEhhdXN2ZXJ3YWx0ZXIKKz09PT09PT09PT09PT09PT09PT09CisKK0RpZXMgaXN0IGRpZSBaZW50cmFsc3RlbGxlIGRlciBTZWhlcmhhZXVzZXIuIEhpZXIgd2VyZGVuIHdpY2h0aWdlIERhdGVuCitkZXIgSGF1c2Jlc2l0emVyIHZlcndhbHRldCwgbmFlbWxpY2g6CistIGRlciBPcnQsIGFuIGRlbSBkYXMgSGF1cyBzdGVodAorLSBkaWUgWmFobCBkZXIgenVzYWV0emxpY2hlbiBSYWV1bWUsIHVlYmVyIGRpZSBkYXMgSGF1cyB2ZXJmdWVndAorLSBkaWUgTGV1dGUsIGRpZSBpbSBIYXVzIFNvbmRlcnJlY2h0ZSBiZXNpdHplbgorCitEaWUgRnVua3Rpb25lbiBkZXMgSGF1c3ZlcndhbHRlcnMgd2VyZGVuIHZvbiBkaXZlcnNlbiBPYmpla3RlbiBhdXMgYXVmLQorZ2VydWZlbi4gSW0gRWluemVsbmVuIHdhZXJlbiBkYToKKworc2VjdXJlKCkgLSBpbnRlcm4KKyAgU2ljaGVyaGVpdHNhYmZyYWdlIGZ1ZXIgZWluaWdlIEZ1bmt0aW9uZW4gZGVzIEhhdXN2ZXJ3YWx0ZXJzLiBadWdlbGFzc2VuCisgIHNpbmQgRU1zIHVuZCBkaWUgTGV1dGUsIGRpZSBpbSBhY2Nlc3NfcmlnaHRzLmMgc3RlaGVuLCBhdXNzZXJkZW0gZGFzCisgIEluc3RhbnRoYXVzIChmdWVyIE5ldWVzSGF1cygpKSB1bmQgZGVyIEF1c2dhYmVzY2hhbHRlciAoZnVlciBOZXVlclJhdW0oKSkuCisKK2R1bXAoKSAtIGludGVybgorICBCcmluZ3QgZGllIERhdGVpICJIQUVVU0VSIiBhdWYgZGVuIG5ldWVzdGVuIFN0YW5kIChuYWNoZGVtIGVpbiBuZXVlcyBIYXVzCisgIG9kZXIgZWluIG5ldWVyIFJhdW0gZGF6dWdla29tbWVuIGlzdCBvZGVyIGVpbiBIYXVzIHZlcmxlZ3QgYnp3LiBnZWxvZXNjaHQKKyAgd3VyZGUpLgorCitjaGVja19leGl0cygpIC0gaW50ZXJuCisgIEJlaW0gVmVybGVnZW4gdW5kIEFicmVpc3NlbiB2b24gSGFldXNlcm4gaXN0IGVzIG5vZXRpZywgZGFzcyBBdXNnYWVuZ2UgaW4KKyAgTmFjaGJhcmhhZXVzZXIgZW50ZmVybnQgd2VyZGVuLiBEYWZ1ZXIgc29yZ3QgZGllc2UgRnVua3Rpb24uCisKK05ldWVzSGF1cygpIC0gdHJhZ2hhdXMuYworICBFaW4gbmV1ZXMgU2VoZXJoYXVzIHdpcmQgZ2VzY2hhZmZlbjogZXMgd2lyZCBpbSBPYmplY3REYWVtb24gYW5nZW1lbGRldCwKKyAgZGllIFRydWhlIHdpcmQgaW0gRWluZ2FuZ3NyYXVtIHBsYXppZXJ0LCB1bmQgZGllICJIQUVVU0VSIi1EYXRlaSB3aXJkIGF1ZgorICBkZW4gbmV1ZXN0ZW4gU3RhbmQgZ2VicmFjaHQuCisgIFdlbm4gRHUgenUgVGVzdHp3ZWNrZW4gZWluIEhhdXMgaGFiZW4gd2lsbHN0LCBrYW5uc3QgRHUgZGllIEZ1bmt0aW9uIGF1Y2gKKyAgdm9uIEhhbmQgYXVmcnVmZW4uCisKK05ldWVyUmF1bSgpIC0gc2JfYXVzZ2FiZS5jCisgIEVpbmVtIEhhdXMgd2lyZCBlaW4gbmV1ZXIgUmF1bSBoaW56Z2VmdWVndC4KKyAgTWF4aW1hbCBzaW5kIDEwIFJhZXVtZSAocmF1bTAtcmF1bTkpIGVybGF1YnQuCisKK19MYWRlSGF1cygpIC0gdmlydHVhbF9jb21waWxlci5jCisgIFdlbm4gZGVyIHBvdGVudGllbGxlIEJlc2l0emVyIHdpcmtsaWNoIGVpbiBIYXVzIGhhdCB1bmQgc2ljaCBkZXNzZW4KKyAgRW52aXJvbm1lbnQgbGFkZW4gbGFlc3N0LCB3aXJkIGRhcyBIYXVzIGVyc3RlbGx0IHVuZCB6dXJ1ZWtnZWdlYmVuLgorCitfTGFkZVJhdW0oKSAtIHZpcnR1YWxfY29tcGlsZXIuYworICBBZWhubGljaCB3aWUgX0xhZGVIYXVzKCksIG51ciBmdWVyIGRlbiBSYXVtIG1pdCBkZXIgZ2V3dWVuc2NodGVuIE51bW1lci4KKyAgQmVpbSBFaW5nYW5nc3JhdW0gd2lyZCBub2NoIGRlciBBdXNnYW5nIG5hY2ggZHJhdXNzZW4gZ2VzZXR6dC4KKworRmluZGVIYXVzKCkgLSBoYXVzdmVyd2FsdGVyLmMsIHNiX2FudHJhZy5jLCBoYXVzbWVpc3Rlci5jLCAvc3RkL3BsYXllci9iYXNlLmMKKyAgR2lidCBkYXMgSGF1c29iamVrdCB6dXJ1ZWNrIG9kZXIgMCwgZmFsbHMgZGVyIFNwaWVsZXIga2VpbiBIYXVzIGhhdC4KKyAgRGFzIEhhdXMgd2lyZCBnZ2YuIGdlbGFkZW4uCisKK0xvZXNjaGVIYXVzKCkgLSBoYXVzbWVpc3Rlci5jCisgIEVpbiBIYXVzIHdpcmQgYWJnZXJpc3NlbjogRXMgd2lyZCBpbSBPYmplY3REYWVtb24gYWJnZW1lbGRldCwgc2FlbXRsaWNoZQorICBTYXZlZmlsZXMgd2VyZGVuIGdlbG9lc2NodCwgZWJlbnNvIGRhcyAucmVwLUZpbGUgZGVzIEhhdXNiZXNpdHplcnMuCisKKyAgUnVlY2tnYWJld2VydGU6CisgICAxIC0gYWxsZXMgT0ssIGRhcyBIYXVzIGlzdCB3ZWcKKyAgLTEgLSBzZWN1cmUoKSBzY2hsdWcgZmVobC4KKworVmVybGVnZUhhdXMoKSAtIGhhdXNtZWlzdGVyLmMKKyAgRWluIEhhdXMgd2lyZCBhbiBlaW5lbiBuZXVlbiBPcnQgdmVybGVndDogRXMgd2lyZCBpbSBPYmplY3REYWVtb24gYWItIHVuZAorICBhbSBuZXVlbiBPcnQgd2llZGVyIGFuZ2VtZWxkZXQsIHVuZCBkZXIgQXVzZ2FuZyBuYWNoIGRyYXVzc2VuIHdpcmQKKyAgYW5nZXBhc3N0LgorCisgIFJ1ZWNrZ2FiZXdlcnRlOgorICAgICAxIC0gYWxsZXMgT2ssIGRhcyBIYXVzIHN0ZWh0IGpldHp0IHdvYW5kZXJzCisgIC0xMTEgLSBzZWN1cmUoKSBzY2hsdWcgZmVobC4KKyAgICAtMSAtIGRlciBhbmdlYmxpY2hlIEJlc2l0emVyIGhhdCBnYXIga2VpbiBIYXVzCisgICAgLTIgLSBkYXMgSGF1cyBzdGVodCBnYXIgbmljaHQgZGEsIHdvIGVzIHNlaW4gc29sbHRlCisgICAgLTMgLSBkZXIgWmllbHJhdW0gZXhpc3RpZXJ0IG5pY2h0CisgICAgLTQgLSBpbSBaaWVscmF1bSBrYW5uIG5pY2h0IGdlYmF1dCB3ZXJkZW4KKyAgICAtNSAtIGVzIGdpYnQgQXVzZ2FlbmdlIGluIGJlbmFjaGJhcnRlIFNlaGVyaGFldXNlciAoZGllc2Ugd2VyZGVuIGJlaW0KKwkgVmVybGVnZW4gbmljaHQgYXV0b21hdGlzY2ggZ2Vsb2VzY2h0OyBkYXMgbXVzcyBkZXIgSGF1c2Jlc2l0emVyCisJIHNlbGJzdCBtYWNoZW4pCisKK1VuYmViYXViYXIoKSAtIGhhdXN2ZXJ3YWx0ZXIuYywgdHJhZ2hhdXMuYworICBEaWVzZSBGdW5rdGlvbiBlcm1pdHRlbHQsIG9iIGluIGVpbmVtIFJhdW0gZWluIEhhdXMgZ2ViYXV0IHdlcmRlbiBrYW5uLCB1bmQKKyAgd2VubiBuZWluLCB3YXJ1bSBuaWNodC4KKworICBSdWVja2dhYmV3ZXJ0ZToKKyAgICAwIC0gT0ssIGVzIGRhcmYgZ2ViYXV0IHdlcmRlbgorICAgIDEgLSBkZXIgWmllbHJhdW0gaXN0IGVudHdlZGVyIGVpbiBnZWNsb250ZXMgT2JqZWt0ICh1bmQgZGFtaXQgenVtaW5kZXN0CisJbmFjaCBkZW0gbmFlY2hzdGVuIFJlYm9vdCBhdWYgaW1tZXIgdmVybG9yZW4pIG9kZXIgZWluIE9iamVrdCwgZGFzcworCXZvbiBlaW5lbSB2aXJ0dWFsX2NvbXBpbGVyIGVyemV1Z3Qgd3VyZGUgKGRlciBPYmplY3REYWVtb24gd2lyZCB6dQorCWVpbmVtIFplaXRwdW5rdCBhYmdlZnJhZ3QsIGFuIGRlbSBkYXMgVkMtT2JqZWt0IG5vY2ggbmljaHQgc2VpbmVuCisJZW5kZ3VlbHRpZ2VuIE5hbWVuIGhhdCkuCisgICAgMiAtIEltIFppZWxyYXVtIGlzdCBQX0lORE9PUlMgZ2VzZXR6dCAod2VubiBpbiBzbyBlaW5lbSBSYXVtIHRyb3R6ZGVtCisJZ2ViYXV0IHdlcmRlbiBzb2xsLCB3ZWlsIGVzIHp1bSBCZWlzcGllbCBlaW5lIGdyb3NzZSBIb2VobGUgby5hZS4KKwlpc3QsIGthbm4gbWFuIFBfSU5ET1JSUyBpbW1lciBub2NoIHRlbXBvcmFlciBhdWYgMCBzZXR6ZW4pLgorICAgIDMgLSBJbSBaaWVscmF1bSBpc3QgUF9IQVVTX0VSTEFVQlQgbmljaHQgZ2VzZXR6dC4KKworRXJsYXViZSgpIC0gcmF1bTAuYworICBFaW5lbSBvZGVyIG1laHJlcmVuIFNwaWVsZXJuIHdlcmRlbiBTb25kZXJyZWNodGUgaW0gSGF1cyBlaW5nZXJhZXVtdC4KKyAgWnVydWVja2dlZ2ViZW4gd2lyZCBkaWUgbmV1ZSBlcmxhdWJlLUxpc3RlLgorCitWZXJiaWV0ZSgpIC0gcmF1bTAuYworICBFaW5lbSBvZGVyIG1laHJlcmVuIFNwaWVsZXJuIHdlcmRlbiBkaWUgUmVjaHRlIGVudHpvZ2VuLgorICBadXJ1ZWNrZ2VnZWJlbiB3aXJkIGRpZSBuZXVlIGVybGF1YmUtTGlzdGUuCisKK0hhdXNQcm9wKCkgLSBoYXVzLmMsIHJhdW0uYywgcmF1bTAuYywgc2JfYW50cmFnLmMsIGhhdXNtZWlzdGVyLmMKKyAgTWl0IGRpZXNlciBGdW5rdGlvbiBrb2VubmVuIGRpZSBJbmZvcm1hdGlvbmVuIHVlYmVyIGVpbmVuIEhhdXNiZXNpdHplcgorICBhYmdlZnJhZ3Qgd2VyZGVuLiBNb2VnbGljaCBzaW5kOgorICBIUF9FTlYgICAgIC0gZGVyIFJhdW0sIGluIGRlbSBkYXMgSGF1cyBzdGVodAorICBIUF9ST09NUyAgIC0gZGllIFphaGwgZGVyIHp1c2FldHpsaWNoZW4gUmFldW1lLCB1ZWJlciBkaWUgZGFzIEhhdXMgdmVyZnVlZ3QKKyAgSFBfQUxMT1dFRCAtIEFycmF5IG1pdCBkZW4gTGV1dGVuLCBkaWUgU29uZGVycmVjaHRlIGdlbmllc3NlbgorCitQQ3J1bmNoKCkgLSByYXVtLmMsIGxvc2EuYywgaGF1c21laXN0ZXIuYworICBVbSBQbGF0eiBiZWltIFNwZWljaGVybiB6dSBzcGFyZW4sIHdlcmRlbiBEZXRhaWxzLCBSZWFkRGV0YWlscyB1bmQgQmVmZWhsZSwKKyAgZGllIGRlbiBnbGVpY2hlbiBUZXh0IGVyZ2ViZW4sIHp1c2FtbWVuZ2VwYWNrdC4gQmVpbSBIYXVzbWVpc3RlciBoYXQgZGFzCisgIGRlbiBFZmZla3QsIGRhc3MgaW0gZ2VuZXJpZXJ0ZW4gUXVlbGx0ZXh0IHouQi4KKyAgICBBZGREZXRhaWwoICh7ICJmb28iLCAiYmFyIiB9KSwgImJsYWZhc2VsXG4iKTsKKyAgc3RlaHQgYW5zdGVsbGUgdm9uCisgICAgQWRkRGV0YWlsKCAiZm9vIiwgImJsYWZhc2VsXG4iKTsKKyAgICBBZGREZXRhaWwoICJiYXIiLCAiYmxhZmFzZWxcbiIpOworCiszLiBTb25kZXJyZWNodGUKKz09PT09PT09PT09PT09PQorCitEZXIgSGF1c2Jlc2l0emVyIGthbm4gdm9uIHNlaW5lbSBFaW5nYW5nc3JhdW0gYXVzIGFuZGVyZW4gTGV1dGVuIFJlY2h0ZSBpbgorc2VpbmVtIEhhdXMgZWlucmFldW1lbi4gRGF6dSBkaWVudCBkZXIgQmVmZWhsICJlcmxhdWJlIi4gTGV1dGUgbWl0IFNvbmRlci0KK3JlY2h0ZW4ga29lbm5lbjoKKy0gZGFzIEhhdXMgYXVmLSB1bmQgYWJzY2hsaWVzc2VuCistIGRpZSBUcnVoZSBvZWZmbmVuIChzY2hsaWVzc2VuIGRhcmYgc2llIGplZGVyKQorLSBuZXR6dG90IGltIEhhdXMgYmxlaWJlbgorLSBSdWVja21lbGR1bmdlbiBhdXMgZGVtIFJlcG9ydGZpbGUgYW5zZWhlbiAoYWJlciBuaWNodCBhZW5kZXJuKQorCitBdXNzZXJkZW0gbXVzcyBtYW4gU29uZGVycmVjaHRlIGluIGVpbmVtIE5hY2hiYXJoYXVzIGhhYmVuLCB3ZW5uIG1hbiB2b24KK3NlaW5lbSBIYXVzIGVpbmVuIEF1c2dhbmcgZG9ydGhpbiBsZWdlbiB3aWxsLgorCitEYXMgQXJyYXkgbWl0IGRlbiBOYW1lbiBkZXIgQmVyZWNodGlndGVuIGVyaGFlbHQgbWFuIHZvbSBIYXVzdmVyd2FsdGVyIHBlcgorSGF1c1Byb3AoPG93bmVyPiwgSFBfQUxMT1dFRCkuIEluIGRlbSBBcnJheSBzdGVoZW4gZGllIFVzZXItSURzIGRlciBMZXV0ZSwKK2FsbGVyZGluZ3MgbWl0IGdyb3NzZW0gQW5mYW5nc2J1Y2hzdGFiZW4uCisKKzQuIERpZSBUb29scworPT09PT09PT09PT09CisKKzRhLiBEZXIgSGF1c21laXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVyIEhhdXNtZWlzdGVyIGVybGF1YnQgZGFzIGVpbmZhY2hlIEFicmVpc3NlbiB1bmQgVmVybGVnZW4gdm9uIEhhZXVzZXJuCitzb3dpZSBkYXMgR2VuZXJpZXJlbiB2b24gTFBDLVF1ZWxsdGV4dCBhdXMgZGVuIFNhdmVmaWxlcy4gRGF6dSBzdGVsbHQgZXIKK2RyZWkgS29tbWFuZG9zIHp1ciBWZXJmdWVndW5nOgorCit2ZXJsZWdlIDxuYW1lPiBuYWNoIDx6aWVsPgorICBEYXMgSGF1cyBkZXMgU3BpZWxlcnMgPG5hbWU+IHdpcmQgaW4gZGVuIFJhdW0gPHppZWw+IHZlcmxlZ3QuIDx6aWVsPiBpc3QKKyAgZGFiZWkgZW50d2VkZXIgZGVyIEZpbGVuYW1lIGRlcyBaaWVscmF1bWVzIG9kZXIgImhpZXIiLCB3ZW5uIGRhcyBIYXVzCisgIHp1IERlaW5lbSBha3R1ZWxsZW4gU3RhbmRvcnQgdmVybGVndCB3ZXJkZW4gc29sbC4KKyAgU29sbHRlIGRhcyBWZXJsZWdlbiBmZWhsc2NobGFnZW4gKHNpZWhlIFZlcmxlZ2VIYXVzKCkgaW0gSGF1c3ZlcndhbHRlcikKKyAgbWVsZGV0IHNpY2ggZGVyIEhhdXNtZWlzdGVyIGVudHNwcmVjaGVuZC4KKworcmVpc3NlIDxuYW1lPiBhYgorICBEYXMgSGF1cyBkZXMgU3BpZWxlcnMgPG5hbWU+IHdpcmQgYWJnZXJpc3Nlbi4KKyAgQUNIVFVORyEgRXMgZ2lidCBrZWluZSBTaWNoZXJoZWl0c2FiZnJhZ2UhCisKK2dlbmVyaWVyZSA8bmFtZT4gWzxucj5dIFtzb2Z0IHwgZ2Fuel0KKyAgR2VuZXJpZXJ0IGF1cyBkZW0gU2F2ZWZpbGUgZWluIExQQy1GaWxlLgorICBPaG5lIEFuZ2FiZSBlaW5lciBOdW1tZXIgd2lyZCBkaWUgQXVzc2VuYW5zaWNodCBnZW5lcmllcnQsIGFuc29uc3RlbiBkZXIKKyAgUmF1bSBtaXQgZGVyIGVudHNwcmVjaGVuZGVuIE51bW1lci4KKyAgQXVzc2VyIHdlbm4gInNvZnQiIGFuZ2VnZWJlbiB3dXJkZSwgd2VyZGVuIGRpZSBEYXRlaWVuIGluIGRhcyBWZXJ6ZWljaG5pcworICAicmVwLyIgZ2VzY2hyaWViZW4sIHVuZCB6d2FyIGFscyAiPG5hbWU+aGF1cy5jIiwgIjxuYW1lPnJhdW0wLmMiIGV0Yy4KKyAgQmVmaW5kZXQgc2ljaCBkaWUgVHJ1aGUgaW4gZGVtIGdlbmVyaWVydGVuIFJhdW0sIHdpcmQgYXVjaCBub2NoIGVpbmUgRGF0ZWkKKyAgIjxuYW1lPnRydWhlLmMiIGFuZ2VsZWd0LgorICBEaWUgRGF0ZWllbiBzaW5kIGltIHdlc2VudGxpY2hlbiBmdWVyIE1hZ2llciBnZWRhY2h0LCBkaWUgaWhyZSBIYWV1c2VyIGFscworICBMUEMtRmlsZXMgdW50ZXIgRWlnZW5yZWdpZSB3ZWl0ZXJmdWVocmVuIHdvbGxlbi9zb2xsZW4uIEF1c2dhZW5nZSBzaW5kCisgIHJlbGF0aXYgenUgIi9wbGF5ZXJzLzxuYW1lPi9zZWhlcmhhdXMiLgorICBNaXQgZGVtIFBhcmFtZXRlciAiZ2FueiIgbGFlc3N0IHNpY2ggZGFzIGdlc2FtdGUgSGF1cyBhdWYgZWluZW4gU2NobGFnCisgIHVtd2FuZGVsbi4KKyAgInNvZnQiIHN0YW1tdCBub2NoIGF1cyBkZXIgWmVpdCwgYWxzIGljaCBkaWUgVHlwb3MgZGVyIFNlaGVyIHNlbGJlciBmaXhlbgorICBtdXNzdGUuIERhcyBIYXVzIG9kZXIgZGVyIFJhdW0gd2lyZCBkYWJlaSBpbiBkaWUgRGF0ZWkgUEFUSCsiZml4ZWQuYyIKKyAgZ2VzY2hyaWViZW4uCisKKzRiLiBsaXN0ZS5jCistLS0tLS0tLS0tLQorCitBYiB1bmQgenUgc29sbHRlIG1hbiBtYWwgbmFjaHNlaGVuLCB3ZWxjaGUgU2VoZXIgc2ljaCBnZWxvZXNjaHQgaGFiZW4gb2RlcgorenUgTWFnaWVybiB3dXJkZW4uIERpZSBIYWV1c2VyIHZvbiBnZWxvZXNjaHRlbiBTZWhlcm4gc29sbHRlbiBlYmVuZmFsbHMKK2dlbG9lc2NodCB3ZXJkZW47IE1hZ2llciBrb2VubmVuIGlocmUgSGFldXNlciBhbHMgbm9ybWFsZSBMUEMtT2JqZWt0ZQord2VpdGVyZnVlaHJlbiAoc29iYWxkIGRpZSBMZXZlbCAyMSBvZGVyIDI1IGhhYmVuKS4KKworRGllIExpc3RlIHplaWd0IGFuLCB3ZWxjaGUgTGV1dGUgYmV0cm9mZmVuIHNpbmQuIERhenUgbXVzcyBzaWUgZWluZmFjaCBudXIKK2dlbGFkZW4gd2VyZGVuLgorCitad2VpIEF1c25haG1lbiBnaWJ0IGVzOgorLSBLcmlnaSBoYXQgc2ljaCB6d2FyIGdlbG9lc2NodCwgZXIgaGF0IGFiZXIgZGFydW0gZ2ViZXRlbiwgZGFzcyBzZWluIEhhdXMKKyAgd2VpdGVyIGJlc3RlaGVuIGthbm4gKGVyIGlzdCBqZXR6dCBEYXVlcmdhc3QpCistIEZyYWdnbGUgaXN0IHp3YXIgTWFnaWVyLCBoYXQgc2VpbiBIYXVzIGFiZXIgbWFsIHp1IFRlc3R6d2Vja2VuIGJla29tbWVuCisKKzRjLiBoYXVzdG9vbC5jCistLS0tLS0tLS0tLS0tLQorCitEaWVzZXMgVGVpbCBpc3QgbWl0dGxlcndlaWxlIHVlYmVyaG9sdDsgZXMgc3RhbW10IG5vY2ggYXVzIGRlciBaZWl0LCBhbHMKKyd0eXBvJy0gdW5kIGFlaG5saWNoZSBNZWxkdW5nZW4gbm9jaCBpbiBtZWluZW0gZWlnZW5lbiAucmVwLUZpbGUgbGFuZGV0ZW4KK3VuZCBpY2ggZGVuIEtyYW0gYXVjaCBhYmFyYmVpdGVuIG11c3N0ZS4gTWl0IGRlbSBUb29sIGtvbm50ZSBpY2ggZGllIE1lbC0KK2R1bmdlbiBhdXMgbWVpbmVtIC5yZXAtRmlsZSBhbnNlaGVuIHVuZCBlaW5lIEJlbmFjaHJpY2h0aWd1bmcgYW4gZGVuIEhhdXMtCitiZXNpdHplciBnZW5lcmllcmVuLgorCisKKzUuIERhcyBIYXVzCis9PT09PT09PT09PQorCitEYXMgSGF1cyBzZWxic3QgemVyZmFlbGx0LCB3YXMgZGllIEJlc2NocmVpYnVuZ2VuIGFuZ2VodCwgaW4gZHJlaSBncm9zc2UKK0JlcmVpY2hlOiBkZW4gdm9uIGF1c3NlbiBzaWNodGJhcmVuIFRlaWwsIGRpZSBSYWV1bWUgaW0gSW5uZXJlbiwgdW5kIGRpZQorVHJ1aGUuIEJlaSBkZW4gUmFldW1lbiBoYXQgZGVyIEVpbmdhbmdzcmF1bSBub2NoIGVpbiBwYWFyIFNvbmRlcmZ1bmt0aW9uZW4uCisKKzVhLiBBdXNzZW5hbnNpY2h0CistLS0tLS0tLS0tLS0tLS0tLQorCitEaWVzIGlzdCBkYXMgT2JqZWt0LCBkYXMgaW0gT2JqZWN0RGFlbW9uIGFuZ2VtZWxkZXQgd2lyZCAoIjxuYW1lPmhhdXMiKS4KK0RlciBIYXVzYmVzaXR6ZXIga2FubiBmb2xnZW5kZSBFaWdlbnNjaGFmdGVuIGJlc2NocmVpYmVuOgorLSBkaWUgTGFuZ2Jlc2NocmVpYnVuZyAoUF9MT05HKQorLSBlaW5lIFplaWxlLCB3aWUgZGllIEhhdXN0dWVyIGF1c3NlaGVuIHNvbGwgKEhfRE9PUikKKy0gZGllIFp1c3RhZW5kZSBkZXIgSGF1c3R1ZXIgKG9mZmVuLCBnZXNjaGxvc3NlbiwgYWJnZXNjaGxvc3NlbjsgSF9ET09STFNUQVQpCisKK0F1c3NlcmRlbSBzdGVoZW4gZm9sZ2VuZGUgS29tbWFuZG9zIHp1ciBWZXJmdWVndW5nOgorLSBiZXRyaXR0L2JldHJldGUgPGhhdXM+CisgIFNvbGx0ZSBrbGFyIHNlaW4uIEdlaHQgbnVyLCB3ZW5uIGRhcyBIYXVzIG9mZmVuIGlzdC4KKy0ga2xvcGZlIGFuIDxoYXVzPiBhbgorICBEYXMgS2xvcGZlbiBob2VydCBtYW4gaW0gZ2FuemUgSGF1cworLSBub3RpeiA8dGV4dD4KKyAgRGVyIEhhdXNiZXNpdHplciBrYW5uIGRhbWl0IGVpbmUga3VyemUgTm90aXogYW4gZGVyIEhhdXN0dWVyIGFuYnJpbmdlbi4KKworbW9kdWxlcy9oYXVzdHVlci5jIHN0ZWxsdCBkaWUgQmVmZWhsZSB6dW0gT2VmZm5lbiB1bmQgU2NobGllc3NlbiBkZXMgSGF1c2VzCit6dXIgVmVyZnVlZ3VuZy4gQXVmZ2VzY2hsb3NzZW4gd2VyZGVuIGthbm4gZGFzIEhhdXMgbnVyIHZvbiBMZXV0ZW4gbWl0CitzcGV6aWVsbGVyIEdlbmVobWlndW5nLgorCitXZW5uIGRpZSBLdXJ6YmVzY2hyZWlidW5nIGdlYWVuZGVydCB3ZXJkZW4gc29sbCwgbXVzcyBkYXMgZWluIE1hZ2llciBtYWNoZW4uCitPZmZpemllbGxlciBBbnNwcmVjaHBhcnRuZXIgZGFmdWVyIGlzdCBkZXIgSGF1c21haW50YWluZXIgKGFsc28gRFUgOi0pCitNYW4gc29sbHRlIGRhYmVpIGRhcmF1ZiBhY2h0ZW4sIGRhc3MgZGllIEJlc2NocmVpYnVuZyBhKSBpbiBkaWUgVW1nZWJ1bmcgdW5kCitiKSBhbGxnZW1laW4gaW4gZWluZSBGYW50YXN5d2VsdCBwYXNzdCAoZGFzIGlzdCBsZWlkZXIgbmljaHQgYmVpIGFsbGVuCitIYWV1c2VybiBkZXIgRmFsbC4uLikKK1dlbm4gZGllIEt1cnpiZXNjaHJlaWJ1bmcgZ2VhZW5kZXJ0IHdpcmQsIHNvbGx0ZW4gZ2dmLiBhdWNoIG5vY2ggZGllIElEcywgZGVyCitOYW1lIHVuZCBkYXMgR2VzY2hsZWNodCBhbmdlcGFzc3Qgd2VyZGVuLgorVW0gZWluIEhhdXMgdW5zaWNodGJhciB6dSBtYWNoZW4sIG11c3MgUF9TSE9SVCBhdWYgMCBnZXNldHp0IHdlcmRlbi4KK1dlbm4gbm9jaCBhbmRlcmUgU2VoZXJoYWV1c2VyIGltIGdsZWljaGVuIFJhdW0gc3RlaGVuLCB1bmQgaW4gZGVyIEJlc2NocmVpLQorYnVuZyBkZXMgZ2VhZW5kZXJ0ZW4gSGF1c2VzIG5pY2h0cyBtZWhyIGF1ZiBlaW4gImhhdXMiIGhpbndlaXN0LCBrYW5uIHVuZAorc29sbHRlIGRpZSBJRCAiaGF1cyIgZW50ZmVybnQgd2VyZGVuLgorVW0gZGllIEFlbmRlcnVuZ2VuIHp1IHNpY2hlcm4sIG11c3MgaW0gSGF1cyBTYXZlKCkgYXVmZ2VydWZlbiB3ZXJkZW4uCisKK1p3ZWkgSURzIHNvbGx0ZW4gbmllIGVudGZlcm50IHdlcmRlbjogInNlaGVccmhhdXMiIHVuZCAiXG48bmFtZT5oYXVzIgorCisKKzViLiBEaWUgUmFldW1lCistLS0tLS0tLS0tLS0tLQorCitQcm9ncmFtbXRlY2huaXNjaCBiZWZpbmRlbiBzaWNoIGhpZXIgaGF1cHRzYWVjaGxpY2ggRnVua3Rpb25lbiB6dW0gQmVzY2hyZWktCitiZW4gZGVzIFJhdW1lcywgSGluenVmdWVnZW4gdW5kIEVudGZlcm5lbiBkZXMgTGljaHRlcywgQW4tIHVuZCBBYnNjaGFsdGVuCitkZXMgTGljaHRlcyB1bmQgRWluc2VoZW4gZGVzIC5yZXAtRmlsZXMuCitBdXNzZXJkZW0ga2FubiBtYW4gUGVyc29uZW4sIEdlZ2Vuc3RhZW5kZSBvZGVyIGFsbGVzIGF1cyBkZW0gSGF1cyB3ZXJmZW4uCisKK0F1Y2ggZGllIFJhZXVtZSBoYWJlbiBkaWUgSUQgInNlaGVccmhhdXMiLgorCitFcndhZWhuZW5zd2VydGUgRnVua3Rpb25lbjoKKworbm9ybXN0cigpCisgIEVyc2V0enQgQEAgaW4gZGVuIEJlc2NocmVpYnVuZ2VuIGR1cmNoICoqIChkYW1pdCBrZWluIHByb2Nlc3Nfc3RyaW5nKCkKKyAgYXVzZ2VmdWVocnQgd2VyZGVuIGthbm4pCisKK2JyaygpCisgIEVyemV1Z3QgYXVzIGVpbmVyIGR1cmNoIEtvbW1hdGEgZ2V0cmVubnRlbiBMaXN0ZSBlaW4gQXJyYXkgdm9uIFN0cmluZ3MKKworYmVmQ2hlY2soKQorICBGYWVuZ3QgdmVyYm90ZW5lIEJlZmVobGUgYWIgKEtvbW1hbmRvcywgZGllIExlZXJ6ZWljaGVuIGVudGhhbHRlbjsgbmljaHQKKyAgZ2VzZXR6dGUgQXVzZ2FlbmdlOyBhbGxlIEtvbW1hbmRvcywgZGllIGRlciBSYXVtIGRlZmluaWVydCwgYXVzc2VyCisgICJvZWZmbmUiLCAic2NobGllc3MiLCAic2NobGllc3NlIikKKworb3duZXJfY2hlY2soKQorICBEYXJmIGRlciBTcGllbGVyIGRhcz8gRmFsbHMgb2huZSBBcmd1bWVudCBhdWZnZXJ1ZmVuLCBpc3QgZGllIEFrdGlvbiBudXIKKyAgZXJsYXVidCwgd2VubiB0aGlzX3BsYXllcigpIGRlciBIYXVzYmVzaXR6ZXIgaXN0LgorICBNaXQgQXJndW1lbnQgd2lyZCBhdWNoIGRpZSBlcmxhdWJlLUxpc3RlIGdlcHJ1ZWZ0LgorCithcnJfb3V0KCkKKyAgR2lidCBlaW4gQXJyYXkgdm9uIFN0cmluZ3MgYXVzIG9kZXIgenVydWVjaywgamUgbmFjaCBBbndlbmR1bmcKKworY2xlYW5fdXAoKQorICBTb3JndCBkYWZ1ZXIsIGRhc3MgbnVyIGxlZXJlIFJhZXVtZSB3ZWdnZXJhZXVtdCB3ZXJkZW4KKworQmVjb21lc05ldERlYWQoKQorICBOZXR6dG90ZSB2ZXJsYXNzZW4gZGFzIEhhdXMgKHNvd2VpdCBzaWUgbmljaHQgYXVmIGRlciBlcmxhdWJlLUxpc3RlIHN0ZWhlbikKKworaW5pdCgpL2ludF9sb25nKCkKKyAgTWVsZHVuZ2VuIHVlYmVyIHVuc2ljaHRiYXJlIE1hZ2llcgorCitsaWVzKCkKKyAgUmVhZERldGFpbHMgd2VyZGVuIG1pdCBNb3JlKCkgYXVzZ2VnZWJlbgorCitEaWUgQmVmZWhsZSB6dXIgQmVzY2hyZWlidW5nIGRhcmYgbnVyIGRlciBIYXVzYmVzaXR6ZXIgYmVudXR6ZW4uIERlbiBCZWZlaGwKKyJ1ZWJlcnNpY2h0IiBrb2VubmVuIGF1Y2ggZGllIE1hZ2llciwgZGllIGltIGFjY2Vzc19yaWdodHMuYyBzdGVoZW4sIHZlci0KK3dlbmRlbi4KK05hZWhlcmVzIHp1IGRlbiBtb2VnbGljaGVuIEJlc2NocmVpYnVuZ2VuIGZvbGdlbiB1bnRlbi4KKworCis1Yy4gRGVyIEVpbmdhbmdzcmF1bQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVyIEVpbmdhbmdzcmF1bSBzdGVsbHQgenVzYWV0emxpY2ggbm9jaCBmb2xnZW5kZSBCZWZlaGxlIHVuZCBNb2VnbGljaGtlaXRlbgorenVyIFZlcmZ1ZWd1bmc6CisKKy0gT2VmZm5lbiwgU2NobGllc3NlbiB1bmQgQWJzY2hsaWVzc2VuIGRlcyBIYXVzZXMgdm9uIGlubmVuCistIEVpbnJhZXVtZW4gdW5kIEVudHppZWhlbiB2b24gU29uZGVycmVjaHRlbiBtaXQgImVybGF1YmUiIHVuZCAidmVyYmlldGUiCistIEJlbnV0emVuIGRlcyBHdWNrbG9jaHMgaW4gZGVyIFR1ZXIgbWl0IGRlbSBCZWZlaGwgInNwaW9uIgorLSBNaXR0ZWlsdW5nIHVlYmVyIGFuZ2VzYW1tZWx0ZSAndHlwbyctTWVsZHVuZ2VuIHNlaXQgZGVtIGxldHp0ZW4gQmV0cmV0ZW4KKy0gInVlYmVyc2ljaHQiIHplaWd0IHp1c2FldHpsaWNoIGRpZSBMZXV0ZSBhdWYgZGVyIGVybGF1YmUtTGlzdGUKKworCis1ZC4gRGllIFRydWhlCistLS0tLS0tLS0tLS0tCisKK0RpZSBUcnVoZSBrYW5uIHVuZW5kbGljaCB2aWVsZSBHZWdlbnN0YWVuZGUgYXVmbmVobWVuLgorQWVuZGVybiBsYXNzZW4gc2ljaCBHZXNjaGxlY2h0LCBOYW1lLCBBZGpla3RpdmUgKGF1cyBkaWVzZW4gZHJlaWVuIHdpcmQgZGllCitLdXJ6YmVzY2hyZWlidW5nIHp1c2FtbWVuZ2VzZXR6dCksIElEcywgTGFuZ2Jlc2NocmVpYnVuZyB1bmQgTWF0ZXJpYWwuCitEaWUgSUQgIlx0XHJ1aGUiIGlzdCBJTU1FUiBnZXNldHp0LgorRGllIFRydWhlIGxhZXNzdCBzaWNoIGlubmVyaGFsYiBkZXMgSGF1c2VzIGZyZWkgdmVyc2NoaWViZW4uIEluIGRlbSBSYXVtLAoraW4gZGVtIHNpZSBzdGVodCwgaXN0IGRpZSBQcm9wZXJ0eSBIX0NIRVNUIGF1ZiAxIGdlc2V0enQuCitUeXBvbWVsZHVuZ2VuIGRlciBUcnVoZSBnZWhlbiBpbiBkYXMgUmVwb3J0ZmlsZSBkZXMgSGF1c2Jlc2l0emVycy4KKworUHJvYmxlbTogQWIgdW5kIHp1IGdlYmVuIGVpbmlnZSBTcGV6aWFsaXN0ZW4gYmVpIGRlciBCZXNjaHJlaWJ1bmcgZGVyIElEcworc2Nob24gZGllIExhbmdiZXNjaHJlaWJ1bmcgZWluLiBEYW5hY2gga29lbm5lbiBzaWUgZGllIFRydWhlIG5pY2h0IG1laHIKK2Fuc3ByZWNoZW4uCitMb2VzdW5nOiBWb24gSGFuZCBlaW5lIElEIHNldHplbiB1bmQgZGllIFRydWhlIG1pdCBTYXZlKCkgc3BlaWNoZXJuLgorCitJZGVlbjogWnVzdGFuZCBkZXIgVHJ1aGUgKGdlb2VmZm5ldC9nZXNjaGxvc3NlbikgYmVzY2hyZWliYmFyIG1hY2hlbiB1bmQKK29wdGlvbmFsIGdhbnogd2VnbGFzc2VuLiBNYWNoYmFyIHVlYmVyIEhfRE9PUkxTVEFULiBJbiBzaG9ydCgpIHNpbmQgc2Nob24KK2RpZSBlbnRzcHJlY2hlbmRlbiBWb3JrZWhydW5nZW4gZ2V0cm9mZmVuOyAiYmVzY2hyZWliZSB0cnVoZSBzdGF0dXMiIHdpcmQKK2F1Y2ggc2Nob24gYWJnZWZyYWd0LCBhYmVyIG5vY2ggbmljaHQgYXVzZ2V3ZXJ0ZXQuIEF1c3NlcmRlbSBtdWVzc3RlIGRpZQorS3VyemJlc2NocmVpYnVuZyBkYW5uIGV4cGxpeml0IGFuZ2VnZWJlbiB3ZXJkZW4uCisKK09lZmZuZW4ga29lbm5lbiBkaWUgVHJ1aGUgbnVyIExldXRlIG1pdCBFcmxhdWJuaXMuIFNjaGxpZXNzZW4ga2FubiBzaWUKK2plZGVyLiBWZXJzY2hpZWJlbiBrYW5uIHNpZSBudXIgZGVyIEhhdXNiZXNpdHplci4KKworRGllIERhdGVuIGRlciBUcnVoZSB3ZXJkZW4gaW4gX3NldF9vd25lcigpIGdlbGFkZW4uIERpZXNlciBGdW5rdGlvbiB3aWVkZXJ1bQord2lyZCB2b24gZGVtIFJhdW0gYXVmZ2VydWZlbiwgaW4gZGVtIGRpZSBUcnVoZSBzdGVodCAobW9kdWxlcy9sb3NhOjpMb2FkKCkpLgorCisKKzYuIFNlaGVyYmFuay9IYXVzZXJ3ZXJiCis9PT09PT09PT09PT09PT09PT09PT09PQorCitEaWUgQmFuayBzdGVodCBpbiBEcmFjaGVuaG9ydC4gV2VzZW50bGljaGUgQmVzdGFuZHRlaWxlIHNpbmQgZHJlaSBTY2hhbHRlcgorbWl0IGVudHNwcmVjaGVuZGVuIFdhcnRlc2NobGFuZ2VuLgorCitEZXIgQW50cmFnc3NjaGFsdGVyIC0gc2JfYW50cmFnLmMKKyAgSGllciBlcmhhZWx0IG1hbiBkaWUgVmVydHJhZWdlIGZ1ZXIgZWluIEhhdXMgb2RlciBlaW5lbiBuZXVlbiBSYXVtLiBFaW5lbgorICBBdXNiYXV2ZXJ0cmFnIGJla29tbXQgbWFuIGFsbGVyZGluZ3MgZXJzdCBkYW5uLCB3ZW5uIGRhcyBIYXVzIHNjaG9uIHN0ZWh0LgorICBWZXJ0cmFlZ2Ugd2VyZGVuIG51ciBhbiBTZWhlciBhdXNnZWhhZW5kaWd0LCBkaWUga2VpbmVuIFBLIGhhYmVuLgorCitEZXIgVmVydHJhZyAtIGJhdXNwYXJ2ZXJ0cmFnLmMKKyAgRXJoYWVsdGxpY2ggYW0gQW50cmFnc3NjaGFsdGVyLgorICBEZXIgVmVydHJhZyBtdXNzIGF1Y2ggYW0gQW50cmFnc3NjaGFsdGVyIHVudGVyc2NocmllYmVuIHdlcmRlbi4gRGllIFVudGVyLQorICBzY2hyaWZ0IHdpcmQgbWl0IEJsdXQgYmVzdGFldGlndCwgd29kdXJjaCBlaW4gcmVkdWNlX2hpdF9wb2ludCg1MCkgZmFlbGxpZworICB3aXJkLiA7KQorICBBdWYgaWhtIHdpcmQgamVkZSBlaW5nZXphaGx0ZSBSYXRlIHZlcm1lcmt0LgorICBXaWxsIG1hbiBkb2NoIGtlaW4gSGF1cywga2FubiBtYW4gZGVuIFZlcnRyYWcgamVkZXJ6ZWl0IHplcnJlaXNzZW4uIERpZQorICBlaW5nZXphaGx0ZW4gRVAgc2luZCBkYW5uIGFsbGVyZGluZ3Mgd2VnLgorICBOYWNoIGRlciBVbnRlcnNjaHJpZnQgYmVrb21tdCBtYW4gZGVuIE1hc3Rlci1CbG9jayB1ZWJlcnJlaWNodC4KKworRGVyIE1hc3Rlci1CbG9jayAtIGJsb2NrLmMKKyAgRGVyIEJsb2NrIG5pbW10IGRpZSBha3R1ZWxsZW4gUmF0ZW4gYXVmLiBEYXp1IGRpZW50IGRlciBibG9ja19zaGFkb3cKKyAgKGluIC9zdGQvcGxheWVyL3NoYWRvd3MvKSwgZGVyIGltbWVyIGRhbm4gYWt0aXZpZXJ0IHdpcmQsIHdlbm4gbWFuIGRlbgorICBCbG9jayBhbnppZWh0IChlciBpc3QgZWluZSBBVF9NSVNDLVJ1ZXN0dW5nLCBzY2h1ZXR6dCBhbHNvIG5pY2h0KS4KKyAgRGVyIFNoYWRvdyBsZWl0ZXQgQWRkRXhwKCktQXVmcnVmZSBhbiBkZW0gQmxvY2sgdW0uIEJlaSBtaW5kZXN0ZW5zCisgIDMwLTQwIEVQIHdpcmQgYWxsZXMgYmlzIGF1ZiBkZW4gTWluZGVzdGFudGVpbCBhdWYgZGVuIEJsb2NrIGVpbmdlemFobHQsCisgIHVuZCBkZXIgTWluZGVzdGFudGVpbCBrb21tdCBkZW0gU3BpZWxlciB6dWd1dGUuCisKK0RlciBFaW56YWhsdW5nc3NjaGFsdGVyIC0gc2JfZWluemFobHVuZy5jCisgIElzdCBkaWUgTWFzdGVyLUJsb2NrIHZvbGwsIGthbm4gbWFuIGlobiBoaWVyIHZvcmxlZ2VuLiBEaWUgUmF0ZSB3aXJkIGRhbm4KKyAgYXVmIGRlbiBWZXJ0cmFnIGdlYnVjaHQsIHVuZCBtYW4gYmVrb21tdCBlaW5lbiBuZXVlbiBCbG9jayBmdWVyIGRpZQorICBuYWVjaHN0ZSBSYXRlIChzb3dlaXQgbWFuIG5vY2ggbmljaHQgZmVydGlnIGlzdCkuCisKK0RlciBBdXNnYWJlc2NoYWx0ZXIgLSBzYl9hdXNnYWJlLmMKKyAgSGF0IG1hbiBhbGxlIFJhdGVuIGVpbmdlemFobHQsIGthbm4gbWFuIGhpZXIgbmFjaCBWb3JsYWdlIGRlcyBWZXJ0cmFncyBkaWUKKyAgRnJ1ZWNodGUgc2VpbmVyIEFyYmVpdCBlcm50ZW4uCisgIEhhbmRlbHRlIGVzIHNpY2ggdW0gZWluZW4gSGF1c3ZlcnRyYWcsIGJla29tbXQgbWFuIGVpbiBJbnN0YW50aGF1cyBhdXNnZS0KKyAgaGFlbmRpZ3QuCisgIEhhbmRlbHRlIGVzIHNpY2ggdW0gZWluZW4gQXVzYmF1dmVydHJhZywgd2lyZCBkaWUgUmF1bXphaGwgZGVzIEhhdXNlcyB1bQorICBlaW5zIGVyaG9laHQgKG1hbiBiZWtvbW10IGtlaW4gT2JqZWt0IGluIGRpZSBIYW5kOyB2aWVsbWVociBrYW5uIG1hbiBpbgorICBzZWluZW0gSGF1cyBqZXR6dCBlaW5lbiBBdXNnYW5nIGluIGRlbiBuZXVlbiBSYXVtIGxlZ2VuKS4KKyAgQUxMRVJESU5HUzogVW0gSGF1cyBvZGVyIFJhdW0gYXVzenVnZWJlbiwgbXVlc3NlbiBpbiBkZXIgWmVudHJhbGJhbmsKKyAgbWluZGVzdGVucyAzMDAwMCBNdWVuemVuIHZvcmhhbmRlbiBzZWluIChkYW1pdCBkZWNrdCBkaWUgU2VoZXJiYW5rIGRpZQorICBNYXRlcmlhbGtvc3RlbikuIFNvbGFuZ2UgbmljaHQgZ2VudWcgR2VsZCBkYSBpc3QsIGdpYnRzIGF1Y2gga2VpbiBIYXVzLgorICBEZXIgU2VoZXIgaGF0IHp3ZWkgQWx0ZXJuYXRpdmVuOiBhKSB3YXJ0ZW4sIGJpcyBnZW51ZyBHZWxkIGRhIGlzdCwgb2RlcgorICBiKSB6dW0gRW5kZSBkZXIgV2VsdCByZWlzZW4gdW5kIGRhcyBHZWxkIGluIGRlbiBHZWxkc3BlaWNoZXIgZGVyIFplbnRyYWwtCisgIGJhbmsgd2VyZmVuLgorCitFaW5lIFJhdGUgdW1mYXNzdCA4MDAwMCBFUC4KK0VzIGdpYnQgendlaSBWZXJ0cmFnc3ZhcmlhbnRlbjogc2FuZnQgdW5kIHNjaG5lbGwuCitCZWkgZGVyIHNhbmZ0ZW4gVmFyaWFudGUgaGF0IG1hbiA0IFN0dW5kZW4gWmVpdCwgdW0gZGllIFJhdGUgenUgc2FtbWVsbiwgYmVpCitkZXIgc2NobmVsbGVuIFZhcmlhbnRlIHNpbmQgZXMgMiBTdHVuZGVuLgorRGllc2UgWmVpdGVuIHdlcmRlbiBuYWNoIE9ubGluZS1aZWl0IGdlbWVzc2VuLCBuaWNodCBuYWNoIFJMLVplaXQuIDopCitGdWVyIGVpbiBIYXVzIGJlbm9ldGlndCBtYW4gYmVpIGRlbiBzYW5mdGVuIFZhcmlhbnRlIDMwIFJhdGVuLCBiZWkgZGVyCitzY2huZWxsZW4gVmFyaWFudGUgMjUgUmF0ZW4uCitGdWVyIGVpbmVuIFJhdW0gc2luZCBlcyAxMiBSYXRlbiBiZWkgZGVyIHNhbmZ0ZW4gdW5kIDEwIFJhdGVuIGJlaSBkZXIKK3NjaG5lbGxlbiBWYXJpYW50ZS4KK1VlYmVyemllaHQgbWFuIGRpZSBaZWl0LCBlcmhvZWh0IHNpY2ggZGllIFJhdGVuaG9laGUgdW0gNjAlIGF1ZiAxMjgwMDAgRVAuCitNYW4gaGF0IGJlaSBiZWlkZW4gVmFyaWFudGVuIGVpbmUgU3R1bmRlIFplaXQsIGRpZSBSYXRlIG5vY2ggenUgZXJmdWVsbGVuLgorU2NoYWZmdCBtYW4gZXMgbmljaHQsIHZlcmZhZWxsdCBkZXIgVmVydHJhZyA9PiBhbGxlcyBpc3Qgd2VnLgorRGFzIFplaXRsaW1pdCBnaWx0IG51ciBmdWVyIGRhcyBGdWVsbGVuIGRlcyBCbG9ja3MuIFdlbm4gZXIgZXJzdCBtYW4gdm9sbAoraXN0LCBicmF1Y2h0IG1hbiBuaWNodCBpbm5lcmhhYiBkZXMgTGltaXRzIHp1ciBCYW5rLCB1bSBkZW4gbmFlY2hzdGVuCitCbG9jayB6dSBob2xlbi4KKworNy4gQmVzY2hyZWlidW5nZW4KKz09PT09PT09PT09PT09PT09CisKK0ZvbGdlbmRlIEFzcGVrdGUgZGVyIFJhdW1iZXNjaHJlaWJ1bmcgbGFzc2VuIHNpY2ggdmVyYWVuZGVybjoKKworLSBEZXRhaWxzICAgICAgImJlc2NocmVpYmUgZGV0YWlsIDxkZXQ+IiAgICAgICAgICAgICAgICAgICAgIFBfREVUQUlMUworLSBSZWFkRGV0YWlscyAgImJlc2NocmVpYmUgbGVzYmFyZXMgZGV0YWlsIDxkZXQ+IiAgICAgICAgICAgIFBfUkVBRF9ERVRBSUxTCistIExhbmdiZXNjaHIuICAiYmVzY2hyZWliZSBoYXVzL3JhdW0gbGFuZyIgKGF1Y2ggYXVzc2VuKSAgICAgUF8oSU5UXylMT05HCistIEt1cnpiZXNjaHIuICAiYmVzY2hyZWliZSBoYXVzL3JhdW0ga3VyeiIgICAgICAgICAgICAgICAgICAgUF9JTlRfU0hPUlQKKy0gQXVzZ2FlbmdlICAgICJhdXNnYW5nIDxyaWNodHVuZz4gPG5yPiIgLyAic3BlcnJlIHJpY2h0dW5nIiBQX0VYSVRTCistIExpY2h0ICAgICAgICAibGljaHQgYW4vYXVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUF9MSUdIVAorLSBCZWZlaGxlICAgICAgImJlc2NocmVpYmUgYmVmZWhsIDxiZWY+IiAgICAgICAgICAgICAgICAgICAgIEhfQ09NTUFORFMKKworRGV0YWlscywgUmVhZERldGFpbHMgdW5kIEJlZmVobGUgbGFzc2VuIHNpY2ggYXVjaCBrb3BpZXJlbiwgYWxsZXJkaW5ncyBpbW1lcgorbnVyIGlubmVyaGFsYiBkZXIgamV3ZWlsaWdlbiBQcm9wZXJ0eWdydXBwZSAoZXMgbGFlc3N0IHNpY2ggYWxzbyBrZWluIERldGFpbAorenUgZGVuIFJlYWREZXRhaWxzIGtvcGllcmVuKS4KKworQXVzc2VyZGVtIGxhc3NlbiBzaWNoIERldGFpbHMsIFJlYWREZXRhaWxzLCBCZWZlaGxlIHVuZCBkaWUgTGFuZ2Jlc2NocmVpYnVuZworYWVuZGVybi4gRGFzIGxhZXVmdCBhZWhubGljaCB3aWUgYmVpbSBCZXNjaHJlaWJlbiwgYWxsZXJkaW5ncyB3aXJkIGRlcgorYWt0dWVsbCB2b3JoYW5kZW5lIFRleHQgYWxzIFZvcmdhYmUgdmVyd2VuZGV0LgorCisKKzdhLiBEZXRhaWxzL1JlYWREZXRhaWxzL0xhbmctIHVuZCBLdXJ6YmVzY2hyZWlidW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIaWVyIHBhc3NpZXJ0IG5pY2h0IHZpZWwgbWl0IGRlbSBlaW5nZWdlYmVuZW4gVGV4dC4gQEAgd2VyZGVuIGR1cmNoICoqCitlcnNldHp0LCBkYW1pdCBuaWNodCBhdXMgVmVyc2VoZW4gb2RlciBiZWFic2ljaHRpZ3QgcHJvY2Vzc19zdHJpbmcoKQorYXVzZ2Vsb2VzdCB3aXJkLgorCitCZWkgZGVyIEt1cnpiZXNjaHJlaWJ1bmcgd2lyZCBub2NoIGdlcHJ1ZWZ0LCBvYiBzaWUgbGFlbmdlciBhbHMgNzUgWmVpY2hlbgorb2RlciBlaW5lIFplaWxlIGlzdCAoZmFsbHMgamEsIHdpcmQgc2llIG5pY2h0IHVlYmVybm9tbWVuKS4KKworTW9lZ2xpY2hlIEVyd2VpdGVydW5nZW46IFJhc3NlbnNwZXppZmlzY2hlIERldGFpbHMgKGRhcyBtdXNzIGJpc2hlciB1ZWJlcgorQmZlaGxlIGdlbWFjaHQgd2VyZGVuKSwgdW5kIGRhIEFkZFNtZWxscygpL0FkZFNvdW5kcygpIGpldHp0ICJvZmZpemllbGwiIGluCitzaW5kLCB2aWVsbGVpY2h0IGF1Y2ggZGllIE1vZWdsaWNoa2VpdCwgR2VydWVjaGUgdW5kIEdlcmFldXNjaGUgenUKK2Jlc2NocmVpYmVuLgorCis3Yi4gQXVzZ2FlbmdlCistLS0tLS0tLS0tLS0tCisKK01vZWdsaWNoZSBBdXNnYWVuZ2Ugc2luZCBkaWUgYWNodCBIaW1tZWxzcmljaHR1bmdlbiwgIm9iZW4iIHVuZCAidW50ZW4iLgorTGVndCBtYW4gZWluZW4gQXVzZ2FuZyBhbiwgd2lyZCBhdXRvbWF0aXNjaCBpbSBaaWVscmF1bSBlaW4gQXVzZ2FuZyBpbiBkaWUKK2VudHNwcmVjaGVuZGUgUnVlY2tyaWNodHVuZyBhbmdlbGVndC4KK0RhcyBBbmxlZ2VuIGtsYXBwdCBudXIsIHdlbm4gZXMgbm9jaCBrZWluZW4gQXVzZ2FuZyBpbiBkaWVzZSBSaWNodHVuZyBnaWJ0LAordW5kIGltIFppZWxyYXVtIG5vY2gga2VpbmVuIEF1c2dhbmcgaW4gZGllIFJ1ZWNrcmljaHR1bmcuCitTb2xsIGVpbiBBdXNnYW5nIGluIGVpbiBiZW5hY2hiYXJ0ZXMgU2VoZXJoYXVzIGdlbGVndCB3ZXJkZW4sIG11c3MgbWFuIGRvcnQKK2RhcnVlYmVyaGluYXVzIGF1ZiBkZXIgZXJsYXViZS1MaXN0ZSBzdGVoZW4uCitCZWltIFNwZXJyZW4gZWluZXMgQXVzZ2FuZ3Mgd2lyZCBkZXIgZW50c3ByZWNoZW5kZSBBdXNnYW5nIGltIFppZWxyYXVtCithdXRvbWF0aXNjaCBtaXQgZW50ZmVybnQuCisKK0RlciBHcnVuZCBmdWVyIGRpZXNlcyBzeW1tZXRyaXNjaGUgVmVyaGFsdGVuIGxpZWd0IGRhcmluLCBkYXNzIG1hbiBhdWYgZGllc2UKK1dlaXNlIGtlaW5lIFNwaWVsZXIgaW4gc2VpbmVtIEhhdXMgZWluc3BlcnJlbiBrYW5uIChBdXNnYW5nIGluIGVpbmVuIFJhdW0sCitvaG5lIGRhc3MgZXMgenVydWVjayBnZWh0KS4KK1VtIGRpZSBBdXNnYWVuZ2UgZWluYW5kZXIgZWluZmFjaCB6dW9yZG5lbiB6dSBrb2VubmVuLCBzaW5kIGF1Y2gga2VpbmUgc2VsYnN0CitlcmZ1bmRlbmVuIFJpY2h0dW5nZW4gbW9lZ2xpY2ggKGtvZW5udGUgbWFuIGFsbGVyZGluZ3MgaW1wbGVtZW50aWVyZW4sIGluZGVtCittYW4gZXhwbGl6aXQgbmFjaCBkZXIgUnVlY2tyaWNodHVuZyBmcmFndCkuCisKKworN2MuIExpY2h0CistLS0tLS0tLS0KKworUF9MSUdIVCB3aXJkIHNvIGdlc2V0enQsIGRhc3MgZXMgaW0gSGF1cyBtaXQgZGVtIG1vbWVudGFuZW4gTGljaHRsZXZlbCBnZXJhZGUKK2R1bmtlbCBvZGVyIGhlbGwgd2lyZC4gSGF0IG1hbiBhbHNvIG5lbiBHZXNhbXRsaWNodGxldmVsIHZvbiAyMCAoZHVyY2gKK2dlbnVlZ2VuZCBMaWNodGt1Z2VsbiBvLmFlLikgdW5kIG1hY2h0ICJsaWNodCBhdXMiLCB3aXJkIFBfTElHSFQgYXVmIC0yMAorZ2VzZXR6dC4KKworCis3ZC4gQmVmZWhsZQorLS0tLS0tLS0tLS0KKworVW0gZGllIEF1c3dlcnR1bmcgenUgdmVyZWluZmFjaGVuLCB3ZXJkZW4gZGllIFBsYXR6aGFsdGVyIGluIGRlbiBCZWZlaGxzLQordGV4dGVuIGluIGt1ZXJ6ZXJlIFRva2VuIHVtZ2V3YW5kZWx0IChGdW5rdGlvbiBwcmVwYXJzZSgpKS4KK0RpZSBBdXN3ZXJ0dW5nIGVyZm9sZ3Qgdm9uIG1vZHVsZXMvdXNlcmNtZC5jIGF1cy4KKworSW4gcHJlcGFyc2UoKSB3ZXJkZW4gaW0gd2VzZW50bGljaGVuIGRpZSBGYWVsbGUgZnVlciBOYW1lbiwgUGVyc29uYWwtIHVuZAorUG9zc2Vzc2l2cHJvbm9taW5hIGluIGRpZSBaYWhsZW4gdW1nZXNldHp0LCBkaWUgZGVuIGVudHNwcmVjaGVuZGVuCitGdW5rdGlvbmVuIChuYW1lKCksIFF1ZXJ5UHJvbm91bigpLCBRdWVyeVBvc3NQcm9ub3VuKCkpIHVlYmVyZ2ViZW4gd2VyZGVuLgorQXVzZ2V3ZXJ0ZXQgd2VyZGVuIHNpZSB2b24gdXNlcmNtZDo6dWNGaWx0ZXIoKS4KKworRGllIEF1c3dlcnR1bmcgcmFzc2Vuc3BlemlmaXNjaGVyIFRleHRlIG11c3MgYW5nZXBhc3N0IHdlcmRlbiwgd2VubiBuZXVlCitSYXNzZW4gaW5zIE1HIGtvbW1lbi4gQmV0cm9mZmVuIGRhdm9uIGlzdCB1c2VyY21kOjp1Y1RleHQoKS4KK0RpZSByYXNzZW5zcGV6aWZpc2NoZW4gVGV4dGUgd2VyZGVuIGR1cmNoIFBsYXR6aGFsdGVyIGRlciBGb3JtIEBSWCB2b25laW4tCithbmRlciBnZXRyZW5udCwgd29iZWkgWCBlaW4gQnVjaHN0YWJlIGZ1ZXIgZGllIFJhc3NlIGlzdC4KK0JlaSBlaW5lciBuZXVlbiBSYXNzZSBtdWVzc3RlIGRpZXNlciBCdWNoc3RhYmUgaW4gZGVyIHJlZ2V4cGxvZGUtWmVpbGUgYW0KK0FuZmFuZyB2b24gdWNUZXh0KCkgaW4gZGVuIGVja2lnZW4gS2xhbW1lcm4gZWluZ2VmdWVndCB3ZXJkZW4sIHVuZCBlaW5lCitlbnRzcHJlY2hlbmRlIEFiZnJhZ2UgaW4gZGllIHN3aXRjaCgpLUFud2Vpc3VuZyByZWluLgorVW5kIG5hdHVlcmxpY2ggc29sbHRlIGRpZSBIaWxmZXNlaXRlICgiYmVmZWhsIikgZ2V1cGRhdGVkIHdlcmRlbiA6KQorCitCaXNoZXIgc2luZCByZWluZSBUZXh0YXVzZ2FiZWJlZmVobGUgbW9lZ2xpY2guCitFaW5pZ2UgU2VoZXIgaGFiZW4gc2ljaCB3ZWl0ZXJlIE1vZWdsaWNoa2VpdGVuIGdld3VlbnNjaHQsIHouQi4gc28gZXR3YXMKK3dpZSBTcGVjaWFsRGV0YWlscyBvZGVyIFNwZWNpYWxFeGl0cy4gRGFmdWVyIG11ZXNzdGUgbWFuIFp1c3RhZW5kZSBzZXR6ZW4KK3VuZCBhZW5kZXJuIGtvZW5uZW4gKFByb3BlcnR5IEhfVkFSUyBvZGVyIHNvPykuIEFsbGVyZGluZ3Mgd2lyZCBkYWR1cmNoCitkaWUgQmVzY2hyZWlidW5nIGFuIHNpY2ggd2llZGVyIGtvbXBsaXppZXJ0ZXIuCisKKworOC4gUnVlY2ttZWxkdW5nZW4KKz09PT09PT09PT09PT09PT09CisKK0RpZSBSYWV1bWUsIGRpZSBBdXNzZW5hbnNpY2h0IGRlcyBIYXVzZXMgdW5kIGRpZSBUcnVoZSBoYWJlbiBlaW5lIEZ1bmt0aW9uCitTbWFydExvZygpLiBEaWVzZSBGdW5rdGlvbiB3aXJkIHZvbiAvc3RkL3BsYXllci9iYXNlOjpzbWFydF9sb2coKSBhdXMgYXVmLQorZ2VydWZlbiB1bmQgdWViZXJuaW1tdCBkYXMgTG9nZ2VuIGRlciBUeXBvLSwgSWRlZS0gdW5kIEZlaGxlcm1lbGR1bmdlbi4KK0RpZSBNZWxkdW5nZW4gd2VyZGVuIGludCAicmVwLzxuYW1lPi5yZXAiIGFiZ2VsZWd0LgorRGVyIEhhdXNiZXNpdHplciB3aXJkIGpld2VpbHMgYmVpbSBCZXRyZXRlbiBkZXMgRWluZ2FuZ3NyYXVtZXMgaW5mb3JtaWVydCwKK3dpZSB2aWVsZSBSdWVja21lbGR1bmdlbiBzaWNoIHNlaXQgZGVtIGxldHp0ZW4gQmV0cmV0ZW4gYW5nZXNhbW1lbHQgaGFiZW4uCitBbnNlaGVuIGthbm4gZXIgc2ljaCBkaWUgTWVsZHVuZ2VuIG1pdCBkZW0gQmVmZWhsICJtZWxkdW5nZW4iLCB1bmQgbWl0CisiYWVuZGVyZSIgb2RlciAiYmVzY2hyZWliZSIga2FubiBlciBkaWUgVHlwb3MgYmVoZWJlbi4KK01pdCAiYWVuZGVyZSBtZWxkdW5nZW4iIGthbm4gZXIgZGllIGFiZ2VhcmJlaXRldGVuIE1lbGR1bmdlbiBhdXMgc2VpbmVtCisucmVwLUZpbGUgZW50ZmVybmVuLgorCisKKzkuIEhpbGZlc2VpdGVuCis9PT09PT09PT09PT09PQorCitEaWUgIkFyYmVpdHN2ZXJzaW9uZW4iIGRlciBTZWl0ZW4gbGllZ2VuIGluIGRvYy8sIGRpZSAib2ZmaXppZWxsZW4iIFZlcnNpb25lbgoraW4gL2RvYy9zY21kLgorImJlc2NocmVpYmUgYmVmZWhsIiBoYXQgZWluZSBFeHRyYXNlaXRlICgiaGlsZmUgYmVmZWhsIiksIHdlaWwgZGllIFNlaXRlIGZ1ZXIKKyJiZXNjaHJlaWJlIiBzb25zdCB6dSBncm9zcyB3YWVyZS4KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9oYXVzLmMgYi9kL3NlaGVyL2hhZXVzZXIvaGF1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTQ3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvaGF1cy5jCkBAIC0wLDAgKzEsMzYxIEBACisvLworLy8gIGhhdXMuYyAgLS0gRGFzIFJvaGdlcnVlc3QgZWluZXMgU2VoZXJoYXVzZXMuCisvLworLy8gIEdydW5kb2JqZWt0IChjKSAxOTk0IEJvaW5nQE1vcmdlbkdyYXVlbgorLy8gIEFic2NobGllc3NlbiB1bmQgUmF1c3dlcmZlbiB2b24gSm9mCisvLyAgRnVlciBBZW5kZXJ1bmdlbiBhYiBkZW0gMDYuMTAuOTQgdmVyYW50d29ydGxpY2g6IFdhcmdvbgorLy8KKy8vICREYXRlOiAxOTk2LzAyLzIxIDE4OjA5OjU1ICQKKy8vICRSZXZpc2lvbjogMi44ICQKKy8qICRMb2c6IGhhdXMuYyx2ICQKKyAqIFJldmlzaW9uIDIuOCAgMTk5Ni8wMi8yMSAgMTg6MDk6NTUgIFdhcmdvbgorICogU21hcnRMb2coKSBmdWVyIFJ1ZWNrbWVsZHVuZ2VuIGVpbmdlYmF1dC4KKyAqCisgKiBSZXZpc2lvbiAyLjcgIDE5OTUvMDcvMDYgIDExOjE4OjA3ICBXYXJnb24KKyAqIExhbmdiZXNjaHJlaWJ1bmcgYWVuZGVyYmFyLgorICoKKyAqIFJldmlzaW9uIDIuNiAgMTk5NS8wNC8yMSAgMTA6NDg6MjAgIFdhcmdvbgorICogQnVnZml4IGluICJiZXNjaHJlaWJlIHR1ZXJzdGF0dXMiLgorICoKKyAqIFJldmlzaW9uIDIuNSAgMTk5NS8wNC8yMSAgMDg6NTY6NTUgIFdhcmdvbgorICogSGF1c3R1ZXIgYXVzZ2VsYWdlcnQuCisgKiAnYmVzY2hyZWliZSB0dWVyenVzdGFuZCcgaXN0IGRhenVnZWtvbW1lbi4KKyAqCisgKiBSZXZpc2lvbiAyLjQgIDE5OTUvMDIvMjcgIDIwOjQ3OjMyICBXYXJnb24KKyAqIERpdmVyc2UgQnVncyBnZWZpeGVkLi4uCisgKgorICogUmV2aXNpb24gMi4yICAxOTk1LzAyLzE1ICAxMToxOToxNyAgV2FyZ29uCisgKiBEaWUgSGF1c3R1ZXIga2FubiBqZXR6dCBhdWNoIGJlc2NocmllYmVuIHdlcmRlbiAoSF9ET09SKS4KKyAqCisgKiBSZXZpc2lvbiAyLjEgIDE5OTUvMDIvMDQgIDE0OjUxOjE0ICBXYXJnb24KKyAqIFN0YXR0ICJIYXVzIiB3aXJkIHdlaXRlc3RnZWhlbmQgbmFtZSgpIHZlcndlbmRldC4KKyAqCisgKiBSZXZpc2lvbiAyLjAgIDE5OTUvMDIvMDEgIDIwOjQwOjI2ICBXYXJnb24KKyAqIERhcyBIYXVzIGlzdCBqZXR6dCBudXIgbm9jaCBlaW4gT2JqZWt0IGluIGVpbmVtIFJhdW0sIG5pY2h0CisgKiBtZWhyIGVpbiBSYXVtIGltIFJhdW0uCisgKgorICovCisjaW5jbHVkZSAiaGF1cy5oIgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKyNpbmNsdWRlIDx3aXpsZXZlbHMuaD4KKworaW5oZXJpdCAiL3N0ZC90aGluZyI7Citpbmhlcml0IEhBVVNUVUVSOworCitwcml2YXRlIG5vc2F2ZSBzdHJpbmcgdGV4dDsKK3ByaXZhdGUgbm9zYXZlIHN0cmluZyBvd25lcjsKKwordm9pZCBjcmVhdGUoKQoreworICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuOworCisgIHRoaW5nOjpjcmVhdGUoKTsKKyAgaGF1c3R1ZXI6OmNyZWF0ZSgpOworCisgIFNldFByb3AoUF9OQU1FLCAoeyAiSGF1cyIsICJIYXVzZXMiLCAiSGF1cyIsICJIYXVzIiB9KSk7CisgIFNldFByb3AoUF9JRFMsICh7ImhhdXMiLCJzZWhlXHJoYXVzIn0pKTsKKyAgU2V0UHJvcChQX0dFTkRFUiwgTkVVVEVSKTsKKyAgU2V0UHJvcChQX05PR0VULDEpOworCisgIFNldChQX0xPTkcsIFNBVkUsIEZfTU9ERSk7CisgIFNldChQX1NIT1JULCBTQVZFLCBGX01PREUpOworICBTZXQoUF9JRFMsIFNBVkUsIEZfTU9ERSk7CisgIFNldChQX0dFTkRFUiwgU0FWRSwgRl9NT0RFKTsKKyAgU2V0KFBfTkFNRSwgU0FWRSwgRl9NT0RFKTsKKworICB0ZXh0ID0gMDsKKworICBBZGRDbWQoICh7ImJldHJpdHQiLCAiYmV0cmV0ZSJ9KSwgImJldHJpdHQiICk7CisgIEFkZENtZCggKHsiYmVzY2hyZWliIiwgImJlc2NocmVpYmUifSksICJiZXNjaHJlaWJlbiIpOworICBBZGRDbWQoICh7ImFlbmRlciIsICJhZW5kZXJlIn0pLCAiYWVuZGVybiIpOworICBBZGRDbWQoICh7Imtsb3BmIiwia2xvcGZlIn0pLCAia2xvcGZlbiIpOworICBBZGRDbWQoImVybGF1YmUiLCAiZXJsYXViZW4iKTsKKyAgQWRkQ21kKCJ2ZXJiaWV0ZSIsICJ2ZXJiaWV0ZW4iKTsKKyAgQWRkQ21kKCJub3RpeiIsICJtZXJrdGV4dCIpOworfQorCit2YXJhcmdzIHZvaWQgU2F2ZShpbnQgY3J1bmNoZWQpCit7CisgIHNhdmVfb2JqZWN0KEhBVVNTQVZFUEFUSCtvd25lcik7Cit9CisKK3ZvaWQgTG9hZCgpCit7CisgIHJlc3RvcmVfb2JqZWN0KEhBVVNTQVZFUEFUSCtvd25lcik7Cit9CisKK3ZvaWQgaW5pdCgpCit7CisgIC8vIHN0YXR0IGltIEhhdXMgbGFuZGV0IG1hbiBpbSBIYXVwdHJhdW0gUmF1bSAwLCBzb2xsdGUgYW5zaWNoIG5pY2h0IHBhc3NpZXJlbgorICAvLyBkYSBtYW4gbm9tYWxlcndlaXNlIG5pY2h0IGlucyBIYXVzIHNvbmRlcm4gZGlyZWt0IGluIGRlbiBIYXVwdHJhdW0gZ2Vtb3ZlZCB3aXJkCisgIGlmIChlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKSA9PSB0aGlzX29iamVjdCgpKSB7CisgICAgdGhpc19wbGF5ZXIoKS0+bW92ZShSQVVNTkFNRShvd25lciwwKSwgTV9HTyB8IE1fTk9fU0hPVyB8IE1fU0lMRU5UKTsKKyAgICByZXR1cm47CisgIH0KKyAgOjppbml0KCk7Cit9CisKKy8vIEV4dHJhIGZ1ZXIgQm9pbmchIDspCisvLyBTZXR6dCBtYW4gUF9TSE9SVCBkZXMgSGF1c2VzIGF1ZiAwLCBzbyB2ZXJzY2h3aW5kZXQgZXMgendhciBhdXMKKy8vIGRlciBCZXNjaHJlaWJ1bmcgZGVzIFJhdW1lcywgaXN0IGFiZXIgaW1tZXIgbm9jaCBhbnNwcmVjaGJhciEKK3N0cmluZyBzaG9ydCgpCit7CisgIHN0cmluZyByZXQ7CisKKyAgcmV0ID0gOjpzaG9ydCgpOworICBpZiAocHJldmlvdXNfb2JqZWN0KCkgIT0gZW52aXJvbm1lbnQoKSAmJiAhcmV0KQorICAgIHJldCA9IiI7CisKKyAgcmV0dXJuIHJldDsKK30KKworLy8gWnVzdGFuZCBkZXIgSGF1c3R1ZXIgdW5kIGV2dGwuIE5vdGl6IG1pdCBlaW5iYXVlbi4KK3ZhcmFyZ3Mgc3RyaW5nIGxvbmcoaW50IG1vZGUpCit7CisgIHN0cmluZyByZXQsIGRvb3I7CisKKyAgZG9vciA9IGhhdXN0dWVyOjpsb25nKG1vZGUpOworCisgIHJldCA9IFF1ZXJ5UHJvcChQX0xPTkcpK2Rvb3I7CisgIGlmICh0ZXh0KSB7CisgICAgcmV0ICs9IGJyZWFrX3N0cmluZyggIkFuICIrbmFtZShXRU0sMSkrIiBiZWZpbmRldCBzaWNoIGVpbmUgTm90aXo6ICciK3RleHQrIicuIiwgNzUpOworICB9CisgIHJldHVybiBicmVha19zdHJpbmcocmV0LCA3NSk7Cit9CisKKy8vIFNldHplIG5ldWVuIEJlc2l0emVyIGZ1ZXIgZGllc2VzIEhhdXMKKy8vIHNldHp0IERlZmF1bHQtU2hvcnQsIC1Mb25nIHVuZCBJZCBmdWVyIG5ldWVuIEJlc2l0emVyLAorLy8gbGVpdGV0IEJlc2l0emVyIGFuIEhhdXN0dWVyIHdlaXRlciB1bmQgbGFlZHQgZGVuIEhhdXB0cmF1bQordmFyYXJncyBzdHJpbmcgU2V0T3duZXIoc3RyaW5nIG8pCit7CisgIFNldFByb3AoUF9TSE9SVCwgIkRhcyBIYXVzIHZvbiAiK2NhcGl0YWxpemUobykpOworICBTZXRQcm9wKFBfTE9ORywgIkRhcyBIYXVzIHZvbiAiK2NhcGl0YWxpemUobykrIiwgZXMgc2llaHQgc2VociBuYWNoIGVpbmVtIFJvaGJhdSBhdXMuXG4iKTsKKyAgQWRkSWQoICh7ICJcbiIrbysiaGF1cyIsICJoYXVzIHZvbiAiK28gfSkgKTsKKyAgaGF1c3R1ZXI6OlNldFR1ZXJPd25lcihvKTsKKyAgbG9hZF9vYmplY3QoUkFVTU5BTUUobywwKSk7CisgIHJldHVybiBvd25lciA9IG87Cit9CisKKy8vIGxpZWZlcnQgZGVuIE5hbWUgZGVzIEhhdXMtQmVzaXR6ZXJzCitzdHJpbmcgUXVlcnlPd25lcigpIHsgcmV0dXJuIG93bmVyOyB9CisKK3ByaXZhdGUgaW50IHRwX293bmVyY2hlY2soKQoreworICBpZihnZXR1aWQodGhpc19wbGF5ZXIoKSkgIT0gb3duZXIpCisgIHsKKyAgICBub3RpZnlfZmFpbCggIkRhcyBpc3QgbmljaHQgRGVpbiBIYXVzIVxuIiApOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiAxOworfQorCisvLyBBa3Rpb24genVtIEJldHJldGVuCitzdGF0aWMgaW50IGJldHJpdHQoc3RyaW5nIHN0cikKK3sKKyAgbm90aWZ5X2ZhaWwoIldhcyBtb2VjaHRlc3QgRHUgYmV0cmV0ZW4/XG4iKTsKKworICAvLyBIYXVzIHdhciBuaWNodCBhbmdlc3Byb2NoZW4KKyAgaWYgKCFzdHIgfHwgIWlkKHN0cikpCisgICAgcmV0dXJuIDA7CisKKyAgLy8gSGF1c3R1ZXIgaXN0IHp1CisgIGlmIChRdWVyeShIX0RPT1JTVEFUKSAmIERfQ0xPU0VEKSB7CisgICAgcHJpbnRmKCIlcyB2b24gJXMgaXN0IHp1LlxuIiwgY2FwaXRhbGl6ZShuYW1lKFdFUiwxKSksIGNhcGl0YWxpemUob3duZXIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICAvLyBiZXdlZ2UgU3BpZWxlciBpbiBIYXVwdHJhdW0KKyAgdGhpc19wbGF5ZXIoKS0+bW92ZShSQVVNTkFNRShvd25lciwwKSwgTV9HTywgMCwgImJldHJpdHQgIituYW1lKFdFTiwxKSwgImtvbW10IGhlcmVpbiIpOworICByZXR1cm4gMTsKK30KKworLy8gQWt0aW9uIHp1bSBTZXR6ZW4vTG9lc2NoZW4gdm9uIE5vdGl6ZW4gYW0gSGF1cworc3RhdGljIGludAorbWVya3RleHQoc3RyaW5nIHN0cikKK3sKKyAgLy8gZGFyZiBkZXIgU3BpZWxlciBkYXMsIGQuaC4gaXN0IGRhcyBzZWluIEhhdXM/CisgIGlmKCF0cF9vd25lcmNoZWNrKCkpCisgIHsKKyAgICBub3RpZnlfZmFpbCggIkR1IGthbm5zdCBrZWluZSBOb3RpeiBhbiAiK2NhcGl0YWxpemUobmFtZShXRU0sMSkpKyIgdm9uICIrY2FwaXRhbGl6ZShvd25lcikrIiBhbmJyaW5nZW4hXG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdHIgPSB0aGlzX3BsYXllcigpLT5fdW5wYXJzZWRfYXJncygpOworCisgIC8vIGtlaW4gVGV4dCA9PiBOb3RpeiBsb2VzY2hlbiwgYW5zb25zdGVuID0+IFRleHQgYWxzIE5vdGl6IHNldHplbgorICBpZiAoIXN0ciB8fCBzdHIgPT0gIiIpIHsKKyAgICB3cml0ZSggIk9LLCBOb3RpeiBpc3QgZ2Vsb2VzY2h0LlxuIiApOworICAgIHRleHQgPSAwOworICB9CisgIGVsc2UgeworICAgIHdyaXRlKCAiT0ssIE5vdGl6IGxhdXRldCAnIitzdHIrIidcbiIpOworICAgIHRleHQgPSBzdHI7CisgIH0KKworICByZXR1cm4gMTsKK30KKworLy8gQWt0aW9uIEFua2xvcGZlbiBhbSBIYXVzCitzdGF0aWMgaW50CitrbG9wZmVuKHN0cmluZyBzdHIpCit7CisgIGludCBpOworICBvYmplY3Qgcm9vbTsKKworICBub3RpZnlfZmFpbCggIlN5bnRheDoga2xvcGZlIGFuIDxoYXVzPiBhblxuIiApOworICAvLyBwYXJzZW4gdm9uIGtsb3BmZSBhbiA8aGF1cz4gYW4KKyAgaWYgKCFzdHIgfHwgc3NjYW5mKHN0ciwgImFuICVzIGFuIiwgc3RyKSAhPSAxKQorICAgIHJldHVybiAwOworCisgIGlmIChzdHIgPT0gInR1ZXIiIHx8IHN0ciA9PSAiaGF1c3R1ZXIiIHx8IGlkKHN0cikpIHsKKyAgICAvLyBNZWxkdW5nZW4gYW4gU3BpZWxlciB1bmQgUmF1bQorICAgIHByaW50ZiggIkR1IGtsb3Bmc3QgYW4gIituYW1lKFdFTSwxKSsiIHZvbiAiK2NhcGl0YWxpemUob3duZXIpKyIgYW4uXG4iKTsKKyAgICBzYXkoIGNhcGl0YWxpemUodGhpc19wbGF5ZXIoKS0+bmFtZShXRVIpKSsiIGtsb3BmdCBhbiAiK25hbWUoV0VNLDEpKyIgdm9uICIrY2FwaXRhbGl6ZShvd25lcikrIiBhbi5cbiIgKTsKKyAgICAvLyBpbiBhbGxlbiBnZWxhZGVuZW4gUmFldW1lbiBLbG9wZmVuIG1lbGRlbgorICAgIGZvciAoaT1WRVJXQUxURVItPkhhdXNQcm9wKG93bmVyLEhQX1JPT01TKTsgaT49MDsgaS0tKSB7CisgICAgICBpZiAocm9vbSA9IGZpbmRfb2JqZWN0KFJBVU1OQU1FKG93bmVyLGkpKSkKKwl0ZWxsX3Jvb20ocm9vbSwgIkR1IGhvZXJzdCwgd2llIGplbWFuZCBhbiBkZXIgSGF1c3R1ZXIgYW5rbG9wZnQuXG4iICk7CisgICAgfQorICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCisvLyBBa3Rpb24gVHVlci9IYXVzIGJlc2NocmVpYmVuCitzdGF0aWMgaW50CitiZXNjaHJlaWJlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKnAsICpkczsKKworICAvLyBkYXJmIGRlciBTcGllbGVyIGRhcywgZC5oLiBpc3QgZGFzIHNlaW4gSGF1cz8KKyAgaWYgKCF0cF9vd25lcmNoZWNrKCkpCisgICAgcmV0dXJuIDA7CisKKyAgbm90aWZ5X2ZhaWwoICJIaWVyIGRyYXVzc2VuIGZ1bmt0aW9uaWVydCBudXIgJ2Jlc2NocmVpYmUgPGhhdXM+IGxhbmcnLFxuIgorCSAgICAgICsiJ2Jlc2NocmVpYmUgaGF1c3R1ZXInIG9kZXIgJ2Jlc2NocmVpYmUgdHVlcnp1c3RhbmQnIVxuIik7CisKKyAgLy8genUgd2VuaWcgRWluZ2FiZSB6dW0gUGFyc2VuCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikKKyAgICByZXR1cm4gMDsKKworICBwID0gb2xkX2V4cGxvZGUoc3RyLCIgIik7CisKKyAgaWYgKHBbMF0gPT0gInR1ZXIiIHx8IHBbMF0gPT0gImhhdXN0dWVyIikgeworICAgIC8vIGJlc2NocmVpYmUgKGhhdXMpdHVlcgorICAgIHdyaXRlKCAiQmVzY2hyZWlidW5nIGRlciBIYXVzdHVlciBhbmdlYmVuLiBFcyBpc3QgbnVyIGVpbmUgWmVpbGUgbW9lZ2xpY2guXG4iCisJICArIkFscyBQbGF0emhhbHRlciBmdWVyIGRlbiBadXN0YW5kIGRlciBUdWVyIGRpZW50ICVzLiBGYWxscyBkaWUgVHVlclxuIgorCSAgKyJuaWNodCBpbiBkZXIgTGFuZ2Vic2NocmVpYnVuZyBkZXMgSGF1c2VzIGF1ZnRhdWNoZW4gc29sbCwgYml0dGUgZWluLVxuIgorCSAgKyJmYWNoIG51ciA8UkVUVVJOPiBkcnVlY2tlbi5cbl0iICk7CisgICAgaW5wdXRfdG8oImRvb3JEZXNjIik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZWxzZSBpZiAocFswXSA9PSAidHVlcnp1c3RhbmQiKSB7CisgICAgLy8gYmVzY2hyZWliZSB0dWVyenVzdGFuZAorICAgIGRzID0gUXVlcnkoSF9ET09STFNUQVQpOworICAgIHdyaXRlKCAiQmVzY2hyZWlidW5nIGRlcyBUdWVyenVzdGFuZGVzIGFuZ2ViZW4uIEVzIGlzdCBudXIgZWluZSBaZWlsZSBtb2VnLVxuIgorCSAgKyJsaWNoLiBEaWUgWnVzdGFlbmRlIG11ZXNzZW4gZHVyY2ggS29tbWF0YSBnZXRyZW5udCBpbiBkZXIgUmVpaGVuLVxuIgorCSAgKyJmb2xnZSAnb2ZmZW4nLCAnZ2VzY2hsb3NzZW4nLCAnYWJnZXNjaGxvc3NlbicgYW5nZWdlYmVuIHdlcmRlbi5cbiIKKwkgICsiTW9tZW50YW5lciBadXN0YW5kOlxuIik7CisgICAgcHJpbnRmKCInJXMnLCAnJXMnLCAnJXMnLlxuIiwgZHNbMF0sIGRzWzFdLCBkc1szXSk7CisgICAgd3JpdGUoICIoQWJicnVjaDogRWluZmFjaCA8UkVUVVJOPiBkcnVlY2tlbiEpXG5dIik7CisgICAgaW5wdXRfdG8oImRvb3JMRGVzYyIpOworICAgIHJldHVybiAxOworICB9CisgIGVsc2UgaWYgKHBbPDFdID09ICJsYW5nIiAmJiBpZChpbXBsb2RlKHBbMC4uPDJdLCIgIikpKSB7CisgICAgb2JqZWN0IGhvbWUgPSBsb2FkX29iamVjdChSQVVNTkFNRShvd25lciwwKSk7CisgICAgLy8gYmVzY2hyZWliZSA8aGF1cz4gbGFuZworICAgIGhvbWUtPmJlc2NocmVpYmVuKCJoYXVzIGxhbmciLCBBVVNTRU4pOworICAgIHJldHVybiAxOworICB9CisgIC8vIEVpbmdhYmUgU3ludGF4IG5pY2h0IHBhc3NlbmQgPT4gbm90aWZ5X2ZhaWwgdm9uIG9iZW4KKyAgcmV0dXJuIDA7Cit9CisKKy8vIEFrdGlvbiBIYXVzIEFlbmRlcm4KK3N0YXRpYyBpbnQKK2FlbmRlcm4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nICpwLCAqZHM7CisKKyAgLy8gRGFyZiBkZXIgU3BpZWxlciBkYXMsIGQuaC4gaXN0IGRhcyBzZWluIEhhdXM/CisgIGlmICghdHBfb3duZXJjaGVjaygpKQorICAgIHJldHVybiAwOworCisgIG5vdGlmeV9mYWlsKCAiSGllciBkcmF1c3NlbiBmdW5rdGlvbmllcnQgbnVyICdhZW5kZXJlIDxoYXVzPiBsYW5nJyFcbiIpOworICAvLyB6dSB3ZW5pZyBFaW5nYWJlIHp1bSBQYXJzZW4KKyAgaWYgKCFzdHIgfHwgc3RyID09ICIiKQorICAgIHJldHVybiAwOworCisgIHAgPSBvbGRfZXhwbG9kZShzdHIsIiAiKTsKKworICBpZiAocFs8MV0gPT0gImxhbmciICYmIGlkKGltcGxvZGUocFswLi48Ml0sIiAiKSkpIHsKKyAgICBvYmplY3QgaG9tZSA9IGxvYWRfb2JqZWN0KFJBVU1OQU1FKG93bmVyLDApKTsKKyAgICAvLyBhZW5kZXJlIDxoYXVzPiBsYW5nCisgICAgaG9tZS0+YWVuZGVybigiaGF1cyBsYW5nIiwgQVVTU0VOKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICAvLyBFaW5nYWJlIFN5bnRheCBuaWNodCBwYXNzZW5kID0+IG5vdGlmeV9mYWlsIHZvbiBvYmVuCisgIHJldHVybiAwOyAKK30KKworLy8gaW5wdXRfdG8genUgYmVzY2hyZWliZSAoaGF1cyl0dWVyCitzdGF0aWMgdm9pZCBkb29yRGVzYyhzdHJpbmcgc3RyKQoreworICBpZiAoIXN0cikKKyAgICBzdHIgPSAiIjsKKyAgaWYgKHNpemVvZihzdHIpKQorICAgIHN0ciArPSAiXG4iOworCisgIFNldChIX0RPT1IsIHN0cik7CisgIFNhdmUoKTsKKworICBpZiAoc3RyID09ICIiKQorICAgIHdyaXRlKCJPSywgSGF1c3R1ZXIgd3VyZGUgZ2Vsb2VzY2h0LlxuIik7CisgIGVsc2UKKyAgICB3cml0ZSgiT0ssIEJlc2NocmVpYnVuZyBkZXIgSGF1c3R1ZXIgd3VyZGUgZ2VzZXR6dC5cbiIpOworfQorCisvLyBpbnB1dF90byB6dSBiZXNjaHJlaWJlIHR1ZXJ6dXN0YW5kCitzdGF0aWMgdm9pZCBkb29yTERlc2Moc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nICpzOworCisgIGlmICghc3RyIHx8IHNpemVvZihzPW9sZF9leHBsb2RlKHN0ciwgIiwiKSkhPTMpIHsKKyAgICB3cml0ZSgiQUJCUlVDSCFcbk5pY2h0cyBnZWFlbmRlcnQhXG4iKTsKKyAgICByZXR1cm47CisgIH0KKyAgU2V0KEhfRE9PUkxTVEFULCAoeyBzWzBdLCBzWzFdLCAwLCBzWzJdIH0pKTsKKyAgcHJpbnRmKCJPSywgVHVlcnp1c3RhZW5kZSBzZWhlbiB3aWUgZm9sZ3QgYXVzOlxuJyVzJywgJyVzJywgJyVzJy5cbiIsCisJIHNbMF0sIHNbMV0sIHNbMl0pOworICBTYXZlKCk7Cit9CisKK2ludCBTbWFydExvZyhzdHJpbmcgb2ZpbGUsIHN0cmluZyB0eXAsIHN0cmluZyBtc2csIHN0cmluZyBkYXRlKQoreworICBvYmplY3QgaG9tZTsKKyAgc3RyaW5nIGZvbywgYmFyOworICAKKyAgc3RyaW5nIGhuPVJBVU1OQU1FKG93bmVyLDApOworCisgIHdyaXRlX2ZpbGUoUkVQRklMRShvd25lciksIHNwcmludGYoIiVzIHZvbiAlcyB2b3IgZGVtIEhhdXMgKCVzKTpcbiVzXG4iLAorCQkJCSAgICAgdHlwLAorCQkJCSAgICAgY2FwaXRhbGl6ZShnZXR1aWQodGhpc19wbGF5ZXIoKSkpLAorCQkJCSAgICAgZGF0ZSwKKwkJCQkgICAgIGJyZWFrX3N0cmluZyhtc2csNzgpKSk7CisKKyAgaWYgKElTX0xFQVJORVIob3duZXIpKSB7CisgICAgbG9nX2ZpbGUoInJlcG9ydC8iK293bmVyKyIucmVwIiwKKwkgICAgIHNwcmludGYoIk1FTERVTkcgdm9uICVzIGltIFNlaGVyaGF1cywgdm9yIGRlbSBIYXVzICglcyk6XG4iCisJCSAgICAgKyJCaXR0ZSB6dXIgS2VubnRuaXMgbmVobWVuISAoTWl0IGRlbSBCZWZlaGwgJ21lbGR1bmdlbicpICAtV2FyZ29uXG4iLAorCQkgICAgIGNhcGl0YWxpemUoZ2V0dWlkKHRoaXNfcGxheWVyKCkpKSwKKwkJICAgICBkYXRlKSk7CisgIH0KKworICBob21lID0gbG9hZF9vYmplY3QoaG4pOworICBob21lLT5TZXQoSF9SRVBPUlQsIGhvbWUtPlF1ZXJ5KEhfUkVQT1JUKSsxKTsKKyAgaG9tZS0+U2F2ZSgpOworCisgIHJldHVybiAxOworfQorCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9oYXVzLmggYi9kL3NlaGVyL2hhZXVzZXIvaGF1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Mzk1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvaGF1cy5oCkBAIC0wLDAgKzEsMTU2IEBACisvLyBoYXVzLmggLS0gRGVmaW5pdGlvbmVuIGZ1ZXIgZGllIFNlaGVyaGFldXNlcgorLy8KKy8vICBHcnVuZG9iamVrdCAoYykgMTk5NCBCb2luZ0BNb3JnZW5HcmF1ZW4KKy8vICBBYnNjaGxpZXNzZW4gdW5kIFJhdXN3ZXJmZW4gdm9uIEpvZgorLy8gIEZ1ZXIgQWVuZGVydW5nZW4gYWIgZGVtIDA2LjEwLjk0IHZlcmFudHdvcnRsaWNoOiBXYXJnb24KKy8vCisvLyAkSWQ6IGhhdXMuaCx2IDEuMiAyMDAzLzA1LzAzIDEzOjA5OjA1IG11ZCBFeHAgJAorLy8KKyNpZm5kZWYgX19IQVVTX0hfXworI2RlZmluZSBfX0hBVVNfSF9fCisKKy8vICNkZWZpbmUgREVCVUcoeCkJaWYgKGZpbmRfcGxheWVyKCJ2YW5pb24iKSkgdGVsbF9vYmplY3QoZmluZF9wbGF5ZXIoInZhbmlvbiIpLHgpOworLy8jZGVmaW5lIEhERUJVRyh4KSBpZihmaW5kX3BsYXllcigidmFuaW9uIikpIFwKKy8vCSAgICAgICAgICAgICAgdGVsbF9vYmplY3QoZmluZF9wbGF5ZXIoInZhbmlvbiIpLGJyZWFrX3N0cmluZygoeCksNzgsIkhEQkc6ICIsMSkpCisjZGVmaW5lIEhERUJVRyh4KQorCisvLyBNYWludGFpbmVyIHdpcmQgdS5hLiBiZW51dHp0LCB1bSBkaWUgYWNjZXNzX3JpZ2h0cyB6dSByZWdlbG4KKyNkZWZpbmUgTUFJTlRBSU5FUiAoeyJ2YW5pb24ifSkKKyNkZWZpbmUgSVNfTUFJTlRBSU5FUih4KSAobWVtYmVyKE1BSU5UQUlORVIsIGdldHVpZCh4KSkhPS0xKQorCisvKioqIFBmYWRlICoqKi8KKyNkZWZpbmUgSEFFVVNFUlBGQUQgICAgICIvZC9zZWhlci9oYWV1c2VyLyIKKyNkZWZpbmUgSEFVU1NBVkVQQVRICUhBRVVTRVJQRkFEKyJzYXZlLyIKKyNkZWZpbmUgU1BFQ0lBTFBBVEgJSEFFVVNFUlBGQUQrInNwZWNpYWwvIgorI2RlZmluZSBWRVJXQUxURVIJKEhBRVVTRVJQRkFEKyJoYXVzdmVyd2FsdGVyIikKKyNkZWZpbmUgSEFVUwkJSEFFVVNFUlBGQUQrImhhdXMiCisjZGVmaW5lIFJBVU0JCUhBRVVTRVJQRkFEKyJyYXVtIgorI2RlZmluZSBTQVZFRklMRQlIQVVTU0FWRVBBVEgrImhhZXVzZXIiCisjZGVmaW5lIEhBVVNOQU1FKHgpCShIQUVVU0VSUEZBRCt4KyJoYXVzIikKKyNkZWZpbmUgUkFVTU5BTUUoeCxuKQkoSEFFVVNFUlBGQUQreCsicmF1bSIrdG9fc3RyaW5nKG4pKQorI2RlZmluZSBSRVBGSUxFKHgpCShIQUVVU0VSUEZBRCsicmVwLyIreCsiLnJlcCIpCisjZGVmaW5lIEhMT0coZix4KSB3cml0ZV9maWxlKEhBRVVTRVJQRkFEKyJsb2cvIisoZiksIGR0aW1lKHRpbWUoKSkrIiAtICIrKHgpKQorCisvKiBQQVRIIGJpdHRlIG5pY2h0IG1laHIgYmVudXR6ZW4hCisgKiBEaWVzZXIgI2RlZmluZSBleGlzdGllcnQgbnVyIG5vY2ggYXVzIEtvbXBhdGliaWxpdGFldHNncnVlbmRlbi4KKyAqLworI2lmbmRlZiBQQVRICisjZGVmaW5lIFBBVEgJCUhBRVVTRVJQRkFECisjZW5kaWYKKworLyoqKiBNb2R1bGUgKioqLworI2RlZmluZSBVU0VSQ01EIEhBRVVTRVJQRkFEKyJtb2R1bGVzL3VzZXJjbWQiCisjZGVmaW5lIExPU0EJSEFFVVNFUlBGQUQrIm1vZHVsZXMvbG9zYSIKKyNkZWZpbmUgSEFVU1RVRVIgSEFFVVNFUlBGQUQrIm1vZHVsZXMvaGF1c3R1ZXIiCisKKy8qKiogQmF1c3BhcnZlcnRyYWcgdW5kIFJhdGVuYmxvY2sgKioqLworI2RlZmluZSBTVU1NRV9MIDMwKlJBVEVOSE9FSEUJICAvKiBTb3ZpZWwga29zdGV0IGRhcyBndXRlIFN0dWVjayAobGFuZ3NhbSkgKi8KKyNkZWZpbmUgU1VNTUVfUyAyNSpSQVRFTkhPRUhFCSAgLyogVW5kIHNvdmllbCBiZWkgZGVyIHNjaG5lbGxlbiBWYXJpYW50ZSAqLworI2RlZmluZSBSQVRFTkhPRUhFIDgwMDAwICAvKiBFaW56YWhsYmFyIHBlciBSYXRlbmJsb2NrICovCisjZGVmaW5lIE1BWF9USU1FIDcyMDAJICAvKiBMYXVmemVpdCBkZXIgUmF0ZW46IDQgU3R1bmRlbiA9IDcyMDAgaGVhcnRfYmVhdHMgKi8KKyNkZWZpbmUgV0FSTl9USU1FIDQ1MAkgIC8qIEFic3RhbmQgendpc2NoZW4gZGVuIFdhcm51bmdlbjogMTUgTWludXRlbiAqLworCisjZGVmaW5lIFZfTU9ORVkgMCAgIC8vIERhcyBzY2hvbiBlaW5nZXphaGx0ZSBHZWxkCisjZGVmaW5lIFZfRExJTkUgMSAgIC8vIGRpZSBEZWFkbGluZQorI2RlZmluZSBWX1dUSU1FIDIgICAvLyBaZWl0IGJpcyB6dXIgbmFlY2hzdGVuIEVyaW5uZXJ1bmcKKyNkZWZpbmUgVl9GTEFHUyAzICAgLy8gRGl2ZXJzZSBGbGFncworCisjZGVmaW5lIFZfU0lHTkVEIDEgIC8vIFZlcnRyYWcgc2Nob24gdW50ZXJzY2hyaWViZW4KKyNkZWZpbmUgVl9GQVNUCSAyICAvLyBTY2huZWxsZSBWYXJpYW50ZQorI2RlZmluZSBWX0NPTVBMICA0ICAvLyBWZXJ0cmFnIGVyZnVlbGx0CisjZGVmaW5lIFZfUkFVTQkgOCAgLy8gQXVzYmF1dmVydHJhZworI2RlZmluZSBWX0VQCTE2ICAvLyBFUC1WZXJ0cmFnCisKKyNkZWZpbmUgQl9GQVNUCSAxICAvLyBCbG9jayBnZWhvZXJ0IHp1ciBzY2h3ZXJlbiBWYXJpYW50ZQorI2RlZmluZSBCX0VYVEVORCAyICAvLyBTdHJhZnplaXQgbGFldWZ0CisjZGVmaW5lIEJfQUNUSVZFIDQgIC8vIFNoYWRvdyBsYWRlbgorI2RlZmluZSBCX1NIQURPVyA4ICAvLyBTaGFkb3cgbGFldWZ0Li4uCisjZGVmaW5lIEJfRVAJMTYgIC8vIEVQLVZlcnRyYWcKKworLyoqKiBUdWVyc3RhdHVzICoqKi8KKyNkZWZpbmUgRF9DTE9TRUQgMQorI2RlZmluZSBEX0xPQ0tFRCAyCisKKy8qKiogQmVzY2hyZWlidW5nc2ZsYWdzICoqKi8KKyNkZWZpbmUgQVVTU0VOCTEKKyNkZWZpbmUgS1VSWgkyCisjZGVmaW5lIExBTkcJNAorI2RlZmluZSBERVRBSUwJOAorI2RlZmluZSBSREVUQUlMIDE2CisjZGVmaW5lIEJFRkVITAkzMiAgLy8gTnVyIGFlbmRlcm4KKyNkZWZpbmUgUkVQT1JUCTY0ICAvLyBOdXIgYWVuZGVybgorCisvKioqIEZsYWdzIGZ1ZXIgSGF1c1Byb3AoKSAqKiovCisjZGVmaW5lIEhQX0VOVgkgICAgMCAvLyBOYW1lIGRlcyBSYXVtcywgaW4gZGVtIGRhcyBIYXVzIHN0ZWh0IChzdHJpbmcpCisjZGVmaW5lIEhQX1JPT01TICAgIDEgLy8gQW56YWhsIGRlciBSYWV1bWUsIGRpZSBkYXMgSGF1cyBiZXNpdHp0IChpbnQpCisjZGVmaW5lIEhQX0FMTE9XRUQgIDIgLy8gV2VyIGhhdCBTb25kZXJiZWZ1Z25pc3NlIGltIEhhdXM/IChzdHJpbmcgKikKKworLyoqKiBWZXJtaXNjaHRlcyAqKiovCisjZGVmaW5lIEhfQ0hFU1QgImhfY2hlc3QiICAgICAgICAgLy8gV2VubiBnZXNldHp0LCBzdGVodCBpbiBkaWVzZW0gUmF1bSBkaWUgVHJ1aGUKKyNkZWZpbmUgVFJVSEUgIlx0XHJ1aGUiICAgICAgICAgICAvLyBVbmQgZGllc2UgSUQgaGF0IGRpZSBUcnVoZSBpbiBqZWRlbSBGYWxsLgorI2RlZmluZSBIX0NPTU1BTkRTICJoX2NvbW1hbmRzIiAgIC8vIEVudGhhZWx0IG1hcHBpbmcgbWl0IEJlZmVobGVuLgorI2RlZmluZSBIX0RPT1IgImhfZG9vciIgICAgICAgICAgIC8vIEVudGhhZWx0IGRpZSBCZXNjaHJlaWJ1bmcgZGVyIFR1ZXIuCisjZGVmaW5lIEhfRE9PUlNUQVQgImhfZG9vcnN0YXQiICAgLy8gRW50aGFlbHQgZGVuIFp1c3RhbmQgZGVyIEhhdXN0dWVyLgorI2RlZmluZSBIX0RPT1JMU1RBVCAiaF9kb29ybHN0YXQiIC8vIFR1ZXJ6dXN0YW5kIGFscyBTdHJpbmdhcnJheS4KKyNkZWZpbmUgSF9SRVBPUlQgImhfcmVwb3J0IiAgICAgICAvLyBJbmZvIHVlYmVyIHR5cG8vYnVnL2lkZWUgaW0gSGF1cworI2RlZmluZSBIX1NQRUNJQUwgImhfc3BlY2lhbCIgICAgIC8vIEJlc29uZGVyaGVpdGVuIGltIEhhdXMKKyNkZWZpbmUgSF9GVVJOSVRVUkUgImhfZnVybml0dXJlIiAvLyBSZWJvb3RmZXN0ZSBTZWhlcm1vZWJlbAorCisvKioqIFR5cGVuIGZ1ZXIgSF9TUEVDSUFMICoqKi8KKyNkZWZpbmUgSFNfSVRFTSAxICAvLyBlaW4gYmVzdGltbXRlcyBPYmpla3QgKHBlciBBZGRJdGVtKCkpCisjZGVmaW5lIEhTX0VYSVQgMiAgLy8gZWluIEF1c2dhbmcgKHBlciBBZGRFeGl0KCkpCisKKy8qKiogRWluc3RlbGx1bmdlbiBmdWVyIEZ1cm5pdHVyZSAqKiovCisjZGVmaW5lIE1BWF9GVVJOSVRVUkVfUEVSX1JPT00gNQorCisvKioqIExhc3QgYnV0IG5vdCBsZWFzdC4uLiAqKiovCisjZGVmaW5lIFVQX0FSR1MobykgKChvKS0+X3VucGFyc2VkX2FyZ3MoMSkpCisKKyNlbmRpZgkvLyBfX0hBVVNfSF9fCisKKyNpZmRlZiBORUVEX1BST1RPVFlQRVMKKworI2lmbmRlZiBfX0hBVVNfSF9QUk9UT1NfXworI2RlZmluZSBfX0hBVVNfSF9QUk9UT1NfXworCit2YXJhcmdzIHZvaWQgU2F2ZShpbnQgY3J1bmNoZWQpOwordm9pZCBMb2FkKCk7Cit2YXJhcmdzIHN0cmluZyBRdWVyeU93bmVyKGludCB3aXRoTnIpOwordmFyYXJncyBzdHJpbmcgU2V0T3duZXIoc3RyaW5nIG8sIGludCBucik7Citwcm90ZWN0ZWQgdm9pZCBBZGRFeGl0Tm9DaGVjayhtaXhlZCBjbWQsIG1peGVkIGRlc3QpOwordm9pZCBSZW1vdmVFeGl0Tm9DaGVjayhtaXhlZCBjbWQpOworCisjZW5kaWYJLyogX19IQVVTX0hfUFJPVE9TX18gKi8KKyNlbmRpZgkvKiBORUVEX1BST1RPVFlQRVMgKi8KKworLy8gJExvZzogaGF1cy5oLHYgJAorLy8gUmV2aXNpb24gMS4yICAyMDAzLzA1LzAzIDEzOjA5OjA1ICBtdWQKKy8vIFBBVEggaW4gSEFFVVNFUlBGQUQgdW1iZW5hbm50CisvLworLy8gUmV2aXNpb24gMS4xLjEuMSAgMjAwMC8wOC8yMCAyMDoyMjo0MiAgbXVkCisvLyBJbnMgQ1ZTIGVpbmdlY2hlY2t0CisvLworLy8gUmV2aXNpb24gMi43ICAxOTk1LzA2LzI4ICAwODo1ODowNyAgV2FyZ29uCisvLyBIX1JFUE9SVCBmdWVyIFNwaWVsZXJydWVja21lbGR1bmdlbi4KKy8vIEZsYWdzIEJFRkVITCB1bmQgUkVQT1JUIGZ1ZXIgQWVuZGVydW5nZW4uCisvLworLy8gUmV2aXNpb24gMi42ICAxOTk1LzA0LzIxICAwODo1Mzo1NyAgV2FyZ29uCisvLyAjZGVmaW5lcyBmdWVyIE1vZHVsYXJpc2llcnVuZyB1bmQgbmV1ZSBUdWVyZmVhdHVyZXMuCisvLworLy8gUmV2aXNpb24gMi41ICAxOTk1LzAyLzI3ICAyMDo1NDo0OSAgV2FyZ29uCisvLyBVUF9BUkdTIGFuZ2VwYXNzdCwgZGEgUGFyc2VyIGpldHp0IGF1Y2ggZnVlciBTcGllbGVyIGFrdGl2LgorLy8KKy8vIFJldmlzaW9uIDIuMyAgMTk5NS8wMi8xNSAgMTE6MTU6MDggIFdhcmdvbgorLy8gSF9ET09SOiBFbnRoYWVsdCBkaWUgQmVzY2hyZWlidW5nIGRlciBIYXVzdHVlci4KKy8vCisvLyBSZXZpc2lvbiAyLjIgIDE5OTUvMDIvMDQgIDE3OjE4OjM5ICBXYXJnb24KKy8vIEhfQ09NTUFORFM6IGVudGhhZWx0IG1hcHBpbmcgbWl0IHNlbGJzdGRlZmluaWVydGVuIEhhdXNiZWZlaGxlbi4KKy8vIENIRVNUIGluIEhfQ0hFU1QgdW1iZW5hbm50LgorLy8KKy8vIFJldmlzaW9uIDIuMSAgMTk5NS8wMi8wNCAgMTU6MDY6MTggIFdhcmdvbgorLy8gRGVmaW5pdGlvbiB2b24gQ0hFU1QgYWxzIFByb3BlcnR5IGZ1ZXIgZGVuIFN0YW5kb3J0IGRlciBUcnVoZSB1bmQKKy8vIFRSVUhFIGFscyBmZXN0ZSBJRCBkZXIgVHJ1aGUuCisvLworLy8gUmV2aXNpb24gMi4wICAxOTk1LzAyLzAxICAyMDo0NToxOCAgV2FyZ29uCisvLyBVUF9BUkdTLU1ha3JvLCBsaWVmZXJ0IGZ1ZXIgQUxMRSBkYXMgRXJnZWJuaXMgdm9uIF91bnBhcnNlZF9hcmdzKDEpCisvLwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL2hhdXN2ZXJ3YWx0ZXIuYyBiL2Qvc2VoZXIvaGFldXNlci9oYXVzdmVyd2FsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2NDNkMQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9oYXVzdmVyd2FsdGVyLmMKQEAgLTAsMCArMSw2MjEgQEAKKy8qCisgKiAgaGF1c3ZlcndhbHRlci5jIC0tIFZlcndhbHR1bmcgZGVyIFNlaGVyaGFldXNlcgorICoKKyAqICBEYXMgR3J1bmRvYmpla3Qgc3RhbW10IHZvbiBCb2luZywgRm9ydGZ1ZWhydW5nIGVyZm9sZ3RlIGR1cmNoIEpvZi4KKyAqICBMZXR6dGUgQWVuZGVydW5nZW4gdmVyc2NodWxkZXQgZHVyY2ggV2FyZ29uIDspCisgKgorICogJERhdGU6IDE5OTcvMDkvMDkgMTc6MTk6MjkgJAorICogJFJldmlzaW9uOiAyLjMgJAorICogJExvZzogaGF1c3ZlcndhbHRlci5jLHYgJAorICogUmV2aXNpb24gMi4zICAxOTk3LzA5LzA5IDE3OjE5OjI5ICBXYXJnb24KKyAqIEJ1Z2ZpeCBiZWltIFZlcmxlZ2VuL0xvZXNjaGVuIGVpbmVzIEhhdXNlcworICoKKyAqIFJldmlzaW9uIDIuMiAgMTk5Ni8wMi8yMSAgMTg6MTU6MDIgIFdhcmdvbgorICogKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorICoKKyAqIFJldmlzaW9uIDIuMCAgMTk5NC8xMS8xNyAgMTM6NDg6MjcgIFdhcmdvbgorICogTW9kaWZpa2F0aW9uZW4gZnVlciBkaWUgVHJlbm51bmcgSGF1cy9SYXVtLgorICoKKyAqIFJldmlzaW9uIDEuNSAgMTk5NC8xMC8yNCAgMDg6MjE6NTUgIFdhcmdvbgorICogUGFyYW1ldGVyIGZ1ZXIgTmV1ZXNIYXVzIGdlYWVuZGVydC4KKyAqIEZ1ZXIgU2ljaGVyaGVpdHNjaGVjayBzZWN1cmUoKSBlaW5nZWJhdXQuCisgKiBWZXJsZWdlSGF1cygpIGVpbmdlYmF1dCwgZmFsbHMgZWluIEhhdXMgbWFsIHZlcmxlZ3Qgd2VyZGVuIG11c3MuCisgKgorICogUmV2aXNpb24gMS40ICAxOTk0LzEwLzEwICAyMTo1MDo1OSAgV2FyZ29uCisgKiBOZXVlc0hhdXMoKSB1bmQgTG9lc2NoZUhhdXMoKSBiZWRpZW5lbiBudW4gYXVjaCBkZW4gT0JKRUNURC4KKyAqIFBydWVmZUhhdXMoKSB3dXJkZSBkYW1pdCBoaW5mYWVsbGlnLgorICoKKyAqIFJldmlzaW9uIDEuMyAgMTk5NC8xMC8wOSAgMjA6MTE6NDggIFdhcmdvbgorICogQmVzY2hyZWlidW5nIGRlciBIYWV1c2VyIHZvbSBIYXVzdmVyd2FsdGVyIGFiZ2Vrb3BwZWx0IQorICogRGllIG1lZ2FtYXAgZW50aGFlbHQgbnVyIG5vY2ggQmVzaXR6ZXIgdW5kIFN0YW5kb3J0IGRlcyBIYXVzZXMuCisgKiBJbmZvbGdlZGVzc2VuIHNpbmQgU2F2ZSgpIHVuZCBidWlsZCgpIHJhdXNnZWZsb2dlbi4uLgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5NC8xMC8wNyAgMjI6MTk6NDggIFdhcmdvbgorICogQVVGQkFVIERFUyBNQVBQSU5HUyBHRUFFTkRFUlQhIERlciBGaWxlbmFtZSBkZXMgUmF1bWVzLCBpbiBkZW0gZGFzCisgKiBIYXVzIHN0ZWh0LCBzdGVodCBqZXR6dCBhbHMgZXJzdGVyIEVpbnRyYWcgaW0gTWFwcGluZyEgQWxsZSBhbmRlcmVuCisgKiBFaW50cmFlZ2Ugc2luZCB1bSAxIHdlaXRlcmdld2FuZGVydC4KKyAqIEJlaW0gTGFkZW4gZGVzIFZlcndhbHRlcnMgd2VyZGVuIG5pY2h0IG1laHIgYWxsZSBTZWhlcmhhZXVzZXIgZ2UtCisgKiBsYWRlbi4gRWluIEhhdXMgd2lyZCBlcnN0IGdlbGFkZW4sIHdlbm4gZGVyIFJhdW0sIGluIGRlbSBlcyBzdGVodCwKKyAqIGdlbGFkZW4gd2lyZCAoUHJ1ZWZlSGF1cygpLCBzaWVoZSBhdWNoIHN0ZC9yb29tOjpjcmVhdGUoKSkuCisgKgorICogUmV2aXNpb24gMS4xICAxOTk0LzEwLzA3ICAxNDoxOTozNiAgV2FyZ29uCisgKiBJbml0aWFsIHJldmlzaW9uCisgKgorICovCisjcHJhZ21hIHN0cmljdF90eXBlcworI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx3aXpsZXZlbHMuaD4KKyNpbmNsdWRlIDxyb29tcy5oPgorI2luY2x1ZGUgPG1vdmluZy5oPgorI2luY2x1ZGUgImhhdXMuaCIKKworI2RlZmluZSBIX01BWF9ST09NUyA5CisKK21hcHBpbmcgbWVnYW1hcDsKKworLy8gSGF1cyBmdWVyIG93bmVyIGltIFJhdW0gZW52IGVyc3RlbGxlbi4gV2lyZCBpLmQuUiBudXIgdm9tIEluc3RhbnRoYXVzIGdlbWFjaHQuCit2b2lkIE5ldWVzSGF1cyhzdHJpbmcgb3duZXIsIG9iamVjdCBlbnYpOworCisvLyBIYXVzIHZvbiBvd25lciBsb2VzY2hlbiAoc2FtdCBTYXZlZmlsZSEpLiBEaWVzZXIgVm9yZ2FuZyBpc3QgdW53aWRlcnJ1ZmxpY2ghCitpbnQgTG9lc2NoZUhhdXMoc3RyaW5nIG93bmVyKTsKKworLy8gTG9lc2NodCBkZW4gbGV0enRlbiBoaW56dWdlZnVlZ3RlbiBSYXVtIGltIFNlaGVyaGF1cyB2b24gJ293bmVyJy4KK3ZvaWQgTG9lc2NoZVJhdW0oc3RyaW5nIG93bmVyKTsKKworLy8gRnVlZ3QgZWluZW4gUmF1bSB6dW0gU2VoZXJoYXVzIHZvbiAnb3duZXInIGhpbnp1Lgordm9pZCBOZXVlclJhdW0oc3RyaW5nIG93bmVyKTsKKworLy8gSGF1cyB2b24gb3duZXIgdm9tIFJhdW0gJ3ZvbicgaW4gZGVuIFJhdW0gJ25hY2gnIHZlcnNjaGllYmVuLgoraW50IFZlcmxlZ2VIYXVzKHN0cmluZyBvd25lciwgc3RyaW5nIHZvbiwgc3RyaW5nIG5hY2gpOworCisvLyBLYW5uIGluIG9iIGVpbiBIYXVzIGdlYmF1dCB3ZXJkZW4/IDA6IEphLCBzb25zdCBGZWhsZXIhCitpbnQgVW5iZWJhdWJhcihvYmplY3Qgb2IpOworCisvLyBKZW1hbmRlbSBpbSBIYXVzIFp1c2F0enJlY2h0ZSBlaW5yYWV1bWVuL2VudHppZWhlbgorc3RyaW5nICpFcmxhdWJlKHN0cmluZyBvd25lciwgc3RyaW5nICp3ZXIpOworc3RyaW5nICpWZXJiaWV0ZShzdHJpbmcgb3duZXIsIHN0cmluZyAqd2VyKTsKKworLy8gRWlnZW5zY2hhZnRlbiBhdXMgZGVyIG1lZ2FtYXAgYWJmcmFnZW4KK21peGVkIEhhdXNQcm9wKHN0cmluZyBvd25lciwgaW50IHByb3ApOworCisvLyBQcm9wZXJ0eW1hcHBpbmcgZGVkdXBsaXppZXJlbgorbWl4ZWQgUENydW5jaChtYXBwaW5nIHByb3ApOworCisvLyBMYWRlIFNlaGVyaGF1cyB2b24gQmVzaXR6ZXIgJ293bmVyJworb2JqZWN0IF9MYWRlSGF1cyhzdHJpbmcgb3duZXIpOworCisvLyBMYWRlIGltIFNlaGVyaGF1cyB2b24gJ293bmVyJyBkZW4gUmF1bSBtaXQgZGVyIE51bW1lciAnbnVtJworb2JqZWN0IF9MYWRlUmF1bShzdHJpbmcgb3duZXIsIGludCBudW0pOworCisvLyByZXR1cm50IGRhcyBTZWhlcmhhdXMgdm9uIEJlc2l0emVyICdvd25lcicKK29iamVjdCBGaW5kZUhhdXMoc3RyaW5nIG93bmVyKTsKKwordm9pZCBjcmVhdGUoKQoreworICBpZiAoIXJlc3RvcmVfb2JqZWN0KFNBVkVGSUxFKSkKKyAgICBtZWdhbWFwID0gKFsgXSk7CisgIHNldGV1aWQoZ2V0dWlkKHRoaXNfb2JqZWN0KCkpKTsKK30KKworaW50IHF1ZXJ5X3ByZXZlbnRfc2hhZG93KG9iamVjdCBvYikKK3sKKyAgSExPRygiU0hBRE9XIixzcHJpbnRmKCAiJXMsIHZvbiAlTyBpbSBWZXJ3YWx0ZXIuXG4iLGR0aW1lKHRpbWUoKSlbNS4uXSwgb2IpKTsKKyAgcmV0dXJuIDE7Cit9CisKK3ByaXZhdGUgaW50CitzZWN1cmUoKQoreworICBpbnQgYXI7CisKKyAgaWYgKCF0aGlzX2ludGVyYWN0aXZlKCkpCisgICAgcmV0dXJuIDA7CisKKyAgLy8gZGFzIHRyYWdiYXJlIEluc3RhbnRoYXVzIHVuZCBkaWUgSGF1c2F1c2dhYmUgZHVlcmZlbjoKKyAgaWYgKChsb2FkX25hbWUocHJldmlvdXNfb2JqZWN0KCkpID09IFBBVEgrInRyYWdoYXVzIikgfHwKKyAgICAgIChsb2FkX25hbWUocHJldmlvdXNfb2JqZWN0KCkpID09IFBBVEgrInNiX2F1c2dhYmUiKSkgeworICAgIHJldHVybiAxOworICB9CisgIAorICBjYXRjaChhciA9IChpbnQpKFBBVEgrImFjY2Vzc19yaWdodHMiKS0+YWNjZXNzX3JpZ2h0cyhnZXRldWlkKHRoaXNfaW50ZXJhY3RpdmUoKSksICJoYXVzLmgiKSk7CisKKyAgLy8gRXJ6bWFnaWVyIHVuZCBhbGxlIG1pdCBTY2hyZWlicmVjaHRlbiBhdWYgaGF1cy5oIGR1ZXJmZW4KKyAgaWYgKCAodGhpc19pbnRlcmFjdGl2ZSgpID09IHRoaXNfcGxheWVyKCkpICYmCisgICAgICAoSVNfQVJDSCh0aGlzX2ludGVyYWN0aXZlKCkpIHx8IGFyICkgKQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworLy8gZXJzZXR6dCBkYXMgSEFFVVNFUiBsb2dmaWxlIG1pdCBuZXVlciBTdGF0aXN0aWsKK3ByaXZhdGUgdm9pZAorZHVtcCgpCit7CisgIHN0cmluZyAqaW5kOworICBpbnQgaSwgaG51bSwgcm51bSA9IDA7CisKKyAgLy8gbG9lc2NoZSBsb2dmaWxlCisgIHJtKFBBVEgrIkhBRVVTRVIiKTsKKworICAvLyBiZXRyYWNodGUgYWxsZSBTZWhlcmhhZXVzZXIKKyAgaW5kID0gbV9pbmRpY2VzKG1lZ2FtYXApOworICBpZiAoaG51bT1zaXplb2YoaW5kKSkgeworICAgIHdyaXRlX2ZpbGUoUEFUSCsiSEFFVVNFUiIsIHNwcmludGYoIkVzIGdpYnQgJWQgU2VoZXJoYWV1c2VyOlxuIiwgaG51bSkpOworICAgIGluZCA9IHNvcnRfYXJyYXkoaW5kLCMnPik7IC8vJworICAgIC8vIGFsbGUgSGFldXNlciBzb3J0aWVydCBuYWNoIEJlc2l0emVybmFtZSBkdXJjaGdlaGVuOgorICAgIGZvcihpID0gMDsgaSA8IGhudW07ICsraSkgeworICAgICAgLy8gemFlaGxlIFJhZXVtZQorICAgICAgKytybnVtOyAvLyBIYXVwdHJhdW0KKyAgICAgIHJudW0gKz0gKG1lZ2FtYXBbaW5kW2ldLCBIUF9ST09NU10pOyAvLyBOZWJlbnJhZXVtZQorICAgICAgLy8gRWluZSBaZWlsZSBwcm8gSGF1czogQmVzaXR6ZXJuYW1lIChSYXVtYW56YWhsKSBTdGFuZG9ydC1QZmFkCisgICAgICB3cml0ZV9maWxlKFBBVEgrIkhBRVVTRVIiLAorICAgICAgICAgICAgICAgICBzcHJpbnRmKCAiJS0xM3MgKCVkKSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwaXRhbGl6ZShpbmRbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZWdhbWFwW2luZFtpXSxIUF9ST09NU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZ2FtYXBbaW5kW2ldLEhQX0VOVl0gKSApOworICAgIH0KKyAgICB3cml0ZV9maWxlKFBBVEgrIkhBRVVTRVIiLCBzcHJpbnRmKCJFcyBnaWJ0IGluc2dlc2FtdCAlZCBSYWV1bWUuXG4iLCBybnVtKSk7CisgIH0KKyAgZWxzZQorICAgIHdyaXRlX2ZpbGUoUEFUSCsiSEFFVVNFUiIsICJLRUlORSBIQUVVU0VSIVxuIik7Cit9CisKKy8vIEdlZ2VucmljaHR1bmdlbgorI2RlZmluZSBYX0VYSVQgKFsib2JlbiI6InVudGVuIiwgInVudGVuIjoib2JlbiIsXAorCQkgIndlc3RlbiI6Im9zdGVuIiwgIm9zdGVuIjoid2VzdGVuIixcCisJCSAic3VlZGVuIjoibm9yZGVuIiwgIm5vcmRlbiI6InN1ZWRlbiIsXAorCQkgIm5vcmRvc3RlbiI6InN1ZWR3ZXN0ZW4iLCAic3VlZHdlc3RlbiI6Im5vcmRvc3RlbiIsXAorCQkgIm5vcmR3ZXN0ZW4iOiJzdWVkb3N0ZW4iLCAic3VlZG9zdGVuIjoibm9yZHdlc3RlbiIgXSkKKworLy8gZnVlciBqZWRlbiBSYXVtIGltIEhhdXMgW21heCAuLiAwXSBiZXRyYWNodGUgYWxsZSBBdXNnYWVuZ2U7CisvLyB6YWVobGUgYWxsZSBBdXNnYWVuZ2UgYXVzc2VyIGRlciBIYXVzdHVlciBpbiBSYWV1bWUsCisvLyBkaWUgbmljaHQgenUgZGllc2VtIFNlaGVyaGF1cyBnZWhvZXJlbgorLy8gKGRpZXMgc29sbHRlbiBVZWJlcmdhZW5nZSB6dSBhbmRlcmVuIFNlaGVyaGFldXNlcm4gc2VpbikKKy8vIGZhbGxzIHJlbSAhPSAwIGxvZXNjaGUgZGllIEdlZ2VucmljaHR1bmcgenUgZGllc2VuIEF1c2dhZW5nZW4sCisvLyBkLmguIGthcHBlIGFsbGUgVWViZXJnYWVuZ2UgYXVzIGFuZGVyZW4gU2VoZXJoYWV1c2VybiBpbiBkaWVzZXMKK3ByaXZhdGUgaW50CitjaGVja19leGl0cyhzdHJpbmcgb3duZXIsIGludCBtYXgsIGludCByZW0pCit7CisgIGludCB4LCBuciwgYmFyOworICBzdHJpbmcgaG5hbWUsIGZvbzsKKyAgb2JqZWN0IGhlcmUsIHRoZXJlOworCisgIHggPSAwOworICBmb3IgKG5yID0gbWF4OyBuciA+PSAwOyAtLW5yKSB7CisgICAgLy8gYmV0cmFjaHRlIGplZGVuIFNlaGVyaGF1c3JhdW0gbWl0IGluZGV4IG1heCAuLiAwCisgICAgaG5hbWUgPSBSQVVNTkFNRShvd25lciwgbnIpOworCisgICAgaWYgKGNhdGNoKGhlcmUgPSBsb2FkX29iamVjdChobmFtZSk7cHVibGlzaCkpIHsKKyAgICAgIHByaW50ZigiZXJyb3IgbG9hZGluZyAlTyFcbiIsIGhuYW1lKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBmb3JlYWNoIChzdHJpbmcgZGlyLCBzdHJpbmcgcGF0aCA6IChtYXBwaW5nKShoZXJlLT5RdWVyeVByb3AoUF9FWElUUykpKSB7CisgICAgICAvLyBiZXRyYWNodGUgYWxsZSBBdXNnYWVuZ2UKKyAgICAgIGlmIChkaXIgPT0gInJhdXMiKSB7CisgICAgICAgIC8vIEhhdXN0dWVyIGF1cyBkZW0gSGF1cHRyYXVtIGRhcmYgbmF0dWVybGljaCByYXVzZnVlaHJlbgorICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmICgoc3NjYW5mKHBhdGgsIFBBVEgrIiVzcmF1bSVkIiwgZm9vLCBiYXIpICE9IDIpIHx8IChmb28gIT0gb3duZXIpKSB7CisgICAgICAgIC8vIFJhdW0gaW4gZGVuIGRlciBBdXNnYW5nIGZ1ZWhydCBpc3QgbmljaHQgaW4gZGllc2VtIFNlaGVyaGF1cworICAgICAgICArK3g7CisgICAgICAgIGlmIChyZW0pIHsKKyAgICAgICAgICBjYXRjaCh0aGVyZSA9IGxvYWRfb2JqZWN0KHBhdGgpO3B1Ymxpc2gpOworICAgICAgICAgIGlmICh0aGVyZSkgeworICAgICAgICAgICAgLy8gbG9lc2NoZSBkaWUgR2VnZW5yaWNodHVuZyB6dSBkZW0gQXVzZ2FuZworICAgICAgICAgICAgdGhlcmUtPlJlbW92ZUV4aXQoWF9FWElUW2Rpcl0pOworICAgICAgICAgICAgdGhlcmUtPlNhdmUoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIHg7Cit9CisKKy8vIEhhdXMgZnVlciBvd25lciBpbSBSYXVtIGVudiBlcnN0ZWxsZW4uCisvLyBXaXJkIGkuZC5SIG51ciB2b20gSW5zdGFudGhhdXMgZ2VtYWNodC4KK3ZvaWQgTmV1ZXNIYXVzKHN0cmluZyBvd25lciwgb2JqZWN0IGVudikKK3sKKyAgb2JqZWN0IGg7CisKKyAgLy8ga2VpbmUgcGFzc2VuZGVuIFJlY2h0ZQorICBpZiAoIXNlY3VyZSgpKQorICAgIHJldHVybjsKKworICAvLyBuZXVlbiBFaW50cmFnIGltIFZlcndhbHRlci1NYXBwaW5nIGZ1ZXIgZGFzIEhhdXMgZXJzdGVsbGVuCisgIG1lZ2FtYXAgKz0gKFsgb3duZXIgOiBvYmplY3RfbmFtZShlbnYpOyAwOyAoe30pIF0pOworICAvLyBIYXVzIGFtIEJhdXBsYXR6IGxhZGVuLCBmYWxscyBtb2VnbGljaAorICBjYXRjaChoID0gbG9hZF9vYmplY3QoSEFVU05BTUUob3duZXIpKTtwdWJsaXNoKTsKKyAgaWYgKCFoKQorICAgIHJldHVybjsKKworICAvLyBIYXVzIFNwZWljaGVybiB1bmQgYWxzIFJhdW1hdXRvbG9hZGVyIGVpbnRyYWdlbgorICBoLT5TYXZlKCk7CisgIE9CSkVDVEQtPkFkZE9iamVjdChoLCBvYmplY3RfbmFtZShlbnYpKTsKKyAgLy8gQmF1cGxhdHogYXVmIG5ldmVyIGNsZWFuIHNldHplbiB1bmQgVmVyd2FsdGVyIGFic3BlaWNoZXJuCisgIGVudi0+U2V0UHJvcChQX05FVkVSX0NMRUFOLCAxKTsKKyAgc2F2ZV9vYmplY3QoU0FWRUZJTEUpOworCisgIC8vIEhhdXB0cmF1bSBkZXMgU2VoZXJoYXVzZXMgbGFkZW4KKyAgaCA9IGxvYWRfb2JqZWN0KFJBVU1OQU1FKG93bmVyLDApKTsKKyAgaC0+U2V0UHJvcChIX0NIRVNULDEpOworICAvLyBIYXVwdHJhdW0gc3BlaWNoZXJuCisgIGgtPlNhdmUoKTsKKyAgLy8gVHJ1aGUgbGFkZW4KKyAgaC0+TG9hZCgpOworICAvLyBTdGF0aXN0aWsgdWViZXIgYWxsZSBTZWhlcmhhZXVzZXIgZXJuZXVlcm4KKyAgZHVtcCgpOworfQorCisvLyBsb2VzY2h0IGRlbiBsZXR6dGVuIGhpbnp1ZnVlZ3RlbiBSYXVtIGltIFNlaGVyaGF1cyB2b24gJ293bmVyJwordm9pZCBMb2VzY2hlUmF1bShzdHJpbmcgb3duZXIpCit7CisgIG9iamVjdCByYXVtb2I7CisgIGludCBucjsKKworICAvLyBrZWluIHBhc3NlbmRlcyBTZWhlcmhhdXMgdmVyd2FsdGV0IG9kZXIga2VpbiBSZWNodCBkYXMgenUgdHVuCisgIGlmICghbWVtYmVyKG1lZ2FtYXAsIG93bmVyKSB8fCAhc2VjdXJlKCkpCisgICAgcmV0dXJuOworCisgIG5yID0gbWVnYW1hcFtvd25lciwgSFBfUk9PTVNdOworICAvLyBmYWxscyBkYXMgSGF1cyB1ZWJlcmhhdXB0IHp1c2FldHpsaWNoZSBSYWV1bWUgKG5lYmVuIEhhdXB0cmF1bSkgaGF0CisgIGlmIChuciA+IDAgKSB7CisgICAgLy8gZmFsbHMgZ2VsYWRlbiwgcmVtb3ZlIFJhdW0tT2JqZWt0CisgICAgcmF1bW9iID0gZmluZF9vYmplY3QoUkFVTU5BTUUob3duZXIsKG1lZ2FtYXBbb3duZXIsSFBfUk9PTVNdKSkpOyAgIAorICAgIGlmIChvYmplY3RwKHJhdW1vYikpCisgICAgICByYXVtb2ItPnJlbW92ZSgxKTsKKworICAgIC8vIGxvZXNjaGUgUmF1bSBhdXMgVmVyd2FsdGVyLU1hcHBpbmcgZHVyY2ggQW56YWhsIHVtIGVpbnMgZXJuaWVkcmlnZW4KKyAgICAtLW1lZ2FtYXBbb3duZXIsIEhQX1JPT01TXTsKKworICAgIC8vIHNhdmVmaWxlIG11c3MgcGVyIEhhbmQgZ2Vsb2VzY2h0IHdlcmRlbjoKKyAgICB0ZWxsX29iamVjdCh0aGlzX2ludGVyYWN0aXZlKCksCisgICAgICAgICAgICAgICAgYnJlYWtfc3RyaW5nKHNwcmludGYoIlZlcmdpc3MgbmljaHQsIGRhcyBTYXZlZmlsZSB6dSBsb2VzY2hlbiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHNvOiAiK0hBVVNTQVZFUEFUSCsiJXMlZC5vXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyLCBuciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc4KSk7CisgICAgLy8gc3BlaWNoZXIgSGF1c3ZlcndhbHR1bmcgYWIgdW5kIGVybmV1ZXIgU3RhdGlzdGlrIHVlYmVyIGFsbGUgU2VoZXJoYWV1c2VyCisgICAgc2F2ZV9vYmplY3QoU0FWRUZJTEUpOworICAgIGR1bXAoKTsKKyAgfQorfQorCisvLyBGdWVndCBlaW5lbiBSYXVtIHp1bSBTZWhlcmhhdXMgdm9uICdvd25lcicgaGluenUuCit2b2lkIE5ldWVyUmF1bShzdHJpbmcgb3duZXIpCit7CisgIG9iamVjdCByYXVtb2I7CisKKyAgLy8ga2VpbiBwYXNzZW5kZXMgU2VoZXJoYXVzIHZlcndhbHRldCBvZGVyIGtlaW4gUmVjaHQgZGFzIHp1IHR1bgorICBpZiAoIW1lbWJlcihtZWdhbWFwLCBvd25lcikgfHwgIXNlY3VyZSgpKQorICAgIHJldHVybjsKKworICAvLyBpc3QgZGllIE1heGltYWxhbnphaGwgdm9uIFJhZXVtZW4gc2Nob24gZXJyZWljaHQ/CisgIGlmIChtZWdhbWFwW293bmVyLCBIUF9ST09NU10gPCBIX01BWF9ST09NUykKKyAgeworICAgIC8vIGVyaG9laGUgUmF1bXphZWhsZXIgaW4gVmVyd2FsdGVyLU1hcHBpbmcKKyAgICBtZWdhbWFwW293bmVyLCBIUF9ST09NU10rKzsKKyAgICAvLyBsYWRlIG5ldWVuIFJhdW0sIGZhbGxzIG1vZWdsaWNoCisgICAgY2F0Y2gocmF1bW9iID0gbG9hZF9vYmplY3QoKFJBVU1OQU1FKG93bmVyLChtZWdhbWFwW293bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIUF9ST09NU10pKSkpO3B1Ymxpc2gpOworICAgIGlmKG9iamVjdHAocmF1bW9iKSkKKyAgICAgIC8vIHNwZWljaGVyIG5ldWVuIFJhdW0KKyAgICAgIHJhdW1vYi0+U2F2ZSgpOworCisgICAgLy8gc3BlaWNoZXIgVmVyd2FsdGVyLU1hcHBpbmcgdW5kIGVybmV1ZXIgU3RhdGlzdGlrIHVlYmVyIGFsbGUgU2VoZXJoYWV1c2VyCisgICAgc2F2ZV9vYmplY3QoU0FWRUZJTEUpOworICAgIGR1bXAoKTsKKyAgfQorfQorCisvLyBMYWRlIFNlaGVyaGF1cyB2b24gQmVzaXR6ZXIgJ293bmVyJworb2JqZWN0IF9MYWRlSGF1cyhzdHJpbmcgb3duZXIpCit7CisgIG9iamVjdCBoYXVzOworICBzdHJpbmcgbzsKKworICAvLyBlcyB3aXJkIGtlaW4gcGFzc2VuZGVzIFNlaGVyaGF1cyB2ZXJ3YWx0ZXQKKyAgaWYgKCFtZW1iZXIobWVnYW1hcCwgb3duZXIpKQorICAgIHJldHVybiAwOworCisgIC8vIEhhdXMgaXN0IGJlcmVpdHMgZ2VsYWRlbgorICBpZiAoaGF1cz1maW5kX29iamVjdChIQVVTTkFNRShvd25lcikpKQorICAgIHJldHVybiBoYXVzOworCisgIC8vIGxhZGUgQmF1cGxhdHoKKyAgbyA9IG1lZ2FtYXBbb3duZXJdOworICBpZiAoY2F0Y2gobG9hZF9vYmplY3Qobyk7cHVibGlzaCkpCisgIHsKKyAgICB3cml0ZV9maWxlKFBBVEgrImhhdXNlcnJvciIsIG8rIiBrb25udGUgbmljaHQgZ2VsYWRlbiB3ZXJkZW4uXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICAvLyBIYXVzIGlzdCBkdXJjaCBMYWRlbiBkZXMgQmF1cGxhdHplcyBudW4gZ2VsYWRlbgorICBpZiAoaGF1cyA9IGZpbmRfb2JqZWN0KEhBVVNOQU1FKG93bmVyKSkpCisgICAgcmV0dXJuIGhhdXM7CisKKyAgLy8gY2xvbmUgU3RhbmRhcmQtSGF1cywgc2V0emUgQmVzaXR6ZXIKKyAgaGF1cyA9IGNsb25lX29iamVjdChIQVVTKTsKKyAgaGF1cy0+bW92ZShvLCBNX05PQ0hFQ0spOworICBoYXVzLT5TZXRPd25lcihvd25lciwgZmluZF9vYmplY3QoUkFVTU5BTUUob3duZXIsMCkpKTsKKyAgLy8gbGFkZSBpbmRpdmlkdWFsaXNpZXJ0ZXMgSGF1cyBhdXMgZGVtIFNhdmVmaWxlCisgIGhhdXMtPkxvYWQoKTsKKworICByZXR1cm4gaGF1czsKK30KKworLy8gTGFkZSBpbSBTZWhlcmhhdXMgdm9uICdvd25lcicgZGVuIFJhdW0gbWl0IGRlciBOdW1tZXIgJ251bScKK29iamVjdCBfTGFkZVJhdW0oc3RyaW5nIG93bmVyLCBpbnQgbnVtKQoreworICBvYmplY3QgcmF1bTsKKworICAvLyBlcyB3aXJkIGtlaW4gcGFzc2VuZGVzIFNlaGVyaGF1cyB2ZXJ3YWx0ZXQKKyAgaWYgKCFtZW1iZXIobWVnYW1hcCwgb3duZXIpKQorICAgIHJldHVybiAwOworCisgIC8vIFJhdW1udW1tZXIgbmljaHQgendpc2NoZW4gMCB1bmQgbGV0enRlciBSYXVtbnVtbWVyCisgIGlmIChudW0gPCAwIHx8IG51bSA+IG1lZ2FtYXBbb3duZXIsSFBfUk9PTVNdKQorICAgIHJldHVybiAwOworCisgIC8vIFJhdW0gaXN0IGJlcmVpdHMgZ2VsYWRlbgorICBpZiAocmF1bSA9IGZpbmRfb2JqZWN0KFJBVU1OQU1FKG93bmVyLG51bSkpKQorICAgIHJldHVybiByYXVtOworCisgIC8vIGNsb25lIHBhc3NlbmRlbiBSYXVtICgwOiBIYXVwdHJhdW0sIFg6IE5lYmVucmF1bSBYKSB1bmQgc2V0emUgQmVzaXR6ZXIKKyAgcmF1bSA9IGNsb25lX29iamVjdChudW0gPyAoUkFVTSkgOiAoUEFUSCsicmF1bTAiKSk7CisgIHJhdW0tPlNldE93bmVyKG93bmVyLCBudW0pOworICAvLyBsYWRlIE1vZWJlbCwgei5CLiBTZWhlcmhhdXN0cnVoZQorICByYXVtLT5Mb2FkKCk7CisgIC8vIEhhdXB0cmF1bSBiZWtvbW10IEhhdXN0dWVyLUF1c2dhbmcgenVtIEJhdXBsYXR6CisgIGlmICghbnVtKQorICAgIHJhdW0tPkFkZEV4aXROb0NoZWNrKCJyYXVzIiwgbWVnYW1hcFtvd25lcl0pOworCisgIHJldHVybiByYXVtOworfQorCisvLyByZXR1cm50IGRhcyBTZWhlcmhhdXMtT2JqZWt0IHZvbiBCZXNpdHplciAnb3cnCisvLyBudXIgenVtIExvZXNjaGVuIG9kZXIgV2VnYmV3ZWdlbiBkYWhlciBlaW5mYWNoZXIgYWxzIF9MYWRlSGF1cworb2JqZWN0IEZpbmRlSGF1cyhzdHJpbmcgb3cpCit7CisgIC8vIGVzIHdpcmQga2VpbiBwYXNzZW5kZXMgU2VoZXJoYXVzIHZlcndhbHRldAorICBpZiAoIW1lbWJlcihtZWdhbWFwLCBvdykpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiBsb2FkX29iamVjdChIQVVTTkFNRShvdykpOworfQorCisvLyBIYXVzIHZvbiBvd25lciBsb2VzY2hlbiAoc2FtdCBTYXZlZmlsZSEpLiBEaWVzZXIgVm9yZ2FuZyBpc3QgdW53aWRlcnJ1ZmxpY2ghCitpbnQgTG9lc2NoZUhhdXMoc3RyaW5nIG93bmVyKQoreworICBvYmplY3QgaGF1czsKKyAgaW50IHJvb21zOworICBzdHJpbmcgdG1wOworCisgIC8vIGtlaW5lIHBhc3NlbmRlbiBSZWNodGUgZnVlcnMgTG9lc2NoZW4KKyAgaWYgKCFzZWN1cmUoKSkKKyAgICByZXR1cm4gLTE7CisKKyAgLy8gSGF1cy1PYmpla3QgZmluZGVuLCBhbHMgUmF1bWF1dG9sb2FkZXIgaW0gQmF1cGxhdHogYXVzdHJhZ2VuIHVuZCBlbnRmZXJuZW4KKyAgaGF1cyA9IEZpbmRlSGF1cyhvd25lcik7CisgIGlmICghaGF1cykKKyAgICByZXR1cm4gLTI7CisgIE9CSkVDVEQtPlJlbW92ZU9iamVjdChoYXVzLCBvYmplY3RfbmFtZShlbnZpcm9ubWVudChoYXVzKSkpOworICBlbnZpcm9ubWVudChoYXVzKS0+UmVtb3ZlSXRlbShvYmplY3RfbmFtZShoYXVzKSk7CisKKyAgLy8gUmF1bWFuemFobCBtZXJrZW4KKyAgcm9vbXMgPSBtZWdhbWFwW293bmVyLEhQX1JPT01TXTsKKworICAvLyBIYXVzIGF1cyBWZXJ3YWx0ZXItTWFwcGluZyBsb2VzY2hlbgorICBtZWdhbWFwID0gbV9kZWxldGUobWVnYW1hcCwgb3duZXIpOworCisgIC8vIFZlcndhbHRlci1NYXBwaW5nIGFic3BlaWNoZXJuCisgIHNhdmVfb2JqZWN0KFNBVkVGSUxFKTsKKworICAvLyBVZWJlcmdhZW5nZSB2b24gYW5kZXJlbiBTZWhlcmhhZXVzZXJuIHp1IGRpZXNlbSBlbnRmZXJuZW4KKyAgY2hlY2tfZXhpdHMob3duZXIsIHJvb21zLCAxKTsKKworICAvLyBTYXZlZmlsZSBmdWVyIGRhcyBIYXVzIGVudGZlcm5lbgorICBpZiAoZmlsZV9zaXplKEhBVVNTQVZFUEFUSCtvd25lcisiLm8iKT4wKQorICAgIHJtKEhBVVNTQVZFUEFUSCtvd25lcisiLm8iKTsKKworICAvLyBTYXZlZmlsZXMgZnVlciBkaWUgUmFldW1lIGVudGZlcm5lbgorICBkbyB7CisgICAgaWYgKGZpbGVfc2l6ZSh0bXAgPSBzcHJpbnRmKChIQVVTU0FWRVBBVEgrIiVzJWQubyIpLG93bmVyLHJvb21zKSk+MCkKKyAgICAgIHJtKHRtcCk7CisgIH0gd2hpbGUgKC0tcm9vbXMgPj0gMCk7CisKKyAgLy8gU2F2ZWZpbGUgZnVlciBkaWUgVHJ1aGUgbG9lc2NoZW4KKyAgaWYgKGZpbGVfc2l6ZShIQVVTU0FWRVBBVEgrb3duZXIrInRydWhlLm8iKT4wKQorICAgIHJtKEhBVVNTQVZFUEFUSCtvd25lcisidHJ1aGUubyIpOworCisgIC8vIFJlcGZpbGUgZnVlciBkYXMgU2VoZXJoYXVzIGxvZXNjaGVuCisgIC8vIFRPRE86IEVpbnRyYWVnZSBhdXMgRVJST1JEIGxvZXNjaGVuLgorICBpZiAoZmlsZV9zaXplKFBBVEgrInJlcC8iK293bmVyKyIucmVwIikgPiAwKQorICAgIHJtKFBBVEgrInJlcC8iK293bmVyKyIucmVwIik7CisKKyAgLy8gU3RhdGlzdGlrIHVlYmVyIGFsbGUgU2VoZXJoYWV1c2VyIGVybmV1ZXJuCisgIGR1bXAoKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8vIEhhdXMgdm9uIG93bmVyIHZvbSBSYXVtICd2b24nIGluIGRlbiBSYXVtICduYWNoJyB2ZXJzY2hpZWJlbi4KK2ludCBWZXJsZWdlSGF1cyhzdHJpbmcgb3duZXIsIHN0cmluZyB2b24sIHN0cmluZyBuYWNoKQoreworICBvYmplY3QgaCwgemllbDsKKworICAvLyBrZWluIFJlY2h0IGRhcyB6dSB0dW4KKyAgaWYgKCFzZWN1cmUoKSkKKyAgICByZXR1cm4gLTExMTsKKworICAvLyB6dSB2ZXJsZWdlbmRlcyBIYXVzIG5pY2h0IGF1ZmZpbmRiYXIKKyAgaWYgKCEoaD1GaW5kZUhhdXMob3duZXIpKSkKKyAgICByZXR1cm4gLTE7CisKKyAgLy8gYWt0dWVsbGVyIFN0YW5kb3J0IGRlcyBIYXVzZXMgaXN0IG5pY2h0IFN0YXJ0cHVua3Qgdm9uCisgIGlmIChvYmplY3RfbmFtZShlbnZpcm9ubWVudChoKSkgIT0gdm9uKQorICAgIHJldHVybiAtMjsKKworICAvLyBaaWVsLVN0YW5kb3J0IG5pY2h0IGxhZGJhcgorICBjYXRjaCh6aWVsID0gbG9hZF9vYmplY3QobmFjaCk7cHVibGlzaCk7CisgIGlmICghemllbCkKKyAgICByZXR1cm4gLTM7CisKKyAgLy8gQW0gWmllbG9ydCBkYXJmIGtlaW4gSGF1cyBnZWJhdXQgd2VyZGVuCisgIGlmIChVbmJlYmF1YmFyKHppZWwpKQorICAgIHJldHVybiAtNDsKKworICAvLyBTZWhlcmhhdXMgaXN0IG1pdCBhbmRlcmVtIFNlaGVyaGF1cyB2ZXJidW5kZW4gdW5kIGthbm4gZGFoZXIgbmljaHQKKyAgLy8gdmVyc2Nob2JlbiB3ZXJkZW4KKyAgaWYgKGNoZWNrX2V4aXRzKG93bmVyLCBtZWdhbWFwW293bmVyLEhQX1JPT01TXSwgMCkpCisgICAgcmV0dXJuIC01OworCisgIC8vIG5ldWVuIFN0YW5kb3J0IGluIFZlcndhbHRlci1NYXBwaW5nIGVpbnRyYWdlbgorICBtZWdhbWFwW293bmVyXSA9IG5hY2g7CisgIC8vIFJhdW1hdXRvbG9hZGVyIGFtIGFsdGVuIFN0YW5kb3J0IGF1c3RyYWdlbiB1bmQgYW0gbmV1ZW4gZWludHJhZ2VuCisgIE9CSkVDVEQtPlJlbW92ZU9iamVjdChoLCB2b24pOworICBPQkpFQ1RELT5BZGRPYmplY3QoaCwgbmFjaCk7CisgIC8vIEhhdXMgYmV3ZWdlbgorICBoLT5tb3ZlKG5hY2gsIE1fTk9DSEVDSyk7CisgIC8vIEhhdXN0dWVyLUF1c2dhbmcgdW10cmFnZW4gdW5kIEhhdXB0cmF1bSBzcGVpY2hlcm4KKyAgY2F0Y2goUkFVTU5BTUUob3duZXIsMCktPkFkZEV4aXROb0NoZWNrKCJyYXVzIiwgbmFjaCk7cHVibGlzaCk7CisgIGNhdGNoKFJBVU1OQU1FKG93bmVyLDApLT5TYXZlKCk7cHVibGlzaCk7CisgIC8vIFZlcndhbHRlci1NYXBwaW5nIHNwZWljaGVybgorICBzYXZlX29iamVjdChTQVZFRklMRSk7CisgIC8vIEhhdXMgYWxzIElubXZlbnRhciBkZXMgYWx0ZW4gQmF1cGxhdHplcyBhdXN0cmFnZW4KKyAgdm9uLT5SZW1vdmVJdGVtKG9iamVjdF9uYW1lKGgpKTsKKyAgLy8gU3RhdGlzdGlrIHVlYmVyIGFsbGUgU2VoZXJoYWV1c2VyIGVybmV1ZXJuCisgIGR1bXAoKTsKKworICByZXR1cm4gMTsKK30KKworLy8gS2FubiBpbiBvYiBlaW4gSGF1cyBnZWJhdXQgd2VyZGVuPyAwOiBKYSwgc29uc3QgRmVobGVyIQoraW50IFVuYmViYXViYXIob2JqZWN0IG9iKQoreworICAvLyBSYXVtIGlzdCBnZWNsb250IG9kZXIgaGF0IGtlaW4gZWlnZW5lcyBGaWxldCwgei5CLiBWQworICBpZiAoY2xvbmVwKG9iKSB8fCBmaWxlX3NpemUob2JqZWN0X25hbWUob2IpKyIuYyIpPDApCisgICAgcmV0dXJuIDE7CisKKyAgLy8gSW5uZW5yYXVtCisgIGlmIChvYi0+UXVlcnlQcm9wKFBfSU5ET09SUykpCisgICAgcmV0dXJuIDI7CisKKyAgLy8gQmF1cGxhdHotUHJvcGVydHkgbmljaHQgZ2VzZXR6dAorICBpZiAoIShvYi0+UXVlcnlQcm9wKFBfSEFVU19FUkxBVUJUKSkpCisgICAgcmV0dXJuIDM7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8vIEplbWFuZGVtIGltIEhhdXMgWnVzYXR6cmVjaHRlIGVpbnJhZXVtZW4KK3N0cmluZyAqRXJsYXViZShzdHJpbmcgb3duZXIsIHN0cmluZyAqd2VyKQoreworICBzdHJpbmcgKmFsbDsKKworICAvLyBlcyB3aXJkIGtlaW4gcGFzc2VuZGVzIFNlaGVyaGF1cyB2ZXJ3YWx0ZXQKKyAgaWYgKCFtZW1iZXIobWVnYW1hcCwgb3duZXIpKQorICAgIHJldHVybiAwOworCisgIGFsbCA9IG1lZ2FtYXBbb3duZXIsIEhQX0FMTE9XRURdOworICAvLyBmdWVnZSB3ZXIgenUgYWxsIGRhenUgb2huZSBkb3BwZWx0ZSBFaW50cmFlZ2UgenUgZXJ6ZXVnZW46CisgIGFsbCArPSB3ZXItYWxsOworICAvLyBhZW5kZXIgUmVjaHRlbGlzdGUgaW4gZGVyIFZlcndhbHR1bmcKKyAgbWVnYW1hcFtvd25lciwgSFBfQUxMT1dFRF0gPSBhbGw7CisgIC8vIHNwZWljaGVyIFZlcndhbHRlci1NYXBwaW5nCisgIHNhdmVfb2JqZWN0KFNBVkVGSUxFKTsKKyAgLy8gcmV0dXJuIExpc3RlIGRlciBha3R1ZWxsZW4gUmVjaHRlaW5oYWJlcgorICByZXR1cm4gYWxsOworfQorCisvLyBKZW1hbmRlbSBpbSBIYXVzIFp1c2F0enJlY2h0ZSBlbnR6aWVoZW4KK3N0cmluZyAqVmVyYmlldGUoc3RyaW5nIG93bmVyLCBzdHJpbmcgKndlcikKK3sKKyAgLy8gZXMgd2lyZCBrZWluIHBhc3NlbmRlcyBTZWhlcmhhdXMgdmVyd2FsdGV0CisgIGlmICghbWVtYmVyKG1lZ2FtYXAsIG93bmVyKSkKKyAgICByZXR1cm4gMDsKKworICAvLyBhZW5kZXIgUmVjaHRlbGlzdGUgaW4gZGVyIFZlcndhbHR1bmcKKyAgbWVnYW1hcFtvd25lciwgSFBfQUxMT1dFRF0gLT0gd2VyOworICAvLyBzcGVpY2hlciBWZXJ3YWx0ZXItTWFwcGluZworICBzYXZlX29iamVjdChTQVZFRklMRSk7CisgIC8vIHJldHVybiBMaXN0ZSBkZXIgYWt0dWVsbGVuIFJlY2h0ZWluaGFiZXIKKyAgcmV0dXJuIG1lZ2FtYXBbb3duZXIsIEhQX0FMTE9XRURdOworfQorCisvLyBBYmZyYWdlIHZvbiBQcm9wZXJ0eSAncHJvcCcgaW0gSGF1cyB2b24gJ293bmVyJworLy8gcHJvcCBnbGVpY2ggSFBfRU5WLCBIUF9ST09NUyBvZGVyIEhQX0FMTE9XRUQgYXVzIGhhdXMuaAorbWl4ZWQgSGF1c1Byb3Aoc3RyaW5nIG93bmVyLCBpbnQgcHJvcCkKK3sKKyAgLy8gZXMgd2lyZCBrZWluIHBhc3NlbmRlcyBTZWhlcmhhdXMgdmVyd2FsdGV0CisgIGlmICghbWVtYmVyKG1lZ2FtYXAsIG93bmVyKSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gbWVnYW1hcFtvd25lcixwcm9wXTsKK30KKworLy8gemVybGVndCBkYXMgbWFwcGluZywgZmFzc3QgaW5kaWNlcyBtaXQgZ2xlaWNoZW4gdmFsdWVzIHp1c2FtbWVuCisvLyB1bmQgcGFja3QgZGFzIGdhbnplIGluIGVpbiBhcnJheSAtPiBEZWR1cGxpemllcmVuCisvLyBEYXMgRXJnZWJuaXMgZW50aGFlbHQKKy8vIGEpIGZ1ZXIgamVkZXMgRGV0YWlsIGVpbiBBcnJheSwgd2VsY2hlcyBhbHMgZXJzdGVzIEVsZW1lbnQgZWluIEFycmF5IHZvbgorLy8gU2NobHVlc3NlbG4gdW5kIGFscyB6d2VpdGVzIEVsZW1lbnQgZWluZW4gU3RyaW5nIGVudGhhZWx0LgorLy8gYikgZnVlciBqZWRlcyBLb21tYW5kbyBlaW4gQXJyYXksIHdlbGNoZXMgYWxzIGVyc3RlcyBFbGVtZW50IGVpbiBBcnJheSB2b24KKy8vIFN5bnRheGVuIHVuZCB6d2VpIGZvbGdlbmRlIEVsZW1lbnRlIG1pdCBTdHJpbmdzIChNZWxkdW5nZW4pIGVudGhhZWx0LgorLy8gQmVpZGVzIGlzdCBpbiBlaW5lbSBGb3JtYXQsIGRhc3MgZGllIEVsZW1lbnRlIHVubW9kaWZpemllcnQgYW4gZGllCisvLyBlbnRzcHJlY2hlbmRlbiBBZGQuLi4oKS1BdWZydWZlIGdlZ2ViZW4gd2VyZGVuIGtvZW5uZW4uCisKKy8vIChbICJrZXkxIiA6IEEsICJrZXkyIiA6IEIsICJrZXkzIiA6IEEgXSkKKy8vID0+ICh7ICh7ICh7ICJrZXkxIiwgImtleTMiIH0pLCBBICl9LCAoeyAoeyAia2V5MiIgfSksIEIgKX0gfSkKKworLy8gKFsgImtleTEiIDogKFsgImtleTExIiA6IEE7IEIsICJrZXkxMiIgOiBDOyBCLCAia2V5MTMiIDogQSwgQiBdKSwKKy8vICAgICJrZXkyIiA6IChbICJrZXkyMSIgOiBBOyBCLCAia2V5MjIiIDogQzsgQSBdKSBdKQorLy8gPT4gKHsgKHsgKHsgImtleTEga2V5MTEiLCAia2V5MSBrZXkxMyIsICJrZXkyIGtleTIxIiB9KSwgQSwgQiB9KSwKKy8vICAgICAgICh7ICh7ICJrZXkxIGtleTEyIiB9KSwgQywgQiB9KSwKKy8vICAgICAgICh7ICh7ICJrZXkyIGtleTIyIiB9KSwgQywgQSB9KSB9KQorbWl4ZWQgUENydW5jaChtYXBwaW5nIHByb3ApCit7CisgIG1peGVkIHJldCA9ICh7fSk7CisgIGludCBkb25lID0gMDsKKyAgZm9yZWFjaChzdHJpbmcga2V5LCBtaXhlZCBlbnRyeSA6IHByb3ApCisgIHsKKyAgICBpZihtYXBwaW5ncChlbnRyeSkpCisgICAgeworICAgICAgLy8gbWFwcGluZyBicmVpdGUgMiBpbSBtYXBwaW5nIGZ1ZXIgSF9DT01NQU5EUworICAgICAgZm9yZWFjaChzdHJpbmcgc3Via2V5LCBzdHJpbmcgdmFsMSwgc3RyaW5nIHZhbDIgOiBlbnRyeSkKKyAgICAgIHsKKyAgICAgICAgZG9uZSA9IDA7CisgICAgICAgIGZvcmVhY2gobWl4ZWQgcmV0c2V0IDogcmV0KQorICAgICAgICB7CisgICAgICAgICAgLy8gZmFsbHMgZXMgc2Nob24gaW0gZXJnZWJuaXMtYXJyYXkgZXR3YXMgbWl0IGRlbiBzZWxiZW4gd2VydGVuIGdpYnQsCisgICAgICAgICAgLy8gZnVlZ2UgZGVuIGluZGV4IGRvcnQgZGF6dQorICAgICAgICAgIGlmKHNpemVvZihyZXRzZXQpID09IDMgJiYgcmV0c2V0WzFdID09IHZhbDEgJiYgcmV0c2V0WzJdID09IHZhbDIpCisgICAgICAgICAgeworICAgICAgICAgICAgcmV0c2V0WzBdICs9ICh7IGtleSsiICIrc3Via2V5IH0pOworICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gZmFsbHMgZXMgbm9jaCBuaXggaW0gZXJnZWJuaXMtYXJyYXkgbWl0IGRlbiBzZWxiZW4gd2VydGVuIGdhYiwKKyAgICAgICAgLy8gZnVlZ2UgZWluZW4gbmV1ZW4gZWludHJhZyBoaW56dQorICAgICAgICBpZighZG9uZSkKKyAgICAgICAgICByZXQgKz0gKHsgKHsgKHsga2V5KyIgIitzdWJrZXkgfSksIHZhbDEsIHZhbDIgfSkgfSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvLyBlaW56ZWxuZSBXZXJ0ZSBpbSBNYXBwaW5nIGZ1ZXIgUF9ERVRBSUxTIHVuZCBQX1JFQURfREVUQUlMUworICAgICAgZG9uZSA9IDA7CisgICAgICBmb3JlYWNoKG1peGVkIHJldHNldCA6IHJldCkKKyAgICAgIHsKKyAgICAgICAgLy8gZmFsbHMgZXMgc2Nob24gaW0gZXJnZWJuaXMtYXJyYXkgZXR3YXMgbWl0IGRlbSBzZWxiZW4gd2VydCBnaWJ0LAorICAgICAgICAvLyBmdWVnZSBkZW4gaW5kZXggZG9ydCBkYXp1CisgICAgICAgIGlmKHNpemVvZihyZXRzZXQpID09IDIgJiYgcmV0c2V0WzFdID09IGVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgcmV0c2V0WzBdICs9ICh7IGtleSB9KTsKKyAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gZmFsbHMgZXMgbm9jaCBuaXggaW0gZXJnZWJuaXMtYXJyYXkgbWl0IGRlbSBzZWxiZW4gd2VydCBnYWIsCisgICAgICAvLyBmdWVnZSBlaW5lbiBuZXVlbiBlaW50cmFnIGhpbnp1CisgICAgICBpZighZG9uZSkKKyAgICAgICAgcmV0ICs9ICh7ICh7ICh7IGtleSB9KSwgZW50cnkgfSkgfSk7CisgICAgfQorICB9CisgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIva29tbWVudGFyLmMgYi9kL3NlaGVyL2hhZXVzZXIva29tbWVudGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3OWZhNAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9rb21tZW50YXIuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICoga29tbWVudGFyLmMgLS0gRElFIEVyZ2Flbnp1bmcgenVtIEJhdXNwYXJ2ZXJ0cmFnCisgKgorICogKGMpIDE5OTQgQmVsZGluQE1vcmdlbkdyYXVlbgorICoKKyAqICREYXRlOiAxOTk0LzEwLzEzIDE0OjE0OjA2ICQKKyAqICRSZXZpc2lvbjogMS4yICQKKyAqICRMb2c6IGtvbW1lbnRhci5jLHYgJAorICogUmV2aXNpb24gMS4yICAxOTk0LzEwLzEzICAxNDoxNDowNiAgV2FyZ29uCisgKiBJbnMgU2VoZXJ2ZXJ6ZWljaG5pcyB2ZXJsZWd0LCBhbmdlcGFzc3QgdW5kICJyZWluZGVudGVkIi4KKyAqCisgKiBSZXZpc2lvbiAxLjEgIDE5OTQvMTAvMTMgIDE0OjEwOjAyICBXYXJnb24KKyAqIEluaXRpYWwgcmV2aXNpb24KKyAqCisgKi8KKworaW5oZXJpdCAic3RkL3RoaW5nIjsKKworI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxsYW5ndWFnZS5oPgorI2luY2x1ZGUgImhhdXMuaCIKKworY3JlYXRlKCkKK3sKKyAgOjpjcmVhdGUoKTsKKyAgU2V0UHJvcChQX0dFTkRFUixNQUxFKTsKKyAgU2V0UHJvcChQX1NIT1JULCJFaW4gS29tbWVudGFyIik7CisgIFNldFByb3AoUF9XRUlHSFQsIDUwMCk7CisgIFNldFByb3AoUF9WQUxVRSwgMCk7CisgIFNldFByb3AoUF9OQU1FLCJLb21tZW50YXIiKTsKKyAgU2V0UHJvcChQX0xPTkcsCisgICAgICJcbkRpZXMgaXN0IGVpbiBLb21tZW50YXIuIEVyIGJlc3RlaHQgYXVzIDEwMCUtcmVjeWNsZWZhZWhpZ2VtIEFsdHBhcGllciwgdW5kXG4iCisgICAgKyJpc3QgY2hsb3JmcmVpIGdlYmxlaWNodC4gRGFzIFBhcGllciBzY2hlaW50IGR1ZW5uIHp1IHNlaW4uXG4iCisgICAgKyJWaWVsbGVpY2h0IHNvbGx0ZXN0IER1IGlobiBzY2huZWxsIGxlc2VuIVxuXG4iCisgICAgICk7CisKKyAgQWRkSWQoICh7ImtvbW1lbnRhciIsICJrb21tZW50aWVydW5nIn0pKTsKKyAgQWRkQ21kKCJsaWVzIiwibGVzZW4iKTsKK30KKworcmVtKCkKK3sKKyAgY2FsbF9vdXQoInJlbW92ZSIsIDIpOworICB0ZWxsX29iamVjdChlbnZpcm9ubWVudCgpLCAiXG5cbkRlciBLb21tZW50YXIgbG9lc3Qgc2ljaCBpbiBXb2hsZ2VmYWxsZW4gYXVmLlxuXG4iKTsKKyAgcmV0dXJuIDE7Cit9CisKK2xlc2VuKHN0cikKK3sKKyAgc3RyaW5nIGtvbW1lbnQ7CisgIGtvbW1lbnQ9UEFUSCsidHh0L2tvbW1lbnRhci50eHQiOworICBpZiAoIXN0cikgcmV0dXJuIDA7CisgIGlmIChpZChzdHIpKSB7CisgICAgdGhpc19wbGF5ZXIoKS0+TW9yZShrb21tZW50LDEsIydyZW0pOworICAgIHJldHVybiAxOworICAgIH0KKyAgZWxzZSB7CisgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgRHUgbGVzZW4/Pz9cbiIpOworICAgIHJldHVybiAwOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2R1bGVzL2hhdXN0dWVyLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9kdWxlcy9oYXVzdHVlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDg3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9kdWxlcy9oYXVzdHVlci5jCkBAIC0wLDAgKzEsMjE1IEBACisvLyAgaGF1c3R1ZXIuYyAtLSBCZXNjaHJlaWJ1bmcsIE9lZmZuZW4gdW5kIFNjaGxpZXNzZW4KKy8vCisvLyAgKGMpIDE5OTUgV2FyZ29uQE1vcmdlbkdyYXVlbgorLy8KKy8vICRJZDogaGF1c3R1ZXIuYyx2IDEuMS4xLjEgMjAwMC8wOC8yMCAyMDoyMjo0MiBtdWQgRXhwICQKKy8vCisKKyNkZWZpbmUgTkVFRF9QUk9UT1RZUEVTCisjaW5jbHVkZSAiLi4vaGF1cy5oIgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx0aGluZy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8dGhpbmcvZGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDx0aGluZy9jb21tYW5kcy5oPgorCitzdGF0aWMgaW50IHZhbGlkSG91c2UgPSAwOworc3RhdGljIHN0cmluZyBvd25lcjsKKwordm9pZCBjcmVhdGUoKQoreworICBTZXQoIEhfRE9PUiwgIkRpZSBIYXVzdHVlciBpc3QgJXMuXG4iICk7CisgIFNldCggSF9ET09SU1RBVCwgMCk7CisgIFNldCggSF9ET09STFNUQVQsICh7ICJnZW9lZmZuZXQiLCAiZ2VzY2hsb3NzZW4iLCAwLCAiYWJnZXNjaGxvc3NlbiIgfSkpOworCisgIFNldCggSF9ET09SLCBTQVZFLCBGX01PREUpOworICBTZXQoIEhfRE9PUlNUQVQsIFNBVkUsIEZfTU9ERSk7CisgIFNldCggSF9ET09STFNUQVQsIFNBVkUsIEZfTU9ERSk7CisKKyAgQWRkQ21kKCAoeyJzY2hsaWVzcyIsICJzY2hsaWVzc2UifSksICJzY2hsaWVzc2UiKTsKKyAgQWRkQ21kKCJvZWZmbmUiLCJvZWZmbmUiKTsKKworICBvd25lciA9IGdldHVpZCh0aGlzX29iamVjdCgpKTsKK30KKwordmFyYXJncyBzdHJpbmcgbG9uZyhpbnQgbW9kZSkKK3sKKyAgcmV0dXJuIHNwcmludGYoUXVlcnkoSF9ET09SKSwgUXVlcnkoSF9ET09STFNUQVQpW1F1ZXJ5KEhfRE9PUlNUQVQpXSk7Cit9CisKK3N0YXRpYyBzdHJpbmcgU2V0VHVlck93bmVyKHN0cmluZyBvKQoreworICB2YWxpZEhvdXNlPTE7CisgIFNldCggSF9ET09SU1RBVCwgRF9DTE9TRUQgfCBEX0xPQ0tFRCk7CisgIHJldHVybiBvd25lcj1vOworfQorCitpbnQgb2VmZm5lKHN0cmluZyBzdHIpCit7CisgIGludCBkb29yc3RhdDsKKworICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSBvZWZmbmVuP1xuIik7CisgIGRvb3JzdGF0ID0gUXVlcnkoSF9ET09SU1RBVCk7CisKKyAgaWYgKCFpZChzdHIpICYmIHN0ciAhPSAidHVlciIgJiYgc3RyICE9ICJoYXVzdHVlciIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCEoZG9vcnN0YXQgJiBEX0NMT1NFRCkpIHsKKyAgICBub3RpZnlfZmFpbChjYXBpdGFsaXplKG5hbWUoV0VSLDEpKSsiIGlzdCBnYXIgbmljaHQgZ2VzY2hsb3NzZW4hXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoZG9vcnN0YXQgJiBEX0xPQ0tFRCkgeworICAgIG5vdGlmeV9mYWlsKGNhcGl0YWxpemUobmFtZShXRVIsMSkpKyIgaXN0IGFiZ2VzY2hsb3NzZW4uXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGRvb3JzdGF0ICY9IH5EX0NMT1NFRDsKKyAgU2V0KEhfRE9PUlNUQVQsIGRvb3JzdGF0ICYgfkRfQ0xPU0VEKTsKKworICB3cml0ZSgiRHUgb2VmZm5lc3QgIituYW1lKFdFTiwxKSsiIHZvbiAiK2NhcGl0YWxpemUob3duZXIpKyIuXG4iKTsKKyAgdGVsbF9yb29tKGVudmlyb25tZW50KHRoaXNfb2JqZWN0KCkpLAorCSAgICBzcHJpbnRmKCIlcyBvZWZmbmV0ICVzIHZvbiAlcy5cbiIsCisJCSAgICB0aGlzX3BsYXllcigpLT5uYW1lKFdFUiksCisJCSAgICBuYW1lKFdFTiwxKSwKKwkJICAgIGNhcGl0YWxpemUob3duZXIpICksCisJICAgICh7dGhpc19wbGF5ZXIoKX0pKTsKKyAgaWYgKHZhbGlkSG91c2UpIHsKKyAgICB0ZWxsX3Jvb20oZmluZF9vYmplY3QoUkFVTU5BTUUob3duZXIsMCkpfHx0aGlzX29iamVjdCgpLAorCSAgICAgIHRoaXNfcGxheWVyKCktPm5hbWUoV0VSKSsiIG9lZmZuZXQgIituYW1lKFdFTikrIi5cbiIsCisJICAgICAgKHt0aGlzX3BsYXllcigpfSkpOworICAgIFNhdmUoKTsKKyAgfQorICByZXR1cm4gMTsKK30KKworcHJpdmF0ZSBpbnQgY2xvc2VfZG9vcigpCit7CisgIGlmIChRdWVyeShIX0RPT1JTVEFUKSAmIERfQ0xPU0VEKSB7CisgICAgbm90aWZ5X2ZhaWwoY2FwaXRhbGl6ZShuYW1lKFdFUiwxKSkrIiBpc3QgZG9jaCBzY2hvbiB6dSFcbiIpOworICAgIHJldHVybiAwOworICB9CisgIFNldChIX0RPT1JTVEFULCBRdWVyeShIX0RPT1JTVEFUKSB8IERfQ0xPU0VEKTsKKworICB3cml0ZSgiRHUgc2NobGllc3N0ICIrbmFtZShXRU4sMSkrIiB2b24gIitjYXBpdGFsaXplKG93bmVyKSsiLlxuIik7CisgIHRlbGxfcm9vbShlbnZpcm9ubWVudCh0aGlzX29iamVjdCgpKSwKKwkgICAgc3ByaW50ZiggIiVzIHNjaGxpZXNzdCAlcyB2b24gJXMuXG4iLAorCQkgICAgIGNhcGl0YWxpemUodGhpc19wbGF5ZXIoKS0+bmFtZShXRVIpKSwKKwkJICAgICBuYW1lKFdFTiwxKSwgY2FwaXRhbGl6ZShvd25lcikpLAorCSAgICAoe3RoaXNfcGxheWVyKCl9KSk7CisgIGlmICh2YWxpZEhvdXNlKSB7CisgICAgdGVsbF9yb29tKGZpbmRfb2JqZWN0KFJBVU1OQU1FKG93bmVyLDApKXx8dGhpc19vYmplY3QoKSwKKwkgICAgICBjYXBpdGFsaXplKHRoaXNfcGxheWVyKCktPm5hbWUoV0VSKSkrIiBzY2hsaWVzc3QgIituYW1lKFdFTikrIi5cbiIsCisJICAgICAgKHt0aGlzX3BsYXllcigpfSkpOworICAgIFNhdmUoKTsKKyAgfQorICByZXR1cm4gMTsKK30KKworcHJpdmF0ZSBpbnQgbG9ja19kb29yKCkKK3sKKyAgb2JqZWN0IHRwLCBob21lOworICBzdHJpbmcgbmFtOworICBpbnQgZG9vcnN0YXQ7CisKKyAgdHAgPSB0aGlzX3BsYXllcigpOworICBuYW0gPSBjYXBpdGFsaXplKHRwLT5uYW1lKFdFUikpOworCisgIGlmICh2YWxpZEhvdXNlKSB7CisgICAgY2FsbF9vdGhlcihSQVVNTkFNRShvd25lciwwKSwgIj8/PyIpOworICAgIGhvbWUgPSBmaW5kX29iamVjdChSQVVNTkFNRShvd25lciwwKSk7CisKKyAgICBpZiAoIWhvbWUtPmFsbG93ZWRfY2hlY2sodGhpc19wbGF5ZXIoKSkpIHsKKyAgICAgIG5vdGlmeV9mYWlsKCJEdSBkYXJmc3QgIituYW1lKFdFTiwxKSsiIHZvbiAiK2NhcGl0YWxpemUob3duZXIpKyIgYWJlciBuaWNodCBhYnNjaGxpZXNzZW4uXG4iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICBpZiAoKGRvb3JzdGF0ID0gUXVlcnkoSF9ET09SU1RBVCkpICYgRF9MT0NLRUQpIHsKKyAgICBub3RpZnlfZmFpbCgiRGllIFR1ZXIgaXN0IGFiZ2VzY2hsb3NzZW4uXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBkb29yc3RhdCB8PSAoRF9MT0NLRUR8RF9DTE9TRUQpOworICB3cml0ZSgiRHUgc2NobGllc3N0ICIrbmFtZShXRU4pKyIgYWIuXG4iKTsKKyAgU2V0KEhfRE9PUlNUQVQsIGRvb3JzdGF0KTsKKyAgdGVsbF9yb29tKGVudmlyb25tZW50KHRoaXNfb2JqZWN0KCkpLAorCSAgICBzcHJpbnRmKCAiJXMgc2NobGllc3N0ICVzIGFiLlxuIiwKKwkJICAgIG5hbSwKKwkJICAgIChnZXR1aWQodHApPT1vd25lciA/CisJCSAgICAgKHRwLT5RdWVyeVBvc3NQcm9ub3VuKHRoaXNfb2JqZWN0KCksIFdFTikrIiAiK25hbWUoUkFXKSkgOgorCQkgICAgIG5hbWUoV0VOLDEpICkpLAorCSAgICAoe3RwfSkpOworICBpZiAodmFsaWRIb3VzZSkgeworICAgIHRlbGxfcm9vbShob21lLCBuYW0rIiBzY2hsaWVzc3QgIituYW1lKFdFTikrIiBhYi5cbiIsKHt0cH0pKTsKKyAgICBTYXZlKCk7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3ByaXZhdGUgaW50IHVubG9ja19kb29yKCkKK3sKKyAgb2JqZWN0IHRwLCBob21lOworICBzdHJpbmcgbmFtOworICBpbnQgZG9vcnN0YXQ7CisKKyAgdHAgPSB0aGlzX3BsYXllcigpOworICBuYW0gPSBjYXBpdGFsaXplKHRwLT5uYW1lKFdFUikpOworCisgIGlmICh2YWxpZEhvdXNlKSB7CisgICAgY2FsbF9vdGhlcihSQVVNTkFNRShvd25lciwwKSwgIj8/PyIpOworICAgIGhvbWUgPSBmaW5kX29iamVjdChSQVVNTkFNRShvd25lciwwKSk7CisKKyAgICBpZiAoIWhvbWUtPmFsbG93ZWRfY2hlY2sodGhpc19wbGF5ZXIoKSkpIHsKKyAgICAgIG5vdGlmeV9mYWlsKCJEdSBkYXJmc3QgIituYW1lKFdFTiwxKSsiIHZvbiAiK2NhcGl0YWxpemUob3duZXIpKyIgYWJlciBuaWNodCBhdWZzY2hsaWVzc2VuLlxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKworICBpZiAoISgoZG9vcnN0YXQgPSBRdWVyeShIX0RPT1JTVEFUKSkgJiBEX0xPQ0tFRCkpIHsKKyAgICBub3RpZnlfZmFpbCgiRGllIFR1ZXIgaXN0IG5pY2h0IGFiZ2VzY2hsb3NzZW4uXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIFNldChIX0RPT1JTVEFULCBkb29yc3RhdCAmIH5EX0xPQ0tFRCk7CisgIHdyaXRlKCJEdSBzY2hsaWVzc3QgIituYW1lKFdFTikrIiBhdWYuXG4iKTsKKyAgdGVsbF9yb29tKGVudmlyb25tZW50KHRoaXNfb2JqZWN0KCkpLAorCSAgICBzcHJpbnRmKCIlcyBzY2hsaWVzc3QgJXMgYXVmLlxuIiwKKwkJICAgICBuYW0sCisJCSAgICAgKGdldHVpZCh0cCk9PW93bmVyID8KKwkJICAgICAgKHRwLT5RdWVyeVBvc3NQcm9ub3VuKHRoaXNfb2JqZWN0KCksIFdFTikrIiAiK25hbWUoUkFXKSkgOgorCQkgICAgICBuYW1lKFdFTiwxKSApKSwKKwkgICAgKHt0cH0pKTsKKyAgaWYodmFsaWRIb3VzZSkgeworICAgIHRlbGxfcm9vbShob21lLG5hbSsiIHNjaGxpZXNzdCAiK25hbWUoV0VOKSsiIGF1Zi5cbiIsKHt0cH0pKTsKKyAgICBTYXZlKCk7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludCBzY2hsaWVzc2Uoc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIHdhcywgd2VuLCAqczsKKworICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSBzY2hsaWVzc2VuID9cbiIpOworICBpZiAoIXN0cnx8c3RyPT0iIikKKyAgICByZXR1cm4gMDsKKyAgcyA9IG9sZF9leHBsb2RlKHN0ciwgIiAiKTsKKyAgaWYgKCh3YXMgPSBzWzwxXSkgPT0gImF1ZiIgfHwgd2FzID09ICJhYiIpCisgICAgcyA9IHNbMC4uPDJdOworICBlbHNlCisgICAgd2FzID0gMDsKKworICB3ZW49aW1wbG9kZShzLCAiICIpOworICBpZiAoIWlkKHdlbikgJiYgd2VuICE9ICJ0dWVyIiAmJiB3ZW4gIT0gImhhdXN0dWVyIikKKyAgICByZXR1cm4gMDsKKyAgaWYgKCF3YXMgfHwgd2FzPT0iIikKKyAgICByZXR1cm4gY2xvc2VfZG9vcigpOworICBzd2l0Y2ggKHdhcykKKyAgeworICAgIGNhc2UgImF1ZiI6IHJldHVybiB1bmxvY2tfZG9vcigpOworICAgIGNhc2UgImFiIjogIHJldHVybiBsb2NrX2Rvb3IoKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLy8gJExvZzogaGF1c3R1ZXIuYyx2ICQKKy8vIFJldmlzaW9uIDEuMS4xLjEgIDIwMDAvMDgvMjAgMjA6MjI6NDIgIG11ZAorLy8gSW5zIENWUyBlaW5nZWNoZWNrdAorLy8KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2R1bGVzL2xvc2EuYyBiL2Qvc2VoZXIvaGFldXNlci9tb2R1bGVzL2xvc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTNjYTUxCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZHVsZXMvbG9zYS5jCkBAIC0wLDAgKzEsMzc4IEBACisvLyAgbG9zYS5jIC0tIE1vZHVsIGZ1ZXIgTGFkZW4gdW5kIFNwZWljaGVybiBkZXIgSGF1c2RhdGVuCisvLworLy8gIChjKSAxOTk1IFdhcmdvbkBNb3JnZW5HcmF1ZW4KKy8vICAgICAgMjAwNiBWYW5pb25ATW9yZ2VuR3JhdWVuLCBmdWVyIGRpZSByZWJvb3RmZXN0ZW4gTW9lYmVsCisvLyAkSWQ6IGxvc2EuYyx2IDEuMS4xLjEgMjAwMC8wOC8yMCAyMDoyMjo0MiBtdWQgRXhwICQKKy8vCisjcHJhZ21hIHN0cm9uZ190eXBlcyxydHRfY2hlY2tzCisKKyNkZWZpbmUgTkVFRF9QUk9UT1RZUEVTCisjaW5jbHVkZSAiLi4vaGF1cy5oIgorI2luY2x1ZGUgPGNvbnRhaW5lci5oPgorI2luY2x1ZGUgPHRoaW5nL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxyb29tL2V4aXRzLmg+CisjaW5jbHVkZSA8dGhpbmcvZGVzY3JpcHRpb24uaD4KKyN1bmRlZiBORUVEX1BST1RPVFlQRVMKKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8d2l6bGV2ZWxzLmg+CisjaW5jbHVkZSA8bW92aW5nLmg+CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3JlbG9hZF9mdXJuaXR1cmUoKTsKKworcHJpdmF0ZSBpbnQgY3NhdmVkOworCisvLyBWYXJpYWJsZW4genVyIFZlcndhbHR1bmcgZGVyIE1vZWJlbCBpbSBSYXVtLgorbWFwcGluZyBmdXJuaXR1cmU7CittYXBwaW5nIGJyb2tlbl9mdXJuaXR1cmU7CisKK3Byb3RlY3RlZCB2b2lkCitjcmVhdGUoKQoreworICBTZXQoSF9DSEVTVCwgU0FWRSwgRl9NT0RFKTsKKyAgU2V0KEhfQ0hFU1QsIDApOworCisgIFNldChIX0ZVUk5JVFVSRSwgU0FWRSwgRl9NT0RFKTsKKyAgU2V0KEhfRlVSTklUVVJFLCAwKTsKKworLy8gIFNldChIX1NQRUNJQUwsIFNBVkV8U0VDVVJFRCwgRl9NT0RFKTsKKy8vICBTZXQoSF9TUEVDSUFMLCAoWzoyXSksIEZfVkFMVUUpOworfQorCisvKiBTY2hlaW50IG5pcmdlbmR3byBiZW51dHp0IHp1IHdlcmRlbi4uLgordmFyYXJncyBpbnQgQWRkU3BlY2lhbChpbnQgdHlwLCBzdHJpbmcga2V5LCBzdHJpbmcgZXh0cmEpCit7CisgIGlmICghdGhpc19pbnRlcmFjdGl2ZSgpIHx8ICFJU19BUkNIKHRoaXNfaW50ZXJhY3RpdmUoKSkgfHwKKyAgICAgICEoUEFUSCsiYWNjZXNzX3JpZ2h0cyIpLT5hY2Nlc3NfcmlnaHRzKGdldGV1aWQodGhpc19pbnRlcmFjdGl2ZSgpKSwiIikpCisgICAgcmV0dXJuIC0xOworCisgIGlmICh0eXAgIT0gSFNfRVhJVCAmJiB0eXAgIT0gSFNfSVRFTSkKKyAgICByZXR1cm4gMDsKKworICBTZXQoSF9TUEVDSUFMLCBRdWVyeShIX1NQRUNJQUwpICsgKFsga2V5IDogdHlwOyBleHRyYSBdKSk7CisgIFNhdmUoKTsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUmVtb3ZlU3BlY2lhbChzdHJpbmcga2V5KQoreworICBpZiAoIXRoaXNfaW50ZXJhY3RpdmUoKSB8fCAhSVNfQVJDSCh0aGlzX2ludGVyYWN0aXZlKCkpIHx8CisgICAgICAhKFBBVEgrImFjY2Vzc19yaWdodHMiKS0+YWNjZXNzX3JpZ2h0cyhnZXRldWlkKHRoaXNfaW50ZXJhY3RpdmUoKSksIiIpKQorICAgIHJldHVybjsKKworICBTZXQoSF9TUEVDSUFMLCBtX2RlbGV0ZShRdWVyeShIX1NQRUNJQUwpLCBrZXkpKTsKKyAgU2F2ZSgpOworfQorKi8KKwordm9pZAorcmVzZXQoKQoreworICBpZiAoUXVlcnlPd25lcigpICYmCisgICAgICAhc2l6ZW9mKGZpbHRlcihhbGxfaW52ZW50b3J5KCksIydpbnRlcmFjdGl2ZSkpICYmCisgICAgICAhY3NhdmVkKQorICAgIFNhdmUoMSk7Cit9CisKKy8vIGNydW5jaGVkIGtvbXByaW1pZXJ0IGRhcyBTYXZlZmlsZQordmFyYXJncyB2b2lkCitTYXZlKGludCBjcnVuY2hlZCkKK3sKKyAgbWl4ZWQgbzEsIG8yLCBvMzsKKyAgY2xvc3VyZSBwYzsKKyAgb2JqZWN0ICpvYnM7CisgIGludCBpLCBmb3VuZDsKKworICBvMyA9IDA7CisKKyAgaWYgKCEobzEgPSBRdWVyeShQX0RFVEFJTFMpKSkKKyAgICBTZXQoUF9ERVRBSUxTLCBRdWVyeVByb3AoUF9ERVRBSUxTKSwgRl9WQUxVRSk7CisKKyAgaWYgKCEobzIgPSBRdWVyeShQX1JFQURfREVUQUlMUykpKQorICAgIFNldChQX1JFQURfREVUQUlMUywgUXVlcnlQcm9wKFBfUkVBRF9ERVRBSUxTKSwgRl9WQUxVRSk7CisKKyAgaWYgKGNzYXZlZCA9IGNydW5jaGVkKQorICB7CisgICAgcGMgPSBzeW1ib2xfZnVuY3Rpb24oIlBDcnVuY2giLCBWRVJXQUxURVIpOworICAgIFNldChQX0RFVEFJTFMsIGZ1bmNhbGwocGMsIFF1ZXJ5KFBfREVUQUlMUykpLCBGX1ZBTFVFKTsKKyAgICBTZXQoUF9SRUFEX0RFVEFJTFMsIGZ1bmNhbGwocGMsIFF1ZXJ5KFBfUkVBRF9ERVRBSUxTKSksIEZfVkFMVUUpOworICAgIG8zID0gUXVlcnkoSF9DT01NQU5EUywgRl9WQUxVRSk7CisgICAgU2V0KEhfQ09NTUFORFMsIGZ1bmNhbGwocGMsIG8zKSwgRl9WQUxVRSk7CisgIH0KKworICAvLyBBdXRvbG9hZC1FaW5yaWNodHVuZyBpZGVudGlmaXppZXJlbiB1bmQgc3BlaWNoZXJuCisgIC8vIENvZGUgaW4gQW5sZWhudW5nIGFuIGRlbSBBdXRvbG9hZC1NZWNoYW5pc211cyBmdWVyIFNwaWVsZXIKKyAgZnVybml0dXJlPShbXSk7CisKKyAgLy8gQWxsZSBBdXRvbG9hZGVyIGZpbHRlcm4KKyAgb2JzPWZpbHRlcl9vYmplY3RzKGFsbF9pbnZlbnRvcnkodGhpc19vYmplY3QoKSksICJRdWVyeVByb3AiLCBIX0ZVUk5JVFVSRSk7CisgIGZvdW5kID0gMDsKKworICAvLyBVZWJlciBhbGxlIE1vZWJlbCBpdGVyaXRpZXJlbgorICBmb3IoIGk9c2l6ZW9mKG9icyktMTtpPj0wO2ktLSkKKyAgeworICAgIGlmKCBjbG9uZXAob2JzW2ldKSkKKyAgICB7CisgICAgICBpZiAoICsrZm91bmQgPD0gTUFYX0ZVUk5JVFVSRV9QRVJfUk9PTSApCisgICAgICAgIGZ1cm5pdHVyZSArPSAoWyBvYmplY3RfbmFtZShvYnNbaV0pOm9ic1tpXS0+UXVlcnlQcm9wKEhfRlVSTklUVVJFKSBdKTsKKyAgICB9CisgIH0KKyAgaWYgKGZvdW5kID4gTUFYX0ZVUk5JVFVSRV9QRVJfUk9PTSkKKyAgeworICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksIAorICAgICAgYnJlYWtfc3RyaW5nKCJEdSBoYXN0ICIrZm91bmQrIiBNb2ViZWxzdHVlY2tlIGltIFJhdW0gc3RlaGVuLiAiCisgICAgICAgICAgICAgICAgICAgIkdlc3BlaWNoZXJ0IHdlcmRlbiBudXIgIitNQVhfRlVSTklUVVJFX1BFUl9ST09NKyIuICIKKyAgICAgICAgICAgICAgICAgICAiRHUgc29sbHRlc3QgRGljaCB2b24gZWluaWdlbiBFaW5yaWNodHVuZ3NnZWdlbnN0YWVuZGVuICIKKyAgICAgICAgICAgICAgICAgICAidHJlbm5lbi4iLDc4KSk7CisKKyAgfQorICBIREVCVUcoIlNhdmluZyAiKyBzaXplb2YgKGZ1cm5pdHVyZSkgKyIgKHBsdXMgIitzaXplb2YoYnJva2VuX2Z1cm5pdHVyZSkrCisgICAgICAgICAiIGJyb2tlbikgb2JqZWN0cyBpbiByb29tICIrCisgICAgICAgICBvYmplY3RfbmFtZSh0aGlzX29iamVjdCgpKSArICIuIik7CisKKyAgc2F2ZV9vYmplY3QoIEhBVVNTQVZFUEFUSCtRdWVyeU93bmVyKDEpKTsKKworICBTZXQoUF9ERVRBSUxTLCBvMSwgRl9WQUxVRSk7CisgIFNldChQX1JFQURfREVUQUlMUywgbzIsIEZfVkFMVUUpOworICBpZiAobzMpCisgICAgU2V0KEhfQ09NTUFORFMsIG8zLCBGX1ZBTFVFKTsKK30KKwordm9pZAorTG9hZCgpCit7CisgIG1peGVkIHByb3A7CisgIGludCBpOworCisgIHJlc3RvcmVfb2JqZWN0KCBIQVVTU0FWRVBBVEgrUXVlcnlPd25lcigxKSk7CisKKyAgLy8gRGV0YWlscyB1bmQgS29tbWFuZG9zIHdlcmRlbiBiZWltIFNwZWljaGVybiBkZS1kdXBsaXppZXJ0IHVuZCBpbiBlaW5lbQorICAvLyBzcGV6aWVsbGVuIEZvcm1hdCBhYmdlc3BlaWNoZXJ0IChzLiBQQ3J1bmNoKCkgaW0gSGF1c3ZlcndhbHRlcikuIFNpZQorICAvLyBtdWVzc2VuIG5hY2ggZGVtIExhZGVuIGR1cmNoIGRpZSBlbnRzcHJlY2hlbmRlbiBBZGQuLi4oKS1BdWZydWZlCisgIC8vIHdpZWRlciBlaW5nZXRyYWdlbiB3ZXJkZW4uCisgIHByb3A9UXVlcnkoUF9ERVRBSUxTLCBGX1ZBTFVFKTsKKyAgUmVtb3ZlRGV0YWlsKDApOworICBpZiAocG9pbnRlcnAocHJvcCkpCisgIHsKKyAgICBmb3JlYWNoKDxzdHJpbmcqfHN0cmluZz4qIGl0ZW0gOiBwcm9wKQorICAgICAgQWRkRGV0YWlsKGl0ZW1bMF0sIGl0ZW1bMV0pOworICB9CisgIGVsc2UgaWYgKG1hcHBpbmdwKHByb3ApKQorICB7CisgICAgZm9yZWFjaChzdHJpbmcga2V5LCBtaXhlZCB2YWwgOiBwcm9wKQorICAgICAgQWRkRGV0YWlsKGtleSwgdmFsKTsKKyAgfQorICBlbHNlCisgICAgU2V0UHJvcChQX0RFVEFJTFMsIHByb3ApOworCisgIHByb3AgPSBRdWVyeShQX1JFQURfREVUQUlMUywgRl9WQUxVRSk7CisgIFJlbW92ZVJlYWREZXRhaWwoMCk7CisgIGlmIChwb2ludGVycChwcm9wKSkKKyAgeworICAgIGZvcmVhY2goPHN0cmluZyp8c3RyaW5nPiogaXRlbSA6IHByb3ApCisgICAgICBBZGREZXRhaWwoaXRlbVswXSwgaXRlbVsxXSk7CisgIH0KKyAgZWxzZSBpZiAobWFwcGluZ3AocHJvcCkpCisgIHsKKyAgICBmb3JlYWNoKHN0cmluZyBrZXksIG1peGVkIHZhbCA6IHByb3ApCisgICAgICBBZGRSZWFkRGV0YWlsKGtleSwgdmFsKTsKKyAgfQorICBlbHNlCisgICAgU2V0UHJvcChQX1JFQURfREVUQUlMUywgcHJvcCk7CisKKyAgcHJvcCA9IFF1ZXJ5KFBfRVhJVFMsIEZfVkFMVUUpOworICBSZW1vdmVFeGl0Tm9DaGVjaygwKTsKKyAgaWYgKG1hcHBpbmdwKHByb3ApKQorICB7CisgICAgaWYgKHdpZHRob2YocHJvcCkgPD0gMSkKKyAgICB7CisgICAgICBmb3JlYWNoKHN0cmluZyBrZXksIHN0cmluZyBkZXN0IDogcHJvcCkKKyAgICAgICAgQWRkRXhpdE5vQ2hlY2soa2V5LCBkZXN0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGZvcmVhY2goc3RyaW5nIGtleSwgc3RyaW5nIGRlc3QsIHN0cmluZyBtc2cgOiBwcm9wKQorICAgICAgeworICAgICAgICBpZiAoc3RyaW5ncChtc2cpKQorICAgICAgICAgIF9BZGRFeGl0KGtleSwgZGVzdCwgbXNnKTsKKyAgICAgICAgZWxzZSBpZiAoc3RyaW5ncChkZXN0KSAmJiBzdHJzdHIoZGVzdCwiIyIpICE9IC0xKQorICAgICAgICAgIEFkZEV4aXROb0NoZWNrKGtleSwgZGVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBfQWRkRXhpdChrZXksIGRlc3QsIDApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHByb3A9UXVlcnkoSF9DT01NQU5EUywgRl9WQUxVRSk7CisgIGlmIChwb2ludGVycChwcm9wKSkKKyAgeworICAgIFNldChIX0NPTU1BTkRTLCAoW10pLCBGX1ZBTFVFKTsKKyAgICBmb3IgKGk9c2l6ZW9mKHByb3ApLTE7IGk+PTA7IGktLSkKKyAgICAgIHRoaXNfb2JqZWN0KCktPkFkZFVzZXJDbWQocHJvcFtpXVswXSwgMCwgcHJvcFtpXVsxXSwgcHJvcFtpXVsyXSk7CisgIH0KKworICBpZiAoZW52aXJvbm1lbnQoKSkKKyAgICBlbnZpcm9ubWVudCgpLT5TZXRQcm9wKFBfTkVWRVJfQ0xFQU4sIDEpOworCisgIGlmIChwcmV2aW91c19vYmplY3QoKSAmJiBvYmplY3RfbmFtZShwcmV2aW91c19vYmplY3QoKSk9PVZFUldBTFRFUikKKyAgeworICAgIGlmIChRdWVyeShIX0NIRVNUKSkKKyAgICAgIHRoaXNfb2JqZWN0KCktPkFkZEl0ZW0oUEFUSCsidHJ1aGUiLFJFRlJFU0hfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFsgIm93bmVyIiA6IFF1ZXJ5T3duZXIoKSBdKSk7CisvKiBEYXMgc2NoZWludCBuaXJnZW5kd28gYmVudXR6dCB6dSB3ZXJkZW4gdW5kIGluIGFsbGVuIFNlaGVyaGFldXNlcm4gbGVlciB6dQorICogc2Vpbi4KKyAgICBtYXBwaW5nIHNwZWNpYWwgPSBRdWVyeShIX1NQRUNJQUwsIEZfVkFMVUUpOworICAgIGlmIChzcGVjaWFsKQorICAgIHsKKyAgICAgIGZvcmVhY2goc3RyaW5nIGtleSwgaW50IHR5cGUsIHN0cmluZyBleHRyYSA6IHNwZWNpYWwpCisgICAgICB7CisgICAgICAgIHN3aXRjaCh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBIU19JVEVNOgorICAgICAgICAgICAgQWRkSXRlbShTUEVDSUFMUEFUSCArIGV4dHJhLCBSRUZSRVNIX0RFU1RSVUNUKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgSFNfRVhJVDoKKyAgICAgICAgICAgIEFkZEV4aXROb0NoZWNrKGtleSwgZXh0cmEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisqLworICB9CisKKyAgLy8gRGFzIExhZGVuIGRlciBBdXRvbG9hZGVyIHdpcmQgZXJzdCBhbSBFbmRlIGFuZ2VzdG9zc2VuLiAKKyAgLy8gRGFubiBpc3QgZXMgbmljaHQgc2NobGltbSwgd2VubiBhbGxlIEV2YWwgVGlja3MgdmVyYnJhdWNodCB3ZXJkZW4uCisgIHN0YXJ0X3JlbG9hZF9mdXJuaXR1cmUoKTsKK30KKworLy8gTWVocmVyZSBTYXZlLUFuZm9yZGVydW5nZW4genVzYW1tZW5mYXNzZW4uCitzdGF0aWMgdm9pZCBxdWV1ZWRfc2F2ZSgpCit7CisgICAgICAgIEhERUJVRygiUVMiKTsKKyAgICAgICAgd2hpbGUgKHJlbW92ZV9jYWxsX291dCgiU2F2ZSIpIT0tMSk7CisgICAgICAgIGNhbGxfb3V0KCJTYXZlIiwzKTsKK30KKworc3RhdGljIGludCByZWxvYWRfZXJyb3Ioc3RyaW5nIGZpbGUsIG1peGVkIGRhdGEsICBzdHJpbmcgbWVzc2FnZSkKK3sKKyAgICAgICAgSERFQlVHKG1lc3NhZ2UpOworICAgICAgICBicm9rZW5fZnVybml0dXJlKz0oW2ZpbGU6ZGF0YV0pOworICAgICAgICBsb2dfZmlsZSgic2VoZXIvaGFldXNlci9hdXRvbG9hZGVyX2Vycm9yIiwKKyAgICAgICAgICAgICAgICAgZHRpbWUodGltZSgpKSsiXG4iKworICAgICAgICAgICAgICAgICBicmVha19zdHJpbmcob2JqZWN0X25hbWUodGhpc19vYmplY3QoKSkrIiAoIitRdWVyeU93bmVyKDEpKyIpIiw3OCwgIiBGSUxFOiAiLDEpKworICAgICAgICAgICAgICAgICBicmVha19zdHJpbmcobWVzc2FnZSwgNzgsICIgTVNHOiAgIiwxKSsKKyAgICAgICAgICAgICAgICAgYnJlYWtfc3RyaW5nKHNwcmludGYoIiVPIiwgZGF0YSksNzgsICIgREFUQTogIiwxKSsiXG4iKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgIHJldHVybiAwOyAvLyAwIGZ1ZXIgZGFzIGZpbHRlciwgZGFtaXQgZGllc2VyIEVpbnRyYWcgCisgICAgICAgICAgICAgICAgICAvLyBhdXMgZnVybml0dXJlIGdlbG9lc2NodCB3aXJkLgorfQorCisvLyBMYWVkdCBlaW4gZWluemVsbmVzIE1vZWJlbHN0dWVja3MKK3N0YXRpYyBpbnQgbG9hZF9mdXJuaXR1cmVfb2JqZWN0KCBzdHJpbmcgZmlsZSwgbWl4ZWQgZGF0YSApCit7CisgICAgb2JqZWN0IG9iOworICAgIHN0cmluZyBlcnJvcjsKKyAgICBzdHJpbmcgYmx1ZXByaW50OworICAgIGNsb3N1cmUgcGM7CisgICAgLy8gbWl4ZWQgZGF0YTsKKyAgICAKKyAgICAvLyBXZW5uIGdlbnVnIFRpY2tzIGZyZWkgc2luZCwgd2lyZCB2ZXJzdWNodCwgZGFzIE9iamVrdCB6dSBlcnpldWdlbi4KKyAgICAvLyBBbnNvbnN0ZW4gaXN0IGRpZSBHZWZhaHIgenUgZ3Jvc3MsIGRhc3MgZWluIEVyemV1Z3VuZ3MtUHJvemVzcyBhYmJyaWNodC4KKyAgICBpZiAoZ2V0X2V2YWxfY29zdCgpIDwgNTAwMDAwKSAKKyAgICB7CisgICAgICAvLyBIREVCVUcoIlN1c3BlbmRpbmcgT2JqZWN0OiAiK2ZpbGUrIi4gT25seSAiK3RvX3N0cmluZyhnZXRfZXZhbF9jb3N0KCkpKyIgdGlja3MgbGVmdC4iKTsKKyAgICAgIHJldHVybiAxOyAvLyAxIGJlZGV1dGV0LCBkYXNzIGRpZXNlciBFaW50cmFnIGVzIGltIE1hcHBpbmcgYmxlaWJ0LgorICAgIH0KKworICAgIC8vIEhERUJVRygiUHJvY2Vzc2luZyBPYmplY3Q6ICIrZmlsZSsiIHdpdGggRGF0YTogIitzcHJpbnRmKCIlTyIsZGF0YSkrIi4iKTsKKyAgICAKKyAgICAvLyBOdW1tZXJuIGRlciBDbG9uZXMgc2luZCBiZWltIFNwZWljaGVybiBub2V0aWcsIHVtIGRpZSBJZGVudGl0YWV0ZW4KKyAgICAvLyBkZXIgT2JqZWt0ZSB6dSBiZXN0aW1tZW4gKG1laHJlcmUgT2JqZWt0ZSB2b20gZ2xlaWNoZW4gQmx1ZXByaW50IAorICAgIC8vIHNwZWljaGVybikuIEhpZXIgYnJhdWNodCBtYW4gc2llIG5pY2h0IG1laHIgCisgICAgICAgICAgICAKKyAgICBibHVlcHJpbnQgPSBleHBsb2RlKGZpbGUsIiMiKVswXTsKKyAgICAKKyAgICAvLyBEYXRhIGF1cyBkZW0gTWFwcGluZyBob2xlbgorICAgIC8vIGRhdGE9ZnVybml0dXJlW2ZpbGVdOworICAgIAorICAgIC8vIE11c3MgaWNoIGRpZSBCbHVlcHJpbnQgc3VjaGVuPworICAgIG9iID0gZmluZF9vYmplY3QoZmlsZSk7CisgICAgCisgICAgLy8gTmVpbi4KKyAgICBpZiAoIW9iKQorICAgIHsKKyAgICAgICAgICAgIC8vIEV4aXN0aWVydCBkaWUgQlAgb2RlciBlaW4gVkMgZnVlcnMgRmlsZT8KKyAgICAgICAgaWYgKGZpbGVfc2l6ZShibHVlcHJpbnQrIi5jIik8MCYmCisgICAgICAgICAgIGZpbGVfc2l6ZShpbXBsb2RlKGV4cGxvZGUoYmx1ZXByaW50LCIvIilbMC4uPDJdLCIvIikrCisgICAgICAgICAgICAgICAgICAgICAiL3ZpcnR1YWxfY29tcGlsZXIuYyIpPDApCisgICAgICAgIHsKKyAgICAgICAgICAgcmV0dXJuIHJlbG9hZF9lcnJvcihmaWxlLCBkYXRhLCAiRXJyb3IgaW4gZmlsZTogIisgZmlsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4gRmlsZSBkb2VzIG5vdCBleGlzdC4iKTsKKworICAgICAgICB9CisKKyAgICAgICAgLy8gRmlsZSBnZWZ1bmRlbi4gVmVyc3VjaCwgZXMgenUgbGFkZW4uCisgICAgICAgIGlmIChlcnJvciA9IGNhdGNoKGNhbGxfb3RoZXIoIGJsdWVwcmludCwiPz8/IikpKQorICAgICAgICB7CisgICAgICAgICAgIHJldHVybiByZWxvYWRfZXJyb3IoZmlsZSwgZGF0YSwgIkVycm9yIGxvYWRpbmcgZmlsZTogIitmaWxlKyIuICIrZXJyb3IpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIENsb25lIGVyemV1Z2VuCisgICAgaWYgKCBlcnJvciA9IGNhdGNoKG9iID0gY2xvbmVfb2JqZWN0KGJsdWVwcmludCkpICkKKyAgICB7CisgICAgICAgIHJldHVybiByZWxvYWRfZXJyb3IoZmlsZSwgZGF0YSwgIkVycm9yIGNsb25pbmcgb2JqZWN0OiAiK2ZpbGUrIi4gIitlcnJvcik7CisgICAgfQorIAorICAgIEhERUJVRyhzcHJpbnRmKCIlTyIsZnVybml0dXJlKSk7CisgICAgLy8gQXV0b2xvYWQtRGF0ZW4gc2V0emVuCisgICAgSERFQlVHKG9iamVjdF9uYW1lKG9iKSsiLT5TZXRQcm9wKCIrc3ByaW50ZigiJU8iLCBkYXRhKSsiKSIpOworICAgIGlmIChvYikKKyAgICAgICAgY2F0Y2gob2ItPlNldFByb3AoIEhfRlVSTklUVVJFLCBkYXRhICkpOworICAgICAgICAgICAKKyAgICAvLyBGdXJuaXR1cmUgaW4gZGFzIFNlaGVyaGF1cyBtb3ZlbgorICAgIGlmICggZXJyb3IgPSBjYXRjaChvYi0+bW92ZSggdGhpc19vYmplY3QoKSwgTV9OT0NIRUNLICkpICkgeworICAgICAgICBvYi0+cmVtb3ZlKCk7CisgICAgICAgIGlmKG9iKSBkZXN0cnVjdChvYik7CisgICAgICAgIHJldHVybiByZWxvYWRfZXJyb3IoZmlsZSwgZGF0YSwgIkVycm9yIG1vdmluZyBvYmplY3Q6ICIrZmlsZSsiLiAiK2Vycm9yKTsKKyAgICB9CisKKyAgICAvLyBwb3N0X2NyZWF0ZSBhbnN0b3NzZW4KKyAgICBwYz1zeW1ib2xfZnVuY3Rpb24oInBvc3RfY3JlYXRlIiwgb2IpOworICAgIGlmIChjbG9zdXJlcChwYykpCisgICAgICBjYWxsX291dChwYywgMSk7CisgICAgCisgICAgcmV0dXJuIDA7IC8vIDAgYmVkZXV0ZXQgaGllciwgZGllc2VzIE9iamVrdCBuaWNodCBub2NoIGVpbm1hbCBhbnN0b3NzZW4uCit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZnVybml0dXJlKCkKK3sKKyAgICAgICAgaW50IGk7CisgICAgICAgIHN0cmluZyBydjsKKyAgICAgICAgc3RyaW5nIGN1cnJlbnRfa2V5OworICAgICAgICAKKyAgICAgICAgLy8gQWJicnVjaGJlZGluZ3VuZyBpc3QsIGRhc3MgbmljaHRzIG1laHIgenUgbGFkZW4gaXN0LgorICAgICAgICBpZiAoc2l6ZW9mKGZ1cm5pdHVyZSk9PTApIHJldHVybjsgCisgICAgICAgIAorICAgICAgICAvLyBBbnN0b8OfZW4gZGVzIG5hZWNoc3RlbiBEdXJjaGxhdWZzLCBmYWxscyBkaWUgVGlja3MgbmljaHQgcmVpY2hlbi4KKyAgICAgICAgd2hpbGUgKHJlbW92ZV9jYWxsX291dCgjJ2xvYWRfZnVybml0dXJlKSAhPSAtMSk7CisgICAgICAgIGNhbGxfb3V0KCMnbG9hZF9mdXJuaXR1cmUsIDEpOworICAgICAgICAKKyAgICAgICAgLy8gTGFkZW4gYWxsZXIgTW9lYmVsIGFuc3Rvw59lbgorICAgIGZ1cm5pdHVyZT1maWx0ZXIoZnVybml0dXJlLCAjJ2xvYWRfZnVybml0dXJlX29iamVjdCk7Cit9CisKKy8vIERpZXNlIEZ1bmt0aW9uIGJlcmVpdGV0IGRhcyBSZWxvYWRlbiBkZXIgRWlucmljaHR1bmcgdm9yCitzdGF0aWMgdm9pZCBzdGFydF9yZWxvYWRfZnVybml0dXJlKCkKK3sgIAorICAvLyBXZW5uIGVzIGtlaW5lIE1vZWJlbCBnaWJ0LCBpc3QgZGFzIExhZGVuIGJlZW5kZXQuCisgIGlmICghbWFwcGluZ3AoZnVybml0dXJlKSkgcmV0dXJuOworICBpZiAoYnJva2VuX2Z1cm5pdHVyZT09MCkgYnJva2VuX2Z1cm5pdHVyZT0oW10pOworICAKKyAgLy8gRmFsbHMgZWluIEtleSB2b24gZnVybml0dXJlIDAgaXN0LCB3aXJkIGRpZXNlciBnZWxvZXNjaHQuIAorICBtX2RlbGV0ZShmdXJuaXR1cmUsMCk7CisgIAorICAvLyBMYWRlbiBkZXMgRnVybml0dXJlIGFuc3Rvc3NlbgorICBsb2FkX2Z1cm5pdHVyZSgpOyAgCit9CisKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL21vZHVsZXMvdXNlcmNtZC5jIGIvZC9zZWhlci9oYWV1c2VyL21vZHVsZXMvdXNlcmNtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4M2I4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9kdWxlcy91c2VyY21kLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8vICB1c2VyY21kLmMgLS0gTW9kdWwgZnVlciBiZW51dHplcmRlZmluaWVydGUgQmVmZWhsZQorLy8KKy8vICAoYykgMTk5NSBXYXJnb25ATW9yZ2VuR3JhdWVuCisvLworLy8gJElkOiB1c2VyY21kLmMsdiAxLjQgMjAwMy8xMS8xNSAxMzo0ODo0NiBtdWQgRXhwICQKKy8vCisKKyNkZWZpbmUgTkVFRF9QUk9UT1RZUEVTCisjaW5jbHVkZSAiLi4vaGF1cy5oIgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx3aXpsZXZlbHMuaD4KKyNpbmNsdWRlIDx0aGluZy9wcm9wZXJ0aWVzLmg+CisKK3ByaXZhdGUgc3RyaW5nIHVjRmlsdGVyKHN0cmluZyBzdHIpOworcHJpdmF0ZSBzdHJpbmcgdWNUZXh0KHN0cmluZyBzdHIpOworcHJpdmF0ZSB2b2lkIHNwbGl0Q21kKHN0cmluZyAqY21kLCBzdHJpbmcgKnZlcmIsIHN0cmluZyAqcGFyYSk7CisKK2NyZWF0ZSgpCit7CisgIFNldChIX0NPTU1BTkRTLCBTQVZFLCBGX01PREUpOworICBTZXQoSF9DT01NQU5EUywgKFtdKSk7CisKKyAgQWRkQ21kKCIiLCAidXNlckNvbW1hbmRzIiwgMSk7Cit9CisKKy8qCisgKiBBZGRVc2VyQ21kOiBlaWdlbmVzIEtvbW1hbmRvIGhpbnp1ZnVlZ2VuCisgKiAgY21kOiBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncy4gRW50aGFlbHQgZW50d2VkZXIgbnVyIGRpZSBWZXJiZW4gb2RlcgorICogICAgICAgICBkaWUga29tcGxldHRlbiBCZWZlaGxlIChWZXJiICsgUGFyYW1ldGVyKS4gU2llaGUgYXVjaCBwYS4KKyAqICBwYTogIFphaGwgb2RlciBBcnJheSB2b24gU3RyaW5ncy4gRmFsbHMgcGEgZWluZSBaYWhsIGlzdCwgc28gZW50aGFlbHQgY21kCisgKiAgICAgICAgIGRpZSBrb21wbGV0dGVuIEJlZmVobGUgKHNhbXQgUGFyYW1ldGVybikuIEFuc29uc3RlbiBlbnRoYWVsdCBwYSBkaWUKKyAqICAgICAgICAgUGFyYW1ldGVyIGZ1ZXIgZGFzIGVudHNwcmVjaGVuZGUgVmVyYiBpbiBjbWQuCisgKiAgICAgICAgIElzdCBwYSA9ICh7ICJATkZAIn0pICwgc28gaGFuZGVsdCBlcyBzaWNoIHVtIGVpbiBub3RpZnlfZmFpbCwgZGFzIGFuCisgKiAgICAgICAgIGRpZSBCZXNjaHJlaWJ1bmcgZGVzIFZlcmJzIChmYWxscyB2b3JoYW5kZW4pIGFuZ2VoYWVuZ3Qgd2lyZC4KKyAqICBtZTogIFRleHQgZnVlciBkZW4gQXVzZnVlaHJlbmRlbi4gRGVyIFRleHQgbXVzcyBzY2hvbiBnZXBhcnNlZCB3b3JkZW4KKyAqICAgICAgICAgc2VpbiEKKyAqICBvdGg6IFRleHQgZnVlciBkaWUgVW1zdGVoZW5kZW4gb2RlciAwLiBEZXIgVGV4dCBtdXNzIHNjaG9uIGdlcGFyc2VkIHdvci0KKyAqICAgICAgICAgZGVuIHNlaW4hCisgKi8KK3ZhcmFyZ3Mgdm9pZAorQWRkVXNlckNtZChtaXhlZCBjbWQsIG1peGVkIHBhLCBzdHJpbmcgbWUsIHN0cmluZyBvdGgpCit7CisgIGludCB2LHA7CisgIG1hcHBpbmcgY21kcywgZGVzYzsKKyAgc3RyaW5nICp2ZXJiLCAqcGFyYSwgdHh0OworCisgIGNtZHMgPSBRdWVyeShIX0NPTU1BTkRTKTsKKyAgaWYgKHN0cmluZ3AoY21kKSkKKyAgICB2ZXJiID0gKHsgY21kIH0pOworICBlbHNlCisgICAgdmVyYiA9IGNtZDsKKworICBpZiAoaW50cChwYSkpCisgICAgc3BsaXRDbWQodmVyYlswLi5dLCAmdmVyYiwgJnBhcmEpOworICBlbHNlIHsKKyAgICBpZiAoc3RyaW5ncChwYSkpCisgICAgICBwYXJhID0gKHsgcGEgfSk7CisgICAgZWxzZSBpZiAocG9pbnRlcnAocGEpKQorICAgICAgcGFyYSA9IHBhOworICAgIGZvciAoZGVzYyA9IChbXSksIHA9c2l6ZW9mKHBhcmEpLTE7IHA+PTA7IHAtLSkKKyAgICAgIGRlc2MgKz0gKFsgcGFyYVtwXSA6IG1lOyBvdGggXSk7CisgIH0KKworICBmb3IgKHYgPSBzaXplb2YodmVyYiktMTsgdj49IDA7IHYtLSkgeworICAgIGlmIChtZW1iZXIoY21kcywgdmVyYlt2XSkpIHsKKyAgICAgIGlmIChpbnRwKHBhKSkKKyAgICAgICAgY21kc1t2ZXJiW3ZdXSArPSAoW3BhcmFbdl0gOiBtZTsgb3RoIF0pOworICAgICAgZWxzZQorICAgICAgICBjbWRzW3ZlcmJbdl1dICs9IGRlc2M7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKGludHAocGEpKQorICAgICAgICBjbWRzICs9IChbIHZlcmJbdl0gOiAoW3BhcmFbdl0gOiBtZTsgb3RoIF0pIF0pOworICAgICAgZWxzZQorICAgICAgICBjbWRzICs9IChbIHZlcmJbdl0gOiBkZXNjIF0pOworICAgIH0KKyAgfQorICBTZXQoSF9DT01NQU5EUywgY21kcyk7Cit9CisKKy8qCisgKiBSZW1Vc2VyQ21kOiBLb21tYW5kbyhzKSB3aWVkZXIgZW50ZmVybmVuCisgKiAgY29tOiBTdHJpbmcgb2RlciBBcnJheSB2b24gU3RyaW5ncy4gRW50aGFlbHQgZGFzIHp1IGxvZXNjaGVuZGUgS29tbWFuZG8KKyAqICAgICAgICAgKFZlcmIgb2RlciBWZXJiICsgUGFyYW1ldGVyKS4KKyAqICBhbGw6IEZhbGxzICE9IDAsIHNvIHdlcmRlbiBkaWUgVmVyYmVuIGF1cyBjb20ga29tcGxldHQgbWl0IGFsbGVuIFBhcmEtCisgKiAgICAgICAgIG1ldGVybiBnZWxvZXNjaHQuCisgKi8KK3ZhcmFyZ3Mgdm9pZAorUmVtVXNlckNtZChtaXhlZCBjb20sIGludCBhbGwpCit7CisgIG1hcHBpbmcgY21kLCB0bXA7CisgIHN0cmluZyAqdmVyYiwgKnBhcmE7CisgIGludCB2LCBwOworCisgIGNtZCA9IFF1ZXJ5KEhfQ09NTUFORFMpOworICBzcGxpdENtZChzdHJpbmdwKGNvbSkgPyAoe2NvbX0pIDogY29tLCAmdmVyYiwgJnBhcmEpOworCisgIGlmIChhbGwpCisgICAgZm9yICh2PXNpemVvZih2ZXJiKS0xOyB2Pj0wOyB2LS0pCisgICAgICBjbWQgPSBtX2NvcHlfZGVsZXRlKGNtZCwgdmVyYlt2XSk7CisgIGVsc2UgeworICAgIGZvciAodj1zaXplb2YodmVyYiktMTsgdj49MDsgdi0tKSB7CisgICAgICBpZiAodG1wID0gY21kW3ZlcmJbdl1dKSB7CisgICAgICAgIGZvciAocD1zaXplb2YocGFyYSktMTsgcD49MDsgcC0tKQorICAgICAgICAgIHRtcCA9IG1fY29weV9kZWxldGUodG1wLCBwYXJhW3BdKTsKKyAgICAgICAgY21kW3ZlcmJbdl1dID0gdG1wOworICAgICAgfQorICAgIH0KKyAgfQorICBTZXQoSF9DT01NQU5EUyxjbWQpOworfQorCisvKgorICogdXNlckNvbW1hbmRzOiBBdXN3ZXJ0dW5nIGRlciBiZW51dHplcmRlZmluaWVydGVuIEJlZmVobGUuCisgKi8KK3N0YXRpYyBpbnQKK3VzZXJDb21tYW5kcyhzdHJpbmcgc3RyKQoreworICBtYXBwaW5nIHVjbWQsIHVwYXJtOworICBzdHJpbmcgKnBhcnRzLCB0ZXh0OworICBpbnQgaTsKKworICB1Y21kID0gUXVlcnlQcm9wKEhfQ09NTUFORFMpOworICBzdHIgPSB0aGlzX3BsYXllcigpLT5fdW5wYXJzZWRfYXJncygxKXx8IiI7CisgIGlmICh1cGFybSA9IHVjbWRbcXVlcnlfdmVyYigpXSkgeworICAgIGlmIChtZW1iZXIodXBhcm0sIHN0cikpIHsKKyAgICAgIHRleHQgPSB1Y1RleHQodXBhcm1bc3RyLDBdKTsKKyAgICAgIGlmIChzaXplb2Yob2xkX2V4cGxvZGUodGV4dCwgIlxuIikpID49IHRoaXNfcGxheWVyKCktPlF1ZXJ5UHJvcChQX1NDUkVFTlNJWkUpKQorICAgICAgICB0aGlzX3BsYXllcigpLT5Nb3JlKGNhcGl0YWxpemUodGV4dClbMC4uPDJdKTsKKyAgICAgIGVsc2UKKyAgICAgICAgd3JpdGUoY2FwaXRhbGl6ZSh0ZXh0KSk7CisKKyAgICAgIGlmICh1cGFybVtzdHIsMV0pCisgICAgICAgIHNheSh1Y1RleHQodXBhcm1bc3RyLDFdKSk7CisKKyAgICAgIGlmIChtZW1iZXIobV9pbmRpY2VzKFF1ZXJ5UHJvcChQX0VYSVRTKSksIHF1ZXJ5X3ZlcmIoKSkgPT0gLTEpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmIChzdHIgJiYgc3RyICE9ICIiICYmIHRleHQgPSB1cGFybVsiQE5GQCJdKQorICAgICAgICBub3RpZnlfZmFpbChpbXBsb2RlKG9sZF9leHBsb2RlKHRleHQsIkBGIiksc3RyKSk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKioqIEZ1bmN0aW9ucyBwcml2YXRlIHRvIHRoaXMgbW9kdWxlLi4uICoqKi8KKworLyoKKyAqIHVjRmlsdGVyOiBFcnNldHplbiB2b24gTmFtZSwgUGVyc29uYWwtIHVuZCBQb3NzZXNzaXZwcm9ub21lbi4KKyAqICBHaWJ0IGRlbiBlcnNldHp0ZW4gU3RyaW5nIHp1cnVlY2suCisgKi8KK3ByaXZhdGUgc3RyaW5nCit1Y0ZpbHRlcihzdHJpbmcgc3RyKQoreworICBpbnQgcCxnOworCisgIHN3aXRjaChzdHJbMC4uMV0pIHsKKyAgICBjYXNlICJAVyI6IC8vIE5hbWUgaW4gZW50c3ByZWNoZW5kZW0gRmFsbC4uLgorICAgICAgcmV0dXJuIHRoaXNfcGxheWVyKCktPm5hbWUodG9faW50KHN0clsyLi4yXSkpOworICAgIGNhc2UgIkBQIjogLy8gUGVyc29uYWxwcm9ub21lbiBpbiBlbnRwcmVjaGVuZGVtIEZhbGwuLi4KKyAgICAgIHJldHVybiB0aGlzX3BsYXllcigpLT5RdWVyeVByb25vdW4odG9faW50KHN0clsyLi4yXSkpOworICAgIGNhc2UgIkBCIjogLy8gUG9zc2VzaXZwcm9ub21lbiBpbiBlbnRwcmVjaGVuZGVtIEZhbGwuLi4KKyAgICAgIHAgPSB0b19pbnQoc3RyWzQuLjRdKTsKKyAgICAgIGcgPSB0b19pbnQoc3RyWzMuLjNdKTsKKyAgICAgIHJldHVybiB0aGlzX3BsYXllcigpLT5RdWVyeVBvc3NQcm9ub3VuKGcsIHRvX2ludChzdHJbMi4uMl0pLCBwKTsKKyAgfQorICByZXR1cm4gc3RyOworfQorCisvKgorICogdWNUZXh0OiBSYXNzZW4tIHVuZCBnZXNjaGxlY2h0c3NwZXppZmlzY2hlIFRlaWxlIGJlYXJiZWl0ZW4gc293aWUKKyAqICBOYW1lbiB1bmQgUHJvbm9taW5hIGVpbnNldHplbi4KKyAqCisgKiAgc3RyIGVudGhhZWx0IGRlbiBTdHJpbmcsIGRlciBiZWltIEJlc2NocmVpYmVuIGRlcyBCZWZlaGxzCisgKiAgZWluZ2VnZWJlbiB3dXJkZS4gQmlzIGF1ZiBkZW4gRGVmYXVsdC1UZXh0IHNpbmQgYWxsZSBUZWlsZQorICogIG9wdGlvbmFsLiBEZXIgU3RyaW5nIGthbm4gZm9sZ2VuZGVuIEF1ZmJhdSBoYWJlbjoKKyAqICAtLS0tLS0gc2NobmlwcCAtLS0tLS0KKyAqICBEZWZhdWx0LVRleHQsIGRlciBhdXNnZWdlYmVuIHdpcmQsIHdlbm4gZGllIGZvbGdlbmRlbiBzcGV6aWVsbGVyZW4KKyAqICBUZXh0ZSBuaWNodCBhdWZ0cmV0ZW4gb2RlciBhdWYgZGVuIEF1c2Z1ZWhyZW5kZW4gbmljaHQgenV0cmVmZmVuCisgKiAgQE5BTUU6bmFtZUEKKyAqICBUZXh0LCBkZXIgYXVzZ2VnZWJlbiB3aXJkLCB3ZW5uIGRlciBTcGllbGVyICJuYW1lQSIgZGFzIEtvbW1hbmRvCisgKiAgZWluZ2VnZWJlbiBoYXQKKyAqICBATkFNRTpuYW1lQgorICogIFVuZCBzbyB3ZWl0ZXIgZnVlciBTcGllbGVyICJuYW1lQiIgZXRjLi4uCisgKiAgQFJBCisgKiAgVGV4dCwgZGVyIGF1c2dlZ2ViZW4gd2lyZCwgd2VubiBkZXIgQXVzZnVlaHJlbmRlIGF1ZiBkZXIgRXJsYXViZS0KKyAqICBMaXN0ZSBkZXMgSGF1c2VzIHN0ZWh0LgorICogIEBSRQorICogIFRleHQsIGRlciBhdXNnZWdlYmVuIHdpcmQsIHdlbm4gZGVyIEF1c2Z1ZWhyZW5kZSBlaW4gRWxmCisgKiAgaXN0LiBFYmVuc28gZ2lidCBlcyBAUkQgZnVlciBEdW5rZWxlbGZlbiwgQFJGIGZ1ZXIgRmVsaW5lbiwKKyAqICBAUkggZnVlciBIb2JiaXRzLCBAUk0gZnVlciBNZW5zY2hlbiwgQFJHIGZ1ZXIgR29ibGlucyAgdW5kIEBSWiAKKyAqICBmdWVyIFp3ZXJnZS4KKyAqICAtLS0tLS0gc2NobmFwcCAtLS0tLS0KKyAqCisgKiAgRGVyIERlZmF1bHQtVGV4dCBtdXNzIGltbWVyIGFtIEFuZmFuZyBzdGVoZW4uIERpZSBhbmRlcmVuIEJsb2Vja2UKKyAqICBrb2VubmVuIGluIGJlbGllYmlnZXIgUmVpaGVuZm9sZ2UgZm9sZ2VuLiBEaWUgUmVpaGVuZm9sZ2UsIGluIGRlcgorICogIGRpZSBCbG9lY2tlIGJldHJhY2h0ZXQgd2VyZGVuLCBpc3QgZGFiZWkgZm9sZ2VuZGU6CisgKiAgLSB6dWVyc3Qgd2VyZGVuIEBOQU1FLUJsb2Vja2UgdW50ZXJzdWNodAorICogIC0gZGFubiB3aXJkIEBSQSAoRXJsYXViZS1MaXN0ZSkgZ2V0ZXN0ZXQKKyAqICAtIGRhbmFjaCB3aXJkIGRpZSBSYXNzZSB1ZWJlcnBydWVmdCAoQFJEL0BSRS9AUkYvQFJIL0BSTS9AUlovQFJHKQorICogIC0genVsZXR6dCB3aXJkIGRlciBEZWZhdWx0LVRleHQgYmV0cmFjaHRldAorICoKKyAqICBJbm5lcmhhbGIgamVkZXMgZGVyIEJsb2Vja2Uga2FubiBtYW4gbm9jaCBtaXQgQEcgendpc2NoZW4KKyAqICBtYWVubmxpY2hlbiB1bmQgd2VpYmxpY2hlbiBWZXJ0cmV0ZXJuIHVudGVyc2NoZWlkZW4gKGJlaSBATkFNRToKKyAqICBtYWNodCBkYXMgYWJlciB3ZW5pZyBTaW5uKS4gQmVpc3BpZWw6CisgKiAgLS0tLS0tIHNjaG5pcHAgLS0tLS0tCisgKiAgQFJaCisgKiAgRGVyIFp3ZXJnIHdhciBtYWVubmxpY2gKKyAqICBARworICogIERlciBad2VyZyB3YXIgd2VpYmxpY2gKKyAqICAtLS0tLS0gc2NobmFwcCAtLS0tLS0KKyAqCisgKiAgRGllIEZ1bmt0aW9uIGdpYnQgZGVuIGZ1ZXIgZGVuIEF1c2Z1ZWhyZW5kZW4genV0cmVmZmVuZGVuIFRleHQKKyAqICB6dXJ1ZWNrLgorICovCitwcml2YXRlIHN0cmluZwordWNUZXh0KHN0cmluZyBzdHIpCit7CisgIHN0cmluZyAqcGFydHMsICpuYW1lcywgKmxuYW1lczsKKyAgaW50IGksIG47CisKKyAgLy8gVGV4dCBuYWNoIE5hbWVuLSB1bmQgUmFzc2VudHJlbm5lcm4gYXVmdGVpbGVuCisgIHBhcnRzID0gcmVnZXhwbG9kZShzdHIsICIoQE5BTUU6W0EtWmEtejEtOV0qXG4pfChAUltBLVpdXG4pIik7CisgIGkgPSAtMTsKKworICBpZiAoc2l6ZW9mKHBhcnRzKSA+IDEpIHsKKworICAgIC8vIFp1ZXJzdCB3aXJkIG5hY2ggTmFtZW5zdHJlbm5lcm4gZ2VzdWNodAorICAgIG5hbWVzID0gcmVnZXhwKHBhcnRzLCAiQE5BTUU6Iik7CisKKyAgICBpZiAoc2l6ZW9mKG5hbWVzKSA+IDApIHsKKyAgICAgIC8vIGVpbiBrbGVpbmVyIFVtd2VnLCBkYSBkZXIgTmFtZSBpbSBFaW5nYWJlc3RyaW5nIG5pY2h0CisgICAgICAvLyBub3R3ZW5kaWdlcndlaXNlIGluIEtsZWluYnVjaHN0YWJlbiB2b3JsaWVndC4KKyAgICAgIGxuYW1lcyA9IG1hcChuYW1lcywgIydsb3dlcl9jYXNlKTsKKyAgICAgIG4gPSBtZW1iZXIobG5hbWVzLCAiQG5hbWU6IitnZXR1aWQodGhpc19wbGF5ZXIoKSkrIlxuIik7CisKKyAgICAgIGlmIChuID49IDApIHsKKyAgICAgICAgaSA9IG1lbWJlcihwYXJ0cywgbmFtZXNbbl0pOworICAgICAgfQorICAgIH0KKworICAgIC8vIEtlaW4gcGFzc2VuZGVyIE5hbWVuc3RyZW5uZXIgZ2VmdW5kZW46IEVybGF1YmUtTGlzdGUKKyAgICAvLyB1ZWJlcnBydWVmZW4KKyAgICBpZiAoaTwwICYmIGFsbG93ZWRfY2hlY2sodGhpc19wbGF5ZXIoKSkpIHsKKyAgICAgIGk9bWVtYmVyKHBhcnRzLCAiQFJBXG4iKTsKKyAgICB9CisKKyAgICAvLyBXZWRlciBOYW1lbnN0cmVubmVyIG5vY2ggRXJsYXViZS1MaXN0ZSBwYXNzZW46IFJhc3NlCisgICAgLy8gdWViZXJwcnVlZmVuCisgICAgaWYgKGk8MCkgeworICAgICAgc3dpdGNoKHRoaXNfcGxheWVyKCktPlF1ZXJ5UHJvcChQX1JBQ0UpKSB7CisgICAgICAgIGNhc2UgIlp3ZXJnIjoKKyAgICAgICAgICBpPW1lbWJlcihwYXJ0cywgIkBSWlxuIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkVsZiI6CisgICAgICAgICAgaT1tZW1iZXIocGFydHMsICJAUkVcbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJGZWxpbmUiOgorICAgICAgICAgIGk9bWVtYmVyKHBhcnRzLCAiQFJGXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiSG9iYml0IjoKKyAgICAgICAgICBpID0gbWVtYmVyKHBhcnRzLCAiQFJIXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRHVua2VsZWxmIjoKKyAgICAgICAgICBpID0gbWVtYmVyKHBhcnRzLCAiQFJEXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiR29ibGluIjoKKyAgICAgICAgICBpID0gbWVtYmVyKHBhcnRzLCAiQFJHXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiT3JrIjogCisgICAgICAgICAgaSA9IG1lbWJlcihwYXJ0cywgIkBST1xuIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgaT1tZW1iZXIocGFydHMsICJAUk1cbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBEZW4gcmljaHRpZ2VuIFRlaWwgZGVzIFN0cmluZ3MgaGVyYXVzcGlja2VuCisgICAgaWYgKGk+LTEpCisgICAgICBzdHIgPSBwYXJ0c1tpKzFdOworICAgIGVsc2UKKyAgICAgIHN0ciA9IHBhcnRzWzBdOworICB9CisgIGlmIChzaXplb2YocGFydHMgPSBvbGRfZXhwbG9kZShzdHIsICJAR1xuIikpPT0yKQorICAgIHN0ciA9IHBhcnRzWyh0aGlzX3BsYXllcigpLT5RdWVyeVByb3AoUF9HRU5ERVIpID09IE1BTEUgPyAwIDogMSldOworCisgIHBhcnRzID0gcmVnZXhwbG9kZShzdHIsICIoQFdbMC0zXXxAUFswLTNdfEBCWzAtM11bMC0yXVswLTFdKSIpOworICBwYXJ0cyA9IG1hcChwYXJ0cywgIyd1Y0ZpbHRlcik7CisgIHJldHVybiBpbXBsb2RlKHBhcnRzLCAiIik7Cit9CisKKy8qCisgKiBzcGxpdENtZDogS29tcGxldHRlcyBLb21tYW5kbyBpbiBBcnJheXMgdm9uIFZlcmJlbiB1bmQgUGFyYW1ldGVybiB6ZXJsZWdlbi4KKyAqICBjbWQ6IEFycmF5IHZvbiBTdHJpbmdzLiBEaWVzZXMgQXJyYXkgZW50aGFlbHQgZGllIGF1Znp1c3BhbHRlbmRlbiBCZWZlaGxlLgorICogIHZlcmI6IFJlZmVyZW56IGF1ZiBlaW4gQXJyYXkgdm9uIFN0cmluZ3MgZnVlciBkaWUgVmVyYmVuLgorICogIHBhcmE6IFJlZmVyZW56IGF1ZiBlaW4gQXJyYXkgdm9uIFN0cmluZ3MgZnVlciBkaWUgUGFyYW1ldGVyLgorICovCitwcml2YXRlIHZvaWQgc3BsaXRDbWQoc3RyaW5nICpjbWQsIHN0cmluZyAqdmVyYiwgc3RyaW5nICpwYXJhKQoreworICBpbnQgYywgc3A7CisKKyAgZm9yICh2ZXJiID0gKHt9KSwgcGFyYSA9ICh7fSksIGMgPSBzaXplb2YoY21kKS0xOyBjPj0wOyBjLS0pIHsKKyAgICBpZiAoKHNwPW1lbWJlcihjbWRbY10sICcgJykpID49IDApIHsKKyAgICAgIHZlcmIgKz0gKHsgY21kW2NdWzAuLnNwLTFdIH0pOworICAgICAgcGFyYSArPSAoeyBjbWRbY11bc3ArMS4uXSB9KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB2ZXJiICs9ICh7IGNtZFtjXSB9KTsKKyAgICAgIHBhcmEgKz0gKHsgIiIgfSk7CisgICAgfQorICB9Cit9CisKKy8vICRMb2c6IHVzZXJjbWQuYyx2ICQKKy8vIFJldmlzaW9uIDEuNCAgMjAwMy8xMS8xNSAxMzo0ODo0NiAgbXVkCisvLyBAUkQgYWxzIFRyZW5uZXIgZnVlciBEdW5rZWxlbGZlbgorLy8KKy8vIFJldmlzaW9uIDEuMyAgMjAwMC8xMi8wMyAxNzoxNTo0MCAgbXVkCisvLyB1Y1RleHQ6IE5ldWVyIFRyZW5uZXIgQE5BTUU6Zm9vLCBtaXQgZGVtIG1hbiBpbiBTZWhlcmhhdXNiZWZlaGxlbgorLy8gVGV4dGUgZnVlciBiZXN0aW1tdGUgU3BpZWxlciB2b3JzZWhlbiBrYW5uLgorLy8KKy8vIFJldmlzaW9uIDEuMiAgMjAwMC8wOC8yMCAyMDozODo0MCAgbXVkCisvLyBAUkYgYWxzIFRyZW5uZXIgZnVlciBGZWxpbmVuCisvLworLy8gUmV2aXNpb24gMS4xLjEuMSAgMjAwMC8wOC8yMCAyMDoyMjo0MiAgbXVkCisvLyBJbnMgQ1ZTIGVpbmdlY2hlY2t0CisvLworLy8gUmV2aXNpb24gMS40ICAxOTk2LzA0LzE5ICAyMzoxMDo1MiAgV2FyZ29uCisvLyBAUkEgZnVlciBMZXV0ZSBtaXQgRXJsYXVibmlzCisvLworLy8gUmV2aXNpb24gMS4zICAxOTk1LzEwLzMxICAxMjo1OTo1MiAgV2FyZ29uCisvLyBAUkggZnVlciBIb2JiaXRzCisvLworLy8gUmV2aXNpb24gMS4yICAxOTk1LzA2LzIyICAxOTo0ODozMSAgV2FyZ29uCisvLyBCdWdmaXggaW4gdXNlckNvbW1hbmRzKCkKKy8vCisvLyBSZXZpc2lvbiAxLjEgIDE5OTUvMDQvMjEgIDA5OjIyOjUwICBXYXJnb24KKy8vIEluaXRpYWwgcmV2aXNpb24KKy8vCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2FjY2Vzc19yaWdodHMuYyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvYWNjZXNzX3JpZ2h0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NWNkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2FjY2Vzc19yaWdodHMuYwpAQCAtMCwwICsxLDUgQEAKK2ludCBhY2Nlc3NfcmlnaHRzKHN0cmluZyB1c2VyLCBzdHJpbmcgZmlsZSkgeworICBpZih1c2VyID09ICJzd2lmdCIgJiYgZmlsZSE9ImF1dG9sb2FkZXJ0cnVoZS5jIikKKyAgICByZXR1cm4gMTsgIC8vIFN3aWZ0IGhhdCBhdWYgZGllIE1vZWJlbCBadWdyaWZmLgorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvYXV0b2xvYWRlcnRydWhlLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2F1dG9sb2FkZXJ0cnVoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMmNlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2F1dG9sb2FkZXJ0cnVoZS5jCkBAIC0wLDAgKzEsMTAxNSBAQAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTmFtZSBkZXMgT2JqZWN0czogICAgQXVmYmV3YWhydW5ndHJ1aGUgZnVlciBBdXRvbG9hZC1PYmpla3RlCisvLworLy8gTWFnaWVyOiAgICAgICAgICAgICAgWmVzc3RyYQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCitpbmhlcml0IExBREVOKCJzd2lmdF9zdGRfY29udGFpbmVyIik7CisKKy8vI2luY2x1ZGUgPGFuc2kuaD4KKyNpbmNsdWRlIDxjbGFzcy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgIi9kL3NlaGVyL2hhZXVzZXIvaGF1cy5oIgorCisjZGVmaW5lIElEUyAgICAgMAorI2RlZmluZSBOQU1FICAgMQorI2RlZmluZSBBTERBVEEgIDIKKworI2RlZmluZSBMT0coeCx5KSBsb2dfZmlsZSh4LHNwcmludGYoIiVzIFslcywgJU8sICVPXTogJXNcbiIsZHRpbWUodGltZSgpKSxcCisgICAgICAodXVpZD91dWlkOiIgIiksUEwsb2JqZWN0X25hbWUoTUUpLHkpKQorI2RlZmluZSBTVE9SRUxPRyh4KSBMT0coInplc3N0cmEvQUxUUlVIRV9TVE9SRS5sb2ciLHgpCisjZGVmaW5lIFBJQ0tMT0coeCkgTE9HKCJ6ZXNzdHJhL0FMVFJVSEVfUElDSy5sb2ciLHgpCisKKyNkZWZpbmUgSVRFTUxPRyh4KSBsb2dfZmlsZSgiemVzc3RyYS9BTFRSVUhFX0lURU1TLmxvZyIsXAorICAgIHNwcmludGYoIiVzIFslT106ICVzXG4iLGR0aW1lKHRpbWUoKSksXAorICAgICAgdGhpc19pbnRlcmFjdGl2ZSgpfHxQTCx4KSkKKworI2RlZmluZSBFUlJMT0coeCkgTE9HKCJ6ZXNzdHJhL0FMVFJVSEUuRVJSIix4KQorCisjdW5kZWYgQlMKKyNkZWZpbmUgQlMoeCkgYnJlYWtfc3RyaW5nKHgsNzgpCisKKyNkZWZpbmUgVkVSU0lPTl9PQkogIjUiCisKKyNpZmRlZiBNQUlOVEFJTkVSCisjdW5kZWYgTUFJTlRBSU5FUgorI2VuZGlmCisjZGVmaW5lIE1BSU5UQUlORVIgKHsiemVzc3RyYSJ9KQorCisvLyBTYXZlZmlsZSBkZXIgQmx1ZXByaW50CisjaWZkZWYgU0FWRUZJTEUKKyN1bmRlZiBTQVZFRklMRQorI2VuZGlmCisjZGVmaW5lIFNBVkVGSUxFIF9fRklMRV9fWy4uPDNdCisKKyNkZWZpbmUgREVCVUcoeCkgICAgaWYgKGZ1bmNhbGwoc3ltYm9sX2Z1bmN0aW9uKCdmaW5kX3BsYXllciksTUFJTlRBSU5FUlswXSkpXAorICAgICAgICAgIHRlbGxfb2JqZWN0KGZ1bmNhbGwoc3ltYm9sX2Z1bmN0aW9uKCdmaW5kX3BsYXllciksTUFJTlRBSU5FUlswXSksXAorICAgICAgICAgICAgICAgICAgICAgICJBTFRydWhlOiAiK3grIlxuIikKKworI2RlZmluZSBBQ0NFU1MgKG15X3NlY3VyZV9sZXZlbCgpID49IEFSQ0hfTFZMKQorCisvLyBEaWVzZSA0IHNpbmQgZnVlciBkaWUgQmx1ZXByaW50IChNYXN0ZXIgYWxsZXIgVHJ1aGVuKQorbWFwcGluZyB3aGl0ZWxpc3Q9KFtdKTsgLy8gZXJsYXVidGUgQXV0b2xvYWRlciwgYWxsZSBhbmRlcmVuIG5pY2h0IGVybGF1YnQuCittYXBwaW5nIGJsYWNrbGlzdD0oW10pOyAvLyBiZXJlaXRzIGV4cGxpeml0IGR1cmNoIEVNKyBhYmdlbGVobnRlIEF1dG9sb2FkZXIKK21hcHBpbmcgdm9yc2NobGFlZ2U9bV9hbGxvY2F0ZSgxLDIpOyAvLyB2b3JzY2hsYWVnZSBkZXIgU3BpZWxlcgorbWFwcGluZyBkYXRhPShbXSk7ICAvLyBoaWVyIHNwZWljaGVydCBkaWUgQlAgYWxsZSBEYXRlbiBkZXIgVHJ1aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIFdJQ0hUSUc6IGRpZXNlcyBNYXBwaW5nIHdpcmQgaW4gL3NlY3VyZS9tZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJnZWxlZ3QgdW5kIG11c3MgYXVjaCBiZWltIE5ldWxhZGVuIGdnZi4gdm9uIGRvcnQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2llZGVyIGFiZ2Vob2x0IHdlcmRlbi4gQXVzc2VyZGVtIHRlaWxlbiBzaWNoIGFsbGUKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJ1aGVuIGVpbmVzIFNwaWVsZXJzIHVuZCBkaWVzZSBCbHVlcHJpbnQgZGllIE1hcHBpbmdzCisgICAgICAgICAgICAgICAgICAgIC8vIGRhcmluLCBkYW1pdCBBZW5kZXJ1bmdlbiBzb2ZvcnQgaW4gYWxsZW4gVHJ1aGVuIHVuZCBkZW0KKyAgICAgICAgICAgICAgICAgICAgLy8gTWFzdGVyIGJla2FubnQgc2luZC4KKworLyogZGllIGVpbnplbG5lbiBUcnVoZW4gc3BlaWNoZXJuIGluIGF1dG9sb2FkZXIuIEZvcm1hdDogCisgICAzIFdlcnRlIHBybyBLZXksIEtleXMgc2luZCBkaWUgTmFtZW4gZGVyIEJsdWVwcmludHMgZGVyIE9iamVrdGU6CisgICAoWzxibHVlcHJpbnQ+OiA8UF9JRFM+OyA8b2ItPm5hbWUoKT47IDxQX0FVVE9MT0FET0JKPiBdKQorICAgKi8KK25vc2F2ZSBtYXBwaW5nIGF1dG9sb2FkZXI9bV9hbGxvY2F0ZSgxLDMpOworbm9zYXZlIHN0cmluZyB1dWlkOyAvLyBVVUlEIGRlcyBFaWdlbnR1ZW1lcnMKK25vc2F2ZSBvYmplY3Qgb2JfaW5fYmV3ZWd1bmc7IC8vIHVlYmxlciBIYWNrIGVpZ2VudGxpY2guIDotKAorCit2b2lkIE5vdGlmeUluc2VydChvYmplY3Qgb2IsIG9iamVjdCBvbGRlbnYpOworc3RhdGljIG1hcHBpbmcgUXVlcnlEYXRhKCk7CitzdGF0aWMgbWFwcGluZyBTZXREYXRhKG1peGVkIGRhdGEpOworcHJvdGVjdGVkIHZvaWQgc2F2ZV9tZSgpOworcHJvdGVjdGVkIHZvaWQgY2hlY2tfY29udGVudCgpOworCitub21hc2sgcHJpdmF0ZSBpbnQgbXlfc2VjdXJlX2xldmVsKCk7IC8vQXJncy4KKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkgeworCisgIC8vIEphLCBlcyBpcyBBYnNpY2h0LCBkYXNzIGRhcyBjcmVhdGUgZGVyIEJQIGVyc3Qgc3BhZXRlciBhYmdlYnJvY2hlbiB3aXJkIQorICBzd2lmdF9zdGRfY29udGFpbmVyOjpjcmVhdGUoKTsKKworICBzZXRldWlkKGdldHVpZChNRSkpOworCisgIC8vIGZhbGxzIGRpZXMgZGllIEJQIGlzdDoKKyAgLy8gMS4gZGFzIFNhdmVmaWxlIHp1IGxhZGVuLgorICAvLyAyLiB2ZXJzdWNoZW4sIGRpZSB0cnVoZW5kYXRlbiB2b24gL3NlY3VyZS9tZW1vcnkgenUgaG9sZW4sIGRhbWl0IG5hY2ggZGVtCisgIC8vICAgIE5ldWxhZGVuIGRlciBNYXN0ZXIgdW5kIGRpZSBDbGllbnQgaW1tZXIgbmFjaCBfZGllc2VsYmVuXyBNYXBwaW5ncworICAvLyAgICBoYWJlbi4KKyAgaWYgKCFjbG9uZXAoTUUpKQorICB7CisgICAgLy8gU2F2ZWZpbGUgcmVzdGF1cmllcmVuIChhdWNoIHdlbm4gZGF0YSBpbSBNZW1vcnkgaXN0LCBtdXNzIGRhcyBzZWluLAorICAgIC8vIGRhbWl0IGRpZSBhbmRlcmVuIFZhcmlhYmxlbiB3aWVkZXIgZWluZ2VsZXNlbiBzaW5kKS4KKyAgICByZXN0b3JlX29iamVjdChTQVZFRklMRSk7CisgICAgLy8gamV0enQgRGF0ZW4gYXVzIE1lbW9yeSBob2xlbiwgc29mZXJuIHZlcmZ1ZWdiYXIKKyAgICBtYXBwaW5nIHRtcCA9ICIvc2VjdXJlL21lbW9yeSItPkxvYWQoInRydWhlbmRhdGVuIik7CisgICAgaWYgKG1hcHBpbmdwKHRtcCkpCisgICAgeworICAgICAgLy8gRGF0ZW4gYXVzIFNhdmVmaWxlIGR1cmNoIGRpZSB2b20gTWVtb3J5IGVyc2V0emVuCisgICAgICBkYXRhID0gdG1wOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLy8gS2VpbmUgRGF0ZW4gaW4gTWVtb3J5LiBKZXR6dCBpbiBqZWRlbSBGYWxsIGRlbiBQb2ludGVyIGF1ZiBkYXMgTWFwcGluZyBkYXRhIGluCisgICAgICAvLyAvc2VjdXJlL21lbW9yeSBhYmxlZ2VuCisgICAgICBpZiAoIi9zZWN1cmUvbWVtb3J5Ii0+U2F2ZSgidHJ1aGVuZGF0ZW4iLGRhdGEpICE9IDEpCisgICAgICB7CisgICAgICAgIHJhaXNlX2Vycm9yKCJDb3VsZCBub3Qgc2F2ZSBtZW1vcnkgdG8gL3NlY3VyZS9tZW1vcnkuIik7CisgICAgICB9CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8vIGJyYXVjaGVuIENsb25lcyBuaWNodC4KKyAgICBzZXRfbmV4dF9yZXNldCgtMSk7CisgICAgZGF0YT0wOyAvLyBicmF1Y2hlbiBDbG9uZXMgbmljaHQuCisgIH0KKworICBTZXRQcm9wKFBfU0hPUlQsICJFaW5lIGtsZWluZSwgbWFnaXNjaGUgSG9senRydWhlIik7CisgIFNldFByb3AoImNudF92ZXJzaW9uX29iaiIsIFZFUlNJT05fT0JKKTsKKyAgU2V0UHJvcChQX05BTUUsICJIb2x6dHJ1aGUiKTsKKyAgU2V0UHJvcChQX0dFTkRFUiwgRkVNQUxFKTsKKyAgU2V0UHJvcChQX05BTUVfQURKLCh7ImtsZWluIiwgIm1hZ2lzY2gifSkpOworICBTZXRQcm9wKFBfTE9ORywgQlMoCisgICAgICJEaWUga2xlaW5lIEhvbHp0cnVoZSBpc3QgYXVzIHN0YWJpbGVtIEVpY2hlbmhvbHogZ2VmZXJ0aWd0LiBFaWdlbnRsaWNoICIKKyAgICAgInNhZWhlIHNpZSByZWNodCB1bnNjaGVpbmJhciBhdXMsIHdhZXJlbiBkYSBuaWNodCBkaWUgdmllbGVuIGt1bnN0dm9sbGVuICIKKyAgICAgIlJ1bmVuIGFuIGRlbiBTZWl0ZW4gdW5kIGF1ZiBkZW0gRGVja2VsLiIpCisgICAgKyJAQGNudF9zdGF0dXNAQCIpOworCisgIEFkZElkKCh7ImF1dG9sb2FkZXJ0cnVoZSIsICJob2x6dHJ1aGUiLCAidHJ1aGUifSkpOworCisgIC8vIGRlbiBSZXN0IHZvbSBDcmVhdGUgYnJhdWNodCBkaWUgQlAgbmljaHQuCisgIGlmICghY2xvbmVwKE1FKSkgcmV0dXJuOworCisgIFNldFByb3AoUF9MT0dfRklMRSwiemVzc3RyYS9BTFRSVUhFLnJlcCIpOworCisgIFNldFByb3AoUF9XRUlHSFQsIDMwMDApOyAgICAgICAgIC8vIEdld2ljaHQgNSBLZworICAvLyBkaWUgZHJlaSBoaWVyIHNpbmQgaW4gZGllc21lIEZhbGwgZWlnZW50bGljaCB2b2VsbGlnIG9obmUgQmVkZXV0dW5nCisgIFNldFByb3AoUF9NQVhfV0VJR0hULCAxMDAwMDAwKTsgIC8vIEVzIHBhc3NlbiBmdWVyIDEwMDAga2cgU2FjaGVuIHJlaW4uCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsKKyAgU2V0UHJvcChQX01BWF9PQkpFQ1RTLCAxMDApOyAgICAgLy8gc2luZCBlaCBpbW1lciAwIGVjaHRlIE9iamVrdGUgZHJpbi4KKworICBTZXRQcm9wKFBfVkFMVUUsIDApOyAgICAgICAgICAgICAvLyBLZWluIG1hdGVyaWVsbGVyIFdlcnQuIElzdCBlaCBuaWNodCB2ZXJrYXVmYmFyLgorICBTZXRQcm9wKFBfTk9CVVksIDEpOyAgICAgICAgICAgICAvLyBXaXJkIGltIExhZGVuIHplcnN0b2VydCwgZmFsbHMgZXIgdmVya2F1ZnQgd2lyZC4KKyAgU2V0UHJvcChQX05PR0VULCAiRGFzIGdlaHQgbmljaHQuICIrTmFtZShXRVIsMSkrIiBoYWZ0ZXQgd2llIG1hZ2lzY2ggYW0gQm9kZW4uXG4iKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLCAoW01BVF9PQUs6NDksIE1BVF9NSVNDX01BR0lDOjUwLCBNQVRfSk9GSVVNOiAxXSkgKTsKKyAgU2V0UHJvcChQX0lORk8sIEJTKCJJbiBkaWVzZSBzdGFiaWxlIFRydWhlIGthbm5zdCBEdSBiZXN0aW1tdGUgIgorICAgICAgICAiQXV0b2xvYWQtT2JqZWt0ZSBoaW5laW5sZWdlbiB1bmQgc2llIGxhZ2Vybiwgd2VubiBEdSBzaWUgZ2VyYWRlICIKKyAgICAgICAgIm5pY2h0IGJyYXVjaHN0LiAoTWl0ICdkZXBvbmllcmUgPHdhcz4nIGthbm5zdCBEdSBldHdhcyBpbiBkZXIgIgorICAgICAgICAiVHJ1aGUgenVyIEF1ZmJld2FocnVuZyBkZXBvbmllcmVuLCBtaXQgJ2VudG5laG1lIDx3YXM+IG9kZXIgIgorICAgICAgICAiJ25pbW0gPHdhcz4gYXVzIHRydWhlJyBrYW5uc3QgRHUgZWluZW4gR2VnZW5zdGFuZCB3aWVkZXIgIgorICAgICAgICAiaGVyYXVzbmVobWVuLikiKSk7CisKKyAgLy8gUHJvcCBmdWVyIHJlYm9vdGZlc3RlIE1vZWJlbAorICAvLyBEZXIgZW5kZ3VlbHRpZ2UgV2VydCAoVVVJRCBkZXMgU3BpZWxlcnMpIHdpcmQgcGVyIFNldEJlc2l0emVyKCkgZ2VzZXR6dCwKKyAgLy8gc29iYWxkIGRpZSBUcnVoZSBkYXMgZXJzdGUgTWFsIGluIGVpbiBTZWhlcmhhdXMgYmV3ZWd0IHd1cmRlLgorICBTZXRQcm9wKEhfRlVSTklUVVJFLCAxKTsKKworICBBRCgoeyJwbGF0eiIsImdyb2Vzc2UifSksIAorICAgICAgQlMoIkRpZSBUcnVoZSBpc3QgcmVjaHQga2xlaW4sIGFiZXIgbWVya3d1ZXJkaWdlcndlaXNlICIKKyAgICAgICAgInNjaGVpbnQgc2llIHZpZWwgbWVociBhbiBHZWdlbnN0YWVuZGVuIGF1Zm5laG1lbiB6dSBrb2VubmVuLCBhbHMgIgorICAgICAgICAiZXMgdm9uIGlocmVyIEdyb2Vzc2UgaGVyIHNjaGVpbnQuIikpOworICBBRCgoeyJnZWdlbnN0YW5kIiwiZ2VnZW5zdGFlbmRlIn0pLAorICAgICAgQlMoIkRpZSBUcnVoZSBzY2hlaW50IHp3YXIgdmllbGVuIEdlZ2Vuc3RhZW5kZW4gUGxhdHogenUgYmlldGVuLCBhYmVyICIKKyAgICAgICAgImRhZnVlciBuaW1tdCBzaWUgbmljaHQgamVkZW4gR2VnZW5zdGFuZCBhdWYuIikpOworICBBRCgoeyJob2x6IiwiZWljaGVuaG9seiJ9KSwKKyAgICAgIEJTKCJEYXMgRWljaGVuaG9seiBpc3Qgc2VociBzdGFiaWwuIEVzIGlzdCBnYW56IGdsYXR0IGdlc2NobGlmZmVuIHVuZCAiCisgICAgICAgICJ0cmFlZ3QgdmllbGUga3Vuc3R2b2xsZSBSdW5lbiBpbiBzaWNoLiIpKTsKKyAgQUQoKHsic2VpdGVuIiwic2VpdGUifSksCisgICAgICBCUygiRGllIFRydWhlIGhhdCA0IFNlaXRlbiwgZGllIGFsbGVzYW10IG1pdCBSdW5lbiB2ZXJ6aWVydCBzaW5kLiIpKTsKKyAgQUQoKHsiYm9kZW4ifSksCisgICAgICBCUygiRGVyIEJvZGVuIGRlciBUcnVoZSB0cmFlZ3Qga2VpbmVybGVpIFJ1bmVuLiIpKTsKKyAgQUQoKHsiZGVja2VsIn0pLAorICAgICAgQlMoIkF1Y2ggZGVyIERlY2tlbCBkZXIgVHJ1aGUgaXN0IG1pdCBSdW5lbiB2ZXJ6aWVydC4iKSk7CisgIEFEKCh7InJ1bmVuIiwicnVuZSJ9KSwKKyAgICAgIEJTKCJEaWUgUnVuZW4gYmVkZWNrZW4gYWxsZSA0IFNlaXRlbiB1bmQgZGVuIERlY2tlbCBkZXIgVHJ1aGUuIE1hbiAiCisgICAgICAgICJoYXQgc2llIHp3ZWlmZWxsb3MgaW4gbXVlaHNhbWVyIEFyYmVpdCBhdXMgZGVtIGhhcnRlbiBIb2x6ICIKKyAgICAgICAgImdlc2Nobml0enQuIEFuc2NobGllc3NlbmQgd3VyZGVuIHNpZSBvZmZlbmJhciBtaXQgZWluZW0gIgorICAgICAgICAiTWV0YWxsIGdlZnVlbGx0LiBEdSB2ZXJzdGVoc3QgendhciB1ZWJlcmhhdXB0IG5pY2h0LCB3YXMgIgorICAgICAgICAiZGllIFJ1bmVuIGJlZGV1dGVuLCBhYmVyIHNpZSBzaW5kIGJlc3RpbW10IG1hZ2lzY2gsIGRlbm4gd2FubiBpbW1lciAiCisgICAgICAgICJEdSBkZW4gRGVja2VsIG9lZmZuZXN0IG9kZXIgc2NobGllc3N0IG9kZXIgR2VnZW5zdGFlbmRlIGhpbmVpbmxlZ3N0ICIKKyAgICAgICAgIm9kZXIgaGVyYXVzbmltbXN0LCBsZXVjaHRlbiBkaWUgUnVuZW4gaGVsbCBhdWYuIikpOworICBBRCgoeyJtZXRhbGwifSksCisgICAgICBCUygiV2FzIGRhcyB3b2hsIGZ1ZXIgZWluIE1ldGFsbCBzZWluIG1hZz8gWndlaWZlbGxvcyBoYXQgZXMgYXVjaCB3YXMgIgorICAgICAgICAibWl0IE1hZ2llIHp1IHR1bi4iKSk7CisgIEFEKCh7Im1hZ2llIn0pLAorICAgICAgQlMoIkluIGRpZXNlciBUcnVoZSBzY2hlaW50IHZpZWwgTWFnaWUgenUgc3RlY2tlbiwgd2VubiBzZWxic3QgZWluICIKKyAgICAgICAgIldlbHR1bnRlcmdhbmcgaWhyIG5pY2h0cyBhbmhhYmVuIGthbm4uIikpOworICBBRCgoeyJhcmJlaXQiLCJmZXJ0aWd1bmcifSksCisgICAgICBCUygiRGllIEZlcnRpZ3VuZyBkaWVzZXIgVHJ1aGUgbXVzcyBzZWhyIGF1ZndlbmRpZyBnZXdlc2VuIHNlaW4uICIKKyAgICAgICAgIktlaW4gV3VuZGVyLCBkYXNzIGRpZSBUcnVoZSBzbyB0ZXVlciBpc3QuIikpOworICBBRCgoeyJ3dW5kZXIifSksCisgICAgICBCUygiRWluIFd1bmRlciBzY2hlaW50IGVzIHp1IHNlaW4uIikpOworICBBRCgoeyJ3ZWx0dW50ZXJnYW5nIiwiYXJtYWdlZGRvbiJ9KSwKKyAgICAgIEJTKCJEaXIgc2NoYXVkZXJ0IGJlaW0gR2VkYW5rZW4gYW4gZGVuIFdlbHR1bnRlcmdhbmcuIikpOworICBBRCgoeyJnZWRhbmtlbiJ9KSwKKyAgICAgIEJTKCJEZW5rIGRvY2ggbGllYmVyIGFuIHdhcyBhbmRlcmVzLi4uIikpOworCisgIEFkZENtZCgiZGVwb25pZXJ8ZGVwb25pZXJlJkBQUkVTRU5UIiwiY21kX2RlcG9uaWVyZSIsCisgICAgICAiV2FzIG1vZWNodGVzdCBEdSBpbiBkZXIgRWljaGVuaG9senRydWhlIGRlcG9uaWVyZW4/Iik7CisgIEFkZENtZCgiZW50bmltbXxlbnRuZWhtZXxlbnRuZWhtIiwiY21kX2VudG5laG1lbiIpOworCisgIC8vIGJlaSBkaWVzZXIgVHJ1aGUgd2FlcmUgZGFzIEVybGF1YmVuIHZvZWxsaWcgc2lubmxvcy4gOy0pCisgIFJlbW92ZUNtZCgoeyJzZXJsYXViZSJ9KSk7CisKK30KKworLy8ga2VpbmUgVHJ1aGVuIHplcnN0b2VyZW4sIGRpZSBpcmdlbmRlaW5lbiBJTmhhbHQgaGFiZW4uCitpbnQgemVydHJ1ZW1tZXJuKHN0cmluZyBzdHIpIHsKKyAgLy8gYXVzIHN3aWZ0X3N0ZF9jb250YWluZXIKKyAgc3RyaW5nIG5mX3N0cjsKKyAgbmZfc3RyPSJTeW50YXg6IHplcnRydWVtbWVyIFtPYmpla3QtSWRdXG4iCisgICAgICAgICsiQnNwLjogICB6ZXJ0cnVlbW1lciAiK1F1ZXJ5UHJvcChQX0lEUylbMV0rIlxuIjsKKyAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogT2huZSBQYXJhbWV0ZXIga2xhcHB0IGRhcyBuaWNodC5cbiIrbmZfc3RyKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIG5vdGlmeV9mYWlsKCJGZWhsZXI6IER1IG11c3N0IGVpbmUgZ3VlbHRpZ2UgT2JqZWt0LUlkIGFuZ2ViZW4hXG4iK25mX3N0cik7CisgIGlmKHByZXNlbnQoc3RyKSE9VE8pICAgLy8gVWViZXJwcnVlZmUsIG9iIGF1Y2ggZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCEKKyAgICByZXR1cm4gMDsKKyAgaWYoIFF1ZXJ5SGF1c2Jlc2l0emVyKCkgIT0gUXVlcnlUUCgpICYmICFRdWVyeVByb3AoInRlc3QiKSApCisgIHsKKyAgICB3cml0ZSggQlMoIk51ciAiK1F1ZXJ5SGF1c2Jlc2l0emVyKCkrIiBkYXJmICIrbmFtZShXRU4sMSkrIiB6ZXJ0cnVlbW1lcm4hIikpOworICAgIHJldHVybiAxOworICB9CisgIC8vIE9iamVrdGUgZW50aGFsdGVuPyBXZW5uIGphLCBhYmJydWNoLgorICBpZiAoc2l6ZW9mKGF1dG9sb2FkZXIpKSB7CisgICAgdGVsbF9vYmplY3QoUEwsQlMoIkR1IHdpbGxzdCBnZXJhZGUgenVtIFNjaGxhZyBhdXNob2xlbiwgdW0gIgorICAgICAgICAgICtuYW1lKFdFTiwxKSsgIiB6dSB6ZXJ0cnVlbW1lcm4sIGFscyBEaXIgZWluZmFlbGx0LCBkYXNzICIKKyAgICAgICAgICArUXVlcnlQcm9ub3VuKFdFUikrICIgamEgZ2FyIG5pY2h0IGxlZXIgaXN0ISBOZW5lLCB3ZXIgd2Vpc3MsIG9iICIKKyAgICAgICAgICAiRHUgZGFzIG5pY2h0IG5vY2ggYnJhdWNoZW4ga29lbm50ZXN0LiIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICAvLyBzb25zdCBnZWVyYnRlbiBLcmFtIGF1c2Z1ZWhyZW4uCisgIHJldHVybiA6OnplcnRydWVtbWVybihzdHIpOworfQorCisvLyBaZXNzdHJhLCAxLjcuMDcsIGZ1ZXJzIEhvZXJyb2hyCitzdHJpbmcgR2V0T3duZXIoKSB7cmV0dXJuICJ6ZXNzdHJhIjt9CisKKy8vIFBydWVmdCBkYXMgT2JqZWt0IGF1ZiBFaWdudW5nIGZ1ZXIgZGllIFRydWhlLCBzcGVpY2hlcnQgc2VpbmUgRGF0ZW4gdW5kCisvLyB6ZXJzdG9lcnQgZXMgYW5zY2hsaWVzc2VuZC4gTk9EUk9QLU9iamVrdGUga29lbm5lbiBudXIgc28gaW4gZGllIFRydWhlCisvLyBnZWxlZ3Qgd2VyZGVuLCBhbGxlIGFuZGVyZW4ga29lbm5lbiBhdWNoIG1pdCAic3RlY2tlIC4uLiBpbiB0cnVoZSIKKy8vIGRlcG9uaWVydCB3ZXJkZW4sIHdvcmF1ZmhpbiBlYmVuZmFsbHMgUHJldmVudEluc2VydCgpIHVuZCBOb3RpZnlJbnNlcnQoKQorLy8gZHVyY2hsYXVmZW4gd2VyZGVuLgorcHJvdGVjdGVkIGludCBjbWRfZGVwb25pZXJlKHN0cmluZyBjbWQsIG1peGVkIGFyZ3MpIHsKKyAgaWYgKCFvYmplY3RwKFBMKSkgcmV0dXJuIDA7CisKKyAgbm90aWZ5X2ZhaWwoTmFtZShXRVIsMSkrIiBpc3QgZG9jaCBnZXNjaGxvc3NlbiFcbiIpOworICBpZihRdWVyeVByb3AoUF9DTlRfU1RBVFVTKSE9Q05UX1NUQVRVU19PUEVOKSByZXR1cm4gMDsKKyAgCisgIG5vdGlmeV9mYWlsKCJXYXMgbW9lY2h0ZXN0IER1IGluIGRlciBFaWNoZW5ob2x6dHJ1aGUgZGVwb25pZXJlbj9cbiIpOworICBpZiAoIXN0cmluZ3AoY21kKSB8fCAhc2l6ZW9mKGNtZCkgCisgICAgICB8fCAhcG9pbnRlcnAoYXJncykgfHwgIXNpemVvZihhcmdzKSkgcmV0dXJuIDA7CisgIG9iamVjdCBvYj1hcmdzWzBdOworICBpZiAoIW9iamVjdHAob2IpKSByZXR1cm4gMDsKKyAgLy8gd3VlcmRlIGRpZSBUcnVoZSBkYXMgT2JqZWt0IHVlYmVyaGF1cHQgYXVmbmVobWVuPyBGZWhsZXJhdXNnYWJlIGR1cmNoCisgIC8vIFByZXZlbkluc2VydCgpCisgIGlmIChQcmV2ZW50SW5zZXJ0KG9iKSkgcmV0dXJuIDE7CisgIC8vIEF1c3ppZWhlbi4uLiBTY2hhZGUsIGRhc3MgRG9VbndlYXIgbml4IHZlcm51ZW5mdGlnZXMgYW4gUnVlY2tnYWJld2VydAorICAvLyBoYXQuIDotKAorICBpZiAob2JqZWN0cChvYi0+UXVlcnlQcm9wKFBfV09STikpKSB7CisgICAgb2ItPkRvVW53ZWFyKCk7CisgICAgaWYgKG9iamVjdHAob2ItPlF1ZXJ5UHJvcChQX1dPUk4pKSkgeworICAgICAgdGVsbF9vYmplY3QoUEwsIEJTKCJEdSBtdXNzdCAiKyBvYi0+bmFtZShXRU4sMSkrICJ6dW5hZWNoc3QgZWlubWFsICIKKyAgICAgICAgICAgICJhdXN6aWVoZW4hIikpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIC8vIHdlZ3N0ZWNrZW4KKyAgaWYgKG9iamVjdHAob2ItPlF1ZXJ5UHJvcChQX1dJRUxERUQpKSkgeworICAgIG9iLT5Eb1Vud2llbGQoKTsKKyAgICBpZiAob2JqZWN0cChvYi0+UXVlcnlQcm9wKFBfV0lFTERFRCkpKSB7CisgICAgICB0ZWxsX29iamVjdChQTCwgQlMoIkR1IG11c3N0ICIrIG9iLT5uYW1lKFdFTiwxKSsgInp1bmFlY2hzdCBlaW5tYWwgIgorICAgICAgICAgICAgIndlZ3N0ZWNrZW4hIikpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIC8vIE5PX0NIRUNLIHVuZCBTaWxlbnQtQmV3ZWd1bmcsIE1lbGR1bmdlbiBhbiBkZW4gU3BpZWxlciBzZWxiZXIgbWFjaGVuLgorICB0ZWxsX29iamVjdChQTCwgQlMoIkR1IHN0ZWNrc3QgIisgb2ItPm5hbWUoV0VOLDEpICsgIiBpbiAiICsgbmFtZShXRU4sMSkgKworICAgICAgIi4iKSk7CisgICAgCisgIHRlbGxfcm9vbShlbnZpcm9ubWVudCgpLEJTKFBMLT5OYW1lKFdFUikgKyAiIGxlZ3QgIiArIG9iLT5uYW1lKFdFTiwwKSArCisgICAgICAiIGluICIgKyBuYW1lKFdFTiwxKSArICIgaGluZWluLiIpLCh7UEx9KSk7CisgIG9iLT5tb3ZlKE1FLCBNX05PQ0hFQ0t8TV9TSUxFTlQpOworICByZXR1cm4gMTsKK30KKworLy8gYWx0ZXJuYXRpdmUgenVtICJuaW1tIGJsYSBhdXMgdHJ1aGUiLiBTcGllbGVyIHdvbGx0ZW4gd2FzIGt1cnplcyBkYWZ1ZXIKKy8vIGhhYmVuLgorcHJvdGVjdGVkIGludCBjbWRfZW50bmVobWVuKHN0cmluZyBjbWQpIHsKKyAgaW50IHJlczsKKyAgbWl4ZWQgbm9nZXQ7CisKKyAgaWYgKCFvYmplY3RwKFBMKSkgcmV0dXJuIDA7CisKKyAgbm90aWZ5X2ZhaWwoTmFtZShXRVIsMSkrIiBpc3QgZG9jaCBnZXNjaGxvc3NlbiFcbiIpOworICBpZihRdWVyeVByb3AoUF9DTlRfU1RBVFVTKSE9Q05UX1NUQVRVU19PUEVOKSByZXR1cm4gMDsKKworICBub3RpZnlfZmFpbChCUygiV2FzIG1vZWNodGVzdCBEdSBhdXMgIituYW1lKFdFTSwxKSsgIiBlbnRuZWhtZW4/XG4iKSk7CisgIGlmICghc3RyaW5ncChjbWQpIHx8ICFzaXplb2YoY21kKSkgcmV0dXJuIDA7CisKKyAgb2JqZWN0ICpvYnM9cHJlc2VudF9vYmplY3RzKGNtZCk7CisKKyAgaWYgKCFzaXplb2Yob2JzKSB8fCAhb2JqZWN0cChvYnNbMF0pKQorICAgIHJldHVybiAwOworCisgIC8vIE5PR0VUIGlzdCBoaWVyIGJsb2VkLiBTbyBpc3QgZXMgendhciBhdWNoIG5pY2h0IHJpY2h0aWcgZG9sbC4uLiAqc2V1ZnoqCisgIC8vIERpZSBoaWVyIGlzdC93YWVyZSBhYmVyIG5lbiB1ZWJsZXIgSGFjaywgZXJzdG1hbCBhdXNrb21tZW50aWVydCBsYXNzZW4uCisgIC8vIGFsc28sIFBfTk9HRVQgc2ljaGVybi4KKyAgLyppZiAoIWNsb3N1cmVwKG5vZ2V0PW9iLT5RdWVyeShQX05PR0VULEZfUVVFUllfTUVUSE9EKSkpIHsKKyAgICBub2dldD1vYi0+UXVlcnkoUF9OT0dFVCxGX1ZBTFVFKTsKKyAgICBvYi0+U2V0KFBfTk9HRVQsMCxGX1ZBTFVFKTsKKyAgfQorICBlbHNlIHsKKyAgICBvYi0+U2V0KFBfTk9HRVQsMCxGX1FVRVJZX01FVEhPRCk7CisgIH0qLworICAvLyBuZWhtZW4uCisgIHJlcz1QTC0+cGlja19vYmoob2JzWzBdKTsKKyAgLy8gUF9OT0dFVCB6dXJ1ZWNrc2NocmVpYmVuLiAoSmEsIHdlbm4gZWluZSBDbG9zdXJlIGFscyBGX1ZBTFVFIGRyaW5zdGVodCwKKyAgLy8gbGFuZGV0IGRpZSBqZXR6dCBhbHMgRl9RVUVSWV9NRVRIT0QgaW0gT2JqZWt0LgorICAvKmlmIChjbG9zdXJlcChub2dldCkpIHsKKyAgICBvYi0+U2V0KFBfTk9HRVQsbm9nZXQsRl9RVUVSWV9NRVRIT0QpOworICB9CisgIGVsc2UKKyAgICBvYi0+U2V0KFBfTk9HRVQsbm9nZXQsRl9WQUxVRSk7CisqLworICByZXR1cm4ocmVzKTsKK30KKworLy8gSGllciB3aXJkIGF1Y2ggZGFzIFByZXZlbnRJbnNlcnQoKSB2b24gZGVyIEJsdWVwcmludCBnZXJ1ZmVuLiBEYXMKKy8vIGVybGVpY2h0ZXJ0IGVzLCBkaWUgTGlzdGUgYW4gZXJsYXVidGVuIE9iamVrdGVuIHp1IGFlbmRlcm4sIG9obmUgZGFzcyBtYW4KKy8vIGFsbGUgQ2xvbmVzIGVyc2V0emVuIG11c3MuCit2YXJhcmdzIGludCBQcmV2ZW50SW5zZXJ0KG9iamVjdCBvYikgeworICBzdHJpbmcgb25hbWU7CisgIC8vIERhcyBPYmpla3QsIHdhcyBkaWUgVHJ1aGUgZ2VyYWRlIHNlbGJlciBiZXdlZ3QsIHdpcmQgaWdub3JpZXJ0LgorICBpZiAoIW9iamVjdHAob2IpIHx8IG9iX2luX2Jld2VndW5nPT1vYikgcmV0dXJuIDA7CisgIAorICBvbmFtZT1CTFVFX05BTUUob2IpOworICAKKyAgLy8gUHJ1ZWZ1bmcgaW4gQ2xvbmVuOgorICBpZiAoY2xvbmVwKE1FKSkKKyAgeworICAgIC8vIG51ciBFaWdlbnR1ZW1lcgorICAgIGlmICghc3RyaW5ncCh1dWlkKSB8fCAhc2l6ZW9mKHV1aWQpKSB7CisgICAgICBpZiAob2JqZWN0cChQTCkpCisgICAgICAgIHRlbGxfb2JqZWN0KFBMLEJTKHNwcmludGYoIiVzIGdlaG9lcnQgRGlyIG5pY2h0LCBkYWhlciBrYW5uc3QgRHUgIgorICAgICAgICAgICAgImF1Y2gga2VpbmUgR2VnZW5zdGFlbmRlIGluICVzIGxlZ2VuLiIsCisgICAgICAgICAgICBOYW1lKFdFUiwxKSxRdWVyeVByb25vdW4oV0VOKSkpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoIW9iamVjdHAoUEwpIHx8IGdldHV1aWQoUEwpIT11dWlkKSB7CisgICAgICBpZiAob2JqZWN0cChQTCkpCisgICAgICAgIHRlbGxfb2JqZWN0KFBMLEJTKHNwcmludGYoIk51ciAlcyBkYXJmIEdlZ2Vuc3RhZW5kZSBpbiAlcyAiCisgICAgICAgICAgImhpbmVpbmxlZ2VuLiIsY2FwaXRhbGl6ZShleHBsb2RlKHV1aWQsIl8iKVswXSksbmFtZShXRU4sMSkpKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgLy8gamVkZXMgT2JqZWt0IG51ciBlaW5tYWwuCisgICAgaWYgKG1lbWJlcihhdXRvbG9hZGVyLG9uYW1lKSkgeworICAgICAgaWYgKG9iamVjdHAoUEwpKQorICAgICAgICB0ZWxsX29iamVjdChQTCxCUyhOYW1lKFdFUiwxKSsgIiBrYW5uIHZvbiBlaW5lbSBHZWdlbnN0YW5kIGpld2VpbHMgIgorICAgICAgICAgICJudXIgZWluIEV4ZW1wbGFyIGF1Zm5laG1lbiwgZXMgaXN0IGFiZXIgYmVyZWl0cyAiCisgICAgICAgICAgK29iLT5uYW1lKFdFUiwwKSArICIgaW4gIiArIFF1ZXJ5UHJvbm91bihXRU0pICsgIi4iKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgLy8gamV0enQgRXJsYXVibmlzbGlzdGUgZGVyIEJQIGZyYWdlbi4KKyAgICBpZiAob2JqZWN0cChibHVlcHJpbnQoTUUpKSkKKyAgICAgIHJldHVybiBibHVlcHJpbnQoTUUpLT5QcmV2ZW50SW5zZXJ0KG9iKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gbG9hZF9vYmplY3QobG9hZF9uYW1lKE1FKSktPlByZXZlbnRJbnNlcnQob2IpOworICB9CisgIC8vIEVuZGUgZnVlciBQcnVlZnVuZyBmdWVyIENsb25lLgorCisgIC8vIGFiIGhpZXIgamV0enQgZGllIFBydWVmdW5nIGR1cmNoIGRpZSBCUC4KKyAgLy8gS2VpbmUgKGZyZWlnZWdlYmVuZXIpIEF1dG9sb2FkZXI/IEhhdCBpbiBkaWVzZW0gQ29udGFpbmVyIG5peCB2ZXJsb3JlbiEKKyAgaWYoICFvYi0+UXVlcnlQcm9wKFBfQVVUT0xPQURPQkopICkgeworICAgIGlmIChvYmplY3RwKFBMKSkKKyAgICAgIHRlbGxfb2JqZWN0KFBMLEJTKCJJbiAiK25hbWUoV0VOLDEpCisgICAgICAgICAgICArIiBrYW5uc3QgRHUgbnVyIEF1dG9sb2FkLU9iamVrdGUgaGluZWlubGVnZW4uICIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlbHNlIGlmIChtZW1iZXIoYmxhY2tsaXN0LG9uYW1lKSkgeworICAgIGlmIChvYmplY3RwKFBMKSkKKyAgICAgIHRlbGxfb2JqZWN0KFBMLEJTKCJJbiAiK25hbWUoV0VOLDEpCisgICAgICAgICAgICArIiBrYW5uc3QgRHUgbnVyIGRhZnVlciBlcmxhdWJ0ZSBBdXRvbG9hZC1PYmpla3RlIGhpbmVpbmxlZ2VuLiAiCisgICAgICAgICAgICArb2ItPk5hbWUoV0VSLDEpICsgIiB3dXJkZSBleHBsaXppdCBhbHMgbmljaHQgZXJ3dWVuc2NodCAiCisgICAgICAgICAgICAiYmVmdW5kZW4uIikpOworICAgIHJldHVybiAxOworICB9CisgIGVsc2UgaWYgKCFtZW1iZXIod2hpdGVsaXN0LG9uYW1lKSkgeworICAgIGlmICghbWVtYmVyKHZvcnNjaGxhZWdlLG9uYW1lKSkgeworICAgICAgdm9yc2NobGFlZ2Vbb25hbWUsMF09b2ItPm5hbWUoV0VSLDApIHx8ICIiOworICAgICAgdm9yc2NobGFlZ2Vbb25hbWUsMV09b2ItPnNob3J0KCkgfHwgIiI7CisgICAgfQorICAgIGlmIChvYmplY3RwKFBMKSkKKyAgICAgIHRlbGxfb2JqZWN0KFBMLEJTKCJJbiAiK25hbWUoV0VOLDEpCisgICAgICAgICAgICArIiBrYW5uc3QgRHUgbnVyIGRhZnVlciBlcmxhdWJ0ZSBBdXRvbG9hZC1PYmpla3RlIGhpbmVpbmxlZ2VuLiAiCisgICAgICAgICAgICArb2ItPk5hbWUoV0VSLDEpICsgIiBpc3QgbW9tZW50YW4gbmljaHQgYXVmIGRlciBMaXN0ZS4gRGVyICIKKyAgICAgICAgICAgICJHZWdlbnN0YW5kIHd1cmRlIGpldHp0IGFscyBWb3JzY2hsYWcgZ2VzcGVpY2hlcnQuIEJpdHRlIGhhYiAiCisgICAgICAgICAgICAiZXR3YXMgR2VkdWxkLCBiaXMgc2ljaCBqZW1hbmQgZGVuIEdlZ2Vuc3RhbmQgYW5nZXNjaGF1dCBoYXQuIikpOworICAgIC8vIGdnZi4gcmVzZXQgcmVha3RpdmllcmVuIHVuZCBNYWludGFpbmVyIGluZm9ybWllcmVuLgorICAgIGlmICghcXVlcnlfbmV4dF9yZXNldCgpKQorICAgICAgc2V0X25leHRfcmVzZXQoMSk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgLy8gZ2V0cmFnZW5lcz8KKyAgaWYgKG9iLT5RdWVyeVByb3AoUF9XT1JOKSkgeworICAgICAgb2ItPkRvVW53ZWFyKDApOworICAgICAgaWYgKG9iLT5RdWVyeVByb3AoUF9XT1JOKSkgeyAvL0FSR0wuIEdSVU1NRUwuCisgICAgICAgIGlmIChvYmplY3RwKFBMKSkKKyAgICAgICAgICB0ZWxsX29iamVjdChQTCxCUygiV2lsbHN0IER1ICIrb2ItPm5hbWUoV0VOLDEpICsgIiBuaWNodCBlcnN0bWFsICIKKyAgICAgICAgICAgICAgICAiYXVzemllaGVuPyIpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgLy8gZW50aGFlbHQgZXMgaXJnZW5kd2VsY2hlIGFuZGVyZW4gT2JqZWt0ZT8KKyAgaWYgKHNpemVvZihhbGxfaW52ZW50b3J5KG9iKSkpIHsKKyAgICAgIGlmIChvYmplY3RwKFBMKSkKKyAgICAgICAgdGVsbF9vYmplY3QoUEwsQlMob2ItPk5hbWUoV0VSLDEpICsgIiBpc3QgbmljaHQgbGVlci4iKSk7CisgICAgICByZXR1cm4gMTsKKyAgfQorCisgIC8vIGFuZGVyZSBFaW5zY2hyYWVua3VuZ2VuLCBhbHMgaGllciBnZXBydWVmdCB3ZXJkZW4sIGdpYnQgZXMgbmljaHQuCisgIHJldHVybiAwOworfQorCisvLyBoaWVyIGlzdCBkYXMgT2JqZWt0IGpldHp0IGluIGRlciBUcnVoZSwgZC5oLiBEYXRlbiBzcGVpY2hlcm4gdW5kIE9iamVrdAorLy8gZGVzdHJ1Y3Rlbi4gOykKK3ZvaWQgTm90aWZ5SW5zZXJ0KG9iamVjdCBvYiwgb2JqZWN0IG9sZGVudikgeworCisgIC8vIERhcyBPYmpla3QsIHdhcyBkaWUgVHJ1aGUgZ2VyYWRlIHNlbGJlciBiZXdlZ3QsIHdpcmQgaWdub3JpZXJ0LgorICBpZiAoIW9iamVjdHAob2IpIHx8IG9iPT1vYl9pbl9iZXdlZ3VuZykKKyAgICByZXR1cm47CisgIFNUT1JFTE9HKHNwcmludGYoIiVzIGRlcG9uaWVydCAlcyBbJU9dLCBEYXRlbjogJU8iLGdldHVpZChQTCksb2ItPm5hbWUoV0VOLDApLAorICAgICAgICBvYixvYi0+UXVlcnlQcm9wKFBfQVVUT0xPQURPQkopKSk7CisgIC8vIG5vZXRpZyBzaW5kIGRpZSBJRHMsIGRlbiBOYW1lbiB1bmQgZGllIEFVVE9MT0FET0JKLURhdGVuIGRlcyBPYmpla3RzLgorICAvLyA7LSkKKyAgYXV0b2xvYWRlcltCTFVFX05BTUUob2IpLEFMREFUQV09b2ItPlF1ZXJ5UHJvcChQX0FVVE9MT0FET0JKKTsKKyAgYXV0b2xvYWRlcltCTFVFX05BTUUob2IpLElEU109b2ItPlF1ZXJ5UHJvcChQX0lEUyk7CisgIC8vIE9iamVrdGUsIGRpZSAwIGFscyBzaG9ydCBsaWVmZXJuLCBrcmllZ2VuIGVpbmUgU3RhbmRhcmQtU2hvcnQgdW5kIHdlcmRlbgorICAvLyBzaWNodGJhciBnZW1hY2h0LCBkYSBzaWUgc29uc3QgbmljaHQgd2llZGVyenVmaW5kZW4gc2luZC4gT2JqZWt0ZSwgZGllCisgIC8vIHVuc2ljaHRiYXIgc2VpbiBzb2xsZW4sIGR1ZXJmZW4gbmljaHQgZXJsYXVidCB3ZXJkZW4uCisgIC8vIFRPRE8gZWluZSBJRCBhbHMgU2hvcnQgbmVobWVuPworICBhdXRvbG9hZGVyW0JMVUVfTkFNRShvYiksTkFNRV09Y2FwaXRhbGl6ZSgob2ItPnNob3J0KCl8fCI8VW5iZWthbm50Pi5cbiIpWy4uPDNdKTsKKyAgLy8gbmFjaCBkZW0gTW92ZSBkaWUgcmVhbGVuIE9iamVrdGUgZGVzdHJ1Y3Rlbi4KKyAgY2FsbF9vdXQoIydjaGVja19jb250ZW50LCAwKTsKKyAgc2F2ZV9tZSgpOworfQorCisvLyBPYmpla3Qgd3VyZGUgZW50bm9tbWVuLCBhbHNvIGF1cyBkZXIgTGlzdGUgZGVyIGVudGhhbHRlbmVuIEF1dG9sb2FkZXIKKy8vIGxvZXNjaGVuLiBBdXNzZXJkZW0gT2JqZWt0IGtvbmZpZ3VyaWVyZW4uIERpZXMgd2lyZCBlcnN0IGhpZXIgZ2VtYWNodCB1bmQKKy8vIG5pY2h0IGluIGNyZWF0ZV9vYmplY3QoKSwgZGFtaXQgZXMgc28gYWVobmxpY2ggd2llIG1vZWdsaWNoIHp1bSBjbG9uZW4gZGVyCisvLyBBdXRvbG9hZGVyIGJlaW0gZXJzdGVsbGVuIGRlcyBTcGllbGVyb2JqZWt0ZXMgd2lyZCAoZG9ydCB3aXJkIGVyc3QgYmV3ZWd0LAorLy8gZGFubiBrb25maWd1cmllcnQpLgordm9pZCBOb3RpZnlMZWF2ZShvYmplY3Qgb2IsIG9iamVjdCBkZXN0KSB7CisgIHN0cmluZyBlcnJvciwgb25hbWU7CisgCisgIGlmICghb2JqZWN0cChvYikpCisgICAgcmV0dXJuOworICAKKyAgb25hbWU9QkxVRV9OQU1FKG9iKTsKKyAgaWYgKCFtZW1iZXIoYXV0b2xvYWRlcixvbmFtZSkpIHsKKyAgICAvLyBEYXMgc29sbHRlIGRlZmluaXRpdiBuaWNodCBwYXNzaWVyZW4uCisgICAgRVJSTE9HKHNwcmludGYoIkdlZ2Vuc3RhbmQgKCVPKSB3dXJkZSBlbnRub21tZW4sIGRlciBuaWNodCAiCisgICAgICAiZ2VzcGVpY2hlcnQgd2FyISIsb2IpKTsKKyAgICByZXR1cm47CisgIH0KKworICAvLyB3ZW5uIGtlaW4gRmVobGVyOiBPYmpla3QgYXVzIExpc3RlIGxvZXNjaGVuLiBTb25zdCB3aXJkIGRhcyBPYmpla3QKKyAgLy8gemVyc3RvZXJ0LiBEYW1pdCBibGVpYmVuIGRpZSBBdXRvbG9hZGVyLURhdGVuIGhpZXIgZXJoYWx0ZW4gdW5kIGRlcgorICAvLyBTcGllbGVyIGhhdCBrZWluIGRpc2Z1bmt0aW9uYWxlcyBPYmpla3QgaW0gSW52ZW50YXIuCisgIGlmIChlcnJvcikgeworICAgIEVSUkxPRyhzcHJpbnRmKCJGZWhsZXIgYmVpbSBLb25maWd1cmllcmVuIHZvbiAlTy4gRmVobGVybWVsZHVuZzogJU8uIgorICAgICAgICAiRGF0ZW46ICVPIixvYixlcnJvcixhdXRvbG9hZGVyW29uYW1lLEFMREFUQV0pKTsKKyAgICBvYi0+cmVtb3ZlKDEpOworICAgIGlmIChvYmplY3RwKG9iKSkKKyAgICAgIGRlc3RydWN0KG9iKTsKKyAgfQorICBlbHNlIHsKKyAgICBQSUNLTE9HKHNwcmludGYoIk9iamVrdCAoJU8pIHd1cmRlIGVudG5vbW1lbi4iLG9iKSk7CisgICAgbV9kZWxldGUoYXV0b2xvYWRlcixvbmFtZSk7CisgICAgLy8gc3BlaWNoZXJuCisgICAgc2F2ZV9tZSgpOworICB9Cit9CisKK3Byb3RlY3RlZCB2b2lkIGNoZWNrX2NvbnRlbnQoKSB7CisgIC8vIHdlbm4gT2JqZWt0ZSBub2NoIGluIGRlciBUcnVoZSBzaW5kLCBhbHNvIG5pY2h0IGVyZm9sZ3JlaWNoIGluCisgIC8vIGVpbmVuIFNwaWVsZXIgYmV3ZWd0IHd1cmRlbiwgd2VyZGVuIHplcnN0b2VydC4gRGF0ZW52ZXJsdXN0IGdpYnQgZXMKKyAgLy8gaGllcmJlaSBuaWNodCwgd2VpbCBkaWUgRGF0ZW4gZGVyIEF1dG9sb2FkZXIgbnVyIGR1cmNoIE5vdGlmeUxlYXZlKCkKKyAgLy8gZ2Vsb2VzY2h0IHdlcmRlbi4KKyAgZm9yZWFjaChvYmplY3Qgb2I6IGFsbF9pbnZlbnRvcnkoKSkgeworICAgIG9iLT5yZW1vdmUoMSk7CisgICAgaWYgKG9iamVjdHAob2IpKSBkZXN0cnVjdChvYik7CisgIH0KK30KKworLy8gaGllciBub2NobWFsIHNjaGF1ZW4sIG9iIGRhcyBPYmpla3QgYXVjaCBpbiBkZW4gcmljaHRpZ2VuIFNwaWVsZXIgYmV3ZWd0CisvLyB3aXJkLi4uIEZhbGxzIGRhcyBtb3ZlIGRhbm4gaGllciBhYmdlYnJvY2hlbiB3aXJkLCB3aXJkIGRhcyBPYmpla3QgaW0KKy8vIG5hZWNoc3RlbiBIQiB2b24gZGVyIFRydWhlIHplcnN0b2VydC4gKGNoa19jb250ZW50cygpKQordmFyYXJncyBpbnQgUHJldmVudExlYXZlKG9iamVjdCBvYiwgbWl4ZWQgZGVzdCkgeworICBvYmplY3Qgb2IyOworICAKKyAgLy9ERUJVRyhzcHJpbnRmKCJQcmV2ZW50TGVhdmUoKTogT2I6ICVPLCBEZXN0OiAlTyAoJU8pIiwKKyAgLy8gICAgICAgIG9iLGRlc3QsKG9iamVjdHAoZGVzdCk/Ik9iamVrdCI6Ik5vbi1PYmplY3QiKSkpOworCisgIGlmICghb2JqZWN0cChvYikpIHJldHVybiAwOyAKKyAgLy8gZmFsbHMgc3RyaW5nIHVlYmVyZ2ViZW4sIGVyc3RtYWwgenVnLiBTcGllbGVyIGZpbmRlbi4KKyAgaWYgKHN0cmluZ3AoZGVzdCkgJiYgc2l6ZW9mKGRlc3QpKQorICAgIGRlc3Q9ZmluZF9wbGF5ZXIoZGVzdCk7CisKKyAgLy8gcmljaHRpZ2VzIElOdGVyYWN0aXZlPyBEYW5uIGRhcmYgZGFzIE9iamVrdCByYXVzLiBTb25zdCBuaWNodC4gOy0pCisgIGlmICghb2JqZWN0cChkZXN0KSB8fCAhaW50ZXJhY3RpdmUoZGVzdCkgfHwgZ2V0dXVpZChkZXN0KSE9dXVpZCkKKyAgICAgIHJldHVybiAxOworCisgIC8vIHBydWVmZW4sIG9iIGRlciBTcGllbGVyIHNjaG9uIGVpbiBPYmpla3QgZGllc2VyIEJsdWVwcmludCBkYWJlaSBoYXQuIFdlbm4KKyAgLy8gamEsIEFiYnJ1Y2gsIGRhcyBrb2VubnRlIHNvbnN0IHp1dmllbGUgUHJvYmxlbWUgZ2ViZW4uCisgIGlmIChvYmplY3RwKG9iMj1wcmVzZW50X2Nsb25lKG9iLGRlc3QpKSkgeworICAgIHRlbGxfb2JqZWN0KGRlc3QsQlMoIkR1IGhhc3QgYmVyZWl0cyAiK29iMi0+bmFtZShXRU4sMCkgKworICAgICAgICAiIGRhYmVpLiBad2VpIEdlZ2Vuc3RhZW5kZSBkaWVzZXIgQXJ0IGthbm5zdCBkdSBuaWNodCBnbGVpY2h6ZWl0aWcgIgorICAgICAgICAibWl0IERpciBoZXJ1bXRyYWdlbi4iKSk7CisgICAgcmV0dXJuIDE7IC8vbmljaHQgcmF1c25laG1lbi4KKyAgfQorICByZXR1cm4gMDsKK30KKworLy8gT2JqZWt0ZSBhdXNnZWJlbiwgZGllIGhpZXIgYW5nZWJsaWNoIGRyaW4gc2luZC4gOy0pIEdpYnQgYWJlciBudXIgZGllCisvLyBBdXRvbG9hZGVyIGF1cywga2VpbmUgZWNodGVuIE9iamVrdCwgZGllIENvbnRhaW5lciBzaW5kLiBBbGxlcmRpbmdzIHNvbGx0ZQorLy8gc293YXMgZWggbmljaHQgdm9ya29tbWVuLiA7LSkKKy8vIGZsYWdzOiAxIC0gcmV0dXJuIGFycmF5LCAyIC0gZG9uJ3QgY29sbGVjdCBlcXVhbCBvYmplY3RzICcKKy8vIGZsYWdzOiA0IC0gZG9uJ3QgYXBwZW5kIGluZm9zIGZvciB3aXphcmRzCit2YXJhcmdzIG1peGVkIG1ha2VfaW52bGlzdChvYmplY3Qgdmlld2VyLCBtaXhlZCBpbnYsIGludCBmbGFncykgeworICBpbnQgaXN3aXo7CisgIG1peGVkIG9ianM7CisKKyAgaXN3aXogPSBJU19MRUFSTkVSKCB2aWV3ZXIgKSAmJiB2aWV3ZXItPlF1ZXJ5UHJvcChQX1dBTlRTX1RPX0xFQVJOKTsKKyAgLy8gTWFwcGluZyBiZW51dHplbiwgdW0gbXVsdGlwbGVuIE92ZXJoZWFkIGZ1ZXIgYWxsb2thdGlvbiBpbSBmb3JlYWNoKCkgenUKKyAgLy8gdmVybWVpZGVuLgorICBvYmpzPW1fYWxsb2NhdGUoc2l6ZW9mKGF1dG9sb2FkZXIpLDEpOworICBmb3JlYWNoKHN0cmluZyBvbmFtZSwgc3RyaW5nICppZHMsIHN0cmluZyBzaDogYXV0b2xvYWRlcikgeworICAgIGlmIChpc3dpeiAmJiAhKGZsYWdzICYgNCkpCisgICAgICBvYmpzW29uYW1lXT1zaCArICIuIFsiK29uYW1lKyJdIjsKKyAgICBlbHNlCisgICAgICBvYmpzW29uYW1lXT1zaCArICIuIjsKKyAgfQorICBpZihmbGFncyAmIDEpIHJldHVybihtX3ZhbHVlcyhvYmpzKS0oeyIifSkpOworICBpZighc2l6ZW9mKGF1dG9sb2FkZXIpKSByZXR1cm4gIiI7CisgIHJldHVybiBzcHJpbnRmKCIlIisoc2l6ZW9mKG9ianMpID4gNiA/ICIjIiA6ICI9IikrIi03OHMiLAorICAgICAgICAgICAgICAgICBpbXBsb2RlKG1fdmFsdWVzKG9ianMpLSh7IiJ9KSwgIlxuIikpICsgIlxuIjsKK30KKworLy8gZXJ6ZXVndCBkYXMgYmVuYW5udGUgT2JqZWt0IHVuZCBsaWVmZXJ0IGVzIHp1cnVlY2suIExpZWZlcnQgMCBpbSBGZWhsZXJmYWxsLgorLy8gYXVzc2VyZGVtIGJld2VndCBlcyBkYXMgT2JqZWt0IGluIGRpZSBUcnVoZSwgZGFtaXQgZXMgZWluIEVudiBoYXQgdW5kIGRpZQorLy8gVHJ1aGUgdmlhIE5vdGlmeUxlYXZlKCkgbWl0a3JpZWd0LCBkYXNzIGVzIHRhdHNhZWNobGljaCBlbnRub21tZW4gd3VyZGUuCitwcml2YXRlIG9iamVjdCBjcmVhdGVfb2JqZWN0KHN0cmluZyBvbmFtZSkgeworICBzdHJpbmcgZXJyb3I7CisgIG9iamVjdCBvYjsKKyAgbWl4ZWQgbm9nZXQ7CisgIGlmICghbWVtYmVyKGF1dG9sb2FkZXIsb25hbWUpKSByZXR1cm4gMDsKKworICAvL0JsdWVwcmludCBmaW5kZW4gKGphLCBkYXMgaXN0IG5pY2h0IHVuYmVkaW5ndCBub2V0aWcsIG1hbiBrb2VubnRlIGF1Y2gKKyAgLy9kaXJla3QgY2xvbmVuKQorICBpZiAoZXJyb3I9Y2F0Y2gob2I9bG9hZF9vYmplY3Qob25hbWUpO3B1Ymxpc2gpIHx8CisgICAgICAhb2JqZWN0cChvYikpIHsKKyAgICBFUlJMT0coc3ByaW50ZigiS29ubnRlICVzIG5pY2h0IGxhZGVuL2ZpbmRlbi4gRmVobGVyOiAlTyIsCisgICAgICAgICAgb25hbWUsZXJyb3IpKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICAvLyBjbG9uZW4KKyAgaWYgKGVycm9yPWNhdGNoKG9iPWNsb25lX29iamVjdChvbmFtZSk7cHVibGlzaCkgfHwKKyAgICAgICFvYmplY3RwKG9iKSkgeworICAgIEVSUkxPRyhzcHJpbnRmKCJLb25udGUgJXMgbmljaHQgY2xvbmVuLiBGZWhsZXI6ICVPIiwKKyAgICAgICAgb25hbWUsZXJyb3IpKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICAvLyBrb25maWd1cmllcmVuCisgIGVycm9yPWNhdGNoKG9iLT5TZXRQcm9wKFBfQVVUT0xPQURPQkosYXV0b2xvYWRlcltvbmFtZSxBTERBVEFdKTtwdWJsaXNoKTsKKworICAvL09iamVrdCBiZXdlZ2VuLCBkYWJlaSBPYmpla3QgaW4gZ2xvYi4gVmFyLiBtZXJrZW4sIGRhbWl0IFByZXZlbnRJbnNlcnQoKQorICAvL3VuZCBOb3RpZnlJbnNlcnQoKSBlcyBpZ25vcmllcmVuLiAqc2V1ZnoqCisgIG9iX2luX2Jld2VndW5nPW9iOworICBvYi0+bW92ZShNRSxNX05PQ0hFQ0spOworICBvYl9pbl9iZXdlZ3VuZz0wOworCisgIC8vIGpldHp0IG5vY2ggbmVuIENhbGxvdXQgc3RhcnRlbiwgZGFtaXQgZGFzIE9iamVrdCB6ZXJzdG9lcnQgd2lyZCwgd2VubiBlcworICAvLyBuaWNodCB3aXJrbGljaCBpbiBlaW5lbiBTcGllbGVyIGJld2VndCB3aXJkLgorICBjYWxsX291dCgjJ2NoZWNrX2NvbnRlbnQsMSk7CisKKyAgcmV0dXJuKG9iKTsKK30KKworLy8gU2NoYXVlbiwgb2IgZGllIHRydWhlIGVpbiBPYmpla3QgbWl0IHBhc3NlbmRlciBJRCBlbnRoYWVsdC4gV2VubgorLy8gamEsIGRhcyBPYmpla3QgZXJ6ZXVnZW4gdW5kIHp1cnVlY2tsaWVmZXJuLiAKKy8vIERpZXNlIEZ1bmt0aW9uIGhhdCBlaW5lIFJlaWhlIHZvbiBOYWNodGVpbGVuIGJ6dy4gRGVmaXppdGVuIGdndWUuIGRlcgorLy8gbm9ybWFsZXJ3ZWlzZSBpbiBDb250YWluZXJuIGRlZmluaWVydGVuIEZ1bmt0aW9uOgorLy8gLSBOdXIgZGFzIGVyc3RlIE9iamVrdCwgYXVmIGRhcyBpZCBwYXNzdC4gSWNoIGhhYiBlcnN0bWFsIGtlaW5lIEx1c3QsCisvLyAgIGhpZXIgbWVocmVyZSBPYmpla3RlIHp1IGVyemV1Z2VuLiBNYWwgc2NoYXVlbiwgb2IgZXMgc28gZ2VodC4gQXVjaCB3YWVyZQorLy8gICBlcyBlaW4gUHJvYmxlbSwgd2VubiB2aWVsZSBPYmpla3QgZGllIEV2YWxncmVuemUgYnp3LiBuaWNodCBhbGxlIGluIGRlbgorLy8gICBTcGllbGVyIGJld2VndCB3ZXJkZW4sIG5hY2hkZW0gc2llIGVyemV1Z3Qgd3VyZGVuLgorLy8gLSBrZWluZSBrb21wbGV4ZW4gQXVzZHJ1ZWNrZSwgbnVyIHJlaW5lIElEcy4KKy8vIEljaCBoYWx0ZSBkZW4gQXVmd2FuZCBmdWVyIG5pY2h0IGdlcmVjaHRmZXJ0aWd0Lgorb2JqZWN0ICpwcmVzZW50X29iamVjdHMoIHN0cmluZyBjb21wbGV4X2Rlc2MgKSB7CisgIG9iamVjdCBvYjsKKyAgaWYgKCFzdHJpbmdwKGNvbXBsZXhfZGVzYykgfHwgIXNpemVvZihjb21wbGV4X2Rlc2MpKQorICAgICAgcmV0dXJuICh7fSk7CisgIC8vIGRpZXNlIEZ1bmt0aW9uIGxpZWZlcnQgbnVyIE9iamV0ZSB6dXJ1ZWNrLCB3ZW5uIGRlciByaWNodGlnZSBJbnRlcmFjdGl2ZQorICAvLyB2ZXJzdWNodCwgc2llIHp1IGVudG5laG1lbi4gOy0pCisgIGlmICghb2JqZWN0cCh0aGlzX2ludGVyYWN0aXZlKCkpIHx8CisgICAgICBnZXR1dWlkKHRoaXNfaW50ZXJhY3RpdmUoKSkhPXV1aWQpCisgICAgICByZXR1cm4gKHt9KTsKKworICAvLyAiYWxsZXMiIGxpZWZlcnQgZGFzIGVyc3RiZXN0ZSBPYmpla3QuCisgIGlmIChjb21wbGV4X2Rlc2M9PSJhbGxlcyIgJiYgc2l6ZW9mKGF1dG9sb2FkZXIpKQorICB7CisgICAgc3RyaW5nIG9uYW1lPW1faW5kaWNlcyhhdXRvbG9hZGVyKVswXTsKKyAgICBvYj1jcmVhdGVfb2JqZWN0KG9uYW1lKTsKKyAgICBpZiAob2JqZWN0cChvYikpIHJldHVybiAoe29ifSk7CisgIH0KKworICAvLyB1ZWJlciBhbGxlIEVpbnRyYWVnZSBnZWhlbiwgYmlzIGVpbmUgSUQgc3RpbW10LCBlcnN0ZXMgcGFzc2VuZGVzIE9iamVrdAorICAvLyBlcnpldWdlbiB1bmQgaW4gZWluZW0gQXJyYXkgenVydWVja2xpZWZlcm4uCisgIGZvcmVhY2goc3RyaW5nIG9uYW1lLCBzdHJpbmcgKmlkczogYXV0b2xvYWRlcikgeworICAgIGlmIChtZW1iZXIoaWRzLGNvbXBsZXhfZGVzYyk9PS0xKSBjb250aW51ZTsKKyAgICBvYj1jcmVhdGVfb2JqZWN0KG9uYW1lKTsKKyAgICBicmVhazsgLy9vYmpla3QgZ2VmdW5kZW4sIGZlcnRpZyBoaWVyCisgIH0KKyAgaWYgKG9iamVjdHAob2IpKSByZXR1cm4gKHtvYn0pOworICByZXR1cm4gKHt9KTsgLy8gbml4IGdlZnVuZGVuCit9CisKKworCisvLyAqKioqKioqKioqKioqKioqKioqIFZlcndhbHR1bmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8vIHJlZ2lzdHJpZXJ0IGRpZSBUcnVoZSBhdWYgZGVuIGpld2VpbGlnZW4gRWlnZW50dWVtZXIuCitwcm90ZWN0ZWQgdm9pZCBTZXRCZXNpdHplcihzdHJpbmcgdW51c2VkLCBzdHJpbmcgbmV3dXVpZCkgeworICBpZiAoIXN0cmluZ3AobmV3dXVpZCkgfHwgIXNpemVvZihuZXd1dWlkKSkgcmV0dXJuOworICAvLyB3ZW5uIHNjaG9uIHJlZ2lzdHJpZXJ0LCBhYmJyZWNoZW4KKyAgaWYgKHN0cmluZ3AodXVpZCkgJiYgc2l6ZW9mKHV1aWQpKSByZXR1cm47CisKKyAgdXVpZD1uZXd1dWlkOworICBTZXQoSF9GVVJOSVRVUkUsdXVpZCxGX1ZBTFVFKTsgLy9TZXRtZXRob2RlIHVtZ2VoZW4sIHNvbnN0IFJla3Vyc2lvbiAKKyAgLy8gYWIgamV0enQgbnVyIG5vY2ggdm9uIGRlciBUcnVoZSBzZWxiZXIuCisgIFNldChIX0ZVUk5JVFVSRSxTRUNVUkVELEZfTU9ERV9BUyk7CisgIAorICAvLyBEYXRlbiBmdWVyIGRlbiBCZW51dHplciBhdXMgZGVyIEJsdWVwcmludCBob2xlbiAoQlAgbGllZmVydCBLRUlORSBLb3BpZQorICAvLyB1bmQgZXMgZGFyZiBLRUlORSBnZW1hY2h0IHdlcmRlbiEpOgorICBhdXRvbG9hZGVyPShtYXBwaW5nKWxvYWRfbmFtZSgpLT5HZXREYXRhKHV1aWQpOworICAKKyAgLy8ga2VpbmUgRGF0ZW4gZ2VrcmllZ3Q/IC0+IEZlaGxlciBsb2dnZW4KKyAgaWYgKCFtYXBwaW5ncChhdXRvbG9hZGVyKSkKKyAgeworICAgIEVSUkxPRyhzcHJpbnRmKCJLZWluZSBndWVsdGlnZW4gRGF0ZW4gdm9tIFRydWhlbm1hc3RlciAoQlApIGVyaGFsdGVuLiAiCisgICAgICAgICJpbml0aWFsaXNpZXJlIG1pdCBsZWVyZW0gTWFwcGluZy4gOi0oIikpOworICAgIHJhaXNlX2Vycm9yKHNwcmludGYoCisgICAgICAgICAgIktlaW5lIGd1ZWx0aWdlbiBEYXRlbiB2b20gVHJ1aGVubWFzdGVyIChCUCkgZnVlciBVVUlEICVzICIKKyAgICAgICAgICAiZXJoYWx0ZW4uXG4iLHV1aWQpKTsKKyAgfQorfQorCisvLyBTZXQtRnVua3Rpb24KK3N0cmluZyBfc2V0X2hfZnVybml0dXJlKG1peGVkIGFyZykgeworICBpZiAoc3RyaW5ncChhcmcpKQorICB7CisgICAgU2V0QmVzaXR6ZXIoMCxhcmcpOyAvLyBicmljaHQgYWIsIHdlbm4gYmVyZWl0cyByZWdpc3RyaWVydC4KKyAgfQorICByZXR1cm4odXVpZCk7Cit9CisKKy8vIEZhbGxzIGRhcyBTcGVpY2hlcm4gaW4gZGVyIEJQIG5pY2h0IGtsYXBwdGUsIHJ1ZmVuIGRpZSBDbG9uZXMgZGllc2UKKy8vIEZ1bmt0aW9uLiBTY2hyZWliZW4gZGVyIERhdGVuIGluIGluIExvZ2ZpbGUgenVyIFJlc3RhdXJpZXJlbiBwZXIgSGFuZC4KK3ByaXZhdGUgdm9pZCBFbWVyZ2VuY3lTdG9yZShpbnQgcmVzKSB7CisgICAgRVJSTE9HKHNwcmludGYoIkVtZXJnZW5jeVN0b3JlKCkgY2FsbGVkLiBSdWVja2dhYmV3ZXJ0IGRlcyAiCisgICAgICAgICJUcnVoZW5tYXN0ZXIgKEJQKSB3YXI6ICVPLiBTcGVpY2hlcmUgRGF0ZW4gaW4gTG9nZmlsZS4gIixyZXMpKTsKKyAgICB3cml0ZV9maWxlKF9fRElSX18rIkFMVFJVSEUuTk9URkFMTERBVEVOIiwKKyAgICAgICAgc3ByaW50ZigiRGF0ZW4gZnVlciAlTzpcbiVPXG4iLHV1aWQsYXV0b2xvYWRlcikpOworfQorCitwcm90ZWN0ZWQgdm9pZCBzYXZlX21lKCkgeworICBpbnQgcmVzOworICAvLyBudXIgQlAgc3BlaWNoZXJuCisgIGlmICghY2xvbmVwKE1FKSkKKyAgICBzYXZlX29iamVjdChTQVZFRklMRSk7CisgIGVsc2UKKyAgeworICAgIGlmIChvYmplY3RwKGJsdWVwcmludChNRSkpKQorICAgICAgcmVzPShpbnQpYmx1ZXByaW50KE1FKS0+U3RvcmVEYXRhKHV1aWQsYXV0b2xvYWRlcik7CisgICAgZWxzZQorICAgICAgcmVzPShpbnQpbG9hZF9vYmplY3QobG9hZF9uYW1lKE1FKSktPlN0b3JlRGF0YSh1dWlkLGF1dG9sb2FkZXIpOworCisgICAgaWYgKHJlcyE9MSkKKyAgICAgIEVtZXJnZW5jeVN0b3JlKHJlcyk7IC8vIERhdGVuIGluIGVpbmVtIE5vdGZhbGwtTG9nZmlsZSBhYmxlZ2VuLgorICB9Cit9CisKKworLy8gZGllc2UgRnVua3Rpb24gd2lyZCB2b20gU2VoZXJoYXVzcmF1bSBnZXJ1ZmVuLCBzb2JhbGQgZWluIHJlYm9vdGZlc3RlcworLy8gTW9lYmVsc3R1ZWNrIGVyemV1Z3QgdW5kIGtvbmZpZ3VyaWVydCB3dXJkZS4KK3ZvaWQgcG9zdF9jcmVhdGUoKSB7CisgICAgaWYgKCFjbG9uZXAoKSkgcmV0dXJuOworCisgICAgLy8gd2VubiBqZXR6dCBrZWluIEVudjogZGVzdHJ1Y3RlbgorICAgIGlmICghb2JqZWN0cChlbnZpcm9ubWVudCgpKSkgeworICAgICAgICByZW1vdmUoMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy9iZWltIFNjaHJhbmttYXN0ZXIgcmVnaXN0cmllcmVuCisgICAgU0NIUkFOS01BU1RFUi0+UmVnaXN0ZXJDbnQoTUUsIFF1ZXJ5UHJvcCgiY250X3ZlcnNpb25fc3RkIikKKyAgICAgICsiOiIrUXVlcnlQcm9wKCJjbnRfdmVyc2lvbl9vYmoiKSwgZW52aXJvbm1lbnQoKS0+UXVlcnlPd25lcigpLAorICAgICAgIGVudmlyb25tZW50KCkpOworfQorCisvLyBkaWVzZSBGdW5rdGlvbiB3aXJkIHZvbSBTY2hyYW5rbWFzdGVyIGdlcnVmZW4sIHdlbm4gZGllc2VyIG1laW50LCBkYXNzCisvLyBkaWVzZXMgT2JqZWt0IG5ldSBlcnN0ZWxsdCB3ZXJkZW4gc29sbHRlLgoraW50IFVwZGF0ZU1lKCkKK3sKKyAgaWYgKCFjbG9uZXAoKSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKCFvYmplY3RwKGVudmlyb25tZW50KCkpKQorICAgIHJldHVybiAxOworICBvYmplY3Qgb2I9Y2xvbmVfb2JqZWN0KGxvYWRfbmFtZShNRSkpOworICBpZiAob2JqZWN0cChvYikpIHsKKyAgICBvYmplY3Qgb2xkZW52PWVudmlyb25tZW50KCk7CisgICAgLy8gVVVJRCB1ZWJlcnRyYWdlbgorICAgIG9iLT5TZXRQcm9wKEhfRlVSTklUVVJFLCB1dWlkKTsKKyAgICAvLyBoaWVyaGllciBiZXdlZ2VuLCBkYWJlaSB3ZXJkZW4gVVVJRCB1bmQgRGF0ZW4gdm9uIGRlciBuZXVlbiBUcnVoZSBtZWlzdAorICAgIC8vIGF1dG9tYXRpc2NoIGdlaG9sdC4KKyAgICBvYi0+bW92ZShvbGRlbnYsTV9OT0NIRUNLKTsKKyAgICAvLyBqZXR6dCBlcnN0IHBvc3RfY3JlYXRlKCkgcnVmZW4hCisgICAgb2ItPnBvc3RfY3JlYXRlKCk7CisgICAgLy8gZGllc2VzIE9iamVrdCByYXVzYmV3ZWdlbiAoZGFtaXQgZGFzIFNlaGVyaGF1cyBlcyBhdXN0cmFlZ3QpLgorICAgIG1vdmUoIi9yb29tL3ZvaWQiLE1fTk9DSEVDSyk7CisgICAgLy8gU2VoZXJoYXVzcmF1bSBzcGVpY2hlcm4gKGtvZW5udGUgdGV1ZXIgc2VpbiEpCisgICAgb2xkZW52LT5TYXZlKDEpOworICAgIC8vIHNlbGJzdHplcnN0b2VyZW4KKyAgICAvLyBfX0lOVF9NQVhfXyBiZWRldXRldDogbmljaHQgc3BlaWNoZXJuLCBkaWUgbmV1ZSBUcnVoZSBoYXQgZGllIGRhdGVuCisgICAgLy8gc2Nob24gYXVzIGRlciBCUCBhYmdlZnJhZ3QuCisgICAgcmVtb3ZlKF9fSU5UX01BWF9fKTsKKyAgfQorICByZXR1cm4oMSk7Cit9CisKKy8vIGJlaSBTZWxic3R6ZXJzdG9lcnVuZyBzcGVpY2hlcm4gYnp3LiBEYXRlbiBhbiBkaWUgQmx1ZXByaW50IHVlYmVybWl0dGVsbgorLy8gdW5kIGJlaW0gU2NocmFua21hc3RlciBhYm1lbGRlbi4KK3ZhcmFyZ3MgaW50IHJlbW92ZShpbnQgc2lsZW50KSB7CisgIHN0cmluZyB1aWQ9IiI7CisKKyAgLy8gQmx1ZXByaW50IHNwZWljaGVybiBpbSBTYXZlZmlsZSwgQ2xvbmVzIHVlYmVydHJhZ2VuIGRpZSBEYXRlbiBoaWVyIGFuIGRpZQorICAvLyBCbHVlcHJpbnQuIENsb25lcyBudXIsIHdlbm4gbmljaHQgX19JTlRfTUFYX18gdWViZXJnZWJlbiB3dXJkZS4KKyAgaWYgKHNpbGVudCE9X19JTlRfTUFYX18gfHwgIWNsb25lcCgpKQorICAgIHNhdmVfbWUoKTsKKworICBpZiAoY2xvbmVwKCkpIHsKKyAgICAvLyBDbG9uZSBtZWxkZW4gc2ljaCBiZWltIFNjaHJhbmttYXN0ZXIgYWIuCisgICAgaWYgKG9iamVjdHAoZW52aXJvbm1lbnQoKSkpIHsKKyAgICAgICAgdWlkPWVudmlyb25tZW50KCktPlF1ZXJ5T3duZXIoKTsKKyAgICB9CisgICAgLy9iZWltIFNjaHJhbmttYXN0ZXIgZGVyZWdpc3RyaWVyZW4KKyAgICBTQ0hSQU5LTUFTVEVSLT5SZW1vdmVDbnQoTUUsdWlkKTsKKyAgfQorICByZXR1cm4oOjpyZW1vdmUoc2lsZW50KSk7Cit9CisKKy8vICoqKioqKioqKioqKioqKioqIE5VUiBCTFVFUFJJTlRTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyBuZXVlbiBBdXRvbG9hZGVyIHp1bGFzc2VuIChudXIgRU0rISkKK3ZhcmFyZ3MgaW50IEFkZEF1dG9sb2FkZXIoc3RyaW5nIHBhdGgsc3RyaW5nIG5hbSkgeworICBvYmplY3Qgb2I7CisgIGlmIChjbG9uZXAoTUUpKSByZXR1cm4gMDsKKyAgaWYgKCFzdHJpbmdwKHBhdGgpIHx8ICFzaXplb2YocGF0aCkpIHJldHVybiAtMTsKKyAgaWYgKCFBQ0NFU1MpIHJldHVybiAtMjsKKyAgLy9pZiAoIUFSQ0hfU0VDVVJJVFkpIHJldHVybiAtMjsKKyAgaWYgKG1lbWJlcih3aGl0ZWxpc3QscGF0aCkpIHJldHVybiAtMzsKKyAgaWYgKGNhdGNoKG9iPWxvYWRfb2JqZWN0KHBhdGgpO3B1Ymxpc2gpCisgICAgICB8fCAhb2JqZWN0cChvYikpCisgICAgICByZXR1cm4gLTQ7CisgIC8vIHdlbm4gTmFtZSBuaWNodCBhbmdlZ2ViZW4gdW5kIGF1Y2ggbmljaHQgYXVzIEJQIGVybWl0dGVsYmFyOiBBYmJydWNoLgorICBpZiAoIXN0cmluZ3AobmFtKSB8fCAhc2l6ZW9mKG5hbSkpIHsKKyAgICAgIG5hbT1vYi0+bmFtZShXRVIsMCk7CisgICAgICBpZiAoIXN0cmluZ3AobmFtKSB8fCAhc2l6ZW9mKG5hbSkpIHJldHVybiAtNTsKKyAgfQorICBJVEVNTE9HKHNwcmludGYoIiVzIGVybGF1YnQ6ICVzICglcylcbiIsZ2V0dWlkKHRoaXNfaW50ZXJhY3RpdmUoKSksCisgICAgICAgICAgcGF0aCxuYW0pKTsKKyAgd2hpdGVsaXN0Kz0oW3BhdGg6Y2FwaXRhbGl6ZShuYW0pXSk7CisgIGlmIChtZW1iZXIodm9yc2NobGFlZ2UscGF0aCkpCisgICAgbV9kZWxldGUodm9yc2NobGFlZ2UscGF0aCk7CisgIHNhdmVfbWUoKTsKKyAgcmV0dXJuKDEpOworfQorCisvLyBBdXRvbG9hZGVyIGF1cyBFcmxhdWJuaXNsaXN0ZSBlbnRmZXJuZW4gKG51ciBFTSshKQoraW50IFJlbW92ZUF1dG9sb2FkZXIoc3RyaW5nIHBhdGgpIHsKKyAgaWYgKGNsb25lcChNRSkpIHJldHVybiAwOworICBpZiAoIXN0cmluZ3AocGF0aCkgfHwgIXNpemVvZihwYXRoKSkgcmV0dXJuIC0xOworICBpZiAoIUFDQ0VTUykgcmV0dXJuIC0yOworICAvL2lmICghQVJDSF9TRUNVUklUWSkgcmV0dXJuIC0yOworICBpZiAoIW1lbWJlcih3aGl0ZWxpc3QscGF0aCkpIHJldHVybiAtMzsKKyAgSVRFTUxPRyhzcHJpbnRmKCIlcyB3aWRlcnJ1ZnQgRXJsYXVibmlzOiAlcyAoJXMpXG4iLGdldHVpZCh0aGlzX2ludGVyYWN0aXZlKCkpLAorICAgICAgICAgIHBhdGgsd2hpdGVsaXN0W3BhdGhdKSk7CisgIHdoaXRlbGlzdC09KFtwYXRoXSk7CisgIHNhdmVfbWUoKTsKKyAgcmV0dXJuKDEpOworfQorCisvLyBlcmxhdWJ0ZSBBdXRvbG9hZGVyIGFiZnJhZ2VuCittYXBwaW5nIFF1ZXJ5QXV0b2xvYWRlcigpIHsKKyAgcmV0dXJuKGNvcHkod2hpdGVsaXN0KSk7Cit9CisKKy8vIG5ldWVuIEF1dG9sb2FkZXIgaW4gQmxhY2tsaXN0IGVpbnRyYWdlbiAobnVyIEVNKyEpCit2YXJhcmdzIGludCBBZGRCbGFja2xpc3Qoc3RyaW5nIHBhdGgsIHN0cmluZyBuYW0pIHsKKyAgb2JqZWN0IG9iOworICBpZiAoY2xvbmVwKE1FKSkgcmV0dXJuIDA7CisgIGlmICghc3RyaW5ncChwYXRoKSB8fCAhc2l6ZW9mKHBhdGgpKSByZXR1cm4gLTE7CisgIGlmICghQUNDRVNTKSByZXR1cm4gLTI7CisgIC8vaWYgKCFBUkNIX1NFQ1VSSVRZKSByZXR1cm4gLTI7CisgIAorICBpZiAobWVtYmVyKGJsYWNrbGlzdCxwYXRoKSkgcmV0dXJuIC0zOworCisgIGlmIChjYXRjaChvYj1sb2FkX29iamVjdChwYXRoKTtwdWJsaXNoKQorICAgICAgfHwgIW9iamVjdHAob2IpKQorICAgICAgcmV0dXJuIC00OworICAvLyB3ZW5uIE5hbWUgbmljaHQgYW5nZWdlYmVuIHVuZCBhdWNoIG5pY2h0IGF1cyBCUCBlcm1pdHRlbGJhcjogQWJicnVjaC4KKyAgaWYgKCFzdHJpbmdwKG5hbSkgfHwgIXNpemVvZihuYW0pKSB7CisgICAgICBuYW09b2ItPm5hbWUoV0VSLDApOworICAgICAgaWYgKCFzdHJpbmdwKG5hbSkgfHwgIXNpemVvZihuYW0pKSByZXR1cm4gLTU7CisgIH0KKyAgLy8gZ2dmLiBlcmxhdWJ0ZW4gZW50ZmVybmVuLgorICBpZiAobWVtYmVyKHdoaXRlbGlzdCxwYXRoKSkKKyAgICBSZW1vdmVBdXRvbG9hZGVyKHBhdGgpOworICBJVEVNTE9HKHNwcmludGYoIiVzIHZlcmJpZXRldDogJXMgKCVzKVxuIixnZXR1aWQodGhpc19pbnRlcmFjdGl2ZSgpKSwKKyAgICAgICAgICBwYXRoLG5hbSkpOworCisgIGJsYWNrbGlzdCs9KFtwYXRoOmNhcGl0YWxpemUobmFtKV0pOworCisgIGlmIChtZW1iZXIodm9yc2NobGFlZ2UscGF0aCkpCisgICAgbV9kZWxldGUodm9yc2NobGFlZ2UscGF0aCk7CisKKyAgc2F2ZV9tZSgpOworICByZXR1cm4oMSk7Cit9CisKKy8vIEF1dG9sb2FkZXIgYXVzIEJsYWNrbGlzdCBlbnRmZXJuZW4gKG51ciBFTSshKQoraW50IFJlbW92ZUJsYWNrbGlzdChzdHJpbmcgcGF0aCkgeworICBpZiAoY2xvbmVwKE1FKSkgcmV0dXJuIDA7CisgIGlmICghc3RyaW5ncChwYXRoKSB8fCAhc2l6ZW9mKHBhdGgpKSByZXR1cm4gLTE7CisgIGlmICghQUNDRVNTKSByZXR1cm4gLTI7CisgIC8vaWYgKCFBUkNIX1NFQ1VSSVRZKSByZXR1cm4gLTI7CisgIGlmIChtZW1iZXIoYmxhY2tsaXN0LHBhdGgpPT0tMSkgcmV0dXJuIC0zOworICBJVEVNTE9HKHNwcmludGYoIiVzIGxvZXNjaHQ6ICVzICglcykgdm9uIEJsYWNrbGlzdFxuIixnZXR1aWQodGhpc19pbnRlcmFjdGl2ZSgpKSwKKyAgICAgICAgICBwYXRoLGJsYWNrbGlzdFtwYXRoXSkpOworICBibGFja2xpc3QtPShbcGF0aF0pOworICBzYXZlX21lKCk7CisgIHJldHVybigxKTsKK30KKworLy8gZ2VzcGVycnRlIEF1dG9sb2FkZXIgYWJmcmFnZW4KK21hcHBpbmcgUXVlcnlCbGFja2xpc3QoKSB7CisgIHJldHVybihjb3B5KGJsYWNrbGlzdCkpOworfQorCisvLyB2b3JzY2hsYWVnZSBhYmZyYWdlbgordmFyYXJncyBtaXhlZCBRdWVyeVZvcnNjaGxhZWdlKGludCBmb3JtYXQpIHsKKyAgc3RyaW5nIHJlcz0iXG4iOworICBpZiAoIWZvcm1hdCkgcmV0dXJuKGNvcHkodm9yc2NobGFlZ2UpKTsKKworICBmb3JlYWNoKHN0cmluZyBvbmFtZSwgc3RyaW5nIG5hbSwgc3RyaW5nIHNoOiB2b3JzY2hsYWVnZSkgeworICAgIHJlcys9c3ByaW50ZigiJS43OHM6XG4gICAlLjM3cywlLjM3c1xuIixvbmFtZSxuYW0sc2gpOyAKKyAgfQorCisgIGlmIChmb3JtYXQ9PTIgJiYgb2JqZWN0cChQTCkpCisgICAgdGVsbF9vYmplY3QoUEwscmVzKTsKKyAgZWxzZQorICAgIHJldHVybiByZXM7CisgIHJldHVybiAwOworfQorCisvLyBXaXJkIGRpZXNlIGZ1bmt0aW9uIGluIGRlciBCbHVlcHJpbnQgZ2VydWZlbiwgbGllZmVydCBzaWUgZGllIERhdGVuIGZ1ZXIKKy8vIGVpbmUgVHJ1aGUgbWl0IGRpZXNlciBVVUlEIHp1cnVlY2suIEFiZXIgbnVyIGRhbm4sIHdlbm4gZGllIGF1Y2ggdm9uIGVpbmVyCisvLyB0cnVoZSBhYmdlcnVmZW4gd2lyZCB1bmQga2VpbmVtIGJlbGllYmlnZW4gYW5kZXJlbiBPYmpla3Qgb2RlciB3ZW5uIGVpbiBFTQorLy8gYWJmcmFndC4KK21hcHBpbmcgR2V0RGF0YShzdHJpbmcgdWlkKSB7CisgIGlmIChjbG9uZXAoTUUpKSByZXR1cm4gMDsKKyAgaWYgKGV4dGVybl9jYWxsKCkpCisgIHsKKyAgICBpZiAoIW9iamVjdHAocHJldmlvdXNfb2JqZWN0KCkpKSByZXR1cm4gMDsKKyAgICBpZiAoYmx1ZXByaW50KHByZXZpb3VzX29iamVjdCgpKSAhPSBNRQorICAgICAgICAmJiBsb2FkX25hbWUocHJldmlvdXNfb2JqZWN0KCkpICE9IF9fRklMRV9fWy4uPDNdCisgICAgICAgICYmICFBQ0NFU1MpCisgICAgICAgIHJldHVybigwKTsKKyAgfQorICBpZiAoIXN0cmluZ3AodWlkKSkgcmV0dXJuIChbXSk7CisKKyAgaWYgKCFtZW1iZXIoZGF0YSwgdWlkKSkKKyAgICBkYXRhW3VpZF0gPSBtX2FsbG9jYXRlKDEsMyk7CisKKyAgLy8gQWJzaWNodGxpY2gga2VpbmUgS29waWUsIGRhbWl0IGRpZSBUcnVoZW4gKGZhbGxzIGplbWFuZCBtZWhyZXJlIGthdWZ0KQorICAvLyBzaWNoIGFsbGUgZWluZSBLb3BpZSBkZXMgTWFwcGluZ3MgdGVpbGVuLgorICByZXR1cm4gZGF0YVt1aWRdOworfQorCisvLyBMb2VzdCBkaWUgU3BlaWNoZXJ1bmcgZGVyIERhdGVuIGltIFNhdmVmaWxlIGF1cywgZGVubiBpcmdlbmR3ZWxjaGUgRGF0ZW4KKy8vIGhhYmVuIHNpY2ggaW4gZWluZW0gQ2xvbmUgZ2VhZW5kZXJ0LCB3ZWxjaGUgbm9jaCBhdWYgZGllIFBsYXR0ZSBtdWVzc2VuLgorLy8gRGllc2UgRnVua3Rpb24gc3BlaWNoZXJ0ZSBmcnVlaGVyIERhdGVuIGF1cyBkZW4gQ2xvbmVzIHdpZWRlciBpbSBNYXBwaW5nCisvLyBkZXMgTWFzdGVycyAoZGVyIEJsdWVwcmludCkuIERpZXMgaXN0IGhldXRlIG5pY2h0IG1laHIgc28sIHdlaWwgYWxsZSBUcnVoZW4KKy8vIChlaW5lcyBCZW51dHplcnMpIHNpY2ggZGF0YVt1aWRdIHRlaWxlbi4gRGFoZXIgd2lyZCBoaWVyIGVpbiBGZWhsZXIKKy8vIGF1c2dlbG9lc3QsIHdlbm4gZXMgdm9uIGVpbmVyIFRydWhlIGVpbiBNYXBwaW5nIGtyaWVndCwgd2VsY2hlcyBuaWNodAorLy8gaWRlbnRpc2NoICghKSBtaXQgZGVtIGRhdGFbdWlkXSBpc3QuCisvLyBsaWVmZXJ0IDAgaW0gRmVobGVyZmFsbCEKK2ludCBTdG9yZURhdGEoc3RyaW5nIHVpZCwgbWFwcGluZyB0bXApIHsKKworICBpZiAoY2xvbmVwKE1FKSkgcmV0dXJuIDA7CisKKyAgLy8gQWJlciBudXIgZGFubiwgd2VubiBkaWUgYXVjaCB2b24gZWluZXIgdHJ1aGUgYWJnZXJ1ZmVuIHdpcmQgdW5kIGtlaW5lbQorICAvLyBiZWxpZWJpZ2VuIGFuZGVyZW4gT2JqZWt0IG9kZXIgd2VubiBlaW4gRU0gc2V0enQuCisgIGlmIChleHRlcm5fY2FsbCgpKQorICB7CisgICAgaWYgKCFvYmplY3RwKHByZXZpb3VzX29iamVjdCgpKSkKKyAgICAgIHJldHVybiAwOworICAgIGlmIChibHVlcHJpbnQocHJldmlvdXNfb2JqZWN0KCkpICE9IE1FIAorICAgICAgICAmJiBsb2FkX25hbWUocHJldmlvdXNfb2JqZWN0KCkpICE9IF9fRklMRV9fWy4uPDNdCisgICAgICAgICYmICFBQ0NFU1MpCisgICAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIXN0cmluZ3AodWlkKSB8fCAhbWFwcGluZ3AodG1wKSkKKyAgICByZXR1cm4oMCk7CisKKyAgLy8gdG1wIG11c3MgYXVmIF9kYXNzZWxiZV8gTWFwcGluZyB6ZWlnZW4gd2llIGRhdGFbdWlkXS4gV2VubiBkYXMgbmljaHQgZGVyCisgIC8vIEZhbGwgaXN0LCBpc3Qgd2FzIHNjaGllZmdlbGF1ZmVuLiBKZWRlbmZhbGxzIHdpcmQgZGFubiBoaWVyIG5lbiBGZWhsZXIKKyAgLy8gYXVzZ2Vsb2VzdC4KKyAgaWYgKHRtcCAhPSBkYXRhW3VpZF0pCisgIHsKKy8vICAgIGlmKHByb2dyYW1fdGltZShwcmV2aW91c19vYmplY3QoKSkgPCAxNDAwNTI1Njk0KQorLy8gICAgICBkYXRhW3VpZF09dG1wOworLy8gICAgZWxzZQorICAgICAgcmFpc2VfZXJyb3IoIlN0b3JlRGF0YSgpIGdlcnVmZW4gdW5kIERhdGVuIHNpbmQgbmljaHQgaWRlbnRpc2NoICIKKyAgICAgICAgICAibWl0IGRlbiBiZXJlaXRzIGJla2FubnRlbi5cbiIpOworICB9CisKKyAgLy8gQWJzaWNodGxpY2gga2VpbmUgS29waWUsIGRhbWl0IHNpY2ggYWxsZSBUcnVoZW4gZGFzIE1hcHBpbmcgdGVpbGVuLgorICAvL2RhdGFbdWlkXT10bXA7CisKKyAgLy8gU2F2ZWZpbGUgbXVzcyBuYXR1ZXJsaWNoIGdlc2NocmllYmVuIHdlcmRlbiwgZnVlciBkZW4gbmFlY2hzdGVuIFJlYm9vdC4KKyAgaWYgKGZpbmRfY2FsbF9vdXQoIydzYXZlX21lKT09LTEpCisgICAgICBjYWxsX291dCgjJ3NhdmVfbWUsMTApOyAvLyBTcGVpY2hlcnZvcmdhZW5nZSBnZ2YuIHNhbW1lbG4gKHVwZCAtYXIgLi4uKQorICByZXR1cm4oMSk7Cit9CisKKy8vIE1haW50YWluZXIgdWViZXIgVHJ1aGVudm9yc2NobGFlZ2UgaW5mb3JtaWVyZW4KK3ZvaWQgcmVzZXQoKSB7CisKKyAgaWYgKGNsb25lcCgpIHx8ICFzaXplb2Yodm9yc2NobGFlZ2UpKSB7CisgICAgLy8gb2huZSBWb3JzY2hsYWVnZSBpc3QgYXVjaCBrZWluIHJlc2V0IG5vZXRpZy4KKyAgICBzZXRfbmV4dF9yZXNldCgtMSk7CisgICAgcmV0dXJuOworICB9CisgIHNldF9uZXh0X3Jlc2V0KDEyMDAwKTsgLy8gYWxsZSAzLTRoIHJlaWNodC4KKyAgZm9yZWFjaChzdHJpbmcgdWlkOiBNQUlOVEFJTkVSKSB7CisgICAgb2JqZWN0IHBsPWZpbmRfcGxheWVyKHVpZCk7CisgICAgaWYgKG9iamVjdHAocGwpICYmIHF1ZXJ5X2lkbGUocGwpIDwgMTgwMCkKKyAgICAgIHRlbGxfb2JqZWN0KHBsLEJTKCJFcyBnaWJ0IG5ldWUgT2JqZWt0dm9yc2NobGFlZ2UgZnVlciBkaWUgIgorICAgICAgICAiQXV0b2xvYWRlcnRydWhlLiBCaXR0IHNjaGF1IGRhIGRvY2ggYmVpIEdlbGVnZW5oZWl0IG1hbCBkcnVlYmVyLiIpKTsKKyAgfQorfQorCisKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8gKioqKioqKioqKioqKioqKiBTT05TVElHRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvLyAqc2V1ZnoqCisvLyBzZWN1cmVfbGV2ZWwoKSBhdXMgZGVyIHNpbXVsX2VmdW4gaXN0IGhpZXIgbW9tZW50YW4gbmljaHQgYnJhdWNoYmFyLCB3ZWlsCisvLyBkb3J0IGF1Y2ggcC9zZWhlci9tb2ViZWwvYXV0b2xvYWRlcnRydWhlIGluIGRlciBDYWxsZXJrZXR0ZSBzdGVodCB1bmQgZGFzCisvLyBlaW4gbGV2bGUgdm9uIDAgaGF0LiAqc2V1ZnoqCitub21hc2sgcHJpdmF0ZSBpbnQgbXlfc2VjdXJlX2xldmVsKCkgeworICBpbnQgKmxldmVsOworICAvL2tldHRlIGRlciBDYWxsZXIgZHVyY2hsYXVmZW4sIGRlbiBuaWVkcmlnc3RlbiBMZXZlbCBpbiBkZXIgS2V0dGUKKyAgLy96dXJ1ZWNrZ2ViZW4uIFplcnN0b2VydGUgT2JqZWt0ZSAoU2VsYnN0emVyc3RvZXJlcikgZnVlaHJlbiB6dXIgUnVlY2tnYWJlCisgIC8vdm9uIDAuCisgIC8vY2FsbGVyX3N0YWNrKDEpIGZ1ZWd0IGRlbSBSdWVja2dhYmVhcnJheSB0aGlzX2ludGVyYWN0aXZlKCkgaGluenUgYnp3LiAwLAorICAvL3dlbm4gZXMga2VpbmVuIEludGVyYWN0aXZlIGdpYnQuIERpZSAwIGZ1ZWhydCBkYW5uIHdpZSBiZWkgemVyc3RvZXJ0ZW4KKyAgLy9PYmpla3RlbiB6dXIgUnVlY2tnYWJlIHZvbiAwLCB3YXMgZ2V3dWVuc2NodCBpc3QsIGRhIGVzIGhpZXIgZWluZW4KKyAgLy9JTnRlcmFjdGl2ZSBnZWJlbiBtdXNzLgorICBsZXZlbD1tYXAoY2FsbGVyX3N0YWNrKDEpLGZ1bmN0aW9uIGludCAob2JqZWN0IGNhbGxlcikKKyAgICAgIHtpZiAob2JqZWN0cChjYWxsZXIpKQorICAgICAgICByZXR1cm4ocXVlcnlfd2l6X2xldmVsKGdldGV1aWQoY2FsbGVyKSkpOworICAgICAgIHJldHVybigwKTsgLy8ga2VpbiBPYmpla3QgZGEsIDAuCisgICAgICB9ICk7CisgIHJldHVybihtaW4obGV2ZWwpKTsgLy9kZW4ga2xlaW5zdGVuIFdlcnQgaW0gQXJyYXkgenVydWVja2dlYmVuIChnZ2YuIDApCit9CisKKworLy8gZGVidWdrcmFtCittaXhlZCBfcXVlcnlfY29udGVudCgpIHsKKyAgLy9kZWVwX2NvcHksIGRhbWl0IG5pY2h0IGplbWFuZCBlaW5mYWNoIHNvIGFuIGRlbiBEYXRlbiBydW1iYXN0ZWxuIGthbm4uCisgIHJldHVybihkZWVwX2NvcHkoYXV0b2xvYWRlcikpOworfQorCittaXhlZCBfcXVlcnlfb3duZXIoKSB7CisgIHJldHVybih1dWlkKTsKK30KKworaW50IERlbGV0ZURhdGEoc3RyaW5nIHVpZCkgeworICBpZiAoY2xvbmVwKE1FKSkgcmV0dXJuIDA7CisgIGlmICghc3RyaW5ncCh1aWQpIHx8ICFzaXplb2YodWlkKSkgcmV0dXJuIC0xOworICBpZiAoIUFDQ0VTUykgcmV0dXJuIC0yOworICAvL2lmICghQVJDSF9TRUNVUklUWSkgcmV0dXJuIC0yOworICBtX2RlbGV0ZShkYXRhLHVpZCk7CisgIHNhdmVfbWUoKTsKKyAgcmV0dXJuKDEpOworfQorCittaXhlZCB0ZXN0ZnVuKCkge3JldHVybiAiYmluIGRhXG4iO30KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9rbGVpZGVyc2NocmFuay5jIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9rbGVpZGVyc2NocmFuay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MjA5YjQKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2tsZWlkZXJzY2hyYW5rLmMKQEAgLTAsMCArMSwyMDggQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5hbWUgZGVzIE9iamVjdHM6ICAgIEtsZWlkZXJzY2hyYW5rCisvLyBMZXR6dGUgQWVuZGVydW5nOiAgICAxNy4wMy4yMDAxCisvLyBNYWdpZXI6ICAgICAgICAgICAgICBTd2lmdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCisjaW5jbHVkZSA8YW5zaS5oPgoraW5oZXJpdCBMQURFTigic3dpZnRfc3RkX2NvbnRhaW5lciIpOworCisjZGVmaW5lIFZFUlNJT05fT0JKICIzIgorCitzdHJpbmcgc3RyYWxsOworCitwcm90ZWN0ZWQgdm9pZCBjcmVhdGUoKQoreworICBpZiAoIWNsb25lcChUTykpIHJldHVybjsKKyAgc3dpZnRfc3RkX2NvbnRhaW5lcjo6Y3JlYXRlKCk7CisgIFNldFByb3AoUF9TSE9SVCwgIkVpbiBLbGVpZGVyc2NocmFuayIpOworICBTZXRQcm9wKFBfTE9ORywgQlMoCisgICAgICJJbiBkaWVzZW0gbWFzc2l2ZW4gSG9senNjaHJhbmsga2FubnN0IER1IGRpZSBBdXNydWVzdHVuZyBmdWVyIGVpbmUgIgorICAgICsiaGFsYmUgQXJtZWUgdW50ZXJicmluZ2VuLiBNZWhyZXJlIFJlZ2FsZSBzb3JnZW4gZGFmdWVyLCBkYXNzIGFsbGVzICIKKyAgICArInNlaW5lbiBnZW9yZG5ldGVuIFBsYXR6IGZpbmRldCwgZGFtaXQgRHUgZXMgYXVjaCBzY2huZWxsICIKKyAgICArIndpZWRlcmZpbmRlc3QuIikrIkBAY250X3N0YXR1c0BAIik7CisgIEFkZElkKCh7ImtsZWlkZXJzY2hyYW5rIiwgImhvbHpzY2hyYW5rIiwgInNjaHJhbmsifSkpOworICBTZXRQcm9wKCJjbnRfdmVyc2lvbl9vYmoiLCBWRVJTSU9OX09CSik7CisgIFNldFByb3AoUF9OQU1FLCAiS2xlaWRlcnNjaHJhbmsiKTsKKyAgU2V0UHJvcChQX0dFTkRFUiwgTUFMRSk7CisgIFNldFByb3AoUF9XRUlHSFQsIDUwMDApOyAgICAgICAgIC8vIEdld2ljaHQgNSBLZworICBTZXRQcm9wKFBfTUFYX1dFSUdIVCwgMTAwMDAwMCk7ICAvLyBFcyBwYXNzZW4gZnVlciAxMDAwIGtnIFNhY2hlbiByZWluLgorICBTZXRQcm9wKFBfV0VJR0hUX1BFUkNFTlQsIDEwMCk7ICAvLyBEYWZ1ZXIgbWFjaHQgZXIgYXVjaCBuaXggbGVpY2h0ZXIgOikKKyAgU2V0UHJvcChQX01BWF9PQkpFQ1RTLCAxMDApOyAgICAgLy8gTWVociBzb2xsdGUgbmljaHQgc2VpbiwgbHQuIFRpYW1hay4KKyAgU2V0UHJvcChQX1ZBTFVFLCAwKTsgICAgICAgICAgICAgLy8gS2VpbiBtYXRlcmllbGxlciBXZXJ0LiBJc3QgZWggbmljaHQgdmVya2F1ZmJhci4KKyAgU2V0UHJvcChQX05PQlVZLCAxKTsgICAgICAgICAgICAgLy8gV2lyZCBpbSBMYWRlbiB6ZXJzdG9lcnQsIGZhbGxzIGVyIHZlcmthdWZ0IHdpcmQuCisgIFNldFByb3AoUF9OT0dFVCwgIkRhcyBnZWh0IG5pY2h0LiAiK05hbWUoV0VSLDEpKyIgaGFmdGV0IHdpZSBtYWdpc2NoIGFtIEJvZGVuLlxuIik7CisgIFNldFByb3AoUF9NQVRFUklBTCwgKHtNQVRfTUlTQ19XT09ELCBNQVRfTUlTQ19NQUdJQ30pICk7CisgIFNldFByb3AoUF9JTkZPLCAiVmVyc3VjaHMgbWFsIG1pdDogXCJza29tbWFuZG9zICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXCIgIVxuIik7CisgIFNldFByb3AoIm9ial9jbWQiLCAic2xpc3RlIFtPYmpla3QtSWRdIFtLbGVpZHVuZ3MtL1J1ZXN0dW5nc3R5cHxcImFsbGVzXCJdXG4iCisgICAgICAgICAgICAgICAgICAgICsiICBLbGVpZHVuZ3MtL1J1ZXN0dW5nc3R5cGVuOiBIZWxtZSwgVW1oYWVuZ2UsIFJ1ZXN0dW5nZW4sIEhvc2VuLCBTY2h1aGUsXG4iCisgICAgICAgICAgICAgICAgICAgICsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kc2NodWhlLCBHdWVydGVsLCBBbXVsZXR0ZSwgUmluZ2UsIEtvZWNoZXIsXG4iCisgICAgICAgICAgICAgICAgICAgICsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hpbGRlLCBTb25zdGlnZXNcbiIpOworICBBRCgoeyJyZWdhbCIsICJyZWdhbGUifSksIEJTKCJEdXJjaCBkaWUgUmVnYWxlIGtvbW10IGV0d2FzIE9yZG51bmcgaW4gZGllICIKKyAgICArInZpZWxlbiBTYWNoZW4sIGRpZSBtYW4gaW4gZGVuIFNjaHJhbmsgc3RlY2tlbiBrYW5uLiBEdSBrYW5uc3QgRGlyIHouQi4gIgorICAgICsiZWluZSBMaXN0ZSBiZXN0aW1tdGVyIEtsZWlkdW5ncy0vUnVlc3R1bmdzdHlwZW4gZGVzIFNjaHJhbmtpbmhhbHRlcyAiCisgICAgKyJtaXQgZGVtIEJlZmVobCBcInNsaXN0ZVwiIGFuc2NoYXVlbi4gKERhcyBnZWh0IG5hdHVlcmxpY2ggbnVyIGJlaSAiCisgICAgKyJvZmZlbmVtIFNjaHJhbmshIikpOworCisgIEFkZENtZCgoeyJzbGlzdGUifSksICJhdWZsaXN0dW5nIik7Cit9CisKK3ZhcmFyZ3MgaW50IFByZXZlbnRJbnNlcnQob2JqZWN0IG9iKQoreworICAvLyBOdXIgUnVlc3R1bmcvS2xlaWR1bmcgaGF0IGluIGRpZXNlbSBDb250YWluZXIgd2FzIHZlcmxvcmVuIQorICBpZiAoKG9iLT5Jc0Nsb3RoaW5nKCkgfHwgb2ItPlF1ZXJ5UHJvcChQX0FSTU9VUl9UWVBFKSkKKyAgICAgICYmICFvYi0+UXVlcnlQcm9wKFBfV0VBUE9OX1RZUEUpICkKKyAgeworICAgIHJldHVybiA6OlByZXZlbnRJbnNlcnQob2IpOworICB9CisKKyAgd3JpdGUoIEJTKCJJbiAiK25hbWUoV0VOLDEpKyIga2FubnN0IER1IG51ciBSdWVzdHVuZ3MtL0tsZWlkdW5nc3N0dWVja2UgbGVnZW4hIikpOworICByZXR1cm4gMTsKK30KKworaW50IGF1Zmxpc3R1bmcyKHN0cmluZyB3YXMsIHN0cmluZyBuZl9zdHIxLCBzdHJpbmcgbmZfc3RyMiwgaW50IGFsbGVzKQoreworICBzdHJpbmcgb2JzaG9ydCwgc3VjaGUsICpzdHJzOworICBvYmplY3QgKm9iczsKKyAgaW50IGk7CisgIG1hcHBpbmcgc3VjaG9iczsKKyAgc3dpdGNoKHdhcykKKyAgeworICAgIGNhc2UgImhlbG1lIiAgICAgIDogc3VjaGU9QVRfSEVMTUVUOyBicmVhazsKKyAgICBjYXNlICJ1bWhhZW5nZSIgICA6IHN1Y2hlPUFUX0NMT0FLOyBicmVhazsKKyAgICBjYXNlICJydWVzdHVuZ2VuIiA6IHN1Y2hlPUFUX0FSTU9VUjsgYnJlYWs7CisgICAgY2FzZSAiaG9zZW4iICAgICAgOiBzdWNoZT1BVF9UUk9VU0VSUzsgYnJlYWs7CisgICAgY2FzZSAic2NodWhlIiAgICAgOiBzdWNoZT1BVF9CT09UOyBicmVhazsKKyAgICBjYXNlICJoYW5kc2NodWhlIiA6IHN1Y2hlPUFUX0dMT1ZFOyBicmVhazsKKyAgICBjYXNlICJndWVydGVsIiAgICA6IHN1Y2hlPUFUX0JFTFQ7IGJyZWFrOworICAgIGNhc2UgImFtdWxldHRlIiAgIDogc3VjaGU9QVRfQU1VTEVUOyBicmVhazsKKyAgICBjYXNlICJyaW5nZSIgICAgICA6IHN1Y2hlPUFUX1JJTkc7IGJyZWFrOworICAgIGNhc2UgImtvZWNoZXIiICAgIDogc3VjaGU9QVRfUVVJVkVSOyBicmVhazsKKyAgICBjYXNlICJzY2hpbGRlIiAgICA6IHN1Y2hlPUFUX1NISUVMRDsgYnJlYWs7CisgICAgY2FzZSAic29uc3RpZ2VzIiAgOiBzdWNoZT1BVF9NSVNDOyBicmVhazsKKyAgICBkZWZhdWx0ICAgICAgICAgICA6IHdyaXRlKCJGZWhsZXI6IFVuZ3VlbHRpZ2VyIEtsZWlkdW5ncy0vUnVlc3R1bmdzdHlwLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiRm9sZ2VuZGUgVHlwZW4gZ2lidCBlczpcbiIrbmZfc3RyMStuZl9zdHIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOyBicmVhazsKKyAgfQorICBvYnM9YWxsX2ludmVudG9yeSgpOworICBzdWNob2JzPShbXSk7CisgIGZvcihpPTA7aTxzaXplb2Yob2JzKTtpKyspCisgIHsKKyAgICBvYnNob3J0PW9ic1tpXS0+UXVlcnlQcm9wKFBfU0hPUlQpOworICAgIGlmKG9ic2hvcnQ9PSJOaWNodHMgYmVzb25kZXJlcyIpIC8vIGtlaW5lIFBfU0hPUlQgPworICAgICAgb2JzaG9ydD1vYnNbaV0tPk5hbWUoV0VSKTsgICAgIC8vICAgSG9mZmVuIHdpciBtYWwgZGFzcyBkYXMgT2JqLiBuZW4gTmFtZW4gaGF0LgorICAgIGlmKG9ic1tpXS0+UXVlcnlQcm9wKFBfQVJNT1VSX1RZUEUpPT1zdWNoZSkgICAgLy8gR2VzdWNodGVyIEFybW91clR5cGUgZ2VmdW5kZW4uLi4KKyAgICB7CisgICAgICBpZihzdWNob2JzW29ic2hvcnRdKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQX1NIT1JUIGRlcyBPYmouIHNjaG9uIGltIG1hcHBpbmc/CisgICAgICB7CisgICAgICAgIGlmKCBvYnNbaV0tPlF1ZXJ5UHJvcChQX0FNT1VOVCkgKQorICAgICAgICAgIHN1Y2hvYnNbb2JzaG9ydF0rPW9ic1tpXS0+UXVlcnlQcm9wKFBfQU1PVU5UKTsgLy8gICBEYW5uIGRlbiBaYWVobGVyIHVtIEFtb3VudCBob2NoIQorICAgICAgICBlbHNlCisgICAgICAgICAgc3VjaG9ic1tvYnNob3J0XSs9MTsgICAgICAgICAgICAgICAgICAgICAvLyAgIERhbm4gZGVuIFphZWhsZXIgdW0gMSBob2NoIQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZiggb2JzW2ldLT5RdWVyeVByb3AoUF9BTU9VTlQpICkKKyAgICAgICAgICBzdWNob2JzKz0oW29ic2hvcnQ6IG9ic1tpXS0+UXVlcnlQcm9wKFBfQU1PVU5UKV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgc3VjaG9icys9KFtvYnNob3J0OiAxXSk7CisgICAgICB9CisgICAgfQorICB9CisgIHN0cnM9bV9pbmRpY2VzKHN1Y2hvYnMpOworICBpZihzaXplb2Yoc3RycykpCisgIHsKKyAgICBpZighYWxsZXMpCisgICAgeworICAgICAgc3RyYWxsKz1OYW1lKFdFUiwxKSsiIGVudGhhZWx0IGZvbGdlbmRlICIrQ0FQKHdhcykrIjpcbiI7CisgICAgICBzdHJhbGwrPSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHN0cmFsbCs9QU5TSV9CT0xEKyI9PT0gIitDQVAod2FzKSsiOlxuIitBTlNJX05PUk1BTDsKKyAgICBmb3IoaT0wO2k8c2l6ZW9mKHN0cnMpO2krKykKKyAgICB7CisgICAgICBpZihzdWNob2JzW3N0cnNbaV1dID4gMSkKKyAgICAgICAgc3RyYWxsKz1zdHJzW2ldKyIuICgiK3N1Y2hvYnNbc3Ryc1tpXV0rIilcbiI7CisgICAgICBlbHNlCisgICAgICAgIHN0cmFsbCs9c3Ryc1tpXSsiLlxuIjsKKyAgICB9CisgIH0KKyAgZWxzZQorICAgIGlmKCFhbGxlcykKKyAgICAgIHN0cmFsbCs9TmFtZShXRVIsMSkrIiBlbnRoYWVsdCBrZWluZSAiK0NBUCh3YXMpKyIhXG4iOworICByZXR1cm4gMTsKK30KKworaW50IGF1Zmxpc3R1bmcoc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nICpzdHJzLCBvYl9pZCwgd2FzLCBuZl9zdHIxLG5mX3N0cjI7CisgIHN0cmFsbD0iIjsKKyAgbmZfc3RyMT0iICAgKEhlbG1lLCBVbWhhZW5nZSwgUnVlc3R1bmdlbiwgSG9zZW4sIFNjaHVoZSwgSGFuZHNjaHVoZSxcbiIKKyAgICAgICAgICsiICAgIEd1ZXJ0ZWwsIEFtdWxldHRlLCBSaW5nZSwgS29lY2hlciwgU2NoaWxkZSwgU29uc3RpZ2VzKVxuIjsKKyAgbmZfc3RyMj0iU3ludGF4OiBzbGlzdGUgW09iamVrdC1JZF0gW0tsZWlkdW5ncy0vUnVlc3R1bmdzdHlwfFwiYWxsZXNcIl1cbiIKKyAgICAgICAgICsiQnNwLjogICBzbGlzdGUgIitRdWVyeVByb3AoUF9JRFMpWzFdKyIgIisiaGVsbWVcbiIKKyAgICAgICAgICsiICAgICAgICBzbGlzdGUgIitRdWVyeVByb3AoUF9JRFMpWzFdKyIgYWxsZXNcbiI7CisgIG5vdGlmeV9mYWlsKCJGZWhsZXI6IE9obmUgUGFyYW1ldGVyIGtsYXBwdCBkYXMgbmljaHQuXG4iK25mX3N0cjIpOworICBpZighc3RyKSByZXR1cm4gMDsKKyAgaWYocHJlc2VudChzdHIpPT1UTykgICAvLyBVZWJlcnBydWVmZSwgb2IgZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCEKKyAgeworICAgIHdyaXRlKCJGZWhsZXI6IEVzIGZlaGx0IGVpbiBLbGVpZHVuZ3MtL1J1ZXN0dW5nc3R5cC4gRm9sZ2VuZGUgVHlwZW4gZ2lidCBlczpcbiIKKyAgICAgICAgICtuZl9zdHIxK25mX3N0cjIpOworICAgIHJldHVybiAxOworICB9CisgIHN0cnM9b2xkX2V4cGxvZGUoc3RyLCAiICIpOworICBub3RpZnlfZmFpbCgiRmVobGVyOiBEdSBtdXNzdCBlaW5lIGd1ZWx0aWdlIE9iamVrdC1JZCBhbmdlYmVuIVxuIgorICAgICAgICAgICAgICtuZl9zdHIyKTsKKyAgaWYoIHNpemVvZihzdHJzKSA8IDIgKSByZXR1cm4gMDsgICAvLyBOdXIgMSBQYXIuIHVuZCBkZXIgaXN0IG5pY2h0IGRpZSBPYmpla3QtSWQKKyAgaWYoIHNpemVvZihzdHJzKSA9PSAyICkgICAvLyBBbnphaGwgUGFyLiA9IDIKKyAgeworICAgIG9iX2lkPXN0cnNbMF07CisgICAgd2FzPXN0cnNbMV07CisgICAgaWYoIElTVF9aQUhMKHdhcykgKSAgICAgLy8gT2JqZWt0LUlkIHouQi4gbWl0ICJzY2hyYW5rIDIiIGFuZ2VzcHJvY2hlbj8KKyAgICAgIGlmKHByZXNlbnQob2JfaWQrIiAiK3dhcyk9PVRPKSAgIC8vIEZhbGxzIGRpZXNlcyBPYmpla3QgZ2VtZWludCBpc3QgdW5kIGtlaW4gMy4gUGFyIQorICAgICAgeworICAgICAgICB3cml0ZSgiRmVobGVyOiBFcyBmZWhsdCBlaW4gS2xlaWR1bmdzLS9SdWVzdHVuZ3N0eXAuIEZvbGdlbmRlIFR5cGVuIGdpYnQgZXM6XG4iCisgICAgICAgICAgICAgICtuZl9zdHIxK25mX3N0cjIpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZSBpZiggc2l6ZW9mKHN0cnMpID09IDMgKQorICB7CisgICAgb2JfaWQ9c3Ryc1swXSsiICIrc3Ryc1sxXTsKKyAgICB3YXM9c3Ryc1syXTsKKyAgfQorICBlbHNlICAgICAgICAvLyBBbnphaGwgZXJmb3JkZXJsaWNoZXIgUGFyYW1ldGVyIHVlYmVyc2Nocml0dGVuIQorICAgIHJldHVybiAwOworICBpZihwcmVzZW50KG9iX2lkKSE9VE8pICAgLy8gVWViZXJwcnVlZmUsIG9iIGF1Y2ggZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCEKKyAgICByZXR1cm4gMDsKKyAgaWYoUXVlcnlQcm9wKFBfQ05UX1NUQVRVUykhPUNOVF9TVEFUVVNfT1BFTikKKyAgeworICAgIHdyaXRlKCJEYXp1IG11ZXNzdGUgIituYW1lKFdFUiwxKSsiIGdlb2VmZm5ldCBzZWluLlxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKy8vLS0tIEhpZXIgaXN0IFBhcmFtZXRlcnBydWVmdW5nIHp1IEVuZGUuCisgIHdhcz1MT1dFUih3YXMpOworICBpZih3YXMhPSJhbGxlcyIpCisgICAgYXVmbGlzdHVuZzIod2FzLCBuZl9zdHIxLCBuZl9zdHIyLCAwKTsKKyAgZWxzZQorICB7CisgICAgYXVmbGlzdHVuZzIoImhlbG1lIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoInVtaGFlbmdlIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoInJ1ZXN0dW5nZW4iLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigiaG9zZW4iLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigic2NodWhlIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoImhhbmRzY2h1aGUiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigiZ3VlcnRlbCIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJhbXVsZXR0ZSIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJyaW5nZSIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJrb2VjaGVyIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoInNjaGlsZGUiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigic29uc3RpZ2VzIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgIH0KKyAgVFAtPk1vcmUoc3RyYWxsKTsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2tvbW1vZGUuYyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwva29tbW9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTJiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2tvbW1vZGUuYwpAQCAtMCwwICsxLDQwIEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBLb21tb2RlCisvLyBMZXR6dGUgQWVuZGVydW5nOiAgICAxNy4wMy4yMDAxCisvLyBNYWdpZXI6ICAgICAgICAgICAgICBTd2lmdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCitpbmhlcml0IExBREVOKCJzd2lmdF9zdGRfY29udGFpbmVyIik7CisKKyNkZWZpbmUgVkVSU0lPTl9PQkogIjMiCisKK3Byb3RlY3RlZCB2b2lkIGNyZWF0ZSgpCit7CisgIGlmICghY2xvbmVwKFRPKSkgcmV0dXJuOworICBzd2lmdF9zdGRfY29udGFpbmVyOjpjcmVhdGUoKTsKKyAgU2V0UHJvcChQX1NIT1JULCAiRWluZSBLb21tb2RlIik7CisgIFNldFByb3AoUF9MT05HLCBCUygKKyAgICAgIkRpZXNlIHJvYnVzdGUgS29tbW9kZSBhdXMgRWljaGVuaG9seiBwYXNzdCBlaW5mYWNoIGluIGplZGVuIFJhdW0uICIKKyAgICArIk1hbiBrYW5uIGplZGUgTWVuZ2UgWmV1ZyBkYXJpbiB2ZXJzdGF1ZW4sIHVuZCBkaWUgdmllbGVuIFNjaHVibGFkZW4gIgorICAgICsibGFzc2VuIGVzIGVpbmZhY2ggdmVyc2Nod2luZGVuLiBTbyBlaW4gTW9lYmVsc3R1ZWNrIGdlaG9lcnQgZWluZmFjaCAiCisgICAgKyJpbiBqZWRlcyBIYXVzISIpKyJAQGNudF9zdGF0dXNAQCIpOworICBBZGRJZCgoeyJrb21tb2RlIn0pKTsKKyAgU2V0UHJvcCgiY250X3ZlcnNpb25fb2JqIiwgVkVSU0lPTl9PQkopOworICBTZXRQcm9wKFBfTkFNRSwgIktvbW1vZGUiKTsKKyAgU2V0UHJvcChQX0dFTkRFUiwgRkVNQUxFKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwgNTAwMCk7ICAgICAgICAgLy8gR2V3aWNodCA1IEtnCisgIFNldFByb3AoUF9NQVhfV0VJR0hULCAxMDAwMDAwKTsgIC8vIEVzIHBhc3NlbiBmdWVyIDEwMDAga2cgU2FjaGVuIHJlaW4uCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsgIC8vIERhZnVlciBtYWNodCBlciBhdWNoIG5peCBsZWljaHRlciA6KQorICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsIDEwMCk7ICAgICAvLyBNZWhyIHNvbGx0ZSBuaWNodCBzZWluLCBsdC4gVGlhbWFrLgorICBTZXRQcm9wKFBfVkFMVUUsIDApOyAgICAgICAgICAgICAvLyBLZWluIG1hdGVyaWVsbGVyIFdlcnQuIElzdCBlaCBuaWNodCB2ZXJrYXVmYmFyLgorICBTZXRQcm9wKFBfTk9CVVksIDEpOyAgICAgICAgICAgICAvLyBXaXJkIGltIExhZGVuIHplcnN0b2VydCwgZmFsbHMgZXIgdmVya2F1ZnQgd2lyZC4KKyAgU2V0UHJvcChQX05PR0VULCAiRGFzIGdlaHQgbmljaHQuICIrTmFtZShXRVIsMSkrIiBoYWZ0ZXQgd2llIG1hZ2lzY2ggYW0gQm9kZW4uXG4iKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLCAoe01BVF9PQUssIE1BVF9NSVNDX01BR0lDfSkgKTsKKyAgU2V0UHJvcChQX0lORk8sICJWZXJzdWNocyBtYWwgbWl0OiBcInNrb21tYW5kb3MgIitRdWVyeVByb3AoUF9JRFMpWzFdKyJcIiAhXG4iKTsKKworICBBRCgoeyJzY2h1YmxhZGVuIn0pLCBCUygiRXMgc2luZCB2aWVsZSwgYWJlciB6dW0gR2x1ZWNrIG11c3N0IER1IHNpZSBuaWNodCAiCisgICAgKyJlaW56ZWxuIGFuc3ByZWNoZW4uIER1IGthbm5zdCBlaW5mYWNoIGFsbGVzIGluICIrbmFtZShXRU4sMSkrIiBzdGVja2VuLiIpKTsKKyAgQUQoKHsibW9lYmVsc3R1ZWNrIn0pLCBCUyhOYW1lKFdFUiwxKSsiIGlzdCBnZW1laW50LiIpKTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwva3VlaGxzY2hyYW5rLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2t1ZWhsc2NocmFuay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZjFkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL2t1ZWhsc2NocmFuay5jCkBAIC0wLDAgKzEsNDUgQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5hbWUgZGVzIE9iamVjdHM6ICAgIEt1ZWhsc2NocmFuaworLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMTcuMDMuMjAwMQorLy8gTWFnaWVyOiAgICAgICAgICAgICAgU3dpZnQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNwcmFnbWEgc3Ryb25nX3R5cGVzLHJ0dF9jaGVja3MKKworI2luY2x1ZGUgInNjaHJhbmtsYWRlbi5oIgoraW5oZXJpdCBMQURFTigic3dpZnRfc3RkX2NvbnRhaW5lciIpOworCisjZGVmaW5lIFZFUlNJT05fT0JKICIzIgorCitwcm90ZWN0ZWQgdm9pZCBjcmVhdGUoKQoreworICBpZiAoIWNsb25lcChUTykpIHJldHVybjsKKyAgc3dpZnRfc3RkX2NvbnRhaW5lcjo6Y3JlYXRlKCk7CisgIFNldFByb3AoUF9TSE9SVCwgIkVpbiBLdWVobHNjaHJhbmsiKTsKKyAgU2V0UHJvcChQX0xPTkcsIEJTKAorICAgICAiRGllc2VyIHN0cmFobGVuZHdlaXNzZSBLdWVobHNjaHJhbmsgZGVyIEZpcm1hIEJyb3NjaCB1ZWJlcnpldWd0IGR1cmNoICIKKyAgICArImVpbiBsZWlzZXMgU3VtbWVuIHZvbiBzZWluZXIgRnVua3Rpb24sIGF1Y2ggd2VubiBEdSBuaWNodCB3ZWlzc3QsIHdvaGVyICIKKyAgICArImVyIGRlbiBTdHJvbSBkYWZ1ZXIgbmltbXQuIFZlcm11dGxpY2ggYXVmIG1hZ2lzY2hlIFdlaXNlLiBBYmVyIER1IGtlbm5zdCAiCisgICAgKyJkYXMgamEsIG1pdCBNYWdpZSBsYWVzc3Qgc2ljaCBmYXN0IGFsbGVzIGVya2xhZXJlbi4gR3V0IGRhc3MgZGVyICIKKyAgICArIkt1ZWhsc2NocmFuayBzbyBncm9zcyBpc3QsIG1hbiBrb2VubnRlIGVpbmVuIGF1c2dld2FjaHNlbmVuIEVpc2JhZXJlbiAiCisgICAgKyJkYXJpbiB1bnRlcmJyaW5nZW4gLSBhYmVyIGRlciBkdWVyZnRlIHdvaGwgd2FzIGRhZ2VnZW4gaGFiZW4uIikKKyAgICArIkBAY250X3N0YXR1c0BAIik7CisgIEFkZElkKCh7Imt1ZWhsc2NocmFuayIsICJzY2hyYW5rIn0pKTsKKyAgU2V0UHJvcCgiY250X3ZlcnNpb25fb2JqIiwgVkVSU0lPTl9PQkopOworICBTZXRQcm9wKFBfTkFNRSwgIkt1ZWhsc2NocmFuayIpOworICBTZXRQcm9wKFBfR0VOREVSLCBNQUxFKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwgNTAwMCk7ICAgICAgICAgLy8gR2V3aWNodCA1IEtnCisgIFNldFByb3AoUF9NQVhfV0VJR0hULCAxMDAwMDAwKTsgIC8vIEVzIHBhc3NlbiBmdWVyIDEwMDAga2cgU2FjaGVuIHJlaW4uCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsgIC8vIERhZnVlciBtYWNodCBlciBhdWNoIG5peCBsZWljaHRlciA6KQorICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsIDEwMCk7ICAgICAvLyBNZWhyIHNvbGx0ZSBuaWNodCBzZWluLCBsdC4gVGlhbWFrLgorICBTZXRQcm9wKFBfVkFMVUUsIDApOyAgICAgICAgICAgICAvLyBLZWluIG1hdGVyaWVsbGVyIFdlcnQuIElzdCBlaCBuaWNodCB2ZXJrYXVmYmFyLgorICBTZXRQcm9wKFBfTk9CVVksIDEpOyAgICAgICAgICAgICAvLyBXaXJkIGltIExhZGVuIHplcnN0b2VydCwgZmFsbHMgZXIgdmVya2F1ZnQgd2lyZC4KKyAgU2V0UHJvcChQX05PR0VULCAiRGFzIGdlaHQgbmljaHQuICIrTmFtZShXRVIsMSkrIiBoYWZ0ZXQgd2llIG1hZ2lzY2ggYW0gQm9kZW4uXG4iKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLCAoe01BVF9NSVNDX01FVEFMLCBNQVRfTUlTQ19NQUdJQ30pICk7CisgIFNldFByb3AoUF9JTkZPLCAiVmVyc3VjaHMgbWFsIG1pdDogXCJza29tbWFuZG9zICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXCIgIVxuIik7CisKKyAgQUQoKHsic3Ryb20ifSksIEJTKCJLZWluZSBBaG51bmcsIHdvICIrbmFtZShXRVIsMSkrIiBkZW4gaGVybmltbXQsIGFiZXIgIgorICAgICsid2llIGdlc2FndCwgYmVzdGltbXQgaXN0IE1hZ2llIGltIFNwaWVsLiIpKTsKKworICBBZGRTb3VuZHMoKHsic3VtbWVuIn0pLCBCUygiRGFzIFN1bW1lbiBkZXMgS3VlaGxzY2hyYW5rcyB1ZWJlcnpldWd0IERpY2ggZGF2b24sICIKKyAgICArImRhc3MgZXIgYW4gaXN0LiIpKTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvbGVzZXB1bHQuYyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvbGVzZXB1bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWI4MzAwCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9sZXNlcHVsdC5jCkBAIC0wLDAgKzEsNTU5IEBACisvLyBFaW5pZ2VyIENvZGUgd3VyZGUgYXVzIGRlbSBRdWVzdHRhZ2VidWNoIGRlcyBUZW1wZWxzIHVlYmVybm9tbWVuLgorLy8gRGEgbWFuIGRhcyBCdWNoLCBzb2JhbGQgZXMgaW0gYXVmZ2VzdGVsbHRlbiBMZXNlcHVsdCBkZXMgU3BpZWxlcnMKKy8vIGFiZ2VsZWd0IHd1cmRlLCBhdWNoIGxlc2VuIGtvZW5uZW4gbXVzcywgc2luZCBkaWUgRnVua3Rpb25lbiB1bmQKKy8vIERldGFpbHMgYXVjaCB3ZWl0ZXJoaW4gc2lubnZvbGwuIEthdWZlbiBrYW5uIGVzIGplZGVyIFNlaGVyLCBhYmVyCisvLyBudXR6ZW4ga2FubiBtYW4gZXMgbnVyIG1pdCBkZW0gdm9uIEhlbHMgQXZhdGFyIHVlYmVycmVpY2h0ZW4gQnVjaC4KKworI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKyNpbmNsdWRlIDxsYW5ndWFnZS5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgIi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL21vZWJlbC5oIgorI2luY2x1ZGUgIi9kL3NlaGVyL2hhZXVzZXIvaGF1cy5oIgorI2luY2x1ZGUgIi9kL2FuZmFlbmdlci9hcmsva25vY2hlbnRlbXBlbC9maWxlcy5oIgorI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCitpbmhlcml0IExBREVOKCJzd2lmdF9zdGRfY29udGFpbmVyIik7CisKK3N0YXRpYyBzdHJpbmcgb3duZXI7CitzdHJpbmcgbGUoc3RyaW5nIGtleSk7CitzdHJpbmcgaW4oc3RyaW5nIGtleSk7CitpbnQgY21kX2VpbnRyYWdlbihzdHJpbmcgc3RyKTsKK2ludCBjbWRfbGVzZW4oc3RyaW5nIHN0cik7CitpbnQgdGFrZV9wYWdlKHN0cmluZyBzdHIpOworaW50IGRyb3BfYm9vayhzdHJpbmcgc3RyKTsKK2ludCBjbWRfYmxhZXR0ZXJuKHN0cmluZyBzdHIpOworaW50IGNtZF9vZWZmbmVuKHN0cmluZyBzdHIpOworaW50IGNtZF9zY2hsaWVzc2VuKHN0cmluZyBzdHIpOwordm9pZCBBZGRUaGVPbGREZXRhaWxzKCk7CisKK3Byb3RlY3RlZCB2b2lkIGNyZWF0ZSgpCit7CisgaWYoIWNsb25lcCh0aGlzX29iamVjdCgpKSkKKyB7CisgIHNldF9uZXh0X3Jlc2V0KC0xKTsKKyAgcmV0dXJuOworIH0KKworIDo6Y3JlYXRlKCk7CisKK293bmVyPSJBbm9ueW11cyI7CisKK0FkZERldGFpbCgiZmluZ2VyIixCUygKKyJEZWluZSBGaW5nZXIgc29sbHRlbiBzY2hvbiB2b3JzaWNodGlnIHNlaW4sIHdlbm4gc2llIGRhcyBaZWRlciIrCisibmhvbHogYmVydWVocmVuLiBFaW5lcnNlaXRzLCBkYW1pdCBEdSBEaWNoIG5pY2h0IHZlcmxldHp0LCBhbmQiKworImVyZXJzZWl0cywgZGFtaXQgRHUgbmljaHRzIGJlc2NobXV0enQuIiw3OCkpOworQWRkRGV0YWlsKCh7ImhvbHoiLCJ6ZWRlcm5ob2x6IiwiemVkZXIifSksQlMoCisiQXVzIGVpbmVtIGVpbnppZ2VuIHN0YXJrZW4gU3RhbW0gZWluZXIgWmVkZXIgYmVhcmJlaXRldCwgaXN0IGQiKworImllc2VzIGVkbGUgTGVzZXB1bHQgc2Nob24gZXR3YXMgc2VociBGZWluZXMgdW5kIERla29yYXRpdmVzLiIsNzgpKTsKK0FkZERldGFpbCgoeyJzdGFtbSIsInplZGVybnN0YW1tIiwiaG9senN0YW1tIn0pLEJTKAorIkRlciBaZWRlcm5zdGFtbSBpc3Qgd2FocmxpY2gga3Vuc3R2b2xsIHZlcmVkZWx0IHdvcmRlbiwgc2VpbiBrIisKKyJyYWVmdGlnZXMgQnJhdW4gd3VyZGUgaGVydm9ycmFnZW5kIHp1ciBHZWx0dW5nIGdlYnJhY2h0LiIsNzgpKTsKK0FkZERldGFpbCgoeyJicmF1biIsImR1bmtlbGJyYXVuIn0pLEJTKAorIkRlciBkdW5rZWxicmF1bmUgU3RhbW0gZ2xhZW56dCB3dW5kZXJzY2hvZW4sIHdlbm4gTGljaHQgYXVmIGloIisKKyJuIGZhZWxsdC4gRWluIHNlaHIgYW5nZW5laG1lcyBIb2x6LCBkYXMgZnVlciBkYXMgTGVzZXB1bHQgdmVydyIrCisiZW5kZXQgd3VyZGUuIiw3OCkpOworQWRkRGV0YWlsKCJnZWx0dW5nIixCUygKKyJKYSwgZGllc2VzIEhvbHogZ2VmYWVsbHQgRGlyIHNlaHIsIGRhcyBnYW56ZSBQdWx0IGlzdCBlaW4gYmVtZSIrCisicmtlbnN3ZXJ0ZXMgS3Vuc3R3ZXJrLiIsNzgpKTsKK0FkZERldGFpbCgoeyJrdW5zdCIsIndlcmsiLCJrdW5zdHdlcmsifSksQlMoCisiSW1tZXIgd2llZGVyIGZhZWxsdCBEZWluIGJld3VuZGVybmRlciBCbGljayBhdWYgZGFzIExlc2VwdWx0LiIsNzgpKTsKK0FkZERldGFpbCgiYmxpY2siLEJTKAorIldhY2hzYW0gdW5kIGZsaW5rIHdpZSBpbW1lciwgaGF0IGVyIGplZG9jaCBlaW4gd2VuaWcgcGF1c2llcnQsIisKKyIgaW5kZW0gZXIgbXVlc3NpZyBhdWYgZGVtIExlc2VwdWx0IHJ1aHQuIiw3OCkpOworQWRkRGV0YWlsKCh7ImZlaW5lcyIsImRla29yYXRpdmVzIn0pLEJTKAorIkRhcyB0ZWlsd2Vpc2UgZWNraWdlIHVuZCBkYW5uIHdpZWRlciBzYW5mdCBnZXNjaHd1bmdlbmUsIHJ1bmRlIisKKyIgTGVzZXB1bHQgc2llaHQgc2Nob24gemllbWxpY2ggcmVwcmFlc2VudGF0aXYgYXVzLiIsNzgpKTsKK0FkZERldGFpbCgiemVkZXIiLEJTKAorIlZvbiBpaHIgaXN0IG51cm1laHIgZGFzIFB1bHQgZ2VibGllYmVuLCBhbGxlcmRpbmdzIGZpbmRlc3QgRHUsIisKKyIgZGFzcyBlcyBuaWNodCBkZXIgc2NobGVjaHRlc3RlIFRlaWwgaXN0LiIsNzgpKTsKK0FkZERldGFpbCgidGVpbCIsQlMoCisiRHUgc2llaHN0IG51ciBkZW4gYmVhcmJlaXRldGVuIFRlaWwgZGVyIFplZGVyIHZvciBEaXIuIiw3OCkpOworQWRkRGV0YWlsKCJleGVtcGxhciIsQlMoCisiRXMgaXN0IGdhbnoga2xhciB6dSBzZWhlbiwgZGFzcyBlcyBzaWNoIG51ciB1bSBlaW5lIFplZGVyIGhhbmQiKworImVsdCwgYXVzIGRlciBkaWVzZXMgUHVsdCBlbnRzdGFuZC4iLDc4KSk7CitBZGREZXRhaWwoKHsiaGFuZHdlcmsiLCJrdW5zdCJ9KSxCUygKKyJUYXRzYWVjaGxpY2ggaXN0IGRpZXNlcyBMZXNlcHVsdCBlaW4gc2VociBzY2hvZW5lcyBCZWlzcGllbCBobyIrCisiZWNoc3RlciBoYW5kd2Vya2xpY2hlciBLdW5zdC4iLDc4KSk7CitBZGREZXRhaWwoImJlaXNwaWVsIixCUygKKyJFaW4gd2VpdGVyZXMgc3RlaHQgaGllciBkdW1tZXJ3ZWlzZSBuaWNodCBoZXJ1bS4iLDc4KSk7CisKKyBTZXRQcm9wKCJjbnRfdmVyc2lvbl9vYmoiLCIxIik7CisgU2V0UHJvcChQX05BTUUsIkxlc2VwdWx0Iik7CisgU2V0UHJvcChQX0dFTkRFUixORVVURVIpOworIFNldFByb3AoUF9ORVZFUkRST1AsMSk7CisgU2V0UHJvcChQX1ZBTFVFLDEwKTsKKyBTZXRQcm9wKFBfV0VJR0hULDUwMDAwMCk7CisgU2V0UHJvcChQX05PR0VULCJEYXMgTGVzZXB1bHQgaXN0IERpciB2aWVsIHp1IHNjaHdlci5cbiIpOworIFNldFByb3AoUF9OT1NFTEwsIkR1IGJlaGFlbHRzdCBkYXMgTGVzZXB1bHQgbGllYmVyLlxuIik7CisgU2V0UHJvcChQX01BVEVSSUFMLChbTUFUX0NFREFSOjEwMF0pKTsKKyBTZXRQcm9wKEhfRlVSTklUVVJFLDEpOworIFNldFByb3AoUF9JTkZPLEJTKAorICJBdWYgZGllc2VzIExlc2VwdWx0IGthbm4gbWFuIGVpbiBnYW56IGJlc3RpbW10ZXMgc2Nod2FyemVzIEJ1IisKKyAiY2ggbGVnZW4uIERvcnQgbGllZ3QgZXMgcGVyZmVrdCwgdW0gZGFyaW4genUgYmxhZXR0ZXJuIHVuZCB6dSIrCisgIiBsZXNlbi4gQXVzc2VyZGVtIGJpcmd0IGVzIHNpY2hlciBub2NoIEdlaGVpbW5pc3NlLiIsNzgpKTsKKworIEFkZElkKCh7InB1bHQiLCJsZXNlcHVsdCIsIlxubGVzZXB1bHRfYXJrIn0pKTsKKworIEFkZENtZCgiZWludHJhZ2VuJnF1ZXN0fGF1ZmdhYmV8bG9lc3VuZ3xlcmxlYm5pc3xhYmVudGV1ZXIiLAorICMnY21kX2VpbnRyYWdlbiwiV2FzIHdpbGxzdCBEdSBoaWVyIGRlbm4gZWludHJhZ2VuID9cbiIpOworIEFkZENtZCgoeyJsaWVzIiwibGVzZSIsImxlcyJ9KSwjJ2NtZF9sZXNlbik7CisgQWRkQ21kKCJuaW1tIiwjJ3Rha2VfcGFnZSk7CisgQWRkQ21kKCh7ImxlZ2UiLCJsZWcifSksIydkcm9wX2Jvb2spOworIEFkZENtZCgiYmxhZXR0ZXJ8YmxhZXR0cmV8YmxhZXR0ZXJlJmluJmJ1Y2h8dGFnZWJ1Y2h8IgorICJ0ZW1wZWx0YWdlYnVjaCIsIydjbWRfYmxhZXR0ZXJuLCJXb3JpbiB3aWxsc3QgRHUgYmxhZXR0ZXJuID98IgorICJXaWxsc3QgRHUgaW0gVGFnZWJ1Y2ggYmxhZXR0ZXJuID8iKTsKKyBBZGRDbWQoIm9lZmZuZSZASUR8YnVjaHx0YWdlYnVjaHx0ZW1wZWx0YWdlYnVjaCIsIydjbWRfb2VmZm5lbiwKKyAiV2FzIHdpbGxzdCBEdSBvZWZmbmVuP1xuIik7CisgQWRkQ21kKCJzY2hsaWVzc2V8c2NobGllc3MmQElEfGJ1Y2h8dGFnZWJ1Y2h8dGVtcGVsdGFnZWJ1Y2giLAorICMnY21kX3NjaGxpZXNzZW4sIldhcyB3aWxsc3QgRHUgc2NobGllc3Nlbj9cbiIpOworCisgaWYgKE1RVEJNQVNURVItPlF1ZXJ5VGFnZWJ1Y2hBdWZQdWx0KHRoaXNfcGxheWVyKCkpKQorIEFkZFRoZU9sZERldGFpbHMoKTsKK30KKwordm9pZCBTZXRPd25lcihzdHJpbmcgc3RyKQoreworIG93bmVyPXN0cjsKK30KKworc3RyaW5nIFF1ZXJ5T3duZXIoKQoreworIHJldHVybiBvd25lcjsKK30KKworc3RyaW5nIF9xdWVyeV9zaG9ydCgpCit7CisgaWYgKChvd25lcj09IkFub255bXVzIil8fAorICAgICAgIXRoaXNfcGxheWVyKCl8fAorICAgICAgIShNUVRCTUFTVEVSLT5RdWVyeVRhZ2VidWNoQXVmUHVsdCh0aGlzX3BsYXllcigpKSkpCisgcmV0dXJuICJFaW4gd3VuZGVyc2Nob2VuZXMgTGVzZXB1bHQgYXVzIGR1bmtlbGJyYXVuZW0gWmVkZXJuaG9seiI7CisgaWYgKGdldHVpZCh0aGlzX3BsYXllcigpKT09b3duZXIpCisgcmV0dXJuCisgIkVpbiB3dW5kZXJzY2hvZW5lcyBMZXNlcHVsdCwgYXVmIGRlbSBEZWluIFRhZ2VidWNoIGRlcyBUZW1wZWxzIHJ1aHQiOworIGVsc2UgcmV0dXJuCisgIkVpbiB3dW5kZXJzY2hvZW5lcyBMZXNlcHVsdCwgZGFzIGVpbiBndWVsZGVuZXMgQnVjaCB0cmFlZ3QiOworfQorCitzdHJpbmcgX3F1ZXJ5X2xvbmcoKQoreworIGlmICgob3duZXI9PSJBbm9ueW11cyIpfHwKKyAgICAgICF0aGlzX3BsYXllcigpfHwKKyAgICAgICEoTVFUQk1BU1RFUi0+UXVlcnlUYWdlYnVjaEF1ZlB1bHQodGhpc19wbGF5ZXIoKSkpKQorIHJldHVybiBCUygKKyAiVm9yc2ljaHRpZyBmYWVocnN0IER1IG1pdCBkZW4gRmluZ2VybiB1ZWJlciBkYXMgZHVua2VsYnJhdW5lIEhvbHouIisKKyAiIFdhcyBEdSBzcHVlcnN0LCBmdWVobHQgc2ljaCBrdWVobCB1bmQgYW5nZW5laG0gYW4sIGRpZSBaZWRlciwgZGllIisKKyAiIGZ1ZXIgZGllc2VzIGJlc3RhdW5lbnN3ZXJ0ZSBMZXNlcHVsdCBoZXJoYWx0ZW4gbXVzc3RlLCB3dXJkZSB2b3JzIisKKyAiaWNodGlnIHVuZCBhZXVzc2Vyc3Qga3Vuc3RmZXJ0aWcgYmVhcmJlaXRldC4gRWluIHdpcmtsaWNoIHNjaG9lbmVzIisKKyAiIEV4ZW1wbGFyIGhvbHpoYW5kd2Vya2xpY2hlciBLdW5zdC4iLDc4KTsKKyBpZiAoZ2V0dWlkKHRoaXNfcGxheWVyKCkpPT1vd25lcikKKyB7CisgIGlmIChNUVRCTUFTVEVSLT5RdWVyeVRhZ2VidWNoQXVmUHVsdCh0aGlzX3BsYXllcigpKSkKKyAgcmV0dXJuIEJTKAorICAiVm9yc2ljaHRpZyBmYWVocnN0IER1IG1pdCBkZW4gRmluZ2VybiB1ZWJlciBkYXMgZHVua2VsYnJhdW5lIEhvbHoiKworICAiLiBXYXMgRHUgc3B1ZXJzdCwgZnVlaGx0IHNpY2gga3VlaGwgdW5kIGFuZ2VuZWhtIGFuLCBkaWUgWmVkZXIsIGQiKworICAiaWUgZnVlciBkaWVzZXMgYmVzdGF1bmVuc3dlcnRlIExlc2VwdWx0IGhlcmhhbHRlbiBtdXNzdGUsIHd1cmRlIHYiKworICAib3JzaWNodGlnIHVuZCBhZXVzc2Vyc3Qga3Vuc3RmZXJ0aWcgYmVhcmJlaXRldC4gRWluIHdpcmtsaWNoIHNjaG8iKworICAiZW5lcyBFeGVtcGxhciBob2x6aGFuZHdlcmtsaWNoZXIgS3Vuc3QsIER1IGJpc3QgZnJvaCwgZGllc2VzIExlc2UiKworICAicHVsdCBlcnN0YW5kZW4genUgaGFiZW4uIEF1ZiBkZW0gTGVzZXB1bHQgc2llaHN0IER1IERlaW4gc2Nod2FyemUiKworICAicyBUYWdlYnVjaCBkZXMgS25vY2hlbnRlbXBlbHMsIGluIGRlbSBEdSBudW4gbnVyIG5vY2ggbGVzZW4ga2FubnMiKworICAidCwgZGVubiBEZWluZSBBYmVudGV1ZXIgZG9ydCBzaW5kIHZvbGxzdGFlbmRpZyB6dSBQYXBpZXIgZ2VicmFjaHQiKworICAiLiBBbGxlcmRpbmdzIGthbm5zdCBEdSBhdWNoIG5vY2ggZWluIHdlbmlnIHdlaXRlciBkcmluIGhlcnVtYmxhZXQiKworICAidGVybiwgd2VubiBEdSBtYWdzdC4iLDc4KTsKKyAgcmV0dXJuIEJTKAorICAiVm9yc2ljaHRpZyBmYWVocnN0IER1IG1pdCBkZW4gRmluZ2VybiB1ZWJlciBkYXMgZHVua2VsYnJhdW5lIEhvbHoiKworICAiLiBXYXMgRHUgc3B1ZXJzdCwgZnVlaGx0IHNpY2gga3VlaGwgdW5kIGFuZ2VuZWhtIGFuLCBkaWUgWmVkZXIsIGQiKworICAiaWUgZnVlciBkaWVzZXMgYmVzdGF1bmVuc3dlcnRlIExlc2VwdWx0IGhlcmhhbHRlbiBtdXNzdGUsIHd1cmRlIHYiKworICAib3JzaWNodGlnIHVuZCBhZXVzc2Vyc3Qga3Vuc3RmZXJ0aWcgYmVhcmJlaXRldC4gRWluIHdpcmtsaWNoIHNjaG8iKworICAiZW5lcyBFeGVtcGxhciBob2x6aGFuZHdlcmtsaWNoZXIgS3Vuc3QsIER1IGJpc3QgZnJvaCwgZGllc2VzIExlc2UiKworICAicHVsdCBlcnN0YW5kZW4genUgaGFiZW4uIEVpbiB3ZW5pZyBncnVlYmVsbiBsYWVzc3QgRGljaCBkaWUgVGF0c2EiKworICAiY2hlLCBkYXNzIGRhcyBMZXNlcHVsdCBsZWVyIGlzdC4gV2FzIG1hbiBkb3J0IHdvaGwgcGxhdHppZXJlbiBrYW4iKworICAibiA/Iiw3OCk7CisgfQorIHJldHVybiBCUygKKyAiVm9yc2ljaHRpZyBmYWVocnN0IER1IG1pdCBkZW4gRmluZ2VybiB1ZWJlciBkYXMgZHVua2VsYnJhdW5lIEhvbHouIisKKyAiLiBXYXMgRHUgc3B1ZXJzdCwgZnVlaGx0IHNpY2gga3VlaGwgdW5kIGFuZ2VuZWhtIGFuLCBkaWUgWmVkZXIsIGRpIisKKyAiZSBmdWVyIGRpZXNlcyBiZXN0YXVuZW5zd2VydGUgTGVzZXB1bHQgaGVyaGFsdGVuIG11c3N0ZSwgd3VyZGUgdm9yIisKKyAic2ljaHRpZyB1bmQgYWV1c3NlcnN0IGt1bnN0ZmVydGlnIGJlYXJiZWl0ZXQuIEVpbiB3aXJrbGljaCBzY2hvZW5lIisKKyAicyBFeGVtcGxhciBob2x6aGFuZHdlcmtsaWNoZXIgS3Vuc3QsIER1IGJpc3QgZWluIHdlbmlnIG5laWRpc2NoLiIrCisgIiIrKE1RVEJNQVNURVItPlF1ZXJ5VGFnZWJ1Y2hBdWZQdWx0KHRoaXNfcGxheWVyKCkpPyIgQXVmIGRlbSBMZXNlcCIrCisgInVsdCB3dXJkZSBlaW4gc2Nod2FyemVzIEJ1Y2ggYWJnZWxlZ3QsIGRhcyBzZWhyIHdlcnR2b2xsIGF1c3NpZWh0LiI6CisgIiBEYXMgTGVzZXB1bHQgc2llaHQgb2huZSBkYXp1Z2Vob2VyaWdlcyBCdWNoIGVpbiB3ZW5pZyBlaW5zYW0gYXVzLiIpKyIuIiw3OCk7Cit9CisKK3ZvaWQgQWRkVGhlT2xkRGV0YWlscygpCit7CisgQWRkRGV0YWlsKCh7ImJ1Y2giLCJidWVjaGxlaW4iLCJ0YWdlYnVjaCJ9KSxCUygKKyAiRGllcyBpc3QgZWluIGtsZWluZXMgQnVlY2hsZWluIGF1cyBHb2xkLCBhdWYgZGVtIGVpbiBOYW1lIGluICIrCisgInNjaHdhcnplbiBMZXR0ZXJuIHN0ZWh0LiBBbnNvbnN0ZW4gaXN0IGRlciBFaW5iYW5kIHNjaGxpY2h0LCAiKworICJkYXMgUGFwaWVyIHNjaG9uIGF1c2Z1ZWhybGljaCBiZXNjaHJpZWJlbiB1bmQgdm9tIHZpZWxlbiBCbGFlIisKKyAidHRlcm4gaGllciB1bmQgZGEgYXVjaCBzY2hvbiBlaW4gd2VuaWcgZ2Vrbmlja3QuIiw3OCkpOworIEFkZERldGFpbCgiYmxhZXR0ZXJuIixCUygKKyAiSmEsIGRhcyBzY2hvZW5lIEJ1ZWNobGVpbiBpc3Qgdm9uIGhhZXVmaWdlbSBCbGFldHRlcm4gbmljaHQgcyIrCisgImNob2VuZXIgZ2V3b3JkZW4sIGFiZXIgaXJnZW5kZXR3YXMgTWFnaXNjaGVzIGhhdCBlcyBzY2hvbiBhbiAiKworICJzaWNoLiBBYiB1bmQgYW4gbWFnc3QgRHUgaW1tZXIgd2llZGVyIGVpbm1hbCBoZXJ1bWJsYWV0dGVybi4iLDc4KSk7CisgQWRkRGV0YWlsKCJtYWdpc2NoZXMiLEJTKAorICJFcyBpc3QgbmljaHQgc28gZWluZmFjaCB6dSBlcmdydWVuZGVuLCBpbmRlbSBtYW4gZWlubWFsIGdlbmF1IisKKyAiZXIgaGluc2llaHQuIiw3OCkpOworIEFkZERldGFpbCgibGVkZXIiLEJTKAorICJEYXMgTGVkZXIgaXN0IGdsYXR0IHVuZCB2b2xsa29tbWVuIGd1ZWxkZW4uIE51ciBkaWUgc2Nod2FyemVuIisKKyAiIExldHRlcm4gZ2ViZW4gZWluZW4gYW5nZW5laG1lbiBLb250cmFzdCBhYi4gSXJnZW5kd2llIHNlbHRzYSIrCisgIm0sIGRlbm4gRHUgZmluZGVzdCwgZGFzcyBTY2h3YXJ6IHVuZCBHb2xkIGVpZ2VudGxpY2ggdW1nZWtlaHIiKworICJ0IG1laHIgU2lubiBtYWNoZW4uIiw3OCkpOworIEFkZERldGFpbCgic2lubiIsQlMoCisgIlZpZWxsZWljaHQgaXN0IGFiZXIgYXVjaCBhbGxlcyBiZXN0ZW5zLCB1bmQgbnVyIERlaW4gVmVyc3RhbmQiKworICIgd2lsbCBkYXMgbmljaHQgbmFjaHZvbGx6aWVoZW4uIiw3OCkpOworIEFkZERldGFpbCgidmVyc3RhbmQiLEJTKAorICJKYSwgYXVjaCBEdSBrYW5uc3QgaWhtIG5pY2h0IGltbWVyIGZvbGdlbiwgYWxzbyB3dW5kZXJlIERpY2ggIisKKyAibmljaHQsIHdhcnVtIGRpZXNlcyBMZWRlciBoaWVyIGdvbGRlbiB2ZXJmYWVyYnQgaXN0IHVuZCBkaWUgQiIrCisgInVjaHN0YWJlbiBkYXJhdWYgc2Nod2Fyei4iLDc4KSk7CisgQWRkRGV0YWlsKCh7ImxldHRlcm4iLCJidWNoc3RhYmVuIn0pLEJTKAorICJEdSBrYW5uc3Qgc2llIGxlc2VuLiIsNzgpKTsKKyBBZGREZXRhaWwoKHsibmFtZSIsIm5hbWVuIn0pLEJTKAorICJNYW4ga2FubiBpaG4gZ2VuYXVzbyBsZXNlbiB3aWUgZGllIEJ1Y2hzdGFiZW4uIiw3OCkpOworIEFkZERldGFpbCgia29udHJhc3QiLEJTKAorICJEaWUgQnVjaHN0YWJlbiBoZWJlbiBzaWNoIHdpcmtsaWNoIGRldXRsaWNoIHZvbSBndWVsZGVuZW4gTGVkIisKKyAiZXIgZGVzIEVpbmJhbmRzIGFiLiIsNzgpKTsKKyBBZGREZXRhaWwoImVpbmJhbmQiLEJTKAorICJFcyBpc3Qga2VpbiBhdWZ3YWVuZGlnZXIgRWluYmFuZCwgZnVlcndhaHIuIERlbm5vY2ggZmFzemluaWVyIisKKyAidCBkaWUgUHJhY2h0LCBkaWUgbWl0IGRlbiBzY2h3YXJ6ZW4gTGV0dGVybiBrb250cmFzdGllcnQuIiw3OCkpOworIEFkZERldGFpbCgicHJhY2h0IixCUygKKyAiU28gbXVzcyBtYW4gZGVuIGdvbGRlbmVuIEVpbmJhbmQgd29obCBuZW5uZW4uIiw3OCkpOworIEFkZERldGFpbCgoeyJwYXBpZXIiLCJzZWl0ZW4iLCJidWNoc2VpdGVuIiwic2VpdGUiLCJidWNoc2VpdGUifSksQlMoCisgIkRhcyBQYXBpZXIgaXN0IHZvbiBndXRlciBRdWFsaXRhZXQsIGRpZSBCdWNoc2VpdGVuIGxhc3NlbiBzaWMiKworICJoIHNpY2hlciBlaW5mYWNoIGJlc2NocmVpYmVuLiIsNzgpKTsKKyBBZGREZXRhaWwoKHsic2Nod2FyemUgYnVjaHNlaXRlbiIsInNjaHdhcnplIGJ1Y2hzZWl0ZSIsCisgInNjaHdhcnplIGJ1Y2hzZWl0ZSJ9KSxCUygKKyAiVGF0c2FlY2hsaWNoLCBiZWltIEJsYWV0dGVybiBzaWVoc3QgRHUgZWluaWdlIHNjaHdhcnplIEJ1Y2hzZSIrCisgIml0ZW4sIGRpZSB1bmJlc2NocmllYmVuIHNpbmQuIFdhcyBoYXQgZGllcyB6dSBiZWRldXRlbiA/Iiw3OCkpOworIEFkZERldGFpbCgicXVhbGl0YWV0IixCUygKKyAiRHUgc2llaHN0LCBkYXNzIGRhcyBQYXBpZXIgZmVzdCB1bmQgYmx1ZXRlbndlaXNzIGlzdC4iLDc4KSk7CisgQWRkUmVhZERldGFpbCgoeyJidWNoIiwiYnVlY2hsZWluIiwidGFnZWJ1Y2gifSksQlMoCisgIkRhcyBCdWNoIGhhdCBlaW4gSW5oYWx0c3ZlcnplaWNobmlzLiBXZW5uIGRvcnQgZXR3YXMgc3RlaHQsIGsiKworICJhbm5zdCBEdSBkYXMgb2RlciBkaWUgS2FwaXRlbCBzaWNoZXIgbGVzZW4uIiw3OCkpOworIEFkZERldGFpbCgia2FwaXRlbCIsQlMoCisgIkxpZXMgbnVyIGltIEluaGFsdHN2ZXJ6ZWljaG5pcyBuYWNoLCB2aWVsbGVpY2h0IGhhdCBkYXMgQnVjaCAiKworICJiZXJlaXRzIGVpbiBvZGVyIG1laHJlcmUgS2FwaXRlbC4iLDc4KSk7CisgQWRkUmVhZERldGFpbCgia2FwaXRlbCIsQlMoCisgIldlbGNoZXMgS2FwaXRlbCB3aWxsc3QgRHUgZGVubiBsZXNlbiA/IFNpZSBzaW5kIHNpY2hlciBkdXJjaG4iKworICJ1bW1lcmllcnQsIHdlbm4gbWFuIHNjaG9uIGV0d2FzIGltIEJ1Y2ggbmllZGVyZ2VzY2hyaWViZW4gaGF0LiIsNzgpKTsKKyBBZGRSZWFkRGV0YWlsKCh7Im5hbWUiLCJuYW1lbiIsImJ1Y2hzdGFiZW4iLCJsZXR0ZXJuIn0pLCMnbGUpOworIEFkZFJlYWREZXRhaWwoKHsiaW5oYWx0IiwiaW5oYWx0c3ZlcnplaWNobmlzIn0pLCMnaW4pOworIFNldFByb3AoUF9NQVRFUklBTCwoW01BVF9MRUFUSEVSOjEwLE1BVF9QQVBFUjoxNSxNQVRfQ0VEQVI6NzVdKSk7Cit9CisKK2ludCBkcm9wX2Jvb2soc3RyaW5nIHN0cikKK3sKKyBpZiAoIXN0cmluZ3Aoc3RyKSkKKyByZXR1cm4gMDsKKyBpZiAoc3Ryc3RyKGxvd2VyX2Nhc2Uoc3RyKSwicHVsdCIsMCk9PS0xKQorIHJldHVybiAwOworIG5vdGlmeV9mYWlsKEJTKAorICJXaWxsc3QgRHUgZXR3YXMgYXVmIGRhcyBQdWx0IGxlZ2VuID8gRWluIEJ1Y2ggd2FlcmUgcGFzc2VuZCwgIisKKyAiYWJlciBlcyBzb2xsdGUgc2Nob24gZXR3YXMgQmVzb25kZXJlcyBzZWluLiIsNzgpKTsKKyBpZiAoc3Ryc3RyKGxvd2VyX2Nhc2Uoc3RyKSwiYnVjaCIsMCk9PS0xJiYKKyAgICAgc3Ryc3RyKGxvd2VyX2Nhc2Uoc3RyKSwiYnVlY2hsZWluIiwwKT09LTEpCisgcmV0dXJuIDA7Cisgbm90aWZ5X2ZhaWwoQlMoCisgIkRhcyBpc3QgbmljaHQgRGVpbiBMZXNlcHVsdCwgRHUgbGFlc3N0IGVzIGJlc3NlciBpbiBSdWhlLiIsNzgpKTsKKyBpZiAoZ2V0dWlkKHRoaXNfcGxheWVyKCkpIT1vd25lcikKKyByZXR1cm4gMDsKKyBub3RpZnlfZmFpbChCUygKKyAiQXVmIGRlbSBQdWx0IGxpZWd0IHNjaG9uIGVpbiBnb2xkZW5lcyBCdWNoLiIsNzgpKTsKKyBpZiAoTVFUQk1BU1RFUi0+UXVlcnlUYWdlYnVjaEF1ZlB1bHQodGhpc19wbGF5ZXIoKSkpCisgcmV0dXJuIDA7Cisgbm90aWZ5X2ZhaWwoQlMoCisgIkVudHdlZGVyIGhhc3QgRHUgRGljaCBub2NoIG5pY2h0IGFscyB3dWVyZGlnIGVyd2llc2VuLCBpbmRlbSAiKworICJEdSBhbGxlIEF1ZmdhYmVuIGltIEtub2NoZW50ZW1wZWwgZXJmdWVsbHQgaGFzdCBvZGVyIER1IGhhc3QgIisKKyAiZGVtIEF2YXRhciBkZXMgV2FlY2h0ZXJzIGRlciBOYWNodCwgTWh1bidkYWUgSGVsLCBub2NoIG5pY2h0ICIrCisgIkRlaW5lIEF1ZndhcnR1bmcgZ2VtYWNodCB1bmQgaWhtIGdlemVpZ3QsIGRhc3MgRHUgd3VlcmRpZyBiaXMiKworICJ0LCBlaW4gZ2VlaWduZXRlcyBCdWNoIHp1IGVtcGZhbmdlbi4gQXVmIGFsbGUgRmFlbGxlIGthbm5zdCBEIisKKyAidSBoaWVyIG5vY2ggbmljaHRzIGF1ZiBkYXMgUHVsdCBsZWdlbi4iLDc4KSk7CisgaWYgKCFwcmVzZW50X2Nsb25lKE9CSigiYnVlY2hsZWluX2ludmVycyIpLHRoaXNfcGxheWVyKCkpKQorIHJldHVybiAwOworIE1RVEJNQVNURVItPkFkZEJ1Y2hBdWZQdWx0KHRoaXNfcGxheWVyKCkpOworIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coQlMoCisgIlZvcnNpY2h0aWcgc2NobGFlZ3N0IER1IERlaW4gZ3VlbGRlbmVzIFRhZ2VidWNoIGF1ZiwgZGFzIERpciAiKworICJNaHVuJ2RhZSBIZWwsIGRhcyBBdmF0YXIgZGVzIFdhZWNodGVycyBkZXIgTmFjaHQsIHVlYmVycmVpY2h0IisKKyAiIGhhdC4gRHUgbGVnc3QgZXMgc2FjaHRlIGF1ZiBkYXMgUHVsdCB1bmQgbWVya3N0LCBkYXNzIGVzIHNvZiIrCisgIm9ydCBlaW5lIG1hZ2lzY2hlIFZlcmJpbmR1bmcgbWl0IGRlbSBMZXNlcHVsdCBlaW5nZWh0LiBFcyBpc3QiKworICIgbnVuIHVudHJlbm5iYXIgbWl0IGRpZXNlbSB2ZXJidW5kZW4uIiw3OCksTVRfTUFHSUMsTUFfVVNFKTsKKyB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSxCUygKKyB0aGlzX3BsYXllcigpLT5OYW1lKFdFUikrIiBsZWd0IHZvcnNpY2h0aWcgZWluIGd1ZWxkZW5lcyBCdWNoICIrCisgIm1pdCBzY2h3YXJ6ZW4gTGV0dGVybiBhdWZnZXNjaGxhZ2VuIGF1ZiBkZW0gTGVzZXB1bHQgYWIgdW5kIGIiKworICJldHJhY2h0ZXQgZGllc2VzIGRhbm4gZWhyZnVlcmNodGlnIHVuZCB6dXRpZWZzdCB6dWZyaWVkZW4uIiw3OCksCisgKHt0aGlzX3BsYXllcigpfSkpOworIHJldHVybiAxOworfQorCitpbnQgY21kX2JsYWV0dGVybihzdHJpbmcgc3RyKQoreworIG5vdGlmeV9mYWlsKEJTKAorICJBdWYgZGVtIExlc2VwdWx0IGxpZWd0IGRvY2ggZ2FyIGtlaW4gVGFnZWJ1Y2guIiw3OCkpOworIGlmICghKE1RVEJNQVNURVItPlF1ZXJ5VGFnZWJ1Y2hBdWZQdWx0KGZpbmRfcGxheWVyKG93bmVyKSkpKQorIHJldHVybiAwOworIG5vdGlmeV9mYWlsKEJTKAorICJEYXMgaXN0IG5pY2h0IERlaW4gVGFnZWJ1Y2gsIER1IGxhZXNzdCBlcyBsaWViZXIgaW4gRnJpZWRlbi4iLDc4KSk7CisgaWYgKGdldHVpZCh0aGlzX3BsYXllcigpKSE9b3duZXIpCisgcmV0dXJuIDA7CisgdGhpc19wbGF5ZXIoKS0+UmVjZWl2ZU1zZyhCUygKKyAiRHUgYmxhZXR0ZXJzdCBlaW4gd2VuaWcgZHVyY2ggRGVpbiBUYWdlYnVjaCB1bmQgc3RvZXNzdCBhdWYgZSIrCisgImluaWdlIHJhZXRzZWxoYWZ0ZSBzY2h3YXJ6ZSBTZWl0ZW4uIFdhcyBtYWcgZXMgZGFtaXQgYXVmIHNpY2giKworICIgaGFiZW4gPyBPYiBEdSBzaWUgaGVyYXVzbmVobWVuIGthbm5zdCA/Iiw3OCksTVRfTE9PSyxNQV9MT09LKTsKKyByZXR1cm4gMTsKK30KKworaW50IHRha2VfcGFnZShzdHJpbmcgc3RyKQoreworIGlmICghc3RyaW5ncChzdHIpKQorIHJldHVybiAwOworIGlmIChwcmVzZW50KHN0cixlbnZpcm9ubWVudCgpKSkKKyByZXR1cm4gMDsKKyBub3RpZnlfZmFpbChCUygKKyAiV28gc2llaHN0IER1IGRlbm4gaGllciBlaW4gQnVjaCA/Iiw3OCkpOworIGlmICghKE1RVEJNQVNURVItPlF1ZXJ5VGFnZWJ1Y2hBdWZQdWx0KHRoaXNfcGxheWVyKCkpKSYmCisgICAgIHN0cnN0cihsb3dlcl9jYXNlKHN0ciksImJ1Y2giKSE9LTEpCisgcmV0dXJuIDA7CisgaWYgKChvd25lciE9Z2V0dWlkKHRoaXNfcGxheWVyKCkpKSYmCisgICAgIHN0cnN0cihsb3dlcl9jYXNlKHN0ciksImJ1Y2giKSE9LTEpCisgbm90aWZ5X2ZhaWwoQlMoCisgIkRpZXMgaXN0IG5pY2h0IERlaW4gTGVzZXB1bHQgb2RlciBEZWluIEJ1Y2ggZGFyYXVmLCBkZXNoYWxiIGwiKworICJhZXNzdCBEdSBlcyB2b3JzaWNodHNoYWxiZXIgbGllZ2VuLiIsNzgpKTsKKyByZXR1cm4gMDsKKyBpZiAoKG93bmVyIT1nZXR1aWQodGhpc19wbGF5ZXIoKSkpJiYKKyAgICAgc3Ryc3RyKGxvd2VyX2Nhc2Uoc3RyKSwic2VpdGUiKSE9LTEpCisgbm90aWZ5X2ZhaWwoQlMoCisgIkRpZSBFaWdlbnR1ZW1lcmluIG9kZXIgZGVyIEVpZ2VudHVlbWVyIGRlcyBMZXNlcHVsdHMgaGFldHRlIHMiKworICJpY2hlciBldHdhcyBkYWdlZ2VuLCB3ZW5uIER1IGRhcyBCdWNoIHplcnN0b2Vyc3QsIGFsc28gbGFlc3N0IisKKyAiIER1IGVzIGxpZWJlci4iLDc4KSk7CisgcmV0dXJuIDA7CisgLy8gSGVpbHVuZyAxeCBhbGxlIDYgU3R1bmRlbi4KKyBpZiAodGhpc19wbGF5ZXIoKS0+Y2hlY2tfYW5kX3VwZGF0ZV90aW1lZF9rZXkoMjE2MDAsIkFya19IZWxzX1NjaHdhcnplc19CdWNoIik9PS0xKQorIHsKKyAgb2JqZWN0IG87CisgIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coQlMoCisgICJEdSByZWlzc3QgZXJzdCB2b3JzaWNodGlnIGVpbmUgc2Nod2FyemUgU2VpdGUgdW5kIGRhbm4gZWluZSIrCisgICIgd2VpdGVyZSBhdXMgZGVtIGdvbGRlbmVuIEJ1Y2guIERhbm4gdWViZXJmYWVsbHQgRGljaCBlaW5lICIrCisgICJrbGVpbmUgU2Nod2FlY2hlLCBkaWUgRGljaCB2b3Igd2VpdGVyZW0gWmVyc3RvZXJlbiBpbm5laGFsdCIrCisgICJlbiBsYWVzc3QuIER1IHNvbGx0ZXN0IEhlbHMgR3Jvc3N6dWVnaWdrZWl0IG5pY2h0IHVlYmVyc2NoYSIrCisgICJldHplbi4iLDc4KSxNVF9GRUVMLE1BX1RBS0UpOworICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSxCUygKKyAgdGhpc19wbGF5ZXIoKS0+TmFtZShXRVIpKyIgcmVpc3N0IHp3ZWkgU2VpdGVuIGF1cyBkZW0gQnVjaCwgIisKKyAgImRhcyBhdWYgZGVtIFB1bHQgbGllZ3QuIERhbm4gaGFlbHQgIit0aGlzX3BsYXllcigpLT5RdWVyeVByb25vdW4oV0VSKSsiIisKKyAgIiBpbm5lLCB3YWhyc2NoZWlubGljaCBmb2xndCAiK3RoaXNfcGxheWVyKCktPlF1ZXJ5UHJvbm91bihXRVIpKyIiKworICAiIGVpbmVyIGtsdWdlbiBFaW5nZWJ1bmcuIiw3OCkpOworICBvPWNsb25lX29iamVjdChPQkooInJlZ19zZWl0ZSIpKTsKKyAgaWYgKG8tPm1vdmUodGhpc19wbGF5ZXIoKSkhPU1PVkVfT0spCisgIHsKKyAgIG8tPnJlbW92ZSgxKTsKKyAgIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coQlMoCisgICAiRHUga2FubnN0IGRpZSBlcnN0ZSBTZWl0ZSBuaWNodCBtZWhyIHRyYWdlbiwgc2llIGxvZXN0IHNpYyIrCisgICAiaCBlaW5mYWNoIGF1Zi4iLDc4KSxNVF9NQUdJQyxNQV9SRU1PVkUpOworICB9CisgIC8vIERpZSBlcnN0ZSBTZWl0ZSBiZWhhbmRlbHQsIGhpZXIsIGZhbGxzIG1hbiBhdWNoIGRpZSB6d2VpdGUKKyAgLy8gU2VpdGUgbmljaHQgdHJhZ2VuIGthbm4gb2RlciBtaXQgZGVyIGVyc3RlbiBhbSBMaW1pdCBpc3QuCisgIG89Y2xvbmVfb2JqZWN0KE9CSigicmVnX3NlaXRlIikpOworICBpZiAoby0+bW92ZSh0aGlzX3BsYXllcigpKSE9TU9WRV9PSykKKyAgeworICAgby0+cmVtb3ZlKDEpOworICAgdGhpc19wbGF5ZXIoKS0+UmVjZWl2ZU1zZyhCUygKKyAgICJEdSBrYW5uc3QgZGllIHp3ZWl0ZSBTZWl0ZSBuaWNodCBtZWhyIHRyYWdlbiwgc2llIGxvZXN0IHNpIisKKyAgICJjaCBlaW5mYWNoIGF1Zi4iLDc4KSxNVF9NQUdJQyxNQV9SRU1PVkUpOworICB9CisgIHJldHVybiAxOworIH0KKyB0aGlzX3BsYXllcigpLT5SZWNlaXZlTXNnKEJTKAorICJWZXJnZWJsaWNoIHJlaXNzdCBEdSBtZWhyIG9kZXIgd2VuaWdlciB2b3JzaWNodGlnIGFuIGVpbmlnZW4iKworICIgc2Nod2FyemVuIFNlaXRlbiBpbSBCdWNoIGhlcnVtLCBkb2NoIHNpZSBibGVpYmVuIHN0b2VycmlzY2giKworICIuIEVzIHdpcmQgd29obCBlaW4gd2VuaWcgZGF1ZXJuLCBiaXMgRHUgZGFzIHdpZWRlciB2ZXJzdWNoZW4iKworICIga2FubnN0LiIsNzgpLE1UX01BR0lDLE1BX1VTRSk7CisgdGVsbF9yb29tKGVudmlyb25tZW50KCksQlMoCisgdGhpc19wbGF5ZXIoKS0+TmFtZShXRVIpKyIgcmVpc3N0IGltIEJ1Y2ggYXVmIGRlbSBMZXNlcHVsdCBoZSIrCisgInJ1bS4iLDc4KSwoe3RoaXNfcGxheWVyKCl9KSk7CisgcmV0dXJuIDE7Cit9CisKK2ludCBjbWRfbGVzZW4oc3RyaW5nIHN0cikKK3sKK2ludCBrOworIGlmKCFzdHIpIHJldHVybiAwOworIGlmIChvd25lcj09IkFub255bXVzIikKKyB7CisgIHdyaXRlIChCUygKKyAgIkRpZXNlcyBMZXNlcHVsdCBzY2hlaW50IG5pZW1hbmRlbSB6dSBnZWhvZXJlbiAuLi4gZXMgbG9lc3QgcyIrCisgICJpY2ggZGFoZXIgZWluZmFjaCBhdWYsIGFscyBEdSBkYXJhdWYgZXR3YXMgbGVzZW4gd2lsbHN0LiIsNzgpKTsKKyAgcmVtb3ZlKDEpOworICByZXR1cm4gMTsKKyB9CisgaWYgKGdldHVpZCh0aGlzX3BsYXllcigpKSE9b3duZXIpCisgeworICBub3RpZnlfZmFpbChCUygKKyAgIkRpZXNlcyBUYWdlYnVjaCBnZWhvZXJ0ICIrY2FwaXRhbGl6ZShvd25lcikrIiwgbmljaHQgRGlyLCBEdSIrCisgICIgYmlzdCBlaWdlbnRsaWNoIG5pY2h0IHNvIHJlY2h0IGFuIGRlbSBpbnRlcmVzc2llcnQsIHdhcyBtYW4iKworICAiIGluIGRlbSBCdWNoIG5pZWRlcmdlc2NocmllYmVuIGhhdC4gU2ljaGVyIGlzdCBlcyB1ZWJlcnRyaWViIisKKyAgImVuIGxhbmdhdG1pZyBmb3JtdWxpZXJ0IHVuZCBzdGltbXQgbmljaHQgZ2VuYXUgbWl0IGRlbSB1ZWJlciIrCisgICJlaW4sIHdhcyB3aXJrbGljaCBnZXNjaGFoLiBNYW4ga2VubnQgZGFzIGphLiIsNzgpKTsKKyAgcmV0dXJuIDA7CisgfQorIGlmIChzdHJzdHIobG93ZXJfY2FzZShzdHIpLCJrYXBpdGVsIiwwKSE9LTEmJgorICAgICBzc2NhbmYobG93ZXJfY2FzZShzdHIpLCJrYXBpdGVsICVkIixrKSE9MSkKKyB7CisgIHdyaXRlIChCUygKKyAgIldpbGxzdCBEdSBlaW4gS2FwaXRlbCBhdXMgZGVtIEJ1Y2ggbGVzZW4gPyBEYW5uIGdpYiBiaXR0ZSBlaSIrCisgICJuZSBaaWZmZXIgYW4uIiw3OCkpOworICByZXR1cm4gMTsKKyB9CisgaWYgKGs+MCkKKyB7CisgIE1RVEJNQVNURVItPkxpZXNRdWVzdChrLHRoaXNfcGxheWVyKCkpOworICByZXR1cm4gMTsKKyB9CisgcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfZWludHJhZ2VuKHN0cmluZyBzdHIpCit7CitpbnQgaTsKKyBpZiAoIShNUVRCTUFTVEVSLT5RdWVyeVRhZ2VidWNoQXVmUHVsdCh0aGlzX3BsYXllcigpKSkpCisgeworICBub3RpZnlfZmFpbChCUygKKyAgIkR1IGZpbmRlc3QgaGllciBuaWNodHMsIHdvcmluIER1IGV0d2FzIGVpbnRyYWdlbiBrb2VubnRlc3QuIiw3OCkpOworICByZXR1cm4gMDsKKyB9CisgaWYgKGdldHVpZCh0aGlzX3BsYXllcigpKSE9b3duZXIpCisgeworICBub3RpZnlfZmFpbChCUygKKyAgIkRpZXNlcyBUYWdlYnVjaCBnZWhvZXJ0ICIrY2FwaXRhbGl6ZShvd25lcikrIiwgbmljaHQgRGlyLCBEdSIrCisgICIga2FubnN0IGRhcmluIG5pY2h0cyBlaW50cmFnZW4uIiw3OCkpOworICByZXR1cm4gMDsKKyB9Cisgbm90aWZ5X2ZhaWwoQlMoCisgIkRlaW5lIE1pc3Npb25lbiBpbSBLbm9jaGVudGVtcGVsIC4uLiBiZXNzZXIgZ2VzYWd0LCBkZW0gV3lybXQiKworICJlbXBlbCwgc2llIHNpbmQgYWxsZXNhbXQgdGFwZmVyIHZvbiBEaXIgZXJmdWVsbHQgd29yZGVuLiBEdSBrIisKKyAiYW5uc3QgaGllciBuaWNodHMgd2VpdGVyIG1laHIgZWludHJhZ2VuLCBzaWNoZXIgYWJlciB2b24gZGVyICIrCisgImFya2FuZW4gTWFjaHQgZGVzIEJ1Y2hlcyBwcm9maXRpZXJlbiwgd2VubiBEdSBlcyBlaW5tYWwgZHVyY2giKworICJibGFldHRlcnN0LiIsNzgpKTsKKyByZXR1cm4gMDsKK30KKworc3RyaW5nIGNhbGNfbmFtZSgpCit7CitzdHJpbmcgKm5hbTsKK3N0cmluZyByZXM7CitpbnQgaSxqOworIHJlcz0iIjsKKyBpZiAob3duZXI9PSIiKQorIHJldHVybiAiIjsKKyBuYW09ZXhwbG9kZSh1cHBlcnN0cmluZyhvd25lciksIiIpOworIGlmIChqPXNpemVvZihuYW0pKQorIHsKKyAgc3dpdGNoKGopCisgIHsKKyAgIGNhc2UgMy4uNDoKKyAgICByZXM9IiAgICAgICAgICAiOworICAgIGJyZWFrOworICAgY2FzZSA1OgorICAgIHJlcz0iICAgICAgICAiOworICAgIGJyZWFrOworICAgY2FzZSA3OgorICAgIHJlcz0iICAgICAgIjsKKyAgICBicmVhazsKKyAgIGNhc2UgOToKKyAgICByZXM9IiAgICAiOworICAgIGJyZWFrOworICAgZGVmYXVsdDoKKyAgICByZXM9IiAgICI7CisgIH0KKyAgZm9yIChpPTA7aTxqO2krKykKKyAgeworICAgcmVzKz1uYW1baV0rIiAiOworICB9CisgfQorIHJldHVybiByZXM7Cit9CisKK3N0cmluZyBsZShzdHJpbmcga2V5KQoreworIHJldHVybiAiXG4iKworICIgICAgRGUgVGVtcGx1bSBPcyBIZWxcblxuIisKKyBjYWxjX25hbWUoKSsiXG5cbiI7Cit9CisKK3N0cmluZyBpbihzdHJpbmcga2V5KQoreworIGlmIChvd25lciE9Z2V0dWlkKHRoaXNfcGxheWVyKCkpKQorIHJldHVybiAiRG9ydCBzdGVodCBhbGxlcmRpbmdzIG5pY2h0cy4gU2VsdHNhbS5cbiI7CisgcmV0dXJuIE1RVEJNQVNURVItPkxpZXNJbmhhbHQoZmluZF9wbGF5ZXIob3duZXIpKTsKK30KKworLy8gRGFzIGhpZXIgYmV6ZWljaG5ldCBkZW4gVXJoZWJlciBkZXMgTW9lYmVsc3R1ZWNrcy4KKy8vIE5pY2h0IG1laW5lIElkZWUhCitzdHJpbmcgR2V0T3duZXIoKSB7IHJldHVybiAiQXJrIjsgfQorCitpbnQgY21kX29lZmZuZW4oc3RyaW5nIHN0cikKK3sKKyBpZiAoc3Ryc3RyKGxvd2VyX2Nhc2Uoc3RyKSwicHVsdCIpIT0tMSkKKyB7CisgIHRoaXNfcGxheWVyKCktPlJlY2VpdmVNc2coCisgICJEdSBrYW5uc3QgZGFzIFB1bHQgbmljaHQgb2VmZm5lbiwgbnVyIGV0d2FzIHp1bSBMZXNlbiBkYXJhdWZsZWdlbi4iLAorICBNVF9MT09LLE1BX0ZFRUwpOworICByZXR1cm4gMTsKKyB9CisgaWYgKHN0cnN0cihsb3dlcl9jYXNlKHN0ciksImJ1Y2giKSE9LTEpCisgeworICBpZiAoIShNUVRCTUFTVEVSLT5RdWVyeVRhZ2VidWNoQXVmUHVsdCh0aGlzX3BsYXllcigpKSkpCisgIHJldHVybiAwOworICB0aGlzX3BsYXllcigpLT5SZWNlaXZlTXNnKAorICAiRGFzIHNjaHdhcnplIEJ1Y2ggaXN0IGRvY2ggc2Nob24gZ2VvZWZmbmV0LiIsTVRfTE9PSyxNQV9GRUVMKTsKKyAgcmV0dXJuIDE7CisgfQorIC8vIEFsbGVzIGFuZGVyZSBwZXIgRGVmYXVsdC4KKyByZXR1cm4gMDsKK30KKworaW50IGNtZF9zY2hsaWVzc2VuKHN0cmluZyBzdHIpCit7CisgaWYgKHN0cnN0cihsb3dlcl9jYXNlKHN0ciksInB1bHQiKSE9LTEpCisgeworICB0aGlzX3BsYXllcigpLT5SZWNlaXZlTXNnKAorICAiRHUga2FubnN0IGRhcyBQdWx0IG5pY2h0IHNjaGxpZXNzZW4uIixNVF9MT09LLE1BX0ZFRUwpOworICByZXR1cm4gMTsKKyB9CisgaWYgKHN0cnN0cihsb3dlcl9jYXNlKHN0ciksImJ1Y2giKSE9LTEpCisgeworICBpZiAoIShNUVRCTUFTVEVSLT5RdWVyeVRhZ2VidWNoQXVmUHVsdCh0aGlzX3BsYXllcigpKSkpCisgIHJldHVybiAwOworICB0aGlzX3BsYXllcigpLT5SZWNlaXZlTXNnKAorICAiRGFzIEJ1Y2ggYmxlaWJ0IHRyb3R6IERlaW5lciBCZW11ZWh1bmdlbiBlaW5mYWNoIG9mZmVuLiIsTVRfTE9PSyxNQV9GRUVMKTsKKyAgcmV0dXJuIDE7CisgfQorIGVsc2UgcmV0dXJuIDA7Cit9CisKK21peGVkIF9xdWVyeV9ub2dldCgpCit7CisgaWYgKGdldHVpZCh0aGlzX3BsYXllcigpKSE9b3duZXIpCisgcmV0dXJuIEJTKAorICJEaWVzIGlzdCBvZmZlbnNpY2h0bGljaCBuaWNodCBEZWluIFB1bHQsIGRlc2hhbGIgbGFlc3N0ICIrCisgIkR1IGVzIGF1Y2ggYmVzc2VyIGxpZWdlbi4iLDc4KTsKKyByZXR1cm4gMDsKK30KKworc3RyaW5nIF9xdWVyeV9hdXRvbG9hZG9iaigpCit7CisgcmV0dXJuIFF1ZXJ5T3duZXIoKTsKK30KKworc3RyaW5nIF9zZXRfYXV0b2xvYWRvYmooc3RyaW5nIHMpCit7CisgcmV0dXJuIFF1ZXJ5T3duZXIoKTsKK30KKworLy8gQmVpbSBLYXVmIHNldHplbiB3aXIgZXJzdG1hbCBudXIgZGVuIEVpZ2VudHVlbWVyLgorLy8gSXN0IGF1cyBTd2lmdHMgQ29udGFpbmVyLCBkZXIgZGllc2UgRnVua3Rpb24gaW0KKy8vIE5vdGlmeU1vdmUoKSBhdWZydWZ0LgorcHJvdGVjdGVkIHZvaWQgU2V0QmVzaXR6ZXIoc3RyaW5nIHVpZCwgc3RyaW5nIHV1aWQpCit7CisgU2V0T3duZXIodWlkKTsKKyBNUVRCTUFTVEVSLT5BZGRMZXNlcHVsdChmaW5kX3BsYXllcih1aWQpfHxmaW5kX25ldGRlYWQodWlkKSk7Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL21vZWJlbC5oIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9tb2ViZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWJjNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9tb2ViZWwuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9TRUhFUk1PRUJFTF9IXworI2RlZmluZSBfU0VIRVJNT0VCRUxfSF8KKworI2RlZmluZSBMQURFTih4KSAiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvIit4CisjZGVmaW5lIFJBVU1fVk9SX0xBREVOICIvZC91bnRlcndlbHQvd3VyemVsL2RvcmYvbnN0cjIiCisjZGVmaW5lIElERUVOX0xPRyAiaWRlZW4ubG9nIgorI2RlZmluZSBTSFZFUldBTFRFUiAiL2Qvc2VoZXIvaGFldXNlci9oYXVzdmVyd2FsdGVyIgorI2RlZmluZSBWRVJBTlRXT1JUTElDSEVSX01BR0lFUiAiU2VsZXZlbiIgCisvLyBEZXIgRXJoYWVsdCBCdWctTWFpbHMgZGVyIFNwaWVsZXIhCisjZGVmaW5lIFNDSFJBTktNQVNURVIgbG9hZF9vYmplY3QoTEFERU4oInNjaHJhbmttYXN0ZXIiKSkKKworI2VuZGlmIC8vIF9TRUhFUk1PRUJFTF9IXworCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL211ZWxsY29udGFpbmVyLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL211ZWxsY29udGFpbmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5NWQxOAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvbXVlbGxjb250YWluZXIuYwpAQCAtMCwwICsxLDkyIEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBNdWVsbGNvbnRhaW5lcgorLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMTcuMDMuMjAwMQorLy8gTWFnaWVyOiAgICAgICAgICAgICAgU3dpZnQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2luY2x1ZGUgInNjaHJhbmtsYWRlbi5oIgoraW5oZXJpdCBMQURFTigic3dpZnRfc3RkX2NvbnRhaW5lciIpOworCisjZGVmaW5lIFZFUlNJT05fT0JKICIuMDAzIgorCitjcmVhdGUoKQoreworICBpZiAoIWNsb25lcChUTykpIHJldHVybjsKKyAgc3dpZnRfc3RkX2NvbnRhaW5lcjo6Y3JlYXRlKCk7CisgIFNldFByb3AoUF9TSE9SVCwgIkVpbiBNdWVsbGNvbnRhaW5lciIpOworICBTZXRQcm9wKFBfTE9ORywgQlMoCisgICAgICJFaW4gZ3Jvc3NlciBDb250YWluZXIgYXVzIFN0YWhsLCBhdXMgZGVtIGVzIG5pY2h0IGdlcmFkZSBhbmdlbmVobSBkdWZ0ZXQuICIKKyAgICArIk9mZmVuc2ljaHRsaWNoIHdlcmRlbiBkb3J0IGFsbGUgU2FjaGVuIGVudHNvcmd0LCBkaWUgU2VoZXIgbmljaHQgZ2VybmUgaW4gIgorICAgICsiaWhyZW0gSGF1cyBvZGVyIGF1ZiBkZXIgU3RyYXNzZSBoZXJ1bWxpZWdlbiBzZWhlbi4iKQorICAgICsiQEBjbnRfc3RhdHVzQEAiKTsKKyAgQWRkSWQoKHsibXVlbGxjb250YWluZXIiLCAiY29udGFpbmVyIn0pKTsKKyAgU2V0UHJvcCgiY250X3ZlcnNpb25fb2JqIiwgVkVSU0lPTl9PQkopOworICBTZXRQcm9wKFBfTkFNRSwgIk11ZWxsY29udGFpbmVyIik7CisgIFNldFByb3AoUF9HRU5ERVIsIE1BTEUpOworICBTZXRQcm9wKFBfV0VJR0hULCA1MDAwKTsgICAgICAgICAvLyBHZXdpY2h0IDUgS2cKKyAgU2V0UHJvcChQX01BWF9XRUlHSFQsIDEwMDAwMDApOyAgLy8gRXMgcGFzc2VuIGZ1ZXIgMTAwMCBrZyBTYWNoZW4gcmVpbi4KKyAgU2V0UHJvcChQX1dFSUdIVF9QRVJDRU5ULCAxMDApOyAgLy8gRGFmdWVyIG1hY2h0IGVyIGF1Y2ggbml4IGxlaWNodGVyIDopCisgIFNldFByb3AoUF9NQVhfT0JKRUNUUywgMTAwKTsgICAgIC8vIE1laHIgc29sbHRlIG5pY2h0IHNlaW4sIGx0LiBUaWFtYWsuCisgIFNldFByb3AoUF9WQUxVRSwgMCk7ICAgICAgICAgICAgIC8vIEtlaW4gbWF0ZXJpZWxsZXIgV2VydC4gSXN0IGVoIG5pY2h0IHZlcmthdWZiYXIuCisgIFNldFByb3AoUF9OT0JVWSwgMSk7ICAgICAgICAgICAgIC8vIFdpcmQgaW0gTGFkZW4gemVyc3RvZXJ0LCBmYWxscyBlciB2ZXJrYXVmdCB3aXJkLgorICBTZXRQcm9wKFBfTk9HRVQsICJEYXMgZ2VodCBuaWNodC4gIitOYW1lKFdFUiwxKSsiIGhhZnRldCB3aWUgbWFnaXNjaCBhbSBCb2Rlbi5cbiIpOworICBTZXRQcm9wKFBfTUFURVJJQUwsICh7TUFUX1NURUVMLCBNQVRfTUlTQ19NQUdJQ30pICk7CisgIFNldFByb3AoUF9JTkZPLCAiVmVyc3VjaHMgbWFsIG1pdDogXCJza29tbWFuZG9zICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXCIgIVxuIik7CisKKyAgQWRkU21lbGxzKCh7ImNvbnRhaW5lciIsICJkdWZ0IiwgImdlc3RhbmsifSksIEJTKCJBdXMgIituYW1lKFdFTSwxKSsiIHN0aW5rdCBlcyAiCisgICAgKyJzY2hvbiBnYW56IHNjaG9lbiwgYWJlciBEZWluZSBOYXNlIGlzdCBqYSBhbGxlcmhhbmQgZ2V3b2VobnQuIikpOworCisgIEFkZENtZCgoeyJ3aXJmIiwgIndlcmYiLCAid2VyZmUifSksICJ3ZWd3ZXJmZW4iKTsKK30KKworaW50IHdlZ3dlcmZlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgd2FzLGlud2FzOworICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSB3byBoaW5laW4gd2VyZmVuP1xuIik7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZiggc3NjYW5mKHN0ciwgIiVzIGluICVzIiwgd2FzLCBpbndhcykgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYoIHByZXNlbnQoaW53YXMpPT1UTyApICAgLy8gRGllcyBPYmpla3QgaXN0IGdlbWVpbnQhCisgIHsKKyAgICBUUC0+Y29tbWFuZF9tZSgic3RlY2tlICIrc3RyKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsgIAorfQorCit2YXJhcmdzIGludCBQcmV2ZW50SW5zZXJ0KG9iamVjdCBvYikKK3sKKyAgaWYoIGxpdmluZyhvYikgKQorICB7CisgICAgd3JpdGUoIEJTKCJMZWJld2VzZW4ga2FubnN0IER1IG5pY2h0IGluICIrbmFtZShXRU4sMSkrIiB3ZXJmZW4hIikpOworICAgIHJldHVybiAxOworICB9CisgIGVsc2UgaWYoIG9iLT5RdWVyeVByb3AoUF9WQUxVRSkgKQorICB7CisgICAgd3JpdGUoIEJTKCJOdXIgRGluZ2Ugb2huZSBtYXRlcmllbGxlbiBXZXJ0IGxhc3NlbiBzaWNoIGluICIKKyAgICAgICtuYW1lKFdFTiwxKSsiIHdlcmZlbi4iKSk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZWxzZSBpZiggb2ItPlF1ZXJ5UHJvcChQX0NVUlNFRCkgKQorICB7CisgICAgd3JpdGUoIEJTKCJWZXJmbHVjaHRlIERpbmdlIGthbm5zdCBEdSBuaWNodCBpbiAiK25hbWUoV0VOLDEpKyIgd2VyZmVuISIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlbHNlCisgICAgcmV0dXJuIDo6UHJldmVudEluc2VydChvYik7Cit9CisKK3ZvaWQgcmVzZXQoKQoreworICBpbnQgaTsKKyAgb2JqZWN0ICppbnY7CisgIDo6cmVzZXQoKTsKKyAgaW52PWFsbF9pbnZlbnRvcnkoVE8pOworICBpZihpbnYgJiYgc2l6ZW9mKGludikpCisgIHsKKyAgICBmb3IoaT1zaXplb2YoaW52KS0xO2k+PTA7aS0tKQorICAgICAgZGVzdHJ1Y3QoaW52W2ldKTsKKyAgICB0ZWxsX3Jvb20oRVRPLCBCUygiQXVzICIrbmFtZShXRU0sMSkrIiBlcnRvZW50IGt1cnogZWluIEtuaXN0ZXJuIHVuZCBLbmFja2VuLCAiCisgICAgICAgICAgICsiZGFubiBpc3Qgd2llZGVyIFJ1aGUuIikpOworICB9Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3ByZWlzbGlzdGUudHh0IGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9wcmVpc2xpc3RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWU3ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9wcmVpc2xpc3RlLnR4dApAQCAtMCwwICsxLDEwMiBAQAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRCBFIFIgICBTIEMgSCBSIEEgRSBOIEsgRSBSICAgLSAgIFAgUiBFIEkgUyBMIEkgUyBUIEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0hlcnpsaWNoIHdpbGxrb21tZW4gaW0gU0NIUkFFTktFUi4gQmVpIHVucyBmaW5kZW4gU2llCitkYXMgaWRlYWxlIE1vYmlsaWFyIGZ1ZXIgSWhyIFNlaGVyaGF1cy4gV2VnIG1pdCBkZXIKK1Vub3JkbnVuZyB6dWhhdXMsIGJyaW5nZW4gU2llIGlocmUgQXVzcnVlc3R1bmcgdWViZXItCitzaWNodGxpY2ggdW5kIHdvaGxzb3J0aWVydCBpbiB1bnNlcmVuIGVkbGVuIE1vZWJlbC0KK3N0dWVja2VuIHVudGVyLiBXaXIgaG9mZmVuLCB1bnNlcmUgQXVzd2FobCBmaW5kZXQKK0locmVuIEdlZmFsbGVuLgorCitBTk1FUktVTkc6IERpZSBXYXJlbiwgZGllIGhpZXIgYXVmZ2VsaXN0ZXQgc2luZCwgc2luZCBOSUNIVCBSRUJPT1RGRVNUICEKKyAgICAgICAgICAgRXZ0bC4gd2VyZGVuIHdpciBkaWVzIHp1IGVpbmVtIHNwYWV0ZXJlbiBaZWl0cHVua3QgaW5zIEF1Z2UKKyAgICAgICAgICAgZmFzc2VuLCBpbSBNb21lbnQgaXN0IGVzIG5pY2h0IHNvLCB3aXIgdmVyc3VjaGVuIGxpZWJlciwgZGllCisgICAgICAgICAgIE1vZWJlbHN0dWVja2UgenUgdmVyYmVzc2VybiwgdW0gc2llIGF1Y2ggYW4gZGllIHVuZ2V3b2VobmxpY2hzdGVuCisgICAgICAgICAgIE9iamVrdGUgaW0gTW9yZ2VuR3JhdWVuIGFuenVwYXNzZW4uCisKK0FydC4tTnIuICAgTmFtZSAgICAgICAgICAgICBCZXNjaHJlaWJ1bmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWlzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgICAgICAgICBLb21tb2RlICAgICAgICAgIEVpbmUgcm9idXN0ZSBLb21tb2RlIGF1cyBFaWNoZW5ob2x6LiBTaWUgICAgMy43OTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzdCBpbiBqZWRlbiBSYXVtIHVuZCBiaWV0ZXQgamVkZSBNZW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXR6IHp1bSBWZXJzdGF1ZW4gdm9uIERpbmdlbiBhbGxlciBBcnQuCisKKyAyICAgICAgICAgS2xlaWRlcnNjaHJhbmsgICBFaW4gbWFzc2l2ZXIgSG9senNjaHJhbmssIGluIGRlbSBTaWUgICAgICAgIDUuODk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2xlaWRlciB1bmQgUnVlc3R1bmdlbiBhbGxlciBBcnQgdW50ZXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpbmdlbiBrb2VubmVuLiBEZXIgU2NocmFuayB2ZXJmdWVndAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVlYmVyIGVpbiBLb21tYW5kbyB6dXIgQXVmbGlzdHVuZyB2b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdWVzdHVuZ3N0eXBlbi4KKworIDMgICAgICAgICBTcGluZCAgICAgICAgICAgIEVpbiBncm9zc2VyLCBlaW5mYWNoZXIgU3RhaGxzY2hyYW5rLiBEYXJpbiAgNS4yOTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXNzZW4gc2ljaCBLbGVpZGVyIHVuZCBSdWVzdHVuZ2VuIGFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJ0IHVudGVyYnJpbmdlbi4gRGVyIFNwaW5kIHZlcmZ1ZWd0IHVlYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWluIEtvbW1hbmRvIHp1ciBBdWZsaXN0dW5nIHZvbiBSdWVzdHVuZ3MtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW4uCisKKyA0ICAgICAgICAgS3VlaGxzY2hyYW5rICAgICBFaW4gc3RyYWhsZW5kd2Vpc3NlciBLdWVobHNjaHJhbmsgYXVzIGRlbSAgIDMuNDk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGF1c2UgQnJvc2NoLiBQYXNzdCBpbiBqZWRlIEt1ZWNoZS4gRGFyaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVpYmVuIElocmUgU3BlaXNlbiB1bmQgR2V0cmFlbmtlIGZyaXNjaCEKKworIDUgICAgICAgICBXYWZmZW5zY2hyYW5rICAgIEVpbiBtYXNzaXZlciBIb2x6c2NocmFuayBtaXQgRmFlY2hlcm4gZnVlciAgNS44OTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYWZmZW4gYWxsZXIgQXJ0LiBKZWRlIFdhZmZlbmdhdHR1bmcgaGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWhyZW4gZWluZW5lbiBQbGF0eiwgZXMgZ2lidCBlaW4gS29tbWFuZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6dXIgQXVmbGlzdHVuZyB2b24gV2FmZmVudHlwZW4uCisKKyA2ICAgICAgICAgV2FmZmVudHJ1aGUgICAgICBFaW5lIFN0YWhsdHJ1aGUgbWl0IHZlcnNjaGllZGVuZW4gRmFlY2hlcm4gIDUuMzk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgenVyIEF1Zm5haG1lIHZvbiBXYWZmZW4gYWxsZXIgQXJ0LiBEaWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVoZSB2ZXJmdWVndCB1ZWJlciBlaW4gS29tbWFuZG8genVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVmbGlzdHVuZyB2b24gV2FmZmVudHlwZW4uCisKKyA3ICAgICAgICAgVHJlc29yICAgICAgICAgICBTaWNoZXJuIFNpZSBJaHIgVmVybW9lZ2VuIGdlZ2VuIEVpbmJydWNoICAgIDQuNDk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kIERpZWJzdGFobC4gV2llPyBHYW56IGVpbmZhY2g6IE1pdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZXNlbSBzdGFiaWxlbiwgZmV1ZXJzaWNoZXJlbiBUcmVzb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5kIElocmUgV2VydHNhY2hlbiBzaWNoZXIuCisKKyA4ICAgICAgICAgWmF1YmVya2lzdGUgICAgICBTaW5kIFNpZSBaYXViZXJlcj8gT2RlciBlaW5mYWNoIG51ciBTYW1tbGVyIDcuOTk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGllciB2b24gWmF1YmVyZXItS29tcG9uZW50ZW4/IERhbm4gaGFiZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXIgZWluIE1vZWJlbHN0dWVjayBmdWVyIFNpZSwgZGFzIFNpZSBoYWJlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11ZXNzZW4hIEF1cyBtYWdpc2NoZW0gQmlybmJhdW1ob2x6IGdlZmVydGlndC4KKworIDkgICAgICAgICBNdWVsbGNvbnRhaW5lciAgIERlciBFcnNhdHogZnVlciBkZW4gTXVlbGxzY2hsdWNrZXIuICAgICAgICAgICA5OTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaWUgbWVociBicmF1Y2hlbiBTaWUgZWluZW4gTGFkZW4gYXVmc3VjaGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51ciB1bSB3ZXJ0bG9zZW4gUGx1bmRlciBsb3N6dXdlcmRlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKzEwICAgICAgICAgU2NobHVlc3NlbGJyZXR0ICBTaWUgaGFiZW4gZHVyY2ggSWhyZSBBYmVudGV1ZXIgZWluZW4gU2FjayAgICAgNDk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sbCBTY2hsdWVzc2VsPyBEaWVzZXMgQnJldHQgc2NoYWZmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZG51bmcuCisKKzExICAgICAgICAgRHVzY2hrYWJpbmUgICAgICBFbmRsaWNoIGF1Y2ggZnVlciBJaHIgWnVoYXVzZTogICAgICAgICAgICAgIDMuNDk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWluZSB1bHRyYW1vZGVybmUgV2FzY2hnZWxlZ2VuaGVpdC4gU2llIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtvZW5uZW4gc29nYXIgc2VsYnN0IGVpbnN0ZWxsZW4sIHdvbWl0IFNpZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWNoIHdhc2NoZW4gd29sbGVuIQorCisxMiAgICAgICAgIG1hZy4gSG9senRydWhlICAgSGFiZW4gYXVjaCBTaWUgUHJvYmxlbWUgbWl0IGVpbmVtIHVlYmVyLSAgIDc0Ljk5OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbGxlbiBJbnZlbnRhcj8gV2lyIGhhYmVuIGpldHp0IGRpZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZXN1bmcgZnVlciBTaWU6IGRpZXNlIGtsZWluZSBIb2x6dHJ1aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaW1tdCBpaHJlIGV3aWdlbiBPYmpla3RlIGF1ZiB1bmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV3YWhydCBzaWUgc2ljaGVyIHVlYmVyIGRlbiBuYWVjaHN0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWx0dW50ZXJnYW5nIGhpbmF1cyBhdWYhCisgCisxMyAgICAgICAgIFZpdHJpbmUgICAgICAgICAgR2Vob2VyZW4gU2llIGF1Y2ggenUgZGVuIHRhcGZlcmVuIEhlbGRlbiwgIDQ5Ljk5OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSBzaWNoIGJlcmVpdHMgUG9rYWxlIHZlcmRpZW50IGhhYmVuPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYW5uIHNvbGx0ZW4gU2llIHNpY2ggZGllc2UgVml0cmluZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6dWxlZ2VuLCBkYW1pdCBJaHJlIFBva2FsZSBlaW5lIHBhc3NlbmRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW1nZWJ1bmcgZXJoYWx0ZW4gdW5kIGF1Y2ggYmVpbSBXZWx0LQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGVyZ2FuZyBnZXNjaHVldHp0IHNpbmQuCisKKzE0ICAgICAgICAgTGVzZXB1bHQgICAgICAgICBEYXMgaGF0IG1hbiBzaWNoIHJlZGxpY2ggdmVyZGllbnQhIEVpbmUgICAgNjAuMDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nob2VuZSBCZWxvaG51bmcsIHdlbm4gbWFuIHNjaGxpZXNzbGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbiBrbm9lY2hlcm5lbiBUZW1wZWwgbWFsIHNvIHJpY2h0aWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWZnZXJhZXVtdCBoYXQuIFVuZCB6d2FyIHZvbGxzdGFlbmRpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyBkYXNzIHNlbGJzdCBkZXIgVG90ZW5nb3R0IHN0YXVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRsaWNoIGtvZW5uZW4gU2llLCB3ZW5uIGVyIGVzIGRlbm4gZGFubgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1Y2ggenVmcmllZGVuIGlzdCwgZGFzIFRhZ2VidWNoIGhpZXJhdWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYmxlZ2VuIHVuZCBpbiBhbGxlciBSdWhlIGJsYWV0dGVybi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbm0uIGRlciBHZXNjaGFlZnRzbGVpdHVuZzoKK1dpciBiZW11ZWhlbiB1bnMsIElocmVtIEdlc2NobWFjayB1bmQgSWhyZW4gQmVkdWVyZm5pc3NlbiBnZXJlY2h0IHp1IHdlcmRlbi4KK0ZhbGxzIFNpZSBWZXJiZXNzZXJ1bmdzdm9yc2NobGFlZ2UgaGFiZW4sIG9kZXIgZmFsbHMgU2llIE1vZWJlbHN0dWVja2UgZnVlciBJaHIKK0hhdXMgaW4gdW5zZXJlbSBBbmdlYm90IHZlcm1pc3Nlbiwgc28gc2V0emVuIFNpZSBkb2NoIGJpdHRlIGVpbmUgZW50c3ByZWNoZW5kZQorSWRlZSBpbSBMYWRlbiBhYi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3NjaGx1ZXNzZWxicmV0dC5jIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zY2hsdWVzc2VsYnJldHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2JhY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zY2hsdWVzc2VsYnJldHQuYwpAQCAtMCwwICsxLDY3OSBAQAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5hbWUgZGVzIE9iamVjdHM6ICAgIFNjaGx1ZXNzZWxicmV0dAorLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMDIuMDYuMjAwMQorLy8gT3JpZ2luYWw6ICAgICAgICAgICAgU3dpZnQKKy8vIE5ldWUgVmVyc2lvbjogICAgICAgIFNlbGV2ZW4KKy8vINxiZXJub21tZW46ICAgICAgICAgIDIzLjAxLjIwMDYKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKiBDaGFuZ2Vsb2cKKyAgICogMjEuMDYuMjAwNywgWmVzc3RyYQorICAgICBpbSBpbmhlcml0IGFicy4gUGZhZCBkdXJjaCBMQURFTih4KSBlcnNldHp0LgorICAgKiAwMS4wNy4yMDA3LCBaZXNzdHJhCisgICAgIEdldE93bmVyKCkgZGVmaW5pZXJ0LgorICAgKiAxMS4wNS4yMDE1LCBBcmF0aG9ybgorICAgICB3ZWl0cmFldW1pZyB1ZWJlcmFyYmVpdGV0IHp1ciBCZWhlYnVuZyB2b24gRmVobGZ1bmt0aW9uZW4KKyovCisjcHJhZ21hIHN0cm9uZ190eXBlcywgcnR0X2NoZWNrcworCisjaW5jbHVkZSAiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc2NocmFua2xhZGVuLmgiCisjaW5jbHVkZSA8YW5zaS5oPgoraW5oZXJpdCAgTEFERU4oInN3aWZ0X3N0ZF9jb250YWluZXIiKTsKKworI2RlZmluZSBWRVJTSU9OX09CSiAiMyIKKy8vIFp1ciBJbmRpemllcnVuZyBkZXMgTWFwcGluZ3MgPGhha2VuPgorI2RlZmluZSBIT09LX09CICAgIDAKKyNkZWZpbmUgSE9PS19MQUJFTCAxCisKK3ByaXZhdGUgdmFyYXJncyBzdHJpbmcgS2V5RGVzY3JpcHRpb24oaW50IGtleW51bSk7Citwcml2YXRlIGludCBJc1ZhbGlkS2V5KG9iamVjdCBvYik7Citwcml2YXRlIGludCBHZXROZXh0RnJlZVNsb3QoKTsKK3ByaXZhdGUgb2JqZWN0IEdldEtleUZvckxhYmVsKHN0cmluZyBsYWJlbCk7Citwcml2YXRlIGludCBHZXRIb29rTnVtYmVyRm9yS2V5KG9iamVjdCBvYik7Citwcml2YXRlIHZvaWQgQ29uc29saWRhdGVJbnZlbnRvcnkoKTsKKworLy8gU3RydWt0dXI6IChbIGhha2VuX25yIDogb2JqZWt0OyBiZXNjaHJpZnR1bmcgXSkKK3ByaXZhdGUgbWFwcGluZyBoYWtlbj0oWzoyXSk7Citwcml2YXRlIGludCBob29rbGlzdF9sb25nID0gMDsKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkgeworICBpZiAoIWNsb25lcChUTykpIHsKKyAgICBzZXRfbmV4dF9yZXNldCgtMSk7CisgICAgcmV0dXJuOworICB9CisgIDo6Y3JlYXRlKCk7CisgIAorICBmb3JlYWNoKGludCBpOiAxLi4xNikgeworICAgIG1fYWRkKGhha2VuLCBpKTsKKyAgfQorCisgIC8vIERFQlVHISBTb25zdCBmdW5rdGlvbmllcnQncyBhdXNzZXJoYWxiIHZvbiBTZWhlcmhhZXVzZXJuIG5pY2h0LgorICBTZXRQcm9wKCJ0ZXN0IiwxKTsKKyAgU2V0UHJvcChQX1NIT1JULCAiRWluIFNjaGx1ZXNzZWxicmV0dCIpOworICBTZXQoUF9MT05HLCBmdW5jdGlvbiBzdHJpbmcgKCkgeworICAgIHN0cmluZyB0ZXh0ID0gQlMoCisgICAgICAiRWluIGtsZWluZXMgQnJldHQgYXVzIEhvbHosIGFuIGRlbSBpbiAyIFJlaWhlbiBqZSA4IEhha2VuIGJlZmVzdGlndCAiCisgICAgICAic2luZCwgYW4gZGllIG1hbiBpbnNnZXNhbXQgMTYgU2NobHVlc3NlbCBoYWVuZ2VuIGthbm4uIFVtIGRpZSAiCisgICAgICAiVWViZXJzaWNodCBuaWNodCB6dSB2ZXJsaWVyZW4sIGJlZmluZGV0IHNpY2ggdWViZXIgamVkZW0gZGVyIEhha2VuICIKKyAgICAgICJlaW4ga2xlaW5lcyBTY2hpbGRjaGVuIGF1cyBTY2hpZWZlciwgZGFzIHNpY2ggYmVzY2hyaWZ0ZW4gbGFlc3N0LiAiCisgICAgICAiQXVmIGRpZXNlIFdlaXNlIGdlaHQgZGVyIFNpbm4gdW5kIFp3ZWNrIGRlcyBTY2hsdWVzc2VscywgZGVyIGFuICIKKyAgICAgICJkaWVzZW0gSGFrZW4gcnVodCwgbmljaHQgdmVybG9yZW4uIFByYWt0aXNjaGVyd2Vpc2UgaGFlbmd0IGFuIGVpbmVyICIKKyAgICAgICJTY2hudXIgZWluIFN0dWVjayBLcmVpZGUgdm9uIGRlbSBCcmV0dCBoZXJhYiwgbWl0IGRlbSBEdSBkaWUgIgorICAgICAgIlNjaGlsZGNoZW4gYmVzY2hyaWZ0ZW4ga2FubnN0LiIpOworICAgIHRleHQgKz0gS2V5RGVzY3JpcHRpb24oMCk7CisgICAgcmV0dXJuIHRleHQ7IAorICB9LCBGX1FVRVJZX01FVEhPRCk7CisKKyAgQWRkSWQoKHsic2NobHVlc3NlbGJyZXR0IiwiYnJldHQifSkpOworICBTZXRQcm9wKCJjbnRfdmVyc2lvbl9vYmoiLCBWRVJTSU9OX09CSik7CisgIFNldFByb3AoUF9DTlRfU1RBVFVTLCAwKTsKKyAgU2V0UHJvcChQX05BTUUsICJTY2hsdWVzc2VsYnJldHQiKTsKKyAgU2V0UHJvcChQX0dFTkRFUiwgTkVVVEVSKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwgMTAwMCk7ICAgICAgICAgLy8gR2V3aWNodCAxIEtnCisgIFNldFByb3AoUF9NQVhfV0VJR0hULCAxMDAwMDAwKTsgIC8vIEVzIHBhc3NlbiBmdWVyIDEwMDAga2cgU2FjaGVuIHJlaW4uCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsgIC8vIERhZnVlciBtYWNodCBlciBhdWNoIG5peCBsZWljaHRlciA6KQorICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsIDE2KTsKKyAgLy8gTWFuIHNvbGwgbmljaHRzIHVlYmVyIGRlbiBub3JtYWxlbiBNZWNoYW5pc211cyByZWluc3RlY2tlbiBvZGVyIAorICAvLyByYXVzbmVobWVuIGtvZW5uZW4uIFdpcmQgdm9uIHB1dF9hbmRfZ2V0LmMgZ2VwcnVlZnQuCisgIFNldFByb3AoUF9DT05UQUlORVIsIDApOworICBTZXRQcm9wKFBfTk9JTlNFUlRfTVNHLCBCUygiQW4gZGFzIFNjaGx1ZXNzZWxicmV0dCBrYW5uc3QgRHUgbnVyICIKKyAgICAiU2NobHVlc3NlbCBoYWVuZ2VuLlxuU3ludGF4OiAnaGFlbmdlIDxzY2hsdWVzc2VsPiBhbiBicmV0dCcuIikpOworICBTZXRQcm9wKFBfTk9HRVQsICJEYXMgZ2VodCBuaWNodC4gIitOYW1lKFdFUiwxKSsKKyAgICAiIGxhZXNzdCBzaWNoIG5pY2h0IGJld2VnZW4uXG4iKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLCAoe01BVF9PQUssIE1BVF9NSVNDX01BR0lDfSkgKTsKKyAgU2V0UHJvcChQX0lORk8sICJWZXJzdWNoJ3MgbWFsIG1pdDogXCJza29tbWFuZG9zIHNjaGx1ZXNzZWxicmV0dFwiLlxuIik7CisKKyAgQUQoKHsiaG9seiJ9KSwgQlMoIkVjaHRlLCByb2J1c3RlIEVpY2hlLiIpKTsKKworICBSZW1vdmVDbWQoKHsic2NobGllc3NlIiwic2NobGllc3MiLCJvZWZmbmUifSkpOworCisgIEFkZENtZCgoeyJ1bnQiLCAidW50ZXJzdWNoZSIsICJiZXRyYWNodGUiLCAiYmV0cmFjaHQiLCAiYmV0ciIsCisgICAgICAgICAgICJzY2hhdWUiLCAic2NoYXUifSksICJ1bnRfaGFrZW4iKTsKKyAgQWRkQ21kKCh7ImhhZW5nIiwgImhhZW5nZSJ9KSwgInNjaGx1ZXNzZWxfYW5faGFrZW5faGFlbmdlbiIpOworICBBZGRDbWQoKHsibmltbSJ9KSwgInNjaGx1ZXNzZWxfdm9uX2hha2VuX25laG1lbiIpOworICBBZGRDbWQoInNiZXNjaHJpZnRlIiwgImNtZF9iZXNjaHJpZnRlbiIpOworICBBZGRDbWQoInNsaXN0ZSIsICJjbWRfc2xpc3RlIik7Cit9CisKKy8qKioqKiBLT01NQU5ET0ZVTktUSU9ORU4gKioqKiovCisKKy8vIEtvbmZpZ3VyYXRpb24gZGVyIFNjaGx1ZXNzZWxsaXN0ZSwgZW50d2VkZXIgImFsbGUiIGFuemVpZ2VuIG9kZXIgbnVyIGRpZQorLy8gYmVsZWd0ZW4gSGFrZW4uCitzdGF0aWMgaW50IGNtZF9zbGlzdGUoc3RyaW5nIHN0cikgeworICBub3RpZnlfZmFpbCgiU3ludGF4OiAnc2xpc3RlIGFsbGV8YmVsZWd0ZScuXG4iKTsKKyAgaWYgKCAhc3RyaW5ncChzdHIpIHx8ICFzaXplb2Yoc3RyKSApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCBzdHIgPT0gImFsbGUiICkgeworICAgIGlmICggIWhvb2tsaXN0X2xvbmcgKSB7CisgICAgICB0ZWxsX29iamVjdChUUCwgQlMoIk9rLCBlcyB3ZXJkZW4gamV0enQgaW1tZXIgYWxsZSBIYWtlbiAiCisgICAgICAgICJhdWZnZWxpc3RldC4iKSk7CisgICAgICBob29rbGlzdF9sb25nID0gMTsKKyAgICB9CisgICAgZWxzZSAKKyAgICAgIHRlbGxfb2JqZWN0KFRQLCBCUygiRGllIEVpbnN0ZWxsdW5nIHdhciBzY2hvbiAnYWxsZScuIikpOworICB9CisgIGVsc2UgaWYgKCBzdHIgPT0gImJlbGVndGUiICkgeworICAgIGlmICggaG9va2xpc3RfbG9uZyApIHsKKyAgICAgIHRlbGxfb2JqZWN0KFRQLCBCUygiT2ssIGVzIHdlcmRlbiBqZXR6dCBudXIgZGllIGJlbGVndGVuIEhha2VuICIKKyAgICAgICAgImF1ZmdlbGlzdGV0LiIpKTsKKyAgICAgIGhvb2tsaXN0X2xvbmcgPTA7CisgICAgfQorICAgIGVsc2UgCisgICAgICB0ZWxsX29iamVjdChUUCwgQlMoIkRpZSBFaW5zdGVsbHVuZyB3YXIgc2Nob24gJ2JlbGVndGUnLiIpKTsKKyAgfQorICBlbHNlIAorICAgIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworLy8gSGFrZW4gdW50ZXJzdWNoZW4uIE9obmUgQW5nYWJlIGRlciBOdW1tZXIgd2VyZGVuIGFsbGUgYXVzZ2VnZWJlbiwKKy8vIGFuc29uc3RlbiBkZXIgZ2V3dWVuc2NodGUsIHNvZmVybiBlcyBkaWVzZW4gZ2lidC4KK3N0YXRpYyBpbnQgdW50X2hha2VuKHN0cmluZyBzdHIpIHsKKyAgaWYgKCAhc3RyaW5ncChzdHIpIHx8ICFzaXplb2Yoc3RyKSB8fCBzdHJzdHIoc3RyLCAiaGFrZW4iKSA9PSAtMSApCisgICAgcmV0dXJuIDA7CisgIAorICBpbnQgaGFrZW5ucjsKKyAgaWYgKCBzc2NhbmYoc3RyLCAiaGFrZW4gJWQiLCBoYWtlbm5yKSAhPSAxICkgeworICAgIHN0cmluZyBkZXQgPSBLZXlEZXNjcmlwdGlvbihoYWtlbm5yKTsKKyAgICB0ZWxsX29iamVjdChUUCwgc2l6ZW9mKGRldCkgPyBkZXQgOiAiRGllIEhha2VuIHNpbmQgYWxsZSBsZWVyLlxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBub3RpZnlfZmFpbCgiV2VsY2hlbiBIYWtlbiBtb2VjaHRlc3QgRHUgdW50ZXJzdWNoZW4/IEVzIGdpYnQgbnVyIGRpZSAiCisgICAgIkhha2VuIDEgYmlzIDE2LlxuIik7CisgIGlmKCBoYWtlbm5yPDEgfHwgaGFrZW5uciA+IDE2ICkKKyAgICByZXR1cm4gMDsKKworLy8gIGF1c2dhYmVfaGFrZW4oaGFrZW5ucik7CisgIHRlbGxfb2JqZWN0KFRQLCBLZXlEZXNjcmlwdGlvbihoYWtlbm5yKSk7CisgIHJldHVybiAxOworfQorCisvLyBTY2hsdWVzc2VsIGF1ZmhhZW5nZW4uCitzdGF0aWMgaW50IHNjaGx1ZXNzZWxfYW5faGFrZW5faGFlbmdlbihzdHJpbmcgc3RyKSB7CisgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IHdvcmFuIGhhZW5nZW4/XG4iKTsKKyAgaWYoIXN0cmluZ3Aoc3RyKSB8fCAhc2l6ZW9mKHN0cikpCisgICAgcmV0dXJuIDA7CisgIAorICBub3RpZnlfZmFpbCgiRGFzIGRhcmZzdCBEdSBuaWNodC5cbiIpOworICBpZighZXJsYXVidCgpKQorICAgIHJldHVybiAwOworCisgIHN0cmluZyB3YXMsIHdvcmFuOworICBub3RpZnlfZmFpbCgiRm9sZ2VuZGUgU3ludGF4IHZlcnN0ZWh0IERlaW4gU2NobHVlc3NlbGJyZXR0OlxuIgorICAgICIgIFwiaGFlbmdlIDxzY2hsdWVzc2VsbmFtZT4gYW4gaGFrZW4gW25yXVwiIG9kZXJcbiIKKyAgICAiICBcImhhZW5nZSA8c2NobHVlc3NlbG5hbWU+IGFuIFtzY2hsdWVzc2VsXWJyZXR0XCIuXG4iKTsKKyAgaWYgKCBzc2NhbmYoc3RyLCAiJXMgYW4gJXMiLCB3YXMsIHdvcmFuKSAhPSAyICkKKyAgICByZXR1cm4gMDsKKworICBub3RpZnlfZmFpbCgiV2FzIG1vZWNodGVzdCBEdSBhbiBkYXMgU2NobHVlc3NlbGJyZXR0IGhhZW5nZW4/XG4iKTsKKyAgaWYgKCAhc3RyaW5ncCh3YXMpICkgCisgICAgcmV0dXJuIDA7CisKKyAgbm90aWZ5X2ZhaWwoIldvcmFuIHdpbGxzdCBEdSBkYXMgZGVubiBoYWVuZ2VuP1xuIik7CisgIGlmICggc3Ryc3RyKHdvcmFuLCAiaGFrZW4iLCAwKT09LTEgJiYgIWlkKHdvcmFuKSApCisgICAgcmV0dXJuIDA7CisKKyAgLy8gVGVzdCwgb2IgZXMgT2JqZWt0ZSBkaWVzZXMgTmFtZW5zIGdpYnQuCisgIG9iamVjdCAqb2JzID0gVFAtPmZpbmRfb2JzKHdhcywgUFVUX0dFVF9OT05FKTsKKyAgLy8gQXVzIGRlciBMaXN0ZSBkZXIgZ2VmdW5kZW5lbiBPYmpla3RlIGFsbGUgcmF1c2ZpbHRlcm4sIGRpZSBrZWluZQorICAvLyBTY2hsdWVzc2VsIHNpbmQuIEFscyBTY2hsdWVzc2VsIGdlbHRlbiBoaWVyIGFsbGUgT2JqZWt0ZSwgZGllIGRpZQorICAvLyBJRCAic2NobHVlc3NlbCIgaGFiZW4gb2RlciBkaWUgbWl0dGVscyBRdWVyeURvb3JLZXkoKSBlaW5lciBiZXN0aW1tdGVuCisgIC8vIFR1ZXIgenVnZW9yZG5ldCBzaW5kLgorICBvYnMgPSBmaWx0ZXIob2JzLCAjJ0lzVmFsaWRLZXkpOworICBub3RpZnlfZmFpbCgiS2VpbmUobikgU2NobHVlc3NlbCBtaXQgZGVtIE5hbWVuIGdlZnVuZGVuLlxuIik7CisgIGlmICggIXNpemVvZihvYnMpICkKKyAgICByZXR1cm4gMDsKKworICBpbnQgbnIgPSBHZXROZXh0RnJlZVNsb3QoKTsKKyAgbm90aWZ5X2ZhaWwoIkFtIFNjaGx1ZXNzZWxicmV0dCBpc3Qga2VpbiBIYWtlbiBtZWhyIGZyZWkuXG4iKTsKKyAgaWYgKCAhbnIgKQorICAgIHJldHVybiAwOworCisgIC8vIFdlbm4gbnVyIGVpbiBTY2hsdWVzc2VsIGdlZnVuZGVuIHd1cmRlLCB3aXJkIGdlbmF1ZXIgZ2VzY2hhdXQsIG9iCisgIC8vIGRlciBTcGllbGVyIGdlc2FndCBoYXQsIHdvIGRlciBoaW5zb2xsLgorICBpZiAoIHNpemVvZihvYnMpID09IDEgKSB7CisgICAgaWYgKCB3b3JhbiAhPSAiaGFrZW4iIHx8ICFpZCh3b3JhbikgKQorICAgICAgc3NjYW5mKHdvcmFuLCAiaGFrZW4gJWQiLCBucik7CisgIH0KKworICBub3RpZnlfZmFpbCgiRXMgZ2lidCBudXIgZGllIEhha2VuIDEgYmlzIDE2LlxuIik7CisgIGlmICggbnIgPCAxIHx8IG5yID4gMTYgKQorICAgIHJldHVybiAwOworCisgIG5vdGlmeV9mYWlsKCJEZXIgSGFrZW4gaXN0IG5pY2h0IG1laHIgZnJlaS5cbiIpOworICBpZiAoIG9iamVjdHAoaGFrZW5bbnIsSE9PS19PQl0pICkKKyAgICByZXR1cm4gMDsKKworICAvLyBBbGxlIGdlZnVuZGVuZW4gU2NobHVlc3NlbG9iamVrdGUgYW5zIEJyZXR0IGhhZW5nZW4uCisgIGZvcmVhY2goIG9iamVjdCBrZXkgOiBvYnMgKSB7CisgICAgc3dpdGNoIChrZXktPm1vdmUoTUUsIE1fUFVUKSkgeworICAgICAgLy8gRGllIEthcGF6aXRhZXQgaXN0IHVlYmVyIFBfTUFYX09CSkVDVFMgYmVncmVuenQuIEFsbGUKKyAgICAgIC8vIFNjaGxlaWZlbmR1cmNobGFldWZlLCBkaWUgZGllIEthcGF6aXRhZXRzZ3JlbnplIGVycmVpY2hlbiwgbGFuZGVuCisgICAgICAvLyBpbiBkZWZhdWx0IHVuZCBiZWVuZGVuIGRhbWl0IGRpZSBTY2hsZWlmZS4gRGFoZXIgbXVlc3NlbiBzaWUgCisgICAgICAvLyBuaWNodCBnZXNvbmRlcnQgYmVoYW5kZWx0IHdlcmRlbi4KKyAgICAgIGNhc2UgTU9WRV9PSyA6CisgICAgICAgIC8vIEZhbGxzIGRhcyBCcmV0dCB2b2xsIHNlaW4gc29sbHRlLCBhYmVyIGZhZWxzY2hsaWNoZXJ3ZWlzZSAKKyAgICAgICAgLy8gZGVubm9jaCBlaW4gd2VpdGVyZXIgU2NobHVlc3NlbCBoaW5laW5iZXdlZ3Qgd3VyZGUsIGlzdCBucj09MCwKKyAgICAgICAgLy8gdW5kIGVzIHdpcmQgZWluIEZlaGxlciBhdXNnZWxvZXN0LCBkYW1pdCBuaWNodCBoaW50ZXJoZXIgZWluCisgICAgICAgIC8vIFNjaGx1ZXNzZWwgYW4gSGFrZW4gMCBoYWVuZ3QuCisgICAgICAgIGlmICggIW5yICkgeworICAgICAgICAgIHJhaXNlX2Vycm9yKCJGZWhsZXI6IEhha2VuIDAgZGFyZiBuaWNodCBiZWxlZ3Qgd2VyZGVuLiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRlbGxfb2JqZWN0KFRQLCBCUygiRHUgaGFlbmdzdCAiK29ic1swXS0+bmFtZShXRU4sMSkrIiBhbiBIYWtlbiAiKworICAgICAgICAgIG5yKyIuIikpOworICAgICAgICAvLyBOdXIgd2VubiBlaW4gU2NobHVlc3NlbCBlcmZvbGdyZWljaCBkcmFuZ2VoYWVuZ3Qgd3VyZGUsIHdpcmQgZXIKKyAgICAgICAgLy8gaW4gZGllIExpc3RlIGVpbmdldHJhZ2VuLiBFdHdhaWdlIEJlc2NocmlmdHVuZ2VuIGJsZWliZW4gYmVzdGVoZW4sCisgICAgICAgIGhha2VuW25yLCBIT09LX09CXSA9IGtleTsKKyAgICAgICAgLy8gdW5kIG51ciBkYW5uIHdpcmQgZGVyIG5hZWNoc3RlIFNsb3QgcHJvYmllcnQuIFdlbm4gbnVyIGVpbiAKKyAgICAgICAgLy8gU2NobHVlc3NlbCB2ZXJhcmJlaXRldCB3aXJkLCBpc3QgZGFzIGhpZXIgdW5zY2hhZWRsaWNoLCB3ZWlsIGVzIAorICAgICAgICAvLyBuaWNodCBub2NobWFsIGF1c2dld2VydGV0IHdpcmQuCisgICAgICAgIG5yID0gR2V0TmV4dEZyZWVTbG90KCk7CisgICAgICAgIC8vIFNjaGx1ZXNzZWwgd3VyZGUgdmVyYXJiZWl0ZXQgdW5kIE1lbGR1bmcgYXVzZ2VnZWJlbgorICAgICAgICBvYnMgLT0gKHtrZXl9KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1FX0NBTlRfTEVBVkVfRU5WIDoKKyAgICAgIGNhc2UgTUVfQ0FOVF9CRV9JTlNFUlRFRCA6CisgICAgICBjYXNlIE1FX0NBTlRfQkVfRFJPUFBFRCA6CisgICAgICAgIC8vIFNjaGx1ZXNzZWwgd3VyZGUgbmljaHQgZXJmb2xncmVpY2ggZHJhbmdlaGFlbmd0LgorICAgICAgICB0ZWxsX29iamVjdChUUCwgQlMoa2V5LT5OYW1lKFdFUiwxKSsiIHdlaWdlcnQgc2ljaCwgYW5zICIKKyAgICAgICAgICAiU2NobHVlc3NlbGJyZXR0IGdlaGFlbmd0IHp1IHdlcmRlbi4iKSk7CisgICAgICAgIC8vIE1lbGR1bmcgd3VyZGUgYXVzZ2VnZWJlbiwgbmljaHRzIHdlaXRlciB6dSB0dW4uCisgICAgICAgIG9icyAtPSAoe2tleX0pOworICAgICAgICBicmVhazsKKyAgICAgIC8vIFRPT19NQU5ZX09CSkVDVFMgd2lyZCBuaWNodCBoaWVyIGJlaGFuZGVsdCwgc29uZGVybiB3ZWl0ZXIgdW50ZW4sCisgICAgICAvLyB1bSBlaW5lIEF1Zmxpc3R1bmcgZGVyIFNjaGx1ZXNzZWxuYW1lbiBhdXNnZWJlbiB6dSBrb2VubmVuLCBzdGF0dAorICAgICAgLy8gZWluZSBaZWlsZSBwcm8gU2NobHVlc3NlbC4gRGllIGFuZGVyZW4gUnVlY2tnYWJld2VydGUgdm9uIG1vdmUoKSAKKyAgICAgIC8vIHNpbmQgYmVpIGRpZXNlciBBcnQgZGVyIEJld2VndW5nIG5pY2h0IHp1IGVyd2FydGVuLgorICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICB9CisgIC8vIEZ1ZXIgYWxsZSB1ZWJyaWdlbiB3YXIgd29obCBUT09fTUFOWV9PQkpFQ1RTIGRlciBSdWVja2dhYmV3ZXJ0LCBkZW5uCisgIC8vIGRhcyBTY2hsdWVzc2VsYnJldHQgZXJsYXVidCBudXIgUF9NQVhfT0JKRUNUUyA9IDE2LgorICBpZiAoIHNpemVvZihvYnMpICkgeworICAgIHRlbGxfb2JqZWN0KFRQLCBCUygiRnVlciAiK0NvdW50VXAob2JzLT5uYW1lKFdFTikpKyIgaXN0IGxlaWRlciBrZWluICIKKyAgICAgICJIYWtlbiBtZWhyIGFtIFNjaGx1ZXNzZWxicmV0dCBmcmVpLiIpKTsKKyAgfQorICByZXR1cm4gMTsKK30KKworLy8gU2NobHVlc3NlbCBhYm5laG1lbgorc3RhdGljIGludCBzY2hsdWVzc2VsX3Zvbl9oYWtlbl9uZWhtZW4oc3RyaW5nIHN0cikgeworICBpZiggIXN0cmluZ3Aoc3RyKSB8fCAhc2l6ZW9mKHN0cikgKSAKKyAgICByZXR1cm4gMDsKKworICBzdHJpbmcgd2FzLCB3b3JhdXM7CisgIGlmICggc3NjYW5mKHN0ciwgIiVzIGF1cyAlcyIsIHdhcywgd29yYXVzKSAhPSAyICYmIAorICAgICAgIHNzY2FuZihzdHIsICIlcyB2b24gJXMiLCB3YXMsIHdvcmF1cykgIT0gMiApCisgICAgcmV0dXJuIDA7CisKKyAgbm90aWZ5X2ZhaWwoIkRhcyBkYXJmc3QgRHUgbmljaHQhXG4iKTsKKyAgaWYoIWVybGF1YnQoKSkgCisgICAgcmV0dXJuIDA7CisgCisgIG5vdGlmeV9mYWlsKCJXb3JhdXMgd2lsbHN0IER1IGRhcyBkZW5uIG5laG1lbj9cbiIpOworICBpZiAoICFpZCh3b3JhdXMpICYmIHN0cnN0cih3b3JhdXMsICJoYWtlbiIsIDApID09IC0xICkgCisgICAgcmV0dXJuIDA7CisKKyAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgRHUgZGVubiB2b20gU2NobHVlc3NlbGJyZXR0IG5laG1lbj9cbiIpOworICBpZiggIXN0cmluZ3Aod2FzKSApIAorICAgIHJldHVybiAwOworICAKKyAgbm90aWZ5X2ZhaWwoIkRhcyBTY2hsdWVzc2VsYnJldHQgaXN0IGRvY2ggYWJlciBsZWVyLlxuIik7CisgIGlmICggIXNpemVvZihhbGxfaW52ZW50b3J5KE1FKSkgKQorICAgIHJldHVybiAwOworCisgIGludCBoYWtlbm5yOworICBvYmplY3QgKmtleXMgPSAoe30pOworICAvLyBFcyBtdWVzc2VuIGF1Y2ggU2NobHVlc3NlbCB2b24gYmVzdGltbXRlbiBIYWtlbiBhYmdlbm9tbWVuCisgIC8vIHdlcmRlbiBrb2VubmVuLCBuaWNodCBudXIgamV3ZWlscyBkZXIgZXJzdGUgbWl0IGRlciBhbmdlZ2ViZW5lbiBJRC4KKyAgLy8gRGllcyBoYXQgYXVjaCBQcmlvIGdlZ2VudWViZXIgZGVyIGFsbGdlbWVpbmVuIEJlZ3JpZmZzc3VjaGUgbWl0CisgIC8vIGZpbmRfb2JzKCkuCisgIGlmICggc3NjYW5mKHdvcmF1cywgImhha2VuICVkIiwgaGFrZW5ucikgPT0gMSApIHsKKyAgICBub3RpZnlfZmFpbCgiRXMgZ2lidCBudXIgZGllIEhha2VuIDEgYmlzIDE2LlxuIik7CisgICAgaWYgKCBoYWtlbm5yIDwgMSB8fCBoYWtlbm5yID4gMTYgKSAKKyAgICAgIHJldHVybiAwOworICAgIG5vdGlmeV9mYWlsKCJBbiBkaWVzZW0gSGFrZW4gaGFlbmd0IGFiZXIgZG9jaCBrZWluIFNjaGx1ZXNzZWwuXG4iKTsKKyAgICBpZiAoICFvYmplY3RwKGhha2VuW2hha2VubnIsSE9PS19PQl0pICkKKyAgICAgIHJldHVybiAwOworICAgIAorICAgIGtleXMgKz0gKHsgaGFrZW5baGFrZW5ucixIT09LX09CXSB9KTsKKyAgfQorCisgIC8vIEtlaW5lciBnZWZ1bmRlbj8gVmllbGxlaWNodCBpc3QgamEgZWluZXIgbWl0IGVpbmVyIGJlc3RpbW10ZW4gCisgIC8vIEJlc2NocmlmdHVuZyBnZW1laW50PworICBpZiAoICFzaXplb2Yoa2V5cykgKSB7CisgICAgLy8gU2NobHVlc3NlbCBtaXQgZGVtIGFuZ2VnZWJlbmVuIE5hbWVuIHN1Y2hlbgorICAgIGtleXMgPSBUUC0+ZmluZF9vYnMod2FzKyIgaW4gYnJldHQgaW4gcmF1bSIpOworICAgIC8vIEhha2VubnVtbWVyIGVybWl0dGVsbiwgd2VubiBlaW5lIEJlc2NocmlmdHVuZyBhbmdlZ2ViZW4gd3VyZGUuCisgICAgc3RyaW5nIHdhbnRlZF9kZXNjOworICAgIHNzY2FuZih3YXMsICJzY2hsdWVzc2VsIGZ1ZXIgJXMiLCB3YW50ZWRfZGVzYyk7CisgICAgb2JqZWN0IHdhbnRlZF9rZXkgPSBHZXRLZXlGb3JMYWJlbCh3YW50ZWRfZGVzYyk7CisgICAgaWYgKCBvYmplY3RwKHdhbnRlZF9rZXkpICkKKyAgICAgIGtleXMgKz0gKHt3YW50ZWRfa2V5fSk7CisgIH0KKyAgLy8gSW1tZXIgbm9jaCBuaXggZ2VmdW5kZW4/IERhbm4gbXVzcyBzaWNoIGRlciBTcGllbGVyIHdhcyBhbmRlcmVzIAorICAvLyBlaW5mYWxsZW4gbGFzc2VuLgorICBub3RpZnlfZmFpbCgiQW0gU2NobHVlc3NlbGJyZXR0IGhhZW5ndCBrZWluIHNvbGNoZXIgU2NobHVlc3NlbC5cbiIpOworICBpZiAoICFzaXplb2Yoa2V5cykgKQorICAgIHJldHVybiAwOworCisgIC8vIEFsbGUgZ2VmdW5kZW5lbiBTY2hsdWVzc2VsIHZlcmFyYmVpdGVuLiBBbGxlLCBkaWUgbmljaHQgYmV3ZWd0IHdlcmRlbgorICAvLyBrb2VubmVuLCB2ZXJibGVpYmVuIGluIGRlciBMaXN0ZS4KKyAgZm9yZWFjaCggb2JqZWN0IGtleSA6IGtleXMgKSB7CisgICAgaW50IGN1cnJlbnRfaG9vayA9IEdldEhvb2tOdW1iZXJGb3JLZXkoa2V5KTsKKyAgICBpZiAoIGtleS0+bW92ZShUUCxNX0dFVCkgPT0gTU9WRV9PSyApIHsKKyAgICAgIGtleXMgLT0gKHsga2V5IH0pOworICAgICAgdGVsbF9vYmplY3QoVFAsIEJTKCJEdSBuaW1tc3QgIitrZXktPm5hbWUoV0VOLDEpKyIgdm9uIEhha2VuICIrCisgICAgICAgIGN1cnJlbnRfaG9vaysiIGFiLiIpKTsKKyAgICAgIC8vIFNjaGx1ZXNzZWwgYXVzdHJhZ2VuOyBiZXN0ZWhlbmRlIEJlc2NocmlmdHVuZ2VuIGJsZWliZW4gZXJoYWx0ZW4KKyAgICAgIGhha2VuW2N1cnJlbnRfaG9vaywgSE9PS19PQl0gPSAwOworICAgIH0KKyAgfQorICAvLyBWb24gYWxsZW4gbmljaHQgdm9tIEhha2VuIGdlbm9tbWVuZW4gU2NobHVlc3NlbG4gZGllIE5hbWVuIGVybWl0dGVsbgorICAvLyB1bmQgYXVmbGlzdGVuLgorICBpZiAoIHNpemVvZihrZXlzKSApIHsKKyAgICB0ZWxsX29iamVjdChUUCwgQlMoY2FwaXRhbGl6ZShDb3VudFVwKGtleXMtPm5hbWUoV0VSLDEpKSkrIiAiKworICAgICAgKHNpemVvZihrZXlzKT09MT8ia29ubnRlIjoia29ubnRlbiIpKyIgbmljaHQgdm9tIFNjaGx1ZXNzZWxicmV0dCAiCisgICAgICAiYWJnZW5vbW1lbiB3ZXJkZW4uIikpOworICB9CisgIHJldHVybiAxOworfQorCisvLyBWZXJmdWVnYmFyZSBLb21tYW5kb3MgYXVmbGlzdGVuLgordmFyYXJncyBpbnQgc2tvbW1hbmRvcyhzdHJpbmcgc3RyKSB7CisgIG5vdGlmeV9mYWlsKCAiRmVobGVyOiBEaWVzZXIgQmVmZWhsIGJlbm9ldGlndCBlaW5lIGd1ZWx0aWdlIE9iamVrdC1JZCBhbHMgIgorICAgICsiUGFyYW1ldGVyLlxuQmVpc3BpZWw6IHNrb21tYW5kb3MgW3NjaGx1ZXNzZWxdYnJldHRcbiIpOworICAKKyAgaWYoICFpZChzdHIpICkgcmV0dXJuIDA7CisKKyAgd3JpdGUoCisgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgIj09PT09PT09PT1cbiIKKyAgICAiQWt0dWVsbGUgVmVyc2lvbjogIitRdWVyeVByb3AoImNudF92ZXJzaW9uX3N0ZCIpKworICAgICAgUXVlcnlQcm9wKCJjbnRfdmVyc2lvbl9vYmoiKSsiXG4iKworICAgIEJTKE5hbWUoV0VSLDEpKyIga2FubiBudXIgaW4gZGllc2VtIFNlaGVyaGF1cyB2ZXJ3ZW5kZXQgd2VyZGVuLCAiCisgICAgImRhICIrUXVlcnlQcm9ub3VuKFdFUikrIiBzcGV6aWVsbCBkYWZ1ZXIgZ2VrYXVmdCB3dXJkZS4gIisKKyAgICBDQVAoUXVlcnlQcm9ub3VuKFdFUikpKyIgdmVyZnVlZ3QgdWViZXIgZm9sZ2VuZGUgS29tbWFuZG9zOiIpKworICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICItLS0tLS0tXG4iCisgICAgInNlcmxhdWJlIFtzY2hsdWVzc2VsXWJyZXR0IFtzcGllbGVybmFtZXxcImhhdXNmcmV1bmRlXCJ8XCJ6d2VpdGllc1wiXVxuIgorICAgICIgIEVybGF1YnQgUGVyc29uZW4sICIrbmFtZShXRU4sMSkrIiBtaXR6dWJlbnV0emVuLlxuIgorICAgICIgIHNlcmxhdWJlIG9obmUgQW5nYWJlIGVpbmVzIEFyZ3VtZW50cyBsaXN0ZXQgYWxsZSBQZXJzb25lbiBtaXQgWnVncmlmZiAiCisgICAgICAiYXVmXG4gICIrbmFtZShXRU4sMSkrIiBhdWYuXG5cbiIKKyAgICAidmVyc2NoaWViZSBbc2NobHVlc3NlbF1icmV0dCBuYWNoIFthdXNnYW5nXVxuIgorICAgICIgIERhbWl0IGthbm5zdCBEdSAiK25hbWUoV0VOLDEpKyIgaW5uZXJoYWxiIERlaW5lcyBTZWhlcmhhdXNlcyAiCisgICAgInZlcnNjaGllYmVuLlxuXG4iCisgICAgInN2ZXJzdGVja2UgW3NjaGx1ZXNzZWxdYnJldHRcbiIKKyAgICAiICBEYW1pdCBtYWNoc3QgRHUgIituYW1lKFdFTiwxKSsiIHVuc2ljaHRiYXIuXG4iCisgICAgInNob2xlIFtzY2hsdWVzc2VsXWJyZXR0IGhlcnZvclxuIgorICAgICIgIERhbWl0IG1hY2hzdCBEdSAiK25hbWUoV0VOLDEpKyIgd2llZGVyIHNpY2h0YmFyLlxuIgorICAgICJ6ZXJ0cnVlbW1lciBbc2NobHVlc3NlbF1icmV0dFxuIgorICAgICIgIERhbWl0IHplcnN0b2Vyc3QgRHUgZGFzIFNjaGx1ZXNzZWxicmV0dC5cbiIKKyAgICAic2Jlc2NocmlmdGUgaGFrZW4gPG5yPiBtaXQgPHRleHQ+fG5pY2h0c1xuIgorICAgICIgIEVpbmUgQmVzY2hyaWZ0dW5nIGFuIGVpbmVtIEhha2VuIGFuYnJpbmdlbiBvZGVyIGxvZXNjaGVuLlxuIgorICAgICJzbGlzdGUgbGFuZ3xrdXJ6XG4iCisgICAgIiAgU2NobHVlc3NlbGFuemVpZ2Uga29uZmlndXJpZXJlbjogYWxsZSBvZGVyIG51ciBiZWxlZ3RlIGF1Zmxpc3Rlbi5cbiIKKyAgICAiaGFlbmdlIDxzY2hsdWVzc2VsbmFtZT4gYW4gaGFrZW4gW25yXVxuIgorICAgICJoYWVuZ2UgPHNjaGx1ZXNzZWxuYW1lPiBhbiBbc2NobHVlc3NlbF1icmV0dFxuIgorICAgICIgIERhbWl0IGhhZW5nc3QgRHUgZWluZW4gU2NobHVlc3NlbCBhbiBkYXMgQnJldHQuXG4iCisgICAgIm5pbW0gc2NobHVlc3NlbCB2b24gaGFrZW4gPG5yPlxuIgorICAgICJuaW1tIDxzY2hsdWVzc2VsbmFtZT4gdm9uIFtzY2hsdWVzc2VsXWJyZXR0XG4iCisgICAgIm5pbW0gc2NobHVlc3NlbCBmdWVyIDxiZXNjaHJpZnR1bmc+IHZvbiBbc2NobHVlc3NlbF1icmV0dC5cbiIKKyAgICAiICBEYW1pdCBuaW1tc3QgRHUgZWluZW4gU2NobHVlc3NlbCB2b20gU2NobHVlc3NlbGJyZXR0LlxuIgorICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorICAgICI9PT09PT09PT09XG4iKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXJsYXVibmlzX2xpc3RlKCkKK3sKKyAgaWYoIFF1ZXJ5SGF1c2Jlc2l0emVyKCkgIT0gUXVlcnlUUCgpICYmICFRdWVyeVByb3AoInRlc3QiKSApCisgIHsKKyAgICB0ZWxsX29iamVjdChUUCwgQlMoIk51ciAiK1F1ZXJ5SGF1c2Jlc2l0emVyKCkrIiBkYXJmIEJlcmVjaHRpZ3VuZ2VuICIKKyAgICAgICtuYW1lKFdFU1NFTiwxKSsiIGFiZnJhZ2VuISIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICAKKyAgc3RyaW5nICpzdHJzOworICBzdHJpbmcgc3RyID0gCisgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgIj09PT09PT09PT1cbiI7CisgIGlmICggaGF1c2VybGF1Ym5pcyApIHsKKyAgICBzdHJzID0gU0hWRVJXQUxURVItPkhhdXNQcm9wKExPV0VSKFF1ZXJ5SGF1c2Jlc2l0emVyKCkpLCAyKTsKKyAgICBzdHIgKz0gIkZvbGdlbmRlIEZyZXVuZGUgRGVpbmVzIEhhdXNlcyBkdWVyZmVuICIrbmFtZShXRU4sMSkrCisgICAgICAiIG1pdGJlbnV0emVuOlxuIjsKKyAgICBpZihzaXplb2Yoc3RycykpIHsKKyAgICAgIHN0ciArPSBCUyhDb3VudFVwKHN0cnMpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBzdHIgKz0gQlMoIkR1IGhhc3Qga2VpbmVyIFBlcnNvbiBadWdyaWZmIGF1ZiBEZWluIEhhdXMgZ2V3YWVocnQuLi4iKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgc3RyKz0gQlMoIkRpZSBGcmV1bmRlIERlaW5lcyBIYXVzZXMgZHVlcmZlbiAiK25hbWUoV0VOLDEpKworICAgICAgIiBuaWNodCBtaXRiZW51dHplbi4iKTsKKyAgfQorCisgIHN0ciArPSAKKyAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICAiLS0tLS0tLS0tLVxuIjsKKworICBpZiggendlaXRpZWVybGF1Ym5pcyE9IiIgKSB7CisgICAgaWYoIHp3ZWl0aWVlcmxhdWJuaXM9PWdldGV1aWQoVFApICkKKyAgICAgIHN0ciArPSBCUygiQWxsZSBEZWluZSBad2VpdGllcyBkdWVyZmVuICIrbmFtZShXRU4sMSkrIiBtaXRiZW51dHplbi4iKTsKKyAgICBlbHNlCisgICAgICBzdHIgKz0gQlMoIkFsbGUgWndlaXRpZXMgdm9uICIrQ0FQKHp3ZWl0aWVlcmxhdWJuaXMpKyIgZHVlcmZlbiAiCisgICAgICAgICtuYW1lKFdFTiwxKSsiIG1pdGJlbnV0emVuLiIpOworICAgIHN0ciArPQorICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgICAiLS0tLS0tLS0tLVxuIjsKKyAgfQorICAKKyAgc3Rycz1RdWVyeVByb3AoImNudF9lcmxhdWJuaXMiKTsKKworICBpZihzaXplb2Yoc3RycykpIHsKKyAgICBzdHIgKz0gQlMoIkZvbGdlbmRlIHNvbnN0aWdlIFBlcnNvbmVuIGR1ZXJmZW4gIituYW1lKFdFTiwxKSsKKyAgICAgICIgbWl0YmVudXR6ZW46Iik7CisgICAgc3RyICs9IENvdW50VXAoc3Rycyk7CisgIH0KKyAgZWxzZSB7CisgICAgc3RyICs9IEJTKCJFcyBnaWJ0IGtlaW5lIHNvbnN0aWdlbiBQZXJzb25lbiwgZGllICIrbmFtZShXRU4sMSkrCisgICAgICAiIG1pdGJlbnV0emVuIGR1ZXJmZW4uIik7CisgIH0KKyAgc3RyICs9CisgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgIj09PT09PT09PT1cbiI7CisgIAorICByZXR1cm4gMTsKK30KKworLy8gSGFrZW4gYmVzY2hyaWZ0ZW4uCitzdGF0aWMgaW50IGNtZF9iZXNjaHJpZnRlbihzdHJpbmcgc3RyKSB7CisgIHN0cmluZyBuZm0gPSAiU3ludGF4OiBzYmVzY2hyaWZ0ZSBoYWtlbiA8aGFrZW5udW1tZXI+IG1pdCAiCisgICAgIjx0ZXh0PnxuaWNodHNcbiIKKyAgICAiRnVlciA8dGV4dD4ga2FubnN0IER1IGVpbmVuIGJlbGllYmlnZW4gVGV4dCBtaXQgYmlzIHp1IDMwIFplaWNoZW4gIgorICAgICJhbmdlYmVuLFxuIgorICAgICInbmljaHRzJyBsb2VzY2h0IGRpZSBCZXNjaHJpZnR1bmcgZWluZXMgU2NoaWxkZXMuXG4iOworCisgIG5vdGlmeV9mYWlsKCJEYXMgZGFyZnN0IER1IG5pY2h0IVxuIik7CisgIGlmKCFlcmxhdWJ0KCkpIAorICAgIHJldHVybiAwOworICAKKyAgc3RyaW5nIHRleHQ7CisgIGludCBobnI7CisgIHN0ciA9IFRQLT5fdW5wYXJzZWRfYXJncygwKTsKKyAgbm90aWZ5X2ZhaWwobmZtKTsKKyAgaWYgKCAhc3RyaW5ncChzdHIpIHx8ICFzaXplb2Yoc3RyKSApIAorICAgIHJldHVybiAwOworICBpZiAoIHNzY2FuZihzdHIsImhha2VuICVkIG1pdCAlcyIsIGhuciwgdGV4dCkhPTIgKQorICAgIHJldHVybiAwOworCisgIG5vdGlmeV9mYWlsKCJXZWxjaGVuIEhha2VuIG1vZWNodGVzdCBEdSBiZXNjaHJpZnRlbj9cbiIrbmZtKTsKKyAgaWYoIWhucikgCisgICAgcmV0dXJuIDA7CisgIAorICBub3RpZnlfZmFpbCgiRXMgZ2lidCBudXIgZGllIEhha2VuIDEgYmlzIDE2LlxuIik7CisgIGlmICggaG5yIDwgMSB8fCBobnIgPiAxNiApIAorICAgIHJldHVybiAwOworCisgIG5vdGlmeV9mYWlsKCJXb21pdCBtb2VjaHRlc3QgRHUgZGVuIEhha2VuIGJlc2NocmlmdGVuP1xuIituZm0pOworICBpZiggIXN0cmluZ3AodGV4dCkgfHwgIXNpemVvZih0ZXh0KSApCisgICAgcmV0dXJuIDA7CisKKyAgbm90aWZ5X2ZhaWwoIkRlciBUZXh0IHNvbGx0ZSBuaWNodCBsYWVuZ2VyIGFscyAzMCBaZWljaGVuIHNlaW4uXG4iKTsKKyAgaWYoc2l6ZW9mKHRleHQpID4gMzApIAorICAgIHJldHVybiAwOworCisgIGlmICggbG93ZXJfY2FzZSh0ZXh0KSA9PSAibmljaHRzIiApIHsKKyAgICBpZiAoIHN0cmluZ3AoaGFrZW5baG5yLEhPT0tfTEFCRUxdKSApIHsKKyAgICAgIHRlbGxfb2JqZWN0KFRQLCBCUygiU29yZ2ZhZWx0aWcgd2lzY2hzdCBEdSBkaWUgQmVzY2hyaWZ0dW5nIGRlcyAiCisgICAgICAgICJIYWtlbnMgIitobnIrIiB3ZWcuIikpOworICAgICAgaGFrZW5baG5yLEhPT0tfTEFCRUxdPTA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGVsbF9vYmplY3QoVFAsIEJTKCJEdSBtdXNzdCBEaWNoIGdlaXJydCBoYWJlbi4gSGFrZW4gIitobnIrIiBpc3QgIgorICAgICAgICAiZ2FyIG5pY2h0IGJlc2NocmlmdGV0LiIpKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoIGxvd2VyX2Nhc2UodGV4dCkgPT0gInNjaGx1ZXNzZWwiICkgeworICAgIHRlbGxfb2JqZWN0KFRQLCBCUygKKyAgICAgICJEdSBzb2xsdGVzdCBEaXIgZXR3YXMgQXVzc2FnZWtyYWVmdGlnZXJlcyBlaW5mYWxsZW4gbGFzc2VuLiIpKTsKKyAgfQorICBlbHNlIHsKKyAgICB0ZWxsX29iamVjdChUUCwgQlMoIkR1IGJlc2NocmlmdGVzdCBkYXMgU2NoaWxkY2hlbiB1ZWJlciBIYWtlbiAiK2hucisKKyAgICAgICIgbWl0ICIrdGV4dCsiLiIpKTsKKyAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgQlMoCisgICAgICBUUC0+TmFtZShXRVIpKyIgc2NocmVpYnQgZXR3YXMgYW5zIFNjaGx1ZXNzZWxicmV0dC4iKSwgKHtUUH0pKTsKKyAgICBoYWtlbltobnIsSE9PS19MQUJFTF0gPSB0ZXh0OworICB9CisgIHJldHVybiAxOworfQorCisvKioqKiogSElMRlNGVU5LVElPTkVOICoqKioqLworCisvLyBCZXNjaHJlaWJ1bmcgZWluZXMgSGFrZW5zIGVyemV1Z2VuLiBXZW5uIDxrZXludW0+IGFuZ2VnZWJlbiB3aXJkLCAKKy8vIHdpcmQgbnVyIGRlciBnZXN1Y2h0ZSBIYWtlbiBhbmdlemVpZ3QsIGVnYWwgb2IgbGVlciBvZGVyIG5pY2h0LiAKKy8vIEFuc29uc3RlbiB3ZXJkZW4gZGllIGJlbGVndGVuIEhha2VuIGFuZ2V6ZWlndCwgYXVzc2VyIHdlbm4gCisvLyA8aG9va2xpc3RfbG9uZz4gZ2VzZXR6dCBpc3QuIERhbm4gd2VyZGVuIGFsbGUgSGFrZW4gYXVmZ2VsaXN0ZXQuCitwcml2YXRlIHZhcmFyZ3Mgc3RyaW5nIEtleURlc2NyaXB0aW9uKGludCBrZXludW0pIHsKKyAgc3RyaW5nIGRlc2M9IiI7CisgIG1hcHBpbmcga2V5bGlzdD0oWzoyXSk7CisKKyAgLy8gTGlzdGUgZGVySGFrZW4gYXVmIGRlbi9kaWUgZ2VzdWNodGVuIGVpbnNjaHJhZW5rZW4uCisgIC8vIE51ciBlaW4gSGFrZW4gc29sbCBhbmdlc2NoYXV0IHdlcmRlbi4gRGllcyBoYXQgaW1tZXIgUHJpb3JpdGFldCwKKyAgLy8gZC5oLiBhdWNoIGJlaSA8c2xpc3RlIGFsbGU+IHdpcmQgbnVyIGVpbiBIYWtlbiBnZWxpc3RldC4KKyAgaWYgKCBrZXludW0gKSB7CisgICAgbV9hZGQoa2V5bGlzdCwga2V5bnVtLCBtX2VudHJ5KGhha2VuLCBrZXludW0pLi4uKTsKKyAgfQorICAvLyBXZW5uIDxzbGlzdGUgYWxsZT4gZ2VzZXR6dCBpc3QsIGFsbGUgYXVzZ2ViZW4uCisgIGVsc2UgaWYgKCBob29rbGlzdF9sb25nICkgeworICAgIGtleWxpc3QgPSBoYWtlbjsKKyAgfQorICAvLyBBbnNvbnN0ZXIgbnVyIGRpZSBiZWxlZ3Rlbi4KKyAgZWxzZSB7CisgICAga2V5bGlzdCA9IGZpbHRlcihoYWtlbiwgCisgICAgICBmdW5jdGlvbiBpbnQgKGludCBudW0sIDxzdHJpbmd8b2JqZWN0PiogdmFsdWVzKSB7CisgICAgICAgIHJldHVybiBvYmplY3RwKHZhbHVlc1swXSk7CisgICAgICB9KTsKKyAgfQorCisgIC8vIFVlYmVyIGRhcyBNYXBwaW5nIG1pdCBkZW4gc2VsZWt0aWVydGVuIEhha2VuIGxhdWZlbiB1bmQgQXVzZ2FiZW4KKyAgLy8gZXJ6ZXVnZW4uCisgIGZvcmVhY2goaW50IG51bSA6IDEuLjE2KSB7CisgICAgLy8gSGllciB3aXJkIGRlciBha3R1ZWxsZSBXZXJ0IHVlYmVyc3BydW5nZW4sIHdlbm4gZXIgbmljaHQgZW50aGFsdGVuIAorICAgIC8vIGlzdCwgZGEgZGllIFp1d2Vpc3VuZyBpbiA8a2V5PiB1bmQgPGtleWRlc2M+IGF1Y2ggZGFubiBlaW5lIDAgZXJnZWJlbgorICAgIC8vIHd1ZXJkZSwgdW5kIHNvbWl0IEtleXMgbWl0IGxlZXJlbiBWYWx1ZXMgbmljaHQgdm9uIG5pY2h0IGV4aXN0aWVyZW5kZW4KKyAgICAvLyBLZXlzIHp1IHVudGVyc2NoZWlkZW4gd2FlcmVuLgorICAgIGlmICggbWVtYmVyKG1faW5kaWNlcyhrZXlsaXN0KSwgbnVtKSA9PSAtMSApCisgICAgICBjb250aW51ZTsKKyAgICBzdHJpbmcga2V5ZGVzYyA9IGtleWxpc3RbbnVtLCBIT09LX0xBQkVMXTsKKyAgICBvYmplY3Qga2V5ID0ga2V5bGlzdFtudW0sIEhPT0tfT0JdOworICAgIGRlc2MgKz0gIkhha2VuICIgKyBudW0gKyAoc3RyaW5ncChrZXlkZXNjKT8iIFsiK2tleWRlc2MrIl06ICIgOiAiOiAiKTsKKyAgICBkZXNjICs9IChvYmplY3RwKGtleSkgPyBrZXktPnNob3J0KCkgOiAibGVlclxuIik7CisgIH0KKyAgcmV0dXJuIGRlc2M7Cit9CisKKy8vIFJ1ZWNrZ2FiZXdlcnQ6IDEsIHdlbm4gZXMgc2ljaCB1bSBlaW4gU2NobHVlc3NlbG9iamVrdCBoYW5kZWx0LCBzb25zdCAwLgorLy8gU2NobHVlc3NlbCB3ZXJkZW4gYW5oYW5kIGRlciBJRCAic2NobHVlc3NlbCIgZXJrYW5udCBvZGVyIGRhcmFuLCBkYXNzCisvLyBRdWVyeURvb3JLZXkoKSBlaW5lbiBXZXJ0IHp1cnVlY2tnaWJ0LCBkLmguIGRhc3MgZGllc2VzIE9iamVrdCBlaW5lCisvLyBTdGFuZGFyZC1Eb29ybWFzdGVyLVR1ZXIgb2VmZm5ldC4KK3ByaXZhdGUgaW50IElzVmFsaWRLZXkob2JqZWN0IG9iKSB7CisgIHJldHVybiAob2JqZWN0cChvYikgJiYgKG9iLT5pZCgic2NobHVlc3NlbCIpIHx8IG9iLT5RdWVyeURvb3JLZXkoKSE9MCkpOworfQorCisvLyBHaWJ0IGRpZSBOdW1tZXIgZGVzIG5hZWNoc3RlbiBmcmVpZW4gSGFrZW5zIHp1cnVlY2sgb2RlciAwLCB3ZW5uCisvLyBrZWluZXIgZnJlaSBpc3QuIERhIE1hcHBpbmdzIG5pY2h0IHNvcnRpZXJ0IHNpbmQsIG11c3Mgdm9uIDEtMTYgbnVtZXJpc2NoCisvLyBpdGVyaWVydCB3ZXJkZW4sIGRhbWl0IGltbWVyIGRlciBlcnN0ZSBmcmVpZSBIYWtlbiBnZWZ1bmRlbiB3aXJkIHVuZCBuaWNodCAKKy8vIGlyZ2VuZGVpbmVyLgorLy8gUnVlY2tnYWJld2VydDogSGFrZW5udW1tZXIgdm9uIDEtMTYgb2RlciAwLCB3ZW5uIGtlaW4gSGFrZW4gZnJlaSBpc3QuCitwcml2YXRlIGludCBHZXROZXh0RnJlZVNsb3QoKSB7CisgIGludCBzbG90OworICBmb3JlYWNoKGludCBpIDogMS4uMTYpIHsKKyAgICBpZiAoICFvYmplY3RwKGhha2VuW2ksSE9PS19PQl0pICkgeworICAgICAgc2xvdCA9IGk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHNsb3Q7Cit9CisKKy8vIEdpYnQgenUgZWluZXIgU2NoaWxkLUJlc2NocmlmdHVuZyBkaWUgenVnZWhvZXJpZ2UgSGFrZW5wb3NpdGlvbiBhdXMuCisvLyBFcyB3aXJkIGRpZSBrbGVpbmdlc2NocmllYmVuZSBWYXJpYW50ZSBnZXN1Y2h0LCBzbyBkYXNzIFNwaWVsZXIgendhcgorLy8gR3Jvc3NzY2hyZWlidW5nIGluIGRlbiBCZXNjaHJpZnR1bmdlbiB2ZXJ3ZW5kZW4ga29lbm5lbiwgZGllc2UgYWJlcgorLy8gbmljaHQgYmVydWVja3NpY2h0aWd0IHdpcmQuIEFuc29uc3RlbiBrb2VubnRlIGVzIHp1IFNjaHdpZXJpZ2tlaXRlbiBtaXQKKy8vIERvcHBsdW5nZW4gd2llICJWZXNyYXkiIHVuZCAidmVzcmF5IiBrb21tZW4uCisvLyBSdWVja2dhYmV3ZXJ0OiBIYWtlbm51bW1lciB2b24gMS0xNiBvZGVyIDAsIHdlbm4gZGVyIFRleHQgbmljaHQgZ2VmdW5kZW4KKy8vIHd1cmRlLgorcHJpdmF0ZSBvYmplY3QgR2V0S2V5Rm9yTGFiZWwoc3RyaW5nIGxhYmVsKSB7CisgIGlmICggbGFiZWwgKSAKKyAgICBsYWJlbCA9IGxvd2VyX2Nhc2UobGFiZWwpOworICBmb3JlYWNoKGludCBpOiAxLi4xNikgeworICAgIGlmICggaGFrZW5baSwgSE9PS19MQUJFTF0gJiYgbGFiZWwgJiYKKyAgICAgICAgIGxvd2VyX2Nhc2UoaGFrZW5baSxIT09LX0xBQkVMXSkgPT0gbGFiZWwgKQorICAgICAgcmV0dXJuIGhha2VuW2ksSE9PS19PQl07CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8vIEdpYnQgenUgZGVtIHVlYmVyZ2ViZW5lbiBPYmpla3QgZGllIE51bW1lciBkZXMgSGFrZW5zIHp1cnVlY2ssIGFuIGRlbQorLy8gZXMgaGFlbmd0LgorcHJpdmF0ZSBpbnQgR2V0SG9va051bWJlckZvcktleShvYmplY3Qgb2IpIHsKKyAgZm9yZWFjaChpbnQgbnVtLCBvYmplY3Qga2V5IDogaGFrZW4pIHsKKyAgICBpZiAoIGtleSA9PSBvYiApCisgICAgICByZXR1cm4gbnVtOworICB9CisgIHJldHVybiAwOworfQorCisvLyBCZXJlaW5pZ3QgRGF0ZW5zdHJ1a3R1ciBpbiA8aGFrZW4+IHVuZCBkYXMgSW52ZW50YXIgZGVzIEJyZXR0ZXMsIGluZGVtCisvLyBhKSBnZXBydWVmdCB3aXJkLCBvYiBhbGxlIGluIDxoYWtlbj4gZWluZ2V0cmFnZW5lbiBPYmpla3RlIHNpY2ggYXVjaCBpbSAKKy8vICAgIEJyZXR0IGJlZmluZGVuIHVuZAorLy8gYikgZ2VwcnVlZnQgd2lyZCwgb2IgYWxsZSBpbSBJbnZlbnRhciBiZWZpbmRsaWNoZW4gT2JqZWt0ZSBhdWNoIGtvcnJla3QgaW4gCisvLyAgICA8aGFrZW4+IGVpbmdldHJhZ2VuIHNpbmQuCisvLyBVZWJlcnphZWhsaWdlIE9iamVrdGUgd2VyZGVuIHJhdXNnZXdvcmZlbi4KK3ByaXZhdGUgdm9pZCBDb25zb2xpZGF0ZUludmVudG9yeSgpIHsKKyAgZm9yZWFjaChpbnQgaSwgb2JqZWN0IG9iIDogaGFrZW4pIHsKKyAgICAvLyBPYmpla3QgZXhpc3RpZXJ0LCBpc3QgYWJlciBuaWNodCBpbSBTY2hsdWVzc2VsYnJldHQ/IERhbm4gYXVzdHJhZ2VuLgorICAgIGlmIChvYmplY3RwKG9iKSAmJiBlbnZpcm9ubWVudChvYikgIT0gTUUpIHsKKyAgICAgIG1fZGVsZXRlKGhha2VuLCBpKTsKKyAgICAgIC8vIFdpcmQgYXVjaCB2b20gcmVzZXQoKSBhdXMgZ2VydWZlbiwgZGFubiBpc3QgVFAgPT0gMC4KKyAgICAgIGlmICggb2JqZWN0cChUUCkgKQorICAgICAgICB0ZWxsX29iamVjdChUUCwgQlMoIkhvcHBsYSEgIitvYi0+TmFtZShXRVIsMSkrIiBzY2hlaW50IHZvbSAiCisgICAgICAgICAgIlNjaGx1ZXNzZWxicmV0dCB2ZXJzY2h3dW5kZW4genUgc2VpbiEiKSk7CisgICAgfQorICB9CisgIG9iamVjdCAqcmVzdGVyYW1wZSA9IGFsbF9pbnZlbnRvcnkoTUUpIC0gbV92YWx1ZXMoaGFrZW4sIEhPT0tfT0IpOworICBpZiAoc2l6ZW9mKHJlc3RlcmFtcGUpKSB7CisgICAgcmVzdGVyYW1wZS0+bW92ZShlbnZpcm9ubWVudCgpLE1fUFVUKTsKKyAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgQlMoIlBsb2V0emxpY2ggZmFlbGx0IGV0d2FzIHZvbSAiCisgICAgICAiU2NobHVlc3NlbGJyZXR0IHp1IEJvZGVuLCBkYXMgRHUgenV2b3IgZ2FyIG5pY2h0IGdlc2VoZW4gaGF0dGVzdC4iKSk7CisgIH0KK30KKworc3RyaW5nIHNob3J0KCkgeworICBzdHJpbmcgc2g9UXVlcnlQcm9wKFBfU0hPUlQpOworCisgIC8vIFVuc2ljaHRiYXI/IERhbm4gZ2lidHMgbmljaHRzIHp1IHNlaGVuIC4uLgorICBpZiAoIFF1ZXJ5UHJvcChQX0lOVklTKSB8fCAhc2ggKQorICAgIHJldHVybiAwOworICBpZiAoIFF1ZXJ5UHJvcCgidmVyc3RlY2t0IikgPT0gMSApIAorICAgIHNoID0gIiI7CisgIGVsc2UgCisgICAgc2ggKz0gIi4iOworCisgIHJldHVybiBwcm9jZXNzX3N0cmluZyhzaCkrIlxuIjsKK30KKworLy8gSW0gUmVzZXQgdm9yc2ljaHRzaGFsYmVyIGF1Y2ggbWFsIGF1ZnJhZXVtZW4uCit2b2lkIHJlc2V0KCkgeworICBDb25zb2xpZGF0ZUludmVudG9yeSgpOworICByZXR1cm4gOjpyZXNldCgpOworfQorCit2YXJhcmdzIGludCBQcmV2ZW50SW5zZXJ0KG9iamVjdCBvYikgeworICAvLyBLZWluIFNjaGx1ZXNzZWw/IEhhdCBpbiBkaWVzZW0gQ29udGFpbmVyIG5peCB2ZXJsb3JlbiEKKyAgaWYoICFJc1ZhbGlkS2V5KG9iICkpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorICBDb25zb2xpZGF0ZUludmVudG9yeSgpOworICByZXR1cm4gOjpQcmV2ZW50SW5zZXJ0KG9iKTsKK30KKworLy8gV2VubiBlaW4gU2NobHVlc3NlbCBzaWNoIGF1ZmxvZXN0LCBtdXNzIGRpZSBMaXN0ZSBhYmdlZ2xpY2hlbiB3ZXJkZW4uCit2b2lkIE5vdGlmeVJlbW92ZShvYmplY3Qgb2IpIHsKKyAgdGVsbF9yb29tKGVudmlyb25tZW50KE1FKSwgQlMoIkhvcHBsYSEgIitvYi0+TmFtZShXRVIsMSkrIiBoYXQgc2ljaCAiCisgICAgImdlcmFkZSBpbiBXb2hsZ2VmYWxsZW4gYXVmZ2Vsb2VzdC4iKSk7CisgIC8vIERhcyBPYmpla3QgPG9iPiB6ZXJzdG9lcnQgc2ljaCBlcnN0IG5hY2ggZGVtIEF1ZnJ1ZiBkaWVzZXIgRnVua3Rpb24sCisgIC8vIGRhaGVyIHBlciBjYWxsX291dCgpIGF1ZnJhZXVtZW4uCisgIGNhbGxfb3V0KCMnQ29uc29saWRhdGVJbnZlbnRvcnksIDEpOworfQorCisvLyBaZXNzdHJhLCAxLjcuMDcsIGZ1ZXJzIEhvZXJyb2hyCisvLyBEYXJmIGljaCBkYSBBcmF0aG9ybiBlaW50cmFnZW4/IDstKQorc3RyaW5nIEdldE93bmVyKCkgeworICByZXR1cm4gInNlbGV2ZW4iOworfQorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3NjaHJhZW5rZXJfZ3V0c2NoZWluLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3NjaHJhZW5rZXJfZ3V0c2NoZWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4OTIwNAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc2NocmFlbmtlcl9ndXRzY2hlaW4uYwpAQCAtMCwwICsxLDQ0IEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBTY2hyYWVuZ2VyLUd1dHNjaGVpbgorLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMDUuMDUuMjAwMQorLy8gTWFnaWVyOiAgICAgICAgICAgICAgU3dpZnQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2luY2x1ZGUgInNjaHJhbmtsYWRlbi5oIgorI2luY2x1ZGUgPGFuc2kuaD4KK2luaGVyaXQgInN0ZC90aGluZyI7CisKK2NyZWF0ZSgpCit7CisgIGlmICghY2xvbmVwKFRPKSkgcmV0dXJuOworICA6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfU0hPUlQsICJFaW4gR3V0c2NoZWluIik7CisgIFNldFByb3AoUF9MT05HLCAiQEBsb25ndGV4dEBAIik7CisgIEFkZElkKCh7Imd1dHNjaGVpbiJ9KSk7CisgIFNldFByb3AoUF9OQU1FLCAiR3V0c2NoZWluIik7CisgIFNldFByb3AoUF9HRU5ERVIsIE1BTEUpOworICBTZXRQcm9wKFBfV0VJR0hULCA1KTsgICAgICAgICAgICAvLyBHZXdpY2h0IDVnCisgIFNldFByb3AoUF9WQUxVRSwgMCk7ICAgICAgICAgICAgIC8vIEtlaW4gbWF0ZXJpZWxsZXIgV2VydC4gSXN0IGVoIG5pY2h0IHZlcmthdWZiYXIuCisgIFNldFByb3AoUF9OT0JVWSwgMSk7ICAgICAgICAgICAgIC8vIFdpcmQgaW0gTGFkZW4gemVyc3RvZXJ0LCBmYWxscyBlciB2ZXJrYXVmdCB3aXJkLgorICBTZXRQcm9wKFBfTUFURVJJQUwsICh7TUFUX1BBUEVSfSkgKTsKKyAgU2V0UHJvcChQX0lORk8sICJEaWVzZXIgR3V0c2NoZWluIGlzdCBudXIgZnVlciBlaW5lbiBTZWhlciBtaXQgRWlnZW5oZWltIHZvbiBJbnRlcmVzc2UhXG4iKTsKKyAgU2V0UHJvcChQX0FVVE9MT0FET0JKLCAxKTsKK30KKworc3RyaW5nIGxvbmd0ZXh0KCkKK3sKKyAgc3RyaW5nIHN0cixhdXNzdGVsbGVyLGluaGFiZXIsdGV4dDsKKyAgaW50IHdlcnQ7CisgIGF1c3N0ZWxsZXI9IlNlbGV2ZW4iOworICBpbmhhYmVyPSJGaWxsaSI7CisgIHdlcnQ9NTAwMDsKKyAgdGV4dD0iIjsKKyAgc3RyPSIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iCisgICAgICsiICBEIEUgUiAgIFMgQyBIIFIgQSBFIE4gSyBFIFJcblxuIgorICAgICArIiAgRSBJIE4gSyBBIFUgRiBTIC0gRyBVIFQgUyBDIEggRSBJIE4gICAgLlxuXG4iCisgICAgICsiICBBdXNnZXN0ZWxsdCB2b24gIithdXNzdGVsbGVyKyIgZnVlciAiK2luaGFiZXIrIi5cblxuIgorICAgICArIiAgV2VydDogIit0b19zdHJpbmcod2VydCkrIiBNdWVuemVuLlxuXG4iCisgICAgICt0ZXh0CisgICAgICsiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CisgIHJldHVybiBzdHI7Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3NjaHJhbmtsYWRlbi5jIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zY2hyYW5rbGFkZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FmMjVjCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zY2hyYW5rbGFkZW4uYwpAQCAtMCwwICsxLDQzNiBAQAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBTQ0hSQUVOS0VSCisvLyBMZXR6dGUgQWVuZGVydW5nOiAgICAwNi4wNC4yMDA2IFBfTE9HX0ZJTEUgKFNlbGV2ZW4pCisvLyBNYWdpZXI6ICAgICAgICAgICAgICBTd2lmdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjcHJhZ21hIHN0cm9uZ190eXBlcyxydHRfY2hlY2tzCitpbmhlcml0ICIvc3RkL3Jvb20iOworCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPGxhbmd1YWdlLmg+CisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCisKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkKK3sKKyAgOjpjcmVhdGUoKTsKKyAgU2V0UHJvcChQX0xPR19GSUxFLCJzZWxldmVuL3NjaHJhZW5rZXIiKTsgLy8gU2VsZXZlbiAwNi4wNC4yMDA2CisgIFNQKFBfSU5UX1NIT1JULCAiSW0gU0NIUkFFTktFUiIpOworICBTUChQX0lOVF9MT05HLCBCUygKKyAgICAgIkR1IHN0ZWhzdCBpbiBlaW5lbSBnZW11ZXRsaWNoZW4ga2xlaW5lbiBMYWRlbi4gRWluIGZsYXVzY2hpZ2VyICIKKyAgICArIlRlcHBpY2hib2RlbiBkYWVtcGZ0IERlaW5lIFNjaHJpdHRlLCB1bmQgZGVyIEdlcnVjaCB2ZXJzY2hpZWRlbmVyICIKKyAgICArIkhvZWx6ZXIga2l0emVsdCBhbmdlbmVobSBpbiBkZXIgTmFzZS4gSXJnZW5kd29oZXIgZXJrbGluZ3QgZWluZSAiCisgICAgKyJsZWlzZSwgYmVydWhpZ2VuZGUgTWVsb2RpZS4gQW4gZGVuIFdhZW5kZW4gaGFlbmdlbiBCaWxkZXIgdW5kICIKKyAgICArIlplaWNobnVuZ2VuIHZlcnNjaGllZGVuc3RlciBBcnQsIHNvd2llIGVpbmUgZ3Jvc3NlIFByZWlzbGlzdGUuICIKKyAgICArIldlbm4gRHUgbmljaHQgZGVuIEVpbmRydWNrIGhhZXR0ZXN0LCBkYXNzIG1hbiBoaWVyIGFuIERlaW5lIEJvZXJzZSAiCisgICAgKyJtb2VjaHRlLCBrb2VubnRlc3QgRHUgRGljaCBoaWVyIHJpY2h0aWcgd29obCBmdWVobGVuLiIsNzgpKTsKKworICBTUChQX0xJR0hULCAxKTsKKyAgU1AoUF9JTkRPT1JTLCAxKTsKKworICBBRCggKHsiemVpdCJ9KSwgQlMoCisgICAgICJEaWUgYWt0dWVsbGUgWmVpdDogIitjdGltZSh0aW1lKCkpLDc4KSk7CisgIEFEKCAoeyJhdXNnYW5nIn0pLCBCUygKKyAgICAgIk5hY2ggT3N0ZW4gZ2VodCdzIHJhdXMuIiw3OCkpOworICBBRCggKHsiYXVzZ2FlbmdlIn0pLCBCUygKKyAgICAgIlNvIHNlaHIgRHUgYXVjaCBzdWNoc3QsIG1laHIgYWxzIGRlbiBlaW5lbiBBdXNnYW5nIGZpbmRlc3QgRHUgIgorICAgICsiZWluZmFjaCBuaWNodC4iLDc4KSk7CisgIEFEKCAoeyJnZWxkYm9lcnNlIiwgImJvZXJzZSJ9KSwgQlMoCisgICAgICJNYW4gcmVkZXQgaGFsdCB2b24gQm9lcnNlLCBhdWNoIHdlbm4gRHUga2VpbmUgZGFiZWloYXN0LiBFcyBnZWh0ICIKKyAgICArImhhbHQgdW0gRGVpbiBHZWxkISIsNzgpKTsKKyAgQUQoICh7ImdlbGQifSksIEJTKAorICAgICAiSXJnZW5kd28gd2lyc3QgRHUgc2Nob24gS29obGUgaGFiZW4hIDopIiw3OCkpOworICBBRCggKHsia29obGUiLCAiemFzdGVyIiwgIm1vbmV0ZW4iLCAicGllcGVuIiwgIm1hZXVzZSJ9KSwgQlMoCisgICAgICJLb2hsZSwgWmFzdGVyLCBNb25ldGVuLCBQaWVwZW4sIE1hZXVzZS4uLiBhbGxlcyBkYXNzZWxiZSEgOikiLDc4KSk7CisgIEFEKCAoeyJib2RlbiJ9KSwgQlMoCisgICAgICJFaW4gZmxhdXNjaGlnZXIsIGFiZXIgYXVjaCBzZWhyIHN0cmFwYXppZXJmYWVoaWdlciBUZXBwaWNoIGJlZGVja3QgIgorICAgICsiZGVuIGdhbnplbiBCb2RlbiBkZXMgTGFkZW5zLiBCaWxsaWcgc2llaHQgZXIgbmljaHQgYXVzLiIsNzgpKTsKKyAgQUQoICh7InRlcHBpY2giLCAidGVwcGljaGJvZGVuIn0pLCBCUygKKyAgICAgIkVzIGhhbmRlbHQgc2ljaCB1bSBlaW5lbiBlY2h0ZW4gVm9yYmVyZy1UZXBwaWNoLiBFciB3dXJkZSAiCisgICAgKyJ2b24gZWluZW0gRmFjaG1hbm4gdmVybGVndCB1bmQgc2NoZWludCBhdXMgZWluZW0gZWluemlnZW4gZ3Jvc3NlbiAiCisgICAgKyJTdHVlY2sgenUgc2Vpbi4iLDc4KSk7CisgIEFEKCAoeyJzdHVlY2sifSksIEJTKAorICAgICAiRGVyIFRlcHBpY2ggc2NoZWludCBhdXMgZWluZW0gZWluemlnZW4gZ3Jvc3NlbiBTdHVlY2sgenUgc2Vpbi4gU28gZ3V0ICIKKyAgICArImthbm4gZGFzIGVpZ2VudGxpY2ggbnVyIGVpbiBGYWNobWFubi4iLDc4KSk7CisgIEFEKCAoeyJmYWNobWFubiJ9KSwgQlMoIkVzIGlzdCBrZWluZXIgenUgc2VoZW4sIGFiZXIgZXMgaXN0IGFuenVuZWhtZW4sIGRhc3MgIgorICAgICsiZXMgc2ljaCB1bSBlaW5lbiBwcm9mZXNzaW9uZWxsZW4gVGVwcGljaGxlZ2VyIGhhbmRlbHRlLiIpKTsKKyAgQUQoICh7InRlcHBpY2hsZWdlciJ9KSwgIldpZSBnZXNhZ3QsIGtlaW5lciB6dSBzZWhlbi4gRGVyIFRlcHBpY2ggbGllZ3QgamEgIgorICAgICsic2Nob24sIHVuZCBkZXIgd2lyZCBhdWNoIG5vY2ggZWluZSBXZWlsZSBoYWx0ZW4uXG4iKTsKKyAgQUQoICh7IndlaWxlIn0pLCAiU2Nob24gbm9jaCBlaW4gcGFhciBKYWVocmNoZW4hXG4iKTsKKyAgQUQoICh7ImphZWhyY2hlbiJ9KSwgIlRlcHBpY2hlIGRlciBGaXJtYSBWb3JiZXJnIGtvZW5uZW4gbGFuZ2UgaGFsdGVuLlxuIik7CisgIEFEKCAoeyJ2b3JiZXJnIiwgInZvcmJlcmd0ZXBwaWNoIiwgInZvcmJlcmctdGVwcGljaCJ9KSwgQlMoCisgICAgICJEaWUgRmlybWEgVm9yYmVyZyBzdGVsbHQsIGltIEdlZ2Vuc2F0eiB6dXIgRmlybWEgSGludGVyYmVyZywgc2VociBndXRlICIKKyAgICArIlRlcHBpY2hlIGhlciwgd2llIGplZGVyIHdlaXNzLiIsNzgpKTsKKyAgQUQoICh7ImdlZ2Vuc2F0eiJ9KSwgIkRhcyB3ZWlzcyB3aXJrbGljaCBKZWRlciFcbkR1IGtvZW5udGVzdCBJaG4gZnJhZ2VuLCAiCisgICAgKyJ3YWVyZSBlciBuaWNodCBnZWJhbmlzaHQuIDopXG4iKTsKKyAgQUQoICh7ImlobiJ9KSwgQlMoIldlbiBJSE4gPyBNZWluc3QgRHUgSmVkZXI/IERlciBpc3QgZG9jaCBnZWJhbmlzaHQuIEF1cyBndXRlbSAiCisgICAgKyJHcnVuZC4gV2VubiBpcmdlbmR3byB3YXMgd2Vna29tbXQsIGRhbm4ga29lbm50ZSBkYXMgSmVkZXIgZ2V3ZXNlbiBzZWluLiAiCisgICAgKyJEYXMgcmVpY2h0IGRvY2gsIHVtIGlobiB6dSBiYW5pc2hlbiwgb2Rlcj8gOikiKSk7CisgIEFEKCAoeyJoaW50ZXJiZXJnIiwgImhpbnRlcmJlcmd0ZXBwaWNoIiwgImhpbnRlcmJlcmctdGVwcGljaCJ9KSwgQlMoCisgICAgICJEYXMgaGllciBpc3QgZWluIFRlcHBpY2ggZGVyIEZpcm1hIFZvcmJlcmcuIE5pZW1hbmQgbWl0IEdlc2NobWFjayB3dWVyZGUgIgorICAgICsiZGVuIGJpbGxpZ2VuIEFia2xhdHNjaCBkZXIgRmlybWEgSGludGVyYmVyZyBrYXVmZW4uIiw3OCkpOworICBBRCggKHsiamVkZXIifSksIEJTKAorICAgICAiRGVyIGlzdCBuaWNodCBkYS4gU2llaHN0IER1IGlobiBldHdhPyIsNzgpKTsKKyAgQUQoICh7ImdydW5kIiwgImdydWVuZGUifSksIEJTKAorICAgICAiR3J1ZW5kZSBsYXNzZW4gc2ljaCBpbW1lciBmaW5kZW4sIHNlaSBhbHNvIHZvcnNpY2h0aWchIDopIiw3OCkpOworICBBRCggKHsiZ2VzY2htYWNrIn0pLCBCUygKKyAgICAgIlVlYmVyIGRlbiBsYWVzc3Qgc2ljaCBiZWthbm50bGljaCBzdHJlaXRlbi4iLDc4KSk7CisgIEFEKCAoeyJ0ZXBwaWNoZSJ9KSwgQlMoCisgICAgICJEdSBzaWVoc3QgaGllciBlaW5lbi4gRGVyIGFiZXIgZnVlbGx0IGRlbiBnYW56ZW4gUmF1bSBhdXMuIiw3OCkpOworICBBRCggKHsiYWJrbGF0c2NoIn0pLCBCUygKKyAgICAgIlZvcmJlcmctVGVwcGljaGUgc2luZCBoYWx0IGRhcyBlaW56aWcgV2FocmUhIiw3OCkpOworICBBRCggKHsibGFkZW4ifSksIEJTKAorICAgICAiRGVyIExhZGVuIGlzdCBiZWthbm50IHVudGVyIGRlbSBOYW1lbiBcIlNDSFJBRU5LRVJcIi4gQWJlciBkYXMgd2Vpc3N0ICIKKyAgICArIkR1IHNpY2hlci4iLDc4KSk7CisgIEFEKCAoeyJuYW1lbiJ9KSwgQlMoCisgICAgICJEZXIgTmFtZW4gZGVzIExhZGVucyBpc3QgXCJTQ0hSQUVOS0VSXCIuIiw3OCkpOworICBBRCggKHsic2NocmFlbmtlciJ9KSwgQlMoCisgICAgICJKYSwgc2NoYXUgRGljaCBudXIgdW0hIiw3OCkpOworICBBRCggKHsibWVsb2RpZSJ9KSwgQlMoCisgICAgICJMYXVzY2hlIGlociBiZXNzZXIuIiw3OCkpOworICBBRCggKHsiZ2VydWNoIn0pLCBCUygKKyAgICAgIlNlaGVuIGthbm5zdCBEdSBkZW4gbmljaHQuIFZpZWxsZWljaHQgc29sbHRlc3QgRHUgRGVpbmUgTmFzZSBiZW51dHplbj8iLDc4KSk7CisgIEFEKCAoeyJzY2hyaXR0ZSJ9KSwgQlMoCisgICAgICJEdSBnZWhzdCB0ZXN0d2Vpc2UgZWluIHBhYXIgU2Nocml0dGUsIGRlciBUZXBwaWNoIGRhZW1wZnQgc2llIHRhdHNhZWNobGljaCAiCisgICAgKyJzbyBndXQsIGRhc3MgRHUgbmljaHQgZGFzIGdlcmluZ3N0ZSBob2VyZW4ga2FubnN0LiIsNzgpKTsKKyAgQUQoICh7InNjaHJpdHQifSksIEJTKAorICAgICAiTWFjaCBkYXMgZG9jaCBpcmdlbmR3bywgd28gZXMga2VpbmVyIHNpZWh0ISIsNzgpKTsKKyAgQUQoICh7Im5hc2UifSksIEJTKAorICAgICAiRHUgZmFzc3QgRGlyIGFuIGRpZSBOYXNlLiBFaW4gR2x1ZWNrLCBzaWUgaXN0IG5vY2ggZGEhIiw3OCkpOworICBBRCggKHsiZ2x1ZWNrIn0pLCBCUygKKyAgICAgIk9obmUgTmFzZSBrb2VubnRlc3QgRHUgaGllciBnYXIgbmljaHRzIHJpZWNoZW4sIHN0ZWxsIERpciBkYXMgbnVyICIKKyAgICArIm1hbCB2b3IhIiw3OCkpOworICBBRCggKHsicmF1bSIsICJvcnQifSksIEJTKAorICAgICAiRHUgc3RlaHN0IGluIGVpbmVtIG5vYmxlbiBMYWRlbi4gTWFjaCBlaW5mYWNoIFwic2NoYXVcIi4iLDc4KSk7CisgIEFEKCAoeyJmaXJtYSJ9KSwgQlMoCisgICAgICJEdSBzdGVoc3QgaGllciBpbiBlaW5lbSBMYWRlbi4gTmF0dWVybGljaCBpc3QgZGFzIGVpbmUgRmlybWEsIHVuZCBkZXIgIgorICAgICsiTGFkZW5pbmhhYmVyIGlzdCBlYmVuc28gbmF0dWVybGljaCBkZXIgRmlybWVuYmVzaXR6ZXIuIEhhdHRlc3QgRHUgZGVubiAiCisgICAgKyJldHdhcyBhbmRlcmVzIGVyd2FydGV0PyIsNzgpKTsKKyAgQUQoICh7ImVpbmRydWNrIn0pLCBCUygKKyAgICAgIkVzIGlzdCBlaW4gTGFkZW4uIEVyIHNpZWh0IG5vYmVsIGF1cywgUHJlaXNlIHdpZSBiZWkgQUxESSB3aXJkJ3MgaGllciBhbHNvICIKKyAgICArIndvaGwgbmljaHQgZ2ViZW4uIFVuZCBhdXNzZXJkZW0gaXN0IGRlciBlcnN0ZSBFaW5kcnVjayBtZWlzdCBkZXIgcmljaHRpZ2UuIiw3OCkpOworICBBRCggKHsiYWxkaSJ9KSwgQlMoCisgICAgICJORUlOLCBEdSBiaXN0IGhpZXIgTklDSFQgYmVpIEFMREkgISEhIiw3OCkpOworICBBRCggKHsicHJlaXMiLCAicHJlaXNlIiwgImxpc3RlIiwgInByZWlzbGlzdGUifSksIEJTKAorICAgICAiQW4gZGVyIFdhbmQgaGFlbmd0IGVpbmUgZ3Jvc3NlIFByZWlzbGlzdGUuIFZpZWxsZWljaHQgc29sbHRlc3QgRHUgc2llICIKKyAgICArImxlc2VuPyIsNzgpKTsKKyAgQUQoICh7ImluaGFiZXIiLCAibGFkZW5pbmhhYmVyIiwgImJlc2l0emVyIiwgImZpcm1lbmJlc2l0emVyIiwgInZlcmthZXVmZXIifSksIEJTKAorICAgICAiSXN0IGRlciBkZW5uIGdlcmFkZSBuaWNodCBkYT8gRGFzIGlzdCBzZWhyIHZlcnd1bmRlcmxpY2gsIGVjaHQgZWhybGljaC4iLDc4KSk7CisgIEFEKCAoeyJlbGYiLCAiZWxmZW4iLCAicGVyc29uIn0pLCBCUygKKyAgICAgIlNjaGF1IERpciBoYWx0IGRhcyBQb3J0cmFpdCBhbiEiLDc4KSk7CisgIEFEKCAoeyJkYXJzdGVsbHVuZyIsICJkYXJzdGVsbHVuZ2VuIn0pLCBCUygKKyAgICAgIkRpZSBCaWxkZXIgemVpZ2VuIE1vZWJlbHN0dWVja2UsIGhhdXB0c2FlY2hsaWNoIFNjaHJhZW5rZS4iLDc4KSk7CisgIEFEKCAoeyJyZWloZSJ9KSwgQlMoCisgICAgICJCZWkgZGVuIG1laXN0ZW4gQmlsZGVybiBoYW5kZWx0IGVzIHNpY2ggdW0gRGFyc3RlbGx1bmcgdm9uIE1vZWJlbHN0dWVja2VuLiAiCisgICAgKyJOdXIgZWluIGVpbnppZ2VzIFBvcnRyYWl0IGlzdCBkYWJlaSwgZGFzIGVpbmUgUGVyc29uIHplaWd0LiIsNzgpKTsKKyAgQUQoICh7ImFydCJ9KSwgQlMoCisgICAgICJCZWkgZGVuIG1laXN0ZW4gQmlsZGVybiBoYW5kZWx0IGVzIHNpY2ggdW0gRGFyc3RlbGx1bmdlbiB2b24gTW9lYmVsc3R1ZWNrZW4sICIKKyAgICArInp1bWVpc3Qgdm9uIFNjaHJhZW5rZW4uIEVpbiBQb3J0cmFpdCBmYWVsbHQgRGlyIGFsbGVyZGluZ3MgYXVmLCBkYXMgbmljaHQgaW4gIgorICAgICsiZGllIFJlaWhlIGRlciBhbmRlcmVuIEJpbGRlciBwYXNzdC4iLDc4KSk7CisgIEFEKCAoeyJiaWxkZXIifSksIEJTKAorICAgICAiRXMgZ2lidCBtZWhyZXJlIERhcnN0ZWxsdW5nZW4gdm9uIHZlcnNjaGllZGVuZW4gTW9lYmVsc3R1ZWNrZW4uIFp1bWVpc3QgIgorICAgICsiaGFuZGVsdCBlcyBzaWNoIGRhYmVpIHVtIFNjaHJhZW5rZSB2ZXJzY2hpZWRlbmVyIEJhdXdlaXNlLiBBdXNzZXJkZW0gaXN0ICIKKyAgICArImRhIG5vY2ggZWluIFBvcnRyYWl0LiIsNzgpKTsKKyAgQUQoICh7ImJhdWFydCIsICJiYXV3ZWlzZSIsICJtb2ViZWxzdHVlY2siLCAibW9lYmVsc3R1ZWNrZSIsICJhcnRlbiJ9KSwgQlMoCisgICAgICJFcyBnaWJ0IFdhZmZlbnNjaHJhZW5rZSwgS2xlaWRlcnNjaHJhZW5rZSwgS3VlaGxzY2hyYWVua2UgKEpBISksIEtvbW1vZGVuLCAiCisgICAgKyJzb25zdGlnZSBTY2hyYWVua2UgKER1IGthbm5zdCBpaHJlbiBad2VjayBuaWNodCBtYWwgZXJhaG5lbikgdW5kIGVpbmlnZSAiCisgICAgKyJUcnVoZW4sIGRpZSB6d2FyIGtlaW5lIFNjaHJhZW5rZSBpbSBlaWdlbnRsaWNoZW4gU2lubmUgc2luZCwgYWJlciBaZXVnICIKKyAgICArImJyaW5ndCBtYW4gZGFyaW4gbWl0IFNpY2hlcmhlaXQgYXVjaCB1bnRlci4gU29nYXIgZWluZSBWaXRyaW5lIHNpZWhzdCAiCisgICAgKyJEdS4iLDc4KSk7CisgIEFEKCAoeyJ6d2VjayJ9KSwgQlMoCisgICAgICJTdGF1cmF1bSBmdWVyIGlyZ2VuZHdlbGNoZXMgWmV1Z3MuIERhcyBtdXNzIGVzIHNlaW4uIFdhcyBmdWVyIGVpbmVuICIKKyAgICArIlp3ZWNrIGtvZW5udGUgZXMgc29uc3Qgbm9jaCBnZWJlbj8iLDc4KSk7CisgIEFEKCAoeyJ2aXRyaW5lIn0pLCBCUygiRGllIFZpdHJpbmUgaXN0IGxlZXIsIGFiZXIgZGFzIGFlbmRlcnQgc2ljaCBzaWNoZXIsICIKKyAgICArInNvYmFsZCBEdSBlaW5lIGdla2F1ZnQgaGFzdC4iLDc4KSk7CisgIEFEKCAoeyJrbGVpZGVyc2NocmFuayIsICJrbGVpZGVyc2NocmFlbmtlIn0pLCBCUygKKyAgICAgIlNpY2hlciBlaWduZXQgc2ljaCBzb2xjaCBlaW4gU2NocmFuayBzZWhyIGd1dCwgdW0gZGFyaW4gUnVlc3R1bmdlbiAiCisgICAgKyJhdWZ6dWJld2FocmVuLiIsNzgpKTsKKyAgQUQoICh7IndhZmZlbnNjaHJhbmsiLCAid2FmZmVuc2NocmFlbmtlIn0pLCBCUygKKyAgICAgIkluIGVpbmVtIFdhZmZlbnNjaHJhbmsga2FubnN0IER1IGVpbmUgTWVuZ2UgdmVyc2NoaWVkZW5lciBXYWZmZW4gIgorICAgICsidW50ZXJicmluZ2VuLCB1bmQgZGVyIFZvcnRlaWwgZGFiZWkgaXN0LCBkYXNzIHNpZSBkYW5uIGF1Y2ggc2F1YmVyICIKKyAgICArInNvcnRpZXJ0IGltIFNjaHJhbmsgaGFlbmdlbi4iLDc4KSk7CisgIEFEKCAoeyJrb21tb2RlbiJ9KSwgQlMoCisgICAgICJEaWUga2FubiBtYW4gbmljaHQgbnVyIGluIGVpbmVuIEZsdXIgc3RlbGxlbiwgc29uZGVybiBhdWNoIGluIGplZGVuICIKKyAgICArImFuZGVyZW4gUmF1bSEiLDc4KSk7CisgIEFEKCAoeyJmbHVyIn0pLCBCUygKKyAgICAgIkRpZSBtZWlzdGVuIEhhZXVzZXIgaGFiZW4gZWluZW4uIiw3OCkpOworICBBRCggKHsiaGFldXNlciJ9KSwgQlMoCisgICAgICJISUVSID8/PyIsNzgpKTsKKyAgQUQoICh7Im1lbmdlIn0pLCBCUygKKyAgICAgIk1laHIgYWxzIER1IGJyYXVjaHN0LCBlcyBzZWkgZGVubiBEdSBiaXN0IFNhbW1sZXIuIiw3OCkpOworICBBRCggKHsiemV1Z3MiLCAiZGluZ2UifSksIEJTKAorICAgICAiRGluZ2UgaGFsdC4iLDc4KSk7CisgIEFEKCAoeyJ3YWZmZW4ifSksIEJTKAorICAgICAiRHUga2FubnN0IHNpZSBpbiBlaW5lbSBXYWZmZW5zY2hyYW5rIHVudGVyYnJpbmdlbiwgd2VubiBEdSBlaW5lbiAiCisgICAgKyJiZXNpdHp0LiBXZW5uIG5pY2h0IGthbm5zdCBEdSBqYSBlaW5lbiBrYXVmZW4uIiw3OCkpOworICBBRCggKHsid2FmZmUifSksIEJTKAorICAgICAiV2VsY2hlIFdhZmZlIG1laW5zdCBEdT8iLDc4KSk7CisgIEFEKCAoeyJydWVzdHVuZ2VuIn0pLCBCUygKKyAgICAgIkR1IGthbm5zdCBzaWUgaW4gZWluZW0gS2xlaWRlcnNjaHJhbmsgdW50ZXJicmluZ2VuLCB3ZW5uIER1IGVpbmVuICIKKyAgICArImJlc2l0enQuIFdlbm4gbmljaHQga29lbm50ZXN0IER1IERpciBlaW5lbiB6dWxlZ2VuLiIsNzgpKTsKKyAgQUQoICh7InJ1ZXN0dW5nIn0pLCBCUygKKyAgICAgIlZvbiB3ZWxjaGVyIFJ1ZXN0dW5nIHJlZGVzdCBEdT8iLDc4KSk7CisgIEFEKCAoeyJ2b3J0ZWlsIn0pLCBCUygKKyAgICAgIkplZGVyIGlzdCBkb2NoIGF1ZiBzZWluZW4gcGVyc29lbmxpY2hlbiBWb3J0ZWlsIGJlZGFjaHQuIiw3OCkpOworICBBRCggKHsia3VlaGxzY2hyYW5rIiwgImt1ZWhsc2NocmFlbmtlIn0pLCBCUygKKyAgICAgIkluIHNvIGVpbmVtIEt1ZWhsc2NocmFuayBrYW5uIG1hbiBlaWdlbnRsaWNoIGFsbGVzIHJlaW5zdGVja2VuLCBhYmVyICIKKyAgICArIm5hdHVlcmxpY2ggYmlldGV0IGVyIHNpY2ggYmVzb25kZXJzIGZ1ZXIgR2V0cmFlbmtlIHVuZCBTcGVpc2VuIGFsbGVyICIKKyAgICArIkFydCBhbi4gV2llIHouQi4gU2NobmVsbGhhZXJ0ZXIsIEJyb2V0Y2hlbiB1c3cuIiw3OCkpOworICBBRCggKHsiZ2V0cmFlbmtlIiwgInNwZWlzZW4ifSksIEJTKAorICAgICAiRGFzIGhpZXIgaXN0IGtlaW5lIEtuZWlwZS4gU293YXMgZ2lidCdzIGhpZXIgbmljaHQhIiw3OCkpOworICBBRCggKHsia25laXBlIn0pLCBCUygKKyAgICAgIkRhcyBoaWVyIGlzdCBLRUlORSBLbmVpcGUgISEhIiw3OCkpOworICBBRCggKHsidHJ1aGUiLCAidHJ1aGVuIn0pLCBCUygKKyAgICAgIkVzIGdpYnQgZ3Jvc3NlIHVuZCBrbGVpbmUsIGF1cyB2ZXJzY2hpZWRlbmVtIE1hdGVyaWFsLiIsNzgpKTsKKyAgQUQoICh7Im1hdGVyaWFsIn0pLCBCUygKKyAgICAgIlRvdGFsIHZlcnNjaGllZGVuLCB3aXJrbGljaC4iLDc4KSk7CisgIEFEKCAoeyJzY2huZWxsaGFlcnRlciIsICJicm9ldGNoZW4ifSksIEJTKAorICAgICAiQmVzb3JnIERpciB3ZWxjaGUsIGJldm9yIER1IHNpZSB1bnRlcnN1Y2hlbiB3aWxsc3QhIiw3OCkpOworICBBRCggKHsic2FtbWxlciJ9KSwgQlMoCisgICAgICJCaXN0IER1IGVpbmVyPyIsNzgpKTsKKyAgQUQoICh7InNpY2hlcmhlaXQifSksIEJTKAorICAgICAiSm8sIGluIHNvIGVpbmUgVHJ1aGUgcGFzc3QgdmllbCBaZXVnIHJlaW4uIiw3OCkpOworICBBRCggKHsiemV1ZyJ9KSwgQlMoCisgICAgICJBbGxlcywgd2FzIER1IHNvIG1pdCBEaXIgcnVtc2NobGVwcHN0LiBEYXMgbWVpc3RlIGRhdm9uIGJyYXVjaHN0ICIKKyAgICArIkR1IHNvd2llc28gbmllLiIsNzgpKTsKKyAgQUQoICh7ImJpbGQifSksIEJTKAorICAgICAiRXMgZ2lidCBtZWhyZXJlIERhcnN0ZWxsdW5nZW4gdm9uIHZlcnNjaGllZGVuZW4gTW9lYmVsc3R1ZWNrZW4gdW5kIGVpbiAiCisgICAgKyJQb3J0cmFpdC4gV2VsY2hlcyBCaWxkIG1laW5zdCBEdT8iLDc4KSk7CisgIEFEKCAoeyJwb3J0cmFpdCJ9KSwgQlMoCisgICAgICJFcyB6ZWlndCBlaW5lbiBFbGYgbWl0IHN0cmFobGVuZCBibGF1ZW4gQXVnZW4gdW5kIGRlbiB0eXBpc2NoIHNwaXR6ZW4gIgorICAgICsiRWxmZW5vaHJlbiwgZGllIGZyZWNoIGF1cyBlaW5lciBiZWVpbmRydWNrZW5kZW4sIHNpbGJlcmdyYXVlbiBMb2V3ZW5tYWVobmUgIgorICAgICsiaGVydm9yc2NoYXVlbi4gRGVyIFNwaXR6aHV0LCBkZXIgaWhtIGF1ZiBkZW0gS29wZiBzaXR6dCwgbGFlc3N0IGRhcmF1ZiAiCisgICAgKyJzY2hsaWVzc2VuLCBkYXNzIGVzIHNpY2ggdW0gZWluZW4gWmF1YmVyZXIgaGFuZGVsdC4gVW50ZW4gaW4gZGVyIHJlY2h0ZW4gIgorICAgICsiQmlsZGVja2UgaXN0IGVpbmUgV2lkbXVuZyBhbmdlYnJhY2h0LiIsNzgpKTsKKyAgQUQoICh7InNpbm4iLCAic2lubmUifSksIEJTKAorICAgICAiU2NocmFlbmtlIHVuZCBUcnVoZW4gc2VoZW4gc2Nob24gZXR3YXMgdmVzY2hpZWRlbiBhdXMuIiw3OCkpOworICBBRCggKHsic3dpZnQifSksIEJTKAorICAgICAiU2llaHN0IER1IGlobiBoaWVyIGV0d2EgZ2VyYWRlPyIsNzgpKTsKKyAgQUQoICh7ImJpbGRlY2tlIn0pLCBCUygKKyAgICAgIlVudGVuIGluIGRlciByZWNodGVuIEJpbGRlY2tlIGlzdCBlaW5lIFdpZG11bmcgYW5nZWJyYWNodC4iLDc4KSk7CisgIEFEKCAoeyJhdWdlbiJ9KSwgQlMoCisgICAgICJEZXIgRWxmIGF1ZiBkZW0gUG9ydHJhaXQgaGF0IHN0cmFobGVuZCBibGF1ZSBBdWdlbi4iLDc4KSk7CisgIEFEKCAoeyJ3aWRtdW5nIn0pLCBCUygKKyAgICAgIlNpZWh0IGF1cyBhbHMgb2IgbWFuIGRpZSBzb2dhciBsZXNlbiBrYW5uISIsNzgpKTsKKyAgQUQoICh7Im1hZWhuZSIsICJsb2V3ZW5tYWVobmUifSksIEJTKAorICAgICAiRGVyIEVsZiBhdWYgZGVtIEJpbGQgaGF0IGVpbmUgc2lsYmVyZ3JhdWUgTG9ld2VubWFlaG5lLiIsNzgpKTsKKyAgQUQoICh7InphdWJlcmVyIiwgInphdWJlcmh1dCIsICJ6YXViZXJlcmh1dCIsICJzcGl0emh1dCJ9KSwgQlMoCisgICAgICJEZXIgWmF1YmVyaHV0IG1hY2h0IGRlbiBFbGZlbiBhdWYgZGVtIFBvcnRyYWl0IGVyc3QgenUgZWluZW0gd2FzY2hlY2h0ZW4gIgorICAgICsiWmF1YmVyZXIuIiw3OCkpOworICBBRCggKHsib2hyZW4iLCAiZWxmZW5vaHJlbiJ9KSwgQlMoCisgICAgICJEaWUgT2hyZW4gZGVzIEVsZmVuIGF1ZiBkZW0gUG9ydHJhaXQgc2luZCBzbyBzcGl0eiwgd2llIG1hbiBkYXMgdm9uICIKKyAgICArImVpbmVtIEVsZmVuIGVyd2FydGV0LiIsNzgpKTsKKyAgQVJEKCAoeyJ3aWRtdW5nIn0pLAorICAgICAiRGFuayBhbiBHZW9yZGkgZnVlciBkaWVzZSBncm9zc2FydGlnZSBHZXNjaGFlZnRzaWRlZS5cbiIKKyAgICArIk1vZWdlbiBEaXIgRGVpbmUgWmF1YmVyIGdlbGluZ2VuIHVuZCBkaWUgU3BlbGxwdW5rdGUgbmllbWFscyBhdXNnZWhlbi5cbiIKKyAgICArIihEYXJ1bnRlciBoYXQgamVtYW5kIHVudGVyc2NocmllYmVuLCBhYmVyIGRhcyBHZWtyYWtlbCBrYW5uc3QgRHUgbmljaHQgIgorICAgICsiaWRlbnRpZml6aWVyZW4pXG4iKTsKKyAgQUQoICh7InVudGVyc2NocmlmdCJ9KSwgQlMoCisgICAgICJNZWluc3QgRHUgZGFzIEdla3Jha2VsPyIsNzgpKTsKKyAgQUQoICh7InJvdGZhZXJidW5nIiwgImZhcmJlIn0pLCBCUygKKyAgICAgIkRhcyBIb2x6IGhhdCBlaW5lIGxlaWNodCByb2V0bGljaGUgRmFyYmUuIiw3OCkpOworICBBRCggKHsicnVoZSJ9KSwgQlMoCisgICAgICJBYWFhaGhoaGguIFJ1aGUgdHV0IGd1dC4gVW5kIGRhbmsgZGVyIGxlaXNlbiBNZWxvZGllIGVudHNwYW5uc3QgRHUgIgorICAgICsiRGljaCBhbGxtYWVobGljaC4iLDc4KSk7CisgIEFEKCAoeyJjaGFvc2RhZW1vbiJ9KSwgQlMoCisgICAgICJLZWluZXIgZGEuIFdlZGVyIFN3aWZ0IG5vY2ggZWluIGFuZGVyZXIuIEdsdWVjayBmdWVyIERpY2ghIiw3OCkpOworICBBRCggKHsic2FjaGVuIn0pLCBCUygKKyAgICAgIldhcyBhdWNoIGltbWVyLiIsNzgpKTsKKyAgQUQoICh7ImtsYXVlIn0pLCBCUygKKyAgICAgIldhaHJzY2hlaW5saWNoIGthbm4gU3dpZnQgZGFtaXQgYW5kZXJlIFNhY2hlbiBiZXNzZXIgZXJsZWRpZ2VuIGFscyAiCisgICAgKyJzY2hyZWliZW4uIFNjaGxpZXNzbGljaCBpc3QgZXIgZWluIENoYW9zZGFlbW9uLiIsNzgpKTsKKyAgQUQoICh7Imdla3Jha2VsIn0pLCBCUygKKyAgICAgIkR1IG5pbW1zdCBEaXIgWmVpdCB1bmQgc2NoYXVzdCBkaWUgVW50ZXJzY2hyaWZ0IGRvY2ggbm9jaG1hbCBpbiBhbGxlciAiCisgICAgKyJSdWhlIGFuLiBFbmRsaWNoIGtvbW10IERpciBkaWUgRXJsZXVjaHR1bmcuIERhcyBzb2xsIFwiU3dpZnRcIiBoZWlzc2VuLiAiCisgICAgKyJNYW5uLCBoYXQgZGVyIG5lIEtsYXVlISAoTmFqYSwgYmVpIGVpbmVtIENoYW9zZGFlbW9uZW4gd3VuZGVydCBkYXMgIgorICAgICsiZWlnZW50bGljaCBuaWNodCkiLDc4KSk7CisgIEFEKCAoeyJlcmxldWNodHVuZyJ9KSwgQlMoCisgICAgICJTaWUgZmFuZCBpbiBEZWluZW0gS29wZiBzdGF0dC4gRGVuIG11ZXNzdGV0IER1IHNjaG9uIG9lZmZuZW4sIHdlbm4gRHUgIgorICAgICsiZGllIEVybGV1Y2h0dW5nIHBoeXNpc2NoIHVudGVyc3VjaGVuIG1vZWNodGVzdC4gVW5kIGRhcyBrYW5uIHNpY2ggIgorICAgICsibmVnYXRpdiBhdWYgRGVpbmUgR2VzdW5kaGVpdCBhdXN3aXJrZW4uIExhc3MgZXMgbGllYmVyISIsNzgpKTsKKyAgQUQoICh7Imdlc3VuZGhlaXQifSksIEJTKAorICAgICAiTWl0IEtvcGYgYmlzdCBEdSBnZXN1bmQuIERhcyBpc3QgZ2V3aXNzLiIsNzgpKTsKKyAgQUQoICh7IndhbmQiLCAid2FlbmRlIn0pLCBCUygKKyAgICAgIkRpZSBXYWVuZGUgYmVzdGVoZW4gYXVzIGVpbmVtIGZlaW5lbiwgZXhvdGlzY2hlbiBIb2x6IG1pdCBsZWljaHRlciAiCisgICAgKyJSb3RmYWVyYnVuZy4gU2llaHQgc2VociBlZGVsIGF1cy4gTWVocmVyZSBCaWxkZXIgd3VyZGVuIGFuIGRlbiBXYWVuZGVuICIKKyAgICArImF1ZmdlaGFlbmd0IHVuZCB2ZXJ0ZWlsZW4gc2ljaCBnbGVpY2htYWVzc2lnIHVlYmVyIGRlbiBSYXVtLiIsNzgpKTsKKyAgQUQoICh7ImtvcGYifSksIEJTKAorICAgICAiRWluIEdsdWVjaywgZXIgaXN0IG5vY2ggZHJhbi4gR2VuYXVzbyB3aWUgYmVpIGRlbSBFbGZlbiBhdWYgZGVtICIKKyAgICArIlBvcnRyYWl0ISIsNzgpKTsKKyAgQUQoICh7InNjaHJhbmsiLCAic2NocmFlbmtlIn0pLCBCUygKKyAgICAgIkVzIGdpYnQgdmVyc2NoaWVkZW5lIEFydGVuIHZvbiBTY2hyYWVua2VuLiIsNzgpKTsKKyAgQUQoICh7InplaWNobnVuZyJ9KSwgQlMoCisgICAgICJFcyBnaWJ0IG1laHJlcmUgZGF2b24uIiw3OCkpOworICBBRCggKHsiemVpY2hudW5nZW4ifSksIEJTKAorICAgICAiU2llIHplaWdlbiAtIHRlaWx3ZWlzZSBza2l6emVuaGFmdCAtIGRlbiBBdWZiYXUgdmVyc2NoaWVkZW5lciAiCisgICAgKyJNb2ViZWxzdHVlY2tlIC0gdm9yenVnc3dlaXNlIFNjaHJhZW5rZS4iLDc4KSk7CisgIEFEKCAoeyJhdWZiYXUiLCAienVzYW1tZW5zZXR6dW5nIn0pLCBCUygKKyAgICAgIk1pdCBkZW0gQXVmYmF1IGlzdCBkaWUgWnVzYW1tZW5zZXR6dW5nIGdlbWVpbnQgLSB1bmQgdW1nZWtlaHJ0LiIsNzgpKTsKKyAgQUQoICh7ImhvbHoiLCAiaG9lbHplciJ9KSwgQlMoCisgICAgICJTY2hvbiBoaWVyIGltIFJhdW0gd3VyZGUgbWl0IHZlcnNjaGllZGVuc3RlbiBIb2VsemVybiBnZWFyYmVpdGV0LCAiCisgICAgKyJpaHIgZWRsZXIgRHVmdCB2ZXJtaXNjaHQgc2ljaCB1bmQgYmlldGV0IGVpbmVuIGVyaGViZW5kZW4gR2VydWNoLiAiCisgICAgKyJMZWlkZXIgc2luZCBkaWUgbWVpc3RlbiBIb2x6YXJ0ZW4gc28gZXhvdGlzY2gsIGRhc3MgRHUgYmVpbSBiZXN0ZW4gIgorICAgICsiV2lsbGVuIG5pY2h0IHNhZ2VuIGthbm5zdCwgdW0gd2FzIGZ1ZXIgZWluZW4gQmF1bSBlcyBzaWNoIGRhIG1hbCAiCisgICAgKyJnZWhhbmRlbHQgaGF0LiIsNzgpKTsKKyAgQUQoICh7ImhvbHphcnQiLCAiaG9semFydGVuIn0pLCBCUygKKyAgICAgIlNlaHIgZXhvdGlzY2hlIEhvbHphcnRlbi4gRHUgYmlzdCBrZWluIEV4cGVydGUgZnVlciBzb3dhcywgdW5kICIKKyAgICArInZlcm11dGxpY2ggaGFzdCBEdSBhdWNoIGtlaW5lIEx1c3QsIGVpbmVyIHp1IHdlcmRlbi4iLDc4KSk7CisgIEFEKCAoeyJleHBlcnRlIn0pLCBCUygKKyAgICAgIktlaW5lciBkYS4iLDc4KSk7CisgIEFEKCAoeyJsdXN0In0pLCBCUygKKyAgICAgIldlbm4gamVtYW5kIHNlaW5lIEx1c3QgdW50ZXJzdWNodC91ZWJlcnBydWVmdCwgYmVrdW5kZXQgZXIgZGFtaXQgIgorICAgICsiZWlnZW50bGljaCBzY2hvbiBpbiBXaXJrbGljaGtlaXQgc2VpbmUgVW5sdXN0LiIsNzgpKTsKKyAgQUQoICh7InVubHVzdCJ9KSwgQlMoCisgICAgICJUamEsIFVubHVzdCBrZW5uemVpY2huZXQgZGVuIEZhdWxwZWx6LiIsNzgpKTsKKyAgQUQoICh7ImZhdWxwZWx6In0pLCBCUygKKyAgICAgIkR1IGJpc3QgZ2VtZWludCEiLDc4KSk7CisgIEFEKCAoeyJ3aXJrbGljaGtlaXQiLCAicmVhbGl0YWV0In0pLCBCUygKKyAgICAgIkRpZSBXaXJrbGljaGtlaXQgaXN0IGRpZSBSZWFsaXRhZXQgLSB1bmQgYW5kZXJzcnVtLiBNZWlzdGVucyAiCisgICAgKyJqZWRlbmZhbGxzLiIsNzgpKTsKKyAgQUQoICh7Im1laXN0ZW5zIn0pLCBCUygKKyAgICAgIkhpZXIgc2Nob24uIiw3OCkpOworICBBRCggKHsiaGllciJ9KSwgQlMoCisgICAgICJIaWVyIGhhbHQhIiw3OCkpOworICBBRCggKHsiYmF1bSIsICJiYWV1bWUifSksIEJTKAorICAgICAiSGllciBnaWJ0IGVzIGtlaW5lIEJhZXVtZS4gRGllIHd1cmRlbiBiZXJlaXRzIGFsbGUgdmVyYXJiZWl0ZXQuIiw3OCkpOworICBBRCggKHsiZHVmdCJ9KSwgQlMoCisgICAgICJSaWVjaGUgaGFsdCBtYWwhIiw3OCkpOworICBBRCggKHsid2lsbGUiLCAid2lsbGVuIn0pLCBCUygKKyAgICAgIkRlaW4gV2lsbGUgaXN0IHN0YXJrLi4uIiw3OCkpOworICBBRCggKHsiZGVja2UifSksIEJTKAorICAgICAiTWFlY2h0aWdlIEJhbGtlbiBiaWxkZW4gZGllIERlY2tlLiBFcyBrb2VubnRlIHNpY2ggdW0gRWljaGUgaGFuZGVsbiwgYWJlciAiCisgICAgKyJnZW5hdXNvZ3V0IGtvZW5udGUgZXMgaXJnZW5kZWluZSBhZWhubGljaGUsIGV4b3Rpc2NoZSBIb2x6YXJ0IHNlaW4uICIKKyAgICArIkVpbiBoZXJybGljaGVyIEtyb25sZXVjaHRlciBoYWVuZ3Qgdm9uIGRlciBNaXR0ZSBoZXJhYi4iLDc4KSk7CisgIEFEKCAoeyJlaWNoZSIsICJlaWNoZW5iYWxrZW4ifSksIEJTKAorICAgICAiRXMgaXN0IG5pY2h0IHNpY2hlciwgZGFzcyBlcyBzaWNoIHVtIEVpY2hlbmJhbGtlbiBoYW5kZWx0LCBhYmVyIEJhbGtlbiAiCisgICAgKyJzaW5kJ3MgYXVmIGplZGVuIEZhbGwuIiw3OCkpOworICBBRCggKHsiZmFsbCJ9KSwgQlMoCisgICAgICJFY2h0IGVocmxpY2guIiw3OCkpOworICBBRCggKHsiYmFsa2VuIn0pLCBCUygKKyAgICAgIlNpZSBiaWxkZW4gZGllIERlY2tlLiBFaW4gaGVycmxpY2ggYW56dXNlaGVuZGVyIEtyb25sZXVjaHRlciBoYWVuZ3QgIgorICAgICsiZGFyYW4gaGVyYWIuIiw3OCkpOworICBBRCggKHsia3JvbmxldWNodGVyIn0pLCBCUygKKyAgICAgIkVyIGhhZW5ndCB2b24gZGVyIERlY2tlIGhlcmFiIHVuZCBtdXNzIGVpbiBWZXJtb2VnZW4gd2VydCBzZWluLiBSZWluZXMgIgorICAgICsiQmVyZ2tyaXN0YWxsIG1pdCBlaW5lciBVbnphaGwgdm9uIEtlcnplbi4gV2FzIGRhcyBmdWVyIGVpbiBBdWZ3YW5kIHNlaW4gIgorICAgICsibXVzcywgZGllIGltbWVyIGFtIEJyZW5uZW4genUgaGFsdGVuLiIsNzgpKTsKKyAgQUQoICh7InZlcm1vZWdlbiJ9KSwgQlMoCisgICAgICJNZWhyIGFscyBEdSB0cmFnZW4ga2FubnN0LiIsNzgpKTsKKyAgQUQoICh7ImJlcmdrcmlzdGFsbCJ9KSwgQlMoCisgICAgICJOdXIgQmVyZ2tyaXN0YWxsIGhhdCBkaWVzZW4gR2xhbnouIiw3OCkpOworICBBRCggKHsiYnJlbm5lbiJ9KSwgQlMoCisgICAgICJEaWUgS2VyemVuIGZsYWNrZXJuIG11bnRlciB2b3Igc2ljaCBoaW4uIiw3OCkpOworICBBRCggKHsidW56YWhsIn0pLCBCUygKKyAgICAgIjEsIDIsIC4uLnZpZWxlISIsNzgpKTsKKyAgQUQoICh7ImdsYW56In0pLCBCUygKKyAgICAgIkhlcnJsaWNoISIsNzgpKTsKKyAgQUQoICh7Im1pdHRlIn0pLCBCUygKKyAgICAgIlZvbiBkZXIgTWl0dGUgZGVyIERlY2tlIGhhZW5ndCBlaW4gS3JvbmxldWNodGVyIGhlcmFiLiIsNzgpKTsKKyAgQUQoICh7ImtlcnplbiJ9KSwgQlMoCisgICAgICJEaXIgZmFlbGx0IGF1ZiwgZGFzcyBkaWUgS2VyemVuIHNpY2ggZ2FyIG5pY2h0IHZlcmJyYXVjaGVuLiBFcyBtdXNzICIKKyAgICArInNpY2ggdW0gbWFnaXNjaGUgS2VyemVuIGhhbmRlbG4uIiw3OCkpOworICBBRCggKHsiYXVmd2FuZCJ9KSwgQlMoCisgICAgICJFbnRzZXR6dCBkZW5rc3QgRHUgLiBvIE8gKERhcyBzY2hsYWVndCBzaWNoIGJlc3RpbW10IGF1ZiBkZW4gUHJlaXMgbmllZGVyLikiLDc4KSk7CisgIEFEKCAoeyJlY2tlbiJ9KSwgQlMoCisgICAgICJJbiBkZW4gRWNrZW4gZW50ZGVja3N0IER1IGtsZWluZSwgZWRsZSBMYXV0c3ByZWNoZXIsIGF1cyBkZW5lbiBkaWUgIgorICAgICsiTWVsb2RpZSB6dSBrb21tZW4gc2NoZWludC4iLDc4KSk7CisgIEFEKCAoeyJsYXV0c3ByZWNoZXIifSksIEJTKAorICAgICAiRHUgd3Vzc3Rlc3QgZ2FyIG5pY2h0LCBkYXNzIHNvd2FzIGltIE1vcmdlbkdyYXVlbiBzY2hvbiBlcmZ1bmRlbiB3dXJkZS4iLDc4KSk7CisgIEFEKCAoeyJtb3JnZW5ncmF1ZW4ifSksIEJTKAorICAgICAiVHVzdCBEdSBkYXMgbmljaHQgc2Nob24gZGllIGdhbnplIFplaXQ/Iiw3OCkpOworCisgIEFkZFNtZWxscyhTRU5TRV9ERUZBVUxULCAiRXMgcmllY2h0IGhpZXIgYW5nZW5laG0gbmFjaCB2ZXJzY2hpZWRlbmVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyJIb2VsemVybi5cbiIpOworICBBZGRTbWVsbHMoKHsiaG9lbHplciIsICJob2x6IiwgImhvbHphcnRlbiJ9KSwgQlMoIkR1IGthbm5zdCBuaWNodCBzYWdlbiwgIgorICAgICsidW0gd2FzIGZ1ZXIgSG9semFydGVuIGVzIHNpY2ggaGFuZGVsdCwgYWJlciBkZXIgR2VydWNoIGxhZXNzdCBhdWYgdmllbGUgIgorICAgICsidmVyc2NoaWVkZW5lIHNjaGxpZXNzZW4uIEVpbmUgVHJlbm51bmcgZGVzIEdlcnVjaHMgaXN0IERpciBuaWNodCBtb2VnbGljaC4iKSApOworICBBZGRTbWVsbHMoKHsiZ2VydWNoIiwgImdlcnVlY2hlIn0pLCBCUygiRXMgcmllY2h0IG5hY2ggdmVyc2NoaWVkZW5lbiAiCisgICAgKyJIb2x6YXJ0ZW4uIikgKTsKKworICBBZGRTb3VuZHMoU0VOU0VfREVGQVVMVCwgIkdhbnogbGVpc2UgaG9lcnN0IER1IGVpbmUgYW5nZW5laG1lLCBiZXJ1aGlnZW5kZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICsiTWVsb2RpZS5cbiIpOworICBBZGRTb3VuZHMoKHsibWVsb2RpZSJ9KSwgIlNpZSBzY2hlaW50IHZvbiBhbGxlbiBFY2tlbiBkZXMgTGFkZW5zIHp1IGtvbW1lbi5cbiIpOworCisgIEFkZEl0ZW0oIExBREVOKCJ2ZXJrYWV1ZmVyIiksIFJFRlJFU0hfREVTVFJVQ1QpOworCisgIEFkZENtZCgoeyJvZWZmbmUifSksICJrb3BmX29lZmZuZW4iKTsKKyAgQWRkQ21kKCh7ImxpZXMiLCAibGVzIiwgImxlc2UifSksICJwcmVpc2xpc3RlX2xlc2VuIik7CisgIEFkZENtZCgoeyJpZGVlIn0pLCAiaWRlZV9sb2dnZW4iKTsKKyAgQWRkQ21kKCh7InRyZW5uIiwgInRyZW5uZSJ9KSwgImdlcnVlY2hlX3RyZW5uZW4iKTsKKyAgQWRkQ21kKCh7IndlcmQiLCAid2VyZGUifSksICJleHBlcnRlX3dlcmRlbiIpOworICBBZGRDbWQoKHsiemFlaGwiLCAiemFlaGxlIn0pLCAia2VyemVuX3phZWhsZW4iKTsKKworICBBZGRTcGVjaWFsRXhpdCgib3N0ZW4iLCAicmF1c2dlaGVuIik7Cit9CisKK2ludCBrZXJ6ZW5femFlaGxlbihzdHJpbmcgc3RyKQoreworICBub3RpZnlfZmFpbCgiV2FzIG1vZWNodGVzdCBEdSB6YWVobGVuP1xuIik7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZihzdHIhPSJrZXJ6ZW4iKSByZXR1cm4gMDsKKyAgd3JpdGUoIjEuLjIuLnZpZWxlLlxuIik7CisgIHJldHVybiAxOworfQorCitpbnQgcmF1c2dlaGVuKHN0cmluZyBkaXIpCit7CisgIHJldHVybiBUUC0+bW92ZShSQVVNX1ZPUl9MQURFTiwgTV9HTywgMCwKKyAgICAidmVybGFlc3N0IGRlbiBMYWRlbiIsICJrb21tdCBhdXMgZGVtIExhZGVuIik7Cit9CisKK3ZhcmFyZ3Mgc3RyaW5nIEdldEV4aXRzKCBvYmplY3Qgdmlld2VyICkKK3sKKyAgcmV0dXJuICJEZXIgQXVzZ2FuZyBiZWZpbmRldCBzaWNoIGltIE9zdGVuLlxuIjsKK30KKworaW50IGtvcGZfb2VmZm5lbihzdHJpbmcgc3RyKQoreworICBub3RpZnlfZmFpbCgiV2FzIG1vZWNodGVzdCBEdSBvZWZmbmVuP1xuIik7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZihzdHIhPSJrb3BmIiAmJiBzdHIhPSJtZWluZW4ga29wZiIgJiYgc3RyIT0iZGVpbmVuIGtvcGYiKQorICAgIHJldHVybiAwOworICB3cml0ZSggQlMoIk5ldWdpZXJpZywgd2llIER1IGJpc3QsIGdyZWlmc3QgRHUgRGlyIGFuIGRlbiBLb3BmLiBEYSBmYWVsbHQgRGlyICIKKyAgICArImVpbiwgZGFzcyBkYXMgb2VmZm5lbiBEZWluZXMgS29wZmVzIGV2dGwuIGVpbmUgQ29weXJpZ2h0LVZlcmxldHp1bmcgIgorICAgICsiZGFyc3RlbGxlbiBrb2VubnRlLCBEdSBoZWlzc3QgamEgc2NobGllc3NsaWNoIG5pY2h0IEhhbm5pYmFsLiBBbHNvIGxhZXNzdCAiCisgICAgKyJEdSBlcyBkYW5uIGRvY2ggYmxlaWJlbi4iKSk7CisgIHJldHVybiAxOworfQorCitpbnQgcHJlaXNsaXN0ZV9sZXNlbihzdHJpbmcgc3RyKQoreworICBub3RpZnlfZmFpbCgiV2FzIG1vZWNodGVzdCBEdSBsZXNlbj9cbiIpOworICBpZighc3RyKSByZXR1cm4gMDsKKyAgaWYoc3RyIT0icHJlaXNsaXN0ZSIgJiYgc3RyIT0ibGlzdGUiKQorICAgIHJldHVybiAwOworICBUUC0+TW9yZSggcmVhZF9maWxlKExBREVOKCJwcmVpc2xpc3RlLnR4dCIpKSApOworICByZXR1cm4gMTsKK30KKworaW50IGlkZWVfbG9nZ2VuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyB0eHQ7CisgIHN0cj1UUC0+X3VucGFyc2VkX2FyZ3MoKTsKKyAgdHh0PUJTKHN0ciwgNzgsIENBUChnZXRldWlkKFRQKSkrIi4uLi4uLi4uLi4uLi4iWzAuLjEyXSwgQlNfSU5ERU5UX09OQ0UpOworICB3cml0ZV9maWxlKCBMQURFTihJREVFTl9MT0cpLCB0eHQrIlxuIik7CisgIHdyaXRlKCJWaWVsZW4gRGFuayBmdWVyIERlaW5lIElkZWUhXG4iKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludCBnZXJ1ZWNoZV90cmVubmVuKHN0cmluZyBzdHIpCit7CisgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IHRyZW5uZW4/XG4iKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIGlmKHN0ciE9ImdlcnVjaCIgJiYgc3RyIT0iZ2VydWVjaGUiKQorICAgIHJldHVybiAwOworICB3cml0ZSgiRHUgdmVyc3VjaHN0IGVzLCBhYmVyIER1IHNjaGFmZnN0IGVzIGVpbmZhY2ggbmljaHQuXG4iKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludCBleHBlcnRlX3dlcmRlbihzdHJpbmcgc3RyKQoreworICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSB3ZXJkZW4/XG4iKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIGlmKHN0ciE9ImV4cGVydGUiICYmIHN0ciE9ImZhY2htYW5uIikKKyAgICByZXR1cm4gMDsKKyAgd3JpdGUoIlRqYSwgc28gZWluZmFjaCBnZWh0IGRhcyBuaWNodCwgYWJlciBkYXMgaGFldHRlc3QgRHUgRGlyIGRlbmtlbiBrb2VubmVuLlxuIik7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zY2hyYW5rbGFkZW4uaCBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc2NocmFua2xhZGVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjNzZhOQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc2NocmFua2xhZGVuLmgKQEAgLTAsMCArMSwzNiBAQAorI2luY2x1ZGUgIm1vZWJlbC5oIgorCisjZGVmaW5lIFNDSFJBTktNQVNURVIyICIvcGxheWVycy9zd2lmdC93b3Jrcm9vbSIKKworI2luY2x1ZGUgPGxhbmd1YWdlLmg+CisjaW5jbHVkZSA8ZGVmaW5lcy5oPgorI2luY2x1ZGUgPGNvbWJhdC5oPgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx3aXpsZXZlbHMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKyNpbmNsdWRlIDxyb29tcy5oPgorCisjZGVmaW5lIEJTICAgYnJlYWtfc3RyaW5nCisjZGVmaW5lIEVOVih4KSAgZW52aXJvbm1lbnQoeCkKKyNkZWZpbmUgRVRPIGVudmlyb25tZW50KHRoaXNfb2JqZWN0KCkpCisjZGVmaW5lIEVUUCBlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKQorI2RlZmluZSBUUCAgIHRoaXNfcGxheWVyKCkKKyNkZWZpbmUgVE8gICB0aGlzX29iamVjdCgpCisKKyNkZWZpbmUgU1AgU2V0UHJvcAorI2RlZmluZSBRUCBRdWVyeVByb3AKKyNkZWZpbmUgQUQgQWRkRGV0YWlsCisjZGVmaW5lIEFSRCBBZGRSZWFkRGV0YWlsCisKKyNkZWZpbmUgU1VJRCBzZXRldWlkKGdldHVpZCh0aGlzX29iamVjdCgpKSkKKworLy8jZGVmaW5lIENBUCh4KSBjYXBpdGFsaXplKHgpCisjZGVmaW5lIExPV0VSKHgpIGxvd2VyX2Nhc2UoeCkKKworI2RlZmluZSBDTE9ORU1FKHgpIGNsb25lX29iamVjdCh4KS0+bW92ZShNRSkKKyNkZWZpbmUgQ0xPTkVPQih4KSBjbG9uZV9vYmplY3QoeCkKKyNkZWZpbmUgQ0xPTkUoeCx5KSBjbG9uZV9vYmplY3QoeCktPm1vdmUoeSkKKyNkZWZpbmUgSVNUX1pBSEwoeCkgKHN0cmluZyl0b19pbnQoeCk9PXgKKworI2RlZmluZSBSSUdIVCh4LHkpICh5PnNpemVvZih4KT94OmV4dHJhY3QoeCxzaXplb2YoeCkteSxzaXplb2YoeCktMSkpCisjZGVmaW5lIExFRlQoeCx5KSAoeT5zaXplb2YoeCk/eDpleHRyYWN0KHgsMCx5LTEpKQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zY2hyYW5rbWFzdGVyLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3NjaHJhbmttYXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjAyZGRjCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zY2hyYW5rbWFzdGVyLmMKQEAgLTAsMCArMSwyMzMgQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5hbWUgZGVzIE9iamVjdHM6ICAgIFNjaHJhbmttYXN0ZXIKKy8vIExldHp0ZSBBZW5kZXJ1bmc6ICAgIDE5LjAzLjIwMDEKKy8vIE1hZ2llcjogICAgICAgICAgICAgIHd1cnplbAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyogQ2hhbmdlbG9nOgorICAgKiAyMS4wNi4yMDA3LCBaZXNzdHJhCisgICAgICAgICAgIGNhbGxfb3V0IG9obmUgVmVyem9lZ2VydW5nIGJlaW0gVXBkYXRlbiBkdXJjaCBlaW5lcyBtaXQgMnMgVmVyem9lZ2VydW5nIGVyc2V0enQuCisqLworI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCitpbmhlcml0ICIvc3RkL3Jvb20iOworCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPGxhbmd1YWdlLmg+CisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCisKK21hcHBpbmcgc2NocmFlbmtlOworc3RyaW5nICpjbnRzOworaW50IHVwZGF0ZV9sYWV1ZnQ7CitpbnQgcmVzZXRfbGFldWZ0OworCitwcm90ZWN0ZWQgdm9pZCBjcmVhdGUoKSAKK3sKKyAgOjpjcmVhdGUoKTsKKyAgU1AoUF9JTlRfU0hPUlQsICJJcmdlbmR3byB1bmQgTmlyZ2VuZHMiKTsKKyAgU1AoUF9JTlRfTE9ORywKKyAgICAgIkRpZXMgaXN0IGRlciBNYXN0ZXItUmF1bSBmdWVyIGRlbiBTQ0hSQUVOS0VSLlxuIgorICAgICsiSGllciBtZXJrdCBzaWNoIEF1Z3VzdCBkaWUgQW56YWhsIGRlciB2ZXJrYXVmdGVuIENvbnRhaW5lci5cbiIKKyAgICArIkRhdm9uIHNpbmQgbW9tZW50YW4gQEBBTlpBSExAQCByZWdpc3RyaWVydGUgaW0gVW1sYXVmIVxuIgorICAgICsiRm9sZ2VuZGUgQmVmZWhsZSBzaW5kIHZlcmZ1ZWdiYXI6XG4iCisgICAgKyIgIHNjaHJhbmtsaXN0ZS4uLi4uLi4uLkxpc3RldCByZWdpc3RyaWVydGUsIGltIFNwaWVsIGJlZmluZGxpY2hlIENvbnRhaW5lci5cbiIKKyAgICArIiAgc2NocmFua3VwZGF0ZS4uLi4uLi4uRnVlaHJ0IGVpbiBVcGRhdGUgYWxsZXIgcmVnaXN0cmllcnRlbiBDb250YWluZXIgZHVyY2guXG4iKTsKKworICBTUChQX0xJR0hULCAxKTsKKyAgU1AoUF9JTkRPT1JTLCAxKTsKKyAgaWYoIFNDSFJBTktNQVNURVIyLT5RdWVyeVByb3AoInNjaHJhZW5rZSIpICkgIC8vIERlciBTaWNoZXJ1bmdzcmF1bSBoYXQgRGF0ZW4/CisgICAgc2NocmFlbmtlPVNDSFJBTktNQVNURVIyLT5RdWVyeVByb3AoInNjaHJhZW5rZSIpOyAgLy8gRGF0ZW4gaG9sZW4uLi4KKyAgZWxzZQorICAgIHNjaHJhZW5rZT0oW10pOworICBTZXRQcm9wKCJzY2hyYWVua2UiLCBzY2hyYWVua2UgKTsKKworICB1cGRhdGVfbGFldWZ0PTA7CisKKyAgLy8gdW5ub2V0aWcsIFNDSFJBTktNQVNURVIyIGlzdCBqZXR6dCBzY2hvbiBnZWxhZGVuLCBzLm8uCisgIC8vbG9hZF9vYmplY3QoU0NIUkFOS01BU1RFUjIpOworICBzZXRfbmV4dF9yZXNldCgzNjAwKTsgLy8gUmVzZXQgMSB4IHBybyBTdGQuCisKKyAgQWRkQ21kKCh7InNjaHJhbmtsaXN0ZSJ9KSwgIlNjaHJhbmtsaXN0ZSIpOworICBBZGRDbWQoKHsic2NocmFua3VwZGF0ZSJ9KSwgIlNjaHJhbmtVcGRhdGUiKTsKK30KKworcHVibGljIGludCBjbGVhbl91cChpbnQgcmVmKSB7cmV0dXJuIDA7fSAgIC8vIHZlcmhpbmRlcnQgQXVzc3dhcHBlbiBkZXMgUmF1bWVzCisKK3B1YmxpYyB2YXJhcmdzIHN0cmluZyBHZXRFeGl0cyggb2JqZWN0IHZpZXdlciApIAoreworICByZXR1cm4gIiI7Cit9CisKK3N0cmluZyBBTlpBSEwoKQoreworICByZXR1cm4gdG9fc3RyaW5nKCBzaXplb2Yoc2NocmFlbmtlKSApOworfQorCisKKy8vIGNudCA9IE9iamVjdCBkZXMgQ29udGFpbmVycworLy8gdmVyID0gVmVyc2lvbiBkZXMgQ29udGFpbmVycyAoVkVSU0lPTl9TVEQrVkVSU0lPTl9PQkogdm9uIHN0ZC5jb250LiArIG9iamVrdC4uLikKKy8vIHNlaGVyPURlciBCZXNpdHplci9LYWV1ZmVyCisvLyBzdGFuZG9ydD1SYXVtIGluIGRlbSBkZXIgQ29udGFpbmVyIHN0ZWh0Cit2b2lkIFJlZ2lzdGVyQ250KG1peGVkIGNudCwgbWl4ZWQgdmVyLCBtaXhlZCBzZWhlciwgbWl4ZWQgc3RhbmRvcnQpCit7CisgIGlmIChvYmplY3RwKHN0YW5kb3J0KSkgc3RhbmRvcnQ9b2JqZWN0X25hbWUoc3RhbmRvcnQpOworICBpZiggIW9iamVjdHAoY250KSB8fCAhc3RyaW5ncCh2ZXIpIHx8ICFzdHJpbmdwKHNlaGVyKSB8fCAhc3RyaW5ncChzdGFuZG9ydCkgKQorICB7CisgICAgbG9nX2ZpbGUoInN3aWZ0L3NjaHJhZW5rZXIvYnVncy5sb2ciLCAic2NocmFua21hc3RlciAoUmVnaXN0ZXJDbnQpICoiCisgICAgICArdG9fc3RyaW5nKGNudCkrIioiK3RvX3N0cmluZyh2ZXIpKyIqIit0b19zdHJpbmcoc2VoZXIpKyIqIgorICAgICAgK3RvX3N0cmluZyhzdGFuZG9ydCkrIipcbiIpOworICAgIHJldHVybjsKKyAgfQorICBtX2RlbGV0ZShzY2hyYWVua2Usb2JqZWN0X25hbWUoY250KSk7CisgIHNjaHJhZW5rZSs9KFtvYmplY3RfbmFtZShjbnQpOiB2ZXI7IHNlaGVyOyB0b19zdHJpbmcoc3RhbmRvcnQpXSk7CisgIFNldFByb3AoInNjaHJhZW5rZSIsIHNjaHJhZW5rZSApOworICBTQ0hSQU5LTUFTVEVSMi0+U2V0UHJvcCgic2NocmFlbmtlIiwgc2NocmFlbmtlICk7Cit9CisKK3ZvaWQgUmVtb3ZlQ250KG1peGVkIGNudCwgbWl4ZWQgc2VoZXIpCit7CisgIGlmKCAhb2JqZWN0cChjbnQpIHx8ICFzdHJpbmdwKHNlaGVyKSApCisgIHsKKyAgICBsb2dfZmlsZSgic3dpZnQvc2NocmFlbmtlci9idWdzLmxvZyIsICJzY2hyYW5rbWFzdGVyIChSZW1vdmVDbnQpICoiCisgICAgICArdG9fc3RyaW5nKGNudCkrIioiK3RvX3N0cmluZyhzZWhlcikrIipcbiIpOworICAgIHJldHVybjsKKyAgfQorICBzY2hyYWVua2UtPShbb2JqZWN0X25hbWUoY250KV0pOworICBTZXRQcm9wKCJzY2hyYWVua2UiLCBzY2hyYWVua2UgKTsKKyAgU0NIUkFOS01BU1RFUjItPlNldFByb3AoInNjaHJhZW5rZSIsIHNjaHJhZW5rZSApOworfQorCitzdHJpbmcgZm4oc3RyaW5nIHdhcykKK3sKKyAgc3RyaW5nIHN0ciwqc3RyczsKKyAgc3Rycz1vbGRfZXhwbG9kZSggd2FzLCAiLyIgKTsKKyAgc3RyPXN0cnNbc2l6ZW9mKHN0cnMpLTFdOworICBzdHJzPW9sZF9leHBsb2RlKCBzdHIsICIjIiApOworICBzdHI9c3Ryc1swXTsKKyAgcmV0dXJuIHN0cjsKK30KKworaW50IFNjaHJhbmtsaXN0ZSgpCit7CisgIGludCBpOworICBzdHJpbmcgc3RyLCAqc3RyczsKKyAgb2JqZWN0IGNudDsKKyAgaWYodXBkYXRlX2xhZXVmdCAmJiAhcmVzZXRfbGFldWZ0KSAvLyBOaWNodCB3YWVocmVuZCBlaW5lcyBVcGRhdGVzIGRlciBTY2hyYWVua2UhCisgIHsKKyAgICB3cml0ZSgiVXBkYXRlIHdpcmQgZHVyY2hnZWZ1ZWhydC4gQml0dGUgYmlzIHp1bSBFbmRlIHdhcnRlbiFcbiIpOworICAgIHJldHVybiAxOworICB9CisgIHN0cj0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgc3Rycz1tX2luZGljZXMoc2NocmFlbmtlKTsKKyAgZm9yKGk9MDtpPHNpemVvZihzdHJzKTtpKyspCisgIHsKKyAgICBpZiggY250PWZpbmRfb2JqZWN0KHN0cnNbaV0pICkKKyAgICB7CisgICAgICBzdHIrPShmbihvYmplY3RfbmFtZShjbnQpKSsiLi4uLi4uLi4uLi4uLi4uLi4uLi4iKVswLi4yMF0rIiAiOworICAgICAgc3RyKz1zY2hyYWVua2Vbc3Ryc1tpXSwgMF0rIiAiOworICAgICAgc3RyKz0oc2NocmFlbmtlW3N0cnNbaV0sIDFdKyIuLi4uLi4uLi4uLi4uLi4uLi4uLiIpWzAuLjIwXSsiICI7CisgICAgICBzdHIrPWZuKHNjaHJhZW5rZVtzdHJzW2ldLCAyXSkrIlxuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHN0cis9Ik5pY2h0IGF1ZmZpbmRiYXJlbiBDb250YWluZXIgYXVzIExpc3RlIGdlbG9lc2NodCFcbiI7CisgICAgICBzY2hyYWVua2UtPShbc3Ryc1tpXV0pOworICAgICAgU2V0UHJvcCgic2NocmFlbmtlIiwgc2NocmFlbmtlICk7CisgICAgICBTQ0hSQU5LTUFTVEVSMi0+U2V0UHJvcCgic2NocmFlbmtlIiwgc2NocmFlbmtlICk7CisgICAgfQorICB9CisgIHN0cis9Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisgIGlmKCBUUCAmJiBwcmVzZW50KFRQKSApIC8vd3VyemVsIDE5LjAzLjAxIAorICAgIFRQLT5Nb3JlKHN0cik7CisgIHJldHVybiAxOworfQorCit2b2lkIFVwZGF0ZV9uYWVjaHN0ZXJfU2NocmFuaygpCit7CisgIGludCBpOworICBvYmplY3QgY250LCBjbnRfbmV1LCAqaW52OworICBpZiggc2l6ZW9mKGNudHMpICkgICAgLy8gRXMgZ2lidCBub2NoIFNjaHJhZW5rZSB6dW0gYWJhcmJlaXRlbi4uLgorICB7CisgICAgY250PWZpbmRfb2JqZWN0KGNudHNbMF0pOyAvLyBTY2hyYW5rIGF1c3dhZWhsZW4gKyBPYmpla3Qgc3VjaGVuCisgICAgaWYoY250KQorICAgIHsKKyAgICAgIC8vIEF1dG9sb2FkZXJ0cnVoZSBpc3QgZXR3YXMgc3BlemllbGxlciB6dSB1cGRhdGVuLi4uIERhaGVyIGFsdGVybmF0aXZlcgorICAgICAgLy8gTWVjaGFuaXNtdXM6IFVwZGF0ZU1lKCkgaW0gTW9lYmVsc3R1ZWNrIGF1ZnJ1ZmVuLiBXZW5uIGRpZSBGdW5rdGlvbgorICAgICAgLy8gZXR3YXMgIT0gMCBsaWVmZXJ0LCB3aXJkIGFuZ2Vub21tZW4sIGRhc3MgZGllc2UgRnVua3Rpb24gZGFzIFVwZGF0ZQorICAgICAgLy8gZ2VtYWNodCBoYXQgb2RlciBzaWNoIGluIEt1ZXJ6ZSBkYXJ1bSBrdWVtbWVydC4gU29uc3Qgd2lyZCBkYXMgYWx0ZQorICAgICAgLy8gVXBkYXRlIGdlbWFjaHQuCisgICAgICAvLyBEYXMgbmV1ZSBNb2ViZWxvYmpla3QgaXN0IGRhZnVlciB2ZXJhbnR3b3J0bGljaCwgc2ljaCBiZWltCisgICAgICAvLyBTY2hyYW5rbWFzdGVyIHp1IChkZS0pcmVnaXN0cmllcmVuIQorICAgICAgb2JqZWN0IG9sZGVudj1lbnZpcm9ubWVudChjbnQpOworICAgICAgaWYgKGNudC0+VXBkYXRlTWUoKSkKKyAgICAgIHsKKyAgICAgICAgICB0ZWxsX3Jvb20oVE8sICIuLi5VcGRhdGUgIitDQVAoZm4oY250c1swXSkpCisgICAgICAgICAgICAgICsiIGluICIgKyBvYmplY3RfbmFtZShvbGRlbnYpICsgIlxuIiApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAgIHRlbGxfcm9vbShUTywgQ0FQKGZuKGNudHNbMF0pKQorICAgICAgICAgICAgICArIiBpbiAiICsgb2JqZWN0X25hbWUob2xkZW52KSAKKyAgICAgICAgICAgICAgKyAiIGhhdCBrZWluIFVwZGF0ZU1lKCkhXG4iICk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB0ZWxsX3Jvb20oVE8sICJOaWNodCBhdWZmaW5kYmFyZW4gQ29udGFpbmVyIGF1cyBMaXN0ZSBnZWxvZXNjaHQhXG4iKTsKKyAgICAgIHNjaHJhZW5rZS09KFtjbnRzWzBdXSk7CisgICAgfQorICAgIGNudHMtPSh7Y250c1swXX0pOyAgIC8vIFNjaHJhbmsgYXVzIExpc3RlIG5laG1lbgorICAgIGNhbGxfb3V0KCJVcGRhdGVfbmFlY2hzdGVyX1NjaHJhbmsiLCAyKTsgIC8vIE51ciAxIFNjaHJhbmstVXBkYXRlIHBybyBoZWFydF9iZWF0IQorICB9CisgIGVsc2UgIC8vIEFsbGUgU2NocmFlbmtlIGFiZ2VhcmJlaXRldDoKKyAgeworICAgIHRlbGxfcm9vbShUTywgIioqKiBVcGRhdGUgYWJnZXNjaGxvc3Nlbi5cbiIpOworICAgIFNldFByb3AoInNjaHJhZW5rZSIsIHNjaHJhZW5rZSApOworICAgIFNDSFJBTktNQVNURVIyLT5TZXRQcm9wKCJzY2hyYWVua2UiLCBzY2hyYWVua2UgKTsKKyAgICB1cGRhdGVfbGFldWZ0PTA7CisgIH0KK30KKworaW50IFNjaHJhbmtVcGRhdGUoKQoreworICBpZih1cGRhdGVfbGFldWZ0KSAgIC8vIE5pY2h0IHdhZWhyZW5kIGVpbmVzIFVwZGF0ZXMgZGVyIFNjaHJhZW5rZSEKKyAgeworICAgIHdyaXRlKCJVcGRhdGUgd2lyZCBkdXJjaGdlZnVlaHJ0LiBCaXR0ZSBiaXMgenVtIEVuZGUgd2FydGVuIVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgdXBkYXRlX2xhZXVmdD0xOyAgICAvLyBBYiBzb2ZvcnQgbGFldWZ0IFVwZGF0ZSEKKyAgY250cz1tX2luZGljZXMoc2NocmFlbmtlKTsKKyAgdGVsbF9yb29tKFRPLCAiKioqIFVwZGF0ZSB3aXJkIGdlc3RhcnRldC4uLlxuIik7CisgIFVwZGF0ZV9uYWVjaHN0ZXJfU2NocmFuaygpOworICByZXR1cm4gMTsKK30KKworCit2b2lkIHJlc2V0KCkKK3sKKyAgcmVzZXRfbGFldWZ0PTE7CisgIHNldF9uZXh0X3Jlc2V0KDM2MDApOyAvLyBSZXNldCAxIHggcHJvIFN0ZC4KKyAgOjpyZXNldCgpOworICAvLyBXaXJmdCBTY2hyYWVua2UgYXVzIGRlciBMaXN0ZSwgZGllIGF1cyB3ZWxjaGVtIEdydW5kIGF1Y2ggaW1tZXIgbmljaHQgbWVociBleGlzdGllcmVuCisgIFNjaHJhbmtsaXN0ZSgpOworICBpZiggIShzY2hyYWVua2U9PVF1ZXJ5UHJvcCgic2NocmFlbmtlIik9PVNDSFJBTktNQVNURVIyLT5RdWVyeVByb3AoInNjaHJhZW5rZSIpKSApCisgICAgbG9nX2ZpbGUoInN3aWZ0L3NjaHJhZW5rZXIvcmVzZXQubG9nIiwgInNjaHJhbmttYXN0ZXIgKHJlc2V0KSAiCisgICAgICArc2l6ZW9mKHNjaHJhZW5rZSkrIiAiCisgICAgICArc2l6ZW9mKFF1ZXJ5UHJvcCgic2NocmFlbmtlIikpKyIgIgorICAgICAgK3NpemVvZihTQ0hSQU5LTUFTVEVSMi0+UXVlcnlQcm9wKCJzY2hyYWVua2UiKSkrIlxuIik7CisgIGlmKCBwcmVzZW50KCJJbnRlcmFjdGl2ZSIpICkKKyAgICB0ZWxsX3Jvb20oVE8sICIqKiogUkVTRVQgKioqXG4iKTsKKyAgcmVzZXRfbGFldWZ0PTA7Cit9CisKKy8qCisvLyBWZXJhbHRldGUgRnVua3Rpb25lbiwgdW0gRmVobGVyIGFienVmYW5nZW4uIEthbm4gbmFjaCBkZW0gbmFlY2hzdGVuIFJlYm9vdAorLy8gZ2Vsb2VzY2h0IHdlcmRlbiAhISEKK3ZvaWQgQWRkQ250KG1peGVkIGNudCwgbWl4ZWQgdmVyLCBtaXhlZCBzZWhlciwgbWl4ZWQgc3RhbmRvcnQpCit7CisgIGxvZ19maWxlKCJzd2lmdC9zY2hyYWVua2VyL3ZlcmxvcmVuLmxvZyIsIHRvX3N0cmluZyhjbnQpKyJcbiIpOworfQordm9pZCBFZGl0Q250KG1peGVkIGNudCwgbWl4ZWQgdmVyLCBtaXhlZCBzZWhlciwgbWl4ZWQgc3RhbmRvcnQpCit7CisgIGxvZ19maWxlKCJzd2lmdC9zY2hyYWVua2VyL3ZlcmxvcmVuLmxvZyIsIHRvX3N0cmluZyhjbnQpKyJcbiIpOworfQorKi8KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc3BpbmQuYyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc3BpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDczYjEwCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zcGluZC5jCkBAIC0wLDAgKzEsMjA4IEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBTcGluZAorLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMTcuMDMuMjAwMQorLy8gTWFnaWVyOiAgICAgICAgICAgICAgU3dpZnQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNwcmFnbWEgc3Ryb25nX3R5cGVzLHJ0dF9jaGVja3MKKworI2luY2x1ZGUgInNjaHJhbmtsYWRlbi5oIgorI2luY2x1ZGUgImFuc2kuaCIKK2luaGVyaXQgTEFERU4oInN3aWZ0X3N0ZF9jb250YWluZXIiKTsKKworI2RlZmluZSBWRVJTSU9OX09CSiAiMyIKKworc3RyaW5nIHN0cmFsbDsKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkKK3sKKyAgaWYgKCFjbG9uZXAoVE8pKSByZXR1cm47CisgIHN3aWZ0X3N0ZF9jb250YWluZXI6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfU0hPUlQsICJFaW4gU3BpbmQiKTsKKyAgU2V0UHJvcChQX0xPTkcsIEJTKAorICAgICAiRGllc2VyIFN0YWhsc2NocmFuayBpc3Qgdm9yIGFsbGVtIGZ1ZXIgc3BhcnRhbmlzY2hlIFJhZXVtZSBnZWRhY2h0LiBFYmVuc28gIgorICAgICsid2llIHNlaW4gR2VnZW5zdHVlY2ssIGRlciBLbGVpZGVyc2NocmFuaywgdmVyZnVlZ3QgZXIgdWViZXIgZWluZSBNZW5nZSAiCisgICAgKyJSZWdhbGUsIGluIGRlbmVuIGVyIHJpZXNpZ2UgQXVzcnVlc3R1bmdzbWVuZ2VuIGF1Zm5laG1lbiBrYW5uLiIpCisgICAgKyJAQGNudF9zdGF0dXNAQCIpOworICBBZGRJZCgoeyJzcGluZCIsICJzY2hyYW5rIiwgInN0YWhsc2NocmFuayJ9KSk7CisgIFNldFByb3AoImNudF92ZXJzaW9uX29iaiIsIFZFUlNJT05fT0JKKTsKKyAgU2V0UHJvcChQX05BTUUsICJTcGluZCIpOworICBTZXRQcm9wKFBfR0VOREVSLCBNQUxFKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwgNTAwMCk7ICAgICAgICAgLy8gR2V3aWNodCA1IEtnCisgIFNldFByb3AoUF9NQVhfV0VJR0hULCAxMDAwMDAwKTsgIC8vIEVzIHBhc3NlbiBmdWVyIDEwMDAga2cgU2FjaGVuIHJlaW4uCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsgIC8vIERhZnVlciBtYWNodCBlciBhdWNoIG5peCBsZWljaHRlciA6KQorICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsIDEwMCk7ICAgICAvLyBNZWhyIHNvbGx0ZSBuaWNodCBzZWluLCBsdC4gVGlhbWFrLgorICBTZXRQcm9wKFBfVkFMVUUsIDApOyAgICAgICAgICAgICAvLyBLZWluIG1hdGVyaWVsbGVyIFdlcnQuIElzdCBlaCBuaWNodCB2ZXJrYXVmYmFyLgorICBTZXRQcm9wKFBfTk9CVVksIDEpOyAgICAgICAgICAgICAvLyBXaXJkIGltIExhZGVuIHplcnN0b2VydCwgZmFsbHMgZXIgdmVya2F1ZnQgd2lyZC4KKyAgU2V0UHJvcChQX05PR0VULCAiRGFzIGdlaHQgbmljaHQuICIrTmFtZShXRVIsMSkrIiBoYWZ0ZXQgd2llIG1hZ2lzY2ggYW0gQm9kZW4uXG4iKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLCAoe01BVF9NSVNDX01FVEFMLCBNQVRfTUlTQ19NQUdJQ30pICk7CisgIFNldFByb3AoUF9JTkZPLCAiVmVyc3VjaHMgbWFsIG1pdDogXCJza29tbWFuZG9zICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXCIgIVxuIik7CisgIFNldFByb3AoIm9ial9jbWQiLCAic2xpc3RlIFtPYmpla3QtSWRdIFtLbGVpZHVuZ3MtL1J1ZXN0dW5nc3R5cF1cbiIKKyAgICAgICAgICAgICAgICAgICAgKyIgIEtsZWlkdW5ncy0vUnVlc3R1bmdzdHlwZW46IEhlbG1lLCBVbWhhZW5nZSwgUnVlc3R1bmdlbiwgSG9zZW4sIFNjaHVoZSxcbiIKKyAgICAgICAgICAgICAgICAgICAgKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRzY2h1aGUsIEd1ZXJ0ZWwsIEFtdWxldHRlLCBSaW5nZSwgS29lY2hlcixcbiIKKyAgICAgICAgICAgICAgICAgICAgKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGlsZGUsIFNvbnN0aWdlc1xuIik7CisgIEFEKCh7InJlZ2FsIiwgInJlZ2FsZSJ9KSwgQlMoIkR1cmNoIGRpZSBSZWdhbGUga29tbXQgZXR3YXMgT3JkbnVuZyBpbiBkaWUgIgorICAgICsidmllbGVuIFNhY2hlbiwgZGllIG1hbiBpbiBkZW4gU2NocmFuayBzdGVja2VuIGthbm4uIER1IGthbm5zdCBEaXIgei5CLiAiCisgICAgKyJlaW5lIExpc3RlIGJlc3RpbW10ZXIgS2xlaWR1bmdzLS9SdWVzdHVuZ3N0eXBlbiBkZXMgU2NocmFua2luaGFsdGVzICIKKyAgICArIm1pdCBkZW0gQmVmZWhsIFwic2xpc3RlXCIgYW5zY2hhdWVuLiAoRGFzIGdlaHQgbmF0dWVybGljaCBudXIgYmVpICIKKyAgICArIm9mZmVuZW0gU2NocmFuayEiKSk7CisKKyAgQWRkQ21kKCh7InNsaXN0ZSJ9KSwgImF1Zmxpc3R1bmciKTsKK30KKwordmFyYXJncyBpbnQgUHJldmVudEluc2VydChvYmplY3Qgb2IpCit7CisgIC8vIE51ciBSdWVzdHVuZy9LbGVpZHVuZyBoYXQgaW4gZGllc2VtIENvbnRhaW5lciB3YXMgdmVybG9yZW4hCisgIGlmICgob2ItPklzQ2xvdGhpbmcoKSB8fCBvYi0+UXVlcnlQcm9wKFBfQVJNT1VSX1RZUEUpKQorICAgICAgJiYgIW9iLT5RdWVyeVByb3AoUF9XRUFQT05fVFlQRSkgKQorICB7CisgICAgcmV0dXJuIDo6UHJldmVudEluc2VydChvYik7CisgIH0KKworICB3cml0ZSggQlMoIkluICIrbmFtZShXRU4sMSkrIiBrYW5uc3QgRHUgbnVyIFJ1ZXN0dW5ncy0vS2xlaWR1bmdzc3R1ZWNrZSBsZWdlbiEiKSk7CisgIHJldHVybiAxOworfQorCitpbnQgYXVmbGlzdHVuZzIoc3RyaW5nIHdhcywgc3RyaW5nIG5mX3N0cjEsIHN0cmluZyBuZl9zdHIyLCBpbnQgYWxsZXMpCit7CisgIHN0cmluZyBvYnNob3J0LCBzdWNoZSwgKnN0cnM7CisgIG9iamVjdCAqb2JzOworICBpbnQgaTsKKyAgbWFwcGluZyBzdWNob2JzOworICBzd2l0Y2god2FzKQorICB7CisgICAgY2FzZSAiaGVsbWUiICAgICAgOiBzdWNoZT1BVF9IRUxNRVQ7IGJyZWFrOworICAgIGNhc2UgInVtaGFlbmdlIiAgIDogc3VjaGU9QVRfQ0xPQUs7IGJyZWFrOworICAgIGNhc2UgInJ1ZXN0dW5nZW4iIDogc3VjaGU9QVRfQVJNT1VSOyBicmVhazsKKyAgICBjYXNlICJob3NlbiIgICAgICA6IHN1Y2hlPUFUX1RST1VTRVJTOyBicmVhazsKKyAgICBjYXNlICJzY2h1aGUiICAgICA6IHN1Y2hlPUFUX0JPT1Q7IGJyZWFrOworICAgIGNhc2UgImhhbmRzY2h1aGUiIDogc3VjaGU9QVRfR0xPVkU7IGJyZWFrOworICAgIGNhc2UgImd1ZXJ0ZWwiICAgIDogc3VjaGU9QVRfQkVMVDsgYnJlYWs7CisgICAgY2FzZSAiYW11bGV0dGUiICAgOiBzdWNoZT1BVF9BTVVMRVQ7IGJyZWFrOworICAgIGNhc2UgInJpbmdlIiAgICAgIDogc3VjaGU9QVRfUklORzsgYnJlYWs7CisgICAgY2FzZSAia29lY2hlciIgICAgOiBzdWNoZT1BVF9RVUlWRVI7IGJyZWFrOworICAgIGNhc2UgInNjaGlsZGUiICAgIDogc3VjaGU9QVRfU0hJRUxEOyBicmVhazsKKyAgICBjYXNlICJzb25zdGlnZXMiICA6IHN1Y2hlPUFUX01JU0M7IGJyZWFrOworICAgIGRlZmF1bHQgICAgICAgICAgIDogd3JpdGUoIkZlaGxlcjogVW5ndWVsdGlnZXIgS2xlaWR1bmdzLS9SdWVzdHVuZ3N0eXAuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyJGb2xnZW5kZSBUeXBlbiBnaWJ0IGVzOlxuIituZl9zdHIxK25mX3N0cjIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IGJyZWFrOworICB9CisgIG9icz1hbGxfaW52ZW50b3J5KCk7CisgIHN1Y2hvYnM9KFtdKTsKKyAgZm9yKGk9MDtpPHNpemVvZihvYnMpO2krKykKKyAgeworICAgIG9ic2hvcnQ9b2JzW2ldLT5RdWVyeVByb3AoUF9TSE9SVCk7CisgICAgaWYob2JzaG9ydD09Ik5pY2h0cyBiZXNvbmRlcmVzIikgLy8ga2VpbmUgUF9TSE9SVCA/CisgICAgICBvYnNob3J0PW9ic1tpXS0+TmFtZShXRVIpOyAgICAgLy8gICBIb2ZmZW4gd2lyIG1hbCBkYXNzIGRhcyBPYmouIG5lbiBOYW1lbiBoYXQuCisgICAgaWYob2JzW2ldLT5RdWVyeVByb3AoUF9BUk1PVVJfVFlQRSk9PXN1Y2hlKSAgICAvLyBHZXN1Y2h0ZXIgQXJtb3VyVHlwZSBnZWZ1bmRlbi4uLgorICAgIHsKKyAgICAgIGlmKHN1Y2hvYnNbb2JzaG9ydF0pICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBfU0hPUlQgZGVzIE9iai4gc2Nob24gaW0gbWFwcGluZz8KKyAgICAgIHsKKyAgICAgICAgaWYoIG9ic1tpXS0+UXVlcnlQcm9wKFBfQU1PVU5UKSApCisgICAgICAgICAgc3VjaG9ic1tvYnNob3J0XSs9b2JzW2ldLT5RdWVyeVByb3AoUF9BTU9VTlQpOyAvLyAgIERhbm4gZGVuIFphZWhsZXIgdW0gQW1vdW50IGhvY2ghCisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdWNob2JzW29ic2hvcnRdKz0xOyAgICAgICAgICAgICAgICAgICAgIC8vICAgRGFubiBkZW4gWmFlaGxlciB1bSAxIGhvY2ghCisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmKCBvYnNbaV0tPlF1ZXJ5UHJvcChQX0FNT1VOVCkgKQorICAgICAgICAgIHN1Y2hvYnMrPShbb2JzaG9ydDogb2JzW2ldLT5RdWVyeVByb3AoUF9BTU9VTlQpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdWNob2JzKz0oW29ic2hvcnQ6IDFdKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgc3Rycz1tX2luZGljZXMoc3VjaG9icyk7CisgIGlmKHNpemVvZihzdHJzKSkKKyAgeworICAgIGlmKCFhbGxlcykKKyAgICB7CisgICAgICBzdHJhbGwrPU5hbWUoV0VSLDEpKyIgZW50aGFlbHQgZm9sZ2VuZGUgIitDQVAod2FzKSsiOlxuIjsKKyAgICAgIHN0cmFsbCs9Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICB9CisgICAgZWxzZQorICAgICAgc3RyYWxsKz1BTlNJX0JPTEQrIj09PSAiK0NBUCh3YXMpKyI6XG4iK0FOU0lfTk9STUFMOworICAgIGZvcihpPTA7aTxzaXplb2Yoc3Rycyk7aSsrKQorICAgIHsKKyAgICAgIGlmKHN1Y2hvYnNbc3Ryc1tpXV0gPiAxKQorICAgICAgICBzdHJhbGwrPXN0cnNbaV0rIi4gKCIrc3VjaG9ic1tzdHJzW2ldXSsiKVxuIjsKKyAgICAgIGVsc2UKKyAgICAgICAgc3RyYWxsKz1zdHJzW2ldKyIuXG4iOworICAgIH0KKyAgfQorICBlbHNlCisgICAgaWYoIWFsbGVzKQorICAgICAgc3RyYWxsKz1OYW1lKFdFUiwxKSsiIGVudGhhZWx0IGtlaW5lICIrQ0FQKHdhcykrIiFcbiI7CisgIHJldHVybiAxOworfQorCitpbnQgYXVmbGlzdHVuZyhzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKnN0cnMsIG9iX2lkLCB3YXMsIG5mX3N0cjEsbmZfc3RyMjsKKyAgc3RyYWxsPSIiOworICBuZl9zdHIxPSIgICAoSGVsbWUsIFVtaGFlbmdlLCBSdWVzdHVuZ2VuLCBIb3NlbiwgU2NodWhlLCBIYW5kc2NodWhlLFxuIgorICAgICAgICAgKyIgICAgR3VlcnRlbCwgQW11bGV0dGUsIFJpbmdlLCBLb2VjaGVyLCBTY2hpbGRlLCBTb25zdGlnZXMpXG4iOworICBuZl9zdHIyPSJTeW50YXg6IHNsaXN0ZSBbT2JqZWt0LUlkXSBbS2xlaWR1bmdzLS9SdWVzdHVuZ3N0eXB8XCJhbGxlc1wiXVxuIgorICAgICAgICAgKyJCc3AuOiAgIHNsaXN0ZSAiK1F1ZXJ5UHJvcChQX0lEUylbMV0rIiAiKyJoZWxtZVxuIgorICAgICAgICAgKyIgICAgICAgIHNsaXN0ZSAiK1F1ZXJ5UHJvcChQX0lEUylbMV0rIiBhbGxlc1xuIjsKKyAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogT2huZSBQYXJhbWV0ZXIga2xhcHB0IGRhcyBuaWNodC5cbiIrbmZfc3RyMik7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZihwcmVzZW50KHN0cik9PVRPKSAgIC8vIFVlYmVycHJ1ZWZlLCBvYiBkaWVzZXMgT2JqZWt0IGdlbWVpbnQgaXN0IQorICB7CisgICAgd3JpdGUoIkZlaGxlcjogRXMgZmVobHQgZWluIEtsZWlkdW5ncy0vUnVlc3R1bmdzdHlwLiBGb2xnZW5kZSBUeXBlbiBnaWJ0IGVzOlxuIgorICAgICAgICAgK25mX3N0cjErbmZfc3RyMik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgc3Rycz1vbGRfZXhwbG9kZShzdHIsICIgIik7CisgIG5vdGlmeV9mYWlsKCJGZWhsZXI6IER1IG11c3N0IGVpbmUgZ3VlbHRpZ2UgT2JqZWt0LUlkIGFuZ2ViZW4hXG4iCisgICAgICAgICAgICAgK25mX3N0cjIpOworICBpZiggc2l6ZW9mKHN0cnMpIDwgMiApIHJldHVybiAwOyAgIC8vIE51ciAxIFBhci4gdW5kIGRlciBpc3QgbmljaHQgZGllIE9iamVrdC1JZAorICBpZiggc2l6ZW9mKHN0cnMpID09IDIgKSAgIC8vIEFuemFobCBQYXIuID0gMgorICB7CisgICAgb2JfaWQ9c3Ryc1swXTsKKyAgICB3YXM9c3Ryc1sxXTsKKyAgICBpZiggSVNUX1pBSEwod2FzKSApICAgICAvLyBPYmpla3QtSWQgei5CLiBtaXQgInNjaHJhbmsgMiIgYW5nZXNwcm9jaGVuPworICAgICAgaWYocHJlc2VudChvYl9pZCsiICIrd2FzKT09VE8pICAgLy8gRmFsbHMgZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCB1bmQga2VpbiAzLiBQYXIhCisgICAgICB7CisgICAgICAgIHdyaXRlKCJGZWhsZXI6IEVzIGZlaGx0IGVpbiBLbGVpZHVuZ3MtL1J1ZXN0dW5nc3R5cC4gRm9sZ2VuZGUgVHlwZW4gZ2lidCBlczpcbiIKKyAgICAgICAgICAgICAgK25mX3N0cjErbmZfc3RyMik7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKKyAgfQorICBlbHNlIGlmKCBzaXplb2Yoc3RycykgPT0gMyApCisgIHsKKyAgICBvYl9pZD1zdHJzWzBdKyIgIitzdHJzWzFdOworICAgIHdhcz1zdHJzWzJdOworICB9CisgIGVsc2UgICAgICAgIC8vIEFuemFobCBlcmZvcmRlcmxpY2hlciBQYXJhbWV0ZXIgdWViZXJzY2hyaXR0ZW4hCisgICAgcmV0dXJuIDA7CisgIGlmKHByZXNlbnQob2JfaWQpIT1UTykgICAvLyBVZWJlcnBydWVmZSwgb2IgYXVjaCBkaWVzZXMgT2JqZWt0IGdlbWVpbnQgaXN0IQorICAgIHJldHVybiAwOworICBpZihRdWVyeVByb3AoUF9DTlRfU1RBVFVTKSE9Q05UX1NUQVRVU19PUEVOKQorICB7CisgICAgd3JpdGUoIkRhenUgbXVlc3N0ZSAiK25hbWUoV0VSLDEpKyIgZ2VvZWZmbmV0IHNlaW4uXG4iKTsKKyAgICByZXR1cm4gMTsKKyAgfQorLy8tLS0gSGllciBpc3QgUGFyYW1ldGVycHJ1ZWZ1bmcgenUgRW5kZS4KKyAgd2FzPUxPV0VSKHdhcyk7CisgIGlmKHdhcyE9ImFsbGVzIikKKyAgICBhdWZsaXN0dW5nMih3YXMsIG5mX3N0cjEsIG5mX3N0cjIsIDApOworICBlbHNlCisgIHsKKyAgICBhdWZsaXN0dW5nMigiaGVsbWUiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigidW1oYWVuZ2UiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigicnVlc3R1bmdlbiIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJob3NlbiIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJzY2h1aGUiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigiaGFuZHNjaHVoZSIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJndWVydGVsIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoImFtdWxldHRlIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoInJpbmdlIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoImtvZWNoZXIiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigic2NoaWxkZSIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJzb25zdGlnZXMiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgfQorICBUUC0+TW9yZShzdHJhbGwpOworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc3dpZnRfc3RkX2NvbnRhaW5lci5jIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9zd2lmdF9zdGRfY29udGFpbmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBmNDk4NgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvc3dpZnRfc3RkX2NvbnRhaW5lci5jCkBAIC0wLDAgKzEsNjExIEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5hbWUgZGVzIE9iamVjdHM6ICAgIFN0YW5kYXJkX0NvbnRhaW5lcgorLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMjEuMDMuMjAwMQorLy8gTWFnaWVyOiAgICAgICAgICAgICAgU3dpZnQKKy8vIERpZXNlcyBGaWxlIHdpcmQgYW5zdGVsbGUgdm9uIC9zdGQvY29udGFpbmVyIGluaGVyaXRlZCwgc28gZGFzcyBkZW0gT2JqZWt0CisvLyBlcndlaXRlcnRlIE1vZWdsaWNoa2VpdGVuIHp1ciBWZXJmdWVndW5nIHN0ZWhlbi4KKy8vCisvLyAwNy4xMi4yMDA1IChTZWxldmVuKTogS3VyemJlc2NocmVpYnVuZyBhdXNibGVuZGJhciBnZW1hY2h0CisvLyAzMC4wNi4yMDA3IChaZXNzdHJhKTogY3JlYXRlIGRlciBCUCB3aXJkIG5pY2h0IG1laHIgYWJnZWJyb2NoZW4uIEF1ZiBkaWUKKy8vICAgQXJ0IHdpcmQgZXMgZGVtIE51dHplciBkaWVzZXMgU3RhbmRhcmRvYmpla3QgdWViZXJsYXNzZW4sIG9iIGVyIGRpZSBCUAorLy8gICBpbml0aWFsaXNpZXJlbiB3aWxsIG9kZXIgbmljaHQuCisvLyAwMS4wNy4yMDA3IChaZXNzdHJhKTogVXBkYXRlIGRlciBNb2ViZWwgcnVmdCBlcnN0bWFsIFVwZGF0ZU1lKCkgaW4gZGVuCisvLyAgIE1vZWJlbG4gYXVmLiBXZW5uIGRhcyAhPSAwIGxpZWZlcnQsIGlzdCBVcGRhdGVNZSgpIGZ1ZXIgZGFzIFVwZGF0ZQorLy8gICB6dXN0YWVuZGlnIHVuZCBtdXNzIGRhcyBtYWNoZW4uCisvLyAgIEF1c3NlcmRlbSBrbGVpbmUgQWVuZGVydW5nIGltIFJlZ2lzdHJpZXJlbiAobmltbXQgYXVjaCBPYmVrdGUgYWxzCisvLyAgIFN0YW5kb3J0KQorLy8gICBXZWl0ZXJoaW4gTW9lYmVsIHVtZ2V6b2dlbiBuYWNoIC9wL3NlaGVyL21vZWJlbC8gdW5kIGluIGRpZXNlbSBGaWxlCisvLyAgIEdldE93bmVyKCkgZGVmaW5pZXJ0LCB3ZWxjaGVzICJTd2lmdCIgenVydWVja2dpYnQuIFdlciBoaWVydm9uIGVyYnQsCisvLyAgIHNvbGx0ZSBkYW1pdCBhbHNvIHNlaW4gZWlnZW5lcyBHZXRPd25lcigpIGRlZmluaWVyZW4uCisvLyAgIGdsb2IuIFZhcmlhYmxlbiBhdWYgJ25vc2F2ZScgZ2VhZW5kZXJ0LgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworLy8gRnVlciBUZXN0endlY2tlIGlzdCBlcyBtb2VnbGljaCwgZGVtIGVudHNwcmVjaGVuZGVuIE9iamVrdCBkaWUgUHJvcGVydHkKKy8vICJ0ZXN0IiBhdWYgMSB6dSBzZXR6ZW4sIGRhbWl0IGlzdCBkYW5uIHNvIHppZW1saWNoIGFsbGVzIGVybGF1YnQuCisvLyBNYW4gc29sbHRlIGRpZSBQcm9wZXJ0eSBhYmVyIHVuYmVkaW5ndCB3aWVkZXIgZW50ZmVybmVuLCBzb25zdCBpc3QgZXMgei5CLgorLy8gbW9lZ2xpY2gsIGVpbmVuIFNjaHJhbmsgdm9uIFNlaGVyaGF1cyBBIG5hY2ggU2VoZXJoYXVzIEIgb2RlciBzb2dhciBoaW5hdXMKKy8vIHp1IHZlcnNjaGllYmVuICEhIQorCisjcHJhZ21hIHN0cm9uZ190eXBlcyxzYXZlX3R5cGVzLHJ0dF9jaGVja3MKKworI2luY2x1ZGUgPGNvbnRhaW5lci5oPgoraW5oZXJpdCAiL3N0ZC9jb250YWluZXIiOworCisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCisKKyNkZWZpbmUgVkVSU0lPTl9TVEQgIjkiCisKK25vc2F2ZSBpbnQgaGF1c2VybGF1Ym5pczsKK25vc2F2ZSBzdHJpbmcgendlaXRpZWVybGF1Ym5pczsKK25vc2F2ZSBzdHJpbmcgKmVybGF1Ym5pczsKKworaW50IGVybGF1YnQoKTsKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkKK3sKKyAgLy9pZiAoIWNsb25lcChUTykpIHJldHVybjsKKyAgOjpjcmVhdGUoKTsKKyAgU2V0UHJvcChQX1NIT1JULCAiRWluIFN0YW5kYXJkX0NvbnRhaW5lciB2b24gU3dpZnQiKTsKKyAgU2V0UHJvcChQX0NOVF9TVEFUVVMsQ05UX1NUQVRVU19DTE9TRUQpOworICBTZXRQcm9wKFBfVFJBTlNQQVJFTlQsIDApOworICBTZXRQcm9wKFBfTE9HX0ZJTEUsInNlbGV2ZW4vc2NocmFlbmtlciIpOyAvLyBTZWxldmVuIDA2LjA0LjIwMDYKKyAgU2V0UHJvcCgiY250X2hhdXNmcmV1bmRlIiwgKHt9KSApOworICBTZXRQcm9wKCJjbnRfZXJsYXVibmlzIiwgKHt9KSApOworICBTZXRQcm9wKCJjbnRfendlaXRpZWVybGF1Ym5pcyIsICIiICk7CisgIFNldFByb3AoImNudF92ZXJzaW9uX3N0ZCIsIFZFUlNJT05fU1REKTsKKworICBoYXVzZXJsYXVibmlzPTA7CisgIHp3ZWl0aWVlcmxhdWJuaXM9IiI7CisgIGVybGF1Ym5pcz0oe30pOworCisgIHNldF9uZXh0X3Jlc2V0KDM2MDApOyAvLyAxIHggcHJvIFN0ZC4gUmVzZXQhCisKKyAgQWRkQ21kKCh7Im9lZmZuZSJ9KSwgIm9lZmZuZW4iKTsKKyAgQWRkQ21kKCh7InNjaGxpZXNzIiwgInNjaGxpZXNzZSJ9KSwgInNjaGxpZXNzZW4iKTsKKyAgQWRkQ21kKCh7InNlcmxhdWJlIn0pLCAiZXJsYXVibmlzIik7CisgIEFkZENtZCgoeyJza29tbWFuZG9zIn0pLCAic2tvbW1hbmRvcyIpOworICBBZGRDbWQoKHsidmVyc2NoaWViIiwgInZlcnNjaGllYmUifSksICJ2ZXJzY2hpZWJlbiIpOworICBBZGRDbWQoKHsiemVydHJ1ZW1tZXIiLCAiemVydHJ1ZW1tZXJlIn0pLCAiemVydHJ1ZW1tZXJuIik7CisgIC8vU2VsZXZlbiAwNy4xMi4yMDA1OgorICBBZGRDbWQoKHsic3ZlcnN0ZWNrZSIsInN2ZXJzdGVjayJ9KSwidmVyc3RlY2tlbiIpOworICBBZGRDbWQoKHsic2hvbGUiLCJzaG9sIn0pLCJ6ZWlnZW4iKTsKK30KKworLy8gWmVzc3RyYSwgMS43LjA3LCBmdWVycyBIb2Vycm9ocgorc3RyaW5nIEdldE93bmVyKCkge3JldHVybiAic3dpZnQiO30KKworc3RhdGljIHN0cmluZyBRdWVyeUhhdXNiZXNpdHplcigpCit7CisgIHJldHVybiBDQVAodG9fc3RyaW5nKEVUTy0+UXVlcnlPd25lcigpKSk7ICAgIC8vIHouQi46IFN3aWZ0Cit9CisKKworCitzdGF0aWMgc3RyaW5nIFF1ZXJ5VFAoKQoreworICByZXR1cm4gQ0FQKGdldGV1aWQoVFApKTsgIC8vIHouQi46IFN3aWZ0Cit9CisKK2ludCBvZWZmbmVuKHN0cmluZyBzdHIpCit7CisgIG5vdGlmeV9mYWlsKCJXYXMgbW9lY2h0ZXN0IER1IG9lZmZuZW4/XG4iKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIGlmKHByZXNlbnQoc3RyKSE9VE8pICAvLyBVZWJlcnBydWVmZSwgb2IgYXVjaCBkaWVzZXMgT2JqZWt0IGdlbWVpbnQgaXN0IQorICAgICAgcmV0dXJuIDA7CisgIGlmKFF1ZXJ5UHJvcChQX0NOVF9TVEFUVVMpPT1DTlRfU1RBVFVTX09QRU4pCisgIHsKKyAgICB3cml0ZShOYW1lKFdFUiwxKSsiIGlzdCBkb2NoIHNjaG9uIGdlb2VmZm5ldCFcbiIpOworICAgIHJldHVybiAxOworICB9CisgIGlmKCAhZXJsYXVidCgpICkKKyAgeworICAgIHdyaXRlKCJFaW4gbWFnaXNjaGVzIEtyYWZ0ZmVsZCB2ZXJoaW5kZXJ0IGRhcyBPZWZmbmVuICIrbmFtZShXRVNTRU4sMSkrIiFcbiIpOworICAgIHJldHVybiAxOworICB9CisgIHdyaXRlKCJEdSBvZWZmbmVzdCAiK25hbWUoV0VOKSsiLlxuIik7CisgIHNheShUUC0+TmFtZShXRVIpKyIgb2VmZm5ldCAiK25hbWUoV0VOKSsiLlxuIiwgKHtUUH0pICk7CisgIFNldFByb3AoUF9DTlRfU1RBVFVTLENOVF9TVEFUVVNfT1BFTik7CisgIFNldFByb3AoUF9UUkFOU1BBUkVOVCwgMSk7CisgIHJldHVybiAxOworfQorCitpbnQgc2NobGllc3NlbihzdHJpbmcgc3RyKQoreworICBub3RpZnlfZmFpbCgiV2FzIG1vZWNodGVzdCBEdSBzY2hsaWVzc2VuP1xuIik7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZihwcmVzZW50KHN0cikhPVRPKSAgIC8vIFVlYmVycHJ1ZWZlLCBvYiBhdWNoIGRpZXNlcyBPYmpla3QgZ2VtZWludCBpc3QhCisgICAgcmV0dXJuIDA7CisgIGlmKFF1ZXJ5UHJvcChQX0NOVF9TVEFUVVMpPT1DTlRfU1RBVFVTX0NMT1NFRCkKKyAgeworICAgIHdyaXRlKE5hbWUoV0VSLDEpKyIgaXN0IGRvY2ggc2Nob24gZ2VzY2hsb3NzZW4hXG4iKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiggIWVybGF1YnQoKSApCisgIHsKKyAgICB3cml0ZSgiRWluIG1hZ2lzY2hlcyBLcmFmdGZlbGQgdmVyaGluZGVydCBkYXMgU2NobGllc3NlbiAiK25hbWUoV0VTU0VOLDEpKyIhXG4iKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICB3cml0ZSgiRHUgc2NobGllc3N0ICIrbmFtZShXRU4pKyIuXG4iKTsKKyAgc2F5KFRQLT5OYW1lKFdFUikrIiBzY2hsaWVzc3QgIituYW1lKFdFTikrIi5cbiIsICh7VFB9KSApOworICBTZXRQcm9wKFBfQ05UX1NUQVRVUyxDTlRfU1RBVFVTX0NMT1NFRCk7CisgIFNldFByb3AoUF9UUkFOU1BBUkVOVCwgMCk7CisgIHJldHVybiAxOworfQorCitzdHJpbmcgY250X3N0YXR1cygpCit7CisgIHJldHVybiBOYW1lKFdFUiwxKSsiIGlzdCAiCisgICAgKyhRdWVyeVByb3AoUF9DTlRfU1RBVFVTKT8iZ2VzY2hsb3NzZW4iOiJnZW9lZmZuZXQiKSsiLlxuIjsKK30KKworaW50IGVybGF1YnQoKQoreworICBpZiggUXVlcnlQcm9wKCJ0ZXN0IikgKSByZXR1cm4gMTsgICAgICAgLy8gWnUgVGVzdHp3ZWNrZW4hCisgIGlmKCBRdWVyeUhhdXNiZXNpdHplcigpPT0iMCIgKSAgICAgICAgICAvLyBTY2hyYW5rIHN0ZWh0IG5pY2h0IGluIGVpbmVtIFNlaGVyaGF1cyEKKyAgeworICAgIHRlbGxfcm9vbShFVE8sIE5hbWUoV0VSLDEpKyIgc29sbHRlIG5pY2h0IGF1c3NlcmhhbGIgZWluZXMgU2VoZXJoYXVzZXMgc3RlaGVuLlxuIgorICAgICAgKyJCaXR0ZSBNYWlsIGFuICIrVkVSQU5UV09SVExJQ0hFUl9NQUdJRVIrIiFcbiIpOworICAgIHJldHVybiAwOworICB9CisgIGlmKCBRdWVyeVRQKCkgPT0gUXVlcnlIYXVzYmVzaXR6ZXIoKSApICAvLyBEZXIgQmVzaXR6ZXIgZGVzIEhhdXNlcyBzZWxic3QKKyAgICByZXR1cm4gMTsKKyAgaWYoaGF1c2VybGF1Ym5pcykKKyAgeworICAgIGlmKCBtZW1iZXIoU0hWRVJXQUxURVItPkhhdXNQcm9wKExPV0VSKFF1ZXJ5SGF1c2Jlc2l0emVyKCkpLCAyKSwKKyAgICAgICAgUXVlcnlUUCgpKSAhPSAtMSApICAgICAgICAgICAgICAgIC8vIEhhdXNmcmV1bmRlCisgICAgICByZXR1cm4gMTsKKyAgfQorICBpZih6d2VpdGllZXJsYXVibmlzIT0iIikgICAgICAgICAgICAgICAgLy8gWndlaXRpZXMKKyAgeworICAgIGlmKCBUUC0+UXVlcnlQcm9wKFBfU0VDT05EKSA9PSB6d2VpdGllZXJsYXVibmlzICkKKyAgICAgIHJldHVybiAxOworICB9CisgIGlmKCBzaXplb2YoZXJsYXVibmlzKSApCisgIHsKKyAgICBpZiggbWVtYmVyKGVybGF1Ym5pcywgUXVlcnlUUCgpKSAhPSAtMSApIC8vIFNvbnN0aWdlIFBlcnNvbmVuIGRpZSBiZXJlY2h0aWd0IHNpbmQKKyAgICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCit2b2lkIGNudF9vcGVuKCkKK3sKKyAgU2V0UHJvcChQX0NOVF9TVEFUVVMsQ05UX1NUQVRVU19PUEVOKTsKKyAgU2V0UHJvcChQX1RSQU5TUEFSRU5ULCAxKTsKK30KKworaW50IGVybGF1Ym5pc19saXN0ZSgpCit7CisgIGludCBpOworICBzdHJpbmcgKnN0cnMsc3RyOworICBpZiggUXVlcnlIYXVzYmVzaXR6ZXIoKSAhPSBRdWVyeVRQKCkgJiYgIVF1ZXJ5UHJvcCgidGVzdCIpICkKKyAgeworICAgIHdyaXRlKCBCUygiTnVyICIrUXVlcnlIYXVzYmVzaXR6ZXIoKSsiIGRhcmYgQmVyZWNodGlndW5nZW4gIgorICAgICAgK25hbWUoV0VTU0VOLDEpKyIgYWJmcmFnZW4hIikpOworICAgIHJldHVybiAxOworICB9CisgIHdyaXRlKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgIGlmKGhhdXNlcmxhdWJuaXMpCisgIHsKKyAgICBzdHJzPVNIVkVSV0FMVEVSLT5IYXVzUHJvcChMT1dFUihRdWVyeUhhdXNiZXNpdHplcigpKSwgMik7CisgICAgd3JpdGUoQlMoIkZvbGdlbmRlIEZyZXVuZGUgRGVpbmVzIEhhdXNlcyBkdWVyZmVuICIrbmFtZShXRU4sMSkKKyAgICAgICsiIG9lZmZuZW4vc2NobGllc3NlbjoiKSk7CisgICAgc3RyPSIiOworICAgIGlmKHNpemVvZihzdHJzKSkKKyAgICB7CisgICAgICBmb3IoaT0wO2k8c2l6ZW9mKHN0cnMpO2krKykKKyAgICAgIHsKKyAgICAgICAgc3RyKz1zdHJzW2ldOworICAgICAgICBpZihpPHNpemVvZihzdHJzKS0xKQorICAgICAgICAgIHN0cis9IiwgIjsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgc3RyPSJEdSBoYXN0IGtlaW5lciBQZXJzb24gWnVncmlmZiBhdWYgRGVpbiBIYXVzIGdld2FlaHJ0Li4uXG4iOworICAgIHdyaXRlKEJTKHN0cikpOworICB9CisgIGVsc2UKKyAgICB3cml0ZShCUygiRGllIEZyZXVuZGUgRGVpbmVzIEhhdXNlcyBkdWVyZmVuICIrbmFtZShXRU4sMSkKKyAgICAgICsiIG5pY2h0IG9lZmZuZW4vc2NobGllc3Nlbi4iKSk7CisgIHdyaXRlKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIGlmKHp3ZWl0aWVlcmxhdWJuaXMhPSIiKQorICB7CisgIGlmKCB6d2VpdGllZXJsYXVibmlzPT1nZXRldWlkKFRQKSApCisgICAgd3JpdGUoQlMoICJBbGxlIERlaW5lIFp3ZWl0aWVzIGR1ZXJmZW4gIituYW1lKFdFTiwxKSsiIG9lZmZuZW4vc2NobGllc3Nlbi4iKSk7CisgIGVsc2UKKyAgICB3cml0ZShCUyggIkFsbGUgWndlaXRpZXMgdm9uICIrQ0FQKHp3ZWl0aWVlcmxhdWJuaXMpKyIgZHVlcmZlbiAiK25hbWUoV0VOLDEpCisgICAgICArIiBvZWZmbmVuL3NjaGxpZXNzZW4uIikpOworICB3cml0ZSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICB9CisgIHN0cnM9UXVlcnlQcm9wKCJjbnRfZXJsYXVibmlzIik7CisgIGlmKHNpemVvZihzdHJzKSkKKyAgeworICAgIHdyaXRlKEJTKCJGb2xnZW5kZSBzb25zdGlnZSBQZXJzb25lbiBkdWVyZmVuICIrbmFtZShXRU4sMSkKKyAgICAgICsiIG9lZmZuZW4vc2NobGllc3NlbjoiKSk7CisgICAgc3RyPSIiOworICAgIGZvcihpPTA7aTxzaXplb2Yoc3Rycyk7aSsrKQorICAgIHsKKyAgICAgIHN0cis9c3Ryc1tpXTsKKyAgICAgIGlmKGk8c2l6ZW9mKHN0cnMpLTEpCisgICAgICAgIHN0cis9IiwgIjsKKyAgICB9CisgICAgd3JpdGUoQlMoc3RyKSk7CisgIH0KKyAgZWxzZQorICAgIHdyaXRlKEJTKCJFcyBnaWJ0IGtlaW5lIHNvbnN0aWdlbiBQZXJzb25lbiwgZGllICIrbmFtZShXRU4sMSkKKyAgICAgICsiIG9lZmZuZW4vc2NobGllc3NlbiBkdWVyZmVuLiIpKTsKKyAgd3JpdGUoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludCBlcmxhdWJuaXMoc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nICpzdHJzLHdlbixuZl9zdHI7CisgIG5mX3N0cj0iU3ludGF4OiBzZXJsYXViZSBbT2JqZWt0LUlkXSBbU3BpZWxlcm5hbWV8XCJoYXVzZnJldW5kZVwifFwiendlaXRpZXNcIl1cbiIKKyAgICAgICAgKyJCc3AuOiAgIHNlcmxhdWJlICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiIGhhdXNmcmV1bmRlXG4iCisgICAgICAgICsiICAgICAgICBzZXJsYXViZSAiK1F1ZXJ5UHJvcChQX0lEUylbMV0rIiB6d2VpdGllc1xuIgorICAgICAgICArIiAgICAgICAgc2VybGF1YmUgIitRdWVyeVByb3AoUF9JRFMpWzFdKyIgZ2VvcmRpXG4iCisgICAgICAgICsiICAgICAgICBzZXJsYXViZSAiK1F1ZXJ5UHJvcChQX0lEUylbMV0rIiAgICAgIChMaXN0ZXQgU3BpZWxlciBtaXQgRXJsYXVibmlzKVxuIjsKKyAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogT2huZSBQYXJhbWV0ZXIga2xhcHB0IGRhcyBuaWNodC5cbiIrbmZfc3RyKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIGlmKHByZXNlbnQoc3RyKT09VE8pICAgICAvLyBGYWxscyBQYXI9PU9iai4gdW5kIGtlaW4gMi4vMy4gUGFyLgorICB7CisgICAgZXJsYXVibmlzX2xpc3RlKCk7ICAgICAgICAgICAvLyAgIExpc3RlIGRlciBFcmxhdWJ0ZW4gYXVzZ2ViZW4hCisgICAgcmV0dXJuIDE7CisgIH0KKyAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogRHUgbXVzc3QgZWluZSBndWVsdGlnZSBPYmpla3QtSWQgYW5nZWJlbiFcbiIrbmZfc3RyKTsKKyAgc3Rycz1vbGRfZXhwbG9kZShzdHIsICIgIik7CisgIGlmKCBzaXplb2Yoc3RycykgPCAyICkgICAgICAgICAgIC8vIEZhbGxzIG51ciAxIFBhci4KKyAgICByZXR1cm4gMDsgICAgICAgICAgICAgLy8gQW56YWhsIGVyZm9yZGVybGljaGVyIFBhcmFtZXRlciB1bnRlcnNjaHJpdHRlbiEKKyAgZWxzZSBpZiggc2l6ZW9mKHN0cnMpID09IDIgKQorICB7CisgICAgc3RyPXN0cnNbMF07CisgICAgd2VuPXN0cnNbMV07CisgICAgaWYoIElTVF9aQUhMKHdlbikgKQorICAgICAgaWYocHJlc2VudChzdHIrIiAiK3dlbik9PVRPKSAgIC8vIEZhbGxzIDIgUGFyLiB1bmQgZGllcyBkYXMgT2JqLiBpc3Qgb2huZSAzLiBQYXIuCisgICAgICB7CisgICAgICAgIGVybGF1Ym5pc19saXN0ZSgpOyAgICAgICAgICAgLy8gICBMaXN0ZSBkZXIgRXJsYXVidGVuIGF1c2dlYmVuIQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZSBpZiggc2l6ZW9mKHN0cnMpID09IDMgKQorICB7CisgICAgc3RyPXN0cnNbMF0rIiAiK3N0cnNbMV07CisgICAgd2VuPXN0cnNbMl07CisgIH0KKyAgZWxzZSAgICAgICAgLy8gQW56YWhsIGVyZm9yZGVybGljaGVyIFBhcmFtZXRlciB1ZWJlcnNjaHJpdHRlbiEKKyAgICByZXR1cm4gMDsKKyAgaWYocHJlc2VudChzdHIpIT1UTykgICAvLyBVZWJlcnBydWVmZSwgb2IgYXVjaCBkaWVzZXMgT2JqZWt0IGdlbWVpbnQgaXN0IQorICAgIHJldHVybiAwOworICBpZiggIWVybGF1YnQoKSAmJiAhUXVlcnlQcm9wKCJ0ZXN0IikgKQorICB7CisgICAgd3JpdGUoIEJTKCJOdXIgIitRdWVyeUhhdXNiZXNpdHplcigpKyIgZGFyZiBCZXJlY2h0aWd1bmdlbiAiCisgICAgICArbmFtZShXRVNTRU4sMSkrIiBhZW5kZXJuISIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZih3ZW49PSJoYXVzZnJldW5kZSIpCisgIHsKKyAgICBpZihoYXVzZXJsYXVibmlzKQorICAgIHsKKyAgICAgIGhhdXNlcmxhdWJuaXM9MDsKKyAgICAgIFNldFByb3AoImNudF9oYXVzZnJldW5kZSIsICh7fSkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhhdXNlcmxhdWJuaXM9MTsKKyAgICAgIFNldFByb3AoImNudF9oYXVzZnJldW5kZSIsIFNIVkVSV0FMVEVSLT5IYXVzUHJvcChMT1dFUihRdWVyeUhhdXNiZXNpdHplcigpKSwgMikgKTsKKyAgICB9CisgICAgd3JpdGUoIEJTKCJEaWUgRnJldW5kZSBEZWluZXMgU2VoZXJoYXVzZXMgZHVlcmZlbiAiK25hbWUoV0VOLDEpKyIgamV0enQgIgorICAgICAgKyghaGF1c2VybGF1Ym5pcz8ibmljaHQgbWVociAiOiIiKSsib2VmZm5lbi9zY2hsaWVzc2VuLiIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZih3ZW49PSJ6d2VpdGllcyIpCisgIHsKKyAgICBpZih6d2VpdGllZXJsYXVibmlzIT0iIikgICAgICAgICAgICAgICAgICAgICAgICAvLyBad2VpdGllcyBlcmxhdWJ0PworICAgICAgendlaXRpZWVybGF1Ym5pcz0iIjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGFubiB2ZXJiaWV0ZW4hCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5zb25zdGVuOgorICAgIHsKKyAgICAgIGlmKCBUUC0+UXVlcnlQcm9wKFBfU0VDT05EKSApICAgICAgICAgICAgICAgICAvLyBTZWxic3QgZWluIFp3ZWl0aWU/CisgICAgICAgIHp3ZWl0aWVlcmxhdWJuaXM9TE9XRVIoVFAtPlF1ZXJ5UHJvcChQX1NFQ09ORCkpOyAvLyBEaWUgWndlaXRpZXMgdm9tIEVyc3RpZSBlcmxhdWJlbiEKKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb25zdDoKKyAgICAgICAgendlaXRpZWVybGF1Ym5pcz1nZXRldWlkKFRQKTsgICAgICAgICAgICAgICAvLyAgIEVpZ2VuZSBFcnN0aWVzIGVybGF1YmVuIQorICAgIH0KKyAgICBTZXRQcm9wKCJjbnRfendlaXRpZWVybGF1Ym5pcyIsIHp3ZWl0aWVlcmxhdWJuaXMgKTsKKyAgICBpZih6d2VpdGllZXJsYXVibmlzIT0iIikKKyAgICAgIHdyaXRlKCBCUyhDQVAoendlaXRpZWVybGF1Ym5pcykrIidzIFp3ZWl0aWVzIGR1ZXJmZW4gIituYW1lKFdFTiwxKSsiIGpldHp0ICIKKyAgICAgICAgKyh6d2VpdGllZXJsYXVibmlzPT0iIj8ibmljaHQgbWVociAiOiIiKSsib2VmZm5lbi9zY2hsaWVzc2VuLiIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICB3ZW49Q0FQKHdlbik7CisgIGlmKCBmaWxlX3NpemUoIi8vc2F2ZS8vIitMT1dFUih3ZW5bMC4uMF0pKyIvLyIrTE9XRVIod2VuKSsiLm8iKSAhPSAtMSApIC8vIFNwaWVsZXIgZ2lidCBlcyBhdWNoIQorICB7CisgICAgaWYoIG1lbWJlcihlcmxhdWJuaXMsIHdlbikgIT0gLTEgKSAgLy8gU3BpZWxlciBoYXQgRXJsYXVibmlzIC0+IHZlcmJpZXRlbiEKKyAgICB7CisgICAgICBlcmxhdWJuaXMtPSh7d2VufSk7CisgICAgICB3cml0ZSggQlMoIHdlbisiIGRhcmYgIituYW1lKFdFTiwxKSsiIGpldHp0IG5pY2h0IG1laHIgb2VmZm5lbi9zY2hsaWVzc2VuLiIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGVybGF1Ym5pcys9KHt3ZW59KTsKKyAgICAgIHdyaXRlKCBCUyggd2VuKyIgZGFyZiAiK25hbWUoV0VOLDEpKyIgamV0enQgb2VmZm5lbi9zY2hsaWVzc2VuLiIpKTsKKyAgICB9CisgICAgU2V0UHJvcCgiY250X2VybGF1Ym5pcyIsIGVybGF1Ym5pcyk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZWxzZQorICAgIHdyaXRlKCJFcyBnaWJ0IGtlaW5lbiBTcGllbGVyIG5hbWVucyAiK3dlbisiIVxuIik7CisgIHJldHVybiAxOworfQorCit2YXJhcmdzIGludCBza29tbWFuZG9zKHN0cmluZyBzdHIpCit7CisgIG5vdGlmeV9mYWlsKCAiRmVobGVyOiBEaWVzZXIgQmVmZWhsIGJlbm9ldGlndCBlaW5lIGd1ZWx0aWdlIE9iamVrdC1JZCBhbHMgUGFyYW1ldGVyLlxuIgorICAgICsiQmVpc3BpZWw6IHNrb21tYW5kb3MgIitRdWVyeVByb3AoUF9JRFMpWzFdKyJcbiIpOworICBpZighc3RyKSByZXR1cm4gMDsKKyAgaWYocHJlc2VudChzdHIpIT1UTyApIC8vIEJpbiBpY2ggZ2VtZWludD8KKyAgICByZXR1cm4gMDsKKyAgd3JpdGUoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgd3JpdGUoIkFrdHVlbGxlIFZlcnNpb246ICIrUXVlcnlQcm9wKCJjbnRfdmVyc2lvbl9zdGQiKStRdWVyeVByb3AoImNudF92ZXJzaW9uX29iaiIpKyJcbiIpOworICB3cml0ZSggQlMoTmFtZShXRVIsMSkrIiBrYW5uIG51ciBpbiBkaWVzZW0gU2VoZXJoYXVzIHZlcndlbmRldCB3ZXJkZW4sICIKKyAgICArImRhICIrUXVlcnlQcm9ub3VuKFdFUikrIiBzcGV6aWVsbCBkYWZ1ZXIgZ2VrYXVmdCB3dXJkZS4gIitDQVAoUXVlcnlQcm9ub3VuKFdFUikpCisgICAgKyIgdmVyZnVlZ3QgdWViZXIgZm9sZ2VuZGUgS29tbWFuZG9zOiIpCisgICAgKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICsib2VmZm5lIFtPYmpla3QtSWRdXG4iCisgICAgKyIgIG9lZmZuZXQgIituYW1lKFdFTiwxKSsiXG5cbiIKKyAgICArInNjaGxpZXNzZSBbT2JqZWt0LUlkXVxuIgorICAgICsiICBzY2hsaWVzc3QgIituYW1lKFdFTiwxKSsiXG5cbiIKKyAgICArInNlcmxhdWJlIFtPYmpla3QtSWRdIFtTcGllbGVybmFtZXxcImhhdXNmcmV1bmRlXCJ8XCJ6d2VpdGllc1wiXVxuIgorICAgICsiICBFcmxhdWJ0IFBlcnNvbmVuLCAiK25hbWUoV0VOLDEpKyIgbWl0enViZW51dHplbi5cbiIKKyAgICArIiAgc2VybGF1YmUgKyBPYmpla3QtSWQgKG9obmUgU3BpZWxlcm5hbWUvaGF1c2ZyZXVuZGUpXG4iCisgICAgKyIgIGxpc3RldCBhbGxlIFBlcnNvbmVuIG1pdCBadWdyaWZmIGF1ZiAiK25hbWUoV0VOLDEpKyJcblxuIgorICAgICsidmVyc2NoaWViZSBbT2JqZWt0LUlkXSBuYWNoIFtBdXNnYW5nXVxuIgorICAgICsiICBEYW1pdCBrYW5uc3QgRHUgIituYW1lKFdFTiwxKSsiIGlubmVyaGFsYiBEZWluZXMgU2VoZXJoYXVzZXMgdmVyc2NoaWViZW4uXG5cbiIKKyAgLy9TZWxldmVuIDA3LjEyLjIwMDUKKyAgICArInN2ZXJzdGVja2UgW09iamVrdC1JZF1cbiIKKyAgICArIiAgRGFtaXQgbWFjaHN0IER1ICIrbmFtZShXRU4sMSkrIiB1bnNpY2h0YmFyLlxuIgorICAgICsic2hvbGUgW09iamVrdC1JZF0gaGVydm9yXG4iCisgICAgKyIgIERhbWl0IG1hY2hzdCBEdSAiK25hbWUoV0VOLDEpKyIgd2llZGVyIHNpY2h0YmFyLlxuIgorICAvLyBCaXMgaGllcgorICAgICsiemVydHJ1ZW1tZXIgW09iamVrdC1JZF1cbiIKKyAgICArIiAgRGFtaXQgemVyc3RvZXJzdCBEdSAiK25hbWUoV0VOLDEpKyIuXG5cbiIpOworCisKKyAgaWYoIFF1ZXJ5UHJvcCgib2JqX2NtZCIpICkKKyAgICB3cml0ZSggUXVlcnlQcm9wKCJvYmpfY21kIikrIlxuIiApOworCisgIHdyaXRlKCJbT2JqZWt0LUlkXSBtdXNzIGVpbmUgZ3VlbHRpZ2UgSWQgc2VpbiwgaW4gZGllc2VtIEZhbGwgei5CLiAiCisgICAgICArUXVlcnlQcm9wKFBfSURTKVsxXSsiXG4iKTsKKyAgd3JpdGUoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKworCisgIHJldHVybiAxOworfQorCitpbnQgdmVyc2NoaWViZW4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIHdhcywgd29oaW4sIHppZWxyYXVtLG5mX3N0cjsKKyAgbmZfc3RyPSJTeW50YXg6IHZlcnNjaGllYmUgW09iamVrdC1JZF0gbmFjaCBbUmljaHR1bmddXG4iCisgICAgICAgICsiQnNwLjogICB2ZXJzY2hpZWJlICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiIG5hY2ggb3N0ZW5cbiI7CisgIG5vdGlmeV9mYWlsKCJGZWhsZXI6IE9obmUgUGFyYW1ldGVyIGtsYXBwdCBkYXMgbmljaHQuXG4iK25mX3N0cik7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZihzc2NhbmYoc3RyLCIlcyBuYWNoICVzIiwgd2FzLCB3b2hpbikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogRHUgbXVzc3QgZWluZSBndWVsdGlnZSBPYmpla3QtSWQgYW5nZWJlbiFcbiIrbmZfc3RyKTsKKyAgaWYocHJlc2VudCh3YXMpIT1UTykgICAvLyBVZWJlcnBydWVmZSwgb2IgYXVjaCBkaWVzZXMgT2JqZWt0IGdlbWVpbnQgaXN0IQorICAgIHJldHVybiAwOworICBpZiggUXVlcnlIYXVzYmVzaXR6ZXIoKSAhPSBRdWVyeVRQKCkgJiYgIVF1ZXJ5UHJvcCgidGVzdCIpICkKKyAgeworICAgIHdyaXRlKCBCUygiTnVyICIrUXVlcnlIYXVzYmVzaXR6ZXIoKSsiIGRhcmYgIituYW1lKFdFTiwxKSsiIHZlcnNjaGllYmVuISIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiggbWVtYmVyKG1faW5kaWNlcyhFVE8tPlF1ZXJ5UHJvcChQX0VYSVRTKSksIHdvaGluKSAhPSAtMSApIC8vIEF1c2dhbmcgdm9yaGFuZGVuPworICB7CisgICAgemllbHJhdW09RVRPLT5RdWVyeVByb3AoUF9FWElUUylbd29oaW5dOworICAgIGlmKCBzdHJzdHIoemllbHJhdW0sIExPV0VSKFF1ZXJ5SGF1c2Jlc2l0emVyKCkpKyJyYXVtIiwgMCkgIT0gLTEgIHx8CisgICAgICAgIFF1ZXJ5UHJvcCgidGVzdCIpICkgIC8vIEdsZWljaGVzIFNlaGVyaGF1cz8gT2RlciBUZXN0PworICAgIHsKKyAgICAgIFRPLT5tb3ZlKHppZWxyYXVtLCBNX1BVVCk7CisgICAgICB3cml0ZSgiRHUgdmVyc2NoaWVic3QgIituYW1lKFdFTiwxKSsiIG5hY2ggIitDQVAod29oaW4pKyIuXG4iKTsKKyAgICAgIFRQLT5tb3ZlKHppZWxyYXVtLCBNX0dPLCAibmFjaCAiK0NBUCh3b2hpbiksICJzY2hpZWJ0ICIrbmFtZShXRU4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjaGllYnQgIituYW1lKFdFTikrIiBoZXJlaW4iKTsKKyAgICAgIGlmKCBwcmVzZW50KCJJbnRlcmFjdGl2ZSIsIFNDSFJBTktNQVNURVIpICkKKyAgICAgICAgdGVsbF9yb29tKFNDSFJBTktNQVNURVIsIFRQLT5OYW1lKFdFUikrIiB2ZXJzY2hpZWJ0ICIrbmFtZShXRU4pKyIgbmFjaCAiCisgICAgICAgICAgK3RvX3N0cmluZyhFVE8pKyIuXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgd3JpdGUoIEJTKCJEdSBrYW5uc3QgIituYW1lKFdFTiwxKSsiIG5pY2h0IGluIGVpbmVuIFJhdW0gYXVzc2VyaGFsYiAiCisgICAgICAgICsiRGVpbmVzIEhhdXNlcyBzY2hpZWJlbiEiKSk7CisgIH0KKyAgZWxzZQorICAgIHdyaXRlKCBCUygiRXMgZ2lidCBrZWluZW4gQXVzZ2FuZyBuYW1lbnMgXCIiK3dvaGluKyJcIiwgd29oaW4gRHUgIgorICAgICAgK25hbWUoV0VOLDEpKyIgdmVyc2NoaWViZW4ga29lbm50ZXN0LiIsNzgsIkZlaGxlcjogIiwgQlNfSU5ERU5UX09OQ0UpKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludCB6ZXJ0cnVlbW1lcm4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIG5mX3N0cjsKKyAgbmZfc3RyPSJTeW50YXg6IHplcnRydWVtbWVyIFtPYmpla3QtSWRdXG4iCisgICAgICAgICsiQnNwLjogICB6ZXJ0cnVlbW1lciAiK1F1ZXJ5UHJvcChQX0lEUylbMV0rIlxuIjsKKyAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogT2huZSBQYXJhbWV0ZXIga2xhcHB0IGRhcyBuaWNodC5cbiIrbmZfc3RyKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIG5vdGlmeV9mYWlsKCJGZWhsZXI6IER1IG11c3N0IGVpbmUgZ3VlbHRpZ2UgT2JqZWt0LUlkIGFuZ2ViZW4hXG4iK25mX3N0cik7CisgIGlmKHByZXNlbnQoc3RyKSE9VE8pICAgLy8gVWViZXJwcnVlZmUsIG9iIGF1Y2ggZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCEKKyAgICByZXR1cm4gMDsKKyAgaWYoIFF1ZXJ5SGF1c2Jlc2l0emVyKCkgIT0gUXVlcnlUUCgpICYmICFRdWVyeVByb3AoInRlc3QiKSApCisgIHsKKyAgICB3cml0ZSggQlMoIk51ciAiK1F1ZXJ5SGF1c2Jlc2l0emVyKCkrIiBkYXJmICIrbmFtZShXRU4sMSkrIiB6ZXJ0cnVlbW1lcm4hIikpOworICAgIHJldHVybiAxOworICB9CisgIHdyaXRlKCBCUygiRHUgemVydHJ1ZW1tZXJzdCAiK25hbWUoV0VOKSsiIG1pdCB3dWNodGlnZW4gU2NobGFlZ2VuLCBiaXMgIgorICAgICsibmljaHQgbWFsIG1laHIgS3J1ZW1lbCB2b24gIitRdWVyeVByb25vdW4oV0VNKSsiIHVlYnJpZyBzaW5kLiIpKTsKKyAgdGVsbF9yb29tKEVUTywgQlMoIFRQLT5OYW1lKFdFUikrIiB6ZXJ0cnVlbW1lcnQgIituYW1lKFdFTikrIi4iKSwgKHtUUH0pICk7CisgIGNhbGxfb3RoZXIoU0NIUkFOS01BU1RFUiwiPz8/IiwwKTsKKyAgaWYoIHByZXNlbnQoIkludGVyYWN0aXZlIiwgU0NIUkFOS01BU1RFUikgKQorICAgIHRlbGxfcm9vbShTQ0hSQU5LTUFTVEVSLCBUUC0+TmFtZShXRVIpKyIgemVydHJ1ZW1tZXJ0ICIrbmFtZShXRU4pKyIuXG4iKTsKKyAgU0NIUkFOS01BU1RFUi0+UmVtb3ZlQ250KFRPLCBnZXRldWlkKFRQKSApOworICByZW1vdmUoMSk7CisgIGlmKFRPKSBkZXN0cnVjdChUTyk7CisgIHJldHVybiAxOworfQorCitpbnQgcHJvcHMydmFycygpICAvLyBGdWVyIGRpZSBVcGRhdGUtRnVua3Rpb24gZGVzIFNjaHJhbmttYXN0ZXJzCit7CisgIHp3ZWl0aWVlcmxhdWJuaXM9UXVlcnlQcm9wKCJjbnRfendlaXRpZWVybGF1Ym5pcyIpfHwiIjsKKyAgZXJsYXVibmlzPVF1ZXJ5UHJvcCgiY250X2VybGF1Ym5pcyIpfHwoe30pOworICBpZiggc2l6ZW9mKFF1ZXJ5UHJvcCgiY250X2hhdXNmcmV1bmRlIikpICkKKyAgICBoYXVzZXJsYXVibmlzPTE7CisgIGVsc2UKKyAgICBoYXVzZXJsYXVibmlzPTA7CisgIGlmKCBRdWVyeVByb3AoUF9DTlRfU1RBVFVTKSA9PSBDTlRfU1RBVFVTX09QRU4pCisgICAgU2V0UHJvcChQX1RSQU5TUEFSRU5ULCAxKTsKKyAgZWxzZQorICAgIFNldFByb3AoUF9UUkFOU1BBUkVOVCwgMCk7CisgIHJldHVybiAxOworfQorCit2b2lkIHJlc2V0KCkKK3sKKyAgc2V0X25leHRfcmVzZXQoMzYwMCk7IC8vIDEgeCBwcm8gU3RkLiBSZXNldCEKKyAgOjpyZXNldCgpOworfQorCitwdWJsaWMgdmFyYXJncyBpbnQgcmVtb3ZlKGludCBzaWxlbnQpCit7CisgIC8vIEJlaW0gU2NocmFua21hc3RlciBhYm1lbGRlbiwgZGFubiB6ZXJzdG9lcmVuLgorICBzdHJpbmcgdWlkPSIiOworICBpZiAob2JqZWN0cChlbnZpcm9ubWVudCgpKSkKKyAgeworICAgIHVpZD1lbnZpcm9ubWVudCgpLT5RdWVyeU93bmVyKCk7ICAgICAgICAgICAgICAgIAorICB9CisgIFNDSFJBTktNQVNURVItPlJlbW92ZUNudChUTywgdWlkICk7CisgIHJldHVybiA6OnJlbW92ZShzaWxlbnQpOworfQorCitwdWJsaWMgaW50IFVwZGF0ZU1lKCkKK3sKKyAgaWYgKCFvYmplY3RwKGVudmlyb25tZW50KCkpKQorICAgIHJldHVybiAwOworICBvYmplY3QgY250X25ldT1jbG9uZV9vYmplY3QobG9hZF9uYW1lKE1FKSk7ICAvLyBOZXVlbiBTY2hyYW5rIGNsb25lbgorICBjbnRfbmV1LT5tb3ZlKCBlbnZpcm9ubWVudCgpLCBNX05PQ0hFQ0sgKTsgIC8vIEluIHNlbGJlbiBSYXVtIHdpZSBhbHRlbiBzY2hpZWJlbi4uLgorICBjbnRfbmV1LT5TZXRQcm9wKCJjbnRfc3RhdHVzIiwgUXVlcnlQcm9wKCJjbnRfc3RhdHVzIikgKTsKKyAgY250X25ldS0+U2V0UHJvcCgiY250X2hhdXNmcmV1bmRlIiwgUXVlcnlQcm9wKCJjbnRfaGF1c2ZyZXVuZGUiKSApOworICBjbnRfbmV1LT5TZXRQcm9wKCJjbnRfZXJsYXVibmlzIiwgUXVlcnlQcm9wKCJjbnRfZXJsYXVibmlzIikgKTsKKyAgY250X25ldS0+U2V0UHJvcCgiY250X3p3ZWl0aWVlcmxhdWJuaXMiLCBRdWVyeVByb3AoImNudF96d2VpdGllZXJsYXVibmlzIikgKTsKKyAgY250X25ldS0+cHJvcHMydmFycygpOyAgLy8gU2NocmFuayBsaWVzdCBnZXNldHp0ZSBQcm9wcyBhdXMgaW4gZWlnZW5lIFZhcnMKKyAgLy8gSW52ZW50YXIgYmV3ZWdlbgorICBmb3JlYWNoKG9iamVjdCBpbnY6IGFsbF9pbnZlbnRvcnkodGhpc19vYmplY3QoKSkpCisgIHsKKyAgICBpZiggaW52LT5Jc1VuaXQoKSApICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbml0cworICAgICAgaW52LT5tb3ZlKGNudF9uZXUsIE1fTk9DSEVDS3xNX01PVkVfQUxMKTsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxlIE9iamVrdGUKKyAgICAgIGludi0+bW92ZShjbnRfbmV1LCBNX05PQ0hFQ0spOworICB9CisgIHJlbW92ZSgxKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8vIEVpbmdlYmF1dCAwNy4xMi4yMDA1IHZvbiBTZWxldmVuCisvLyBEaWUgS3VyemJlc2NocmVpYnVuZyBpbnZpcyBtYWNoZW46CitzdGF0aWMgaW50IHZlcnN0ZWNrZW4gKHN0cmluZyBzdHIpCit7CisgICBzdHJpbmcgbmZfc3RyOworICAgbmZfc3RyPSJTeW50YXg6IHN2ZXJzdGVja2UgW09iamVrdC1JZF1cbiIKKyAgICAgICAgICsiQnNwLjogICBzdmVyc3RlY2tlICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXG4iOworICAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogT2huZSBQYXJhbWV0ZXIga2xhcHB0IGRhcyBuaWNodC5cbiIrbmZfc3RyKTsKKyAgIGlmKCFzdHIgfHwgc2l6ZW9mKHN0cikgPT0gMCB8fCAhc3RyaW5ncChzdHIpKSByZXR1cm4gMDsKKworICAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogRHUgbXVzc3QgZWluZSBndWVsdGlnZSBPYmpla3QtSWQgYW5nZWJlbiFcbiIrbmZfc3RyKTsKKyAgIGlmKHByZXNlbnQoc3RyKSE9VE8pICAgLy8gVWViZXJwcnVlZmUsIG9iIGF1Y2ggZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCEKKyAgICByZXR1cm4gMDsKKworICBpZiggUXVlcnlIYXVzYmVzaXR6ZXIoKSAhPSBRdWVyeVRQKCkgJiYgIVF1ZXJ5UHJvcCgidGVzdCIpICkKKyAgeworICAgIHdyaXRlKCBCUygiTnVyICIrUXVlcnlIYXVzYmVzaXR6ZXIoKSsiIGRhcmYgIituYW1lKFdFTiwxKSsiIHZlcnN0ZWNrZW4hIikpOworICAgIHJldHVybiAxOworICB9CisgIG5vdGlmeV9mYWlsKCJEdSBoYXN0ICIrbmFtZShXRU4sMSkrIiBkb2NoIHNjaG9uIHZlcnN0ZWNrdCFcbiIpOworICBpZihRdWVyeVByb3AoInZlcnN0ZWNrdCIpID09IDEpIHJldHVybiAwOworICB3cml0ZSgiRHUgdmVyc3RlY2tzdCAiK25hbWUoV0VOLDEpKyIuXG4iKTsKKyAgU2V0UHJvcCgidmVyc3RlY2t0IiwgMSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHplaWdlbiAoc3RyaW5nIHN0cikKK3sKKyAgIHN0cmluZyBuZl9zdHI7CisgICBuZl9zdHI9IlN5bnRheDogc2hvbGUgW09iamVrdC1JZF0gaGVydm9yXG4iCisgICAgICAgICArIkJzcC46ICAgc2hvbGUgIitRdWVyeVByb3AoUF9JRFMpWzFdKyIgaGVydm9yXG4iOworICAgbm90aWZ5X2ZhaWwoIkZlaGxlcjogT2huZSBQYXJhbWV0ZXIga2xhcHB0IGRhcyBuaWNodC5cbiIrbmZfc3RyKTsKKyAgIGlmKCFzdHIgfHwgc2l6ZW9mKHN0cikgPT0gMCB8fCAhc3RyaW5ncChzdHIpKSByZXR1cm4gMDsKKyAgIGlmKHN0cnN0cihzdHIsImhlcnZvciIpICE9IC0xKQorICAgIHNzY2FuZihzdHIsIiVzIGhlcnZvciIsc3RyKTsKKyAgIG5vdGlmeV9mYWlsKCJGZWhsZXI6IER1IG11c3N0IGVpbmUgZ3VlbHRpZ2UgT2JqZWt0LUlkIGFuZ2ViZW4hXG4iK25mX3N0cik7CisgICBpZihwcmVzZW50KHN0cikhPVRPKSAgIC8vIFVlYmVycHJ1ZWZlLCBvYiBhdWNoIGRpZXNlcyBPYmpla3QgZ2VtZWludCBpc3QhCisgICAgcmV0dXJuIDA7CisKKyAgIGlmKCBRdWVyeUhhdXNiZXNpdHplcigpICE9IFF1ZXJ5VFAoKSAmJiAhUXVlcnlQcm9wKCJ0ZXN0IikgKQorICAgeworICAgICB3cml0ZSggQlMoIk51ciAiK1F1ZXJ5SGF1c2Jlc2l0emVyKCkrIiBkYXJmICIrbmFtZShXRU4sMSkrCisgICAgICAgICAgICAgICAiIHdpZWRlciBoZXJ2b3Job2xlbiEiKSk7CisgICAgIHJldHVybiAxOworICAgfQorICAgbm90aWZ5X2ZhaWwoTmFtZShXRVIsMSkrIiBpc3QgZG9jaCBnYXIgbmljaHQgdmVyc3RlY2t0IVxuIik7CisgICBpZihRdWVyeVByb3AoInZlcnN0ZWNrdCIpID09IDApIHJldHVybiAwOworICAgd3JpdGUoIkR1IGhvbHN0ICIrbmFtZShXRU4sMSkrIiBhdXMgZGVtIFZlcnN0ZWNrLlxuIik7CisgICBTZXRQcm9wKCJ2ZXJzdGVja3QiLCAwKTsKKyAgIHJldHVybiAxOworfQorCisKK21peGVkIHNob3J0KCkKK3sKKyAgc3RyaW5nIHNoOworCisgIC8vIFVuc2ljaHRiYXI/IERhbm4gZ2lidHMgbmljaHRzIHp1IHNlaGVuIC4uLgorICBpZiAoUXVlcnlQcm9wKFBfSU5WSVMpfHwhKHNoPVF1ZXJ5UHJvcChQX1NIT1JUKSkpCisgIHJldHVybiAwOworCisgIGlmKFF1ZXJ5UHJvcChQX0NOVF9TVEFUVVMpPT1DTlRfU1RBVFVTX09QRU4pCisgIHtzaCArPSAiIChnZW9lZmZuZXQpIjt9CisKKyAgaWYoUXVlcnlQcm9wKCJ2ZXJzdGVja3QiKSA9PSAxKSB7c2ggPSAiIjt9CisgIGVsc2Ugc2ggKz0gIi4iOworCisgIHJldHVybiBwcm9jZXNzX3N0cmluZyhzaCkrIlxuIjsKK30KKworLy8gaGllciBuaWNodCBnZW51dHp0LCB6dW0gVWViZXJzY2hyZWliZW4gZ2VkYWNodC4KK3Byb3RlY3RlZCB2b2lkIFNldEJlc2l0emVyKHN0cmluZyB1aWQsIHN0cmluZyB1dWlkKSB7IH0KKworLy8gbmFjaCBkZW0gbW92ZSBzY2hhdWVuLCBvYiBtYW4gaW4gZWluZW0gU2VoZXJoYXVzIGlzdC4gV2VubiBqYSwgd2lyZCBkaWUKKy8vIEZ1bmt0aW9uIFNldEJlc2l0emVyKCkgZ2VydWZlbiB1bmQgaWhyIFVJRCB1bmQgVVVJRCBkZXMgRWlnZW50dWVtZXJzCisvLyB1ZWJlcmdlYmVuLiBTb2xsdGVuIFVJRCB1bmQvb2RlciBVVUlEIG5pY2h0IGJlc3RpbW1iYXIgc2Vpbiwgd2lyZCBkaWUKKy8vIEZ1bmt0aW9uIG5pY2h0IGdlcnVmZW4uCitwcm90ZWN0ZWQgdm9pZCBOb3RpZnlNb3ZlKG9iamVjdCBkZXN0LCBvYmplY3Qgb2xkZW52LCBpbnQgbWV0aG9kKQoreworCisgIDo6Tm90aWZ5TW92ZShkZXN0LCBvbGRlbnYsIG1ldGhvZCk7CisKKyAgaWYgKGRlc3QKKyAgICAgICYmIHN0cnN0cihvYmplY3RfbmFtZShkZXN0KSwiL2Qvc2VoZXIvaGFldXNlci8iKSA9PSAwKQorICB7CisgICAgLy8gKHZlcm11dGxpY2gpIGluIGVpbmVtIFNlaGVyaGF1cworICAgIHN0cmluZyB1aWQgPSBkZXN0LT5RdWVyeU93bmVyKCk7CisgICAgLy8gZXJzdG1hbCBiZWltIFNjaHJhbmttYXN0ZXIgYW5tZWxkZW4uCisgICAgU0NIUkFOS01BU1RFUi0+UmVnaXN0ZXJDbnQoVE8sIFF1ZXJ5UHJvcCgiY250X3ZlcnNpb25fc3RkIikKKyAgICAgICAgKyI6IitRdWVyeVByb3AoImNudF92ZXJzaW9uX29iaiIpLCB1aWQsIGRlc3QpOworICAgIC8vIFVVSUQgcmF1c2ZpbmRlbgorICAgIG1peGVkIHJldCA9IChtaXhlZCltYXN0ZXIoKS0+Z2V0X3VzZXJpbmZvKHVpZCk7CisgICAgaWYgKCBwb2ludGVycChyZXQpICYmIHNpemVvZihyZXQpID49IDUgKQorICAgIHsKKyAgICAgIC8vIFVzZXJuYW1lICsgIl8iICsgQ3JlYXRpb25EYXRlCisgICAgICBTZXRCZXNpdHplcih1aWQsIHJldFswXSArICJfIiArIHJldFs1XSk7CisgICAgfQorICAgIC8vIGVsc2U6IFVzZXIgdW5iZWthbm50PyAtPiBqZWRlbmZhbGxzIGtlaW5lIGluaXRpYWxpc2llcnVuZyBtb2VnbGljaC4KKyAgfQorfQorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3RyZXNvci5jIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC90cmVzb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2FkNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC90cmVzb3IuYwpAQCAtMCwwICsxLDc4IEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBUcmVzb3IKKy8vIExldHp0ZSBBZW5kZXJ1bmc6ICAgIDE3LjAzLjIwMDEKKy8vIE1hZ2llcjogICAgICAgICAgICAgIFN3aWZ0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjcHJhZ21hIHN0cm9uZ190eXBlcyxydHRfY2hlY2tzCisKKyNpbmNsdWRlICJzY2hyYW5rbGFkZW4uaCIKK2luaGVyaXQgTEFERU4oInN3aWZ0X3N0ZF9jb250YWluZXIiKTsKKworI2RlZmluZSBWRVJTSU9OX09CSiAiMyIKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkKK3sKKyAgaWYgKCFjbG9uZXAoVE8pKSByZXR1cm47CisgIHN3aWZ0X3N0ZF9jb250YWluZXI6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfU0hPUlQsICJFaW4gVHJlc29yIik7CisgIFNldFByb3AoUF9MT05HLCBCUygKKyAgICAgIkVpbiBzZWhyIHN0YWJpbGVyIHVuZCBmZXVlcnNpY2hlcmVyIFRyZXNvciwgYW4gZGVtIHNpY2ggc2ljaGVyIHNjaG9uIHNvICIKKyAgICArIm1hbmNoZXIgRWluYnJlY2hlciBlaW5lIEFiZnVociBnZWhvbHQgaGF0LiBEYXMgbWFnaXNjaGUgRmVsZCwgZGFzIGRlbiAiCisgICAgKyJUcmVzb3IgdW1naWJ0LCB2ZXJoaW5kZXJ0IHdvaGwgYXVjaCBBdHRhY2tlbiBtYWdpc2NoZXIgQXJ0LiBTbyB3dWNodGlnICIKKyAgICArInVuZCB3aWNodGlnLCB3aWUgZGllc2VyIEtsb3R6IGF1c3NpZWh0LCB2ZXJtdXRlc3QgRHUgd29obCB6dSBSZWNodCwgIgorICAgICsiZGFzcyBzaWNoIHVuc2FnYmFyZSBSZWljaHR1ZW1lciBpbiBzZWluZW0gSW5uZXJlbiB2ZXJiZXJnZW4gbXVlc3Nlbi4iKQorICAgICsiQEBjbnRfc3RhdHVzQEAiKTsKKyAgQWRkSWQoKHsidHJlc29yIn0pKTsKKyAgU2V0UHJvcCgiY250X3ZlcnNpb25fb2JqIiwgVkVSU0lPTl9PQkopOworICBTZXRQcm9wKFBfTkFNRSwgIlRyZXNvciIpOworICBTZXRQcm9wKFBfR0VOREVSLCBNQUxFKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwgNTAwMCk7ICAgICAgICAgLy8gR2V3aWNodCA1IEtnCisgIFNldFByb3AoUF9NQVhfV0VJR0hULCAxMDAwMDAwKTsgIC8vIEVzIHBhc3NlbiBmdWVyIDEwMDAga2cgU2FjaGVuIHJlaW4uCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsgIC8vIERhZnVlciBtYWNodCBlciBhdWNoIG5peCBsZWljaHRlciA6KQorICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsIDEwMCk7ICAgICAvLyBNZWhyIHNvbGx0ZSBuaWNodCBzZWluLCBsdC4gVGlhbWFrLgorICBTZXRQcm9wKFBfVkFMVUUsIDApOyAgICAgICAgICAgICAvLyBLZWluIG1hdGVyaWVsbGVyIFdlcnQuIElzdCBlaCBuaWNodCB2ZXJrYXVmYmFyLgorICBTZXRQcm9wKFBfTk9CVVksIDEpOyAgICAgICAgICAgICAvLyBXaXJkIGltIExhZGVuIHplcnN0b2VydCwgZmFsbHMgZXIgdmVya2F1ZnQgd2lyZC4KKyAgU2V0UHJvcChQX05PR0VULCAiRGFzIGdlaHQgbmljaHQuICIrTmFtZShXRVIsMSkrIiBoYWZ0ZXQgd2llIG1hZ2lzY2ggYW0gQm9kZW4uXG4iKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLCAoe01BVF9TVEVFTCwgTUFUX01JU0NfTUFHSUN9KSApOworICBTZXRQcm9wKFBfSU5GTywgIlZlcnN1Y2hzIG1hbCBtaXQ6IFwic2tvbW1hbmRvcyAiK1F1ZXJ5UHJvcChQX0lEUylbMV0rIlwiICFcbiIpOworCisgIEFEKCh7ImZlbGQifSksIEJTKCJFaW4gc3RhcmtlcyBtYWdpc2NoZXMgRmVsZCB1bWdpYnQgIituYW1lKFdFTiwxKSsiLiIpKTsKKyAgQUQoKHsia2xvdHoifSksIEJTKE5hbWUoV0VSLDEpKyIgaXN0IHdhaHJsaWNoIGVpbiBLbG90eiwgYXVzZ2VzcHJvY2hlbiB3dWNodGlnLiIpKTsKK30KKwordmFyYXJncyBpbnQgUHJldmVudEluc2VydChvYmplY3Qgb2IpCit7CisgIC8vIFp1ZXJzdCBtYWw6IERpbmdlLCBkZXJlbiBXZXJ0ID49IDUwMDAgTXVlbnplbiBpc3QsIGR1ZXJmZW4gcmVpbiwgc29sYW5nZQorICAvLyBlcyBrZWluZSBSdWVzdHVuZ2VuIG9kZXIgV2FmZmVuIHNpbmQhCisgIGlmKCBvYi0+UXVlcnlQcm9wKFBfVkFMVUUpID49IDUwMDAgJiYgIW9iLT5RdWVyeVByb3AoUF9BUk1PVVJfVFlQRSkgJiYKKyAgICAgIW9iLT5RdWVyeVByb3AoUF9XRUFQT05fVFlQRSkgKQorICAgICAgICByZXR1cm4gOjpQcmV2ZW50SW5zZXJ0KG9iKTsKKyAgaWYoIG9iLT5pZCgiXG5nZWxkIikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2VsZD8KKyAgICAgIG9iLT5RdWVyeU1hdGVyaWFsR3JvdXAoTUFUR1JPVVBfUFJFQ0lPVVNfTUVUQUwpIHx8ICAgICAgLy8gRWRlbG1ldGFsbD8KKyAgICAgIG9iLT5RdWVyeU1hdGVyaWFsR3JvdXAoTUFUR1JPVVBfSkVXRUwpIHx8ICAgICAgICAgICAgICAgLy8gRWRlbHN0ZWluPworICAgICAgb2ItPlF1ZXJ5TWF0ZXJpYWwoTUFUX0NSWVNUQUwpIHx8ICAgICAgICAgICAgICAgICAgICAgICAvLyBLcmlzdGFsbD8KKyAgICAgIG9iLT5RdWVyeU1hdGVyaWFsKE1BVF9JVk9SWSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWxmZW5iZWluPworICB7CisgICAgaWYoIW9iLT5RdWVyeVByb3AoUF9XRUFQT05fVFlQRSkgKSAgICAvLyBBdWYga2VpbmVuIEZhbGwgV2FmZmVuIQorICAgIHsKKyAgICAgIGlmKCBvYi0+UXVlcnlQcm9wKFBfQVJNT1VSX1RZUEUgKSApIC8vIEZhbGxzIFJ1ZXN0dW5nc3RlaWwuLi4KKyAgICAgIHsKKyAgICAgICAgaWYoIG9iLT5RdWVyeVByb3AoUF9BUk1PVVJfVFlQRSk9PUFUX1JJTkcgfHwKKyAgICAgICAgICAgIG9iLT5RdWVyeVByb3AoUF9BUk1PVVJfVFlQRSk9PUFUX0FNVUxFVCB8fAorICAgICAgICAgICAgb2ItPlF1ZXJ5UHJvcChQX0FSTU9VUl9UWVBFKT09QVRfTUlTQyApCisgICAgICAgICAgcmV0dXJuIDo6UHJldmVudEluc2VydChvYik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB3cml0ZShCUygiTnVyIHdlcnR2b2xsZSBSaW5nZSB1bmQgQW11bGV0dGUga2FubnN0IER1IGluICIrbmFtZShXRU4sMSkKKyAgICAgICAgICAgICsiIHN0ZWNrZW4sIGV2dGwuIG5vY2ggYW5kZXJlIHdlcnR2b2xsZSBTYWNoZW4sIGFiZXIgYXVmIGtlaW5lbiAiCisgICAgICAgICAgICArIkZhbGwgUnVlc3R1bmdlbiBvZGVyIFdhZmZlbiEiKSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiA6OlByZXZlbnRJbnNlcnQob2IpOworICAgIH0KKyAgICBlbHNlCisgICAgICB3cml0ZSgiV2FmZmVuIGthbm5zdCBEdSBuaWNodCBpbiAiK25hbWUoV0VOLDEpKyIgdHVuIVxuIik7CisgIH0KKyAgd3JpdGUoIEJTKCJJbiAiK25hbWUoV0VOLDEpKyIga2FubnN0IER1IG51ciBHZWxkIHVuZCBFZGVsc3RlaW5lIGxlZ2VuLCBldnRsLiBhdWNoICIKKyAgICAgICAgICAgKyJ3ZXJ0dm9sbGUgT2JqZWt0ZSwgei5CLiBhdXMgRWRlbG1ldGFsbGVuLCBLcmlzdGFsbCBvZGVyIEVsZmVuYmVpbiEiKSk7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL21vZWJlbC92ZXJrYWV1ZmVyLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3ZlcmthZXVmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQzYWIyCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC92ZXJrYWV1ZmVyLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5hbWUgZGVzIE9iamVjdHM6ICAgIFZlcmthZXVmZXIgKEF1Z3VzdCB2b20gU0NIUkFFTktFUikKKy8vIExldHp0ZSBBZW5kZXJ1bmc6ICAgIDI0LjA4LjIwMDYKKy8vIE1hZ2llcjogICAgICAgICAgICAgIFNlbGV2ZW4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNwcmFnbWEgc3Ryb25nX3R5cGVzLHJ0dF9jaGVja3MKKworI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxsYW5ndWFnZS5oPgorI2luY2x1ZGUgPG1vdmluZy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgPGJhbmsuaD4KKworI2luY2x1ZGUgInNjaHJhbmtsYWRlbi5oIgoraW5oZXJpdCAiL3N0ZC9ucGMiOworCisvLyBXZW5uIGltIExhZGVuIGJ6dy4gaW0gRW52aXJvbm1lbnQgdm9uIEF1Z3VzdCBkaWUgUHJvcCAidGVzdCIgYXVmIDEgZ2VzZXR6dAorLy8gd2lyZCwga29zdGV0IGRlciBLYXVmIG5pY2h0cy4gSmVkZXIgZGVyIGVpbiBTZWhlcmhhdXMgYmVzaXR6dCwga2FubiBrYXVmZW4uCisKKy8vIEZ1ZXIgUHJvcCBpbSBTcGllbGVyID0gaW5kaXZpZHVlbGxlcmUgQmVncnVlc3N1bmcKKyNkZWZpbmUgTEFTVFZJU0lUICJzY2hyYW5rbGFkZW5fbGFzdHZpc2l0IgorLy8gMTAlIFJhYmF0dCBmdWVyIExldXRlLCBkaWUgaW50ZW5zaXYgdGVzdGV0ZW4sIElkZWVuIGZ1ZXIgZGVuIExhZGVuIGJlaXN0ZXVlcnRlbiwKKy8vIG9kZXIgaGFsZmVuLCBncm9lc3NlcmUgQnVncyB6dSBiZWhlYmVuIQorI2RlZmluZSBSQUJBVFQgKHsiZ2VvcmRpIiwiZm9vYmFyIiwiYmxvb2QiLCJsdXJjaGkiLCAiZWxkYXJvbiJ9KQorCisvLyBrYXVmZS4uLiBhbmRlcmUgaW0gcmF1bSBzb2xsdGVuIHZvciBkZXIgYW50d29ydCBzZWhlbiB3ZXIgYXVndXN0IG5hY2ggd2FzIGZyYWd0CisKK3Byb3RlY3RlZCB2b2lkIGNyZWF0ZSgpCit7CisgIGlmKCFjbG9uZXAoVE8pKSByZXR1cm47CisgIDo6Y3JlYXRlKCk7CisgIFNldFByb3AoUF9MT0dfRklMRSwic2VsZXZlbi9zY2hyYWVua2VyIik7IC8vIFNlbGV2ZW4gMDYuMDQuMjAwNgorICBTUChQX1NIT1JULCAiQXVndXN0Iik7CisgIFNQKFBfTE9ORywgQlMoCisgICAgICJEYXMgaXN0IEF1Z3VzdCwgZWluIGtsZWluZXIgWndlcmcgdW5kIHNlaW5lcyBaZWljaGVucyBTZWhlci1CZXJhdGVyLiAiCisgICAgKyJFciB2ZXJzb3JndCBTZWhlciBtaXQgRWlnZW5oZWltIG1pdCBkZW0gTW9iaWxpYXIsIGRhcyBtYW4gYnJhdWNodCwgIgorICAgICsid2lsbCBtYW4gc2VpbiBIYXVzIHVlYmVyc2ljaHRsaWNoIGhhbHRlbiB1bmQgZXR3YXMgT3JkbnVuZyBpbiBkaWUgIgorICAgICsiU2FtbWx1bmdlbiBicmluZ2VuLCBkaWUgc2ljaCBpbiBzbyBlaW5lbSBTZWhlcmhhdXMgendhbmdzbGFldWZpZyAiCisgICAgKyJhbmhhZXVmZW4uIEltIEdlZ2Vuc2F0eiB6dSBkZW4gbWVpc3RlbiBad2VyZ2VuIHNpZWh0IEF1Z3VzdCBuaWNodCBudXIgIgorICAgICsiYXVzIHdpZSBmcmlzY2ggZ2VkdXNjaHQsIGVyIHN0ZWNrdCBhdWNoIGluIGVpbmVtIGZlaW5lbiBBbnp1Zy4gU28gIgorICAgICsiZWluZW4gZ2VwZmxlZ3RlbiBCYXJ0IHdpZSBkZW4gdm9uIEF1Z3VzdCBoYXN0IER1IHZvcmhlciBub2NoIG5pZSAiCisgICAgKyJnZXNlaGVuLiBVbmQgZGFubiBkdWZ0ZXQgZXIgYXVjaCBub2NoIG5hY2ggaXJnZW5kZWluZW0gZXhvdGlzY2hlbiAiCisgICAgKyJXYWVzc2VyY2hlbi4gV2FlcmUgbmljaHQgZGVyIGdpZXJpZ2UgQmxpY2sgaW4gc2VpbmVuIEF1Z2VuLCBrb2VubnRlc3QgIgorICAgICsiRHUgd2lya2xpY2ggendlaWZlbG4sIGRhc3MgZXMgc2ljaCBoaWVyIHdpcmtsaWNoIHVtIGVpbmVuIFp3ZXJnICIKKyAgICArImhhbmRlbHQuIiw3OCwwLDEpKTsKKyAgU1AoUF9OQU1FLCAiQXVndXN0Iik7CisgIFNQKFBfR0VOREVSLCBNQUxFKTsKKyAgU1AoUF9BUlRJQ0xFLCAwKTsKKyAgU1AoUF9SQUNFLCAiWndlcmciKTsKKyAgLy8gQXJhdGhvcm4sIDIwMTUtT2t0LTEzLCBaZWlsZSB2b3IgUF9YUCBnZXpvZ2VuLCBkYW1pdCBhdWNoIHNpY2hlciBrZWluCisgIC8vIEVLIGFuZ2V6ZWlndCB3aXJkLgorICBjcmVhdGVfZGVmYXVsdF9ucGMoMjApOworICBTUChQX1hQLCAwKTsKKyAgQWRkSWQoKHsiYXVndXN0IiwgImluaGFiZXIiLCAibGFkZW5pbmhhYmVyIiwgImJlc2l0emVyIiwKKyAgICAgICAgICAiZmlybWVuYmVzaXR6ZXIiLCAidmVya2FldWZlciIsICJ6d2VyZyIsICJzZWhlci1iZXJhdGVyIn0pKTsKKworICBTUChQX1NJWkUsIDEzMCk7CisgIFNQKFBfTk9fQVRUQUNLLCBCUygiRGllIGJlcnVoaWdlbmRlIE1lbG9kaWUgc2NoZWludCBuaWNodCBudXIgenVtICIKKyAgICArIlZlcmdudWVnZW4gZGVyIEt1bmRlbiB6dSBlcmtsaW5nZW4uIER1IGJyaW5nc3QgZXMgZWluZmFjaCAiCisgICAgKyJuaWNodCBmZXJ0aWcsIERlaW5lIEhhbmQgZ2VnZW4gQXVndXN0IHp1IGVyaGViZW4hIikpOworCisgIEFEKCh7ImFuenVnIn0pLCBCUyhOYW1lKFdFUikrIiBzdGVja3QgaW4gZWluZW0gZmVpbmVuIHJvdGJyYXVuZW4gQW56dWcsICIKKyAgICArImluIGRlbSB2ZXJtdXRsaWNoIGF1Y2ggZWluIEJldHRsZXIga29lbmlnbGljaCBhdWYgRGljaCB3aXJrZW4gd3VlcmRlLiAiCisgICAgKyJPZmZlbnNpY2h0bGljaCBpc3QgZXIgbmljaHQgZGVyIEFlcm1zdGVuIGVpbmVyLiIpKTsKKyAgQUQoKHsiYmV0dGxlciJ9KSwgQlMoIldpZSBlaW4gQmV0dGxlciB3aXJrdCBBdWd1c3QgbmljaHQgYXVmIERpY2guIikpOworICBBRCgoeyJ3YWVzc2VyY2hlbiJ9KSwgQlMoIkVzIHJpZWNodCBrb2VzdGxpY2guIFNjaG51cHBlciBkb2NoIG1hbCEiKSk7CisgIEFEKCh7ImJhcnQifSksIEJTKCJEZXIgdmVybXV0bGljaCB3ZWlzc2UgQmFydCB3dXJkZSB2b24gS3VlbnN0bGVyaGFuZCAiCisgICAgKyJyb2V0bGljaCBlaW5nZWZhZXJidCB1bmQgcGFzc3QgZmFyYmxpY2ggdm9yenVlZ2xpY2ggenVtIEFuenVnLiIpKTsKKyAgQUQoKHsia3VlbnN0bGVyaGFuZCJ9KSwgQlMoIkJlc3RpbW10IGhhdCBBdWd1c3QgZGFzIG5pY2h0IHNlbGJzdCBnZW1hY2h0LiIpKTsKKyAgQUQoKHsibW9iaWxpYXIifSksIEJTKCJEYXMgdmVya2F1ZnQgZXIgaGllci4iKSk7CisgIEFEKCh7ImF1Z2VuIn0pLCBCUygiT2J3b2hsICIrTmFtZShXRVIpKyIgcGVyZmVrdGUgTWFuaWVyZW4gYW4gZGVuIFRhZyAiCisgICAgKyJsZWd0LCBzZWluZSBBdWdlbiB2ZXJyYXRlbiBpaG4uIERpZSBEb2xsYXJ6ZWljaGVuIGluIHNlaW5lbSBCbGljayAiCisgICAgKyJzaW5kIG5pY2h0IHp1IHVlYmVyc2VoZW4uIikpOworICBBRCgoeyJkb2xsYXJ6ZWljaGVuIn0pLCBCUygiRWluZSBSZWRlbnNhcnQuIEtlaW5lIEFobnVuZyB3YXMgZGFzIHNlaW4gc29sbC4iKSk7CisgIEFEKCh7InJlZGVuc2FydCJ9KSwgQlMoIklyZ2VuZCBlaW4gU3BydWNoLCBkZW4gRHUgaXJnZW5kd28gYXVmZ2VzY2huYXBwdCBoYXN0LiIpKTsKKyAgQUQoKHsic3BydWNoIn0pLCBCUygiSW0gU3BydWVjaGVrbG9wZmVuIGJpc3QgRHUgZ3V0LCBvZGVyPyIpKTsKKyAgQUQoKHsic3BydWVjaGVrbG9wZmVuIn0pLCBCUygiT0ssIGljaCBnZWIgYXVmLiA6KSIpKTsKKyAgQUQoKHsibWFuaWVyZW4ifSksICJVbmQgZGFzIGJlaSBlaW5lbSBad2VyZyEhIVxuIik7CisKKyAgQWRkSW5mbygoeyJsYWRlbiIsICJzY2hyYWVua2VyIn0pLCAiRGVyIFNjaHJhZW5rZXIgaXN0IG1laW4gTGFkZW4sICIKKyAgICArInVuZCBpY2ggZGVua2UgZXMgaXN0IGVpbiBndXRlciBMYWRlbi4gRGFzIEdlc2NoYWVmdCBsYWV1ZnQsIHNlaXQgIgorICAgICsiamVkZXIgT3JkbnVuZyBpbiBzZWluZW0gU2VoZXJoYXVzIGhhYmVuIG1vZWNodGUuIFVuZCBTZWhlcmhhZXVzZXIgIgorICAgICsiZ2lidCBlcyBqYSBtZWhyIGFscyBnZW51ZyEgOikiLCAic2FndDogIik7CisgIEFkZEluZm8oKHsiaGFldXNlciIsICJzZWhlcmhhZXVzZXIifSksICJCZWkgbWlyIGtvZW5uZW4gU2VoZXIgIgorICAgICsiTW9iaWxpYXIgZnVlciBpaHIgU2VoZXJoYXVzIGthdWZlbi4gVW5zZXJlIFF1YWxpdGFldCBpc3Qgd2VpdGhpbiAiCisgICAgKyJiZXJ1ZWhtdC4gQXVzc2VyZGVtIHNpbmQgd2lyIGRpZSBlaW56aWdlbiBhdWYgZGVtIE1hcmt0LiIsICJncmluc3Q6ICIpOworICBBZGRJbmZvKCh7Im1lbG9kaWUifSksICJsYXVzY2h0IHZlcnRyYWV1bXQuXG4iKTsKKyAgQWRkSW5mbygoeyJnZWxkIn0pLCAiU2llIGhhYmVuIGRvY2ggd2VsY2hlcz9cbiIsICJmcmFndCBiZXNvcmd0OiAiKTsKKyAgLy8gU2VsZXZlbiAwMS4wNC4yMDA2OiBmcmFnZSBuYWNoIChzY2hsdWVzc2VsKWJyZXR0IGVpbmdlZnVlZ3QKKyAgQWRkSW5mbygoeyJtb2JpbGlhciIsICJzY2hyYW5rIiwgInNjaHJhZW5rZSIsICJ0cnVoZSIsICJ0cnVoZW4iLCAia29tbW9kZSIsCisgICAgICJrdWVobHNjaHJhbmsiLCAid2FmZmVuc2NocmFuayIsICJ3YWZmZW50cnVoZSIsICJzcGluZCIsICJrbGVpZGVyc2NocmFuayIsImJyZXR0Iiwic2NobHVlc3NlbGJyZXR0IiwKKyAgICAgIm11ZWxsY29udGFpbmVyIiwgInphdWJlcmtpc3RlIiwgInRyZXNvciIsICJob2x6dHJ1aGUiLCJ2aXRyaW5lIiwicHVsdCIsImxlc2VwdWx0In0pLAorICAgICAiTGVzZW4gU2llIGRvY2ggYml0dGUgZGllIFByZWlzbGlzdGUgYW4gZGVyIFdhbmQuIiwgInNhZ3Q6ICIpOworICBBZGRJbmZvKCh7ImxpZWZlcm4iLCAibGllZmVydW5nIn0pLCAiV2lyIGxpZWZlcm4gc29mb3J0LiIsICJzYWd0OiAiKTsKKyAgQWRkSW5mbygoeyJiYXJ0In0pLCAiRXMgaXN0IGVpbiBzY2hvZW5lciBCYXJ0LCBuaWNodD8gOikiLCAiZnJhZ3Q6ICIpOworICBBZGRJbmZvKCh7ImF1Z2VuIn0pLCAiV2FzIGhhYmVuIFNpZSBhbiBkZW5lbiBhdXN6dXNldHplbj8iLCAiZnJhZ3Q6ICIpOworICBBZGRJbmZvKCh7ImR1c2NoZSJ9KSwgIkplZGVuIE1vcmdlbi4gRGFzIGlzdCBsZWlkZXIgUGZsaWNodC4gVW5kIDM2NCBtYWwgIgorICAgICsienUgb2Z0IDooIiwgInNhZ3Q6ICIpOworICBBZGRJbmZvKCh7InBmbGljaHQiLCAicGZsaWNodGVuIn0pLCAiQWxzIExhZGVuaW5oYWJlciBoYXQgbWFuIGRlcmVuICIKKyAgICArInZpZWxlISIsICJzYWd0OiAiKTsKKyAgQWRkSW5mbygoeyJhbnp1ZyJ9KSwgIkVpbiBlY2h0ZXIgQXJtZ2FuaSEiLCAidmVya3VlbmRldCBzdG9sejogIik7CisgIEFkZEluZm8oKHsiYXJtZ2FuaSJ9KSwgIkR1IGtlbm5zdCBBcm1nYW5pIG5pY2h0PyIsICJmcmFndCBuYXNlcnVlbXBmZW5kOiAiKTsKKyAgQWRkSW5mbygoeyJnZW9yZGkifSksICJWb24gaWhtIHN0YW1tdCBkaWUgdXJzcHJ1ZW5nbGljaGUgR2VzY2hhZWZ0c2lkZWUgIgorICAgICsiZnVlciBkZW4gU0NIUkFFTktFUi4gRGFmdWVyIGJla29tbXQgZXIgYmVpIHVucyBhdWNoIFJhYmF0dCEiLCAiZXJ6YWVobHQ6ICIpOworICBBZGRJbmZvKCh7ImF1Z3VzdCJ9KSwgIldvbGxlbiBTaWUgc2ljaCB1ZWJlciBtaWNoIGx1c3RpZyBtYWNoZW4/IiwgImZyYWd0IGRyb2hlbmQ6ICIpOworICBBZGRJbmZvKCh7InJhYmF0dCJ9KSwgIk51ciBTdGFtbWt1bmRlbiwgZGllIHVucyBzY2hvbiBicmF1Y2hiYXJlIElkZWVuICIKKyAgICArImdlbGllZmVydCBoYWJlbiwgb2RlciBkaWUgdW5zIGJlaW0gQXVmYmF1IGRlcyBHZXNjaGFlZnRzIGdlaG9sZmVuIGhhYmVuLCAiCisgICAgKyJnZXdhZWhyZW4gd2lyIFJhYmF0dC4iLCAic2FndDogIik7CisgIEFkZEluZm8oKHsiaWRlZW4ifSksICJFcyBtdWVzc2VuIGJyYXVjaGJhcmUgSWRlZW4gc2Vpbi4iLCAic2FndDogIik7CisgIEFkZEluZm8oKHsic3RhbW1rdW5kZSIsICJzdGFtbWt1bmRlbiJ9KSwgIkVpbmlnZSBrb21tZW4gb2VmdGVyIHZvcmJlaS4iLCAic2FndDogIik7CisgIEFkZEluZm8oKHsiYXVmYmF1In0pLCAiRXMga29tbXQgbWlyIG5vY2ggc28gdm9yLCBhbHMgd2FlcnMgZ2VzdGVybiBnZXdlc2VuLiIsICJzYWd0OiAiKTsKKyAgQWRkSW5mbygoeyJrdW5kZSIsICJrdW5kZW4ifSksICJJY2ggaG9mZmUgbWFsLCBkYXNzIFNJRSBkZXIgS3VuZGUgc2luZCE/IiwgInNhZ3Q6ICIpOworCisgIEFkZENtZCgoeyJrYXVmIiwgImthdWZlIiwgImJlc3RlbGwiLCAiYmVzdGVsbGUifSksICJjb250YWluZXJfa2F1ZmVuIik7CisgIEFkZENtZCgoeyJzY2hudXBwZXIiLCAic2NobnVwcGVyZSJ9KSwgInNjaG51cHBlcm4iKTsKK30KKworaW50IHNjaG51cHBlcm4oKQoreworICB3cml0ZShCUygiRWluIGJldG9lcmVuZGVyIER1ZnQgdW1naWJ0IEF1Z3VzdCwgdW5kIHZlcmRlY2t0IGplZ2xpY2hlbiBHZXJ1Y2gsICIKKyAgICArImRlbiBEdSB2b24gc29uc3RpZ2VuIFp3ZXJnZW4gZ2V3b2hudCBiaXN0LiIpKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJpbmcgYW5yZWRlKCkKK3sKKyAgc3dpdGNoKCBUUC0+UXVlcnlQcm9wKFBfR0VOREVSKSApCisgIHsKKyAgICBjYXNlIE1BTEUgICA6IHJldHVybiAibWVpbiBIZXJyIjsgYnJlYWs7CisgICAgY2FzZSBGRU1BTEUgOiByZXR1cm4gIm1laW5lIERhbWUiOyBicmVhazsKKyAgfQorICByZXR1cm4gIm1laW4gSC4uLiBELi4uIFdhc2F1Y2hpbW1lciI7Cit9CisKK3ZvaWQgYmVncnVlc3N1bmcob2JqZWN0IHBsLCBzdHJpbmcgdHh0KQoreworICBpZiggb2JqZWN0cChwbCkgJiYgcHJlc2VudChwbCkgKQorICAgIHRlbGxfcm9vbShFVE8sICJcbiIrdHh0KTsKK30KKwordm9pZCBpbml0KCkKK3sKKyAgOjppbml0KCk7CisgIGlmICghaW50ZXJhY3RpdmUoVFApIHx8IFRQLT5RdWVyeVByb3AoUF9JTlZJUykpCisgICAgICByZXR1cm4gMDsgLy8gS2VpbmUgTWVsZHVuZ2VuIHdlbm4gaW52aXMgb2RlciBrZWluIFNwaWVsZXIhCisgIGlmKFRQLT5RdWVyeVByb3AoTEFTVFZJU0lUKSA8IHRpbWUoKS0zNjAwKSAgLy8gbGFlbmdlciBhbHMgMSBTdGQuIG5pY2h0IGRhIGdld2VzZW4KKyAgeworICAgIGlmKCBtZW1iZXIoUkFCQVRULCBnZXRldWlkKFRQKSkgIT0gLTEgKQorICAgICAgY2FsbF9vdXQoImJlZ3J1ZXNzdW5nIiwgMCwgVFAsIEJTKCJIZXJ6bGljaHN0IFdpbGxrb21tZW4gaW4gbWVpbmVtICIKKyAgICAgICAgKyJiZXNjaGVpZGVuZW4gTGFkZW4sICIrVFAtPm5hbWUoV0VSKSsiLiBFcyBpc3QgamVkZXNtYWwgZWluZSBGcmV1ZGUsICIKKyAgICAgICAgKyJTaWUgenUgc2VoZW4hIiw3OCwgTmFtZShXRVIpKyIgc2FndDogIikpOworICAgIGVsc2UKKyAgICAgIGNhbGxfb3V0KCJiZWdydWVzc3VuZyIsIDAsIFRQLCBCUygiV2lsbGtvbW1lbiBpbiBtZWluZW0gYmVzY2hlaWRlbmVuIExhZGVuLCAiCisgICAgICAgICthbnJlZGUoKSsiLiIsNzgsIE5hbWUoV0VSKSsiIHNhZ3Q6ICIpKTsKKyAgfQorICBlbHNlICAvLyBzY2hvbm1hbCBpbm5lcmhhbGIgMSBTdGQuIGRhIGdld2VzZW4/CisgIHsKKyAgICBpZiggbWVtYmVyKFJBQkFUVCwgZ2V0ZXVpZChUUCkpICE9IC0xICkKKyAgICAgIGNhbGxfb3V0KCJiZWdydWVzc3VuZyIsIDAsIFRQLCBCUygiSGFsbG8sICIrVFAtPm5hbWUoV0VSKSsiLiAiCisgICAgICAgICsiU2llIGtvbm50ZW4gZXMgamEgbmljaHQgbGFuZ2Ugb2huZSBtaWNoIGF1c2hhbHRlbiwgYWJlciBTdGFtbWt1bmRlbiAiCisgICAgICAgICsic2luZCBtaXIgZGllIGxpZWJzdGVuIEt1bmRlbi4gV29taXQga2FubiBpY2ggSWhuZW4gZGllc21hbCAiCisgICAgICAgICsiZGllbmVuPyIsNzgsIE5hbWUoV0VSKSsiIHNhZ3Q6ICIpKTsKKyAgICBlbHNlCisgICAgICBjYWxsX291dCgiYmVncnVlc3N1bmciLCAwLCBUUCwgQlMoIkd1dGVuIFRhZywgIithbnJlZGUoKSsiLiAiCisgICAgICAgICsiSWNoIGZyZXVlIG1pY2gsIGRhc3MgU2llIG1laW5lbiBMYWRlbiBzbyBiYWxkIHdpZWRlciBiZXN1Y2hlbiBrb21tZW4hICIKKyAgICAgICAgKyJXb21pdCBrYW5uIGljaCBJaG5lbiBkaWVzbWFsIGRpZW5lbj8iLDc4LCBOYW1lKFdFUikrIiBzYWd0OiAiKSk7CisgIH0KKworICBUUC0+U2V0UHJvcChMQVNUVklTSVQsIHRpbWUoKSApOworfQorCitpbnQgY29udGFpbmVyX2thdWZlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgY250X2ZpbGU7CisgIGludCBwcmVpczsKKyAgb2JqZWN0IHppZWxyYXVtLGNudCxvYjsKKyAgdGVsbF9yb29tKEVUTywgVFAtPk5hbWUoV0VSKSsiIHdlbmRldCBzaWNoIHdlZ2VuIGVpbmVzIEthdWZzIGFuICIKKyAgICArTmFtZShXRU4pKyIuXG4iLCAoe1RQfSkgKTsKKyAgaWYoIChxdWVyeV93aXpfbGV2ZWwoVFApID49IFNFRVJfTFZMICYmIHF1ZXJ5X3dpel9sZXZlbChUUCkgPCBMRUFSTkVSX0xWTCkgfHwKKyAgICAgIEVUTy0+UXVlcnlQcm9wKCJ0ZXN0IikgKSAvLyBUUCBpc3QgU2VoZXIsIG9kZXIgVGVzdG1vZHVzLgorICB7CisgICAgY2F0Y2goY2FsbF9vdGhlcigiL2Qvc2VoZXIvaGFldXNlci8iK2dldGV1aWQoVFApKyJyYXVtMCIsICI/Pz8iLCAwKSk7CisgICAgaWYoICF6aWVscmF1bT1maW5kX29iamVjdCgiL2Qvc2VoZXIvaGFldXNlci8iK2dldGV1aWQoVFApKyJyYXVtMCIpICkKKyAgICB7CisgICAgICB0ZWxsX3Jvb20oRVRPLCBCUygiVHV0IG1pciBsZWlkLCAiK2FucmVkZSgpKyIuIFZvcmF1c3NldHp1bmcgZnVlciBlaW5lICIKKyAgICAgICAgKyJMaWVmZXJ1bmcgdW5zZXJlciBBcnRpa2VsIGlzdCBlaW4gYmVnZWhiYXJlcyAiCisgICAgICAgICsiU2VoZXJoYXVzLiIsNzgsIE5hbWUoV0VSKSsiIHNhZ3Q6ICIpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBub3RpZnlfZmFpbCggQlMoIlR1dCBtaXIgbGVpZCwgIithbnJlZGUoKSsiLiBTbyBlaW5lbiBBcnRpa2VsIGZ1ZWhyZW4gd2lyIG5pY2h0LiAiCisgICAgICArIkJpdHRlIGxlc2VuIFNpZSBkaWUgUHJlaXNsaXN0ZSBhbiBkZXIgV2FuZC4gRG9ydCBrb2VubmVuIFNpZSBzaWNoIGdlbmF1ICIKKyAgICAgICsiZGFydWViZXIgaW5mb3JtaWVyZW4sIHVlYmVyIHdlbGNoZSBBcnRpa2VsIHdpciB6dXIgWmVpdCAiCisgICAgICArInZlcmZ1ZWdlbi4iLDc4LCBOYW1lKFdFUikrIiBzYWd0OiAiKSk7CisgICAgaWYoIXN0cikgcmV0dXJuIDA7CisgICAgc3dpdGNoKHN0cikKKyAgICB7CisgICAgICBjYXNlICIxIiA6CisgICAgICBjYXNlICJrb21tb2RlIiA6ICAgICAgIGNudF9maWxlPSJrb21tb2RlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlaXM9Mzc5OTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICIyIiA6CisgICAgICBjYXNlICJrbGVpZGVyc2NocmFuayI6IGNudF9maWxlPSJrbGVpZGVyc2NocmFuayI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWlzPTU4OTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAiMyIgOgorICAgICAgY2FzZSAic3BpbmQiIDogICAgICAgICBjbnRfZmlsZT0ic3BpbmQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVpcz01Mjk5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgIjQiIDoKKyAgICAgIGNhc2UgImt1ZWhsc2NocmFuayIgOiAgY250X2ZpbGU9Imt1ZWhsc2NocmFuayI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWlzPTM0OTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAiNSIgOgorICAgICAgY2FzZSAid2FmZmVuc2NocmFuayIgOiBjbnRfZmlsZT0id2FmZmVuc2NocmFuayI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWlzPTU4OTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAiNiIgOgorICAgICAgY2FzZSAid2FmZmVudHJ1aGUiIDogICBjbnRfZmlsZT0id2FmZmVudHJ1aGUiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVpcz01Mzk5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgIjciIDoKKyAgICAgIGNhc2UgInRyZXNvciIgOiAgICAgICAgY250X2ZpbGU9InRyZXNvciI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWlzPTQ0OTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAiOCIgOgorICAgICAgY2FzZSAiemF1YmVya2lzdGUiIDogICBjbnRfZmlsZT0iemF1YmVya2lzdGUiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVpcz03OTk5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgIjkiIDoKKyAgICAgIGNhc2UgIm11ZWxsY29udGFpbmVyIjogY250X2ZpbGU9Im11ZWxsY29udGFpbmVyIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlaXM9OTk5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIC8vIFNlbGV2ZW4gMDEuMDQuMjAwNgorICAgICAgY2FzZSAiMTAiIDoKKyAgICAgIGNhc2UgInNjaGx1ZXNzZWxicmV0dCI6IGNudF9maWxlPSJzY2hsdWVzc2VsYnJldHQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVpcz00OTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAiMTEiIDoKKyAgICAgIGNhc2UgImR1c2Noa2FiaW5lIjogY250X2ZpbGU9Indhc2NoIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlaXM9MzQ5OTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICIxMiI6CisgICAgICBjYXNlICJob2x6dHJ1aGUiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZmlsZT0iYXV0b2xvYWRlcnRydWhlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlaXM9NzQ5OTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAiMTMiOgorICAgICAgY2FzZSAidml0cmluZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9maWxlPSJ2aXRyaW5lIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlaXM9NDk5OTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAiMTQiOgorICAgICAgY2FzZSAibGVzZXB1bHQiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9maWxlPSJsZXNlcHVsdCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlaXM9NjAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICByZXR1cm4gMDsgYnJlYWs7CisgICAgfQorICAgIGlmKCBtZW1iZXIoUkFCQVRULCBnZXRldWlkKFRQKSkgIT0gLTEgKSAgLy8gMTAlIFJhYmF0dCBmdWVyIGJlc3RpbW10ZSBMZXV0ZSwKKyAgICAgIHByZWlzPXByZWlzLzEwMCo5MDsgICAgICAgICAgICAgICAgICAgIC8vIGRpZSBJZGVlbiBmdWVyIGRlbiBMYWRlbiBiZWlzdGV1ZXJ0ZW4uCisgICAgaWYoICFFVE8tPlF1ZXJ5UHJvcCgidGVzdCIpICkKKyAgICB7CisgICAgICBpZiggIVRQLT5RdWVyeU1vbmV5KCkgKQorICAgICAgeworICAgICAgICB0ZWxsX3Jvb20oRVRPLCBCUygiT2huZSBHZWxkIGJla29tbWVuIFNpZSBiZWkgdW5zIG5pY2h0cywgIithbnJlZGUoKQorICAgICAgICAgICsiLiBXaXIgc2luZCBrZWluIFdvaGxmYWhydHNpbnN0aXR1dCEiLDc4LCBOYW1lKFdFUikrIiBzYWd0OiAiKSk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgaWYoIFRQLT5RdWVyeU1vbmV5KCkgPCBwcmVpcyApCisgICAgICB7CisgICAgICAgIHRlbGxfcm9vbShFVE8sIEJTKCBDQVAoYW5yZWRlKCkpKyIsIFNpZSBoYWJlbiB6dXdlbmlnIEdlbGQgZGFiZWkuICIKKyAgICAgICAgICArIkRlciBQcmVpcyBmdWVyIGRpZXNlcyBPYmpla3QgaXN0ICIrcHJlaXMKKyAgICAgICAgICArIiBNdWVuemVuLiIsNzgsIE5hbWUoV0VSKSsiIHNhZ3Q6ICIpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBUUC0+QWRkTW9uZXkoLXByZWlzKTsgICAgICAvLyBTcGllbGVyIEdlbGQgYWJ6aWVoZW4KKyAgICAgIFpFTlRSQUxCQU5LLT5QYXlJbihwcmVpcyk7IC8vIEdlbGQgYXVmIGRpZSBCYW5rLgorICAgIH0KKyAgICBjbnQ9Y2xvbmVfb2JqZWN0KCBMQURFTihjbnRfZmlsZSkgKTsKKyAgICBjbnQtPm1vdmUoemllbHJhdW0sIE1fUFVUfE1fU0lMRU5UKTsKKyAgICB0ZWxsX3Jvb20oRVRPLCBUUC0+TmFtZShXRVIpKyIga2F1ZnQgIitjbnQtPm5hbWUoV0VOKSsiLlxuIiwgKHtUUH0pICk7CisgICAgdGVsbF9yb29tKEVUTywgQlMoIkVzIGlzdCBlaW4gVmVyZ251ZWdlbiwgbWl0IElobmVuIEdlc2NoYWVmdGUgenUgbWFjaGVuLCAiCisgICAgICArYW5yZWRlKCkrIiEgV2VubiBTaWUgaW4gSWhyIEhhdXMgenVydWVja2tlaHJlbiwgd2VyZGVuIFNpZSBkaWUgV2FyZSBiZXJlaXRzICIKKyAgICAgICsidm9yZmluZGVuLCBzbyBzY2huZWxsIGFyYmVpdGVuIHdpci4iLDc4LCBOYW1lKFdFUikrIiBzYWd0OiAiKSk7CisgICAgdGVsbF9yb29tKHppZWxyYXVtLCBCUygiTWl0IEtuYWxsIHVuZCBTY2h3ZWZlbGR1ZnQgZXJzY2hlaW50IGVpbiBrbGVpbmVzLCAiCisgICAgICArInZlcmh1dHplbHRlcyBNYWVubmNoZW4uIEVzIHRyYWVndCBlaW5lbiBncnVlbmVuIEFuenVnIHVuZCBlaW5lIGdydWVuZSAiCisgICAgICArIkthcHBlLCBhdWYgZGVyIGluIGdlbGJlbSBTY2hyaWZ0enVnIFwiU0NIUkFFTktFUlwiIHN0ZWh0LiBEYXMgTWFlbm5jaGVuICIKKyAgICAgICsic3RlbGx0ICIrY250LT5uYW1lKFdFTikrIiBhYiB1bmQgdmVyc2Nod2luZGV0IGF1ZiBkZW0gZ2xlaWNoZW4gV2VnZSwgd2llICIKKyAgICAgICsiZXMgaGVyZWluZ2Vrb21tZW4gaXN0LiIpKTsKKyAgICBpZiggcHJlc2VudCgiSW50ZXJhY3RpdmUiLCBTQ0hSQU5LTUFTVEVSKSApCisgICAgICB0ZWxsX3Jvb20oU0NIUkFOS01BU1RFUiwgVFAtPk5hbWUoV0VSKSsiIGthdWZ0ICIrbmFtZShXRU4pKyIuXG4iKTsKKyAgICBTQ0hSQU5LTUFTVEVSLT5SZWdpc3RlckNudChjbnQsIGNudC0+UXVlcnlQcm9wKCJjbnRfdmVyc2lvbl9zdGQiKQorICAgICAgK2NudC0+UXVlcnlQcm9wKCJjbnRfdmVyc2lvbl9vYmoiKSwgZ2V0ZXVpZChUUCksCisgICAgICAgIi9kL3NlaGVyL2hhZXVzZXIvIitnZXRldWlkKFRQKSsicmF1bTAiKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlbHNlIGlmKHF1ZXJ5X3dpel9sZXZlbChUUCkgPj0gTEVBUk5FUl9MVkwgKSAgLy8gVFAgaXN0IE1hZ2llci4KKyAgeworICAgIHRlbGxfcm9vbShFVE8sIEJTKCJUdXQgbWlyIGxlaWQsICIrYW5yZWRlKCkrIi4gQW4gTWFnaWVyIGxpZWZlcm4gd2lyIG5pY2h0cy4gIgorICAgICAgKyJEYXMgaXN0IGVpbiBQcmluemlwIGRlcyBIYXVzZXMsIHVuZCBQcmluemlwaWVuIHNpbmQgZGF6dSBkYSwgZGFzcyAiCisgICAgICArInNpZSBlaW5nZWhhbHRlbiB3ZXJkZW4uICIsNzgsIE5hbWUoV0VSKSsiIHNhZ3Q6ICIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlbHNlICAvLyBUUCBpc3QgU3BpZWxlciwga2VpbiBTZWhlciBvZGVyIE1hZ2llci4KKyAgeworICAgIHRlbGxfcm9vbShFVE8sIEJTKCJUdXQgbWlyIGxlaWQsICIrYW5yZWRlKCkrIi4gV2lyIGxpZWZlcm4gbnVyIGFuIFNlaGVyLiAiCisgICAgICArIkFiZXIgZGEgaWNoIFNpZSBhbHMgc3RyZWJzYW1lIHVuZCBlcmZvbGdyZWljaGUgUGVyc29uIGFuc2VoZSwgIgorICAgICAgKyJiaW4gaWNoIHNpY2hlciwgZGFzcyB3aXIgdW5zIGJhbGQgd2llZGVyc2VoZW4hIiw3OCwgTmFtZShXRVIpKyIgc2FndDogIikpOworICAgIHJldHVybiAxOworICB9Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3ZpdHJpbmUuYyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvdml0cmluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNWJiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3ZpdHJpbmUuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorVml0cmluZSBmdWVyIGRpZSBQb2thbGUKK0F1dG9yOiBNaXJpbAorbGV0enRlIEFlbmRlcnVuZzoKKzA1LjA5LjIwMTEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxkZWZpbmVzLmg+CisjaW5jbHVkZSA8d2l6bGV2ZWxzLmg+CisjaW5jbHVkZSAiL2QvZWJlbmUvbWlyaWwvZnJhdGVybml0YXMvZnJhdGVybml0YXMuaCIKKyNpbmNsdWRlICIvZC9lYmVuZS9taXJpbC9mcmF0ZXJuaXRhcy90cm9waHkuaCIKKyNwcmFnbWEgc3Ryb25nX3R5cGVzLHJ0dF9jaGVja3MKKyNpbmNsdWRlICIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC9tb2ViZWwuaCIKKyNpbmNsdWRlICIvZC9zZWhlci9oYWV1c2VyL2hhdXMuaCIKKworaW5oZXJpdCBMQURFTigic3dpZnRfc3RkX2NvbnRhaW5lciIpOworCitzdHJpbmcgYmVzaXR6ZXI7CitpbnQgc3RhdWI7CitzdHJpbmcgKnRyb3BoeW5hbWVuOworCitzdGF0aWMgc3RyaW5nIG15X2xvbmcoKTsKK3N0YXRpYyBzdHJpbmcgc3RhdWJfZGVzY3IoKTsKK3ZvaWQgR2V0VHJvcGh5RGV0YWlscygpOworc3RyaW5nICpHZXRBbGxUcm9waHlOYW1lcygpOwordm9pZCBOZXVlRGV0YWlscygpOworCitwcm90ZWN0ZWQgdm9pZCBjcmVhdGUoKQoreworICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSl7CisgICAgc2V0X25leHRfcmVzZXQoLTEpOworICAgIHJldHVybjsKKyAgfQorICBzZXRfbmV4dF9yZXNldCg4NjQwMCk7CisgIDo6Y3JlYXRlKCk7CisgIGJlc2l0emVyPSIiOworICBzdGF1Yj0wOworICBTZXRQcm9wKFBfTkFNRSwiVml0cmluZSIpOworICBTZXRQcm9wKFBfU0hPUlQsIkVpbmUgVml0cmluZSIpOworICBTZXQoUF9MT05HLCMnbXlfbG9uZyxGX1FVRVJZX01FVEhPRCk7CisgIFNldFByb3AoUF9HRU5ERVIsRkVNQUxFKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLChbTUFUX0dMQVNTOjUwLE1BVF9FQk9OWTo1MF0pKTsKKyAgU2V0UHJvcChQX1ZBTFVFLDEwMDAwKTsKKyAgU2V0UHJvcChQX1dFSUdIVCw1MDAwMDApOworICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsMCk7CisgIFNldFByb3AoUF9NQVhfV0VJR0hULDApOworICBTZXRQcm9wKEhfRlVSTklUVVJFLDEpOworICBTZXRQcm9wKFBfTk9HRVQsIkRpZSBWaXRyaW5lIGlzdCB2aWVsIHp1IHNjaHdlci5cbiIpOworICBTZXRQcm9wKCJjbnRfdmVyc2lvbl9vYmoiLDIpOworICBHZXRUcm9waHlEZXRhaWxzKCk7CisgIEFkZElkKCh7IlxubWlyaWxfcG9rYWxfdml0cmluZSIsInZpdHJpbmUifSkpOworCisgIE5ldWVEZXRhaWxzKCk7CisKKyAgQWRkQ21kKCh7InNhZXViZXJlIiwic2FldWJlciIsInJlaW5pZ2UiLCJyZWluaWciLCJtYWNoIiwibWFjaGUifSksCisgICAgICAgICAgICJzYWV1YmVyX2NtZCIpOworCisgIEFkZENtZCgoeyJzdGVsbGUiLCJzdGVsbCJ9KSwic3RlbGxfY21kIik7CisgIFJlbW92ZUNtZCgoeyJzZXJsYXViZSJ9KSk7CisKK30KKwordm9pZCByZXNldCgpeworICArK3N0YXViOworICBzZXRfbmV4dF9yZXNldCg4NjQwMCk7CisgIDo6cmVzZXQoKTsKKyAgcmV0dXJuOworfQorCit2b2lkIFNldEJlc2l0emVyKHN0cmluZyB1aWQsc3RyaW5nIHV1aWQpeworICBiZXNpdHplcj11dWlkOworICBHZXRUcm9waHlEZXRhaWxzKCk7CisgIHJldHVybjsKK30KKworc3RyaW5nIFF1ZXJ5QmVzaXR6ZXIoKXsKKyAgcmV0dXJuIGJlc2l0emVyOworfQorCit2b2lkIE5ldWVEZXRhaWxzKCl7CisgIEFkZERldGFpbCgoeyJob2x6IiwiZWJlbmhvbHoifSksQlMoIkRpZSBWaXRyaW5lIGJlc3RlaHQgdGVpbHdlaXNlICIKKyAgICAiYXVzIEViZW5ob2x6LiBUdWVyZW4sIERlY2tlbCB1bmQgRWlubGVnZWJvZWRlbiBzaW5kIGF1cyBHbGFzLiIpKTsKKyAgQWRkRGV0YWlsKCh7InR1ZXJlbiIsInR1ZXIiLCJnbGFzdHVlcmVuIiwiZ2xhc3R1ZXIiLCJkZWNrZWwifSksQlMoCisgICAgICAgICAgICAiRHVyY2ggZGFzIEdsYXMga2FubnN0IER1IGlucyBJbm5lcmUgZGVyIFZpdHJpbmUgZ3Vja2VuLiIpKTsKKyAgQWRkRGV0YWlsKCh7ImlubmVyZXMiLCJnZWdlbnN0YWVuZGUiLCJnZWdlbnN0YW5kIn0pLAorICAgICAgICAgICAgQlMoIkRvcnQga2FubiBtYW4gUG9rYWxlIGhpbmVpbnN0ZWxsZW4sIGFiZXIgbmljaHQgd2llZGVyICIKKyAgICAgICAgICAgICJoZXJhdXNuZWhtZW4uIikpOworICBBZGREZXRhaWwoKHsiZ2xhcyIsInNjaGVpYmUiLCJzY2hlaWJlbiJ9KSwKKyAgICAgQlMoIkdsYXMgaXN0IHByYWt0aXNjaCwgc29sYW5nZSBlcyBzYXViZXIgaXN0OiAiCisgICAgICAgICJNYW4ga2FubiBkYWR1cmNoIGlucyBJbm5lcmUgc2NoYXVlbi4iKSk7CisgIEFkZERldGFpbCgoeyJyZWloZSIsInBsYXR6IiwiZWlubGVnZWJvZWRlbiIsImVpbmxlZ2Vib2RlbiIsImJvZWRlbiIsCisgICAgICAgICAgICAgICJib2RlbiJ9KSwKKyAgICAgICAgICAgQlMoIkRpZSB2aWVsZW4gQm9lZGVuIGJpZXRlbiBQbGF0eiBmdWVyIHZpZWxlIFBva2FsZSEiKSk7CisgIHJldHVybjsKK30KKworCitzdGF0aWMgc3RyaW5nIG15X2xvbmcoKXsKKyAgaWYoc3RhdWI8MjEpCisgIHJldHVybiBCUygKKyAgIkRpZSBzY2hsaWNodGUgVml0cmluZSBhdXMgZHVua2xlbSBIb2x6IGVpZ25ldCBzaWNoIGhlcnZvcnJhZ2VuZCwgdW0gIgorICAid2VydHZvbGxlIEdlZ2Vuc3RhZW5kZSBkYXJpbiBhdXN6dXN0ZWxsZW4uIEhpbnRlciBkZW4gYmVpZGVuIEdsYXN0dWVyZW4gIgorICAic2llaHN0IER1IGVpbmUgUmVpaGUgdm9uIEVpbmxlZ2Vib2VkZW4sIGRpZSBlYmVuZmFsbHMgYXVzIEdsYXMgYmVzdGVoZW4uICIrCisgIHN0YXViX2Rlc2NyKCkpOworICBlbHNlIHJldHVybiBCUyhzdGF1Yl9kZXNjcigpKTsKK30KKworCitzdGF0aWMgc3RyaW5nIHN0YXViX2Rlc2NyKCl7CisgIHN0cmluZyB0ZXh0OworICB0ZXh0PSIiOworICBzd2l0Y2goc3RhdWIpeworICAgIGNhc2UgMC4uMToKKyAgICAgIHRleHQ9CisgICAgICAgICJEaWUgVml0cmluZSBpc3QgaGVydm9ycmFnZW5kIGdlcGZsZWd0LiBEdSBzaWVoc3Qga2VpbmVybGVpIFN0YXViICIrCisgICAgICAgICJkYXJpbiwgdW5kIGRpZSBTY2hlaWJlbiBzaW5kIHZvZWxsaWcga2xhci5cbiI7CisgICAgICAgIEFkZERldGFpbCgoeyJzdGF1YiJ9KSxCUygiS2VpbmVyIHp1IHNlaGVuLiIpKTsKKyAgICBicmVhazsKKyAgICBjYXNlIDIuLjQ6CisgICAgICB0ZXh0PQorICAgICAgICAiRGllIFZpdHJpbmUgaXN0IGd1dCBnZXBmbGVndC4gRXMgbGllZ3Qga2F1bSBTdGF1YiBkYXJpbiwgdW5kIGRpZSAiKworICAgICAgICAiVHVlcmVuIHNpbmQga2xhci5cbiI7CisgICAgICAgIEFkZERldGFpbCgoeyJzdGF1YiJ9KSxCUygiTWFuIHNpZWh0IG51ciB3ZW5pZyBkYXZvbi4iKSk7CisgICAgYnJlYWs7CisgICAgY2FzZSA1Li43OgorICAgICAgdGV4dD0KKyAgICAgICAgIkRpZSBWaXRyaW5lIGlzdCBpbiBlaW5lbSBvcmRlbnRsaWNoZW4gWnVzdGFuZCwgYWxsZXJkaW5ncyBzYW1tZWx0ICIrCisgICAgICAgICJzaWNoIHNvIGxhbmdzYW0gU3RhdWIgYXVmIGRlbiBFaW5sZWdlYm9lZGVuLlxuIjsKKyAgICAgICAgQWRkRGV0YWlsKCh7InN0YXViIn0pLEJTKCJTbyBsYW5nc2FtIGtvZW5udGUgbWFuIGRpZSAiCisgICAgICAgICJWaXRyaW5lIHNhZXViZXJuISIpKTsKKyAgICAgICAgQWRkRGV0YWlsKCh7Inp1c3RhbmQifSksQlMoIk5vY2ggaXN0IGVyIG9yZGVudGxpY2guIikpOworICAgIGJyZWFrOworICAgIGNhc2UgOC4uMTA6CisgICAgICB0ZXh0PQorICAgICAgICAiRGllIFZpdHJpbmUgd2lya3Qgc2Nob24gZXR3YXMgc3RhdWJpZy4gTWFuIGVya2VubnQgYXVjaCwgZGFzcyAiKworICAgICAgICAiZGVyIGVpbiBvZGVyIGFuZGVyZSBGaW5nZXJhYmRydWNrIGRpZSBUdWVyZW4gemllcnQuIjsKKyAgICAgICAgQWRkRGV0YWlsKCh7InN0YXViIiwiZmluZ2VyYWJkcnVjayIsInR1ZXJlbiIsImdsYXN0dWVyZW4iLAorICAgICAgICAiZGVja2VsIiwiZ2xhc3R1ZXIiLCJ0dWVyIiwienVzdGFuZCJ9KSwKKyAgICAgICAgQlMoIkVzIGxvaG50IHNpY2ggamV0enQgc2Nob24sIGRpZSBWaXRyaW5lIHp1IHNhZXViZXJuLiIpKTsKKyAgICBicmVhazsKKyAgICBjYXNlIDExLi4xNToKKyAgICAgIHRleHQ9CisgICAgICAgICJEdSBoYXN0IGRlbiBFaW5kcnVjaywgZGFzcyBkaWUgVml0cmluZSBsYW5nc2FtIGVpbm1hbCBnZXNhZXViZXJ0ICIrCisgICAgICAgICJ3ZXJkZW4ga29lbm50ZS4gRGllIEVpbmxlZ2Vib2VkZW4gc2luZCBzdGF1YmlnIHVuZCB6YWhscmVpY2hlICIrCisgICAgICAgICJGaW5nZXJhYmRydWVja2Ugc2luZCBhdWYgZGVuIEdsYXN0dWVyZW4genUgc2VoZW4uIjsKKyAgICBicmVhazsKKyAgICBjYXNlIDE2Li4yMDoKKyAgICAgIHRleHQ9CisgICAgICAgICJEaWUgVml0cmluZSBtYWNodCBlaW5lbiByZWNodCB1bmdlcGZsZWd0ZW4gRWluZHJ1Y2suIElubmVuIGlzdCAiKworICAgICAgICAic2llIHNjaG9uIHNlaHIgdmVyc3RhdWJ0IHVuZCBhdWNoIGRpZSBUdWVyZW4gc2luZCBzY2hvbiByZWNodCAiKworICAgICAgICAiZHJlY2tpZyBnZXdvcmRlbi4iOworICAgICAgICBBZGREZXRhaWwoKHsic3RhdWIifSksQlMoIk51biB3aXJkIGVzIGFiZXIgd2lya2xpY2ggWmVpdCwgZGllICIKKyAgICAgICAgIlZpdHJpbmUgenUgc2FldWJlcm4uIFNvbnN0IHNpZWh0IG1hbiBiYWxkIG5pY2h0cyBtZWhyIGRhcmluLiIpKTsKKyAgICBicmVhazsKKyAgICBjYXNlIDIxLi4yNToKKyAgICAgIHRleHQ9CisgICAgICAgICJEaWUgVml0cmluZSBpc3QgdG90YWwgenVnZXN0YXVidC4gVWViZXIgZGVuIEdsYXN0dWVyZW4gc2luZCAiKworICAgICAgICAiZXJzdGUgU3Bpbm53ZWJlbiB6dSBlcmtlbm5lbiB1bmQgZGllIFNjaGVpYmVuIHNpbmQgc2Nob24gZmFzdCAiKworICAgICAgICAiYmxpbmQgdm9uIGFsbCBkZW4gRmluZ2VyYWJkcnVlY2tlbiB1bmF1Zm1lcmtzYW1lciBHYWVzdGUuIjsKKyAgICAgICAgIFJlbW92ZURldGFpbChtX2luZGljZXMoUXVlcnlQcm9wKFBfREVUQUlMUykpKTsKKyAgICAgICAgIEFkZERldGFpbCgoeyJzcGlubndlYmVuIiwiZHJlY2siLCJ2aXRyaW5lIiwiZ2xhc3R1ZXJlbiIsImdsYXN0dWVyIiwKKyAgICAgICAgICJ0dWVyZW4iLCJ0dWVyIiwic2NoZWliZSIsInNjaGVpYmVuIiwiZGVja2VsIn0pLAorICAgICAgICAgIlVudGVyIGRlbSBnYW56ZW4gRHJlY2sgaXN0IGxlaWRlciBuaWNodHMgbWVociB6dSBlcmtlbm5lbi5cbiIpOworICAgICAgICAgQWRkRGV0YWlsKCh7ImdhZXN0ZSIsImdhc3QiLCJmaW5nZXJhYmRydWNrIiwiZmluZ2VyYWJkcnVlY2tlIn0pLAorICAgICAgICAgIkRpZSBHYWVzdGUgc2luZCBzaWNoZXIgc2NodWxkIGFuIGRlbSBEcmVjay5cbiIpOworICAgIGJyZWFrOworICAgIGNhc2UgMjYuLjMwOgorICAgICAgdGV4dD0KKyAgICAgICAgIkR1IGthbm5zdCBkaWUgVml0cmluZSB1bnRlciBkZXIgZGlja2VuIFN0YXVic2NoaWNodCBrYXVtIG5vY2ggIisKKyAgICAgICAgImVya2VubmVuIHVuZCBkaWUgR2xhc3R1ZXJlbiBzaW5kIGJsaW5kIGdld29yZGVuLiI7CisgICAgICAgICBBZGREZXRhaWwoKHsic3RhdWJzY2hpY2h0Iiwic2NoaWNodCJ9KSwKKyAgICAgICAgIEJTKCJEaWUgaXN0IHZlcmRhbW10IGRpY2sgdW5kIHVuZHVyY2hzaWNodGlnLiIpKTsKKyAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgdGV4dD0KKyAgICAgICAgIkRhc3Mgc2ljaCB1bnRlciBkaWVzZXIgQW5zYW1tbHVuZyB2b24gU3Bpbm53ZWJlbiB1bmQgU3RhdWIgbm9jaCAiKworICAgICAgICAiZWluZSBWaXRyaW5lIG1pdCBHbGFzdHVlcmVuIHZlcmJlcmdlbiBzb2xsLCBrYW5uc3QgRHUga2F1bSBnbGF1YmVuLiAiKworICAgICAgICAiSmVkZW5mYWxscyBrYW5uIG1hbiBkdXJjaCBkaWUgdm9lbGxpZyBibGluZGVuIFNjaGVpYmVuIG5pY2h0cyAiKworICAgICAgICAibWVociBlcmtlbm5lbi4iOworICAgICAgQWRkRGV0YWlsKCh7ImRyZWNrIiwic3Bpbm53ZWJlbiIsInN0YXViIiwiYW5zYW1tbHVuZyJ9KSwiUGZ1aSBEZWliZWwhXG4iKTsKKyAgfQorICByZXR1cm4gdGV4dDsKK30KKworc3RhdGljIGludCBzYWV1YmVyX2NtZChzdHJpbmcgc3RyKXsKKyAgc3RyaW5nIHRleHQ7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZihzdHJzdHIoc3RyLCJ2aXRyaW5lIik8MCkgcmV0dXJuIDA7CisgIHN3aXRjaChzdGF1Yil7CisgICAgY2FzZSAwOgorICAgICAgd3JpdGUoIkRhcyBpc3Qgbm9jaCBuaWNodCBub2V0aWchXG4iKTsKKyAgICAgIHJldHVybiAxOworICAgIGJyZWFrOworICAgIGNhc2UgMS4uMjA6CisgICAgICB0ZXh0PSJEdSByZWluaWdzdCBkaWUgVml0cmluZSBncnVlbmRsaWNoLiBEYXMgd3VyZGUgYXVjaCBsYW5nc2FtICIKKyAgICAgICJaZWl0ISI7CisgICAgICBpZihnZXR1dWlkKFRQKSE9YmVzaXR6ZXIpCisgICAgICAgIHRleHQrPSJEdSBmcmFnc3QgRGljaCwgd2llc28gRHUgZnJlbWRlIE1vZWJlbCByZWluaWdzdC4iOworCisgICAgICB3cml0ZShCUyh0ZXh0KSk7CisgICAgICBzYXkoQlMoVFBOKyIgcmVpbmlndCBkaWUgVml0cmluZSBncnVlbmRsaWNoLiBEYXMgd3VyZGUgYXVjaCBsYW5nc2FtICIKKyAgICAgICJaZWl0IVxuIiksVFApOworICAgICAgc3RhdWI9MDsgLy9IaWVyIGRhcmYgbm9jaCBqZW1hbmQgaGVsZmVuIQorICAgIGJyZWFrOworICAgIGNhc2UgMjEuLjMwOgorICAgICAgdGV4dD0iRHUgYmVnaW5uc3QgZGllIFZpdHJpbmUgenUgcmVpbmlnZW4uICI7CisgICAgICBpZihnZXR1dWlkKFRQKSE9YmVzaXR6ZXIpeworICAgICAgICB0ZXh0Kz0iTmFjaCBlaW5pZ2VyIFplaXQgZnJhZ3N0IER1IERpY2gsIG9iIER1IGVpZ2VudGxpY2ggc3Bpbm5zdCwgIisKKyAgICAgICAgImRlbm4gZGFzIGlzdCB1ZWJlcmhhdXB0IG5pY2h0IERlaW5lIFZpdHJpbmUuIER1IGxhZXNzdCB2b24gZGVtICIrCisgICAgICAgICJWb3JoYWJlbiB3aWVkZXIgYWIuIjsKKyAgICAgICAgc2F5KEJTKFRQTisiIGZhZW5ndCBrdXJ6IGFuLCBkaWUgVml0cmluZSB6dSByZWluaWdlbiwgbGFlc3N0IGVzIGFiZXIgIgorICAgICAgICAic2NobmVsbCB3aWVkZXIgc2Vpbi4iKSxUUCk7CisgICAgICB9CisgICAgICBlbHNleworICAgICAgICB0ZXh0Kz0iRGFzIGRhdWVydCBlaW5lIGdhbnplIFdlaWxlLCBhYmVyIGRhbm4gc3RyYWhsdCBkaWUgVml0cmluZSAiCisgICAgICAgICJ3aWVkZXIuIjsKKyAgICAgICAgc2F5KEJTKFRQTisiIGJlZ2lubnQgZGllIFZpdHJpbmUgenUgcmVpbmlnZW4uIERhcyBkYXVlcnQgZWluZSBnYW56ZSAiCisgICAgICAgICJXZWlsZSwgYWJlciBkYW5uIHN0cmFobHQgc2llIHdpZWRlci4iKSxUUCk7CisgICAgICAgIHN0YXViPTA7CisgICAgICB9CisgICAgICB3cml0ZShCUyh0ZXh0KSk7CisgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmKGdldHV1aWQoVFApIT1iZXNpdHplcikKKyAgICAgICAgd3JpdGUoIkRhcyBkcmVja2lnZSBUZWlsIGZhc3N0IER1IG5pY2h0IGFuIVxuIik7CisgICAgICBlbHNleworICAgICAgICB3cml0ZShCUygKKyAgICAgICAgICAiRHUgc2NocnViYnN0IHVuZCBzY2hydWJic3QgdW5kIGVzIHNjaGVpbnQga2VpbiBFbmRlIHp1IG5laG1lbi4gIgorICAgICAgICAgICJBbHMgRHUgc2Nob24gbGFuZ3NhbSBhdWZnZWJlbiB3aWxsc3QsIGlzdCBzbyBsYW5nc2FtIGVpbiBrbGVpbmVyICIKKyAgICAgICAgICAiRXJmb2xnIHp1IHNlaGVuLiBEdSBuaW1tc3QgRGlyIHZvciwgZGllIFZpdHJpbmUgaW4gWnVrdW5mdCAiCisgICAgICAgICAgImhhZXVmaWdlciB6dSByZWluaWdlbiEiKSk7CisgICAgICAgIHNheShCUygKKyAgICAgICAgICBUUE4rIiBzY2hydWJidCBzdHVuZGVubGFuZyBhbiBkZXIgVml0cmluZSBydW0sIGJpcyBzaWUgZW5kbGljaCAiCisgICAgICAgICAgIndpZWRlciByaWNodGlnIHNhdWJlciBpc3QuIiksVFApOworICAgICAgICBzdGF1Yj0wOworICAgICAgfQorICB9CisgIGlmKHN0YXViPT0wKXsKKyAgICBSZW1vdmVEZXRhaWwobV9pbmRpY2VzKFF1ZXJ5UHJvcChQX0RFVEFJTFMpKSk7CisgICAgR2V0VHJvcGh5RGV0YWlscygpOworICAgIE5ldWVEZXRhaWxzKCk7CisgICB9CisgIHJldHVybiAxOworfQorCit2b2lkIEdldFRyb3BoeURldGFpbHMoKXsKKyAgc3RyaW5nICp0cm9waHlsaXN0ZSwqc2hvcnRzOworICBtYXBwaW5nIHRyb3BoeWRldGFpbHM7CisKKyAgc2hvcnRzPSh7fSk7CisKKyAgdHJvcGh5bGlzdGU9TUlSSUxfVFJPUEhZTUFTVEVSLT5HZXRQbGFjZWRUcm9waGllcyhiZXNpdHplcik7CisKKyAgZm9yZWFjaCggc3RyaW5nIHRyIDogdHJvcGh5bGlzdGUgKQorICAgIHNob3J0cys9KHsgTUlSSUxfVFJPUEhZTUFTVEVSLT5HZXRUcm9waHlTaG9ydCh0cikgfSk7CisKKyAgc2hvcnRzID0gc29ydF9hcnJheShzaG9ydHMsICMnPik7CisgIGlmKCFzaXplb2Yoc2hvcnRzKSkKKyAgICBBZGREZXRhaWwoKHsicG9rYWxlIiwicG9rYWwiLCJpbiB2aXRyaW5lIn0pLAorICAgICAgICAgICAgICAgICJCaXNsYW5nIGlzdCBkaWUgVml0cmluZSBub2NoIGxlZXIuXG4iKTsKKyAgZWxzZQorICBBZGREZXRhaWwoKHsicG9rYWxlIiwicG9rYWwiLCJpbiB2aXRyaW5lIn0pLAorICAgICJEdSBzaWVoc3QgZm9sZ2VuZGUgUG9rYWxlIGluIGRlciBWaXRyaW5lOlxuIgorICAgICtpbXBsb2RlKHNob3J0cywiLlxuIikrIi5cbiIpOworCisgIGZvcmVhY2goIHN0cmluZyB0ciA6IHRyb3BoeWxpc3RlICkKKyAgeworICAgIEFkZERldGFpbCggTUlSSUxfVFJPUEhZTUFTVEVSLT5HZXRUcm9waHlJZHModHIpLAorICAgICAgICAgICAgICAgQlMoTUlSSUxfVFJPUEhZTUFTVEVSLT5HZXRUcm9waHlMb25nKHRyKSkpOworCisgICAgdHJvcGh5ZGV0YWlscyA9IE1JUklMX1RST1BIWU1BU1RFUi0+R2V0VHJvcGh5RGV0YWlscyh0cik7CisgICAgaWYgKCAhc2l6ZW9mKHRyb3BoeWRldGFpbHMpICkKKyAgICAgIGNvbnRpbnVlOworICAgIGZvcmVhY2ggKCBtaXhlZCBkZXQsIHN0cmluZyBkZXRfZGVzYyA6IHRyb3BoeWRldGFpbHMgKQorICAgICAgQWRkRGV0YWlsKCBkZXQsIEJTKGRldF9kZXNjKSApOworICB9CisgIHJldHVybjsKK30KKworc3RyaW5nICpHZXRBbGxUcm9waHlOYW1lcygpeworICBpbnQgaSxhbnphaGw7CisgIHN0cmluZyAqdHJvcGh5bmFtZW47CisKKyAgdHJvcGh5bmFtZW49KHt9KTsKKworICBmb3JlYWNoKHN0cmluZyBibGE6TUlSSUxfVFJPUEhZTUFTVEVSLT5HZXRUcm9waHlMaXN0ZSgpKQorICAgIHRyb3BoeW5hbWVuKz1NSVJJTF9UUk9QSFlNQVNURVItPkdldFRyb3BoeUlkcyhibGEpOworCisgIHJldHVybiB0cm9waHluYW1lbjsKK30KKworc3RhdGljIGludCBzdGVsbF9jbWQoc3RyaW5nIHN0cil7CisgIHN0cmluZyB3YXMsaWRlbnRpZmllcjsKKyAgaW50IHJlc3VsdGF0OworICBvYmplY3Qgb2I7CisgIGlmKCFzdHIpIHJldHVybiAwOworICBpZihzdHJzdHIoc3RyLCJ2aXRyaW5lIik8MCkgcmV0dXJuIDA7CisgIG5vdGlmeV9mYWlsKCJEYXMgaXN0IG5pY2h0IERlaW5lIFZpdHJpbmUhXG4iKTsKKyAgaWYoZ2V0dXVpZChUUCkhPWJlc2l0emVyKQorICAgIHJldHVybiAwOworICBub3RpZnlfZmFpbCgiRGllIFN5bnRheCBpc3Q6IHN0ZWxsZSA8Z2VnZW5zdGFuZD4gaW4gdml0cmluZSFcbiIpOworICBpZihzc2NhbmYoc3RyLCIlcyBpbiB2aXRyaW5lIix3YXMpIT0xKQorICAgIHJldHVybiAwOworCisgIG5vdGlmeV9mYWlsKCJEaWUgVml0cmluZSBzb2xsdGUgc2Nob24gb2ZmZW4gc2Vpbi5cbiIpOworICBpZihRdWVyeVByb3AoUF9DTlRfU1RBVFVTKSE9Q05UX1NUQVRVU19PUEVOICYmICFJU19MRUFSTkVSKFRQKSkKKyAgICByZXR1cm4gMDsKKyAgbm90aWZ5X2ZhaWwoIkR1IHNvbGx0ZXN0IGRpZSBWaXRyaW5lIHZvcmhlciBlcnN0bWFsIHNhZXViZXJuIVxuIik7CisgIGlmKHN0YXViPjIwKQorICAgIHJldHVybiAwOworICBub3RpZnlfZmFpbCgiRGFzIGthbm5zdCBEdSBsZWlkZXIgbmljaHQgaW4gZGllIFZpdHJpbmUgc3RlbGxlbiFcbiIpOworICBpZihtZW1iZXIoR2V0QWxsVHJvcGh5TmFtZXMoKSxsb3dlcl9jYXNlKHdhcykpPDAKKyAgICAgJiYgbG93ZXJfY2FzZSh3YXMpIT0icG9rYWwiKQorICAgIHJldHVybiAwOworICBub3RpZnlfZmFpbCgiRGFzIGhhc3QgRHUgbmljaHQhXG4iKTsKKyAgaWYoIW9iPXByZXNlbnQod2FzLFRQKSkKKyAgICByZXR1cm4gMDsKKyAgbm90aWZ5X2ZhaWwoIkRhcyBrYW5uc3QgRHUgbGVpZGVyIG5pY2h0IGluIGRpZSBWaXRyaW5lIHN0ZWxsZW4hXG4iKTsKKyAgaWYoIW9iLT5pZCgiXG5taXJpbF9wb2thbCIpKQorICAgIHJldHVybiAwOworCisgIGlkZW50aWZpZXI9b2ItPlF1ZXJ5SWRlbnRpZmllcigpOworICByZXN1bHRhdD1NSVJJTF9UUk9QSFlNQVNURVItPlBsYWNlVHJvcGh5KGdldHV1aWQoVFApLGlkZW50aWZpZXIpOworCisgIG5vdGlmeV9mYWlsKCJIaWVyIHN0aW1tdCBldHdhcyBuaWNodCwgc2FnIGJpdHRlIGVpbmVtIEVyem1hZ2llciBCZXNjaGVpZCEgIgorICAiUmVzdWx0YXQ9IityZXN1bHRhdCsiXG4iKTsKKyAgaWYocmVzdWx0YXQhPTEpCisgICAgcmV0dXJuIDA7CisgIHdyaXRlKEJTKCJEdSBzdGVsbHN0IGRlbiBQb2thbCBpbiBkaWUgVml0cmluZSB1bmQgYmV3dW5kZXJzdCBpaG4gbm9jaCBlaW4gIgorICAid2VuaWcuXG4iKSk7CisgIHNheShUUE4rIiBzdGVsbHQgZWluZW4gUG9rYWwgaW4gZGllIFZpdHJpbmUuXG4iLFRQKTsKKyAgR2V0VHJvcGh5RGV0YWlscygpOworICBvYi0+cmVtb3ZlKCk7CisgIGlmKG9iKQorICAgIGRlc3RydWN0KG9iKTsKKyAgcmV0dXJuIDE7Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvd2FmZmVuc2NocmFuay5jIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC93YWZmZW5zY2hyYW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2YWJjOQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvd2FmZmVuc2NocmFuay5jCkBAIC0wLDAgKzEsMjIwIEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBXYWZmZW5zY2hyYW5rCisvLyBMZXR6dGUgQWVuZGVydW5nOiAgICAyMi4wMy4yMDAxCisvLyBNYWdpZXI6ICAgICAgICAgICAgICBTd2lmdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyogQ2hhbmdlbG9nCisgICAqIDIxLjA1LjIwMDcsIFplc3N0cmEKKyAgICAgS2FtcGZzdGFlYmUgYXVmIEhpbndlaXMgdm9uIHRhc3NyYW0gZXJnYWVuenQuCisqLworI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCisjaW5jbHVkZSA8YW5zaS5oPgorI2luY2x1ZGUgPGNsYXNzLmg+Citpbmhlcml0IExBREVOKCJzd2lmdF9zdGRfY29udGFpbmVyIik7CisKKyNkZWZpbmUgVkVSU0lPTl9PQkogIjYiCisKK3N0cmluZyBzdHJhbGw7CisKK3Byb3RlY3RlZCB2b2lkIGNyZWF0ZSgpCit7CisgIGlmICghY2xvbmVwKFRPKSkgcmV0dXJuOworICBzd2lmdF9zdGRfY29udGFpbmVyOjpjcmVhdGUoKTsKKyAgU2V0UHJvcChQX1NIT1JULCAiRWluIFdhZmZlbnNjaHJhbmsiKTsKKyAgU2V0UHJvcChQX0xPTkcsIEJTKAorICAgICAiTWl0IGRlbiBXYWZmZW4sIGRpZSBpbiBkaWVzZW4gbWFzc2l2ZW4gSG9senNjaHJhbmsgcGFzc2VuLCBrb2VubnRlc3QgIgorICAgICsiRHUgZWluIGdhbnplcyBTb2VsZG5lcmhlZXIgYXVzcnVlc3Rlbi4gRnVlciBqZWRlIFdhZmZlbmdhdHR1bmcgZ2lidCAiCisgICAgKyJlcyBlaW5lbiBlaWdlbmVuIFBsYXR6LCBkYW1pdCBtYW4gYXVjaCBhbGxlcyBnbGVpY2ggZmluZGV0LCBzb2xsdGUgIgorICAgICsibWFuIGVzIGJyYXVjaGVuLiIpKyJAQGNudF9zdGF0dXNAQCIpOworICBBZGRJZCgoeyJ3YWZmZW5zY2hyYW5rIiwgImhvbHpzY2hyYW5rIiwgInNjaHJhbmsifSkpOworICBTZXRQcm9wKCJjbnRfdmVyc2lvbl9vYmoiLCBWRVJTSU9OX09CSik7CisgIFNldFByb3AoUF9OQU1FLCAiV2FmZmVuc2NocmFuayIpOworICBTZXRQcm9wKFBfR0VOREVSLCBNQUxFKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwgNTAwMCk7ICAgICAgICAgLy8gR2V3aWNodCA1IEtnCisgIFNldFByb3AoUF9NQVhfV0VJR0hULCAxMDAwMDAwKTsgIC8vIEVzIHBhc3NlbiBmdWVyIDEwMDAga2cgU2FjaGVuIHJlaW4uCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsgIC8vIERhZnVlciBtYWNodCBlciBhdWNoIG5peCBsZWljaHRlciA6KQorICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsIDEwMCk7ICAgICAvLyBNZWhyIHNvbGx0ZSBuaWNodCBzZWluLCBsdC4gVGlhbWFrLgorICBTZXRQcm9wKFBfVkFMVUUsIDApOyAgICAgICAgICAgICAvLyBLZWluIG1hdGVyaWVsbGVyIFdlcnQuIElzdCBlaCBuaWNodCB2ZXJrYXVmYmFyLgorICBTZXRQcm9wKFBfTk9CVVksIDEpOyAgICAgICAgICAgICAvLyBXaXJkIGltIExhZGVuIHplcnN0b2VydCwgZmFsbHMgZXIgdmVya2F1ZnQgd2lyZC4KKyAgU2V0UHJvcChQX05PR0VULCAiRGFzIGdlaHQgbmljaHQuICIrTmFtZShXRVIsMSkrIiBoYWZ0ZXQgd2llIG1hZ2lzY2ggYW0gQm9kZW4uXG4iKTsKKyAgU2V0UHJvcChQX01BVEVSSUFMLCAoe01BVF9NSVNDX1dPT0QsIE1BVF9NSVNDX01BR0lDfSkgKTsKKyAgU2V0UHJvcChQX0lORk8sICJWZXJzdWNocyBtYWwgbWl0OiBcInNrb21tYW5kb3MgIitRdWVyeVByb3AoUF9JRFMpWzFdKyJcIiAhXG4iKTsKKyAgU2V0UHJvcCgib2JqX2NtZCIsICJzbGlzdGUgW09iamVrdC1JZF0gW1dhZmZlbnR5cHxcImFsbGVzXCJdXG4iCisgICAgKyIgIFdhZmZlbnR5cGVuOiBTY2h3ZXJ0ZXIsIFNwZWVyZSwgQWV4dGUsIEtldWxlbiwgS2FtcGZzdGFlYmUsIE1lc3NlciwgUGVpdHNjaGVuLFxuIgorICAgICsiICAgICAgICAgICAgICAgRmVybndhZmZlbiwgTXVuaXRpb24sIFNvbnN0aWdlcywgVW56dW9yZGJhclxuIik7CisKKyAgQUQoKHsicGxhdHoifSksIEJTKCJEZXIgU2NocmFuayBiaWV0ZXQgUGxhdHogZnVlciBqZWRlIGVyZGVua2xpY2hlICIKKyAgICArIldhZmZlbmdhdHR1bmcuIikpOworCisgIEFkZENtZCgoeyJzbGlzdGUifSksICJhdWZsaXN0dW5nIik7Cit9CisKK3ZhcmFyZ3MgaW50IFByZXZlbnRJbnNlcnQob2JqZWN0IG9iKQoreworICAvLyBLZWluZSBXYWZmZT8gSGF0IGluIGRpZXNlbSBDb250YWluZXIgbml4IHZlcmxvcmVuIQorICBpZiggIW9iLT5RdWVyeVByb3AoUF9XRUFQT05fVFlQRSkgJiYgIW9iLT5RdWVyeVByb3AoUF9XQykgJiYKKyAgICAgICFvYi0+aWQoIlxuQnVtZXJhbmciKSAmJiAhb2ItPmlzX2NsYXNzX21lbWJlcihDTF9BTU1VTklUSU9OKSAmJgorICAgICAgIW9iLT5pZCgiXG5nb3JzZWlscGZlaWwiKSApCisgIHsKKyAgICB3cml0ZSggQlMoIkluICIrbmFtZShXRU4sMSkrIiBrYW5uc3QgRHUgbnVyIFdhZmZlbiArIE11bml0aW9uIGxlZ2VuISIpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlbHNlCisgICAgcmV0dXJuIDo6UHJldmVudEluc2VydChvYik7Cit9CisKK2ludCBhdWZsaXN0dW5nMihzdHJpbmcgd2FzLCBzdHJpbmcgbmZfc3RyMSwgc3RyaW5nIG5mX3N0cjIsIGludCBhbGxlcykKK3sKKyAgc3RyaW5nIG9ic2hvcnQsIHN1Y2hlLCAqc3RyczsKKyAgb2JqZWN0ICpvYnM7CisgIGludCBpOworICBtYXBwaW5nIHN1Y2hvYnM7CisgIHN3aXRjaCh3YXMpCisgIHsKKyAgICBjYXNlICJtdW5pdGlvbiIgICA6IHN1Y2hlPVdUX0FNTVU7IGJyZWFrOworICAgIGNhc2UgImFleHRlIiAgICAgIDogc3VjaGU9V1RfQVhFOyBicmVhazsKKyAgICBjYXNlICJrZXVsZW4iICAgICA6IHN1Y2hlPVdUX0NMVUI7IGJyZWFrOworICAgIGNhc2UgIm1lc3NlciIgICAgIDogc3VjaGU9V1RfS05JRkU7IGJyZWFrOworICAgIGNhc2UgImZlcm53YWZmZW4iIDogc3VjaGU9V1RfUkFOR0VEX1dFQVBPTjsgYnJlYWs7CisgICAgY2FzZSAic3BlZXJlIiAgICAgOiBzdWNoZT1XVF9TUEVBUjsgYnJlYWs7CisgICAgY2FzZSAic2Nod2VydGVyIiAgOiBzdWNoZT1XVF9TV09SRDsgYnJlYWs7CisgICAgY2FzZSAicGVpdHNjaGVuIiAgOiBzdWNoZT1XVF9XSElQOyBicmVhazsKKyAgICBjYXNlICJzb25zdGlnZXMiICA6IHN1Y2hlPVdUX01JU0M7IGJyZWFrOworICAgIGNhc2UgImthbXBmc3RhZWJlIjogc3VjaGU9V1RfU1RBRkY7IGJyZWFrOworICAgIGNhc2UgInVuenVvcmRiYXIiIDogc3VjaGU9InVuenVvcmRiYXIiOyBicmVhazsKKyAgICBkZWZhdWx0ICAgICAgICAgICA6IHdyaXRlKCJGZWhsZXI6IFVuZ3VlbHRpZ2VyIFdhZmZlbnR5cC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIkZvbGdlbmRlIFR5cGVuIGdpYnQgZXM6XG4iK25mX3N0cjErbmZfc3RyMik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgYnJlYWs7CisgIH0KKyAgb2JzPWFsbF9pbnZlbnRvcnkoKTsKKyAgc3VjaG9icz0oW10pOworICBmb3IoaT0wO2k8c2l6ZW9mKG9icyk7aSsrKQorICB7CisgICAgb2JzaG9ydD10b19zdHJpbmcob2JzW2ldLT5RdWVyeVByb3AoUF9TSE9SVCkpOworICAgIGlmKG9ic2hvcnQ9PSJFaW4gQnVtZXJhbmdAQGZsaWVndEBAIikKKyAgICAgIG9ic2hvcnQ9IkVpbiBCdW1lcmFuZyI7CisgICAgZWxzZSBpZihvYnNob3J0PT0iTmljaHRzIGJlc29uZGVyZXMiIHx8IG9ic2hvcnQ9PSIwIikgLy8ga2VpbmUgUF9TSE9SVCA/CisgICAgICBvYnNob3J0PW9ic1tpXS0+TmFtZShXRVIpOyAgICAgLy8gICBIb2ZmZW4gd2lyIG1hbCBkYXNzIGRhcyBPYmouIG5lbiBOYW1lbiBoYXQuCisgICAgaWYob2JzW2ldLT5RdWVyeVByb3AoUF9XRUFQT05fVFlQRSk9PXN1Y2hlIHx8ICAvLyBHZXN1Y2h0ZXIgV2VhcG9uVHlwZSBnZWZ1bmRlbi4uLgorICAgICAgICghb2JzW2ldLT5RdWVyeVByb3AoUF9XRUFQT05fVFlQRSkgJiYgc3VjaGU9PSJ1bnp1b3JkYmFyIikgKQorICAgIHsKKyAgICAgIGlmKHN1Y2hvYnNbb2JzaG9ydF0pICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBfU0hPUlQgZGVzIE9iai4gc2Nob24gaW0gbWFwcGluZz8KKyAgICAgIHsKKyAgICAgICAgaWYoIG9ic1tpXS0+UXVlcnlQcm9wKFBfQU1PVU5UKSApCisgICAgICAgICAgc3VjaG9ic1tvYnNob3J0XSs9b2JzW2ldLT5RdWVyeVByb3AoUF9BTU9VTlQpOyAvLyAgIERhbm4gZGVuIFphZWhsZXIgdW0gQW1vdW50IGhvY2ghCisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdWNob2JzW29ic2hvcnRdKz0xOyAgICAgICAgICAgICAgICAgICAgIC8vICAgRGFubiBkZW4gWmFlaGxlciB1bSAxIGhvY2ghCisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmKCBvYnNbaV0tPlF1ZXJ5UHJvcChQX0FNT1VOVCkgKQorICAgICAgICAgIHN1Y2hvYnMrPShbb2JzaG9ydDogb2JzW2ldLT5RdWVyeVByb3AoUF9BTU9VTlQpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdWNob2JzKz0oW29ic2hvcnQ6IDFdKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgc3Rycz1tX2luZGljZXMoc3VjaG9icyk7CisgIGlmKHNpemVvZihzdHJzKSkKKyAgeworICAgIGlmKCFhbGxlcykKKyAgICB7CisgICAgICBpZihzdWNoZT09InVuenVvcmRiYXIiKQorICAgICAgICBzdHJhbGwrPU5hbWUoV0VSLDEpKyIgZW50aGFlbHQgZm9sZ2VuZGUgbmljaHQgenVvcmRiYXJlIFdhZmZlbjpcbiI7CisgICAgICBlbHNlCisgICAgICAgIHN0cmFsbCs9TmFtZShXRVIsMSkrIiBlbnRoYWVsdCBmb2xnZW5kZSAiK0NBUCh3YXMpKyI6XG4iOworICAgICAgc3RyYWxsKz0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYoc3VjaGU9PSJ1bnp1b3JkYmFyIikKKyAgICAgICAgc3RyYWxsKz1BTlNJX0JPTEQrIj09PSBOaWNodCB6dW9yZGJhcmUgV2FmZmVuOlxuIitBTlNJX05PUk1BTDsKKyAgICAgIGVsc2UKKyAgICAgICAgc3RyYWxsKz1BTlNJX0JPTEQrIj09PSAiK0NBUCh3YXMpKyI6XG4iK0FOU0lfTk9STUFMOworICAgIH0KKyAgICBmb3IoaT0wO2k8c2l6ZW9mKHN0cnMpO2krKykKKyAgICB7CisgICAgICBpZihzdWNob2JzW3N0cnNbaV1dID4gMSkKKyAgICAgICAgc3RyYWxsKz1zdHJzW2ldKyIuICgiK3N1Y2hvYnNbc3Ryc1tpXV0rIilcbiI7CisgICAgICBlbHNlCisgICAgICAgIHN0cmFsbCs9c3Ryc1tpXSsiLlxuIjsKKyAgICB9CisgIH0KKyAgZWxzZQorICAgIGlmKCFhbGxlcykKKyAgICAgIHN0cmFsbCs9TmFtZShXRVIsMSkrIiBlbnRoYWVsdCBrZWluZSAiK0NBUCh3YXMpKyIhXG4iOworICByZXR1cm4gMTsKK30KKworaW50IGF1Zmxpc3R1bmcoc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nICpzdHJzLCBvYl9pZCwgd2FzLCBuZl9zdHIxLG5mX3N0cjI7CisgIHN0cmFsbD0iIjsKKyAgbmZfc3RyMT0iICAgKFNjaHdlcnRlciwgU3BlZXJlLCBBZXh0ZSwgS2V1bGVuLCBLYW1wZnN0YWViZSwgTWVzc2VyLCBQZWl0c2NoZW4sXG4iCisgICAgICAgICArIiAgICBGZXJud2FmZmVuLCBNdW5pdGlvbiwgU29uc3RpZ2VzLCBVbnp1b3JkYmFyKVxuIjsKKyAgbmZfc3RyMj0iU3ludGF4OiBzbGlzdGUgW09iamVrdC1JZF0gW1dhZmZlbnR5cF1cbiIKKyAgICAgICAgICsiQnNwLjogICBzbGlzdGUgIitRdWVyeVByb3AoUF9JRFMpWzFdKyIgIisic2Nod2VydGVyXG4iCisgICAgICAgICArIiAgICAgICAgc2xpc3RlICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiIGFsbGVzXG4iOworICBub3RpZnlfZmFpbCgiRmVobGVyOiBPaG5lIFBhcmFtZXRlciBrbGFwcHQgZGFzIG5pY2h0LlxuIituZl9zdHIyKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIGlmKHByZXNlbnQoc3RyKT09VE8pICAgLy8gVWViZXJwcnVlZmUsIG9iIGRpZXNlcyBPYmpla3QgZ2VtZWludCBpc3QhCisgIHsKKyAgICB3cml0ZSgiRmVobGVyOiBFcyBmZWhsdCBlaW4gV2FmZmVudHlwLiBGb2xnZW5kZSBUeXBlbiBnaWJ0IGVzOlxuIgorICAgICAgICAgK25mX3N0cjErbmZfc3RyMik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgc3Rycz1vbGRfZXhwbG9kZShzdHIsICIgIik7CisgIG5vdGlmeV9mYWlsKCJGZWhsZXI6IER1IG11c3N0IGVpbmUgZ3VlbHRpZ2UgT2JqZWt0LUlkIGFuZ2ViZW4hXG4iCisgICAgICAgICAgICAgK25mX3N0cjIpOworICBpZiggc2l6ZW9mKHN0cnMpIDwgMiApIHJldHVybiAwOyAgIC8vIE51ciAxIFBhci4gdW5kIGRlciBpc3QgbmljaHQgZGllIE9iamVrdC1JZAorICBpZiggc2l6ZW9mKHN0cnMpID09IDIgKSAgIC8vIEFuemFobCBQYXIuID0gMgorICB7CisgICAgb2JfaWQ9c3Ryc1swXTsKKyAgICB3YXM9c3Ryc1sxXTsKKyAgICBpZiggSVNUX1pBSEwod2FzKSApICAgICAvLyBPYmpla3QtSWQgei5CLiBtaXQgInNjaHJhbmsgMiIgYW5nZXNwcm9jaGVuPworICAgICAgaWYocHJlc2VudChvYl9pZCsiICIrd2FzKT09VE8pICAgLy8gRmFsbHMgZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCB1bmQga2VpbiAzLiBQYXIhCisgICAgICB7CisgICAgICAgIHdyaXRlKCJGZWhsZXI6IEVzIGZlaGx0IGVpbiBXYWZmZW50eXAuIEZvbGdlbmRlIFR5cGVuIGdpYnQgZXM6XG4iCisgICAgICAgICAgICAgICtuZl9zdHIxK25mX3N0cjIpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZSBpZiggc2l6ZW9mKHN0cnMpID09IDMgKQorICB7CisgICAgb2JfaWQ9c3Ryc1swXSsiICIrc3Ryc1sxXTsKKyAgICB3YXM9c3Ryc1syXTsKKyAgfQorICBlbHNlICAgICAgICAvLyBBbnphaGwgZXJmb3JkZXJsaWNoZXIgUGFyYW1ldGVyIHVlYmVyc2Nocml0dGVuIQorICAgIHJldHVybiAwOworICBpZihwcmVzZW50KG9iX2lkKSE9VE8pICAgLy8gVWViZXJwcnVlZmUsIG9iIGF1Y2ggZGllc2VzIE9iamVrdCBnZW1laW50IGlzdCEKKyAgICByZXR1cm4gMDsKKyAgaWYoUXVlcnlQcm9wKFBfQ05UX1NUQVRVUykhPUNOVF9TVEFUVVNfT1BFTikKKyAgeworICAgIHdyaXRlKCJEYXp1IG11ZXNzdGUgIituYW1lKFdFUiwxKSsiIGdlb2VmZm5ldCBzZWluLlxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKy8vLS0tIEhpZXIgaXN0IFBhcmFtZXRlcnBydWVmdW5nIHp1IEVuZGUuCisgIHdhcz1MT1dFUih3YXMpOworICBpZih3YXMhPSJhbGxlcyIpCisgICAgYXVmbGlzdHVuZzIod2FzLCBuZl9zdHIxLCBuZl9zdHIyLCAwKTsKKyAgZWxzZQorICB7CisgICAgYXVmbGlzdHVuZzIoImFleHRlIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoImtldWxlbiIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJrYW1wZnN0YWViZSIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJtZXNzZXIiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigic3BlZXJlIiwgbmZfc3RyMSwgbmZfc3RyMiwgMSk7CisgICAgYXVmbGlzdHVuZzIoInNjaHdlcnRlciIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJwZWl0c2NoZW4iLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigiZmVybndhZmZlbiIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJtdW5pdGlvbiIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICAgIGF1Zmxpc3R1bmcyKCJzb25zdGlnZXMiLCBuZl9zdHIxLCBuZl9zdHIyLCAxKTsKKyAgICBhdWZsaXN0dW5nMigidW56dW9yZGJhciIsIG5mX3N0cjEsIG5mX3N0cjIsIDEpOworICB9CisgIFRQLT5Nb3JlKHN0cmFsbCk7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL21vZWJlbC93YWZmZW50cnVoZS5jIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC93YWZmZW50cnVoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OGFhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3dhZmZlbnRydWhlLmMKQEAgLTAsMCArMSw0MyBAQAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTmFtZSBkZXMgT2JqZWN0czogICAgV2FmZmVudHJ1aGUKKy8vIExldHp0ZSBBZW5kZXJ1bmc6ICAgIDIyLjAzLjIwMDEKKy8vIE1hZ2llcjogICAgICAgICAgICAgIFN3aWZ0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKiBDaGFuZ2Vsb2cKKyAgICogMjEuMDUuMjAwNywgWmVzc3RyYQorICAgICBEYSBXYWZmZW5zY2hyYW5rIHVuZCBXYWZmZW50cnVoZSBzaWNoIHByYWt0aXNjaCBuaWNodCB1bnRlcnNjaGVpZGVuLCBiaXMKKyAgICAgYXVmIDEwIFplaWxlbiBpbSBDcmVhdGUsIGVyYnQgbnVuIGRpZSBXYWZmZW50cnVoZSBkZW4gV2FmZmVuc2NocmFuayB1bmQKKyAgICAgdWViZXJzY2hyZWlidCBlaW5mYWNoIGRpZSBwYXNzZW5kZW4gUHJvcHMuCisqLworI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCisjaW5jbHVkZSA8YW5zaS5oPgorI2luY2x1ZGUgPGNsYXNzLmg+CisvL2luaGVyaXQgTEFERU4oInN3aWZ0X3N0ZF9jb250YWluZXIiKTsKK2luaGVyaXQgTEFERU4oIndhZmZlbnNjaHJhbmsiKTsKKworI2RlZmluZSBWRVJTSU9OX09CSiAiNyIKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkgeworICBpZiAoIWNsb25lcChUTykpIHJldHVybjsKKyAgOjpjcmVhdGUoKTsKKyAgU2V0UHJvcChQX1NIT1JULCAiRWluZSBXYWZmZW50cnVoZSIpOworICBTZXRQcm9wKFBfTE9ORywgQlMoCisgICAgICJEaWVzZSBTdGFobHRydWhlIGlzdCBzcGV6aWVsbCB6dXIgQXVmbmFobWUgdm9uIGdyb3NzZW4gV2FmZmVubWVuZ2VuICIKKyAgICAgImdlZmVydGlndC4gVmVyc2NoaWVkZW5lIEZhZWNoZXIgZnVlciBkaWUgZWluemVsbmVuIFdhZmZlbnR5cGVuIGVybGVpY2h0ZXJuICIKKyAgICAgImRpZSBTdWNoZSBuYWNoIERlaW5lbSBiZXZvcnp1Z3RlbiBXYWZmZW50eXAuIikrIkBAY250X3N0YXR1c0BAIik7CisgIFJlbW92ZUlkKCh7IndhZmZlbnNjaHJhbmsiLCAiaG9senNjaHJhbmsiLCAic2NocmFuayJ9KSk7CisgIEFkZElkKCh7IndhZmZlbnRydWhlIiwgInN0YWhsdHJ1aGUiLCAidHJ1aGUifSkpOworICBTZXRQcm9wKCJjbnRfdmVyc2lvbl9vYmoiLCBWRVJTSU9OX09CSik7CisgIFNldFByb3AoUF9OQU1FLCAiV2FmZmVudHJ1aGUiKTsKKyAgU2V0UHJvcChQX0dFTkRFUiwgRkVNQUxFKTsgIAorICBTZXRQcm9wKFBfTUFURVJJQUwsICh7TUFUX01JU0NfTUVUQUwsIE1BVF9NSVNDX01BR0lDfSkgKTsKKyAgU2V0UHJvcChQX0lORk8sICJWZXJzdWNocyBtYWwgbWl0OiBcInNrb21tYW5kb3MgIitRdWVyeVByb3AoUF9JRFMpWzFdKworICAgICJcIiAhXG4iKTsKKyAgQUQoKHsiZmFlY2hlciJ9KSwgQlMoIkZ1ZXIgamVkZW4gV2FmZmVudHlwIGdpYnQgZXMgZWluIGVpZ2VuZXMgRmFjaCwgc28gZGFzcyAiCisgICAgIkR1IGVpbmUgYmVzc2VyZSBVZWJlcnNpY2h0IGhhc3QuIikpOworICBBRCgoeyJwbGF0eiJ9KSwgQlMoIkRpZSBXYWZmZW50cnVoZSBiaWV0ZXQgUGxhdHogZnVlciBqZWRlIGVyZGVua2xpY2hlICIKKwkiV2FmZmVuZ2F0dHVuZy4iKSk7Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvd2FzY2guYyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvd2FzY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzg5MzUwCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL21vZWJlbC93YXNjaC5jCkBAIC0wLDAgKzEsMjIwIEBACisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBXYXNjaG9iamVrdAorLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMDEuMDQuMjAwNQorLy8gTWFnaWVyOiAgICAgICAgICAgICAgU2VsZXZlbgorLy8gRGllc2VzIEZpbGUgZ2lidCBkZW0gU3BpZWxlciBkaWUgTW9lZ2xpY2hrZWl0LCBlaW5lIFdhc2NoZ2VsZWdlbmhlaXQgaW4KKy8vIHNlaW5lbSBTZWhlcmhhdXMgYXVmenVzdGVsbGVuLiBEYXMgYmVpbSBLb21tYW5kbyB3YXNjaChlKSwgZHVzY2goZSkgbGFlc3N0CisvLyBzaWNoIGRpZSBNZWR1bmcgdWViZXJzY2hyZWliZW4gKFRlc3QgcGVyIHJhdW0tPlF1ZXJ5UHJvcCgiaF9jb21tYW5kcyIpKQorLy8gMDEuMDcuMjAwNyAoWmVzc3RyYSk6IEdldE93bmVyKCkgZGVmaW5pZXJ0LgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjcHJhZ21hIHN0cm9uZ190eXBlcyxydHRfY2hlY2tzCisKKyNpbmNsdWRlICJzY2hyYW5rbGFkZW4uaCIKK2luaGVyaXQgTEFERU4oInN3aWZ0X3N0ZF9jb250YWluZXIiKTsKKworc3RyaW5nICp3Y21kOworc3RyaW5nICpvYmpla3RlID0KKyAgKCh7Ilxuc3RpbmtvYmoiLCJcbnplc3N0cmFfYXNjaGUiLCJzZWxldmVcbnNjaGVpc3NlIiwiXG5wb3BjIiwKKyAgICAgIlxuc3NwYm9sbGVuIiwic2VsZXZlXG5zdGlua29iaiIsIlxucTJwX2dlc3RhbmsiLCJiZXJcdHJhbV9za290IiwKKyAgICAgImJhbWJpXG5zY2htdXR6aWdlaGFlbmRlIn0pKTsKKy8qIFd1cnplbChLbG8vSW1iaXNzKSwgWmVzc3RyYShWdWxrYW4vSWxsdW1pbmF0b3MpLCBTZWxldmVuKEtsby9OZWJlbGVsZmVuKSwKKyAqIFNlbGV2ZW4oUG9wY29ybi9OZWJlbGVsZmVuKSwgQm9pbmcoU2NobGVpbXNjaG1laXNzZXIsU1NQKSwgU1RBTkRBUlQKKyAqLworCitzdGF0aWMgdm9pZCB3YXNjaF9mdW4oKTsKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkKK3sKKyAgaWYgKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHJldHVybjsKKyAgOjpjcmVhdGUoKTsKKworICB3Y21kID0gKCh7Indhc2NoZSIsIndhc2NoIiwiZHVzY2hlIiwiZHVzY2gifSkpOworICBBZGRJZCgoeyJkdXNjaGthYmluZSIsImthYmluZSIsImR1c2NoZSIsIndhc2NoZ2VsZWdlbmhlaXQifSkpOworICBTZXRQcm9wKFBfTkFNRSwiRHVzY2hrYWJpbmUiKTsKKyAgCisgIFNldFByb3AoImNudF92ZXJzaW9uX29iaiIsMSk7CisKKyAgU2V0UHJvcCgib2JqX2NtZCIsCisgICJ3YXNjaChlKSwgZHVzY2goZSlcbiIrCisgICIgICBEYW1pdCBsYWVzc3Qgc2ljaCBkYXMgU3RpbmtlbiBhdXMgZGVtIEltYmlzc2tsbyBiZXNlaXRpZ2VuLlxuIisKKyAgIiAgIFdlbm4ga2VpbiBCZWZlaGwgJ3dhc2NoKGUpJyBpbSBSYXVtIGJlc2NocmllYmVuIGlzdCwgZXJmb2xndCBlaW5lXG4iKworICAiICAgU3RhbmRhcnRtZWxkdW5nLCBzZWxiaWdlcyBnaWx0IGZ1ZXIgJ2R1c2NoKGUpJy5cbiIrCisgICJzc2V0eihlKSB3YXNjaGJlZmVobFxuIisKKyAgIiAgIERhbWl0IGthbm4gbWFuIGRpZSBCZWZlaGxzbGlzdGUgZXJ3ZWl0ZXJuLCBkaWUgZGFzIFdhc2NoZW4gXG4iKworICAiICAgYXVzbG9lc2VuXG4iKworICAic2xvZXNjaChlKSB3YXNjaGJlZmVobFxuIisKKyAgIiAgIERhbWl0IGthbm4gbWFuIGVpbmVuIEJlZmVobCBhdXMgZGVyIExpc3RlIGxvZXNjaGVuXG4iKworICAid2FzY2hiZWZlaGxzbGl0ZSwgd2JsIisKKyAgIiAgIFplaWd0IGVpbmUgTGlzdGUgZGVyIEJlZmVobGUgYW4sIGRpZSBkYXMgV2FzY2hlbiBhdXNsb2VzZW4uXG4iKTsKKworICBTZXRQcm9wKFBfU0hPUlQsIkVpbmUgRHVzY2hrYWJpbmUiKTsKKyAgU2V0UHJvcChQX0xPTkcsQlMoIkRpZSBEdXNjaGthYmluZSBoYXQgZWluZW4gUmFobWVuIGF1cyBoZWxsZW0gSG9sei4gIgorICAgIkRhendpc2NoZW4gd3VyZGVuIG1hdHRlIFNjaGVpYmVuIGVpbmdlbGFzc2VuLCBkYW1pdCBtYW4gbmllbWFuZGVuIGJlaW0gIgorICAgIkR1c2NoZW4gYmVvYmFjaHRlbiBrYW5uLiIpKTsKKyAgQWRkRGV0YWlsKCJyYWhtZW4iLCJEZXIgUmFobWVuIGlzdCBhdXMgaGVsbGVtIEhvbHouXG4iKTsKKyAgQWRkRGV0YWlsKCh7InNjaGVpYmVuIiwic2NoZWliZSJ9KSwiRGllIFNjaGVpYmVuIGRlciBEdXNjaGthYmluZSBzaW5kICIrCisgICAibWF0dCB1bmQgYWJzb2x1dCB1bmR1cmNoc2ljaHRpZyFcbiIpOworICBBZGREZXRhaWwoKHsiZHVzY2hlbiIsImJlaW0gZHVzY2hlbiJ9KSwKKyAgICJNYW4ga2FubiBuaWVtYW5kZW4gYmVpbSBEdXNjaGVuIGJlb2JhY2h0ZW4uXG4iKTsKKworICBTZXRQcm9wKFBfR0VOREVSLCBGRU1BTEUpOworICBTZXRQcm9wKFBfV0VJR0hULCA1MDAwKTsgICAgICAgICAvLyBHZXdpY2h0IDUgS2cKKyAgU2V0UHJvcChQX01BWF9XRUlHSFQsIDApOyAgICAgICAgLy8gU29sbCBudXIgbiBwc2V1ZG8tQ29udGFpbmVyCisgIFNldFByb3AoUF9XRUlHSFRfUEVSQ0VOVCwgMTAwKTsgIC8vIERhZnVlciBtYWNodCBlciBhdWNoIG5peCBsZWljaHRlciA6KQorICBTZXRQcm9wKFBfTUFYX09CSkVDVFMsIDApOyAgICAgICAvLyBLZWluIENvbnRhaW5lciA6KQorICBTZXRQcm9wKFBfVkFMVUUsIDApOyAgICAgICAgICAgICAvLyBJc3QgZWggbmljaHQgdmVya2F1ZmJhci4KKyAgU2V0UHJvcChQX05PQlVZLCAxKTsgICAgICAgICAgICAgLy8gRmFscyBkb2NoOiB6ZXJzdG9lcmVuIQorICBTZXRQcm9wKFBfTk9HRVQsCisgICAgIkRhcyBnZWh0IG5pY2h0LiAiK05hbWUoV0VSLDEpKyIgaGFmdGV0IHdpZSBtYWdpc2NoIGFtIEJvZGVuLlxuIik7CisgIFNldFByb3AoUF9NQVRFUklBTCwgKHtNQVRfTUlTQ19XT09ELCBNQVRfTUlTQ19NQUdJQ30pICk7CisgIFNldFByb3AoUF9JTkZPLCAiVmVyc3VjaHMgbWFsIG1pdDogXCJza29tbWFuZG9zICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXCIgIVxuIik7CisKKyAgQWRkQ21kKHdjbWQsImNtZF93YXNjaGVuIik7CisgIFJlbW92ZUNtZCgoeyJvZWZmbmUiLCJvZWZmbiIsInNjaGxpZXNzZSIsInNjaGxpZXNzIn0pKTsKKyAgQWRkQ21kKCh7InNzZXR6ZSIsInNzZXR6In0pLCJjbWRfc2V0emVuIik7CisgIEFkZENtZCgoeyJzbG9lc2NoZSIsInNsb2VzY2hlIn0pLCJjbWRfbG9lc2NoZW4iKTsKKyAgQWRkQ21kKCh7IndibCIsIndhc2NoYmVmZWhsc2xpc3RlIn0pLCJsaXN0ZSIpOworfQorCisvLyBaZXNzdHJhLCAxLjcuMDcsIGZ1ZXJzIEhvZXJyb2hyCitzdHJpbmcgR2V0T3duZXIoKSB7cmV0dXJuICJzZWxldmVuIjt9CisKK3ZhcmFyZ3MgaW50IFByZXZlbnRJbnNlcnQob2JqZWN0IG9iKSB7cmV0dXJuIDE7fSAvL0RhcyBpc3Qga2VpbiBDb250YWluZXIgOikKKworc3RhdGljIHZvaWQgd2FzY2hfZnVuKCkKK3sKKyAgaW50IGk7CisgIG9iamVjdCBvYjsKKyAgaSA9IHNpemVvZihvYmpla3RlKTsKKyAgaS0tOworICB3aGlsZShpID4gLTEpCisgIHsKKworICAgIGlmKCFUUCkgcmV0dXJuOworICAgIG9iID0gcHJlc2VudChvYmpla3RlW2ldLFRQKTsKKyAgICB3aGlsZShvYikKKyAgICB7CisgICAgICBpZihxdWVyeV9vbmNlX2ludGVyYWN0aXZlKG9iKSkKKwkgIHsKKwkgICAgdGVsbF9vYmplY3QoVFAsQlMoIkR1IHNjaGVpbnN0IGplbWFuZGVuIGluIERlaW5lbSBJbnYgenUgaGFiZW4hXG4iCisJICAgICAiRGFzIHNvbGx0ZSBzaWNoIHZpZWxsZWljaHQgZWluIE1hZ2llciBhbnNjaGF1ZW4uIikpOworCSAgICBpLS07CisJICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIG9iLT5yZW1vdmUoMSk7CisgICAgICBpZihwcmVzZW50KG9iamVrdGVbaV0sVFApKTsKKyAgICAgICBvYiA9IHByZXNlbnQob2JqZWt0ZVtpXSxUUCk7CisgICAgfQorICAgIGktLTsKKworICB9Cit9CisKK2ludCBjbWRfd2FzY2hlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgdmVyYjsKKyAgdmVyYiA9IHF1ZXJ5X3ZlcmIoKTsKKyAgaWYoIWVudmlyb25tZW50KCkpIHJldHVybiAwOworICBpZiggIWVybGF1YnQoKSApCisgIHsKKyAgICAgIHdyaXRlKCJEdSBzb2xsdGVzdCBkZW4gQmVzaXR6ZXIgdmllbGxlaWNodCB1bSBFcmxhdWJuaXMgYml0dGVuLlxuIik7CisgICAgICByZXR1cm4gMTsKKyAgfQorICBpZihtZW1iZXIoZW52aXJvbm1lbnQoKS0+UXVlcnlQcm9wKCJoX2NvbW1hbmRzIiksdmVyYikgPT0gMCkKKyAgeworICAgIHdyaXRlKAorICAgICAiRHUgc3ByaW5nc3Qgc2NobmVsbCB1bnRlciBkaWUgRHVzY2hlIHVuZCB3YWVzY2hzdCBEaWNoIGdydWVuZGxpY2guXG4iKTsKKyAgICBzYXkodGhpc19wbGF5ZXIoKS0+TmFtZShXRVIpKyIgc3ByaW5ndCBzY2huZWxsIHVudGVyIGRpZSBEdXNjaGUuXG4iKTsKKyAgICB3YXNjaF9mdW4oKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICB3YXNjaF9mdW4oKTsKKyAgcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludCBjbWRfc2V0emVuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyBiZWY7CisgIG5vdGlmeV9mYWlsKCJNb2VjaHRlc3QgRHUgZWluZW4gV2FzY2hiZWZlaGwgc2V0emVuP1xuIisKKyAgICAiU3ludGF4OiBzc2V0eihlKSB3YXNjaGJlZmVobCBbYmVmZWhsXVxuIik7CisgIGlmKCFzdHIgfHwgIXN0cmluZ3Aoc3RyKSB8fCBzaXplb2Yoc3RyKSA9PSAwKSByZXR1cm4gMDsKKyAgc3NjYW5mKHN0ciwid2FzY2hiZWZlaGwgJXMiLGJlZik7CisgIGlmKCFiZWYpIHJldHVybiAwOworICBpZihiZWZbc2l6ZW9mKGJlZikgLi4gc2l6ZW9mKGJlZiktMV0gPT0gImUiKQorICAgYmVmID0gYmVmW3NpemVvZihiZWYpIC4uIHNpemVvZihiZWYpLTJdOworICBub3RpZnlfZmFpbCgiRGVyIEJlZmVobCBzdGVodCBzY2hvbiBhdWYgZGVyIExpc3RlLlxuIik7CisgIGlmKG1lbWJlcih3Y21kLGJlZikgIT0gLTEpIHJldHVybiAwOworICB3Y21kICs9ICgoe2JlZixiZWYrImUifSkpOworICBBZGRDbWQod2NtZCwiY21kX3dhc2NoZW4iKTsKKyAgd3JpdGUoQlMoIkR1IGhhc3QgZGllIEJlZmVobGUgIitiZWYrIiB1bmQgIitiZWYrImUgYW4gZGllIExpc3RlICIKKyAgICJhbmdlZnVlZ3QuIikpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjbWRfbG9lc2NoZW4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIGJlZjsKKyAgbm90aWZ5X2ZhaWwoIk1vZWNodGVzdCBEdSBlaW5lbiBXYXNjaGJlZmVobCBsb2VzY2hlbj9cbiIrCisgICAgIlN5bnRheDogc2xvZXNjaChlKSB3YXNjaGJlZmVobCBbYmVmZWhsXVxuIik7CisgIGlmKCFzdHIgfHwgIXN0cmluZ3Aoc3RyKSB8fCBzaXplb2Yoc3RyKSA9PSAwKSByZXR1cm4gMDsKKyAgc3NjYW5mKHN0ciwid2FzY2hiZWZlaGwgJXMiLGJlZik7CisgIGlmKCFiZWYpIHJldHVybiAwOworICBub3RpZnlfZmFpbCgiRGVyIEJlZmVobCBzdGVodCBnYXIgbmljaHQgYXVmIGRlciBMaXN0ZS5cbiIpOworICBpZihtZW1iZXIod2NtZCxiZWYpID09IC0xKSByZXR1cm4gMDsKKyAgd2NtZCAtPSAoKHtiZWZ9KSk7CisgIFJlbW92ZUNtZChiZWYpOworICB3cml0ZShCUygiRHUgaGFzdCBkaWUgQmVmZWhsZSAiK2JlZisiIHVuZCAiK2JlZisiZSB2b24gZGVyIExpc3RlICIKKyAgICJlbnRmZXJudC4iKSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxpc3RlKHN0cmluZyBzdHIpCit7CisgIHdyaXRlKCJEdSBoYXN0IGZvbGdlbmRlIEJlZmVobGUgYXVmIGRlciBXYXNjaGxpc3RlIHN0ZWhlbjpcbiIrCisgICBicmVha19zdHJpbmcoaW1wbG9kZSh3Y21kLCIsICIpLDc4LDMpKTsKKyAgcmV0dXJuIDE7Cit9CisKKworCisvLyBvZWZmbmVuIHVuZCBzY2hsaWVzc2VuIGF1c2JhdWVuLgordmFyYXJncyBpbnQgc2tvbW1hbmRvcyhzdHJpbmcgc3RyKQoreworICBub3RpZnlfZmFpbCggIkZlaGxlcjogRGllc2VyIEJlZmVobCBiZW5vZXRpZ3QgZWluZSBndWVsdGlnZSBPYmpla3QtSWQgYWxzIFBhcmFtZXRlci5cbiIKKyAgICArIkJlaXNwaWVsOiBza29tbWFuZG9zICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXG4iKTsKKyAgaWYoIXN0cikgcmV0dXJuIDA7CisgIGlmKHByZXNlbnQoc3RyKSE9VE8gKSAvLyBCaW4gaWNoIGdlbWVpbnQ/CisgICAgcmV0dXJuIDA7CisgIHdyaXRlKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgIHdyaXRlKCJBa3R1ZWxsZSBWZXJzaW9uOiAiK1F1ZXJ5UHJvcCgiY250X3ZlcnNpb25fc3RkIikrUXVlcnlQcm9wKCJjbnRfdmVyc2lvbl9vYmoiKSsiXG4iKTsKKyAgd3JpdGUoIEJTKE5hbWUoV0VSLDEpKyIga2FubiBudXIgaW4gZGllc2VtIFNlaGVyaGF1cyB2ZXJ3ZW5kZXQgd2VyZGVuLCAiCisgICAgKyJkYSAiK1F1ZXJ5UHJvbm91bihXRVIpKyIgc3BlemllbGwgZGFmdWVyIGdla2F1ZnQgd3VyZGUuICIrQ0FQKFF1ZXJ5UHJvbm91bihXRVIpKQorICAgICsiIHZlcmZ1ZWd0IHVlYmVyIGZvbGdlbmRlIEtvbW1hbmRvczoiKQorICAgICsiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICArInNlcmxhdWJlIFtPYmpla3QtSWRdIFtTcGllbGVybmFtZXxcImhhdXNmcmV1bmRlXCJ8XCJ6d2VpdGllc1wiXVxuIgorICAgICsiICBFcmxhdWJ0IFBlcnNvbmVuLCAiK25hbWUoV0VOLDEpKyIgbWl0enViZW51dHplbi5cbiIKKyAgICArIiAgc2VybGF1YmUgKyBPYmpla3QtSWQgKG9obmUgU3BpZWxlcm5hbWUvaGF1c2ZyZXVuZGUpXG4iCisgICAgKyIgIGxpc3RldCBhbGxlIFBlcnNvbmVuIG1pdCBadWdyaWZmIGF1ZiAiK25hbWUoV0VOLDEpKyJcblxuIgorICAgICsidmVyc2NoaWViZSBbT2JqZWt0LUlkXSBuYWNoIFtBdXNnYW5nXVxuIgorICAgICsiICBEYW1pdCBrYW5uc3QgRHUgIituYW1lKFdFTiwxKSsiIGlubmVyaGFsYiBEZWluZXMgU2VoZXJoYXVzZXMgdmVyc2NoaWViZW4uXG5cbiIKKyAgLy9TZWxldmVuIDA3LjEyLjIwMDUKKyAgICArInN2ZXJzdGVja2UgW09iamVrdC1JZF1cbiIKKyAgICArIiAgRGFtaXQgbWFjaHN0IER1ICIrbmFtZShXRU4sMSkrIiB1bnNpY2h0YmFyLlxuIgorICAgICsic2hvbGUgW09iamVrdC1JZF0gaGVydm9yXG4iCisgICAgKyIgIERhbWl0IG1hY2hzdCBEdSAiK25hbWUoV0VOLDEpKyIgd2llZGVyIHNpY2h0YmFyLlxuIgorICAvLyBCaXMgaGllcgorICAgICsiemVydHJ1ZW1tZXIgW09iamVrdC1JZF1cbiIKKyAgICArIiAgRGFtaXQgemVyc3RvZXJzdCBEdSAiK25hbWUoV0VOLDEpKyIuXG5cbiIpOworCisKKyAgaWYoIFF1ZXJ5UHJvcCgib2JqX2NtZCIpICkKKyAgICB3cml0ZSggUXVlcnlQcm9wKCJvYmpfY21kIikrIlxuIiApOworCisgIHdyaXRlKCJbT2JqZWt0LUlkXSBtdXNzIGVpbmUgZ3VlbHRpZ2UgSWQgc2VpbiwgaW4gZGllc2VtIEZhbGwgei5CLiAiCisgICAgICArUXVlcnlQcm9wKFBfSURTKVsxXSsiXG4iKTsKKyAgd3JpdGUoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKworCisgIHJldHVybiAxOworfQorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3phdWJlcmtpc3RlLmMgYi9kL3NlaGVyL2hhZXVzZXIvbW9lYmVsL3phdWJlcmtpc3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmNmY3NAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvemF1YmVya2lzdGUuYwpAQCAtMCwwICsxLDU2IEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYW1lIGRlcyBPYmplY3RzOiAgICBaYXViZXJraXN0ZQorLy8gTGV0enRlIEFlbmRlcnVuZzogICAgMTAuMDUuMjAwMgorLy8gTWFnaWVyOiAgICAgICAgICAgICAgVmFuaW9uCisvLyBXYXM6ICAgICAgICAgICAgICAgICBEaWUgSUQgZnVlciBkaWUgS29tcG9zIGRlciBaYXViZXJlciB1bWdlc3RlbGx0LgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI3ByYWdtYSBzdHJvbmdfdHlwZXMscnR0X2NoZWNrcworCisjaW5jbHVkZSAic2NocmFua2xhZGVuLmgiCisKKy8vIEZ1ZXIgZGllIElEcworI2luY2x1ZGUgIi9wL3phdWJlcmVyL3phdWJlcmVyLmgiCisKK2luaGVyaXQgTEFERU4oInN3aWZ0X3N0ZF9jb250YWluZXIiKTsKKworI2RlZmluZSBWRVJTSU9OX09CSiAiMyIKKworcHJvdGVjdGVkIHZvaWQgY3JlYXRlKCkKK3sKKyAgaWYgKCFjbG9uZXAoVE8pKSByZXR1cm47CisgIHN3aWZ0X3N0ZF9jb250YWluZXI6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfU0hPUlQsICJFaW5lIFphdWJlcmtpc3RlIik7CisgIFNldFByb3AoUF9MT05HLCBCUygKKyAgICAgIkVpbmUga2xlaW5lIEtpc3RlIGF1cyBCaXJuYmF1bWhvbHouIERhIGRpZXNlbSBzZWx0ZW5lbiBIb2x6IHNlbGJzdCAiCisgICAgKyJtYWdpc2NoZSBGYWVoaWdrZWl0ZW4gbmFjaGdlc2FndCB3ZXJkZW4sIGlzdCBlcyB3b2hsIGRhcyBpZGVhbGUgTWF0ZXJpYWwsICIKKyAgICArInVtIGRpZSB0ZWlsd2Vpc2UgZ2VmYWVocmxpY2hlbiBLb21wb25lbnRlbiBlaW5lcyBaYXViZXJlcnMgZGFyaW4gIgorICAgICsidW50ZXJ6dWJyaW5nZW4uIikrIkBAY250X3N0YXR1c0BAIik7CisgIEFkZElkKCh7InphdWJlcmtpc3RlIiwgImtpc3RlIn0pKTsKKyAgU2V0UHJvcCgiY250X3ZlcnNpb25fb2JqIiwgVkVSU0lPTl9PQkopOworICBTZXRQcm9wKFBfTkFNRSwgIlphdWJlcmtpc3RlIik7CisgIFNldFByb3AoUF9HRU5ERVIsIEZFTUFMRSk7CisgIFNldFByb3AoUF9XRUlHSFQsIDUwMDApOyAgICAgICAgIC8vIEdld2ljaHQgNSBLZworICBTZXRQcm9wKFBfTUFYX1dFSUdIVCwgMTAwMDAwMCk7ICAvLyBFcyBwYXNzZW4gZnVlciAxMDAwIGtnIFNhY2hlbiByZWluLgorICBTZXRQcm9wKFBfV0VJR0hUX1BFUkNFTlQsIDEwMCk7ICAvLyBEYWZ1ZXIgbWFjaHQgZXIgYXVjaCBuaXggbGVpY2h0ZXIgOikKKyAgU2V0UHJvcChQX01BWF9PQkpFQ1RTLCAxMDApOyAgICAgLy8gTWVociBzb2xsdGUgbmljaHQgc2VpbiwgbHQuIFRpYW1hay4KKyAgU2V0UHJvcChQX1ZBTFVFLCAwKTsgICAgICAgICAgICAgLy8gS2VpbiBtYXRlcmllbGxlciBXZXJ0LiBJc3QgZWggbmljaHQgdmVya2F1ZmJhci4KKyAgU2V0UHJvcChQX05PQlVZLCAxKTsgICAgICAgICAgICAgLy8gV2lyZCBpbSBMYWRlbiB6ZXJzdG9lcnQsIGZhbGxzIGVyIHZlcmthdWZ0IHdpcmQuCisgIFNldFByb3AoUF9OT0dFVCwgIkRhcyBnZWh0IG5pY2h0LiAiK05hbWUoV0VSLDEpKyIgaGFmdGV0IHdpZSBtYWdpc2NoIGFtIEJvZGVuLlxuIik7CisgIFNldFByb3AoUF9NQVRFUklBTCwgKHtNQVRfUEVBUl9XT09ELCBNQVRfTUlTQ19NQUdJQ30pICk7CisgIFNldFByb3AoUF9JTkZPLCAiVmVyc3VjaHMgbWFsIG1pdDogXCJza29tbWFuZG9zICIrUXVlcnlQcm9wKFBfSURTKVsxXSsiXCIgIVxuIik7CisKKyAgQUQoKHsiaG9seiIsICJiaXJuYmF1bWhvbHoifSksIEJTKCJGYXN0IGtvZW5udGVzdCBEdSBtZWluZW4sIGRhc3MgIituYW1lKFdFUiwxKQorICAgICsiIGxlYnQhIikpOworfQorCit2YXJhcmdzIGludCBQcmV2ZW50SW5zZXJ0KG9iamVjdCBvYikKK3sKKyAgLy8gS2VpbmUgWmF1YmVya29tcG8/IEhhdCBpbiBkaWVzZW0gQ29udGFpbmVyIG5peCB2ZXJsb3JlbiEKKyAgaWYoICFvYi0+aWQoWl9JRF9aVVRBVCkgKQorICB7CisgICAgd3JpdGUoIEJTKCJJbiAiK25hbWUoV0VOLDEpKyIga2FubnN0IER1IG51ciBaYXViZXJlci1Lb21wb25lbnRlbiBsZWdlbiEiKSk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZWxzZQorICAgIHJldHVybiA6OlByZXZlbnRJbnNlcnQob2IpOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3F1ZXVlLmMgYi9kL3NlaGVyL2hhZXVzZXIvcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjJjYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3F1ZXVlLmMKQEAgLTAsMCArMSw0MzMgQEAKKy8qCisgKiBxdWV1ZS5jIC0tIEVpbmUgU2NobGFuZ2UsIGFuIGRlciBtYW4gYW5zdGVoZW4ga2FubgorICoKKyAqIChjKSAxOTk0IFdhcmdvbkBNb3JnZW5HcmF1ZW4KKyAqCisgKi8KKworI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxkZWZpbmVzLmg+CisjaW5jbHVkZSA8d2l6bGV2ZWxzLmg+CisjaW5jbHVkZSA8bW92aW5nLmg+CisjaW5jbHVkZSAicXVldWUuaCIKKworI2RlZmluZSBUUCB0aGlzX3BsYXllcigpCisKK2luaGVyaXQgInN0ZC90aGluZy9tb3ZpbmciOworaW5oZXJpdCAic3RkL3Jvb20iOworCitzdGF0aWMgbWFwcGluZyBwZW9wbGVJblF1ZXVlOworc3RhdGljIG9iamVjdCBsYXN0TW92ZWQ7CisKKy8qIFNwaWVsZXJrb21tZW5kb3MgKi8KK3N0YXRpYyBpbnQgYW5zdGVsbGVuKHN0cmluZyBzdHIpOworc3RhdGljIGludCBkcmFlbmdlbG4oc3RyaW5nIHN0cik7CisKKy8qIFNwaWVsZXIgaW4gU2NobGFuZ2UgZWluZnVlZ2VuL2F1cyBTY2hsYW5nZSBlbnRmZXJuZW4gKi8KK3N0YXRpYyB2b2lkIGVucXVldWUob2JqZWN0IG9iKTsKK3ByaXZhdGUgdm9pZCBsZWF2ZVF1ZXVlKG9iamVjdCBvYiwgaW50IHNpbGVudCk7CisKK3ByaXZhdGUgb2JqZWN0ICpxdWV1ZWRQZW9wbGUoKTsKK3ByaXZhdGUgaW50IHF1ZXVlU2NhbigpOworcHJpdmF0ZSBvYmplY3QgYWRqdXN0KGludCB0aHJlc2gpOworCisvKiB3ZXJkZW4gYmVpICJzY2hsYWZlIGVpbiIgYnp3LiAiZW5kZSIgYXVmZ2VydWZlbiAqLwordm9pZCBCZWNvbWVzTmV0RGVhZChvYmplY3QgcGxheWVyKTsKK3ZvaWQgUGxheWVyUXVpdChvYmplY3QgcGxheWVyKTsKKworY3JlYXRlKCkKK3sKKyAgaWYgKElTX0JMVUUodGhpc19vYmplY3QoKSkpIHJldHVybjsKKworICA6OmNyZWF0ZSgpOworCisgIFNldFByb3AoIFBfSU5ET09SUywgMSApOworICBTZXRQcm9wKCBQX0xJR0hULCAxICk7CisgIFNldFByb3AoIFBfR0VOREVSLCBGRU1BTEUgKTsKKworICBTZXRQcm9wKCBQX1NIT1JULCAiRWluZSBTY2hsYW5nZSIgKTsKKyAgU2V0UHJvcCggUF9MT05HLCAiRHUgc2llaHN0IGVpbmUgU2NobGFuZ2UuXG4iICk7CisgIFNldFByb3AoIFBfSU5UX1NIT1JULCAiSW4gZGVyIFNjaGxhbmdlIiApOworICBTZXRQcm9wKCBQX0lOVF9MT05HLCAiRHUgc3RlaHN0IGluIGVpbmVyIFNjaGxhbmdlLlxuIiApOworICBTZXRQcm9wKCBQX05BTUUsICJTY2hsYW5nZSIgKTsKKyAgU2V0UHJvcCggUF9UUkFOU1BBUkVOVCwgMCApOworCisvLyBOZXR6dG90ZSB3ZXJkZW4gYmVpbSBkaXNjb25uZWN0ZW4gZWggYXVzIGRlciBTY2hsYW5nZSBlbnRmZXJudC4KKy8vIEhpZXJtaXQgd2lyZCBkaWUgQXVzZ2FiZSBkZXMgSGlud2Vpc2VzIHVudGVyZHJ1ZWNrdC4KKyAgU2V0UHJvcCggUF9ORVRERUFEX0lORk8sIDEgKTsKKworICBBZGRJZCggKHsgInF1ZXVlIiwgInNjaGxhbmdlIiB9KSApOworCisgIHBlb3BsZUluUXVldWUgPSAoWyBdKTsKKyAgbGFzdE1vdmVkID0gMDsKKworLy8gRGVmYXVsdHMgc2V0emVuCisgIFNldFByb3AoIFFfQ1lDTEVfVElNRSwgMTUgKTsKKyAgU2V0UHJvcCggUV9ERVNULCAiL2dpbGRlbi9hYmVudGV1cmVyIiApOworICBTZXRQcm9wKCBRX0xFTkdUSCwgMyApOworICBTZXRQcm9wKCBRX1NVU1BFTkQsIDAgKTsKKyAgU2V0UHJvcCggUV9NU0dTLCAoeyAiQEB3ZXJAQCBpc3QgYW4gZGVyIFJlaWhlISIsICJEdSBiaXN0IGpldHp0IGFuIGRlciBSZWloZSEiLAorICAgICAgIkRlciBOYWVjaHN0ZSBpc3QgYW4gZGVyIFJlaWhlLCB1bmQgZGllIGFuZGVyZW4gcnVlY2tlbiBhdWYuIiwKKyAgICAgICJEaWUgU2NobGFuZ2UgcnVlY2t0IHdlaXRlci4gU29nbGVpY2ggc3RlbGx0IHNpY2ggamVtYW5kIG5ldSBhbi4iIH0pICk7CisKKyAgQWRkU3BlY2lhbEV4aXQoICJyYXVzdHJldGVuIiwgInJhdXN0cmV0ZW4iICk7CisKKyAgQWRkQ21kKCAoeyAiYW5zdGVsbGVuIiwgInN0ZWxsIiwgInN0ZWxsZSIgfSksICJhbnN0ZWxsZW4iICk7CisgIEFkZENtZCggKHsgImRyYWVuZ2VsbiIsICJkcmFlbmdsZSIsICJkcmFlbmdlbCIsICJ2b3JkcmFlbmdlbG4iIH0pLCAiZHJhZW5nZWxuIiApOworfQorCitpbnQgY2xlYW5fdXAoaW50IGkpIHsgcmV0dXJuIDA7IH0KKworaW50CityZW1vdmUoKQoreworICBzdHJpbmcgKndlcjsKKyAgbWl4ZWQgcmF1czsKKyAgaW50IGk7CisKKyAgd2hpbGUoIHJlbW92ZV9jYWxsX291dCggInJvdGF0ZSIgKSAhPSAtMSApOworICB3aGlsZSggcmVtb3ZlX2NhbGxfb3V0KCAiZnVubnkiICkgIT0gLTEgKTsKKworICBpZiAoY2xvbmVwKHRoaXNfb2JqZWN0KCkpKSB7CisgICAgaWYgKCEocmF1cyA9IGVudmlyb25tZW50KCkpKQorICAgICAgcmF1cyA9ICIvZ2lsZGVuL2FiZW50ZXVyZXIiOworCisgICAgaWYgKGkgPSBzaXplb2Yod2VyID0gbV9pbmRpY2VzKHBlb3BsZUluUXVldWUpKSkgeworICAgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksICJEaWUgU2NobGFuZ2UgbG9lc3Qgc2ljaCBhdWYuXG4iICk7CisKKyAgICAgIHdoaWxlICgoLS1pKT4wKQorICBpZiAocGVvcGxlSW5RdWV1ZVt3ZXJbaV0sMV0pCisgICAgcGVvcGxlSW5RdWV1ZVt3ZXJbaV0sMV0tPm1vdmUocmF1cywgTV9HTyB8IE1fU0lMRU5UIHwgTV9OT19TSE9XKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDo6cmVtb3ZlKCk7Cit9CisKK3N0cmluZworX3F1ZXJ5X2xvbmcoKQoreworICBzdHJpbmcgcmV0LCBhZGQ7CisgIG1peGVkICpwZW9wbGUsIG9iOworICBjbG9zdXJlIG47CisKKyAgcGVvcGxlID0gZmlsdGVyKGFsbF9pbnZlbnRvcnkodGhpc19vYmplY3QoKSksICMnaW50ZXJhY3RpdmUvKicqLyk7CisKKyAgcmV0ID0gUXVlcnkoUF9MT05HKTsKKyAgYWRkID0gIkluIGRlciBTY2hsYW5nZSBzdGVoZW4gIiArIFF1ZXJ5UHJvcChRX0xFTkdUSCkgKyAiIExldXRlLiI7CisgIGlmIChzaXplb2YocGVvcGxlKSkgeworICAgIG4gPSBsYW1iZGEoICh7ICdvYiB9KSwgKHsjJ2NhbGxfb3RoZXIsICdvYiwgIk5hbWUiLCBXRVJ9KSApOworICAgIHBlb3BsZSA9IG1hcChwZW9wbGUsIG4pOworICAgIGFkZCArPSAiIFVudGVyIGFuZGVyZW0gc3RlaCI7CisgICAgaWYgKHNpemVvZihwZW9wbGUpID09IDEpCisgICAgICBhZGQgKz0gKCAidCBkb3J0ICIgKyBwZW9wbGVbMF0gKyAiLiIgKTsKKyAgICBlbHNlIHsKKyAgICAgIGFkZCArPSAoICJlbiBkb3J0ICIgKyBpbXBsb2RlKHBlb3BsZVswLi48Ml0sICIsICIpICsKKyAgICAgICAgICIgdW5kICIgKyBwZW9wbGVbPDFdICsgIi4iICk7CisgICAgfQorICB9CisgIHJldHVybiByZXQgKyBicmVha19zdHJpbmcoYWRkLCA3Nik7Cit9CisKK3N0cmluZworX3F1ZXJ5X2ludF9sb25nKCkKK3sKKyAgc3RyaW5nIHJldCwgYWRkOworICBpbnQgYWN0LCBjdXI7CisKKyAgcmV0ID0gUXVlcnkoUF9JTlRfTE9ORyk7CisgIGFkZCA9ICIiOworICBhY3QgPSBwZW9wbGVJblF1ZXVlW2dldHVpZChUUCksIDBdOworICBjdXIgPSBRdWVyeVByb3AoUV9MRU5HVEgpOworCisgIGlmIChhY3QgPT0gMCkKKyAgICBhZGQgKz0gKCAiRHUgYmlzdCBhbHMgbmFlY2hzdGVyIGFuIGRlciBSZWloZS4gSGludGVyIERpciIKKyAgICAgICsiIHN0ZWhlbiBub2NoICIgKyAoY3VyIC0gMSkgKyIgTGV1dGUgYW4uIiApOworICBlbHNlIHsKKyAgICBpZiAoYWN0ID09IDEpCisgICAgICBhZGQgKz0gIkVzIGlzdCBub2NoIGplbWFuZCB2b3IgRGlyIGRyYW4uIjsKKyAgICBlbHNlCisgICAgICBhZGQgKz0gKCAiRXMgc2luZCBub2NoICIgKyBhY3QgKyAiIExldXRlIHZvciBEaXIgZHJhbi4iICk7CisKKyAgICBpZiAoKGN1ciA9IGN1ciAtIGFjdCAtMSkgPiAwKSB7CisgICAgICBpZiAoY3VyID09IDEpCisgIGFkZCArPSAiIEVzIHN0ZWh0IG5vY2ggamVtYW5kIGhpbnRlciBEaXIuIjsKKyAgICAgIGVsc2UKKyAgYWRkICs9ICggIiBIaW50ZXIgRGlyIHN0ZWhlbiBub2NoICIgKyBjdXIgKyIgTGV1dGUgYW4uIiApOworICAgIH0KKyAgfQorICByZXR1cm4gcmV0ICsgYnJlYWtfc3RyaW5nKGFkZCwgNzYpOworfQorCitpbnQgX3F1ZXJ5X3FMZW5ndGgoKQoreworICByZXR1cm4gUXVlcnkoUV9MRU5HVEgpICsgc2l6ZW9mKGZpbHRlcihhbGxfaW52ZW50b3J5KHRoaXNfb2JqZWN0KCkpLCAjJ2ludGVyYWN0aXZlLyonKi8pKTsKK30KKworc3RhdGljIGludAorYW5zdGVsbGVuKHN0cmluZyBzdHIpCit7CisgIG9iamVjdCB0cDsKKyAgc3RyaW5nICpwYXJ0OworCisgIGlmIChxdWVyeV92ZXJiKCkgIT0gImFuc3RlbGxlbiIpIHsKKyAgICBub3RpZnlfZmFpbCggInN0ZWxsZSB3YXM/XG4iICk7CisgICAgaWYgKCFzdHIgfHwgc3RyID09ICIiKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBwYXJ0ID0gb2xkX2V4cGxvZGUoc3RyLCAiICIpOworICAgIGlmIChwYXJ0WzBdICE9ICJhbiIgJiYgcGFydFs8MV0gIT0gImFuIikgeworICAgICAgbm90aWZ5X2ZhaWwoICJTeW50YXg6IHN0ZWxsZSBhbiA8c2NobGFuZ2U+IGFuXG4iICk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFpZChpbXBsb2RlKHBhcnRbMS4uPDJdLCAiICIpKSkKKyAgICAgIHJldHVybiAwOworICB9CisgIGVucXVldWUoVFApOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcmF1c3RyZXRlbigpCit7CisgIGlmIChlbnZpcm9ubWVudCh0aGlzX29iamVjdCgpKSkgeworICAgIGxlYXZlUXVldWUoVFAsIDApOworICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitkcmFlbmdlbG4oc3RyaW5nIHN0cikKK3sKKyAgaW50IHByb2I7CisgIHN0cmluZyAqcGVvcGxlOworCisgIGlmIChlbnZpcm9ubWVudChUUCkgIT0gdGhpc19vYmplY3QoKSkKKyAgICByZXR1cm4gMDsKKworICBwcm9iID0gcmFuZG9tKDExKTsKKworICBpZiAoMTAgPT0gcHJvYikgeworICAgIHNheSggVFAtPk5hbWUoV0VSKSArICIgd2lsbCBzaWNoIHZvcmRyYWVuZ2Vsbi4gWnVyIFN0cmFmZSB3aXJkICIKKyAgICAgICtUUC0+UXVlcnlQcm9ub3VuKFdFUikgKyIgdm9uIGRlciBhdWYtXG4iCisgICAgICArImdlYnJhY2h0ZW4gTWVuZ2UgYXVzIGRlciBTY2hsYW5nZSBoaW5hdXNnZXdvcmZlbi4gRHUgZ3JpbnN0IERpciBlaW5zLlxuIiApOworICAgIHdyaXRlKCAiRHUgZHJhZW5nZWxzdCBEaWNoIHZvciwgd2lyc3QgYWJlciB2b24gZGVyIGF1ZmdlYnJhY2h0ZW4gIgorICAgICAgKyJNZW5nZSBhdXMgZGVyXG5TY2hsYW5nZSBoZXJhdXNnZWRyYWVuZ3QuXG4iICk7CisgICAgbGVhdmVRdWV1ZShUUCwgMCk7CisgIH0KKyAgZWxzZSBpZiAocHJvYiA8IDgpIHsKKyAgICBzYXkoIFRQLT5OYW1lKFdFUikgKyAiIHdpbGwgc2ljaCB2b3JkcmFlbmdlbG4uXG4iICk7CisgICAgd3JpdGUoICJEdSB3aWxsc3QgRGljaCB2b3JkcmFlbmdlbG4uXG4iICk7CisgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksIHNwcmludGYoIkVzIGtvbW1lbiBSdWZlIGF1ZjogJXNcbiIsCisgICAgICAgKHsgIkhlISBXYXMgc29sbCBkZW5uIGRhcz8gVW5lcmhvZXJ0ISIsCisgICAgIkFsc28gd2lya2xpY2ghIFVudmVyc2NoYWVtdGhlaXQgc293YXMhIiwKKyAgICAiLi4uc29sbCduIGRhcz8gTWlzdGJhY2tlISIsCisgICAgIkphdSwgc293ZWl0IGtvbW10cyBub2NoISBJY2ggZ2xhdWInIGVzIGdlaHQgbG9zISIsCisgICAgIldpZWRlciBtYWwgdHlwaXNjaCAiK1RQLT5RdWVyeVByb3AoUF9SQUNFU1RSSU5HKVtXRVJdKyIhIiwKKyAgICAiV2VubiBzaWNoIGRhcyBqZWRlciBlcmxhdWJlbiB3dWVyZGUuLi4iLAorICAgICJOZSwgbmUsIGRhcyBnZWh0IGFiZXIgbmljaHQhIE1hbCBsYW5nc2FtLCAiKworICAgICAgIChUUC0+UXVlcnlQcm9wKFBfR0VOREVSKT09TUFMRSA/ICJCdWVyc2NoY2hlbiI6IkZyb2xsZWluIikrIiEiLAorICAgICJQT0xJWkVJISBISUxGQUVFRUghISEgQWxzbyBkaWUgSnVnZW5kIHZvbiBoZXV0ZS4uLiIgfSlbcHJvYl0gKSk7CisgICAgc2F5KCBjYXBpdGFsaXplKFRQLT5RdWVyeVByb25vdW4oKSkrIiB1ZWJlcmxlZ3QgZXMgc2ljaCBhbmRlcnMuXG4iICk7CisgICAgd3JpdGUoICJEdSB1ZWJlcmxlZ3N0IGVzIERpciBhbmRlcnMuXG4iICk7CisgIH0KKyAgZWxzZSB7CisgICAgc2F5KCBUUC0+TmFtZShXRVIpICsgIiBkcmFlbmdlbHQgc2ljaCB2b3IuXG4iICk7CisgICAgd3JpdGUoICJEdSBkcmFlbmdlbHN0IERpY2ggdm9yLlxuIiApOworICAgIHByb2IgPSBwZW9wbGVJblF1ZXVlW2dldHVpZChUUCldOworICAgIG1fZGVsZXRlKHBlb3BsZUluUXVldWUsIGdldHVpZChUUCkpOworICAgIGZvcihwZW9wbGUgPSBtX2luZGljZXMocGVvcGxlSW5RdWV1ZSk7IHNpemVvZihwZW9wbGUpOyBwZW9wbGUgPSBwZW9wbGVbMS4uXSApIHsKKyAgICAgIGlmKHBlb3BsZUluUXVldWVbcGVvcGxlWzBdLDBdIDwgcHJvYikKKyAgICAgIHBlb3BsZUluUXVldWVbcGVvcGxlWzBdLDBdKys7CisgICAgfQorICAgIHBlb3BsZUluUXVldWUgKz0gKFsgZ2V0dWlkKFRQKSA6IDA7IFRQIF0pOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZW5xdWV1ZShvYmplY3Qgb2IpCit7CisgIGludCBpOworCisgIGlmIChlbnZpcm9ubWVudChvYikgPT0gdGhpc19vYmplY3QoKSkgeworICAgIHNheShvYi0+TmFtZShXRVIpICsgIiBzdGVsbHQgc2ljaCB3aWVkZXIgaGludGVuIGFuLlxuIiwgb2IgKTsKKyAgICB0ZWxsX29iamVjdChvYiwgIkR1IHN0ZWxsc3QgRGljaCB3aWVkZXIgaGludGVuIGFuLlxuIiApOworCisgICAgaSA9IHBlb3BsZUluUXVldWVbZ2V0dWlkKG9iKSwwXTsKKyAgICBtX2RlbGV0ZShwZW9wbGVJblF1ZXVlLCBnZXR1aWQob2IpKTsKKyAgICBhZGp1c3QoaSk7CisgICAgcGVvcGxlSW5RdWV1ZSArPSAoWyBnZXR1aWQob2IpIDogUXVlcnlQcm9wKFFfTEVOR1RIKS0xOyBvYiBdKTsKKyAgfQorICBlbHNlIHsKKyAgICBwZW9wbGVJblF1ZXVlICs9IChbIGdldHVpZChvYikgOiBRdWVyeVByb3AoUV9MRU5HVEgpOyBvYiBdKTsKKyAgICBvYi0+bW92ZSh0aGlzX29iamVjdCgpLCBNX05PQ0hFQ0ssIDAsICJzdGVsbHQgc2ljaCBhbiAiK25hbWUoV0VNKSsiIGFuIiwKKyAgICAgICJzdGVsbHQgc2ljaCBoaW50ZW4gYW4iKTsKKyAgfQorICBpZiAoZmluZF9jYWxsX291dCgicm90YXRlIikgPT0gLTEpCisgICAgY2FsbF9vdXQoInJvdGF0ZSIsIFF1ZXJ5UHJvcChRX0NZQ0xFX1RJTUUpKTsKK30KKworcHJpdmF0ZSB2b2lkCitsZWF2ZVF1ZXVlKG9iamVjdCBvYiwgaW50IHNpbGVudCkKK3sKKyAgaW50IGk7CisKKyAgaWYgKHNpbGVudCkKKyAgICBvYi0+bW92ZShlbnZpcm9ubWVudCh0aGlzX29iamVjdCgpKSwgTV9OT0NIRUNLIHwgTV9TSUxFTlQpOworICBlbHNlCisgICAgb2ItPm1vdmUoZW52aXJvbm1lbnQodGhpc19vYmplY3QoKSksIE1fTk9DSEVDSywgMCwgInZlcmxhZXNzdCBkaWUgU2NobGFuZ2UiLAorICAgICJ2ZXJsYWVzc3QgIituYW1lKFdFTikrIiB1bmQgc3RlaHQgamV0enQgbmViZW4gRGlyIiApOworCisgIGkgPSBwZW9wbGVJblF1ZXVlW2dldHVpZChvYiksIDBdOworCisgIG1fZGVsZXRlKHBlb3BsZUluUXVldWUsIGdldHVpZChvYikpOworCisgIGlmIChzaXplb2YocGVvcGxlSW5RdWV1ZSkpCisgICAgYWRqdXN0KGkpOworICBlbHNlIHsKKyAgICB3aGlsZShyZW1vdmVfY2FsbF9vdXQoInJvdGF0ZSIpICE9IC0xKTsKKyAgICB3aGlsZShyZW1vdmVfY2FsbF9vdXQoImZ1bm55IikgIT0gLTEpOworICB9Cit9CisKK3ByaXZhdGUgaW50CitxdWV1ZVNjYW4oKQoreworICBzdHJpbmcgKnBlb3A7CisgIG9iamVjdCBhY3Q7CisgIGludCBpLCBhOworCisgIHBlb3AgPSBtX2luZGljZXMocGVvcGxlSW5RdWV1ZSk7CisKKyAgZm9yIChpPXNpemVvZihwZW9wKS0xOyBpPj0wOyBpLS0pIHsKKyAgICBpZiAoIW9iamVjdHAoYWN0ID0gcGVvcGxlSW5RdWV1ZVtwZW9wW2ldLDFdKSB8fAorICAoZW52aXJvbm1lbnQoYWN0KSAhPSB0aGlzX29iamVjdCgpKSkgeworICAgICAgYSA9IHBlb3BsZUluUXVldWVbcGVvcFtpXSwgMF07CisgICAgICBtX2RlbGV0ZShwZW9wbGVJblF1ZXVlLCBwZW9wW2ldKTsKKyAgICAgIGFkanVzdChhKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gc2l6ZW9mKHBlb3BsZUluUXVldWUpOworfQorCitwcml2YXRlIG9iamVjdAorYWRqdXN0KGludCB0aHJlc2gpCit7CisgIHN0cmluZyAqcGVvcDsKKyAgb2JqZWN0IHJldDsKKyAgaW50IGNudCwgaTsKKworICByZXQgPSAwOworICBwZW9wID0gbV9pbmRpY2VzKHBlb3BsZUluUXVldWUpOworCisgIGZvciAoaT1zaXplb2YocGVvcCktMTsgaT49MDsgaS0tKSB7CisgICAgY250ID0gcGVvcGxlSW5RdWV1ZVtwZW9wW2ldLDBdOworICAgIGlmIChjbnQgPiB0aHJlc2gpCisgICAgICBjbnQtLTsKKyAgICBpZiAoY250IDwgMCkKKyAgICAgIHJldCA9IHBlb3BsZUluUXVldWVbcGVvcFtpXSwxXTsKKyAgICBwZW9wbGVJblF1ZXVlW3Blb3BbaV0sMF0gPSBjbnQ7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworcm90YXRlKCkKK3sKKyAgb2JqZWN0IGljaDsKKyAgc3RyaW5nIG90aCwgKm1zZ3M7CisgIGludCByb3RhdGluZywgaW5EZXN0OworCisgIHJvdGF0aW5nID0gMTsKKworICBpZiAoUXVlcnlQcm9wKFFfU1VTUEVORCkpIHsKKyAgICBpZiAobGFzdE1vdmVkKSB7CisgICAgICByb3RhdGluZyA9IDA7CisgICAgICBpbkRlc3QgPSAob2JqZWN0X25hbWUoZW52aXJvbm1lbnQobGFzdE1vdmVkKSkgPT0gUXVlcnlQcm9wKFFfREVTVCkpOworICAgICAgaWYgKCFpbnRlcmFjdGl2ZShsYXN0TW92ZWQpIHx8ICFpbkRlc3QgKQorICByb3RhdGluZyA9IDE7CisgICAgICBpZiAoaW50ZXJhY3RpdmUobGFzdE1vdmVkKSAmJiBpbkRlc3QgJiYgZW52aXJvbm1lbnQoKSAmJiBxdWVyeV9pZGxlKGxhc3RNb3ZlZCkgPiAxODApIHsKKyAgdGVsbF9vYmplY3QobGFzdE1vdmVkLCAiRHUgd2lyc3QgcmF1c2dld29yZmVuLlxuIik7CisgIGxhc3RNb3ZlZC0+bW92ZShlbnZpcm9ubWVudCgpLCBNX0dPLCAwLCAiaWRsZXQgaGVyZWluIik7CisgIHJvdGF0aW5nID0gMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKHJvdGF0aW5nKSB7CisgICAgcXVldWVTY2FuKCk7CisgICAgbXNncyA9IFF1ZXJ5UHJvcChRX01TR1MpOworICAgIGlmIChpY2ggPSBhZGp1c3QoLTEpKSB7CisgICAgICBvdGggPSBpbXBsb2RlKGV4cGxvZGUobXNnc1tRTVNHX09USEVSXSwgIkBAd2VyQEAiKSwgaWNoLT5uYW1lKFdFUikgKTsKKyAgICAgIG90aCA9IGltcGxvZGUoZXhwbG9kZShvdGgsICJAQHdlc3NlbkBAIiksIGljaC0+bmFtZShXRVNTRU4pICk7CisgICAgICBvdGggPSBpbXBsb2RlKGV4cGxvZGUob3RoLCAiQEB3ZW1AQCIpLCBpY2gtPm5hbWUoV0VNKSApOworICAgICAgb3RoID0gaW1wbG9kZShleHBsb2RlKG90aCwgIkBAd2VuQEAiKSwgaWNoLT5uYW1lKFdFTikgKTsKKyAgICAgIHRlbGxfcm9vbSh0aGlzX29iamVjdCgpLCBjYXBpdGFsaXplKGJyZWFrX3N0cmluZyhvdGgsIDc4KSksICh7IGljaCB9KSApOworICAgICAgdGVsbF9vYmplY3QoaWNoLCBicmVha19zdHJpbmcobXNnc1tRTVNHX01FXSwgNzgpICk7CisgICAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgYnJlYWtfc3RyaW5nKG1zZ3NbUU1TR19PVVRTSURFXSwgNzgpICk7CisgICAgICBpY2gtPm1vdmUoUXVlcnlQcm9wKFFfREVTVCksIE1fR08pOworICAgICAgbGFzdE1vdmVkID0gaWNoOworICAgICAgbV9kZWxldGUocGVvcGxlSW5RdWV1ZSwgZ2V0dWlkKGljaCkpOworICAgICAgaWYgKCFzaXplb2YocGVvcGxlSW5RdWV1ZSkpCisgIHJldHVybjsKKyAgICB9CisgICAgZWxzZQorICAgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksIGJyZWFrX3N0cmluZyhtc2dzW1FNU0dfREVGQVVMVF0sIDc4KSApOworICB9CisKKyAgaWYgKHJhbmRvbSgxMDApIDwgMjApCisgICAgY2FsbF9vdXQoImZ1bm55IiwgcmFuZG9tKFF1ZXJ5UHJvcChRX0NZQ0xFX1RJTUUpKSApOworCisgIGNhbGxfb3V0KCJyb3RhdGUiLCBRdWVyeVByb3AoUV9DWUNMRV9USU1FKSk7Cit9CisKK2Z1bm55KCkKK3sKKyAgc3RyaW5nIG07CisKKyAgc3dpdGNoKHJhbmRvbSg3KSkgeworICAgIGNhc2UgMDoKKyAgICAgIG09ICJKZW1hbmQgdm9yIERpciBsYWVzc3QgdGllcmlzY2ggZWluZW4gZmFocmVuLiBTZWx0c2FtZXJ3ZWlzZSB3aXJmdCBtYW5cbiIKKyAgKyJhYmVyIERpciBtaXNzYmlsbGlnZW5kZSBCbGlja2UgenUuXG4iOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgbT0gIlZvbiBoaW50ZW4gZHJhZW5nZWx0IHdlciEgV3VldGVuZCBkcmVoc3QgRHUgRGljaCB1bSwgc2NoYXVzdCBob2NoLCBzY2hhdXN0XG4iCisgICsiaG9laGVyLCBzY2hhdXN0IG5vY2ggaG9laGVyLi4uIHVuZCBzY2hvbiBpc3QgRGVpbmUgV3V0IHZlcmZsb2dlbiFcbiI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICBtPSAiVm9yIExhbmdld2VpbGUgcG9wZWx0IGplbWFuZCB2b3IgRGlyIGluIGRlciBOYXNlLiBEYXMgcXVpZXRzY2hlbmRlIEdlLVxuIgorICArInJhZXVzY2ggbGFlc3N0IERpciBkYXMgQmx1dCBpbiBkZW4gQWRlcm4gZ2VmcmllcmVuLlxuIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgIG09ICJFaW4gZmxpZWdlbmRlciBIYWVuZGxlciBsYW5kZXQgbmViZW4gZGVyIFNjaGxhbmdlIHVuZCBiaWV0ZXQgS3VyendhcmVuXG4iCisgICsiZmVpbC4gRGEgYWJlciBuaWVtYW5kIGV0d2FzIGthdWZlbiB3aWxsLCBoZWJ0IGVyIGt1cnogZGFyYXVmIHdpZWRlciBhYlxuIgorICArInVuZCBmbGllZ3QgenUgZWluZXIgYW5kZXJlbiBTY2hsYW5nZSwgdW0gZG9ydCBzZWluIEdsdWVjayB6dSB2ZXJzdWNoZW4uXG4iOworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgbT0gIlZvbSBoaW50ZXJlbiBFbmRlIGRlciBTY2hsYW5nZSBzaWNrZXJ0IGRhcyBHZXJ1ZWNodCBkdXJjaCwgZGFzcyBkZXJcbiIKKyAgKyJTY2hhbHRlciBoZXV0ZSBnZXNjaGxvc3NlbiBpc3QuIER1IGhvZmZzdCBpbnN0YWVuZGlnLCBkYXNzIGRpZXMgbmljaHRcbiIKKyAgKyJ3YWhyIGlzdC5cbiI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDU6CisgICAgICBtPSAiRmFzemluaWVydCBiZW9iYWNodGVzdCBEdSwgd2llIGVpbmUgU3Bpbm5lIHp3aXNjaGVuIERlaW5lbSBWb3JkZXJtYW5uIHVuZFxuIgorICArImRlciBXYW5kIGVpbiBrdW5zdHZvbGxlcyBOZXR6IHNwaW5udC5cbiI7CisgICAgICBicmVhazsKKyAgICBjYXNlIDY6CisgICAgICBtPSAiQm9haCwgaXNzIGRhdCBsYW5nd2VpbGljaC4uLlxuIjsKKyAgICAgIGJyZWFrOworICB9CisgIHRlbGxfcm9vbSh0aGlzX29iamVjdCgpLCBtKTsKK30KKwordm9pZAorQmVjb21lc05ldERlYWQob2JqZWN0IHBsYXllcikKK3sKKyAgaWYocHJlc2VudChwbGF5ZXIsdGhpc19vYmplY3QoKSkpbGVhdmVRdWV1ZShwbGF5ZXIsIDApOworfQorCit2b2lkCitQbGF5ZXJRdWl0KG9iamVjdCBwbGF5ZXIpCit7CisgIGlmKHByZXNlbnQocGxheWVyLHRoaXNfcGxheWVyKCkpKWxlYXZlUXVldWUocGxheWVyLCAxKTsKK30KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3F1ZXVlLmggYi9kL3NlaGVyL2hhZXVzZXIvcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjIyODNlCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3F1ZXVlLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfUVVFVUVfSF8KKyNkZWZpbmUgX1FVRVVFX0hfCisKKy8vIFplaXQsIGJpcyBkZXIgbmFlY2hzdGUgZHJhbiBpc3QgKERlZmF1bHQ6IDE1IFNla3VuZGVuKQorI2RlZmluZSBRX0NZQ0xFX1RJTUUgInFDeWNsZVRpbWUiCisKKy8vIFppZWxyYXVtIGRlciBTY2hsYW5nZSAoRGVmYXVsdDogIi9naWxkZW4vYWJlbnRldXJlciIpCisjZGVmaW5lIFFfREVTVAkgICAgICJxRGVzdCIKKworLy8gTGFlbmdlIGRlciBTY2hsYW5nZSAoRGVmYXVsdDogMykKKyNkZWZpbmUgUV9MRU5HVEggICAgICJxTGVuZ3RoIgorCisvLyBGYWxscyB1bmdsZWljaCBOdWxsLCB3aXJkIGdld2FydGV0LCBiaXMgZGVyIHp1bGV0enQgYmV3ZWd0ZSBTcGllbGVyCisvLyBkZW4gWmllbHJhdW0gdmVybGFzc2VuIGhhdCwgYmV2b3IgZXMgaW4gZGVyIFNjaGxhbmdlIHdlaXRlcmdlaHQKKyNkZWZpbmUgUV9TVVNQRU5EICAgICJxU3VzcGVuZCIKKworLy8gTWVsZHVuZ2VuLCBkaWUgYmVpbSBBdWZydWVja2VuIGF1c2dlZ2ViZW4gd2VyZGVuLiBWaWVyZWxlbWVudGlnZXMgQXJyYXk6CisvLyAxLiBNZWxkdW5nLCB3ZW5uIGVpbiBTcGllbGVyIGFuIGRlciBSZWloZSBpc3QKKy8vIDIuIE1lbGR1bmcgZnVlciBkZW4gU3BpZWxlciwgZGVyIGFuIGRlciBSZWloZSBpc3QKKy8vIDMuIE1lbGR1bmcsIHdlbm4gZWluIFNjaGxhbmdlc3RlaGVyIGFuIGRlciBSZWloZSBpc3QKKy8vIDQuIE1lbGR1bmcgZnVlciBMZXV0ZSBhdXNzZXJoYWxiIGRlciBTY2hsYW5nZQorLy8gSW4gZGllIGVyc3RlIE1lbGR1bmcga2FubiBtaXQgQEB3ZXJAQCwgQEB3ZXNzZW5AQCwgQEB3ZW1AQCB1bmQgQEB3ZW5AQCBkZXIKKy8vIE5hbWUgZGVzIFNwaWVsZXJzIGVpbmdlYXJiZWl0ZXQgd2VyZGVuLgorLy8gKERlZmF1bHQ6ICh7ICJAQHdlckBAIGlzdCBhbiBkZXIgUmVpaGUhIiwgIkR1IGJpc3QgamV0enQgYW4gZGVyIFJlaWhlISIsCisvLyAgICAiRGVyIE5hZWNoc3RlIGlzdCBhbiBkZXIgUmVpaGUsIHVuZCBkaWUgYW5kZXJlbiBydWVja2VuIGF1Zi4iLAorLy8gICAgIkRpZSBTY2hsYW5nZSBydWVja3Qgd2VpdGVyLiBTb2dsZWljaCBzdGVsbHQgc2ljaCBqZW1hbmQgbmV1IGFuLiIgfSkgKQorI2RlZmluZSBRX01TR1MJICAgICAicU1zZ3MiCisKKyNkZWZpbmUgUU1TR19PVEhFUiAgIDAKKyNkZWZpbmUgUU1TR19NRSAgICAgIDEKKyNkZWZpbmUgUU1TR19ERUZBVUxUIDIKKyNkZWZpbmUgUU1TR19PVVRTSURFIDMKKworI2VuZGlmIC8qIF9RVUVVRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3JhdW0uYyBiL2Qvc2VoZXIvaGFldXNlci9yYXVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkMGM1NQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9yYXVtLmMKQEAgLTAsMCArMSwxODQwIEBACisvLyAgcmF1bS5jICAtLSBEYXMgUm9oZ2VydWVzdCBlaW5lcyBTZWhlcmhhdXNlcy4KKy8vCisvLyAgR3J1bmRvYmpla3QgKGMpIDE5OTQgQm9pbmdATW9yZ2VuR3JhdWVuCisvLyAgQWJzY2hsaWVzc2VuIHVuZCBSYXVzd2VyZmVuIHZvbiBKb2YKKy8vICBGdWVyIEFlbmRlcnVuZ2VuIGFiIGRlbSAwNi4xMC45NCB2ZXJhbnR3b3J0bGljaDogV2FyZ29uCisvLyAgQWIgMDMuMDIuOTggV3VyemVsCisvLworLy8gJElkOiByYXVtLmMsdiAxLjUgMjAwMy8xMS8xNSAxNDowMzo1OCBtdWQgRXhwICQKKyNwcmFnbWEgc3Ryb25nX3R5cGVzLHJ0dF9jaGVja3MKKworI2luY2x1ZGUgImhhdXMuaCIKKworaW5oZXJpdCAiL3N0ZC9yb29tIjsKK2luaGVyaXQgVVNFUkNNRDsgICAgLy8gc2VsYnN0ZGVmaW5pZXJ0ZSBLb21tYW5kb3MKK2luaGVyaXQgTE9TQTsgICAgICAgLy8gTG9hZCgpIHVuZCBTYXZlKCkKK2luaGVyaXQgIi9tYWlsL25lZGl0IjsKKworI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxkZWZpbmVzLmg+CisjaW5jbHVkZSA8bW92aW5nLmg+CisKK3N0YXRpYyBtaXhlZCBkZXRhaWw7CitzdGF0aWMgc3RyaW5nIG93bmVyOworc3RhdGljIGludCBmbGFnLCBjc2F2ZWQ7CitzdGF0aWMgaW50IHJhdW1OcjsKK3N0YXRpYyBzdHJpbmcgKmF1c2dhZW5nZSA9ICh7ICJvYmVuIiwgIm5vcmRlbiIsICJub3Jkb3N0ZW4iLCAib3N0ZW4iLCAic3VlZG9zdGVuIiwKKyAgICAgICAgICAgICAgICAgICJ1bnRlbiIsICJzdWVkZW4iLCAic3VlZHdlc3RlbiIsICJ3ZXN0ZW4iLCAibm9yZHdlc3RlbiIgfSk7CisKKy8vIFByb3RvdHlwZXMgZnVlciBGdW5rdGlvbmVuIGF1cyBMT1NBCit2YXJhcmdzIHZvaWQgU2F2ZShpbnQgY3J1bmNoZWQpOwordm9pZCBMb2FkKCk7CisKKy8vIFByb3RvdHlwZQorLy8gRmFsbHMgbm9ldGlnLCBtYWNoZSBlaW5lbiBOb3RhdXNnYW5nLCBmYWxscyBuaWNodCBsb2VzY2hlIHZvcmhhbmRlbmVuCit2b2lkIG1ha2VfZW1lcmdlbmN5X2V4aXQoKTsKKworLy8gZXJzZXR6dCBAQCBkdXJjaCAqKgorcHJpdmF0ZSBzdHJpbmcgbm9ybXN0cihzdHJpbmcgc3RyKQoreworICByZXR1cm4gaW1wbG9kZShleHBsb2RlKHN0ciwiQEAiKSwiKioiKTsKK30KKworLy8gbGllZmVydCBrb21tYWdldHJlbm50ZSBUZWlsZSBvaG5lIHp1c2FldHpsaWNoZSBMZWVyemVpY2hlbgorLy8gIkJsYSBibHViYiAsICBmb28gYmFyLGJsdWJiZXIiID0+ICh7ICJCbGEgYmx1YmIiLCAiZm9vIGJhciIsICJibHViYmVyIiB9KQorcHJpdmF0ZSBzdHJpbmcgKmJyayhzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKnQxOworCisgIHQxID0gZXhwbG9kZShzdHIsICIsIik7CisgIG1hcCh0MSwgIyd0cmltIC8qJyovKTsKKyAgcmV0dXJuIHQxOworfQorCisvLyB0ZXN0ZSBCZWZlaGwKK3ByaXZhdGUgaW50IGJlZkNoZWNrKHN0cmluZyBiZWYpCit7CisgIC8vIEJlZmVobCBlbnRoYWVsdCBMZWVyemVpY2hlbiA9PiByZXR1cm4gMAorICBpZiAobWVtYmVyKGJlZiwgJyAnKSA+IC0xKQorICAgIHJldHVybiAwOworCisgIC8vIEJlZmVobCBpc3QgYmVyZWl0cyBLb21tYW5kbyAoYXVzc2VyIE9lZmZuZW4vU2NobGllc3NlbikKKyAgLy8gb2RlciBSaWNodHVuZyBpbmNsdXNpdmUgInJhdXMiIGluIGRpZSBrZWluIEF1c2dhbmcgZnVlaHJ0CisgIC8vID0+IHJldHVybiAwCisgIGlmIChtZW1iZXIobV9pbmRpY2VzKFF1ZXJ5UHJvcChQX0NPTU1BTkRTKSkgLQorICAgICAgICAgICAgICAgICAgICAgICAoeyJvZWZmbmUiLCJzY2hsaWVzcyIsInNjaGxpZXNzZSJ9KSwgYmVmKSA+IC0xCisgICAgICB8fCAobWVtYmVyKGF1c2dhZW5nZSsoeyJyYXVzIn0pLCBiZWYpID4gLTEKKyAgICAgICAgICAmJiBtZW1iZXIobV9pbmRpY2VzKFF1ZXJ5UHJvcChQX0VYSVRTKSksIGJlZikgPT0gLTEpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCisvLyBUZXN0IGF1ZiBIYXVzYmVzaXR6ZXIKK2ludCB0cF9vd25lcl9jaGVjaygpCit7CisgIGlmKGdldHVpZCh0aGlzX3BsYXllcigpKSAhPSBvd25lcikKKyAgeworICAgIG5vdGlmeV9mYWlsKCAiRGFzIGlzdCBuaWNodCBEZWluIEhhdXMhXG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8vIFRlc3QgYXVmIEhhdXNiZXNpdHplciBvZGVyIFBlcnNvbiBtaXQgRXJsYXVibmlzCitpbnQgYWxsb3dlZF9jaGVjayhvYmplY3QgX3Rlc3QpCit7CisgICBzdHJpbmcgKmV4dDsKKworICAgZXh0ID0gVkVSV0FMVEVSLT5IYXVzUHJvcChvd25lciwgSFBfQUxMT1dFRCkgKyAoeyBjYXBpdGFsaXplKG93bmVyKSB9KTsKKyAgIGlmKG1lbWJlcihleHQsIGNhcGl0YWxpemUoZ2V0dWlkKF90ZXN0KSkpIDwgMCkKKyAgIHsKKyAgICAgcmV0dXJuIDA7CisgICB9CisgICBlbHNlCisgICB7CisgICAgIHJldHVybiAxOworICAgfQorfQorCisvLyBGdW5rdGlvbiBlcnNldHp0IGR1cmNoIHRwX293bmVyX2NoZWNrKCkgdW5kIGFsbG93ZWRfY2hlY2sob2JqZWN0IF90ZXN0KQorLy8gZmFsbHMgYWxsb3dlZCA9PSAwID0+IHRlc3Qgb2IgdGhpc19wbGF5ZXIoKSBIYXVzYmVzaXR6ZXIKKy8vIGZhbGxzIGFsbG93ZWQgIT0gMCA9PiB0ZXN0IG9iIGFsbG93ZWQvdGhpc19wbGF5ZXIoKSBIYXVzYmVzaXR6ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgICBvZGVyIFBlcnNvbiBtaXQgRXJsYXVibmlzCitkZXByZWNhdGVkIHZhcmFyZ3MgaW50IG93bmVyX2NoZWNrKG1peGVkIGFsbG93ZWQpCit7CisgIG9iamVjdCB0ZXN0OworCisgIGlmKG9iamVjdHAoYWxsb3dlZCkgJiYgcXVlcnlfb25jZV9pbnRlcmFjdGl2ZShhbGxvd2VkKSkKKyAgeworICAgIC8vIFBhcmFtZXRlciBpc3QgU3BpZWxlcgorICAgIHRlc3QgPSBhbGxvd2VkOworICB9CisgIGVsc2UKKyAgeworICAgIC8vIGFuc29uc3RlbiBUUAorICAgIHRlc3QgPSB0aGlzX3BsYXllcigpOworICB9CisgIAorICBpZihhbGxvd2VkKQorICB7CisgICAgLy8gVGVzdCBhdWYgSGF1c2Jlc2l0emVyIG9kZXIgUGVyc29uIG1pdCBFcmxhdWJuaXMKKyAgICBpZighYWxsb3dlZF9jaGVjayh0ZXN0KSkKKyAgICB7CisgICAgICBub3RpZnlfZmFpbCggIkRhcyBkYXJmc3QgRHUgaW4gZGllc2VtIEhhdXMgbmljaHQhXG4iICk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgZWxzZSBpZihnZXR1aWQodGVzdCkgIT0gb3duZXIpCisgIHsKKyAgICAvLyBUZXN0IGF1ZiBIYXVzYmVzaXR6ZXIKKyAgICBub3RpZnlfZmFpbCggIkRhcyBpc3QgbmljaHQgRGVpbiBIYXVzIVxuIiApOworICAgIHJldHVybiAwOworICB9CisgIC8vIEVybGF1Ym5pcyBPSworICByZXR1cm4gMTsKK30KKworLy8gR2VzdGFsdGV0IE1lbGR1bmcgYXVzIFRleHRlbiBpbiBlaW5lbSBBcnJheToKKy8vIGFycmF5IGxlZXIgICAgICAgICAgICAgICAtPiBtZWxkZSBUZXh0IGluIG5vbmUKKy8vIGFycmF5IGhhdCBlaW4gRWxlbWVudCAgICAtPiBtZWxkZSBUZXh0IGluIG9uZSB1bmQgZXJzZXR6ZSAlcyBkdXJjaCBFbGVtZW50CisvLyBhcnJheSBoYXQgdmllbGUgRWxlbWVudGUgLT4gbWVsZGUgVGV4dCBpbiBtYW55IHVuZCBkYW5hY2gKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0aWVydGUgQXVmemFlaGx1bmcgZGVyIEVsZW1lbnRlCisvLyBmbGFnIGdlc2V0enRlcyBCaXQgMjogQXVmemFlaGx1bmcgbnVyIG1pdCBLb21tYSwga2VpbiAndW5kJworLy8gZmxhZyBnZXNldHp0ZXMgQml0IDE6IE1lbGR1bmcgd2lyZCBhbHMgU3RyaW5nIHJldHVybnQsIHNvbnN0IHBlciB3cml0ZSBhdXNnZWdlYmVuCit2YXJhcmdzIHN0cmluZyBhcnJfb3V0KG1peGVkIGFycmF5LCBzdHJpbmcgbm9uZSwgc3RyaW5nIG9uZSwgc3RyaW5nIG1hbnksIGludCBmbGFnKQoreworICBzdHJpbmcgdG1wLCBsYXN0c2VwOworICBtaXhlZCBhcnI7CisKKyAgc3dpdGNoKHNpemVvZihhcnJheSkpCisgIHsKKyAgICBjYXNlIDA6CisgICAgICB0bXAgPSBub25lOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgdG1wID0gc3ByaW50ZihvbmUsIGFycmF5WzBdKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICB0bXAgPSBtYW55OworICAgICAgYXJyID0gc29ydF9hcnJheShhcnJheSwgIyc+IC8qJyovKTsKKyAgICAgIGxhc3RzZXAgPSAoZmxhZyAmIDIpID8gIiwgIiA6ICIgdW5kICI7CisgICAgICB0bXAgKz0gQ291bnRVcChhcnIsICIsICIsIGxhc3RzZXApKyIuIjsKKyAgICAgIGJyZWFrOworICB9CisgIGlmIChmbGFnICYgMSkKKyAgICByZXR1cm4oYnJlYWtfc3RyaW5nKHRtcCwgNzUsIDAsIDEpKTsKKyAgZWxzZQorICAgIHdyaXRlKGJyZWFrX3N0cmluZyh0bXAsIDc1LCAwLCAxKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3Byb3RlY3RlZCB2b2lkIGNyZWF0ZSgpCit7CisgIGlmICghY2xvbmVwKHRoaXNfb2JqZWN0KCkpICYmIG9iamVjdF9uYW1lKHRoaXNfb2JqZWN0KCkpPT0oUkFVTSkpIHsKKyAgICAgIHNldF9uZXh0X3Jlc2V0KC0xKTsKKyAgICAgIHJldHVybjsKKyAgfQorICByb29tOjpjcmVhdGUoKTsKKyAgdXNlcmNtZDo6Y3JlYXRlKCk7CisgIGxvc2E6OmNyZWF0ZSgpOworCisgIFNldChQX0lOVF9MT05HLCBTQVZFLCBGX01PREVfQVMpOworICBTZXQoUF9JTlRfU0hPUlQsIFNBVkUsIEZfTU9ERV9BUyk7CisgIFNldChQX0VYSVRTLCBTQVZFLCBGX01PREVfQVMpOworICBTZXQoUF9ERVRBSUxTLCBTQVZFLCBGX01PREVfQVMpOworICBTZXQoUF9SRUFEX0RFVEFJTFMsIFNBVkUsIEZfTU9ERV9BUyk7CisgIFNldChQX0xJR0hULCBTQVZFLCBGX01PREVfQVMpOworCisgIFNldFByb3AoUF9JRFMsICh7InJhdW0iLCJzZWhlXHJoYXVzIn0pKTsKKyAgU2V0UHJvcChQX05BTUUsICJIYXVzIik7CisgIFNldFByb3AoUF9HRU5ERVIsIDApOworICBTZXRQcm9wKFBfVFJBTlNQQVJFTlQsIDApOworICBTZXRQcm9wKFBfTk9HRVQsIDEpOworICBTZXRQcm9wKFBfTElHSFQsIDEpOworICBTZXRQcm9wKFBfSU5ET09SUywgMSk7CisKKyAgQWRkQ21kKCAoeyAiYmVzY2hyZWliIiwgImJlc2NocmVpYmUiIH0pLCAiYmVzY2hyZWliZW4iICk7CisgIEFkZENtZCgidWViZXJzaWNodCIsICJ1ZWJlcnNpY2h0Iik7CisgIEFkZENtZCgiYXVzZ2FuZyIsICJhdXNnYW5nIik7CisgIEFkZENtZCggKHsibG9lc2NoZSIsICJsb2VzY2gifSksICJsb2VzY2giKTsKKyAgQWRkQ21kKCAoeyJ3aXJmIiwgIndlcmYiLCAid2VyZmUiIH0pLCAid2lyZiIpOworICBBZGRDbWQoICh7InNwZXJyIiwgInNwZXJyZSJ9KSwgInNwZXJyZW4iKTsKKyAgQWRkQ21kKCAoeyJrb3BpZXIiLCAia29waWVyZSIgfSksICJrb3BpZXJlbiIpOworICBBZGRDbWQoImxpY2h0IiwgImxpY2h0Iik7CisgIEFkZENtZCggKHsiYWVuZGVyZSIsICJhZW5kZXIiIH0pLCAiYWVuZGVybiIpOworICBBZGRDbWQoICh7Im1lbGR1bmciLCAibWVsZHVuZ2VuIn0pLCAicmVwb3J0Iik7Cit9CisKK3ZvaWQgaW5pdCgpCit7CisJb2JqZWN0IGhhdXM7CisgIAorICByb29tOjppbml0KCk7CisgIG5lZGl0Ojppbml0X3Jlc2N1ZSgpOworCisgIC8vIE1hZ2llciBiZXRyaXR0IGZyZW1kZXMgU2VoZXJoYXVzCisgIGlmIChxdWVyeV9vbmNlX2ludGVyYWN0aXZlKFBMKSAmJiBJU19MRUFSTkVSKFBMKSAmJiBnZXR1aWQoUEwpICE9IG93bmVyKSB7CisgICAgaWYgKFBMLT5RdWVyeVByb3AoUF9JTlZJUykpCisgICAgICAvLyBNYWdpZXIgaW52aXMgPT4gaW0gUmF1bSBtZWxkZW4KKyAgICAgIHRlbGxfcm9vbSh0aGlzX29iamVjdCgpLAorICAgICAgICAgIGNhcGl0YWxpemUoZ2V0dWlkKFBMKSkrIiBiZXRyaXR0IHVuc2ljaHRiYXIgZGVuIFJhdW0uXG4iLAorICAgICAgICAgICh7UEx9KSk7CisKKyAgICBpZiAoKGhhdXMgPSBsb2FkX29iamVjdChIQVVTTkFNRShvd25lcikpKSAmJgorICAgICAgICAoaGF1cy0+UXVlcnlQcm9wKEhfRE9PUlNUQVQpICYgRF9MT0NLRUQpKQorICAgICAgLy8gVHVlciBpc3QgenUgPT4gTWFnaWVyIGVpbmVuIEhpbndlaXMgZ2ViZW4KKyAgICAgIHRlbGxfb2JqZWN0KFBMLCAiICoqKioqKiogQUNIVFVORyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKiAiKworICAgICAgICBjYXBpdGFsaXplKG93bmVyKSsiIG1vZWNodGUgdmllbGxlaWNodCB1bmdlc3RvZXJ0IGJsZWliZW4hXG4gKlxuIgorICAgICAgICAiICoqKioqKiogQUNIVFVORyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworICB9Cit9CisgIAoraW50IFByZXZlbnRJbnNlcnRMaXZpbmcob2JqZWN0IG9iKQoreyAgCisgIHJldHVybiAwOworfQorCisvLyBHZWdlbnN0YWVuZGUga29tbWVuIGluIGRlbiBSYXVtCit2b2lkIE5vdGlmeUluc2VydChvYmplY3Qgb2IsIG9iamVjdCBvbGRlbnYpCit7CisJb2JqZWN0ICpmb3VuZDsKKworCWlmICghb2JqZWN0cChvYikpIHJldHVybjsKKwkKKwlpZiAob2ItPlF1ZXJ5UHJvcChIX0ZVUk5JVFVSRSkhPTApCisJeyAKKyAgICAvLyBkYXMgd2FzIHJlaW5rYW0gaXN0IGVpbiBhdXRvbG9hZCBNb2ViZWxzdHVlY2sKKyAgICAvLyBiZXRyYWNodGUgYWxsZSBzY2hvbiB2b3JoYW5kZW5lbiBhdXRvbG9hZCBNb2ViZWxzdHVlY2tlCisgICAgICBmb3VuZCA9IGZpbHRlcl9vYmplY3RzKGFsbF9pbnZlbnRvcnkodGhpc19vYmplY3QoKSksCisJCSAgICAgICAgIlF1ZXJ5UHJvcCIsIEhfRlVSTklUVVJFKTsKKwkgIGlmIChzaXplb2YoZm91bmQpPj1NQVhfRlVSTklUVVJFX1BFUl9ST09NKSAgICAgICAgCisgICAgICB7CisgICAgICAvLyBNYXhpbWFsLUFuemFobCB2b3JoYW5kZW5lciBhdXRvbG9hZCBTZWhlcmhhdXNtb2ViZWwgaXN0IHNjaG9uCisgICAgICAvLyBlcnJlaWNodAorCSAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCBicmVha19zdHJpbmcoCisJICAgICAgIkVpbiBSYXVtIGthbm4gbnVyICIrTUFYX0ZVUk5JVFVSRV9QRVJfUk9PTSsiIHJlYm9vdGZlc3RlICIKKwkgICAgICAiTW9lYmVsIHNwZWljaGVybi4gSGllciBiZWZpbmRlbiBzaWNoIHNjaG9uICIrCisJICAgICAgQ291bnRVcChtYXBfb2JqZWN0cyhmb3VuZCwgIm5hbWUiKSkrIi4iKSk7CisJICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgCisgICAgICBxdWV1ZWRfc2F2ZSgpOyAvLyBTcGVpY2hlcm4gdm9yYmVyZWl0ZW4gKGZhbGxzIG1laHJlcmUgT2JqZWt0ZSAKKyAgICAgICAgICAgICAgICAgICAgIC8vIGdlZHJvcHB0IHdlcmRlbiwgd2lyZCBzbyBlaW4gb3ZlcmZsb3cgdmVyaGluZGVydC4KKwl9Cit9CisKKy8vIEdlZ2Vuc3RhZW5kZSB2ZXJsYXNzZW4gZGVuIFJhdW0KK3ZvaWQgTm90aWZ5TGVhdmUob2JqZWN0IG9iLCBvYmplY3QgZGVzdCkKK3sKKwlpZiAoIW9iICYmIW9iamVjdHAob2IpKSByZXR1cm4gMDsKKwkKKyAgLy8gcmVib290ZmVzdGVzIE1vZWJlbHN0dWVjayB2ZXJsYWVzc3QgZGVuIFJhdW0KKwlpZiAob2ItPlF1ZXJ5UHJvcChIX0ZVUk5JVFVSRSkhPTApCisJewkKKyAgICAvLyBTcGVpY2hlcm4gdm9yYmVyZWl0ZW4gKGZhbGxzIG1laHJlcmUgT2JqZWt0ZSAKKyAgICAvLyBnZWRyb3BwdCB3ZXJkZW4sIHdpcmQgc28gZWluIG92ZXJmbG93IHZlcmhpbmRlcnQuCisJCXF1ZXVlZF9zYXZlKCk7CisJfQorCXJldHVybiAwOworfQorCit2b2lkCityZXNldCgpCit7CisgIHJvb206OnJlc2V0KCk7CisgIGxvc2E6OnJlc2V0KCk7CisgIC8vIFdlbm4gZWluIE5vdGF1c2dhbmcgdm9yaGFuZGVuIGlzdCwgY2hlY2tlbiwgb2IgZGVyIG5vY2ggbm9ldGlnIGlzdC4KKyAgaWYgKG1lbWJlcihtX2luZGljZXMoUXVlcnlQcm9wKFBfRVhJVFMpKSwibm90YXVzZ2FuZyIpIT0tMSkKKyAgeworICAgICAgbWFrZV9lbWVyZ2VuY3lfZXhpdCgpOworICB9Cit9CisKK2ludCBjbGVhbl91cChpbnQgYXJnKQoreworICBtaXhlZCBpbnY7CisKKyAgaWYgKGFyZyA+IDEpCisgICAgcmV0dXJuIDE7CisKKyAgbG9zYTo6cmVzZXQoKTsgIC8vIEV2dGwuIGdlcGFja3Qgc3BlaWNoZXJuLi4uCisKKyAgLy8gbmljaHRzIGltIFJhdW0gb2RlciBudXIgbGVlcmUgU2VoZXJoYXVzdHJ1aGUgPT4gUmF1bSBrYW5uIHdlZworICBpZiAoKHNpemVvZihpbnY9YWxsX2ludmVudG9yeSgpKSA9PSAwKSB8fAorICAgICAgKHNpemVvZihpbnYpID09IDEgJiYgaW52WzBdLT5pZChUUlVIRSkgJiYKKyAgICAgICBzaXplb2YoYWxsX2ludmVudG9yeShpbnZbMF0pKT09MCkpCisgICAgcmVtb3ZlKDEpOworCisgIHJldHVybiAwOworfQorCisvLyBIYWV1ZnVuZ2VuIHZvbiBnbGVpY2hlbiBPYmpla3RlbiBzaW5kIGhpZXIgZWdhbCA9PiBuaXggdHVuCitwcm90ZWN0ZWQgdmFyYXJncyB2b2lkIHJlbW92ZV9tdWx0aXBsZShpbnQgbGltaXQpIHt9CisKKworLy8gU3BpZWxlciB3aXJkIGltIFJhdW0gTmV0enRvdAordm9pZCBCZWNvbWVzTmV0RGVhZChvYmplY3QgcGwpCit7CisvLyAgTmljaHQgZXJsYXVidGUgU3BpZWxlciB3ZXJkZW4gcmF1c2dld29yZmVuLCBhbGxlIGFuZGVyZW4gYmxlaWJlbiBkcmluLgorICBpZighYWxsb3dlZF9jaGVjayhwbCkpCisgICAgcGwtPm1vdmUoVkVSV0FMVEVSLT5IYXVzUHJvcChvd25lciwgSFBfRU5WKSwgTV9HTywgMCwgInNjaGxhZndhbmRlbHQgaGVyYXVzIiwgInNjaGxhZndhbmRlbHQgaGVyZWluIiApOworfQorCisKKy8qIElzdCBkaWVzZXIgUmF1bSBlaW4gQXVzZ2FuZz8gKi8KK2ludCBpc19leGl0KHN0cmluZyBwYXRoKQoreyAKKyAgcmV0dXJuIChzaXplb2YocGF0aCkgPiA0KSAmJiAocGF0aFs8NS4uXSA9PSAicmF1bTAiKTsKK30KKworLypQcnVlZnVuZywgb2IgZXMgZWluZW4gSGF1c2F1c2dhbmcgZ2lidCovCitpbnQgcm9vbV9oYXNfZXhpdCgpIHsKKworICAgIHN0cmluZyByb29tID0gb2JqZWN0X25hbWUodGhpc19vYmplY3QoKSk7CisgIC8vIHNpbmQgd2lyIHNjaG9uIGluIGVpbmVtIEhhdXB0cmF1bSBtaXQgQXVzZ2FuZz8KKyAgICBpZiAoaXNfZXhpdChyb29tKSkgcmV0dXJuIDE7CisKKyAgICBtYXBwaW5nIHJfdG9kbyA9IChbcm9vbV0pOworICAgIG1hcHBpbmcgcl9kb25lID0gKFs6MF0pOworICAgIC8qIERpZSBTY2hsZWlmZSBoYXQgbWF4aW1hbCA5ICogQW56YWhsIGRlciB2ZXJiLiBIYWV1c2VyIER1cmNobGFldWZlICovCisgICAgd2hpbGUgKHNpemVvZihyX3RvZG8pKQorICAgIHsKKyAgICAgIG1hcHBpbmcgcl9leGl0cyA9IChbXSk7CisKKyAgICAgIC8vIG5hZWNoc3RlbiBSYXVtcGZhZCBhYmFyYmVpdGVuLCBkLmguIGRlc3NlbiBBdXNnYWVuZ2UgYmV0cmFjaHRlbgorICAgICAgcm9vbSA9IG1faW5kaWNlcyhyX3RvZG8pWzBdOworICAgICAgLy8gYWJnZWFyYmVpdGV0ZW4gUmF1bXBmYWQgdm9uIHJfdG9kbyBuYWNoIHJfZG9uZSBzY2hpZWJlbgorICAgICAgcl9kb25lICs9IChbcm9vbV0pOworICAgICAgbV9kZWxldGUocl90b2RvLCByb29tKTsKKworICAgICAgLy8gYWxsZSBBdXNnYWVuZ2UgYmV0cmFjaHRlbgorICAgICAgZm9yZWFjaChzdHJpbmcgY29tbWFuZCwgc3RyaW5nIHN1YnBhdGggOiByb29tLT5RdWVyeVByb3AoUF9FWElUUykpCisgICAgICB7CisgICAgICAgIC8vIE5vdGF1c2dhZW5nZSBuaWNodCBiZXRyYWNodGVuLCBkYSAnZWNodGUnIEF1c2dhZW5nZSBnZXN1Y2h0IHNpbmQKKyAgICAgICAgaWYoY29tbWFuZCAhPSAibm90YXVzZ2FuZyIpCisgICAgICAgICAgLy8gYWxsZSBhbmRlcmVuIEF1c2dhZW5nZSBzYW1tZWxuCisgICAgICAgICAgcl9leGl0cyArPSAoWyBzdWJwYXRoIF0pOworICAgICAgfQorICAgICAgLy8gbnVyIFJhdW1wZmFkZSBkaWUgbm9jaCBuaWNodCBhYmdlYXJiZWl0ZXQgc2luZCB0ZXN0ZW4KKyAgICAgIHJfZXhpdHMgLT0gcl9kb25lOworICAgICAgLy8gaXN0IGRhIGVpbiBIYXVwdHJhdW0gKGRlciBkYW5uIEF1c2dhbmcgbGllZmVydCkgZGFiZWk/CisgICAgICBpZiAoc2l6ZW9mKGZpbHRlcl9pbmRpY2VzKHJfZXhpdHMsICMnaXNfZXhpdC8qJyovKSkpCisgICAgICAgIHJldHVybiAxOworCisgICAgICAvLyBuZXVlIFJhdW1wZmFkZSBpbiBkaWUgVE9ETy1MaXN0ZSBhdWZuZWhtZW4KKyAgICAgIHJfdG9kbyArPSByX2V4aXRzOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLy8gZGFtaXQgbWFuIFNwaWVsZXIgbmljaHQgZHVyY2ggRW50ZmVybmVuIHZvbiBBdXNnYWVuZ2VuIGVpbnNwZXJyZW4ga2FubgorLy8gd2VyZGVuIGJlaSBCZWRhcmYgTm90YXVzZ2FlbmdlIGluIGRlbiBIYXVwdHJhdW0gZXJnYWVuenQKK3ZvaWQgbWFrZV9lbWVyZ2VuY3lfZXhpdCgpCit7CisgIC8vIElzdCBkZXIgUmF1bSB3ZWRlciBIYXVwdHJhdW0gbWl0IEF1c2dhbmcgbm9jaCBmdWVocnQgZWluIFdlZyBkb3J0aGluPworICAvLyBkYW5uIE5vdGF1c2dhbmcgbWFjaGVuCisgIGlmKCFyb29tX2hhc19leGl0KCkpCisgIHsKKyAgICAvLyB0ZWxsX3Jvb20odGhpc19vYmplY3QoKSwiREVCVUc6IEVpbiBOb3RhdXNnYW5nIHd1cmRlIGFuZ2VsZWd0LlxuIik7CisgICAgcm9vbTo6QWRkRXhpdCgibm90YXVzZ2FuZyIsCisgICAgICAiZHVyY2ggZGVuIE5vdGF1c2dhbmcjIit0b19zdHJpbmcodGhpc19vYmplY3QoKSlbMC4uPDJdKyIwIik7CisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gbmljaHQgbWVociBiZW5vZXRpZ3RlbiBOb3RhdXNnYW5nIGVudGZlcm5lbgorICAgIHJvb206OlJlbW92ZUV4aXQoIm5vdGF1c2dhbmciKTsKKyAgfQorfQorCisvLyBydWZ0IGRpcmVrdCBkYXMgZ2VlcmJ0ZSBBZGRFeGl0IGF1Ziwgb2huZSBnZ2YuIGVpbmVuIE5vdGF1c2dhbmcgenUKKy8vIGVyemV1Z2VuLiBEYXMgd2lyZCB2b20gSGF1cyB1bmQgdm9tIFZlcndhbHRlciBiZW51dHp0LCB1bSBBdXNnYWVuZ2UgenUKKy8vIGVyemV1Z2VuLiBEYXMgaXN0IG5vZXRpZywgd2VpbCBkZXIgTm90YXVzZ2FuZ21lY2hhbmlzbXVzIG5vY2ggbmljaHQKKy8vIGZ1bmt0b25pZXJ0LCB3ZW5uIGRlciBSYXVtIGdlcmFkZSBnZWxhZGVuIHdpcmQgKGhhdCBub2NoIG5pY2h0IGRlbgorLy8gZW5kZ3VlbHRpZ2VuIE5hbWVuKSB1bmQgZGVyIENoZWNrIHdhZXJlIG9obmVoaW4gdW5ub2V0aWcuCitwdWJsaWMgdm9pZCBBZGRFeGl0Tm9DaGVjayhtaXhlZCBjbWQsIG1peGVkIGRlc3QpCit7CisgIHJvb206OkFkZEV4aXQoY21kLCBkZXN0KTsKK30KKworLy8gV2lyZCBiZW51dHp0IGJlaW0gTGFkZW4gdm9uIFJhZXVtZW4sIHVtIGFsbGUgQXVzZ2FlbmdlIHp1IGxvZXNjaGVuLiBEYWJlaQorLy8gZGFyZiBfa2Vpbl8gTm90YXVzZ2FuZyBlcnN0ZWxsdCB3ZXJkZW4uCit2b2lkIFJlbW92ZUV4aXROb0NoZWNrKG1peGVkIGNtZCkKK3sKKyAgcm9vbTo6UmVtb3ZlRXhpdChjbWQpOworfQorCisvLyBiZWltIEF1c2dhbmcgc2V0enRlbiB0ZXN0ZW4gb2Igdm9yaGFuZGVybmVyIE5vdGF1c2dhbmcgbm9jaCBiZW5vZXRpZ3Qgd2lyZAordm9pZCBBZGRFeGl0KG1peGVkIGNtZCwgbWl4ZWQgZGVzdCkKK3sKKyAgcm9vbTo6QWRkRXhpdChjbWQsIGRlc3QpOworCisgIGlmIChtZW1iZXIobV9pbmRpY2VzKFF1ZXJ5UHJvcChQX0VYSVRTKSksIm5vdGF1c2dhbmciKSE9LTEpCisgIHsKKyAgICAvLyBsb2VzY2h0IE5vdGF1c2dhbmcgZmFsbHMgbmljaHQgbWVociBiZW5vZXRpZ3QKKyAgICAgbWFrZV9lbWVyZ2VuY3lfZXhpdCgpOworICB9Cit9CisKKy8vIGJlaW0gQXVzZ2FuZyBsb2VzY2hlbiB0ZXN0ZW4gb2IgTm90YXVzZ2FuZyBiZW5vZXRpZ3Qgd2lyZAordm9pZCBSZW1vdmVFeGl0KG1peGVkIGNtZCkKK3sKKyAgcm9vbTo6UmVtb3ZlRXhpdChjbWQpOworICAvLyBzZXR6dCBOb3RhdXNnYW5nIGZhbGxzIGJlbm9ldGlndAorICBtYWtlX2VtZXJnZW5jeV9leGl0KCk7Cit9CisKKy8vIGRlciBMYW5nYmVzY2hyZWlidW5nIHdlcmRlbiBhbGxlIHVuc2ljaHRiYXJlbiBNYWdpZXIKKy8vIChhdXNnZW5vbW1lbiBTZWhlcmhhdXNiZXNpdHplcikgaW4gS2xhbW1lcm4gYW5nZWZ1ZWd0Cit2YXJhcmdzIHN0cmluZyBpbnRfbG9uZyhtaXhlZCB2aWV3ZXIsIG1peGVkIHZpZXdwb2ludCwgaW50IGZsYWdzKQoreworICBzdHJpbmcgcmV0OworICBvYmplY3QgKmludjsKKyAgc3RyaW5nICp0bXA7CisKKyAgcmV0ID0gOjppbnRfbG9uZyh2aWV3ZXIsIHZpZXdwb2ludCwgZmxhZ3MpOworCisgIC8vIG51ciB3YXMgbWFjaGVuIHdlbm4gZGVyIEJldHJhY2h0ZXIgaW0gUmF1bSBpc3QKKyAgaWYgKCFyZXQgfHwgIW9iamVjdHAodmlld2VyKSB8fCBlbnZpcm9ubWVudCh2aWV3ZXIpICE9IHRoaXNfb2JqZWN0KCkpCisgICAgcmV0dXJuIHJldDsKKworICBpZih2aWV3cG9pbnQgPT0gMCkKKyAgICB2aWV3cG9pbnQgPSAoeyB2aWV3ZXIgfSk7CisgIGVsc2UgaWYoIXBvaW50ZXJwKHZpZXdwb2ludCkpCisgICAgdmlld3BvaW50ID0gKHsgdmlld3BvaW50IH0pOworCisgIC8vIGFsbGUgTGViZXdlc2VuIGF1c3NlciBkZW5lbiBhdXMgZGVyZW4gU2ljaHQgYmV0cmFjaHRldCB3aXJkCisgIGludiA9IGZpbHRlcihhbGxfaW52ZW50b3J5KHRoaXNfb2JqZWN0KCkpLCMnaW50ZXJhY3RpdmUpIC0gdmlld3BvaW50OworICBmb3JlYWNoKG9iamVjdCBwbCA6IGludikKKyAgeworICAgIC8vIHJhdXNzdWNoZW4gd2VyIGF1c3NlciBTZWhlcmhhdXNiZXNpdHplciB1bnNpY2h0YmFyIGlzdAorICAgIGlmKHBsICYmIElTX0xFQVJORVIocGwpICYmIHBsLT5RdWVyeVByb3AoUF9JTlZJUykgJiYgZ2V0dWlkKHBsKSE9b3duZXIpCisgICAgeworICAgICAgLy8gTmFtZSBpbiBLbGFtbWVyIHNhbW1lbG4KKyAgICAgIHRtcCArPSAoeyAiKCIrY2FwaXRhbGl6ZShnZXR1aWQocGwpKSsiKSIgfSk7CisgICAgfQorICB9CisgIHJldHVybiByZXQgKyBicmVha19zdHJpbmcoQ291bnRVcCh0bXApLCA3OCk7Cit9CisvKgorLy8gVE9ETzogVGVzdGVuIG9iIGRhcyBoaWVyIG5pY2h0IGRhcyBTdGFuZGFyZC1WZXJoYWx0ZW4gaXN0CitpbnQgbGllcyhzdHJpbmcgc3RyKQoreworICBzdHJpbmcgdHh0OworCisgIG5vdGlmeV9mYWlsKCJXYXMgbW9lY2h0ZXN0IER1IGxlc2VuP1xuIik7CisgIGlmICghc3RyKSByZXR1cm4gMDsKKworICBpZiAodGhpc19wbGF5ZXIoKS0+Q2Fubm90U2VlKCkpCisgICAgcmV0dXJuIDE7CisgIGlmICh0eHQgPSBRdWVyeVByb3AoUF9SRUFEX0RFVEFJTFMpW3N0cl0pIHsKKyAgICB0aGlzX3BsYXllcigpLT5Nb3JlKHR4dCk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisqLworLy8gQWt0aW9uIExlYmV3ZXNlbiBvZGVyIEdlZ2Vuc3RhZW5kZSBhdXMgZGVtIEhhdXMgd2VyZmVuCitpbnQgd2lyZihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgd2VuLCBhcmdzOworICBvYmplY3QgcGwsIHRhcmdldCwgKmxpc3QsIHRwLCB0bzsKKworICB0cCA9IHRoaXNfcGxheWVyKCk7CisgIHRvID0gdGhpc19vYmplY3QoKTsKKyAgYXJncyA9IHRwLT5fdW5wYXJzZWRfYXJncygxKTsKKworICAvLyBrbGFwcHQgbnVyIHZvciBPcnQgdW5kIG1pdCBkZXIgcGFzc2VuZGVuIFN5bnRheAorICBpZiAoKGVudmlyb25tZW50KHRwKSE9dG8pIHx8CisgICAgICAhYXJncyB8fCBhcmdzID09ICIiIHx8CisgICAgICAoc3NjYW5mKGFyZ3MsIiVzIHJhdXMiLHdlbikgIT0gMSkgKQorICAgIHJldHVybiAwOworICAvLyBSYXVtLCBpbiBkZW0gZGFzIEhhdXMgc3RlaHQsIGVybWl0dGVsbgorICB0YXJnZXQ9ZmluZF9vYmplY3QoVkVSV0FMVEVSLT5IYXVzUHJvcChvd25lciwgSFBfRU5WKSk7CisgIGlmICghdGFyZ2V0KSB7CisgICAgbm90aWZ5X2ZhaWwoIkRpZXNlcyBIYXVzIHN0ZWh0IGxlaWRlciBnZXJhZGUgaW4gZWluZW0gIgorICAgICAgICAgICAgICAgICJGZWhsZXIgaW0gUmF1bS1aZWl0LUdlZnVlZ2UuXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICAvLyBSYXVzd2VyZmVuIGRhcmYgbnVyIGRlciBCZXNpdHplcgorICBpZiAoIXRwX293bmVyX2NoZWNrKCkpIHsKKyAgICBub3RpZnlfZmFpbCgiQWJlciBEdSBrYW5uc3QgZG9jaCBuaWVtYW5kZW4gYXVzIGRlbSBIYXVzIHZvbiAiK2NhcGl0YWxpemUob3duZXIpKyIgd2VyZmVuIVxuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKHdlbj09ImFsbGUiKSB7CisgICAgLy8gYWxsZSBMZWJld2VzZW4gYXVzc2VyIHRwICg9PSBIYXVzYmVzaXR6ZXIpCisgICAgbGlzdD1maWx0ZXIoYWxsX2ludmVudG9yeSh0byksIydsaXZpbmcpLSh7dHAsMH0pOy8vJykKKyAgICBpZiAoc2l6ZW9mKGxpc3QpPT0wKSB7CisgICAgICBub3RpZnlfZmFpbCgiQWJlciBEdSBiaXN0IGRvY2ggYWxsZWluIGluIERlaW5lbSBIYXVzIVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0gZWxzZSBpZiAod2VuID09ICJhbGxlcyIpIHsKKyAgICAvLyBhbGxlIEdlZ2Vuc3RhZW5kZSBhdXNzZXIgTGViZXdlc2VuIHVuZCBNb2ViZWwKKyAgICAvLyAoU2VoZXJoYXVzdHJ1aGUsIEF1dG9sb2FkZXItTW9lYmVsIG9kZXIgU2VoZXJoYXVzLU1vZWJlbCkKKyAgICBsaXN0ID0gZmlsdGVyKGFsbF9pbnZlbnRvcnkodG8pLAorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW50KG9iamVjdCBvYikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0cChvYikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWxpdmluZyhvYikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIW9iLT5pZChUUlVIRSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBUZXN0IGF1ZiBuaWNodCBTZWhlcmhhdXNtb2ViZWwgdm9uIEF1Z3VzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzdHIobG9hZF9uYW1lKG9iKSwiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAwOworICAgICAgICAgICAgICAgICAgfSApOworCisgICAgaWYgKHNpemVvZihsaXN0KT09MCkgeworICAgICAgbm90aWZ5X2ZhaWwoIkFiZXIgaGllciBpc3QgbmljaHRzIHp1bSB3ZWd3ZXJmZW4hXG4iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBwbD1wcmVzZW50KHdlbix0byk7CisgICAgaWYgKCFwbCkgeworICAgICAgbm90aWZ5X2ZhaWwoIlNvIGplbWFuZGVuIHNlaGUgaWNoIGhpZXIgbmljaHQuXG4iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChwbC0+aWQoVFJVSEUpIHx8CisgICAgICAgICAgICAgLy8gVE9ETyBUZXN0IGF1ZiBTZWhlcmhhdXNtb2ViZWwgdm9uIEF1Z3VzdAorICAgICAgICAgICAgICBzdHJzdHIobG9hZF9uYW1lKHBsKSwiL2Qvc2VoZXIvaGFldXNlci9tb2ViZWwvIik9PTAKKyAgICAgICAgICAgICApIHsKKyAgICAgIG5vdGlmeV9mYWlsKCJEdSBrYW5uc3QgIitwbC0+bmFtZShXRU4pKyIgbmljaHQgd2Vnd2VyZmVuIVxuIiApOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGxpc3Q9KHtwbH0pOworICB9CisgIHN0cmluZyBtc2dfd2VuID0gc3ByaW50ZigiJXMgd2lyZnQgRGljaCBhdXMgJXMgSGF1cy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+TmFtZShXRVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPlF1ZXJ5UG9zc1Byb25vdW4oTkVVVEVSLFdFTSkpOworICAvLyBmdWVyIGFsbGUgcmF1c3p1d2VyZmVuZGVuIE9wZmVyIE1lbGR1bmdlbiBtYWNoZW4gdW5kIHJhdXNiZXdlZ2VuCisgIGZvcmVhY2gob2JqZWN0IG9iIDogbGlzdCkKKyAgeworICAgIHRlbGxfb2JqZWN0KG9iLCBtc2dfd2VuKTsKKyAgICB0ZWxsX3Jvb20odGFyZ2V0LAorICAgICAgICBzcHJpbnRmKCIlcyBrb21tdCBpbiBob2hlbSBCb2dlbiBhdXMgZGVtIEhhdXMgdm9uICVzIGdlZmxvZ2VuLlxuIiwKKyAgICAgICAgICAgICAgICAgb2ItPk5hbWUoV0VSKSx0cC0+bmFtZShXRU0pKSk7CisgICAgb2ItPm1vdmUodGFyZ2V0LE1fU0lMRU5UfE1fR08pOworICAgIHRlbGxfcm9vbSh0byxzcHJpbnRmKCIlcyB3aXJmdCAlcyBhdXMgJXMgSGF1cy5cbiIsCisgICAgICAgICAgICAgICAgICAgIHRwLT5OYW1lKFdFUiksCisgICAgICAgICAgICAgICAgICAgIG9iLT5uYW1lKFdFTiksdHAtPlF1ZXJ5UG9zc1Byb25vdW4oTkVVVEVSLFdFTSkpLAorICAgICAgICAgICAgICAoe3RwfSkpOworICAgIHByaW50ZigiRHUgd2lyZnN0ICVzIGF1cyBEZWluZW0gSGF1cy5cbiIsb2ItPm5hbWUoV0VOKSk7CisgICAgLy8gVmVyZm9sZ2VyIGFibWVsZGVuLCBkYW1pdCBzaWUgbmljaHQgZ2xlaWNoIHp1cnVlY2trb21tZW4KKyAgICAvLyBUT0RPIHdlbm4gbWFuIGVpbnplbG5lIExlYmV3ZXNlbiByYXVzd2lyZnQga2FubiBkYXMgamEgYXVjaAorICAgIC8vIGVpbiBWZXJmb2xnZXIgdm9uIGVpbmVtIGFuZGVyZW4gR2FzdCBzZWluLi4uCisgICAgdHAtPlJlbW92ZVB1cnN1ZXIob2IpOworICB9CisgIHJldHVybiAxOworfQorCisvLyBCZXNpdHplciB1bmQgUmF1bW51bW1lciBmdWVyIGRpZXNlbiBSYXVtIHNldHplbgordmFyYXJncyBzdHJpbmcgU2V0T3duZXIoc3RyaW5nIG8sIGludCBudW0pCit7CisgIC8vIERlZmF1bHQgS3Vyei0gdW5kIExhbmdiZXNjaHJlaWJ1bmcgc2V0emVuCisgIFNldFByb3AoUF9JTlRfU0hPUlQsICJJbSBIYXVzIHZvbiAiK2NhcGl0YWxpemUobykpOworICBTZXRQcm9wKFBfSU5UX0xPTkcsICJFaW4gdG90YWwgbGVlcmVyIFJhdW0uXG4iKTsKKyAgLy8gUmF1bW51bW1lciB1bmQgQmVzaXR6ZXIgbWVya2VuCisgIHJhdW1OciA9IG51bTsKKyAgcmV0dXJuIG93bmVyID0gbzsKK30KKworLy8gTGllZmVydCBkZW4gQmVzaXR6ZXIKKy8vIGZhbGxzIHdpdGhOciAhPSAwIG1pdCBhbmdlaGFlbmd0ZXIgUmF1bW51bW1lcgordmFyYXJncyBzdHJpbmcgUXVlcnlPd25lcihpbnQgd2l0aE5yKQoreworICByZXR1cm4gKHdpdGhOciA/IG93bmVyK3JhdW1OciA6IG93bmVyKTsKK30KKworLy8gUHJvdG90eXBlCitzdGF0aWMgaW50IGJlZkVpbmdhYmUoc3RyaW5nICpiZWYpOworCisvLyBBa3Rpb24genVtIEJlc2NocmVpYmVuIGRlcyBSYXVtZXMKK3ZhcmFyZ3MgaW50CitiZXNjaHJlaWJlbihzdHJpbmcgc3RyLCBpbnQgZikKK3sKKyAgc3RyaW5nICpwYXJ0czsKKyAgaW50IHNwLCByZXQ7CisKKyAgLy8gbnVyIGRlciBCZXNpdHplciBkYXJmCisgIGlmKCF0cF9vd25lcl9jaGVjaygpKQorICAgIHJldHVybiAwOworCisgIGlmICghZiAmJiAoIShzdHI9VVBfQVJHUyh0aGlzX3BsYXllcigpKSkgfHwgc3RyID09ICIiKSkgeworICAgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IGRlbm4gYmVzY2hyZWliZW4/XG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBzcCA9IHNpemVvZihwYXJ0cyA9IG9sZF9leHBsb2RlKHN0ciwgIiAiKSk7CisgIC8vIGplIG5hY2hkZW0gd2FzIGJlc2NocmllYmVuIHdpcmQsIHNldHplIGRldGFpbCB1bmQgZmxhZworICAvLyB1bmQgc3RhcnRlIGRhbWl0IEVkaXRvciwgYnp3LiBiZWhhbmRsZSBCZWZlaGxlIGV4dHJhCisgIGRldGFpbCA9IDA7CisgIGZsYWcgPSBmOworCisgIHN3aXRjaChwYXJ0c1swXVswLi4zXSkgeworICAgIGNhc2UgInJhdW0iOiAgICAgIC8vIExhbmctIG9kZXIgS3VyemJlc2NocmVpYnVuZworICAgIGNhc2UgImhhdXMiOgorICAgICAgaWYgKHNwID09IDEgfHwgcGFydHNbMV0gPT0gImxhbmciKQorICAgIGZsYWcgfD0gTEFORzsKKyAgICAgIGVsc2UgaWYgKHBhcnRzWzFdID09ICJrdXJ6IikKKyAgICBmbGFnIHw9IEtVUlo7CisgICAgICBwcmludGYoIkJpdHRlICVzYmVzY2hyZWlidW5nIGRlcyAlcyBlaW5nZWJlbi5cbiIsIChmbGFnICYgTEFORyA/ICJMYW5nIiA6ICJLdXJ6IiksIChmbGFnICYgQVVTU0VOID8gIkhhdXNlcyIgOiAiUmF1bWVzIikgKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgImRldGEiOiAgICAgIC8vIERldGFpbHMKKyAgICAgIGlmIChzcD09MSkgeworICAgIG5vdGlmeV9mYWlsKCJXZWxjaGVzIERldGFpbCB3aWxsc3QgRHUgZGVubiBiZXNjaHJlaWJlbj9cbiIpOworICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgZmxhZyB8PSBERVRBSUw7CisgICAgICBzdHIgPSBpbXBsb2RlKHBhcnRzWzEuLl0sIiAiKTsKKyAgICAgIHdyaXRlKCAiQml0dGUgQmVzY2hyZWlidW5nIGZ1ZXIgJyIrc3RyKyInIGVpbmdlYmVuLlxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICJsZXNiIjogICAgICAvLyBsZXNiYXJlIERldGFpbHMKKyAgICAgIG5vdGlmeV9mYWlsKCJXZWxjaGVzIGxlc2JhcmUgRGV0YWlsIHdpbGxzdCBEdSBkZW5uIGJlc2NocmVpYmVuP1xuIik7CisgICAgICBpZiAoc3AgPT0gMSkgcmV0dXJuIDA7CisgICAgICBpZiAocGFydHNbMV0gPT0gImRldGFpbHMiIHx8IHBhcnRzWzFdID09ICJkZXRhaWwiKSB7CisgICAgaWYgKHNwID09IDIpIHJldHVybiAwOworICAgIHN0ciA9IGltcGxvZGUocGFydHNbMi4uXSwiICIpOworICAgICAgfQorICAgICAgZWxzZQorICAgIHN0ciA9IGltcGxvZGUocGFydHNbMS4uXSwiICIpOworICAgICAgZmxhZyB8PSBSREVUQUlMOworICAgICAgd3JpdGUoICJCaXR0ZSBCZXNjaHJlaWJ1bmcgZnVlciAnIitzdHIrIicgZWluZ2ViZW4uXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgImJlZmUiOiAgICAgIC8vIEJlZmVobGUKKyAgICAgIHJldCA9IDA7CisgICAgICBpZiAoc3AgPT0gMSkKKyAgICBub3RpZnlfZmFpbCgiV2VsY2hlbiBCZWZlaGwgd2lsbHN0IER1IGRlbm4gYmVzY2hyZWliZW4/XG4iKTsKKyAgICAgIGVsc2UKKyAgICByZXQgPSBiZWZFaW5nYWJlKGJyayhpbXBsb2RlKHBhcnRzWzEuLl0sIiAiKSkpOworICAgICAgcmV0dXJuIHJldDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBub3RpZnlfZmFpbCgiRGFzIGthbm5zdCBEdSBuaWNodCBiZXNjaHJlaWJlbiEgRWluZSBMaXN0ZSBkZXIgRGluZ2UsIGRpZSBEdSBoaWVyXG4iCisgICAgICAgICArImJlc2NocmVpYmVuIGthbm5zdCwgZXJoYWVsdHN0IER1IG1pdCAnaGlsZmUgYmVzY2hyZWliZScuXG4iICk7CisgICAgICByZXR1cm4gMDsKKyAgICAgIGJyZWFrOworICB9CisgIGRldGFpbCA9IGJyayhzdHIpOworICB3cml0ZSggIihCZWVuZGVuIG1pdCAuIG9kZXIgKiosIEFiYnJ1Y2ggbWl0IH5xKVxuIiApOworICBuZWRpdCggImJlc2NocmVpYnVuZyIgKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8vIG5lZGl0IHZvbiBiZXNjaHJlaWJlIHh4eAorc3RhdGljIHZvaWQgYmVzY2hyZWlidW5nKHN0cmluZyBzdHIpCit7CisgIGlmICghc3RyKSB7CisgICAgd3JpdGUoIk5pY2h0cyBnZWFlbmRlcnQhXG4iKTsKKyAgICByZXR1cm47CisgIH0KKworICBzdHIgPSBub3Jtc3RyKHN0cik7CisKKyAgaWYgKGZsYWcgJiBMQU5HKQorICB7CisgICAgLy8gTGFuZ2Jlc2NocmVpYnVuZworICAgIGlmIChzaXplb2YoZXhwbG9kZShzdHIsIlxuIikpID4gMTAwCisgICAgICAgIHx8IHNpemVvZihzdHIpID4gNzgwMCkKKyAgICB7CisgICAgICAvLyB1ZWJlciAxMDAgWmVpbGVuIG9kZXIgdWViZXIgNzgwMCBaZWljaGVuCisgICAgICB3cml0ZSggIkRhcyBpc3QgZnVlciBlaW5lIExhbmdiZXNjaHJlaWJ1bmcgenUgbGFuZyFcbiIKKyAgICAgICAgICAgICAiU29ycnksIGJpdHRlIGRlbmtlIERpciBlaW5lIGFuZGVyZSBMYW5nYmVzY2hyZWlidW5nIGF1cy5cbiIgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGZsYWcgJiBBVVNTRU4pIHsKKyAgICAgIC8vIExhbmdiZXNjaHJlaWJ1bmcgdm9tIEhhdXMKKyAgICAgIG9iamVjdCBoYXVzOworICAgICAgaGF1cyA9IGZpbmRfb2JqZWN0KEhBVVNOQU1FKG93bmVyKSk7CisgICAgICBoYXVzLT5TZXRQcm9wKFBfTE9ORywgc3RyKTsKKyAgICAgIGhhdXMtPlNhdmUoKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgLy8gTGFuZ2Jlc2NocmVpYnVuZyB2b24gZGllc2VtIFJhdW0KKyAgICAgIFNldFByb3AoUF9JTlRfTE9ORywgc3RyKTsKKyAgfQorICBlbHNlIGlmIChmbGFnICYgS1VSWikgeworICAgIC8vIEt1cnpiZXNjaHJlaWJ1bmcgdm9tIFJhdW0KKyAgICBpZiAoc2l6ZW9mKG9sZF9leHBsb2RlKHN0ciwiXG4iKSkgPiAxIHx8IHNpemVvZihvbGRfZXhwbG9kZShzdHIsIi4iKSkgPiAyIHx8IHNpemVvZihzdHIpID4gNzUpIHsKKyAgICAgIHdyaXRlKCAiRGFzIGlzdCBmdWVyIGVpbmUgS3VyemJlc2NocmVpYnVuZyB6dSBsYW5nIVxuU29ycnksIGJpdHRlIGRlbmtlIERpciBlaW5lIGFuZGVyZSBLdXJ6YmVzY2hyZWlidW5nIGF1cy5cbiIgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZQorICAgICAgLy8gVmFuaW9uLCAyNy4wNy4wMiwgQnVnZml4CisgICAgICAvLyBEaWUgWmVpbGUgYnVnZ3RlLCB3ZW5uIG1hbiAiLiIgb2RlciAiXG4iIG9kZXIgIlxuLiIgb2RlciBzb3dhcworICAgICAgLy8gaW4gc3RyIGhhdC4gKGFsc28gei5CLiBiZWkgImJlc2NocmVpYmUgcmF1bSBrdXJ6IDxyZXR1cm4+IC4iKQorICAgICAgLy8gU2V0UHJvcChQX0lOVF9TSE9SVCwgb2xkX2V4cGxvZGUob2xkX2V4cGxvZGUoc3RyLCJcbiIpWzBdLCIuIilbMF0pOworICAgICAgU2V0UHJvcChQX0lOVF9TSE9SVCwgZXhwbG9kZShleHBsb2RlKHN0ciwiXG4iKVswXSwiLiIpWzBdKTsKKyAgfQorICBlbHNlIGlmIChmbGFnICYgREVUQUlMKQorICAgIC8vIFJhdW0tRGV0YWlsCisgICAgQWRkRGV0YWlsKGRldGFpbCwgc3RyKTsKKyAgZWxzZSBpZiAoZmxhZyAmIFJERVRBSUwpCisgICAgLy8gbGVzYmFyZXMgUmF1bS1EZXRhaWwKKyAgICBBZGRSZWFkRGV0YWlsKGRldGFpbCwgc3RyKTsKKyAgZWxzZSB7CisgICAgd3JpdGUoICJIdWNoISBVbmJla2FubnRlcyBGbGFnICgiK2ZsYWcrIikuLi4gU2FnIG1hbCAiCisgICAgICAgICAgKyBDb3VudFVwKE1BSU5UQUlORVIsICIsICIsICIgb2RlciAiKQorICAgICAgICAgICsgIiBCZXNjaGVpZC4uLlxuIik7CisgICAgcmV0dXJuOworICB9CisKKyAgd3JpdGUoIk9LLlxuIik7CisgIFNhdmUoKTsKK30KKworLy8gd2lyZCBpbiBiZXNjaHJlaWJlbihzdHIsIGludCkgJ2Jlc2NocmVpYmUgYmVmZWhsJyBhdWZnZXJ1ZmVuCitzdGF0aWMgaW50IGJlZkVpbmdhYmUoc3RyaW5nICpiZWZlaGxlKQoreworICBzdHJpbmcqIGNvbSA9ICh7fSk7CisKKyAgbm90aWZ5X2ZhaWwoIktlaW4gQmVmZWhsIHp1bSBCZXNjaHJlaWJlbiB1ZWJyaWcuLi4gOylcbiIpOworICBmb3JlYWNoKHN0cmluZyBiZWYgOiBiZWZlaGxlKQorICB7CisgICAgLy8gc2Nob24gdm9yaGFuZGVuZXIgQmVmZWhsIChhdXNzZXIgb2VmZm5lbi9zY2hsaXNzZW4pLAorICAgIC8vIFJpY2h0dW5nIG9obmUgenVnZWhvZXJpZ2VuIEF1c2dhbmcsCisgICAgLy8gb2RlciBCZWZlaGwgZW50aGFlbHQgTGVlcnplaWNoZW4gCisgICAgaWYgKCFiZWZDaGVjayhiZWYpKQorICAgICAgd3JpdGUoIkRlciBCZWZlaGwgJyIrYmVmKyInIGthbm4gbmljaHQgYmVzY2hyaWViZW4gd2VyZGVuIVxuIik7CisgICAgZWxzZQorICAgICAgY29tICs9ICh7IGJlZiB9KTsKKyAgfQorICBpZiAoIXNpemVvZihjb20pKQorICAgIHJldHVybiAwOworCisgIGFycl9vdXQoY29tLCAwLCAiWnUgYmVzY2hyZWliZW5kZXIgQmVmZWhsOiAlcyIsCisgICAgICAgICAgIlp1IGJlc2NocmVpYmVuZGUgQmVmZWhsZTpcbiIpOworCisgIHdyaXRlKCAiQml0dGUgUGFyYW1ldGVyIGVpbmdlYmVuIChldnRsLiBkdXJjaCBLb21tYXRhIGdldHJlbm50KS5cbl0iKTsKKyAgaW5wdXRfdG8oImdldEJlZlBhcmFtIiwgMCwgY29tKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8vIGlucHV0X3RvIGF1cyBiZWZFaW5nYWJlKHN0cmluZykgenUgYmVzY2hyZWliZSBiZWZlaGwgLi4uCitzdGF0aWMgdm9pZCBnZXRCZWZQYXJhbShzdHJpbmcgcGFyYW0sIHN0cmluZyAqYmVmKQoreworICBzdHJpbmcgdHh0ID0gIkdpYiBudW4gYml0dGUgZGVuIFRleHQgZWluLCBkZXIgZnVlciBkaWVzZW4gQmVmZWhsICIKKyAgICAgICJhdXNnZWdlYmVuIHdlcmRlbiBzb2xsLlxuIjsKKworICAvLyBGdWVocmVuZGUgdW5kIGFic2NobGllc3NlbmRlIExlZXJ6ZWljaGVuIGVudGZlcm5lbgorICBpZiAocGFyYW0pCisgICAgcGFyYW0gPSB0cmltKHBhcmFtKTsKKworICBpZiAoIXBhcmFtIHx8IHBhcmFtID09ICIiKQorICAgIC8vIGtlaW4gUGFyYW1ldGVyLCB6LmIuIGJlaSBiZXNjaHJlaWJlIGJlZmVobCBrbG9wZmUgCisgICAgZGV0YWlsID0gKHsgYmVmLCAiIiB9KTsKKyAgZWxzZSBpZiAocGFyYW0gPT0gIkBORkAiIHx8IHBhcmFtID09ICJAbmZAIikgeworICAgIC8vIFBhcmFtZXRlciBmdWVyIG5vdGlmeSBmYWlsIHp1bSBFcnNldHplbiB2b24gV2llIGJpdHRlPworICAgIC8vIHouQi4gYmVpIGJlc2NocmVpYmUgYmVmZWhsIGRydWVja2UKKyAgICAvLyBmdWVyIGRhbmFjaCBEdSBrYW5uc3QgaGllciBrZWluIEBQQVJBIGRydWVja2VuLCBudXIgZGVuIEtub3BmIQorICAgIGRldGFpbCA9ICh7IGJlZiwgMSB9KTsKKyAgICB0eHQgPSAiR2liIG51biBiaXR0ZSBkZW4gVGV4dCBlaW4sIGRlciBhbHMgRmVobGVybWVsZHVuZyAiCisgICAgICAgICAgImF1c2dlZ2ViZW4gd2VyZGVuIHNvbGwuXG5AUEFSQSBkaWVudCBkYWJlaSBhbHMgUGxhdHpoYWx0ZXIgZnVlciAiCisgICAgICAgICAgImRpZSB1bmd1ZWx0aWdlIEVpbmdhYmUuXG4iOworICB9CisgIGVsc2UKKyAgICAvLyBzb25zdGlnZSBQYXJhbWV0ZXIKKyAgICAvLyB6LkIuIGtub3BmLCBrbGluZ2VsIGJlaSBiZXNjaHJlaWJlIGJlZmVobCBkcnVlY2tlCisgICAgZGV0YWlsID0gKHsgYmVmIH0pICsgYnJrKGxvd2VyX2Nhc2UocGFyYW0pKTsKKworICBwcmludGYodHh0KyIoQmVlbmRlbiBtaXQgLiBvZGVyICoqLCBBYmJydWNoIG1pdCB+cSlcbiIpOworICBuZWRpdCgiZ2V0QmVmVGV4dCIpOworfQorCisvLyBQcm90b3R5cGUKK3ByaXZhdGUgc3RyaW5nIHByZXBhcnNlKHN0cmluZyBzdHIsIHN0cmluZyAqaW52YWxpZCk7CisKKy8vIG5lZGl0IGZ1ZXIgZGllIEVpbmdhYmUgZGVyIFRleHRlICAoRmVobGVybWVsZHVuZy9NZWxkdW5nZW4pIGZ1ZXIgZGVuIEJlZmVobAorc3RhdGljIHZvaWQgZ2V0QmVmVGV4dChzdHJpbmcgdGV4dCkKK3sKKyAgc3RyaW5nIG15LCAqdHh0LCAqd2FybjsKKyAgbWl4ZWQgYmVmOworCisgIGlmICghdGV4dCB8fCB0ZXh0ID09ICIiKSB7CisgICAgd3JpdGUoIioqIEFiYnJ1Y2ghICoqXG4iKTsKKyAgICBkZXRhaWwgPSAwOworICAgIHJldHVybjsKKyAgfQorICAvLyBnZW1lcmt0ZXMgQmVmZWhscy1BcnJheQorICBiZWYgPSBkZXRhaWxbMF07CisKKyAgdHh0ID0gb2xkX2V4cGxvZGUodGV4dCwgIkBAXG4iKTsKKworICB3YXJuID0gKHt9KTsKKworICAvLyBNZWxkdW5nIGFuIHRoaXNfcGxheWVyKCkgcGFyc2VuIHVuZCBpbiB3YXJuIGZhbHNjaGUgUGxhdHpoYWx0ZXIgc2FtbWVsbgorICBteSA9IHByZXBhcnNlKHR4dFswXSwgJndhcm4pOworICBzdHJpbmcgb3RoZXIgPSAwOworICBpZiAoc2l6ZW9mKHR4dCkgPiAxKQorICAgIC8vIE1lbGR1bmcgYW4gYW5kZXJlIHBhcnNlbiB1bmQgaW4gd2FybiBmYWxzY2hlIFBsYXR6aGFsdGVyIHNhbW1lbG4KKyAgICBvdGhlciA9IHByZXBhcnNlKHR4dFsxXSwgJndhcm4pOworCisgIEFkZFVzZXJDbWQoYmVmLCAoc3RyaW5ncChkZXRhaWxbMV0pID8gZGV0YWlsWzEuLl0gOiAoeyAiQE5GQCIgfSkpLCBteSwgb3RoZXIpOworICBTYXZlKCk7CisgIGFycl9vdXQod2FybiwgIk9LLiIsICJXQVJOVU5HISBVbmd1ZWx0aWdlciBQbGF0emhhbHRlcjogJXMiLAorICAgICAgICAgICAgICAgIldBUk5VTkchIFVuZ3VlbHRpZ2UgUGxhdHpoYWx0ZXI6ICIpOworCisgIGRldGFpbCA9IDA7Cit9CisKKy8vIGNoZWNrLCBvYiBhbiBQb3NpdGlvbiBwb3MgaW4gdHh0IGVpbiBCdWNoc3RhYmUgYXVzIGRlbSBhcnJheSBjaG9pY2Ugc3RlaHQKKy8vIHJldHVybiAwIGZhbGxzIG5pY2h0LCBwcmVmaXggKyBQb3NpdGlvbiBkZXMgQnVjaHN0YWJlbnMgaW4gY2hvaWNlIGFuc29uc3RlbgorLy8gY2hlY2tfcGxhY2Vob2xkZXIoKHsiUiIsIlMiLCJNIiwiTiJ9KSwgMiwgIldFU1NFTiIsICJYIik7IC0+IFgxCitzdHJpbmcgY2hlY2tfcGxhY2Vob2xkZXIoc3RyaW5nKiBjaG9pY2UsIGludCBwb3MsIHN0cmluZyB0eHQsIHN0cmluZyBwcmVmaXgpCit7CisgICBpbnQgaWR4OworICAgIAorICAgaWYoc2l6ZW9mKHR4dCkgPCBwb3MrMSB8fAorICAgICAgKChpZHg9bWVtYmVyKGNob2ljZSwgdHh0W3Bvcy4ucG9zXSkpIDwgMCkpCisgICB7CisgICAgIHJldHVybiAwOworICAgfQorICAgZWxzZQorICAgeworICAgICByZXR1cm4gcHJlZml4K3RvX3N0cmluZyhpZHgpOworICAgfQorfQorCisvLyBEYW5uIGRydWVja3QgQFBXRVIgZGVuIEtub3BmIC0+IERhbm4gZHJ1ZWNrdCBAUDAgZGVuIEtub3BmCitwcml2YXRlIHN0cmluZyBwcmVwYXJzZShzdHJpbmcgc3RyLCBzdHJpbmcgKmludmFsaWQpCit7CisgIHN0cmluZyAqdHh0OworCisgIHR4dCA9IGV4cGxvZGUoc3RyLCAiQCIpOworICAvLyBmdWVyIGplZGVuIFRleHR0ZWlsIG5hY2ggZWluZW0gQAorICAvLyBzdWNoZSBFcnNhdHogZnVlciBkZW4gQmVncmlmZiBkaXJla3QgbmFjaCBkZW0gQAorICAvLyBBTjogd3VlcmRlIGVzIG5pY2h0IHRoZW9yZXRpc2NoIHJlaWNoZW4sIGhpZXIgbnVyIGJpcyBpPjAKKyAgLy8gcnVudGVyenV6YWVobGVuPyBEYXMgZXJzdGUgRWxlbWVudCBkZXMgQXJyYXlzIGlzdCBpbW1lciBpcnJlbGV2YW50LCB3ZWlsCisgIC8vIGVudHdlZGVyIExlZXJzdHJpbmcgb2RlciBrZWluIHp1IGVyc2V0emVuZGVyIEF1c2RydWNrLgorICBmb3IgKGludCBpPXNpemVvZih0eHQpLTE7IGk+PTA7IGktLSkgeworICAgIGludCB3YXJuID0gMDsKKyAgICBzdHJpbmcgcnBsID0gMDsKKyAgICAvLyBmYWxscyBUZWlsIHp1IGt1cnogbml4IGVyc2V0emVuCisgICAgaWYgKHNpemVvZih0eHRbaV0pPDMpCisgICAgICBjb250aW51ZTsKKyAgICAvLyBhbmhhbmQgZGVyIGVyc3RlbiBCdWNoc3RhYmVuLCBFcnNhdHogYmVzdGltbWVuCisgICAgLy8gd2FybiBzaWduYWxpc2llcnQsIG9iIGRpZXMgc2NoaWVmZ2luZzoKKyAgICBzd2l0Y2godHh0W2ldWzAuLjFdKSB7CisgICAgY2FzZSAiV0UiOiAgLy8gTmFtZQorICAgICAgLy8gV0VSICAgICAgLT4gVzAKKyAgICAgIC8vIFdFUyhTRU4pIC0+IFcxCisgICAgICAvLyBXRU0gICAgICAtPiBXMgorICAgICAgLy8gV0VOICAgICAgLT4gVzMKKyAgICAgIHJwbCA9IGNoZWNrX3BsYWNlaG9sZGVyKCh7IlIiLCJTIiwiTSIsIk4ifSksIDIsIHR4dFtpXSwgIlciKTsgIAorICAgICAgd2FybiA9ICFycGw7CisgICAgICBicmVhazsKKyAgICBjYXNlICJQVyI6ICAvLyBQZXJzb25hbHByb25vbWVuCisgICAgICAvLyBQV0VSICAgICAgLT4gUDAKKyAgICAgIC8vIFBXRVMoU0VOKSAtPiBQMQorICAgICAgLy8gUFdFTSAgICAgIC0+IFAyCisgICAgICAvLyBQV0VOICAgICAgLT4gUDMKKyAgICAgIHJwbCA9IGNoZWNrX3BsYWNlaG9sZGVyKCh7IlIiLCJTIiwiTSIsIk4ifSksIDMsIHR4dFtpXSwgIlAiKTsgIAorICAgICAgd2FybiA9ICFycGw7CisgICAgICBicmVhazsKKyAgICBjYXNlICJCTiI6ICAvLyBQb3NzZXNzaXZwcm9ub21lbgorICAgIGNhc2UgIkJNIjoKKyAgICBjYXNlICJCRiI6CisgICAgICAvLyBCTlNXRVIgICAgICAtPiBCMDAwICBCTVNXRVIgICAgICAtPiBCMDEwICBCRlNXRVIgICAgICAtPiBCMDIwCisgICAgICAvLyBCTlNXRVMoU0VOKSAtPiBCMTAwICBCTVNXRVMoU0VOKSAtPiBCMTEwICBCRlNXRVMoU0VOKSAtPiBCMTIwCisgICAgICAvLyBCTlNXRU0gICAgICAtPiBCMjAwICBCTVNXRU0gICAgICAtPiBCMjEwICBCRlNXRU0gICAgICAtPiBCMjIwCisgICAgICAvLyBCTlNXRU4gICAgICAtPiBCMzAwICBCTVNXRU4gICAgICAtPiBCMzEwICBCRlNXRU4gICAgICAtPiBCMzIwCisgICAgICAvLyAKKyAgICAgIC8vIEJOUFdFUiAgICAgIC0+IEIwMDEgIEJNUFdFUiAgICAgIC0+IEIwMTEgIEJGUFdFUiAgICAgIC0+IEIwMjEKKyAgICAgIC8vIEJOUFdFUyhTRU4pIC0+IEIxMDEgIEJNUFdFUyhTRU4pIC0+IEIxMTEgIEJGUFdFUyhTRU4pIC0+IEIxMjEKKyAgICAgIC8vIEJOUFdFTSAgICAgIC0+IEIyMDEgIEJNUFdFTSAgICAgIC0+IEIyMTEgIEJGUFdFTSAgICAgIC0+IEIyMjEKKyAgICAgIHJwbCA9IGNoZWNrX3BsYWNlaG9sZGVyKCh7IlIiLCJTIiwiTSIsIk4ifSksIDUsIHR4dFtpXSwgIkIiKTsKKyAgICAgIHdhcm4gPSAhcnBsOworICAgICAgaWYoIXdhcm4pCisgICAgICB7CisgICAgICAgIHJwbCA9IGNoZWNrX3BsYWNlaG9sZGVyKCh7Ik4iLCJNIiwiRiJ9KSwgMSwgdHh0W2ldLCBycGwpOworICAgICAgICB3YXJuID0gIXJwbDsKKyAgICAgICAgaWYoIXdhcm4pCisgICAgICAgIHsKKyAgICAgICAgICBycGwgPSBjaGVja19wbGFjZWhvbGRlcigoeyJTIiwiUCJ9KSwgMiwgdHh0W2ldLCBycGwpOworICAgICAgICAgIHdhcm4gPSAhcnBsOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICJQQSI6CisgICAgICAvLyBQQVJBIC0+IEYKKyAgICAgIC8vIGtlaW4gRXJzYXR6LCBzb25kZXJuIFRleHR0ZWlsIGhpZXIgZGlyZWt0IGVyc2V0emVuOgorICAgICAgaWYoc2l6ZW9mKHR4dFtpXSkgPiA0KQorICAgICAgICB0eHRbaV0gPSAiRiIrdHh0W2ldWzQuLl07CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgLy8ga2VpbiBFcnNhdHosIG5peCBhZW5kZXJuCisgICAgICB3YXJuID0gMDsKKyAgICAgIHJwbCA9IDA7CisgICAgfQorCisgICAgLy8gZmFsbHMgRXJzYXR6IHZvcmhhbmRlbiwgZXJzZXR6ZSBQcm9ub21lbiBkdXJjaCAiIitycGwgdW5kIGxhc3NlIGRlbiBSZXN0IHQyWzJdIHdpZSBpc3QKKyAgICBpZiAocnBsKSB7CisgICAgICBzdHJpbmcqIHQyOworICAgICAgd2FybiA9IHNpemVvZih0MiA9IHJlZ2V4cGxvZGUodHh0W2ldLCAiKFdFUnxXRVNTRU58V0VNfFdFTikiKSkgPCAyOworICAgICAgaWYgKCF3YXJuKSB7CisgICAgICAgIHQyWzFdID0gcnBsOworICAgICAgICB0MlswXSA9ICIiOworICAgICAgICB0eHRbaV0gPSBpbXBsb2RlKHQyLCAiIik7CisgICAgICB9CisgICAgfQorICAgIC8vIGZhbGxzIGVzIFByb2JsZW1lIGdhYiwgZGllc2UgbWVya2VuCisgICAgaWYgKHdhcm4pCisgICAgICBpbnZhbGlkICs9ICh7ICJAIitvbGRfZXhwbG9kZSh0eHRbaV0sIiAiKVswXSB9KTsKKworICB9IC8vIGZvciAoaT1zaXplb2YodHh0KS0xOyBpPj0wOyBpLS0pCisgIC8vIGRpZSBldmVudHVlbGxlIHRlaWx3ZWlzZSBlcnNldHpldG4gVGVpbGUgd2llZGVyIHp1c2FtbWVuZnVlZ2VuCisgIHJldHVybiBpbXBsb2RlKHR4dCwgIkAiKTsKK30KKworc3RhdGljIHZvaWQgbG9lc2NoX2FsbGVzKHN0cmluZyBzdHIpCit7CisgIGlmIChzdHIgPT0gImphIiB8fCBzdHIgPT0gIkphIikgeworICAgIFJlbW92ZURldGFpbCgwKTsKKyAgICBSZW1vdmVSZWFkRGV0YWlsKDApOworICAgIC8vU2V0UHJvcChQX1JFQURfREVUQUlMUywgKFtdKSk7CisgICAgU2V0UHJvcChIX0NPTU1BTkRTLCAoW10pKTsKKyAgICB3cml0ZSggIk9LLCBhbGxlIERldGFpbHMsIGxlc2JhcmVuIERldGFpbHMgdW5kIEJlZmVobGUgZ2Vsb2VzY2h0IVxuIiApOworICAgIFNhdmUoKTsKKyAgfQorICBlbHNlCisgICAgd3JpdGUoICJOaWNodHMgZ2Vsb2VzY2h0IVxuIiApOworfQorCitzdGF0aWMgdm9pZCBsb2VzY2hfZXR3YXMoc3RyaW5nIHN0ciwgc3RyaW5nIHByb3ApCit7CisgIGlmIChzdHIgPT0gImphIiB8fCBzdHIgPT0gIkphIikgeworICAgIGlmICggcHJvcCA9PSBQX0RFVEFJTFMgKQorICAgICAgUmVtb3ZlRGV0YWlsKDApOworICAgIGVsc2UgaWYgKCBwcm9wID09IFBfUkVBRF9ERVRBSUxTICkKKyAgICAgIFJlbW92ZVJlYWREZXRhaWwoMCk7CisgICAgZWxzZQorICAgICAgU2V0UHJvcChwcm9wLCAoW10pKTsKKyAgICB3cml0ZSgiT0suXG4iKTsKKyAgICBTYXZlKCk7CisgIH0KKyAgZWxzZQorICAgIHdyaXRlKCAiTmljaHRzIGdlbG9lc2NodCFcbiIgKTsKK30KKworaW50IGxvZXNjaChzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKnMsICp0LCBwLCBxOworICBpbnQgaSwgcmV0OworICBtYXBwaW5nIGNvbTsKKworICBpZiAoIXRwX293bmVyX2NoZWNrKCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCEoc3RyPVVQX0FSR1ModGhpc19wbGF5ZXIoKSkpIHx8IHN0ciA9PSAiIikgeworICAgIG5vdGlmeV9mYWlsKCJXZWxjaGVzIERldGFpbCBvZGVyIHdlbGNoZW4gQmVmZWhsIG1vZWNodGVzdCBEdSBsb2VzY2hlbj9cbiIpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKHN0ciA9PSAiYWxsZXMiKSB7CisgICAgd3JpdGUoICJXaXJrbGljaCBhbGxlcyBsb2VzY2hlbiAoamEvbmVpbik/XG5dIik7CisgICAgaW5wdXRfdG8oImxvZXNjaF9hbGxlcyIpOworICAgIHJldHVybiAxOworICB9CisKKyAgaWYoc3RyPT0ibWVsZHVuZ2VuIikgeworICAgIGlmKGZpbGVfc2l6ZShQQVRIKyJyZXAvIitvd25lcisiLnJlcCIpPjApIHsKKyAgICAgIHJtKFBBVEgrInJlcC8iK293bmVyKyIucmVwIik7CisgICAgICB3cml0ZSgiTWVsZHVuZ2VuIGdlbG9lc2NodC5cbiIpOworICAgIH1lbHNleworICAgICAgd3JpdGUoIktlaW5lIE1lbGR1bmdlbiBnZWZ1bmRlbi5cbiIpOworICAgIH0KKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHMgPSBicmsoc3RyKTsKKyAgcyA9ICh7ICh0PW9sZF9leHBsb2RlKHNbMF0sICIgIikpWzBdIH0pKyh7IGltcGxvZGUodFsxLi5dLCIgIikgfSkrc1sxLi5dOworICByZXQgPSAxOworICBmbGFnID0gMDsKKworICBzd2l0Y2goc1swXSkgeworICAgIGNhc2UgImRldGFpbCI6CisgICAgICBzID0gc1sxLi5dOworICAgICAgZmxhZyB8PSBERVRBSUw7CisgICAgICBicmVhazsKKyAgICBjYXNlICJsZXNiYXIiOgorICAgICAgZmxhZyB8PSBSREVUQUlMOworICAgICAgcyA9IHNbMS4uXTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgImxlc2JhcmVzIjoKKyAgICBjYXNlICJsZXNiYXJlIjoKKyAgICAgIGZsYWcgfD0gUkRFVEFJTDsKKyAgICAgIGlmIChzWzFdWzAuLjVdID09ImRldGFpbCIpIHsKKyAgICBzID0gKHsgb2xkX2V4cGxvZGUoc1sxXSwiICIpWzwxXSB9KTsKKyAgICBpZiAoc2l6ZW9mKHMpPjIpCisgICAgICBzICs9IHNbMi4uXTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICBzID0gc1sxLi5dOworICAgICAgYnJlYWs7CisgICAgY2FzZSAiYmVmZWhsIjoKKyAgICAgIHMgPSBzWzEuLl07CisgICAgICBicmVhazsKKyAgICBjYXNlICJhbGxlIjoKKyAgICAgIHN3aXRjaCAoc1sxXSkgeworICAgICAgY2FzZSAiZGV0YWlscyI6CisgICAgcSA9ICJEZXRhaWxzIjsKKyAgICBwID0gUF9ERVRBSUxTOworICAgIGJyZWFrOworICAgICAgY2FzZSAibGVzYmFyZW4gZGV0YWlscyI6CisgICAgcSA9ICJsZXNiYXJlbiBEZXRhaWxzIjsKKyAgICBwID0gUF9SRUFEX0RFVEFJTFM7CisgICAgYnJlYWs7CisgICAgICBjYXNlICJiZWZlaGxlIjoKKyAgICBxID0gIkJlZmVobGUiOworICAgIHAgPSBIX0NPTU1BTkRTOworICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICB3cml0ZSgiRHUga2FubnN0IGFsbGUgQmVmZWhsZSwgYWxsZSBEZXRhaWxzIHVuZCBhbGxlIGxlc2JhcmVuIERldGFpbHMgbG9lc2NoZW4hXG4iKTsKKyAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIHByaW50ZigiV2lya2xpY2ggYWxsZSAlcyBsb2VzY2hlbiAoamEvbmVpbik/XG5dIiwgcSk7CisgICAgICBpbnB1dF90bygibG9lc2NoX2V0d2FzIiwgMCwgcCk7CisgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAgZmxhZyB8PSAoREVUQUlMfFJERVRBSUwpOworICAgICAgcmV0ID0gMDsgIC8vIEtvZW5udGUgYXVjaCBlaW4gQXJ0aWtlbCBpbiBkZXIgWmVpdHVuZyBzZWluLi4uCisgICAgICBicmVhazsKKyAgfQorICBmb3IgKGk9c2l6ZW9mKHMpLTE7IGk+PTA7IGktLSkgeworICAgIGlmICghZmxhZykgeyAgLy8gQmVmZWhsIHNvbGwgZ2Vsb2VzY2h0IHdlcmRlbi4uLgorICAgICAgaWYgKG1lbWJlcihjb209UXVlcnkoSF9DT01NQU5EUyksIHNbaV0pKSB7CisgICAgY29tID0gbV9jb3B5X2RlbGV0ZShjb20sIHNbaV0pOworICAgIHdyaXRlKCJCZWZlaGwgJyIrc1tpXSsiJyB3dXJkZSBnZWxvZXNjaHQuXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHNpemVvZih0PW9sZF9leHBsb2RlKHNbaV0sICIgIikpID4gMSAmJgorICAgICAgICAgICBtZW1iZXIoY29tLCB0WzBdKSAmJgorICAgICAgICAgICBtZW1iZXIoY29tW3RbMF1dLCBwPWltcGxvZGUodFsxLi5dLCAiICIpKSkgeworICAgIGNvbVt0WzBdXSA9IG1fY29weV9kZWxldGUoY29tW3RbMF1dLCBwKTsKKyAgICB3cml0ZSgiQmVmZWhsICciK3NbaV0rIicgd3VyZGUgZ2Vsb2VzY2h0LlxuIik7CisgICAgICB9CisgICAgICBTZXQoSF9DT01NQU5EUywgY29tKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAoZmxhZyAmIERFVEFJTCkgeworICAgIGlmICghUXVlcnlQcm9wKFBfREVUQUlMUylbc1tpXV0pCisgICAgICBub3RpZnlfZmFpbCgiRGFzIERldGFpbCAnIitzW2ldKyInIGdpYnQgZXMgbmljaHQuXG4iKTsKKyAgICBlbHNlIHsKKyAgICAgIFJlbW92ZURldGFpbChzW2ldKTsKKyAgICAgIHdyaXRlKCJEZXRhaWwgJyIrc1tpXSsiJyB3dXJkZSBnZWxvZXNjaHQuXG4iKTsKKyAgICAgIHJldCA9IDE7CisgICAgfQorICAgICAgfQorICAgICAgaWYgKGZsYWcgJiBSREVUQUlMKSB7CisgICAgaWYgKCFRdWVyeVByb3AoUF9SRUFEX0RFVEFJTFMpW3NbaV1dKQorICAgICAgbm90aWZ5X2ZhaWwoIkRhcyBsZXNiYXJlIERldGFpbCAnIitzW2ldKyInIGdpYnQgZXMgbmljaHQuXG4iKTsKKyAgICBlbHNlIHsKKyAgICAgIFJlbW92ZVJlYWREZXRhaWwoc1tpXSk7CisgICAgICB3cml0ZSgiTGVzYmFyZXMgRGV0YWlsICciK3NbaV0rIicgd3VyZGUgZ2Vsb2VzY2h0LlxuIik7CisgICAgICByZXQgPSAxOworICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgU2F2ZSgpOworICByZXR1cm4gcmV0OworfQorCitpbnQgYXVzZ2FuZyhzdHJpbmcgc3RyKQoreworICBpbnQgbnIsIG1heE5yLCBoaW4sIHp1cnVlY2s7CisgIHN0cmluZyBoaWVyLCBkYSwgZXh0OworICBjbG9zdXJlIGhhdXNQcm9wOworICBtYXBwaW5nIGtub3duX2V4aXRzOworCisgIGlmICghdHBfb3duZXJfY2hlY2soKSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgaGllciA9IGRhID0gMDsKKyAgaGF1c1Byb3AgPSBzeW1ib2xfZnVuY3Rpb24oIkhhdXNQcm9wIixWRVJXQUxURVIpOworCisgIGlmICghKHN0cj1VUF9BUkdTKHRoaXNfcGxheWVyKCkpKSB8fAorICAgICAgKHNzY2FuZihzdHIsICIlcyAlZCIsIGhpZXIsIG5yKSAhPSAyICYmCisgICAgICAgc3NjYW5mKHN0ciwgIiVzICVzICVkIixoaWVyLCBleHQsIG5yKSAhPSAzKSApIHsKKyAgICBub3RpZnlfZmFpbCggIlN5bnRheDogYXVzZ2FuZyA8cmljaHR1bmc+IFtuYW1lXSA8bnI+XG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoZXh0KSB7CisgICAgaWYgKGZ1bmNhbGwoaGF1c1Byb3AsIGV4dCwgSFBfRU5WKSAhPSBmdW5jYWxsKGhhdXNQcm9wLCBvd25lciwgSFBfRU5WKSkgeworICAgICAgcHJpbnRmKCJEYXMgSGF1cyB2b24gJXMgc3RlaHQgbmljaHQgaW0gZ2xlaWNoZW4gUmF1bSB3aWUgRGVpbiBIYXVzIVxuIiwKKyAgICAgICAgICAgICBjYXBpdGFsaXplKGV4dCkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGRhID0gUkFVTU5BTUUoZXh0LCBucik7CisKKyAgICAvLyBkZXIgYWxsb3dlZF9jaGVjaygpIHdpcmQgaW0gRWluZ2FuZ3NyYXVtIGRlcyBaaWVsaGF1c2VzIGF1ZmdlcnVmZW4sCisgICAgLy8gZGEgd2lyIHZvbiBhbmRlcmVuIFJhdW1lbiBub2NoIG5pY2h0IHdpc3Nlbiwgb2Igc2llIHVlYmVyaGF1cHQKKyAgICAvLyBleGlzdGllcmVuLgorICAgIGlmICghKFJBVU1OQU1FKGV4dCwgMCktPmFsbG93ZWRfY2hlY2sodGhpc19wbGF5ZXIoKSkpKSB7CisgICAgICBwcmludGYoIkR1IGRhcmZzdCBrZWluZW4gQXVzZ2FuZyB2b24gRGVpbmVtIEhhdXMgenUgZGVtIHZvbiAlcyBsZWdlbiFcbiIsCisgICAgICAgICAgICAgY2FwaXRhbGl6ZShleHQpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBleHQgPSBvd25lcjsKKyAgICBkYSA9IFJBVU1OQU1FKGV4dCwgbnIpOworICB9CisKKyAgbWF4TnIgPSBmdW5jYWxsKGhhdXNQcm9wLCBleHQsIEhQX1JPT01TKTsKKworICBpZiAoIChoaW4gPSBtZW1iZXIoYXVzZ2FlbmdlLCBsb3dlcl9jYXNlKGhpZXIpKSkgPCAwKSB7CisgICAgYXJyX291dChhdXNnYWVuZ2UsIDAsIDAsICJFcyBzaW5kIG51ciBmb2xnZW5kZSBBdXNnYWVuZ2UgbW9lZ2xpY2g6XG4iICk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZWxzZQorICAgIHp1cnVlY2sgPSAoaGluICsgc2l6ZW9mKGF1c2dhZW5nZSkvMikgJSBzaXplb2YoYXVzZ2FlbmdlKTsKKworICBoaWVyID0gUkFVTU5BTUUob3duZXIsIHJhdW1Ocik7CisKKyAgLy8gS29waWUgZGVzIEF1c2dhZW5nZS1NYXBwaW5ncyBlcnpldWdlbgorICBrbm93bl9leGl0cz1kZWVwX2NvcHkoUXVlcnlQcm9wKFBfRVhJVFMpKTsKKyAgLy8gdW5kIGRlbiBOb3RhdXNnYW5nIGVudGZlcm5lbi4gU29taXQgYmxlaWJlbiBudXIgZGllIHp1IGJldHJhY2h0ZW5kZW4gCisgIC8vIEF1c2dhZW5nZSB1ZWJlci4KKyAga25vd25fZXhpdHNbIm5vdGF1c2dhbmciXT0wOworCisgIGlmIChuciA8IDAgfHwgbnIgPiBtYXhOcikKKyAgICBwcmludGYoICJEaWUgTnVtbWVyIGRhcmYgc2ljaCBudXIgaW0gQmVyZWljaCB6d2lzY2hlbiAwIHVuZCAlZCBiZXdlZ2VuIVxuIiwKKyAgICAgICAgICAgIG1heE5yICk7CisgIGVsc2UgaWYgKCBleHQgPT0gb3duZXIgJiYgbnIgPT0gcmF1bU5yKQorICAgIHByaW50ZiggIkFiZXIgZGllcyBJU1QgUmF1bSAlZCFcbiIsIHJhdW1OciApOworICBlbHNlIGlmIChtZW1iZXIobV9pbmRpY2VzKGtub3duX2V4aXRzKSwgYXVzZ2FlbmdlW2hpbl0pICE9IC0xKQorICAgIHdyaXRlKCAiQXVzIGRpZXNlbSBSYXVtIGZ1ZWhydCBzY2hvbiBlaW4gQXVzZ2FuZyBpbiBkaWVzZSBSaWNodHVuZyFcbiIgKTsKKyAgLy9lbHNlIGlmIChtZW1iZXIobV92YWx1ZXMoUXVlcnlQcm9wKFBfRVhJVFMpKSwgZGEpICE9IC0xKQorICAvLyBOb3RhdXNnYW5nIHdpcmQgaGllciB6d2FyIGdlbG9lc2NodCwgYWJlciBpbSBBZGRFeGl0CisgIC8vIGdpYnQncyBlaCBlaW5lbiBuZXVlbiwgc28gZGFzIG5vZXRpZyBpc3QsIFYqCisgIGVsc2UgaWYgKG1lbWJlcihtX3ZhbHVlcyhrbm93bl9leGl0cyksIGRhKSAhPSAtMSkKKyAgICBwcmludGYoICJFcyBnaWJ0IGhpZXIgc2Nob24gZWluZW4gQXVzZ2FuZyB6dSBSYXVtICVkIVxuIiwgbnIgKTsKKyAgZWxzZSBpZiAobWVtYmVyKG1faW5kaWNlcyhkYS0+UXVlcnlQcm9wKFBfRVhJVFMpKSwgYXVzZ2FlbmdlW3p1cnVlY2tdKSAhPSAtMSkKKyAgICBwcmludGYoICJFcyBmdWVocnQgc2Nob24gaXJnZW5kd28gZWluIEF1c2dhbmcgaW4gUmljaHR1bmcgJyVzJ1xuIgorICAgICAgICAgICAgIm5hY2ggUmF1bSAlZCFcbiIsIGF1c2dhZW5nZVtoaW5dLCBucik7CisgIGVsc2UgeworICAgIEFkZEV4aXQoIGF1c2dhZW5nZVtoaW5dLCBkYSApOworICAgIFNhdmUoKTsKKyAgICBkYS0+QWRkRXhpdChhdXNnYWVuZ2VbenVydWVja10sIGhpZXIpOworICAgIGRhLT5TYXZlKCk7CisgICAgcHJpbnRmKCAiT0ssIGRlciBBdXNnYW5nICclcycgenVtIFJhdW0gJWQgd3VyZGUgZWluZ2VyaWNodGV0LlxuIiwKKyAgICAgICAgICAgIGF1c2dhZW5nZVtoaW5dLCBuciApOworICB9CisgIHJldHVybiAxOworfQorCitpbnQKK3NwZXJyZW4oc3RyaW5nIHN0cikKK3sKKyAgbWFwcGluZyBleCwgY21kczsKKyAgaW50IGhpbiwgenVydWVjazsKKworICBpZiAoIXRwX293bmVyX2NoZWNrKCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCEoc3RyPVVQX0FSR1ModGhpc19wbGF5ZXIoKSkpIHx8IHN0ciA9PSAiIikgeworICAgIG5vdGlmeV9mYWlsKCAiU3ludGF4OiBzcGVycmUgPGF1c2dhbmc+XG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgc3RyID0gbG93ZXJfY2FzZShzdHIpOworICBleCA9IFF1ZXJ5UHJvcChQX0VYSVRTKTsKKworICBpZiAocmF1bU5yID09IDAgJiYgc3RyID09ICJyYXVzIikgeworICAgIHdyaXRlKCAiRHUga2FubnN0IGRvY2ggbmljaHQgRGVpbmUgSGF1c3R1ZXIgbG9lc2NoZW4hXG4iICk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgaWYgKCFtZW1iZXIoZXgsc3RyKSB8fCAoaGluID0gbWVtYmVyKGF1c2dhZW5nZSxzdHIpKSA8IDApIHsKKyAgICBwcmludGYoICJFcyBnaWJ0IGhpZXIga2VpbmVuIEF1c2dhbmcgJyVzJyFcbiIsIHN0cik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZWxzZQorICAgIHp1cnVlY2sgPSAoaGluICsgc2l6ZW9mKGF1c2dhZW5nZSkvMikgJSBzaXplb2YoYXVzZ2FlbmdlKTsKKworICBleFtzdHJdLT5SZW1vdmVFeGl0KGF1c2dhZW5nZVt6dXJ1ZWNrXSk7CisgIHRlbGxfcm9vbShmaW5kX29iamVjdChleFtzdHJdKSwgc3ByaW50ZigiRGVyIEF1c2dhbmcgJyVzJyB2ZXJzY2h3aW5kZXQgcGxvZXR6bGljaC4uLlxuIiwgYXVzZ2FlbmdlW3p1cnVlY2tdKSk7CisgIGNtZHMgPSBleFtzdHJdLT5RdWVyeVByb3AoSF9DT01NQU5EUyk7CisgIGNtZHMgPSBtX2NvcHlfZGVsZXRlKGNtZHMsIGF1c2dhZW5nZVt6dXJ1ZWNrXSk7CisgIGV4W3N0cl0tPlNldFByb3AoSF9DT01NQU5EUywgY21kcyk7CisgIGV4W3N0cl0tPlNhdmUoKTsKKyAgUmVtb3ZlRXhpdChzdHIpOworICBjbWRzID0gUXVlcnlQcm9wKEhfQ09NTUFORFMpOworICBjbWRzID0gbV9jb3B5X2RlbGV0ZShjbWRzLCBzdHIpOworICBTZXRQcm9wKEhfQ09NTUFORFMsIGNtZHMpOworICBTYXZlKCk7CisgIHByaW50ZiggIk9LLCBkZXIgQXVzZ2FuZyAnJXMnIHd1cmRlIGVudGZlcm50LlxuIiwgc3RyICk7CisKKyAgU2F2ZSgpOworCisgIHJldHVybiAxOworfQorCit2YXJhcmdzIGludAordWViZXJzaWNodChzdHJpbmcgZHVtbXksIHN0cmluZyBwcmUpCit7CisgIHN0cmluZyAqeGMsICp4ZCwgbywgcmF1cywgc3RyOworICBtaXhlZCAqY29tOworICBtYXBwaW5nIHRtcDsKKyAgaW50IGksaixrOworCisgIGlmICggKGdldHVpZCh0aGlzX3BsYXllcigpKSAhPSBvd25lcikgJiYKKyAgICAgICAhKFBBVEgrImFjY2Vzc19yaWdodHMiKS0+YWNjZXNzX3JpZ2h0cyhnZXRldWlkKHRoaXNfcGxheWVyKCkpLCAiIikgKQorICAgIHJldHVybiAwOworCisgIGkgPSBWRVJXQUxURVItPkhhdXNQcm9wKG93bmVyLCBIUF9ST09NUyk7CisKKyAgaWYgKGkpCisgICAgc3RyID0gc3ByaW50ZiggIkRlaW4gSGF1cyB2ZXJmdWVndCB1ZWJlciAlZCBSYWV1bWUuXG5EdSBzdGVoc3QgaW4gUmF1bSAlZCAoJXMpLlxuXG4iLCBpKzEsIHJhdW1OciwgUXVlcnlQcm9wKFBfSU5UX1NIT1JUKSApOworICBlbHNlCisgICAgc3RyID0gc3ByaW50ZiggIkRlaW4gSGF1cyB2ZXJmdWVndCB1ZWJlciBlaW5lbiBSYXVtICglcylcblxuIiwgUXVlcnlQcm9wKFBfSU5UX1NIT1JUKSk7CisKKyAgc3RyICs9IGFycl9vdXQobV9pbmRpY2VzKFF1ZXJ5UHJvcChQX0RFVEFJTFMpKSwKKyAgICAgICAgICJEdSBoYXN0IGtlaW5lIERldGFpbHMgYmVzY2hyaWViZW4uIiwKKyAgICAgICAgICJEdSBoYXN0IGRhcyBEZXRhaWwgJyVzJyBiZXNjaHJpZWJlbi4iLAorICAgICAgICAgIkR1IGhhc3QgZm9sZ2VuZGUgRGV0YWlscyBiZXNjaHJpZWJlbjpcbiIsIDEgKTsKKworICBzdHIgKz0gKCJcbiIgKyBhcnJfb3V0KG1faW5kaWNlcyhRdWVyeVByb3AoUF9SRUFEX0RFVEFJTFMpKSwKKyAgICAgICAgICJEdSBoYXN0IGtlaW5lIGxlc2JhcmVuIERldGFpbHMgYmVzY2hyaWViZW4uIiwKKyAgICAgICAgICJEdSBoYXN0IGRhcyBsZXNiYXJlIERldGFpbCAnJXMnIGJlc2NocmllYmVuLiIsCisgICAgICAgICAiRHUgaGFzdCBmb2xnZW5kZSBsZXNiYXJlbiBEZXRhaWxzIGJlc2NocmllYmVuOlxuIiwgMSApICk7CisKKyAgdG1wID0gUXVlcnkoSF9DT01NQU5EUyk7CisgIHhjID0gc29ydF9hcnJheShtX2luZGljZXModG1wKSwjJzwpOworICBpZiAoIXNpemVvZih4YykpCisgICAgc3RyICs9ICgiXG5EdSBoYXN0IGtlaW5lIEJlZmVobGUgYmVzY2hyaWViZW4uXG4iKTsKKyAgZWxzZSB7CisgICAgaWYgKHNpemVvZih4YykgPT0gMSAmJiBzaXplb2YoeGQ9bV9pbmRpY2VzKHRtcFt4Y1swXV0pKSA9PSAxKQorICAgICAgc3RyICs9ICgiXG5EdSBoYXN0IGRlbiBCZWZlaGwgJyIrCisgICAgICAgICAgeGNbMF0rKCh4ZFswXSA9PSAiIikgPyAiIiA6ICIgIit4ZFswXSkrCisgICAgICAgICAgIicgYmVzY2hyaWViZW4uXG4iKTsKKyAgICBlbHNlIHsKKyAgICAgIHN0ciArPSAiXG5EdSBoYXN0IGZvbGdlbmRlIEJlZmVobGUgYmVzY2hyaWViZW46XG4iOworCisgICAgICBmb3IgKGNvbSA9ICh7fSksIGo9c2l6ZW9mKHhjKS0xOyBqID49IDA7IGotLSkgeworICAgIHhkID0gc29ydF9hcnJheShtX2luZGljZXModG1wW3hjW2pdXSktKHsiQE5GQCJ9KSwjJz4pOworICAgIGlmICgoc2l6ZW9mKHhkKSA+IDEpICYmICh4ZFswXSA9PSAiIikpIHsKKyAgICAgIHJhdXMgPSAiKiAiK3hjW2pdKyIsICIreGNbal0rIiAiOworICAgICAgeGQgPSB4ZFsxLi5dOworICAgIH0KKyAgICBlbHNlCisgICAgICByYXVzID0gIiogIit4Y1tqXSsiICI7CisKKyAgICBzdHIgKz0gYXJyX291dCh4ZCwgIiIsIHJhdXMrIiVzIiwgcmF1cywgMyk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmF1cyA9IChtZW1iZXIoUXVlcnlQcm9wKFBfRVhJVFMpLCJyYXVzIikgPyAicmF1czogTmFjaCBkcmF1c3Nlbi5cbiIgOiAwICk7CisgIHRtcCA9IG1fY29weV9kZWxldGUoUXVlcnlQcm9wKFBfRVhJVFMpLCAicmF1cyIpOworICBtX2RlbGV0ZSh0bXAsICJub3RhdXNnYW5nIik7CisgIHhjID0gbV9pbmRpY2VzKHRtcCk7CisgIHhkID0gbV92YWx1ZXModG1wKTsKKworICBpZiAoIXNpemVvZih4YykgJiYgIXJhdXMpCisgICAgc3RyICs9ICJcbkVTIEdJQlQgS0VJTkUgQVVTR0FFTkdFIVxuIjsKKyAgZWxzZSB7CisgICAgc3RyICs9ICAiXG5FcyBnaWJ0IGZvbGdlbmRlIEF1c2dhZW5nZTpcbiI7CisgICAgZm9yIChpPXNpemVvZih4YyktMTsgaT49MDsgaS0tKQorICAgICAgc3RyICs9IHNwcmludGYoICIlczogTmFjaCBSYXVtICVkICVzKCVzKS5cbiIsCisgICAgICAgICAgICAgeGNbaV0sCisgICAgICAgICAgICAgKGo9dG9faW50KHhkW2ldWzwxLi5dKSksCisgICAgICAgICAgICAgKCgobz1vbGRfZXhwbG9kZSh4ZFtpXSwiLyIpWzwxXVswLi48Nl0pPT1vd25lcikgPworICAgICAgICAgICAgICIiIDogInZvbiAiK2NhcGl0YWxpemUobykrIiAiKSwKKyAgICAgICAgICAgICB4ZFtpXS0+UXVlcnlQcm9wKFBfSU5UX1NIT1JUKSApOworICB9CisgIHN0ciArPSAoKHJhdXN8fCIiKSsocHJlfHwiIikpOworICB0aGlzX3BsYXllcigpLT5Nb3JlKHN0cik7CisgIHJldHVybiAxOworfQorCitpbnQga29waWVyZW4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIHdhcywgYWx0LCBuLCAqbmV1LCAqcGFyLCBlcnI7CisgIG1peGVkIGRhczsKKyAgbWFwcGluZyBjb207CisKKyAgaWYgKCF0cF9vd25lcl9jaGVjaygpKQorICAgIHJldHVybiAwOworCisgIG5vdGlmeV9mYWlsKCIna29waWVyZSBkZXRhaWwgPHZvbj4gbmFjaCA8bmFjaD4nIG9kZXJcbiIKKyAgICAgICAgICsiJ2tvcGllcmUgbGVzYmFyZXMgZGV0YWlsIDx2b24+IG5hY2ggPG5hY2g+JyBvZGVyXG4iCisgICAgICAgICArIidrb3BpZXJlIGJlZmVobCA8YmVmZWhsPiBbPHBhcmFtZXRlcj5dIG5hY2ggPGJlZmVobD4gWzxwYXJhbWV0ZXI+XSchXG4iKTsKKworICBpZiAoIShzdHI9VVBfQVJHUyh0aGlzX3BsYXllcigpKSkgfHwgc3RyID09ICIiKQorICAgIHJldHVybiAwOworCisgIG5ldSA9IG9sZF9leHBsb2RlKHN0ciwgIiAiKTsKKyAgd2FzID0gbmV1WzBdWzAuLjVdOworICBpZiAod2FzID09ICJkZXRhaWwiIHx8IHdhcyA9PSAiYmVmZWhsIikKKyAgICBzdHIgPSBpbXBsb2RlKG5ldVsxLi5dLCAiICIpOworICBlbHNlIGlmICh3YXMgPT0gImxlc2JhciIpCisgICAgc3RyID0gaW1wbG9kZShuZXVbMi4uXSwgIiAiKTsKKyAgZWxzZQorICAgIHJldHVybiAwOworCisgIGlmIChzc2NhbmYoc3RyLCAiJXMgbmFjaCAlcyIsIGFsdCwgbikgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBuZXUgPSBicmsobik7CisgIHN3aXRjaCh3YXMpIHsKKyAgICBjYXNlICJkZXRhaWwiOgorICAgICAgZXJyID0gIkRldGFpbCI7CisgICAgICBpZiAoZGFzID0gR2V0RGV0YWlsKGFsdCkpIHsKKyAgICBBZGREZXRhaWwobmV1LCBkYXMpOworICAgIFNhdmUoKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgImxlc2JhciI6CisgICAgICBlcnIgPSAibGVzYmFyZXMgRGV0YWlsIjsKKyAgICAgIGlmIChkYXMgPSBRdWVyeVByb3AoUF9SRUFEX0RFVEFJTFMpW2FsdF0pIHsKKyAgICBBZGRSZWFkRGV0YWlsKG5ldSwgZGFzKTsKKyAgICBTYXZlKCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICJiZWZlaGwiOgorICAgICAgZXJyID0gIkJlZmVobCI7CisgICAgICB3YXMgPSAocGFyPW9sZF9leHBsb2RlKGFsdCwgIiAiKSlbMF07CisgICAgICBpZiAobWVtYmVyKGNvbT1RdWVyeVByb3AoSF9DT01NQU5EUyksd2FzKSkgeworICAgIGludCBpOworICAgIGlmIChzaXplb2YocGFyKSA9PSAxKSB7IC8vIDxiZWY+IG5hY2ggPGJlZjEsYmVmMiwuLi4+CisgICAgICBkYXMgPSBjb21bd2FzXTsKKyAgICAgIGZvciAoaT1zaXplb2YobmV1KS0xOyBpPj0wOyBpLS0pIHsKKyAgICAgICAgaWYgKGJlZkNoZWNrKG5ldVtpXSkpIHsKKyAgICAgICAgICBpZiAoY29tW25ldVtpXV0pCisgICAgICAgIGNvbVtuZXVbaV1dICs9IGRhczsKKyAgICAgICAgICBlbHNlCisgICAgICAgIGNvbSArPSAoWyBuZXVbaV0gOiBkYXMgXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHdyaXRlKCJVbmd1ZWx0aWdlciBCZWZlaGw6ICciK25ldVtpXSsiJy5cbiIpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsgICAgICAgIC8vIDxiZWY+IDxwYXJhbWV0ZXI+IG5hY2ggPGJlZjEsYmVmMiwuLi4+CisgICAgICBhbHQgPSBpbXBsb2RlKHBhclsxLi5dLSh7IiJ9KSwiICIpOworICAgICAgaWYgKGRhcyA9IGNvbVt3YXNdW2FsdF0pIHsKKyAgICAgICAgZm9yIChpPXNpemVvZihuZXUpLTE7IGk+PTA7IGktLSkgeworICAgICAgICAgIGlmIChiZWZDaGVjayhuZXVbaV0pKSB7CisgICAgICAgIGRhcyA9IChbIGFsdCA6IGNvbVt3YXNdW2FsdF07Y29tW3dhc11bYWx0LDFdIF0pOworICAgICAgICBpZiAoY29tW25ldVtpXV0pCisgICAgICAgICAgY29tW25ldVtpXV0gKz0gZGFzOworICAgICAgICBlbHNlCisgICAgICAgICAgY29tICs9IChbIG5ldVtpXSA6IGRhcyBdKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgIHBhciA9IG9sZF9leHBsb2RlKG5ldVtpXSwgIiAiKTsKKyAgICAgICAgbiA9IHBhclswXTsKKyAgICAgICAgaWYgKGJlZkNoZWNrKG4pKSB7CisgICAgICAgICAgZGFzID0gKFsgaW1wbG9kZShwYXJbMS4uXSwgIiAiKSA6IGNvbVt3YXNdW2FsdF07Y29tW3dhc11bYWx0LDFdIF0pOworICAgICAgICAgIGlmIChjb21bbl0pCisgICAgICAgICAgICBjb21bbl0gKz0gZGFzOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbSArPSAoWyBuIDogZGFzIF0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB3cml0ZSgiVW5ndWVsdGlnZXIgQmVmZWhsOiAnIituZXVbaV0rIicuXG4iKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgU2F2ZSgpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHdyaXRlKCAiRHUga2FubnN0IG51ciBEZXRhaWxzLCBsZXNiYXJlIERldGFpbHMgdW5kIEJlZmVobGUga29waWVyZW4hXG4iICk7CisgICAgICByZXR1cm4gMTsKKyAgfQorICBpZiAoIWRhcykKKyAgICBwcmludGYoICJLYW5uICVzICclcycgbmljaHQgZmluZGVuIVxuIiwgZXJyLCBhbHQpOworICBlbHNlCisgICAgd3JpdGUoICJPSyFcbiIgKTsKKworICByZXR1cm4gMTsKK30KKworaW50IGxpY2h0KHN0cmluZyBzdHIpCit7CisgIGludCBsbCwgdGw7CisKKyAgaWYgKCFhbGxvd2VkX2NoZWNrKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmICghc3RyIHx8IChzdHIgIT0gImFuIiAmJiBzdHIgIT0gImF1cyIpKSB7CisgICAgbm90aWZ5X2ZhaWwoIlN5bnRheDogJ2xpY2h0IGFuJyBvZGVyICdsaWNodCBhdXMnXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGxsID0gUXVlcnlQcm9wKFBfTElHSFQpOworICB0bCA9IFBMLT5RdWVyeVByb3AoUF9QTEFZRVJfTElHSFQpOworCisgIHN3aXRjaChzdHIpIHsKKyAgY2FzZSAiYW4iOgorICAgIGlmICh0bCA+IDApCisgICAgICB3cml0ZSgiQWJlciBlcyBpc3QgZG9jaCBzY2hvbiBoZWxsIVxuIik7CisgICAgZWxzZSB7CisgICAgICBTZXRQcm9wKFBfTElHSFQsIDEpOworICAgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksICJFcyB3aXJkIHdpZWRlciBoZWxsLlxuIik7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlICJhdXMiOgorICAgIGlmICh0bCA8PSAwKQorICAgICAgd3JpdGUoIkFiZXIgZXMgaXN0IGRvY2ggc2Nob24gZHVua2VsIVxuIik7CisgICAgZWxzZSB7CisgICAgICBTZXRQcm9wKFBfTElHSFQsIDApOworICAgICAgdGVsbF9yb29tKHRoaXNfb2JqZWN0KCksICJFcyB3aXJkIGR1bmtlbC5cbiIpOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gMTsKK30KKworI2RlZmluZSBDQVNVUyAoeyAiV0VSIiwgIldFU1NFTiIsICJXRU0iLCAiV0VOIiB9KQorc3RhdGljIHN0cmluZyBycFhjaGcoc3RyaW5nIHMpCit7CisgIGludCBjLHAsZzsKKworICBzd2l0Y2goc1swLi4xXSkgeworICAgIGNhc2UgIkBXIjoKKyAgICAgIGMgPSB0b19pbnQoc1syLi4yXSk7CisgICAgICByZXR1cm4gKCJAIitDQVNVU1tjXSk7CisgICAgY2FzZSAiQFAiOgorICAgICAgYyA9IHRvX2ludChzWzIuLjJdKTsKKyAgICAgIHJldHVybiAoIkBQIitDQVNVU1tjXSk7CisgICAgY2FzZSAiQEIiOgorICAgICAgYyA9IHRvX2ludChzWzIuLjJdKTsKKyAgICAgIGcgPSB0b19pbnQoc1szLi4zXSk7CisgICAgICBwID0gdG9faW50KHNbNC4uNF0pOworICAgICAgcmV0dXJuICgiQEIiKyh7Ik4iLCAiTSIsICJGIn0pW2ddKyh7IlMiLCAiUCJ9KVtwXStDQVNVU1tjXSk7CisgICAgY2FzZSAiQEYiOgorICAgICAgcmV0dXJuICJAUEFSQSI7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisKK3ByaXZhdGUgc3RyaW5nIHJlUGFyc2Uoc3RyaW5nIHMxLCBzdHJpbmcgczIpCit7CisgIHN0cmluZyAqcDsKKworICBpZiAoczIpCisgICAgczEgPSBzMSsiQEBcbiIrczI7CisKKyAgcCA9IHJlZ2V4cGxvZGUoczEsICIoQFdbMC0zXXxAUFswLTNdfEBCWzAtM11bMC0yXVswLTFdKSIpOworICBwID0gbWFwKHAsICMncnBYY2hnKTsKKyAgcmV0dXJuIGltcGxvZGUocCwgIiIpOworfQorCitwcml2YXRlIHN0cmluZyBnZXRQcmVUZXh0KHN0cmluZyBwcm9wLCBzdHJpbmcgZXhwcikKK3sKKyAgbWl4ZWQgY3J1bmNoZWQ7CisgIGludCBpOworCisgIGNydW5jaGVkID0gVkVSV0FMVEVSLT5QQ3J1bmNoKFF1ZXJ5UHJvcChwcm9wKSk7CisgIGlmICghY3J1bmNoZWQgfHwgIXBvaW50ZXJwKGNydW5jaGVkKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAocHJvcCA9PSBIX0NPTU1BTkRTICYmIHN0cnN0cihleHByLCAiICIpIDwgMCkKKyAgICBleHByID0gZXhwcisiICI7CisKKyAgZm9yIChpPXNpemVvZihjcnVuY2hlZCktMTsgaT49MDsgaS0tKQorICAgIGlmIChtZW1iZXIoY3J1bmNoZWRbaV1bMF0sIGV4cHIpID49IDApCisgICAgICBicmVhazsKKworICBpZiAoaTwwKQorICAgIHJldHVybiAwOworCisgIGRldGFpbCA9IGNydW5jaGVkW2ldWzBdOworCisgIGlmIChwcm9wID09IEhfQ09NTUFORFMpCisgICAgcmV0dXJuIHJlUGFyc2UoY3J1bmNoZWRbaV1bMV0sIGNydW5jaGVkW2ldWzJdKTsKKyAgZWxzZQorICAgIHJldHVybiBjcnVuY2hlZFtpXVsxXTsKK30KKwordmFyYXJncyBpbnQKK2FlbmRlcm4oc3RyaW5nIHN0ciwgaW50IGYpCit7CisgIHN0cmluZyAqcGFydHMsIHByZTsKKyAgaW50IHNwLCBzciwgcmV0OworCisgIGlmICghdHBfb3duZXJfY2hlY2soKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoIWYgJiYgKCEoc3RyPVVQX0FSR1ModGhpc19wbGF5ZXIoKSkpIHx8IHN0ciA9PSAiIikpIHsKKyAgICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSBkZW5uIGFlbmRlcm4/XG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBzcCA9IHNpemVvZihwYXJ0cyA9IG9sZF9leHBsb2RlKHN0ciwgIiAiKSk7CisgIHNyID0gc2l6ZW9mKGJyayhzdHIpKTsKKyAgZGV0YWlsID0gMDsKKyAgZmxhZyA9IGY7CisKKyAgc3dpdGNoKHBhcnRzWzBdWzAuLjNdKSB7CisgICAgY2FzZSAicmF1bSI6ICAgICAgLy8gTGFuZy0gb2RlciBLdXJ6YmVzY2hyZWlidW5nCisgICAgY2FzZSAiaGF1cyI6CisgICAgICBpZiAoc3AgPT0gMSB8fCBwYXJ0c1sxXSA9PSAibGFuZyIpCisgICAgZmxhZyB8PSBMQU5HOworICAgICAgZWxzZSBpZiAocGFydHNbMV0gPT0gImt1cnoiKSB7CisgICAgd3JpdGUoIk5pbW0gZGF6dSBkb2NoIGJpdHRlICdiZXNjaHJlaWJlJyFcbiIpOworICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgcHJlID0gKChmbGFnICYgQVVTU0VOKSA/IChmaW5kX29iamVjdChIQVVTTkFNRShvd25lcikpKS0+UXVlcnlQcm9wKFBfTE9ORykgOiBRdWVyeVByb3AoUF9JTlRfTE9ORykpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAibWVsZCI6CisgICAgICBpZiAoZmlsZV9zaXplKFJFUEZJTEUob3duZXIpKSA+IDApCisgICAgcHJlID0gcmVhZF9maWxlKFJFUEZJTEUob3duZXIpKTsKKyAgICAgIGVsc2UgeworICAgIHdyaXRlKCJJY2ggZmluZGUga2VpbmUgTWVsZHVuZ2VuIGF1cyBEZWluZW0gSGF1cyFcbiIpOworICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgZmxhZyB8PSBSRVBPUlQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICJkZXRhIjogICAgICAvLyBEZXRhaWxzCisgICAgICBpZiAoc3A9PTEpIHsKKyAgICBub3RpZnlfZmFpbCgiV2VsY2hlcyBEZXRhaWwgd2lsbHN0IER1IGRlbm4gYWVuZGVybj9cbiIpOworICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKHNyPjEpIHsKKyAgICBub3RpZnlfZmFpbCgiRHUga2FubnN0IGltbWVyIG51ciBlaW4gRGV0YWlsIGFlbmRlcm4hXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGZsYWcgfD0gREVUQUlMOworICAgICAgcHJlID0gZ2V0UHJlVGV4dChQX0RFVEFJTFMsIGltcGxvZGUocGFydHNbMS4uXSwgIiAiKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlICJsZXNiIjogICAgICAvLyBsZXNiYXJlIERldGFpbHMKKyAgICAgIG5vdGlmeV9mYWlsKCJXZWxjaGVzIGxlc2JhcmUgRGV0YWlsIHdpbGxzdCBEdSBkZW5uIGFlbmRlcm4/XG4iKTsKKyAgICAgIGlmIChzcCA9PSAxKSByZXR1cm4gMDsKKyAgICAgIGlmICgocGFydHNbMV0gPT0gImRldGFpbHMiIHx8IHBhcnRzWzFdID09ICJkZXRhaWwiKSAmJiAoc3A9PTIpKQorICAgIHJldHVybiAwOworICAgICAgaWYgKHNyPjEpIHsKKyAgICBub3RpZnlfZmFpbCgiRHUga2FubnN0IGltbWVyIG51ciBlaW4gbGVzYmFyZXMgRGV0YWlsIGFlbmRlcm4hXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIGZsYWcgfD0gUkRFVEFJTDsKKyAgICAgIHByZSA9IGdldFByZVRleHQoUF9SRUFEX0RFVEFJTFMsIGltcGxvZGUocGFydHNbMS4uXSwgIiAiKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlICJiZWZlIjogICAgICAvLyBCZWZlaGxlCisgICAgICByZXQgPSAwOworICAgICAgaWYgKHNwID09IDEpIHsKKyAgICBub3RpZnlfZmFpbCgiV2VsY2hlbiBCZWZlaGwgd2lsbHN0IER1IGRlbm4gYWVuZGVybj9cbiIpOworICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKHNyPjEpIHsKKyAgICBub3RpZnlfZmFpbCgiRHUga2FubnN0IGltbWVyIG51ciBlaW5lbiBCZWZlaGwgYWVuZGVybiFcbiIpOworICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgZmxhZyB8PSBCRUZFSEw7CisgICAgICBwcmUgPSBnZXRQcmVUZXh0KEhfQ09NTUFORFMsIGltcGxvZGUocGFydHNbMS4uXSwgIiAiKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbm90aWZ5X2ZhaWwoIkRhcyBrYW5uc3QgRHUgbmljaHQgYWVuZGVybiEgRWluZSBMaXN0ZSBkZXIgRGluZ2UsIGRpZSBEdSBoaWVyIGFlbmRlcm5cbiIKKyAgICAgICAgICsia2FubnN0LCBlcmhhZWx0c3QgRHUgbWl0ICdoaWxmZSBhZW5kZXJlJy5cbiIgKTsKKyAgICAgIHJldHVybiAwOworICAgICAgYnJlYWs7CisgIH0KKyAgaWYgKCFwcmUpCisgICAgd3JpdGUoIkhtLCBzb3dhcyBpc3QgaGllciBub2NoIG5pY2h0IGJlc2NocmllYmVuLi4uXG4iKTsKKyAgZWxzZSB7CisgICAgd3JpdGUoICJBZW5kZXJlIG51biBkZW4gVGV4dC5cbihCZWVuZGVuIG1pdCAuIG9kZXIgKiosIEFiYnJ1Y2ggbWl0IH5xLCBIaWxmZSBtaXQgfmgpXG4iICk7CisgICAgbmVkaXQoICJhZW5kZXJ1bmciLCBwcmUgKTsKKyAgfQorICByZXR1cm4gMTsKK30KKwordm9pZCBhZW5kZXJ1bmcoc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nICp3YXJuOworCisgIGlmICghc3RyKSB7CisgICAgd3JpdGUoIk5pY2h0cyBnZWFlbmRlcnQhXG4iKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoZmxhZyAmJiAhKGZsYWcgJiBCRUZFSEwpKQorICAgIHN0ciA9IG5vcm1zdHIoc3RyKTsKKworICB3YXJuID0gKHsgfSk7CisKKyAgaWYgKGZsYWcgJiBMQU5HKSB7CisgICAgaWYgKGZsYWcgJiBBVVNTRU4pIHsKKyAgICAgIG9iamVjdCBoYXVzOworICAgICAgaGF1cyA9IGZpbmRfb2JqZWN0KEhBVVNOQU1FKG93bmVyKSk7CisgICAgICBoYXVzLT5TZXRQcm9wKFBfTE9ORywgc3RyKTsKKyAgICAgIGhhdXMtPlNhdmUoKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgU2V0UHJvcChQX0lOVF9MT05HLCBzdHIpOworICB9CisgIGVsc2UgaWYgKGZsYWcgJiBERVRBSUwpIHsKKyAgICBpZiAoc3RyID09ICIiKQorICAgICAgUmVtb3ZlRGV0YWlsKGRldGFpbCk7CisgICAgZWxzZQorICAgICAgQWRkRGV0YWlsKGRldGFpbCwgc3RyKTsKKyAgfQorICBlbHNlIGlmIChmbGFnICYgUkRFVEFJTCkgeworICAgIGlmIChzdHIgPT0gIiIpCisgICAgICBSZW1vdmVSZWFkRGV0YWlsKGRldGFpbCk7CisgICAgZWxzZQorICAgICAgQWRkUmVhZERldGFpbChkZXRhaWwsIHN0cik7CisgIH0KKyAgZWxzZSBpZiAoZmxhZyAmIEJFRkVITCkgeworICAgIGlmIChzdHIgPT0gIiIpCisgICAgICBSZW1Vc2VyQ21kKGRldGFpbCk7CisgICAgZWxzZSB7CisgICAgICBzdHJpbmcgKnM7CisKKyAgICAgIHMgPSBvbGRfZXhwbG9kZShwcmVwYXJzZShzdHIsICZ3YXJuKSwgIkBAXG4iKTsKKyAgICAgIGlmIChzaXplb2YocykgPiAxICYmIHNbMV0gIT0gIiIpCisgICAgQWRkVXNlckNtZChkZXRhaWwsIDAsIG5vcm1zdHIoc1swXSksIG5vcm1zdHIoc1sxXSkpOworICAgICAgZWxzZQorICAgIEFkZFVzZXJDbWQoZGV0YWlsLCAwLCBub3Jtc3RyKHNbMF0pLCAwKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoZmxhZyAmIFJFUE9SVCkgeworICAgIHJtKFJFUEZJTEUob3duZXIpKTsKKyAgICBpZiAoc3RyICE9ICIiKQorICAgICAgd3JpdGVfZmlsZShSRVBGSUxFKG93bmVyKSwgc3RyKTsKKyAgfQorICBlbHNlCisgICAgd3JpdGUoICJIdWNoISBVbmJla2FubnRlcyBGbGFnICgiK2ZsYWcrIikuLi4gU2FnIG1hbCBXYXJnb24gQmVzY2hlaWQuLi5cbiIpOworCisgIGFycl9vdXQod2FybiwgIk9LLiIsICJXQVJOVU5HISBVbmd1ZWx0aWdlciBQbGF0emhhbHRlcjogJXMiLAorICAgICAgICAgICAgICAgIldBUk5VTkchIFVuZ3VlbHRpZ2UgUGxhdHpoYWx0ZXI6ICIpOworICBTYXZlKCk7Cit9CisKK2ludCBTbWFydExvZyhzdHJpbmcgb2ZpbGUsIHN0cmluZyB0eXAsIHN0cmluZyBtc2csIHN0cmluZyBkYXRlKQoreworICBvYmplY3QgaG9tZTsKKworICAvLyBzcGVpY2hlcmUgTWVsZHVuZyBpbSBSZXAtTG9nIGRlcyBTZWhlcmhhdXMtQmVzaXR6ZXJzCisgIHdyaXRlX2ZpbGUoUkVQRklMRShvd25lciksIHNwcmludGYoIiVzIHZvbiAlcyBpbiBSYXVtICVkICglcyk6XG4lc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIHR5cCwKKyAgICAgICAgICAgICAgICAgICAgIGNhcGl0YWxpemUoZ2V0dWlkKHRoaXNfcGxheWVyKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgIHJhdW1OciwKKyAgICAgICAgICAgICAgICAgICAgIGRhdGUsCisgICAgICAgICAgICAgICAgICAgICBicmVha19zdHJpbmcobXNnLDc4KSkpOworCisgIGlmIChJU19MRUFSTkVSKG93bmVyKSkgeworICAgIGxvZ19maWxlKCJyZXBvcnQvIitvd25lcisiLnJlcCIsCisgICAgICAgICBzcHJpbnRmKCJNRUxEVU5HIHZvbiAlcyBpbSBTZWhlcmhhdXMsIFJhdW0gJWQgKCVzKTpcbiIKKyAgICAgICAgICAgICArIkJpdHRlIHp1ciBLZW5udG5pcyBuZWhtZW4hIChNaXQgZGVtIEJlZmVobCAnbWVsZHVuZ2VuJykgIC1XYXJnb25cbiIsCisgICAgICAgICAgICAgY2FwaXRhbGl6ZShnZXR1aWQodGhpc19wbGF5ZXIoKSkpLAorICAgICAgICAgICAgIHJhdW1OciwKKyAgICAgICAgICAgICBkYXRlKSk7CisgIH0KKworICAvLyBlcmhvZWhlIGltIEhhdXB0cmF1bSBkZW4gUmVwLVphZWhsZXIgdW5kIHNwZWljaGVyZQorICBob21lID0gbG9hZF9vYmplY3QoUkFVTU5BTUUob3duZXIsMCkpOworICBob21lLT5TZXQoSF9SRVBPUlQsIGhvbWUtPlF1ZXJ5KEhfUkVQT1JUKSsxKTsKKyAgaG9tZS0+U2F2ZSgpOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlcG9ydChzdHJpbmcgc3RyKQoreworICBzdHJpbmcgcmVwLCAqbGluZXM7CisgIGludCByTnVtLCBsLCBzOworCisgIGlmICghYWxsb3dlZF9jaGVjayh0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoZmlsZV9zaXplKFJFUEZJTEUob3duZXIpKSA8PSAwKSB7CisgICAgd3JpdGUoICJLZWluZSBNZWxkdW5nZW4genUgZmluZGVuLi4uIER1IGJpc3Qgd3Vuc2NobG9zIGdsdWVja2xpY2guXG4iICk7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmVwID0gcmVhZF9maWxlKFJFUEZJTEUob3duZXIpKTsKKworICBpZiAoIXJlcCkgeworICAgIHdyaXRlKCAiT2hhISBEaWUgRGF0ZWkgbWl0IGRlbiBNZWxkdW5nZW4gaXN0IHp1IGdyb3NzISBTYWcgZG9jaCBiaXR0ZSBtYWxcbiIKKyAgICAgICsiV2FyZ29uIEJlc2NoZWlkIVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAoc3RyKSB7CisgICAgc3RyaW5nIGQsICpuZXcsICp0bXAsIHByZXY7CisgICAgaW50IG5yLCBuZXh0TnIsIG07CisKKyAgICBpZiAoc3RyID09ICJoaWVyIikKKyAgICAgIHJOdW0gPSByYXVtTnI7CisgICAgZWxzZQorICAgICAgck51bSA9IHRvX2ludChzdHIpOworCisgICAgaWYgKHJOdW0gPiBWRVJXQUxURVItPkhhdXNQcm9wKG93bmVyLCBIUF9ST09NUykpIHsKKyAgICAgIHdyaXRlKCAiU28gdmllbGUgUmFldW1lIGhhc3QgRHUgZ2FyIG5pY2h0IVxuIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBsaW5lcyA9IG9sZF9leHBsb2RlKHJlcCwgIlxuIik7CisgICAgcyA9IHNpemVvZihsaW5lcyk7CisgICAgZm9yIChsPTA7IHByZXYgPT0gMDsgbCsrKQorICAgICAgaWYgKHNzY2FuZihsaW5lc1tsXSwgIiVzIHZvbiAlcyBpbiBSYXVtICVkICVzOiIsIGQsIGQsIG5yLCBkKT09NCkKKyAgICBwcmV2PWxpbmVzW2xdOworCisgICAgZm9yICggbmV3ID0gKHt9KSwgdG1wPSh7fSk7IGw8czsgbCsrKSB7CisgICAgICBtPXNzY2FuZihsaW5lc1tsXSwgIiVzIHZvbiAlcyBpbiBSYXVtICVkICVzOiIsIGQsIGQsIG5leHROciwgZCk7CisgICAgICBpZiAobSAhPSA0ICYmIG5yID09IHJOdW0pCisgICAgdG1wICs9ICh7IGxpbmVzW2xdIH0pOworCisgICAgICBpZiAobT09NCkgeworICAgIGlmIChzaXplb2YodG1wKSkgeworICAgICAgbmV3ID0gbmV3ICsgKHsgcHJldiB9KSArIHRtcDsKKyAgICAgIHRtcCA9ICh7fSk7CisgICAgfQorICAgIG5yID0gbmV4dE5yOworICAgIHByZXYgPSBsaW5lc1tsXTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHNpemVvZih0bXApKQorICAgICAgbmV3ID0gbmV3ICsgKHtwcmV2fSkgKyB0bXA7CisgICAgcmVwID0gaW1wbG9kZShuZXcsICJcbiIpOworICB9CisKKyAgdGhpc19wbGF5ZXIoKS0+TW9yZShyZXApOworICByZXR1cm4gMTsKK30KKworLy8gJExvZzogcmF1bS5jLHYgJAorLy8gUmV2aXNpb24gMS41ICAyMDAzLzExLzE1IDE0OjAzOjU4ICBtdWQKKy8vIExpY2h0YWVuZGVydW5nZW4gdm9uIFpvb2sKKy8vCisvLyBSZXZpc2lvbiAxLjQgIDIwMDMvMDIvMTcgMjA6MDA6MDAgIG11ZAorLy8gSW0gUmVzZXQgd2lyZCBudW4gZ2V0ZXN0ZXQsIG9iIGRlciBSYXVtIGVpbmVuIEF1c2dhbmcgaW4gZWluZW4gTnVsbC1SYXVtCisvLyBoYXQuIERpZXMgd3VyZGUgbm90d2VuZ2lnLCBkYW1pdCBTcGllbGVyIG5pY2h0IGluIFNlaGVyaGFldXNlciBlaW5nZXNwZXJydCAKKy8vIHdlcmRlbiBrb2VubmVuLiBEaWUgRnVua3Rpb25lbiBBZGRFeGl0KCksIFJlbW92ZUV4aXQoKSB1bmQgUmVzZXQgc3RhcnRlbiAKKy8vIGdlZ2ViZW5lbmZhbGxzIGRlbiBBdXNnYW5nc3Rlc3QuIEVpbmlnZSBGdW5zIG11c3N0ZW4gbGVpY2h0IGFuZ2VwYXNzdCAKKy8vIHdlcmRlbi4KKy8vIERpZSBGdW5rdGlvbmVuIHJvb21faGFzX2V4aXQoKSB1bmQgaXNfZXhpdCgpIHd1cmRlbiB2b24gVmFyZGlvbkBNRyAKKy8vIGVudHdpY2tlbHQgdW5kIHp1ciBWZXJmdWVndW5nIGdlc3RlbGx0LiAtIFZhbmlvbgorLy8KKy8vIFJldmlzaW9uIDEuMyAgMjAwMS8wMi8wNCAyMToyMTozNCAgbXVkCisvLyAoYnJrLGdldEJlZlBhcmFtKTogVm9ya2VocnVuZ2VuIGdlZ2VuIGZ1ZWhyZW5kZSB1bmQgc2NobGllc3NlbmRlCisvLyBMZWVyemVpY2hlbiBpbiBCZWZlaGxzcGFyYW1ldGVybiB1bmQgYW5kZXJlbiBMaXN0ZW4uCisvLworLy8gUmV2aXNpb24gMS4yICAyMDAxLzAxLzAxIDE4OjE3OjQ3ICBtdWQKKy8vIChhdXNnYW5nKTogV2VubiBlaW4gQXVzZ2FuZyB6dSBlaW5lbSBhbmRlcmVuIFNlaGVyaGF1cyBnZWxlZ3Qgd2lyZCwKKy8vIHdpcmQgZGllIEVybGF1Ym5pcyBpbiBkZXNzZW4gRWluZ2FuZ3NyYXVtIGFiZ2VmcmFndCwgdW5kIG5pY2h0IGluCisvLyBkZW0gYW5nZWZvcmRlcnRlbiBaaWVscmF1bSAoZGVyIEVpbmdhbmdzcmF1bSBleGlzdGllcnQgYXVmIGplZGVuCisvLyBGYWxsLCBkZXIgWmllbHJhdW0gdmllbGxlaWNodCBuaWNodCkuCisvLworLy8gUmV2aXNpb24gMS4xLjEuMSAgMjAwMC8wOC8yMCAyMDoyMjo0MiAgbXVkCisvLyBJbnMgQ1ZTIGVpbmdlY2hlY2t0CisvLworLy8gMDQuMDIuOTggTWVsZHVuZ2VuIGtvZW5uZW4gZ2Vsb2VzY2h0IHdlcmRlbi4KKy8vCisvLyBSZXZpc2lvbiAyLjE2ICAxOTk3LzExLzE1IDE5OjMzOjIzICBXYXJnb24KKy8vIGFycl9vdXQoKSwgcHJlcGFyc2UoKToga2xlaW5lIEJ1Z2ZpeGVzCisvLworLy8gUmV2aXNpb24gMi4xNSAgMTk5Ny8xMC8wNiAxNToyNDozOCAgV2FyZ29uCisvLyBVbnNpY2h0YmFyZSBNYWdpZXIgbWVsZGVuL2FuemVpZ2VuCisvLyBNZWxkdW5nIGJlaW0gQmV0cmV0ZW4gYWJnZXNjaGxvc3NlbmVyIEhhZXVzZXIgZnVlciBNYWdpZXIKKy8vCisvLyBSZXZpc2lvbiAyLjE0ICAxOTk2LzAyLzIxICAxODoxMjo0NyAgV2FyZ29uCisvLyBTbWFydExvZygpIHJlaW4sIGRhZnVlciBkaWUgZWlnZW5lbiBSdWVja21lbGR1bmdzYmVmZWhsZSByYXVzCisvLworLy8gUmV2aXNpb24gMi4xMyAgMTk5NS8xMC8zMSAgMTI6NTY6MTYgIFdhcmdvbgorLy8gUnVlY2ttZWxkdW5nZW4gZnVlciBPYmpla3RlIHdlcmRlbiBhbnMgU3BpZWxlcm9iamVrdCB3ZWl0ZXJnZWdlYmVuLgorLy8KKy8vIFJldmlzaW9uIDIuMTIgIDE5OTUvMDgvMDcgIDE4OjM1OjEyICBXYXJnb24KKy8vIEVpbmlnZSBCdWdzIGJlaSAiYWVuZGVyZSIgYmVob2Jlbi4KKy8vCisvLyBSZXZpc2lvbiAyLjExICAxOTk1LzA2LzI5ICAwODo1NzowNSAgV2FyZ29uCisvLyBIYXVzYmVzaXR6ZXIsIGRpZSBzY2hvbiBNYWdpZXIgc2luZCwgYmVrb21tZW4gYmVpIFJ1ZWNrbWVsZHVuZ2VuIGF1Y2ggZWluZW4KKy8vIEVpbnRyYWcgaW4gaWhyIC9sb2cvcmVwb3J0L3h5ei5yZXAtRmlsZQorLy8gImxpY2h0IGFuL2F1cyIgaXN0IHNlaXQgMi45IGRyaW4gOykKKy8vCisvLyBSZXZpc2lvbiAyLjEwICAxOTk1LzA2LzI4ICAwODo1OTo1NyAgV2FyZ29uCisvLyBOZXVlIEJlZmVobGUgYWVuZGVyZSwgbWVsZHVuZ2VuIGZ1ZXIgZGVuIEhhdXNiZXNpdHplci4KKy8vIHR5cG8sIGJ1Zy9mZWhsZXIsIGlkZWUgd2VyZGVuIGRlbSBIYXVzLS5yZXAtRmlsZSB6dWdlZnVlaHJ0LgorLy8gSmV0enQga29lbm5lbiBkaWUgU2VoZXIgaWhyZSBUeXBvcyBzZWxiZXIgZml4ZW4hIDteKQorLy8KKy8vIFJldmlzaW9uIDIuOSAgMTk5NS8wNi8yMCAgMDc6NDk6MTUgIFdhcmdvbgorLy8gKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgorLy8KKy8vIFJldmlzaW9uIDIuOCAgMTk5NS8wNC8yMSAgMTA6NDg6MzkgIFdhcmdvbgorLy8gQnVnZml4IGluIGJlc2NocmVpYmVuKCksIHdlbm4gZGllIEhhdXNhdXNzZW5iZXNjaHJlaWJ1bmcKKy8vIHZlcmxhbmd0IHdpcmQgKHdhciBzY2hvbiBzZWl0IEV3aWdrZWl0ZW4gYnVnZ3kuLi4gOykKKy8vCisvLyBSZXZpc2lvbiAyLjcgIDE5OTUvMDQvMjEgIDA4OjU1OjMyICBXYXJnb24KKy8vIExvYWQoKS9TYXZlKCkgdW5kIGVpZ2VuZSBLb21tYW5kb3MgYXVzZ2VsYWdlcnQuCisvLyBLb21tYW5kb3Mga29lbm5lbiBtaXQgbm90aWZ5X2ZhaWwoKSB2ZXJzZWhlbiB3ZXJkZW4uCisvLworLy8gUmV2aXNpb24gMi42ICAxOTk1LzAzLzA3ICAxMzo1NTozNiAgV2FyZ29uCisvLyBBZGQvUmVtVXNlckNtZCgpLCBCZXNjaHJlaWJ1bmdlbiB3ZXJkZW4gYmVpIHJlc2V0KCkvY2xlYW5fdXAoKQorLy8gZ2VwYWNrdCBnZXNwZWljaGVydC4KKy8vIEJlaSBLb21tYW5kb3MgbnVyIG5vY2ggbW9yZSgpLCB3ZW5uIGVzIGF1Y2ggbm9ldGlnIGlzdC4KKy8vCisvLyBSZXZpc2lvbiAyLjUgIDE5OTUvMDIvMjcgIDIwOjQ4OjI2ICBXYXJnb24KKy8vIEtsZWluZSBTY2hvZW5oZWl0c2ZlaGxlciBpbiBzZWxic3RkZWZpbmllcnRlbiBCZWZlaGxlbiBiZXNlaXRpZ3QuCisvLworLy8gUmV2aXNpb24gMi40ICAxOTk1LzAyLzIyICAyMTozMDo1MiAgV2FyZ29uCisvLyBOb2NoIG1laHIgQWVuZGVydW5nZW4gYW4gZGVuIEJlZmVobGVuOgorLy8gLSBQcmVwYXJzaW5nIGRlciBQbGF0emhhbHRlcgorLy8gLSBQbGF0emhhbHRlciBmdWVyIFBvc3Nlc3NpdnByb25vbWVuCisvLyAtIE1lbGR1bmcgZnVlciBBdXNmdWVocmVuZGVuIHdpcmQgZ2VNb3JlKCl0CisvLyAtIFJhc3Nlbi0gdW5kIEdlc2NobGVjaHRlc3BlemlmaXNjaGUgTWVsZHVuZ2VuIG1vZWdsaWNoCisvLyAtIEF1Y2ggZnVlciBBdXNnYWVuZ2Uga29lbm5lbiBCZWZlaGxlIGRlZmluaWVydCB3ZXJkZW4KKy8vICAgKG51ciBmdWVyIGV4aXN0aWVyZW5kZTsgd2lyZCBkZXIgQXVzZ2FuZyBnZXNwZXJydCwgd2lyZCBhdWNoCisvLyAgIGRlciBCZWZlaGwgZ2Vsb2VzY2h0KQorLy8gSW0gWnVnZSBkZXMgUHJlcGFyc2luZ3MgaGF0IHNpY2ggZGllIEJlZmVobGF1c3dlcnR1bmcgZXR3YXMKKy8vIHZlcmVpbmZhY2h0LgorLy8KKy8vIFJldmlzaW9uIDIuMyAgMTk5NS8wMi8yMCAgMjI6MTU6NDQgIFdhcmdvbgorLy8gUkVBRF9ERVRBSUxTIHdlcmRlbiBqZXR6dCBtaXQgTW9yZSgpIGF1c2dlZ2ViZW4uCisvLyBTZWxic3RkZWZpbmllcnRlIEJlZmVobGU6IG1pdCBAUFdFUiwgLi4uIGtvZW5uZW4gZGllIFBlcnNvbmFscHJvbm9taW5hCisvLyBlaW5nZWJhdXQgd2VyZGVuOyBFaW5iYXUgamV0enQgYXVjaCBpbiBkaWUgTWVsZHVuZyBmdWVyIGRlbiBBdXNsb2VzZXIKKy8vIG1vZWdsaWNoOyBfdW5wYXJzZWRfYXJncygpIGluIGRlciBBdXN3ZXJ0dW5nLgorLy8KKy8vIFJldmlzaW9uIDIuMiAgMTk5NS8wMi8xNSAgMTE6MjM6MDQgIFdhcmdvbgorLy8gTkVVOiBTZWxic3RkZWZpbmllcmJhcmUgQmVmZWhsZS4KKy8vCisvLyBSZXZpc2lvbiAyLjEgIDE5OTUvMDIvMDQgIDE1OjAyOjM2ICBXYXJnb24KKy8vIERpZSBUcnVoZSB3aXJkIG51biB1ZWJlciBkaWUgUHJvcGVydHkgQ0hFU1QgdmVyd2FsdGV0LiBEZXIgQWRkSXRlbSgpLQorLy8gQXVmcnVmIHd1cmRlIGRlc2hhbGIgdm9uIGNyZWF0ZSgpIG5hY2ggTG9hZCgpIHZlcmxlZ3QuIEdlbGFkZW4gd2lyZAorLy8gc2llIG51ciwgd2VubiBkYXMgTG9hZCgpIHZvbiBIYXVzdmVyd2FsdGVyIGVyZm9sZ3RlLgorLy8gY2xlYW5fdXAoKSwgd2VubiBSYXVtIGxlZXIgaXN0IG9kZXIgbnVyIGVpbmUgbGVlcmUgVHJ1aGUgZHJpbiBzdGVodC4KKy8vCisvLyBSZXZpc2lvbiAyLjAgIDE5OTUvMDIvMDEgIDIwOjM2OjQ5ICBXYXJnb24KKy8vIEVudHJ1ZW1wZWx0IHVuZCBNYXNzbmFobWVuIGZ1ZXIgX3VucGFyc2VfYXJncygpIGdldHJvZmZlbi4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3JhdW0wLmMgYi9kL3NlaGVyL2hhZXVzZXIvcmF1bTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjgyODE4Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3JhdW0wLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8vCisvLyAgcmF1bTAuYyAgLS0gRGVyIEVpbmdhbmdzcmF1bSBkZXMgSGF1c2VzCisvLworLy8gIEdydW5kb2JqZWt0IChjKSAxOTk0IEJvaW5nQE1vcmdlbkdyYXVlbgorLy8gIEFic2NobGllc3NlbiB1bmQgUmF1c3dlcmZlbiB2b24gSm9mCisvLyAgRnVlciBBZW5kZXJ1bmdlbiBhYiBkZW0gMDYuMTAuOTQgdmVyYW50d29ydGxpY2g6IFdhcmdvbgorLy8gIEZ1ZXIgQWVuZGVydW5nZW4gYWIgZGVtIDAxLjAxLjA0IHZlcmFudHdvcnRsaWNoOiBWYW5pb24KKy8vCisvLyAkRGF0ZTogMTk5Ni8wMi8yMSAxODoxMzo0MSAkCisvLyAkUmV2aXNpb246IDIuNSAkCisvKiAkTG9nOiByYXVtMC5jLHYgJAorICogUmV2aXNpb24gMi41ICAxOTk2LzAyLzIxICAxODoxMzo0MSAgV2FyZ29uCisgKiAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqCisgKgorICogUmV2aXNpb24gMi40ICAxOTk1LzA2LzI5ICAwODo1NDo1NyAgV2FyZ29uCisgKiBOZXVlciBCZWZlaGw6ICJzcGlvbiIgemVpZ3QsIHdlciB2b3IgZGVyIFR1ZXIgc3RlaHQuCisgKgorICogUmV2aXNpb24gMi4zICAxOTk1LzA2LzI4ICAwODo1OToyNSAgV2FyZ29uCisgKiBpbml0KCkgbWVsZGV0IGRlbSBIYXVzYmVzaXR6ZXIgU3BpZWxlcnJ1ZWNrbWVsZHVuZ2VuLgorICoKKyAqIFJldmlzaW9uIDIuMiAgMTk5NS8wMi8yMiAgMjE6MzA6MTIgIFdhcmdvbgorICogInVlYmVyc2ljaHQiIGpldHp0IGF1Y2ggZnVlciBXYXJnb24gdWViZXJhbGwgbW9lZ2xpY2guIDspCisgKgorICogUmV2aXNpb24gMi4xICAxOTk1LzAyLzA0ICAxNDozMTo0NyAgV2FyZ29uCisgKiBBZGRJdGVtKHRydWhlKSByYXVzZ2Vub21tZW4uIFdpcmQgbnVuIGluIExvYWQoKSBlcmxlZGlndCAoc2llaGUgcmF1bS5jKS4KKyAqCisgKiBSZXZpc2lvbiAyLjAgIDE5OTUvMDIvMDEgIDIwOjM4OjI0ICBXYXJnb24KKyAqIFZvbiByYXVtLmMgYWJnZWtvcHBlbHQuCisgKgorICovCisvKgorTGV0enRlIEFlbmRlcnVuZzogVmFuaW9uLCAyOS4gRmViIDIwMDQKKyAgICAgICAgICAgICAgICAgLSAidWViZXJzaWNodCBlcmxhdWJ0IiB6ZWlndCBudW4gbnVyIGFuLCB3ZXIgZXJsYXVidCBpc3QuCisqLworCisjaW5jbHVkZSAiaGF1cy5oIgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKworaW5oZXJpdCBSQVVNOworCit2b2lkIGNyZWF0ZSgpCit7CisgIGlmICghY2xvbmVwKHRoaXNfb2JqZWN0KCkpICYmIG9iamVjdF9uYW1lKHRoaXNfb2JqZWN0KCkpPT0oUEFUSCsicmF1bTAiKSkgeworICAgIHNldF9uZXh0X3Jlc2V0KC0xKTsKKyAgICByZXR1cm47CisgIH0KKyAgOjpjcmVhdGUoKTsKKworICBTZXQoSF9SRVBPUlQsIDApOworICBTZXQoSF9SRVBPUlQsIFNBVkUsIEZfTU9ERSk7CisKKyAgQWRkQ21kKCAiZXJsYXViZSIsICJlcmxhdWJlbiIgKTsKKyAgQWRkQ21kKCAidmVyYmlldGUiLCAidmVyYmlldGVuIiApOworICBBZGRDbWQoICJvZWZmbmUiLCAib2VmZm5lIiApOworICBBZGRDbWQoICh7ICJzY2hsaWVzcyIsICJzY2hsaWVzc2UiIH0pLCAic2NobGllc3NlIiApOworICBBZGRDbWQoICJzcGlvbiIsICJzcGlvbiIgKTsKK30KKwordm9pZCBub3RpZnlSZXAoaW50IHIpCit7CisgIHByaW50ZigiU2VpdCBEZWluZW0gbGV0enRlbiBCZXN1Y2ggZ2FiIGVzICVzIFJ1ZWNrbWVsZHVuZyVzIHZvbiBhbmRlcmVuIFNwaWVsZXJuXG5pbiBEZWluZW0gSGF1cy5cbiIsIChyPT0xKSA/ICJlaW5lIiA6IHRvX3N0cmluZyhyKSwgKHI9PTEpID8gIiIgOiAiZW4iKTsKK30KKwordm9pZCBpbml0KCkKK3sKKyAgaW50IHI7CisKKyAgOjppbml0KCk7CisKKyAgaWYgKHRwX293bmVyX2NoZWNrKCkgJiYgcj1RdWVyeShIX1JFUE9SVCkpIHsKKyAgICBjYWxsX291dCgibm90aWZ5UmVwIiwgMCwgcik7CisgICAgU2V0KEhfUkVQT1JULCAwKTsKKyAgICBTYXZlKCk7CisgIH0KK30KKworaW50IG9lZmZuZShzdHJpbmcgc3RyKQoreworICByZXR1cm4gKEhBVVNOQU1FKFF1ZXJ5T3duZXIoKSkpLT5vZWZmbmUoc3RyKTsKK30KKworaW50IHNjaGxpZXNzZShzdHJpbmcgc3RyKQoreworICByZXR1cm4gKEhBVVNOQU1FKFF1ZXJ5T3duZXIoKSkpLT5zY2hsaWVzc2Uoc3RyKTsKK30KKwordmFyYXJncyBpbnQKK3VlYmVyc2ljaHQoc3RyaW5nIHN0ciwgc3RyaW5nIHByZSkKK3sKKyAgaWYgKCAhKHRwX293bmVyX2NoZWNrKCkgfHwgSVNfTUFJTlRBSU5FUih0aGlzX3BsYXllcigpKSkgKQorICAgIHJldHVybiAwOworCisgIHByZSA9ICJcbiIrYXJyX291dChWRVJXQUxURVItPkhhdXNQcm9wKFF1ZXJ5T3duZXIoKSwgSFBfQUxMT1dFRCksCisJICAgICJOdXIgRHUga2FubnN0IERlaW4gSGF1cyBhdWYtIHVuZCBhYnNjaGxpZXNzZW4uXG4iLAorCSAgICAiRHUgdW5kICVzIGtvZW5uZW4gRGVpbiBIYXVzIGF1Zi0gdW5kIGFic2NobGllc3Nlbi5cbiIsCisJICAgICJOZWJlbiBEaXIga29lbm5lbiBub2NoIGZvbGdlbmRlIFBlcnNvbmVuIERlaW4gSGF1cyBhdWYtIHVuZCBhYnNjaGxpZXNzZW46XG4iLCAxICk7CisKKyAgaWYgKHN0cj09ImVybGF1YnQiKQorICB7CisgICAgIHRoaXNfcGxheWVyKCktPk1vcmUocHJlKTsKKyAgICAgcmV0dXJuIDE7CisgIH0KKyAgCisgIHJldHVybiA6OnVlYmVyc2ljaHQoc3RyLCBwcmUpOworfQorCitpbnQKK2VybGF1YmVuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyAqZXJsYXVidDsKKworICBpZiAoIXRwX293bmVyX2NoZWNrKCkpIHsKKyAgICBub3RpZnlfZmFpbCggIkR1IGthbm5zdCBoaWVyIGdhciBuaWNodHMgZXJsYXViZW4hXG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoIShzdHI9VVBfQVJHUyh0aGlzX3BsYXllcigpKSkgfHwgc3RyID09ICIiKSB7CisgICAgbm90aWZ5X2ZhaWwoICJXZW0gd2lsbHN0IGRlbm4gZGFzIEF1Zi0gdW5kIEFic2NobGllc3NlbiBEZWluZXMgSGF1c2VzIGVybGF1YmVuP1xuIiApOworICAgIHJldHVybiAwOworICB9CisKKyAgZXJsYXVidCA9IFZFUldBTFRFUi0+RXJsYXViZShRdWVyeU93bmVyKCksCisJCQkgICAgICAgbWFwKChyZWdleHBsb2RlKHN0ciwgIlssIF0iKS0oeyIsIiwiICIsIiJ9KSksICMnY2FwaXRhbGl6ZSkpOworICBhcnJfb3V0KGVybGF1YnQsICJOdXIgRHUga2FubnN0IERlaW4gSGF1cyBhdWYtIHVuZCBhYnNjaGxpZXNzZW4uXG4iLAorCQkgICAiRHUgdW5kICVzIGtvZW5uZW4gRGVpbiBIYXVzIGF1Zi0gdW5kIGFic2NobGllc3Nlbi5cbiIsCisJCSAgICJOZWJlbiBEaXIga29lbm5lbiBub2NoIGZvbGdlbmRlIFBlcnNvbmVuIERlaW4gSGF1cyBhdWYtIHVuZCBhYnNjaGxpZXNzZW46XG4iICk7CisgIHJldHVybiAxOworfQorCitpbnQKK3ZlcmJpZXRlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKmVybGF1YnQ7CisKKyAgaWYgKCF0cF9vd25lcl9jaGVjaygpKSB7CisgICAgbm90aWZ5X2ZhaWwoICJEdSBrYW5uc3QgaGllciBnYXIgbmljaHRzIHZlcmJpZXRlbiFcbiIgKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmICghKHN0cj1VUF9BUkdTKHRoaXNfcGxheWVyKCkpKSB8fCBzdHIgPT0gIiIpIHsKKyAgICBub3RpZnlfZmFpbCggIldlbSB3aWxsc3QgZGVubiBkYXMgQXVmLSB1bmQgQWJzY2hsaWVzc2VuIERlaW5lcyBIYXVzZXMgdmVyYmlldGVuP1xuIiApOworICAgIHJldHVybiAwOworICB9CisgIGVybGF1YnQgPSBWRVJXQUxURVItPlZlcmJpZXRlKFF1ZXJ5T3duZXIoKSwKKwkJCQltYXAoKHJlZ2V4cGxvZGUoc3RyLCAiWywgXSIpLSh7IiwiLCIgIiwiIn0pKSwgIydjYXBpdGFsaXplKSk7CisgIGFycl9vdXQoZXJsYXVidCwgIk51ciBEdSBrYW5uc3QgRGVpbiBIYXVzIGF1Zi0gdW5kIGFic2NobGllc3Nlbi5cbiIsCisJCSAgICJEdSB1bmQgJXMga29lbm5lbiBEZWluIEhhdXMgYXVmLSB1bmQgYWJzY2hsaWVzc2VuLlxuIiwKKwkJICAgIk5lYmVuIERpciBrb2VubmVuIG5vY2ggZm9sZ2VuZGUgUGVyc29uZW4gRGVpbiBIYXVzIGF1Zi0gdW5kIGFic2NobGllc3NlbjpcbiIgKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorc3Bpb24oc3RyaW5nIHN0cikKK3sKKyAgb2JqZWN0IGVudiwgKmludjsKKyAgc3RyaW5nIG93OworCisgIG93ID0gUXVlcnlPd25lcigpOworICBzdHIgPSBWRVJXQUxURVItPkhhdXNQcm9wKG93LCBIUF9FTlYpOworICBjYWxsX290aGVyKHN0ciwgIj8/PyIpOworICBlbnYgPSBmaW5kX29iamVjdChzdHIpOworICBpbnYgPSBhbGxfaW52ZW50b3J5KGVudik7CisgIGlmIChlbnYgPSBwcmVzZW50KCJcbiIrb3crImhhdXMiLCBlbnYpKQorICAgIGludiAtPSAoeyBlbnYgfSk7CisgIGlmIChzaXplb2YoaW52KSkKKyAgICBwcmludGYoICJWb3IgZGVtIEhhdXMgc2llaHN0IER1OlxuJXMiLCBtYWtlX2ludmxpc3QodGhpc19wbGF5ZXIoKSwgaW52KSk7CisgIGVsc2UKKyAgICBwcmludGYoICJWb3IgZGVtIEhhdXMgaXN0IG5pY2h0cyB1bmQgbmllbWFuZCB6dSBzZWhlbi5cbiIgKTsKKworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zYl9hbnRyYWcuYyBiL2Qvc2VoZXIvaGFldXNlci9zYl9hbnRyYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTZkZDIwCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NiX2FudHJhZy5jCkBAIC0wLDAgKzEsMTc1IEBACisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgPG1vdmluZy5oPgorI2luY2x1ZGUgImhhdXMuaCIKKworaW5oZXJpdCAic3RkL3Jvb20iOworCitjcmVhdGUoKQoreworICA6OmNyZWF0ZSgpOworCisgIFNldFByb3AoIFBfSU5ET09SUywgMSApOworICBTZXRQcm9wKCBQX0xJR0hULCAxICk7CisgIFNldFByb3AoIFBfSU5UX1NIT1JULCAiQW0gQW50cmFnc3NjaGFsdGVyIiApOworICBTZXRQcm9wKCBQX0lOVF9MT05HLAorICAgICAiRHUgc3RlaHN0IGFtIEFudHJhZ3NzY2hhbHRlciBkZXIgQmFuay4gSGludGVyIGVpbmVyIFJhdWNoZ2xhc3NjaGVpYmUgc2NoZWludFxuIgorICAgICsic2ljaCBlaW4gU2NoYWx0ZXJiZWFtdGVyIHp1IGJlZmluZGVuLCBEdSBrYW5uc3QgYWJlciBuaWNodHMgZ2VuYXVlcmVzIGVyLVxuIgorICAgICsia2VubmVuLlxuIgorICAgICsiV2VubiBEdSBEaWNoIHRyYXVzdCwga2FubnN0IER1IGhpZXIgZWluZW4gQmF1c3BhcnZlcnRyYWcgYmVhbnRyYWdlbiB1bmQgZWluZW5cbiIKKyAgICArImJlYW50cmFndGVuIFZlcnRyYWcgdW50ZXJzY2hyZWliZW4uXG4iCisgICAgKyJEaWUgU3ludGF4IGRhenUgbGF1dGV0OlxuIgorICAgICsiYmVhbnRyYWdlIHZlcnRyYWcgKGZ1ZXIgZWluZW4gQmF1c3BhcnZlcnRyYWcpXG4iCisgICAgKyJiZWFudHJhZ2UgYXVzYmF1dmVydHJhZyAoZnVlciBkZW4gQXVzYmF1IGRlcyBIYXVzZXMpXG4iCisgICAgKyJ1bnRlcnNjaHJlaWJlIHZlcnRyYWcgKHVtIGRlbiBqZXdlaWxpZ2VuIFZlcnRyYWcgenUgdW50ZXJzY2hyZWliZW4pXG4iICk7CisKKyAgQWRkRGV0YWlsKCAoeyAiYm9kZW4iIH0pLAorICAgICAiRGVyIHRpZWZzY2h3YXJ6ZSBCb2RlbiBnaWJ0IERpciBkYXMgR2VmdWVobCwgaW0gYWJzb2x1dGVuIE5pY2h0cyB6dSBzdGVoZW4uXG4iICk7CisgIEFkZERldGFpbCggKHsgIndhbmQiLCAid2FlbmRlIiB9KSwKKyAgICAgIkR1bmtsZSBTY2hhdHRlbiB0YW56ZW4gdWViZXIgZGllIFdhZW5kZS5cbiIgKTsKKyAgQWRkRGV0YWlsKCAoeyAiZGVja2UiIH0pLAorICAgICAiU2llIHNjaGVpbnQgRGlyIGluIGRpZXNlciB1bmhlaW1saWNoZW4gVW1nZWJ1bmcgYXVmIGRlbiBLb3BmIGZhbGxlbiB6dVxuIgorICAgICsid29sbGVuLlxuIiApOworICBBZGREZXRhaWwoICh7ICJuaWNodHMiIH0pLAorICAgICAiRHUgc2llaHN0IG5pY2h0cy5cbiIgKTsKKyAgQWRkRGV0YWlsKCAoeyAic2NoYXR0ZW4iIH0pLAorICAgICAiRGllIFNjaGF0dGVuIGlycml0aWVyZW4gRGljaCBzZWhyLlxuIiApOworICBBZGREZXRhaWwoICh7ICJzY2hhbHRlciIgfSksCisgICAgICJBbiBkaWVzZW0gU2NoYWx0ZXIga2FubnN0IER1IGVpbmVuIEJhdXNwYXJ2ZXJ0cmFnIGJlYW50cmFnZW4gdW5kIHVudGVyLVxuIgorICAgICsic2NocmVpYmVuLlxuIiApOworICBBZGREZXRhaWwoICh7ICJiZWFtdGUiLCAiYmVhbXRlciIsICJiZWFtdGVuIiwgInNjaGFsdGVyYmVhbXRlIiwgInNjaGFsdGVyYmVhbXRlbiIsICJzY2hhbHRlcmJlYW10ZXIiIH0pLAorICAgICAiRHUga2FubnN0IGlobiBudXIgc2NoZW1lbmhhZnQgaGludGVyIGRlciBSYXVjaGdsYXNzY2hlaWJlIGRlcyBTY2hhbHRlcnMgZXItXG4iCisgICAgKyJrZW5uZW4uIERpZSBVbXJpc3NlIHNjaGVpbmVuIGFsbGVyZGluZ3MgenUga2VpbmVyIExlYmVuc2Zvcm0genUgZ2Vob2VyZW4sXG4iCisgICAgKyJkZXJlciBEdSBEaWNoIGVyaW5uZXJuIGtvZW5udGVzdC5cbiIgKTsKKyAgQWRkRGV0YWlsKCAoeyAic2NoZWliZSIsICJnbGFzc2NoZWliZSIsICJyYXVjaGdsYXMiLCAicmF1Y2hnbGFzc2NoZWliZSIgfSksCisgICAgICJFaW4gc2NoZW1lbmhhZnRlciBCZWFtdGVyIHNpdHp0IGRhaGludGVyLlxuIiApOworICBBZGREZXRhaWwoICh7ICJ1bXJpc3NlIiB9KSwKKyAgICAgIlNpZSBzaW5kIGFldXNzZXJzdCBiZXVucnVoaWdlbmQuXG4iICk7CisKKyAgQWRkQ21kKCAoeyAiYmVhbnRyYWdlIiB9KSwgImJlYW50cmFnZW4iICk7CisgIEFkZENtZCggKHsgInVudGVyc2NocmVpYiIsICJ1bnRlcnNjaHJlaWJlIiB9KSwgInVudGVyc2NocmVpYmVuIiApOworICBBZGRFeGl0KCAicmF1cyIsIFBBVEgrInNlaGVyYmFuayIgKTsKK30KKwordm9pZAorQmVjb21lc05ldERlYWQob2JqZWN0IHBsKQoreworICBwbC0+bW92ZShQQVRIKyJzZWhlcmJhbmsiLCBNX0dPLCAwLCAid2lyZCByYXVzZ2V3b3JmZW4iLCAic2NobGFmd2FuZGVsdCBoZXJlaW4iKTsKK30KKworaW50CitiZWFudHJhZ2VuKHN0cmluZyBzdHIpCit7CisgIG9iamVjdCB0cCwgdmVydHJhZzsKKyAgaW50IGhhdXM7CisKKyAgdHAgPSB0aGlzX3BsYXllcigpOworCisgIGlmICghc3RyIHx8IChoYXVzID0gbWVtYmVyKCAoeyJhdXNiYXV2ZXJ0cmFnIiwgInZlcnRyYWciLCAiYmF1c3BhcnZlcnRyYWcifSksIHN0cikpIDwwKSB7CisgICAgbm90aWZ5X2ZhaWwoICJWZXJzdWNoIG1hbCAnYmVhbnRyYWdlIHZlcnRyYWcnIVxuIiApOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKCFJU19TRUVSKHRwKSkgeworICAgIG5vdGlmeV9mYWlsKCAiTnVyIFNlaGVyIGtvZW5uZW4gZWluZW4gQmF1c3BhcnZlcnRyYWcgYmVhbnRyYWdlbiFcbiIgKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAodHAtPlF1ZXJ5UHJvcChQX0tJTExTKSkgeworICAgIHdyaXRlKCJWZXJicmVjaGVyIHdlcmRlbiBoaWVyIG5pY2h0IGJlZGllbnQhXG4iKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiAodmVydHJhZyA9IHByZXNlbnQoInNlaGVccnZlcnRyYWciLCB0cCkpCisgICAgd3JpdGUoICJEZXIgQmVhbXRlIHNjaG5hcnJ0OiBBYmVyIFNpZSBoYWJlbiBkb2NoIHNjaG9uIGVpbmVuIFZlcnRyYWchXG4iICk7CisgIGVsc2UgaWYgKGhhdXMgJiYgKHByZXNlbnQoInNlaGVccmhhdXMiLCB0cCkgfHwgVkVSV0FMVEVSLT5GaW5kZUhhdXMoZ2V0dWlkKHRwKSkpKSB7CisgICAgd3JpdGUoICJEZXIgQmVhbXRlIHNjaG5hcnJ0OiBTaWUgZHVlcmZlbiBudXIgRUlOIEhhdXMgYmVzaXR6ZW4hXG4iICk7CisgICAgSExPRyggIkJBTksuTE9HIiwgIkFudHJhZzogIitnZXR1aWQodHApKyIgc3RlbGx0ZSB6d2VpdGVuIEFudHJhZy5cbiIgKTsKKyAgfQorICBlbHNlIGlmICghaGF1cyAmJiAhVkVSV0FMVEVSLT5GaW5kZUhhdXMoZ2V0dWlkKHRwKSkpIHsKKyAgICB3cml0ZSggIkRlciBCZWFtdGUgZmF1Y2h0OiBIYWJlbiBzaWUgZGVubiB1ZWJlcmhhdXB0IHNjaG9uIGVpbiBIYXVzIGF1Zmdlc3RlbGx0P1xuIgorCSAgKyJWb3JoZXIga29lbm5lbiBzaWUgbmF0dWVybGljaCBrZWluZSBFcndlaXRlcnVuZ2VuIGJlYW50cmFnZW4hXG4iICk7CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFoYXVzICYmIFZFUldBTFRFUi0+SGF1c1Byb3AoZ2V0dWlkKHRwKSxIUF9ST09NUykgPT0gOSkgeworICAgICAgd3JpdGUoICJEZXIgQmVhbXRlIGRyb2VobnQ6IElociBIYXVzIGhhdCBzY2hvbiBkaWUgaG9lY2hzdGUgQXVzYmF1c3R1ZmUgZXJyZWljaHQhXG4iKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAodmVydHJhZyA9IGNsb25lX29iamVjdChQQVRIKyJiYXVzcGFydmVydHJhZyIpKS0+bW92ZSh0cCwgTV9OT0NIRUNLKTsKKworICAgIHdyaXRlKCAiRGllIFNjaGF0dGVuIHZlcmRpY2h0ZW4gc2ljaCB6dSBlaW5lbSBCbGF0dCBQYXBpZXIsIHdlbGNoZXMgaW4gRGVpbmUgSGFlbmRlXG4iCisJICArImdld2VodCB3aXJkLiBNaXQgZHJvZWhuZW5kZXIgU3RpbW1lIGVya2xhZXJ0IGRlciBTY2hhbHRlcmJlYW10ZTpcbiIKKwkgICsiRGllcyBpc3QgSWhyIEJhdXNwYXJ2ZXJ0cmFnLiBCaXR0ZSBsZXNlbiBTaWUgaWhuIHNpY2ggZ3J1ZW5kbGljaCBkdXJjaCwgYmUtXG4iCisJICArInZvciBTaWUgaWhuIHVudGVyc2NocmVpYmVuISBXZW5uIFNpZSBpaG4gZXJzdCBlaW5tYWwgdW50ZXJzY2hyaWViZW4gaGFiZW4sXG4iCisJICArImtvZW5uZW4gc2llIG5pY2h0IHdpZWRlciBkYXZvbiB6dXJ1ZWNrdHJldGVuIChlcyBzZWkgZGVubiwgU2llIHplcnJlaXNzZW5cbiIKKwkgICsiaWhuIG9kZXIgdWViZXJ6aWVoZW4gZGllIFJhdGVuemFobHVuZ2VuKSEgU2llIHNpbmQgbmljaHQgZ2V6d3VuZ2VuLCBkZW4gVmVyLVxuIgorCSAgKyJ0cmFnIHNvZm9ydCB6dSB1bnRlcnNjaHJlaWJlbi4gSW0gSGF1cHRyYXVtIGRlciBCYW5rIGJlZmluZGV0IHNpY2ggZWluIEluLVxuIgorCSAgKyJmb3JtYXRpb25zc3RhbmQsIGFuIGRlbSBTaWUgS29tbWVudGFyZSB6dSBkaWVzZW0gVmVydHJhZyBrYWV1ZmxpY2ggZXJ3ZXJiZW5cbiIKKwkgICsia29lbm5lbi4gV2VubiBJaG5lbiBlaW5pZ2UgUGFzc2FnZW4gZGVzIFZlcnRyYWdzIHVudmVyc3RhZW5kbGljaCBzaW5kLCB3aXJkXG4iCisJICArIklobmVuIGluIGRlbiBLb21tZW50YXJlbiBzaWNoZXJsaWNoIGdlaG9sZmVuLlxuIgorCSAgKyJEYXMgTGVpc3RlbiBkZXIgVW50ZXJzY2hyaWZ0IGlzdCBqZWRvY2ggbnVyIGhpZXIgYW4gZGllc2VtIFNjaGFsdGVyXG4iCisJICArIm1vZWdsaWNoIVxuIiApOworICAgIGlmICghaGF1cykKKyAgICAgIHZlcnRyYWctPlNpZ24oVl9SQVVNKTsKKyAgICBITE9HKCAiQkFOSy5MT0ciLCAiQW50cmFnOiAiK2dldHVpZCh0cCkrIiBiZWthbSBlaW5lbiAiKyhoYXVzID8gIkhhdXMiIDogIlJhdW0iKSsidmVydHJhZy5cbiIgKTsKKyAgfQorICByZXR1cm4gMTsKK30KKworaW50Cit1bnRlcnNjaHJlaWJlbihzdHJpbmcgc3RyKQoreworICBvYmplY3QgdHAsIHZlcnRyYWc7CisgIGludCBmbGFnOworCisgIHRwID0gdGhpc19wbGF5ZXIoKTsKKworICBub3RpZnlfZmFpbCggIldhcyB3aWxsc3QgRHUgZGVubiB1bnRlcnNjaHJlaWJlbj9cbiIgKTsKKyAgaWYgKCFzdHIgfHwgISh2ZXJ0cmFnID0gcHJlc2VudChzdHIsIHRwKSkgfHwgIXZlcnRyYWctPmlkKCJzZWhlXHJ2ZXJ0cmFnIikpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChmbGFnID0gdmVydHJhZy0+UXVlcnlQcm9wKFBfQVVUT0xPQURPQkopWzFdKSAmIFZfU0lHTkVEKSB7CisgICAgd3JpdGUoICJEZXIgU2NoYWx0ZXJiZWFtdGUgc2FndDogQWJlciBkZXIgVmVydHJhZyBpc3QgZG9jaCBzY2hvbiB1bnRlcnNjaHJpZWJlbiFcbiIgKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHdyaXRlKCAiRGVyIFNjaGFsdGVyYmVhbXRlIHNhZ3Q6IEZ1ZXIgd2VsY2hlIFZlcnRyYWdzdmFyaWFudGUgaGFiZW4gc2llIHNpY2hcbiIKKwkrImVudHNjaGllZGVuPyBUaXBwZW4gU2llICdzYW5mdCcgZnVlciBkZW4gc2FuZnRlbiBXZWcgenVtIGVpZ2VuZW4gSGVpbVxuIgorCSsib2RlciAnc2NobmVsbCcgZnVlciBkZW4gc2NobmVsbGVuIFdlZy5cbl0gIiApOworICBpbnB1dF90bygic2lnbiIsIDAsIHZlcnRyYWcsIGZsYWd8Vl9FUCk7CisgIHJldHVybiAxOworfQorCit2b2lkCitzaWduKHN0cmluZyBzdHIsIG9iamVjdCB2ZXJ0cmFnLCBpbnQgZmxhZykKK3sKKyAgb2JqZWN0IGJsb2NrOworICBzdHJpbmcgczsKKyAgaW50ICphbDsKKworICBpZiAoc3RyID09ICJzYW5mdCIgfHwgc3RyID09ICJzY2huZWxsIikgeworICAgIHdyaXRlKCAiRGVyIFNjaGFsdGVyYmVhbXRlIGdpYnQgRGlyIGVpbmVuIEZ1ZWxsZmVkZXJoYWx0ZXIgc293aWUgZWluIFNrYWxwZWxsLlxuIgorCSAgKyJTY2h3dW5ndm9sbCBzZXR6dCBEdSBEZWluZSBVbnRlcnNjaHJpZnQgdW50ZXIgZGVuIFZlcnRyYWcuIERhbm4gcGlla3N0XG4iCisJICArIkR1IERpciBtaXQgZGVtIFNrYWxwZWxsIGluIGRlbiBGaW5nZXIgdW5kIGJlc3RhZXRpZ3N0IGRpZSBVbnRlcnNjaHJpZnRcbiIKKwkgICsibWl0IGVpbmVtIGR1bmtsZW4gVHJvcGZlbiBEZWluZXMgQmx1dGVzLlxuIgorCSAgKyJQbG9ldHpsaWNoIHp1Y2tlbiBCbGl0emUgdW0gRGljaCBoZXJ1bSBhdWYsIHVuZCBkZXIgU2NoYWx0ZXJiZWFtdGUgbGFjaHRcbiIKKwkgICsiZHJvZWhuZW5kIGF1Zi4gRHUgaGFzdCBkYXMgR2VmdWVobCwgZGFzcyBoaWVyIGV0d2FzIG5pY2h0IGdhbnogbWl0IHJlY2h0ZW5cbiIKKwkgICsiRGluZ2VuIHZvciBzaWNoIGdlaHQuIERhbm4gYmVzdGFldGlndCBkZXIgQmVhbXRlIGRpZSBVbnRlcnNjaHJpZnQgdW5kXG4iCisJICArInVlYmVyZ2lidCBEaXIgZGVuIGVyc3RlbiBCbG9jaywgYXVmIGRlbSBEZWluZSBSYXRlbiB2ZXJtZXJrdCB3ZXJkZW4uXG4iCisJICArIkRlciBCZWFtdGUgZXJrbGFlcnQ6IERhbWl0IGF1ZiBkZW4gQmxvY2sgYXVjaCBlaW5nZXphaGx0IHdpcmQsIG11c3MgbWFuXG4iCisJICArImlobiB3aWUgZWluZSBSdWVzdHVuZyBhbnppZWhlbiFcbiIgKTsKKworICAgIHRoaXNfcGxheWVyKCktPnJlZHVjZV9oaXRfcG9pbnRzKDUwKTsKKyAgICB2ZXJ0cmFnLT5TaWduKGZsYWcgfCAoc3RyID09ICJzYW5mdCIgPyBWX1NJR05FRCA6IFZfU0lHTkVEIHwgVl9GQVNUKSk7CisgICAgKGJsb2NrID0gY2xvbmVfb2JqZWN0KFBBVEgrImJsb2NrIikpLT5tb3ZlKHRoaXNfcGxheWVyKCksIE1fTk9DSEVDSyk7CisgICAgYmxvY2stPlNldFByb3AoInNjaHdlciIsIFZfRkFTVCAmIHZlcnRyYWctPlF1ZXJ5UHJvcChQX0FVVE9MT0FET0JKKVsxXSk7CisgICAgYWwgPSBibG9jay0+UXVlcnlQcm9wKFBfQVVUT0xPQURPQkopOworICAgIGFsW1ZfRkxBR1NdIHw9IEJfQUNUSVZFOworICAgIGJsb2NrLT5TZXRQcm9wKFBfQVVUT0xPQURPQkosIGFsKTsKKyAgICBzID0gIkFudHJhZzogIitnZXR1aWQodGhpc19wbGF5ZXIoKSkrIiB1bnRlcnNjaHJpZWIgZGVuIFZlcnRyYWcgKCIrc3RyKyIpLlxuIjsKKyAgICBITE9HKCAiQkFOSy5MT0ciLCBzICk7CisgICAgSExPRyggZ2V0dWlkKHRoaXNfcGxheWVyKCkpLCBzICk7CisgIH0KKyAgZWxzZSB7CisgICAgd3JpdGUoICJEZXIgU2NoYWx0ZXJiZWFtdGUgc2FndDogTnVyICdzYW5mdCcgb2RlciAnc2NobmVsbCcsIGJpdHRlIVxuIiApOworICAgIGlucHV0X3RvKCJzaWduIiwgMCwgdmVydHJhZywgZmxhZyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zYl9hdXNnYWJlLmMgYi9kL3NlaGVyL2hhZXVzZXIvc2JfYXVzZ2FiZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWQyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc2JfYXVzZ2FiZS5jCkBAIC0wLDAgKzEsMTE1IEBACisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgPG1vdmluZy5oPgorI2luY2x1ZGUgPGJhbmsuaD4KKyNpbmNsdWRlICJoYXVzLmgiCisKK2luaGVyaXQgInN0ZC9yb29tIjsKKworY3JlYXRlKCkKK3sKKyAgOjpjcmVhdGUoKTsKKworICBTZXRQcm9wKFBfSU5ET09SUywgMSk7CisgIFNldFByb3AoUF9MSUdIVCwgMSk7CisgIFNldFByb3AoUF9JTlRfU0hPUlQsICJBbSBBdXNnYWJlc2NoYWx0ZXIiICk7CisgIFNldFByb3AoUF9JTlRfTE9ORywKKyAgICAgIkFtIEF1c2dhYmVzY2hhbHRlci4gV2VubiBEdSBhbGxlIFJhdGVuIGZ1ZXIgRGVpbmVuIFZlcnRyYWcgZWluZ2V6YWhsdCBoYXN0LFxuIgorICAgICsia2FubnN0IER1IG51biBEZWluIEhhdXMgYWJob2xlbi4gRGF6dSBtdXNzdCBEdSBlaW5mYWNoIG51ciBEZWluZW4gVmVydHJhZ1xuIgorICAgICsidm9ybGVnZW4gKG1pdCAnbGVnZSB2ZXJ0cmFnIHZvcicpLlxuIgorICAgICsiRGVyIFNjaGVtZW4gYW0gU2NoYWx0ZXIga29lbm50ZSBlaW4gQmVhbXRlciBzZWluLCBhYmVyIGF1Y2ggZXR3YXMgdmllbCwgdmllbFxuIgorICAgICsiU2NobGltbWVyZXMuLi5cbiIgKTsKKworICBBZGREZXRhaWwoICh7ICJib2RlbiIgfSksCisgICAgICJEZXIgdGllZnNjaHdhcnplIEJvZGVuIGdpYnQgRGlyIGRhcyBHZWZ1ZWhsLCBpbSBhYnNvbHV0ZW4gTmljaHRzIHp1IHN0ZWhlbi5cbiIgKTsKKyAgQWRkRGV0YWlsKCAoeyAid2FuZCIsICJ3YWVuZGUiIH0pLAorICAgICAiRHVua2xlIFNjaGF0dGVuIHRhbnplbiB1ZWJlciBkaWUgV2FlbmRlLlxuIiApOworICBBZGREZXRhaWwoICh7ICJkZWNrZSIgfSksCisgICAgICJTaWUgc2NoZWludCBEaXIgaW4gZGllc2VyIHVuaGVpbWxpY2hlbiBVbWdlYnVuZyBhdWYgZGVuIEtvcGYgZmFsbGVuIHp1XG4iCisgICAgKyJ3b2xsZW4uXG4iICk7CisgIEFkZERldGFpbCggKHsgIm5pY2h0cyIgfSksCisgICAgICJEdSBzaWVoc3QgbmljaHRzLlxuIiApOworICBBZGREZXRhaWwoICh7ICJzY2hhdHRlbiIgfSksCisgICAgICJEaWUgU2NoYXR0ZW4gaXJyaXRpZXJlbiBEaWNoIHNlaHIuXG4iICk7CisgIEFkZERldGFpbCggKHsgInNjaGFsdGVyIiwgImF1c2dhYmVzY2hhbHRlciIgfSksCisgICAgICJEdSBzdGVoc3QgZGlyZWt0IHZvciBkZW0gQXVzZ2FiZXNjaGFsdGVyLlxuIiApOworICBBZGREZXRhaWwoICh7ICJiZWFtdGUiLCAiYmVhbXRlciIsICJiZWFtdGVuIiwgInNjaGFsdGVyYmVhbXRlciIsICJzY2hhbHRlcmJlYW10ZSIsICJzY2hhbHRlcmJlYW10ZW4iLCAic2NoZW1lbiIsICJzY2hsaW1tZXJlcyIgfSksCisgICAgICJEZXIgU2NoYWx0ZXJiZWFtdGUgc2NoYXV0IERpY2ggbWl0IGF1Zmdlc2V0enRlbSBMYWVjaGVsbiBhbi5cbiIgKTsKKworICBBZGRDbWQoICh7ICJsZWciLCAibGVnZSIgfSksICJsZWdlbiIgKTsKKyAgQWRkRXhpdCggInJhdXMiLCBQQVRIKyJzZWhlcmJhbmsiICk7Cit9CisKK3ZvaWQKK0JlY29tZXNOZXREZWFkKG9iamVjdCBwbCkKK3sKKyAgcGwtPm1vdmUoUEFUSCsic2VoZXJiYW5rIiwgTV9HTywgMCwgIndpcmQgcmF1c2dld29yZmVuIiwgInNjaGxhZndhbmRlbHQgaGVyZWluIik7Cit9CisKK2ludAorbGVnZW4oc3RyaW5nIHN0cikKK3sKKyAgb2JqZWN0IHZlcnRyYWcsIHRwOworCisgIHRwID0gdGhpc19wbGF5ZXIoKTsKKyAgdmVydHJhZyA9IHByZXNlbnQoInNlaGVccnZlcnRyYWciLCB0cCk7CisKKyAgaWYgKCFzdHIgfHwgc3RyICE9ICJ2ZXJ0cmFnIHZvciIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCFJU19TRUVSKHRwKSkgeworICAgIHdyaXRlKCAiRGVyIFNjaGFsdGVyYmVhbXRlIGJsaWNrdCBEaWNoIHNjaGFyZiBhbi4gRXIgc2FndDogTnVyIFNlaGVySW5uZW5cbiIKKwkgICsia29lbm5lbiBoaWVyIGVpbiBIYXVzIGFiaG9sZW4hXG4iICk7CisgICAgSExPRyggIkJBTksuTE9HIiwgIkF1c2dhYmU6ICIrZ2V0dWlkKHRwKSsiIGlzdCBrZWluIFNlaGVyLlxuIiApOworICB9CisgIGVsc2UgaWYgKHRwLT5RdWVyeVByb3AoUF9LSUxMUykpCisgICAgd3JpdGUoICJEZXIgU2NoZW1lbiBmYXVjaHQ6IFZlcmJyZWNoZXIgd2VyZGVuIGhpZXIgbmljaHQgYmVkaWVudCFcbiIgKTsKKyAgZWxzZSBpZiAoIXZlcnRyYWcpIHsKKyAgICB3cml0ZSggIkRlciBTY2hlbWVuIGJlbWVya3Q6IFNpZSBoYWJlbiBkb2NoIGdhciBrZWluZW4gVmVydHJhZyFcbiIgKTsKKyAgICBITE9HKCAiQkFOSy5MT0ciLCAiQXVzZ2FiZTogIitnZXR1aWQodHApKyIgaGF0dGUga2VpbmVuIFZldHJhZy5cbiIgKTsKKyAgfQorICBlbHNlIGlmIChvbGRfZXhwbG9kZShvYmplY3RfbmFtZSh2ZXJ0cmFnKSwiIyIpWzBdICE9IFBBVEgrImJhdXNwYXJ2ZXJ0cmFnIikgeworICAgIEhMT0coICJCQU5LLkxPRyIsICJBdXNnYWJlOiAiK2dldHVpZCh0cCkrIiBGYWxzY2hlciBWZXJ0cmFnIVxuIik7CisgICAgSExPRyggIlNDSFVNTUVMIiwgc3ByaW50ZigiQXVzZ2FiZTogVFA6ICVPLCBWOiAlT1xuIiwKKwkJICAgICAgdGhpc19wbGF5ZXIoKSwKKwkJICAgICAgdmVydHJhZy0+UXVlcnlQcm9wKFBfQ0xPTkVSKSkpOworICB9CisgIGVsc2UgaWYgKCEodmVydHJhZy0+UXVlcnlQcm9wKFBfQVVUT0xPQURPQkopWzFdICYgVl9DT01QTCkpIHsKKyAgICB3cml0ZSggIkRlciBTY2hhbHRlcmJlYW10ZSB3ZWlzdCBEaWNoIGRhcmF1ZiBoaW4sIGRhc3MgRHUgbm9jaCBuaWNodCBnZW51Z1xuIgorCSAgKyJhdWYgZGVuIFZlcnRyYWcgZWluZ2V6YWhsdCBoYXN0IVxuIiApOworICAgIEhMT0coICJCQU5LLkxPRyIsICJBdXNnYWJlOiAiK2dldHVpZCh0cCkrIiBoYXR0ZSB6dSB3ZW5pZyBlaW5nZXphaGx0LlxuIiApOworICB9CisgIGVsc2UgaWYgKFpFTlRSQUxCQU5LLT5fcXVlcnlfY3VycmVudF9tb25leSgpIDwgMzAwMDApIHsKKyAgICB3cml0ZSggIkRlciBTY2hhbHRlcmJlYW10ZSB3ZWlzdCBEaWNoIGRhcmF1ZiBoaW4sIGRhc3MgZGllIFplbnRyYWxiYW5rIGltXG4iCisJICArIk1vbWVudCBsZWlkZXIgbmljaHQgdWViZXIgZ2VudWcgQmFyZ2VsZHJlc2VydmVuIHZlcmZ1ZWd0LCB1bSBpaHJlblxuIgorCSAgKyJUZWlsIGRlciBBYm1hY2h1bmcgenUgZXJmdWVsbGVuLiBFciB2ZXJ0cm9lc3RldCBEaWNoIGF1ZiBzcGFldGVyLlxuIiApOworICB9CisgIGVsc2UgaWYgKHZlcnRyYWctPlF1ZXJ5UHJvcChQX0FVVE9MT0FET0JKKVsxXSAmIFZfUkFVTSkgeworICAgIFZFUldBTFRFUi0+TmV1ZXJSYXVtKGdldHVpZCh0aGlzX3BsYXllcigpKSk7CisgICAgd3JpdGUoICJEZXIgU2NoZW1lbiBoaW50ZXIgZGVtIFNjaGFsdGVyIHN0cmVja3QgZWluZW4gbGFuZ2VuLCBzY2hhdHRpZ2VuIEZpbmdlclxuIgorCSAgKyJuYWNoIERlaW5lbSBWZXJ0cmFnIGF1cy4gV2llIHZvbiBHZWlzdGVyaGFuZCBiZXdlZ3QgZ2xlaXRldCBkZXIgVmVydHJhZ1xuIgorCSAgKyJoaW51ZWJlci4gRGVyIFNjaGVtZW4gc2NoZWludCBkZW4gVmVydHJhZyBhdXNnaWViaWcgenUgcHJ1ZWZlbiwgZGFublxuIgorCSAgKyJ6ZXJyZWlzc3QgZXIgaWhuLCB3ZWRlbHQgZWlubWFsIG1pdCBzZWluZW4gc2NoYXR0ZW5oYWZ0ZW4gSGFlbmRlbiB1bmRcbiIKKwkgICsiYmVnaW5udCBtaXQgR3JhYmVzc3RpbW1lIHp1IHNwcmVjaGVuOlxuIgorCSAgKyJEZXIgbmV1ZSBSYXVtIGlzdCBpbiBpaHJlbSBIYXVzIGluc3RhbGxpZXJ0ISBIaW5mb3J0IG1pdCBJaG5lbiFcbiIgKTsKKyAgICBITE9HKCAiQkFOSy5MT0ciLCAiQXVzZ2FiZTogIitnZXR1aWQodHApKyIgYmVrYW0gZWluZW4gbmV1ZW4gUmF1bS5cbiIgKTsKKyAgICBITE9HKCBnZXR1aWQodHApLCAiQXVzZ2FiZTogIitnZXR1aWQodHApKyIgYmVrYW0gZWluZW4gbmV1ZW4gUmF1bS5cbiIgKTsKKyAgICAiL3AvZGFlbW9uL3plbnRyYWxiYW5rIi0+V2l0aERyYXcoMzAwMDApOworICAgIHZlcnRyYWctPnJlbW92ZSgpOworICB9CisgIGVsc2UgeworICAgIHdyaXRlKCAiRGVyIFNjaGVtZW4gaGludGVyIGRlbSBTY2hhbHRlciBzdHJlY2t0IGVpbmVuIGxhbmdlbiwgc2NoYXR0aWdlbiBGaW5nZXJcbiIKKwkgICsibmFjaCBEZWluZW0gVmVydHJhZyBhdXMuIFdpZSB2b24gR2Vpc3RlcmhhbmQgYmV3ZWd0IGdsZWl0ZXQgZGVyIFZlcnRyYWdcbiIKKwkgICsiaGludWViZXIuIERlciBTY2hlbWVuIHNjaGVpbnQgZGVuIFZlcnRyYWcgYXVzZ2llYmlnIHp1IHBydWVmZW4sIGRhbm5cbiIKKwkgICsiemVycmVpc3N0IGVyIGlobiwgd2VkZWx0IGVpbm1hbCBtaXQgc2VpbmVuIHNjaGF0dGVuaGFmdGVuIEhhZW5kZW4gdW5kXG4iCisJICArInZvciBEaXIgZXJzY2hlaW50IGVpbiBrbGVpbmVzLCB0cmFnYmFyZXMgSGF1cy4gWm9lZ2VybmQgbmltbXN0IER1IGVzIGluXG4iCisJICArIkRlaW5lIEhhZW5kZSwgZGEgZXJzY2hhbGx0IGVpbmUgZ3JvbGxlbmRlIFN0aW1tZTpcbiIKKwkgICsiRGFzIEhhdXMgZ2Vob2VydCBJaG5lbi4gQmVlaHJlbiBzaWUgdW5zIGJhbGQgd2llZGVyISBIYXIsIGhhciwgaGFyISEhXG4iICk7CisgICAgY2xvbmVfb2JqZWN0KFBBVEgrInRyYWdoYXVzIiktPm1vdmUodHAsIE1fTk9DSEVDSyk7CisgICAgSExPRyggIkJBTksuTE9HIiwgIkF1c2dhYmU6ICIrZ2V0dWlkKHRwKSsiIGJla2FtIGRhcyBIYXVzLlxuIiApOworICAgIEhMT0coIGdldHVpZCh0cCksICJBdXNnYWJlOiAiK2dldHVpZCh0cCkrIiBiZWthbSBkYXMgSGF1cy5cbiIgKTsKKyAgICAiL3AvZGFlbW9uL3plbnRyYWxiYW5rIi0+V2l0aERyYXcoMzAwMDApOworICAgIHZlcnRyYWctPnJlbW92ZSgpOworICB9CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NiX2VpbnphaGx1bmcuYyBiL2Qvc2VoZXIvaGFldXNlci9zYl9laW56YWhsdW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4OTE5NgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zYl9laW56YWhsdW5nLmMKQEAgLTAsMCArMSwxMzAgQEAKKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8d2l6bGV2ZWxzLmg+CisjaW5jbHVkZSA8bW92aW5nLmg+CisjaW5jbHVkZSAiaGF1cy5oIgorCitpbmhlcml0ICJzdGQvcm9vbSI7CisKK2NyZWF0ZSgpCit7CisgIDo6Y3JlYXRlKCk7CisKKyAgU2V0UHJvcCggUF9JTkRPT1JTLCAxICk7CisgIFNldFByb3AoIFBfTElHSFQsIDEgKTsKKyAgU2V0UHJvcCggUF9JTlRfU0hPUlQsICJBbSBFaW56YWhsdW5nc3NjaGFsdGVyIiApOworICBTZXRQcm9wKCBQX0lOVF9MT05HLAorICAgICAiRHUgc3RlaHN0IGhpZXIgYW0gRWluemFobHVuZ3NzY2hhbHRlciBkZXIgQmFuay4gVW0gZWluZSBSYXRlIGVpbnp1emFobGVuLFxuIgorICAgICsibXVzc3QgRHUgZWluZmFjaCBudXIgRGVpbmVuIE1HIE1BU1RFUi1CTE9DSyB2b3JsZWdlbi4gR2liIGRhenUgZWluZmFjaCBudXJcbiIKKyAgICArIidsZWdlIGJsb2NrIHZvcicgZWluLlxuIgorICAgICsiRGVyIEJsaWNrIGVpbmVzIHNjaGVtZW5oYWZ0IGVya2VubmJhcmVuIEJlYW10ZW4gc2NoZWludCBEaWNoIHNlbGJzdCBkdXJjaFxuIgorICAgICsiZGllIGRpY2tlIFJhdWNoZ2xhc3NjaGVpYmUgaGluZHVyY2ggenUgZHVyY2hib2hyZW4uXG4iICk7CisKKyAgQWRkRGV0YWlsKCAoeyAiYm9kZW4iIH0pLAorICAgICAiRGVyIHRpZWZzY2h3YXJ6ZSBCb2RlbiBnaWJ0IERpciBkYXMgR2VmdWVobCwgaW0gYWJzb2x1dGVuIE5pY2h0cyB6dSBzdGVoZW4uXG4iICk7CisgIEFkZERldGFpbCggKHsgIndhbmQiLCAid2FlbmRlIiB9KSwKKyAgICAgIkR1bmtsZSBTY2hhdHRlbiB0YW56ZW4gdWViZXIgZGllIFdhZW5kZS5cbiIgKTsKKyAgQWRkRGV0YWlsKCAoeyAiZGVja2UiIH0pLAorICAgICAiU2llIHNjaGVpbnQgRGlyIGluIGRpZXNlciB1bmhlaW1saWNoZW4gVW1nZWJ1bmcgYXVmIGRlbiBLb3BmIGZhbGxlbiB6dVxuIgorICAgICsid29sbGVuLlxuIiApOworICBBZGREZXRhaWwoICh7ICJuaWNodHMiIH0pLAorICAgICAiRHUgc2llaHN0IG5pY2h0cy5cbiIgKTsKKyAgQWRkRGV0YWlsKCAoeyAic2NoYXR0ZW4iIH0pLAorICAgICAiRGllIFNjaGF0dGVuIGlycml0aWVyZW4gRGljaCBzZWhyLlxuIiApOworICBBZGREZXRhaWwoICh7ICJzY2hlaWJlIiwgInJhdWNoZ2xhcyIsICJnbGFzIiwgImdsYXNzY2hlaWJlIiwgInJhdWNoZ2xhc3NjaGVpYmUiIH0pLAorICAgICAiSGludGVyIGlociBzY2hlaW50IHNpY2ggZWluIEJlYW10ZXIgenUgdmVyYmVyZ2VuLlxuIiApOworICBBZGREZXRhaWwoICh7ICJzY2hhbHRlciIgfSksCisgICAgICJBbiBkaWVzZW0gU2NoYWx0ZXIga2FubnN0IER1IGVpbmUgUmF0ZSBmdWVyIERlaW4gSGF1cyBlaW56YWhsZW4uXG4iICk7CisgIEFkZERldGFpbCggKHsgImJlYW10ZSIsICJiZWFtdGVyIiwgImJlYW10ZW4iLCAic2NoYWx0ZXJiZWFtdGUiLCAic2NoYWx0ZXJiZWFtdGVyIiwgInNjaGFsdGVyYmVhbXRlbiIgfSksCisgICAgICJEZXIgU2NoYWx0ZXJiZWFtdGUgZHVyY2hib2hydCBEaWNoIG1pdCBzZWluZW4gQmxpY2tlbi5cbiIgKTsKKworICBBZGRDbWQoICh7ICJsZWciLCAibGVnZSIgfSksICJsZWdlbiIgKTsKKworICBBZGRFeGl0KCAicmF1cyIsIFBBVEgrInNlaGVyYmFuayIgKTsKK30KKwordm9pZAorQmVjb21lc05ldERlYWQob2JqZWN0IHBsKQoreworICBwbC0+bW92ZShQQVRIKyJzZWhlcmJhbmsiLCBNX0dPLCAwLCAid2lyZCByYXVzZ2V3b3JmZW4iLCAic2NobGFmd2FuZGVsdCBoZXJlaW4iKTsKK30KKworaW50CitsZWdlbihzdHJpbmcgc3RyKQoreworICBvYmplY3QgdHAsIGJsb2NrLCB2ZXJ0cmFnOworICBpbnQgKmFsLCAqdmwsIHJhdGU7CisKKyAgaWYgKCFzdHIgfHwgc3RyICE9ICJibG9jayB2b3IiKQorICAgIHJldHVybiAwOworCisgIHRwID0gdGhpc19wbGF5ZXIoKTsKKyAgYmxvY2sgPSBwcmVzZW50KCAiXG4gYmxvY2siLCB0cCk7CisgIHZlcnRyYWcgPSBwcmVzZW50KCAic2VoZVxydmVydHJhZyIsIHRwICk7CisKKyAgaWYgKCFJU19TRUVSKHRwKSkKKyAgICB3cml0ZSggIkRlciBTY2hhbHRlcmJlYW10ZSB3ZWlzdCBEaWNoIGRhcmF1ZiBoaW4sIGRhc3MgaGllciBudXIgU2VoZXIgYmUtXG4iCisJICArImRpZW50IHdlcmRlbi5cbiIgKTsKKyAgZWxzZSBpZiAodHAtPlF1ZXJ5UHJvcChQX0tJTExTKSkKKyAgICB3cml0ZSggIkVpbiBib2hyZW5kZXIgQmxpY2sgdmVya3VlbmRldDogVmVyYnJlY2hlciB3ZXJkZW4gaGllciBuaWNodCBiZWRpZW50IVxuIiApOworICBlbHNlIGlmICghYmxvY2spCisgICAgd3JpdGUoICJEdSBoYXN0IGtlaW5lbiBCbG9jaywgZGVuIER1IHZvcmxlZ2VuIGtvZW5udGVzdCFcbiIgKTsKKyAgZWxzZSBpZiAoIXZlcnRyYWcpIHsKKyAgICB3cml0ZSggIkRlciBTY2hhbHRlcmJlYW10ZSBzYWd0OiBTaWUgaGFiZW4ga2VpbmVuIEJhdXNwYXJ2ZXJ0cmFnISBXb3p1IHdvbGxlblxuIgorCSAgKyJTaWUgZGFubiBlaW5lIFJhdGUgZWluemFobGVuPyBXaWUgc2luZCBTaWUgdWViZXJoYXVwdCBhbiBkZW4gQmxvY2tcbiIKKwkgICsiZ2Vrb21tZW4/XG4iICk7CisgICAgSExPRyggIkJBTksuTE9HIiwgIkVpbnphaGx1bmc6ICIrZ2V0dWlkKHRwKSsiIEJsb2NrIG9obmUgVmVydHJhZyFcbiIgKTsKKyAgfQorICBlbHNlIGlmIChvbGRfZXhwbG9kZShvYmplY3RfbmFtZShibG9jayksIiMiKVswXSAhPSBQQVRIKyJibG9jayIgfHwKKwkgICBvbGRfZXhwbG9kZShvYmplY3RfbmFtZSh2ZXJ0cmFnKSwiIyIpWzBdICE9IFBBVEgrImJhdXNwYXJ2ZXJ0cmFnIikgeworICAgIHdyaXRlKCAiRGVyIFNjaGFsdGVyYmVhbXRlIGZhZWhydCBEaWNoIGFuOiBEVSBXSUxMU1QgU0NIVU1NRUxOPz8/XG4iICk7CisgICAgSExPRyggIkJBTksuTE9HIiwgIkVpbnphaGx1bmc6ICIrZ2V0dWlkKHRwKSsiIEZhbHNjaGVyIEJsb2NrL1ZlcnRyYWchXG4iKTsKKyAgICBITE9HKCAiU0NIVU1NRUwiLCBzcHJpbnRmKCJFaW56YWhsdW5nOiBUUDogJU8sIEI6ICVPLCBWOiAlT1xuIiwKKwkJICAgICAgdGhpc19wbGF5ZXIoKSwKKwkJICAgICAgYmxvY2stPlF1ZXJ5UHJvcChQX0NMT05FUiksCisJCSAgICAgIHZlcnRyYWctPlF1ZXJ5UHJvcChQX0NMT05FUikpKTsKKyAgfQorICBlbHNlIHsKKyAgICBhbCA9IGJsb2NrLT5RdWVyeShQX0FVVE9MT0FET0JKKTsKKyAgICByYXRlID0gUkFURU5IT0VIRTsKKyAgICBpZiAoYWxbVl9GTEFHU10gJiBCX0VYVEVORCkKKyAgICAgIHJhdGUgKz0gKDYqUkFURU5IT0VIRSkvMTA7CisKKyAgICBpZiAoYWxbVl9NT05FWV0gPCByYXRlKSB7CisgICAgICB3cml0ZSggIkRlciBTY2hhbHRlcmJlYW10ZSB3ZWlzdCBEaWNoIGRhcmF1ZiBoaW4sIGRhc3MgRHUgbm9jaCBuaWNodCBnZW51ZyBFcmZhaHJ1bmdcbiIKKwkgICAgKyJmdWVyIGRpZSBSYXRlIGdlbGFzc2VuIGhhc3QuXG4iICk7CisgICAgICBITE9HKCBnZXR1aWQodHApLCAiRWluemFobHVuZzogIitnZXR1aWQodHApKyIgaGF0dGUgbmljaHQgZ2VudWcgKCIrYWxbVl9NT05FWV0rIi8iK3JhdGUrIikuXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB2bCA9IHZlcnRyYWctPlF1ZXJ5KFBfQVVUT0xPQURPQkopOworICAgICAgcmF0ZSA9IChhbFtWX0ZMQUdTXSAmIEJfRkFTVCkgPyBTVU1NRV9TIDogU1VNTUVfTDsKKyAgICAgIGlmICh2bFsxXSAmIFZfUkFVTSkKKwlyYXRlID0gcmF0ZSAqIDQgLzEwOworICAgICAgd3JpdGUoICJEdSB6YWhsc3QgRGVpbmUgUmF0ZSBlaW4uXG4iICk7CisgICAgICBibG9jay0+cmVtb3ZlKCk7CisgICAgICBpZiAodmVydHJhZy0+RWluemFobHVuZygpID49IHJhdGUpIHsKKwkgIHdyaXRlKCAiRGVyIFNjaGFsdGVyYmVhbXRlIHNhZ3Q6IFNpZSBoYWJlbiBlcyBnZXNjaGFmZnQhIFNpZSBoYWJlbiBudW4gZ2VudWdcbiIKKwkJKyJFcmZhaHJ1bmcgZXJ1ZWJyaWd0LiAiKTsKKwlpZiAodmxbMV0gJiBWX1JBVU0pCisJICB3cml0ZSggIkFtIEF1c2dhYmVzY2hhbHRlciBrb2VubmVuIFNpZSBudW4gZGVuIG5ldWVuIFJhdW1cbiIKKwkJKyJlaW50cmFnZW4gbGFzc2VuLlxuIiApOworCWVsc2UKKwkgIHdyaXRlKCAiQW0gSGF1c2F1c2dhYmVzY2hhbHRlciBrb2VubmVuIFNpZSBudW4gSWhyIG5ldWVzXG4iCisJCSsiSGVpbSBpbiBFbXBmYW5nIG5laG1lbi5cbiIgKTsKKwl2ZXJ0cmFnLT5TaWduKCB2bFsxXSB8IFZfQ09NUEwgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXdyaXRlKCAiRGVyIFNjaGFsdGVyYmVhbXRlIGJlc2Nod29lcnQgQmxpdHogdW5kIERvbm5lciB2b20gSGltbWVsIGhlcmFiLiBFaW5cbiIKKwkgICAgICArImxhdXRlciBLbmFsbCwgdW5kIGVpbiBuZXVlciBSYXRlbmJsb2NrIGVyc2NoZWludCBpbiBEZWluZW0gSW52ZW50YXIuXG4iICk7CisJKGJsb2NrID0gY2xvbmVfb2JqZWN0KFBBVEgrImJsb2NrIikpLT5tb3ZlKHRwLCBNX05PQ0hFQ0spOworCWJsb2NrLT5TZXRQcm9wKCJzY2h3ZXIiLCB2bFsxXSAmIFZfRkFTVCk7CisJYWwgPSBibG9jay0+UXVlcnkoUF9BVVRPTE9BRE9CSik7CisJYWxbVl9GTEFHU10gfD0gQl9BQ1RJVkU7CisJYmxvY2stPlNldChQX0FVVE9MT0FET0JKLCBhbCk7CisgICAgICB9CisgICAgICBITE9HKGdldHVpZCh0cCksICJFaW56YWhsdW5nOiAiK2dldHVpZCh0cCkrIiB6YWhsdGUgZWluLlxuIiApOworICAgICAgdHAtPmZvcmNlX3NhdmUoKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zY19zY2hhbHRlci5jIGIvZC9zZWhlci9oYWV1c2VyL3NjX3NjaGFsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyOTM0MAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zY19zY2hhbHRlci5jCkBAIC0wLDAgKzEsMzMyIEBACisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgPGRlZmluZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKyNpbmNsdWRlIDxiYW5rLmg+CisjaW5jbHVkZSAiaGF1cy5oIgorI2luY2x1ZGUgPG1vbmV5Lmg+CisKK2luaGVyaXQgInN0ZC9yb29tIjsKKworI2RlZmluZSBLT05UTyAic2VlcmNhcmRfa29udG9zdGFuZCIKKworLy8gUHJvdG90eXBlcworcHVibGljIHZvaWQgQmVjb21lc05ldERlYWQoIG9iamVjdCBwbCApOworc3RhdGljIGludCBfZ3V0aGFiZW4oKTsKK3N0YXRpYyBpbnQgX2VpbnphaGxlbiggc3RyaW5nIHN0ciApOworc3RhdGljIGludCBfYXVmbGFkZW4oIHN0cmluZyBzdHIgKTsKK3N0YXRpYyBpbnQgX2thdWZlbiggc3RyaW5nIHN0ciApOworCisKK3Byb3RlY3RlZCB2b2lkIGNyZWF0ZSgpCit7CisgICAgOjpjcmVhdGUoKTsKKworICAgIFNldFByb3AoIFBfSU5ET09SUywgMSApOworICAgIFNldFByb3AoIFBfTElHSFQsIDEgKTsKKyAgICBTZXRQcm9wKCBQX0xPR19GSUxFLCAicmVwb3J0L3RpYW1hay5yZXAiICk7CisgICAgU2V0UHJvcCggUF9JTlRfU0hPUlQsICJBbSBHZWxka2FydGVuc2NoYWx0ZXIiICk7CisgICAgU2V0UHJvcCggUF9JTlRfTE9ORywKKyAgICAgICAgICAgICBicmVha19zdHJpbmcoICJEYXMgaXN0IGFsc28gZGVyIEdlbGRrYXJ0ZW5zY2hhbHRlci4gSGludGVyIGVpbmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJrYXVtIGR1cmNoc2ljaHRpZ2VuIFJhdWNoZ2xhc3NjaGVpYmUgc2NoZWludCBlaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlYW10ZXIgKG9kZXIgenVtaW5kZXN0IGlyZ2VuZGVpbiBMZWJld2VzZW4pICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZWR1bGRpZyB6dSB3YXJ0ZW4uIE5lYmVuIGRlbSBTY2hhbHRlciBoYWVuZ3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImVpbmUgVGFmZWwuIiwgNzggKSApOworCisgICAgQWRkRGV0YWlsKCAoeyAiYm9kZW4iIH0pLAorICAgICAgICAgICAgICAgIkRlciB0aWVmc2Nod2FyemUgQm9kZW4gZ2lidCBEaXIgZGFzIEdlZnVlaGwsIGltIGFic29sdXRlbiAiCisgICAgICAgICAgICAgICAiTmljaHRzIHp1IHN0ZWhlbi5cbiIgKTsKKyAgICBBZGREZXRhaWwoICJnZWZ1ZWhsIiwgIktlaW4gc2Nob2VuZXMgR2VmdWVobC5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJzY2h3YXJ6IiwgInNjaHdhZXJ6ZSIgfSksICJUaWVmc2Nod2Fyei5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJ3YW5kIiwgIndhZW5kZSIgfSksCisgICAgICAgICAgICAgICAiRHVua2xlIFNjaGF0dGVuIHRhbnplbiB1ZWJlciBkaWUgV2FlbmRlLlxuIiApOworICAgIEFkZERldGFpbCggKHsgImRlY2tlIiB9KSwKKyAgICAgICAgICAgICAgICJTaWUgc2NoZWludCBEaXIgaW4gZGllc2VyIHVuaGVpbWxpY2hlbiBVbWdlYnVuZyBhdWYgZGVuICIKKyAgICAgICAgICAgICAgICJLb3BmIGZhbGxlbiB6dVxud29sbGVuLlxuIiApOworICAgIEFkZERldGFpbCggInVtZ2VidW5nIiwgIlNjaGF1IERpY2ggZG9jaCB1bS5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJrb3BmIiB9KSwgIkRhcyBpc3QgZGVyIEdlZ2Vuc3RhbmQgYXVmIERlaW5lbSBIYWxzLlxuIiApOworICAgIEFkZERldGFpbCggImdlZ2Vuc3RhbmQiLCAiSWNoIG1laW5lIERlaW5lbiBLb3BmLlxuIiApOworICAgIEFkZERldGFpbCggImhhbHMiLCAiV2VubiBEdSBOYWNoaGlsZmUgaW4gQW5hdG9taWUgYnJhdWNoc3QsIHN1Y2ggRGlyICIKKyAgICAgICAgICAgICAgICJqZW1hbmQgYW5kZXJlbi5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJqZW1hbmQiIH0pLCAiS2VpbmVyIGRhLlxuIiApOworICAgIEFkZERldGFpbCggIm5hY2hoaWxmZSIsICJEYXp1IG11c3N0IER1IHdvaGwgd29hbmRlcnMgc3VjaGVuLlxuIiApOworICAgIEFkZERldGFpbCggImFuYXRvbWllIiwgIlNjaGxhZyBlcyBpbiBlaW5lbSBMZXhpa29uIG5hY2guXG4iICk7CisgICAgQWRkRGV0YWlsKCAibGV4aWtvbiIsICJTb2V0d2FzIGhhc3QgRHUgYW5zY2hlaW5lbmQgbm9jaCBuaWUgZ2VzZWhlbi5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJuaWNodHMiIH0pLAorICAgICAgICAgICAgICAgIkR1IGJpc3QgYmxpbmQhXG4iICk7CisgICAgQWRkRGV0YWlsKCAoeyAic2NoYXR0ZW4iIH0pLAorICAgICAgICAgICAgICAgIkRpZSBTY2hhdHRlbiBzaW5kIG51ciBkYXp1IGRhLCB1bSBEaWNoIHp1IGlycml0aWVyZW4uICIKKyAgICAgICAgICAgICAgICJVbmQgZGFzIG1hY2hlbiBzaWUgZ3V0LlxuIiApOworICAgIEFkZERldGFpbCggKHsgImJlYW10ZSIsICJiZWFtdGVyIiwgImJlYW10ZW4iLCAic2NoYWx0ZXJiZWFtdGUiLAorICAgICAgICAgICAgICAgICAgICAgICJzY2hhbHRlcmJlYW10ZW4iLCAic2NoYWx0ZXJiZWFtdGVyIiB9KSwKKyAgICAgICAgICAgICAgICJEdSBrYW5uc3QgaWhuIG51ciBzY2hlbWVuaGFmdCBoaW50ZXIgZGVyIFJhdWNoZ2xhc3NjaGVpYmUgIgorICAgICAgICAgICAgICAgImRlcyBTY2hhbHRlcnMgZXItXG5rZW5uZW4uIERpZSBVbXJpc3NlIHNjaGVpbmVuIGFsbGVyZGluZ3MgIgorICAgICAgICAgICAgICAgInp1IGtlaW5lciBMZWJlbnNmb3JtIHp1IGdlaG9lcmVuLFxuZGVyZXIgRHUgRGljaCBlcmlubmVybiAiCisgICAgICAgICAgICAgICAia29lbm50ZXN0LlxuIiApOworICAgIEFkZERldGFpbCggKHsgInNjaGVpYmUiLCAiZ2xhc3NjaGVpYmUiLCAicmF1Y2hnbGFzIiwgInJhdWNoZ2xhc3NjaGVpYmUiIH0pLAorICAgICAgICAgICAgICAgIkVpbiBzY2hlbWVuaGFmdGVyIEJlYW10ZXIgc2l0enQgZGFoaW50ZXIuXG4iICk7CisgICAgQWRkRGV0YWlsKCAoeyAidW1yaXNzZSIgfSksCisgICAgICAgICAgICAgICAiU2llIHNpbmQgYWV1c3NlcnN0IGJldW5ydWhpZ2VuZC5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJsZWJlbnNmb3JtIiwgInNjaGVtZW4iLCAibGViZXdlc2VuIiB9KSwKKyAgICAgICAgICAgICAgICJEdSBtb2VjaHRlc3QgZ2FyIG5pY2h0IHdpc3NlbiwgdW0gd2FzIGVzIHNpY2ggZGFiZWkgIgorICAgICAgICAgICAgICAgImhhbmRlbHQuXG4iICk7CisgICAgQWRkRGV0YWlsKCAoeyAic2NoYWx0ZXIiLCAiZ2VsZGthcnRlbnNjaGFsdGVyIiB9KSwKKyAgICAgICAgICAgICAgICJBbiBkaWVzZW0gU2NoYWx0ZXIga2FubnN0IER1IGRpZSBiZXJ1ZWhtdGUiCisgICAgICAgICAgICAgICAiIFNlZXItQ2FyZCAoVE0pIGVyd2VyYmVuIHNvd2llXG5EZWluIEtvbnRvIGF1ZmxhZGVuLlxuIiApOworICAgIEFkZERldGFpbCggKHsgImtvbnRvIiwgImthcnRlIiwgImdlbGRrYXJ0ZSIsICJjYXJkIiwgInNlZXJjYXJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAic2Vlci1jYXJkIiB9KSwgIldpZSBkYXMgZ2VodCwgc3RlaHQgYXVmIGRlciBUYWZlbC5cbiIgKTsKKyAgICBBZGREZXRhaWwoICJ0YWZlbCIsICJEdSBrYW5uc3Qgc2llIGxlc2VuLlxuIiApOworCisgICAgQWRkU21lbGxzKCBTRU5TRV9ERUZBVUxULCAiRXMgcmllY2h0IG5hY2ggYWx0ZW0gU3RhdWIuXG4iICk7CisgICAgQWRkU21lbGxzKCAic3RhdWIiLCAiSGllciBsYWdlcm4gc2ljaGVyIHZpZWxlIGFsdGUgQWt0ZW4uXG4iICk7CisgICAgQWRkU21lbGxzKCAiYWt0ZW4iLCAiRGllIHJpZWNoZW4gZGFubiBpcmdlbmR3YW5uIG5hY2ggU3RhdWIuXG4iICk7CisKKyAgICBBZGRTb3VuZHMoIFNFTlNFX0RFRkFVTFQsICJEaXJla3Qgdm9yIGRlbSBTY2hhbHRlciBpc3QgZXMgZXJzdGF1bmxpY2ggIgorICAgICAgICAgICAgICAgInJ1aGlnLlxuR2VyYWRlenUgZWhyZnVyY2h0c3ZvbGwgcnVoaWcuXG4iICk7CisgICAgQWRkU291bmRzKCAoeyAic2NoYWx0ZXIiLCAicnVoZSIsICJlaHJmdXJjaHQiIH0pLAorICAgICAgICAgICAgICAgIk9iIGRhcyBhbSBTY2hhbHRlcmJlYW10ZW4gbGllZ3Q/XG4iICk7CisgICAgQWRkU291bmRzKCAoeyAiYmVhbXRlciIsICJiZWFtdGVuIiwgInNjaGFsdGVyYmVhbXRlciIsICJzY2hhbHRlcmJlYW10ZW4iIH0pLAorICAgICAgICAgICAgICAgIklzdCBlciB1ZWJlcmhhdXB0IG5vY2ggZGE/XG4iICk7CisKKyAgICBBZGRSZWFkRGV0YWlsKCAoeyAidGFmZWwiLCAicHJlaXNsaXN0ZSIgfSksCisgICAgICAgICAgICAgICAgICAgIlByZWlzbGlzdGU6XG4iCisgICAgICAgICAgICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgICAgICAgICAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PVxuXG4iCisgICAgICAgICAgICAgICAgICAgIk5ldWUgR2VsZGthcnRlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iCisgICAgICAgICAgICAgICAgICAgIi4uLi4uLiAxMDAwMCBNdWVuemVuXG4iCisgICAgICAgICAgICAgICAgICAgIlN5bnRheDoga2F1ZmUgZ2VsZGthcnRlXG5cbiIKKyAgICAgICAgICAgICAgICAgICAiRWluemFobHVuZ2VuIGF1ZiBkYXMgR2VsZGthcnRlbi1Lb250byAuLi4uLi4uLi4uLiIKKyAgICAgICAgICAgICAgICAgICAiLi4uLi4uIDEwJSBHZWJ1ZWhyZW5cbiIKKyAgICAgICAgICAgICAgICAgICAiU3ludGF4OiB6YWhsZSA8bj4gbXVlbnplbiBlaW5cbiIKKyAgICAgICAgICAgICAgICAgICAib2RlciAgICBsYWRlIGthcnRlIGF1ZlxuXG4iICk7CisKKyAgICBBZGRDbWQoICh7ICJ6YWhsIiwgInphaGxlIiB9KSwgIl9laW56YWhsZW4iICk7CisgICAgQWRkQ21kKCAoeyAibGFkIiwgImxhZGUiIH0pLCAiX2F1ZmxhZGVuIiApOworICAgIEFkZENtZCggKHsgImthdWZlIiwgImthdWYiIH0pLCAiX2thdWZlbiIgKTsKKyAgICAKKyAgICBBZGRFeGl0KCAicmF1cyIsIFBBVEgrInNlaGVyYmFuayIgKTsKK30KKworCitwdWJsaWMgdm9pZCBCZWNvbWVzTmV0RGVhZCggb2JqZWN0IHBsICkKK3sKKyAgICBwbC0+bW92ZSggUEFUSCsic2VoZXJiYW5rIiwgTV9HT3xNX05PQ0hFQ0ssIDAsICJ3aXJkIHJhdXNnZXdvcmZlbiIsCisgICAgICAgICAgICAgICJzY2hsYWZ3YW5kZWx0IGhlcmVpbiIgKTsKK30KKworCitzdGF0aWMgaW50IF9ndXRoYWJlbigpCit7CisgICAgbWl4ZWQgd2VydDsKKworICAgIGlmICggISh0aGlzX3BsYXllcigpLT5RdWVyeShLT05UTywgRl9NT0RFKSAmIFNBVkUpICkKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+U2V0KCBLT05UTywgU0FWRSwgRl9NT0RFX0FTICk7CisgICAgCisgICAgd2VydCA9IHRoaXNfcGxheWVyKCktPlF1ZXJ5KCBLT05UTywgRl9WQUxVRSApOworCisgICAgaWYgKCAhaW50cCh3ZXJ0KSB8fCB3ZXJ0IDwgMCB8fCB3ZXJ0ID4gMTAwMDAwICkKKyAgICAgICAgcmV0dXJuIHRoaXNfcGxheWVyKCktPlNldCggS09OVE8sIDAsIEZfVkFMVUUgKTsKKworICAgIHJldHVybiB3ZXJ0OworfQorCisKK3N0YXRpYyBpbnQgX2VpbnphaGxlbiggc3RyaW5nIHN0ciApCit7CisgICAgaW50IG4sIGd1dGhhYmVuLCBnZWJ1ZWhyOworICAgIHN0cmluZyBkdW1teTsKKyAgICBvYmplY3Qgb2I7CisKKyAgICBpZiAoICF0aGlzX3BsYXllcigpIHx8IHRoaXNfcGxheWVyKCkgIT0gdGhpc19pbnRlcmFjdGl2ZSgpICkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKCAhc3RyIHx8ICFzdHJpbmdwKHN0cikgfHwgc3NjYW5mKCBzdHIsICIlZCAlcyIsIG4sIGR1bW15ICkgIT0gMiB8fAorICAgICAgICAgZHVtbXkgIT0gIm11ZW56ZW4gZWluIiApCisgICAgICAgIHJldHVybiBub3RpZnlfZmFpbCggIlN5bnRheDogemFobGUgPG4+IG11ZW56ZW4gZWluXG4iICksIDA7CisKKyAgICBpZiAoICFJU19TRUVSKHRoaXNfcGxheWVyKCkpICkKKyAgICAgICAgcmV0dXJuIG5vdGlmeV9mYWlsKCBicmVha19zdHJpbmcoIldlcmQgZG9jaCBlcnN0bWFsIFNlaGVyLiIsIDc4LCAiRGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNjaGFsdGVyYmVhbXRlIGdyaW5zdCB1ZWJlcmhlYmxpY2g6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSApLCAwOworCisgICAgaWYgKCBuIDwgMTAwMCApCisgICAgICAgIHJldHVybiBub3RpZnlfZmFpbCggYnJlYWtfc3RyaW5nKCJNaXQgc28ga2xlaW5lbiBCZXRyYWVnZW4gZmFuZ2VuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpciBlcnN0IGdhciBuaWNodCBhbi4gRHUgbXVzc3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Nob24gbWluZGVzdGVucyAxMDAwICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk11ZW56ZW4gZWluemFobGVuLiIsIDc4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVyIFNjaGFsdGVyYmVhbXRlIGdydW1tZWx0OiAiKSApLCAwOworCisgICAgZ3V0aGFiZW4gPSB0aGlzX3BsYXllcigpLT5RdWVyeU1vbmV5KCk7CisKKyAgICAvLyBNYW4ga2FubiBzZWluIEtvbnRvIG5hdHVlcmxpY2ggbmljaHQgbWl0IGRlbSBHZWxkIHZvbSBLb250byBhdWZsYWRlbiA7LSkKKyAgICBpZiAoIG9iID0gcHJlc2VudCggIlxuZ2VsZGthcnRlIiwgdGhpc19wbGF5ZXIoKSApICkKKyAgICAgICAgZ3V0aGFiZW4gLT0gb2ItPlF1ZXJ5UHJvcCggUF9BTU9VTlQgKTsKKworICAgIGlmICggZ3V0aGFiZW4gPCBuICkKKyAgICAgICAgcmV0dXJuIG5vdGlmeV9mYWlsKCBicmVha19zdHJpbmcoIkR1IGhhc3QgamEgZ2FyIG5pY2h0IHNvdmllbCBHZWxkISIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc4LCAiRGVyIFNjaGFsdGVyYmVhbXRlIGZhdWNodCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWNoIGFuOiAiKSApLCAwOworCisgICAgaWYgKCAoZ3V0aGFiZW4gPSBfZ3V0aGFiZW4oKSkgPT0gMTAwMDAwICkKKyAgICAgICAgcmV0dXJuIG5vdGlmeV9mYWlsKCBicmVha19zdHJpbmcoICJEZWluZSBTZWVyLUNhcmQgKFRNKSBpc3QgYmVyZWl0cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4aW1hbCBhdWZnZWxhZGVuLiBNZWhyIGFscyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAwLjAwMCBNdWVuemVuIGtvZW5uZW4gZGFtaXQgYXVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZWNobmlzY2hlbiBHcnVlbmRlbiBuaWNodCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyd2FsdGV0IHdlcmRlbi4iLCA3OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXIgU2NoYWx0ZXJiZWFtdGUgc2FndDogIiApICksIDA7CisKKyAgICBnZWJ1ZWhyID0gdG9faW50KG4gLyAxMS4wICsgMC41KTsKKyAgICBuIC09IGdlYnVlaHI7CisKKyAgICBpZiAoIGd1dGhhYmVuICsgbiA+IDEwMDAwMCApCisgICAgICAgIHJldHVybiBub3RpZnlfZmFpbCggYnJlYWtfc3RyaW5nKCJUdXQgbWlyIGxlaWQsIGFiZXIgc28gaG9oZSBCZXRyYWVnZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrYW5uIGRpZSBHZWxka2FydGUgbmljaHQgdmVyd2FsdGVuLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHUga2FubnN0IGRpZSBTZWVyLUNhcmQgKFRNKSBtaXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4aW1hbCAxMDAuMDAwIE11ZW56ZW4gYXVmbGFkZW4uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF1c2dlaGVuZCB2b24gRGVpbmVtIG1vbWVudGFuZW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR3V0aGFiZW4gdm9uICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19zdHJpbmcoZ3V0aGFiZW4pICsgIiBNdWVuemVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInd1ZXJkZSBEaWNoIGRhcyAoaW5rbC4gdW5zZXJlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWZXJ3YWx0dW5nc2dlYnVlaHJlbikgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX3N0cmluZyh0b19pbnQoKDEwMDAwMC1ndXRoYWJlbikgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMSArIDAuNSkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBNdWVuemVuIGtvc3Rlbi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVtIERpciBkaWUgUmVjaG5lcmVpIHp1IGVyc3BhcmVuLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrYW5uc3QgRHUgYXVjaCBlaW5mYWNoIFwibGFkZSBrYXJ0ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdWZcIiBiZW51dHplbiwgdW0gRGVpbmUgR2VsZGthcnRlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heGltYWwgYXVmenVsYWRlbi4iLCA3OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlciBTY2hhbHRlcmJlYW10ZSBzYWd0OiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU19MRUFWRV9NWV9MRlMpICksIDA7CisKKyAgICBpZiAoIG9iamVjdHAob2IpICl7CisgICAgICAgIHdyaXRlKCAiRHUgemVpZ3N0IERlaW5lIEdlbGRrYXJ0ZSBrdXJ6IHZvci5cbiIgKTsKKyAgICAgICAgLy8gbm90d2VuZGlnLCBkYSBzb25zdCBkYXMgR2VsZCBldnRsLiB2b24gZGVyIEthcnRlIHNlbGJlciBhYmdlYnVjaHQKKyAgICAgICAgLy8gd2lyZCwgZmFsbHMgc2llIGFscyBvYmVyc3RlcyBpbSBJbnYgc3RlaHQKKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+U2V0KCBLT05UTywgMCwgRl9WQUxVRSApOworICAgIH0KKworICAgIHRoaXNfcGxheWVyKCktPkFkZE1vbmV5KCAtKG4gKyBnZWJ1ZWhyKSApOworICAgIFpFTlRSQUxCQU5LLT5QYXlJbiggZ2VidWVociApOworICAgIHRoaXNfcGxheWVyKCktPlNldCggS09OVE8sIGd1dGhhYmVuICsgbiwgRl9WQUxVRSApOworCisgICAgd3JpdGUoIGJyZWFrX3N0cmluZyggIk9rYXksIERlaW5lIEdlbGRrYXJ0ZSBoYXQgbnVuIGVpbiBHdXRoYWJlbiB2b24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnNnZXNhbXQgIiArIHRvX3N0cmluZyhfZ3V0aGFiZW4oKSkgKyAiIE11ZW56ZW4uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA3OCwgIkRlciBTY2hhbHRlcmJlYW10ZSBzYWd0OiAiICkgKTsKKworICAgIHJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQgX2F1ZmxhZGVuKCBzdHJpbmcgc3RyICkKK3sKKyAgICBpbnQgbiwgZ3V0aGFiZW4sIGdlYnVlaHI7CisgICAgc3RyaW5nIGR1bW15OworICAgIG9iamVjdCBvYjsKKworICAgIGlmICggIXRoaXNfcGxheWVyKCkgfHwgdGhpc19wbGF5ZXIoKSAhPSB0aGlzX2ludGVyYWN0aXZlKCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICggIXN0cmluZ3Aoc3RyKSB8fCBzc2NhbmYoIHN0ciwgIiVzIGF1ZiIsIGR1bW15ICkgIT0gMSB8fAorICAgICAgICAgZHVtbXkgIT0gImthcnRlIiAmJiBkdW1teSAhPSAiZ2VsZGthcnRlIiAmJiBkdW1teSAhPSAiY2FyZCIgJiYKKyAgICAgICAgIGR1bW15ICE9ICJzZWVyY2FyZCIgJiYgZHVtbXkgIT0gInNlZXItY2FyZCIgKQorICAgICAgICByZXR1cm4gbm90aWZ5X2ZhaWwoICJTeW50YXg6IGxhZGUgZ2VsZGthcnRlIGF1ZlxuIiApLCAwOworCisgICAgaWYgKCAhSVNfU0VFUih0aGlzX3BsYXllcigpKSApCisgICAgICAgIHJldHVybiBub3RpZnlfZmFpbCggYnJlYWtfc3RyaW5nKCJXZXJkIGRvY2ggZXJzdG1hbCBTZWhlci4iLCA3OCwgIkRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTY2hhbHRlcmJlYW10ZSBncmluc3QgdWViZXJoZWJsaWNoOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKSwgMDsKKworICAgIGlmICggKGd1dGhhYmVuID0gX2d1dGhhYmVuKCkpID09IDEwMDAwMCApCisgICAgICAgIHJldHVybiBub3RpZnlfZmFpbCggYnJlYWtfc3RyaW5nKCAiRGVpbmUgU2Vlci1DYXJkIChUTSkgaXN0IGJlcmVpdHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heGltYWwgYXVmZ2VsYWRlbi4gTWVociBhbHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEwMC4wMDAgTXVlbnplbiBrb2VubmVuIGRhbWl0IGF1cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVjaG5pc2NoZW4gR3J1ZW5kZW4gbmljaHQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcndhbHRldCB3ZXJkZW4uIiwgNzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVyIFNjaGFsdGVyYmVhbXRlIHNhZ3Q6ICIgKSApLCAwOworCisgICAgbiA9IHRoaXNfcGxheWVyKCktPlF1ZXJ5TW9uZXkoKTsKKworICAgIC8vIE1hbiBrYW5uIHNlaW4gS29udG8gbmF0dWVybGljaCBuaWNodCBtaXQgZGVtIEdlbGQgdm9tIEtvbnRvIGF1ZmxhZGVuIDstKQorICAgIGlmICggb2IgPSBwcmVzZW50X2Nsb25lKCBTRUhFUktBUlRFLCB0aGlzX3BsYXllcigpICkgKQorICAgICAgICBuIC09IG9iLT5RdWVyeVByb3AoIFBfQU1PVU5UICk7CisKKyAgICBpZiAoIChnZWJ1ZWhyID0gdG9faW50KCAoMTAwMDAwIC0gZ3V0aGFiZW4pICogMS4xICsgMC41ICkpIDwgbiApCisgICAgICAgIG4gPSBnZWJ1ZWhyOworCisgICAgZ2VidWVociA9IHRvX2ludCggbiAvIDExLjAgKyAwLjUgKTsKKyAgICBuIC09IGdlYnVlaHI7CisKKyAgICBpZiAoIG4gKyBnZWJ1ZWhyIDwgMTAwMCApCisgICAgICAgIHJldHVybiBub3RpZnlfZmFpbCggYnJlYWtfc3RyaW5nKCJNaXQgc28ga2xlaW5lbiBCZXRyYWVnZW4gZmFuZ2VuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpciBlcnN0IGdhciBuaWNodCBhbi4gRHUgbXVzc3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Nob24gbWluZGVzdGVucyAxMDAwICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk11ZW56ZW4gZWluemFobGVuLiIsIDc4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVyIFNjaGFsdGVyYmVhbXRlIGdydW1tZWx0OiAiKSApLCAwOworCisgICAgaWYgKCBvYmplY3RwKG9iKSApeworICAgICAgICB3cml0ZSggIkR1IHplaWdzdCBEZWluZSBHZWxka2FydGUga3VyeiB2b3IuXG4iICk7CisgICAgICAgIC8vIG5vdHdlbmRpZywgZGEgc29uc3QgZGFzIEdlbGQgZXZ0bC4gdm9uIGRlciBLYXJ0ZSBzZWxiZXIgYWJnZWJ1Y2h0CisgICAgICAgIC8vIHdpcmQsIGZhbGxzIHNpZSBhbHMgb2JlcnN0ZXMgaW0gSW52IHN0ZWh0CisgICAgICAgIHRoaXNfcGxheWVyKCktPlNldCggS09OVE8sIDAsIEZfVkFMVUUgKTsKKyAgICB9CisKKyAgICB0aGlzX3BsYXllcigpLT5BZGRNb25leSggLShuICsgZ2VidWVocikgKTsKKyAgICBaRU5UUkFMQkFOSy0+UGF5SW4oIGdlYnVlaHIgKTsKKyAgICB0aGlzX3BsYXllcigpLT5TZXQoIEtPTlRPLCBndXRoYWJlbiArIG4sIEZfVkFMVUUgKTsKKworICAgIHdyaXRlKCBicmVha19zdHJpbmcoICJEdSB6YWhsc3QgIiArIHRvX3N0cmluZyhuK2dlYnVlaHIpICsgIiBNdWVuemVuIGVpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInVuZCBlcmhvZWhzdCBEZWluIEd1dGhhYmVuIGRhbWl0IGF1ZiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICB0b19zdHJpbmcoX2d1dGhhYmVuKCkpICsgIiBNdWVuemVuIGluc2dlc2FtdC4iLCA3OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRGVyIFNjaGFsdGVyYmVhbXRlIHNhZ3Q6ICIgKSApOworICAgIAorICAgIHJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQgX2thdWZlbiggc3RyaW5nIHN0ciApCit7CisgICAgaWYgKCAhdGhpc19pbnRlcmFjdGl2ZSgpIHx8IHRoaXNfcGxheWVyKCkgIT0gdGhpc19pbnRlcmFjdGl2ZSgpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIHN0ciAhPSAiZ2VsZGthcnRlIiAmJiBzdHIgIT0gImthcnRlIiAmJiBzdHIgIT0gImNhcmQiICYmCisgICAgICAgICBzdHIgIT0gInNlZXJjYXJkIiAmJiBzdHIgIT0gInNlZXItY2FyZCIgKQorICAgICAgICByZXR1cm4gbm90aWZ5X2ZhaWwoICJTeW50YXg6IGthdWZlIGdlbGRrYXJ0ZVxuIiApLCAwOworCisgICAgaWYgKCAhSVNfU0VFUih0aGlzX3BsYXllcigpKSApCisgICAgICAgIHJldHVybiBub3RpZnlfZmFpbCggYnJlYWtfc3RyaW5nKCJXZXJkIGRvY2ggZXJzdG1hbCBTZWhlci4iLCA3OCwgIkRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTY2hhbHRlcmJlYW10ZSBncmluc3QgdWViZXJoZWJsaWNoOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKSwgMDsKKworICAgIGlmICggdGhpc19wbGF5ZXIoKS0+UXVlcnlNb25leSgpIDwgMTAwMDAgKQorICAgICAgICByZXR1cm4gbm90aWZ5X2ZhaWwoIGJyZWFrX3N0cmluZygiRHUgaGFzdCBuaWNodCBnZW51ZyBHZWxkIGJlaSEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OCwgIkRlciBTY2hhbHRlcmJlYW10ZSBmYXVjaHQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGljaCBhbjogIikgKSwgMDsKKworICAgIG9iamVjdCBvYiA9IGNsb25lX29iamVjdCggU0VIRVJLQVJURSApOyAKKyAgICB0aGlzX3BsYXllcigpLT5BZGRNb25leSgtMTAwMDApOworICAgIFpFTlRSQUxCQU5LLT5QYXlJbigxMDAwMCk7CisgICAgCisgICAgaWYgKCBvYi0+bW92ZSggdGhpc19wbGF5ZXIoKSwgTV9HSVZFICkgIT0gMSApeworICAgICAgICB3cml0ZSggIkRlciBTY2hhbHRlcmJlYW10ZSBncnVtbWVsdDogRHUga2FubnN0IGRpZSBHZWxka2FydGUgbmljaHQgIgorICAgICAgICAgICAgICAgIm1laHIgdHJhZ2VuLlxuRGVyIFNjaGFsdGVyYmVhbXRlIHdpcmZ0IERpciBEZWluZSBTZWVyLUNhcmQgIgorICAgICAgICAgICAgICAgIihUTSkgdmVyYWVjaHRsaWNoIHZvciBkaWUgRnVlc3NlLlxuIiApOworICAgICAgICAvLyB0cm90emRlbSBlaW5tYWwgaW4ncyBJbnYgZGVzIFNwaWVsZXJzIGJld2VnZW4sIGRhbWl0IGRpZSBLYXJ0ZQorICAgICAgICAvLyBhdWYgc2VpbmVuIE5hbWVuIHJlZ2lzdHJpZXJ0IHdpcmQKKyAgICAgICAgb2ItPm1vdmUoIHRoaXNfcGxheWVyKCksIE1fR0lWRXxNX05PQ0hFQ0sgKTsKKyAgICAgICAgLy8gZGFubiBhdWYgZGVuIEJvZGVuIGxlZ2VuCisgICAgICAgIG9iLT5tb3ZlKCB0aGlzX29iamVjdCgpLCBNX1BVVCApOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHdyaXRlKCAiRGVyIEJlYW10ZSBoYWVuZGlndCBEaXIgZWluZSBTZWVyLUNhcmQgKFRNKSBhdXMuXG4iICk7CisKKyAgICB3cml0ZSggYnJlYWtfc3RyaW5nKCAiRGVyIFNjaGFsdGVyYmVhbXRlIG1hY2h0IERpY2ggbm9jaCBkYXJhdWYgIgorICAgICAgImF1Zm1lcmtzYW0sIGRhc3MgRGVpbmUgU2Vlci1DYXJkIChUTSkgaW1tZXIgZXJzdCBkYW5uIGFscyAiCisgICAgICAiWmFobHVuZ3NtaXR0ZWwgaW4gQW5zcHJ1Y2ggZ2Vub21tZW4gd2lyZCwgd2VubiBEZWluZSBpbiBCb2Vyc2VuIG9kZXIgIgorICAgICAgImluIGtsaW5nZW5kZXIgTXVlbnplIG1pdGdlZnVlaHJ0ZSBCYXJzY2hhZnQgYXVmZ2VicmF1Y2h0IHNlaW4gIgorICAgICAgInNvbGx0ZSAtIGVnYWwsIHdhcyBkYXZvbiBzaWNoIG9iZW4gaW0gSW52ZW50YXIgYmVmaW5kZXQuXG4iCisgICAgICAiV2FzIGltbWVyIGRhcyBhdWNoIGhlaXNzZW4gc29sbC4iLCA3OCwgMCwgQlNfTEVBVkVfTVlfTEZTICkgKTsKKworICAgIHRoaXNfcGxheWVyKCktPlNldCggS09OVE8sIFNBVkUsIEZfTU9ERV9BUyApOworCisgICAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc2VoZXJiYW5rLmMgYi9kL3NlaGVyL2hhZXVzZXIvc2VoZXJiYW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0NzI2NQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zZWhlcmJhbmsuYwpAQCAtMCwwICsxLDE3NSBAQAorI2luY2x1ZGUgPG1vdmluZy5oPgorI2luY2x1ZGUgPGRlZmluZXMuaD4KKyNpbmNsdWRlIDxyb29tcy5oPgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlICJxdWV1ZS5oIgorI2luY2x1ZGUgImhhdXMuaCIKKworaW5oZXJpdCAiL3N0ZC9yb29tIjsKKworY3JlYXRlKCkKK3sKKyAgICBvYmplY3QgcTsKKyAgICAKKyAgICA6OmNyZWF0ZSgpOworICAgIAorICAgIFNldFByb3AoIFBfSU5ET09SUywgMSApOworICAgIFNldFByb3AoIFBfTElHSFQsIDEgKTsKKyAgICBTZXRQcm9wKCBQX0lOVF9TSE9SVCwgIkluIGRlciBNb3JnZW5HcmF1ZW4tQmFuayIgKTsKKyAgICBTZXRQcm9wKCBQX0lOVF9MT05HLAorICAgICAgICAgICAgIGJyZWFrX3N0cmluZyggIkR1bmtsZSBTY2hhdHRlbiBlcmZ1ZWxsZW4gZGllc2VuIFJhdW0sIG51ciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NoZW1lbmhhZnQga2FubnN0IER1IGVpbmlnZSBTY2hsYW5nZW4gc293aWUgZWluZW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uc3N0YW5kIGVya2VubmVuLiBEdSBiZWdpbm5zdCB6dSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVncmVpZmVuOlxuRHUgYmVmaW5kZXN0IERpY2ggaW4gZGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3JnZW5HcmF1ZW4tQmFuaywgZGVyICdCYW5rIGluIElocmVtIFJ1ZWNrZW4nLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlbm4gRHUgU2VoZXIgb2RlciBTZWhlcmluIGJpc3QsIGthbm5zdCBEdSBoaWVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaW5lbiBCYXVzcGFydmVydHJhZyBmdWVyIGVpbiBTZWhlcmhhdXMgZXJ3ZXJiZW4sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYXRlbiBmdWVyIGVpbmVuIGxhdWZlbmRlbiBCYXVzcGFydmVydHJhZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWluemFobGVuIHVuZCBlaW4gYWJiZXphaGx0ZXMgSGF1cyBhYmhvbGVuLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXVzc2VyZGVtIGthbm5zdCBEdSBoaWVyIEdlbGRrYXJ0ZW4gZXJ3ZXJiZW4gdW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWluIEtvbnRvIGF1ZmZ1ZWxsZW4uIERhenUgbXVzc3QgRHUgRGljaCBudXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInp1IGRlbiBlbnRzcHJlY2hlbmRlbiBTY2hhbHRlcm4gYmVnZWJlbi4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hY2ggU3VlZGVuIGthbm5zdCBEdSBkaWUgQmFuayB3aWVkZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcmxhc3Nlbi5cbiIsIDc4LCAwLCBCU19MRUFWRV9NWV9MRlMgKSApOworICAgIAorICAgIEFkZERldGFpbCggKHsgIndhbmQiLCAid2FlbmRlIiB9KSwKKyAgICAgICAgICAgICAgICJBbiBkZW4gV2FlbmRlbiB0cmVpYmVuIGRpZSBTY2hhdHRlbiB1bmhlaW1saWNoZSAiCisgICAgICAgICAgICAgICAiU3BpZWxjaGVuLlxuIiApOworICAgIEFkZERldGFpbCggKHsgImJvZGVuIiB9KSwKKyAgICAgICAgICAgICAgICJEZXIgQm9kZW4gaXN0IHNjaHdhcnogd2llIGRpZSBOYWNodC5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJkZWNrZSIgfSksCisgICAgICAgICAgICAgICAiU2NobGVpbWlnZSBGYWVkZW4gc2NoZWluZW4gdm9uIGRlciBkdW5rbGVuIERlY2tlICIKKyAgICAgICAgICAgICAgICJ6dSBoYWVuZ2VuLlxuIiApOworICAgIEFkZERldGFpbCggKHsgInNjaGF0dGVuIiB9KSwKKyAgICAgICAgICAgICAgICJEaWUgU2NoYXR0ZW4gZXJmdWVsbGVuIGRlbiBnYW56ZW4gUmF1bSB1bmQgbGFzc2VuICIKKyAgICAgICAgICAgICAgICJEaWNoIG51ciBzY2hlbWVuaGFmdGUgRGV0YWlsc1xuZXJibGlja2VuLlxuIiApOworICAgIEFkZERldGFpbCggKHsgImRldGFpbHMiLCAic2NoZW1lbiIgfSksCisgICAgICAgICAgICAgICAiRWluIEluZm9ybWF0aW9uc3N0YW5kIHNvd2llIHZpZXIgU2NobGFuZ2VuIHZvbiAiCisgICAgICAgICAgICAgICAiTGV1dGVuIHNpbmQgYWxzIFNjaGVtZW4gaW5cbmRlbiBTY2hhdHRlbiBlcmtlbm5iYXIuXG4iICk7CisgICAgQWRkRGV0YWlsKCAoeyAic2NobGVpbSIsICJmYWVkZW4iLCAic2NobGVpbWZhZWRlbiIgfSksCisgICAgICAgICAgICAgICAiRGllIFNjaGxlaW1mYWVkZW4gaGFlbmdlbiB2b24gZGVyIERlY2tlIHVuZCBkcm9oZW4gRGlyIGF1ZiAiCisgICAgICAgICAgICAgICAiZGVuIEtvcGYgenVcbnRyb3BmZW4uIEVpbiBGcm9lc3RlbG4gc2NodWV0dGVsdCBEaWNoLlxuIiApOworICAgIEFkZERldGFpbCggKHsgInNjaGFsdGVyIiB9KSwKKyAgICAgICAgICAgICAgIGJyZWFrX3N0cmluZyggIlZvciBkZW4gU2NoYWx0ZXJuIHN0ZWhlbiBsYW5nZSBTY2hsYW5nZW4gdm9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxldXRlbiwgZGllIGF1Y2ggZ2VybmUgZWluIEhhdXMgaGFldHRlbi4gRXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2lidCBlaW5lbiBBbnRyYWdzc2NoYWx0ZXIsIGVpbmVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhdGVuemFobHVuZ3NzY2hhbHRlciwgZWluZW4gQXVzZ2FiZXNjaGFsdGVyIHVuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaW5lbiBHZWxka2FydGVuc2NoYWx0ZXIuIFZvciBqZWRlbSBTY2hhbHRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGVodCBlaW5lIFNjaGxhbmdlIHZvbiBtZWhyIG9kZXIgd2VuaWdlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZWR1bGRpZyB3YXJ0ZW5kZW4gTGV1dGVuLiBEdSB3aXJzdCBEaWNoIHdvaGwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5zdGVsbGVuIG11ZXNzZW4uLi4iLCA3OCApICk7CisgICAgQWRkRGV0YWlsKCAoeyAic3RhbmQiLCAiaW5mb3JtYXRpb25zc3RhbmQiIH0pLAorICAgICAgICAgICAgICAgIkhpZXIga2FubnN0IER1IGZ1ZXIgZGVuIHVudmVyc2NoYWVtdGVuIFByZWlzIHZvbiAxMDAwMCAiCisgICAgICAgICAgICAgICAiTXVlbnplbiBkaWUgS29tbWVuLVxudGFyZSB6dW0gQmF1c3BhcnZlcnRyYWcgZXJ3ZXJiZW4uICIKKyAgICAgICAgICAgICAgICJEYXMgZ2VodCBtaXQgJ2thdWZlIGtvbW1lbnRhcicsIGlzdCBhYmVyXG4iCisgICAgICAgICAgICAgICAiYW5nZXNpY2h0cyBkZXMgaG9oZW4gUHJlaXNlcyBmYXN0IG5pY2h0IGFuenVyYXRlbi5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJhdXNnYWJlc2NoYWx0ZXIiLCAiaGF1c2F1c2dhYmVzY2hhbHRlciIsICJoYXVzYXVzZ2FiZSIgfSksCisgICAgICAgICAgICAgICAiV2VubiBEdSBhbGxlIFJhdGVuIGZ1ZXIgRGVpbiBIYXVzIGVpbmdlemFobHQgaGFzdCwga2FubnN0ICIKKyAgICAgICAgICAgICAgICJEdSBlcyBoaWVyIGFiLVxuaG9sZW4gdW5kIG1pdG5laG1lbi4gRGFmdWVyIG11c3N0IER1IERpY2ggIgorICAgICAgICAgICAgICAgImFuIGRpZSBIYXVzYXVzZ2FiZXNjaGxhbmdlIGFuLVxuc3RlbGxlbi5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJyYXRlbnNjaGFsdGVyIiwgInJhdGVuemFobHVuZ3NzY2hhbHRlciIgfSksCisgICAgICAgICAgICAgICAiSGllciBrYW5uc3QgRHUgZGllIFJhdGVuIGZ1ZXIgRGVpbiBTZWhlcmhhdXMgZWluemFobGVuLiAiCisgICAgICAgICAgICAgICAiRHUgd2lyc3QgRGljaFxuYWJlciBlcnN0IGFuIGRpZSBaYWhsdW5nc3NjaGxhbmdlIGFuc3RlbGxlbiAiCisgICAgICAgICAgICAgICAibXVlc3Nlbi5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJhbnRyYWdzc2NoYWx0ZXIiIH0pLAorICAgICAgICAgICAgICAgIkFuIGRpZXNlbSBTY2hhbHRlciBrYW5uc3QgRHUgZWluZW4gQmF1c3BhcnZlcnRyYWcgYmVhbnRyYWdlbi4gIgorICAgICAgICAgICAgICAgIlN0ZWxsIERpY2hcbmRhenUgYW4gZGllIEFudHJhZ3NzY2hsYW5nZSBhbi5cbiIgKTsKKyAgICBBZGREZXRhaWwoICh7ICJnZWxka2FydGVuc2NoYWx0ZXIiLCAia2FydGVuc2NoYWx0ZXIiIH0pLAorICAgICAgICAgICAgICAgYnJlYWtfc3RyaW5nKCAiQW0gR2VsZGthcnRlbnNjaGFsdGVyIGthbm5zdCBEdSBkaWUgYmVydWVobXRlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZXItQ2FyZCAoVE0pIGVyd2VyYmVuIHVuZCBEZWluIEd1dGhhYmVua29udG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXVmZnVlbGxlbi4gQWxsZXJkaW5ncyBoYWJlbiBkYXMgYXVjaCBub2NoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZGVyZSBMZXV0ZSB2b3IgLSBEdSB3aXJzdCBEaWNoIGFsc28gYnJhdiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoaW50ZW4gYW4gZGllIEdlbGRrYXJ0ZW5zY2hsYW5nZSBhbnN0ZWxsZW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVlc3Nlbi4iLCA3OCApICk7CisKKyAgICBxPUFkZEl0ZW0oIFBBVEgrInF1ZXVlIiwgUkVGUkVTSF9OT05FLAorICAgICAgICAgICAgICAgKFsgUF9TSE9SVCA6ICJFaW5lIFNjaGxhbmdlIHZvciBkZW0gR2VsZGthcnRlbnNjaGFsdGVyIiwKKyAgICAgICAgICAgICAgICBQX0xPTkcgOiAiRGllIFNlZXItQ2FyZCAoVE0pIG11c3MgamEgd2lya2xpY2ggYmVnZWhydCBzZWluLiAiCisgICAgICAgICAgICAgICAgIlp1bWluZGVzdCBzdGVoZW4gbWVocmVyZVxuTGV1dGUgYW4gZGVyIFNjaGxhbmdlIHp1bSAiCisgICAgICAgICAgICAgICAgIkdlbGRrYXJ0ZW5zY2hhbHRlciBhbi5cbiIKKyAgICAgICAgICAgICAgICAiU3ludGF4OiAnc3RlbGwgYW4ga2FydGVuc2NobGFuZ2UgYW4nLlxuIiwKKyAgICAgICAgICAgICAgICBQX0lOVF9TSE9SVCA6ICJJbiBkZXIgU2NobGFuZ2Ugdm9yIGRlbSBHZWxka2FydGVuc2NoYWx0ZXIiLAorICAgICAgICAgICAgICAgIFBfSU5UX0xPTkcgOiAiRHUgc3RlaHQgaW4gZGVyIGxhbmdlbiBTY2hsYW5nZSB2b3IgZGVtICIKKyAgICAgICAgICAgICAgICAiR2VsZGthcnRlbnNjaGFsdGVyLiBXZW5pZ3N0ZW5zIGdlaHRcbmVzIGhhbGJ3ZWdzIGZsb3R0ICIKKyAgICAgICAgICAgICAgICAidm9yd2FlcnRzLlxuIiwKKyAgICAgICAgICAgICAgICBRX0xFTkdUSCA6IDcsCisgICAgICAgICAgICAgICAgUV9DWUNMRV9USU1FIDogOCwKKyAgICAgICAgICAgICAgICBRX1NVU1BFTkQgOiAxLAorICAgICAgICAgICAgICAgIFFfREVTVCA6IFBBVEgrInNjX3NjaGFsdGVyIgorICAgICAgICAgICAgICAgIF0pICk7CisKKyAgICBxLT5BZGRJZCggKHsiZ2VsZGthcnRlbnNjaGxhbmdlIiwgImthcnRlbnNjaGxhbmdlIn0pICk7CisKKyAgICBxPUFkZEl0ZW0oIFBBVEgrInF1ZXVlIiwgUkVGUkVTSF9OT05FLAorICAgICAgICAgICAgICAgKFsgUF9TSE9SVCA6ICJFaW5lIFNjaGxhbmdlIHZvciBkZW0gSGF1c2F1c2dhYmVzY2hhbHRlciIsCisgICAgICAgICAgICAgICAgUF9MT05HICA6ICJJbiBkaWVzZXIgU2NobGFuZ2Ugc3RlaGVuIExldXRlIHZvciBkZW0gIgorICAgICAgICAgICAgICAgICJIYXVzYXVzZ2FiZXNjaGFsdGVyIGFuLlxuIgorICAgICAgICAgICAgICAgICsiU3ludGF4OiAnc3RlbGwgYW4gYXVzZ2FiZXNjaGxhbmdlIGFuJy5cbiIsCisgICAgICAgICAgICAgICAgUF9JTlRfU0hPUlQgOiAiSW4gZGVyIFNjaGxhbmdlIHZvciBkZW0gSGF1c2F1c2dhYmVzY2hhbHRlciIsCisgICAgICAgICAgICAgICAgUF9JTlRfTE9ORyAgOiAiRHUgd2FydGVzdCB2b3IgZGVtIEhhdXNhdXNnYWJlc2NoYWx0ZXIuXG4iLAorICAgICAgICAgICAgICAgIFFfU1VTUEVORCA6IDEsCisgICAgICAgICAgICAgICAgUV9ERVNUIDogUEFUSCsic2JfYXVzZ2FiZSIKKyAgICAgICAgICAgICAgICBdKSApOworICAgIAorICAgIHEtPkFkZElkKCAoeyJoYXVzYXVzZ2FiZXNjaGxhbmdlIiwgImF1c2dhYmVzY2hsYW5nZSIgfSkgKTsKKworICAgIHE9QWRkSXRlbSggUEFUSCsicXVldWUiLCBSRUZSRVNIX05PTkUsCisgICAgICAgICAgICAgICAoWyBQX1NIT1JUIDogIkVpbmUgU2NobGFuZ2Ugdm9yIGRlbSBTY2hhbHRlciB6dXIgUmF0ZW56YWhsdW5nIiwKKyAgICAgICAgICAgICAgICBQX0xPTkcgIDogIldlbm4gRHUgZWluZSBSYXRlIGJlemFobGVuIHdpbGxzdCwgc29sbHRlc3QgRHUgIgorICAgICAgICAgICAgICAgICJEaWNoIGFuIGRpZXNlciBTY2hsYW5nZVxuYW5zdGVsbGVuLlxuIgorICAgICAgICAgICAgICAgICsiU3ludGF4OiAnc3RlbGwgYW4gcmF0ZW5zY2hsYW5nZSBhbicuXG4iLAorICAgICAgICAgICAgICAgIFBfSU5UX1NIT1JUIDogIkluIGRlciBTY2hsYW5nZSB2b3IgZGVtIFNjaGFsdGVyIHp1ciAiCisgICAgICAgICAgICAgICAgIlJhdGVuemFobHVuZyIsCisgICAgICAgICAgICAgICAgUF9JTlRfTE9ORyAgOiAiRHUgd3VuZGVyc3QgRGljaCBlaW4gd2VuaWcgdWViZXIgZGllICIKKyAgICAgICAgICAgICAgICAiTWFzc2VuIHBvdGVudGllbGxlciBSYXRlbnphaGxlci5cbiIsCisgICAgICAgICAgICAgICAgUV9MRU5HVEggOiA4LAorICAgICAgICAgICAgICAgIFFfQ1lDTEVfVElNRSA6IDEwLAorICAgICAgICAgICAgICAgIFFfREVTVCA6IFBBVEgrInNiX2VpbnphaGx1bmciLAorICAgICAgICAgICAgICAgIFFfU1VTUEVORCA6IDEKKyAgICAgICAgICAgICAgICBdKSApOworICAgIAorICAgIHEtPkFkZElkKCAoeyJyYXRlbnNjaGxhbmdlIiwgInJhdGVuemFobHVuZ3NzY2hsYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICJ6YWhsdW5nc3NjaGxhbmdlIiB9KSApOworCisgICAgcT1BZGRJdGVtKCBQQVRIKyJxdWV1ZSIsIFJFRlJFU0hfTk9ORSwKKyAgICAgICAgICAgICAgIChbIFBfU0hPUlQgOiAiRWluZSBTY2hsYW5nZSB2b3IgZGVtIEFudHJhZ3NzY2hhbHRlciIsCisgICAgICAgICAgICAgICAgUF9MT05HICA6ICJEaWUgTGV1dGUgaW4gZGllc2VyIFNjaGxhbmdlIHdvbGxlbiBhbGxlIGVpbiAiCisgICAgICAgICAgICAgICAgImVpZ2VuZXMgSGVpbS5cbiIKKyAgICAgICAgICAgICAgICArIlN5bnRheDogJ3N0ZWxsIGFuIGFudHJhZ3NzY2hsYW5nZSBhbicuXG4iLAorICAgICAgICAgICAgICAgIFBfSU5UX1NIT1JUIDogIkluIGRlciBTY2hsYW5nZSB2b3IgZGVtIEFudHJhZ3NzY2hhbHRlciIsCisgICAgICAgICAgICAgICAgUF9JTlRfTE9ORyAgOiAiRHUgd2FydGVzdCBpbm1pdHRlbiBhbmRlcmVyIEFudHJhZ3NzdGVsbGVyICIKKyAgICAgICAgICAgICAgICAiZGFyYXVmLCBlbmRsaWNoIERlaW5lblxuQmF1c3BhcnZlcnRyYWcgYmVhbnRyYWdlbiB6dSAiCisgICAgICAgICAgICAgICAgImR1ZXJmZW4uXG4iLAorICAgICAgICAgICAgICAgIFFfTEVOR1RIIDogNSwKKyAgICAgICAgICAgICAgICBRX0NZQ0xFX1RJTUUgOiAyMCwKKyAgICAgICAgICAgICAgICBRX1NVU1BFTkQgOiAxLAorICAgICAgICAgICAgICAgIFFfREVTVCA6IFBBVEgrInNiX2FudHJhZyIKKyAgICAgICAgICAgICAgICBdKSApOworICAgIAorICAgIHEtPkFkZElkKCAoeyJhbnRyYWdzc2NobGFuZ2UifSkgKTsKKworICAgIEFkZEV4aXQoICJzdWVkZW4iLCAiL2QvZWJlbmUvcm9vbS9kcmFfc3RyMSIgKTsKKworICAgIEFkZENtZCggKHsgImthdWYiLCAia2F1ZmUiIH0pLCAia2F1ZmVuIiApOworfQorCitzdGF0aWMgaW50CitrYXVmZW4oc3RyaW5nIHN0cikKK3sKKyAgb2JqZWN0IHRwOworCisgIGlmICghc3RyIHx8IHN0ciAhPSAia29tbWVudGFyIikgeworICAgIG5vdGlmeV9mYWlsKCAiV2FzIHdpbGxzdCBEdSBrYXVmZW4/IEhpZXIgZ2lidCBlcyBudXIgS29tbWVudGFyZSFcbiIgKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHRwID0gdGhpc19wbGF5ZXIoKTsKKyAgaWYgKHRwLT5RdWVyeU1vbmV5KCk8MTAwMDApCisgICAgd3JpdGUoICJEdSBoYXN0IG5pY2h0IGdlbnVnIEdlbGQgZGFiZWkhXG4iICk7CisgIGVsc2UgeworICAgIGNsb25lX29iamVjdChQQVRIKyJrb21tZW50YXIiKS0+bW92ZSh0cCwgTV9OT0NIRUNLKTsKKyAgICB0cC0+QWRkTW9uZXkoLTEwMDAwKTsKKyAgICB3cml0ZSggIkR1IHphaGxzdCAxMDAwMCBNdWVuemVuIHVuZCBlcmhhZWx0c3QgZGFmdWVyIGVpbmVuIEtvbW1lbnRhci5cbiIgKTsKKyAgfQorICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS8wIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2NzllMQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS8wCkBAIC0wLDAgKzEsMTAgQEAKKzAuIE5FVUlHS0VJVEVOCistLS0tLS0tLS0tLS0tLQorCitIaWVyIGFrdHVlbGxlIEFlbmRlcnVuZ2VuIGRlciBTZWhlckZBUSAzLjAyIChTdGFuZCBKdWxpIDIwMDEpOgorCistIEVzIGdpYnQgendlaSBuZXVlIFBvcnRhbGUgKDM0IHVuZCAzNikKKworLSBEdXJjaCBlaW5lbiBSaXNzIGluIGRlbiBEaW1lbnNpb25lbiBpc3QgZGVyIFp1Z2FuZyB6dSBlaW5lcgorICBuZXVlbiBQYXJhbGVsbHdlbHQgbW9lZ2xpY2gKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzEgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY5YzNjCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzEKQEAgLTAsMCArMSw1NCBAQAorMS4gVFJBTlNQT1JUTU9FR0xJQ0hLRUlURU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHMgU2VoZXIga2FubnN0IER1IG51bm1laHIgYXVmIGVpbmlnZSBuZXVlIEZvcnRiZXdlZ3VuZ3Ntb2VnbGljaGtlaXRlbgorenVncmVpZmVuLCB1bSBzY2huZWxsZXIgdm9uIGVpbmVtIE9ydCB6dW0gYW5kZXJlbiB6dSBnZWxhbmdlbjoKKworYSkgU2VoZXJwb3J0YWxlCistLS0tLS0tLS0tLS0tLS0KKworQWxzIFNlaGVyIGthbm5zdCBEdSBhYiBzb2ZvcnQgbWFnaXNjaGUgUG9ydGFsZSBudXR6ZW4sIHVtIHNjaG5lbGxlcgordm9uIGVpbmVtIE9ydCB6dW0gYW5kZXJlbiB6dSBnZWxhbmdlbi4gRXMgZ2lidCBpbSBNb21lbnQgMzMgVG9yZSwKK2RpZSBEdSBtaXQgZGVtIEJlZmVobCB0ZWxlcG9ydGllcmUgYmVudXR6ZW4ga2FubnN0LiBadXIgVmVyZnVlZ3VuZworc3RlaGVuIERpciBkYW5uIG1vbWVudGFuIGZvbGdlbmRlIE1vZWdsaWNoa2VpdGVuICh3ZW5uIGR1IGFsbGUgUG9ydGFsZSBoYXN0KToKKworICAwLiBuaWNodCB0ZWxlcG9ydGllcmVuICAgICAgICAgICAgICAgICAgMS4gVGFtaWJhciwgRGFyaWJpLURvcmYgKDEwIEtQKQorICAyLiBEcmFjaGVuemlubmVuICAgICAgICAgICAgICAgICAgICAgICAgMy4gUG9ydCBWYWluZXIgU3RhZHR0b3IKKyAgNC4gQW4gZWluZW0gQmFjaCBpbSBHZWJpcmdlICAgICAgICAgICAgIDUuIFBvbGFyZ2ViaWV0CisgIDYuIFR1bmRyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LiBEaWUgRmVlbnN0cmFzc2UKKyAgOC4gV2FsZHdlZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuIEVpbmUgUnVpbmVuc3RhZHQKKyAxMC4gVm9ycGxhdHogdm9yIGRlciBBcmVuYSAgICAgICAgICAgICAgMTEuIEtsaXBwZW5wZmFkIGF1ZiBBdXJvcmEgKDEwIEtQKQorIDEyLiBTdm9sdmFlciAoMTAgS1ApICAgICAgICAgICAgICAgICAgICAxMy4gSW0gQmVyZ2RvcmYKKyAxNC4gVm9ycGxhdHogZGVyIFRyYXVrYXBlbGxlICAgICAgICAgICAgMTUuIExhc2gKKyAxNi4gRHNjaHVuZ2VsICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcuIFVlYmVyIGRlbiBXb2xrZW4KKyAxOC4gQW0gRmx1c3MgVGFpbiBXZW4gVGFpICAgICAgICAgICAgICAgMTkuIFJpdHRlcmRlbmttYWwgYmVpIE9ya2hhdXNlbgorIDIwLiBSb2RlbGJhaG4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMS4gSG9iYml0ZG9yZgorIDIyLiBFaW4gdGllZmVyIFdhbGQgKDEwIEtQKSAgICAgICAgICAgICAyMy4gVWViZXIgZGVtIFNjaGFjaHQKKyAyNC4gQW0gRW5kZSBkZXIgV2VsdCAoMTAgS1ApICAgICAgICAgICAgMjUuIEFtIEZyaWVkaG9mCisgMjYuIFVudGVyIFNoYWt5IElzbGFuZCAoMTAgS1ApICAgICAgICAgIDI3LiBJbiBkZXIgTmFlaGUgZGVyIEZlc3R1bmcKKyAyOC4gVG9ydHVnYXMgTGV1Y2h0dHVybSAoMTAgS1ApICAgICAgICAgMjkuIEthdHptYW5kdQorIDMwLiBJbiBlaW5lciBIb2VobGUgZGVyIFJpZXNlbmluc2VsICAgICAzMS4gQXVmIGVpbmVtIGtsZWluZW4gQmVyZ3BmYWQKKyAzMi4gUG9ydGFscmF1bSAgICAgICAgICAgICAgICAgICAgICAgICAgMzMuIEluIGRlciBOYWVoZSB2b24gVW1qYWsKKyAzNC4gRWluIEZlbHNlbiBhbSBCYWNoICAgICAgICAgICAgICAgICAgMzYuIElubnVpdC1TaWVkbHVuZworIDM3LiBCZWkgZGVuIFdlcndvZWxmZW4gICAgICAgICAgICAgICAgICAzOC4gTm9yZHN0cmFuZCB2b24gS3J5bGFpb3MKKyAzOS4gQmVpIGVpbmVtIHNjaHdhcnplbiBGZWxzZW4gICAgICAgICAgNDAuIERlciBBYmdydW5kIGRlcyBab3JucworCitEYXMgQmVudXR6ZW4gZGVyIFBvcnRhbGUgc2V0enQgYWxsZXJkaW5ncyB2b3JhdXMsIGRhc3MgRHUgZGllc2UgUG9ydGFsZQorYmVyZWl0cyBnZWZ1bmRlbiBoYXN0LiBEdSBtdXNzdCBkaWUgUG9ydGFsZSBhbHNvIHp1bmFlY2hzdCBlaW5tYWwKK3N1Y2hlbi4KK0VpbmlnZSBQb3J0YWxlIGF1ZiBkZW4gSW5zZWxuIGtvc3RlbiBLUHMsIGRpZSBtZWlzdGVuIGplZG9jaCBuaWNodHMuCitEYSBkYW5hY2ggaW1tZXIgd2llZGVyIGdlZnJhZ3Qgd2lyZDogTmF0dWVybGljaCBrYW5uIG1hbiBkaWUgUG9ydGFsZSBudXIKK2JlbnV0emVuLCB3ZW5uIG1hbiBzaWNoIGdlcmFkZSBiZWkgZWluZW0gYmVmaW5kZXQuCisKKworYikgU2llYmVubWVpbGVuc3RpZWZlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEaWVzZSBrYW5uIG1hbiBpbSBTZWhlcmxhZGVuIGthdWZlbi4gU2llIGhhYmVuIGRpZSBFaWdlbnNjaGFmdCwKK2locmVuIFRyYWVnZXIgaW1tZXIgYmlzIHp1ciBuYWVjaHN0ZW4gS3JldXp1bmcgd2VpdGVyenV0cmFnZW4sIHdhcyBiZWkKK2xhbmdlbiBXZWdlbiBzaW5udm9sbCBzZWluIGthbm4sIGluIHZpZWxlbiBHZWdlbmRlbiBqZWRvY2ggbmljaHQKK2Z1bmt0aW9uaWVydCwgd2VpbCBpbiBqZWRlbSBSYXVtIG1laHIgYWxzIHp3ZWkgQXVzZ2FlbmdlIHZvcmtvbW1lbi4KK0F1c3NlcmRlbSBpc3QgZGFzIEdhbnplIGV4dHJlbSBnZXdvZWhudW5nc2JlZHVlcmZ0aWcsIGRhIG1hbiBiZWthbm50ZQorV2VnZSBqZXR6dCBtaXQgZ2FueiBhbmRlcmVuIFRhc3RlbmtvbWJpbmF0aW9uZW4gYWJnZWh0LCBhbHMgd2VubiBtYW4gZGllCitXZWdlIGVpbmZhY2ggd2llIGdld29obnQgJ3J1bnRlcnJhdHRlcnQnLiBFaW5mYWNoIG1hbCBhdXN0ZXN0ZW4sCitsdXN0aWcgaXN0cyBhbGxlbWFsLgpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzEwIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZmZiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTAKQEAgLTAsMCArMSw0MiBAQAorMTAuIFBBUkFMTEVMRElNRU5TSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2Fyc2NoZWlubGljaCBoYXN0IER1IHNjaG9uIGltbWVyIGdlZGFjaHQ6ICdFaW5lIFdlbHQgamVuc2VpdHMgZGVzCitNb3JnZW5HcmF1ZW5zIGdpYnQgZXMgZ2VuYXVzb3dlbmlnIHdpZSBHZWhlaW1idWVuZGUhJworTnVuLCBiZXp1ZWdsaWNoIGRlciBHZWhlaW1idWVuZGUga29lbm50ZSBkYXMgenV0cmVmZmVuLCB1bmQgbmF0dWVybGljaAorc29sbHN0IER1IGF1Y2gga2VpbmUgV2VsdCBoYWJlbiBuZWJlbiBkZW0gTW9yZ2VuR3JhdWVuLCBhYmVyIGVzIGdpYnQKK2ltIE1VRCBlaW5lIFdlbHQsIGRpZSBudXIgU2VoZXIgYmV0cmV0ZW4ga29lbm5lbjoKKworRGllIFBhcmFsbGVsZGltZW5zaW9uCisKK0RpZSBQYXJhbGxlbHdlbHQgaXN0IGltIFByaW56aXAgZGllIGdlbmF1IGdsZWljaGUgV2VsdCB3aWUgZGFzCisnbm9ybWFsZScgTW9yZ2VuZ3JhdWVuLCBtaXQgZGVtIFVudGVyc2NoaWVkLCBkYXNzIGFuIGJlc3RpbW10ZW4gU3RlbGxlbiwKK2FuIGRlbmVuIGluIGRlciAnTm9ybWFsd2VsdCcga2VpbmUgTlBDcyBzdGVoZW4sIG5ldWUgb2RlciBlYmVuIGFuZGVyZQorTW9uc3RlciBzdGVoZW4uIEluIGdhbnogc2VsdGVuZW4gRmFlbGxlbiAobGVpZGVyKSBpc3Qgc29nYXIgZGllIFJhdW0tCitiZXNjaHJlaWJ1bmcgaW4gZGVyIFBhcmFsbGVsd2VsdCBhbmRlcnMgYWxzIGluIGRlciBub3JtYWxlbiBXZWx0LgorCitCZWlzcGllbGUgZnVlciB1bnRlcnNjaGllZGxpY2hlIFJhZXVtZSBpbiBkZXIgUGFyYWxsZWx3ZWx0IHNpbmQgei5CLjoKKworLSBEcmFjaGVuc2NoaWxka3JvZXRlICh3LG4sbix3LHcgdm9tIFNhbmR0aWdlcikKKy0gV2VnaGllciAoTGljaHR1bmcgaW0gR3JpbW1zd2FsZCwgZGEsIHdvIGluIGRlciBOb3JtYWx3ZWx0IGRpZSBGJkUgaXN0KQorCitNb21lbnRhbiBpc3QgZGllIFBhcmFsbGVsZGltZW5zaW9uIHNjaG9uIGVpbmUgcmVsYXRpdiBncm9zc2UgV2VsdCwgZGllCithdWNoIHN0YWVuZGlnIHdhZWNoc3QuIEZ1ZXIga2xlaW5lcmUgU2VoZXIgaXN0IHNpZSB2aWVsbGVpY2h0IHp1IGhhcnQsCithbSBBbmZhbmcga29lbm5lbiBzaWUgc2ljaCBhYmVyIHouQi4gaW0gUGFyYWdvYmxpbmxhZ2VyIGJlaSBQb3J0IFZhaW4KK2F1c3RvYmVuLiBGdWVyIGRpZSBob2VoZXJlbiBTZWhlciBzaW5kIGVoZXIgc29sY2hlIFNhY2hlbiB3aWUgZGVyCitXZWdoaWVyIG9kZXIgZGllIFBhcmFncnVmdCB2b3IgZGVyIFBvbGFyd3Vlc3RlIGludGVyZXNzYW50LgorCitCZXRyZXRlbiBrYW5uIG1hbiBhbHMgU2VoZXIgZGllIFBhcmFsbGVsd2VsdCBhbSBlaW5mYWNoc3RlbiB1bmQKK3NpY2hlcnN0ZW4gdWViZXIgZGFzIFBvcnRhbCBpbSBvYmVyc3RlbiBHZXNjaG9zcyB2b24gTWlyaWxzIFR1cm0KKyhFYmVuZSBiZWkgRHJhY2hlbmhvcnQpCitBbGxlcmRpbmdzIHRyYW5zcG9ydGllcnQgZGFzIFBvcnRhbCBudXIgenUgOTglIFdhaHJzY2hlaW5saWNoa2VpdCwgdW5kCittYW4gc29sbHRlIGF1ZnBhc3NlbiwgZGEgZG9ydCBpbiBkZXIgTmFlaGUgZGllIFNlaGVyLVJhZXViZXIgdm9uIFJvY2h1cworaW0gR2VidWVzY2ggc2l0emVuLCBkaWUgZWluZW4gc2NobmVsbCB6dSBzaWNoIGdlem9nZW4gaGFiZW4sIGRvcnQga29tbXQKK21hbiBkYW5uIG51ciBub2NoIHJhdXMsIGluZGVtIG1hbiBkYXMgR2VsZCBhYmdpYnQgb2RlciBrYWVtcGZ0IDopCitBdXNzZXJkZW0gc3RlaHQgaW4gZGVyIFBhcmF3ZWx0IGFtIFBvcnRhbCAyIChkYXMgaXN0IGRhcyBuYWVjaHN0ZSBiZWkKK01pcmlscyBUdXJtKSBkZXIgc29nZW5hbm50ZSBIdW9ybiwgZGFzIGlzdCBlaW4gQmF1bSwgZGVyIGVpbmVtIFNhY2hlbgora2xhdXQgKGJvZXNlIHp1IFBhdHJ5biBydWViZXJzY2hpZWwgOikpIERlc2hhbGIgc29sbHRlIG1hbiBkYSBhdWNoIGF1ZnBhc3Nlbi4KKworR2VydWVjaHRlbiB6dWZvbGdlIHNvbGwgZXMgbWl0dGxlcndlaWxlIHNvZ2FyIGVpbmVuIG5ldWVuIFJpc3MgaW4gZGVuCitEaW1lbnNpb25lbiBnZWJlbiwgZGVyIFp1dHJpdHQgenUgZWluZXIgdmllbGxlaWNodCBub2NoIGdlZmFlaHJsaWNoZXJlbgorV2VsdCBlcm1vZWdsaWNodC4KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS8xMSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS8xMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzVmYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzExCkBAIC0wLDAgKzEsMTMgQEAKKzExLiBQYXJhLVBvcnRhbCA4CistLS0tLS0tLS0tLS0tLS0tLQorCitWaWVsZSB3ZXJkZW4gc2ljaCBqZXR6dCB2aWVsbGVpY2h0IGZyYWdlbjogV2FydW0gd2lkbWV0IG1hbiBlaW5lbQorZWluZmFjaGVuIE1hZ2lzY2hlbiBQb3J0YWwgZWluIGdhbnplcyBVbnRlcmthcGl0ZWwsIGFiZXIgZXMgaXN0IG1laW5lcgorQW5zaWNodCBuYWNoIG5vdHdlbmRpZy4gRGFzIFBvcnRhbCA4IGlzdCBkYXMgYmlzIGpldHp0IGVpbnppZ2UgUG9ydGFsLCBkYXMKK2luIGRlciBQYXJhd2VsdCBhbmRlcnMgaXN0IGFscyBpbiBkZXIgTm9ybWFsd2VsdC4gRXMgaGF0IGFuZGVyZSwgenVtCitncm9lc3N0ZW4gVGVpbCBuaWNodCB1bmdlZmFlaHJsaWNoZSwgWmllbGUgYWxzIGRhcyBpbiBkZXIgTm9ybWFsd2VsdC4KK1dlbGNoZSBaaWVsZSBkaWVzIG51biBzaW5kLCB2ZXJyYXRlIGljaCBuYXR1ZXJsaWNoIG5pY2h0LCBkYXMgc29sbHRldAoraWhyIHNjaG9uIHNlbGJzdCBoZXJhdXNiZWtvbW1lbiAoZW50d2VkZXIgZnJhZ3QgaWhyIGFuZGVyZSBTZWhlciwgb2RlcgorcHJvYmllcnQgZXMgIVNFSFIgdm9yc2ljaHRpZyEgYXVzKS4gSWhyIHNvbGx0ZXQgZXMgZXVjaCBhdWYgamVkZW4gRmFsbCBtYWwKK2Fuc2NoYXVlbiwgZGVubiBlcyBoYXQgYXVjaCBzZWluZSBndXRlbiBTZWl0ZW4uLi4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzEyIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NGZmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTIKQEAgLTAsMCArMSwxMyBAQAorMTIuIEZJTkdFUi1CRUZFSEwKKy0tLS0tLS0tLS0tLS0tLS0KKworV2VubiBEdSBlaW5tYWwgcHJvYmllcnN0LCBlaW5lbiBhbmRlcmVuIFNwaWVsZXIgenUgZmluZ2Vybiwgd2lyc3QgRHUKK2Zlc3RzdGVsbGVuLCBkYXNzIER1IG51biBlaW5pZ2UgenVzYWV0emxpY2hlIEluZm9ybWF0aW9uZW4KK2VyaGFlbHN0LCBiZWkgbm9ybWFsZW4gU3BpZWxlcm4gaWhyIEFsdGVyLCB1bmQgYmVpIFNlaGVybiAvIE1hZ2llcm4KK3p1c2FldHpsaWNoIGRpZSB1ZWJlciBQbGFuIHVuZCBQcm9qZWt0IGVpbmdlZ2ViZW5lbiBJbmZvcm1hdGlvbmVuLgorCitTbywgdW5kIHdlbm4gRHUgZGFubiBhdWNoIG9iZW5kcmVpbiBuaWNodCBhbGx6dSB6aW1wZXJsaWNoIGJpc3QsIHVuZAorZ2VybmUgTGV1dGUgRGljaCBmaW5nZXJuIGxhZXNzdCwgc28gd2lyc3QgRHUgbmF0dWVybGljaCBhdWNoIGVpbmVuIFBsYW4KK3VuZCBlaW4gUHJvamVrdCBpbiBEZWluZW0gJ2ZpbmdlcicgZWluc2V0emVuLiBEaWVzIGthbm5zdCBEdSBtaXQgSGlsZmUKK2RlcyBQbGFuZWRpdG9ycyBtYWNoZW4sIGRlbiBEdSBpbSBTZWhlcmxhZGVuIGVyaGFlbHN0LgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTMgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2MzgyNwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS8xMwpAQCAtMCwwICsxLDE3IEBACisxMy4gRUNITyAmIFItRU1PVEUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitTb2xsdGVzdCBEdSBpcmdlbmR3YW5uIGRpZSBRdWVzdCAiSGlsZiBkZW0gQXJjaGl0ZWt0ZW4iIGdlbG9lc3QgaGFiZW4KKyh3YXMgZHJpbmdlbmQgenUgZW1wZmVobGVuIGlzdCwgZGVubiBkYXMgaXN0IGRlZmluaXRpdiBlaW5lcyBkZXIgYmVzdGVuCitxdWVzdHMgaGllciwgSU1ITykgLSBkYW5uIHN0ZWh0IERpciBhbHMgU2VoZXIgaGludGVyaGVyIGRlciBFQ0hPLUJlZmVobAorenVyIFZlcmZ1ZWd1bmcsIG1pdCBkZXNzZW4gSGlsZmUgRHUgaW4gZGVyIExhZ2UgYmlzdCwgZWluZW4geC1CZWxpZWJpZ2VuCitUZXh0IGluIGRlbSBSYXVtIGFienVzZXR6ZW4sIGluIGRlbSBEdSBEaWNoIGJlZmluZGVzdCwgc28gZGFzcyBhdWNoIGFsbGUKK2FuZGVyZW4gU3BpZWxlciBkaWVzZW4gVGV4dCBsZXNlbiBrb2VubmVuLi4uCitOZXR0ZSBTcGllbGVyZWksIGRpZSBsZWlkZXIgNTAgTVAga29zdGV0LCBhYmVyIHRyb3R6ZGVtIGltbWVyIHp1IGVpbmVtCitrbGVpbmVuIEdhZyBndXQgaXN0LgorCitTb2xsdGVzdCBEdSBkaWUgU2VoZXJxdWVzdCAnRGllIEtyaXN0YWxsa3VnZWwnIGdlbG9lc3QgaGFiZW4sIHNvIHN0ZWh0CitEaXIgYXVjaCBkYXMgJ3ItZW1vdGUnIHp1ciBWZXJmdWVndW5nLCBkYXMgZXMgRGlyIGVybW9lZ2xpY2h0LCBkYXMgc2VpdAorZGVyIExvZXN1bmcgZGVzIEFtYXJ5bGxpcy1RdWVzdHMgKGhhc3QgRHUgZG9jaCB3b2hsICEhKSBtb2VnbGljaGUgJ2Vtb3RlJworYXVjaCBhdWYgU3BpZWxlciBhdXNzZXJoYWxiIGRlcyBSYXVtZXMgYW56dXdlbmRlbi4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzE0IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZDE1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTQKQEAgLTAsMCArMSw1NSBAQAorMTQuIFNFSEVSSEFFVVNFUgorLS0tLS0tLS0tLS0tLS0tLQorCitJbnRlcmVzc2FudGVzIFRoZW1hOiBEaWUgU2VoZXJoYXVzZXI6IFNpZSBnaWJ0IGVzIG51biBzZWl0IGNhLiBNaXR0ZQorT2t0b2JlciA5NCwgdW5kIGZvbGdlbmRlcyBpc3QgZGF6dSBhbnp1bWVya2VuOgorCitJbiBkZXIgQmF1c3Bhcmthc3NlIGluIERyYWNoZW5ob3J0IGdpYnQgZXMgZGllIG5vZXRpZ2VuIEluZm9ybWF0aW9uZW4genUKK2RlbiBIYXVlc2Vybi4gRGFzIEluZm9ybWF0aW9uc2JsYXR0IGZ1ZXIgMTAuMDAwIE11ZW56ZW4gc29sbHRlIG1hbiBzaWNoCitlYmVuIHp1bGVnZW4sIGF1Y2ggd2VubiBudXIgZWluZSBTZWl0ZSBJbmZvcyBkcmluc3RlaGVuLCB1bmQgZXMgbmFjaCBkZW0KK2Vyc3RlbiBMZXNlbiB3ZWcgaXN0IDooKC4KKworR3J1bmRzYWV0emxpY2ggZ2lidCBlcyB6d2VpIE1vZWdsaWNoa2VpdGVuLCB6dSBlaW5lbSBIYXVzIHp1IGtvbW1lbjoKKworYSkgRGVyIHNjaG5lbGxlIFZlcnRyYWc6IEtvc3RldCAyIE1pbyBFUHMsIG1hbiBtdXNzIGFsbGUgMiBvbmxpbmUgU3R1bmRlbgorZWluZSBSYXRlIHZvbiA4MC4wMDAgRVBzIGVpbnphaGxlbiAtIGluc2dlc2FtdCBhbHNvIDI1IFJhdGVuLiBEaWUgWmVpdCBrYW5uCit1LlUuIG5hY2ggZWluZW0gQ3Jhc2ggZXR3YXMga25hcHAgd2VyZGVuLCBkYSBtYW4gZGFubiBuaWNodCBkaWUgbm9ldGlnZQorWmVpdCBoYXQsIHVtIHNpY2ggc2VsYnN0IGVyc3RtYWwgQXVzcnVlc3R1bmcgenUgYmVzb3JnZW4sIHVuZCBqYSB2b3IgYWxsZW0KK2FsbGUgU3BpZWxlciBkYWJlaSBzaW5kLCBzaWNoIEF1c3J1ZXN0dW5nIHp1IGJlc2NoYWZmZW4sIHNvIGRhc3MgbmljaHQKK3ZpZWwgenUgaG9sZW4gaXN0LgorCitiKSBEZXIgbGFuZ3NhbWUgVmVydHJhZzogS29zdGV0IDIuNCBNaW8gRXBzIC0gYWxzbyAzMCBSYXRlbiwgbWFuIG11c3MgYWxsZQorNCBvbmxpbmUgU3R1bmRlbiBzZWluZSBSYXRlIHZvbiA4MC4wMDAgRVBzIGVpbnphaGxlbi4gU2ljaGVyIGJlc3NlciBnZWVpZ25ldAorZnVlciBkaWVqZW5pZ2VuLCBkaWUgb2Z0IHRhbGtlbiwgdW5kIG5pY2h0IGRpZSBuYWVjaHN0ZSBXb2NoZSBudXIgbWl0IG1ldHplbG4KK3ZlcmJyaW5nZW4gd29sbGVuIC0gR2VzY2htYWNrc3NhY2hlLi4uLiBuYXR1ZXJsaWNoIGthbm4gbWFuIGJlaSBiZWlkZW4KK1ZlcnRyYWdzYXJ0ZW4gYXVjaCBzY2huZWxsZXIgZWluemFobGVuLCBhbHNvIG11c3MgbWFuIHNpY2gga2VpbmUgU29yZ2UgbWFjaGVuLAorZGFzcyBtYW4gYmVpbSA0LXN0dW5kZW4gVmVydHJhZyBld2lnIHdhcnRlbiBtdXNzLCBiaXMgbWFuIGVpbmVuIG5ldWVuCitNYXN0ZXJibG9jayBrcmllZ3QsIGF1ZiBkZW0gZGllIEd1dGhhYmVuIGd1dGdlc2NocmllYmVuIHdlcmRlbi4KKworV2VsY2hlIFZlcnRyYWdzZm9ybSBtYW4gd2FlaGx0LCBpc3QgZWluZW0gc2VsYnN0IHVlYmVybGFzc2VuLi4uLiBhYmVyCit1ZWJlcmxlZ3MgRGlyIGd1dCwgb2IgRHUgZGllIFplaXQgenVtIHRhbGtlbiBiZWhhbHRlbiB3aWxsc3QsIGRlbm4gZGllIHdpcmQKK2JlaW0gMmggLSBWZXJ0cmFnIHNjaG5lbGwga25hcHAgLSBuaWNodCB6dSB2ZXJnZXNzZW4gZGllIFRhdHNhY2hlLCBkYXNzIGJlaQorVWViZXJ6aWVoZW4gZGVyIEVpbnphaGx1bmdzemVpdCBmdWVyIGRpZSBlaW56ZWxuZW4gUmF0ZW4genVuYWVjaHN0IGVpbmUKK3NhZnRpZ2UgU3RyYWZlIGZhZWxsaWcgd2lyZCAoZXMgc2VpIGRlbm4sIGRlciBNYXN0ZXJibG9jayBpc3Qgdm9sbCksCit1bmQgZGFubiBzb2dhciBkZXIgZ2FuemUgVmVydHJhZyBmbG9ldGVuIGdlaGVuIGthbm4uLi4uCisKK0ltIFNlaGVyaGF1cyBrb2VubmVuIGF1Y2ggRXh0cmEtUmFldW1lIGVpbmdlYmF1dCB3ZXJkZW4uIERpZXNlIGtvc3RlbiBwcm8KK1N0dWVjayBlbnR3ZWRlciAxMDE3NjAwIEVQcyAoMiBPbmxpbmVzdHVuZGVuKSBvZGVyIDg0ODAwMCBFUHMgKDEgT25saW5lc3R1bmRlKQorTWF4aW1hbCBrb2VubmVuIDkgUmFldW1lIGFuIGRhcyBIYXVzIGFuZ2ViYXV0IHdlcmRlbi4gU29mZXJuIGluIGVpbmVtIFJhdW0KK21laHJlcmUgSGFldXNlciBzdGVoZW4sIGJlc3RlaHQgYXVjaCBkaWUgTW9lZ2xpY2hrZWl0LCBkaWUgZHVyY2ggZGVuIEJlZmVobAorQXVzZ2FuZyBtaXRlaW5hbmRlciB6dSB2ZXJiaW5kZW4uCisKK0luIGRlbiBTZWhlcmhhZXVzZXJuIHNpbmQgc2VpdCBGZWJydWFyICcgOTUgZGFzIEJlc2NocmVpYmVuIHZvbgorQmVmZWhsZW4gdW5kIHNwZXppZmlzY2hlIEF1c2dhYmVuIG1vZWdsaWNoLiBTbyBrYW5uIG1hbiByYXNzZW4tIHVuZAorZ2VzY2hsZWNodHNzcGV6aWZpc2NoZSBBdXNnYWJlbiBtYWNoZW4uIEViZW5zbyBpc3QgZXMgbW9lZ2xpY2gsCitkdXJjaCBFaW5nYWJlIHZvbiBCZWZlaGxlbiBiZXN0aW1tdGUgQXVzZ2FiZW4genUgZXJyZWljaGVuLCB6LkIuCisnZHJ1ZWNrZSBrbm9wZicgLSAnIGVpbiBGYWRlbiBmYWVsbHQgdm9uIGRlciBEZWNrZScgdXN3LiBXaWUgZGFzIHZvcgorc2ljaCBnZWh0LCB3YWVyZSBoaWVyIHp1IHVtZmFzc2VuZCwgYXVzc2VyZGVtIGhhdCBXYXJnb24gZWluZQoraGVydm9ycmFnZW5kZSBIaWxmZXNlaXRlIHp1IGRlbiBIYWV1c2VybiBlcnN0ZWxsdCwgZGllIHNlaHIKK2RldGFpbGxpZXJ0IGVya2xhZXJ0LCB3aWUgbWFuIHZvcmdlaGVuIG11c3MuCisKK0Rlc3dlaXRlcmVuIGthbm4gbWFuIG51biBkaWUgVHJ1aGUgaW4gZGVuIFNlaGVyaGFldXNlcm4gdmVyc2NoaWViZW4sCit1bWJlbmVubmVuIHVuZCBpaHIgZWluZW4gRXh0cmFsb29rIGdlYmVuLiAgQXVzc2VyZGVtIGthbm4gZGllIEhhdXN0dWVyCittaXQgc3BlemllbGxlbiBGdW5rdGlvbmVuIGluIGRpZSBBdXNzZW5iZXNjaHJlaWJ1bmcgZGVzIEhhdXNlcyBlaW5nZWJhdXQKK29kZXIgdW5zaWNodGJhciBnZW1hY2h0IHdlcmRlbi4gQXVjaCBoaWVyenUgZW1wZmVobGUgaWNoIGRpZSBMZWt0dWVyZQorZGVyIEhpbGZlLSBTZWl0ZSB6dW0gU2VoZXJoYXVzLgpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzE1IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYmI0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTUKQEAgLTAsMCArMSwxMiBAQAorMTUuIE5BQ0hXT1JUCistLS0tLS0tLS0tLS0KKworRXJ3YWVobmVuIHdpbGwgaWNoIGF1Y2ggbm9jaCwgZGFzcyBtYW4gc2ljaCBhbHMgU2VoZXIgYXVjaCBuaWNodCBzY2hldWVuCitzb2xsdGUgZGllIGhvZWhlcmVuIFNlaGVyIHp1IGZyYWdlbiwgd2VubiBtYW4gZXR3YXMgbmljaHQgd2Vpc3MsIGRpZQorbWVpc3RlbiB3ZXJkZW4gZGFubiBhdWNoIGFudHdvcnRlbiwgc29sYW5nZSBkZXIgVW1nYW5nc3RvbiBpbiBPcmRudW5nCitpc3QgOikgTWFuIGthbm4gYWJlciBuaWNodCBudXIgZGlyZWt0IGRpZSBTZWhlciBmcmFnZW4sIHNvbmRlcm4gc29sbHRlCithdWNoIF9pbW1lcl8gZGllIFNlaGVyLUViZW5lICAoLWgrKSBlaW5nZXNjaGFsdGVuIGhhYmVuLCBkYSBkb3J0IG9mdAoraW50ZXJlc3NhbnRlIERpbmdlIGRpc2t1dGllcnQgd2VyZGVuIChuYXR1ZXJsaWNoIGF1Y2ggdmllbCBTdHVzcyA6KSkpCitBdWNoIHNvbGx0ZSBtYW4gcmVnZWxtYWVzc2lnIGRpZSBTZWhlci1SdWJyaWtlbiBpbiBkZXIgTVBBIGxlc2VuLCB3ZW5uIG1hbgorYXVmIGRlbSBsYXVmZW5kZW4gYmxlaWJlbiB3aWxsLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTYgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkMzY4MAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS8xNgpAQCAtMCwwICsxLDE0IEBACisxNi4gREFOS1NBR1VOR0VOCistLS0tLS0tLS0tLS0tLS0tCisKK0Fic2NobGllc3NlbmQgbW9lY2h0ZSBpY2ggbm9jaCBlaW4gR1JPU1NFUyBEQU5LRVNDSE9FTiBhbiBSeW5lIHJpY2h0ZW4sIGRlcgorZGllIFZvcmZhc3N1bmcgZGllc2VyIEZBUSBnZXNjaHJpZWJlbiBoYXQsIHVuZCB2b24gZGVtIGljaCBhdWNoIG5vY2ggZWluaWdlcwordWViZXJub21tZW4gaGFiZSAoZmF1bCB3aWUgaWNoIGJpbiA6KSkKK1VuZCBhdWNoIGFuIFplcGh5ciBub2NoIGVpbiBncm9zc2VzIERhbmtlc2Nob2VuLCBkYSBzaWUgZGllc2UgRkFRIGZ1ZXIgbWljaAora29ycmVrdHVyZ2VsZXNlbiBoYXQsIHVuZCBtaWNoIGF1Y2ggbm9jaCBhdWYgZWluaWdlcyBoaW5nZXdpZXNlbiBoYXQgOikKK0RhcyBsZXR6dGUgRGFua2VzY2hvZW4gZ2VodCBhbiBSaWt1cywgZGVyIHNpY2ggZnJldW5kbGljaGVyd2Vpc2UgZGllIFplaXQKK2dlbm9tbWVuIGhhdCwgZGllc2UgRkFRIGluIGRlbiBTZWhlcmxhZGVuIHp1IGJyaW5nZW4sIHVuZCBtaXIgYXVjaAorZXJtb2VnbGljaHQgaGF0LCBzaWUgaW1tZXIgdXAgdG8gZGF0ZSB6dSBoYWx0ZW4gOikKKworCitTdGluZwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzIgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjI4ZWIyCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzIKQEAgLTAsMCArMSwxOSBAQAorMi4gU0VIRVJRVUVTVAorLS0tLS0tLS0tLS0tLQorCitFaW5lIHJlY2h0IHNjaG9lbmUgUXVlc3QgbnVyIGZ1ZXIgU2VoZXIgaGF0IFRyb3kgaW0gRnJ1ZWhqYWhyIDE5OTUKK2dlc2NocmllYmVuLCBhbGxlcmRpbmdzIHd1cmRlIHNpZSBlcnN0IDQgTW9uYXRlIHNwYWV0ZXIKK2FuZ2VzY2hsb3NzZW4sIG5hY2hkZW0gQm9pbmcgZWluZSBNZW5nZSBCdWdzIGdlZml4dCBoYXR0ZS4gV2llIGF1Y2gKK2ltbWVyOgorRWluZSBsb2huZW5kZSBRdWVzdCwgbWl0IFNpY2hlcmhlaXQgZGllIHNjaG9lbnN0ZSwgZGllIFRyb3kgaGllcgorZ2VzY2hyaWViZW4gaGF0LCBzaWUgaXN0IGF1Y2ggc2VociBsb2dpc2NoIHVuZCBkaWUKK1N0aW1tdW5nIHZvciBPcnQgd2lya2xpY2ggZ3V0LiBBbHNvIHVuYmVkaW5ndCBzcGllbGVuLCBuaWNodCB6dWxldHp0LAord2VpbCBkaWUgQmVsb2hudW5nIGRhZnVlciB3aXJsaWNoIGdlbHVuZ2VuIGlzdCwgYmVzc2VyOiBkaWUgQmVsb2hudW5nZW4hCitEZW5uIGEpIGVyaGFlbHQgbWFuIGVpbmUgS3Jpc3RhbGxrdWdlbCwgbWl0IGRlciBtYW4gU3BpZWxlciBmdWVyIGVpbmVuCitNYWdpZXB1bmt0IGZpbmRlbiBrYW5uIChzaWVoZSBhdWNoOiBLYXAuIDY6IE1hZ2lzY2hlIEt1Z2VsKSwgdW5kIAorYikgZXJoYWVsdCBtYW4gZGFzIFItRW1vdGUsIG1pdCBkZW0gbWFuIHNlaW4gRW1vdGUsIGRhcyBtYW4gZnVlciBkaWUKK0FtYXJ5bGxpcy1RdWVzdCBlcmhhbHRlbiBoYXQsIGF1Y2ggYXVmIFNwaWVsZXIgYXVzc2VyaGFsYiBkZXMgUmF1bWVzIGluCitkZW0gbWFuIHNpY2ggYmVmaW5kZXQsIGFud2VuZGVuIGthbm4uIAorCitWaWVsIFNwYXNzIGJlaW0gUXVlc3RlbiAhISEKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzMgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZjMTFhCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzMKQEAgLTAsMCArMSwyMyBAQAorMy4gRkxVQ0hUUklDSFRVTkcKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0V0d2FzIHVuc2NoZWluYmFyLCBhYmVyIGluIG1laW5lbiBBdWdlbiBpc3QgZGllcyBpbW1lciBub2NoIGRlcgord2VydHZvbGxzdGUgQmVmZWhsLCBkZW4gbWFuIGFscyBTZWhlciBuZXUgZXJoYWVsdDoKKworZmx1Y2h0cmljaHR1bmcgPFJpY2h0dW5nL0JlZmVobD4KKworQWIgc29mb3J0IGthbm5zdCBEdSBkZW4gQmVmZWhsICdmbHVjaHRyaWNodHVuZycgYW53ZW5kZW4uCitTb2xsdGUgZGllc2VyIG5vY2ggbmljaHQgYWt0aXZpZXJ0IHNlaW4sIG11c3N0IGR1IGVpbm1hbCBFbmRlIG1hY2hlbi4KK0RhbmFjaCBrYW5uc3QgRHUgc2VsYnN0IGJlc3RpbW1lbiwgaW4gd2VsY2hlIFJpY2h0dW5nIGR1IGZsaWVoc3QsIHdlbm4gZGllCitBbmdzdCBEaWNoIG1hbCB1ZWJlcmtvbW1lbiBzb2xsdGUgKHdlbm4gZGllIFZvcnNpY2h0IHp1c2NobGFlZ3QpCitBYmVyIEFjaHR1bmc6IERlciBCZWZlaGwgZnVua3Rpb25pZXJ0IGVyc3QgYmVpIGVpbmVtIFNwaWVsZXJsZXZlbCB2b24gNTAKK29kZXIgaG9laGVyIG1pdCAxMDAlIFdhaHJzY2hlaW5saWNoa2VpdCwgZGFydW50ZXIgamV3ZWlscyBuaWVkcmlnZXIuCitUaXA6ICdmbHVjaHRyaWNodHVuZyBzY2hsYWZlIGVpbicgZnVua3Rpb25pZXJ0IGF1Y2gsIGViZW5zbyB3aWU6CisnZmx1Y2h0cmljaHR1bmcgdGVpbGUgQm9pbmcgbWl0IER1LCBpY2ggc3RlcmJlIGdsZWljaCcKK01hbiBtdXNzIGhhbHQgZGllIFByaW9yaXRhZXRlbiByaWNodGlnIHNldHplbiA7KSkuCisKK1dhcnVtIGRpZXNlciBCZWZlaGwgaW4gbWVpbmVuIEF1Z2VuIGJlc29uZGVycyB3aWNodGlnIGlzdD8gTnVuLCBlcgorYmVmcmVpdCBTcGllbGVyIG1pdCBzZWhyIGhvaGVyIFdhaHJzY2hlaW5saWNoa2VpdCB2b24gZGVtIFJpc2lrbywgZHVyY2gKK2VpbiBMYWcgenUgc3RlcmJlbiwgd2VubiBkaWUgRmx1Y2h0IGltIGVudHNjaGVpZGVuZGVuIE1vbWVudCBpbiBkaWUgZmFsc2NoZQorUmljaHR1bmcgenUgZ2VoZW4gZHJvaHQuIE1hbiBtdXNzIHNpZSB2b3JoZXIgbnVyIHJpY2h0aWcgZ2VzZXR6dCBoYWJlbi4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzQgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDg3OTZlCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzQKQEAgLTAsMCArMSw5IEBACis0LiBTRUhFUkxFVkVMCistLS0tLS0tLS0tLS0tCisKK0RpZSBCZWRldXR1bmcgZGVyIExldmVscyBpc3QgaW5zb2Zlcm4gaG9jaCwgYWxzIGRhc3MgZGllIEVyZm9sZ3NjaGFuY2UKK2RlciBaYXViZXJzcHJ1ZWNoZSBpbiBkZW4gbWVpc3RlbiBHaWxkZW4gdm9uIGRlbSBMZXZlbCBkZXMgU3BpZWxlcnMgYWJoYWVuZ2lnCitpc3QuIFNvIGlzdCBlcyBncnVuZHNhZXR6bGljaCBpbiBlaW5pZ2VuIEdpbGRlbiBtb2VnbGljaCwgZGllIG1heGltYWxlCitFcmZvbGdzd2FocnNjaGVpbmxpY2hrZWl0IGVpbmVzIFphdWJlcnNwcnVjaGVzIGVyc3QgZGFubiB6dSBlcnJlaWNoZW4sCit3ZW5uIG1hbiB6LkIuIFNlaGVybGV2ZWwgMzUgZXJyZWljaHQgaGF0LgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvNSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS81Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjdmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvNQpAQCAtMCwwICsxLDM4IEBACis1LiBLT01NVU5JS0FUSU9OCistLS0tLS0tLS0tLS0tLS0tCisKK0FscyBTZWhlciBzdGVoZW4gRGlyIG5ldWUgTWl0dGVsIGRlciBLb21tdW5pa2F0aW9uIHp1ciBWZXJmdWVndW5nLAorbWl0dGVscyBkZXJlciBEdSBOYWNocmljaHRlbiBhbiBhbmRlcmUgU3BpZWxlciBzZW5kZW4ga2FubnN0OgorCithKSBNYWlsCistLS0tLS0tCisKK0FiIHNvZm9ydCBzdGVodCBEaXIgZGVyIGtvc3Rlbmxvc2UgS3VyaWVyZGllbnN0IGRlciBNRy1Qb3N0IHp1ciBWZXJmdWVndW5nIC0KK2R1cmNoIEVpbmdhYmUgdm9uICdtYWlsJyBrYW5uc3QgZHUgdm9uIHVlYmVyYWxsIFBvc3QgdmVyc2NoaWNrZW4gdW5kCitlbXBmYW5nZW4uIERpZXMgc2V0enQgYWJlciB2b3JhdXMsIGRhc3MgRHUgZWluZSBaZWl0dW5nIGJlaSBEaXIgdHJhZWdzdCwKK2RhIGRhcyAnbWFpbCcgZWluZSBadXNhdHpmdW5rdGlvbiBkZXIgTVBBIGlzdC4KKworYikgTVBBCistLS0tLS0KKworSW4gZGVyIFplaXR1bmcgc3RlaHQgRGlyIG51biBkaWUgbmV1ZSBSdWJyaWsgJ3NlaGVyLmVudHdpY2tsdW5nJyB6dXIKK1ZlcmZ1ZWd1bmcsIGluIGRlciBEdSBEZWluZSBWb3JzY2hsYWVnZSB6dXIgVmVyYmVzc2VydW5nIGRlcyBTZWhlcnR1bXMKK2VpbmJyaW5nZW4ga2FubnN0LCBzb3dpZSBkaWUgUnVicmlrICdzZWhlci51cmxhdWInLgorCitjKSBLYW5hZWxlCistLS0tLS0tLS0tCisKK1p1ciBkaXJla3RlbiBLb21tdW5pa2F0aW9uIG1pdCBkZW4gYW5kZXJlbiBTZWhlcm4gc3RlaHQgRGlyIG51biBhdWNoIGVpbgorbmV1ZXIgS2FuYWwgenVyIFZlcmZ1ZWd1bmcuIEVyIHdpcmQgbWl0ICctaCcgYW5nZXNwcm9jaGVuIChuZWluLCBuaWNodCBtaXQKK1Mgd2llIFNlaGVyIDspKS4KKworZCkgRmVybnNjaHJlaWJlcgorLS0tLS0tLS0tLS0tLS0tLQorCitNaXQgZGVtIEZlcm5zY2hyZWliZXIgYXVzIGRlbSBTZWhlcmxhZGVuIGthbm5zdCBEdSBnYW56ZSBOYWNocmljaHRlbmJsb2Vja2UKK2FuIGFuZGVyZSBTcGllbGVyIHNlbmRlbi4gRGllcyBpc3QgaGFldWZpZyBudWV0emxpY2gsIHdlbm4gbWFuIGxhZW5nZXJlCitUZXh0ZSBhbiBlaW5lbiBhbmRlcmVuIFNwaWVsZXIgc2VuZGVuIHdpbGwsIHdhZWhyZW5kIG1hbiB6LkIuIG1pdCBkaWVzZW0KK3p1c2FtbWVuIGVpbmUgbmV1ZSBSZWdpb24gb2RlciBlaW5lIFF1ZXN0IGVyZm9yc2NodC4gRGVyIEVpbnNhdHoga29zdGV0CisxNSBLUCBwcm8gU3BpZWxlciwgYW4gZGVuIGRpZSBOYWNocmljaHQgZ2VzZW5kZXQgd2lyZCwgbWFuIGthbm4gYXVjaCBhbgorbWVocmVyZSBTcGllbGVyIGdsZWljaHplaXRpZyBkaWUgTWVsZHVuZyBhdXNnZWJlbiBsYXNzZW4uCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS82IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyMGFlMgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS82CkBAIC0wLDAgKzEsMTcgQEAKKzYuIE1BR0lTQ0hFIEtVR0VMCistLS0tLS0tLS0tLS0tLS0tLQorCitJbSBIYXVzIGRlciBIZXhlIGFtIEZyaWVkaG9mIGZpbmRlc3QgRHUgZWluZSBLdWdlbCwgZGllIER1IG1pdG5laG1lbgora2FubnN0IC0gbWl0IGlociBrYW5uc3QgZHUgZHVyY2ggZGVuIEJlZmVobCAnZmluZGUgPFNwaWVsZXJuYW1lPicKK2plZGVuIGVpbmdlbG9nZ3RlbiBTcGllbGVyIGxva2FsaXNpZXJlbiAtIGVpbiBFaW5zYXR6IGtvc3RldCBqZXdlaWxzIDkKK0tQLgorCitNaXQgZGVyIEVpbmZ1ZWhydW5nIGRlciBTZWhlcnF1ZXN0IHZvbiBUcm95IGVyaGFlbHQgbWFuIGFscyBRdWVzdGJlbG9obnVuZworZWluZSAtIGRlciBOYW1lIGRlcyBRdWVzdHMgbGFlc3N0IGVzIHZlcm11dGVuIC0gS3Jpc3RhbGxrdWdlbCwgZGllIGRpZXNlbGJlCitGdW5rdGlvbiB3aWUgZGllIFNlaGVya3VnZWwgZXJmdWVsbHQuIEFsbGVyZGluZ3Mga29zdGV0IGRpZXNlIHBybyBFaW5zYXR6CitudXIgMSBLUC4gRGFmdWVyIGVyaGFlbHQgYWxsZXJkaW5ncyBkZXIgYmVvYmFjaHRldGUgU3BpZWxlciBkaWUgTWVsZHVuZworJ0plbWFuZCBiZXNjaHdvZXJ0IERlaW4gQmlsZCBoZXJhdWYuJywgd2FzIGF1ZiBEYXVlciBldHdhcyBhdWZkcmluZ2xpY2gKK3dpcmQsIGRhIGRlciBCZXRyb2ZmZW5lIGphIG5pY2h0IHdlaXNzLCB3ZXIgaWhuIGRhIHN1Y2h0LgorV2VsY2hlIEt1Z2VsIGR1IGFscyBTZWhlciBiZW51dHp0LCBrb21tdCB3b2hsIGF1ZiBkaWUgZWlnZW5lIEVudHNjaGVpZHVuZyB1bmQKK2RlbiBqZXdlaWxpZ2VuIEZhbGwgYW4uCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS83IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkZmM2YwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS83CkBAIC0wLDAgKzEsMTUgQEAKKzcuIFNFSEVSTEFERU4KKy0tLS0tLS0tLS0tLS0KKworQXVmIFN2b2x2YWVyIGZpbmRlc3QgRHUgZWluZW4gTGFkZW4sIGRlciBzcGV6aWVsbGUgSXRlbXMgbnVyIGZ1ZXIgU2VoZXIKK2FuYmlldGV0LiBJbnRlcmVzc2FudCBpc3QgaGllciBkZXIgQnVtZXJhbmcsIGRlciBXZWNrZXIsIGRpZSBQYXJ0eXRyb2V0ZSwKK2RlciBNYWdpc2NoZSBCZXV0ZWwgdW5kIGRlciBrbGVpbmUgZ3JhdWUgS2FzdGVuLgorCitGdWVyIGRhcyBBbmdlYm90IGltIFNlaGVybGFkZW4gaXN0IExvY28genVzdGVuZGlnLCBkZXIgZGFzIEFuZ2Vib3QKK3NpY2hlciBnZXJuZSBlcndlaXRlcm4gd3VlcmRlLCB1bmQgZGFoZXIgZnVlciBJZGVlbiBpbW1lciBhdWZnZXNjaGxvc3NlbgoraXN0IC0gZGFoZXIgc2NocmVpYmUgaWhtIHJ1aGlnIGVpbiBNYWlsLCB3ZW5uIER1IGVpbmUgSWRlZSBoYXN0LCB3YXMKK2RvcnQgenVrdWVuZnRpZyBub2NoIGFuZ2Vib3RlbiB3ZXJkZW4ga29lbm50ZS4KKworVWVicmlnZW5zIGdpYnRzIGF1Y2ggaW4gZGVyIFBhcmF3ZWx0IGluIFBvcnQgVmFpbiBuZW4gU2VoZXItTGFkZW4sIGRlbgorbXVlc3N0IGlociBhbGxlcmRpbmdzIHN1Y2hlbiA6KSkKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzggYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDBlNTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzgKQEAgLTAsMCArMSw1MSBAQAorOC4gREVTSUdORVItU0VIRVIKKy0tLS0tLS0tLS0tLS0tLS0tCisKK051biwgdmllbGxlaWNodCBpc3QgZGllc2VyIFRpdGVsIGF1Y2ggZWluIHdlbmlnIHVlYmVydHJpZWJlbi4gQWJlciBhbHMKK1NlaGVyIGthbm5zdCBEdSAoZmFzdCkgRGVpbmUgZ2VzYW10ZSBFcnNjaGVpbnVuZyBpbSBNVUQgc2VsYnN0IGdlc3RhbHRlbjoKK051biwgRGVzaWduZXJ0eXBlbiBnbGFlbnplbiBkdXJjaCBpaHIgQWV1c3NlcmVzLCBhbHNvIGZhbmdlbiB3aXIgbWFsIGJlaW0KK0F1c3NlaGVuIGFuOiBXYXMgZGllIFNwaWVsZXIgc2VoZW4sIHdlbm4gc2llIERpY2ggdW50ZXJzdWNoZW4sIGthbm5zdCBEdQorbWl0IGRlbSBCZWZlaGwgJ2V4dHJhbG9vaycgYmVzdGltbWVuLiBEaWUgZG9ydCBlaW5nZWdlYmVuZSBCZXNjaHJlaWJ1bmcKK3dpcmQgZGVyIEF1Zmxpc3R1bmcgZGVzc2VuLCB3YXMgRHUgYmVpIERpciB0cmFlZ3N0LCB2b3Jhbmdlc3RlbGx0LgorCitadXIgRXJzY2hlaW51bmcgZ2Vob2VydCBhdWNoIGRhcyBBdWZ0cmV0ZW4sIGFsc28gZGVzaWduZW4gd2lyIG1hbCBlaW4KK2Jpc3NjaGVuIGFuIERlaW5lbiBNZWxkdW5nZW4gaGVydW0sIGRpZSBlcnNjaGVpbmVuLCB3ZW5uIER1IGVpbmVuIFJhdW0KK2JldHJpdHRzdCBvZGVyIHZlcmxhZXNzdC4gRGllcyBrYW5uc3QgRHUgbWl0OgorJ3NldG1pbiA8VEVYVD4nIGJ6dy4gJ3NldG1vdXQgPFRFWFQ+JyBzZXR6ZW4uCitVbmQgd2VubiBEdSBtb2VjaHRlc3QsIGthbm5zdCBEdSBtaXQgJ3NldG1tb3V0JyBiencuICdzZXRtbWluJworZGllIE1lbGR1bmdlbiBzZXR6ZW4sIGRpZSBlcnNjaGVpbmVuLCB3ZW5uIER1IGVpbmVuIE9ydCBtaXR0ZWxzIGVpbmVzCitUZWxlcG9ydHMgYmV0cml0dHN0L3ZlcmxhZXNzdC4KKworRG9jaCBhdWNoIERlc2lnbmVyc2VoZXIgbGViZW4gdW50ZXIgZGVtIEpvY2ggZGVzIEFybWFnZWRkb24sIHVuZCBzaW5kIGRhaGVyCittYW5jaG1hbCB3YWZmZW4tIHVuZCBydWVzdHVuZ3Nsb3MuIFdlciBlcyBhYmVyIG5pY2h0IGVydHJhZ2VuIGthbm4sIGluIGRpZXNlbgorYml0dGVyZW4gU3R1bmRlbiBpbW1lciBkaWUgTWVsZHVuZyAnZ3JlaWZ0IG1pdCBibG9zc2VuIEhhZW5kZW4gYW4nIHp1IHNlaGVuLAorZGVyIGthbm4gc2ljaCBtaXR0ZWxzIGRlcyBCZWZlaGxzICdzZXRoYW5kcyA8VEVYVD4nIGVpbmUgbWFydGlhbGlzY2hlcmUKKyhvZGVyIGF1Y2ggemFlcnRsaWNoZXJlLCBqZSBuYWNoIEdlc2NobWFjayA7KSkgS2FtcGZtZWxkdW5nIGZ1ZXIgc2VpbmUgSGFlbmRlCitzZXR6ZW4uCisKK051biwgZWluIHJpY2h0aWdlciBTZWhlciBoYXQgbmF0dWVybGljaCBhdWNoIGVpbmVuIGludGVyZXNzYW50ZXJlbgorTmFtZW4sIG5pY2h0IHNvIHdhcyBvZWRlcyB3aWUgJ1d1cnN0LCBkaWUgU2VoZXJpbicuIFVuZCBkZXNoYWxiIGtvZW5udGUKK3NpY2ggV3Vyc3QgZWluZW4gZWlnZW5lbiBOYW1lbiBnZWJlbiwgbWl0IGRlbSBCZWZlaGwgJ3RpdGVsIDxURVhUPicuCitEYW5uIGhpZXNzZSBzaWUgaGludGVyaGVyIGJlaXNwaWVsc3dlaXNlICdXdXJzdCBpc3QgbmUgV3Vyc3QnLgorVW5kIHdlbSBkYXMgbm9jaCBuaWNodCBsYWVzc2lnIGdlbnVnIGlzdCwgZGVyIHNldHp0IHNpY2ggbWl0CisncHJlc2F5IDxURVhUPicgYXVjaCBub2NoIGVpbmVuIE5hbWVuc3ZvcnNhdHouCitCZWlzcGllbDogJ0RpZSBPYmVyd3Vyc3RzZWhlcmluIFd1cnN0IGlzdCBuZSBXdXJzdCcuCitXZW5uZ2xlaWNoIGRhcyB2aWVsbGVpY2h0IGRvY2ggbmljaHQgU09PTyBjb29sIGlzdC4KK0dlc2NobWFja3NzYWNoZSBoYWx0IDspLgorCisKK0FjaCBqYSwgdW5kIHdlbm4gbWFuIGRhbm4gYmVpIGFsbCBkZXIgUnVtZGVzaWduZXJlaSB2ZXJnZXNzZW4gaGFiZW4gc29sbHRlLAord2FzIG1hbiB1ZWJlcmhhdXB0IGVpbmdlZ2ViZW4gaGF0LCBzbyBlcmhhZWx0IG1hbiBtaXQgZGVtIEJlZmVobCAncmV2aWV3JworZWluZW4gVWViZXJibGljayB1ZWJlciBkaWUgbWVpc3RlbiBFaW5zdGVsbHVuZ2VuLgorCitFaW5lIEFubWVya3VuZyBub2NoOiBEZXIgVG9ldGVyIGhhdCB2b3IgbGFuZ2VyIFplaXQgZWluZSBrbGVpbmUgRXJ3ZWl0ZXJ1bmcKK2luIGRlbiBCZWZlaGwgc2V0bW91dCBlaW5nZWJhdXQ6CitOdW5tZWhyIGlzdCBlcyBtb2VnbGljaCwgZGVuIFRleHQgJ25hY2ggKFJpY2h0dW5nKScgbmljaHQgbWVociBudXIgYW0gRW5kZSwKK3NvbmRlcm4gaXJnZW5kd28gaW0gVGV4dCBlcnNjaGVpbmVuIHp1IGxhc3NlbjogZGFubiBtdXNzIGltIFRleHQgZGVyCitvdXQtbWVzc2FnZSBlaW4gIyBlcnNjaGVpbmVuLCBkaWUgZGFubiBkdXJjaCAnbmFjaCAoUmljaHR1bmcpJyBlcnNldHp0IHdpcmQuCitVbnRlcmRydWVja2VuIGthbm5zdCBEdSBkaWUgUmljaHR1bmdzYW5nYWJlIGFsbGVyZGluZ3MgbmljaHQsIHdlbm4gRHUgZGFzICNyCit3ZWdsYWVzc3QsIHdpcmQgZGllc2UgQW5nYWJlIGVpbmZhY2ggaGludGVuIGFuZ2VoYWVuZ3QuLgorCitIaWxmZSBkYXp1IGxpZWZlcm4gYWJlciBuYXR1ZXJsaWNoIGF1Y2ggd2llZGVydW0gZGllIFNlaGVyaGlsZmVzZWl0ZW4gdW50ZXIKKydoaWxmZSBzZWhlcicKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzkgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjVjYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxLzkKQEAgLTAsMCArMSwxMSBAQAorOS4gRkVITEVSTUVMRFVORworLS0tLS0tLS0tLS0tLS0tLQorCitFaW4gbmljaHQgYmVzb25kZXJzIHdpY2h0aWdlciwgYWJlciBpbiBzZWluZW4gQXVzd2lya3VuZ2VuIGhhZXVmaWcKK2FuZ2V0cm9mZmVuZXIgQmVmZWhsOiBGZWhsZXJtZWxkdW5nLiBXZW5uIERpciBkYXMgZXdpZ2UKKydXaWUgYml0dGUgPycgbGFuZ3NhbSB6dSBlaW50b2VuaWcgd2lyZCwgc28ga2FubnN0IER1IG1pdAorJ0ZlaGxlcm1lbGR1bmcgPFRFWFQ+JyBlaW5lbiBuZXVlbiBUZXh0IGZ1ZXIgRGVpbmUgRmVobGVybWVsZHVuZyBzZXR6ZW4gLQordWVicmlnZW5zIGdlbmF1c28gd2llIGZ1ZXIgZGllIFVocm1lbGR1bmcsIHdhcyBhbGxlcmRpbmdzIHNjaG9uIGFscworU3BpZWxlciBtb2VnbGljaCBpc3QsIHdhcyBqZWRvY2ggc2NoZWluYmFyIG51ciByZWNodCB3ZW5pZ2UgU3BpZWxlcgord2lzc2VuLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvZmFxLm8gYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9mYXEvZmFxLm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjZDU5YQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS9mYXEubwpAQCAtMCwwICsxLDMgQEAKKyMwOjAKK3Byb3BlcnRpZXMgKFs6Ml0pCitzeW5vbnltIChbImxldmVsIjoiNCIsImZpbmdlciI6IjEyIiwiaGF1cyI6IjE0IiwicXVlc3QiOiIyIiwia3VnZWwiOiI2IiwiZGVzaWduZXItc2VoZXIiOiI4IiwicG9ydGFsIjoiMTEiLCJlY2hvIjoiMTMiLCJmZWhsZXJtZWxkdW5nIjoiOSIsInF1ZXN0cyI6IjIiLCJyZW1vdGUiOiIxMyIsImZsdWNodHJpY2h0dW5nIjoiMyIsInRyYW5zcG9ydG1vZWdsaWNoa2VpdCI6IjEiLCJ0ZXN0IjoiMjAiLCJzZWhlcnF1ZXN0IjoiMiIsImhhZXVzZXIiOiIxNCIsInItZW1vdGUiOiIxMyIsInNlaGVyaGF1cyI6IjE0IiwicGFyYS1wb3J0YWwiOiIxMSIsInRyYW5zcG9ydCI6IjEiLCJzZWhlcmhhZXVzZXIiOiIxNCIsInNlaGVybGFkZW4iOiI3IiwibWFnaXNjaGUga3VnZWwiOiI2IiwidHJhbnNwb3J0bW9lZ2xpY2hrZWl0ZW4iOiIxIiwicGFyYWxsZWxkaW1lbnNpb24iOiIxMCIsImRhbmtzYWd1bmciOiIxNiIsInNlaGVycXVlc3RzIjoiMiIsInNlaGVybGV2ZWwiOiI0IiwibmFjaHdvcnQiOiIxNSIsImRhbmtzYWd1bmdlbiI6IjE2IiwiZGVzaWduZXJzZWhlciI6IjgiLCJmaW5nZXItYmVmZWhsIjoiMTIiLCJrb21tdW5pa2F0aW9uIjoiNSIsInBhcmFwb3J0YWwiOiIxMSIsImZpbmdlcmJlZmVobCI6IjEyIixdKQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxL2luaGFsdCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS9pbmhhbHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3ODBiYwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS9pbmhhbHQKQEAgLTAsMCArMSwyOCBAQAorSW5oYWx0IGRlciBTZWhlckZBUSAzLjAyOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAwLiBOZXVpZ2tlaXRlbgorICAgMS4gVHJhbnNwb3J0bW9lZ2xpY2hrZWl0ZW4KKyAgIDIuIFNlaGVycXVlc3RzCisgICAzLiBGbHVjaHRyaWNodHVuZworICAgNC4gU2VoZXJsZXZlbAorICAgNS4gS29tbXVuaWthdGlvbgorICAgNi4gTWFnaXNjaGUgS3VnZWwKKyAgIDcuIFNlaGVybGFkZW4KKyAgIDguIERlc2lnbmVyLVNlaGVyCisgICA5LiBGZWhsZXJtZWxkdW5nCisgIDEwLiBQYXJhbGxlbGRpbWVuc2lvbgorICAxMS4gUGFyYS1Qb3J0YWwgOAorICAxMi4gRmluZ2VyLUJlZmVobAorICAxMy4gRWNobywgUi1FbW90ZQorICAxNC4gU2VoZXJoYWV1c2VyCisgIDE1LiBOYWNod29ydAorICAxNi4gRGFua3NhZ3VuZ2VuCisKK0RpZSBlaW56ZWxuZW4gS2FwaXRlbCBsaWVzdCBEdSBlaW5mYWNoIG1pdCB6LkIuIGxpZXMgMTIuCitXZW5uIER1IGVpbmUgSWRlZSBoYXN0LCB3YXMgYW4gZGVyIEZBUSB2ZXJiZXNzZXJ0LCBnZWFlbmRlcnQgb2RlcgoraGluenVnZWZ1ZWd0IHdlcmRlbiBzb2xsdGUsIGRhbm4gd2FlcmUgaWNoIERpciBzZWhyIGRhbmtiYXIsCit3ZW5uIER1IG1pciBlaW5lIGt1cnplIE1haWwgc2NoaWNrZW4gd3VlcmRlc3QuCisKK1N0aW5nCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS9zZWhlcmZhcSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL2ZhcS9zZWhlcmZhcQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzkwOTQxCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvZmFxL3NlaGVyZmFxCkBAIC0wLDAgKzEgQEAKK01hY2ggbWFsICJsaWVzIGluaGFsdCIKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3JqLmMgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9yai5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjNiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9yai5jCkBAIC0wLDAgKzEsMjYgQEAKK2luaGVyaXQgIi9zdGQvdGhpbmciOworCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgIi4uL2hhdXMuaCIKKworY3JlYXRlKCkKK3sKKyAgaWYgKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHJldHVybjsKKyAgOjpjcmVhdGUoKTsKKworICBTZXRQcm9wKFBfU0hPUlQsMCk7CisgIFNldFByb3AoUF9OT0dFVCwgMSk7CisgIEFkZElkKCJyJmoiKTsKKyAgQWRkQ21kKCJsaWVzIiwgImxpZXMiKTsKK30KKworc3RhdGljIGludCBsaWVzKHN0cmluZyBzdHIpCit7CisgIGludCBucjsKKworICBpZiAoIXN0ciB8fCBzc2NhbmYoc3RyLCAic2VpdGUgJWQiLCBucikgIT0gMSkKKyAgICByZXR1cm4gbm90aWZ5X2ZhaWwoIlN5bnRheDogbGllcyBzZWl0ZSA8bnI+XG4iKSwgMDsKKworICB0aGlzX3BsYXllcigpLT5Nb3JlKFNQRUNJQUxQQVRIKyJyb21fanVsL3NlaXRlIituciwgMSk7CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc2VoZXJmYXEuYyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NlaGVyZmFxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlOTZlNgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NlaGVyZmFxLmMKQEAgLTAsMCArMSwyNDcgQEAKK2luaGVyaXQgInN0ZC90aGluZyI7Citpbmhlcml0ICJzdGQvbW9yZSI7Citpbmhlcml0ICIvbWFpbC9uZWRpdCI7CisKKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8d2l6bGV2ZWxzLmg+CisjaW5jbHVkZSAiLi4vaGF1cy5oIgorCisjZGVmaW5lIEZBUShmKSAoU1BFQ0lBTFBBVEgrImZhcS8iKyhmKSkKKyNkZWZpbmUgRkFRVVNFUiAoeyAicnluZSIsICJ0b3NzIiwgInN0aW5nIiB9KQorI2RlZmluZSBJU19VU0VSKHBsKSAobWVtYmVyKEZBUVVTRVIsIGdldHVpZChwbCkpID49IDApCisKK3N0YXRpYyBzdHJpbmcgKnNlaXRlOworc3RhdGljIHN0cmluZyBmLCpzOworCittYXBwaW5nIHN5bm9ueW0gPSAoW10pOworCitjcmVhdGUoKQoreworICA6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfTkFNRSwiU2VoZXJGQVEiKTsKKyAgU2V0UHJvcChQX0dFTkRFUixGRU1BTEUpOyAKKyAgU2V0UHJvcChQX05PR0VULDEpOworICBBZGRJZCggKHsiZmFxIiwic2VoZXJmYXEiLCJGQVEiLCJTZWhlckZBUSIgfSkgKTsKKyAgQWRkQ21kKCJsaWVzIiwibGVzZW4iKTsKKyAgQWRkQ21kKCh7ImJlc2NocmVpYiIsImJlc2NocmVpYmUifSksImJlc2NocmVpYmVuIik7CisgIEFkZENtZCgic2VpdGVuIiwic2VpdGVuIik7CisgIEFkZENtZCgoeyJsb2VzY2giLCJsb2VzY2hlIn0pLCJsb2VzY2hlbiIpOworICBBZGRDbWQoKHsia29waWVyIiwia29waWVyZSJ9KSwia29waWVyZW4iKTsKKyAgcmVzdG9yZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHNlaXRlID0gZ2V0X2RpcihGQVEoIioiKSktKHsiLiIsIi4uIiwiZmFxLm8ifSk7Cit9CisKK2luaXQoKQoreworICB0aGluZzo6aW5pdCgpOworICBpZiAodGhpc19wbGF5ZXIoKSAmJiBJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIG5lZGl0Ojppbml0X3Jlc2N1ZSgpOworfQorCitzdHJpbmcKK19xdWVyeV9zaG9ydCgpCit7CisgIGlmICh0aGlzX3BsYXllcigpICYmIElTX1NFRVIodGhpc19wbGF5ZXIoKSkpCisgICAgcmV0dXJuICJEaWUgU2VoZXJGQVEiOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0cmluZyAKK19xdWVyeV9sb25nKCkKK3sKKyAgaWYgKHRoaXNfcGxheWVyKCkgJiYgSVNfU0VFUih0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gIkRpZXMgaXN0IFJ5bmVzIFNlaGVyRkFRLlxuXAorV2VubiBEdSB3ZWl0ZXJlIEZyYWdlbiBvZGVyIEFucmVndW5nZW4genUgZGllc2VyIEZBUSBoYXN0LFxuXAorc2VpIHNvIG5ldHQgdW5kIHNjaGlja2UgUnluZSBlaW5lbiBrdXJ6ZW4gQnJpZWZcblxuXAorWnVtIEluaGFsdCBkZXIgRkFRIGtvbW1zdCBEdSBtaXQgPmxpZXMgaW5oYWx0PFxuIjsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK2lkKHN0cmluZyBzdHIpCit7CisgIGlmICghSVNfU0VFUih0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHJldHVybiA6OmlkKHN0cik7Cit9CisKK2ludAorc2VpdGVuKHN0cmluZyBzdHIpCit7CisgIGludCBpLGo7CisgIHN0cmluZyAqc3luOworICBjbG9zdXJlIGZpbHRlcl9sZGZpZWQ7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmKCEoaSA9IHNpemVvZihzZWl0ZSkpKQorICAgIHdyaXRlKCJLZWluZSBTZWl0ZW4gYmVzY2hyaWViZW4hXG4iKTsKKyAgZWxzZSB7CisgICAgZmlsdGVyX2xkZmllZCA9IGxhbWJkYSgoeydpbmQsJ3BhZ2UsJ21hcF9sZGZpZWQvKicqL30pLAorCQkgICAgKHsjJz09LCdwYWdlLCh7IydbLypdJyovLCdtYXBfbGRmaWVkLCdpbmR9KX0pKTsKKyAgICBmb3IgKHN0ciA9ICIiLGktPTE7aT49MDtpLS0pIHsKKyAgICAgIHN5biA9IG1faW5kaWNlcyhmaWx0ZXJfaW5kaWNlcyhzeW5vbnltLGZpbHRlcl9sZGZpZWQsc2VpdGVbaV0sc3lub255bSkpOworICAgICAgcHJpbnRmKCJTZWl0ZSAnJXMnIC0gIixzZWl0ZVtpXSk7CisgICAgICBpZiAoaj1zaXplb2Yoc3luKSkgeworCWZvcihqLT0xO2o+PTA7ai0tKQorCSAgcHJpbnRmKCInJXMnICIsc3luW2pdKTsKKwl3cml0ZSgiXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwl3cml0ZSggIihrZWluZSBTeW5vbnltZSBkZWZpbmllcnQpXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludAorbGVzZW4oc3RyaW5nIHN0cikKK3sKKyAgaWYgKCFJU19TRUVSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikgeworICAgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IGRlbm4gbGVzZW4/XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBsb3dlcl9jYXNlKHRoaXNfcGxheWVyKCktPl91bnBhcnNlZF9hcmdzKCkpOworICBpZiAobWVtYmVyKHNlaXRlLHN0cik8MCkgeworICAgIGlmICghbWVtYmVyKHN5bm9ueW0sc3RyKSkgeworICAgICAgbm90aWZ5X2ZhaWwoIkRpZXNlIFNlaXRlIGdpYnQgZXMgbmljaHQuLi5cbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgCisgICAgICBzdHIgPSBzeW5vbnltW3N0cl07CisgIH0KKyAgdGhpc19wbGF5ZXIoKS0+TW9yZShGQVEoc3RyKSwxKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorYmVzY2hyZWliZW4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIGZhcSwqZGVzYzsKKyAgaW50IGk7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIHN0ciA9IGxvd2VyX2Nhc2UodGhpc19wbGF5ZXIoKS0+X3VucGFyc2VkX2FyZ3MoKSk7CisKKyAgaWYgKCFzdHIgfHwgc3RyID09ICIiKSB7CisgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgRHUgZGVubiBiZXNjaHJlaWJlbj9cbiIpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChzc2NhbmYoc3RyLCIlcyAlcyIsZmFxLHN0cikhPTIgfHwgIWlkKGZhcSkpIHsKKyAgICBub3RpZnlfZmFpbCgiU3ludGF4OiBiZXNjaHJlaWJlIGZhcSA8c2VpdGU+XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBpbXBsb2RlKG9sZF9leHBsb2RlKHN0ciwiICIpLSh7IiJ9KSwgIiAiKTsKKyAgZGVzYyA9IG9sZF9leHBsb2RlKGltcGxvZGUob2xkX2V4cGxvZGUoc3RyLCIsICIpLCIsIiksIiwiKTsKKyAgZiA9IDA7CisgIHMgPSAwOworCisgIGZvciAoaT1zaXplb2YoZGVzYyktMTtpPj0wO2ktLSkgeworICAgIGlmIChtZW1iZXIoc2VpdGUsZGVzY1tpXSk+PTApIHsKKyAgICAgIGYgPSBkZXNjW2ldOworICAgICAgcyA9IGRlc2MtKHtkZXNjW2ldfSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKCFmKSB7CisgICAgZiA9IGRlc2NbMF07CisgICAgcyA9IGRlc2NbMS4uXTsKKyAgfQorICB3cml0ZSgiQml0dGUgQmVzY2hyZWlidW5nIGZ1ZXIgZGllIEZBUS1TZWl0ZSAnIitmKyInIGFuZ2ViZW5cbiIpOworICBuZWRpdCgiZmFxIik7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZmFxKHN0cmluZyBzdHIpCit7CisgIGludCBpOworICBzdHJpbmcgZmlsZTsKKworICBpZiAoIXN0ciB8fCBzdHIgPT0gMCkgeworICAgIHdyaXRlKCIqKiBBYmJydWNoISAqKlxuTmljaHRzIGdlYWVuZGVydCFcbiIpOworICAgIHJldHVybjsKKyAgfQorICAKKyAgaWYgKGZpbGVfc2l6ZShmaWxlPUZBUShmKSk+PTApCisgICAgcm0oZmlsZSk7CisgIHdyaXRlX2ZpbGUoZmlsZSwgc3RyKTsKKyAgaWYgKG1lbWJlcihzZWl0ZSxmKT09LTEpCisgICAgc2VpdGUgKz0gKHtmfSk7CisKKyAgZm9yIChpPXNpemVvZihzKS0xO2k+PTA7aS0tKSAKKyAgICBzeW5vbnltICs9IChbIHNbaV0gOiBmIF0pOworCisgIHNhdmVfb2JqZWN0KEZBUSgiZmFxIikpOworfQorCitpbnQKK2xvZXNjaGVuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyAqc3luOworICBpbnQgaTsKKworICBpZighSVNfVVNFUih0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gMDsKKworICBzdHIgPSBsb3dlcl9jYXNlKHRoaXNfcGxheWVyKCktPl91bnBhcnNlZF9hcmdzKCkpOworICBpZiAoIXN0ciB8fCBzdHIgPT0gIiIpIHsKKyAgICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSBkZW5uIGxvZXNjaGVuP1xuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG1lbWJlcihzZWl0ZSxzdHIpPj0wKSB7CisgICAgc3luID0gbV9pbmRpY2VzKGZpbHRlcl9pbmRpY2VzKHN5bm9ueW0sCisJCQkJIGxhbWJkYSgoeydpbmQsJ3BhZ2UsJ21hcF9sZGZpZWQvKicqL30pLAorCQkJCQkoeyMnPT0sJ3BhZ2UsKHsjJ1svKl0nKi8sJ21hcF9sZGZpZWQsJ2luZH0pfSkpCisJCQkJICxzZWl0ZVtpXSxzeW5vbnltKSk7CisgICAgcm0oRkFRKHN0cikpOworICAgIHNlaXRlIC09ICh7c3RyfSk7CisgIH0KKyAgZWxzZSB7CisgICAgc3RyID0gaW1wbG9kZShvbGRfZXhwbG9kZShzdHIsIiAiKS0oeyIifSksICIgIik7CisgICAgc3luID0gb2xkX2V4cGxvZGUoaW1wbG9kZShvbGRfZXhwbG9kZShzdHIsIiwgIiksIiwiKSwiLCIpOworICB9CisgIGZvciAoaT1zaXplb2Yoc3luKS0xOyBpPj0wOyBpLS0pCisgICAgc3lub255bSA9IGZpbHRlcl9pbmRpY2VzKHN5bm9ueW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSgoeydrZXksJ2NtcH0pLAorCQkJCSAgICAoeyMnIT0sJ2tleSwnY21wLyonKi99KSksCisJCQkgICAgIHN5bltpXSk7CisKKyAgc2F2ZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHdyaXRlKCJPS1xuIik7CisgIHJldHVybiAxOworfQorCitpbnQKK2tvcGllcmVuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyAqcGFydDsKKyAgaW50IGk7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIHN0ciA9IGxvd2VyX2Nhc2UodGhpc19wbGF5ZXIoKS0+X3VucGFyc2VkX2FyZ3MoKSk7CisgIHBhcnQgPSBvbGRfZXhwbG9kZShzdHIsIiAiKS0oeyIifSk7CisgIGlmKHNpemVvZihwYXJ0KTw0IHx8ICFpZChwYXJ0WzBdKSB8fCBwYXJ0WzJdICE9ICJuYWNoIiB8fCAKKyAgICAgbWVtYmVyKHNlaXRlLHBhcnRbMV0pID09IC0xKSB7CisgICAgbm90aWZ5X2ZhaWwoImtvcGllcmUgZmFxIDxzZWl0ZT4gbmFjaCA8YWxpYXM+XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBwYXJ0WzFdOworICBwYXJ0PW9sZF9leHBsb2RlKGltcGxvZGUob2xkX2V4cGxvZGUoaW1wbG9kZShwYXJ0WzMuLl0sIiAiKSwiLCAiKSwiLCIpLCIsIik7CisgIGZvcihpPXNpemVvZihwYXJ0KS0xO2k+PTA7aS0tKQorICAgIHN5bm9ueW0gKz0gKFsgcGFydFtpXSA6IHN0ciBdKTsKKyAgc2F2ZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHdyaXRlKCJPSy5cbiIpOworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NlaGVyZmFxaW52aXMuYyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NlaGVyZmFxaW52aXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQzNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc2VoZXJmYXFpbnZpcy5jCkBAIC0wLDAgKzEsMjM2IEBACitpbmhlcml0ICJzdGQvdGhpbmciOworaW5oZXJpdCAic3RkL21vcmUiOworaW5oZXJpdCAiL21haWwvbmVkaXQiOworCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgIi4uL2hhdXMuaCIKKworI2RlZmluZSBGQVEoZikgKFNQRUNJQUxQQVRIKyJmYXEvIisoZikpCisjZGVmaW5lIEZBUVVTRVIgKHsgInJ5bmUiLCAidG9zcyIsICJzdGluZyIgfSkKKyNkZWZpbmUgSVNfVVNFUihwbCkgKG1lbWJlcihGQVFVU0VSLCBnZXR1aWQocGwpKSA+PSAwKQorCitzdGF0aWMgc3RyaW5nICpzZWl0ZTsKK3N0YXRpYyBzdHJpbmcgZiwqczsKKworbWFwcGluZyBzeW5vbnltID0gKFtdKTsKKwordm9pZCBjcmVhdGUoKQoreworICA6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfTkFNRSwiU2VoZXJGQVEiKTsKKyAgU2V0UHJvcChQX0dFTkRFUixGRU1BTEUpOyAKKyAgU2V0UHJvcChQX05PR0VULDEpOworICBBZGRJZCggKHsiZmFxIiwic2VoZXJmYXEiLCJGQVEiLCJTZWhlckZBUSIgfSkgKTsKKyAgQWRkQ21kKCJsaWVzIiwibGVzZW4iKTsKKyAgQWRkQ21kKCh7ImJlc2NocmVpYiIsImJlc2NocmVpYmUifSksImJlc2NocmVpYmVuIik7CisgIEFkZENtZCgic2VpdGVuIiwic2VpdGVuIik7CisgIEFkZENtZCgoeyJsb2VzY2giLCJsb2VzY2hlIn0pLCJsb2VzY2hlbiIpOworICBBZGRDbWQoKHsia29waWVyIiwia29waWVyZSJ9KSwia29waWVyZW4iKTsKKyAgcmVzdG9yZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHNlaXRlID0gZ2V0X2RpcihGQVEoIioiKSktKHsiLiIsIi4uIiwiZmFxLm8ifSk7Cit9CisKK3ZvaWQgaW5pdCgpCit7CisgIHRoaW5nOjppbml0KCk7CisgIGlmICh0aGlzX3BsYXllcigpICYmIElTX1VTRVIodGhpc19wbGF5ZXIoKSkpCisgICAgbmVkaXQ6OmluaXRfcmVzY3VlKCk7Cit9CisKK3N0cmluZworX3F1ZXJ5X3Nob3J0KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RyaW5nIAorX3F1ZXJ5X2xvbmcoKQoreworICAgIHJldHVybiAwOworfQorCitpbnQKK2lkKHN0cmluZyBzdHIpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VpdGVuKHN0cmluZyBzdHIpCit7CisgIGludCBpLGo7CisgIHN0cmluZyAqc3luOworICBjbG9zdXJlIGZpbHRlcl9sZGZpZWQ7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmKCEoaSA9IHNpemVvZihzZWl0ZSkpKQorICAgIHdyaXRlKCJLZWluZSBTZWl0ZW4gYmVzY2hyaWViZW4hXG4iKTsKKyAgZWxzZSB7CisgICAgZmlsdGVyX2xkZmllZCA9IGxhbWJkYSgoeydpbmQsJ3BhZ2UsJ21hcF9sZGZpZWQvKicqL30pLAorCQkgICAgKHsjJz09LCdwYWdlLCh7IydbLypdJyovLCdtYXBfbGRmaWVkLCdpbmR9KX0pKTsKKyAgICBmb3IgKHN0ciA9ICIiLGktPTE7aT49MDtpLS0pIHsKKyAgICAgIHN5biA9IG1faW5kaWNlcyhmaWx0ZXJfaW5kaWNlcyhzeW5vbnltLGZpbHRlcl9sZGZpZWQsc2VpdGVbaV0sc3lub255bSkpOworICAgICAgcHJpbnRmKCJTZWl0ZSAnJXMnIC0gIixzZWl0ZVtpXSk7CisgICAgICBpZiAoaj1zaXplb2Yoc3luKSkgeworCWZvcihqLT0xO2o+PTA7ai0tKQorCSAgcHJpbnRmKCInJXMnICIsc3luW2pdKTsKKwl3cml0ZSgiXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwl3cml0ZSggIihrZWluZSBTeW5vbnltZSBkZWZpbmllcnQpXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludAorbGVzZW4oc3RyaW5nIHN0cikKK3sKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikgeworICAgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IGRlbm4gbGVzZW4/XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBsb3dlcl9jYXNlKHRoaXNfcGxheWVyKCktPl91bnBhcnNlZF9hcmdzKCkpOworICBpZiAobWVtYmVyKHNlaXRlLHN0cik8MCkgeworICAgIGlmICghbWVtYmVyKHN5bm9ueW0sc3RyKSkgeworICAgICAgbm90aWZ5X2ZhaWwoIkRpZXNlIFNlaXRlIGdpYnQgZXMgbmljaHQuLi5cbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgCisgICAgICBzdHIgPSBzeW5vbnltW3N0cl07CisgIH0KKyAgdGhpc19wbGF5ZXIoKS0+TW9yZShGQVEoc3RyKSwxKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorYmVzY2hyZWliZW4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIGZhcSwqZGVzYzsKKyAgaW50IGk7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikgeworICAgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IGRlbm4gYmVzY2hyZWliZW4/XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICAKKyAgc3RyID0gbG93ZXJfY2FzZSh0aGlzX3BsYXllcigpLT5fdW5wYXJzZWRfYXJncygpKTsKKworICBpZiAoc3NjYW5mKHN0ciwiZmFxICVzIixzdHIpIT0xKSB7CisgICAgbm90aWZ5X2ZhaWwoIlN5bnRheDogYmVzY2hyZWliZSBmYXEgPHNlaXRlPlxuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgc3RyID0gaW1wbG9kZShvbGRfZXhwbG9kZShzdHIsIiAiKS0oeyIifSksICIgIik7CisgIGRlc2MgPSBvbGRfZXhwbG9kZShpbXBsb2RlKG9sZF9leHBsb2RlKHN0ciwiLCAiKSwiLCIpLCIsIik7CisgIGYgPSAwOworICBzID0gMDsKKworICBmb3IgKGk9c2l6ZW9mKGRlc2MpLTE7aT49MDtpLS0pIHsKKyAgICBpZiAobWVtYmVyKHNlaXRlLGRlc2NbaV0pPj0wKSB7CisgICAgICBmID0gZGVzY1tpXTsKKyAgICAgIHMgPSBkZXNjLSh7ZGVzY1tpXX0pOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGlmICghZikgeworICAgIGYgPSBkZXNjWzBdOworICAgIHMgPSBkZXNjWzEuLl07CisgIH0KKyAgd3JpdGUoIkJpdHRlIEJlc2NocmVpYnVuZyBmdWVyIGRpZSBGQVEtU2VpdGUgJyIrZisiJyBhbmdlYmVuXG4iKTsKKyAgbmVkaXQoImZhcSIpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2ZhcShzdHJpbmcgc3RyKQoreworICBpbnQgaTsKKyAgc3RyaW5nIGZpbGU7CisKKyAgaWYgKCFzdHIgfHwgc3RyID09IDApIHsKKyAgICB3cml0ZSgiKiogQWJicnVjaCEgKipcbk5pY2h0cyBnZWFlbmRlcnQhXG4iKTsKKyAgICByZXR1cm47CisgIH0KKyAgCisgIGlmIChmaWxlX3NpemUoZmlsZT1GQVEoZikpPj0wKQorICAgIHJtKGZpbGUpOworICB3cml0ZV9maWxlKGZpbGUsIHN0cik7CisgIGlmIChtZW1iZXIoc2VpdGUsZik9PS0xKQorICAgIHNlaXRlICs9ICh7Zn0pOworCisgIGZvciAoaT1zaXplb2YocyktMTtpPj0wO2ktLSkgCisgICAgc3lub255bSArPSAoWyBzW2ldIDogZiBdKTsKKworICBzYXZlX29iamVjdChGQVEoImZhcSIpKTsKK30KKworaW50Citsb2VzY2hlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKnN5bjsKKyAgaW50IGk7CisKKyAgaWYoIUlTX1VTRVIodGhpc19wbGF5ZXIoKSkpCisgICAgcmV0dXJuIDA7CisKKyAgc3RyID0gbG93ZXJfY2FzZSh0aGlzX3BsYXllcigpLT5fdW5wYXJzZWRfYXJncygpKTsKKyAgaWYgKCFzdHIgfHwgc3RyID09ICIiKSB7CisgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgRHUgZGVubiBsb2VzY2hlbj9cbiIpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChtZW1iZXIoc2VpdGUsc3RyKT49MCkgeworICAgIHN5biA9IG1faW5kaWNlcyhmaWx0ZXJfaW5kaWNlcyhzeW5vbnltLAorCQkJCSBsYW1iZGEoKHsnaW5kLCdwYWdlLCdtYXBfbGRmaWVkLyonKi99KSwKKwkJCQkJKHsjJz09LCdwYWdlLCh7IydbLypdJyovLCdtYXBfbGRmaWVkLCdpbmR9KX0pKQorCQkJCSAsc2VpdGVbaV0sc3lub255bSkpOworICAgIHJtKEZBUShzdHIpKTsKKyAgICBzZWl0ZSAtPSAoe3N0cn0pOworICB9CisgIGVsc2UgeworICAgIHN0ciA9IGltcGxvZGUob2xkX2V4cGxvZGUoc3RyLCIgIiktKHsiIn0pLCAiICIpOworICAgIHN5biA9IG9sZF9leHBsb2RlKGltcGxvZGUob2xkX2V4cGxvZGUoc3RyLCIsICIpLCIsIiksIiwiKTsKKyAgfQorICBmb3IgKGk9c2l6ZW9mKHN5biktMTsgaT49MDsgaS0tKQorICAgIHN5bm9ueW0gPSBmaWx0ZXJfaW5kaWNlcyhzeW5vbnltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEoKHsna2V5LCdjbXB9KSwKKwkJCQkgICAgKHsjJyE9LCdrZXksJ2NtcC8qJyovfSkpLAorCQkJICAgICBzeW5baV0pOworCisgIHNhdmVfb2JqZWN0KEZBUSgiZmFxIikpOworICB3cml0ZSgiT0tcbiIpOworICByZXR1cm4gMTsKK30KKworaW50Citrb3BpZXJlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKnBhcnQ7CisgIGludCBpOworCisgIGlmICghSVNfVVNFUih0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gMDsKKworICBzdHIgPSBsb3dlcl9jYXNlKHRoaXNfcGxheWVyKCktPl91bnBhcnNlZF9hcmdzKCkpOworICBwYXJ0ID0gb2xkX2V4cGxvZGUoc3RyLCIgIiktKHsiIn0pOworICBpZihzaXplb2YocGFydCk8NCB8fCBwYXJ0WzBdIT0iZmFxIiB8fCBwYXJ0WzJdICE9ICJuYWNoIiB8fCAKKyAgICAgbWVtYmVyKHNlaXRlLHBhcnRbMV0pID09IC0xKSB7CisgICAgbm90aWZ5X2ZhaWwoImtvcGllcmUgZmFxIDxzZWl0ZT4gbmFjaCA8YWxpYXM+XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBwYXJ0WzFdOworICBwYXJ0PW9sZF9leHBsb2RlKGltcGxvZGUob2xkX2V4cGxvZGUoaW1wbG9kZShwYXJ0WzMuLl0sIiAiKSwiLCAiKSwiLCIpLCIsIik7CisgIGZvcihpPXNpemVvZihwYXJ0KS0xO2k+PTA7aS0tKQorICAgIHN5bm9ueW0gKz0gKFsgcGFydFtpXSA6IHN0ciBdKTsKKyAgc2F2ZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHdyaXRlKCJPSy5cbiIpOworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NlaGVyZmFxbW9iaWwuYyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NlaGVyZmFxbW9iaWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTBkYjRiCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc2VoZXJmYXFtb2JpbC5jCkBAIC0wLDAgKzEsNzkgQEAKKy8vIHRyYWdiYXJlIFNlaGVyLUZBUSwgZ2lidCBlcyBpbSBTZWhlcmxhZGVuIHp1IGthdWZlbiBiencuIGF1dG9tYXRpc2NoIHp1ciBTZWhlcndlcmR1bmcKKy8vIFJpa3VzQG1nLm11ZC5kZQorCitpbmhlcml0ICJzdGQvdGhpbmciOworCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorI2luY2x1ZGUgIi4uL2hhdXMuaCIKKworI2RlZmluZSBGQVEoZikgKFNQRUNJQUxQQVRIKyJmYXEvIisoZikpCisKK3N0YXRpYyBzdHJpbmcgKnNlaXRlOworCittYXBwaW5nIHN5bm9ueW0gPSAoW10pOworCitjcmVhdGUoKQoreworLy8gIGlmICghY2xvbmVwKHRoaXNfb2JqZWN0KCkpKSByZXR1cm47CisgIDo6Y3JlYXRlKCk7CisgIFNldFByb3AoUF9TSE9SVCwiRGllIFNlaGVyRkFRIik7CisgIFNldFByb3AoUF9OQU1FLCJTZWhlckZBUSIpOworICBTZXRQcm9wKFBfR0VOREVSLEZFTUFMRSk7IAorICBTZXRQcm9wKFBfTE9ORywiRGllcyBpc3QgZGllIFNlaGVyRkFRLiBXZW5uIER1IHdlaXRlcmUgRnJhZ2VuIG9kZXIgIisKKyAgICAgICAgICAiQW5yZWd1bmdlbiB6dSBkaWVzZXIgRkFRXG5oYXN0LCBzZWkgc28gbmV0dCB1bmQgc2NoaWNrZSBTdGluZyAiKworICAgICAgICAgICJlaW5lbiBrdXJ6ZW4gQnJpZWYuIFp1bSBJbmhhbHQgZGVyIEZBUVxua29tbXN0IER1IG1pdCAiKworICAgICAgICAgICI+bGllcyBpbmhhbHQ8XG4iKTsKKyAgU2V0UHJvcChQX1dFSUdIVCwxMDApOworICBTZXRQcm9wKFBfVkFMVUUsMTAwMCk7CisgIEFkZElkKCh7ImZhcSIsInNlaGVyZmFxIn0pKTsKKyAgQWRkQ21kKCJsaWVzIiwibGVzZW4iKTsKKyAgcmVzdG9yZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHNlaXRlID0gZ2V0X2RpcihGQVEoIioiKSktKHsiLiIsIi4uIiwiZmFxLm8ifSk7Cit9CisKK2luaXQoKQoreworICBvYmplY3QgbzsKKyAgOjppbml0KCk7CisgIGlmICgobz1lbnZpcm9ubWVudCgpKSAmJiBxdWVyeV9vbmNlX2ludGVyYWN0aXZlKG8pICYmICFJU19TRUVSKG8pKQorICAgICBjYWxsX291dCgid2VjaCIsMCk7Cit9CisKK3dlY2goKQoreworICAgd3JpdGUoIkRpZSBTZWhlci1GQVEgbGFjaHQgRGljaCBhdXMgdW5kIGxvZXN0IHNpY2ggaW4gV29obGdlZmFsbGVuIGF1Zi5cbiIpOworICAgcmVtb3ZlKCk7Cit9CisKK2ludCBsZXNlbihzdHJpbmcgc3RyKQoreworICBpZiAoIXN0ciB8fCBzdHIgPT0gIiIpIHsKKyAgICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSBkZW5uIGxlc2VuP1xuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKGVudmlyb25tZW50KCkhPXRoaXNfcGxheWVyKCkpIAorICB7CisgICAgIG5vdGlmeV9mYWlsKCJEdSBtdXNzdCBkaWUgRkFRIHNjaG9uIGVyc3QgbmVobWVuIVxuIik7CisgICAgIHJldHVybiAwOworICB9CisgIHN0ciA9IGxvd2VyX2Nhc2UodGhpc19wbGF5ZXIoKS0+X3VucGFyc2VkX2FyZ3MoKSk7CisgIGlmIChtZW1iZXIoc2VpdGUsc3RyKTwwKSB7CisgICAgaWYgKCFtZW1iZXIoc3lub255bSxzdHIpKSB7CisgICAgICBub3RpZnlfZmFpbCgiRGllc2UgU2VpdGUgZ2lidCBlcyBuaWNodC4uLlxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSAKKyAgICAgIHN0ciA9IHN5bm9ueW1bc3RyXTsKKyAgfQorICB0aGlzX3BsYXllcigpLT5Nb3JlKEZBUShzdHIpLDEpOworICByZXR1cm4gMTsKK30KKworc3RyaW5nIF9xdWVyeV9leHRyYWxvb2soKQoreworICAgb2JqZWN0IG87CisgICBpZiAoKG89ZW52aXJvbm1lbnQoKSkgJiYgKG8tPlF1ZXJ5UHJvcChQX0dFTkRFUik9PUZFTUFMRSkpCisgICAgICByZXR1cm4gIk1pdCBpaHJlciBTZWhlci1GQVEgb3V0ZXQgc2llIHNpY2ggYWxzIFd1cnN0c2VoZXJpbi5cbiI7CisgICByZXR1cm4gIk1pdCBzZWluZXIgU2VoZXItRkFRIG91dGV0IGVyIHNpY2ggYWxzIFd1cnN0c2VoZXIuXG4iOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlYzk3YgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzAKQEAgLTAsMCArMSwxOCBAQAorMC4gTkVVSUdLRUlURU4KK0hpZXIgYWt0dWVsbGUgQWVuZGVydW5nZW4gZGVyIFNlaGVyRkFRIDIuMCAoU3RhbmQgMi4xMS4xOTk1KToKKworLSBadW5hZWNoc3QgZWluZW4gZ3Jvc3NlbiBEYW5rIGFuIEN1Y2h1bGxpbiwgZGVyIGVpbmUgZGV0YWlsbGllcnRlCisgIEJlc2NocmVpYnVuZyBkZXIgQXJ0aWtlbCBhdXMgZGVtIFNlaGVybGFkZW4genVyIEZBUSBiZWlnZXRyYWdlbiBoYXQuCistIEVuZGxpY2ggZGllIG5ldWUgRkFRISBEaWUgbWVpc3RlbiBJbmZvcm1hdGlvbmVuIHdhcmVuIGZhc3QgZWluIEphaHIgYWx0LAorICB1bmQgaWNoIGhvZmZlLCBhbGxlIHJlbGV2YW50ZW4gSW5mb3JtYXRpb25lbiBhdWYgZGVtIGFrdHVlbGxlbiBTdGFuZCB6dQorICBoYWJlbi4KKy0gTWVocmVyZSBTZWhlcnBvcnRhbGUgd3VyZGVuIGluIGxldHp0ZXIgWmVpdCBuZXUgYW5nZWhhZW5ndC4gV2VsY2hlIG51bm1laHIKKyAgdm9yaGFuZGVuIHNpbmQsIGthbm5zdCBkdSBpbiAnMS4gVHJhbnNwb3J0bW9lZ2xpY2hrZWl0ZW4nIG5hY2hsZXNlbi4KKy0gVG9ldGVyIGhhdCBkYXMgc2V0bW91dCBnZWFlbmRlcnQgLSBudW5tZWhyIGthbm4gZGllIFJpY2h0dW5nc2FuZ2FiZQorICB3ZWdnZWxhc3NlbiBvZGVyIGFuIGVpbmUgYmVsaWViaWdlIFN0ZWxsZSBpbSBUZXh0IGdlc2V0enQgd2VyZGVuLgorLSBJbSBTZWhlcmxhZGVuIGdpYnQgZXMgZWluaWdlIG5ldWUgQXJ0aWtlbDsgaGllcnp1ICc3LiBTZWhybGFkZW4nLgorLSBEaWUgUGFyYWxsZWxkaW1lbnNpb24gd2FlY2hzdCBzdGFlbmRpZzsgZWluaWdlIGludGVyZXNzYW50ZSBNb25zdGVyIGhpZXJhdXMKKyAgc2luZCBpbiAnMTAuIFBhcmFsbGVsZGltZW5zaW9uJyBhdWZnZWZ1ZWhydCwgYWJlciB3aWUgc28gb2Z0LCBzZWxic3QKKyAgc2NoYXVlbiwgdW5kIG1hbiBmaW5kZXQgd2FzIG5ldWVzIDstKS4KKworCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTk1NGMwCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMQpAQCAtMCwwICsxLDQ3IEBACisxLiBUcmFuc3BvcnRtb2VnbGljaGtlaXRlbi4KKworQWxzIFNlaGVyIGthbm5zdCBEdSBudW5tZWhyIGF1ZiBlaW5pZ2UgbmV1ZSBGb3J0YmV3ZWd1bmdzbW9lZ2xpY2hrZWl0ZW4KK3p1Z3JlaWZlbiwgdW0gc2NobmVsbGVyIHZvbiBlaW5lbSBPcnQgenVtIGFuZGVyZW4genUgZ2VsYW5nZW46CisKK0EpIFNlaGVycG9ydGFsZQorQWxzIFNlaGVyIGthbm5zdCBEdSBhYiBzb2ZvcnQgbWFnaXNjaGUgUG9ydGFsZSBudXR6ZW4sIHVtIHNjaG5lbGxlcgordm9uIGVpbmVtIE9ydCB6dW0gYW5kZXJlbiB6dSBnZWxhbmdlbi4gZXMgZ2lidCBpbSBNb21lbnQgMjEgVG9yZSwKK2RpZSBhbiBmb2xnZW5kZW4gU3RlbGxlbiBsaWVnZW46CisKKyAxLiBUYW1pYmFyIERzY2h1bmdlbCAgICAgICAgICAgICAgMTEuIEtsaXBwZW5wZmFkIGF1ZiBBdXJvcmEKKyAyLiBCZWkgZGVuIERyYWNoZW56aW5uZW4gICAgICAgICAgMTIuIEhhdXB0c3RyYXNlIFN1ZWRlbmRlIGF1ZiBTdm9sdmFlcgorIDMuIFBvcnQgVmFpbmVyIFN0YWR0dG9yICAgICAgICAgICAxMy4gSW0gQmVyZ2RvcmYKKyA0LiBBbiBlaW5lbSBCYWNoIGltIEdlYmlyZ2UgICAgICAgMTQuIFZvcnBsYXR6IFRyYXVrYXBlbGxlCisgNS4gSW0gUG9sYXJnZWJpZXQgICAgICAgICAgICAgICAgIDE1LiBMYXNoCisgNi4gVHVuZHJhICAgICAgICAgICAgICAgICAgICAgICAgIDE2LiBJbSBEc2NodW5nZWwKKyA3LiBGZWVuc3RyYXNzZSAgICAgICAgICAgICAgICAgICAgMTcuIEF1ZiBkZW4gV29sa2VuCisgOC4gV2FsZHdlZyAgICAgICAgICAgICAgICAgICAgICAgIDE4LiBBbSBGbHVzcyBUYWluIFdlbiBUYWkKKyA5LiBSdWluZW5zdGFkdCAgICAgICAgICAgICAgICAgICAgMTkuIFJpdHRlcmRlbmttYWwgYmVpIE9ya2hhdXNlbgorMTAuIFZvcnBsYXR6IEFyZW5hICAgICAgICAgICAgICAgICAyMC4gUm9kZWxiYWhuCisyMS4gSG9iYml0ZG9yZgorCitEaWVzZSBUb3JlIGthbm5zdCBkdSBtaXQgZGVtIEJlZmVobCAndGVsZXBvcnRpZXJlJyBiZW51dHplbi5EaWVzIHNldHp0CithbGxlcmRpbmdzIHZvcmF1cywgZGFzcyBEdSBkaWVzZXMgUG9ydGFsIGJlcmVpdHMgZ2VmdW5kZW4gaGFzdC4gRHUgbXVzc3QgZGllCitQb3J0YWxlIGFsc28genVuYWVjaHN0IGVpbm1hbCBzdWNoZW4gOykuRWluIFRlbGVwb3J0aWVyZW4genUgZWluZW0gYW5kZXJlbgorUG9ydGFsIGtvc3RldCA1MCBNUC4gRGEgZGFuYWNoIGltbWVyIHdpZWRlciBnZWZyYWd0IHdpcmQ6IE5hdHVlcmxpY2gga2FubiBtYW4KK2RpZSBQb3J0YWxlIG51ciBiZW51dHplbiwgd2VubiBtYW4gc2ljaCBnZXJhZGUgYmVpIGVpbmVtIGJlZmluZGV0IDspKS4KKworQikgUGVnYXN1cworRHUga2FubnN0IGViZW5zbyBtaXQgUGVnYXN1cyBkdXJjaCBkaWUgR2VnZW5kIGZsaWVnZW4gLSBkYXMga29zdGV0IGtlaW5lCitNUCB1bmQgZ2VodCBhdWNoIHJlY2h0IGZpeGUgLSBIYWx0ZXN0ZWxsZW46IHZvciBkZW0gRWxmZW5kb3JmLCBpbQorUG9sYXJnZWJpZXQsIFp3ZXJnZW5zdGFkdCwgU3ZvbHZhZXIsIFBvcnQgVmFpbi4gRWlubWFsIG1pdGZsaWVnZW4KK2tvc3RldCAyMjIgTXVlbnplbiwgdW5kIG1hbiBrYW5uIGFscyBTZWhlciBlaW5lbiBub3JtYWxlbiBTcGllbGVyCit6dW0gTWl0ZmxpZWdlbiBlaW5sYWRlbi4gSWNoIGZsdWNoZSByZWdlbG1hZXNzaWcgdWViZXIgUGVnYXN1cywgd2VpbAorbWFuIGVzIGthdW0gc2NoYWZmdCwgPmJlc3RlaWdlIFBmZXJkPCBlaW56dWdlYmVuLCBzbyBzY2huZWxsIGhlYnQKK2RhcyBUaWVyY2hlbiB3aWVkZXIgYWIuIERlc2hhbGIgaGFiIGljaCBtaXIgZWluIGFsaSBkYXJhdWYgZ2VsZWd0LCBpc3QKK3dvaGwgZW1wZmVobGVuc3dlcnQuCisKK0MpIFNpZWJlbm1laWxlbnN0aWVmZWwKK0RpZXNlIGthbm4gbWFuIGltIFNlaGVyIGltIFNlaGVybGFkZW4ga2F1ZmVuOyBzaWUgaGFiZW4gZGllIEVpZ2Vuc2NoYWZ0LAoraWhyZW4gVHJhZWdlciBpbW1lciBiaXMgenVyIG5hZWNoc3RlbiBLcmV1enVuZyB3ZWl0ZXJ6dXRyYWdlbiwgd2FzIGJlaSBsYW5nZW4KK1dlZ2VuIHNpbm52b2xsIHNlaW4ga2FubiwgaW4gdmllbGVuIEdlZ2VuZGVuIGplZG9jaCBuaWNodCBmdW5rdGlvbmllcnQsIHdlaWwKK2luIGplZGVtIFJhdW0gbWVociBhbHMgendlaSBBdXNnYWVuZ2Ugdm9ya29tbWVuLiBBdXNzZXJkZW0gaXN0IGRhcyBHYW56ZQorZXh0cmVtIGdld29laG51bmdzYmVkdWVyZnRpZywgZGEgbWFuIGJla2FubnRlIFdlZ2UgamV0enQgbWl0IGdhbnogYW5kZXJlbgorVGFzdGVua29tYmluYXRpb25lbiBhYmdlaHQsIGFscyB3ZW5uIG1hbiBkaWUgV2VnZSBlaW5mYWNoIHdpZSBnZXdvaG50CisncnVudGVycmF0dGVydCcuIEVpbmZhY2ggbWFsIGF1c3Rlc3RlbiwgbHVzdGlnIGlzdHMgYWxsZW1hbC4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTAgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGU5NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTAKQEAgLTAsMCArMSwyMyBAQAorCisxMC4gUEFSQUxMRUxESU1FTlNJT04KKworV2Fyc2NoZWlubGljaCBoYXN0IER1IHNjaG9uIGltbWVyIGdlZGFjaHQ6ICdFaW5lIFdlbHQgamVuc2VpdHMgZGVzCitNb3JnZW5HcmF1ZW5zIGdpYnQgZXMgZ2VuYXVzb3dlbmlnIHdpZSBHZWhlaW1idWVuZGUhJyAtIE51biwgYmV6dWVnbGljaCBkZXIKK0dlaGVpbWJ1ZW5kZSBtYWcgZGFzIHp1dHJlZmZlbiwgdW5kIG5hdHVlcmxpY2ggc29sbHN0IER1IGF1Y2gga2VpbmUgV2VsdAoraGFiZW4gbmViZW4gZGVtIE1vcmdlbkdyYXVlbiwgYWJlciBlcyBnaWJ0IGltIE1VRCBlaW5lIFdlbHQsIGRpZSBudXIgU2VoZXIKK2JldHJldGVuIGtvZW5uZW46IERpZSBQYXJhbGxlbGRpbWVuc2lvbi4KKworTW9tZW50YW4gaXN0IGRpZSBQYXJhbGxlbGRpbWVuc2lvbiBub2NoIGVpbmUgcmVsYXRpdiBrbGVpbmUgV2VsdCwgZGllIHZvbiBkZW4KK21laXN0ZW4gU2VoZXJuIGVoZXIgcGVyIFp1ZmFsbCBiZXRyZXRlbiB3aXJkOyBtYW4gZXJyZWljaHQgc2llIG5hZW1saWNoIG51ciwKK3dlbm4gYmVpbSB0ZWxlcG9ydGllcmVuIGluIGVpbmVtIG1hZ2lzY2hlbiBQb3J0YWwgZXR3YXMgc2NoaWVmIGxhZXVmdC4uLiBudW4sCitkaWVzZW4gRWZmZWt0IGthbm4gbWFuIHVta2VocmVuLCBlcyBnaWJ0IGF1Y2ggZWluIHN0YXJyZXMgUG9ydGFsLCBkYXMgZWluZW0KK2RhcyBiZXd1c3N0ZSBCZXRyZXRlbiAvIFZlcmxhc3NlbiBkZXIgUGFyYWxsZWx3ZWx0IGVybW9lZ2xpY2h0LiBCZXZvciBtYW4KK2plZG9jaCBIYWxzIHVlYmVyIEtvcGYgaW4gYmVrYW5udGUgU3BoYWVyZW4genVydWVja2tlaHJ0LCBzb2xsdGUgbWFuIHNpY2gKK3NjaG9uIGVpbiB3ZW5pZyBpbiBkZXIgUGFyYWxsZWxkaW1lbnNpb24gdW1zY2hhdWVuLCBkYSBkaWVzZSBzdGV0aWcgYXVzZ2ViYXV0Cit3aXJkIHVuZCBtaXR0bGVyd2VpbGUgZWluaWdlIGludGVyZXNzYW50ZSBNb25zdGVyIGVudGhhZWx0LiBEaWVzZSBmaW5kZW4gc2ljaAorSGF1cHRzYWVjaGxpY2ggaW4gZGVyIEViZW5lLCB3byBtYW4gZWlubWFsIGRlbiBXZWdoaWVyLCBkZW4gQ3UgU2l0aCB1bmQgZGVuCisoZGVuID8gKERJRSEpKSBHb2JsaW5kcmFjaGVuIGF1ZnN1Y2hlbiBzb2xsdGU7IGFiZXIgYXVjaCBpbiB1bmQgdW0gU2NocnVtcGZpcworR3J1ZnQgZmluZGVuIHNpY2ggZWluaWdlIGludGVyZXNzYW50ZSBNb25zdGVyLgorCitVbmQ6IEhhdmUgZnVuLCBzY2h3YWNoZSBOZXJ2ZW4gc29sbHRlIG1hbiBkb3J0IG5pY2h0IG1pdGJyaW5nZW4gOi0pLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xMSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MmI3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xMQpAQCAtMCwwICsxLDE0IEBACisKKzExLkZJTkdFUi1CRUZFSEwKKworV2VubiBEdSBlaW5tYWwgcHJvYmllcnN0LCBlaW5lbiBhbmRlcmVuIFNwaWVsZXIgenUgZmluZ2Vybiwgd2lyc3QgRHUKK2Zlc3RzdGVsbGVuLCBkYXNzIER1IG51biBlaW5pZ2UgenVzYWV0emxpY2hlIEluZm9ybWF0aW9uZW4gZXJoYWVsc3QsIGJlaQorbm9ybWFsZW4gU3BpZWxlcm4gaWhyIEFsdGVyLCB1bmQgYmVpIFNlaGVybiAvIE1hZ2llcm4genVzYWV0emxpY2ggZGllCit1ZWJlciBQbGFuIHVuZCBQcm9qZWt0IGVpbmdlZ2ViZW5lbiBJbmZvcm1hdGlvbmVuLgorCitTbywgdW5kIHdlbm4gRHUgZGFubiBhdWNoIG9iZW5kcmVpbiBuaWNodCBhbGx6dSB6aW1wZXJsaWNoIGJpc3QsIHVuZCBnZXJuZQorTGV1dGUgRGljaCBmaW5nZXJuIGxhZXNzdCwgc28gd2lyc3QgRHUgbmF0dWVybGljaCBhdWNoIGVpbmVuIFBsYW4gdW5kIGVpbgorUHJvamVrdCBpbiBEZWluZW0gJ2ZpbmdlcicgZWluc2V0emVuLiBEaWVzIGthbm5zdCBEdSBtaXQgSGlsZmUgZGVzCitQbGFuZWRpdG9ycyBtYWNoZW4sIGRlbiBEdSBpbSBTZWhlcmxhZGVuIGVyaGFlbHN0LgorCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzEyIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5M2Y2NAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzEyCkBAIC0wLDAgKzEsMTUgQEAKKzEyLiBFQ0hPICYgUi1FTU9URQorU29sbHRlc3QgRHUgaXJnZW5kd2FubiBkZW4gQXJjaGllIGdlbG9lc3QgaGFiZW4gKHdhcyBkcmluZ2VuZCB6dQorZW1wZmVobGVuIGlzdCwgZGVubiBkYXMgaXN0IGRlZmluaXRpdiBlaW5lcyBkZXIgYmVzdGVuIHF1ZXN0cyBoaWVyIG5lYmVuCitkZW4gUHlyYXMgdW5kIFRhcmtvIC0gSU1ITykgLSBkYW5uIHN0ZWh0IERpciBhbHMgU2VoZXIgaGludGVyaGVyIGRlcgorRUNITy1CZWZlaGwgenVyIFZlcmZ1ZWd1bmcsIG1pdCBkZXNzZW4gSGlsZmUgRHUgaW4gZGVyIExhZ2UgYmlzdCwKK2VpbmVuIHgtQmVsaWViaWdlbiBUZXh0IGluIGRlbSBSYXVtIGFienVzZXR6ZW4sIGluIGRlbSBEdSBEaWNoCitiZWZpbmRlc3QsIHNvIGRhRGljaCBhdWNoIGFsbGUgYW5kZXJlbiBTcGllbGVyIGRpZXNlbiBUZXh0IGxlc2VuIGtvZW5uZW4uLi4KK05ldHRlIFNwaWVsZXJlaSwgZGllIGxlaWRlciA0OCBNUCBrb3N0ZXQsIGFiZXIgdHJvdHpkZW0gaW1tZXIgenUgZWluZW0KK2tsZWluZW4gR2FnIGd1dCBpc3QgKGdlbGxlLCBCbG9vZGdvcmUgPz8/KS4KKworU29sbHRlc3QgRHUgZGFzIFNlaGVycXVlc3QgJ0RpZSBLcmlzdGFsbGt1Z2VsJyBnZWxvZXN0IGhhYmVuLCBzbyBzdGVodCBEaXIKK2F1Y2ggZGFzICdyLWVtb3RlJyB6dXIgVmVyZnVlZ3VuZywgZGFzIGVzIERpciBlcm1vZWdsaWNodCwgZGFzIHNlaXQgZGVyCitMb2VzdW5nIGRlcyBBbWFyeWxsaXMtUXVlc3RzIChoYXN0IER1IGRvY2ggd29obCAhISkgbW9lZ2xpY2hlIGVtb3RlIGF1Y2ggYXVmCitTcGllbGVyIGF1c3NlcmhhbGIgZGVzIFJhdW1lcyBhbnp1d2VuZGVuLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xMyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODY2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xMwpAQCAtMCwwICsxLDE0IEBACisxMy4gTUFHSVNDSEVSIEJFVVRFTAorSW4gZGVtIFNlaGVybGFkZW4gYXVmIFN2b2x2YWVyIGthbm5zdCBEdSBlaW5lbiBtYWdpc2NoZW4gQmV1dGVsIGthdWZlbiwgbWl0CitkZW0gRHUgT2JqZWt0ZSBlcnpldWdlbiBrYW5uc3QuIEdydW5kc2FldHpsaWNoIGlzdCBkaWVzIHp3YXIgbnVyIGVpbiBTcGFzcywKK2FiZXIgZXMgbGFzc2VuIHNpY2ggZGFtaXQgZ3J1bmRzYWV0emxpY2ggYXVjaCBPYmpla3RlIGVyemV1Z2VuLCBkaWUgaW0gU3BpZWwKK3ZlcndlbmRldCB3ZXJkZW4ga29lbm5lbi4gQWxsZXJkaW5ncyBoYWx0ZW4gZGllc2UgT2JqZWt0ZSBudXIga25hcHBlIDE1CittaW51dGVuLCBiZXZvciBzaWUgc2ljaCBpbiBMdWZ0IGF1ZmxvZXNlbi4KKworRGEgZGllIEFud2VuZHVuZyBkZXMgQmV1dGVscyBvZnRtYWxzIGRhcmFuIHNjaGVpdGVydCwgZGFzcyBlciBlaW4gd2VuaWcga29tLQorcGxpemllcnQgenUgQmVkaWVuZW4gdW5kIHNjaGxlY2h0IGRva3VtZW50aWVydCBpc3QsIGhhYmUgaWNoIGVpbmUgc3RlcC1ieS0KK3N0ZXAgQW5sZWl0dW5nIGRhenUgZ2VzY2hyaWViZW4sIGRpZSBhbGxlcmRpbmdzIHJlY2h0IGF1c2Z1ZWhybGljaCBpc3Q7Citzb2xsdGVzdCBEdSBkaWUgRkFRIG51ciBmdWVyIGVpbmVuIGt1cnplbiBVZWJlcmJsaWNrIGxlc2VuIHdvbGxlbiwgc28ga2FubnN0CitEdSBkaWUgQW5sZWl0dW5nIG5hdHVlcmxpY2ggYXVjaCBzcGFldGVyIGxlc2VuLiBBbnNvbnN0ZW46IERpZSBBbmxlaXR1bmcKK2xpZXN0IG1hbiBtaXQgJ2xpZXMgQW5sZWl0dW5nJyEhIDstKQorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xNCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDg1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xNApAQCAtMCwwICsxLDYxIEBACisxNC4gU0VIRVJIQUVVU0VSCitJbnRlcmVzc2FudGVzIFRoZW1hOiBEaWUgU2VoZXJoYXVzZXI6IFNpZSBnaWJ0IGVzIG51biBzZWl0IGNhLiBNaXR0ZQorT2t0b2JlciA5NCwgdW5kIGZvbGdlbmRlcyBpc3QgZGF6dSBhbnp1bWVya2VuOgorSS4gSW4gZGVyIEJhdXNwYXJrYXNzZSBpbiBEcmFjaGVuaG9ydCBnaWJ0IGVzIGRpZSBub2V0aWdlbiBJbmZvcm1hdGlvbmVuCit6dSBkZW4gSGF1ZXNlcm4uIERhcyBJbmZvcm1hdGlvbnNibGF0dCBmdWVyIDEwLjAwMCBNdWVuemVuIHNvbGx0ZSBtYW4KK3NpY2ggZWJlbiB6dWxlZ2VuLCBhdWNoIHdlbm4gbnVyIGVpbmUgU2VpdGUgSW5mb3MgZHJpbnN0ZWhlbiwgdW5kIGVzCituYWNoIGRlbSBlcnN0ZW4gTGVzZW4gd2VnIGlzdCA6KCguCitHcnVuZHNhZXR6bGljaCBnaWJ0IGVzIHp3ZWkgTW9lZ2xpY2hrZWl0ZW4sIHp1IGVpbmVtIEhhdXMgenUga29tbWVuOgorYSkuIERlciBzY2huZWxsZSBWZXJ0cmFnOiBLb3N0ZXQgMiBNaW8gRVBzLCBtYW4gbXVzcyBhbGxlIDIgb25saW5lIFN0dW5kZW4KK2VpbmUgUmF0ZSB2b24gODAuMDAwIEVQcyBlaW56YWhsZW4gLSBpbnNnZXNhbXQgYWxzbyAyNSBSYXRlbi4gRGllCitaZWl0IGthbm4gdS5VLiBuYWNoIGVpbmVtIENyYXNoIGV0d2FzIGtuYXBwIHdlcmRlbiwgZGEgbWFuIGRhbm4KK25pY2h0IGRpZSBub2V0aWdlIFplaXQgaGF0LCB1bSBzaWNoIHNlbGJzdCBlcnN0bWFsIEF1c3J1ZXN0dW5nIHp1CitiZXNvcmdlbiwgdW5kIGphIHZvciBhbGxlbSBhbGxlIFNwaWVsZXIgZGFiZWkgc2luZCwgc2ljaCBBdXNydWVzdHVuZyB6dQorYmVzY2hhZmZlbiwgc28gZGFzcyBuaWNodCB2aWVsIHp1IGhvbGVuIGlzdC4KK2IpLiBEZXIgbGFuZ3NhbWUgVmVydHJhZzogS29zdGV0IDIuNCBNaW8gRXBzIC0gYWxzbyAzMCBSYXRlbiwKK21hbiBtdXNzIGFsbGUgNCBvbmxpbmUgU3R1bmRlbiBzZWluZSBSYXRlIHZvbiA4MC4wMDAgRVBzCitlaW56YWhsZW4uIFNpY2hlciBiZXNzZXIgZ2VlaWduZXQgZnVlciBkaWVqZW5pZ2VuLCBkaWUgb2Z0IHRhbGtlbiwgdW5kIG5pY2h0CitkaWUgbmFlY2hzdGUgV29jaGUgbnVyIG1pdCBtZXR6ZWxuIHZlcmJyaW5nZW4gd29sbGVuIC0KK0dlc2NobWFja3NzYWNoZS4uLi4gbmF0dWVybGljaCBrYW5uIG1hbiBiZWkgYmVpZGVuIFZlcnRyYWdzYXJ0ZW4gYXVjaAorc2NobmVsbGVyIGVpbnphaGxlbiwgYWxzbyBtdXNzIG1hbiBzaWNoIGtlaW5lIFNvcmdlIG1hY2hlbiwgZGFzcyBtYW4KK2JlaW0gNC1zdHVuZGVuIFZlcnRyYWcgZXdpZyB3YXJ0ZW4gbXVzcywgYmlzIG1hbiBlaW5lbiBuZXVlbgorTWFzdGVyYmxvY2sga3JpZWd0LCBhdWYgZGVtIGRpZSBHdXRoYWJlbiBndXRnZXNjaHJpZWJlbiB3ZXJkZW4uCitjKSBXZWxjaGUgVmVydHJhZ3Nmb3JtIG1hbiB3YWVobHQsIGlzdCBlaW5lbSBzZWxic3QgdWViZXJsYXNzZW4uLi4uIGFiZXIKK3VlYmVybGVncyBEaXIgZ3V0LCBvYiBEdSBkaWUgWmVpdCB6dW0gdGFsa2VuIGJlaGFsdGVuIHdpbGxzdCwgZGVubiBkaWUKK3dpcmQgYmVpbSAyaCAtIFZlcnRyYWcgc2NobmVsbCBrbmFwcCAtIG5pY2h0IHp1IHZlcmdlc3NlbiBkaWUgVGF0c2FjaGUsCitkYXNzIGJlaSBVZWJlcnppZWhlbiBkZXIgRWluemFobHVuZ3N6ZWl0IGZ1ZXIgZGllIGVpbnplbG5lbiBSYXRlbgorenVuYWVjaHN0IGVpbmUgc2FmdGlnZSBTdHJhZmUgZmFlbGxpZyB3aXJkLCB1bmQgZGFubiBzb2dhciBkZXIgZ2FuemUKK1ZlcnRyYWcgZmxvZXRlbiBnZWhlbiBrYW5uLi4uLgorZCkuIE1laW5lIEFubWVya3VuZzogV2VyIHNvIHJpY2h0aWcgaGVpc3MgYXVmIGVpbiBIYXVzIGlzdCwgbWV0emVsdCBlaW5lCituYWNodCBkdXJjaC4gSWNoIGhhYiBkYW1hbHMgdW0gMC4wMCBVaHIgYW5nZWZhbmdlbiwgdW5kIG1vcmdlbnMgdW0gOAord2FyIGRhcyBIYXVzIGZlcnRpZyAtIG5hY2h0cyBzaW5kIHdlbmlnZXIgU3BpZWxlciBkYWJlaSwgdW5kIG1hbiBoYXQKK21laHIgT3BmZXIsIGRpZSBtYW4gYXVzc2NobGFjaHRlbiBrYW5uLi4uLi4uIER1cmNoc2Nobml0dHN6ZWl0IGZ1ZXIgZWluZQorUmF0ZSB3YXIgbGF1dCBsb2dmaWxlIDIzIG1pbnV0ZW4uLi4uIHNpY2hlcmxpY2ggZWluIEFyZ3VtZW50IGZ1ZXIgZGVuIDItCitTdHVuZGVuLSBWZXJ0cmFnLgorSUkuIFNlaXQgTWl0dGUgSmFudWFyIGtvZW5uZW4gaW4gZGVuIEhhZXVzZXJuIGF1Y2ggZXh0cmEtUmFldW1lIGVpbmdlYmF1dAord2VyZGVuLiBEaWVzZSBrb3N0ZW4gcHJvIFN0dWVjayAyMDAuMDAwIE11ZW56ZW4sIHVuZCBtYW4ga2Fubiwgd2llCithdWNoIGJlaW0gSGF1c2JhdSwgendpc2NoZW4gZWluZW0gc2NobmVsbGVuIHVuZCBlaW5lbSBzYW5mdGVuIFZlcnRyYWcKK3dhZWhsZW4uCitNYXhpbWFsIGtvZW5uZW4gOSBSYWV1bWUgYW4gZGFzIEhhdXMgYW5nZWJhdXQgd2VyZGVuLiBTb2Zlcm4gaW4gZWluZW0KK1JhdW0gbWVocmVyZSBIYWV1c2VyIHN0ZWhlbiwgYmVzdGVodCBhdWNoIGRpZSBNb2VnbGljaGtlaXQsIGRpZSBkdXJjaAorZGVuIEJlZmVobCBBdXNnYW5nIG1pdGVpbmFuZGVyIHp1IHZlcmJpbmRlbi4KK0lJSS4gSW4gZGVuIFNlaGVyaGFldXNlcm4gc2luZCBzZWl0IEZlYnJ1YXIgJyA5NSBkYXMgQmVzY2hyZWliZW4gdm9uIEJlZmVobGVuCit1bmQgc3BlemlmaXNjaGUgQXVzZ2FiZW4gbW9lZ2xpY2guIFNvIGthbm4gbWFuIFJhc3NlbiB1bmQgLSBHZXNjaGxlY2h0c3NwZS0KK3ppZmlzY2hlIEF1c2dhYmVuIG1hY2hlbi4gRWJlbnNvIGlzdCBlcyBtb2VnbGljaCwgZHVyY2ggRWluZ2FiZSB2b24gQmVmZWhsZW4KK2Jlc3RpbW10ZSBBdXNnYWJlbiB6dSBlcnJlaWNoZW4sIHouQi4gJ2RydWVja2Uga25vcGYnIC0gJyBlaW4gRmFkZW4gZmFlbGx0Cit2b24gZGVyIERlY2tlJyB1c3cuIFdpZSBkYXMgdm9yIHNpY2ggZ2VodCwgd2FlcmUgaGllciB6dSB1bWZhc3NlbmQsIGF1c3Nlci0KK2RlbSBoYXQgV2FyZ29uIGVpbmUgaGVydm9ycmFnZW5kZSBIaWxmZXNlaXRlIHp1IGRlbiBIYWV1c2VybiBlcnN0ZWxsdCwgZGllCitzZWhyIGRldGFpbGxpZXJ0IGVya2xlcnQsIHdpZSBtYW4gdm9yZ2VoZW4gbXVzcy4KK0lWLiBEZXN3ZWl0ZXJlbiBrYW5uIG1hbiBudW4gZGllIFRydWhlIGluIGRlbiBTZWhlcmhhZXVzZXJuIHZlcnNjaGllYmVuLAordW1iZW5lbm5lbiB1bmQgaWhyIGVpbmVuIEV4dHJhbG9vayBnZWJlbi4gQXVzc2VyZGVtIGthbm4gZGllIEhhdXN0dWVyIG1pdAorc3BlemllbGxlbiBGdW5rdGlvbmVuIGluIGRpZSBBdXNzZW5iZXNjaHJlaWJ1bmcgZGVzIEhhdXNlcyBlaW5nZWJhdXQgb2RlcgordW5zaWNodGJhciBnZW1hY2h0IHdlcmRlbi4gQXVjaCBoaWVyenUgZW1wZmVobGUgaWNoIGRpZSBMZWt0dWVyZSBkZXIgSGlsZmUtCitTZWl0ZSB6dW0gU2VoZXJoYXVzLgorVi4gRGllIE1vZWdsaWNoa2VpdGVuLCBkaWUgSW0gU2VoZXJoYXVzIHp1ciBWZXJmdWVndW5nIHN0ZWhlbiwgc2luZCBoaWVyIG51cgorcnVkaW1lbnRhZXIgZGFyc3RlbGxiYXIsIGluc2Jlc29uZGVyZSBkYSBzaWUgZGFuayBXYXJnb24ncyB0b2xsZXIgQXJiZWl0IGluCitkaWVzZW0gQmVyZWljaCBzdGV0aWcgd2FjaHNlbi4gSWNoIHBsYW5lIGluIG5hZWhlcmVyIFp1a3VuZnQgZWlubWFsIGVpbgorJ011c3RlcmhhdXMnIGF1Znp1YmF1ZW4sIGluIGRlbSBhbGxlIE1vZWdsaWNoa2VpdGVuLCBkaWUgZGllIFNlaGVyaGFldXNlcgorYmlldGVuLCBkYXJnZXN0ZWxsdCB3ZXJkZW4sIGFsbGVyZGluZ3Mgd2lyZCBkaWVzZXMgbmljaHQgdm9yIEphbnVhciAxOTk2CitmZXJ0aWcgd2VyZGVuOyBhbGxlcmRpbmdzIGthbm5zdCBEdSBlaW5lIE1lbmdlIEhpbGZlbiBhdWNoIGF1ZiBkZW4KK0hpbGZlc2VpdGVuIHp1bSBTZWhlcmhhdXMgZXJoYWx0ZW4sIGRpZSBzZWhyIGF1c2Z1ZWhybGljaCB1bmQgZ3V0IGdlc2NocmllYmVuCitzaW5kLgpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTUgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDkxMDljCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTUKQEAgLTAsMCArMSwyNCBAQAorMTUuIFNFSEVSU1BJRUxQTEFUWgorCitNaXQgZGVtIFNlaGVyc3BpZWxwbGF0eiBpc3QgbnVubWVociBhdWNoIGVpbmUgUmVnaW9uIGVyb2VmZm5ldCB3b3JkZW4sCitkaWUgYXVzc2NobGllc3NsaWNoIHZvbiBkZW4gU2VoZXJuIGdlc3RhbHRldCB3ZXJkZW4gc29sbC4gRWluaWdlIGhhYmVuCitkaWUgSW5zZWwgYW0gT3N0cmFuZCBkZXIgV3Vlc3RlIGphIHNjaG9uIGdlc2VoZW4gdW5kIGRvcnQgc2Nob24gZWluaWdlcworZ2ViYXN0ZWx0LgorWndlaSBTYWNoZW4gZXJzY2hlaW5lbiBtaXIgaW0gWnVzYW1tZW5oYW5nIG1pdCBkZXIgSW5zZWwKK2Vyd2FlaG5lbnN3ZXJ0OiAxLiBEaWUgR2VzdGFsdHVuZyBkZXIgSW5zZWwga2FubiB3aXJrbGljaCBudXIgZ2VsaW5nZW4sCit3ZW5uIGFsbGUgU2VoZXIgenVzYW1tZW5hcmJlaXRlbi4gRGllcyBoZWlzc3QsIGRhc3MgbWFuIHNpY2gKK2luc2Jlc29uZGVyZSBiZWkgZGVuIGdld2FlaGx0ZW4gQXVzZ2FlbmdlbiBhYnNwcmljaHQsIHVtIGVpbgorZW50c3RhbmRlbmVzIGxhYiBuaWNodCBkdXJjaCBlaW5lbiBlaW5mYWNoZW4gQXVzZ2FuZyBrYXB1dHR6dW1hY2hlbi4KKzIuIFNvYmFsZCBkaWUgQXVzZ2FlbmdlIGdlbGVndCBzaW5kLCB1bmQgZGllIGVyc3RlbgorUmF1bWJlc2NocmVpYnVuZ2VuIGdlc2NocmllYmVuIHdlcmRlbiwgaGVpc3N0IGVzIGF1Y2ggd2llZGVyCithdWZwYXNzZW4uIEVzIHdhZXJlIHNjaG9lbiwgd2VubiBiZW5hY2hiYXJ0ZSBSYWV1bWUgaW4gZ2V3aXNzZXIKK0Zvcm0gYXVjaCB6dWVpbmFuZGVyIHBhc3NlbiAtIGFsc28gc2NoYXV0IEV1Y2ggdW0sIHdlbm4gaWhyIGVpbmVuCitSYXVtIGJlc2NocmVpYnQsIHdhcyBkb3J0IGluIGRlciBOYWNoYmFyc2NoYWZ0IGZ1ZXIgUmFldW1lIGV4aXN0aWVyZW4uCitXaWUgZnVua3Rpb25pZXJ0IGRlciBBdXRvbWF0IHZvciBkZXIgSW5zZWwgPworTmFqYSwgZGF6dSB3dXJkZW4gdGF1c2VuZCBGcmFnZW4gZ2VzdGVsbHQgLSBkYWJlaSBpc3RzIGdhbnogZWluZmFjaDoKK2EpIE1hbiBkcnVlY2t0IGVpbmVuIEtub3BmIGVudHNwcmVjaGVuZCBkZW0gaXRlbSwgZGFzIG1hbiBrYXVmZW4KK21vZWNodGUgKGxhbmdiZXNjaHJlaWJ1bmcsIGF1c2dhbmcsIGRldGFpbCkKK2IpIE1hbiB3aXJmdCBkaWUgZW50c3ByZWNoZW5kZSBNZW5nZSB2b24gTXVlbnplbiBlaW4gLSBkaWUgQW56ZWlnZQoremVpZ3QsIHdpZXZpZWwgZXMga29zdGV0LCB1bmQgd2lldmllbCBub2NoIGZlaGx0LgorYykgTWFuIG5pbW10IGRlbiBlcndvcmJlbmVuIEdlZ2Vuc3RhbmQgbWl0IHVuZCBzZXR6dCBpaG4gaW4gZGVtCitSYXVtIGVpbiwgZGVuIG1hbiBzaWNoIGRhZnVlciBhdXNnZXN1Y2h0IGhhdC4KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzE2IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2YTFlYwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzE2CkBAIC0wLDAgKzEsNDMgQEAKKworRGFtaXQgYmVpIGRlciBWaWVsemFobCB2b24gU2VoZXJuIG5pY2h0IGRlciBVZWJlcmJsaWNrIHZlcmxvcmVuCitnZWh0LCB3byBpaHJlIGdhbnplbiBIYWV1c2VyIHN0ZWhlbiwgaGllciBhdWNoIGVpbiBrbGVpbmVzCitBZHJlc3NlbnZlcnplaWNobmlzIC0gdm9lbGxpZyB1bnZvbGxzdGFlbmRpZywgYWxzbyBzY2hyZWlidCBtaXIgbWFsLAord2VubiBpaHIgdm9uIGVpbmVtIEhhdXMgd2lzc3QsIGRhcyBpY2ggYXVzZ2VsYXNzZW4gaGFiZSwgb2Rlcgord2VubiBFdWVyIEhhdXMgZWluZW4gYW5kZXJlbiBOYW1lbiBhbHMgZGVuIGhpZXIgYXVmZ2VmdWVocnRlbiBoYXQuCisKK0RhcyBIYXVzIHZvbiBBYXJnb24gICAgICAgICAgICAgICAgYXVmIGRlbSBXZWcgdm9yIGRlbSBaaWdldW5lcmxhZ2VyCitBcmFtZWFzIEZhY2h3ZXJraGF1cyAgICAgICAgICAgICAgIGJlaW0gSW1rZXIKK0RpZSBCbG9ja2h1ZXR0ZSB2b24gQXNtb2RpcyAgICAgICAgd2VzdGxpY2ggdm9tIEZhY2tlbGxhZGVuCitEYXMgSGF1cyB2b24gQmFtYnVsa28gICAgICAgICAgICAgIFRyYW1wZWxwZmFkIGJlaW0gRWxmZW5kb3JmCitEYXMgSGF1cyB2b24gQmFyYWsgICAgICAgICAgICAgICAgIGFtIFN0cmFuZCBkZXIgU29ubmVuaW5zZWwKK0RhcyBIYXVzIHZvbiBCZXJuaGFyZCAgICAgICAgICAgICAgV2FsZHdlZyBvZXN0bGljaCBHbG9ja2Vud2FsZAorQmxlZWx1bXBlcyBEcmVpbWFzdGVyICAgICAgICAgICAgICBhbSBTdHJhbmQgbm9lcmRsaWNoIHZvbiBQb3J0IFZhaW4KK0RhcyBIYXVzIHZvbiBEaW9uICAgICAgICAgICAgICAgICAgYXVmIGRlciBLcmV1enVuZyB2b3IgZGVtIEZyaWVkaG9mCitIb2VobGUgdm9uIEVyb3MgICAgICAgICAgICAgICAgICAgIE9zdHJhbmQgZGVzIE5lYW5kZXJ0YWxzCitEYXMgSGF1cyB2b24gR3JpbW1ib3JuICAgICAgICAgICAgIGF1ZiBTdm9sdmFlcgorSGFyZGlscyBCYXVtaGF1cyAgICAgICAgICAgICAgICAgICBhdWYgZGVtIEJhdW0gd2VzdGxpY2ggdm9tIEVsZmVuZG9yZgorRGFzIEhhdXMgdm9uIEhhd2sgICAgICAgICAgICAgICAgICBPYnN0d2llc2UgYmVpbSBPc3R3YWxsCitEYXMgSGF1cyB2b24gSGVsbG93ZWVuICAgICAgICAgICAgIGltIFNXIHZvbiBNb3JvbgorRGFzIEhhdXMgdm9uIElvbGFudGhlICAgICAgICAgICAgICBiZWltIEJlcm5oYXJkaW5lciBub2VyZGxpY2ggenVtIEtyYXRlcgorS2hvcm5lcyBTY2hyZWluICAgICAgICAgICAgICAgICAgICBpbSBub2VyZGxpY2hlbiBMdXBpbmVudGFsCitEZXIgU3RlaW5icnVjaCB2b24gS2llc2Vsc3RlaW4gICAgIGFtIFN0cmFuZCBpbiBQb3J0IFZhaW4KK0RhcyBIYXVzIHZvbiBLbGluZ2UgICAgICAgICAgICAgICAgYmVpbSBEcmFjaGVuYmFieSBhdWYgZGVyIEhFCitEYXMgSGF1cyB2b24gS290emJyb2NrZW4gICAgICAgICAgIHN1ZWRsaWNoIHZvbSB6dWdlZnJvcmVuZW4gV2VpaGVyCitMYU11ZXJ0ZXMgRmVsc2Jyb2NrZW4gICAgICAgICAgICAgICAgV2VnIGluIGRpZSBXdWVzdGUKK0xhdXJpbnMgWndlcmdlbmhvZWhsZSAgICAgICAgICAgICAgaW4gVmFsZ2Vzc2EKK01hZ2ljT2xsaXMgTWVkaXRhdGlvbnN0ZW1wZWwgICAgICAgV2FsZHdlZyBvZXN0bGljaCBHbG9ja2Vud2FsZAorTWlubmlzIFNjaGxvZXNzY2hlbiAgICAgICAgICAgICAgICBpbSBHbG9ja2Vud2FsZAorTXlzdGl4IFdvbGtlICAgICAgICAgICAgICAgICAgICAgICBFaW5nYW5nIFNjaHJlY2tlbnNzcGl0emUKK0RhcyBIYXVzIHZvbiBSYWZhZWwgICAgICAgICAgICAgICAgYmVpIGRlciBUYW5uZSBpbSBIZXhlbndhbGQKK0RhcyBIYXVzIHZvbiBSYXkgICAgICAgICAgICAgICAgICAgYXVmIGRlbSBXZWcgdm9yIGRlbSBaaWdldW5lcmxhZ2VyCitEYXMgSGF1cyB2b24gUnVkaXJhdHRlciAgICAgICAgICAgIHNjaGF1IG1hbCBuZWJlbmFuIG5hY2ggOykKK0RhcyBIYXVzIHZvbiBSeW5lICAgICAgICAgICAgICAgICAgZGEgc3RlaHN0IER1IGRyaW4gIQorRGllIFN0cmFuZHZpbGxhIHZvbiBSeHRlY2ggICAgICAgICBhbSBTdHJhbmQgbm9lcmRsaWNoIHZvbiBQb3J0IFZhaW4KK0RhcyBIYXVzIHZvbiBTbHlmb3ggICAgICAgICAgICAgICAgS3JldXp1bmcgdm9yIGRlbSBGcmllZGhvZgorRGFzIEhhdSB2b24gU25vb2tlciAgICAgICAgICAgICAgICBPZXN0bGljaCBkZXIgUGxhemEgaW4gTW9yb24KK1N0YWhsZG9ybnMgTW9ub2xpdGggICAgICAgICAgICAgICAgYmVpbSBCcnVubmVuIGltIEhleGVud2FsZAorRGFzIEhhdXMgZGVzIFRvZXRlcnMgICAgICAgICAgICAgICB6d2lzY2hlbiBQb3J0IFZhaW4gdW5kIEdvYmxpbmxhZ2VyCitUenVpb3BzIEh1ZXR0ZSAgICAgICAgICAgICAgICAgICAgIGF1ZiBkZW0gQmF1bSB3ZXN0bGljaCB2b20gRWxmZW5kb3JmCitEYXMgSGF1cyB2b24gV29lbGtjaGVuICAgICAgICAgICAgIHVudGVyIGRlbSBSZWdlbmJvZ2VuIGJlaW0gQmVyZ2RvcmYKK0RlciBFaW5nYW5nIHp1IGVpbmVyIEhvZWhsZSAgICAgICAgYmVpbSBHbGV0c2NoZXIgKGltbWVyIG5hY2ggTi0gdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWNodCB6dWZhZWxsaWcgaW4gZWluZSBhbmRlcmUgRGltZW5zaW9uKQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTcgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNmYWZhCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMTcKQEAgLTAsMCArMSBAQAorRHUgc2llaHN0IGtlaW5lbiBGZWhsZXIgaW0gUmF1bS1aZWl0LUdlZnVlZ2UuCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xOCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGIyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8xOApAQCAtMCwwICsxLDIzOSBAQAorCisKKworQWxwaGFiZXRpc2NoZSBBdWZsaXN0dW5nIGFsbGVyIFNlaGVyIGltIE1vcmdlbkdyYXVlbiwgU3RhbmQgMTguMDkuMTk5NQorCisoZ2VzYW10IDIzMiBTZWhlciwgenUgZGllc2VtIFplaXRwdW5rdCAyMTUgTWFnaWVyKQorQWFyZ29uICAgICAgICAgICAxNjkwICAzMzEzMjAzOSAoIDI4KSAgNDQgVGFnZSwgIDcgU3R1bmRlbiB1bmQgIDMgTWludXRlbgorQWNlZyAgICAgICAgICAgICAgOTA1ICAgIDczNDcxMCAoIDIwKSAgIDIgVGFnZSwgIDUgU3R1bmRlbiB1bmQgNTEgTWludXRlbgorQWNyaW1vbiAgICAgICAgICAxMzc1ICAgMTkwNjIxNyAoIDIxKSAgMzcgVGFnZSwgMTkgU3R1bmRlbiB1bmQgNDYgTWludXRlbgorQWVsbCAgICAgICAgICAgICAxMjg1ICAgIDg5OTAxNiAoIDIwKSAgMjEgVGFnZSwgIDcgU3R1bmRlbiB1bmQgMzUgTWludXRlbgorQWxlbWFubmUgICAgICAgICAxNDMwICAgMzg1MTQwOSAoIDIzKSAgMTkgVGFnZSwgIDAgU3R1bmRlbiB1bmQgMjAgTWludXRlbgorQWxpbmUgICAgICAgICAgICAxNDEwICAgMTA2NTI3NCAoIDIxKSAgMjQgVGFnZSwgIDIgU3R1bmRlbiB1bmQgMjAgTWludXRlbgorQWxrdWluICAgICAgICAgICAxNjE1ICAgMzQ3MTM5MiAoIDIzKSAgIDQgVGFnZSwgIDQgU3R1bmRlbiB1bmQgMTUgTWludXRlbgorQWxtdW5kaSAgICAgICAgICAxNjY1ICAxMjA0NTU2NyAoIDI2KSAgMjkgVGFnZSwgIDkgU3R1bmRlbiB1bmQgMzMgTWludXRlbgorQWx4eCAgICAgICAgICAgICAxMjc1ICAgIDIxMDY5NSAoIDIwKSAgIDggVGFnZSwgMTAgU3R1bmRlbiB1bmQgNTggTWludXRlbgorQW1hem9yYSAgICAgICAgICAgNzIwICAgNzYyMDk2NSAoIDI1KSAgNjAgVGFnZSwgMTQgU3R1bmRlbiB1bmQgNTkgTWludXRlbgorQW5haWQgICAgICAgICAgICAxMzc1ICAgIDI4MzkwNyAoIDIyKSAgMjMgVGFnZSwgIDIgU3R1bmRlbiB1bmQgNTAgTWludXRlbgorQW5ha2luICAgICAgICAgICAyMDAwICA5MTcyMDE2OCAoIDMxKSAgODYgVGFnZSwgMTAgU3R1bmRlbiB1bmQgMzYgTWludXRlbgorQW5jYWxhZ29uICAgICAgICAxNTAwICAgMzIwMzMyMyAoIDIzKSAgMjIgVGFnZSwgIDUgU3R1bmRlbiB1bmQgMzEgTWludXRlbgorQW5ubyAgICAgICAgICAgICAxMjUwICAgIDM3OTY3NyAoIDIwKSAgMjAgVGFnZSwgMjEgU3R1bmRlbiB1bmQgIDkgTWludXRlbgorQXF1YXRvbGwgICAgICAgICAxMjMwICAgMTAxNjgzMSAoIDIwKSAgMTIgVGFnZSwgIDcgU3R1bmRlbiB1bmQgNDQgTWludXRlbgorQXJhZ29uICAgICAgICAgICAxMjM1ICAgMTYxODc1NCAoIDIxKSAgMTMgVGFnZSwgMTkgU3R1bmRlbiB1bmQgMzcgTWludXRlbgorQXJhbWVhICAgICAgICAgICAxNTIwICAgNTYzNDU1OCAoIDI0KSAgMjYgVGFnZSwgIDAgU3R1bmRlbiB1bmQgMTIgTWludXRlbgorQXJrICAgICAgICAgICAgICAxNjIwICAgMTYxMjk1NCAoIDIxKSAgMTUgVGFnZSwgIDMgU3R1bmRlbiB1bmQgIDggTWludXRlbgorQXJ0eSAgICAgICAgICAgICAxOTQwICAyODA1MTQwMSAoIDI4KSAgMzAgVGFnZSwgIDYgU3R1bmRlbiB1bmQgMzcgTWludXRlbgorQXJ1biAgICAgICAgICAgICAxMjAwICAgMTAwMjk5MyAoIDIwKSAgIDkgVGFnZSwgMTggU3R1bmRlbiB1bmQgMjUgTWludXRlbgorQXNtb2RpbmEgICAgICAgICAxOTg1ICAgMzYwOTA0NCAoIDIzKSAgNDMgVGFnZSwgMTAgU3R1bmRlbiB1bmQgNDkgTWludXRlbgorQXNtb2RpcyAgICAgICAgICAxOTg1ICAyNjAzODQ0MiAoIDI4KSAxNjQgVGFnZSwgIDEgU3R1bmRlICB1bmQgMzUgTWludXRlbgorQXVncmEgICAgICAgICAgICAxNzkwICAgIDk4NzA4NyAoIDIwKSAgMzIgVGFnZSwgMTcgU3R1bmRlbiB1bmQgMjIgTWludXRlbgorQXVyaWFuICAgICAgICAgICAxNDk1ICAgMTU2NTg0OSAoIDIxKSAgIDIgVGFnZSwgMTMgU3R1bmRlbiB1bmQgNDAgTWludXRlbgorQmFyYWsgICAgICAgICAgICAxMTA1ICAgNDMxMzM2OCAoIDIzKSAgMjAgVGFnZSwgMjIgU3R1bmRlbiB1bmQgIDggTWludXRlbgorQmVsbGljdXMgICAgICAgICAxMzcwICAgNzMwOTg2OCAoIDI0KSAgNDcgVGFnZSwgIDIgU3R1bmRlbiB1bmQgIDEgTWludXRlCitCZXJuaGFyZCAgICAgICAgIDIwNjAgIDMwMDI1Mjc2ICggMjgpICA1OSBUYWdlLCAyMCBTdHVuZGVuIHVuZCA1OCBNaW51dGVuCitCaWJvICAgICAgICAgICAgIDE4NzUgIDMzMDAxMTk0ICggMjgpICA2NSBUYWdlLCAgMiBTdHVuZGVuIHVuZCAgOCBNaW51dGVuCitCaWVuY2hlbiAgICAgICAgIDEzMDUgICAxOTc5NDkwICggMjEpICAxMCBUYWdlLCAgOSBTdHVuZGVuIHVuZCAgOSBNaW51dGVuCitCaWcgICAgICAgICAgICAgIDE2OTAgICAyOTM3MDc1ICggMjIpICAxMSBUYWdlLCAxMSBTdHVuZGVuIHVuZCA1MCBNaW51dGVuCitCaWdmb290ICAgICAgICAgIDE2NjAgIDEyNjY3MDg1ICggMjYpICAzMCBUYWdlLCAyMCBTdHVuZGVuIHVuZCA1MyBNaW51dGVuCitCbGVlbHVtcGUgICAgICAgIDEyNjUgICA1MjU2OTU5ICggMjQpICAyMCBUYWdlLCAyMSBTdHVuZGVuIHVuZCAxNCBNaW51dGVuCitCbG9vZGdvcmUgICAgICAgIDE1NzAgICA2MDYxNDUwICggMjgpICA1NiBUYWdlLCAxNiBTdHVuZGVuIHVuZCA1OSBNaW51dGVuCitCbHVlbWVsICAgICAgICAgIDE0NTAgICAxNTQ3NzE3ICggMjEpICAyMCBUYWdlLCAxNiBTdHVuZGVuIHVuZCAxMyBNaW51dGVuCitCb2ViYmVsICAgICAgICAgIDE2NzUgICAxMjI0NTMzICggMjEpICAyOCBUYWdlLCAgMSBTdHVuZGUgIHVuZCAzNSBNaW51dGVuCitCb3R0b20gICAgICAgICAgIDEzNTUgICAxMDYyMTAyICggMjApICAxOCBUYWdlLCAxOSBTdHVuZGVuIHVuZCA1NyBNaW51dGVuCitCcml0ICAgICAgICAgICAgIDEyNjAgICAxOTczNzEyICggMjIpICAyMCBUYWdlLCAgNiBTdHVuZGVuIHVuZCAgMSBNaW51dGUKK0JydW1tZWwgICAgICAgICAgMTg1MCAgMTE3Nzk1NTAgKCAyNikgIDI1IFRhZ2UsICAxIFN0dW5kZSAgdW5kIDE1IE1pbnV0ZW4KK0NhZWwgICAgICAgICAgICAgMTMzNSAgIDE1MzY1NDggKCAyMSkgIDE3IFRhZ2UsICA3IFN0dW5kZW4gdW5kIDI3IE1pbnV0ZW4KK0NhcmFkaHJhcyAgICAgICAgMTkyMCAxMDEzODMzMzcgKCAzMikgMTEzIFRhZ2UsIDIzIFN0dW5kZW4gdW5kIDU3IE1pbnV0ZW4KK0NhcmVmcmVlICAgICAgICAgMTI4MCAgIDEzNTY5NjcgKCAyMCkgICA4IFRhZ2UsIDIxIFN0dW5kZW4gdW5kICAxIE1pbnV0ZQorQ2FzdGF3YXkgICAgICAgICAxMjIwICAgMjE5NjUwOCAoIDIyKSAgNDMgVGFnZSwgMjIgU3R1bmRlbiB1bmQgIDcgTWludXRlbgorQ2VsZWJkaWwgICAgICAgICAxMjUwICAxMTU3MzUwMyAoIDI1KSAgNDAgVGFnZSwgIDAgU3R1bmRlbiB1bmQgMjggTWludXRlbgorQ2hhcmx5ICAgICAgICAgICAxNDMwICAgMzc5Mzk3MiAoIDIyKSAgMTYgVGFnZSwgIDggU3R1bmRlbiB1bmQgNTEgTWludXRlbgorQ2hhdmV6ICAgICAgICAgICAxNjAwICAgIDI5OTAyMyAoIDIxKSAgMzMgVGFnZSwgMTIgU3R1bmRlbiB1bmQgIDAgTWludXRlbgorQ2hpY29sYSAgICAgICAgICAxNDUwICAyMzE1NzAwOCAoIDI3KSAgNjcgVGFnZSwgMTIgU3R1bmRlbiB1bmQgMTcgTWludXRlbgorQ292ZW4gICAgICAgICAgICAxMzEwICAgMTk0MDM0MyAoIDIyKSAgMTAgVGFnZSwgMjAgU3R1bmRlbiB1bmQgNTMgTWludXRlbgorQ3JhaWcgICAgICAgICAgICAxMzgwICAgNTQxNTEwNSAoIDI0KSAgMjIgVGFnZSwgMjAgU3R1bmRlbiB1bmQgIDggTWludXRlbgorQ3JvbGxhICAgICAgICAgICAyMDYwICAxNTA2MjQxMiAoIDI2KSAgMzIgVGFnZSwgMTIgU3R1bmRlbiB1bmQgMzYgTWludXRlbgorQ3ViICAgICAgICAgICAgICAxMzQwICAgMTQ1MzgxNyAoIDIwKSAgIDQgVGFnZSwgIDQgU3R1bmRlbiB1bmQgMTEgTWludXRlbgorQ3VjaHVsbGluICAgICAgICAyMDYwICAgOTM2NjM4MCAoIDI1KSAgNDEgVGFnZSwgIDggU3R1bmRlbiB1bmQgMjYgTWludXRlbgorRGFuaWVsICAgICAgICAgICAxNDIwICAgMjEyNTYxNCAoIDIyKSAgMTggVGFnZSwgMjMgU3R1bmRlbiB1bmQgIDYgTWludXRlbgorRGF0YSAgICAgICAgICAgICAxMjgwICAgMTM4MzYzMSAoIDIwKSAgMTYgVGFnZSwgMTEgU3R1bmRlbiB1bmQgIDYgTWludXRlbgorRGVpbW9zICAgICAgICAgICAxNTUwICAgMTYxNDk3MiAoIDIxKSAgIDQgVGFnZSwgMTggU3R1bmRlbiB1bmQgMTkgTWludXRlbgorRGVzYXN0YSAgICAgICAgICAxNTYwICAgOTgyMjcyOCAoIDI1KSAgMjQgVGFnZSwgMTUgU3R1bmRlbiB1bmQgMjcgTWludXRlbgorRGVzaWRlcmlhICAgICAgICAxMjc1ICAgMTM0MDIyOCAoIDIwKSAgIDEgVGFnICwgMTIgU3R1bmRlbiB1bmQgMzMgTWludXRlbgorRGhvamFrdCAgICAgICAgICAxNjI1ICAgNTYxMjEzOCAoIDI0KSAgNDIgVGFnZSwgMTYgU3R1bmRlbiB1bmQgNTcgTWludXRlbgorRGlnZWRhZyAgICAgICAgICAxMjAwICAgIDgxNzkxMSAoIDIwKSAgMTcgVGFnZSwgMjEgU3R1bmRlbiB1bmQgIDggTWludXRlbgorRGlvbiAgICAgICAgICAgICAxMDIwICAgMTM5NjQwMCAoIDIxKSAgMTEgVGFnZSwgIDggU3R1bmRlbiB1bmQgMjkgTWludXRlbgorRHJha29yICAgICAgICAgICAxNDEwICAgIDk3MzcyNyAoIDIwKSAgMTMgVGFnZSwgMTYgU3R1bmRlbiB1bmQgMjUgTWludXRlbgorRHVyaW4gICAgICAgICAgICAxODQwICAyNzAwMDI5MCAoIDI4KSAgNTUgVGFnZSwgIDQgU3R1bmRlbiB1bmQgNDUgTWludXRlbgorRHdpZ2h0ICAgICAgICAgICAyMDMwICAgNzMzNzYyNCAoIDI0KSAgNDIgVGFnZSwgMTggU3R1bmRlbiB1bmQgIDQgTWludXRlbgorRWFyZW5kaWwgICAgICAgICAxNjQwICAgMzI0MzcyOCAoIDIyKSAgIDcgVGFnZSwgMTQgU3R1bmRlbiB1bmQgMTEgTWludXRlbgorRW1pbCAgICAgICAgICAgICAxNDIwICAgMTE4OTQ4MCAoIDIwKSAgMTUgVGFnZSwgIDggU3R1bmRlbiB1bmQgMjYgTWludXRlbgorRW5neXd1Y2sgICAgICAgICAxNzU1ICAgMjQ4NTYzOSAoIDIzKSAgODMgVGFnZSwgMTQgU3R1bmRlbiB1bmQgNTEgTWludXRlbgorRW93aW4gICAgICAgICAgICAxMDQ1ICAgMTEyMzExNSAoIDIwKSAgIDMgVGFnZSwgMjEgU3R1bmRlbiB1bmQgMTQgTWludXRlbgorRXRhaW4gICAgICAgICAgICAxMjg1ICAgMTE4NDEyMyAoIDIxKSAgMjMgVGFnZSwgMTMgU3R1bmRlbiB1bmQgIDMgTWludXRlbgorRXVsZSAgICAgICAgICAgICAxMjkwICAgIDUzNDY2NiAoIDIwKSAgIDkgVGFnZSwgMTAgU3R1bmRlbiB1bmQgIDMgTWludXRlbgorRmFndXMgICAgICAgICAgICAxOTE1ICAgMTEzMDY5MCAoIDIwKSAgMTQgVGFnZSwgIDYgU3R1bmRlbiB1bmQgMjAgTWludXRlbgorRmFobmRlciAgICAgICAgICAxNTk1ICAgNzMwNDE4OCAoIDI1KSAgMzIgVGFnZSwgIDcgU3R1bmRlbiB1bmQgMzIgTWludXRlbgorRmFudGFib3kgICAgICAgICAxNDE1ICAgIDY5MTY2MiAoIDIwKSAgMTkgVGFnZSwgIDEgU3R1bmRlICB1bmQgMTMgTWludXRlbgorRmF1bGkgICAgICAgICAgICAxMjg1ICAgMjA0MjM4NiAoIDIyKSAgMzUgVGFnZSwgIDEgU3R1bmRlICB1bmQgMzAgTWludXRlbgorRmVscyAgICAgICAgICAgICAxNTc1ICAgNDI4ODQwMSAoIDIzKSAgMzAgVGFnZSwgMTIgU3R1bmRlbiB1bmQgNTAgTWludXRlbgorRmlwcHMgICAgICAgICAgICAxMzI1ICAgNjE4NzIwNCAoIDI0KSAgMjcgVGFnZSwgIDQgU3R1bmRlbiB1bmQgNDYgTWludXRlbgorRmxpbnRuYWlsICAgICAgICAxNDE1ICAgMTM5MjA5MCAoIDIxKSAgMjkgVGFnZSwgMTggU3R1bmRlbiB1bmQgIDEgTWludXRlCitGb25lcyAgICAgICAgICAgIDEzODUgICAxNjk1MzU5ICggMjEpICAxMSBUYWdlLCAyMyBTdHVuZGVuIHVuZCA0MyBNaW51dGVuCitGcnlkZXIgICAgICAgICAgIDE4MTAgIDIwMDc5MTI1ICggMjcpICA2NiBUYWdlLCAxOSBTdHVuZGVuIHVuZCA0MCBNaW51dGVuCitGeXQgICAgICAgICAgICAgIDE2MjUgMTAzNzk2Mzk5ICggMzIpIDEwNSBUYWdlLCAgOSBTdHVuZGVuIHVuZCA1MCBNaW51dGVuCitHYWJpICAgICAgICAgICAgIDE5ODUgICA0OTEyODMyICggMjQpICAxNCBUYWdlLCAxNiBTdHVuZGVuIHVuZCA1NSBNaW51dGVuCitHYW5kdWxmICAgICAgICAgIDE0MzUgICAyMzYzNzg5ICggMjIpICAxNSBUYWdlLCAxMiBTdHVuZGVuIHVuZCAzOSBNaW51dGVuCitHcmFuYXRhICAgICAgICAgIDE5MDAgICA4MTYzMzc1ICggMjUpICAyMiBUYWdlLCAyMyBTdHVuZGVuIHVuZCAyMCBNaW51dGVuCitHdW1weSAgICAgICAgICAgIDE2NTAgIDEyMDIyNzEzICggMjYpICAyMyBUYWdlLCAxMCBTdHVuZGVuIHVuZCAzNCBNaW51dGVuCitIYWNrZnJpZWQgICAgICAgIDIwNjAgICA3MjE4ODU2ICggMjQpICAyNyBUYWdlLCAgNCBTdHVuZGVuIHVuZCAyMiBNaW51dGVuCitIYWRyYSAgICAgICAgICAgIDIwMTAgICA4ODYzNTczICggMjUpICA0MSBUYWdlLCAxNSBTdHVuZGVuIHVuZCAzMSBNaW51dGVuCitIYXIgICAgICAgICAgICAgIDEyMDAgICAxNDM0MTkwICggMjEpICAzOSBUYWdlLCAxOCBTdHVuZGVuIHVuZCAgNyBNaW51dGVuCitIYXJkaWwgICAgICAgICAgIDExNzAgICA3Nzc1MTY0ICggMjUpICAzMSBUYWdlLCAyMyBTdHVuZGVuIHVuZCA1NCBNaW51dGVuCitIYXNlbmZ1c3MgICAgICAgIDEzMjUgICA3MjU5NDk1ICggMjQpICAzMCBUYWdlLCAgMyBTdHVuZGVuIHVuZCAzNyBNaW51dGVuCitIYXdrICAgICAgICAgICAgIDEyMzAgICAzNjE4NTI2ICggMjMpICAzMSBUYWdlLCAgMSBTdHVuZGUgIHVuZCAxNyBNaW51dGVuCitIZWxsb3dlZW4gICAgICAgIDE4MDUgIDE3NzQyODAyICggMjcpICAyOSBUYWdlLCAxOSBTdHVuZGVuIHVuZCAzMiBNaW51dGVuCitIZXJjdWxlcyAgICAgICAgIDE0NDAgICAyMTU3NzQxICggMjEpICAxMiBUYWdlLCAxNiBTdHVuZGVuIHVuZCAgMiBNaW51dGVuCitIb2xkZW4gICAgICAgICAgIDEzODAgICAgMjE4NTM5ICggNDApICAxMCBUYWdlLCAgMyBTdHVuZGVuIHVuZCAgNyBNaW51dGVuCitIb3BwbGEgICAgICAgICAgIDEyMjAgICAxMTc0OTM0ICggMjApICAgMiBUYWdlLCAgNyBTdHVuZGVuIHVuZCA1OCBNaW51dGVuCitIdW9yICAgICAgICAgICAgIDEyNDUgICAxNzcwNDg2ICggMjEpICAxMyBUYWdlLCAgOCBTdHVuZGVuIHVuZCA0MyBNaW51dGVuCitIdXJpbiAgICAgICAgICAgIDE0NjAgICAyMjg0NjQ4ICggMjIpICAyMiBUYWdlLCAgNSBTdHVuZGVuIHVuZCAzMyBNaW51dGVuCitJZHVyICAgICAgICAgICAgIDE5NjUgICAzMzc2ODQwICggMjMpICAgNSBUYWdlLCAgNiBTdHVuZGVuIHVuZCA1MCBNaW51dGVuCitJbmVsdWtpICAgICAgICAgIDE1NTUgICAxOTY5NzEwICggMjEpICAgMSBUYWcgLCAxNyBTdHVuZGVuIHVuZCAyNiBNaW51dGVuCitJbnNraXBwICAgICAgICAgIDE1ODUgICAyOTgyNzkwICggMjIpICAxMiBUYWdlLCAyMyBTdHVuZGVuIHVuZCAxNyBNaW51dGVuCitJb2xhbnRoZSAgICAgICAgIDE1NTUgICA1OTkyMjU4ICggMjQpICAzNSBUYWdlLCAgMyBTdHVuZGVuIHVuZCA1OSBNaW51dGVuCitJc2FiZWF1ICAgICAgICAgIDIwNjAgICAzMzgwNDk5ICggMjMpICAgOSBUYWdlLCAgMCBTdHVuZGVuIHVuZCAxNCBNaW51dGVuCitJc2FiZWxsZSAgICAgICAgIDEzOTAgICAgNTQ3NDc4ICggMjApICAgMyBUYWdlLCAxMSBTdHVuZGVuIHVuZCAgNSBNaW51dGVuCitJc25vZ29vZCAgICAgICAgIDE3NzUgICAyODgxMDE4ICggMjIpICAyNyBUYWdlLCAxOCBTdHVuZGVuIHVuZCAyNyBNaW51dGVuCitJc3NvbWFkICAgICAgICAgIDE5ODUgIDExMDIwNTE1ICggMjYpICAyMCBUYWdlLCAgNSBTdHVuZGVuIHVuZCAxMCBNaW51dGVuCitKYWYgICAgICAgICAgICAgIDExODAgICAgNDI5Njk2ICggMjApICA3MSBUYWdlLCAgNSBTdHVuZGVuIHVuZCAgNCBNaW51dGVuCitKYW5pY2UgICAgICAgICAgIDIwNjAgIDEzNTExNjUwICggMjYpICA1MyBUYWdlLCAxOSBTdHVuZGVuIHVuZCAzNyBNaW51dGVuCitKZXJyaWNvICAgICAgICAgIDE0ODUgICA0NTY3OTI1ICggMjQpICAzMSBUYWdlLCAgOSBTdHVuZGVuIHVuZCA0NyBNaW51dGVuCitKaW1kaWdyaXogICAgICAgIDIwMTUgICA0MjI5MDA1ICggMjMpIDEwMCBUYWdlLCAgMiBTdHVuZGVuIHVuZCAyNiBNaW51dGVuCitKaXJpa2kgICAgICAgICAgIDE1NzAgICAzODU4MjQxICggMjMpICAgMyBUYWdlLCAxNSBTdHVuZGVuIHVuZCA0MSBNaW51dGVuCitKdXJyeSAgICAgICAgICAgIDE0MTAgICA3MDczNTQ0ICggMjUpICAzMyBUYWdlLCAgOCBTdHVuZGVuIHVuZCA0MiBNaW51dGVuCitLYWZrYSAgICAgICAgICAgIDEyMTUgICAgNzY5MjYyICggMjEpICAgOSBUYWdlLCAgOCBTdHVuZGVuIHVuZCA1NSBNaW51dGVuCitLYWxsaW9wZSAgICAgICAgIDEzODUgICAxNTM5MzI5ICggMjApICAgMSBUYWcgLCAyMCBTdHVuZGVuIHVuZCAyNCBNaW51dGVuCitLYXJ0aWkgICAgICAgICAgIDE1NTUgICAxNzQ2OTE5ICggMjApICAxNiBUYWdlLCAxMyBTdHVuZGVuIHVuZCAgMSBNaW51dGUKK0tlbGRlciAgICAgICAgICAgMTk0NSAgIDUxMDk4MjUgKCAyMykgIDQ2IFRhZ2UsIDE3IFN0dW5kZW4gdW5kIDQ0IE1pbnV0ZW4KK0tlcm1pdCAgICAgICAgICAgMTc0NSAgIDYyMDMyNTYgKCAyNSkgIDQ4IFRhZ2UsICAzIFN0dW5kZW4gdW5kIDM5IE1pbnV0ZW4KK0toaWRhciAgICAgICAgICAgMTkyMCAgNTAxNDA5OTkgKCAyOSkgIDYyIFRhZ2UsIDIwIFN0dW5kZW4gdW5kIDM2IE1pbnV0ZW4KK0tob3JuZSAgICAgICAgICAgMTY0MCAgICAxMzAzNzYgKCAyNCkgIDYyIFRhZ2UsICA4IFN0dW5kZW4gdW5kICAzIE1pbnV0ZW4KK0tpZXNlbHN0ZWluICAgICAgMTIyMCAgIDc5MjUwMTEgKCAyNikgIDE2IFRhZ2UsIDEzIFN0dW5kZW4gdW5kICAzIE1pbnV0ZW4KK0tpd2kgICAgICAgICAgICAgMTQ5NSAgICA3MjM4MDQgKCAyMCkgIDMyIFRhZ2UsICA2IFN0dW5kZW4gdW5kIDU5IE1pbnV0ZW4KK0tsYXVzaSAgICAgICAgICAgMTc1MCAgIDYxODYzODIgKCAyNCkgIDE2IFRhZ2UsIDIwIFN0dW5kZW4gdW5kICA4IE1pbnV0ZW4KK0tvbnRvICAgICAgICAgICAgMTE5NSAgIDEzOTk2OTAgKCAyMSkgICA1IFRhZ2UsICAwIFN0dW5kZW4gdW5kICA2IE1pbnV0ZW4KK0tvdHpicm9ja2VuICAgICAgMTkyNSAgNDAxMDMzMTkgKCAyOSkgIDQxIFRhZ2UsICA4IFN0dW5kZW4gdW5kIDE2IE1pbnV0ZW4KK0xhdXJpbiAgICAgICAgICAgMTk0NSAgIDQyMzc3NTcgKCAyNCkgIDY2IFRhZ2UsIDE5IFN0dW5kZW4gdW5kIDE5IE1pbnV0ZW4KK0xlZnR5ICAgICAgICAgICAgMTY2MCAgMTE1ODAzMzkgKCAyNikgIDI3IFRhZ2UsIDE2IFN0dW5kZW4gdW5kIDIwIE1pbnV0ZW4KK0xlaWEgICAgICAgICAgICAgMTc0NSAgIDc4MzIzMTggKCAyNSkgIDIzIFRhZ2UsIDEyIFN0dW5kZW4gdW5kIDE5IE1pbnV0ZW4KK0xpdXRiZXJnYSAgICAgICAgMTcyNSAgIDIzNjk1NzEgKCAyMikgICAzIFRhZ2UsICA1IFN0dW5kZW4gdW5kIDI5IE1pbnV0ZW4KK0xvY3VsdXMgICAgICAgICAgMTQ4NSAgMTMzNjMyNjEgKCAyNikgIDM0IFRhZ2UsIDE1IFN0dW5kZW4gdW5kICA2IE1pbnV0ZW4KK0xva2FyICAgICAgICAgICAgMTI4MCAgIDE0MzI0OTUgKCAyMCkgICAzIFRhZ2UsIDEzIFN0dW5kZW4gdW5kIDE1IE1pbnV0ZW4KK0x1ZyAgICAgICAgICAgICAgMTY4NSAgIDE3MjMzODUgKCAyMSkgIDEzIFRhZ2UsICA0IFN0dW5kZW4gdW5kIDEyIE1pbnV0ZW4KK01hZ2ljb2xsaSAgICAgICAgMjA2MCAgMzQ5MjQzOTQgKCAyOCkgIDQyIFRhZ2UsICA3IFN0dW5kZW4gdW5kIDEwIE1pbnV0ZW4KK01hZ251bSAgICAgICAgICAgMTI4MCAgIDE0Mzg3OTQgKCAyMCkgICA3IFRhZ2UsIDE4IFN0dW5kZW4gdW5kICA4IE1pbnV0ZW4KK01haGF0bWEgICAgICAgICAgMTU3NSAgIDI5NzU2MTIgKCAyMikgIDE2IFRhZ2UsIDEyIFN0dW5kZW4gdW5kIDE5IE1pbnV0ZW4KK01hamVyZSAgICAgICAgICAgMTIxNSAgICA4OTA4MzIgKCAyMCkgICA1IFRhZ2UsIDE5IFN0dW5kZW4gdW5kIDE3IE1pbnV0ZW4KK01hcnMgICAgICAgICAgICAgMjA2MCAgMTQ2MTMzODkgKCAyNikgIDQ2IFRhZ2UsICA0IFN0dW5kZW4gdW5kIDU5IE1pbnV0ZW4KK01hcnUgICAgICAgICAgICAgMTQwMCAgIDE1MDMwOTggKCAyMSkgICA3IFRhZ2UsIDE1IFN0dW5kZW4gdW5kIDI1IE1pbnV0ZW4KK01heGluICAgICAgICAgICAgMTM2NSAgIDExMjA4OTkgKCAyMCkgIDE3IFRhZ2UsICAzIFN0dW5kZW4gdW5kIDU0IE1pbnV0ZW4KK01lbGxvcm4gICAgICAgICAgMTI5MCAgIDEwNjY0ODQgKCAyMCkgIDE4IFRhZ2UsICA4IFN0dW5kZW4gdW5kICA5IE1pbnV0ZW4KK01lcmlhZCAgICAgICAgICAgMTMwNSAgIDE0OTcwMDAgKCAyMCkgICA3IFRhZ2UsIDE3IFN0dW5kZW4gdW5kIDUxIE1pbnV0ZW4KK01lc2lyaWkgICAgICAgICAgMTU4NSAgIDYxMjQ1MjUgKCAyNCkgIDI1IFRhZ2UsICAzIFN0dW5kZW4gdW5kIDQ3IE1pbnV0ZW4KK01pZXplICAgICAgICAgICAgMTI3NSAgIDIxMjI5NjkgKCAyMikgIDI5IFRhZ2UsICAwIFN0dW5kZW4gdW5kIDMwIE1pbnV0ZW4KK01pbW8gICAgICAgICAgICAgMTE5NSAgIDExMjc0MTQgKCAyMCkgIDE1IFRhZ2UsIDExIFN0dW5kZW4gdW5kIDI1IE1pbnV0ZW4KK01pbm5pICAgICAgICAgICAgMTk4NSAgMTM5NDY2MDQgKCAyNikgIDI3IFRhZ2UsICA0IFN0dW5kZW4gdW5kIDM1IE1pbnV0ZW4KK01pc3NlbGxpICAgICAgICAgIDkxNSAgIDI2Mzg5MTIgKCAyMikgIDEwIFRhZ2UsIDIzIFN0dW5kZW4gdW5kICA4IE1pbnV0ZW4KK01pdGggICAgICAgICAgICAgMTI4NSAgIDEyMDIxOTkgKCAyMSkgICA2IFRhZ2UsIDEyIFN0dW5kZW4gdW5kICA0IE1pbnV0ZW4KK01vZ2xpICAgICAgICAgICAgMTA3NSAgIDE4MzYwNjYgKCAyMSkgIDEwIFRhZ2UsIDEzIFN0dW5kZW4gdW5kIDUyIE1pbnV0ZW4KK01vcmdvbiAgICAgICAgICAgMTgzNSAgMTA0MDI2MjIgKCAyNSkgIDI3IFRhZ2UsICA2IFN0dW5kZW4gdW5kIDE5IE1pbnV0ZW4KK01vc2ggICAgICAgICAgICAgMTQyMCAgIDI0Nzk5NTQgKCAyMikgIDE2IFRhZ2UsICA5IFN0dW5kZW4gdW5kIDIxIE1pbnV0ZW4KK011Y2tzICAgICAgICAgICAgMTMxMCAgIDM1Mzg0NjQgKCAyMykgIDEzIFRhZ2UsIDIyIFN0dW5kZW4gdW5kIDUzIE1pbnV0ZW4KK011bXBlbHMgICAgICAgICAgMTI3NSAgIDExOTA5MDIgKCAyMCkgICA5IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDE2IE1pbnV0ZW4KK05hdHVyZSAgICAgICAgICAgMTQ5MCAgIDE2MzIxNTQgKCAyMSkgICA2IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDQ5IE1pbnV0ZW4KK05pYWwgICAgICAgICAgICAgMTMzMCAgICA1NzM1MjQgKCAyMCkgICA4IFRhZ2UsIDIyIFN0dW5kZW4gdW5kIDM4IE1pbnV0ZW4KK05peGkgICAgICAgICAgICAgMTY5NSAgIDMzOTUyMzEgKCAyNCkgIDU4IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDI1IE1pbnV0ZW4KK05peGlob3UgICAgICAgICAgMTk2NSAgIDk0NTU5NTQgKCAyNSkgIDU2IFRhZ2UsICA4IFN0dW5kZW4gdW5kIDU1IE1pbnV0ZW4KK05vayAgICAgICAgICAgICAgMTU5NSAgIDEzMjIwNDggKCAyMCkgICAxIFRhZyAsICAxIFN0dW5kZSAgdW5kIDUwIE1pbnV0ZW4KK05vcndlZ2VyICAgICAgICAgMTU1NSAgIDYwNTc0NTkgKCAyNSkgIDMyIFRhZ2UsIDExIFN0dW5kZW4gdW5kIDMyIE1pbnV0ZW4KK05vc3RyYWRhbXVzICAgICAgMTgwMCAgOTMwNjc3OTAgKCAzMSkgIDU1IFRhZ2UsICA1IFN0dW5kZW4gdW5kIDExIE1pbnV0ZW4KK051bGxuZXVuZXIgICAgICAgMTM2MCAgIDUyMjA4OTQgKCAyNCkgIDEzIFRhZ2UsICA3IFN0dW5kZW4gdW5kIDM4IE1pbnV0ZW4KK09ya3RvZXRlciAgICAgICAgMTMzMCAgMjAyNzQwMjcgKCAyNykgIDQyIFRhZ2UsIDExIFN0dW5kZW4gdW5kIDMxIE1pbnV0ZW4KK1BhbnRvZmZlbCAgICAgICAgMTYyNSAgIDkyNDc1NjggKCAyNSkgIDI3IFRhZ2UsICA1IFN0dW5kZW4gdW5kIDExIE1pbnV0ZW4KK1BlbmVsb3BlICAgICAgICAgMTQ1MCAgIDE2OTY2NTYgKCAyMSkgIDQyIFRhZ2UsIDEyIFN0dW5kZW4gdW5kIDU5IE1pbnV0ZW4KK1BlcmxlICAgICAgICAgICAgMTQ5NSAgIDE1NDkzOTMgKCAyMSkgIDIwIFRhZ2UsIDIwIFN0dW5kZW4gdW5kIDEyIE1pbnV0ZW4KK1Bob2JvcyAgICAgICAgICAgMTY4NSAgIDE5NjM2MzkgKCAyMSkgICA0IFRhZ2UsIDE1IFN0dW5kZW4gdW5kIDIzIE1pbnV0ZW4KK1BoeWdvcyAgICAgICAgICAgMTQyMCAgIDM0MjM4MDYgKCAyMykgIDMxIFRhZ2UsICA5IFN0dW5kZW4gdW5kIDI3IE1pbnV0ZW4KK1BpZmYgICAgICAgICAgICAgMTMwMCAgIDMxMTg0ODkgKCAyMikgICA1IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDMwIE1pbnV0ZW4KK1BpcHBpbiAgICAgICAgICAgMTQxNSAgIDU0OTAzNDIgKCAyNCkgIDE5IFRhZ2UsICA3IFN0dW5kZW4gdW5kIDM3IE1pbnV0ZW4KK1Bsb2NrICAgICAgICAgICAgMTUwMCAgIDMwMDgwODQgKCAyMikgIDIxIFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDE1IE1pbnV0ZW4KK1ByYSAgICAgICAgICAgICAgMTE5MCAgIDM4NDk2MDIgKCAyMykgIDMzIFRhZ2UsICAxIFN0dW5kZSAgdW5kIDQ5IE1pbnV0ZW4KK1ByaWFtb3MgICAgICAgICAgMTI3MCAgIDM0MTUxNjYgKCAyMykgIDEzIFRhZ2UsICAxIFN0dW5kZSAgdW5kIDU2IE1pbnV0ZW4KK1B1Y2sgICAgICAgICAgICAgMTI3MCAgIDEzNTM0OTEgKCAyMCkgICAxIFRhZyAsICAwIFN0dW5kZW4gdW5kIDQ0IE1pbnV0ZW4KK1F1ZW5naXN0dSAgICAgICAgMTE2MCAgIDI0ODA0MjkgKCAyMikgIDI4IFRhZ2UsIDE5IFN0dW5kZW4gdW5kIDM1IE1pbnV0ZW4KK1F1aWxsaWFuICAgICAgICAgMTMzMCAgMTMxNTk2ODAgKCAyNikgIDU2IFRhZ2UsICA4IFN0dW5kZW4gdW5kIDMzIE1pbnV0ZW4KK1JhZmFlbCAgICAgICAgICAgMjAxNSAgIDM1NTY0OTggKCAyMykgIDQ5IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDEzIE1pbnV0ZW4KK1JhaWJhICAgICAgICAgICAgMTMyNSAgIDEwMzIzNjggKCAyMCkgIDE4IFRhZ2UsICAzIFN0dW5kZW4gdW5kIDMwIE1pbnV0ZW4KK1JhdHogICAgICAgICAgICAgMTM4NSAgIDE1OTQ2MDEgKCAyMSkgIDQ0IFRhZ2UsIDE5IFN0dW5kZW4gdW5kIDUyIE1pbnV0ZW4KK1JheSAgICAgICAgICAgICAgMTY5MCAgMTY1MzMxNjkgKCAyNykgIDM2IFRhZ2UsIDE4IFN0dW5kZW4gdW5kIDI2IE1pbnV0ZW4KK1JlaW5lbGRlICAgICAgICAgMTYyMCAgMTE3NjA0NzYgKCAyNikgIDI3IFRhZ2UsICAyIFN0dW5kZW4gdW5kICA0IE1pbnV0ZW4KK1JleG9uICAgICAgICAgICAgMTM5NSAgIDMyODY0MTAgKCAyMykgIDE0IFRhZ2UsIDE1IFN0dW5kZW4gdW5kICAyIE1pbnV0ZW4KK1JvYWRydW5uZXIgICAgICAgMTY2MCAgIDkwMjUwMTcgKCAyNSkgIDU1IFRhZ2UsIDE3IFN0dW5kZW4gdW5kIDIxIE1pbnV0ZW4KK1Jvc2EgICAgICAgICAgICAgMTg1NSAgIDQzOTcyODEgKCAyNCkgICA2IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDM4IE1pbnV0ZW4KK1J1ZGlyYXR0ZXIgICAgICAgMjA2MCAgNDEyNDQ3NDUgKCAyOSkgIDM3IFRhZ2UsIDE5IFN0dW5kZW4gdW5kIDE0IE1pbnV0ZW4KK1J5bmUgICAgICAgICAgICAgMjA2MCAxOTMzNzYzNjggKCAzNSkgIDkxIFRhZ2UsIDE2IFN0dW5kZW4gdW5kIDU3IE1pbnV0ZW4KK1NhYyAgICAgICAgICAgICAgMTMyNSAgIDEwODE2NzQgKCAyMCkgICAzIFRhZ2UsIDE2IFN0dW5kZW4gdW5kIDI2IE1pbnV0ZW4KK1NjaGVsbSAgICAgICAgICAgMTQ2MCAgICA0NjEyNDcgKCAyMikgICA4IFRhZ2UsICA4IFN0dW5kZW4gdW5kIDIwIE1pbnV0ZW4KK1NjaGxhd2luZXIgICAgICAgMTM2NSAgICA1MzQ2NDggKCAyMSkgIDI5IFRhZ2UsIDEyIFN0dW5kZW4gdW5kIDQ4IE1pbnV0ZW4KK1Njb3R0eSAgICAgICAgICAgMTIxNSAgIDIyNDUxMDcgKCAyMikgIDEyIFRhZ2UsICAzIFN0dW5kZW4gdW5kIDI5IE1pbnV0ZW4KK1NlbGJzdG1vcmQgICAgICAgMTI2MCAgIDEyODEzOTIgKCAyMCkgICAyIFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDE1IE1pbnV0ZW4KK1NlbWlyYSAgICAgICAgICAgMTcxMCAgIDgzNDYyOTMgKCAyNSkgIDM4IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDQzIE1pbnV0ZW4KK1NpYWJhdCAgICAgICAgICAgMTM0MCAgIDEzNDIxNjggKCAyMSkgIDE1IFRhZ2UsIDIwIFN0dW5kZW4gdW5kIDIxIE1pbnV0ZW4KK1NpYm9yaXQgICAgICAgICAgMTQwMCAgIDExMjA5MzEgKCAyMCkgIDE1IFRhZ2UsICAzIFN0dW5kZW4gdW5kIDI1IE1pbnV0ZW4KK1NraXBwZXIgICAgICAgICAgMTU3NSAgMzM1MjY2MjkgKCAyOCkgIDQ2IFRhZ2UsICA0IFN0dW5kZW4gdW5kIDMyIE1pbnV0ZW4KK1NreXdhbGtlciAgICAgICAgMTQ1NSAgIDI3NjA0ODMgKCAyMikgIDEyIFRhZ2UsICA1IFN0dW5kZW4gdW5kIDE5IE1pbnV0ZW4KK1NsYXNoICAgICAgICAgICAgMTcyMCAgIDYyMTg5OTkgKCAyNCkgIDM3IFRhZ2UsIDEyIFN0dW5kZW4gdW5kIDQyIE1pbnV0ZW4KK1NseWZveCAgICAgICAgICAgMTc4MCAgMjkyMTM3MDAgKCAyOCkgIDYzIFRhZ2UsIDIyIFN0dW5kZW4gdW5kIDIyIE1pbnV0ZW4KK1NtYXVnICAgICAgICAgICAgMTE4NSAgIDI2NTAxMjEgKCAyMikgIDE4IFRhZ2UsIDIzIFN0dW5kZW4gdW5kIDU2IE1pbnV0ZW4KK1NtaWxleSAgICAgICAgICAgMTM3NSAgMTA1MzQ4NTAgKCAyNSkgIDIyIFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDQ1IE1pbnV0ZW4KK1Nub29rZXIgICAgICAgICAgMTUyMCAgMzA1NjgwNDggKCAyOCkgIDIxIFRhZ2UsICAxIFN0dW5kZSAgdW5kIDU5IE1pbnV0ZW4KK1NudWdnbGUgICAgICAgICAgMTUyNSAgIDkwNDg0OTMgKCAyNSkgIDMxIFRhZ2UsICA4IFN0dW5kZW4gdW5kIDUwIE1pbnV0ZW4KK1NvcnNoYSAgICAgICAgICAgMTQ0MCAgIDEzODYwNDggKCAyMCkgIDIwIFRhZ2UsICAwIFN0dW5kZW4gdW5kIDU2IE1pbnV0ZW4KK1NwZWVkeSAgICAgICAgICAgMTU1NSAgMTYxOTM5NzggKCAyNykgIDIwIFRhZ2UsIDE4IFN0dW5kZW4gdW5kIDQxIE1pbnV0ZW4KK1N0YWhsZG9ybiAgICAgICAgMTczNSAgNTQ3NjU0MTEgKCAyOSkgIDYwIFRhZ2UsIDIyIFN0dW5kZW4gdW5kIDQxIE1pbnV0ZW4KK1N0ZXZlICAgICAgICAgICAgMTk0NSAgIDYwNjg0NDEgKCAyNCkgIDY2IFRhZ2UsICA1IFN0dW5kZW4gdW5kIDM0IE1pbnV0ZW4KK1N1c2hpICAgICAgICAgICAgMTc3NSAgIDE2MDgyODEgKCAyMSkgIDE3IFRhZ2UsIDE2IFN0dW5kZW4gdW5kIDE3IE1pbnV0ZW4KK1N5bWJpb250ICAgICAgICAgMTMyMCAgIDM1MDQ4MzQgKCAyMykgIDEzIFRhZ2UsICA4IFN0dW5kZW4gdW5kIDU0IE1pbnV0ZW4KK1N5c29wICAgICAgICAgICAgMTMzNSAgIDE3MTkzMzYgKCAyMSkgIDE2IFRhZ2UsIDExIFN0dW5kZW4gdW5kIDQwIE1pbnV0ZW4KK1RheiAgICAgICAgICAgICAgMTUxNSAgICA3NjUxNzMgKCAyMikgIDMzIFRhZ2UsICAzIFN0dW5kZW4gdW5kIDUxIE1pbnV0ZW4KK1RlbGthICAgICAgICAgICAgMTU1MCAgIDEzNTc0NzYgKCAyMCkgIDE0IFRhZ2UsIDE5IFN0dW5kZW4gdW5kIDE0IE1pbnV0ZW4KK1RlcnJhbiAgICAgICAgICAgMTQ0MCAgIDEwOTQyNjQgKCAyMCkgIDEyIFRhZ2UsICAxIFN0dW5kZSAgdW5kIDE3IE1pbnV0ZW4KK1RvZGVzZW5nZWwgICAgICAgMTUzNSAgIDE3Mzg2NjIgKCAyMSkgICAzIFRhZ2UsICA3IFN0dW5kZW4gdW5kICA3IE1pbnV0ZW4KK1RvbW15ICAgICAgICAgICAgMTYwNSAgIDcxNDY5MDYgKCAyNSkgIDM1IFRhZ2UsIDEyIFN0dW5kZW4gdW5kIDU3IE1pbnV0ZW4KK1RvcndhbGwgICAgICAgICAgMTMzMCAgIDYxMjQwNTIgKCAyNCkgIDI4IFRhZ2UsIDExIFN0dW5kZW4gdW5kIDQ2IE1pbnV0ZW4KK1Rvc3MgICAgICAgICAgICAgMTg3NSAgIDc4MzA1NDggKCAyNikgIDU0IFRhZ2UsICA0IFN0dW5kZW4gdW5kIDIyIE1pbnV0ZW4KK1R3aWdneSAgICAgICAgICAgMTY2MCAgIDk2OTEzNDQgKCAyNSkgIDM1IFRhZ2UsIDE3IFN0dW5kZW4gdW5kIDIyIE1pbnV0ZW4KK1R5cmlvbiAgICAgICAgICAgMTU5NSAgMTkyMjAzOTcgKCAyNykgIDM1IFRhZ2UsIDE2IFN0dW5kZW4gdW5kIDUxIE1pbnV0ZW4KK1R6dWlvcCAgICAgICAgICAgMTE2NSAgMTQ3NDY3MzQgKCAyNikgIDgwIFRhZ2UsIDE4IFN0dW5kZW4gdW5kIDUyIE1pbnV0ZW4KK1VyemEgICAgICAgICAgICAgMTQ4NSAgMTI1ODk3MTMgKCAyNikgIDI5IFRhZ2UsIDEyIFN0dW5kZW4gdW5kIDU2IE1pbnV0ZW4KK1ZhbmlyICAgICAgICAgICAgMjA2MCAgIDI5MzMxNDMgKCAyMikgIDM1IFRhZ2UsICA0IFN0dW5kZW4gdW5kIDExIE1pbnV0ZW4KK1ZhbmphICAgICAgICAgICAgMTYxNSAgMTY0MjMzNTAgKCAyNikgIDIxIFRhZ2UsICA3IFN0dW5kZW4gdW5kICA0IE1pbnV0ZW4KK1ZlcmdvbiAgICAgICAgICAgMTMwNSAgIDEwNzE1MzUgKCAyMCkgICAxIFRhZyAsIDE1IFN0dW5kZW4gdW5kICA0IE1pbnV0ZW4KK1ZlcndpcnJ1bmcgICAgICAgMTkyNSAgIDQ0NTUyNDUgKCAyMykgIDE0IFRhZ2UsIDIwIFN0dW5kZW4gdW5kIDUyIE1pbnV0ZW4KK1ZydW1mb25kZWwgICAgICAgMTI1NSAgICA0NDc0MzggKCAyMCkgIDE4IFRhZ2UsIDE2IFN0dW5kZW4gdW5kIDQ4IE1pbnV0ZW4KK1dhaG4gICAgICAgICAgICAgMjA2MCAgIDMzMTI4MzIgKCAyMykgIDE2IFRhZ2UsICAxIFN0dW5kZSAgdW5kIDQ3IE1pbnV0ZW4KK1dhcmxvcmQgICAgICAgICAgMTI3NSAgICA2MzA3NTEgKCAyMSkgIDMwIFRhZ2UsICAzIFN0dW5kZW4gdW5kIDU0IE1pbnV0ZW4KK1dpbGxvdyAgICAgICAgICAgMTkwNSAgMjg3NDI2MzYgKCAyOCkgIDU0IFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDI1IE1pbnV0ZW4KK1dvZWxrY2hlbiAgICAgICAgMTM3MCAgIDc5Mjk4MjggKCAyNCkgIDQwIFRhZ2UsICAzIFN0dW5kZW4gdW5kIDExIE1pbnV0ZW4KK1dvbGZlbmRhcnQgICAgICAgMTQxNSAgIDE1NzUzMDggKCAyMSkgIDExIFRhZ2UsICA4IFN0dW5kZW4gdW5kIDQ2IE1pbnV0ZW4KK1hhbmFkdSAgICAgICAgICAgMTUyNSAgIDE3ODQ3MzIgKCAyMSkgIDM3IFRhZ2UsICAzIFN0dW5kZW4gdW5kIDI4IE1pbnV0ZW4KK1hlcmEgICAgICAgICAgICAgMTUwMCAgIDE3NjU3MzkgKCAyMSkgIDE4IFRhZ2UsICA2IFN0dW5kZW4gdW5kIDI0IE1pbnV0ZW4KK1lhayAgICAgICAgICAgICAgMTIwMCAgIDEwMTIyNzggKCAyMCkgIDE2IFRhZ2UsIDE3IFN0dW5kZW4gdW5kIDM5IE1pbnV0ZW4KK1lhc21pbiAgICAgICAgICAgMTMzNSAgIDEyMjkzNDAgKCAyMSkgICA5IFRhZ2UsICAyIFN0dW5kZW4gdW5kIDM4IE1pbnV0ZW4KK1lldGkgICAgICAgICAgICAgMTQyMCAgIDYwMTA4NDAgKCAyNSkgIDQ4IFRhZ2UsIDE0IFN0dW5kZW4gdW5kIDI1IE1pbnV0ZW4KK1lldHkgICAgICAgICAgICAgMTI2MCAgIDIzODc2MTIgKCAyMikgIDE3IFRhZ2UsIDIzIFN0dW5kZW4gdW5kIDU1IE1pbnV0ZW4KK1plcGh5ciAgICAgICAgICAgMjA2MCAgMjkyNTcyNDkgKCAyOCkgIDY3IFRhZ2UsICA0IFN0dW5kZW4gdW5kICA1IE1pbnV0ZW4KK1pvcnJvICAgICAgICAgICAgMjA2MCAgIDU2NDQ2ODcgKCAyNCkgIDMzIFRhZ2UsIDEwIFN0dW5kZW4gdW5kIDUyIE1pbnV0ZW4KK1p3aXJjaCAgICAgICAgICAgMTY2NSAgIDk4MTgyNDcgKCAyNSkgIDE1IFRhZ2UsIDIzIFN0dW5kZW4gdW5kIDMxIE1pbnV0ZW4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvMiBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiNzhiZAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzIKQEAgLTAsMCArMSwxOCBAQAorMi4gU0VIRVJRVUVTVAorCitFaW5lIHJlY2h0IHNjaG9lbmUgcXVlc3QgbnVyIGZ1ZXIgU2VoZXIgaGF0IFRyb3kgaW0gRnJ1ZWhqYWhyIDE5OTUKK2dlc2NocmllYmVuLCBhbGxlcmRpbmdzIHd1cmRlIHNpZSBlcnN0IDQgTW9uYXRlIHNwYWV0ZXIgYW5nZXNjaGxvc3NlbiwKK25hY2hkZW0gQm9pbmcgZWluZSBNZW5nZSBCdWdzIGdlZml4dCBoYXR0ZS4gV2llIGF1Y2ggaW1tZXI6IEVpbmUgbG9obmVuZGUKK3F1ZXN0LCBtaXQgU2ljaGVyaGVpdCBkaWUgc2Nob2Vuc3RlIGRpZSBUcm95IGhpZXIgZ2VzY2hyaWViZW4gaGF0LCB1bmQKK2F1c25haG1zd2Vpc2UgaXN0IHNpZSBzaWdhciBsb2dpc2NoIHVuZCBkaWUgU3RpbW11bmcgdm9yIE9ydCBuaWNodCBzY2hsZWNodC4KK0Fsc28gdW5iZWRpbmd0IHNwaWVsZW4sIG5pY2h0IHp1bGV0enQsIHdlaWwgZGllIEJlbG9obnVuZyBkYWZ1ZXIgd2lybGljaAorZ2VsdW5nZW4gaXN0LCBiZXNzZXI6IGRpZSBCZWxvaG51bmdlbiEgRGVubiBhKSBlcmhhZWx0IG1hbiBlaW5lCitLcmlzdGFsbGt1Z2VsLCBtaXQgZGVyIG1hbiBTcGllbGVyIGZ1ZXIgZWluZW4gTWFnaWVwdW5rdCBmaW5kZW4ga2FubiwgdW5kIGIpCitlcmhhZWx0IG1hbiBkYXMgUi1FbW90ZSwgbWl0IGRlbSBtYW4gc2VpbiBFbW90ZSwgZGFzIG1hbiBmdWVyIGRpZSBBbWFyeWxsaXMtCitRdWVzdCBlcmhhbHRlbiBoYXQsIGF1Y2ggYXVmIFNwaWVsZXIgYXVzc2VyaGFsYiBkZXMgUmF1bWVzIGluIGRlbSBtYW4gc2ljaAorYmVmaW5kZXQsIGFud2VuZGVuIGthbm4gKHZnbC4gaGllcnp1IGF1Y2ggS2FwLiA2OiBNYWdpc2NoZSBLdWdlbCkuCisKK1ZpZWwgU3Bhc3MgYmVpbSBRdWVzdGVuICEhIQorKGFiZXIgZXJzdCBoaWVyYmxlaWJlbiB1bmQgRmFxIGZlcnRpZ2xlc2VuIDspIC0gdW5kIGRlciBCYWxscGFyayBsb2hudAordWVicmlnZW5zIGF1Y2ggbWFsIGVpbmVuIGtsZWluZW4gQmxpY2sgOykpCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzMgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZWE1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS8zCkBAIC0wLDAgKzEsMjMgQEAKKworMy4gRkxVQ0hUUklDSFRVTkcKKworRXR3YXMgdW5zY2hlaW5iYXIsIGFiZXIgaW4gbWVpbmVuIEF1Z2VuIGlzdCBkaWVzIGltbWVyIG5vY2ggZGVyIHdlcnR2b2xsc3RlCitCZWZlaGwsIGRlbiBtYW4gYWxzIFNlaGVyIG5ldSBlcmhhZWx0OiBGbHVjaHRyaWNodHVuZy4KKworQWIgc29mb3J0IGthbm5zdCBEdSBkZW4gQmVmZWhsICdGbHVjaHRyaWNodHVuZyAoUmljaHR1bmcpJyBhbndlbmRlbi4KK1NvbGx0ZSBkaWVzZXIgbm9jaCBuaWNodCBha3RpdmllcnQgc2VpbiwgbXVzc3QgZHUgZWlubWFsIEVuZGUgbWFjaGVuLgorRGFuYWNoIGthbm5zdCBEdSBzZWxic3QgYmVzdGltbWVuLCBpbiB3ZWxjaGUgUmljaHR1bmcgRHUgZmxpZWhzdCwKK3dlbm4gZGllIEFuZ3N0IERpY2ggbWFsIHVlYmVya29tbWVuIHNvbGx0ZSAuLi4uLgorQWJlciBBY2h0dW5nOiBEZXIgQmVmZWhsIGZ1bmt0aW9uaWVydCBtaXQgZWluZXIgV2Fyc2NoZWlubGljaGtlaXQgdm9uCis4MCBQcm96ZW50OyBmdWVyIGplZGVuIExldmVsIHVlYmVyIDIwIGVyaG9laHQgc2ljaCBkaWUgV2Fyc2NoZWlubGljaGtlaXQKK2Rhbm4gdW0gd2VpdGVyZSB6d2VpIFByb3plbnQuLi4gIFRpcDogRmx1Y2h0cmljaHR1bmcgPkVuZGU8IGZ1bmt0aW9uaWVydAorYXVjaCwgZWJlbnNvIHdpZTogRmx1Y2h0cmljaHR1bmcgPnRlaWxlIEJvaW5nIG1pdCBEdSwgaWNoIHN0ZXJiZSBnbGVpY2ggOig8CitNYW4gbXVzcyBoYWx0IGRpZSBQcmlvcml0YWV0ZW4gcmljaHRpZyBzZXR6ZW4gOykpLgorCitXYXJ1bSBkaWVzZXIgQmVmZWhsIGluIG1laW5lbiBBdWdlbiBiZXNvbmRlcnMgd2ljaHRpZyBpc3QgPyBOdW4sIGVyIGJlZnJlaXQKK1NwaWVsZXIgbWl0IHNlaHIgaG9oZXIgV2Fyc2NoZWlubGljaGtlaXQgdm9uIGRlbSBSaXNpa28sIGR1cmNoIGVpbmVuIExhZyB6dQorc3RlcmJlbiwgd2VubiBkaWUgRmx1Y2h0IGltIGVudHNjaGVpZGVuZGVuIE1vbWVudCBpbiBkaWUgZmFsc2NoZSBSaWNodHVuZyB6dQorZ2VoZW4gZHJvaHQuIE1hbiBtdXNzIHNpZSB2b3JoZXIgbnVyIHJpY2h0aWcgZ2VzZXR6dCBoYWJlbi4gQWxsZXJkaW5ncywgZWluCitrbGVpbmVzIFJpc2lrbyBibGVpYnQuLi4gZGVubiBlcnN0IGFiIExldmVsIDMwIGtsYXBwdCBkaWUgRmx1Y2h0cmljaHR1bmcgenUKKzEwMCUsIGFsc28gd2FjaGJsZWliZW4gOykuCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzQgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS80Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjQxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS80CkBAIC0wLDAgKzEsMzQgQEAKKzQuIFNFSEVSTEVWRUwKK0EgcHJvcG9zIExldmVscy0gendhciBpc3QgbWFuIG51biBTZWhlciwgYWJlciBkZW5ub2NoIGthbm4gbWFuCithdWNoIHdlaXRlcmhpbiBzZWluZSBTdHVmZW4gZXJob2VoZW4gLSBhbGxlcmRpbmdzIG1pdCBldHdhcyBtZWhyCitBdWZ3YW5kIGFscyBmcnVlaGVyIDooKCAtIGRpZSBMZXZlbHMgIHVuZCBpaHJlIEVQLUFuZm9yZGVydW5nZW46CisKKworU3R1ZmUgICBFcmZhaHJ1bmcgICAgICAgICAgU3R1ZmUgICBFcmZhaHJ1bmcgICAgICAgICAgU3R1ZmUgICBFcmZhaHJ1bmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMjEgICAgICAgMTUwMDAwMCAgICAgICAgICAgMjYgICAgICAxMTAwMDAwMCAgICAgICAgICAgMzEgICAgICA4MDAwMDAwMAorMjIgICAgICAgMjI1MDAwMCAgICAgICAgICAgMjcgICAgICAxNzAwMDAwMCAgICAgICAgICAgMzIgICAgIDEwMDAwMDAwMAorMjMgICAgICAgMzM3NTAwMCAgICAgICAgICAgMjggICAgICAyNTAwMDAwMCAgICAgICAgICAgMzMgICAgIDEyNTAwMDAwMAorMjQgICAgICAgNTA2MjUwMCAgICAgICAgICAgMjkgICAgICA0MDAwMDAwMCAgICAgICAgICAgMzQgICAgIDE1MDAwMDAwMAorMjUgICAgICAgNzYwMDAwMCAgICAgICAgICAgMzAgICAgICA2MDAwMDAwMCAgICAgICAgICAgMzUgICAgIDE3NTAwMDAwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYgICAgIDIwMDAwMDAwMAorCitEaWUgQmVkZXV0dW5nIGRlciBMZXZlbHMgaXN0IGluc29mZXJuIGhvY2gsIGFscyBkYXNzIGRpZSBFcmZvbGdzLQorY2hhbmNlIGRlciBaYXViZXJzcHJ1ZWNoZSBpbiBkZW4gbmV1ZW4gR2lsZGVuIHZvbiBkZW0gTGV2ZWwgZGVzCitTcGllbGVycyBhYmhhZW5naWcgaXN0LiBTbyBpc3QgZXMgZ3J1bmRzYWV0emxpY2ggbnVyIG1vZWdsaWNoLCBkaWUgbWF4aW1hbGUKK0VyZm9sZ3N3YXJzY2hlaW5saWNoa2VpdCBlaW5lcyBaYXViZXJzcHJ1Y2hlcyBlcnN0IGRhbm4genUgZXJyZWljaGVuLCB3ZW5uCittYW4gU2VoZXJsZXZlbCAzMCBlcnJlaWNodCBoYXQuIEJlcmVjaG5ldCB3aXJkIGRhcyBnYW56ZSB3aWUgZm9sZ3Q6CitCZWkgTGV2ZWwgMjAgYmV0cmFlZ3QgZGllIEVyZm9sZ3N3YXJzY2hlaW5saWNoa2VpdCA4MCBQcm96ZW50LiBQcm8gTGV2ZWwKK3VlYmVyIDIwIHN0ZWlndCBkaWUgV2Fyc2NoZWlubGljaGtlaXQgZGFubiB1bSB3ZWl0ZXJlIDIgUHJvemVudCwgZXJyZWljaHQKK2Fsc28gYmVpIExldmVsIDMwIDEwMCBQcm96ZW50LgorRGllcyBmdWVocnQgaW0gRXJnZWJuaXMgZGF6dSwgZGFzcyBlaW4gWmF1YmVyc3BydWNoLCBkZW4gbWFuIGFuIHNpY2ggenUgOTAlCitiZWhlcnJzY2h0LCBpbiBMZXZlbCAyNSBudXIgbWl0IGVpbmVyIFdhcnNjaGVpbmxpY2hrZWl0IHZvbiA4MSBQcm96ZW50CitnZWxpbmd0ICg5MCUgQmVoZXJyc2NoZW4gZGVzIFNwcnVjaGVzICogOTAlIFdhcnNjaGVpbmxpY2hrZWl0IGF1cyBMZXZlbCAyNSkuCitBbGxlcmRpbmdzIGdpbHQgZGllc2UgRm9ybWVsIHNvIGdsb2JhbCBudXIgZnVlciBTdGFuZGFyZC1aYXViZXJzcHJ1ZWNoZSAoaW5zLQorYmVzb25kZXJlIGRpZSBpbiBkZXIgQWJlbnRldXJlcmdpbGRlKTsgZGllIE1hZ2llciBkZXIgZWluemVsbmVuIEdpbGRlbgora29lbm5lbiBkdXJjaCBkZW4gU2Nod2llcmlna2VpdHNncmFkIGVpbmVzIFphdWJlcnNwcnVjaGVzIGJlc3RpbW1lbiwgb2IKK2RpZXNlciBtaXQgaG9laGVyZXIgb2RlciBuaWVkcmlnZXJlciBXYXJzY2hlaW5saWNoa2VpdCBnZWxpbmd0LCBhbHMgZHVyY2ggZGllCitvYmVuIGFuZ2VmdWVocnRlIFJlY2hudW5nIHZvcmdlc2VoZW4uIEluIGRlciBLYXJhdGVnaWxkZSBpc3QgZXMgc29nYXIgc28KK2dlcmVnZWx0LCBkYXNzIGRlciBMZXZlbCBhbiBzaWNoIGZ1ZXIgZGllIEVyZm9sZ3N3YXJzY2hlaW5saWNoa2VpdCBlaW5lcworU3BydWNoZXMgdW5lcmhlYmxpY2ggaXN0LgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS81IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2YzMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvNQpAQCAtMCwwICsxLDMwIEBACis1LiBLb21tdW5pa2F0aW9uCisKK0FscyBTZWhlciBzdGVoZW4gRGlyIG5ldWUgTWl0dGVsIGRlciBLb21tdW5pa2F0aW9uIHp1ciBWZXJmdWVndW5nLCBtaXR0ZWxzCitkZXJlciBEdSBOYWNocmljaHRlbiBhbiBhbmRlcmUgU3BpZWxlciBzZW5kZW4ga2FubnN0OgorCitJLiBNQUlMCitBYiBzb2ZvcnQgc3RlaHQgRGlyIGRlciBrb3N0ZW5sb3NlIEt1cmllcmRpZW5zdCBkZXIgTUctUG9zdCB6dXIKK1ZlcmZ1ZWd1bmcgLSBkdXJjaCBFaW5nYWJlIHZvbiAnbWFpbCcga2FubnN0IGR1IHZvbiB1ZWJlcmFsbCBQb3N0Cit2ZXJzY2hpY2tlbiB1bmQgZW1wZmFuZ2VuLiBEaWVzIHNldHp0IGFiZXIgdm9yYXVzLCBkYXNzIER1IGVpbmUgWmVpdHVuZworYmVpIERpciB0cmFlZ3N0LCBkYSBkYXMgbWFpbCBlaW5lIFp1c2F0emZ1bmt0aW9uIGRlciBNUEEgaXN0LgorCitJSS4gTVBBCitJbiBkZXIgWmVpdHVuZyBzdGVodCBEaXIgbnVuIGRpZSBuZXVlIFJ1YnJpayAnc2VoZXIuZW50d2lja2x1bmcnIHp1cgorVmVyZnVlZ3VuZywgaW4gZGVyIER1IERlaW5lIFZvcnNjaGxhZWdlIHp1ciBWZXJiZXNzZXJ1bmcgZGVzCitTZWhlcnR1bXMgZWluYnJpbmdlbiBrYW5uc3QuCisKK0lJSS4gS2FuYWVsZQorWnVyIGRpcmVrdGVuIEtvbW11bmlrYXRpb24gbWl0IGRlbiBhbmRlcmVuIFNlaGVybiBzdGVodCBEaXIgbnVuIGF1Y2ggZWluCituZXVlciBLYW5hbCB6dXIgVmVyZnVlZ3VuZy4gRXIgd2lyZCBtaXQgJyAtaCAnIGFuZ2VzcHJvY2hlbgorKG5laW4sIG5pY2h0IG1pdCBTIHdpZSBTZWhlciwgZGFubiBrbmFsbHQgZGllIE1lbGR1bmcgendhciBhdWNoIHVlYmVyCitkZW4gU2VoZXJrYW5hbCwgYWJlciBlYmVuZmFsbHMgdWViZXIgU3BvcnQgdW5kIFNub29wIDspKS4KKworSVYuIEZlcm5zY2hyZWliZXIKK01pdCBkZW0gRmVybnNjaHJlaWJlciBhdXMgZGVtIFNlaGVybGFkZW4ga2FubnN0IER1IGdhbnplIE5hY2hyaWNodGVuYmxvZWNrZQorYW4gYW5kZXJlIFNwaWVsZXIgc2VuZGVuLiBEaWVzIGlzdCBoYWV1ZmlnIG51ZXR6bGljaCwgd2VubiBtYW4gbGFlbmdlcmUgVGV4dGUKK2FuIGVpbmVuIGFuZGVyZW4gU3BpZWxlciBzZW5kZW4gd2lsbCwgd2FlaHJlbmQgbWFuIHouQi4gbWl0IGRpZXNlbSB6dXNhbW1lbgorZWluZSBuZXVlIFJlZ2lvbiBvZGVyIGVpbiBRdWVzdCBlcmZvcnNjaHQuIERlciBFaW5zYXR6IGtvc3RldCAxNSBNUCBwcm8KK1NwaWVsZXIsIGFuIGRlbiBkaWUgTmFjaHJpY2h0IGdlc2VuZGV0IHdpcmQsIG1hbiBrYW5uIGF1Y2ggYW4gbWVocmVyZSBTcGllbGVyCitnbGVpY2h6ZWl0aWcgZGllIE1lbGR1bmcgYXVzZ2ViZW4gbGFzc2VuLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS82IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI5ZGZjCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvNgpAQCAtMCwwICsxLDE1IEBACis2LiBNQUdJU0NIRSBLVUdFTAorCitJbSBIYXVzIGRlciBIZXhlIGFtIEZyaWVkaG9mIHVuZCBpbiBad2Fja2VsbWFubnMgU2NobG9zcyBmaW5kZXN0CitEdSBlaW5lIEt1Z2VsLCBkaWUgRHUgbWl0bmVobWVuIGthbm5zdCAtIG1pdCBpaHIga2FubnN0IGR1IGR1cmNoIGRlbiBCZWZlaGwKKydmaW5kZSAoU3BpZWxlcm5hbWUpJyBqZWRlbiBlaW5nZWxvZ2d0ZW4gU3BpZWxlciBsb2thbGlzaWVyZW4gLSBlaW4gRWluc2F0egora29zdGV0IGpld2VpbHMgOSBNUC4KKworTWl0IGRlciBFaW5mdWVocnVuZyBkZXMgU2VoZXJxdWVzdHMgdm9uIFRyb3kgZXJoYWVsdCBtYW4gYWxzIFF1ZXN0YmVsb2hudW5nCitlaW5lIC0gZGVyIE5hbWUgZGVzIFF1ZXN0cyBsYWVzc3QgZXMgVmVybXV0ZW4gLSBLcmlzdGFsbGt1Z2VsLCBkaWUgZGllc2VsYmUKK0Z1bmt0aW9uIHdpZSBkaWUgU2VoZXJrdWdlbCBlcmZ1ZWxsdC4gQWxsZXJkaW5ncyBrb3N0ZXQgZGllc2UgcHJvIEVpbnNhdHogbnVyCisxIE1QLiBEYWZ1ZXIgZXJoYWVsdCBhbGxlcmRpbmdzIGRlciBiZW9iYWNodGV0ZSBTcGllbGVyIGRpZSBNZWxkdW5nICdKZW1hbmQKK2Jlc2Nod29lcnQgRGVpbiBCaWxkIGhlcmF1Zi4nLCB3YXMgYXVmIGRhdWVyIGV0d2FzIGF1ZmRyaW5nbGljaCB3aXJkLCBkYSBkZXIKK0JldHJvZmZlbmUgamEgbmljaHQgd2Vpc3MsIHdlciBpaG4gZGEgc3VjaHQuIEljaCBwZXJzb2VubGljaCBoYWx0ZSBkZW4KK0VpbnNhdHogZGVyICdub3JtYWxlbicgU2VoZXJrdWdlbCBmdWVyIGRpc2tyZXRlciwgaW5zYmVzb25kZXJlLCBkYSBzaWNoIGlocmUKK0tvc3RlbiBqYSBpbiBlaW5lbSB2ZXJ0cmV0YmFyZW4gUmFobWVuIGJld2VnZW4uCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS83IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VkMmNhCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvNwpAQCAtMCwwICsxLDE2OSBAQAorNy4gU0VIRVJMQURFTgorQXVmIFN2b2x2YWVyIGZpbmRlc3QgRHUgZWluZW4gTGFkZW4sIGRlciBzcGV6aWVsbGUgaXRlbXMgbnVyIGZ1ZXIKK1NlaGVyIGFuYmlldGV0LiBJbnRlcmVzc2FudCBpc3QgaGllciBkZXIgQnVtZXJhbmcsIGRhenUgbm9jaCBkaWUKK1BhcnR5dHJvZXRlIC0gZGVyIFJlc3QgaXN0IG1laHIgb2RlciB3ZW5pZ2VyIGJyYXVjaGJhcmVzIFpldWdzIC0gYWJyYXRlbgord3VlcmRlIGljaCB2b24gZGVtIEthdWYgZGVyIFpULVd1ZW5zY2hlbHJ1dGUsIGRpZSB6d2FyIHJlbGF0aXYKK3ZlcmxhZXNzbGljaCBhcmJlaXRldCwgYWxsZXJkaW5ncyBwcm8gRWluc2F0eiA0NSBNUCBrb3N0ZXQsIHVuZCBzaWNoIGRhbWl0CitudXIgbG9obnQsIHdlbm4gbWFuIGluIGVpbmVtIGtvbmtyZXRlbiBSYXVtIGVpbmVuIFpUIHZlcm11dGV0LgorQW5zb25zdGVuIGlzdCBuYXR1ZXJsaWNoIGRlciBLYXVmIGRlcyB2b24gQk9JTkcgaGFuZGdlbmFlaHRlbgorS2lzc2VucyBlaW4gTVVTUyEKKworRWluZSBrdXJ6ZSBCZXNjaHJlaWJ1bmcgc2FlbXRsaWNoZXIgU2VoZXJsYWRlbmFydGlrZWwgZmluZGV0IHNpY2ggaGllciBpbQorQW5zY2hsdXNzOyBhbiBkaWVzZXIgU3RlbGxlIGVpbmVuIGhlcnpsaWNoZW4gRGFuayBhbiBDdWNodWxsaW4sIGRlciBkaWVzZQorTGlzdGUgZXJzdGVsbHQgdW5kIHNpY2ggZGFtaXQgc2VociB2aWVsIE11ZWhlIGdlZ2ViZW4gaGF0LgorCitGdWVyIGRhcyBBbmdlYm90IGltIFNlaGVybGFkZW4gaXN0IExvY28genVzdGVuZGlnLCBkZXIgZGFzIGJpc2hlciBldHdhcworc3BhZXJsaWNoZSBBbmdlYm90IGdlcm5lIGVyd2VpdGVybiBtb2VjaHRlLCB1bmQgZGFoZXIgZnVlciBJZGVlbgoraW1tZXIgYXVmZ2VzY2hsb3NzZW4gaXN0IC0gZGFoZXIgc2NocmVpYmUgaWhtIHJ1aGlnIGVpbiBtYWlsLCB3ZW5uIER1CitlaW5lIElkZWUgaGFzdCwgd2FzIGRvcnQgenVrdWVuZnRpZyBhbmdlYm90ZW4gd2VyZGVuIGtvZW5udGUuCisKK0FuZ2Vib3RlbmUgQXJ0aWtlbCBpbSBTZWhlcmxhZGVuIChUZXh0IHZvbiBDdWNodWxsaW46KQorCisxOiAgICAxNSBFaW5lIEZhY2tlbC4KKyAgICAgICAgICAgICAgICBFaW5lIGdhbnogbm9ybWFsZSBGYWNrZWwuIE1hbiBrYW5uIHNpZSBhbnp1ZW5kZW4gdW5kCisgICAgICAgICAgICAgICAgd2llZGVyIGxvZXNjaGVuLgorCisgMjogICAgMTAgRWluIHZvbiBCb2luZyBoYW5kZ2VuYWVodGVzIEtpc3NlbgorICAgICAgICAgICAgICAgIE1hbiBrYW5uIGVzIGFuZGVyZW4gc2VociBndXQgbmFjaHdlcmZlbiA7KQorCisgMzogIDE4MDAgRWluIFdlY2tlciAoTHV4dXNhdXNnYWJlKS4KKyAgICAgICAgICAgICAgICBaZWlndCBkaWUgVWhyemVpdCBhbiwgZGllbnQgYWxzIFN0b3BwdWhyIHVuZCBhbHMgVGltZXIuCisgICAgICAgICAgICAgICAgQXV0b2xvYWQuCisKKyA0OiAgICAxNSBFaW4gTG9sbGkuCisgICAgICAgICAgICAgICAgRWluIExvbGxpLCBzbyB3aWUgaWhuIGRhcyBQYXJ0eW1vbnN0ZXIgZ2VybmUgdmVydGVpbHQuCisKKyA1OiAgIDI0MCBFaW4gVC1TaGlydC4KKyAgICAgICAgICAgICAgICBSdWVzdHVuZ3NnYXR0dW5nIFVtaGFuZyB1bmQgZGVua2JhciBzY2hsZWNodC4uLiBhYmVyIGFscworICAgICAgICAgICAgICAgIFNlaGVyIGthbm4gbWFuIGVzIG1pdCBlaW5lbSBUZXh0IHZlcnNlaGVuIHVuZCBtYW4gc2llaHQncworICAgICAgICAgICAgICAgIGltIEV4dHJhbG9vay4uLiBOZXR0ZSBTYWNoZSBpbiBqZWRlbSBGYWxsLgorCisgNjogICAgIDggRWluIFd1ZXJmZWwuCisgICAgICAgICAgICAgICAgIkR1IHd1ZXJmZWxzdCBlaW5lIDYuIiBFaW4gZ2FueiBub3JtYWxlciBXdWVyZmVsLgorCisgNzogICAgMTggRWluIEZvZXJtY2hlbi4KKyAgICAgICAgICAgICAgICBFaW4gcm90ZXMgRm9lcm1jaGVuIGluIGRlciBGb3JtIGVpbmVzIEhlcnplbnMuCisgICAgICAgICAgICAgICAgTWVociBhbGxlcmRpbmdzIG5pY2h0LgorCisgODogIDU0MDAgRWluIEJ1bWVyYW5nLgorICAgICAgICAgICAgICAgIEVpZ2VudGxpY2ggbXVzcyBtYW4gZGF6dSBuaWNodCB2aWVsIHNhZ2VuLCBlaW5lIHdpcmtsaWNoCisgICAgICAgICAgICAgICAgLSBmYXN0IHp1IC0gZ3V0ZSBXYWZmZS4gV3VyZGUgYWxsZXJkaW5ncyBrdWVyemxpY2ggZXR3YXMKKyAgICAgICAgICAgICAgICBhYmdld2VydGV0LCBpc3QgamVkb2NoIGltbWVyIG5vY2ggd2VydHZvbGxlIEhpZmxlIGltIEthbXBmLgorICAgICAgICAgICAgICAgIE1hbiBrYW5uICh2b24gZGVuIGluc2dlc2FtdCB2aWVyZW4gcHJvIFJlc2V0IG51ciBlaW5lbiBCdW1lLQorICAgICAgICAgICAgICAgIHJhbmcga2F1ZmVuLiBEaWVzIHd1cmRlIGdlZ2VuIGRpZSBIYW1zdGVya2FldWZlIG5hY2ggZWluZW0KKyAgICAgICAgICAgICAgICBTaHV0ZG93biBlaW5nZWZ1ZWhydCAoRXMgZ2lidCBTZWhlciwgZGllIGthZW1wZmVuIG1pdCB2aWVyCisgICAgICAgICAgICAgICAgQnVtZXJhbmdzIHVuZCBoYWJlbiBub2NoIGRyZWkgYWxzIEVyc2F0eiBpbSBCZXV0ZWwuLi4pLiBOYWNoCisgICAgICAgICAgICAgICAgZWluZW0gcmVib290L2NyYXNoIGFsbGVyZGluZ3MgZXJoYWVsdCBqZWRlciBTZWhlciBtaW5kZXN0ZW5zCisgICAgICAgICAgICAgICAgZWluZW4gQnVtZXJhbmcuCisKKyA5OiAgICA2MCBFaW4gdHJhZ2JhcmVyIFBvc3RrYXJ0ZW5kcnVja2VyLgorICAgICAgICAgICAgICAgIE1hbiBrYW5uIGRhbWl0IHNlY2hzIFBvc3RrYXJ0ZW4gZXJ6ZXVnZW4sIG1pdCBUZXh0IHZlcnNlaGVuCisgICAgICAgICAgICAgICAgdW5kIHZlcnNjaGlja2VuLiBOZXR0ZXIgR2FnLgorCisxMDogIDE4MDAgRGllIFRyb2V0ZSBkZXMgUGFydHltb25zdGVycy4KKyAgICAgICAgICAgICAgICBFaW4gTXVzcyBmdWVyIFBhcnR5ZmFucyEgRGFzIFV0ZW5zaWwgenUgUGFydHltb25zdGVycnVmZW4uCisKKzExOiAgOTk5OSBFaW4gWmF1YmVyc3RhYi4KKyAgICAgICAgICAgICAgICBBIGxhIEhpbGJlcnQuIElzdCBkdXJjaCBkZW4gTGljaHQtWmF1YmVyc3BydWNoIHJlbGF0aXYKKyAgICAgICAgICAgICAgICB1bndpY2h0aWcgZ2V3b3JkZW4uIEF1c3NlcmRlbSBpc3QgZGVyIGdla2F1ZnRlIFN0YWIgbmljaHQKKyAgICAgICAgICAgICAgICBjcmFzaGZlc3QuCisKKzEyOiAgIDQ5OSBFaW4gUGxhbmVkaXRvci4KKyAgICAgICAgICAgICAgICBXZXIgc2VpbiBQcm9qZWt0IG9kZXIgc2VpbmVuIFBsYW4gZWRpdGllcmVuIHdpbGwsIGJyYXVjaHQKKyAgICAgICAgICAgICAgICBlaW5lbiBQbGFuZWRpdG9yLgorCisxMzogIDEyMDAgRWluIFBhYXIgU2llYmVubWVpbGVuc3RpZWZlbC4KKyAgICAgICAgICAgICAgICBFaW5lIEVybGVpY2h0ZXJ1bmcgZnVlciBkaWVqZW5pZ2VuLCBkaWUgbmljaHQgdWViZXIgaXJnZW5kLQorICAgICAgICAgICAgICAgIHdlbGNoZSBGcm9udGVuZC1Qcm9ncmFtbWUgdmVyZnVlZ2VuLiBNYW4gbGFldWZ0IGVpbmVuIFdlZworICAgICAgICAgICAgICAgIGltbWVyIGJpcyB6dXIgbmFlY2hzdGVuIEFiendlaWd1bmcuCisKKzE0OiAgIDUwMCBNYWdpc2NoZXIgQmV1dGVsLgorICAgICAgICAgICAgICAgIEVpbiBuZXR0ZXMgJ1Rvb2wnLCB1bSBhbmRlcmUgenUgYWVyZ2Vybi4gV2VyIGhhdCBuaWNodAorICAgICAgICAgICAgICAgIHNjaG9ubWFsIHZvciBlaW5lciBTY2hhdHRlbnJ1ZXN0dW5nIGdlc3RhbmRlbiwgdW5kIHNpY2gKKyAgICAgICAgICAgICAgICBnZWZyYWd0LCB3YXJ1bSBlciBzaWUgbmljaHQgbmVobWVuIG9kZXIgYW56aWVoZW4ga2Fubi4KKyAgICAgICAgICAgICAgICBBdXRvbG9hZC4KKworMTU6IDExMTExIEVpbmUgV3VlbnNjaGVscnV0ZS4KKyAgICAgICAgICAgICAgICBadW0gQXVmZmluZGVuIHZvbiBaYXViZXJ0cmFlbmtlbi4gRWlnbmV0IHNpY2ggbnVyIGJlaQorICAgICAgICAgICAgICAgIGtvbmtyZXRlbSBWZXJkYWNodCwgZGEgc2llIG51ciBhbnplaWd0LCBvYiBzaWNoIGVpbiBaVAorICAgICAgICAgICAgICAgIGltIFJhdW0gYmVmaW5kZXQuCisKKzE2OiAgMzAwMCBFaW4gVGVzdHJvZWhyY2hlbiAoZ2VicmF1Y2hzZmVydGlnKS4KKyAgICAgICAgICAgICAgICA8aGljaz4hIFdpZSBiZXNvZmZlbiBpc3QgbWFuIGVpZ2VudGxpY2g/IFdpZWRlcnZlcndlbmRiYXIuCisKKzE3OiAgMzAwMCBFaW4gU2NoaWViZXB1enpsZS4KKyAgICAgICAgICAgICAgICBXZXIgYWVyZ2VydCBzaWNoIG5pY2h0LCB3ZW5uIGRhcyBGcmV1bmRzY2hhZnRzYmFuZCBhdXMKKyAgICAgICAgICAgICAgICBpcmdlbmR3ZWxjaGVuIEdydWVuZGVuIHBsb2V0emxpY2ggZ2FueiBvYmVuIGltIEludmVudG9yeQorICAgICAgICAgICAgICAgIHN0ZWh0PyBIaWVybWl0IGthbm4gZGFzIEludiBuYWNoIEJlbGllYmVuIHVtc29ydGllcnQgd2VyZGVuLgorICAgICAgICAgICAgICAgIEF1dG9sb2FkLgorCisxODogICA1MDAgRWluIER1ZGVsc2Fjay4KKyAgICAgICAgICAgICAgICBEYXMga29tZm9ydGFiZWxzdGUgTXVzaWtpbnN0cnVtZW50IE1vcmdlbkdyYXVlbnMuCisgICAgICAgICAgICAgICAgTWFuIGthbm4gc29nYXIgZGllIHZvcmdlZmVydGlndGVuIFN0dWVja2UgZ2VuYXUKKyAgICAgICAgICAgICAgICBhbnNwcmVjaGVuLi4uCisKKzE5OiAgIDQ5OSBFaW4gaGFuZGdlYXJiZWl0ZXRlciBNaW5pLUZsYW1tZW53ZXJmZXIgKHRtKS4KKyAgICAgICAgICAgICAgICAnZmxhbWUnIEVpbiBuZXR0ZXIgR2FnLgorCisyMDogICAxOTkgRWluZSBidW50ZSBTcHJpdHpwaXN0b2xlLgorICAgICAgICAgICAgICAgICdzcGxhc2gnIFNpZWhlIEZsYW1tZW53ZXJmZXIuCisKKzIxOiAgIDkwMCBFaW4gUGFhciBmZXN0ZSBTY2h1aGUuCisgICAgICAgICAgICAgICAgRGFzICdydHJldGUnISBMZWlkZXIgd2VyZGVuIChub2NoKSBrZWluZSBBZGpla3RpdmUKKyAgICAgICAgICAgICAgICBha3plcHRpZXJ0LgorCisyMjogIDQ1MDAgRWluZSBTdGltbWdhYmVsLgorICAgICAgICAgICAgICAgIElkZWFsIGZ1ZXIgZGllLCBkaWUgSGlwcGUgbmljaHQgbW9lZ2VuLgorICAgICAgICAgICAgICAgIElzdCBldHdhcyBpbiBkZXIgUmljaHR1bmcgJ0FudGktSGlwcGUtQnV0dG9uJy4KKworMjM6ICAgMjk4IEVpbiBTdHJhbmRiYWxsLgorICAgICAgICAgICAgICAgIEthbm4gbWFuIGFuZGVyZW4gTGV1dGVuIHp1d2VyZmVuLiBJc3QgbmljaHQgc28gbHVzdGlnIHdpZQorICAgICAgICAgICAgICAgIEJvaW5ncyBoYW5kZ2VuYWVodGVzIEtpc3NlbiwgZGFmdWVyIGFiZXIgYXVjaCBuaWNodCBzbworICAgICAgICAgICAgICAgIHByb3Zva2FudC4KKworMjQ6ICAgNzk4IEVpbmUgbWFnaXNjaGUgQmllcmZsYXNjaGUuCisgICAgICAgICAgICAgICAgRnVlciBCaWVydHJpbmtlciBlaW4gTXVzcyEgRGllamVuaWdlbiwgZGllICdpaHIgQmllcicgbmljaHQKKyAgICAgICAgICAgICAgICBhdWYgZGVyIExpc3RlIGZpbmRlbiwga29lbm5lbiBqYSBkZW0gZW50c3ByZWNoZW5kZW4gTWFnaWVyCisgICAgICAgICAgICAgICAgbmUgTWFpbCBzY2hyZWliZW4uIEFjaGphIC0gU3ludGF4OiB3dWVuc2NoZSA8c29ydGU+CisKKzI1OiAgIDE1MCBFaW4gTWVzc2VyIE1hcmtlIFNhbXRoYW5kc2NodWguCisgICAgICAgICAgICAgICAgV2VyIG1pdCBkaWVzZXIgV2FmZmUgZ2VnZW4gZWluZW4gU2NobWV0dGVybGluZyBrYWVtcGZ0LCBkYXJmCisgICAgICAgICAgICAgICAgZ2V0cm9zdCBpZGVsbiwgZGVubiBzaWUgaGFlbHQsIHdhcyBzaWUgdmVyc3ByaWNodC4KKworMjY6ICAzMDAwIEVpbiBMYWctTy1NZXRlci4KKyAgICAgICAgICAgICAgICBJc3QgaW50ZXJlc3NhbnQsIGFiZXIgbGVpZGVyIG5pY2h0IGF1dG9sb2FkLiBXZXIgd29sbHRlCisgICAgICAgICAgICAgICAgbmljaHQgc2Nob24gaW1tZXIgd2lzc2VuLCB3aWV2aWVsIExhZyBtYW4gZGVubiBudW4gd2lya2xpY2gKKyAgICAgICAgICAgICAgICBoYXQuLi4KKworMjc6ICAgODk1IEVpbmUgRGlkZGwtS251ZGRlbC1NYXVzLgorICAgICAgICAgICAgICAgIEZ1ZXIgZGllLCBkaWUgc2ljaCBpbiBNb3JvbiBuaWNodCBhdXNrZW5uZW4gb2RlciBrZWluZSBMdXN0CisgICAgICAgICAgICAgICAgaGFiZW4sIHNpY2ggYW4gZW50c3ByZWNoZW5kZXIgU3RlbGxlIGFuenVzdGVsbGVuLgorCisyODogICAxNTAgRWluIDRHZXdpbm50LVNwaWVsLgorICAgICAgICAgICAgICAgIFNTUCBsZWVyZ2VyYWV1bXQgPyBLZWluIEZyZXVuZCBlaW5nZWxvZ2d0ID8gRWluIGtsZWluZXMKK1NwaWVsCisgICAgICAgICAgICAgICAga2FubiBkaWUgTGFuZ2V3ZWlsZSB2ZXJ0cmVpYmVuLgorCisyOTogICAzMDAgRWluZSBSb2VudGdlbmJyaWxsZS4KKyAgICAgICAgICAgICAgICBFcm1vZWdsaWNodCB0aWVmZSB1bmQgc2VociBpbnRlcmVzc2FudGUgQmxpY2tlIHVudGVyIGRpdmVyc2UKKyAgICAgICAgICAgICAgICBTY2hvdHRlbnJvZWNrZS4ganVzdCBmb3IgZnVuLgorCiszMDogIDUwNTIgRWluIGtsZWluZXIgZ3JhdWVyIEthc3Rlbi4KKyAgICAgICAgICAgICAgICBFaW5lcyBkZXIgYmVzdGVuIFNlaGVydG9vbHMuIE1hbiBrYW5uIG1pdCBpaG0gTmFjaHJpY2h0ZW4gaW4KKyAgICAgICAgICAgICAgICBGb3JtIGdhbnplciBUZXh0YmxvZWNrZSBhbiBhbmRlcmUgU3BpZWxlciBzZW5kZW4uIEF1dG9sb2FkLgorCiszMTogIDMwMDMgRWluIElrb25vZ3JhcGguCisgICAgICAgICAgICAgICAgRnVlciBrbGVpbmUgU2NobmFwcHNjaHVlc3NlIHp3aXNjaGVuZHVyY2guIEhhZWx0IGRhcyBQX0xvbmcKKyAgICAgICAgICAgICAgICBkZXMgYmV0cmFjaHRldGVuIE9iamVrdGVzIGZlc3QuCisKKworKDQvOTUsIEN1Y2h1bGxpbikKKworCitIYXZlIEZ1bgorCitDdWNodWxsaW4gKCkKKworCisKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvOCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjZWFiYwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzgKQEAgLTAsMCArMSw0MyBAQAorOC4gREVTSUdORVItU0VIRVIKKworTnVuLCB2aWVsbGVpY2h0IGlzdCBkaWVzZXIgVGl0ZWwgYXVjaCBlaW4gd2VuaWcgdWViZXJ0cmllYmVuLiBBYmVyIGFscyBTZWhlcgora2FubnN0IER1IERlaW5lIGdlc2FtdGUgRXJzY2hlaW51bmcgaW0gTVVEIHNlbGJzdCBnZXN0YWx0ZW46CisKK051biwgRGVzaWduZXJ0eXBlbiBnbGFlbnplbiBkdXJjaCBpaHIgQWV1c3NlcmVzLCBhbHNvIGZhbmdlbiB3aXIgbWFsIGJlaW0KK0F1c3NlaGVuIGFuOiBXYXMgZGllIFNwaWVsZXIgc2VoZW4sIHdlbm4gc2llIERpY2ggdW50ZXJzdWNoZW4sIGthbm5zdCBEdSBtaXQKK2RlbSBCZWZlaGwgJ2V4dHJhbG9vaycgYmVzdGltbWVuLiBEaWUgZG9ydCBlaW5nZWdlYmVuZSBCZXNjaHJlaWJ1bmcgd2lyZCBkZXIKK0F1Zmxpc3R1bmcgZGVzc2VuLCB3YXMgRHUgYmVpIERpciB0cmFlZ3N0LCB2b3Jhbmdlc3RlbGx0LgorCitadXIgRXJzY2hlaW51bmcgZ2Vob2VydCBhdWNoIGRhcyBBdWZ0cmV0ZW4sIGFsc28gZGVzaWduZW4gd2lyIG1hbCBlaW4gYmlzY2hlbgorYW4gRGVpbmVuIG1lc3NhZ2VzIGhlcnVtLCBkaWUgZXJzY2hlaW5lbiwgd2VubiBEdSBlaW5lbiBSYXVtIGJldHJpdHRzdCBvZGVyCit2ZXJsYWVzc3QuIERpZXMga2FubnN0IER1IG1pdCBzZXRtaW4gKHRleHQpIGJ6dy4gc2V0bW91dCAodGV4dCkgc2V0emVuLiBVbmQKK3dlbm4gRHUgbW9lY2h0ZXN0LCBrYW5uc3QgRHUgbWl0IHNldG1tb3V0IGJ6dy4gc2V0bW1pbiBkaWUgTWVsZHVuZ2VuIHNldHplbiwKK2RpZSBFcnNjaGVpbmVuLCB3ZW5uIER1IGVpbmVuIE9ydCBtaXR0ZWxzIGVpbmVzIHRlbGVwb3J0cyB2ZXJsYWVzc3QvCitiZXRyaXR0c3QuCisKK0RvY2ggYXVjaCBEZXNpZ25lcnNlaGVyIGxlYmVuIHVudGVyIGRlbSBKb2NoIGRlcyBBcm1hZ2VkZG9uLCB1bmQgc2luZCBkYWhlcgorbWFuY2htYWwgV2FmZmVuLSB1bmQgUnVlc3R1bmdzbG9zLiBXZXIgZXMgYWJlciBuaWNodCBlcnRyYWdlbiBrYW5uLCBpbiBkaWVzZW4KK2JpdHRlcmVuIFN0dW5kZW4gaW1tZXIgZGllIE1lbGR1bmcgJ2dyZWlmZnQgbWl0IGJsb3NzZW4gSGFlbmRlbiBhbicgenUgc2VoZW4sCitkZXIga2FubiBzaWNoIG1pdHRlbHMgZGVzIEJlZmVobHMgJ3NldGhhbmRzICh0ZXh0KScgZWluZSBtYXJ0aWFsaXNjaGVyZSAob2RlcgorYXVjaCB6YWVydGxpY2hlcmUsIGplIG5hY2ggR2VzY2htYWNrIDspKSBLYW1wZm1lbGR1bmcgZnVlciBzZWluZSBIYWVuZGUKK3NldHplbi4KKworTnVuLCBzb24gcmljaHRpZ2VyIFNjaGlnZ2ktTWlnZ2kgU2VoZXIgaGF0IG5hdHVlcmxpY2ggYXVjaCBlaW5lbiB0b3RhbAorbGFlc3NpZ2VuIE5hbWVuLCBuaWNodCBzbyB3YXMgb2VkZXMgd2llICdXdXJzdCwgZGllIFNlaGVyaW4nLiBVbmQgZGVzaGFsYgora29lbm50ZSBzaWNoIFd1cnN0IGVpbmVuIGVpZ2VuZW4gTmFtZW4gZ2ViZW4sIG1pdCBkZW0gQmVmZWhsICd0aXRlbCAodGV4dCknLgorRGFubiBoaWVzc2Ugc2llIGhpbnRlcmhlciBCZWlzcGllbHN3ZWlzZSAnV3Vyc3QgaXNzIG5lIFd1cnN0Jy4gVW5kIHdlbSBkYXMKK25vY2ggbmljaHQgbGFlc3NpZyBnZW51ZyBpc3QsIGRlciBzZXR6dCBzaWNoIG1pdCAncHJlc2F5ICh0ZXh0KScgYXVjaCBub2NoCitlaW5lbiBOYW1lbnN2b3JzYXR6LiBCZWlzcGllbDogJ01hY2ggbmUgV3Vyc3QsIGlzcyBuZSBXdXJzdCcuIFdlbm5nbGVpY2ggZGFzCit2aWVsbGVpY2h0IGRvY2ggbmljaHQgU08gY29vbCBpc3QuIEdlc2NobWFja3NzYWNoZSBoYWx0IDspLgorCitBY2ggamEsIHVuZCB3ZW5uIG1hbiBkYW5uIGJlaSBhbGwgZGVyIFJ1bWRlc2lnbmVyZWkgdmVyZ2Vzc2VuIGhhYmVuIHNvbGx0ZSwKK3dhcyBtYW4gdWViZXJoYXVwdCBlaW5nZWdlYmVuIGhhdCwgc28gZXJoYWVsdCBtYW4gbWl0IGRlbSBCZWZlaGwgJ3JldmlldycKK2VpbmVuIFVlYmVyYmxpY2sgdWViZXIgZGllIG1laXN0ZW4gRWluc3RlbGx1bmdlbi4KKworRWluZSBBbm1lcmt1bmcgbm9jaDogRGVyIFRvZXRlciAoSEFJTCwgSEFJTCBBTEwhKSBoYXQga3VlcnpsaWNoIGVpbmUga2xlaW5lCitFcndlaXRlcnVuZyBpbiBkZW4gQmVmZWhsIHNldG1vdXQgZWluZ2ViYXV0OiBOdW5tZWhyIGlzdCBlcyBtb2VnbGljaCwgZGVuCitUZXh0ICduYWNoIChSaWNodHVuZyknIG5pY2h0IG1laHIgbnVyIGFtIEVuZGUsIHNvbmRlcm4gaXJnZW5kd28gaW0gVGV4dAorZXJzY2hlaW5lbiB6dSBsYXNzZW47IGRhbm4gbXVzcyBpbSBUZXh0IGRlciBvdXQtbWVzc2FnZSBlaW4gIyBlcnNjaGVpbmVuLCBkaWUKK2Rhbm4gZHVyY2ggJ25hY2ggKFJpY2h0dW5nKScgZXJzZXR6dCB3aXJkLiBVbnRlcmRydWVja2VuIGthbm5zdCBEdSBkaWUKK1JpY2h0dW5nc2FuZ2FiZSBhbGxlcmRpbmdzIG5pY2h0LCB3ZW5uIER1IGRpZSAjIHdlZ2xhZXNzdCwgd2lyZCBkaWVzZQorQW5nYWJlIGVpbmZhY2ggaGludGVuIGFuZ2VoYWVuZ3QuLgpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvOSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiMDhkMQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxLzkKQEAgLTAsMCArMSw5IEBACisKKzkuIEZFSExFUk1FTERVTkcKKworRWluIG5pY2h0IGJlc29uZGVycyB3aWNodGlnZXIsIGFiZXIgaW4gc2VpbmVuIEF1c3dpcmt1bmdlbiBoYWV1ZmlnCithbmdldHJvZmZlbmVyIEJlZmVobDogRmVobGVybWVsZHVuZy4gV2VubiBEaXIgZGFzIGV3aWdlICdXaWUgYml0dGUgPycgbGFuZ3NhbQorenUgZWludG9lbmlnIHdpcmQsIHNvIGthbm5zdCBEdSBtaXQgJ0ZlaGxlcm1lbGR1bmcgKFRleHQpJyBlaW5lbiBuZXVlbiBUZXh0CitmdWVyIERlaW5lIEZlaGxlcm1lbGR1bmcgc2V0emVuIC0gdWVicmlnZW5zIGdlbmF1c28gd2llIGZ1ZXIgZGllIFVocm1lbGR1bmcsCit3YXMgYWxsZXJkaW5ncyBzY2hvbiBhbHMgU3BpZWxlciBtZW9nbGljaCBpc3QsIHdhcyBqZWRvY2ggc2NoZWluYmFyIG51ciByZWNodAord2VuaWdlIFNwaWVsZXIgd2lzc2VuLgpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvYW5sZWl0dW5nIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvYW5sZWl0dW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTYxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9hbmxlaXR1bmcKQEAgLTAsMCArMSwyMTkgQEAKKworQU5MRUlUVU5HIE1BR0lTQ0hFUiBCRVVURUwKKworU3RlbGxlbiB3aXIgdW5zIHZvciwgV3Vyc3QsIGRpZSBTZWhlcmluLCB3b2xsdGUgZWluIEJsdXRzYXVnZXJzY2h3ZXJ0CitoZXJzdGVsbGVuLCBtaXQgZGVtIHNpZSBnaWVyaWdlIGtsZWluZSBBbmZlbmdlciBhZXJnZXJuIHdpbGw6CisKKy8ga29tbWVudGFyZSBzdGVoZW4gaW1tZXIgaGludGVyIGRlbSAvLy4uLgorLyBsb3MgZ2VodHM6ICdlcnNjaGFmZmUnIGVpbmdlYmVuLCBkYW5uIGlzdCBtYW4gaW0gQmV1dGVsZWRpdG9yLCBkZXIgZGVtCisvIGJla2FubnRlbiBlZGl0b3Igdm9uIE1QQSB1bmQgbWFpbCBnbGVpY2h0LgorLyBXdXJzdCBnaWJ0IHp1bmFlY2hzdCBlaW5lIElEIGZ1ZXIgZGFzIFNjaHdlcnQgZWluOgorCitCaXR0ZSBlaW4gU2NobHVlc3NlbHdvcnQgZWluZ2ViZW46CitdaWQKK11CaXR0ZSBlaW5lIG5ldWUgSUQgZWluZ2ViZW46Citdc2Nod2VydAorCisvIG51biBtb2VjaHRlIFd1cnN0IG5vY2ggZWluZSB3ZWl0ZXJlIElEIGVpbmdlYmVuOgorCitCaXR0ZSBlaW4gU2NobHVlc3NlbHdvcnQgZWluZ2ViZW4sIH5oIGZ1ZXIgSGlsZmUuCitdaWQKKworLyBudW4ga29tbWVuIGFscyBBdXNnYWJlIGF1Y2ggZGllIGJpc2hlciBlaW5nZWdlYmVuZW4gSURzLCBpbiB1bnNlcmVtIEZhbGw6CisKK0Jpc2hlcmlnZSBJRHM6CiswIHNjaHdlcnQKK0JpdHRlIGVpbmUgbmV1ZSBJRCBlaW5nZWJlbgorXWJsdXRzYXVnZXJzY2h3ZXJ0CisKKy8gV3Vyc3QgaGFldHRlIGhpZXIgdWVicmlnZW5zIGtlaW5lIElEIGVpbmdlYmVuIG11ZXNzZW4uIGhhZXR0ZSBzaWUgbnVyIGlkLAorLyB1bmQgZGFuYWNoIGVudGVyIGVpbmdlZ2ViZW4sIGhhZXR0ZSBkaWVzIGRhenUgZ2VkaWVudCwgZGllIGJpc2hlcgorLyBlaW5nZWdlYmVuZW4gSURzIGFuenVzY2hhdWVuLgorLyBXZWl0ZXIgZ2VodHMgbWl0IGRlciBMYW5nYmVzY2hyZWlidW5nIChkYXMgd2FzIG1hbiBzaWVodCwgd2VubiBtYW4KKy8gdW50ZXJzdWNoZSAoaWQpIGVpbmdpYnQpOgorCitCaXR0ZSBlaW4gU2NobHVlc3NlbHdvcnQgZWluZ2ViZW46CitdbGFuZworQml0dGUgZGllIGF1c2Z1ZWhybGljaGUgQmVzY2hyZWlidW5nIGFuZ2ViZW4uIEJlZW5kZW4gbWl0ICoqCitdRGllcyBpc3QgZGFzIFNjaHdlcnQgZWluZXMgZWluc3QgbWFlY2h0aWdlbiBWYW1waXJzLiBOdW4gaXN0IGVzCitdamVkb2NoIHNvIHdlcnRsb3MgZ2V3b3JkZW4sIGRhc3Mgc2ljaCBqZWRlciBTZWhlciBlcyBtaXQgc2VpbmVtCitdbWFnaXNjaGVuIEJldXRlbCBrbG9uZW4ga2Fubi4KK11FcyBoYXQgZWluZW4gZ29sZGVuZW4gU2NoYWZ0LgorXSoqCisKKy8gV3Vyc3QgbW9lY2h0ZSwgZGFzcyBkaWUgU3BpZWxlciBlaW5lIEVya2xhZXJ1bmcgZGFmdWVyIGtyaWVnZW4sIGRhc3MgZGFzCisvIFNjaHdlcnQgYXV0b21hdGlzY2ggZ2V6dWVja3QgaXN0Li4uIGtlaW4gUHJvYmxlbSwgZGFmdWVyIGJlc2NocmVpYnQgc2llIGRlbgorLyBTY2hhZnQgZGVzIFNjaHdlcnRlcyBnZW5hdWVyOgorCitCaXR0ZSBlaW4gU2NobHVlc3NlbHdvcnQgZWluZ2ViZW46CitdZGV0YWlsCitCaXR0ZSBkZW4gRGV0YWlsbmFtZW4gZWluZ2ViZW46CitzY2hhZnQKK11OdW4gYml0dGUgZWluZSBCZXNjaHJlaWJ1bmcgZnVlcjogIiBzY2hhZnQgIiBlaW5nZWJlbi4KK11EaWVzZXIgU2NoYWZ0IGlzdCB2b24gcHVyZXIgTWFnaWUuIFdlciBkYXMgU2Nod2VydCBiZXNpdHp0LCB6dWVja3QgZXMKK11hdXRvbWF0aXNjaC4KK10qKgorQml0dGUgZWluIFNjaGx1ZXNzZWx3b3J0IGVpbmdlYmVuLCB+aCBmdWVyIEhpbGZlLgorXQorCisvIERhcyB3YXJzLCBzY2hvbiBiZXNpdHp0IGRhcyBTY2h3ZXJ0IGVpbmVuIFNjaGFmdC4KKy8gRWJlbnNvIG11c3Mgbm9jaCBlaW5lIEt1cnpiZXNjaHJlaWJ1bmcgYW5nZWdlYmVuIHdlcmRlbjoKKworQml0dGUgZWluIFNjaGx1ZXNzZWx3b3J0IGVpbmdlYmVuLCB+aCBmdWVyIEhpbGZlLgorXWt1cnoKK0JpdHRlIGRpZSBLdXJ6YmVzY2hyZWlidW5nIGVpbmdlYmVuCitdRWluIEJsdXRzYXVnZXJzY2h3ZXJ0IChnZXp1ZWNrdCkKKworLyBVZWJlcnJhc2NodCA/IERpZSBLdXJ6YmVzY2hyZWlidW5nIG11c3MgZ2VuYXUgc28gZWluZ2VnZWJlbiB3ZXJkZW4sIHdpZSBzaWUKKy8gZGVyIFNwaWVsZXIgaW4gc2VpbmVtIGludmVudG9yeSBzaWVodC4gRGFtaXQgZGllc2UgQmVzY2hyZWlidW5nIGFiZXIgbmljaHQKKy8gZXJzY2hlaW50LCB3ZW5uIGRhcyBTY2h3ZXJ0IGFuIGRhcyAnT3BmZXInIHVlYmVyZ2ViZW4gd2lyZCwgbXVzcyBlaW4gTmFtZQorLyBlaW5nZWdlYmVuIHdlcmRlbjoKKworQml0dGUgZWluIFNjaGx1ZXNzZWx3b3J0IGVpbmdlYmVuLCB+aCBmdWVyIEhpbGZlLgorXW5hbWUKK0JpdHRlIGRlbiBOYW1lbiBlaW5nZWJlbgorXUJsdXRzYXVnZXJzY2h3ZXJ0CisKKy8gRXJnbzogV2lyZCBrZWluIE5hbWUgc3BlemllbGwgZWluZ2VnZWJlbiwgd2lyZCBlcnNjaGVpbnQsIHdlbm4gZGFzIE9iamVrdAorLyB3ZWl0ZXJnZWdlYmVuIG9kZXIgZmFsbGVuZ2VsYXNzZW4gd2lyZCwgZGllIGt1cnpiZXNjaHJlaWJ1bmcgZGFyZ2VzdGVsbHQuCisvIFVtIGRpZSB6dSB2ZXJtZWlkZW4sIGdpYnQgZXMgZGVuIEJlZmVobCAnbmFtZScuCisvIEFsbGVyZGluZ3Mgd3VlcmRlIGJlaW0gVWViZXJnZWJlbiBkZXMgU2Nod2VydGVzIGpldHp0IGVyc2NoZWluZW46ICdXdXJzdAorLyBnaWJ0IERpciBkZW4gU2Nod2VydCcsIGRhIG5vY2gga2VpbiBHZXNjaGxlY2h0IGdlc2V0enQgd3VyZGUsIHVuZCBkZWZhdWx0LQorLyBnZXNjaGxlY2h0IG1hZW5ubGljaCBpc3QuIERhaGVyIGZvbGd0IG51bjoKKworQml0dGUgZWluIFNjaGx1ZXNzZWx3b3J0IGVpbmdlYmVuLCB+aCBmdWVyIEhpbGZlLgorXWFydAorQml0dGUgZGllIEtlbm56aWZmZXIgZnVlciBkYXMgR2VzY2hsZWNodCBlaW5nZWJlbgorXW1hZW5ubGljaDogMSAgICAgIHdlaWJsaWNoOiAyICAgICAgIHNhZWNobGljaDogMAorXTAKKworLyBOdW4gaXN0IG1pdCBzYWVjaGxpY2ggYXVjaCBkYXMgcmljaHRpZ2UgR2VzY2hsZWNodCBnZXNldHp0LgorLyBOdW4sIHNvIGVpbiBTY2h3ZXJ0IHNvbGwgYXVjaCBldHdhcyB3aWVnZW4sIGFsc28gZ2lidCBXdXJzdCBub2NoIGVpbgorLyBHZXdpY2h0IG1pdCBhbjoKK0JpdHRlIGVpbiBTY2hsdWVzc2Vsd29ydCBlaW5nZWJlbiwgfmggZnVlciBIaWxmZS4KK11nZXdpY2h0CitCaXR0ZSBkYXMgR2V3aWNodCBpbiBHcmFtbSBlaW5nZWJlbiAoTWluaW11bSAxMDApCitdNTAwMAorCisvIG51biBtb2VjaHRlIHNpY2ggV3Vyc3Qgbm9jaCB2ZXJnZXdpc3Nlcm4sIGRhc3MgaWhyIFBsYW4gZ3V0IHZvcmJlcmVpdGV0CisvIGlzdC4gRGFoZXIgbGFlc3N0IHNpZSBzaWNoIG1pdCAnfnInIG5vY2htYWwgZWluZW4gVWViZXJibGljayB1ZWJlciBkYXMKKy8gU2Nod2VydCBnZWJlbjoKKworQml0dGUgZWluIFNjaGx1ZXNzZWx3b3J0IGVpbmdlYmVuOgorXX5yCitJRHM6CiswIGJsdXRzYXVnZXJzY2h3ZXJ0CisxIHNjaHdlcnQKK0t1cnpiZXNjaHJlaWJ1bmc6CitFaW4gQmx1dHNhdWdlcnNjaHdlcnQgKGdlenVlY2t0KQorTmFtZToKK0JsdXRzYXVnZXJzY2h3ZXJ0CitHZXdpY2h0OiA1MDAwIEdyYW1tCitHZXNjaGxlY2h0OiBzYWVjaGxpY2gKK0F1c2Z1ZWhybGljaGUgQmVzY2hyZWlidW5nOgorRGllcyBpc3QgZGFzIFNjaHdlcnQgZWluZXMgZWluc3QgbWFlY2h0aWdlbiBWYW1waXJzLiBOdW4gaXN0IGVzIGplZG9jaAord2VydGxvcyBnZXdvcmRlbiwgZGFzcyBzaWNoIGplZGVyIFNlaGVyIGVzIG1pdCBzZWluZW0gbWFnaXNjaGVuIEJldXRlbAora2xvbmVuIGthbm4uCitEZXRhaWxzOgorMDogc2NoYWZ0OgorRGllc2VyIFNjaGFmdCBpc3Qgdm9uIHB1cmVyIE1hZ2llLiBXZXIgZGFzIFNjaHdlcnQgYmVzaXR6dCwgenVlY2t0IGVzCithdXRvbWF0aXNjaC4KK10KKworLyBXdXJzdCBpc3QgenVmcmllZGVuLCB1bmQgbW9lY2h0ZSBudW4gZGllICdBa3Rpb24gQlNTIGZ1ZXIgYWxsZScgYmVnaW5uZW4sCisvIHVuZCBiZW51dHp0IGRlbiBCZWZlaGwgJ3N0YXJ0JywgdW0gZGFzIFNjaHdlcnQgZW5kZ3VlbHRpZyB6dSBlcnpldWdlbi4KKy8gQWxsZXJkaW5ncyBhY2h0ZXQgc2llIGRhYmVpIGRhcmF1ZiwgbmljaHQgaW0gc2VsYmVuIFJhdW0gd2llIGlociBPcGZlciB6dQorLyBzdGVoZW4sIGRlbm4gZGllIFVtc3RlaGVuZGVuIGVyaGFsdGVuIGJlaW0gRXJ6ZXVnZW4gZGVzIE9iamVrdGVzIGRpZQorLyBNZWxkdW5nOgorCis+IFd1cnN0IGRlbmt0IHNjaGFyZiBuYWNoIHVuZCB6aWVodCBkYW5uIGV0d2FzIGF1cyBkZW0gbWFnaXNjaGVuIEJldXRlbAorCisvIEFsbGVzIGtsYXIsIGRhcyBPYmpla3Qga2FubiBlcnNjaGFmZmVuIHdlcmRlbjoKKworXXN0YXJ0CitEdSBoYXN0IGVpbiBuZXVlcyBPYmpla3QgZ2VzY2hhZmZlbi4gRXMgaXN0OgorQmx1dHNhdWdlcnNjaHdlcnQKK0JpdHRlIGVpbiBTY2hsdWVzc2Vsd29ydCBlaW5nZWJlbiwgfmggZnVlciBIaWxmZS4KK10KKworLyBkdW1tZXJ3ZWlzZSBibGVpYnQgbWFuIG5hY2ggZGVtIEVyc2NoYWZmZW4gZWluZXMgT2JqZWt0ZXMgaW1tZXIgaW0gZWRpdG9yCisvIGRlcyBCZXV0ZWxzIGRyaW4uIEFiYnJlY2hlbiBtdXNzIG1hbiBhbHNvIG1pdCAnKionLCB3YXMgenUgZWluZXIgZXR3YXMKKy8gdmVyd2lycmVuZGVuIE1lbGR1bmcgZnVlaHJ0OgorCitdQml0dGUgZWluIFNjaGx1ZXNzZWx3b3J0IGVpbmdlYmVuLCB+aCBmdWVyIEhpbGZlLgorXSoqCitCZXNjaHJlaWJ1bmcgaXN0IGFiZ2Vicm9jaGVuLiBEaWUgV2VydGUgd3VyZGVuIGJlaWJlaGFsdGVuLgorPgorLyBXdXJzdCBoYWV0dGUgYXVjaCBvaG5lICdzdGFydCcgZWluenVnZWJlbiBkZW4gQmV1dGVsLWVkaXRvciB2ZXJsYXNzZW4KKy8ga29lbm5lbjsgc29mZXJuIG1hbiBkaWVzIG1pdCAnKionICh1bmQgbmljaHQgbWl0ICd+cScgdHV0IGthbm4gbWFuIG5hZW1saWNoCisvIG1pdCAnYmVhcmJlaXRlJyB3aWVkZXIgaW4gZGVuIEJldXRlbC1lZGl0b3IgaGluZWluZ2VoZW4sIHVuZCB1ZWJlcm5pbW10CisvZGFiZWkgZGllIGFsdGVuCisvIFdlcnRlLgorCisvIERhc3MgZGllIFdlcnRlIGJlaWJlaGFsdGVuIHd1cmRlbiwgaGF0IGF1Y2ggZWluZSBBdXN3aXJrdW5nIGRhcmF1ZiwgZGFzcworZGFzIGVyc2NoYWZmZW5lCisvIE9iamVrdCBhYmdlc3BlaWNoZXJ0IHdlcmRlbiBrYW5uLCB1bSBlcyBzcGFldGVyIG5vY2htYWwgenUgbGFkZW4uIERpZXMKK21vZWNodGUgV3Vyc3QKKy8gbmF0dWVybGljaCBnZXJuZSBtYWNoZW4sIGRhIHNpZSB6dSBmYXVsIGlzdCwgZGVuIGdhbnplbiBLcmFtIG5vY2htYWwgenUKK3RpcHBlbiAodW5kIHdlaWwKKy8gV3Vyc3QgamEgRElSIGFsbGUgRnVua3Rpb25lbiBkZXMgQmV1dGVscyB6ZWlnZW4gc29sbDspKSAtIGF1c3NlcmRlbSBpc3RzCityZWNodCBlaW5mYWNoIC0gbWl0CisvIGRlbSBCZWZlaGwgJ2VyaGFsdGUgKG5yLiknIGthbm4KKworPiBlcmhhbHRlIDEKKz4gRGFzIE9iamVrdCB3dXJkZSBhdWYgUGxhdHogMSBhYmdlc3BlaWNoZXJ0LgorCisvIHVtIHNpY2hlcnp1Z2VoZW4gc2NoYXV0IFd1cnN0IG5vY2htYWwgbWl0ICdzcGVpY2hlcnBsYWV0emUnIG5hY2gsIG9iIGRpZQorU3BlaWNoZXJ1bmcKKy8gZ2VrbGFwcHQgaGF0CisKKz5zcGVpY2hlcnBsYWV0emUKK1NwZWljaGVycGxhdHogMDogTmljaHQgYmVsZWd0LgorU3BlaWNoZXJwbGF0eiAxOiBFaW4gQmx1dHNhdWdlcnNjaHdlcnQgKGdlenVlY2t0KS4KK1NwZWljaGVycGxhdHogMjogTmljaHQgYmVsZWd0LgorU3BlaWNoZXJwbGF0eiAzOiBOaWNodCBiZWxlZ3QuCisoLi4uKQorCisvIG9mZmVuc2ljaHRsaWNoIGhhdCBlcyBmdW5rdGlvbmllcnQsIFNwZWljaGVycGxhdHogMSB3dXJkZSBiZWxlZ3QsIG1hbiBzaWVodAorZGllIEt1cnpiZS0KKy8gc2NocmVpYnVuZyBkZXMgT2JqZWt0ZXMuCisKKy0tLS0tLS0tLQorCisvIFdvY2hlbiBzcGFldGVyLiBXdXJzdCBtb2VjaHRlIGRhcyBnZXNwZWljaGVydGUgU2Nod2VydCBsYWRlbiwgdW0gZXMgbmV1IHp1CitlcnpldWdlbi4KKy8gZGF6dSBiZW51dHp0IHNpZSBkZW4gQmVmZWhsICdsYWRlIChuci4pJworCis+IGxhZGUgMQorPiBPYmpla3Qgdm9uIFNwZWljaGVycGxhdHogTnIuMSB3dXJkZSBnZWxhZGVuLgorCisvIERhcyByZWljaHQgYWxsZXJkaW5ncyBub2NoIG5pY2h0LiBKZXR6dCBzaW5kIG5hZW1saWNoIG51ciBkaWUgV2VydGUgaW0KK0JldXRlbCBnZWxhZGVuLCBhYmVyCisvIGRhcyBPYmpla3Qgbm9jaCBuaWNodCBlcnNjaGFmZmVuLiBEYWhlciBmb2xndCB6dW5hZWNoc3QgZGVyIEJlZmVobAorYmVhcmJlaXRlIChuaWNodAorLyAnZXJzY2hhZmZlJywgd2VpbCBkaWVzZXIgZGllIGV2dGwuIG5vY2ggdm9yaGFuZGVuZW4gV2VydGUgaW0gQmV1dGVsCitsb2VzY2h0ISkKKworPiBiZWFyYmVpdGUKK0JpdHRlIGVpbiBTY2hsdWVzc2Vsd29ydCBlaW5nZWJlbjoKK10KKworLyBhbiBkaWVzZXIgU3RlbGxlIGthbm4gV3Vyc3QgbnVuIGRhcyBhbHRlIEJsdXRzYXVnZXJzY2h3ZXJ0IGdlbmF1c28KK2JlYXJiZWl0ZW4gd2llIHZvcmhlciAtCisvIG5hdHVlcmxpY2gga2FubiBzaWUgZGllIHZvcmhhbmRlbmVuIERhdGVuIHVlYmVybmVobWVuLCBhYmVyIGF1Y2ggYWVuZGVybgorKHdhcyBkdXJjaAorLyBlaW5mYWNoZXMgbmV1IGVpbmdlYmVuIGdlc2NoaWVodCkuIFdlbm4gc2llIGRhcyBTY2h3ZXJ0IG5pY2h0IHdlaXRlcgorYmVhcmJlaXRlbiBtb2VjaHRlCisvIGthbm4gc2llIG51biBlaW5mYWNoICdzdGFydCcgZWluZ2ViZW4sIHVuZCBkZW4gZWRpdG9yIHZlcmxhc3Nlbi4KKy8gU28sIHVuZCB6dSBndXRlciBMZXR6dDogU29mZXJuIFd1cnN0IGRhcyB2ZXJhZXBwZWxuIHZvbiBBbmZhZW5nZXJuIGdlbnVnCitpc3QsIGthbm4gc2llIGRlbgorLyBTcGVpY2hlcnBsYXR6IGZ1ZXIgZGFzIFNjaHdlcnQgbmF0dWVybGljaCBhdWNoIGZyZWltYWNoZW4sIGRpZXMgZ2VzY2hpZWh0CitlaW5mYWNoIGR1cmNoIGRlbgorLyBCZWZlaGwgJ2VudGZlcm5lIChuci4pJworCitTbywgZGFzIHdhcnMhIEVpbmUgTWVuZ2UgVGV4dCBmdWVyIGVpbiBlaWdlbnRsaWNoIGJyYXVjaGJhcmVzIFNlaGVydG9vbCwgd2VubgorbWFuIG51ciB3dWVzc3RlLCB3aWUgZXMgZnVua3Rpb25pZXJ0IDspKQorCisKKworCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9hbnNpY2h0ZW4gYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9hbnNpY2h0ZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1Y2E5NwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxL2Fuc2ljaHRlbgpAQCAtMCwwICsxLDQgQEAKK0ZvbGdlbmRlIFJhZXVtZSBzaW5kIGJlcmVpdHMgYXVmIGRlciBTZWhlcmluc2VsIG1pdCBsYW5nYmVzY2hyZWlidW5nZW4KK3ZlcnNlaGVuOgorKEtvb3JkaW5hdGVuIHZlcnQuL2hvcml6Liwgd2llIGluIGRlciBLdXJ6YmVzY2hyZWlidW5nIGF1ZiBkZXIgSW5zZWwpCisxLDE6IFdvbHBpZS1SYXVtIDooCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9mYXEubyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxL2ZhcS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzllZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9mYXEubwpAQCAtMCwwICsxLDMgQEAKKyMwOjAKK3Byb3BlcnRpZXMgKFs6Ml0pCitzeW5vbnltIChbImxldmVsIjoiNCIsIm1haWwiOiI1IiwiZmluZ2VyIjoiMTEiLCJxdWVzdHMiOiIyIiwiZWNobyI6IjEyIiwiZmVobGVybWVsZHVuZyI6IjkiLCJzZWhlciI6IjE4IiwicmVtb3RlIjoiMTIiLCJzZXRtaW4iOiI4IiwidGl0ZWwiOiI4IiwiZmx1Y2h0cmljaHR1bmciOiIzIiwiemVpdHVuZyI6IjkiLCJoYXVzIjoiMTQiLCJzZWhlcm5hbWVuIjoiMTgiLCJrdWdlbCI6IjYiLCJwZWdhc3VzIjoiMiIsInBvcnRhbGUiOiIxIiwicXVlc3QiOiIyIiwibG9va3MiOiI4IiwibmFtZW4iOiIxOCIsImJldXRlbCI6IjEzIiwibGFkZW4iOiI3IiwiMTYiOiJrYXJ0ZSIsImFkcmVzc2VudmVyemVpY2huaXMiOiIxNiIsIm5ldWlna2VpdGVuIjoiMCIsImZhcSI6ImluaGFsdCIsIm1hZ2lzY2hlIGt1Z2VsIjoiNiIsImhhZXVzZXIiOiIxNCIsImFkcmVzc2VuIjoiMTYiLCJzZWhlcmxhZGVuIjoiNyIsInJvZWhyY2hlbiI6IjEwIiwia2FuYWVsZSI6IjkiLCJtYWdpc2NoZSI6IjYiLCJzZWhlcnF1ZXN0cyI6IjIiLCJzcGllbHBsYXR6IjoiMTUiLCJsZXZlbHMiOiI0Iiwic2VoZXJxdWVzdCI6IjIiLCJwYXJhbGxlbGRpbWVuc2lvbiI6IjEwIiwiMTkiOiJrYXJ0ZSIsInItZW1vdGUiOiIxMiIsInNlaGVybGV2ZWwiOiI0Iiwic2VoZXJoYWV1c2VyIjoiMTQiLCJhbm1lcmt1bmciOiIxNSIsImZpbmdlci1iZWZlaGwiOiIxMSIsInNlaGVybGV2ZWxzIjoiNCIsInVlYmVyc2ljaHRza2FydGUiOiJrYXJ0ZSIsInNlaGVycG9ydGFsZSI6IjEiLCJkZXNpZ25lciI6IjgiLCJzZWhlcnNwaWVscGxhdHoiOiIxNSIsInNlaGVyaGF1cyI6IjE0Iiwic2VoZXJmYXEiOiJpbmhhbHQiLCJkZXNpZ25lci1zZWhlciI6IjgiLCJkZXNpZ24iOiI4Iiwia29tbXVuaWthdGlvbiI6IjUiLCJ0cmFuc3BvcnRtb2VnbGljaGtlaXRlbiI6IjEiLF0pCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9maWxlcyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxL2ZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTNiN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9maWxlcwpAQCAtMCwwICsxLDI4IEBACisKK2ZpbGVzIHNlaGVyZmFxOiBhbGxlICtQYXRoID0gLy4uL21vcmdlbmcvc2VoZXIvZmFxL2ZhcTItMAorCisKKworMC4gTmV1aWdrZWl0ZW46IG5ld3MudHh0CisKKzEuIFRyYW5zcG9ydG1vZWdsaWNoa2VpdGVuOiBpbmhhbHQudHh0CisKKzIuIFNlaGVycXVlc3RzOiBxdWVzdC50eHQKKzMuIEZsdWNodHJpY2h0dW5nOiBmbHVjaHQudHh0Cis0LiBzZWhlcmxldmVsOiBsZXZlbC50eHQKKzU6IEtvbW11bmlrYXRpb246IGtvbW11bi50eHQKKzY6IG1hZ2lzY2hlIGt1Z2VsOiBrdWdlbC50eHQKKzc6IFNlaGVybGFkZW46IHNsYWRlbi50eHQKKzg6IGRlc2lnbmVyLXNlaGVyOiBsb29rcy50eHQKKzk6IGZlaGxlcm1lbGR1bmc6IGVycm1lcy50eHQKKzEwOiBwYXJhbGxlbGRpbWVuc2lvbi50eHQ6IHBhcmEudHh0CisxMTogZmluZ2VyLWJlZmVobDogZmluZ2VyLnR4dAorMTI6IGVjaG8sIHItZW1vdGU6IGVjaG8udHh0CisxMzogbWFnaXNjaGVyIGJldXRlbDogYmV1dGVsLnR4dAorYW5sZWl0dW5nIG1hZ2lzY2hlciBiZXV0ZWw6IGFubGVpdC50eHQKKzE0OiBzZWhlcmhhZXVzZXI6IGhhZXVzZXIudHh0CisxNTogU2VoZXJzcGllbHBsYXR6OiBzcGxhdHoudHh0CisxNjogdWViZXJzaWNodHNrYXJ0ZSBzcGllbHBsYXR6OiBzbWFwLnR4dAorMTg6IGFsbGUgc2VoZXIgaW0gbWc6IHNhbGxlLnR4dAorMTkgenVzYW1tZW5mYXNzdW5nICYgbmFjaHdvcnQ6IHp1c2FtbS50eHQKK2ZpbGVzOiBmaWxlcy50eHQKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxL2luaGFsdCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxL2luaGFsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzEwNWRlCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9mYXEvaW5oYWx0CkBAIC0wLDAgKzEsMjYgQEAKKworSW5oYWx0IGRlciBTZWhlckZBUSAyLjA6CisKKyAgIDAuIE5ldWlna2VpdGVuICAgICAgICAgICAgICAgICAgICAxMC4gUGFyYWxsZWxkaW1lbnNpb24KKyAgIDEuIFRyYW5zcG9ydG1vZWdsaWNoa2VpdGVuICAgICAgICAxMS4gRmluZ2VyLUJlZmVobAorICAgMi4gU2VoZXJxdWVzdHMgICAgICAgICAgICAgICAgICAgIDEyLiBFY2hvLCByLWVtb3RlCisgICAzLiBGbHVjaHRyaWNodHVuZyAgICAgICAgICAgICAgICAgMTMuIE1hZ2lzY2hlciBCZXV0ZWwKKyAgIDQuIFNlaGVybGV2ZWwgICAgICAgICAgICAgICAgICAgICAxNC4gU2VoZXJoYWV1c2VyCisgICA1LiBLb21tdW5pa2F0aW9uICAgICAgICAgICAgICAgICAgMTUuIFNlaGVyc3BpZWxwbGF0egorICAgNi4gTWFnaXNjaGUgS3VnZWwgICAgICAgICAgICAgICAgIDE2LiBVZWJlcnNpY2h0c2thcnRlIFNlaGVyc3BpZWxwbGF0egorICAgNy4gU2VoZXJsYWRlbiAgICAgICAgICAgICAgICAgICAgIDE3LgorICAgOC4gRGVzaWduZXItU2VoZXIgICAgICAgICAgICAgICAgIDE4LiBBbGxlIFNlaGVyIGltIE1HCisgICA5LiBGZWhsZXJtZWxkdW5nICAgICAgICAgICAgICAgICAgMTkuIFp1c2FtbWVuZmFzc3VuZyAmIE5hY2h3b3J0CisKK1VtIGRpZSBlbnRzcHJlY2hlbmRlbiBJbmhhbHRlIHp1IGxlc2VuLCBnaWIgYml0dGUgPmxpZXMgMjwgb2RlcgorPmxpZXMgc2VoZXJxdWVzdHM8IGVpbi4KK1p1IGRpZXNlciBTZWl0ZSBrb21tc3QgZHUgbWl0ID5saWVzIGluaGFsdDwgenVydWVjayEKKworTm9jaCBlaW5lIEFubWVya3VuZzogV2VubiBEdSBlaW5lIElkZWUgaGFzdCwgd2FzIGFuIGRlciBGQVEgdmVyYmVzc2VydCwKK2dlYWVuZGVydCBvZGVyIGhpbnp1Z2VmdWVndCB3ZXJkZW4gc29sbHRlLCBkYW5uIHdhZXJlIGljaCBEaXIgc2VociBkYW5rYmFyLAord2VubiBEdSBtaXIgZWluZSBrdXJ6ZSBtYWlsIHNjaGlja2VuIHd1ZXJkZXN0LCBvZGVyIG1pdCBkZW0gQmVmZWhsICdpZGVlJyBpbgorZGllc2VtIFJhdW0gYWJzZXR6ZW4gd3VlcmRlc3QgISEhCisKK1JZTkUKKworCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9rYXJ0ZSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxL2thcnRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNWU1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9rYXJ0ZQpAQCAtMCwwICsxLDYzIEBACisgICAgICAgIFNFSEVSU1BJRUxQTEFUWjogVUVCRVJTSUNIVFNLQVJURQorICAgICAgICAoU3RhbmQ6IDIwLjEuOTUpCisgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgIDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWC0tWC0tWC0tWC0tWC0tWCAgWC0tWCAgWCAgWCAgWC0tWCAgWCAgICAxCisgICBcLyBcICAgICAgICAgICAgICAgLyAgIHxcICAgICAgICAgICBcIHwgICAgIHwgIHwgIHwgICAgLworICAgL1wgIFwgICAgICAgICAgICAgLyAgICB8IFwgICAgICAgICAgIFx8ICAgICB8ICB8ICB8ICAgLworICBYICBYLS1YICBYICBYICBYLS1YICBYICBYICBYICBYICBYICBYICBYLS1YLS1YLS1YLS1YICBYLS1YICAgIDIKKyAgfCAgICAgIFwgICAgICAvICAgICAgfCAgfCAgICAgICAgICAgICAgICAvICAgICAgICAgIFwgICAvCisgIHwgICAgICAgXCAgICAvICAgICAgIHwgIHwgICAgICAgICAgICAgICAvICAgICAgICAgICAgXCAvCisgIFggIFggIFggIFgtLVggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggICAgMworICAgXCAgICAgICB8ICAgXCAgXCAgIC8gIC8gIC8gICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICAgXCAgICAgIHwgICAgXCAgXCAvICAvICAvICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgWCAgWCAgWC0tWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICA0CisgICAgICBcLyAgICBcICAgICBcLyAgIHwgIHwgLyAgICAgICAgICAgLyAgICAgICAgICAgICAgIHwKKyAgICAgIC9cICAgICBcICAgIC9cICAgfCAgfC8gICAgICAgICAgIC8gICAgICAgICAgICAgICAgfAorICBYICBYICBYICBYICBYLS1YICBYICBYICBYICBYLS1YICBYICBYICBYICBYICBYICBYICBYICBYICBYICAgIDUKKyAgICAgfFwvIFwvIFwgICAgICAgIFwgfCAgfCAvICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICB8L1wgL1wgIFwgICAgICAgIFx8ICB8LyAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgIFggIFggIFggIFggIFgtLVgtLVgtLVggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggICAgNgorICAgICAgICAgIC8gXCAgIC8gICAgICAgIC8gIC8gICAgICAgICAgXCAgICAgICAgICAgICAgIC98CisgICAgICAgICAvICAgXCAvICAgICAgICAvICAvICAgICAgICAgICAgXCAgICAgICAgICAgICAvIHwKKyAgWCAgWCAgWCAgWC0tWC0tWC0tWC0tWC0tWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICA3CisgICAgICAgICAgLyAgICAgICAgIHxcICBcICBcLyAgICAgICAgICAgICBcICAgICAgICAgIHwKKyAgICAgICAgIC8gICAgICAgICAgfCBcICBcIC9cICAgICAgICAgICAgICBcICAgICAgICAgfAorICBYICBYICBYICBYICBYICBYICBYICBYICBYICBYICBYICBYICBYICBYICBYLS1YLS1YLS1YICBYICBYICAgIDgKKyAgICAgICAgfCAgfCAgfCAgfCAvIFwgICAgIFwKKyAgICAgICAgfCAgfCAgfCAgfC8gICBcICAgICBcCisgIFggIFggIFgtLVggIFgtLVggIFgtLVgtLVggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggIFggICAgOQorICAgICB8XCB8IC98ICAgIC98ICAgICB8CisgICAgIHwgXHwvIHwgICAvIHwgICAgIHwKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWC0tWC0tWC0tWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxMAorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxMQorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxMgorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxMworCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxNAorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxNQorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxNgorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxNworCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxOAorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAxOQorCisKKyAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgWCAgICAyMAorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9zZWhlcmZhcSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvZmFxL3NlaGVyZmFxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ODg5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL2ZhcS9zZWhlcmZhcQpAQCAtMCwwICsxLDE2IEBACisKKworSGFsbG8hCitIaWVyIGFsc28gc2llaHN0IER1IGRpZSBha3R1ZWxsZSBWZXJzaW9uIHZvbiBSeW5lcyBTZWhlckZBUS4KK1dlbm4gRHUgd2VpdGVyZSBGcmFnZW4gb2RlciBBbnJlZ3VuZ2VuIHp1IGRpZXNlciBGQVEgaGFzdCwKK3NlIHNvIG5ldHQgdW5kIHNjaGlja2UgbWlyIGVpbiBrdXJ6ZXMgbWFpbC4KK1ZpZWwgU3Bhc3MgYmVpbSBMZXNlbiAhISEKKworWnVyIEZBUSBrb21tc3QgRHUgbWl0ID5saWVzIEluaGFsdDwKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yai5jIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yai5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjNiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JqLmMKQEAgLTAsMCArMSwyNiBAQAoraW5oZXJpdCAiL3N0ZC90aGluZyI7CisKKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSAiLi4vaGF1cy5oIgorCitjcmVhdGUoKQoreworICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuOworICA6OmNyZWF0ZSgpOworCisgIFNldFByb3AoUF9TSE9SVCwwKTsKKyAgU2V0UHJvcChQX05PR0VULCAxKTsKKyAgQWRkSWQoInImaiIpOworICBBZGRDbWQoImxpZXMiLCAibGllcyIpOworfQorCitzdGF0aWMgaW50IGxpZXMoc3RyaW5nIHN0cikKK3sKKyAgaW50IG5yOworCisgIGlmICghc3RyIHx8IHNzY2FuZihzdHIsICJzZWl0ZSAlZCIsIG5yKSAhPSAxKQorICAgIHJldHVybiBub3RpZnlfZmFpbCgiU3ludGF4OiBsaWVzIHNlaXRlIDxucj5cbiIpLCAwOworCisgIHRoaXNfcGxheWVyKCktPk1vcmUoU1BFQ0lBTFBBVEgrInJvbV9qdWwvc2VpdGUiK25yLCAxKTsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjg3MGRjCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMQpAQCAtMCwwICsxLDQyIEBACitEaWVzZXIgVGV4dCBpc3Qgdm9uIEV0YWlucyBTcGllbGVyaW4gKExpc3NpIFBhZmZyYXRoKSBnZXNjaHJpZWJlbiB1bmQKK3NhZW10bGljaGUgUmVjaHRlLCBpbnNiZXNvbmRlcmUgZGllIGRlciBWZXJicmVpdHVuZyB1bmQgVmVybWFya3R1bmcsIGxpZWdlbgorYXVzc2NobGllc3NsaWNoIGJlaSBpaHIuCitBbm1lcmt1bmdlbiB1bmQga29uc3RydWt0aXZlIEtyaXRpayBiaXR0ZSBwZXIgbXVkbWFpbCBhbiBFdGFpbiBvZGVyIFNudWdnbGUuCitWaWVsIFNwYXNzIGJlaW0gTGVzZW4gd3VlbnNjaGVuIFNudWdnbGUgdW5kIEV0YWluLgorCitVbmQgaGllciBub2NoIGVpbmUgVWViZXJzaWNodCB1ZWJlciBkZW4gSW5oYWx0OgorCitTZWl0ZSAyOiAgUHJvbG9nCisKK1NlaXRlIDM6ICBFcnN0ZXIgQWt0LCBlcnN0ZSBTemVuZQorU2VpdGUgNDogIEVyc3RlciBBa3QsIHp3ZWl0ZSBTemVuZQorU2VpdGUgNTogIEVyc3RlciBBa3QsIGRyaXR0ZSBTemVuZQorU2VpdGUgNjogIEVyc3RlciBBa3QsIHZpZXJ0ZSBTemVuZQorU2VpdGUgNzogIEVyc3RlciBBa3QsIGZ1ZW5mdGUgU3plbmUKKworU2VpdGUgODogIFp3ZWl0ZXIgQWt0LCBFaW5sZWl0dW5nCitTZWl0ZSA5OiAgWndlaXRlciBBa3QsIGVyc3RlIFN6ZW5lCitTZWl0ZSAxMDogWndlaXRlciBBa3QsIHp3ZWl0ZSBTemVuZQorU2VpdGUgMTE6IFp3ZWl0ZXIgQWt0LCBkcml0dGUgU3plbmUKK1NlaXRlIDEyOiBad2VpdGVyIEFrdCwgdmllcnRlIFN6ZW5lCitTZWl0ZSAxMzogWndlaXRlciBBa3QsIGZ1ZW5mdGUgU3plbmUKK1NlaXRlIDE0OiBad2VpdGVyIEFrdCwgc2VjaHN0ZSBTemVuZQorCitTZWl0ZSAxNTogRHJpdHRlciBBa3QsIGVyc3RlIFN6ZW5lCitTZWl0ZSAxNjogRHJpdHRlciBBa3QsIHp3ZWl0ZSBTemVuZQorU2VpdGUgMTc6IERyaXR0ZXIgQWt0LCBkcml0dGUgU3plbmUKK1NlaXRlIDE4OiBEcml0dGVyIEFrdCwgdmllcnRlIFN6ZW5lCitTZWl0ZSAxOTogRHJpdHRlciBBa3QsIGZ1ZW5mdGUgU3plbmUKKworU2VpdGUgMjA6IFZpZXJ0ZXIgQWt0LCBlcnN0ZSBTemVuZQorU2VpdGUgMjE6IFZpZXJ0ZXIgQWt0LCB6d2VpdGUgU3plbmUKK1NlaXRlIDIyOiBWaWVydGVyIEFrdCwgZHJpdHRlIFN6ZW5lCitTZWl0ZSAyMzogVmllcnRlciBBa3QsIHZpZXJ0ZSBTemVuZQorU2VpdGUgMjQ6IFZpZXJ0ZXIgQWt0LCBmdWVuZnRlIFN6ZW5lCisKK1NlaXRlIDI1OiBGdWVuZnRlciBBa3QsIGVyc3RlIFN6ZW5lCitTZWl0ZSAyNjogRnVlbmZ0ZXIgQWt0LCB6d2VpdGUgU3plbmUKK1NlaXRlIDI3OiBGdWVuZnRlciBBa3QsIGRyaXR0ZSBTemVuZQorCitTZWl0ZSAyODogRXBpbG9nCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTEwIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0ZjUxZAotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTEwCkBAIC0wLDAgKzEsMzgxIEBACitERVIgWldFSVRFIEFLVAorCSAgRElFIFpXRUlURSBTWkVORQorCitBenp1cm8sICBkZXIgIG5pY2h0ICBHZWZhaHIgIGxhdWZlbiAgIHdvbGx0ZSwJc3RlbGx2ZXJ0cmV0ZW5kICAgZnVlcgkgZWluZW4KK01lbnNjaGVubWFubiB2b24gZGVuIGJlaWRlbiBGcmF1ZW4gemVycmlzc2VuIHp1IHdlcmRlbiwgbGllc3Mgc2ljaCAgYXVmICBlaW5lbQorQXN0IG5lYmVuIFJvbWVvcyBTY2h1bHRlciBuaWVkZXIuIEVyIGJldHJhY2h0ZXRlIGRlbiBKdW5nZW4gbWl0ICBlaW5lbQlCbGljaywKK2RlciBiZWkgTWVuc2NoZW4gaW1tZXIgZXJzdGF1bnRlICBBdXNydWZlICBwcm92b3ppZXJ0LAlkaWUgIHp1bWVpc3QgIG51ciAgZGllCit1bmVydHJhZWdsaWNoZSBBcnJvZ2FueiAgZGVyICBNZW5zY2hlbglrdW5kdHVuOiAgX1NpZWh0XyAgX2VyXyAgX25pY2h0XyAgRkFTVAorX2ludGVsbGlnZW50XyBfYXVzXz8KKworUm9tZW8gaGF0dGUga2VpbmVuIEJsaWNrIGZ1ZXIgQXp6dXJvIHVlYnJpZywgZGVubiAgSnVsaWEgIGJldHJhdCAgZGVuICBCYWxrb24uCitPZmZlbnNpY2h0bGljaCBoYXR0ZSBzaWUgbm9jaCBlaW4gd2VuaWcgTHVmdCBzY2huYXBwZW4gd29sbGVuLAliZXZvciAgc2llICB6dQorQmV0dCBnaW5nLCBkZW5uIHNpZSB0cnVnIG5pY2h0IG1laHIgYWxzIGVpbiBOYWNodGhlbWQsCWVpbmVuICBTY2hhbCAgdW5kICBlaW4KK3BhYXIgVHJvcGZlbiBQYXJmdW0uCisKKyJTaWVoIHNpZSBkaXIgYW4uIiwgaGF1Y2h0ZSBSb21lbyBhdGVtbG9zLiAiSXN0IHNpZSBuaWNodCB3dW5kZXJzY2hvZW4/IgorCitBenp1cm8gdmVyemljaHRldGUgYXVmIGVpbmUgQW50d29ydCwgZGVubiBpaG0gd3VyZGUgYmV3dXNzdCwgIGRhc3MgIFJvbWVvICBpaG4KK25pY2h0IG5hY2ggc2VpbmVyIE1laW51bmcgZ2VmcmFndCBoYXR0ZS4KKworIkp1bGlhLi4uIiBFciBmbHVlc3RlcnRlIGlocmVuIE5hbWVuIG51ci4gIlNpZSBnZWh0IGF1ZiB3aWUgZWluZSAgU29ubmUsICBhbHNvCittdXNzIGRhIE9zdGVuIHNlaW4uIiwgbWVpbnRlIFJvbWVvIHVuZCBkZXV0ZXRlIGF1ZiBkZW4gQmFsa29uLgorCisiRXMgaXN0IE5vcmRlbiwgYWJlciBpY2ggdmVyc3RlaGUsIHdhcyBkdSBtZWluc3QuIiwgYnJ1bW10ZSBBenp1cm8uCisKKyJXZW5uIHNpZSBpaHJlbiBTY2hhbCBmYWxsZW4gbGFlc3N0LCBtdXNzIGRlciBNb25kIHVudGVyZ2VoZW4sIGRlbm4gZGFubiAga2FubgorZXIgc2ljaCBuaWNodCBtZWhyIGFtIEhpbW1lbCBoYWx0ZW4uIgorCisiVW5kIGVyIGthbm4gbmlzc3N0IG1laHIgYW4gc3NzaXNzcyBoYWx0ZW4uIiwga2ljaGVydGUgV2xhZC4KKworIkljaCBsaWViZSBzaWUgdW5kIGljaCB3dWVuc2NodGUsIHNpZSAgd3Vlc3N0ZSAgZXMuIiwgIG11cm1lbHRlICBSb21lby4gICJEYW5uCit3YWVyZW4gaWhyZSBBdWdlbiBTdGVybmUgYW0gSGltbWVsIHVuZCBpY2ggZWluLi4uIGVpbmUuLi4iIEVyICBibGlja3RlICBBenp1cm8KK2FuLiAiV2llIGhlaXNzdCBkZW5uIGRhcyBUaWVyLCBkYXMgaW0gRHVua2VsbiBqYWd0PyIKKworIkZsZWRlcm1hdXMuIiwgYW50d29ydGV0ZSBBenp1cm8uCisKKyJHZW5hdS4gSWNoIHdhZXJlIGRhbm4gbnVyIHp1IGdlcm5lIGVpbmUgc3BpdHpvaHJpZ2UsIGxlZGVyZmx1ZWdsaWdlLCAgaGFhcmlnZQordW5kIG11ZWNrZW5mcmVzc2VuZGUgRmxlZGVybWF1cy4iCisKK1dsYWQgcGZpZmYgc2NocmlsbCB1bmQgd3VldGVuZC4gIldlbm4gZXIgamV0c3NzdCBub2NoIHNzc3RpbmtlbmQgc3NzYWd0LCB3ZXJkZQoraXNzcyBpaG4gYmVpc3Nzc2VuISIKKworIkRhbm4gd3VlcmRlIGljaCBkaWUgTXVlY2tlbiBmcmVzc2VuLCBkaWUgc2llICBzdGVjaGVuICB3b2xsZW4sICBkZW5uICBuaWVtYW5kCithdXNzZXIgbWlyIGRhcmYgaW4gaWhyZSBOYWVoZSBrb21tZW4sIGF1Y2gga2VpbmUgTXVlY2tlLiBBY2gsIHdhcnVtICBzYWd0ICBzaWUKK2Rlbm4gbmljaHRzPyIKKworIlZpZWxsZWljaHQsIHdlaWwgc2llIG5pY2h0IHdlaXNzLCBkYXNzIGR1ICBoaWVyICBiaXN0ICB1bSAgc2llICB6dSAgaG9lcmVuPyIsCit2ZXJtdXRldGUgQXp6dXJvLgorCisiSmEsIGljaCBiaW4gYXVjaCB3aXJrbGljaCB6dSBkcmVpc3QsIG1pY2ggZWluZmFjaCBoaWVyICBpbiAgaWhyZW0gIEdhcnRlbiAgenUKK3ZlcnN0ZWNrZW4gdW5kIHNpZSBhbnp1c3RhcnJlbiB3aWUgZWluIFNwYW5uZXIuIgorCitKdWxpYSBzdHVldHp0ZSBpaHJlIEVsbGJvZ2VuIGF1ZiBkYXMgR2VsYWVuZGVyIGRlcyBCYWxrb25zIHVuZCBpaHIgR2VzaWNodCAgaW4KK2RpZSBIYWVuZGUuIERlciBTY2hhbCBrbGFmZnRlIGF1ZiB1bmQgZW50aHVlbGx0ZSBlaW5lIHVuemllbWxpY2hlIE1lbmdlICBpaHJlcworQXVzc2Nobml0dHMsIHdhcyBSb21lbyB6dSBlaW5lbSB3ZWl0ZXJlbiB0aWVmZW4gU2V1ZnplciB2ZXJhbmxhc3N0ZS4KKworIkljaCB3b2xsdGUsIGljaCB3YWVyZSBkaWVzZXIgU2NoYWwhIgorCitBenp1cm8sIGRlciBzaWNoIGltbWVyIG5vY2ggbmljaHQgIGVudHNjaGxpZXNzZW4gIGtvbm50ZSwgIHNlaW4gIFVydGVpbCAgdWViZXIKK0p1bGlhcyBGaWd1ciB6dSByZXZpZGllcmVuLCBsYWVjaGVsdGUgbWl0bGVpZGlnLiAiV2VubiBtYW4gc28gZXR3YXMgbWFnLiIKKworIkFjaCwgZHVtbWUgS3JhZWhlLCB3YXMgd2Vpc3N0IGR1IHNjaG9uIHZvbiBMaWViZSEiLCBzYWd0ZSAgUm9tZW8gIHpvcm5pZyAgdW5kCitkdWNrdGUgc2ljaCB2b3IgQXp6dXJvcyBzY2hhcmZlbSBTY2huYWJlbC4gIldlbm4gIHNpZSAgZG9jaCAgbnVyICBldHdhcyAgc2FnZW4KK3d1ZXJkZS4iCisKK0p1bGlhIHRhdCBpaG0gZGVuIEdlZmFsbGVuLiAiQWNoLCB3aWUgZHVtbSBkYXMgZG9jaCBhbGxlcyBpc3QuIgorCitWb3IgRnJldWRlIHVlYmVyIGlocmUgU3RpbW1lIGJlZ2FubmVuIFJvbWVvcyBIYWVuZGUgenUgeml0dGVybiB1bmQgZGVyCUluaGFsdAoraWhyZXIgV29ydGUgZ2luZyB6dW0gZWluZW4gT2hyIGhpbmVpbiB1bmQgenVtIGFuZGVyZW4gaGluYXVzLCBvaG5lICBkZW4gIFVtd2VnCit1ZWJlciBkYXMgR2VoaXJuIHp1IG5laG1lbiwgd2llIGVzIGJlaSBWZXJsaWVidGVuIGhhZXVmaWcgZGVyIEZhbGwgIGlzdC4gICJTYWcKK25vY2ggZXR3YXMsIG1laW5lIExpZWJzdGUsIGRhbm4gZmFsbGUgaWNoIGJlc3RpbW10IGluIE9obm1hY2h0LiIKKworQXp6dXJvIGdyaW5zdGUuICJWZXJrbmVpZiBkaXIgZGFzICBsaWViZXIsICBkZW5uICBkZXIgIExhZXJtICB3dWVyZGUgIGJlc3RpbW10CitBdWZtZXJrc2Fta2VpdCBlcnJlZ2VuLiIKKworSnVsaWEgc2FoIG5hY2hkZW5rbGljaCB6dSBVbG8gaGludWViZXIuICJPaCwgUm9tZW8uIgorCisiSWNoIGhlaXNzZSBVbG8sIGFiZXIgZGFzIG1hY2h0IG5pY2h0cy4iCisKKyJLb2VubnRlc3QgZHUgZWluZW4gIE1vbWVudCAgc28gIHR1biwgIGFscyAgc2Vpc3QgIGR1ICBSb21lbz8iLCAgZnJhZ3RlICBKdWxpYQoraG9lZmxpY2guCisKKyJTaWNoZXIsIHdlbm4gZHUgZGljaCBkYW5uIGJlc3NlciBmdWVobHN0LiIKKworIkRhbmtlLiBBY2gsIFJvbWVvLCBpY2ggd3VlbnNjaHRlLCBkdSB3YWVyZXN0IG5pY2h0IFJvbWVvLiIKKworIldhcnVtIGRhcyBkZW5uPyIsIGZyYWd0ZSBVbG8gdmVyd2lycnQuCisKKyJXZW5uIGR1IG5pY2h0IFJvbWVvIHdhZXJlc3QsIGRhbm4gd2FlcmVzdCBkdSBhdWNoICBrZWluICBNb250YWd1ZSwgIHVuZCAgZGFubgora29lbm50ZSBpY2ggZGljaCBsaWViZW4sIG9obmUgZGFzcyBtZWluIFZhdGVyICBlaW5lbiAgSGVyemFuZmFsbCAgYmVrb21tdCAgdW5kCittZWluZSBNdXR0ZXIgaWhyZSBNaWdyYWVuZS4iCisKK1VsbyBuaWNrdGUuICJIbSwgYWJlciB3ZXIgc29sbCBpY2ggZGVubiBkYW5uIHNlaW4/IgorCisiSXN0IGRvY2ggZWdhbC4gV2VubiBkdSBlaW4gQnVlcmdlcmxpY2hlciB3YWVyZXN0LCBkYW5uIHd1ZXJkZSBpY2ggIGF1ZmhvZXJlbiwKK0NhcHVsZXQgenUgc2Vpbi4gRGFubiBrb2VubnRlbiB3aXIgZWluZmFjaCBzbyAgenVzYW1tZW4gIHNlaW4gIHVuZCAgdW5zICBlaW5lbgorVGV1ZmVsIHVtIGRpZSBLb252ZW50aW9uZW4gc2NoZXJlbi4iCisKKyJVbmQgd2VubiBtZWluZSBPbWEgZ3JvZXNzZXIgZ2V3ZXNlbiB3YWVyZSwgZGFubiBoYWV0dGV0IGlociBzaWUgZWluZW4gRHJhY2hlbgorZ2VzY2hpbXBmdC4iLCB2ZXJzZXR6dGUgVWxvLiAiTmljaHQsICBkYXNzICBzaWUgIGRhcyAgbmljaHQgIGdld2VzZW4gIHdhZXJlLiIsCitmdWVndGUgc2llIHZlcnNjaGFlbXQgaGluenUuCisKKyJXYXMgbWVpbnN0IGR1LCBzb2xsIGljaCBpaHIgYW50d29ydGVuPyIsIGZyYWd0ZSBSb21lbyBsZWlzZS4KKworIldhcnRlIG5vY2ggZWluIGJpc3NjaGVuLiIsIHJpZXQgQXp6dXJvLgorCisiVmVyc3RlaHN0IGR1IGRlbm4gbmljaHQ/IERpZSBDYXB1bGV0cyBsaWVnZW4gbWl0IGRlbiBNb250YWd1ZXMgaW4gRmVoZGUsIGFiZXIKK1JvbWVvIGlzdCBSb21lbyBpc3QgUm9tZW8gaXN0IFJvbWVvLCBhdWNoLCB3ZW5uIGVyIG5pY2h0IFJvbWVvIE1vbnRhZ3VlIGlzdC4iCisKKyJOZWluLCB2ZXJzdGVoZSBpY2ggbmljaHQuIiwgYW50d29ydGV0ZSBVbG8uCisKKyJEZXIgTmFtZSBhbGxlaW4gaXN0IGRvY2ggbmljaHQgZGVyIGdhbnplIE1lbnNjaC4gV2VubiBpY2ggZWluZW4gIFNjaHdlaXNzZnVzcworUm9zZSBuZW5uZSwgcmllY2h0IGVyIGRlc3dlZ2VuIG5pY2h0IGJlc3Nlci4iLCBlcmtsYWVydGUgSnVsaWEuCisKK1VsbyBuaWNrdGUuICJfRGFzXyB2ZXJzdGVoZSBpY2guIgorCisiSmEuIFVuZCB3ZW5uIFJvbWVvIG5pY2h0IFJvbWVvIE1vbnRhZ3VlIHdhZXJlLCAgc29uZGVybi4uLiIgIFNpZSAgdWViZXJsZWd0ZS4KKyJIYW5zIFNjaG1pdHosIHNvIHdhZXJlIGVyIGltbWVyIG5vY2ggZGVyIGdsZWljaGUgTWVuc2NoIHVuZCBpY2ggIGtvZW5udGUgIGlobgorb2huZSBQcm9ibGVtZSBsaWViZW4uIgorCisiSGFucyBTY2htaXR6PyIsIGZyYWd0ZSBSb21lbyB1bnRlbiBsZWlzZS4KKworQXp6dXJvIGdyaW5zdGUgbnVyLgorCisiQWxzbywgUm9tZW8sIHZlcmdpc3MgZGVuIE5hbWVuLCBkZW4gIGJyYXVjaHN0ICBkdSAgbmljaHQuICBTdGF0dCAgZGVzICBOYW1lbnMKK2thbm5zdCBkdSBtaWNoIGhhYmVuLiIgSnVsaWEgYnJlaXRldGUgdGhlYXRyYWxpc2NoIGRpZSBBcm1lIGF1cy4KKworUm9tZW8ga29ubnRlIHNpY2ggbmljaHQgbGFlbmdlciB6dXJ1ZWNraGFsdGVuLiAiR3V0LCBnYW56IHdpZSBkdSB3aWxsc3QuICBXZW5uCitkdSBtaWNoIEhhbnMgU2NobWl0eiBuZW5uZW4gd2lsbHN0LCBkYW5uIGJpbiBpY2ggZWJlbiBIYW5zIFNjaG1pdHouIgorCitKdWxpYSB3dXJkZSBmZXVlcnJvdC4gIlNwYW5uZXIhIiwgc2NoaW1wZnRlIHNpZS4KKworIlZvbiBtaXIgYXVzIGF1Y2ggSGFucyBTcGFubmVyLiIgUm9tZW8genVja3RlIGRpZSBTY2h1bHRlcm4uCisKK1VsbyBmaWVsIHZvciBMYWNoZW4gdm9tIEFzdCB1bmQgZmluZyBzaWNoIHdlbmlnZSBaZW50aW1ldGVyICB1ZWJlciAgZGVtICBCb2RlbgorYXVmLgorCisiV2Vpc3MgZXIsIHdhcyBlciBkYSBzYWd0PyIsIGZsdWVzdGVydGUgc2llIEF6enVybyB6dS4KKworIldhaHJzY2hlaW5saWNoIG5pY2h0LiIsIGdhYiBBenp1cm8genVydWVjay4gIklzdCBkb2NoICBhdWNoICBlZ2FsLCAgb2Rlcj8gIFNvCit3ZWdnZXRyZXRlbiwgd2llIGVyIGltIE1vbWVudCBpc3QsIGtvZW5udGUgc2llIGlobiBIYW5zIFd1cnN0ICBuZW5uZW4gIHVuZCAgZXIKK3d1ZXJkZSBlcyBsaWViZW4uIgorCitKdWxpYSBiZXVndGUgc2ljaCB1ZWJlciBkaWUgQnJ1ZXN0dW5nIGRlcyBCYWxrb25zIHVuZCBkZXIgU2NoYWwgIHJ1dHNjaHRlICBpaHIKK25vY2ggd2VpdGVyIHZvbiBkZW4gU2NodWx0ZXJuIGhlcnVudGVyLiAiT2gsICBNb21lbnQsICB3aXIgIGhhYmVuICBkb2NoICBoZXV0ZQorYWJlbmQgbWl0ZWluYW5kZXIgZ2VzcHJvY2hlbiwgbmljaHQ/IER1IGhhc3QgIG1pY2ggIG1pdCAgZWluZW0JV2VpaG5hY2h0c2JhdW0KK3ZlcmdsaWNoZW4uIiBTaWUgdWViZXJsZWd0ZS4gIkRhbm4gYmlzdCBkdSBSb21lbyBNb250YWd1ZS4iCisKK1JvbWVvIGdhYiBzaWNoIGFsbGUgTXVlaGUsIGRlbiBCbGljayBhdWYgIGlociAgR2VzaWNodAlnZXJpY2h0ZXQgIHp1ICBoYWx0ZW4uCisiTmVpbiwgZGVubiBkdSBoYXN0IGdlcmFkZSAgZXJzdCAgYmVzY2hsb3NzZW4sICBkYXNzICBpY2ggIEhhbnMgIFNwYW5uZXIgIHNlaW4KK3NvbGwuIiwgZXJrbGFlcnRlIGVyIGltIEJydXN0dG9uIGRlciBVZWJlcnpldWd1bmcuCisKKyJXaWUgYmlzdCBkdSB1ZWJlcmhhdXB0IGhpZXJoZXJnZWtvbW1lbj8iCisKKyJVZWJlciBkaWUgTWF1ZXI/IiBSb21lbyB3YXIgc2ljaCBzZWluZXIgIFNhY2hlICBuaWNodCAgdm9lbGxpZyAgc2ljaGVyLiAgIkphLAorZG9jaCwgaWNoIGJpbiB1ZWJlciBkaWUgTWF1ZXIgZ2VrbGV0dGVydC4iCisKK0p1bGlhIGthbm50ZSBkaWUgTWF1ZXIgdm9uIGlocmVuIGVpZ2VuZW4gRXhrdXJzaW9uZW4uICAiRGllICBpc3QgIGdhbnogIHNjaG9lbgoraG9jaC4iCisKKyJEaWUgRmx1ZWdlbCBkZXIgTGllYmUgaGFiZW4gbWljaCBoaW51ZWJlcmdldHJhZ2VuLiIKKworIldvIGhhc3QgZHUgZGFzIGRlbm4gZ2VsZXNlbj8iCisKKyJLZWluZSBBaG51bmcsIGFiZXIgZXMga2xpbmd0IGh1ZWJzY2gsIG5pY2h0PyIKKworIkphLCBzY2hvbi4iLCBhbnR3b3J0ZXRlIEp1bGlhLiAiV2VubiBtZWluZSBMZXV0ZSBkaWNoICBoaWVyICBmaW5kZW4sICByZWlzc2VuCitzaWUgZGlyIGRlbiBLb3BmIGFiLiIKKworIk9kZXIgZXR3YXMsIGRhcyAgZHUgIG1laHIgIHZlcm1pc3NlbiAgd3VlcmRlc3QuIiwgIHNldHp0ZSAgQXp6dXJvICBtaXQgIGVpbmVtCitib3NoYWZ0ZW4gR3JpbnNlbiBoaW56dS4KKworUm9tZW8gd3VyZGUgYmxhc3MsIGRvY2ggZGFubiBiZXNhbm4gZXIgc2ljaCBKdWxpYXMgdW5kIGRlciBUYXRzYWNoZSwgIGRhc3MgIGVyCitiZWkgaWhyIEVpbmRydWNrIG1hY2hlbiB3b2xsdGUuICJBY2gsIHdpcmQgc2Nob24gbmljaHQgc28gIHNjaGxpbW0gIHNlaW4uIiAgRXIKK3p1Y2t0ZSBtaXQgZGVuIFNjaHVsdGVybiB1bmQgIHZlcnN1Y2h0ZSwgIGhlbGRlbmhhZnQgIGF1c3p1c2VoZW4uICAiSWNoICBsaWViZQorZGljaCwgaWNoIHdpbGwgZGljaCwgZGVpbmUgVmVyd2FuZHRlbiBzaW5kIG1pciBlZ2FsLiIKKworIkR1IGJpc3QgZWluIEhvbHprb3BmLCB3ZW5uIGR1IGtlaW5lIEFuZ3N0IHZvciAgaWhuZW4gIGhhc3QuIiAgQXp6dXJvICB6d2lja3RlCitSb21lbyBzcGllbGVyaXNjaCBpbiAgZGVuICBPYmVyc2NoZW5rZWwgIHVuZCAgd2ljaCAgZ2VzY2hpY2t0ICBkZW4gIGFlbmdzdGxpY2gKK3p1Z3JlaWZlbmRlbiBIYWVuZGVuIGF1cy4KKworIkR1IGJpc3QgaW4gZ3Jvc3NlciBHZWZhaHIsIHdlbm4gZHUgaGllciBibGVpYnN0LiIsIG1laW50ZSBhdWNoIEp1bGlhLgorCisiSmEsIGFiZXIgbmljaHQgZGVpbmUgVmVyd2FuZHRlbiBzaW5kIGRpZSBHZWZhaHIsIHNvbmRlcm4gbWVpbmUgQXVnZW4uIiAgSnVsaWEKK2Vycm9ldGV0ZSBsZWljaHQuICJIbSwgaWNoIG11c3MgenVnZWJlbiwgZGFzcyBlcyBtaXIga2VpbmVzd2VncyAgcmVjaHQgIHdhZXJlLAord2VubiBzaWUgZGljaCBoaWVyIGZhZW5kZW4uIgorCisiV2FlcmUgZG9jaCBlaW4gcm9tYW5yZWlmZXIgVG9kLCBuaWNodD8gV2VubiAgZHUgIG1pY2ggIG5pY2h0ICBsaWViZW4gIHdpbGxzdCwKK2tvZW5uZW4gc2llIG1pY2ggaGFiZW4sIGRhbm4gaXN0IG1pciBzb3dpZXNvIGFsbGVzIGVnYWwuIgorCitVbG8gbGFjaHRlLiAiTWlyIGlzdCBhdWNoIGFsbGVzIGVnYWw6IEljaCBtYWNoZSBTY2hsdXNzIG1pdCAgZXVyZW0gIExlYmVuICB1bmQKK3J1ZmUgZGllIFZlcndhbmR0ZW4uIgorCisiVW50ZXJzdGVoIGRpY2ghIiByaWVmZW4gSnVsaWEsIFJvbWVvLCBBenp1cm8gdW5kIFdsYWQgIHdpZSAgYXVzICBlaW5lbSAgTXVuZCwKK2JlemllaHVuZ3N3ZWlzZSBNYXVsIG9kZXIgU2NobmFiZWwuCisKK0p1bGlhIGdyaWZmIGJlaGVyenQgenUgdW5kIHVtZmFzc3RlIFVsb3MgU2NobmFiZWwuICJXaXJzdCBkdSBydWhpZyBzZWluPyIKKworIk1tbW1tLiIgVWxvIHNjaGx1ZyBtaXQgZGVuIEZsdWVnZWxuLgorCisiTmEgZ3V0LiIgSnVsaWEgZW50ZmVybnRlIGlocmUgSGFuZCwgYmVyZWl0LCBzb2ZvcnQgd2llZGVyIHp1enVmYXNzZW4sICBzb2JhbGQKK1VsbyB0aWVmIEx1ZnQgaG9sdGUuICJXb2hlciB3dXNzdGVzdCBkdSB1ZWJlcmhhdXB0LCBkYXNzIGR1IG1pY2ggIGhpZXIgIGZpbmRlbgord3VlcmRlc3Q/IiwgZnJhZ3RlIHNpZS4KKworIkljaCBiaW4gZWluZmFjaCBkZXIgTmFzZSBuYWNoIGdlbGF1ZmVuLiIsIGFudHdvcnRldGUgUm9tZW8uCisKKyJOdXIgZ3V0LCBkYXNzIGR1IEp1bGlhIGdlZnVuZGVuIGhhc3QgdW5kICBuaWNodCAgZGllICBUb2lsZXR0ZS4iLCAgZmx1ZXN0ZXJ0ZQorQXp6dXJvIGlobSB6dSB1bmQgZ2Vub3NzIFJvbWVvcyAgdGllZnJvdGVzICBHZXNpY2h0LCAgZGFzICBpbiAgZGVyICBEdW5rZWxoZWl0CityZWdlbHJlY2h0IHp1IGxldWNodGVuIHNjaGllbi4KKworQXVjaCBKdWxpYSBzY2hpZW4gYWVobmxpY2ggR2VkYW5rZW4genUgaGVnZW4sIHNwcmFjaCBzaWUgYWxsZXJkaW5ncyBuaWNodCBhdXMuCisiTnVyIGd1dCwgZGFzcyBkdSBuaWNodCBzZWhlbiBrYW5uc3QsIHdpZSByb3QgaWNoIGJpbi4iCisKK1VsbyBiZWFldWd0ZSBrcml0aXNjaCBKdWxpYXMgR2VzaWNodCB1bmQgc3VjaHRlIGRpZSBSb2V0ZSB2ZXJnZWJsaWNoLgorCisiSWNoIGJpbiBuYWVtbGljaCBlaW4gYW5zdGFlbmRpZ2VzIE1hZWRjaGVuLiIsIGZ1aHIgIEp1bGlhICBmb3J0LiAgIkVpZ2VudGxpY2gKK3N0ZWhlIGljaCBuaWNodCBuYWNodHMgYXVmIHp1Z2lnZW4gQmFsa29uZW4gaGVydW0gdW5kIHJlZGUgbWl0IEtyYWVoZW4uIgorCisiRGFzIGthbm4gaWNoIGJlc3RhZXRpZ2VuLiIgVWxvIGdyaW5zdGUgYm9lc2UsIGRvY2ggYmV2b3IgIHNpZSAgd2VpdGVyc3ByZWNoZW4KK2tvbm50ZSwgem9nIEF6enVybyBpaHIgaGVmdGlnIGFtIFNjaHdhbnouCisKKyJJY2ggd2Vpc3MgZ2VuYXUsICBkYXNzICBpY2ggIGVpZ2VudGxpY2ggIGVpbiAgYmlzc2NoZW4gIHdpZGVyc3BlbnN0aWdlciAgc2VpbgorbXVlc3N0ZS4iIEp1bGlhIHpvZyBkZW4gIFNjaGFsICBlbmdlciAgdW0gIGRpZSAgU2NodWx0ZXJuICB1bmQgIGVybnRldGUgIGVpbmVuCitlbnR0YWV1c2NodGVuIEJsaWNrIHZvbiBSb21lby4gIkFiZXIsIHdlbm4gaWNoIGVocmxpY2ggIHNlaW4gIHNvbGwsICBoYWJlICBpY2gKK2RhenUgdWViZXJoYXVwdCBrZWluZSBMdXN0LiBEYXMgc2luZCBibG9zcyBTcGllbGNoZW4gdW5kIGljaCBtYWcgbmljaHQgbWl0IGRpcgorc3BpZWxlbi4iCisKKyJTY2hhZGUuIiwgd2FyZiBSb21lbyBlaW4uCisKKyJOZWluLCBuaWNodCBzY2hhZGUuIERlbm4gZGFkdXJjaCBrYW5uIGljaCBkaXIgZ2FueiBvZmZlbiBzYWdlbiwgZGFzcyBpY2ggZGljaAorYXVjaCBsaWViZS4gRGVua2UgamEgbmljaHQsIGljaCBzZWkgZWluIEZsaXR0Y2hlbiwgd2VpbCBpY2ggc28JZWhybGljaCAgYmluLiIKK0p1bGlhIGRyb2h0ZSBSb21lbyBzY2hlcnpoYWZ0IG1pdCBkZW0gRmluZ2VyLgorCisiQXVjaCBlaW5lIEFydCB6dSBzcGllbGVuLiIsIG11cm1lbHRlIFdsYWQgdm9yIHNpY2ggaGluLgorCisiV3VlcmRlIG1pciBuaWVtYWxzICBlaW5mYWxsZW4uIiwgIGFudHdvcnRldGUgIFJvbWVvICB1bmQgIG1laW50ZSAgZXMgIHZvZWxsaWcKK2VocmxpY2guCisKKyJJY2ggbXVzcyAgenVnZWJlbiwgIGRhc3MgIGR1ICBtaWNoICB6aWVtbGljaCAgYXVzICBkZXIgIEJhaG4gIGdld29yZmVuICBoYXN0LgorRGVpbmV0d2VnZW4gdHVlIGljaCBEaW5nZSwgZGllIG1pciBzb25zdCBuaWNodCBlaW5maWVsZW4uIgorCitSb21lbyBlcnJvZXRldGUgdGllZiB1bmQgd3Vzc3RlIGRhenUgbmljaHRzIHp1IHNhZ2VuLgorCitNaXQgc3RyZW5nZW0gR2VzaWNodHNhdXNkcnVjayBmdWhyIEp1bGlhIGZvcnQ6ICJXZW5uIGR1IG1pY2ggd2lya2xpY2ggIGxpZWJzdCwKK2Rhbm4uLi4iCisKKyJEYW5uPyIsIGZyYWd0ZSBSb21lbyBhdGVtbG9zLgorCisiRGFubiBzYWcgbWlyLCB3YXMgZHUgdm9uIG1pciBlcndhcnRlc3QuIiAgTnVuICB3YXIgIGRpZSAgUmVpaGUgIGFuICBKdWxpYSAgenUKK2Vycm9ldGVuLiAiSWNoIHdpbGwgZGlyIGRlbiBHZWZhbGxlbiB0dW4gdW5kIG1pY2ggc28gdmVyaGFsdGVuLCB3aWUgZHUgZXMgIHZvbgorZWluZW0gYW5zdGFlbmRpZ2VuIE1hZWRjaGVuIGVyd2FydGVzdC4iCisKK1JvbWVvIHNjaGx1ZyBzaWNoIHJhc2NoICBhbGxlICB1bmFuc3RhZW5kaWdlbiAgR2VkYW5rZW4gIGF1cyAgZGVtICBLb3BmLiAgIkljaAorc2Nod29lcmUgZGlyLi4uIgorCisiTmljaHQgc2Nod29lcmVuISIgSnVsaWEgZXJpbm5lcnRlIHNpY2ggbnVyIHp1IGd1dCBhbiBkaWUgdmllbGVuIFNjaHd1ZXJlLCBkaWUKK3NpZSBpbiBpaHJlbSBMZWJlbiBnZXRhbiBoYXR0ZS4gRGVyIFNjaHd1ciwgbmllbWFscyB3aWVkZXIgIE5vdWdhdHByYWxpbmVuICB6dQorZXNzZW4sIHZvbiBkZW5lbiAgc2llICBQaWNrZWwgIGJla2FtLCAgd2FyICBudXIgIGVpbmVyCWRhdm9uICAtICB1bmQgIGRlciAgYW0KK2xlaWNodGVzdGVuIGdlYnJvY2hlbmUuCisKKyJKYSwgYWJlci4uLiIgUm9tZW8gdWViZXJsZWd0ZSBhbmdlc3RyZW5ndC4gICJXZW5uICBpY2ggIGRpciAgbmljaHQgIHNjaHdvZXJlbgorZGFyZiwgZGFzcyBpY2ggZGljaCBsaWViZSwgd2FzIHNvbGwgaWNoIGRlbm4gc29uc3QgdHVuPyBJY2ggbWVpbmUuLi4iCisKK0p1bGlhIHVudGVyYnJhY2ggaWhuIHdpZWRlci4gIkljaCB3ZWlzcywgd2FzIGR1ICBtZWluc3QuICBBYmVyICB3ZW5uICBkdSAgbWljaAord2lya2xpY2ggbGllYnN0LCBkYW5uIGthbm4gZXMgbnVyIGVpbmVuIFNjaHd1ciBnZWJlbiwgZGVuIGljaCBha3plcHRpZXJlLiIKKworUm9tZW8gc2NobHVja3RlLiAiSGVpcmF0PyIKKworIlphY2ssIHNjaG9uIGhhdCBzaWUgZGljaC4iIEF6enVybyBraWNoZXJ0ZS4gIkdlaCBqZXR6dCwgIGJldm9yICBlcyAgenUgIHNwYWV0Citpc3QhIE9kZXIgbm9jaCBiZXNzZXI6IFJlbm4hIgorCitEb2NoIFJvbWVvIHdhciBzY2hvbiBqZW5zZWl0cyAgYWxsZXIgIGd1dGVuICBSYXRzY2hsYWVnZS4gICJKYS4uLiIsICBzYWd0ZSAgZXIKK2dlZGVobnQuCisKKyJXdW5kZXJiYXIuIiBKdWxpYSBzY2hlbmt0ZSBpaG0gaWhyIHN0cmFobGVuZHN0ZXMgTGFlY2hlbG4uICAiRGFubiAga2FubnN0ICBkdQorZGlyIGF1c3N1Y2hlbiwgd2FubiB1bmQgd28gZGllIEhvY2h6ZWl0IHN0YXR0ZmluZGVuIHNvbGwuIgorCisiS29tbSByZWluLCBLaW5kY2hlbiwgZGEgZHJhdXNzZW4gaG9sc3QgZHUgIGRpciAgZGVuICBUb2QuIiwgIHJpZWYgIFBvbGx5ICB2b24KK2RyaW5uZW4uCisKK1VsbyBsYWNodGUgdW5kIHN0aWVzcyBXbGFkIGFuLiAiRGVuIFRvZCBuaWNodCwgZWhlciBlaW5lbiBFaGVtYW5uLiIKKworIkRhcyBrYW5uIFBvbGx5IGRvY2ggbmljaHQgd2lzc2VuLiIsIGdhYiBXbGFkIGtpY2hlcm5kIHp1cnVlY2suCisKKyJXYXJ0ZSBlaW5lbiBNb21lbnQsIGljaCB3aWxsIGViZW4gUG9sbHkgYmVydWhpZ2VuLiIgIEp1bGlhICBsaWVzcyAgZGVuICBTY2hhbAorZmFsbGVuIHVuZCB2ZXJzY2h3YW5kIG5hY2ggZHJpbm5lbi4KKworIlVtcGYuIiwgbWFjaHRlIFJvbWVvIHVlYmVyd2FlbHRpZ3QuICJJY2ggZmFzc2UgZXMgbmljaHQuIgorCisiSWNoIGF1Y2ggbmljaHQuIiwgc2FndGUgQXp6dXJvIHRyYXVyaWcuICJXaWUga2FubnN0IGR1ICBkaWNoICBudXIgIHNvICBsZWljaHQKK2VpbmZhbmdlbiBsYXNzZW4/IgorCisiV2VyIGhhdCBkZW5uIGhpZXIgd2VuIGdlZmFuZ2VuPyIsIGZyYWd0ZSAgUm9tZW8uICAiSWNoICBoYWJlICBkb2NoICB3b2hsICBkaWUKK3d1bmRlcmJhcnN0ZSwgc2Nob2Vuc3RlLCBrbHVlZ3N0ZS4uLiIKKworIkFjaCBkdSBsaWViZXIgSGltbWVsISIgQXp6dXJvIHdhcmYgUm9tZW8gZWluZW4genV0aWVmc3QgZW50c2V0enRlbiAgQmxpY2sgIHp1Cit1bmQgdmVyc2Nod2FuZCBpbiBkZXIgRHVua2VsaGVpdC4KKworSnVsaWEgdGF1Y2h0ZSB3aWVkZXIgYXVmIGRlbSBCYWxrb24gYXVmIHVuZCBsZWd0ZSBzaWNoIGlocmVuIFNjaGFsICB3aWVkZXIgIHVtCitkaWUgU2NodWx0ZXJuLiAiV2VubiBkdSBlcyBhbGxlcmRpbmdzIG5pY2h0IGVybnN0IG1laW5zdCwgZGFubiBiaXR0ZS4uLiIKKworIkp1bGlhISIsIHJpZWYgUG9sbHkgd2llZGVyLgorCisiSmFqYSwgaWNoIGtvbW1lIGphIHNjaG9uISIgSnVsaWEgc2V1Znp0ZS4gIi4uLmljaCBkaWNoLCBsYXNzIG1pY2ggaW4gRnJpZWRlbi4KK01vcmdlbiBzY2hpY2tlIGljaCBqZW1hbmRlbiB6dSBkaXIsIGRlciBiZWkgZGlyIGRlbiBUZXJtaW4gZnVlciAgZGllICBIb2NoemVpdAorYWJob2xlbiBzb2xsLiBXZW5uIGR1IG1pciBrZWluZW4gVGVybWluIGdpYnN0LCBkYW5uIHdlcmRlIGljaCB3b2hsIGJpcyBhbiBtZWluCitMZWJlbnNlbmRlIGVpbnNhbSB1bmQgYWxsZWluIHdlaW5lbi4iIERpZSBWb3JzdGVsbHVuZyBhbGxlaW4gbGllc3MgZWluZSBUcmFlbmUKK3VlYmVyIGlocmUgV2FuZ2UgbGF1ZmVuLiAiVW5kIGpldHp0IHNjaGxhZiBndXQuIgorCitSb21lbyBzb2cgZGllIGZldWNodGUgTmFjaHRsdWZ0IGR1cmNoIGRpZSBOYXNlIHVuZCAgYmlsZGV0ZSAgc2ljaCAgZWluLCAgZWluZW4KK0hhdWNoIGlocmVzIFBhcmZ1bXMgenUgcmllY2hlbi4gQmVkYXVlcm5kIGJsaWNrdGUgZXIgenUgIEp1bGlhcyAgQmFsa29uICBob2NoLAorZGVyIG51biBhYmdlc2VoZW4gdm9uIGRlciBLcmFlaGUgYXVmIGRlciBCcnVlc3R1bmcgbGVlciB3YXIuICJBY2gsIEp1bGlhLCAgd2llCitnZXJuZSBiaW4gaWNoIGJlaSBkaXIgdW5kIHdpZSB0cmF1cmlnIGJpbiBpY2gsIHdlaWwgIGljaCAgamV0enQgIHdpZWRlciAgZ2VoZW4KK211c3MuIgorCisiSnVsaWE/IiBVbG8gdWViZXJsZWd0ZS4gIkFjaCBzbywgaWNoIHZlcnN0ZWhlLiBOYSAgZ3V0LCAgZGFubiAgYmluICBpY2ggIGViZW4KK2pldHp0IEp1bGlhLiIKKworIkhtPyIsIGZyYWd0ZSBKdWxpYSwgZGllIGVzIGltIFppbW1lciBuaWNodCBtZWhyIGF1c2dlaGFsdGVuIGhhdHRlLgorCisiQWNoLCBuaWNodHMuIiBVbG8gcnVlY2t0ZSB6dXIgU2VpdGUuCisKKyJCaXN0IGR1IG5vY2ggZGEsIFJvbWVvPyIsIGZsdWVzdGVydGUgSnVsaWEuICJXaWUgc2NoYWRlLCBkYXNzICBkdSAga2VpbiAgSHVuZAorYmlzdCB1bmQgaWNoIGtlaW5lIEh1bmRlcGZlaWZlIGhhYmUsIGRlbm4gZGFubiBrb2VubnRlIGljaCAgZGljaCAgcnVmZW4sICBvaG5lCitnbGVpY2ggZGllIGdhbnplIE5hY2hiYXJzY2hhZnQgcmViZWxsaXNjaCB6dSBtYWNoZW4uIgorCitXbGFkIGtpY2hlcnRlIGxlaXNlIGJlaSBkZXIgVm9yc3RlbGx1bmcgdm9uIFJvbWVvIGFscyBCZXJuaGFyZGluZXIgbWl0IHRyZXVlbiwKK3NjaHdlcm11ZXRpZ2VuIEF1Z2VuIHVuZCBlaW5lbSBGYWVzc2NoZW4gdW0gZGVuIEhhbHMsICBtaXQgIGRlc3NlbiAgSW5oYWx0ICBlcgorc2ljaCB3YWVocmVuZCBkZXIgbGFuZ2VuIE5hY2h0d2FjaGVuIHZvciBKdWxpYXMgRmVuc3RlciB3YWVybXRlLgorCisiUm9tZW8/IiBKdWxpYSByaWVmIG51biBlaW4gd2VuaWcgbGF1dGVyLgorCisiSWNoIGJpbiBzY2hvbiBkYS4iIEVyIHNhaCB6dSBKdWxpYXMgQmFsa29uIGhvY2guICJXYXMgc29sbCBpY2ggdHVuPyIKKworIklociBkaWUgWmVpdHVuZyB1bmQgZGllIFBhbnRvZmZlbG4gYnJpbmdlbi4iLCBtdXJtZWx0ZSBVbG8gdW5kIHp3aW5rZXJ0ZSBXbGFkCit6dS4KKworIldhbm4ga2FubiBpY2ggZGVubiBtZWluZW4gQm90ZW4genUgZGlyIHNjaGlja2VuPyIKKworIlNvIGdlZ2VuIG5ldW4gVWhyPyIsIHNjaGx1ZyBSb21lbyB2b3IuCisKKyJHdXQuIEFiZXIgaWNoIHdvbGx0ZSBub2NoIGV0d2FzIGFuZGVyZXMuLi4iIEF1ZiBpaHJlciBTdGlybiBiaWxkZXRlIHNpY2ggZWluZQorc3RlaWxlIEZhbHRlLgorCisiSWNoIGJsZWliZSBoaWVyLCBiaXMgZXMgZGlyIHdpZWRlciBlaW5mYWVsbHQuIiBSb21lbyBzY2hpZW4gdm9uIGRlbSAgR2VkYW5rZW4KK3NlaHIgYW5nZXRhbiB6dSBzZWluLgorCitKdWxpYSBraWNoZXJ0ZSBsZWlzZS4gIkRhbm4gZXJpbm5lcmUgaWNoIG1pY2ggbmllIG1laHIgZGFyYW4sIHdlaWwgZHUgbWljaCAgc28KK3ZvZWxsaWcgdmVyd2lycnN0IHVuZCBpY2ggc293aWVzbyBhbiBuaWNodHMgYW5kZXJlcyBhbHMgZGljaCBkZW5rZW4ga2Fubi4iCisKK1JvbWVvIGxpZXNzIHNpY2ggSnVsaWFzIFNhdHogbm9jaCBlaW5tYWwgZHVyY2ggZGVuIEtvcGYgZ2VoZW4gdW5kIG5pY2t0ZSwgIGFscworZXIgaWhuIGJlZ3JpZmZlbiBoYXR0ZS4gIkRhbm4gYmxlaWJlbiB3aXIgIGJlaWRlICBoaWVyICBmdWVyICBpbW1lciAgdW5kICBld2lnCitzdGVoZW4uIgorCisiVW5kIHZlcmh1bmdlcm4uIiwgd2FyZiBVbG8gdm9lbGxpZyB1bnBvZXRpc2NoIGVpbi4KKworIkRhbm4gd2FlcmVzdCBkdSB3aWUgZWluIGtsZWluZXIgSHVuZCwgd2Vpc3N0IGR1PyAgSW1tZXIsICB3ZW5uICBkdSAgbWFsICBlYmVuCithZWguLi4iIEp1bGlhIHpvZWdlcnRlLiAiLi4uZWluZW4gQmF1bSBtYXJraWVyZW4gd2lsbHN0LCB6b2VnZSBpY2ggIGFuICBkZWluZXIKK0xlaW5lLCB3ZWlsIGljaCBkaWNoIG5pY2h0IGFsbGVpbmUgZ2VoZW4gbGFzc2VuIHdpbGwuIgorCisiRGFzIHdhZXJlIHd1bmRlcnNjaG9lbi4iLCBzZXVmenRlIFJvbWVvLiAiSWNoIHdhZXJlIGdlcm5lIGRlaW4gSHVuZC4iCisKKyJKYSwgZGVyIEdlZGFua2UgaXN0IHJlaXp2b2xsLiIgSnVsaWEgcmllZiBlaW5lIEdlbmVyYWxtb2JpbG1hY2h1bmcgIGZ1ZXIgIGRpZQorZ2VzYW10ZSBWZXJudW5mdCBpbiBpaHJlbSBLb3BmIGF1cy4gIkFiZXIgd2FocnNjaGVpbmxpY2ggd3VlcmRlICBpY2ggIGRpY2ggIHNvCitzY2hyZWNrbGljaCAgdmVyd29laG5lbiwgIGRhc3MJZHUgIGluCWt1ZXJ6ZXN0ZXIgIFplaXQgIHdpZSAgZWluZSAgU29mYXJvbGxlCithdXNzaWVoc3QgdW5kIGFuIEhlcnp2ZXJmZXR0dW5nIGVpbmdlaHN0LiBXZW5uIGR1IG5pY2h0IGJhbGQgZ2Voc3QsICBzYWdlICBpY2gKK2RpciBndXRlIE5hY2h0LCBiaXMgZGllICBTb25uZQlhdWZnZWh0LCAgdW5kICBtYWNoZSAgZGFubiAgbWl0ICBndXRlbglNb3JnZW4KK3dlaXRlci4iIFNpZSBsYWVjaGVsdGUsIHdpbmt0ZSBlaW4gbGV0enRlcyBNYWwgdW5kIHZlcnNjaHdhbmQgd2llZGVyIGluICBpaHJlbQorWmltbWVyLgorCitSb21lbyBzYWggaWhyIG1pdCBsZWVyZW4gQXVnZW4gaGludGVyaGVyLiAiV2VubiBpY2ggZG9jaCBibG9zcyBpaHIgQmV0dCB3YWVyZSwKK29kZXIgaWhyZSBCZXR0ZGVja2UsIGRhbm4ga29lbm50ZSBpY2ggIGRpZSAgZ2FuemUgIE5hY2h0ICBiZWkgIGlociAgc2Vpbi4iICBFcgorc2V1Znp0ZS4gIkVzIHdhZXJlIG1pciBzY2hvbiBnZW51Zywgd2VubiBpY2ggIGVpbiAgVHJhdW0gIHNlaW4gIGR1ZXJmdGUsICBkYW5uCitrb2VubnRlIGljaCBkaWUgZ2FuemUgTmFjaHQgaW4gaWhyZW0gS29wZiBzZWluLiIKKworVWxvIGdyaW5zdGUuICJJbiBpaHJlbiBLb3BmIHdpbGwgZXIgYmVzdGltbXQgbmljaHQgaGluZWluLiIKKworIkZlcmtlbC4iLCB3aWVzIEF6enVybyBzaWUgenVyZWNodC4KKworIk5laW4sIEtyYWVoZS4gRmVya2VsIGhhYmVuIGtlaW5lIEZsdWVnZWwgdW5kIHNpbmQgYXVjaCBuaWNodCBzY2h3YXJ6LiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTEgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVmNjJjCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTEKQEAgLTAsMCArMSwxMzEgQEAKK0RFUiBaV0VJVEUgQUtUCisJICBESUUgRFJJVFRFIFNaRU5FCisKK0JydWRlciBMYXdyZW5jZSBob2Igc2VpbmUgRnVlc3NlIGluIGRlbiBTYW5kYWxlbiBiZXNvbmRlcnMgaG9jaCwgZGVubiBkYXMgR3Jhcword2FyIG5hc3MgdW5kIGthbHQgdm9tIFRhdS4gVWViZXIgc2VpbmVuIEFybSAgaGF0dGUgIGVyCWVpbmVuICBLb3JiICBnZWhhZW5ndCwKK3NlaW5lIEt1dHRlIHZvcm5lIHp1c2FtbWVuZ2VmYXNzdCB1bmQgaW4gZGVuICBTdHJpY2sgIGdlc3RlY2t0LCAgZGVyICBpaG0gIGFscworR3VlcnRlbCBkaWVudGUuIERpZSBTb25uZSwgZGllIHZvcnNpY2h0aWcgdWViZXIgZGllIEdhcnRlbm1hdWVyIGx1Z3RlLCBicmFjaHRlCitCcnVkZXIgTGF3cmVuY2VucyBUb25zdXIgenVtIFNjaGltbWVybiB1bmQgIGdsaXR6ZXJ0ZSAgYXVmICBzZWluZW4gIHRhdW5hc3NlbiwKK2hhYXJpZ2VuIEJlaW5lbiwgd2VubiBlciBzaWNoIG5pZWRlcmJ1ZWNrdGUgdW5kICBLcmFldXRlciAgYXVzcnVwZnRlLCAgZGllICBlcgorc29yZ2ZhZWx0aWcgaW4gc2VpbmVuIEtvcmIgbGVndGUuCisKKyJLb21tIG51ciBoZXIsIGR1IGh1ZWJzY2hlciAgQm9ycmV0c2NoLiIsICBzYWd0ZSAgQnJ1ZGVyICBMYXdyZW5jZSAgbWl0ICBlaW5lbQorTGFlY2hlbG4sIGRhcyBkaWUgUGZsYW56ZSBuaWNodCBlcndpZGVydGUuICJEdSBrb21tc3QgaGV1dGUgaW4gbWVpbmVuIFNhbGF0LiIKKworIkljaCBrb2VubnRlIG1pciBhbmdlbmVobWVyZXMgdm9yc3RlbGxlbi4iLCBtdXJtZWx0ZSBVbG8sIGRpZSAgYXVmICBkZXIgIE1hdWVyCitzYXNzIHVuZCBzaWNoIGRpZSBTb25uZSBhdWYgZGFzIEdlZmllZGVyIHNjaGVpbmVuIGxpZXNzLgorCitBenp1cm8sIGRlbSBkaWUgZHVyY2h3YWNodGUgTmFjaHQgenVzZXR6dGUsIHNjaHJlY2t0ZSAgbmViZW4gIGlociAgYXVzCXNlaW5lbQorTmlja2VyY2hlbiBob2NoLiAiV2FzIG1laW50ZXN0IGR1PyIsIGZyYWd0ZSBlciB2ZXJzY2hsYWZlbi4KKworVWxvIGFudHdvcnRldGUgbmljaHQsIHNvbmRlcm4gYmV0cmFjaHRldGUgQnJ1ZGVyIExhd3JlbmNlLCBkZXNzZW4gQmF1Y2ggZXMgaWhtCitzaWNodGxpY2ggc2Nod2VyIG1hY2h0ZSwgZGllIEdhZW5zZWJsdWVtY2hlbiB6dSBwZmx1ZWNrZW4sICBkaWUgIHNlaW5lbSAgU2FsYXQKK0ZhcmJlIGdlYmVuIHNvbGx0ZS4KKworIkhhYiBpY2ggZGljaC4iLCBtZWludGUgZGVyICBNb2VuY2ggIHRyaXVtcGhpZXJlbmQuICAiRHUgIGJpc3QgIG1pciAgYmVzb25kZXJzCitlcnd1ZW5zY2h0LCBrbGVpbmVzIEdhZW5zZWJsdWVtY2hlbi4gRGVubiBzYWd0CW5pY2h0ICBzY2hvbiAgTGVvbmhhcmQJRnVjaHM6CitfRGllXyBfR2VubnNzYmx1bV8gX2lzdF8gX2Z1ZXJ0cmVmZmxpY2hfIF9ndXRfIF96dV8gX2Rlbl8gIF9sYW1lbl8gIF9nbGlkZXJuXy4KK1VuZCBsYWhtIGZ1ZWhsZSBpY2ggbWljaCBoZXV0ZSBtb3JnZW4gZ2FueiBiZXN0aW1tdC4iIEVyIHJpZWIgc2ljaCBkZW4gUnVlY2tlbgordW5kIGxpZXNzIHNlaW5lbiBCbGljayB1ZWJlciBkZW4gS3JhZXV0ZXJnYXJ0ZW4gIHdhbmRlcm4sICBiaXMJZXIgIGF1ZiAgZWluZW0KK01haWdsb2Vja2NoZW4gIGhhZW5nZW5ibGllYi4gICJEaWNoICBlc3NlICBpY2ggIGxpZWJlciAgbmljaHQsICBhdWNoICB3ZW5uICBkdQoraHVlYnNjaGVyIGJpc3QsIGFscyBkYXMgR2FlbnNlYmx1ZW1jaGVuLiIsIHZlcnNpY2hlcnRlIGVyIGRlciBCbHVtZSwgIGRpZSAgaWhtCitqZWRvY2gga2VpbmUgQXVmbWVya3NhbWtlaXQgc2NoZW5rdGUuICJTbyBzY2hvZW4gZHUgIHJpZWNoc3QsICBzbyAgaHVlYnNjaCAgZHUKK2FuenVzY2hhdWVuIGJpc3QsIHNvIGJvZXNhcnRpZyBnaWZ0aWcgYmlzdCBkdSBhdWNoLiIgRXIgc2V1Znp0ZSB1bmQgZHJvaHRlIGRlcgorQmx1bWUgc2NoZXJ6aGFmdCBtaXQgZGVtIEZpbmdlci4gIkphamEsIHNvIGRpY2h0ICBsaWVnZW4gIFNjaG9lbmhlaXQgIHVuZCAgVG9kCittYW5jaG1hbCBuZWJlbmVpbmFuZGVyLiIKKworIkRlciBndXRlIEJydWRlciBpc3QgaGV1dGUgcGhpbG9zb3BoaXNjaCBhdWZnZWxlZ3QuIiwgIGluZm9ybWllcnRlICBVbG8gIGlocmVuCitHZWZhZWhydGVuLgorCisiSG1wZi4iLCBtYWNodGUgQXp6dXJvIG9obmUgZGVuIFNjaG5hYmVsIGF1cyBkZW0gR2VmaWVkZXIgenUgemllaGVuLgorCitVbG8gc3RpZXNzIGlobiBhbiB1bmQgYmVvYmFjaHRldGUgbWl0IGhhZW1pc2NoZW0gR3JpbnNlbiwgd2llIEF6enVybyAgc2ljaCAgdW0KK3NlaW4gR2xlaWNoZ2V3aWNodCBiZW11ZWh0ZS4gIlJvbWVvIGtvbW10LiIKKworIkxhc3MgaWhuIGtvbW1lbiB1bmQgbWljaCBzY2hsYWZlbi4iLCBicnVtbXRlIEF6enVybyB1bmdlaGFsdGVuLgorCisiV2FzIGJpc3QgZHUsIGVpbiBNYW5uIG9kZXIuLi4iCisKKyIuLi5laW5lIEtyYWVoZS4iLCB2ZXJ2b2xsc3RhZW5kaWd0ZSBBenp1cm8gZGVuICBTYXR6ICB1bmQgIGJlc2NobG9zcywgIGxpZWJlcgorYXVmenV3YWNoZW4sIGFscyBVbG8gd2VpdGVyaGluIEdlbGVnZW5oZWl0IHp1IGdlYmVuLCAgaWhuICB2b24JZGVyICBNYXVlciAgenUKK3N0b3NzZW4uCisKKyJHdXRlbiBNb3JnZW4sIEJydWRlciBMYXdyZW5jZS4iIFJvbWVvIHdpbmt0ZSBkZW0gTW9lbmNoIGZyb2VobGljaCB6dS4KKworIkR1IGJpc3QgYWJlciBoZXV0ZSBndXQgIGdlbGF1bnQsICBSb21lby4iLCAgd3VuZGVydGUgIHNpY2ggIEJydWRlciAgTGF3cmVuY2UuCisiU29uc3QgYmVrb21tdCBtYW4gZGljaCBkb2NoIG5pY2h0IHNvIGZydWVoIGF1cyBkZW0gQmV0dC4gSnVuZ2UgTGV1dGUgc2NobGFmZW4KK2xhbmcgdW5kIHZpZWwgdW5kIGRhcyBpc3QgYXVjaCBndXQgc28uCUFuZGVyZXJzZWl0cy4uLiIgIEVyICBtYXNzICBSb21lbyAgbWl0CitlaW5lbSBrcml0aXNjaGVuIEJsaWNrLiAiRHUgIGJpc3QgIHdvaGwgIGltICByaWNodGlnZW4gIEFsdGVyICB1bSAgZWluZSAgTmFjaHQKK2R1cmNoenVtYWNoZW4uIgorCisiR2VuYXUuIFVuZCBpY2ggaGFiZSBkdXJjaGdlbWFjaHQgdW5kIGZ1ZWhsZSBtaWNoIGZyaXNjaGVyLCBhbHMgd2VubiAgaWNoICBkaWUKK2dhbnplIE5hY2h0IGdlc2NobGFmZW4gaGFldHRlLiIKKworQnJ1ZGVyIExhd3JlbmNlLCBkZXIgc2ljaCBub2NoIGd1dCBkYXJhbiAgZXJpbm5lcnRlLCAgd2llICBlcyAgd2FyLCAgYmV2b3IgIGVyCitNb2VuY2ggd3VyZGUsIHNjaGlja3RlIGRhcyBHcmluc2VuLCBkYXNzIHNpY2ggYXVmICBzZWluZW0gIEdlc2ljaHQgIGF1c2JyZWl0ZW4KK3dvbGx0ZSBtaXQgZWluZW0gZW5lcmdpc2NoZW4gU3Rpcm5ydW56ZWxuIHp1cnVlY2sgdW5kIGJlc2FubiAgc2ljaCAgYXVmICBzZWluZQorUGZsaWNodGVuIGFscyBQcmllc3RlciB1bmQgZ2Vpc3RsaWNoZXIJQmVyYXRlci4gICJEdSAgaGFzdCAgZG9jaCAgbmljaHQgIGV0d2EKK2dlc3VlbmRpZ3QsIG1laW4gU29obj8iLCBmcmFndGUgZXIgc3RyZW5nLiAiV2Fyc3QgZHUgYmVpIFJvc2FsaW5lPyIKKworIldlciAgaXN0ICAgUm9zYWxpbmU/IiAgIFJvbWVvICAgcmllYiAgIHNpY2ggICBtaXQgICB1ZWJlcnRyaWViZW4gICB2ZXJ3aXJydGVtCitHZXNpY2h0c2F1c2RydWNrIGRpZSBTdGlybi4gIkFjaCBzbywgZGFzIHdhciBkaWUgRnJhdSwgZGllIG1pY2ggc28gc2NocmVja2xpY2gKK3RyYXVyaWcgZ2VtYWNodCBoYXQuIiBFciBsYWNodGUuICJOZWluLCBCcnVkZXIgTGF3cmVuY2UsIGRpZXNlIEZyYXUgIGhhYmUgIGljaAordmVyZ2Vzc2VuLiIKKworIlNpZWhzdCBkdSwgaWNoIGhhYmUgZGlyIGRvY2ggZ2xlaWNoIGdlc2FndCwgZGFzcyBkaWVzICBkYXMgIGJlc3RlICBmdWVyICBkaWNoCitzZWluIHd1ZXJkZS4iIE51biAgc3RhaGwgIHNpY2ggIHRyb3R6ICBhbGxlciAgQW5zdHJlbmd1bmdlbiwgIGRpZSAgZGVyICBNb2VuY2gKK3VudGVybmFobSwgZG9jaCBub2NoIE5ldWdpZXJkZSBpbiBzZWluZW4gQmxpY2suICJXbyBoYXN0ICBkdSAgZGljaCAgZGVubiAgZGFubgorcnVtZ2V0cmllYmVuPyIKKworIkljaCBoYWJlIGJlc2NobG9zc2VuLCBkZW4gQW53ZWlzdW5nZW4gZGVyIEJpYmVsIHp1IGZvbGdlbiB1bmQgbWVpbmUgRmVpbmRlIHp1CitsaWViZW4uIgorCisiRGFzIGlzdCBhbiB1bmQgZnVlciBzaWNoIHNlaHIgbG9lYmxpY2gsIGFiZXIgd2VubiBkdSBtaXIgbmljaHQgc2Fnc3QsIHdhcyAgZHUKK2dldGFuIGhhc3QsIGthbm4gaWNoIGRpciBhdWNoIG5pY2h0IHNhZ2VuLCB3YXMgaWNoIGRhdm9uIGhhbHRlLiBVbmQgbWVpbmVuIFJhdAorc3VjaHN0IGR1IGRvY2gsIHdlbm4gaWNoIGRpY2ggcmljaHRpZyB2ZXJzdGVoZS4iCisKKyJOZWluLCBlaWdlbnRsaWNoIG5pY2h0LiIsIGFudHdvcnRldGUgUm9tZW8gdW5kICBtdXNzdGUgIHVlYmVyICBkYXMgIHZlcndpcnJ0ZQorR2VzaWNodCBkZXMgTW9lbmNocyBsYWVjaGVsbi4gIkFsc28sIGdlc3Rlcm4gYWJlbmQgaGFiZSBpY2ggYmVpICBkZW4gIENhcHVsZXRzCitlaW5lIEZlaWVyIGJlc3VjaHQgdW5kIGRhYmVpIEp1bGlhIGtlbm5lbmdlbGVybnQuIgorCisiT2guIiwgbWFjaHRlIEJydWRlciBMYXdyZW5jZSB2ZXJzdGFlbmRuaXNsb3MuCisKKyJTaWUgaXN0IHd1bmRlcnNjaG9lbiwgaWNoIGxpZWJlIHNpZSwgc2llIGxpZWJ0IG1pY2ggdW5kIGFsbGVzICB3YXMgIHdpciAgbm9jaAorYnJhdWNoZW4sIHVtIGVuZGd1ZWx0aWcgZ2x1ZWNrbGljaCAgenUJd2VyZGVuLCAgaXN0ICBlaW4gIFByaWVzdGVyLCAgZGVyICB1bnMKK3ZlcmhlaXJhdGV0LiIsIHNwcnVkZWx0ZSBlcyBudW4gYXVzIFJvbWVvIGhlcmF1cy4KKworIkFoYS4iIE51biB2ZXJzdGFuZCBCcnVkZXIgTGF3cmVuY2UsIHdhcyAgc2VpbiAgU2NodWV0emxpbmcgIHdvbGx0ZS4gICJVbmQgIGFuCitkaWVzZXIgU3RlbGxlIGtvbW1lIGljaCBpbnMgU3BpZWwuIiBSb21lbyBsYWVjaGVsdGUgc2VpbmVuIHZhZXRlcmxpY2hlbiBGcmV1bmQKK3NvIHN0cmFobGVuZCBhbiwgZGFzcyBkZXNzZW4gSGVyeiBkYWhpbnNjaG1vbHouICJJY2ggbXVzcyBzY2hvbiBzYWdlbiwgZGFzIGlzdAorZWluZSB1ZWJlcnJhc2NoZW5kZSBXZW5kdW5nLiBFcnN0IGxpZWJzdCBkdSAgUm9zYWxpbmUgIHVuZCAgamFtbWVyc3QgIG1pciAgZGllCitPaHJlbiB2b2xsLCBkYW5uIGxlcm5zdCBkdSBlaW5lIGFuZGVyZSBGcmF1ICBrZW5uZW4gIHVuZCAgc2Nob24gIGlzdCAgUm9zYWxpbmUKK1NjaG5lZSB2b24gZ2VzdGVybi4gVGphLCBpY2ggc29sbHRlIG1pciB3b2hsIGFuZ2V3b2VobmVuLCBkaWUganVuZ2VuIExldXRlIG1pdAorZWluZW0gIEtvZXJuY2hlbiAgU2Fsegl6dSAgZ2VuaWVzc2VuLgladSAgbWVpbmVyICBaZWl0ICB3YXIgIG1hbiAgbmljaHQgICBzbworc3BydW5naGFmdC4iCisKKyJBYmVyIGR1IHdvbGx0ZXN0IGRvY2gsICBkYXNzICBpY2ggIFJvc2FsaW5lICBuaWNodCAgbWVociAgbGllYmUuIiAgUm9tZW8gIHdhcgordmVyd2lycnQuCisKKyJJbiBSb3NhbGluZSB3YXJzdCBkdSB2ZXJrbmFsbHQsIG5pY2h0IHZlcmxpZWJ0LiBEYXMgIGlzdCAgZWluICBlbnRzY2hlaWRlbmRlcgorVW50ZXJzY2hpZWQuIgorCisiU2llaHN0IGR1LCBqZXR6dCBoYXN0IGR1IGRvY2ggZGVpbmVuIFdpbGxlbi4gSWNoIGxpZWJlIEp1bGlhICB1bmQgIGJpbiAgbmljaHQKK3ZlcmtuYWxsdCBpbiBzaWUuIgorCisiRGFzIGhhc3QgZHUgdm9uIFJvc2FsaW5lIGF1Y2ggZ2VzYWd0LiIKKworUm9tZW8gdWViZXJsZWd0ZSwgZGVubiBkaWVzZXIgRWlud2FuZCB3b2cgc2Nod2VyLiAiSmEsIGFiZXIgUm9zYWxpbmUgaGF0ICBtaWNoCituaWNodCB6dXJ1ZWNrZ2VsaWVidC4iCisKK0JydWRlciBMYXdyZW5jZSB3aWVndGUgYmVkYWVjaHRpZyBzZWluZW4gS29wZiBoaW4gdW5kIGhlci4gIkRhcyBpc3Qgd29obCB3YWhyLgorTmEsIGljaCB3ZXJkZSBldWNoIHZlcmhlaXJhdGVuLCB6dW1pbmRlc3Qgd2lyZCBlcyBldXJlbiBFbHRlcm4JaGVsZmVuLCAgaWhyZW4KK1N0cmVpdCB6dSBiZWdyYWJlbi4iCisKKyJXb3JhdWYgd2FydGVuIHdpciBkYW5uIG5vY2g/IiBSb21lbyBsaWVmIGVpbiBwYWFyICBTY2hyaXR0ZSAgYXVmICBkaWUgIGtsZWluZQorS2FwZWxsZSB6dS4KKworIkltbWVyIGxhbmdzYW0gbWl0IGRlbiBqdW5nZW4gUGZlcmRlbi4iIEVyIHdpc2NodGUgc2ljaCBkZW4gU2Nod2Vpc3MgIHZvbiAgZGVyCitTdGlybiB1bmQgYmVkYWNodGUgUm9tZW8gbWl0IGVpbmVtIGxhbmdlbiBCbGljay4gIk5laW4sIGp1bmdlICBIZW5nc3RlICBsYXVmZW4KK3NjaG5lbGwsIGVzIHNpbmQgZGllIGFsdGVuIFdhbGxhY2hlLCBkaWUgbmljaHQgaGludGVyaGVya29tbWVuLiIsICBrb3JyaWdpZXJ0ZQorZXIgc2ljaCB1bmQgbGFlY2hlbHRlLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxMiBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTg5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxMgpAQCAtMCwwICsxLDI2NiBAQAorREVSIFpXRUlURSBBS1QKKwkgIERJRSBWSUVSVEUgU1pFTkUKKworTWVyY3V0aW8gem9nIGVpbiB1bndpbGxpZ2VzIEdlc2ljaHQuICJJY2ggZnJhZ2UgIG1pY2gsICB3byAgenVtICBUZXVmZWwgIFJvbWVvCitzdGVja3QuIExldHp0ZSBOYWNodCB3YXIgZXIgbmljaHQgZGFoZWltLiIKKworIkplZGVuZmFsbHMgbmljaHQgYmVpIHNlaW5lbSBWYXRlci4iLCBncmluc3RlIEJlbmV2b2xpby4KKworIkJlc3RpbW10ICBpc3QgIGVyICBkcmF1c3NlbiAgaGVydW1nZXJhbm50ICB1bmQgIGhhdCAgdWViZXIgICBkaWVzZSAgIFJvc2FsaW5lCitnZWphbW1lcnQuIiBNZXJjdXRpbyBzcHVja3RlIGRlbiBOYW1lbiByZWdlbHJlY2h0IGF1cy4KKworIkVzIGtvbW10IG5vY2ggc2NobGltbWVyLiIgQmVuZXZvbGlvIHp1ZWNrdGUgZWluIFRhc2NoZW50dWNoIHVuZCAgcHV0enRlICBzaWNoCit1bXN0YWVuZGxpY2ggZGllIE5hc2UuICJFcyBpc3QgZWluIEJyaWVmIHZvbiBUeWJhbHQgYW5nZWtvbW1lbi4iCisKKyJBY2ggIGR1ICBkaWNrZXIuLi4iICBNZXJjdXRpbyAgIHd1cmRlICAgYmxhc3MuICAgIkRhcyAgIGlzdCAgIGJlc3RpbW10ICAgZWluZQorSGVyYXVzZm9yZGVydW5nLiIKKworU2llIHdpc3NlbiwgIGxpZWJlICBMZXNlcmluLCAgbGllYmVyICBMZXNlciwgIGRhc3MgIGluCW15dGhpc2NoZXIgIFplaXQgIGVpbmUKK0hlcmF1c2ZvcmRlcnVuZyBuaWNodCBtZWhyIHdhciwgYWxzIGhldXRlIGVpbmUgRWlubGFkdW5nIHp1IGVpbmVtICBUZW5uaXNtYXRjaAordW50ZXIgIEZlaW5kZW4uICBOYXR1ZXJsaWNoICBsaWVmICBlcyAgbmljaHQgIGdhbnogIHNvCXVuYmx1dGlnICBhYiAgd2llICBlaW4KK1Rlbm5pc21hdGNoLCBkYWZ1ZXIgYWJlciBoYXR0ZW4gZGllIEJlc3RhdHR1bmdzdW50ZXJuZWhtZXIgbWVociB6dSB0dW4gdW5kIGRpZQorR2VyaWNodGUgbXVzc3RlbiBzaWNoICBuaWNodCAgbWl0ICBCZWxlaWRpZ3VuZ3NrbGFnZW4gIGF1c2VpbmFuZGVyc2V0emVuLiAgRWluCitmaW5kaWdlciBLb3BmIGVyZmFuZCBkYW5uIGlyZ2VuZHdhbm4gZGllICBSZWNodHNjaHV0enZlcnNpY2hlcnVuZyAgdW5kCXNvcmd0ZQorZGFmdWVyLCAgZGFzcyAgRHVlbGxlICB2ZXJib3RlbiAgd3VyZGVuLiAgV2lyICBzY2h1bGRlbiAgZGVtICBFcmZpbmRlcglkaWVzZXIKK1ZlcnNpY2hlcnVuZyAgYmlzICBoZXV0ZSAgRGFuaywgIGRlbm4gIGFuc29uc3RlbiAgd2FlcmVuICBkaWUJUHJhZW1pZW4gICBkZXIKK1N0ZXJiZWthc3NlbiB1bmQgTGViZW5zdmVyc2ljaGVydW5nZW4gd2VzZW50bGljaCBob2VoZXIuCisKK0JlbmV2b2xpbyBuaWNrdGUgYmVkYWVjaHRpZy4gIlJvbWVvIHdpcmQgaWhtIHNjaG9uICBlaW5lICBhbmdlbWVzc2VuZSAgQW50d29ydAorZGFyYXVmIGdlYmVuLiIKKworIlNvbGFuZ2UgZXMga2VpbmUgYW5tYXNzZW5kZSBpc3QuIiAgTWVyY3V0aW8gIHNjaHVldHRlbHRlICBkZW4gIEtvcGYuICAiRGllc2VyCitUeWJhbHQgbWFjaHQgbWlyIFNvcmdlbi4iCisKKyJBY2ggd2FzLCBUeWJhbHQgaXN0IGVpbiBhdWZnZWJsYXNlbmVyIElkaW90LiIKKworIlZpZWxsZWljaHQuIEFiZXIgYXVzc2VyZGVtIGlzdCBlciBub2NoIGVpbiB2ZXJkYW1tdCBndXRlciBGZWNodGVyLiIKKworIlJvbWVvIGF1Y2guIgorCisiTmljaHQgZ3V0IGdlbnVnLCBmdWVyY2h0ZSBpY2guIiBNZXJjdXRpbyBoYWV0dGVyIGdlcm5lIGVpbmUgIGJlc3NlcmUgIE1laW51bmcKK3ZvbiBkZW4gRmVjaHRrdWVuc3RlbiAgc2VpbmVzICBGcmV1bmRlcyAgZ2VoYWJ0LCAgaGF0dGUgIGplZG9jaCAgVHliYWx0ICBzY2hvbgora2FlbXBmZW4gc2VoZW4uCisKKyJLb21tLCBtYWxlIG5pY2h0IHNjaHdhcnplIExldXRlIGFuIHdlaXNzZSBXYWVuZGUuIiBCZW5ldm9saW8gd2VkZWx0ZSBtaXQgIGRlbgorSGFlbmRlbiwgYWxzIHdvbGxlICBlcgllaW5lbiAgTXVlY2tlbnNjaHdhcm0gIHZlcnNjaGV1Y2hlbi4gICJTaWVoc3QgIGR1PyAgU28KK3ZlcnRyZWliZSBpY2ggZGVpbmUgdHJ1ZWJlbiBHZWRhbmtlbi4iCisKKyJVbmQgaG9sc3QgUm9tZW8gZGFtaXQgaGVyLiIsIGxhZWNoZWx0ZSBNZXJjdXRpby4gIkhhbGxvIFJvbWVvLiAgTmEsICBXaWUgIHdhcgorZGVpbmUgTmFjaHQ/IiBFaW4gbHVlc3Rlcm5lcyBHcmluc2VuIGJyZWl0ZXRlIHNpY2ggdWViZXIgc2VpbiBHZXNpY2h0IGF1cy4KKworIkludGVyZXNzYW50LiIsIGFudHdvcnRldGUgUm9tZW8gdW5iZXN0aW1tdC4KKworIkRhcyBrYW5uIGljaCBkaXIgYW5zZWhlbiwgbWVpbiBGcmV1bmQuIiBCZW5ldm9saW8gc3RyaWNoIGRpZSB6ZXJ6YXVzdGVuIEhhYXJlCitzZWluZXMgQ291c2lucyB6dXJlY2h0LgorCisiSGFzdCB1bnMgamEgZ2FueiAgc2Nob2VuICByZWluZ2VsZWd0LCAgbWVpbiAgTGllYmVyLiIsICB3aWVzICBNZXJjdXRpbyAgUm9tZW8KK3p1cmVjaHQuCisKKyJIYWJlIGljaD8gRGFzIHR1dCBtaXIgbGVpZCwgYWJlciBpY2ggYmluIGltIE1vbWVudCBzbyBzY2hyZWNrbGljaC4uLiAgYWVoLi4uIgorRXIgdWViZXJsZWd0ZSB1bmQgZnVlZ3RlIGRhbm4gbWl0IGVpbmVtIEdyaW5zZW4gaGluenU6ICIuLi5zdHJhcGF6aWVydC4iCisKK01lcmN1dGlvIGxhY2h0ZS4gIkRlaW5lIFN0cmFwYXplbiBtb2VjaHRlIGljaCBoYWJlbiEiCisKKyJEYW5uIHdhZXJlc3QgZHUgZ2VuYXVzbyBtdWVkZSB3aWUgaWNoLiIgIFJvbWVvICByaWViICBzaWNoICB1ZWJlcnRyaWViZW4gIGRpZQorQXVnZW4uCisKKyJVbmQgaGFldHRlIHdpZSBkdSBBZWhubGljaGtlaXQgbWl0IGRlciBLYXR6ZSwgZGllIGRlbiBTYWhuZXRvcGYgYXVzZ2VzY2hsZWNrdAoraGF0LiIKKworIk5hY2hkZW0gZGllIEtvZWNoaW4gZGFzIFZlcmJyZWNoZW4gZW50ZGVja3QgaGF0LCBrYW5uc3QgZHUgbWVpbmUgUm9sbGUgIGdlcm5lCitoYWJlbi4iLCBtZWludGUgUm9tZW8gZ3JpbnNlbmQuCisKKyJEYXMgaXN0IHVuZmFpcjogRGllIFNhaG5lIGJla29tbXN0IGR1IHVuZCBpY2ggZGVuIEFlcmdlciBtaXQgZGVyIEtvZWNoaW4uIgorCisiQmVzc2VyIGRlbiBBZXJnZXIgYWxzIGRpZSBLb2VjaGluLiIgUm9tZW8gc2NodWV0dGVsdGUgc2ljaC4KKworIkJlc3NlciBkaWUgU2FobmUgYWxzIGJlaWRlcy4iICBNZXJjdXRpbyAgd2llZ3RlICBzaWNoICBpbiAgZGVuICBIdWVmdGVuLiAgIlNvCitnZWZhZWxsc3QgZHUgbWlyIHNjaG9uIGJlc3NlciwgUm9tZW8uIEdlc3Rlcm4gaGFzdCBkdSBub2NoIHppZW1saWNoIHRydWViZSBhdXMKK2RlciBXYWVzY2hlIGdlc2NoYXV0LiIgRXIgZ3JpbnN0ZSBicmVpdC4gICJVbmQgIGhldXRlICBuYWNodCAgaW4gIGRpZSAgV2Flc2NoZQoraGluZWluLCBuZWhtZSBpY2ggYW4uIgorCitSb21lbyB0cmF0IG5hY2ggTWVyY3V0aW8sIGdhYiBzaWNoIGFiZXIga2VpbmUgYmVzb25kZXJlIE11ZWhlLCBpaG4genUgdHJlZmZlbi4KKyJOaWNodHMgZGEsIGljaCBiaW4gYW5zdGFlbmRpZy4iCisKKyJOaWNodCwgZGFzcyBkdSBlcyBmcmVpd2lsbGlnIHdhZXJlc3QuIgorCisiUGZmdC4iLCBtYWNodGUgUm9tZW8gdW5kIHdhbmR0ZSBzaWNoIGFiLiBTZWluIEJsaWNrIGJsaWViIGF1ZiBQb2xseSAgaGFlbmdlbiwKK2RpZSBzaWNoIGlocmVuIFdlZyB1ZWJlciBkZW4gTWFya3RwbGF0eiBiYWhudGUgdW5kIGRhYmVpIGFuIGVpbiBTY2hsYWNodHNjaGlmZgordW50ZXIgdm9sbGVuIFNlZ2VsbiBnZW1haG50ZS4gVmVyc2NoYWVtdCBkZXV0ZXRlIGVyIG1pdCBkZW0gRmluZ2VyIGF1ZglQb2xseS4KKyJTdHJlaWNodCBkaWUgRmxhZ2dlLCBMZXV0ZSwgZGVyIEtvcnNhciB3aXJkIHVucyBlbnRlcm4uIgorCitNZXJjdXRpbyB2ZXJiYXJnIHNlaW4gR2VzaWNodCBoaW50ZXIgZGVuICBIYWVuZGVuLiAgIkJlbWFubnQgIGRpZSAgQm9vdGUsICBzaWUKK3JhbW10IHVucyEiCisKK0JlbmV2b2xpbyBsYWNodGUuICJEb3J0IGJsYWVzdCBlciEiCisKK0F6enVybyBzY2h1ZXR0ZWx0ZSBzaWNoLCBhbHMgZXIgd2llZGVyIGVpbm1hbCBlaW4gZnJlbWRlcyBaaXRhdCBob2VydGUsICBibGllYgorYWJlciBzdHVtbS4KKworIldhcyBzb2xsIGRlbm4gZGFzLCBCZW5ldm9saW8/IiBSb21lbyBlcmdyaWZmIGRpZSBOYXNlIHNlaW5lcyBDb3VzaW5zIG1pdCB6d2VpCitGaW5nZXJuLCB6b2cgc2VpbiBHZXNpY2h0IGRhcmFuIG5hY2ggb2JlbiB1bmQgYmVzY2hhdXRlIHNpY2ggc293b2hsIGRpZSBaYWVobmUKK2FscyBhdWNoIGRpZSBBdWdlbi4gIkJpc3QgZHUgc2ljaGVyLCBkYXNzIGR1IGdhbnogZ2VzdW5kIGJpc3Q/IgorCisiSGUhIiBCZW5ldm9saW8gZ2FiIFJvbWVvIGVpbmVuIFN0b3NzLiAiTGFzcyBkYXMsIGR1IHR1c3QgbWlyIHdlaC4iCisKKyJJY2ggd29sbHRlIGRvY2ggbnVyIG5hY2hzZWhlbiwgb2IgZGlyIGlyZ2VuZGV0d2FzIGZlaGx0LiIKKworIkRhIG9iZW4gZmVobHQgaWhtIG5pY2h0cy4iLCBiZWxlaHJ0ZSAgTWVyY3V0aW8gIHNlaW5lbiAgRnJldW5kLiAgIlNjaG9uICBlaGVyCitmZWhsdCBpaG0gdW50ZW4gZXR3YXMsIGFiZXIgZGFydWViZXIgc3ByZWNoZW4gYW5zdGFlbmRpZ2UgTWFlbm5lciBqYSBuaWNodC4iCisKKyJBbnN0YWVuZGlnZSBNYWVubmVyIGJlbnV0emVuIGVzIHVuZCBzY2h3ZWlnZW4uIiwgbWVpbnRlIFJvbWVvLgorCisiQW5zdGFlbmRpZ2UgTWFlbm5lciBicmF1Y2hlbiBlcyBuaWNodC4iIEJlbmV2b2xpbyByaWViIHNpY2ggZGllIE5hc2UuCisKKyJBcm1lciBCZW5ldm9saW8sIGhhdCBtYW4gZGlyIGRhcyB6dW0gVHJvc3QgIGVyemFlaGx0PyIgIE1lcmN1dGlvICB0YWV0c2NoZWx0ZQorQmVuZXZvbGlvcyBLb3BmLgorCisiU2llaCBhbiwgZGllIEdhbGVvbmUgaGF0IG5vY2ggZWluZSBTY2hhbHVwcGUgaW0gU2NobGVwcHRhdS4iLCBiZW1lcmt0ZSBSb21lby4KKworIkRpZSBTY2hhbHVwcGUgaXN0IHdvaGwgZGFzIFByb3ZpYW50c2NoaWZmLiIgQmVuZXZvbGlvIGhhdHRlIGRlbiBncm9zc2VuICBLb3JiCitiZW1lcmt0LCBkZXIgdWViZXIgUGV0ZXJzIEFybSBoaW5nIHVuZCBtaXQgIEdlbXVlc2UgIHZvbGxnZXN0b3BmdCAgd2FyLiAgUm9tZW8KK25pY2t0ZSwgZG9jaCBkYSBQb2xseSBudW4gYXVmIEhvZXJ3ZWl0ZSBoZXJhbmdla29tbWVuICB3YXIsICB6b2cgIGVyICBlcyAgdm9yLAorbmljaHQgbWVociB6dSBhbnR3b3J0ZW4gdW5kIHNpY2ggc3RhdHQgZGVzc2VuIHZvciBQb2xseSB6dSB2ZXJuZWlnZW4uCisKKyJHdXRlbiBNb3JnZW4uIiwgZ3J1ZXNzdGUgUG9sbHkuCisKKyJFaGVyIGd1dGVuIEFiZW5kLiIsIGdhYiBNZXJjdXRpbyB6dXJ1ZWNrLgorCisiV2llc28/IEVzIGlzdCBkb2NoIG5vY2ggZnJ1ZWggYW0gVGFnLiIKKworIkFiZXIgTWl0dGFnIGlzdCB2aWVsIHp1IHVuYW5zdGFlbmRpZywgZGVuIHVlYmVyZ2VodCBlaW5lICBEYW1lICBiZXNzZXIuICBXZW5uCitkZXIgWmVpZ2VyIHNvIGF1ZmdlcmljaHRldCBpc3QuLi4iIE1lcmN1dGlvIGxpZXNzIGRlbiBSZXN0IGRlcyBTYXR6ZXMgIGluICBkZXIKK0x1ZnQgaGFlbmdlbi4KKworIlBldGVyLCBtZWluIEZhZWNoZXIuIiwgdmVybGFuZ3RlIFBvbGx5IHVuZCBtYXNzIE1lcmN1dGlvIG1pdCBlaW5lbSBCbGljaywgZGVuCittYW4gbmljaHQgaW4gV29ydGVuIGJlc2NocmVpYmVuIGthbm4uCisKK0VoZXIgaXN0IGVzIG1vZWdsaWNoLCBNZXJjdXRpb3MgRW50c2V0emVuIHp1IGJlc2NocmVpYmVuLCAgYWxzCWVyICBkZW4gIEJsaWNrCithdWZmaW5nIHVuZCB0aWVmcm90IHd1cmRlLiBFciBlcmlubmVydGUgc2ljaCBwbG9ldHpsaWNoIGFuIGRlbiBUYWcsIGFuIGRlbSBpaG4KK3NlaW5lIGVpZ2VuZSBLaW5kZXJmcmF1IG1pdCBkZXIgSGFuZCBpbiBkZXIgIEhvc2UgIGVyd2lzY2h0ICBoYXR0ZS4gIFVtICBzZWluZQorVmVybGVnZW5oZWl0IHp1IHVlYmVyc3BpZWxlbiwgcmllZiBlcjogIkphd29obCwgUGV0ZXIsIGRlbiBGYWVjaGVyICBkZXIgIERhbWUsCitkZXIgRmFlY2hlciBpc3Qgd2FocnNjaGVpbmxpY2ggZWluIHNjaG9lbmVyZXIgQW5ibGljayBhbHMgZGFzIEdlc2ljaHQuIgorCitQb2xseSBrbmlmZiBkaWUgQXVnZW4genVzYW1tZW4sIHNhZ3RlIGFiZXIgbmljaHRzLgorCisiTmVobWVuICBTaWUgIGlobiAgbmljaHQgIHp1ICBlcm5zdC4iLCAgcmlldCAgUm9tZW8gIHVuZCAgIHZlcnN1Y2h0ZSwgICBQb2xseXMKK0F1Zm1lcmtzYW1rZWl0IHZvbiBNZXJjdXRpbyBhYnp1bGVua2VuLgorCitQb2xseSBzZXVmenRlLiAiS2FubiBlaW5lciB2b24gSWhuZW4gbWlyIHdvaGwgc2FnZW4sIHdvIGljaCBlaW5lbiBqdW5nZW4gIE1hbm4KK25hbWVucyBSb21lbyBmaW5kZT8iCisKKyJXZW5uIFNpZSBudXIgc2VpbmVuIFZvcm5hbWVuIHdpc3Nlbiwgd2lyZCBlciB2ZXJtdXRsaWNoICBlaW4gIEdyYXViYXJ0ICBzZWluLAorYmV2b3Igc2llIGlobiAgZ2VmdW5kZW4gIGhhYmVuLiIsICBtZWludGUgIFJvbWVvICBsYWVjaGVsbmQuICAiQWJlciAgd2VubiAgU2llCitlaW5zdHdlaWxlbiBtaXQgbWlyIFZvcmxpZWIgbmVobWVuIHdvbGxlbj8iCisKKyJOaWNodCwgZGFzcyBpY2ggZWluZSBWb3JsaWViZSBmdWVyIFNpZSBoYWV0dGUsICBuZWluLCAgYWJlciAgd2VubiAgU2llICBSb21lbworaGVpc3NlbiwgZGFubiBuZWhtZSBpY2ggU2llLiIKKworTWVyY3V0aW8gbWFjaHRlICJIYSEiLCB1bmQga3J1ZW1tdGUgc2ljaCBkYW5uIGluIGVpbmVtIEh1c3RlbmFuZmFsbCwgIGRlciAgaWhtCitzb2ZvcnQgdm9uIEJlbmV2b2xpbyBlaW4gcGFhciBrcmFlZnRpZ2UgU2NobGFlZ2UgYXVmIGRlbiBSdWVja2VuIGVpbnRydWcuCisKKyJBZWgsIGljaCBicmluZ2UgTWVyY3V0aW8genUgZGlyIG5hY2ggSGF1c2UsIFJvbWVvLCBlciBzb2xsdGUgZXR3YXMgdHJpbmtlbi4iCisKK0JlbmV2b2xpbyBnYWIgc2ljaCBhbGxlIGVyZGVua2xpY2hlIE11ZWhlLCBzZWluIEdlc2ljaHQgZXJuc3QgenUgaGFsdGVuLiAgIldpcgordHJlZmZlbiB1bnMgZGFubiBkYSB6dW0gTWl0dGFnZXNzZW4uIiBFciBiZXVndGUgc2ljaCAgYmVzb3JndCAgdWViZXIgIE1lcmN1dGlvCit1bmQgc2NobGVwcHRlIGRpZXNlbiBhdXMgUG9sbHlzIFJlaWNod2VpdGUuCisKKyJXYXMgd2FyIGRlbm4gZGFzIGZ1ZXIgZWluIEZsZWdlbD8iLCBmcmFndGUgUG9sbHkuCisKKyJXaWUgaWNoIHNjaG9uIHNhZ3RlLCBuZWhtZW4gU2llIGlobiBuaWNodCBmdWVyIHZvbGwuIFdhcyBrYW5uICBpY2ggIGZ1ZXIgIFNpZQordHVuPyIgUm9tZW8gaGF0dGUgc2VsYnN0IFByb2JsZW1lLCBuaWNodCB6dSBsYWNoZW4uCisKKyJBbHNvIHdpcmtsaWNoLiIgUG9sbHkgd2FyIGltbWVyIG5vY2ggIG5pY2h0ICBiZXJlaXQsICBNZXJjdXRpb3MgIEJlbmVobWVuICB6dQordmVyZ2Vzc2VuLiAiV2llIGthbm4gZXIgc2ljaCBudXIgc28gZ2VnZW4gZWluZSBEYW1lIHZlcmhhbHRlbi4gQWxzIG9iIGljaCBlaW5lCitIZXJnZWxhdWZlbmUgd2FlcmUsIG1pdCBkZXIgZXIgbWFjaGVuICBrYW5uLCAgd2FzICBlciAgd2lsbC4iICBJaHJlICBFbXBvZXJ1bmcKK3NjaGx1ZyBpbiBXdXQgZ2VnZW4gUGV0ZXIgdW0gdW5kIHNpZSBzY2hsdWcgbWl0IGlocmVtIEZhZWNoZXIgbmFjaCAgaWhtLiAgIlVuZAorZHUgc3RlaHN0IGRhYmVpIHVuZCBoYWVsc3QgTWF1bGFmZmVuIGZlaWwsICB3YWVocmVuZCAgZGVyICBLZXJsICBtaXIgIHp1ICBuYWhlCit0cml0dC4iCisKK1BldGVyIHJpZWIgc2ljaCBkaWUgU3RlbGxlIGFuIHNlaW5lbSBBcm0sIGRpZSBQb2xseSBnZXRyb2ZmZW4gaGF0dGUuICJJY2ggIGhhYgorbml4IGdlc2VoZW4sIGhhYiBpY2ggbmljaC4gSXMgamEgbmljaCwgYWxzIHdhZXIgaWNoIG5pY2ggIGRpcmVrdCAgZGFiZWksICB3ZW5uCittYW4gSWhuZW4gdWViZXJoYXVwdCB6dSBuYWgga29tbWVuIGtvZW5udC4iIFNlaW4gQmxpY2sgcnVodGUgZWluZW4gIEF1Z2VuYmxpY2sKK2ludGVyZXNzaWVydCBhdWYgUG9sbHlzIHN0YXR0bGljaGVyIEZpZ3VyLiAiQWJlciBkZXIgSnVuZyBpcyBpaG5lbiBuaWNoIHp1IG5haAorZ2Vrb21tZW4sIGlzIGVyIG5pY2guIiBFciBuaWNrdGUgbm9jaCBlaW5tYWwgenVyIEJla3JhZWZ0aWd1bmcgIHVuZCAgendpbmtlcnRlCitSb21lbyB6dSwgZGVyIHNpY2ggdW1zdGFlbmRsaWNoIGRpZSBOYXNlIHB1dHp0ZSB1bmQgc2VpbiBHcmluc2VuIGhpbnRlciBzZWluZW0KK1Rhc2NoZW50dWNoIHZlcmJhcmcuCisKK1BvbGx5IGJldHJhY2h0ZXRlIFBldGVyIG5hY2hkZW5rbGljaCwgd2FuZHRlIHNpY2ggZGFubiBhYmVyIFJvbWVvICB6dS4JIkFsc28sCitqdW5nZXIgTWFubi4gU2llIHdpc3NlbiwgZGFzcyBKdWxpYSBtaWNoIHNjaGlja3QuIEljaCBzYWdlIElobmVuIGpldHp0CW5pY2h0LAord2FzIHNpZSBtaXIgZ2VzYWd0IGhhdCwgb2J3b2hsIGljaCBlcyBuaWNodCB2ZXJnZXNzZW4gaGFiZSwgZGVubiBpY2ggIHZlcmdlc3NlCituaWUgZXR3YXMuIEF1Y2ggIGRpZSAgQmVsZWlkaWd1bmdlbiAgZGllc2VzICBGbGVnZWxzICBuaWNodCwgIGRlciAgc28gIHNjaG5lbGwKK3ZlcnNjaHd1bmRlbiBpc3QsIG9obmUgc2ljaCB6dSBlbnRzY2h1bGRpZ2VuLiBXZW5uIFNpZSBlaW4gIGFuc3RhZW5kaWdlciAgTWFubgorc2luZCwgdW5kIGRhcyBob2ZmZSBpY2ggZnVlciBTaWUsIGRlbm4gYW5zb25zdGVuIGJla29tbWVuIFNpZSBlcyAgbWl0ICBtaXIgIHp1Cit0dW4sIGRhbm4gcmF0ZSBpY2ggSWhuZW4sIG1pciB6dSBzYWdlbiwgd2llIElocmUgQWJzaWNodGVuIHNpbmQuICBHbGF1YmVuICBTaWUKK21pciwgaWNoIHdlcmRlIEp1bGlhIHRyb2VzdGVuLCB3ZW5uIFNpZSBtaXQgaWhyIGVpbiAgZmFsc2NoZXMgIFNwaWVsICB0cmVpYmVuLAorYWJlciBTaWUgd2VyZGVuIHNpY2ggaW4gZGllc2VtIEZhbGwgd3VlbnNjaGVuLCBzaWUgaGFldHRlbiBlcyBuaWUgIGFuZ2VmYW5nZW4uCitBbHNvLCB3YXMgc2FnZW4gU2llPyIKKworUm9tZW8gdWViZXJsZWd0ZSBuaWNodCBsYW5nZS4gIldlbm4gU2llIG1pY2ggc28gZnJhZ2VuLCBkYW5uIGxhc3NlbiAgU2llICBtaWNoCitlcmtsYWVyZW4sIGRhc3MuLi4iCisKK1BvbGx5ICBrbGF0c2NodGUgIGluICBkaWUgIEhhZW5kZSAgdW5kCWJlb2JhY2h0ZXRlICBiZWZyaWVkaWd0LCAgIHdpZQkgUm9tZW8KK3p1c2FtbWVuenVja3RlLgorCisiR3V0LCBkYXMgaXN0IHNlaHIgZ3V0LCBkYSB3aXJkIG1laW4gTGFlbW1jaGVuIGF1c3NlciBzaWNoIHNlaW4gdm9yIEdsdWVjay4iCisKKyJJY2ggZ2xhdWJlLCBTaWUgaG9lcmVuIG1pciBuaWNodCB6dS4iCisKKyJXaWVzbz8gSWNoIGhhYmUgYWxsZXMgZ2Vob2VydCwgd2FzIGljaCBob2VyZW4gbXVzcy4gT2RlciBoYWJlbiBTaWUgZXR3YSBuaWNodAorZ2VzYWd0LCBkYXNzIFNpZSBzaWNoIGVya2xhZXJlbj8gU293ZWl0IGljaCB3ZWlzcywgc2FndCBlaW4gYW5zdGFlbmRpZ2VyICBNYW5uCitkb2NoLCBkYXNzIGVyIHNpY2ggZXJrbGFlcnQuIFdpZSBhdWNoIGltbWVyLCB3ZW5uICBTaWUJc2ljaCAgZXJrbGFlcmVuLCAgZGFubgoraGFiZW4gU2llIGxhdXRlcmUgQWJzaWNodGVuLCBhbHNvIGdlYmUgaWNoIG1pY2ggenVmcmllZGVuLiIKKworIkRhLCBqZXR6dCBnaWJ0IGVzIGtlaW5lbiBXZWcgenVydWVjay4iIFVsbyBncmluc3RlIGJvZXNlLgorCitBenp1cm8gc2NodWV0dGVsdGUgYmVkYXVlcm5kIGRlbiBLb3BmIHVuZCBzY2h3aWVnLgorCitBbHMgUm9tZW8gZGllIEJlZGV1dHVuZyB2b24gUG9sbHlzIFdvcnRlbiBkYWVtbWVydGUsIHd1cmRlIGVyLCBzb3ZpZWwgc29sbCAgenUKK3NlaW5lciBFaHJlbnJldHR1bmcgZ2VzYWd0IHNlaW4sIG51ciAgZnVlciAgZWluZW4gIGt1cnplbiAgTW9tZW50ICBibGVpY2guICBFcgorcmFldXNwZXJ0ZSBzaWNoLiAiTmEgIGd1dC4gIEJpdHRlbiAgU2llICBKdWxpYSwgIGhldXRlICBOYWNobWl0dGFnICB6dSAgQnJ1ZGVyCitMYXdyZW5jZSB6dSBrb21tZW4sIGRvcnQgd2VyZGVuIHdpciBoZWlyYXRlbi4iIEVyIGdydWIgaW4gc2VpbmVuICBUYXNjaGVuICB1bmQKK2ZvZXJkZXJ0ZSBlaW4gcGFhciBNdWVuemVuIHp1dGFnZSwgZGllIGVyIFBvbGx5IGluIGRpZSBIYW5kIGRydWVja3RlLiAiVW5kIGRhcworaXN0IGZ1ZXIgU2llLiIKKworIk5laW4sIGRhbmtlLiBJY2ggbmVobWUga2VpbiBHZWxkIGRhZnVlciwgZGFzcyBpY2ggSnVsaWEgZWluZW4gR2VmYWxsZW4gIHR1ZS4iCitBenp1cm8gZmxvZyBlaW5lIFJ1bmRlIHVtIFJvbWVvcyBLb3BmICB1bmQgIGZsdWVzdGVydGUJbGVpc2U6CSJEZW5rICBhbiAgZGllCitIb2NoemVpdHNuYWNodCwgZGFzIGlzdCBkb2NoIGRhcyBCZXN0ZSBhbSBIZWlyYXRlbi4iCisKK1JvbWVvcyBHZXNpY2h0IGxldWNodGV0ZSBhdWYuICJOYSBndXQsIGRhbm4gbmVobWVuIFNpZSAgZXMgIGRhZnVlciwgIGRhc3MgIFNpZQord2FlaHJlbmQgZGVyICBUcmF1dW5nICBpbiAgTGF3cmVuY2VucyAgR2FydGVuICBzdGVoZW4gIHVuZCAgZWluZSAgU3RyaWNrbGVpdGVyCitlbnRnZWdlbiAgIG5laG1lbi4iICAgUG9sbHkgICB3dXJkZSAgIHB1dGVycm90LiAgICJBaCwgICBpY2ggICB2ZXJzdGVoZSwgICBkaWUKK0hvY2h6ZWl0c25hY2h0LiIgIFJhc2NoICB2ZXJiYXJnICBzaWUgIGlociAgR2VzaWNodCAgaGludGVyICBkZW0gIEZhZWNoZXIgIHVuZAora2ljaGVydGUuICJFaW52ZXJzdGFuZGVuLiIgUG9sbHkgYmxpY2t0ZSB6dSBQZXRlciB1bmQgcnVuemVsdGUgZGllIFN0aXJuLiAiSG0sCit3ZXIgd2lyZCBkaWUgTGVpdGVyIGRlbm4gYnJpbmdlbj8gSWNoIG1laW5lLCAgd2lyZCAgZGVyamVuaWdlICBhdWNoICBzY2h3ZWlnZW4KK2tvZW5uZW4/IgorCisiQmVzdGltbXQsIGRhZnVlciB3ZXJkZSBpY2ggc29yZ2VuLiIgUm9tZW8gbGFlY2hlbHRlLgorCisiRGFubiBpc3QgZXMgamEgZ3V0LiBUamEsIGRhcmFuIGhhYmUgaWNoIG5pY2h0IGdlZGFjaHQsIGFscyBzaWUgYWxzICBLaW5kICBhdWYKK2RpZSBOYXNlIGZpZWwgdW5kIG1laW4JTWFubiAgR290dC1oYWItaWhuLXNlbGlnICBzYWd0ZS4uLiIgIFBvbGx5ICB1bnRlcmJyYWNoCitzaWNoLiAiQWNoIGphLCBkYSBnaWJ0IGVzIG5vY2ggZWluZW4ganVuZ2VuIE1hbm4sIGRlciBnZXJhZGUgIHp1ICBCZXN1Y2ggIGlzdC4KK1BhcmlzIGhlaXNzdCBlciwgdmllbGxlaWNodCBoYWJlbiBTaWUgc2Nob24gdm9uIGlobSBnZWhvZXJ0PyBFciBtYWNodCBnYW56IGRlbgorRWluZHJ1Y2ssIGFscyBoYWV0dGUgZXIgTHVzdCwgc2ljaCBiZWkgSnVsaWEgZWluenVuaXN0ZW4gdW5kICB3ZW5uICBlcglzb3dlaXQKK2lzdCBhdWNoIGdsZWljaCBiZWkgaWhyZW0gVmF0ZXIuIEltIEdlbGRiZXV0ZWwsIHdlbm4gU2llICB2ZXJzdGVoZW4sICB3YXMgIGljaAorbWVpbmUuIFdhcyBkZW5rZW4gU2llLCB3aWUgbmllZGxpY2ggYmxhc3MgSnVsaWEgd2lyZCwgd2VubiAgaWNoICBzaWUgIGF1ZnppZWhlCit1bmQgaWhyIHNhZ2UsIGRhc3MgIFBhcmlzICBlaW4JYmVzc2VyZXIgIE1hbm4JaXN0ICBhbHMgIFNpZT8iICBQb2xseSAgZ2Vub3NzCitzaWNodGxpY2ggUm9tZW9zIHZlcndpcnJ0ZW4gR2VzaWNodHNhdXNkcnVjay4gIlNpZSAgd2lsbCAgc28gIGdhciAgbmljaHRzICB2b24KK2VpbmVtIGFuZGVyZW4gTWFubiBob2VyZW4gdW5kIHNpZWh0IHdpcmtsaWNoIGFsbGVybGllYnN0IGF1cywgIHdlbm4gIHNpZSAgc2ljaAordWViZXIgbWljaCBhZXJnZXJ0LiIKKworIkFlaCwgamE/IgorCisiSmEsIGRhcyB0dXQgc2llLiBVbmQgbWVociBub2NoLCBTaWUgd3VlcmRlbiBJaHJlIGhlbGxlICBGcmV1ZGUgIGRhcmFuICBoYWJlbiwKK3dlbm4gU2llIGhvZXJlbiBrb2VubnRlbiwgd2llIHNpZSBpaHJlbSBIdW5kIHZvbiBJaG5lbiBlcnphZWhsdC4gR2FueiBuaWVkbGljaAorcm9sbHQgc2llIGRhYmVpIGRhcyAgUglpbiAgSWhyZW0gIE5hbWVuICB1bmQgIG1hY2h0ICBkYWJlaSAgZGFzICBLbnVycmVuICBkZXMKK0h1ZW5kY2hlbnMgbmFjaC4iIFJvbWVvIHpvZyBlcyB2b3IsICBuaWNodCAgd2VpdGVyICB1ZWJlciAgZGllICBBZWhubGljaGtlaXRlbgorendpc2NoZW4gc2VpbmVtIE5hbWVuIHVuZCBkZW0gS251cnJlbiBlaW5lcyBTY2hvc3NodWVuZGNoZW5zIG5hY2h6dWRlbmtlbiAgdW5kCitsYWVjaGVsdGUgbm9jaCBlaW4gTWFsIG1pdCBlcnp3dW5nZW5lcglGcmV1bmRsaWNoa2VpdC4gICJXaWUgIGRlbSAgYXVjaCAgc2VpLgorQml0dGUgcmljaHRlbiBTaWUgSnVsaWEgbWVpbmUgR3J1ZXNzZSBhdXMuIgorCisiTWVociBuaWNodD8iCisKKyJNZWhyIHNhZ2UgaWNoIGlociBkYW5uIGhldXRlIE5hY2h0LCBuYWNoZGVtIHdpciB2ZXJoZWlyYXRldCBzaW5kLiIKKworV2llZGVyIHd1cmRlIFBvbGx5IHJvdC4gIk9oLiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTMgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA1OTkyCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTMKQEAgLTAsMCArMSwxMjIgQEAKK0RFUiBaV0VJVEUgQUtUCisJICBESUUgRlVFTkZURSBTWkVORQorCitVbG8gdW5kIEF6enVybyBoYXR0ZW4gc2ljaCBpbSBHYXJ0ZW4gZGFtaXQgdmVyZ251ZWd0LCBKdWxpYSB6dSBiZW9iYWNodGVuLgorCisiSWNoIHNpdHplIHdpZSBhdWYgS29obGVuLiIsIGJla2xhZ3RlIHNpY2ggSnVsaWEgYmVpIFVsby4KKworIktyYWguIiwgbWFjaHRlbiBVbG8gdW5kIEF6enVybyB3aWUgYXVzIGVpbmVtIFNjaG5hYmVsLgorCitWZXJ3aXJydCBibGlja3RlIEp1bGlhIHp1IGlobmVuIGhvY2guICJMZXR6dGUgTmFjaHQga29ubnRldCAgaWhyICByZWRlbi4iICBTaWUKK3p1Y2t0ZSBkaWUgU2NodWx0ZXJuLiAiQWJlciBsZXR6dGUgTmFjaHQgd2FyIGphIG9obmVoaW4gbmljaHRzIHNvLCB3aWUgZXMgc2Vpbgorc29sbHRlLiBBbGxlcyB3YXIgIGdhbnouLi4iICBTaWUgIHpvZWdlcnRlLiAgIi4uLmdhbnogIHZlcnphdWJlcnQuIiAgU2ljaHRsaWNoCitlcmZyZXV0IHVlYmVyIGlocmUgcG9ldGlzY2hlIFdvcnR3YWhsIHJpZWYgc2llIGlocmVuICBIdW5kICB1bmQgIHNwaWVsdGUgIGVpbmUKK1plaXQgbGFuZyBtaXQgaWhtLiAiUG9sbHkgbWFjaHQgbWljaCBub2NoIGdhbnogdmVycnVlY2t0LiIsIGtsYWVydGUgSnVsaWEgIGRlbgorSHVuZCBhdWYuICJLYW5uc3QgZHUgZGlyIHZvcnN0ZWxsZW4sIGRhc3Mgc2llICBmdWVyICBlaW5lbiAgc2ltcGxlbiAgQm90ZW5nYW5nCitkcmVpIFN0dW5kZW4gYnJhdWNodD8iCisKK1N0YXR0IGVpbmVyIEFudHdvcnQgcm9sbHRlIHNpY2ggZGVyIEh1bmQgYXVmIGRlbiBSdWVja2VuIHVuZCB0YXQsIHdhcyBIdW5kZSBhbQorYmVzdGVuIGtvZW5uZW46IEVyIGhlY2hlbHRlLgorCitIdW5kZSwgbGllYmUgTGVzZXJpbiwgbGllYmVyICBMZXNlciwgIGdlaG9lcmVuCWluICBlaW5lICBHZXNjaGljaHRlICB3aWUgIGRlcgordW5zZXJlbiBlaW5mYWNoIGRhenUuIFNpZSBzaW5kIGRhcyBTYWx6IGluIGRlciBTdXBwZS4KKworV2VyICBqZW1hbHMgIExpZWJlc2t1bW1lciAgaGF0dGUsICB3ZWlzcyAgZGllICBHZXNlbGxzY2hhZnQgIGVpbmVzICBIdW5kZXMgIHp1CitzY2hhZXR6ZW4sIGRlbm4gbWl0IGlocmVuIHNlZWxlbnZvbGxlbiBicmF1bmVuIEF1Z2VuIGhhZW5nZW4gIHNpZSAgZ2ViYW5udCAgYW4KK2RlbiBMaXBwZW4gaWhyZXMgRnJhdWNoZW5zIG9kZXIgSGVycmNoZW5zIHVuZCBzY2hlaW5lbiB3YWhyaGFmdGlnICBqZWRlcyAgV29ydAorenUgdmVyc3RlaGVuLiBEaWVzIGlzdCBzZWxic3R2ZXJzdGFlbmRsaWNoIGVpbglUcmljaywJbWl0ICBkZW0gIEh1bmRlICBpaHJlbgorTWVuc2NoZW4gZGF6dSBicmluZ2VuLCBpaG5lbiBlaW5lbiBiZXNvbmRlcnMgc2Nob2VuZW4gS25vY2hlbiAgenUgIHNwZW5kaWVyZW4uCitEZW5ub2NoIGZhbGxlbiB3aXIgTWVuc2NoZW4gaW1tZXIgd2llZGVyICBhdWYgIEh1bmRlICBoZXJlaW4sICBkZW5uICB3aXIgIHNpbmQKK2xlaWNodCB6dSBkb21lc3RpemllcmVuLgorCitEaWUgZ2FuemUgVGllcndlbHQgem9sbHQgZGVuIEh1bmRlbiBmdWVyIGlocmVuIEVyZm9sZyAgbWl0ICBkZXIgIFphZWhtdW5nICBkZXMKK01lbnNjaGVuIGdyb3NzZW4gUmVzcGVrdC4gRGllIGVpbnppZ2VuIFRpZXJlLCBkaWUgZGVuICBIdW5kZW4gIGRpZXNlICBMZWlzdHVuZworYWJzcHJlY2hlbiwgIHNpbmQgIGRpZQlLYXR6ZW4sICBkb2NoICBkYXMgIGxpZWd0ICBlaGVyICBkYXJhbiwgIGRhc3MJS2F0emVuCitwcmluemlwaWVsbCBuaWVtYW5kZW4gcmVzcGVrdGllcmVuLiBKdWxpYSB0YWV0c2NoZWx0ZSBpaHJlbSBIdW5kIGdlaG9yc2FtICBkZW4KK0JhdWNoLiAiV2VubiBQb2xseSBibG9zcyBzY2huZWxsZXIgd2FlcmUuIEljaCBoYWx0ZSBlcyBrYXVtIG5vY2ggYXVzLiIKKworRGFzICBLbmFyemVuICB1bmQgIFF1aWV0c2NoZW4gIGRlcyAgR2FydGVudG9yZXMgIGdhYiAgZGllICBBbmt1bmZ0ICAgd2ljaHRpZ2VyCitOZXVpZ2tlaXRlbiBiZWthbm50LCBub2NoIGJldm9yIFBvbGx5IGhpbmR1cmNoIHRyYXQuIEp1bGlhIHNwcmFuZyBhdWYgd2llICB2b24KK2VpbmVyIEJyZW1zZSBnZXN0b2NoZW4gdW5kIHJhbm50ZSBhdWYgUG9sbHkgenUuICJQb2xseSwgbGllYmUgUG9sbHkhICBOYSwgIHNhZworc2Nob24sIHdhcyBoYXQgZXIgIGdlc2FndD8gIFdhcyAgc29sbCAgaWNoICBtYWNoZW4/ICBIYXN0ICBkdSAgaWhuICB1ZWJlcmhhdXB0CitnZXRyb2ZmZW4/IFJlZCBkb2NoISIKKworUG9sbHkgc2NobmF1ZnRlLiAiTnVuIG1hbCBsYW5nc2FtLiBTZXR6IGRpY2ggbGllYmVyIGVyc3QgZWlubWFsIGhpbi4iCisKKyJJY2gga2FubiBtaWNoIG5pY2h0IHNldHplbiwgYmV2b3IgZHUgbWlyIG5pY2h0IGdlc2FndCBoYXN0LCB3YXMgbG9zIGlzdC4iCisKKyJVbmQgaWNoIGthbm4gZGlyIG5pY2h0cyBzYWdlbiwgc29sYW5nZSBpY2ggbm9jaCBzbyAgYXVzc2VyICBBdGVtICBiaW4uICBKZXR6dAorc2V0eiBkaWNoIGhpbiwgZHUgbWFjaHN0IG1pY2ggdmVycnVlY2t0LiBXaWUgc29sbCBpY2ggZGVubiBMdWZ0IGhvbGVuIGtvZW5uZW4sCit3ZW5uIER1IHNvIGhlcnVtc3ByaW5nc3Q/IgorCitKdWxpYSBiZXRyYWNodGV0ZSBpaHJlIEFtbWUga3JpdGlzY2guICJTbyBzZWhyIGthbm5zdCBkdSBkb2NoIGdhciBuaWNodCBhdXNzZXIKK0F0ZW0gc2Vpbiwgd2VubiBkdSBtaXIgc2FnZW4ga2FubnN0LCBkYXNzIGR1IGF1c3NlciBBdGVtIGJpc3QuIgorCisiRGFzIHZlcnN0ZWhzdCBkdSBub2NoIG5pY2h0LiIgUG9sbHkgaG9sdGUgdGllZiBMdWZ0IHVuZCBkb25uZXJ0ZTogIlNldHogIGRpY2gKK2hpbiEiIEp1bGlhIHBsdW1wc3RlIGlucyBHcmFzLgorCisiU28gZG9jaCBuaWNodCwgZHUgbWFjaHN0IGphIEZsZWNrZW4gaW4gZGVpbiAgS2xlaWQuIiAgUG9sbHkgIHNldWZ6dGUuICAiS2luZCwKK0tpbmQsIHdpcnN0IGR1IGRlbm4gbmllIGVyd2FjaHNlbj8iCisKK1dvcnRsb3Mgc3RhbmQgSnVsaWEgYXVmIHVuZCBsaWVzcyBzaWNoIGF1ZiBlaW5lciBCYW5rIG5pZWRlci4gICJKZXR6dCAgYmVzc2VyPworS2FubnN0IGR1IGpldHp0IGVuZGxpY2ggcmVkZW4/IgorCitQb2xseSBsYWVjaGVsdGUuICJKYSwgamV0enQga2FubiBpY2ggcmVkZW4uIERhIGhhc3QgZHUgZGlyIGphICBlaW5lbiAgc2Nob2VuZW4KK0dhbGFuIGF1c2dlc3VjaHQsIEp1bGlhLiBBbHNvLCBpY2ggd2lsbCBpaG4gamEgbmljaHQgc2NobGVjaHRlciBtYWNoZW4gYWxzICBlcgoraXN0LCBhYmVyIGljaCBtdXNzIHNjaG9uIHNhZ2VuLCBlciBoYXQgZWluIHBhYXIgIHNlaHIgIHVuZXJmcmV1bGljaGUgIEZyZXVuZGUuCitPYndvaGwgZXIgZWluZW4ga25hY2tpZ2VuIC4uLiBHZWlzdCBoYXQuIEtuYWNraWcgaW0gU2lubmUgdm9uIGZyaXNjaCwgd2VubiAgZHUKK3ZlcnN0ZWhzdCwgd2FzIGljaCBtZWluZS4gRXIgaXN0IG5vY2ggbmljaHQgZ2FueiB0cm9ja2VuLiAgSGludGVyICBkZW4JT2hyZW4uCitTbywgamV0enQgZXJ6YWVobCBhYmVyLCB3YXMgZHUgaGV1dGUgZ2VmcnVlaHN0dWVja3QgaGFzdC4iCisKK1VsbyBncmluc3RlIGJyZWl0IGF1ZiAgaWhyZW0gIEFzdC4gICJQb2xseSAgdmVyc3RlaHQgIGVzICB3aXJrbGljaCwgIEp1bGlhICB6dQordHJpZXplbi4iCisKK0F6enVybywgIGRlciAgZmFzemluaWVydCAgYXVmICBQb2xseXMgIHJvdGVzICBHZXNpY2h0ICBibGlja3RlCXVuZCAgYXVmICAgZGVuCitTY2hsYWdhbmZhbGwgd2FydGV0ZSwgbmlja3RlIG51ci4KKworSnVsaWEsIGRpZSB3dXNzdGUsIHdhcyBQb2xseSBiZWFic2ljaHRpZ3RlLCBzZXVmenRlIHRpZWYuICJEYXMgd2Vpc3MgIGljaCAgdW5kCituaWNodHMuIgorCisiTmljaHRzPyBLaW5kLCBkdSBmYWVsbHN0IG1pciBqYSBnYW56IHZvbSBGbGVpc2NoLiBEYXMgIGlzdCAgYWJlciAgbmljaHQgIGd1dCwKK3dlbm4gUm9tZW8gc2ljaCBhbiBkaXIgYmxhdWUgRmxlY2tlbiBob2x0LiIKKworSnVsaWEgc2V0enRlIGVpbiB1bnNjaHVsZGlnZXMgR2VzaWNodCBhdWYuICJIb2x0IGVyIHNpY2ggZGVubiBibGF1ZSBGbGVja2VuPyIsCitmcmFndGUgc2llIHNjaGVpbmhlaWxpZy4KKworQXp6dXJvIG5pY2t0ZS4gIlR1dCBlci4iCisKK1BvbGx5IGtuaWZmIEp1bGlhIGluIGRpZSBTZWl0ZS4gIkFsc28sIHdlbm4gZHUgZXMgZ2VuYXUgd2lzc2VuIHdpbGxzdC4uLiIKKworIkphPyIKKworIkFsc28sIGRlaW4ganVuZ2VyIEZyZXVuZCBzYWd0LCBzbyB3aWUgZXMgZWluIGFuc3RhZW5kaWdlciBNYW5uIHNhZ2VuICBzb2xsdGUsCit3ZW5uIGVyIGF1ZiBzaWNoIGhhZWx0IHVuZCBhdXNzZXJkZW0gbm9jaCBkaWUgQ2hhbmNlIHNlaW5lcyBMZWJlbnMgIGJla29tbXQuLi4KK1dvIGlzdCBlaWdlbnRsaWNoIGRlaW5lIE11dHRlcj8iCisKKyJBbHNvLCBQb2xseSwgZGFzIGlzdCBqYSBudW4gc2ljaGVybGljaCBuaWNodCBzZWluZSAgQW50d29ydCwgIG9kZXI/ICAnV28gIGlzdAorZGVpbmUgTXV0dGVyJyIgSnVsaWEgc2NodWV0dGVsdGUgZGVuIEtvcGYuCisKKyJEdSBsaWViZXMgYmlzc2NoZW4sIGR1IGJpc3QgZ2FueiBzY2hvZW4gaGVpc3MuIEF1ZiBkaWUgIEFudHdvcnQsICBtZWluZSAgaWNoLgorV2VubiBkdSB2ZXJzdGVoc3QsIHdhcyBpY2ggbWVpbmUuIEFsc28sIGVyIHNhZ3QsIGdhbnogdW5kIGdhci4uLiIKKworVWxvIHN0b2VobnRlIG1pdCBKdWxpYSBpbSBDaG9yLgorCisiRHUgc29sbHN0IGhldXRlIG5hY2htaXR0YWcgaW4gZGllIEthcGVsbGUgZGllc2VzIE1pbm9yaXRlbiAga29tbWVuLiAgTGF3cmVuY2UKK2hlaXNzdCBlci4gVW5kIGRhIGJla29tbWUgaWNoIGVpbmVuIFJpbmcgdW5kIGR1IGVpbmUgTGVpdGVyLiIgU2llICBzY2h1ZXR0ZWx0ZQorZGVuIEtvcGYuICJOZWluLCB1bWdla2VocnQ6IER1IGJla29tbXN0IGRlbiBSaW5nIHVuZCBpY2ggZGllIExlaXRlciAgZnVlciAgZGllCitIb2NoemVpdHNuYWNodC4iCisKK0p1YmVsbmQgaHVlcGZ0ZSBKdWxpYSB1bSBQb2xseSBoZXJ1bSB1bmQgem9nIHVlYmVybXVldGlnIGFuICBBenp1cm9zICBTY2h3YW56LgorSWhyIEh1bmQsIGRlciBpaHJlIEZyZXVkZSBtaXNzdmVyc3RhbmQsIGtuaWZmIFBvbGx5IGluIGRpZSBXYWRlICB1bmQgIGhhbmRlbHRlCitzaWNoIGVpbmVuIFRyaXR0IGVpbi4KKworQXVmIFBvbGx5cyB2ZXJ3aXR0ZXJ0ZXMgR2VzaWNodCBzdGFobCBzaWNoIGVpbiBMYWVjaGVsbi4gIlNpZWh0IGdhbnogIHNvICBhdXMsCitLaW5kLCBhbHMgZmllbGVzdCBkdSBnbGVpY2ggYXVmIGRlbiBSdWVja2VuLiIKKworIkVyc3QgaGV1dGUgYWJlbmQuIiwgdmVyc2V0enRlIEF6enVyby4KKworIkhhdXB0c2FjaGUsICBzaWUgIGZhZWxsdC4iICBQb2xseSAgZ3JpbnN0ZSAgdW5kICBpaHJlICBXYW5nZW4gIGJla2FtZW4gIGVpbmVuCittYWVkY2hlbmhhZnQgcm9zaWdlbiBTY2hpbW1lci4gIkFlaCwgbmljaHQgaGVyZWluLCBtZWluZSBpY2ggbmF0dWVybGljaC4iCisKKyJOYXR1ZXJsaWNoLiIsIHN0aW1tdGUgQXp6dXJvIHp1IHVuZCBzY2hhZmZ0ZSBlcywgdm9lbGxpZyBlcm5zdCB6dSBibGVpYmVuLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxNCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNmNhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxNApAQCAtMCwwICsxLDkzIEBACitERVIgWldFSVRFIEFLVAorCSAgRElFIFNFQ0hTVEUgU1pFTkUKKworSW4gamVuZXIgbXl0aGlzY2hlbiBaZWl0IHdhcmVuIGhlaW1saWNoZSBIb2NoemVpdGVuIG5pY2h0IHNlbHRlbiwgIHNpZQloYXR0ZW4KK2RlbiBWb3J0ZWlsLCBkYXNzIGRhcyBQYWFyIG5pY2h0ICB6dXNhbW1lbiAgbGVidGUuICBOYXR1ZXJsaWNoCWVyc3BhcnRlICBlaW5lCitoZWltbGljaGUgIEhvY2h6ZWl0ICBhdWNoICBkaWUJS29zdGVuCWZ1ZXIgIGVpbiAgRmVzdC4gIEFsbGVyZGluZ3MgIHdhciAgZGllCitIb2NoemVpdHNuYWNodCB1bmFiZGluZ2JhcmVyIEJlc3RhbmR0ZWlsIGRlciBFaGU6IE9obmUgSG9jaHplaXRzbmFjaHQgZ2FsdCBkaWUKK0VoZSBuaWNodCBhbHMgZ2VzY2hsb3NzZW4uICBSb21lbyAgdW5kCUp1bGlhICB3YXJlbiAgZWluZSAgQXVzbmFobWUgIHZvbiAgZGVyCit1ZWJlcndpZWdlbmRlbiBNZWhyemFobCBkZXIgaGVpbWxpY2hlbiBIb2NoemVpdGVuOiBEaWUJbWVpc3RlbiAganVuZ2VuICBQYWFyZQordmVybGVndGVuIGRpZSBIb2NoemVpdHNuYWNodCB2b3IgdW5kIHNwYXJ0ZW4gYXVmIGRpZXNlIFdlaXNlIHNvZ2FyIGRpZSBiZWkgZGVyCitIb2NoemVpdCB1ZWJsaWNoZSBTcGVuZGUgYW4gZGllIEtpcmNoZS4KKworTGF3cmVuY2UgIHN0YW5kICBuZWJlbglkZXIgIFR1ZXIgIHNlaW5lciAga2xlaW5lbiAgS2FwZWxsZSAgdW5kICAgYmV0cmFjaHRldGUKK25hY2hkZW5rbGljaCBSb21lbywgZGVyIGRlbiBIdWVnZWwgaGluYXVmc3R1ZXJtdGUuCisKKyJFciByZW5udCwgYWxzIHNlaWVuIGFsbGUgVGV1ZmVsIGRlciBIb2VsbGUgaGludGVyIGlobSBoZXIuICBEYWJlaSAgaXN0ICBKdWxpYQorbm9jaCBnYXIgbmljaHQgaGllci4iIEF6enVybyByZWNrdGUgZ2VtYWVjaGxpY2ggZGllIEZsdWVnZWwuCisKK0xhd3JlbmNlLCBkZXIgd2llIHNlaW4gZ3Jvc3NlcyBWb3JiaWxkLCBkZXIgaGVpbGlnZSAgRnJhbnppc2t1cywgIHNpY2gJbmljaHRzCitkYWJlaSBkYWNodGUsIG1pdCBWb2VnZWxuIHp1IHJlZGVuLCBkcm9odGUgQXp6dXJvIG1pdCBkZW0gRmluZ2VyLiAgIlVuYmVydWZlbiEKK0p1bGlhIGlzdCBkb2NoIGVpbiBuZXR0ZXMgTWFlZGNoZW4uIgorCisiRGFzIHNpbmQgc2llIHZvciBkZXIgSG9jaHplaXQgYWxsZS4iLCBzdGVsbHRlIEF6enVybyBmZXN0LgorCisiS29tbSBzY2hvbiwgZGFzIHNhZ3N0IGR1IGpldHp0IG51ciwgd2VpbCBkZWluZSBGcmF1IG5pY2h0IGhpZXIgaXN0LiIgTGF3cmVuY2UKK2dyaW5zdGUuCisKKyJOYXR1ZXJsaWNoLiBTaWUgaXN0IGphIGF1Y2ggc2Nob24gbWl0IG1pciB2ZXJoZWlyYXRldC4iCisKK0xhd3JlbmNlIGJ1ZWNrdGUgc2ljaCB1bmQgenVwZnRlIGVpbmVuIFJlZ2Vud3VybSBhdXMgZGVtIHNhZnRpZ2VuICBCb2RlbiwgIGRlbgorZXIgQXp6dXJvIHJlaWNodGUuICJXbyBpc3QgZWlnZW50bGljaCBkZWluZSBGcmF1PyIKKworIkJlaSBKdWxpYS4gU2llIG1laW50LCBlaW4gTWFlZGNoZW4gc29sbHRlIGVpbmUgQnJhdXRqdW5nZmVyIGhhYmVuLiIKKworTGF3cmVuY2Ugbmlja3RlLiAiRWluIGtsdWdlciBHZWRhbmtlLiIKKworQXp6dXJvIGJlZGFjaHRlIGRlbiBSZWdlbnd1cm0gbWl0IGVpbmVtIGxhbmdlbiBCbGljay4gIkljaCB3ZWlzcyAgbmljaHQuICBXYXMsCit3ZW5uIHNpZSBkZW4gQnJhdXRzdHJhdXNzIGZhZW5ndD8iCisKKyJEYXMga2FubiBzaWUgb2huZSBIYWVuZGUgbmljaHQsIG1laW4gc2Nod2FyemVyIEZyZXVuZC4iLCAgdHJvZXN0ZXRlICBMYXdyZW5jZQoraWhuLgorCisiU2llIHdpcmQgZGlyIGVyaGFsdGVuIGJsZWliZW4uIgorCisiV2FocnNjaGVpbmxpY2guIiwgc3RpbW10ZSBBenp1cm8gdHJ1ZWJzaW5uaWcgenUuCisKKyJOdW4gbGFjaCAgZG9jaCAgbWFsLiIgIExhd3JlbmNlICBzdGllc3MgIEF6enVybyAgZnJldW5kc2NoYWZ0bGljaCAgYW4uICAiRWluZQorSG9jaHplaXQgaXN0IGVpbmUgZnJvZWhsaWNoZSBBbmdlbGVnZW5oZWl0LiIKKworIlNvbGFuZ2Ugc2llIGRhdWVydC4gRGFuYWNoIGtvbW10IGRhcyBWZXJoZWlyYXRldC1TZWluLiIKKworUm9tZW8sIGRlciBBenp1cm9zIGxldHp0ZSBXb3J0ZSBnZWhvZXJ0IGhhdHRlLCBsYWVjaGVsdGUgIHRvZXJpY2h0LiAgIkRhcyAgaXN0Citkb2NoIGRhcyBiZXN0ZSBhbiBkZXIgZ2FuemVuIEhlaXJhdGVyZWk6IERhbmFjaCAga2FubiAgc2llICBtaXIgIG5pZW1hbmQgIG1laHIKK3dlZ25laG1lbi4iCisKKyJFYmVuLCBtZWluIEp1bmdlLCBlYmVuLiIsIHZlcnNldHp0ZSBBenp1cm8uCisKK0F1Y2ggTGF3cmVuY2UgbWVpbnRlLCBzZWluZW0gQW10IGFscyBTZWVsc29yZ2VyICBnZXJlY2h0ICB3ZXJkZW4gIHp1ICBtdWVzc2VuLgorIkVpbmVuIGdpYnQgZXMsIGRlciBkaXIgYWxsZXMgd2VnbmVobWVuIGthbm4uIiwgIG1laW50ZSAgZXIgIHVuZCAgZGV1dGV0ZSAgenVtCitIaW1tZWwuCisKK1JvbWVvcyBCbGljayBmb2xndGUgTGF3cmVuY2VucyBGaW5nZXIgdW5kIGdld2FocnRlIGVpbmUgZHVua2xlIFdvbGtlLiAiQWNoLCBzbworZWluIGJpc3NjaGVuIFJlZ2VuIHdpcmQgSnVsaWEgc2Nob24gbmljaHQgYWJoYWx0ZW4uIgorCitUYXRzYWVjaGxpY2gga2FtIEp1bGlhIGRlbiBIYW5nIGhlcmF1ZiwgZ2Vmb2xndCB2b24gZWluZXIga2V1Y2hlbmRlbiBVbG8uICJTbywKK2hpZXIgYmluIGljaC4iCisKK1JvbWVvcyBBdWdlbiBzdHJhaGx0ZW4gdmVyZGFlY2h0aWcgaXJyZSwgYWxzIGVyIHNpZSBiZXRyYWNodGV0ZS4gIldpZSAgaHVlYnNjaAorZHUgYXVzc2llaHN0LiIKKworSnVsaWEgbGFlY2hlbHRlIGdlaXN0bG9zLiAiV2VyIGlzdCBkZW5uICBkZXIgIGh1ZWJzY2hlICBCdXJzY2hlICBoaWVyLCAgQnJ1ZGVyCitMYXdyZW5jZT8iCisKK0F6enVybyB2ZXJkcmVodGUgZGllIEF1Z2VuLiAiTmEsIHNpZWggenUsIGRhc3MgZHUgZmVydGlnIHdpcnN0LCBMYXdyZW5jZSwgIGljaAoraGFsdGUgZXMgbmljaHQgbWVociBhdXMhIgorCitVbG8gbGllc3Mgc2ljaCBhdWYgZWluZW0gQXN0IG5pZWRlciB1bmQgd2lzY2h0ZSBzaWNoIG1pdCBkZXIgRmx1ZWdlbHNwaXR6ZSBkaWUKK1RyYWVuZW4gYWIuICJBY2gsIEhvY2h6ZWl0ZW4gc2luZCBzbyBydWVocmVuZCEiCisKK0F6enVybywgaW1tZXIgbm9jaCBuaWVkZXJnZXNjaGxhZ2VuLCBuaWNrdGUuICJKYSwgbWlyIGtvbW1lbiAgYXVjaCAgamVkZXMgIE1hbAorZGllIFRyYWVuZW4sIHdlbm4gaWNoIHNlaGUsIGRhc3MgamVtYW5kIGxlYmVuc2xhZW5nbGljaCBiZWtvbW10LiIKKworIkotVS1MLUktQSwgaWNoIGxpZWIgZGljaCBzbyEiLCB0cmFlbGxlcnRlIFJvbWVvLgorCisiRGFzIG1hY2h0IGVyIG51ciwgdW0gbWljaCB6dSBhZXJnZXJuLiIsIGdyb2xsdGUgQXp6dXJvLgorCisiSWNoIHNlaCBlaW4gTGljaHQuLi4iLCBzYW5nIG51biBhdWNoIEp1bGlhLgorCitBenp1cm8sIGRlciBlcyBoYXNzdGUsIHdlbm4gZGllIE1lbnNjaGVuIGRlbiBmYWxzY2hlbiBUZXh0IGF1ZnNhZ3RlbiwgIGdyaW5zdGUKK25pZWRlcnRyYWVjaHRpZy4gIi4uLiBpbSBIYXVzZSBGcmFua2Vuc3RlaW4uIiwgdm9sbGVuZGV0ZSBlciAgZGllICBaZWlsZSAgZnVlcgorSnVsaWEuIFVlYmVybGFzc2VuIHdpciBkaWUgTGllYmVuZGVuIGpldHp0IGVpbmUgV2VpbGUgc2ljaCBzZWxic3QgIHVuZAl6aWVoZW4KK3VucyBkaXNrcmV0IHp1cnVlY2suCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTE1IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5ZmJhYwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTE1CkBAIC0wLDAgKzEsNDE0IEBACitERVIgRFJJVFRFIEFLVAorCSAgRElFIEVSU1RFIFNaRU5FCisKK0JlbmV2b2xpbyB3aXNjaHRlIHNpY2ggZGVuIFNjaHdlaXNzIHZvbiBkZXIgIFN0aXJuICB1bmQgIHNhaCAgdW5nbHVlY2tsaWNoICB6dQorTWVyY3V0aW8gaGludWViZXIsIGRlciBtaXQgaG9jaHJvdGVtIEdlc2ljaHQgbmViZW4gaWhtIGhlcm1hcnNjaGllcnRlLiAiRXMgaXN0Cit6dSBoZWlzcywgIHVtICBoaWVyICBkcmF1c3NlbiAgaGVydW16dWxhdWZlbiwgIE1lcmN1dGlvLiAgQXVzc2VyZGVtICBzaW5kICBkaWUKK0NhcHVsZXRlbiBsb3MuIgorCisiQW5nc3Q/IiwgZnJhZ3RlIE1lcmN1dGlvLgorCisiTmVpbiwgYWJlciBlcyBpc3QgenUgd2FybSBmdWVyIFBydWVnZWxlaWVuLiIKKworIkh1Y2g/IiBNZXJjdXRpbyBsZWd0ZSBCZW5ldm9saW8gZGllIEhhbmQgYW4gZGllIFN0aXJuLiAiRHUgIGJpc3QgIGRvY2ggIG5pY2h0CitldHdhIGtyYW5rPyBTb25zdCBnaWJ0IGVzIGRvY2ggbmljaHRzLCB3YXMgZGljaCB2b24gZWluZXIgenVlbmZ0aWdlbiBQcnVlZ2VsZWkKK2FiaGFsdGVuIGthbm4uIgorCitXaWVkZXIgenVlY2t0ZSBCZW5ldm9saW8gc2VpbiBUYXNjaGVudHVjaC4gIkRvY2gsIEhpdHplLiIKKworIkFjaCwga29tbSBzY2hvbiwgYXVzZ2VyZWNobmV0IGR1IHdpbGxzdCBqZXR6dCBpbnMgSGF1cyEiCisKKyJXaWVzbyBhdXNnZXJlY2huZXQgaWNoPyIKKworIk5hLCBzb25zdCBiZWd1Y2tzdCBkdSBkaXIgZGVpbiBNZXNzZXIgdW5kIHNhZ3N0OiAnV2FsdGUgSHVnbywgZGFzcyAgaWNoICBkaWNoCitudXIgenVtIGVzc2VuIGJyYXVjaGUuJyBVbmQgendhciBsYXV0IHVuZCB2ZXJuZWhtbGljaCwgZGFtaXQgZXMgYXVjaCBqYSAgamVkZXIKK1JhdWZib2xkIGhvZXJ0IHVuZCB3ZWlzcywgZGFzcyBkdSBhdWYgU3RyZWl0IGF1cyBiaXN0LiIKKworIlNvIHNjaGxpbW0gYmluIGljaCBkb2NoIGdhciBuaWNodC4iCisKK0hhZXR0ZSBNZXJjdXRpbyB1ZWJlciB1bnNlcmUgV2VsdCBCZXNjaGVpZCBnZXd1c3N0LCAgc28gIGhhZXR0ZSAgZXIgIEJlbmV2b2xpbworc2ljaGVybGljaCBhbHMgR3Jvc3NtYWNodCBiZXplaWNobmV0LCBkZW5uIG51ciBHcm9zc21hZWNodGUgc2luZCBpbiBkZXIgIExhZ2UsCitXYWZmZW4gaW4gU2ljaHR3ZWl0ZSBhbmRlcmVyICBHcm9zc21hZWNodGUgIGF1Znp1c3RlbGxlbiAgdW5kICBtaXQgIHVuYmV3ZWd0ZW0KK0dlc2ljaHQgenUgc2FnZW46ICJXaXIgYnJhdWNoZW4gZGllc2UgV2FmZmVuIGVpZ2VudGxpY2ggZ2FyIG5pY2h0LCB3ZWlsIHdpciBqYQorZnJpZWRsaWNoIHNpbmQsIHdpciB3b2xsZW4gc2llIGV1Y2ggbnVyIHplaWdlbiwgd2VpbCBzaWUgc28gaHVlYnNjaCBzaW5kLiIKKworIk5laW4sIG5hdHVlcmxpY2ggbmljaHQuIEVyaW5uZXJzdCBkdSBkaWNoIG5vY2ggYW4gZGVuIEtlcmwsIGRlbiAgZHUgIHZlcmhhdWVuCitoYXN0LCB3ZWlsIGVyIGFuIGRlaW5lciBSb3NlIHJvY2g/IgorCisiRGFzIG11c3N0ZSBpY2ggZG9jaCEgUm9zZSBpc3QgZWluIGFuc3RhZW5kaWdlcyBNYWVkY2hlbi4iCisKKyJJY2ggbWVpbmUgbmljaHQgZGllIFJvc2UgaW4gZGVpbmVtIEJldHQsIHNvbmRlcm4gZGllIGluIGV1cmVtIFZvcmdhcnRlbi4iCisKKyJIbXBmLiIsIG1hY2h0ZSBCZW5ldm9saW8uCisKK0luIE1lcmN1dGlvcyBBdWdlbiB0YW56dGVuIGtsZWluZSBUZXVmZWxjaGVuLCBhbHMgZXIgc2VpbmVuICBCbGljayAgdWViZXIgIGRlbgorUGxhdHogc2Nod2VpZmVuIGxpZXNzLiAiR3VjayBtYWwsIGRhIGlzdCBUeWJhbHQuIgorCisiVWgtb2guIgorCitUeWJhbHQgdHJhdCBhdWYgZGllICBiZWlkZW4gIHp1ICB1bmQgIGdyaW5zdGUgIGhvZWhuaXNjaCwgIGFscwllciAgQmVuZXZvbGlvcworc2Nod2Vpc3N1ZWJlcnN0cm9lbXRlcyBHZXNpY2h0IHNhaC4gIldpZSBzYWd0ZSBtZWluZSBHcm9zc211dHRlciBzbyAgdHJlZmZlbmQ6CisnU2NobGVjaHRlcyBGbGVpc2NoIHNjaGFldW10LiciCisKK0JlbmV2b2xpbyB3YW5kdGUgc2ljaCB6dW0gR2VoZW4uICJLb21tLCBNZXJjdXRpbywgaGllciBoZXVsdCBlaW4gV29sZiBkZW4gTW9uZAorYW4sIGRhcyBpc3QgbWlyIHp1IGxhdXQuIgorCisiTWl0bmljaHRlbiwgQmVuZXZvbGlvLCB3ZW5uIGRlciBndXRlIFR5YmFsdCBldHdhcyB2b24gdW5zIHdpbGwsIHNvbGwgZXIgIGZ1ZXIKK3VucyB0YW56ZW4uIgorCisiV2FzIGZ1ZXIgZWluZSBwcmFlY2h0aWdlIEhvY2h6ZWl0c2ZlaWVyLiIsIGtvbW1lbnRpZXJ0ZSBBenp1cm8gYml0dGVyLgorCisiU28gc2luZCBkaWUgTWVuc2NoZW4uIiBVbG8gd2FyIG5hY2hzaWNodGlnIHVuZCBtaWxkZSBnZXN0aW1tdC4KKworTWVyY3V0aW8gZmlzY2h0ZSBpbiBzZWluZXIgIEhvc2VudGFzY2hlICBuYWNoICBlaW5lciAgTXVlbnplLCAgZGllICBlcglUeWJhbHQKK3p1d2FyZi4gIk1hY2ggRmF4ZW4sIEFsdGVyLiIKKworIkZheGVuIGthbm5zdCBkdSBoYWJlbiEiIE51biBzY2hhZXVtdGUgYXVjaCBUeWJhbHQuCisKK0JlbmV2b2xpbyBob2IgZGllIEhhbmQuICJCZWhlcnJzY2h0IGV1Y2guIE1pdHRlbiBhdWYgZGVyIFN0cmFzc2UgIHp1ICBrYWVtcGZlbgoraXN0IGFldXNzZXJzdCB1bmZlaW4uIERhIGdlaG9lcnQgZG9jaCAgZWluZSAgV2llc2UgIGltCU1vcmdlbmdyYXVlbiAgdW5kICBlaW4KK3N0aWx2b2xsZXIgTmViZWwgZGF6dS4iCisKKyJBY2gsIE5lYmVsLiIgTWVyY3V0aW8gd29sbHRlIHNpY2ggc28gbGVpY2h0IG5pY2h0IGFibGVua2VuIGxhc3Nlbi4gICJJY2ggIGhhdQorVHliYWx0IGF1Y2ggb2huZSBOZWJlbCBtZWluZW4gU2FlYmVsIHVtIGRpZSBPaHJlbi4iCisKKyJIaWVyIGd1Y2t0IGRpciBqZWRlciB6dSwgTWVyY3V0aW8uIgorCisiTmEsIHZpZWxsZWljaHQgbGVybmVuIHNpZSBqYSBub2NoIHdhcy4gR2VuYXUgd2llIGljaCBUeWJhbHQgbGVocmVuIHdlcmRlLiIKKworUm9tZW8gYmV0cmF0IGRlbiBQbGF0eiBtaXQgZWluZW0gdW5pcmRpc2NoZW4gU3RyYWhsZW4gIGF1ZiAgZGVtICBHZXNpY2h0LiAgU2llCit3aXNzZW4gc2Nob246IERhcyBTdHJhaGxlbiwgZGFzIG1hbiBiZWkgTWVuc2NoZW4gc2VoZW4ga2FubiwgIGRpZSAgZ2VyYWRlICBlaW4KK2Jlc29uZGVycyBleG90aXNjaGVzIFBpbHpyYWdvdXQgZ2VnZXNzZW4gaGFiZW4gdW5kIGZlc3RzdGVsbGVuLCBkYXNzIGVzICBpaG5lbgord2lkZXIgRXJ3YXJ0ZW4gZ3V0IC0gYWxsenUgZ3V0IC0gYmVrb21tdC4gIkd1dGVuICBUYWcsICBpaHIgIGxpZWJlbiwgIGdvbGRpZ2VuCitNZW5zY2hlbiEiCisKK1R5YmFsdCBiZWRhY2h0ZSBSb21lbyBtaXQgZWluZW0gIEJsaWNrLCAgZGVyICBmdWVyICBnZXdvZWhubGljaCAgc2VsdGVuZW4gIHVuZAorYWJzdG9zc2VuZGVuIEthZWZlcm4gdm9yYmVoYWx0ZW4gYmxlaWJ0LiAiTGllYj8iCisKK0F1Y2ggTWVyY3V0aW8gc2FoIHNlaW5lbiBGcmV1bmQgaW50ZXJlc3NpZXJ0IGFuLCBhbGxlcmRpbmdzIGdsaWNoICBzZWluICBCbGljaworbWVociBkZW0gZWluZXMgQmlvbG9nZW4uICJMaWViLiBIYXQgZXIgZ2VzYWd0LiBVbmQgZ29sZGlnLiIKKworQXp6dXJvIHNjaHVldHRlbHRlIHNpY2guICJXYXJ0ZSBudXIgYWIsIGJpcyBpaG0gIGtsYXIgIHdpcmQsICBkYXNzICBpaG4gIEp1bGlhCitqZXR6dCBhbSBIYWtlbiBoYXQuIERhbm4gaXN0IFNjaGx1c3MgbWl0IGx1c3RpZy4iCisKK1VsbyBzdGllc3MgaWhyZW4gR2VmYWVocnRlbiBhbi4gIkF1Y2ggd2VubiBkdSBlcyBuaWNodCBmdWVyIG1vZWdsaWNoICBoYWVsdHN0LAorZXIgaXN0IGdsdWVja2xpY2guIgorCisiTm9jaC4iCisKK1R5YmFsdCB1ZWJlcndhbmQgc2VpbmUgVmVyd2lycnVuZyBhbHMgZXJzdGVyIHVuZCBnYWIgc2ljaCBhbGxlCU11ZWhlLAlzZWluZXIKK0F1ZmdhYmUgYWxzIFNjaHVya2UgZGllc2VyIEdlc2NoaWNodGUgZ2VyZWNodCB6dSB3ZXJkZW4uICJIdW5kLCBlbGVuZGVyISIKKworUm9tZW8sIGltbWVyIG5vY2ggbWl0IGRlbSBzZWxpZ2VuIEdlc2ljaHRzYXVzZHJ1Y2ssIGxhZWNoZWx0ZSBUeWJhbHQgYW4uICJBY2gsCitUeWJhbHQsIGR1IGFobnN0IGphIG5pY2h0LCB3aWUgZ2VybiBpY2ggZGljaCBoYWJlLiIKKworVWxvIHpvZyBkaWUgQnJhdWVuIGhvY2guICJBdWYgZWlubWFsPyIKKworIkZhbWlsaWVucGZsaWNodGVuLiIgQXp6dXJvIGthbm50ZSBkaWVzZSBTaXR0ZSwgZGllICB2ZXJoaW5kZXJuICBzb2xsdGUsICBkYXNzCitzaWNoICBHZWZhZWhydGVuICBlaW5lcyAgUnVkZWxzICBhbiAgIGRpZSAgIEtlaGxlICAgZ2VoZW4sICAgYXVjaCAgIHdlbm4gICBkaWUKK1J1ZGVsYW5nZWhvZXJpZ2VuIG5vY2ggc28gd2lkZXJsaWNoIHNpbmQuIEZvcm11bGllcmVuIHdpciBlcyBhbmRlcnM6IFNpZSBoYWJlbgorc2Nob24gYWxzIGtsZWluZXMgS2luZCBnZWxlcm50LCBkYXNzIFNpZSAgSWhyZQlUYW50ZSAgYXVjaCAgZGFubiAgbmljaHQgIHZvcnMKK1NjaGllbmJlaW4gdHJldGVuIGR1ZXJmZW4sIHdlbm4gc2llIElobmVuIG5vY2gJc28gIG9mdCAgdW5lcnd1ZW5zY2h0ZQlLdWVzc2UKK3ZlcnBhc3N0LiBWaWVsZSBNZW5zY2hlbiB6YWhsZW4gdGV1cmUgU2l0enVuZ2VuIGJlaSBQc3ljaG90aGVyYXBldXRlbiB1bSBpaHJlcgordWViZXJ0cmFnZW5lbiBUYW50ZSBlbmRsaWNoIGVpbm1hbCAtIG9obmUgbWl0IHNjaGFlcmZzdGVuIFNhbmt0aW9uZW4gYmVsZWd0IHp1Cit3ZXJkZW4gLSBzYWdlbiB6dSBrb2VubmVuLCBkYXNzIHNpZSBuaWNodCBnZWt1ZXNzdCB3ZXJkZW4gd29sbGVuLgorCitUeWJhbHQsIGRlciBzaWNoIGRpZSBHZWxlZ2VuaGVpdCBuaWNodCBlbnRnZWhlbiBsYXNzZW4gd29sbHRlLCBzY2hlbmt0ZSAgUm9tZW8KK2VpbiB6dWNrZXJzdWVzc2VzIExhZWNoZWxuLiAiRHUgaGFzdCB3b2hsIGRhcyAgVWZlciAgZ2V3ZWNoc2VsdD8gIFdpbGxzdCAgbWljaAorYmVsZWlkaWdlbiwgaW5kZW0gZHUgbWlyIHVudGVyc3RlbGxzdCwgaWNoLi4uIiBFciAgYnJhY2ggIGFiICB1bmQgIHN0cmVpY2hlbHRlCitlcndhcnR1bmdzdm9sbCBzZWluZW4gRGVnZW4uCisKKyJBYmVyIG5laW4hIiBSb21lbywgZGVyIG9mZmVuc2ljaHRsaWNoIFR5YmFsdHMgIFppZWwgIG5pY2h0ICBlcmtlbm5lbiAgd29sbHRlLAorc3RyYWhsdGUgd2VpdGVyaGluIHVtIGRpZSBXZXR0ZS4gIkR1IGtlbm5zdCBtaWNoIGViZW4gbmljaHQsICBUeWJhbHQgIENhcHVsZXQsCitzb25zdCB3dWVzc3Rlc3QgZHUsIGRhc3MgaWNoIGRpY2ggZWJlbnNvIGdlcm4gaGFiZSB3aWUgbWljaCBzZWxic3QuIgorCitNZXJjdXRpbyBzdG9laG50ZS4gIkhpbW1lbCwgaGlsZiwgZXIgaXN0IHVudGVyIGRpZSAgQmV0YnJ1ZWRlciAgZ2VnYW5nZW4hIiAgRXIKK3pvZyBibGFuay4gIkFiZXIgd2VubiBSb21lbyBzZWxic3QgZGllIEJlbGVpZGlndW5nIG5pY2h0ICByYWVjaGVuICB3aWxsLCAgZGFubgorbGFzc2UgaWNoIGlobiBuaWNodCBpbSBSZWdlbiBzdGVoZW4uIFppZWgsIFR5YmFsdCEiCisKKyJIb2VydCBhdWYuIiBSb21lbyByYW5nIGRpZSBIYWVuZGUuICJJaHIgd2lzc3QgZG9jaCwgZGFzcyBkZXIgRnVlcnN0ICB1bnMgIGRhcwordmVyYm90ZW4gaGF0ISIKKworVHliYWx0IHNjaGllbiBNZXJjdXRpbyBqZXR6dCBlcnN0IHp1IGJlbWVya2VuLiAiV2FzIHdpbGxzdCBkdSAgZGVubj8iLCAgZnJhZ3RlCitlciAgaW4JZWluZW0gIFRvbmZhbGwsICBkZW4gIG1hbmNoZSAgTWVuc2NoZW4Ja2xlaW5lbiAgS2luZGVybiAgdW5kCUh1bmRlbgordm9yYmVoYWx0ZW4uCisKKyJEZWluIExlYmVuLiBPZGVyIHdlbmlnc3RlbnMgZWluIGFuc2VobmxpY2hlcyBTdHVlY2sgZGF2b24uIgorCisiRGFzIG11c3N0IGR1ICBkaXIgIGVyc3QgIGhvbGVuISIgIFR5YmFsdHMgIERlZ2VuICBzY2hpZW4gIHBsb2V0emxpY2ggIEZsdWVnZWwKK2Jla29tbWVuIHp1IGhhYmVuLCBhbmRlcnMgbGllc3Mgc2ljaCBkYXMgVGVtcG8gbmljaHQgIGVya2xhZXJlbiwgIG1pdCAgZGVtICBlcgorc2VpbmVyIFNjaGVpZGUgbGVkaWcgd3VyZGUuCisKK051biBzaW5kIHdpciBhbiBkZXIgU3RlbGxlIGFuZ2VsYW5ndCwgYW4gIGRlciAgamVkZXIgIEF1dG9yICBkaWUgIEdyZW56ZW4gIGRlcworUGFwaWVycyB2ZXJmbHVjaHQgIHVuZAlzaWNoICBmcmFndCwgIG9iICBlciAgbmljaHQgIGRvY2ggIGxpZWJlciAgRHJlaGJ1ZWNoZXIKK3NjaHJlaWJlbiBzb2xsdGUuIE9kZXIgZGllIFRpbnRlbmtsZWNrc2VyZWkgZ2FueiAgYW4gIGRlbiAgTmFnZWwgIGhhZW5nZW4gIHVuZAordmllbGxlaWNodCBlaW5lciBlaHJiYXJlbiBBcmJlaXQgbmFjaGdlaGVuIHNvbGx0ZSwgZGllIC0gYWJnZXNlaGVuICB2b24gIGVpbmVtCityZWdlbG1hZXNzaWdlbiBFaW5rb21tZW4gLSBub2NoIGRlbiBSdWYgIGRlciAgVW5zdGV0aWdrZWl0ICB0aWxndCwgIGRlciAgamVkZW4KK1NjaHJlaWJlciAodW5kIGplZGUgU2NocmVpYmVyaW4gLSBuYXR1ZXJsaWNoIGhhYmUgaWNoIGRhcyB2ZXJzdGFuZGVuLCBVbG8pICBpbgorZGllIE5hZWhlIGRlcyBCYWhuaG9mc3ZpZXJ0ZWxzIHJ1ZWNrdC4gRGVtIFBhcGllciBmZWhsdCwgdHJvdHogc2VpbmVyICBiZXJlaXRzCitzcHJpY2h3b2VydGxpY2hlbiBHZWR1bGQsIGRpZSBGYWVoaWdrZWl0LCBFcmVpZ25pc3NlLCBkaWUgc2ljaCBpbiAgQnJ1Y2h0ZWlsZW4KK3ZvbiBTZWt1bmRlbiBhYnNwaWVsZW4sIGluIGFuZ2VtZXNzZW4ga3VyemVyIFplaXQgd2llZGVyenVnZWJlbi4gVW5kICBkYXMgIGlzdAora2VpbmUgdmVyc3RlY2t0ZSBCZWxlaWRpZ3VuZyBtZWluZXIgTGVzZXJJbm5lbi4KKworU3RlbGxlbiBTaWUgc2ljaCBhbHNvIHZvciwgc2llIHN0dWVuZGVuIGluIGVpbmVyICBEaXNrby4gIFZvciAgSWhuZW4gIGlzdCAgZGllCitUYW56ZmxhZWNoZSwgZGllIFNpZSBudXIgZGFyYW4gZXJrZW5uZW4sIGRhc3Mga2VpbmUgVGlzY2hlIGRhcmF1ZiBzdGVoZW4uICBJaHIKK01hZ2VuIG1hY2h0IGVpZ2VuYXJ0aWdlICBIdWVwZmJld2VndW5nZW4gIHVuZCAgd2VubiAgU2llICBzaWNoCWtvbnplbnRyaWVyZW4sCitrb2VubmVuICBTaWUgIGVya2VubmVuLCAgZGFzcyAgZGllICBIdWVwZmVyZWkgIGltICAgVGFrdCAgIHp1bQkgV3VtbWVybiAgIGRlcgorQmFzc2xhdXRzcHJlY2hlciBlcmZvbGd0LiBNZXNzZXJzY2hhcmYgZm9sZ2VybiBTaWUsIGRhc3MgZGllICBNdXNpayAgKD8pICBmdWVyCitkaWUgenVja2VuZGVuIEJld2VndW5nZW4gSWhyZXIgSW5uZXJlaWVuIHZlcmFudHdvcnRsaWNoIGlzdCB1bmQgbmljaHQgZXR3YSBkYXMKK0NoaWxpIGNvbiBDYXJuZSB2b24gZ2VzdGVybiBhYmVuZC4gSW0gU3Ryb2Jvc2tvcGxpY2h0LAlkYXNzICBkaWUgIFRhbnpmbGFlY2hlCitiZWxldWNodGV0LCB6dWNrZW4gZWluemVsbmUgR2xpZWRlciBkdXJjaGVpbmFuZGVyOiAgSGllciAgZWluICBBcm0sICBkb3J0ICBlaW4KK0JlaW4sIGVpbiBTdHVlY2tjaGVuIHdlaXRlciBlaW5lIHdlaGVuZGUgSGFhcm1hZWhuZSB1bmQgZGF6d2lzY2hlbiAgdmllbGxlaWNodAorbm9jaCBlaW4gaGVsbGVyIEZsZWNrLCBkZXIgZWluIEdlc2ljaHQgc2VpbiBrb2VubnRlLiBEaWUgRWluZHJ1ZWNrZSBmb2xnZW4gIHp1CitzY2huZWxsIGF1ZmVpbmFuZGVyLCBhbHMgZGFzcyBTaWUgZGllICBHbGllZGVyCXphZWhsZW4gIGtvZW5udGVuICAtICBnYW56ICB6dQorc2Nod2VpZ2VuIGRhdm9uLCBkYXNzIFNpZSBhdXMgIEFybWVuLCAgQmVpbmVuLAlIYWFyZW4JdW5kICBHZXNpY2h0ZXJuICBnYW56ZQorTWVuc2NoZW4ga29uc3RydWllcmVuIGtvZW5udGVuLiBBbHNvIG5laG1lbiBTaWUgZGllIEJpbGRlciAgc28JaGluLCAgd2llICBzaWUKK0lobmVuIGdlYm90ZW4gd2VyZGVuLiBFcyBibGVpYnQgZGVyIEdlZGFua2UsIGRhc3MgTWVuc2NoZW4genUgTXVzaWsgdGFuemVuLgorCitPZGVyIHN0ZWxsZW4gU2llIHNpY2ggZWluZW4gRmlsbSBtaXQgZGVuIE1hcngtQnJvdGhlcnMgdm9yLiBFcmlubmVybiBTaWUgc2ljaD8KK0VzIGthbSBkYXJpbiBpbW1lciB3aWVkZXIgenUgU3plbmVuLCBpbiBkZW5lbiAgc2ljaCAgZGllICBCcnVlZGVyICBnZWdlbnNlaXRpZworVG9ydGVuIGluIGRpZSBHZXNpY2h0ZXIgd2FyZmVuIG9kZXIgT2hyZmVpZ2VuICBhdXN0ZWlsdGVuLiAgU2NobmVsbGUgIFNjaG5pdHRlCithbnN0ZWxsZSB2b24gU2Nod2Vua3MgIHplaWd0ZW4JZGllICBHZXNjaHdpbmRpZ2tlaXQsICBpbiAgZGVyCWRhcyAgR2VzY2hlaGVuCitwYXNzaWVydGUuCisKK05hY2hkZW0gZXMgYWxzbyBrZWluZSBlY2h0ZSBNb2VnbGljaGtlaXQgZ2lidCwgSWhuZW4gZGFzIFRlbXBvIGRlciAgRXJlaWduaXNzZQorZGVyIG5hZWNoc3RlbiBwYWFyIE1pbnV0ZW4gYXVmIGplbmVtIFBsYXR6IGluIFZlcm9uYSB6dSAgdmVybWl0dGVsbiwgIGVybGF1YmVuCitTaWUgbWlyLCBkYXMgUGFwaWVyIHp1IHplcnNjaG5laWRlbiB1bmQgSWhuZW4gZGllIFNpdHVhdGlvbiBpbiBTY2huaXBwc2VsbiAgenUKK3ByYWVzZW50aWVyZW4uIEdhbnogc28sIGFscyBzdHVlbmRlbiBTaWUgZGFuZWJlbiB1bmQgIGxpZXNzZW4gIElocmUgIEF1Z2VuICBpbQorVGFrdCAgZGVyICBFcmVpZ25pc3NlICB2b24gIGVpbmVyICBQZXJzb24gIHp1cgluYWVjaHN0ZW4gIGh1ZXBmZW4sICBvaG5lICBkaWUKK0dlc2NoZWhuaXNzZSB1bmJlZGluZ3QgbWl0ZWluYW5kZXIgenUgdmVyYmluZGVuLgorCitSb21lb3MgQXVnZW4gd2VpdGVuIHNpY2ggdm9yIFNjaHJlY2suICJOZWluISBTdGVja3QgZGllIERpbmdlciB3ZWchIgorCitCZW5ldm9saW8sIG5pY2h0IHdlbmlnZXIgZW50c2V0enQgYWxzIHNlaW4gRnJldW5kLCB6dWVja3QgIGRlbglEZWdlbiAgdW0gIGRpZQorV2FmZmVuIFR5YmFsdHMgdW5kIE1lcmN1dGlvcyBoZXJ1bnRlcnp1c2NobGFnZW4uCisKK1R5YmFsdCwgZGVyIGRpZSBTaXR1YXRpb24gbWlzc3ZlcnN0ZWh0LCBmaW50ZXQgaW4gIFJpY2h0dW5nICBSb21lbywgIHZlcmZ1ZWhydAorZGFtaXQgQmVuZXZvbGlvIGRhenUsIHNlaW5lbiBEZWdlbiBtaXQgZGVtIHNlaW5lbiB6dSBiaW5kZW4uCisKK0F6enVybyBmbGF0dGVydCBhdWZnZXJlZ3QgbWl0IGRlbiBGbHVlZ2Vsbi4gIkp1Y2gtaHUhIiwga3JhZWh0IGVyIHZlcmdudWVndC4KKworUm9tZW8gZ2lidCBzaWNoIGFsbGUgTXVlaGUsIE1lcmN1dGlvIGF1cyBkZW0gR2VyYW5nZWwgIGZvcnR6dXppZWhlbiwgIGVycmVpY2h0CithbGxlcmRpbmdzIG51ciwgZGFzcyBNZXJjdXRpbyBpaG0gZWluZSBzYWZ0aWdlIE9ocmZlaWdlIHZlcnBhc3N0LgorCitVbG8sIGRpZSBSb21lbyBuaWNodCBhbiBzZWluZW0gSG9jaHplaXRzdGFnIHRvdCBzZWhlbiB3aWxsLCBmbGllZ3QgIHRvZGVzbXV0aWcKK2VpbmVuIFN0dXJ6YW5ncmlmZiBhdWYgVHliYWx0LgorCitUeWJhbHQgc2NobGFlZ3QgbmFjaCBkZW0gc2Nod2FyemVuIFNjaGVtZW4gdm9yIHNlaW5lbSBHZXNpY2h0IHVuZCBsZW5rdCAgZGFtaXQKK01lcmN1dGlvcyBBdWZtZXJrc2Fta2VpdCB3aWVkZXIgYXVmIHNpY2guCisKK01lcmN1dGlvIHNjaHVldHRlbHQgUm9tZW8gYWIgdW5kIHRyaXR0IEJlbmV2b2xpbyB2b3JzIFNjaGllbmJlaW4sICBkZXIJVHliYWx0CitVbG8gdWViZXJsYWVzc3QuCisKK0F6enVybyBoYXQgZXJmb2xncmVpY2ggZWluZW4gU3RlaW4gaW4gIGRpZSAgS2xhdWVuICBnZW5vbW1lbiAgdW5kICBsYWVzc3QgIGlobgorQmVuZXZvbGlvIGF1ZiBkZW4gS29wZiBmYWxsZW4uCisKK0JlbmV2b2xpbywgdm9uIGRlbSAgU3RlaW4gIHp3YXIgIG5pY2h0CWhhcnQgIGdldHJvZmZlbiwgIHdvaGwJYWJlciAgYXVzICBkZW0KK0dsZWljaGdld2ljaHQgZ2VicmFjaHQsIGxhZXNzdCBNZXJjdXRpb3MgQXJtIGxvcy4KKworTWVyY3V0aW8sIGRlciBzaWNoIGdlcmFkZSB2b24gIEJlbmV2b2xpbyAgbG9zcmVpc3NlbiAgd29sbHRlLCAgYmVrb21tdAl6dXZpZWwKK1NjaHd1bmcgdW5kIHJlbXBlbHQgUm9tZW8gYW4uCisKK1JvbWVvIHRhdW1lbHQgenVyIFNlaXRlLgorCitUeWJhbHQgd2l0dGVydCBNb3JnZW5sdWZ0LCBtYWNodCBlaW5lbiBzY2huZWxsZW4gQXVzZmFsbHNjaHJpdHQgIHVuZCAgdmVyc2Vua3QKK3NlaW5lbiBEZWdlbiBpbiBNZXJjdXRpb3MgQnJ1c3QuCisKK0FscyBUeWJhbHQga2xhciB3dXJkZSwgd2FzIGVyIGFuZ2VyaWNodGV0IGhhdHRlLCBuYWhtICBlciAgZGllCUJlaW5lICBpbiAgZGllCitIYW5kLgorCitTdGlsbGUuCisKK1N0aWxsZSEKKworU1RJTExFIQorCitNZXJjdXRpbyAgdGFzdGV0ZSAgbWl0CXppdHRlcm5kZXIgIEhhbmQgIG5hY2gJc2VpbmVyCVNjaHVsdGVyLiAgICJWZXJkYW1tdGUKK1NjaGVpc3NlLiIsIHNhZ3RlIGVyIGluIGRpZSBkb25uZXJuZGUgU3RpbGxlIGhpbmVpbi4gRWluZSB3ZWlzc2UgVGF1YmUgbGFuZGV0ZQord2VpY2ggbmViZW4gaWhtIHVuZCBzY2hhdXRlIGlobiBzbyB2b3J3dXJmc3ZvbGwgYW4sIGRhc3MgTWVyY3V0aW8gc2VpbmUgIFdvcnRlCitiZWRhdWVydGUuICJTY2hvbiBndXQsIGljaCBsYXNzZSBtaXIgZXR3YXMgYmVzc2VyZXMgZWluZmFsbGVuLiIKKworIkRhbWl0IHNvbGx0ZSBlciBzaWNoIGJlc3NlciBiZWVpbGVuLiIsIHJhdW50ZSBBenp1cm8gVWxvIHp1LgorCisiSXN0IGFiZXIgYXVjaCBlaW5lIFNjaGFuZGUsIGRhc3MgZGVuIE1lbnNjaGVuICBzbyAgd2VuaWcgIFplaXQgIGJsZWlidCwgIHNpY2gKK3d1ZXJkZXZvbGxlIGxldHp0ZSBXb3J0ZSBhdXN6dWRlbmtlbi4iIFVsbyBzY2huaWVmdGUgbGVpc2UuCisKK0VpbiBMZXVjaHRlbiBodXNjaHRlIHVlYmVyIE1lcmN1dGlvcyBHZXNpY2h0LCBhbHMgaWhtIGVpbmUgYnJhdWNoYmFyZSBJZGVlIGthbS4KKworIkFjaCwgUm9tZW8sIHdhZXJlc3QgZHUgbmljaHQgendpc2NoZW4gZGllc2VuIEJhLi4uIEVsZW5kZW4gdW5kIG1pY2ggZ2V0cmV0ZW4sCitpY2ggIGhhZXR0ZSAgbWljaCAgbmljaHQgIHp1cnVlY2toYWx0ZW4gIG11ZXNzZW4gIHVuZCAgc2ljaGVybGljaCAgIGRlbiAgIFNpZWcKK2Rhdm9uZ2V0cmFnZW4hIiwgc3RvZWhudGUgZXIgYW5nZW1lc3NlbiBmZWllcmxpY2guCisKKyJFciB0cmFlZ3QgenUgZGljayBhdWYuIiBBenp1cm8gYmVrYW0gZGVuIG1vcmRsdWVzdGVybmVuIEJsaWNrLCBkZW4gbWFuICBzb25zdAorYmVpIEtyaXRpa2VybiBiZW9iYWNodGV0LgorCitSb21lbywgZGVyIGF1c3Nlcmdld29laG5saWNoIHNjaG5lbGwgZXJrYW5udGUsIHdhcyAgdm9uICBpaG0gIGVyd2FydGV0CXd1cmRlLAorZmllbCBuZWJlbiBzZWluZW0gRnJldW5kIGF1ZiBkaWUgS25pZS4gIkljaCBoYWJzIGRvY2ggbnVyIGd1dCBnZW1laW50ISIKKworQXp6dXJvIG9lZmZuZXRlIGRlbiBTY2huYWJlbCwgZG9jaCBkaWUgVGF1YmUgd2FyZiAgaWhtCWVpbmVuICBCbGljayAgenUsICBkZXIKK3NlbGJzdCBlaW5lbiBLbGF0c2Noc3BhbHRlbi1SZWRha3RldXIgenVtIFNjaHdlaWdlbiBnZWJyYWNodCBoYWV0dGUuCisKKyIuLi4iLCBzYWd0ZSBNZXJjdXRpbyB1bmQgc2VpbiBLb3BmIHNhbmsgenVyIFNlaXRlLgorCitSb21lbyBzY2hsdWNrdGUuICJJc3QgZXIuLi4/IgorCitVbG8gbGllc3Mgc2ljaCBhdWYgc2VpbmVyIFNjaHVsdGVyIG5pZWRlciB1bmQgcmllYiBzYW5mdCAgZGVuICBTY2huYWJlbCAgdWViZXIKK3NlaW5lIFdhbmdlLgorCisiSmEuIgorCisiVW5kIG51ciwgd2VpbCBlciBuaWNodCB3b2xsdGUsIGRhc3MgaWNoIGJlbGVpZGlndCB3ZXJkZS4gRGFiZWkgd3Vzc3RlIGVyIGRvY2gKK2dhciBuaWNodCwgd2FydW0gaWNoIFR5YmFsdCBpbiBSdWhlIGxpZXNzLiIgRXIgc2V1Znp0ZS4gIkljaCBsaWViZSBKdWxpYSwgYWJlcgordW0gIGlocmV0d2lsbGVuICBoYWJlICBpY2ggICB6dWdlbGFzc2VuLCAgIGRhc3MgICBNZXJjdXRpbyAgIGZ1ZXIgICBtaWNoICAgZGllCitVbnZlcnNjaGFlbXRoZWl0ZW4gVHliYWx0cyBiZXphaGx0ZS4gVW5kIGpldHp0IGhhdCBlciBkYWZ1ZXIgYmV6YWhsdC4gSWNoIGhhYnMKK2RvY2ggbnVyIGd1dCBnZW1laW50LiIgVmVyendlaWZlbHQgc2NodWV0dGVsdGUgZXIgZGVuIEtvcGYuICJOdXIgZ3V0IGdlbWVpbnQuIgorCitEaWUgd2Vpc3NlIFRhdWJlIGxlZ3RlIGRlbiBLb3BmIHNjaGllZi4gRGEgTWVyY3V0aW8gbnVuIGZ1ZXIgZGllIE1lbnNjaGVuICBkZXIKK015dGhlbndlbHQgdG90IHdhciwgZHVyZnRlIGVyIGRhcyBFbmRlIGRlciBHZXNjaGljaHRlICBlaWdlbnRsaWNoICBuaWNodCAgbWVocgorbWl0IGFuc2VoZW4sIGRvY2ggc28gd2llIGVpbiBTY2hhdXNwaWVsZXIgZGVuIFJlc3QgZGVyIFZvcnN0ZWxsdW5nICBiZW9iYWNodGVuCit1bmQgc2NobGllc3NsaWNoIG1pdCBzZWluZW4gS29sbGVnZW4gZ2VtZWluc2FtIHZvciBkZW0gVm9yaGFuZyBkZW4gQXBwbGF1cyBkZXMKK1B1Ymxpa3VtcyBpbiBFbXBmYW5nIG5laG1lbiBkYXJmLCBibGllYiBkaWUgVGF1YmUgenVydWVjayAgdW5kCWdlc2VsbHRlICBzaWNoCitJaG5lbiB1bmQgbWlyIHp1LCBkaWUgd2lyIGRhcyBTdHVlY2sgYmVvYmFjaHRlbiwgIG9obmUJc2VsYnN0CWVpbmdyZWlmZW4gIHp1Citrb2VubmVuLiBEaWUgVGF1YmUgaXN0IGZ1ZXIgZGllIEdvZXR0ZXIgZGVyIE15dGhlbndlbHQsIHdhcyBkaWUgRGlza2V0dGUgIGZ1ZXIKK2RlbiBDb21wdXRlciAgaXN0OiAgRWluICBTcGVpY2hlciwgIGRlciAgZW50aGFlbHQsICB3YXMgIGVyc3QgIHNwYWV0ZXIJd2llZGVyCitnZWJyYXVjaHQgd2lyZC4gT2J3b2hsIENELVJPTSB3YWhyc2NoZWlubGljaCBlaW4gYmVzc2VyZXMgV29ydCB3YWVyZSwgZGVubiBiZWkKK2RlciBuYWVjaHN0ZW4gQXVmZnVlaHJ1bmcgZGllc2VyIEdlc2NoaWNodGUgd2lyZCBNZXJjdXRpbyB3aWVkZXIgZ2FueiBkZXIgQWx0ZQorc2VpbiwgZXIgd2lyZCBuaWNodHMgZ2VsZXJudCBoYWJlbiwga2VpbmUgVmVyYWVuZGVydW5nIGVyZmFocmVuLgorCitCZW5ldm9saW8gYmVydWVocnRlIFJvbWVvIGFuIGRlciBTY2h1bHRlci4gIlR5YmFsdC4iCisKK1JvbWVvIHNwcmFuZyBhdWYgd2llIHZvbiBkZXIgVGFyYW50ZWwgZ2VzdG9jaGVuLiAiTmEgd2FydGUsIGRlciBzb2xsIGJlemFobGVuIQorRXIgbGFldWZ0IGhpZXIgaGVydW0sICBhbHMgIHdhZXJlICBuaWNodHMgIHBhc3NpZXJ0LCAgd2FlaHJlbmQJTWVyY3V0aW8sICBkZXIKK2ltbWVyaGluIG1pdCB1bnNlcmVtIEZ1ZXJzdGVuIHZlcndhbmR0IGlzdC4uLiIgRXIgYnJhY2ggYWIgdW5kIHp1ZWNrdGUgIHNlaW5lbgorRGVnZW4uICJLb21tIGhlciwgVHliYWx0LCBqZXR6dCBzb2xsc3QgZHUgc2VoZW4sIHdhcyAgZHUgIGRhdm9uICBoYXN0LCAgbWVpbmVuCitGcmV1bmQgdW16dWJyaW5nZW4hIiBIYWx0ZW4gd2lyIFJvbWVvIHp1Z3V0ZSwgZGFzcyBlciBpbSAgQWZmZWt0ICBoYW5kZWx0ICB1bmQKK2tlaW5lIGJvZXNlIEFic2ljaHQgaGludGVyIHNlaW5lciAgRW50c2NoZWlkdW5nICB6dXIgIEx5bmNoanVzdGl6ICBzdGVja3QuICBFcgorZmljaHQgbWl0IFR5YmFsdCB1bmQgd2lyIHdvbGxlbiB1bnMgZWluZSAgZ2VuYXVlICBCZXNjaHJlaWJ1bmcJZGVyICBlaW56ZWxuZW4KK1NjaHJpdHRlLCBIaWViZSB1bmQgU3RpY2hlIGVyc3BhcmVuIC0gbmljaHQgbnVyLCB3ZWlsIGljaCB2b20gIEZlY2h0ZW4JbmljaHRzCit2ZXJzdGVoZSwgc29uZGVybiBhdWNoLCB3ZWlsIGljaCBkaWVqZW5pZ2VuIHVudGVyIElobmVuLCBkaWUgIGRhdm9uICBlYmVuZmFsbHMKK2tlaW5lIEFobnVuZyBoYWJlbiwgbmljaHQgbGFuZ3dlaWxlbiBtb2VjaHRlLiBFcnphZWhsZW4gd2lyIGFsc28gZGllIFN6ZW5lICBzbwora3VyeiBhbHMgbW9lZ2xpY2g6IFJvbWVvIHVuZCBUeWJhbHQgIGZlY2h0ZW4gIG1pdGVpbmFuZGVyICB1bmQJVHliYWx0cyAgVGF1YmUKK2dlc2VsbHQgc2ljaCB6dSBNZXJjdXRpb3MuCisKK0ZyYWdlbiBTaWUgbWljaCBqZXR6dCBuaWNodCwgd2FydW0gZGllIFRhdWJlbiBkaWUgS29lcGZlICB6dXNhbW1lbnN0ZWNrZW4sICBlcworaGF0IGplZGVuZmFsbHMgbWl0IHVuc2VyZXIgR2VzY2hpY2h0ZSBuaWNodHMgenUgdHVuLiBIb2ZmZW50bGljaC4KKworQmVuZXZvbGlvIHNhaCBkYXMgIFZlcmhhZW5nbmlzCWluICBHZXN0YWx0ICBhdWZnZWJyYWNodGVyICBQb2xpemlzdGVuCW5haGVuLgorIk1hY2gsIGRhc3MgZHUgd2Vna29tbXN0LCBSb21lbyEiCisKK1JvbWVvLCBkZXIgbm9jaCB2ZXJzdWNodGUsIHNlaW5lbiBEZWdlbiBhdXMgVHliYWx0cyBMZWljaGUgenUgemllaGVuLCBmbHVjaHRlLgorIkhpbGYgbWlyIGRvY2ggYmVpIGRlbSBEaW5nLiIKKworQmVuZXZvbGlvIHNjaHVldHRlbHRlIGRlbiBLb3BmLiAiTG9zLCBkdSBoYXN0IGtlaW5lIFplaXQgIHp1ICB2ZXJsaWVyZW4uICBXZW5uCitkaWUgUG9saXplaSBkaWNoIGVyd2lzY2h0LCBoYXN0IGR1IGVzIGdlbmF1c28gaGludGVyIGRpciB3aWUgZGllIGJlaWRlbiBoaWVyLiIKKworUm9tZW8sIGRlciBkaWUgZ2FuemUgVHJhZ3dlaXRlIGRlciBHZXNjaGVobmlzc2UgamV0enQgZXJzdCBiZWdyaWZmLCBuaWNrdGUgdW5kCityYW5udGUgbG9zLgorCitLZWluZSBTZXVjaGUga2FubiAgc2ljaCAgc2NobmVsbGVyICBhdXNicmVpdGVuCWFscyAgZGllICBOYWNocmljaHQsICBkYXNzICBlcworaXJnZW5kd28gZWluZSBMZWljaGUgenUgc2VoZW4gZ2lidCwgZG9jaCAgc2VsYnN0ICBkaWUgIEdlc2Nod2luZGlna2VpdAlkaWVzZXIKK05hY2hyaWNodCBpc3QgbmljaHRzIGdlZ2VuIGRhcyBUZW1wbywgbWl0IGRlbSBNZW5zY2hlbiBoZXJiZWloYXN0ZW4sIGRpZSBlaW5lbgorbGVpYmhhZnRpZ2VuIE1vZXJkZXIgc2VoZW4gd29sbGVuLiBOaWNodCBhbmRlcnMgd2FyIGVzIGF1Y2ggamV0enQ6IERpZSBCdWVyZ2VyCitWZXJvbmFzLCBzZW5zYXRpb25zbHVlc3Rlcm4gdW5kIGJsdXRnaWVyaWcgd2llIGFsbGUgTWVuc2NoZW4sIGZsb2dlbiAgZ2VyYWRlenUKK2F1ZiBkZW4gUGxhdHouIEF1cyBkZW0gdmllbHN0aW1taWdlbiBHZXNjaHJlaSB1bmQgZGVtIGdpZXJpZ2VuIEdsYW56IGRlciBBdWdlbgorbGllc3Mgc2ljaCBvaG5lIHdlaXRlcmVzICBkaWUgIFN0aW1tdW5nICBkZXIgIE1lbmdlICBpbiAgZWluZW4JZWluemlnZW4gIFNhdHoKK2tyaXN0YWxsaXNpZXJlbjogIldvIGlzdCBUeWJhbHQsIGRlciBNb2VyZGVyPyIKKworQmVuZXZvbGlvIHRyYXQgdW5iZWhhZ2xpY2ggdm9uIGVpbmVtIEZ1c3MgYXVmIGRlbiBhbmRlcmVuLCB3aWUgZXMgZGllICBtZWlzdGVuCitMZXV0ZSB0YWV0ZW4sIGRpZSBzaWNoIHVudmVyc2VoZW5zIG1pdCBlaW5lbSB3dWV0aWdlbiBNb2Iga29uZnJvbnRpZXJ0CXNlaGVuLgorRXIgZGV1dGV0ZSBhdWYgVHliYWx0cyBMZWljaGUuICJIaWVyLiIKKworRW50dGFldXNjaHVuZyBicmVpdGV0ZSBzaWNoIGF1ZiBkZW4gR2VzaWNodGVybiBhdXMuIEZ1ZXIgQmVuZXZvbGlvICBzY2hpZW4gIGVzCitqZXR6dCB1bmFuZ2VuZWhtIHp1IHdlcmRlbiAtIGVyIGthbm50ZSBzbyAgZ3V0CXdpZSAgamVkZXIgIGFuZGVyZSAgZGVuICBhbHRlbgorU3BydWNoLCBkYXNzIGRlciBzY2hyZWNrbGljaHN0ZSBhbGxlciBTY2hyZWNrZW4gIGVpbiAgTWVuc2NoZW5tb2IgIG9obmUgIE9wZmVyCitpc3QuIFp1IHNlaW5lbSBncm9zc2VuIEdsdWVjayBrYW1lbiBqZXR6dCBFc2NhbHVzIHVuZCBkaWUgSGFldXB0ZXIgZGVyIEhhZXVzZXIKK0NhcHVsZXQgdW5kIE1vbnRhZ3VlIHp1bSBQbGF0eiwgZGllIHZvbiAgaWhyZXIJSG9ub3JhdGlvcmVud3VlcmRlICBudXIgIHdlbmlnCitsYWVuZ2VyIHp1cnVlY2tnZWhhbHRlbiB3b3JkZW4gd2FyZW4gYWxzIGRpZSBhbmRlcmVuIEJ1ZXJnZXIuCisKK0VzY2FsdXMgc2Nob2Igc2ljaCBkdXJjaCBkaWUgTWVuZ2Ugd2llIGVpbiBFaXNicmVjaGVyIGR1cmNoIGRhcyAgTm9yZG1lZXIgIHVuZAorYmF1dGUgc2ljaCB2b3IgQmVuZXZvbGlvIGF1Zi4gIkFsc28/IgorCitCZW5ldm9saW8gd2FndGUga2F1bSB6dSBhdG1lbi4gSmVkZXIgYXVmIGRlbSBQbGF0eiBzY2hpZW4gZGVuIEF0ZW0gYW56dWhhbHRlbiwKK3NlbGJzdCBVbG8gdW5kIEF6enVybyBoYXR0ZSBlcyBlaW5lbiAgTW9tZW50ICBsYW5nICBkaWUgIFNwcmFjaGUgIHZlcnNjaGxhZ2VuLgorU2NobGllc3NsaWNoIGhvbHRlIEJlbmV2b2xpbyBMdWZ0IHVuZCBkaWVzZXIgQXRlbXp1ZyBlbnR3aWNrZWx0ZSBzaWNoIHp1IGVpbmVtCitrb2xsZWt0aXZlbiBTZXVmemVuLiBFciB3YXIgc2ljaCB1bmFuZ2VuZWhtIGRlciBUYXRzYWNoZSBiZXd1c3N0LCAgZGFzcyAgYWxsZXIKK0F1Z2VuIGF1ZiBpaG0gcnVodGVuLgorCisiQWVoLi4uIiwgYmVnYW5uIGVyLgorCisiSmE/IiBFc2NhbHVzZW5zIEdlZHVsZCBnbGljaCBkZW0gR3VtbWliYW5kIGltIEZsdWd6ZXVnIGVpbmVzIGtsZWluZW4gSnVuZ2VuLgorCisiQWxzbywgZGEgd2FyIE1lcmN1dGlvLiBVbmQgZGFubiB3YXIgZGEgVHliYWx0LiBVbmQgZGFzIFdldHRlciB3YXIgIHNvICBoZWlzcy4KK1VuZCBUeWJhbHQgd29sbHRlIHNpY2ggcHJ1ZWdlbG4uIEphLiBVbmQgamV0enQgaXN0IE1lcmN1dGlvIHRvdC4gVW5kIFR5YmFsdC4iCisKK0ZyYXUgQ2FwdWxldCwgIGRpZSAgYXVmZ3J1bmQgIGlocmVyICBFcmZhaHJ1bmcJbWl0ICBQb2xseSAgQmVuZXZvbGlvcwlTYWV0emUKK3NjaG5lbGxlciBzb3J0aWVydCBoYXR0ZSwgYWxzIGlyZ2VuZCBlaW4gYW5kZXJlciBhdWYgZGVtIFBsYXR6LCBzY2hyaWUgYXVmIHVuZAorUmFjaGVkdXJzdCB2ZXJ6ZXJydGUgaWhyZSBHZXNpY2h0c3p1ZWdlICB6dSAgZWluZXIgIEZyYXR6ZSwgIGRpZSAgc2VsYnN0ICBlaW5lCitNZWR1c2EgaGFldHRlIHp1IFN0ZWluIGVyc3RhcnJlbiBsYXNzZW4uICJUeWJhbHQhIE9oLCBUeWJhbHQhIiBTaWUgIHdhcmYgIHNpY2gKK2FuIEVzY2FsdXNlbnMgQnJ1c3QgdW5kIHRyb21tZWx0ZSBtaXQgZGVuIEZhZXVzdGVuIGF1ZiBpaG4gZWluLiAiRWluICBNb250YWd1ZQoraGF0IG1laW5lbiBWZXJ3YW5kdGVuIGVyc3RvY2hlbiEiIFNpZSB6ZXJyYXVmdGUgc2ljaCAgaG9lY2hzdCAgZHJhbWF0aXNjaCAgZGFzCitIYWFyLiAiRGFmdWVyIG11c3MgZGVyIFNjaHVsZGlnZSBoYWVuZ2VuISIKKworRXNjYWx1cyAgd2lzY2h0ZSAgZGllICBGYWV1c3RlCWRlciAgRnJhdSAgQ2FwdWxldCAgYmVpc2VpdGUuICAiV2VyICBoYXQgIGRlbm4KK2FuZ2VmYW5nZW4/IiwgZnJhZ3RlIGVyIGdlZHVsZGlnLgorCitCZW5ldm9saW8gc2NobHVja3RlLiAiVHliYWx0LiBVbmQgZGFubiBoYXQgUm9tZW8gdmVyc3VjaHQsIGlobiB1bmQgTWVyY3V0aW8genUKK3RyZW5uZW4uIEVyIGhhdCBzb2dhciBnZXNhZ3QsIGRhc3MgU2llIGVzIGdhciBuaWNodCAgZ2VybmUgIHNhZWhlbiwgIHdlbm4gIGRpZQorYmVpZGVuIHNpY2ggYXVmIG9mZmVuZXIgU3RyYXNzZSBwcnVlZ2VsdGVuLiIKKworIkF1ZiBvZmZlbmVyIFN0cmFzc2UuIFNvc28uIgorCitCZW5ldm9saW8gYmVtZXJrdGUsIGRhc3MgZGllc2UgQWV1c3NlcnVuZyBmYWxzY2ggYXVzZ2VsZWd0IHdlcmRlbiAga29ubnRlICB1bmQKK3JhbmcgZGllIEhhZW5kZS4gIlR5YmFsdCB3b2xsdGUgZWluZmFjaCBuaWNodCBob2VyZW4gIHVuZCAgaGF0ICBuYWNoICBNZXJjdXRpbworZ2V6aWVsdC4gTmFqYSwgTWVyY3V0aW8gaXN0IG5pY2h0IGdlcmFkZSAgc2FuZnQsICB3ZW5uCW1hbiAgaWhuICB6dSAgcmFzaWVyZW4KK3ZlcnN1Y2h0LCB1bmQgaGF0IHNpY2gJbmF0dWVybGljaCAgZ2V3ZWhydC4gIEFiZXIgIFR5YmFsdCAgd2FyICBlaW4gIGJlc3NlcmVyCitGZWNodGVyLCBkZXNoYWxiIHdvbGx0ZW4gZGllIGJlaWRlbiBnZXJhZGUgbWFlY2h0aWcgbG9zZmVjaHRlbiwgYWxzIFJvbWVvICBzaWUKK3p1IHRyZW5uZW4gdmVyc3VjaHRlLiAgTm9jaCAgbWFsICB6dSAgdHJlbm5lbiAgdmVyc3VjaHRlLiIgIFNlaW5lICBSZWRlICBoYXR0ZQorQmVuZXZvbGlvIGdhbnogYXRlbWxvcyBnZW1hY2h0IHVuZCBlciBob2x0ZSB0aWVmIEx1ZnQuICJNZXJjdXRpbyBzdGFuZCAgaGludGVyCitSb21lbyB1bmQgVHliYWx0IHZvciBpaG0uIEphLCB1bmQgZGFubiBzdGljaHQgVHliYWx0IHVudGVyICBSb21lb3MgIEFybSAgZHVyY2gKK3VuZCBlcndpc2NodCBNZXJjdXRpby4iCisKKyJVbmQgZGFubj8iCisKKyJEYW5uIGlzdCBUeWJhbHQgd2VnZ2VsYXVmZW4sIGFiZXIgd2VpbCBlciBSb21lbyBuaWNodCBzdGVoZW4gIGxhc3NlbiAgd29sbHRlLAora2FtIGVyIHp1cnVlY2sgdW5kIFJvbWVvIHNhaCByb3QuIFRqYSwgZGFubiBoYWJlbiBzaWUgZ2Vmb2NodGVuIHVuZCBSb21lbyAgaGF0CitnZXdvbm5lbi4gQWxsZXMgc28gc2NobmVsbCwgZGFzcyBpY2ggbmljaHQgZGF6d2lzY2hlbiBnZWhlbiBrb25udGUuIgorCisiVW5kIFJvbWVvPyIKKworIklzdCB3ZWcuIgorCitFc2NhbHVzZW5zIEdlc2ljaHQgaGF0dGUgamVuZW4gQXVzZHJ1Y2ssIGRlciBFcndhY2hzZW5lbiBlaWdlbglpc3QsICBkaWUgIGRlbgorU3RyZWl0IHZvbiBLaW5kZXJuIGF1cyBkZXJlbiBBdXNzYWdlbiBuYWNodm9sbHppZWhlbiB3b2xsZW4uICBEYSAgZGllICBtZWlzdGVuCitLaW5kZXIJZGllICBHZXNjaGVobmlzc2UsICBkaWUgIHp1ICBlaW5lbSAgU3RyZWl0ICBmdWVocmVuLCAgbmljaHQgIHVuYmVkaW5ndAorZm9sZ2VyaWNodGlnIHdpZWRlcmdlYmVuLCBmdWVocnQgZGVyIFZlcnN1Y2ggbWVpc3RlbnMgIGRhenUsICBkYXNzICBFcndhY2hzZW5lCitiZWlkZSBLaW5kZXIgZ2xlaWNoZXJtYXNzZW4gZXJtYWhuZW4sICBGcmllZGVuCXp1ICBoYWx0ZW4sICBnbGVpY2gsICB3ZXIgIGRlcgorU2NodWxkaWdlIGFtIFN0cmVpdCB3YXIuIERpZXMgamVkb2NoIGhhdHRlIEVzY2FsdXMgYmVyZWl0cyB2ZXJzdWNodCB1bmQgZXIgc2FoCitzaWNoIGFtIEVuZGUgc2VpbmVyIE1vZWdsaWNoa2VpdGVuLiAgX0Z1c3NiYWxsXywgIGRhY2h0ZSAgZXIsICBfaXN0XyAgX3NjaG9lbl8KK191bmRfIF9ndXRfLCBfYWJlcl8gX3dhc18gX3NvbGxfIF9pY2hfIF9tYWNoZW5fLCBfd2Vubl8gX3NpZV8gX3NpY2hfICBfU3Bpa2VzXworX3VudGVyXyBfZGllXyBfU2NodWhlXyBfbWFjaGVuXyBfdW5kXyBfYmVoYXVwdGVuXywgX3NpZV8gX3dhZXJlbl8gX251cl8gIF9hdXNfCitfVmVyc2VoZW5fICBfZGVtXyAgX2FuZGVybl8gIF9hdWZfICBfZGVuXyAgX0Z1c3NfICBfZ2V0cmV0ZW5fPwlfV2FzXwlfc2luZF8KK19laWdlbnRsaWNoXyBfU3Bpa2VzXz8KKworRnJhdSAgQ2FwdWxldCwJZGllICBkZW4gIG5hY2hkZW5rbGljaGVuICAgR2VzaWNodHNhdXNkcnVjayAgIEVzY2FsdXNlbnMgICBhbHMKK1Vuc2ljaGVyaGVpdCBpbnRlcnByZXRpZXJ0ZSwgd2l0dGVydGUgIEZydWVobGluZ3NsdWZ0LgkiSXN0ICBkb2NoICB2b2xsa29tbWVuCitnbGVpY2hndWVsdGlnLCB3ZXIgYW5nZWZhbmdlbiBoYXQhIEJlbmV2b2xpbyBpc3QgUm9tZW9zIEZyZXVuZCwgIGRhICBrYW5uICBtYW4KK3dvaGwga2F1bSBlcndhcnRlbiwgZGFzcyBlciBkaWUgV2FocmhlaXQgYXVzc2FndC4iCisKK0VzY2FsdXMgd2FyIHNpY2ggZGVyIEJlZmFuZ2VuaGVpdCBzZWluZXMgWmV1Z2VuIGR1cmNoYXVzIGJld3Vzc3QsIGFuZGVyZXJzZWl0cword3Vzc3RlIGVyIG51ciB6dSBnZW5hdSwgZGFzcyBlaW4gR2VoZW5rdGVyIG5pZW1hbHMgIGF1c3JlaWNodCwJZGVuICBCbHV0ZHVyc3QKK2RlcyBNb2JzIHp1IHN0aWxsZW4uIEVyICBob2IgIGRlbW9uc3RyYXRpdiAgZGllICBBcm1lLgkiVHliYWx0ICBoYXQgIE1lcmN1dGlvCitlcnN0b2NoZW4sIGJldm9yIGVyIHNlbGJzdCBlcnN0b2NoZW4gd3VyZGUuIE1pciBzY2hlaW50LCBsaWViZQlGcmF1ICBDYXB1bGV0LAorZGFzcyBSb21lbyBudXIgZGVtIFJhY2hld3Vuc2NoIGRlciBGYW1pbGllIE1vbnRhZ3VlIEdlbnVlZ2UgZ2V0YW4gaGF0LiIKKworSGVyciBNb250YWd1ZSB6YXVkZXJ0ZSBuaWNodCwgaW4gZGllIGdsZWljaGUgS2VyYmUgIHp1CWhhdWVuLgkiUm9tZW8gIGhhZXR0ZQord29obCBkaWUgQXJiZWl0IEhlcnJuIEVzY2FsdXMgdWViZXJsYXNzZW4gc29sbGVuLCBhYmVyIGVyICBoYXQJc2ljaGVybGljaCAgaW0KK0FmZmVrdCBnZWhhbmRlbHQuIFdhciBzb3p1c2FnZW4gbnVyIEhlbmtlci4iCisKK0ZyYXUgQ2FwdWxldCBzY2huYXBwdGUgbmFjaCBMdWZ0LiAiSGVua2VyPyIKKworRXNjYWx1cywgZGVtIGRpZSBTaXR1YXRpb24genUgZW50Z2xlaXRlbiBkcm9odGUsIGhvYiBkaWUgSGFuZC4gIlNjaGx1c3MuIFJvbWVvCitoYXQgbWVpbmUgR2VyaWNodHNob2hlaXQgdW50ZXJncmFiZW4uIEFsc28gdmVyYmFubmUgaWNoICBpaG4uICBGdWVyICBkZW4gIE1vcmQKK3dpbGwgaWNoICB3ZWl0ZXIgIGtlaW5lICBTdHJhZmUgIHZlcmhhZW5nZW4sICB3ZWlsICBpY2ggIFR5YmFsdCAgbmljaHQJYW5kZXJzCitiZWhhbmRlbHQgaGFldHRlLiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTYgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFkNGJhCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTYKQEAgLTAsMCArMSwyMTIgQEAKK0RFUiBEUklUVEUgQUtUCisJRElFIFpXRUlURSBTWkVORQorCitKdWxpYSBzYXNzIGF1ZiBkZW0gUmFzZW4sIHN0YXJydGUgaW4gZWluZW4gWmllcnRlaWNoIHVuZCBzZXVmenRlIHRpZWYuCisKK1VsbyBrbmlmZiBlaW4gQXVnZSB6dS4gIldhcyBzaWUgd29obCBoYXQ/IiwgZmx1ZXN0ZXJ0ZSBzaWUgQXp6dXJvIHp1LgorCisiWnV2aWVsIFNvbm5lPyIsIHZlcm11dGV0ZSBBenp1cm8uCisKK0VpbiB3ZWl0ZXJlciBTZXVmemVyIEp1bGlhcyBsaWVzcyBkaWUgIEJlaWRlbiAgd2llZGVyICBoaW51bnRlciAgc2VoZW4uICBKdWxpYQorZXJncmlmZiBlaW5lbiBTdGVpbiwgd29nIGlobiBuYWNoZGVua2xpY2ggaW4gZGVyIEhhbmQgdW5kIHdhcmYgaWhuICBkYW5uICBuYWNoCitkZW0gU3BpZWdlbGJpbGQgZGVyICBTb25uZSAgaW0JVGVpY2guCSJHZWggIGRvY2ggIHdlZy4iLCAgZm9yZGVydGUgIHNpZSAgZGllCit1bm5hY2hnaWViaWdlIFNvbm5lIGF1Zi4KKworIkFiZXIgd2FydW0gZGVubiBibG9zcz8iLCBlbnRmdWhyIGVzIFVsbyBsYXV0ZXIgYWxzIGdlcGxhbnQuCisKK0p1bGlhIGJsaW56ZWx0ZS4gIldlaWwgZHUgc3RvZXJzdC4gV2VubiBkdSB1bnRlcmdlZ2FuZ2VuICBiaXN0LCAga29tbXQgIFJvbWVvLgorQWxzbyB0dSBtaXIgZWlubWFsIGVpbmVuIEdlZmFsbGVuIHVuZCBiZWVpbCBkaWNoLiIgU2llIHZlcmxlZ3RlIHNpY2ggYXVmIExpc3QuCisiR3VjayBtYWwsIHdlbm4gZHUgYXVjaCBudXIgZWluIGJpc3NjaGVuIHNjaG5lbGxlciB3YWVyZXN0LCBkYW5uIGtvZW5udGVzdCAgZHUKK2RpY2ggdmllbCBzY2huZWxsZXIgYXVzcnVoZW4gdW5kIHZpZWxsZWljaHQgbm9jaCBlaW5lIFdlaWxlIGxlc2VuLCBvZGVyIHNvLiIKKworQXp6dXJvIHN0b2VobnRlLiAiQWxzIG9iIGRpZSBTb25uZSBkYSBlaW5lbiBFaW5mbHVzcyBkcmF1ZiBoYWV0dGUuIFVuZCB3ZWxjaGVzCitCdWNoIHNvbGx0ZSBzaWUgd29obCBsZXNlbj8gVmVyYnJlbm50IGRvY2ggc29mb3J0LiIgRXIgIHNjaHVldHRlbHRlICBkZW4gIEtvcGYKK3VlYmVyIHNvdmllbCBVbnZlcm51bmZ0LgorCisiU2llIHdlaXNzIGVzIGphIG5pY2h0IGJlc3Nlci4iIFVsbyB3YXIgYmVyZWl0LCBKdWxpYSBkaWUgSWdub3JhbnogaWhyZXIgIFplaXQKK25pY2h0IGFuenVsYXN0ZW4uCisKK0p1bGlhIHNjaGF1dGUgbmFjaCBXZXN0ZW4uICJJY2ggd3Vlc3N0ZSB6dSBnZXJuZSwgd2FzICBkdSAgYW0gIGxpZWJzdGVuICBpc3N0LAorTmFjaHQsCWRhbm4gIGtvZW5udGUgIGljaCAgZGljaCAgYW5sb2NrZW4gIHVuZCAgZHUgIGthZW1lc3QgIHNjaG5lbGxlci4iICBTaWUKK2xhZWNoZWx0ZS4gIlVuZCBtaXQgZGlyIGtvbW10IFJvbWVvLiIKKworIlVuZCBvYiBlciAga29tbXQuIiAgQXp6dXJvICB2ZXJzdWNodGUgIGVpbiAgSGVjaGVsbiAgdW5kICB3YXJ0ZXRlICBhdWYgIGVpbmVuCitSaXBwZW5zdG9zcyB2b24gVWxvLiBBbHMgZGllc2VyIGF1c2JsaWViLCAgYmxpY2t0ZSAgZXIJdmVyYmx1ZWZmdCAgYXVmICBzZWluZQorR2VmYWVocnRpbi4gIFVsbyAgc2NoYXV0ZSAgYW5nZXN0cmVuZ3QJbmFjaCAgV2VzdGVuICB1bmQgICBzY2hpZW4gICBhZWhubGljaGUKK1VlYmVybGVndW5nZW4gYW56dXN0ZWxsZW4gd2llIEp1bGlhLgorCitFaW4gd2VpdGVyZXIgU3RlaW4gd2FuZGVydGUgaW4gSnVsaWFzIEhhbmQgdW5kIGFobnRlIG5pY2h0cyB2b24gZGVtIFNjaGlja3NhbCwKK2RhcyBpaG4gZXJ3YXJ0ZXRlOiBFciBmbG9nIHNlaW5lbSBCcnVkZXIgbmFjaCBpbiBkZW4gVGVpY2guICJEYSwgc28gd2VyZmUgIGljaAorZGljaCB3ZWcsIEp1bmdmcmFldWxpY2hrZWl0LiIKKworQXp6dXJvIGtpY2hlcnRlLiAiV2VubiBkb2NoIGFsbGUgRnJhdWVuLi4uIgorCitVbG8gc2NobmF1YnRlLgorCisiRnVlciBtZWluZW4gUm9tZW8uLi4iIEp1bGlhIGJyYWNoIGFiIHVuZCBlaW4gZ2llcmlnZXIgQXVzZHJ1Y2sgdHJhdCAgYXVmICBpaHIKK0dlc2ljaHQuICJNRUlOIFJvbWVvLCB3aWUgZGFzIGtsaW5ndCEiCisKK1dhZWhyZW5kIFVsbyB2ZXJzdGFlbmRuaXN2b2xsIG5pY2t0ZSwgd2FuZCBBenp1cm8gc2ljaCBiZWkgSnVsaWFzIFdvcnRlbi4KKworSnVsaWEgc2NoYXV0ZSBob2ZmbnVuZ3N2b2xsIHp1bSBIaW1tZWwsIGFscyBkaWVzZXIgZHVua2xlciAgd3VyZGUgIHVuZAlkcm9odGUKK2Rhbm4gZWluZXIgdm9yd2l0emlnZW4gV29sa2UgbWl0IGRlbSBGaW5nZXIuICJXaWxsc3QgbWljaCByZWlubGVnZW4sIHdpZT8gIEFscwora29lbm50ZXN0IGR1IGVpbmUgTmFjaHQgc2Vpbi4iIFNpZSB6b2cgZGllIE5hc2UgIGtyYXVzICB1bmQgIGxpZXNzICBzaWNoICBkYW5uCitoaW50ZW51ZWJlciBmYWxsZW4uICJBbGxlcmRpbmdzIHNpZWhzdCBkdSBmYXN0IGF1cyB3aWUgbWVpbiBSb21lby4iCisKK0F6enVybywgZGVyIGtlaW5lcmxlaSBBZWhubGljaGtlaXQgZmVzdHN0ZWxsZW4ga29ubnRlLCBzYWggUG9sbHksIGRpZSBzbyByYXNjaAoraWhyZSBhbHRlbiBCZWluZSBzaWUgdHJhZ2VuIHdvbGx0ZW4sIHp1IEp1bGlhIGdlbGF1ZmVuCWthbS4gIEluICBpaHJlbiAgQXJtZW4KK3RydWcgc2llIGVpbiBCdWVuZGVsLCBkYXMgc2ljaCBiZWltICBOYWVoZXJrb21tZW4gIGFscwllaW5lICBhdWZnZXJvbGx0ZSAgdW5kCitob2ZmbnVuZ3Nsb3MgaW5laW5hbmRlciB2ZXJrbm90ZXRlIFN0cmlja2xlaXRlciBlbnRwdXBwdGUuCisKK0p1bGlhLCBkaWUgZGFzIFNjaG5hdWZlbiBQb2xseXMgaG9lcnRlLCBub2NoIGVoZSBzaWUgIGlocmUgIEFtbWUgIHNhaCwJc3ByYW5nCithdWYuICJQb2xseSEgSGFzdCBkdSBkaWUgTGVpdGVyPyIKKworIkxlaXRlciwgamFqYWphLCBkaWUgTGVpdGVyIGhhYiBpY2guIFNvZmVybiBtYW4gZGllc2VuIFNlaWxrbnViYmVsICBub2NoICBlaW5lCitMZWl0ZXIgbmVubmVuIGthbm4uIiBQb2xseSBsaWVzcyAgZGllICBMZWl0ZXIgIGZhbGxlbiAgdW5kICB3aXNjaHRlICBzaWNoICBkZW4KK1NjaHdlaXNzIHZvbiBkZXIgU3Rpcm4uCisKK0p1bGlhIGJldHJhY2h0ZXRlIFBvbGx5ICBrcml0aXNjaC4gICJEdSAgc2llaHN0ICBhdXMsICBhbHMgIGhhZXR0ZXN0ICBkdSAgZWluZQorc2NobGVjaHRlIE5hY2hyaWNodC4iCisKKyJEdSBsaWViZSBHdWV0ZSwgamEsIGFsbGVyZGluZ3MgZWluZSBzY2hsZWNodGUgTmFjaHJpY2h0LiAgV2VpbCAgZXIgIHRvdCAgaXN0LgorQWNoLCBqZXR6dCBpc3QgYWxsZXMgdm9yYmVpIHVuZCB3aXIga29lbm5lbiB1bnMgZ2VyYWRlIHNvIGd1dCAgYXVmaGFlbmdlbiAgbWl0CitkaWVzZXIgdW5zZWxpZ2VuIExlaXRlci4iIFNpZSByYW5nIGRpZSBIYWVuZGUuICJXZWlsIGVyIG5hZW1saWNoIHRvdCAgaXN0ICB1bmQKK25pZSB3aWVkZXIga29tbXQuIgorCitKdWxpYSBlcmJsZWljaHRlIHVuZCBzY2hsdWNrdGUuICJXYXM/IgorCisiSWNoIHNhZyBkb2NoLCBlciBpc3QgdG90LiIKKworIkRhcyBrYW5uIGRvY2ggbmljaHQgd2FociBzZWluLiIgSnVsaWEgc2NodWV0dGVsdGUgZGVuIEtvcGYuCisKKyJEb2NoLCBhbGxlcmRpbmdzIGlzdCBlcyAgd2Foci4gIERhcyAgaGFldHRlICBpY2ggIFJvbWVvICBudW4gIHdpcmtsaWNoICBuaWNodAorenVnZXRyYXV0ISIKKworRGllIEJsYWVzc2UgaW4gSnVsaWFzIEdlc2ljaHQgd2ljaCBoZWt0aXNjaGVuIEZsZWNrZW4uICJEZXIgVGV1ZmVsICBzb2xsICBkaWNoCitob2xlbiwgUG9sbHkhIiwgc2NoaW1wZnRlIHNpZS4KKworIldhcywgbWljaCBhdWNoIG5vY2g/IiBQb2xseSB3YXIgZW50c2V0enQuICBTaWUgIHd1c3N0ZSAgendhciwgIGRhc3MgIHNpZSAgbWl0CitlaW5pZ2VyIFNpY2hlcmhlaXQgbmljaHQgZGFzIFBhcmFkaWVzIHNlaGVuIHd1ZXJkZSwgZG9jaCBzbyAgc2NobmVsbCAgZ2VkYWNodGUKK3NpZSBuaWNodCBpaHJlbiBQbGF0eiB6dSByYWV1bWVuLgorCisiU2NobGVjaHRlIE5hY2hyaWNodGVuICBrYW5uICBtYW4gIG5pY2h0ICBwcnVlZ2VsbiwgIHdvaGwgIGFiZXIgIGRlbiAgQm90ZW4uIiwKK2tvbW1lbnRpZXJ0ZSBVbG8uCisKKyJJY2ggd29sbHRlLCBkdSBiZWthZW1lc3QgZWluZW4gZWluemlnZW4gU2F0eiB6dXNhbW1lbmhhZW5nZW5kIGhlcmF1cywgUG9sbHkuIgorSnVsaWFzIEdlZHVsZCBoYXR0ZSBzaWNoICB2ZXJhYnNjaGllZGV0ICB1bmQgIHNpY2ggIHp1CUphbWVzICBpbiAgZGllCUt1ZWNoZQorYmVnZWJlbiwgd28gc2llIGdlbWVpbnNhbSBhbSAgU2hlcnJ5ICBuYXNjaHRlbi4gICJBbHNvLCAgZGEgIGR1ICBlaW5lciAga2xhcmVuCitBdXNzYWdlIG5pY2h0IGZhZWhpZyBiaXN0OiBMZWJ0IFJvbWVvPyBVbmQgd2VoZSwgZHUgIHNhZ3N0ICBuaWNodCAgZWluZmFjaCAgSmEKK29kZXIgTmVpbiEiIElociBCbGljayB3YW5kZXJ0ZSB6dSBkZW4gU2VpbGVuIHVuZCB2b24gZG9ydCB6dSBQb2xseS4KKworUG9sbHksIGRpZSBhaG50ZSwgd2FzICBKdWxpYXMgIEJsaWNrICBiZWRldXRldGUsICBob2x0ZSAgTHVmdC4JIkljaCAgaGFiICBpaG4KK2dlc2VoZW4sIGRhcyBnYW56ZSBIZW1kIHZvbGwgQmx1dC4gVW5kIGRhcyBpc3QgZG9jaCAgc28gIHNjaHdlciAgYXVzenV3YXNjaGVuLgorSGVycmplbWluZWgsIGVyIHNhaCBzbyB0cmF1cmlnIGF1cywgYmxhc3MgdW5kIHZvbGxlciBCbHV0IHdpZSBlciB3YXIuIiBUcmF1cmlnCitzYWggc2llIEp1bGlhIGFuIHVuZCBob2ZmdGUsIGVpbiB3ZW5pZyBNaXRsZWlkIHp1IGVycmVnZW4uICAiSWNoICBrb25udGUgIG1pY2gKK25pY2h0IG1laHIgYXVmIGRlbiBCZWluZW4gaGFsdGVuLiIKKworSnVsaWEgd3VyZGUgd2llZGVyIGJsZWljaC4gIkRhbm4gaXN0IHdpcmtsaWNoIGFsbGVzIGF1cy4iCisKK1BvbGx5IHplcmRydWVja3RlIGVpbiBwYWFyIFRyYWVuZW4gbWl0IGlocmVtIHZvbHVtaW5vZXNlbiAgVGFzY2hlbnR1Y2guICAiQWNoLAoraWNoIG1vY2h0ZSBpaG4gc28gZ2Vybiwgd2VpbCBlciBkb2NoIGltbWVyIGhvZWZsaWNoIHVuZCBmcmV1bmRsaWNoIHdhci4gIEFybWVyCitUeWJhbHQsIGpldHp0IGJpc3QgZHUgdG90IHVuZCBrYW5uc3QgbmllIG1laHIgbmV0dCBzZWluLiIKKworQWxzIEp1bGlhICBkYWVtbWVydGUsICB3YXMgIFBvbGx5ICBzYWd0ZSwgIGF0bWV0ZSAgdGllZiAgZWluICB1bmQgIGZsdWNodGUgIHNvCithdXNkYXVlcm5kLCBkYXNzIEF6enVybyBzaWUgc3RhdW5lbmQgYW5ibGlja3RlLiAiSWNoIGFobnRlIGphIG5pY2h0LCBkYXNzICBzaWUKK3NvbGNoZSBXb3J0ZSBrZW5udCEiLCBtdXJtZWx0ZSBlciBhbmVya2VubmVuZC4KKworQXVjaCBQb2xseSB3YXIgb2ZmZW5zaWNodGxpY2ggZW50c2V0enQuICJLaW5kLCB3aWUga2FubnN0IGR1IG51ciEiCisKK0p1bGlhIGhpbmdlZ2VuIHdhciBsYWVuZ3N0IGplbnNlaXRzIGFsbGVuIGdlc2l0dGV0ZW4gQmVuZWhtZW5zLiAiV2VubiBkdSBqZXR6dAorbmljaHQgYXVnZW5ibGlja2xpY2ggc2Fnc3QsIHdlciB0b3QgaXN0LCBtZWluIExpZWJsaW5nc3ZldHRlciBUeWJhbHQgb2RlciBtZWluCitIZXJ6bGllYnN0ZXIgUm9tZW8sIGRhbm4gYnJpbmdlIGljaCBkaWNoIHVtISIKKworUG9sbHkgendlaWZlbHRlIG5pY2h0IGRhcmFuLCBkYXNzIEp1bGlhIGdlbmF1IGRhcyB0dW4gd3VlcmRlLiAiVHliYWx0IGlzdCAgdG90Cit1bmQgUm9tZW8gaGF0IGlobiB1bWdlYnJhY2h0LiBSb21lbyBpc3QgdmVyYmFubnQuIgorCisiU2llaCBhbiwgd2FzIGVpbmUgZ2V6aWVsdGUgRHJvaHVuZyBuaWNodCBhbGxlcyBlcnJlaWNoZW4gIGthbm4uIiAgVWxvICBoYWV0dGUKK0p1bGlhIGFwcGxhdWRpZXJ0LCB3ZW5uIGlocmUgRmx1ZWdlbCAgZGFzICB6dWdlbGFzc2VuICBoYWV0dGVuLiAgIlNvZ2FyICBQb2xseQorYmVrb21tdCBlaW5lIGtsYXJlIEF1c3NhZ2UgenVzdGFuZGUuIgorCitHZXN0YXR0ZW4gU2llIG1pciwgbGllYmUgTGVzZXJpbm5lbiB1bmQgTGVzZXIsIGFuIGRpZXNlciBTdGVsbGUgIGVpbmVuCU1vbWVudAorenUgdmVyd2VpbGVuLiBCZXdlaXN0IGRpZSBHZXNjaGljaHRlIG5pY2h0IGFuIGRpZXNlciAgU3RlbGxlLCAgZGFzcyAgYXVjaCAgZGllCitHb2V0dGVyIGRlciBNeXRoZW4gZWluZW4gZ2V3aXNzZW4gU2lubiBmdWVyIEh1bW9yIGhhYmVuPyBEb2NoIGxhZW5nZXIgd2lsbCBpY2gKK1NpZSBuaWNodCBhdWZoYWx0ZW4sIHNjaG9uIHNlaGVuIFVsbyB1bmQgQXp6dXJvIG1pY2ggd3VldGVuZCBhbiwgd2VpbCBpY2ggIGRhcworQmFuZCBhbmdlaGFsdGVuIGhhYmUgdW5kIGRlbiBBbmJsaWNrIGVpbmVyIHZlcndpcnJ0ZW4gIFBvbGx5ICBlYmVuc28gIGdlbmllc3NlCit3aWUgZGVuIGRlciBpbm5lcmxpY2ggemVycmlzc2VuZW4gSnVsaWEuCisKKyJTaWUgc2l0enQgd2lya2xpY2ggaW4gZGVyIFBhdHNjaGUsIG5pY2h0PyIgVWxvICBrb25udGUgIHNpY2ggIGVpbiAgaGFlbWlzY2hlcworRmVkZXJzY2h1ZXR0ZWxuIG5pY2h0IHZlcmtuZWlmZW4uCisKK0p1bGlhIHJhbm50ZSB2ZXJ6d2VpZmVsdCB1bSBkZW4gVGVpY2ggaGVydW0uICJXYXMgc29sbCAgaWNoICBudW4gIGRlbmtlbj8gIFdpZQora29ubnRlIFJvbWVvIGRhcyBudXIgdHVuPyBIYXQgZXIgendlaSBHZXNpY2h0ZXI/IEhhdCBlciBtaWNoIGFuZ2Vsb2dlbj8gV29sbHRlCitlciBuaWNodCBzZWluZSBnYW56ZSBGYW1pbGllIGF1ZmdlYmVuPyBIYXQgZXIgbWljaCBzbyBoaW50ZXJnYW5nZW4/IEhhdCBlciAgYW0KK0VuZGUgbnVyIGdlc2FndCwgZXIgbGllYmUgbWljaCwgdW0gbWljaCB1bmQgbWVpbmUgRmFtaWxpZSBkYW1pdCB6dSAga3JhZW5rZW4/IgorU2llIGRyZWh0ZSBlaW5lIHdlaXRlcmUgUnVuZGUgdW0gZGVuIFRlaWNoLgorCisiTWFlbm5lciEiLCBmbHVjaHRlIFBvbGx5IG1pdCBFbGFuLiAiU28gc2luZCAgc2llICBkb2NoICBhbGxlOiAgSGludGVybGlzdGlnZSwKK2hldWNobGVyaXNjaGUsIGhhbGJzZWlkZW5lIEhhemFyZGV1cmUhIiBTaWUga3JhbXRlIGluICBpaHJlciAgSGFuZHRhc2NoZSAgbmFjaAorZWluZXIgZmxhY2hlbiBGbGFzY2hlLiAiRGEgaGlsZnQgbnVyIG5vY2ggTWVkaXppbi4iCisKK0F6enVybywgZGVyIGRlbiBHZXJ1Y2ggdm9uIFBvbGx5cyBNZWRpemluIGdlbnVlc3NsaWNoIGVpbnNvZywgaGFldHRlIGlociBzb2dhcgorZGllIFNjaG1hZWh1bmcgYWxsZXIgTWFlbm5lciB2ZXJnZWJlbiwgd2VubiAgc2llICBpaG0gIG51ciAgZWluICBwYWFyICBUcm9wZmVuCithYmdlZ2ViZW4gaGFldHRlLgorCisiTmljaHRzIGRhISIgSnVsaWEgc2NobHVnIFBvbGx5IGRpZSBGbGFzY2hlIGF1cyBkZXIgSGFuZC4gIkltICBIYWxzICBzb2xsICBkaXIKK2RhcyBaZXVnIHN0ZWNrZW4gYmxlaWJlbiwgd2VpbCBkdSBSb21lbyBzbyBldHdhcyBuYWNoc2Fnc3QuIgorCitCZWRhdWVybmQgc2NoYXV0ZW4gQXp6dXJvIHVuZCBQb2xseSAgYXVmICBkaWUgIEZsYXNjaGUsICBkaWUgIGlocmVuICBrb3N0YmFyZW4KK21lZGl6aW5pc2NoZW4gSW5oYWx0IGFuIGVpbiBwYWFyIFd1ZXJtZXIgIHZlcnRlaWx0ZS4gICJEdSAga2FubnN0ICBkb2NoICBuaWNodAorc2FnZW4sIGRhc3MgZGVyIE1hbm4sIGRlciAgZGVpbmVuICBWZXR0ZXIgIHVtZ2VicmFjaHQgIGhhdCwgIGVpbiAgYW5zdGFlbmRpZ2VyCitpc3QuIiwgbWVpbnRlIFBvbGx5IHZlcnN0YWVuZG5pc2xvcy4KKworIkltbWVyaGluIGlzdCBlciBtZWluIEVoZW1hbm4uIiwgd2llcyBKdWxpYSBpaHJlIEFtbWUgenVyZWNodC4gIlVuZCAgd2VubiAgaWNoCittaWNoIG5pY2h0IHNlaHIgdGFldXNjaGUsIHdpcmQgUm9tZW8gc2Nob24gIGVpbmVuICBHcnVuZCAgZ2VoYWJ0ICBoYWJlbi4iICBTaWUKK3VlYmVybGVndGUgdW5kIGlociBHZXNpY2h0IGhlbGx0ZSBzaWNoIGF1Zi4gIk5hdHVlcmxpY2gsIHNvICB3aXJkICBlcyAgZ2V3ZXNlbgorc2VpbiEgTm90d2VociEgVHliYWx0IHdvbGx0ZSBtZWluZW4gUm9tZW8gdW1icmluZ2VuIHVuZCAgUm9tZW8JaGF0ICBzaWNoICBudXIKK2dld2VocnQuIiBCZWZyaWVkaWd0IHVlYmVyIGRpZXNlIExlc2FydCBob2IgSnVsaWEgZGllIEZsYXNjaGUgd2llZGVyICBhdWYgIHVuZAorcmVpY2h0ZSBzaWUgUG9sbHksIGRpZSBkZW4gUmVzdCBkZXIgTWVkaXppbiBpbiBzaWNoIGhpbmVpbnNjaHVldHRldGUuCisKK0p1bGlhIHNhaCBuYWNoZGVua2xpY2ggYXVmIEF6enVybywgZGVyIHNpY2ggbWl0IGRlbiAgV3Vlcm1lcm4gIHVtICBkaWUJa2xlaW5lCitQZnVldHplIHN0cml0dC4gIlZpZWwgc2NobGltbWVyIGlzdCBlaW5lICBhbmRlcmUgIFNhY2hlLiAgUm9tZW8gIGlzdCAgdmVyYmFubnQKK3dvcmRlbi4gSmV0enQgYmluIGljaCBrYXVtIGRyZWkgU3R1bmRlbiB2ZXJoZWlyYXRldCwgYWJlciBtZWluZSBIb2NoemVpdHNuYWNodAorYmVrb21tZSBpY2ggbmljaHQuIgorCitVbG8ga29ubnRlIEp1bGlhcyBHZXNpY2h0c2F1c2RydWNrIG5pY2h0IGRldXRlbi4gIlNvIHNjaGxpbW0gaXN0IGRhcyBudW4gIGF1Y2gKK3dpZWRlciBuaWNodC4iCisKKyJEb2NoLiIgQXp6dXJvIHd1c3N0ZSB3b2hsLCAgZGFzcyAgSnVsaWEgIHdlbmlnZXIgIGRhcnVudGVyICBsaXR0LCAgZGFzcyAgaWhyZQorRWhlc2NobGllc3N1bmcgamV0enQgbmljaHRpZyB6dSBzZWluIGRyb2h0ZS4gIlNpZSBoYXQgT3ZpZCBnZWxlc2VuLiIKKworIk1ldGFtb3JwaG9zZW4/IiwgZnJhZ3RlIFVsby4KKworIkFycyBhbWFuZGkuIgorCisiT2guIiBVbG8gd2FyIGVyc3RhdW50LgorCisiV28gc2luZCBlaWdlbnRsaWNoIG1laW5lIEVsdGVybj8iLCBmcmFndGUgSnVsaWEuCisKKyJTaWUgaGFsdGVuIGJlaSBUeWJhbHQgZGllIFRvdGVud2FjaGUuIEljaCBrYW5uICBkaWNoICBoaW5icmluZ2VuLCAgYWxsZXJkaW5ncworc29sbHRlc3QgZHUgZGlyIHZvcmhlciBlaW4gZnJpc2NoZXMgVGFzY2hlbnR1Y2ggaG9sZW4uIgorCisiTmVpbiwgZXMgcmVpY2h0LCB3ZW5uICBzaWUgIEhldWxlbiAgdW5kICBaYWVobmVrbmlyc2NoZW4gIGRlbW9uc3RyaWVyZW4sICBpY2gKK2JyYXVjaGUgIGRhICBuaWNodCAgbWl0enVtYWNoZW4uICBBdXNzZXJkZW0gIG11ZXNzdGUgIGljaCAgbWljaCAgenVyICAgSGFlbGZ0ZQordmVyc3RlbGxlbi4iIEp1bGlhIHN0cmFmZnRlIGRpZSBTY2h1bHRlcm4uICJJY2ggZ2VoZSBhdWYgbWVpbiBaaW1tZXIgdW5kIHdhcnRlCithdWYgbWVpbiBFbmRlLiIKKworIkRhZnVlciBiaXN0IGR1IG5vY2ggenUganVuZywgS2luZC4gRXMgd2lyZCB3b2hsIG5vY2ggZWluZSBXZWlsZSBkYXVlcm4uIgorCisiV2VubiBSb21lbyBtZWluZSBKdW5nZnJhZXVsaWNoa2VpdCBuaWNodCBiZWtvbW10LCBkYW5uIGF1Y2gga2VpbiBhbmRlcmVyICBhbHMKK1RvZCwgZGVyIG9obmVoaW4gYW0gRW5kZSBhbGxlcyBiZWtvbW10LiIKKworIkhNPyIsIGZyYWd0ZSBlaW5lIGR1bXBmZSBTdGltbWUgYXVzIGRlbSBTY2hhdHRlbiBkZXIgR2FydGVubWF1ZXIuCisKKyJOaWNodCBqZXR6dC4iIFVsbyBzY2hldWNodGUgVG9kIGRhdm9uLgorCitQb2xseSwgZGllIEp1bGlhcyBCbGFlc3NlIG1pc3N2ZXJzdGFuZCB1bmQgYWxzIFN1aXppZGFic2ljaHQgIGRldXRldGUsCXVlYmVyLQorbGVndGUgYW5nZXN0cmVuZ3QuICJEYW5uIGdpYnQgZXMgd29obCBrZWluZSBhbmRlcmUgTW9lZ2xpY2hrZWl0LCBhbHMgZGFzcyBpY2gKK1JvbWVvIGhlcmJlaXNjaGFmZmUuIEVyIGhhdCBzaWNoIGJlaSBCcnVkZXIgTGF3cmVuY2UgdmVyc3RlY2t0LiIKKworIldhcnVtIGhhc3QgZHUgZGFzIG5pY2h0IGVoZXIgZ2VzYWd0PyIgSnVsaWEgcmlzcyBzaWNoIGRlbiAgUmluZyAgdm9tICBGaW5nZXIsCitkZW4gc2llIGdlcmFkZSBlcnN0IHZvbiBSb21lbyBiZWtvbW1lbiBoYXR0ZS4gIkJyaW5nIGlobSBkZW4gUmluZyB1bmQgc2FnIGlobSwKK2Rhc3MgZXIgaWhuIG1pciB3aWVkZXJnZWJlbiBzb2xsLiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTcgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQ4MTZlCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMTcKQEAgLTAsMCArMSwxNTAgQEAKK0RFUiBEUklUVEUgQUtUCisJRElFIERSSVRURSBTWkVORQorCitCcnVkZXIgTGF3cmVuY2UsIGRlciBuaWNodCB3ZW5pZ2VyIG5ldWdpZXJpZyB3YXIgYWxzIGFuZGVyZSwgIGhhdHRlICBzaWNoICBhdWYKK2RlbSBNYXJrdHBsYXR6IGhlcnVtZ2V0cmllYmVuLCBiaXMgZXIgdm9uIFJvbWVvcyBWZXJiYW5udW5nIGhvZXJ0ZS4gTnVuIHJhbm50ZQorZXIsIHNvIHNjaG5lbGwgaWhuIHNlaW5lIEJlaW5lIHRyYWdlbiB3b2xsdGVuIHp1IHNlaW5lciBLYXBlbGxlICB6dXJ1ZWNrLiAgQWxzCitlciBzaWUgdm9lbGxpZyBhdXNzZXIgQXRlbSBlcnJlaWNodGUsIGZhbmQgZXIgUm9tZW8sIGRlciBkYXMgIEdlc2ljaHQgIGluICBkZW4KK0hhZW5kZW4gdmVyZ3JhYmVuIGhpZWx0LgorCisiUm9tZW8hIiBMYXdyZW5jZSBidWVja3RlIHNpY2ggc3RvZWhuZW5kIHp1IHNlaW5lbSBGcmV1bmQgIGhlcnVudGVyLiAgIkhhc3QuLi4KK2Jpc3QuLi4gd2lyc3QuLi4/IiBFciBzY2huYXVmdGUuCisKK1JvbWVvIHNhaCBpaG4gbWl0IHRydWViZW4gQXVnZW4gYW4uICJEcmVpbWFsIGphLiIKKworVmVyd2lycnQgcnVuemVsdGUgTGF3cmVuY2UgZGllIFN0aXJuLgorCitFaW4gZHVlbm5lcyBMYWVjaGVsbiBodXNjaHRlIHVlYmVyIFJvbWVvcyBHZXNpY2h0LCBzYWggc2VpbmUgZ2VmdXJjaHRlCVN0aXJuLAorYmV0cmFjaHRldGUgZGllIHJhc3Rsb3Mga25ldGVuZGVuIEhhZW5kZSB1bmQgbWFjaHRlIHNpY2ggdm9uIGRhbm5lbi4gIkljaCBoYWJlCitUeWJhbHQgZXJzdG9jaGVuLCBpY2ggYmluIGdlZmxvaGVuICB1bmQgIGljaCAgd2VyZGUgIG1pY2ggIGF1ZmhhZW5nZW4gIGxhc3Nlbi4KK0RyZWltYWwgamEsIGFsc28uIgorCisiV2VyIHJlZGV0IGRlbm4gaGllciB2b24gQXVmaGFlbmdlbj8iCisKKyJJY2ggd2VyZGUgIG5pY2h0ICBkYXZvbmtvbW1lbiwgIHdlaXNzdCAgZHUuICBFc2NhbHVzICBoYXQgIHppZW1saWNoICBkZXV0bGljaAorZ2VtYWNodCwgd2FzIGVyIHZvbiBSYW5kYWxlIGluIGRlbiBTdHJhc3NlbiBoYWVsdC4iCisKKyJEb2NoLCBkb2NoLiIsIGJlcnVoaWd0ZSBCcnVkZXIgTGF3cmVuY2UgaWhuICJEdSBrb21tc3Qgc2Nob24gIGRhdm9uLiAgRXNjYWx1cword2FyIGRlciBBbnNpY2h0LCBkYXNzIGVyIFR5YmFsdCBvaG5laGluIGhhZXR0ZSBoYWVuZ2VuIG11ZXNzZW4sIHdlaWwgZXIgdm9yaGVyCitNZXJjdXRpbyB1bWdlYnJhY2h0IGhhdC4gSmV0enQgdmVydXJ0ZWlsdCBlciBkaWNoIG51ciB6dXIgVmVyYmFubnVuZywgd2VpbCAgZHUKK2lobSB2b3JnZWdyaWZmZW4gaGFzdC4iCisKK1JvbWVvcyBBdWdlbiB3ZWl0ZXRlbiBzaWNoLiAiVmVyYmFubnVuZz8gRGFzIGlzdCBqYSBub2NoIHNjaGxpbW1lciEiCisKKyJVbnNpbm4uIFdlbmlnc3RlbnMgYmxlaWJzdCBkdSBhbSBMZWJlbi4iCisKKyJVbmQgd2FzIGZ1ZXIgZWluIHd1bmRlcmJhcmVzIExlYmVuIGRhcyBpc3QuIiBSb21lbyBrbmlyc2NodGUgdm9yIFZlcmJpdHRlcnVuZworbWl0IGRlbiBaYWVobmVuLiAiSWNoIG11c3MgVmVyb25hIHZlcmxhc3NlbiB1bmQgSnVsaWEgYmxlaWJ0IGhpZXIuIgorCisiV2VubiBzY2hvbj8gRHUgbGVic3QsIHNpZSBsZWJ0OiBXYXMgd2lsbHN0IGR1IG1laHI/IgorCisiQmVpIGlociBzZWluLiIKKworIlNlaSBuaWNodCB1bmRhbmtiYXIsIEp1bmdlLiIgU28gd2FyIFJvbWVvIHNjaG9uIGxhbmdlIG5pY2h0IG1laHIgIHZvbiAgQnJ1ZGVyCitMYXdyZW5jZSBiZXplaWNobmV0IHdvcmRlbi4gIlNlbGJzdCB3ZW5uIGR1IFZlcm9uYSB2ZXJsYXNzZW4gIG11c3N0LCAgYmlzdCAgZHUKK2ltbWVyIG5vY2gganVuZyBnZW51Zy4gRHUgbGVic3QgdW5kIGthbm5zdCBpbiBSdWhlIGFid2FydGVuLCB3YXMgIHNpY2gJd2VpdGVyCitlcmdpYnQuIFZpZWxsZWljaHQga2FubnN0IGR1IGVpbmVzIFRhZ2VzIGphIHp1cnVlY2trb21tZW4uIgorCisiRWhlciBpc3QgZGllIEVyZGUgZWluZSBTY2hlaWJlLiIKKworQnJ1ZGVyIExhd3JlbmNlLCBkZXIsIGZlc3QgaW0gIERvZ21hICB2ZXJhbmtlcnQsICBzb2xjaCAga2V0emVyaXNjaGUgIEdlZGFua2VuCituaWNodCB2b24gc2VpbmVtIFNjaHVldHpsaW5nIGhvZXJlbiB3b2xsdGUsIHdhcmYgdmVyendlaWZlbHQgZGllIEhhZW5kZSBpbiBkaWUKK0x1ZnQuICJEYXMgaXN0IHNpZS4iCisKK1JvbWVvIGxhY2h0ZSBnYWNrZXJuZC4gIk5hdHVlcmxpY2guIgorCisiUm9tZW8sIHJlaXNzIGRpY2ggenVzYW1tZW4uIEVzIGlzdCBub2NoIG5pY2h0IGFsbGVyIFRhZ2UgQWJlbmQuIgorCisiRG9jaCwgZGFzIGlzdCBlcy4gT2huZSBKdWxpYSBpc3QgaW1tZXIgTmFjaHQsIG9obmUgc2llIGdpYnQgZXMga2VpbmUgU29ubmUuIgorCisiVWxvLCByZWljaCBtaXIgZWluZW4gTGFwcGVuLCBSb21lbyB0cmllZnQuIiwgZmx1ZXN0ZXJ0ZSBBenp1cm8uCisKKyJWb3IgVHJhZW5lbj8iCisKKyJWb3IgU2NobWFsei4iCisKK1VsbyBiZWFjaHRldGUgaWhuIG5pY2h0IHdlaXRlciwgc29uZGVybiByaWViIHNpY2ggZGVuIFNjaG5hYmVsIGFuIGVpbmVtIEJsYXR0LgorCitBdWNoIFJvbWVvIHdpc2NodGUgc2ljaCBkaWUgVHJhZW5lbiBhYi4gIlZlcmJhbm51bmcgaXN0IGRlc2hhbGIgc2NobGltbWVyICBhbHMKK0hhZW5nZW4sIHdlaWwgaWNoIGRhbm4gamVkZW4gVGFnIGRhcmFuCWRlbmtlbgltdXNzLCAgZGFzcyAgSnVsaWEgIGhpZXIgIGlzdC4KK1NlbGJzdCBpaHIgU2Nob3NzaHVuZCBpc3QgYmVzc2VyIGRyYW4gYWxzIGljaCwgd2VpbCBlcglpbiAgaWhyZXIgIE5hZWhlICBzZWluCitrYW5uLiBEYXMgaXN0IGVpbiBCYWVyZW5kaWVuc3QsICBkZW4gIEVzY2FsdXMgIHVuZCAgZHUJbWlyICBlcndlaXNlbiwJQnJ1ZGVyCitMYXdyZW5jZS4iCisKKyJJY2g/IiBMYXdyZW5jZSB3YXIgZWhybGljaCBlbnRzZXR6dC4KKworIkR1IGJyaW5nc3QgbWlyIGRpZSBOYWNocmljaHQsIG9kZXI/IgorCitFaW4gS2xvcGZlbiBiZXdhaHJ0ZSBCcnVkZXIgTGF3cmVuY2Ugdm9yIGRlbiBWb3J3dWVyZmVuLCBkaWUgIFJvbWVvICBub2NoICBhdWYKK2RlbiBMaXBwZW4gaGF0dGUuCisKKyJHZWggbmFjaCBoaW50ZW4sIFJvbWVvLCBpY2ggd2lsbCBuYWNoc2VoZW4sIHdlciBkYSBpc3QuIgorCitSb21lbyBoYXR0ZSBzaWNoIGF1ZiBkZW0gQm9kZW4genVzYW1tZW5nZXJvbGx0IHVuZCBzY2hsdWNoenRlIHN0aWxsICB2b3IgIHNpY2gKK2hpbi4KKworIlJvbWVvISIsIHppc2NodGUgQnJ1ZGVyIExhd3JlbmNlLiBFciB3YW5kdGUgIHNpY2ggIHp1ciAgVHVlci4gICJFaW5lbiAgTW9tZW50Citub2NoISIgVmVyendlaWZlbHQgYmxpY2t0ZSBlciB6d2lzY2hlbiBkZXIgVHVlciB1bmQgUm9tZW8gaGluICB1bmQgIGhlci4gICJXZXIKK2lzdCBkZW5uIGRhPyIKKworUG9sbHkgdHJhdCB3dWV0ZW5kIGdlZ2VuIGRpZSBUdWVyLiAiSWNoIGJyaW5nZSBlaW5lIE5hY2hyaWNodCB2b24gSnVsaWEuIgorCitSb21lbyBzY2hhdXRlIGF1Zi4KKworTGF3cmVuY2Ugb2VmZm5ldGUgZGllIFR1ZXIgdW5kIHZlcmRlY2t0ZSBtaXQgc2VpbmVyIExlaWJlc2Z1ZWxsZSBSb21lby4gQWxzIGVyCitQb2xseSBlcmthbm50ZSwgc2V1Znp0ZSBlci4gIldhcyBnaWJ0IGVzPyIKKworIkVyc3QgbXVzcyBpY2ggd2lzc2VuLCB3byBSb21lbyBpc3QuIgorCitMYXdyZW5jZSB0cmF0IHp1ciBTZWl0ZS4gIlNhbW1lbG4gU2llIGlobiBhdWYuIiwgc2NobHVnIGVyIHZvciB1bmQgZGV1dGV0ZSBhdWYKK2RhcyBIYWV1ZmNoZW4gRWxlbmQgenUgc2VpbmVuIEZ1ZXNzZW4uCisKK1BvbGx5IHNjaHVldHRlbHRlIGRlbiBLb3BmLiAiU293YXMgRHVtbWVzIGFiZXIgYXVjaCEgSmV0enQgc3RlY2tlbiAgSnVsaWEgIHVuZAorU2llIGltIGdsZWljaGVuIFNjaGxhbWFzc2VsLiBBYmVyIGRhcyBpc3QgdmVyZ29zc2VuZSBNaWxjaCwgamV0enQga25laWZlbiAgU2llCitkZW4gQS4uLiBSZWlzc2VuIFNpZSBzaWNoIHp1c2FtbWVuLCBtZWluZSBpY2ggbmF0dWVybGljaC4iCisKK1JvbWVvIHZlcnN1Y2h0ZSBlcyB1bmQgc2NoZWl0ZXJ0ZSBrbmFwcC4KKworIlNvIHNpZWh0IGVpbiBicmF2ZXIgUm9tZW8gYXVzLiIsIGxvYnRlIFBvbGx5LiAiRXMgaXN0IG5vY2ggbmljaHQgIGFsbGVyICBUYWdlCitBYmVuZCwgbWVpbiBKdW5nZS4iCisKKyJNZWluZSBSZWRlLiIsIGZ1ZWd0ZSBMYXdyZW5jZSBsYWVjaGVsbmQgaGluenUuCisKKyJXYXMgbWFjaHQgSnVsaWE/Iiwgd29sbHRlIFJvbWVvIHdpc3Nlbi4KKworIldhcyBzb2xsIHNpZSBzY2hvbiB0dW4/IFNpZSB3ZWludCB1bmQgdmVyZmx1Y2h0IFNpZSB1bmQgZGFubiB3ZWludCBzaWUgd2llZGVyCit1bmQuLi4iCisKKyJJY2gga2FubiBlcyBpaHIgbmljaHQgdmVyZGVua2VuLiBBYmVyIHdlbm4gc2VsYnN0IHNpZSBtaWNoICB2ZXJmbHVjaHQuLi4iICBFcgorYnJhY2ggYWIgdW5kIHJpc3Mgc2VpbiBNZXNzZXIgaGVyYXVzLiAiRGFubiBzYWcgaWhyLCBkYXNzIGljaCBtaXQgaWhyZW0gIE5hbWVuCithdWYgZGVuIExpcHBlbiBzdGVyYmVuIHdpbGwhIgorCitQb2xseSBvaHJmZWlndGUgaWhuLCBkYXMgTWVzc2VyIGZsb2cgaW4gZWluZSBFY2tlIHVuZCBSb21lbyBpbiBkaWUgYW5kZXJlLgorCitCcnVkZXIgTGF3cmVuY2UsIGRlc3NlbiBVZWJlcnpldWd1bmcgaWhtIGRhcyBnbGVpY2hlIEFyZ3VtZW50ICB2ZXJib3QsCXNldHp0ZQorenUgZWluZXIgUHJlZGlndCBhbi4gIkR1IGJpc3Qgd2lya2xpY2ggZWluIFZvbGx0cm90dGVsLCBSb21lby4gRXJzdCB1ZWJlcmxlYnN0CitkdSwgb2J3b2hsIFR5YmFsdCB3YWhyc2NoZWlubGljaCBkZXIgYmVzc2VyZSBGZWNodGVyIGlzdC4gRGEgaGFzdCBkdSAgR2x1ZWNrLiIKK0VyIHNjaGx1ZyBSb21lbyBkYXMgV29ydCB1bSBkaWUgT2hyZW4uICJFc2NhbHVzIGJlc3RyYWZ0IGRpY2ggbmljaHQgZnVlciBNb3JkLAorc29uZGVybiBmdWVyIFNlbGJzdGp1c3Rpei4gRGEgaGFzdCBkdSBHbHVlY2suIEp1bGlhIHRyYXVlcnQgdW0JaWhyZW4gIFZldHRlciwKK2FiZXIgUG9sbHkgaXN0IGJlc3RpbW10IG5pY2h0IGhpZXIsIHVtIGRpciB6dSBzYWdlbiwgZGFzcyBzaWUgZGljaCBuaWNodCAgbWVocgorc2VoZW4gd2lsbC4gRGEgaGFzdCBkdSBHbHVlY2suIgorCitQb2xseSBuaWNrdGUuICJBbGxlcmRpbmdzLiBIaWVyIGlzdCBkZWluIFJpbmcsIFJvbWVvLiIKKworIkp1bGlhIGdpYnQgaWhuIG1pciB6dXJ1ZWNrPyIgUm9tZW8gYmVnYW5uIGxhdXQgenUgamFtbWVybi4KKworIkR1IHNvbGxzdCBpaG4gaWhyIG5vY2ggZWlubWFsIGdlYmVuLCBUcm90dGVsLiIgIExhd3JlbmNlICBzY2hsdWcgIGRpZSAgSGFlbmRlCit6dXNhbW1lbiB1ZWJlciBzb3ZpZWwgVW52ZXJzdGFuZC4gIk1vcmdlbiByZWlzdCBkdSBhYiB1bmQgIHdhcnRlc3QgIGluLi4uIiAgRXIKK3VlYmVybGVndGUuICJTYWdlbiB3aXIsIE1hbnR1YSwgYmlzIFBvbGx5IHVuZCAgaWNoICBHZWxlZ2VuaGVpdCAgaGFiZW4sICBhbGxlbgorTGV1dGVuIHZvbiBKdWxpYXMgdW5kIGRlaW5lciBFaGUgenUgZXJ6YWVobGVuLiBEYW5uIGtvbW1zdCBkdSB6dXJ1ZWNrIHVuZCB3ZW5uCitpaHIgbmljaHQgc3RlcmJ0LCBsZWJ0IGlociBnbHVlY2tsaWNoIGJpcyB6dSBldXJlbSBFbmRlLiIgRXIgIHdhbmR0ZSAgc2ljaCAgYW4KK1BvbGx5LiAiR2VoIHp1IEp1bGlhIHVuZCBzYWcgaWhyLCBkYXNzIFJvbWVvIGtvbW10LiAgRXIgIHdlaXNzICBlcyAgendhciAgbm9jaAorbmljaHQsIGFiZXIgZXIga29tbXQuIiBXaWVkZXIgZmllbCBzZWluIEJsaWNrIGF1ZiBSb21lby4gIlNvLCBqZXR6dCAgaG9lciAgbWlyCittYWwgenUsIEp1bmdlLi4uIgorCitBenp1cm8gc3RpZXNzIFVsbyBhbi4gIktvbW0sIGRhcyBHZXdpdHRlciB3aWxsIGljaCBuaWNodCBtaXRlcmxlYmVuLiIKKworIldlbGNoZXMgR2V3aXR0ZXI/IiwgZnJhZ3RlIExhd3JlbmNlIHNjaGVpbmhlaWxpZy4KKworRGllIFR1cnRlbGtyYWVoZW4gbWFjaHRlbiBzaWNoIGViZW5zbyBzY2huZWxsIGF1cyBkZW0gU3RhdWIgd2llIFBvbGx5LgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxOCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTY4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxOApAQCAtMCwwICsxLDUzIEBACitERVIgRFJJVFRFIEFLVAorCURJRSBWSUVSVEUgU1pFTkUKKworQ2FwdWxldCB1bmQgUGFyaXMgc2Fzc2VuIHNpY2ggYmVpIGVpbmVtIEdsYXMgIFdlaW4gIGdlZ2VudWViZXIuICAiRXMgIHR1dCAgbWlyCit3aXJrbGljaCBsZWlkLCBkYXNzIEp1bGlhIGhldXRlIGFiZW5kIG5pY2h0IG1laHIgenUgdW5zIGtvbW10LglTaWUgIGlzdCAgc2VocgorYXVmZ2VicmFjaHQuIiBFciB3aWVndGUgZGVuIEtvcGYuICAiSWNoICBoYXR0ZSAgbm9jaCAga2VpbmUgIEdlbGVnZW5oZWl0LCAgaWhyCitrbGFyenVtYWNoZW4sIGRhc3Mgc2llIGRpY2ggaGVpcmF0ZW4gd2lyZC4iCisKKyJFciBrbGluZ3QsIGFscyBzZWkgaWhtIFR5YmFsdHMgVG9kIHZvZWxsaWcgZWdhbC4iLCBzdGVsbHRlIFVsbyBmZXN0LgorCisiRXIgaXN0IGVpbiBob21vIHBvbGl0aWN1cy4iCisKKyJTb2xjaGUgV29ydGUgc2Fnc3QgZHUgIG5pY2h0ICBpbiAgbWVpbmVtICBCZWlzZWluLCAgQXp6dXJvISIsICB2ZXJsYW5ndGUgIFVsbworZW50cnVlc3RldC4KKworQXp6dXJvIHNjaG5hcHB0ZSBuYWNoIEx1ZnQsIHNjaHdpZWcgYWJlci4KKworIlVuZ2x1ZWNrbGljaGUgVW1zdGFlbmRlIHNpbmQgZGFzLiIsIGJla2xhZ3RlIHNpY2ggUGFyaXMuICAiSWNoICBoYWV0dGUgIGdlcm5lCitlaW4gYmlzc2NoZW4gWmVpdCBtaXQgaWhyIHZlcmJyYWNodC4iCisKK0ZyYXUgQ2FwdWxldCBsYWVjaGVsdGUuICJLZWluZSBTb3JnZSwgaWNoIHdlcmRlIG1vcmdlbiBmcnVlaCBtaXQgaWhyIHJlZGVuIHVuZAorSnVsaWEgd2lyZCBtaXIgc2FnZW4sIGRhc3Mgc2llIHNpY2ggYXVmICBpaHJlICBIb2NoemVpdCAgZnJldXQuIiAgSWhyICBHZXNpY2h0CitsaWVzcyBrZWluZW4gWndlaWZlbCBkYXJhbiwgZGFzcyBKdWxpYSBzaWNoIGxpZWJlciBmcmV1ZW4gc29sbHRlLiAiSGV1dGUgYWJlbmQKK3dhZXJlIGVzIHNpY2hlcmxpY2ggZWluIHdlbmlnLi4uIiBTaWUgem9lZ2VydGUuICIuLi51bnBhc3NlbmQsIHNpZSB6dSBzdG9lcmVuLAorYWJlciBtb3JnZW4gc2llaHQgYWxsZXMgc2Nob24gd2llZGVyIGFuZGVycyBhdXMuIgorCitIZXJyIENhcHVsZXQgbmlja3RlLiAiSmEsIG1vcmdlbiAgc2llaHQgIGFsbGVzICBhbmRlcnMgIGF1cy4gIEljaCAgZGVua2UsICB3aXIKK3NvbGx0ZW4gbnVyIGVpbmUga2xlaW5lIEZlaWVyIGF1c3JpY2h0ZW4sIHVtIGV1cmUgSG9jaHplaXQgIHp1CWZlaWVybi4gIFdhZXJlCitkaXIgTWl0dHdvY2ggcmVjaHQsIFBhcmlzPyIKKworIkhldXRlIGlzdCBNb250YWcsIGlzdCBkYXMgbmljaHQgZWluIGJpc3NjaGVuIHNjaG5lbGw/Iiwgd2FuZHRlIFBhcmlzIGVpbi4KKworIkphLCBkcmVpIFRyYXVlcnRhZ2Ugc29sbHRlbiB3aXIgIGVpbmhhbHRlbiwgIHNjaGxpZXNzbGljaCAgc29sbCAgVHliYWx0ICBlcnN0CitiZWVyZGlndCBzZWluLiBBbHNvIERvbm5lcnN0YWcuIFVuZCB3YXMgZGllIEZlaWVyIGFuZ2VodCwgc28gd2VyZGVuIGRpZSAgTGV1dGUKK3JlZGVuLCB3ZW5uIHdpciBtZWhyIGFscyBlaW4gaGFsYmVzIER1dHplbmQgR2Flc3RlIGVpbmxhZGVuLiIKKworIldpciBrb2VubmVuIGphIGRpZSBncm9zc2UgRmVpZXIgc3BhZXRlciBhdXNyaWNodGVuLiIgRnJhdSBDYXB1bGV0IHdvbGx0ZSBzaWNoCitkaWUgR2VsZWdlbmhlaXQsIFN0aWNoZSBpbiBpaHJlciAgQmVrYW5udHNjaGFmdCAgYXVzenV0ZWlsZW4sICBuaWNodCAgZW50Z2VoZW4KK2xhc3Nlbi4KKworSGVyciBDYXB1bGV0IHNhaCBuYWNoIGRyYXVzc2VuLiAiU3BhZXRlciwgamEuIFVuZCBqZXR6dCBpc3QgZXMgc28gc3BhZXQsICBkYXNzCitpY2ggZmFzdCBzY2hvbiB3aWVkZXIgYXVmc3RlaGVuIG11c3MuICBBbHNvOiAgRG9ubmVyc3RhZyAgc2VoZW4gIHdpciAgdW5zICB6dXIKK0hvY2h6ZWl0IHVuZCBKdWxpYSB1ZWJlcmxhc3MgZ2V0cm9zdCBtaXIsIFBhcmlzLiIKKworVWxvIHNjaG5pZWZ0ZS4gIkFscyBvYiBKdWxpYSBlaW5lIEt1aCB3YWVyZSwgZGllIGVyIHp1bSBEZWNrZW4gd2VnZ2lidC4iCisKKyJJc3Qgc2llIGRvY2guIiwgbWVpbnRlIEF6enVyby4gIkluICBzZWluZW4gIEF1Z2VuLCAgbWVpbmUgIGljaC4iLCAgZnVlZ3RlICBlcgorc2NobmVsbCBoaW56dSwgYWxzIGVyIFVsb3MgQmxpY2sgYXVmZmluZy4KKworIlVuZCBzZWluZSBGcmF1IG1hY2h0IG1pdC4iCisKK0F6enVybyBuaWNrdGUgbnVyIGJldHJ1ZWJ0LgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxOSBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTE5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTY4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUxOQpAQCAtMCwwICsxLDI1MiBAQAorREVSIERSSVRURSBBS1QKKwlESUUgRlVFTkZURSBTWkVORQorCitKdWxpYSBrdXNjaGVsdGUgc2ljaCBpbiBSb21lb3MgQXJtZSB1bmQgIGxpZXNzCWRlbiAgQmxpY2sgIGR1cmNoICBpaHIJWmltbWVyCitzY2h3ZWlmZW4uIEJldm9yIFJvbWVvIHp1IGlociBrYW0sIGhhdHRlIHNpZSBlaWxpZyBpaHJlIFB1cHBlbgl2ZXJzdGVja3QgIHVuZAorc29nYXIgaWhyZSBIZWlsaWdlbmJpbGRlciB2b24gZGVyIFdhbmQgZ2Vub21tZW4uIEpldHp0IHNhaCBpaHIgWmltbWVyIGVoZXIgd2llCitkYXMgZWluZXIgRnJhdSBhdXMuIFNpZSBmdWVobHRlIHNpY2ggc28gd29obCwgZGFzcyBzaWUgYW0gbGllYnN0ZW4gIGdlc2NobnVycnQKK2hhZXR0ZS4KKworSnVsaWEga2l0emVsdGUgUm9tZW9zIE5hc2UgbWl0IGVpbmVyIFN0cmFlaG5lIGlocmVzICBIYWFyZXMgIHVuZCAgYmVvYmFjaHRldGUsCit3aWUgc2llIHp1Y2t0ZS4gU2NobGFlZnJpZyB3aXNjaHRlIFJvbWVvIHNpY2ggbWl0IGRlciBIYW5kIGRhcnVlYmVyLgorCitWb3IgZGVtIEZlbnN0ZXIgem9nIFVsbyBnZXJhZGUgZGVuIEtvcGYgYXVzIGRlbSBHZWZpZWRlciB1bmQgc3RpZXNzIEF6enVybyBhbi4KKyJTaWUgd2FjaGVuIGF1Zi4iCisKK0F6enVybyBtdXJtZWx0ZSB1bmQgdmVyc3VjaHRlLCBzaWNoIGRpZSBBdWdlbiBtaXQgZGVtIEZsdWVnZWwgenV6dWhhbHRlbi4KKworUm9tZW8gc2NobHVnIGRpZSBBdWdlbiBhdWYgIHVuZCAgbGluc3RlICBhdXMgIGRlbSAgRmVuc3Rlci4gICJJY2ggIGhvZXJlICBlaW5lCitMZXJjaGUuIgorCitKdWxpYSBzY2h1ZXR0ZWx0ZSBkZW4gS29wZi4gIkRhcyAgd2FyICBiZXN0aW1tdCAgZWluZSAgTmFjaHRpZ2FsbC4gIEd1Y2ssICBkaWUKK0tyYWVoZW4gZGEgZHJhdXNzZW4gc2NobGFmZW4gYXVjaCBub2NoLCBvYndvaGwgc2llIHNvbnN0IGltbWVyIG1pdCBkaWUJZXJzdGVuCitzaW5kLCBkaWUgYXVmd2FjaGVuLiIKKworWndlaWZlbG5kIGJsaWNrdGUgUm9tZW8gYXVmIHVuZCBiZWdlZ25ldGUgVWxvcyBCbGljay4gICJEaWUgIEtyYWVoZSAgZGEgIHNpZWh0CithYmVyIHppZW1saWNoIHdhY2ggYXVzLiBBbHNvIHdhciBlcyBkb2NoIGRpZSBMZXJjaGUuIgorCitVbG8gcGxpbmtlcnRlIG1pdCBkZW4gQXVnZW4sICB1bSAgYXVjaAlkaWUgIGxldHp0ZW4gIFJlc3RlICBkZXMgIFNjaGxhZmVzICB6dQordmVydHJlaWJlbi4KKworIlNpZSBoYXQgbnVyIGdldHJhZXVtdC4gSmV0enQgc2luZCAgaWhyZSAgQXVnZW4gIHdpZWRlciAgenUgIHVuZCAgZXMgIHdhciAgZGllCitOYWNodGlnYWxsLiIKKworQXp6dXJvIHN0cmVja3RlIHNpY2ggdW5kIGtsYXBwZXJ0ZSBtaXQgZGVtIFNjaG5hYmVsLiAiRGEuIiAgUm9tZW8gIHplaWd0ZSAgbWl0CitkZW0gRmluZ2VyLiAiSmV0enQgaXN0IGRpZSBhbmRlcmUgYXVjaCBub2NoIHdhY2guIiBBbHMgZXIgc2FoLCBkYXNzIEp1bGlhICBtaXQKK2RlbSBLaW5uIHppdHRlcnRlLCBzdHJlaWNoZWx0ZSBlciBpaHJlIFdhbmdlLiAiU2Nob24gZ3V0LCBzY2hvbiBndXQuICBXZW5uICBkdQorZXMgZ2VybmUgbW9lY2h0ZXN0LCBpc3QgZXMgbm9jaCBOYWNodCB1bmQgZGllIGJlaWRlbiBkYSBzaW5kIEZsZWRlcm1hZXVzZS4iCisKKyJXYXNzcyBpc3NzdD8iLCBmcmFndGUgV2xhZC4KKworIk5pY2h0cy4iLCB2ZXJzZXR6dGUgQXp6dXJvIG11ZXJyaXNjaC4gIkdlaCBzY2hsYWZlbi4iCisKK1dsYWQgenVja3RlIGRpZSBTY2h1bHRlcm4gdW5kIHZlcnNjaHdhbmQgdW50ZXIgZGVyIERhY2hyaW5uZS4KKworSnVsaWEsIGRpZSBXbGFkIGJlb2JhY2h0ZXQgaGF0dGUsIHN0b2VobnRlLiAiTGVpZGVyIGdlaHQgZGllIEZsZWRlcm1hdXMgZ2VyYWRlCitzY2hsYWZlbi4gV2FocnNjaGVpbmxpY2ggaXN0IGVzIGRvY2ggIE1vcmdlbiAgdW5kICBkdSAgc29sbHRlc3QgIGdlaGVuLCAgc29uc3QKK2Vyd2lzY2hlbiBkaWNoIG5vY2ggRXNjYWx1c2VucyBMZXV0ZSB1bmQgZHUgd2lyc3QgYXVmZ2VoYWVuZ3QuIgorCisiRXMga2FubiBhYmVyIGRvY2ggbmljaHQgTW9yZ2VuIHNlaW4uIER1IGhhc3QgIGdlcmFkZSAgZ2VzYWd0LCAgZGFzcyAgZXMgIG5vY2gKK05hY2h0IGlzdC4iLCBub2VyZ2VsdGUgUm9tZW8uCisKKyJVbmQgamV0enQgc2FnZSBpY2gsIGRhc3MgZXMgTW9yZ2VuIGlzdC4iCisKK1JvbWVvIG11cm1lbHRlIGV0d2FzIGRhcnVlYmVyLCBkYXNzIEZyYXVlbiBuaWNodCB3aXNzZW4sIHdhcyBzaWUgd29sbGVuLCBzdGFuZAorYWJlciBnZWhvcnNhbSBhdWYgdW5kIHpvZyBzaWNoIGFuLgorCisiSWNoIG1vZWNodGUgZGljaCBuaWNodCBnZWhlbiBsYXNzZW4uIgorCisiSWNoIHdpbGwgamEgYXVjaCBuaWNodCBnZWhlbi4gQWJlci4uLiIgRXIgYnJhY2ggYWIuCisKKyJFYmVuOiBBYmVyLiIgSnVsaWEgZ3JhYmJlbHRlIGF1ZiBkZW0gTmFjaHR0aXNjaCBuYWNoIGVpbmVtIFRhc2NoZW50dWNoLgorCisiV2VubiBzaWUgamV0enQgc2FndCwgZGFzcyBpaHJlIEhlcnplbiBpbW1lciBiZWllaW5hbmRlciBzaW5kLCBoYWNrZSAgaWNoICBpaHIKK2RpZSBBdWdlbiBhdXMuIiwgYnJ1bW10ZSBBenp1cm8uCisKK0p1bGlhIGxhZWNoZWx0ZSB1bnRlciBUcmFlbmVuLiAiV2Vpc3N0IGR1LCB1bnNlcmUgS29lcnBlciBtb2VnZW4gendhciBnZXRyZW5udAorc2VpbiwgYWJlci4uLiIKKworVWxvIHNwcmFuZyBhdWYgQXp6dXJvcyBSdWVja2VuIHVuZCBoaWVsdCBpaG4gZmVzdC4KKworIkViZW46IEFiZXIuIiwgdmVyc2V0enRlIFJvbWVvLgorCitQb2xseSBzdGVja3RlIGRlbiBLb3BmIHp1ciBUdWVyIGhlcmVpbi4gIkVzIHdpcmQgZ2xlaWNoICBoZWxsLiAgQXVzc2VyZGVtICBpc3QKK2RlaW5lIE11dHRlciBoaWVyaGVyIHVudGVyd2VncywgSnVsaWEuIgorCitSb21lbywgZGVyIHNjaG9uIGF1ZiBkZXIgIFN0cmlja2xlaXRlcglzdGFuZCwJcmVja3RlCXNpY2ggIEp1bGlhICBlbnRnZWdlbi4KKyJLb21tLCBnaWIgbWlyIG5vY2ggZWluZW4gS3Vzcy4iCisKK0p1bGlhIGdyYWJzY2h0ZSBlaW4gaGlsZmxvc2VzIEhvbHpwZmVyZGNoZW4sIGRhcyBzaWNoICBuaWNodCAgcmVjaHR6ZWl0aWcgIG1pdAorZGVuIGFuZGVyZW4gU3BpZWxzYWNoZW4gaW0gU2NocmFuayB2ZXJzdGVja3QgaGF0dGUgdW5kCWt1ZXNzdGUgIGVzICBoZXJ6aGFmdC4KKyJIaWVyLCBkYXMgUGZlcmQgYmVrb21tdCBnYW56IHZpZWxlICBLdWVzc2UgIG1pdCwgIGRhbm4gIGhhc3QgIGR1ICB3ZWxjaGUgIGF1ZgorVm9ycmF0LiIgU2llIHJlaWNodGUgUm9tZW8gZGFzIFBmZXJkY2hlbi4KKworUm9tZW8gbGFlY2hlbHRlLiAiSWNoIGtvbW1lIHp1cnVlY2ssIGJldm9yIHNpZSBhbGxlIGF1ZmdlYnJhdWNodCBzaW5kLiIKKworIldvaGwgaG9lcmUgaWNoIGRlciBCb3RzY2hhZnQgV29ydCwgYWxsZWluLCBtaXIgIGZlaGx0ICBkZXIgIEdsYXViZS4iLCAgbWVpbnRlCitKdWxpYS4KKworIkljaCBoYXNzZSBkaWVzZSBmYWxzY2hlIFppdGllcmVyZWkuIiwga251cnJ0ZSBBenp1cm8uCisKKyJOb2NoIGlzdCBQb2xlbiBuaWNodCB2ZXJsb3Jlbi4iIFJvbWVvIHp3aW5rZXJ0ZSBKdWxpYSBhdWZtdW50ZXJuZCB6dS4KKworIlRyb3R6ZGVtLCBldHdhcyBpc3QgZmF1bC4uLiIKKworIktSQUghIiwgc2NocmllIEF6enVybyBtaXQgTmFjaGRydWNrLgorCisiU2llaHN0IGR1LCBqZXR6dCBpc3QgTW9yZ2VuLiIgUm9tZW8gd2lua3RlLiAiSWNoIHNjaHJlaWJlIGRpci4iCisKK0p1bGlhIHdpbmt0ZSwgYmlzIFJvbWVvIHVlYmVyIGRpZSBHYXJ0ZW5tYXVlciB2ZXJzY2h3dW5kZW4gd2FyLCBkYW5uIGtsZXR0ZXJ0ZQorc2llIHZvbiBkZXIgRmVuc3RlcmJhbmsgdW5kIHdhbmR0ZSBzaWNoIGlocmVyIE11dHRlciB6dS4KKworRnJhdSBDYXB1bGV0LCBkaWUgb2ZmZW5iYXIgZ2Vob2ZmdCBoYXR0ZSwgSnVsaWEgbm9jaCBzY2hsYWZ0cnVua2VuICB1bmQgIHdlbmlnCit3aWRlcnNwZW5zdGlnIGFuenV0cmVmZmVuLCB2ZXJ6b2cgZGFzIEdlc2ljaHQsIGFscyBzaWUgaWhyZSBUb2NodGVyICBzYWguICAiRHUKK2Jpc3QgcmVpY2hsaWNoIGZydWVoIGF1Zi4iCisKKyJJY2gga29ubnRlIG5pY2h0IHNjaGxhZmVuLiIKKworIkhhZXR0ZSBzaWUgYXVjaCBnYXIgbmljaHQgZ2V3b2xsdC4iIEF6enVybyBraWNoZXJ0ZSBpbiBzaWNoIGhpbmVpbi4KKworIkR1IHRyYXVlcnN0IHVtIFR5YmFsdCwgaG0/IiBGcmF1IENhcHVsZXQgc3RyaWNoIEp1bGlhICB1ZWJlciAgZGFzICBIYWFyLiAgIkR1Citzb2xsdGVzdCBkaWNoIG5pY2h0IHNvIHNlaHIgZ3JhZW1lbi4iCisKKyJJY2ggaGFiZSAgZWluZW4gIE1lbnNjaGVuICB2ZXJsb3JlbiwgIGRlciAgbWlyICBzZWhyICB2aWVsICBiZWRldXRldC4iICBKdWxpYQorc2NobmllZnRlLgorCisiVW5kIG9iIHNpZSBkYXMgaGF0LiIgVWxvIHdhbmQgc2ljaCB2b3IgdW50ZXJkcnVlY2t0ZW0gTGFjaGVuLgorCisiRHUgc29sbHRlc3QgbmljaHQgbWVociB1bSBUeWJhbHQgd2VpbmVuLCBkYXMgbWFjaHQgaWhuIG5pY2h0IHdpZWRlciBsZWJlbmRpZy4KK0VoZXIgd2VpbnRlIGljaCwgd2VpbCBkaWVzZXIgUm9tZW8gbm9jaCBsZWJ0LiIKKworIkVzIHdhZXJlIGd1dCwgd2VubiBpY2ggUm9tZW8gZ2xlaWNoIGpldHp0IGluIG1laW5lbiAgSGFlbmRlbiAgaGFldHRlLiIgIEp1bGlhCit2ZXJiYXJnIGlociBMYWNoZW4gaGludGVyIGVpbmVtIHVtc3RhZW5kbGljaGVuIE5hc2VwdXR6ZW4uCisKKyJEYXMgbGFlc3N0IHNpY2ggbGVpZGVyIG5pY2h0IG1hY2hlbi4gQWxsZXJkaW5ncyB3ZXJkZSBpY2ggZGFmdWVyIHNvcmdlbiwgZGFzcworZXIgYXVjaCBpbSBFeGlsIG5pY2h0IGxhbmdlIHVlYmVybGVidCwgZ2xhdWIgbWlyLiIKKworSnVsaWEgbmlja3RlIGVybnN0aGFmdC4gIldlbm4gaWNoIG51ciB3dWVzc3RlLCB3aWUgaWNoIGVzIGFuc3RlbGxlbiBzb2xsLCBkYW5uCitzb3JndGUgaWNoIGRhZnVlciwgZGFzcyBSb21lbyBiYWxkIGVpbmUgZXdpZ2UgUnVoZSBmaW5kZXQuIgorCisiV2VubiBKdWxpYSBkYXMgaW4gZGllIEhhbmQgbmltbXQsIGthbm4gIFJvbWVvICBhbGxlcmRpbmdzICBydWhpZyAgc2NobGFmZW4uIiwKK21laW50ZSBBenp1cm8uCisKKyJJaHJlIE11dHRlciBtZXJrdCBhYmVyIGF1Y2ggZ2FyIG5pY2h0cywgaG0/IiAgVWxvICBsZWhudGUgIHNpY2ggIHp1cnVlY2sgIHVuZAorZ2Vub3NzIEp1bGlhcyBzcGl0emUgWnVuZ2UuCisKK0ZyYXUgQ2FwdWxldCBsYWVjaGVsdGUuICJEYXMgaXN0IGRlciByZWNodGUgR2Vpc3QsIEp1bGlhLiBXZW5uICBkdSAgc28gIHdlaXRlcgorbWFjaHN0LCB3aXJzdCBkdSBkaWUgQ2FwdWxldHMgd3VlcmRpZyB2ZXJ0cmV0ZW4uIgorCisiWkVSdHJldGVuIHdpbGwgaWNoIHNpZS4iIEp1bGlhIHN0YW1wZnRlIG1pdCAgZGVtICBGdXNzICBhdWYuICAiTWVpbmUgIEZlaW5kZSwKK25hdHVlcmxpY2guIgorCisiTmF0dWVybGljaC4iLCBzdGltbXRlIGlocmUgTXV0dGVyIHp1LiAiSWNoIGhhYmUgdWVicmlnZW5zIGVpbmUgZ3V0ZSBOYWNocmljaHQKK2Z1ZXIgZGljaC4iCisKKyJHaWJ0IGVzIGd1dGUgTmFjaHJpY2h0ZW4sIHdlbm4gZWluIGdlbGllYnRlciBNZW5zY2ggdW5lcnJlaWNoYmFyIGlzdD8iCisKKyJKZXR6dCB0cmFlZ3Qgc2llIHp1IGRpY2sgYXVmLiIgQXp6dXJvIHNjaHVldHRlbHRlIGRlbiBLb3BmLgorCisiRGVpbiBWYXRlciBtZWludCwgZGFzcyBkYXMgTGViZW4gd2VpdGVyZ2VoZW4gbXVzcy4gRXIgaGF0ICBiZXNjaGxvc3NlbiwgIGRhc3MKK2R1IFBhcmlzIGhlaXJhdGVzdC4gR2xlaWNoIGFtIERvbm5lcnN0YWcuIgorCitKdWxpYSB3dXJkZSBrcmVpZGVibGVpY2guICJEYXMgaXN0IGphICBzY2hvbiAgdWViZXJtb3JnZW4hICBEYXMgIGdlaHQgIG1pciAgenUKK3NjaG5lbGwuIgorCisiVW5zaW5uLiIgRnJhdSBDYXB1bGV0IHJ1bnplbHRlIHVud2lsbGlnIGRpZSBTdGlybi4gIkFiZXIgd2FydGUgbnVyLCBiaXMgIGRlaW4KK1ZhdGVyIGRhcyBob2VydC4iCisKK0hlcnIgQ2FwdWxldCBrYW0gaW5zIFppbW1lciB1bmQgc2NodWV0dGVsdGUgZGVuIEtvcGYuICJIZXVsc3QgIGR1ICBkZW5uICBpbW1lcgorbm9jaCwgSnVsaWE/IEhhdCBkZWluZSBNdXR0ZXIgZGlyIG5pY2h0IGdlc2FndCwgZGFzcyBkdSBhbGxlbiBHcnVuZCB6dXIgRnJldWRlCitoYXN0PyIKKworSnVsaWEgc2NobHVjaHp0ZSBub2NoIGxhdXRlci4KKworIlNpZSB3aWxsIFBhcmlzIG5pY2h0IGhlaXJhdGVuLiIsIGtsYWVydGUgRnJhdSBDYXB1bGV0ICBpaHJlbiAgTWFubiAgYXVmLiAgIkVzCitnZWh0IGlociB6dSBzY2huZWxsLCBzYWd0IHNpZS4iCisKK0luIEhlcnJuIENhcHVsZXQgZXJ3YWNodGUgZGVyIEphZWh6b3JuLCBkZW4gaW4gc2VpbmVyIEp1Z2VuZCBidWNoc3RhZWJsaWNoIGRpZQoraGFsYmUgU3RhZHQgZ2VmdWVyY2h0ZXQgaGF0dGUuCSJXYXM/ICBQYXJpcyAgaXN0ICBlaW4gIGd1dGVyICBNYW5uICB1bmQgIGVpbmUKK2hlcnZvcnJhZ2VuZGUgUGFydGllLiBVbmQgZHUgd2lsbHN0IG5pY2h0PyIgU2VpbiBHZXNjaHJlaSBlcmtsb21tIG5ldWUgSG9laGVuLgorIkR1IHdpcnN0IGRlbiBNYW5uIGhlaXJhdGVuLCBkZW4gaWNoIGRpciBuZW5uZSwgaGFzdCBkdSBtaWNoICB2ZXJzdGFuZGVuPyAgVW5kCit3ZW5uIGljaCBkaWNoIGFuIGRlbiBIYWFyZW4genVyIEtpcmNoZSB6ZXJyZSwgZHUgaGVpcmF0ZXN0IFBhcmlzISIKKworIkFiZXIsIGFiZXIuIiBGcmF1IENhcHVsZXQgIGJlb2JhY2h0ZXRlICBiZXNvcmd0ICBkaWUgIHBvY2hlbmRlICBBZGVyICBhbiAgZGVyCitTY2hsYWVmZSBpaHJlcyBNYW5uZXMgdW5kIHNhaCBzaWNoIGRlbSBXaXR3ZW5zdGFuZCBuYWVoZXIgYWxzICBpaHIgIGxpZWIgIHdhci4KKyJSZWcnIGRpY2ggbmljaHQgc28gYXVmLiIKKworSnVsaWEgZXJrYW5udGUsIGRhc3MgaWhyIFZhdGVyIGplbnNlaXRzIGFsbGVyIFZlcm51bmZ0IHdhci4gICJMYXNzICBtaWNoICBkb2NoCitlcmtsYWVyZW4uLi4iCisKKyJJY2ggc29sbCBtaWNoIG5pY2h0IGF1ZnJlZ2VuPyBOaWNodCBhdWZyZWdlbj8iICBFciAgcmFuZyAgbmFjaCAgTHVmdC4gICJNZWluZQorVG9jaHRlciB3aWxsLCBkYXNzIGljaCBtZWluIFdvcnQgbmljaHQgaGFsdGUsIHppZWh0IG1laW5lbiBndXRlbiBOYW1lbiBpbiAgZGVuCitTY2htdXR6IHVuZCBicmluZ3QgbWljaCB2b3IgZGVyIGdhbnplbiBTdGFkdCBpbiBWZXJydWYgLSAgdW5kICBpY2ggIHNvbGwgIG1pY2gKK25pY2h0IEFVRlJFR0VOPyIKKworUG9sbHksIGRpZSB3dXNzdGUsIGRhc3MgZXIgZ2xlaWNoIGFuZmFuZ2VuIHd1ZXJkZSAgenUgIGZsdWNoZW4sICBzdGVsbHRlICBzaWNoCitzY2h1ZXR6ZW5kIHZvciBKdWxpYS4gIkxhc3N0IHNpZSBkb2NoIHJlZGVuLiIKKworIlJlZGVuPyBJaHIgcmVkZXQgbWlyIGFsbGUgZHJlaSBzY2hvbiB6dXZpZWwuIERhIGlzdCBlaW4gZ3V0YXVzc2VoZW5kZXIgIE1hbm4sCitlcmZvbGdyZWljaCwgIG5ldHQsICBkZXIgIEp1bGlhICBhbGxlcwliaWV0ZW4Ja2FubiAgdW5kICBlaW5lbiAgYW5zdGFlbmRpZ2VuCitCcmF1dHByZWlzIHphaGx0Li4uIFVuZCBtZWluZXIgVG9jaHRlciBmYWVsbHQgbmljaHRzICBiZXNzZXJlcwllaW4sICBhbHMgIG1pcgordm9yenVoZXVsZW4sIGRhc3Mgc2llIGlobiBuaWNodCB3aWxsLiBXYXMgbWVpbnN0ICBkdSAgZWlnZW50bGljaCwgIGRhc3MgIGRpZXNlCitNYWVubmVyIGF1ZiBkZW4gQmFldW1lbiB3YWNoc2VuPyIKKworVWxvIGJsaWNrdGUgYXVmIEF6enVybyB1bmQgc2NodWV0dGVsdGUgZGVuIEtvcGYuICJEYSBoYXQgZXIgbGVpZGVyIFJlY2h0LiIKKworSGVyciBDYXB1bGV0IHNjaHVldHRlbHRlIGRlbiBLb3BmIHdpZSBlaW4gU3RpZXIsIGRlciBkZW0gcm90ZW4gVHVjaCAgaGludGVyaGVyCitzY2hhdXQuICJJY2ggd2lsbCBkaXIgbWFsIHdhcyBzYWdlbiwgSnVsaWE6IEVudHdlZGVyIGhlaXJhdGVzdCBkdSAgUGFyaXMgIG9kZXIKK2R1IGthbm5zdCBzZWhlbiB3byBkdSBibGVpYnN0LiIgRXIgZHJlaHRlIHNpY2ggdW0gdW5kIHN0YXBmdGUgenVyICBUdWVyLiAgIkljaAorZGFjaHRlIGVpZ2VudGxpY2gsIGRhc3MgaWNoIHZvbiBHbHVlY2sgcmVkZW4gIGthbm4sICB3ZW5pZ3N0ZW5zICBlaW4gIEtpbmQgIHp1CitoYWJlbiwgd2VubiBzY2hvbiBrZWluZW4gU29obiwgYWJlciB3ZW5uIGljaCBtaXIgZGljaCBzbyBhbnNlaGUsIEp1bGlhLCAgZnJhZ2UKK2ljaCBtaWNoLCBvYiBpY2ggZGljaCBuaWNodCBiZXNzZXIgZ2xlaWNoIG5hY2ggZGVyIEdlYnVydCBlcnNhZXVmdCBoYWV0dGUuIgorCitKdWxpYSB6dWNrdGUgenVzYW1tZW4sIGFscyBkaWUgVHVlciBoaW50ZXIgaWhyZW0gVmF0ZXIgaW5zIFNjaGxvc3Mgc2NoZXBwZXJ0ZS4KKyJNYW1hPyIKKworRnJhdSBDYXB1bGV0IHNldWZ6dGUgdW5kIHN0aWVzcyBkYW5uIGluIGRhcyBIb3JuIGlocmVzIE1hbm5lcywgd2llIHNpZSBlcyBpaHJlCitnYW56ZSBFaGUgbGFuZyBnZXRhbiBoYXR0ZS4gIk5laW4sIG5pY2h0IE1hbWEuIFNhZywgZGFzcyBkdSAgUGFyaXMgIGhlaXJhdGVzdCwKK2Rhbm4ga2FubnN0IGR1IGF1Y2ggd2llZGVyIE1hbWEgc2FnZW4uIgorCisiV2VubiBlcyBkYXMgaXN0LCB3YXMgZHUgd2lsbHN0LCBkYW5uIGthbm5zdCBkdSBtaWNoIGF1Y2ggZ2xlaWNoIG5lYmVuICBUeWJhbHQKK2JlZ3JhYmVuISIKKworRGllIFR1ZXIgZmxvZyBlaW4gendlaXRlcyBNYWwgbWl0IGxhdXRlbSAgS25hbGwgIHp1LiAgSnVsaWEgIHRyYXQgIHZlcnp3ZWlmZWx0CitkYWdlZ2VuLiAiV2FzIHNvbGwgaWNoIGpldHp0IGJsb3NzIHR1bj8gUG9sbHksIGhhc3QgZHUga2VpbmUgIElkZWU/ICBJY2ggIGthbm4KK2RvY2ggbmljaHQgUGFyaXMgaGVpcmF0ZW4hIgorCisiVW5kIHdhcnVtIG5pY2h0PyIgUG9sbHkgZmFuZCBlcyBsZWljaHRlciwgc2ljaCB2b20gU3R1cm0gdm9yd2FlcnRzIGJsYXNlbiAgenUKK2xhc3NlbiwgYWxzIHNpY2ggZ2VnZW4gaWhuIHp1IHN0ZW1tZW4uICJFciBpc3QgYmVzdGltbXQga2VpbiBzY2hsZWNodGVyICBNYW5uLgorRGVpbiBWYXRlciBoYXQgc2Nob24gUmVjaHQ6IEVyIHNpZWh0IGJlc3NlciBhdXMgYWxzIFJvbWVvLCBoYXQgZWluZW4gIGJlc3NlcmVuCitSdWYsIGlzdCBuaWNodCBtaXQgZGVpbmVyIEZhbWlsaWUgdmVyZmVpbmRldCB1bmQgYXVzc2VyZGVtIGlzdAllciAgaGllci4gIFdhcword2lsbHN0IGR1IG1laHI/IgorCitKdWxpYSBzdGFycnRlIGlocmUgYWx0ZSBWZXJ0cmF1dGUgdW5nbGFldWJpZyBhbi4gIkF1Y2ggZHUsIG1laW5lIEFtbWUgUG9sbHk/IgorCitBenp1cm8gc3RvZWhudGUuCisKK1BvbGx5IGhvYiBoaWxmbG9zIGRpZSBIYWVuZGUuICJXaXIgd29sbGVuIGFsbGUgbnVyIGRlaW4gYmVzdGVzLiIKKworIkRhcyBiZWtvbW10IGlociBhYmVyIG5pY2h0LiIsIG11cm1lbHRlIEp1bGlhLgorCisiV2FzIHNhZ3N0IGR1PyIKKworIkljaCBzYWd0ZSwgZGFzcyBpY2ggenUgQnJ1ZGVyIExhd3JlbmNlIGdlaGVuIHdpbGwuIFdlbm4gIGljaCAgaGVpcmF0ZW4gIHNvbGwsCitkYW5uIG11c3MgZXIgbWljaCBhdWYgZWluZSB3YWhyaGFmdCBjaHJpc3RsaWNoZSBFaGUgdm9yYmVyZWl0ZW4uIiBKdWxpYSBzZXR6dGUKK2VpbiBmYWxzY2hlcyBMYWVjaGVsbiBhdWYuCisKK1BvbGx5IHRyYXV0ZSBkZW0gcGxvZXR6bGljaGVuIEZyaWVkZW4gbmljaHQgZ2FueiwgenVja3RlIGFiZXIgIGRpZSAgU2NodWx0ZXJuLgorIkRhcyBpc3QgZ3V0LiBJY2ggd2VyZGUgZGVpbmVyIE11dHRlciBzYWdlbiwgZGFzcyBkdSBkaWNoIGJlc3Nlcm4gd2lsbHN0LiIgU2llCitnaW5nIHVuZCBzYWggbmljaHQsIHdpZSBzaWNoIEp1bGlhIHdlaW5lbmQgYXVmIGlociBCZXR0IHdhcmYuCisKKworSGllciBzdGVoZW4gc2llIG51biwgdW5zZXJlIEFrdGV1cmUuICBKdWxpYSAgd2VpbnQgIHNpY2ggIGRpZSAgQXVnZW4gIGF1cyAgZGVtCitHZXNpY2h0LCB3ZWlsIHNpZSBzaWNoIG5pY2h0IG9mZmVuICB6dQlSb21lbyAgYmVrZW5uZW4gIGRhcmYsCUp1bGlhcwlNdXR0ZXIKK3N0ZWxsdCBkZW4gaGFldXNsaWNoZW4gRnJpZWRlbgl1ZWJlciAgZGFzICBHbHVlY2sgIGlocmVzICBLaW5kZXMsICBQb2xseSAgaXN0Cit3ZXR0ZXJ3ZW5kaXNjaCwgUm9tZW8gdmVyYmFubnQsIFBhcmlzIHNpZWh0ICBkZXIgIFJldHR1bmcgIGZ1ZXIgIHNlaW5lbiAgYWxsenUKK2xlZXJlbiBHZWxkYmV1dGVsIGVudGdlZ2VuIHVuZCBCcnVkZXIgTGF3cmVuY2UgaXN0IGluIGVpbmVyIGJvZXNlbiBad2FuZ3NsYWdlLgorCitXaWUgZ2VybmUsIGxpZWJlIExlc2VyaW4sIGxpZWJlciBMZXNlciwgdmVyc2FlaGUgaWNoIGRpZSBHZXNjaGljaHRlIG1pdCAgZWluZW0KK2dsdWVja2xpY2hlbiBFbmRlLiBEb2NoIGRpZSBHb2V0dGVyIGRlciBNeXRoZW53ZWx0IGhhYmVuICBlcyAgYW5kZXJzICBiZXN0aW1tdAordW5kIHd1ZXJ6ZW4gdW5zZXJlIEdlc2NoaWNodGUgbWl0IHVuZW5kbGljaGVuIFNjaHdpZXJpZ2tlaXRlbi4gRXMgc2NoZWludCwgYWxzCitoYWV0dGVuIFJvbWVvIHVuZCBKdWxpYSBkaWUgR29ldHRlciB2ZXJhZXJnZXJ0LgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzRmZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMgpAQCAtMCwwICsxLDg2IEBACitQUk9MT0cKK1dpciBiZWZpbmRlbiB1bnMgaW4gVmVyb25hLiBTdGVsbGVuIFNpZSBzaWNoIGRpZSBTdGFkdCB2b3IuIEtvZW5uZW4gU2llIG5pY2h0PworR3V0LCBmYW5nZW4gd2lyIGFtIEFuZmFuZyBhbiwgc28sIHdpZSBlcyBzaWNoIGdlaG9lcnQuCisKK0VpZ2VudGxpY2ggYmVmaW5kZW4gd2lyIHVucyBpbiBlaW5lbSBaZWl0YWx0ZXIsIGRlbSAgbWFuICBzcGFldGVyICBpcmdlbmRlaW5lbgorZ2VsZWhydGVuIHVuZCBlaWdlbmFydGlnIGtsaW5nZW5kZW4gTmFtZW4gZ2ViZW4gd2lyZCwgYWJlciBkYXMgdHV0IGhpZXIgbmljaHRzCit6dXIgU2FjaGUsIGRlbm4gd2llIGVzIHNpY2ggZnVlciBlaW5lIEdlc2NoaWNodGUgemllbXQsIGlzdCBkaWUgIFplaXQgIG9obmVoaW4KK2RpZSBHdXRlIEFsdGUuIERhcyBoZWlzc3QgbmljaHQsIGRhc3MgIGVzICBpbiAgaXJnZW5kZWluZXIgIFdlaXNlICBiZXNzZXIgIHVuZAorc2Nob2VuZXIgd2FlcmUsIGFscyBlcyBoZXV0ZSBpc3QsIGVzICBiZWRldXRldAlsZWRpZ2xpY2gsICBkYXNzICBzaWUgIHVuc2VyZW4KK1RyYWV1bWVuIGVudHNwcmljaHQuIFNpZSBpc3QgbXl0aGlzY2ggdW5kIHNvbWl0IGplbnNlaXRzIGFsbGVyIEtyaXRpay4KKworU3RlbGxlbiB3aXIgdW5zIGFsc28gVmVyb25hIHZvciwgIHdpZSAgZGllICBTdGFkdCAgaW4gIGRlciAgZ3V0ZW4gIGFsdGVuICBaZWl0CithdXNnZXNlaGVuIGhhYmVuIG1hZy4gRGllIFN0cmFzc2VuIHNpbmQgc2F1YmVyLCBzbyBzYXViZXIsIGRhc3MgbWFuIHZvbiAgaWhuZW4KK2Vzc2VuIGtvZW5udGUuIFdvbWl0IGljaCBuaWNodCB1bnRlcnN0ZWxsZW4gd2lsbCwgZGFzcwlTaWUgIHp1ICBkZW4gIE1lbnNjaGVuCitnZWhvZXJlbiwgZGllIGF1ZiBzb2xjaGUgR2VkYW5rZW4ga29tbWVuLiBJbSBHZWdlbnNhdHogenUgYWxsZXIgVWViZXJsaWVmZXJ1bmcKK3VuZCBhbGxlbiBoaXN0b3Jpc2NoZW4gRXJrZW5udG5pc3NlbiAgc2luZCAgZGllICBHb3NzZW4gIG5pY2h0CXNjaG11dHppZyAgdW5kCituaWVtYW5kIGdpZXNzdCBhdXMgZGVuIEZlbnN0ZXJuIGRlcyBlcnN0ZW4gU3RvY2tzIGVpbmUgdW5hdXNzcHJlY2hsaWNoZSwgIGFiZXIKK2ltIEdyb3NzZW4gdW5kIEdhbnplbiBicmF1bmUgdW5kIGdlbGJlIE1hc3NlLiAgVW5kICBiaXR0ZXNjaG9lbiwgIGRpZSAgSGFldXNlcgorYmV1Z2VuIHNpY2ggbmljaHQgd2llIHZlcmh1dHplbHRlIGFsdGUgTGV1dGUgdWViZXIgZGllIFN0cmFzc2VuIHVuZCBiZXRyYWNodGVuCitkaWUgTWVuc2NoZW4gbWl0IGRlbSBhcnJvZ2FudGVuIEdlc2ljaHRzYXVzZHJ1Y2ssIGRlbiBlaW4gQXV0b3IgZWluZXMgIGFuZGVyZW4KK0dlbnJlcyBpaG5lbiBhbmRpY2h0ZW4gd3VlcmRlLiBEYXMgZ2VuYXVlIEdlZ2VudGVpbCBpc3QgZGVyIEZhbGwuICBEaWUJTWF1ZXJuCitzaW5kIHdlaXNzLCBkaWUgRmVuc3RlciBzYXViZXIgZ2VwdXR6dCwgIGRpZSAgR2FyZGluZW4JZnJpc2NoCWdld2FzY2hlbiAgdW5kCitidW50ZSBLYWVzdGVuIG1pdCBub2NoIGJ1bnRlcmVuIEJsdW1lbiB6aWVyZW4gZGllIEZlbnN0ZXJiYWVua2UsICBkaWUgIGdlbmF1c28KK2ZyaXNjaCBnZXB1dHp0IHNpbmQgd2llIGRpZSBTdHJhc3Nlbi4gSmEsIFNpZSBoYWJlbiByaWNodGlnICBnZWhvZXJ0OiAgSW4gIGRlcgorZ3V0ZW4gYWx0ZW4gWmVpdCBwdXR6dGVuIGFuc3RhZW5kaWdlIE1lbnNjaGVuICBzb2dhciAgZGllICBGZW5zdGVyYmFlbmtlLiAgU2llCitoYWV0dGVuIHdhaHJzY2hlaW5saWNoIGF1Y2ggZGllIERhZWNoZXIgZ2VwdXR6dCwgd2VubiAgaWhyZSAgQXJtZSAgbGFuZyAgZ2VudWcKK2dld2VzZW4gd2FlcmVuIC0gZnJhZ2VuIFNpZSBkaWUgYWVsdGVyZW4gTWVuc2NoZW4gaW4gaWhyZW0gRG9yZiwgd2VubiBTaWUgIG1pcgorbmljaHQgZ2xhdWJlbi4KKworV29taXQgd2lyIGJlaW0gVGhlbWEgTGV1dGUgc2luZC4gSGFiZW4gU2llICBiZW1lcmt0LCAgd2llICBnZXNjaGlja3QgIGljaCAgZGllCitVZWJlcmxlaXR1bmcgZ2VtYWNodCBoYWJlPyBXaXIgYmVmaW5kZW4gdW5zIGluCWVpbmVyICBteXRoaXNjaGVuICBaZWl0LCAgYWxzbwora29lbm5lbiBTaWUgc2ljaCBkaWUgTWVuc2NoZW4gc2ljaGVybGljaCB2b3JzdGVsbGVuLiBLZWluZSBGcmF1LCBkaWUgc2ljaCBkb3J0CittaXQgUHJvYmxlbWVuIHdpZSBGYWx0ZW4gdW5kIE9yYW5nZW5oYXV0IGhlcnVtc2NobHVlZ2UsIGtlaW4gTWFubiwgZGVzc2VuIEJhcnQKK25pY2h0IGRpY2h0IGdlbnVnIHdhZXJlIG9kZXIgZGVzc2VuIE11c2tlbG4genUgdW5lbnR3aWNrZWx0LiBOZWluLCBtZWluZSBEYW1lbgordW5kIEhlcnJlbiwgaGllciBpc3QgVmVyb25hLiBFaWdlbnRsaWNoICBzb2xsdGUgIGljaCAgVkVST05BICBzY2hyZWliZW4uICBPZGVyCit3ZW5pZ3N0ZW5zIF9WZXJvbmFfLCB3ZW5uIElobmVuIGRpZSAgR3Jvc3NidWNoc3RhYmVuICB6dSAgcG9tcG9lcyAgc2luZC4gIEplZGUKK2VpbnplbG5lIGRlciBGcmF1ZW4gdmVyZGllbnRlIHNpY2ggaGV1dGUgIGVpbmUJZ29sZGVuZSAgTmFzZSAgYWxzICBNb2RlbCwgIHNvCitwZXJmZWt0IGlzdCBpaHJlIEZpZ3VyLCBzbyBlYmVubWFlc3NpZyBpaHIgR2VzaWNodCwgIHNvICBkZXplbnQgIGlociAgTWFrZS11cC4KK0locmUgSGF1dGZhcmJlIGlzdCBhbGxlcmRpbmdzIGhldXRlIG5pY2h0IG1laHIgZW4gVm9ndWUsIGFiZXIgZGFzIGlzdCAgbmljaHRzLAorZGVtIG5pY2h0IGVpbiBOYWNobWl0dGFnIGF1ZiBkZXIgU29ubmVuYmFuayBhYmhlbGZlbiBrb2VubnRlLiBVbmQgZGllIE1hZW5uZXIhCitIYWJlbiBTaWUgZWluZSBBdXNnYWJlIHZvbiBDYXBpdGFsIHp1ciBIYW5kPyBTY2hhdWVuIFNpZSBoaW5laW4gdW5kIHN1Y2hlbiBTaWUKK3NpY2ggZGVuIGF0dHJha3RpdnN0ZW4gTWFubiBoZXJhdXMuIEhhYmVuIFNpZT8gR3V0LiBOdW4gemllaGVuIFNpZSBpaG0JZGllc2VuCitncmF1c2lnZW4gQW56dWcgYXVzIHVuZCBzdGVja2VuIFNpZSBpaG4gaW4gZWluZSB6d2VpZmFyYmlnZSBTdHJ1bXBmaG9zZS4gIERhenUKK3ZlcnBhc3NlbiBTaWUgaWhtIG5vY2ggZWluICBiYXVzY2hpZ2VzCVJ1ZXNjaGVuaGVtZC4gIFVuZCAgc3RyZWljaGVuICBTaWUgIHVtCitHb3R0ZXMgV2lsbGVuIGRpZXNlcyBzY2hyZWNrbGljaGUgSGFuZHkhCisKK1NvIGFsc28gc2VoZW4gZGllIE1lbnNjaGVuIFZlcm9uYXMgYXVzLiBadW1pbmRlc3QgZGllLCB1bSB3ZWxjaGUgIHdpciAgdW5zICBpbgorZGllc2VyIEdlc2NoaWNodGUga3VlbW1lcm4gd29sbGVuLiBTaWUgZnJhZ2VuIG5hY2ggZGVuCWFuZGVyZW4/ICBBYmVyLCAgbGllYmUKK0xlc2VyaW4sIGxpZWJlciBMZXNlciwgd2VyIGZyYWd0IGluIGVpbmVyIEdlc2NoaWNodGUsIGRpZSBpbiAgbXl0aGlzY2hlciAgWmVpdAorc3BpZWx0LCAgbmFjaCAgZGVuICBOYW1lbmxvc2VuPyAgT2RlciAgZ2Vob2VyZW4gIFNpZSAgenUgIGRlbmVuLCAgIGRpZQkgZWluZW4KK2hpc3RvcmlzY2hlbiBGaWxtIG1pdCB2aWVsZW4gU3RhdGlzdGVuIG51ciBhbnNjaGF1ZW4sICB1bSAgZGVuCXVuYXVmbWVya3NhbWVuCitTdHVkZW50ZW4genUgZmluZGVuLCBkZXIgc2ljaCBzY2huZWxsIGVpbiBwYWFyIE1hcmsgdmVyZGllbmVuICB3b2xsdGUgIHVuZCAgaW4KK2RlciBBdWZyZWd1bmcgdmVyZ2FzcywgZGllIFVociBhdXN6dXppZWhlbj8gV2llIHByb2ZhbiwgbGllYmUgTGVzZXJpbiwJbGllYmVyCitMZXNlci4gQWJlciBndXQsIHdlbm4gU2llIGVzIGdhciBuaWNodCBhbmRlcnMgaGFiZW4gd29sbGVuLCAgZnVlZ2VuICB3aXIgIGhpZXIKK25vY2ggZWluIHBhYXIgU3RhdGlzdGVuIGVpbiB1bmQgZ2ViZW4gZGVyIFN6ZW5lIG5vY2ggZWluIHdlbmlnIExva2Fsa29sb3JpdC4KKworU2ljaGVybGljaCBlcmtlbm5lbiBTaWUgZGllIERhbWUsIGRpZSAgZG9ydCAgYXVmICBkZW0gIE1hcmt0ICBzdGVodC4gIFNpZSAgaXN0CitydW5kbGljaCwgdHJhZWd0IGVpbmUgd2Vpc3NlIFNjaHVlcnplIHVlYmVyIGRlbSB3ZWl0ZW4gUm9jayAgdW5kICBlaW5lCXdlaXNzZQorQmx1c2UsIGRpZSBodWVic2NoIG1pdCBpaHJlbSByb3RlbiBCdXN0aWVyICBrb250cmFzdGllcnQuICBTaWUJaGF0ICBhcGZlbHJvdGUKK1dhbmdlbiB1bmQgZWluIGZyZXVuZGxpY2hlcyBMYWVjaGVsbiwgYmVpIGRlbSB3ZWlzc2UgWmFlaG5lIGJsaXR6ZW4uIE5laW4sIGRpZQorRGFtZSAgaXN0ICBuaWNodCAgZGllICBHZXdpbm5lcmluICBlaW5lcyAgWmFobnBhc3RhLVdlcmJlZmlsbXMsICBzaWUgIGlzdCAgZGllCitHZW11ZXNldmVya2FldWZlcmluLiBTaWUgIGhhbmRlbHQgIHVudGVyICBhbmRlcmVtICBtaXQJQUVwZmVsbiAgdW5kICBpc3QgIGRpZQorVXJoZWJlcmluIGRlcyBTcHJ1Y2hlczogRGFtaXQgSWhyIGF1Y2ggbW9yZ2VuIG5vY2gga3JhZnR2b2xsIHp1YmVpc3NlbiBrb2VubnQsCitFdWVyIEV4emVsbGVuei4gRGVyIE5hbWUgZGllc2VyIEZyYXUgaXN0IGluIGRlbiBUaWVmZW4gZGVyIEhpc3RvcmllIGVydHJ1bmtlbiwKK3NvbnN0IGZ1ZWhydGVuIGlocmUgRXJiZW4gYmlzIGhldXRlIGVpbmVuIEthbXBmIHVtIGRhcyBVcmhlYmVycmVjaHQgIGFuICBpaHJlbQorV2VyYmVzbG9nYW4uCisKK1NlbGJzdHZlcnN0YWVuZGxpY2ggd29sbGVuIHdpciBlaW4gbW9lZ2xpY2hzdCAgYXV0aGVudGlzY2hlcyAgQmlsZCAgZW50d2VyZmVuLAorZGFoZXIgZnVlZ2VuIHdpciBudW4gYXVjaCBub2NoIGRpZSBkdW5rbGUgR2VzdGFsdCBhbSBhbmRlcmVuIEVuZGUgZGVzICBQbGF0emVzCitlaW4uIFdpZSBTaWUgc2ljaCBzY2hvbiBnZWRhY2h0IGhhYmVuLCBoYW5kZWx0IGVzICBzaWNoICBiZWkgIGRpZXNlbSAgTWFubiAgdW0KK2VpbmVuIERpZWIuIEVyIGhhdCBudXIgZnVlciBkaWVzZW4gQWJzYXR6IHNlaW5lbiBVcmxhdWIgIGF1ZiAgZGVyICBGZXJpZW5pbnNlbAorZGVyIE15dGhlbiB1bnRlcmJyb2NoZW4sIGFsc28gem9sbGVuIFNpZSBpaG0gZ2VidWVocmVuZGUgQXVmbWVya3NhbWtlaXQuIFNlaGVuCitTaWUsIGVyIHdpbmt0LiBXaW5rZW4gd2lyIHp1cnVlY2sgdW5kIGxhc3NlbiBpaG4gc2VpbmVuIHdvaGx2ZXJkaWVudGVuCVVybGF1YgorZm9ydHNldHplbi4KKworTW9tZW50LCB3YXMgaGF0IGRlciBkaWNrZSwgc29ubmVudmVyYnJhbm50ZSBNYW5uIGltIEhhd2FpaWhlbWQgbWl0IGRlcglLYW1lcmEKK2RhIHp1IHN1Y2hlbj8gSGFsdGVuIFNpZSBiaXR0ZQllaW5lbiAgQXVnZW5ibGljayAgbWl0CWRlbSAgTGVzZW4gIGlubmUsICBpY2gKK3NjaGFmZmUgaWhuIGViZW4gZG9ydGhpbiB6dXJ1ZWNrLCB3byBlciBoZXJrYW0uCisKK0RhbmtlLCBTaWUga29lbm5lbiBqZXR6dCB3ZWl0ZXJsZXNlbi4KKworQmV2b3IgU2llIGRhbmFjaCBmcmFnZW4sIHdpbGwgaWNoIElobmVuICBlcmtsYWVyZW4sICB3YXMgIGVzICBtaXQgIGRlbgliZWlkZW4KK0tyYWVoZW4gYXVmIHNpY2ggaGF0LCAgZGllICBhdWYgIGRlciAgV2luZGUgIGRlcyAgaHVlYnNjaGVuICBCcnVubmVucyAgaW4gIGRlcgorUGxhdHptaXR0ZSBzaXR6ZW4uIEVzIHNpbmQgVHVydGVsa3JhZWhlbi4gSWhyZSBOYW1lbiBzaW5kIFVsbyB1bmQgIEF6enVybyAgdW5kCitTaWUgd2VyZGVuIGRpZSBiZWlkZW4gbm9jaCBiZXNzZXIga2VubmVubGVybmVuLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyMCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWQ1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyMApAQCAtMCwwICsxLDIwMSBAQAorREVSIFZJRVJURSBBS1QKKwlESUUgRVJTVEUgU1pFTkUKKworQnJ1ZGVyIExhd3JlbmNlIGJldHJhY2h0ZXRlIFBhcmlzIG1pdCBVbndpbGxlbi4gIkRvbm5lcnN0YWc/IEp1bGlhPyIKKworUGFyaXMgbmlja3RlLiAiU28gd2lsbCBlcyBpaHIgVmF0ZXIuIgorCisiRGFzIGlzdCBzZWhyIGt1cnpmcmlzdGlnLiIgRXIgd2llZ3RlIHNlaW5lbiBLb3BmICBoaW4gIHVuZCAgaGVyLiAgIkljaCAgd2Vpc3MKK25pY2h0LCBpY2ggd2Vpc3MgbmljaHQuIgorCisiV2FzIHdpc3NlbiBTaWUgbmljaHQ/IiBQYXJpcyB6b2cgZGllIFN0aXJuIGluIEZhbHRlbi4KKworIk5hLCBzbyBrdXJ6IG5hY2ggZGVtIFRvZCBpaHJlcyBWZXR0ZXJzLi4uIE1pciBrb21tdCBkYXMgZWluIHdlbmlnLCAgd2llICBzb2xsCitpY2ggc2FnZW4sIHNwYW5pc2NoIHZvci4iCisKKyJKdWxpYXMgIFZhdGVyICBpc3QgIGVudHNjaGxvc3Nlbi4gIEVyICBtZWludCwgIGRhc3MgIFR5YmFsdHMgIFRvZCAgc2llICAgbWVocgorYmV1bnJ1aGlndCwgYWxzIGd1dCBmdWVyIHNpZSBpc3QuIEF1c3NlcmRlbSBicmF1Y2h0IGVyIHdvaGwgZWluZW4gIG5ldWVuICBNYW5uCitpbiBkZW4gUmVpaGVuIHNlaW5lciBGYW1pbGllLiIKKworIkFscyBoYWV0dGVuIG5pY2h0IGRpZSBNb250YWd1ZXMgYXVjaCBlaW5lbiBWZXJsdXN0LCAgc2NobGllc3NsaWNoICBpc3QgIFJvbWVvCituaWNodCBtZWhyIGluIFZlcm9uYS4iCisKKyJXYXMgZnVlciBlaW4gUHJvYmxlbSBmdWVyIHVuc2VyZW4ga2xlaW5lbiAgUHJpZXN0ZXIsICBobT8iLCAgbXVybWVsdGUgIEF6enVybworbGVpc2UuCisKKyJXZW5uIGlobSBuaWNodCBzY2huZWxsIGV0d2FzIGVpbmZhZWxsdCwgbXVzcyBlciBKdWxpYSB6d2VpbWFsIHZlcmhlaXJhdGVuLiBPYgorc2VpbiBHb3R0IGRhcyBtYWc/IiBVbG8gZmx1ZXN0ZXJ0ZSBudXIsIGRvY2ggTGF3cmVuY2UgaGF0dGUgIHNpZSAgZ2Vob2VydCAgdW5kCitkcm9odGUgaWhyIG1pdCBkZW0gRmluZ2VyLgorCisiV2FzIHNhZ3QgSnVsaWEgc2VsYnN0IGRhenU/IiwgZnJhZ3RlIGVyIFBhcmlzLgorCisiSWNoIGhhYmUgbm9jaCBuaWNodCBtaXQgaWhyIGdlc3Byb2NoZW4uIgorCisiTmljaHQsIGRhc3Mgc2ljaCBpcmdlbmRqZW1hbmQgZGFydW0ga3VlbW1lcnRlLiIsIHJhdW50ZSBVbG8gZGVtIE1vZW5jaCB6dS4KKworQnJ1ZGVyIExhd3JlbmNlIG5pY2t0ZSBiZWRhZWNodGlnLiAiRXMgZ2VmYWVsbHQgbWlyICBuaWNodCwgIGVpbiAgTWFlZGNoZW4gIHp1Cit2ZXJoZWlyYXRlbiwgZGFzcyB1ZWJlcmhhdXB0IG5pY2h0IHdpbGwuIgorCisiSWNoIGhhYmUgbmljaHQgZ2VzYWd0LCBkYXNzIHNpZSBuaWNodCB3aWxsLiIKKworIkRhcyBoYXQgbWlyIGVpbiBWb2VnbGVpbiBpbnMgT2hyIGdlZmx1ZXN0ZXJ0LiIgTGF3cmVuY2UgZGV1dGV0ZSBhdWYgVWxvLgorCitQYXJpcywgZGVyIGVpbmVtIEZyYW56aXNrYW5lciBuYWhlenUgYWxsZXMgenV0cmF1dGUsIHNhaCBVbG8gYW4gdW5kIHZlcnN1Y2h0ZSwKK2RlbiBBdXNkcnVjayBWb2VnbGVpbiBtaXQgZGVyIHJpZXNpZ2VuIEtyYWVoZSBpbiBFaW5rbGFuZyB6dSBicmluZ2VuLiAiSWNoIGJpbgorc2ljaGVyLCAgSWhyICBWb2VnbGVpbgloYXQgIGRlciAgTmFjaHJpY2h0ICBHZXdpY2h0ICB2ZXJsaWVoZW4uIiwgIG1laW50ZSAgZXIKK2RpcGxvbWF0aXNjaC4KKworQnJ1ZGVyIExhd3JlbmNlIHJpZWIgc2ljaCBtaXQgZGVyIEhhbmQgdWViZXIgZGllICBBdWdlbiAgdW5kICBzYWggIGRlbglIdWVnZWwKK2hpbnVudGVyLiAiVGFldXNjaGUgaWNoIG1pY2gsIG9kZXIga29tbXQgZGEgSnVsaWE/IgorCitQYXJpcyBsYWVjaGVsdGUgSnVsaWEgenUuICAiV2llICBndXQsICBkYXNzICBkdSAga29tbXN0LCAgTGllYmxpbmdzYnJhdXQuICBXaXIKK3NwcmFjaGVuIGdlcmFkZSB2b24gZGlyLiIKKworIkRhcyBrYW5uIGljaCBtaXIgZGVua2VuLiIsIGFudHdvcnRldGUgSnVsaWEgdW50ZXJrdWVobHQuCisKKyJMaWVibGluZ3NicmF1dD8iIEF6enVybyBrcmFlY2h6dGUgdmVyZ251ZWd0LiAiT2IgZXIgbm9jaCBtZWhyIGRhdm9uIGhhdD8iCisKKyJXYWhyc2NoZWlubGljaCBuaWNodCwgc29uc3QgbGllc3NlIGVyIEp1bGlhIGluIEZyaWVkZW4uIiBVbG8gd2FyICBiZWVpbmRydWNrdAordm9uIEp1bGlhcyBIYWx0dW5nLgorCisiSWNoIGhhYmVuIGdlcmFkZSBkZW4gVGVybWluIGZ1ZXIgZGllIEhvY2h6ZWl0IGF1c2dlbWFjaHQuIgorCisiTXVzcyBkYXMgc2Vpbj8iIEp1bGlhIHZlcmRyZWh0ZSBkaWUgQXVnZW4uCisKKyJOYXR1ZXJsaWNoIG11c3MgaWNoLiIKKworIldhcnVtIGdlaHQgZXIgZGFubiBuaWNodCBoaW50ZXIgZGllIEJ1ZXNjaGU/IiwgbXVybWVsdGUgVWxvLgorCisiV2VubiBlcyBkZW5uIGdhciBuaWNodCBhbmRlcnMgZ2VodC4iCisKK1BhcmlzLCBkZXIgYW5uYWhtLCBKdWxpYSB3b2xsdGUgc2ljaCB2b3IgIGRlciAgSG9jaHplaXQgIHZvbiAgQnJ1ZGVyICBMYXdyZW5jZQorYmVyYXRlbiBsYXNzZW4sIGxhZWNoZWx0ZSBmcmV1bmRsaWNoLiAiU2FnIGVpbmZhY2ggQnJ1ZGVyICBMYXdyZW5jZSwgIGRhc3MgIGR1CittaWNoIGxpZWJzdCwgZGFubiBpc3QgYWxsZXMgaW4gT3JkbnVuZy4iCisKKyJXZW5uIGljaCBhbGxlcyBzbyBlaW5mYWNoIGluIE9yZG51bmcgYnJpbmdlbiBrb2VubnRlLCBpbmRlbSAgaWNoICBzYWdlLCAgZGFzcworaWNoIGlobiBsaWViZS4iIEp1bGlhIHNldWZ6dGUuCisKKyJOYSwgamV0enQgd2lyZCBpaHJlIFp1bmdlIHdpZWRlciAgc3ByaXR6aWdlci4iICBVbG8gIGZyZXV0ZSAgc2ljaCAgYXVmICBlaW5lbgorRGlzcHV0IG1pdCBQYXJpcy4KKworUGFyaXMgdmVyem9nIHNlaW4gR2VzaWNodCB6dSBlaW5lbSBkdWVtbWxpY2hlbiBMYWVjaGVsbi4gIkljaCBiaW4gc2ljaGVyLCBkYXNzCitkdSBtaWNoIGxpZWJzdC4iCisKKyJFaXRsZXIgUGZhdSEiLCBzY2huYXVidGUgVWxvIHZlcmFlY2h0bGljaC4KKworIldlbm4gZHUgZXMgc2Fnc3QsIFBhcmlzLiIsIG1laW50ZSBKdWxpYS4KKworIlNpZSB1ZWJ0IHNjaG9uIGZ1ZXIgZGllIFplaXQgbmFjaCBkZXIgSG9jaHplaXQuIiBVbG8gIGthbm50ZSAgZGVuICBUcmljaywgIHNvCitsYW5nZSBKYSB6dSBzYWdlbiwgYmlzIGRlciBhbmRlcmUgc2ljaCBlaW5lIFNhY2hlICBhbmRlcnMgIHVlYmVybGVndGUgIG51ciAgenUKK2d1dC4KKworIkpldHp0IHR1dCBtaXIgUGFyaXMgZmFzdCBsZWlkLiIgQXVjaCBBenp1cm8gaGF0dGUgbWl0IGRpZXNlciBNZXRob2RlICBiZXJlaXRzCitCZWthbm50c2NoYWZ0IGdlc2NobG9zc2VuLgorCitQYXJpcyBrdWVzc3RlIEp1bGlhIHp1ZWNodGlnIGF1ZiBkaWUgV2FuZ2UuICAiQW0gIERvbm5lcnN0YWcgIGJla29tbXQgIGR1ICBkZW4KK2dyb3NzZW4gQnJ1ZGVyIHZvbiBkaWVzZW0gS3Vzcy4iIEVyIHp3aW5rZXJ0ZSBpaHIgIGFuenVlZ2xpY2ggIHp1ICB1bmQgIGRyZWh0ZQorc2ljaCB1bS4KKworSnVsaWEgd2lzY2h0ZSBzaWNoIGRpZSBXYW5nZSBtaXQgZWluZW0gYW5nZXdpZGVydGVuIEdlc2ljaHRzYXVzZHJ1Y2sgIGFiLiAgIkVzCitzaWVodCBnYW56IGRhbmFjaCBhdXMuIgorCitBbHMgUGFyaXMgZGVuICBIdWVnZWwgIGhpbnVudGVyZ2VzdGFrc3QgIHdhciwgIGRyZWh0ZSAgSnVsaWEgIHNpY2ggIHp1CUJydWRlcgorTGF3cmVuY2UgdW0uICJTY2hlaXNzZS4iCisKK1VsbywgQXp6dXJvIHVuZCBCcnVkZXIgTGF3cmVuY2Ugc2NobmFwcHRlbiBnbGVpY2h6ZWl0aWcgbmFjaCBMdWZ0LgorCisiRGFzIGlzdCBhYmVyIGVpbiBzY2hsZWNodGVzIFdvcnQsIEp1bGlhLiIsIHRhZGVsdGUgQnJ1ZGVyIExhd3JlbmNlIG1pbGQuCisKKyJNaXIgZmFlbGx0IGtlaW4gYmVzc2VyZXMgZWluLiIKKworIk5hbmFuYS4iIExhd3JlbmNlIHN0cmljaCBpaHIgc2FuZnQgdWViZXIgZGFzIEhhYXIuCisKK0p1bGlhICBzYWggIEJydWRlciAgTGF3cmVuY2UgIGVybnN0ICBhbi4gICJJY2ggIGJpbiAgbWl0ICBSb21lbyAgIHJlY2h0bWFlc3NpZwordmVyaGVpcmF0ZXQsIG9kZXI/IgorCitEZXIgTW9lbmNoIG5pY2t0ZS4gIldlbm4gaWhyLi4uIiAgRXIgIGJsaWNrdGUgIGZyYWdlbmQgIHp1ICBBenp1cm8gIGhvY2gsICBkZXIKK2Jlc3RhZXRpZ2VuZCBuaWNrdGUuICJKYSwgZGFzIHNlaWQgaWhyIHdvaGwuIgorCisiRGFubiBrYW5uIGljaCBhdWNoIGtlaW5lbiBhbmRlcmVuIE1hbm4gaGVpcmF0ZW4uIFNjaG9uIGdhciAgbmljaHQsICB3ZW5uICBpY2gKK25pY2h0IHdpbGwuIgorCisiRXMgZ2lidCBQcmFlemVuZGVuemZhZWxsZSwgd2Vpc3N0IGR1LiBXZW5uIGVpbiBNYW5uICB2ZXJiYW5udCAgaXN0LCAga2FubiAgZXIKK2Z1ZXIgdG90IGVya2xhZXJ0IHdlcmRlbi4iCisKK0p1bGlhIHJpY2h0ZXRlIHNpY2ggYXVmIGVpbmUgbGFuZ2UgVm9ybGVzdW5nIGVpbiwgZG9jaCBhbHMgIExhd3JlbmNlICBzY2h3aWVnLAoraG9iIHNpZSBkaWUgSGFlbmRlLiAiTnVyLCB3ZW5uIG1hbiBlaW5lbiBBbnRyYWcgc3RlbGx0LiAgVW5kICBpY2ggIHN0ZWxsZSAgZGVuCitiZXN0aW1tdCBuaWNodC4iIEVuZXJnaXNjaCBwdXR6dGUgc2llIHNpY2ggZGllIE5hc2UuICJJY2ggIHdlcmRlICBQYXJpcyAgbmljaHQKK2hlaXJhdGVuLiBFciBpc3QgaGFlc3NsaWNoLCBhdWZnZWJsYXNlbiB1bmQgbmljaHQgUm9tZW8uIgorCitMYXdyZW5jZSBuaWNrdGUuICJEcmVpIGd1dGUgR3J1ZW5kZSwgYWJlciB3YXMga29lbm50ZXN0IGR1IHNvbnN0IHR1bj8iCisKKyJJY2ggYnJpbmcgbWljaCB1bS4iCisKKyJEYXMgbGFzc2UgaWNoIG5pY2h0IHp1LiBHb3R0IHZlcmJpZXRldCBlcyB1bmQgd2VubiBkdSAgbWlyICBkYXZvbiAgZXJ6YWVobHN0LAoraGFsdGUgaWNoIGRpY2ggYWIuIgorCisiVmVyc3VjaHMgbnVyLiIgSnVsaWEgc2NoYXV0ZSBCcnVkZXIgTGF3cmVuY2Ugc28gZHVyY2hkcmluZ2VuZCBhbiwgZGFzcyBkaWVzZXIKK3NpY2ggYW0gbGllYnN0ZW4gaW4gc2VpbmVyIEt1dHRlIHZlcmtyb2NoZW4gaGFldHRlIHdpZQllaW5lICBTY2hpbGRrcm9ldGUgIGluCitpaHJlbSBQYW56ZXIuCisKKyJMYXNzIG1pY2ggbmFjaGRlbmtlbiwgdmllbGxlaWNodCBoYWJlIGljaCBlaW5lIElkZWUuIgorCisiRGVuayBsaWViZXIgc2NobmVsbCwgZGVubiBpY2ggaGFsdGUgZXMgbmljaHQgbWVociBhdXMuIgorCisiV2VubiBkdSBkZW4gTXV0IGhhc3QsIGRpY2ggdW16dWJyaW5nZW4sIHdhcyBuYXR1ZXJsaWNoICBnZWdlbiAgR290dGVzICBHZXNldHoKK3dhZXJlLCBkYW5uIGhhc3QgZHUgZG9jaCBiZXN0aW1tdCBkZW4gTXV0LCBkaWNoIHNjaGVpbmJhciB1bXp1YnJpbmdlbiB1bmQgIG51cgorc2NoZWluYmFyIGdlZ2VuIEdvdHRlcyBHZXNldHogenUgaGFuZGVsbj8iCisKKyJLb21wbGl6aWVydGVyIGthbm4gZXIgZXMgd29obCBuaWNodCBhdXNkcnVlY2tlbi4iLCBtYXVsdGUgVWxvLgorCisiTGVnYWwsIGlsbGVnYWwuLi4iIEp1bGlhIHpvZWdlcnRlLgorCisiU2NoZWlzc2VnYWwuIiwgaGFsZiBBenp1cm8gYXVzIHVuZCAgZXJudGV0ZSAgZWluZW4gIHZlcm5pY2h0ZW5kZW4gIEJsaWNrICB2b24KK0JydWRlciBMYXdyZW5jZS4KKworSnVsaWEgbmlja3RlLiAiUmljaHRpZy4gSWNoIG5laG1lIGVzIG1pdCBhbGxlbSBhdWYsIEJydWRlciBMYXdyZW5jZS4gIFdlbm4gIGVzCitzZWluIG11c3MsIGRhbm4gc2V0emUgaWNoIG1pY2ggaW4gZWluZW4gQW1laXNlbmhhdWZlbiwgc3BpZWxlIEthcnRlbiBtaXQgZWluZXIKK0hleGUsIHRhbnplIGF1ZiBkZW0gRnJpZWRob2Ygb2RlciAtIGphLCBzb2dhciBkYXMgLSAgaWNoICBzYWdlCW1laW5lbQlWYXRlciwKK2Rhc3MgZXIgZWluICBoZXJ6bG9zZXIJVHlyYW5uCWlzdC4gIFdlbm4gIGR1CXdlaXNzdCwgIHdpZSAgaWNoICBhdXMJZGllc2VtCitTY2hsYW1hc3NlbCBoZXJhdXNrb21tZSwgZGFubiByZWRlLiIKKworQnJ1ZGVyCUxhd3JlbmNlICB2ZXJzY2h3YW5kICBpbiAgZGVyICBLYXBlbGxlCXVuZCAga3JhbXRlICBpbiAgZWluZXIJS2lzdGUuCitTY2hsaWVzc2xpY2gga2FtIGVyIG1pdCBlaW5lciBrbGVpbmVuIEZsYXNjaGUgd2llZGVyIGhlcmF1cy4gICJIaWVyLCAgZGFzICBpc3QKK2RpZSBMb2VzdW5nLiIKKworSnVsaWEgd29sbHRlIG5hY2ggZGVtIEZsYWVzY2hjaGVuIGdyZWlmZW4sIGRvY2ggTGF3cmVuY2Ugem9nICByYXNjaCAgZGllICBIYW5kCit6dXJ1ZWNrLiAiSG9lciBtaXIgZXJzdCB6dS4gRHUgZ2Voc3QgaGllcm1pdCBuYWNoIEhhdXNlIHVuZCB0dXN0IGdhbnogc28sICBhbHMKK2hhZXR0ZXN0IGR1IGVzIGRpciAgdWViZXJsZWd0LglOaWVtYW5kICBkYXJmICBWZXJkYWNodCAgc2Nob2VwZmVuLCAgYWxzbyAgc2VpCitmcm9laGxpY2ggdW5kIHR1Li4uIE5hLCB3YXMgaW1tZXIgZWluZSBCcmF1dCBzbyB0dXQuIEFtIE1pdHR3b2NoYWJlbmQgZ2Voc3QgZHUKK2lucyBCZXR0IHVuZCBzb3Jnc3QgZGFmdWVyLCBkYXNzIGR1ICBpbiAgZGVpbmVtICBaaW1tZXIgIGxhbmdlCWdlbnVnICBhbGxlaW5lCitiaXN0LiIgRXIgc2Nod2Vua3RlIGRpZSBGbGFzY2hlLiAiRGllc2VzIGtsZWluZSBTY2hhZXR6Y2hlbiBoaWVyICB3aXJrdCAgbmljaHQKK3NvIHNjaG5lbGwsIGRhc3MgbWFuIGRpZSBXaXJrdW5nIG5pY2h0CXZlcmhpbmRlcm4gIGtvZW5udGUsICBpbmRlbSAgbWFuICBkaWNoCit6dW0uLi4gaW5kZW0gbWFuIGRlaW5lbiBNYWdlbiBsZWVydC4iCisKK0p1bGlhIG5pY2t0ZSB0cmF1cmlnLiAiQWxzbyBicmluZ2UgaWNoIG1pY2ggZG9jaCB1bS4iCisKKyJOZWluLCBuZWluLiBEYWJlaSAgaHVlbGZlICBpY2ggIGRpciAgbmljaHQuIiAgTGF3cmVuY2UgIGxhZWNoZWx0ZS4gICJHYW56ICBpbQorR2VnZW50ZWlsLiBXZW5uIGR1IGVzIHRyaW5rc3QsIHdpcmtzdCBkdSBudXIgZnVlciB6d2VpdW5kdmllcnppZyAgU3R1bmRlbiAgd2llCit0b3QuIEVzIGxhZXNzdCBkZWluZW4gUHVscyBzbyBsYW5nc2FtIHdlcmRlbiwgZGFzcyBuaWVtYW5kICBpaG4gIG1laHIgIGZ1ZWhsZW4KK2thbm4sIGRlaW5lIE11c2tlbG4gd2VyZGVuIHN0ZWlmLCBkZWluIEF0ZW0gc2V0enQgIGF1cwl1bmQgIGRlaW5lICBIYXV0ICB3aXJkCitrYWx0LiBKZWRlciB3aXJkIGRlbmtlbiwgZHUgc2Vpc3QgdG90LiBOdXIsIGRhc3MgZHUgZXMgbmljaHQgYmlzdC4iCisKK0p1bGlhIG5pY2t0ZS4gIldhcyBudWV0enQgZGFzPyBJcmdlbmR3YW5uIHdlcmRlIGljaCB3YWNoICB1bmQgIGFsbGVzICBpc3QgIHdpZQordm9yaGVyLiIKKworQnJ1ZGVyIExhd3JlbmNlICBicmVpdGV0ZSAgZGllCUFybWUgIGF1cywgIGFscyAgaGllbHRlICBlciAgZWluICBncm9zc2FydGlnZXMKK0dlc2NoZW5rLiAiTmljaHQgZ2Fuei4gTWFuIHdpcmQgZGljaCBiZWdyYWJlbi4gV2VubiAgZGllICBXaXJrdW5nICBuYWNobGFlc3N0LAord2lyZCBSb21lbyBkaWNoICBhdXMgIGRlciAgR3J1ZnQgIGhvbGVuICB1bmQgIGlociAgYmVpZGUgIGtvZW5udCAgbmFjaAlNYW50dWEKK3ZlcnNjaHdpbmRlbiwgb2huZSBkYXNzIGplIGVpbiBNZW5zY2ggZGF2b24gZXJmYWVocnQuIgorCisiUm9tZW8/IFdpZSBzb2xsIGVyLi4uIgorCitMYXdyZW5jZSB1bnRlcmJyYWNoIHNpZS4gIkdhbnogZWluZmFjaDogSWNoIHdlcmRlIGlobSBzY2hyZWliZW4uIgorCitKdWxpYSBmaWVsIGRlbSBNb2VuY2ggdW0gZGVuIEhhbHMuICJJY2gga29lbm50ZSBkaWNoIGt1ZXNzZW4hIgorCisiTGllYmVyIG5pY2h0LCBzb25zdCBlcnd1ZXJnZW4gaWhuIHNlaW5lIEdlbHVlYmRlLiIsIG1laW50ZSBVbG8gc2NoYWRlbmZyb2guCisKKyJTaWVoIGlobiBkaXIgYW4uIiBBenp1cm8gZGV1dGV0ZSBtaXQgZGVtIFNjaG5hYmVsIGF1ZiBCcnVkZXIgIExhd3JlbmNlLiAgIkRhcwordHVuIHNpZSBzbyBvZGVyIHNvLiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMjEgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjEyYmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMjEKQEAgLTAsMCArMSw1NyBAQAorREVSIFZJRVJURSBBS1QKKwlESUUgWldFSVRFIFNaRU5FCisKK0NhcHVsZXQgZ2luZyBtaXQgc2VpbmVyIEZyYXUgZGllIEdhZXN0ZWxpc3RlIGR1cmNoLiAiV2FzIG1laW5zdCBkdSwgc29sbGVuIHdpcgorQ291c2luZSBBZGVsZ3VuZCBlaW5sYWRlbj8iCisKKyJCaXN0IGR1IHdhaG5zaW5uaWc/IFdpciBoYWJlbiBUYW50ZSBGcmllZGEgZWluZ2VsYWRlbiEiIEZyYXUgIENhcHVsZXQgIGxpZWJ0ZQorendhciBkaWUga2xlaW5lbiBTdGljaGVsZWllbiBkZXIgR2VzZWxsc2NoYWZ0LCBlaW5lIEJvbWJlIGltIEhhdXNoYWx0IHdhciAgaWhyCithbGxlcmRpbmdzIHp1d2lkZXIuCisKKyJKYSwgIHdhaG5zaW5uaWcgIGJpbiAgaWNoICB3YWhyc2NoZWlubGljaC4iICBIZXJyICBDYXB1bGV0ICBzZXVmenRlLiAgIlNvdmllbAorQXVmaGViZW5zIHVuZCBKdWxpYSBoYXQgbm9jaCBuaWNodCBlaW5tYWwgZWluIG5ldHRlcyBXb3J0IGZ1ZXIgbWljaC4iCisKK0ZyYXUgQ2FwdWxldCB1ZWJlcndhbmQgc2ljaCB1bmQgbGVndGUgaWhyZW0gTWFubiBkaWUgSGFuZCAgYXVmCWRpZSAgU2NodWx0ZXIuCisiRWluZXMgVGFnZXMgd2lyZCBzaWUgZXMgdmVyc3RlaGVuLiIKKworIldhcyB2ZXJzdGVoZW4/IiwgZnJhZ3RlIEp1bGlhIHZvbiBkZXIgVHVlciBhdXMuCisKKyJXaWV2aWVsIE11ZWhlIHdpciB1bnMgZ2ViZW4sIHVtIGRpY2ggZ3V0IHVuZCBhbnN0YWVuZGlnIHVudGVyICBkaWUgIEhhdWJlICB6dQorYnJpbmdlbi4iIEFid2VzZW5kIHp1cGZ0ZSBGcmF1IENhcHVsZXQgSnVsaWFzIEtsZWlkIGdlcmFkZS4KKworIkRvY2gsIGljaCB2ZXJzdGVoZSBzY2hvbi4iIEp1bGlhIHNjaGVua3RlIGlocmVuIEVsdGVybiBlaW4gZWJlbnNvIHN0cmFobGVuZGVzCit3aWUgZmFsc2NoZXMgTGFlY2hlbG4uICJJY2ggdmVyc3RlaGUgc29nYXIgc28gZ3V0LCAgZGFzcyAgaWNoICBQYXJpcyAgaGVpcmF0ZW4KK3dlcmRlLCBvaG5lIGVpbmVuIEF1ZnN0YW5kIHp1IHByb2JpZXJlbi4iCisKK0hlcnIgQ2FwdWxldCBibGlja3RlIHVlYmVycmFzY2h0IHZvbiBkZXIgR2Flc3RlbGlzdGUgYXVmLiAiQmlzdCBkdSAgZG9jaCAgbm9jaAorenVyIFZlcm51bmZ0IGdla29tbWVuPyBJbiBkZW0gRmFsbCBmZWllcm4gIHdpcglkaWUgIEhvY2h6ZWl0ICBnbGVpY2ggIG1vcmdlbiwKK2RhbWl0IGR1IGVzIGRpciBuaWNodCBub2NoIGVpbm1hbCBhbmRlcnMgdWViZXJsZWdzdC4iCisKK0p1bGlhIG5pY2t0ZSBlcmdlYmVuLiAiR2FueiB3aWUgbWVpbiBWYXRlciB3dWVuc2NodC4iCisKK0hlcnIgQ2FwdWxldCB0YWV0c2NoZWx0ZSBpaHIgZGVuIEtvcGYuICJEYXMgaXN0IFBhcGFzICBrbGVpbmVzICBNYWVkY2hlbi4iICBFcgorYmVnYW5uIHp1IHN0YW1tZWxuLiBPZmZlbnNpY2h0bGljaCB3dXNzdGUgZXIgbmljaHQgbWVociwgd2FzIGVyIHNhZ2VuICB3b2xsdGUuCisiSmFqYSwgZGVyIGd1dGUgQnJ1ZGVyICBMYXdyZW5jZS4gIEJpcyAgamV0enQgIGhhdCAgZXIgIG5vY2ggIGplZGVtICBkZW4gIEtvcGYKK3p1cmVjaHRnZXJ1ZWNrdC4gSWNoIGJpbiBpaG0gZGFua2Jhci4iIEVyIHpvZWdlcnRlIHVuZCBmbHVlY2h0ZXRlIHNpY2ggZGFubiBpbgorUGhyYXNlbi4gIkFjaCB3YXMsIGdhbnogVmVyb25hIGlzdCBpaG0genUgRGFuayB2ZXJwZmxpY2h0ZXQuIgorCitKdWxpYSBuaWNrdGUuICJadW1pbmRlc3QgaWNoIHN0ZWhlIHRpZWYgaW4gc2VpbmVyIFNjaHVsZC4iIFNpZSBkYWNodGUgIGFuICBkaWUKK2tsZWluZSBGbGFzY2hlIGluIGlocmVyIEhhbmR0YXNjaGUgdW5kIGxhZWNoZWx0ZS4gIk1hbWEsIGthbm4gaWNoICBtb3JnZW4gIGVpbgorYmlzc2NoZW4gU2NobXVjayB2b24gZGlyIGhhYmVuPyIKKworRnJhdSAgQ2FwdWxldCAgbGFlY2hlbHRlLiAgIlN1Y2ggIGRpciAgbnVyICBhdXMsICB3YXMgIGR1ICBoYWJlbiAgIG1vZWNodGVzdC4iCitOYWNoZGVua2xpY2ggYmxpY2t0ZSBzaWUgSnVsaWEgbmFjaCB1bmQgd2FuZHRlIHNpY2ggZGFubiBhbiBpaHJlbiAgTWFubi4gICJJY2gKK2RlbmtlIG5pY2h0LCBkYXNzIHdpciBkZW4gVGVybWluIGF1ZiBtb3JnZW4gdmVyc2NoaWViZW4gIHNvbGx0ZW4uICBVZWJlcm1vcmdlbgord2FlcmUgaW1tZXIgbm9jaCBlaW4gZ3V0ZXIgVGFnIHVuZCBmdWVyIG1vcmdlbiBoYWJlbiB3aXIgYmVzdGltbXQgbmljaHQgIGdlbnVnCitWb3JyYWV0ZSBpbSBIYXVzLiIKKworIkFjaCwgZGFydW0ga3VlbW1lcmUgaWNoIG1pY2ggc2Nob24uIiBIZXJyIENhcHVsZXQgd2FyIGZlc3QgZW50c2NobG9zc2VuLCAgZGllCittaWxkZSBTdGltbXVuZyBzZWluZXIgVG9jaHRlciBhdXN6dW51dHplbiAgdW5kCWVpbmVuICBTa2FuZGFsCXp1ICB2ZXJtZWlkZW4uCisiU29yZyBkdSBkYWZ1ZXIsIGRhc3MgSnVsaWEgbW9yZ2VuIGhlcmF1c2dlcHV0enQgaXN0LCAgaWNoICBwdXR6ZSAgZGFmdWVyICBkYXMKK0hhdXMgdW5kIGVybGVkaWdlIGRlbiBSZXN0LiIKKworIlNlaXQgd2FubiBiaXN0IGR1IHVudGVyICBkaWUgIEhhdXNtYWVubmVyICBnZWdhbmdlbj8iLCAgZnJhZ3RlICBGcmF1ICBDYXB1bGV0Cit6d2VpZmVsbmQuCisKK0lociBNYW5uIGJydW1tdGUgbnVyIHVuZCBiZXVndGUgc2ljaCB3aWVkZXIgdWViZXIgZGllIEdhZXN0ZWxpc3RlLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyMiBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MjE5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyMgpAQCAtMCwwICsxLDE4MCBAQAorREVSIFZJRVJURSBBS1QKKwlESUUgRFJJVFRFIFNaRU5FCisKK1BvbGx5IGxlZ3RlIGRhcyBLbGVpZCwgZGFzIEp1bGlhcyBNdXR0ZXIgYmVpIGlocmVyIGVpZ2VuZW4gIEhvY2h6ZWl0ICBnZXRyYWdlbgoraGF0dGUsIHVlYmVyIGVpbmVuIFN0dWhsLiAiSHVlYnNjaCBpc3QgZGFzLiBCZXN0aW1tdCBmcmV1c3QgZHUgZGljaCwgIGRhc3MgIGR1CitlcyBtb3JnZW4gYW56aWVoZW4ga2FubnN0LiIKKworSnVsaWEgaGF0dGUgZGllIEFucHJvYmUgd2llIGVpbmUgS2xlaWRlcnB1cHBlIHVlYmVyIHNpY2ggIGVyZ2VoZW4gIGxhc3NlbiAgdW5kCityZWFnaWVydGUgYXVjaCBqZXR6dCBuaWNodCBhdWYgUG9sbHlzIFdvcnRlLiBPYndvaGwgIGVzICBpaHIgIHNjaHdlciAgZ2VmYWxsZW4KK3dhciwgaGF0dGUgc2llIG5pY2h0IGVpbm1hbCBFaW5zcHJ1Y2ggIGVyaG9iZW4sICBhbHMgIGRpZSAgU2NobmVpZGVyaW4JZGFyYXVmCitiZXN0YW5kLCBkYXNzIEp1bGlhIHp1dmllbCBPYmVyd2VpdGUgaGF0dGUgdW5kIGRhcyBLbGVpZCAgdW5iZWRpbmd0ICBnZWFlbmRlcnQKK3dlcmRlbiBtdXNzdGUuIEdsdWVja2xpY2hlcndlaXNlIHdhciBGcmF1IENhcHVsZXQgIGVpbmUgIHByYWt0aXNjaGUgIEZyYXUgIHVuZAoraGF0dGUgYmVpIGRlciBBbmZlcnRpZ3VuZyBkZXMgS2xlaWRlcyBkYXJhbiBnZWRhY2h0LCBhdXNyZWljaGVuZCBTdG9mZgl1ZWJyaWcKK3p1IGxhc3Nlbi4gTnVyIEp1bGlhIGhhdHRlIFVsb3MgdmVyYWVjaHRsaWNoZW4JS29tbWVudGFyICBnZWhvZXJ0LCAgZGFzcyAgZGVyCitTdG9mZiB3b2hsIHdlbmlnZXIgYXVzIEdydWVuZGVuIGRlciBTcGFyc2Fta2VpdCBkb3J0IHZlcmJsaWViZW4gIHdhciwgIHNvbmRlcm4KK3dlaWwgRnJhdSBDYXB1bGV0IGJlaSBkZXIgZGFtYWxpZ2VuIEFucHJvYmUgZ2Vtb2dlbHQgaGF0dGUuCisKK1VsbyBzY2h1ZXR0ZWx0ZSBhdWYgaWhyZW0gQXN0IHZvciBkZW0gRmVuc3RlciBkZW4gS29wZi4gIkRhcyAgYXJtZSAgRGluZy4gIFdpZQora2FubiBtYW4gaWhyIG51ciB6dW11dGVuLCB6dSBpaHJlciBIb2NoemVpdCBhYmdlbGVndGUgS2xlaWRlciB6dSB0cmFnZW4uIgorCisiRHUgaGFzdCBkaXIgbm9jaCBuaWNodCBlaW5tYWwgZWluIEJhbmQgdW0gZGVuICBIYWxzICBnZWJ1bmRlbiwgIGFscyAgd2lyICB1bnMKK3p1c2FtbWVuIGdldGFuIGhhYmVuLiIsIG11cnJ0ZSBBenp1cm8uCisKKyJXYXJ1bSBoYWV0dGUgaWNoIGF1Y2ggc29sbGVuPyIsIHNjaG5hcHB0ZSBVbG8uICJEdSBoYXR0ZXN0IGVzIGphICBhdWNoICBuaWNodAorbm9ldGlnLCAgbWlyICBlaW5lbiAgIEhlaXJhdHNhbnRyYWcgICB6dSAgIG1hY2hlbiwgICBnZXNjaHdlaWdlICAgZGVubgkgZWluZW4KK1ZlcmxvYnVuZ3NyaW5nIHp1IGJlc29yZ2VuLiIKKworQXp6dXJvLCBkZXIgc2ljaCBzZWhyIGdlbmF1IGRhcmFuIGVyaW5uZXJ0ZSwgZWluZW4gZ2xpdHplcm5kZW4gUmluZyBhdXMgIGVpbmVtCit1bmJlYXVmc2ljaHRpZ3RlbiBTY2htdWNra2Flc3RjaGVuIGdlc3RvaGxlbiB6dSBoYWJlbiwgZHJlaHRlIHNpY2ggIHNjaG1vbGxlbmQKK3VtLiAiSWNoIGhhYmUgZGlyIGltbWVyaGluIGVpbiBzY2hvZW5lcyBOZXN0IGdlYmF1dC4iCisKK1VsbyBpZ25vcmllcnRlIGlobiB1bmQgYmVvYmFjaHRldGUgRnJhdSBDYXB1bGV0LCBkaWUgSnVsaWFzIFppbW1lciBiZXRyYXQuCisKKyJLb21tdCAgaWhyICB6dXJlY2h0PyAgSGFidCAgaWhyICBhbGxlcyAgZ2VmdW5kZW4/IiwgICBmcmFndGUgICBGcmF1ICAgQ2FwdWxldAorYXVmZ2VrcmF0enQuCisKKyJXaXIgc2luZCBmZXJ0aWcuIiBKdWxpYSBnYWVobnRlIGhpbnRlciB2b3JnZWhhbHRlbmVyIEhhbmQuICJJY2ggYmluIG11ZWRlIHVuZAord2VubiBpY2ggbW9yZ2VuIGd1dCBhdXNzZWhlbiBzb2xsLCBtdXNzIGljaCBub2NoIGVpbiBiaXNzY2hlbiBzY2hsYWZlbi4iCisKKyJFcyBnaWJ0IGRhIG5vY2ggZXR3YXMsIHdvcnVlYmVyIHdpciAgcmVkZW4gIHNvbGx0ZW4uIiwgIGJlZ2FubiAgRnJhdSAgQ2FwdWxldAordW5zaWNoZXIuCisKKyJLZWluZSBTb3JnZSwgTWFtYSwgUG9sbHkgaGF0IG1pciAgc2Nob24gIGdlc2FndCwgIGRhc3MgIFBhcmlzICB3YWhyc2NoZWlubGljaAorc2NobmFyY2h0LiIKKworIkRhcyBpc3QgbmljaHQgZGFzIGVpbnppZ2UsIEp1bGlhLiIgRnJhdSBDYXB1bGV0IGVycm9ldGV0ZS4KKworIkhhdCBlciBTY2h3ZWlzc2Z1ZXNzZT8iCisKKyJOLW5laW4uIiAgRnJhdSAgQ2FwdWxldCAgd2FuZCAgc2ljaC4gICJEdSAgYnJhdWNoc3QgIGtlaW5lICBBbmdzdCAgIHZvciAgIGRlcgorSG9jaHplaXRzbmFjaHQgenUgaGFiZW4sIHdlaXNzdCBkdS4iIFNpZSAgYWVobmVsdGUgIGVpbmVtICBHZW5lcmFsLCAgZGVyICBlYmVuCitlaW5lbiBob2ZmbnVuZ3Nsb3NlbiBBdXNmYWxsIGJlZm9obGVuIGhhdC4KKworIk5hdHVlcmxpY2ggd2Vpc3MgaWNoLCBNYW1hLiIgSnVsaWEgZ2Vub3NzIGVzLCAgaWhyZSAgTXV0dGVyICBzbyAgdmVybGVnZW4gIHp1CitzZWhlbi4KKworIlBhcmlzIGlzdCBlaW4gZnJldW5kbGljaGVyIE1hbm4uIgorCisiVW5kIGFsdCBnZW51ZywgZGFzcyBzaWUgc2VsYnN0IEVyZmFocnVuZ2VuIG1pdCBpaG0gIGhhYmVuICBrb2VubnRlLiIsICBmdWVndGUKK0F6enVybyB1bmduYWVkaWcgaGluenUuCisKKyJJY2ggYmluIGpldHp0IG11ZWRlLCBNYW1hLiIgSnVsaWEgem9nIGRpZSAgVm9yaGFlbmdlICB2b20gIEJldHQgIHVuZCAgd2lua3RlLgorIkd1dGUgTmFjaHQuIgorCitGcmF1IENhcHVsZXQgd29sbHRlIG5vY2ggZXR3YXMJc2FnZW4sCXd1cmRlICBhbGxlcmRpbmdzICB2b24JUG9sbHkgIGFtICBBcm0KK2dlbm9tbWVuLiAiR2VoZW4gd2lyIHNjaGxhZmVuIHVuZCBsYXNzZW4gSnVsaWEgaWhyZSBSdWhlLiIsIHNjaGx1ZyBQb2xseSB2b3IuCisKK0p1bGlhIHNldWZ6dGUgbGF1dCwgYWxzIGRpZSBiZWlkZW4gIGdlZ2FuZ2VuICB3YXJlbi4gICJIb2ZmZW50bGljaCAgbmljaHQgIGJpcworbW9yZ2VuLiIKKworVWxvIHNjaG5pZWZ0ZSBsYXV0LgorCisiU28gc2NobGltbSBpc3QgZXMgbmljaHQsIEtyYWVoZS4iIEp1bGlhIHpvZyBlaW4gTGFlY2hlbG4gYXVzIGRlbiBUaWVmZW4gaWhyZXIKK0VyaW5uZXJ1bmcgdW5kIG5hZ2VsdGUgZXMgZW50c2NobG9zc2VuIGF1ZiBpaHJlbSBHZXNpY2h0IGZlc3QuICJJY2ggYmluICBmcm9oLAorZGFzcyBpaHIgaGllciBzZWlkLiBEYW5uIG11c3MgaWNoICBkYXMJWmV1ZyAgd2VuaWdzdGVucyAgbmljaHQgIGdhbnogIGFsbGVpbmUKK3RyaW5rZW4uIgorCisiQWVobSwgZXMgbWFjaHQgZGlyIGFiZXIgaG9mZmVudGxpY2ggbmljaHRzIGF1cywgd2VubiB3aXIgbmljaHQgIG1pdHRyaW5rZW4/IiwKK2ZyYWd0ZSBVbG8uCisKKyJBYmVyIGR1IGtvZW5udGVzdCBlcyBydWhpZyBtaXQgV2VpbiB2ZXJkdWVubmVuIHVuZCBtaXIgIGVpbmVuICBTY2hsdWNrICBkYXZvbgorYWJnZWJlbi4gVm9uIGRlbSBXZWluLCBuYXR1ZXJsaWNoLiIgQXp6dXJvIHJpZWIgc2ljaCBiZWlsYWV1ZmlnIG1pdCBkZXIgS3JhbGxlCit1ZWJlciBkZW4gU2NobmFiZWwuCisKK0p1bGlhIGhvZXJ0ZSBuaWNodCB6dSwgc29uZGVybiBiZXRyYWNodGV0ZSBkaWUgRmxhc2NoZS4gIldhcyAgbWVpbnQgIGlociwgIGhhdAorQnJ1ZGVyIExhd3JlbmNlIG1pY2ggcmVpbmdlbGVndD8iCisKKyJXYXJ1bSBzb2xsdGUgZXI/IiwgZnJhZ3RlIFVsby4KKworIldpZSBzdGFlbmRlIGVyIHdvaGwgZGEsIHdlbm4gaWNoIGFsbGVuIGVyemFlaGxlLCBkYXNzIGVyIG1pY2ggIGJpbm5lbiAgendlaWVyCitUYWdlIGdsZWljaCB6d2VpIE1hbCB2ZXJoZWlyYXRldCBoYXQ/IgorCisiQWNoIHdhcy4iIFVsbyBrbmlmZiBlaW4gQXVnZSB6dS4gICJXZXIgIHNvbGx0ZSAgZGlyICB3b2hsICBnbGF1YmVuLCAgZGFzcyAgZHUKK2F1c2dlcmVjaG5ldCBtaXQgUm9tZW8gTW9udGFndWUgdmVyaGVpcmF0ZXQgYmlzdD8gRGllIExldXRlIGdsYXViZW4gdmllbCwgYWJlcgorZGFzIGdpbmdlIGltIExlYmVuIG5pY2h0IGluIGlocmUgS29lcGZlLiIKKworSnVsaWEgbmlja3RlLiAiTWFnIHNlaW4uIEFsc28gc2NoZWlkZXQgZGFzIGF1czogIEJydWRlciAgTGF3cmVuY2UgIGhhdCAga2VpbmVuCitHcnVuZCBtaWNoIHp1IGhpbnRlcmdlaGVuLiBCb3NoZWl0IGlzdCBlcyBzaWNoZXJsaWNoIG5pY2h0LCAgc2NobGllc3NsaWNoICBpc3QKK2VyIGVpbiBQcmllc3RlciB1bmQgaGVpbGlnZXIgTWFubi4iCisKKyJIZWlsaWdlciBNYW5uISIsIHNjaG5hdWJ0ZSBBenp1cm8uICJIYXN0IGR1IHNjaG9uIG1hbCB3YXMgIHZvbiAgZGVuICBCb3JnaGlhcworZ2Vob2VydD8iCisKKyJTaWUgc2luZCBnbGF1YmUgaWNoIHdlaXRsYWV1ZmlnIG1pdCBtaXIgdmVyd2FuZHQuICBBbGxlcmRpbmdzICBoYWJlICBpY2ggIHNpZQorbm9jaCBuaWUgZ2V0cm9mZmVuLCBzaWUgbGViZW4gaW4gZWluZXIgYW5kZXJlbiBTdGFkdC4iIFNpZSBzYWd0ZSAgZXMgIHNvLCAgd2llCit3aXIgaGV1dGUgamVtYW5kZW4gZGFydWViZXIgIGF1ZmtsYWVyZW4sICBkYXNzCXdpciAgVmVyd2FuZHRlCWluICBBdXN0cmFsaWVuCitoYWJlbi4KKworIkplZGVuZmFsbHMuLi5BdWEhIiBBenp1cm8gdmVyc3R1bW10ZSB1bmQgYmxpY2t0ZSBVbG8gdmVybGV0enQgYW4uCisKKyJXaXNzdCBpaHIsIGRhcyBTY2hsaW1tc3RlIHdhZXJlLCB3ZW5uIGVzIG5pY2h0IHdpcmt0LiBJY2ggIG1laW5lLCAgd2FzLCAgd2VubgoraWNoIG1vcmdlbiBhdWZ3YWNoZSB1bmQgaGVpcmF0ZW4gbXVzcz8iIFNpZSBzYWggc2ljaCAgc3VjaGVuZCAgaW0gIFppbW1lciAgdW0sCitlcmJsaWNrdGUgZWluIHNjaGFyZmVzIEhhbmRhcmJlaXRzbWVzc2VyIHVuZCB3b2cgZXMgbmFjaGRlbmtsaWNoIGluIGRlciAgSGFuZC4KKyJOYSwgZWhlIGljaCBQYXJpcyBoZWlyYXRlLi4uIgorCisiRGFzIGdhZWJlIGVpbmUgemllbWxpY2hlIFNjaHdlaW5lcmVpLiIgVWxvICBzY2h1ZXR0ZWx0ZSAgZXMgIGFsbGVpbiAgYmVpICBkZW0KK0dlZGFua2VuIGRhcmFuLgorCisiQmVzc2VyIGFscyBQYXJpcyBoZWlyYXRlbi4iLCB2ZXJzZXR6dGUgSnVsaWEgc2NoYXJmLgorCisiU2Nob24gZ3V0LCBzY2hvbiBndXQuIiBVbG8gbXVzc3RlIGlociB3aWRlciBXaWxsZW4genVzdGltbWVuLgorCisiV2VubiBudXIgbWVpbiBWYXRlciBuaWNodCAgaW4gIGxldHp0ZXIgIE1pbnV0ZSAgbm9jaCAgZGVuICBUZXJtaW4gIHZvcmdlem9nZW4KK2hhZXR0ZS4iCisKKyJXYXMgc29sbCBkYXJhbiBzbyBzY2hsaW1tIHNlaW4/IiwgZnJhZ3RlIEF6enVyby4gIkR1IHRyaW5rc3QgZGFzIFpldWcgZWluZmFjaAorZWluZW4gVGFnIGZydWVoZXIuIgorCisiVW5kIHdlbm4gUm9tZW8gZGVuIEJyaWVmIG5pY2h0IHJlY2h0emVpdGlnIGJla29tbXQ/IEJydWRlciBMYXdyZW5jZSAgaGF0ICBpaG4KK2xvc2dlc2NoaWNrdCwgYWJlciBtYW4gd2Vpc3MgamEsIHdpZSBsYW5nc2FtIEtsb3N0ZXJicnVlZGVyIHZvcmFuIGtvbW1lbiwgd2Vubgorc2llIGF1ZiBSZWlzZW4gc2luZC4iCisKKyJBbGx6dSB2aWVsZSBXZWluc3R1YmVuIGdpYnQgZXMgYXVmIGRlbSBXZWcgbmFjaCBNYW50dWEgbmljaHQuIiwgYmVydWhpZ3RlIFVsbworc2llLgorCisiVHJvdHpkZW0uIE1pY2ggZ3JhdXN0IGVzIGJlaSBkZW0gR2VkYW5rZW4gYW4gZGllc2Ugc3RhdWJpZ2UgR3J1ZnQuICBMdWZ0ZGljaHQKK2lzdCBndXQsIHdlbm4gbWFuIGRlbiBHZXN0YW5rIGRyaW5uZW4gaGFsdGVuIHdpbGwsIGFiZXIgd2VubiBpY2ggZGFyaW4gYmluLi4uIgorCisiRHUgd2lyc3QgZXMgdWViZXJsZWJlbi4iIEF6enVybyB2ZXJzdWNodGUsIHNlaW5lciBTdGltbWUgIGVpbmVuICBiZXJ1aGlnZW5kZW4KK0tsYW5nIHp1IGdlYmVuLgorCisiVmllbGxlaWNodCB3YWVyZSBkYXMgZ2FyIG5pY2h0IHNvIGd1dC4gSWNoIGhhYmUgc2NocmVja2xpY2hlIEFuZ3N0IGRhdm9yLCAgZGEKK2RyaW5uZW4gYXVmenV3YWNoZW4uIEFtIEVuZGUgd2VyZGUgaWNoIHdhaG5zaW5uaWcuIiAgSWhyICBMYWVjaGVsbiAgdmVyc2Nod2FuZAordW5kIG1hY2h0ZSBlaW5lbSBiaXR0ZXJlbiBBdXNkcnVjayBQbGF0ei4gIkRhcyB3YWVyZSBzY2hsaW1tZXIgYWxzIHN0ZXJiZW4uIgorCitVbG8gdmVyc3VjaHRlLCBzaWUgenUgdHJvZXN0ZW4uICJEdSB3dWVyZGVzdCBlcyBuaWNodCBtZXJrZW4uIgorCitKdWxpYSBuaWNrdGUuICJWZXJtdXRsaWNoLiIgU2llIHpvZyBkaWUgTmFzZSBrcmF1cyB1bmQgZGFjaHRlIG5hY2guICJTYWd0IG1hbCwKK3N0aW1tdCBlcywgZGFzcyBkaWUgVG90ZW4gaW4gZGVyIEdydWZ0Li4uIiBTaWUgem9lZ2VydGUuICJJaHIgIHdpc3N0ICBzY2hvbi4uLgorRXMgaGVpc3N0LCBkYXMgZXMgZWluaWdlIFRhZ2UgZGF1ZXJ0LCBiaXMgc2ljaCBkZXIgVG90ZSAgbWl0ICBzZWluZW0gIC4uLlBsYXR6CithYmdlZnVuZGVuIGhhdC4iCisKKyJXb2hlciBzb2xsZW4gd2lyIGRhcyB3aXNzZW4/IFdpciB3YXJlbiBub2NoIG5pY2h0ICB0b3QuIiAgQXp6dXJvICB6dWNrdGUgIGRpZQorU2NodWx0ZXJuLiAiRXMgZ2lidCBkYSBzbyBldHdhcyB3aWUgR2FzZSwgZGllIG5vY2ggIHJ1bW9yZW4sICBhYmVyICB2aWVsbGVpY2h0Citpc3QgZGFzIGF1Y2ggbnVyIGVpbiBHZXJ1ZWNodC4iCisKK0p1bGlhIGRhY2h0ZSBtaXQgR3JhdXNlbiBhbiAgVHliYWx0LiAgIk9iICBpY2ggIEdlaXN0ZXIgIHNlaGVuICB3ZXJkZT8gIFR5YmFsdAordmllbGxlaWNodCwgZGVyIFJvbWVvIHN1Y2h0IHVuZCBpaG4gbmljaHQgZmluZGV0PyBXZW5uIGVyIGRhbm4gbWl0IG1pciBWb3JsaWViCituaW1tdD8iIFNpZSBzY2h1ZXR0ZWx0ZSBzaWNoLgorCisiRHUgd2lyc3Qgc2NobGFmZW4uIiBVbG8gbGllc3Mgc2ljaCBhdWYgSnVsaWFzIFNjaHVsdGVyIG5pZWRlciB1bmQgc3RyaWNoICBpaHIKK3NhbmZ0IG1pdCBkZW0gS29wZmdlZmllZGVyIHVlYmVyIGRpZSBXYW5nZS4KKworIkRhcyBraXR6ZWx0LiIgSnVsaWEga2ljaGVydGUsIGRhbm4gd3VyZGUgc2llIHdpZWRlciBlcm5zdC4gIkljaCBoYWJlIHNvICB2aWVsCitkYXJ1ZWJlciBnZWhvZXJ0LCB3YXMgbmFjaHRzIGF1ZiBGcmllZGhvZWZlbiB2b3JnZWh0LiBNYW5jaG1hbCBob2VydCAgbWFuICBkaWUKK1RvdGVuIGVudHNldHpsaWNoIHNjaHJlaWVuLCBoZWlzc3QgZXMuIgorCisiRGFzIHNpbmQgYmxvc3MgS2F0emVuLiIgQXp6dXJvIGhhdHRlIGRpZSByaWVzaWdlbiBUaWVyZSBnZXNlaGVuLCBkaWUgYXVmICBkZXIKK1N1Y2hlIG5hY2ggUmF0dGVuIHVlYmVyIGRpZSBHcmFlYmVyIGh1c2NodGVuICB1bmQgIGRpZQlMaWViZXNwYWFyZSAgc3RvZXJ0ZW4sCitmdWVyIGRpZSBkZXIgRnJpZWRob2YgZGVyIGVpbnppZ2Ugd2lya2xpY2ggdW5nZXN0b2VydGUgT3J0IHdhci4KKworIldlbm4gZHUgZXMgc2Fnc3QuIiwgbWVpbnRlIEp1bGlhICB6d2VpZmVsbmQuICAiTmFqYSwgIHdhaHJzY2hlaW5saWNoICBoYXQgIGVzCitrZWluZW4gU2lubiwgZXMgbm9jaCBsYWVuZ2VyIGhpbmF1c3p1c2NoaWViZW4uIiBTaWUgaG9iICBkaWUgIFBoaW9sZS4gICJQcm9zdCwKK2lociBiZWlkZW4uIEZhbGxzIGljaCBlcyBzZWxic3QgbmljaHQga2FubiwgZ3J1ZXNzdCBSb21lbyB2b24gbWlyLiIKKworVWxvIGh1ZXBmdGUgenVyIFNlaXRlLCBhbHMgSnVsaWEgbmllZGVyc2Fuay4gIkpldHp0ICBoYXQgIHNpZSAgenVtaW5kZXN0ICBpaHJlCitSdWhlLiIKKworIlNpZSBoYWV0dGUgZXMgd2lya2xpY2ggaW4gV2VpbiBuZWhtZW4ga29lbm5lbi4iLCBtdXJydGUgQXp6dXJvLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyMyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzN2RiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyMwpAQCAtMCwwICsxLDEzNCBAQAorREVSIFZJRVJURSBBS1QKKwlESUUgVklFUlRFIFNaRU5FCisKK0ZyYXUgQ2FwdWxldCBzY2hsZXVkZXJ0ZSBpaHJlIEJsaWNrZSB1ZWJlciBkYXMJU2NobGFjaHRmZWxkLCAgZGFzICBhdXMgIGlocmVtCitIYXVzIGdld29yZGVuIHdhciwgZmFuZCBQb2xseSB1bmQgYmFubnRlIHNpZSBtaXR0ZW4gaW0JU2Nocml0dC4gICJIaWVyLCAgbmltbQorZGllIFNjaGx1ZXNzZWwsIGluIGRlciBLdWVjaGUgd2VyZGVuIG5vY2ggS3JhZXV0ZXIgZ2VicmF1Y2h0LiIKKworUG9sbHkgbmFobSAgZGllICBJbnNpZ25pZW4gIGhhdXNmcmF1bGljaGVyICBNYWNodCAgYW5kYWVjaHRpZyAgZW50Z2VnZW4uICAiRGVyCitCYWVja2VyIG1vZWNodGUgYXVjaCBEYXR0ZWxuIHVuZCBRdWl0dGVuIGhhYmVuLiIKKworIkRhbm4gZ2liIHNpZSBpaG0uIiBGcmF1IENhcHVsZXQgc2FoIGlocmVuIE1hbm4gZGllIFRyZXBwZSBoZXJ1bnRlciBrb21tZW4gdW5kCitzdG9laG50ZS4gIkVyIGhhdCBtaXIgZ3JhZGUgbm9jaCBnZWZlaGx0LiIKKworSGVyciBDYXB1bGV0IG5haG0gbWl0IFNjaHd1bmcgIGRpZSAgS3VydmUgIHVtICBlaW5lbiAgRGllbmVyICBoZXJ1bSwgIGRlciAgZWluCitCaWVyZmFzcyBpbiBSaWNodHVuZyBTcGVpc2VzYWFsIHJvbGx0ZSwgZHVja3RlIHNpY2ggaW0JbGV0enRlbiAgTW9tZW50ICB1bnRlcgorZWluZW0gVGFibGV0dCBtaXQgR2xhZXNlcm4gZHVyY2ggdW5kIHdpY2ggdW0gIEhhYXJlc2JyZWl0ZSAgZWluZW0gIFRpc2NoICBhdXMsCitkZXIsIHZvbGxiZWxhZGVuIG1pdCBPYnN0LCB1bnNjaHVsZGlnIGlubWl0dGVuIGRlcyBSYXVtZXMgc3RhbmQuICJXYXMgaGF0IGRlbm4KK2RlciBUaXNjaCBoaWVyIHp1IHN1Y2hlbj8gU29uc3QgaXN0IGRlciBkb2NoICBhdWNoICBuaWNodCAgZGEuIiwgIHd1bmRlcnRlICBlcgorc2ljaC4KKworIk5hdHVlcmxpY2ggbmljaHQuIiBGcmF1IENhcHVsZXQgZmFzc3RlIHNpY2ggbWl0IHVlYmVydHJpZWJlbmVyIEdlc3RlICBhbiAgZGllCitTdGlybi4gIkFiZXIgbmFjaGRlbSB3aXIgc28gd2VuaWcgWmVpdCBoYWJlbiwgZGllIEhvY2h6ZWl0IHZvcnp1YmVyZWl0ZW4sIGthbm4KK3NjaG9uIGVpbm1hbCBlaW4gVGlzY2ggaW0gV2VnIHN0ZWhlbi4iCisKKyJTY2hvbiBndXQsIHNjaG9uIGd1dC4iIEhlcnIgQ2FwdWxldCBnZXdhaHJ0ZSBlaW5lbiBLdWVjaGVuanVuZ2VuLCBkZXIgc2ljaCBpbgorZWluZSBFY2tlIGRydWVja3RlIHVuZCB2ZXJzdWNodGUsIG1vZWdsaWNoc3QgdmllbCB2b24gZGVyIFBsYWVua2VsZWkgIHp3aXNjaGVuCitpaG0gdW5kIHNlaW5lciBGcmF1IHp1IGhvZXJlbi4gIkR1IGRhISIKKworIkljaD8iIERlciBLdWVjaGVuanVuZ2UgYmxpY2t0ZSBzaWNoIHVtLgorCisiSmEsIGR1LiBTaWVoIHp1LCBkYXNzIGR1IGF1ZiBkaWUgRnVlc3NlIGtvbW10LCB3aXIgaGFiZW4gbmljaHQgZGVuIGdhbnplbiBUYWcKK1plaXQuIiBIZXJyIENhcHVsZXQgd2VkZWx0ZSBtaXQgZGVuIEhhZW5kZW4gdW5kIG9ocmZlaWd0ZSAgZWluZW4gIERpZW5lciwgIGRlcgorc29yZ3NhbSBlaW5lbiBGdXNzIHZvciBkZW4gYW5kZXJlbiBzZXR6dGUgdW5kIG1pdCAgenVzYW1tZW5nZWtuaWZmZW5lbglMaXBwZW4KK2F1ZiBkaWUgU3VwcGVudGVycmluZSBpbiBzZWluZW4gSGFlbmRlbiBzdGFycnRlLgorCitQb2xseXMgR2VzaWNodCB2ZXJ6b2cgc2ljaCB6dSBlaW5lbSBJbmJpbGQgIGRlcyAgWm9ybnMsICBhbHMgIGRlciAgRGllbmVyICBkaWUKK1RlcnJpbmUgIGZhbGxlbiAgbGllc3MJdW5kICBlaW5lICBndXRlICBIYW5kdm9sbCAgYW5kZXJlciAgQmVkaWVuc3RldGVyICAgbWl0CiticnVlaGhlaXNzZXIgU3VwcGUgdWViZXJzY2h1ZXR0ZXRlLiBTaWUgc3RlbW10ZSBkaWUgIEFybWUgIGluICBkaWUgIFNlaXRlICB1bmQKK3dhcnRldGUgZ2VkdWxkaWcsIGJpcyBzaWNoIGRlciBBdWZydWhyIGdlbGVndCBoYXR0ZS4gICJIZXJyICBDYXB1bGV0PyIgIFBvbGx5cworU3RpbW1lIHdhciBmcmV1bmRsaWNoLgorCisiSmE/IgorCitQb2xseSBhdG1ldGUgdGllZiBkdXJjaCB1bmQgbWFuIHNhaCBpaHJlIExpcHBlbiBkaWUgWmFobGVuIHZvbiBlaW5zICBiaXMgIHplaG4KK2Zvcm1lbi4gIFNjaGxpZXNzbGljaCAga25pZmYgIHNpZSAgZGllCUF1Z2VuICB6dXNhbW1lbi4gICJTaWUgIHdvbGx0ZW4gIG5pY2h0Cit6dWZhZWxsaWcgZ2VyYWRlIGdlaGVuPyIsIHNhZXVzZWx0ZSBQb2xseS4KKworIktpZWxob2xlbiwga2llbGhvbGVuISIgVWxvIGphdWNoenRlLgorCisiTmVpbiwgZWlnZW50bGljaCBuaWNodC4iIEhlcnIgQ2FwdWxldCB3YXIgc2ljaHRsaWNoIHZlcndpcnJ0LgorCisiRWluIE1hbm4gd2llIFNpZSBoYXQgc2ljaGVybGljaCBrZWluZSByZWNodGUgRnJldWRlICBkYXJhbiwgIEZyYXVlbmFyYmVpdCAgenUKK3R1biwgb2Rlcj8iCisKKyJHaWJzIGlobSEiIEF6enVybyB2ZXJnYXNzIGdhbnogdW5kIGdhciwga3JhZWhpc2NoIHp1IHNwcmVjaGVuLgorCisiSGFiZSBpY2ggS2VrcyBnZXNhZ3QsIGRhc3MgZHUgS3J1ZW1lbCBkaWNoIG1lbGRlc3Q/IiwgZnJhZ3RlIFBvbGx5IHNjaGFyZiB1bmQKK2Vyd3Vlcmd0ZSBBenp1cm8gbWl0IGVpbmVtIEJsaWNrLgorCisiS3J1ZW1lbD8iIEF6enVybyB3YXIgZW50cnVlc3RldC4KKworIklyZ2VuZGplbWFuZCAgbXVzcyAgc2ljaCAgamEgIGRhcnVtICBrdWVtbWVybiwgIGRhc3MgIGFsbGVzICAgZ2xhdHQgICBnZWh0LiIsCit2ZXJ0ZWlkaWd0ZSBzaWNoIEhlcnIgQ2FwdWxldCwgZGVyIGRpZSBLcmFlaGVuIGdhciBuaWNodCBiZWFjaHRldGUuCisKKyJKYS1hLiIsIG1hY2h0ZSBQb2xseS4gIldpci4iCisKKyJXZW5uIGljaCBldWNoIFdlaWJlcm4gaGllciBkYXMgUmVnaW1lbnQgdWViZXJsYXNzZSwgZ2VodCAgYWxsZXMgIGRydW50ZXIgIHVuZAorZHJ1ZWJlci4iCisKK1BvbGx5IGJldHJhY2h0ZXRlIGJldG9udCBkaWUgU2NoZXJiZW4gZGVyIFRlcnJpbmUgdW5kIHNjaHdpZWcuCisKKyJTaWUgaGF0IEtydWVtZWwgZ2VzYWd0ISIsIGVtcG9lcnRlIHNpY2ggQXp6dXJvIGluIGRpZSBlaXNpZ2UgU3RpbGxlIGhpbmVpbi4KKworIlVlYmVyaGF1cHQgd2FyIGljaCB6dSBtZWluZXIgIFplaXQgIGR1cmNoYXVzICBpbiAgZGVyICBMYWdlLCAgbWljaCAgdW0gIGVpbmVuCitIYXVzaGFsdCB6dSBrdWVtbWVybi4iIEhlcnIgQ2FwdWxldCBob2IgdW5iZWhhZ2xpY2ggZGllIEFybWUuCisKKyJSaWNodGlnLCB6dSBJaHJlciBaZWl0LiBVbmQgbW9yZ2VuIGphbW1lcm4gU2llIHVlYmVyIGlociBaaXBwZXJsZWluLCB3ZWlsIFNpZQorZGllIE5hY2h0IGR1cmNoZ2VtYWNodCBoYWJlbi4iCisKKyJVbnNpbm4uIiAgSGVyciAgQ2FwdWxldCAgcnVuemVsdGUgIGRpZSAgU3Rpcm4uICAiRnVlcmNodGVzdCAgZHUsICBlcyAga29lbm50ZQorYXVmZmFsbGVuLCB3aWV2aWVsIGJlc3NlciBpY2ggZGFzIGthbm4gYWxzIGR1PyIKKworIkRhcyBKYW1tZXJuPyIgVWxvIGtpY2hlcnRlLgorCitBbGxlIEJsaWNrZSBzZW5rdGVuIHNpY2ggd2llZGVyIGF1ZiBkaWUgU2NoZXJiZW4uCisKKyJMaWVibGluZywgZGFzIHdhciBkaWUgVGVycmluZSBhdXMgZGVtICBTZXJ2aWNlLCAgZGFzICBtZWluZSAgTXV0dGVyICB1bnMgIHp1cgorSG9jaHplaXQgZ2VzY2hlbmt0IGhhdC4iLCBtaXNjaHRlIHNpY2ggRnJhdSBDYXB1bGV0IGVpbi4KKworIkhvZWNoc3RlIFplaXQsIGRhc3Mgd2lyIGVpbiAgbmV1ZXMgIGFuc2NoYWZmZW4uIiAgSGVyciAgQ2FwdWxldCAgd2FuZHRlICBzaWNoCiticnVtbWVuZCB6dSB6d2VpIERpZW5lcm4gdW0sIGRpZSBlaW4gIFNjaHdlaW4gIGF1ZiAgZWluZW0gIFNwaWVzcyAgenVyCUt1ZWNoZQordHJ1Z2VuLiAiV2FzIGlzdCBkYXM/Iiwgc2NobmF1enRlIGVyLgorCitEZXIgdm9yZGVyZSBEaWVuZXIgd2FuZHRlIHNpY2ggdW0gdW5kIGJldHJhY2h0ZXRlIGRhcyAgVGllciAgYXVmICBkZW0gIFNwaWVzcy4KKyJFaW4gU2Nod2Vpbiwgd2VubiBtaWNoIG5pY2h0IGFsbGVzIHRhZXVzY2h0LiIKKworIkVpbiBTY2h3ZWluLCBwYWghIiBQb2xseSBzY2huYXVidGUgdW5kIHNjaG9iIHNpY2ggYW4gZGVuICBEaWVuZXJuICB2b3JiZWkgIGluCitkaWUgS3VlY2hlLgorCisiV2VuIGhhdCBzaWUgZGFtaXQgd29obCBnZW1laW50PyIsIGZyYWd0ZSBVbG8gbGVpc2UuCisKKyJLcnVlbWVsLCBwYWghIiBBenp1cm8gc2NobHVnIG1pdCBkZW4gRmx1ZWdlbG4uCisKKyJOZWluLCBtaXQgZGVtIFNjaHdlaW4uIgorCisiV2VuIGludGVyZXNzaWVydCBkYXM/IFNpZSBoYXQgbWljaCBLcnVlbWVsIGdlbmFubnQhIgorCitIZXJybiBDYXB1bGV0cyBaZWlnZWZpbmdlciBtYWNodGUgZWluZW4gVm9yc3Rvc3MgYXVmIGVpbmUgTWFnZC4gICJXYXMgIGlzdCAgaW4KK2RlbSBLb3JiPyIKKworIktlaW5lIEFobnVuZywgaXN0IGZ1ZXIgZGllIEt1ZWNoZS4iCisKKyJEYW5uIGJyaW5nIGVzIGhpbi4iCisKKyJJY2ggYmluIGRhYmVpLiIsIHZlcnNldHp0ZSBkaWUgTWFnZC4KKworIkd1dCwgZ3V0LiIgSGVyciBDYXB1bGV0IGlnbm9yaWVydGUgc2VpbmUgRnJhdSwgZGllICBzaWNoICBtaXQgIHZlcnNjaHJhZW5rdGVuCitBcm1lbiBnZWdlbiBkaWUgV2FuZCBsZWhudGUuCisKKyJEYSBrb21tdCBQYXJpcy4iIFVsbyB3YW5kdGUgZGVuIEtvcGYgIHVuZCAgYmV0cmFjaHRldGUgIGRlbiAgYnVudGVuICBadWcgIHZvbgorTXVzaWthbnRlbiB1bmQgQWtyb2JhdGVuLCBkaWUgUGFyaXMgYmVnbGVpdGV0ZW4uCisKK0F1Y2ggSGVyciBDYXB1bGV0IGhhdHRlIGRpZSBNdXNpayBnZWhvZXJ0LiAiRHUgbGllYmVyIEhpbW1lbCwgZGEgaXN0IGphICBzY2hvbgorUGFyaXMhIiBFciBkcmVodGUgc2ljaCB1bSBzZWluZSBBY2hzZS4gIlBvbGx5ISIKKworUG9sbHkgc3RyZWNrdGUgZGVuIEtvcGYgZHVyY2ggZGllIEt1ZWNoZW50dWVyLiAiV2FzIGlzdCBkZW5uPyIKKworIlBhcmlzIGlzdCBsb3MgLSBuZWluLCBkYS4gTG9zLCBsb3MsIHdlY2tlIEp1bGlhLiBCcmluZyBzaWUgIGhlciEgIE5laW4sICB6aWVoCitzaWUgZXJzdCBhbiwgYnJpbmcgc2llIGRhbmFjaC4iIEhlcnIgQ2FwdWxldCBicmVpdGV0ZSBkaWUgQXJtZSBhdXMgdW5kICBkcmVodGUKK3NpY2ggdW0gc2VpbmUgQWNoc2UuCisKK1BvbGx5IGZpbmcgZGVuIEJsaWNrIEZyYXUgQ2FwdWxldHMgdW5kIHRpcHB0ZSBzaWNoIGJlZGFlY2h0aWcgbWl0IGVpbmVtIEZpbmdlcgorYW4gZGllIFN0aXJuLCBkYW5uIHZlcnNjaHdhbmQgc2llIGRpZSBUcmVwcGUgaGluYXVmLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyNCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMmFkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyNApAQCAtMCwwICsxLDIxNyBAQAorREVSIFZJRVJURSBBS1QKKwlESUUgRlVFTkZURSBTWkVORQorCitQb2xseSBoaWVsdCBzaWNoIG5pY2h0IGRhbWl0IGF1ZiwgYW4gSnVsaWFzIFR1ZXIgenUga2xvcGZlbiwgc29uZGVybiAgc3R1ZXJtdGUKK2dsZWljaCBpbnMgWmltbWVyLiAiSnVsaWEsIE1hdXNlc2Nod2FlbnpjaGVuLCBaZWl0IHp1bSAgQXVmc3RlaGVuLiIsICBmbG9ldGV0ZQorc2llLgorCisiV2llIGxhbmdlIHNpZSB3b2hsIGJyYXVjaHQ/IiBBenp1cm8gYmxpY2t0ZSBiZXRvbnQgIHp1ICBKdWxpYXMgIEJldHQsICBkZXNzZW4KK1ZvcmhhZW5nZSBudXIgZWluZW4gU3BhbHQgd2VpdCBvZmZlbiBzdGFuZGVuLgorCisiV2FydGVuIHdpcidzIGFiLiIgVWxvIGxlZ3RlIGJlZGFlY2h0aWcgZWluZSBGZWRlciB3aWVkZXIgYW4gIGlocmVuICByaWNodGlnZW4KK1BsYXR6LgorCisiSnVsaWEsIHRyb2VkZWwgbmljaHQsIGRlaW4gQnJhZXV0aWdhbSBpc3QgZGEuIiBQb2xseSBoaWVsdCBlaW5lbiBNb21lbnQgIGlubmUKK3VuZCBraWNoZXJ0ZS4gIkR1IHRhbmtzdCB3b2hsIGpldHp0IHNjaG9uIFNjaGxhZj8gUmVjaHQgaGFzdCAgZHUsICBQYXJpcyAgd2lyZAorc2ljaGVybGljaCBmdWVyIGRpZSBuYWVjaHN0ZSBaZWl0IGFuZGVyZSBQbGFlbmUgZnVlciBkaWUgIE5hZWNodGUgIGhhYmVuLiAgU28sCitqZXR6dCBhYmVyIHJhdXMgbWl0IGRpciwgZHUgU2NobGFmbXVldHplISBEdSB3aWxsc3QgIGRvY2ggIG5pY2h0LCAgZGFzcyAgUGFyaXMKK2RpY2ggaW0gQmV0dCBmaW5kZXQsIG9kZXI/IERhbm4ga29tbXQgaWhyIGJlaWRlIHZlcnNwYWV0ZXQgenVyIEhvY2h6ZWl0IC0gIHVuZAorenUgZnJ1ZWggenVyIEhvY2h6ZWl0c25hY2h0LiIgU2llIGtpY2hlcnRlIHdpZWRlci4KKworIkRhISIgQXp6dXJvIHdhY2tlbHRlIGF1ZmdlcmVndCBhdWYgc2VpbmVtICBBc3QgIGhpbiAgdW5kICBoZXIuICAiSmV0enQgIG1lcmt0CitzaWUncy4iCisKK1BvbGx5IHpvZyBkaWUgVm9yaGFlbmdlIHp1cnVlY2suICJXYXMgZGVubiwgaW1tZXIgIG5vY2ggIGFuZ2V6b2dlbj8gIFdhcnN0ICBkdQorZ2VzdGVybiBzbyBtdWVkZT8gU2NoYWVtZW4gc29sbHRlc3QgIGR1ICBkaWNoLAlkYXMgIHNjaG9lbmUgIEtsZWlkICBpc3QgIGdhbnoKK3ZlcmRydWVja3QuIFVuZCBpY2ggbXVzcyBlcyB3aWVkZXIgYnVlZ2Vsbi4iIFNpZSBydWV0dGVsdGUgYW4gSnVsaWFzIFNjaHVsdGVyLgorIkp1bGlhISIgUG9sbHlzIFN0aXJuIGtyYXVzdGUgc2ljaC4gIkp1bGlhPyIKKworIkFjaHR1bmcsIGpldHp0IGtvbW10J3MuIFdhcyBnYWViZSAgaWNoICBqZXR6dCAgZnVlciAgZWluICBQYWFyICBIYWVuZGUhIiAgVWxvCitzdG9laG50ZSwgYWxzIFBvbGx5IG1hcmtlcnNjaHVldHRlcm5kIHNjaHJpZS4KKworV2xhZCBzdHJlY2t0ZSBkZW4gS29wZiB1bnRlciBkZXIgUmVnZW5yaW5uZSBoZXJ2b3IuICJXZXIgc3NzY2hyZWl0IGRlbm4gbWl0dGVuCitpbiBkZXIgTmFjaHQ/IgorCisiU2NobGFmIHdlaXRlci4iIEF6enVybyB3YW5kdGUgIGRlbiAgQmxpY2sgIG5pY2h0ICB2b24gIGRlciAgU3plbmUgIGluICBKdWxpYXMKK1NjaGxhZnppbW1lci4KKworQnJ1bW1lbG5kIHpvZyBXbGFkIHNpY2ggenVydWVjay4KKworIldhcyBpc3QgZGVubiBkYXMgZnVlciBlaW4gTGFlcm0gaGllcj8iICBGcmF1ICBDYXB1bGV0cyAgbW9kaXNjaCAgd2Vpc3NlICBIYXV0Cityb2V0ZXRlIHNpY2ggdm9yIEFlcmdlci4KKworIk9oIEphbW1lciwgb2ggV2VoISIgUG9sbHkgemVycmF1ZnRlIHNpY2ggZGFzIEhhYXIuICJKdWxpYSEiCisKKyJIYXQgc2llIHdpZWRlciBGbG9laGUgaW0gS29wZj8iLCBmcmFndGUgSGVyciBDYXB1bGV0IHVuZ25hZWRpZywgIGFscyAgZXIgIGlucworWmltbWVyIGthbS4KKworIk5laW4sIGFiZXIgYmFsZCBXdWVybWVyLiBTaWUgaXN0IHRvdCEiIFBvbGx5IHpvZyBkYXMgbGV0enRlICBXb3J0ICBtaXQgIGVpbmVtCitTY2hsdWNoemVuIHNvIGxhbmcsIGRhc3MgbWFuIGVzIGthdW0gdmVyc3RlaGVuIGtvbm50ZS4KKworIlRvdC4iIEZyYXUgQ2FwdWxldCB3dXJkZSB3aWVkZXIgYmxlaWNoIHVuZCBwbHVtcHN0ZSBhdWYgZGVuIEJvZGVuLgorCitIZXJyIENhcHVsZXQgc2NobHVja3RlIHNjaHdlci4gIlRvdD8iCisKKyJWZXJzY2hpZWRlbiwgenUgaWhyZW4gQWhuZW4gZ2VnYW5nZW4sIGhhdCBkZW4gTG9lZmZlbCBhYmdlZ2ViZW4sIGRlbiAgbGV0enRlbgorVGFueiBnZXRhbnp0LCBpbiBkZW4gZXdpZ2VuIEphZ2RncnVlbmRlbi4uLiIgUG9sbHkgaG9sdGUgTHVmdC4gIlRvdC4iCisKK051biBkYWVtbWVydGUgYXVjaCBIZXJybiBDYXB1bGV0IGRpZSBCZWRldXR1bmcgaWhyZXIgV29ydGUuIEhpbGZsb3MgYmxpY2t0ZSBlcgorc2ljaCBpbSBSYXVtIHVtLCBmYW5kIHNjaGxpZXNzbGljaCBlaW5lICBXYXNjaHNjaHVlc3NlbCAgdW5kICBzY2hsZXVkZXJ0ZSAgc2llCitnZWdlbiBkaWUgV2FuZC4gIkRhcyBpc3QgbmljaHQgd2FociEiCisKK0ZyYXUgQ2FwdWxldCwgZGllIGRlbiBJbmhhbHQgZGVyIFdhc2Noc2NodWVzc2VsIGlucyAgR2VzaWNodCAgYmVrb21tZW4JaGF0dGUsCitvZWZmbmV0ZSBlaW4gQXVnZSB1bmQgZ3JpZmYgc2ljaCBhbiBkaWUgQnJ1c3QuICJNZWluZSBKdWxpYT8gSnVsaWEhIgorCisiS3Jva29kaWxzdHJhZW5lbi4iIFVsbyByZWNrdGUgdmVyYWVjaHRsaWNoIGRlbiBTY2huYWJlbCBpbiBkaWUgTHVmdC4KKworIkR1IGRlbmtzdCBhdWNoIGltbWVyIGRhcyBTY2hsaW1tc3RlLiIgQXp6dXJvIGtvbm50ZSBzaWNoIGVpbiBTY2huaWVmZW4gIG5pY2h0Cit2ZXJrbmVpZmVuLgorCisiSWNoIGtlbm5lIGRpZSBNZW5zY2hlbi4iLCB2ZXJzZXR6dGUgVWxvLgorCisiV2llIGtvbm50ZSBkYXMgIG51ciAgcGFzc2llcmVuPyIgIFBvbGx5ICB1bWZhc3N0ZSAgaWhyZSAga2xlaW5lICBGbGFzY2hlICBtaXQKK0xlYmVuc2VsaXhpciwgZGllIHNpZSBhdXMgaWhyZW4gZ3Jvc3NlbiBSb2NrdGFzY2hlbiBnZXpvZ2VuIGhhdHRlLgorCisiSGV5LCBkYXZvbiBrYW5uIHNpZSBtaXIgZXR3YXMgYWJnZWJlbi4iIEF6enVybyBiZXVndGUgc2ljaCBuYWNoIHZvcm5lLgorCisiUGFzcyBudXIgYXVmLCBkYXNzIGR1IG5pY2h0IHZvbSBBc3QgZmFlbGxzdCwgIEdpZXJzY2hsdW5kLiIgIFVsbyAgenVwZnRlICBpaG4KK21pc3NiaWxsaWdlbmQgIGFtICBTY2h3YW56LiAgICJEYSwgICBqZXR6dCAgIGtvbW10ICAgUGFyaXMuICAgRGEgICBrYW5uc3QgICBkdQorS3Jva29kaWxzdHJhZW5lbiBzZWhlbiEiCisKKyJBY2ggd2FzLiBFciBzYWd0IGRvY2gsIGRhc3MgZXIgc2llIGxpZWJ0LiIKKworIlJpY2h0aWcsIGVyIHNhZ3QgZXMuIERhcyBoZWlzc3QgYWJlciBuaWNodCwgZGFzcyBlciBlcyB3aXJrbGljaCB0dXQuIgorCisiV2VubiBlciBzaWUgbmljaHQgbGllYnQsIHdhcnVtIGhlaXJhdGV0IGVyICBzaWUgIGRhbm4/ICBTaWUgIGhhdCAgbm9jaCAgbmljaHQKK2Vpbm1hbCBFaWVyIGdlbGVndC4iCisKKyJNZW5zY2hlbiAgbGVnZW4gIGtlaW5lICBFaWVyLCAgc2llICB3ZXJkZW4gIHNjaHdhbmdlci4iLCAga2xhZXJ0ZSAgVWxvICBpaHJlbgorR2VmYWVocnRlbiBhdWYuICJQYXJpcyB3aWxsIEp1bGlhcyBTdGVsbHVuZyB1bmQgaWhyIEVyYmUuIEFuIGlociBzZWxic3QgaGF0IGVyCitrZWluIEludGVyZXNzZS4gQWJlciBqZXR6dCBtdXNzIGVyICB0cmF1ZXJuLCAgc29uc3QgIHJlZGV0ICBkaWUgIE5hY2hiYXJzY2hhZnQKK3VlYmVyIGlobi4iCisKK0JydWRlciBMYXdyZW5jZSBlcmZhc3N0ZSBiZWltIGVyc3RlbiBCbGljayBpbnMgWmltbWVyLCBkYXNzIEp1bGlhIGRpZSB2b24gIGlobQordmVyYWJyZWljaHRlIE1lZGl6aW4gZ2V0cnVua2VuIGhhdHRlLiBFciAgdmVya25pZmYgIHNpY2ggIGVpbiAgTGFlY2hlbG4uICAiV2llCitzdGVodCBlcz8gSXN0IHVuc2VyZSBodWVic2NoZSBCcmF1dCBmZXJ0aWc/IEVzIGlzdCBaZWl0IGZ1ZXIgc2llLCAgenVyCUtpcmNoZQorenUgZ2VoZW4uIgorCitIZXJyIENhcHVsZXQgcmllYiBzaWNoIHVlYmVyIGRhcyBHZXNpY2h0LiAiVGphLCBoaW5nZWhlbiB3aXJkICBzaWUgIHdvaGwsICBudXIKK2hlaW0ga29tbXQgc2llIG5pY2h0IG1laHIuIgorCitQYXJpcywgZGVyIGRhcyBTY2hsYWZ6aW1tZXIgZWluZXIgRGFtZSBuaWNodCB1bmF1ZmdlZm9yZGVydCAgYmV0cmV0ZW4gIHdvbGx0ZSwKK3dhciBhbiBkZXIgVHVlciBzdGVoZW4gZ2VibGllYmVuIHVuZCBhaG50ZSAgbm9jaCAgbmljaHQsICBkYXNzCWVyICBhdWYgIHNlaW5lCitIb2NoemVpdCB2ZXJ6aWNodGVuIG11c3N0ZS4gTnVuIGxhY2h0ZSBlci4gIkRvY2gsIGFiZXIgaW4gbWVpbiBIZWltLiIKKworSGVyciBDYXB1bGV0IHNjaHVldHRlbHRlIGRlbiBLb3BmLiAgIk5laW4sICBoZXV0ZSAgTmFjaHQgIGhhdCAgSnVsaWEgIGRlbiAgVG9kCitnZWhlaXJhdGV0LCB1bmQgZGVyIGhhdCBzaWUgZGFubiBnbGVpY2ggZGVmbG9yaWVydCwgbWVpbmUga2xlaW5lIEJsdW1lLiIKKworIlVtcGYuIiBBenp1cm8gd2FuZCBzaWNoLiAiRGVmbG9yaWVydCAtIHdpZSB1bnBhc3NlbmQuIgorCitQYXJpcyBtYWNodGUgZWluZW4gdGF1bWVsbmRlbiBTY2hyaXR0IGluIGRlbiBSYXVtIGhpbmVpbiB1bmQgIHNjaHVldHRlbHRlICBkaWUKK0ZhdXN0IGdlZ2VuIGRpZSBEZWNrZS4gIk9oLCBUb2QsIHdpZSBrb25udGVzdCBkdSBtaXIgZGFzIGFudHVuPyBXaWUgc2VociAgaGFiZQoraWNoIG1pY2ggZGFyYXVmIGdlZnJldXQsIG1laW5lIEJyYXV0IHp1IGt1ZXNzZW4sIHVuZCBqZXR6dCBuaW1tc3QgZHUgIHNpZSAgbWlyCit3ZWcuIgorCisiSUNIIEhBQkUgRE9DSCBHQVIgTklDSFRTIERBTUlUIFpVIFRVTi4iCisKK1VsbyB3YW5kdGUgc2ljaCB6dSBkZXIgZHVua2xlbiBHZXN0YWx0IHVtLCBkaWUgbmViZW4gaWhyIGF1ZiBkZW0gQXN0IHNhc3MgIHVuZAorbWl0IGRlbiBrbm9jaGlnZW4gQmVpbmVuIGJhdW1lbHRlLiAiRGFzIHdlaXNzIGVyIGFiZXIgbmljaHQuIgorCisiRHUgYmlzdCBlcnN0IHNwYWV0ZXIgZHJhbiwgd2FydW0gdHJpbmtzdCBkdSBuaWNodCBub2NoIGVpbmVuICBLYWZmZWUgIGluICBkZXIKK0dhcmRlcm9iZT8iLCBzY2hsdWcgQXp6dXJvIHZvci4KKworIldPIFNPTEwgSUNIICBERU4gIERFTk4gIEhJTlRVTj8iICBUb2QgIHZlcnNhbmsgIGluICBkaWUgIFNjaGF0dGVuICB1bnRlciAgZGVuCitCbGFldHRlcm4uCisKK0ZyYXUgQ2FwdWxldCBiZXR1cGZ0ZSBpaHJlIEF1Z2VuIG1pdCBlaW5lbSAgU3BpdHplbnR1ZWNobGVpbi4gICJXYXMgIGZ1ZXIgIGVpbgorc2NocmVja2xpY2hlciAgVGFnLiAgRGEgIGhhYmUgIGljaCAgZWluICBLaW5kLAllaW4gICBlaW56aWdlcywgICB3dW5kZXJiYXJlcywKK2ZyZXVuZGxpY2hlcywgc2Nob2VuZXMsIGZyb2VobGljaGVzIEtpbmQsIGRhcyBlaW56aWdlIEtpbmQsIGFuIGRlbSBpY2gJRnJldWRlCitoYWJlLCB1bmQga2F1bSBrYW5uIGljaCBzaWUgdmVyaGVpcmF0ZW4gc3RpcmJ0IHNpZS4iCisKK1dpZSBlaW4gdmVyc3RhZXJrdGVzIEVjaG8gdHJvbXBldGV0ZSBQb2xseSBsYXV0IGluIGlociBUYXNjaGVudHVjaC4gICJXaXJrbGljaAorZWluIHNjaHJlY2tsaWNoZXIsIHdpZGVybGljaGVyLCBzdGlua2VuZGVyLCBla2VsaGFmdGVyIFRhZy4gIERpZSAgYXJtZQlrbGVpbmUKK0p1bGlhLCBzdGF0dCBhdWYgZGVuIFJ1ZWNrZW4genUgZmFsbGVuIHVuZCBkaWUgRnVlc3NlIHp1ciBEZWNrZSAgenUgIHN0cmVja2VuLAorZmFlbGx0IHNpZSBhdWZzIEtyZXV6IHVuZCBibGVpYnQgbGllZ2VuLiIKKworUGFyaXMsIGRlciBzbyAgcmFzY2ggIGtlaW4gIFRhc2NoZW50dWNoICBoYXR0ZQlmaW5kZW4Ja29lbm5lbiwgIG5haG0JSnVsaWFzCitCcmF1dHNjaGxlaWVyIHVuZCB2ZXJncnViIHNlaW4gR2VzaWNodAlkYXJpbi4JIk5vY2ggIG5pY2h0ICB2ZXJoZWlyYXRldCAgdW5kCitzY2hvbiB2b24gbWVpbmVyIEJyYXV0IGdlc2NoaWVkZW4sIGljaCBmdWVobGUgbWljaCBiZXRyb2dlbi4iICBFciAgd2FyZiAgSGVycm4KK0NhcHVsZXQgZWluZW4gQmxpY2sgenUsIGRlbiBkaWVzZXIgc29nbGVpY2ggdmVyc3RhbmQuCisKKyJXZW0gc29sbCBpY2ggamV0enQgbWVpbiBWZXJtb2VnZW4gdmVyZXJiZW4/IFdhcnVtICBrb25udGUgIHNpZSAgbmljaHQgIHp1ZXJzdAoraGVpcmF0ZW4gdW5kIGRhbm4gc3RlcmJlbj8iIEhlcnIgQ2FwdWxldCBtYWNodGUgIHNpY2ggIG5pY2h0ICBkaWUgIE11ZWhlLCAgZWluCitUYXNjaGVudHVjaCB6dSBzdWNoZW4sIHNvbmRlcm4gc2NobmV1enRlIHNpY2ggaW4gc2VpbmVuIEFlcm1lbC4KKworIldhaHJzY2hlaW5saWNoIGhhdHRlc3QgZHUgUmVjaHQgbWl0IGRlbiBLcm9rb2RpbHN0cmFlbmVuLiIsIG1laW50ZSBBenp1cm8uCisKKyJJY2ggaGFiZSBpbW1lciBSZWNodC4iIFVsbyBzdGllc3MgaWhyZW4gR2VmYWVocnRlbiBtaXQgZGVtIEZsdWVnZWwgYW4uCisKK0JydWRlciBMYXdyZW5jZSB3YXIgenVtIEZlbnN0ZXIgZ2V0cmV0ZW4uICJXYW5uIGhhdCBzaWUncyBnZXRydW5rZW4/IiwgIHJhdW50ZQorZXIgZGVuIEtyYWVoZW4genUuCisKKyJVbmdlZmFlaHIgTWl0dGVybmFjaHQuIiwgYW50d29ydGV0ZSBVbG8uCisKK0xhd3JlbmNlIHJlY2huZXRlLiAiWmVobiBTdHVuZGVuLCBibGVpYmVuICBub2NoICB6d2VpdW5kZHJlaXNzaWcuICBHdXQuICBaZWl0LAorZGFzcyBzaWUgYmVlcmRpZ3Qgd2lyZCwgc29uc3Qgd2FjaHQgc2llIHVucyBub2NoIHdhZWhyZW5kIGRlciAgQmVlcmRpZ3VuZyAgYXVmCit1bmQgZGFzIHdhZXJlIHBlaW5saWNoLiIgRXIgd2FuZHRlIHNpY2ggdW0gdW5kIHNldHp0ZSBkaWUgTWllbmUgIGF1ZiwgIGRpZSAgZXIKK3NvbnN0IGZ1ZXIgUHJlZGlndGVuIGJlcmVpdGhpZWx0LiAiU28genUgamFtbWVybiBpc3QgIHdpcmtsaWNoICBuaWNodCAgbm9ldGlnLAorbGllYmUgQnJ1ZWRlciB1bmQgU2Nod2VzdGVybi4gSWhyIHdpc3N0IGRvY2gsIGRhc3MgSnVsaWEgamV0enQgaW0gIEhpbW1lbCAgaXN0Cit1bmQgbWl0IGRlbiBFbmdsZWluIEhhcmZlIHNwaWVsdC4iCisKK1VsbyB2ZXJkcmVodGUgZGllIEF1Z2VuLCBzY2h3aWVnIGFiZXIuCisKKyJMaWViZSBTY2h3ZXN0ZXJuIHVuZCBCcnVlZGVyLCBpaHIgc29sbHRldCBldWNoIGZyZXVlbiwgZGFzcyAgSnVsaWEgIGpldHp0ICBpbQorSGltbWVsIGlzdC4gV2llIGVpZ2Vuc3VlY2h0aWcgdm9uIGV1Y2gsIGhpZXIgenUgd2VpbmVuLiBHb2VubnQgaWhyIEp1bGlhICBkZW5uCituaWNodCwgZGFzcyBzaWUgamV0enQgaW0gUGFyYWRpZXMgaXN0PyIgRXIgbWFjaHRlIGVpbmUgUGF1c2UuIEFscyBGcmF1IENhcHVsZXQKK0x1ZnQgaG9sdGUsIHVtIHNlaW5lIEZyYWdlIHp1IGJlYW50d29ydGVuLCBmdWhyIExhd3JlbmNlIHNjaG5lbGwgZm9ydC4gIkVsdGVybgord3VlbnNjaGVuIHNpY2ggZG9jaCwgZGFzcyBpaHIgS2luZCBlcyBndXQgaGF0LiBVbmQgZGFzIGhhdCBzaWUgZXMgIGpldHp0LiAgU2llCitpc3QgYmVpbSBsaWViZW4gR290dCB1bmQgZGFyZiBqZXR6dCBmdWVyIGlobiBzaW5nZW4uIFN0YXR0IHp1IGphbW1lcm4sIHNvbGx0ZXQKK2lociBldWNoIGZyZXVlbiB1bmQgZmVpZXJuLiBOdXIgZGFzcyBpaHIgamV0enQgbmljaHQgSnVsaWFzIEhvY2h6ZWl0IG1pdCBlaW5lbQoraXJkaXNjaGVuIEJyYWV1dGlnYW0gZmVpZXJ0LCBzb25kZXJuIGlocmUgSG9jaHplaXQgbWl0IGVpbmVtIGhpbW1saXNjaGVuLiAgVW5kCitkZXIgaXN0IGFsbGVtYWwgYmVzc2VyIGFscyAgZWluICBpcmRpc2NoZXIuIiAgRXIgIHpvZyAgUG9sbHkgIGRhcyAgVGFzY2hlbnR1Y2gKK2hlcnVudGVyIHVuZCBlbnRodWVsbHRlIGRpZSBrbGVpbmUgRmxhc2NoZSwgZGllIHNpZSBpbSBTY2h1dHogZGVzIFR1Y2hlcyBpbW1lcgord2llZGVyIGFuIGlocmUgTGlwcGVuIGdlaG9iZW4gaGF0dGUuICJBbHNvLCBTY2hsdXNzIGpldHp0ICBtaXQgIGRlbSAgR2VqYW1tZXIsCit6aWVodCBKdWxpYSBodWVic2NoIGFuIHVuZCBicmluZ3Qgc2llIGluIGRpZSBLaXJjaGUsIGRhbWl0IHNpZSBiZWVyZGlndCB3ZXJkZW4KK2thbm4uIgorCitIZXJyIENhcHVsZXQgc2V1Znp0ZS4gIkphamEsIGRhcyBMZWJlbiBnZWh0IHdlaXRlci4iCisKKyJSaWNodGlnLiIgQnJ1ZGVyIExhd3JlbmNlIG5pY2t0ZSBpaG0genUuCisKKyJEYW5uIHdlcmRlbiB3aXIgYWxzbyBzdGF0dCB3ZWlzc2VyIFR1ZWNoZXIgc2Nod2FyemUgYXVmaGFlbmdlbiAgdW5kICB0cmF1cmlnZQorTGllZGVyCXN0YXR0ICBkZXIgIGZyb2VobGljaGVuICBzcGllbGVuLiAgTWl0CWRlbSAgRmVzdCAgd29sbGVuICB3aXIJSnVsaWFzCitnZWRlbmtlbi4iIEhlcnIgQ2FwdWxldCBzYWgga2VpbmVuIFNpbm4gZGFyaW4sIGRhcyAgZ3V0ZSAgRXNzZW4gIHZlcmtvbW1lbiAgenUKK2xhc3Nlbi4KKworIkdhbnogZ2VuYXUuIFVuZCBqZXR6dCB0cm9lZGVsdCBuaWNodCAgbGFlbmdlciwgIEdvdHQgIHdpbGwsICBkYXNzICBpaHIgIEp1bGlhCitzY2huZWxsIGJlZXJkaWd0LCBkYW1pdCBuaWNodHMgc2llICBtZWhyICB2b24gIGRlbiAgRW5nbGVpbiAgYWJsZW5rdC4iICBCcnVkZXIKK0xhd3JlbmNlIHNjaGV1Y2h0ZSBhbGxlIGhpbmF1cy4KKworUG9sbHkgc2FoIHNpY2ggaW0gRmVzdHNhYWwgdW0uICJUamEsIGRhIHdlcmRlbiB3aXIgd29obCBub2NoICBlaW4gIHBhYXIgIERpbmdlCithZW5kZXJuIG11ZXNzZW4uIiBJaHIgQmxpY2sgZmllbCBhdWYgZGllIE11c2lrZXIuICJJaHIga29lbm50IGRhbm4gZ2VoZW4sICB3aXIKK2JyYXVjaGVuIGV1Y2ggbmljaHQuIgorCitFaW4gYWx0ZXIgR2FlcnRuZXIsIGRlciBkaWUgIFRvcGZyb3NlbgloaW5hdXMJdW5kICBkYWZ1ZXIgIEJ1Y2hzYmF1bQloZXJlaW4KK2JyYWNodGUsIHNjaHVldHRlbHRlIGRlbiBLb3BmLiAiTmVpbiwgZ2VodCBub2NoIG5pY2h0LiBTcGllbHQgIG1pciAgZG9jaCAgJ0RpZQorTG9yZWxlaScuIgorCisiV2FydW0gYXVzZ2VyZWNobmV0IGRhcz8iLCB3b2xsdGUgZGVyIGVyc3RlIEdlaWdlciB3aXNzZW4uCisKKyJXZWlsIGljaCBlcyBtaWNoIGF1ZiBhbmRlcmUgR2VkYW5rZW4gYnJpbmd0LiBJY2ggaG9lcmUgIGluICBtZWluZW0gIEtvcGYgIGRpZQorZ2FuemUgWmVpdCBkZW4gVHJhdWVybWFyc2NoLiIgRGVyIGFsdGUgTWFubiBrcmF0enRlIHNpY2ggYW0gS29wZiB1bmQgZGFjaHRlIGFuCitkaWUgTWFyZ2FyaXRlbmJhZXVtY2hlbiBpbSBHZXdhZWNoc2hhdXMuIEp1bGlhIGhhdHRlIHNpZSBiZXNvbmRlcnMgZ2VybiBnZWhhYnQKK3VuZCBlciBiZXNjaGxvc3MsIHNpZSBoaWVyIGhlcmVpbiB6dSBzdGVsbGVuIHVuZCBzaWNoICBuaWNodCAgdW0gIGRhcyAgR2V6ZXRlcgorSGVycm4gQ2FwdWxldHMJenUgIGt1ZW1tZXJuLCAgZGVyICBNYXJnYXJpdGVuCXVucGFzc2VuZCAgZmluZGVuICB3dWVyZGUuICBFcgorc2NobmV1enRlIHNpY2ggdmVyc3RvaGxlbiB1bmQgbmFobSBlaW5lIHdlaXRlcmUgVG9wZnJvc2UgaG9jaC4KKworRGVyIEdlaWdlciBuaWNrdGUuICJLYW5uc3QgZHUgaGFiZW4sIGFiZXIgd2FzIGJla29tbWVuIHdpcj8iCisKKyJXaWUgd2FlcmUgZXMgbWl0IGVpbmVyIFJvc2U/IiBEZXIgR2FlcnRuZXIgc3B1ZXJ0ZSBab3JuICBhdWZzdGVpZ2VuLiAgIktvZW5udAoraWhyIGVpbmVtIGFsdGVuIE1hbm4gbmljaHQgZWluZmFjaCBlaW5lbiBHZWZhbGxlbiB0dW4/IgorCisiRGF2b24gd2VyZGVuIHdpciBuaWNodCBzYXR0LCBNYW5uLiIKKworRGVyIEJyYXRzY2hpc3QgaG9iIGJlc2Nod2ljaHRpZ2VuZCBzZWluZW4gQm9nZW4uICJLb21tLCAgbGFzcyAgZ3V0ICBzZWluLiAgV2lyCitzcGllbGVuIGRpZSBMb3JlbGVpIHdhZWhyZW5kIHdpciAgYXVmICBkaWUgIFRyYXVlcmdhZXN0ZSAgd2FydGVuLiAgV2FlcmUgIGRvY2gKK2dlbGFjaHQsIHdlbm4gd2lyIG5pY2h0IGVpbiBwYWFyIEhhcHBlbiBhYmJla2FlbWVuLiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMjUgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNhMDgwCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMjUKQEAgLTAsMCArMSwxMTcgQEAKK0RFUiBGVUVORlRFIEFLVAorCURJRSBFUlNURSBTWkVORQorCisiRGFzIHdhciBlaW5lIGJlc2NoZXVlcnRlIElkZWUuIiwgYmVzY2h3ZXJ0ZSAgc2ljaCAgQXp6dXJvLiAgIldpciAgaGFldHRlbiAgaW4KK1Zlcm9uYSBibGVpYmVuIHNvbGxlbi4iCisKKyJVbmQgZGllc2VuIGF1ZmdlYmxhc2VuZW4gQWZmZW4genVzZWhlbiwgd2llIHNpZSBUcmF1ZXIgaGV1Y2hlbG4/IiBVbG8gdGF1Y2h0ZQoraWhyZW4gU2NobmFiZWwgdGllZiBpbiBlaW5lIFBmdWV0emUgdW5kIHNjaG1hdHp0ZS4KKworIldhcnVtIG5pY2h0PyBTY2hsaWVzc2xpY2ggZ2lidCBlcyBuYWNoaGVyIGVpbiBGZXN0bWFobC4iCisKKyJEdSBiaXN0IHZlcmZyZXNzZW4uIgorCisiSmEuIiBBenp1cm8ga29ubnRlIGRpZXMgbmljaHQgYWJzdHJlaXRlbi4gIkFiZXIgbmFjaCBNYW50dWEgaXN0IGVzICB3ZWl0ICB1bmQKK2ljaCBiaW4gbXVlZGUuIgorCisiSWNoIG1vZWNodGUgUm9tZW8gc2VoZW4sIHdlbm4gZXIgendlaSBOYWNocmljaHRlbiBnbGVpY2h6ZWl0aWcgIGJla29tbXQuICBXYXMKK3dpcmQgZXIgd29obCBnbGF1YmVuLCBkYXNzIEp1bGlhIHRvdCBpc3Qgb2RlciBkYXNzIHNpZSBzY2hsYWVmdCAgdW5kICBhdWYgIGlobgord2FydGV0PyBVbmQgd2FzLCB3ZW5uIEJydWRlciBMYXdyZW5jZSBkZW4gQnJpZWYgdmVyZ2Vzc2VuIGhhdD8iCisKKyJLZWluZSBBaG51bmcuIFNhZ2VuIGthbm5zdCAgZHUgIGVzICBpaG0gIGplZGVuZmFsbHMgIG5pY2h0LCAgc29uc3QgIHNpbmQgIHdpcgorZHJhdXNzZW4uIiBFciBzY2h1ZXR0ZWx0ZSBzaWNoIGJlaSBkZW0gR2VkYW5rZW4uICJTaWVoICBtYWwsICBkYSAgZ2VodCAgQnJ1ZGVyCitKb2huLiIKKworIldlciBpc3QgZGFzIG51biB3aWVkZXI/IgorCisiTGF3cmVuY2UgaGF0IGlobSBkZW4gQnJpZWYgZnVlciBSb21lbyBnZWdlYmVuLiBHdXQsIGRhbm4gIGtvZW5uZW4gIHdpciAgamV0enQKK3VtZHJlaGVuLiIKKworIkljaCB3dWVyZGUgbWljaCBsaWViZXIgZGF2b24gdWViZXJ6ZXVnZW4sIGRhc3MgUm9tZW8gZGVuIEJyaWVmIGJla29tbXQuIgorCisiU2VpIG5pY2h0IGFsYmVybi4iIEF6enVybyBzdHJlY2t0ZSBkaWUgRmx1ZWdlbCB1bmQgaG9iIG5hY2ggIFZlcm9uYSAgYWIsICBkaWUKK3NldWZ6ZW5kZSBVbG8gZGljaHQgaGludGVyIHNpY2guCisKK0tlaHJlbiB3aXIgbmljaHQgbWl0IGRlbiBUdXJ0ZWxrcmFlaGVuIG5hY2ggVmVyb25hIHp1cnVlY2ssICBpY2ggIGJpbiAgc2ljaGVyLAorZGFzcyBTaWUsIGxpZWJlICBMZXNlcmluLCAgbGllYmVyICBMZXNlciwgIHNpY2ggIEVyc3ByaWVzc2xpY2hlcmVzICB2b3JzdGVsbGVuCitrb2VubmVuLCBhbHMgYmVpIEp1bGlhcyBCZWVyZGlndW5nIHp1enVzZWhlbi4gWnVtYWwgd2VkZXIgU2llIG5vY2ggIGljaCAgZXR3YXMKK3ZvbiBkZW0gRmVzdHNjaG1hdXMgaGludGVyaGVyIGJla29tbWVuIHdlcmRlbi4KKworUm9tZW8gd2lzY2h0ZSBzaWNoIGRlbglTY2hsYWYJYXVzICBkZW4gIEF1Z2VuLCAgYWxzICBzZWluICBEaWVuZXIgIEJhbHRoYXNhcgorZWludHJhdC4gIkd1dGVuIE1vcmdlbi4gTWVpbmUgR3VldGUsIGhhYmUgaWNoIGdlc2NobGFmZW4uIgorCisiR3V0LCBob2ZmZSBpY2g/IiBCYWx0aGFzYXIgd2FyIG5pY2h0IGRhbmFjaCB6dW11dGUsIHNlaW5lIE5hY2hyaWNodGVuIHNjaG5lbGwKK2xvc3p1d2VyZGVuLgorCisiSWNoIGhhdHRlIGVpbmVuIHZlcnJ1ZWNrdGVuIFRyYXVtLiBJY2ggbGFnIHRvdCBpbiBlaW5lbSBHcmFiIHVuZCBKdWxpYSBrYW0genUKK21pci4gSGFzdCBkdSBzY2hvbiBlaW5tYWwgc28gZXR3YXMgRHVtbWVzIGdlaG9lcnQ/IiBFciBnYWVobnRlIHVuZCBzY2h3YW5nIGRpZQorQmVpbmUgdWViZXIgZGllIEJldHRrYW50ZS4gIk5hLCBpY2ggYnJhdWNoZSBudXIgIGFuICBKdWxpYSAgenUgIGRlbmtlbiwgIHNjaG9uCitmdWVobGUgaWNoIG1pY2ggcHJhZWNodGlnLiBXYXMgZ2lidCBlcyBOZXVlcyBhdXMgVmVyb25hPyBXaWUgIGdlaHQgIGVzCUp1bGlhPworVW5kIHdhcyBtYWNodCBtZWluZSBGYW1pbGllPyIKKworQmFsdGhhc2FyIGdvc3MgV2Fzc2VyIGluIGRpZSBXYXNjaHNjaHVlc3NlbC4gIkljaCBoYWJlIHp3ZWkgTmFjaHJpY2h0ZW4sICBlaW5lCitndXRlIHVuZCBlaW5lIHNjaGxlY2h0ZS4iCisKKyJSYWV0c2VsIGFtIGZydWVoZW4gTW9yZ2VuISIsIHN0b2VobnRlIFJvbWVvLiAiS2FubnN0IGR1IGRhbWl0ICBuaWNodCAgd2FydGVuLAorYmlzIGljaCB3YWNoZXIgYmluPyIKKworIkp1bGlhIGdlaHQgZXMgc28gZ3V0LCBkYXNzIGVzIHNjaG9uIHdpZWRlciAgc2NobGVjaHQgIGlzdC4iICBCYWx0aGFzYXIgIGxlZ3RlCitsYW5nc2FtIGVpbiBIYW5kdHVjaCBuZWJlbiBkaWUgU2NodWVzc2VsLgorCisiS29tbSwgc3B1Y2sncyBhdXMuIiBSb21lbyB0YXVjaHRlIGRhcyBHZXNpY2h0IGlucyBXYXNzZXIuCisKKyJFcyBnZWh0IEp1bGlhIGd1dCwgZGVubiBzaWUgaXN0IGltICBIaW1tZWwuICBEYXMgIGlzdCAgZGllICBndXRlICBOYWNocmljaHQuIgorQmFsdGhhc2FyIHNwcmFjaCBzY2huZWxsLgorCisiSWNoIHZlcnN0ZWhlLiIgUm9tZW8gdmVyem9nIGtlaW5lICBNaWVuZS4gICJCZXNvcmcnICBtaXIgIFBhcGllciwgIG1laW5zICBpc3QKK2dlc3Rlcm4gYXVzZ2VnYW5nZW4uIgorCitCYWx0aGFzYXIgYmV0cmFjaHRldGUgUm9tZW8ga3JpdGlzY2guICJEdSBzaWVoc3QgbmljaHQgZ3V0IGF1cy4gVmllbCB6dSAgYmxhc3MKK3VtIGRpZSBOYXNlIGZ1ZXIgbWVpbmVuIEdlc2NobWFjay4iCisKK1JvbWVvLCBmZXN0IGVudHNjaGxvc3Nlbiwgc2ljaCBuaWNodHMgYW5tZXJrZW4genUgbGFzc2VuLCBncmluc3RlICBicmVpdC4gICJEdQorc29sbHN0IG1pY2ggamEgYXVjaCBuaWNodCBoZWlyYXRlbi4gTG9zIHNjaG9uLCBpY2ggYnJhdWNoZSBkYXMgUGFwaWVyLiIKKworQmFsdGhhc2FyICBnaW5nLCAgZG9jaAluaWNodCAgb2huZSAgUm9tZW8gIG5vY2ggIGVpbmVuICBtaXNzdHJhdWlzY2hlbiAgQmxpY2sKK3p1enV3ZXJmZW4uCisKK1JvbWVvIHpvZyBzZWluZSBIb3NlIGFuIHVuZCBzdG9wZnRlIGRhcyBIZW1kIGVuZXJnaXNjaAloaW5laW4uICAiSGV1dGUgIGFiZW5kCitiaW4gaWNoIGJlaSBKdWxpYSwga29tbWUgd2FzIHdvbGxlLiIsIG11cm1lbHRlIGVyLgorCitEaWUgU3RyYXNzZW4gTWFudHVhcyB3YXJlbiB1ZWJlcmZ1ZWxsdCB1bmQgUm9tZW8gd3VyZGUJc3RhZW5kaWcgIGFuZ2VyZW1wZWx0LAord2FlaHJlbmQgZXIgc2ljaCBlaW5lbiBXZWcgZHVyY2ggZGllIE1lbmdlIGJhaG50ZS4gU2NobGllc3NsaWNoICBlcnJlaWNodGUgIGVyCitzZWluIFppZWw6IEVpbmUgQXBvdGhla2UsIGRlcmVuIEdlc2NoYWVmdGUgc2NobGVjaHQgIGdlbnVnICBnaW5nZW4sICBkYXNzICBpaHIKK0Jlc2l0emVyIGRpZSBHZXNldHplIG1pc3NhY2h0ZW4gdW5kICBpaG0gIEdpZnQJdmVya2F1ZmVuICB3dWVyZGUuICBBZXJnZXJsaWNoCitiZXRyYWNodGV0ZSBlciBkYXMgR2VzY2hsb3NzZW4tU2NoaWxkIGFuIGRlciBUdWVyICB1bmQJc2NobHVnCWRhbm4gIG1pdCAgZGVyCitGYXVzdCBnZWdlbiBkZW4gUmFobWVuLiAiSGFsbG8/IgorCitEZXIgQXBvdGhla2VyIG9lZmZuZXRlLiAiSWNoIGhhYmUgaGV1dGUga2VpbmVuIE5vdGRpZW5zdC4iCisKKyJEb2NoLCBoYWJlbiBTaWUuIiBSb21lbyBoaWVsdCBkZW0gTWFubiBlaW4ga2xlaW5lcyBWZXJtb2VnZW4gdW50ZXIgZGllIE5hc2UuCisKKyJLb21tZW4gU2llIHJlaW4uIiBEZXIgIEFwb3RoZWtlciAgem9nICBpaG4gIGFtICBBZXJtZWwgIGhpbnRlciAgc2ljaCAgaW4gIGRlbgorVmVya2F1ZnNyYXVtIHVuZCBzY2hsdWcgZGllIFR1ZXIgenUuICJXYXMgd29sbGVuIFNpZT8iCisKKyJHaWZ0LiBFaW4gZ3V0ZXMsIHNjaG5lbGxlcyBHaWZ0LiIKKworRGVyIE1hbm4gc2NodWV0dGVsdGUgZGVuIEtvcGYuICJJY2ggYmluIGRvY2ggbmljaHQgd2FobnNpbm5pZy4gV2VubiBpY2ggIElobmVuCitHaWZ0IHZlcmthdWZlLCB2ZXJsaWVyZSBpY2ggbWVpbmUgWnVsYXNzdW5nLiIKKworIlp1bGFzc3VuZyBoaW4sIEdlbGQgaGVyLiIgUm9tZW8gc2Nod2Vua3RlIGRpZSBNdWVuemVuLiAiSWNoIHdlcmRlICBTaWUgIG5pY2h0Cit2ZXJyYXRlbi4iCisKK0RpZSBGaW5nZXIgZGVzIEFwb3RoZWtlcnMgenVja3Rlbi4gIkljaCBrYW5uIG5pY2h0LiIKKworIldhcz8gV2lkZXJzdGVoZW4/IiBSb21lbyBsYWVjaGVsdGUuICJLb2VubnRlIGljaCBhdWNoIG5pY2h0LCB3ZW5uICBpY2ggIHNlaGUsCit3aWUgc2NobGVjaHQgYXVzZ2VzdGF0dGV0IFNpZSBzaW5kLiBGdWVyIGRhcyBHZWxkIGtvZW5uZW4gU2llIGVpbmUgTWVuZ2UgV2FyZQora2F1ZmVuLiIKKworRGVyIEFwb3RoZWtlciBzY2hsb3NzIHVtc3RhZW5kbGljaCBlaW5lbiBTY2hyYW5rIGF1Zi4gICJEYSwgIG5laG1lbiAgU2llLiAgVW5kCitkYW5uIHZlcnNjaHdpbmRlbiBTaWUuIgorCitSb21lbyBuaWNrdGUuICJJY2ggdmVyc2Nod2luZGUgYXVmIGltbWVyLCBrZWluZSBTb3JnZS4gIFVuZCAgd2VubiAgamVtYW5kICBTaWUKK2ZyYWd0LCBoYWJlbiBTaWUgbWlyIGtlaW4gR2lmdCB2ZXJrYXVmdCwgc29uZGVybiBNZWRpemluLiIKKworIldvcmF1ZiBTaWUgc2ljaCB2ZXJsYXNzZW4ga29lbm5lbi4iIERlciBBcG90aGVrZXIgYmxpY2t0ZSBhdWYgZGllIE11ZW56ZW4gIGluCitzZWluZW4gSGFlbmRlbiwgZGVubiBTY2hlaW5lIHdhcmVuIG5vY2ggbmljaHQgZXJmdW5kZW4gd29yZGVuLgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyNiBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MWQxODEKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyNgpAQCAtMCwwICsxLDUxIEBACitERVIgRlVFTkZURSBBS1QKKwlESUUgWldFSVRFIFNaRU5FCisKK1dhaHJzY2hlaW5saWNoIGZyYWdlbiBTaWUgc2ljaCBqZXR6dCwgd28gQnJ1ZGVyIEpvaG4gIGFiZ2VibGllYmVuICBpc3QsICBuaWNodAord2Focj8gU2VoZW4gd2lyIGFsc28gbmFjaCwgd28gZXIgc2ljaCBoZXJ1bXRyZWlidC4KKworQnJ1ZGVyIEpvaG4gbWFyc2NoaWVydGUgIHNjaG5hdWZlbmQgIGRlbiAgQmVyZwloaW5hdWYuICBBbHMgIGVyICBMYXdyZW5jZSAgaW0KK0tyYWV1dGVyZ2FydGVuIHNhaCwgd2lua3RlIGVyLiAiTGF3cmVuY2UsIEJydWRlciBMYXdyZW5jZSEiCisKK0xhd3JlbmNlIHJpY2h0ZXRlIHNpY2ggc3RvZWhuZW5kIGF1Zi4gIkFoLCBkYSBiaXN0IGR1IGphLiIgRXIgIHJlaWNodGUgIHNlaW5lbQorT3JkZW5zYnJ1ZGVyIGxhZWNoZWxuZCBlaW5lbiAgS3J1ZyAgV2Vpbi4gICJIaWVyICB0cmluay4gIEhhc3QgIGR1ICBkZW4gIEJyaWVmCithYmdlbGllZmVydD8iCisKK0pvaG4gbmFobSBlaW5lbiB0aWVmZW4gWnVnIHVuZCBzY2h1ZXR0ZWx0ZSBkZW4gS29wZi4gIk5laW4sICBzbyAgbGVpZCAgZXMgIG1pcgordHV0LiIgRXIgZ3JpZmYgaW4gc2VpbmUgS3V0dGUgdW5kIGZvZXJkZXJ0ZSBkZW4gemVya25pdHRlcnRlbiAgdW5kICBuYWNoICBXZWluCityaWVjaGVuZGVuIEJyaWVmIHp1dGFnZS4gIkhpZXIgaXN0IGVyIHdpZWRlci4iCisKKyJIb2VsbGUgdW5kIFRldWZlbCEiIExhd3JlbmNlIGVyZ3JpZmYgZGVuIEtyYWdlbiBkZXIgS3V0dGUgc2VpbmVzICBNaXRicnVkZXJzLgorIldlaXNzdCBkdSwgd2llIHdpY2h0aWcgZGllc2VyIEJyaWVmIGlzdD8iCisKKyJJY2gga29ubnRlIG5pY2h0cyBkYWZ1ZXIhIiwgd2ltbWVydGUgSm9obi4gIkljaCB3YXIgc2Nob24gaGFsYiBpbiBNYW50dWEsIGFscworaWNoIGR1cmNoIGVpbiBEb3JmIGthbS4uLiIKKworIlVuZCBkdSBrb25udGVzdCBkZW0gV2VpbiBkYSBuaWNodCB3aWRlcnN0ZWhlbj8gIE5pY2h0ICBlaW4gIGVpbnppZ2VzICBNYWwgIGluCitkZWluZW0gTGViZW4/IiBMYXdyZW5jZSB3ZWRlbHRlIGFua2xhZ2VuZCBtaXQgZGVtIEJyaWVmIHVudGVyIEpvaG5zICBOYXNlICBoaW4KK3VuZCBoZXIuICJNZWluc3QgZHUsIGljaCByaWVjaGUgbmljaHQsIHdhcyBkdSBtaXQgZGVtIEJyaWVmIGFuZ2VzdGVsbHQgaGFzdD8iCisKKyJJbiBkZW0gRG9yZiB3YXIgZGFzIFdhc3NlciB2ZXJzZXVjaHQsIHdpciBrb25udGVuIG51ciBXZWluIHRyaW5rZW4sICB3YWVocmVuZAord2lyIGRpZSBLcmFua2VuIHZlcnNvcmd0ZW4uIgorCisiSmEsIG5hdHVlcmxpY2guIFVuZCBkaWUgRXJkZSAgaXN0ICBlaW5lICBLdWdlbC4iICBCcnVkZXIgIExhd3JlbmNlICBzY2huYXVidGUKK3ZlcmFlY2h0bGljaC4gIkhpbW1lbCwgd2FzIHNvbGwgaWNoIGpldHp0IG51ciB0dW4/IgorCisiVmllbGxlaWNodCBlaW5lbiBuZXVlbiBCcmllZiBzY2hyZWliZW4/Iiwgd2FndGUgSm9obiB2b3J6dXNjaGxhZ2VuLgorCisiSmEsIGFiZXIgZXJzdCBtdXNzIGljaCBKdWxpYSBhdXMgZGVtIEdyYWIgaG9sZW4uIgorCisiSnVsaWE/IiBCcnVkZXIgSm9obiB3YXIgZW50c2V0enQuICJEYXMgIGlzdCAgR3JhYnNjaGFlbmR1bmchICBEYXMgIGRhcmZzdCAgZHUKK25pY2h0IHR1bi4iCisKK0xhd3JlbmNlIHNjaHVldHRlbHRlIGRlbiBLb3BmLiAiSnVsaWEgbGVidC4gVW5kIGdlbmF1IGRhcyBzdGFuZCAgYXVjaCAgaW4gIGRlbQorQnJpZWYuIiBNaXQgZWluZW0gU3RvZWhuZW4gd2lzY2h0ZSBlciBzaWNoIGRlbiBTY2h3ZWlzcyBhYi4gIlVuZCBzaWUgIHdpcmQgIGluCit6aWVtbGljaCBnZW5hdSBkcmVpIFN0dW5kZW4gd2llZGVyIHdhY2ggd2VyZGVuLiIKKworIkFiZXIgZGF2b24gaGFzdCBkdSAgbWlyICBuaWNodHMgIGdlc2FndC4iICBCcnVkZXIgIEpvaG5zICBTdGltbWUgIHdhciAgdm9sbGVyCitWb3J3dXJmLgorCisiTmF0dWVybGljaCBuaWNodCwgc29uc3Qgd2Vpc3MgZXMgamEgYmlubmVuICBlaW5lciAgU3R1bmRlICBkaWUgIGdhbnplICBTdGFkdC4KK0Fsc28sIGJlc29yZyBtaXIgZWluIEJyZWNoZWlzZW4uICBJY2ggIGhvbGUgIEp1bGlhICBhdXMgIGRlciAgR3J1ZnQgIHVuZCAgZGFubgorc2NocmVpYmUgaWNoIGVpbmVuIG5ldWVuIEJyaWVmIGFuIFJvbWVvLiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMjcgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGUyNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzUyMWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMjcKQEAgLTAsMCArMSwzOTEgQEAKK0RFUiBGVUVORlRFIEFLVAorCURJRSBGVUVORlRFIFNaRU5FCisKK0F6enVybwloYWVtbWVydGUgIG1pdAlkZW0gIFNjaG5hYmVsICBnZWdlbiAgZGllICBSZWdlbnJpbm5lCXVlYmVyCUp1bGlhcworU2NobGFmemltbWVyLiAiV2xhZCwgYXVmd2FjaGVuISIKKworV2xhZHMgd2VpbmVybGljaGUgU3RpbW1lIGVydG9lbnRlIHZvbiBkcmlubmVuLiAiTWVpbmUgQXVnZW4gIHNzc2luZCAgc3NzdHVtcGYsCittZWluIFJhZGFyIGlzc3N0IG11ZWRlIHVuZCBtZWluZSBTc3NhZWhuZSBzc3NpbmQgIHRhdWIuLi4gIFdlcglzc3N0b2VydCAgZWluZQorYXJtZSBhbHRlIEZsZWRlcm1hdXNzcyBtaXR0ZW4gaW4gZGVyIE5hY2h0PyIKKworIkhvZXIgc2Nob24gYXVmLCB3aXIgc2luZCdzOiBVbG8gdW5kIEF6enVybyEiLCByaWVmIEF6enVyby4KKworRGllIEZsZWRlcm1hdXMgc3RyZWNrdGUgZGVuIEtvcGYgaGVyYXVzLiAiQWNoIHNzc28sIHVuZCAgaWNoICBkYWNodGUgIHNzc2Nob24sCitlc3NzIHdhZXJlIGRpZSBQb2xpenp6ZWkuIFdhc3NzIGdpYnQgZXNzcyBkZW5uPyIKKworIktvbW1zdCBkdSBtaXQgenVtIEZyaWVkaG9mPyIsIGZyYWd0ZSBVbG8uCisKKyJQaWNrbmljaz8iCisKK0F6enVybyBydWVscHN0ZSB2ZXJoYWx0ZW4uICJOZWluLCBpY2ggYmVrb21tZSBrZWluZW4gQmlzc2VuIG1laHIgcnVudGVyLiIKKworIkljaCBob2ZmZSwgZHUgaGFzc3N0IG1pciBub2NoIGVpbmUgRmxpZWdlIHVlYnJpZyBnZWxhc3NzZW4/IgorCisiS2VpbmUgZWluemlnZS4uLiIKKworIldhc3NzPyIsIHVudGVyYnJhY2ggaWhuIFdsYWQgZW1wb2VydC4KKworIkljaCBoYWJlIGtlaW5lIGVpbnppZ2UgRmxpZWdlIGdlZ2Vzc2VuLiBXaXIgaGFiZW4gdW5zIGJlaSAgSnVsaWFzICBCZWdyYWVibmlzCitzY2hhZGxvcyBnZWhhbHRlbi4iCisKKyJXYXJ1bSBoYWJ0IGlociBtaXNzcyBuaXNzc3QgZ2V3ZWNrdD8gRGFzc3MgaGFldHRlICBpc3NzICBnZXJuZSAgZ2VzZWhlbi4gIFVuZAorYXVzc3NlcmRlbTogV2Fzc3Mgc3Nzb2xsIGlzc3MgZGFubiBqZXRzc3N0IG5vY2ggYXVmIGRlbSBGcmllZGhvZj8iCisKKyJTaG93ZG93biEiIEF6enVybyBtYWNodGUgZWluZSBkcmFtYXRpc2NoZSBHZWJhZXJkZS4KKworIldpZXNzc28/IgorCisiUm9tZW8gaGF0IGRlbiBCcmllZiBuaWNodCBiZWtvbW1lbiwgaW4gZGVtIHN0ZWh0LCBkYXNzIEp1bGlhIG5vY2ggIGxlYnQuICBVbmQKK1BhcmlzIHdpbGwgc2ljaCBoZXV0ZSBhYmVuZCBzZWhlbiBsYXNzZW4sIHdpZSBlciBKdWxpYSB6dWVuZnRpZyBiZWphbW1lcnQuIgorCisiS2xpbmd0IGludGVyZXNzc2FudC4iIFdsYWQgZ3JpbnN0ZS4gIkFsc3NzbywgZmxpZWdlbiB3aXIuIgorCitTaWUgZXJyZWljaHRlbiBkZW4gRnJpZWRob2YgenVzYW1tZW4gbWl0ICBQYXJpcyAgdW5kICBzZWluZW0gIHNjaHdhdHpoYWZ0ZXN0ZW4KK1BhZ2VuLgorCitQYXJpcyBuYWhtIGRlbSBKdW5nZW4gZWluZSBGbGFzY2hlIFBhcmZ1bSBhYi4gIkR1IGthbm5zdCBkYSBkcnVlYmVuICBhdWYgIG1pY2gKK3dhcnRlbi4gV2VubiBqZW1hbmQga29tbXQsIHBmZWlmIG5hY2ggbWlyLiIKKworIkVzIGlzdCBkdW5rZWwsIHdpciBzaW5kIGF1ZiBkZW0gRnJpZWRob2YgdW5kIGljaCAgaGFiZSAgQW5nc3QuIiwgIHdhbmR0ZSAgZGVyCitQYWdlIGVpbi4KKworIk5hdHVlcmxpY2ggaXN0IGVzIGR1bmtlbCwgc2NobGllc3NsaWNoIGlzdCBlcyBOYWNodC4iIFBhcmlzICBzY2h1ZXR0ZWx0ZSAgZGVuCitLb3BmLiAiV2VubiBkdSBHZXNwZW5zdGVyIHNpZWhzdCwga2FubnN0IGR1IGphIHBmZWlmZW4uIgorCitNdXJtZWxuZCB6b2cgZGVyIEp1bmdlIHNpY2ggenVydWVjayB1bmQgaG9ja3RlIHNpY2ggZWluIFN0dWVjayBlbnRmZXJudCAgdW50ZXIKK2VpbmUgRWliZS4KKworV2xhZCBraWNoZXJ0ZSBsZWlzZS4gIlBhc3NzdCBtYWwgYXVmLiIgU2llIGxpZXNzICBzaWNoICB2b24gIGRlbSAgQXN0ICBmYWxsZW4sCit1bnRlciBkZW0gc2llIGdlaGFuZ2VuIGhhdHRlIHVuZCBkcmVodGUgZWluZSAgaGFsc2JyZWNoZXJpc2NoZQlSdW5kZSAgdW0gIGRlbgorS29wZiBkZXMgUGFnZW4uIERlciAgSnVuZ2UgIHNwaXR6dGUgIGRpZSAgTGlwcGVuICB1bmQgIHZlcnN1Y2h0ZSAgenUgIHBmZWlmZW4sCitlcnJlaWNodGUgYWJlciBudXIgZWluIGthdW0gaG9lcmJhcmVzIFppc2NoZW4uIExhY2hlbmQgem9nICBXbGFkICBzaWNoCXdpZWRlcgorYXVmIGlocmVuIEFzdCB6dXJ1ZWNrLgorCisiRHUgYmlzdCBnZW1laW4uIiBBdWNoIFVsbyBncmluc3RlLgorCisiSmEuIiBXbGFkIHN0cmljaCBzaWNoIG1pdCBkZW0gRmx1ZWdlbCB1ZWJlciBkaWUgT2hyZW4uCisKKyJHdWNrdCBldWNoIFBhcmlzIGFuLiIgQXp6dXJvIGRldXRldGUgbWl0IGRlbSBTY2huYWJlbC4gIkljaCBoYWV0dGUgZWlnZW50bGljaAorZXJ3YXJ0ZXQsIGRhc3MgZXIgWnVzY2hhdWVyIG1pdGJyaW5ndC4iCisKKyJIYXQgZXIgZG9jaC4iIFVsbyB3aWVzIGF1ZiBkZW4gUGFnZW4uICJEZXIgS2xlaW5lIGlzdCBuaWNodCAgbnVyICBmdWVyICBzZWluZQorRmVpZ2hlaXQgYmVrYW5udCwgZXIga2FubiBhdWNoIG5pY2h0cyBmdWVyIHNpY2ggYmVoYWx0ZW4uIgorCisiT2guIiBBenp1cm8gbmlja3RlLgorCitQYXJpcyBkcnVlY2t0ZSBzaWNoIGVpbiBUdWVjaGxlaW4gYW5zIEdlc2ljaHQgdW5kIHZlcmdvc3MgZWluIHBhYXIgVHJhZW5lbi4KKworIlNzc2luZCBkYXNzcyBTc3N3aWViZWxuLCBkaWUgaXNzcyBkYSByaWVzc3NlPyIsIGZyYWd0ZSBXbGFkLgorCisiVW5kIEFtbW9uaWFrLiIgVWxvIHJpZWIgc2ljaCBkZW4gU2NobmFiZWwgbWl0IGRlciBLbGF1ZS4gIkRhcyB0cmVpYnQgZWluZW0gamEKK2RpZSBUcmFlbmVuIGluIGRpZSBBdWdlbi4iCisKKyJEYXJ1bSBoYXQgZXIgZXMgamEuIiBBenp1cm8ga25pZmYgZGllIEF1Z2VuIHp1c2FtbWVuLiAiUGFzc3QgYXVmLCBqZXR6dCBrb21tdAorZWluIEdlZGljaHQuIgorCitVbG8gdW5kIFdsYWQgc3RvZWhudGVuLgorCisiT2gsIEp1bGlhLCBzY2hvZW5zdGUgQmx1bWUgZHUsIG1pdCBUcmFlbmVuICBkZWNrZSAgaWNoICBkZWluICBHcmFiLi4uIiAgUGFyaXMKK3pvZWdlcnRlLiAiLi4ubWl0IFRyYWVuZW4gZGVjaycgZGVpbiBHcmFiIGljaCB6dS4gQmx1bWVuIHN0cmV1ICBpY2ggIGF1ZiAgZGVpbgorSGF1cHQsIHdlaWwgYm9lc2VyIFRvZCBkaWNoIGhhdCBnZXJhdWJ0LiIKKworIkF1YS4iLCBrb21tZW50aWVydGUgVWxvLgorCisiUmVpbSBkaXNzcywgb2RlciBpc3NzIGJlaXNzcyBkaXNzcy4iLCBzdGltbXRlIFdsYWQgaWhyIHp1LiAgR3JpbnNlbmQgIGRldXRldGUKK3NpZSBhdWYgZGVuIFBhZ2VuLiAiRXIgdmVyc3NzdWNodCdzc3MgaW1tZXIgbm9jaC4iIFNpZSBzcGl0enRlIGRpZSBMaXBwZW4gIHVuZAorcGZpZmYgc2NocmlsbC4gIlNzc3NvIGdlaHQgZGFzc3MuIgorCitEZXIgSnVuZ2Ugc2NoYXV0ZSBzaWUgYWVuZ3N0bGljaCBhbi4gUGFyaXMsIGRlciBmZXN0ZW4gTWVpbnVuZywgc2VpbiBQYWdlIGhhYmUKK2dlcGZpZmZlbiwgYmxpY2t0ZSBzaWNoIHVtIHVuZCBuYWhtIGVpbmVuIEZhY2tlbHNjaGVpbiB3YWhyLiBSYXNjaCBzdGVja3RlICBlcgorZGFzIFBhcmZ1bWZsYWVzY2hjaGVuIGVpbiB1bmQgZHVja3RlIHNpY2ggbmViZW4gZWluZW4gc3RlaW5lcm5lbiBFbmdlbC4KKworIkFoLCBkYSBpc3NzdCBSb21lby4iIFdsYWQgcmVja3RlIHNpY2ggc28gd2VpdCB2b3IsICBkYXNzICBzaWUgIGZhc3QgIHZvbSAgQXN0CitmaWVsLgorCitSb21lbyBuYWhtIGVpbmVuIEJyaWVmIGF1cyBzZWluZXIgIEphY2tlbnRhc2NoZSAgdW5kICByZWljaHRlICBpaG4gIEJhbHRoYXNhci4KKyJIaWVyLCBkZW4gZ2lic3QgZHUgZ2xlaWNoIG1vcmdlbiBmcnVlaCBtZWluZW0gVmF0ZXIuIgorCitCYWx0aGFzYXIgZnVlaGx0ZSBzaWNoIGFsbGVzIGFuZGVyZSBhbHMgd29obCBpbiAgc2VpbmVyICBIYXV0LgkiV2FzICBoYXN0ICBkdQordm9yPyIKKworIkljaCB3ZXJkZSBtaXIgSnVsaWFzIEVoZXJpbmcgaG9sZW4sIGRlbm4gc2NobGllc3NsaWNoIHN0ZWh0IG1pciBkZXIgYWxzIGlocmVtCitNYW5uIHp1LCB1bmQgaWhyIGRpZSBsZXR6dGUgRWhyZSBlcndlaXNlbi4gV2FzIHNvbnN0LCBtZWluc3QgZHU/IiAgUm9tZW8gIG5haG0KK0JhbHRoYXNhciBkYXMgU3RlbW1laXNlbiBhYi4gIkR1IG11c3N0IGhpZXIgdmVyc2Nod2luZGVuLCBpY2ggd2lsbCBuaWNodCwgZGFzcworZHUgbWVpbmV0d2VnZW4gaW4gU2Nod2llcmlna2VpdGVuIGtvbW1zdC4iCisKKyJBY2gsIG1pdCBTY2h3aWVyaWdrZWl0ZW4gd2VyZGUgaWNoIGZlcnRpZy4iIEJhbHRoYXNhciB6dWNrdGUgIGRpZSAgU2NodWx0ZXJuLgorIkFiZXIgZGljaCBhdWYgZGVtIGR1bmtsZW4gRnJpZWRob2YgYWxsZWluIHp1IGxhc3NlbiwgZGFzIGJlaGFndCBtaXIgbmljaHQuIgorCisiVmVybnVlbmZ0aWcsIGRlciBNYW5uLiIsIG1laW50ZSBBenp1cm8uCisKK1JvbWVvIGxlZ3RlIHNlaW5lbSBEaWVuZXIgZGllIEhhbmQgYXVmIGRpZSBTY2h1bHRlci4gIk1hY2ggZGlyIHVtICBtaWNoICBrZWluZQorU29yZ2VuLiBWZXJzY2h3aW5kZSBoaWVyLCB1bmQgd2VubiBpY2ggZGljaCBlcndpc2NoZSwgZGFzcyBkdSBkaWNoIGhpZXIgaW4gZGVyCitOYWVoZSBhdWZoYWVsc3QsIHJlaXNzZSBpY2ggZGlyIGRpZSBPaHJlbiBhYiwgdmVyc3RhbmRlbj8iCisKK0JhbHRoYXNhciBuaWNrdGUuICJKYSwgIGljaCAgaGFiZSAgdmVyc3RhbmRlbi4gIFRyb3R6ZGVtOiAgUm9tZW8sICBtYWNoICBrZWluZQorRHVtbWhlaXRlbi4iCisKKyJJY2ggd2FyIG5pZSBpbiBtZWluZW0gTGViZW4gdmVybnVlbmZ0aWdlci4gTWFjaCBkaWNoIHZvbSBBY2tlci4iIEVyIHNhaCwgIHdpZQorQmFsdGhhc2FyIHp1c2FtbWVuenVja3RlLiAiR290dGVzYWNrZXIsIHdvbGx0ZSBpY2ggc2FnZW4uIgorCitCYWx0aGFzYXIgbmlja3RlIGVyZ2ViZW4sIG1hY2h0ZSBhdWYgZGVtIEFic2F0eiBrZWhydCB1bmQgYmxpY2t0ZSAgYXVjaCAgbmljaHQKK3p1cnVlY2ssIGFscyBlciBob2VydGUsIHdpZSBSb21lbyBkYXMgR3JhYiBhdWZicmFjaC4KKworUGFyaXMgeml0dGVydGUgaGludGVyIGRlbSBSb2NrIGRlcyAgRW5nZWxzICB2b3IgIFd1dCwgIGFscyAgZXIJZGllICBoYWxsZW5kZW4KK1NjaGxhZWdlIGhvZXJ0ZSwgbWl0ICBkZW5lbiAgUm9tZW8gIGRhcyAgR3JhYiAgb2VmZm5ldGUuICAiRHUgIEdyYWJzY2hhZW5kZXIhIgorV3VldGVuZCBzcHJhbmcgZXIgbmFjaCB2b3JuZSB1bmQgem9nIHNlaW5lbiBEZWdlbi4KKworUm9tZW8gd2FuZHRlIHNpY2ggbGFuZ3NhbSB1bSwgZGFzIEJyZWNoZWlzZW4gaW4gZGVyICBSZWNodGVuLiAgIkhvZXIgIHp1LCAgaWNoCitoYWJlIG5pY2h0IHZvciwgZGFzIEdyYWIgenUgc2NoYWVuZGVuLiBXZW5uIGR1IG51ciBmdWVyIGZ1ZW5mIFBmZW5uaWcgVmVyc3RhbmQKK2hhc3QsIG1hY2hzdCBkdSwgZGFzcyBkdSB3ZWdrb21tc3QuIgorCisiUmVpY2h0IGVzIGRpciBuaWNodCwgZGFzcyBKdWxpYSB2b3IgbGF1dGVyIEt1bW1lciB1ZWJlciBkZWluZW4gTW9yZCBhbiAgaWhyZW0KK1ZldHRlcnMgVHliYWx0IFNlbGJzdG1vcmQgYmVnYW5nZW4gaGF0PyBNdXNzdCBkdSBqZXR6dAlhdWNoICBub2NoICBpaHJlICBSdWhlCitzdG9lcmVuPyIgRGllICBEZWdlbnNwaXR6ZSAgcmVja3RlICBzaWNoICBiZWdlaHJsaWNoICBSb21lb3MgIEtlaGxlICBlbnRnZWdlbi4KKyJFc2NhbHVzIGhhdCBkaWNoIHZlcmJhbm50IGZ1ZXIgZGllc2VzIFZlcmJyZWNoZW4sIGpldHp0IGtvbW1zdCBkdSB6dXJ1ZWNrLCB1bQorbm9jaCBtZWhyIFNjaGFuZHRhdGVuIHp1IGJlZ2VoZW4/IiBQYXJpcyBHZXNpY2h0IGxldWNodGV0ZSB3ZWlzcyB2b3IgIFpvcm4gIGltCitzY2h3YWNoZW4gU3Rlcm5lbmxpY2h0LiAiRGllc21hbCBrb21tc3QgZHUgbmljaHQgZGF2b24sIGRhcyBzY2h3b2VyZSBpY2ggIGRpci4KK0ljaCBuZWhtZSBkaWNoIGZlc3QgdW5kIG1vcmdlbiB3aXJkIEVzY2FsdXMgZGljaCB6dW0gVG9kIHZlcnVydGVpbGVuLiIKKworIkljaCBiaW4gbGFlbmdzdCAgenVtICBUb2QgIHZlcnVydGVpbHQsICBNYW5uLiIgIFJvbWVvICB2ZXJ6b2cgIGJlZGF1ZXJuZCAgZGFzCitHZXNpY2h0LiAiSWNoIGJpbiBudXIgaGllciwgd2VpbCBpY2ggc3RlcmJlbiB3aWxsLCAgdmVyc3RlaHN0ICBkdSAgZGFzICBuaWNodD8KK0Fsc28gdHUgbWlyIHVuZCBkaXIgIGRlbiAgR2VmYWxsZW4gIHVuZCAgendpbmcJbWljaCAgbmljaHQsICBkaWNoICBhdWNoICBub2NoCit1bXp1YnJpbmdlbi4iIEVyIGhvYiBkYXMgQnJlY2hlaXNlbi4KKworUGFyaXMgYW50d29ydGV0ZSBuaWNodCwgc29uZGVybiBoaWViIHdpbGQgbmFjaCBSb21lby4KKworRGVyIFBhZ2UgaG9lcnRlIGRlbiBMYWVybSB1bmQgcmljaHRldGUgc2ljaCBhYnJ1cHQgYXVmLCBkYW5uIGRyZWh0ZSBlciBzaWNoIHVtCit1bmQgcmFubnRlIGxhdXRoYWxzIG5hY2ggZGVyIFdhY2hlIHNjaHJlaWVuZCBkZW4gSHVlZ2VsIGhpbnVudGVyLgorCisiQWxzIEZlY2h0ZXIga2FubiBlciBub2NoIGV0d2FzIGxlcm5lbi4iIEF6enVybyBzY2h1ZXR0ZWx0ZSBkZW4gS29wZi4KKworIkVsZWdhbnQgaXN0IGVyIG5pY2h0LCBkYXMgc3RpbW10LiIgIFVsbyAga3JhZWNoenRlICBsZWlzZSwgIGFscyAgUGFyaXMgIGVpbmVuCitTY2hsYWcgbWlyIGRlbSBCcmVjaGVpc2VuIG51ciBtaXQga25hcHBlciBOb3QgYWJmaW5nLiBEZXIgbmFlY2hzdGUgU2NobGFnICBrYW0KK3NjaG5lbGxlciwgYWxzIFBhcmlzIGVzIGVyd2FydGV0IGhhdHRlLiAiVW5kIGxlcm5lbiB3aXJkIGVyIGF1Y2ggbmljaHRzIG1laHIuIgorCisiU3NzaWUgaGFldHRlbiBzc3Npc3NzIHJ1aGlnIGVpbiBiaXNzc2VuIG1laHIgYW5zdHJlbmdlbiBrb2VubmVuLiIsIGJlc2Nod2VydGUKK3NpY2ggV2xhZC4KKworUGFyaXMgc3RvZWhudGUsIGFscyBSb21lbyBzaWNoIHVlYmVyIGlobiBiZXVndGUuICJCZWdyYWIgbWljaCAgbmViZW4gIEp1bGlhLiIsCitmbHVlc3RlcnRlIGVyLgorCitSb21lbyBuaWNrdGUuICJWZXJzcHJvY2hlbi4iIEFscyBQYXJpcyBzdGFyYiwgc2FoIGVyICBnZW5hdWVyICBoaW4uICBFciAgd3VyZGUKK2JsYXNzLCBhbHMgZXIgUGFyaXMgZXJrYW5udGUuICJWZXJkYW1tdC4iCisKKyJKdWxpYSBzb2xsdGUgaWhuIGhlaXJhdGVuLiIsIGZsdWVzdGVydGUgQXp6dXJvIGxlaXNlIGluIFJvbWVvcyBPaHIuCisKK1JvbWVvIHN0YW1wZnRlIG1pdCBkZW0gRnVzcyBhdWYuICJWZXJkYW1tdCwgdmVyZGFtbXQsIHZlcmRhbW10LiAgV2llc28gIG11c3N0ZQoraWNoIGF1c2dlcmVjaG5ldCBpaG4gZXJ3aXNjaGVuPyIKKworIkhlLCBSb21lbywgaWNoIG11c3MgZGlyIGV0d2FzIHNhZ2VuLiIgVWxvIGh1ZXBmdGUgIGF1ZiAgZWluZW4gIFZvcnNwcnVuZyAgZGVyCitHcnVmdC4KKworUm9tZW8gYmxpY2t0ZSBhdWYuICJUdSdzIG5pY2h0LiIKKworIkRvY2guIiBBdWZnZXJlZ3QgdHJpcHBlbHRlIFVsbyBoaW4gdW5kIGhlci4gIkp1bGlhIGlzdC4uLiIKKworIlRvdCB1bmQgYmVlcmRpZ3QsIGljaCB3ZWlzcy4iLCB1bnRlcmJyYWNoIFJvbWVvIHNpZS4gIlVuZCBpY2ggYmluIGF1Y2ggIHNjaG9uCit0b3QuIFNvIGd1dCB3aWUuIiBFciBzZXVmenRlIHVuZCBob2IgUGFyaXMgaG9jaC4gIlVuZCAgUGFyaXMgIHdpcmQgIHZvbiAgZWluZW0KK1RvdGVuIGJlZXJkaWd0LiBXYXMgZnVlciBlaW5lIElyb25pZSBkZXMgU2NoaWNrc2Fscy4iIEVyIGxhY2h0ZSBiaXR0ZXIuCisKKyJOZWluLCBKdWxpYSBpc3QuLi4iCisKKyIuLi51bnRlbi4iLCBiZWVuZGV0ZSBBenp1cm8gZGVuIFNhdHogZnVlciBVbG8gdW5kIHdhcmYgIGlociAgZWluZW4gIGRyb2hlbmRlbgorQmxpY2sgenUuIEt1cnogZW50c2NobG9zc2VuIGxhbmRldGUgV2xhZCBhdWYgIFVsb3MgIEtvcGYgIHVuZCAgaGllbHQgIGlociAgZGVuCitTY2huYWJlbCBtaXQgZGVuIEZsdWVnZWxuIHp1LgorCitWZXJ3aXJydCBzYWggUm9tZW8genUgVWxvIGhvY2gsIGRpZSAgc2ljaCAgaGVmdGlnICBnZWdlbiAgV2xhZAl3ZWhydGUuICAiRWluZQorRmxlZGVybWF1cyBob2NrdCBhdWYgZWluZXIgS3JhZWhlLiBEYXMgaXN0IHdvaGwgZWluIFZvcnplaWNoZW4uIiBFciBzY2h1bHRlcnRlCitQYXJpcyBMZWljaG5hbSB1bmQgZ2luZyB2b3JzaWNodGlnIGRpZSBTdHVmZW4gZGVyIEdydWZ0IGhpbnVudGVyLgorCitVbnRlbiBzYWggUm9tZW8gc2ljaCBzY2hhdWRlcm5kIHVtIHVuZCBsZWd0ZSBkYW5uIFBhcmlzIG5lYmVuIFR5YmFsdCAgYXVmICBkZW4KK1N0ZWluLiAiU28sIGpldHp0IGhhc3QgZHUgZWluZW4gUGxhdHosIGRlciAgZGlyICBhbmdlbWVzc2VuICBpc3QuICBEZW5uIGRpcmVrdAorbmViZW4gSnVsaWEgbGllZ2UgaWNoIC0gdW5kIG5pZW1hbmQgYW5kZXJzLiIgRXIgYmV1Z3RlIHNpY2ggdWViZXIgIEp1bGlhLiAgIkR1CitoYXN0IGphIG5vY2ggZ2FueiByb3RlIExpcHBlbi4iIEVyIGxhZWNoZWx0ZSB1bmQga3Vlc3N0ZSBzaWUuICJTY2hhZGUsIGRhc3MgZXMKK2tlaW4gTWFlcmNoZW4gaXN0LCBzb25zdCB3YWNodGVzdCBkdSAgamV0enQgIGF1Zi4iICBOYWNoZGVua2xpY2ggIHdvZyAgZXIgIGRpZQorUGhpb2xlIG1pdCBkZW0gR2lmdCBpbiBkZXIgSGFuZC4gIldvIGR1IGJpc3QsIHdpbGwgaWNoIGF1Y2ggaGluZ2VoZW4sICBKdWxpYS4iCitFciB0cmFuayB1bmQgc2VpbiBMYWVjaGVsbiB2ZXJ0aWVmdGUgc2ljaCwgYmV2b3IgIGVyICBsZWJsb3MgIGluICBKdWxpYXMgIEFybWUKK3NhbmsuCisKK0RyYXVzc2VuIHdhciBlcyBVbG8gZW5kbGljaCBnZWx1bmdlbiwgV2xhZCBoZXJ1bnRlcnp1c2NodWJzZW4uICJEdS4uLiwgZHUuLi4iCisKKyJKYT8iLCBmcmFndGUgV2xhZCBmcmV1bmRsaWNoLgorCisiRGVpbmV0d2VnZW4gaXN0Li4uIgorCisiU3RpbGwsIGRhIGtvbW10IEJydWRlciBMYXdyZW5jZS4iLCB1bnRlcmJyYWNoIEF6enVybyBkZW4gU3RyZWl0LgorCitMYXdyZW5jZSBiZXVndGUgc2ljaCBuYWNoZGVua2xpY2ggdWViZXIgZGFzIEJsdXQgdW5kIGRhcyBCcmVjaGVpc2VuIGFtCUJvZGVuLgorIldhcyBpc3QgZGVubiBoaWVyIHBhc3NpZXJ0PyIKKworIlJvbWVvIHdhciBoaWVyLiIsIGtsYWVydGUgQXp6dXJvIGlobiBhdWYuCisKKyJXYXI/IiBCcnVkZXIgTGF3cmVuY2Ugc2FoIGlobiBlbnRzZXR6dCBhbi4gIkljaCBoYXR0ZSBzY2hvbiAgZGVuICBnYW56ZW4gIFRhZworZWluIHVuZ3V0ZXMgR2VmdWVobC4iIEVyIHNldWZ6dGUuICJXZW5pZ3N0ZW5zIG11c3MgaWNoIGpldHp0IGRpZSAgR3J1ZnQgIG5pY2h0CittZWhyIGF1ZmJyZWNoZW4uIiBCZWh1dHNhbSBzdGllZyBlciBoaW51bnRlci4KKworTWl0IEdyYXVzZW4gbGllc3MgTGF3cmVuY2UgZGVuIEJsaWNrIHVlYmVyIGRpZSBMZWljaGVuIHNjaHdlaWZlbiwgZGFubiBibGlja3RlCitlciB6dSBBenp1cm8gYXVmLiAiV2llIGxhbmdlPyIsIGZyYWd0ZSBlciBsZWlzZS4KKworIlVuZ2VmYWVociBlaW5lIGhhbGJlIFN0dW5kZS4iCisKK0JydWRlciBMYXdyZW5jZSBmbHVjaHRlIHNvIGhlcnpoYWZ0LCBkYXNzIFdsYWQgZGFzIE1hdWwgIG9mZmVuCXN0ZWhlbglibGllYi4KKyJGdWVyIGVpbmVuIFByaWVzc3N0ZXIgaGF0IGVyIGVpbmVuIGludGVyZXNzc3NhbnRlbiBXb3J0c3NzYXRzc3MuIiwgbWVpbnRlIHNpZQorYmVpZmFlbGxpZy4KKworIkRhc3MgZHUgZGFzIGphIG5pY2h0IHBldHp0LiIgQnJ1ZGVyIExhd3JlbmNlIGRyb2h0ZSBpaHIgbWl0IGRlbSBGaW5nZXIuCisKKyJJY2g/IiBXbGFkIHZlcnN1Y2h0ZSwgdW5zY2h1bGRpZyBhdXN6dXNlaGVuLgorCitKdWxpYSBzdG9laG50ZSB1bmQga2xhcHB0ZSBtdWVoc2FtIGVpbiBBdWdlIGF1Zi4gIldvLi4uPyIgIFNpZSAgb2VmZm5ldGUgIGF1Y2gKK2RhcyBhbmRlcmUgQXVnZS4gIk9oLCBqYS4gRWluZSBHcnVmdC4gTWVpbmUgR3J1ZnQuIiBBbHMgIHNpZSAgc2ljaCAgYXVmc2V0enRlLAorZmllbCBpaHIgQmxpY2sgYXVmICBMYXdyZW5jZSwgIGRlciAgc2llICBtaXQgIHNjaHJlY2tnZXdlaXRldGVuICBBdWdlbglhbnNhaC4KKyJCcnVkZXIgTGF3cmVuY2UuIEd1dC4gV28gaXN0IFJvbWVvPyIKKworV29ydGxvcyBkZXV0ZXRlIExhd3JlbmNlIGF1ZiBkaWUgTGVpY2hlLiBFciByYWV1c3BlcnRlIHNpY2gsIGFscyAgSnVsaWEgIGVpbmVuCitTY2hyZWkgYXVzc3RpZXNzLiAiSnVsaWEsIHdpciBzb2xsdGVuIGhpZXIgdmVyc2Nod2luZGVuLiBJY2ggIGJyaW5nZSAgZGljaCAgaW4KK2VpbiBLbG9zdGVyLiIKKworIktsb3N0ZXI/IEljaCB3aWxsIGJlaSBSb21lbyBzZWluISIKKworIlNlaSB2ZXJudWVuZnRpZywgZGFzIGdlaHQgZG9jaCBuaWNodC4gRXIgaXN0IHRvdC4iCisKKyJEYW5uIHdpbGwgaWNoIGRhcyBhdWNoIHNlaW4uIiBTaWUgYmV0cmFjaHRldGUgZGllIFBoaW9sZSBpbiAgUm9tZW9zICBGaW5nZXJuLgorIkxlZXIuIER1IEdlaXpoYWxzLCB3aWUgc29sbCBpY2ggamV0enQgenUgZGlyIGtvbW1lbj8iCisKK1JvbWVvIHJlYWdpZXJ0ZSBuaWNodCBhdWYgaWhyZSBWb3J3dWVyZmUsIGRvY2ggZWluZSBkZXIgZHJlaSAgVGF1YmVuICBhdWYgIGRlcgorV29sa2UgdWViZXIgaWhuZW4gc2FoIHNlaHIgYmV0cnVlYnQgYXVzLgorCisiSnVsaWEuLi4iIEJydWRlciBMYXdyZW5jZSBmYXNzdGUgc2llIGFuIGRlciBTY2h1bHRlci4KKworIk5laW4uIiBKdWxpYSB6b2cgUm9tZW9zIERvbGNoICBhdXMgIGRlciAgU2NoZWlkZSwgIHdpbmt0ZSAgZGVuICBLcmFlaGVuLCAgZGVyCitGbGVkZXJtYXVzIHVuZCBCcnVkZXIgTGF3cmVuY2UgenUgdW5kIGVyc3RhY2ggc2ljaC4KKworIlNpZSBoYXQgZ2V3dW5rZW4uIiBVbG8gc2NobHVja3RlLgorCisiV2FydGUsIGJpcyB3aXIgc2llIGhpbnRlciBkZXIgQnVlaG5lIHNlaGVuLiBEYXMgZ2lidCBBZXJnZXIuIiwgbWVpbnRlIEF6enVyby4KKworIktBTk4gSUNIIEpFVFpUPyIKKworIkJlZGllbiBkaXNzcywgc3NzaWUgd2FydGVuIHNzc29uLiIKKworIkRBTktFLiIKKworQnJ1ZGVyIExhd3JlbmNlIGhvZXJ0ZSBlaW5lbiBXYWNobWFubiB1bmQgYmxpY2t0ZSBzaWNoIHdpbGQgdW0uICJJY2ggbXVzcyAgd2VnCitoaWVyLCBkYXMgaXN0IG1pciB1bmhlaW1saWNoLiIgRXIgcmFmZnRlIHNlaW5lIEt1dHRlIHp1c2FtbWVuIHVuZCBrbGV0dGVydGUgc28KK2dlc2Nod2luZCBhdXMgZGVyIEdydWZ0LCBkYXNzIFVsbyBhbmVya2VubmVuZCBwZmlmZi4KKworRGVyICBXYWNoaGF1cHRtYW5uICBrYW0gIHp1c2FtbWVuICBtaXQJUGFyaXMgIFBhZ2VuICBoZXJhYi4gICJXYXMgIGZ1ZXIgIGVpbmUKK1NjaGVpc3NlLiIgRXIgc2V1Znp0ZSB1bmQgZ2luZyB6dSBzZWluZW4gS29sbGVnZW4gbmFjaCBvYmVuLiAiRHVyY2hrYWVtbXQgIGRlbgorRnJpZWRob2YuIFVudGVuIGxpZWdlbiBkcmVpIExlaWNoZW4sIGFsbGUgbm9jaAl3YXJtLiAgRGVyICBUYWV0ZXIgIGthbm4gIG5vY2gKK25pY2h0IHdlaXQgc2Vpbi4iIEVyIGRldXRldGUgYXVmIGVpbmVuIEdlZnJlaXRlbi4gIkR1IGdlaHN0IHVuZCAgaG9sc3QgIEZ1ZXJzdAorRXNjYWx1cywgZGllIENhcHVsZXRzIHVuZCBkaWUgTW9udGFndWVzLiIKKworIldlciBzaW5kIGRpZSBMZWljaGVuPyIsIHdvbGx0ZSBzZWluIFNlcmdlYW50IHdpc3Nlbi4KKworIkdyYWYgUGFyaXMsIFJvbWVvIE1vbnRhZ3VlIHVuZCAtIGhhbHRldCBldWNoIGZlc3QgLSBKdWxpYSBDYXB1bGV0LiIKKworIkp1bGlhPyIgRGVyIFNlcmdlYW50IHJ1bnplbHRlIGRpZSBTdGlybi4gIldpZSBrYW5uIHNpZSBub2NoICB3YXJtICBzZWluPyAgSWNoCitkZW5rZSwgc2llIGlzdCBzY2hvbiBzZWl0IHp3ZWkgVGFnZW4gdG90PyIKKworIk5laW4sIGlzdCBzaWUgbmljaHQuIiwga3JhZWNoenRlIFVsby4KKworIlRqYS4iLCBtZWludGUgZGVyIEhhdXB0bWFubi4gIkRlbmt0ICB3YXMgIGlociAgd29sbHQsICBhYmVyICBkaWUgIEtyYWVoZSAgaGF0CitSZWNodC4iCisKK0VzY2FsdXMsIGRlciBzaWNoIHp3YXIJZGllICBBbXRzcm9iZSAgdWViZXIgIGRpZSAgU2NodWx0ZXJuICBnZXdvcmZlbgloYXR0ZSwKK2FsbGVyZGluZ3MgaW4gZGVyIEF1ZnJlZ3VuZyB2ZXJnZXNzZW4gaGF0dGUsIHNpY2ggYXVjaCBTY2h1aGUgYW56dXppZWhlbiwgc2FoCitzaWNoIHZlcndpcnJ0IHVtLiAiV29taXQgaGF0IGRpZSBLcmFlaGUgUmVjaHQ/IgorCisiSGllciBpbiBkZXIgR3J1ZnQgbGllZ2VuIGRyZWkgZnJpc2NoZSBMZWljaGVuOiBSb21lbywgSnVsaWEgdW5kICBQYXJpcy4iICBEZXIKK0hhdXB0bWFubiBuYWhtIEhhbHR1bmcgYW4uCisKK0ZyYXUgQ2FwdWxldCwgZGllIHNpY2ggZ2VyYWRlIGVpbmVuIFdlZyBkdXJjaCBkaWUgIHZlcnNhbW1lbHRlCU1lbmdlICBiYWhudGUsCitzY2hyaWUgYXVmLiAiTWVpbmUgSnVsaWEgc3RpcmJ0IHp3ZWltYWw/IgorCitBdWNoICBFc2NhbHVzICBrb25udGUgIGVzICBrYXVtICBnbGF1YmVuLiAgIkFsc28gIHZvbiAgQW5mYW5nLiAgV2VyICBoYXQgICB3ZW4KK2Vyc2NobGFnZW4/IgorCitCcnVkZXIgTGF3cmVuY2UsIGRlciB6d2lzY2hlbiB6d2VpIFdhY2htYWVubmVybiBoZXJhbmdlc2NobGVwcHQgd3VyZGUgd2llICBlaW4KK1NhY2sgV2Flc2NoZSwgenVwZnRlIHNpY2ggdmVybGVnZW4gYW4gZGVyIE5hc2UuICJJY2ggc29sbHRlICB3b2hsICBldHdhcyAgZGF6dQorc2FnZW4uIgorCisiVmVybXV0bGljaC4iIEZ1ZXJzdCBFc2NhbHVzIG5pY2t0ZSBkZW0gTW9lbmNoIHp1LiAiV2VubiBTaWUgZXMga29lbm5lbi4iCisKK0JydWRlciBMYXdyZW5jZSBzZXVmenRlLiAiSWNoIGdsYXViZSwgaWNoIGJpbiBhbiBhbGxlbSBzY2h1bGQuIEFsc286IFJvbWVvIHVuZAorSnVsaWEgaGFiZW4gYW0gRGllbnN0YWcgaGVpbWxpY2ggZ2VoZWlyYXRldC4iCisKK1Nvd29obCBkaWUgRmFtaWxpZSBDYXB1bGV0IGFscyBhdWNoIEhlcnIgTW9udGFndWUgc3RvZWhudGVuIGF1ZiAgdW5kICBibGlja3RlbgordW5nbGFldWJpZyBpbiBkaWUgUnVuZGUuCisKK0hlcnIgTW9udGFndWUgc2FoIEZ1ZXJzdCBFc2NhbHVzICBhdXMgIGdyb3NzZW4sICB0cmF1cmlnZW4gIEF1Z2VuICBhbi4JIk5pY2h0CitnZW51ZywgZGFzcyBtZWluZSBGcmF1IGhldXRlIGdlc3RvcmJlbiBpc3QsIHdlaWwgc2llIGVzIG5pY2h0IGVydHJhZ2VuIGtvbm50ZSwKK2Rhc3MgUm9tZW8gdmVyYmFubnQgaXN0LCBzdGlyYnQgamV0enQgYXVjaCBub2NoIG1laW4gU29obi4iCisKK1JvbWVvLCBkZXIgbmViZW4gSnVsaWEgYXVmICBkZXIgIHdlaWNoZW4gIFdvbGtlICBzYXNzICB1bmQgIGRpZSAgVGF1YmVuZ2VzdGFsdAorYWJnZWxlZ3QgaGF0dGUsIHVtIGFid2VzZW5kIFVsb3MgR2VmaWVkZXIgenUga3JhdWxlbiwgIGxhY2h0ZSAgYXVmLiAgIkRhcyAgaXN0CitzdGFya2VyIFRvYmFrIGZ1ZXIgc2llLiIKKworSnVsaWEgbGVndGUgaWhyZSBIYW5kIGF1ZiBzZWluZW4gQXJtLiAiRGFzIG1pdCBkZWluZXIgTXV0dGVyIHR1dCBtaXIgbGVpZC4iCisKK0xhd3JlbmNlIG5pY2t0ZSBkZW4gRWx0ZXJuIHp1LiAiRXMgc3RpbW10LiBVbmQgYW0gTW9udGFnIGhhdCBSb21lbyBhdWNoIFR5YmFsdAorZXJzdG9jaGVuLiBEZXNoYWxiIG11c3N0ZSBlciBub2NoIHZvciBTb25uZW5hdWZnYW5nIGFtIERpZW5zdGFnbW9yZ2VuIGF1cyAgZGVyCitTdGFkdCAgdmVyc2Nod2luZGVuLiAgSWNoICBuZWhtZSAgZG9jaAlzdGFyayAgYW4sICBkYXNzICBkaWUJRWhlICAgdHJvdHpkZW0KK3JlY2h0c2d1ZWx0aWcgaXN0LiBQb2xseSB3ZWlzcyBkYXMgc2ljaGVyIGJlc3NlciBhbHMgaWNoLiIKKworSnVsaWEga2ljaGVydGUgdW5kIHd1cmRlIHJvdC4KKworIldlaWwgSGVyciBDYXB1bGV0IGRhbm4gYW0gRGllbnN0YWcgSnVsaWEgbWl0IFBhcmlzIHZlcmxvYnQgaGF0LCBrYW0gSnVsaWEgIHp1CittaXIgdW5kIHdvbGx0ZSwgZGFzcyBpY2ggaWhyIGhlbGZlLiIgQnJ1ZGVyICBMYXdyZW5jZSAgenVja3RlICBkaWUgIFNjaHVsdGVybi4KKyJJY2ggd3Vzc3RlIG5pY2h0cyBiZXNzZXJlcywgYWxzIGlociBlaW4gU2NobGFmbWl0dGVsIHp1IGdlYmVuLCAgZGFzcyAgc2llICBhbQorTWl0dHdvY2hhYmVuZCBuZWhtZW4gc29sbHRlLCBkYW1pdCBhbGxlICBnbGF1YmVuLCAgc2llCWhhYmUgIHNpY2ggIHZlcmdpZnRldC4KK0dsZWljaHplaXRpZyBoYWJlIGljaCBlaW5lbiBNaXRicnVkZXIgbWl0ICBlaW5lbSAgQnJpZWYgIHp1ICBSb21lbyAgZ2VzY2hpY2t0LgorTGVpZGVyIGhhdCBIZXJyIENhcHVsZXQgZGFubiBEaWVuc3RhZyBiZXNjaGxvc3NlbiwgZGFzcyBkaWUgSG9jaHplaXQgIHp3aXNjaGVuCitKdWxpYSB1bmQgUGFyaXMgYmVyZWl0cyAgYW0gIE1pdHR3b2NoICBzdGF0dGZpbmRlbiAgc29sbCwgIHdlc2hhbGIgIEp1bGlhICBkYXMKK1NjaGxhZm1pdHRlbCAgc2Nob24gIGFtICBEaWVuc3RhZyAgbmFobS4gIEVpZ2VudGxpY2ggIGhhZXR0ZSAgZGllICBGcmlzdCAgbm9jaAorYXVzZ2VyZWljaHQsIHVtIFJvbWVvIHp1IHdhcm5lbiwgZGFzcyBKdWxpYSBsZWJ0LCBhYmVyIG1laW4gQnJ1ZGVyIGhhdCBtaXIgZGVuCitCcmllZiB6dXJ1ZWNrZ2VnZWJlbi4iIExhd3JlbmNlIHNldWZ6dGUuICJIZXV0ZSBhYmVuZCBrYW0gaWNoIGhlciwgIGRhbWl0ICBpY2gKK0p1bGlhIGF1cyBkZXIgR3J1ZnQgaG9sZW4ga29ubnRlIHVuZCBmYW5kIFJvbWVvIHVuZCBQYXJpcyBiZXJlaXRzIHRvdCB2b3IuIgorCitFc2NhbHVzIG5pY2t0ZSBiZWRhZWNodGlnLiAiR3V0LiBPZGVyIHZpZWxtZWhyLCBuaWNodCBndXQuIFdlciBrYW5uIG1pciBzYWdlbiwKK3dpZSBQYXJpcyBoaWVyIGhpbiBrYW0/IgorCitQYXJpcyBQYWdlIHRyYXQgdm9yLiAiSWNoIGhhYmUgaWhuIGJlZ2xlaXRldCwgd2VpbCBlciBoaWVyIEJsdW1lbiAgYXVmICBKdWxpYXMKK0dyYWIgc3RyZXVlbiB3b2xsdGUuIgorCisiRGFiZWkgaGF0IFJvbWVvIGlobiB1bnRlcmJyb2NoZW4uIiwgIGZ1ZWd0ZSAgQmFsdGhhc2FyICBoaW56dS4gICJBbHMgIGljaCAgYW0KK0Rvbm5lcnN0YWcgaGllciB3YXIsIHVtIGZ1ZXIgUm9tZW8gTmV1aWdrZWl0ZW4genUgIGVyZmFocmVuLCAgaG9lcnRlICBpY2ggIHZvbgorSnVsaWFzIFRvZC4gSWNoIHJpdHQgYWxzbyBuYWNoIE1hbnR1YSB6dXJ1ZWNrIHVuZCBSb21lbywgbmVobWUgaWNoIGFuLAlrYXVmdGUKK3NpY2ggZGEgZWluIEdpZnQuIERhbm4ga2FtZW4gd2lyIGhpZXJoZXIsIHdvYmVpICBSb21lbwltaWNoICBnbGF1YmVuICBtYWNodGUsCitkYXNzIGVyIG51ciBKdWxpYSBkaWUgbGV0enRlIEVocmUgZXJ3ZWlzZW4gd29sbHRlLiBFciBzY2hpY2t0ZSBtaWNoIHdlZywgIGFiZXIKK2ljaCBzYWggbm9jaCwgZGFzcyBlciB1bmQgUGFyaXMgYW5laW5hbmRlcmdlcmlldGVuLiBFaW5lbiBCcmllZiAgaGF0ICBlciAgbm9jaAorZ2VzY2hyaWViZW4uIiBFciByZWljaHRlIEVzY2FsdXMgZGVuIFVtc2NobGFnLgorCisiQmlzdCBkZXIgYmVzc2VyZSBGZWNodGVyLiIgUGFyaXMga2xvcGZ0ZSBSb21lbyBhdWYgZGllIFNjaHVsdGVyLgorCisiV2lyIGhhYmVuIGVpbmUgRXdpZ2tlaXQgWmVpdCwgZGVpbmVuIFN0aWwgenUgdmVyYmVzc2Vybi4iLCBhbnR3b3J0ZXRlIFJvbWVvLgorCitFc2NhbHVzIGxhcyBkYXMgU2NocmVpYmVuIHVuZCBuaWNrdGUgd2llZGVyLiAiRGFzIGlzdCBlaW4gIEFic2NoaWVkc2JyaWVmLCAgaW4KK2RlbSBSb21lbyBzZWxic3Qgc2NocmVpYnQsIGRhc3MgZXIgbWl0IEp1bGlhIHZlcmhlaXJhdGV0IHdhci4iCisKK0hlcnIgTW9udGFndWUgc3RyZWNrdGUgaW1wdWxzaXYgc2VpbmUgSGFuZCBuYWNoIEhlcnJuIENhcHVsZXQgYXVzLiAgIlZlcmRhbW10ZQorU2NoZWlzc2UsIHdpZT8iCisKKyJKYSwgZGFzICBhdWNoLiIgIE1pc3N0cmF1aXNjaCAgYmxpY2t0ZSAgSGVyciAgQ2FwdWxldCAgYXVmICBkaWUgIEhhbmQgIHNlaW5lcworRXJ6ZmVpbmRlcywgIGVudGRlY2t0ZQlrZWluICBNZXNzZXIgIHVuZCAgc2NobG9zcyAgaWhuICBkYW5uICBpbiAgZGllCSBBcm1lLgorIlZlcnNvZWhuZW4gd2lyIHVucz8iCisKK05vY2ggZWhlIEhlcnIgTW9udGFndWUgYW50d29ydGVuIGtvbm50ZSwgaG9iIEVzY2FsdXMgZGllICBIYW5kLiAgIlVuZCAgb2IgIGlocgorZXVjaCB2ZXJzb2VobnQuIEFuc29uc3RlbiBzdGVja2UgaWNoIGV1Y2ggYmVpZGUgaW4gZWluZW4gU2FjayB1bmQgc2NobGFnZSAgbWl0CitlaW5lbSBLbnVlcHBlbCBkcmF1Zi4iCisKKyJUcmFlZmUgbmljaHQgZGllIFZlcmtlaHJ0ZW4uIiwgc3RpbW10ZSBpaG0gSGVyciBNb250YWd1ZSB6dS4KKworIkRhcyBoYWV0dGUgRXNjYWx1cyBsaWViZXIgZ2xlaWNoIHR1biBzb2xsZW4uIiwgbWF1bHRlIFVsby4KKworIkhhdXB0c2FjaGUsIGVzIGlzdCBlbmRsaWNoIFJ1aGUuIiBBenp1cm8gc2NobWllZ3RlIHNpY2ggYW4gIEp1bGlhICB1bmQgIGxpZXNzCitzaWNoIHZvbiBkaWVzZXIga3JhdWxlbi4KKworIkphd29obC4iIEp1bGlhIGxhZWNoZWx0ZS4gIkZyaWVkZW4gYXVmIEVyZGVuIHVuZCBkYXMgSGltbWVscmVpY2ggIGZ1ZXIgIFJvbWVvCit1bmQgbWljaC4iCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTI4IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhZWVhZQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTI4CkBAIC0wLDAgKzEsMTYgQEAKK0VQSUxPRworCitIaWVyIHZlcmxhc3NlbiB3aXIgbnVuIFZlcm9uYSwgZGFzIHNpY2ggd2llIGplZGUgYW5kZXJlIGFuc3RhZW5kaWdlIFN0YWR0ICBudW4KK251ciBub2NoIG1pdCBlaW5lbSBncm9zc2VuIEJ1Y2hzdGFiZW4gc2NocmVpYnQsIGJpcyB3aXIgIHVucyAgd2llZGVyc2VoZW4sICB1bQorZGllIEdlc2NoaWNodGUgbm9jaCBlaW5tYWwgenUgZXJsZWJlbi4KKworSWNoIGhvZmZlLCBTaWUsIGxpZWJlIExlc2VyaW4sIGxpZWJlciBMZXNlciwgbmVobWVuICBkZW4gIFR1cnRlbGtyYWVoZW4gIGlocmVuCitWb3J3aXR6IG5pY2h0IHVlYmVsLCBkZW5uIGRpZSBHb2V0dGVyIGRlciBNeXRoZW53ZWx0IGhhYmVuIGJlc2NobG9zc2VuLCAgdWViZXIKK2locmUgVmVyZmVobHVuZ2VuIGhpbndlZ3p1c2VoZW4uIEFsc28gd29sbGVuIHdpciBuaWNodCBrbGVpbmxpY2hlciBzZWluLgorCitFcyBibGVpYnQgbm9jaCBoaW56dXp1ZnVlZ2VuLCBkYXNzIHNpZSwgbnVuLCBkYSBzaWUgZ2VzdG9yYmVuIHNpbmQsIGJpcyB6dSBkZW0KK1RhZyBpbSBGZXJpZW5wYXJhZGllcyBkZXIgTXl0aGVuIGlocmUgIEZsaXR0ZXJ3b2NoZW4gIHZlcmxlYmVuLCAgYmlzICBzaWUgIGRhcworbmFlY2hzdGUgTWFsIGdlYnJhdWNodCB3ZXJkZW4uCisKK0F1ZiBXaWVkZXJzZWhlbi4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlMyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzOTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTMKQEAgLTAsMCArMSwxMDIzIEBACitERVIgRVJTVEUgQUtUCisJICBESUUgRVJTVEUgU1pFTkUKK0FuIGRpZXNlciBTdGVsbGUgc29sbHRlIGVpZ2VudGxpY2ggZWluIENob3IgYXVmdHJldGVuLCBkZW5uIHNvIGdlaG9lcnQgZXMgc2ljaAorZnVlciBlaW5lIFRyYWdvZWRpZSwgZG9jaCBpbSBadWdlIGRlciAgYWxsZ2VtZWluZW4gIFNwYXJtYXNzbmFobWVuICB3dXJkZSAgZGVyCitDaG9yIGdlc3RyaWNoZW4gdW5kIFVsbyB1bmQgIEF6enVybyAgYmVrYW1lbiAgenVzYWV0emxpY2ggIHp1ICBpaHJlciAgbm9ybWFsZW4KK0F1ZmdhYmUgZGllIFBmbGljaHQgYXVmZ2VidWVyZGV0LCBTaWUsIHZlcmVocnRlIExlc2VySW5uZW4sIHVlYmVyIGRpZSAgamV3ZWlscworYWt0dWVsbGUgTGFnZSBhdWYgZGVtIExhdWZlbmRlbiB6dSAgaGFsdGVuLCAgZnVlciAgZGVuCUZhbGwsICBkYXNzICBTaWUgIGVpbmUKK1p1c2FtbWVuZmFzc3VuZyBvZGVyIGVpbmVuIEtvbW1lbnRhciAgd3VlbnNjaGVuLiAgQXVjaAl3ZW5uICBTaWUgIGRpZXMgIG5pY2h0Cit3b2xsZW4sIHdlcmRlbiBkaWUgYmVpZGVuIFNpZSBpbmZvcm1pZXJlbiwgZGVubiBkYWZ1ZXIgd2VyZGVuIHNpZSBzY2hsaWVzc2xpY2gKK2JlemFobHQuCisKK1VsbyBob2x0ZSB0aWVmIEx1ZnQgdW5kIHNldHp0ZSBzaWNoIGluIFBvc2l0dXIuICJUd28gaG91c2Vob2xkcywgYm90aCBhbGlrZSBpbgorZGlnbml0eSwgaW4gZmFpciBWZXJvbmEsIHdoZXJlIHdlIGxheSBvdXIgc2NlbmUuLi4iCisKKyJBY2gsIHNlaSBydWhpZy4iIGtudXJydGUgQXp6dXJvLgorCisiV2FzIGRlbm4sIHdhcyBkZW5uPyBTb25zdCBzdGVoc3QgZHUgZG9jaCBhdWYgZGllIEtsYXNzaWtlcj8iICBVbG8gIG1vY2h0ZSAgZXMKK2dhciBuaWNodCwgbWl0dGVuIGluIGVpbmVtIFppdGF0IHVudGVyYnJvY2hlbiB6dSB3ZXJkZW4uCisKKyJEZW5rIGRvY2ggbWFsIGFuIGRpZSBMZXNlciEiCisKKyJVbmQgTGVzZXJpbm5lbi4iCisKKyJKYSwgZGllIGF1Y2guIFNpZSB3b2xsZW4gZG9jaCBuaWNodCBlaW4gZW5nbGlzY2hlcyBaaXRhdCBsZXNlbi4iCisKKyJXb2hlciB3ZWlzc3QgZHUgZGFzPyIKKworQml0dGUgc3RlbGxlbiBTaWUgc2ljaCB2b3IsIGxpZWJlIExlc2VyaW4sIGxpZWJlciBMZXNlciwgZGFzcyBTaWUgIGltICBUaGVhdGVyCitzaXR6ZW4gdW5kIHNpY2ggVWxvIG51biBhbiBTaWUgd2VuZGV0LiAiU2FnZW4gU2llIG1pciwgd2FzIFNpZSBob2VyZW4gIHdvbGxlbi4KK0phamEsIGF1Y2ggU2llLCBkYWhpbnRlbiBpbiBkZXIgdmllcnppZ3N0ZW4gUmVpaGUgUGFya2V0dCwgZ2FueiBsaW5rcy4iCisKK051biwgaWNoIGdlaGUgZGF2b24gYXVzLCBkYXNzIFNpZSwgYXVjaCBkZXIgSGVyciBnYW56IGxpbmtzIGluIGRlciB2aWVyemlnc3RlbgorUmVpaGUgUGFya2V0dCwgbWl0IFNoYWtlc3BlYXJlIHZlcnRyYXV0IHNpbmQuICBEYWhlciAgZXJzcGFyZSAgaWNoICBpaG5lbiAgZGFzCitaaXRhdCB1bmQgZmFzc2UgZGVuIEluaGFsdCBrdXJ6IHp1c2FtbWVuLiBHZXJhZGUgc3RvZXNzdCBtaWNoICBBenp1cm8gIGFuICB1bmQKK3ZlcndlaXN0IGF1ZiBkaWUgR2V3ZXJrc2NoYWZ0LiBTaWUgZW50c2NodWxkaWdlbiBtaWNoICBiaXR0ZSwgIGljaCAgdWViZXJsYXNzZQorZGllIFp1c2FtbWVuZmFzc3VuZyB1bnNlcmVuIGJlaWRlbiBUdXJ0ZWxrcmFlaGVuLgorCisiRHUgb2RlciBpY2g/IiBVbG8gaXN0IHdlaWJsaWNoZW4gR2VzY2hsZWNodHMgdW5kIGltbWVyICBiZXJlaXQsICBBenp1cm8gIGVpbmUKK3VuYW5nZW5laG1lIEF1ZmdhYmUgenUgdWViZXJsYXNzZW4uCisKKyJFZ2FsLiIKKworIkRhbm4gZHUuIiBNZWlzdGVucyBoYXQgVWxvIEVyZm9sZyBtaXQgaWhyZXIgVGFrdGlrLgorCisiT0suIFdpciBmaW5kZW4gdW5zIGluIFZlcm9uYSB3aWVkZXIsIFplaXQgIGlyZ2VuZHdhbm4uICBad2VpICBGYW1pbGllbiAgbGViZW4KK2hpZXIuIgorCisiRXMgc2luZCBiZXN0aW1tdCBub2NoIG1laHIuIgorCisiRGFzIGlzdCBkb2NoIG5pY2h0IHdpY2h0aWcsIG9kZXI/ICBFcyAgZ2VodCAgbnVyICB1bSAgZGllICBDYXB1bGV0cyAgdW5kICBkaWUKK01vbnRhZ3Vlcy4iCisKKyJXaXJrbGljaD8iCisKKyJOZWluLCBuaWNodCB3aXJrbGljaCwgYWJlciBkaWUgYmVpZGVuIHNpbmQgZGllICB3aWNodGlnc3RlbiwgIGRlbm4gIHNpZSAgc2luZAorc2NodWxkIGRhcmFuLCBkYXNzIHNpY2ggZGllIGdhbnplIFN0YWR0IGluICB6d2VpICBmZWluZGxpY2hlICBMYWdlciAgZ2VzcGFsdGVuCitoYXQuIgorCisiRGFzIGlzdCBkb2NoIFVuc2lubi4gU2NodWxkIGRhcmFuIGlzdCBuaWVtYW5kIGFuZGVyZXIgYWxzIGRlciBBdXRvci4iCisKKyJVbG8hIgorCisiU2Nob24gZ3V0LiIKKworQXp6dXJvIHN0cmljaCBtaXQgZGVtIFNjaG5hYmVsCXVlYmVyICBkYXMgIEdlZmllZGVyLiAgIkF1cyAgaXJnZW5kZWluZW0gIGxhbmcKK3Zlcmdlc3NlbmVtIEdydW5kZSBsaWVnZW4gZGllIGJlaWRlbiBGYW1pbGllbiBpbiAgRmVoZGUgIG1pdGVpbmFuZGVyICB1bmQgIGRpZQoranVuZ2VuIExldXRlIGVpbmVyIGplZGVuIEdlbmVyYXRpb24gZmluZGVuIGltbWVyIHdpZWRlciBkaWUgTW9lZ2xpY2hrZWl0LCAgZGllCitGZWhkZSBuaWNodCBpbiBWZXJnZXNzZW5oZWl0IGdlcmF0ZW4genUgbGFzc2VuLiAgSW0gIExhdWZlICBkZXIgIHZlcnNjaGllZGVuZW4KK0hvY2h6ZWl0ZW4sIEdlYnVydGVuIHVuZCBUYXVmZW4gaGFiZW4gc2ljaCBhbGxlIEJld29obmVyIFZlcm9uYXMgaW4gaXJnZW5kZWluZQorQmV6aWVodW5nIHp1ZWluYW5kZXIgZ2VzZXR6dCB1bmQgZGEgZGllIENhcHVsZXRzIHVuZCBkaWUgTW9udGFndWVzIGRpZQliZWlkZW4KK2FlbHRlc3RlbiBGYW1pbGllbiBzaW5kLCBoYWJlbiBhbGxlIEJ1ZXJnZXIgYXVjaCBlaW5lIEJlemllaHVuZyB6dSAgZGVyICBlaW5lbgorb2RlciBhbmRlcmVuIEZhbWlsaWUuIFNlaSBlcywgZGFzcyBPbmtlbCBBZGFsYmVydCBkZXIgVmF0ZXIgZGVyIEZyYXUgd2FyLCAgZGllCitkZXIganVuZ2UgTW9udGFndWUgdm9yIHp3YW56aWcgSmFocmVuIGlucyBVbmdsdWVjayBnZXN0dWVyenQgaGF0LCB3ZWlsIGVyICBpaHIKK2RpZSBSb3NlbiBuaWNodCBnZWdlYmVuIGhhdCwgZGllIGRvY2ggZGVyIEJydWRlciAgZGVzICBDb3VzaW5zCXNlaW5lcwliZXN0ZW4KK0ZyZXVuZGVzIGlobSBhdXNkcnVlY2tsaWNoIGZ1ZXIgZGllc2UgRnJhdSB1ZWJlcmdlYmVuIGhhdHRlLiIKKworIkR1IHNjaHdlaWZzdCBhYi4iLCB0YWRlbHRlIFVsby4KKworIkFiZXIgd2llIHNvbGwgaWNoIGVzIGRlbm4gc29uc3QgZXJrbGFlcmVuPyIKKworIklzdCBkb2NoIGVpbmZhY2g6IFZlcm9uYSBpc3QgZWluIERvcmYuIgorCisiT2guIgorCitUcml1bXBoaWVyZW5kIGJsaWNrdGUgVWxvIGF1ZiBpaHJlbiBHZWZhZWhydGVuLiAiVW5kIGVpbiBEb3JmIGlzdCBlaW4gRG9yZiBpc3QKK2VpbiBEb3JmIGlzdCBlaW4gRG9yZi4iCisKKyJBbHNvIGd1dC4gVmVyb25hIGlzdCBlaW4gRG9yZiwgZGFzIGluIHp3ZWkgVGVpbGUgIGdlc3BhbHRlbiAgaXN0LiAgSmVkZXIgIGhhdAorZWluZW4gR3JvbGwgZ2VnZW4gamVkZW4gYW5kZXJlbi4iCisKKyJVbmQgamVkRSBoYXQgZWluZW4gR3JvbGwgZ2VnZW4gamVkRSBhbmRlcmUuIiAgVWxvICBoYXR0ZSAgZGllICBiZW1lcmtlbnN3ZXJ0ZQorRmFlaGlna2VpdCwgR3Jvc3NidWNoc3RhYmVuIGF1c3p1c3ByZWNoZW4uCisKKyJKYS4iIEF6enVybyBzZXVmenRlLiAiV2llIGF1Y2ggaW1tZXIuIERpZSBiZWlkZW4gRmFtaWxpZW4gIGhhYmVuICBqZWRlICBlaW5lbgorU3Byb2Vzc2xpbmcuIFJvbWVvIE1vbnRhZ3VlIGlzdCBlaW4gaHVlYnNjaGVyIEJlbmdlbCB2b24gYWNodHplaG4gSmFocmVuLCAgZGVyCitlaW5lcyBUYWdlcyBkYXMgR2VsZCB1bmQgZGllIEZlaGRlIHZvbiBzZWluZW0gVmF0ZXIgIGVyYmVuICB3aXJkLiAgSnVsaWEsICBkaWUKK2VpbnppZ2UgVG9jaHRlciBkZXMgSGF1c2VzIENhcHVsZXQsIHdpcmQgZWlubWFsIGJpbGRodWVic2NoLCB3ZW5uIG1hbiBzaWUgbm9jaAorZWluIHBhYXIgSmFocmUgYXVmIGRpZSBXZWlkZSBzY2hpY2t0LiIKKworIldpZSBrYW5uc3QgZHUgZGFzIHNhZ2VuPyIKKworIkhlLCBzaWUgaXN0IGVyc3QgZHJlaXplaG4hIgorCisiQWx0IGdlbnVnLCB1bSBkZW1uYWVjaHN0IHZlcmhlaXJhdGV0IHp1IHdlcmRlbi4gVW5kICBiZXJlaXRzICBqZXR6dCAgc2Nob2VuZXIKK2FscyBIZWxlbmEuIgorCisiV2FzIGhhdCBIZWxlbmEgZGFtaXQgenUgdHVuPyIgQXp6dXJvIGR1Y2t0ZSBzaWNoIHNpY2hlcmhlaXRzaGFsYmVyLgorCisiSGVsZW5hIHZvbiBUcm9qYS4iCisKKyJBY2ggc28sIGRpZS4gSmFqYSwgbWVpbmV0d2VnZW4gaXN0IHNpZSBzY2hvZW5lciBhbHMgSGVsZW5hLiIKKworIkFuIHdlbiBkYWNodGVzdCBkdSBkZW5uPyIsIHZlcmxhbmd0ZSBVbG8genUgd2lzc2VuLgorCitfU2llXyBfaGF0XyBfc2Nob25fIF93aWVkZXJfIF9kaWVzZW5fIF9Ub25mYWxsXywgIGRhY2h0ZSAgQXp6dXJvLiAgIk5pZW1hbmRlbiwKK3NlbGJzdHZlcnN0YWVuZGxpY2guIEF1c3NlciBkaXIgc2VoZSBpY2ggZG9jaCAga2VpbmUgIEZyYXUgIGFuLCAgTGllYnN0ZSwgIGRhcword2Vpc3N0IGR1IGRvY2guIgorCisiSXN0IGF1Y2ggYmVzc2VyIHNvLiIKKworWndlaSBNYWVubmVyIGJldHJhdGVuIGRlbiBQbGF0eiB1bmQgQXp6dXJvIGRldXRldGUgbWl0IGRlbSAgU2NobmFiZWwgIGF1ZiAgZGllCitiZWlkZW4uCisKKyJEYS4gU2Ftc29uIHVuZCBHcmVnb3J5LiIKKworIldhcyBpc3QgbWl0IGlobmVuPyIKKworIkdsZWljaCB3ZXJkZW4gc2llIG1pdCBpaHJlbiBTYWViZWxuIHJhc3NlbG4gdW5kLi4uIgorCisiU2NodCEiCisKK1ZlcmxlZ2VuIGJsaWNrdGUgQXp6dXJvIGF1ZiBkaWUgRnJhdSwgZGllIHNpY2ggZ2VyYWRlIHVlYmVyIGRlbiBCcnVubmVuIGJldWd0ZQordW5kIFdhc3NlciBzY2hvZXBmdGUuICJVcHMuIgorCisiRHUgd2Vpc3N0LCBkYXNzIF9zaWVfIHVucyBuaWNodCBob2VyZW4gZHVlcmZlbi4iCisKKyJKYS4iLCBhbnR3b3J0ZXRlIEF6enVybyBrbGVpbmxhdXQuICJJY2ggd2Vpc3MuIgorCitIaWVyIHVudGVyYnJlY2hlIGljaCBub2NoIGVpbm1hbCAgZGVuICBMYXVmICBkZXIgIEhhbmRsdW5nLCAgdW0gIElobmVuLCAgbGllYmUKK0xlc2VyaW4sIGxpZWJlciBMZXNlciwgenUgZXJrbGFlcmVuLCB3YXMgVHVydGVsa3JhZWhlbiBudW4gZWlnZW50bGljaCBzaW5kLgorCitUdXJ0ZWxrcmFlaGVuLCB3aWUgZGVyIE5hbWUgdmVybXV0ZW4gbGFlc3N0LCB0cmV0ZW4gaW1tZXIgcGFhcndlaXNlICBhdWYuICBFaW4KK01hZW5uY2hlbiwgaW4gdW5zZXJlbSBGYWxsICBBenp1cm8sICB1bmQgIGVpbiAgV2VpYmNoZW4sICBVbG8sCXdpZSAgU2llICBzaWNoCitiZXN0aW1tdCBzY2hvbiBnZWRhY2h0IGhhYmVuLiBXYXMgU2llIG5pY2h0ICB3aXNzZW4gIGtvZW5uZW4sICBpc3QsICBkYXNzICBkaWUKK1R1cnRlbGtyYWVoZW4gZWluIEdlc2NoZW5rIGRlciBHb2V0dGVyIHNpbmQsIHVuZCAgc29taXQgIGtlaW5lc3dlZ3MgIGRhcywgIHdhcworc2ljaCBlaW4gbm9ybWFsZXIgTWVuc2NoIHd1ZW5zY2hlbiB3dWVyZGUuIFNpZSBnZWhvZXJlbiB6dSAgamVkZXIgIEdlc2NoaWNodGUsCitpbiBkZXIgTGllYmVuZGUgYXVmdGF1Y2hlbi4gRnJhZ2VuIFNpZSBtaWNoIG5pY2h0LCB3YXJ1bSwgZGVubiBkYXMgIGhhYmVuICBkaWUKK0dvZXR0ZXIgdmVyZ2Vzc2VuIHp1IGVyd2FlaG5lbi4gRGllIEF1ZmdhYmUgIGRlciAgVHVydGVsa3JhZWhlbiAgaXN0ICBlcywgIGRpZQorR2VzY2hpY2h0ZSB6dSB2ZXJmb2xnZW4gdW5kIGRlbiBHb2V0dGVybiBkZXIgU2FnZW53ZWx0IEJlcmljaHQJenUgIGVyc3RhdHRlbi4KK0F1Y2ggZGllcyBpc3QgZWluZSBGdW5rdGlvbiwgZGllIHZvbiBkZW4gR29ldHRlcm4gdW5lcmtsYWVydCBibGllYiwgIGRvY2ggIGljaAord2FnZSBkaWUgVmVybXV0dW5nLCBkYXNzIEdvZXR0ZXIgendhciBhbGx3aXNzZW5kIHNpbmQsIGFiZXIgZGVubm9jaCAgbnVyICB6d2VpCitBdWdlbiBoYWJlbiwgZGllIG5vY2ggZGF6dSBuaWNodCB1bmFiaGFlbmdpZyB2b25laW5hbmRlciBmdW5rdGlvbmllcmVuLiAgT2RlciwKK3VtIGVzIGFuZGVycyBhdXN6dWRydWVja2VuLCBkaWUgR29ldHRlciBzaW5kIHdpZSBLYXVmaGF1c2RldGVrdGl2ZSwgaGFiZW4gaWhyZQorQXVnZW4gaW1tZXIgbnVyIGF1ZiBlaW5lbSBCZW5nZWwgaW4gemVyc2NobGlzc2VuZW4gSmVhbnMgdW5kIGhhYmVuICBkYWhlciAgZGllCitUdXJ0ZWxrcmFlaGVuIGFscyBlaW5lIEFydCBWaWRlb3VlYmVyd2FjaHVuZyBpbnN0YWxsaWVydC4gR2VzY2hpY2h0ZW4gc2luZCB3aWUKK2RhcyBFbmRsb3NiYW5kIGVpbmVyIHRlbGVmb25pc2NoZW4gV2FydGVzY2hsZWlmZS4gS2VubmVuIFNpZSBkYXM/ICBTaWUJd2FydGVuCitkYXJhdWYsICBlbmRsaWNoICBlaW5lCVZlcmJpbmR1bmcgIHp1CWJla29tbWVuICB1bmQgIGhvZXJlbiAgc2ljaCAgIHNjaGxlY2h0CitpbnRlcnByZXRpZXJ0ZSBNdXNpayBpbiBub2NoIHNjaGxlY2h0ZXJlciBRdWFsaXRhZXQgYW4sIGRpZSBpbW1lciAgd2llZGVyICB2b24KK2VpbmVyIG1laHIgb2RlciBtaW5kZXIgZnJldW5kbGljaGVuICBTdGltbWUgIG1pdCAgX0JpdHRlXyAgX3dhcnRlbl8sICBfcGxlYXNlXworX2hvbGRfCV90aGVfICBfbGluZV8gIHVudGVyYnJvY2hlbiAgd2lyZC4gIERpZSAgVW50ZXJicmVjaHVuZwlpc3QgIG5vY2ggIGRhcworYW5nZW5laG1zdGUgYW0gZ2FuemVuIEJhbmQuIFdhbm4gaW1tZXIgZGllc2UgUGF1c2Uga29tbXQsIGRpZSAgYW5kZXV0ZXQsICBkYXNzCitkYXMgQmFuZCBudW4gZWluIEVuZGUgZXJyZWljaHQgaGF0LCBzdGVpZ3QgSWhyZSAgU3Bhbm51bmcgIHVuZAlTaWUgIGVyd2FydGVuLAorZ2xlaWNoIGVpbmUgdmllbGxlaWNodCBuaWNodCBnYW56ICBzbyAgZnJldW5kbGljaGUsICBkYWZ1ZXIgIGFiZXIgIG1lbnNjaGxpY2hlCitTdGltbWUgenUgaG9lcmVuLCBkb2NoIGluIFdhaHJoZWl0IHNwdWx0IHNpY2ggZGFzIEJhbmQJbnVyICB6dXJ1ZWNrLCAgdW0gIGRlbQorQW5ydWZlciBkaWUgTGFuZ2V3ZWlsZSB6dSB2ZXJrdWVyemVuLiBGYWxscyBTaWUgc2ljaCBmcmFnZW4sICB3YXJ1bSAgZGFzICBCYW5kCitkYW5uIGVuZGxvcyBpc3QsIHdlcmRlbiBTaWUgd2VpdGVyIHJhdGxvcyBibGVpYmVuIG11ZXNzZW4sIGRlbm4gZGFyYXVmCXdpc3Nlbgorc2VsYnN0IGRpZSBHb2V0dGVyIGtlaW5lIEFudHdvcnQuIEJla2FubnRlcm1hc3NlbiBoYXR0ZW4gZGllICBHb2V0dGVyICBvaG5laGluCituaWNodCB2aWVsIGRhbWl0IHp1IHR1biwgZGllIFdhcnRlc2NobGVpZmUgenUgIGVyZmluZGVuLCAgZGllc2VzICB6d2VpZmVsaGFmdGUKK1ZlcmRpZW5zdCBpc3QgZGFzIGRlciBIb2VsbGUuIERhbWl0IHNvbGwgSWhuZW4gYXVjaCBudXIgbmFoZSBnZWJyYWNodCAgd2VyZGVuLAorZGFzcyBlaW5lIEdlc2NoaWNodGUgZW5kbG9zIHdlaXRlcmdlaHQsIGF1Y2gsIHdlbm4gc2llCWlociAgc2NoZWluYmFyZXMgIEVuZGUKK2VycmVpY2h0IGhhdC4gU29iYWxkIGRlciBlaW5lICBNZW5zY2ggIGRpZSAgV2FydGVzY2hsZWlmZSAgdmVybGFlc3N0ICB1bmQgIGRlcgorbmFlY2hzdGUgdm9tIEJlc2V0enR6ZWljaGVuIGRlciAgTGFuZ2V3ZWlsZSAgenVyICBLdXJ6d2VpbCAgZGVyICBXYXJ0ZXNjaGxlaWZlCit2b3JydWVja3QsIGJlZ2lubnQgZGllIEdlc2NoaWNodGUgdm9uIHZvcm5lLgorCitTbyBlcmtsYWVydCBzaWNoLCBkYXNzIFVsbyB1bmQgQXp6dXJvIHJlaWNobGljaCBaZWl0ICBoYXR0ZW4sICBkaWUgIEdlc2NoaWNodGUKK2tlbm5lbnp1bGVybmVuLiBXYWVocmVuZCBzaWUgZnVlciBkaWUgQWt0ZXVyZSB1bnNlcmVzICBEcmFtYXMgIGplZGVzICBNYWwgIG5ldQoraXN0LCBrZW5uZW4gZGllIFR1cnRlbGtyYWVoZW4gc2llIGF1c3dlbmRpZy4gV2FydW0gc2llIGRhbm4gdHJvdHpkZW0gd2VpdGVyaGluCitkZW4gRm9ydGdhbmcgYmVvYmFjaHRlbiBtdWVzc2VuLCBibGVpYnQgdW5rbGFyLCBvYndvaGwgZXMgdmVybXV0bGljaCAgbWl0ICBkZXIKK0dld2Vya3NjaGFmdCB6dXNhbW1lbmhhZW5ndC4KKworVWxvIHVuZCBBenp1cm8gc2l0emVuIGF1ZiBkZW0gQnJ1bm5lbiB1bmQgYmV0cmFjaHRlbiBkaWUgVHJhZ29lZGllLCAgZGllICBzaWNoCit2b3IgIGlocmVuICBBdWdlbiAgYWJzcHVsdCwgIHdpZSAgZWluICBhbHRlcyAgRWhlcGFhciAgZGllICBmdWVuZnVuZHp3YW56aWdzdGUKK1dpZWRlcmhvbHVuZyB2b24gVm9tIFdpbmRlIFZlcndlaHQgYW5zY2hhdXQ6IEplZGVyICh1bmQgamVkZSkgd2Vpc3MsIHdhbm4gIGRlcgorKG9kZXIgZGllKSBhbmRlcmUgVGFzY2hlbnR1ZWNoZXIgYmVub2V0aWd0IHVuZCB3YW5uIGVyIChvZGVyICBzaWUpICBkZW0gIChvZGVyCitkZXIpIGFuZGVyZW4gZGllIEF1Z2VuIHp1aGFsdGVuIG11c3MuIExlaWRlciBoYWJlbiBkaWUgVHVydGVsa3JhZWhlbiBhdWNoIGVpbmUKK2FuZGVyZSBFaWdlbnNjaGFmdCBkZXMgYWx0ZW4gRWhlcGFhcmVzOiBXYW5uIGltbWVyICBlaW5lICBiZXNvbmRlcnMgIGdlbHVuZ2VuZQorU3plbmUga29tbXQsIHdlaXNlbiBzaWUgZWluYW5kZXIgaW0gVm9yYXVzIGRhcmF1ZiBoaW4gdW5kIHZlcmRlcmJlbiBzaWNoIGRhbWl0CitqZWRlIFNwYW5udW5nLgorCitCaXR0ZSB2ZXJ6ZWloZW4gU2llIGRpZSB1bXN0YWVuZGxpY2hlIEtsYW1tZXJzZXR6dW5nLCBhYmVyIFVsbyBiZXN0ZWh0IGRhcmF1Zi4KK1NpZSwgbGllYmUgTGVzZXJpbiwgbGllYmVyIExlc2VyLCBrb2VubmVuIHNpY2ggbWl0IFNpY2hlcmhlaXQgdm9yc3RlbGxlbiwgIHdhcworZ2VzY2hhZWhlLCB3ZW5uIGVpbiBLaW5vYmVzdWNoZXIgU2NhcmxldHQgdmVycmlldGUsIHdpZSB3aWRlcmxpY2ggIFJoZXR0ICBzaWNoCitpaHIgZ2VnZW51ZWJlciB2ZXJoYWx0ZW4gd2lyZC4gU2llIGtvZW5uZW4gZXMsIG5pY2h0IHdhaHI/IFVuZAlkYWhlciAgaXN0ICBlcworVHVydGVsa3JhZWhlbiBzdHJpa3QgdmVyYm90ZW4sIHNpY2ggIHVlYmVyICBHZXNjaGVobmlzc2UsICBkaWUJZGVyICB3ZXJkZW5kZW4KK011dHRlciBadWt1bmZ0IG5vY2ggbmljaHQgIGVpbm1hbCAgV2VoZW4gIHZlcnVyc2FjaGVuLAl6dSAgdW50ZXJoYWx0ZW4uICBHYW56Cit1bmRlbmtiYXIsIHdlbm4gc2llIGdhciBkYXMgR2VzY2hsZWNodAlkZXMgIEtpbmRlcyAgdmVycmlldGVuLCAgZGFzcyAgWnVrdW5mdAorZ2ViYWVyZW4gd2lyZCEKKworS2VocmVuIHdpciBhbHNvIHp1cnVlY2sgenUgdW5zZXJlciBHZXNjaGljaHRlIHVuZCBob2ZmZW4sIGRhc3MgVWxvcyAgRXJtYWhudW5nCitBenp1cm8gdm9uIHdlaXRlcmVuIFZlcmZlaGx1bmdlbiBhYmhhbHRlbiB3aXJkLgorCitXaXIgZXJpbm5lcm4gdW5zLCBkYXNzIGdlcmFkZSBTYW1zb24gdW5kIEdyZWdvcnkgYXVmIGRlbiBQbGF0eglrYW1lbi4JU2Ftc29uCitwZmlmZiBlaW5lciBqdW5nZW4gRnJhdSBoaW50ZXJoZXIgdW5kICBoYW5kZWx0ZSAgc2ljaCAgZWluZW4gIFJpcHBlbnN0b3NzICB2b24KK3NlaW5lbSBGcmV1bmQgZWluLgorCisiTGFzcyBkaWUgTWFlZGVscyBpbiBSdWhlLCBTYW0uIiwgdmVybGFuZ3RlIEdyZWdvcnkuCisKKyJBY2gsIGtvbW0gc2Nob24sIHNpZSBpc3Qgd2lya2xpY2ggbmllZGxpY2guIgorCitHcmVnb3J5IHNjaGF1dGUgdWViZXIgZGllIFNjaHVsdGVyIHVuZCBrb25udGUgZGVtIG51ciB6dXN0aW1tZW4uICJIZXksICB3b25hY2gKK21pciBqZXR6dCB3aXJrbGljaCBkZXIgU2lubiBzdHVlbmRlLCBkYXMgd2FlcmUgZGVyIGVpbmUgb2RlciBhbmRlcmUgQ2FwdWxldC4iCisKK1NhbXNvbiBncmluc3RlLiAiQW0gU3BpZXNzPyIKKworIldhZXJlIGRvY2ggd2FzLCBuaWNodD8iCisKKyJVbmQgZGFubiBoYWV1dGVuIHdpciBpaHJlIEZyYXVlbj8iCisKKyJGYWVsbHQgZGlyIG5pY2h0cyBiZXNzZXJlcyBlaW4/IiwgZnJhZ3RlIEdyZWdvcnkuCisKKyJJY2ggd3Vlc3N0ZSBuaWNodHMgYmVzc2VyZXMsIGFscyBlaW5lIEZyYXUgbWl0IG1laW5lbSBTcGllc3MgenUgaGFldXRlbi4iCisKKyJPaCwgX2RpZV8gSGF1dCBtZWluc3QgZHUuIER1IHNvbGx0ZXN0IE1hZWRjaGVuIHNhZ2VuLiIKKworVWxvIHNjaHVldHRlbHRlIHNpY2ggdW5kIGxpZXNzIGV0d2FzIGZhbGxlbiwgd2FzIGhpZXIgYXVmIG1pdCAgUnVlY2tzaWNodCAgYXVmCitqdWdlbmRsaWNoZSBMZXNlciAoZW50c2NodWxkaWdlICBVbG8pICB1bmQgIExlc2VyaW5uZW4JbmljaHQgIG5hZWhlciAgYmVuYW5udAord2VyZGVuIHNvbGwuCisKKyJEaWUgS3JhZWhlIGhhdCBtaXIgYXVmIGRlbiBLb3BmIGdlLi4uIiBTYW1zb24gaG9sdGUgZWluIG5pY2h0IGFsbHp1ICBzYXViZXJlcworVGFzY2hlbnR1Y2ggaGVyYXVzIHVuZCB3aXNjaHRlIHNpY2ggdWViZXIgZGllIGJlZ2lubmVuZGUgR2xhdHplLgorCisiRGFzIHdpcmQgZGljaCBsZWhyZW4sIGR1IE1pc3RrZXJsISIsIGtyYWVjaHp0ZSBVbG8uCisKKyJVbmQgc2llICBsYWNodCAgYXVjaCAgbm9jaC4iICBTYW1zb24gIGZsdWNodGUuICBFciAgaGF0dGUgIFVsb3MgIFdvcnRlICBuaWNodAordmVyc3RhbmRlbiwgZGEgZGllc2Uga2x1ZyBnZW51ZyBnZXdlc2VuIHdhciwgS3JhZWhpc2NoIHp1IHNwcmVjaGVuLCAgZG9jaCAgZGVyCitUb25mYWxsIHdhciB1bnZlcmtlbm5iYXIuCisKKyJEdSBzcGlubnN0LCBtZWluIEZyZXVuZC4gU2VpdCB3YW5uIGxhY2hlbiBLcmFlaGVuPyBTdGVjayBkZW4gU2FlYmVsIHdlZy4iCisKKyJJY2ggYnJpbmcgZGFzIFZpZWggdW0hIiBTYW1zb24gd2FyIGtlaW5lc3dlZ3MgZGVyIE1hbm4sIGRlciAgc2VpbmUgIEVtb3Rpb25lbgora29udHJvbGxpZXJlbiBrb25udGUgb2RlciB3b2xsdGUuCisKKyJEYW5uIGxhc3MgZGFzIERpbmcgaGFsdCBkcmF1c3NlbiwgYWJlciBkYSBkcnVlYmVuIGZpbmRlc3QgZHUgIGVpbiAgZ3JvZXNzZXJlcworWmllbC4iIFNhbXNvbiBncmluc3RlIGJyZWl0IHVuZCBlbnRibG9lc3N0ZSBlaW4gR2ViaXNzLCBkYXMgZWluZW4gWmFobmFyenQgZWluCitKYWhyIGxhbmcgZXJuYWVocnQgaGFldHRlLiAiQ2FwdWxldHMhIExhc3N0IHNpZSBtaXIhIgorCisiV28gIG1hZyAgZXIgIGRhcyAgbnVyICBhdWZnZXNjaG5hcHB0ICBoYWJlbj8gICBJbSAgIE9yaWdpbmFsICAgc3RlaHQgICBuaWNodHMKK2RlcmdsZWljaGVuLiIsIGJlbWVya3RlIEF6enVybyB2ZXJkcmllc3NsaWNoLgorCisiSGFsdCEgV2VubiBkdSBzbyBlaW5mYWNoIGxvc3Jlbm5zdCwgaXN0IGRhcyBuaWNodCBndXQuIFZlcmdpc3MgbmllLCBkYXNzICB3aXIKK2RhcyBHZXNldHogYXVmIHVuc2VyZXIgU2VpdGUgaGFiZW4gd29sbGVuLiIgR3JlZ29yeSBoaWVsdCBzZWluZW4gS2FtZXJhZGVuICBhbQorQWVybWVsIHp1cnVlY2suCisKKyJXZW4/IgorCisiRGFzIEdlc2V0ei4gV2VubiBkdSBsb3NzdHVlcm1zdCB1bmQgIHNpZSAgZWluZmFjaCAgYW5ncmVpZnN0LCAgc2luZCAgd2lyICBkaWUKK0JvZXNlbiB1bmQgYmVrb21tZW4gU2Nod2llcmlna2VpdGVuLiBBbHNvIGxhc3MgbWljaCBtYWNoZW4sIGljaCBzb3JnZSAgZGFmdWVyLAorZGFzcyB3aXIgaW4gTm90d2VociBoYW5kZWxuLiIKKworU2Ftc29uCWJlZ3JpZmYgIG5pY2h0LCAgd2FzICBHcmVnb3J5ICBtaXQgIEdlc2V0emVuICB3b2xsdGUsICBhYmVyICBkYXMgIFdvcnQKK1NjaHdpZXJpZ2tlaXRlbiAgd2Vja3RlICBpbiAgaWhtICBqZW5lCVZvcnNpY2h0LCAgZGllCWFsbGVuICB1bnRlcmdlb3JkbmV0ZW4KK1NvbGRhdGVuIGRpZXNlciB1bmQgYWxsZXIgYW5kZXJlbiAgV2VsdGVuICBnZW1laW4gIGlzdC4gIFNjaHdpZXJpZ2tlaXRlbiwgIGRhcworaGF0dGUgZXR3YXMgbWl0IHd1ZXRlbmRlbiBWb3JnZXNldHp0ZW4sIExhdHJpbmVucHV0emVuIHVuZCBXb2NoZW5lbmRkaWVuc3QgIHp1Cit0dW4sIGRhdm9uIGhpZWx0IG1hbiBzaWNoIGJlc3NlciBmZXJuLgorCisiWmVpZyBpaG0gZGVuIFN0aW5rZWZpbmdlci4iLCBzY2hsdWcgU2Ftc29uIHZvci4KKworIkFiZXIgbmljaHQgZG9jaCwgZGFubiBoYWV0dGVuICB3aXIgIGRhcyAgR2VzZXR6ICBuaWNodCAgYXVmICB1bnNlcmVyICBTZWl0ZS4iCitHcmVnb3J5IHNjaHVldHRlbHRlICB2ZWhlbWVudCAgZGVuICBLb3BmICB1bmQgIHN0cmVja3RlICBuaWNodHNkZXN0b3Ryb3R6ICBkZW4KK01pdHRlbGZpbmdlciBpbiB1bm1pc3N2ZXJzdGFlbmRsaWNoZXIgR2VzdGUgdm9yLgorCisiSGV5LCBhYmVyIGR1IHplaWdzdCBpaG0gZGVuIEZpbmdlcj8gSWNoIGRlbmtlLCBkYXMgZHVlcmZlbiB3aXIgbmljaHQ/IiBTYW1zb24KK3ZlcnN0YW5kIHNlaW5lbiBLYW1lcmFkZW4gbmljaHQuCisKKyJXaWU/IFplaWdzdCBkdSBkZW4gU3RpbmtlZmluZ2VyPyIsIHZlcmxhbmd0ZSBhdWNoIEFicmFoYW0genUgd2lzc2VuLgorCisiSmF3b2xsLCBpY2ggemVpZ2UgZGVuIFN0aW5rZWZpbmdlci4iLCBncmluc3RlICBHcmVnb3J5ICB1bmQgIGJldHJhY2h0ZXRlICBkaWUKK0hhbmQgU2Ftc29ucywgZGVyIGlobSBhbGxlcyBuYWNoYWhtdGUuCisKKyJaZWlnc3QgZHUgaWhuIGFtIEVuZGUgX21pcl8/IiBBYnJhaGFtIGZyZXV0ZSBzaWNoIHNpY2h0bGljaCBhdWYgZGllIEFudHdvcnQuCisKK1NhbXNvbiBmbHVlc3RlcnRlOiAiSXN0IGRhcyBHZXNldHogYXVmIHVuc2VyZXIgU2VpdGUsIHdlbm4gaWNoIGphIHNhZ2U/IgorCisiTmVpbiwgYmxvc3MgbmljaHQuIiBHcmVnb3J5IHN0dXBzdGUgc2VpbmVuIEZyZXVuZCBpbiBkaWUgIFNlaXRlLiAgIkxhc3MgIG1pY2gKK21hY2hlbi4iCisKKyJBbHNvLCBpY2ggemVpZ2UgZGVuIFN0aW5rZWZpbmdlciwgYWJlciB3aWUga29tbXN0IGR1IG51ciBkYXJhdWYsIGRhc3MgaWNoIGlobgorZGlyIHplaWdlbiBrb2VubnRlPyBNZWluIGFybWVyIEZpbmdlciEgRGFzIHRhZXRlIGljaCBpaG0gbmllbWFscyBhbiEiCisKKyJXaWUgd2FyIGRhcz8gU3VjaHQgaWhyIFN0cmVpdD8iCisKKyJXZWxjaCBlaW5lIFVudGVyc3RlbGx1bmchIgorCisiU2NoYWRlLiIgQWJyYWhhbSBncmluc3RlLiAiSWNoIHNlaGUgZWluZSBndXRlICBHZWxlZ2VuaGVpdCwgIGV1Y2ggIGJlaWRlbiAgenUKK3plaWdlbiwgZGFzcyBDYXB1bGV0IGFsbGUgTWFsZSBiZXNzZXIgaXN0IGFscyBNb250YWd1ZS4iCisKKyJQYWguIiBHcmVnb3J5IHNjaG5hdWJ0ZS4KKworIkJsb2Vkc2lubiwgIGRpZSAgc3Bpbm5lbiwgIGRpZSAgQ2FwdWxldHMuIiwgIGZ1ZWd0ZSAgIFNhbXNvbiAgIGF1cyAgIHRpZWZzdGVyCitVZWJlcnpldWd1bmcgaGluenUuCisKKyJTY2hvbiB3aWVkZXIhIiwgZW1wb2VydGUgc2ljaCBBenp1cm8uCisKKyJPaCBkb2NoLCBkYXMgaXN0IGVzLiIKKworIklzdCBlcyBuaWNodC4iCisKKyJEb2NoLiIKKworIk5laW4uIgorCisuLi4KKworTGllYmUgTGVzZXJpbiwgbGllYmVyIExlc2VyLCBzZXR6ZW4gU2llIGluIEdlZGFua2VuICBkaWVzZXMgIEF1ZnRydW1wZmVuICBub2NoCitlaW4gd2VuaWcgZm9ydC4gSW4gQW5iZXRyYWNodCAgZGVyICBUYXRzYWNoZSwgIGRhc3MgIHdpciAgZXMgIG1pdCAgZXJ3YWNoc2VuZW4KK01hZW5uZXJuIHp1IHR1biBoYWJlbiwgd29sbGVuIHdpciB1bnMgbmljaHQgZXR3YSBLaW5kZXIgdm9yc3RlbGxlbiwgIGRpZSAgc2ljaAordWViZXIgZGllIEdyb2Vzc2UgZGVyICBBdXRvcyAgaWhyZXIgIFZhZXRlciAgc3RyZWl0ZW4sCXNvbmRlcm4gIHp1bSAgQmVpc3BpZWwKK0Z1c3NiYWxsZmFucywgZGllIHNpY2ggbmljaHQgZGFydWViZXIgZWluaWcgd2VyZGVuIGtvZW5uZW4sIHdlbGNoZXIgVmVyZWluICBlcworZWhlciB2ZXJkaWVudCBoYXQsIGRlbiBQb2thbCB6dSBnZXdpbm5lbi4gIFdpZQlqZWRlciAgZ2VzdGFuZGVuZSAgRnVzc2JhbGxmYW4KK0lobmVuIGJlc3RhZXRpZ2VuIGthbm4sIGhhZW5ndCBkZXIgR2V3aW5uIGRlcyBQb2thbHMgamEgaW4gIGtlaW5lciAgV2Vpc2UgIHZvbgorZGVuIEZhZWhpZ2tlaXRlbiBkZXIgU3BpZWxlciBvZGVyIGRlcyBUcmFpbmVycyBhYiwgc29uZGVybiBhdXNzY2hsaWVzc2xpY2ggdm9uCitkZXIgSW50ZW5zaXRhZXQgZGVzIEdsYXViZW5zIGRlciBiZWdlaXN0ZXJ0ZW4gWnVzY2hhdWVyLiBGdXNzYmFsbCwgIHNvCXdpc3Nlbgord2lyLCB3YXIgenUgamVuZXIgWmVpdCBub2NoIG5pY2h0IGVyZnVuZGVuLCBkb2NoIHdvICBpbW1lciAgendlaSAgTWFubnNjaGFmdGVuCitzaW5kLCBmaW5kZW4gc2ljaCBhdWNoIEZhbnMuIERlbiBSZXN0IHp1ICBlcmtsYWVyZW4gIHVlYmVybGFzc2UgIGljaCAgd2Vpc2VyZW4KK01lbnNjaGVuLgorCitFaW5lcyB3b2xsZW4gd2lyIGFiZXIgbmljaHQgdmVyZ2Vzc2VuOiBXbyBpbW1lciBzaWNoIHp3ZWkgVHJ1cHBzIHZvbiBIb29saWdhbnMKK2dlZ2VudWViZXJzdGVoZW4sIGlzdCBkZXIgRmFuYmV0cmV1ZXIgbmljaHQgIHdlaXQgIHVuZAl2ZXJzdWNodCwgIEZyaWVkZW4gIHp1CitzdGlmdGVuLiBHZXJhZGUgIGVyaW5uZXJ0ZSAgU2Ftc29uICBHcmVnb3J5ICBhbiAgc2VpbmVuICBMaWVibGluZ3N6aWVnZWxzdGVpbi4KK1ZlcnplaWh1bmcsIHNlaW5lbiBiZXN0ZW4gU2FlYmVsc3RyZWljaCwgYWxzIEJlbmV2b2xpbwlkYXMgIG5haGVuZGUgIFVuZ2x1ZWNrCitzYWguCisKKyJIb2VydCBpaHIgYXVmISIgQmVuZXZvbGlvIHpvZyBzZWluZW4gZWlnZW5lbiBTYWViZWwgdW5kICBzY2hsYWVndCAgZGFtaXQgIGRpZQorZGVyIEtvbWJhdHRhbnRlbiBoZXJ1bnRlci4gIklociBoYWJ0IHNpZSB3b2hsIG5pY2h0IG1laHIgYWxsZS4gRnJpZWRlbiAgamV0enQsCitzb25zdCBob2wgaWNoIGRpZSBQb2xpemVpLiIKKworIkhvbCBkaWUgQnVsbGVuLCAgbWVpbiAgSnVuZ2UsICBhYmVyICBzdGVjayAgZGVuICBaYWhuc3RvY2hlciAgd2VnLiIsICBrbnVycnRlCitHcmVnb3J5LgorCitCZW5ldm9saW8gcnVlbXBmdGUgZGllIE5hc2UgdWViZXIgZGllIHVuZ2VwZmxlZ3RlIEF1c2RydWNrc3dlaXNlLiAgIkxlcm4gIGVyc3QKK21hbCB2ZXJudWVuZnRpZyB6dSByZWRlbiwgZGFubiBob2VyZSBpY2ggZGlyIHZpZWxsZWljaHQgIGF1Y2ggIHp1LiAgVW5kICBqZXR6dAorZnJpZWRsaWNoIGhpZXIhIgorCitVbG8gc3RyZWNrdGUgZGVuIEtvcGYgdm9yLiAiSXN0IGVyIG5pY2h0IGVpbiBTY2hhZXR6Y2hlbiwgdW5zZXIgQmVuZXZvbGlvPyIKKworIkVpbiB3YWhyZXIgSGVsZC4iLCBtZWludGUgIEF6enVybyAgaG9laG5pc2NoLiAgIk5pY2h0LCAgZGFzcyAgZXIgIHZpZWwgIGRhbWl0CitlcnJlaWNodGUuIgorCisiV2llc28/IgorCisiR3VjayBtYWwgZGEgcnVlYmVyLiBUeWJhbHQga29tbXQuIgorCisiRGVyIFJhdWZib2xkIGRlciBDYXB1bGV0cz8gTmEsIGRhbm4gaGFiZW4gd2lyIGphIGdsZWljaCBkZW4gIHNjaG9lbnN0ZW4gIFRhbnoKK2hpZXIuIgorCitVbG8gcmVja3RlIGRlbiBLb3BmLgorCitUeWJhbHQgZnJhZ3RlIG5pY2h0IGxhbmdlLCBzb25kZXJuIHpvZyBzZWluZW4gU2FlYmVsIGJsYW5rLiAiSmEsIHdhcyBoYWJlbiB3aXIKK2Rlbm4gaGllcj8gQmVuZXZvbGlvIE1vbnRhZ3VlLCBzY2hhdSBhbi4gVW5kIGVyIGhhdCAgYXVjaCAgbm9jaCAgendlaSAgRnJldW5kZQorZGFiZWkuIERhcyBtYWNodCBkcmVpIGdlZ2VuIHp3ZWksIHdlbm4gaWNoIG1pY2ggbmljaHQgIHRhZXVzY2hlLiAgU2NoYWVtdCAgaWhyCitldWNoIG5pY2h0LCBvZGVyIGhhYnQgaWhyIGV0d2EgQW5nc3Q/IgorCisiU2NoYXUgYW4sIGVyIGthbm4gcmVjaG5lbi4iIFVsbyBsYWNodGUga3JhZWNoemVuZC4KKworIlZvbiBNdWZmZW5zYXVzZW4ga2FubiBrZWluZSBSZWRlIHNlaW4uIiwgbWVpbnRlIFNhbXNvbi4KKworQmVuZXZvbGlvIHNjaGVua3RlIFR5YmFsdCBlaW5lbiB2ZXJhZWNodGxpY2hlbiBCbGljay4gIk5laW4sIGtlaW5lIEFuZ3N0LCBtZWluCitMaWViZXIsIG51ciBkZXIgV3Vuc2NoLCBGcmllZGVuIHp1IHN0aWZ0ZW4uIgorCisiSW5kZW0gIGlociAgdW5zZXJlICBMZXV0ZSAgX3VtYnJpbmd0Xz8gIE5pY2h0ICBnZXJhZGUgIGRpZSAgZmVpbmUgIEFydCwgIEhlcnIKK0JlbmV2b2xpby4gSWNoIHdlcmRlIElobmVuIHNjaG9uIHplaWdlbiwgd2llICBmcmllZGxpY2ggIHdpciAgc2luZCwgIHdlbm4gIHdpcgorYW5nZWdyaWZmZW4gd2VyZGVuLiIKKworU2llIGtlbm5lbiBhbGxlIGRpZSBzY2hvZW5lbiBTY2hsYWVnZXJlaWVuLCBkaWUgenVtIFdlc3Rlcm4gZ2Vob2VyZW4sIHdpZSAgZGVyCityZWNodGUgU2NodWggenVtIGxpbmtlbj8gTWFuIHBydWVnZWx0IHNpY2ggdW5kIGFjaHRldCBuaWNodCB3ZWl0ZXIgZGFyYXVmLCB3ZW4KK21hbiBnZXJhZGUgdHJpZmZ0LCBzY2hsaWVzc2xpY2ggaXN0IGplZGVyLCBkZXIgc2ljaCBpbiBkaWUgTmFlaGUgZGVyICBLZWlsZXJlaQord2FndCBlbnR3ZWRlciBiZXRlaWxpZ3Qgb2RlciBzZWxiZXIgc2NodWxkLiBIYXJtbG9zZSBQYXNzYW50ZW4gZ2lidCBlcwluaWNodCwKK3dlciBzZWluZSBaYWVobmUgYmVoYWx0ZW4gd2lsbCwgaGF0IG51ciBlaW5lIE1vZWdsaWNoa2VpdCwgZGllcyB6dSAgZXJyZWljaGVuOgorRXIgbXVzcyB0b3Qgc3BpZWxlbiB1bmQgc2ljaCBkZXIgR2VmYWhyIGF1c3NldHplbiwgaGFydGUgVHJpdHRlICBnZWdlbgl3ZWljaGUKK1RlaWxlIHp1IGthc3NpZXJlbiBvZGVyIGVyIG11c3Mgc2NobmVsbGVyIHp1c2NobGFnZW4gYWxzIGFsbGUgYW5kZXJlbi4JQmlubmVuCitrdWVyemVzdGVyIEZyaXN0IGlzdCBlaW5lIFNjaGxhZWdlcmVpIGltIEdhbmdlLCBkaWUgaWhyZXNnbGVpY2hlbiBzdWNodC4KKworV2llIGltbWVyIGluIHNvbGNoZW4gRmFlbGxlbiBwbGF0enQgZGllIFBvbGl6ZWkgbWl0dGVuCWhpbmVpbiwgIHVuZCAgZGEgIGlocmUKK0FuZ2Vob2VyaWdlbiBlYmVuZmFsbHMgTWVuc2NoZW4gc2luZCwga29lbm5lbiBzaWUgbmljaHQgdW1oaW4sIGJlaSAgZGVyICBlaW5lbgorUGFydGVpIGVpbiB3ZW5pZyBtZWhyIEZyaWVkZW4genUgc3RpZnRlbiBhbHMgYmVpIGRlciBhbmRlcmVuLiBIYWx0ZW4gIHdpciAgZGVyCitQb2xpemVpLCBpbnNvZmVybiBtYW4gZnVlciBJbmRpdmlkdWVuIGVpbmVuIHNvbGNoICBnZW5lcmFsaXNpZXJlbmRlbiAgQXVzZHJ1Y2sKK3ZlcndlbmRlbiBrYW5uLCB6dWd1dGUsIGRhc3Mgc2llIGJlaSBhbGwgaWhyZXIgTWVuc2NobGljaGtlaXQgdW5kICBGZWhsYmFya2VpdAorbmljaHRzZGVzdG93ZW5pZ2VyIGF1ZiBBdXNnZWdsaWNoZW5oZWl0IGFjaHRldCwgc28gZGFzcyBmdWVyICBqZWRlbiAgQW5oYWVuZ2VyCitkZXIgQ2FwdWxldHMgYXVjaCBlaW5lciBkZXIgTW9udGFndWVzIGVpbmdlc3RlbGx0IHdpcmQuIE9kZXIsIHVtIGVzIGVpbiAgd2VuaWcKK3BvbGVtaXNjaGVyIGF1c3p1ZHJ1ZWNrZW4sIGtlaW5lIGRlciBiZWlkZW4gU2VpdGVuIGJla29tbXQgd2VuaWdlciBQb2xpemVpIGFscworZGllIGFuZGVyZS4KKworSGVyciBDYXB1bGV0LCBkZXIgZ2VyYWRlIHNlaW5lIEdhdHRpbiBhdWYgZWluZW0gU3BhemllcmdhbmcgYmVnbGVpdGV0ZSwgIGhhdHRlCitzZWluZSBoZWxsZSBGcmV1ZGUsIGFscyBlciBkaWUgd3VuZGVyc2Nob2VuZSBQcnVlZ2VsZWkgc2FoLiAiRGFzICBnaWJ0ICBlcyAgamEKK25pY2h0ISBDYS1QdS1MZXQsIENhLSBQdS1MZXQhIgorCisiSWRpb3QuIFVuZCBndWNrIG51ciwgZXIgaGF0IGVpbmVuIE1vcmdlbnJvY2sgIGFuLiIsICBrb21tZW50aWVydGUgIFVsby4gICJEZXIKK0tlcmwgaXN0IHdpcmtsaWNoIHNlbmlsLiIKKworIkxhc3MgaWhuIGRvY2guIERlciBhbHRlIEtub2NoZW4ga2FubiBudXIgbm9jaCBicnVlbGxlbi4iICBBenp1cm8gIHp1Y2t0ZSAgZGllCitTY2h1bHRlcm4uCisKKyJTb2xsdGUgbWljaCB3dW5kZXJuLCB3ZW5uIGVyIGVzIGRhYmVpIGJlbGllc3NlLiIgVWxvIGthbm50ZSBpaHJlIFBhcHBlbmhlaW1lci4KKworIlZlcmRhbW10LCB3aXIgdmVybGllcmVuISBNZWluIFNjaHdlcnQhIgorCitGcmF1IENhcHVsZXQsIGplZGVyIFpvbGwgZWluZSBEYW1lICB1bmQgIHNpY2ggIHZvZWxsaWcJaW0gIEtsYXJlbiAgdWViZXIgIGRlbgorWnVzdGFuZCBpaHJlcyBHYXR0ZW4sIGxhZWNoZWx0ZSBlaW4gd2VuaWcuICJEdSBtZWluc3QgIGdld2lzcyAgZGVpbmUgIEtydWVja2UsCittZWluIFNjaGF0ei4iICJJY2ggbWVpbmUgbWVpbiBTY2h3ZXJ0LiIKKworIlNhZyBpY2ggZG9jaC4iLCBlcndpZGVydGUgc2VpbmUgR2F0dGluIG1hbGl6aW9lcy4KKworSGVyciBDYXB1bGV0LCBkZXIgYWhudGUsIHdhcyBpaG4gZGFoZWltIGVyd2FydGV0ZSwgd2VubiBlciBzZWluZXIgR2F0dGluIGpldHp0Cit3aWRlcnNwcmFlY2hlLAl6dWNrdGUJbnVyICBkaWUgIFNjaHVsdGVybiAgdW5kICBiZWdudWVndGUgIHNpY2ggIGRhbWl0LCAgZGllCitDYXB1bGV0YW5oYWVuZ2VyIGFuenVmZXVlcm4gdW5kIHVlYmVyc2FoIGluIHNlaW5lbSBFaWZlciBnYW56ICB1bmQgIGdhciwgIGRhc3MKK2luendpc2NoZW4gYXVjaCBIZXJyIE1vbnRhZ3VlIG1pdCBzZWluZXIgRnJhdSBkYXMgU2NobGFjaHRmZWxkIGJldHJldGVuIGhhdHRlLgorSGVycm4gTW9udGFndWUgd2FyIGRpZSBHZXN0YWx0IHNlaW5lcyBMaWVibGluZ3NmZWluZGVzCWFsbGVyZGluZ3MgIGtlaW5lc3dlZ3MKK2VudGdhbmdlbi4gIkR1IGhpbnRlcmhhZWx0aWdlciBTYWNrISBXb3p1IGhhc3QgZHUgZGVpbmUgTGV1dGUgYW5nZXN0aWZ0ZXQhIiBFcgorc3R1ZXJ6dGUgbWl0IGVyaG9iZW5lciBGYXVzdCBhdWYgQ2FwdWxldCB6dS4gIkR1LCBkdS4uLiIKKworIkR1IENhcHVsZXQuIiwgc291ZmZsaWVydGUgQXp6dXJvIHVuZCBoYW5kZWx0ZSBzaWNoIGVpbmVuIHpvcm5pZ2VuICBCbGljayAgdm9uCitVbG8gZWluLiBEYW5rYmFyIG5haG0gTW9udGFndWUgZGllIEhpbGZlc3RlbGx1bmcgYW4uICJEdSBfQ2FwdWxldF8sICBkaXIgIHplaWcKK2ljaCwgd2FzIGVpbiBlY2h0ZXIgTW9udGFndWUgaXN0ISIKKworIkpldHp0IHdpcmQgZXMgZXJzdCBsdXN0aWcuIiwgZnJldXRlIHNpY2ggVWxvICB1bmQgIHNldHp0ZSAgc2ljaCAgaW4gIFBvc2l0dXIuCisiQmVzdGltbXQgYmVrb21tZW4gd2lyIGdsZWljaCBlaW5lIGJpbGRlcmJ1Y2hyZWlmZSBIZXJ6YXR0YWNrZSB6dSBzZWhlbi4iCisKKyJOaWNodHMgZGEuIiBBenp1cm8gZGV1dGV0ZSBtaXQgZGVtIFNjaG5hYmVsIGF1ZiBkaWUgUG9saXppc3Rlbi4gICJEYSwgIHNpZWhzdAorZHU/IFNpZSBoYWJlbiBlcyBnZXNjaGFmZnQsIGRpZSBiZWlkZW4gU2VpdGVuIHp1IHRyZW5uZW4uIgorCitVbG8gc2V1Znp0ZS4gIlNjaGFkZS4iCisKK0RpZSBQb2xpemlzdGVuIGhhdHRlbiBkaWUgYmVpZGVuIGZlaW5kbGljaGVuICBTZWl0ZW4gIHNhZXViZXJsaWNoICBhdXNzb3J0aWVydAordW5kIGFuIGRlbiBnZWdlbnVlYmVybGllZ2VuZGVuIFNlaXRlbiBkZXMgUGxhdHplcyBBdWZzdGVsbHVuZyAgbmVobWVuICBsYXNzZW4uCitadSAgamVuZXIgIFplaXQgIGhpZWx0CW1hbiAgc2ljaCAgbmljaHQgIGxhbmdlICBkYW1pdAlhdWYsICBkaWUgIFBlcnNvbmFsaWVuCitmZXN0enVzdGVsbGVuLCBkaWUgUmF1ZmJvbGRlICBhYnp1ZnVlaHJlbiwgIGF1c3p1bnVlY2h0ZXJuICB1bmQgIG5hY2ggIGVpbmlnZW4KK1dvY2hlbiBvZGVyIE1vbmF0ZW4gdm9yIEdlcmljaHQgenUgc3RlbGxlbiwgbWFuIHNhbW1lbHRlICBkaWUgIFVlYmVycmVzdGUgIGRlcgorUHJ1ZWdlbGVpIGVpbiB1bmQgZnVlaHJ0ZSBzaWUgZGVtIFJpY2h0ZXIgZWluZmFjaCAgdm9yLCAgZGVyICBsYW5nZSAgbmljaHQgIHNvCit1ZWJlcmxhc3RldCB3YXIsIHdpZSBlcyBkaWUgR2VyaWNodGUgaW4gdW5zZXJlciBsZWlkZ2VwbGFndGVuICBaZWl0ICBzaW5kLiAgU28KK2dlc2NoYWggZXMgYXVjaCBqZXR6dC4gRGFzIEdlcmljaHQsIGluCUdlc3RhbHQgIGRlcyAgQnVlcmdlcm1laXN0ZXJzICBFc2NhbHVzCitiZXRyYXQgZGVuIEdlcmljaHRzaG9mLCB3aWxsICBzYWdlbiwgIGRlbiAgTWFya3RwbGF0eiwJdW5kICBuYWhtICBhbSAgQnJ1bm5lbgorQXVmc3RlbGx1bmcuCisKKyJXYXMgaXN0IGhpZXIgbG9zPyIsIHZlcmxhbmd0ZSBFc2NhbHVzIHp1IHdpc3Nlbi4KKworIlNpZSBoYWJlbiBzaWNoIGdlcHJ1ZWdlbHQuIiwgYmVtZXJrdGUgVWxvIGxlaXNlLgorCisiRGFua2UsIHNvdmllbCBrYW5uIGljaCAgc2VsYmVyICBhdXMgIGRlbiAgYmx1dGlnZW4gIE5hc2VuICBhYmxlc2VuLiIgIEVzY2FsdXMKK2lnbm9yaWVydGUgZGllIGZyYWdlbmRlbiBCbGlja2UsIGRlbm4gZXIgd3Vzc3RlIGphIG5pY2h0LCBkYXNzIGVyIGFscyBFaW56aWdlcgorVWxvcyBXb3J0ZSBnZWhvZXJ0IGhhdHRlLiAiTWlyIHJlaWNodCBlcyBqZXR6dCwgSGVycnNjaGFmdGVuLiAgR2VodCAgZXMgIHNjaG9uCit3aWVkZXIgdW0gZGllIGFsdGUgRmVoZGU/IiBNb250YWd1ZSB1bmQgQ2FwdWxldCwgYmVpZGVzIE1hZW5uZXIsIGRpZSBmdWVyIGlocmUKK0FuZ2VzdGVsbHRlbiB1bmQgQW5oYWVuZ2VyIGVpbnN0YW5kZW4sIG5pY2t0ZW4gYmV0cmV0ZW4uCisKKyJJY2ggaGFiZSBkaWUgTmFzZSB2b2xsLiBTdGF0dCBldWNoICB3aWUgIGFuc3RhZW5kaWdlICBNZW5zY2hlbiAgenUgIGJlbmVobWVuLAorcHJ1ZWdlbHQgaWhyIGV1Y2ggYXVmIG9mZmVuZXIgU3RyYXNzZSwgYWxzIGdhZWJlIGVzICBrZWluZSAgeml2aWxpc2llcnRlICBBcnQsCitkaWUgQW5nZWxlZ2VuaGVpdCB6dSByZWdlbG4uIgorCisiSG9lcnQsIGhvZXJ0LiIgQXp6dXJvIGdyaW5zdGUuCisKKyJXYXJ1bSBlcmZpbmRlc3QgZHUgbmljaHQgZGVuIEZ1c3NiYWxsPyIsIGZyYWd0ZSBVbG8gc28gbGVpc2UsIGRhc3Mgd2llZGVyIG51cgorRXNjYWx1cyBzaWUgaG9lcmVuIGtvbm50ZS4KKworV2VubiBkaWUgR29ldHRlciBkZXIgTXl0aGVud2VsdCBVbG8gamV0enQgZ2Vob2VydCAgaGFldHRlbiwgIHdhZXJlICBzaWNoZXJsaWNoCitlaW4gQmxpdHogdm9tIEhpbW1lbCBnZWtvbW1lbiB1bmQgaGFldHRlICBzaWUgIGVyc2NobGFnZW4uICBEb2NoICBkaWUgIEdvZXR0ZXIKK3dhcmVuIGFuZGVyd2VpdGlnIGJlc2NoYWVmdGlndCwgc28ga2FtIGVzLCBkYXNzIFVsbyB1bmdlc2Nob3JlbiAgZGF2b25rYW0gIHVuZAorc3RhdHQgZGVzIHN0cmFmZW5kZW4gQmxpdHplcyBlaW5lciBkZXIgRWluZ2VidW5nIGVpbnNjaGx1Zy4gRXIgdHJhZiBhdWNoIG5pY2h0CitVbG8sIGluIGRlcmVuIEtvcGYgc2Nob24gZ2VudWcgbWVociAgb2RlciAgbWluZGVyICBkdW1tZSAgSWRlZW4gIGhlcnVtc3B1a3RlbiwKK3NvbmRlcm4gRXNjYWx1cywgZGVyIHRpZWYgTHVmdCBob2x0ZSB1bmQgZGllIGdyYW5kaW9zZQlJZGVlICBpbiAgc2VpbmVtICBIaXJuCitzcGVpY2hlcnRlLCB3byBzaWUgYmlzIHp1IGlocmVyICBSZWlmZQlsaWVnZW4Jc29sbHRlLiAgX0VpbmVzXyAgX1RhZ2VzXywgIHNvCitkYWNodGUgc2ljaCBFc2NhbHVzLCBfd2lyZF8gX2RpZV8gX1dlbHRfIF9mcmllZGxpY2hlcl8gX3NlaW5fLiBfRGFubl8gX3RyYWdlbl8KK193aXJfIF91bnNlcmVuXyBfU3RyZWl0XyBfbmljaHRfIF9tZWhyXyBfbWl0XyBfV2FmZmVuZ2V3YWx0XyBfYXVzXywgIF9zb25kZXJuXworX3NwaWVsZW5fICBfc3RhdHRfICBfZGVzc2VuXyAgX0Z1c3NiYWxsXy4gIF9EYXNfICBfd2lyZF8gICBfZWluZV8gICBfYmVzc2VyZV8sCitfd2Vpc2VyZV8gIF9XZWx0XyAgX3NlaW5fLCAgX2dhbnpfICBfYmVzdGltbXRfLiAgX0Rhbm5fLCAgX2VpbmVzXyAgIF9zY2hvZW5lbl8KK19UYWdlc18sICBfd2VyZGVuXyAgX3p3ZWlfICBfdmVyZmVpbmRldGVfICBfTGFnZXJfICBfaWhyZV8gIF9iZXN0ZW5fICAgX0xldXRlXworX2F1c3dhZWhsZW5fIF91bmRfIF9zaWVfIF9pbl8gX2ZhaXJlbV8gX1dldHRrYW1wZl8gX2locmVuXyBfU3RyZWl0XyBfYmVpbGVnZW5fCitfbGFzc2VuXy4gX0phXywgX2Rhc18gX3dpcmRfIF93aXJrbGljaF8gX2VpbmVfIF9iZXNzZXJlXyBfV2VsdF8gX3NlaW5fLiAgX0ljaF8KK19tdXNzXyBfbWlyXyBfbnVyXyAgX25vY2hfICBfdWViZXJsZWdlbl8sICBfd2llXyAgX21hbl8gIF9GdXNzYmFsbF8gIF9zcGllbGVuXworX3NvbGxfLgorCitIYWx0ZW4gd2lyIEVzY2FsdXMgenVndXRlLCBkYXNzIGVyIG5vY2ggbmljaHRzIHZvbiBGYW5zIHdpc3NlbiBrb25udGUuCisKKyJEYXMgaXN0IGpldHp0IGRhcyBkcml0dGUgTWFsLCBtZWluZSAgSGVycmVuLiAgRHJlaW1hbCAgaGF0ICBldWVyICB2ZXJmbHVjaHRlcgorSGFlbmRlbCBzY2hvbiBkaWUgZ2FuemUgU3RhZHQgaW4gQXVmcnVociBnZXN0dWVyenQuIgorCitFciBoYWV0dGUgaGluenVmdWVnZW4ga29lbm5lbiwJZGFzcyAgYmVpICBqZWRlciAgZGllc2VyICBBdXNlaW5hbmRlcnNldHp1bmdlbgorU3RldWVyemFobGVyIHN0YXJiZW4gb2RlciBmdWVyIGxhZW5nZXJlIFplaXQgYXJiZWl0c3VuZmFlaGlnIHd1cmRlbiwgIHNvICBkYXNzCittYW4gaWhtIHBlcnNvZW5saWNoZW4gU2NoYWRlbiB6dWZ1ZWd0ZSwgYWJlciAgZWluICBzb2xjaGVyICBNYW5uICB3YXIgIEVzY2FsdXMKK25pY2h0LiBTdGF0dCBkZXNzZW4gZGFjaHRlIGVyIG51ciBhbiBkaWUgTWVuc2NoZW4sICBkaWUgIGR1cmNoCWRpZXNlbglkdW1tZW4KK1N0cmVpdCBrZWluZSBSdWhlIGZhbmRlbiB1bmQgbmllIHd1c3N0ZW4sIG9iICBzaWUgIGFtICBuYWVjaHN0ZW4gIE1vcmdlbiAgaWhyZQorU3RhZHQgbm9jaCBzbyB2b3JmaW5kZW4gd3VlcmRlbiwgd2llIHNpZSAgYW0gIEFiZW5kLCAgYWxzICBzaWUJc2ljaCAgc2NobGFmZW4KK2xlZ3Rlbiwgbm9jaCBnZXdlc2VuIHdhci4gV2VyIGtvbm50ZSBzYWdlbiwgb2IgbmljaHQgYW0gbmFlY2hzdGVuIFRhZyBhbGxlcyBpbgorU2NodXR0IHVuZCBBc2NoZSBsYWcsICB3YXMgIG5vY2ggIGFtICBWb3J0YWcgIGFscyAgZnVlciAgZGllICBFd2lna2VpdAlnZWJhdXQKK2F1c2dlc2VoZW4gaGF0dGU/IFdlciB3dXNzdGUsIG9iIHVuZCAgd2FubiAgZGVyICBTdHJlaXQgIHp3aXNjaGVuICBkZW4JYmVpZGVuCitGYW1pbGllbiBlc2thbGllcnRlPyBXZXIga29ubnRlICBndXRlbglHZXdpc3NlbnMgIF9CaXNfICBfbW9yZ2VuXyAgenUJc2VpbmVuCitGcmV1bmRlbiBzYWdlbiwgd2VubiBlciBuaWNodCB3dXNzdGUsIG9iIGVyIG5pY2h0IGJlaW0gVWViZXJxdWVyZW4gZGVzIE1hcmt0ZXMKK2FsbGUgR2VkYW5rZW4gYW4gZWluIE1vcmdlbiBnZWdlbiBkaWUgdW5lbmRsaWNoZSBHbGVpY2hndWVsdGlna2VpdCAgZGVzICBUb2RlcworZWludGF1c2NodGU/IEhhYmVuIFNpZSwgbGllYmUgTGVzZXJpbiwgbGllYmVyIExlc2VyLCAgamVtYWxzICBlaW5lICBEb3Jma2lybWVzCitiZXN1Y2h0PyBXZW5uIG5pY2h0LCBlbXBmZWhsZSBpY2ggSWhuZW4sIHNpY2ggIGVpbiAgc29sY2hlcyAgU3Bla3Rha2VsCWVpbm1hbAorYW56dXNlaGVuLiBWaWVsbGVpY2h0IGdlaGVuIFNpZSBhbSBTYW1zdGFnYWJlbmQgaGluLCB3ZW5uIGRpZSAganVuZ2VuICBNYWVubmVyCitkZXMgT2JlcmRvcmZlcyBzaWNoIHp1bSBCaWVyIGFuIGVpbmVtIGRlciBkcmVpIEJpZXJzdGFlbmRlICB0cmVmZmVuLCAgd2FlaHJlbmQKK2RpZSBkZXMgVW50ZXJkb3JmZXMgYW0gendlaXRlbiBzdGVoZW4gIHVuZCAgZGllICBFcndhY2hzZW5lbiwgIERpc3Rpbmd1aWVydGVuLAorV2Vpc2VyZW4sIGluIGRlciBNaXR0ZSB6d2lzY2hlbiBkZW4gYmVpZGVuIEJpZXJzdGFlbmRlbiBiZWkgZWluZW0gR2xhcwlzaXR6ZW4KK3VuZCB1ZWJlciBQb2xpdGlrICBzcHJlY2hlbiwgIHdhZWhyZW5kCXNpZSAgZGFyYXVmICB3YXJ0ZW4sICBkYXNzICBkZXIgIFNwYXNzCithbmZhZW5ndC4gQmV0cmFjaHRlbiBTaWUgZGllIFN6ZW5lIHVuZCBzdGVsbGVuIFNpZSBzaWNoIHZvciwgIGRhc3MgIHN0YXR0ICBkZXIKK0ZhZXVzdGUgTWVzc2VyIHVuZCBEZWdlbiBpbSBFaW5zYXR6IHNpbmQsIGRhbm4ga29lbm5lbiBTaWUgc2ljaCBpbiAgRXNjYWx1c2VucworTGFnZSB2ZXJzZXR6ZW4sIGRlciBuaWNodHMgYW5kZXJlcyB3aWxsLCBhbHMgZW5kbGljaCBGcmllZGVuIGluIHNlaW5lciBTdGFkdCAtCit1bmQgYWxsZW4gTWVuc2NoZW4gZWluIFdvaGxnZWZhbGxlbi4KKworRXNjYWx1cyB3YXIgZWluIHByYWt0aXNjaGVyIE1hbm4sIGF1Y2ggd2VubiBpaG0gZGllIElkZWUgdm9uIGVpbmVtIFNwaWVsLCBkYXNzCitkaWUgR2VzY2hpY2tlIGRlciBNZW5zY2hoZWl0IGVudHNjaGllZGUsICBhdXNuZWhtZW5kICBndXQgIGdlZmllbC4gIE1vcmFsaXNjaGUKK1NrcnVwZWwgcGxhZ3RlbiBpaG4gd2VuaWdlciBhbHMgZGllIFByb2JsZW1lLCBkaWUgc2ljaCBhdXMgIGVpbmVyICBGb3J0c2V0enVuZworZGVzIFN0cmVpdHMgZXJnYWJlbi4gIkdlaHQgbWlyIGF1cyBkZW4gQXVnZW4gdW5kIHdpZWRlciBhbiBldXJlIEFyYmVpdCwgTGV1dGUuCitVbmQgIGJlbmVobXQgIGV1Y2ggIHdpZSAgTWVuc2NoZW4sICBzdGF0dCAgZXVjaCAgd2llICBUaWVyZSAgIGdlZ2Vuc2VpdGlnICAgenUKK3plcmZsZWlzY2hlbi4iIEVyICBzY2hpZWx0ZSAgZWluICB3ZW5pZywgIHVtICBiZWlkZSAgU2VpdGVuICBkZXMgIE1hcmt0cGxhdHplcworZ2xlaWNoemVpdGlnIHNjaGFyZiBpbnMgQXVnZSB6dSBmYXNzZW4uICJEYW1pdCBkYXMgZWluZSBrbGFyICBpc3Q6ICBJY2ggIGR1bGRlCituaWNodCwgZGFzcyBpaHIgZXVjaCB3ZWl0ZXJoaW4gZGFuZWJlbiBiZW5laG10LiBXZW5uIGljaCBlaW5lbgllcndpc2NoZSwgIGRlcgorc2ljaCBtaXQgZWluZW0gYW5kZXJlbiBzY2hsYWVndCwgc2NobGFnZSBpY2ggIG1pdCAgZGVyCUZhdXN0ICBkYXp3aXNjaGVuICB1bmQKK2xhc3NlIGlobiBhdWYgZGVyIFN0ZWxsZSBlbnRoYXVwdGVuLiBWZXJzdGFuZGVuPyIgIEVzY2FsdXMgIHdhcnRldGUgIHZlcmdlYmVucworYXVmICBkYXMgIHZlcmxlZ2VuZSAgRnVlc3Nlc2NoYXJyZW4sICBkYXMgIGVpbmUgIHNvbGNoZSAgIERyb2h1bmcgICBlaWdlbnRsaWNoCitoZXJ2b3JydWZlbiBzb2xsdGUuIExhbmdzYW0sIGVpbiB3ZW5pZyB3aWRlcnN0cmViZW5kIG1hY2h0ZW4gc2ljaCBkaWUgIEJ1ZXJnZXIKK3dpZWRlciBhdWYgZGVuIFdlZyB6dSBpaHJlbiBIYWV1c2VybiB1bmQgaWhyZXIgQXJiZWl0LiBDYXB1bGV0LCBpbW1lciBub2NoICBpbgorc2VpbmVtIGdhZW56bGljaCB1bnBhc3NlbmRlbiBNb3JnZW5tYW50ZWwsIGZvbGd0ZSBFc2NhbHVzIHp1IGRlc3NlbiBCdWVybywgIHVtCitkb3J0IHp1IGVpbmVyIEdlbGRzdHJhZmUgdmVyZG9ubmVydCB6dSB3ZXJkZW4sIGRlbm4gc2NobGllc3NsaWNoIHdhciAgYmVpICBkZW0KK1N0cmVpdCBlaW4gU2FjaHNjaGFkZW4JZW50c3RhbmRlbiwgIGRlbiAgRXNjYWx1cyAgZXJzZXR6dCAgc2VoZW4gIHdvbGx0ZS4gIEVzCitpbnRlcmVzc2llcnRlIEVzY2FsdXMgbmljaHQgaW0gZ2VyaW5nc3RlbiwgIHdlciAgZGVuICBTdHJlaXQgIGhldXRlICB2b20gIFphdW4KK2dlYnJvY2hlbiBoYXR0ZSwgc29sYW5nZSBlciBzb3dvaGwgdm9uIENhcHVsZXQJYWxzICBhdWNoICB2b24JTW9udGFndWUgIGVpbmUKK2ZpbmFuemllbGxlIEVudHNjaGFlZGlndW5nIGVyaGllbHQuIERhcmluIHVudGVyc2NoaWVkIHNpY2ggRXNjYWx1cyAgd2VuaWcgIHZvbgorZGVuIGhldXRpZ2VuIEtvbW11bmVuLCBkaWUgIHNpY2ggIGF1Y2gJbmljaHQgIGJlc29uZGVycyAgZGFydW0gIGt1ZW1tZXJuLCAgb2IKK05hY2hiYXJzIEh1bmQgYXVmIGRpZSBTdHJhc3NlIGxpZWYgdW5kIGRhbWl0IHVyc2FlY2hsaWNoIHZlcmFudHdvcnRsaWNoIGRhZnVlcgord2FyLCBkYXNzIEhlcnIgTXVlbGxlciBvZGVyIEZyYXUgU2NobWl0eiBnZWdlbglkaWUgIEFtcGVsICBmdWhyICAtICB6dW1pbmRlc3QKK3NvbGFuZ2UgbmljaHQsIHdpZSBkaWUgQW1wZWwgYmV6YWhsdCB3aXJkLgorCitMYXNzZW4gd2lyIGFsc28gRXNjYWx1cyBzZWluZW4gU2NoYWRlbmVyc2F0eiAga2Fzc2llcmVuICB1bmQgIGZvbGdlbiAgVWxvICB1bmQKK0F6enVybywgZGVuZW4gZXMgYXVmIGRlbSBNYXJrdHBsYXR6IHp1CWxhbmd3ZWlsaWcgIHd1cmRlLCAgYmlzICB6dSAgTW9udGFndWVzCitIYXVzLCB3byBzaWNoIEJlbmV2b2xpbyBIZXJybiBNb250YWd1ZSBnZWdlbnVlYmVyIHJlY2h0ZmVydGlnZW4gbXVzcy4KKworIkVocmxpY2gsIE9ua2VsLCBpY2ggaGF0dGUgdWViZXJoYXVwdCBuaWNodHMgbWl0IGRlciBnYW56ZW4gIEFuZ2VsZWdlbmhlaXQgIHp1Cit0dW4uIgorCisiRGFzIHNhZ3N0IGR1IGpldHp0LiIsIHJlZ3RlIHNpY2ggSGVyciBNb250YWd1ZSBhdWYuCisKK0ZyYXUgTW9udGFndWUgaGF0dGUgYWxzIGtsdWdlIEhhdXNmcmF1IG5pY2h0cyBkYWZ1ZXIgdWVicmlnLCB1ZWJlciAgdmVyZ29zc2VuZQorTWlsY2ggenUga2xhZ2VuLiAiV28gc3RlY2t0IGVpZ2VudGxpY2ggUm9tZW8/IgorCisiTGFzcyBSb21lbyBqZXR6dCwgTGllYnN0ZS4gQWxzbywgbWVpbiBsaWViZXIgTmVmZmUsIHdhcyB3YXIgbG9zPyIKKworIkFsc28sIGRhIHdhcmVuIGRpZXNlciBDYXB1bGV0LCBkZXIgIHNpY2ggIG1pdCAgU2Ftc29uICB1bmQgIEdyZWdvcnkgIGFuZ2VsZWd0CitoYXR0ZS4gT2ZmZW5iYXIgd29sbHRlIGVyIHNpY2ggcHJ1ZWdlbG4sIGFscyBpY2ggZGF6dSBrYW0uIgorCisiRWluZSBHZWxlZ2VuaGVpdCwgZGllIGR1IGRpciBuaWNodCBlbnRnZWhlbiBsYXNzZW4gIGtvbm50ZXN0LCAgbmljaHQgIHdhaHI/IiwKK2ZyYWd0ZSBIZXJyIE1vbnRhZ3VlIHNjaGFyZi4KKworIktlaW5lc3dlZ3MsIE9ua2VsLCBpY2ggaGFiZSBudXIgdmVyc3VjaHQsIGRpZSBkcmVpIHp1IHRyZW5uZW4uIFRqYSwgdW5kICBkYW5uCitrYW0gVHliYWx0IENhcHVsZXQgZGF6dS4iCisKKyJOdXIgZ3V0LCBkYXNzIFJvbWVvIG5pY2h0ICBkYWJlaSAgd2FyLCAgZGllc2VyICBUeWJhbHQgIGhhZXR0ZSAgaWhuICBhbSAgRW5kZQordmVybGV0enQuIiwgbGllc3Mgc2ljaCBGcmF1IENhcHVsZXQgdmVybmVobWVuLgorCisiRGllIHN0ZWxsdCBzaWNoIHZpZWxsZWljaHQgd2VnZW4gZGVzIEJlbmdlbHMgYW4uIiwga251cnJ0ZSBVbG8gdm9uIGVpbmVtIEFzdCwKK2RlciwgYWxzIGhhZXR0ZW4gZGllIEdvZXR0ZXIgaWhuIGV4dHJhIGRvcnQgd2FjaHNlbiBsYXNzZW4sIGdlcmFkZSBzbyB3ZWl0ICBhbgorZGFzIEZlbnN0ZXIgaGVyYW5yZWljaHRlLCBkYXNzCWRpZSAgYmVpZGVuICBUdXJ0ZWxrcmFlaGVuICBkYXMgIEdlc3ByYWVjaCAgaW0KK0lubmVybiBkZXMgSGF1c2VzIG1pdHZlcmZvbGdlbiBrb25udGVuLgorCisiU2llIGdpYnQgbmljaHQgYXVmLiIsIG1laW50ZSBBenp1cm8uICJXYXMgaGF0IHNpZSBkZW5uIG1pdCBkZW0gSnVuZ2VuPyIKKworIkFjaCwgd2FocnNjaGVpbmxpY2ggaXN0IGVyIHdpZWRlciBoaW50ZXIgaXJnZW5kZWluZXIgRnJhdSBoZXIgdW5kIGhldWx0ICBzaWNoCitkZXN3ZWdlbiBkaWUgQXVnZW4gYXVzLiIgVWxvIGhpZWx0IG5pY2h0IHZpZWwgdm9uIFJvbWVvLgorCisiRXIgaXN0IGhhbHQganVuZy4iIEF6enVybyBoYXR0ZSAgZnVlciAgZGFzICBWZXJoYWx0ZW4gIFJvbWVvcyAgZGV1dGxpY2ggIG1laHIKK1ZlcnN0YWVuZG5pcy4KKworIlR5YmFsdCBtaXNzdmVyc3RhbmQgZGllIFNpdHVhdGlvbiB1bmQgaG9lcnRlIG1pciBhdWNoIG5pY2h0IHp1LCAgYWxzICBpY2ggIGVzCitpaG0gZXJrbGFlcmVuIHdvbGx0ZS4iCisKKyJTaWVodCBpaG0gYWVobmxpY2guIiBIZXJyIE1vbnRhZ3VlIGthbm50ZSBUeWJhbHRzIHNjaGxlY2h0ZW4gUnVmLgorCisiTmFqYS4iLCAgbWFjaHRlICBCZW5ldm9saW8gIGdlZGVobnQuICAiSWNoICBtdXNzdGUgIG1pY2ggICBkb2NoICAgZ2VnZW4gICBpaG4KK3ZlcnRlaWRpZ2VuLiIKKworRXJpbm5lcm4gU2llIHNpY2gsIGxpZWJlIExlc2VyaW4sIGxpZWJlciAgTGVzZXIsICB3aWUgIEdyZWdvcnkJc2ljaCAgZWluZ2FuZ3MKK3VlYmVyIE5vdHdlaHIgYWV1c3NlcnRlPyBFciBoYXR0ZSBvZmZlbmJhciBFcmZvbGcgbWl0IHNlaW5lciBUYWt0aWsuICBOdXIgIG1pdAorQnVlcmdlcm1laXN0ZXIJRXNjYWx1cyAgaGF0ICBHcmVnb3J5ICBuaWNodCAgZ2VyZWNobmV0LiAgV2VubglIZXJyICBNb250YWd1ZQord3Vlc3N0ZSwgd2llIGRpZSBOb3R3ZWhyIHp1c3RhbmRlIGthbSwgem9lZ2UgZXIgZGllIEdlbGRzdHJhZmUsIGRpZSBlciBudW4gIHp1Cit6YWhsZW4gaGF0LCBzaWNoZXJsaWNoIHZvbiBHcmVnb3J5cyBTb2xkIGFiLgorCisiV28gaXN0IGRlbm4gbnVyIFJvbWVvPyIgRnJhdSBNb250YWd1ZSB3YXIgb2ZmZW5zaWNodGxpY2ggIG5pY2h0ICBiZXJlaXQsICBkaWUKK1NhY2hlIGF1ZiBzaWNoIGJlcnVoZW4genUgbGFzc2VuLgorCisiRXIgaGF0IHNpY2ggd2llZGVyIGVpbmdlc2NobG9zc2VuLiIsIGFudHdvcnRldGUgQmVuZXZvbGlvLgorCisiV2FzIGhlaXNzdCBkYXM/IiwgdmVybGFuZ3RlIEZyYXUgIE1vbnRhZ3VlICBtaXQgIGRlciAgVmVydmUgIGVpbmVyICBiZXNvcmd0ZW4KK011dHRlciB6dSB3aXNzZW4uCisKKyJXZWlzcyBzaWUgZXMgYW0gRW5kZSB3aXJrbGljaCBuaWNodD8iLCB1ZWJlcmxlZ3RlIFVsbyBsYXV0LgorCisiV2FocnNjaGVpbmxpY2ggbmljaHQuIE11ZXR0ZXIgbmVobWVuIGphIGltbWVyIG51ciBkYXMgYmVzdGUgdm9uIGlocmVuIEtpbmRlcm4KK2FuLiIgQXp6dXJvIHp1Y2t0ZSBtaXQgZGVuIFNjaHVsdGVybi4KKworIkVzIGhlaXNzdCwgZGFzcyBlciBzaWNoIGluIHNlaW5lbSBaaW1tZXIgIGVpbmdlc2NobG9zc2VuICB1bmQgIGRpZSAgVm9yaGFlbmdlCit6dWdlem9nZW4gaGF0LiIsIGFudHdvcnRldGUgQmVuZXZvbGlvLgorCisiRXIgIGhhdCAgZGllICBWb3JoYWVuZ2UgIHp1Z2V6b2dlbj8iICBGcmF1ICBNb250YWd1ZSAgbW9jaHRlICBhbiAgZWluICAgc29sY2gKK3Vuc2l0dGxpY2hlcyBWZXJoYWx0ZW4gYmVpIGlocmVtICBTb2huCW5pY2h0ICBnbGF1YmVuLiAgV2llICBJaG5lbiAgamVkZXJtYW5uCitiZXN0YWV0aWdlbiBrYW5uLCBzaW5kIGFtIGhlbGxpY2h0ZW4gVGFnZSB6dWdlem9nZW5lIFZvcmhhZW5nZSBlaW4gIGRldXRsaWNoZXMKK0FuemVpY2hlbiAgbGllZGVybGljaGVuICBMZWJlbnN3YW5kZWxzLCAgZGVuICBGcmF1ICBNb250YWd1ZSAgaWhyZW0gIFNvaG4gIG5pZQorZ2VzdGF0dGV0IGhhZXR0ZS4gWnVtaW5kZXN0LCBzbyBrb2VubmVuIFNpZSBlcyBpbiBqZWRlbSBEb3JmIGxlcm5lbiwgemllaHQgbWFuCittb3JnZW5zIGRpZSBWb3JoYWVuZ2UgYXVmIHVuZCB3YWhydCBkYW1pdCBkZW4gU2NoZWluLgorCisiU2FnZSBpY2ggZG9jaCwgbGllYmUgIFRhbnRlLiAgQXVzc2VyZGVtICBoYXQgIGVyICBlaW5lbiAgcmllc2lnZW4gIFZvcnJhdCAgYW4KK1Rhc2NoZW50dWVjaGVybi4iCisKKyJXYXMgd2lsbCBlciBkZW5uIGRhbWl0PyIsIHdvbGx0ZSBudW4gYXVjaCBIZXJyIE1vbnRhZ3VlIHdpc3Nlbi4KKworIklzdCBkb2NoIGtsYXIuIiwgbXVybWVsdGUgQXp6dXJvLgorCisiS29tbSwgZGFzIG11c3MgaWNoIG1pciBhbnNlaGVuLiIgVWxvIGdyaW5zdGUgaGFlbWlzY2guCisKK1NpZSBmbG9nZW4gdW0gZGFzIEhhdXMgaGVydW0sIGRlbm4gIGltCUdlZ2Vuc2F0eiAgenVtCVdvaG56aW1tZXIgIGxhZ2VuICBkaWUKK1NjaGxhZnppbW1lciBhdWYgZGVyIFJ1ZWNrc2VpdGUgZGVzIEhhdXNlcywgenVtIEdhcnRlbiBoaW5hdXMuCisKKyJIb2VyIGRpciBkYXMgYW4hIiBVbG8gaGF0dGUgaWhyZSBoZWxsZSBGcmV1ZGUgYW4gUm9tZW9zIGxhdXRlbSAgR2VqYW1tZXIgIHVuZAorR2VzdG9laG5lLgorCisiV2FzIGhhdCBlciBkZW5uLCBkZXIgYXJtZSAgS2xlaW5lLiIgIEF1Y2ggIEF6enVybyAgaGF0dGUgIGtlaW4gIE1pdGxlaWQgIGZ1ZXIKK01lbnNjaGVuLCBkaWUgZXMgc28gc2VociB1ZWJlcnRyaWViZW4uCisKKyJFciBoYXQgTGllYmVza3VtbWVyLiIKKworIk9jaCwgZGEgX3R1dF8gZXIgbWlyIGFiZXIgbGVpZC4iCisKKyJBY2gsIFJvc2FsaW5lISIsIGVyc2Nob2xsIGVzIHZvbiBkcmlubmVuLCBnZWZvbGd0IHZvbiBlaW5lbSB0aWVmZW4gU2V1Znplci4KKworIlJvc2FsaW5lIGhlaXNzdCBzaWUgYWxzby4iLCBiZW1lcmt0ZSBVbG8gdWViZXJmbHVlc3NpZ2Vyd2Vpc2UuCisKKyJOaWNodCBKdWxpYT8iCisKKyJOb2NoIG5pY2h0LCBkYXMga29tbXQgZXJzdCBub2NoLiIKKworUm9tZW8sIGRlciBkZW4gS29wZiBhdXMgZGVtIEZlbnN0ZXIgZ2VzdGVja3QgaGF0dGUsICB3YXJmICBlaW5lbiAgdmVyYmx1ZWZmdGVuCitCbGljayBhdWYgZGllICBLcmFlaGVuLiAgIk9oICBuZWluLCAgbWVpbmUgIGVpbnppZ2UgIHVuZCAgd2FocmUgIExpZWJlICBoZWlzc3QKK1Jvc2FsaW5lLiIKKworQXp6dXJvIHVlYmVybGVndGUsIHdpZSBlciBzZWluZW4gRmVobGVyIHdpZWRlciB3ZXR0IG1hY2hlbiBrb25udGUuIEVyICBzY2hhdXRlCitzY2huZWxsIHp1IFVsbywgZG9jaCBhdWNoIGRpZXNlIHNjaGllbiB6dSBiZXRyb2ZmZW4genUgc2VpbiwgdW0gc2VpbiAgVmVyZ2VoZW4KK2dlZ2VuIGRpZSAgZWxlbWVudGFyc3RlbiAgUmVnZWxuICBkZXMgIFR1cnRlbGtyYWVoZW5kYXNlaW5zICBkZW4gIEdvZXR0ZXJuICB6dQorcGV0emVuLgorCisiR2FueiBiZXN0aW1tdCBpc3Qgc2llIGRhcy4iLCB2ZXJzaWNoZXJ0ZSBBenp1cm8gc2NobmVsbC4gICJTaWUgIGlzdCAgamEgIGF1Y2gKK3d1bmRlcnNjaG9lbi4iCisKK0VyIHRyaXBwZWx0ZSB2ZXJsZWdlbiB2b24gZWluZW0gRnVzcyBhdWYgZGVuIGFuZGVyZW4uCisKKyJKYSwgZGFzIGlzdCBzaWUuIEFiZXIgd2VyIGlzdCBKdWxpYT8iCisKKyJEYXMgYnJhdWNodCBkaWNoIGRvY2ggbmljaHQgenUgaW50ZXJlc3NpZXJlbiwgc2NobGllc3NsaWNoIGlzdCBSb3NhbGluZSBkZWluZQorZWluemlnZSBMaWViZS4iCisKKyJIbS4iIFJvbWVvIHVlYmVybGVndGUgZWluZW4gTW9tZW50LCBkYW5uIGJyYWNoIGVyIHdpZWRlciBpbiBUcmFlbmVuIGF1cy4gIkphLAorZGFzIGlzdCBzaWUuIFVuZCBuaWUgaGF0IGVpbiBNYW5uIGVpbmUgc28gaGVyemxvc2UgRnJhdSBnZWxpZWJ0LiIKKworIlNpZSBpc3QgZ2VtZWluIHp1IGRpcj8iLCBmcmFndGUgQXp6dXJvLgorCisiR2VtZWluIGlzdCBnYXIga2VpbiBBdXNkcnVjay4gQWNoLCB3ZW5uIGljaCBudXIgd3Vlc3N0ZSwgd2FzIGljaCB0dW4gbXVzcywgdW0KK3NpZSB6dSB1ZWJlcnJlZGVuLiIKKworQmVuZXZvbGlvICBib2xsZXJ0ZSAgZ2VnZW4gIFJvbWVvcyAgVHVlciAgdW5kICB2ZXJsYW5ndGUgIHZvbiAgc2VpbmVtCUNvdXNpbgorZWluZ2VsYXNzZW4genUgd2VyZGVuLCB3YXMgVWxvIHVuZCBBenp1cm8genVtIEFubGFzcyBuYWhtZW4sIHNpY2ggIHNjaGxldW5pZ3N0Cit6dSB2ZXJkcnVlY2tlbi4KKworIkR1IGJpc3Qgd29obCB3YWhuc2lubmlnIGdld29yZGVuISIsIHNjaG5hdXp0ZSBVbG8gaWhyZW4gR2VmYWVocnRlbiBhbi4KKworIldlciBhaG50IGRlbm4sIGRhc3MgZGVyIGR1bW1lIEtlcmwgYXVzZ2VyZWNobmV0ICBpbiAgZGllc2VtICBNb21lbnQgIGF1cyAgZGVtCitGZW5zdGVyIGd1Y2t0LiIgdmVydGVpZGlndGUgc2ljaCBBenp1cm8uCisKKyJIb2ZmZW50bGljaCBnZWh0IGRhcyBndXQuIgorCisiQWNoLCBkYSBtYWNoIGRpciBtYWwga2VpbmUgU29yZ2VuLiBTbyAgd2llICBkZXIgIEp1bmdlICBnZWJhdXQgIGlzdCwgIGhhdCAgZXIKK1Jvc2FsaW5lIHVuZCBKdWxpYSBtb3JnZW4gdmVyZ2Vzc2VuIHVuZCByZW5udCBlaW5lciBkcml0dGVuIGhpbnRlcmhlci4iCisKKyJXaWUga29tbXN0IGR1IGRlbm4gZGFyYXVmPyIKKworIklzdCBkb2NoIGtsYXIuIEVyIGlzdCBhY2h0emVobiwgYXVzIGd1dGVyIEZhbWlsaWUgdW5kIHJlaWNoLiBXaWUgc29sbHRlIGVyIGRhCituaWNodCBhdXNyZWljaGVuZCBNYWVkY2hlbiBmaW5kZW4sIGRlbmVuIGVyIHVudGVyIGRpZSAgUm9lY2tlICBzY2hhdWVuCWthbm4/IgorQXp6dXJvIGJsaWNrdGUgYXVmIHNlaW5lbiBlaWdlbmVuIHJlaWNoZW4gRXJmYWhydW5nc3NjaGF0eiB6dXJ1ZWNrLgorCisiRHUgZGVua3N0IGF1Y2ggaW1tZXIgZGFzIHNjaGxlY2h0ZXN0ZS4iCisKKyJBYmVyIG5laW4uIFNvIHNpbmQgZGllIGp1bmdlbiBCdXJzY2hlbiBudW4gbWFsLiBGdWVyIGlobiBpc3QgZXMgZWluZmFjaCBjaGljLAorTGllYmVza3VtbWVyIHp1IGhhYmVuLiIKKworIkd1dCwgZGFzcyBkdSBkYXMgaGludGVyIGRpciBoYXN0LiIgIFVsb3MgIFN0aW1tZSAgbGllc3MgIHZlcm11dGVuLCAgZGFzcyAgc2llCitkaWVzZW4gU2F0eiBhbHMgTWFobnVuZyB2ZXJzdGFuZGVuIHdpc3NlbiB3b2xsdGUuCisKKyJIb2VmaXNjaGUgTWlubmUgaGF0IG1pciBub2NoIG5pZSBnZWxlZ2VuLiIsIHZlcnRlaWRpZ3RlIHNpY2ggQXp6dXJvLgorCisiSmEsIGljaCB3ZWlzcy4iIFVsbyBzZXVmenRlIHVuZCBnYWIgc2ljaCBmdWVyIGVpbmlnZSB3ZW5pZ2UgQXVnZW5ibGlja2UgaWhyZW4KK1RyYWV1bWVuIGhpbi4KKworIkhvZXIgYXVmIGRhbWl0LCBkdSB3ZWlzc3QgamEgZ2FyIG5pY2h0LCB3b3ZvbiBkdSBkYSB0cmFldW1zdC4iIEF6enVybyAga2FubnRlCitzZWluZSBHZWZhZWhydGluLgorCisiQWNoLCB3ZWlzcyBpY2ggbmljaHQ/IgorCisiTmVpbi4gV2VubiBkdSBnZXdvbGx0IGhhZXR0ZXN0LCBkYXNzIGljaCBkaWNoIG1pbm5lLCBkYW5uICBoYWV0dGVzdCAgZHUgIG1pY2gKK25pZW1hbHMgZXJob2VyZW4gZHVlcmZlbi4iCisKKyJIbSwgaGFldHRlIGljaCBiZXNzZXIgZ2V0YW4sIGphLiIKKworIlZlcnN0ZWggZG9jaC4gSWNoIGxpZWJlIGRpY2ggIGphLCAgYWJlciAgaWNoICBtaW5uZSAgZGljaCAgbmljaHQuICBadXIgIE1pbm5lCitnZWhvZXJ0LCBkYXNzIG1hbiBkaWUgYW5nZWJsaWNoZSBHZWxpZWJ0ZSBuaWUgYmVrb21tZW4ga2Fubi4iCisKKyJXaWUga29tbXN0IGR1IGRlbm4gZGFyYXVmPyIKKworIk5hLCBNaW5uZSBoYXQgbmljaHQgdmllbCBtaXQgIGVyZnVlbGx0ZXIgIExpZWJlICB6dSAgdHVuLCAgc29uZGVybiAgbWVociAgbWl0CitBdXMtRGVyLUZlcm5lLSBTY2htYWNodGVuLiIKKworIk9oPyIgVWxvcyBTdGltbWUgYmVrYW0gZWluZSBkZXV0bGljaGUgU3BpdHplLiAiRHUgdmVybWlzc3QgbWljaCAgYWxzbyAgbmljaHQsCit3ZW5uIGljaCBuaWNodCBiZWkgZGlyIGJpbj8iCisKKyJEdSBiaXN0IGRvY2ggbmllIHZvbiBtaXIgd2VnLiIsIHZlcnRlaWRpZ3RlICBzaWNoICBBenp1cm8uICAiVW5kICB1ZWJlcmhhdXB0LAorbGVuayBuaWNodCB2b20gVGhlbWEgYWIuIgorCisiV2VyIGxlbmt0IGRlbm4gIGhpZXIgIGFiPyAgV2FocnNjaGVpbmxpY2ggIHZlcmdudWVnc3QgIGR1ICBkaWNoICBvaG5laGluICBtaXQKK2lyZ2VuZGVpbmVtIFNwYXR6ZW5mbGl0dGNoZW4sIHdlbm4gaWNoIG1hbCBuaWNodCBpbiBkZXIgTmFlaGUgYmluLiIKKworQXp6dXJvLCBkZXIgZ2VuYXUgIHd1c3N0ZSwgIHdlbGNoZSAgUmljaHR1bmcgIGRpZSAgRGlza3Vzc2lvbiAgbmVobWVuICB3dWVyZGUsCitiZXRyYWNodGV0ZSBiZXRvbnQgaW50ZXJlc3NpZXJ0IGRpZSBWb3JnYWVuZ2UgaW5uZXJoYWxiIFJvbWVvcyBaaW1tZXIgdW5kICB6b2cKK2VzIHZvciwgbmljaHQgenUgYW50d29ydGVuLgorCitCZW5ldm9saW8gaGF0dGUgZXMgaW56d2lzY2hlbiBnZXNjaGFmZnQsIFJvbWVvIGRhenUgenUgdWViZXJyZWRlbiwgZGllIFR1ZXIgenUKK29lZmZuZW4gdW5kIGlobiBlaW56dWxhc3Nlbi4gIkd1dGVuICBNb3JnZW4sICBSb21lby4iLCAgYmVncnVlc3N0ZSAgZXIgIHNlaW5lbgorVmV0dGVyIGZyb2VobGljaC4KKworIklzdCBlcyBkZW5uIE1vcmdlbj8iLCBmcmFndGUgUm9tZW8gZHVlc3Rlci4KKworIlVuZCB3YXMgZnVlciBlaW5lci4gTG9zLCBtYWNoIGRpZSBWb3JoYWVuZ2UgYXVmIHVuZCBzY2hhdSBkaXIgZGVuIHd1bmRlcmJhcmVuCitTb25uZW5zY2hlaW4gYW4uIEhvZXIgbnVyLCB3aWUgZGllIFZvZWdlbCBzaW5nZW4uIiBCZW5ldm9saW8gcmlzcyBkaWUgc2Nod2VyZW4KK1ZvcmhhZW5nZSB6dXIgU2VpdGUgdW5kIGVyYmxpY2t0ZSBkaWUgYmVpZGVuIEtyYWVoZW4uICJOYWphLCB2aWVsbGVpY2h0IHNpbmdlbgorc2llIG5pY2h0IGdhbnogc28gc2Nob2VuLCBhYmVyIGRpZSBTb25uZSBzY2hlaW50IGF1ZiBqZWRlbiBGYWxsLiIKKworIkVzIGlzdCBzY2hyZWNrbGljaCwgYWJlciBpY2ggYmluIHNvIHRyYXVyaWcsIGRhc3MgaWNoIGdhciBuaWNodCAgc2VoZW4gIHdpbGwsCit3aWUgZGllIFNvbm5lIHNjaGVpbnQsIGRlbm4gZGFzIHNpZWh0IHNvIGF1cywgYWxzIHdvbGxlIHNpZSBtaWNoIHZlcnNwb3R0ZW4uIgorCisiS2VpbmVzd2VncyAgd2lsbCAgc2llICBkYXMuICBTaWUgIGhhdCAgbmljaHRzICBhbmRlcmVzICBpbSAgU2lubiwgIGFscyAgIGRpY2gKK2F1Znp1aGVpdGVybi4iCisKKyJJc3QgZXIgaXJyZT8iLCBmcmFndGUgVWxvIGxlaXNlLgorCisiQWJlciBuZWluLiBBbiAgaWhtICBpc3QgIGJsb3NzICBlaW5lICBLcmFua2Vuc2Nod2VzdGVyICB2ZXJsb3JlbiAgZ2VnYW5nZW4uIiwKK2JlbWVya3RlIEF6enVyby4KKworIldhcyBtYWNodCBkaWNoIGRlbm4gc28gdHJhdXJpZywgUm9tZW8/IFdpbGxzdCBkdSAgZXMgIG1pciAgbmljaHQgIGVyemFlaGxlbj8iCitmcmFndGUgQmVuZXZvbGlvLgorCisiRXIgaXN0IHdpcmtsaWNoIGVpbiBTY2hhZXR6Y2hlbi4iIEJlbmV2b2xpbyAgaGF0dGUgIHVuendlaWZlbGhhZnQgIFVsb3MgIEhlcnoKK2Z1ZXIgc2ljaCBnZXdvbm5lbi4KKworIkVpbiAgUHN5Y2hpYXRlciAga29lbm50ZSAgZXIgIGF1Y2ggIHNlaW4uIiAgQXp6dXJvICBrb25udGUgIGRlbSAgZnJldW5kbGljaGVuCitCZW5ldm9saW8gbmljaHQgZ2FueiBzbyB2aWVsIGFiZ2V3aW5uZW4uCisKKyJNaXIgaXN0ICBsYW5nd2VpbGlnLCAgd2VpbCAgaWNoICBkYXMgIG5pY2h0ICBoYWJlLCAgd2FzICBtaXIgIGRpZSAgTGFuZ2V3ZWlsZQordmVydHJlaWJ0LiIsIGFudHdvcnRldGUgUm9tZW8uCisKKyJFciB3aWxsIGVpbmUgTW9kZWxsZWlzZW5iYWhuPyIsIHZlcm11dGV0ZSBBenp1cm8uCisKK0JlbmV2b2xpbyBoYXR0ZSBvZmZlbmJhciBlYmVuZmFsbHMgIGtlaW5lICBWb3JzdGVsbHVuZwl2b24gIGRlbSwgIHdhcwlzZWluZW0KK0ZyZXVuZCBkaWUgTGFuZ2V3ZWlsZSB2ZXJ0cmVpYmVuIGtvZW5udGUuICJXYXMgbGllYnN0IGR1IGRlbm4gc28gc2Vocj8iCisKKyJOaWNodCB3YXMsIHNvbmRlcm4gd2VuLiIKKworIkxpZWJlIGlzdCBkb2NoIGV0d2FzIHNjaG9lbmVzLCB3YXJ1bSBtYWNodCBzaWUgZGljaCBibG9zcyBzbyB0cmF1cmlnPyIKKworIldlaWwgaWNoIExpZWJlIGdlYmUgdW5kICBrZWluZSAgYmVrb21tZS4gIEljaCAgZnVlaGxlICBtaWNoICB3aWUgIGVpbmUgIGxlZXJlCitGbGFzY2hlLiBEYXMsIHdhcyBlaW5tYWwgaW4gbWlyIHdhciwgd29sbHRlbiBhbGxlIGhhYmVuLCBhYmVyICBqZXR6dCwgIGRhICBpY2gKK251ciBub2NoIGVpbmUgbGVlcmUgRmxhc2NoZSBiaW4sIGdpYnQgIGVzICBuaWVtYW5kZW4gIG1laHIsICBkZXIgIG1pY2gJd2llZGVyCitmdWVsbGVuIHd1ZXJkZS4iCisKKyJFaW5lIEZsYXNjaGUgaXN0IGVyIGFsbGVyZGluZ3MuIiwgYmVtZXJrdGUgVWxvLgorCisiTmVpbiwgaXN0IGVyIG5pY2h0LiIsIHdpZXMgQmVuZXZvbGlvIHNpZSBzdHJlbmcgenVyZWNodC4gIk1vbWVudCwgIHNlaXQgIHdhbm4KK2tvZW5uZW4gS3JhZWhlbiByZWRlbj8iCisKKyJTZWl0IE1hZW5uZXIgRmxhc2NoZW4gc2luZC4iLCB2ZXJzZXR6dGUgVWxvIHNjaG5pcHBpc2NoLgorCisiTGFzcyBkb2NoIGRpZSBibG9lZGVuIEtyYWVoZW4sIEJlbmV2b2xpby4iIFJvbWVvIG1vY2h0ZSBlcyAgZ2FyICBuaWNodCwgIHdlbm4KK21hbiBzaWNoIG5pY2h0IHNvIGxlaWNodCB2b24gaWhtIGFibGVua2VuIGxpZXNzLgorCitBenp1cm8gc3RpZXNzIFVsbyBtaXQgZWluZW0gZ2Vrb25udGVuIFNjaHVicyB2b20gQXN0IHVuZCB0cmllYglzaWUgIHp1ICBlaW5lbQorQmF1bSBpbiBzaWNoZXJlciBFbnRmZXJudW5nIHZvbiBSb21lb3MgWmltbWVyLiAiSGFsdCAgYmxvc3MgIGRlaW5lbiAgdm9ybGF1dGVuCitTY2huYWJlbCEiCisKKyJFciBoYXQgdW5zIGJsb2VkIGdlbmFubnQuIgorCisiSmEuIgorCisiVW5kIGRhcyBhZXJnZXJ0IG1pY2guIgorCisiQWhhPyIKKworIldlaWwgaWNoIG5pY2h0IGJsb2VkIGJpbi4iCisKKyJEdSBkYXJmc3QgaW4gX2locmVtXyBCZWlzZWluIHRyb3R6ZGVtIGtlaW5lICBLb21tZW50YXJlICBtYWNoZW4sICBkYXMgIHdlaXNzdAorZHUuIgorCisiUGFoLiIKKworIldlaXNzdCBkdSBlcywgb2RlciBuaWNodD8iCisKKyJKYSwgaWNoIHdlaXNzIGVzLiBBYmVyIGVyIGlzdCB3aXJrbGljaCBlaW5lIEZsYXNjaGUuIgorCisiRGFzIGhhYmUgaWNoIG5pY2h0IGJlc3RyaXR0ZW4uIFdlbm4gZHUgamV0enQgZGVpbmVuIHZvcmxhdXRlbiBTY2huYWJlbCBoYWx0ZW4KK2thbm5zdCwga29lbm5lbiB3aXIgd2llZGVyIHp1cnVlY2sgdW5kIHVucyBkZW4gUmVzdCBhbnNlaGVuLiIKKworVWxvIGFudHdvcnRldGUgbmljaHQsIHNvbmRlcm4gZmxvZyB3aWVkZXIgenUgaWhyZW0gQXN0IHVuZCBzcGFlaHRlICBkdXJjaCAgZGFzCitGZW5zdGVyIGF1ZiBkaWUgenVja2VuZGVuIFNjaHVsdGVybiBCZW5ldm9saW9zLgorCisiTGFjaHN0IGR1IG1pY2ggYXVzPyIsIGZyYWd0ZSBSb21lby4KKworIk1pdG5pY2h0ZW4uIiBCZW5ldm9saW9zIFN0aW1tZSBrbGFuZyBzbyBlcm5zdCwgZGFzcyAgc2VsYnN0ICBpbiAgVWxvICBad2VpZmVsCitlcndhY2h0ZW4uCisKKyJFaWdlbnRsaWNoIHdlaW5lIGljaC4iCisKKyJXYXJ1bSBkZW5uIGRhcz8iCisKKyJXZWlsIGR1IHNvIGFybSBkcmFuIGJpc3QsIGxpZWJlciBSb21lby4iCisKKyJIb2VyIGF1ZiwgYml0dGUuIFdlbm4gZHUgamV0enQgYXVjaCBub2NoIHdlaW5zdCwgZnVlaGxlICBpY2ggIG1pY2ggIG51ciAgbm9jaAorZWxlbmRlci4gV2VubiBkYXMgdWViZXJoYXVwdCBnZWh0LiIKKworIkphamEsIHNvIGdlaHQgZGFzIG1pdCBkZXIgTGllYmUuIiBCZW5ldm9saW8gZ3JpbnN0ZSBkdWVtbWxpY2guCisKKyJKYSwgZ2VuYXUgc28uIExpZWJlLCBkYXMgaXN0IGVpbiBNZWVyLiIKKworIkVpbiBNZWVyPyBXaWUga29tbXN0IGR1IGRlbm4gZGFyYXVmPyIKKworQXp6dXJvIGxpZXNzIHNpY2ggbmViZW4gVWxvIG5pZWRlci4KKworIkFjaHR1bmcsIFJvbWVvIHdpcmQgcG9ldGlzY2guIiwgd2FybnRlIFVsbyBpaHJlbiBHZWZhZWhydGVuLgorCisiRWluIE1lZXIsIHdlaWwgVHJhZW5lbiBzYWx6aWcgc2luZCB1bmQgIHJlaWNobGljaCAgZmxpZXNzZW4sICB3ZW5uICBMaWViZSAgaW0KK1NwaWVsIGlzdC4iCisKKyJBaGEuIEphLCBpY2ggZ2xhdWJlLCBpY2ggd2Vpc3MsIHdhcyBkdSBtZWluc3QuIiBCZW5ldm9saW8gd2FyIHByb3NhaXNjaGVyIGFscworc2VpbiBGcmV1bmQuCisKKyJJY2ggZ2xhdWJlLCBpY2ggbWFjaGUgIGVpbmVuICBTcGF6aWVyZ2FuZy4iICBSb21lbyAgbWFjaHRlICBrZWluZSAgQW5zdGFsdGVuLAorYXVmenVzdGVoZW4sIHNvbmRlcm4gc2V1Znp0ZSBudXIgdGllZi4KKworIkltbWVyIGxhbmdzYW0sIGljaCB3ZWlzcyBkb2NoIG5vY2ggbmljaHQgYWxsZXMsIGRhcyAgd2FlcmUgIGdlbWVpbiwgIHdlbm4gIGR1CittaWNoIGpldHp0IHNvIHN0ZWhlbiBsaWVzc2VzdC4iCisKKyJJY2ggYmluIHNvd2llc28gbmljaHQgaGllci4gRGVyIGVjaHRlIFJvbWVvIGlzdCB3b2FuZGVycy4iCisKKyJVbmQgd28/IgorCisiRHUgd2lsbHN0IHdvaGwgd2lzc2VuLCB3aWUgc2llIGhlaXNzdD8iCisKKyJHdXQgZ2Vmb2xnZXJ0LCBsaWViZXIgV2F0c29uLiIKKworIkljaCB3ZXJkZSBub2NoIHdhaG5zaW5uaWchIiwgc3RvZWhudGUgQXp6dXJvLgorCisiV2FzIGlzdCBkZW5uIGxvcz8iIFVsbyB3YXJmIGlobSBlaW5lbiB2ZXJ3aXJydGVuIEJsaWNrIHp1LgorCisiRGF1ZXJuZCB6aXRpZXJlbiBzaWUgYXVzIGZyZW1kZW4gUXVlbGxlbiwgZGFzIG1hY2h0IG1pY2ggaXJyZS4iCisKKyJLZWluZSBTb3JnZSwgZHUgd2lyc3QgZGljaCBuaWNodCBhbmRlcnMgZnVlaGxlbiBhbHMgdm9yaGVyLiIgVWxvIGdyaW5zdGUuCisKKyJBbHNvIHNvbGwgaWNoIGRpciB2b3JzdG9laG5lbiwgd2llICBzaWUgIGhlaXNzdD8iLCAgZnJhZ3RlICBSb21lbyAgbWl0ICBlaW5lbQorR3JpbnNlbi4KKworIkVzIHJlaWNodCwgd2VubiBkdSBlcyBtaXIgZWluZmFjaCBzYWdzdC4iLCBhbnR3b3J0ZXRlIEJlbmV2b2xpby4KKworIktsYXIsIGljaCBtYWNoZSBqZXR6dCB2b2VsbGlnIGVpbmZhY2ggbWVpbiBUZXN0YW1lbnQuIgorCisiTmFuYSwgc28gd2VpdCBpc3QgZXMgbm9jaCBuaWNodC4gRHUgYmlzdCBqYSBub2NoICBncnVlbiAgaGludGVyICBkZW4gIE9ocmVuLiIKK0JlbmV2b2xpbyBsYWNodGUuCisKKyJQZmZ0LiIsIG1hY2h0ZSBSb21lby4gIlNvIGdydWVuIGJpbiBpY2ggbmljaHQgbWVociwgZGFzcyBpY2ggbmljaHQgd2Vpc3MsIHdpZQorbWFuIGxpZWJ0LiIKKworIkRhcyB3aWVkZXJ1bSBoYWJlIGljaCBuaWNodCBiZXp3ZWlmZWx0LiBOdW4gc2FnIGVuZGxpY2gsIHdpZSBoZWlzc3Qgc2llPyIKKworIlNpZSBpc3QgZWluZSBGcmF1LiIKKworIkhtLCAgZGFjaHRlICBpY2ggIG1pci4gIFp1bWluZGVzdCAgaGF0dGUgIGljaCAga2VpbmVuICBHcnVuZCwgIGV0d2FzICBhbmRlcmVzCithbnp1bmVobWVuLiIKKworUm9tZW8gc3RyZWNrdGUgc2VpbmVtIFZldHRlciBkaWUgWnVuZ2UgaGVyYXVzLiAiVW5kIHNjaG9lbiBpc3Qgc2llIGF1Y2guIgorCisiRXMgd2FyIG1pciBlYmVuZmFsbHMga2xhciwgZGFzcyBkdSBrZWluIEtvc3R2ZXJhZWNodGVyIGJpc3QuIgorCisiTmVpbiwgaWNoIHZlcmh1bmdlcmUgbGllYmVyLiBTaWUgd2lsbCBtaWNoIG5pY2h0LiIKKworIktsdWcgdW5kIGdlc2NoaWNrdCBpc3Qgc2llIGFsc28gYXVjaCBub2NoPyIKKworIlNvIGdlc2NoaWNrdCwgZGFzcyBDdXBpZG9zIFBmZWlsIHNpZSBuaWNodCB0cmlmZnQuIEltbWVyIGR1Y2t0IHNpZSBzaWNoIHdlZy4iCisKK1dpciAgd29sbGVuICBoaWVyICBhbm1lcmtlbiwgIGRhc3MgICBhdWNoICAgQ3VwaWRvICAgenUgICBqZWRlciAgIGFuc3RhZW5kaWdlbgorTGllYmVzZ2VzY2hpY2h0ZSBnZWhvZXJ0LiBBdWNoIHp1IGRlbiB1bmFuc3RhZW5kaWdlbiwgYWJlciB2b24gZGVuZW4gcmVkZW4gd2lyCitoaWVyIGxpZWJlciBuaWNodCwgZGVubiBlcyBtYWcgamEgc2VpbiwgZGFzcyB1bnRlciAgSWhuZW4sICBsaWViZSAgTGVzZXJpbm5lbiwKK2xpZWJlIExlc2VyLCBNaW5kZXJqYWVocmlnZSBzaW5kLiBLZW5uZW4gU2llIEN1cGlkbz8gRGFzIGlzdCBkZXIga2xlaW5lLCBkaWNrZQordW5kIG5hY2t0ZSBCZW5nZWwsIGRlbiBTaWUgYXVmIGZhc3QgamVkZW0gYmFyb2NrZW4gIEJpbGQgIGJldHJhY2h0ZW4gIGtvZW5uZW4uCitEYW1hbHMgaGF0dGUgbWFuIGVpbmUgVm9ybGllYmUgZnVlciBkYXMgS2VybGNoZW4sIHdlaWwgZWluICBuYWNrdGVyICBTYWV1Z2xpbmcKK21pdCBlaW5lbSAgQm9nZW4gIGVpbmZhY2ggIGx1c3RpZyAgYXVzc2llaHQuICBBdWYgIGRpZXNlICBXZWlzZSAgZ2FiZW4JdW5zZXJlCitWb3JmYWhyZW4gZGVtIGltIEdydW5kZSBlcm5zdGVuIERpbmcgTGllYmUgbm9jaCBlaW5lIGFtdWVzYW50ZSBXZW5kdW5nLiAgQml0dGUKK3ZlcndlY2hzZWxuIFNpZSB1bnNlcmVuIGtsZWluZW4gRnJldW5kIG5pY2h0IG1pdCBkZW4gIEVuZ2VsbiwgIGRpZSAgc2luZCAgendhcgorYXVjaCBuYWNrdCwga2xlaW4gIHVuZAlkaWNrLCAgaGFiZW4gIGFiZXIgIGtlaW5lbiAgQm9nZW4gIGluICBkZW4gIHB1bW1lbGlnZW4KK0ZhZXVzdGNoZW4uCisKK1JvbWVvIHN0ZWxsdCBzaWNoIEN1cGlkbyBub2NoIG5pY2h0IGdhbnogc28gZGljayB2b3IsIGRhZnVlciBzaW5kIHNlaW5lICBBdWdlbgordmVyYnVuZGVuLiBadSAgUm9tZW9zICBaZWl0ZW4sCWluICBqZW5lciAgbXl0aGlzY2hlbiAgdW5kICBzbwlnYW56ICB1bmQgIGdhcgordW53aXJrbGljaGVuIFplaXQsIHNhaCBDdXBpZG8gbm9jaCBuaWNodCwgd2VuIGVyIG1pdCBzZWluZW4gUGZlaWxlbiB0cmFmLiAgTWFuCitrb2VubnRlIGRlbmtlbiwgZGFzcyBkaWVzIHp1IGFsbGVybGVpIFZlcndpcnJ1bmcgZ2VmdWVocnQgIGhhYmVuICBtdXNzLCAgZXR3YSwKK3dlbm4gc2VpbiAgUGZlaWwgIGVpZ2VudGxpY2ggIGRlbSAgU2NoYWVmZXIgIGdhbHQsICBkZXIgIHVuYXVmbWVya3NhbWUJQmVuZ2VsCithbGxlcmRpbmdzIGVpbmVzIGRlciBTY2hhZmUgdHJhZiwgZG9jaCBzY2hlaW50IGRpZXMgc28gc2VsdGVuIGRlciBGYWxsIGdld2VzZW4KK3p1IHNlaW4sIGRhc3MgdW5zIHZvbiBzb2xjaGVuICBHZXNjaGVobmlzc2VuICBuaWNodHMgIHVlYmVybGllZmVydCAgd3VyZGUuICBTbworbXVlc3NlbiB3aXIgYW5uZWhtZW4sIGRhc3MgZGFtaXQgbGVkaWdsaWNoIGRhcyBTcHJpY2h3b3J0ICBpbGx1c3RyaWVydAl3ZXJkZW4KK3NvbGwsIGRhcyBzYWd0OiBXbyBkaWUgTGllYmUgaGluZmFlbGx0LCBkYSB3YWVjaHN0IGtlaW4gR3JhcyBtZWhyLgorCisiU2NobGltbWVyIG5vY2guIiBKZXR6dCBzdG9laG50ZSBSb21lbyB3aXJrbGljaC4gIlNpZSBpc3QgIGVpbmUgIHdhaHJlICBEaWFuYSwKK3dhcyBkYXMgQXVzd2VpY2hlbiBhbmdlaHQuIgorCitTaWUgZXJpbm5lcm4gc2ljaCBzaWNoZXIgYW4gRGlhbmEsIGxpZWJlIExlc2VyaW4sIGxpZWJlciBMZXNlci4gIFNpZSAgd2FyICBkaWUKK0dvZXR0aW4gZGVyIEphZ2QgdW5kIEp1bmdmcmF1IHZvbiBCZXJ1Zi4gTmljaHRzIHVuZCBuaWVtYW5kICBrb25udGUgIHNpZSAgZGF6dQorYnJpbmdlbiwgc2ljaCBtaXQgZWluZW0gTWFubiwgZ2xlaWNoIG9iICBHb3R0ICBvZGVyICBNZW5zY2gsICBlaW56dWxhc3Nlbi4gIFNvCitzY2hsaW1tIHRyaWViIHNpZSBlcywgZGFzcyBlaW4JTWFubiAgenVyICBTdHJhZmUsICB3ZWlsICBlciAgaWhyICBiZWltICBCYWRlbgorenVnZXNlaGVuIGhhdHRlLCBpbiBlaW5lbiBIaXJzY2ggdmVyd2FuZGVsdCAgdW5kICB2b24gIHNlaW5lbiAgZWlnZW5lbglIdW5kZW4KK2dlZnJlc3NlbiB3dXJkZS4gRGllc2UgQW5la2RvdGUgc2FndCBlYmVuc292aWVsIHVlYmVyICBkaWUgIEludGVsbGlnZW56ICBlaW5lcworSHVuZGVzIHdpZSB1ZWJlciBkaWUgIGRlcyAgTWFubmVzICBhdXMsICBkZW5uICBiZWlkZSAgdmVyZ2Fzc2VuICBpaHJlICBnZXNhbXRlCitFcnppZWh1bmcuIERpZSBIdW5kZSwgYWxzIHNpZSBkZW4gSGlyc2NoIHJvY2hlbiwgZGVyIE1hbm4sICBhbHMgIGVyICBkaWUgIEZyYXUKK3NhaC4KKworIkVpbmUgRGlhbmEsIHdpZT8gRGFubiBoYXQgc2llIHdvaGwgbGViZW5zbGFuZ2UgS2V1c2NoaGVpdCBnZWxvYnQ/IgorCitSb21lbyBnYWIgZWluIEdlcmFldXNjaCB2b24gc2ljaCwgZGFzcyBkZW0gZGVzCWdlc3RlbGx0ZW4gIEhpcnNjaGVzICBhZWhubGljaAorc2VpbiBtb2NodGUuICJXYXMgc29sbCBpY2ggIG51ciAgbWFjaGVuPyAgU2llICBpc3QgIHd1bmRlcnNjaG9lbiAgdW5kICBlcyAgaXN0CitnZXJhZGV6dSBlaW4gRnJldmVsLCBkYXNzIHNpZSBpbnMgS2xvc3RlciB3aWxsLCBkZW5uIGRhbWl0IHZlcnppY2h0ZXQgc2llIGF1Y2gKK2RhcmF1ZiwgaWhyZSBTY2hvZW5oZWl0IGFuIGRpZSBOYWNod2VsdCB6dSB1ZWJlcmxpZWZlcm4uIgorCisiTm9jaCBpc3QgbmljaHQgYWxsZXIgVGFnZSBBYmVuZC4gVmllbGxlaWNodCBiZWtvbW10IHNpZSBqYSB0cm90emRlbSBLaW5kZXIuIgorCisiVHJvdHogZGVyIEtldXNjaGhlaXQ/IERhcyBnZWh0IG5pY2h0LiIKKworIlN0aW1tdC4iLCBncmluc3RlIFVsby4gIkRhcyBndXRlIE1hZWRjaGVuIGlzdCB3b2hsIGxlc2Jpc2NoLCB3aWU/IgorCitBenp1cm8genVja3RlIGRpZSBTY2h1bHRlcm4uICJXZXIgd2Vpc3MgZGFzIHNjaG9uPyIKKworIkhtLCB3ZW5uIGljaCBudXIgdW50ZXIgRnJhdWVuIHNlaW4gd29sbHRlLCBnaW5nZSBpY2ggYXVjaCBpbnMgS2xvc3Rlci4iCisKK0F6enVybyBsYWNodGUuICJTcGllbHQgZXMgZWluZSBSb2xsZT8gSWNoIG1laW5lLCB3ZW5uIHNpZSBpaG4gbmljaHQgd2lsbCwgZGFubgora2FubiBlciBzaWNoIGF1ZiBkZW4gS29wZiBzdGVsbGVuIHVuZCBtaXQgZGVuIEZ1ZXNzZW4gSHVycmEgc2NocmVpZW4sIGVyICB3aXJkCituaWNodCBlcmhvZXJ0LiIKKworIkdyYXVzYW1lIFdlbHQuIiwgc2V1Znp0ZSBSb21lbyB2b24gZHJpbm5lbi4gIkljaCBrYW5uIGVpbmZhY2ggIG5pY2h0ICBhbiAgc2llCitoZXJhbmtvbW1lbi4gU2llIGlzdCBzY2hvZW4sIHNpZSBpc3Qga2x1ZyB1bmQgaWhyZSAgV2VzdGUgIGlzdAlzbyAgd2Vpc3MgIHdpZQorU2NobmVlLiBOaWNodHMsIGFiZXIgYXVjaCBnYXIgIG5pY2h0cyAgZ2lidCAgbWlyICBlaW5lCU1vZWdsaWNoa2VpdCwgIHNpZSAgenUKK2VycHIuLi4iIEVyIHVudGVyYnJhY2ggc2ljaCBzY2huZWxsLgorCisiV29sbHRlIGVyIGViZW4gZXJwcmVzc2VuIHNhZ2VuPyIgZnJhZ3RlIFVsby4KKworIkljaCBuZWhtZSBlcyBhbi4gV2FydW0/IgorCisiTWFlbm5lciEiCisKKyJEdSBtZWluc3QgTWVuc2NoZW4uIiBrb3JyaWdpZXJ0ZSBBenp1cm8gc2llLgorCisiSWNoIG1laW5lIE1hZW5uZXIuIFdlbm4gaWNoIG5vY2ggZWluIGVpbnppZ2VzIE1hbCBob2VyZSwgZGFzcyBlaW4gIE1hbm4gIGVpbmUKK0ZyYXUgcmVpbiB1bmQga2V1c2NoIG5lbm50LCB3ZWlzcyBpY2gsIHdhcyBpY2ggZGF2b24genUgaGFsdGVuIGhhYmUuIgorCisiU28gdHlwaXNjaCBpc3QgUm9tZW8gbnVuIGF1Y2ggd2llZGVyIG5pY2h0LiIKKworVWxvIHNjaG9iIGRlbiBFaW53YW5kIG1pdCBlaW5lciB1bmdlZHVsZGlnZW4gQmV3ZWd1bmcgaWhyZXMgRmx1ZWdlbHMgYmVpc2VpdGUuCisiSWNoIHdlcmRlIG5pZSB3aWVkZXIgZWluZW0gTWFubiB3ZWl0ZXIgdHJhdWVuLCBhbHMgaWNoIGlobiBzcHVja2VuIGthbm4uIgorCisiV2lyIGtvZW5uZW4gbmljaHQgc3B1Y2tlbiwgd2lyIHNpbmQgVm9lZ2VsLiIKKworIkViZW4uIgorCitBenp1cm8gc2NodWV0dGVsdGUgZGVuIEtvcGYgdWViZXIgc292aWVsICBVbnZlcm51bmZ0LiAgIkR1ICBicmF1Y2hzdCAgamEgIGF1Y2gKK2tlaW5lbSBNYW5uIHp1IHRyYXVlbiwgZHUgaGFzdCBqYSBtaWNoLiIKKworIlVtIHNvIHNjaGxpbW1lci4iCisKKyJIZSEiLCBtYWNodGUgQXp6dXJvLgorCitCZW5ldm9saW8gYmV0cmFjaHRldGUgc2VpbmVuIEZyZXVuZCBiZXNvcmd0LiAiTGFzcyBkaXIgZWluZW4gVGlwIGdlYmVuLCBSb21lby4KK1Zlcmdpc3Mgc2llLiIKKworIlZlcmdlc3Nlbj8gU2llPyBHZW5hdXNvIGd1dCBrb2VubnRlIGljaCBkYXMgQXRtZW4gdmVyZ2Vzc2VuLiIKKworIkthbm4gZXIgZG9jaCBnYXIgbmljaHQuIiwgbWVpbnRlIEF6enVyby4KKworIkRhcyB3aWxsIGVyIGRhbWl0IGphIHNhZ2VuLiIsIGluZm9ybWllcnRlIGlobiBVbG8uCisKKyJJY2ggc2FnIGRpciwgd2llIGR1IHNpZSB2ZXJnZXNzZW4ga2FubnN0LiIgQmVuZXZvbGlvIHNhaCBzaWNoIGdlbm9ldGlndCwgIGVpbgord2VuaWcgbGF1dGVyIHp1IHNwcmVjaGVuLCB1bSBkYXMgR2VzY2hyZWkgZGVyIGJlaWRlbiBLcmFlaGVuIHZvciAgZGVtICBGZW5zdGVyCit6dSB1ZWJlcnRvZW5lbi4gIlNjaGF1IGRpY2ggZWluZmFjaCBlaW4gd2VuaWcgdW0uIEFuZGVyZSAgTXVldHRlciAgaGFiZW4gIGF1Y2gKK3NjaG9lbmUgVG9lY2h0ZXIuIgorCisiQWNoLCBkYW1pdCBtYWNoc3QgZHUgZXMgamEgbnVyIG5vY2ggc2NobGltbWVyLiBXZW5uIGljaCBhbmRlcmUgIEZyYXVlbiAgc2VoZSwKK3ZlcmdsZWljaGUgaWNoIHNpZSBpbW1lciBtaXQgaWhyIHVuZCBkYW5uIGhhYmVuICBkaWUgIGFuZGVyZW4gIHZlcmxvcmVuLiAgTGFzcworbWljaCBsaWViZXIgYWxsZWluLCBpY2ggd2lsbCBpbiBtZWluZW0gU2NobWVyeiBlcnRyaW5rZW4uIgorCisiRXIga29lbm50ZSBpaG4gZXJzYWV1ZmVuLiIsIHNjaGx1ZyBVbG8gdm9yLgorCisiSW4gU2NobmFwcz8iLCBmcmFndGUgQXp6dXJvLgorCisiV29yaW4gc29uc3Q/IE1laW5zdCBkdSwgZXIgdmVyc3VjaHRlLCBpaG4gbWl0IGVpbmVtIFN0ZWluIHp1c2FtbWVuICBpbiAgZWluZW4KK1NhY2sgenUgc3RlY2tlbiB1bmQgaW4gZGVuIEZsdXNzIHp1IHdlcmZlbj8iCisKK0JlbmV2b2xpbyBrYW5udGUgZGFzIExlaWQgZGVyIEp1Z2VuZCB1bmQgZ3JpbnN0ZSB2ZXJzY2hhZW10LiAgIldhcnRlICBhYiwgIGljaAorbGFzc2UgbWlyIHdhcyBlaW5mYWxsZW4uIgorCitLYXVtIGhhdHRlIEJlbmV2b2xpbyBkZW4gUmF1bSB2ZXJsYXNzZW4sIGFscyBSb21lbyBzaWNoIGF1ZiBkYXMgQmV0dCB3YXJmICB1bmQKK3p1bSBTdGVpbmVyd2VpY2hlbiBzY2hsdWNoenRlLgorCisiU28gZWluIEphbW1lcmxhcHBlbi4iLCBiZW1lcmt0ZSBVbG8uCisKKyJOdW4gaG9lciBzY2hvbiBhdWYsIGVyIGlzdCBub2NoIGp1bmcgdW5kIGVyIGlzdCB2ZXJsaWVidC4iCisKKyJTY2hvbiBndXQsIGRhcyBpc3QgZGVyIEZyZWlicmllZiBmdWVyIGplZGUgbnVyIGRlbmtiYXJlIEJsb2VkaGVpdC4iCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTQgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNDFkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU0CkBAIC0wLDAgKzEsMjU4IEBACitERVIgRVJTVEUgQUtUCisJICBESUUgWldFSVRFIFNaRU5FCisKK1VsbyB1bmQgQXp6dXJvIGJlc2NobG9zc2VuLCBSb21lbyBuaWNodCB3ZWl0ZXIgZGFiZWkgenV6dXNlaGVuLCAgd2llICBlciAgc2ljaAorc2VpbmVtIExpZWJlc2t1bW1lciBoaW5nYWIsIHNvbmRlcm4gbGllYmVyIHp1bSBIYXVzIENhcHVsZXRzICB6dSAgZmxpZWdlbi4gIEltCitXb2huemltbWVyIGRlciBWaWxsYSBDYXB1bGV0cyBmYW5kZW4gc2llIGRlbiBpbnp3aXNjaGVuIGFuZ2V6b2dlbmVuIEhhdXNoZXJyZW4KK21pdCBzZWluZW0gRnJldW5kIFBhcmlzLgorCisiTm9jaCBzbyBlaW4gU3R1dHplci4iLCBiZW1lcmt0ZSBBenp1cm8gIHVuZCAgZGV1dGV0ZSAgbWl0ICBkZW0gIFNjaG5hYmVsICBhdWYKK1BhcmlzLgorCisiV2FzIGhhc3QgIGR1ICBkZW5uICBnZWdlbiAgaWhuPyIsICBmcmFndGUgIFVsby4gICJJY2ggIGZpbmRlLCAgZXIgIGhhdCAgZWluZW4KK2tuYWNraWdlbi4uLiIKKworIlVsbyEiCisKKyIuLi5BdXNkcnVjayBpbSBHZXNpY2h0LiIsIHNjaGxvc3MgVWxvIGxhaG0uCisKKyJTZWl0IHdhbm4gZ2VmYWxsZW4gZGlyICBkZW5uICBNZW5zY2hlbj8iICBBenp1cm8gIHZlcnN0YW5kICBzZWluZSAgR2VmYWVocnRpbgorbmljaHQuCisKKyJFcyBpc3QgZ3V0LCBkYXNzIGljaCBzbyBhbHQgYmluLiIsIHJhZXNvbmllcnRlIENhcHVsZXQgZHJpbm5lbi4KKworIlBmZnQuIiwgbWFjaHRlIEF6enVyby4gIkRhcyBuZW5udCBtYW4gZGFubiBhdXMgZGVyIE5vdCBlaW5lIFR1Z2VuZCBtYWNoZW4uIgorCitVbG8gZ3JpbnN0ZSBudXIgenVyIEFudHdvcnQuCisKKyJXZW5uIGljaCBqdWVuZ2VyIHdhZXJlLCBmaWVsZSBlcyBtaXIgd2FocnNjaGVpbmxpY2ggc2Nod2VyZXIsIGVuZGxpY2ggRnJpZWRlbgorbWl0IE1vbnRhZ3VlIHp1IGhhbHRlbi4iIENhcHVsZXQgc2V1Znp0ZS4KKworVWxvIGxhY2h0ZSBrcmFlY2h6ZW5kLiAiS2FubnN0IGR1IGRpciB2b3JzdGVsbGVuLCB3aWUgZXMgIGF1c3NhZWhlLCAgd2VubiAgZGllCitiZWlkZW4gYWx0ZW4gTWFlbm5lciBhdWZlaW5hbmRlciBsb3NnaW5nZW4/IgorCitBenp1cm8JbGFjaHRlCW1pdC4gICJOdXIgIHp1ICBndXQuICBXYWhyc2NoZWlubGljaCAgd3VlcmRlbiAgc2llICBzaWNoICAgbWl0CitQaWxsZW5kb2VzY2hlbiBiZXdlcmZlbi4iCisKKyJPZGVyIGlocmUgS3Jhbmtlbmdlc2NoaWNodGUgYXVmc2NocmVpYmVuLiIKKworQXp6dXJvIHNjaHVldHRlbHRlIHNpY2guICJBbHNvIF9kYXNfIHdhZXJlIGRhbm4gd2lya2xpY2ggenV2aWVsLiIKKworIkVzIGlzdCBzY2hvbiBlaW5lIFNjaGFuZGUsIGRhc3MgIGRlciAgYWx0ZSAgU3RyZWl0ICBpbW1lciAgbm9jaCAgZXhpc3RpZXJ0LiIsCittZWludGUgUGFyaXMuCisKKyJTbyAgZ2VodCAgZXMgIG51biAgZWlubWFsLiAgSXJnZW5kd2FubiAgbWFjaGVuICBzaWNoICBzb2xjaGUgICBTdHJlaXRpZ2tlaXRlbgorc2VsYnN0YWVuZGlnLiIsIGFudHdvcnRldGUgQ2FwdWxldC4KKworIkRhcyBlcnN0ZSB2ZXJudWVuZnRpZ2UgV29ydCwgZGFzcyBkZXIgQWx0ZSBzYWd0LiIgSGFldHRlIFVsbyBIYWVuZGUgIGFuc3RlbGxlCitkZXIgRmx1ZWdlbCBnZWhhYnQsIHNvIGhhZXR0ZSBzaWUgd29obCBCZWlmYWxsIGdla2xhdHNjaHQuCisKK1BhcmlzIG5pY2t0ZSBiZWRhZWNodGlnLiAiRGFtaXQgaGFzdCBkdSB3YWhyc2NoZWlubGljaCBSZWNodCwgIGFiZXIgIGxhc3MgIHVucwordm9uIGV0d2FzIGFuZ2VuZWhtZXJlbiByZWRlbi4gV2FzIGhhZWx0c3QgZHUgdm9uIGRlbSBHZWRhbmtlbiwgZGFzcyBpY2ggIEp1bGlhCitoZWlyYXRlPyIKKworQXp6dXJvIHdhcmYgZWluZW4ga3JpdGlzY2hlbiBCbGljayBhdWYJUGFyaXMuCSJBYnN0YW5kICBoYWVsdCAgZXIsICB3ZW5uICBlcgorc2NobGF1IGlzdC4iCisKKyJJbSBHcnVuZCBoYWJlIGljaCBuaWNodHMgZGFnZWdlbiwgYWJlciBzaWUgIGlzdCAgbWVpbmUgIGVpbnppZ2UgIFRvY2h0ZXIgIHVuZAorYXVzc2VyZGVtIG5vY2ggenUganVuZy4gU2llIHdlaXNzIGphIG5vY2ggbmljaHQgZWlubWFsLCB3YXMgIGVzICBiZWRldXRldCwgIHp1CitoZWlyYXRlbi4gV2FydGUsIGJpcyBzaWUgc2VjaHplaG4gaXN0LCBkYW5uIGhhc3QgZHUgbWVpbmVuIFNlZ2VuLiIKKworIkhtLCBvYiBzaWUgdWViZXJoYXVwdCBzY2hvbiB3ZWlzcywgd2llIGRhcyBtaXQgZGVuIEJpZW5jaGVuIHVuZCBkZW4gQmx1ZW1jaGVuCitpc3Q/IiwgZnJhZ3RlIHNpY2ggVWxvLgorCisiU2llIHdpcmQgZXMgc2Nob24gaGVyYXVzZmluZGVuLiBJbW1lcmhpbiBsYWVzc3QgZGVyIEFsdGUgIGlociAgamEgIG5vY2ggIHp3ZWkKK0phaHJlLiIKKworIkljaCBrZW5uZSBGcmF1ZW4sIGRpZSBqdWVuZ2VyIHdhcmVuIiwgd2FuZHRlICBQYXJpcyAgZWluICAidW5kICB0cm90emRlbSAgbWl0CitlaW5lbSBTdGFsbCB2b2xsZXIgS2luZGVyIGdsdWVja2xpY2ggd3VyZGVuLiIKKworIlNpZWggZGlyIG51ciBtZWluZSBGcmF1IGFuLiBEdSBoYXN0IG5pY2h0IHZpZWwgdm9uIGlociwgd2VubiBkdSBzaWUgIHNvICBqdW5nCitoZWlyYXRlc3QsIGdsYXViIG1pci4iIENhcHVsZXQgenVja3RlIG1pdCBkZW4gU2NodWx0ZXJuLgorCisiRGllc2VyLi4uIiBVbG8gaG9sdGUgdGllZiBMdWZ0LgorCisiQmVoZXJyc2NoIGRpY2guIiBBenp1cm8genVwZnRlIHNpZSBhbiBkZW4gU2Nod2FuemZlZGVybi4KKworUGFyaXMgbmlja3RlLiAiV2VubiBkdSBtZWluc3QsIHdlcmRlIGljaCBtaWNoIG5hdHVlcmxpY2ggZGFuYWNoIHJpY2h0ZW4uIgorCisiSWNoIGtvZW5udGUgaWhuZW4uLi4iLCBncm9sbHRlIFVsby4KKworQXp6dXJvIGFobnRlLCB3YXMgamV0enQga2FtLiAiVHVzIG5pY2h0LiIKKworVWxvIHNldWZ6dGUgdGllZiB1bmQgdmVyZmx1Y2h0ZSBlaW5tYWwgbWVociBkaWUgR29ldHRlciwgZGllIHNpZSB6d2FuZ2VuLCBlaW5lCitzdHVtbWUgQmVvYmFjaHRlcmluIHp1IHNlaW4uCisKKyJWZXJ0cmF1IG1pciwgaWNoIGhhYmUgc2Nob24gbWFuY2hlIEZyYXUgZ2VzZWhlbi4iLCBtZWludGUgQ2FwdWxldC4KKworIkRhcyBnbGF1YiBpY2ggZGVtIGFsdGVuIEJvY2suIiwgZ3JpbnN0ZSBBenp1cm8uCisKKyJGYW5nIGR1IG5pY2h0IGF1Y2ggbm9jaCBhbiwgZGljaCB3aWUgZWluIE1hY2hvIHp1IGJlbmVobWVuLiIsIGZ1aHIgVWxvICBpaHJlbgorR2VmYWVocnRlbiBhbi4KKworIkhldXRlIGFiZW5kIGdlYmUgaWNoIGVpbiBGZXN0LCBQYXJpcywgZGEga2FubnN0IGR1ICBKdWxpYSAga2VubmVubGVybmVuLiIgIEVyCit6d2lua2VydGUgc2VpbmVtIEZyZXVuZCB6dS4gIlNjaGF1IGRpY2ggdW0gIHVuZCAgc3VjaCAgZGlyICB1bnRlciAgZGVuICBqdW5nZW4KK0ZyYXVlbiBlaW5lbiBhbmdlbmVobWVuIFplaXR2ZXJ0cmVpYiBmdWVyIGRpZSBuYWVjaHN0ZW4gYmVpZGVuIEphaHJlLiBVbmQgIHdhcworSnVsaWEgYW5nZWh0LCBzbyB1bXdpcmIgc2llIGVpbiBiaXNzY2hlbiwgIGRhbWl0ICBzaWUgIGluICB6d2VpICBKYWhyZW4gIG5pY2h0CitnbGVpY2ggaW4gVHJhZW5lbiBhdXNicmljaHQsIGRhbm4ga2FubnN0IGR1IHNpZSBoYWJlbi4iCisKKyJXZW5uIGRhcyBkZWluZSBFbnRzY2hlaWR1bmcgaXN0LCB3ZXJkZSBpY2ggbWljaCBuYXR1ZXJsaWNoIGRhcmFuIGhhbHRlbi4iCisKK0NhcHVsZXQgd2FuZHRlIHNpY2ggdW0gdW5kIHNjaHVldHRlbHRlIGhlZnRpZyBlaW5lIGtsZWluZSBHbG9ja2UsIGRpZSBhdWYgIGRlbQorVGlzY2ggc3RhbmQuIFVsbyBoYWV0dGUgc2ljaCBhbSBsaWVic3RlbiBkaWUgT2hyZW4genVnZWhhbHRlbiwgZGVubiBkaWUgR2xvY2tlCit3YXIgb2ZmZW5zaWNodGxpY2ggZ2Vicm9jaGVuIHVuZCBiZXdpZXMsIGRhc3MgQ2FwdWxldCBhbSBmYWxzY2hlbiBFbmRlIHNwYXJ0ZS4KK0FscyBkZXIgRGllbmVyIGRhcyBaaW1tZXIgYmV0cmF0LCBkcnVlY2t0ZSBDYXB1bGV0IGlobSBlaW5lIExpc3RlIGluIGRpZSBIYW5kLgorIkdlaCB1bmQgc3VjaGUgYWxsIGRpZSBMZXV0ZSBhdWYsIGRpZSBhdWYgZGllc2VyIExpc3RlICBzdGVoZW4sICByaWNodGUgIGlobmVuCithdXMsIGRhc3Mgc2llIGhlcnpsaWNoIGVpbmdlbGFkZW4gc2luZC4iCisKK0RlciBEaWVuZXIgd2FyZiBlaW5lbiB6d2VpZmVsbmRlbiBCbGljayAgYXVmICBkaWUgIExpc3RlICBpbiAgc2VpbmVuICBIYWVuZGVuLgorIkFsbGU/IgorCisiV2FzIGRhY2h0ZXN0IGR1IGRlbm4/IiBDYXB1bGV0IHNjaHVldHRlbHRlIGRlbiBLb3BmIHVuZCBoYWt0ZSBzaWNoIGJlaSAgUGFyaXMKK3VudGVyLiAiS29tbSBtaXQsIHdpciB3ZXJmZW4gZWluZW4gQmxpY2sgYXVmIGRpZSBSb3Nlbi4iCisKKyJBbGxlLi4uIiBEZXIgRGllbmVyLCBkZW4gd2lyLCBvYndvaGwgIGVyICBrZWluZSAgd2VpdGVyZSAgQmVkZXV0dW5nICBoYXQgIHVuZAorZWlnZW50bGljaCB6dSBkZW4gTmFtZW5sb3NlbiBnZWhvZXJ0LCBKYW1lcyBuZW5uZW4gd29sbGVuLCBzdGFycnRlICBkaWUgIExpc3RlCithbiwgYWxzIGtvZW5uZSBlciBzaWUgbWl0IHNlaW5lbiBCbGlja2VuICBpbiAgQnJhbmQgIHNldHplbi4gICJBbGxlICBzb2xsICBpY2gKK2VpbmxhZGVuLiIsIGJydW1tdGUgZXIuICJBbHMgb2IgaWNoIGxlc2VuIGtvZW5udGUuIgorCitVbG8gendpbmtlcnRlIGJlbHVzdGlndC4gIk5hLCBzbyBlaW4gIFBlY2guICBEYSAgd2lyZCAgUGFyaXMgIGphICBoZXV0ZSAgYWJlbmQKK2FsbGVpbmUgc2Vpbi4iCisKKyJXYXJ0ZW4gd2lycyBhYi4iLCBhbnR3b3J0ZXRlIEF6enVyby4KKworIkpldHp0IHN0ZWggaWNoIGhpZXIsIGljaCBhcm1lciBUb3IuIiBKYW1lcyBzZXVmenRlLgorCisiSWNoIGhhc3NlIGVzLCB3ZW5uIHNpZSBkaWUgWml0YXRlIHZlcnRhdXNjaGVuLiIgQXp6dXJvIHNjaHVldHRlbHRlIHNpY2guICJXaWUKK3NvbGwgbWFuIGRlbm4gZGEgZGVuIFVlYmVyYmxpY2sgYmVoYWx0ZW4uIgorCitEaWUgS3JhZWhlbiBmb2xndGVuIEphbWVzLCBhbHMgZXIgbWl0IGRlciBMaXN0ZSBpbiBkZXIgSGFuZCBkYXMgSGF1cyB2ZXJsaWVzcywKK3VtIGplbWFuZGVuIHp1IGZpbmRlbiwgZGVyIGlobSBzYWd0ZSwgd2VuIGVyIGVpbmxhZGVuICBzb2xsdGUuCVdpZSAgc28gIHZpZWxlCitNZW5zY2hlbiB3YXIgYXVjaCBIZXJyIENhcHVsZXQgamVtYW5kLCBkZXIgRGluZ2VuLCBkaWUgZXIgIHNjaHdhcnogIGF1ZiAgd2Vpc3MKK3ZvciBzaWNoIHNhaCwgdW5iZWRpbmd0ZXMgVmVydHJhdWVuIHNjaGVua3RlLiBXZXIgamVkb2NoIGplICBlcmxlYnQgIGhhdCwgIHdpZQorR2VydWVjaHRlICB3aXJrZW4sICB3ZWlzcywgIGRhc3MgIGRhcyAgZ2VzcHJvY2hlbmUgIHVuZCAgZXJpbm5lcnRlICBXb3J0ICAgZGVtCituaWVkZXJnZXNjaHJpZWJlbmVuIGltbWVyIHVlYmVybGVnZW4gaXN0LiBHZXNjaGljaHRlLCBzbyB3aXNzZW4gIHdpciwgIGJlc3RlaHQKK251ciB6dSBlaW5lbSB2ZXJzY2h3aW5kZW5kIGtsZWluZW4gVGVpbCBpbiBEb2t1bWVudGVuLiBTZWllbiBTaWUgZWhybGljaCwgIHdlbQorZ2xhdWJ0ZW4gU2llIGRlbm4gZWhlcjogZWluZW0gdmVyc3RhdWJ0ZW4gdW5kICBoYWxidmVyc2NoaW1tZWx0ZW4gIEJyaWVmLCAgZGVyCitiZXNhZ3QsICBkYXNzICBJaHIgIEdyb3NzdmF0ZXIJZ2FyICBuaWNodCAgSWhyICBHcm9zc3ZhdGVyICBpc3QsICAgb2RlciAgIGRlbgorRXJ6YWVobHVuZ2VuIGlocmVyIEdyb3NzbXV0dGVyLCBkaWUgZWluZW4gd3VuZGVyYmFyZW4gS3VjaGVuICBiYWNrdCwgIHVtICBpaHJlCitCZWhhdXB0dW5nIHp1IHVudGVybWF1ZXJuPworCisiV2VubiBKYW1lcyBzaWNoIGVpbmUgTWVuZ2UgQWVyZ2VyIGVyc3BhcmVuIHdpbGwsIGJyYXVjaHQgZXIgbnVyIGRpZSBMaXN0ZSBhbHMKK0tsb3BhcGllciB6dSBiZW51dHplbi4iLCBtZWludGUgVWxvLgorCitKYW1lcyBibGlja3RlIHZlcndpcnJ0IGF1Zi4gIldhcyBtZWluc3QgZHUgZGFtaXQ/IgorCisiS3JhaC4iLCBhbnR3b3J0ZXRlIEF6enVybyBhbiBVbG9zIHN0YXR0LgorCisiSWNoIGhhYiBnZW5hdSBnZWhvZXJ0LCBkYXNzIGR1IGdlcmVkZXQgaGFzdC4iCisKKyJLcmFocmFoLiIsIG1hY2h0ZSBudW4gYXVjaCBVbG8uCisKKyJKYWphamEsIEtyYWhyYWhyYWguIiBKYW1lcyB0cmF0IG1pc3NtdXRpZyBnZWdlbiBlaW5lbiBTdGVpbiB1bmQgIGZsdWNodGUsICBkYQorZGVyIFN0ZWluIGRlbiB1bmdsZWljaGVuIEthbXBmIGdld2Fubi4gIkljaCBoYWJlIGVzIGdlaG9lcnQsIGhhYmUgaWNoLiIKKworIk5pY2h0cyBoYXN0IGR1IGdlaG9lcnQuIiwgbWVpbnRlIFVsby4gIktyYWguIiwgZnVlZ3RlIHNpZSAgbmFjaCAgZWluZXIgIFBhdXNlCitoaW56dS4KKworIkFjaCwgbGVjayBtaWNoLiBFcnN0IGRpZSBkdW1tZSBMaXN0ZSB1bmQgZGFubiAgYXVjaCAgbm9jaCAgZWluZSAgS3JhZWhlLCAgZGllCityZWRldC4iCisKKyJOaWNodCB3ZW5pZ2VyIGR1bW0gYWxzIGRpZSBMaXN0ZS4iLCBrb21tZW50aWVydGUgQXp6dXJvIHNvICBsZWlzZSwgIGRhc3MgIG51cgorVWxvIGlobiB2ZXJzdGFuZC4KKworIkhlLCB3ZW5uIGVzIGRpZXNlIExpc3RlIG5pY2h0IGdhZWJlLCB3dWVyZGUgUm9tZW8uLi4iCisKKyJIYWx0IGRlbiBTY2huYWJlbCEiLCBmdWhyIEF6enVybyBzZWluZSBHZWZhZWhydGluIGFuLgorCisiV2VyIGlzdCBSb21lbz8iLCB2ZXJsYW5ndGUgSmFtZXMgenUgd2lzc2VuLCBkZXIgaW1tZXIgc2VociAgZ2VuYXUgIGhpbmhvZXJ0ZSwKK3dlbm4gZWluIEdlc3ByYWVjaCBuaWNodCBmdWVyIGlobiBiZXN0aW1tdCB3YXIuCisKK1p1IFVsb3MgdW5kIEF6enVyb3MgR2x1ZWNrIHJpZWYgZGllICBLb2VjaGluICBuYWNoICBKYW1lcyAgdW5kCWdhYiAgaWhtICBlaW5lCitmbHVlc3NpZ2UgU3RhZXJrdW5nIG1pdCBhdWYgZGVuIFdlZy4gU28gc2NobmVsbCwgd2llIGRlciBTY2huYXBzIHNlaW5lbiBXZWcgaW4KK0phbWVzZW5zIE1hZ2VuIGZhbmQsIHZlcmdhc3MgZGllc2VyIGRpZSBiZWlkZW4JS3JhZWhlbiAgdW5kICBtYWNodGUgIHNpY2ggIGFuCitzZWluZW4gQXVmdHJhZy4gQXVjaCBTaWUgdW5kIGljaCBoYWJlbiBHbHVlY2ssIGxpZWJlICBMZXNlcmluLAlsaWViZXIJTGVzZXIsCitkZW5uIGRlciBlcnN0ZSBNZW5zY2gsIGRlbSAgSmFtZXMgIGJlZ2VnbmV0ZSwgIHdhciAgQmVuZXZvbGlvLAlkZXIgIFJvbWVvICBpbQord2FocnN0ZW4gU2lubmUgZGVzIFdvcnRlcyBoaW50ZXIgc2ljaCBoZXJzY2hsZXBwdGUuIFN0ZWxsZW4gU2llIHNpY2ggbnVyICB2b3IsCitlcyBzZWkgamVtYW5kIGFuZGVycyBnZXdlc2VuLCBkZW0gSmFtZXMgdWViZXIgZGVuIFdlZyBsaWVmLiBWaWVsbGVpY2h0IGplbWFuZCwKK2RlbiBIZXJyIENhcHVsZXQgZWluenVsYWRlbiB2ZXJnZXNzZW4gaGF0dGUsIGRhbm4gdmVybGllZmUgIHVuc2VyZSAgR2VzY2hpY2h0ZQordm9uIGhpZXIgYWIgdm9lbGxpZyBhbmRlcnMsIGFscyBTaWUgc2llIGhvZXJlbgl3b2xsZW4JdW5kICBpY2ggIG11ZXNzdGUgIG1pcgorZWluZmFsbGVuIGxhc3Nlbiwgd2llIGljaCBkaWVzIGRlbiBHb2V0dGVybiBkZXIgTXl0aGVud2VsdCBlcmtsYWVyZS4KKworIlVuZCBkZXIgR2V3ZXJrc2NoYWZ0LiIsIHNhZ3QgVWxvIGFtdWVzaWVydC4KKworX1VuZF8gX2Rlcl8gX0dld2Vya3NjaGFmdF8sIF9qYV8uIF9TZWlfIF9nZXdhcm50XywgX1Vsb18uICBfV2Vubl8gIF9kdV8gIF9taXJfCitfbm9jaF8gX2Vpbm1hbF8gX2Rhendpc2NoZW5xdWFzc2Vsc3RfLCBfc3RyZWljaGVfICBfaWNoXyAgX2RpY2hfICBfYXVzXyAgX2Rlcl8KK19HZXNjaGljaHRlXyEKKworIkRhcyBnbGF1YnN0IGR1IGRvY2ggc2VsYnN0IG5pY2h0LiBXZW5uIGR1IGRhcyBtYWNoc3QsIHRyZXRlIGljaCBpbiAgU3RyZWlrLiIsCitrbnVycnQgQXp6dXJvIHVuZCBzY2h3ZW5rdCBlaW4gcm90ZXMgRmFlaG5jaGVuLgorCitfU2Nob25fIF9ndXRfLiBfVmVyc3VjaHRfIF93ZW5pZ3N0ZW5zXywgX2V1Y2hfIF9hbnN0YWVuZGlnXyBfenVfIF9iZW5laG1lbl8uCisKK0JlbmV2b2xpbyBncmluc3RlIHNlaW5lbiBDb3VzaW4gYW4uICAiSGFzdCAgZHUgIGRpY2ggIHNjaG9uICBlaW5tYWwgIGltICBLcmVpcworZ2VkcmVodCwgYmlzIGRpciBzY2h3aW5kbGlnIHd1cmRlPyIKKworIkFlaC4uLiIgUm9tZW8gdmVyc3RhbmQgbmljaHQsIHdvcmF1ZiBzZWluIEZyZXVuZCBoaW5hdXMgd29sbHRlLgorCisiV2VubiBtYW4gc2ljaCBkcmVodCwgYmlzIGVpbmVtIHNjaHdpbmRsaWcgd2lyZCwga2FubiBtYW4gc2ljaCAgaGVsZmVuLCAgaW5kZW0KK21hbiBzaWNoIGluIGRpZSBhbmRlcmUgUmljaHR1bmcgZHJlaHQuIgorCisiRGFzIHdlaXNzIGljaC4iCisKKyJHZW5hdXNvIGlzdCBlcyBhdWNoIG1pdCBkaXIuIFdlbm4gZHUgUm9zYWxpbmUgIG5pY2h0ICBiZWtvbW1lbiAga2FubnN0LCAgZGFubgorc2NoYXUgZGlyIGVpbmUgYW5kZXJlIGFuIHVuZCBzY2hvbiBmdWVobHN0IGR1IGRpY2ggYmVzc2VyLiIKKworIkRhcyB3YWVyZSBqYSBkZW4gVGV1ZmVsIG1pdCBCZWVsemVidWIgYXVzdHJlaWJlbi4iLCBrb21tZW50aWVydGUgQXp6dXJvLgorCisiV2VubidzIGRlbm4gaGlsZnQuIiBSb21lbyB6dWNrdGUgZGllIFNjaHVsdGVybi4KKworIlNpZSBrb2VubmVuIG5pY2h0IHp1ZmFlbGxpZyBsZXNlbj8iLCBmcmFndGUgSmFtZXMuICJHdXRlbiBUYWcsIHVlYnJpZ2Vucy4iCisKKyJLb21tdCBkYXJhdWYgYW4uIiwgYnJ1bW10ZSBSb21lbyBzY2hsZWNodGdlbGF1bnQuCisKKyJBY2gsIHNjaG9uIGd1dCwgZGFubiBzdWNoZSBpY2ggbWlyIGViZW4gamVtYW5kZW4sIGRlciBlcyBrYW5uLiIKKworIkljaCBrYW5uIGxlc2VuLiIgTnVuIGhhdHRlIGRpZSBOZXVnaWVyZGUgUm9tZW8gZ2VwYWNrdC4KKworUm9tZW8gbmFobSBIZXJybiBDYXB1bGV0cyBMaXN0ZSBlbnRnZWdlbiB1bmQgZW50emlmZmVydGUgIHVudGVyICBTdG9laG5lbiAgdW5kCitGbHVjaGVuIGRpZSBIYW5kc2NocmlmdC4gQWxzIGVyIGZlcnRpZyB3YXIsIGdhYiBlciBkaWUgTGlzdGUgenVydWVjay4KKworIkRhbmtlLCBhYmVyIGRhcyBicmF1Y2hlIGljaCBqZXR6dCBuaWNodCBtZWhyLCBzY2hsaWVzc2xpY2ggaGFiZSBpY2ggbWlyIGFsbGVzCitnZW1lcmt0LiIKKworSmFtZXMgd2FyIHNpY2h0bGljaCBzdG9seiBhdWYgc2VpbiBHZWRhZWNodG5pcy4KKworIldvaGluIHNvbGxlbiBkZW5uIGFsbCBkaWUgTGV1dGUga29tbWVuPyIsIHdvbGx0ZSBSb21lbyB3aXNzZW4uCisKKyJIZXJyIENhcHVsZXQgZ2lidCBoZXV0ZSBlaW4gRmVzdC4gV2lzc2VuIFNpZSwga29tbWVuIFNpZSBkb2NoIGVpbmZhY2ggdm9yYmVpLAord2VubiBzaWUgbmljaHQgZ2VyYWRlIGRlbiBNb250YWd1ZXMgZGllIFN0YW5nZSBoYWx0ZW4uIgorCitCZW5ldm9saW8gZ3JpbnN0ZS4gIkRhcyBpc3QgZGllIEdlbGVnZW5oZWl0LiIKKworIkR1IHNwcmljaHN0IGhldXRlIGluIFJhZXRzZWxuLiIKKworIkhhc3QgZHUgZGVubiBnYXIgbmljaHQgZGFyYXVmIGdlYWNodGV0LCB3YXMgZHUgdm9yZ2VsZXNlbiBoYXN0PyIKKworIkljaCB3YXIgbWl0IGRlciBIYW5kc2NocmlmdCBiZXNjaGFlZnRpZ3QuIgorCisiSGV1dGUgYWJlbmQgc2luZCBzb3dvaGwgUm9zYWxpbmUgYWxzIGF1Y2ggZGllIHNjaG9lbnN0ZW4gRnJhdWVuICBWZXJvbmFzICBiZWkKK0NhcHVsZXQgenUgR2FzdC4iCisKKyJKYSB1bmQ/IFNvbGxlbiB3aXIgamV0enQgZWluIGVpZ2VuZXMgRmVzdCBnZWJlbj8iCisKKyJOZWluLiBXaXIgZ2VoZW4gZGEgaGluIHVuZCBkYW5uIGthbm5zdCBkdSBtaXIgc2FnZW4sIG9iIFJvc2FsaW5lIHdpcmtsaWNoIGRpZQorU2Nob2Vuc3RlIGlzdC4gSWNoIGJpbiBnZXNwYW5udCwgd2FzIGR1IHNhZ3N0LCB3ZW5uIHdpciBlcnN0IGRhIHNpbmQuIgorCisiU2llIGlzdCBkaWUgQWxsZXJzY2hvZW5zdGUuIgorCisiU2ljaGVyLiIgQmVuZXZvbGlvIHRhZXRzY2hlbHRlIFJvbWVvcyBTY2h1bHRlci4gIkFiZXIgYmlzIGpldHp0IGhhc3QgIGR1ICBzaWUKK25vY2ggbmljaHQgZ2VzZWhlbiwgd2VubiBhbGxlIGFuZGVyZW4gU2Nob2VuaGVpdGVuIGRhYmVpIHdhcmVuLiIKKworIkhvZXJ0IHNpY2ggYW4gd2llIGVpbmUgTWlzcy1XYWhsLiIgbWVpbnRlIEF6enVyby4KKworUm9tZW8gdWViZXJsZWd0ZSBlaW5lIFdlaWxlLCBkYW5uIG5pY2t0ZSBlci4gIkljaCBrb21tZSBtaXQsIGFiZXIgbmljaHQsICB3ZWlsCitpY2ggbWlyIGRpZSBhbmRlcmVuIEZyYXVlbiBhbnNlaGVuIHdpbGwsIHNvbmRlcm4gYmxvc3MgdW0gUm9zYWxpbmUgenUgc2VoZW4uIgorCitCZW5ldm9saW8gc2V1Znp0ZS4gIldhcnRlbiB3aXIgYWIuIgorCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU1IGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmYyOGIzCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlNQpAQCAtMCwwICsxLDIxMyBAQAorREVSIEVSU1RFIEFLVAorCSAgRElFIERSSVRURSBTWkVORQorCitJbSBCb3Vkb2lyIEZyYXUgQ2FwdWxldHMgYmVvYmFjaHRldGVuIFVsbyB1bmQgQXp6dXJvIHp3ZWkgcmVpY2hsaWNoICB1bmdsZWljaGUKK0ZyYXVlbi4gRGllIGVpbmUgd2FyIEZyYXUgQ2FwdWxldCwgemllcmxpY2ggdW5kIHdlbm4gc2Nob24gbmljaHQgaHVlYnNjaCwgZGFubgorZG9jaCB3ZW5pZ3N0ZW5zIGdlc2NoaWNrdCBnZXNjaG1pbmt0LiBEaWUgYW5kZXJlIHdhciBQb2xseSwgSnVsaWFzICBBbW1lLCAgZGllCitkZW0gS2xpc2NoZWUgaWhyZXMgQmVydWZlcyBnZXJlY2h0IHd1cmRlLCBkZW5uIHNpZSB3YXIgZnJ1ZWggYWx0IGdld29yZGVuICB1bmQKK3dlbmlnZXIgZ2VzY2hpY2t0IGltIFVtZ2FuZyAgbWl0ICBTY2htaW5rZSAgYWxzICBGcmF1ICBDYXB1bGV0LiAgUnVuZGxpY2ggIHVuZAoraW56d2lzY2hlbiBmYXN0IHphaG5sb3MsIG1pdCB3aXJyZW0sIGZhc3QgZXJncmF1dGVtIEhhYXIgdW5kIEZhbHRlbiwgIGRpZSAgbWFuCitBbHBlbiBuZW5uZW4gd3VlcmRlLCB3ZW5uIHNpZSBudXIgZWluIHdlbmlnIGdyb2Vzc2VyIHdhZXJlbiwgd2lyYmVsdGUgIHNpZSAgc28KK3NjaG5lbGwgaWhyZSBrcmFtcGZhZHJpZ2VuIEJlaW5lIHNpZSB0cmFnZW4gd29sbHRlbiBkdXJjaCBkYXMgWmltbWVyLgorCisiSWNoIGhhYiBpaHIgZ2VzYWd0LCBkYXNzIHNpZSBoZXJrb21tZW4gc29sbC4gSmF3b2hsLCBkYXMgaGFiZSAgaWNoLiAgVW5kICBpY2gKK3Zlcmdlc3NlIG5pZSBldHdhcy4iLCBtdXJtZWx0ZSBzaWUgdm9yIHNpY2ggaGluLgorCisiU2llIGlzdCBqZWRlbmZhbGxzIG5pY2h0IGhpZXIuIiwga29tbWVudGllcnRlIEZyYXUgQ2FwdWxldC4KKworUG9sbHkgaG9sdGUgYXN0aG1hdGlzY2ggTHVmdCB1bmQgcmllZjogIkp1bGlhISBXbyBzdGVja3N0IGR1LCBTY2hhZXR6Y2hlbj8iCisKKyJJY2ggYmluIGphIHNjaG9uIGRhLiIsIG1laW50ZSBKdWxpYSB2b24gZGVyIFR1ZXIgaGVyLgorCisiT2guIFNpZSBtdXNzIGFiZXIgbm9jaCB6aWVtbGljaCBsYW5nZSBhdWYgZGllIFdlaWRlLiIgQXp6dXJvIHNjaHVldHRlbHRlICBkZW4KK0tvcGYuCisKKyJJc3QgamEgbm9jaCBlaW4gcmVjaHRlciBCYWNrZmlzY2guIgorCisiSWNoIGdlYicgZGlyIGdsZWljaCBCYWNrZmlzY2ggYXVmIGRlbiBTY2huYWJlbC4iLCBkcm9odGUgVWxvLgorCisiU2llaCBzaWUgZGlyIGRvY2ggYW4uIFdlbm4gc2llIGVpbmVuIFBmaXJzaWNoa2VybiB2ZXJzY2hsdWNrdCwgc2llaHQgc2llIGF1cywKK2FscyBzZWkgc2llIGltIGZ1ZW5mdGVuIE1vbmF0ISIKKworIkRhcyB3YWVjaHN0IHNpY2ggbm9jaCBhdXMuIgorCisiQmVzdGltbXQuIEFiZXIgYmlzIGRhaGluIGhvbHQgbWFuIHNpY2ggYmxhdWUgRmxlY2tlbi4iCisKK1VsbyBkcmVodGUgc2ljaCBlbXBvZXJ0IHVtIHVuZCBhbnR3b3J0ZXRlIG5pY2h0IG1laHIuCisKKyJXYXMgaXN0IGRlbm4sIE1hbWE/Iiwgd29sbHRlIEp1bGlhIHdpc3Nlbi4KKworIldpZSBhbHQgaXN0IEp1bGlhIGpldHp0LCBQb2xseT8iLCBmcmFndGUgRnJhdSBDYXB1bGV0LgorCisiRGllIFNjaG1pbmtlIGhhdCBpaHIgZGFzICBHZWhpcm4gIHZlcmtsZWlzdGVydC4iICBVbG8gIGtpY2hlcnRlLiAgIlNpZSAgd2Vpc3MKK3NjaG9uIG5pY2h0IG1laHIsIHdpZSBhbHQgaWhyZSBUb2NodGVyIGlzdC4iCisKKyJJY2ggdmVyZ2Vzc2UgbmllIGV0d2FzIHVuZCBpY2ggc2FnZSBJaG5lbiwgSnVsaWEgaXN0IG5vY2ggIG5pY2h0ICB2aWVyemVobi4iLAorYW50d29ydGV0ZSBQb2xseS4gIkFtIGVyc3RlbiBBdWd1c3QgIGlzdCAgc2llICBnZWJvcmVuLCAgZGEgIHdldHRlICBpY2ggIG1laW5lCityZXN0bGljaGVuIFphZWhuZSBkcmF1Zi4iCisKKyJFcnN0ZXIgQXVndXN0LCBqYS4gS29lbm50ZSBoaW5rb21tZW4uIiBGcmF1IENhcHVsZXQgIGhhdHRlICBzaWNodGxpY2ggIE11ZWhlLAorc2ljaCBhbiBkaWUgR2VidXJ0IEp1bGlhcyB6dSBlcmlubmVybi4KKworIkphd29obCwgZGEgYmluIGljaCBzaWNoZXIsIHVuZCBpY2ggdmVyZ2Vzc2UgbmllIGV0d2FzLiBJY2ggd2Vpc3Mgc29nYXIgIG5vY2gsCit3aWUgc2llIGFuIGlocmVtIGRyaXR0ZW4gR2VidXJ0c3RhZyBoaW5maWVsIHVuZCAgc2ljaCAgZWluZSAgQmV1bGUgIGhvbHRlLCAgc28KK2dyb3NzIHdpZSBtZWluZSBkaWNrZSBaZWhlLiBVbmQgZGFtYWxzLCBkYXMgd2Vpc3MgaWNoIGF1Y2ggbm9jaCwgaGF0IG1laW4gTWFubgorR290dC1oYWItaWhuLXNlbGlnIHNpZSBpbiBkZW4gQXJtIGdlbm9tbWVuLCB3ZWlsIHNpZSAgc28gIHNjaHJlY2tsaWNoICBnZXdlaW50CitoYXQuIFVuZCBlciBzYWd0ZSwgZGFzcyBzaWUgamV0enQgbm9jaCBqdW5nIGdlbnVnIHNlaSwgdW0gYXVmIGRhcyAgR2VzaWNodCAgenUKK2ZhbGxlbiwgYWJlciB3ZW5uIHNpZSBhZWx0ZXIgd3VlcmRlLCB3ZXJkZSBzaWUJZ2V3aXR6dGVyICBzZWluICB1bmQgIGF1ZiAgZGVuCitSdWVja2VuIGZhbGxlbi4gSmF3b2hsLCBkYXMgd2Vpc3MgaWNoIG5vY2gsICBhbHMgIHdhZXJlICBlcyAgZ2VzdGVybiAgZ2V3ZXNlbi4KK1NlaGVuIFNpZSwgd2FzIGljaCBmdWVyIGVpbiBndXRlcyBHZWRhZWNodG5pcyBoYWJlLiIKKworIkphLCBTaWUgaGFiZW4gZWluIGd1dGVzIEdlZGFlY2h0bmlzLiIgRnJhdSBDYXB1bGV0IHNjaGF1dGUgYWJ3ZXNlbmQgIGF1cyAgZGVtCitGZW5zdGVyIHVuZCB2ZXJzdWNodGUgdmVyZ2VibGljaCwgUG9sbHlzIE5lYmVuc2FldHplIHp1IHNvcnRpZXJlbi4KKworIkphamFqYS4gVW5kIG1laW4gTWFubiBzYWd0ZSBub2NoLCB3ZW5uIHNpZSBnZXdpdHp0IHNlaSwgIHdlcmRlICBzaWUgIGF1ZiAgZGVuCitSdWVja2VuIGZhbGxlbiB1bmQgbmljaHQgYXVmIGRhcyBHZXNpY2h0LiBVbmQgZGFzIEx1c3RpZ3N0ZSAgZGFyYW4gIHdhciwgIGRhc3MKK21laW5lIGtsZWluZSBKdWxpYSBnbGVpY2ggYXVmaG9lcnRlLCB6dSB3ZWluZW4gdW5kIG51ciBub2NoICdKYS4nIHNhZ3RlLiAgR2Fuegorc28sIGFscyBoYWJlIHNpZSBkYXMgYWxsZXMgIHNjaG9uICB2ZXJzdGFuZGVuLglJY2ggIG11c3N0ZSAgZ2FueiAgc2NocmVja2xpY2gKK2xhY2hlbiwgYWxzIG1laW4gTWFubiBzYWd0ZSwgZGFzcyBzaWUgYXVmIGRlbiBSdWVja2VuIGZhbGxlbiB3dWVyZGUsIHdlbm4gIHNpZQorYWVsdGVyIHdhZXJlLiIKKworTXV0dGVyIHVuZCBUb2NodGVyIHN0b2VobnRlbiB3aWUgYXVzICBlaW5lbSAgTXVuZGUgIHVuZCAgc2FoZW4Jc2ljaCAgZGFubiAgaW4KK3NlbHRlbmVtIEVpbnZlcnN0YWVuZG5pcyBncmluc2VuZCBhbi4KKworIkR1IHdhcnN0IGRhcyBodWVic2NoZXN0ZSBLaW5kLCBkYXMgIGljaCAgamUgIGdlc2VoZW4gIGhhYmUsICBKdWxpYS4gIFVuZCAgaWNoCit2ZXJnZXNzZSBuaWUgZXR3YXMuIE1laW4gZ3JvZXNzdGVyIFd1bnNjaCAgd2FlcmUsICBkaWNoICBub2NoICB2ZXJoZWlyYXRldCAgenUKK3NlaGVuLiIKKworIkRhcyBzb2xsdGUgc2llIGJlc3NlciBuaWNodCB3dWVuc2NoZW4uIiwgbWVpbnRlIEF6enVyby4KKworIldhcnVtIGRlbm4gbmljaHQ/IiB3b2xsdGUgVWxvIHdpc3Nlbi4KKworIldlaWwgZGllIEdvZXR0ZXIgc2llIHN0ZXJiZW4gbGFzc2VuIGtvZW5udGVuLCB3ZW5uIHNpZSBpaHJlbiBXdW5zY2ggIGhhdC4gIFNvCitnZWh0IGRhcyBkb2NoIGluIE15dGhlbi4iCisKKyJVbXMgSGVpcmF0ZW4gZ2VodCBlcyBnZXJhZGUuIiwgc2FndGUgRnJhdSBDYXB1bGV0LgorCitTb3dvaGwgaW0gWmltbWVyIGFscyBhdWNoIGF1ZiAgZGVtICBBc3QgIGRlciAgYmVpZGVuICBUdXJ0ZWxrcmFlaGVuICB3dXJkZSAgZXMKK3NjaGxhZ2FydGlnIHNvIHN0aWxsLCBkYXNzIG1hbiBkaWUgYmVydWVobXRlIFN0ZWNrbmFkZWwgaGFldHRlCWZhbGxlbglob2VyZW4KK2tvZW5uZW4uCisKKyJEYXMgd2FlcmUgamEgbm9jaCBzY2hvZW5lci4iLCBtZWludGUgSnVsaWEuCisKKyJOaWNodCB3YWhyPyIsIGZyYWd0ZSBQb2xseSwgZGllIHNpZSBhYnNpY2h0bGljaCBtaXNzdmVyc3RhbmQuICJXZW5uIGljaCBuaWNodAord3Vlc3N0ZSwgd2VyIGRpY2ggZ2VzdGlsbHQgaGF0LCBhbHMgZHUgbm9jaCBrbGVpbiB3YXJzdCwgdW5kIGljaCB2ZXJnZXNzZSAgbmllCitldHdhcywgZGFubiBzYWd0ZSBpY2gsIGRhc3MgZHUgZGllIEtsdWdoZWl0IG5pY2h0IG51ciBtaXQgTG9lZmZlbG4gIGdlZnJlc3NlbiwKK3NvbmRlcm4gc2Nob24gbWl0IGRlciBNaWxjaCBnZXRydW5rZW4gaGFldHRlc3QuIgorCisiSWNoIGRlbmtlIG5vY2ggbmljaHQgZWlubWFsIGRhcnVlYmVyICBuYWNoLiIgIEp1bGlhICBoYXR0ZSAgc2ljaHRsaWNoICBNdWVoZSwKK25pY2h0IGF1ZiBkaWUgQnJ1ZXN0ZSBpaHJlciBBbW1lIHp1IHN0YXJyZW4uCisKKyJXZW5uIGljaCBtaWNoIG5pY2h0IHZlcnJlY2huZSwgZGFubiB3YXIgaWNoIHNjaG9uIGRlaW5lIE11dHRlciwgYWxzIGljaCAgbm9jaAorbmljaHQgc28gYWx0IHdhciB3aWUgZHUuIgorCisiSW0gTGViZW4gbmljaHQuIiwgbWVpbnRlIEF6enVyby4KKworIk1pdCBkZW0gUmVjaG5lbiBzdGVodCBzaWUgYXVmIEtyaWVnc2Z1c3MsIHZlcmdpc3MgZGFzICBuaWNodC4gIEltbWVyaGluICBrYW5uCitzaWUgamEgbm9jaCBuaWNodCBlaW5tYWwgc2FnZW4sIHdpZSAgYWx0ICBKdWxpYSAgaXN0LiIgIFVsbyAgYmV0cmFjaHRldGUgIEZyYXUKK0NhcHVsZXQgZWluZ2VoZW5kLiAiQWJlciBzbyB1bmdlZmFlaHIga29lbm50ZSBlcyBoaW5rb21tZW4uIFNpZSAgaXN0ICBiZXN0aW1tdAorbmljaHQgaGFsYiBzbyBhbHQgd2llIGlociBNYW5uLiIKKworIldhaHJzY2hlaW5saWNoIHdhcnN0IGR1IHNjaG9uIHJlaWZlciwgTWFtYS4iCisKKyJXZW5uIHNpZSBuaWNodCBtZXJrdCwgZGFzcyBKdWxpYSBzaWUgYXVmIGRlbiAgQXJtICBuaW1tdCwgIGlzdCAgc2llICBiZXN0aW1tdAorc2Nob24gdW0gZWluaWdlcyByZWlmZXIuIiBBenp1cm8genVwZnRlIGJlZGFlY2h0aWcgZWluZSBGZWRlciB6dXJlY2h0LgorCisiVW0gd2VuIGdlaHQgZXMgdWViZXJoYXVwdD8iLCB3b2xsdGUgSnVsaWEgd2lzc2VuLgorCisiUGFyaXMgaGF0IHNpY2ggaW4gZGljaCB2ZXJsaWVidC4iLCBhbnR3b3J0ZXRlIGlocmUgTXV0dGVyLgorCisiT2guIiBKdWxpYSBzY2hpZW4gZGVuIEdlZGFua2VuIHp1IHZlcmFyYmVpdGVuLgorCitQb2xseSBicmFjaCBpbiBoZWxsZXMgRW50enVlY2tlbiBhdXMuICJFaW4gcmljaHRpZ2VyIE1hbm4sICBKdWxpYS4gIFN0ZWxsICBkaXIKK2RhcyBudXIgdm9yISBBdXNzZXJkZW0gZmluZGVzdCBkdSBiZXN0aW1tdCBrZWluZW4gQmVzc2VyZW4sIGVyIGlzdCAgd2VpY2ggIHdpZQorV2FjaHMuIgorCisiU2VsdHNhbWUgUHJpb3JpdGFldGVuLiIsIG11cm1lbHRlIEF6enVyby4KKworIlNpZSBoYXQgc2Nob24gcmVjaHQuIERhcyBpc3QgZXMsIHdvcmF1ZiAgZXMgIGJlaSAgZWluZW0gIE1hbm4gIGFua29tbXQuIiAgVWxvCitncmluc3RlIG5pZWRlcnRyYWVjaHRpZy4KKworIkFjaD8iCisKKyJXdWVzc3Rlc3QgZHUgZXR3YXMgYW5kZXJlcz8iIFVsbyAgemVyemF1c3RlICBkYXMgIEdlZmllZGVyICBpaHJlcyAgR2VmYWVocnRlbgord2llZGVyLgorCisiRGVuayBkYXJ1ZWJlciBuYWNoLCBKdWxpYS4gRXIgaXN0IHdpcmtsaWNoIGVpbmUgZ3V0ZSAgUGFydGllLiIgIEZyYXUgIENhcHVsZXQKK3dhbmR0ZSBzaWNoIGlocmVtIFNwaWVnZWwgenUuCisKKyJHYW56IHJpY2h0aWcsIGVpbmUgd3VuZGVyYmFyZSBQYXJ0aWUuIiwgc3RpbW10ZSBQb2xseSBhdXMgdm9sbGVtIEhlcnplbiB6dS4KKworRnJhdSBDYXB1bGV0IGJldHJhY2h0ZXRlIGltIFNwaWVnZWwgZGFzIHp3ZWlmZWxuZGUgR2VzaWNodCBpaHJlciBUb2NodGVyLiAgIkR1Cit3aXJzdCBpaG4gaGV1dGUgYWJlbmQga2VubmVubGVybmVuLiBTY2hhdSAgaWhuCWRpciAgYW4sICBkYW5uCXdpcnN0ICBkdSAgbWlyCit6dXN0aW1tZW4sIGRhc3MgZXIgd2lya2xpY2ggZWluIG5ldHRlciBNYW5uIGlzdC4iCisKKyJFciBoYXR0ZSBqYSBaZWl0IGdlbnVnLCBlaW5lciB6dSB3ZXJkZW4uIiwgdmVyc2V0enRlIEp1bGlhLgorCisiRXMgZmVobHQgaWhtIG51ciBub2NoIGVpbmVzIHp1IHNlaW5lbSBHbHVlY2suIERpZSByaWNodGlnZSBGcmF1LiIKKworIlVuZCBkYXMgc29sbCBpY2ggc2Vpbj8iCisKKyJFciBpc3QgZWluIEJ1Y2gsIGRhcyBub2NoIGtlaW5lbiBFaW5iYW5kIGhhdC4iCisKKyJadW1pbmRlc3QgaXN0IGVyIHNvIHZlcmtuaXR0ZXJ0LiIgSnVsaWEgem9nIGVpbiBHZXNpY2h0LgorCisiVW5kIHdlbm4gZHUgaWhuIGhlaXJhdGVzdCwgZGFubiBrYW5uIG1hbiBpaG4gbmFjaCBkZW0gIEVpbmJhbmQgIGJldXJ0ZWlsZW4uIiwKK3NwcmFuZyBQb2xseSBoaWxmcmVpY2ggZWluLgorCisiSWNoIG1laW5lIG1pY2ggenUgZXJpbm5lcm4sIGRhc3MgZHUgbWljaCBnZWxlaHJ0IGhhZXR0ZXN0LCBnZW5hdSBkYXMgbmljaHQgenUKK3R1bi4gTmF0dWVybGljaCBpc3QgbWVpbiBHZWRhZWNodG5pcyBuaWNodCBzbyBndXQgd2llIGRhcyBkZWluZSwgUG9sbHkuIgorCisiU2llaCBlcyBkb2NoIG1hbCBzbzogRXMgIGdpYnQgIGJlc3RpbW10ICBoYWVzc2xpY2hlcmUsICBhZWx0ZXJlICB1bmQgIGFlcm1lcmUKK01hZW5uZXIgYWxzIGlobi4iLCBzcHJhbmcgUG9sbHkgaGlsZnJlaWNoIGVpbi4KKworVWxvIHNjaHVldHRlbHRlIHNpY2ggYW5nZXdpZGVydC4gIkRhcyBrbGluZ3QgamEgZmFzdCB3aWUgZWluZSBEcm9odW5nLiIKKworIkVpbiBNYW5uIHdpZSBlciB3aXJkICBkZWluZSAgUG9zaXRpb24gIG5pY2h0ICB2ZXJzY2hsZWNodGVybi4iLCAgZnVlZ3RlICBGcmF1CitDYXB1bGV0IGhpbnp1LgorCisiTmljaHQgdmVyc2NobGVjaHRlcm4hIiBQb2xseSB3YXIgZW50c2V0enQuICJGcmF1ZW4gd2FjaHNlbiBhbiBpaHJlbiBNYWVubmVybiwKK2Fsc28gdmVyYmVzc2VydCBzaWNoIEp1bGlhcyBQb3NpdGlvbiBzb2dhci4iCisKKyJCZXN0aW1tdCB3ZXJkZSBpY2ggYmVpemVpdGVuIGVpbmlnZXMgdWViZXIgS3JhbmtlbnBmbGVnZSBsZXJuZW4uIgorCisiRHUgdHVzdCBnZXJhZGUgc28sIGFscyBzdHVlbmRlIGVyIHNjaG9uIG1pdCBlaW5lbSBCZWluIGltIEdyYWIuIiBGcmF1IENhcHVsZXQKK3NjaHVldHRlbHRlIHVud2lsbGlnIGRlbiBLb3BmLiAiU28gYWx0IGlzdCBlciB3aXJrbGljaCBub2NoIG5pY2h0LiIKKworIldlbm4gZHUgZGFyYXVmICBiZXN0ZWhzdCwgIHdlcmRlICBpY2ggIG1pciAgd29obCAgc2VpbmUgIEFubmFlaGVydW5nc3ZlcnN1Y2hlCitnZWZhbGxlbiBsYXNzZW4gbXVlc3NlbiwgTWFtYS4iCisKKyJEYXMgaXN0IGRvY2ggZWluZSBGYXJjZSEiLCBlbXBvZXJ0ZSBzaWNoIFVsby4KKworIldpZXNvPyIsIHZlcmxhbmd0ZSBBenp1cm8genUgd2lzc2VuLiAiSW1tZXJoaW4gaGF0IHNpZSBpaHJlIFRvY2h0ZXIgZ2VmcmFndC4iCisKKyJIYXQgc2llPyBJY2ggZmluZGUsIGRhcyBrbGFuZyBlaGVyIHdpZSBlaW4gQmVmZWhsLiBVbmQgUG9sbHkgIHNvbGx0ZSAgenUgIGlocgoraGFsdGVuLCBzdGF0dCBkZXNzZW4gbGFlc3N0IHNpZSBKdWxpYSBpbSBTdGljaC4iCisKKyJOZWluLCBkYXMgdHVlIGljaCBuaWNodC4iIFBvbGx5IHdhciAgenVtICBGZW5zdGVyICBnZXRyZXRlbiAgdW5kICBoYXR0ZSAgVWxvcworbGV0enRlIFdvcnRlIGdlaG9lcnQuCisKKyJEb2NoLiIKKworIk5laW4uIEp1bGlhIG11c3Mgc28gb2RlciBzbyBoZWlyYXRlbiwgZGEgaXN0IGVpbiBNYW5uICB3aWUgIFBhcmlzICBuaWNodCAgZGllCitzY2hsZWNodGVzdGUgYWxsZXIgTW9lZ2xpY2hrZWl0ZW4uIgorCisiVW5kIHdlbm4gc2llIGlobiBnYXIgbmljaHQgd2lsbD8iCisKKyJTaWUgd2lyZCBpaG4gc2Nob24gd29sbGVuLiBXaWUgbWVpbiBNYW5uIGRhbWFscyBzYWd0ZSwgc2llIHdpcmQgIHNjaGxhdSAgc2VpbgordW5kIGF1ZiBkZW4gUnVlY2tlbiBmYWxsZW4uIgorCitVbG8gc2NobmF1YnRlIHd1ZXRlbmQuCisKK19VbG9fISBfRGFzXyBfaXN0XyBfZGllXyBfbGV0enRlXyBfV2FybnVuZ18hCisKKyJQb2xseSwgd2VubiBkdSBzaWUgamV0enQgbWl0IGRpZXNlbSBQYXJpcyB2ZXJrdXBwZWxzdCwgYmVrb21tdCAgc2llICBuaWUgIGRlbgorTWFubiwgZGVyIGlociBiZXN0aW1tdCBpc3QuIiwgc2FndGUgVWxvLgorCitBenp1cm8gd2lyZnQgZWluZW4gbWlzc3RyYXVpc2NoZW4gQmxpY2sgYXVmIGRlbiBSYWRpZXJndW1taSwgZGVyIFVsbyAgYXVzICBkZXIKK0dlc2NoaWNodGUgZW50ZmVybmVuIHNvbGwgdW5kIGtudXJydCBudXIgZHJvaGVuZDogIlN0cmVpayBnZWZhZWxsaWc/IgorCisiRGFzIGlzdCBuaWNodCB3YWhyLiIsIHZlcnRlaWRpZ3RlIHNpY2ggUG9sbHkuCisKKyJEdSB3aXJzdCBlcyBzZWhlbi4iCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTYgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOTcyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU2CkBAIC0wLDAgKzEsMTA1IEBACitERVIgRVJTVEUgQUtUCisJICBESUUgVklFUlRFIFNaRU5FCisKKyJJY2ggbWFnIG5pY2h0LiIsIG11cnJ0ZSBSb21lbyB1bmQgdmVyc3VjaHRlLCBCZW5ldm9saW9zIEhhbmQgIGFienVzY2h1ZXR0ZWxuLAorZGllIGlobiBsYW5nc2FtIGFiZXIgc3RldGlnIGF1ZiBkaWUgVmlsbGEgZGVyIENhcHVsZXRzIHp1em9nLgorCisiQWNoIGtvbW0gc2Nob24sIHN0ZWxsIGRpY2ggbmljaHQgc28gYW4uIiBNZXJjdXRpbyBzdHVwc3RlICBzZWluZW4gIEZyZXVuZCAgaW4KK2RpZSBTZWl0ZS4gIldpciB3ZXJkZW4gdGFuemVuICB1bmQgIHVucyAgZGFydWViZXIgIGFtdWVzaWVyZW4sICB3aWUgIGRlciAgYWx0ZQorQ2FwdWxldCBzaWNoIHZvbGxhdWZlbiBsYWVzc3QuIgorCisiV2lyIGZsaWVnZW4gc293aWVzbyByYXVzLCBub2NoIGJldm9yIHdpciBkcmlubmVuIHNpbmQuIgorCisiRGFzIGdlaHQgbmljaHQuIiwga29tbWVudGllcnRlIEJlbmV2b2xpbywgZGVyIHNpY2ggIGZlc3QgIHZvcmdlbm9tbWVuICBoYXR0ZSwKK1JvbWVvIGF1Znp1aGVpdGVybi4gIkVzIHdpcmQgYmVzdGltbXQgbHVzdGlnLiIKKworIktsYXIuIFNvIGx1c3RpZywgd2llIG1laW4gVHJhdW0gbGV0enRlIE5hY2h0LiIKKworIkhleSwgVHJhZXVtZSBzaW5kIFNjaGFldW1lLiIsIG1laW50ZSBNZXJjdXRpby4KKworIldhcyBoYXN0IGR1IGRlbm4gZ2V0cmFldW10PyIgQmVuZXZvbGlvIG5haG0gc2VpbmVuIEZyZXVuZCBlcm5zdGVyLgorCisiQmVzdGltbXQgdm9uIGVpbmVyIEZyYXUuIiwgc2FndGUgTWVyY3V0aW8gbGFjaGVuZC4gIkRhdm9uIHRyYWV1bWVuICBkb2NoICBkaWUKK21laXN0ZW4gTGV1dGUuIgorCisiTmVpbiwgZWluZSBGcmF1IHdhciBlcyBuaWNodC4iCisKK01lcmN1dGlvIHJ1ZWNrdGUgYmV0b250IGVpbmVuIFNjaHJpdHQgdm9uIFJvbWVvIGFiLiAiQWVoLCBnaWJ0ICBlcyAgZGEgIGV0d2FzLAord2FzIGR1IHVucyBzYWdlbiBzb2xsdGVzdD8gTmljaHQsIGRhc3MgaWNoIGRpciB6dSBuYWhlCXRyZXRlbgl3b2xsdGUsICBhYmVyLAorYWVoLi4uIiBFciBncmluc3RlIGJyZWl0LgorCisiUm9tZW8sIGhvZXIgbWl0IGRlbSBVbnNpbm4gYXVmLiBKZWRlciB0cmFldW10IGVpbm1hbC4gRHUgIGhhc3QgIGJlc3RpbW10ICBudXIKK2V0d2FzIFVucmVjaHRlcyBnZWdlc3Nlbi4iCisKKyJJY2ggaGFiZSBnYXIgbmljaHQgZ2VnZXNzZW4uIgorCisiTmEsIHNpZWhzdCBkdSwgd2FzIHNhZ2UgaWNoPyIKKworQmVuZXZvbGlvIHdhcmYgZWluZW4gdmVyd2lycnRlbiBCbGljayBhdWYgTWVyY3V0aW8sIGJlc2NobG9zcyBkYW5uICBhYmVyLCAgZGFzCitUaGVtYSBuaWNodCB3ZWl0ZXIgenUgIHZlcmZvbGdlbiAgdW5kICB6dXBmdGUgIHN0YXR0ICBkZXNzZW4gIFJvbWVvcyAgS3Jhd2F0dGUKK3p1cmVjaHQuICJTbywgamV0enQgc2llaHN0IGR1IGd1dCBhdXMuIgorCisiSWNoIGhhYmUgd2lya2xpY2gga2VpbmUgTHVzdCB6dSB0YW56ZW4uIiBSb21lb3MgR2VzaWNodCBoYXR0ZSBlaW5lbiBBdXNkcnVjaywKK2RlbiBqZWRlIE11dHRlciBzb2ZvcnQgZXJrYW5udCB1bmQgbWl0IGVpbmVtIHN0cmVuZ2VuIEJsaWNrIGdlYWhuZGV0IGhhZXR0ZS4KKworIkRhbm4gZ2VoIHdlbmlnc3RlbnMgbWl0IGhpbmVpbiAgdW5kICB0dSAgc28sICBhbHMgIG9iICBkdSAgZGljaCAgYW11ZXNpZXJzdC4iCitCZW5ldm9saW8gcnVlY2t0ZSBhdWNoIHNlaW5lIGVpZ2VuZSBLcmF3YXR0ZSBnZXJhZGUuICJEZXIgIEFwcGV0aXQgIGtvbW10ICBtaXQKK2RlbSBFc3Nlbi4iCisKKyJTaWVoc3RlLCBzYWcgaWNoIGRvY2guIiBBenp1cm8gaW1pdGllcnRlIHVlYmVyemV1Z2VuZCBNZXJjdXRpb3MgU3RpbW1lLgorCisiSG0sIE1lcmN1dGlvLCB3aXIgc3ByZWNoZW4gaW56d2lzY2hlbiB1ZWJlciBldHdhcyBhbmRlcmVzLiIgUm9tZW8ga29ubnRlIHNpY2gKK2VpbiBHcmluc2VuIG5pY2h0IHZlcmtuZWlmZW4uCisKKyJJY2g/IiBNZXJjdXRpbyBkZXV0ZXRlIGF1ZiBzaWNoIHNlbGJzdC4gIkljaCBoYWJlIG5pY2h0cyBnZXNhZ3QuIgorCisiV2lzc3QgaWhyLCBpY2ggaGFiZSBnZXRyYWV1bXQsIGRhc3MgaWNoIGhldXRlICBtZWluZW0gIFZlcmhhZW5nbmlzICBiZWdlZ25lLiIKK1JvbWVvICBzY2hhZmZ0ZSAgZXMgIGVyc3RhdW5saWNoICBzY2huZWxsLCAgIHNlaW5lICAgbWVsYW5jaG9saXNjaGUgICBTdGltbXVuZword2llZGVyenViZWxlYmVuLgorCisiRGFzIFZlcmhhZW5nbmlzIGtlbm5lIGljaC4gRXMgZmFlbmd0IG1pdCBSIGFuIHVuZCBob2VydCAgbWl0ICBvc2FsaW5lICBhdWYuIiwKK21laW50ZSBCZW5ldm9saW8uICJXYXJ0ZSBlcyBlcnN0IGVpbm1hbCBhYiwgdmllbGxlaWNodCBnZWZhZWxsdCAgc2llICBkaXIgIGdhcgorbmljaHQgbWVociwgd2VubiBkdSBzaWUgZXJzdCBlaW5tYWwgYmV0cnVua2VuIHNpZWhzdC4iCisKKyJEaWUgZWRsZSwgZHVyY2hnZWlzdGlndGUgIHVuZCAgd3VuZGVyc2Nob2VuZSAgUm9zYWxpbmUgIHVuZCAgc2ljaCAgYmV0cmlua2VuPworQmVuZXZvbGlvLCB3aWUga2FubnN0IGR1IHNvIGV0d2FzIHVudGVyc3RlbGxlbiEiIE1lcmN1dGlvIGxlZ3RlICBkaWUgIEFybWUgIHVtCitzZWluZSBGcmV1bmRlLgorCisiV2FocnNjaGVpbmxpY2ggd2lyZCBlcyBSb21lbyB2aWVsIG1laHIgc3RvZXJlbiwgd2VubiBlciBzaWUgbWl0ICBkZW4gIGFuZGVyZW4KK2dhY2tlcm5kIGluIGRlciBFY2tlIHN0ZWhlbiBzaWVodC4iCisKKyJTaWUgZ2Fja2VydCBuaWNodC4iLCBicnVtbXRlIFJvbWVvIHZlcmFlcmdlcnQuCisKKyJPaCwgIGljaCAgdmVyZ2Fzcy4iICBNZXJjdXRpbyAgendpbmtlcnRlICBCZW5ldm9saW8gIHp1LiAgIlNpZSAga2ljaGVydCAgIG51cgorbWFlZGNoZW5oYWZ0IGhpbnRlciBkZXIgdm9yZ2VoYWx0ZW5lbiBIYW5kLiIKKworIkFjaCwgUm9tZW8sIHdhcyBzaW5kIFNpZSBhYmVyIGF1Y2ggZnVlciBlaW4gU2NobGltbWVyLiIsIHF1aWVrdGUgQmVuZXZvbGlvIGltCitGYWxzZXR0LgorCisiSG9lcnQgYXVmLCBpY2gga29tbWUgamEgc2Nob24gbWl0LCBhYmVyIHRhbnplbiB3ZXJkZSBpY2ggbmljaHQuIgorCisiRGFzIHdlcmRlbiB3aXIgamEgc2VoZW4uIFZpZWxsZWljaHQgZnJhZ2UgaWNoIFJvc2FsaW5lLCBvYiBzaWUgbWl0IG1pciB0YW56dCwKK2Rhbm4gd2V0dGUgaWNoLCBkYXNzIGR1IG5pY2h0cyBlaWxpZ2VyZXMgenUgdHVuIGhhc3QsICBhbHMgIG1pY2ggIGFienVsb2VzZW4uIgorTWVyY3V0aW8gbmFobSBCZW5ldm9saW9zIEhhbmQuICJBY2ggIGJpdHRlLCAgc2Nob2Vuc3RlICBSb3NhbGluZSwgIHdvbGxlbiAgU2llCituaWNodCBtaXQgbWlyIHRhbnplbj8iCisKKyJPaCwgbnVyIHp1IGdlcm5lLCBsaWVic3RlciBNZXJjdXRpby4iIEJlbmV2b2xpbyBtYWNodGUgIGVpbmVuICBLbmlja3MuICAiQWJlcgordHJldGVuIFNpZSBtaXIgbmljaHQgc28gYXVmIGRpZSBGdWVzc2Ugd2llIFJvbWVvISIKKworUm9tZW8gZXJncmlmZiBCZW5ldm9saW9zIEtyYXdhdHRlIHVuZCB6b2cga3JhZWZ0aWcgZGFyYW4uICJJY2ggIGJpbiAgaWhyICBub2NoCituaWUgYXVmIGRpZSBGdWVzc2UgZ2V0cmV0ZW4uIgorCisiV2VpbCBkdSBub2NoIG5pZSBtaXQgaWhyIGdldGFuenQgaGFzdC4iLCBncmluc3RlIEJlbmV2b2xpby4KKworIkF1c3NlcmRlbSwgd2VubiBkdSBpaHIgbm9jaCBuaWUgYXVmIGRpZSBGdWVzc2UgZ2V0cmV0ZW4gIGJpc3QsICB2ZXJzdGVoZSAgaWNoCituaWNodCwgd2FydW0gc2llIGRpY2ggbmljaHQgbGllYmVuIHdpbGwuIiwgZnVlZ3RlIE1lcmN1dGlvIGhpbnp1LgorCitSb21lbyB2ZXJ6b2cgc2NobW9sbGVuZCBkYXMgR2VzaWNodC4gIkRhcyB3ZWlzcyBpY2ggYXVjaCBuaWNodC4iCisKKyJTY2hsdXNzIGpldHp0LCB3aXIgZ2VoZW4gaGluZWluIHVuZCBkdSB3aXJzdCBkaWNoIHNjaG9uIGFtdWVzaWVyZW4sIFJvbWVvLiIKKworIkRhcyBrbGluZ3Qgd2llIGVpbmUgRHJvaHVuZywgQmVuZXZvbGlvLiIsIGxhY2h0ZSAgTWVyY3V0aW8uICAiQW11ZXNpZXIgIGRpY2gsCitSb21lbywgYmlzIGRpciBkYXMgTGFjaGVuIGltIEhhbHNlIHN0ZWNrZW4gYmxlaWJ0LiIKKworIkRhcyB0dXQgZXMgYmVzdGltbXQuIiwgbWVpbnRlIFJvbWVvIGR1ZXN0ZXIuCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTcgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmE2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU3CkBAIC0wLDAgKzEsNDIwIEBACitERVIgRVJTVEUgQUtUCisJICBESUUgRlVFTkZURSBTWkVORQorCitEZXIgQWJlbmQga2FtIHVuZCBtaXQgaWhtIGRpZSBHYWVzdGUsIGRpZSBKYW1lcyAgZGFuayAgUm9tZW9zICBIaWxmZSAgZ2VmdW5kZW4KK2hhdHRlLiBTaWUgd2lzc2VuLCB3aWUgZXMgYmVpIHNvbGNoZW4gRmVzdGVuIHp1Z2VodDogRGllICBNZW5zY2hlbiwgIGRpZSAgc2ljaAorZG9ydCB0cmVmZmVuLCBzaW5kIGVpbmFuZGVyIGhhZXVmaWcgc3Bpbm5lZmVpbmQgdW5kICBrb21tZW4gIG51ciAgZGVzaGFsYiAgenVyCitQYXJ0eSwgd2VpbCBzaWUgamVtYW5kIGFuZGVyZW0gQm9zaGVpdGVuIHNhZ2VuIHdvbGxlbiwgZGllICBuaWNodHNkZXN0b3dlbmlnZXIKK2ZyZXVuZGxpY2gga2xpbmdlbi4gTmllbWFuZCBnZWh0IGdlcm5lIHp1IGVpbmVyICBzb2xjaGVuICBWZXJhbnN0YWx0dW5nLCAgZG9jaAorbWFuIGthbm4gc2ljaCBuaWNodCAgZXJsYXViZW4sCWlociAgZmVybiAgenUgIGJsZWliZW4sICB3ZWlsICBtYW4gIHNvbnN0ICBkaWUKK0dlcnVlY2h0ZSB2ZXJwYXNzdCwgZGllIGJpcyB6dXIgbmFlY2hzdGVuIFBhcnR5IGRlbiBHZXNwcmFlY2hzc3RvZmYgIGZ1ZXIgIGRpZQorZ2FuemUgZ3V0ZSBHZXNlbGxzY2hhZnQgYmlsZGVuIHdlcmRlbi4KKworSmFtZXMgd2lyYmVsdGUgbWl0IGVpbmVtIFN0YXVidHVjaCBpbiBkZXIgIEhhbmQgIGVpbiAgbGV0enRlcyAgTWFsICBkdXJjaCAgZGFzCitXb2huemltbWVyIGRlciBDYXB1bGV0cywgYXVzIGRlbSBtYW4gd29obHdlaXNsaWNoIGFsbGVzIFplcmJyZWNobGljaGUgZW50ZmVybnQKK2hhdHRlLiAiV28gc3RlY2t0IFBvdHBhbj8iCisKKyJXYXMgd2Vpc3MgZGVubiBpY2g/IiwgZnJhZ3RlIHNlaW4gS29sbGVnZS4KKworIkRhIHN0ZWhlbiBqYSBub2NoIGRpZSBTdHVlaGxlISBNdXNzIGljaCAgZGVubiAgYWxsZXMgIHNlbGJzdCAgbWFjaGVuPyIgIEphbWVzCitzY2huYXBwdGUgc2ljaCBlaW5lbiBLdWVjaGVuanVuZ2VuIGJlaSBkZW4gSGFhcmVuIHVuZCBzY2h1YnN0ZSBpaG4gaW4gUmljaHR1bmcKK2RlciB1bnNjaHVsZGlnIGRhc3RlaGVuZGVuIFN0dWVobGUuICJMb3MsIGJyaW5nIHNpZSByYXVzLiIKKworIkphd29sbCwgSnVuZ2NoZW4sIGhvbCBpaG4gcmF1cy4iIEphbWVzZW5zIEtvbGxlZ2UgaGllbHQgc2ljaCBkZW4gQmF1Y2guCisKKyJLZWluZSBaZWl0IGpldHp0IGZ1ZXIgV2l0emUuIiwgZ3JvbGx0ZSBKYW1lcy4gIlNpZWggenUsIGRhc3MgZWluICBTdHVlY2sgIHZvbgorZGVtIE1hcnppcGFuIGZ1ZXIgbWljaCB1ZWJyaWdibGVpYnQuIgorCisiTWFjaCBpY2guIiwgYW50d29ydGV0ZSBkZXIgYW5kZXJlIHVuZCB2ZXJzY2h3YW5kIG1pdCBlaW5lbSAgVGFibGV0dCAgYXVmICBkZW0KK0FybSBpbiBSaWNodHVuZyBLdWVjaGUuCisKK0phbWVzIHN0YXBlbHRlIGRpZSBTdHVlaGxlIGF1ZmVpbmFuZGVyLiAiUG90cGFuISIKKworIkljaCBiaW4gamEgc2Nob24gZGEuIEtvbW0gbWFsIHdpZWRlciBydW50ZXIuIiBQb3RwYW4gbGVja3RlICBzaWNoICBkaWUgIFJlc3RlCitkZXIgU2Nob2tvbGFkZW5zb3NzZSB2b24gZGVuIEZpbmdlcm4uCisKKyJXbyBoYXN0IGR1IGVpZ2VudGxpY2ggbmljaHQgZGllIEZpbmdlciBkcmluPyIsIGZyYWd0ZSBKYW1lcy4gIkxvcywgIGxvcywgIHdpcgoraGFiZW4gbmljaHQgZXdpZyBaZWl0LiBJc3QgZGllIEJ1ZWhuZSBmZXJ0aWc/IgorCisiSXN0IHNpZS4iCisKKyJEdSBoYXN0IGF1Y2ggZGllIFJ1aGUgd2VnLiIKKworIkJlc3NlciBydWhpZyBibGVpYmVuIGFscyBlaW5lbiBIZXJ6aW5mYXJrdCBiZWtvbW1lbi4iLCBncmluc3RlICBQb3RwYW4uICAiSG0sCitpc3QgZGFzIE1hcnppcGFuPyIKKworIkVzIGlzdCBfbWVpbl8gTWFyemlwYW4uIiBKYW1lcyBzdG9wZnRlIHNpY2ggZGFzIFN0dWVjayBpbiBkZW4gTXVuZC4gIkJvIGVpYmVuCitpZSBlbm4/IgorCisiS2VpbiBHcnVuZCwgc2ljaCB6dSB1ZWJlcnNjaGxhZ2VuLCBpbSBNb21lbnQgc3RlaGVuIHNpZSBhdWYgZGVyIFRlcnJhc3NlICB1bmQKK3JhdWNoZW4uIFplaXQgZ2VudWcsIGhpZXIgZmVydGlnIHp1IHdlcmRlbi4iCisKK0phbWVzIHNjaGx1Y2t0ZSBkZW4gbGV0enRlbiBCaXNzZW4gaGludW50ZXIgdW5kIHJpZWIgc2ljaCBkZW4gQmF1Y2guICJEYXMgIHdhcgorZ3V0LiBBbHNvLCB3ZWl0ZXIgamV0enQsIGRlbiBsZXR6dGVuIGJlaXNzZW4gZGllIEh1bmRlLiIKKworIkRlbiBsZXR6dGVuIGJlaXNzdCBKYW1lcy4iLCBncmluc3RlIFBvdHBhbi4KKworRGllIE11c2lrZXIsIGRpZSBnZXJhZGUgbWl0IGRlbSAgU3RpbW1lbiAgaWhyZXIgIEluc3RydW1lbnRlICBmZXJ0aWcgIGdld29yZGVuCit3YXJlbiwgc3BpZWx0ZW4gZGVuIFJpdmVyIEt3YWkgTWFyc2NoIHVuZCBiZWdsZWl0ZXRlbiBkYW1pdCBKYW1lcyBBYmdhbmcuCisKKyJKZXR6dCB6aXRpZXJlbiBzaWUgbmljaHQgbnVyIGF1cyB2b2VsbGlnIGFuZGVyZW4gUXVlbGxlbiwgamV0enQgIHNwaWVsZW4gIHNpZQorYXVjaCBub2NoIGRpZSBmYWxzY2hlIE11c2lrLiIgQXp6dXJvIHNjaHVldHRlbHRlIHNpY2ggdmVyendlaWZlbHQuCisKKyJHb2VubiBpaG5lbiBkZW4gU3Bhc3MuIiwgbWVpbnRlIFVsby4gIk5hY2hoZXIgbXVlc3NlbiAgc2llICBlaCAgbnVyICBTY2hsYWdlcgorc3BpZWxlbi4iCisKK0F6enVybyBkZXV0ZXRlIGF1ZiBkaWUgVHVlci4gIkRhIGtvbW1lbiBzaWUuIEFiZXIgd28gc3RlY2t0IGRlbm4gUm9tZW8/IgorCisiRGVyIGtvbW10IGJlc3RpbW10IGdsZWljaC4iIFVsbyB6dWNrdGUgZGllIFNjaHVsdGVybi4gIkVyIHdpcmQgZGFzIFJlbmRlenZvdXMKK21pdCBzZWluZW0gU2NoaWNrc2FsIGthdW0gdmVycGFzc2VuIHdvbGxlbi4iCisKKyJLbGFuZyBhYmVyIHZvcmhpbiBnYW56IHNvLiBOYSwgd2lyIHdlcmRlbiBzZWhlbi4gSnVsaWEgaXN0IGplZGVuZmFsbHMgZGEuIgorCisiSW4gZGllc2VtIHdlaXNzZW4gS2xlaWQgc2llaHQgc2llIHppZW1saWNoIHNjaGxhbmsgYXVzLiIgVWxvIHNjaHVldHRlbHRlICBkZW4KK0tvcGYuICJTaWUgaGFldHRlIGJlc3NlciBldHdhcyBmYXJiaWdlcyBhbmdlem9nZW4uIgorCisiU2NobGFuaz8iICBBenp1cm8gIHNjaGF1dGUgIGhpbnVlYmVyLiAgIlNvICBuZXR0ICBrYW5uICBhdWNoICBudXIgIGVpbmUgIEZyYXUKK3VudGVydHJlaWJlbi4iCisKK0ZyYXUgQ2FwdWxldCwgZGVyZW4gYmxvbmRlcyBIYWFyICB1ZWJlciAgZGFzICBkdW5rZWxibGF1ZSAgS2xlaWQgIHp1ICBmbGllc3Nlbgorc2NoaWVuLCBiZXVndGUgc2ljaCB6dSBpaHJlciBDb3VzaW5lIGhlcnVlYmVyLiAiTWVpbmUgTGllYnN0ZSwgIHdhcyAgZnVlciAgZWluCit3dW5kZXJzY2hvZW5lcyBLbGVpZCBkdSBkYSB0cmFlZ3N0ISIgSWhyZSBBdWdlbiBmdW5rZWx0ZW4uICAiSWNoICBoYWJlICBkaWVzZW4KK1N0aWwgbGV0enRlcyBKYWhyIHNjaG9uIGFuIHVuc2VyZXIgUHV0emZyYXUgYmV3dW5kZXJ0LCBkdSBtdXNzdCBtaXIgIHVuYmVkaW5ndAorc2FnZW4sIHdvIGR1IGVzIGhhc3QgbWFjaGVuIGxhc3Nlbi4iCisKK0hlbGVuYSBsYWVjaGVsdGUgdW5kIHplaWd0ZSBkYWJlaSB6dSB2aWVsZSAgWmFlaG5lLiAgIkFiZXIgIG51ciAgd2VubiAgZHUgIG1pcgorc2Fnc3QsIHdlbGNoZXIgRnJpc2V1ciBkZWluIEhhYXIgenVyaWNodGV0LiIKKworVWxvIGJvZyBzaWNoIGF1ZiBpaHJlbSBBc3Qgdm9yIHVudGVyZHJ1ZWNrdGVtIExhY2hlbi4gIkhhc3QgIGR1ICBkYXMgIGdlaG9lcnQsCitBenp1cm8/IiBTaWUgcHJ1c3RldGUgbG9zLiAiWnVyaWNodGV0Li4uIgorCisiSG0/IiBBenp1cm9zIEF1Zm1lcmtzYW1rZWl0IGdhbHQgZGVuIGp1ZW5nZXJlbiB1bnRlciBkZW4gd2VpYmxpY2hlbiBHYWVzdGVuLgorCisiRGllc2UgIFN0aWNoZWxlaSAgaXN0ICBkb2NoICBkYXMgIHNjaG9lbnN0ZSAgYW4gIHNvICBlaW5lbSAgRmVzdC4iICBVbG8gICB3YXIKK29mZmVuc2ljaHRsaWNoIGluIGlocmVtIEVsZW1lbnQuCisKK0hlcnIgQ2FwdWxldCBicmVpdGV0ZSB0aGVhdHJhbGlzY2ggZGllIEFybWUgYXVzLiAiR2VnZXNzZW4gIGhhYmVuICB3aXIsICBqZXR6dAord29sbGVuIHdpciAgZGVuICBEYW1lbglHZWxlZ2VuaGVpdCAgZ2ViZW4sICBkaWUgIEthbG9yaWVuICBhYnp1YXJiZWl0ZW4uIiAgRXIKK3Zlcm5laWd0ZSBzaWNoIHVlYmVydHJpZWJlbiB2b3IgRnJhdSBDYXB1bGV0LiAiTWVpbmUgTGllYmU/IgorCitEYXMgR2VzaWNodCwgZGFzIEZyYXUgQ2FwdWxldCB6b2csIGxpZXNzIGtlaW5lbiBad2VpZmVsIGRhcmFuLAlkYXNzICBiZWkgIGRlbgorUXVhbGl0YWV0ZW4gaWhyZXMgR2F0dGVuIGFscyBUYWVuemVyIGRpZSBCZXRvbnVuZyBhdWYgIGRlciAgZXJzdGVuICBTaWxiZSAgdm9uCitRdWFsaXRhZXQgbGFnLiAiVmllbGxlaWNodCAgc29sbHRlbiAgd2lyICBoZXV0ZSAgZGllICBqdW5nZW4gIExldXRlICBkZW4gIFRhbnoKK2Vyb2VmZm5lbiBsYXNzZW4sIG1laW4gTGllYmVyLiIgU2llIHdpbmt0ZSBKdWxpYSB1bmQgIFBhcmlzICBoZXJhbi4gICJTZWlkICBzbworbGllYiwgS2luZGVyLiIKKworIkdhbnogcmVjaHQsIExpZWJzdGUsIHdpciB3ZXJkZW4gYWxsbWFlaGxpY2ggenUgIGFsdCAgZGFmdWVyLiIsICBzdGltbXRlICBIZXJyCitDYXB1bGV0IHp1IHVuZCBlcm50ZXRlIGRhZnVlciBlaW5lbiBnaWZ0aWdlbiBCbGljayB2b24Jc2VpbmVyCUZyYXUsICBkZW4gIGVyCitqZWRvY2ggdHVubGljaHN0IHVlYmVyc2FoLiAiV2FzLCBIZXJtYW5uLCBpc3Qgc2Nob24gZWluZSBnYW56ZSBaZWl0IGhlciwgIGRhc3MKK3dpciBudXIgenVtIFNwYXNzIGdldGFuenQgaGFiZW4sIG5pY2h0PyIKKworIkphIGRvY2guIiBTZWluIENvdXNpbiBIZXJtYW5uIGxpZXNzICBzaWNoICBzY2h3ZXIgIG5lYmVuICBpaG4gIGF1ZiAgZGllICBCYW5rCitmYWxsZW4uICJEYXMgaXN0IGJlc3RpbW10IHNjaG9uIHp3YW56aWcgSmFocmUgaGVyLiIKKworIkFjaCwgc28gbGFuZyBrYW5uIGRhcyBkb2NoIG5pY2h0IHNlaW4uIFNjaGxpZXNzbGljaCBoYWJlbiB3aXIgIGJlaSAgTHVjZW50aW9zCitIb2NoemVpdCBub2NoIG1hZWNodGlnIGRpZSBNYWVkY2hlbiBnZXdpcmJlbHQuIiwgbGFjaHRlIENhcHVsZXQuCisKKyJOZWluLCBkYSBiaW4gaWNoIGdhbnogc2ljaGVyLiBTY2hsaWVzc2xpY2ggd2FyICBMdWNlbnRpb3MgIEhvY2h6ZWl0ICBudXIgIGVpbgoraGFsYmVzCUphaHIgIG5hY2ggIEtsZWluLU1hcmt1cyAgVGF1ZmUsICB1bmQgIGRlciAgd2lyZCAgIGRlbW5hZWNoc3QJc2VsYmVyCitTY2h3aWVnZXJ2YXRlci4iCisKKyJEYXMga2FubiBkb2NoIG5pY2h0IHNlaW4uIEtpbmRlciwgS2luZGVyLCB3aWUgZGllIFplaXQgdmVyZ2VodC4iIEhlcnIgQ2FwdWxldAordGFldHNjaGVsdGUgZGllIEhhbmQgc2VpbmVyIEZyYXUgdW5kIGxhZWNoZWx0ZSBkdWVtbWxpY2gsIGFscyBpaG0gYXVmZ2luZywgd2FzCitlciBnZXJhZGUgZ2VzYWd0IGhhdHRlLiAiQWJlciBkYW1hbHMgZ2FiIGVzIGRpY2ggIGphICBub2NoICBnYXIgIG5pY2h0LCAgbWVpbmUKK0xpZWJlLiIKKworIlBmZnQuIiwgbWFjaHRlIEZyYXUgQ2FwdWxldCB1bmQgd2FuZHRlIHNpY2ggIHdpZWRlciAgaWhyZXIgIENvdXNpbmUgIHp1LCAgZGllCitlaW5lbiBNb21lbnQgbGFuZyBkaWUgQmVoZXJyc2NodW5nIHZlcmxvciB1bmQgdWViZXIgZGFzIGdhbnplIEdlc2ljaHQgZ3JpbnN0ZS4KKworIlNjaGF1IGFuLCBIZXJtYW5uLCB3aXIgYmVrb21tZW4gc29nYXIgIHVuZXJ3YXJ0ZXRlbiAgQmVzdWNoLiIgIENhcHVsZXQgIGVyaG9iCitzaWNoIHVuZCBnaW5nIGF1ZiBSb21lbyB1bmQgc2VpbmUgRnJldW5kZSB6dS4gIldpbGxrb21tZW4sIG1laW5lIEhlcnJlbiwgIGFiZXIKK251ciwgd2VubiBzaWUgYXVjaCB3aXNzZW4gd2llIG1hbiB0YW56dC4iCisKK01lcmN1dGlvIHZlcmJldWd0ZSBzaWNoIGFuZGV1dHVuZ3N3ZWlzZS4gIkphLCBkYXMgd2lzc2VuIHdpci4iCisKKyJEYW5uIGZ1ZWhsZW4gU2llIHNpY2ggZ2FueiB3aWUgZGFoZWltLiIKKworUm9tZW9zIEF1Z2VuIHNjaHdlaWZ0ZW4gZHVyY2ggZGVuIFNhYWwgdW5kIHN1Y2h0ZW4gUm9zYWxpbmUsIGJpcyBzaWUgYW4gIEp1bGlhCitoYWVuZ2VuYmxpZWJlbi4gRWluZW4gQXVnZW5ibGljayBsYW5nIGhpZWx0IGRpZSBXZWx0IGRlbiBBdGVtIGFuLiBEaWUgIE11c2lrZXIKK3ZlcnN0dW1tdGVuLCBkaWUgVGFlbnplciBzdGFuZGVuIHN0aWxsLCAgZGllICBhZWx0ZXJlbglNYWVubmVyICBsaWVzc2VuICBpaHJlCitXZWluZ2xhZXNlciBzaW5rZW4sIGRlbiBEYW1lbiBibGllYmVuIGZ1ZXIgZWluZW4gTW9tZW50IGRpZSBCb3NoZWl0ZW4gaW0gSGFsc2UKK3N0ZWNrZW4gdW5kICBzZWxic3QgIEphbWVzICB2ZXJnYXNzICBmdWVyICBkZW4JSGF1Y2ggIGVpbmVzICBBdWdlbmJsaWNrcyAgZGFzCitTY2huYXBzZ2xhcyBpbiBzZWluZXIgSGFuZC4gRWluZSBHYXNzZSBzY2hpZW4gc2ljaCBkdXJjaCBkaWUgTWVuc2NoZW4gaGluZHVyY2gKK2F1Znp1dHVuLCBpbiBkZXIgZGllIG1ldGFwaG9yaXNjaGVuIEJsaXR6ZSwgZGllIHp3aXNjaGVuIGRlbiBBdWdlbiBSb21lb3MgIHVuZAorSnVsaWFzIGhpbiB1bmQgaGVyc2Nob3NzZW4ga2VpbmVuIFNjaGFkZW4gYW5yaWNodGVuIGtvbm50ZW4uCisKK0Rhbm4gZmllbCBKYW1lcyBkYXMgR2xhcyBhdXMgZGVyIEhhbmQgdW5kIGRlciBCYW5uIHdhciBnZWJyb2NoZW4uCisKK1JvbWVvIGVyZ3JpZmYgZGVuIEFlcm1lbCBlaW5lcyBLZWxsbmVycy4gIldlciBpc3Qgc2llPyIKKworIkRpZSBvYmxpZ2F0b3Jpc2NoZSBGcmFnZS4iLCBtdXJtZWx0ZSBBenp1cm8gdW5kIHZlcnN1Y2h0ZSwgZGllIEZhc3ppbmF0aW9uIHp1Cit1ZWJlcnNwaWVsZW4sIGRpZSBhdWNoIGlobiBlcmZhc3N0IGhhdHRlLgorCisiS2VpbmUgQWhudW5nLCBpY2ggYmluIG51ciB6dXIgQXVzaGlsZmUgaGllci4iLCBhbnR3b3J0ZXRlIGRlciBLZWxsbmVyLgorCisiRGllIG9ibGlnYXRvcmlzY2hlIEFudHdvcnQuIiBVbG8gc2Nod2VsZ3RlIGluICBkZXIgIFJvbWFudGlrICBkZXIgIFNpdHVhdGlvbi4KKyJIYWx0IGRpY2ggZmVzdCwgQXp6dXJvLCBqZXR6dCBsZWd0IGVyIGxvcy4iCisKK0F6enVybyBzdG9laG50ZS4gIkljaCBnZWggbWlyIGRlcndlaWwgZWluZSBGbGllZ2UgZmFuZ2VuLiIKKworQXVjaCBNZXJjdXRpbyB3YXIgUm9tZW9zIHZlcnp1ZWNrdGVyIEdlc2ljaHRzYXVzZHJ1Y2sgbmljaHQgZW50Z2FuZ2VuLiAiV28gaXN0CitkZW5uIFJvc2FsaW5lPyIKKworIldlciBpc3QgUm9zYWxpbmU/IiwgZnJhZ3RlIFJvbWVvLiBFciBibGlja3RlIHp1IFVsbyBoaW51ZWJlciwgIGRpZSAgc2ljaCAgYXVmCitpaHJlbSBBc3Qgdm9ybGVobnRlLiAiU2llIGlzdCB3aWUgZWluZSBUYXViZSwgZGllIHp3aXNjaGVuIEtyYWVoZW4gZmxpZWd0LCBzbywKK3dpZSBzaWUgZGEgZHJ1ZWJlbiB6d2lzY2hlbiBkZW4gYW5kZXJlbiBGcmF1ZW4Jc3RlaHQuCVNvICBzY2hsYW5rICB3aWUgIGVpbmUKK2p1bmdlIEJpcmtlLiIKKworQXp6dXJvIGthbSBtaXQgZWluZXIgTW90dGUgaW0gU2NobmFiZWwgenVydWVjayB1bmQgcmVpY2h0ZSAgc2llICBVbG8uICAiQmlya2U/CitEYXMgc2luZCBkaWUgbWFnZXJlbiBEaW5nZXIsIGRpZSBiZWkgamVkZW0gU3R1cm0gU2Nod2llcmlna2VpdGVuIGhhYmVuLCBzdGVoZW4KK3p1IGJsZWliZW4sIG5pY2h0PyIKKworIkR1IGJpc3Qgd2lkZXJsaWNoLCBBenp1cm8uIiBVbG8gdmVyc3BlaXN0ZSBkaWUgIE1vdHRlLCAgb2huZSAgZGVuICBCbGljayAgdm9uCitSb21lbyB6dSBsYXNzZW4uCisKKyJJY2ggaGFiZSBub2NoIG5pZSBlaW5lIEZyYXUgd2llIHNpZSBnZXNlaGVuLiAgVW5kICBpY2ggIFRyb3R0ZWwgIGRhY2h0ZSwgIGljaAorbGllYnRlIFJvc2FsaW5lISIKKworIlRyb3R0ZWwgaXN0IGRhcyByaWNodGlnZSBXb3J0LiIsIG11cm1lbHRlIEF6enVyby4KKworIlNhZyBpY2ggZG9jaCBkaWUgZ2FuemUgWmVpdC4iLCB2ZXJzZXR6dGUgVWxvLgorCitUeWJhbHQgZHJlaHRlIGRlbiBLb3BmIHVuZCBlcmthbm50ZSBSb21lby4gIldhcyBkZW5uLCB3aWUgZGVubj8gRGFzICBpc3QgIGRvY2gKK1JvbWVvIE1vbnRhZ3VlLCBkYSBkcnVlYmVuPyIsIGZyYWd0ZSBlciBIZXJybiBDYXB1bGV0LgorCisiSmEgdW5kPyIgSGVyciBDYXB1bGV0IHZlcnN0YW5kIHNlaW5lbiBOZWZmZW4gbmljaHQuCisKKyJFciBpc3QgYmVzdGltbXQgbnVyIGhlcmdla29tbWVuLCB1bSB1bnMgZGFzIEZlc3QgenUgdmVyZGVyYmVuLiIgVHliYWx0IGxvZXN0ZQorc2VpbmVuIERlZ2VuIGluIGRlciBTY2hlaWRlLgorCisiV2llIGtvbW1zdCBkdSBkZW5uIGRhcmF1Zj8iCisKKyJFciBpc3QgZWluIE1vbnRhZ3VlLCBvZGVyPyBLYW5uc3QgZHUgZGlyIGV0d2FzIGFuZGVyZXMgdm9yc3RlbGxlbiwgIGFscyAgZGFzcworZXIga2VpbmUgR2VsZWdlbmhlaXQgYXVzbGFlc3N0LCB1bnMgenUgYWVyZ2Vybj8iCisKKyJEYXMgaWhyIGp1bmdlbiBMZXV0ZSBhdWNoIGltbWVyIG51ciBkYXMgU2NobGVjaHRlIGluIGFuZGVyZW4gc2VoZW4gbXVlc3N0LiBFcgoraXN0IGp1bmcsIGFsc28gd2lyZCBlciBoZXJnZWtvbW1lbiBzZWluLCB1bSB6dSB0YW56ZW4uIEdpYiBhbHNvIFJ1aGUuIgorCisiTGllYmVyIE9ua2VsLCBkZW0gd2VyZGUgaWNoJ3MgemVpZ2VuLiIsIGtudXJydGUgVHliYWx0LgorCisiV2VubiBkdSBkYXJhdWYgYmVzdGVoc3QsIGRhbm4gYmVzaWVnZSBpaG4gYXVmIGRlciBUYW56ZmxhZWNoZS4iCisKKyJNaXQgZWluZW0gRGVnZW4gaW4gZGVyIEhhbmQuIiwgZnJldXRlIHNpY2ggVHliYWx0LgorCisiTmVpbiwgbWl0IGVpbmVtIE1hZWRjaGVuIGltIEFybS4iIENhcHVsZXQgIGRhY2h0ZSAgYW4gIHNlaW5lICBHZWxkYm9lcnNlICB1bmQKK2RhcmFuLCBkYXNzIGVyIHNpY2ggZWluZSBuZXVlcmxpY2hlIEdlbGRzdHJhZmUgbmljaHQgbGVpc3RlbiBrb25udGUuICJJbW1lcmhpbgoraXN0IGVyIGVpbiBHYXN0IHVuZCBpbSBHZWdlbnNhdHogenUgZGlyIGlzdCBlcgltaXIgIGhldXRlICBhYmVuZCAgbm9jaCAgbmljaHQKK3VuYW5nZW5laG0gYXVmZ2VmYWxsZW4uIgorCisiQWJlci4uLiIgVHliYWx0IGtvbm50ZSBuaWNodCBhdXMgc2VpbmVyIEhhdXQuCisKKyJCZW5pbW0gZGljaCwgdmVyc3RlaHN0IGR1PyBKYSwgTGl2aWEsIGRhIGhhc3QgZHUgb2huZSBad2VpZmVsIHJlY2h0LiIgRXIgd2FyZgorVHliYWx0IGVpbmVuIGxldHp0ZW4gQmxpY2sgenUgdW5kIGthbSAgZGFubiAgc2VpbmVuICBQZmxpY2h0ZW4JYWxzICBHYXN0Z2ViZXIKK25hY2guCisKKyJPaC1vaC4iLCBtYWNodGUgVWxvLgorCisiRXIgaXN0IHNhdWVyLiIsIHN0aW1tdGUgQXp6dXJvIGlociB6dS4KKworIlNhdWVyPyBFciBpc3QgZGFlbWxpY2guIiBUeWJhbHQgYmV6b2cgQXp6dXJvcyBLb21tZW50YXIgYXVmIHNlaW5lbiBPbmtlbC4KKworIktyYWguIiwgYW50d29ydGV0ZSBVbG8uCisKKyJXZWlzc3QgZHUgd2FzLCBLcmFlaGU/IiBUeWJhbHRzIEF1Z2VuIGdsaXR6ZXJ0ZW4uCisKKyJLcmFoPyIKKworIkljaCB3ZXJkZSBSb21lbyB6ZWlnZW4sIHdhcyBpY2ggdm9uIGlobSBoYWx0ZS4gVmllbGxlaWNodCBuaWNodCAgamV0enQsICBkZW5uCittZWluIHR1ZWRkZWxpZ2VyIE9ua2VsIHdpbGwgbWljaCBqYSBuaWNodCBsYXNzZW4sIGFiZXIgYmFsZC4gU2VociBiYWxkLiIKKworQXp6dXJvIHNhaCBUeWJhbHQgbmFjaC4gIkRhcyBhbHNvIHdhciBkZXIgQXVmdHJpdHQgZGVzIEJvZXNld2ljaHRzLiIKKworIlZlcmdpc3MgaWhuLiBHdWNrIGxpZWJlciBkYSBydWViZXIuIFNpbmQgIHNpZSAgbmljaHQgIG5pZWRsaWNoPyIgIFVsb3MgIEF1Z2VuCitoYXR0ZW4gZWluZW4gIEF1c2RydWNrLCAgZGVuICBBenp1cm8gIHZvbiAgRnJhdWVuICBrYW5udGUsICBkaWUgIGVpbmFuZGVyICBtaXQKK0tpbmRlcndhZ2VuIGltIFBhcmsgYmVnZWduZXRlbiB1bmQgaWhyZSBLaW5kZXIgdmVyZ2xpY2hlbi4KKworUm9tZW8gaGF0dGUgaW56d2lzY2hlbiBkZW4gQnJlaSBpbiBzZWluZW4gQmVpbmVuICBiZXNpZWd0ICB1bmQJZXMgIGdlc2NoYWZmdCwKK3NpY2ggZHVyY2ggZGFzIEdlZHJhZW5nZSBkZXIgR2Flc3RlIHp1IEp1bGlhIHZvcnp1YXJiZWl0ZW4uIE51biBzdGFuZCAgZXIgIHZvcgoraWhyIHVuZCBzY2hpZW4gZWluZW4gZXJuc3RoYWZ0ZW4gVmVyc3VjaCB6dSB1bnRlcm5laG1lbiwgIGluICBpaHJlbiAgQXVnZW4gIHp1CitlcnRyaW5rZW4uCisKKyJFciBzaWVodCBsYWVjaGVybGljaCBhdXMuIiBBenp1cm8ga2FubnRlICBrZWluICBNaXRnZWZ1ZWhsICBmdWVyICBkZW4gIGZyaXNjaAorVmVybGllYnRlbi4gIlNjaG5hcHB0IG1pdCBvZmZlbmVtICBNdW5kICBuYWNoICBMdWZ0ICB3aWUgIGVpbiAgRmlzY2ggIGF1ZiAgZGVtCitUcm9ja2VuZW4uIgorCitOYWNoIGVpbmVyIFdlaWxlIHNhaCBSb21lbyBhdWYgc2VpbmUgSGFuZCAgaGluYWIgIHVuZCAgZWluZSAgRWluZ2VidW5nCXp1Y2t0ZQorZHVyY2ggc2VpbiBHZXNpY2h0IHdpZSBlaW4gQmxpdHogdWViZXIgZWluZW4gZHVua2xlbiBIaW1tZWwuICJEYXJmIGljaCBkaXIgZGllCitIYW5kIGdlYmVuPyIKKworQXp6dXJvIHN0b2VobnRlLgorCisiV2FydW0/IiBKdWxpYSBoYXR0ZSBSb21hbmUgZ2VsZXNlbi4KKworIkljaCBtb2VjaHRlIGRpciBndXRlbiBUYWcgc2FnZW4uIgorCisiQWguIEphLCBkdSBkYXJmc3QgbWlyIGRpZSBIYW5kIGdlYmVuLiIgSnVsaWFzIFNldWZ6ZXIgdmVyc2NobW9seiBtaXQgQXp6dXJvcywKK2RlciBzaWNoIGF1ZiBlaW5lciBaaW1tZXJwZmxhbnplIG5pZWRlcmdlbGFzc2VuIGhhdHRlLgorCisiV2VubiBpY2ggZGljaCBhbmZhc3NlLi4uIiwgZmx1ZXN0ZXJ0ZSBBenp1cm8uICJOZWluLCAgd2FydGUuICBXZW5uICBpY2ggIGRpY2gKK2JlcnVlaHJlLCBmdWVobGUgaWNoIG1pY2ggd2llIGVpbiBrbGVpbmVyIEp1bmdlIHZvciBlaW5lbSBXZWlobmFjaHRzYmF1bS4iCisKK1JvbWVvIHdpZWRlcmhvbHRlIEF6enVyb3MgV29ydGUuCisKKyJXZWlobmFjaHRzYmF1bT8gSGFiZSBpY2ggZGVubiBwaWVrc2lnZSBOYWRlbG4/IE9kZXIgYmluIGljaCB6dSBhdWZnZXB1dHp0PyIKKworIkFlaC4uIiwgbWFjaHRlIFJvbWVvIHVuZCB3YXJmIGVpbmVuIHZlcnp3ZWlmZWx0ZW4gQmxpY2sgYXVmIEF6enVybywgIGRlciAgbnVyCitoYWVtaXNjaCBncmluc3RlIHVuZCBkZW4gYW5nZWhlbmRlbiAgTGllYmhhYmVyCXNlaW5lbQlTY2hpY2tzYWwgIHVlYmVybGllc3MuCitSb21lbyBob2x0ZSB0aWVmIEx1ZnQgIHVuZCAgZ2luZyAgaW0gIEdlaXN0ZSAgYWxsZSAgbWl0ICBlaW5lbQlXZWlobmFjaHRzYmF1bQorYXNzb3ppaWVydGVuIEdlZGFua2VuIGR1cmNoLCBkb2NoIGFiZ2VzZWhlbiB2b24gZGVuIE5hZGVsbiAgdW5kICBkZW0gIFNjaG11Y2ssCitkaWUgSnVsaWEgYmVyZWl0cyBlcndhZWhudCBoYXR0ZSwgd29sbHRlIGlobSBudXIgZGVyIER1ZnQgIGVpbmZhbGxlbi4gIE1vbWVudCwKK2RhY2h0ZSBlciwgZGVyIER1ZnQhICJJY2ggd29sbHRlIHNhZ2VuLCBkdSBkdWZ0ZXN0IHdpZSBlaW4gV2VpaG5hY2h0c2JhdW0uIFNvLAorYWxzIHNlaSBlaW4gZ2FuemVyIFdhbGQgaW4gZWluZW0gZWluemlnZW4gWmltbWVyLiIgUm9tZW8gZnVlaGx0ZSBkaWUgQWxwZW4gdm9uCitzZWluZW0gSGVyemVuIGZhbGxlbi4KKworSnVsaWEgaG9sdGUgdGllZiBMdWZ0LCBiZXNhbm4gc2ljaCBkYW5uIGFiZXIgaWhyZXIgZ3V0ZW4gTWFuaWVyZW4gdW5kIHN0YXR0IHp1CiticnVlbGxlbiwgc2Vua3RlICBzaWUgIGRpZSAgU3RpbW1lICB6dQllaW5lbSAgdW5oZWlsdmVya3VlbmRlbmRlbiAgRmx1ZXN0ZXJuLgorIldpbGxzdCBkdSB3aXJrbGljaCBzYWdlbiwgZGFzcyBpY2ggbmFjaCBfSE8tRnJpc2NoXyAgcmllY2hlPyIKKworIldhcyBtZWludCBzaWUgbWl0IEhPLUZyaXNjaD8iLCBmcmFndGUgQXp6dXJvIHZlcndpcnJ0LgorCisiSGFpbWxpY2hlcy1PZXJ0Y2hlbi1GcmlzY2guIiwgYW50d29ydGV0ZSBVbG8sICBkaWUgIFJvbWVvcyAgTGVpZCAgbmljaHQgIG1laHIKK2VydHJhZ2VuIGtvbm50ZSB1bmQgaWhtIGxlaXNlIGlucyBPaHIgZmx1ZXN0ZXJ0ZTogIkljaCBzdGVoZSB2b3IgZGlyICB3aWUgIGVpbgorS2luZCB1bmQgYmV3dW5kZXJlIGRlaW5lIFNjaG9lbmhlaXQuIFdvIGR1IGJpc3QsIHdlcmRlbiBUcmFldW1lIHdhaHIuIgorCitSb21lb3MgTGlwcGVuIGJld2VndGVuIHNpY2gsIGFscyBlciBkaWUgV29ydGUgd2llZGVyaG9sdGUgdW5kIGFuIGRlciByaWNodGlnZW4KK0JldG9udW5nIHVlYmVybGVndGUuIFNjaGxpZXNzbGljaCBmYXNzdGUgZXIgc2ljaCBlaW4gSGVyeiB1bmQgc3ByYWNoIHNpZSAgbGF1dAorYXVzLiBKdWxpYSwgZGllIHNjaG9uIGhhbGIgZW50c2NobG9zc2VuIGdld2VzZW4gd2FyLCBkZW4ganVuZ2VuIE1hbm4sIGRlciBzaWNoCitzbyB0b2VscGVsaGFmdCBiZW5haG0gc3RlaGVuenVsYXNzZW4sIHNjaG1vbHogZGFoaW4uICJXaXJrbGljaD8iCisKKyJPaCwgamEuIiwgdmVyc2ljaGVydGUgaWhyIFJvbWVvLiAiVW5kIHN1ZXNzIHdpZSBlaW4gTWFyemlwYW5hcGZlbC4iICBOdW4sICBkYQorZXIgZWluZW4gSGlud2VpcyBiZWtvbW1lbiBoYXR0ZSwga2FtICBzZWluZSAgWnVuZ2UgIG1pdCAgZGVtICBBdXNzcHJlY2hlbiAgZGVyCitLb21wbGltZW50ZSBrYXVtIG5vY2ggbmFjaC4gIkRlaW4gSGFhciBpc3QgZ29sZGVuIHdpZSBkYXMgIEtsZWlkICBkZXMgIEVuZ2VscywKK2RlbiB3aXIgZGFoZWltIGltbWVyIGF1ZiBkaWUgU3BpdHplIHNldHplbi4gRGVpbmUgSGFlbmRlIHNpbmQgZ2VuYXVzbyB6aWVybGljaAord2llIHNlaW5lLiBXZWlzc3QgZHUsIGVyIGlzdCBhdXMgV2FjaHMsIHVuZCBsZWlkZXIgaXN0IGVyIGVpbm1hbCAgenUgIG5haGUgIGFuCitlaW5lIEtlcnplIGdlcmF0ZW4gdW5kIGRhYmVpIHNpbmQgZGllIEhhZW5kZSBlaW4gIGJpc3NjaGVuICBnZXNjaG1vbHplbi4gIEFiZXIKK21hbiBrYW5uIGltbWVyIG5vY2ggc2VoZW4sIGRhc3MgZXMgSGFlbmRlIHNpbmQuIERlaW4gS2xlaWQgIGdsaXR6ZXJ0ICB3aWUgIGRpZQorU3RhbmlvbHN0ZXJuZSwgZGllIHdpciBpbW1lciB3ZXJmZW4sIGRhbWl0IHNpZSBuaWNodCBzbyAgaGluZ2VzZXR6dCAgYXVzc2VoZW4uCitEZWluZSBBdWdlbiBzY2hpbW1lcm4gd2llIGRpZSBLZXJ6ZW4gdW5kIHNvd2llc28gaGFiZSBpY2ggIGRhcwlHZWZ1ZWhsLCAgZGFzcworc2llIG1pY2ggZ2xlaWNoIHZlcmJyZW5uZW4gd2VyZGVuLiIgQXVmIGRlbiBsZXR6dGVuIFNhdHogd2FyICBSb21lbyAgYmVzb25kZXJzCitzdG9seiwgZGVubiBlciBoYXR0ZSBlaW5tYWwgaW4gZWluZW0gUm9tYW4gc2VpbmVyIE11dHRlciAgZ2VzdG9lYmVydCAgdW5kICB3YXIKK3VlYmVyIGRpZSBXb3J0ZSBfYnJlbm5lbmRlXyBfTGllYmVfIGdlc3RvbHBlcnQuCisKK0p1bGlhIHVlYmVybGVndGUga3Vyeiwgb2Igc2llIGF1ZiBkaWUgZ2VzY2htb2x6ZW5lbiBIYWVuZGUgZGVzIEVuZ2VscyAgZ2VuYXVlcgorZWluZ2VoZW4gc29sbHRlLCBkb2NoIGRhbm4gc2Nob2Igc2llIGRlbiBHZWRhbmtlbiAgYmVpc2VpdGUuICAiV2VubiAgaWNoICBlaW5lCitLZXJ6ZSB3YWVyZSwgd3VlcmRlIGljaCBzY2htZWx6ZW4uIiwgc3RlbGx0ZSBzaWUgZmVzdC4KKworIkRhcmYgaWNoIGRpY2ggc2NobWVsemVuPyIsIGZyYWd0ZSBSb21lbywgZGVyIG51biBrZWNrIHd1cmRlLgorCisiV2VubiBkdSBkaWUgRmxhbW1lICBiaXN0LCAgZGllICBtaWNoICBzY2htaWx6dCwgIGdlaHN0ICBkdSAgYXVzLCAgc29iYWxkICBpY2gKK2dlc2NobW9semVuIGJpbi4iCisKK1JvbWVvIGRhY2h0ZSBlaW5lbiBNb21lbnQgbmFjaC4gIk9oLCBkYXMgaXN0IG5pY2h0IHNjaGxpbW0sIGRlbm4gd2VubiBpY2ggIGRhcworV2FjaHMgbmljaHQgbWVociBoYWJlLCBudWV0enQgbWlyIGF1Y2ggZGVyIERvY2h0IG5pY2h0cy4iCisKK0p1bGlhIHdhcmYgZWluZW4gendlaWZlbG5kZW4gQmxpY2sgYXVmIFJvbWVvcyBNaXR0ZS4gIkRvY2h0PyIKKworIkFlaC4uLiIgUm9tZW8gem9lZ2VydGUuICJOYWphLCBpY2ggbWVpbmUsIHdlbm4gZHUgbmljaHQgIGluICBkZXIgIFdlbHQgIGJpc3QsCitkYW5uIGthbm4gaWNoIHNvd2llc28gbmllIG1laHIgYnJlbm5lbi4iCisKKyJBY2ggc28uIgorCitQb2xseSwgZGllIG1pdCBBcmd1c2F1Z2VuIHVlYmVyIGRpZSBUdWdlbmQgZGVyCWJlaWRlbglqdW5nZW4JTGV1dGUgIGdld2FjaHQKK2hhdHRlLCB3YWVobHRlIGRpZXNlbiBBdWdlbmJsaWNrLCB1bSB6dSBKdWxpYSB6dSB0cmV0ZW4uICJEZWluZSBNdXR0ZXIgbW9lY2h0ZQorZGljaCBzcHJlY2hlbiwgU2NoYXR6LiIKKworSnVsaWEgZHJlaHRlIGRhcyBHZXNpY2h0IHp1ciBTZWl0ZSB1bmQgem9nIGVpbmUgU2NobnV0ZSwgZGFubiB6dWNrdGUgIHNpZSAgbWl0CitkZW4gIFNjaHVsdGVybgl1bmQgIGdpbmcgIHp1ICBpaHJlciAgTXV0dGVyLCAgZGllICBhbQlBdXNnYW5nICAgZGllCUdhZXN0ZQordmVyYWJzY2hpZWRldGUuCisKKyJXZXIgaXN0IGRlbm4gaWhyZSBNdXR0ZXI/IiwgZnJhZ3RlIFJvbWVvLgorCisiRGFzIHdpc3NlbiBTaWUgbmljaHQ/IiBQb2xseSB3YXIgZWhybGljaCAgZXJzdGF1bnQuICAiSWhyZSAgTXV0dGVyICBpc3QgIEZyYXUKK0NhcHVsZXQsIHVuZCB3ZW5uIGVzICBzdGltbXQsICBkYXNzICBUb2VjaHRlciAgZGllICBqdWVuZ2VyZW4gIEF1c2dhYmVuICBpaHJlcgorTXVldHRlciBzaW5kLCBkYW5uIGlzdCBzaWUgZWluZSB0dWdlbmRoYWZ0ZSB1bmQga2x1Z2UgRnJhdS4iCisKKyJIbS4iLCBtYWNodGUgUm9tZW8uCisKKyJOYWphLCB2aWVsbGVpY2h0IGhhdCBzaWUgYXVjaCAgZWluICBiaXNzY2hlbiAgdm9uICBtZWluZW0gIGd1dGVuICBHZWRhZWNodG5pcworbWl0YmVrb21tZW4uIFVuZCBhdXNzZXJkZW0gYmVrb21tdCBzaWUgaWhyZXMgVmF0ZXJzIE1vbmV0ZW4uIgorCisiV2FzIGthbm4gZWluIE1hbm4gc2ljaCBtZWhyIHd1ZW5zY2hlbi4iLCBtZWludGUgQXp6dXJvIGxlaXNlLgorCisiUHJpbWEuIiwgc2V1Znp0ZSBSb21lbyBiaXR0ZXIuICJEYW5uIGthbm4gaWNoIHNpZSBhbHNvIGdsZWljaCB2ZXJnZXNzZW4uIEFiZXIKK2RhcyB3aWxsIGljaCBuaWNodCwgdW5kIHdlbm4gc2llIHRhdXNlbmRtYWwgIGRpZSAgVG9jaHRlciAgZGVzCWFsdGVuICBDYXB1bGV0Cit3YWVyZS4iCisKK0JlbmV2b2xpbyBuYWhtIHNlaW5lbiBDb3VzaW4gYmVpbSBBcm0uICJLb21tLCBSb21lbywgd2lyICB3b2xsZW4gIGdlaGVuLiAgU2llaAorbnVyLCB3aXIgc2luZCBzY2hvbiBmYXN0IGRpZSBsZXR6dGVuLCBnbGVpY2ggYmVpc3NlbiB1bnMgZGllIEh1bmRlLiIKKworIkphLCBzbyBrb21tdCBlcyBtaXIgdm9yLiIsIG11cm1lbHRlIFJvbWVvIHVuZCBmb2xndGUgQmVuZXZvbGlvIHp1ciBUdWVyLgorCitIZXJyIENhcHVsZXQgbGFlY2hlbHRlIGJyZWl0LCBhbHMgZXIgc2VpbmUgR2Flc3RlIHNhaC4gIkFiZXIgbWVpbmUgSGVycmVuLCBTaWUKK3dvbGxlbiBkb2NoIG5pY2h0IHNjaG9uIGdlaGVuPyIgU2VpbiBHZXNpY2h0IGJla2FtIGVpbmVuIGVyc3RhdW50ZW4gIEF1c2RydWNrLAorYWxzIGlobSBUeWJhbHQgaW5zIE9ociBmbHVlc3RlcnRlLiAiVGF0c2FlY2hsaWNoPyIgIEVyICByaWViICBzaWNoICB1ZWJlciAgZGllCitHbGF0emUuICJOYSwgZGFubiBtdWVzc2VuIFNpZSB3b2hsIGdlaGVuLCBlcyB3YXIgbWlyIGVpbiBWZXJnbnVlZ2VuLCBTaWUgIGhpZXIKK2JlZ3J1ZXNzZW4genUgZHVlcmZlbi4iCisKK1R5YmFsdCBzY2hlbmt0ZSBSb21lbyBlaW4gTGFlY2hlbG4sIGRhcyBhbiBlaW5lbiBUaWdlciBnZW1haG50ZS4gIkd1dGUgIE5hY2h0LAorUm9tZW8uIgorCitGcmF1IENhcHVsZXQsIGRpZSB3ZWl0ZXJlIFp1c2FtbWVuc3RvZXNzZSB2ZXJtZWlkZW4gIHdvbGx0ZSwgIGhha3RlICBzaWNoICBiZWkKK2locmVtIE1hbm4gZWluLiAiS29tbSwgTGllYmVyLCB3aXIgd29sbGVuIHp1IEJldHQgIGdlaGVuLCAgaWNoICBiZWtvbW1lICBtZWluZQorTWlncmFlbmUuIgorCitKdWxpYSB2ZXJzdGF1dGUgZGVuIFRyaWNrIHp1bSBzcGFldGVyZW4gR2VicmF1Y2ggaW4gaWhyZW0gR2VkYWVjaHRuaXMgdW5kICB6b2cKK2FuIFBvbGx5cyBBZXJtZWwuICJXZXIgaXN0IGRlciBkYT8iIFNpZSB6ZWlndGUgdmVyc3RvaGxlbiBtaXQgZGVtIEZpbmdlci4KKworIkRhcyBpc3QgVGliZXJpbyBqdW5pb3IuIERlciBlaW56aWdlIFNvaG4gdW5kIEVyYmUgZGVzIGFsdGVuICBUaWJlcmlvLiIgIFBvbGx5CitsYWVjaGVsdGUuCisKKyJVbmQgZGVyPyIKKworIlBldHJ1Y2hpbywgYWJlciBkZXIgaXN0IG5pY2h0cyBiZXNvbmRlcmVzLiIKKworV2llZGVyIGRldXRldGUgSnVsaWEgbWl0IGRlbSBGaW5nZXIuICJVbmQgZGVyIGRhPyBEZXIgZGVuIGdhbnplbiAgQWJlbmQgIG5pY2h0CitlaW4gTWFsIGdldGFuenQgaGF0PyIKKworUG9sbHkgd2FyZiBpaHIgZWluZW4gbWlzc3RyYXVpc2NoZW4gQmxpY2sgenUuICJXYXJ1bSB3aWxsc3QgZHUgZGFzIGRlbm4gIGFsbGVzCit3aXNzZW4/IgorCisiT2NoLCBpY2ggbXVzcyBkb2NoIGRpZSBMZXV0ZSBrZW5uZW4sIG9kZXI/IiBKdWxpYSBzY2hhdXRlIGlocmUgQW1tZSAgbWl0ICBkZW0KK0JsaWNrIGFuLCBkZXIsIHdpZSBzaWUgd3Vzc3RlLCBhbSAgYmVzdGVuICBnZWVpZ25ldCAgd2FyLCAgamVkZW4gIFZlcmRhY2h0ICB6dQoremVyc3RyZXVlbi4KKworIkphLiBBYmVyIHdlciBkZXIgSnVuZ2UgaXN0LCB3ZWlzcyBpY2ggbmljaHQuIgorCisiRGFubiB0dSBtaXIgZGllIExpZWJlIHVuZCBmcmFnIGlobiBuYWNoICBzZWluZW0gIE5hbWVuLCAgamE/IiAgSnVsaWEgIHNldWZ6dGUKK3RpZWYuICJXZW5uIGVyIHNjaG9uIHZlcmhlaXJhdGV0IGlzdCwgd2VyZGUgaWNoIGlucyBLbG9zdGVyIGdlaGVuLiIgVW5kZXV0bGljaAorZXJpbm5lcnRlIHNpZSBzaWNoIGFuIGVpbmVuIFJvbWFuLCBpbiBkZW0gZGVyIEhlbGQsIG5hY2ggbGFuZ2VuIEphaHJlbiBlbmRsaWNoCitXaXR3ZXIsIGluIGVpbmVtIEtsb3N0ZXIgc2VpbmUgZWluemlnZSBHZWxpZWJ0ZSB0cmlmZnQgdW5kIGRpZXNlIGlocmUgR2VsdWViZGUKK3NvZm9ydCB2ZXJnaXNzdC4KKworIk5laW4sIGRhbm4gd2lyc3QgZHUgUGFyaXMgaGVpcmF0ZW4uIiwgbWVpbnRlIFBvbGx5IGJlc3RpbW10LiAgIkVyICBpc3QgIFJvbWVvCitNb250YWd1ZS4iCisKKyJEYXMgZ2lidCBlcyBkb2NoIG5pY2h0ISIgSW4gSnVsaWFzIEF1Z2VuIG1hY2h0ZSBzaWNoIFNjaHJlY2tlbiBicmVpdC4gIkVyIGlzdAorZGVyIGVpbnppZ2UgTWFubiwgZGVuIGljaCBsaWViZW4ga2FubiwgdW5kIGF1c2dlcmVjaG5ldCAgaWhuICBkYXJmICBpY2ggIG5pY2h0CitsaWViZW4sICB3ZWlsICBzb25zdCAgbWVpbiAgVmF0ZXIgIGVpbmVuICBIZXJ6YW5mYWxsICBiZWtvbW10LiIgIEVpbmUgIHdlaXRlcmUKK0VyaW5uZXJ1bmcgc2Nod2FtbSBpbiBpaHJlbSBIaXJuIG5hY2ggb2JlbiB3aWUgZWluZSBXYXNzZXJsZWljaGU6ICBFaW5lICBqdW5nZQorRnJhdSwgZGllIGhlaXJhdGV0IHVuZCB1bmdsdWVja2xpY2ggaXN0LCBiaXMgaWhyIEdlbGllYnRlciAgc2llICBhdXMgIGRlciAgRWhlCitlbnRmdWVocnQsIGRhbWl0IHNpZSBpbiBlaW5lbSBmZXJuZW4gTGFuZCBnbHVlY2tsaWNoIHd1ZXJkZW4uIFNpZSBzZXVmenRlIG5vY2gKK2Vpbm1hbC4gIldlbm4gZGFzIHNvIGlzdCwgd2VyZGUgIGljaCAgd29obCAgZnVlciAgaW1tZXIgIHVuZ2x1ZWNrbGljaCAgc2Vpbi4iLAorbWVpbnRlIHNpZSB1bmQgZ2VmaWVsIHNpY2ggYmVyZWl0cyBqZXR6dCBpbiBpaHJlciBSb2xsZSBhbHMgSXNvbGRlLgorCisiV2FzIHNvbGwgZGVubiBkZXIgVW5zaW5uLCBLaW5kPyIsIGZyYWd0ZSBQb2xseSB1bndpbGxpZy4KKworIkFjaCwgc2Nob24gZ3V0LCBkYXMgdmVyc3RlaHN0IGR1IHNvd2llc28gbmljaHQuIiwgYW50d29ydGV0ZSBKdWxpYSBtaXQgIGVpbmVtCit0cmFnaXNjaGVuIExhZWNoZWxuLgorCitEaWUgU3RpbW1lIEZyYXUgQ2FwdWxldHMgcmllZiBuYWNoIGlocmVyIFRvY2h0ZXIgdW5kIFBvbGx5IHNjaG9iICBKdWxpYSAgc2FuZnQKK2FiZXIgYmVzdGltbXQgaW5zIEhhdXMuICJLb21tLCBaZWl0LCBpbnMgQmV0dCB6dSBnZWhlbi4gQXVzc2VyZGVtICBzaW5kICBqZXR6dAorYWxsZSB3ZWcgdW5kIGVzIGdpYnQgbmljaHRzIG1laHIgenUgc2VoZW4uIgorCisiU3RpbW10LiIgQXp6dXJvIGdhZWhudGUuICJIb2VjaHN0ZSBaZWl0IGZ1ZXIgZWluZW4gZ2VtdWV0bGljaGVuIEFzdCwgTGllYmVzLiIKKworIkVzIGtvbW10IG5vY2ggd2FzLCBnZXNjaGxhZmVuIHdpcmQgc3BhZXRlci4iCisKKyJPaCwgbmVpbiwgbmljaHQgaGV1dGUuIiwgc3RvZWhudGUgQXp6dXJvLgorCisiX0Rhc18gbWVpbmUgaWNoIG5pY2h0LiIKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9yb21fanVsL3NlaXRlOCBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3ZjRkZgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTgKQEAgLTAsMCArMSw3MiBAQAorREVSIFpXRUlURSBBS1QKKworQW4gZGllc2VyIFN0ZWxsZSBzb2xsdGUgZWlnZW50bGljaCB3aWVkZXIgZWluIENob3IgYXVmdHJldGVuLCBkb2NoICBpbnp3aXNjaGVuCitoYWJlbiBTaWUgZ2V3aXNzIG5pY2h0cyBtZWhyIGdlZ2VuIGRpZSBLdWVyenVuZ2VuIGltIEV0YXQgdW5kIG5laG1lbiAgbWl0ICBVbG8KK3VuZCBBenp1cm8gdm9ybGllYi4gV2VubiBpY2ggZWhybGljaCBzZWluIHNvbGwsIG1pciBzaW5kICBkaWUgIGJlaWRlbiAgcmljaHRpZworYW5zIEhlcnogZ2V3YWNoc2VuLCBvYndvaGwgZWluIENob3Igd2FocnNjaGVpbmxpY2ggZnVlZ3NhbWVyIHdhZXJlLgorCisiTidBYmVuZCwgS29sbGVnZS4iIEF6enVybyBuaWNrdGUgZWluZXIgRmxlZGVybWF1cyB6dSwgIGRpZSAgaW0gIFNjaGltbWVyICBkZXIKK0xhbXBlbiBpbSBIYXVzIG5hY2ggSW5zZWt0ZW4gamFndGUuCisKKyJTc3NlaWQgc3NzcGFldCBkcmFuLiIsIGtvbW1lbnRpZXJ0ZSBkaWUgRmxlZGVybWF1cy4gIldvbGx0IGlociBuaXNzc3QgIGxpZWJlcgorc3NzbGFmZW4gZ2VoZW4/IgorCisiS29lbm5lbiB3aXIgbm9jaCBuaWNodC4iIFVsbyBnYWVobnRlIGhpbnRlciBkZW0gdm9yZ2VoYWx0ZW5lbiBGbHVlZ2VsLgorCisiV2Fzc3MgaXNzc3QgZGVubiBub2NoPyIgQmVkYXVlcm5kIGJsaWNrdGUgZGllIEZsZWRlcm1hdXMgaGludGVyICBlaW5lciAgTW90dGUKK2hlciwgZGllIEF6enVybyBpaHIgd2VnZ2VzY2huYXBwdCBoYXR0ZS4gICJXZW5uICBpaHIgIHNzc28gIHNzc3BhZXQgIG5vY2ggIGF1Zgorc3NzZWlkLCBkYW5uIGxhc3NzdCB3ZW5pZ3Nzc3RlbnNzcyBkaWUgU3NzbmFlYmVsIHZvbiAgbWVpbmVtICBGcnVlaHNzc3R1ZWNrLiIsCitzY2hhbHQgc2llLgorCisiSWNoIGhhYmUgSHVuZ2VyLiIsIGVudHNjaHVsZGlndGUgc2ljaCBBenp1cm8uCisKKyJJc3NzIGF1Y2guIEFiZXIgamV0c3NzdCBlcnNzc2FlaGx0LCB3YXNzcyBnZWh0IGRlbm4gdm9yPyIKKworIldpciBzZWhlbiBqZW1hbmRlbSB6dSwgZGVyIGdlcmFkZSBkaWUgQmVnaWVyZGUgZ2VnZW4gZGllICBMaWViZSAgZWluZ2V0YXVzY2h0CitoYXQuIgorCisiTmVpbiwgd2llIHJvbWFudGlzc3MhIiAgV2llICBhbGxlICBGbGVkZXJtYWV1c2UgIHdhciAgYXVjaCAgZGllc2UgIGhpZXIgIHNlaHIKK2dlZnVlaGxzYmV0b250LgorCisiSXNzcyBsaWViZSBzc3NvbHNzc2UgR2Vzc3Npc3NzdGVuLiIKKworIkphLCBpY2ggYXVjaC4iLCBmcmV1dGUgc2ljaCBVbG8uCisKKyJFcnNzc2FlaGwhIgorCisiUm9tZW8gaGF0IGZlc3RnZXN0ZWxsdCwgZGFzcyBMaWViZSB1bmQgQmVnZWhyZW4gbmljaHQgZGFzIGdsZWljaGUgaXN0LiIKKworIkRhc3NzIGhhZXR0ZSBpc3NzIGlobSB2b3JoZXIgc3NzYWdlbiBrb2Vubm5lbi4iCisKK1VsbyBuaWNrdGUgd2Vpc2UuICJJY2ggd2Vpc3MuIFdhaHJzY2hlaW5saWNoIGhhZXR0ZSBlcyAgaWhtICBqZWRlICBGcmF1ICBzYWdlbgora29lbm5lbi4iCisKK1NpZSAgd2FyZiAgQXp6dXJvICBlaW5lbiAgaXJvbmlzY2hlbiAgU2VpdGVuYmxpY2sgIHp1LgkiQWJlciAgIE1hZW5uZXIgICBzaW5kCitTa2xhdmVuLi4uIgorCisiLi4uIHdlbmlnZXIgYW5zc3N0YWVuZGlnZXIgQWJzc3Npc3NzdGVuLiIsIHZvbGxlbmRldGUgZGllIEZsZWRlcm1hdXMgZGVuIFNhdHoKK3ZlcnNjaGFlbXQuCisKKyJHZW5hdS4gTmEsIHVuZCBqZXR6dCBzdGVja3QgZXIgaW4gIGVpbmVyICBib2VzZW4gIEtsZW1tZS4iICBVbG8gIG1hY2h0ZSAgZWluZQorU3Bhbm51bmdzcGF1c2UuCisKKyJTc3NhZyBzc3NvbiEiCisKKyJFciBoYXQgc2ljaCBhdXNnZXJlY2huZXQgaW4gZWluZSBGcmF1IGVpbmVyICB2ZXJmZWluZGV0ZW4gIEZhbWlsaWUgIHZlcmxpZWJ0LAordW5kIHp1IGFsbGVtIFVlYmVyZHJ1c3MgbGllYnQgc2llIGlobiBhdWNoLiIKKworVHJhZW5lbiB0cmF0ZW4gaW4gZGllIGt1cnpzaWNodGlnZW4gQXVnZW4gZGVyICBGbGVkZXJtYXVzLiAgIldpZSAgc3NzcmVja2xpc3NzCitzc3NvZW4hIFdpZSBoZWlzc3N0IGVzc3M6IERpZSBMaWViZSBmaW5kZXQgZWluZW4gV2VnLiIKKworIldpciB3ZXJkZW4gc2VoZW4sIG9iIGVyIGVzIHNjaGFmZnQsIGRlbiBXdXJtIHZvbSBIYWtlbiAgenUgIGhvbGVuICBvaG5lICBzaWNoCithdWZ6dXNwaWVzc2VuLiIgQXp6dXJvIGZhbmQgc2VpbmUgRnJldWRlIGRhcmFuLCBkaWUgRnJhdWVuIG1pdCB3ZW5pZyAgc2Nob2VuZW4KK01ldGFwaGVybiB6dSBzY2hvY2tpZXJlbi4gIkVyIGthbm4gaWhyIG5pY2h0IG1hbCBlaW4gU3RhZW5kY2hlbiBicmluZ2VuLCAgZGVubgord2VubiBtYW4gaWhuIGhpZXIgaW0gR2FydGVuIGVyd2lzY2h0Li4uIiBBenp1cm8gbWFjaHRlIGVpbmUgIGVpbmRldXRpZ2UgIEdlc3RlCit1bmQgc2NoYXV0ZSBkaWUgRmxlZGVybWF1cyBlcndhcnR1bmdzdm9sbCBhbiwgZGllIHNlaW5lbiAgQmxpY2sgIGJlbWVya3RlICB1bmQKK3NpY2ggbWl0IHdlaWJsaWNoZW0gR3Jvc3NtdXQgZG9jaCBub2NoIHp1IGVpbmVtIGVudHNldHp0ZW4gS2V1Y2hlbiBlbnRzY2hsb3NzLgorCisiQWJlciBkYXNzcyBpc3NzdCBqYS4uLiIKKworIlN0aWxsISIgIFVsbyAgaGF0dGUgIFJvbWVvICBqZW5zZWl0cyAgZGVyICBNYXVlciAgZW50ZGVja3QsICBkaWUgIGRlbiAgR2FydGVuCit1bXNjaGxvc3MuCisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci9zcGVjaWFsL3NwZWNpYWwvcm9tX2p1bC9zZWl0ZTkgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YzFmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3JvbV9qdWwvc2VpdGU5CkBAIC0wLDAgKzEsMTMwIEBACitERVIgWldFSVRFIEFLVAorCSAgRElFIEVSU1RFIFNaRU5FCisKK1JvbWVvIHN0ZWxsdGUgc2ljaCBhdWYgZGllIFplaGVuc3BpdHplbiB1bmQgc3BhZWh0ZSB1ZWJlciBkaWUgTWF1ZXIgaGlud2VnLiBFcgord3VuZGVydGUgc2ljaCBudXIgZWluZW4gTW9tZW50IGxhbmcgZGFydWViZXIsIGRhc3MgYXVmIGVpbiB1bmQJZGVtc2VsYmVuICBBc3QKK2VpbmUgRmxlZGVybWF1cyBrb3BmdWViZXIgIGhpbmcgIHVuZCAgZGlyZWt0ICB1ZWJlciAgaWhyICB6d2VpCUtyYWVoZW4uICBfSW5fCitfZGllc2VyXyBfTmFjaHRfLCBzbyBkYWNodGUgUm9tZW8gbWl0IGVpbmVtIFNjaHVsdGVyenVja2VuLCBfa2Fubl8gIF93aXJrbGljaF8KK19hbGxlc18gX3Bhc3NpZXJlbl8uIF9BdXNzZXJkZW1fOiBfRGFfIF9kcmluXyAgX2lyZ2VuZHdvXyAgX2lzdF8gIF9KdWxpYV8uICBFcgorendpbmtlcnRlIGRlbiBLcmFlaGVuIHp1LgorCisiV2lzc3QgaWhyLCBpY2ggZ2VoZSBoZXV0ZSBuYWNodCBuaWNodCAgbmFjaCAgSGF1c2UuICBTY2hsaWVzc2xpY2ggIGlzdCAgX3NpZV8KK2hpZXIsIGRhIGthbm4gaWNoIGVpbmZhY2ggbmljaHQgaW5zIEJldHQgZ2VoZW4sIGFscyBzZWkgbmljaHRzIHBhc3NpZXJ0LiIKKworTWVyY3V0aW8gIHVuZCAgQmVuZXZvbGlvICB0YXVjaHRlbiAgbWl0ICBkZW0gIExhZXJtLCAgZGVuICAgQmV0cnVua2VuZQkgaW1tZXIKK3ZlcmFuc3RhbHRlbiwgYW4gZGVyIFN0cmFzc2VuZWNrZSBhdWYuIFJvbWVvIGdsaXR0IG1pdCBlaW5lciBCZWhlbmRpZ2tlaXQsIGRpZQoraWhuIHNlbGJzdCBlcnN0YXVudGUsIGluIGRlbiBTY2hhdHRlbiBlaW5lcyBFaW5nYW5ncyB6dXJ1ZWNrICB1bmQgIGJldHJhY2h0ZXRlCitzZWluZSBGcmV1bmRlIG1pdCBlaW5lbSBHcmluc2VuLgorCisiUm9tZW8sIGhleSwgYWxkZXIgU2NodW5nZSwgd28gc2NodGVja3NjaHQgZHUgZGVubj8iLCByaWVmIEJlbmV2b2xpby4KKworIkVyIGlzY2h0IHNjaGxhdWVyIGdld2VzY2hlbiBhbHNjaCAgd2lyICB1bmQgIGhhdCAgc2NoaXNjaCAgc2Nob24gIGluc2NoICBCZWRkCitnZWxlc2NodC4uLiIKKworTWVyY3V0aW8gc2FoIGdhbnogZGFuYWNoIGF1cywgYWxzIGhhYmUgZXIgZnVlciBuaWNodHMgc28gZ3V0ZSAgVmVyd2VuZHVuZyAgd2llCitmdWVyIGVpbiBCZXR0LgorCisiU2VpbmVuIFNjaGFlZGVsIG1vZWNodGUgaWNoICBtb3JnZW4gIGZydWVoICBuaWNodCAgaGFiZW4uIiwgIGJlbWVya3RlICBBenp1cm8KK21pdGZ1ZWhsZW5kLgorCisiT2IgZXIgd29obCBnZW5hdXNzc28gc3NzbWVja3Qgd2llIGVpbmUgRmxpZWdlLCAgZGllICBhdXNzcyAgZWluZW0gIFdlaW5nbGFzc3MKK2dlc3NzbHVlcnJmdCBoYXQ/IiwgdWViZXJsZWd0ZSBkaWUgRmxlZGVybWF1cy4KKworIkR1IHdpbGxzdCBkb2NoIG5pY2h0IGV0d2EgIGRlbiAgUnVmICBkZXIgIEZsZWRlcm1hZXVzZSAgcnVpbmllcmVuICB1bmQgIGVpbmVuCitNZW5zY2hlbiBhbmtuYWJiZXJuPyIsIGZyYWd0ZSBVbG8gbWl0IGVpbmVtIGFuZ2Vla2VsdGVuIEdlc2ljaHRzYXVzZHJ1Y2suCisKKyJOZWluLCBlc3NzIHdhciBudXIgd2lzc3NzZW5zc3NhZmx0aXNzc2UgTmV1Z2llci4iCisKKyJIbS4iIFVsbyBzY2hlbmt0ZSAgZGVyICBGbGVkZXJtYXVzICBlaW5lbiAgbGFuZ2VuLCAgZm9yc2NoZW5kZW4gIEJsaWNrLiAgIlNhZworbWFsLHdpZSBoZWlzc3QgZHUgZWlnZW50bGljaD8iCisKKyJXbGFkLiIgIERpZSAgRmxlZGVybWF1cyAgZ3JpbnN0ZSAgdW5kICAgbGVja3RlICAgc2ljaCAgIHVlYmVyICAgaWhyZSAgIHphcnRlLAoraHVmZWlzZW5mb2VybWlnZSBOYXNlLgorCisiV2lyIHNpbmQgVWxvIHVuZCBBenp1cm8uIiBVbG8gcnVlY2t0ZSBlaW4ga2xlaW5lcyBTdHVlY2sgdm9uIFdsYWQgYWIuCisKKyJFciBob2x0IHNjaGlzY2ggZGVuIFRvZCwgd2VubiAgZXIgIGhpZXIgIGRyYXVzY2hlbiAgcnVtc2NocHJpbmd0LiIgIEJlbmV2b2xpbworbWFjaHRlIHNpY2ggZXJuc3RlIFNvcmdlbiB1bSBzZWluZW4gQ291c2luLiAiUnVmICBpaG4sICBzY2hlaW5lICBNdS4uLiAgTXV0dGVyCityZWlzY2h0IG1pciBkZW4gS29wZiBhYiwgd2VubiBpc2NoIG9obmUgaWhuIGFua29tbWUuIgorCisiSXNjaCAgd2Vpc2NoICB3YXNjaCAgYmVzY2hlcmVzY2guIiAgQXVjaCAgTWVyY3V0aW8gIGthbm50ZSAgIEZyYXUgICBNb250YWd1ZXMKK0VpbnN0ZWxsdW5nIHp1IFNhdWZ0b3VyZW4uICJJc2NoIGhhYmUgbWFsIGluIGVpbmVtIEJ1Y2ggZ2VsZXNjaGVuLi4uIgorCisiTmVpbiEiIEJlbmV2b2xpbyBsYWNodGUuCisKKyJEb2NoLiBQYXNjaCBhdWYsIGlzY2ggd2VyZGUgaWhuIGJlc2Nod29lcmVuLiIKKworIlVuZCB3YXNjaCBzY2hvbGwgZXIgdHVuPyIKKworIkhlcmtvbW1lbiwgU2NobmFwc2NobmFzY2hlLCB3YXNjaCBkZW5uIHNjaG9uc2NodD8iIE1lcmN1dGlvIGhvbHRlIEx1ZnQuCisKKyJSb21lbyEgIElzY2ggIGJlc2Nod29lcmUgIGRpc2NoICBiZWkgIGRlaW5lciAgIFZlcmxpZWJ0aGVpdCwgICBlcnNjaGVpbmUgICBkdQorU2NoZXVmdHNjaGVyLiIKKworIkVyIGlzY2h0IGRvY2ggZ2FyIGtlaW4gU2NoYWV1ZmVyLiIgIEJlbmV2b2xpbyAgZXJpbm5lcnRlICBzaWNoICBkdW5rZWwsICBkYXNzCitSb21lbyBkZW4gZ2FuemVuIEFiZW5kIGFuIGVpbmVtIGVpbnppZ2VuIEdsYXMgV2VpbiAgZ2VuaXBwdCAgaGF0dGUgIHVuZCAgc2Nob24KK25pY2h0IG1laHIgYmVpIGlobmVuIGdld2VzZW4gd2FyLCBhbHMgc2llIGRpZSBLbmVpcGUgZ2VmdW5kZW4gaGF0dGVuLgorCisiU2NoZXVmdHNjaGVyISIgTWVyY3V0aW8gdmVyZGV1dGxpY2h0ZSBzZWluZSBXb3J0ZSwgaW5kZW0gZXIgdGllZiBzZXVmenRlLiAiRHUKK2Jpc2NodCBibG9lZCB1bmQgYmVzY2hvZmZlbi4iCisKKyJTY2h0aW1tdC4iIEJlbmV2b2xpbyBncmluc3RlLgorCisiUm9tZW8hIFNjaGFnIHdhc2NoLiBFc2NoIHJlaXNjaHQsIHdlbm4gZHUgJ0xpZWJlJyBzY2hhZ3NjaHQsIHdhc2NoICBhbmRlcmVzY2gKK2Jla29tbXNjaHQgZHUgZWggbmlzY2h0IHJhdXNjaC4iIE1lcmN1dGlvICBraWNoZXJ0ZS4gICJEdSAga2FubnNjaHQgIGF1Y2ggIGVpbgorYmkuLi4gYmlzY2guLi4iICBFaW4gIGtvbnplbnRyaWVydGVyICBBdXNkcnVjayAgdHJhdCAgYXVmICBNZXJjdWl0b3MgIEdlc2ljaHQuCisiLi4uYmlzcy1jaGVuICBqYW1tZXJuLCAgZGFubiAgIGVya2VubmVuICAgd2lyICAgZGlzY2ggICBhdWNoLiAgIEFsc2NobywgICBiZWkKK1Jvc2NoYWxpbnNjaGVucyAgIGxhbmdlbiAgIEJlaW5lbiwgICBiZWkgICAgaWhyZXIgICAgU2NodHVwc2NobmFzY2hlLAkgaWhyZW4KK1NjaG9tbWVyc2NocHJvc2NoZW4gdW5kIGlocmVtIEJ1c2NoZW46IFJvbWVvLCBlcnNjaGVpbmUhIiAgQmVuZXZvbGlvICBydWVscHN0ZQordW5nZW5pZXJ0LiAiV2VubiBlciBkaXNjaCBqZXRzY2h0IGdlaG9lcnQgaGF0LCBiZWtvbW1zY2h0IGR1IFBydWVnZWwuIgorCisiUXVhdHNjaC4gVmllbCBzY2hsaW1tZXIgd2FlcmUgZXNjaCBkb2NoLCB3ZW5uIGlzY2ggaWhuICByaWVmZSAgdW5kICBpaG4gIGRhbm4KK3NjaHRlaGVuIGxpZXNjaGUuIFNjaG8gd2FzY2ggbWFjaGVuIG51ciBnZW1laW5lIEZyYXVlbi4iIFNlaW4gIEdlc2ljaHQgIHZlcnpvZworc2ljaCBpbiBlaW5lciB0cnVua2VuZW4gUGFyb2RpZSBkZXIgVHJhdWVyLiAiQWJlciAgbGVpZGVyICBzY2hpbmQgIHNjaG8gIHZpZWxlCitGcmF1ZW4gZ2VtZWluLiIgRWluZSBXZWlsZSBoaWVsdGVuIHNpY2ggZGllIGJlaWRlbiBNYWVubmVyIGluICBkZW4gIEFybWVuICB1bmQKK2dlZGFjaHRlbiB0cmFlbmVucmVpY2ggZnJ1ZWhlcmVyIEVudHRhZXVzY2h1bmdlbi4KKworTmFjaCBlaW5lciBXZWlsZSBwdXR6dGUgc2ljaCBCZW5ldm9saW8gdW1zdGFlbmRsaWNoIGRpZSBOYXNlLCBkaWUgamV0enQgIG5pY2h0CittZWhyIG51ciB2b20gQWxrb2hvbCBnZXJvZXRldCB3YXIuICJXZWlzY2h0IGR1IHdhc2NoLCBsYXNjaCB1bnNjaCBuYWNoIEhhdXNjaGUKK2dlaGVuLCBSb21lbyB3aWxsIGJlc2NodGltbXQgZGVuIE1vbmQgYW5oZXVsZW4sIGRhIHNjaHRvZXJlbiAgd2lyICBzY2hvd2llc2NobworbnVyLiIgTWVyY3V0aW8gc2NobmllZnRlLCBkYW5uLCBpbiBzZWluZW4gU3RpbW11bmdzd2VjaHNlbG4gIHNvICBzY2huZWxsLCAgd2llCitudXIgQmV0cnVua2VuZSBlcyBzZWluIGtvZW5uZW4sIGxhY2h0ZSBlci4gIldhaHJzY2hlaW5saXNjaCBzY2hpdHNjaHQgZXIgdW50ZXIKK2VpbmVtIEJhdW0gdW5kIHd1ZW5zY2h0IHNjaGlzY2gsIGVyIG11ZXNjaHRlICBuaXNjaHQgIGFsbGVzY2ggIHNjaGVsYmVyICB0dW4uIgorU2VpbmUgZWluZGV1dGlnZSBHZXN0ZSBsaWVzcyBrZWluZW4gWndlaWZlbCBhbSBJbmhhbHQgc2VpbmVyICBXb3J0ZS4gICJBbHNjaG8sCitmdWVyIG1pc2NoIHJlaXNjaHQgaGV1dGUgbmFjaHQgZGVyIEJldHJpZWIgaW4gbWVpbmVtICBCZXR0LiIgIEVyICBiZXVndGUgIHNpY2gKK25pZWRlciB1bmQgYmV0YXN0ZXRlIGRlbiBCb2Rlbi4gIk5lZSwgZGFzY2ggaXNjaHQgbWlyIHNjaHUgaGFydCwgIGxhc2NoICB1bnNjaAorbmFjaCBIYXVzY2hlIGdlaGVuIHVuZCBSb21lby4uLiIgRXIgdWViZXJsZWd0ZSBlaW5lbiAgTW9tZW50LCAgZGFubiAgcmllZiAgZXI6CisiU2NobGFmIGd1dCwgUm9tZW8uIFVuZCB3ZW5uIGR1IGhldXQgbmFjaHQgIGtsZW1wbmVyc2NodCwgIGRhbm4gIHZlcmxlZycgIGZ1ZXIKK21pY2ggZWluIFJvaHIgbWl0LiIKKworIldhcyBmdWVyIGVpbiBvcmRpbmFlcmVyLi4uIiBVbG8gc3VjaHRlIGluIGlocmVtIEdlZGFlY2h0bmlzIG5hY2ggQXVzZHJ1ZWNrZW4sCitkaWUgIGdsZWljaHplaXRpZyAgZGFtZW5oYWZ0ICB1bmQgIGlocmVyICBTdGltbXVuZyAgYW5nZW1lc3Nlbgkgd2FyZW4sICAgZmFuZAorYWxsZXJkaW5ncyBrZWluZS4KKworIlJlY2h0IGhhc3NzdCBkdS4iIEF1Y2ggV2xhZCB3YXIgZW1wb2VydC4gIlNzc28gIHdhc3NzICBzc3NvbGx0ZW4gIHdpciAgRnJhdWVuCit1bnNzcyBuaXNzc3QgZ2VmYWxsZW4gbGFzc3NzZW4uIgorCisiSXN0IFZsYWQgbmljaHQgZWluIE1hZW5uZXJuYW1lPyIsIHdvbGx0ZSBBenp1cm8gd2lzc2VuLgorCisiTWl0IFYgc3Nzb24sIGFiZXIgaXNzcyBzc3NyZWliZSBtaXNzcyBtaXQgVy4iCisKKyJPaC4iLCBtYWNodGUgVWxvIHVuZCBydWVja3RlIHZlcmxlZ2VuIHdpZWRlciBuYWVoZXIgYW4gV2xhZCBoZXJhbi4KKworIklzc3N0IFJvbWVvIGF1Y2ggc3NzbyBlaW4gU3Nzd2Vpbj8iCisKKyJLZWluZSBBaG51bmcuIiBVbG8genVja3RlIGRpZSBTY2h1bHRlcm4uICJFciBpc3QgZWluIE1hbm4sIHdhaHJzY2hlaW5saWNoIGlzdAorZXIgYWxzbyB1bSBrZWluZW4gRGV1dCBiZXNzZXIuIgorCisiV2FzIHdpbGxzdCBkdSBkYW1pdCBzYWdlbj8iLCBmcmFndGUgQXp6dXJvIHNhZXVlcmxpY2guCisKKyJBY2gsIG5pY2h0cy4gU3RpbGwsIFJvbWVvIGtvbW10IHdpZWRlci4iCisKK1JvbWVvLCBkZXIgYXVzIGRlbSBTY2hhdHRlbiB0cmF0LCAgd2FyCWViZW5zbwl3ZW5pZyAgYmVnZWlzdGVydCAgdm9uCXNlaW5lbgorRnJldW5kZW4gd2llIFVsbyB1bmQgV2xhZC4gIkRlciBoYXQgZ3V0IHJlZGVuLCBzbyB3aWUgZXIgZ2ViYXV0ICBpc3QsICBoYXQgIGVyCitkaWUgSGFlbmRlIGltbWVyIGZyZWkuIiwgbXVybWVsdGUgZXIuIFNlaW4gQmxpY2sgZmllbCBhdWYgZGVuIEJhbGtvbiBpbSBlcnN0ZW4KK1N0b2NrIHVuZCBkZW4gQmF1bSBkYXZvci4KKworIkVyIHVlYmVybGVndCwgb2IgZXIgZGEgcmF1ZiBrb21tdC4iLCBmbHVlc3RlcnRlIFVsby4KKworIkFsc3NzbyBpc3NzdCBlciBkb2NoIGVpbiBTc3N3ZWluLiIsIHN0ZWxsdGUgV2xhZCBlYmVuc28gbGVpc2UgZmVzdC4KKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9zZWhlcmZhcS5jIGIvZC9zZWhlci9oYWV1c2VyL3NwZWNpYWwvc3BlY2lhbC9zZWhlcmZhcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODE2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvc3BlY2lhbC9zcGVjaWFsL3NlaGVyZmFxLmMKQEAgLTAsMCArMSwyNDcgQEAKK2luaGVyaXQgInN0ZC90aGluZyI7Citpbmhlcml0ICJzdGQvbW9yZSI7Citpbmhlcml0ICIvbWFpbC9uZWRpdCI7CisKKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8d2l6bGV2ZWxzLmg+CisjaW5jbHVkZSAiLi4vaGF1cy5oIgorCisjZGVmaW5lIEZBUShmKSAoU1BFQ0lBTFBBVEgrImZhcS8iKyhmKSkKKyNkZWZpbmUgRkFRVVNFUiAoeyAicnluZSIsICJ0b3NzIiB9KQorI2RlZmluZSBJU19VU0VSKHBsKSAobWVtYmVyKEZBUVVTRVIsIGdldHVpZChwbCkpID49IDApCisKK3N0YXRpYyBzdHJpbmcgKnNlaXRlOworc3RhdGljIHN0cmluZyBmLCpzOworCittYXBwaW5nIHN5bm9ueW0gPSAoW10pOworCitjcmVhdGUoKQoreworICA6OmNyZWF0ZSgpOworICBTZXRQcm9wKFBfTkFNRSwiU2VoZXJGQVEiKTsKKyAgU2V0UHJvcChQX0dFTkRFUixGRU1BTEUpOyAKKyAgU2V0UHJvcChQX05PR0VULDEpOworICBBZGRJZCggKHsiZmFxIiwic2VoZXJmYXEiLCJGQVEiLCJTZWhlckZBUSIgfSkgKTsKKyAgQWRkQ21kKCJsaWVzIiwibGVzZW4iKTsKKyAgQWRkQ21kKCh7ImJlc2NocmVpYiIsImJlc2NocmVpYmUifSksImJlc2NocmVpYmVuIik7CisgIEFkZENtZCgic2VpdGVuIiwic2VpdGVuIik7CisgIEFkZENtZCgoeyJsb2VzY2giLCJsb2VzY2hlIn0pLCJsb2VzY2hlbiIpOworICBBZGRDbWQoKHsia29waWVyIiwia29waWVyZSJ9KSwia29waWVyZW4iKTsKKyAgcmVzdG9yZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHNlaXRlID0gZ2V0X2RpcihGQVEoIioiKSktKHsiLiIsIi4uIiwiZmFxLm8ifSk7Cit9CisKK2luaXQoKQoreworICB0aGluZzo6aW5pdCgpOworICBpZiAodGhpc19wbGF5ZXIoKSAmJiBJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIG5lZGl0Ojppbml0X3Jlc2N1ZSgpOworfQorCitzdHJpbmcKK19xdWVyeV9zaG9ydCgpCit7CisgIGlmICh0aGlzX3BsYXllcigpICYmIElTX1NFRVIodGhpc19wbGF5ZXIoKSkpCisgICAgcmV0dXJuICJEaWUgU2VoZXJGQVEiOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0cmluZyAKK19xdWVyeV9sb25nKCkKK3sKKyAgaWYgKHRoaXNfcGxheWVyKCkgJiYgSVNfU0VFUih0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gIkRpZXMgaXN0IFJ5bmVzIFNlaGVyRkFRLlxuXAorV2VubiBEdSB3ZWl0ZXJlIEZyYWdlbiBvZGVyIEFucmVndW5nZW4genUgZGllc2VyIEZBUSBoYXN0LFxuXAorc2VpIHNvIG5ldHQgdW5kIHNjaGlja2UgUnluZSBlaW5lbiBrdXJ6ZW4gQnJpZWZcblxuXAorWnVtIEluaGFsdCBkZXIgRkFRIGtvbW1zdCBEdSBtaXQgPmxpZXMgaW5oYWx0PFxuIjsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK2lkKHN0cmluZyBzdHIpCit7CisgIGlmICghSVNfU0VFUih0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHJldHVybiA6OmlkKHN0cik7Cit9CisKK2ludAorc2VpdGVuKHN0cmluZyBzdHIpCit7CisgIGludCBpLGo7CisgIHN0cmluZyAqc3luOworICBjbG9zdXJlIGZpbHRlcl9sZGZpZWQ7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmKCEoaSA9IHNpemVvZihzZWl0ZSkpKQorICAgIHdyaXRlKCJLZWluZSBTZWl0ZW4gYmVzY2hyaWViZW4hXG4iKTsKKyAgZWxzZSB7CisgICAgZmlsdGVyX2xkZmllZCA9IGxhbWJkYSgoeydpbmQsJ3BhZ2UsJ21hcF9sZGZpZWQvKicqL30pLAorCQkgICAgKHsjJz09LCdwYWdlLCh7IydbLypdJyovLCdtYXBfbGRmaWVkLCdpbmR9KX0pKTsKKyAgICBmb3IgKHN0ciA9ICIiLGktPTE7aT49MDtpLS0pIHsKKyAgICAgIHN5biA9IG1faW5kaWNlcyhmaWx0ZXJfaW5kaWNlcyhzeW5vbnltLGZpbHRlcl9sZGZpZWQsc2VpdGVbaV0sc3lub255bSkpOworICAgICAgcHJpbnRmKCJTZWl0ZSAnJXMnIC0gIixzZWl0ZVtpXSk7CisgICAgICBpZiAoaj1zaXplb2Yoc3luKSkgeworCWZvcihqLT0xO2o+PTA7ai0tKQorCSAgcHJpbnRmKCInJXMnICIsc3luW2pdKTsKKwl3cml0ZSgiXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwl3cml0ZSggIihrZWluZSBTeW5vbnltZSBkZWZpbmllcnQpXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludAorbGVzZW4oc3RyaW5nIHN0cikKK3sKKyAgaWYgKCFJU19TRUVSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikgeworICAgIG5vdGlmeV9mYWlsKCJXYXMgd2lsbHN0IER1IGRlbm4gbGVzZW4/XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBsb3dlcl9jYXNlKHRoaXNfcGxheWVyKCktPl91bnBhcnNlZF9hcmdzKCkpOworICBpZiAobWVtYmVyKHNlaXRlLHN0cik8MCkgeworICAgIGlmICghbWVtYmVyKHN5bm9ueW0sc3RyKSkgeworICAgICAgbm90aWZ5X2ZhaWwoIkRpZXNlIFNlaXRlIGdpYnQgZXMgbmljaHQuLi5cbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgCisgICAgICBzdHIgPSBzeW5vbnltW3N0cl07CisgIH0KKyAgdGhpc19wbGF5ZXIoKS0+TW9yZShGQVEoc3RyKSwxKTsKKyAgcmV0dXJuIDE7Cit9CisKK2ludAorYmVzY2hyZWliZW4oc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIGZhcSwqZGVzYzsKKyAgaW50IGk7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIHN0ciA9IGxvd2VyX2Nhc2UodGhpc19wbGF5ZXIoKS0+X3VucGFyc2VkX2FyZ3MoKSk7CisKKyAgaWYgKCFzdHIgfHwgc3RyID09ICIiKSB7CisgICAgbm90aWZ5X2ZhaWwoIldhcyB3aWxsc3QgRHUgZGVubiBiZXNjaHJlaWJlbj9cbiIpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChzc2NhbmYoc3RyLCIlcyAlcyIsZmFxLHN0cikhPTIgfHwgIWlkKGZhcSkpIHsKKyAgICBub3RpZnlfZmFpbCgiU3ludGF4OiBiZXNjaHJlaWJlIGZhcSA8c2VpdGU+XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBpbXBsb2RlKG9sZF9leHBsb2RlKHN0ciwiICIpLSh7IiJ9KSwgIiAiKTsKKyAgZGVzYyA9IG9sZF9leHBsb2RlKGltcGxvZGUob2xkX2V4cGxvZGUoc3RyLCIsICIpLCIsIiksIiwiKTsKKyAgZiA9IDA7CisgIHMgPSAwOworCisgIGZvciAoaT1zaXplb2YoZGVzYyktMTtpPj0wO2ktLSkgeworICAgIGlmIChtZW1iZXIoc2VpdGUsZGVzY1tpXSk+PTApIHsKKyAgICAgIGYgPSBkZXNjW2ldOworICAgICAgcyA9IGRlc2MtKHtkZXNjW2ldfSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKCFmKSB7CisgICAgZiA9IGRlc2NbMF07CisgICAgcyA9IGRlc2NbMS4uXTsKKyAgfQorICB3cml0ZSgiQml0dGUgQmVzY2hyZWlidW5nIGZ1ZXIgZGllIEZBUS1TZWl0ZSAnIitmKyInIGFuZ2ViZW5cbiIpOworICBuZWRpdCgiZmFxIik7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorZmFxKHN0cmluZyBzdHIpCit7CisgIGludCBpOworICBzdHJpbmcgZmlsZTsKKworICBpZiAoIXN0ciB8fCBzdHIgPT0gMCkgeworICAgIHdyaXRlKCIqKiBBYmJydWNoISAqKlxuTmljaHRzIGdlYWVuZGVydCFcbiIpOworICAgIHJldHVybjsKKyAgfQorICAKKyAgaWYgKGZpbGVfc2l6ZShmaWxlPUZBUShmKSk+PTApCisgICAgcm0oZmlsZSk7CisgIHdyaXRlX2ZpbGUoZmlsZSwgc3RyKTsKKyAgaWYgKG1lbWJlcihzZWl0ZSxmKT09LTEpCisgICAgc2VpdGUgKz0gKHtmfSk7CisKKyAgZm9yIChpPXNpemVvZihzKS0xO2k+PTA7aS0tKSAKKyAgICBzeW5vbnltICs9IChbIHNbaV0gOiBmIF0pOworCisgIHNhdmVfb2JqZWN0KEZBUSgiZmFxIikpOworfQorCitpbnQKK2xvZXNjaGVuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyAqc3luOworICBpbnQgaTsKKworICBpZighSVNfVVNFUih0aGlzX3BsYXllcigpKSkKKyAgICByZXR1cm4gMDsKKworICBzdHIgPSBsb3dlcl9jYXNlKHRoaXNfcGxheWVyKCktPl91bnBhcnNlZF9hcmdzKCkpOworICBpZiAoIXN0ciB8fCBzdHIgPT0gIiIpIHsKKyAgICBub3RpZnlfZmFpbCgiV2FzIHdpbGxzdCBEdSBkZW5uIGxvZXNjaGVuP1xuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG1lbWJlcihzZWl0ZSxzdHIpPj0wKSB7CisgICAgc3luID0gbV9pbmRpY2VzKGZpbHRlcl9pbmRpY2VzKHN5bm9ueW0sCisJCQkJIGxhbWJkYSgoeydpbmQsJ3BhZ2UsJ21hcF9sZGZpZWQvKicqL30pLAorCQkJCQkoeyMnPT0sJ3BhZ2UsKHsjJ1svKl0nKi8sJ21hcF9sZGZpZWQsJ2luZH0pfSkpCisJCQkJICxzZWl0ZVtpXSxzeW5vbnltKSk7CisgICAgcm0oRkFRKHN0cikpOworICAgIHNlaXRlIC09ICh7c3RyfSk7CisgIH0KKyAgZWxzZSB7CisgICAgc3RyID0gaW1wbG9kZShvbGRfZXhwbG9kZShzdHIsIiAiKS0oeyIifSksICIgIik7CisgICAgc3luID0gb2xkX2V4cGxvZGUoaW1wbG9kZShvbGRfZXhwbG9kZShzdHIsIiwgIiksIiwiKSwiLCIpOworICB9CisgIGZvciAoaT1zaXplb2Yoc3luKS0xOyBpPj0wOyBpLS0pCisgICAgc3lub255bSA9IGZpbHRlcl9pbmRpY2VzKHN5bm9ueW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSgoeydrZXksJ2NtcH0pLAorCQkJCSAgICAoeyMnIT0sJ2tleSwnY21wLyonKi99KSksCisJCQkgICAgIHN5bltpXSk7CisKKyAgc2F2ZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHdyaXRlKCJPS1xuIik7CisgIHJldHVybiAxOworfQorCitpbnQKK2tvcGllcmVuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyAqcGFydDsKKyAgaW50IGk7CisKKyAgaWYgKCFJU19VU0VSKHRoaXNfcGxheWVyKCkpKQorICAgIHJldHVybiAwOworCisgIHN0ciA9IGxvd2VyX2Nhc2UodGhpc19wbGF5ZXIoKS0+X3VucGFyc2VkX2FyZ3MoKSk7CisgIHBhcnQgPSBvbGRfZXhwbG9kZShzdHIsIiAiKS0oeyIifSk7CisgIGlmKHNpemVvZihwYXJ0KTw0IHx8ICFpZChwYXJ0WzBdKSB8fCBwYXJ0WzJdICE9ICJuYWNoIiB8fCAKKyAgICAgbWVtYmVyKHNlaXRlLHBhcnRbMV0pID09IC0xKSB7CisgICAgbm90aWZ5X2ZhaWwoImtvcGllcmUgZmFxIDxzZWl0ZT4gbmFjaCA8YWxpYXM+XG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBwYXJ0WzFdOworICBwYXJ0PW9sZF9leHBsb2RlKGltcGxvZGUob2xkX2V4cGxvZGUoaW1wbG9kZShwYXJ0WzMuLl0sIiAiKSwiLCAiKSwiLCIpLCIsIik7CisgIGZvcihpPXNpemVvZihwYXJ0KS0xO2k+PTA7aS0tKQorICAgIHN5bm9ueW0gKz0gKFsgcGFydFtpXSA6IHN0ciBdKTsKKyAgc2F2ZV9vYmplY3QoRkFRKCJmYXEiKSk7CisgIHdyaXRlKCJPSy5cbiIpOworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci90b29scy9nZW5lcmF0b3IuYyBiL2Qvc2VoZXIvaGFldXNlci90b29scy9nZW5lcmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU0YzJiCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3Rvb2xzL2dlbmVyYXRvci5jCkBAIC0wLDAgKzEsNzQwIEBACisjaW5jbHVkZSAiLi4vaGF1cy5oIgorCitpbmhlcml0ICIvcC9zZXJ2aWNlL3dhcmdvbi9zbS9zdGF0ZW1hY2hpbmUiOworCisjaW5jbHVkZSAiL3Avc2VydmljZS93YXJnb24vc20vc3RhdGVtYWNoaW5lLmgiCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorCisjZGVmaW5lIFNUQVRFX0lETEUgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVEVfSE9VU0UgICAgICAgICAgMQorI2RlZmluZSBTVEFURV9ST09NICAgICAgICAgICAyCisjZGVmaW5lIFNUQVRFX0NIRVNUICAgICAgICAgIDMKKyNkZWZpbmUgU1RBVEVfREVUQUlMICAgICAgICAgNAorI2RlZmluZSBTVEFURV9SREVUQUlMICAgICAgICA1CisjZGVmaW5lIFNUQVRFX0NPTU1BTkQgICAgICAgIDYKKyNkZWZpbmUgU1RBVEVfRklOQUxJWkUgICAgICAgNworI2RlZmluZSBTVEFURV9FWElUUyAgICAgICAgICA4CisKKyNkZWZpbmUgU0lHX0lOSVRJQUxJWkUgICAgICAgMAorI2RlZmluZSBTSUdfSE9VU0UgICAgICAgICAgICAxCisjZGVmaW5lIFNJR19IT1VTRV9ET05FICAgICAgIDIKKyNkZWZpbmUgU0lHX1JPT00gICAgICAgICAgICAgMworI2RlZmluZSBTSUdfRE9fQ0hFU1QgICAgICAgICA0CisjZGVmaW5lIFNJR19ET19ERVRBSUwgICAgICAgIDUKKyNkZWZpbmUgU0lHX0RFVEFJTF9ET05FICAgICAgNgorI2RlZmluZSBTSUdfUkRFVEFJTF9ET05FICAgICA3CisjZGVmaW5lIFNJR19DT01NQU5EX0RPTkUgICAgIDgKKyNkZWZpbmUgU0lHX0RPX0VYSVRTICAgICAgICAgOQorI2RlZmluZSBTSUdfUk9PTV9ET05FICAgICAgIDEwCisKK3ByaXZhdGUgbm9zYXZlIHN0cmluZyBmaWxlOworcHJpdmF0ZSBub3NhdmUgaW50ICAgIGZpbmFsOworcHJpdmF0ZSBub3NhdmUgb2JqZWN0IHJhdW07Citwcml2YXRlIG5vc2F2ZSBpbnQgICAgbnI7Citwcml2YXRlIG5vc2F2ZSBvYmplY3QgaGF1c21laXN0ZXI7Citwcml2YXRlIG5vc2F2ZSBtaXhlZCAgaG1hcmdzOworCitzdHJpbmcgZHVtcChvYmplY3QgZW52LCBpbnQgZmluYWwsIG1peGVkIGFyZ3MpOworCitwcml2YXRlIHN0cmluZyBzcGVjaWFsKHN0cmluZyBzdHIpOworcHJpdmF0ZSB2b2lkIHJlbW92ZU91dHB1dEZpbGUoKTsKK3ByaXZhdGUgdm9pZCBkdW1wSG91c2UoKTsKK3ByaXZhdGUgdm9pZCBkdW1wUm9vbUhlYWRlcigpOworcHJpdmF0ZSB2b2lkIGR1bXBDaGVzdCgpOworcHJpdmF0ZSB2b2lkIGR1bXBEZXRhaWxzKCk7Citwcml2YXRlIHZvaWQgZHVtcFJlYWREZXRhaWxzKCk7Citwcml2YXRlIHZvaWQgZHVtcENvbW1hbmRzKCk7Citwcml2YXRlIHZvaWQgZG9GaW5hbGl6ZSgpOworcHJpdmF0ZSB2b2lkIGR1bXBFeGl0cygpOworcHJpdmF0ZSB2b2lkIGR1bXBSb29tVHJhaWxlcigpOworcHJpdmF0ZSB2b2lkIGRvUmV0dXJuKCk7Citwcml2YXRlIHZvaWQgc1Byb3Aoc3RyaW5nIGZpbGUsIHN0cmluZyBwTmFtZSwgc3RyaW5nIHBTdHIpOworc3RhdGljIHZvaWQgbVByb3Aoc3RyaW5nIGZpbGUsIHN0cmluZyBwTmFtZSwgbWl4ZWQgbWFwX2xkZmllZCwgaW50IHBvcywgaW50IHNpZ25hbCk7CitzdGF0aWMgdm9pZCBjUHJvcChzdHJpbmcgZmlsZSwgc3RyaW5nIHBOYW1lLCBtaXhlZCBjbWQsIGludCBwb3MsIGludCBzaWduYWwpOworcHJpdmF0ZSB2b2lkIHByZXR0eVN0cmluZyhzdHJpbmcgZmlsZSwgc3RyaW5nICpzdHIsIGludCBpbmRlbnQpOworcHJpdmF0ZSB2b2lkIHByZXR0eUFycmF5KHN0cmluZyBmaWxlLCBzdHJpbmcgKmFyciwgaW50IHNlcCk7Citwcml2YXRlIHZvaWQgaGVhZGVyUm9vbSgpOworcHJpdmF0ZSB2b2lkIHRyYWlsZXJSb29tKCk7Citwcml2YXRlIHZvaWQgaGVhZGVySG91c2UoKTsKK3ByaXZhdGUgdm9pZCB0cmFpbGVySG91c2UoKTsKKworY3JlYXRlKCkKK3sKKyAgOjpjcmVhdGUoKTsKKyAgc2V0ZXVpZChnZXR1aWQoKSk7CisgIAorICBBZGRTdGF0ZShTVEFURV9JRExFLCAwLCAwKTsKKyAgQWRkU3RhdGUoU1RBVEVfSE9VU0UsICAgICMnZHVtcEhvdXNlLCAwKTsKKyAgQWRkU3RhdGUoU1RBVEVfUk9PTSwgICAgICMnZHVtcFJvb21IZWFkZXIsIDApOworICBBZGRTdGF0ZShTVEFURV9DSEVTVCwgICAgIydkdW1wQ2hlc3QsIDApOworICBBZGRTdGF0ZShTVEFURV9ERVRBSUwsICAgIydkdW1wRGV0YWlscywgMCk7CisgIEFkZFN0YXRlKFNUQVRFX1JERVRBSUwsICAjJ2R1bXBSZWFkRGV0YWlscywgMCk7CisgIEFkZFN0YXRlKFNUQVRFX0NPTU1BTkQsICAjJ2R1bXBDb21tYW5kcywgMCk7CisgIEFkZFN0YXRlKFNUQVRFX0ZJTkFMSVpFLCAjJ2RvRmluYWxpemUsIDApOworICBBZGRTdGF0ZShTVEFURV9FWElUUywgICAgIydkdW1wRXhpdHMsIDApOworCisgIEFkZFRyYW5zaXRpb24oU01fSU5WQUxJRCwgU0lHX0lOSVRJQUxJWkUsIFNUQVRFX0lETEUsIDApOworCisgIC8vIFp1c3RhbmRzdWViZXJnYWVuZ2UgenVtIFNjaHJlaWJlbiBkZXMgSGF1c2VzCisgIEFkZFRyYW5zaXRpb24oU1RBVEVfSURMRSwgU0lHX0hPVVNFLCBTVEFURV9IT1VTRSwgIydyZW1vdmVPdXRwdXRGaWxlKTsKKyAgQWRkVHJhbnNpdGlvbihTVEFURV9IT1VTRSwgU0lHX0hPVVNFX0RPTkUsIFNUQVRFX0lETEUsICMnZG9SZXR1cm4pOworCisgIC8vIFp1c3RhbmRzdWViZXJnYWVuZ2UgenVtIFNjaHJlaWJlbiBlaW5lcyBSYXVtcworICBBZGRUcmFuc2l0aW9uKFNUQVRFX0lETEUsICAgICBTSUdfUk9PTSwgICAgICBTVEFURV9ST09NLCAjJ3JlbW92ZU91dHB1dEZpbGUpOworICBBZGRUcmFuc2l0aW9uKFNUQVRFX1JPT00sICAgICBTSUdfRE9fQ0hFU1QsICBTVEFURV9DSEVTVCk7CisgIEFkZFRyYW5zaXRpb24oU1RBVEVfUk9PTSwgICAgIFNJR19ET19ERVRBSUwsIFNUQVRFX0RFVEFJTCk7CisgIEFkZFRyYW5zaXRpb24oU1RBVEVfQ0hFU1QsICAgIFNJR19ET19ERVRBSUwsIFNUQVRFX0RFVEFJTCk7CisgIEFkZFRyYW5zaXRpb24oU1RBVEVfREVUQUlMLCAgIFNJR19ERVRBSUxfRE9ORSwgIFNUQVRFX1JERVRBSUwpOworICBBZGRUcmFuc2l0aW9uKFNUQVRFX1JERVRBSUwsICBTSUdfUkRFVEFJTF9ET05FLCBTVEFURV9DT01NQU5EKTsKKyAgQWRkVHJhbnNpdGlvbihTVEFURV9DT01NQU5ELCAgU0lHX0NPTU1BTkRfRE9ORSwgU1RBVEVfRklOQUxJWkUpOworICBBZGRUcmFuc2l0aW9uKFNUQVRFX0ZJTkFMSVpFLCBTSUdfRE9fRVhJVFMsICBTVEFURV9FWElUUyk7CisgIEFkZFRyYW5zaXRpb24oU1RBVEVfRklOQUxJWkUsIFNJR19ST09NX0RPTkUsIFNUQVRFX0lETEUsICMnZG9SZXR1cm4pOworICBBZGRUcmFuc2l0aW9uKFNUQVRFX0VYSVRTLCAgICBTSUdfUk9PTV9ET05FLCBTVEFURV9JRExFLCAjJ2R1bXBSb29tVHJhaWxlcik7CisgIAorICBTdGF0ZVRyYW5zaXRpb24oU0lHX0lOSVRJQUxJWkUpOworfQorCisKKy8vIEVyemV1Z2Ugbm9ybWFsZW4gTFBDLVF1ZWxsY29kZSBhdXMgZWluZW0gSGF1cyBvZGVyIFJhdW0uCisvLworLy8gUGFyYW1ldGVyOgorLy8gICBlbnY6IERhcyBIYXVzIG9kZXIgZGVyIFJhdW0sIGF1cyBkZW0gUXVlbGxjb2RlIGVyemV1Z3Qgd2VyZGVuIHNvbGwKKy8vICAgZmluOiBGYWxscyBnbGVpY2ggMCwgc28gd2lyZCBRdWVsbGNvZGUgZnVlciBUeXBvZml4ZXMgby5hZS4KKy8vICAgICAgICBlcnpldWd0OyBkYXMgZXJ6ZXVndGUgRmlsZSBoZWlzc3QgaW1tZXIgJ2ZpeGVkLmMnLgorLy8gICAgICAgIEFuZGVybmZhbGxzIHdpcmQgUXVlbGxjb2RlIGZ1ZXIgZWluIGVpZ2Vuc3RhZW5kaWdlcyBPYmpla3QKKy8vICAgICAgICBlcnpldWd0LiBEaWVzZXMga2FubiB6LkIuIHp1bSBBbnNjaGx1c3MgYWxzICJNYWdpZXJoYXVzIgorLy8gICAgICAgIHZlcndlbmRldCB3ZXJkZW4uIERpZSBlcnpldWd0ZW4gRmlsZXMgaGVpc3NlbgorLy8gICAgICAgICdyZXAvPG5hbWU+cmF1bTxucj4uYycgYnp3LiAncmVwLzxuYW1lPmhhdXMuYycuIEJlZmluZGV0IHNpY2gKKy8vICAgICAgICBpbiBkZW0gUmF1bSBkaWUgVHJ1aGUsIHdpcmQgenVzYWV0emxpY2ggZGllIERhdGVpCisvLyAgICAgICAgJ3JlcC88bmFtZT50cnVoZS5jJyBnZXNjaHJpZWJlbi4KKy8vCisvLyBSdWVja2dhYmV3ZXJ0OgorLy8gICBEZXIgRGF0ZWluYW1lLCBpbiBkZW4gZGllIERhdGVuIGdlc2NocmllYmVuIHd1cmRlbi4KKworc3RyaW5nCitkdW1wKG9iamVjdCBlbnYsIGludCBmaW4sIG1peGVkIGFyZ3MpCit7CisgIHN0cmluZyBvdXQ7CisgIGludCBudW07CisKKyAgaGF1c21laXN0ZXIgPSBwcmV2aW91c19vYmplY3QoKTsKKyAgaG1hcmdzID0gYXJnczsKKyAgCisgIGlmIChRdWVyeVN0YXRlKCkgIT0gU1RBVEVfSURMRSkKKyAgeworICAgIHdyaXRlKCJEZXIgR2VuZXJhdG9yIGFyYmVpdGV0IG5vY2guLi5cbkJpdHRlIHdhcnRlbiFcbiIpOworICAgIHJldHVybiAiPGtlaW5lIERhdGVpIGdlbmVyaWVydD5cbiI7CisgIH0KKyAgCisgIC8vIEZhbGxzIGVpbiBSYXVtIGdlbmVyaWVydCB3aXJkLCBlcmhhZWx0IDxucj4gZGllIFJhdW1udW1tZXIuCisgIC8vIEJlaSBkZXIgQXVzc2VuYW5zaWNodCBkZXMgSGF1c2VzIHdpcmQgPG5yPiBhdWYgLTEgZ2VzZXR6dC4KKyAgaWYgKHNzY2FuZihvYmplY3RfbmFtZShlbnYpLCAiJXNyYXVtJWQiLCBvdXQsIG51bSkgPCAyKQorICB7CisgICAgbnVtID0gLTE7CisgIH0KKyAgCisgIGlmIChmaW4pCisgIHsKKyAgICBvdXQgPSBQQVRIKyJyZXAvIitlbnYtPlF1ZXJ5T3duZXIoKTsKKworICAgIGlmIChudW0gPj0gMCkKKyAgICB7CisgICAgICBvdXQgKz0gInJhdW0iK251bSsiLmMiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgb3V0ICs9ICJoYXVzLmMiOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBvdXQgPSBQQVRIKyJmaXhlZC5jIjsKKyAgfQorCisgIC8vIEluZm9ybWF0aW9uZW4gZnVlciBkaWUgU3RhdGVtYWNoaW5lIHNldHplbgorICBmaWxlID0gb3V0OworICBmaW5hbCA9IGZpbjsKKyAgcmF1bSA9IGVudjsKKyAgbnIgPSBudW07CisKKyAgaWYgKG51bSA+PSAwKQorICB7CisgICAgU3RhdGVUcmFuc2l0aW9uKFNJR19ST09NKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBTdGF0ZVRyYW5zaXRpb24oU0lHX0hPVVNFKTsKKyAgfQorICByZXR1cm4gb3V0OworfQorCisvLyBTb25kZXJ6ZWljaGVuIFwsICIgdW5kIFRBQiBrb3JyZWt0IHVtd2FuZGVsbgorcHJpdmF0ZSBzdHJpbmcgc3BlY2lhbChzdHJpbmcgcykKK3sKKyAgcyA9IGltcGxvZGUoZXhwbG9kZShzLCAiXFwiKSwgIlxcXFwiKTsKKyAgcyA9IGltcGxvZGUoZXhwbG9kZShzLCAiXHQiKSwgIlxcdCIpOworICBzID0gaW1wbG9kZShleHBsb2RlKHMsICJcIiIpLCAiXFxcIiIpOworCisgIHJldHVybiBzOworfQorCisvKioqIEZ1bmt0aW9uZW4genVtIEdlbmVyaWVyZW4gZWluZXIgRGF0ZWkgYXVzIGRlbiBQcm9wZXJ0aWVzIGRlcyBIYXVzZXMgKioqLworCisjZGVmaW5lIEVYSVRfVE1QTCAiXCIvcGxheWVycy8lcy9zZWhlcmhhdXMvJXNyYXVtJWRcIiIKKworcHJpdmF0ZSB2b2lkCityZW1vdmVPdXRwdXRGaWxlKCkKK3sKKyAgY2F0Y2gocm0oZmlsZSkpOworfQorCitwcml2YXRlIHZvaWQKK2R1bXBIb3VzZSgpCit7CisgIGhlYWRlckhvdXNlKCk7CisgIAorICBzUHJvcChmaWxlLCAiUF9TSE9SVCIsIHJhdW0tPlF1ZXJ5UHJvcChQX1NIT1JUKSk7CisgIHdyaXRlX2ZpbGUoZmlsZSwgIlxuIik7CisgIHNQcm9wKGZpbGUsICJQX0xPTkciLCByYXVtLT5RdWVyeVByb3AoUF9MT05HKSk7CisgIHdyaXRlX2ZpbGUoZmlsZSwgIlxuIik7CisKKyAgaWYgKGZpbmFsKQorICB7CisgICAgbWl4ZWQgbjsKKworICAgIHdyaXRlX2ZpbGUoZmlsZSwgIiAgU2V0UHJvcChQX05PR0VULCAxKTtcbiIpOworICAgIHdyaXRlX2ZpbGUoZmlsZSwKKyAgICAgICAgICAgICAgICIgIFNldFByb3AoUF9HRU5ERVIsICIrCisgICAgICAgICAgICAgICAoeyJORVVURVIiLCJNQUxFIiwiRkVNQUxFIn0pW3JhdW0tPlF1ZXJ5UHJvcChQX0dFTkRFUildKworICAgICAgICAgICAgICAgIiApO1xuICBTZXRQcm9wKFBfTkFNRSwgIik7CisgICAgbiA9IHJhdW0tPlF1ZXJ5UHJvcChQX05BTUUpOworCisgICAgaWYgKHN0cmluZ3AobikpCisgICAgeworICAgICAgd3JpdGVfZmlsZShmaWxlLCAiXCIiK24rIlwiIik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwcmV0dHlBcnJheShmaWxlLCBuLCAwKTsKKyAgICB9CisgICAgd3JpdGVfZmlsZShmaWxlLCAiICk7XG5cbiAgQWRkSWQoICIpOworICAgIHByZXR0eUFycmF5KGZpbGUsCisgICAgICAgICAgICAgICAgcmF1bS0+UXVlcnlQcm9wKFBfSURTKS0oeyAic2VoZVxyaGF1cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iK3JhdW0tPlF1ZXJ5T3duZXIoKSsiaGF1cyIgfSksCisgICAgICAgICAgICAgICAgMCk7CisgICAgd3JpdGVfZmlsZShmaWxlLCAiICk7XG4iKTsKKyAgfQorICB0cmFpbGVySG91c2UoKTsKKworICBTdGF0ZVRyYW5zaXRpb24oU0lHX0hPVVNFX0RPTkUpOworfQorCitwcml2YXRlIHZvaWQKK2R1bXBSb29tSGVhZGVyKCkKK3sKKyAgaGVhZGVyUm9vbSgpOworICAKKyAgc1Byb3AoZmlsZSwgIlBfSU5UX1NIT1JUIiwgcmF1bS0+UXVlcnlQcm9wKFBfSU5UX1NIT1JUKSk7CisgIHdyaXRlX2ZpbGUoZmlsZSwgIlxuIik7CisgIHNQcm9wKGZpbGUsICJQX0lOVF9MT05HIiwgcmF1bS0+UXVlcnlQcm9wKFBfSU5UX0xPTkcpKTsKKyAgd3JpdGVfZmlsZShmaWxlLCAiXG4iKTsKKworICBpZiAoZmluYWwgJiYgcmF1bS0+UXVlcnlQcm9wKEhfQ0hFU1QpKQorICB7CisgICAgU3RhdGVUcmFuc2l0aW9uKFNJR19ET19DSEVTVCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgU3RhdGVUcmFuc2l0aW9uKFNJR19ET19ERVRBSUwpOworICB9Cit9CisKK3ByaXZhdGUgdm9pZAorZHVtcENoZXN0KCkKK3sKKyAgbWl4ZWQgbjsKKyAgc3RyaW5nIGNmaWxlOworICBvYmplY3QgY2hlc3Q7CisKKyAgY2ZpbGUgPSBQQVRIKyJyZXAvIityYXVtLT5RdWVyeU93bmVyKCkrInRydWhlLmMiOworICBjaGVzdCA9IHByZXNlbnQoVFJVSEUsIHJhdW0pOworICAKKyAgY2F0Y2gocm0oY2ZpbGUpKTsKKworICB3cml0ZV9maWxlKGNmaWxlLAorICAgICAgICAgICAgICIjaW5jbHVkZSA8cHJvcGVydGllcy5oPlxuI2luY2x1ZGUgPG1vdmluZy5oPlxuXG4iCisgICAgICAgICAgICAgImluaGVyaXQgXCIvZC93dWVzdGUvZHVyaWFuL2JlaGFlbHRlclwiO1xuXG4iCisgICAgICAgICAgICAgInZvaWQgY3JlYXRlKClcbntcbiAgaWYoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuO1xuXG4iCisgICAgICAgICAgICAgIiAgOjpjcmVhdGUoKTtcblxuIiApOworICBzUHJvcChjZmlsZSwgIlBfU0hPUlQiLCBjaGVzdC0+UXVlcnlQcm9wKFBfU0hPUlQpKTsKKyAgc1Byb3AoY2ZpbGUsICJQX0xPTkciLCAgY2hlc3QtPlF1ZXJ5UHJvcChQX0xPTkcpKTsKKworICB3cml0ZV9maWxlKGNmaWxlLCAiICBTZXRQcm9wKFBfTk9HRVQsIDEpO1xuIik7CisgIHdyaXRlX2ZpbGUoY2ZpbGUsCisgICAgICAgICAgICAgIiAgU2V0UHJvcChQX0dFTkRFUiwgIisKKyAgICAgICAgICAgICAoeyJORVVURVIiLCJNQUxFIiwiRkVNQUxFIn0pW2NoZXN0LT5RdWVyeVByb3AoUF9HRU5ERVIpXSsKKyAgICAgICAgICAgICAiICk7XG4gIFNldFByb3AoUF9OQU1FLCAiKTsKKworICBuID0gY2hlc3QtPlF1ZXJ5UHJvcChQX05BTUUpOworICBpZiAoc3RyaW5ncChuKSkKKyAgeworICAgIHdyaXRlX2ZpbGUoY2ZpbGUsICJcIiIrbisiXCIiKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBwcmV0dHlBcnJheShmaWxlLCBuLCAwKTsKKyAgfQorICB3cml0ZV9maWxlKGNmaWxlLCAiICk7XG5cbiAgQWRkSWQoICIpOworICBwcmV0dHlBcnJheShjZmlsZSwgY2hlc3QtPlF1ZXJ5UHJvcChQX0lEUyktKHsgVFJVSEUgfSksIDApOworICB3cml0ZV9maWxlKGNmaWxlLCAiICk7XG4iKTsKKworICBpZiAoKG49Y2hlc3QtPlF1ZXJ5UHJvcChQX0FESkVDVElWRVMpKSAmJiBzaXplb2YobikpCisgIHsKKyAgICB3cml0ZV9maWxlKGNmaWxlLCAiXG4gIEFkZEFkamVjdGl2ZSggIik7CisgICAgcHJldHR5QXJyYXkoY2ZpbGUsIG4sIDApOworICAgIHdyaXRlX2ZpbGUoY2ZpbGUsICIgKTtcbiIpOworICB9CisgIGlmICgobj1jaGVzdC0+UXVlcnlQcm9wKFBfTkFNRV9BREopKSAmJiBzaXplb2YobikpCisgIHsKKyAgICB3cml0ZV9maWxlKGNmaWxlLCAiXG4gIFNldFByb3AoUF9OQU1FX0FESiwgIik7CisgICAgcHJldHR5QXJyYXkoY2ZpbGUsIG4sIDApOworICAgIHdyaXRlX2ZpbGUoY2ZpbGUsICIgKTtcbiIpOworICB9CisgIHdyaXRlX2ZpbGUoY2ZpbGUsICJ9XG4iKTsKKworICBTdGF0ZVRyYW5zaXRpb24oU0lHX0RPX0RFVEFJTCk7Cit9CisKK3ByaXZhdGUgdm9pZAorZHVtcERldGFpbHMoKQoreworICBtYXBwaW5nIHByb3A7CisgIG1peGVkIGRldDsKKyAgCisgIHByb3AgPSByYXVtLT5RdWVyeVByb3AoUF9ERVRBSUxTKTsKKworICBpZiAoc2l6ZW9mKHByb3ApKQorICB7CisgICAgZGV0ID0gVkVSV0FMVEVSLT5QQ3J1bmNoKHByb3ApOworICAgIC8vIG5leHQgc3RhdGUgdHJhbnNpdGlvbiBoYXBwZW5zIHdoZW4gZG9fbVByb3AgaXMgZG9uZQorICAgIG1Qcm9wKGZpbGUsICJBZGREZXRhaWwiLCBkZXQsIHNpemVvZihkZXQpLTEsIFNJR19ERVRBSUxfRE9ORSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgU3RhdGVUcmFuc2l0aW9uKFNJR19ERVRBSUxfRE9ORSk7CisgIH0KK30KKworcHJpdmF0ZSB2b2lkCitkdW1wUmVhZERldGFpbHMoKQoreworICBtYXBwaW5nIHByb3A7CisgIG1peGVkIHJkZXQ7CisgIAorICBwcm9wID0gcmF1bS0+UXVlcnlQcm9wKFBfUkVBRF9ERVRBSUxTKTsKKworICBpZiAoc2l6ZW9mKHByb3ApKQorICB7CisgICAgcmRldCA9IFZFUldBTFRFUi0+UENydW5jaChwcm9wKTsKKyAgICAvLyBuZXh0IHN0YXRlIHRyYW5zaXRpb24gaGFwcGVucyB3aGVuIGRvX21Qcm9wIGlzIGRvbmUKKyAgICBtUHJvcChmaWxlLCAiQWRkUmVhZERldGFpbCIsIHJkZXQsIHNpemVvZihyZGV0KS0xLCBTSUdfUkRFVEFJTF9ET05FKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBTdGF0ZVRyYW5zaXRpb24oU0lHX1JERVRBSUxfRE9ORSk7CisgIH0KK30KKworcHJpdmF0ZSB2b2lkCitkdW1wQ29tbWFuZHMoKQoreworICBtYXBwaW5nIGNvbW07CisgIG1peGVkIGNtZDsKKyAgCisgIGNvbW0gPSByYXVtLT5RdWVyeVByb3AoSF9DT01NQU5EUyk7CisKKyAgaWYgKHNpemVvZihjb21tKSkKKyAgeworICAgIGNtZCA9IFZFUldBTFRFUi0+UENydW5jaChjb21tKTsKKyAgICAvLyBuZXh0IHN0YXRlIHRyYW5zaXRpb24gaGFwcGVucyB3aGVuIGRvX2NQcm9wIGlzIGRvbmUKKyAgICBjUHJvcChmaWxlLCAiQWRkVXNlckNtZCIsIGNtZCwgc2l6ZW9mKGNtZCktMSwgU0lHX0NPTU1BTkRfRE9ORSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgU3RhdGVUcmFuc2l0aW9uKFNJR19DT01NQU5EX0RPTkUpOworICB9Cit9CisKK3ByaXZhdGUgdm9pZAorZG9GaW5hbGl6ZSgpCit7CisgIGlmIChmaW5hbCkKKyAgeworICAgIFN0YXRlVHJhbnNpdGlvbihTSUdfRE9fRVhJVFMpOworICB9CisgIGVsc2UKKyAgeworICAgIFN0YXRlVHJhbnNpdGlvbihTSUdfUk9PTV9ET05FKTsKKyAgfQorfQorCitwcml2YXRlIHZvaWQKK2R1bXBFeGl0cygpCit7CisgIHN0cmluZyAqaywgbzsKKyAgbWFwcGluZyBwcm9wOworICBpbnQgaSwgbnVtOworCisgIHByb3AgPSByYXVtLT5RdWVyeVByb3AoUF9FWElUUyk7CisgIGsgPSBtX2luZGljZXMocHJvcCk7CisgIGlmIChtZW1iZXIoaywgInJhdXMiKSA+PSAwKQorICB7CisgICAgayAtPSAoeyAicmF1cyIgfSk7CisgICAgd3JpdGVfZmlsZShmaWxlLCBzcHJpbnRmKCIgIEFkZEV4aXQoIFwicmF1c1wiLCBcIiVzXCIpO1xuIiwgcHJvcFsicmF1cyJdKSk7CisgIH0KKyAgCisgIGZvciAoaT1zaXplb2YoayktMTsgaT49MDsgaS0tKQorICB7CisgICAgaWYgKHNzY2FuZihwcm9wW2tbaV1dLCBQQVRIKyIlc3JhdW0lZCIsIG8sIG51bSkgIT0gMikKKyAgICB7CisgICAgICBwcmludGYoIktvbWlzY2hlciBFeGl0ICglTylcbiVzIC0+ICVzXG4iLCByYXVtLCBrW2ldLCBwcm9wW2tbaV1dKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmIChvID09IHJhdW0tPlF1ZXJ5T3duZXIoKSkKKyAgICAgIHsKKyAgICAgICAgbyA9IHNwcmludGYoRVhJVF9UTVBMLCBvLCBvLCBudW0pOworICAgICAgICB3cml0ZV9maWxlKGZpbGUsIHNwcmludGYoIiAgQWRkRXhpdCggXCIlc1wiLCAlcyk7XG4iLCBrW2ldLCBvKSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHdyaXRlX2ZpbGUoZmlsZSwKKyAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCIgIEFkZEV4aXQoIFwiJXNcIiwgXCIlc1wiKTtcbiIsIGtbaV0sIHByb3Bba1tpXV0pKTsKKyAgICAgICAgcHJpbnRmKCJFeGl0IHZvbiAlTyBuYWNoICVzIVxuIiwgcmF1bSwgcHJvcFtrW2ldXSk7CisgICAgICB9CisgICAgfQorICB9CisgIFN0YXRlVHJhbnNpdGlvbihTSUdfUk9PTV9ET05FKTsKK30KKworcHJpdmF0ZSB2b2lkCitkdW1wUm9vbVRyYWlsZXIoKQoreworICB0cmFpbGVyUm9vbSgpOworICBkb1JldHVybigpOworfQorCitwcml2YXRlIHZvaWQKK2RvUmV0dXJuKCkKK3sKKyAgaWYgKGhhdXNtZWlzdGVyICE9IDApCisgIHsKKyAgICBhcHBseSgjJ2NhbGxfb3RoZXIsIGhhdXNtZWlzdGVyLCAiR2VuZXJhdGlvbkRvbmUiLCBobWFyZ3MpOworICB9CisgIGRlc3RydWN0KHRoaXNfb2JqZWN0KCkpOworfQorCitwcml2YXRlIHZvaWQKK3NQcm9wKHN0cmluZyBmLCBzdHJpbmcgcE5hbWUsIHN0cmluZyBwU3RyKQoreworICBzdHJpbmcgKnN0cjsKKworICB3cml0ZV9maWxlKGYsICIgIFNldFByb3AoICIrcE5hbWUrIiwiKTsKKworICBpZiAoIXBTdHIpCisgIHsKKyAgICB3cml0ZV9maWxlKGYsICIwICk7XG4iKTsKKyAgICByZXR1cm47CisgIH0KKworICBwU3RyID0gc3BlY2lhbChwU3RyKTsKKworICBpZiAoc2l6ZW9mKHN0cj1vbGRfZXhwbG9kZShwU3RyLCJcbiIpKSA+IDEpCisgIHsKKyAgICBwcmV0dHlTdHJpbmcoZiwgc3RyLCA0KTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBpZiAoc2l6ZW9mKHN0cik9PTApCisgICAgeworICAgICAgc3RyID0gKHsiIn0pOworICAgIH0KKyAgICB3cml0ZV9maWxlKGYsICJcbiAgICAgXCIiK3N0clswXSk7CisKKyAgICBpZiAocFN0cls8MV0gPT0gJ1xuJykKKyAgICB7CisgICAgICB3cml0ZV9maWxlKGYsICJcXG5cIiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgd3JpdGVfZmlsZShmLCAiXCIiKTsKKyAgICB9CisgIH0KKyAgd3JpdGVfZmlsZShmLCAiICk7XG4iKTsKK30KKworc3RhdGljIHZvaWQKK21Qcm9wKHN0cmluZyBmaWxlLCBzdHJpbmcgcE5hbWUsIG1peGVkIGNtZCwgaW50IHBvcywgaW50IHNpZ25hbCkKK3sKKyAgaW50IGk7CisgIHN0cmluZyAqZXEsIHQxOworICAKKyAgZm9yIChpID0gcG9zOyAoaSA+PSAwKSAmJiAoZ2V0X2V2YWxfY29zdCgpID4gMTAwMDApOyAtLWkpCisgIHsKKyAgICB3cml0ZV9maWxlKGZpbGUsICIgICIrcE5hbWUrIihcbiAgICAiKTsKKyAgICBlcSA9IGNtZFtpXVswXTsKKyAgICB0MSA9IGNtZFtpXVsxXTsKKworICAgIHByZXR0eUFycmF5KGZpbGUsIGVxLCAwKTsKKyAgICB3cml0ZV9maWxlKGZpbGUsICIsICIpOworCisgICAgcHJldHR5U3RyaW5nKGZpbGUsIG9sZF9leHBsb2RlKHNwZWNpYWwodDEpLCAiXG4iKSwgNik7CisgICAgd3JpdGVfZmlsZShmaWxlLCAiICk7XG4iKTsKKyAgfQorCisgIC8vIEZhbGxzIHdpciBkaWUgZXZhbF9jb3N0IGF1c2dlcmVpenQgaGFiZW4sIGFiZXIgbm9jaCBuaWNodAorICAvLyBhbGxlIEVpbnRy5GdlIGJlYXJiZWl0ZXQgd3VyZGVuLCB3aXJkIGpldHp0IGRpZSBuYWVjaHN0ZQorICAvLyBSdW5kZSBnZXN0YXJ0ZXQKKyAgaWYgKGkgPj0gMCkKKyAgeworICAgIGNhbGxfb3V0KCJtUHJvcCIsIDEsIGZpbGUsIHBOYW1lLCBjbWQsIGksIHNpZ25hbCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLy8gQW5zb25zdGVuIHdlY2hzZWxuIHdpciBqZXR6dCBpbiBkZW4gbmFlY2hzdGVuIFp1c3RhbmQKKyAgICB3cml0ZV9maWxlKGZpbGUsICJcbiIpOworICAgIFN0YXRlVHJhbnNpdGlvbihzaWduYWwpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitjUHJvcChzdHJpbmcgZmlsZSwgc3RyaW5nIHBOYW1lLCBtaXhlZCBjbWQsIGludCBwb3MsIGludCBzaWduYWwpCit7CisgIHN0cmluZyB0MSwgdDI7CisgIG1peGVkICBlcTsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gcG9zOyAoaSA+PSAwKSAmJiAoZ2V0X2V2YWxfY29zdCgpID4gMTAwMDApOyAtLWkpCisgIHsKKyAgICB3cml0ZV9maWxlKGZpbGUsICIgICIrcE5hbWUrIihcbiAgICAiKTsKKyAgICBlcSA9IGNtZFtpXVswXTsKKyAgICB0MSA9IGNtZFtpXVsxXTsKKyAgICB0MiA9IGNtZFtpXVsyXTsKKworICAgIHByZXR0eUFycmF5KGZpbGUsIGVxLCAxKTsKKyAgICB3cml0ZV9maWxlKGZpbGUsICIsIDAsICIpOworCisgICAgcHJldHR5U3RyaW5nKGZpbGUsIG9sZF9leHBsb2RlKHNwZWNpYWwodDEpLCAiXG4iKSwgNCk7CisgICAgd3JpdGVfZmlsZShmaWxlLCAiLCAiKTsKKyAgICAKKyAgICBpZiAodDIpCisgICAgeworICAgICAgcHJldHR5U3RyaW5nKGZpbGUsIG9sZF9leHBsb2RlKHNwZWNpYWwodDIpLCAiXG4iKSwgNCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB3cml0ZV9maWxlKGZpbGUsICIwIik7CisgICAgfQorICAgIAorICAgIHdyaXRlX2ZpbGUoZmlsZSwgIiApO1xuIik7CisgIH0KKworICAvLyBGYWxscyB3aXIgZGllIGV2YWxfY29zdCBhdXNnZXJlaXp0IGhhYmVuLCBhYmVyIG5vY2ggbmljaHQKKyAgLy8gYWxsZSBFaW50cuRnZSBiZWFyYmVpdGV0IHd1cmRlbiwgd2lyZCBqZXR6dCBkaWUgbmFlY2hzdGUKKyAgLy8gUnVuZGUgZ2VzdGFydGV0CisgIGlmIChpID49IDApCisgIHsKKyAgICBjYWxsX291dCgiY1Byb3AiLCAxLCBmaWxlLCBwTmFtZSwgY21kLCBpLCBzaWduYWwpOworICB9CisgIGVsc2UKKyAgeworICAgIC8vIEFuc29uc3RlbiB3ZWNoc2VsbiB3aXIgamV0enQgaW4gZGVuIG5hZWNoc3RlbiBadXN0YW5kCisgICAgd3JpdGVfZmlsZShmaWxlLCAiXG4iKTsKKyAgICBTdGF0ZVRyYW5zaXRpb24oc2lnbmFsKTsKKyAgfQorfQorCitwcml2YXRlIHZvaWQKK3ByZXR0eVN0cmluZyhzdHJpbmcgZiwgc3RyaW5nICpzdHIsIGludCBpbmRlbnQpCit7CisgIHN0cmluZyBpbmQ7CisgIGludCBpOworCisgIGluZCA9IGV4dHJhY3QoIlxuICAgICAgICAgICIsMCxpbmRlbnQpOworCisgIGlmICghc2l6ZW9mKHN0cikpCisgIHsKKyAgICB3cml0ZV9maWxlKGYsIGluZCsiIFwiXFxuXCIiKTsKKyAgICByZXR1cm47CisgIH0KKworICB3cml0ZV9maWxlKGYsIGluZCsiIFwiIitzdHJbMF0rIlxcblwiIik7CisKKyAgZm9yIChpPTE7IGk8c2l6ZW9mKHN0cik7IGkrKykKKyAgeworICAgIHdyaXRlX2ZpbGUoZiwgaW5kKyIrXCIiK3N0cltpXSsiXFxuXCIiKTsKKyAgfQorfQorCitwcml2YXRlIHZvaWQKK3ByZXR0eUFycmF5KHN0cmluZyBmLCBzdHJpbmcgKmFyciwgaW50IHNlcCkKK3sKKyAgaW50IGksajsKKyAgc3RyaW5nIHJlcywgdDEsIHQyOworCisgIHdyaXRlX2ZpbGUoZiwgIih7Iik7CisKKyAgaWYgKHNpemVvZihhcnIpKQorICB7CisgICAgdDEgPSAoIlwiIithcnJbMF0rIlwiIik7CisgICAgcmVzID0gIiAiK3QxOworICAgIHQyID0gIiI7CisKKyAgICBmb3IgKGk9MSwgaj1zaXplb2YoYXJyKTsgaTxqOyBpKyspCisgICAgeworICAgICAgdDIgPSAiXCIiK2FycltpXSsiXCIiOworICAgICAgaWYgKCFzZXApCisgICAgICB7CisJaWYgKChzaXplb2YodDEpICsgc2l6ZW9mKHQyKSkgPiA2OSkKKyAgICAgICAgeworCSAgcmVzICs9ICgiLFxuICAgICAgICIrdDIpOworCSAgdDEgPSB0MjsKKwkgIHQyID0gIiI7CisJfQorCWVsc2UgeworCSAgdDEgKz0gKCIsICIrdDIpOworCSAgcmVzICs9ICgiLCAiK3QyKTsKKwl9CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZXMgKz0gKCIsXG4gICAgICAgIit0Mik7CisgICAgICB9CisgICAgfQorICB9CisgIHdyaXRlX2ZpbGUoZiwgcmVzICsgIiB9KSIgKTsKK30KKworcHJpdmF0ZSB2b2lkCitoZWFkZXJSb29tKCkKK3sKKyAgaWYgKGZpbmFsKQorICB7CisgICAgd3JpdGVfZmlsZShmaWxlLAorICAgICAgICAgICAgICAgIiNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+XG5cbiIKKyAgICAgICAgICAgICAgICJpbmhlcml0IFwic3RkL3Jvb21cIjtcbiIKKyAgICAgICAgICAgICAgICJpbmhlcml0IFwiIitQQVRIKyJtb2R1bGVzL3VzZXJjbWRcIjtcblxuIgorICAgICAgICAgICAgICAgImNyZWF0ZSgpXG4iCisgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgIiAgcm9vbTo6Y3JlYXRlKCk7XG4iCisgICAgICAgICAgICAgICAiICB1c2VyY21kOjpjcmVhdGUoKTtcblxuIgorICAgICAgICAgICAgICAgIiAgU2V0UHJvcChQX0xJR0hULCAxKTtcbiIKKyAgICAgICAgICAgICAgICIgIFNldFByb3AoUF9JTkRPT1JTLCAxKTtcblxuIik7CisgIH0KKyAgZWxzZQorICB7CisgICAgd3JpdGVfZmlsZShmaWxlLAorICAgICAgICAgICAgICAgIiNpbmNsdWRlIFwiaGF1cy5oXCJcbiIKKyAgICAgICAgICAgICAgICIjaW5jbHVkZSA8cHJvcGVydGllcy5oPlxuXG4iCisgICAgICAgICAgICAgICAiaW5oZXJpdCBSQVVNO1xuIgorICAgICAgICAgICAgICAgImluaGVyaXQgXCIvc3RkL3RoaW5nL21vdmluZ1wiO1xuXG4iCisgICAgICAgICAgICAgICAiY3JlYXRlKClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuO1xuIgorICAgICAgICAgICAgICAgIiAgOjpjcmVhdGUoKTtcblxuIgorICAgICAgICAgICAgICAgIiAgU2V0T3duZXIoXCIiK3JhdW0tPlF1ZXJ5T3duZXIoKSsiXCIsICIrbnIrIik7XG4iCisgICAgICAgICAgICAgICAiICBMb2FkKCk7XG5cbiIKKyAgICAgICAgICAgICAgICIgIFNldFByb3AoUF9ERVRBSUxTLCAoW10pKTtcbiIKKyAgICAgICAgICAgICAgICIgIFNldFByb3AoUF9SRUFEX0RFVEFJTFMsIChbXSkpO1xuXG4iKTsKKyAgfQorfQorCitwcml2YXRlIHZvaWQKK3RyYWlsZXJSb29tKCkKK3sKKyAgaWYgKGZpbmFsKQorICB7CisgICAgd3JpdGVfZmlsZShmaWxlLCAifVxuIik7CisgIH0KKyAgZWxzZQorICB7CisgICAgd3JpdGVfZmlsZShmaWxlLAorICAgICAgICAgICAgICAgIiAgU2F2ZSgxKTtcblxuIgorICAgICAgICAgICAgICAgIiAgeyBvYmplY3QgcmF1bTtcbiIKKyAgICAgICAgICAgICAgICIgICAgaWYgKHJhdW0gPSBmaW5kX29iamVjdChSQVVNTkFNRSgiCisgICAgICAgICAgICAgICAiXCIiK3JhdW0tPlF1ZXJ5T3duZXIoKSsiXCIsICIrbnIrIikpKVxuIgorICAgICAgICAgICAgICAgIiAgICAgIHJhdW0tPkxvYWQoKTtcbiIKKyAgICAgICAgICAgICAgICIgIH1cblxuIgorICAgICAgICAgICAgICAgIiAgY2FsbF9vdXQoXCJyZW1vdmVcIiwwKTtcbiIKKyAgICAgICAgICAgICAgICJ9XG4iKTsKKyAgfQorfQorCitwcml2YXRlIHZvaWQKK2hlYWRlckhvdXNlKCkKK3sKKyAgaWYgKGZpbmFsKQorICB7CisgICAgd3JpdGVfZmlsZShmaWxlLAorICAgICAgICAgICAgICAgIiNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+XG4iCisgICAgICAgICAgICAgICAiI2luY2x1ZGUgPG1vdmluZy5oPlxuIgorICAgICAgICAgICAgICAgIiNpbmNsdWRlIFwiIitQQVRIKyJoYXVzLmhcIlxuXG4iCisgICAgICAgICAgICAgICAiaW5oZXJpdCBcInN0ZC90aGluZ1wiO1xuIgorICAgICAgICAgICAgICAgImluaGVyaXQgSEFVU1RVRVI7XG5cbiIKKyAgICAgICAgICAgICAgICJjcmVhdGUoKVxuIgorICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICIgIHRoaW5nOjpjcmVhdGUoKTtcbiIKKyAgICAgICAgICAgICAgICIgIGhhdXN0dWVyOjpjcmVhdGUoKTtcblxuIik7CisgIH0KKyAgZWxzZQorICB7CisgICAgd3JpdGVfZmlsZShmaWxlLAorICAgICAgICAgICAgICAgIiNpbmNsdWRlIFwiaGF1cy5oXCJcbiIKKyAgICAgICAgICAgICAgICIjaW5jbHVkZSA8cHJvcGVydGllcy5oPlxuXG4iCisgICAgICAgICAgICAgICAiaW5oZXJpdCBIQVVTO1xuIgorICAgICAgICAgICAgICAgImluaGVyaXQgXCIvc3RkL3RoaW5nL21vdmluZ1wiO1xuXG4iCisgICAgICAgICAgICAgICAiY3JlYXRlKClcbiIKKyAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAiICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuO1xuIgorICAgICAgICAgICAgICAgIiAgOjpjcmVhdGUoKTtcblxuIgorICAgICAgICAgICAgICAgIiAgU2V0T3duZXIoXCIiK3JhdW0tPlF1ZXJ5T3duZXIoKSsiXCJcbiIKKyAgICAgICAgICAgICAgICIgIExvYWQoKTtcblxuIik7CisgIH0KK30KKworcHJpdmF0ZSB2b2lkCit0cmFpbGVySG91c2UoKQoreworICBpZiAoZmluYWwpCisgIHsKKyAgICB3cml0ZV9maWxlKGZpbGUsIHJlYWRfZmlsZShQQVRIKyJ0b29scy9oYXVzLmFweCIpKTsKKyAgICB3cml0ZV9maWxlKGZpbGUsICIgIHRoaXNfcGxheWVyKCktPm1vdmUoIik7CisgICAgd3JpdGVfZmlsZShmaWxlLCBzcHJpbnRmKEVYSVRfVE1QTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF1bS0+UXVlcnlPd25lcigpLCByYXVtLT5RdWVyeU93bmVyKCksIDApKTsKKyAgICB3cml0ZV9maWxlKGZpbGUsCisgICAgICAgICAgICAgICAiLFxuXHRcdFx0TV9HTywgMCwgXCJiZXRyaXR0IFwiK25hbWUoV0VOLDEpLCBcImtvbW10IGhlcmVpblwiKTtcbiIKKyAgICAgICAgICAgICAgICIgIHJldHVybiAxO1xufVxuIik7CisgICAgaWYgKCFyYXVtLT5RdWVyeVByb3AoUF9TSE9SVCkpCisgICAgeworICAgICAgd3JpdGVfZmlsZShmaWxlLAorICAgICAgICAgICAgICAgICAiXG5zdHJpbmcgc2hvcnQoKVxuIgorICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAiICBzdHJpbmcgcmV0O1xuXG4iCisgICAgICAgICAgICAgICAgICIgIHJldCA9IDo6c2hvcnQoKTtcbiIKKyAgICAgICAgICAgICAgICAgIiAgaWYgKHByZXZpb3VzX29iamVjdCgpICE9IGVudmlyb25tZW50KCkgJiYgIXJldClcbiIKKyAgICAgICAgICAgICAgICAgIiAgICByZXQgPVwiXCI7XG5cbiIKKyAgICAgICAgICAgICAgICAgIiAgcmV0dXJuIHJldDtcbiIKKyAgICAgICAgICAgICAgICAgIn1cbiIpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICB3cml0ZV9maWxlKGZpbGUsCisgICAgICAgICAgICAgICAiICBTYXZlKDEpO1xuXG4iCisgICAgICAgICAgICAgICAiICB7IG9iamVjdCByYXVtO1xuIgorICAgICAgICAgICAgICAgIiAgICBpZiAocmF1bSA9IGZpbmRfb2JqZWN0KEhBVVNOQU1FKCIKKyAgICAgICAgICAgICAgICJcIiIrcmF1bS0+UXVlcnlPd25lcigpKyJcIikpKVxuIgorICAgICAgICAgICAgICAgIiAgICAgIHJhdW0tPkxvYWQoKTtcbiIKKyAgICAgICAgICAgICAgICIgIH1cblxuIgorICAgICAgICAgICAgICAgIiAgY2FsbF9vdXQoXCJyZW1vdmVcIiwwKTtcbn1cbiIpOworICB9Cit9CmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvdG9vbHMvaGF1cy5hcHggYi9kL3NlaGVyL2hhZXVzZXIvdG9vbHMvaGF1cy5hcHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlMjg3NwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci90b29scy9oYXVzLmFweApAQCAtMCwwICsxLDI1IEBACisKKyAgQWRkQ21kKCAoeyAiYmV0cml0dCIsICJiZXRyZXRlIiB9KSwgImJldHJpdHQiKTsKK30KKworc3RyaW5nIGxvbmcoKQoreworICBzdHJpbmcgZG9vcjsKKworICBkb29yID0gaGF1c3R1ZXI6OmxvbmcoKTsKKworICByZXR1cm4gUXVlcnlQcm9wKFBfTE9ORykrZG9vcjsKK30KKworc3RhdGljIGludCBiZXRyaXR0KHN0cmluZyBzdHIpCit7CisgIG5vdGlmeV9mYWlsKCJXYXMgbW9lY2h0ZXN0IER1IGJldHJldGVuP1xuIik7CisKKyAgaWYgKCFzdHIgfHwgIWlkKHN0cikpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFF1ZXJ5KEhfRE9PUlNUQVQpICYgRF9DTE9TRUQpIHsKKyAgICBwcmludGYoIiVzIHZvbiAlcyBpc3QgenUuXG4iLCBjYXBpdGFsaXplKG5hbWUoV0VSLDEpKSwgY2FwaXRhbGl6ZShvd25lcikpOworICAgIHJldHVybiAxOworICB9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci90b29scy9oYXVzbWVpc3Rlci5jIGIvZC9zZWhlci9oYWV1c2VyL3Rvb2xzL2hhdXNtZWlzdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM5ZGUwZQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci90b29scy9oYXVzbWVpc3Rlci5jCkBAIC0wLDAgKzEsMjQ3IEBACisjaW5jbHVkZSAiLi4vaGF1cy5oIgorCitpbmhlcml0ICJzdGQvdGhpbmciOworaW5oZXJpdCAiL3Avc2VydmljZS93YXJnb24vc20vc3RhdGVtYWNoaW5lIjsKKworI2luY2x1ZGUgIi9wL3NlcnZpY2Uvd2FyZ29uL3NtL3N0YXRlbWFjaGluZS5oIgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKworI2RlZmluZSBTVEFURV9JRExFICAgICAgIDAKKyNkZWZpbmUgU1RBVEVfR0VORVJBVElORyAxCisKKyNkZWZpbmUgU0lHX0lOSVQgICAgICAwCisjZGVmaW5lIFNJR19HRU5FUkFURSAgMQorI2RlZmluZSBTSUdfRE9ORSAgICAgIDIKKworcHJpdmF0ZSBzdHJpbmcgZHVtcChpbnQgaGF1cywgaW50IGZpbmFsKTsKK3ByaXZhdGUgdm9pZCBlbnRlckdlbmVyYXRpbmcoc3RyaW5nIG93LCBvYmplY3QgZW52LCBpbnQgbnIsIGludCBmaW4sIGludCBhbGwpOworcHJpdmF0ZSB2b2lkIGRvR2VuZXJhdGluZyhzdHJpbmcgb3csIG9iamVjdCBlbnYsIGludCBuciwgaW50IGZpbiwgaW50IGFsbCk7CisKK2NyZWF0ZSgpCit7CisgIGlmICghY2xvbmVwKHRoaXNfb2JqZWN0KCkpKSByZXR1cm47CisgIHRoaW5nOjpjcmVhdGUoKTsKKyAgc3RhdGVtYWNoaW5lOjpjcmVhdGUoKTsKKyAgCisgIFNldFByb3AoIFBfTkFNRSwgIkhhdXNtZWlzdGVyIik7CisgIFNldFByb3AoIFBfU0hPUlQsICJFaW4gSGF1c21laXN0ZXIiICk7CisgIFNldFByb3AoIFBfTE9ORywKKyAgICAgIkRpZXMgaXN0IGRlciBIYXVzbWVpc3RlciBhbGxlciBTZWhlcmhhZXVzZXIuIEVyIGhpbGZ0IFd1cnplbCBiZWkgZGVyXG4iCisgICAgKyJWZXJ3YWx0dW5nIGRlciBIYWV1c2VyLlxuIgorICAgICsiRGVyIEhhdXNtZWlzdGVyIGhhdCBlaW5lbiBibGF1ZW4gS2l0dGVsIGFuIHVuZCBlaW5lIEFicmlzc2Jpcm5lIGdlenVlY2t0LlxuIiApOworICBTZXRQcm9wKCBQX0dFTkRFUixNQUxFKTsKKyAgU2V0UHJvcCggUF9OT0dFVCwgMSk7CisKKyAgQWRkSWQoICJoYXVzbWVpc3RlciIgKTsKKworICBBZGRTdGF0ZShTVEFURV9JRExFLCAwLCAwKTsKKyAgQWRkU3RhdGUoU1RBVEVfR0VORVJBVElORywgIydkb0dlbmVyYXRpbmcsIDApOworCisgIEFkZFRyYW5zaXRpb24oU01fSU5WQUxJRCwgU0lHX0lOSVQsIFNUQVRFX0lETEUpOworICBBZGRUcmFuc2l0aW9uKFNUQVRFX0lETEUsIFNJR19HRU5FUkFURSwgU1RBVEVfR0VORVJBVElORywgIydlbnRlckdlbmVyYXRpbmcpOworICBBZGRUcmFuc2l0aW9uKFNUQVRFX0dFTkVSQVRJTkcsIFNJR19HRU5FUkFURSwgU1RBVEVfR0VORVJBVElORywgIydlbnRlckdlbmVyYXRpbmcpOworICBBZGRUcmFuc2l0aW9uKFNUQVRFX0dFTkVSQVRJTkcsIFNJR19ET05FLCBTVEFURV9JRExFKTsKKworICBTdGF0ZVRyYW5zaXRpb24oU0lHX0lOSVQpOworICAKKyAgQWRkQ21kKCAiZ2VuZXJpZXJlIiwgImdlbmVyaWVyZW4iICk7CisgIEFkZENtZCggKHsgInJlaXNzIiwgInJlaXNzZSIgfSksICJhYnJlaXNzZW4iICk7CisgIEFkZENtZCggInZlcmxlZ2UiLCAidmVybGVnZW4iICk7Cit9CisKK3N0YXRpYyBpbnQKK2Jld2VnZShtaXhlZCBkZXN0LCBpbnQgZmxhZ3MsIHN0cmluZyBtc2cxLCBzdHJpbmcgbXNnMikKK3sKKyAgaW50IHJldDsKKworICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgY2FwaXRhbGl6ZShuYW1lKFdFUikpKyIgIittc2cxKyIuXG4iKTsKKyAgaWYgKChyZXQgPSBtb3ZlKGRlc3QsIGZsYWdzKSkgPT0gMSkKKyAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgY2FwaXRhbGl6ZShuYW1lKFdFUikpKyIgIittc2cyKyIuXG4iKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdlbmVyaWVyZW4oc3RyaW5nIHN0cikKK3sKKyAgb2JqZWN0IGVudjsKKyAgaW50IG5yLCBmaW4sIGFsbDsKKyAgc3RyaW5nIG93LCAqcGFybTsKKworICBlbnYgPSBlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKTsKKworICBub3RpZnlfZmFpbCggIlN5bnRheDogZ2VuZXJpZXJlIDxuYW1lPiBbPG5yPl0gW3NvZnQgfCBnYW56XVxuIiApOworCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikKKyAgICByZXR1cm4gMDsKKworICBwYXJtID0gb2xkX2V4cGxvZGUoc3RyLCAiICIpOworICBmaW4gPSAxOworCisgIHN3aXRjaCAoc2l6ZW9mKHBhcm0pKSB7CisgICAgY2FzZSAzOgorICAgICAgaWYgKHBhcm1bMl0gPT0gInNvZnQiKQorCWZpbiA9IDA7CisgICAgY2FzZSAyOgorICAgICAgaWYgKHBhcm1bMV0gPT0gInNvZnQiKQorCWZpbiA9IDA7CisgICAgICBlbHNlIGlmIChwYXJtWzFdID09ICJnYW56IikgeworCW93ID0gcGFybVswXTsKKwluciA9IChWRVJXQUxURVIpLT5IYXVzUHJvcChvdywgSFBfUk9PTVMpOworCXN0ciA9IG93KyJyYXVtIitucjsKKwlhbGwgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisJbnIgPSB0b19pbnQocGFybVsxXSk7CisJc3RyID0gcGFybVswXSsicmF1bSIrcGFybVsxXTsKKwlvdyA9IHBhcm1bMF07CisJYnJlYWs7CisgICAgICB9CisgICAgY2FzZSAxOgorICAgICAgb3cgPSBwYXJtWzBdOworICAgICAgbnIgPSAtMTsKKyAgICAgIHN0ciA9IG93KyJoYXVzIjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoZmlsZV9zaXplKEhBVVNTQVZFUEFUSCtvdysiLm8iKTwwKSB7CisgICAgd3JpdGUoICJFcyBnaWJ0IGtlaW4gJyIrc3RyKyInIVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgU3RhdGVUcmFuc2l0aW9uKFNJR19HRU5FUkFURSwgKHtvdywgZW52LCBuciwgZmluLCBhbGwgfSkgKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGVudGVyR2VuZXJhdGluZyhzdHJpbmcgb3csIG9iamVjdCBlbnYsIGludCBuciwgaW50IGZpbiwgaW50IGFsbCkKK3sKKyAgc3RyaW5nIHN0cjsKKyAgCisgIGlmIChuciA+PSAwKQorICAgIHN0ciA9IG93KyJyYXVtIitucjsKKyAgZWxzZQorICAgIHN0ciA9IG93KyJoYXVzIjsKKworICBiZXdlZ2UoUEFUSCtzdHIsIE1fTk9DSEVDSywgImdlaHQgenVyIEFyYmVpdCIsICJrb21tdCBhbiIpOworICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwKKyAgICAgICAgICAgIE5hbWUoV0VSKSsiIHp1ZWNrdCBlaW5lbiBCbG9jaywgc2llaHQgc2ljaCBhbGxlcyBnZW5hdSBhbiB1bmQgbWFjaHRcbiIKKyAgICAgICAgICAgICsic2ljaCBoaW4gdW5kIHdpZWRlciBOb3RpemVuLiBEYW5uIG5pY2t0IGVyIHp1ZnJpZWRlbiB1bmQgc3RlY2t0IHNlaW5lblxuIgorICAgICAgICAgICAgIkJsb2NrIHdpZWRlciB3ZWcuXG4iICk7Cit9CisKK3N0YXRpYyB2b2lkIGRvR2VuZXJhdGluZyhzdHJpbmcgb3csIG9iamVjdCBlbnYsIGludCBuciwgaW50IGZpbiwgaW50IGFsbCkKK3sKKyAgb2JqZWN0IGdlbjsKKyAgc3RyaW5nIHN0ciwgb3V0OworCisgIGdlbiA9IGNsb25lX29iamVjdChQQVRIKyJ0b29scy9nZW5lcmF0b3IiKTsKKyAgb3V0ID0gZ2VuLT5kdW1wKGVudmlyb25tZW50KCksIGZpbiwgKHsgb3csIGVudiwgbnIsIGZpbiwgYWxsIH0pKTsKKyAgCisgIGlmIChuciA+PSAwKQorICAgIHN0ciA9IG93KyJyYXVtIitucjsKKyAgZWxzZQorICAgIHN0ciA9IG93KyJoYXVzIjsKKworICBiZXdlZ2UoZW52LCBNX05PQ0hFQ0ssICJnZWh0IHp1IHNlaW5lbSBBdWZ0cmFnZ2ViZXIgenVydWVjayIsICJrb21tdCBhbiIpOworICB3cml0ZSggIkRlciBIYXVzbWVpc3RlciBzYWd0OiBJY2ggaGFiZSAnIitzdHIrIicgaW4gZGllIERhdGVpXG4iCisJKyJEZXIgSGF1c21laXN0ZXIgc2FndDogJyIrb3V0KyInIGdlc2NocmllYmVuLCBDaGVmIVxuIik7Cit9CisKK3ZvaWQKK0dlbmVyYXRpb25Eb25lKHN0cmluZyBvdywgb2JqZWN0IGVudiwgaW50IG5yLCBpbnQgZmluLCBpbnQgYWxsKQoreworICBpZiAoYWxsKQorICB7CisgICAgaWYgKG5yID4gMCkKKyAgICB7CisgICAgICBjYWxsX291dCgiU3RhdGVUcmFuc2l0aW9uIiwgMSwKKyAgICAgICAgICAgICAgIFNJR19HRU5FUkFURSwgKHsgb3csIGVudiwgbnItMSwgZmluLCAxIH0pICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBjYWxsX291dCgiU3RhdGVUcmFuc2l0aW9uIiwgMSwKKyAgICAgICAgICAgICAgIFNJR19HRU5FUkFURSwgKHsgb3csIGVudiwgLTEsIGZpbiwgMCB9KSApOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBTdGF0ZVRyYW5zaXRpb24oU0lHX0RPTkUsICh7IG93LCBlbnYsIC0xLCBmaW4sIDAgfSkgKTsKKyAgfQorfQorCitzdGF0aWMgaW50IGFicmVpc3NlbihzdHJpbmcgc3RyKQoreworICBvYmplY3QgaGF1cywgZW52OworICBzdHJpbmcgaWNoLCBtc2c7CisKKyAgaWYgKCFzdHIgfHwgc3RyID09ICIiIHx8IHNzY2FuZihzdHIsICIlcyBhYiIsc3RyKSAhPSAxKSB7CisgICAgbm90aWZ5X2ZhaWwoICJTeW50YXg6IHJlaXNzZSA8bmFtZT4gYWJcbiIgKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzdHIgPSBsb3dlcl9jYXNlKHN0cik7CisgIGlmICghKGhhdXMgPSBWRVJXQUxURVItPkZpbmRlSGF1cyhzdHIpKSkgeworICAgIHdyaXRlKCBjYXBpdGFsaXplKHN0cikrIiBoYXQga2VpbiBIYXVzIVxuIiApOworICAgIHJldHVybiAxOworICB9CisgIGljaCA9IGNhcGl0YWxpemUobmFtZShXRVIpKTsKKyAgZW52ID0gZW52aXJvbm1lbnQoKTsKKyAgYmV3ZWdlKGVudmlyb25tZW50KGhhdXMpLCBNX05PQ0hFQ0ssICJnZWh0IHp1ciBBcmJlaXQiLCAia29tbXQgYW4iKTsKKyAgbXNnID0gaGF1cy0+TmFtZShXRVIpOworCisgIGlmIChWRVJXQUxURVItPkxvZXNjaGVIYXVzKHN0cikgPT0gLTEpIHsKKyAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgaWNoKyIgdmVyc3VjaHQgdmVyZ2VibGljaCwgZWluIEhhdXMgYWJ6dXJlaXNzZW4uXG4iICk7CisgICAgbXNnID0gIkRlciBBYnJpc3N2ZXJzdWNoIGlzdCBmZWhsZ2VzY2hsYWdlbiwgQ2hlZiFcbiI7CisgIH0KKyAgZWxzZSB7CisgICAgdGVsbF9yb29tKGVudmlyb25tZW50KCksIGljaCsiIGJldGFldGlndCBlaW5lIFNpcmVuZS5cbiIrbXNnKyIgd2lyZCB2b24gIituYW1lKFdFTSkrIiBlaW5nZWVibmV0LlxuIik7CisgICAgbXNnID0gbXNnKyIgaXN0IGFiZ2VyaXNzZW4sIENoZWYhXG4iOworICAgIGlmIChoYXVzKSBoYXVzLT5yZW1vdmUoKTsKKyAgfQorICBiZXdlZ2UoZW52LCBNX05PQ0hFQ0ssICJnZWh0IHp1IHNlaW5lbSBBdWZ0cmFnZ2ViZXIgenVydWVjayIsICJrb21tdCBhbiIpOworICB3cml0ZSggIkRlciBIYXVzbWVpc3RlciBzYWd0OiAiK21zZyk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZlcmxlZ2VuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyBuYW1lLCB2b24sIG5hY2g7CisgIG9iamVjdCBoYXVzOworICBpbnQgcmV0OworCisgIGlmICghc3RyIHx8IHNzY2FuZihzdHIsICIlcyBuYWNoICVzIiwgbmFtZSwgbmFjaCkgIT0gMikgeworICAgIG5vdGlmeV9mYWlsKCAiU3ludGF4OiB2ZXJsZWdlIDxuYW1lPiBuYWNoIDx6aWVsPlxuIiApOworICAgIHJldHVybiAwOworICB9CisgIGlmIChuYWNoID09ICJoaWVyIikKKyAgICBuYWNoID0gb2JqZWN0X25hbWUoZW52aXJvbm1lbnQodGhpc19wbGF5ZXIoKSkpOworCisgIG5hbWUgPSBsb3dlcl9jYXNlKG5hbWUpOworCisgIGlmICghKGhhdXMgPSBWRVJXQUxURVItPkZpbmRlSGF1cyhuYW1lKSkpIHsKKyAgICB3cml0ZSggIkRlciBIYXVzbWVpc3RlciBzYWd0OiAiK2NhcGl0YWxpemUobmFtZSkrIiBoYXQga2VpbiBIYXVzIVxuIiApOworICAgIHJldHVybiAxOworICB9CisgIHZvbiA9IG9iamVjdF9uYW1lKGVudmlyb25tZW50KGhhdXMpKTsKKyAgcmV0ID0gVkVSV0FMVEVSLT5WZXJsZWdlSGF1cyhuYW1lLCB2b24sIG5hY2gpOworICB3cml0ZSggIkRlciBIYXVzbWVpc3RlciBzYWd0OiAiICk7CisgIHN3aXRjaChyZXQpIHsKKyAgICBjYXNlIC0xMTE6CisgICAgICB3cml0ZSggIkRhcyBoYXN0IER1IG5pY2h0IHp1IGJlc3RpbW1lbiFcbiIgKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgLTM6CisgICAgICB3cml0ZSggIkRlciBaaWVscmF1bSBsYWVzc3Qgc2ljaCBuaWNodCBsYWRlbiEgVmVybGVnZW4gYWJnZWJyb2NoZW4hXG4iICk7CisgICAgICBicmVhazsKKyAgICBjYXNlIC00OgorICAgICAgd3JpdGUoICJJbSBaaWVscmF1bSBrYW5uIG5pY2h0IGdlYmF1dCB3ZXJkZW4hXG4iICk7CisgICAgICBicmVhazsKKyAgICBjYXNlIC01OgorICAgICAgd3JpdGUoICJJbSBIYXVzIHZvbiAiK2NhcGl0YWxpemUobmFtZSkrIiBnaWJ0IGVzIG5vY2ggQXVzZ2FlbmdlIGluIGFuZGVyZSBIYWV1c2VyIVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICB3cml0ZSggIk9LLCBDaGVmLCBpY2ggaGFiZSBkYXMgSGF1cyB2ZXJsZWd0IVxuIiApOworICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci90b29scy9oYXVzbWVpc3RlcjIuYyBiL2Qvc2VoZXIvaGFldXNlci90b29scy9oYXVzbWVpc3RlcjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWM1NDUwCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3Rvb2xzL2hhdXNtZWlzdGVyMi5jCkBAIC0wLDAgKzEsNTM0IEBACisjaW5jbHVkZSAiLi4vaGF1cy5oIgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKworaW5oZXJpdCAic3RkL3RoaW5nIjsKKworc3RhdGljIHZvaWQgZG9fZ2VuKHN0cmluZyBvdywgb2JqZWN0IGVudiwgaW50IG5yLCBpbnQgZmluLCBpbnQgYWxsKTsKK3ByaXZhdGUgc3RyaW5nIHNwZWNpYWwoc3RyaW5nIHN0cik7Citwcml2YXRlIHN0cmluZyBkdW1wKGludCBoYXVzLCBpbnQgZmluYWwpOworcHJpdmF0ZSB2b2lkIGhlYWRlcihzdHJpbmcgZiwgaW50IGZpbmFsLCBvYmplY3QgaGF1cywgaW50IG5yKTsKK3ByaXZhdGUgdm9pZCB0cmFpbGVyKHN0cmluZyBmLCBpbnQgZmluYWwsIG9iamVjdCBoYXVzLCBpbnQgbnIpOworcHJpdmF0ZSB2b2lkIHNQcm9wKHN0cmluZyBmLCBzdHJpbmcgcE5hbWUsIHN0cmluZyBwU3RyKTsKK3ByaXZhdGUgdm9pZCBtUHJvcChzdHJpbmcgZiwgc3RyaW5nIHBOYW1lLCBtYXBwaW5nIHBNYXApOworcHJpdmF0ZSB2b2lkIGNQcm9wKHN0cmluZyBmLCBzdHJpbmcgcE5hbWUsIG1hcHBpbmcgY01hcCk7Citwcml2YXRlIHZvaWQgcHJldHR5U3RyaW5nKHN0cmluZyBmLCBzdHJpbmcgKnN0ciwgaW50IGluZGVudCk7Citwcml2YXRlIHZvaWQgcHJldHR5QXJyYXkoc3RyaW5nIGYsIHN0cmluZyAqYXJyLCBpbnQgc2VwKTsKKworY3JlYXRlKCkKK3sKKyAgaWYgKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHJldHVybjsKKyAgOjpjcmVhdGUoKTsKKworICBTZXRQcm9wKCBQX05BTUUsICJIYXVzbWVpc3RlciIpOworICBTZXRQcm9wKCBQX1NIT1JULCAiRWluIEhhdXNtZWlzdGVyIiApOworICBTZXRQcm9wKCBQX0xPTkcsCisgICAgICJEaWVzIGlzdCBkZXIgSGF1c21laXN0ZXIgYWxsZXIgU2VoZXJoYWV1c2VyLiBFciBoaWxmdCBXdXJ6ZWwgYmVpIGRlclxuIgorICAgICsiVmVyd2FsdHVuZyBkZXIgSGFldXNlci5cbiIKKyAgICArIkRlciBIYXVzbWVpc3RlciBoYXQgZWluZW4gYmxhdWVuIEtpdHRlbCBhbiB1bmQgZWluZSBBYnJpc3NiaXJuZSBnZXp1ZWNrdC5cbiIgKTsKKyAgU2V0UHJvcCggUF9HRU5ERVIsTUFMRSk7CisgIFNldFByb3AoIFBfTk9HRVQsIDEpOworCisgIEFkZElkKCAiaGF1c21laXN0ZXIiICk7CisKKyAgQWRkQ21kKCAiZ2VuZXJpZXJlIiwgImdlbmVyaWVyZW4iICk7CisgIEFkZENtZCggKHsgInJlaXNzIiwgInJlaXNzZSIgfSksICJhYnJlaXNzZW4iICk7CisgIEFkZENtZCggInZlcmxlZ2UiLCAidmVybGVnZW4iICk7Cit9CisKK3N0YXRpYyBpbnQKK2Jld2VnZShtaXhlZCBkZXN0LCBpbnQgZmxhZ3MsIHN0cmluZyBtc2cxLCBzdHJpbmcgbXNnMikKK3sKKyAgaW50IHJldDsKKworICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgY2FwaXRhbGl6ZShuYW1lKFdFUikpKyIgIittc2cxKyIuXG4iKTsKKyAgaWYgKChyZXQgPSBtb3ZlKGRlc3QsIGZsYWdzKSkgPT0gMSkKKyAgICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgY2FwaXRhbGl6ZShuYW1lKFdFUikpKyIgIittc2cyKyIuXG4iKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdlbmVyaWVyZW4oc3RyaW5nIHN0cikKK3sKKyAgb2JqZWN0IGVudjsKKyAgaW50IG5yLCBmaW4sIGFsbDsKKyAgc3RyaW5nIG93LCAqcGFybTsKKworICBlbnYgPSBlbnZpcm9ubWVudCh0aGlzX3BsYXllcigpKTsKKworICBub3RpZnlfZmFpbCggIlN5bnRheDogZ2VuZXJpZXJlIDxuYW1lPiBbPG5yPl0gW3NvZnQgfCBnYW56XVxuIiApOworCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikKKyAgICByZXR1cm4gMDsKKworICBwYXJtID0gb2xkX2V4cGxvZGUoc3RyLCAiICIpOworICBmaW4gPSAxOworCisgIHN3aXRjaCAoc2l6ZW9mKHBhcm0pKSB7CisgICAgY2FzZSAzOgorICAgICAgaWYgKHBhcm1bMl0gPT0gInNvZnQiKQorCWZpbiA9IDA7CisgICAgY2FzZSAyOgorICAgICAgaWYgKHBhcm1bMV0gPT0gInNvZnQiKQorCWZpbiA9IDA7CisgICAgICBlbHNlIGlmIChwYXJtWzFdID09ICJnYW56IikgeworCW93ID0gcGFybVswXTsKKwluciA9IChWRVJXQUxURVIpLT5IYXVzUHJvcChvdywgSFBfUk9PTVMpOworCXN0ciA9IG93KyJyYXVtIitucjsKKwlhbGwgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisJbnIgPSB0b19pbnQocGFybVsxXSk7CisJc3RyID0gcGFybVswXSsicmF1bSIrcGFybVsxXTsKKwlvdyA9IHBhcm1bMF07CisJYnJlYWs7CisgICAgICB9CisgICAgY2FzZSAxOgorICAgICAgb3cgPSBwYXJtWzBdOworICAgICAgbnIgPSAtMTsKKyAgICAgIHN0ciA9IG93KyJoYXVzIjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoZmlsZV9zaXplKEhBVVNTQVZFUEFUSCtvdysiLm8iKTwwKSB7CisgICAgaWYgKG5yID49IDAgJiYgZmlsZV9zaXplKEhBVVNTQVZFUEFUSCtvdytucisiLm8iKTwwKSB7CisgICAgICB3cml0ZSggIkVzIGdpYnQga2VpbiAnIitzdHIrIichXG4iKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICBkb19nZW4ob3csIGVudiwgbnIsIGZpbiwgYWxsKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2dlbihzdHJpbmcgb3csIG9iamVjdCBlbnYsIGludCBuciwgaW50IGZpbiwgaW50IGFsbCkKK3sKKyAgc3RyaW5nIHN0ciwgb3V0OworCisgIGlmIChuciA+PSAwKQorICAgIHN0ciA9IG93KyJyYXVtIitucjsKKyAgZWxzZQorICAgIHN0ciA9IG93KyJoYXVzIjsKKworICBiZXdlZ2UoUEFUSCtzdHIsIE1fTk9DSEVDSywgImdlaHQgenVyIEFyYmVpdCIsICJrb21tdCBhbiIpOworICB0ZWxsX3Jvb20oZW52aXJvbm1lbnQoKSwgTmFtZShXRVIpKyIgenVlY2t0IGVpbmVuIEJsb2NrLCBzaWVodCBzaWNoIGFsbGVzIGdlbmF1IGFuIHVuZCBtYWNodFxuIgorICAgICsic2ljaCBoaW4gdW5kIHdpZWRlciBOb3RpemVuLiBEYW5uIG5pY2t0IGVyIHp1ZnJpZWRlbiB1bmQgc3RlY2t0IHNlaW5lblxuQmxvY2sgd2llZGVyIHdlZy5cbiIgKTsKKyAgb3V0ID0gZHVtcChuciwgZmluKTsKKyAgYmV3ZWdlKGVudiwgTV9OT0NIRUNLLCAiZ2VodCB6dSBzZWluZW0gQXVmdHJhZ2dlYmVyIHp1cnVlY2siLCAia29tbXQgYW4iKTsKKyAgd3JpdGUoICJEZXIgSGF1c21laXN0ZXIgc2FndDogSWNoIGhhYmUgJyIrc3RyKyInIGluIGRpZSBEYXRlaVxuIgorCSsiRGVyIEhhdXNtZWlzdGVyIHNhZ3Q6ICciK291dCsiJyBnZXNjaHJpZWJlbiwgQ2hlZiFcbiIpOworCisgIGlmIChhbGwpIHsKKyAgICBpZiAobnIgPiAwKQorICAgICAgY2FsbF9vdXQoImRvX2dlbiIsIDEsIG93LCBlbnYsIG5yLTEsIGZpbiwgYWxsKTsKKyAgICBlbHNlCisgICAgICBjYWxsX291dCgiZG9fZ2VuIiwgMSwgb3csIGVudiwgLTEsIGZpbik7CisgIH0KK30KKworc3RhdGljIGludCBhYnJlaXNzZW4oc3RyaW5nIHN0cikKK3sKKyAgb2JqZWN0IGhhdXMsIGVudjsKKyAgc3RyaW5nIGljaCwgbXNnOworCisgIGlmICghc3RyIHx8IHN0ciA9PSAiIiB8fCBzc2NhbmYoc3RyLCAiJXMgYWIiLHN0cikgIT0gMSkgeworICAgIG5vdGlmeV9mYWlsKCAiU3ludGF4OiByZWlzc2UgPG5hbWU+IGFiXG4iICk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgc3RyID0gbG93ZXJfY2FzZShzdHIpOworICBpZiAoIShoYXVzID0gVkVSV0FMVEVSLT5GaW5kZUhhdXMoc3RyKSkpIHsKKyAgICB3cml0ZSggY2FwaXRhbGl6ZShzdHIpKyIgaGF0IGtlaW4gSGF1cyFcbiIgKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpY2ggPSBjYXBpdGFsaXplKG5hbWUoV0VSKSk7CisgIGVudiA9IGVudmlyb25tZW50KCk7CisgIGJld2VnZShlbnZpcm9ubWVudChoYXVzKSwgTV9OT0NIRUNLLCAiZ2VodCB6dXIgQXJiZWl0IiwgImtvbW10IGFuIik7CisgIG1zZyA9IGhhdXMtPk5hbWUoV0VSKTsKKworICBpZiAoVkVSV0FMVEVSLT5Mb2VzY2hlSGF1cyhzdHIpID09IC0xKSB7CisgICAgdGVsbF9yb29tKGVudmlyb25tZW50KCksIGljaCsiIHZlcnN1Y2h0IHZlcmdlYmxpY2gsIGVpbiBIYXVzIGFienVyZWlzc2VuLlxuIiApOworICAgIG1zZyA9ICJEZXIgQWJyaXNzdmVyc3VjaCBpc3QgZmVobGdlc2NobGFnZW4sIENoZWYhXG4iOworICB9CisgIGVsc2UgeworICAgIHRlbGxfcm9vbShlbnZpcm9ubWVudCgpLCBpY2grIiBiZXRhZXRpZ3QgZWluZSBTaXJlbmUuXG4iK21zZysiIHdpcmQgdm9uICIrbmFtZShXRU0pKyIgZWluZ2VlYm5ldC5cbiIpOworICAgIG1zZyA9IG1zZysiIGlzdCBhYmdlcmlzc2VuLCBDaGVmIVxuIjsKKyAgICBpZiAoaGF1cykgaGF1cy0+cmVtb3ZlKCk7CisgIH0KKyAgYmV3ZWdlKGVudiwgTV9OT0NIRUNLLCAiZ2VodCB6dSBzZWluZW0gQXVmdHJhZ2dlYmVyIHp1cnVlY2siLCAia29tbXQgYW4iKTsKKyAgd3JpdGUoICJEZXIgSGF1c21laXN0ZXIgc2FndDogIittc2cpOworICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2ZXJsZWdlbihzdHJpbmcgc3RyKQoreworICBzdHJpbmcgbmFtZSwgdm9uLCBuYWNoOworICBvYmplY3QgaGF1czsKKyAgaW50IHJldDsKKworICBpZiAoIXN0ciB8fCBzc2NhbmYoc3RyLCAiJXMgbmFjaCAlcyIsIG5hbWUsIG5hY2gpICE9IDIpIHsKKyAgICBub3RpZnlfZmFpbCggIlN5bnRheDogdmVybGVnZSA8bmFtZT4gbmFjaCA8emllbD5cbiIgKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobmFjaCA9PSAiaGllciIpCisgICAgbmFjaCA9IG9iamVjdF9uYW1lKGVudmlyb25tZW50KHRoaXNfcGxheWVyKCkpKTsKKworICBuYW1lID0gbG93ZXJfY2FzZShuYW1lKTsKKworICBpZiAoIShoYXVzID0gVkVSV0FMVEVSLT5GaW5kZUhhdXMobmFtZSkpKSB7CisgICAgd3JpdGUoICJEZXIgSGF1c21laXN0ZXIgc2FndDogIitjYXBpdGFsaXplKG5hbWUpKyIgaGF0IGtlaW4gSGF1cyFcbiIgKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICB2b24gPSBvYmplY3RfbmFtZShlbnZpcm9ubWVudChoYXVzKSk7CisgIHJldCA9IFZFUldBTFRFUi0+VmVybGVnZUhhdXMobmFtZSwgdm9uLCBuYWNoKTsKKyAgd3JpdGUoICJEZXIgSGF1c21laXN0ZXIgc2FndDogIiApOworICBzd2l0Y2gocmV0KSB7CisgICAgY2FzZSAtMTExOgorICAgICAgd3JpdGUoICJEYXMgaGFzdCBEdSBuaWNodCB6dSBiZXN0aW1tZW4hXG4iICk7CisgICAgICBicmVhazsKKyAgICBjYXNlIC0zOgorICAgICAgd3JpdGUoICJEZXIgWmllbHJhdW0gbGFlc3N0IHNpY2ggbmljaHQgbGFkZW4hIFZlcmxlZ2VuIGFiZ2Vicm9jaGVuIVxuIiApOworICAgICAgYnJlYWs7CisgICAgY2FzZSAtNDoKKyAgICAgIHdyaXRlKCAiSW0gWmllbHJhdW0ga2FubiBuaWNodCBnZWJhdXQgd2VyZGVuIVxuIiApOworICAgICAgYnJlYWs7CisgICAgY2FzZSAtNToKKyAgICAgIHdyaXRlKCAiSW0gSGF1cyB2b24gIitjYXBpdGFsaXplKG5hbWUpKyIgZ2lidCBlcyBub2NoIEF1c2dhZW5nZSBpbiBhbmRlcmUgSGFldXNlciFcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgd3JpdGUoICJPSywgQ2hlZiwgaWNoIGhhYmUgZGFzIEhhdXMgdmVybGVndCFcbiIgKTsKKyAgICAgIGJyZWFrOworICB9CisgIHJldHVybiAxOworfQorCisvKioqIEZ1bmt0aW9uZW4genVtIEdlbmVyaWVyZW4gZWluZXIgRGF0ZWkgYXVzIGRlbiBQcm9wZXJ0aWVzIGRlcyBIYXVzZXMgKioqLworCisjZGVmaW5lIEVYSVRfVE1QTCAiXCIvcGxheWVycy8lcy9zZWhlcmhhdXMvJXNyYXVtJWRcIiIKKworcHJpdmF0ZSB2b2lkIGR1bXBfY2hlc3Qoc3RyaW5nIG91dCwgb2JqZWN0IGNoZXN0KQoreworICBtaXhlZCBuOworCisgIGNhdGNoKHJtKG91dCkpOworCisgIHdyaXRlX2ZpbGUob3V0LCAiI2luY2x1ZGUgPHByb3BlcnRpZXMuaD5cbiNpbmNsdWRlIDxtb3ZpbmcuaD5cblxuIgorCQkgICJpbmhlcml0IFwiL2Qvd3Vlc3RlL2R1cmlhbi9iZWhhZWx0ZXJcIjtcblxuIgorCQkgICJ2b2lkIGNyZWF0ZSgpXG57XG4gIGlmKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHJldHVybjtcblxuIgorCQkgICIgIDo6Y3JlYXRlKCk7XG5cbiIgKTsKKyAgc1Byb3Aob3V0LCAiUF9TSE9SVCIsIGNoZXN0LT5RdWVyeVByb3AoUF9TSE9SVCkpOworICBzUHJvcChvdXQsICJQX0xPTkciLCAgY2hlc3QtPlF1ZXJ5UHJvcChQX0xPTkcpKTsKKworICB3cml0ZV9maWxlKG91dCwgIiAgU2V0UHJvcChQX05PR0VULCAxKTtcbiIpOworICB3cml0ZV9maWxlKG91dCwgIiAgU2V0UHJvcChQX0dFTkRFUiwgIisKKwkJICAgICh7Ik5FVVRFUiIsIk1BTEUiLCJGRU1BTEUifSlbY2hlc3QtPlF1ZXJ5UHJvcChQX0dFTkRFUildKworCQkgICAgIiApO1xuICBTZXRQcm9wKFBfTkFNRSwgIik7CisKKyAgbiA9IGNoZXN0LT5RdWVyeVByb3AoUF9OQU1FKTsKKyAgaWYgKHN0cmluZ3AobikpCisgICAgd3JpdGVfZmlsZShvdXQsICJcIiIrbisiXCIiKTsKKyAgZWxzZQorICAgIHByZXR0eUFycmF5KG91dCwgbiwgMCk7CisgIHdyaXRlX2ZpbGUob3V0LCAiICk7XG5cbiAgQWRkSWQoICIpOworICBwcmV0dHlBcnJheShvdXQsIGNoZXN0LT5RdWVyeVByb3AoUF9JRFMpLSh7IFRSVUhFIH0pLCAwKTsKKyAgd3JpdGVfZmlsZShvdXQsICIgKTtcbiIpOworCisgIGlmICgobj1jaGVzdC0+UXVlcnlQcm9wKFBfQURKRUNUSVZFUykpICYmIHNpemVvZihuKSkgeworICAgIHdyaXRlX2ZpbGUob3V0LCAiXG4gIEFkZEFkamVjdGl2ZSggIik7CisgICAgcHJldHR5QXJyYXkob3V0LCBuLCAwKTsKKyAgICB3cml0ZV9maWxlKG91dCwgIiApO1xuIik7CisgIH0KKyAgaWYgKChuPWNoZXN0LT5RdWVyeVByb3AoUF9OQU1FX0FESikpICYmIHNpemVvZihuKSkgeworICAgIHdyaXRlX2ZpbGUob3V0LCAiXG4gIFNldFByb3AoUF9OQU1FX0FESiwgIik7CisgICAgcHJldHR5QXJyYXkob3V0LCBuLCAwKTsKKyAgICB3cml0ZV9maWxlKG91dCwgIiApO1xuIik7CisgIH0KKyAgd3JpdGVfZmlsZShvdXQsICJ9XG4iKTsKK30KKworcHJpdmF0ZSBzdHJpbmcgZHVtcChpbnQgbnIsIGludCBmaW5hbCkKK3sKKyAgc3RyaW5nIG91dDsKKyAgb2JqZWN0IGVudjsKKyAgbWFwcGluZyBwcm9wOworCisgIGVudiA9IGVudmlyb25tZW50KHRoaXNfb2JqZWN0KCkpOworCisgIGlmIChmaW5hbCAmJiBlbnYtPlF1ZXJ5UHJvcChIX0NIRVNUKSkKKyAgICBkdW1wX2NoZXN0KFBBVEgrInJlcC8iK2Vudi0+UXVlcnlPd25lcigpKyJ0cnVoZS5jIiwgcHJlc2VudChUUlVIRSwgZW52KSk7CisKKyAgaWYgKGZpbmFsKSB7CisgICAgb3V0ID0gUEFUSCsicmVwLyIrZW52LT5RdWVyeU93bmVyKCk7CisgICAgaWYgKG5yIDwgMCkKKyAgICAgIG91dCArPSAiaGF1cy5jIjsKKyAgICBlbHNlCisgICAgICBvdXQgKz0gInJhdW0iK25yKyIuYyI7CisgIH0KKyAgZWxzZQorICAgIG91dCA9IFBBVEgrImZpeGVkLmMiOworCisgIGNhdGNoKHJtKG91dCkpOworCisgIGhlYWRlcihvdXQsIGZpbmFsLCBlbnYsIG5yKTsKKyAgaWYgKG5yPDApIHsKKyAgICBzUHJvcChvdXQsICJQX1NIT1JUIiwgZW52LT5RdWVyeVByb3AoUF9TSE9SVCkpOworICAgIHdyaXRlX2ZpbGUob3V0LCAiXG4iKTsKKyAgICBzUHJvcChvdXQsICJQX0xPTkciLCBlbnYtPlF1ZXJ5UHJvcChQX0xPTkcpKTsKKyAgICB3cml0ZV9maWxlKG91dCwgIlxuIik7CisKKyAgICBpZiAoZmluYWwpIHsKKyAgICAgIG1peGVkIG47CisKKyAgICAgIHdyaXRlX2ZpbGUob3V0LCAiICBTZXRQcm9wKFBfTk9HRVQsIDEpO1xuIik7CisgICAgICB3cml0ZV9maWxlKG91dCwgIiAgU2V0UHJvcChQX0dFTkRFUiwgIisKKwkJICAgICAgKHsiTkVVVEVSIiwiTUFMRSIsIkZFTUFMRSJ9KVtlbnYtPlF1ZXJ5UHJvcChQX0dFTkRFUildKworCQkgICAgICAiICk7XG4gIFNldFByb3AoUF9OQU1FLCAiKTsKKyAgICAgIG4gPSBlbnYtPlF1ZXJ5UHJvcChQX05BTUUpOworICAgICAgaWYgKHN0cmluZ3AobikpCisJd3JpdGVfZmlsZShvdXQsICJcIiIrbisiXCIiKTsKKyAgICAgIGVsc2UKKwlwcmV0dHlBcnJheShvdXQsIG4sIDApOworICAgICAgd3JpdGVfZmlsZShvdXQsICIgKTtcblxuICBBZGRJZCggIik7CisgICAgICBwcmV0dHlBcnJheShvdXQsIGVudi0+UXVlcnlQcm9wKFBfSURTKS0oeyAic2VoZVxyaGF1cyIsICJcbiIrZW52LT5RdWVyeU93bmVyKCkrImhhdXMiIH0pLCAwKTsKKyAgICAgIHdyaXRlX2ZpbGUob3V0LCAiICk7XG4iKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgc1Byb3Aob3V0LCAiUF9JTlRfU0hPUlQiLCBlbnYtPlF1ZXJ5UHJvcChQX0lOVF9TSE9SVCkpOworICAgIHdyaXRlX2ZpbGUob3V0LCAiXG4iKTsKKyAgICBzUHJvcChvdXQsICJQX0lOVF9MT05HIiwgZW52LT5RdWVyeVByb3AoUF9JTlRfTE9ORykpOworICAgIHdyaXRlX2ZpbGUob3V0LCAiXG4iKTsKKyAgICBpZiAoc2l6ZW9mKHByb3AgPSBlbnYtPlF1ZXJ5UHJvcChQX0RFVEFJTFMpKSkgeworICAgICAgbVByb3Aob3V0LCAiQWRkRGV0YWlsIiwgcHJvcCk7CisgICAgICB3cml0ZV9maWxlKG91dCwgIlxuIik7CisgICAgfQorICAgIGlmIChzaXplb2YocHJvcCA9IGVudi0+UXVlcnlQcm9wKFBfUkVBRF9ERVRBSUxTKSkpIHsKKyAgICAgIG1Qcm9wKG91dCwgIkFkZFJlYWREZXRhaWwiLCBwcm9wKTsKKyAgICAgIHdyaXRlX2ZpbGUob3V0LCAiXG4iKTsKKyAgICB9CisgICAgaWYgKHNpemVvZihwcm9wID0gZW52LT5RdWVyeVByb3AoSF9DT01NQU5EUykpKQorICAgICAgY1Byb3Aob3V0LCAiQWRkVXNlckNtZCIsIHByb3ApOworCisgICAgd3JpdGVfZmlsZShvdXQsICJcbiIpOworICAgIGlmIChmaW5hbCkgeworICAgICAgc3RyaW5nICprLCBvOworICAgICAgaW50IGksIG51bTsKKworICAgICAgcHJvcCA9IGVudi0+UXVlcnlQcm9wKFBfRVhJVFMpOworICAgICAgayA9IG1faW5kaWNlcyhwcm9wKTsKKyAgICAgIGlmIChtZW1iZXIoaywgInJhdXMiKSA+PSAwKSB7CisJayAtPSAoeyAicmF1cyIgfSk7CisJd3JpdGVfZmlsZShvdXQsIHNwcmludGYoIiAgQWRkRXhpdCggXCJyYXVzXCIsIFwiJXNcIik7XG4iLCBwcm9wWyJyYXVzIl0pKTsKKyAgICAgIH0KKyAgICAgIGZvciAoaT1zaXplb2YoayktMTsgaT49MDsgaS0tKSB7CisJaWYgKHNzY2FuZihwcm9wW2tbaV1dLCBQQVRIKyIlc3JhdW0lZCIsIG8sIG51bSkgIT0gMikKKwkgIHByaW50ZigiS29taXNjaGVyIEV4aXQgKCVPKVxuJXMgLT4gJXNcbiIsIGVudiwga1tpXSwgcHJvcFtrW2ldXSk7CisJZWxzZSB7CisJICBpZiAobyA9PSBlbnYtPlF1ZXJ5T3duZXIoKSkgeworCSAgICBvID0gc3ByaW50ZihFWElUX1RNUEwsIG8sIG8sIG51bSk7CisJICAgIHdyaXRlX2ZpbGUob3V0LCBzcHJpbnRmKCIgIEFkZEV4aXQoIFwiJXNcIiwgJXMpO1xuIiwga1tpXSwgbykpOworCSAgfQorCSAgZWxzZSB7CisJICAgIHdyaXRlX2ZpbGUob3V0LCBzcHJpbnRmKCIgIEFkZEV4aXQoIFwiJXNcIiwgXCIlc1wiKTtcbiIsIGtbaV0sIHByb3Bba1tpXV0pKTsKKwkgICAgcHJpbnRmKCJFeGl0IHZvbiAlTyBuYWNoICVzIVxuIiwgZW52LCBwcm9wW2tbaV1dKTsKKwkgIH0KKwl9CisgICAgICB9CisgICAgfQorICB9CisgIHRyYWlsZXIob3V0LCBmaW5hbCwgZW52LCBucik7CisKKyAgcmV0dXJuIG91dDsKK30KKworcHJpdmF0ZSB2b2lkIGhlYWRlcihzdHJpbmcgZiwgaW50IGZpbmFsLCBvYmplY3QgaGF1cywgaW50IG5yKQoreworICBpZiAoZmluYWwpIHsKKyAgICB3cml0ZV9maWxlKGYsICIjaW5jbHVkZSA8cHJvcGVydGllcy5oPiIgKTsKKyAgICBpZiAobnIgPj0gMCkgeworICAgICAgd3JpdGVfZmlsZShmLCAiXG5cbmluaGVyaXQgXCJzdGQvcm9vbVwiO1xuaW5oZXJpdCBcIiIrUEFUSCsibW9kdWxlcy91c2VyY21kXCI7Iik7CisgICAgICB3cml0ZV9maWxlKGYsICJcblxuY3JlYXRlKClcbntcbiAgcm9vbTo6Y3JlYXRlKCk7XG4gIHVzZXJjbWQ6OmNyZWF0ZSgpO1xuXG4iKTsKKyAgICAgIHdyaXRlX2ZpbGUoZiwgIiAgU2V0UHJvcChQX0xJR0hULCAxKTtcbiAgU2V0UHJvcChQX0lORE9PUlMsIDEpO1xuXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB3cml0ZV9maWxlKGYsICJcbiNpbmNsdWRlIDxtb3ZpbmcuaD5cbiNpbmNsdWRlIFwiIitQQVRIKyJoYXVzLmhcIlxuXG4iICk7CisgICAgICB3cml0ZV9maWxlKGYsICJpbmhlcml0IFwic3RkL3RoaW5nXCI7XG5pbmhlcml0IEhBVVNUVUVSO1xuXG4iICk7CisgICAgICB3cml0ZV9maWxlKGYsICJjcmVhdGUoKVxue1xuICB0aGluZzo6Y3JlYXRlKCk7XG4gIGhhdXN0dWVyOjpjcmVhdGUoKTtcblxuIik7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHdyaXRlX2ZpbGUoZiwgIiNpbmNsdWRlIFwiaGF1cy5oXCJcbiNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+XG5cbmluaGVyaXQgIik7CisgICAgd3JpdGVfZmlsZShmLCAoKG5yIDwgMCkgPyAiSEFVUyIgOiAiUkFVTSIgKSApOworICAgIHdyaXRlX2ZpbGUoZiwgIjtcbmluaGVyaXQgXCIvc3RkL3RoaW5nL21vdmluZ1wiO1xuXG4iKTsKKyAgICB3cml0ZV9maWxlKGYsICJjcmVhdGUoKVxue1xuICBpZiAoIWNsb25lcCh0aGlzX29iamVjdCgpKSkgcmV0dXJuO1xuICA6OmNyZWF0ZSgpO1xuXG4iKTsKKyAgICB3cml0ZV9maWxlKGYsICIgIFNldE93bmVyKFwiIitoYXVzLT5RdWVyeU93bmVyKCkrIlwiIik7CisgICAgaWYgKG5yID49IDApCisgICAgICB3cml0ZV9maWxlKGYsICIsICIrbnIpOworICAgIHdyaXRlX2ZpbGUoZiwgIik7XG4gIExvYWQoKTtcblxuIik7CisgICAgaWYgKG5yID49IDApCisgICAgICB3cml0ZV9maWxlKGYsICIgIFNldFByb3AoUF9ERVRBSUxTLCAoW10pKTtcbiAgU2V0UHJvcChQX1JFQURfREVUQUlMUywgKFtdKSk7XG5cbiIpOworICB9Cit9CisKK3ByaXZhdGUgdm9pZCB0cmFpbGVyKHN0cmluZyBmLCBpbnQgZmluYWwsIG9iamVjdCBoYXVzLCBpbnQgbnIpCit7CisgIGlmIChmaW5hbCkgeworICAgIGlmIChuciA+PSAwKQorICAgICAgd3JpdGVfZmlsZShmLCAifVxuIik7CisgICAgZWxzZSB7CisgICAgICB3cml0ZV9maWxlKGYsIHJlYWRfZmlsZShQQVRIKyJ0b29scy9oYXVzLmFweCIpKTsKKyAgICAgIHdyaXRlX2ZpbGUoZiwgIiAgdGhpc19wbGF5ZXIoKS0+bW92ZSgiKTsKKyAgICAgIHdyaXRlX2ZpbGUoZiwgc3ByaW50ZihFWElUX1RNUEwsIGhhdXMtPlF1ZXJ5T3duZXIoKSwgaGF1cy0+UXVlcnlPd25lcigpLCAwKSk7CisgICAgICB3cml0ZV9maWxlKGYsICIsXG5cdFx0XHRNX0dPLCAwLCBcImJldHJpdHQgXCIrbmFtZShXRU4sMSksIFwia29tbXQgaGVyZWluXCIpO1xuIgorCQkgICAgIiAgcmV0dXJuIDE7XG59XG4iKTsKKyAgICAgIGlmICghaGF1cy0+UXVlcnlQcm9wKFBfU0hPUlQpKQorCXdyaXRlX2ZpbGUoZiwgIlxuc3RyaW5nIHNob3J0KClcbntcbiAgc3RyaW5nIHJldDtcblxuIgorCQkgICAgICAiICByZXQgPSA6OnNob3J0KCk7XG4iCisJCSAgICAgICIgIGlmIChwcmV2aW91c19vYmplY3QoKSAhPSBlbnZpcm9ubWVudCgpICYmICFyZXQpXG4iCisJCSAgICAgICIgICAgcmV0ID1cIlwiO1xuXG4gIHJldHVybiByZXQ7XG59XG4iKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgd3JpdGVfZmlsZShmLCAiICBTYXZlKDEpO1xuXG4iKTsKKyAgICB3cml0ZV9maWxlKGYsICIgIHsgb2JqZWN0IHJhdW07XG4gICAgaWYgKHJhdW0gPSBmaW5kX29iamVjdCgiKTsKKyAgICBpZiAobnIgPj0gMCkKKyAgICAgIHdyaXRlX2ZpbGUoZiwgIlJBVU1OQU1FKFwiIitoYXVzLT5RdWVyeU93bmVyKCkrIlwiLCAiK25yKyIpKSlcbiIpOworICAgIGVsc2UKKyAgICAgIHdyaXRlX2ZpbGUoZiwgIkhBVVNOQU1FKFwiIitoYXVzLT5RdWVyeU93bmVyKCkrIlwiKSkpXG4iKTsKKyAgICB3cml0ZV9maWxlKGYsICIgICAgICByYXVtLT5Mb2FkKCk7XG4gIH1cblxuICBjYWxsX291dChcInJlbW92ZVwiLDApO1xufVxuIik7CisgIH0KK30KKworcHJpdmF0ZSBzdHJpbmcgc3BlY2lhbChzdHJpbmcgcykKK3sKKyAgcyA9IGltcGxvZGUoZXhwbG9kZShzLCAiXFwiKSwgIlxcXFwiKTsKKyAgcyA9IGltcGxvZGUoZXhwbG9kZShzLCAiXHQiKSwgIlxcdCIpOworICBzID0gaW1wbG9kZShleHBsb2RlKHMsICJcIiIpLCAiXFxcIiIpOworCisgIHJldHVybiBzOworfQorCitwcml2YXRlIHZvaWQgc1Byb3Aoc3RyaW5nIGYsIHN0cmluZyBwTmFtZSwgc3RyaW5nIHBTdHIpCit7CisgIHN0cmluZyAqc3RyOworICB3cml0ZV9maWxlKGYsICIgIFNldFByb3AoICIrcE5hbWUrIiwiKTsKKyAgaWYgKCFwU3RyKSB7CisgICAgd3JpdGVfZmlsZShmLCAiMCApO1xuIik7CisgICAgcmV0dXJuOworICB9CisgIHBTdHIgPSBzcGVjaWFsKHBTdHIpOworICBpZiAoc2l6ZW9mKHN0cj1vbGRfZXhwbG9kZShwU3RyLCJcbiIpKSA+IDEpCisgICAgcHJldHR5U3RyaW5nKGYsIHN0ciwgNCk7CisgIGVsc2UgeworICAgIGlmIChzaXplb2Yoc3RyKT09MCkKKyAgICAgIHN0ciA9ICh7IiJ9KTsKKyAgICB3cml0ZV9maWxlKGYsICJcbiAgICAgXCIiK3N0clswXSk7CisgICAgaWYgKHBTdHJbPDFdID09ICdcbicpCisgICAgICB3cml0ZV9maWxlKGYsICJcXG5cIiIpOworICAgIGVsc2UKKyAgICAgIHdyaXRlX2ZpbGUoZiwgIlwiIik7CisgIH0KKyAgd3JpdGVfZmlsZShmLCAiICk7XG4iKTsKK30KKworcHJpdmF0ZSB2b2lkIG1Qcm9wKHN0cmluZyBmLCBzdHJpbmcgcE5hbWUsIG1hcHBpbmcgcE1hcCkKK3sKKyAgc3RyaW5nICplcSwgdDE7CisgIG1peGVkIGNtZDsKKyAgaW50IGksajsKKworICBpZiAoc2l6ZW9mKHBNYXApID09IDApCisgICAgcmV0dXJuOworCisgIGNtZCA9IFZFUldBTFRFUi0+UENydW5jaChwTWFwKTsKKworICBmb3IgKGk9c2l6ZW9mKGNtZCktMTsgaT49MDsgaS0tKSB7CisgICAgd3JpdGVfZmlsZShmLCAiICAiK3BOYW1lKyIoXG4gICAgIik7CisgICAgZXEgPSBjbWRbaV1bMF07CisgICAgdDEgPSBjbWRbaV1bMV07CisKKyAgICBwcmV0dHlBcnJheShmLCBlcSwgMCk7CisgICAgd3JpdGVfZmlsZShmLCAiLCAiKTsKKworICAgIHByZXR0eVN0cmluZyhmLCBvbGRfZXhwbG9kZShzcGVjaWFsKHQxKSwgIlxuIiksIDYpOworICAgIHdyaXRlX2ZpbGUoZiwgIiApO1xuIik7CisgIH0KK30KKworcHJpdmF0ZSB2b2lkIGNQcm9wKHN0cmluZyBmLCBzdHJpbmcgcE5hbWUsIG1hcHBpbmcgY01hcCkKK3sKKyAgc3RyaW5nIHQxLCB0MjsKKyAgbWl4ZWQgY21kLCBlcTsKKyAgaW50IGksajsKKworICBjbWQgPSBWRVJXQUxURVItPlBDcnVuY2goY01hcCk7CisKKyAgZm9yKCBpPXNpemVvZihjbWQpLTE7IGk+PTA7IGktLSkgeworICAgIHdyaXRlX2ZpbGUoZiwgIiAgIitwTmFtZSsiKFxuICAgICIpOworICAgIGVxID0gY21kW2ldWzBdOworICAgIHQxID0gY21kW2ldWzFdOworICAgIHQyID0gY21kW2ldWzJdOworCisgICAgcHJldHR5QXJyYXkoZiwgZXEsIDEpOworICAgIHdyaXRlX2ZpbGUoZiwgIiwgMCwgIik7CisKKyAgICBwcmV0dHlTdHJpbmcoZiwgb2xkX2V4cGxvZGUoc3BlY2lhbCh0MSksICJcbiIpLCA0KTsKKyAgICB3cml0ZV9maWxlKGYsICIsICIpOworICAgIGlmICh0MikKKyAgICAgIHByZXR0eVN0cmluZyhmLCBvbGRfZXhwbG9kZShzcGVjaWFsKHQyKSwgIlxuIiksIDQpOworICAgIGVsc2UKKyAgICAgIHdyaXRlX2ZpbGUoZiwgIjAiKTsKKyAgICB3cml0ZV9maWxlKGYsICIgKTtcbiIpOworICB9Cit9CisKK3ByaXZhdGUgdm9pZCBwcmV0dHlTdHJpbmcoc3RyaW5nIGYsIHN0cmluZyAqc3RyLCBpbnQgaW5kZW50KQoreworICBzdHJpbmcgaW5kOworICBpbnQgaTsKKworICBpbmQgPSBleHRyYWN0KCJcbiAgICAgICAgICAiLDAsaW5kZW50KTsKKworICBpZiAoIXNpemVvZihzdHIpKSB7CisgICAgd3JpdGVfZmlsZShmLCBpbmQrIiBcIlxcblwiIik7CisgICAgcmV0dXJuOworICB9CisgIHdyaXRlX2ZpbGUoZiwgaW5kKyIgXCIiK3N0clswXSsiXFxuXCIiKTsKKyAgZm9yIChpPTE7IGk8c2l6ZW9mKHN0cik7IGkrKykgeworICAgIHdyaXRlX2ZpbGUoZiwgaW5kKyIrXCIiK3N0cltpXSsiXFxuXCIiKTsKKyAgfQorfQorCitwcml2YXRlIHZvaWQgcHJldHR5QXJyYXkoc3RyaW5nIGYsIHN0cmluZyAqYXJyLCBpbnQgc2VwKQoreworICBpbnQgaSxqOworICBzdHJpbmcgcmVzLCB0MSwgdDI7CisKKyAgd3JpdGVfZmlsZShmLCAiKHsiKTsKKworICBpZiAoc2l6ZW9mKGFycikpIHsKKyAgICB0MSA9ICgiXCIiK2FyclswXSsiXCIiKTsKKyAgICByZXMgPSAiICIrdDE7CisgICAgdDIgPSAiIjsKKworICAgIGZvciAoaT0xLCBqPXNpemVvZihhcnIpOyBpPGo7IGkrKykgeworICAgICAgdDIgPSAiXCIiK2FycltpXSsiXCIiOworICAgICAgaWYgKCFzZXApIHsKKwlpZiAoKHNpemVvZih0MSkrc2l6ZW9mKHQyKSk+NjkpIHsKKwkgIHJlcyArPSAoIixcbiAgICAgICAiK3QyKTsKKwkgIHQxID0gdDI7CisJICB0MiA9ICIiOworCX0KKwllbHNlIHsKKwkgIHQxICs9ICgiLCAiK3QyKTsKKwkgIHJlcyArPSAoIiwgIit0Mik7CisJfQorICAgICAgfQorICAgICAgZWxzZSB7CisJcmVzICs9ICgiLFxuICAgICAgICIrdDIpOworICAgICAgfQorICAgIH0KKyAgfQorICB3cml0ZV9maWxlKGYsIHJlcyArICIgfSkiICk7Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci90b29scy9oYXVzdG9vbC5jIGIvZC9zZWhlci9oYWV1c2VyL3Rvb2xzL2hhdXN0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBmNmUxZQotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci90b29scy9oYXVzdG9vbC5jCkBAIC0wLDAgKzEsMTgyIEBACisjaW5jbHVkZSAiLi4vaGF1cy5oIgorI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKyNpbmNsdWRlIDx3aXpsZXZlbHMuaD4KKworaW5oZXJpdCAic3RkL3NlY3VyZV90aGluZyI7CisKK3ByaXZhdGUgaW50IHNlY3VyZSgpCit7CisgIHJldHVybiAodGhpc19pbnRlcmFjdGl2ZSgpICYmIChJU19BUkNIKHRoaXNfaW50ZXJhY3RpdmUoKSkgfHwKKwkJCQkgZ2V0dWlkKHRoaXNfaW50ZXJhY3RpdmUoKSkgPT0gInd1cnplbCIpKTsKK30KKworY3JlYXRlKCkKK3sKKyAgaWYgKCFjbG9uZXAodGhpc19vYmplY3QoKSkpIHJldHVybjsKKyAgOjpjcmVhdGUoKTsKKworICBTZXRQcm9wKFBfU0hPUlQsICJFaW4gQWRyZXNzdmVyemVpY2huaXMiICk7CisgIFNldFByb3AoUF9MT05HLAorICAgICAiTWl0IGRpZXNlbSBBZHJlc3N2ZXJ6ZWljaG5pcyBrb2VubmVuIGRpZSByaWNodGlnZW4gTGV1dGUgT3JkbnVuZyBpbiBkZW5cbiIKKyAgICArIld1c3QgZGVyIFNlaGVyaGF1c2FuZ2VsZWdlbmhlaXRlbiBicmluZ2VuLlxuIgorICAgICsiRGllIHJpY2h0aWdlbiBMZXV0ZT9cbiIKKyAgICArIkphOiBNYW4gbXVzcyBzY2hvbiBFcnptYWdpZXIgc2VpbiBvZGVyIFd1cnplbCBoZWlzc2VuISA7KVxuIgorICAgICsiRHUga2FubnN0IGVzIHVlYnJpZ2VucyBsZXNlbiFcbiIgKTsKKyAgU2V0UHJvcChQX05BTUUsICJBZHJlc3N2ZXJ6ZWljaG5pcyIpOworICBTZXRQcm9wKFBfUkVBRF9NU0csCisgICAgICJFcyBzdGVoZW4gZm9sZ2VuZGUgQmVmZWhsZSB6dXIgVmVyZnVlZ3VuZzpcbiIKKyAgICArImNoZWNrZWQgPG5hbWU+IFsrLy1dIDxucj5cbiIKKyAgICArInJlcFxuIgorICAgICsibWttYWlsIDxuYW1lPlxuIgorICAgICk7CisgIFNldFByb3AoUF9HRU5ERVIsIE5FVVRFUik7CisgIFNldFByb3AoUF9XRUlHSFQsIDEwMCk7CisgIFNldFByb3AoUF9BVVRPTE9BRE9CSiwgMSk7CisgIFNldFByb3AoUF9ORVZFUkRST1AsIDEpOworICBTZXRQcm9wKFBfTk9EUk9QLCAxKTsKKworICBBZGRJZCggKHsgInZlcnplaWNobmlzIiwgImFkcmVzc3ZlcnplaWNobmlzIiwgImhhdXN0b29sIiB9KSApOworCisgIEFkZENtZCgiY2hlY2tlZCIsICJjaGVja2VkIik7CisgIEFkZENtZCgicmVwIiwgInJlcG9ydCIpOworICBBZGRDbWQoIm1rbWFpbCIsICJta21haWwiKTsKK30KKworI2RlZmluZSBDSEVDS0VEIFBBVEgrImxvZy9DSEVDS0VEIgorc3RhdGljIGludAorY2hlY2tlZChzdHJpbmcgc3RyKQoreworICBtYXBwaW5nIGRyaW47CisgIHN0cmluZyBuYW1lLCAqbGluZXMsICppbmQsIHBtOworICBpbnQgbnIsIGk7CisgIGNsb3N1cmUgaHA7CisKKyAgaWYgKCFzZWN1cmUoKSkKKyAgICByZXR1cm4gMDsKKworICBub3RpZnlfZmFpbCgiU3ludGF4OiBjaGVja2VkIDxuYW1lPiBbKy8tXSA8bnI+XG4iICk7CisgIGlmICghc3RyIHx8IHN0ciA9PSAiIikKKyAgICByZXR1cm4gMDsKKworICBpZiAoZmlsZV9zaXplKENIRUNLRUQpID4gMCkKKyAgICBsaW5lcyA9IGV4cGxvZGUocmVhZF9maWxlKENIRUNLRUQpLCAiXG4iKSAtICh7IiJ9KTsKKyAgZWxzZQorICAgIGxpbmVzID0gKHt9KTsKKworICBmb3IgKGRyaW4gPSAoW10pLCBpPXNpemVvZihsaW5lcyktMTsgaT49MDsgaS0tKSB7CisgICAgaWYgKHNzY2FuZihsaW5lc1tpXSwgIiVzJXQlZCIsIG5hbWUsIG5yKSA9PSAyKQorICAgICAgZHJpbiArPSAoWyBuYW1lIDogbnItMSBdKTsKKyAgfQorICBsaW5lcyA9ICh7IH0pOworICBwbSA9ICIiOworICBocCA9IHN5bWJvbF9mdW5jdGlvbigiSGF1c1Byb3AiLCBWRVJXQUxURVIpOworCisgIGlmIChzc2NhbmYoc3RyLCAiJXMgJWQiLCBuYW1lLCBucik9PTIgfHwgc3NjYW5mKHN0ciwgIiVzICVzICVkIiwgbmFtZSwgcG0sIG5yKSA9PSAzKSB7CisgICAgaWYgKCFmdW5jYWxsKGhwLCBuYW1lLCBIUF9FTlYpKSB7CisgICAgICB3cml0ZShjYXBpdGFsaXplKG5hbWUpKyIgaGF0IGdhciBrZWluIEhhdXMhXG4iKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAobnIgPCAwKSB7CisgICAgICB3cml0ZSgiWnVtIEFiemllaGVuIG5pbW0gYml0dGUgJ2NoZWNrZWQgPG5hbWU+IC0gPG5yPichXG4iKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAobWVtYmVyKGRyaW4sIG5hbWUpKQorICAgICAgaSA9IGRyaW5bbmFtZV07CisgICAgc3dpdGNoKHBtKSB7CisgICAgICBjYXNlICIrIjoKKwlpZiAoaStuciA+IGZ1bmNhbGwoaHAsIG5hbWUsIEhQX1JPT01TKSkgeworCSAgcHJpbnRmKCIlZCBSYWV1bWU/IFdpZSBzb2xsIGRhcyBnZWhlbj9cbiIsIGkrbnIpOworCSAgcmV0dXJuIDE7CisJfQorCWRyaW5bbmFtZV0gKz0gbnI7CisJYnJlYWs7CisgICAgICBjYXNlICItIjoKKwlpZiAoaS1uciA8IDApIHsKKwkgIHdyaXRlKCJTb3ZpZWxlIFJhZXVtZSBrYW5uc3QgRHUgIitjYXBpdGFsaXplKG5hbWUpKyIgZ2FyIG5pY2h0IGFiemllaGVuLi4uXG4iKTsKKwkgIHJldHVybiAxOworCX0KKwlkcmluW25hbWVdIC09IG5yOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlpZiAobnIgPiBmdW5jYWxsKGhwLCBuYW1lLCBIUF9ST09NUykpIHsKKwkgIHByaW50ZigiJXMgbmF0IGtlaW5lICVkIFJhZXVtZSFcbiIsY2FwaXRhbGl6ZShuYW1lKSxucik7CisJICByZXR1cm4gMTsKKwl9CisJZHJpbltuYW1lXSA9IG5yOworICAgIH0KKyAgICBybShDSEVDS0VEKTsKKyAgICBmb3IgKGk9c2l6ZW9mKGluZD1zb3J0X2FycmF5KG1faW5kaWNlcyhkcmluKSwjJzwpKS0xOyBpPj0wOyBpLS0pCisgICAgICB3cml0ZV9maWxlKENIRUNLRUQsIHNwcmludGYoIiVzICVkXG4iLGluZFtpXSwgMStkcmluW2luZFtpXV0pKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlcG9ydCgpCit7CisgIHN0cmluZyAqcmVwLCAqaGVhZCwgbmFtZTsKKyAgaW50IGksIGxwLCBucjsKKworICBpZiAoZmlsZV9zaXplKCIvbG9nL3JlcG9ydC93dXJ6ZWwucmVwIik8PTApIHsKKyAgICB3cml0ZSgiS2VpbiB3dXJ6ZWwucmVwIChKaXBwaWVoISA7KVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXAgPSBvbGRfZXhwbG9kZShyZWFkX2ZpbGUoIi9sb2cvcmVwb3J0L3d1cnplbC5yZXAiKSwiXG4iKTsKKyAgbHAgPSBzaXplb2YoUEFUSCktMTsKKworICBmb3IgKGk9c2l6ZW9mKHJlcCktMjsgaT49MDsgaS09MikgeworICAgIGhlYWQgPSBvbGRfZXhwbG9kZShyZXBbaV0sICIgIik7CisgICAgaWYgKGhlYWRbNF1bMC4ubHBdID09IFBBVEgpIHsKKyAgICAgIG5hbWUgPSBvbGRfZXhwbG9kZShoZWFkWzRdLCIvIilbPDFdOworICAgICAgbnIgPSB0b19pbnQobmFtZVs8MS4uPDFdKTsKKyAgICAgIG5hbWUgPSBuYW1lWzAuLjw2XTsKKyAgICAgIGhlYWRbMl0gPSBjYXBpdGFsaXplKGhlYWRbMl0pOworICAgICAgd3JpdGVfZmlsZShQQVRIKyJyZXAvIituYW1lLAorCQkgc3ByaW50ZigiJXMgaW4gUmF1bSAlZDpcbiVzXG4iLAorCQkJIGltcGxvZGUoaGVhZFswLi4yXSwiICIpLG5yLHJlcFtpKzFdKSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHdyaXRlX2ZpbGUoUEFUSCsicmVwL3d1cnplbC5yZXAiLHNwcmludGYoIiVzXG4lc1xuIiwgcmVwW2ldLCByZXBbaSsxXSkpOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citta21haWwoc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIGYsZm07CisKKyAgaWYgKCFzdHIgfHwgc3RyID09ICIiKSB7CisgICAgbm90aWZ5X2ZhaWwoICJTeW50YXg6IG1rbWFpbCA8bmFtZT5cbiIpOworICAgIHJldHVybiAwOworICB9CisKKyAgaWYgKCEoZj0oVkVSV0FMVEVSKS0+SGF1c1Byb3Aoc3RyLCBIUF9FTlYpKSkgeworICAgIHByaW50ZigiJXMgaGF0IGtlaW4gSGF1cyFcbiIsIHN0cik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgZm0gPSBQQVRIK3N0cisiLm1haWwiOworCisgIHdyaXRlX2ZpbGUoZm0sICJcCisgIEh1aHUhXG5cCitcblwKK0RhIER1IE1hZ2llciBiaXN0LCBicmF1Y2hzdCBEdSBhdWNoIGtlaW4gU2VoZXJoYXVzIG1laHIuIERhbWl0IERlaW5lXG5cCitCZXNjaHJlaWJ1bmdlbiBhYmVyIG5pY2h0IHZlcmxvcmVuIHNpbmQsIGZpbmRlc3QgRHUgZGllIEZpbGVzIERlaW5lc1xuXAorSGF1c2VzIGluIC9wbGF5ZXJzLyIrc3RyKyIvc2VoZXJoYXVzLy5cblwKK1xuXAorU29sbCBEZWluIEhhdXMgd2VpdGVyaGluIGFuIGRlciBqZXR6aWdlbiBTdGVsbGUgc3RlaGVuIGJsZWliZW5cblwKKygiK2YrIiksXG5cCitzbyBrbGFlcmUgZGFzIGJpdHRlIG1pdCBkZW0gZG9ydCB6dXN0YWVuZGlnZW4gTWFnaWVyIHNvd2llIGRlbiB6dXN0YWVuLVxuXAorZGlnZW4gUmVnaW9uc21hZ2llcm4gKHdlaWwgZXMgc2ljaCBqZXR6dCB1bSBkZW4gQW5zY2hsdXNzIHZvbiBGaWxlcyBhblxuXAorZWluIEdlYmlldCBoYW5kZWx0KS5cblwKK1xuXAorISEgRGFzIEhhdXMgd2lyZCBhdWYgamVkZW4gRmFsbCBuYWNoIEVuZGUgZGVyIEhhdXNzcGVycmUgYWJnZXJpc3NlbiAhIVxuXAorXG5cCisgIFdhcmdvbi5cbiIpOworCisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3Rvb2xzL2xpc3RlLmMgYi9kL3NlaGVyL2hhZXVzZXIvdG9vbHMvbGlzdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMmIzOWEyCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3Rvb2xzL2xpc3RlLmMKQEAgLTAsMCArMSwyNSBAQAorI2luY2x1ZGUgIi4uL2hhdXMuaCIKKyNpbmNsdWRlIDx3aXpsZXZlbHMuaD4KKworbWFwcGluZyBtZWdhbWFwOworCitjcmVhdGUoKSB7CisgIHNldGV1aWQoZ2V0dWlkKHRoaXNfb2JqZWN0KCkpKTsKKyAgcmVzdG9yZV9vYmplY3QoU0FWRUZJTEUpOworICBkb19kdW1wKCk7Cit9CisKK2RvX2R1bXAoKQoreworICBzdHJpbmcgKm93LCB0eXA7CisgIGludCBpLCByLCByMjsKKyAgb3cgPSBtX2luZGljZXMobWVnYW1hcCk7CisgIG93ID0gc29ydF9hcnJheShvdywjJzwpOworICBpID0gc2l6ZW9mKG93KS0xOworICBmb3Iocj0wLCByMj0wOyBpPj0wOyBpLS0pIHsKKyAgICByID0gbWVnYW1hcFtvd1tpXSxIUF9ST09NU107CisgICAgaWYgKElTX0xFQVJORVIob3dbaV0pKSBwcmludGYoIiUxM3MgJWQgTUFHSUVSKCVkKVxuIiwgb3dbaV0scixxdWVyeV93aXpfbGV2ZWwob3dbaV0pKTsKKyAgICBlbHNlIGlmICghSVNfU0VFUihvd1tpXSkpIHByaW50ZigiJTEzcyAlZCBLRUlOIFNFSEVSIE1FSFJcbiIsIG93W2ldLCByKTsKKyAgfQorICBkZXN0cnVjdCh0aGlzX29iamVjdCgpKTsKK30KZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci90cmFnaGF1cy5jIGIvZC9zZWhlci9oYWV1c2VyL3RyYWdoYXVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5ZmIzNgotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci90cmFnaGF1cy5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogdHJhZ2hhdXMuYyAtLSBXaWUgc3Vlc3MhIDspCisgKgorICogKGMpIDE5OTQgQm9pbmdATW9yZ2VuR3JhdWVuCisgKiBCZS0gdW5kIHVlYmVyYXJiZWl0ZXQgdm9uIEpvZiB1bmQgV2FyZ29uLgorICoKKyAqIEhJTldFSVM6IFVtIGVpbmVuIEJhdXBsYXR6IHp1IGtlbm56ZWljaG5lbiwgbXVzcyBkb3J0IGRpZQorICogIFByb3BlcnRpZSAiaGF1c19lcmxhdWJ0IiBhdWYgMSBnZXNldHp0IHdlcmRlbiEKKyAqCisgKiAxNy4xMS4yMDAzIEZlaWdsaW5nIC0gQnVnZml4OiBGZWhsZW5kZW4gUmVnaW9uc21hZ2llciBhYmdlZmFuZ2VuCisgKgorICogJERhdGU6IDE5OTQvMTAvMjQgMDg6MjU6MTggJAorICogJFJldmlzaW9uOiAxLjUgJAorICogJExvZzogdHJhZ2hhdXMuYyx2ICQKKyAqIFJldmlzaW9uIDEuNSAgMTk5NC8xMC8yNCAgMDg6MjU6MTggIFdhcmdvbgorICogTWFjaHQgamV0enQgR2VicmF1Y2ggdm9uIFZFUldBTFRFUi0+VW5iZWJhdWJhcigpIHVuZCBkZW0gZ2VhZW5kZXJ0ZW4KKyAqIFZFUldBTFRFUi0+TmV1ZXNIYXVzKCkuCisgKgorICogUmV2aXNpb24gMS40ICAxOTk0LzEwLzE5ICAxMDowMzoyOSAgV2FyZ29uCisgKiBIaW53ZWlzIGVpbmdlYmF1dCAocy5vLikKKyAqIEJlc2NocmFlbmt1bmcgYXVmIGVpbiBTZWhlcmhhdXMgcHJvIFJhdW0gcmF1c2dlbm9tbWVuLgorICoKKyAqIFJldmlzaW9uIDEuMyAgMTk5NC8xMC8wOSAgMjA6MTc6MDMgIFdhcmdvbgorICogSW4gYmxhcygpIGhhdXMtPlNhdmUoKSBlaW5nZWZ1ZWd0LgorICoKKyAqIFJldmlzaW9uIDEuMiAgMTk5NC8xMC8wNyAgMjI6MTM6MTcgIFdhcmdvbgorICogRXR3YXMgYXVmZ2VyYWV1bXQuCisgKiBUZXh0IGJlaW0gR2llc3NlbiBnZWFlbmRlcnQuCisgKiBGYWxscyBpbiBkZW0gUmF1bSBzY2hvbiBlaW4gU2VoZXJoYXVzIHN0ZWh0LCBrYW5uIGtlaW4gd2VpdGVyZXMgbWVocgorICogYXVmZ2VzdGVsbHQgd2VyZGVuLgorICoKKyAqIFJldmlzaW9uIDEuMSAgMTk5NC8xMC8wNyAgMTQ6NDA6NTQgIFdhcmdvbgorICogSW5pdGlhbCByZXZpc2lvbgorICoKKyAqLworI2luY2x1ZGUgPHByb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKyNpbmNsdWRlICJoYXVzLmgiCisKK2luaGVyaXQgInN0ZC90aGluZyI7CisKK3N0YXRpYyBzdHJpbmcgb3duZXI7CisKK3ZvaWQgY3JlYXRlKCkKK3sKKyAgIGlmICghY2xvbmVwKHRoaXNfb2JqZWN0KCkpKSByZXR1cm47CisgICA6OmNyZWF0ZSgpOworICAgb3duZXIgPSBnZXR1aWQodGhpc19wbGF5ZXIoKSk7CisgICBTZXRQcm9wKFBfU0hPUlQsICJFaW4gdHJhZ2JhcmVzIEluc3RhbnRoYXVzIik7CisgICBTZXRQcm9wKFBfTE9ORywgIkRpZXMgaXN0IERlaW4gSGF1cy4gRHUga2FubnN0IGVzIGFic3RlbGxlbiB1bmQgZ2llc3NlbiwgZGFubiB3aXJkIGRhcmF1cyBlaW5cblwKK3JpY2h0aWdlcyBTZWhlcmhhdXMsIGluIGRhcyBEdSBzb2ZvcnQgZWluemllaGVuIGthbm5zdC4gRXMgaXN0IGFsbGVyZGluZ3NcblwKK25vZXRpZywgZGFzcyBkZXIgTWFnaWVyLCBkZXIgZGVuIFJhdW0gZXJzY2hhZmZlbiBoYXQsIGluIGRlbSBEdSBlcyBhYnN0ZWxsZW5cblwKK21vZWNodGVzdCwgZGVtIEJhdSBlaW5lcyBTZWhlcmhhdXNlcyBpbiBkaWVzZW0gUmF1bSB6dXN0aW1tdC5cbiIpOworICAgU2V0UHJvcChQX05BTUUsICJIYXVzIik7CisgICBTZXRQcm9wKFBfTkVWRVJEUk9QLCAxKTsKKyAgIFNldFByb3AoUF9HRU5ERVIsIDApOworICAgQWRkSWQoKHsiaGF1cyIsICJzZWhlXHJoYXVzIn0pKTsKKyAgIFNldFByb3AoUF9WQUxVRSwgMCk7CisgICBTZXRQcm9wKFBfV0VJR0hULCAwKTsKKyAgIEFkZENtZCgoeyJnaWVzIiwgImdpZXNzIiwgImdpZXNzZSJ9KSwgImJsYXMiKTsKK30KKworc3RyaW5nIFNldE93bmVyKHN0cmluZyBvKQoreworICAgcmV0dXJuIG93bmVyID0gbzsKK30KKworc3RyaW5nIFF1ZXJ5T3duZXIoKQoreworICByZXR1cm4gb3duZXI7Cit9CisKK3N0cmluZyBnZXRfbWFnKG1peGVkIGRlc3QpCit7CisgIG1hcHBpbmcgcmVnOworICBzdHJpbmcgKm1hZzsKKyAgc3RyaW5nIHJldDsKKyAgaW50IGksIGo7CisKKyAgY2F0Y2gocmVnID0gIi9vYmovbWxpc3RlIi0+UXVlcnlQcm9wKCJNYWdpZXJsaXN0ZSIpKTsKKworICBpZiAobWFwcGluZ3AocmVnKSAmJiBtZW1iZXIocmVnLCBnZXR1aWQoZGVzdCkpKQorICAgIG1hZyA9IHJlZ1tnZXR1aWQoZGVzdCldOworICBlbHNlCisgICAgcmV0dXJuIGNhcGl0YWxpemUoZ2V0dWlkKGRlc3QpKTsKKworCisgIGlmICghc2l6ZW9mKG1hZykpIAorICAgIHJldHVybiBjYXBpdGFsaXplKGdldHVpZChkZXN0KSk7IC8vSGluenVnZWZ1ZWd0IEZlaWdsaW5nCisgIAorICBpZiAoKGk9c2l6ZW9mKG1hZykpID09IDEpCisgICAgcmV0dXJuIGNhcGl0YWxpemUobWFnWzBdKTsKKyAgZWxzZSB7CisgICAgcmV0ID0gY2FwaXRhbGl6ZShtYWdbMF0pOworICAgIGogPSAxOworICAgIHdoaWxlIChqIDwgaS0xKSB7CisgICAgICByZXQgKz0gIiwgIitjYXBpdGFsaXplKG1hZ1tqXSk7CisgICAgICBqKys7CisgICAgfQorICAgIHJldCArPSAiIHVuZCAiK2NhcGl0YWxpemUobWFnWzwxXSk7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworaW50IG1vdmUobWl4ZWQgZGVzdCwgaW50IG1ldGhvZCkKK3sKKyAgaW50IG5peDsKKworICBpZiAoKG1ldGhvZCAmIE1fR0lWRSkgPT0gTV9HSVZFKQorICB7CisgICAgd3JpdGUoIkRlaW4gc2F1ZXIgdmVyZGllbnRlcyBTZWhlcmhhdXMgd2VnZ2ViZW4/IE5JRU1BTFMhXG4iKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoKG1ldGhvZCAmIE1fUFVUKSA9PSBNX1BVVCkKKyAgeworICAgIGlmICgobml4ID0gVkVSV0FMVEVSLT5VbmJlYmF1YmFyKGRlc3QpKSkKKyAgICB7CisgICAgICB3cml0ZSggKHsgIkhpZXIgaXN0IGRhcyBCYXVlbiB2b24gSGFldXNlcm4gdW50ZXJzYWd0IVxuIiwKKwkJIkR1IGthbm5zdCBkYXMgSGF1cyBuaWNodCBpbiBnZXNjaGxvc3NlbmVuIFJhZXVtZW4gYWJzdGVsbGVuLlxuIiwKKwkJIkRpZXNlciBQbGF0eiBpc3QgbmljaHQgYWxzIEJhdXBsYXR6IGdla2VubnplaWNobmV0LCBEdSBzb2xsdGVzdCBtYWxcbm1pdCBkZW0gdmVyYW50d29ydGxpY2hlbiBNYWdpZXIgcmVkZW4uIERpZSBadXN0YWVuZGlna2VpdCBmdWVyIGRpZXNlbiBPcnRcbmxpZWd0IGJlaSAiK2dldF9tYWcoZGVzdCkrIi5cbiIKKwkgICAgIH0pW25peC0xXSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDo6bW92ZShkZXN0LCBtZXRob2QpOworICB9CisgIGlmICgobWV0aG9kICYgTV9HRVQpID09IE1fR0VUKQorICB7CisgICAgaWYgKGdldHVpZCh0aGlzX3BsYXllcigpKSE9b3duZXIpCisgICAgeworICAgICAgd3JpdGUoIkRpZXMgaXN0IG5pY2h0IERlaW4gSGF1cy5cbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiA6Om1vdmUoZGVzdCwgbWV0aG9kKTsKK30KKworaW50IGJsYXMoc3RyaW5nIHN0cikKK3sKKyAgb2JqZWN0IGhhdXM7CisKKyAgbm90aWZ5X2ZhaWwoIldhcyBtb2VjaHRlc3QgRHUgZ2llc3Nlbj9cbiIpOworICBpZiAoIXN0ciB8fCBzdHIhPSJoYXVzIikKKyAgICByZXR1cm4gMDsKKyAgaWYgKGxpdmluZyhlbnZpcm9ubWVudCgpKSkKKyAgeworICAgIHdyaXRlKCJEdSBzb2xsdGVzdCBkYXMgSGF1cyB2aWVsbGVpY2h0IGVyc3QgbWFsIGFic3RlbGxlbi5cbiIpOworICAgIHJldHVybiAxOworICB9CisgIGlmIChnZXR1aWQodGhpc19wbGF5ZXIoKSkhPW93bmVyKQorICB7CisgICAgd3JpdGUoIk1hY2hzdCBEdSBpbW1lciBmcmVtZGUgSGFldXNlciBuYXNzP1xuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgaWYgKCFlbnZpcm9ubWVudCgpLT5RdWVyeVByb3AoUF9IQVVTX0VSTEFVQlQpKQorICB7CisgICAgd3JpdGUoIkRpZXNlciBQbGF0eiBpc3QgbmljaHQgYWxzIEJhdXBsYXR6IGdla2VubnplaWNobmV0LCBEdSBzb2xsdGVzdCBtYWxcblwKK21pdCBkZW0gZW50c3ByZWNoZW5kZW4gTWFnaWVyIHJlZGVuLlxuRnJhZyBtYWwgIitjYXBpdGFsaXplKGdldHVpZChlbnZpcm9ubWVudCgpKSkrIi5cbiIpOworICAgIHJldHVybiAwOworICB9CisgIHdyaXRlKCAiVm9sbGVyIFZvcmZyZXVkZSBncmVpZnN0IER1IG5hY2ggRGVpbmVyIEdpZXNza2FubmUgdW5kIGJlZ2lubnN0LCBEZWluIG11ZWgtXG5cCitzYW0gZXJzcGFydGVzIEluc3RhbnRoYXVzIHp1IGJlZ2llc3Nlbi4gTW9tZW50Li4uIEdpZXNza2FubmU/IFJlaWNobGljaCB2ZXItXG5cCitkdXR6dCBzY2hhdXN0IER1IGF1ZiBkaWUga2xlaW5lIGdydWVuZSBLYW5uZSBpbiBEZWluZW4gSGFlbmRlbi4gV28gbWFnIHNpZVxuXAorbnVyIGhlcmdla29tbWVuIHNlaW4/IERvY2gga2F1bSBlcnJlaWNoZW4gZGllIGVyc3RlbiBUcm9wZmVuIGRhcyBJbnN0YW50aGF1cyxcblwKK3dpcmQgRGVpbmUgQXVmbWVya3NhbWtlaXQgYXVjaCBzY2hvbiB3aWVkZXIgdm9uIGRlciBLYW5uZSBhYmdlbGVua3Q6XG5cCitEYXMgVHJvY2tlbmhhdXMgYmVnaW5udCB6dSBzY2hhZXVtZW4gdW5kIHNpY2ggdWViZXIgZGVuIEJvZGVuIGF1c3p1YnJlaXRlbi5cblwKK0luIGRlbSBTY2hhdW0gZW50c3RlaGVuIHVuZCB2ZXJnZWhlbiBXYWVuZGUsIERlY2tlbiB1bmQgRmVuc3RlciwgYWxzIG9iIHNpZVxuXAorc2ljaCBub2NoIG5pY2h0IHJlY2h0IGVudHNjaGVpZGVuIGtvZW5udGVuLCB3aWUgc2ljaCBzaWNoIHp1IGVpbmVtIEdhbnplbiB6dS1cblwKK3NhbW1lbmZ1ZWdlbiBzb2xsZW4uXG5cCitEYW5uIGVyaGVidCBzaWNoIGRvcnQsIHdvIER1IGRhcyBUcm9ja2VuaGF1cyBhYmdlc3RlbGx0IGhhdHRlc3QsIGVpbmUgZ3Jvc3NlLFxuXAorc2NoYXVtaWdlIEJsYXNlISBTaWUgd2lyZCBncm9lc3NlciB1bmQgZ3JvZXNzZXIsIGJpcyBzaWUgRGljaCBzY2hsaWVzc2xpY2hcblwKK3N0cmVpZnQuIERhYmVpIHBsYXR6dCBzaWUgbWl0IGVpbmVtIGxlaXNlbiAqUExPUFAqIC0gdW5kIGVzIGJsZWlidCBlaW4gYmUtXG5cCit6dWdzZmVydGlnZXMgU2VoZXJoYXVzIHp1cnVlY2shXG5cCitEdSB3aXJmc3Qgbm9jaCBlaW5tYWwgZWluZW4gdmVyc3RvaGxlbmVuIEJsaWNrIGF1ZiBkaWUgR2llc3NrYW5uZSwgbXVzc3QgYWJlclxuXAorZmVzdHN0ZWxsZW4sIGRhc3Mgc2llIHZlcnNjaHd1bmRlbiBpc3QgdW5kIGF1Y2ggdmVyc2Nod3VuZGVuIGJsZWlidC5cbiIgKTsKKworICBzYXkoY2FwaXRhbGl6ZSgoc3RyaW5nKSh0aGlzX3BsYXllcigpLT5uYW1lKCkpKSsiIHZlcndhbmRlbHQgbWl0IGVpbmVtIFRyb3BmZW4gV2Fzc2VyICIrCisgICAgICB0aGlzX3BsYXllcigpLT5RdWVyeVBvc3NQcm9ub3VuKHRoaXNfb2JqZWN0KCksIFdFTikgKyAiIEhhdXMuXG4iKTsKKworICBWRVJXQUxURVItPk5ldWVzSGF1cyhvd25lciwgZW52aXJvbm1lbnQodGhpc19vYmplY3QoKSkpOworICByZW1vdmUoKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJpbmcgX3F1ZXJ5X2F1dG9sb2Fkb2JqKCkKK3sKKyAgcmV0dXJuIG93bmVyOworfQpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3RydWhlLmMgYi9kL3NlaGVyL2hhZXVzZXIvdHJ1aGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWFiOGFkCi0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3RydWhlLmMKQEAgLTAsMCArMSwzNjUgQEAKKyNpbmNsdWRlICJoYXVzLmgiCisjaW5jbHVkZSA8cHJvcGVydGllcy5oPgorI2luY2x1ZGUgPG1vdmluZy5oPgorI2luY2x1ZGUgPHdpemxldmVscy5oPgorCitpbmhlcml0ICIvZC93dWVzdGUvZHVyaWFuL2JlaGFlbHRlciI7Citpbmhlcml0ICIvcC9zZXJ2aWNlL3dhcmdvbi9tYXRfZWQiOworaW5oZXJpdCAiL21haWwvbmVkaXQiOworCitzdGF0aWMgc3RyaW5nIG93bmVyOworCit2b2lkIGNyZWF0ZSgpCit7CisgIGlmICghY2xvbmVwKHRoaXNfb2JqZWN0KCkpKSByZXR1cm47CisKKyAgOjpjcmVhdGUoKTsKKworICBTZXQoUF9OQU1FLCBTQVZFLCBGX01PREVfQVMpOworICBTZXQoUF9TSE9SVCwgU0FWRSwgRl9NT0RFX0FTKTsKKyAgU2V0KFBfTE9ORywgU0FWRSwgRl9NT0RFX0FTKTsKKyAgU2V0KFBfR0VOREVSLCBTQVZFLCBGX01PREVfQVMpOworICBTZXQoUF9JRFMsIFNBVkUsIEZfTU9ERV9BUyk7CisgIFNldChQX0lOVklTLCBTQVZFLCBGX01PREVfQVMpOworICBTZXQoUF9OQU1FX0FESiwgU0FWRSwgRl9NT0RFX0FTKTsKKyAgU2V0KFBfTUFURVJJQUwsIFNBVkUsIEZfTU9ERV9BUyk7CisgIFNldChIX0RPT1JMU1RBVCwgU0FWRSwgRl9NT0RFX0FTKTsKKworICBTZXRQcm9wKCBQX05BTUUsICJUcnVoZSIgKTsKKyAgU2V0UHJvcCggUF9TSE9SVCwgIkVpbmUgVHJ1aGUiICk7CisgIFNldFByb3AoIFBfTE9ORywKKyAgICAgIkVpbmUgc3RhYmlsZSBIb2x6dHJ1aGUgbWl0IGVpbmVtIFNpY2hlcmhlaXRzc2NobG9zcy4gTnVyIGF1c2dld2FlaGx0ZVxuIgorICAgICsiUGVyc29uZW4gZHVlcmZlbiBkaWUgVHJ1aGUgb2VmZm5lbiB1bmQgU2FjaGVuIGluIGlociBsYWdlcm4gb2RlciBhdXNcbiIKKyAgICArImlociBuZWhtZW4uXG4iICk7CisgIFNldFByb3AoIFBfR0VOREVSLCBGRU1BTEUgKTsKKyAgU2V0UHJvcCggUF9OT0dFVCwgMSApOworICBTZXRQcm9wKCBQX0lEUywgKHsgInRydWhlIiwiaG9senRydWhlIiwgVFJVSEV9KSApOworICBTZXRQcm9wKCBQX01BVEVSSUFMLCAoWyBNQVRfTUlTQ19XT09EIDogMTAwIF0pICk7CisgIFNldFByb3AoIEhfRE9PUkxTVEFULCAoeyAiZ2VzY2hsb3NzZW4iLCAiZ2VvZWZmbmV0In0pICk7CisKKyAgQWRkQ21kKCAoeyAic2NoaWViIiwic2NoaWViZSJ9KSwgInNjaGllYmVuIiApOworICBBZGRDbWQoICh7ICJiZXNjaHJlaWIiLCAiYmVzY2hyZWliZSIgfSksICJiZXNjaHJlaWJlbiIgKTsKKyAgQWRkQ21kKCAoeyAiYWVuZGVyIiwgImFlbmRlcmUiIH0pLCAiYWVuZGVybiIgKTsKK30KKworbWl4ZWQKK19zZXRfb3duZXIoc3RyaW5nIG93KQoreworICBzdHJpbmcgKm5hLCAqYTsKKyAgaW50IGk7CisKKyAgaWYgKG93ICYmIHN0cmluZ3Aob3cpKQorICAgIHJlc3RvcmVfb2JqZWN0KEhBVVNTQVZFUEFUSCtvdysidHJ1aGUiKTsKKworICBpZiAoKG5hID0gUXVlcnlQcm9wKFBfTkFNRV9BREopKSAmJiAoaT1zaXplb2YobmEpKSkgeworICAgIGZvciAoYSA9ICh7IH0pLCBpLT0xOyBpPj0wOyBpLS0pCisgICAgICBhICs9ICh7IERlY2xBZGoobmFbaV0sIFdFUilbMC4uPDJdLCBEZWNsQWRqKG5hW2ldLCBXRU0pWzAuLjwyXSwgRGVjbEFkaihuYVtpXSxXRU4pWzAuLjwyXSB9KTsKKworICAgIGEgPSBtX2luZGljZXMobWttYXBwaW5nKGEpKTsKKyAgICBpZiAoc2l6ZW9mKGEpKQorICAgICAgQWRkQWRqZWN0aXZlKGEpOworICB9CisKKyAgU2V0WnUoKTsKKyAgcmV0dXJuIG93bmVyPW93OworfQorCitzdHJpbmcKK3Nob3J0KCkKK3sKKyAgaW50IG9wZW47CisgIHN0cmluZyBzaCwgKnN0YXQ7CisKKyAgb3BlbiA9IChRdWVyeVByb3AoUF9DTlRfU1RBVFVTKSA9PSBDTlRfU1RBVFVTX09QRU4pOworICBzaCA9IFF1ZXJ5UHJvcChQX1NIT1JUKTsKKyAgc3RhdCA9IFF1ZXJ5UHJvcChIX0RPT1JMU1RBVCk7CisgIGlmICghc3RhdCkKKyAgICBzdGF0ID0gKHsgIiIsICIifSk7CisgIGVsc2UgaWYgKHN0cnN0cihzaCwgIiVzIikgPT0gLTEpCisgICAgc2ggKz0gIiAoJXMpIjsKKyAgaWYoUXVlcnlQcm9wKFBfSU5WSVMpKSByZXR1cm4gIiI7CisgIHJldHVybiBzcHJpbnRmKHNoLCBzdGF0W29mZmVuXSkrIi5cbiI7Cit9CisKK29lZmZuZShzdHJpbmcgc3RyKQoreworICBvYmplY3QgZW52OworCisgIG5vdGlmeV9mYWlsKCJXQVMgbW9lY2h0ZXN0IER1IG9lZmZuZW4/XG4iKTsKKworICAvLyBiaW4gaWNoIGdlbWVpbnQ/CisgIGlmICghc3RyIHx8IHByZXNlbnQoc3RyLCBlbnZpcm9ubWVudCgpKSAhPSB0aGlzX29iamVjdCgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoZW52PWVudmlyb25tZW50KCkpICYmIGVudi0+aWQoInNlaGVccmhhdXMiKSkgeworICAgIGlmICghZW52LT5hbGxvd2VkX2NoZWNrKHRoaXNfcGxheWVyKCkpKSB7CisgICAgICB3cml0ZSgiRHUgZGFyZnN0ICIrbmFtZShXRU4pKyIgbmljaHQgb2VmZm5lbiFcbiIgKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gOjpvZWZmbmUoc3RyKTsKK30KKworaW50IE1heUFkZFdlaWdodChpbnQgdykKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NjaGllYmVuKHN0cmluZyByaWNodHVuZykKK3sKKyAgc3RyaW5nICphdXM7CisgIG1hcHBpbmcgZXhpdHM7CisKKyAgaWYgKCFlbnZpcm9ubWVudCgpIHx8ICghZW52aXJvbm1lbnQoKS0+aWQoInNlaGVccmhhdXMiKSkgfHwKKyAgICAgICFlbnZpcm9ubWVudCgpLT50cF9vd25lcl9jaGVjaygpKQorICAgIHJldHVybiAwOworCisgIG5vdGlmeV9mYWlsKCAiU3ludGF4OiBzY2hpZWJlIDx0cnVoZT4gbmFjaCA8cmljaHR1bmc+XG4iKTsKKworICBpZiAoIXJpY2h0dW5nIHx8IHJpY2h0dW5nID09ICIiKQorICAgIHJldHVybiAwOworCisgIGF1cyA9IG9sZF9leHBsb2RlKHJpY2h0dW5nLCAiICIpOworICByaWNodHVuZyA9IGF1c1s8MV07CisgIGlmIChzaXplb2YoYXVzKSA8IDMgfHwgIWlkKGltcGxvZGUoYXVzWzAuLjwzXSwiICIpKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAobWVtYmVyKGF1cyA9IG1faW5kaWNlcyhleGl0cyA9IGVudmlyb25tZW50KCktPlF1ZXJ5UHJvcChQX0VYSVRTKSkscmljaHR1bmcpPT0tMSkKKyAgICB3cml0ZSggIkR1IGthbm5zdCAiK25hbWUoV0VOLDEpKyIgbmljaHQgbmFjaCAnIityaWNodHVuZysiJyBzY2hpZWJlbiFcbiIpOworICBlbHNlIGlmICghZXhpdHNbcmljaHR1bmddLT50cF9vd25lcl9jaGVjaygpKQorICAgIHdyaXRlKCAiRHUga2FubnN0ICIrbmFtZShXRU4sMSkrIiBuaWNodCBhdXMgRGVpbmVtIEhhdXMgaGluYXVzc2NoaWViZW4hXG4iKTsKKyAgZWxzZSB7CisgICAgd3JpdGUoICJEdSBzY2hpZWJzdCAiK25hbWUoV0VOLDEpKyIgaW4gZWluZW4gYW5kZXJlbiBSYXVtLiBEYW5uIGtlaHJzdFxuIgorCSAgKyJEdSB3aWVkZXIgenVydWVjay5cbiIpOworICAgIHNheShjYXBpdGFsaXplKHRoaXNfcGxheWVyKCktPm5hbWUoV0VSKSkrIiBzY2hpZWJ0ICIrbmFtZShXRU4pKyIgaW4gZWluZW4gYW5kZXJlblxuIgorCSsiUmF1bSwga2VocnQgYWJlciBzZWxiZXIgd2llZGVyLlxuIik7CisgICAgZW52aXJvbm1lbnQoKS0+U2V0KEhfQ0hFU1QsMCk7CisgICAgZW52aXJvbm1lbnQoKS0+U2F2ZSgpOworICAgIG1vdmUoZXhpdHNbcmljaHR1bmddLCBNX05PQ0hFQ0spOworICAgIGVudmlyb25tZW50KCktPlNldChIX0NIRVNULDEpOworICAgIGVudmlyb25tZW50KCktPlNhdmUoKTsKKyAgfQorICByZXR1cm4gMTsKK30KKworcHJpdmF0ZSBzdHJpbmcgKmJyayhzdHJpbmcgc3RyKQoreworICBpbnQgaTsKKyAgc3RyaW5nICp0MSwgKnQyOworCisgIHQxID0gcmVnZXhwbG9kZShzdHIsICIsICoiKTsKKyAgZm9yICh0MiA9ICh7fSksIGk9c2l6ZW9mKHQxKS0xOyBpPj0wOyBpLT0yKQorICAgIHQyID0gKHt0MVtpXX0pICsgdDI7CisKKyAgcmV0dXJuIHQyOworfQorCitzdGF0aWMgdm9pZCBnZXRTaG9ydCgpOworCitzdGF0aWMgaW50IGJlc2NocmVpYmVuKHN0cmluZyBzdHIpCit7CisgIHN0cmluZyAqeDsKKworICBpZiAoIXN0ciB8fCBnZXR1aWQodGhpc19wbGF5ZXIoKSkgIT0gb3duZXIpCisgICAgcmV0dXJuIDA7CisKKyAgeCA9IG9sZF9leHBsb2RlKHN0ciwgIiAiKTsKKworICBpZiAoeFs8MV0gPT0gInN0YXR1cyIgJiYgIWlkKGltcGxvZGUoeFswLi48Ml0sIiAiKSkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UgaWYgKCFpZChzdHIpICYmIChzdHIgIT0gInRydWhlIikpCisgICAgcmV0dXJuIDA7CisKKyAgd3JpdGUoICJCZXNjaHJlaWJ1bmcgIituYW1lKFdFU1NFTiwxKSsiXG4iCisJKyJXZW5uIGRpZSBWb3JnYWJlbiBuaWNodCBnZWFlbmRlcnQgd2VyZGVuIHNvbGxlbiwgZWluZmFjaCB3ZWl0ZXJcbiIKKwkrIm1pdCA8UkVUVVJOPi5cblxuIik7CisgIGdldFNob3J0KCk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBnZXRTaG9ydCgpCit7CisgIHdyaXRlKCJHZXNjaGxlY2h0IChtLCB3LCBzKTogWyIKKwkrKHsgInMiLCJtIiwidyIgfSlbUXVlcnlQcm9wKFBfR0VOREVSKV0rIl1cbl0iICk7CisgIGlucHV0X3RvKCJnb3RHZW5kZXIiKTsKK30KKworc3RhdGljIHZvaWQgZ290R2VuZGVyKHN0cmluZyBzdHIpCit7CisgIGludCBnZW47CisgIG1peGVkIG5hbWU7CisKKyAgaWYgKCFzdHIgfHwgc3RyID09ICIiKQorICAgIHdyaXRlKCJHZXNjaGxlY2h0IG5pY2h0IGdlYWVuZGVydC5cbiIpOworICBlbHNlIGlmICgoZ2VuID0gbWVtYmVyKCh7J3MnLCdtJywndyd9KSxzdHJbMF0pKSA9PSAtMSkgeworICAgIHdyaXRlKCAiQml0dGUgbnVyICdtJywgJ3cnIG9kZXIgJ3MnIGVpbmdlYmVuIVxuR2VzY2hsZWNodDpcbl0iKTsKKyAgICBpbnB1dF90bygiZ290R2VuZGVyIik7CisgICAgcmV0dXJuOworICB9CisgIGVsc2UgeworICAgIFNldFByb3AoUF9HRU5ERVIsIGdlbik7CisgICAgd3JpdGUoICJEYXMgR2VzY2hsZWNodCBpc3QgamV0enQgIitRdWVyeUdlbmRlclN0cmluZygpKyIuXG4iKTsKKyAgfQorCisgIG5hbWUgPSBRdWVyeVByb3AoUF9OQU1FKTsKKyAgd3JpdGUoIk51biBtdXNzdCBEdSBkZW4gTmFtZW4gZWluZ2ViZW4uIFNvbGx0ZSBkZXIgTmFtZSB1bnJlZ2VsbWFlc3NpZyBkZWtsaW5pZXJ0XG4iCisgICAgICAgKyJ3ZXJkZW4sIG11c3N0IER1IGRlbiBOYW1lbiBpbiBhbGxlbiB2aWVyIEZhZWxsZW4gaW4gZGVyIFJlaWhlbmZvbGdlIE5vbWktXG4iCisgICAgICAgKyJuYXRpdiwgR2VuaXRpdiwgRGF0aXYsIEFra3VzYXRpdiB1bmQgZHVyY2ggS29tbWF0YSBnZXRyZW5udCBlaW5nZWJlbi5cbiIKKyAgICAgICArIk5hbWU6IFsiKyhwb2ludGVycChuYW1lKSA/IGltcGxvZGUobmFtZSwgIiwgIikgOiBuYW1lKSsgIl1cbl0iKTsKKyAgaW5wdXRfdG8oImdvdE5hbWUiKTsKK30KKworc3RhdGljIHZvaWQgZ290TmFtZShzdHJpbmcgc3RyKQoreworICBzdHJpbmcgKm47CisKKyAgaWYgKCFzdHIgfHwgbWVtYmVyKCh7ICIiLCAiLiIsICIqKiIsICJ+cSJ9KSwgc3RyKSA+PSAwKQorICAgIHdyaXRlKCJOYW1lIHd1cmRlIG5pY2h0IGdlYWVuZGVydC5cbiIpOworICBlbHNlIHsKKyAgICBuID0gYnJrKHN0cik7CisKKyAgICBpZiAoc2l6ZW9mKG4pID09IDEpCisgICAgICBTZXRQcm9wKFBfTkFNRSwgblswXSk7CisgICAgZWxzZSB7CisgICAgICBpZiAoc2l6ZW9mKG4pID4gNCkKKwluID0gblswLi4zXTsKKyAgICAgIGVsc2UKKwl3aGlsZSAoc2l6ZW9mKG4pICE9IDQpCisJICBuID0gbiArICh7IG5bMF0gfSk7CisgICAgICBTZXRQcm9wKFBfTkFNRSxuKTsKKyAgICB9CisgICAgcHJpbnRmKCJEZXIgTmFtZSBpc3QgamV0enQgJyVzJ1xuIiwgaW1wbG9kZShuLCAiLCAiKSk7CisgIH0KKyAgd3JpdGUoIkR1IGthbm5zdCBqZXR6dCBub2NoIE5hbWVuc2FkamVrdGl2ZSBhbmdlYmVuLiBIaWVyIGRhcmZzdCBEdSBudXIgZGVuIFdvcnQtXG4iCisgICAgICAgKyJzdGFtbSBhbmdlYmVuLCBkYSBkaWUgQWRqZWt0aXZlIGF1dG9tYXRpc2NoIGRla2xpbmllcnQgd2VyZGVuIChhbHNvIGZ1ZXJcbiIKKyAgICAgICArImVpbmUgJ2FsdGUgVHJ1aGUnIG11ZXNzdGVzdCBEdSAnYWx0JyBhbmdlYmVuKS5cbiIKKyAgICAgICArIkR1IGthbm5zdCBhdWNoIG1laHJlcmUgQWRqZWt0aXZlLCBkdXJjaCBLb21tYXRhIGdldHJlbm50LCBhbmdlYmVuLlxuIgorICAgICAgICsiVW0gYWxsZSBOYW1lbnNhZGpla3RpdmUgenUgbG9lc2NoZW4sIGdpYiBiaXR0ZSAnbml4JyBlaW4uXG4iCisgICAgICAgKyJOYW1lbnNhZGpla3RpdmU6IFsiK2ltcGxvZGUoUXVlcnlQcm9wKFBfTkFNRV9BREopLCIsICIpKyJdXG4iKTsKKyAgaW5wdXRfdG8oImdvdEFkaiIpOworfQorCitzdGF0aWMgdm9pZCBnb3RBZGooc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nICpuOworCisgIGlmICghc3RyIHx8IG1lbWJlcigoeyAiIiwgIi4iLCAiKioiLCAifnEifSksIHN0cikgPj0gMCkKKyAgICB3cml0ZSgiQWRqZWt0aXZlIG5pY2h0IGdlYWVuZGVydC5cbiIpOworICBlbHNlIHsKKyAgICBuID0gYnJrKHN0cik7CisKKyAgICBpZiAobWVtYmVyKG4sICJuaXgiKSA9PSAtMSkgeworICAgICAgU2V0UHJvcChQX05BTUVfQURKLCBuKTsKKyAgICAgIHByaW50ZigiTmFtZW5zYWRqZWt0aXZlIGxhdXRlbiAlcy5cbiIsIGltcGxvZGUobiwiLCAiKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgU2V0UHJvcChQX05BTUVfQURKLCAoe30pICk7CisgICAgICB3cml0ZSgiTmFtZW5zYWRqZWt0aXZlIGdlbG9lc2NodC5cbiIpOworICAgIH0KKyAgfQorICBTZXRQcm9wKFBfU0hPUlQsIGNhcGl0YWxpemUobmFtZShXRVIpKSk7CisgIHdyaXRlKCAiRGllIEt1cnpiZXNjaHJlaWJ1bmcgbGF1dGV0IGRhbWl0OlxuIitzaG9ydCgpKTsKKyAgd3JpdGUoICJGYWxscyBkYXMgRXJnZWJuaXMgbmljaHQgRGVpbmVuIFZvcnN0ZWxsdW5nZW4gZW50c3ByaWNodCwgZ2VsYW5nc3QgRHVcbiIKKwkrIm1pdCAnbicgd2llZGVyIGluIGRpZSBHZXNjaGxlY2h0c2FiZnJhZ2UsIGFuc29uc3RlbiBnZWh0IGVzIGluIGRlclxuIgorCSsiQmVzY2hyZWlidW5zc2VxdWVueiB3ZWl0ZXIuXG4iCisJKyJTdGltbXQgZGllIEt1cnpiZXNjaHJlaWJ1bmcgc28/IChqL24pXG5dIik7CisgIGlucHV0X3RvKCJnb3RLdXJ6Iik7Cit9CisKK3N0YXRpYyB2b2lkIGdvdEt1cnooc3RyaW5nIHN0cikKK3sKKyAgc3RyaW5nIGFydCwgbmFtLCAqcDsKKyAgaW50IGdlbjsKKworICBpZiAoc3RyICYmIHNpemVvZihzdHIpICYmIHN0clswXSA9PSAnbicpIHsKKyAgICB3cml0ZSggIk5ldWVzIFNwaWVsLCBuZXVlcyBHbHVlY2suLi4gOylcbiIpOworICAgIGdldFNob3J0KCk7CisgICAgcmV0dXJuOworICB9CisgIHdyaXRlKCJcbklEcyAoZHVyY2ggS29tbWF0YSBnZXRyZW5udCk6XG5bIitpbXBsb2RlKFF1ZXJ5UHJvcChQX0lEUyktKHtUUlVIRX0pLCAiLCIpKyJdXG5dIik7CisgIGlucHV0X3RvKCJnb3RJRHMiKTsKK30KKworc3RhdGljIHZvaWQgZ290SURzKHN0cmluZyBzdHIpCit7CisgIGlmICghc3RyIHx8IG1lbWJlciggKHsgIiIsICIuIiwgIioqIiwgIn5xIiB9KSwgc3RyKSA+PSAwICkKKyAgICB3cml0ZSgiSURzIG5pY2h0IGdlYWVuZGVydC5cbiIpOworICBlbHNlIHsKKyAgICBzdHIgPSBpbXBsb2RlKG9sZF9leHBsb2RlKGxvd2VyX2Nhc2Uoc3RyKSwiICIpLSh7IiJ9KSwiICIpOworICAgIHN0ciA9IGltcGxvZGUob2xkX2V4cGxvZGUoc3RyLCIsICIpLCIsIik7CisgICAgU2V0UHJvcChQX0lEUywgb2xkX2V4cGxvZGUoc3RyLCAiLCIpKyh7VFJVSEV9KSk7CisgICAgd3JpdGUoIk9LLCBJRHMgbGF1dGVuICciK3N0cisiJ1xuIik7CisgIH0KKyAgd3JpdGUoIlxuQml0dGUgTGFuZ2Jlc2NocmVpYnVuZyBlaW5nZWJlbiAoQWJicnVjaCBtaXQgfnEsIEVuZGUgbWl0IC4gb2RlciAqKik6XG4iKTsKKyAgbmVkaXQoImdvdExhbmciKTsKK30KKworc3RhdGljIHZvaWQgZ290TWF0KG1hcHBpbmcgbWF0KTsKKworc3RhdGljIHZvaWQgZ290TGFuZyhzdHJpbmcgc3RyKQoreworICBpZiAoIXN0ciB8fCBzdHIgPT0gIiIpCisgICAgd3JpdGUoIkRpZSBMYW5nYmVzY2hyZWlidW5nIHd1cmRlIG5pY2h0IHZlcmFlbmRlcnQuXG4iKTsKKyAgZWxzZQorICAgIFNldFByb3AoUF9MT05HLGltcGxvZGUob2xkX2V4cGxvZGUoc3RyLCAiQEAiKSwiKioiKSk7CisKKyAgd3JpdGUoIlxuQml0dGUgZGFzIE1hdGVyaWFsICIrbmFtZShXRVNTRU4sMSkrIiBiZXN0aW1tZW46XG4iCisJIig8UkVUVVJOPiBmYWxscyBuaWNodHMgZ2VhZW5kZXJ0IHdlcmRlbiBzb2xsKVxuXG4iKTsKKworICBFZGl0TWF0ZXJpYWwoUXVlcnlQcm9wKFBfTUFURVJJQUwpLCAjJ2dvdE1hdCwgMCwgKHtNQVRHUk9VUF9HQVMsTUFUR1JPVVBfRVhQTE9TSVZFfSkpOworfQorCitzdGF0aWMgdm9pZCBnb3RNYXQobWFwcGluZyBtYXQpCit7CisgIGlmIChtYXBwaW5ncChtYXQpKSB7CisgICAgU2V0UHJvcChQX01BVEVSSUFMLCBtYXQpOworICAgIHdyaXRlKCJPSy5cbiIpOworICB9CisgIGVsc2UKKyAgICB3cml0ZSgiRGFzIE1hdGVyaWFsIHd1cmRlIG5pY2h0IHZlcmFlbmRlcnQuXG4iKTsKKworICBzYXZlX29iamVjdChIQVVTU0FWRVBBVEgrb3duZXIrInRydWhlIik7Cit9CisKK3N0YXRpYyBpbnQgYWVuZGVybihzdHJpbmcgc3RyKQoreworICBpZiAoZ2V0dWlkKHRoaXNfcGxheWVyKCkpIT1vd25lciB8fCAhaWQoc3RyKSkKKyAgICByZXR1cm4gMDsKKworICB3cml0ZSgiQml0dGUgTGFuZ2Jlc2NocmVpYnVuZyBhZW5kZXJuLlxuKEFiYnJ1Y2ggbWl0IH5xLCBFbmRlIG1pdCAuIG9kZXIgKiosIEhpbGZlIG1pdCB+aClcbiIpOworICBuZWRpdCgiZ290TGFuZyIsIFF1ZXJ5UHJvcChQX0xPTkcpKTsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgU2F2ZSgpCit7CisgIHNhdmVfb2JqZWN0KEhBVVNTQVZFUEFUSCtvd25lcisidHJ1aGUiKTsKK30KKworaW50IFNtYXJ0TG9nKHN0cmluZyBvZmlsZSwgc3RyaW5nIHR5cCwgc3RyaW5nIG1zZywgc3RyaW5nIGRhdGUpCit7CisgIG9iamVjdCBob21lOworICBzdHJpbmcgZm9vLCBiYXI7CisKKyAgd3JpdGVfZmlsZShSRVBGSUxFKG93bmVyKSwgc3ByaW50ZigiJXMgdm9uICVzIGFuIGRlciBUcnVoZSAoJXMpOlxuJXNcbiIsCisJCQkJICAgICB0eXAsCisJCQkJICAgICBjYXBpdGFsaXplKGdldHVpZCh0aGlzX3BsYXllcigpKSksCisJCQkJICAgICBkYXRlLAorCQkJCSAgICAgYnJlYWtfc3RyaW5nKG1zZyw3OCkpKTsKKworICBpZiAoSVNfTEVBUk5FUihvd25lcikpIHsKKyAgICBsb2dfZmlsZSgicmVwb3J0LyIrb3duZXIrIi5yZXAiLAorCSAgICAgc3ByaW50ZigiTUVMRFVORyB2b24gJXMgaW0gU2VoZXJoYXVzLCBhbiBkZXIgVHJ1aGUgKCVzKTpcbiIKKwkJICAgICArIkJpdHRlIHp1ciBLZW5udG5pcyBuZWhtZW4hIChNaXQgZGVtIEJlZmVobCAnbWVsZHVuZ2VuJykgIC1XYXJnb25cbiIsCisJCSAgICAgY2FwaXRhbGl6ZShnZXR1aWQodGhpc19wbGF5ZXIoKSkpLAorCQkgICAgIGRhdGUpKTsKKyAgfQorCisgIGhvbWUgPSBsb2FkX29iamVjdChSQVVNTkFNRShvd25lciwwKSk7CisgIGhvbWUtPlNldChIX1JFUE9SVCwgaG9tZS0+UXVlcnkoSF9SRVBPUlQpKzEpOworICBob21lLT5TYXZlKCk7CisKKyAgcmV0dXJuIDE7Cit9CisKZGlmZiAtLWdpdCBhL2Qvc2VoZXIvaGFldXNlci90eHQva29tbWVudGFyLnR4dCBiL2Qvc2VoZXIvaGFldXNlci90eHQva29tbWVudGFyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2E0ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3R4dC9rb21tZW50YXIudHh0CkBAIC0wLDAgKzEsNjggQEAKKwkJICAgIEpvZidzY2hlIEt1cnotS29tbWVudGFyZQorCisJICAgIEtvbW1lbnRhciB6dW0gQmF1c3BhcnZlcnRyYWcgZnVlciBTZWhlcgorCitiZWFyYmVpdGV0IHZvbjoKKworQXVmc2ljaHRzcmF0c3ZvcnNjaHdpdHplbmRlciBEci4gZmFjLiBqdS4gQmVsZGluCitPYmVyanVyaXNkaWt0aW9uc3NjaHJhdCBEci4gaGNsLiBPbGltCisKK1p1IEFydC4gMSAgKEdlZ2Vuc3RhbmQgZGVzIFZlcnRyYWdlcyk6CUR1IHphaGxzdCBFcmZhaHJ1bmcgZWluCit1bmQgYmVrb21tc3QgYW0gRW5kZSAodmllbGxlaWNodCkgRGVpbiBIYXVzIGRhZnVlci4gIERpZSBFcmZhaC0KK3J1bmdzcHVua3RlIHNpbmQgYXVmIGplZGVuIEZhbGwgZXJzdG1hbCB3ZWcuCisKK1p1IEFydC4gMiAoUGFydGVpZW4pOiBFcyBnaWJ0IHp3ZWkgUGFydGVpZW4sIERpY2ggdW5kIGRpZSBCYW5rLgorRGllIEJhbmsgaXN0IGltbWVyIGdsZWljaGJlcmVjaHRpZ3RlciBhbHMgRHUuCisKK1p1IEFydC4gMyAoV29obnN0YWV0dGUpOiBFaW4gSGF1cy4KKworWnUgQXJ0LiA0IChGaW5hbnppZXJ1bmcpOgorCisgQWJzLjEgKEthcGl0YWx2b2x1bWVuKSAgSW5zZ2VzYW10ICBrb3N0ZXQgZGFzIEhhdXMgMjU0NDAwMCAgRVAKKyAoT3B0aW9uIEEpIGJ6dy4gMjEyMDAwMCBFUCAoT3B0aW9uIEIpLgorCisgQWJzLjIgKFJhdGVuemFobHVuZy9MYXVmemVpdCkJRHUgbXVzc3QgIGltbWVyIDgwMDAwICBwcm8gUmF0ZQorIHphaGxlbi4gRGFiZWkgaGFzdCBEdSB6d2VpIE1vZWdsaWNoa2VpdGVuOgorCisgQTogNCAgU3R1bmRlbglaZWl0ICBmdWVyIGplZGUgIFJhdGUuIFplaXQgIGF1Y2ggIGZ1ZXIgIGFuZGVyZQorIEFrdGl2aXRhZXRlbiAgaW0gTXVkICBhdXNzZXIgenUgTWV0emVsbi4gIEFscyBTdHJhZmUgZGFyZnN0IER1CisgZGFmdWVyIGluc2dlc2FtdCBldHdhcyBtZWhyIGxvZWhuZW4gYWxzIGJlaSBPcHRpb24gQi4KKyBCOiAyIFN0dW5kZW4gIFplaXQgIGZ1ZXIgIGplZGUgIFJhdGUuCUJydXRhbCwgIGFiZXIgIER1ICBiaXN0Cisgc2NobmVsbGVyICBmZXJ0aWcgbWl0CWRlbSBLcmFtLiBXYWVobCwgdW50ZXJzY2hyZWliLAl1bmQgZGllCisgWmVpdCBsYWV1ZnQgYmlzIGFsbGVzIGVpbmdlemFobHQgaXN0LgorCisgQWJzLjMgKFppbnNlcnRyYWcpICA2JSBaaW5zZW4gZC5oLiAgRHUgbXVzc3QgbmljaHQgZGVuICBnYW56ZW4KKyBCZXRyYWcgICgyNTQ0MDAwIGJ6dy4gMjEyMDAwMAlFUCksICBzb25kZXJuICBudXIgIGVpbmVuICBUZWlsCisgKDI0MDAwMDAgYnp3LiAyMDAwMDAwIEVQKSB6YWhsZW4uCisKKyBBYnMuNCAoRWluemFobHVuZykgIERpZSBFcmZhaHJ1bmcsICBkaWUgZGllIEJhbmsgaW50ZXJlc3NpZXJ0LAorIG11c3N0IER1ICBiZWltIE1ldHplbG4gIHVuZCBRdWVzdGVuIGF1ZmJyaW5nZW4uICBXb3JhdWYgRHUgZGVuCisgU2Nod2VycHVua3QgbGVnc3QsIGJsZWlidCBEaXIgZ2FueiBzZWxic3QgdWViZXJsYXNzZW4uIEVzIHdpcmQKKyB3YWVocmVuZCBkZXMgS2FtcGZlcyBhdXRvbWF0aXNjaCAgZWluIFRlaWwgZGVyIERpciB6dXN0ZWhlbmRlbgorIEVyZmFocnVuZyBhdWYgZGVuICBCTE9DSyB1bWdlYnVjaHQuICBEaWVzZW4gbXVzc3QgRHUgZGF6dSBhYmVyCisgZXJzdCBlaW5tYWwgYW56aWVoZW4uIFZvciBkZW0gS2FtcGYuICBEdSBrYW5uc3QgbmF0dWVybGljaCBudXIKKyBzb3ZpZWwgRXJmYWhydW5nIGltIEJsb2NrIHNwZWljaGVybiwgd2llIERlaW5lIFJhdGUgenVsYWVzc3QuCisKKyBBYnMuNSAoU2FldW1uaXNzKSAgRXMgZ2lidCB6d2VpICBNb2VnbGljaGtlaXRlbiAgYmVpIGRlciAgQmFuaworIG1laHIgRXJmYWhydW5nIHp1IGxhc3NlbjoKKyAxLiBEdQl1ZWJlcnppZWhzdCAgZWluZSAgUmF0ZW5mcmlzdCAgLT4gIEVpbmUgIFZlcnRyYWdzc3RyYWZlCisgaS5ILnYuIDQ4MDAwIEVQICg2MCUpIGlzdCAgaW5uZXJoYWxiIHZvbiAyIGJ6dy4gMSBPbmxpbmVzdHVuZGUKKyBiZWl6dWJyaW5nZW4uCisgMi4gRHUJdWViZXJ6aWVoc3QgIGF1Y2ggIGRpZQlTdHJhZmUgLT4gRGVpbmUgZ2VzYW10ZSAgYmlzaGVyCisgZWluZ2V6YWhsdGUgRXJmYWhydW5nIGlzdCBWRVJMT1JFTi4KKworWnUgQXJ0LiA1IChVbnRlcnNjaHJpZnQpOiAgRHUgbXVzc3QgZGVuIFZlcnRyYWcgIHVudGVyc2NocmVpYmVuCisoU1lOVEFYOiB1bnRlcnNjaHJlaWJlIHZlcnRyYWcpLgorCitadSBBcnQuIDYgKEVyZnVlbGx1bmcgZGVzIFZlcnRyYWdlcyk6ICBXZW5uIER1IGFsbGVzIGVpbmdlemFobHQKK2hhc3QgYmVrb21tc3QgRHUgRGVpbiBIYXVzLgorCitadSBBcnQuIDcgKEFuc3BydWVjaGUgIGRlcyBLdW5kZW4pOiBEdQloYXN0IGtlaW5lICBBbnNwcnVlY2hlLgorR2VuYXUgZGFzIHN0ZWh0IGF1Y2ggaW4gZGVuIEFHQi4KKworWnUgQW5oYW5nIEE6IER1ICBrYW5uc3QgIGRhcyAgSGF1cyAgaW4JZWluZW0gIGdld2lzc2VuICBSYWhtZW4KK3ZlcmFlbmRlcm4uCisKK1p1IEFuaGFuZyBCOiBNdW1waXR6ISAgS2VpbmUgIEdhcmFudGllCWZ1ZXIgIGdhciAgbmljaHRzICAoRGllCitHZmdXYm1iSCBpc3QgZWluZSAxMDAlIFRvY2h0ZXIgZGVyIE1vcmdlbkdyYXVlbi1CYW5rKSEKKwpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3R4dC92ZXJ0cmFnLnR4dCBiL2Qvc2VoZXIvaGFldXNlci90eHQvdmVydHJhZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiY2QwNwotLS0gL2Rldi9udWxsCisrKyBiL2Qvc2VoZXIvaGFldXNlci90eHQvdmVydHJhZy50eHQKQEAgLTAsMCArMSwxMzkgQEAKKyAgICAgICAgICAgICAgICAgICBCQVVTUEFSVkVSVFJBRyBmdWVyIFNFSEVSCisgICAgICAgICBNb3JnZW5HcmF1ZW4tQmFuaywgJ0RpZSBCYW5rIGluIElocmVtIFJ1ZWNrZW4nCisKK0FydC4gMSAoR2VnZW5zdGFuZCAgZGVzIFZlcnRyYWdlcyk6ICBHZWdlbnN0YW5kIGRpZXNlcyAgVmVydHJhZ2VzCitpc3QgZGllICB2ZXJ6aW5zbGljaGUgQW5zcGFydW5nIHZvbiAgRXJmYWhydW5nc3dlcnRlbiB6dW0gIFp3ZWNrZQorZGVyICAgRXJyaWNodHVuZyAgIGVpbmVyICAgZ2VlaWduZXRlbiAgIFdvaG5zdGFldHRlICAgZnVlciAgICBkZW4KK3VudGVyemVpY2huZW5kZW4gIFNlaGVyLiAgRWluZSAgdm9yemVpdGlnZSAgQXVzemFobHVuZyAoZC5oLiAgdm9yCitBYmxhdWYgIGRlcyBWZXJ0cmFnZXMpIGlzdCBuaWNodCB2b3JnZXNlaGVuLiBadXIgV29obnN0YWV0dGUgcy51LgorQXJ0LiAgMywgenVyICAgTGF1ZnplaXQgIHMudS4gQXJ0LiAgNCBBYnMuMiwgIHp1ciBFcmZ1ZWxsdW5nICBkZXMKK1ZlcnRyYWdlcyBzLnUuIEFydC4gNi4KKworQXJ0LiAgIDIgICAoUGFydGVpZW4pOiAgIFBhcnRlaWVuICBkaWVzZXMgICBWZXJ0cmFnZXMgIHNpbmQgICBkaWUKK01vcmdlbkdyYXVlbi1CYW5rIGF1ZiBkZXIgZWluZW4gU2VpdGUgKGltIGZvbGdlbmRlbiBCYW5rIGdlbmFubnQpCit1bmQgU2llLCAgZGVyIHVudGVyemVpY2huZW5kZSAgU2VoZXIgYXVmICBkZXIgIGFuZGVyZW4gU2VpdGUgIChpbQorZm9sZ2VuZGVuIFNlaGVyIGdlbmFubnQpLiBHZW1hZXNzIHVuc2VyZXIgVW50ZXJuZWhtZW5zcGhpbG9zb3BoaWUKK3NpbmQgQmFuayB1bmQgU2VoZXIgYmVpIGRpZXNlbSBSZWNodHNnZXNjaGFlZnQgIGdsZWljaGJlcmVjaHRpZ3RlCitQYXJ0bmVyLgorCitBcnQuICAzICAoV29obnN0YWV0dGUpOiAgQWxzICBnZWVpZ25ldGUgIFdvaG5zdGFldHRlIGkuUy4gIGRpZXNlcworVmVydHJhZ2VzICBnaWx0ICBkYXMgIE1vcmdlbkdyYXVlbi1TZWhlci1FaW5oZWl0c2hhdXMgICAoTUlOLU5vcm0KKzE1NjQ3KSwgd2VsY2hlcyAgamVkb2NoIGJlc2NocmFlbmt0ICAgbW9kaWZpemllcmJhciAgaXN0LiBadSAgZGVuCittb2VnbGljaGVuICBNb2RpZmlrYXRpb25lbiAgcy51LiBBbmhhbmcgIEEuIFp1bSAgVm9sdW1lbiB1bmQgIGRlbQorWmluc2VydHJhZyBkZXMgQmF1c3BhcnZlcnRyYWdlcyBzLnUuIEFydC4gNCBBYnMuMSB1bmQgIEFicy4zLgorCitBcnQuICA0IChGaW5hbnppZXJ1bmcpOiAgQWJzLjEgKEthcGl0YWx2b2x1bWVuKSAgRGFzIFZvbHVtZW4gIGRlcworVmVydHJhZ2VzIGlzdCB2YXJpYWJlbC4gRXMgYmVsYWV1ZnQgc2ljaCBiZWkgIE9wdGlvbiBBIChzLiBBYnMuMikKK2F1ZiAgMjU0NDAwMCwgIHVuZCBiZWkgT3B0aW9uIEIgIChzLiBBYnMuMikgIGF1ZiAyMTIwMDAwICBNb3JnZW4tCitHcmF1ZW4tRXJmYWhydW5nc3B1bmt0ZSAgKEVQKS4gIEluIGRpZXNlbiAgQmV0cmFnICBlaW5nZXNjaGxvc3Nlbgorc2luZCAgc293b2hsICBJaHJlIHp1ICBsZWlzdGVuZGVuIFphaGx1bmdlbiAgYWxzIGF1Y2ggZGVyIGVyd2lydC0KK3NjaGFmdGV0ZSBaaW5zZXJ0cmFnLgorCisgIEFicy4yICAoUmF0ZW56YWhsdW5nL0xhdWZ6ZWl0KSAgRGllICBCYW5rICBiaWV0ZXQgIElobmVuICAgendlaQorICB1bnRlcnNjaGllZGxpY2hlIE1vZWdsaWNoa2VpdGVuIGRlciBGaW5hbnppZXJ1bmc6CisgIE9wdGlvbiBBOiBERVIgU0FORlRFIFdFRyBaVU0gRUlHRU5IRUlNICAgIEJlaSBlaW5lciAgUmF0ZW5ob2VoZQorICB2b24gODAwMDAgRVAgIGlubmVyaGFsYiB2b24gamV3ZWlscyA0IE9ubGluZS1TdHVuZGVuIHVuZCAgZWluZXIKKyAgUmF0ZW5hbnphaGwgdm9uIDMwICBiZXRyYWVndCBkaWUgIEdlc2FtdGxhdWZ6ZWl0ICBkZXMgVmVydHJhZ2VzCisgIDEyMCBPbmxpbmUtU3R1bmRlbi4KKyAgT3B0aW9uIEI6IERFUiBTQ0hORUxMRSBXRUcgWlVNIEVJR0VOSEVJTSAgQmVpIGVpbmVyICBSYXRlbmhvZWhlCisgIHZvbiA4MDAwMCBFUCAgaW5uZXJoYWxiIHZvbiBqZXdlaWxzIDIgT25saW5lLVN0dW5kZW4gdW5kICBlaW5lcgorICBSYXRlbmFuemFobCAgdm9uIDI1IGJldHJhZWd0IGRpZSAgR2VzYW10bGF1ZnplaXQgZGVzICBWZXJ0cmFnZXMKKyAgNTAgT25saW5lLVN0dW5kZW4uCisgIERpZSBMYXVmemVpdCAgYmVnaW5udCBtaXQgZGVtIElua3JhZnR0cmV0ZW4gIGRlcyBWZXJ0cmFnZXMgIHVuZAorICBlbmRldCBtaXQgZGVyIEVyc3RlbGx1bmcgZGVzIGdld3VlbnNjaHRlbiBIYXVzZXMuIEJlaSBTYWV1bW5pc3MKKyAgZGVzIFNlaGVycyBzaW5kIGRpZSBCZXN0aW1tdW5nZW4gIGRlcyBBcnQuIDQgQWJzLjUgIGFuenV3ZW5kZW4uCisgIERlciAgVmVydHJhZyB3aXJkICBtaXQgZGVyIFVudGVyc2NocmlmdCAgZGVzIGpld2VpbGlnZW4gIFNlaGVycworICB3aXJrc2FtLiBadSBkZW4gQmVzdGltbXVuZ2VuICB1ZWJlciBkaWUgIFVudGVyc2NocmlmdCB3aXJkICBhdWYKKyAgQXJ0LiA1IHZlcndpZXNlbi4KKworICBBYnMuMyAoWmluc2VydHJhZykgRGVyIFppbnNzYXR6IGJlbGFldWZ0ICBzaWNoICBhdWYgNiwwMCUuICBEaWUKKyAgWmluc2VuIHdlcmRlbiBtaXQgRWluemFobHVuZyBkZXMgbGV0enRlbiBFcmZhaHJ1bmdzcHVua3RlcyAgYmUtCisgIHJlY2huZXQuIEhpZXJhdXMgZXJnaWJ0IHNpY2ggZWluIFppbnNlcnRyYWcgdm9uIGdlbmF1IDE0NDAwMCBFUAorICBiZWkgT3B0aW9uIEEgdW5kIDEyMDAwMCBiZWkgT3B0aW9uIEIuCisKKyAgQWJzLjQgIChFaW56YWhsdW5nKSAgRGllICBCYW5rICBiaWV0ZXQgIElobmVuICBlaW5lIGJpc2hlciAgbmllCisgIGRhZ2V3ZXNlbmUgIGZpbmFuemllbGxlIEZsZXhpYmlsaXRhZXQgbWl0IGRlbSBNRyAgTUFTVEVSLUJMT0NLLgorICBBdWNoIGJlaSB1bnZvcmhlcmdlc2VoZW5lbiB1bmQgc3BvbnRhbmVuIFJhdWJ6dWVnZW4ga29lbm5lbiBTaWUKKyAgc2ljaCBqZWRlcnplaXQgRXJmYWhydW5nc3B1bmt0ZSBndXRzY2hyZWliZW4gbGFzc2VuLiBTaWUgdHJhZ2VuCisgIG51ciAgSWhyZW4gIEJsb2NrIHdpZSBlaW4gIHVlYmxpY2hlcyBBbXVsZXR0IHVuZCAgd2FlaHJlbmQgIGRlcworICBLYW1wZmVzIG9kZXIgYXVjaCAgYmVpbSBMb2VzZW4gZWluZXIgUXVlc3QgIHdpcmQgaWhuZW4gZWluIFRlaWwKKyAgZGVyICBFcmZhaHJ1bmdzcHVua3RlICBndXRnZXNjaHJpZWJlbiAgKGJpcyAgenVyICBSYXRlbmhvZWNoc3QtCisgIGdyZW56ZSkuIEJhcmVpbnphaGx1bmcgZGVyIFJhdGVuIGlzdCBuaWNodCBtb2VnbGljaC4KKworICBBYnMuNSAoU2FldW1uaXNzKSBTYWV1bW5pc3MgaS5TLiBkaWVzZXMgVmVydHJhZ2VzIGJlc3RlaHQgaW1tZXIKKyAgZGFubiwgd2VubiAgZGVyIFVudGVyemVpY2huZW5kZSBkZW4gaW4gIEFydC4zICBBYnMuMiAgZ2VuYW5udGVuCisgIE1pbmRlc3RyYXRlbnplaXRyYXVtICB1ZWJlcnNjaHJlaXRldC4gRGFiZWkgd2lyZCB6dW5hZWNoc3QgZWluZQorICBWZXJ0cmFnc3N0cmFmZSBpbiBIb2VoZSB2b24gNjAlIGRlciAgUmF0ZSBmYWVsbGlnLiBXaXJkICBkYXJhdWYKKyAgZGllIFN0cmFmZSBuaWNodCAgaW5uZXJoYWxiIHZvbiAyIE9ubGluZS1TdHVuZGVuIChiZWkgT3B0aW9uIEEpCisgIG9kZXIgIDEgT25saW5lLVN0dW5kZSAgKGJlaSBPcHRpb24gQikgIHdhZWhyZW5kIGRlciAgbmF0dWVybGljaAorICB3ZWl0ZXJsYXVmZW5kZW4sICBub3JtYWxlbiAgUmF0ZW56YWhsdW5nc2ZyaXN0ICBiZWdsaWNoZW4sIGdpbHQKKyAgZGVyICBWZXJ0cmFnIGV4ICBudW5jICBhbHMgaGluZmFlbGxpZy4gQmVpICBIaW5mYWVsbGlna2VpdCAgZGVzCisgIFZlcnRyYWdzICB3aXJkICBkYXMgIGJpc2hlciBlaW5nZXphaGx0ZSAgS2FwaXRhbCB2b24gIGRlciAgQmFuaworICBlaW5iZWhhbHRlbi4KKworQXJ0LiA1ICAoVW50ZXJzY2hyaWZ0KTogQWxzICBndWVsdGlnZSBVbnRlcnNjaHJpZnQgIHdpcmQgbnVyICBlaW4KK2luZGl2aWR1ZWxsZXMgIFplaWNoZW4gIGF1ZiAgZGVtICBkYWZ1ZXIgIHZvcmdlc2VoZW5lbiAgUGxhdHogIGFtCit1bnRlcmVuLCAgcmVjaHRlbiAgUmFuZCAgZGVyICBsZXR6dGVuICAgU2VpdGUgIGRpZXNlcyAgIFZlcnRyYWdlcworenVnZWxhc3NlbiAoTUlOLU5vcm0gMzI0NTQpLiBadXIgU2ljaGVydW5nIGRlciBBdXRoZW50aXppdGFldCBkZXMKK0Rva3VtZW50cyBpc3QgZGllIFVudGVyc2NocmlmdCB3ZWl0ZXJoaW4gbWl0IEhlcnpibHV0IHp1IGxlaXN0ZW4uCitBbHMgU2NocmVpYnV0ZW5zaWwgd2VyZGVuIHNvd29obCBlaW5lIEZlZGVyIGFscyBhdWNoIGVpbiBTa2FscGVsbAordm9uIGRlciAgQmFuayB6dXIgVmVyZnVlZ3VuZyBnZXN0ZWxsdC4gRGllIFVudGVyc2NocmlmdCBrYW5uICBudXIKK2luIEFud2VzZW5oZWl0ICBlaW5lcyBhdXRvcmlzaWVydGVuICBBbmdlc3RlbGx0ZW4gdW5zZXJlcyAgSGF1c2VzCitnZWxlaXN0ZXQgd2VyZGVuLgorCitBcnQuIDYgKEVyZnVlbGx1bmcgZGVzIFZlcnRyYWdlcyk6IEJlaSAgRXJmdWVsbHVuZyBkZXMgIFZlcnRyYWdlcworbHQuIGRlbiBvLmEuIEFydC4gd2lyZCBkZW0gU2VoZXIgIGRhcyBIYXVzICBhbiBkZXIgIEF1c2dhYmVzdGVsbGUKK3NjaGx1ZXNzZWxmZXJ0aWcgYXVzZ2VsaWVmZXJ0LiBEZXIgRXJoYWx0IGlzdCB6dSBxdWl0dGllcmVuLgorCitBcnQuIDcgKEFuc3BydWVjaGUgIGRlcyBLdW5kZW4pICBGdWVyIGV0d2FpZ2UgIFNjaGFlZGVuIGFtICBMZXNlcgorZGllc2VzICBWZXJ0cmFnZXMgIHVlYmVybmltbXQgIGRpZSAgQmFuayAga2VpbmUgIEhhZnR1bmcsIGRhICBzaWUKK2F1c3NjaGxpZXNzbGljaCAgIGF1ZiAgIGZlaGxlcmhhZnRlcyAgIExlc2VuICAgb2RlciAgICBNaXNzYnJhdWNoCit6dXJ1ZWNrenVmdWVocmVuIHNpbmQuIEFuc29uc3RlbiBnYXJhbnRpZXJ0IGRpZSAgQmFuaywgZGFzcyAgc2ljaAorZGVyIFZlcnRyYWcgaW0gd2VzZW50bGljaGVuICAodW5kICAgbmljaHQgZXR3YSAga29tcGxldHQpIGFuICBkaWUKK2RlcnplaXRpZyAgIGd1ZWx0aWdlbiAgIFJlZ2VsbiAgIGRlciAgIGRldXRzY2hlbiAgICAgICBHcmFtbWF0aWssCitPcnRob2dyYXBoaWUsIHVuZCBTdGlsaXN0aWsgICh1bmQgbmljaHQgZXR3YSAgYW4gZGllICBSZWdlbG4gIGRlcworZ2VzdW5kZW4gIE1lbnNjaGVudmVyc3RhbmRlcykgIGhhZWx0LiAgQmV6dWVnbGljaCBhbGxlciAgdW5rbGFyZW4KK0JlZ3JpZmZlIGluIGRlbiBvLmEuIEFydC4sIHdlbGNoZSBzaWNoICBhdWYgYmFua2ludGVybmUgIEFibGFldWZlCitiZXppZWhlbiwgaGFiZW4gU2llIGRhcyBSZWNodCwgZGllIGluIGRlciBCYW5rICBhdXNoYWVuZ2VuZGVuIEFHQgorenUgIGxlc2VuLiAgVW5zZXJlICBmcmV1bmRsaWNoZW4gIGdlc2NodWx0ZW4gIE1pdGFyYmVpdGVyICB3ZXJkZW4KK3NpY2hlcmxpY2ggZ2VybmUgYXVmIGRpZSAgd2VuaWdlbiBub2NoICBvZmZlbmVuIEZyYWdlbiAgZWluZ2VoZW4uCitJbiBqZWRlbSBGYWxsIGdpbHQgZGFzICBSZWNodCBlaW5lciAgdm9uIHVucyAgaW0gU2NoYWRlbnNmYWxsICB6dQorYmVuZW5uZW5kZW4gUmVnaW9uLgorCitXaXIgZGFua2VuIElobmVuIGZ1ZXIgZGFzIGVudGdlZ2VuZ2VicmFjaHRlIFZlcnRyYXVlbgorCitpLkEuCitBdWZzaWNodHNyYXRzdm9yc2Nod2l0emVuZGVyIERyLiBmYWMuIGp1LiBCZWxkaW4KK09iZXJqdXJpc2Rpa3Rpb25zc2NocmF0IERyLiBoY2wuIE9saW0KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVbnRlcnNjaHJpZnQgdm9uICoqKioqKioqKioqKQorCisKK0FuaGFuZyBBIChBdXN6dWcgYXVzICBkZW4gQmVzY2hsdWVzc2VuICBkZXIgTUctTm9ybWVua29uZmVyZW56KQorIk1vZGlmaWthdGlvbjoiCitbLi4uXQorRGFzICAgSGF1cyAgIHdpcmQgIGluICBlaW5oZWl0bGljaGVyICBHcm9lc3NlICAgdW5kICAgQXVzc3RhdHR1bmcKK2FuZ2VsaWVmZXJ0ICAoTUlOLU5vcm0gIDE1NjQ3KS4gIE1vZGVybmUgICBXZXJrc3RvZmZlICB3aWUgICB6LkIuCitkcmFjaGVub2RlbWdlYnJhbm50ZSAgTmFibGEtU2NobGFtbS1aaWVnZWwgIGdld2FlaHJsZWlzdGVuIHNvd29obAora29zdGVuZ3VlbnN0aWdlICBQcm9kdWt0aW9uLCAgYWxzICAgYXVjaCAgZWluZSAgZmFzdCAgdW5iZWdyZW56dGUKK0hhbHRiYXJrZWl0LiAgQWxsZSAgIEJhdXRlaWxlICAgc2luZCAgIG51bWVyaWVydCwgIHVtICAgbW9lZ2xpY2hlCitNb2RpZmlrYXRpb25lbiB6dSBlcmxlaWNodGVybi4gWy4uLl0KK0RlbSAgQmVzaXR6ZXIgaXN0IGVzICBlcmxhdWJ0IHNvd29obCAgYW4gZGVyIEZhc3NhZGUgd2llIGF1Y2ggIGltCitJbm5lcmVuIGdld2lzc2UsIGluZGl2aWR1ZWxsZSBNZXJrbWFsZSBlaW56dWJyaW5nZW4uCisKK0FuaGFuZyBCIChMaWVmZXJiZXN0aW1tdW5nIGRlciAgR2VzZWxsc2NoYWZ0IGZ1ZXIgZ2VtZWlubnVldHppZ2VuCisgICAgICAgICAgV29obnVuZ3NiYXUgbS5iLkguKQorWy4uLl0KK0lWLiBHYXJhbnRpZQorRGllIEdmZ1dibWJIIHVlYmVybmltbXQga2VpbmUgR2FyYW50aWUgZnVlciBkYXMgdW5laW5nZXNjaHJhZW5rdGUKK0Z1bmt0aW9uaWVyZW4gIGRlcyAgTW9yZ2VuZ3JhdWVuLVNlaGVyLUVpbmhlaXRzaGF1c2VzICAgKE1JTi1Ob3JtCisxNTY0NykgYmVpIGRlciBBdXNsaWVmZXJ1bmcuIEZlaGxlciBpbSwgc293aWUgYW0gIEhhdXMgc2luZCAgbmFjaAorZGVtIGRlcnplaXRpZ2VuIFN0YW5kICBkZXIgQmF1dGVjaG5payAgdW52ZXJtZWlkbGljaCB1bmQgIGZ1ZWhyZW4KK25pY2h0ICAgenUgICBFcnNhdHphbnNwcnVlY2hlbi4gICBGdWVyICAgZXR3YWlnZSAgIFNjaGFlZGVuICAgIGFtCitNb3JnZW5HcmF1ZW4tU2VoZXItRWluaGVpdHNoYXVzICAoTUlOLU5vcm0gIDE1NjQ3KSAgbmFjaCAgIGRlc3NlbgorQXVzbGllZmVydW5nICB1ZWJlcm5pbW10ICBkaWUgIEdmZ1dibWJIICBrZWluZSAgSGFmdHVuZywgIGRhICBzaWUKK2F1c3NjaGxpZXNzbGljaCAgIGF1ZiAgZmVobGVyaGFmdGVzICAgQmV3b2huZW4gIG9kZXIgICBNaXNzYnJhdWNoCit6dXJ1ZWNrenVmdWVocmVuICBzaW5kLgpkaWZmIC0tZ2l0IGEvZC9zZWhlci9oYWV1c2VyL3R4dC92ZXJ0cmFnX3JhdW0udHh0IGIvZC9zZWhlci9oYWV1c2VyL3R4dC92ZXJ0cmFnX3JhdW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTNmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kL3NlaGVyL2hhZXVzZXIvdHh0L3ZlcnRyYWdfcmF1bS50eHQKQEAgLTAsMCArMSwxNDIgQEAKKyAgICAgICAgICAgICAgICAgICBCQVVTUEFSVkVSVFJBRyBmdWVyIFNFSEVSCisgICAgICAgICAgICAgICAgICAgICAgLS0gQVVTQkFVVkVSVFJBRyAtLQorICAgICAgICAgTW9yZ2VuR3JhdWVuLUJhbmssICdEaWUgQmFuayBpbiBJaHJlbSBSdWVja2VuJworCitBcnQuIDEgKEdlZ2Vuc3RhbmQgIGRlcyBWZXJ0cmFnZXMpOiAgR2VnZW5zdGFuZCBkaWVzZXMgIFZlcnRyYWdlcworaXN0IGRpZSAgdmVyemluc2xpY2hlIEFuc3BhcnVuZyB2b24gIEVyZmFocnVuZ3N3ZXJ0ZW4genVtICBad2Vja2UKK2RlcyAgQXVzYmF1ZXMgIGRlciBXb2huc3RhZXR0ZSBkZXMgdW50ZXJ6ZWljaG5lbmRlbiAgU2VoZXJzLiBFaW5lCit2b3J6ZWl0aWdlICBBdXN6YWhsdW5nIChkLmguICB2b3IgQWJsYXVmIGRlcyBWZXJ0cmFnZXMpIGlzdCBuaWNodAordm9yZ2VzZWhlbi4gWnVtIEF1c2JhdSBkZXIgV29obnN0YWV0dGUgcy51LkFydC4gIDMsIHp1ciAgTGF1ZnplaXQKK3MudS4gQXJ0LiA0IEFicy4yLCB6dXIgRXJmdWVsbHVuZyBkZXMgVmVydHJhZ2VzIHMudS4gQXJ0LiA2LgorCitBcnQuICAgMiAgIChQYXJ0ZWllbik6ICAgUGFydGVpZW4gIGRpZXNlcyAgIFZlcnRyYWdlcyAgc2luZCAgIGRpZQorTW9yZ2VuR3JhdWVuLUJhbmsgYXVmIGRlciBlaW5lbiBTZWl0ZSAoaW0gZm9sZ2VuZGVuIEJhbmsgZ2VuYW5udCkKK3VuZCBTaWUsICBkZXIgdW50ZXJ6ZWljaG5lbmRlICBTZWhlciBhdWYgIGRlciAgYW5kZXJlbiBTZWl0ZSAgKGltCitmb2xnZW5kZW4gU2VoZXIgZ2VuYW5udCkuIEdlbWFlc3MgdW5zZXJlciBVbnRlcm5laG1lbnNwaGlsb3NvcGhpZQorc2luZCBCYW5rIHVuZCBTZWhlciBiZWkgZGllc2VtIFJlY2h0c2dlc2NoYWVmdCAgZ2xlaWNoYmVyZWNodGlndGUKK1BhcnRuZXIuCisKK0FydC4gIDMgKEF1c2JhdSBkZXIgV29obnN0YWV0dGUpOiBBbHMgQXVzYmF1IGRlciBXb2huc3RhZXR0ZSBpLlMuCitkaWVzZXMgICBWZXJ0cmFnZXMgICBnaWx0ICAgZGVyICAgTW9yZ2VuR3JhdWVuLVNlaGVyLUVpbmhlaXRzcmF1bQorKE1JTi1Ob3JtIDE1NjQ4KSwgd2VsY2hlciBqZWRvY2ggYmVzY2hyYWVua3QgIG1vZGlmaXppZXJiYXIgIGlzdC4KK1p1IGRlbiBtb2VnbGljaGVuIE1vZGlmaWthdGlvbmVuIHMudS4gQW5oYW5nICBBLiBadW0gIFZvbHVtZW4gdW5kCitkZW0gWmluc2VydHJhZyBkZXMgQmF1c3BhcnZlcnRyYWdlcyBzLnUuIEFydC4gNCBBYnMuMSB1bmQgIEFicy4zLgorCitBcnQuICA0IChGaW5hbnppZXJ1bmcpOiAgQWJzLjEgKEthcGl0YWx2b2x1bWVuKSAgRGFzIFZvbHVtZW4gIGRlcworVmVydHJhZ2VzIGlzdCB2YXJpYWJlbC4gRXMgYmVsYWV1ZnQgc2ljaCBiZWkgIE9wdGlvbiBBIChzLiBBYnMuMikKK2F1ZiAxMDE3NjAwLCB1bmQgYmVpIE9wdGlvbiBCIChzLkFicy4yKSBhdWYgODQ4MDAwICBNb3JnZW5HcmF1ZW4tCitFcmZhaHJ1bmdzcHVua3RlICAoRVApLiAgSW4gIGRpZXNlbiAgQmV0cmFnICBlaW5nZXNjaGxvc3NlbiAgc2luZAorc293b2hsIElocmUgenUgIGxlaXN0ZW5kZW4gWmFobHVuZ2VuIGFscyBhdWNoIGRlciBlcndpcnRzY2hhZnRldGUKK1ppbnNlcnRyYWcuCisKKyAgQWJzLjIgIChSYXRlbnphaGx1bmcvTGF1ZnplaXQpICBEaWUgIEJhbmsgIGJpZXRldCAgSWhuZW4gICB6d2VpCisgIHVudGVyc2NoaWVkbGljaGUgTW9lZ2xpY2hrZWl0ZW4gZGVyIEZpbmFuemllcnVuZzoKKyAgT3B0aW9uIEE6IERFUiBTQU5GVEUgV0VHIFpVTSBBVVNCQVUgICAgICAgQmVpIGVpbmVyICBSYXRlbmhvZWhlCisgIHZvbiA4MDAwMCBFUCAgaW5uZXJoYWxiIHZvbiBqZXdlaWxzIDQgT25saW5lLVN0dW5kZW4gdW5kICBlaW5lcgorICBSYXRlbmFuemFobCB2b24gMTIgIGJldHJhZWd0IGRpZSAgR2VzYW10bGF1ZnplaXQgIGRlcyBWZXJ0cmFnZXMKKyAgNDggT25saW5lLVN0dW5kZW4uCisgIE9wdGlvbiBCOiBERVIgU0NITkVMTEUgV0VHIFpVTSBBVVNCQVUgICAgIEJlaSBlaW5lciAgUmF0ZW5ob2VoZQorICB2b24gODAwMDAgRVAgIGlubmVyaGFsYiB2b24gamV3ZWlscyAyIE9ubGluZS1TdHVuZGVuIHVuZCAgZWluZXIKKyAgUmF0ZW5hbnphaGwgIHZvbiAxMCBiZXRyYWVndCBkaWUgIEdlc2FtdGxhdWZ6ZWl0IGRlcyAgVmVydHJhZ2VzCisgIDIwIE9ubGluZS1TdHVuZGVuLgorICBEaWUgTGF1ZnplaXQgIGJlZ2lubnQgbWl0IGRlbSBJbmtyYWZ0dHJldGVuICBkZXMgVmVydHJhZ2VzICB1bmQKKyAgZW5kZXQgbWl0IGRlbSAgRWluYmF1IGRlcyBBdXNiYXVzLiAgQmVpIFNhdW1uaXMgZGVzIFNlaGVycyBzaW5kCisgIHNpbmQgZGllIEJlc3RpbW11bmdlbiAgZGVzIEFydC4gNCBBYnMuNSAgYW56dXdlbmRlbi4KKyAgRGVyICBWZXJ0cmFnIHdpcmQgIG1pdCBkZXIgVW50ZXJzY2hyaWZ0ICBkZXMgamV3ZWlsaWdlbiAgU2VoZXJzCisgIHdpcmtzYW0uIFp1IGRlbiBCZXN0aW1tdW5nZW4gIHVlYmVyIGRpZSAgVW50ZXJzY2hyaWZ0IHdpcmQgIGF1ZgorICBBcnQuIDUgdmVyd2llc2VuLgorCisgIEFicy4zIChaaW5zZXJ0cmFnKSBEZXIgWmluc3NhdHogYmVsYWV1ZnQgIHNpY2ggIGF1ZiA2LDAwJS4gIERpZQorICBaaW5zZW4gd2VyZGVuIG1pdCBFaW56YWhsdW5nIGRlcyBsZXR6dGVuIEVyZmFocnVuZ3NwdW5rdGVzICBiZS0KKyAgcmVjaG5ldC4gSGllcmF1cyBlcmdpYnQgc2ljaCBlaW4gWmluc2VydHJhZyB2b24gZ2VuYXUgIDU3NjAwIEVQCisgIGJlaSBPcHRpb24gQSB1bmQgNDgwMDAgYmVpIE9wdGlvbiBCLgorCisgIEFicy40ICAoRWluemFobHVuZykgIERpZSAgQmFuayAgYmlldGV0ICBJaG5lbiAgZWluZSBiaXNoZXIgIG5pZQorICBkYWdld2VzZW5lICBmaW5hbnppZWxsZSBGbGV4aWJpbGl0YWV0IG1pdCBkZW0gTUcgIE1BU1RFUi1CTE9DSy4KKyAgQXVjaCBiZWkgdW52b3JoZXJnZXNlaGVuZW4gdW5kIHNwb250YW5lbiBSYXVienVlZ2VuIGtvZW5uZW4gU2llCisgIHNpY2ggamVkZXJ6ZWl0IEVyZmFocnVuZ3NwdW5rdGUgZ3V0c2NocmVpYmVuIGxhc3Nlbi4gU2llIHRyYWdlbgorICBudXIgIElocmVuICBCbG9jayB3aWUgZWluICB1ZWJsaWNoZXMgQW11bGV0dCB1bmQgIHdhZWhyZW5kICBkZXMKKyAgS2FtcGZlcyBvZGVyIGF1Y2ggIGJlaW0gTG9lc2VuIGVpbmVyIFF1ZXN0ICB3aXJkIGlobmVuIGVpbiBUZWlsCisgIGRlciAgRXJmYWhydW5nc3B1bmt0ZSAgZ3V0Z2VzY2hyaWViZW4gIChiaXMgIHp1ciAgUmF0ZW5ob2VjaHN0LQorICBncmVuemUpLiBCYXJlaW56YWhsdW5nIGRlciBSYXRlbiBpc3QgbmljaHQgbW9lZ2xpY2guCisKKyAgQWJzLjUgKFNhZXVtbmlzcykgU2FldW1uaXNzIGkuUy4gZGllc2VzIFZlcnRyYWdlcyBiZXN0ZWh0IGltbWVyCisgIGRhbm4sIHdlbm4gIGRlciBVbnRlcnplaWNobmVuZGUgZGVuIGluICBBcnQuMyAgQWJzLjIgIGdlbmFubnRlbgorICBNaW5kZXN0cmF0ZW56ZWl0cmF1bSAgdWViZXJzY2hyZWl0ZXQuIERhYmVpIHdpcmQgenVuYWVjaHN0IGVpbmUKKyAgVmVydHJhZ3NzdHJhZmUgaW4gSG9laGUgdm9uIDYwJSBkZXIgIFJhdGUgZmFlbGxpZy4gV2lyZCAgZGFyYXVmCisgIGRpZSBTdHJhZmUgbmljaHQgIGlubmVyaGFsYiB2b24gMiBPbmxpbmUtU3R1bmRlbiAoYmVpIE9wdGlvbiBBKQorICBvZGVyICAxIE9ubGluZS1TdHVuZGUgIChiZWkgT3B0aW9uIEIpICB3YWVocmVuZCBkZXIgIG5hdHVlcmxpY2gKKyAgd2VpdGVybGF1ZmVuZGVuLCAgbm9ybWFsZW4gIFJhdGVuemFobHVuZ3NmcmlzdCAgYmVnbGljaGVuLCBnaWx0CisgIGRlciAgVmVydHJhZyBleCAgbnVuYyAgYWxzIGhpbmZhZWxsaWcuIEJlaSAgSGluZmFlbGxpZ2tlaXQgIGRlcworICBWZXJ0cmFncyAgd2lyZCAgZGFzICBiaXNoZXIgZWluZ2V6YWhsdGUgIEthcGl0YWwgdm9uICBkZXIgIEJhbmsKKyAgZWluYmVoYWx0ZW4uCisKK0FydC4gNSAgKFVudGVyc2NocmlmdCk6IEFscyAgZ3VlbHRpZ2UgVW50ZXJzY2hyaWZ0ICB3aXJkIG51ciAgZWluCitpbmRpdmlkdWVsbGVzICBaZWljaGVuICBhdWYgIGRlbSAgZGFmdWVyICB2b3JnZXNlaGVuZW4gIFBsYXR6ICBhbQordW50ZXJlbiwgIHJlY2h0ZW4gIFJhbmQgIGRlciAgbGV0enRlbiAgIFNlaXRlICBkaWVzZXMgICBWZXJ0cmFnZXMKK3p1Z2VsYXNzZW4gKE1JTi1Ob3JtIDMyNDU0KS4gWnVyIFNpY2hlcnVuZyBkZXIgQXV0aGVudGl6aXRhZXQgZGVzCitEb2t1bWVudHMgaXN0IGRpZSBVbnRlcnNjaHJpZnQgd2VpdGVyaGluIG1pdCBIZXJ6Ymx1dCB6dSBsZWlzdGVuLgorQWxzIFNjaHJlaWJ1dGVuc2lsIHdlcmRlbiBzb3dvaGwgZWluZSBGZWRlciBhbHMgYXVjaCBlaW4gU2thbHBlbGwKK3ZvbiBkZXIgIEJhbmsgenVyIFZlcmZ1ZWd1bmcgZ2VzdGVsbHQuIERpZSBVbnRlcnNjaHJpZnQga2FubiAgbnVyCitpbiBBbndlc2VuaGVpdCAgZWluZXMgYXV0b3Jpc2llcnRlbiAgQW5nZXN0ZWxsdGVuIHVuc2VyZXMgIEhhdXNlcworZ2VsZWlzdGV0IHdlcmRlbi4KKworQXJ0LiA2IChFcmZ1ZWxsdW5nIGRlcyBWZXJ0cmFnZXMpOiBCZWkgIEVyZnVlbGx1bmcgZGVzICBWZXJ0cmFnZXMKK2x0LiAgZGVuIG8uYS4gQXJ0LiB3aXJkIGJlaSAgVm9ybGFnZSBkZXMgIFZlcnRyYWdlcyBhbiBkZXIgZGFmdWVyCitlaW5nZXJpY2h0ZXRlbiAgU3RlbGxlIGRlciBBdXNiYXUgZGVyICBIZWltc3RhdHQgZGVzIFNlaGVycyBkdXJjaAordW5zZXJlbiAgIEF1c2JhdXNlcnZpY2UgICBuYWNoICAgTUlOLU5vcm0gICAyMDgxNSAgIHVudmVyenVlZ2xpY2gKK3Zvcmdlbm9tbWVuLiAgIERlbSAgU2VoZXIgIGVudHN0ZWhlbiAgaGllcmR1cmNoICAga2VpbmUgIHdlaXRlcmVuCitWZXJwZmxpY2h0dW5nZW4uCisKK0FydC4gNyAoQW5zcHJ1ZWNoZSAgZGVzIEt1bmRlbikgIEZ1ZXIgZXR3YWlnZSAgU2NoYWVkZW4gYW0gIExlc2VyCitkaWVzZXMgIFZlcnRyYWdlcyAgdWViZXJuaW1tdCAgZGllICBCYW5rICBrZWluZSAgSGFmdHVuZywgZGEgIHNpZQorYXVzc2NobGllc3NsaWNoICAgYXVmICAgZmVobGVyaGFmdGVzICAgTGVzZW4gICBvZGVyICAgIE1pc3NicmF1Y2gKK3p1cnVlY2t6dWZ1ZWhyZW4gc2luZC4gQW5zb25zdGVuIGdhcmFudGllcnQgZGllICBCYW5rLCBkYXNzICBzaWNoCitkZXIgVmVydHJhZyBpbSB3ZXNlbnRsaWNoZW4gICh1bmQgICBuaWNodCBldHdhICBrb21wbGV0dCkgYW4gIGRpZQorZGVyemVpdGlnICAgZ3VlbHRpZ2VuICAgUmVnZWxuICAgZGVyICAgZGV1dHNjaGVuICAgICAgIEdyYW1tYXRpaywKK09ydGhvZ3JhcGhpZSwgdW5kIFN0aWxpc3RpayAgKHVuZCBuaWNodCBldHdhICBhbiBkaWUgIFJlZ2VsbiAgZGVzCitnZXN1bmRlbiAgTWVuc2NoZW52ZXJzdGFuZGVzKSAgaGFlbHQuICBCZXp1ZWdsaWNoIGFsbGVyICB1bmtsYXJlbgorQmVncmlmZmUgaW4gZGVuIG8uYS4gQXJ0Liwgd2VsY2hlIHNpY2ggIGF1ZiBiYW5raW50ZXJuZSAgQWJsYWV1ZmUKK2JlemllaGVuLCBoYWJlbiBTaWUgZGFzIFJlY2h0LCBkaWUgaW4gZGVyIEJhbmsgIGF1c2hhZW5nZW5kZW4gQUdCCit6dSAgbGVzZW4uICBVbnNlcmUgIGZyZXVuZGxpY2hlbiAgZ2VzY2h1bHRlbiAgTWl0YXJiZWl0ZXIgIHdlcmRlbgorc2ljaGVybGljaCBnZXJuZSBhdWYgZGllICB3ZW5pZ2VuIG5vY2ggIG9mZmVuZW4gRnJhZ2VuICBlaW5nZWhlbi4KK0luIGplZGVtIEZhbGwgZ2lsdCBkYXMgIFJlY2h0IGVpbmVyICB2b24gdW5zICBpbSBTY2hhZGVuc2ZhbGwgIHp1CitiZW5lbm5lbmRlbiBSZWdpb24uCisKK1dpciBkYW5rZW4gSWhuZW4gZnVlciBkYXMgZW50Z2VnZW5nZWJyYWNodGUgVmVydHJhdWVuCisKK2kuQS4KK0F1ZnNpY2h0c3JhdHN2b3JzY2h3aXR6ZW5kZXIgRHIuIGZhYy4ganUuIEJlbGRpbgorT2Jlcmp1cmlzZGlrdGlvbnNzY2hyYXQgRHIuIGhjbC4gT2xpbQorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVudGVyc2NocmlmdCB2b24gKioqKioqKioqKiopCisKKworQW5oYW5nIEEgKEF1c3p1ZyBhdXMgIGRlbiBCZXNjaGx1ZXNzZW4gIGRlciBNRy1Ob3JtZW5rb25mZXJlbnopCisiTW9kaWZpa2F0aW9uOiIKK1suLi5dCitEZXIgIEF1c2JhdSAgd2lyZCAgaW4gIGVpbmhlaXRsaWNoZXIgIEdyb2Vzc2UgICB1bmQgICBBdXNzdGF0dHVuZworYW5nZWxpZWZlcnQgIChNSU4tTm9ybSAgMTU2NDgpLiAgIERlciAgRWluYmF1ICBkZXMgICBBdXNiYXVzICBpc3QKK2plZG9jaCAgIG51ciAgICB1bmQgICBhdXNzY2hsaWVzc2xpY2ggICAgZ2VzdGF0dGV0ICAgIGluICAgIGVpbmVtCitNb3JnZW5HcmF1ZW4tU2VoZXItRWluaGVpdHNoYXVzIChNSU4tTm9ybSAxNTY0OCkuICAgVW0gICBldHdhaWdlbQorTWlzc2JyYXVjaCB2b3J6dWJldWdlbiwgIGhhdCBkZXIgIEVpbmJhdSBkZXMgIEF1c2JhdXMgIG51ciAgZHVyY2gKK2dlc2NodWx0ZXMgRmFjaHBlcnNvbmFsIHp1IGVyZm9sZ2VuLiBbLi4uXQorRGVtICBCZXNpdHplciBpc3QgZXMgIGVybGF1YnQgaW0gIElubmVyZW4gIGdld2lzc2UsICBpbmRpdmlkdWVsbGUKK01lcmttYWxlIGVpbnp1YnJpbmdlbi4KKworQW5oYW5nIEIgKExpZWZlcmJlc3RpbW11bmcgZGVyICBHZXNlbGxzY2hhZnQgZnVlciBnZW1laW5udWV0emlnZW4KKyAgICAgICAgICBXb2hudW5nc2JhdSBtLmIuSC4pCitbLi4uXQorSVYuIEdhcmFudGllCitEaWUgR2ZnV2JtYkggdWViZXJuaW1tdCBrZWluZSBHYXJhbnRpZSBmdWVyIGRhcyB1bmVpbmdlc2NocmFlbmt0ZQorRnVua3Rpb25pZXJlbiAgZGVzICBNb3JnZW5ncmF1ZW4tU2VoZXItRWluaGVpdHNyYXVtZXMgICAoTUlOLU5vcm0KKzE1NjQ4KSBiZWkgZGVyIEF1c2xpZWZlcnVuZy4gRmVobGVyIGltLCBzb3dpZSBhbSAgUmF1bSBzaW5kICBuYWNoCitkZW0gZGVyemVpdGlnZW4gU3RhbmQgIGRlciBCYXV0ZWNobmlrICB1bnZlcm1laWRsaWNoIHVuZCAgZnVlaHJlbgorbmljaHQgICB6dSAgIEVyc2F0emFuc3BydWVjaGVuLiAgIEZ1ZXIgICBldHdhaWdlICAgU2NoYWVkZW4gICAgYW0KK01vcmdlbkdyYXVlbi1TZWhlci1FaW5oZWl0c3JhdW0gIChNSU4tTm9ybSAgMTU2NDgpICBuYWNoICAgZGVzc2VuCitFaW5iYXUgICB1ZWJlcm5pbW10ICAgZGllICAgR2ZnV2JtYkggICBrZWluZSAgIEhhZnR1bmcsICAgZGEgIHNpZQorYXVzc2NobGllc3NsaWNoICAgYXVmICBmZWhsZXJoYWZ0ZXMgICBCZXdvaG5lbiAgb2RlciAgIE1pc3NicmF1Y2gKK3p1cnVlY2t6dWZ1ZWhyZW4gIHNpbmQuCmRpZmYgLS1naXQgYS9kL3NlaGVyL2hhZXVzZXIvdmlydHVhbF9jb21waWxlci5jIGIvZC9zZWhlci9oYWV1c2VyL3ZpcnR1YWxfY29tcGlsZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQxYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZC9zZWhlci9oYWV1c2VyL3ZpcnR1YWxfY29tcGlsZXIuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoqIExldHp0ZSBBZW5kZXJ1bmc6CisvLyAwMS4wNC4yMDA4IC0gT2JqZWt0ZSBkZXMgVkMgd2VyZGVuIGpldHp0IGltIG1lbW9yeSBnZXNwZWljaGVydAorLy8gICAgICAgICAgICAtIEtsZWluZXJlIEFlbmRlcnVuZ2VuIGltIENvZGUuCisvLyAwMS4wMS4yMDA3IC0gR3J1bmRsZWdlbmRlIFVlYmVyYXJiZWl0dW5nLCBWYW5pb24KKy8vICAgICAgICAgICAgLSBWZXJ3YWx0dW5nIGRlciBPYmpla3RlIGluIGVpbmVyIExpc3RlCisvLyAgICAgICAgICAgICAgRGFkdXJjaCBrYW5uIGxzIGRpZSBWQy1PYmpla3RlIGRhcnN0ZWxsZW4KKy8vICAgICAgICAgICAgLSBHZW5hdWVyZSBVZWJlcnBydWVmdW5nIGRlciBEYXRlaW5hbWVuIGF1ZiAKKy8vICAgICAgICAgICAgICBLb3JyZWt0aGVpdC4gRmFsbHMgZWluIGlsbGVnYWxlciBadWdyaWZmCisvLyAgICAgICAgICAgICAgc3RhdHRmaW5kZXQsIHdpcmRzIGdlbG9nZ3QuCisvLworKi8KKworI3ByYWdtYSBzdHJpY3RfdHlwZXMKKyNwcmFnbWEgbm9fY2xvbmUKKyNwcmFnbWEgbm9fc2hhZG93CisjcHJhZ21hIG5vX2luaGVyaXQKKyNwcmFnbWEgdmVyYm9zZV9lcnJvcnMKKyNwcmFnbWEgY29tYmluZV9zdHJpbmdzCisjcHJhZ21hIHBlZGFudGljCisjcHJhZ21hIHdhcm5fZGVwcmVjYXRlZAorCisjaW5jbHVkZSAiaGF1cy5oIgorI2luY2x1ZGUgPHRoaW5nL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx3aXpsZXZlbHMuaD4KKworI2RlZmluZSBNRU1PUlkgIi9zZWN1cmUvbWVtb3J5IgorCitwcml2YXRlIG5vc2F2ZSBtYXBwaW5nIG9iamVjdHM7Citwcml2YXRlIG5vc2F2ZSBpbnQgc2hvd19jbG9uZV9saXN0OworCisvKioKKyBJbml0aWFsaXNpZXJ1bmcKKyovCit2b2lkIGNyZWF0ZSgpCit7CisgIHNldGV1aWQoZ2V0dWlkKCkpOworCisgIC8vIFplaWdlciBhdWYgQ2xvbmVsaXN0ZSBob2xlbgorICBpZiAoY2FsbF9vdGhlcihNRU1PUlksIkhhdmVSaWdodHMiKSkgeworICAgIC8vIE9iamVrdHBvaW50ZXIgbGFkZW4KKyAgICBvYmplY3RzID0gKG1peGVkKSBjYWxsX290aGVyKE1FTU9SWSwiTG9hZCIsIm9iamVjdHMiKTsKKworICAgIC8vIEhhdHMgZ2VrbGFwcHQ/CisgICAgaWYgKCFtYXBwaW5ncChvYmplY3RzKSkgCisgICAgLy8gdmVybXV0bGljaCBub2NoIG5pY2h0IGluaXRpYWxpc2llcnQuCisgICAgLy8gWmVpZ2VyIGVyemV1Z2VuCisgICAgb2JqZWN0cyA9IChbXSk7IAorICAgIGNhbGxfb3RoZXIoTUVNT1JZLCJTYXZlIiwib2JqZWN0cyIsb2JqZWN0cyk7IC8vIFVuZCBpbiBkZW4gTWVtb3J5IHNjaHJlaWJlbgorICB9IGVsc2UgeworICAgIC8vIFdlbm4gaWNoIGtlaW5lbiBaZWlnZXIgaGFiZSwgbXVzcyBpY2ggaGFsdCBlaW5lbiBsb2thbGVuIG5laG1lbi4KKworICAgIG9iamVjdHMgPSAoW10pOworICB9CisKKyAgc2hvd19jbG9uZV9saXN0ID0gMDsgCit9CisKKy8qKgorIERpZSBGdW5rdGlvbiB3aXJkIHZvbSBHYW1lRHJpdmVyIGF1ZmdlcnVmZW4uIFdlbm4gZGllIE5hbWVuLQorIGtvbnZlbnRpb25lbiBwYXNzZW4sIGVyemV1Z3QgY29tcGlsZV9vYmplY3QgZWluIHBhc3NlbmRlcyBPYmpla3QKKyB1bmQgZ2lidCBlcyB6dXJ1ZWNrCisgXHBhcmFtIG5hbWUgTmFtZSBkZXMgenUgbGFkZW5kZW4gT2JqZWt0cworIFxyZXR1cm4gRGFzIGdlbGFkZW5lIHVuZCBpbml0aWFsaXNpZXJ0ZSBPYmpla3QKKyovCitvYmplY3QgY29tcGlsZV9vYmplY3Qoc3RyaW5nIG5hbWUpCit7CisgIG9iamVjdCBvYjsKKworICBpZiAobmFtZVs8Ni4uPDNdID09ICJoYXVzIiApCisgIHsKKyAgICBvYiA9IChvYmplY3QpIChWRVJXQUxURVIpLT5fTGFkZUhhdXMobmFtZVswLi48N10pOworICB9CisgIGVsc2UgaWYgKG5hbWVbPDcuLjw0XSA9PSAicmF1bSIgKQorICB7CisgICAgb2IgPSAob2JqZWN0KSAoVkVSV0FMVEVSKS0+X0xhZGVSYXVtKG5hbWVbMC4uPDhdLCB0b19pbnQobmFtZVs8My4uPDNdKSk7CisgIH0gCisgIGVsc2UgCisgIHsKKyAgICBsb2dfZmlsZSgic2VoZXIvaGFldXNlci92Y19sb2FkX2Vycm9yIiwgCisgICAgICBkdGltZSh0aW1lKCkpKyJcbiBGYWxzY2hlciBPYmpla3RuYW1lOiAiK25hbWUrIlxuIisKKyAgCSAgICAgICAgICIgUE86ICAiK29iamVjdF9uYW1lKHByZXZpb3VzX29iamVjdCgxKSkrIixcbiIrCisgIAkgICAgICAgICAiIFBQTzogIitvYmplY3RfbmFtZShwcmV2aW91c19vYmplY3QoMikpKyIsXG4iKworICAJICAgICAgICAgIiBUSTogICIrb2JqZWN0X25hbWUodGhpc19pbnRlcmFjdGl2ZSgpKSsiLlxuXG4iKTsKKyAgCXJldHVybiAwOworICB9CisgIAorICAvLyBPYmpla3Qgc3BlaWNoZXJuIChmdWVyIGxzKQorICBpZiAob2JqZWN0cChvYikpIG9iamVjdHNbbmFtZV0gPSBvYjsKKworICByZXR1cm4gb2I7Cit9CisKKy8qKgorICBTb2xsIGRpZSBMaXN0ZSBkZXIgT2JqZWt0ZSB6dW0gVkMgcGVyIFF1ZXJ5T2JqZWN0cyBhdXNnZWdlYmVuIHdlcmRlbiBvZGVyIG5pY2h0PworKi8KKyAgCitpbnQgVG9nZ2xlQ2xvbmVMaXN0KCkKK3sKKyAgc2hvd19jbG9uZV9saXN0IF49IDE7CisgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksICJEaWUgQ2xvbmUgTGlzdCB3aXJkIG51biAiKworICAgICAgICAoc2hvd19jbG9uZV9saXN0PyIiOiJuaWNodCBtZWhyICIpKyJhbmdlemVpZ3QuXG4iKTsKK30KKworLyoqCisgcmV0dXJuIGFsbCBjbG9uZWQgdmlydHVhbCBvYmplY3RzLCB3aXJkIHp1bSBCZWlzcGllbCBmdWVyICJscyIgYmVudXR6dC4KKyovCittaXhlZCBRdWVyeU9iamVjdHMoKQoreworICBpZiAoc2hvd19jbG9uZV9saXN0KQorICAgIHJldHVybiBtX3ZhbHVlcyhvYmplY3RzKS0oezB9KTsKKyAgZWxzZSAKKyAgICByZXR1cm4gKHt9KTsKK30KKworLyoqCisgIE51ciBFTSB1bmQgTWFpbnRhaW5lciBkdWVyZmVuIGRpZSBzaWNoZXJlbiBGdW5rdGlvbmVuIG51dHplbgorKi8KK2ludCBzZWN1cmUoKQoreworCWlmIChBUkNIX1NFQ1VSSVRZIHx8IElTX01BSU5UQUlORVIodGhpc19pbnRlcmFjdGl2ZSgpKSkgCisJICByZXR1cm4gMTsKKwllbHNlICAKKwkgIHJldHVybiAwOworfQorCisvKgorLyoqCisgRGllIEZ1bmt0aW9uIHZlcnN1Y2h0LCBkaWUgQ2xvbmVzIGRpZXNlcyBWQ3MgYXVzIGRlciBPYmpla3QgTGlzdCAKKyB6dSByZWdlbmVyaWVyZW4KKyovCisvKgoraW50IHJlZ2VuZXJhdGVfY2xvbmVfbGlzdCgpCit7CisJaWYgKHNpemVvZihvYmplY3RzKT09MCkKKwlIREVCVUcoIlRiZDogcmVnZW5lcmF0ZV9jbG9uZV9saXN0IGltIHZjIik7CisJCisJcmV0dXJuIDE7Cit9CisqLworCisvKioKKyAgRGllIEZ1bmt0aW9uIHplcnN0b2VydCBhbGxlIGJlcmVpdHMgZ2VjbG9udGVuIFNlaGVyaGF1c29iamVrdGUKKyAgRGFzIGdpYnQgd2lya2xpY2ggbnVyIGlycmUgd2VuaWdlIE1vbWVudGUsIHdvIGRhcyBuaWNodCBzY2hsZWNodCBpc3QuCisqLworaW50IGRlc2N0cnVjdF9hbGxfbXlfY2xvbmVzKCkKK3sKKyAgbWl4ZWQgb2I7CisKKyAgaWYgKCFzZWN1cmUoKSkgcmV0dXJuIDA7CisKKyAgaWYoIW1hcHBpbmdwKG9iamVjdHMpKSByZXR1cm4gMDsKKyAgCisgIGZvcihvYiA9IFF1ZXJ5T2JqZWN0cygpOyBzaXplb2Yob2IpOyBvYiA9IG9iWzEuLl0pCisgIHsKKyAgICBpZihvYmplY3RwKG9iWzBdKSkKKyAgICB7CisgICAgICBvYlswXS0+cmVtb3ZlKCk7CisgICAgICBpZihvYmplY3RwKG9iWzBdKSkgZGVzdHJ1Y3Qob2JbMF0pOworICAgIH0KKyAgfQorICAgCisgIHJldHVybiAxOworfQorCg==